ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDJiMzkxNjguLmU4YjdkMzY2IDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTIxNjYsNyArMjE2Niw2IEBACiAKIE46IFBhdmVsIE1hY2hlawogRTogcGF2ZWxAdWN3LmN6Ci1FOiBwYXZlbEBzdXNlLmN6CiBEOiBTb2Z0Y3Vyc29yIGZvciB2Z2EsIGh5cGVydGVjaCBjZHJvbSBzdXBwb3J0LCB2Y3NhIGJ1Z2ZpeCwgbmJkCiBEOiBzdW40LzMzMCBwb3J0LCBjYXBhYmlsaXRpZXMgZm9yIGVsZiwgc3BlZWR1cCBmb3Igcm0gb24gZXh0MiwgVVNCLAogRDogd29yayBvbiBzdXNwZW5kLXRvLXJhbS9kaXNrLCBraWxsaW5nIGR1cGxpY2F0ZXMgZnJvbSBpb2N0bDMyCkBAIC0zNzM5LDcgKzM3MzgsNyBAQAogUzogR2VybWFueQogCiBOOiBHZXJ0amFuIHZhbiBXaW5nZXJkZQotRTogZ3dpbmdlcmRlQGhvbWUubmwKK0U6IGd3aW5nZXJkZUBnbWFpbC5jb20KIEQ6IFJhbGluayBydDJ4MDAgV0xBTiBkcml2ZXIKIEQ6IE1pbml4IFYyIGZpbGUtc3lzdGVtCiBEOiBNaXNjIGZpeGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2ltYV9wb2xpY3kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2ltYV9wb2xpY3kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzNGYwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQpAQCAtMCwwICsxLDYxIEBACitXaGF0OgkJc2VjdXJpdHkvaW1hL3BvbGljeQorRGF0ZToJCU1heSAyMDA4CitDb250YWN0OglNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorRGVzY3JpcHRpb246CisJCVRoZSBUcnVzdGVkIENvbXB1dGluZyBHcm91cChUQ0cpIHJ1bnRpbWUgSW50ZWdyaXR5CisJCU1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpIG1haW50YWlucyBhIGxpc3Qgb2YgaGFzaAorCQl2YWx1ZXMgb2YgZXhlY3V0YWJsZXMgYW5kIG90aGVyIHNlbnNpdGl2ZSBzeXN0ZW0gZmlsZXMKKwkJbG9hZGVkIGludG8gdGhlIHJ1bi10aW1lIG9mIHRoaXMgc3lzdGVtLiAgQXQgcnVudGltZSwKKwkJdGhlIHBvbGljeSBjYW4gYmUgY29uc3RyYWluZWQgYmFzZWQgb24gTFNNIHNwZWNpZmljIGRhdGEuCisJCVBvbGljaWVzIGFyZSBsb2FkZWQgaW50byB0aGUgc2VjdXJpdHlmcyBmaWxlIGltYS9wb2xpY3kKKwkJYnkgb3BlbmluZyB0aGUgZmlsZSwgd3JpdGluZyB0aGUgcnVsZXMgb25lIGF0IGEgdGltZSBhbmQKKwkJdGhlbiBjbG9zaW5nIHRoZSBmaWxlLiAgVGhlIG5ldyBwb2xpY3kgdGFrZXMgZWZmZWN0IGFmdGVyCisJCXRoZSBmaWxlIGltYS9wb2xpY3kgaXMgY2xvc2VkLgorCisJCXJ1bGUgZm9ybWF0OiBhY3Rpb24gW2NvbmRpdGlvbiAuLi5dCisKKwkJYWN0aW9uOiBtZWFzdXJlIHwgZG9udF9tZWFzdXJlCisJCWNvbmRpdGlvbjo9IGJhc2UgfCBsc20KKwkJCWJhc2U6CVtbZnVuYz1dIFttYXNrPV0gW2ZzbWFnaWM9XSBbdWlkPV1dCisJCQlsc206CVtbc3Vial91c2VyPV0gW3N1Ympfcm9sZT1dIFtzdWJqX3R5cGU9XQorCQkJCSBbb2JqX3VzZXI9XSBbb2JqX3JvbGU9XSBbb2JqX3R5cGU9XV0KKworCQliYXNlOiAJZnVuYzo9IFtCUFJNX0NIRUNLXVtGSUxFX01NQVBdW0lOT0RFX1BFUk1JU1NJT05dCisJCQltYXNrOj0gW01BWV9SRUFEXSBbTUFZX1dSSVRFXSBbTUFZX0FQUEVORF0gW01BWV9FWEVDXQorCQkJZnNtYWdpYzo9IGhleCB2YWx1ZQorCQkJdWlkOj0gZGVjaW1hbCB2YWx1ZQorCQlsc206ICAJYXJlIExTTSBzcGVjaWZpYworCisJCWRlZmF1bHQgcG9saWN5OgorCQkJIyBQUk9DX1NVUEVSX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDlmYTAKKwkJCSMgU1lTRlNfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4NjI2NTY1NzIKKwkJCSMgREVCVUdGU19NQUdJQworCQkJZG9udF9tZWFzdXJlIGZzbWFnaWM9MHg2NDYyNjcyMAorCQkJIyBUTVBGU19NQUdJQworCQkJZG9udF9tZWFzdXJlIGZzbWFnaWM9MHgwMTAyMTk5NAorCQkJIyBTRUNVUklUWUZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDczNjM2NjczCisKKwkJCW1lYXN1cmUgZnVuYz1CUFJNX0NIRUNLCisJCQltZWFzdXJlIGZ1bmM9RklMRV9NTUFQIG1hc2s9TUFZX0VYRUMKKwkJCW1lYXN1cmUgZnVuYz1JTk9ERV9QRVJNIG1hc2s9TUFZX1JFQUQgdWlkPTAKKworCQlUaGUgZGVmYXVsdCBwb2xpY3kgbWVhc3VyZXMgYWxsIGV4ZWN1dGFibGVzIGluIGJwcm1fY2hlY2ssCisJCWFsbCBmaWxlcyBtbWFwcGVkIGV4ZWN1dGFibGUgaW4gZmlsZV9tbWFwLCBhbmQgYWxsIGZpbGVzCisJCW9wZW4gZm9yIHJlYWQgYnkgcm9vdCBpbiBpbm9kZV9wZXJtaXNzaW9uLgorCisJCUV4YW1wbGVzIG9mIExTTSBzcGVjaWZpYyBkZWZpbml0aW9uczoKKworCQlTRUxpbnV4OgorCQkJIyBTRUxJTlVYX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weEY5N0NGRjhDCisKKwkJCWRvbnRfbWVhc3VyZSBvYmpfdHlwZT12YXJfbG9nX3QKKwkJCWRvbnRfbWVhc3VyZSBvYmpfdHlwZT1hdWRpdGRfbG9nX3QKKwkJCW1lYXN1cmUgc3Vial91c2VyPXN5c3RlbV91IGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisJCQltZWFzdXJlIHN1Ympfcm9sZT1zeXN0ZW1fciBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRAorCisJCVNtYWNrOgorCQkJbWVhc3VyZSBzdWJqX3VzZXI9XyBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCmluZGV4IGNlZGRjZmYuLmU2MzhlMTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKQEAgLTEsMyArMSw0NiBAQAorV2hhdDoJCS9zeXMvYnVzL3BjaS9kcml2ZXJzLy4uLi9iaW5kCitEYXRlOgkJRGVjZW1iZXIgMjAwMworQ29udGFjdDoJbGludXgtcGNpQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisJCVdyaXRpbmcgYSBkZXZpY2UgbG9jYXRpb24gdG8gdGhpcyBmaWxlIHdpbGwgY2F1c2UKKwkJdGhlIGRyaXZlciB0byBhdHRlbXB0IHRvIGJpbmQgdG8gdGhlIGRldmljZSBmb3VuZCBhdAorCQl0aGlzIGxvY2F0aW9uLglUaGlzIGlzIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyBkZWZhdWx0CisJCWJpbmRpbmdzLiAgVGhlIGZvcm1hdCBmb3IgdGhlIGxvY2F0aW9uIGlzOiBEREREOkJCOkRELkYuCisJCVRoYXQgaXMgRG9tYWluOkJ1czpEZXZpY2UuRnVuY3Rpb24gYW5kIGlzIHRoZSBzYW1lIGFzCisJCWZvdW5kIGluIC9zeXMvYnVzL3BjaS9kZXZpY2VzLy4gIEZvciBleGFtcGxlOgorCQkjIGVjaG8gMDAwMDowMDoxOS4wID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvZm9vL2JpbmQKKwkJKE5vdGU6IGtlcm5lbHMgYmVmb3JlIDIuNi4yOCBtYXkgcmVxdWlyZSBlY2hvIC1uKS4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kcml2ZXJzLy4uLi91bmJpbmQKK0RhdGU6CQlEZWNlbWJlciAyMDAzCitDb250YWN0OglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKwkJV3JpdGluZyBhIGRldmljZSBsb2NhdGlvbiB0byB0aGlzIGZpbGUgd2lsbCBjYXVzZSB0aGUKKwkJZHJpdmVyIHRvIGF0dGVtcHQgdG8gdW5iaW5kIGZyb20gdGhlIGRldmljZSBmb3VuZCBhdAorCQl0aGlzIGxvY2F0aW9uLglUaGlzIG1heSBiZSB1c2VmdWwgd2hlbiBvdmVycmlkaW5nIGRlZmF1bHQKKwkJYmluZGluZ3MuICBUaGUgZm9ybWF0IGZvciB0aGUgbG9jYXRpb24gaXM6IEREREQ6QkI6REQuRi4KKwkJVGhhdCBpcyBEb21haW46QnVzOkRldmljZS5GdW5jdGlvbiBhbmQgaXMgdGhlIHNhbWUgYXMKKwkJZm91bmQgaW4gL3N5cy9idXMvcGNpL2RldmljZXMvLiBGb3IgZXhhbXBsZToKKwkJIyBlY2hvIDAwMDA6MDA6MTkuMCA+IC9zeXMvYnVzL3BjaS9kcml2ZXJzL2Zvby91bmJpbmQKKwkJKE5vdGU6IGtlcm5lbHMgYmVmb3JlIDIuNi4yOCBtYXkgcmVxdWlyZSBlY2hvIC1uKS4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kcml2ZXJzLy4uLi9uZXdfaWQKK0RhdGU6CQlEZWNlbWJlciAyMDAzCitDb250YWN0OglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKwkJV3JpdGluZyBhIGRldmljZSBJRCB0byB0aGlzIGZpbGUgd2lsbCBhdHRlbXB0IHRvCisJCWR5bmFtaWNhbGx5IGFkZCBhIG5ldyBkZXZpY2UgSUQgdG8gYSBQQ0kgZGV2aWNlIGRyaXZlci4KKwkJVGhpcyBtYXkgYWxsb3cgdGhlIGRyaXZlciB0byBzdXBwb3J0IG1vcmUgaGFyZHdhcmUgdGhhbgorCQl3YXMgaW5jbHVkZWQgaW4gdGhlIGRyaXZlcidzIHN0YXRpYyBkZXZpY2UgSUQgc3VwcG9ydAorCQl0YWJsZSBhdCBjb21waWxlIHRpbWUuICBUaGUgZm9ybWF0IGZvciB0aGUgZGV2aWNlIElEIGlzOgorCQlWVlZWIEREREQgU1ZWViBTREREIENDQ0MgTU1NTSBQUFBQLiAgVGhhdCBpcyBWZW5kb3IgSUQsCisJCURldmljZSBJRCwgU3Vic3lzdGVtIFZlbmRvciBJRCwgU3Vic3lzdGVtIERldmljZSBJRCwKKwkJQ2xhc3MsIENsYXNzIE1hc2ssIGFuZCBQcml2YXRlIERyaXZlciBEYXRhLiAgVGhlIFZlbmRvciBJRAorCQlhbmQgRGV2aWNlIElEIGZpZWxkcyBhcmUgcmVxdWlyZWQsIHRoZSByZXN0IGFyZSBvcHRpb25hbC4KKwkJVXBvbiBzdWNjZXNzZnVsbHkgYWRkaW5nIGFuIElELCB0aGUgZHJpdmVyIHdpbGwgcHJvYmUKKwkJZm9yIHRoZSBkZXZpY2UgYW5kIGF0dGVtcHQgdG8gYmluZCB0byBpdC4gIEZvciBleGFtcGxlOgorCQkjIGVjaG8gIjgwODYgMTBmNSIgPiAvc3lzL2J1cy9wY2kvZHJpdmVycy9mb28vbmV3X2lkCisKIFdoYXQ6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vdnBkCiBEYXRlOgkJRmVicnVhcnkgMjAwOAogQ29udGFjdDoJQmVuIEh1dGNoaW5ncyA8Ymh1dGNoaW5nc0Bzb2xhcmZsYXJlLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZmlybXdhcmUtbWVtbWFwIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1maXJtd2FyZS1tZW1tYXAKaW5kZXggMGQ5OWVlNi4uZWNhMGQ2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1maXJtd2FyZS1tZW1tYXAKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1maXJtd2FyZS1tZW1tYXAKQEAgLTEsNiArMSw2IEBACiBXaGF0OgkJL3N5cy9maXJtd2FyZS9tZW1tYXAvCiBEYXRlOgkJSnVuZSAyMDA4Ci1Db250YWN0OglCZXJuaGFyZCBXYWxsZSA8YndhbGxlQHN1c2UuZGU+CitDb250YWN0OglCZXJuaGFyZCBXYWxsZSA8YmVybmhhcmQud2FsbGVAZ214LmRlPgogRGVzY3JpcHRpb246CiAJCU9uIGFsbCBwbGF0Zm9ybXMsIHRoZSBmaXJtd2FyZSBwcm92aWRlcyBhIG1lbW9yeSBtYXAgd2hpY2ggdGhlCiAJCWtlcm5lbCByZWFkcy4gVGhlIHJlc291cmNlcyBmcm9tIHRoYXQgbWVtb3J5IG1hcCBhcmUgcmVnaXN0ZXJlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IGRjMzE1NGUuLmEzYTgzZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTYsMTMgKzYsMTQgQEAKICMgVG8gYWRkIGEgbmV3IGJvb2sgdGhlIG9ubHkgc3RlcCByZXF1aXJlZCBpcyB0byBhZGQgdGhlIGJvb2sgdG8gdGhlCiAjIGxpc3Qgb2YgRE9DQk9PS1MuCiAKLURPQ0JPT0tTIDo9IHo4NTMwYm9vay54bWwgbWNhYm9vay54bWwgXAorRE9DQk9PS1MgOj0gejg1MzBib29rLnhtbCBtY2Fib29rLnhtbCBkZXZpY2UtZHJpdmVycy54bWwgXAogCSAgICBrZXJuZWwtaGFja2luZy54bWwga2VybmVsLWxvY2tpbmcueG1sIGRldmljZWlvYm9vay54bWwgXAogCSAgICBwcm9jZnMtZ3VpZGUueG1sIHdyaXRpbmdfdXNiX2RyaXZlci54bWwgbmV0d29ya2luZy54bWwgXAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKIAkgICAgZ2FkZ2V0LnhtbCBsaWJhdGEueG1sIG10ZG5hbmQueG1sIGxpYnJzLnhtbCByYXBpZGlvLnhtbCBcCiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCi0JICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sCisJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKKwkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCmluZGV4IDlkNjQ0ZjcuLjAyMzBhOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApAQCAtMSwxMSArMSwxMSBAQAotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjQuMS8vRU4iPgotCi08Ym9vaz4KLTw/ZGJodG1sIGZpbGVuYW1lPSJpbmRleC5odG1sIj4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgogCiA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIDwhLS0gSGVhZGVyICAtLT4KIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPGJvb2sgaWQ9IkFMU0EtRHJpdmVyLUFQSSI+CiAgIDxib29raW5mbz4KICAgICA8dGl0bGU+VGhlIEFMU0EgRHJpdmVyIEFQSTwvdGl0bGU+CiAKQEAgLTM1LDYgKzM1LDggQEAKIAogICA8L2Jvb2tpbmZvPgogCis8dG9jPjwvdG9jPgorCiAgIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnZW1lbnQ8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2luaXQuYwpAQCAtNzEsNiArNzMsMTAgQEAKICFFc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCiAhRXNvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKICAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5WaXJ0dWFsIE1hc3RlciBDb250cm9sIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvdm1hc3Rlci5jCishSWluY2x1ZGUvc291bmQvY29udHJvbC5oCisgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KICAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgpAQCAtODksNiArOTUsOSBAQAogICAgICA8c2VjdDE+PHRpdGxlPkhhcmR3YXJlLURlcGVuZGVudCBEZXZpY2VzIEFQSTwvdGl0bGU+CiAhRXNvdW5kL2NvcmUvaHdkZXAuYwogICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkphY2sgQWJzdHJhY3Rpb24gTGF5ZXIgQVBJPC90aXRsZT4KKyFFc291bmQvY29yZS9qYWNrLmMKKyAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5JU0EgRE1BIEhlbHBlcnM8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2lzYWRtYS5jCiAgICAgIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbApAQCAtMCwwICsxLDQxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJMaW51eERyaXZlcnNBUEkiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPkxpbnV4IERldmljZSBEcml2ZXJzPC90aXRsZT4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9IkJhc2ljcyI+CisgICAgIDx0aXRsZT5Ecml2ZXIgQmFzaWNzPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Ecml2ZXIgRW50cnkgYW5kIEV4aXQgcG9pbnRzPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9pbml0LmgKKyAgICAgPC9zZWN0MT4KKworICAgICA8c2VjdDE+PHRpdGxlPkF0b21pYyBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb248L3RpdGxlPgorIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaAorIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAorICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+RGVsYXlpbmcsIHNjaGVkdWxpbmcsIGFuZCB0aW1lciByb3V0aW5lczwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvc2NoZWQuaAorIUVrZXJuZWwvc2NoZWQuYworIUVrZXJuZWwvdGltZXIuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkhpZ2gtcmVzb2x1dGlvbiB0aW1lcnM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L2t0aW1lLmgKKyFJaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKyFFa2VybmVsL2hydGltZXIuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPldvcmtxdWV1ZXMgYW5kIEtldmVudHM8L3RpdGxlPgorIUVrZXJuZWwvd29ya3F1ZXVlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5JbnRlcm5hbCBGdW5jdGlvbnM8L3RpdGxlPgorIUlrZXJuZWwvZXhpdC5jCishSWtlcm5lbC9zaWduYWwuYworIUlpbmNsdWRlL2xpbnV4L2t0aHJlYWQuaAorIUVrZXJuZWwva3RocmVhZC5jCisgICAgIDwvc2VjdDE+CisKKyAgICAgPHNlY3QxPjx0aXRsZT5LZXJuZWwgb2JqZWN0cyBtYW5pcHVsYXRpb248L3RpdGxlPgorPCEtLQorWCFJaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKKy0tPgorIUVsaWIva29iamVjdC5jCisgICAgIDwvc2VjdDE+CisKKyAgICAgPHNlY3QxPjx0aXRsZT5LZXJuZWwgdXRpbGl0eSBmdW5jdGlvbnM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L2tlcm5lbC5oCishRWtlcm5lbC9wcmludGsuYworIUVrZXJuZWwvcGFuaWMuYworIUVrZXJuZWwvc3lzLmMKKyFFa2VybmVsL3JjdXBkYXRlLmMKKyAgICAgPC9zZWN0MT4KKworICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBSZXNvdXJjZSBNYW5hZ2VtZW50PC90aXRsZT4KKyFFZHJpdmVycy9iYXNlL2RldnJlcy5jCisgICAgIDwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkZXZkcml2ZXJzIj4KKyAgICAgPHRpdGxlPkRldmljZSBkcml2ZXJzIGluZnJhc3RydWN0dXJlPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgRHJpdmVycyBCYXNlPC90aXRsZT4KKzwhLS0KK1ghSWluY2x1ZGUvbGludXgvZGV2aWNlLmgKKy0tPgorIUVkcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKyFFZHJpdmVycy9iYXNlL2NvcmUuYworIUVkcml2ZXJzL2Jhc2UvY2xhc3MuYworIUVkcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworIUVkcml2ZXJzL2Jhc2UvdHJhbnNwb3J0X2NsYXNzLmMKKzwhLS0gQ2Fubm90IGJlIGluY2x1ZGVkLCBiZWNhdXNlCisgICAgIGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2NsYXNzX2RldmljZV9hZGFwdGVyCisgYW5kIGF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fY29udGFpbmVyCisgICAgIGV4Y2VlZCBhbGxvd2VkIDQ0IGNoYXJhY3RlcnMgbWF4aW11bQorWCFFZHJpdmVycy9iYXNlL2F0dHJpYnV0ZV9jb250YWluZXIuYworLS0+CishRWRyaXZlcnMvYmFzZS9zeXMuYworPCEtLQorWCFFZHJpdmVycy9iYXNlL2ludGVyZmFjZS5jCistLT4KKyFFZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKyFFZHJpdmVycy9iYXNlL2J1cy5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RGV2aWNlIERyaXZlcnMgUG93ZXIgTWFuYWdlbWVudDwvdGl0bGU+CishRWRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgRHJpdmVycyBBQ1BJIFN1cHBvcnQ8L3RpdGxlPgorPCEtLSBJbnRlcm5hbCBmdW5jdGlvbnMgb25seQorWCFFZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYworWCFFZHJpdmVycy9hY3BpL3NsZWVwL3dha2V1cC5jCitYIUVkcml2ZXJzL2FjcGkvbW90aGVyYm9hcmQuYworWCFFZHJpdmVycy9hY3BpL2J1cy5jCistLT4KKyFFZHJpdmVycy9hY3BpL3NjYW4uYworIUlkcml2ZXJzL2FjcGkvc2Nhbi5jCis8IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cworWCFFZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKKy0tPgorICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBkcml2ZXJzIFBuUCBzdXBwb3J0PC90aXRsZT4KKyFJZHJpdmVycy9wbnAvY29yZS5jCis8IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cworWCFFZHJpdmVycy9wbnAvc3lzdGVtLmMKKyAtLT4KKyFFZHJpdmVycy9wbnAvY2FyZC5jCishSWRyaXZlcnMvcG5wL2RyaXZlci5jCishRWRyaXZlcnMvcG5wL21hbmFnZXIuYworIUVkcml2ZXJzL3BucC9zdXBwb3J0LmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Vc2Vyc3BhY2UgSU8gZGV2aWNlczwvdGl0bGU+CishRWRyaXZlcnMvdWlvL3Vpby5jCishSWluY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0icGFycG9ydGRldiI+CisgICAgIDx0aXRsZT5QYXJhbGxlbCBQb3J0IERldmljZXM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAorIUVkcml2ZXJzL3BhcnBvcnQvaWVlZTEyODQuYworIUVkcml2ZXJzL3BhcnBvcnQvc2hhcmUuYworIUlkcml2ZXJzL3BhcnBvcnQvZGFpc3kuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9Im1lc3NhZ2VfZGV2aWNlcyI+CisJPHRpdGxlPk1lc3NhZ2UtYmFzZWQgZGV2aWNlczwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+RnVzaW9uIG1lc3NhZ2UgZGV2aWNlczwvdGl0bGU+CishRWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCishSWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCishRWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworIUlkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKKyFJZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYworIUlkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCishSWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYworIUlkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+STJPIG1lc3NhZ2UgZGV2aWNlczwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvaTJvLmgKKyFJZHJpdmVycy9tZXNzYWdlL2kyby9jb3JlLmgKKyFFZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYworIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCishSWRyaXZlcnMvbWVzc2FnZS9pMm8vY29uZmlnLW9zbS5jCishRWRyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKKyFJZHJpdmVycy9tZXNzYWdlL2kyby9idXMtb3NtLmMKKyFFZHJpdmVycy9tZXNzYWdlL2kyby9kZXZpY2UuYworIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jCishSWRyaXZlcnMvbWVzc2FnZS9pMm8vZHJpdmVyLmMKKyFJZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYworIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCishSWRyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYworIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJzbmRkZXYiPgorICAgICA8dGl0bGU+U291bmQgRGV2aWNlczwvdGl0bGU+CishSWluY2x1ZGUvc291bmQvY29yZS5oCishRXNvdW5kL3NvdW5kX2NvcmUuYworIUlpbmNsdWRlL3NvdW5kL3BjbS5oCishRXNvdW5kL2NvcmUvcGNtLmMKKyFFc291bmQvY29yZS9kZXZpY2UuYworIUVzb3VuZC9jb3JlL2luZm8uYworIUVzb3VuZC9jb3JlL3Jhd21pZGkuYworIUVzb3VuZC9jb3JlL3NvdW5kLmMKKyFFc291bmQvY29yZS9tZW1vcnkuYworIUVzb3VuZC9jb3JlL3BjbV9tZW1vcnkuYworIUVzb3VuZC9jb3JlL2luaXQuYworIUVzb3VuZC9jb3JlL2lzYWRtYS5jCishRXNvdW5kL2NvcmUvY29udHJvbC5jCishRXNvdW5kL2NvcmUvcGNtX2xpYi5jCishRXNvdW5kL2NvcmUvaHdkZXAuYworIUVzb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworIUVzb3VuZC9jb3JlL21lbWFsbG9jLmMKKzwhLS0gRklYTUU6IFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBubyBzdHJ1Y3R1cmVkIGNvbW1lbnRzIGluIHNvdXJjZQorWCFJc291bmQvc291bmRfZmlybXdhcmUuYworLS0+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0idWFydDE2eDUwIj4KKyAgICAgPHRpdGxlPjE2eDUwIFVBUlQgRHJpdmVyPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCishRWRyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKyFFZHJpdmVycy9zZXJpYWwvODI1MC5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZmJkZXYiPgorICAgICA8dGl0bGU+RnJhbWUgQnVmZmVyIExpYnJhcnk8L3RpdGxlPgorCisgICAgIDxwYXJhPgorICAgICAgIFRoZSBmcmFtZSBidWZmZXIgZHJpdmVycyBkZXBlbmQgaGVhdmlseSBvbiBmb3VyIGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBkZWNsYXJlZCBpbiBpbmNsdWRlL2xpbnV4L2ZiLmguICBUaGV5IGFyZQorICAgICAgIGZiX2luZm8sIGZiX3Zhcl9zY3JlZW5pbmZvLCBmYl9maXhfc2NyZWVuaW5mbyBhbmQgZmJfbW9ub3NwZWNzLgorICAgICAgIFRoZSBsYXN0IHRocmVlIGNhbiBiZSBtYWRlIGF2YWlsYWJsZSB0byBhbmQgZnJvbSB1c2VybGFuZC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIGZiX2luZm8gZGVmaW5lcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIHBhcnRpY3VsYXIgdmlkZW8gY2FyZC4KKyAgICAgICBJbnNpZGUgZmJfaW5mbywgdGhlcmUgZXhpc3RzIGEgZmJfb3BzIHN0cnVjdHVyZSB3aGljaCBpcyBhCisgICAgICAgY29sbGVjdGlvbiBvZiBuZWVkZWQgZnVuY3Rpb25zIHRvIG1ha2UgZmJkZXYgYW5kIGZiY29uIHdvcmsuCisgICAgICAgZmJfaW5mbyBpcyBvbmx5IHZpc2libGUgdG8gdGhlIGtlcm5lbC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIGZiX3Zhcl9zY3JlZW5pbmZvIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGZlYXR1cmVzIG9mIGEgdmlkZW8gY2FyZAorICAgICAgIHRoYXQgYXJlIHVzZXIgZGVmaW5lZC4gIFdpdGggZmJfdmFyX3NjcmVlbmluZm8sIHRoaW5ncyBzdWNoIGFzCisgICAgICAgZGVwdGggYW5kIHRoZSByZXNvbHV0aW9uIG1heSBiZSBkZWZpbmVkLgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICAgVGhlIG5leHQgc3RydWN0dXJlIGlzIGZiX2ZpeF9zY3JlZW5pbmZvLiBUaGlzIGRlZmluZXMgdGhlCisgICAgICAgcHJvcGVydGllcyBvZiBhIGNhcmQgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIGEgbW9kZSBpcyBzZXQgYW5kIGNhbid0CisgICAgICAgYmUgY2hhbmdlZCBvdGhlcndpc2UuICBBIGdvb2QgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICBmcmFtZSBidWZmZXIgbWVtb3J5LiAgVGhpcyAibG9ja3MiIHRoZSBhZGRyZXNzIG9mIHRoZSBmcmFtZSBidWZmZXIKKyAgICAgICBtZW1vcnksIHNvIHRoYXQgaXQgY2Fubm90IGJlIGNoYW5nZWQgb3IgbW92ZWQuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBUaGUgbGFzdCBzdHJ1Y3R1cmUgaXMgZmJfbW9ub3NwZWNzLiBJbiB0aGUgb2xkIEFQSSwgdGhlcmUgd2FzCisgICAgICAgbGl0dGxlIGltcG9ydGFuY2UgZm9yIGZiX21vbm9zcGVjcy4gVGhpcyBhbGxvd2VkIGZvciBmb3JiaWRkZW4gdGhpbmdzCisgICAgICAgc3VjaCBhcyBzZXR0aW5nIGEgbW9kZSBvZiA4MDB4NjAwIG9uIGEgZml4IGZyZXF1ZW5jeSBtb25pdG9yLiBXaXRoCisgICAgICAgdGhlIG5ldyBBUEksIGZiX21vbm9zcGVjcyBwcmV2ZW50cyBzdWNoIHRoaW5ncywgYW5kIGlmIHVzZWQKKyAgICAgICBjb3JyZWN0bHksIGNhbiBwcmV2ZW50IGEgbW9uaXRvciBmcm9tIGJlaW5nIGNvb2tlZC4gIGZiX21vbm9zcGVjcworICAgICAgIHdpbGwgbm90IGJlIHVzZWZ1bCB1bnRpbCBrZXJuZWxzIDIuNS54LgorICAgICA8L3BhcmE+CisKKyAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgTWVtb3J5PC90aXRsZT4KKyFFZHJpdmVycy92aWRlby9mYm1lbS5jCisgICAgIDwvc2VjdDE+Cis8IS0tCisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIENvbnNvbGU8L3RpdGxlPgorWCFFZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKyAgICAgPC9zZWN0MT4KKy0tPgorICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBDb2xvcm1hcDwvdGl0bGU+CishRWRyaXZlcnMvdmlkZW8vZmJjbWFwLmMKKyAgICAgPC9zZWN0MT4KKzwhLS0gRklYTUU6CisgIGRyaXZlcnMvdmlkZW8vZmJnZW4uYyBoYXMgbm8gZG9jcywgd2hpY2ggc3R1ZmZzIHVwIHRoZSBzZ21sLiAgQ29tbWVudAorICBvdXQgdW50aWwgc29tZWJvZHkgYWRkcyBkb2NzLiAgS0FPCisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIEdlbmVyaWMgRnVuY3Rpb25zPC90aXRsZT4KK1ghSWRyaXZlcnMvdmlkZW8vZmJnZW4uYworICAgICA8L3NlY3QxPgorS0FPIC0tPgorICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBWaWRlbyBNb2RlIERhdGFiYXNlPC90aXRsZT4KKyFJZHJpdmVycy92aWRlby9tb2RlZGIuYworIUVkcml2ZXJzL3ZpZGVvL21vZGVkYi5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIE1hY2ludG9zaCBWaWRlbyBNb2RlIERhdGFiYXNlPC90aXRsZT4KKyFFZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIEZvbnRzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgIFJlZmVyIHRvIHRoZSBmaWxlIGRyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+Cis8IS0tIEZJWE1FOiBSZW1vdmVkIGZvciBub3cgc2luY2Ugbm8gc3RydWN0dXJlZCBjb21tZW50cyBpbiBzb3VyY2UKK1ghSWRyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCistLT4KKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJpbnB1dF9zdWJzeXN0ZW0iPgorICAgICA8dGl0bGU+SW5wdXQgU3Vic3lzdGVtPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9pbnB1dC5oCishRWRyaXZlcnMvaW5wdXQvaW5wdXQuYworIUVkcml2ZXJzL2lucHV0L2ZmLWNvcmUuYworIUVkcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InNwaSI+CisgICAgICA8dGl0bGU+U2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIChTUEkpPC90aXRsZT4KKyAgPHBhcmE+CisJU1BJIGlzIHRoZSAiU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIiwgd2lkZWx5IHVzZWQgd2l0aAorCWVtYmVkZGVkIHN5c3RlbXMgYmVjYXVzZSBpdCBpcyBhIHNpbXBsZSBhbmQgZWZmaWNpZW50CisJaW50ZXJmYWNlOiAgYmFzaWNhbGx5IGEgbXVsdGlwbGV4ZWQgc2hpZnQgcmVnaXN0ZXIuCisJSXRzIHRocmVlIHNpZ25hbCB3aXJlcyBob2xkIGEgY2xvY2sgKFNDSywgb2Z0ZW4gaW4gdGhlIHJhbmdlCisJb2YgMS0yMCBNSHopLCBhICJNYXN0ZXIgT3V0LCBTbGF2ZSBJbiIgKE1PU0kpIGRhdGEgbGluZSwgYW5kCisJYSAiTWFzdGVyIEluLCBTbGF2ZSBPdXQiIChNSVNPKSBkYXRhIGxpbmUuCisJU1BJIGlzIGEgZnVsbCBkdXBsZXggcHJvdG9jb2w7IGZvciBlYWNoIGJpdCBzaGlmdGVkIG91dCB0aGUKKwlNT1NJIGxpbmUgKG9uZSBwZXIgY2xvY2spIGFub3RoZXIgaXMgc2hpZnRlZCBpbiBvbiB0aGUgTUlTTyBsaW5lLgorCVRob3NlIGJpdHMgYXJlIGFzc2VtYmxlZCBpbnRvIHdvcmRzIG9mIHZhcmlvdXMgc2l6ZXMgb24gdGhlCisJd2F5IHRvIGFuZCBmcm9tIHN5c3RlbSBtZW1vcnkuCisJQW4gYWRkaXRpb25hbCBjaGlwc2VsZWN0IGxpbmUgaXMgdXN1YWxseSBhY3RpdmUtbG93IChuQ1MpOworCWZvdXIgc2lnbmFscyBhcmUgbm9ybWFsbHkgdXNlZCBmb3IgZWFjaCBwZXJpcGhlcmFsLCBwbHVzCisJc29tZXRpbWVzIGFuIGludGVycnVwdC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgU1BJIGJ1cyBmYWNpbGl0aWVzIGxpc3RlZCBoZXJlIHByb3ZpZGUgYSBnZW5lcmFsaXplZAorCWludGVyZmFjZSB0byBkZWNsYXJlIFNQSSBidXNzZXMgYW5kIGRldmljZXMsIG1hbmFnZSB0aGVtCisJYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCBMaW51eCBkcml2ZXIgbW9kZWwsIGFuZCBwZXJmb3JtCisJaW5wdXQvb3V0cHV0IG9wZXJhdGlvbnMuCisJQXQgdGhpcyB0aW1lLCBvbmx5ICJtYXN0ZXIiIHNpZGUgaW50ZXJmYWNlcyBhcmUgc3VwcG9ydGVkLAorCXdoZXJlIExpbnV4IHRhbGtzIHRvIFNQSSBwZXJpcGhlcmFscyBhbmQgZG9lcyBub3QgaW1wbGVtZW50CisJc3VjaCBhIHBlcmlwaGVyYWwgaXRzZWxmLgorCShJbnRlcmZhY2VzIHRvIHN1cHBvcnQgaW1wbGVtZW50aW5nIFNQSSBzbGF2ZXMgd291bGQKKwluZWNlc3NhcmlseSBsb29rIGRpZmZlcmVudC4pCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIHByb2dyYW1taW5nIGludGVyZmFjZSBpcyBzdHJ1Y3R1cmVkIGFyb3VuZCB0d28ga2luZHMgb2YgZHJpdmVyLAorCWFuZCB0d28ga2luZHMgb2YgZGV2aWNlLgorCUEgIkNvbnRyb2xsZXIgRHJpdmVyIiBhYnN0cmFjdHMgdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUsIHdoaWNoIG1heQorCWJlIGFzIHNpbXBsZSBhcyBhIHNldCBvZiBHUElPIHBpbnMgb3IgYXMgY29tcGxleCBhcyBhIHBhaXIgb2YgRklGT3MKKwljb25uZWN0ZWQgdG8gZHVhbCBETUEgZW5naW5lcyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgU1BJIHNoaWZ0CisJcmVnaXN0ZXIgKG1heGltaXppbmcgdGhyb3VnaHB1dCkuICBTdWNoIGRyaXZlcnMgYnJpZGdlIGJldHdlZW4KKwl3aGF0ZXZlciBidXMgdGhleSBzaXQgb24gKG9mdGVuIHRoZSBwbGF0Zm9ybSBidXMpIGFuZCBTUEksIGFuZAorCWV4cG9zZSB0aGUgU1BJIHNpZGUgb2YgdGhlaXIgZGV2aWNlIGFzIGEKKwk8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX21hc3Rlcjwvc3RydWN0bmFtZT4uCisJU1BJIGRldmljZXMgYXJlIGNoaWxkcmVuIG9mIHRoYXQgbWFzdGVyLCByZXByZXNlbnRlZCBhcyBhCisJPHN0cnVjdG5hbWU+c3RydWN0IHNwaV9kZXZpY2U8L3N0cnVjdG5hbWU+IGFuZCBtYW51ZmFjdHVyZWQgZnJvbQorCTxzdHJ1Y3RuYW1lPnN0cnVjdCBzcGlfYm9hcmRfaW5mbzwvc3RydWN0bmFtZT4gZGVzY3JpcHRvcnMgd2hpY2gKKwlhcmUgdXN1YWxseSBwcm92aWRlZCBieSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBjb2RlLgorCUEgPHN0cnVjdG5hbWU+c3RydWN0IHNwaV9kcml2ZXI8L3N0cnVjdG5hbWU+IGlzIGNhbGxlZCBhCisJIlByb3RvY29sIERyaXZlciIsIGFuZCBpcyBib3VuZCB0byBhIHNwaV9kZXZpY2UgdXNpbmcgbm9ybWFsCisJZHJpdmVyIG1vZGVsIGNhbGxzLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSBJL08gbW9kZWwgaXMgYSBzZXQgb2YgcXVldWVkIG1lc3NhZ2VzLiAgUHJvdG9jb2wgZHJpdmVycworCXN1Ym1pdCBvbmUgb3IgbW9yZSA8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX21lc3NhZ2U8L3N0cnVjdG5hbWU+CisJb2JqZWN0cywgd2hpY2ggYXJlIHByb2Nlc3NlZCBhbmQgY29tcGxldGVkIGFzeW5jaHJvbm91c2x5LgorCShUaGVyZSBhcmUgc3luY2hyb25vdXMgd3JhcHBlcnMsIGhvd2V2ZXIuKSAgTWVzc2FnZXMgYXJlCisJYnVpbHQgZnJvbSBvbmUgb3IgbW9yZSA8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX3RyYW5zZmVyPC9zdHJ1Y3RuYW1lPgorCW9iamVjdHMsIGVhY2ggb2Ygd2hpY2ggd3JhcHMgYSBmdWxsIGR1cGxleCBTUEkgdHJhbnNmZXIuCisJQSB2YXJpZXR5IG9mIHByb3RvY29sIHR3ZWFraW5nIG9wdGlvbnMgYXJlIG5lZWRlZCwgYmVjYXVzZQorCWRpZmZlcmVudCBjaGlwcyBhZG9wdCB2ZXJ5IGRpZmZlcmVudCBwb2xpY2llcyBmb3IgaG93IHRoZXkKKwl1c2UgdGhlIGJpdHMgdHJhbnNmZXJyZWQgd2l0aCBTUEkuCisgIDwvcGFyYT4KKyFJaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKKyFGZHJpdmVycy9zcGkvc3BpLmMgc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8KKyFFZHJpdmVycy9zcGkvc3BpLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJpMmMiPgorICAgICA8dGl0bGU+STxzdXBlcnNjcmlwdD4yPC9zdXBlcnNjcmlwdD5DIGFuZCBTTUJ1cyBTdWJzeXN0ZW08L3RpdGxlPgorCisgICAgIDxwYXJhPgorCUk8c3VwZXJzY3JpcHQ+Mjwvc3VwZXJzY3JpcHQ+QyAob3Igd2l0aG91dCBmYW5jeSB0eXBvZ3JhcGh5LCAiSTJDIikKKwlpcyBhbiBhY3JvbnltIGZvciB0aGUgIkludGVyLUlDIiBidXMsIGEgc2ltcGxlIGJ1cyBwcm90b2NvbCB3aGljaCBpcworCXdpZGVseSB1c2VkIHdoZXJlIGxvdyBkYXRhIHJhdGUgY29tbXVuaWNhdGlvbnMgc3VmZmljZS4KKwlTaW5jZSBpdCdzIGFsc28gYSBsaWNlbnNlZCB0cmFkZW1hcmssIHNvbWUgdmVuZG9ycyB1c2UgYW5vdGhlcgorCW5hbWUgKHN1Y2ggYXMgIlR3by1XaXJlIEludGVyZmFjZSIsIFRXSSkgZm9yIHRoZSBzYW1lIGJ1cy4KKwlJMkMgb25seSBuZWVkcyB0d28gc2lnbmFscyAoU0NMIGZvciBjbG9jaywgU0RBIGZvciBkYXRhKSwgY29uc2VydmluZworCWJvYXJkIHJlYWwgZXN0YXRlIGFuZCBtaW5pbWl6aW5nIHNpZ25hbCBxdWFsaXR5IGlzc3Vlcy4KKwlNb3N0IEkyQyBkZXZpY2VzIHVzZSBzZXZlbiBiaXQgYWRkcmVzc2VzLCBhbmQgYnVzIHNwZWVkcyBvZiB1cAorCXRvIDQwMCBrSHo7IHRoZXJlJ3MgYSBoaWdoIHNwZWVkIGV4dGVuc2lvbiAoMy40IE1IeikgdGhhdCdzIG5vdCB5ZXQKKwlmb3VuZCB3aWRlIHVzZS4KKwlJMkMgaXMgYSBtdWx0aS1tYXN0ZXIgYnVzOyBvcGVuIGRyYWluIHNpZ25hbGluZyBpcyB1c2VkIHRvCisJYXJiaXRyYXRlIGJldHdlZW4gbWFzdGVycywgYXMgd2VsbCBhcyB0byBoYW5kc2hha2UgYW5kIHRvCisJc3luY2hyb25pemUgY2xvY2tzIGZyb20gc2xvd2VyIGNsaWVudHMuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKwlUaGUgTGludXggSTJDIHByb2dyYW1taW5nIGludGVyZmFjZXMgc3VwcG9ydCBvbmx5IHRoZSBtYXN0ZXIKKwlzaWRlIG9mIGJ1cyBpbnRlcmFjdGlvbnMsIG5vdCB0aGUgc2xhdmUgc2lkZS4KKwlUaGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGlzIHN0cnVjdHVyZWQgYXJvdW5kIHR3byBraW5kcyBvZiBkcml2ZXIsCisJYW5kIHR3byBraW5kcyBvZiBkZXZpY2UuCisJQW4gSTJDICJBZGFwdGVyIERyaXZlciIgYWJzdHJhY3RzIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlOyBpdCBiaW5kcworCXRvIGEgcGh5c2ljYWwgZGV2aWNlIChwZXJoYXBzIGEgUENJIGRldmljZSBvciBwbGF0Zm9ybV9kZXZpY2UpIGFuZAorCWV4cG9zZXMgYSA8c3RydWN0bmFtZT5zdHJ1Y3QgaTJjX2FkYXB0ZXI8L3N0cnVjdG5hbWU+IHJlcHJlc2VudGluZworCWVhY2ggSTJDIGJ1cyBzZWdtZW50IGl0IG1hbmFnZXMuCisJT24gZWFjaCBJMkMgYnVzIHNlZ21lbnQgd2lsbCBiZSBJMkMgZGV2aWNlcyByZXByZXNlbnRlZCBieSBhCisJPHN0cnVjdG5hbWU+c3RydWN0IGkyY19jbGllbnQ8L3N0cnVjdG5hbWU+LiAgVGhvc2UgZGV2aWNlcyB3aWxsCisJYmUgYm91bmQgdG8gYSA8c3RydWN0bmFtZT5zdHJ1Y3QgaTJjX2RyaXZlcjwvc3RydWN0bmFtZT4sCisJd2hpY2ggc2hvdWxkIGZvbGxvdyB0aGUgc3RhbmRhcmQgTGludXggZHJpdmVyIG1vZGVsLgorCShBdCB0aGlzIHdyaXRpbmcsIGEgbGVnYWN5IG1vZGVsIGlzIG1vcmUgd2lkZWx5IHVzZWQuKQorCVRoZXJlIGFyZSBmdW5jdGlvbnMgdG8gcGVyZm9ybSB2YXJpb3VzIEkyQyBwcm90b2NvbCBvcGVyYXRpb25zOyBhdAorCXRoaXMgd3JpdGluZyBhbGwgc3VjaCBmdW5jdGlvbnMgYXJlIHVzYWJsZSBvbmx5IGZyb20gdGFzayBjb250ZXh0LgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisJVGhlIFN5c3RlbSBNYW5hZ2VtZW50IEJ1cyAoU01CdXMpIGlzIGEgc2libGluZyBwcm90b2NvbC4gIE1vc3QgU01CdXMKKwlzeXN0ZW1zIGFyZSBhbHNvIEkyQyBjb25mb3JtYW50LiAgVGhlIGVsZWN0cmljYWwgY29uc3RyYWludHMgYXJlCisJdGlnaHRlciBmb3IgU01CdXMsIGFuZCBpdCBzdGFuZGFyZGl6ZXMgcGFydGljdWxhciBwcm90b2NvbCBtZXNzYWdlcworCWFuZCBpZGlvbXMuICBDb250cm9sbGVycyB0aGF0IHN1cHBvcnQgSTJDIGNhbiBhbHNvIHN1cHBvcnQgbW9zdAorCVNNQnVzIG9wZXJhdGlvbnMsIGJ1dCBTTUJ1cyBjb250cm9sbGVycyBkb24ndCBzdXBwb3J0IGFsbCB0aGUgcHJvdG9jb2wKKwlvcHRpb25zIHRoYXQgYW4gSTJDIGNvbnRyb2xsZXIgd2lsbC4KKwlUaGVyZSBhcmUgZnVuY3Rpb25zIHRvIHBlcmZvcm0gdmFyaW91cyBTTUJ1cyBwcm90b2NvbCBvcGVyYXRpb25zLAorCWVpdGhlciB1c2luZyBJMkMgcHJpbWl0aXZlcyBvciBieSBpc3N1aW5nIFNNQnVzIGNvbW1hbmRzIHRvCisJaTJjX2FkYXB0ZXIgZGV2aWNlcyB3aGljaCBkb24ndCBzdXBwb3J0IHRob3NlIEkyQyBvcGVyYXRpb25zLgorICAgICA8L3BhcmE+CisKKyFJaW5jbHVkZS9saW51eC9pMmMuaAorIUZkcml2ZXJzL2kyYy9pMmMtYm9hcmRpbmZvLmMgaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8KKyFFZHJpdmVycy9pMmMvaTJjLWNvcmUuYworICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCmluZGV4IDNhODgyZDkuLmM2NzFhMDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbApAQCAtNDQwLDYgKzQ0MCw3IEBACiAgICAgIHVzZWQgaW4gdGhlIGdlbmVyaWMgSVJRIGxheWVyLgogICAgICA8L3BhcmE+CiAhSWluY2x1ZGUvbGludXgvaXJxLmgKKyFJaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAppbmRleCA1ODE4ZmY3Li5iYzk2MmNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKQEAgLTM4LDU4ICszOCw2IEBACiAKIDx0b2M+PC90b2M+CiAKLSAgPGNoYXB0ZXIgaWQ9IkJhc2ljcyI+Ci0gICAgIDx0aXRsZT5Ecml2ZXIgQmFzaWNzPC90aXRsZT4KLSAgICAgPHNlY3QxPjx0aXRsZT5Ecml2ZXIgRW50cnkgYW5kIEV4aXQgcG9pbnRzPC90aXRsZT4KLSFJaW5jbHVkZS9saW51eC9pbml0LmgKLSAgICAgPC9zZWN0MT4KLQotICAgICA8c2VjdDE+PHRpdGxlPkF0b21pYyBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb248L3RpdGxlPgotIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaAotIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAotICAgICA8L3NlY3QxPgotCi0gICAgIDxzZWN0MT48dGl0bGU+RGVsYXlpbmcsIHNjaGVkdWxpbmcsIGFuZCB0aW1lciByb3V0aW5lczwvdGl0bGU+Ci0hSWluY2x1ZGUvbGludXgvc2NoZWQuaAotIUVrZXJuZWwvc2NoZWQuYwotIUVrZXJuZWwvdGltZXIuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPkhpZ2gtcmVzb2x1dGlvbiB0aW1lcnM8L3RpdGxlPgotIUlpbmNsdWRlL2xpbnV4L2t0aW1lLmgKLSFJaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKLSFFa2VybmVsL2hydGltZXIuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPldvcmtxdWV1ZXMgYW5kIEtldmVudHM8L3RpdGxlPgotIUVrZXJuZWwvd29ya3F1ZXVlLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5JbnRlcm5hbCBGdW5jdGlvbnM8L3RpdGxlPgotIUlrZXJuZWwvZXhpdC5jCi0hSWtlcm5lbC9zaWduYWwuYwotIUlpbmNsdWRlL2xpbnV4L2t0aHJlYWQuaAotIUVrZXJuZWwva3RocmVhZC5jCi0gICAgIDwvc2VjdDE+Ci0KLSAgICAgPHNlY3QxPjx0aXRsZT5LZXJuZWwgb2JqZWN0cyBtYW5pcHVsYXRpb248L3RpdGxlPgotPCEtLQotWCFJaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKLS0tPgotIUVsaWIva29iamVjdC5jCi0gICAgIDwvc2VjdDE+Ci0KLSAgICAgPHNlY3QxPjx0aXRsZT5LZXJuZWwgdXRpbGl0eSBmdW5jdGlvbnM8L3RpdGxlPgotIUlpbmNsdWRlL2xpbnV4L2tlcm5lbC5oCi0hRWtlcm5lbC9wcmludGsuYwotIUVrZXJuZWwvcGFuaWMuYwotIUVrZXJuZWwvc3lzLmMKLSFFa2VybmVsL3JjdXBkYXRlLmMKLSAgICAgPC9zZWN0MT4KLQotICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBSZXNvdXJjZSBNYW5hZ2VtZW50PC90aXRsZT4KLSFFZHJpdmVycy9iYXNlL2RldnJlcy5jCi0gICAgIDwvc2VjdDE+Ci0KLSAgPC9jaGFwdGVyPgotCiAgIDxjaGFwdGVyIGlkPSJhZHQiPgogICAgICA8dGl0bGU+RGF0YSBUeXBlczwvdGl0bGU+CiAgICAgIDxzZWN0MT48dGl0bGU+RG91Ymx5IExpbmtlZCBMaXN0czwvdGl0bGU+CkBAIC0yOTgsNjIgKzI0Niw2IEBACiAhSWtlcm5lbC9hY2N0LmMKICAgPC9jaGFwdGVyPgogCi0gIDxjaGFwdGVyIGlkPSJkZXZkcml2ZXJzIj4KLSAgICAgPHRpdGxlPkRldmljZSBkcml2ZXJzIGluZnJhc3RydWN0dXJlPC90aXRsZT4KLSAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgRHJpdmVycyBCYXNlPC90aXRsZT4KLTwhLS0KLVghSWluY2x1ZGUvbGludXgvZGV2aWNlLmgKLS0tPgotIUVkcml2ZXJzL2Jhc2UvZHJpdmVyLmMKLSFFZHJpdmVycy9iYXNlL2NvcmUuYwotIUVkcml2ZXJzL2Jhc2UvY2xhc3MuYwotIUVkcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwotIUVkcml2ZXJzL2Jhc2UvdHJhbnNwb3J0X2NsYXNzLmMKLTwhLS0gQ2Fubm90IGJlIGluY2x1ZGVkLCBiZWNhdXNlCi0gICAgIGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2NsYXNzX2RldmljZV9hZGFwdGVyCi0gYW5kIGF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fY29udGFpbmVyCi0gICAgIGV4Y2VlZCBhbGxvd2VkIDQ0IGNoYXJhY3RlcnMgbWF4aW11bQotWCFFZHJpdmVycy9iYXNlL2F0dHJpYnV0ZV9jb250YWluZXIuYwotLS0+Ci0hRWRyaXZlcnMvYmFzZS9zeXMuYwotPCEtLQotWCFFZHJpdmVycy9iYXNlL2ludGVyZmFjZS5jCi0tLT4KLSFFZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKLSFFZHJpdmVycy9iYXNlL2J1cy5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+RGV2aWNlIERyaXZlcnMgUG93ZXIgTWFuYWdlbWVudDwvdGl0bGU+Ci0hRWRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgRHJpdmVycyBBQ1BJIFN1cHBvcnQ8L3RpdGxlPgotPCEtLSBJbnRlcm5hbCBmdW5jdGlvbnMgb25seQotWCFFZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYwotWCFFZHJpdmVycy9hY3BpL3NsZWVwL3dha2V1cC5jCi1YIUVkcml2ZXJzL2FjcGkvbW90aGVyYm9hcmQuYwotWCFFZHJpdmVycy9hY3BpL2J1cy5jCi0tLT4KLSFFZHJpdmVycy9hY3BpL3NjYW4uYwotIUlkcml2ZXJzL2FjcGkvc2Nhbi5jCi08IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cwotWCFFZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKLS0tPgotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBkcml2ZXJzIFBuUCBzdXBwb3J0PC90aXRsZT4KLSFJZHJpdmVycy9wbnAvY29yZS5jCi08IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cwotWCFFZHJpdmVycy9wbnAvc3lzdGVtLmMKLSAtLT4KLSFFZHJpdmVycy9wbnAvY2FyZC5jCi0hSWRyaXZlcnMvcG5wL2RyaXZlci5jCi0hRWRyaXZlcnMvcG5wL21hbmFnZXIuYwotIUVkcml2ZXJzL3BucC9zdXBwb3J0LmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5Vc2Vyc3BhY2UgSU8gZGV2aWNlczwvdGl0bGU+Ci0hRWRyaXZlcnMvdWlvL3Vpby5jCi0hSWluY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCi0gICAgIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLQogICA8Y2hhcHRlciBpZD0iYmxrZGV2Ij4KICAgICAgPHRpdGxlPkJsb2NrIERldmljZXM8L3RpdGxlPgogIUVibG9jay9ibGstY29yZS5jCkBAIC0zODEsMjc1ICsyNzMsNiBAQAogIUVkcml2ZXJzL2NoYXIvbWlzYy5jCiAgIDwvY2hhcHRlcj4KIAotICA8Y2hhcHRlciBpZD0icGFycG9ydGRldiI+Ci0gICAgIDx0aXRsZT5QYXJhbGxlbCBQb3J0IERldmljZXM8L3RpdGxlPgotIUlpbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAotIUVkcml2ZXJzL3BhcnBvcnQvaWVlZTEyODQuYwotIUVkcml2ZXJzL3BhcnBvcnQvc2hhcmUuYwotIUlkcml2ZXJzL3BhcnBvcnQvZGFpc3kuYwotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9Im1lc3NhZ2VfZGV2aWNlcyI+Ci0JPHRpdGxlPk1lc3NhZ2UtYmFzZWQgZGV2aWNlczwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+RnVzaW9uIG1lc3NhZ2UgZGV2aWNlczwvdGl0bGU+Ci0hRWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCi0hSWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCi0hRWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwotIUlkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKLSFJZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwotIUlkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCi0hSWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwotIUlkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+STJPIG1lc3NhZ2UgZGV2aWNlczwvdGl0bGU+Ci0hSWluY2x1ZGUvbGludXgvaTJvLmgKLSFJZHJpdmVycy9tZXNzYWdlL2kyby9jb3JlLmgKLSFFZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwotIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCi0hSWRyaXZlcnMvbWVzc2FnZS9pMm8vY29uZmlnLW9zbS5jCi0hRWRyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYwotIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKLSFJZHJpdmVycy9tZXNzYWdlL2kyby9idXMtb3NtLmMKLSFFZHJpdmVycy9tZXNzYWdlL2kyby9kZXZpY2UuYwotIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jCi0hSWRyaXZlcnMvbWVzc2FnZS9pMm8vZHJpdmVyLmMKLSFJZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYwotIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCi0hSWRyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYwotIUlkcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKLSAgICAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJzbmRkZXYiPgotICAgICA8dGl0bGU+U291bmQgRGV2aWNlczwvdGl0bGU+Ci0hSWluY2x1ZGUvc291bmQvY29yZS5oCi0hRXNvdW5kL3NvdW5kX2NvcmUuYwotIUlpbmNsdWRlL3NvdW5kL3BjbS5oCi0hRXNvdW5kL2NvcmUvcGNtLmMKLSFFc291bmQvY29yZS9kZXZpY2UuYwotIUVzb3VuZC9jb3JlL2luZm8uYwotIUVzb3VuZC9jb3JlL3Jhd21pZGkuYwotIUVzb3VuZC9jb3JlL3NvdW5kLmMKLSFFc291bmQvY29yZS9tZW1vcnkuYwotIUVzb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwotIUVzb3VuZC9jb3JlL2luaXQuYwotIUVzb3VuZC9jb3JlL2lzYWRtYS5jCi0hRXNvdW5kL2NvcmUvY29udHJvbC5jCi0hRXNvdW5kL2NvcmUvcGNtX2xpYi5jCi0hRXNvdW5kL2NvcmUvaHdkZXAuYwotIUVzb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwotIUVzb3VuZC9jb3JlL21lbWFsbG9jLmMKLTwhLS0gRklYTUU6IFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBubyBzdHJ1Y3R1cmVkIGNvbW1lbnRzIGluIHNvdXJjZQotWCFJc291bmQvc291bmRfZmlybXdhcmUuYwotLS0+Ci0gIDwvY2hhcHRlcj4KLQotICA8Y2hhcHRlciBpZD0idWFydDE2eDUwIj4KLSAgICAgPHRpdGxlPjE2eDUwIFVBUlQgRHJpdmVyPC90aXRsZT4KLSFJaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCi0hRWRyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKLSFFZHJpdmVycy9zZXJpYWwvODI1MC5jCi0gIDwvY2hhcHRlcj4KLQotICA8Y2hhcHRlciBpZD0iZmJkZXYiPgotICAgICA8dGl0bGU+RnJhbWUgQnVmZmVyIExpYnJhcnk8L3RpdGxlPgotCi0gICAgIDxwYXJhPgotICAgICAgIFRoZSBmcmFtZSBidWZmZXIgZHJpdmVycyBkZXBlbmQgaGVhdmlseSBvbiBmb3VyIGRhdGEgc3RydWN0dXJlcy4gIAotICAgICAgIFRoZXNlIHN0cnVjdHVyZXMgYXJlIGRlY2xhcmVkIGluIGluY2x1ZGUvbGludXgvZmIuaC4gIFRoZXkgYXJlIAotICAgICAgIGZiX2luZm8sIGZiX3Zhcl9zY3JlZW5pbmZvLCBmYl9maXhfc2NyZWVuaW5mbyBhbmQgZmJfbW9ub3NwZWNzLiAKLSAgICAgICBUaGUgbGFzdCB0aHJlZSBjYW4gYmUgbWFkZSBhdmFpbGFibGUgdG8gYW5kIGZyb20gdXNlcmxhbmQuIAotICAgICA8L3BhcmE+Ci0KLSAgICAgPHBhcmE+Ci0gICAgICAgZmJfaW5mbyBkZWZpbmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgcGFydGljdWxhciB2aWRlbyBjYXJkLiAKLSAgICAgICBJbnNpZGUgZmJfaW5mbywgdGhlcmUgZXhpc3RzIGEgZmJfb3BzIHN0cnVjdHVyZSB3aGljaCBpcyBhIAotICAgICAgIGNvbGxlY3Rpb24gb2YgbmVlZGVkIGZ1bmN0aW9ucyB0byBtYWtlIGZiZGV2IGFuZCBmYmNvbiB3b3JrLgotICAgICAgIGZiX2luZm8gaXMgb25seSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwuCi0gICAgIDwvcGFyYT4KLQotICAgICA8cGFyYT4KLSAgICAgICBmYl92YXJfc2NyZWVuaW5mbyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmZWF0dXJlcyBvZiBhIHZpZGVvIGNhcmQgCi0gICAgICAgdGhhdCBhcmUgdXNlciBkZWZpbmVkLiAgV2l0aCBmYl92YXJfc2NyZWVuaW5mbywgdGhpbmdzIHN1Y2ggYXMKLSAgICAgICBkZXB0aCBhbmQgdGhlIHJlc29sdXRpb24gbWF5IGJlIGRlZmluZWQuCi0gICAgIDwvcGFyYT4KLQotICAgICA8cGFyYT4KLSAgICAgICBUaGUgbmV4dCBzdHJ1Y3R1cmUgaXMgZmJfZml4X3NjcmVlbmluZm8uIFRoaXMgZGVmaW5lcyB0aGUgCi0gICAgICAgcHJvcGVydGllcyBvZiBhIGNhcmQgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIGEgbW9kZSBpcyBzZXQgYW5kIGNhbid0IAotICAgICAgIGJlIGNoYW5nZWQgb3RoZXJ3aXNlLiAgQSBnb29kIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIAotICAgICAgIGZyYW1lIGJ1ZmZlciBtZW1vcnkuICBUaGlzICJsb2NrcyIgdGhlIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGJ1ZmZlcgotICAgICAgIG1lbW9yeSwgc28gdGhhdCBpdCBjYW5ub3QgYmUgY2hhbmdlZCBvciBtb3ZlZC4KLSAgICAgPC9wYXJhPgotCi0gICAgIDxwYXJhPgotICAgICAgIFRoZSBsYXN0IHN0cnVjdHVyZSBpcyBmYl9tb25vc3BlY3MuIEluIHRoZSBvbGQgQVBJLCB0aGVyZSB3YXMgCi0gICAgICAgbGl0dGxlIGltcG9ydGFuY2UgZm9yIGZiX21vbm9zcGVjcy4gVGhpcyBhbGxvd2VkIGZvciBmb3JiaWRkZW4gdGhpbmdzIAotICAgICAgIHN1Y2ggYXMgc2V0dGluZyBhIG1vZGUgb2YgODAweDYwMCBvbiBhIGZpeCBmcmVxdWVuY3kgbW9uaXRvci4gV2l0aCAKLSAgICAgICB0aGUgbmV3IEFQSSwgZmJfbW9ub3NwZWNzIHByZXZlbnRzIHN1Y2ggdGhpbmdzLCBhbmQgaWYgdXNlZCAKLSAgICAgICBjb3JyZWN0bHksIGNhbiBwcmV2ZW50IGEgbW9uaXRvciBmcm9tIGJlaW5nIGNvb2tlZC4gIGZiX21vbm9zcGVjcwotICAgICAgIHdpbGwgbm90IGJlIHVzZWZ1bCB1bnRpbCBrZXJuZWxzIDIuNS54LgotICAgICA8L3BhcmE+Ci0KLSAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgTWVtb3J5PC90aXRsZT4KLSFFZHJpdmVycy92aWRlby9mYm1lbS5jCi0gICAgIDwvc2VjdDE+Ci08IS0tCi0gICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIENvbnNvbGU8L3RpdGxlPgotWCFFZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKLSAgICAgPC9zZWN0MT4KLS0tPgotICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBDb2xvcm1hcDwvdGl0bGU+Ci0hRWRyaXZlcnMvdmlkZW8vZmJjbWFwLmMKLSAgICAgPC9zZWN0MT4KLTwhLS0gRklYTUU6Ci0gIGRyaXZlcnMvdmlkZW8vZmJnZW4uYyBoYXMgbm8gZG9jcywgd2hpY2ggc3R1ZmZzIHVwIHRoZSBzZ21sLiAgQ29tbWVudAotICBvdXQgdW50aWwgc29tZWJvZHkgYWRkcyBkb2NzLiAgS0FPCi0gICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIEdlbmVyaWMgRnVuY3Rpb25zPC90aXRsZT4KLVghSWRyaXZlcnMvdmlkZW8vZmJnZW4uYwotICAgICA8L3NlY3QxPgotS0FPIC0tPgotICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBWaWRlbyBNb2RlIERhdGFiYXNlPC90aXRsZT4KLSFJZHJpdmVycy92aWRlby9tb2RlZGIuYwotIUVkcml2ZXJzL3ZpZGVvL21vZGVkYi5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIE1hY2ludG9zaCBWaWRlbyBNb2RlIERhdGFiYXNlPC90aXRsZT4KLSFFZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIEZvbnRzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgIFJlZmVyIHRvIHRoZSBmaWxlIGRyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICA8L3BhcmE+Ci08IS0tIEZJWE1FOiBSZW1vdmVkIGZvciBub3cgc2luY2Ugbm8gc3RydWN0dXJlZCBjb21tZW50cyBpbiBzb3VyY2UKLVghSWRyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCi0tLT4KLSAgICAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJpbnB1dF9zdWJzeXN0ZW0iPgotICAgICA8dGl0bGU+SW5wdXQgU3Vic3lzdGVtPC90aXRsZT4KLSFJaW5jbHVkZS9saW51eC9pbnB1dC5oCi0hRWRyaXZlcnMvaW5wdXQvaW5wdXQuYwotIUVkcml2ZXJzL2lucHV0L2ZmLWNvcmUuYwotIUVkcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYwotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9InNwaSI+Ci0gICAgICA8dGl0bGU+U2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIChTUEkpPC90aXRsZT4KLSAgPHBhcmE+Ci0JU1BJIGlzIHRoZSAiU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIiwgd2lkZWx5IHVzZWQgd2l0aAotCWVtYmVkZGVkIHN5c3RlbXMgYmVjYXVzZSBpdCBpcyBhIHNpbXBsZSBhbmQgZWZmaWNpZW50Ci0JaW50ZXJmYWNlOiAgYmFzaWNhbGx5IGEgbXVsdGlwbGV4ZWQgc2hpZnQgcmVnaXN0ZXIuCi0JSXRzIHRocmVlIHNpZ25hbCB3aXJlcyBob2xkIGEgY2xvY2sgKFNDSywgb2Z0ZW4gaW4gdGhlIHJhbmdlCi0Jb2YgMS0yMCBNSHopLCBhICJNYXN0ZXIgT3V0LCBTbGF2ZSBJbiIgKE1PU0kpIGRhdGEgbGluZSwgYW5kCi0JYSAiTWFzdGVyIEluLCBTbGF2ZSBPdXQiIChNSVNPKSBkYXRhIGxpbmUuCi0JU1BJIGlzIGEgZnVsbCBkdXBsZXggcHJvdG9jb2w7IGZvciBlYWNoIGJpdCBzaGlmdGVkIG91dCB0aGUKLQlNT1NJIGxpbmUgKG9uZSBwZXIgY2xvY2spIGFub3RoZXIgaXMgc2hpZnRlZCBpbiBvbiB0aGUgTUlTTyBsaW5lLgotCVRob3NlIGJpdHMgYXJlIGFzc2VtYmxlZCBpbnRvIHdvcmRzIG9mIHZhcmlvdXMgc2l6ZXMgb24gdGhlCi0Jd2F5IHRvIGFuZCBmcm9tIHN5c3RlbSBtZW1vcnkuCi0JQW4gYWRkaXRpb25hbCBjaGlwc2VsZWN0IGxpbmUgaXMgdXN1YWxseSBhY3RpdmUtbG93IChuQ1MpOwotCWZvdXIgc2lnbmFscyBhcmUgbm9ybWFsbHkgdXNlZCBmb3IgZWFjaCBwZXJpcGhlcmFsLCBwbHVzCi0Jc29tZXRpbWVzIGFuIGludGVycnVwdC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLQlUaGUgU1BJIGJ1cyBmYWNpbGl0aWVzIGxpc3RlZCBoZXJlIHByb3ZpZGUgYSBnZW5lcmFsaXplZAotCWludGVyZmFjZSB0byBkZWNsYXJlIFNQSSBidXNzZXMgYW5kIGRldmljZXMsIG1hbmFnZSB0aGVtCi0JYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCBMaW51eCBkcml2ZXIgbW9kZWwsIGFuZCBwZXJmb3JtCi0JaW5wdXQvb3V0cHV0IG9wZXJhdGlvbnMuCi0JQXQgdGhpcyB0aW1lLCBvbmx5ICJtYXN0ZXIiIHNpZGUgaW50ZXJmYWNlcyBhcmUgc3VwcG9ydGVkLAotCXdoZXJlIExpbnV4IHRhbGtzIHRvIFNQSSBwZXJpcGhlcmFscyBhbmQgZG9lcyBub3QgaW1wbGVtZW50Ci0Jc3VjaCBhIHBlcmlwaGVyYWwgaXRzZWxmLgotCShJbnRlcmZhY2VzIHRvIHN1cHBvcnQgaW1wbGVtZW50aW5nIFNQSSBzbGF2ZXMgd291bGQKLQluZWNlc3NhcmlseSBsb29rIGRpZmZlcmVudC4pCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JVGhlIHByb2dyYW1taW5nIGludGVyZmFjZSBpcyBzdHJ1Y3R1cmVkIGFyb3VuZCB0d28ga2luZHMgb2YgZHJpdmVyLAotCWFuZCB0d28ga2luZHMgb2YgZGV2aWNlLgotCUEgIkNvbnRyb2xsZXIgRHJpdmVyIiBhYnN0cmFjdHMgdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUsIHdoaWNoIG1heQotCWJlIGFzIHNpbXBsZSBhcyBhIHNldCBvZiBHUElPIHBpbnMgb3IgYXMgY29tcGxleCBhcyBhIHBhaXIgb2YgRklGT3MKLQljb25uZWN0ZWQgdG8gZHVhbCBETUEgZW5naW5lcyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgU1BJIHNoaWZ0Ci0JcmVnaXN0ZXIgKG1heGltaXppbmcgdGhyb3VnaHB1dCkuICBTdWNoIGRyaXZlcnMgYnJpZGdlIGJldHdlZW4KLQl3aGF0ZXZlciBidXMgdGhleSBzaXQgb24gKG9mdGVuIHRoZSBwbGF0Zm9ybSBidXMpIGFuZCBTUEksIGFuZAotCWV4cG9zZSB0aGUgU1BJIHNpZGUgb2YgdGhlaXIgZGV2aWNlIGFzIGEKLQk8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX21hc3Rlcjwvc3RydWN0bmFtZT4uCi0JU1BJIGRldmljZXMgYXJlIGNoaWxkcmVuIG9mIHRoYXQgbWFzdGVyLCByZXByZXNlbnRlZCBhcyBhCi0JPHN0cnVjdG5hbWU+c3RydWN0IHNwaV9kZXZpY2U8L3N0cnVjdG5hbWU+IGFuZCBtYW51ZmFjdHVyZWQgZnJvbQotCTxzdHJ1Y3RuYW1lPnN0cnVjdCBzcGlfYm9hcmRfaW5mbzwvc3RydWN0bmFtZT4gZGVzY3JpcHRvcnMgd2hpY2gKLQlhcmUgdXN1YWxseSBwcm92aWRlZCBieSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBjb2RlLgotCUEgPHN0cnVjdG5hbWU+c3RydWN0IHNwaV9kcml2ZXI8L3N0cnVjdG5hbWU+IGlzIGNhbGxlZCBhCi0JIlByb3RvY29sIERyaXZlciIsIGFuZCBpcyBib3VuZCB0byBhIHNwaV9kZXZpY2UgdXNpbmcgbm9ybWFsCi0JZHJpdmVyIG1vZGVsIGNhbGxzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotCVRoZSBJL08gbW9kZWwgaXMgYSBzZXQgb2YgcXVldWVkIG1lc3NhZ2VzLiAgUHJvdG9jb2wgZHJpdmVycwotCXN1Ym1pdCBvbmUgb3IgbW9yZSA8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX21lc3NhZ2U8L3N0cnVjdG5hbWU+Ci0Jb2JqZWN0cywgd2hpY2ggYXJlIHByb2Nlc3NlZCBhbmQgY29tcGxldGVkIGFzeW5jaHJvbm91c2x5LgotCShUaGVyZSBhcmUgc3luY2hyb25vdXMgd3JhcHBlcnMsIGhvd2V2ZXIuKSAgTWVzc2FnZXMgYXJlCi0JYnVpbHQgZnJvbSBvbmUgb3IgbW9yZSA8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX3RyYW5zZmVyPC9zdHJ1Y3RuYW1lPgotCW9iamVjdHMsIGVhY2ggb2Ygd2hpY2ggd3JhcHMgYSBmdWxsIGR1cGxleCBTUEkgdHJhbnNmZXIuCi0JQSB2YXJpZXR5IG9mIHByb3RvY29sIHR3ZWFraW5nIG9wdGlvbnMgYXJlIG5lZWRlZCwgYmVjYXVzZQotCWRpZmZlcmVudCBjaGlwcyBhZG9wdCB2ZXJ5IGRpZmZlcmVudCBwb2xpY2llcyBmb3IgaG93IHRoZXkKLQl1c2UgdGhlIGJpdHMgdHJhbnNmZXJyZWQgd2l0aCBTUEkuCi0gIDwvcGFyYT4KLSFJaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKLSFGZHJpdmVycy9zcGkvc3BpLmMgc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8KLSFFZHJpdmVycy9zcGkvc3BpLmMKLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJpMmMiPgotICAgICA8dGl0bGU+STxzdXBlcnNjcmlwdD4yPC9zdXBlcnNjcmlwdD5DIGFuZCBTTUJ1cyBTdWJzeXN0ZW08L3RpdGxlPgotCi0gICAgIDxwYXJhPgotCUk8c3VwZXJzY3JpcHQ+Mjwvc3VwZXJzY3JpcHQ+QyAob3Igd2l0aG91dCBmYW5jeSB0eXBvZ3JhcGh5LCAiSTJDIikKLQlpcyBhbiBhY3JvbnltIGZvciB0aGUgIkludGVyLUlDIiBidXMsIGEgc2ltcGxlIGJ1cyBwcm90b2NvbCB3aGljaCBpcwotCXdpZGVseSB1c2VkIHdoZXJlIGxvdyBkYXRhIHJhdGUgY29tbXVuaWNhdGlvbnMgc3VmZmljZS4KLQlTaW5jZSBpdCdzIGFsc28gYSBsaWNlbnNlZCB0cmFkZW1hcmssIHNvbWUgdmVuZG9ycyB1c2UgYW5vdGhlcgotCW5hbWUgKHN1Y2ggYXMgIlR3by1XaXJlIEludGVyZmFjZSIsIFRXSSkgZm9yIHRoZSBzYW1lIGJ1cy4KLQlJMkMgb25seSBuZWVkcyB0d28gc2lnbmFscyAoU0NMIGZvciBjbG9jaywgU0RBIGZvciBkYXRhKSwgY29uc2VydmluZwotCWJvYXJkIHJlYWwgZXN0YXRlIGFuZCBtaW5pbWl6aW5nIHNpZ25hbCBxdWFsaXR5IGlzc3Vlcy4KLQlNb3N0IEkyQyBkZXZpY2VzIHVzZSBzZXZlbiBiaXQgYWRkcmVzc2VzLCBhbmQgYnVzIHNwZWVkcyBvZiB1cAotCXRvIDQwMCBrSHo7IHRoZXJlJ3MgYSBoaWdoIHNwZWVkIGV4dGVuc2lvbiAoMy40IE1IeikgdGhhdCdzIG5vdCB5ZXQKLQlmb3VuZCB3aWRlIHVzZS4KLQlJMkMgaXMgYSBtdWx0aS1tYXN0ZXIgYnVzOyBvcGVuIGRyYWluIHNpZ25hbGluZyBpcyB1c2VkIHRvCi0JYXJiaXRyYXRlIGJldHdlZW4gbWFzdGVycywgYXMgd2VsbCBhcyB0byBoYW5kc2hha2UgYW5kIHRvCi0Jc3luY2hyb25pemUgY2xvY2tzIGZyb20gc2xvd2VyIGNsaWVudHMuCi0gICAgIDwvcGFyYT4KLQotICAgICA8cGFyYT4KLQlUaGUgTGludXggSTJDIHByb2dyYW1taW5nIGludGVyZmFjZXMgc3VwcG9ydCBvbmx5IHRoZSBtYXN0ZXIKLQlzaWRlIG9mIGJ1cyBpbnRlcmFjdGlvbnMsIG5vdCB0aGUgc2xhdmUgc2lkZS4KLQlUaGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGlzIHN0cnVjdHVyZWQgYXJvdW5kIHR3byBraW5kcyBvZiBkcml2ZXIsCi0JYW5kIHR3byBraW5kcyBvZiBkZXZpY2UuCi0JQW4gSTJDICJBZGFwdGVyIERyaXZlciIgYWJzdHJhY3RzIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlOyBpdCBiaW5kcwotCXRvIGEgcGh5c2ljYWwgZGV2aWNlIChwZXJoYXBzIGEgUENJIGRldmljZSBvciBwbGF0Zm9ybV9kZXZpY2UpIGFuZAotCWV4cG9zZXMgYSA8c3RydWN0bmFtZT5zdHJ1Y3QgaTJjX2FkYXB0ZXI8L3N0cnVjdG5hbWU+IHJlcHJlc2VudGluZwotCWVhY2ggSTJDIGJ1cyBzZWdtZW50IGl0IG1hbmFnZXMuCi0JT24gZWFjaCBJMkMgYnVzIHNlZ21lbnQgd2lsbCBiZSBJMkMgZGV2aWNlcyByZXByZXNlbnRlZCBieSBhCi0JPHN0cnVjdG5hbWU+c3RydWN0IGkyY19jbGllbnQ8L3N0cnVjdG5hbWU+LiAgVGhvc2UgZGV2aWNlcyB3aWxsCi0JYmUgYm91bmQgdG8gYSA8c3RydWN0bmFtZT5zdHJ1Y3QgaTJjX2RyaXZlcjwvc3RydWN0bmFtZT4sCi0Jd2hpY2ggc2hvdWxkIGZvbGxvdyB0aGUgc3RhbmRhcmQgTGludXggZHJpdmVyIG1vZGVsLgotCShBdCB0aGlzIHdyaXRpbmcsIGEgbGVnYWN5IG1vZGVsIGlzIG1vcmUgd2lkZWx5IHVzZWQuKQotCVRoZXJlIGFyZSBmdW5jdGlvbnMgdG8gcGVyZm9ybSB2YXJpb3VzIEkyQyBwcm90b2NvbCBvcGVyYXRpb25zOyBhdAotCXRoaXMgd3JpdGluZyBhbGwgc3VjaCBmdW5jdGlvbnMgYXJlIHVzYWJsZSBvbmx5IGZyb20gdGFzayBjb250ZXh0LgotICAgICA8L3BhcmE+Ci0KLSAgICAgPHBhcmE+Ci0JVGhlIFN5c3RlbSBNYW5hZ2VtZW50IEJ1cyAoU01CdXMpIGlzIGEgc2libGluZyBwcm90b2NvbC4gIE1vc3QgU01CdXMKLQlzeXN0ZW1zIGFyZSBhbHNvIEkyQyBjb25mb3JtYW50LiAgVGhlIGVsZWN0cmljYWwgY29uc3RyYWludHMgYXJlCi0JdGlnaHRlciBmb3IgU01CdXMsIGFuZCBpdCBzdGFuZGFyZGl6ZXMgcGFydGljdWxhciBwcm90b2NvbCBtZXNzYWdlcwotCWFuZCBpZGlvbXMuICBDb250cm9sbGVycyB0aGF0IHN1cHBvcnQgSTJDIGNhbiBhbHNvIHN1cHBvcnQgbW9zdAotCVNNQnVzIG9wZXJhdGlvbnMsIGJ1dCBTTUJ1cyBjb250cm9sbGVycyBkb24ndCBzdXBwb3J0IGFsbCB0aGUgcHJvdG9jb2wKLQlvcHRpb25zIHRoYXQgYW4gSTJDIGNvbnRyb2xsZXIgd2lsbC4KLQlUaGVyZSBhcmUgZnVuY3Rpb25zIHRvIHBlcmZvcm0gdmFyaW91cyBTTUJ1cyBwcm90b2NvbCBvcGVyYXRpb25zLAotCWVpdGhlciB1c2luZyBJMkMgcHJpbWl0aXZlcyBvciBieSBpc3N1aW5nIFNNQnVzIGNvbW1hbmRzIHRvCi0JaTJjX2FkYXB0ZXIgZGV2aWNlcyB3aGljaCBkb24ndCBzdXBwb3J0IHRob3NlIEkyQyBvcGVyYXRpb25zLgotICAgICA8L3BhcmE+Ci0KLSFJaW5jbHVkZS9saW51eC9pMmMuaAotIUZkcml2ZXJzL2kyYy9pMmMtYm9hcmRpbmZvLmMgaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8KLSFFZHJpdmVycy9pMmMvaTJjLWNvcmUuYwotICA8L2NoYXB0ZXI+Ci0KICAgPGNoYXB0ZXIgaWQ9ImNsayI+CiAgICAgIDx0aXRsZT5DbG9jayBGcmFtZXdvcms8L3RpdGxlPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKaW5kZXggNTJlMWI3OS4uOGY2ZTNiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbApAQCAtNDIsNiArNDIsMTMgQEAKIAogPHJldmhpc3Rvcnk+CiAJPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC44PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwOC0xMi0yNDwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+aGprPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIG5hbWUgYXR0cmlidXRlcyBpbiBtZW0gYW5kIHBvcnRpbyBzeXNmcyBkaXJlY3Rvcmllcy4KKwkJPC9yZXZyZW1hcms+CisJPC9yZXZpc2lvbj4KKwk8cmV2aXNpb24+CiAJPHJldm51bWJlcj4wLjc8L3Jldm51bWJlcj4KIAk8ZGF0ZT4yMDA4LTEyLTIzPC9kYXRlPgogCTxhdXRob3Jpbml0aWFscz5oams8L2F1dGhvcmluaXRpYWxzPgpAQCAtMzAzLDEyICszMTAsMTkgQEAKIAlhcHBlYXIgaWYgdGhlIHNpemUgb2YgdGhlIG1hcHBpbmcgaXMgbm90IDAuCiA8L3BhcmE+CiA8cGFyYT4KLQlFYWNoIDxmaWxlbmFtZT5tYXBYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0d28gcmVhZC1vbmx5IGZpbGVzCi0JdGhhdCBzaG93IHN0YXJ0IGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIG1lbW9yeToKKwlFYWNoIDxmaWxlbmFtZT5tYXBYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyBmb3VyIHJlYWQtb25seSBmaWxlcworCXRoYXQgc2hvdyBhdHRyaWJ1dGVzIG9mIHRoZSBtZW1vcnk6CiA8L3BhcmE+CiA8aXRlbWl6ZWRsaXN0PgogPGxpc3RpdGVtPgogCTxwYXJhPgorCTxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT46IEEgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoaXMgbWFwcGluZy4gVGhpcworCWlzIG9wdGlvbmFsLCB0aGUgc3RyaW5nIGNhbiBiZSBlbXB0eS4gRHJpdmVycyBjYW4gc2V0IHRoaXMgdG8gbWFrZSBpdAorCWVhc2llciBmb3IgdXNlcnNwYWNlIHRvIGZpbmQgdGhlIGNvcnJlY3QgbWFwcGluZy4KKwk8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCTxwYXJhPgogCTxmaWxlbmFtZT5hZGRyPC9maWxlbmFtZT46IFRoZSBhZGRyZXNzIG9mIG1lbW9yeSB0aGF0IGNhbiBiZSBtYXBwZWQuCiAJPC9wYXJhPgogPC9saXN0aXRlbT4KQEAgLTM2NiwxMiArMzgwLDE5IEBACiAJPGZpbGVuYW1lPi9zeXMvY2xhc3MvdWlvL3Vpb1gvcG9ydGlvLzwvZmlsZW5hbWU+LgogPC9wYXJhPgogPHBhcmE+Ci0JRWFjaCA8ZmlsZW5hbWU+cG9ydFgvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNvbnRhaW5zIHRocmVlIHJlYWQtb25seQotCWZpbGVzIHRoYXQgc2hvdyBzdGFydCwgc2l6ZSwgYW5kIHR5cGUgb2YgdGhlIHBvcnQgcmVnaW9uOgorCUVhY2ggPGZpbGVuYW1lPnBvcnRYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyBmb3VyIHJlYWQtb25seQorCWZpbGVzIHRoYXQgc2hvdyBuYW1lLCBzdGFydCwgc2l6ZSwgYW5kIHR5cGUgb2YgdGhlIHBvcnQgcmVnaW9uOgogPC9wYXJhPgogPGl0ZW1pemVkbGlzdD4KIDxsaXN0aXRlbT4KIAk8cGFyYT4KKwk8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+OiBBIHN0cmluZyBpZGVudGlmaWVyIGZvciB0aGlzIHBvcnQgcmVnaW9uLgorCVRoZSBzdHJpbmcgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBlbXB0eS4gRHJpdmVycyBjYW4gc2V0IGl0IHRvIG1ha2UgaXQKKwllYXNpZXIgZm9yIHVzZXJzcGFjZSB0byBmaW5kIGEgY2VydGFpbiBwb3J0IHJlZ2lvbi4KKwk8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCTxwYXJhPgogCTxmaWxlbmFtZT5zdGFydDwvZmlsZW5hbWU+OiBUaGUgZmlyc3QgcG9ydCBvZiB0aGlzIHJlZ2lvbi4KIAk8L3BhcmE+CiA8L2xpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKaW5kZXggODdhN2MwN2EuLjQ2YjA4ZmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCkBAIC0xLDExICsxLDExIEBACi08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+Ci0KLTxib29rPgotPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CiAKIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgogPCEtLSBIZWFkZXIgIC0tPgogPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8Ym9vayBpZD0iV3JpdGluZy1hbi1BTFNBLURyaXZlciI+CiAgIDxib29raW5mbz4KICAgICA8dGl0bGU+V3JpdGluZyBhbiBBTFNBIERyaXZlcjwvdGl0bGU+CiAgICAgPGF1dGhvcj4KQEAgLTQ5Miw5ICs0OTIsOSBAQAogICAgICAgICAgIH0KIAogICAgICAgICAgIC8qICgyKSAqLwotICAgICAgICAgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotICAgICAgICAgIGlmIChjYXJkID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAKICAgICAgICAgICAvKiAoMykgKi8KICAgICAgICAgICBlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKQEAgLTU5MCw4ICs1OTAsOSBAQAogICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogPCFbQ0RBVEFbCiAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKyAgaW50IGVycjsKICAgLi4uLgotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiBdXT4KICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CkBAIC04MDksMjYgKzgxMCwyOCBAQAogCiAgICAgICA8cGFyYT4KICAgICAgICAgQXMgbWVudGlvbmVkIGFib3ZlLCB0byBjcmVhdGUgYSBjYXJkIGluc3RhbmNlLCBjYWxsCi0gICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPi4KKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LgogCiAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CiAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogPCFbQ0RBVEFbCiAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIG1vZHVsZSwgZXh0cmFfc2l6ZSk7CisgIGludCBlcnI7CisgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIG1vZHVsZSwgZXh0cmFfc2l6ZSwgJmNhcmQpOwogXV0+CiAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBhcmd1bWVudHMsIHRoZSBjYXJkLWluZGV4IG51bWJlciwgdGhlCisgICAgICAgIFRoZSBmdW5jdGlvbiB0YWtlcyBmaXZlIGFyZ3VtZW50cywgdGhlIGNhcmQtaW5kZXggbnVtYmVyLCB0aGUKICAgICAgICAgaWQgc3RyaW5nLCB0aGUgbW9kdWxlIHBvaW50ZXIgKHVzdWFsbHkKICAgICAgICAgPGNvbnN0YW50PlRISVNfTU9EVUxFPC9jb25zdGFudD4pLAotICAgICAgICBhbmQgdGhlIHNpemUgb2YgZXh0cmEtZGF0YSBzcGFjZS4gIFRoZSBsYXN0IGFyZ3VtZW50IGlzIHVzZWQgdG8KKyAgICAgICAgdGhlIHNpemUgb2YgZXh0cmEtZGF0YSBzcGFjZSwgYW5kIHRoZSBwb2ludGVyIHRvIHJldHVybiB0aGUKKyAgICAgICAgY2FyZCBpbnN0YW5jZS4gIFRoZSBleHRyYV9zaXplIGFyZ3VtZW50IGlzIHVzZWQgdG8KICAgICAgICAgYWxsb2NhdGUgY2FyZC0mZ3Q7cHJpdmF0ZV9kYXRhIGZvciB0aGUKICAgICAgICAgY2hpcC1zcGVjaWZpYyBkYXRhLiAgTm90ZSB0aGF0IHRoZXNlIGRhdGEKLSAgICAgICAgYXJlIGFsbG9jYXRlZCBieSA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgYXJlIGFsbG9jYXRlZCBieSA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPi4KICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTkxNSwxNSArOTE4LDE2IEBACiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY2hpcC1zcGVjaWZpYy1zbmQtY2FyZC1uZXciPgotICAgICAgICA8dGl0bGU+MS4gQWxsb2NhdGluZyB2aWEgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uPC90aXRsZT4KKyAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CiAgICAgICAgIDxwYXJhPgogICAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBwYXNzIHRoZSBleHRyYS1kYXRhLWxlbmd0aAotCSAgdG8gdGhlIDR0aCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaS5lLgorCSAgdG8gdGhlIDR0aCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPiwgaS5lLgogCiAgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IG15Y2hpcCkpOworICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG15Y2hpcCksICZjYXJkKTsKIF1dPgogICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KQEAgLTk1Miw4ICs5NTYsOCBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgIEFmdGVyIGFsbG9jYXRpbmcgYSBjYXJkIGluc3RhbmNlIHZpYQotICAgICAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+ICh3aXRoCi0gICAgICAgICAgPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50PiBvbiB0aGUgNHRoIGFyZyksIGNhbGwKKyAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPiAod2l0aAorICAgICAgICAgIDxjb25zdGFudD4wPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCiAgICAgICAgICAgPGZ1bmN0aW9uPmt6YWxsb2MoKTwvZnVuY3Rpb24+LiAKIAogICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CkBAIC05NjEsNyArOTY1LDcgQEAKIDwhW0NEQVRBWwogICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAgIHN0cnVjdCBteWNoaXAgKmNoaXA7Ci0gIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIE5VTEwpOworICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKICAgLi4uLi4KICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiBdXT4KQEAgLTU3NTAsOCArNTc1NCw5IEBACiAgICAgICAgICAgLi4uLgogICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKICAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOworICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgLi4uLgotICAgICAgICAgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIE5VTEwpOworICAgICAgICAgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogICAgICAgICAgIC4uLi4KICAgICAgICAgICBjaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKICAgICAgICAgICAuLi4uCkBAIC01NzYzLDcgKzU3NjgsNyBAQAogICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CiAKIAlXaGVuIHlvdSBjcmVhdGVkIHRoZSBjaGlwIGRhdGEgd2l0aAotCTxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LCBpdCdzIGFueXdheSBhY2Nlc3NpYmxlCisJPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4sIGl0J3MgYW55d2F5IGFjY2Vzc2libGUKIAl2aWEgPHN0cnVjdGZpZWxkPnByaXZhdGVfZGF0YTwvc3RydWN0ZmllbGQ+IGZpZWxkLgogCiAgICAgICA8aW5mb3JtYWxleGFtcGxlPgpAQCAtNTc3NSw5ICs1NzgwLDEwIEBACiAgICAgICAgICAgLi4uLgogICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKICAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOworICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgLi4uLgotICAgICAgICAgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG15Y2hpcCkpOworICAgICAgICAgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteWNoaXApLCAmY2FyZCk7CiAgICAgICAgICAgLi4uLgogICAgICAgICAgIGNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAgICAgICAgICAgLi4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvUENJRUJVUy1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9QQ0lFQlVTLUhPV1RPLnR4dAppbmRleCA5YTA3ZTM4Li42YmQ1ZjM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9QQ0lFQlVTLUhPV1RPLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSS9QQ0lFQlVTLUhPV1RPLnR4dApAQCAtOTMsNyArOTMsNyBAQAogCiBpbnQgcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqbmV3KQogCi1UaGlzIEFQSSByZXBsYWNlcyB0aGUgTGludXggRHJpdmVyIE1vZGVsJ3MgcGNpX21vZHVsZV9pbml0IEFQSS4gQQorVGhpcyBBUEkgcmVwbGFjZXMgdGhlIExpbnV4IERyaXZlciBNb2RlbCdzIHBjaV9yZWdpc3Rlcl9kcml2ZXIgQVBJLiBBCiBzZXJ2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGxzIHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyIGF0CiBtb2R1bGUgaW5pdC4gTm90ZSB0aGF0IGFmdGVyIHNlcnZpY2UgZHJpdmVyIGJlaW5nIGxvYWRlZCwgY2FsbHMKIHN1Y2ggYXMgcGNpX2VuYWJsZV9kZXZpY2UoZGV2KSBhbmQgcGNpX3NldF9tYXN0ZXIoZGV2KSBhcmUgbm8gbG9uZ2VyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dAppbmRleCA2ZTI1MzQwLi5hY2NmZTJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKQEAgLTI5OCwzICsyOTgsMTUgQEAKIAogCU5vdGUgdGhhdCwgcmN1X2Fzc2lnbl9wb2ludGVyKCkgYW5kIHJjdV9kZXJlZmVyZW5jZSgpIHJlbGF0ZSB0bwogCVNSQ1UganVzdCBhcyB0aGV5IGRvIHRvIG90aGVyIGZvcm1zIG9mIFJDVS4KKworMTUuCVRoZSB3aG9sZSBwb2ludCBvZiBjYWxsX3JjdSgpLCBzeW5jaHJvbml6ZV9yY3UoKSwgYW5kIGZyaWVuZHMKKwlpcyB0byB3YWl0IHVudGlsIGFsbCBwcmUtZXhpc3RpbmcgcmVhZGVycyBoYXZlIGZpbmlzaGVkIGJlZm9yZQorCWNhcnJ5aW5nIG91dCBzb21lIG90aGVyd2lzZS1kZXN0cnVjdGl2ZSBvcGVyYXRpb24uICBJdCBpcworCXRoZXJlZm9yZSBjcml0aWNhbGx5IGltcG9ydGFudCB0byAtZmlyc3QtIHJlbW92ZSBhbnkgcGF0aAorCXRoYXQgcmVhZGVycyBjYW4gZm9sbG93IHRoYXQgY291bGQgYmUgYWZmZWN0ZWQgYnkgdGhlCisJZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uLCBhbmQgLW9ubHktIC10aGVuLSBpbnZva2UgY2FsbF9yY3UoKSwKKwlzeW5jaHJvbml6ZV9yY3UoKSwgb3IgZnJpZW5kcy4KKworCUJlY2F1c2UgdGhlc2UgcHJpbWl0aXZlcyBvbmx5IHdhaXQgZm9yIHByZS1leGlzdGluZyByZWFkZXJzLAorCWl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgc2FmZXR5IHRvCisJYW55IHN1YnNlcXVlbnQgcmVhZGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dAppbmRleCA2MzRjOTUyLi5kNWFmM2Y2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0CkBAIC0zNSw5ICszNSwzIEBACiAjIGVjaG8gYW50aWNpcGF0b3J5ID4gL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCiAjIGNhdCAvc3lzL2Jsb2NrL2hkYS9xdWV1ZS9zY2hlZHVsZXIKIG5vb3AgW2FudGljaXBhdG9yeV0gZGVhZGxpbmUgY2ZxCi0KLUVhY2ggaW8gcXVldWUgaGFzIGEgc2V0IG9mIGlvIHNjaGVkdWxlciB0dW5hYmxlcyBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZXNlCi10dW5hYmxlcyBjb250cm9sIGhvdyB0aGUgaW8gc2NoZWR1bGVyIHdvcmtzLiBZb3UgY2FuIGZpbmQgdGhlc2UgZW50cmllcwotaW46Ci0KLS9zeXMvYmxvY2svPGRldmljZT4vcXVldWUvaW9zY2hlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CmluZGV4IGQ5ZTVkNmYuLjkzZmViODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKQEAgLTI1MiwxMCArMjUyLDggQEAKIFdoZW4gYSB0YXNrIGlzIG1vdmVkIGZyb20gb25lIGNncm91cCB0byBhbm90aGVyLCBpdCBnZXRzIGEgbmV3CiBjc3Nfc2V0IHBvaW50ZXIgLSBpZiB0aGVyZSdzIGFuIGFscmVhZHkgZXhpc3RpbmcgY3NzX3NldCB3aXRoIHRoZQogZGVzaXJlZCBjb2xsZWN0aW9uIG9mIGNncm91cHMgdGhlbiB0aGF0IGdyb3VwIGlzIHJldXNlZCwgZWxzZSBhIG5ldwotY3NzX3NldCBpcyBhbGxvY2F0ZWQuIE5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIGEKLWxpbmVhciBzZWFyY2ggdG8gbG9jYXRlIGFuIGFwcHJvcHJpYXRlIGV4aXN0aW5nIGNzc19zZXQsIHNvIGlzbid0Ci12ZXJ5IGVmZmljaWVudC4gQSBmdXR1cmUgdmVyc2lvbiB3aWxsIHVzZSBhIGhhc2ggdGFibGUgZm9yIGJldHRlcgotcGVyZm9ybWFuY2UuCitjc3Nfc2V0IGlzIGFsbG9jYXRlZC4gVGhlIGFwcHJvcHJpYXRlIGV4aXN0aW5nIGNzc19zZXQgaXMgbG9jYXRlZCBieQorbG9va2luZyBpbnRvIGEgaGFzaCB0YWJsZS4KIAogVG8gYWxsb3cgYWNjZXNzIGZyb20gYSBjZ3JvdXAgdG8gdGhlIGNzc19zZXRzIChhbmQgaGVuY2UgdGFza3MpCiB0aGF0IGNvbXByaXNlIGl0LCBhIHNldCBvZiBjZ19jZ3JvdXBfbGluayBvYmplY3RzIGZvcm0gYSBsYXR0aWNlOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CmluZGV4IDVjODZjMjUuLjA2MTFlOTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKQEAgLTE0Miw3ICsxNDIsNyBAQAogIC0gaW4gZm9yayBhbmQgZXhpdCwgdG8gYXR0YWNoIGFuZCBkZXRhY2ggYSB0YXNrIGZyb20gaXRzIGNwdXNldC4KICAtIGluIHNjaGVkX3NldGFmZmluaXR5LCB0byBtYXNrIHRoZSByZXF1ZXN0ZWQgQ1BVcyBieSB3aGF0J3MKICAgIGFsbG93ZWQgaW4gdGhhdCB0YXNrcyBjcHVzZXQuCi0gLSBpbiBzY2hlZC5jIG1pZ3JhdGVfYWxsX3Rhc2tzKCksIHRvIGtlZXAgbWlncmF0aW5nIHRhc2tzIHdpdGhpbgorIC0gaW4gc2NoZWQuYyBtaWdyYXRlX2xpdmVfdGFza3MoKSwgdG8ga2VlcCBtaWdyYXRpbmcgdGFza3Mgd2l0aGluCiAgICB0aGUgQ1BVcyBhbGxvd2VkIGJ5IHRoZWlyIGNwdXNldCwgaWYgcG9zc2libGUuCiAgLSBpbiB0aGUgbWJpbmQgYW5kIHNldF9tZW1wb2xpY3kgc3lzdGVtIGNhbGxzLCB0byBtYXNrIHRoZSByZXF1ZXN0ZWQKICAgIE1lbW9yeSBOb2RlcyBieSB3aGF0J3MgYWxsb3dlZCBpbiB0aGF0IHRhc2tzIGNwdXNldC4KQEAgLTE3NSw2ICsxNzUsMTAgQEAKICAtIG1lbV9leGNsdXNpdmUgZmxhZzogaXMgbWVtb3J5IHBsYWNlbWVudCBleGNsdXNpdmU/CiAgLSBtZW1faGFyZHdhbGwgZmxhZzogIGlzIG1lbW9yeSBhbGxvY2F0aW9uIGhhcmR3YWxsZWQKICAtIG1lbW9yeV9wcmVzc3VyZTogbWVhc3VyZSBvZiBob3cgbXVjaCBwYWdpbmcgcHJlc3N1cmUgaW4gY3B1c2V0CisgLSBtZW1vcnlfc3ByZWFkX3BhZ2UgZmxhZzogaWYgc2V0LCBzcHJlYWQgcGFnZSBjYWNoZSBldmVubHkgb24gYWxsb3dlZCBub2RlcworIC0gbWVtb3J5X3NwcmVhZF9zbGFiIGZsYWc6IGlmIHNldCwgc3ByZWFkIHNsYWIgY2FjaGUgZXZlbmx5IG9uIGFsbG93ZWQgbm9kZXMKKyAtIHNjaGVkX2xvYWRfYmFsYW5jZSBmbGFnOiBpZiBzZXQsIGxvYWQgYmFsYW5jZSB3aXRoaW4gQ1BVcyBvbiB0aGF0IGNwdXNldAorIC0gc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsOiB0aGUgc2VhcmNoaW5nIHJhbmdlIHdoZW4gbWlncmF0aW5nIHRhc2tzCiAKIEluIGFkZGl0aW9uLCB0aGUgcm9vdCBjcHVzZXQgb25seSBoYXMgdGhlIGZvbGxvd2luZyBmaWxlOgogIC0gbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQgZmxhZzogY29tcHV0ZSBtZW1vcnlfcHJlc3N1cmU/CkBAIC0yNTIsNyArMjU2LDcgQEAKIAogVGhpcyBpcyB1c2VmdWwgYm90aCBvbiB0aWdodGx5IG1hbmFnZWQgc3lzdGVtcyBydW5uaW5nIGEgd2lkZSBtaXggb2YKIHN1Ym1pdHRlZCBqb2JzLCB3aGljaCBtYXkgY2hvb3NlIHRvIHRlcm1pbmF0ZSBvciByZS1wcmlvcml0aXplIGpvYnMgdGhhdAotYXJlIHRyeWluZyB0byB1c2UgbW9yZSBtZW1vcnkgdGhhbiBhbGxvd2VkIG9uIHRoZSBub2RlcyBhc3NpZ25lZCB0aGVtLAorYXJlIHRyeWluZyB0byB1c2UgbW9yZSBtZW1vcnkgdGhhbiBhbGxvd2VkIG9uIHRoZSBub2RlcyBhc3NpZ25lZCB0byB0aGVtLAogYW5kIHdpdGggdGlnaHRseSBjb3VwbGVkLCBsb25nIHJ1bm5pbmcsIG1hc3NpdmVseSBwYXJhbGxlbCBzY2llbnRpZmljCiBjb21wdXRpbmcgam9icyB0aGF0IHdpbGwgZHJhbWF0aWNhbGx5IGZhaWwgdG8gbWVldCByZXF1aXJlZCBwZXJmb3JtYW5jZQogZ29hbHMgaWYgdGhleSBzdGFydCB0byB1c2UgbW9yZSBtZW1vcnkgdGhhbiBhbGxvd2VkIHRvIHRoZW0uCkBAIC0zNzgsNyArMzgyLDcgQEAKIFRoZSBhbGdvcml0aG1pYyBjb3N0IG9mIGxvYWQgYmFsYW5jaW5nIGFuZCBpdHMgaW1wYWN0IG9uIGtleSBzaGFyZWQKIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgc3VjaCBhcyB0aGUgdGFzayBsaXN0IGluY3JlYXNlcyBtb3JlIHRoYW4KIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzIGJlaW5nIGJhbGFuY2VkLiAgU28gdGhlIHNjaGVkdWxlcgotaGFzIHN1cHBvcnQgdG8gIHBhcnRpdGlvbiB0aGUgc3lzdGVtcyBDUFVzIGludG8gYSBudW1iZXIgb2Ygc2NoZWQKK2hhcyBzdXBwb3J0IHRvIHBhcnRpdGlvbiB0aGUgc3lzdGVtcyBDUFVzIGludG8gYSBudW1iZXIgb2Ygc2NoZWQKIGRvbWFpbnMgc3VjaCB0aGF0IGl0IG9ubHkgbG9hZCBiYWxhbmNlcyB3aXRoaW4gZWFjaCBzY2hlZCBkb21haW4uCiBFYWNoIHNjaGVkIGRvbWFpbiBjb3ZlcnMgc29tZSBzdWJzZXQgb2YgdGhlIENQVXMgaW4gdGhlIHN5c3RlbTsKIG5vIHR3byBzY2hlZCBkb21haW5zIG92ZXJsYXA7IHNvbWUgQ1BVcyBtaWdodCBub3QgYmUgaW4gYW55IHNjaGVkCkBAIC00ODUsMTcgKzQ4OSwyMiBAQAogVGhlIGludGVybmFsIGtlcm5lbCBjcHVzZXQgdG8gc2NoZWR1bGVyIGludGVyZmFjZSBwYXNzZXMgZnJvbSB0aGUKIGNwdXNldCBjb2RlIHRvIHRoZSBzY2hlZHVsZXIgY29kZSBhIHBhcnRpdGlvbiBvZiB0aGUgbG9hZCBiYWxhbmNlZAogQ1BVcyBpbiB0aGUgc3lzdGVtLiBUaGlzIHBhcnRpdGlvbiBpcyBhIHNldCBvZiBzdWJzZXRzIChyZXByZXNlbnRlZAotYXMgYW4gYXJyYXkgb2YgY3B1bWFza190KSBvZiBDUFVzLCBwYWlyd2lzZSBkaXNqb2ludCwgdGhhdCBjb3ZlciBhbGwKLXRoZSBDUFVzIHRoYXQgbXVzdCBiZSBsb2FkIGJhbGFuY2VkLgorYXMgYW4gYXJyYXkgb2Ygc3RydWN0IGNwdW1hc2spIG9mIENQVXMsIHBhaXJ3aXNlIGRpc2pvaW50LCB0aGF0IGNvdmVyCithbGwgdGhlIENQVXMgdGhhdCBtdXN0IGJlIGxvYWQgYmFsYW5jZWQuCiAKLVdoZW5ldmVyIHRoZSAnc2NoZWRfbG9hZF9iYWxhbmNlJyBmbGFnIGNoYW5nZXMsIG9yIENQVXMgY29tZSBvciBnbwotZnJvbSBhIGNwdXNldCB3aXRoIHRoaXMgZmxhZyBlbmFibGVkLCBvciBhIGNwdXNldCB3aXRoIHRoaXMgZmxhZwotZW5hYmxlZCBpcyByZW1vdmVkLCB0aGUgY3B1c2V0IGNvZGUgYnVpbGRzIGEgbmV3IHN1Y2ggcGFydGl0aW9uIGFuZAotcGFzc2VzIGl0IHRvIHRoZSBzY2hlZHVsZXIgc2NoZWQgZG9tYWluIHNldHVwIGNvZGUsIHRvIGhhdmUgdGhlIHNjaGVkCi1kb21haW5zIHJlYnVpbHQgYXMgbmVjZXNzYXJ5LgorVGhlIGNwdXNldCBjb2RlIGJ1aWxkcyBhIG5ldyBzdWNoIHBhcnRpdGlvbiBhbmQgcGFzc2VzIGl0IHRvIHRoZQorc2NoZWR1bGVyIHNjaGVkIGRvbWFpbiBzZXR1cCBjb2RlLCB0byBoYXZlIHRoZSBzY2hlZCBkb21haW5zIHJlYnVpbHQKK2FzIG5lY2Vzc2FyeSwgd2hlbmV2ZXI6CisgLSB0aGUgJ3NjaGVkX2xvYWRfYmFsYW5jZScgZmxhZyBvZiBhIGNwdXNldCB3aXRoIG5vbi1lbXB0eSBDUFVzIGNoYW5nZXMsCisgLSBvciBDUFVzIGNvbWUgb3IgZ28gZnJvbSBhIGNwdXNldCB3aXRoIHRoaXMgZmxhZyBlbmFibGVkLAorIC0gb3IgJ3NjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCcgdmFsdWUgb2YgYSBjcHVzZXQgd2l0aCBub24tZW1wdHkgQ1BVcworICAgYW5kIHdpdGggdGhpcyBmbGFnIGVuYWJsZWQgY2hhbmdlcywKKyAtIG9yIGEgY3B1c2V0IHdpdGggbm9uLWVtcHR5IENQVXMgYW5kIHdpdGggdGhpcyBmbGFnIGVuYWJsZWQgaXMgcmVtb3ZlZCwKKyAtIG9yIGEgY3B1IGlzIG9mZmxpbmVkL29ubGluZWQuCiAKIFRoaXMgcGFydGl0aW9uIGV4YWN0bHkgZGVmaW5lcyB3aGF0IHNjaGVkIGRvbWFpbnMgdGhlIHNjaGVkdWxlciBzaG91bGQKLXNldHVwIC0gb25lIHNjaGVkIGRvbWFpbiBmb3IgZWFjaCBlbGVtZW50IChjcHVtYXNrX3QpIGluIHRoZSBwYXJ0aXRpb24uCitzZXR1cCAtIG9uZSBzY2hlZCBkb21haW4gZm9yIGVhY2ggZWxlbWVudCAoc3RydWN0IGNwdW1hc2spIGluIHRoZQorcGFydGl0aW9uLgogCiBUaGUgc2NoZWR1bGVyIHJlbWVtYmVycyB0aGUgY3VycmVudGx5IGFjdGl2ZSBzY2hlZCBkb21haW4gcGFydGl0aW9ucy4KIFdoZW4gdGhlIHNjaGVkdWxlciByb3V0aW5lIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKCkgaXMgaW52b2tlZCBmcm9tCkBAIC01NTksNyArNTY4LDcgQEAKIHJlcXVlc3RzIDAgYW5kIG90aGVycyBhcmUgLTEgdGhlbiAwIGlzIHVzZWQuCiAKIE5vdGUgdGhhdCBtb2RpZnlpbmcgdGhpcyBmaWxlIHdpbGwgaGF2ZSBib3RoIGdvb2QgYW5kIGJhZCBlZmZlY3RzLAotYW5kIHdoZXRoZXIgaXQgaXMgYWNjZXB0YWJsZSBvciBub3Qgd2lsbCBiZSBkZXBlbmQgb24geW91ciBzaXR1YXRpb24uCithbmQgd2hldGhlciBpdCBpcyBhY2NlcHRhYmxlIG9yIG5vdCBkZXBlbmRzIG9uIHlvdXIgc2l0dWF0aW9uLgogRG9uJ3QgbW9kaWZ5IHRoaXMgZmlsZSBpZiB5b3UgYXJlIG5vdCBzdXJlLgogCiBJZiB5b3VyIHNpdHVhdGlvbiBpczoKQEAgLTYwMCwxOSArNjA5LDE1IEBACiAKIElmIGEgY3B1c2V0IGhhcyBpdHMgJ2NwdXMnIG1vZGlmaWVkLCB0aGVuIGVhY2ggdGFzayBpbiB0aGF0IGNwdXNldAogd2lsbCBoYXZlIGl0cyBhbGxvd2VkIENQVSBwbGFjZW1lbnQgY2hhbmdlZCBpbW1lZGlhdGVseS4gIFNpbWlsYXJseSwKLWlmIGEgdGFza3MgcGlkIGlzIHdyaXR0ZW4gdG8gYSBjcHVzZXRzICd0YXNrcycgZmlsZSwgaW4gZWl0aGVyIGl0cwotY3VycmVudCBjcHVzZXQgb3IgYW5vdGhlciBjcHVzZXQsIHRoZW4gaXRzIGFsbG93ZWQgQ1BVIHBsYWNlbWVudCBpcwotY2hhbmdlZCBpbW1lZGlhdGVseS4gIElmIHN1Y2ggYSB0YXNrIGhhZCBiZWVuIGJvdW5kIHRvIHNvbWUgc3Vic2V0Ci1vZiBpdHMgY3B1c2V0IHVzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSgpIGNhbGwsIHRoZSB0YXNrIHdpbGwgYmUKLWFsbG93ZWQgdG8gcnVuIG9uIGFueSBDUFUgYWxsb3dlZCBpbiBpdHMgbmV3IGNwdXNldCwgbmVnYXRpbmcgdGhlCi1hZmZlY3Qgb2YgdGhlIHByaW9yIHNjaGVkX3NldGFmZmluaXR5KCkgY2FsbC4KK2lmIGEgdGFza3MgcGlkIGlzIHdyaXR0ZW4gdG8gYW5vdGhlciBjcHVzZXRzICd0YXNrcycgZmlsZSwgdGhlbiBpdHMKK2FsbG93ZWQgQ1BVIHBsYWNlbWVudCBpcyBjaGFuZ2VkIGltbWVkaWF0ZWx5LiAgSWYgc3VjaCBhIHRhc2sgaGFkIGJlZW4KK2JvdW5kIHRvIHNvbWUgc3Vic2V0IG9mIGl0cyBjcHVzZXQgdXNpbmcgdGhlIHNjaGVkX3NldGFmZmluaXR5KCkgY2FsbCwKK3RoZSB0YXNrIHdpbGwgYmUgYWxsb3dlZCB0byBydW4gb24gYW55IENQVSBhbGxvd2VkIGluIGl0cyBuZXcgY3B1c2V0LAorbmVnYXRpbmcgdGhlIGVmZmVjdCBvZiB0aGUgcHJpb3Igc2NoZWRfc2V0YWZmaW5pdHkoKSBjYWxsLgogCiBJbiBzdW1tYXJ5LCB0aGUgbWVtb3J5IHBsYWNlbWVudCBvZiBhIHRhc2sgd2hvc2UgY3B1c2V0IGlzIGNoYW5nZWQgaXMKIHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCwgb24gdGhlIG5leHQgYWxsb2NhdGlvbiBvZiBhIHBhZ2UgZm9yIHRoYXQgdGFzaywKLWJ1dCB0aGUgcHJvY2Vzc29yIHBsYWNlbWVudCBpcyBub3QgdXBkYXRlZCwgdW50aWwgdGhhdCB0YXNrcyBwaWQgaXMKLXJld3JpdHRlbiB0byB0aGUgJ3Rhc2tzJyBmaWxlIG9mIGl0cyBjcHVzZXQuICBUaGlzIGlzIGRvbmUgdG8gYXZvaWQKLWltcGFjdGluZyB0aGUgc2NoZWR1bGVyIGNvZGUgaW4gdGhlIGtlcm5lbCB3aXRoIGEgY2hlY2sgZm9yIGNoYW5nZXMKLWluIGEgdGFza3MgcHJvY2Vzc29yIHBsYWNlbWVudC4KK2FuZCB0aGUgcHJvY2Vzc29yIHBsYWNlbWVudCBpcyB1cGRhdGVkIGltbWVkaWF0ZWx5LgogCiBOb3JtYWxseSwgb25jZSBhIHBhZ2UgaXMgYWxsb2NhdGVkIChnaXZlbiBhIHBoeXNpY2FsIHBhZ2UKIG9mIG1haW4gbWVtb3J5KSB0aGVuIHRoYXQgcGFnZSBzdGF5cyBvbiB3aGF0ZXZlciBub2RlIGl0CkBAIC02ODEsMTAgKzY4NiwxNCBAQAogICAjIFRoZSBuZXh0IGxpbmUgc2hvdWxkIGRpc3BsYXkgJy9DaGFybGllJwogICBjYXQgL3Byb2Mvc2VsZi9jcHVzZXQKIAotSW4gdGhlIGZ1dHVyZSwgYSBDIGxpYnJhcnkgaW50ZXJmYWNlIHRvIGNwdXNldHMgd2lsbCBsaWtlbHkgYmUKLWF2YWlsYWJsZS4gIEZvciBub3csIHRoZSBvbmx5IHdheSB0byBxdWVyeSBvciBtb2RpZnkgY3B1c2V0cyBpcwotdmlhIHRoZSBjcHVzZXQgZmlsZSBzeXN0ZW0sIHVzaW5nIHRoZSB2YXJpb3VzIGNkLCBta2RpciwgZWNobywgY2F0LAotcm1kaXIgY29tbWFuZHMgZnJvbSB0aGUgc2hlbGwsIG9yIHRoZWlyIGVxdWl2YWxlbnQgZnJvbSBDLgorVGhlcmUgYXJlIHdheXMgdG8gcXVlcnkgb3IgbW9kaWZ5IGNwdXNldHM6CisgLSB2aWEgdGhlIGNwdXNldCBmaWxlIHN5c3RlbSBkaXJlY3RseSwgdXNpbmcgdGhlIHZhcmlvdXMgY2QsIG1rZGlyLCBlY2hvLAorICAgY2F0LCBybWRpciBjb21tYW5kcyBmcm9tIHRoZSBzaGVsbCwgb3IgdGhlaXIgZXF1aXZhbGVudCBmcm9tIEMuCisgLSB2aWEgdGhlIEMgbGlicmFyeSBsaWJjcHVzZXQuCisgLSB2aWEgdGhlIEMgbGlicmFyeSBsaWJjZ3JvdXAuCisgICAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9lY3RzL2xpYmNnLykKKyAtIHZpYSB0aGUgcHl0aG9uIGFwcGxpY2F0aW9uIGNzZXQuCisgICAoaHR0cDovL2RldmVsb3Blci5ub3ZlbGwuY29tL3dpa2kvaW5kZXgucGhwL0NwdXNldCkKIAogVGhlIHNjaGVkX3NldGFmZmluaXR5IGNhbGxzIGNhbiBhbHNvIGJlIGRvbmUgYXQgdGhlIHNoZWxsIHByb21wdCB1c2luZwogU0dJJ3MgcnVub24gb3IgUm9iZXJ0IExvdmUncyB0YXNrc2V0LiAgVGhlIG1iaW5kIGFuZCBzZXRfbWVtcG9saWN5CkBAIC03NTYsNyArNzY1LDcgQEAKIAogaXMgZXF1aXZhbGVudCB0bwogCi1tb3VudCAtdCBjZ3JvdXAgLW9jcHVzZXQgWCAvZGV2L2NwdXNldAorbW91bnQgLXQgY2dyb3VwIC1vY3B1c2V0LG5vcHJlZml4IFggL2Rldi9jcHVzZXQKIGVjaG8gIi9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IiA+IC9kZXYvY3B1c2V0L3JlbGVhc2VfYWdlbnQKIAogMi4yIEFkZGluZy9yZW1vdmluZyBjcHVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKaW5kZXggNWIwY2ZhNi4uY2U3M2YzZWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKQEAgLTExNywxMCArMTE3LDI4IEBACiBzYW1wbGluZ19yYXRlOiBtZWFzdXJlZCBpbiB1UyAoMTBeLTYgc2Vjb25kcyksIHRoaXMgaXMgaG93IG9mdGVuIHlvdQogd2FudCB0aGUga2VybmVsIHRvIGxvb2sgYXQgdGhlIENQVSB1c2FnZSBhbmQgdG8gbWFrZSBkZWNpc2lvbnMgb24KIHdoYXQgdG8gZG8gYWJvdXQgdGhlIGZyZXF1ZW5jeS4gIFR5cGljYWxseSB0aGlzIGlzIHNldCB0byB2YWx1ZXMgb2YKLWFyb3VuZCAnMTAwMDAnIG9yIG1vcmUuCithcm91bmQgJzEwMDAwJyBvciBtb3JlLiBJdCdzIGRlZmF1bHQgdmFsdWUgaXMgKGNtcC4gd2l0aCB1c2Vycy1ndWlkZS50eHQpOgordHJhbnNpdGlvbl9sYXRlbmN5ICogMTAwMAorVGhlIGxvd2VzdCB2YWx1ZSB5b3UgY2FuIHNldCBpczoKK3RyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMCBvciBpdCBtYXkgZ2V0IHJlc3RyaWN0ZWQgdG8gYSB2YWx1ZSB3aGVyZSBpdAorbWFrZXMgbm90IHNlbnNlIGZvciB0aGUga2VybmVsIGFueW1vcmUgdG8gcG9sbCB0aGF0IG9mdGVuIHdoaWNoIGRlcGVuZHMKK29uIHlvdXIgSFogY29uZmlnIHZhcmlhYmxlIChIWj0xMDAwOiBtYXg9MjAwMDB1cywgSFo9MjUwOiBtYXg9NTAwMCkuCitCZSBhd2FyZSB0aGF0IHRyYW5zaXRpb24gbGF0ZW5jeSBpcyBpbiBucyBhbmQgc2FtcGxpbmdfcmF0ZSBpcyBpbiB1cywgc28geW91CitnZXQgdGhlIHNhbWUgc3lzZnMgdmFsdWUgYnkgZGVmYXVsdC4KK1NhbXBsaW5nIHJhdGUgc2hvdWxkIGFsd2F5cyBnZXQgYWRqdXN0ZWQgY29uc2lkZXJpbmcgdGhlIHRyYW5zaXRpb24gbGF0ZW5jeQorVG8gc2V0IHRoZSBzYW1wbGluZyByYXRlIDc1MCB0aW1lcyBhcyBoaWdoIGFzIHRoZSB0cmFuc2l0aW9uIGxhdGVuY3kKK2luIHRoZSBiYXNoIChhcyBzYWlkLCAxMDAwIGlzIGRlZmF1bHQpLCBkbzoKK2VjaG8gYCQoKCQoY2F0IGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5KSAqIDc1MCAvIDEwMDApKSBcCisgICAgPm9uZGVtYW5kL3NhbXBsaW5nX3JhdGUKIAotc2hvd19zYW1wbGluZ19yYXRlXyhtaW58bWF4KTogdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc2FtcGxpbmcgcmF0ZXMKLWF2YWlsYWJsZSB0aGF0IHlvdSBtYXkgc2V0ICdzYW1wbGluZ19yYXRlJyB0by4KK3Nob3dfc2FtcGxpbmdfcmF0ZV8obWlufG1heCk6IFRISVMgSU5URVJGQUNFIElTIERFUFJFQ0FURUQsIERPTidUIFVTRSBJVC4KK1lvdSBjYW4gdXNlIHdpZGVyIHJhbmdlcyBub3cgYW5kIHRoZSBnZW5lcmFsCitjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSB2YXJpYWJsZSAoY21wLiB3aXRoIHVzZXItZ3VpZGUudHh0KSBjYW4gYmUKK3VzZWQgdG8gb2J0YWluIGV4YWN0bHkgdGhlIHNhbWUgaW5mbzoKK3Nob3dfc2FtcGxpbmdfcmF0ZV9taW4gPSB0cmFuc3RpdGlvbl9sYXRlbmN5ICogNTAwICAgIC8gMTAwMAorc2hvd19zYW1wbGluZ19yYXRlX21heCA9IHRyYW5zdGl0aW9uX2xhdGVuY3kgKiA1MDAwMDAgLyAxMDAwCisoZGl2aWRlZCBieSAxMDAwIGlzIHRvIGlsbHVzdHJhdGUgdGhhdCBzYW1wbGluZyByYXRlIGlzIGluIHVzIGFuZAordHJhbnNpdGlvbiBsYXRlbmN5IGlzIGV4cG9ydGVkIG5zKS4KIAogdXBfdGhyZXNob2xkOiBkZWZpbmVzIHdoYXQgdGhlIGF2ZXJhZ2UgQ1BVIHVzYWdlIGJldHdlZW4gdGhlIHNhbXBsaW5ncwogb2YgJ3NhbXBsaW5nX3JhdGUnIG5lZWRzIHRvIGJlIGZvciB0aGUga2VybmVsIHRvIG1ha2UgYSBkZWNpc2lvbiBvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKaW5kZXggOTE3OTE4Zi4uNzVmNDExOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CkBAIC0xNTIsNiArMTUyLDE4IEBACiAJCQkJZnJlcXVlbmN5IHRoZSBwcm9jZXNzb3IgY2FuIHJ1biBhdChpbiBrSHopIAogY3B1aW5mb19tYXhfZnJlcSA6CQl0aGlzIGZpbGUgc2hvd3MgdGhlIG1heGltdW0gb3BlcmF0aW5nCiAJCQkJZnJlcXVlbmN5IHRoZSBwcm9jZXNzb3IgY2FuIHJ1biBhdChpbiBrSHopIAorY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kJVGhlIHRpbWUgaXQgdGFrZXMgb24gdGhpcyBDUFUgdG8KKwkJCQlzd2l0Y2ggYmV0d2VlbiB0d28gZnJlcXVlbmNpZXMgaW4gbmFubworCQkJCXNlY29uZHMuIElmIHVua25vd24gb3Iga25vd24gdG8gYmUKKwkJCQl0aGF0IGhpZ2ggdGhhdCB0aGUgZHJpdmVyIGRvZXMgbm90CisJCQkJd29yayB3aXRoIHRoZSBvbmRlbWFuZCBnb3Zlcm5vciwgLTEKKwkJCQkoQ1BVRlJFUV9FVEVSTkFMKSB3aWxsIGJlIHJldHVybmVkLgorCQkJCVVzaW5nIHRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bAorCQkJCXRvIGNob29zZSBhbiBhcHByb3ByaWF0ZSBwb2xsaW5nCisJCQkJZnJlcXVlbmN5IGZvciBhIGtlcm5lbCBnb3Zlcm5vciBvcgorCQkJCXVzZXJzcGFjZSBkYWVtb24uIE1ha2Ugc3VyZSB0byBub3QKKwkJCQlzd2l0Y2ggdGhlIGZyZXF1ZW5jeSB0b28gb2Z0ZW4KKwkJCQlyZXN1bHRpbmcgaW4gcGVyZm9ybWFuY2UgbG9zcy4KIHNjYWxpbmdfZHJpdmVyIDoJCXRoaXMgZmlsZSBzaG93cyB3aGF0IGNwdWZyZXEgZHJpdmVyIGlzCiAJCQkJdXNlZCB0byBzZXQgdGhlIGZyZXF1ZW5jeSBvbiB0aGlzIENQVQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgppbmRleCAxZTg5YTUxLi44ODUxOWRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCisrKyBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKQEAgLTYyLDcgKzYyLDYgQEAKIGFpYzcqc2VxLmgqCiBhaWNhc20KIGFpY2RiLmgqCi1hc20KIGFzbS1vZmZzZXRzLmgKIGFzbV9vZmZzZXRzLmgKIGF1dG9jb25mLmgqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZpY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZGV2aWNlLnR4dAppbmRleCBhMDVlYzUwLi5hN2NiZmZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZpY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldmljZS50eHQKQEAgLTEyNyw5ICsxMjcsMTEgQEAKIEF0dHJpYnV0ZXMKIH5+fn5+fn5+fn4KIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHsKLSAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKLSAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZik7Ci0gICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqIGRldiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKTsKKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCiBBdHRyaWJ1dGVzIG9mIGRldmljZXMgY2FuIGJlIGV4cG9ydGVkIHZpYSBkcml2ZXJzIHVzaW5nIGEgc2ltcGxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZmxleGNvcCBiL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5mbGV4Y29wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTE1NDY5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5mbGV4Y29wCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLVRoaXMgUkVBRE1FIGVzY29ydGVkIHRoZSBza3lzdGFyMi1kcml2ZXIgcmV3cml0aW5nIHByb2NlZHVyZS4gSXQgZGVzY3JpYmVzIHRoZQotc3RhdGUgb2YgdGhlIG5ldyBmbGV4Y29wLWRyaXZlciBzZXQgYW5kIHNvbWUgaW50ZXJuYWxzIGFyZSB3cml0dGVuIGRvd24gaGVyZQotdG9vLgotCi1UaGlzIGRvY3VtZW50IGhvcGVmdWxseSBkZXNjcmliZXMgdGhpbmdzIGFib3V0IHRoZSBmbGV4Y29wIGFuZCBpdHMKLWRldmljZS1vZmZzcHJpbmdzLiBHb2FsIHdhcyB0byB3cml0ZSBhbiBlYXN5LXRvLXdyaXRlIGFuZCBlYXN5LXRvLXJlYWQgc2V0IG9mCi1kcml2ZXJzIGJhc2VkIG9uIHRoZSBza3lzdGFyMi5jIGFuZCBvdGhlciBpbmZvcm1hdGlvbi4KLQotUmVtYXJrOiBmbGV4Y29wLXBjaS5jIHdhcyBhIGNvcHkgb2Ygc2t5c3RhcjIuYywgYnV0IGV2ZXJ5IGxpbmUgaGFzIGJlZW4KLXRvdWNoZWQgYW5kIHJld3JpdHRlbi4KLQotSGlzdG9yeSAmIE5ld3MKLT09PT09PT09PT09PT09Ci0gIDIwMDUtMDQtMDEgLSBjb3JyZWN0IFVTQiBJU09DIHRyYW5zZmVycyAodGhhbmtzIHRvIFZhZGltIENhdGFuYSkKLQotCi0KLQotR2VuZXJhbCBjb2RpbmcgcHJvY2Vzc2luZwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XZSBzaG91bGQgcHJvY2VlZCBhcyBmb2xsb3dzIChhcyBsb25nIGFzIG5vIG9uZSBjb21wbGFpbnMpOgotCi0wKSBUaGluayBiZWZvcmUgc3RhcnQgd3JpdGluZyBjb2RlIQotCi0xKSByZXdyaXRpbmcgdGhlIHNreXN0YXIyLmMgd2l0aCB0aGUgaGVscCBvZiB0aGUgZmxleGNvcCByZWdpc3RlciBkZXNjcmlwdGlvbnMKLWFuZCBzcGxpdHRpbmcgdXAgdGhlIGZpbGVzIHRvIGEgcGNpLWJ1cy1wYXJ0IGFuZCBhIGZsZXhjb3AtcGFydC4KLVRoZSBuZXcgZHJpdmVyIHdpbGwgYmUgY2FsbGVkIGIyYzItZmxleGNvcC1wY2kua28vYjJjMi1mbGV4Y29wLXVzYi5rbyBmb3IgdGhlCi1kZXZpY2Utc3BlY2lmaWMgcGFydCBhbmQgYjJjMi1mbGV4Y29wLmtvIGZvciB0aGUgY29tbW9uIGZsZXhjb3AtZnVuY3Rpb25zLgotCi0yKSBTZWFyY2ggZm9yIGVycm9ycyBpbiB0aGUgbGVmdG92ZXIgb2YgZmxleGNvcC1wY2kuYyAoY29tcGFyZSB3aXRoIHBsdXRvMi5jCi1hbmQgb3RoZXIgcGNpIGRyaXZlcnMpCi0KLTMpIG1ha2Ugc29tZSBiZWF1dGlmaWNhdGlvbiAoc2VlICdJbXByb3ZlbWVudHMgd2hlbiByZXdyaXRpbmcgKHJlZmFjdG9yaW5nKSBpcwotZG9uZScpCi0KLTQpIFRlc3RpbmcgdGhlIG5ldyBkcml2ZXIgYW5kIG1heWJlIHN1YnN0aXR1dGUgdGhlIHNreXN0YXIyLmMgd2l0aCBpdCwgdG8gcmVhY2gKLWEgd2lkZXIgdGVzdGVyIGF1ZGllbmNlLgotCi01KSBjcmVhdGluZyBhbiB1c2ItYnVzLXBhcnQgdXNpbmcgdGhlIGFscmVhZHkgd3JpdHRlbiBmbGV4Y29wIGNvZGUgZm9yIHRoZSBwY2kKLWNhcmQuCi0KLUlkZWE6IGNyZWF0ZSBhIGtlcm5lbC1vYmplY3QgZm9yIHRoZSBmbGV4Y29wIGFuZCBleHBvcnQgYWxsIGltcG9ydGFudAotZnVuY3Rpb25zLiBUaGlzIG9wdGlvbiBzYXZlcyBrZXJuZWwtbWVtb3J5LCBidXQgbWF5YmUgYSBsb3Qgb2YgZnVuY3Rpb25zIGhhdmUKLXRvIGJlIGV4cG9ydGVkIHRvIGtlcm5lbCBuYW1lc3BhY2UuCi0KLQotQ3VycmVudCBzaXR1YXRpb24KLT09PT09PT09PT09PT09PT09Ci0KLTApIERvbmUgOikKLTEpIERvbmUgKHNvbWUgbWlub3IgaXNzdWVzIGxlZnQpCi0yKSBEb25lCi0zKSBOb3QgcmVhZHkgeWV0LCBtb3JlIGluZm9ybWF0aW9uIGlzIG5lY2Vzc2FyeQotNCkgbmV4dCB0byBiZSBkb25lIChzZWUgdGhlIHRhYmxlIGJlbG93KQotNSkgVVNCIGRyaXZlciBpcyB3b3JraW5nICh5ZXMsIHRoZXJlIGFyZSBzb21lIG1pbm9yIGlzc3VlcykKLQotV2hhdCBzZWVtcyB0byBiZSByZWFkeT8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEpIFJld3JpdGluZwotMWEpIGkyYyBpcyBjdXQgb2ZmIGZyb20gdGhlIGZsZXhjb3AtcGNpLmMgYW5kIHNlZW1zIHRvIHdvcmsKLTFiKSBtb3ZlZCB0dW5lciBhbmQgZGVtb2Qgc3R1ZmYgZnJvbSBmbGV4Y29wLXBjaS5jIHRvIGZsZXhjb3AtdHVuZXItZmUuYwotMWMpIG1vdmVkIGxuYiBhbmQgZGlzZXFjIHN0dWZmIGZyb20gZmxleGNvcC1wY2kuYyB0byBmbGV4Y29wLXR1bmVyLWZlLmMKLTFlKSBlZXByb20gKHJlYWRpbmcgTUFDIGFkZHJlc3MpCi0xZCkgc3JhbSAobm8gZHluYW1pYyBzbGwgc2l6ZSBkZXRlY3Rpb24gKGNvbW1lbnRlZCBvdXQpICh1c2luZyBkZWZhdWx0IGFzIEpKIHRvbGQgbWUpKQotMWYpIG1pc2MuIHJlZ2lzdGVyIGFjY2Vzc2VzIGZvciByZWFkaW5nIHBhcmFtZXRlcnMgKGUuZy4gcmVzZXR0aW5nLCByZXZpc2lvbikKLTFnKSBwaWQvbWFjIGZpbHRlciAoZmxleGNvcC1ody1maWx0ZXIuYykKLTFpKSBkdmItc3R1ZmYgaW5pdGlhbGl6YXRpb24gaW4gZmxleGNvcC5jIChkb25lKQotMWgpIGRtYSBzdHVmZiAobm93IGp1c3QgdXNpbmcgdGhlIHNpemUtaXJxLCBpbnN0ZWFkIG9mIGFsbC10b2dldGhlciwgdG8gYmUgZG9uZSkKLTFqKSByZW1vdmUgZmxleGNvcCBpbml0aWFsaXphdGlvbiBmcm9tIGZsZXhjb3AtcGNpLmMgY29tcGxldGVseSAoZG9uZSkKLTFsKSB1c2UgYSB3ZWxsIHdvcmtpbmcgZG1hIElSUSBtZXRob2QgKGRvbmUsIHNlZSAnS25vd24gYnVncyBhbmQgcHJvYmxlbXMgYW5kIFRPRE8nKQotMWspIGNsZWFudXAgZmxleGNvcC1maWxlcyAocmVtb3ZlIHVudXNlZCBFWFBPUlRfU1lNQk9McywgbWFrZSBzdGF0aWMgZnJvbQotbm9uLXN0YXRpYyB3aGVyZSBwb3NzaWJsZSwgbW92ZWQgY29kZSB0byBwcm9wZXIgcGxhY2VzKQotCi0yKSBTZWFyY2ggZm9yIGVycm9ycyBpbiB0aGUgbGVmdG92ZXIgb2YgZmxleGNvcC1wY2kuYyAocGFydGlhbGx5IGRvbmUpCi01YSkgYWRkIE1BQyBhZGRyZXNzIHJlYWRpbmcKLTVjKSBmZWVkaW5nIG9mIElTT0MgZGF0YSB0byB0aGUgc29mdHdhcmUgZGVtdXggKGZvcm1hdCBvZiB0aGUgaXNvY2hyb25vdXMgZGF0YQotYW5kIHNwZWVkIG9wdGltaXphdGlvbiwgbm8gcmVhbCBlcnJvcikgKHRoYW5rcyB0byBWYWRpbSBDYXRhbmEpCi0KLVdoYXQgdG8gZG8gaW4gdGhlIG5lYXIgZnV0dXJlPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShubyBzcGVjaWFsIG9yZGVyIGhlcmUpCi0KLTUpIFVTQiBkcml2ZXIKLTViKSBvcHRpbWl6ZSBpc29jLXRyYW5zZmVyIChzdWJtaXR0aW5nL2tpbGxpbmcgaXNvYyBVUkJzIHdoZW4gdHJhbnNmZXIgaXMgc3RhcnRpbmcpCi0KLVRlc3RpbmcgY2hhbmdlcwotLS0tLS0tLS0tLS0tLS0tCi0KLU8gICAgICAgICAgICAgPSBpdGVtIGlzIHdvcmtpbmcKLVAgICAgICAgICAgICAgPSBpdGVtIGlzIHBhcnRpYWxseSB3b3JraW5nCi1YICAgICAgICAgICAgID0gaXRlbSBpcyBub3Qgd29ya2luZwotTiAgICAgICAgICAgICA9IGl0ZW0gZG9lcyBub3QgYXBwbHkgaGVyZQotPGVtcHR5IGZpZWxkPiA9IGl0ZW0gbmVlZCB0byBiZSBleGFtaW5lZAotCi0gICAgICAgfCBQQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVU0IKLWl0ZW0gICB8IG10MzUyIHwgbnh0MjAwMiB8IHN0djAyOTkgfCBtdDMxMiB8IG10MzUyIHwgbnh0MjAwMiB8IHN0djAyOTkgfCBtdDMxMgotLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLQotMWEpICAgIHwgTyAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgIHwgTiAgICAgfCBOICAgICAgIHwgTiAgICAgICB8IE4KLTFiKSAgICB8IE8gICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgICB8IE8gICAgICAgfAotMWMpICAgIHwgTiAgICAgfCBOICAgICAgIHwgICAgICAgICB8ICAgICAgIHwgTiAgICAgfCBOICAgICAgIHwgTyAgICAgICB8Ci0xZCkgICAgfCAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgTwotMWUpICAgIHwgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIE8KLTFmKSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQCi0xZykgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTwotMWgpICAgIHwgICAgICAgICAgICAgICAgIFAgICAgICAgICAgICAgICAgIHwKLTFpKSAgICB8ICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICBOCi0xaikgICAgfCAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgTgotMWwpICAgIHwgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIE4KLTIpICAgICB8ICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICBOCi01YSkgICAgfCAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgTwotNWIpKiAgIHwgICAgICAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgIHwKLTVjKSAgICB8ICAgICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICBPCi0KLSogLSBub3QgZG9uZSB5ZXQKLQotS25vd24gYnVncyBhbmQgcHJvYmxlbXMgYW5kIFRPRE8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTFnL2gvbCkgd2hlbiBwaWQgZmlsdGVyaW5nIGlzIGVuYWJsZWQgb24gdGhlIHBjaSBjYXJkCi0KLURNQSB1c2FnZSBjdXJyZW50bHk6Ci0gIFRoZSBETUEgaXMgc3BsaXR0ZWQgaW4gMiBlcXVhbC1zaXplZCBzdWJidWZmZXJzLiBUaGUgRmxleGNvcCB3cml0ZXMgdG8gZmlyc3QKLSAgYWRkcmVzcyBhbmQgdHJpZ2dlcnMgYW4gSVJRIHdoZW4gaXQncyBmdWxsIGFuZCBzdGFydHMgd3JpdGluZyB0byB0aGUgc2Vjb25kCi0gIGFkZHJlc3MuIFdoZW4gdGhlIHNlY29uZCBhZGRyZXNzIGlzIGZ1bGwsIHRoZSBJUlEgaXMgdHJpZ2dlcmVkIGFnYWluLCBhbmQKLSAgdGhlIGZsZXhjb3Agd3JpdGVzIHRvIGZpcnN0IGFkZHJlc3MgYWdhaW4sIGFuZCBzbyBvbi4KLSAgVGhlIGJ1ZmZlcnNpemUgb2YgZWFjaCBhZGRyZXNzIGlzIGN1cnJlbnRseSA2NDAqMTg4IGJ5dGVzLgotCi0gIFByb2JsZW0gaXMsIHdoZW4gdXNpbmcgaHctcGlkLWZpbHRlcmluZyBhbmQgZG9pbmcgc29tZSBsb3ctYmFuZHdpZHRoCi0gIG9wZXJhdGlvbiAobGlrZSBzY2FubmluZykgdGhlIGJ1ZmZlcnMgd29uJ3QgYmUgZmlsbGVkIGVub3VnaCB0byB0cmlnZ2VyCi0gIHRoZSBJUlEuIFRoYXQncyB3aHk6Ci0KLSAgV2hlbiBQSUQgZmlsdGVyaW5nIGlzIGFjdGl2YXRlZCwgdGhlIHRpbWVyIElSUSBpcyB1c2VkLiBFdmVyeSAxLjk3IG1zIHRoZSBJUlEKLSAgaXMgdHJpZ2dlcmVkLiAgSXMgdGhlIGN1cnJlbnQgd3JpdGUgYWRkcmVzcyBvZiBETUExIGRpZmZlcmVudCB0byB0aGUgb25lCi0gIGR1cmluZyB0aGUgbGFzdCBJUlEsIHRoZW4gdGhlIGRhdGEgaXMgcGFzc2VkIHRvIHRoZSBkZW11eGVyLgotCi0gIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgRE1BLUlSUS1tZXRob2Q6IHBhY2tldCBjb3VudCBJUlEuIFRoaXMgaXNuJ3QKLSAgaW1wbGVtZW50ZWQgY29ycmVjdGx5IHlldC4KLQotICBUaGUgc29sdXRpb24gaXMgdG8gZGlzYWJsZSBIVyBQSUQgZmlsdGVyaW5nLCBidXQgSSBkb24ndCBrbm93IGhvdyB0aGUgRFZCCi0gIEFQSSBzb2Z0d2FyZSBkZW11eCBiZWhhdmVzIG9uIHNsb3cgc3lzdGVtcyB3aXRoIDQ1TUJpdC9zIFRTLgotCi1Tb2x2ZWQgYnVncyA6KQotLS0tLS0tLS0tLS0tLS0KLTFnKSBwaWQtZmlsdGVyaW5nIChzb21laG93IHBpZCBpbmRleCA0IGFuZCA1IChFTU1fUElEIGFuZCBFQ01fUElEKSBhcmVuJ3QKLXdvcmtpbmcpCi1TT0xVVElPTjogYWxzbyBpbmRleCAwIHdhcyBhZmZlY3RlZCwgYmVjYXVzZSBuZXRfdHJhbnNsYXRpb24gaXMgZG9uZSBmb3IKLXRoZXNlIGluZGV4ZXMgYnkgZGVmYXVsdAotCi01YikgaXNvY2hyb25vdXMgdHJhbnNmZXIgZG9lcyBvbmx5IHdvcmsgaW4gdGhlIGZpcnN0IGF0dGVtcHQgKGZvciB0aGUgU2t5MlBDCi1VU0IsIEFpcjJQQyBpcyB3b3JraW5nKSBTT0xVVElPTjogdGhlIGZsZXhjb3Agd2FzIGdvaW5nIGFzbGVlcCBhbmQgbmV2ZXIgcmVhbGx5Ci13b2tlIHVwIGFnYWluIChkb24ndCBrbm93IGlmIHRoaXMgbmVlZCBmaXhlcywgc2VlCi1mbGV4Y29wLWZlLXR1bmVyLmM6ZmxleGNvcF9zbGVlcCkKLQotTkVXUzogd2hlbiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBhbmQgdW5sb2FkZWQgYW5kIGxvYWRlZCBhZ2FpbiAody9vIGRvaW5nCi1hbnl0aGluZyBpbiB0aGUgd2hpbGUgdGhlIGRyaXZlciBpcyBsb2FkZWQgdGhlIGZpcnN0IHRpbWUpLCBubyB0cmFuc2ZlcnMgdGFrZQotcGxhY2UgYW55bW9yZS4KLQotSW1wcm92ZW1lbnRzIHdoZW4gcmV3cml0aW5nIChyZWZhY3RvcmluZykgaXMgZG9uZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tIHNwbGl0IHNsZWVwaW5nIG9mIHRoZSBmbGV4Y29wIChtaXNjXzIwNC5BQ1BJM19zaWcgPSAxOykgZnJvbSBsbmJfY29udHJvbAotICAoZW5hYmxlIHNsZWVwaW5nIGZvciBvdGhlciBkZW1vZHMgdGhhbiBkdmItcykKLS0gYWRkIHN1cHBvcnQgZm9yIENhYmxlU3RhciAoc3R2MDI5NyBNaWNyb3R1bmUgMjAzeC9BTFBTKSAoYWxtb3N0IGRvbmUsIGluY29tcGF0aWJpbGl0aWVzIHdpdGggdGhlIE5leHVzLUNBKQotCi1EZWJ1Z2dpbmcKLS0tLS0tLS0tLQotLSBhZGQgdmVyYm9zZSBkZWJ1Z2dpbmcgdG8gc2t5c3RhcjIuYyAoZHVtcCB0aGUgcmVnX2R3X2RhdGEpIGFuZCBjb21wYXJlIGl0Ci0gIHdpdGggdGhpcyBmbGV4Y29wLCB0aGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSBpMmMgaXMgbm93IHVzaW5nIHRoZQotICBmbGV4Y29wX2liaV92YWx1ZSB1bmlvbiBmcm9tIGZsZXhjb3AtcmVnLmggKGRvIHlvdSBoYXZlIGEgYmV0dGVyIGlkZWEgZm9yCi0gIHRoYXQsIHBsZWFzZSB0ZWxsIHVzIHNvKS4KLQotRXZlcnl0aGluZyB3aGljaCBpcyBpZGVudGljYWwgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgY2FuIGJlIHB1dCBpbnRvIGEgY29tbW9uCi1mbGV4Y29wLW1vZHVsZS4KLQotCQkgIFBDSSAgICAgICAgICAgICAgICAgIFVTQgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRGlmZmVyZW50OgotUmVnaXN0ZXIgYWNjZXNzOiAgYWNjZXNzaW5nIElPIG1lbW9yeSAgVVNCIGNvbnRyb2wgbWVzc2FnZQotSTJDIGJ1czogICAgICAgICAgSTJDIGJ1cyBvZiB0aGUgRkMgICAgVVNCIGNvbnRyb2wgbWVzc2FnZQotRGF0YSB0cmFuc2ZlcjogICAgRE1BICAgICAgICAgICAgICAgICAgaXNvY2hyb25vdXMgdHJhbnNmZXIKLUVFUFJPTSB0cmFuc2ZlcjogIHRocm91Z2ggaTJjIGJ1cyAgICAgIG5vdCBjbGVhciB5ZXQKLQotSWRlbnRpY2FsOgotU3RyZWFtaW5nOiAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHJlZ2lzdGVycwotUElEIEZpbHRlcmluZzogICAgICAgICAgICAgYWNjZXNzaW5nIHJlZ2lzdGVycwotU3JhbSBkZXN0aW5hdGlvbnM6ICAgICAgICAgYWNjZXNzaW5nIHJlZ2lzdGVycwotVHVuZXIvRGVtb2Q6ICAgICAgICAgICAgICAgICAgICAgSTJDIGJ1cwotRFZCLXN0dWZmOiAgICAgICAgICAgIGNhbiBiZSB3cml0dGVuIGZvciBjb21tb24gdXNlCi0KLUFja25vd2xlZGdlbWVudHMgKGp1c3QgZm9yIHRoZSByZXdyaXRpbmcgcGFydCkKLT09PT09PT09PT09PT09PT0KLQotQmphcm5lIFN0ZWluc2JvIHRob3VnaHQgYSBsb3QgaW4gdGhlIGZpcnN0IHBsYWNlIG9mIHRoZSBwY2kgcGFydCBmb3IgdGhpcyBjb2RlCi1zaGFyaW5nIGlkZWEuCi0KLUFuZHJlYXMgT2JlcnJpdHRlciBmb3IgcHJvdmlkaW5nIGEgcmVjZW50IFBDSSBpbml0aWFsaXphdGlvbiB0ZW1wbGF0ZQotKHBsdXRvMi5jKS4KLQotQm9sZXNsYXcgQ2llc2llbHNraSBmb3IgcG9pbnRpbmcgb3V0IGEgcHJvYmxlbSB3aXRoIGZpcm13YXJlIGxvYWRlci4KLQotVmFkaW0gQ2F0YW5hIGZvciBjb3JyZWN0aW5nIHRoZSBVU0IgdHJhbnNmZXIuCi0KLWNvbW1lbnRzLCBjcml0aWNzIGFuZCBpZGVhcyB0byBsaW51eC1kdmJAbGludXh0di5vcmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi90ZWNobmlzYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvdGVjaG5pc2F0LnR4dAppbmRleCBjZGY2ZWU0Li4zZjQzNWZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi90ZWNobmlzYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL3RlY2huaXNhdC50eHQKQEAgLTEsNSArMSw1IEBACi1Ib3cgdG8gc2V0IHVwIHRoZSBUZWNobmlzYXQgZGV2aWNlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0hvdyB0byBzZXQgdXAgdGhlIFRlY2huaXNhdC9CMkMyIEZsZXhjb3AgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIDEpIEZpbmQgb3V0IHdoYXQgZGV2aWNlIHlvdSBoYXZlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTYsNTQgKzE2LDYwIEBACiAKIElmIHRoZSBUZWNobmlzYXQgaXMgdGhlIG9ubHkgVFYgZGV2aWNlIGluIHlvdXIgYm94IGdldCByaWQgb2YgdW5uZWNlc3NhcnkgbW9kdWxlcyBhbmQgY2hlY2sgdGhpcyBvbmU6CiAiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIGFuYWxvZyBhbmQgaHlicmlkIHR1bmVyIG1vZHVsZXMgdG8gYnVpbGQiCi1JbiB0aGlzIGRpcmVjdG9yeSB1bmNoZWNrIGV2ZXJ5IGRyaXZlciB3aGljaCBpcyBhY3RpdmF0ZWQgdGhlcmUuCitJbiB0aGlzIGRpcmVjdG9yeSB1bmNoZWNrIGV2ZXJ5IGRyaXZlciB3aGljaCBpcyBhY3RpdmF0ZWQgdGhlcmUgKGV4Y2VwdCAiU2ltcGxlIHR1bmVyIHN1cHBvcnQiIGZvciBjYXNlIDkgb25seSkuCiAKIFRoZW4gcGxlYXNlIGFjdGl2YXRlOgogMmEpIE1haW4gbW9kdWxlIHBhcnQ6CiAKIGEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIKLWIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIiBpbiBjYXNlIG9mIGEgUENJIGNhcmQgT1IKK2IuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIiBpbiBjYXNlIG9mIGEgUENJIGNhcmQKK09SCiBjLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiRFZCL0FUU0MgYWRhcHRlcnMiID0+ICJUZWNobmlzYXQvQjJDMiBGbGV4Y29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiID0+ICJUZWNobmlzYXQvQjJDMiBBaXIvU2t5L0NhYmxlMlBDIFVTQiIgaW4gY2FzZSBvZiBhbiBVU0IgMS4xIGFkYXB0ZXIKIGQuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIkVuYWJsZSBkZWJ1ZyBmb3IgdGhlIEIyQzIgRmxleENvcCBkcml2ZXJzIgogTm90aWNlOiBkLikgaXMgaGVscGZ1bCBmb3IgdHJvdWJsZXNob290aW5nCiAKIDJiKSBGcm9udGVuZCBtb2R1bGUgcGFydDoKIAotMS4pIFJldmlzaW9uIDIuMzoKKzEuKSBTa3lTdGFyIERWQi1TIFJldmlzaW9uIDIuMzoKIGEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKIGIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIlphcmxpbmsgVlAzMTAvTVQzMTIvWkwxMDMxMyBiYXNlZCIKIAotMi4pIFJldmlzaW9uIDIuNjoKKzIuKSBTa3lTdGFyIERWQi1TIFJldmlzaW9uIDIuNjoKIGEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKIGIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIlNUIFNUVjAyOTkgYmFzZWQiCiAKLTMuKSBSZXZpc2lvbiAyLjc6CiszLikgU2t5U3RhciBEVkItUyBSZXZpc2lvbiAyLjc6CiBhLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCiBiLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCiBjLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJJbnRlZ3JhbnQgSVREMTAwMCBaZXJvIElGIHR1bmVyIGZvciBEVkItUy9EU1MiCiBkLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJJU0w2NDIxIFNFQyBjb250cm9sbGVyIgogCi00LikgUmV2aXNpb24gMi44OgorNC4pIFNreVN0YXIgRFZCLVMgUmV2aXNpb24gMi44OgogYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgogYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ29uZXhhbnQgQ1gyNDExMy9DWDI0MTI4IHR1bmVyIGZvciBEVkItUy9EU1MiCiBjLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDb25leGFudCBDWDI0MTIzIGJhc2VkIgogZC4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiSVNMNjQyMSBTRUMgY29udHJvbGxlciIKIAotNS4pIERWQi1UIGNhcmQ6Cis1LikgQWlyU3RhciBEVkItVCBjYXJkOgogYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgogYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiWmFybGluayBNVDM1MiBiYXNlZCIKIAotNi4pIERWQi1DIGNhcmQ6Cis2LikgQ2FibGVTdGFyIERWQi1DIGNhcmQ6CiBhLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCiBiLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTVCBTVFYwMjk3IGJhc2VkIgogCi03LikgQVRTQyBjYXJkIDFzdCBnZW5lcmF0aW9uOgorNy4pIEFpclN0YXIgQVRTQyBjYXJkIDFzdCBnZW5lcmF0aW9uOgogYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgogYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQnJvYWRjb20gQkNNMzUxMCIKIAotOC4pIEFUU0MgY2FyZCAybmQgZ2VuZXJhdGlvbjoKKzguKSBBaXJTdGFyIEFUU0MgY2FyZCAybmQgZ2VuZXJhdGlvbjoKIGEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKIGIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUMjAwMi9OWFQyMDA0IGJhc2VkIgotYy4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDIvTEdEVDMzMDMgYmFzZWQiCitjLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCi1BdXRob3I6IFV3ZSBCdWdsYSA8dXdlLmJ1Z2xhQGdteC5kZT4gRGVjZW1iZXIgMjAwOAorOS4pIEFpclN0YXIgQVRTQyBjYXJkIDNyZCBnZW5lcmF0aW9uOgorYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgorYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDIvTEdEVDMzMDMgYmFzZWQiCitjLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIGFuYWxvZyBhbmQgaHlicmlkIHR1bmVyIG1vZHVsZXMgdG8gYnVpbGQiID0+ICJTaW1wbGUgdHVuZXIgc3VwcG9ydCIKKworQXV0aG9yOiBVd2UgQnVnbGEgPHV3ZS5idWdsYUBnbXguZGU+IEZlYnJ1YXJ5IDIwMDkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGM1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0CkBAIC0wLDAgKzEsMjQwIEBACisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byB1c2UgdGhlIGR5bmFtaWMgZGVidWcgKGRkZWJ1ZykgZmVhdHVyZS4KKworRHluYW1pYyBkZWJ1ZyBpcyBkZXNpZ25lZCB0byBhbGxvdyB5b3UgdG8gZHluYW1pY2FsbHkgZW5hYmxlL2Rpc2FibGUga2VybmVsCitjb2RlIHRvIG9idGFpbiBhZGRpdGlvbmFsIGtlcm5lbCBpbmZvcm1hdGlvbi4gQ3VycmVudGx5LCBpZgorQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgc2V0LCB0aGVuIGFsbCBwcl9kZWJ1ZygpL2Rldl9kZWJ1ZygpIGNhbGxzIGNhbiBiZQorZHluYW1pY2FsbHkgZW5hYmxlZCBwZXItY2FsbHNpdGUuCisKK0R5bmFtaWMgZGVidWcgaGFzIGV2ZW4gbW9yZSB1c2VmdWwgZmVhdHVyZXM6CisKKyAqIFNpbXBsZSBxdWVyeSBsYW5ndWFnZSBhbGxvd3MgdHVybmluZyBvbiBhbmQgb2ZmIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGJ5CisgICBtYXRjaGluZyBhbnkgY29tYmluYXRpb24gb2Y6CisKKyAgIC0gc291cmNlIGZpbGVuYW1lCisgICAtIGZ1bmN0aW9uIG5hbWUKKyAgIC0gbGluZSBudW1iZXIgKGluY2x1ZGluZyByYW5nZXMgb2YgbGluZSBudW1iZXJzKQorICAgLSBtb2R1bGUgbmFtZQorICAgLSBmb3JtYXQgc3RyaW5nCisKKyAqIFByb3ZpZGVzIGEgZGVidWdmcyBjb250cm9sIGZpbGU6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wgd2hpY2ggY2FuIGJlCisgICByZWFkIHRvIGRpc3BsYXkgdGhlIGNvbXBsZXRlIGxpc3Qgb2Yga25vd24gZGVidWcgc3RhdGVtZW50cywgdG8gaGVscCBndWlkZSB5b3UKKworQ29udHJvbGxpbmcgZHluYW1pYyBkZWJ1ZyBCZWhhdmlvdXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGJlaGF2aW91ciBvZiBwcl9kZWJ1ZygpL2Rldl9kZWJ1ZygpcyBhcmUgY29udHJvbGxlZCB2aWEgd3JpdGluZyB0byBhCitjb250cm9sIGZpbGUgaW4gdGhlICdkZWJ1Z2ZzJyBmaWxlc3lzdGVtLiBUaHVzLCB5b3UgbXVzdCBmaXJzdCBtb3VudCB0aGUgZGVidWdmcworZmlsZXN5c3RlbSwgaW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgdGhpcyBmZWF0dXJlLiBTdWJzZXF1ZW50bHksIHdlIHJlZmVyIHRvIHRoZQorY29udHJvbCBmaWxlIGFzOiA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8KK2VuYWJsZSBwcmludGluZyBmcm9tIHNvdXJjZSBmaWxlICdzdmNzb2NrLmMnLCBsaW5lIDE2MDMgeW91IHNpbXBseSBkbzoKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKK0lmIHlvdSBtYWtlIGEgbWlzdGFrZSB3aXRoIHRoZSBzeW50YXgsIHRoZSB3cml0ZSB3aWxsIGZhaWwgdGh1czoKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyB3dGYgMSArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKy1iYXNoOiBlY2hvOiB3cml0ZSBlcnJvcjogSW52YWxpZCBhcmd1bWVudAorCitWaWV3aW5nIER5bmFtaWMgRGVidWcgQmVoYXZpb3VyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IGNhbiB2aWV3IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBiZWhhdmlvdXIgb2YgYWxsIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzCit2aWE6CisKK251bGxhcmJvcjp+ICMgY2F0IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKyMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjMyMyBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2NsZWFudXAgLSAiU1ZDUkRNQSBNb2R1bGUgUmVtb3ZlZCwgZGVyZWdpc3RlciBSUEMgUkRNQSB0cmFuc3BvcnRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozNDEgW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFtYXhfaW5saW5lICAgICAgIDogJWRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozNDAgW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFzcV9kZXB0aCAgICAgICAgIDogJWRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozMzggW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFtYXhfcmVxdWVzdHMgICAgIDogJWRcMDEyIgorLi4uCisKKworWW91IGNhbiBhbHNvIGFwcGx5IHN0YW5kYXJkIFVuaXggdGV4dCBtYW5pcHVsYXRpb24gZmlsdGVycyB0byB0aGlzCitkYXRhLCBlLmcuCisKK251bGxhcmJvcjp+ICMgZ3JlcCAtaSByZG1hIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wgIHwgd2MgLWwKKzYyCisKK251bGxhcmJvcjp+ICMgZ3JlcCAtaSB0Y3AgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbCB8IHdjIC1sCis0MgorCitOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCB0aGUgdGhpcmQgY29sdW1uIHNob3dzIHRoZSBlbmFibGVkIGJlaGF2aW91cgorZmxhZ3MgZm9yIGVhY2ggZGVidWcgc3RhdGVtZW50IGNhbGxzaXRlIChzZWUgYmVsb3cgZm9yIGRlZmluaXRpb25zIG9mIHRoZQorZmxhZ3MpLiAgVGhlIGRlZmF1bHQgdmFsdWUsIG5vIGV4dHJhIGJlaGF2aW91ciBlbmFibGVkLCBpcyAiLSIuICBTbworeW91IGNhbiB2aWV3IGFsbCB0aGUgZGVidWcgc3RhdGVtZW50IGNhbGxzaXRlcyB3aXRoIGFueSBub24tZGVmYXVsdCBmbGFnczoKKworbnVsbGFyYm9yOn4gIyBhd2sgJyQzICE9ICItIicgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y3NvY2suYzoxNjAzIFtzdW5ycGNdc3ZjX3NlbmQgcCAic3ZjX3Byb2Nlc3M6IHN0X3NlbmR0byByZXR1cm5lZCAlZFwwMTIiCisKKworQ29tbWFuZCBMYW5ndWFnZSBSZWZlcmVuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0F0IHRoZSBsZXhpY2FsIGxldmVsLCBhIGNvbW1hbmQgY29tcHJpc2VzIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc2VwYXJhdGVkCitieSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgbmV3bGluZXMgYXJlIHRyZWF0ZWQgYXMgd29yZAorc2VwYXJhdG9ycyBhbmQgZG8gKm5vdCogZW5kIGEgY29tbWFuZCBvciBhbGxvdyBtdWx0aXBsZSBjb21tYW5kcyB0bworYmUgZG9uZSB0b2dldGhlci4gIFNvIHRoZXNlIGFyZSBhbGwgZXF1aXZhbGVudDoKKworbnVsbGFyYm9yOn4gIyBlY2hvIC1jICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCitudWxsYXJib3I6fiAjIGVjaG8gLWMgJyAgZmlsZSAgIHN2Y3NvY2suYyAgICAgbGluZSAgMTYwMyArcCAgJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorbnVsbGFyYm9yOn4gIyBlY2hvIC1jICdmaWxlIHN2Y3NvY2suY1xubGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKK0NvbW1hbmRzIGFyZSBib3VuZGVkIGJ5IGEgd3JpdGUoKSBzeXN0ZW0gY2FsbC4gIElmIHlvdSB3YW50IHRvIGRvCittdWx0aXBsZSBjb21tYW5kcyB5b3UgbmVlZCB0byBkbyBhIHNlcGFyYXRlICJlY2hvIiBmb3IgZWFjaCwgbGlrZToKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4gL3Byb2MvZHByaW50ayA7XAorPiBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE1NjMgK3AnID4gL3Byb2MvZHByaW50aworCitvciBldmVuIGxpa2U6CisKK251bGxhcmJvcjp+ICMgKAorPiBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnIDtcCis+IGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTU2MyArcCcgO1wKKz4gKSA+IC9wcm9jL2RwcmludGsKKworQXQgdGhlIHN5bnRhY3RpY2FsIGxldmVsLCBhIGNvbW1hbmQgY29tcHJpc2VzIGEgc2VxdWVuY2Ugb2YgbWF0Y2gKK3NwZWNpZmljYXRpb25zLCBmb2xsb3dlZCBieSBhIGZsYWdzIGNoYW5nZSBzcGVjaWZpY2F0aW9uLgorCitjb21tYW5kIDo6PSBtYXRjaC1zcGVjKiBmbGFncy1zcGVjCisKK1RoZSBtYXRjaC1zcGVjJ3MgYXJlIHVzZWQgdG8gY2hvb3NlIGEgc3Vic2V0IG9mIHRoZSBrbm93biBkcHJpbnRrKCkKK2NhbGxzaXRlcyB0byB3aGljaCB0byBhcHBseSB0aGUgZmxhZ3Mtc3BlYy4gIFRoaW5rIG9mIHRoZW0gYXMgYSBxdWVyeQord2l0aCBpbXBsaWNpdCBBTkRzIGJldHdlZW4gZWFjaCBwYWlyLiAgTm90ZSB0aGF0IGFuIGVtcHR5IGxpc3Qgb2YKK21hdGNoLXNwZWNzIGlzIHBvc3NpYmxlLCBidXQgaXMgbm90IHZlcnkgdXNlZnVsIGJlY2F1c2UgaXQgd2lsbCBub3QKK21hdGNoIGFueSBkZWJ1ZyBzdGF0ZW1lbnQgY2FsbHNpdGVzLgorCitBIG1hdGNoIHNwZWNpZmljYXRpb24gY29tcHJpc2VzIGEga2V5d29yZCwgd2hpY2ggY29udHJvbHMgdGhlIGF0dHJpYnV0ZQorb2YgdGhlIGNhbGxzaXRlIHRvIGJlIGNvbXBhcmVkLCBhbmQgYSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuICBQb3NzaWJsZQora2V5d29yZHMgYXJlOgorCittYXRjaC1zcGVjIDo6PSAnZnVuYycgc3RyaW5nIHwKKwkgICAgICAgJ2ZpbGUnIHN0cmluZyB8CisJICAgICAgICdtb2R1bGUnIHN0cmluZyB8CisJICAgICAgICdmb3JtYXQnIHN0cmluZyB8CisJICAgICAgICdsaW5lJyBsaW5lLXJhbmdlCisKK2xpbmUtcmFuZ2UgOjo9IGxpbmVubyB8CisJICAgICAgICctJ2xpbmVubyB8CisJICAgICAgIGxpbmVubyctJyB8CisJICAgICAgIGxpbmVubyctJ2xpbmVubworLy8gTm90ZTogbGluZS1yYW5nZSBjYW5ub3QgY29udGFpbiBzcGFjZSwgZS5nLgorLy8gIjEtMzAiIGlzIHZhbGlkIHJhbmdlIGJ1dCAiMSAtIDMwIiBpcyBub3QuCisKK2xpbmVubyA6Oj0gdW5zaWduZWQtaW50CisKK1RoZSBtZWFuaW5ncyBvZiBlYWNoIGtleXdvcmQgYXJlOgorCitmdW5jCisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBmdW5jdGlvbiBuYW1lCisgICAgb2YgZWFjaCBjYWxsc2l0ZS4gIEV4YW1wbGU6CisKKyAgICBmdW5jIHN2Y190Y3BfYWNjZXB0CisKK2ZpbGUKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3QgZWl0aGVyIHRoZSBmdWxsCisgICAgcGF0aG5hbWUgb3IgdGhlIGJhc2VuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiBlYWNoCisgICAgY2FsbHNpdGUuICBFeGFtcGxlczoKKworICAgIGZpbGUgc3Zjc29jay5jCisgICAgZmlsZSAvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKworbW9kdWxlCisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBtb2R1bGUgbmFtZQorICAgIG9mIGVhY2ggY2FsbHNpdGUuICBUaGUgbW9kdWxlIG5hbWUgaXMgdGhlIHN0cmluZyBhcworICAgIHNlZW4gaW4gImxzbW9kIiwgaS5lLiB3aXRob3V0IHRoZSBkaXJlY3Rvcnkgb3IgdGhlIC5rbworICAgIHN1ZmZpeCBhbmQgd2l0aCAnLScgY2hhbmdlZCB0byAnXycuICBFeGFtcGxlczoKKworICAgIG1vZHVsZSBzdW5ycGMKKyAgICBtb2R1bGUgbmZzZAorCitmb3JtYXQKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgZHluYW1pYyBkZWJ1ZyBmb3JtYXQKKyAgICBzdHJpbmcuICBOb3RlIHRoYXQgdGhlIHN0cmluZyBkb2VzIG5vdCBuZWVkIHRvIG1hdGNoIHRoZQorICAgIGVudGlyZSBmb3JtYXQsIG9ubHkgc29tZSBwYXJ0LiAgV2hpdGVzcGFjZSBhbmQgb3RoZXIKKyAgICBzcGVjaWFsIGNoYXJhY3RlcnMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgQyBvY3RhbCBjaGFyYWN0ZXIKKyAgICBlc2NhcGUgXG9vbyBub3RhdGlvbiwgZS5nLiB0aGUgc3BhY2UgY2hhcmFjdGVyIGlzIFwwNDAuCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIHN0cmluZyBjYW4gYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlCisgICAgY2hhcmFjdGVycyAoIikgb3Igc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKCcpLgorICAgIEV4YW1wbGVzOgorCisgICAgZm9ybWF0IHN2Y3JkbWE6CSAgICAvLyBtYW55IG9mIHRoZSBORlMvUkRNQSBzZXJ2ZXIgZHByaW50a3MKKyAgICBmb3JtYXQgcmVhZGFoZWFkCSAgICAvLyBzb21lIGRwcmludGtzIGluIHRoZSByZWFkYWhlYWQgY2FjaGUKKyAgICBmb3JtYXQgbmZzZDpcMDQwU0VUQVRUUiAvLyBvbmUgd2F5IHRvIG1hdGNoIGEgZm9ybWF0IHdpdGggd2hpdGVzcGFjZQorICAgIGZvcm1hdCAibmZzZDogU0VUQVRUUiIgIC8vIGEgbmVhdGVyIHdheSB0byBtYXRjaCBhIGZvcm1hdCB3aXRoIHdoaXRlc3BhY2UKKyAgICBmb3JtYXQgJ25mc2Q6IFNFVEFUVFInICAvLyB5ZXQgYW5vdGhlciB3YXkgdG8gbWF0Y2ggYSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlCisKK2xpbmUKKyAgICBUaGUgZ2l2ZW4gbGluZSBudW1iZXIgb3IgcmFuZ2Ugb2YgbGluZSBudW1iZXJzIGlzIGNvbXBhcmVkCisgICAgYWdhaW5zdCB0aGUgbGluZSBudW1iZXIgb2YgZWFjaCBkcHJpbnRrKCkgY2FsbHNpdGUuICBBIHNpbmdsZQorICAgIGxpbmUgbnVtYmVyIG1hdGNoZXMgdGhlIGNhbGxzaXRlIGxpbmUgbnVtYmVyIGV4YWN0bHkuICBBCisgICAgcmFuZ2Ugb2YgbGluZSBudW1iZXJzIG1hdGNoZXMgYW55IGNhbGxzaXRlIGJldHdlZW4gdGhlIGZpcnN0CisgICAgYW5kIGxhc3QgbGluZSBudW1iZXIgaW5jbHVzaXZlLiAgQW4gZW1wdHkgZmlyc3QgbnVtYmVyIG1lYW5zCisgICAgdGhlIGZpcnN0IGxpbmUgaW4gdGhlIGZpbGUsIGFuIGVtcHR5IGxpbmUgbnVtYmVyIG1lYW5zIHRoZQorICAgIGxhc3QgbnVtYmVyIGluIHRoZSBmaWxlLiAgRXhhbXBsZXM6CisKKyAgICBsaW5lIDE2MDMJICAgIC8vIGV4YWN0bHkgbGluZSAxNjAzCisgICAgbGluZSAxNjAwLTE2MDUgIC8vIHRoZSBzaXggbGluZXMgZnJvbSBsaW5lIDE2MDAgdG8gbGluZSAxNjA1CisgICAgbGluZSAtMTYwNQkgICAgLy8gdGhlIDE2MDUgbGluZXMgZnJvbSBsaW5lIDEgdG8gbGluZSAxNjA1CisgICAgbGluZSAxNjAwLQkgICAgLy8gYWxsIGxpbmVzIGZyb20gbGluZSAxNjAwIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUKKworVGhlIGZsYWdzIHNwZWNpZmljYXRpb24gY29tcHJpc2VzIGEgY2hhbmdlIG9wZXJhdGlvbiBmb2xsb3dlZAorYnkgb25lIG9yIG1vcmUgZmxhZyBjaGFyYWN0ZXJzLiAgVGhlIGNoYW5nZSBvcGVyYXRpb24gaXMgb25lCitvZiB0aGUgY2hhcmFjdGVyczoKKworLQorICAgIHJlbW92ZSB0aGUgZ2l2ZW4gZmxhZ3MKKworKworICAgIGFkZCB0aGUgZ2l2ZW4gZmxhZ3MKKworPQorICAgIHNldCB0aGUgZmxhZ3MgdG8gdGhlIGdpdmVuIGZsYWdzCisKK1RoZSBmbGFncyBhcmU6CisKK3AKKyAgICBDYXVzZXMgYSBwcmludGsoKSBtZXNzYWdlIHRvIGJlIGVtaXR0ZWQgdG8gZG1lc2cKKworTm90ZSB0aGUgcmVnZXhwIF5bLSs9XVtzY3BdKyQgbWF0Y2hlcyBhIGZsYWdzIHNwZWNpZmljYXRpb24uCitOb3RlIGFsc28gdGhhdCB0aGVyZSBpcyBubyBjb252ZW5pZW50IHN5bnRheCB0byByZW1vdmUgYWxsCit0aGUgZmxhZ3MgYXQgb25jZSwgeW91IG5lZWQgdG8gdXNlICItcHNjIi4KKworRXhhbXBsZXMKKz09PT09PT09CisKKy8vIGVuYWJsZSB0aGUgbWVzc2FnZSBhdCBsaW5lIDE2MDMgb2YgZmlsZSBzdmNzb2NrLmMKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIHRoZSBtZXNzYWdlcyBpbiBmaWxlIHN2Y3NvY2suYworbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gdGhlIE5GUyBzZXJ2ZXIgbW9kdWxlCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ21vZHVsZSBuZnNkICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGRpc2FibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgLXAnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBtZXNzYWdlcyBmb3IgTkZTIGNhbGxzIFJFQUQsIFJFQURMSU5LLCBSRUFERElSIGFuZCBSRUFERElSKy4KK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZm9ybWF0ICJuZnNkOiBSRUFEIiArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBhYzk4ODUxLi5lNDdjMGZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0zMzcsMyArMzM3LDI5IEBACiAJU2VjbWFyaywgaXQgaXMgdGltZSB0byBkZXByZWNhdGUgdGhlIG9sZGVyIG1lY2hhbmlzbSBhbmQgc3RhcnQgdGhlCiAJcHJvY2VzcyBvZiByZW1vdmluZyB0aGUgb2xkIGNvZGUuCiBXaG86CVBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CXN5c2ZzIHVpIGZvciBjaGFuZ2luZyBwNC1jbG9ja21vZCBwYXJhbWV0ZXJzCitXaGVuOglTZXB0ZW1iZXIgMjAwOQorV2h5OglTZWUgY29tbWl0cyAxMjlmOGFlOWIxYjViZTk0NTE3ZGE3NjAwOWVhOTU2ZTg5MTA0Y2U4IGFuZAorCWUwODhlNGM5Y2RiNjE4Njc1ODc0YmVjYjkxYjJmZDU4MWVlNzA3ZTYuCisJUmVtb3ZhbCBpcyBzdWJqZWN0IHRvIGZpeGluZyBhbnkgcmVtYWluaW5nIGJ1Z3MgaW4gQUNQSSB3aGljaCBtYXkKKwljYXVzZSB0aGUgdGhlcm1hbCB0aHJvdHRsaW5nIG5vdCB0byBoYXBwZW4gYXQgdGhlIHJpZ2h0IHRpbWUuCitXaG86CURhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglfX2RvX0lSUSBhbGwgaW4gb25lIGZpdHMgbm90aGluZyBpbnRlcnJ1cHQgaGFuZGxlcgorV2hlbjoJMi42LjMyCitXaHk6CV9fZG9fSVJRIHdhcyBrZXB0IGZvciBlYXN5IG1pZ3JhdGlvbiB0byB0aGUgdHlwZSBmbG93IGhhbmRsZXJzLgorCU1vcmUgdGhhbiB0d28geWVhcnMgb2YgbWlncmF0aW9uIHRpbWUgaXMgZW5vdWdoLgorV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJb2Jzb2xldGUgZ2VuZXJpYyBpcnEgZGVmaW5lcyBhbmQgdHlwZWRlZnMKK1doZW46CTIuNi4zMAorV2h5OglUaGUgZGVmaW5lcyBhbmQgdHlwZWRlZnMgKGh3X2ludGVycnVwdF90eXBlLCBub19pcnFfdHlwZSwgaXJxX2Rlc2NfdCkKKwloYXZlIGJlZW4ga2VwdCBhcm91bmQgZm9yIG1pZ3JhdGlvbiByZWFzb25zLiBBZnRlciBtb3JlIHRoYW4gdHdvIHllYXJzCisJaXQncyB0aW1lIHRvIHJlbW92ZSB0aGVtIGZpbmFsbHkKK1dobzoJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKaW5kZXggZWM2YTkzOS4uNGU3OGNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpAQCAtNDM3LDggKzQzNywxMSBAQAogY2FuIGFuZCBzaG91bGQgYmUgZG9uZSB1c2luZyB0aGUgaW50ZXJuYWwgbG9ja2luZyB3aXRoIHNtYWxsZXIgY3JpdGljYWwgYXJlYXMpLgogQ3VycmVudCB3b3JzdCBvZmZlbmRlciBpcyBleHQyX2dldF9ibG9jaygpLi4uCiAKLS0+ZmFzeW5jKCkgaXMgYSBtZXNzLiBUaGlzIGFyZWEgbmVlZHMgYSBiaWcgY2xlYW51cCBhbmQgdGhhdCB3aWxsIHByb2JhYmx5Ci1hZmZlY3QgbG9ja2luZy4KKy0+ZmFzeW5jKCkgaXMgY2FsbGVkIHdpdGhvdXQgQktMIHByb3RlY3Rpb24sIGFuZCBpcyByZXNwb25zaWJsZSBmb3IKK21haW50YWluaW5nIHRoZSBGQVNZTkMgYml0IGluIGZpbHAtPmZfZmxhZ3MuICBNb3N0IGluc3RhbmNlcyBjYWxsCitmYXN5bmNfaGVscGVyKCksIHdoaWNoIGRvZXMgdGhhdCBtYWludGVuYW5jZSwgc28gaXQncyBub3Qgbm9ybWFsbHkKK3NvbWV0aGluZyBvbmUgbmVlZHMgdG8gd29ycnkgYWJvdXQuICBSZXR1cm4gdmFsdWVzID4gMCB3aWxsIGJlIG1hcHBlZCB0bworemVybyBpbiB0aGUgVkZTIGxheWVyLgogCiAtPnJlYWRkaXIoKSBhbmQgLT5pb2N0bCgpIG9uIGRpcmVjdG9yaWVzIG11c3QgYmUgY2hhbmdlZC4gSWRlYWxseSB3ZSB3b3VsZAogbW92ZSAtPnJlYWRkaXIoKSB0byBpbm9kZV9vcGVyYXRpb25zIGFuZCB1c2UgYSBzZXBhcmF0ZSBtZXRob2QgZm9yIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQKaW5kZXggNDMzM2U4My4uZTA1NWFjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0CkBAIC0zNzMsMTAgKzM3MywxMSBAQAogQ29tcHJlc3Npb24gKCopCQlodHRwOi8vZTJjb21wci5zb3VyY2Vmb3JnZS5uZXQvCiAKIEltcGxlbWVudGF0aW9ucyBmb3I6Ci1XaW5kb3dzIDk1Lzk4L05ULzIwMDAJaHR0cDovL3VyYW51cy5pdC5zd2luLmVkdS5hdS9+am4vbGludXgvRXhwbG9yZTJmcy5odG0KLVdpbmRvd3MgOTUgKCopCQlodHRwOi8vd3d3LnlpcHRvbi5kZW1vbi5jby51ay9jb250ZW50Lmh0bWwjRlNERVhUMgorV2luZG93cyA5NS85OC9OVC8yMDAwCWh0dHA6Ly93d3cuY2hyeXNvY29tZS5uZXQvZXhwbG9yZTJmcworV2luZG93cyA5NSAoKikJCWh0dHA6Ly93d3cueWlwdG9uLm5ldC9jb250ZW50Lmh0bWwjRlNERVhUMgogRE9TIGNsaWVudCAoKikJCWZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2V4dDIvCi1PUy8yCQkJaHR0cDovL3BlcnNvLndhbmFkb28uZnIvbWF0dGhpZXUud2lsbG0vZXh0Mi1vczIvCi1SSVNDIE9TIGNsaWVudAkJZnRwOi8vZnRwLmJhcm5ldC5hYy51ay9wdWIvYWNvcm4vYXJtbGludXgvaXNjYWZzLworT1MvMiAoKykJCWZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2V4dDIvCitSSVNDIE9TIGNsaWVudAkJaHR0cDovL3d3dy5lc3ctaGVpbS50dS1jbGF1c3RoYWwuZGUvfm1hcmNvL3Ntb3Jicm9kL0lzY2FGUy8KIAogKCopIG5vIGxvbmdlciBhY3RpdmVseSBkZXZlbG9wZWQvc3VwcG9ydGVkIChhcyBvZiBBcHIgMjAwMSkKKygrKSBubyBsb25nZXIgYWN0aXZlbHkgZGV2ZWxvcGVkL3N1cHBvcnRlZCAoYXMgb2YgTWFyIDIwMDkpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAppbmRleCA5ZGQyYTNiYi4uZTVmMzgzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CkBAIC0xOTgsNSArMTk4LDUgQEAKIHByb2dyYW1zOiAJaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCiAJCWh0dHA6Ly9leHQycmVzaXplLnNvdXJjZWZvcmdlLm5ldAogCi11c2VmdWwgbGlua3M6CWh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLWZzNy8KLQkJaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtZnM4LwordXNlZnVsIGxpbmtzOglodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGlicmFyeS9sLWZzNy5odG1sCisJCWh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saWJyYXJ5L2wtZnM4Lmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGE4N2JlNDIuLjgzMGJhZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTQ3OCw2ICsxNDc4LDEzIEBACiB0aGlzIHNob3VsZCBiZSBlbmFibGVkLCBidXQgaWYgdGhlIHByb2JsZW0gcGVyc2lzdHMgdGhlIG1lc3NhZ2VzIGNhbiBiZQogZGlzYWJsZWQuCiAKK25ldGRldl9idWRnZXQKKy0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0YWtlbiBmcm9tIGFsbCBpbnRlcmZhY2VzIGluIG9uZSBwb2xsaW5nIGN5Y2xlIChOQVBJCitwb2xsKS4gSW4gb25lIHBvbGxpbmcgY3ljbGUgaW50ZXJmYWNlcyB3aGljaCBhcmUgcmVnaXN0ZXJlZCB0byBwb2xsaW5nIGFyZQorcHJvYmVkIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBUaGUgbGltaXQgb2YgcGFja2V0cyBpbiBvbmUgc3VjaCBwcm9iZSBjYW4gYmUKK3NldCBwZXItZGV2aWNlIHZpYSBzeXNmcyBjbGFzcy9uZXQvPGRldmljZT4vd2VpZ2h0IC4KIAogbmV0ZGV2X21heF9iYWNrbG9nCiAtLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3F1YXNoZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zcXVhc2hmcy50eHQKaW5kZXggM2U3OWU0YS4uYjMyNGMwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zcXVhc2hmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zcXVhc2hmcy50eHQKQEAgLTIyLDcgKzIyLDcgQEAKIAogCQkJCVNxdWFzaGZzCQlDcmFtZnMKIAotTWF4IGZpbGVzeXN0ZW0gc2l6ZToJCTJeNjQJCQkxNiBNaUIKK01heCBmaWxlc3lzdGVtIHNpemU6CQkyXjY0CQkJMjU2IE1pQgogTWF4IGZpbGUgc2l6ZToJCQl+IDIgVGlCCQkJMTYgTWlCCiBNYXggZmlsZXM6CQkJdW5saW1pdGVkCQl1bmxpbWl0ZWQKIE1heCBkaXJlY3RvcmllczoJCXVubGltaXRlZAkJdW5saW1pdGVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CmluZGV4IDllOWMzNDguLjdlODFlMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CkBAIC0yLDggKzIsMTAgQEAKIHN5c2ZzIC0gX1RoZV8gZmlsZXN5c3RlbSBmb3IgZXhwb3J0aW5nIGtlcm5lbCBvYmplY3RzLiAKIAogUGF0cmljayBNb2NoZWwJPG1vY2hlbEBvc2RsLm9yZz4KK01pa2UgTXVycGh5IDxtYW11cnBoQGNzLmNsZW1zb24uZWR1PgogCi0xMCBKYW51YXJ5IDIwMDMKK1JldmlzZWQ6ICAgIDIyIEZlYnJ1YXJ5IDIwMDkKK09yaWdpbmFsOiAgIDEwIEphbnVhcnkgMjAwMwogCiAKIFdoYXQgaXQgaXM6CkBAIC02NCwxMiArNjYsMTMgQEAKIAogc3RydWN0IGF0dHJpYnV0ZSB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICogbmFtZTsKKyAgICAgICAgc3RydWN0IG1vZHVsZQkJKm93bmVyOwogICAgICAgICBtb2RlX3QgICAgICAgICAgICAgICAgICBtb2RlOwogfTsKIAogCi1pbnQgc3lzZnNfY3JlYXRlX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0cik7Ci12b2lkIHN5c2ZzX3JlbW92ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIpOworaW50IHN5c2ZzX2NyZWF0ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIpOwordm9pZCBzeXNmc19yZW1vdmVfZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyKTsKIAogCiBBIGJhcmUgYXR0cmlidXRlIGNvbnRhaW5zIG5vIG1lYW5zIHRvIHJlYWQgb3Igd3JpdGUgdGhlIHZhbHVlIG9mIHRoZQpAQCAtODAsOSArODMsMTEgQEAKIEZvciBleGFtcGxlLCB0aGUgZHJpdmVyIG1vZGVsIGRlZmluZXMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbGlrZToKIAogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgewotICAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICAgICAgICBhdHRyOwotICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqIGRldiwgY2hhciAqIGJ1Zik7Ci0gICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqIGRldiwgY29uc3QgY2hhciAqIGJ1Zik7CisJc3RydWN0IGF0dHJpYnV0ZQlhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogfTsKIAogaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOwpAQCAtOTAsMTIgKzk1LDggQEAKIAogSXQgYWxzbyBkZWZpbmVzIHRoaXMgaGVscGVyIGZvciBkZWZpbmluZyBkZXZpY2UgYXR0cmlidXRlczogCiAKLSNkZWZpbmUgREVWSUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSAgICAgIFwKLXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyXyMjX25hbWUgPSB7ICAgICAgICAgICAgXAotICAgICAgICAuYXR0ciA9IHsubmFtZSAgPSBfX3N0cmluZ2lmeShfbmFtZSkgLCAubW9kZSAgID0gX21vZGUgfSwgICAgICBcCi0gICAgICAgIC5zaG93ICAgPSBfc2hvdywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLnN0b3JlICA9IF9zdG9yZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfTsKKyNkZWZpbmUgREVWSUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSBcCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKIAogRm9yIGV4YW1wbGUsIGRlY2xhcmluZwogCkBAIC0xMDcsOSArMTA4LDkgQEAKICAgICAgICAuYXR0cgk9IHsKIAkJLm5hbWUgPSAiZm9vIiwKIAkJLm1vZGUgPSBTX0lXVVNSIHwgU19JUlVHTywKKwkJLnNob3cgPSBzaG93X2ZvbywKKwkJLnN0b3JlID0gc3RvcmVfZm9vLAogCX0sCi0JLnNob3cgPSBzaG93X2ZvbywKLQkuc3RvcmUgPSBzdG9yZV9mb28sCiB9OwogCiAKQEAgLTE2MSwxMCArMTYyLDEyIEBACiBzcGVjaWZpZWQgd2hlbiBkZWNsYXJpbmcgdGhlIGF0dHJpYnV0ZS4gVGhlIG1ldGhvZCB0eXBlcyBzaG91bGQgYmUgYXMKIHNpbXBsZSBhcyB0aG9zZSBkZWZpbmVkIGZvciBkZXZpY2UgYXR0cmlidXRlczoKIAotICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqIGRldiwgY2hhciAqIGJ1Zik7Ci0gICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqIGRldiwgY29uc3QgY2hhciAqIGJ1Zik7Citzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAorICAgICAgICAgICAgICAgIGNoYXIgKiBidWYpOworc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBidWYpOwogCi1JT1csIHRoZXkgc2hvdWxkIHRha2Ugb25seSBhbiBvYmplY3QgYW5kIGEgYnVmZmVyIGFzIHBhcmFtZXRlcnMuIAorSU9XLCB0aGV5IHNob3VsZCB0YWtlIG9ubHkgYW4gb2JqZWN0LCBhbiBhdHRyaWJ1dGUsIGFuZCBhIGJ1ZmZlciBhcyBwYXJhbWV0ZXJzLgogCiAKIHN5c2ZzIGFsbG9jYXRlcyBhIGJ1ZmZlciBvZiBzaXplIChQQUdFX1NJWkUpIGFuZCBwYXNzZXMgaXQgdG8gdGhlCkBAIC0yOTksMTQgKzMwMiwxNiBAQAogU3RydWN0dXJlOgogCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB7Ci0gICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgICAgICAgIGF0dHI7Ci0gICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjaGFyICogYnVmKTsKLSAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjb25zdCBjaGFyICogYnVmKTsKKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCiBEZWNsYXJpbmc6CiAKLURFVklDRV9BVFRSKF9uYW1lLCBfc3RyLCBfbW9kZSwgX3Nob3csIF9zdG9yZSk7CitERVZJQ0VfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpOwogCiBDcmVhdGlvbi9SZW1vdmFsOgogCkBAIC0zNDIsNyArMzQ3LDggQEAKIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlIHsKICAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKICAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNoYXIgKiBidWYpOwotICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IGNoYXIgKiBidWYpOworICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IGNoYXIgKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50KTsKIH07CiAKIERlY2xhcmluZzoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vaHBmYWxsLmMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2hwZmFsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZWExY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2hwZmFsbC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKiBEaXNrIHByb3RlY3Rpb24gZm9yIEhQIG1hY2hpbmVzLgorICoKKyAqIENvcHlyaWdodCAyMDA4IEVyaWMgUGllbAorICogQ29weXJpZ2h0IDIwMDkgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICoKKyAqIEdQTHYyLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCit2b2lkIHdyaXRlX2ludChjaGFyICpwYXRoLCBpbnQgaSkKK3sKKwljaGFyIGJ1ZlsxMDI0XTsKKwlpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRXUik7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoIm9wZW4iKTsKKwkJZXhpdCgxKTsKKwl9CisJc3ByaW50ZihidWYsICIlZCIsIGkpOworCWlmICh3cml0ZShmZCwgYnVmLCBzdHJsZW4oYnVmKSkgIT0gc3RybGVuKGJ1ZikpIHsKKwkJcGVycm9yKCJ3cml0ZSIpOworCQlleGl0KDEpOworCX0KKwljbG9zZShmZCk7Cit9CisKK3ZvaWQgc2V0X2xlZChpbnQgb24pCit7CisJd3JpdGVfaW50KCIvc3lzL2NsYXNzL2xlZHMvaHA6OmhkZHByb3RlY3QvYnJpZ2h0bmVzcyIsIG9uKTsKK30KKwordm9pZCBwcm90ZWN0KGludCBzZWNvbmRzKQoreworCXdyaXRlX2ludCgiL3N5cy9ibG9jay9zZGEvZGV2aWNlL3VubG9hZF9oZWFkcyIsIHNlY29uZHMqMTAwMCk7Cit9CisKK2ludCBvbl9hYyh2b2lkKQoreworLy8JL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvQUMwL29ubGluZQorfQorCitpbnQgbGlkX29wZW4odm9pZCkKK3sKKy8vCS9wcm9jL2FjcGkvYnV0dG9uL2xpZC9MSUQvc3RhdGUKK30KKwordm9pZCBpZ25vcmVfbWUodm9pZCkKK3sKKwlwcm90ZWN0KDApOworCXNldF9sZWQoMCk7CisKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgICAgICBpbnQgZmQsIHJldDsKKworICAgICAgIGZkID0gb3BlbigiL2Rldi9mcmVlZmFsbCIsIE9fUkRPTkxZKTsKKyAgICAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgICAgICAgICBwZXJyb3IoIm9wZW4iKTsKKyAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICAgfQorCisJc2lnbmFsKFNJR0FMUk0sIGlnbm9yZV9tZSk7CisKKyAgICAgICBmb3IgKDs7KSB7CisJICAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQ7CisKKyAgICAgICAgICAgICAgIHJldCA9IHJlYWQoZmQsICZjb3VudCwgc2l6ZW9mKGNvdW50KSk7CisJICAgICAgIGFsYXJtKDApOworCSAgICAgICBpZiAoKHJldCA9PSAtMSkgJiYgKGVycm5vID09IEVJTlRSKSkgeworCQkgICAgICAgLyogQWxhcm0gZXhwaXJlZCwgdGltZSB0byB1bnBhcmsgdGhlIGhlYWRzICovCisJCSAgICAgICBjb250aW51ZTsKKwkgICAgICAgfQorCisgICAgICAgICAgICAgICBpZiAocmV0ICE9IHNpemVvZihjb3VudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCJyZWFkIik7CisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgfQorCisJICAgICAgIHByb3RlY3QoMjEpOworCSAgICAgICBzZXRfbGVkKDEpOworCSAgICAgICBpZiAoMSB8fCBvbl9hYygpIHx8IGxpZF9vcGVuKCkpIHsKKwkJICAgICAgIGFsYXJtKDIpOworCSAgICAgICB9IGVsc2UgeworCQkgICAgICAgYWxhcm0oMjApOworCSAgICAgICB9CisgICAgICAgfQorCisgICAgICAgY2xvc2UoZmQpOworICAgICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xpczNsdjAyZCBiL0RvY3VtZW50YXRpb24vaHdtb24vbGlzM2x2MDJkCmluZGV4IDBmY2ZjNGEuLjI4N2Y4YzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbGlzM2x2MDJkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbGlzM2x2MDJkCkBAIC0zMyw2ICszMywxNCBAQAogVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCiB0aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KIAorQW5vdGhlciBmZWF0dXJlIG9mIHRoZSBkcml2ZXIgaXMgbWlzYyBkZXZpY2UgY2FsbGVkICJmcmVlZmFsbCIgdGhhdAorYWN0cyBzaW1pbGFyIHRvIC9kZXYvcnRjIGFuZCByZWFjdHMgb24gZnJlZS1mYWxsIGludGVycnVwdHMgcmVjZWl2ZWQKK2Zyb20gdGhlIGRldmljZS4gSXQgc3VwcG9ydHMgYmxvY2tpbmcgb3BlcmF0aW9ucywgcG9sbC9zZWxlY3QgYW5kCitmYXN5bmMgb3BlcmF0aW9uIG1vZGVzLiBZb3UgbXVzdCByZWFkIDEgYnl0ZXMgZnJvbSB0aGUgZGV2aWNlLiAgVGhlCityZXN1bHQgaXMgbnVtYmVyIG9mIGZyZWUtZmFsbCBpbnRlcnJ1cHRzIHNpbmNlIHRoZSBsYXN0IHN1Y2Nlc3NmdWwKK3JlYWQgKG9yIDI1NSBpZiBudW1iZXIgb2YgaW50ZXJydXB0cyB3b3VsZCBub3QgZml0KS4KKworCiBBeGVzIG9yaWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAppbmRleCAwZTg0MTE3Li45M2Q4ZTNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCkBAIC00Miw2ICs0MiwxMSBAQAogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0ZQogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCiAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzQ5NworICAqIE1heGltIE1BWDY2NDgKKyAgICBQcmVmaXg6ICdtYXg2NjQ2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YworICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzUwMAogICAqIE1heGltIE1BWDY2NDkKICAgICBQcmVmaXg6ICdtYXg2NjQ2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YwpAQCAtNzQsNiArNzksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGMsIDB4NGQgYW5kIDB4NGUKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzMzNzAKKyAgKiBNYXhpbSBNQVg2NjkyCisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM1MDAKIAogCiBBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiMTgyNjI2Li5mYTRlMTIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNDQsNiArNDQsNyBAQAogCUZCCVRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIGVuYWJsZWQuCiAJSFcJQXBwcm9wcmlhdGUgaGFyZHdhcmUgaXMgZW5hYmxlZC4KIAlJQS02NAlJQS02NCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlJTUEgICAgIEludGVncml0eSBtZWFzdXJlbWVudCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KIAlJT1NDSEVECU1vcmUgdGhhbiBvbmUgSS9PIHNjaGVkdWxlciBpcyBlbmFibGVkLgogCUlQX1BOUAlJUCBESENQLCBCT09UUCwgb3IgUkFSUCBpcyBlbmFibGVkLgogCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KQEAgLTExNCw3ICsxMTUsNyBAQAogUGFyYW1ldGVycyBkZW5vdGVkIHdpdGggQk9PVCBhcmUgYWN0dWFsbHkgaW50ZXJwcmV0ZWQgYnkgdGhlIGJvb3QKIGxvYWRlciwgYW5kIGhhdmUgbm8gbWVhbmluZyB0byB0aGUga2VybmVsIGRpcmVjdGx5LgogRG8gbm90IG1vZGlmeSB0aGUgc3ludGF4IG9mIGJvb3QgbG9hZGVyIHBhcmFtZXRlcnMgd2l0aG91dCBleHRyZW1lCi1uZWVkIG9yIGNvb3JkaW5hdGlvbiB3aXRoIDxEb2N1bWVudGF0aW9uL3g4Ni9pMzg2L2Jvb3QudHh0Pi4KK25lZWQgb3IgY29vcmRpbmF0aW9uIHdpdGggPERvY3VtZW50YXRpb24veDg2L2Jvb3QudHh0Pi4KIAogVGhlcmUgYXJlIGFsc28gYXJjaC1zcGVjaWZpYyBrZXJuZWwtcGFyYW1ldGVycyBub3QgZG9jdW1lbnRlZCBoZXJlLgogU2VlIGZvciBleGFtcGxlIDxEb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dD4uCkBAIC0xMzQsNyArMTM1LDcgQEAKIAogCWFjcGk9CQlbSFcsQUNQSSxYODYtNjQsaTM4Nl0KIAkJCUFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZQotCQkJRm9ybWF0OiB7IGZvcmNlIHwgb2ZmIHwgaHQgfCBzdHJpY3QgfCBub2lycSB9CisJCQlGb3JtYXQ6IHsgZm9yY2UgfCBvZmYgfCBodCB8IHN0cmljdCB8IG5vaXJxIHwgcnNkdCB9CiAJCQlmb3JjZSAtLSBlbmFibGUgQUNQSSBpZiBkZWZhdWx0IHdhcyBvZmYKIAkJCW9mZiAtLSBkaXNhYmxlIEFDUEkgaWYgZGVmYXVsdCB3YXMgb24KIAkJCW5vaXJxIC0tIGRvIG5vdCB1c2UgQUNQSSBmb3IgSVJRIHJvdXRpbmcKQEAgLTQ5MiwxMCArNDkzLDEyIEBACiAJCQlEZWZhdWx0OiA2NAogCiAJaHBldD0JCVtYODYtMzIsSFBFVF0gb3B0aW9uIHRvIGNvbnRyb2wgSFBFVCB1c2FnZQotCQkJRm9ybWF0OiB7IGVuYWJsZSAoZGVmYXVsdCkgfCBkaXNhYmxlIHwgZm9yY2UgfQorCQkJRm9ybWF0OiB7IGVuYWJsZSAoZGVmYXVsdCkgfCBkaXNhYmxlIHwgZm9yY2UgfAorCQkJCXZlcmJvc2UgfQogCQkJZGlzYWJsZTogZGlzYWJsZSBIUEVUIGFuZCB1c2UgUElUIGluc3RlYWQKIAkJCWZvcmNlOiBhbGxvdyBmb3JjZSBlbmFibGVkIG9mIHVuZG9jdW1lbnRlZCBjaGlwcyAoSUNINCwKIAkJCVZJQSwgblZpZGlhKQorCQkJdmVyYm9zZTogc2hvdyBjb250ZW50cyBvZiBIUEVUIHJlZ2lzdGVycyBkdXJpbmcgc2V0dXAKIAogCWNvbTIwMDIwPQlbSFcsTkVUXSBBUkNuZXQgLSBDT00yMDAyMCBjaGlwc2V0CiAJCQlGb3JtYXQ6CkBAIC04MjksNiArODMyLDkgQEAKIAogCWh2Y19pdWN2PQlbUzM5MF0gTnVtYmVyIG9mIHovVk0gSVVDViBoeXBlcnZpc29yIGNvbnNvbGUgKEhWQykKIAkJCSAgICAgICB0ZXJtaW5hbCBkZXZpY2VzLiBWYWxpZCB2YWx1ZXM6IDAuLjgKKwlodmNfaXVjdl9hbGxvdz0JW1MzOTBdIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMuCisJCQkgICAgICAgSWYgc3BlY2lmaWVkLCB6L1ZNIElVQ1YgSFZDIGFjY2VwdHMgY29ubmVjdGlvbnMKKwkJCSAgICAgICBmcm9tIGxpc3RlZCB6L1ZNIHVzZXIgSURzIG9ubHkuCiAKIAlpODA0Mi5kZWJ1ZwlbSFddIFRvZ2dsZSBpODA0MiBkZWJ1ZyBtb2RlCiAJaTgwNDIuZGlyZWN0CVtIV10gUHV0IGtleWJvYXJkIHBvcnQgaW50byBub24tdHJhbnNsYXRlZCBtb2RlCkBAIC04NjgsOCArODc0LDEwIEBACiAJaWNuPQkJW0hXLElTRE5dCiAJCQlGb3JtYXQ6IDxpbz5bLDxtZW1iYXNlPlssPGljbl9pZD5bLDxpY25faWQyPl1dXQogCi0JaWRlPQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtCi0JCQlGb3JtYXQ6IGlkZT1ub2RtYSBvciBpZGU9ZG91YmxlcgorCWlkZS1jb3JlLm5vZG1hPQlbSFddIChFKUlERSBzdWJzeXN0ZW0KKwkJCUZvcm1hdDogPTAuMCB0byBwcmV2ZW50IGRtYSBvbiBoZGEsID0wLjEgaGRiID0xLjAgaGRjCisJCQkudmxiX2Nsb2NrIC5wY2lfY2xvY2sgLm5vZmx1c2ggLm5vcHJvYmUgLm5vd2VyciAuY2Ryb20KKwkJCS5jaHMgLmlnbm9yZV9jYWJsZSBhcmUgYWRkaXRpb25hbCBvcHRpb25zCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dC4KIAogCWlkZWJ1cz0JCVtIV10gKEUpSURFIHN1YnN5c3RlbSAtIFZMQi9QQ0kgYnVzIHNwZWVkCkBAIC05MDAsNiArOTA4LDE1IEBACiAJaWhhc2hfZW50cmllcz0JW0tOTF0KIAkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBpbm9kZSBjYWNoZS4KIAorCWltYV9hdWRpdD0JW0lNQV0KKwkJCUZvcm1hdDogeyAiMCIgfCAiMSIgfQorCQkJMCAtLSBpbnRlZ3JpdHkgYXVkaXRpbmcgbWVzc2FnZXMuIChEZWZhdWx0KQorCQkJMSAtLSBlbmFibGUgaW5mb3JtYXRpb25hbCBpbnRlZ3JpdHkgYXVkaXRpbmcgbWVzc2FnZXMuCisKKwlpbWFfaGFzaD0JW0lNQV0KKwkJCUZvcm10OiB7ICJzaGExIiB8ICJtZDUiIH0KKwkJCWRlZmF1bHQ6ICJzaGExIgorCiAJaW4yMDAwPQkJW0hXLFNDU0ldCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9pbjIwMDAuYy4KIApAQCAtMTgxNCwxMSArMTgzMSw2IEBACiAJCQlhdXRvY29uZmlndXJhdGlvbi4KIAkJCVJhbmdlcyBhcmUgaW4gcGFpcnMgKG1lbW9yeSBiYXNlIGFuZCBzaXplKS4KIAotCWR5bmFtaWNfcHJpbnRrCUVuYWJsZXMgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgaWYKLQkJCUNPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBoYXMgYmVlbiBlbmFibGVkLgotCQkJVGhlc2UgY2FuIGFsc28gYmUgc3dpdGNoZWQgb24vb2ZmIHZpYQotCQkJPGRlYnVnZnM+L2R5bmFtaWNfcHJpbnRrL21vZHVsZXMKLQogCXByaW50LWZhdGFsLXNpZ25hbHM9CiAJCQlbS05MXSBkZWJ1ZzogcHJpbnQgZmF0YWwgc2lnbmFscwogCQkJcHJpbnQtZmF0YWwtc2lnbmFscz0xOiBwcmludCBzZWdmYXVsdCBpbmZvIHRvCkBAIC0yNDQ5LDcgKzI0NjEsNyBAQAogCQkJU2VlIERvY3VtZW50YXRpb24vZmIvbW9kZWRiLnR4dC4KIAogCXZnYT0JCVtCT09ULFg4Ni0zMl0gU2VsZWN0IGEgcGFydGljdWxhciB2aWRlbyBtb2RlCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi94ODYvaTM4Ni9ib290LnR4dCBhbmQKKwkJCVNlZSBEb2N1bWVudGF0aW9uL3g4Ni9ib290LnR4dCBhbmQKIAkJCURvY3VtZW50YXRpb24vc3ZnYS50eHQuCiAJCQlVc2UgdmdhPWFzayBmb3IgbWVudS4KIAkJCVRoaXMgaXMgYWN0dWFsbHkgYSBib290IGxvYWRlciBwYXJhbWV0ZXI7IHRoZSB2YWx1ZSBpcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sb2dvLmdpZiBiL0RvY3VtZW50YXRpb24vbG9nby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYWU3NWYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9sb2dvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9nby5zdmcgYi9Eb2N1bWVudGF0aW9uL2xvZ28uc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWU0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvZ28uc3ZnCkBAIC0wLDAgKzEsMjkxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4KKzxzdmcKKyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKKyAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCisgICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCisgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCisgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCisgICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKKyAgIHdpZHRoPSIxNzcxLjY1MzQiCisgICBoZWlnaHQ9IjE0MTcuMzIyOCIKKyAgIGlkPSJzdmcyIgorICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKKyAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYiCisgICBzb2RpcG9kaTpkb2NuYW1lPSJ0dXouc3ZnIgorICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiCisgICB2ZXJzaW9uPSIxLjAiCisgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9jaGVlc2VuZXNzL0RvY3VtZW50cy9MQ0EwOS9tYXNjb3QvdHV6X2ZpbmFsLnBuZyIKKyAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxMDAuMDM1ODgiCisgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTAwLjAzNTg4Ij4KKyAgPHNvZGlwb2RpOm5hbWVkdmlldworICAgICBpZD0iYmFzZSIKKyAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgorICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKKyAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgorICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKKyAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgorICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgorICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgorICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgorICAgICBpbmtzY2FwZTp6b29tPSIwLjI1IgorICAgICBpbmtzY2FwZTpjeD0iLTE3NC43OTMxIgorICAgICBpbmtzY2FwZTpjeT0iNzg0LjI2MzI1IgorICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCisgICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzIiCisgICAgIHNob3dncmlkPSJmYWxzZSIKKyAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjgwIgorICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MjMiCisgICAgIGlua3NjYXBlOndpbmRvdy14PSItNCIKKyAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI1IgorICAgICBzaG93Z3VpZGVzPSJ0cnVlIgorICAgICBpbmtzY2FwZTpndWlkZS1iYm94PSJ0cnVlIgorICAgICB1bml0cz0ibW0iIC8+CisgIDxkZWZzCisgICAgIGlkPSJkZWZzNCI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4PSItMC4wODQ2NTQ5OTQiCisgICAgICAgd2lkdGg9IjEuMTY5MzEiCisgICAgICAgeT0iLTAuMzY1OTI0NjkiCisgICAgICAgaGVpZ2h0PSIxLjczMTg0OTQiCisgICAgICAgaWQ9ImZpbHRlcjExMzYxIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSI0LjU3NDA1ODYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIxMTM2MyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgorICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1NjQuMDk3NiA6IDEiCisgICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgorICAgICAgIGlua3NjYXBlOnZwX3o9IjE0NDUuODU5MSA6IDU2NC4wOTc2IDogMSIKKyAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzIyLjkyOTU3IDogMzc2LjA2NTA2IDogMSIKKyAgICAgICBpZD0icGVyc3BlY3RpdmU4MTQ1IiAvPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDc2MjIiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A3NjI0IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A3NjI2IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDExMyI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDQxMTUiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQxMTciIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY2MCI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDM2NjIiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDM2NjQiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjI3Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wMzYyOSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wMzYzMSIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI4NDMiPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMjg0NSIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwLjAyMTg4Nzg0IgorICAgICAgICAgaWQ9InN0b3AyODQ3IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwLjc1ODY2MjIyIgorICAgICAgICAgaWQ9InN0b3AyODQ5IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMjg1MSIKKyAgICAgICAgIG9mZnNldD0iMC44ODUwODk4MSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyMzIzMjM7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMjg1MyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1OTU5NTk7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDg5NjQiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxYTFhMWE7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A4OTY2IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxYTFhMWE7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A4OTY4IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk1MiI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzBhMGMwYztzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDg5NTQiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFmMjcyNztzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDg5NTYiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ4NDMwIj4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMWUyMzIzO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wODQzMiIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDg0MzgiCisgICAgICAgICBvZmZzZXQ9IjAuNTU5OTIzODkiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxZDFkO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wODQzNCIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDgzOTgiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyODMxMzE7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A4NDAwIiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wODQwMiIKKyAgICAgICAgIG9mZnNldD0iMC41MTI1NTg3IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFlMjQyNDtzdG9wLW9wYWNpdHk6MDsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDg0MDQiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDg3MCI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3YmQ4MDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDQ4NzIiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3YmQ4MDtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQ4NzQiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDg2MiI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UyZTJlMjtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDQ4NjQiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UyZTJlMjtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQ4NjYiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDc4Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjllZWQzO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wNDQ4MCIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wNDQ4MiIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMDYiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkOWUwMDI7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A0MTA4IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wNDExNCIKKyAgICAgICAgIG9mZnNldD0iMC41IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2E5YWUwMTtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcxNzUwMTtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQxMTAiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDg0Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojN2Q3ZDAwO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wNDA4NiIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDQwODgiCisgICAgICAgICBvZmZzZXQ9IjAuMzYzNjYwMSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNmM3MDA7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmNmY4MDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A0MDkwIiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDA0MSI+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3A0MDQzIgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmYwMDtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3A0MDQ1IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmYwMDtzdG9wLW9wYWNpdHk6MDsiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDI1Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wNDAyNyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wNDAzMSIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwMTMiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A0MDE1IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMmIyMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A0MDE3IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzk4NSI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDM5ODciIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFkMWQxZDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDM5ODkiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTYxIj4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjgzMTMxO3N0b3Atb3BhY2l0eTowOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wMzk2MyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDM5NjUiCisgICAgICAgICBvZmZzZXQ9IjAuNSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxZTI0MjQ7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3AzOTY3IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzk1MSI+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzOTUzIgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzM0NDA0MDtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzIyMjkyOTtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAuNSIKKyAgICAgICAgIGlkPSJzdG9wMzk1NSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDM5NTciCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MDkiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyODMxMzE7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3AzOTExIiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMzkxNyIKKyAgICAgICAgIG9mZnNldD0iMC41IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFlMjQyNDtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDM5MTMiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTM3Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWRhNDY5O3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wMzUzOSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDM1NDUiCisgICAgICAgICBvZmZzZXQ9IjAuODExMzIwNzgiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWRhNDY5O3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wMzU0MSIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzMTciPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjZmM2OTA7c3RvcC1vcGFjaXR5OjEiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDMzMTkiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzMzIxIgorICAgICAgICAgb2Zmc2V0PSIwLjIxMTYxODY1IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2FmYTc3NTtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzMzIzIgorICAgICAgICAgb2Zmc2V0PSIwLjUzNDA4NTE1IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzYxNWMzYTtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAuNzY1MDQwOTMiCisgICAgICAgICBpZD0ic3RvcDMzMjUiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzMzI3IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzQwMzUxODtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMjM5Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDMyNTEiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2ZjNjkwO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWZhNzc1O3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMC4yMTE2MTg2NSIKKyAgICAgICAgIGlkPSJzdG9wMzI2NyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNjE1YzNhO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMC41MzQwODUxNSIKKyAgICAgICAgIGlkPSJzdG9wMzI2MSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDMyNjUiCisgICAgICAgICBvZmZzZXQ9IjAuNzY1MDQwOTMiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNDAzNTE4O3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wMzI0MyIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMjM5IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDMyODEiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU0ODA0MjMsMS43NDE0MzA0LC0xLjk2ODM1MTUsMS43NDk3NjM4LC0xMTMwLjU1ODYsLTE4NzIuNTEyMSkiCisgICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiCisgICAgICAgY3g9IjgwNi41MjU4MiIKKyAgICAgICBjeT0iMjEyLjY4MTE3IgorICAgICAgIGZ4PSI4MDYuNTI1ODIiCisgICAgICAgZnk9IjIxMi42ODExNyIKKyAgICAgICByPSI0OC4zNjMyMTYiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMzMTciCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzMxNSIKKyAgICAgICBjeD0iNTQzLjY2OTgiCisgICAgICAgY3k9IjE0Ny4zMTMxIgorICAgICAgIGZ4PSI1NDMuNjY5OCIKKyAgICAgICBmeT0iMTQ3LjMxMzEiCisgICAgICAgcj0iNDcuODYzMjE2IgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xMzgyMjU2LDAsMCwyLjMzODI4ODQsLTc3LjAzODQ3LC0xMDEuNjg3MDQpIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNTM3IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM1NDMiCisgICAgICAgY3g9IjM4NSIKKyAgICAgICBjeT0iMjM3LjAwNTA0IgorICAgICAgIGZ4PSIzODUiCisgICAgICAgZnk9IjIzNy4wMDUwNCIKKyAgICAgICByPSI4Ni45Mjg1NzQiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjg1NjIwMzgsMCwzNC4wODA0MjcpIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTA5IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM5MTUiCisgICAgICAgY3g9IjQxOC4zMDM2NSIKKyAgICAgICBjeT0iMzQyLjQ3Nzk0IgorICAgICAgIGZ4PSI0MTguMzAzNjUiCisgICAgICAgZnk9IjM0Mi40Nzc5NCIKKyAgICAgICByPSIxMzEuNDUwOSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzk1NzM0NywwLjYyMTEwNTYsLTAuNDI0NDA2NywwLjk1MzcxNzQsLTE1LjA2MTkxMywtMjI3Ljk2NzExKSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzk1MSIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTMzIgorICAgICAgIGN4PSIzOTcuMTYzODgiCisgICAgICAgY3k9IjMzNi45NTI0NSIKKyAgICAgICBmeD0iMzk3LjE2Mzg4IgorICAgICAgIGZ5PSIzMzYuOTUyNDUiCisgICAgICAgcj0iMzYuNzUiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjk0NDk5NzIsMi40ODk0ODM3ZS03LC0yLjQ4OTQ4MzNlLTcsMS45NDQ5OTY5LC0zNzUuMzE4NjgsLTMxOC40MTkxMikiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM5NjEiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzk1OSIKKyAgICAgICB4MT0iMzk4LjIxNDI5IgorICAgICAgIHkxPSIzNDMuNTIyODkiCisgICAgICAgeDI9IjM3OS4yODU3MSIKKyAgICAgICB5Mj0iMjY1LjMwODYyIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyMzk4MSIKKyAgICAgICB4PSItMC4zMDAwMDAwMSIKKyAgICAgICB3aWR0aD0iMS42IgorICAgICAgIHk9Ii0wLjMwMDAwMDAxIgorICAgICAgIGhlaWdodD0iMS42Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzk4MyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzk4NSIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTkxIgorICAgICAgIGN4PSI0MDIuNDg4OTgiCisgICAgICAgY3k9IjMxNy4yMzU3OCIKKyAgICAgICBmeD0iNDAyLjQ4ODk4IgorICAgICAgIGZ5PSIzMTcuMjM1NzgiCisgICAgICAgcj0iMjMuNzE0Mjg1IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC4zNzc2NjE2LDAsMCw0LjM3NzY2MTYsLTEzNTguMzAyNSwtMTA3MC43MzU3KSIgLz4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzOTk5Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2Y1ZmYwNDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSIKKyAgICAgICAgIGQ9Ik0gMTc5LjY0Mjg2LDI2Ny4zNjIxOCBDIDE1Ny4yMzI0MiwzMDcuMDY1MSAxMTkuMDI2NzYsMzgzLjE0MjQ3IDExMC4zNTcxNSw0MTcuMDA1MDQgQyAxMDEuNzA5OTQsNDUwLjc4MDE0IDEwMS41ODUxNiw0ODMuNDIxNTggMTEwLDUwMy40MzM2MiBDIDExOC4zNjAyLDUyMy4zMTU3NSAxMzYuMTYzOTgsNTM5LjA2NjQyIDE1MC43MTQyOCw1NDQuODYyMTggQyAxNTAuMTE3OSw1MzAuNDg2MzEgMTY1LjA4NzIzLDUwMS41NzYzNSAyMjMuNTcxNDMsNDcyLjM2MjE4IEMgMjgyLjE5NzcsNDQzLjA3NzA0IDMwMS45NTMwNiw0NDUuMjMxMzIgMzI3LjE0Mjg1LDQyNS4yMTkzMiBDIDM1Mi43NzI5MSw0MDQuODU3NTYgMzM5Ljc1MzE2LDM1OC4xNzQ2OSAzMzAuMzU3MTQsMzMxLjI5MDc1IEMgMzIwLjkyMjksMzA0LjI5NzQ3IDI5NS4zODk3MywyNzIuMTY2MjcgMjYzLjkyODU3LDI2MS42NDc5IEMgMjMyLjg5NTMsMjUxLjI3MjU4IDE5OC45MTA4MSwyNTYuNzk5NTMgMTc5LjY0Mjg2LDI2Ny4zNjIxOCB6IgorICAgICAgICAgaWQ9InBhdGg0MDAxIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenpjenp6emMiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDAxMyIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDU2IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xMzIzMjM5LDAuNzY1OTQ4OCwtMS40NTUwMjg2LDIuMTUxMDA5OCw1ODguNzUzNzYsLTcxMS43OTcxNikiCisgICAgICAgY3g9IjIyOC44MTM1NSIKKyAgICAgICBjeT0iNDQwLjI2OTcxIgorICAgICAgIGZ4PSIyMjguODEzNTUiCisgICAgICAgZnk9IjQ0MC4yNjk3MSIKKyAgICAgICByPSIxMTkuMTc1MDkiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwNDEiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA2MCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuOTExMjA2ZS0yLDIuNjg2OTg1NSwtMC43MjM0MjY4LDEuNTkxNDk0N2UtMiw0MDguNzI3NzksLTQyNC41NjQ1MikiCisgICAgICAgY3g9IjI3NS40NDIyIgorICAgICAgIGN5PSIzMzUuMzQ4NjYiCisgICAgICAgZng9IjI3NS40NDIyIgorICAgICAgIGZ5PSIzMzUuMzQ4NjYiCisgICAgICAgcj0iMzYuNzUiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwMjUiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA2MiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuOTExMjA2ZS0yLDIuNjg2OTg1NSwtMC43MjM0MjY4LDEuNTkxNDk0N2UtMiw0MDguNzI3NzksLTQyNC41NjQ1MikiCisgICAgICAgY3g9IjI3NS40NDIyIgorICAgICAgIGN5PSIzMzUuMzQ4NjYiCisgICAgICAgZng9IjI3NS40NDIyIgorICAgICAgIGZ5PSIzMzUuMzQ4NjYiCisgICAgICAgcj0iMzYuNzUiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwODQiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDA4MiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICB4MT0iMTgyLjM1MDQ2IgorICAgICAgIHkxPSIyNTYuMTExMzYiCisgICAgICAgeDI9IjE0NS41MzM0OCIKKyAgICAgICB5Mj0iNTQyLjIwNTAyIiAvPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDQxMDAiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTAwMDc1NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCisgICAgICAgICBkPSJNIDI2NS45MzU0MSwxMjYuNjgzOTMgTCAyNDcuMTY4MiwyOTUuNTQ3MDEgTCA0MjEuMjczNjMsMjIyLjQyNjMzIEwgNDgzLjIyODAzLDMxMS4wODUxNiBMIDU0MS4xMTI0MywyNzkuMDk0ODYgTCA1MDMuNTc4MDEsOTkuMDM1MTgzIEwgMjY1LjkzNTQxLDEyNi42ODM5MyB6IgorICAgICAgICAgaWQ9InBhdGg0MTAyIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQxMDYiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDExMiIKKyAgICAgICBjeD0iMjUwLjIyNjc4IgorICAgICAgIGN5PSI0NzUuMDk3NjMiCisgICAgICAgZng9IjI1MC4yMjY3OCIKKyAgICAgICBmeT0iNDc1LjA5NzYzIgorICAgICAgIHI9Ijk1Ljk4ODc3IgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMjU5MDA0LC0wLjcwNzc3MzksMC4xNDEzOTg5LDAuMjQ0OTEwMiwzMjIuMjIzMjYsNjA4LjkxODE1KSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDQ3OCIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDg0IgorICAgICAgIHgxPSI0MTIuMDg5MjYiCisgICAgICAgeTE9IjQwNC45MTU3NCIKKyAgICAgICB4Mj0iNDE3LjM3NSIKKyAgICAgICB5Mj0iNDAxLjgyNjQ4IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NDc4IgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ0ODYiCisgICAgICAgeDE9IjQxMS45MTA3MSIKKyAgICAgICB5MT0iNDA0LjkxNTc3IgorICAgICAgIHgyPSI0MTcuMzc1IgorICAgICAgIHkyPSI0MDEuODI2NDgiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ0NzgiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDQ4OCIKKyAgICAgICB4MT0iNDExLjkxMDcxIgorICAgICAgIHkxPSI0MDUuNTQwNzciCisgICAgICAgeDI9IjQxNy4zNzUiCisgICAgICAgeTI9IjQwMS44MjY0OCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDQ3OCIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDkwIgorICAgICAgIHgxPSI0MTIuMDg5MjYiCisgICAgICAgeTE9IjQwNS41NDA3NyIKKyAgICAgICB4Mj0iNDE3LjM3NSIKKyAgICAgICB5Mj0iNDAxLjgyNjQ4IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NDc4IgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ0OTIiCisgICAgICAgeDE9IjQxMS43MzIxMiIKKyAgICAgICB5MT0iNDA1LjU0MDc3IgorICAgICAgIHgyPSI0MTcuMzc1IgorICAgICAgIHkyPSI0MDEuODI2NDgiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ4NjIiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDg2OCIKKyAgICAgICBjeD0iNDI5LjU2NzM4IgorICAgICAgIGN5PSIzNzcuNDI4NzciCisgICAgICAgZng9IjQyOS41NjczOCIKKyAgICAgICBmeT0iMzc3LjQyODc3IgorICAgICAgIHI9IjcyLjA3OTczNSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDAuNjE4MDM0LDAsMTQ0LjE2NDk2KSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDg3MCIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0ODc2IgorICAgICAgIGN4PSI0MzcuNjk5MSIKKyAgICAgICBjeT0iMzkxLjIxNzM1IgorICAgICAgIGZ4PSI0MzcuNjk5MSIKKyAgICAgICBmeT0iMzkxLjIxNzM1IgorICAgICAgIHI9IjM2LjYxMTkzMSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDAuNjE4MDM0LDAsMTQ5LjQzMTc0KSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDAxMyIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzNTg1IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xMzIzMjM5LDAuNzY1OTQ4OCwtMS40NTUwMjg2LDIuMTUxMDA5OCw1ODguNzUzNzYsLTcxMS43OTcxNikiCisgICAgICAgY3g9IjIyOC44MTM1NSIKKyAgICAgICBjeT0iNDQwLjI2OTcxIgorICAgICAgIGZ4PSIyMjguODEzNTUiCisgICAgICAgZnk9IjQ0MC4yNjk3MSIKKyAgICAgICByPSIxMTkuMTc1MDkiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwODQiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzU4NyIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICB4MT0iMTgyLjM1MDQ2IgorICAgICAgIHkxPSIyNTYuMTExMzYiCisgICAgICAgeDI9IjE0NS41MzM0OCIKKyAgICAgICB5Mj0iNTQyLjIwNTAyIiAvPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMzE3IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDg0MTAiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMzY0NzgsLTEuMDM0NTQ5MmUtNywxLjcxMjQ2MjhlLTcsMS42NjEzMTI1LC03NTMuOTk2MzIsLTMwMi43Njk3MikiCisgICAgICAgY3g9IjMxNy43ODc1NCIKKyAgICAgICBjeT0iMTI5LjY1Mzc4IgorICAgICAgIGZ4PSIzMTcuNzg3NTQiCisgICAgICAgZnk9IjEyOS42NTM3OCIKKyAgICAgICByPSI0Ny44NjMyMTYiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDgzOTgiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50ODQxMiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDc0NzY2MSwtMC4xNTc3OTU3LDAuMjM4MjQyNSwzLjEzMjUxODMsLTExNDQuMjM1OCwtMjcyLjI5MzI1KSIKKyAgICAgICBjeD0iMzI1LjMwODQ3IgorICAgICAgIGN5PSI4MC45MDk1NTQiCisgICAgICAgZng9IjMyNS4zMDg0NyIKKyAgICAgICBmeT0iODAuOTA5NTU0IgorICAgICAgIHI9IjI2LjkzNzk4OCIgLz4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NTE0Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzI2MmYyZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDM1Mi4yNDU1MywyMTEuOTkxODUgQyAzNDguNDQxMSwxODYuNzI3NjIgMzM1LjQzNTgxLDE2MS4zNTM4MyAzMzUuMDg4NzMsMTM2LjQ2NjYyIEMgMzM0LjkwMjQ3LDEyMy4xMTExIDMzOC4zNjE1OCwxMDkuODk1NzEgMzQ4Ljg0NDI2LDk2LjkxMjU3NCBDIDM4NS4xOTEyOCwzMS42MTY3MzkgNDY1Ljc4NTE3LDEyLjIxNzg4OSA1MzQuNzc4OTIsNS40NDcxNDcgQyA2MjEuNzAxMzEsLTUuNTY5NjU0IDcxOS42OTE1OSwyMy4zODcyMTkgNzY4LjE1MDI2LDEwMC44NDg0MyBDIDgyMi4yNzQyOCwxNzYuNTgxNzMgODI0LjgyNTAyLDI3My4zODc1NSA4NDguNzYyMywzNjAuMzc2MzggQyA4NzguMjAwMDksNDg3LjUwMzk4IDkwMy41NDE0NCw2MTYuNTkwNTIgOTA5LjE1NDU0LDc0Ny4yMjY3MyBDIDkwNi4wOTEwNiw4MjUuNDA4NTggOTAwLjcyODIsOTEyLjQxMDg4IDg0OC42NTEzMyw5NzUuMzYwODYgQyA4MDAuNjI0NzksMTAyNS43MTgzIDcyNS44NjQ4NiwxMDI1LjQxMzkgNjYxLjU4MTQ1LDEwMzQuMzYzMiBDIDU3MS4wMjYwNiwxMDM5LjAxODIgNDc3LjIyOTkyLDEwMTguMjE3NCAzOTkuNzk3NTUsOTcwLjE2NDk2IEMgMzM1LjAyMTkxLDkzMi4yMjQ5NSAzMDQuMDY3MzYsODU2LjY4NjMzIDMwMi41MTgxNSw3ODQuMTQ1MzggQyAyOTQuMTI4OTgsNzA0LjI3MDIyIDMyOC45MDk2Nyw2MzAuMzM2ODcgMzU0LjEzODU1LDU1Ni45ODU3NyBDIDM2MS42MDkxNiw0NzQuMjI0NyAzNjMuNTUxNDEsMzkwLjczODAyIDM2My43OTE4OSwzMDcuNjAwOTMgQyAzNjIuOTU1MDcsMjc1LjQwNTQ5IDM1Ni43MDIzNiwyNDMuNzgzNiAzNTIuMjQ1NTMsMjExLjk5MTg1IHoiCisgICAgICAgICBpZD0icGF0aDg1MTYiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2NjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODYwNCI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMyNjJmMmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgZD0iTSAzNTIuMjQ1NTMsMjExLjk5MTg1IEMgMzQ4LjQ0MTEsMTg2LjcyNzYyIDMzNS40MzU4MSwxNjEuMzUzODMgMzM1LjA4ODczLDEzNi40NjY2MiBDIDMzNC45MDI0NywxMjMuMTExMSAzMzguMzYxNTgsMTA5Ljg5NTcxIDM0OC44NDQyNiw5Ni45MTI1NzQgQyAzODUuMTkxMjgsMzEuNjE2NzM5IDQ2NS43ODUxNywxMi4yMTc4ODkgNTM0Ljc3ODkyLDUuNDQ3MTQ3IEMgNjIxLjcwMTMxLC01LjU2OTY1NCA3MTkuNjkxNTksMjMuMzg3MjE5IDc2OC4xNTAyNiwxMDAuODQ4NDMgQyA4MjIuMjc0MjgsMTc2LjU4MTczIDgyNC44MjUwMiwyNzMuMzg3NTUgODQ4Ljc2MjMsMzYwLjM3NjM4IEMgODc4LjIwMDA5LDQ4Ny41MDM5OCA5MDMuNTQxNDQsNjE2LjU5MDUyIDkwOS4xNTQ1NCw3NDcuMjI2NzMgQyA5MDYuMDkxMDYsODI1LjQwODU4IDkwMC43MjgyLDkxMi40MTA4OCA4NDguNjUxMzMsOTc1LjM2MDg2IEMgODAwLjYyNDc5LDEwMjUuNzE4MyA3MjUuODY0ODYsMTAyNS40MTM5IDY2MS41ODE0NSwxMDM0LjM2MzIgQyA1NzEuMDI2MDYsMTAzOS4wMTgyIDQ3Ny4yMjk5MiwxMDE4LjIxNzQgMzk5Ljc5NzU1LDk3MC4xNjQ5NiBDIDMzNS4wMjE5MSw5MzIuMjI0OTUgMzA0LjA2NzM2LDg1Ni42ODYzMyAzMDIuNTE4MTUsNzg0LjE0NTM4IEMgMjk0LjEyODk4LDcwNC4yNzAyMiAzMjguOTA5NjcsNjMwLjMzNjg3IDM1NC4xMzg1NSw1NTYuOTg1NzcgQyAzNjEuNjA5MTYsNDc0LjIyNDcgMzYzLjU1MTQxLDM5MC43MzgwMiAzNjMuNzkxODksMzA3LjYwMDkzIEMgMzYyLjk1NTA3LDI3NS40MDU0OSAzNTYuNzAyMzYsMjQzLjc4MzYgMzUyLjI0NTUzLDIxMS45OTE4NSB6IgorICAgICAgICAgaWQ9InBhdGg4NjA2IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDg2MTAiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMjYyZjJmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIGQ9Ik0gMzUyLjI0NTUzLDIxMS45OTE4NSBDIDM0OC40NDExLDE4Ni43Mjc2MiAzMzUuNDM1ODEsMTYxLjM1MzgzIDMzNS4wODg3MywxMzYuNDY2NjIgQyAzMzQuOTAyNDcsMTIzLjExMTEgMzM4LjM2MTU4LDEwOS44OTU3MSAzNDguODQ0MjYsOTYuOTEyNTc0IEMgMzg1LjE5MTI4LDMxLjYxNjczOSA0NjUuNzg1MTcsMTIuMjE3ODg5IDUzNC43Nzg5Miw1LjQ0NzE0NyBDIDYyMS43MDEzMSwtNS41Njk2NTQgNzE5LjY5MTU5LDIzLjM4NzIxOSA3NjguMTUwMjYsMTAwLjg0ODQzIEMgODIyLjI3NDI4LDE3Ni41ODE3MyA4MjQuODI1MDIsMjczLjM4NzU1IDg0OC43NjIzLDM2MC4zNzYzOCBDIDg3OC4yMDAwOSw0ODcuNTAzOTggOTAzLjU0MTQ0LDYxNi41OTA1MiA5MDkuMTU0NTQsNzQ3LjIyNjczIEMgOTA2LjA5MTA2LDgyNS40MDg1OCA5MDAuNzI4Miw5MTIuNDEwODggODQ4LjY1MTMzLDk3NS4zNjA4NiBDIDgwMC42MjQ3OSwxMDI1LjcxODMgNzI1Ljg2NDg2LDEwMjUuNDEzOSA2NjEuNTgxNDUsMTAzNC4zNjMyIEMgNTcxLjAyNjA2LDEwMzkuMDE4MiA0NzcuMjI5OTIsMTAxOC4yMTc0IDM5OS43OTc1NSw5NzAuMTY0OTYgQyAzMzUuMDIxOTEsOTMyLjIyNDk1IDMwNC4wNjczNiw4NTYuNjg2MzMgMzAyLjUxODE1LDc4NC4xNDUzOCBDIDI5NC4xMjg5OCw3MDQuMjcwMjIgMzI4LjkwOTY3LDYzMC4zMzY4NyAzNTQuMTM4NTUsNTU2Ljk4NTc3IEMgMzYxLjYwOTE2LDQ3NC4yMjQ3IDM2My41NTE0MSwzOTAuNzM4MDIgMzYzLjc5MTg5LDMwNy42MDA5MyBDIDM2Mi45NTUwNywyNzUuNDA1NDkgMzU2LjcwMjM2LDI0My43ODM2IDM1Mi4yNDU1MywyMTEuOTkxODUgeiIKKyAgICAgICAgIGlkPSJwYXRoODYxMiIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY2NjY2NjY2NjY2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NjE2Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzI2MmYyZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDM1Mi4yNDU1MywyMTEuOTkxODUgQyAzNDguNDQxMSwxODYuNzI3NjIgMzM1LjQzNTgxLDE2MS4zNTM4MyAzMzUuMDg4NzMsMTM2LjQ2NjYyIEMgMzM0LjkwMjQ3LDEyMy4xMTExIDMzOC4zNjE1OCwxMDkuODk1NzEgMzQ4Ljg0NDI2LDk2LjkxMjU3NCBDIDM4NS4xOTEyOCwzMS42MTY3MzkgNDY1Ljc4NTE3LDEyLjIxNzg4OSA1MzQuNzc4OTIsNS40NDcxNDcgQyA2MjEuNzAxMzEsLTUuNTY5NjU0IDcxOS42OTE1OSwyMy4zODcyMTkgNzY4LjE1MDI2LDEwMC44NDg0MyBDIDgyMi4yNzQyOCwxNzYuNTgxNzMgODI0LjgyNTAyLDI3My4zODc1NSA4NDguNzYyMywzNjAuMzc2MzggQyA4NzguMjAwMDksNDg3LjUwMzk4IDkwMy41NDE0NCw2MTYuNTkwNTIgOTA5LjE1NDU0LDc0Ny4yMjY3MyBDIDkwNi4wOTEwNiw4MjUuNDA4NTggOTAwLjcyODIsOTEyLjQxMDg4IDg0OC42NTEzMyw5NzUuMzYwODYgQyA4MDAuNjI0NzksMTAyNS43MTgzIDcyNS44NjQ4NiwxMDI1LjQxMzkgNjYxLjU4MTQ1LDEwMzQuMzYzMiBDIDU3MS4wMjYwNiwxMDM5LjAxODIgNDc3LjIyOTkyLDEwMTguMjE3NCAzOTkuNzk3NTUsOTcwLjE2NDk2IEMgMzM1LjAyMTkxLDkzMi4yMjQ5NSAzMDQuMDY3MzYsODU2LjY4NjMzIDMwMi41MTgxNSw3ODQuMTQ1MzggQyAyOTQuMTI4OTgsNzA0LjI3MDIyIDMyOC45MDk2Nyw2MzAuMzM2ODcgMzU0LjEzODU1LDU1Ni45ODU3NyBDIDM2MS42MDkxNiw0NzQuMjI0NyAzNjMuNTUxNDEsMzkwLjczODAyIDM2My43OTE4OSwzMDcuNjAwOTMgQyAzNjIuOTU1MDcsMjc1LjQwNTQ5IDM1Ni43MDIzNiwyNDMuNzgzNiAzNTIuMjQ1NTMsMjExLjk5MTg1IHoiCisgICAgICAgICBpZD0icGF0aDg2MTgiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2NjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODYyMiI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMyMDIwMjA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgIGQ9Ik0gODIxLjY0MzI5LDQ3Ny44ODk5NyBDIDgyMS42NDMyOSw0NzcuODg5OTcgODQ0LjI2Mjc2LDQ3MS4zODMxNiA4NTcuMzg2MDQsNDcyLjAxNzI0IEMgODcwLjUwOTMyLDQ3Mi42NTEzMyA4ODguMDI3NjIsNDczLjk1NTg2IDkwMS4wOTQ4OSw0ODQuMjAzNDMgQyA5MTQuMTYyMTYsNDk0LjQ1MDk5IDkyNi4xNjI2Myw1MTEuMzQzNSA5MzUuMjA3MjgsNTQyLjU3MzA4IEMgOTQ0LjI1MTkzLDU3My44MDI2NiA5MzYuOTA1Niw2NDEuODI1MDkgOTI5LjAzMTI1LDY4NS45MjA0MyBDIDkyMS4xNTY5LDczMC4wMTU3NyA5MDAuNzY2MTUsNzkyLjAzMzQxIDg4NC4wMzEyNSw4MjUuOTIwNDMgQyA4NjcuMjk2MzUsODU5LjgwNzQ1IDgzNC4yMzM1NCw5MDMuNDE1NjMgODIzLjQ2MTgyLDkxNS43OTY1OSBDIDgxMi4wOTc2LDkyOC44NTg1NiA3NjcuMjU1OTMsOTUyLjIyMjc2IDc0NC4wMzEyNSw5NTguMDYzMjYgQyA3NDkuMzM0NTUsOTQ3LjQ1NjY2IDc5Mi45MzEwMSw5MDcuNDc0NDIgNzc5LjAzMTI1LDg5Ny4zNDkgQyA3NjUuMDEyMjgsODg3LjEzNjc0IDczMy4yNzExNiw5NDMuMzMxMzYgNjk0LjczODEsOTI2LjM4MjE3IEMgNzE2LjEyMDQxLDkxMy4yNTAwNSA3MzYuNTE3NSw4NzUuMTk2MTEgNzI4Ljc3ODcxLDg1OS43ODc3MiBDIDcyMC45Mzg0Niw4NDQuMTc3MzMgNjk4LjA3Mzc4LDkwOC41NDUyOSA2MzUuMjQzMTcsODk2LjgwMDYgQyA2NjUuMjk1MjEsODY5LjI3Mzk0IDY5MC42NTAyMyw4MjUuODk2NTkgNjc2LjUwNTg3LDgxMy44MjA5IEMgNjYyLjA5MDcxLDgwMS41MTQwMyA2MTYuMDQ0MTIsODY4LjExNDA1IDYxNi4wNDQxMiw4NjguMTE0MDUgQyA2MTYuMDQ0MTIsODY4LjExNDA1IDYxMy4yMjIyMiw4MjYuNDEyODcgNjI5LjgxNzMyLDc5OS41MDY3MyBDIDY0Ni40NTY2Nyw3NzIuNTI4ODYgNzA5LjQ3MDI5LDcxNy44OTE0NiA3MjkuMzcwNDUsNjg3LjgwMzMxIEMgNzQ5LjI3MDYsNjU3LjcxNTE3IDc2Mi45ODMwMSw2MjEuNzk0MjkgNzcxLjUwNTg3LDU5NS4yODUzNyBDIDc4MC4wMjg3Myw1NjguNzc2NDUgNzg3LjMwNjgxLDUxOC4xODU4MyA3ODcuMzA2ODEsNTE4LjE4NTgzIgorICAgICAgICAgaWQ9InBhdGg4NjI0IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y3pjemN6Y3p6emMiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NjQyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzBmMGYwZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDM2Ni44ODgzOSw1MDQuMTM0NzEgQyAzNjYuODg4MzksNTA0LjEzNDcxIDMzNy4zMzQzMyw1NDQuNzA3NzYgMzE5LjAzMTI1LDU3OC40MjA0MiBDIDMwMC43MjgxNiw2MTIuMTMzMDkgMjYwLjQxMDE2LDcwNC43NzczNiAyNDguNjc0MTEsNzQ5LjQ5MTg1IEMgMjM2LjkxNDcxLDc5NC4yOTUyOSAxODYuMTc0MTEsODczLjA2MzI5IDE4Ni4xNzQxMSw4NzMuMDYzMjkgTCAyNjIuMjQ1NTQsODkxLjI3NzU3IEMgMjYyLjI0NTU0LDg5MS4yNzc1NyAyNzQuMDUyNjYsODc4LjQ1NDIyIDI5My4zMTY5Niw4NDUuMjA2MTQgQyAzMTIuNTgxMjYsODExLjk1ODA2IDM1My42NzQxMSw3MDYuNjM0NzEgMzUzLjY3NDExLDcwNi42MzQ3MSBMIDM2Ni44ODgzOSw1MDQuMTM0NzEgeiIKKyAgICAgICAgIGlkPSJwYXRoODY0NCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y2N6Y2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NjU4Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzBiMGIwYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDU2OS4wMzEyNSwxMDE4Ljc3NzYgQyA1NjQuNzQ1NTQsMTAxOS40OTE5IDU0MS40MDMxLDEwMjIuMzk1NyA1MTEuMTc0MTEsMTAyOC43Nzc2IEMgNDgwLjk0NTEyLDEwMzUuMTU5NSA0MTEuMzk5MTgsMTA1NC43Mzk1IDM2OC4zMTY5NiwxMDY0LjQ5MTkgQyAzMjUuMjM0NzQsMTA3NC4yNDQzIDI1MS4wNTI1MywxMDk5LjMwNzkgMjExLjQwNDM0LDEwOTEuNzU3MyBDIDE3MS43NTYxNiwxMDg0LjIwNjcgMTIxLjg4ODM5LDEwMjcuMzQ5IDEyMS44ODgzOSwxMDI3LjM0OSBMIDEyNi4xNzQxMSw5MzMuMDYzMjkgQyAxMjYuMTc0MTEsOTMzLjA2MzI5IDIxMi4wNTk2Miw5MTYuODYyMzUgMjM4LjMxNjk2LDg5OS40OTE4NiBDIDI2NC41NzQzMSw4ODIuMTIxMzcgMjgzLjg5OTM0LDg0OS44MjU4OCAyOTcuNjAyNjgsODI4LjA2MzI5IEMgMzExLjMwNjAyLDgwNi4zMDA3IDMzMC40NTk4Miw3NTYuNjM0NzEgMzMwLjQ1OTgyLDc1Ni42MzQ3MSBMIDU2OS4wMzEyNSwxMDE4Ljc3NzYgeiIKKyAgICAgICAgIGlkPSJwYXRoODY2MCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emNjenpjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg4MDIiCisgICAgICAgeD0iLTAuMzUzMTE3NTkiCisgICAgICAgd2lkdGg9IjEuNzA2MjM1MiIKKyAgICAgICB5PSItMC4xODE3NzE0IgorICAgICAgIGhlaWdodD0iMS4zNjM1NDI4Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSI0OC4wMzg0OTEiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4ODA0IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg4MDYiCisgICAgICAgeD0iLTAuNjExNDI4NjIiCisgICAgICAgd2lkdGg9IjIuMjIyODU3MiIKKyAgICAgICB5PSItMC4xNDkzMDIzMiIKKyAgICAgICBoZWlnaHQ9IjEuMjk4NjA0NiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMzcuODMwMjEzIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgwOCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODEwIgorICAgICAgIHg9Ii0wLjIzNTE5NDA2IgorICAgICAgIHdpZHRoPSIxLjQ3MDM4ODEiCisgICAgICAgeT0iLTAuMjQ1MDA2NDYiCisgICAgICAgaGVpZ2h0PSIxLjQ5MDAxMjkiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjU4LjMyODA0MSIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4MTIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODgxNCIKKyAgICAgICB4PSItMC4yMDQ2NjY5NCIKKyAgICAgICB3aWR0aD0iMS40MDkzMzM5IgorICAgICAgIHk9Ii0wLjI5MDA3ODE5IgorICAgICAgIGhlaWdodD0iMS41ODAxNTY0Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIyMi4zMDAxNjkiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4ODE2IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg4MTgiCisgICAgICAgeD0iLTAuMzQzODEyMzIiCisgICAgICAgd2lkdGg9IjEuNjg3NjI0NiIKKyAgICAgICB5PSItMC4xODQzMzk2MSIKKyAgICAgICBoZWlnaHQ9IjEuMzY4Njc5MiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMzQuNTQyMTY3IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgyMCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODIyIgorICAgICAgIHg9Ii0wLjI3NDI4NTciCisgICAgICAgd2lkdGg9IjEuNTQ4NTcxMyIKKyAgICAgICB5PSItMC4yMTMzMzMzNCIKKyAgICAgICBoZWlnaHQ9IjEuNDI2NjY2NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTEuMzEzNzA4IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgyNCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODI2IgorICAgICAgIHg9Ii0wLjI1ODk0MDg4IgorICAgICAgIHdpZHRoPSIxLjUxNzg4MTgiCisgICAgICAgeT0iLTAuMjIzNjQxMiIKKyAgICAgICBoZWlnaHQ9IjEuNDQ3MjgyNCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTkuNjMxNTQ0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgyOCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODU2IgorICAgICAgIHg9Ii0wLjMyNTMyMzEiCisgICAgICAgd2lkdGg9IjEuNjUwNjQ2MiIKKyAgICAgICB5PSItMC4xOTAxMzMzNiIKKyAgICAgICBoZWlnaHQ9IjEuMzgwMjY2NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMjguNzEyNTkxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODg1OCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODYwIgorICAgICAgIHg9Ii0wLjM4MDkzMDI0IgorICAgICAgIHdpZHRoPSIxLjc2MTg2MDUiCisgICAgICAgeT0iLTAuMTc1MTg3MTYiCisgICAgICAgaGVpZ2h0PSIxLjM1MDM3NDMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjE5LjMwNDAxNSIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4NjIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODg4OCIKKyAgICAgICB4PSItMC4yMTEyMTg4IgorICAgICAgIHdpZHRoPSIxLjQyMjQzNzUiCisgICAgICAgeT0iLTAuMTY4MDg2MDUiCisgICAgICAgaGVpZ2h0PSIxLjMzNjE3MjEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjguMzY5MzU4MyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4OTAiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODg5MiIKKyAgICAgICB4PSItMC4xODY5Mjc5NCIKKyAgICAgICB3aWR0aD0iMS4zNzM4NTU5IgorICAgICAgIHk9Ii0wLjIzNjQ2ODczIgorICAgICAgIGhlaWdodD0iMS40NzI5Mzc1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIzMS4yMTIyOCIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4OTQiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODkwNiI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMyNjJmMmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgZD0iTSAzNTIuMjQ1NTMsMjExLjk5MTg1IEMgMzQ4LjQ0MTEsMTg2LjcyNzYyIDMzNS40MzU4MSwxNjEuMzUzODMgMzM1LjA4ODczLDEzNi40NjY2MiBDIDMzNC45MDI0NywxMjMuMTExMSAzMzguMzYxNTgsMTA5Ljg5NTcxIDM0OC44NDQyNiw5Ni45MTI1NzQgQyAzODUuMTkxMjgsMzEuNjE2NzM5IDQ2NS43ODUxNywxMi4yMTc4ODkgNTM0Ljc3ODkyLDUuNDQ3MTQ3IEMgNjIxLjcwMTMxLC01LjU2OTY1NCA3MTkuNjkxNTksMjMuMzg3MjE5IDc2OC4xNTAyNiwxMDAuODQ4NDMgQyA4MjIuMjc0MjgsMTc2LjU4MTczIDgyNC44MjUwMiwyNzMuMzg3NTUgODQ4Ljc2MjMsMzYwLjM3NjM4IEMgODc4LjIwMDA5LDQ4Ny41MDM5OCA5MDMuNTQxNDQsNjE2LjU5MDUyIDkwOS4xNTQ1NCw3NDcuMjI2NzMgQyA5MDYuMDkxMDYsODI1LjQwODU4IDkwMC43MjgyLDkxMi40MTA4OCA4NDguNjUxMzMsOTc1LjM2MDg2IEMgODAwLjYyNDc5LDEwMjUuNzE4MyA3MjUuODY0ODYsMTAyNS40MTM5IDY2MS41ODE0NSwxMDM0LjM2MzIgQyA1NzEuMDI2MDYsMTAzOS4wMTgyIDQ3Ny4yMjk5MiwxMDE4LjIxNzQgMzk5Ljc5NzU1LDk3MC4xNjQ5NiBDIDMzNS4wMjE5MSw5MzIuMjI0OTUgMzA0LjA2NzM2LDg1Ni42ODYzMyAzMDIuNTE4MTUsNzg0LjE0NTM4IEMgMjk0LjEyODk4LDcwNC4yNzAyMiAzMjguOTA5NjcsNjMwLjMzNjg3IDM1NC4xMzg1NSw1NTYuOTg1NzcgQyAzNjEuNjA5MTYsNDc0LjIyNDcgMzYzLjU1MTQxLDM5MC43MzgwMiAzNjMuNzkxODksMzA3LjYwMDkzIEMgMzYyLjk1NTA3LDI3NS40MDU0OSAzNTYuNzAyMzYsMjQzLjc4MzYgMzUyLjI0NTUzLDIxMS45OTE4NSB6IgorICAgICAgICAgaWQ9InBhdGg4OTA4IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg5NDAiCisgICAgICAgeD0iLTAuMjUxNTI5NzgiCisgICAgICAgd2lkdGg9IjEuNTAzMDU5NiIKKyAgICAgICB5PSItMC4wNTMwMzUyNjciCisgICAgICAgaGVpZ2h0PSIxLjEwNjA3MDUiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEzLjAyNDYwMyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg5NDIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDg5NTIiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk1OCIKKyAgICAgICB4MT0iNjA5LjMxMjQ0IgorICAgICAgIHkxPSIyMzkuNDY4NjYiCisgICAgICAgeDI9IjU2MC44MzE0MiIKKyAgICAgICB5Mj0iMjYyLjg2MjA2IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDg5NjQiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk3MCIKKyAgICAgICB4MT0iNjAzLjg0MDY0IgorICAgICAgIHkxPSI2MjcuODUzMDMiCisgICAgICAgeDI9IjYxNi4yNDM5NiIKKyAgICAgICB5Mj0iNTg1LjQyNjY0IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyOTAyMCIKKyAgICAgICB4PSItMC4zMjg2MTExNCIKKyAgICAgICB3aWR0aD0iMS42NTcyMjIzIgorICAgICAgIHk9Ii0wLjE4MiIKKyAgICAgICBoZWlnaHQ9IjEuMzY0Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIyMC45MTI2ODQiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI5MDIyIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjkwMjQiCisgICAgICAgeD0iLTAuNTU0NTMxMzQiCisgICAgICAgd2lkdGg9IjIuMTA5MDYyNyIKKyAgICAgICB5PSItMC41MTQzNDc3OSIKKyAgICAgICBoZWlnaHQ9IjIuMDI4Njk1NiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMjAuOTEyNjg0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyOTAyNiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI5MDQ0IgorICAgICAgIHg9Ii0wLjMyNjMxNTc5IgorICAgICAgIHdpZHRoPSIxLjY1MjYzMTYiCisgICAgICAgeT0iLTAuODQ1NDU0NjMiCisgICAgICAgaGVpZ2h0PSIyLjY5MDkwOTQiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjIxLjkyMDMxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyOTA0NiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI5MDQ4IgorICAgICAgIHg9Ii0wLjQwODc5MTIxIgorICAgICAgIHdpZHRoPSIxLjgxNzU4MjQiCisgICAgICAgeT0iLTAuNzE1Mzg0NjYiCisgICAgICAgaGVpZ2h0PSIyLjQzMDc2OTIiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjIxLjkyMDMxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyOTA1MCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXIzNTg3IgorICAgICAgIHg9Ii0wLjEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjguODgxNDMyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzU4OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjAyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjemN6Y3pjenp6YyIKKyAgICAgICAgIGlkPSJwYXRoMzYwNCIKKyAgICAgICAgIGQ9Ik0gNjQ3LjYxMjA0LDU0MC4wNDYwMSBDIDY0Ny42MTIwNCw1NDAuMDQ2MDEgNjcwLjIzMTUxLDUzMy41MzkyIDY4My4zNTQ3OSw1MzQuMTczMjggQyA2OTYuNDc4MDcsNTM0LjgwNzM3IDcxMy45OTYzNyw1MzYuMTExOSA3MjcuMDYzNjQsNTQ2LjM1OTQ3IEMgNzQwLjEzMDkxLDU1Ni42MDcwMyA3NTIuMTMxMzgsNTczLjQ5OTU0IDc2MS4xNzYwMyw2MDQuNzI5MTIgQyA3NzAuMjIwNjgsNjM1Ljk1ODcgNzYyLjg3NDM1LDcwMy45ODExMyA3NTUsNzQ4LjA3NjQ3IEMgNzQ3LjEyNTY1LDc5Mi4xNzE4MSA3MjYuNzM0OSw4NTQuMTg5NDUgNzEwLDg4OC4wNzY0NyBDIDY5My4yNjUxLDkyMS45NjM0OSA2NjAuMjAyMjksOTY1LjU3MTY3IDY0OS40MzA1Nyw5NzcuOTUyNjMgQyA2MzguMDY2MzUsOTkxLjAxNDYgNTkzLjIyNDY4LDEwMTQuMzc4OCA1NzAsMTAyMC4yMTkzIEMgNTc1LjMwMzMsMTAwOS42MTI3IDYxOC44OTk3Niw5NjkuNjMwNDYgNjA1LDk1OS41MDUwNCBDIDU5MC45ODEwMyw5NDkuMjkyNzggNTU5LjIzOTkxLDEwMDUuNDg3NCA1MjAuNzA2ODUsOTg4LjUzODIxIEMgNTQyLjA4OTE2LDk3NS40MDYwOSA1NjIuNDg2MjUsOTM3LjM1MjE1IDU1NC43NDc0Niw5MjEuOTQzNzYgQyA1NDYuOTA3MjEsOTA2LjMzMzM3IDUyNC4wNDI1Myw5NzAuNzAxMzMgNDYxLjIxMTkyLDk1OC45NTY2NCBDIDQ5MS4yNjM5Niw5MzEuNDI5OTggNTE2LjYxODk4LDg4OC4wNTI2MyA1MDIuNDc0NjIsODc1Ljk3Njk0IEMgNDg4LjA1OTQ2LDg2My42NzAwNyA0NDIuMDEyODcsOTMwLjI3MDA5IDQ0Mi4wMTI4Nyw5MzAuMjcwMDkgQyA0NDIuMDEyODcsOTMwLjI3MDA5IDQzOS4xOTA5Nyw4ODguNTY4OTEgNDU1Ljc4NjA3LDg2MS42NjI3NyBDIDQ3Mi40MjU0Miw4MzQuNjg0OSA1MzUuNDM5MDQsNzgwLjA0NzUgNTU1LjMzOTIsNzQ5Ljk1OTM1IEMgNTc1LjIzOTM1LDcxOS44NzEyMSA1ODguOTUxNzYsNjgzLjk1MDMzIDU5Ny40NzQ2Miw2NTcuNDQxNDEgQyA2MDUuOTk3NDgsNjMwLjkzMjQ5IDYxMy4yNzU1Niw1ODAuMzQxODcgNjEzLjI3NTU2LDU4MC4zNDE4NyIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMjAyMDIwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MTIwIgorICAgICAgIHg9Ii0wLjI3NzA4MjIiCisgICAgICAgd2lkdGg9IjEuNTU0MTY0NCIKKyAgICAgICB5PSItMC4zMjQ4MjA0MyIKKyAgICAgICBoZWlnaHQ9IjEuNjQ5NjQwOSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTkuOTU2Mjg5IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDEyMiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjMxIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSA3NjAuMTYzOTYsOTM1LjgzMzc3IEMgNzY2Ljk1ODA2LDk1NC43MzY1NiA3NzAuNjU3NjUsOTY5LjEzMzQ2IDc3Mi4wNTQyNiw5ODcuMDQ1NjYgQyA3NzMuNDUwODgsMTAwNC45NTggNzY4LjI3MTU4LDEwMzguODQ2NSA3NjkuMTUzOCwxMDU3LjcwMTggQyA3NzAuMDM1NTUsMTA3Ni41NDcgNzc3LjI4NzQ5LDEwOTcuODAwOCA3OTYuNDk4NDMsMTEwNi42NzA3IEMgODE1LjkxNzMsMTExNS42MzY1IDg0NS44MTc2NywxMTE2Ljg4MiA4NzAuNjE4MjcsMTEwMy41MjUxIEMgODk1LjQxODg3LDEwOTAuMTY4MSA5MjguMDE5MjksMTAzMy4xOTk2IDk0MS41OTI1MywxMDA2LjIxNjQgQyA5NTUuMjE2MzgsOTc5LjEzMjQ2IDk4MC4zNTM2LDg5MS43MTkwMyA5ODYuMjUzMzMsODU2LjQ0NzgxIEMgOTkyLjE1MzA2LDgyMS4xNzY2IDk4OC44MDM4Nyw4MTUuMTQ3MDQgOTgxLjYzNTg1LDgwNy4zOTIzMiBDIDk4NC4yNzYxNSw3NzkuNTUyMTcgOTgwLjEzNjEzLDc1Mi40NTY4OSA5OTQuNzQ1NTQsNzIwLjIwNjE0IEMgOTY0LjQ5NjUzLDczMi4wMzE4NCA5NTcuMzYzMjUsNzYwLjM2Njg0IDk0Ni40MjY2NSw3ODUuNzExMjIgQyA5MzguNDI1NzQsNzM0Ljc3ODI5IDk0Ni42MzU4MSw3MTQuNDM4MDMgOTQ5Ljc0NTU0LDY4NC40OTE4NiBDIDkyMC42ODA3OCw2OTkuMjY5NzcgOTA2Ljg4NDAzLDczMS42MDU4OCA5MDQuNzQ1NTQsNzc3LjM0OSBDIDg5My44MjE1OSw3NzYuMDQ0OCA4ODMuMzU0MSw3NzIuOTE0NzcgODcxLjE3NDExLDc3Ni42MzQ3MSBDIDg3MC45MTAwNyw3MzAuNjExMzcgODY5LjcxMDU1LDY5OS43NDUzIDg4MC4wODQ3NCw2NjIuNDI4MjIgQyA4MjYuODI5MjcsNjgzLjQ1NTA4IDgxNy4xMzc0Niw3NjkuMDIyMzIgODI0LjAzMTI1LDc3NS4yMDYxNCBDIDgxMy4xNDg0Myw3NzUuNzQxMTQgODAyLjY2MDE3LDc3My45MDg4NCA3OTEuMTc0MTEsNzc4LjA2MzI5IEMgNzkxLjgxMzAzLDczNS40OTE5NCA3OTAuOTEzNjUsNjkzLjE1NDY4IDc2MS4xNzQxMSw2NTUuMjA2MTQgQyA3NjEuMTc0MTEsNjU1LjIwNjE0IDczMC4yMTYwNSw3MzYuMTI4NDggNzI5Ljc0NTU0LDc1OC43Nzc1NyBDIDcyOS4yNzUwMyw3ODEuNDI2NjYgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzkuMTk3MTMsNzk4Ljk0MzQ1IEMgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzAuNjI5MDYsODM1LjY4Mzk2IDczMi44OTg1NCw4NTcuMTc1NjggQyA3MzUuMTk0MzksODc4LjkxNzE0IDc1My4zNDE0NCw5MTYuODUxODUgNzYwLjE2Mzk2LDkzNS44MzM3NyB6IgorICAgICAgICAgaWQ9InBhdGgzNjMzIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjY1Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6emNjemNjIgorICAgICAgICAgaWQ9InBhdGgzNjY3IgorICAgICAgICAgZD0iTSAzNjYuODg4MzksNTA0LjEzNDcxIEMgMzY2Ljg4ODM5LDUwNC4xMzQ3MSAzMzcuMzM0MzMsNTQ0LjcwNzc2IDMxOS4wMzEyNSw1NzguNDIwNDIgQyAzMDAuNzI4MTYsNjEyLjEzMzA5IDI2MC40MTAxNiw3MDQuNzc3MzYgMjQ4LjY3NDExLDc0OS40OTE4NSBDIDIzNi45MTQ3MSw3OTQuMjk1MjkgMTg2LjE3NDExLDg3My4wNjMyOSAxODYuMTc0MTEsODczLjA2MzI5IEwgMjYyLjI0NTU0LDg5MS4yNzc1NyBDIDI2Mi4yNDU1NCw4OTEuMjc3NTcgMjc0LjA1MjY2LDg3OC40NTQyMiAyOTMuMzE2OTYsODQ1LjIwNjE0IEMgMzEyLjU4MTI2LDgxMS45NTgwNiAzNTMuNjc0MTEsNzA2LjYzNDcxIDM1My42NzQxMSw3MDYuNjM0NzEgTCAzNjYuODg4MzksNTA0LjEzNDcxIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzBmMGYwZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjc3Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSA1ODYuMTMyNzEsOTk3Ljk4OTgxIEMgNTkyLjkyNjgxLDEwMTYuODkyNiA1OTYuNjI2NCwxMDMxLjI4OTUgNTk4LjAyMzAxLDEwNDkuMjAxNyBDIDU5OS40MTk2MywxMDY3LjExNCA1OTQuMjQwMzMsMTEwMS4wMDI1IDU5NS4xMjI1NSwxMTE5Ljg1NzggQyA1OTYuMDA0MywxMTM4LjcwMyA2MDMuMjU2MjQsMTE1OS45NTY4IDYyMi40NjcxOCwxMTY4LjgyNjcgQyA2NDEuODg2MDUsMTE3Ny43OTI1IDY3MS43ODY0MiwxMTc5LjAzOCA2OTYuNTg3MDIsMTE2NS42ODExIEMgNzIxLjM4NzYyLDExNTIuMzI0MSA3NTMuOTg4MDQsMTA5NS4zNTU2IDc2Ny41NjEyOCwxMDY4LjM3MjQgQyA3ODEuMTg1MTMsMTA0MS4yODg1IDgwNi4zMjIzNSw5NTMuODc1MDcgODEyLjIyMjA4LDkxOC42MDM4NSBDIDgxOC4xMjE4MSw4ODMuMzMyNjQgODE0Ljc3MjYyLDg3Ny4zMDMwOCA4MDcuNjA0Niw4NjkuNTQ4MzYgQyA4MTAuMjQ0OSw4NDEuNzA4MjEgODA2LjEwNDg4LDgxNC42MTI5MyA4MjAuNzE0MjksNzgyLjM2MjE4IEMgNzkwLjQ2NTI4LDc5NC4xODc4OCA3ODMuMzMyLDgyMi41MjI4OCA3NzIuMzk1NCw4NDcuODY3MjYgQyA3NjQuMzk0NDksNzk2LjkzNDMzIDc3Mi42MDQ1Niw3NzYuNTk0MDcgNzc1LjcxNDI5LDc0Ni42NDc5IEMgNzQ2LjY0OTUzLDc2MS40MjU4MSA3MzIuODUyNzgsNzkzLjc2MTkyIDczMC43MTQyOSw4MzkuNTA1MDQgQyA3MTkuNzkwMzQsODM4LjIwMDg0IDcwOS4zMjI4NSw4MzUuMDcwODEgNjk3LjE0Mjg2LDgzOC43OTA3NSBDIDY5Ni44Nzg4Miw3OTIuNzY3NDEgNjk1LjY3OTMsNzYxLjkwMTM0IDcwNi4wNTM0OSw3MjQuNTg0MjYgQyA2NTIuNzk4MDIsNzQ1LjYxMTEyIDY0My4xMDYyMSw4MzEuMTc4MzYgNjUwLDgzNy4zNjIxOCBDIDYzOS4xMTcxOCw4MzcuODk3MTggNjI4LjYyODkyLDgzNi4wNjQ4OCA2MTcuMTQyODYsODQwLjIxOTMzIEMgNjE3Ljc4MTc4LDc5Ny42NDc5OCA2MTYuODgyNCw3NTUuMzEwNzIgNTg3LjE0Mjg2LDcxNy4zNjIxOCBDIDU4Ny4xNDI4Niw3MTcuMzYyMTggNTU2LjE4NDgsNzk4LjI4NDUyIDU1NS43MTQyOSw4MjAuOTMzNjEgQyA1NTUuMjQzNzgsODQzLjU4MjcgNTY1LjE2NTg4LDg2MS4wOTk0OSA1NjUuMTY1ODgsODYxLjA5OTQ5IEMgNTY1LjE2NTg4LDg2MS4wOTk0OSA1NTYuNTk3ODEsODk3Ljg0IDU1OC44NjcyOSw5MTkuMzMxNzIgQyA1NjEuMTYzMTQsOTQxLjA3MzE4IDU3OS4zMTAxOSw5NzkuMDA3ODkgNTg2LjEzMjcxLDk5Ny45ODk4MSB6IgorICAgICAgICAgaWQ9InBhdGgzNjc5IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXIzODk4Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxMC44OTI5ODUiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIzOTAwIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjQxMzAiCisgICAgICAgeD0iLTAuNDk1MDk2ODYiCisgICAgICAgd2lkdGg9IjEuOTkwMTkzNyIKKyAgICAgICB5PSItMC4yNjcwODgxNyIKKyAgICAgICBoZWlnaHQ9IjEuNTM0MTc2MyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTAuNzMwNjIyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDEzMiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MTQxIgorICAgICAgIHg9Ii0wLjQwNjExMDMyIgorICAgICAgIHdpZHRoPSIxLjgxMjIyMDYiCisgICAgICAgeT0iLTAuMzAyNjA1OTYiCisgICAgICAgaGVpZ2h0PSIxLjYwNTIxMTkiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjkuODU4NjA4NiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQxNDMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoNDE3NyI+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiCisgICAgICAgICBpZD0icGF0aDQxNzkiCisgICAgICAgICBkPSJNIDU4Ni4xMzI3MSw5OTcuOTg5ODEgQyA1OTIuOTI2ODEsMTAxNi44OTI2IDU5Ni42MjY0LDEwMzEuMjg5NSA1OTguMDIzMDEsMTA0OS4yMDE3IEMgNTk5LjQxOTYzLDEwNjcuMTE0IDU5NC4yNDAzMywxMTAxLjAwMjUgNTk1LjEyMjU1LDExMTkuODU3OCBDIDU5Ni4wMDQzLDExMzguNzAzIDYwMy4yNTYyNCwxMTU5Ljk1NjggNjIyLjQ2NzE4LDExNjguODI2NyBDIDY0MS44ODYwNSwxMTc3Ljc5MjUgNjcxLjc4NjQyLDExNzkuMDM4IDY5Ni41ODcwMiwxMTY1LjY4MTEgQyA3MjEuMzg3NjIsMTE1Mi4zMjQxIDc1My45ODgwNCwxMDk1LjM1NTYgNzY3LjU2MTI4LDEwNjguMzcyNCBDIDc4MS4xODUxMywxMDQxLjI4ODUgODA2LjMyMjM1LDk1My44NzUwNyA4MTIuMjIyMDgsOTE4LjYwMzg1IEMgODE4LjEyMTgxLDg4My4zMzI2NCA4MTQuNzcyNjIsODc3LjMwMzA4IDgwNy42MDQ2LDg2OS41NDgzNiBDIDgxMC4yNDQ5LDg0MS43MDgyMSA4MDYuMTA0ODgsODE0LjYxMjkzIDgyMC43MTQyOSw3ODIuMzYyMTggQyA3OTAuNDY1MjgsNzk0LjE4Nzg4IDc4My4zMzIsODIyLjUyMjg4IDc3Mi4zOTU0LDg0Ny44NjcyNiBDIDc2NC4zOTQ0OSw3OTYuOTM0MzMgNzcyLjYwNDU2LDc3Ni41OTQwNyA3NzUuNzE0MjksNzQ2LjY0NzkgQyA3NDYuNjQ5NTMsNzYxLjQyNTgxIDczMi44NTI3OCw3OTMuNzYxOTIgNzMwLjcxNDI5LDgzOS41MDUwNCBDIDcxOS43OTAzNCw4MzguMjAwODQgNzA5LjMyMjg1LDgzNS4wNzA4MSA2OTcuMTQyODYsODM4Ljc5MDc1IEMgNjk2Ljg3ODgyLDc5Mi43Njc0MSA2OTUuNjc5Myw3NjEuOTAxMzQgNzA2LjA1MzQ5LDcyNC41ODQyNiBDIDY1Mi43OTgwMiw3NDUuNjExMTIgNjQzLjEwNjIxLDgzMS4xNzgzNiA2NTAsODM3LjM2MjE4IEMgNjM5LjExNzE4LDgzNy44OTcxOCA2MjguNjI4OTIsODM2LjA2NDg4IDYxNy4xNDI4Niw4NDAuMjE5MzMgQyA2MTcuNzgxNzgsNzk3LjY0Nzk4IDYxNi44ODI0LDc1NS4zMTA3MiA1ODcuMTQyODYsNzE3LjM2MjE4IEMgNTg3LjE0Mjg2LDcxNy4zNjIxOCA1NTYuMTg0OCw3OTguMjg0NTIgNTU1LjcxNDI5LDgyMC45MzM2MSBDIDU1NS4yNDM3OCw4NDMuNTgyNyA1NjUuMTY1ODgsODYxLjA5OTQ5IDU2NS4xNjU4OCw4NjEuMDk5NDkgQyA1NjUuMTY1ODgsODYxLjA5OTQ5IDU1Ni41OTc4MSw4OTcuODQgNTU4Ljg2NzI5LDkxOS4zMzE3MiBDIDU2MS4xNjMxNCw5NDEuMDczMTggNTc5LjMxMDE5LDk3OS4wMDc4OSA1ODYuMTMyNzEsOTk3Ljk4OTgxIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNDE4NSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMy42MTY0NzA5IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDE4NyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MTA1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIzLjg2NDA5NjYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MTA3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDI4MzMiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMjkyOTI5O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIGQ9Ik0gNTY5LjAzMTI1LDEwMTguNzc3NiBDIDU2NC43NDU1NCwxMDE5LjQ5MTkgNTQxLjQwMzEsMTAyMi4zOTU3IDUxMS4xNzQxMSwxMDI4Ljc3NzYgQyA0ODAuOTQ1MTIsMTAzNS4xNTk1IDQ1My44NjAxNiwxMDMzLjc0MzcgMzc1LjM4ODAzLDEwNDYuMTA3MiBDIDI5NS41MzYyNSwxMDU4LjY4OCAyODEuMzIzNjcsMTA4OC42NDk1IDI2Ny4yNjU3OCwxMDkzLjE3MTUgQyAyNTIuNTY1NjQsMTA5Ny45MDAxIDEyMS44ODgzOSwxMDI3LjM0OSAxMjEuODg4MzksMTAyNy4zNDkgTCAxMjYuMTc0MTEsOTMzLjA2MzI5IEMgMTI2LjE3NDExLDkzMy4wNjMyOSAyMTIuMDU5NjIsOTE2Ljg2MjM1IDIzOC4zMTY5Niw4OTkuNDkxODYgQyAyNjQuNTc0MzEsODgyLjEyMTM3IDI4My44OTkzNCw4NDkuODI1ODggMjk3LjYwMjY4LDgyOC4wNjMyOSBDIDMxMS4zMDYwMiw4MDYuMzAwNyAzMzAuNDU5ODIsNzU2LjYzNDcxIDMzMC40NTk4Miw3NTYuNjM0NzEgTCA1NjkuMDMxMjUsMTAxOC43Nzc2IHoiCisgICAgICAgICBpZD0icGF0aDI4MzUiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjY3p6Y2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mjg0MyIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODQxIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIHgxPSIzNDcuODk2NTUiCisgICAgICAgeTE9IjEwNzAuMjEyNCIKKyAgICAgICB4Mj0iMjc1LjU4MTkxIgorICAgICAgIHkyPSI4NjcuOTc5OTIiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2MjciCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICB4MT0iNjk5LjMyODY3IgorICAgICAgIHkxPSIyNjkuNzY3NTUiCisgICAgICAgeDI9IjY5OC45NzUwNCIKKyAgICAgICB5Mj0iMzQ2LjEzNTEiIC8+CisgICAgPG1hc2sKKyAgICAgICBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJtYXNrMzY4NCI+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNjg4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC40MzcyNDkxOHB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBpZD0icGF0aDM2ODYiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNTc5LjQ3NCIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSIyNjAuNTc1MTYiCisgICAgICAgICBzb2RpcG9kaTpyeD0iMTkyLjY4NjYiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMTY0LjA0ODc3IgorICAgICAgICAgZD0iTSA3NzIuMTYwNiwyNjAuNTc1MTYgQSAxOTIuNjg2NiwxNjQuMDQ4NzcgMCAxIDEgMzg2Ljc4NzQsMjYwLjU3NTE2IEEgMTkyLjY4NjYsMTY0LjA0ODc3IDAgMSAxIDc3Mi4xNjA2LDI2MC41NzUxNiB6IgorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE3NC4wMzEyNSw2Mi4xNTYwMzYpIiAvPgorICAgIDwvbWFzaz4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjIyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSAyNjYuMjcxODMsOTI0LjU3MTg2IEMgMjY0Ljg2NDU2LDk0My4zNzMwNyAyNjUuMTI2OTMsOTU3LjMyMjg5IDI2OC4zNTM1Nyw5NzMuODc1MTQgQyAyNzEuNTgwMjIsOTkwLjQyNzQ4IDI4NC43NTk2NSwxMDE5Ljc4MjUgMjg4LjY4Nzk3LDEwMzcuMDU4OSBDIDI5Mi42MTQxOSwxMDU0LjMyNiAyOTEuMzgyMSwxMDc1LjM2ODUgMjc2LjIyODUzLDEwODguMjA3MSBDIDI2MC45MTA5MiwxMTAxLjE4NDUgMjM0LjE3NzI2LDExMDkuODA2IDIwOC4zOTYyMywxMTAzLjk0MDkgQyAxODIuNjE1MTcsMTA5OC4wNzU2IDEzOC44NDcxNiwxMDU0LjcxNzUgMTE5LjgwNjA0LDEwMzMuNzEyNiBDIDEwMC42OTM5LDEwMTIuNjI5MyA1Ni4wNDUxODMsOTM5Ljg2MTk0IDQxLjg2NzUwOCw5MDkuNDM2ODEgQyAyNy42ODk4MzYsODc5LjAxMTY5IDI5LjIwNzkwMyw4NzIuNzE4MjQgMzMuNzQ3NzkzLDg2My45MDcwOCBDIDI0LjM4MTA3MSw4MzkuMzg2NTggMjEuMzM0MDgxLDgxMy44NDAyNyAwLjAzNTMzNTUxOCw3ODguMzMwNDQgQyAzMC4zNjA4MTUsNzkxLjQ0NDg4IDQzLjkxNTYyNSw4MTUuMjg2NzcgNjAuMTYxMDI1LDgzNS40NzAxOSBDIDU0LjYzMTEyOSw3ODcuMzk0MTYgNDIuMTA2MzEsNzcxLjA1MzY5IDMxLjc4NzA3Myw3NDQuNzQ1ODkgQyA2MS43ODEzNjgsNzUwLjgyNzU1IDgyLjM2NjQzMyw3NzYuNjE4MjkgOTUuNzY2ODU2LDgxNy40NTgzOSBDIDEwNS4zMjEwMSw4MTMuNTQwNDggMTE0LjAwNDYyLDgwOC4wODU0NSAxMjUuOTU0MjcsODA4LjM5NzE5IEMgMTE0LjY1Njc3LDc2Ni43MDEzOSAxMDguMDA0ODEsNzM4LjQ4MTM1IDg5LjI2NzAxNSw3MDcuMzI3MjUgQyAxNDIuNzA4OTgsNzEyLjk5NzU4IDE3Mi45MjQwNCw3ODcuOTY2NTcgMTY4LjIzODQ0LDc5NS4yODgwNSBDIDE3OC4yMTY0MSw3OTMuMDQ0MDYgMTg3LjI0NDA5LDc4OC43NTc2NyAxOTguNjc0OTcsNzg5LjYzNjM4IEMgMTg3LjQyNjAxLDc1MS4yODkzNiAxNzcuNjI3MTYsNzEyLjc2ODQ4IDE5NS4wMTUyNiw2NzAuOTg4MiBDIDE5NS4wMTUyNiw2NzAuOTg4MiAyNDMuMzAyMDQsNzM2LjQyNTA3IDI0OS40MDQ5Miw3NTYuNzkzOTcgQyAyNTUuNTA3NzksNzc3LjE2Mjg4IDI1MC45MjM3Myw3OTUuNDk0NDkgMjUwLjkyMzczLDc5NS40OTQ0OSBDIDI1MC45MjM3Myw3OTUuNDk0NDkgMjY3Ljg4MzMsODI2LjU3OTc4IDI3MS4yMTc2NSw4NDYuNTg4NjIgQyAyNzQuNTkwNzUsODY2LjgyOTk3IDI2Ny42ODQ5Niw5MDUuNjkxOTQgMjY2LjI3MTgzLDkyNC41NzE4NiB6IgorICAgICAgICAgaWQ9InBhdGgzNjI0IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjM2Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSA3NjAuMTYzOTYsOTM1LjgzMzc3IEMgNzY2Ljk1ODA2LDk1NC43MzY1NiA3NzAuNjU3NjUsOTY5LjEzMzQ2IDc3Mi4wNTQyNiw5ODcuMDQ1NjYgQyA3NzMuNDUwODgsMTAwNC45NTggNzY4LjI3MTU4LDEwMzguODQ2NSA3NjkuMTUzOCwxMDU3LjcwMTggQyA3NzAuMDM1NTUsMTA3Ni41NDcgNzc3LjI4NzQ5LDEwOTcuODAwOCA3OTYuNDk4NDMsMTEwNi42NzA3IEMgODE1LjkxNzMsMTExNS42MzY1IDg0NS44MTc2NywxMTE2Ljg4MiA4NzAuNjE4MjcsMTEwMy41MjUxIEMgODk1LjQxODg3LDEwOTAuMTY4MSA5MjguMDE5MjksMTAzMy4xOTk2IDk0MS41OTI1MywxMDA2LjIxNjQgQyA5NTUuMjE2MzgsOTc5LjEzMjQ2IDk4MC4zNTM2LDg5MS43MTkwMyA5ODYuMjUzMzMsODU2LjQ0NzgxIEMgOTkyLjE1MzA2LDgyMS4xNzY2IDk4OC44MDM4Nyw4MTUuMTQ3MDQgOTgxLjYzNTg1LDgwNy4zOTIzMiBDIDk4NC4yNzYxNSw3NzkuNTUyMTcgOTgwLjEzNjEzLDc1Mi40NTY4OSA5OTQuNzQ1NTQsNzIwLjIwNjE0IEMgOTY0LjQ5NjUzLDczMi4wMzE4NCA5NTcuMzYzMjUsNzYwLjM2Njg0IDk0Ni40MjY2NSw3ODUuNzExMjIgQyA5MzguNDI1NzQsNzM0Ljc3ODI5IDk0Ni42MzU4MSw3MTQuNDM4MDMgOTQ5Ljc0NTU0LDY4NC40OTE4NiBDIDkyMC42ODA3OCw2OTkuMjY5NzcgOTA2Ljg4NDAzLDczMS42MDU4OCA5MDQuNzQ1NTQsNzc3LjM0OSBDIDg5My44MjE1OSw3NzYuMDQ0OCA4ODMuMzU0MSw3NzIuOTE0NzcgODcxLjE3NDExLDc3Ni42MzQ3MSBDIDg3MC45MTAwNyw3MzAuNjExMzcgODY5LjcxMDU1LDY5OS43NDUzIDg4MC4wODQ3NCw2NjIuNDI4MjIgQyA4MjYuODI5MjcsNjgzLjQ1NTA4IDgxNy4xMzc0Niw3NjkuMDIyMzIgODI0LjAzMTI1LDc3NS4yMDYxNCBDIDgxMy4xNDg0Myw3NzUuNzQxMTQgODAyLjY2MDE3LDc3My45MDg4NCA3OTEuMTc0MTEsNzc4LjA2MzI5IEMgNzkxLjgxMzAzLDczNS40OTE5NCA3OTAuOTEzNjUsNjkzLjE1NDY4IDc2MS4xNzQxMSw2NTUuMjA2MTQgQyA3NjEuMTc0MTEsNjU1LjIwNjE0IDczMC4yMTYwNSw3MzYuMTI4NDggNzI5Ljc0NTU0LDc1OC43Nzc1NyBDIDcyOS4yNzUwMyw3ODEuNDI2NjYgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzkuMTk3MTMsNzk4Ljk0MzQ1IEMgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzAuNjI5MDYsODM1LjY4Mzk2IDczMi44OTg1NCw4NTcuMTc1NjggQyA3MzUuMTk0MzksODc4LjkxNzE0IDc1My4zNDE0NCw5MTYuODUxODUgNzYwLjE2Mzk2LDkzNS44MzM3NyB6IgorICAgICAgICAgaWQ9InBhdGgzNjM4IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY2MCIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjY2IgorICAgICAgIHgxPSIxMjU1LjczODYiCisgICAgICAgeTE9IjY2Ny4wOTIxNiIKKyAgICAgICB4Mj0iODkzLjY5OTk1IgorICAgICAgIHkyPSI4NTguMDEwOTkiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyMzc3OSIKKyAgICAgICB4PSItMC4wODc5ODA4MjIiCisgICAgICAgd2lkdGg9IjEuMTc1OTYxNiIKKyAgICAgICB5PSItMC4xNzcyODMzMiIKKyAgICAgICBoZWlnaHQ9IjEuMzU0NTY2NiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTYuMzQwMzQ0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzc4MSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaWQ9ImZpbHRlcjM3ODUiCisgICAgICAgaW5rc2NhcGU6bGFiZWw9IldoaXRlIEZ1ciI+CisgICAgICA8ZmVUdXJidWxlbmNlCisgICAgICAgICBpZD0iZmVUdXJidWxlbmNlMzc4NyIKKyAgICAgICAgIGluPSJTb3VyY2VBbHBoYSIKKyAgICAgICAgIHR5cGU9ImZyYWN0YWxOb2lzZSIKKyAgICAgICAgIGJhc2VGcmVxdWVuY3k9IjAuMjQwNDQ5NDM4MjAyMjQ3MjEiCisgICAgICAgICBudW1PY3RhdmVzPSIxMCIKKyAgICAgICAgIHNlZWQ9IjY1NSIKKyAgICAgICAgIHJlc3VsdD0icmVzdWx0MCIgLz4KKyAgICAgIDxmZURpc3BsYWNlbWVudE1hcAorICAgICAgICAgaWQ9ImZlRGlzcGxhY2VtZW50TWFwMzc4OSIKKyAgICAgICAgIGluPSJTb3VyY2VHcmFwaGljIgorICAgICAgICAgaW4yPSJyZXN1bHQwIgorICAgICAgICAgc2NhbGU9IjYyIgorICAgICAgICAgeENoYW5uZWxTZWxlY3Rvcj0iQiIKKyAgICAgICAgIHlDaGFubmVsU2VsZWN0b3I9IkciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyMzY3NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMi4wMzk3NTE4IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzY3OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNzIyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzEyMTIxMjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDcwOS4yODU3Miw4NDQuNTA1MDQgQyA3NjMuNTcxNDMsODQzLjA3NjQ3IDgzNS4zMjA3Miw4MjkuNDUzMDUgODc5LjI4NTcyLDgxNy43MTkzMiBDIDkyMy4zMzg0Myw4MDUuOTYyMTggMTAwNS4xNzIsNzgxLjM3MjA4IDEwNTQuNjQyOCw3NTkuODYyMTggQyAxMTAzLjk4MjEsNzM4LjQwOTQ2IDExNjguMjQ2NSw3MDAuNTgwNTggMTIwOC45Mjg2LDY2Ny43MTkzMyBDIDEyNDkuNDM2Nyw2MzQuOTk4NjQgMTI2MS4zMTg1LDYxMS44OTk1MiAxMjY5LjY0MjksNjM0LjE0NzkgQyAxMjc4LjAxMiw2NTYuNTE1NjkgMTI1My4yMzU5LDY5MC40NzM1MiAxMjMxLjc4NTcsNzE1LjIxOTMzIEMgMTIxMC4xODE2LDc0MC4xNDI3MyAxMTc5LjA1NDQsNzY3LjkyNDY2IDExMzIuODU3MSw4MDQuNTA1MDQgQyAxMDg2LjY1OTgsODQxLjA4NTQyIDk3Ni43NzQ1OCw5MDYuMDg5NjcgOTIwLDkzMy4wNzY0NyBDIDg2Mi45MzM5NCw5NjAuMjAxODMgNzkxLjc5NjY2LDk5MS4zMTQ4OSA3NDcuODU3MTQsMTAwNS41NzY1IEMgNzAzLjkxNzYyLDEwMTkuODM4MSA2MTYuNDI4NTcsMTAzNi42NDc5IDYxNi40Mjg1NywxMDM2LjY0NzkgTCA3MDkuMjg1NzIsODQ0LjUwNTA0IHoiCisgICAgICAgICBpZD0icGF0aDM3MjQiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enp6emNjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoMzk4NiI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMxMjEyMTI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgZD0iTSA3MDkuMjg1NzIsODQ0LjUwNTA0IEMgNzYzLjU3MTQzLDg0My4wNzY0NyA4MzUuMzIwNzIsODI5LjQ1MzA1IDg3OS4yODU3Miw4MTcuNzE5MzIgQyA5MjMuMzM4NDMsODA1Ljk2MjE4IDEwMDUuMTcyLDc4MS4zNzIwOCAxMDU0LjY0MjgsNzU5Ljg2MjE4IEMgMTEwMy45ODIxLDczOC40MDk0NiAxMTY4LjI0NjUsNzAwLjU4MDU4IDEyMDguOTI4Niw2NjcuNzE5MzMgQyAxMjQ5LjQzNjcsNjM0Ljk5ODY0IDEyNjEuMzE4NSw2MTEuODk5NTIgMTI2OS42NDI5LDYzNC4xNDc5IEMgMTI3OC4wMTIsNjU2LjUxNTY5IDEyNTMuMjM1OSw2OTAuNDczNTIgMTIzMS43ODU3LDcxNS4yMTkzMyBDIDEyMTAuMTgxNiw3NDAuMTQyNzMgMTE3OS4wNTQ0LDc2Ny45MjQ2NiAxMTMyLjg1NzEsODA0LjUwNTA0IEMgMTA4Ni42NTk4LDg0MS4wODU0MiA5NzYuNzc0NTgsOTA2LjA4OTY3IDkyMCw5MzMuMDc2NDcgQyA4NjIuOTMzOTQsOTYwLjIwMTgzIDc5MS43OTY2Niw5OTEuMzE0ODkgNzQ3Ljg1NzE0LDEwMDUuNTc2NSBDIDcwMy45MTc2MiwxMDE5LjgzODEgNjE2LjQyODU3LDEwMzYuNjQ3OSA2MTYuNDI4NTcsMTAzNi42NDc5IEwgNzA5LjI4NTcyLDg0NC41MDUwNCB6IgorICAgICAgICAgaWQ9InBhdGgzOTg4IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6enpjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDM5OTIiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMTIxMjEyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIGQ9Ik0gNzA5LjI4NTcyLDg0NC41MDUwNCBDIDc2My41NzE0Myw4NDMuMDc2NDcgODM1LjMyMDcyLDgyOS40NTMwNSA4NzkuMjg1NzIsODE3LjcxOTMyIEMgOTIzLjMzODQzLDgwNS45NjIxOCAxMDA1LjE3Miw3ODEuMzcyMDggMTA1NC42NDI4LDc1OS44NjIxOCBDIDExMDMuOTgyMSw3MzguNDA5NDYgMTE2OC4yNDY1LDcwMC41ODA1OCAxMjA4LjkyODYsNjY3LjcxOTMzIEMgMTI0OS40MzY3LDYzNC45OTg2NCAxMjYxLjMxODUsNjExLjg5OTUyIDEyNjkuNjQyOSw2MzQuMTQ3OSBDIDEyNzguMDEyLDY1Ni41MTU2OSAxMjUzLjIzNTksNjkwLjQ3MzUyIDEyMzEuNzg1Nyw3MTUuMjE5MzMgQyAxMjEwLjE4MTYsNzQwLjE0MjczIDExNzkuMDU0NCw3NjcuOTI0NjYgMTEzMi44NTcxLDgwNC41MDUwNCBDIDEwODYuNjU5OCw4NDEuMDg1NDIgOTc2Ljc3NDU4LDkwNi4wODk2NyA5MjAsOTMzLjA3NjQ3IEMgODYyLjkzMzk0LDk2MC4yMDE4MyA3OTEuNzk2NjYsOTkxLjMxNDg5IDc0Ny44NTcxNCwxMDA1LjU3NjUgQyA3MDMuOTE3NjIsMTAxOS44MzgxIDYxNi40Mjg1NywxMDM2LjY0NzkgNjE2LjQyODU3LDEwMzYuNjQ3OSBMIDcwOS4yODU3Miw4NDQuNTA1MDQgeiIKKyAgICAgICAgIGlkPSJwYXRoMzk5NCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6Y2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzOTk4Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzI2MmYyZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDE3OC4yMTQyOCwyNzQuMTQ3ODkgQyAxNzQuNDA5ODUsMjQ4Ljg4MzY2IDE2MS40MDQ1NiwyMjMuNTA5ODcgMTYxLjA1NzQ4LDE5OC42MjI2NiBDIDE2MC44NzEyMiwxODUuMjY3MTQgMTY0LjMzMDMzLDE3Mi4wNTE3NSAxNzQuODEzMDEsMTU5LjA2ODYxIEMgMjExLjE2MDAzLDkzLjc3Mjc3NSAyOTEuNzUzOTIsNzQuMzczOTI1IDM2MC43NDc2Nyw2Ny42MDMxODMgQyA0NDcuNjcwMDYsNTYuNTg2MzgyIDU0NS42NjAzNCw4NS41NDMyNTUgNTk0LjExOTAxLDE2My4wMDQ0NyBDIDY0OC4yNDMwMywyMzguNzM3NzcgNjUwLjc5Mzc3LDMzNS41NDM1OSA2NzQuNzMxMDUsNDIyLjUzMjQyIEMgNzA0LjE2ODg0LDU0OS42NjAwMiA3MjkuNTEwMTksNjc4Ljc0NjU2IDczNS4xMjMyOSw4MDkuMzgyNzcgQyA3MzIuMDU5ODEsODg3LjU2NDYyIDcyNi42OTY5NSw5NzQuNTY2OTIgNjc0LjYyMDA4LDEwMzcuNTE2OSBDIDYyNi41OTM1NCwxMDg3Ljg3NDMgNTUxLjgzMzYxLDEwODcuNTY5OSA0ODcuNTUwMiwxMDk2LjUxOTIgQyAzOTYuOTk0ODEsMTEwMS4xNzQyIDMwMy4xOTg2NywxMDgwLjM3MzQgMjI1Ljc2NjMsMTAzMi4zMjEgQyAxNjAuOTkwNjYsOTk0LjM4MDk5IDEzMC4wMzYxMSw5MTguODQyMzcgMTI4LjQ4NjksODQ2LjMwMTQyIEMgMTIwLjA5NzczLDc2Ni40MjYyNiAxNTQuODc4NDIsNjkyLjQ5MjkxIDE4MC4xMDczLDYxOS4xNDE4MSBDIDE4Ny41Nzc5MSw1MzYuMzgwNzQgMTg5LjUyMDE2LDQ1Mi44OTQwNiAxODkuNzYwNjQsMzY5Ljc1Njk3IEMgMTg4LjkyMzgyLDMzNy41NjE1MyAxODIuNjcxMTEsMzA1LjkzOTY0IDE3OC4yMTQyOCwyNzQuMTQ3ODkgeiIKKyAgICAgICAgIGlkPSJwYXRoNDAwMCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY2NjY2NjY2NjY2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MDAyIgorICAgICAgIHg9Ii0wLjI0MzM0MjM4IgorICAgICAgIHdpZHRoPSIxLjQ4NjY4NDgiCisgICAgICAgeT0iLTAuMzkxMDQ4MDciCisgICAgICAgaGVpZ2h0PSIxLjc4MjA5NjEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjE0LjU4OTUxOCIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQwMDQiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNDAxMCIKKyAgICAgICB4PSItMC4xNDU3NzI2MSIKKyAgICAgICB3aWR0aD0iMS4yOTE1NDUyIgorICAgICAgIHk9Ii0wLjIzNTIzMjU5IgorICAgICAgIGhlaWdodD0iMS40NzA0NjUyIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSI0LjQ0NDI5MDciCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MDEyIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjQwNTMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjAuNjA2Mjk0NyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQwNTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNDA3OSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNi41ODg3NjI0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDA4MSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MDgzIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjUwNTIwNjYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MDg1IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0MTEzIgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDQxMTkiCisgICAgICAgY3g9IjI5Ni4zMzc4MyIKKyAgICAgICBjeT0iNDI3LjE3NzQ5IgorICAgICAgIGZ4PSIyOTYuMzM3ODMiCisgICAgICAgZnk9IjQyNy4xNzc0OSIKKyAgICAgICByPSIxOS43MDQxMzIiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjk3OTcxMjUsMCwwLDIuOTc5NzEyNSwtNTk5LjI4NzI3LC04MjcuMDg1NSkiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk0OSIKKyAgICAgICB4PSItMC4xMDI5NDg5NSIKKyAgICAgICB3aWR0aD0iMS4yMDU4OTc5IgorICAgICAgIHk9Ii0wLjM0MjI0Njk1IgorICAgICAgIGhlaWdodD0iMS42ODQ0OTM5Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTUxIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjY5NTMiCisgICAgICAgeD0iLTAuMDk4MzIwOTQ2IgorICAgICAgIHdpZHRoPSIxLjE5NjY0MTkiCisgICAgICAgeT0iLTAuMTk3NTA4MTYiCisgICAgICAgaGVpZ2h0PSIxLjM5NTAxNjMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5NTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk1NyIKKyAgICAgICB4PSItMC4wOTgyMTM0MjciCisgICAgICAgd2lkdGg9IjEuMTk2NDI2NyIKKyAgICAgICB5PSItMC4xOTgzODIwOCIKKyAgICAgICBoZWlnaHQ9IjEuMzk2NzY0MiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk1OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTYxIgorICAgICAgIHg9Ii0wLjA5OTE5MTA0IgorICAgICAgIHdpZHRoPSIxLjE5ODM4MjEiCisgICAgICAgeT0iLTAuMjI2NDM2MTEiCisgICAgICAgaGVpZ2h0PSIxLjQ1Mjg3MjIiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5NjMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk2NSIKKyAgICAgICB4PSItMC4wOTkwODE0MzQiCisgICAgICAgd2lkdGg9IjEuMTk4MTYyOSIKKyAgICAgICB5PSItMC4yMjUyOTgyNCIKKyAgICAgICBoZWlnaHQ9IjEuNDUwNTk2NSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk2NyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTY5IgorICAgICAgIHg9Ii0wLjEwNDUwODk3IgorICAgICAgIHdpZHRoPSIxLjIwOTAxNzkiCisgICAgICAgeT0iLTAuNDA0Njg4ODYiCisgICAgICAgaGVpZ2h0PSIxLjgwOTM3NzciPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5NzEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk3MyIKKyAgICAgICB4PSItMC4xMDMzMDQ5NSIKKyAgICAgICB3aWR0aD0iMS4yMDY2MDk4IgorICAgICAgIHk9Ii0wLjM2NDM5NzE3IgorICAgICAgIGhlaWdodD0iMS43Mjg3OTQ1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTc1IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjY5NzciCisgICAgICAgeD0iLTAuMTAyMjQ0ODEiCisgICAgICAgd2lkdGg9IjEuMjA0NDg5NiIKKyAgICAgICB5PSItMC4zMjM3MTM3MiIKKyAgICAgICBoZWlnaHQ9IjEuNjQ3NDI3NCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk3OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTgxIgorICAgICAgIHg9Ii0wLjEwMDUyNTQ1IgorICAgICAgIHdpZHRoPSIxLjIwMTA1MDkiCisgICAgICAgeT0iLTAuMjc0MjE2MiIKKyAgICAgICBoZWlnaHQ9IjEuNTQ4NDMyNCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk4MyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTg1IgorICAgICAgIHg9Ii0wLjA5ODQyODg2OCIKKyAgICAgICB3aWR0aD0iMS4xOTY4NTc3IgorICAgICAgIHk9Ii0wLjIwODUzMTg2IgorICAgICAgIGhlaWdodD0iMS40MTcwNjM3Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTg3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjY5ODkiCisgICAgICAgeD0iLTAuMDk4NDI4ODY4IgorICAgICAgIHdpZHRoPSIxLjE5Njg1NzciCisgICAgICAgeT0iLTAuMjAyODcwMzUiCisgICAgICAgaGVpZ2h0PSIxLjQwNTc0MDciPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5OTEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk5MyIKKyAgICAgICB4PSItMC4wOTgyMTMyNTUiCisgICAgICAgd2lkdGg9IjEuMTk2NDI2NSIKKyAgICAgICB5PSItMC4xOTgzODIwOCIKKyAgICAgICBoZWlnaHQ9IjEuMzk2NzY0MiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk5NSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTk3Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTk5IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjcwMDEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcwMDMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI4NSIKKyAgICAgICB4PSItMC4wMzA4ODQ2ODUiCisgICAgICAgd2lkdGg9IjEuMDYxNzY5NCIKKyAgICAgICB5PSItMC4xMDI2NzQwOCIKKyAgICAgICBoZWlnaHQ9IjEuMjA1MzQ4MyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyODciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI4OSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyOTEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI5MyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyOTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI5NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyOTkiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMwMSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMDMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMwNSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMDciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMwOSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMTEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMxMyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMxNyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMTkiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMyMSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMjMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMyNSIKKyAgICAgICB4PSItMC4wMzEzNTI2OTEiCisgICAgICAgd2lkdGg9IjEuMDYyNzA1NCIKKyAgICAgICB5PSItMC4xMjE0MDY2NiIKKyAgICAgICBoZWlnaHQ9IjEuMjQyODEzMyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMjciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMyOSIKKyAgICAgICB4PSItMC4wMzA5OTE0ODUiCisgICAgICAgd2lkdGg9IjEuMDYxOTgzIgorICAgICAgIHk9Ii0wLjEwOTMxOTE2IgorICAgICAgIGhlaWdodD0iMS4yMTg2MzgzIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjM1MDI2ODM2IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNzMzMSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI3MzMzIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjM1MDI2ODM2IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNzMzNSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI3MzM3Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjM1MDI2ODM2IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNzMzOSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI3MzQ1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjcyMzM4MzkiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI3MzQ3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDc0MjEiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOm9mZnNldCIKKyAgICAgICAgIGlua3NjYXBlOnJhZGl1cz0iMCIKKyAgICAgICAgIGlua3NjYXBlOm9yaWdpbmFsPSJNIDExMTEuNDA2MiAtMjg1LjkzNzUgTCAxMTA3LjQ2ODggLTI4NC4wNjI1IEMgMTEwNy40MjgzIC0yODQuMDUyMjggMTEwNy4zNjkyIC0yODQuMDQyMDEgMTEwNy4zNDM4IC0yODQuMDMxMjUgQyAxMTA2LjkyNSAtMjgzLjgxODQgMTEwNy4xNzkxIC0yODMuOTMwNjcgMTEwNi42ODc1IC0yODMuNzE4NzUgQyAxMTA2LjIwMTQgLTI4My41MDkxOSAxMTA0Ljk0OTkgLTI4My4xMzQ1NiAxMTAyLjU5MzggLTI4Mi4yNSBDIDEwOTkuMjYyNiAtMjgwLjk5OTQyIDEwOTYuNzg5NSAtMjgwLjEwMDE2IDEwOTUuNTkzOCAtMjc5LjE4NzUgQyAxMDk0LjA1NzYgLTI3OS4xNjYyMyAxMDkxLjg3MzMgLTI3OC45NTQxOSAxMDg5LjkzNzUgLTI3OC40Njg3NSBDIDEwODYuOTU2IC0yNzcuNzIxMDggMTA4NS4wODIzIC0yNzcuMjk0NzQgMTA4My4xODc1IC0yNzYuODc1IEMgMTA4MS4yOTI3IC0yNzYuNDU1MjcgMTA4MS41MTIgLTI3Ni4yMzI4MSAxMDgwLjMxMjUgLTI3NiBDIDEwNzkuMDE1OSAtMjc1Ljc0ODMzIDEwNzguNTkxMSAtMjc2LjAwODk5IDEwNzQuODc1IC0yNzUuMjE4NzUgQyAxMDcxLjM4NTEgLTI3NC40NzY2IDEwNjUuOTgwMiAtMjczLjI4NzY4IDEwNjQuNzE4OCAtMjcyLjUzMTI1IEMgMTA2My4xMzQ4IC0yNzIuNzEyMDMgMTA2MC44NTEzIC0yNzIuODUzMDMgMTA1OC44NzUgLTI3Mi41NjI1IEMgMTA1NS44MzQ2IC0yNzIuMTE1NTQgMTA1My45NTg4IC0yNzEuODg5NzQgMTA1Mi4wMzEyIC0yNzEuNjU2MjUgQyAxMDUxLjM3NTggLTI3MS41NzY4NyAxMDUwLjk5MDIgLTI3MS40NTU0NyAxMDUwLjY4NzUgLTI3MS4zNzUgQyAxMDUwLjI2MTMgLTI3MS4yNDMzNCAxMDUwLjAwMTcgLTI3MS4xMTQ5OCAxMDQ5LjMxMjUgLTI3MS4wMzEyNSBDIDEwNDguMDAwOSAtMjcwLjg3MTg4IDEwNDcuNTUwMyAtMjcxLjE4ODA4IDEwNDMuNzgxMiAtMjcwLjc1IEMgMTA0MC4yMjczIC0yNzAuMzM2OTEgMTAzNC43NzU4IC0yNjkuNDc3MTggMTAzMy41MzEyIC0yNjguODEyNSBDIDEwMzEuOTMyMiAtMjY5LjEwOTc5IDEwMjkuNjczNSAtMjY5LjM0NjY5IDEwMjcuNjg3NSAtMjY5LjE1NjI1IEMgMTAyNC42Mjg3IC0yNjguODYyOTMgMTAyMi43MTU1IC0yNjguNjcyMjYgMTAyMC43ODEyIC0yNjguNSBDIDEwMTguODQ3IC0yNjguMzI3NzMgMTAxOS4wOTI2IC0yNjguMDc3NjMgMTAxNy44NzUgLTI2Ny45Njg3NSBDIDEwMTYuNTU4OCAtMjY3Ljg1MTA1IDEwMTYuMTE1MiAtMjY4LjEzMjM4IDEwMTIuMzQzOCAtMjY3LjcxODc1IEMgMTAwOC44MDE3IC0yNjcuMzMwMyAxMDAzLjMzNTkgLTI2Ni41MDk0OCAxMDAyLjA2MjUgLTI2NS44NDM3NSBDIDEwMDAuNDYzNiAtMjY2LjEzODQ0IDk5OC4xNzUzIC0yNjYuMzUwNzYgOTk2LjE4NzUgLTI2Ni4xNTYyNSBDIDk5My4xMjkyMSAtMjY1Ljg1NyA5OTEuMjQ2MyAtMjY1LjY3NjAxIDk4OS4zMTI1IC0yNjUuNSBDIDk4OC42NTUwMSAtMjY1LjQ0MDE1IDk4OC4yNzI0NSAtMjY1LjMyMTQ0IDk4Ny45Njg3NSAtMjY1LjI1IEMgOTg3LjU0MTA1IC0yNjUuMTMxMDQgOTg3LjI4NTI1IC0yNjUuMDMxOTMgOTg2LjU5Mzc1IC0yNjQuOTY4NzUgQyA5ODUuMjc3NzUgLTI2NC44NDg0OSA5ODQuODM0IC0yNjUuMTYzNjMgOTgxLjA2MjUgLTI2NC43NSBDIDk3Ny41MDYzMSAtMjY0LjM1OTk4IDk3Mi4wNTY5IC0yNjMuNTEwODQgOTcwLjgxMjUgLTI2Mi44NDM3NSBDIDk2OS4yMTM4MSAtMjYzLjEzNzkzIDk2Ni45NTI2NSAtMjYzLjM2NzQ3IDk2NC45Njg3NSAtMjYzLjE1NjI1IEMgOTYxLjkxMzA1IC0yNjIuODMwOTIgOTU5Ljk5NDcgLTI2Mi42MzAwMSA5NTguMDYyNSAtMjYyLjQzNzUgQyA5NTYuMTMwMzEgLTI2Mi4yNDQ5OSA5NTYuMzcyNzUgLTI2MS45OTY2MiA5NTUuMTU2MjUgLTI2MS44NzUgQyA5NTMuODQxMzcgLTI2MS43NDM1MyA5NTMuMzkzMiAtMjYyLjAzOTU0IDk0OS42MjUgLTI2MS41OTM3NSBDIDk0Ni4wODYxMSAtMjYxLjE3NTA5IDk0MC42NDczIC0yNjAuMzAxNTggOTM5LjM3NSAtMjU5LjYyNSBDIDkzNy43Nzc0MSAtMjU5LjkwNjA0IDkzNS41MTUwNSAtMjYwLjA0NTQzIDkzMy41MzEyNSAtMjU5LjgxMjUgQyA5MzAuNDc5MjcgLTI1OS40NTQxMyA5MjguNTg2MjUgLTI1OS4yNDQ2NCA5MjYuNjU2MjUgLTI1OS4wMzEyNSBDIDkyNi4wMDAwNyAtMjU4Ljk1ODY5IDkyNS42MTU2IC0yNTguODU4NTYgOTI1LjMxMjUgLTI1OC43ODEyNSBDIDkyNC44ODU3MSAtMjU4LjY1NDAyIDkyNC42Mjc2IC0yNTguNTE0MDUgOTIzLjkzNzUgLTI1OC40Mzc1IEMgOTIyLjYyNDExIC0yNTguMjkxODEgOTIyLjE3MDE1IC0yNTguNjExNTIgOTE4LjQwNjI1IC0yNTguMTI1IEMgOTE0Ljg1NzM3IC0yNTcuNjY2MjQgOTA5LjQyNzYgLTI1Ni43MDU5OCA5MDguMTg3NSAtMjU2IEMgOTA2LjU5NDQxIC0yNTYuMjQ0MjQgOTA0LjM1MzcgLTI1Ni4zODEzNSA5MDIuMzc1IC0yNTYuMTI1IEMgODk5LjMyNzQxIC0yNTUuNzMwMTggODk3LjQyNDMgLTI1NS40NzY1NSA4OTUuNSAtMjU1LjIxODc1IEMgODkzLjU3NTcxIC0yNTQuOTYwOTYgODkzLjc3MzkgLTI1NC43MjUyMiA4OTIuNTYyNSAtMjU0LjU2MjUgQyA4OTEuMjUzMDEgLTI1NC4zODY2IDg5MC44MTUzIC0yNTQuNjY2ODggODg3LjA2MjUgLTI1NC4wOTM3NSBDIDg4My41MzgyMSAtMjUzLjU1NTUxIDg3OC4xMzkzIC0yNTIuMzk0NTggODc2Ljg3NSAtMjUxLjY1NjI1IEMgODc1LjI4NzUxIC0yNTEuODU5NzkgODczLjAyOTUgLTI1MS45MTA5OCA4NzEuMDYyNSAtMjUxLjU2MjUgQyA4NjguMDM2MzEgLTI1MS4wMjYzOCA4NjYuMTYzNiAtMjUwLjcwMDgxIDg2NC4yNSAtMjUwLjM3NSBDIDg2My41OTk0MSAtMjUwLjI2NDIzIDg2My4yMzYzIC0yNTAuMTA0MDYgODYyLjkzNzUgLTI1MCBDIDg2Mi41MTY4MSAtMjQ5LjgzNTEyIDg2Mi4yNzQwNSAtMjQ5LjY2ODcgODYxLjU5Mzc1IC0yNDkuNTMxMjUgQyA4NjAuMjk5MDUgLTI0OS4yNjk2NiA4NTkuODY2NjUgLTI0OS41Mzc0NSA4NTYuMTU2MjUgLTI0OC43MTg3NSBDIDg1Mi42NTc3NyAtMjQ3Ljk0NjggODQ3LjMxMDM1IC0yNDYuMzM1ODIgODQ2LjA5Mzc1IC0yNDUuNSBDIDg0NC41MzA4NSAtMjQ1LjU3NzQ1IDg0Mi4zMzYyNSAtMjQ1LjQxNDcyIDg0MC40MDYyNSAtMjQ0LjkwNjI1IEMgODM3LjQzMzg3IC0yNDQuMTIzMTIgODM1LjU4ODU1IC0yNDMuNjc0MTYgODMzLjcxODc1IC0yNDMuMTU2MjUgQyA4MzEuODQ4NzUgLTI0Mi42MzgzNSA4MzIuMDUyMSAtMjQyLjM4ODk3IDgzMC44NzUgLTI0Mi4wNjI1IEMgODI5LjYwMjUxIC0yNDEuNzA5NiA4MjkuMTc3OTUgLTI0MS45NTU0MSA4MjUuNTMxMjUgLTI0MC44NzUgQyA4MjIuMTA2NTcgLTIzOS44NjAzNyA4MTYuODgxODUgLTIzNy45NDE4MyA4MTUuNjU2MjUgLTIzNy4wMzEyNSBDIDgxNC4xMTc0NyAtMjM3LjAxODUxIDgxMS45MzY0NSAtMjM2Ljc1OTAzIDgxMC4wMzEyNSAtMjM2LjE1NjI1IEMgODA3LjEwMDI3IC0yMzUuMjI4OTEgODA1LjI4MDkgLTIzNC42OTc4MyA4MDMuNDM3NSAtMjM0LjA5Mzc1IEMgODAyLjgxMDcxIC0yMzMuODg4MzcgODAyLjQ0NTg1IC0yMzMuNzAxMTcgODAyLjE1NjI1IC0yMzMuNTYyNSBDIDgwMS43NDg2NyAtMjMzLjM0ODg5IDgwMS41MDI5NSAtMjMzLjE1Mzc1IDgwMC44NDM3NSAtMjMyLjkzNzUgQyA3OTkuNTg5MjUgLTIzMi41MjU5NiA3OTkuMTU3NiAtMjMyLjc0ODQ2IDc5NS41NjI1IC0yMzEuNSBDIDc5Mi4xNzI2MSAtMjMwLjMyMjgzIDc4Ni45Njc1NSAtMjI4LjI4NjMgNzg1Ljc4MTI1IC0yMjcuMzQzNzUgQyA3ODQuMjU3MzcgLTIyNy4yODQwOCA3ODIuMTMxMiAtMjI2Ljk0ODg4IDc4MC4yNSAtMjI2LjI4MTI1IEMgNzc3LjM1MjYxIC0yMjUuMjUyOTYgNzc1LjU1MDk1IC0yMjQuNjA1NzcgNzczLjcxODc1IC0yMjMuOTY4NzUgQyA3NzEuODg2NTUgLTIyMy4zMzE3NCA3NzIuMDkwOSAtMjIzLjEyMDIxIDc3MC45Mzc1IC0yMjIuNzE4NzUgQyA3NjkuNjkwNzEgLTIyMi4yODQ3OSA3NjkuMjczOTUgLTIyMi41MTkwMyA3NjUuNzE4NzUgLTIyMS4xNTYyNSBDIDc2Mi4zODAwNSAtMjE5Ljg3NjQ1IDc1Ny4yMzE2NSAtMjE3LjY3MzcgNzU2LjAzMTI1IC0yMTYuNjg3NSBDIDc1NC41MjQwNyAtMjE2LjU3OTgxIDc1Mi4zOTU1NSAtMjE2LjE4ODcgNzUwLjUzMTI1IC0yMTUuNDY4NzUgQyA3NDcuNjYzMDcgLTIxNC4zNjExNSA3NDUuOTA3MzUgLTIxMy42ODcxOSA3NDQuMDkzNzUgLTIxMyBDIDc0My40NzcwNSAtMjEyLjc2NjM3IDc0My4wOTczIC0yMTIuNTU3OTcgNzQyLjgxMjUgLTIxMi40MDYyNSBDIDc0Mi44MTI1MSAtMjEyLjQwNjI1IDc0Mi44MTI1IC0yMTIuMzc2NzMgNzQyLjgxMjUgLTIxMi4zNzUgTCA3MzQuODEyNSAtMjA5LjE4NzUgTCA3MzYuNjI1IC0xOTQuNDY4NzUgQyA3MzYuMzY3MDEgLTE5NC41Mjk1NiA3NDIuODEyNSAtMTkxLjE1NjI1IDc0Mi44MTI1IC0xOTEuMTU2MjUgQyA3NDMuMDM4OTEgLTE5MS4zMDA5MyA3NDMuMjYxNDUgLTE5MS40Mjg4NiA3NDMuNTMxMjUgLTE5MS41MzEyNSBDIDc0NC42MTE3NyAtMTkxLjk0MTIzIDc0NS43MDI4NSAtMTkxLjc0NzAyIDc0OS41MzEyNSAtMTkzLjIxODc1IEMgNzUzLjM1OTc3IC0xOTQuNjkwNDkgNzU0Ljc1NTMgLTE5NS4yMjM3MyA3NTUuNDM3NSAtMTk1LjYyNSBDIDc1Ni4xMTcxMSAtMTk2LjAyNDc4IDc1Ny4wNDkyNSAtMTk2LjUwNDM3IDc1Ny42NTYyNSAtMTk3LjE1NjI1IEMgNzU5LjQ4MzE3IC0xOTcuMjk0IDc2MS4yMjcwNSAtMTk3LjY0OTQ4IDc2Mi41OTM3NSAtMTk4LjE1NjI1IEMgNzY1LjU2MTc1IC0xOTkuMjU2NzcgNzY3LjQ2OTEgLTE5OS45NjI0NCA3NjkuMzc1IC0yMDAuNjI1IEMgNzcxLjI4MDgxIC0yMDEuMjg3NTQgNzcxLjcyOTE1IC0yMDIuMDM5ODcgNzcyLjc4MTI1IC0yMDIuNDA2MjUgQyA3NzMuODcyODcgLTIwMi43ODYzNiA3NzQuOTc2MzUgLTIwMi41NzE2MyA3NzguODQzNzUgLTIwMy45Mzc1IEMgNzgyLjcxMTE1IC0yMDUuMzAzMzYgNzg0LjEyNjkgLTIwNS43NjQ1OCA3ODQuODEyNSAtMjA2LjE1NjI1IEMgNzg1LjUxMzYxIC0yMDYuNTU2NzcgNzg2LjUxMzMgLTIwNy4wODkyMyA3ODcuMTI1IC0yMDcuNzUgQyA3ODkuMDk1ODEgLTIwNy44MDQ2NiA3OTAuOTQxOTUgLTIwOC4xMzQ2MyA3OTIuNDA2MjUgLTIwOC42MjUgQyA3OTUuNDA3NzcgLTIwOS42MzAwOCA3OTcuMzMyNCAtMjEwLjI0NjcxIDc5OS4yNSAtMjEwLjg3NSBDIDgwMC43ODg2MSAtMjExLjM3OTEgODAxLjQyNDE1IC0yMTEuOTIxNzcgODAyLjE1NjI1IC0yMTIuMzEyNSBDIDgwMi4zODY0NyAtMjEyLjQ0NjgxIDgwMi42MzIxNSAtMjEyLjU2NjIzIDgwMi45MDYyNSAtMjEyLjY1NjI1IEMgODA0LjAwNDU3IC0yMTMuMDE2NzMgODA1LjA4NzcgLTIxMi43Mzc2MiA4MDkgLTIxMy45Njg3NSBDIDgxMi45MTIzMSAtMjE1LjE5OTg4IDgxNC4zNjYgLTIxNS42NDE3IDgxNS4wNjI1IC0yMTYgQyA4MTUuNzU2NDEgLTIxNi4zNTY5NyA4MTYuNjkyNiAtMjE2Ljc5MjYxIDgxNy4zMTI1IC0yMTcuNDA2MjUgQyA4MTkuMTc3NzEgLTIxNy40Mjg5MSA4MjAuOTQ4MzUgLTIxNy42NzMwOCA4MjIuMzQzNzUgLTIxOC4wOTM3NSBDIDgyNS4zNzQxNSAtMjE5LjAwNzI5IDgyNy4zMzYxNSAtMjE5LjUyMzg1IDgyOS4yODEyNSAtMjIwLjA2MjUgQyA4MzEuMjI2MzcgLTIyMC42MDExNCA4MzEuNzA3NDUgLTIyMS4zMjcwMiA4MzIuNzgxMjUgLTIyMS42MjUgQyA4MzMuODk1MjcgLTIyMS45MzQxNSA4MzUuMDAxMjUgLTIyMS42MTc2MSA4MzguOTY4NzUgLTIyMi42NTYyNSBDIDg0Mi45MzYyNSAtMjIzLjY5NDg4IDg0NC4zODYyNSAtMjI0LjA4ODk4IDg0NS4wOTM3NSAtMjI0LjQwNjI1IEMgODQ1LjgyODU1IC0yMjQuNzM1ODQgODQ2LjkwNzY1IC0yMjUuMTU5OTcgODQ3LjUzMTI1IC0yMjUuNzgxMjUgQyA4NDkuNTI5MDcgLTIyNS42NjUyNSA4NTEuMzg4NyAtMjI1LjgwMTM0IDg1Mi44NzUgLTIyNi4xNTYyNSBDIDg1NS45NTMxMSAtMjI2Ljg5MTI1IDg1Ny45NTg0IC0yMjcuMjU3MTkgODU5LjkzNzUgLTIyNy42NTYyNSBDIDg2MS41MjU0MSAtMjI3Ljk3NjQzIDg2Mi4xODE4IC0yMjguNDQ2OCA4NjIuOTM3NSAtMjI4Ljc1IEMgODYzLjE3NTAxIC0yMjguODU2OCA4NjMuNDA0NCAtMjI4Ljk0Mjc2IDg2My42ODc1IC0yMjkgQyA4NjQuODIwOTEgLTIyOS4yMjkxOSA4NjUuOTkyMTUgLTIyOC43OTEwNyA4NzAuMDMxMjUgLTIyOS41IEMgODc0LjA3MDY3IC0yMzAuMjA4OTMgODc1LjUzMTUgLTIzMC40MjcwOSA4NzYuMjUgLTIzMC42ODc1IEMgODc2Ljk2NTgxIC0yMzAuOTQ2OTQgODc3Ljk1NDM1IC0yMzEuMjU0NzQgODc4LjU5Mzc1IC0yMzEuNzgxMjUgQyA4ODAuNTE3OTUgLTIzMS41NDE3NiA4ODIuMzQxNjUgLTIzMS41NTY3MiA4ODMuNzgxMjUgLTIzMS43ODEyNSBDIDg4Ni45MDc2NyAtMjMyLjI2ODg3IDg4OC45MzU4IC0yMzIuNDgxOTIgODkwLjkzNzUgLTIzMi43NSBDIDg5Mi45MzkyMSAtMjMzLjAxODA3IDg5My40MjYyNSAtMjMzLjY5NTE0IDg5NC41MzEyNSAtMjMzLjg0Mzc1IEMgODk1LjY3NzY3IC0yMzMuOTk3OTMgODk2LjgwNzEgLTIzMy41NDIxOCA5MDAuODc1IC0yMzQuMDYyNSBDIDkwNC45NDI4MSAtMjM0LjU4MjgyIDkwNi40MzUyNSAtMjM0Ljc1ODIzIDkwNy4xNTYyNSAtMjM1IEMgOTA3Ljg5MzM3IC0yMzUuMjQ3MTQgOTA4Ljk1NDM1IC0yMzUuNTg2MjMgOTA5LjU5Mzc1IC0yMzYuMTI1IEMgOTExLjY0Mzc1IC0yMzUuNzg5NDcgOTEzLjU2NzQ1IC0yMzUuNzI3MDQgOTE1LjA5Mzc1IC0yMzUuOTA2MjUgQyA5MTguMjM1OTUgLTIzNi4yNzUyMSA5MjAuMjczNzUgLTIzNi40NjU2MSA5MjIuMjgxMjUgLTIzNi42ODc1IEMgOTIzLjg5MjA3IC0yMzYuODY1NTIgOTI0LjU0NTkgLTIzNy4yOTU3IDkyNS4zMTI1IC0yMzcuNTMxMjUgQyA5MjUuNTUzNDEgLTIzNy42MTY3NyA5MjUuODA2NTUgLTIzNy42ODY4NSA5MjYuMDkzNzUgLTIzNy43MTg3NSBDIDkyNy4yNDM0NSAtMjM3Ljg0NjQ3IDkyOC4zOTUwNSAtMjM3LjM3MjEgOTMyLjQ2ODc1IC0yMzcuODQzNzUgQyA5MzYuNTQyNDUgLTIzOC4zMTU0IDkzOC4wMjc4IC0yMzguNDU0MzUgOTM4Ljc1IC0yMzguNjg3NSBDIDkzOS40Njk0MSAtMjM4LjkxOTc3IDk0MC40NTAyNSAtMjM5LjE2MDk2IDk0MS4wOTM3NSAtMjM5LjY1NjI1IEMgOTQzLjAzMDA1IC0yMzkuMzIyNzkgOTQ0Ljg2MzggLTIzOS4yNTIwMSA5NDYuMzEyNSAtMjM5LjQwNjI1IEMgOTQ5LjQ1ODUxIC0yMzkuNzQxMiA5NTEuNDkgLTIzOS45MjQ4NCA5NTMuNSAtMjQwLjEyNSBDIDk1NS41MDk5MSAtMjQwLjMyNTE0IDk1NS45ODQxNSAtMjQwLjk1MTM5IDk1Ny4wOTM3NSAtMjQxLjA2MjUgQyA5NTguMjQ0ODUgLTI0MS4xNzc3OCA5NTkuMzkwMjUgLTI0MC42OTc0NCA5NjMuNDY4NzUgLTI0MS4xMjUgQyA5NjcuNTQ3MjUgLTI0MS41NTI1NiA5NjkuMDU3NjUgLTI0MS42ODcwOSA5NjkuNzgxMjUgLTI0MS45MDYyNSBDIDk3MC41MjA0NyAtMjQyLjEzMDExIDk3MS41NzY4NSAtMjQyLjQxOTUgOTcyLjIxODc1IC0yNDIuOTM3NSBDIDk3NC4yNzU3NSAtMjQyLjUzODgzIDk3Ni4yMjA2IC0yNDIuNDQ0MSA5NzcuNzUgLTI0Mi41OTM3NSBDIDk4MC44OTg3MSAtMjQyLjkwMTg1IDk4Mi45MjU4IC0yNDMuMDY3IDk4NC45Mzc1IC0yNDMuMjUgQyA5ODYuNTUxNTEgLTI0My4zOTY4MiA5ODcuMjAwNTUgLTI0My44MTA1NSA5ODcuOTY4NzUgLTI0NC4wMzEyNSBDIDk4OC4yMTAwNSAtMjQ0LjExMjExIDk4OC40NjIzIC0yNDQuMTYxMTYgOTg4Ljc1IC0yNDQuMTg3NSBDIDk4OS45MDIxMSAtMjQ0LjI5Mjk1IDk5MS4wNDI5IC0yNDMuNzk0NzUgOTk1LjEyNSAtMjQ0LjE4NzUgQyA5OTkuMjA3MTEgLTI0NC41ODAyNSAxMDAwLjcxMzkgLTI0NC43MTgzNCAxMDAxLjQzNzUgLTI0NC45Mzc1IEMgMTAwMi4xNTg0IC0yNDUuMTU1ODMgMTAwMy4xMzcxIC0yNDUuMzg1MiAxMDAzLjc4MTIgLTI0NS44NzUgQyAxMDA1LjcxOTMgLTI0NS41MjUwMSAxMDA3LjU1MDEgLTI0NS40MjA2MiAxMDA5IC0yNDUuNTYyNSBDIDEwMTIuMTQ4NyAtMjQ1Ljg3MDYgMTAxNC4xNzU4IC0yNDYuMDM1NzUgMTAxNi4xODc1IC0yNDYuMjE4NzUgQyAxMDE4LjE5OTEgLTI0Ni40MDE3NCAxMDE4LjcwMTcgLTI0Ny4wNTY3NyAxMDE5LjgxMjUgLTI0Ny4xNTYyNSBDIDEwMjAuOTY0OCAtMjQ3LjI1OTQ4IDEwMjIuMTA0NyAtMjQ2Ljc3MTQyIDEwMjYuMTg3NSAtMjQ3LjE1NjI1IEMgMTAzMC4yNzA0IC0yNDcuNTQxMDcgMTAzMS43NzYyIC0yNDcuNjU3MjUgMTAzMi41IC0yNDcuODc1IEMgMTAzMy4yMzkzIC0yNDguMDk3NDMgMTAzNC4yOTU2IC0yNDguMzg5NDkgMTAzNC45Mzc1IC0yNDguOTA2MjUgQyAxMDM2Ljk5NDkgLTI0OC41MDQ0OCAxMDM4Ljk0MDQgLTI0OC40MDI5MiAxMDQwLjQ2ODggLTI0OC41NjI1IEMgMTA0My42MTUzIC0yNDguODkxMDIgMTA0NS42NDU4IC0yNDkuMDg1MiAxMDQ3LjY1NjIgLTI0OS4yODEyNSBDIDEwNDkuMjY5MiAtMjQ5LjQzODU0IDEwNDkuOTIxOSAtMjQ5LjkxMjczIDEwNTAuNjg3NSAtMjUwLjE1NjI1IEMgMTA1MC45MjgyIC0yNTAuMjQ0MjkgMTA1MS4xNTA3IC0yNTAuMjc3NjIgMTA1MS40Mzc1IC0yNTAuMzEyNSBDIDEwNTIuNTg1OCAtMjUwLjQ1MjIgMTA1My43NTQyIC0yNDkuOTcyNTkgMTA1Ny44MTI1IC0yNTAuNTYyNSBDIDEwNjEuODcwOCAtMjUxLjE1MjQyIDEwNjMuMzc0MyAtMjUxLjMzOTY0IDEwNjQuMDkzOCAtMjUxLjU5Mzc1IEMgMTA2NC44MTA0IC0yNTEuODQ2OTEgMTA2NS43Njg0IC0yNTIuMTUxODIgMTA2Ni40MDYyIC0yNTIuNjg3NSBDIDEwNjguMzI1OSAtMjUyLjQ3NTU2IDEwNzAuMTI2MiAtMjUyLjUzNjA5IDEwNzEuNTYyNSAtMjUyLjc4MTI1IEMgMTA3NC42ODE2IC0yNTMuMzEzNjUgMTA3Ni42NzQxIC0yNTMuNzA5ODYgMTA3OC42NTYyIC0yNTQuMDkzNzUgQyAxMDgwLjYzODMgLTI1NC40Nzc2MiAxMDgxLjEzMDUgLTI1NS4xMzM0IDEwODIuMjE4OCAtMjU1LjM3NSBDIDEwODMuMzQ3NSAtMjU1LjYyNTY2IDEwODQuNDg5IC0yNTUuMjU4NzEgMTA4OC40Njg4IC0yNTYuMjUgQyAxMDkyLjQ0ODMgLTI1Ny4yNDEyNyAxMDkzLjg5ODMgLTI1Ny42NjkzIDEwOTQuNTkzOCAtMjU4LjAzMTI1IEMgMTA5NS4zMTYgLTI1OC40MDcyNSAxMDk2LjM1NTUgLTI1OC45MDE4MyAxMDk2Ljk2ODggLTI1OS41NjI1IEMgMTA5OC45MzE3IC0yNTkuNTc0NTQgMTEwMC43NjI1IC0yNTkuODUzNTUgMTEwMi4xODc1IC0yNjAuNDA2MjUgQyAxMTA1LjEzODcgLTI2MS41NTA4NSAxMTA3LjA2MDcgLTI2Mi4yNzU2NyAxMTA4Ljg3NSAtMjYzLjE1NjI1IEMgMTExMC4zMzA3IC0yNjMuODYyNzcgMTExMS4xOTQxIC0yNjQuODU4MjggMTExMS40MDYyIC0yNjUuMTU2MjUgQyAxMTExLjYxODUgLTI2NS40NTQyIDExMTEuNTA1MSAtMjY1Ljg4NDggMTExMS41MzEyIC0yNjUuOTA2MjUgQyAxMTExLjU3NDIgLTI2NS45NDE0OCAxMTExLjg3MTYgLTI2Ni4wMDAyOCAxMTEyLjAzMTIgLTI2Ni4zNDM3NSBDIDExMTIuODkwMiAtMjY4LjE5MDgyIDExMTQuMzU0NCAtMjcxLjk3MTM5IDExMTQuNDY4OCAtMjcyLjY1NjI1IEMgMTExNC41ODI1IC0yNzMuMzM4MzkgMTExNC42MzY4IC0yNzQuMDA5MDIgMTExNC42ODc1IC0yNzQuNDA2MjUgQyAxMTE0LjcxNjkgLTI3NC42MzU3NSAxMTE0LjU0MDQgLTI3NS4yODUxNSAxMTE0LjU2MjUgLTI3NS4zNDM3NSBDIDExMTQuNTkzNCAtMjc1LjQyNTc5IDExMTQuODUwOCAtMjc1LjU5NDMyIDExMTQuOTA2MiAtMjc1Ljg0Mzc1IEMgMTExNS4xNzI1IC0yNzcuMDQyMDYgMTExNC45OTUzIC0yNzguMDUxMTEgMTExNC43ODEyIC0yNzkuNDY4NzUgQyAxMTE0LjU2NzMgLTI4MC44ODYzOCAxMTEzLjgwOTYgLTI4NC4wODMzOCAxMTEzLjE1NjIgLTI4NC45Mzc1IEMgMTExMi40OTczIC0yODUuNzk5MjIgMTExMS45MzE0IC0yODUuOTQ4MDEgMTExMS40MDYyIC0yODUuOTM3NSB6ICIKKyAgICAgICAgIHN0eWxlPSJmaWxsOiNiY2I3ODY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgIGlkPSJwYXRoNzQyMyIKKyAgICAgICAgIGQ9Ik0gMTExMS40MDYyLC0yODUuOTM3NSBMIDExMDcuNDY4OCwtMjg0LjA2MjUgQyAxMTA3LjQyODMsLTI4NC4wNTIyOCAxMTA3LjM2OTIsLTI4NC4wNDIwMSAxMTA3LjM0MzgsLTI4NC4wMzEyNSBDIDExMDYuOTI1LC0yODMuODE4NCAxMTA3LjE3OTEsLTI4My45MzA2NyAxMTA2LjY4NzUsLTI4My43MTg3NSBDIDExMDYuMjAxNCwtMjgzLjUwOTE5IDExMDQuOTQ5OSwtMjgzLjEzNDU2IDExMDIuNTkzOCwtMjgyLjI1IEMgMTA5OS4yNjI2LC0yODAuOTk5NDIgMTA5Ni43ODk1LC0yODAuMTAwMTYgMTA5NS41OTM4LC0yNzkuMTg3NSBDIDEwOTQuMDU3NiwtMjc5LjE2NjIzIDEwOTEuODczMywtMjc4Ljk1NDE5IDEwODkuOTM3NSwtMjc4LjQ2ODc1IEMgMTA4Ni45NTYsLTI3Ny43MjEwOCAxMDg1LjA4MjMsLTI3Ny4yOTQ3NCAxMDgzLjE4NzUsLTI3Ni44NzUgQyAxMDgxLjI5MjcsLTI3Ni40NTUyNyAxMDgxLjUxMiwtMjc2LjIzMjgxIDEwODAuMzEyNSwtMjc2IEMgMTA3OS4wMTU5LC0yNzUuNzQ4MzMgMTA3OC41OTExLC0yNzYuMDA4OTkgMTA3NC44NzUsLTI3NS4yMTg3NSBDIDEwNzEuMzg1MSwtMjc0LjQ3NjYgMTA2NS45ODAyLC0yNzMuMjg3NjggMTA2NC43MTg4LC0yNzIuNTMxMjUgQyAxMDYzLjEzNDgsLTI3Mi43MTIwMyAxMDYwLjg1MTMsLTI3Mi44NTMwMyAxMDU4Ljg3NSwtMjcyLjU2MjUgQyAxMDU1LjgzNDYsLTI3Mi4xMTU1NCAxMDUzLjk1ODgsLTI3MS44ODk3NCAxMDUyLjAzMTIsLTI3MS42NTYyNSBDIDEwNTEuMzc1OCwtMjcxLjU3Njg3IDEwNTAuOTkwMiwtMjcxLjQ1NTQ3IDEwNTAuNjg3NSwtMjcxLjM3NSBDIDEwNTAuMjYxMywtMjcxLjI0MzM0IDEwNTAuMDAxNywtMjcxLjExNDk4IDEwNDkuMzEyNSwtMjcxLjAzMTI1IEMgMTA0OC4wMDA5LC0yNzAuODcxODggMTA0Ny41NTAzLC0yNzEuMTg4MDggMTA0My43ODEyLC0yNzAuNzUgQyAxMDQwLjIyNzMsLTI3MC4zMzY5MSAxMDM0Ljc3NTgsLTI2OS40NzcxOCAxMDMzLjUzMTIsLTI2OC44MTI1IEMgMTAzMS45MzIyLC0yNjkuMTA5NzkgMTAyOS42NzM1LC0yNjkuMzQ2NjkgMTAyNy42ODc1LC0yNjkuMTU2MjUgQyAxMDI0LjYyODcsLTI2OC44NjI5MyAxMDIyLjcxNTUsLTI2OC42NzIyNiAxMDIwLjc4MTIsLTI2OC41IEMgMTAxOC44NDcsLTI2OC4zMjc3MyAxMDE5LjA5MjYsLTI2OC4wNzc2MyAxMDE3Ljg3NSwtMjY3Ljk2ODc1IEMgMTAxNi41NTg4LC0yNjcuODUxMDUgMTAxNi4xMTUyLC0yNjguMTMyMzggMTAxMi4zNDM4LC0yNjcuNzE4NzUgQyAxMDA4LjgwMTcsLTI2Ny4zMzAzIDEwMDMuMzM1OSwtMjY2LjUwOTQ4IDEwMDIuMDYyNSwtMjY1Ljg0Mzc1IEMgMTAwMC40NjM2LC0yNjYuMTM4NDQgOTk4LjE3NTMsLTI2Ni4zNTA3NiA5OTYuMTg3NSwtMjY2LjE1NjI1IEMgOTkzLjEyOTIxLC0yNjUuODU3IDk5MS4yNDYzLC0yNjUuNjc2MDEgOTg5LjMxMjUsLTI2NS41IEMgOTg4LjY1NTAxLC0yNjUuNDQwMTUgOTg4LjI3MjQ1LC0yNjUuMzIxNDQgOTg3Ljk2ODc1LC0yNjUuMjUgQyA5ODcuNTQxMDUsLTI2NS4xMzEwNCA5ODcuMjg1MjUsLTI2NS4wMzE5MyA5ODYuNTkzNzUsLTI2NC45Njg3NSBDIDk4NS4yNzc3NSwtMjY0Ljg0ODQ5IDk4NC44MzQsLTI2NS4xNjM2MyA5ODEuMDYyNSwtMjY0Ljc1IEMgOTc3LjUwNjMxLC0yNjQuMzU5OTggOTcyLjA1NjksLTI2My41MTA4NCA5NzAuODEyNSwtMjYyLjg0Mzc1IEMgOTY5LjIxMzgxLC0yNjMuMTM3OTMgOTY2Ljk1MjY1LC0yNjMuMzY3NDcgOTY0Ljk2ODc1LC0yNjMuMTU2MjUgQyA5NjEuOTEzMDUsLTI2Mi44MzA5MiA5NTkuOTk0NywtMjYyLjYzMDAxIDk1OC4wNjI1LC0yNjIuNDM3NSBDIDk1Ni4xMzAzMSwtMjYyLjI0NDk5IDk1Ni4zNzI3NSwtMjYxLjk5NjYyIDk1NS4xNTYyNSwtMjYxLjg3NSBDIDk1My44NDEzNywtMjYxLjc0MzUzIDk1My4zOTMyLC0yNjIuMDM5NTQgOTQ5LjYyNSwtMjYxLjU5Mzc1IEMgOTQ2LjA4NjExLC0yNjEuMTc1MDkgOTQwLjY0NzMsLTI2MC4zMDE1OCA5MzkuMzc1LC0yNTkuNjI1IEMgOTM3Ljc3NzQxLC0yNTkuOTA2MDQgOTM1LjUxNTA1LC0yNjAuMDQ1NDMgOTMzLjUzMTI1LC0yNTkuODEyNSBDIDkzMC40NzkyNywtMjU5LjQ1NDEzIDkyOC41ODYyNSwtMjU5LjI0NDY0IDkyNi42NTYyNSwtMjU5LjAzMTI1IEMgOTI2LjAwMDA3LC0yNTguOTU4NjkgOTI1LjYxNTYsLTI1OC44NTg1NiA5MjUuMzEyNSwtMjU4Ljc4MTI1IEMgOTI0Ljg4NTcxLC0yNTguNjU0MDIgOTI0LjYyNzYsLTI1OC41MTQwNSA5MjMuOTM3NSwtMjU4LjQzNzUgQyA5MjIuNjI0MTEsLTI1OC4yOTE4MSA5MjIuMTcwMTUsLTI1OC42MTE1MiA5MTguNDA2MjUsLTI1OC4xMjUgQyA5MTQuODU3MzcsLTI1Ny42NjYyNCA5MDkuNDI3NiwtMjU2LjcwNTk4IDkwOC4xODc1LC0yNTYgQyA5MDYuNTk0NDEsLTI1Ni4yNDQyNCA5MDQuMzUzNywtMjU2LjM4MTM1IDkwMi4zNzUsLTI1Ni4xMjUgQyA4OTkuMzI3NDEsLTI1NS43MzAxOCA4OTcuNDI0MywtMjU1LjQ3NjU1IDg5NS41LC0yNTUuMjE4NzUgQyA4OTMuNTc1NzEsLTI1NC45NjA5NiA4OTMuNzczOSwtMjU0LjcyNTIyIDg5Mi41NjI1LC0yNTQuNTYyNSBDIDg5MS4yNTMwMSwtMjU0LjM4NjYgODkwLjgxNTMsLTI1NC42NjY4OCA4ODcuMDYyNSwtMjU0LjA5Mzc1IEMgODgzLjUzODIxLC0yNTMuNTU1NTEgODc4LjEzOTMsLTI1Mi4zOTQ1OCA4NzYuODc1LC0yNTEuNjU2MjUgQyA4NzUuMjg3NTEsLTI1MS44NTk3OSA4NzMuMDI5NSwtMjUxLjkxMDk4IDg3MS4wNjI1LC0yNTEuNTYyNSBDIDg2OC4wMzYzMSwtMjUxLjAyNjM4IDg2Ni4xNjM2LC0yNTAuNzAwODEgODY0LjI1LC0yNTAuMzc1IEMgODYzLjU5OTQxLC0yNTAuMjY0MjMgODYzLjIzNjMsLTI1MC4xMDQwNiA4NjIuOTM3NSwtMjUwIEMgODYyLjUxNjgxLC0yNDkuODM1MTIgODYyLjI3NDA1LC0yNDkuNjY4NyA4NjEuNTkzNzUsLTI0OS41MzEyNSBDIDg2MC4yOTkwNSwtMjQ5LjI2OTY2IDg1OS44NjY2NSwtMjQ5LjUzNzQ1IDg1Ni4xNTYyNSwtMjQ4LjcxODc1IEMgODUyLjY1Nzc3LC0yNDcuOTQ2OCA4NDcuMzEwMzUsLTI0Ni4zMzU4MiA4NDYuMDkzNzUsLTI0NS41IEMgODQ0LjUzMDg1LC0yNDUuNTc3NDUgODQyLjMzNjI1LC0yNDUuNDE0NzIgODQwLjQwNjI1LC0yNDQuOTA2MjUgQyA4MzcuNDMzODcsLTI0NC4xMjMxMiA4MzUuNTg4NTUsLTI0My42NzQxNiA4MzMuNzE4NzUsLTI0My4xNTYyNSBDIDgzMS44NDg3NSwtMjQyLjYzODM1IDgzMi4wNTIxLC0yNDIuMzg4OTcgODMwLjg3NSwtMjQyLjA2MjUgQyA4MjkuNjAyNTEsLTI0MS43MDk2IDgyOS4xNzc5NSwtMjQxLjk1NTQxIDgyNS41MzEyNSwtMjQwLjg3NSBDIDgyMi4xMDY1NywtMjM5Ljg2MDM3IDgxNi44ODE4NSwtMjM3Ljk0MTgzIDgxNS42NTYyNSwtMjM3LjAzMTI1IEMgODE0LjExNzQ3LC0yMzcuMDE4NTEgODExLjkzNjQ1LC0yMzYuNzU5MDMgODEwLjAzMTI1LC0yMzYuMTU2MjUgQyA4MDcuMTAwMjcsLTIzNS4yMjg5MSA4MDUuMjgwOSwtMjM0LjY5NzgzIDgwMy40Mzc1LC0yMzQuMDkzNzUgQyA4MDIuODEwNzEsLTIzMy44ODgzNyA4MDIuNDQ1ODUsLTIzMy43MDExNyA4MDIuMTU2MjUsLTIzMy41NjI1IEMgODAxLjc0ODY3LC0yMzMuMzQ4ODkgODAxLjUwMjk1LC0yMzMuMTUzNzUgODAwLjg0Mzc1LC0yMzIuOTM3NSBDIDc5OS41ODkyNSwtMjMyLjUyNTk2IDc5OS4xNTc2LC0yMzIuNzQ4NDYgNzk1LjU2MjUsLTIzMS41IEMgNzkyLjE3MjYxLC0yMzAuMzIyODMgNzg2Ljk2NzU1LC0yMjguMjg2MyA3ODUuNzgxMjUsLTIyNy4zNDM3NSBDIDc4NC4yNTczNywtMjI3LjI4NDA4IDc4Mi4xMzEyLC0yMjYuOTQ4ODggNzgwLjI1LC0yMjYuMjgxMjUgQyA3NzcuMzUyNjEsLTIyNS4yNTI5NiA3NzUuNTUwOTUsLTIyNC42MDU3NyA3NzMuNzE4NzUsLTIyMy45Njg3NSBDIDc3MS44ODY1NSwtMjIzLjMzMTc0IDc3Mi4wOTA5LC0yMjMuMTIwMjEgNzcwLjkzNzUsLTIyMi43MTg3NSBDIDc2OS42OTA3MSwtMjIyLjI4NDc5IDc2OS4yNzM5NSwtMjIyLjUxOTAzIDc2NS43MTg3NSwtMjIxLjE1NjI1IEMgNzYyLjM4MDA1LC0yMTkuODc2NDUgNzU3LjIzMTY1LC0yMTcuNjczNyA3NTYuMDMxMjUsLTIxNi42ODc1IEMgNzU0LjUyNDA3LC0yMTYuNTc5ODEgNzUyLjM5NTU1LC0yMTYuMTg4NyA3NTAuNTMxMjUsLTIxNS40Njg3NSBDIDc0Ny42NjMwNywtMjE0LjM2MTE1IDc0NS45MDczNSwtMjEzLjY4NzE5IDc0NC4wOTM3NSwtMjEzIEMgNzQzLjQ3NzA1LC0yMTIuNzY2MzcgNzQzLjA5NzMsLTIxMi41NTc5NyA3NDIuODEyNSwtMjEyLjQwNjI1IEMgNzQyLjgxMjUxLC0yMTIuNDA2MjUgNzQyLjgxMjUsLTIxMi4zNzY3MyA3NDIuODEyNSwtMjEyLjM3NSBMIDczNC44MTI1LC0yMDkuMTg3NSBMIDczNi42MjUsLTE5NC40Njg3NSBDIDczNi4zNjcwMSwtMTk0LjUyOTU2IDc0Mi44MTI1LC0xOTEuMTU2MjUgNzQyLjgxMjUsLTE5MS4xNTYyNSBDIDc0My4wMzg5MSwtMTkxLjMwMDkzIDc0My4yNjE0NSwtMTkxLjQyODg2IDc0My41MzEyNSwtMTkxLjUzMTI1IEMgNzQ0LjYxMTc3LC0xOTEuOTQxMjMgNzQ1LjcwMjg1LC0xOTEuNzQ3MDIgNzQ5LjUzMTI1LC0xOTMuMjE4NzUgQyA3NTMuMzU5NzcsLTE5NC42OTA0OSA3NTQuNzU1MywtMTk1LjIyMzczIDc1NS40Mzc1LC0xOTUuNjI1IEMgNzU2LjExNzExLC0xOTYuMDI0NzggNzU3LjA0OTI1LC0xOTYuNTA0MzcgNzU3LjY1NjI1LC0xOTcuMTU2MjUgQyA3NTkuNDgzMTcsLTE5Ny4yOTQgNzYxLjIyNzA1LC0xOTcuNjQ5NDggNzYyLjU5Mzc1LC0xOTguMTU2MjUgQyA3NjUuNTYxNzUsLTE5OS4yNTY3NyA3NjcuNDY5MSwtMTk5Ljk2MjQ0IDc2OS4zNzUsLTIwMC42MjUgQyA3NzEuMjgwODEsLTIwMS4yODc1NCA3NzEuNzI5MTUsLTIwMi4wMzk4NyA3NzIuNzgxMjUsLTIwMi40MDYyNSBDIDc3My44NzI4NywtMjAyLjc4NjM2IDc3NC45NzYzNSwtMjAyLjU3MTYzIDc3OC44NDM3NSwtMjAzLjkzNzUgQyA3ODIuNzExMTUsLTIwNS4zMDMzNiA3ODQuMTI2OSwtMjA1Ljc2NDU4IDc4NC44MTI1LC0yMDYuMTU2MjUgQyA3ODUuNTEzNjEsLTIwNi41NTY3NyA3ODYuNTEzMywtMjA3LjA4OTIzIDc4Ny4xMjUsLTIwNy43NSBDIDc4OS4wOTU4MSwtMjA3LjgwNDY2IDc5MC45NDE5NSwtMjA4LjEzNDYzIDc5Mi40MDYyNSwtMjA4LjYyNSBDIDc5NS40MDc3NywtMjA5LjYzMDA4IDc5Ny4zMzI0LC0yMTAuMjQ2NzEgNzk5LjI1LC0yMTAuODc1IEMgODAwLjc4ODYxLC0yMTEuMzc5MSA4MDEuNDI0MTUsLTIxMS45MjE3NyA4MDIuMTU2MjUsLTIxMi4zMTI1IEMgODAyLjM4NjQ3LC0yMTIuNDQ2ODEgODAyLjYzMjE1LC0yMTIuNTY2MjMgODAyLjkwNjI1LC0yMTIuNjU2MjUgQyA4MDQuMDA0NTcsLTIxMy4wMTY3MyA4MDUuMDg3NywtMjEyLjczNzYyIDgwOSwtMjEzLjk2ODc1IEMgODEyLjkxMjMxLC0yMTUuMTk5ODggODE0LjM2NiwtMjE1LjY0MTcgODE1LjA2MjUsLTIxNiBDIDgxNS43NTY0MSwtMjE2LjM1Njk3IDgxNi42OTI2LC0yMTYuNzkyNjEgODE3LjMxMjUsLTIxNy40MDYyNSBDIDgxOS4xNzc3MSwtMjE3LjQyODkxIDgyMC45NDgzNSwtMjE3LjY3MzA4IDgyMi4zNDM3NSwtMjE4LjA5Mzc1IEMgODI1LjM3NDE1LC0yMTkuMDA3MjkgODI3LjMzNjE1LC0yMTkuNTIzODUgODI5LjI4MTI1LC0yMjAuMDYyNSBDIDgzMS4yMjYzNywtMjIwLjYwMTE0IDgzMS43MDc0NSwtMjIxLjMyNzAyIDgzMi43ODEyNSwtMjIxLjYyNSBDIDgzMy44OTUyNywtMjIxLjkzNDE1IDgzNS4wMDEyNSwtMjIxLjYxNzYxIDgzOC45Njg3NSwtMjIyLjY1NjI1IEMgODQyLjkzNjI1LC0yMjMuNjk0ODggODQ0LjM4NjI1LC0yMjQuMDg4OTggODQ1LjA5Mzc1LC0yMjQuNDA2MjUgQyA4NDUuODI4NTUsLTIyNC43MzU4NCA4NDYuOTA3NjUsLTIyNS4xNTk5NyA4NDcuNTMxMjUsLTIyNS43ODEyNSBDIDg0OS41MjkwNywtMjI1LjY2NTI1IDg1MS4zODg3LC0yMjUuODAxMzQgODUyLjg3NSwtMjI2LjE1NjI1IEMgODU1Ljk1MzExLC0yMjYuODkxMjUgODU3Ljk1ODQsLTIyNy4yNTcxOSA4NTkuOTM3NSwtMjI3LjY1NjI1IEMgODYxLjUyNTQxLC0yMjcuOTc2NDMgODYyLjE4MTgsLTIyOC40NDY4IDg2Mi45Mzc1LC0yMjguNzUgQyA4NjMuMTc1MDEsLTIyOC44NTY4IDg2My40MDQ0LC0yMjguOTQyNzYgODYzLjY4NzUsLTIyOSBDIDg2NC44MjA5MSwtMjI5LjIyOTE5IDg2NS45OTIxNSwtMjI4Ljc5MTA3IDg3MC4wMzEyNSwtMjI5LjUgQyA4NzQuMDcwNjcsLTIzMC4yMDg5MyA4NzUuNTMxNSwtMjMwLjQyNzA5IDg3Ni4yNSwtMjMwLjY4NzUgQyA4NzYuOTY1ODEsLTIzMC45NDY5NCA4NzcuOTU0MzUsLTIzMS4yNTQ3NCA4NzguNTkzNzUsLTIzMS43ODEyNSBDIDg4MC41MTc5NSwtMjMxLjU0MTc2IDg4Mi4zNDE2NSwtMjMxLjU1NjcyIDg4My43ODEyNSwtMjMxLjc4MTI1IEMgODg2LjkwNzY3LC0yMzIuMjY4ODcgODg4LjkzNTgsLTIzMi40ODE5MiA4OTAuOTM3NSwtMjMyLjc1IEMgODkyLjkzOTIxLC0yMzMuMDE4MDcgODkzLjQyNjI1LC0yMzMuNjk1MTQgODk0LjUzMTI1LC0yMzMuODQzNzUgQyA4OTUuNjc3NjcsLTIzMy45OTc5MyA4OTYuODA3MSwtMjMzLjU0MjE4IDkwMC44NzUsLTIzNC4wNjI1IEMgOTA0Ljk0MjgxLC0yMzQuNTgyODIgOTA2LjQzNTI1LC0yMzQuNzU4MjMgOTA3LjE1NjI1LC0yMzUgQyA5MDcuODkzMzcsLTIzNS4yNDcxNCA5MDguOTU0MzUsLTIzNS41ODYyMyA5MDkuNTkzNzUsLTIzNi4xMjUgQyA5MTEuNjQzNzUsLTIzNS43ODk0NyA5MTMuNTY3NDUsLTIzNS43MjcwNCA5MTUuMDkzNzUsLTIzNS45MDYyNSBDIDkxOC4yMzU5NSwtMjM2LjI3NTIxIDkyMC4yNzM3NSwtMjM2LjQ2NTYxIDkyMi4yODEyNSwtMjM2LjY4NzUgQyA5MjMuODkyMDcsLTIzNi44NjU1MiA5MjQuNTQ1OSwtMjM3LjI5NTcgOTI1LjMxMjUsLTIzNy41MzEyNSBDIDkyNS41NTM0MSwtMjM3LjYxNjc3IDkyNS44MDY1NSwtMjM3LjY4Njg1IDkyNi4wOTM3NSwtMjM3LjcxODc1IEMgOTI3LjI0MzQ1LC0yMzcuODQ2NDcgOTI4LjM5NTA1LC0yMzcuMzcyMSA5MzIuNDY4NzUsLTIzNy44NDM3NSBDIDkzNi41NDI0NSwtMjM4LjMxNTQgOTM4LjAyNzgsLTIzOC40NTQzNSA5MzguNzUsLTIzOC42ODc1IEMgOTM5LjQ2OTQxLC0yMzguOTE5NzcgOTQwLjQ1MDI1LC0yMzkuMTYwOTYgOTQxLjA5Mzc1LC0yMzkuNjU2MjUgQyA5NDMuMDMwMDUsLTIzOS4zMjI3OSA5NDQuODYzOCwtMjM5LjI1MjAxIDk0Ni4zMTI1LC0yMzkuNDA2MjUgQyA5NDkuNDU4NTEsLTIzOS43NDEyIDk1MS40OSwtMjM5LjkyNDg0IDk1My41LC0yNDAuMTI1IEMgOTU1LjUwOTkxLC0yNDAuMzI1MTQgOTU1Ljk4NDE1LC0yNDAuOTUxMzkgOTU3LjA5Mzc1LC0yNDEuMDYyNSBDIDk1OC4yNDQ4NSwtMjQxLjE3Nzc4IDk1OS4zOTAyNSwtMjQwLjY5NzQ0IDk2My40Njg3NSwtMjQxLjEyNSBDIDk2Ny41NDcyNSwtMjQxLjU1MjU2IDk2OS4wNTc2NSwtMjQxLjY4NzA5IDk2OS43ODEyNSwtMjQxLjkwNjI1IEMgOTcwLjUyMDQ3LC0yNDIuMTMwMTEgOTcxLjU3Njg1LC0yNDIuNDE5NSA5NzIuMjE4NzUsLTI0Mi45Mzc1IEMgOTc0LjI3NTc1LC0yNDIuNTM4ODMgOTc2LjIyMDYsLTI0Mi40NDQxIDk3Ny43NSwtMjQyLjU5Mzc1IEMgOTgwLjg5ODcxLC0yNDIuOTAxODUgOTgyLjkyNTgsLTI0My4wNjcgOTg0LjkzNzUsLTI0My4yNSBDIDk4Ni41NTE1MSwtMjQzLjM5NjgyIDk4Ny4yMDA1NSwtMjQzLjgxMDU1IDk4Ny45Njg3NSwtMjQ0LjAzMTI1IEMgOTg4LjIxMDA1LC0yNDQuMTEyMTEgOTg4LjQ2MjMsLTI0NC4xNjExNiA5ODguNzUsLTI0NC4xODc1IEMgOTg5LjkwMjExLC0yNDQuMjkyOTUgOTkxLjA0MjksLTI0My43OTQ3NSA5OTUuMTI1LC0yNDQuMTg3NSBDIDk5OS4yMDcxMSwtMjQ0LjU4MDI1IDEwMDAuNzEzOSwtMjQ0LjcxODM0IDEwMDEuNDM3NSwtMjQ0LjkzNzUgQyAxMDAyLjE1ODQsLTI0NS4xNTU4MyAxMDAzLjEzNzEsLTI0NS4zODUyIDEwMDMuNzgxMiwtMjQ1Ljg3NSBDIDEwMDUuNzE5MywtMjQ1LjUyNTAxIDEwMDcuNTUwMSwtMjQ1LjQyMDYyIDEwMDksLTI0NS41NjI1IEMgMTAxMi4xNDg3LC0yNDUuODcwNiAxMDE0LjE3NTgsLTI0Ni4wMzU3NSAxMDE2LjE4NzUsLTI0Ni4yMTg3NSBDIDEwMTguMTk5MSwtMjQ2LjQwMTc0IDEwMTguNzAxNywtMjQ3LjA1Njc3IDEwMTkuODEyNSwtMjQ3LjE1NjI1IEMgMTAyMC45NjQ4LC0yNDcuMjU5NDggMTAyMi4xMDQ3LC0yNDYuNzcxNDIgMTAyNi4xODc1LC0yNDcuMTU2MjUgQyAxMDMwLjI3MDQsLTI0Ny41NDEwNyAxMDMxLjc3NjIsLTI0Ny42NTcyNSAxMDMyLjUsLTI0Ny44NzUgQyAxMDMzLjIzOTMsLTI0OC4wOTc0MyAxMDM0LjI5NTYsLTI0OC4zODk0OSAxMDM0LjkzNzUsLTI0OC45MDYyNSBDIDEwMzYuOTk0OSwtMjQ4LjUwNDQ4IDEwMzguOTQwNCwtMjQ4LjQwMjkyIDEwNDAuNDY4OCwtMjQ4LjU2MjUgQyAxMDQzLjYxNTMsLTI0OC44OTEwMiAxMDQ1LjY0NTgsLTI0OS4wODUyIDEwNDcuNjU2MiwtMjQ5LjI4MTI1IEMgMTA0OS4yNjkyLC0yNDkuNDM4NTQgMTA0OS45MjE5LC0yNDkuOTEyNzMgMTA1MC42ODc1LC0yNTAuMTU2MjUgQyAxMDUwLjkyODIsLTI1MC4yNDQyOSAxMDUxLjE1MDcsLTI1MC4yNzc2MiAxMDUxLjQzNzUsLTI1MC4zMTI1IEMgMTA1Mi41ODU4LC0yNTAuNDUyMiAxMDUzLjc1NDIsLTI0OS45NzI1OSAxMDU3LjgxMjUsLTI1MC41NjI1IEMgMTA2MS44NzA4LC0yNTEuMTUyNDIgMTA2My4zNzQzLC0yNTEuMzM5NjQgMTA2NC4wOTM4LC0yNTEuNTkzNzUgQyAxMDY0LjgxMDQsLTI1MS44NDY5MSAxMDY1Ljc2ODQsLTI1Mi4xNTE4MiAxMDY2LjQwNjIsLTI1Mi42ODc1IEMgMTA2OC4zMjU5LC0yNTIuNDc1NTYgMTA3MC4xMjYyLC0yNTIuNTM2MDkgMTA3MS41NjI1LC0yNTIuNzgxMjUgQyAxMDc0LjY4MTYsLTI1My4zMTM2NSAxMDc2LjY3NDEsLTI1My43MDk4NiAxMDc4LjY1NjIsLTI1NC4wOTM3NSBDIDEwODAuNjM4MywtMjU0LjQ3NzYyIDEwODEuMTMwNSwtMjU1LjEzMzQgMTA4Mi4yMTg4LC0yNTUuMzc1IEMgMTA4My4zNDc1LC0yNTUuNjI1NjYgMTA4NC40ODksLTI1NS4yNTg3MSAxMDg4LjQ2ODgsLTI1Ni4yNSBDIDEwOTIuNDQ4MywtMjU3LjI0MTI3IDEwOTMuODk4MywtMjU3LjY2OTMgMTA5NC41OTM4LC0yNTguMDMxMjUgQyAxMDk1LjMxNiwtMjU4LjQwNzI1IDEwOTYuMzU1NSwtMjU4LjkwMTgzIDEwOTYuOTY4OCwtMjU5LjU2MjUgQyAxMDk4LjkzMTcsLTI1OS41NzQ1NCAxMTAwLjc2MjUsLTI1OS44NTM1NSAxMTAyLjE4NzUsLTI2MC40MDYyNSBDIDExMDUuMTM4NywtMjYxLjU1MDg1IDExMDcuMDYwNywtMjYyLjI3NTY3IDExMDguODc1LC0yNjMuMTU2MjUgQyAxMTEwLjMzMDcsLTI2My44NjI3NyAxMTExLjE5NDEsLTI2NC44NTgyOCAxMTExLjQwNjIsLTI2NS4xNTYyNSBDIDExMTEuNjE4NSwtMjY1LjQ1NDIgMTExMS41MDUxLC0yNjUuODg0OCAxMTExLjUzMTIsLTI2NS45MDYyNSBDIDExMTEuNTc0MiwtMjY1Ljk0MTQ4IDExMTEuODcxNiwtMjY2LjAwMDI4IDExMTIuMDMxMiwtMjY2LjM0Mzc1IEMgMTExMi44OTAyLC0yNjguMTkwODIgMTExNC4zNTQ0LC0yNzEuOTcxMzkgMTExNC40Njg4LC0yNzIuNjU2MjUgQyAxMTE0LjU4MjUsLTI3My4zMzgzOSAxMTE0LjYzNjgsLTI3NC4wMDkwMiAxMTE0LjY4NzUsLTI3NC40MDYyNSBDIDExMTQuNzE2OSwtMjc0LjYzNTc1IDExMTQuNTQwNCwtMjc1LjI4NTE1IDExMTQuNTYyNSwtMjc1LjM0Mzc1IEMgMTExNC41OTM0LC0yNzUuNDI1NzkgMTExNC44NTA4LC0yNzUuNTk0MzIgMTExNC45MDYyLC0yNzUuODQzNzUgQyAxMTE1LjE3MjUsLTI3Ny4wNDIwNiAxMTE0Ljk5NTMsLTI3OC4wNTExMSAxMTE0Ljc4MTIsLTI3OS40Njg3NSBDIDExMTQuNTY3MywtMjgwLjg4NjM4IDExMTMuODA5NiwtMjg0LjA4MzM4IDExMTMuMTU2MiwtMjg0LjkzNzUgQyAxMTEyLjQ5NzMsLTI4NS43OTkyMiAxMTExLjkzMTQsLTI4NS45NDgwMSAxMTExLjQwNjIsLTI4NS45Mzc1IHoiCisgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjAwNDU3MTRlLTIsLTMuMTI1ZS0yKSIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjc1NzgiCisgICAgICAgeD0iLTAuMDgxNjA4NzIiCisgICAgICAgd2lkdGg9IjEuMTYzMjE3NCIKKyAgICAgICB5PSItMC4yMjY1OTk0NCIKKyAgICAgICBoZWlnaHQ9IjEuNDUzMTk4OSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMi40MzczOTkiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI3NTgwIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjc1OTQiCisgICAgICAgeD0iLTAuMDQwODA0MzU2IgorICAgICAgIHdpZHRoPSIxLjA4MTYwODciCisgICAgICAgeT0iLTAuMTEzMjk5NzIiCisgICAgICAgaGVpZ2h0PSIxLjIyNjU5OTUiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMjE4Njk5NSIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjc1OTYiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoNzYwNiI+CisgICAgICA8cGF0aAorICAgICAgICAgaWQ9InBhdGg3NjA4IgorICAgICAgICAgZD0iTSAxMDQ5LjIwNSwtMjgyLjI2NjcyIEwgMTA0OS4xMTUyLC0yODIuMjU4OTEgQyAxMDQ3LjcyNzgsLTI4MS4zNzQ0NiAxMDQyLjUxMTksLTI4MC42NTE3MSAxMDQyLjQ4NjIsLTI3Mi43MzU0NyBDIDEwNDIuNDYyLC0yNjUuMzEwMjIgMTA1Ny40OTkxLC0yNTUuNjQ0MDEgMTA1OS42NDI1LC0yNTQuNjQxNzIgQyAxMDYxLjM3MjcsLTI1My44MzI2MyAxMDYzLjIzNDEsLTI1My4yMzI5NiAxMDY1LjA0ODgsLTI1Mi45MjI5NyBMIDEwNjYuNDg2MiwtMjUyLjcwNDIyIEMgMTA2OC40MDU5LC0yNTIuNDkyMjggMTA3MC4yMDYyLC0yNTIuNTUyODEgMTA3MS42NDI1LC0yNTIuNzk3OTcgQyAxMDc0Ljc2MTYsLTI1My4zMzAzNyAxMDc2Ljc1NDEsLTI1My43MjY1OCAxMDc4LjczNjIsLTI1NC4xMTA0NyBDIDEwODAuNzE4MywtMjU0LjQ5NDM0IDEwODEuMjEwNSwtMjU1LjE1MDEyIDEwODIuMjk4OCwtMjU1LjM5MTcyIEMgMTA4My40Mjc1LC0yNTUuNjQyMzggMTA4NC41NjksLTI1NS4yNzU0MyAxMDg4LjU0ODgsLTI1Ni4yNjY3MiBDIDEwOTIuNTI4MywtMjU3LjI1OCAxMDkzLjk3ODIsLTI1Ny42ODYwMiAxMDk0LjY3MzgsLTI1OC4wNDc5NyBDIDEwOTUuMzk2LC0yNTguNDIzOTggMTA5Ni40MzU1LC0yNTguOTE4NTUgMTA5Ny4wNDg4LC0yNTkuNTc5MjIgQyAxMDk5LjAxMTcsLTI1OS41OTEyNyAxMTAwLjg0MjUsLTI1OS44NzAyNyAxMTAyLjI2NzUsLTI2MC40MjI5NyBDIDExMDUuMjE4NywtMjYxLjU2NzU4IDExMDcuMTQwNywtMjYyLjI5MjM5IDExMDguOTU1LC0yNjMuMTcyOTcgQyAxMTEwLjQxMDcsLTI2My44Nzk1IDExMTEuMjc0MSwtMjY0Ljg3NSAxMTExLjQ4NjIsLTI2NS4xNzI5NyBDIDExMTEuNjk4NSwtMjY1LjQ3MDkzIDExMTEuNTg1MiwtMjY1LjkwMTUyIDExMTEuNjExMiwtMjY1LjkyMjk3IEMgMTExMS42NTQyLC0yNjUuOTU4MjEgMTExMS45NTE3LC0yNjYuMDE3IDExMTIuMTExMiwtMjY2LjM2MDQ3IEMgMTExMi45NzAyLC0yNjguMjA3NTUgMTExNC40MzQ0LC0yNzEuOTg4MTEgMTExNC41NDg4LC0yNzIuNjcyOTcgQyAxMTE0LjY2MjUsLTI3My4zNTUxMiAxMTE0LjcxNjgsLTI3NC4wMjU3NCAxMTE0Ljc2NzUsLTI3NC40MjI5NyBDIDExMTQuNzk2OSwtMjc0LjY1MjQ4IDExMTQuNjIwNCwtMjc1LjMwMTg3IDExMTQuNjQyNSwtMjc1LjM2MDQ3IEMgMTExNC42NzM0LC0yNzUuNDQyNTIgMTExNC45MzA4LC0yNzUuNjExMDQgMTExNC45ODYyLC0yNzUuODYwNDcgQyAxMTE1LjI1MjUsLTI3Ny4wNTg3OSAxMTE1LjA3NTQsLTI3OC4wNjc4MyAxMTE0Ljg2MTIsLTI3OS40ODU0NyBDIDExMTQuNjQ3MywtMjgwLjkwMzExIDExMTMuODg5NiwtMjg0LjEwMDEgMTExMy4yMzYyLC0yODQuOTU0MjIgQyAxMTEyLjgxNjgsLTI4NS41MDI3OSAxMTEyLjQzNjksLTI4NS43NDY3MiAxMTEyLjA4LC0yODUuODYwNDcgQyAxMTEyLjAxMjksLTI4NS44Nzc3NiAxMTExLjk1NjEsLTI4NS45MDcyMSAxMTExLjg5MjUsLTI4NS45MjI5NyBDIDExMTEuODcxNSwtMjg1LjkyNjk1IDExMTEuODUwOCwtMjg1LjkxOTgzIDExMTEuODMsLTI4NS45MjI5NyBDIDExMTEuNTE4NCwtMjg1Ljk5ODQ3IDExMTEuMjIxNSwtMjg2LjA4MTY0IDExMTAuNjczOCwtMjg2LjE0MTcyIEMgMTEwOS42ODgzLC0yODYuMjQ5ODQgMTEwOC4yNDkxLC0yODYuNDAxMTIgMTEwNi43MDUsLTI4Ni4zOTE3MiBDIDExMDYuMTkwMywtMjg2LjM4ODU5IDExMDUuNjY3OSwtMjg2LjM0NDA4IDExMDUuMTQyNSwtMjg2LjI5Nzk3IEMgMTEwMS41ODM2LC0yODUuOTg1NjkgMTA5Ni4xMzI3LC0yODUuMzA2ODkgMTA5NC45MjM4LC0yODQuNjcyOTcgQyAxMDkzLjI5MDcsLTI4NS4wMDY5OSAxMDkwLjk3NTYsLTI4NS4yODUyIDEwODguOTg2MiwtMjg1LjE0MTcyIEMgMTA4NS45MjIyLC0yODQuOTIwNzUgMTA4NC4wMTg1LC0yODQuNzk5NTMgMTA4Mi4wOCwtMjg0LjY3Mjk3IEMgMTA4MC4xNDE2LC0yODQuNTQ2NDIgMTA4MC4zOTM5LC0yODQuMjg0MzMgMTA3OS4xNzM4LC0yODQuMjA0MjIgQyAxMDc3Ljg1NDcsLTI4NC4xMTc2MiAxMDc3LjM4NjksLTI4NC40Mjc0NyAxMDczLjYxMTIsLTI4NC4xMTA0NyBDIDEwNzAuMDY1NSwtMjgzLjgxMjc1IDEwNjQuNjMwNiwtMjgzLjExNzMgMTA2My4zOTI1LC0yODIuNDg1NDcgQyAxMDYxLjc1OTEsLTI4Mi44MTk5OCAxMDU5LjQ0NjYsLTI4My4wOTc4NiAxMDU3LjQ1NSwtMjgyLjk1NDIyIEMgMTA1NC4zOTA4LC0yODIuNzMzMjQgMTA1Mi40ODcyLC0yODIuNTgwNzggMTA1MC41NDg4LC0yODIuNDU0MjIgQyAxMDQ5Ljg4OTYsLTI4Mi40MTExOSAxMDQ5LjUwNjQsLTI4Mi4zMzAyOSAxMDQ5LjIwNSwtMjgyLjI2NjcyIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjgyNDQ4OTc2O2ZpbGw6I2JjYjc4NjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzYxMCIKKyAgICAgICB4PSItMC4wMjE5NDI5NzkiCisgICAgICAgd2lkdGg9IjEuMDQzODg1OSIKKyAgICAgICB5PSItMC4xMDAxNzEzNyIKKyAgICAgICBoZWlnaHQ9IjEuMjAwMzQyNyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC41NzUzMDIxMyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjc2MTIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoNzYxNiI+CisgICAgICA8cGF0aAorICAgICAgICAgaWQ9InBhdGg3NjE4IgorICAgICAgICAgZD0iTSAyMDUuNDcwMTYsLTQwOC45NzMxOCBMIDIwNS4zODAwMywtNDA4Ljk3MTY0IEMgMjAzLjkzNDQsLTQwOC4xODU5OCAxOTguNjgwODIsLTQwNy44MjgyOSAxOTguMTAzNzgsLTM5OS45MzMwNyBDIDE5Ny41NjI0NCwtMzkyLjUyNzU0IDIxMS44ODk3MywtMzgxLjgzNzQxIDIxMy45NTgxMSwtMzgwLjY4ODI2IEMgMjE1LjYyNzc1LC0zNzkuNzYwNjIgMjE3LjQ0Mjg2LC0zNzkuMDMyNzUgMjE5LjIzMTU2LC0zNzguNTk3MTEgTCAyMjAuNjUwMjMsLTM3OC4yNzg3NyBDIDIyMi41NTA1LC0zNzcuOTMzNjMgMjI0LjM1MDY1LC0zNzcuODY4NjIgMjI1LjgwMDU0LC0zNzguMDEzMTQgQyAyMjguOTQ5MTQsLTM3OC4zMjY5OCAyMzAuOTY0NCwtMzc4LjU4MzQ1IDIzMi45Njg0MywtMzc4LjgyODM0IEMgMjM0Ljk3MjQ1LC0zNzkuMDczMjIgMjM1LjUwOTEzLC0zNzkuNjkzMTIgMjM2LjYxMTYyLC0zNzkuODU4MzMgQyAyMzcuNzU1MDQsLTM4MC4wMjk3NiAyMzguODY4MjEsLTM3OS41ODQxOSAyNDIuOTA3MzksLTM4MC4yOTU4NiBDIDI0Ni45NDYyNywtMzgxLjAwNzU1IDI0OC40MjI0NiwtMzgxLjMzMzU0IDI0OS4xNDE1OCwtMzgxLjY0NjE2IEMgMjQ5Ljg4ODIyLC0zODEuOTcwOTUgMjUwLjk1OTY0LC0zODIuMzkxOTEgMjUxLjYxNzQ3LC0zODMuMDA4MjYgQyAyNTMuNTc2NDQsLTM4Mi44ODM1NSAyNTUuNDIyMjMsLTM4My4wMzQzNSAyNTYuODgyMjcsLTM4My40ODY0NSBDIDI1OS45MDYwMywtMzg0LjQyMjcyIDI2MS44NzM4NCwtMzg1LjAxMTg5IDI2My43NDUwNywtMzg1Ljc2Mzk2IEMgMjY1LjI0NjQ1LC0zODYuMzY3MzggMjY2LjE3NzA5LC0zODcuMzAwMzIgMjY2LjQwOTQzLC0zODcuNTgyNzkgQyAyNjYuNjQxOTcsLTM4Ny44NjUyNCAyNjYuNTU4OTQsLTM4OC4zMDI2OCAyNjYuNTg2MzcsLTM4OC4zMjIyNyBDIDI2Ni42MzE3MiwtMzg4LjM1NDQzIDI2Ni45MzI1OSwtMzg4LjM5MjM1IDI2Ny4xMTU2MywtMzg4LjcyMzg4IEMgMjY4LjEwMTIsLTM5MC41MDY2NCAyNjkuODI1MTgsLTM5NC4xNzYwMyAyNjkuOTg3LC0zOTQuODUxMjYgQyAyNzAuMTQ3OTQsLTM5NS41MjM4MyAyNzAuMjQ4ODIsLTM5Ni4xODkwNCAyNzAuMzI3MDcsLTM5Ni41ODE3NyBDIDI3MC4zNzIzOCwtMzk2LjgwODY4IDI3MC4yNDE1NCwtMzk3LjQ2ODc4IDI3MC4yNjc2NywtMzk3LjUyNTcgQyAyNzAuMzA0MjEsLTM5Ny42MDU0IDI3MC41NzI3MiwtMzk3Ljc1NTU4IDI3MC42NDUzNiwtMzk4LjAwMDU1IEMgMjcwLjk5NDQ5LC0zOTkuMTc3NDEgMjcwLjg4ODEsLTQwMC4xOTYzMyAyNzAuNzczMTYsLTQwMS42MjU0NSBDIDI3MC42NTg1MywtNDAzLjA1NDU0IDI3MC4xMjUzNSwtNDA2LjI5NjU1IDI2OS41MzMwMywtNDA3LjE5NDEgQyAyNjkuMTUyODYsLTQwNy43NzA1NiAyNjguNzkwODgsLTQwOC4wNDAzNSAyNjguNDQyNzcsLTQwOC4xNzg2OSBDIDI2OC4zNzcwMywtNDA4LjIwMDYxIDI2OC4zMjI0MiwtNDA4LjIzMzk0IDI2OC4yNjAwNywtNDA4LjI1NDEgQyAyNjguMjM5NCwtNDA4LjI1OTUzIDI2OC4yMTgyNiwtNDA4LjI1Mzg3IDI2OC4xOTc3MywtNDA4LjI1ODQ1IEMgMjY3Ljg5MjE0LC00MDguMzU1NDcgMjY3LjYwMTc2LC00MDguNDU5MTIgMjY3LjA1OTU3LC00MDguNTU3MiBDIDI2Ni4wODQsLTQwOC43MzM3IDI2NC42NTg4MywtNDA4Ljk4NDg2IDI2My4xMTc4MiwtNDA5LjA4MzA0IEMgMjYyLjYwNDE2LC00MDkuMTE1NzcgMjYyLjA3OTkyLC00MDkuMTA3NzUgMjYxLjU1MjU5LC00MDkuMDk4MzUgQyAyNTcuOTgwNTgsLTQwOS4wMzQ3MiAyNTIuNDk1NjQsLTQwOC43MzcyNSAyNTEuMjQ1NTIsLTQwOC4xODkwNyBDIDI0OS42Mzk2NSwtNDA4LjYzNjA0IDI0Ny4zNDk1NSwtNDA5LjA3NDgzIDI0NS4zNTQ5OSwtNDA5LjA3MDI3IEMgMjQyLjI4MzA0LC00MDkuMDYzMjUgMjQwLjM3NTUyLC00MDkuMDc0OTMgMjM4LjQzMjkyLC00MDkuMDgzNyBDIDIzNi40OTA0MSwtNDA5LjA5MjQ4IDIzNi43MjM4NCwtNDA4LjgxMzQ1IDIzNS41MDExMiwtNDA4LjgxODUyIEMgMjM0LjE3OTIsLTQwOC44MjQwMSAyMzMuNzM0MTEsLTQwOS4xNjU2OSAyMjkuOTQ1NSwtNDA5LjExMjQ1IEMgMjI2LjM4NzY4LC00MDkuMDYyNDMgMjIwLjkxNzU0LC00MDguNzQ3MjMgMjE5LjYzODQ0LC00MDguMjAzMTggQyAyMTguMDMyMywtNDA4LjY1MDY1IDIxNS43NDQ3NywtNDA5LjA4ODkzIDIxMy43NDgwMSwtNDA5LjA4NDM2IEMgMjEwLjY3NTg2LC00MDkuMDc3MzUgMjA4Ljc2NjI2LC00MDkuMDU3ODYgMjA2LjgyMzc1LC00MDkuMDY2NjIgQyAyMDYuMTYzMTYsLTQwOS4wNjk2MSAyMDUuNzc1MjUsLTQwOS4wMTU2IDIwNS40NzAxNiwtNDA4Ljk3MzE4IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjgyNDQ4OTc2O2ZpbGw6I2JjYjc4NjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc2MjIiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzcwOCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xOS4wOTE4ODMsNC4yNDI2NDA3KSIKKyAgICAgICB4MT0iNzc0Ljk3NjY4IgorICAgICAgIHkxPSItMjExLjg3MTA1IgorICAgICAgIHgyPSI3NTUuMTE1ODQiCisgICAgICAgeTI9Ii0yMDIuNjc4NjUiIC8+CisgICAgPG1hc2sKKyAgICAgICBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJtYXNrNzcwNCI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDc3MDgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKKyAgICAgICAgIGQ9Ik0gNzE4LjQwODEyLC0yMjQuMzEyMTcgTCA3NTEuNjU4MTIsLTE2OC4zMTIxNyBMIDEwMjcuNjU4MSwtMTkyLjMxMjE3IEwgMTE4Ny4xNTgxLC0yNDAuNTYyMTcgTCAxMTIwLjY1ODEsLTMyMy4zMTIxNyBMIDcxOC40MDgxMiwtMjI0LjMxMjE3IHoiCisgICAgICAgICBpZD0icGF0aDc3MDYiIC8+CisgICAgPC9tYXNrPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ4NDMwIgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDc5MDQiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMzI0ODMyLDAuOTAyMjI4OCwtMC45NTgyNDA3LC0wLjM1MzEyNDIsMzA1LjI5MjI3LDE5LjkwOTQ5NykiCisgICAgICAgY3g9IjE0Mi45NTgzMyIKKyAgICAgICBjeT0iMTA3LjA5MjM0IgorICAgICAgIGZ4PSIxNDIuOTU4MzMiCisgICAgICAgZnk9IjEwNy4wOTIzNCIKKyAgICAgICByPSI2Ni45ODE3NjYiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMzMTciCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzkwNiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDAzNjQ3OCwtMS4wMzQ1NDkyZS03LDEuNzEyNDYyOGUtNywxLjY2MTMxMjUsLTE2MC41MzQ4NywtOTYuMjA1MzY5KSIKKyAgICAgICBjeD0iMzE3Ljc4NzU0IgorICAgICAgIGN5PSIxMjkuNjUzNzgiCisgICAgICAgZng9IjMxNy43ODc1NCIKKyAgICAgICBmeT0iMTI5LjY1Mzc4IgorICAgICAgIHI9IjQ3Ljg2MzIxNiIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50ODM5OCIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ3OTA4IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wNzQ3NjYxLC0wLjE1Nzc5NTcsMC4yMzgyNDI1LDMuMTMyNTE4MywtNTUwLjc3NDMyLC02NS43Mjg5MDkpIgorICAgICAgIGN4PSIzMjUuMzA4NDciCisgICAgICAgY3k9IjgwLjkwOTU1NCIKKyAgICAgICBmeD0iMzI1LjMwODQ3IgorICAgICAgIGZ5PSI4MC45MDk1NTQiCisgICAgICAgcj0iMjYuOTM3OTg4IiAvPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDgyMDkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjYyIKKyAgICAgICAgIGlkPSJwYXRoODIxMSIKKyAgICAgICAgIGQ9Ik0gNzM0LjAzMTI1LDUxOS40OTE4NiBDIDczNC4wMzEyNSw1MTkuNDkxODYgNzUwLjc4NjM4LDU1Ni41MDk5MiA3NjIuNzMyNjYsNTczLjQ0NTgxIEMgNzc0LjY3ODk1LDU5MC4zODE3IDgxNS40NTk4Miw2MjkuNDkxODYgODE1LjQ1OTgyLDYyOS40OTE4NiBMIDgxNi4wNTY5OSw0OTAuOTAyMTEiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzFhMWExYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4MjI1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxMC42NjE5MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4MjI3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjgzMzMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjcuMTgiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4MzM1IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDgzMzgiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6emNjY2NjY2NjY2N6Y3p6IgorICAgICAgICAgaWQ9InBhdGg4MzQwIgorICAgICAgICAgZD0iTSAyNjYuMjcxODMsOTI0LjU3MTg1IEMgMjY0Ljg2NDU2LDk0My4zNzMwNyAyNjUuMTI2OTMsOTU3LjMyMjg5IDI2OC4zNTM1Nyw5NzMuODc1MTMgQyAyNzEuNTgwMjMsOTkwLjQyNzUxIDI4NC43NTk2NiwxMDE5Ljc4MjUgMjg4LjY4Nzk4LDEwMzcuMDU4OSBDIDI5Mi42MTQxOSwxMDU0LjMyNiAyOTEuMzgyMTEsMTA3NS4zNjg2IDI3Ni4yMjg1NCwxMDg4LjIwNzEgQyAyNjAuOTEwOTMsMTEwMS4xODQ2IDIzNC4xNzcyNywxMTA5LjgwNjEgMjA4LjM5NjI0LDExMDMuOTQwOSBDIDE4Mi42MTUxOCwxMDk4LjA3NTYgMTM4Ljg0NzE2LDEwNTQuNzE3NSAxMTkuODA2MDUsMTAzMy43MTI2IEMgMTAwLjY5MzksMTAxMi42MjkzIDU2LjA0NTE4Miw5MzkuODYxOTMgNDEuODY3NTA3LDkwOS40MzY4IEMgMjcuNjg5ODM1LDg3OS4wMTE2OCAyOS4yMDc5MDIsODcyLjcxODIzIDMzLjc0Nzc5Miw4NjMuOTA3MDggQyAyNC4zODEwNyw4MzkuMzg2NTggMjEuMzM0MDgsODEzLjg0MDI2IDAuMDM1MzM0NDc5LDc4OC4zMzA0NCBDIDMwLjM2MDgxNCw3OTEuNDQ0ODcgNDMuOTE1NjI0LDgxNS4yODY3NiA2MC4xNjEwMjQsODM1LjQ3MDE5IEMgNTQuNjMxMTI4LDc4Ny4zOTQxNiA0Mi4xMDYzMDksNzcxLjA1MzY4IDMxLjc4NzA3Miw3NDQuNzQ1ODkgQyA2MS43ODEzNjcsNzUwLjgyNzU0IDgyLjM2NjQzMiw3NzYuNjE4MjggOTUuNzY2ODU1LDgxNy40NTgzOSBDIDEwNS4zMjEwMSw4MTMuNTQwNDcgMTE0LjAwNDYyLDgwOC4wODU0NSAxMjUuOTU0MjcsODA4LjM5NzE5IEMgMTE0LjY1Njc3LDc2Ni43MDEzOSAxMDguMDA0OCw3MzguNDgxMzQgODkuMjY3MDE0LDcwNy4zMjcyNSBDIDE0Mi43MDg5OCw3MTIuOTk3NTcgMTcyLjkyNDA0LDc4Ny45NjY1NyAxNjguMjM4NDQsNzk1LjI4ODA1IEMgMTc4LjIxNjQxLDc5My4wNDQwNiAxODcuMjQ0MDksNzg4Ljc1NzY3IDE5OC42NzQ5Nyw3ODkuNjM2MzggQyAxODcuNDI2LDc1MS4yODkzNSAxNzcuNjI3MTUsNzEyLjc2ODQ4IDE5NS4wMTUyNiw2NzAuOTg4MTkgQyAxOTUuMDE1MjYsNjcwLjk4ODE5IDI0My4zMDIwNCw3MzYuNDI1MDcgMjQ5LjQwNDkxLDc1Ni43OTM5NyBDIDI1NS41MDc3OSw3NzcuMTYyODcgMjUwLjkyMzczLDc5NS40OTQ0OCAyNTAuOTIzNzMsNzk1LjQ5NDQ4IEMgMjUwLjkyMzczLDc5NS40OTQ0OCAyNjcuODgzMyw4MjYuNTc5NzggMjcxLjIxNzY1LDg0Ni41ODg2MiBDIDI3NC41OTA3NSw4NjYuODI5OTYgMjY3LjY4NDk2LDkwNS42OTE5MyAyNjYuMjcxODMsOTI0LjU3MTg1IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODM1NCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNi44MiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjgzNTYiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODM1OSI+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiCisgICAgICAgICBpZD0icGF0aDgzNjEiCisgICAgICAgICBkPSJNIDI2Ni4yNzE4Myw5MjQuNTcxODUgQyAyNjQuODY0NTYsOTQzLjM3MzA3IDI2NS4xMjY5Myw5NTcuMzIyODkgMjY4LjM1MzU3LDk3My44NzUxMyBDIDI3MS41ODAyMyw5OTAuNDI3NTEgMjg0Ljc1OTY2LDEwMTkuNzgyNSAyODguNjg3OTgsMTAzNy4wNTg5IEMgMjkyLjYxNDE5LDEwNTQuMzI2IDI5MS4zODIxMSwxMDc1LjM2ODYgMjc2LjIyODU0LDEwODguMjA3MSBDIDI2MC45MTA5MywxMTAxLjE4NDYgMjM0LjE3NzI3LDExMDkuODA2MSAyMDguMzk2MjQsMTEwMy45NDA5IEMgMTgyLjYxNTE4LDEwOTguMDc1NiAxMzguODQ3MTYsMTA1NC43MTc1IDExOS44MDYwNSwxMDMzLjcxMjYgQyAxMDAuNjkzOSwxMDEyLjYyOTMgNTYuMDQ1MTgyLDkzOS44NjE5MyA0MS44Njc1MDcsOTA5LjQzNjggQyAyNy42ODk4MzUsODc5LjAxMTY4IDI5LjIwNzkwMiw4NzIuNzE4MjMgMzMuNzQ3NzkyLDg2My45MDcwOCBDIDI0LjM4MTA3LDgzOS4zODY1OCAyMS4zMzQwOCw4MTMuODQwMjYgMC4wMzUzMzQ0NzksNzg4LjMzMDQ0IEMgMzAuMzYwODE0LDc5MS40NDQ4NyA0My45MTU2MjQsODE1LjI4Njc2IDYwLjE2MTAyNCw4MzUuNDcwMTkgQyA1NC42MzExMjgsNzg3LjM5NDE2IDQyLjEwNjMwOSw3NzEuMDUzNjggMzEuNzg3MDcyLDc0NC43NDU4OSBDIDYxLjc4MTM2Nyw3NTAuODI3NTQgODIuMzY2NDMyLDc3Ni42MTgyOCA5NS43NjY4NTUsODE3LjQ1ODM5IEMgMTA1LjMyMTAxLDgxMy41NDA0NyAxMTQuMDA0NjIsODA4LjA4NTQ1IDEyNS45NTQyNyw4MDguMzk3MTkgQyAxMTQuNjU2NzcsNzY2LjcwMTM5IDEwOC4wMDQ4LDczOC40ODEzNCA4OS4yNjcwMTQsNzA3LjMyNzI1IEMgMTQyLjcwODk4LDcxMi45OTc1NyAxNzIuOTI0MDQsNzg3Ljk2NjU3IDE2OC4yMzg0NCw3OTUuMjg4MDUgQyAxNzguMjE2NDEsNzkzLjA0NDA2IDE4Ny4yNDQwOSw3ODguNzU3NjcgMTk4LjY3NDk3LDc4OS42MzYzOCBDIDE4Ny40MjYsNzUxLjI4OTM1IDE3Ny42MjcxNSw3MTIuNzY4NDggMTk1LjAxNTI2LDY3MC45ODgxOSBDIDE5NS4wMTUyNiw2NzAuOTg4MTkgMjQzLjMwMjA0LDczNi40MjUwNyAyNDkuNDA0OTEsNzU2Ljc5Mzk3IEMgMjU1LjUwNzc5LDc3Ny4xNjI4NyAyNTAuOTIzNzMsNzk1LjQ5NDQ4IDI1MC45MjM3Myw3OTUuNDk0NDggQyAyNTAuOTIzNzMsNzk1LjQ5NDQ4IDI2Ny44ODMzLDgyNi41Nzk3OCAyNzEuMjE3NjUsODQ2LjU4ODYyIEMgMjc0LjU5MDc1LDg2Ni44Mjk5NiAyNjcuNjg0OTYsOTA1LjY5MTkzIDI2Ni4yNzE4Myw5MjQuNTcxODUgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojYWRhNDY5O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4Mzc5IgorICAgICAgIHg9Ii0wLjE0NDEzNzkzIgorICAgICAgIHdpZHRoPSIxLjI4ODI3NiIKKyAgICAgICB5PSItMC4xMDI3ODY4OSIKKyAgICAgICBoZWlnaHQ9IjEuMjA1NTczOCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNy4zODkyNjYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4MzgxIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDgzOTIiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6emNjY2NjY2NjY2N6Y3p6IgorICAgICAgICAgaWQ9InBhdGg4Mzk0IgorICAgICAgICAgZD0iTSA3NjAuMTYzOTYsOTM1LjgzMzc3IEMgNzY2Ljk1ODA2LDk1NC43MzY1NiA3NzAuNjU3NjUsOTY5LjEzMzQ2IDc3Mi4wNTQyNiw5ODcuMDQ1NjYgQyA3NzMuNDUwODgsMTAwNC45NTggNzY4LjI3MTU4LDEwMzguODQ2NSA3NjkuMTUzOCwxMDU3LjcwMTggQyA3NzAuMDM1NTUsMTA3Ni41NDcgNzc3LjI4NzQ5LDEwOTcuODAwOCA3OTYuNDk4NDMsMTEwNi42NzA3IEMgODE1LjkxNzMsMTExNS42MzY1IDg0NS44MTc2NywxMTE2Ljg4MiA4NzAuNjE4MjcsMTEwMy41MjUxIEMgODk1LjQxODg3LDEwOTAuMTY4MSA5MjguMDE5MjksMTAzMy4xOTk2IDk0MS41OTI1MywxMDA2LjIxNjQgQyA5NTUuMjE2MzgsOTc5LjEzMjQ2IDk4MC4zNTM2LDg5MS43MTkwMyA5ODYuMjUzMzMsODU2LjQ0NzgxIEMgOTkyLjE1MzA2LDgyMS4xNzY2IDk4OC44MDM4Nyw4MTUuMTQ3MDQgOTgxLjYzNTg1LDgwNy4zOTIzMiBDIDk4NC4yNzYxNSw3NzkuNTUyMTcgOTgwLjEzNjEzLDc1Mi40NTY4OSA5OTQuNzQ1NTQsNzIwLjIwNjE0IEMgOTY0LjQ5NjUzLDczMi4wMzE4NCA5NTcuMzYzMjUsNzYwLjM2Njg0IDk0Ni40MjY2NSw3ODUuNzExMjIgQyA5MzguNDI1NzQsNzM0Ljc3ODI5IDk0Ni42MzU4MSw3MTQuNDM4MDMgOTQ5Ljc0NTU0LDY4NC40OTE4NiBDIDkyMC42ODA3OCw2OTkuMjY5NzcgOTA2Ljg4NDAzLDczMS42MDU4OCA5MDQuNzQ1NTQsNzc3LjM0OSBDIDg5My44MjE1OSw3NzYuMDQ0OCA4ODMuMzU0MSw3NzIuOTE0NzcgODcxLjE3NDExLDc3Ni42MzQ3MSBDIDg3MC45MTAwNyw3MzAuNjExMzcgODY5LjcxMDU1LDY5OS43NDUzIDg4MC4wODQ3NCw2NjIuNDI4MjIgQyA4MjYuODI5MjcsNjgzLjQ1NTA4IDgxNy4xMzc0Niw3NjkuMDIyMzIgODI0LjAzMTI1LDc3NS4yMDYxNCBDIDgxMy4xNDg0Myw3NzUuNzQxMTQgODAyLjY2MDE3LDc3My45MDg4NCA3OTEuMTc0MTEsNzc4LjA2MzI5IEMgNzkxLjgxMzAzLDczNS40OTE5NCA3OTAuOTEzNjUsNjkzLjE1NDY4IDc2MS4xNzQxMSw2NTUuMjA2MTQgQyA3NjEuMTc0MTEsNjU1LjIwNjE0IDczMC4yMTYwNSw3MzYuMTI4NDggNzI5Ljc0NTU0LDc1OC43Nzc1NyBDIDcyOS4yNzUwMyw3ODEuNDI2NjYgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzkuMTk3MTMsNzk4Ljk0MzQ1IEMgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzAuNjI5MDYsODM1LjY4Mzk2IDczMi44OTg1NCw4NTcuMTc1NjggQyA3MzUuMTk0MzksODc4LjkxNzE0IDc1My4zNDE0NCw5MTYuODUxODUgNzYwLjE2Mzk2LDkzNS44MzM3NyB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhZGE0Njk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg0MDQiCisgICAgICAgeD0iLTAuMDkwMjY4NjU3IgorICAgICAgIHdpZHRoPSIxLjE4MDUzNzMiCisgICAgICAgeT0iLTAuMTAyNTA4NDgiCisgICAgICAgaGVpZ2h0PSIxLjIwNTAxNyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNS4zNDU3MjcyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODQwNiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NDE3Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjY2NjY2NjY2NjemN6eiIKKyAgICAgICAgIGlkPSJwYXRoODQxOSIKKyAgICAgICAgIGQ9Ik0gNzYwLjE2Mzk2LDkzNS44MzM3NyBDIDc2Ni45NTgwNiw5NTQuNzM2NTYgNzcwLjY1NzY1LDk2OS4xMzM0NiA3NzIuMDU0MjYsOTg3LjA0NTY2IEMgNzczLjQ1MDg4LDEwMDQuOTU4IDc2OC4yNzE1OCwxMDM4Ljg0NjUgNzY5LjE1MzgsMTA1Ny43MDE4IEMgNzcwLjAzNTU1LDEwNzYuNTQ3IDc3Ny4yODc0OSwxMDk3LjgwMDggNzk2LjQ5ODQzLDExMDYuNjcwNyBDIDgxNS45MTczLDExMTUuNjM2NSA4NDUuODE3NjcsMTExNi44ODIgODcwLjYxODI3LDExMDMuNTI1MSBDIDg5NS40MTg4NywxMDkwLjE2ODEgOTI4LjAxOTI5LDEwMzMuMTk5NiA5NDEuNTkyNTMsMTAwNi4yMTY0IEMgOTU1LjIxNjM4LDk3OS4xMzI0NiA5ODAuMzUzNiw4OTEuNzE5MDMgOTg2LjI1MzMzLDg1Ni40NDc4MSBDIDk5Mi4xNTMwNiw4MjEuMTc2NiA5ODguODAzODcsODE1LjE0NzA0IDk4MS42MzU4NSw4MDcuMzkyMzIgQyA5ODQuMjc2MTUsNzc5LjU1MjE3IDk4MC4xMzYxMyw3NTIuNDU2ODkgOTk0Ljc0NTU0LDcyMC4yMDYxNCBDIDk2NC40OTY1Myw3MzIuMDMxODQgOTU3LjM2MzI1LDc2MC4zNjY4NCA5NDYuNDI2NjUsNzg1LjcxMTIyIEMgOTM4LjQyNTc0LDczNC43NzgyOSA5NDYuNjM1ODEsNzE0LjQzODAzIDk0OS43NDU1NCw2ODQuNDkxODYgQyA5MjAuNjgwNzgsNjk5LjI2OTc3IDkwNi44ODQwMyw3MzEuNjA1ODggOTA0Ljc0NTU0LDc3Ny4zNDkgQyA4OTMuODIxNTksNzc2LjA0NDggODgzLjM1NDEsNzcyLjkxNDc3IDg3MS4xNzQxMSw3NzYuNjM0NzEgQyA4NzAuOTEwMDcsNzMwLjYxMTM3IDg2OS43MTA1NSw2OTkuNzQ1MyA4ODAuMDg0NzQsNjYyLjQyODIyIEMgODI2LjgyOTI3LDY4My40NTUwOCA4MTcuMTM3NDYsNzY5LjAyMjMyIDgyNC4wMzEyNSw3NzUuMjA2MTQgQyA4MTMuMTQ4NDMsNzc1Ljc0MTE0IDgwMi42NjAxNyw3NzMuOTA4ODQgNzkxLjE3NDExLDc3OC4wNjMyOSBDIDc5MS44MTMwMyw3MzUuNDkxOTQgNzkwLjkxMzY1LDY5My4xNTQ2OCA3NjEuMTc0MTEsNjU1LjIwNjE0IEMgNzYxLjE3NDExLDY1NS4yMDYxNCA3MzAuMjE2MDUsNzM2LjEyODQ4IDcyOS43NDU1NCw3NTguNzc3NTcgQyA3MjkuMjc1MDMsNzgxLjQyNjY2IDczOS4xOTcxMyw3OTguOTQzNDUgNzM5LjE5NzEzLDc5OC45NDM0NSBDIDczOS4xOTcxMyw3OTguOTQzNDUgNzMwLjYyOTA2LDgzNS42ODM5NiA3MzIuODk4NTQsODU3LjE3NTY4IEMgNzM1LjE5NDM5LDg3OC45MTcxNCA3NTMuMzQxNDQsOTE2Ljg1MTg1IDc2MC4xNjM5Niw5MzUuODMzNzcgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojYWRhNDY5O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgPC9kZWZzPgorICA8bWV0YWRhdGEKKyAgICAgaWQ9Im1ldGFkYXRhNyI+CisgICAgPHJkZjpSREY+CisgICAgICA8Y2M6V29yaworICAgICAgICAgcmRmOmFib3V0PSIiPgorICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KKyAgICAgICAgPGRjOnR5cGUKKyAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KKyAgICAgIDwvY2M6V29yaz4KKyAgICA8L3JkZjpSREY+CisgIDwvbWV0YWRhdGE+CisgIDxnCisgICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCisgICAgIGlkPSJsYXllcjEiCisgICAgIGlua3NjYXBlOmxhYmVsPSJTaGFkb3ciPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyMTEzNjEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDMwNC42NDI4NSw1MjYuNjQ3OSBDIDI5NC42NDI4NSw1MjcuMDA1MDUgMjg2LjQyODU3LDUyOS41MDUwNCAyODYuNDI4NTcsNTI5LjUwNTA0IEwgMjkzLjkyODU3LDUzNS41NzY0NyBMIDMwNC4yODU3MSw1MzkuMTQ3OSBMIDMyMC4zNTcxNCw1MzkuNTA1MDQgTCAzNDIuODU3MTQsNTM0LjE0NzkgTCAzNTAuNzE0MjgsNTM1LjIxOTMzIEwgMzcxLjA3MTQzLDUzMy4wNzY0NyBMIDM2MC43MTQyOCw1MzkuODYyMTkgQyAzNjYuMTczNTEsNTM4LjgzODU4IDM3OC4xMDc1Nyw1NDMuNDMxMyAzNzAuMzU3MTQsNTQ1LjIxOTMzIEMgMzY4LjYxNzE0LDU0NS42MjA3NSAzODQuMjg1NzEsNTQwLjU3NjQ4IDM4NC4yODU3MSw1NDAuNTc2NDggTCAzODYuNzg1NzEsNTM1LjkzMzYxIEwgMzkwLjM1NzE0LDUyNi42NDc5IEwgNDAxLjc4NTcxLDUyNi42NDc5IEwgNDE5Ljk5OTk5LDUyMi4wMDUwNCBMIDQyMy41NzE0Myw1MTcuMDA1MDUgTCA0MDcuNDk5OTksNTE4LjA3NjQ3IEwgMzk1LjM1NzE0LDUyMC4yMTkzMyBMIDM4MC43MTQyOCw1MTUuMjE5MzMgTCAzMTAuMDIyMTgsNTMxLjkyNzA3IEwgMzA0LjY0Mjg1LDUyNi42NDc5IHoiCisgICAgICAgaWQ9InBhdGgxMDMyNiIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY3NjY2NjY2NjY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxMC43MjY3NTMsMCwwLDEwLjcyNjc1MywtMjg4Mi4xMjM1LC00NTY1LjQ1ODMpIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvY2hlZXNlbmVzcy9Eb2N1bWVudHMvTENBMDkvbWFzY290L3R1el9uZXcucG5nIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxNDIuMTA1MjciCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjE0Mi4xMDUyNyIgLz4KKyAgPC9nPgorICA8ZworICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgICBpZD0ibGF5ZXIyMCIKKyAgICAgaW5rc2NhcGU6bGFiZWw9Ik5ldyBFYXIiPgorICAgIDxnCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgaWQ9Imc3ODgyIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzEwODQsLTAuMTkzNzQzMywwLjI2Mjk2MywwLjk2NDgwNTgsNTAzLjY4MDI3LDEzNi40ODM5OSkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enpjYyIKKyAgICAgICAgIGlkPSJwYXRoNzg3NiIKKyAgICAgICAgIGQ9Ik0gMjQ1LjEyMjU1LDEwMC4wNTM0NCBDIDI0NS4xMjI1NSwxMDAuMDUzNDQgMTk3Ljk5NDQ0LDY4LjQwNjUxOSAxNzcuOTA3OSw2NC4yNTI1MDEgQyAxNTcuODY5OTgsNjAuMTA4NTM4IDEzOS40MzUsNjAuOTM0OTIzIDEyNS45NzQyNiw3Ny44NTk4MjQgQyAxMTIuNTEzNTIsOTQuNzg0NzI1IDExMy44OTY4NywxMzkuMTI1MDIgMTEyLjQzODcyLDE2NC44MjkzNyBDIDExMC45ODA1NywxOTAuNTMzNzIgMTE0Ljk4ODE3LDIzNS4wMDYzOCAxMzAuMDQzMzIsMjUzLjQ5NDg5IEMgMTQ1LjA5ODQ4LDI3MS45ODMzOSAxNzUuOTI5NjYsMjY3LjA3OTkxIDE3OS45NzAyNywyNzQuOTA4NTkgQyAxODIuMTgzMSwyNzkuMTk1OTUgMjQ1LjEyMjU1LDEwMC4wNTM0NCAyNDUuMTIyNTUsMTAwLjA1MzQ0IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDc5MDQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6emMiCisgICAgICAgICBpZD0icGF0aDc4NzgiCisgICAgICAgICBkPSJNIDEzNS4zNzkzNSw4Mi4wMTc4MDcgQyAxMzUuMzc5MzUsODIuMDE3ODA3IDE2MS43MjI5LDgzLjk1NjU5IDE3My4wMTI0Miw5NS45MjA5OTUgQyAxODQuNDI3MzYsMTA4LjAxODMzIDE4Ni43NDY5OSwxMTcuMjUyNTEgMTg4LjMwODI4LDEzMy42NTU1OCBDIDE4OS44NzE2NSwxNTAuMDgwNTcgMTg3LjQ1ODcxLDE2Mi4wNzM3IDE4MC40OTQ0NiwxNjkuNjkyOTIgQyAxNzMuNTMwMjEsMTc3LjMxMjE0IDE3OS40OTAxNywxODkuMjc2MjQgMTU0LjU3ODQxLDE4MS43NjM5OSBDIDEyOS42NjY2NSwxNzQuMjUxNzQgMTI3LjU0NjE3LDE1My45ODEwMSAxMjguMDYzMTgsMTM1LjQ1OTI0IEMgMTI4LjU4MDM5LDExNi45MzAyNiAxMzUuMzc5MzUsODIuMDE3ODA3IDEzNS4zNzkzNSw4Mi4wMTc4MDcgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NzkwNik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjY3NzYyIKKyAgICAgICAgIGlkPSJwYXRoNzg4MCIKKyAgICAgICAgIGQ9Ik0gMTM1LjY0OCw4MS45MjcyMTEgQyAxMzUuNjQ4LDgxLjkyNzIxMSAxMzEuMDAzMzUsOTguMjkyMjg2IDEzNi4yMzYyNSwxMTAuNDkwMzEgQyAxNDEuNzI0MTksMTIzLjI4Mjg1IDE2My40NjA1LDE1NC43NTAzOCAxNjMuNDYwNSwxNjUuMTQ1OTYgTCAxODYuMTE2NzUsMTYwLjE0NTk2IEMgMTg4LjY1ODkzLDE1My4xNzk1MiAxODkuMzI3MjcsMTQ0LjM5MzkgMTg4LjMwNDI1LDEzMy42NDU5NiBDIDE4Ni43NDI5NiwxMTcuMjQyODkgMTg0LjQzNzk1LDEwOC4wMjQ1NSAxNzMuMDIzLDk1LjkyNzIxMSBDIDE2My4zNjgxMiw4NS42OTUxNjQgMTQxLjQyOTg5LDgyLjU1MjM1NCAxMzUuNjQ4LDgxLjkyNzIxMSB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ3OTA4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvZz4KKyAgPC9nPgorICA8ZworICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgICBpZD0ibGF5ZXIyMSIKKyAgICAgaW5rc2NhcGU6bGFiZWw9IlJlbmRlcmVkMiIKKyAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDg0NS4wMzEyNSwxMTU0Ljc3NzYgQyA4NDAuNzQ1NTQsMTE1NS40OTE5IDgxNy40MDMxLDExNTguMzk1NyA3ODcuMTc0MTEsMTE2NC43Nzc2IEMgNzU2Ljk0NTEyLDExNzEuMTU5NSA3MjkuODYwMTYsMTE2OS43NDM3IDY1MS4zODgwMywxMTgyLjEwNzIgQyA1NzEuNTM2MjUsMTE5NC42ODggNTU3LjMyMzY3LDEyMjQuNjQ5NSA1NDMuMjY1NzgsMTIyOS4xNzE1IEMgNTI4LjU2NTY0LDEyMzMuOTAwMSAzOTcuODg4MzksMTE2My4zNDkgMzk3Ljg4ODM5LDExNjMuMzQ5IEwgNDAyLjE3NDExLDEwNjkuMDYzMyBDIDQwMi4xNzQxMSwxMDY5LjA2MzMgNDg4LjA1OTYyLDEwNTIuODYyNCA1MTQuMzE2OTYsMTAzNS40OTE5IEMgNTQwLjU3NDMxLDEwMTguMTIxNCA1NTkuODk5MzQsOTg1LjgyNTg4IDU3My42MDI2OCw5NjQuMDYzMjkgQyA1ODcuMzA2MDIsOTQyLjMwMDcgNjA2LjQ1OTgyLDg5Mi42MzQ3MSA2MDYuNDU5ODIsODkyLjYzNDcxIEwgODQ1LjAzMTI1LDExNTQuNzc3NiB6IgorICAgICAgIGlkPSJwYXRoNzkxNyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjY3p6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODg4OCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDMzMi4zNDAxOSw4OTguMzg1NDkgTCAyOTkuNjA4MzgsODM3LjA4NTkzIEwgMjYxLjk5MTA0LDg4Mi4xOTIzOSBDIDI2NC4xNjc3OSw4ODMuNTA5NSAyNjcuNzY1MjksODYxLjMzNjM2IDMwNy41OTE0NCw4MTcuNzc1MzEgTCAzMzIuMzQwMTksODk4LjM4NTQ5IHoiCisgICAgICAgaWQ9InBhdGg3OTE5IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2NTgpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI4NDEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODg5Mik7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDIwMC44MTgzMyw4NjMuMDMwMTUgTCAzNDcuMTg5NDMsODExLjQxMTM2IEwgNTkxLjE0MTI3LDEwMzcuNjg1NSBMIDM0OS4zMTA3NSwxMTc3LjY5MjcgTCAxNjguMjkxNDEsMTA5MC4wMTE0IEwgMjAwLjgxODMzLDg2My4wMzAxNSB6IgorICAgICAgIGlkPSJwYXRoNzkyMyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyODMzKSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMGYwZjBmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDY0Mi44ODgzOSw2NDAuMTM0NzEgQyA2NDIuODg4MzksNjQwLjEzNDcxIDYxMy4zMzQzMyw2ODAuNzA3NzYgNTk1LjAzMTI1LDcxNC40MjA0MiBDIDU3Ni43MjgxNiw3NDguMTMzMDkgNTM2LjQxMDE2LDg0MC43NzczNiA1MjQuNjc0MTEsODg1LjQ5MTg1IEMgNTEyLjkxNDcxLDkzMC4yOTUyOSA0NjIuMTc0MTEsMTAwOS4wNjMzIDQ2Mi4xNzQxMSwxMDA5LjA2MzMgTCA1MzguMjQ1NTQsMTAyNy4yNzc2IEMgNTM4LjI0NTU0LDEwMjcuMjc3NiA1NTAuMDUyNjYsMTAxNC40NTQyIDU2OS4zMTY5Niw5ODEuMjA2MTQgQyA1ODguNTgxMjYsOTQ3Ljk1ODA2IDYyOS42NzQxMSw4NDIuNjM0NzEgNjI5LjY3NDExLDg0Mi42MzQ3MSBMIDY0Mi44ODgzOSw2NDAuMTM0NzEgeiIKKyAgICAgICBpZD0icGF0aDc5MjEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenpjY3pjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI4ODU2KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNDMwLjI4MTMxLDM4MS45NDEyMiBDIDQyMy4yMTAyNSwzODQuNzY5NjUgMTk0LjEwMDA3LDQxNC4wOTMwMyAxOTQuMTAwMDcsNDE0LjA5MzAzIEwgMTU0LjQ2MDQ2LDc3My45MjYwNyBMIDI0NC42NTg5NSw4NjYuNTY1NjggTCAyOTYuOTg0ODUsNzUyLjAxNDM4IEwgMzk3LjQ1Mjg5LDU2NS42MjI0NiBMIDQzMC4yODEzMSwzODEuOTQxMjIgeiIKKyAgICAgICBpZD0icGF0aDc5MjUiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2NjUpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gOTY5LjY3MDUxLDExNjQuMDM0NiBDIDk2OS42NzA1MSwxMTY0LjAzNDYgOTkyLjkyNjc5LDExNzUuNDI4MyAxMDA1LjczODMsMTE4NC41MTA3IEMgMTAxOC40MzU3LDExOTMuNTEyMiAxMDM1LjIxMDcsMTIwOS4xNTk4IDEwNDcuNDMwNywxMjIxLjg3MTIgQyAxMDU5LjczNjIsMTIzNC42NzE0IDEwNjcuNTQzNCwxMjQ0LjQ2OTkgMTA4OC45NjM0LDEyNDYuMDMyIEMgMTExMC4zOTU2LDEyNDcuNTk0OSAxMTQyLjI0NTgsMTIzNy4yNDQ0IDExNjIuMjU5NCwxMjIxLjM2NzggQyAxMTgyLjI3MjksMTIwNS40OTEyIDEyMDcuOTA2MywxMTUyLjEzNSAxMjA3LjkwNjMsMTE1Mi4xMzUgTCAxMDgwLjc0NTUsMTAwOS4wNjMzIgorICAgICAgIGlkPSJwYXRoNzkyNyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4NjApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAzMzEuMzQwMTksNjQxLjUwNDcxIEwgMjE2LjE3MzY3LDgzNS4zNjQ2NyBMIDI2MC4yMTUzLDkyNS45NjI2NSBMIDM1Ny43OTYwMyw3MzIuMjE1MzkgTCAzMzEuMzQwMTksNjQxLjUwNDcxIHoiCisgICAgICAgaWQ9InBhdGg3OTI5IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2NDIpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPGcKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBpZD0iZzc5MzEiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTM0NDg2LDAuMTE0MjgwMiwtMC4xMTQyODAyLDAuOTkzNDQ4NiwtOS4yNDMyNCw1ODguMDkwNTQpIgorICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTM0Ny44OTA2MyIKKyAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0yOC4yNTU3NzkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojYmNiNzg2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBkPSJNIDEwNDkuMjA1LC0yODIuMjY2NzIgTCAxMDQ5LjExNTIsLTI4Mi4yNTg5MSBDIDEwNDcuNzI3OCwtMjgxLjM3NDQ2IDEwNDIuNTExOSwtMjgwLjY1MTcxIDEwNDIuNDg2MiwtMjcyLjczNTQ3IEMgMTA0Mi40NjIsLTI2NS4zMTAyMiAxMDU3LjQ5OTEsLTI1NS42NDQwMSAxMDU5LjY0MjUsLTI1NC42NDE3MiBDIDEwNjEuMzcyNywtMjUzLjgzMjYzIDEwNjMuMjM0MSwtMjUzLjIzMjk2IDEwNjUuMDQ4OCwtMjUyLjkyMjk3IEwgMTA2Ni40ODYyLC0yNTIuNzA0MjIgQyAxMDY4LjQwNTksLTI1Mi40OTIyOCAxMDcwLjIwNjIsLTI1Mi41NTI4MSAxMDcxLjY0MjUsLTI1Mi43OTc5NyBDIDEwNzQuNzYxNiwtMjUzLjMzMDM3IDEwNzYuNzU0MSwtMjUzLjcyNjU4IDEwNzguNzM2MiwtMjU0LjExMDQ3IEMgMTA4MC43MTgzLC0yNTQuNDk0MzQgMTA4MS4yMTA1LC0yNTUuMTUwMTIgMTA4Mi4yOTg4LC0yNTUuMzkxNzIgQyAxMDgzLjQyNzUsLTI1NS42NDIzOCAxMDg0LjU2OSwtMjU1LjI3NTQzIDEwODguNTQ4OCwtMjU2LjI2NjcyIEMgMTA5Mi41MjgzLC0yNTcuMjU4IDEwOTMuOTc4MiwtMjU3LjY4NjAyIDEwOTQuNjczOCwtMjU4LjA0Nzk3IEMgMTA5NS4zOTYsLTI1OC40MjM5OCAxMDk2LjQzNTUsLTI1OC45MTg1NSAxMDk3LjA0ODgsLTI1OS41NzkyMiBDIDEwOTkuMDExNywtMjU5LjU5MTI3IDExMDAuODQyNSwtMjU5Ljg3MDI3IDExMDIuMjY3NSwtMjYwLjQyMjk3IEMgMTEwNS4yMTg3LC0yNjEuNTY3NTggMTEwNy4xNDA3LC0yNjIuMjkyMzkgMTEwOC45NTUsLTI2My4xNzI5NyBDIDExMTAuNDEwNywtMjYzLjg3OTUgMTExMS4yNzQxLC0yNjQuODc1IDExMTEuNDg2MiwtMjY1LjE3Mjk3IEMgMTExMS42OTg1LC0yNjUuNDcwOTMgMTExMS41ODUyLC0yNjUuOTAxNTIgMTExMS42MTEyLC0yNjUuOTIyOTcgQyAxMTExLjY1NDIsLTI2NS45NTgyMSAxMTExLjk1MTcsLTI2Ni4wMTcgMTExMi4xMTEyLC0yNjYuMzYwNDcgQyAxMTEyLjk3MDIsLTI2OC4yMDc1NSAxMTE0LjQzNDQsLTI3MS45ODgxMSAxMTE0LjU0ODgsLTI3Mi42NzI5NyBDIDExMTQuNjYyNSwtMjczLjM1NTEyIDExMTQuNzE2OCwtMjc0LjAyNTc0IDExMTQuNzY3NSwtMjc0LjQyMjk3IEMgMTExNC43OTY5LC0yNzQuNjUyNDggMTExNC42MjA0LC0yNzUuMzAxODcgMTExNC42NDI1LC0yNzUuMzYwNDcgQyAxMTE0LjY3MzQsLTI3NS40NDI1MiAxMTE0LjkzMDgsLTI3NS42MTEwNCAxMTE0Ljk4NjIsLTI3NS44NjA0NyBDIDExMTUuMjUyNSwtMjc3LjA1ODc5IDExMTUuMDc1NCwtMjc4LjA2NzgzIDExMTQuODYxMiwtMjc5LjQ4NTQ3IEMgMTExNC42NDczLC0yODAuOTAzMTEgMTExMy44ODk2LC0yODQuMTAwMSAxMTEzLjIzNjIsLTI4NC45NTQyMiBDIDExMTIuODE2OCwtMjg1LjUwMjc5IDExMTIuNDM2OSwtMjg1Ljc0NjcyIDExMTIuMDgsLTI4NS44NjA0NyBDIDExMTIuMDEyOSwtMjg1Ljg3Nzc2IDExMTEuOTU2MSwtMjg1LjkwNzIxIDExMTEuODkyNSwtMjg1LjkyMjk3IEMgMTExMS44NzE1LC0yODUuOTI2OTUgMTExMS44NTA4LC0yODUuOTE5ODMgMTExMS44MywtMjg1LjkyMjk3IEMgMTExMS41MTg0LC0yODUuOTk4NDcgMTExMS4yMjE1LC0yODYuMDgxNjQgMTExMC42NzM4LC0yODYuMTQxNzIgQyAxMTA5LjY4ODMsLTI4Ni4yNDk4NCAxMTA4LjI0OTEsLTI4Ni40MDExMiAxMTA2LjcwNSwtMjg2LjM5MTcyIEMgMTEwNi4xOTAzLC0yODYuMzg4NTkgMTEwNS42Njc5LC0yODYuMzQ0MDggMTEwNS4xNDI1LC0yODYuMjk3OTcgQyAxMTAxLjU4MzYsLTI4NS45ODU2OSAxMDk2LjEzMjcsLTI4NS4zMDY4OSAxMDk0LjkyMzgsLTI4NC42NzI5NyBDIDEwOTMuMjkwNywtMjg1LjAwNjk5IDEwOTAuOTc1NiwtMjg1LjI4NTIgMTA4OC45ODYyLC0yODUuMTQxNzIgQyAxMDg1LjkyMjIsLTI4NC45MjA3NSAxMDg0LjAxODUsLTI4NC43OTk1MyAxMDgyLjA4LC0yODQuNjcyOTcgQyAxMDgwLjE0MTYsLTI4NC41NDY0MiAxMDgwLjM5MzksLTI4NC4yODQzMyAxMDc5LjE3MzgsLTI4NC4yMDQyMiBDIDEwNzcuODU0NywtMjg0LjExNzYyIDEwNzcuMzg2OSwtMjg0LjQyNzQ3IDEwNzMuNjExMiwtMjg0LjExMDQ3IEMgMTA3MC4wNjU1LC0yODMuODEyNzUgMTA2NC42MzA2LC0yODMuMTE3MyAxMDYzLjM5MjUsLTI4Mi40ODU0NyBDIDEwNjEuNzU5MSwtMjgyLjgxOTk4IDEwNTkuNDQ2NiwtMjgzLjA5Nzg2IDEwNTcuNDU1LC0yODIuOTU0MjIgQyAxMDU0LjM5MDgsLTI4Mi43MzMyNCAxMDUyLjQ4NzIsLTI4Mi41ODA3OCAxMDUwLjU0ODgsLTI4Mi40NTQyMiBDIDEwNDkuODg5NiwtMjgyLjQxMTE5IDEwNDkuNTA2NCwtMjgyLjMzMDI5IDEwNDkuMjA1LC0yODIuMjY2NzIgeiIKKyAgICAgICAgIGlkPSJwYXRoNzkzMyIgLz4KKyAgICAgIDxnCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg3NjE2KSIKKyAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3NjEwKTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBpZD0iZzc5MzUiCisgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NzU3MTIsLTYuOTY1NDI3N2UtMiw2Ljk2NTQyNzdlLTIsMC45OTc1NzEyLDg3Mi43MjA2MiwxNDAuMDI1MDIpIj4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3NzY3Njc3Njc3NzY2NzY3NzY2Nzc2Nzc3NjYyIKKyAgICAgICAgICAgaWQ9InBhdGg3OTM3IgorICAgICAgICAgICBkPSJNIDIyOS45NDI2MiwtNDA5LjEyMjY4IEMgMjI2LjM4NDgxLC00MDkuMDcyNjcgMjIwLjkxODQyLC00MDguNzYyNTkgMjE5LjYzOTI4LC00MDguMjE4NTQgQyAyMTguMDMzMTksLTQwOC42NjYwMSAyMTUuNzM2MTIsLTQwOS4wOTk4NSAyMTMuNzM5MzMsLTQwOS4wOTUyOCBDIDIxMC42NjczNCwtNDA5LjA4ODI2IDIwOC43NzQ2NCwtNDA5LjA4NjUxIDIwNi44MzIwNiwtNDA5LjA5NTI4IEMgMjA2LjE3MTU5LC00MDkuMDk4MjcgMjA1Ljc4NDQ3LC00MDkuMDI4MTEgMjA1LjQ3OTM5LC00MDguOTg1NjkgQyAyMDUuNDc5MzksLTQwOC45ODU2OSAyMDUuNDc5MzksLTQwNy44ODk3NiAyMDUuNDc5MzksLTQwNy44ODk3NiBDIDIwNS41OTkxMSwtNDA4LjA2OTIzIDIwNS44NzE5MSwtNDA4LjU4MDIyIDIwNi40MjkxNCwtNDA4LjY1NjkxIEMgMjA3LjE3NjcyLC00MDguNzU5OCAyMTEuNTk4NDIsLTQwOC44MDgxNCAyMTMuNzM5MzMsLTQwOC43NjY1MSBDIDIxNS41MTM5MywtNDA4LjczMTk4IDIxOC4xOTQ1NiwtNDA4LjQ5MjI0IDIyMC4xMjg1NCwtNDA3LjgwNzU2IEMgMjIwLjQ0OTk0LC00MDcuNjkzNzggMjIwLjc0Nzc5LC00MDcuNTMzNzggMjIxLjAyMDczLC00MDcuMzk2NTkgQyAyMjIuOTg0MTUsLTQwNi40MDk2NiAyMjguOTY0MDksLTQwMy4wOTUwNSAyMjguOTY0MDksLTQwMy4wOTUwNSBDIDIyOC45NjQwOSwtNDAzLjA5NTA1IDIyMi4zMzEzNCwtNDA3LjA0MjczIDIyMS40ODEyMiwtNDA3LjUzMzU4IEMgMjIxLjI3NzkxLC00MDcuNjUwOTcgMjIwLjkwNjU4LC00MDcuNzkxMjcgMjIwLjQ0NTEzLC00MDcuOTQ0NTYgQyAyMjEuNjY1NzYsLTQwOC4zOTIzNSAyMjUuNTIxMSwtNDA4LjU2NDI3IDIyOC4yNzMzNiwtNDA4LjY1NjkxIEMgMjMxLjI5Nzg2LC00MDguNzU4NzMgMjMxLjYyMTEyLC00MDguNzQ2NSAyMzMuNjg0MDUsLTQwOC40NjUxMiBDIDIzNS44MTMzNiwtNDA4LjE3NDY5IDIzNy4wMjI1NiwtNDA3Ljg2MjM2IDIzNy4wMjI1NiwtNDA3Ljg2MjM2IEMgMjM3LjAyMjU1LC00MDcuODYyMzYgMjM2Ljk0NDIsLTQwOC41MDM1NCAyMzguMDU4NjUsLTQwOC42NTY5MSBDIDIzOC44MDYyMiwtNDA4Ljc1OTggMjQzLjIyNzk0LC00MDguODA4MTQgMjQ1LjM2ODg0LC00MDguNzY2NTEgQyAyNDcuNDM4MzQsLTQwOC43MjYyNSAyNTAuNzM0ODksLTQwOC4zNTkzNSAyNTIuNjUwMjQsLTQwNy4zOTY1OSBDIDI1My42NTM1NiwtNDA2Ljg5MjI2IDI1NS42ODU4OCwtNDA1LjgyNzk2IDI1Ny40NDU1OSwtNDA0Ljg2MDg4IEwgMjU3LjU0MTIsLTQwNC44ODAzMSBDIDI1Ny41NDEyLC00MDQuODgwMzEgMjUzLjk2MDg2LC00MDcuMDQyNzMgMjUzLjExMDczLC00MDcuNTMzNTggQyAyNTIuOTA3NDIsLTQwNy42NTA5NyAyNTIuNTM2MSwtNDA3Ljc5MTI3IDI1Mi4wNzQ2NCwtNDA3Ljk0NDU2IEMgMjUzLjI5NTI2LC00MDguMzkyMzUgMjU3LjEyMTgzLC00MDguNTY0MjcgMjU5Ljg3NDA5LC00MDguNjU2OTEgQyAyNjIuODk4NTksLTQwOC43NTg3MyAyNjMuMjIxODQsLTQwOC43NDY1IDI2NS4yODQ3OCwtNDA4LjQ2NTEyIEMgMjY3LjIzNzk0LC00MDguMTk4NzIgMjY4LjI5NzcsLTQwNy45MzUwNiAyNjguNDc5MzksLTQwNy44ODk3NiBDIDI2OC40NzkzOSwtNDA3Ljg4OTc2IDI2OC40NTIzLC00MDguMjAxMjIgMjY4LjQ1MjMsLTQwOC4yMDEyMiBDIDI2OC4wNDMyNywtNDA4LjMzNzY3IDI2Ny43MzgwNiwtNDA4LjQzNDU3IDI2Ny4wNTE5MiwtNDA4LjU1ODcgQyAyNjUuNzUxMTEsLTQwOC43OTQwMyAyNjMuNjUyOCwtNDA5LjE2MDI2IDI2MS41NDMzNSwtNDA5LjEyMjY4IEMgMjU3Ljk3MTQsLTQwOS4wNTkwNCAyNTIuNDkwMDcsLTQwOC43NjY3MiAyNTEuMjQwMDEsLTQwOC4yMTg1NCBDIDI0OS42MzQxOCwtNDA4LjY2NTQ5IDI0Ny4zNjMzOSwtNDA5LjA5OTg0IDI0NS4zNjg4NCwtNDA5LjA5NTI4IEMgMjQyLjI5Njg1LC00MDkuMDg4MjYgMjQwLjM3NTM2LC00MDkuMDg2NTEgMjM4LjQzMjc5LC00MDkuMDk1MjggQyAyMzYuNDkwMjMsLTQwOS4xMDQwNiAyMzYuNzIwMTEsLTQwOC44MTYyMSAyMzUuNDk3MjEsLTQwOC44MjEzIEMgMjM0LjE3NTMsLTQwOC44MjY4IDIzMy43MzEwOSwtNDA5LjE3NTkzIDIyOS45NDI2MiwtNDA5LjEyMjY4IEMgMjI5Ljk0MjYyLC00MDkuMTIyNjggMjI5Ljk0MjYyLC00MDkuMTIyNjggMjI5Ljk0MjYyLC00MDkuMTIyNjgiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg3OTM5IgorICAgICAgICAgICBkPSJNIDIwNi4xOTg5LC00MDcuNDc4NzggQyAyMDguMTE5MTEsLTQwNi42NjE3MiAyMTAuNzc2MDUsLTQwNS4yODU5NSAyMTIuMzU3ODcsLTQwNC4wODEzOSBDIDIxMy45Mzk3MSwtNDAyLjg3NjgzIDIxNS4yNjU0NCwtNDAyLjMwNzcxIDIxNy45MTI0NiwtNDAwLjE2MzQ0IEMgMjE4Ljc5ODAzLC0zOTkuNDQ2MDYgMjE5LjY2MTExLC0zOTguODEzNTkgMjIwLjUwNDM5LC0zOTguMjQxNyBMIDIyMS4wNDQ5NiwtMzk4LjQzMTgxIEMgMjIwLjMzMTczLC0zOTguOTE1MiAyMTkuNTc3MiwtMzk5LjQ1MjEyIDIxOC43NzU4NywtNDAwLjA1Mzg0IEMgMjE1Ljk1MzY0LC00MDIuMTczMDUgMjE1LjE0OTMyLC00MDIuODYzNTcgMjEyLjc2MDgsLTQwNC4zMjc5OCBDIDIxMC4zNzIyNiwtNDA1Ljc5MjM4IDIwOC42NjEzMiwtNDA2LjY5Mzc0IDIwNi4xOTg5LC00MDcuNDc4NzggQyAyMDYuMTk4OSwtNDA3LjQ3ODc4IDIwNi4xOTg5LC00MDcuNDc4NzggMjA2LjE5ODksLTQwNy40Nzg3OCIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc2Njc3NjYyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg3OTQxIgorICAgICAgICAgICBkPSJNIDIzNy43OTk2MywtNDA3LjQ3ODc4IEMgMjM5LjcxOTg0LC00MDYuNjYxNzIgMjQyLjQwNTU3LC00MDUuMjg1OTUgMjQzLjk4NzM4LC00MDQuMDgxMzkgQyAyNDQuODAwNDUsLTQwMy40NjIyMyAyNDUuNTQ1ODcsLTQwMy4wMTA5NyAyNDYuNDM3ODQsLTQwMi40MjczOCBMIDI0Ny4wODY4NCwtNDAyLjU0NDA0IEMgMjQ2LjI4ODUzLC00MDMuMTIwNDEgMjQ1LjUxNTA3LC00MDMuNjM4MzkgMjQ0LjM5MDMxLC00MDQuMzI3OTggQyAyNDIuMDAxNzcsLTQwNS43OTIzOCAyNDAuMjYyMDUsLTQwNi42OTM3NCAyMzcuNzk5NjMsLTQwNy40Nzg3OCBDIDIzNy43OTk2MywtNDA3LjQ3ODc4IDIzNy43OTk2MywtNDA3LjQ3ODc4IDIzNy43OTk2MywtNDA3LjQ3ODc4IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY3NjYyIgLz4KKyAgICAgIDwvZz4KKyAgICAgIDxnCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg3NjA2KSIKKyAgICAgICAgIGlkPSJnNzk0MyI+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNzU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3NTc4KTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICAgIGQ9Ik0gMTA1Ni4yNSwtMjc4LjgwNDgxIEMgMTA2MC4zOTQ2LC0yODAuMjgzNTggMTA2Ni4yNSwtMjc1LjY3OTgxIDEwNjYuMjUsLTI3NS42Nzk4MSBDIDEwNjcuMTQ5LC0yNzUuMzk4ODkgMTA2OC45NzUxLC0yNzYuNTc0MjggMTA2OC44NzQzLC0yNzcuMzY1OTUgQyAxMDY4Ljg3NDMsLTI3Ny4zNjU5NSAxMDY3LjMyNCwtMjc5LjIyNjU3IDEwNjguNSwtMjgwLjMwNDgxIEMgMTA2OS42NzYsLTI4MS4zODMwNSAxMDczLjc5NiwtMjc4Ljc5NzQzIDEwNzYsLTI3OC42Nzk4MSBDIDEwNzguMjA0LC0yNzguNTYyMTkgMTA4MS41NjIxLC0yNzguOTA5MjIgMTA4MywtMjc5LjQyOTgxIEMgMTA4NC40Mzc5LC0yNzkuOTUwNCAxMDg0LjExMjksLTI4MC44NTQ0IDEwODUuNjI1LC0yODEuMTc5ODEgQyAxMDg3LjEzNzEsLTI4MS41MDUyMiAxMDkwLjc0MzksLTI4MC4xNDIyNyAxMDkyLjY4NTUsLTI4MC4wMTA5OCBDIDEwOTQuNjI3MSwtMjc5Ljg3OTY5IDEwOTcuMzMzNiwtMjc5LjY3NjcxIDEwOTguNSwtMjgwLjE3OTgxIEMgMTA5OS42NjY0LC0yODAuNjgyOTEgMTA5OC42NzgyLC0yODEuMzM5MDIgMTEwMC4zNzUsLTI4Mi4wNTQ4MSBDIDExMDIuMDcxOCwtMjgyLjc3MDYgMTEwOC4xMzUyLC0yODMuMDExNDMgMTExMCwtMjgyLjE3OTgxIEMgMTExMS44NjQ4LC0yODEuMzQ4MTkgMTExMS44MDk5LC0yODEuNjYwNjEgMTExMi42MjUsLTI3OS4xNzk4MSBDIDExMTMuNDQwMSwtMjc2LjY5OTAxIDExMjAuMDY0OCwtMjc0LjAxNjk2IDExMTEuNSwtMjY1LjgwNDgxIEMgMTEwMi45MzUyLC0yNTcuNTkyNjYgMTA1Mi4xMjIxLC0yNTIuMDE4ODcgMTA0NS44NzUsLTI2My4wNTQ4MSBDIDEwMzkuNjI3OSwtMjc0LjA5MDc1IDEwNTIuMTA1NCwtMjc3LjMyNjA0IDEwNTYuMjUsLTI3OC44MDQ4MSB6IgorICAgICAgICAgICBpZD0icGF0aDc5NDUiCisgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6enp6enp6IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzU5NCk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICBkPSJNIDEwNTguNSwtMjc1LjQyOTgxIEMgMTA2Mi42NDQ2LC0yNzYuOTA4NTggMTA2OC41LC0yNzIuMzA0ODEgMTA2OC41LC0yNzIuMzA0ODEgQyAxMDY5LjM5OSwtMjcyLjAyMzg5IDEwNzEuMjI1MSwtMjczLjE5OTI4IDEwNzEuMTI0MywtMjczLjk5MDk1IEMgMTA3MS4xMjQzLC0yNzMuOTkwOTUgMTA2OS41NzQsLTI3NS44NTE1NyAxMDcwLjc1LC0yNzYuOTI5ODEgQyAxMDcxLjkyNiwtMjc4LjAwODA1IDEwNzYuMDQ2LC0yNzUuNDIyNDMgMTA3OC4yNSwtMjc1LjMwNDgxIEMgMTA4MC40NTQsLTI3NS4xODcxOSAxMDgzLjgxMjEsLTI3NS41MzQyMiAxMDg1LjI1LC0yNzYuMDU0ODEgQyAxMDg2LjY4NzksLTI3Ni41NzU0IDEwODYuMzYyOSwtMjc3LjQ3OTQgMTA4Ny44NzUsLTI3Ny44MDQ4MSBDIDEwODkuMzg3MSwtMjc4LjEzMDIyIDEwOTIuOTkzOSwtMjc2Ljc2NzI3IDEwOTQuOTM1NSwtMjc2LjYzNTk4IEMgMTA5Ni44NzcxLC0yNzYuNTA0NjkgMTA5OS41ODM2LC0yNzYuMzAxNzEgMTEwMC43NSwtMjc2LjgwNDgxIEMgMTEwMS45MTY0LC0yNzcuMzA3OTEgMTEwMC45MjgyLC0yNzcuOTY0MDIgMTEwMi42MjUsLTI3OC42Nzk4MSBDIDExMDQuMzIxOCwtMjc5LjM5NTYgMTExMC4zODUyLC0yNzkuNjM2NDMgMTExMi4yNSwtMjc4LjgwNDgxIEMgMTExNC4xMTQ4LC0yNzcuOTczMTkgMTExNC4wNTk5LC0yNzguMjg1NjEgMTExNC44NzUsLTI3NS44MDQ4MSBDIDExMTUuNjkwMSwtMjczLjMyNDAxIDExMjIuMzE0OCwtMjcwLjY0MTk2IDExMTMuNzUsLTI2Mi40Mjk4MSBDIDExMDUuMTg1MiwtMjU0LjIxNzY2IDEwNTQuMzcyMSwtMjQ4LjY0Mzg3IDEwNDguMTI1LC0yNTkuNjc5ODEgQyAxMDQxLjg3NzksLTI3MC43MTU3NSAxMDU0LjM1NTQsLTI3My45NTEwNCAxMDU4LjUsLTI3NS40Mjk4MSB6IgorICAgICAgICAgICBpZD0icGF0aDc5NDciCisgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6enp6enp6IiAvPgorICAgICAgPC9nPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMTAxNDE0O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDYyOC4yNDU1MywzNDcuOTkxODUgQyA2MjQuNDQxMSwzMjIuNzI3NjIgNjExLjQzNTgxLDI5Ny4zNTM4MyA2MTEuMDg4NzMsMjcyLjQ2NjYyIEMgNjEwLjkwMjQ3LDI1OS4xMTExIDYxNC4zNjE1OCwyNDUuODk1NzEgNjI0Ljg0NDI2LDIzMi45MTI1NyBDIDY2MS4xOTEyOCwxNjcuNjE2NzQgNzQxLjc4NTE3LDE0OC4yMTc4OSA4MTAuNzc4OTIsMTQxLjQ0NzE1IEMgODk3LjcwMTMxLDEzMC40MzAzNSA5OTUuNjkxNTksMTU5LjM4NzIyIDEwNDQuMTUwMywyMzYuODQ4NDMgQyAxMDk4LjI3NDMsMzEyLjU4MTczIDExMDAuODI1LDQwOS4zODc1NSAxMTI0Ljc2MjMsNDk2LjM3NjM4IEMgMTE1NC4yMDAxLDYyMy41MDM5OCAxMTc5LjU0MTQsNzUyLjU5MDUyIDExODUuMTU0NSw4ODMuMjI2NzMgQyAxMTgyLjA5MTEsOTYxLjQwODU4IDExNzYuNzI4MiwxMDQ4LjQxMDkgMTEyNC42NTEzLDExMTEuMzYwOSBDIDEwNzYuNjI0OCwxMTYxLjcxODMgMTAwMS44NjQ5LDExNjEuNDEzOSA5MzcuNTgxNDUsMTE3MC4zNjMyIEMgODQ3LjAyNjA2LDExNzUuMDE4MiA3NTMuMjI5OTIsMTE1NC4yMTc0IDY3NS43OTc1NSwxMTA2LjE2NSBDIDYxMS4wMjE5MSwxMDY4LjIyNSA1ODAuMDY3MzYsOTkyLjY4NjMzIDU3OC41MTgxNSw5MjAuMTQ1MzggQyA1NzAuMTI4OTgsODQwLjI3MDIyIDYwNC45MDk2Nyw3NjYuMzM2ODcgNjMwLjEzODU1LDY5Mi45ODU3NyBDIDYzNy42MDkxNiw2MTAuMjI0NyA2MzkuNTUxNDEsNTI2LjczODAyIDYzOS43OTE4OSw0NDMuNjAwOTMgQyA2MzguOTU1MDcsNDExLjQwNTQ5IDYzMi43MDIzNiwzNzkuNzgzNiA2MjguMjQ1NTMsMzQ3Ljk5MTg1IHoiCisgICAgICAgaWQ9InBhdGg3OTQ5IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY2NjY2NjY2NjY2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg5NDApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAzMTEuODM0MDksNDE1LjQzMTU1IEwgMzIxLjczMzU5LDUzNy4wNTM5MiBMIDI2MS42Mjk1MSw2NzMuNTI1NTMgTCAyNzcuMTg1ODYsODQ4LjE4MDkgQyAyOTIuNzk5MTIsOTEwLjA2MDEgMzA5LjM3MTMxLDk0Ni44NDk5NSAzNTEuNTYyMDEsOTY1LjIzNDczIEMgMzU1Ljg4MTEyLDkyOC45OTQ3NSAzMTIuOTUwNDksODIyLjI3NDg1IDMxMi4zMTkzNyw3NzYuMTE0ODkgQyAzMTEuNjg3OTIsNzI5LjkzMDQ0IDMyMy4xNDk3MSw2NjcuNTA3MDMgMzQyLjk5NzA0LDYxNy44MTg0MiBDIDM2My4wNDUzOSw1NjcuNjI2NTQgMzc5Ljg5Mzc4LDU3Mi45NzIgMzg1LjEyMTkzLDUyNS4yMjU0OSBDIDM5MC4zNTAwOCw0NzcuNDc4OTggMzY3LjY5NTUzLDM3NS44MzM1NyAzNjcuNjk1NTMsMzc1LjgzMzU3IEwgMzExLjgzNDA5LDQxNS40MzE1NSB6IgorICAgICAgIGlkPSJwYXRoNzk1MSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2Njenp6Y2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODYxNikiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDg5NzApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDEwMTAuMDMxMiw2NTUuNDkxODYgQyAxMDEwLjAzMTIsNjU1LjQ5MTg2IDEwMjYuNzg2NCw2OTIuNTA5OTIgMTAzOC43MzI3LDcwOS40NDU4MSBDIDEwNTAuNjc4OSw3MjYuMzgxNyAxMDkxLjQ1OTgsNzY1LjQ5MTg2IDEwOTEuNDU5OCw3NjUuNDkxODYgTCAxMTQ0LjA1Nyw2MzcuOTAyMTEiCisgICAgICAgaWQ9InBhdGg3OTUzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMDc5OTk5OTg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODgyMik7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDczMC4zMTk5OCw1MzYuNTY4NjQgQyA3MzAuMzE5OTgsNTQ1LjA1MzkyIDc3Mi44Njc3Miw1OTUuMDM2NjcgNzcyLjg2NzcyLDU5NS4wMzY2NyBMIDc4NS40NzQzMSw1NjYuMjY3MTMgTCA3MzAuMzE5OTgsNTM2LjU2ODY0IHoiCisgICAgICAgaWQ9InBhdGg3OTU1IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MjA5KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8ZworICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MC4wMzEyNSw3My44NDM5NjQpIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGlkPSJnNzk1NyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOTk4KSI+CisgICAgICA8ZworICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE3NC4wMzEyNSw2Mi4xNTYwMzYpIgorICAgICAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjM2NzcpIgorICAgICAgICAgaWQ9Imc3OTU5Ij4KKyAgICAgICAgPGcKKyAgICAgICAgICAgaWQ9Imc3OTYxIgorICAgICAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyMzc4NSkiPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6enp6eiIKKyAgICAgICAgICAgICBpZD0icGF0aDc5NjMiCisgICAgICAgICAgICAgZD0iTSA0MjUuODgyNDQsNDc2Ljk5MTg2IEMgNDM2LjY4Nzg3LDQ3NS41MTMyIDQ1MC42MjY0NSw0ODAuMzQ2MzcgNDcwLjUyNTMsNDgwLjIwNjE0IEMgNDkwLjQyNDE1LDQ4MC4wNjU5MSA1MjcuOTc4NTIsNDYzLjI5NDkyIDU1Mi42NjgxNSw0NjMuMDYzMjggQyA1NzcuMzU3NzgsNDYyLjgzMTY0IDYxNS40MTk4NSw0NzUuMzQ3MzQgNjMxLjk1Mzg3LDQ3OC4wNjMyOCBDIDY0OC40ODc4OSw0ODAuNzc5MjIgNjU0LjgwMjE5LDQ3Ny45MDQ3NiA2NTkuNDUzODYsNDg1LjkyMDQzIEMgNjY0LjEwNTUzLDQ5My45MzYxIDY2MS4zODA1Nyw0OTYuNjY3NjcgNjQ5LjA5NjcyLDUwNi42MzQ3MiBDIDYzNi44MTI4Nyw1MTYuNjAxNzcgNjA4LjMwNzA0LDUxOS4yNzEwNCA1ODMuMDI1MjksNTE5LjQ5MTg2IEMgNTU3Ljc0Mjk1LDUxOS43MTI2OCA1MTIuNjQ0LDUyNi41NzAzOCA0ODcuNjY4MTUsNTIzLjQyMDQyIEMgNDYyLjY5MjMsNTIwLjI3MDQ2IDQzMC43MzA1OSw1MTUuNTk3NzUgNDE4LjczOTU4LDUwNS41NjMyOCBDIDQwNi43NDg1Nyw0OTUuNTI4ODEgMzk4Ljg4ODc0LDQ4OC44MzE0NiA0MDEuMjM5NTgsNDgxLjYzNDcxIEMgNDAzLjU5MDQyLDQ3NC40Mzc5NiA0MTUuMDc3MDEsNDc4LjQ3MDUyIDQyNS44ODI0NCw0NzYuOTkxODYgeiIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxyZWN0CisgICAgICAgICAgICAgeT0iNDEyLjYwMzEyIgorICAgICAgICAgICAgIHg9IjM0My42NTM5IgorICAgICAgICAgICAgIGhlaWdodD0iMTgxLjAxOTM1IgorICAgICAgICAgICAgIHdpZHRoPSIzODEuODM3NjUiCisgICAgICAgICAgICAgaWQ9InJlY3Q3OTY1IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgICAgPC9nPgorICAgICAgICA8ZworICAgICAgICAgICBpZD0iZzc5NjciCisgICAgICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXIzNzg1KSI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjYyIKKyAgICAgICAgICAgICBpZD0icGF0aDc5NjkiCisgICAgICAgICAgICAgZD0iTSA2ODcuMTQyODYsNDUyLjM2MjE4IEMgNjc2LjY4MTE3LDQ2Mi4wNzY2MSA2MDAuMTYzMjYsNDcxLjM2NzMyIDU4Ni40Mjg1Nyw0ODEuNjQ3OSBDIDU3Mi42OTM4OCw0OTEuOTI4NDggNTcxLjY3NjA1LDQ5NC41MzYxNiA1NzQuMjg1NzEsNTAxLjY0NzkgQyA1NzYuODk1MzcsNTA4Ljc1OTY0IDU4MC44MzA5OCw1MTEuMDUzNjIgNjAwLDUxMC4yMTkzMiBDIDYxOS4xNjkwMiw1MDkuMzg1MDIgNjk4LjU3MTQzLDQ4Mi41OTc2IDY5OC41NzE0Myw0ODguNzkwNzUgTCA2ODcuMTQyODYsNDUyLjM2MjE4IHoiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzQuMDMxMjUsLTYyLjE1NjAzNikiIC8+CisgICAgICAgICAgPHJlY3QKKyAgICAgICAgICAgICB5PSIzNDQuODIxMzgiCisgICAgICAgICAgICAgeD0iNzAyLjg2NDE0IgorICAgICAgICAgICAgIGhlaWdodD0iMTYyLjYzNDU1IgorICAgICAgICAgICAgIHdpZHRoPSIyMDcuODg5NCIKKyAgICAgICAgICAgICBpZD0icmVjdDc5NzEiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgICA8L2c+CisgICAgICA8L2c+CisgICAgICA8ZworICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE3NC4wMzEyNSw2Mi4xNTYwMzYpIgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4xODAwMDAwNDtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBpZD0iZzc5NzMiPgorICAgICAgICA8ZworICAgICAgICAgICBpZD0iZzc5NzUiCisgICAgICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXIzNzg1KSI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enp6enp6IgorICAgICAgICAgICAgIGlkPSJwYXRoNzk3NyIKKyAgICAgICAgICAgICBkPSJNIDQyNS44ODI0NCw0NzYuOTkxODYgQyA0MzYuNjg3ODcsNDc1LjUxMzIgNDUwLjYyNjQ1LDQ4MC4zNDYzNyA0NzAuNTI1Myw0ODAuMjA2MTQgQyA0OTAuNDI0MTUsNDgwLjA2NTkxIDUyNy45Nzg1Miw0NjMuMjk0OTIgNTUyLjY2ODE1LDQ2My4wNjMyOCBDIDU3Ny4zNTc3OCw0NjIuODMxNjQgNjE1LjQxOTg1LDQ3NS4zNDczNCA2MzEuOTUzODcsNDc4LjA2MzI4IEMgNjQ4LjQ4Nzg5LDQ4MC43NzkyMiA2NTQuODAyMTksNDc3LjkwNDc2IDY1OS40NTM4Niw0ODUuOTIwNDMgQyA2NjQuMTA1NTMsNDkzLjkzNjEgNjYxLjM4MDU3LDQ5Ni42Njc2NyA2NDkuMDk2NzIsNTA2LjYzNDcyIEMgNjM2LjgxMjg3LDUxNi42MDE3NyA2MDguMzA3MDQsNTE5LjI3MTA0IDU4My4wMjUyOSw1MTkuNDkxODYgQyA1NTcuNzQyOTUsNTE5LjcxMjY4IDUxMi42NDQsNTI2LjU3MDM4IDQ4Ny42NjgxNSw1MjMuNDIwNDIgQyA0NjIuNjkyMyw1MjAuMjcwNDYgNDMwLjczMDU5LDUxNS41OTc3NSA0MTguNzM5NTgsNTA1LjU2MzI4IEMgNDA2Ljc0ODU3LDQ5NS41Mjg4MSAzOTguODg4NzQsNDg4LjgzMTQ2IDQwMS4yMzk1OCw0ODEuNjM0NzEgQyA0MDMuNTkwNDIsNDc0LjQzNzk2IDQxNS4wNzcwMSw0NzguNDcwNTIgNDI1Ljg4MjQ0LDQ3Ni45OTE4NiB6IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHJlY3QKKyAgICAgICAgICAgICB5PSI0MTIuNjAzMTIiCisgICAgICAgICAgICAgeD0iMzQzLjY1MzkiCisgICAgICAgICAgICAgaGVpZ2h0PSIxODEuMDE5MzUiCisgICAgICAgICAgICAgd2lkdGg9IjM4MS44Mzc2NSIKKyAgICAgICAgICAgICBpZD0icmVjdDc5NzkiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgICA8L2c+CisgICAgICAgIDxnCisgICAgICAgICAgIGlkPSJnNzk4MSIKKyAgICAgICAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjM3ODUpIj4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emNjIgorICAgICAgICAgICAgIGlkPSJwYXRoNzk4MyIKKyAgICAgICAgICAgICBkPSJNIDY4Ny4xNDI4Niw0NTIuMzYyMTggQyA2NzYuNjgxMTcsNDYyLjA3NjYxIDYwMC4xNjMyNiw0NzEuMzY3MzIgNTg2LjQyODU3LDQ4MS42NDc5IEMgNTcyLjY5Mzg4LDQ5MS45Mjg0OCA1NzEuNjc2MDUsNDk0LjUzNjE2IDU3NC4yODU3MSw1MDEuNjQ3OSBDIDU3Ni44OTUzNyw1MDguNzU5NjQgNTgwLjgzMDk4LDUxMS4wNTM2MiA2MDAsNTEwLjIxOTMyIEMgNjE5LjE2OTAyLDUwOS4zODUwMiA2OTguNTcxNDMsNDgyLjU5NzYgNjk4LjU3MTQzLDQ4OC43OTA3NSBMIDY4Ny4xNDI4Niw0NTIuMzYyMTggeiIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3NC4wMzEyNSwtNjIuMTU2MDM2KSIgLz4KKyAgICAgICAgICA8cmVjdAorICAgICAgICAgICAgIHk9IjM0NC44MjEzOCIKKyAgICAgICAgICAgICB4PSI3MDIuODY0MTQiCisgICAgICAgICAgICAgaGVpZ2h0PSIxNjIuNjM0NTUiCisgICAgICAgICAgICAgd2lkdGg9IjIwNy44ODk0IgorICAgICAgICAgICAgIGlkPSJyZWN0Nzk4NSIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICAgIDwvZz4KKyAgICAgIDwvZz4KKyAgICA8L2c+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MDIpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA1ODIuNjU1OTksLTcuNDE4MzAxMSBMIDY5NS43OTMwNyw3OC44NDg3MjYgTCA4MDQuNjg3NTIsMzM3LjY0OTgxIEwgODQyLjg3MTI4LDU0NS41MzkyIEwgOTYzLjA3OTQ0LDYzNy40NjMwOCBDIDk2My4wNzk0NCw2MzcuNDYzMDggOTUwLjM1MTUxLDM1MC4zNzc3MyA5NDMuMjgwNDQsMzIzLjUwNzY3IEMgOTM2LjIwOTM4LDI5Ni42Mzc2MSA3OTMuMzczODEsLTY5LjY0MzY5OCA3OTMuMzczODEsLTY5LjY0MzY5OCBMIDU4Mi42NTU5OSwtNy40MTgzMDExIHoiCisgICAgICAgaWQ9InBhdGg3OTg3IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2MDQpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NzY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDg5NTgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDk2NC4xMzgzOSwyMzkuNTk5IEMgOTY0LjEzODM5LDIzOS41OTkgOTcyLjgxNTcxLDI1MC40OTU2MiA5ODguMjQ1NTQsMjUxLjU2MzI4IEMgMTAwMy42NzU0LDI1Mi42MzA5NCAxMDM3Ljk2NzIsMjExLjYxMDYxIDEwNTguNDI0MSwxOTkuNDIwNDMgQyAxMDc4LjkwMzQsMTg3LjIxNjkgMTEwNS40NzA1LDE3Mi44MTgxOCAxMTIyLjM1MjcsMTc5LjA2MzI5IEMgMTEzOS4yMzQ4LDE4NS4zMDgzOSAxMTQ0LjUxMDUsMjA1LjQ5OTM4IDExNTAuMjA5OCwyMjcuMDk5IEMgMTE1NS45MDkyLDI0OC42OTg2MSAxMTU2LjkyODQsMjg4LjkxMjg5IDExNDcuNTMxMywzMTkuOTU2MTUgQyAxMTM4LjEzNDEsMzUwLjk5OTQgMTA5Ny4wMjgsMzkzLjA1OTkgMTA4Mi4xNzQxLDQyMy4zNDkgQyAxMDY3LjMyMDIsNDUzLjYzODEgMTA3MC41NjcsNDYzLjE3MDQzIDEwNzAuNTY3LDQ2My4xNzA0MyIKKyAgICAgICBpZD0icGF0aDc5ODkiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6YyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzMxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDExMjQuNDk1NSwyMDcuNjM0NzEgQyAxMTA4LjYwMjcsMjA2Ljc0MTg1IDEwNzQuNzc2NywyMTkuNzQwNTQgMTA1OC40MjQxLDIzMS45MjA0MyBDIDEwNDEuOTg1NSwyNDQuMTY0MzMgMTAyOS4yMDMyLDI1Ni4wMzQ4MyAxMDI5LjEzODQsMjg0LjA2MzI4IEMgMTAyOS4wNzMyLDMxMi4yNjkzMiAxMDQyLjI1NzUsMzIzLjEzOTY5IDEwNTguMjQ1NSwzMzEuMDI3NTcgQyAxMDc0LjIzMzUsMzM4LjkxNTQ2IDEwOTEuOTMxNywzMzguMTQ2ODUgMTExMC4yMDk4LDMxOS4yNDE4NiBDIDExMjguNDg4LDMwMC4zMzY4NiAxMTI0LjQ5NTUsMjA3LjYzNDcxIDExMjQuNDk1NSwyMDcuNjM0NzEgeiIKKyAgICAgICBpZD0icGF0aDc5OTEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6emMiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC43NTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzNTQzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQxMjApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg3OTkzIgorICAgICAgIHNvZGlwb2RpOmN4PSIzODUiCisgICAgICAgc29kaXBvZGk6Y3k9IjIzNy4wMDUwNCIKKyAgICAgICBzb2RpcG9kaTpyeD0iODYuNDI4NTc0IgorICAgICAgIHNvZGlwb2RpOnJ5PSI3My45Mjg1NzQiCisgICAgICAgZD0iTSA0NzEuNDI4NTcsMjM3LjAwNTA0IEEgODYuNDI4NTc0LDczLjkyODU3NCAwIDEgMSAyOTguNTcxNDMsMjM3LjAwNTA0IEEgODYuNDI4NTc0LDczLjkyODU3NCAwIDEgMSA0NzEuNDI4NTcsMjM3LjAwNTA0IHoiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NDM0NzQ5LC0wLjEyMzk5NDMsMC4xNDQwMDg5LDEuMDk1NzY2OSw0NTEuOTQ4MjcsMTM0LjU5ODgpIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQxMDApIiAvPgorICAgIDxwYXRoCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTE1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA1MjcuNjA1ODgsNDA3LjQ0ODg0IEMgNTI3LjYwNTg4LDQwNy40NDg4NCA0MDUuNTY0NDQsNDQ1Ljg1MjMyIDM0MC4wOTE1NCw0MTcuMDgwNjUgQyAyNzQuNjE4NjUsMzg4LjMwODk5IDI2NS43MTQyOSwyOTIuMzYyMTggMjY1LjcxNDI5LDI5Mi4zNjIxOCBDIDI2NS43MTQyOSwyOTIuMzYyMTggMzM5LjA5NTg3LDIxMS44NTgyNSAzOTUuNjM1MDcsMjA4Ljc0NzQyIEMgNDUxLjQ2MjEyLDIwNS42NzU3OCA0ODYuMjA4OTMsMjI4Ljg5MDc0IDUxMC41MDUwOCwyNzQuNTk5MTMgQyA1MzQuODU3MDgsMzIwLjQxMjYxIDUyNy42MDU4OCw0MDcuNDQ4ODQgNTI3LjYwNTg4LDQwNy40NDg4NCB6IgorICAgICAgIGlkPSJwYXRoNzk5NSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY3p6YyIKKyAgICAgICBtYXNrPSJ1cmwoI21hc2szNjg0KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzk1OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNzcyLjE3NDExLDM5My4zNDkgQyA3NzIuMTc0MTEsMzkzLjM0OSA4MDguMzkxNjUsMzY1Ljk2NjUzIDgyMy43ODEyNSwzNTcuNDU2MTQgQyA4MzguOTU4NTksMzQ5LjA2MzEzIDg0OS40OTU1MywzNDUuODQ5IDg1OS42NzQxLDM0NS44NDkgTCA4NDQuMTM4MzksNDEyLjgxMzI4IgorICAgICAgIGlkPSJwYXRoNzk5NyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTMzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg3OTk5IgorICAgICAgIHNvZGlwb2RpOmN4PSI0MDkuMjg1NzEiCisgICAgICAgc29kaXBvZGk6Y3k9IjMwNi42NDc4OSIKKyAgICAgICBzb2RpcG9kaTpyeD0iMzYuMjUiCisgICAgICAgc29kaXBvZGk6cnk9IjM2LjI1IgorICAgICAgIGQ9Ik0gNDQ1LjUzNTcxLDMwNi42NDc4OSBBIDM2LjI1LDM2LjI1IDAgMSAxIDM3My4wMzU3MSwzMDYuNjQ3ODkgQSAzNi4yNSwzNi4yNSAwIDEgMSA0NDUuNTM1NzEsMzA2LjY0Nzg5IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDQ5LjQ5NTU0LDc0LjkxNTM5MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjM7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODgwNik7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDMxMS44MzQwOSw0MTUuNDMxNTUgTCAzMjEuNzMzNTksNTM3LjA1MzkyIEwgMjYxLjYyOTUxLDY3My41MjU1MyBMIDI3Ny4xODU4Niw4NDguMTgwOSBDIDI5Mi43OTkxMiw5MTAuMDYwMSAzMDkuMzcxMzEsOTQ2Ljg0OTk1IDM1MS41NjIwMSw5NjUuMjM0NzMgQyAzNTUuODgxMTIsOTI4Ljk5NDc1IDM2MC4yNDM2Miw4OTIuODY3MDkgMzIwLjMxOTM3LDc0Mi4xMTQ4OSBMIDMzNy45OTcwNCw2NzIuODE4NDIgTCA0MTAuMTIxOTMsNTM0LjIyNTQ5IEwgMzY3LjY5NTUzLDM3NS44MzM1NyBMIDMxMS44MzQwOSw0MTUuNDMxNTUgeiIKKyAgICAgICBpZD0icGF0aDgwMDEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2MTYpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MjYpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA2MzUuMjEwMjUsNTgxLjEzMDA0IEMgNjIxLjA2ODExLDU5My44NTc5NiA2NzQuNDQzNzIsNjE1LjcxMDE5IDcxMS41Nzc3OCw2MDUuMTcxNjcgQyA3NDguNzExODQsNTk0LjYzMzE1IDgxNi4yMjI2NSw1NjkuNjA3MyA4MTQuODE1MzcsNTI1Ljk3NTcxIEMgODEzLjQwODA5LDQ4Mi4zNDQxMyA3MzguNDQ3ODQsMzk3LjI4MjI4IDczOC40NDc4NCwzOTcuMjgyMjggTCA2MzUuMjEwMjUsNTgxLjEzMDA0IHoiCisgICAgICAgaWQ9InBhdGg4MDAzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTkxKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDA1IgorICAgICAgIHNvZGlwb2RpOmN4PSI0MTAiCisgICAgICAgc29kaXBvZGk6Y3k9IjMwNi42NDc4OSIKKyAgICAgICBzb2RpcG9kaTpyeD0iMjMuMjE0Mjg1IgorICAgICAgIHNvZGlwb2RpOnJ5PSIyMy4yMTQyODUiCisgICAgICAgZD0iTSA0MzMuMjE0MjgsMzA2LjY0Nzg5IEEgMjMuMjE0Mjg1LDIzLjIxNDI4NSAwIDEgMSAzODYuNzg1NzIsMzA2LjY0Nzg5IEEgMjMuMjE0Mjg1LDIzLjIxNDI4NSAwIDEgMSA0MzMuMjE0MjgsMzA2LjY0Nzg5IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDQ5LjY3NDExLDc0LjkxNTM5MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzOTgxKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGlkPSJwYXRoODAwNyIKKyAgICAgICBzb2RpcG9kaTpjeD0iNDE0LjI4NTcxIgorICAgICAgIHNvZGlwb2RpOmN5PSIzMDMuMDc2NDgiCisgICAgICAgc29kaXBvZGk6cng9IjcuNSIKKyAgICAgICBzb2RpcG9kaTpyeT0iNy41IgorICAgICAgIGQ9Ik0gNDIxLjc4NTcxLDMwMy4wNzY0OCBBIDcuNSw3LjUgMCAxIDEgNDA2Ljc4NTcxLDMwMy4wNzY0OCBBIDcuNSw3LjUgMCAxIDEgNDIxLjc4NTcxLDMwMy4wNzY0OCB6IgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MS45OTU1NCw3My40ODY4MjEpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MTEyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA3ODkuMzE2OTYsNDc4LjM0OSBDIDc4OS4zMTY5Niw0NzguMzQ5IDc5Ni4zMzk3Nyw0OTcuOTE3NTkgNzg4LjI0NTUzLDUxMy4zNDkgQyA3ODAuMTUxMjksNTI4Ljc4MDQxIDc0NS45MjIzNiw1NTIuMzM3MjIgNzIwLjc0NTU0LDU2My4zNDkgQyA2OTUuNDM1ODIsNTc0LjQxODkxIDYzNS4yNzI1NCw1OTYuMzEyOTMgNjE4Ljk1OTgyLDYwNS4zMTMyOCBDIDYwMi40OTgzNCw2MTQuMzk1NzEgNjAwLjc0NTU0LDYxNy45OTE4NSA2MDAuNzQ1NTQsNjE3Ljk5MTg1IEMgNjAwLjc0NTU0LDYxNy45OTE4NSA1OTMuNTk4NjEsNTk4LjkyNzQ0IDYyOS40OTU1Myw1NjYuMjA2MTUgQyA2NjUuNjY3NjQsNTMzLjIzNDAxIDc3MS41MjI2NSw1MTguMTU2NjUgNzg5LjMxNjk2LDQ3OC4zNDkgeiIKKyAgICAgICBpZD0icGF0aDgwMDkiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3pjIiAvPgorICAgIDxnCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgaWQ9Imc4MDExIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc4MC43NDU1Myw3NC41NTgyNSkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMjkuODE0ODEsMCkiCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOTk5KSIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y3p6enN6YyIKKyAgICAgICAgIGlkPSJwYXRoODAxMyIKKyAgICAgICAgIGQ9Ik0gMTc5LjY0Mjg2LDI2Ny4zNjIxOCBDIDE1Ny4yMzI0MiwzMDcuMDY1MSAxMTkuMDI2NzYsMzgzLjE0MjQ3IDExMC4zNTcxNSw0MTcuMDA1MDQgQyAxMDEuNzA5OTQsNDUwLjc4MDE0IDEwMS41ODUxNiw0ODMuNDIxNTggMTEwLDUwMy40MzM2MiBDIDExOC4zNjAyLDUyMy4zMTU3NSAxMzYuMTYzOTgsNTM5LjA2NjQyIDE1MC43MTQyOCw1NDQuODYyMTggQyAxNTAuMTE3OSw1MzAuNDg2MzEgMTY1LjA4NzIzLDUwMS41NzYzNSAyMjMuNTcxNDMsNDcyLjM2MjE4IEMgMjgyLjE5NzcsNDQzLjA3NzA0IDMwMS45NTMwNiw0NDUuMjMxMzIgMzI3LjE0Mjg1LDQyNS4yMTkzMiBDIDM1Mi43NzI5MSw0MDQuODU3NTYgMzM1LjM0ODcyLDM0NS41NzI2OCAzMzAuMzU3MTQsMzMxLjI5MDc1IEMgMzI1LjM2NTU2LDMxNy4wMDg4MiAzMjkuMTIwNTEsMzI3LjkxMTAxIDMyOC40MTExMiwzMjYuMTk3NzQgQyAzMTcuNzIxODQsMzAwLjM4MTgyIDI5NC4xOTY4LDI3MS43Njc0NCAyNjMuOTI4NTcsMjYxLjY0NzkgQyAyMzMuNjYwMzQsMjUxLjUyODM2IDE5OC45MTA4MSwyNTYuNzk5NTMgMTc5LjY0Mjg2LDI2Ny4zNjIxOCB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzNTg1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg4MjM4NzQsMC40NzA1MjM2LC0wLjQ3MDUyMzYsMC44ODIzODc0LC0xNjYuNjIyNDUsMi4zODczNjIpIgorICAgICAgICAgZD0iTSAyNDguMjg3MzEsMzM4LjA3NjQ4IEEgNjQuNzE1ODgxLDEzNC4wMDYwNyAwIDEgMSAxMTguODU1NTUsMzM4LjA3NjQ4IEEgNjQuNzE1ODgxLDEzNC4wMDYwNyAwIDEgMSAyNDguMjg3MzEsMzM4LjA3NjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMTM0LjAwNjA3IgorICAgICAgICAgc29kaXBvZGk6cng9IjY0LjcxNTg4MSIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSIzMzguMDc2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iMTgzLjU3MTQzIgorICAgICAgICAgaWQ9InBhdGg4MDE1IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDYwKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46YmV2ZWw7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg4MjM4NzQsMC40NzA1MjM2LC0wLjQ3MDUyMzYsMC44ODIzODc0LC0xNjIuMTkzODgsLTE4Ljc1NTQ5NSkiCisgICAgICAgICBkPSJNIDI0OC4yODczMSwzMzguMDc2NDggQSA2NC43MTU4ODEsMTM0LjAwNjA3IDAgMSAxIDExOC44NTU1NSwzMzguMDc2NDggQSA2NC43MTU4ODEsMTM0LjAwNjA3IDAgMSAxIDI0OC4yODczMSwzMzguMDc2NDggeiIKKyAgICAgICAgIHNvZGlwb2RpOnJ5PSIxMzQuMDA2MDciCisgICAgICAgICBzb2RpcG9kaTpyeD0iNjQuNzE1ODgxIgorICAgICAgICAgc29kaXBvZGk6Y3k9IjMzOC4wNzY0OCIKKyAgICAgICAgIHNvZGlwb2RpOmN4PSIxODMuNTcxNDMiCisgICAgICAgICBpZD0icGF0aDgwMTciCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwNjIpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyMC43OTk5OTkyNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMjkuODE0ODEsM2UtNykiCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOTk5KSIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y3p6enN6YyIKKyAgICAgICAgIGlkPSJwYXRoODAxOSIKKyAgICAgICAgIGQ9Ik0gMTc5LjY0Mjg2LDI2Ny4zNjIxOCBDIDE1Ny4yMzI0MiwzMDcuMDY1MSAxMTkuMDI2NzYsMzgzLjE0MjQ3IDExMC4zNTcxNSw0MTcuMDA1MDQgQyAxMDEuNzA5OTQsNDUwLjc4MDE0IDEwMS41ODUxNiw0ODMuNDIxNTggMTEwLDUwMy40MzM2MiBDIDExOC4zNjAyLDUyMy4zMTU3NSAxMzYuMTYzOTgsNTM5LjA2NjQyIDE1MC43MTQyOCw1NDQuODYyMTggQyAxNTAuMTE3OSw1MzAuNDg2MzEgMTY1LjA4NzIzLDUwMS41NzYzNSAyMjMuNTcxNDMsNDcyLjM2MjE4IEMgMjgyLjE5NzcsNDQzLjA3NzA0IDMwMS45NTMwNiw0NDUuMjMxMzIgMzI3LjE0Mjg1LDQyNS4yMTkzMiBDIDM1Mi43NzI5MSw0MDQuODU3NTYgMzM1LjM0ODcyLDM0NS41NzI2OCAzMzAuMzU3MTQsMzMxLjI5MDc1IEMgMzI1LjM2NTU2LDMxNy4wMDg4MiAzMjkuMTIwNTEsMzI3LjkxMTAxIDMyOC40MTExMiwzMjYuMTk3NzQgQyAzMTcuNzIxODQsMzAwLjM4MTgyIDI5NC4xOTY4LDI3MS43Njc0NCAyNjMuOTI4NTcsMjYxLjY0NzkgQyAyMzMuNjYwMzQsMjUxLjUyODM2IDE5OC45MTA4MSwyNTYuNzk5NTMgMTc5LjY0Mjg2LDI2Ny4zNjIxOCB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzNTg3KTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI0MDc5KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9nPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46YmV2ZWw7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBpZD0icGF0aDgwMjEiCisgICAgICAgc29kaXBvZGk6Y3g9IjMxMC43MTQyOSIKKyAgICAgICBzb2RpcG9kaTpjeT0iMzk4LjA3NjQ4IgorICAgICAgIHNvZGlwb2RpOnJ4PSIxOS43MDQxMzIiCisgICAgICAgc29kaXBvZGk6cnk9IjE5LjcwNDEzMiIKKyAgICAgICBkPSJNIDMzMC40MTg0MywzOTguMDc2NDggQSAxOS43MDQxMzIsMTkuNzA0MTMyIDAgMSAxIDI5MS4wMTAxNiwzOTguMDc2NDggQSAxOS43MDQxMzIsMTkuNzA0MTMyIDAgMSAxIDMzMC40MTg0MywzOTguMDc2NDggeiIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NTIuNTU2NjMsNzIuNTgxMjczKSIgLz4KKyAgICA8cGF0aAorICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwNTYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NDA4Mik7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQwODMpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDIzIgorICAgICAgIHNvZGlwb2RpOmN4PSIzMTAuNzE0MjkiCisgICAgICAgc29kaXBvZGk6Y3k9IjM5OC4wNzY0OCIKKyAgICAgICBzb2RpcG9kaTpyeD0iMTkuNzA0MTMyIgorICAgICAgIHNvZGlwb2RpOnJ5PSIxOS43MDQxMzIiCisgICAgICAgZD0iTSAzMzAuNDE4NDMsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAyOTEuMDEwMTYsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAzMzAuNDE4NDMsMzk4LjA3NjQ4IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjU1NjYzLDcyLjU4MTI3MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MTE5KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDI1IgorICAgICAgIHNvZGlwb2RpOmN4PSIzMTAuNzE0MjkiCisgICAgICAgc29kaXBvZGk6Y3k9IjM5OC4wNzY0OCIKKyAgICAgICBzb2RpcG9kaTpyeD0iMTkuNzA0MTMyIgorICAgICAgIHNvZGlwb2RpOnJ5PSIxOS43MDQxMzIiCisgICAgICAgZD0iTSAzMzAuNDE4NDMsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAyOTEuMDEwMTYsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAzMzAuNDE4NDMsMzk4LjA3NjQ4IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjU1NjYzLDcyLjU4MTI3MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0ODY4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NHB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQwMDIpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDI3IgorICAgICAgIHNvZGlwb2RpOmN4PSI0MjkuNTY3MzgiCisgICAgICAgc29kaXBvZGk6Y3k9IjM3Ny40Mjg3NyIKKyAgICAgICBzb2RpcG9kaTpyeD0iNzIuMDc5NzM1IgorICAgICAgIHNvZGlwb2RpOnJ5PSI0NC41NDc3MjYiCisgICAgICAgZD0iTSA1MDEuNjQ3MTIsMzc3LjQyODc3IEEgNzIuMDc5NzM1LDQ0LjU0NzcyNiAwIDEgMSAzNTcuNDg3NjUsMzc3LjQyODc3IEEgNzIuMDc5NzM1LDQ0LjU0NzcyNiAwIDEgMSA1MDEuNjQ3MTIsMzc3LjQyODc3IHoiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTY5NTY0LC03Ljc5NjE2NzVlLTIsNy43OTYxNjc1ZS0yLDAuOTk2OTU2NCw0MzYuNjE4NzcsMTI1LjI5NTA5KSIKKyAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9Ii00Ny4yMzE5NzYiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItMy42OTM1MDc5IiAvPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NDg3Nik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5OTRweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI0MDEwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGlkPSJwYXRoODAyOSIKKyAgICAgICBzb2RpcG9kaTpjeD0iNDM3LjY5OTEiCisgICAgICAgc29kaXBvZGk6Y3k9IjM5MS4yMTczNSIKKyAgICAgICBzb2RpcG9kaTpyeD0iMzYuNjExOTMxIgorICAgICAgIHNvZGlwb2RpOnJ5PSIyMi42Mjc0MTciCisgICAgICAgZD0iTSA0NzQuMzExMDMsMzkxLjIxNzM1IEEgMzYuNjExOTMxLDIyLjYyNzQxNyAwIDEgMSA0MDEuMDg3MTcsMzkxLjIxNzM1IEEgMzYuNjExOTMxLDIyLjYyNzQxNyAwIDEgMSA0NzQuMzExMDMsMzkxLjIxNzM1IHoiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS40MzU3OTUxLC02Ljk5OTEwMzdlLTIsNi45OTkxMDM3ZS0yLDEuNDM1Nzk1MSwyMzUuMTgwNjUsLTYzLjg2NTQ2KSIKKyAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9Ii0yMC45NTU5MDIiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItMTMuMDU2NjI1IiAvPgorICAgIDxnCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgaWQ9Imc4MDMxIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDA1Myk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBkPSJNIDQxNi44NzQ5OSw0MDEuODI2NDggQSAzLjIxNDI4NTYsMy4yMTQyODU2IDAgMSAxIDQxMC40NDY0Miw0MDEuODI2NDggQSAzLjIxNDI4NTYsMy4yMTQyODU2IDAgMSAxIDQxNi44NzQ5OSw0MDEuODI2NDggeiIKKyAgICAgICAgIHNvZGlwb2RpOnJ5PSIzLjIxNDI4NTYiCisgICAgICAgICBzb2RpcG9kaTpyeD0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6Y3k9IjQwMS44MjY0OCIKKyAgICAgICAgIHNvZGlwb2RpOmN4PSI0MTMuNjYwNzEiCisgICAgICAgICBpZD0icGF0aDgwMzMiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDQ0ODQpO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy4xMjUwMDksOC4xMjQ5OTEzKSIKKyAgICAgICAgIGQ9Ik0gNDE2Ljg3NDk5LDQwMS44MjY0OCBBIDMuMjE0Mjg1NiwzLjIxNDI4NTYgMCAxIDEgNDEwLjQ0NjQyLDQwMS44MjY0OCBBIDMuMjE0Mjg1NiwzLjIxNDI4NTYgMCAxIDEgNDE2Ljg3NDk5LDQwMS44MjY0OCB6IgorICAgICAgICAgc29kaXBvZGk6cnk9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOnJ4PSIzLjIxNDI4NTYiCisgICAgICAgICBzb2RpcG9kaTpjeT0iNDAxLjgyNjQ4IgorICAgICAgICAgc29kaXBvZGk6Y3g9IjQxMy42NjA3MSIKKyAgICAgICAgIGlkPSJwYXRoODAzNSIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NDQ4Nik7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjk0NjQzNyw3LjQ5OTk5MTMpIgorICAgICAgICAgZD0iTSA0MTYuODc0OTksNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTAuNDQ2NDIsNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTYuODc0OTksNDAxLjgyNjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6cng9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSI0MDEuODI2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNDEzLjY2MDcxIgorICAgICAgICAgaWQ9InBhdGg4MDM3IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0NDg4KTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQuOTEwNzIzLC0xMC4yNjc4NjYpIgorICAgICAgICAgZD0iTSA0MTYuODc0OTksNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTAuNDQ2NDIsNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTYuODc0OTksNDAxLjgyNjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6cng9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSI0MDEuODI2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNDEzLjY2MDcxIgorICAgICAgICAgaWQ9InBhdGg4MDM5IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0NDkwKTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDcuNTg5Mjk0LC0wLjYyNTAwODcpIgorICAgICAgICAgZD0iTSA0MTYuODc0OTksNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTAuNDQ2NDIsNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTYuODc0OTksNDAxLjgyNjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6cng9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSI0MDEuODI2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNDEzLjY2MDcxIgorICAgICAgICAgaWQ9InBhdGg4MDQxIgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0NDkyKTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CisgICAgPC9nPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDg5Ni4yMDMwMSw0ODIuOTI4MzcgQyA4OTcuMTg4MSw0ODcuMjc4NDUgOTAwLjc0MDA4LDQ4OS4xMDc4NSA5MDMuNTg5NzQsNDkwLjgyMDE5IEMgOTA4LjA1MDQyLDQ5My4zMzMxMSA5MTAuMTA5OSw0OTIuMzQyMyA5MTIuNzQ0MjUsNDkwLjA2MjU4IEMgOTE0LjM0NjIsNDg4LjE0MTQxIDkyMy40MjczNiw0ODUuMzYzOTMgOTI4LjMzODQ4LDQ4Mi45OTE1MSBDIDkzMi42NjgwOSw0ODEuNTMyNiA5MzcuMjQxNzgsNDc3LjYzMjc4IDk0MS43MjMsNDc0LjY1Nzc1IEMgOTQ1LjExODE0LDQ3My4wMzA1MSA5NDcuMDY5NjQsNDc1LjAxMjM5IDk0OS41NTE2OCw0NzUuNjY3OSBDIDk1Mi40OTU4LDQ3Ni4zODQ1MSA5NTMuOTYyODUsNDc3LjgzOTY1IDk1NS42MTI2LDQ3OS4yMDM0NCBDIDk1OC4wMDg3Niw0ODAuMzc4NjMgOTU0LjY4NDcsNDgyLjM0NjU3IDk1OC44OTU2LDQ4My40OTY1OCBDIDk2MC4wODY1MSw0ODMuNzE0NTIgOTYxLjMxMjU1LDQ4NC4wNzMwMyA5NjIuMTc4NTksNDgyLjk5MTUxIgorICAgICAgIGlkPSJwYXRoODA0MyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA5MTAuODUwMjEsNDc1LjM1MjIzIEMgOTEzLjE2NTE1LDQ3NS4zMjAyNSA5MTQuMDI3OTksNDc1Ljk5NDc2IDkxNi4zNDI5Miw0NzQuNTMxNDggQyA5MTkuNzk4NTYsNDcxLjQ1MDM1IDkyMS43NDU0Niw0NzEuMzg2NzEgOTI0LjI5Nzg3LDQ3MC4xMTIwNiBDIDkyNy4zMjQ0NCw0NjguNzk2ODMgOTMwLjgzMzU3LDQ3OC4yNjM3NSA5MzQuMzk5NCw0NzkuOTYxMDUgQyA5MzYuNzk0NDksNDc5LjEzOTYzIDkzNS42ODg1NCw0ODEuNzU0ODQgOTM1Ljg1MTQ5LDQ4Mi42MTI3IEMgOTM1LjkwODYyLDQ4NS4yNTk1NCA5MzguNjU4NDMsNDg2LjI5MDc2IDk0MC4yMDc3Nyw0ODguMDQyMjcgQyA5NDMuNTIzODEsNDkwLjI5Nzc2IDk0Ny41ODMsNDk0LjMzNzczIDk1MS4zMTk0NSw0OTMuMzQ1NTcgQyA5NTcuNzY0Nyw0OTAuNDE0NSA5NjEuNTk4NjcsNDkyLjA2NDExIDk2Ny42MDgxNiw0ODUuOTU4ODMgQyA5NjguMzEyMjEsNDg0Ljc3NzQ5IDk2Ny4wMjM5MSw0NzkuMDY0MjMgOTcwLjcwMTc1LDQ3OC43NjE0OSBDIDk3My4yMjU3NCw0NzkuMDE0ODcgOTc0Ljg2ODQyLDQ3OC44MTE2NCA5NzYuNzYyNjcsNDc5LjMyOTcxIEMgOTgyLjIwMzY3LDQ4MS40NDY5IDk4NC41MDA0NSw0ODUuNzc5NzEgOTkxLjQ3MzAxLDQ4Ny4yODQ2NiBDIDk5Ny42NTU5MSw0ODguMjUxMDUgOTk5LjA4NTY1LDQ5MS4wNzg5MiAxMDA1LjM2MjYsNDkyLjMzNTQyIgorICAgICAgIGlkPSJwYXRoODA0NSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA4NzYuOTgxMzMsNDgzLjUyMTk3IEMgODc5LjM3OTkxLDQ4Mi43MjgxNyA4ODMuMDg3NDYsNDg3LjcxNDA3IDg4NS4xNTQ0Niw0OTAuNTY3NjUgQyA4ODUuNzQ3MjcsNDkzLjI0NzE3IDg4Ni4zMDgyMyw0OTYuMDU0MSA4ODUuOTEyMDcsNTAyLjY4OTQ4IEMgODg2LjY5NzIsNTA1LjEwNzAyIDg4OC41OTI1Niw1MDUuNzIwNDMgODkwLjcxMDMsNTA1Ljk3MjQ4IEMgODkzLjgyNzc1LDUwNS40MzU3IDg5Ni41ODY5OSw1MDQuNjQ4MTggODk4LjAzMzksNTAyLjk0MjAyIEMgODk5LjkwNTUsNTAxLjAwMDM1IDkwMy4zNDY0Myw1MDUuMzM1OTYgOTA2LjExNTEyLDUwNi45ODI2MyBDIDkwOS43MjUyMSw1MDguODk0NzIgOTEzLjg4ODksNTA4Ljk2MTQ5IDkxNy45ODQ0Miw1MDkuMjU1NDcgQyA5MTkuNjg4LDUwOS4wMjQ4MyA5MjAuMzU0ODIsNTEzLjc3MDYyIDkyMS4yNjc0MSw1MTcuMzM2NyBDIDkyMS42NTE1NSw1MjEuNzE0NzYgOTIwLjM4MTk3LDUyNC4yMzIzOSA5MTkuNDk5NjUsNTI3LjE4NTY4IEMgOTE5LjIwNTM1LDUyOS42ODIyMyA5MjIuNDg4MTUsNTMwLjcxNTQyIDkyNS44MTMxLDUzMS43MzEzNyBDIDkyOC45OTU1NCw1MzIuNDcyNjEgOTMyLjM1NzM0LDUzMy4zOTMyMSA5MzQuOTA0NDcsNTMzLjQ5OTE0IEMgOTQwLjA0NjMzLDUzNC4zNzQwNSA5NDIuOTkzMjEsNTM2LjE4OTY2IDk0Ny4wMjYzLDUzNy41Mzk3NSBDIDk0OS4yNjU0NCw1MzguMzU2MyA5NTAuMjg2NDksNTM5Ljc4MTkxIDk1MS41NzE5OSw1NDEuMDc1MjgiCisgICAgICAgaWQ9InBhdGg4MDQ3IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI4ODE0KTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSAzMzIsMTg3LjY5NTE5IEMgMzMyLDE4Ny42OTUxOSAzODkuNSwxNjIuMTk1MTkgMzg5LjUsMTU5LjY5NTE5IEMgMzg5LjUsMTU3LjE5NTE5IDM5NSwxMDcuNjk1MTkgMzk1LDEwNy42OTUxOSBDIDM5NSwxMDcuNjk1MTkgNDg2LDU5LjE5NTE4OSA0ODYuNSw1Ny4xOTUxODkgQyA0ODcsNTUuMTk1MTg5IDU3Mi41LC00LjgwNDgxMTQgNTcyLjUsLTQuODA0ODExNCBMIDM4Ni41LDE3LjE5NTE4OSBMIDMxMSwxMjMuMTk1MTkgTCAzMzIsMTg3LjY5NTE5IHoiCisgICAgICAgaWQ9InBhdGg4MDQ5IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg1MTQpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gMTY5Ny4yODQ2LDcyMi41NTE0IEMgMTY5Ny4yODQ2LDcyMi41NTE0IDE1ODEuMzE5MSw3OTYuMDkwNSAxNTc0LjI0ODEsODAwLjMzMzE0IEMgMTU2Ny4xNzcsODA0LjU3NTc4IDEzNDMuNzMxMiw5MzcuNTExODYgMTM0My43MzEyLDkzNy41MTE4NiBMIDEzNDcuOTczOSw5NzcuMTA5ODQgTCAxNTY0LjM0ODYsODc2LjcwMDY3IEwgMTY4MS43MjgzLDc3NC44NzczIEwgMTY5Ny4yODQ2LDcyMi41NTE0IHoiCisgICAgICAgaWQ9InBhdGg4MDUxIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MTApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA1MjguOTE1ODcsNTU2Ljg1MjkxIEMgNTIzLjI1OTAyLDU1NS40Mzg3IDM0Ny44OTY1NCw2MzEuODA2MjMgMzQ3Ljg5NjU0LDYzMS44MDYyMyBMIDMxMy45NTU0MSw4MTIuODI1NTcgTCAzNjUuMDUwODcsMTAwNi43NzM4IEwgNjIyLjI1Mzk3LDEwNzQuNDU1MSBDIDYyMi4yNTM5NywxMDc0LjQ1NTEgODI4LjcyOTE1LDEyMjcuMTkwMSA4MzQuMzg2LDEyMjIuOTQ3NSBDIDg0MC4wNDI4NiwxMjE4LjcwNDkgMTAwMi42Nzc0LDEwMjkuMjAwMiAxMDAyLjY3NzQsMTAyOS4yMDAyIEwgODQyLjg3MTI4LDg0NS4zNTI0OCBMIDc5Ni4yMDIyNCw2NjcuMTYxNTcgTCA1MjguOTE1ODcsNTU2Ljg1MjkxIHoiCisgICAgICAgaWQ9InBhdGg4MDUzIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2MTApIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NzY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMGMwYzBjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSAxMDk3LjY0MzMsNjEzLjg4OTk3IEMgMTA5Ny42NDMzLDYxMy44ODk5NyAxMTIwLjI2MjgsNjA3LjM4MzE2IDExMzMuMzg2LDYwOC4wMTcyNCBDIDExNDYuNTA5Myw2MDguNjUxMzMgMTE2NC4wMjc2LDYwOS45NTU4NiAxMTc3LjA5NDksNjIwLjIwMzQzIEMgMTE5MC4xNjIyLDYzMC40NTA5OSAxMjAyLjE2MjYsNjQ3LjM0MzUgMTIxMS4yMDczLDY3OC41NzMwOCBDIDEyMjAuMjUxOSw3MDkuODAyNjYgMTIxMi45MDU2LDc3Ny44MjUwOSAxMjA1LjAzMTIsODIxLjkyMDQzIEMgMTE5Ny4xNTY5LDg2Ni4wMTU3NyAxMTc2Ljc2NjEsOTI4LjAzMzQxIDExNjAuMDMxMiw5NjEuOTIwNDMgQyAxMTQzLjI5NjQsOTk1LjgwNzQ1IDExMTAuMjMzNSwxMDM5LjQxNTYgMTA5OS40NjE4LDEwNTEuNzk2NiBDIDEwODguMDk3NiwxMDY0Ljg1ODYgMTA0My4yNTU5LDEwODguMjIyOCAxMDIwLjAzMTIsMTA5NC4wNjMzIEMgMTAyNS4zMzQ2LDEwODMuNDU2NyAxMDY4LjkzMSwxMDQzLjQ3NDQgMTA1NS4wMzEyLDEwMzMuMzQ5IEMgMTA0MS4wMTIzLDEwMjMuMTM2NyAxMDA5LjI3MTIsMTA3OS4zMzE0IDk3MC43MzgxLDEwNjIuMzgyMiBDIDk5Mi4xMjA0MSwxMDQ5LjI1MDEgMTAxMi41MTc1LDEwMTEuMTk2MSAxMDA0Ljc3ODcsOTk1Ljc4NzcyIEMgOTk2LjkzODQ2LDk4MC4xNzczMyA5NzQuMDczNzgsMTA0NC41NDUzIDkxMS4yNDMxNywxMDMyLjgwMDYgQyA5NDEuMjk1MjEsMTAwNS4yNzM5IDk2Ni42NTAyMyw5NjEuODk2NTkgOTUyLjUwNTg3LDk0OS44MjA5IEMgOTM4LjA5MDcxLDkzNy41MTQwMyA4OTIuMDQ0MTIsMTAwNC4xMTQxIDg5Mi4wNDQxMiwxMDA0LjExNDEgQyA4OTIuMDQ0MTIsMTAwNC4xMTQxIDg4OS4yMjIyMiw5NjIuNDEyODcgOTA1LjgxNzMyLDkzNS41MDY3MyBDIDkyMi40NTY2Nyw5MDguNTI4ODYgOTg1LjQ3MDI5LDg1My44OTE0NiAxMDA1LjM3MDQsODIzLjgwMzMxIEMgMTAyNS4yNzA2LDc5My43MTUxNyAxMDM4Ljk4Myw3NTcuNzk0MjkgMTA0Ny41MDU5LDczMS4yODUzNyBDIDEwNTYuMDI4Nyw3MDQuNzc2NDUgMTA2My4zMDY4LDY1NC4xODU4MyAxMDYzLjMwNjgsNjU0LjE4NTgzIgorICAgICAgIGlkPSJwYXRoODA1NSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjemN6Y3pjenp6YyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODgxOCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDc3MC43NDYzOSw2MDkuMTc4ODEgTCA3MTkuODM0Nyw3MDYuNzU5NTUgTCA2MzkuOTMxNjMsODE3Ljc3NTMxIEwgNjc0LjU3OTg3LDg4OS4xOTMwOSBMIDcxNy4wMDYyOCw5NjguMzg5MDYgTCA3ODkuMTMxMTcsOTIzLjEzNDIyIEwgODAzLjI3MzMxLDczMC44MDExNyBMIDgyNC40ODY1MSw1OTIuMjA4MjUgTCA4MTAuMzQ0MzcsNTAyLjA1MjEzIEwgNzcwLjc0NjM5LDYwOS4xNzg4MSB6IgorICAgICAgIGlkPSJwYXRoODA1NyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4NjIyKSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MTApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAyOTUsODQ2LjE5NTE5IEwgMzAxLjY0NDg4LDc3Ny4yNzIzNCBDIDMwMS42NDQ4OCw3NzcuMjcyMzQgMzkxLjk2NDM5LDg2Ni4yNzY5MSA0NjQsOTAwLjE5NTE5IEMgNTM2LjAzNTYxLDkzNC4xMTM0NyA3NzIsOTYyLjE5NTE5IDc3Miw5NjIuMTk1MTkgTCA5MjYsOTM2LjE5NTE5IEwgODkwLDEwOTguMTk1MiBMIDYwNCwxMTI0LjE5NTIgTCAzMDYsMTAzNS4xOTUyIEwgMjk1LDg0Ni4xOTUxOSB6IgorICAgICAgIGlkPSJwYXRoODA1OSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4OTA2KSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjemNjY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MC4wMzEyNSw3My44NDM5NjQpIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzNTg3KTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA0MDUuNzk2MjksODQ1Ljk5MDIzIEwgNDgwLjc0OTYxLDkxMS4wNDQwNiBMIDQ4My4yNDkyNCw5MjcuOTI0NDYgTCA1MDIuNjUyNiw5MzguMDgzMzcgTCA1MDkuMTQ0NjQsOTYxLjEzNDQ2IEwgNTQwLjg1MzY5LDk1Mi43NjMzNiBMIDU1NS43MDI5MywxMDAwLjg0NjYgQyA1NjcuOTU5NDUsMTAxMy41NzQ1IDY0NS40OTYzNyw4ODcuNzM2OSA2MTEuNTY0MzYsMTAzOS4wMzA0IEwgNTUwLjc1MzE4LDEwNTUuMjkzOSBMIDQ2MS41NTAyNiw5NjAuNjAxMDQgTCAzOTguNzI1MjMsOTA2LjgwMTQxIEwgNDA1Ljc5NjI5LDg0NS45OTAyMyB6IgorICAgICAgIGlkPSJwYXRoODA2MSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjYyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjAyKSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMTIxMjEyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDExNTkuMzE3LDkxOC4zNDkgQyAxMjEzLjYwMjcsOTE2LjkyMDQzIDEyODUuMzUyLDkwMy4yOTcwMSAxMzI5LjMxNyw4OTEuNTYzMjggQyAxMzczLjM2OTcsODc5LjgwNjE0IDE0NTUuMjAzMyw4NTUuMjE2MDQgMTUwNC42NzQsODMzLjcwNjE0IEMgMTU1NC4wMTMzLDgxMi4yNTM0MiAxNjE4LjI3NzgsNzc0LjQyNDU0IDE2NTguOTU5OSw3NDEuNTYzMjkgQyAxNjk5LjQ2OCw3MDguODQyNiAxNzExLjM0OTgsNjg1Ljc0MzQ4IDE3MTkuNjc0MSw3MDcuOTkxODYgQyAxNzI4LjA0MzIsNzMwLjM1OTY1IDE3MDMuMjY3Miw3NjQuMzE3NDggMTY4MS44MTcsNzg5LjA2MzI5IEMgMTY2MC4yMTI4LDgxMy45ODY2OSAxNjI5LjA4NTYsODQxLjc2ODYyIDE1ODIuODg4Myw4NzguMzQ5IEMgMTUzNi42OTEsOTE0LjkyOTM4IDE0MjYuODA1OCw5NzkuOTMzNjMgMTM3MC4wMzEyLDEwMDYuOTIwNCBDIDEzMTIuOTY1MiwxMDM0LjA0NTggMTI0MS44Mjc5LDEwNjUuMTU4OSAxMTk3Ljg4ODQsMTA3OS40MjA1IEMgMTE1My45NDg5LDEwOTMuNjgyMSAxMDY2LjQ1OTgsMTExMC40OTE5IDEwNjYuNDU5OCwxMTEwLjQ5MTkgTCAxMTU5LjMxNyw5MTguMzQ5IHoiCisgICAgICAgaWQ9InBhdGg4MDYzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NTAuMDMxMjUsNzMuODQzOTY0KSIKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjU7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzY2Nik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzNzc5KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gMTI0MS41OTY1LDY1Mi45NTAwNyBDIDEyNDEuNTk2NSw2NTIuOTUwMDcgMTE3Ni44NzUsNzA3LjI4NzEzIDEwOTUuOTMyNiw3NTEuOTQ1MDEgQyAxMDEzLjkwODIsNzk3LjE5OTg1IDgxMS42NzU1Niw4NDUuMjgzMTEgODExLjY3NTU2LDg0NS4yODMxMSBDIDgxMS42NzU1Niw4NDUuMjgzMTEgNzk2LjU3NDE5LDg2Ni4zMzUwNyA4NTYuOTMwNDUsODczLjU2NzM5IEMgOTE3LjI4NjcxLDg4MC43OTk3MSAxMDgxLjAxMjQsODIwLjI2NjcgMTEzNS41MzA2LDc3Ny40MDA4NSBDIDExOTAuMDQ4OCw3MzQuNTM1IDEyNTUuNzM4Nyw2NjUuNjc3OTkgMTI1NS43Mzg3LDY2NS42Nzc5OSBMIDEyNDEuNTk2NSw2NTIuOTUwMDcgeiIKKyAgICAgICBpZD0icGF0aDgwNjUiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjemN6emNjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM5OTIpIiAvPgorICAgIDxnCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgaWQ9Imc4MDY3IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM5ODYpIj4KKyAgICAgIDxnCisgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTc0LjAzMTI1LDYyLjE1NjAzNikiCisgICAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyMzY3NykiCisgICAgICAgICBpZD0iZzgwNjkiPgorICAgICAgICA8ZworICAgICAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyMzc4NSkiCisgICAgICAgICAgIGlkPSJnODA3MSI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6emNjY2NjIgorICAgICAgICAgICAgIGlkPSJwYXRoODA3MyIKKyAgICAgICAgICAgICBkPSJNIDEwOTQuMjg1Nyw3MjUuOTMzNjEgQyAxMDk0LjI4NTcsNzI1LjkzMzYxIDEwOTMuOTg5Niw3NTIuMDk0NTIgMTA5OC45Mjg1LDc2My43OTA3NiBDIDExMDMuODY3NCw3NzUuNDg3IDExMTguOTY2Niw3OTAuMjc3NDEgMTEyNy41LDc5NS4yMTkzMyBDIDExMzYuMDMzNCw4MDAuMTYxMjUgMTE0Ni40Mjg2LDgwMy43OTA3NSAxMTQ2LjQyODYsODAzLjc5MDc1IEwgMTI2NC4yODU3LDY4OC43OTA3NSBMIDEyODIuMTQyOSw2MTMuMDc2NDcgTCAxMTg1LjcxNDMsNjUxLjY0NzkgTCAxMDk0LjI4NTcsNzI1LjkzMzYxIHoiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzQuMDMxMjUsLTYyLjE1NjAzNikiIC8+CisgICAgICAgICAgPHJlY3QKKyAgICAgICAgICAgICB5PSI0ODYuMTQyMjQiCisgICAgICAgICAgICAgeD0iMTE5Ny44Mzg5IgorICAgICAgICAgICAgIGhlaWdodD0iMzA5LjcxMjc3IgorICAgICAgICAgICAgIHdpZHRoPSIzMzMuNzU0MTIiCisgICAgICAgICAgICAgaWQ9InJlY3Q4MDc1IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgICAgPC9nPgorICAgICAgPC9nPgorICAgICAgPGcKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNzQuMDMxMjUsNjIuMTU2MDM2KSIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMTgwMDAwMDQ7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgaWQ9Imc4MDc3Ij4KKyAgICAgICAgPGcKKyAgICAgICAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjM3ODUpIgorICAgICAgICAgICBpZD0iZzgwNzkiPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenpjY2NjYyIKKyAgICAgICAgICAgICBpZD0icGF0aDgwODEiCisgICAgICAgICAgICAgZD0iTSAxMDk0LjI4NTcsNzI1LjkzMzYxIEMgMTA5NC4yODU3LDcyNS45MzM2MSAxMDkzLjk4OTYsNzUyLjA5NDUyIDEwOTguOTI4NSw3NjMuNzkwNzYgQyAxMTAzLjg2NzQsNzc1LjQ4NyAxMTE4Ljk2NjYsNzkwLjI3NzQxIDExMjcuNSw3OTUuMjE5MzMgQyAxMTM2LjAzMzQsODAwLjE2MTI1IDExNDYuNDI4Niw4MDMuNzkwNzUgMTE0Ni40Mjg2LDgwMy43OTA3NSBMIDEyNjQuMjg1Nyw2ODguNzkwNzUgTCAxMjgyLjE0MjksNjEzLjA3NjQ3IEwgMTE4NS43MTQzLDY1MS42NDc5IEwgMTA5NC4yODU3LDcyNS45MzM2MSB6IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc0LjAzMTI1LC02Mi4xNTYwMzYpIiAvPgorICAgICAgICAgIDxyZWN0CisgICAgICAgICAgICAgeT0iNDg2LjE0MjI0IgorICAgICAgICAgICAgIHg9IjExOTcuODM4OSIKKyAgICAgICAgICAgICBoZWlnaHQ9IjMwOS43MTI3NyIKKyAgICAgICAgICAgICB3aWR0aD0iMzMzLjc1NDEyIgorICAgICAgICAgICAgIGlkPSJyZWN0ODA4MyIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICAgIDwvZz4KKyAgICAgIDwvZz4KKyAgICA8L2c+CisgICAgPHBhdGgKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NTAuMDMxMjUsNzMuODQzOTY0KSIKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjgzMzAwMDAzO2ZpbGw6IzA1MDUwNTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjgyMjUpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAxMjY0LjE4NzUsNjA1IEMgMTI1OS42OTY0LDYwNS43MzI2OCAxMjU2LjAzMDUsNjA4LjQ1NTA5IDEyNTIuMjUsNjExLjQwNjI1IEMgMTI0Mi4xNjg3LDYxOS4yNzYwMSAxMjI0LjA4MDUsNjQ1LjgzMTQ5IDEyMDQuMjE4OCw2NjEuODc1IEMgMTE2NC4zNTE0LDY5NC4wNzgxNiAxMTAwLjIyMjgsNzMxLjg1MjAxIDEwNTEuNjU2Miw3NTIuOTY4NzUgQyAxMDAzLjA0MjIsNzc0LjEwNjEzIDkyMS4xMTQ5OCw3OTguNzg2NzYgODc3LjM0Mzc1LDgxMC40Njg3NSBDIDgzMy45NDU1NCw4MjIuMDUxMjEgNzYyLjI5OTcyLDgzNS41OTk4MiA3MDkuMDkzNzUsODM3IEwgNzA0LjUzMTI1LDgzNy4xMjUgTCA3MDIuNTMxMjUsODQxLjI1IEwgNjA5LjY4NzUsMTAzMy4zNzUgTCA2MDMuMTg3NSwxMDQ2Ljg0MzggTCA2MTcuODQzNzUsMTA0NCBDIDYxNy44NDM3NSwxMDQ0IDcwNS4xMTM0MywxMDI3LjM0ODYgNzUwLjE4NzUsMTAxMi43MTg4IEMgNzk0LjkxMjcsOTk4LjIwMjEzIDg2NS45NzgzNiw5NjcuMDUxOTcgOTIzLjIxODc1LDkzOS44NDM3NSBDIDk4MC44MjE5OSw5MTIuNDYzMDYgMTA5MC4xNTUxLDg0Ny44NjQxMiAxMTM3LjUsODEwLjM3NSBDIDExODMuODYwOCw3NzMuNjY1MTggMTIxNS4zMDQ5LDc0NS42NTgxOCAxMjM3LjQzNzUsNzIwLjEyNSBDIDEyNDguMzM4Niw3MDcuNTQ5IDEyNjAuMTgyMyw2OTIuNTkzNTYgMTI2OC40Njg4LDY3Ny4zNzUgQyAxMjc2Ljc1NTIsNjYyLjE1NjQ0IDEyODcuNjI4NSw2MzMuMTU2OTIgMTI4Mi4xNTYyLDYxOC41MzEyNSBDIDEyODAuOTM4NSw2MTUuMjc2NTEgMTI3OS42MDQ4LDYxMi40Njk5NSAxMjc3LjU2MjUsNjEwLjAzMTI1IEMgMTI3NS41MjAyLDYwNy41OTI1NSAxMjY5LjA4NzgsNjA4LjQ1OTI2IDEyNjksNjA1IEMgMTI2OC43OTAyLDU5Ni43MzUxOCAxMjY1LjY4NDUsNjA0Ljc1NTc3IDEyNjQuMTg3NSw2MDUgeiBNIDEyNjYuMzQzOCw2MjAuMjE4NzUgQyAxMjY2Ljc1ODYsNjIwLjgwNDQ5IDEyNjcuMzc0OSw2MjEuNzc2NDEgMTI2OC4xMjUsNjIzLjc4MTI1IEMgMTI3MS4wMjE4LDYzMS41MjMzOCAxMjY2LjY4NDMsNjU1LjY4IDEyNTkuMzEyNSw2NjkuMjE4NzUgQyAxMjUxLjk0MDcsNjgyLjc1NzUgMTIzNi42NzQxLDY5OC4xNDI2OSAxMjI2LjEyNSw3MTAuMzEyNSBDIDEyMDUuMDQ5Niw3MzQuNjI2MDYgMTE3NC4yMjEzLDc2Mi4xNzQwNiAxMTI4LjE4NzUsNzk4LjYyNSBDIDEwODMuMTM3OSw4MzQuMjk2NTkgOTcyLjcyNzE3LDg5OS43MTk1OSA5MTYuNzgxMjUsOTI2LjMxMjUgQyA4NTkuODg5NTIsOTUzLjM1NDk5IDc4OC42ODUwOSw5ODQuNDMwOSA3NDUuNTMxMjUsOTk4LjQzNzUgQyA3MDkuMTY2MzQsMTAxMC4yNDA2IDY0OS42ODY1NCwxMDIyLjI3MTMgNjI5LjgxMjUsMTAyNi4yMTg4IEwgNzE0LjA5Mzc1LDg1MS43NSBDIDc2OC44MDA2Niw4NDkuNzAwNyA4MzcuODg2MzQsODM2LjUzMzY1IDg4MS4yMTg3NSw4MjQuOTY4NzUgQyA5MjUuNTUyOTcsODEzLjEzNjUgMTAwNy4yOTc0LDc4OC42MzI0MiAxMDU3LjYyNSw3NjYuNzUgQyAxMTA3LjczNyw3NDQuOTYxMjkgMTE3MC4xNTk0LDcwNS41ODE4NCAxMjExLjY1NjIsNjcyLjA2MjUgQyAxMjMyLjMwMjYsNjU1LjM4NTI5IDEyNTMuNDAxMSw2MjkuNTE2NjIgMTI2MS40Njg4LDYyMy4yMTg3NSBDIDEyNjMuOTA1OCw2MjEuMzE2MzMgMTI2NS41NDk0LDYyMC41ODI5NSAxMjY2LjM0MzgsNjIwLjIxODc1IHoiCisgICAgICAgaWQ9InBhdGg4MDg1IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM3MjIpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3NjY2NjY2Nzc3Nzc3Nzc2Njc3Nzc3NzY2Nzc3NzYyIgLz4KKyAgICA8ZworICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGlkPSJnODA4NyIKKyAgICAgICBtYXNrPSJ1cmwoI21hc2s3NzA0KSIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5MzQ0ODYsMC4xMTQyODAyLC0wLjExNDI4MDIsMC45OTM0NDg2LC05LjI0MzI0LDU4OC4wOTA1NCkiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTg1LjA5NjAzIgorICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTEyLjg1OTY1NCI+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOC4wMDQ1NzE0ZS0yLC0zLjEyNWUtMikiCisgICAgICAgICBzdHlsZT0iZmlsbDojYmNiNzg2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBkPSJNIDExMTEuNDA2MiwtMjg1LjkzNzUgTCAxMTA3LjQ2ODgsLTI4NC4wNjI1IEMgMTEwNy40MjgzLC0yODQuMDUyMjggMTEwNy4zNjkyLC0yODQuMDQyMDEgMTEwNy4zNDM4LC0yODQuMDMxMjUgQyAxMTA2LjkyNSwtMjgzLjgxODQgMTEwNy4xNzkxLC0yODMuOTMwNjcgMTEwNi42ODc1LC0yODMuNzE4NzUgQyAxMTA2LjIwMTQsLTI4My41MDkxOSAxMTA0Ljk0OTksLTI4My4xMzQ1NiAxMTAyLjU5MzgsLTI4Mi4yNSBDIDEwOTkuMjYyNiwtMjgwLjk5OTQyIDEwOTYuNzg5NSwtMjgwLjEwMDE2IDEwOTUuNTkzOCwtMjc5LjE4NzUgQyAxMDk0LjA1NzYsLTI3OS4xNjYyMyAxMDkxLjg3MzMsLTI3OC45NTQxOSAxMDg5LjkzNzUsLTI3OC40Njg3NSBDIDEwODYuOTU2LC0yNzcuNzIxMDggMTA4NS4wODIzLC0yNzcuMjk0NzQgMTA4My4xODc1LC0yNzYuODc1IEMgMTA4MS4yOTI3LC0yNzYuNDU1MjcgMTA4MS41MTIsLTI3Ni4yMzI4MSAxMDgwLjMxMjUsLTI3NiBDIDEwNzkuMDE1OSwtMjc1Ljc0ODMzIDEwNzguNTkxMSwtMjc2LjAwODk5IDEwNzQuODc1LC0yNzUuMjE4NzUgQyAxMDcxLjM4NTEsLTI3NC40NzY2IDEwNjUuOTgwMiwtMjczLjI4NzY4IDEwNjQuNzE4OCwtMjcyLjUzMTI1IEMgMTA2My4xMzQ4LC0yNzIuNzEyMDMgMTA2MC44NTEzLC0yNzIuODUzMDMgMTA1OC44NzUsLTI3Mi41NjI1IEMgMTA1NS44MzQ2LC0yNzIuMTE1NTQgMTA1My45NTg4LC0yNzEuODg5NzQgMTA1Mi4wMzEyLC0yNzEuNjU2MjUgQyAxMDUxLjM3NTgsLTI3MS41NzY4NyAxMDUwLjk5MDIsLTI3MS40NTU0NyAxMDUwLjY4NzUsLTI3MS4zNzUgQyAxMDUwLjI2MTMsLTI3MS4yNDMzNCAxMDUwLjAwMTcsLTI3MS4xMTQ5OCAxMDQ5LjMxMjUsLTI3MS4wMzEyNSBDIDEwNDguMDAwOSwtMjcwLjg3MTg4IDEwNDcuNTUwMywtMjcxLjE4ODA4IDEwNDMuNzgxMiwtMjcwLjc1IEMgMTA0MC4yMjczLC0yNzAuMzM2OTEgMTAzNC43NzU4LC0yNjkuNDc3MTggMTAzMy41MzEyLC0yNjguODEyNSBDIDEwMzEuOTMyMiwtMjY5LjEwOTc5IDEwMjkuNjczNSwtMjY5LjM0NjY5IDEwMjcuNjg3NSwtMjY5LjE1NjI1IEMgMTAyNC42Mjg3LC0yNjguODYyOTMgMTAyMi43MTU1LC0yNjguNjcyMjYgMTAyMC43ODEyLC0yNjguNSBDIDEwMTguODQ3LC0yNjguMzI3NzMgMTAxOS4wOTI2LC0yNjguMDc3NjMgMTAxNy44NzUsLTI2Ny45Njg3NSBDIDEwMTYuNTU4OCwtMjY3Ljg1MTA1IDEwMTYuMTE1MiwtMjY4LjEzMjM4IDEwMTIuMzQzOCwtMjY3LjcxODc1IEMgMTAwOC44MDE3LC0yNjcuMzMwMyAxMDAzLjMzNTksLTI2Ni41MDk0OCAxMDAyLjA2MjUsLTI2NS44NDM3NSBDIDEwMDAuNDYzNiwtMjY2LjEzODQ0IDk5OC4xNzUzLC0yNjYuMzUwNzYgOTk2LjE4NzUsLTI2Ni4xNTYyNSBDIDk5My4xMjkyMSwtMjY1Ljg1NyA5OTEuMjQ2MywtMjY1LjY3NjAxIDk4OS4zMTI1LC0yNjUuNSBDIDk4OC42NTUwMSwtMjY1LjQ0MDE1IDk4OC4yNzI0NSwtMjY1LjMyMTQ0IDk4Ny45Njg3NSwtMjY1LjI1IEMgOTg3LjU0MTA1LC0yNjUuMTMxMDQgOTg3LjI4NTI1LC0yNjUuMDMxOTMgOTg2LjU5Mzc1LC0yNjQuOTY4NzUgQyA5ODUuMjc3NzUsLTI2NC44NDg0OSA5ODQuODM0LC0yNjUuMTYzNjMgOTgxLjA2MjUsLTI2NC43NSBDIDk3Ny41MDYzMSwtMjY0LjM1OTk4IDk3Mi4wNTY5LC0yNjMuNTEwODQgOTcwLjgxMjUsLTI2Mi44NDM3NSBDIDk2OS4yMTM4MSwtMjYzLjEzNzkzIDk2Ni45NTI2NSwtMjYzLjM2NzQ3IDk2NC45Njg3NSwtMjYzLjE1NjI1IEMgOTYxLjkxMzA1LC0yNjIuODMwOTIgOTU5Ljk5NDcsLTI2Mi42MzAwMSA5NTguMDYyNSwtMjYyLjQzNzUgQyA5NTYuMTMwMzEsLTI2Mi4yNDQ5OSA5NTYuMzcyNzUsLTI2MS45OTY2MiA5NTUuMTU2MjUsLTI2MS44NzUgQyA5NTMuODQxMzcsLTI2MS43NDM1MyA5NTMuMzkzMiwtMjYyLjAzOTU0IDk0OS42MjUsLTI2MS41OTM3NSBDIDk0Ni4wODYxMSwtMjYxLjE3NTA5IDk0MC42NDczLC0yNjAuMzAxNTggOTM5LjM3NSwtMjU5LjYyNSBDIDkzNy43Nzc0MSwtMjU5LjkwNjA0IDkzNS41MTUwNSwtMjYwLjA0NTQzIDkzMy41MzEyNSwtMjU5LjgxMjUgQyA5MzAuNDc5MjcsLTI1OS40NTQxMyA5MjguNTg2MjUsLTI1OS4yNDQ2NCA5MjYuNjU2MjUsLTI1OS4wMzEyNSBDIDkyNi4wMDAwNywtMjU4Ljk1ODY5IDkyNS42MTU2LC0yNTguODU4NTYgOTI1LjMxMjUsLTI1OC43ODEyNSBDIDkyNC44ODU3MSwtMjU4LjY1NDAyIDkyNC42Mjc2LC0yNTguNTE0MDUgOTIzLjkzNzUsLTI1OC40Mzc1IEMgOTIyLjYyNDExLC0yNTguMjkxODEgOTIyLjE3MDE1LC0yNTguNjExNTIgOTE4LjQwNjI1LC0yNTguMTI1IEMgOTE0Ljg1NzM3LC0yNTcuNjY2MjQgOTA5LjQyNzYsLTI1Ni43MDU5OCA5MDguMTg3NSwtMjU2IEMgOTA2LjU5NDQxLC0yNTYuMjQ0MjQgOTA0LjM1MzcsLTI1Ni4zODEzNSA5MDIuMzc1LC0yNTYuMTI1IEMgODk5LjMyNzQxLC0yNTUuNzMwMTggODk3LjQyNDMsLTI1NS40NzY1NSA4OTUuNSwtMjU1LjIxODc1IEMgODkzLjU3NTcxLC0yNTQuOTYwOTYgODkzLjc3MzksLTI1NC43MjUyMiA4OTIuNTYyNSwtMjU0LjU2MjUgQyA4OTEuMjUzMDEsLTI1NC4zODY2IDg5MC44MTUzLC0yNTQuNjY2ODggODg3LjA2MjUsLTI1NC4wOTM3NSBDIDg4My41MzgyMSwtMjUzLjU1NTUxIDg3OC4xMzkzLC0yNTIuMzk0NTggODc2Ljg3NSwtMjUxLjY1NjI1IEMgODc1LjI4NzUxLC0yNTEuODU5NzkgODczLjAyOTUsLTI1MS45MTA5OCA4NzEuMDYyNSwtMjUxLjU2MjUgQyA4NjguMDM2MzEsLTI1MS4wMjYzOCA4NjYuMTYzNiwtMjUwLjcwMDgxIDg2NC4yNSwtMjUwLjM3NSBDIDg2My41OTk0MSwtMjUwLjI2NDIzIDg2My4yMzYzLC0yNTAuMTA0MDYgODYyLjkzNzUsLTI1MCBDIDg2Mi41MTY4MSwtMjQ5LjgzNTEyIDg2Mi4yNzQwNSwtMjQ5LjY2ODcgODYxLjU5Mzc1LC0yNDkuNTMxMjUgQyA4NjAuMjk5MDUsLTI0OS4yNjk2NiA4NTkuODY2NjUsLTI0OS41Mzc0NSA4NTYuMTU2MjUsLTI0OC43MTg3NSBDIDg1Mi42NTc3NywtMjQ3Ljk0NjggODQ3LjMxMDM1LC0yNDYuMzM1ODIgODQ2LjA5Mzc1LC0yNDUuNSBDIDg0NC41MzA4NSwtMjQ1LjU3NzQ1IDg0Mi4zMzYyNSwtMjQ1LjQxNDcyIDg0MC40MDYyNSwtMjQ0LjkwNjI1IEMgODM3LjQzMzg3LC0yNDQuMTIzMTIgODM1LjU4ODU1LC0yNDMuNjc0MTYgODMzLjcxODc1LC0yNDMuMTU2MjUgQyA4MzEuODQ4NzUsLTI0Mi42MzgzNSA4MzIuMDUyMSwtMjQyLjM4ODk3IDgzMC44NzUsLTI0Mi4wNjI1IEMgODI5LjYwMjUxLC0yNDEuNzA5NiA4MjkuMTc3OTUsLTI0MS45NTU0MSA4MjUuNTMxMjUsLTI0MC44NzUgQyA4MjIuMTA2NTcsLTIzOS44NjAzNyA4MTYuODgxODUsLTIzNy45NDE4MyA4MTUuNjU2MjUsLTIzNy4wMzEyNSBDIDgxNC4xMTc0NywtMjM3LjAxODUxIDgxMS45MzY0NSwtMjM2Ljc1OTAzIDgxMC4wMzEyNSwtMjM2LjE1NjI1IEMgODA3LjEwMDI3LC0yMzUuMjI4OTEgODA1LjI4MDksLTIzNC42OTc4MyA4MDMuNDM3NSwtMjM0LjA5Mzc1IEMgODAyLjgxMDcxLC0yMzMuODg4MzcgODAyLjQ0NTg1LC0yMzMuNzAxMTcgODAyLjE1NjI1LC0yMzMuNTYyNSBDIDgwMS43NDg2NywtMjMzLjM0ODg5IDgwMS41MDI5NSwtMjMzLjE1Mzc1IDgwMC44NDM3NSwtMjMyLjkzNzUgQyA3OTkuNTg5MjUsLTIzMi41MjU5NiA3OTkuMTU3NiwtMjMyLjc0ODQ2IDc5NS41NjI1LC0yMzEuNSBDIDc5Mi4xNzI2MSwtMjMwLjMyMjgzIDc4Ni45Njc1NSwtMjI4LjI4NjMgNzg1Ljc4MTI1LC0yMjcuMzQzNzUgQyA3ODQuMjU3MzcsLTIyNy4yODQwOCA3ODIuMTMxMiwtMjI2Ljk0ODg4IDc4MC4yNSwtMjI2LjI4MTI1IEMgNzc3LjM1MjYxLC0yMjUuMjUyOTYgNzc1LjU1MDk1LC0yMjQuNjA1NzcgNzczLjcxODc1LC0yMjMuOTY4NzUgQyA3NzEuODg2NTUsLTIyMy4zMzE3NCA3NzIuMDkwOSwtMjIzLjEyMDIxIDc3MC45Mzc1LC0yMjIuNzE4NzUgQyA3NjkuNjkwNzEsLTIyMi4yODQ3OSA3NjkuMjczOTUsLTIyMi41MTkwMyA3NjUuNzE4NzUsLTIyMS4xNTYyNSBDIDc2Mi4zODAwNSwtMjE5Ljg3NjQ1IDc1Ny4yMzE2NSwtMjE3LjY3MzcgNzU2LjAzMTI1LC0yMTYuNjg3NSBDIDc1NC41MjQwNywtMjE2LjU3OTgxIDc1Mi4zOTU1NSwtMjE2LjE4ODcgNzUwLjUzMTI1LC0yMTUuNDY4NzUgQyA3NDcuNjYzMDcsLTIxNC4zNjExNSA3NDUuOTA3MzUsLTIxMy42ODcxOSA3NDQuMDkzNzUsLTIxMyBDIDc0My40NzcwNSwtMjEyLjc2NjM3IDc0My4wOTczLC0yMTIuNTU3OTcgNzQyLjgxMjUsLTIxMi40MDYyNSBDIDc0Mi44MTI1MSwtMjEyLjQwNjI1IDc0Mi44MTI1LC0yMTIuMzc2NzMgNzQyLjgxMjUsLTIxMi4zNzUgTCA3MzQuODEyNSwtMjA5LjE4NzUgTCA3MjIuMzM2NiwtMjA1LjY5NTYxIEwgNzMwLjI2NjI2LC0xODYuNDE3ODkgQyA3MjkuNjc0NjMsLTE4NC40NDQzMiA3NDIuODEyNSwtMTkxLjE1NjI1IDc0Mi44MTI1LC0xOTEuMTU2MjUgQyA3NDMuMDM4OTEsLTE5MS4zMDA5MyA3NDMuMjYxNDUsLTE5MS40Mjg4NiA3NDMuNTMxMjUsLTE5MS41MzEyNSBDIDc0NC42MTE3NywtMTkxLjk0MTIzIDc0NS43MDI4NSwtMTkxLjc0NzAyIDc0OS41MzEyNSwtMTkzLjIxODc1IEMgNzUzLjM1OTc3LC0xOTQuNjkwNDkgNzU0Ljc1NTMsLTE5NS4yMjM3MyA3NTUuNDM3NSwtMTk1LjYyNSBDIDc1Ni4xMTcxMSwtMTk2LjAyNDc4IDc1Ny4wNDkyNSwtMTk2LjUwNDM3IDc1Ny42NTYyNSwtMTk3LjE1NjI1IEMgNzU5LjQ4MzE3LC0xOTcuMjk0IDc2MS4yMjcwNSwtMTk3LjY0OTQ4IDc2Mi41OTM3NSwtMTk4LjE1NjI1IEMgNzY1LjU2MTc1LC0xOTkuMjU2NzcgNzY3LjQ2OTEsLTE5OS45NjI0NCA3NjkuMzc1LC0yMDAuNjI1IEMgNzcxLjI4MDgxLC0yMDEuMjg3NTQgNzcxLjcyOTE1LC0yMDIuMDM5ODcgNzcyLjc4MTI1LC0yMDIuNDA2MjUgQyA3NzMuODcyODcsLTIwMi43ODYzNiA3NzQuOTc2MzUsLTIwMi41NzE2MyA3NzguODQzNzUsLTIwMy45Mzc1IEMgNzgyLjcxMTE1LC0yMDUuMzAzMzYgNzg0LjEyNjksLTIwNS43NjQ1OCA3ODQuODEyNSwtMjA2LjE1NjI1IEMgNzg1LjUxMzYxLC0yMDYuNTU2NzcgNzg2LjUxMzMsLTIwNy4wODkyMyA3ODcuMTI1LC0yMDcuNzUgQyA3ODkuMDk1ODEsLTIwNy44MDQ2NiA3OTAuOTQxOTUsLTIwOC4xMzQ2MyA3OTIuNDA2MjUsLTIwOC42MjUgQyA3OTUuNDA3NzcsLTIwOS42MzAwOCA3OTcuMzMyNCwtMjEwLjI0NjcxIDc5OS4yNSwtMjEwLjg3NSBDIDgwMC43ODg2MSwtMjExLjM3OTEgODAxLjQyNDE1LC0yMTEuOTIxNzcgODAyLjE1NjI1LC0yMTIuMzEyNSBDIDgwMi4zODY0NywtMjEyLjQ0NjgxIDgwMi42MzIxNSwtMjEyLjU2NjIzIDgwMi45MDYyNSwtMjEyLjY1NjI1IEMgODA0LjAwNDU3LC0yMTMuMDE2NzMgODA1LjA4NzcsLTIxMi43Mzc2MiA4MDksLTIxMy45Njg3NSBDIDgxMi45MTIzMSwtMjE1LjE5OTg4IDgxNC4zNjYsLTIxNS42NDE3IDgxNS4wNjI1LC0yMTYgQyA4MTUuNzU2NDEsLTIxNi4zNTY5NyA4MTYuNjkyNiwtMjE2Ljc5MjYxIDgxNy4zMTI1LC0yMTcuNDA2MjUgQyA4MTkuMTc3NzEsLTIxNy40Mjg5MSA4MjAuOTQ4MzUsLTIxNy42NzMwOCA4MjIuMzQzNzUsLTIxOC4wOTM3NSBDIDgyNS4zNzQxNSwtMjE5LjAwNzI5IDgyNy4zMzYxNSwtMjE5LjUyMzg1IDgyOS4yODEyNSwtMjIwLjA2MjUgQyA4MzEuMjI2MzcsLTIyMC42MDExNCA4MzEuNzA3NDUsLTIyMS4zMjcwMiA4MzIuNzgxMjUsLTIyMS42MjUgQyA4MzMuODk1MjcsLTIyMS45MzQxNSA4MzUuMDAxMjUsLTIyMS42MTc2MSA4MzguOTY4NzUsLTIyMi42NTYyNSBDIDg0Mi45MzYyNSwtMjIzLjY5NDg4IDg0NC4zODYyNSwtMjI0LjA4ODk4IDg0NS4wOTM3NSwtMjI0LjQwNjI1IEMgODQ1LjgyODU1LC0yMjQuNzM1ODQgODQ2LjkwNzY1LC0yMjUuMTU5OTcgODQ3LjUzMTI1LC0yMjUuNzgxMjUgQyA4NDkuNTI5MDcsLTIyNS42NjUyNSA4NTEuMzg4NywtMjI1LjgwMTM0IDg1Mi44NzUsLTIyNi4xNTYyNSBDIDg1NS45NTMxMSwtMjI2Ljg5MTI1IDg1Ny45NTg0LC0yMjcuMjU3MTkgODU5LjkzNzUsLTIyNy42NTYyNSBDIDg2MS41MjU0MSwtMjI3Ljk3NjQzIDg2Mi4xODE4LC0yMjguNDQ2OCA4NjIuOTM3NSwtMjI4Ljc1IEMgODYzLjE3NTAxLC0yMjguODU2OCA4NjMuNDA0NCwtMjI4Ljk0Mjc2IDg2My42ODc1LC0yMjkgQyA4NjQuODIwOTEsLTIyOS4yMjkxOSA4NjUuOTkyMTUsLTIyOC43OTEwNyA4NzAuMDMxMjUsLTIyOS41IEMgODc0LjA3MDY3LC0yMzAuMjA4OTMgODc1LjUzMTUsLTIzMC40MjcwOSA4NzYuMjUsLTIzMC42ODc1IEMgODc2Ljk2NTgxLC0yMzAuOTQ2OTQgODc3Ljk1NDM1LC0yMzEuMjU0NzQgODc4LjU5Mzc1LC0yMzEuNzgxMjUgQyA4ODAuNTE3OTUsLTIzMS41NDE3NiA4ODIuMzQxNjUsLTIzMS41NTY3MiA4ODMuNzgxMjUsLTIzMS43ODEyNSBDIDg4Ni45MDc2NywtMjMyLjI2ODg3IDg4OC45MzU4LC0yMzIuNDgxOTIgODkwLjkzNzUsLTIzMi43NSBDIDg5Mi45MzkyMSwtMjMzLjAxODA3IDg5My40MjYyNSwtMjMzLjY5NTE0IDg5NC41MzEyNSwtMjMzLjg0Mzc1IEMgODk1LjY3NzY3LC0yMzMuOTk3OTMgODk2LjgwNzEsLTIzMy41NDIxOCA5MDAuODc1LC0yMzQuMDYyNSBDIDkwNC45NDI4MSwtMjM0LjU4MjgyIDkwNi40MzUyNSwtMjM0Ljc1ODIzIDkwNy4xNTYyNSwtMjM1IEMgOTA3Ljg5MzM3LC0yMzUuMjQ3MTQgOTA4Ljk1NDM1LC0yMzUuNTg2MjMgOTA5LjU5Mzc1LC0yMzYuMTI1IEMgOTExLjY0Mzc1LC0yMzUuNzg5NDcgOTEzLjU2NzQ1LC0yMzUuNzI3MDQgOTE1LjA5Mzc1LC0yMzUuOTA2MjUgQyA5MTguMjM1OTUsLTIzNi4yNzUyMSA5MjAuMjczNzUsLTIzNi40NjU2MSA5MjIuMjgxMjUsLTIzNi42ODc1IEMgOTIzLjg5MjA3LC0yMzYuODY1NTIgOTI0LjU0NTksLTIzNy4yOTU3IDkyNS4zMTI1LC0yMzcuNTMxMjUgQyA5MjUuNTUzNDEsLTIzNy42MTY3NyA5MjUuODA2NTUsLTIzNy42ODY4NSA5MjYuMDkzNzUsLTIzNy43MTg3NSBDIDkyNy4yNDM0NSwtMjM3Ljg0NjQ3IDkyOC4zOTUwNSwtMjM3LjM3MjEgOTMyLjQ2ODc1LC0yMzcuODQzNzUgQyA5MzYuNTQyNDUsLTIzOC4zMTU0IDkzOC4wMjc4LC0yMzguNDU0MzUgOTM4Ljc1LC0yMzguNjg3NSBDIDkzOS40Njk0MSwtMjM4LjkxOTc3IDk0MC40NTAyNSwtMjM5LjE2MDk2IDk0MS4wOTM3NSwtMjM5LjY1NjI1IEMgOTQzLjAzMDA1LC0yMzkuMzIyNzkgOTQ0Ljg2MzgsLTIzOS4yNTIwMSA5NDYuMzEyNSwtMjM5LjQwNjI1IEMgOTQ5LjQ1ODUxLC0yMzkuNzQxMiA5NTEuNDksLTIzOS45MjQ4NCA5NTMuNSwtMjQwLjEyNSBDIDk1NS41MDk5MSwtMjQwLjMyNTE0IDk1NS45ODQxNSwtMjQwLjk1MTM5IDk1Ny4wOTM3NSwtMjQxLjA2MjUgQyA5NTguMjQ0ODUsLTI0MS4xNzc3OCA5NTkuMzkwMjUsLTI0MC42OTc0NCA5NjMuNDY4NzUsLTI0MS4xMjUgQyA5NjcuNTQ3MjUsLTI0MS41NTI1NiA5NjkuMDU3NjUsLTI0MS42ODcwOSA5NjkuNzgxMjUsLTI0MS45MDYyNSBDIDk3MC41MjA0NywtMjQyLjEzMDExIDk3MS41NzY4NSwtMjQyLjQxOTUgOTcyLjIxODc1LC0yNDIuOTM3NSBDIDk3NC4yNzU3NSwtMjQyLjUzODgzIDk3Ni4yMjA2LC0yNDIuNDQ0MSA5NzcuNzUsLTI0Mi41OTM3NSBDIDk4MC44OTg3MSwtMjQyLjkwMTg1IDk4Mi45MjU4LC0yNDMuMDY3IDk4NC45Mzc1LC0yNDMuMjUgQyA5ODYuNTUxNTEsLTI0My4zOTY4MiA5ODcuMjAwNTUsLTI0My44MTA1NSA5ODcuOTY4NzUsLTI0NC4wMzEyNSBDIDk4OC4yMTAwNSwtMjQ0LjExMjExIDk4OC40NjIzLC0yNDQuMTYxMTYgOTg4Ljc1LC0yNDQuMTg3NSBDIDk4OS45MDIxMSwtMjQ0LjI5Mjk1IDk5MS4wNDI5LC0yNDMuNzk0NzUgOTk1LjEyNSwtMjQ0LjE4NzUgQyA5OTkuMjA3MTEsLTI0NC41ODAyNSAxMDAwLjcxMzksLTI0NC43MTgzNCAxMDAxLjQzNzUsLTI0NC45Mzc1IEMgMTAwMi4xNTg0LC0yNDUuMTU1ODMgMTAwMy4xMzcxLC0yNDUuMzg1MiAxMDAzLjc4MTIsLTI0NS44NzUgQyAxMDA1LjcxOTMsLTI0NS41MjUwMSAxMDA3LjU1MDEsLTI0NS40MjA2MiAxMDA5LC0yNDUuNTYyNSBDIDEwMTIuMTQ4NywtMjQ1Ljg3MDYgMTAxNC4xNzU4LC0yNDYuMDM1NzUgMTAxNi4xODc1LC0yNDYuMjE4NzUgQyAxMDE4LjE5OTEsLTI0Ni40MDE3NCAxMDE4LjcwMTcsLTI0Ny4wNTY3NyAxMDE5LjgxMjUsLTI0Ny4xNTYyNSBDIDEwMjAuOTY0OCwtMjQ3LjI1OTQ4IDEwMjIuMTA0NywtMjQ2Ljc3MTQyIDEwMjYuMTg3NSwtMjQ3LjE1NjI1IEMgMTAzMC4yNzA0LC0yNDcuNTQxMDcgMTAzMS43NzYyLC0yNDcuNjU3MjUgMTAzMi41LC0yNDcuODc1IEMgMTAzMy4yMzkzLC0yNDguMDk3NDMgMTAzNC4yOTU2LC0yNDguMzg5NDkgMTAzNC45Mzc1LC0yNDguOTA2MjUgQyAxMDM2Ljk5NDksLTI0OC41MDQ0OCAxMDM4Ljk0MDQsLTI0OC40MDI5MiAxMDQwLjQ2ODgsLTI0OC41NjI1IEMgMTA0My42MTUzLC0yNDguODkxMDIgMTA0NS42NDU4LC0yNDkuMDg1MiAxMDQ3LjY1NjIsLTI0OS4yODEyNSBDIDEwNDkuMjY5MiwtMjQ5LjQzODU0IDEwNDkuOTIxOSwtMjQ5LjkxMjczIDEwNTAuNjg3NSwtMjUwLjE1NjI1IEMgMTA1MC45MjgyLC0yNTAuMjQ0MjkgMTA1MS4xNTA3LC0yNTAuMjc3NjIgMTA1MS40Mzc1LC0yNTAuMzEyNSBDIDEwNTIuNTg1OCwtMjUwLjQ1MjIgMTA1My43NTQyLC0yNDkuOTcyNTkgMTA1Ny44MTI1LC0yNTAuNTYyNSBDIDEwNjEuODcwOCwtMjUxLjE1MjQyIDEwNjMuMzc0MywtMjUxLjMzOTY0IDEwNjQuMDkzOCwtMjUxLjU5Mzc1IEMgMTA2NC44MTA0LC0yNTEuODQ2OTEgMTA2NS43Njg0LC0yNTIuMTUxODIgMTA2Ni40MDYyLC0yNTIuNjg3NSBDIDEwNjguMzI1OSwtMjUyLjQ3NTU2IDEwNzAuMTI2MiwtMjUyLjUzNjA5IDEwNzEuNTYyNSwtMjUyLjc4MTI1IEMgMTA3NC42ODE2LC0yNTMuMzEzNjUgMTA3Ni42NzQxLC0yNTMuNzA5ODYgMTA3OC42NTYyLC0yNTQuMDkzNzUgQyAxMDgwLjYzODMsLTI1NC40Nzc2MiAxMDgxLjEzMDUsLTI1NS4xMzM0IDEwODIuMjE4OCwtMjU1LjM3NSBDIDEwODMuMzQ3NSwtMjU1LjYyNTY2IDEwODQuNDg5LC0yNTUuMjU4NzEgMTA4OC40Njg4LC0yNTYuMjUgQyAxMDkyLjQ0ODMsLTI1Ny4yNDEyNyAxMDkzLjg5ODMsLTI1Ny42NjkzIDEwOTQuNTkzOCwtMjU4LjAzMTI1IEMgMTA5NS4zMTYsLTI1OC40MDcyNSAxMDk2LjM1NTUsLTI1OC45MDE4MyAxMDk2Ljk2ODgsLTI1OS41NjI1IEMgMTA5OC45MzE3LC0yNTkuNTc0NTQgMTEwMC43NjI1LC0yNTkuODUzNTUgMTEwMi4xODc1LC0yNjAuNDA2MjUgQyAxMTA1LjEzODcsLTI2MS41NTA4NSAxMTA3LjA2MDcsLTI2Mi4yNzU2NyAxMTA4Ljg3NSwtMjYzLjE1NjI1IEMgMTExMC4zMzA3LC0yNjMuODYyNzcgMTExMS4xOTQxLC0yNjQuODU4MjggMTExMS40MDYyLC0yNjUuMTU2MjUgQyAxMTExLjYxODUsLTI2NS40NTQyIDExMTEuNTA1MSwtMjY1Ljg4NDggMTExMS41MzEyLC0yNjUuOTA2MjUgQyAxMTExLjU3NDIsLTI2NS45NDE0OCAxMTExLjg3MTYsLTI2Ni4wMDAyOCAxMTEyLjAzMTIsLTI2Ni4zNDM3NSBDIDExMTIuODkwMiwtMjY4LjE5MDgyIDExMTQuMzU0NCwtMjcxLjk3MTM5IDExMTQuNDY4OCwtMjcyLjY1NjI1IEMgMTExNC41ODI1LC0yNzMuMzM4MzkgMTExNC42MzY4LC0yNzQuMDA5MDIgMTExNC42ODc1LC0yNzQuNDA2MjUgQyAxMTE0LjcxNjksLTI3NC42MzU3NSAxMTE0LjU0MDQsLTI3NS4yODUxNSAxMTE0LjU2MjUsLTI3NS4zNDM3NSBDIDExMTQuNTkzNCwtMjc1LjQyNTc5IDExMTQuODUwOCwtMjc1LjU5NDMyIDExMTQuOTA2MiwtMjc1Ljg0Mzc1IEMgMTExNS4xNzI1LC0yNzcuMDQyMDYgMTExNC45OTUzLC0yNzguMDUxMTEgMTExNC43ODEyLC0yNzkuNDY4NzUgQyAxMTE0LjU2NzMsLTI4MC44ODYzOCAxMTEzLjgwOTYsLTI4NC4wODMzOCAxMTEzLjE1NjIsLTI4NC45Mzc1IEMgMTExMi40OTczLC0yODUuNzk5MjIgMTExMS45MzE0LC0yODUuOTQ4MDEgMTExMS40MDYyLC0yODUuOTM3NSB6IgorICAgICAgICAgaWQ9InBhdGg4MDg5IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3NjY2NjY3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc3Nzc3NzYyIgLz4KKyAgICAgIDxnCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg3NDIxKSIKKyAgICAgICAgIGlkPSJnODA5MSI+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODA5MyIKKyAgICAgICAgICAgZD0iTSAxMTA3LjQwOSwtMjg0LjA0OTYxIEMgMTEwNi45OTAzLC0yODMuODM2NzggMTEwNy4yNTM0LC0yODMuOTU1NzIgMTEwNi43NjE4LC0yODMuNzQzOCBDIDExMDYuMjc1NywtMjgzLjUzNDI2IDExMDUuMDM4NCwtMjgzLjE2OTQxIDExMDIuNjgyMiwtMjgyLjI4NDg1IEMgMTA5OS4zNTExLC0yODEuMDM0MjggMTA5Ni44NTIsLTI4MC4xMzE0MSAxMDk1LjY1NjMsLTI3OS4yMTg3NSBDIDEwOTQuMTIwMiwtMjc5LjE5NzQ5IDEwOTEuOTM1OCwtMjc4Ljk4NTQ0IDEwOTAsLTI3OC41IEMgMTA4Ny4wMTg1LC0yNzcuNzUyMzQgMTA4NS4xNDQ4LC0yNzcuMzI1OTkgMTA4My4yNSwtMjc2LjkwNjI1IEMgMTA4MS4zNTUyLC0yNzYuNDg2NTMgMTA4MS41NzQ1LC0yNzYuMjY0MDYgMTA4MC4zNzUsLTI3Ni4wMzEyNSBDIDEwNzkuMDc4NCwtMjc1Ljc3OTU5IDEwNzguNjUzNiwtMjc2LjA0MDI0IDEwNzQuOTM3NSwtMjc1LjI1IEMgMTA3MS40NDc2LC0yNzQuNTA3ODYgMTA2Ni4wNDI3LC0yNzMuMzE4OTMgMTA2NC43ODEzLC0yNzIuNTYyNSBDIDEwNjMuMTk3NCwtMjcyLjc0MzI5IDEwNjAuOTEzOCwtMjcyLjg4NDI4IDEwNTguOTM3NSwtMjcyLjU5Mzc1IEMgMTA1NS44OTcxLC0yNzIuMTQ2OCAxMDU0LjAyMTMsLTI3MS45MjA5OSAxMDUyLjA5MzgsLTI3MS42ODc1IEMgMTA1MS40Mzg0LC0yNzEuNjA4MTMgMTA1MS4wNTI3LC0yNzEuNDg2NzIgMTA1MC43NSwtMjcxLjQwNjI1IEMgMTA1MC4zMjM4LC0yNzEuMjc0NiAxMDUwLjA2NDIsLTI3MS4xNDYyMyAxMDQ5LjM3NSwtMjcxLjA2MjUgQyAxMDQ4LjA2MzQsLTI3MC45MDMxNCAxMDQ3LjYxMjgsLTI3MS4yMTkzMyAxMDQzLjg0MzgsLTI3MC43ODEyNSBDIDEwNDAuMjg5OSwtMjcwLjM2ODE3IDEwMzQuODM4NCwtMjY5LjUwODQzIDEwMzMuNTkzOCwtMjY4Ljg0Mzc1IEMgMTAzMS45OTQ4LC0yNjkuMTQxMDUgMTAyOS43MzYsLTI2OS4zNzc5NCAxMDI3Ljc1LC0yNjkuMTg3NSBDIDEwMjQuNjkxMiwtMjY4Ljg5NDE5IDEwMjIuNzc4LC0yNjguNzAzNTEgMTAyMC44NDM4LC0yNjguNTMxMjUgQyAxMDE4LjkwOTUsLTI2OC4zNTg5OSAxMDE5LjE1NTEsLTI2OC4xMDg4OCAxMDE3LjkzNzUsLTI2OCBDIDEwMTYuNjIxMywtMjY3Ljg4MjMxIDEwMTYuMTc3NywtMjY4LjE2MzYzIDEwMTIuNDA2MywtMjY3Ljc1IEMgMTAwOC44NjQ0LC0yNjcuMzYxNTYgMTAwMy4zOTg0LC0yNjYuNTQwNzMgMTAwMi4xMjUsLTI2NS44NzUgQyAxMDAwLjUyNjEsLTI2Ni4xNjk3IDk5OC4yMzc4MywtMjY2LjM4MjAxIDk5Ni4yNSwtMjY2LjE4NzUgQyA5OTMuMTkxNzYsLTI2NS44ODgyNiA5OTEuMzA4ODcsLTI2NS43MDcyNiA5ODkuMzc1LC0yNjUuNTMxMjUgQyA5ODguNzE3NTEsLTI2NS40NzE0MSA5ODguMzM0OTYsLTI2NS4zNTI2OSA5ODguMDMxMjUsLTI2NS4yODEyNSBDIDk4Ny42MDM2LC0yNjUuMTYyMyA5ODcuMzQ3NzQsLTI2NS4wNjMxOCA5ODYuNjU2MjUsLTI2NSBDIDk4NS4zNDAyOSwtMjY0Ljg3OTc1IDk4NC44OTY0OSwtMjY1LjE5NDg4IDk4MS4xMjUsLTI2NC43ODEyNSBDIDk3Ny41Njg4NiwtMjY0LjM5MTI0IDk3Mi4xMTk0NiwtMjYzLjU0MjA5IDk3MC44NzUsLTI2Mi44NzUgQyA5NjkuMjc2MzcsLTI2My4xNjkxOSA5NjcuMDE1MTYsLTI2My4zOTg3MiA5NjUuMDMxMjUsLTI2My4xODc1IEMgOTYxLjk3NTY1LC0yNjIuODYyMTggOTYwLjA1NzIxLC0yNjIuNjYxMjYgOTU4LjEyNSwtMjYyLjQ2ODc1IEMgOTU2LjE5Mjc5LC0yNjIuMjc2MjUgOTU2LjQzNTEzLC0yNjIuMDI3ODcgOTU1LjIxODc1LC0yNjEuOTA2MjUgQyA5NTMuOTAzODcsLTI2MS43NzQ3OSA5NTMuNDU1NzcsLTI2Mi4wNzA3OSA5NDkuNjg3NSwtMjYxLjYyNSBDIDk0Ni4xNDg2MywtMjYxLjIwNjM1IDk0MC43MDk4MiwtMjYwLjMzMjgzIDkzOS40Mzc1LC0yNTkuNjU2MjUgQyA5MzcuODM5OTUsLTI1OS45MzczIDkzNS41Nzc1NCwtMjYwLjA3NjY4IDkzMy41OTM3NSwtMjU5Ljg0Mzc1IEMgOTMwLjU0MTc3LC0yNTkuNDg1MzkgOTI4LjY0ODY3LC0yNTkuMjc1ODkgOTI2LjcxODc1LC0yNTkuMDYyNSBDIDkyNi4wNjI1NSwtMjU4Ljk4OTk1IDkyNS42NzgwOSwtMjU4Ljg4OTgxIDkyNS4zNzUsLTI1OC44MTI1IEMgOTI0Ljk0ODIzLC0yNTguNjg1MjggOTI0LjY5MDA5LC0yNTguNTQ1MyA5MjQsLTI1OC40Njg3NSBDIDkyMi42ODY2NywtMjU4LjMyMzA3IDkyMi4yMzI1NCwtMjU4LjY0Mjc3IDkxOC40Njg3NSwtMjU4LjE1NjI1IEMgOTE0LjkxOTg2LC0yNTcuNjk3NSA5MDkuNDkwMTIsLTI1Ni43MzcyMyA5MDguMjUsLTI1Ni4wMzEyNSBDIDkwNi42NTY5NSwtMjU2LjI3NTQ5IDkwNC40MTYxOSwtMjU2LjQxMjYgOTAyLjQzNzUsLTI1Ni4xNTYyNSBDIDg5OS4zODk5MSwtMjU1Ljc2MTQ0IDg5Ny40ODY3OSwtMjU1LjUwNzggODk1LjU2MjUsLTI1NS4yNSBDIDg5My42MzgyMiwtMjU0Ljk5MjIxIDg5My44MzYzOSwtMjU0Ljc1NjQ3IDg5Mi42MjUsLTI1NC41OTM3NSBDIDg5MS4zMTU1NCwtMjU0LjQxNzg1IDg5MC44Nzc4MSwtMjU0LjY5ODEzIDg4Ny4xMjUsLTI1NC4xMjUgQyA4ODMuNjAwNzEsLTI1My41ODY3NiA4NzguMjAxODUsLTI1Mi40MjU4MyA4NzYuOTM3NSwtMjUxLjY4NzUgQyA4NzUuMzUsLTI1MS44OTEwNCA4NzMuMDkyLC0yNTEuOTQyMjMgODcxLjEyNSwtMjUxLjU5Mzc1IEMgODY4LjA5ODgzLC0yNTEuMDU3NjMgODY2LjIyNjExLC0yNTAuNzMyMDYgODY0LjMxMjUsLTI1MC40MDYyNSBDIDg2My42NjE4OSwtMjUwLjI5NTQ4IDg2My4yOTg3OSwtMjUwLjEzNTMxIDg2MywtMjUwLjAzMTI1IEMgODYyLjU3OTMzLC0yNDkuODY2MzcgODYyLjMzNjU1LC0yNDkuNjk5OTUgODYxLjY1NjI1LC0yNDkuNTYyNSBDIDg2MC4zNjE2LC0yNDkuMzAwOTEgODU5LjkyOTEzLC0yNDkuNTY4NyA4NTYuMjE4NzUsLTI0OC43NSBDIDg1Mi43MjAyMiwtMjQ3Ljk3ODA1IDg0Ny4zNzI4LC0yNDYuMzY3MDcgODQ2LjE1NjI1LC0yNDUuNTMxMjUgQyA4NDQuNTkzNDcsLTI0NS42MDg3IDg0Mi4zOTg2NywtMjQ1LjQ0NTk3IDg0MC40Njg3NSwtMjQ0LjkzNzUgQyA4MzcuNDk2MzEsLTI0NC4xNTQzNyA4MzUuNjUxMTQsLTI0My43MDU0MSA4MzMuNzgxMjUsLTI0My4xODc1IEMgODMxLjkxMTM3LC0yNDIuNjY5NiA4MzIuMTE0NjUsLTI0Mi40MjAyMiA4MzAuOTM3NSwtMjQyLjA5Mzc1IEMgODI5LjY2NTA0LC0yNDEuNzQwODUgODI5LjI0MDQ3LC0yNDEuOTg2NjYgODI1LjU5Mzc1LC0yNDAuOTA2MjUgQyA4MjIuMTY5MDUsLTIzOS44OTE2MiA4MTYuOTQ0MzEsLTIzNy45NzMwOCA4MTUuNzE4NzUsLTIzNy4wNjI1IEMgODE0LjE3OTkyLC0yMzcuMDQ5NzYgODExLjk5ODkyLC0yMzYuNzkwMjggODEwLjA5Mzc1LC0yMzYuMTg3NSBDIDgwNy4xNjI2OSwtMjM1LjI2MDE2IDgwNS4zNDM0NCwtMjM0LjcyOTA4IDgwMy41LC0yMzQuMTI1IEMgODAyLjg3MzI0LC0yMzMuOTE5NjIgODAyLjUwODI3LC0yMzMuNzMyNDIgODAyLjIxODc1LC0yMzMuNTkzNzUgQyA4MDEuODExMTIsLTIzMy4zODAxNCA4MDEuNTY1NDEsLTIzMy4xODUgODAwLjkwNjI1LC0yMzIuOTY4NzUgQyA3OTkuNjUxNzksLTIzMi41NTcyMSA3OTkuMjIwMTQsLTIzMi43Nzk3MSA3OTUuNjI1LC0yMzEuNTMxMjUgQyA3OTIuMjM1MTUsLTIzMC4zNTQwOCA3ODcuMDMwMDIsLTIyOC4zMTc1NSA3ODUuODQzNzUsLTIyNy4zNzUgQyA3ODQuMzE5ODYsLTIyNy4zMTUzMyA3ODIuMTkzNywtMjI2Ljk4MDEzIDc4MC4zMTI1LC0yMjYuMzEyNSBDIDc3Ny40MTUxMSwtMjI1LjI4NDIxIDc3NS42MTM0MiwtMjI0LjYzNzAyIDc3My43ODEyNSwtMjI0IEMgNzcxLjk0OTA4LC0yMjMuMzYyOTkgNzcyLjE1MzQsLTIyMy4xNTE0NiA3NzEsLTIyMi43NSBDIDc2OS43NTMyMiwtMjIyLjMxNjA0IDc2OS4zMzYzOSwtMjIyLjU1MDI4IDc2NS43ODEyNSwtMjIxLjE4NzUgQyA3NjIuNDQyNTgsLTIxOS45MDc3IDc1Ny4yOTQxLC0yMTcuNzA0OTUgNzU2LjA5Mzc1LC0yMTYuNzE4NzUgQyA3NTQuNTg2NTcsLTIxNi42MTEwNiA3NTIuNDU4MDYsLTIxNi4yMTk5NSA3NTAuNTkzNzUsLTIxNS41IEMgNzQ3LjcyNTU3LC0yMTQuMzkyNCA3NDUuOTY5OTUsLTIxMy43MTg0NCA3NDQuMTU2MjUsLTIxMy4wMzEyNSBDIDc0My41Mzk1OSwtMjEyLjc5NzYyIDc0My4xNTk4NCwtMjEyLjU4OTIyIDc0Mi44NzUsLTIxMi40Mzc1IEMgNzQyLjg3NSwtMjEyLjQzNzUgNzQyLjg3NSwtMjExLjM0Mzc1IDc0Mi44NzUsLTIxMS4zNDM3NSBDIDc0Mi45ODY3OCwtMjExLjU2NjExIDc0My4yNjA5OSwtMjEyLjE2MTE4IDc0My43ODEyNSwtMjEyLjQzNzUgQyA3NDQuNDc5MjIsLTIxMi44MDgyMiA3NDguNTk0ODgsLTIxNC40MzA4NyA3NTAuNTkzNzUsLTIxNS4xNTYyNSBDIDc1Mi4yNTA2MSwtMjE1Ljc1NzUgNzU0Ljc0NzY0LC0yMTYuNDg0OTMgNzU2LjU2MjUsLTIxNi40Njg3NSBDIDc1Ni44NjQxMiwtMjE2LjQ2NjA2IDc1Ny4xNTAxMiwtMjE2LjQxNzg1IDc1Ny40MDYyNSwtMjE2LjM3NSBDIDc1OS4yNDg3NCwtMjE2LjA2Njc1IDc2NC44NzUsLTIxNC44MTI1IDc2NC44NzUsLTIxNC44MTI1IEMgNzY0Ljg3NDk5LC0yMTQuODEyNSA3NTguNjQxNTEsLTIxNi40NTkyNSA3NTcuODQzNzUsLTIxNi42NTYyNSBDIDc1Ny42NTI5NiwtMjE2LjcwMzM2IDc1Ny4zMDgwMywtMjE2LjcyNDk3IDc1Ni44NzUsLTIxNi43MTg3NSBDIDc1OC4wMjA0NiwtMjE3LjU4ODQ2IDc2MS42MzYsLTIxOS4xMTIyNiA3NjQuMjE4NzUsLTIyMC4xNTYyNSBDIDc2Ny4wNTY5NywtMjIxLjMwMzUyIDc2Ny4zMzU1NiwtMjIxLjQwODA3IDc2OS4yODEyNSwtMjIxLjgxMjUgQyA3NzEuMjg5NTUsLTIyMi4yMjk5NCA3NzIuNDM3NSwtMjIyLjMxMjUgNzcyLjQzNzUsLTIyMi4zMTI1IEMgNzcyLjQzNzUsLTIyMi4zMTI0OSA3NzIuMzU1MTQsLTIyMi45MTM2NCA3NzMuNDA2MjUsLTIyMy40Mzc1IEMgNzc0LjExMTM1LC0yMjMuNzg4OTEgNzc4LjI5MzI3LC0yMjUuMzI5OSA3ODAuMzEyNSwtMjI2IEMgNzgyLjI2NDQsLTIyNi42NDc3MyA3ODUuMzY5OSwtMjI3LjM1ODUgNzg3LjE4NzUsLTIyNyBDIDc4OS4wNTA3MywtMjI2LjYzMjUgNzk0LjcxODc1LC0yMjUuMTg3NSA3OTQuNzE4NzUsLTIyNS4xODc1IEMgNzk0LjcxODc2LC0yMjUuMTg3NSA3ODguNDMxNzUsLTIyNy4wNTg2MSA3ODcuNjI1LC0yMjcuMjgxMjUgQyA3ODcuNDMyMDgsLTIyNy4zMzQ1IDc4Ny4wOTQxNiwtMjI3LjM2NzI5IDc4Ni42NTYyNSwtMjI3LjM3NSBDIDc4Ny44MTQ1OSwtMjI4LjIwNzg4IDc5MS40NTA2OSwtMjI5LjU3MDMyIDc5NC4wNjI1LC0yMzAuNTMxMjUgQyA3OTYuOTMyNjYsLTIzMS41ODcyNiA3OTcuMjI5ODQsLTIzMS42OTMwNSA3OTkuMTg3NSwtMjMyLjA2MjUgQyA4MDEuMDQwOTksLTIzMi40MTIyOSA4MDIuMDQ2MzQsLTIzMi40ODc5OCA4MDIuMjE4NzUsLTIzMi41IEMgODAyLjMzMjM1LC0yMzIuNzE3MjQgODAyLjU5NjIsLTIzMy4zMTAwMiA4MDMuMTI1LC0yMzMuNTYyNSBDIDgwMy44MzQ0NCwtMjMzLjkwMTI0IDgwOC4wNTEwNywtMjM1LjI3NTI1IDgxMC4wOTM3NSwtMjM1Ljg3NSBDIDgxMS43ODY5MiwtMjM2LjM3MjExIDgxNC4zMzQ1MiwtMjM2LjkxMTc3IDgxNi4xODc1LC0yMzYuNzgxMjUgQyA4MTYuNDk1NDUsLTIzNi43NTk1NyA4MTYuODAwOTksLTIzNi42ODM5OSA4MTcuMDYyNSwtMjM2LjYyNSBDIDgxOC45NDM2OCwtMjM2LjIwMDY4IDgyNC42NTYyNSwtMjM0LjU5Mzc1IDgyNC42NTYyNSwtMjM0LjU5Mzc1IEMgODI0LjY1NjI2LC0yMzQuNTkzNzUgODE4LjMxNDUxLC0yMzYuNjU5IDgxNy41LC0yMzYuOTA2MjUgQyA4MTcuMzA1MjEsLTIzNi45NjUzOSA4MTYuOTQyMTIsLTIzNy4wMTAxOSA4MTYuNSwtMjM3LjAzMTI1IEMgODE3LjY2OTQ5LC0yMzcuODI4OCA4MjEuMzYzMDIsLTIzOS4wODc0NyA4MjQsLTIzOS45Njg3NSBDIDgyNi44OTc4MSwtMjQwLjkzNzIyIDgyNy4yMzMwMSwtMjQwLjk3MjA3IDgyOS4yMTg3NSwtMjQxLjI1IEMgODMxLjI2ODQsLTI0MS41MzY4OSA4MzIuNDA2MjUsLTI0MS41NjI1IDgzMi40MDYyNSwtMjQxLjU2MjUgQyA4MzIuNDA2MjMsLTI0MS41NjI1IDgzMi4zMzM1LC0yNDIuMTY5NDcgODMzLjQwNjI1LC0yNDIuNjI1IEMgODM0LjEyNTg1LC0yNDIuOTMwNTcgODM4LjM5NzIzLC0yNDQuMTI1NzUgODQwLjQ2ODc1LC0yNDQuNjI1IEMgODQyLjQ3MTE5LC0yNDUuMTA3NTggODQ1LjY2NzI0LC0yNDUuNTUzMjkgODQ3LjUzMTI1LC0yNDUuMDMxMjUgQyA4NDkuNDQyMDMsLTI0NC40OTYxIDg1NS4yNSwtMjQyLjUzMTI1IDg1NS4yNSwtMjQyLjUzMTI1IEMgODU1LjI1LC0yNDIuNTMxMjUgODQ4LjgyNzM0LC0yNDQuOTU0NzYgODQ4LC0yNDUuMjUgQyA4NDcuODAyMTYsLTI0NS4zMjA2MSA4NDcuNDE3ODQsLTI0NS4zOTAzOSA4NDYuOTY4NzUsLTI0NS40Mzc1IEMgODQ4LjE1NjY1LC0yNDYuMTY2MTUgODUxLjg4NDAyLC0yNDcuMjExNTggODU0LjU2MjUsLTI0Ny45Mzc1IEMgODU3LjUwNTkyLC0yNDguNzM1MjUgODU3Ljg1NDU4LC0yNDguNzA4MzMgODU5Ljg3NSwtMjQ4Ljg0Mzc1IEMgODYxLjc4Nzg5LC0yNDguOTcxOTggODYyLjgyMjA1LC0yNDguOTE0ODQgODYzLC0yNDguOTA2MjUgQyA4NjMuMTE3MjgsLTI0OS4xMDk5MSA4NjMuMzkxNzYsLTI0OS42ODU3MyA4NjMuOTM3NSwtMjQ5Ljg3NSBDIDg2NC42Njk2OSwtMjUwLjEyODk0IDg2OS4wMTYwMiwtMjUwLjkyMjg5IDg3MS4xMjUsLTI1MS4yNSBDIDg3Mi44NzMxMywtMjUxLjUyMTExIDg3NS41MjU4OCwtMjUxLjczNDcgODc3LjQzNzUsLTI1MS4zNDM3NSBDIDg3Ny43NTUxNiwtMjUxLjI3ODc5IDg3OC4wNDI3MiwtMjUxLjE1ODI0IDg3OC4zMTI1LC0yNTEuMDYyNSBDIDg4MC4yNTMyNCwtMjUwLjM3Mzc3IDg4Ni4xNTYyNSwtMjQ3Ljk2ODc1IDg4Ni4xNTYyNSwtMjQ3Ljk2ODc1IEMgODg2LjE1NjI2LC0yNDcuOTY4NzUgODc5LjYyMTU0LC0yNTAuOTE5NTIgODc4Ljc4MTI1LC0yNTEuMjgxMjUgQyA4NzguNTgwMjgsLTI1MS4zNjc3NiA4NzguMjA2MTIsLTI1MS40NDgwNCA4NzcuNzUsLTI1MS41MzEyNSBDIDg3OC45NTY1LC0yNTIuMTY0NDMgODgyLjc3OTU2LC0yNTIuOTI2ODUgODg1LjUsLTI1My40Mzc1IEMgODg4LjQ4OTUzLC0yNTMuOTk4NjkgODg4LjgwMDIzLC0yNTMuOTY3MDQgODkwLjg0Mzc1LC0yNTMuOTY4NzUgQyA4OTIuOTUzMDEsLTI1My45NzA1MiA4OTQuMTU2MjUsLTI1My44NDM3NSA4OTQuMTU2MjUsLTI1My44NDM3NSBDIDg5NC4xNTYyNSwtMjUzLjg0Mzc0IDg5NC4wODM1NCwtMjU0LjQ3NDk0IDg5NS4xODc1LC0yNTQuNzgxMjUgQyA4OTUuOTI4MDIsLTI1NC45ODY3MiA5MDAuMzEzNjIsLTI1NS42MTUxMiA5MDIuNDM3NSwtMjU1Ljg0Mzc1IEMgOTA0LjQ5MDUyLC0yNTYuMDY0NzQgOTA3Ljc1NjEzLC0yNTYuMDk1OTcgOTA5LjY1NjI1LC0yNTUuMzc1IEMgOTExLjYwNDA0LC0yNTQuNjM1OTMgOTE3LjUsLTI1MiA5MTcuNSwtMjUyIEMgOTE3LjUwMDAyLC0yNTIgOTEwLjkzNzEyLC0yNTUuMTc4OTcgOTEwLjA5Mzc1LC0yNTUuNTYyNSBDIDkwOS44OTIwNywtMjU1LjY1NDIzIDkwOS41NTE1NCwtMjU1Ljc0ODcxIDkwOS4wOTM3NSwtMjU1Ljg0Mzc1IEMgOTEwLjMwNDY3LC0yNTYuNDQ1NjMgOTE0LjA3ODE3LC0yNTcuMDkyNTkgOTE2LjgxMjUsLTI1Ny41IEMgOTE5LjgxNzMsLTI1Ny45NDc3MiA5MjAuMTM4MDEsLTI1Ny45NTE3IDkyMi4xODc1LC0yNTcuOTA2MjUgQyA5MjQuMTI3OTUsLTI1Ny44NjMyMyA5MjUuMTk0NDksLTI1Ny43MTIwMiA5MjUuMzc1LC0yNTcuNjg3NSBDIDkyNS40OTM5MiwtMjU3Ljg4MDY2IDkyNS43NTg5LC0yNTguNDUzMzMgOTI2LjMxMjUsLTI1OC41OTM3NSBDIDkyNy4wNTUyMSwtMjU4Ljc4MjEzIDkzMS40NjY3OSwtMjU5LjMyODAzIDkzMy41OTM3NSwtMjU5LjUzMTI1IEMgOTM1LjM1Njc4LC0yNTkuNjk5NjcgOTM4LjAxMzg0LC0yNTkuNzY1NTQgOTM5LjkzNzUsLTI1OS4yODEyNSBDIDk0MC4yNTcxOCwtMjU5LjIwMDc3IDk0MC41NDEwMSwtMjU5LjA3NzY2IDk0MC44MTI1LC0yNTguOTY4NzUgQyA5NDIuNzY1NDMsLTI1OC4xODUyNiA5NDguNzE4NzUsLTI1NS41IDk0OC43MTg3NSwtMjU1LjUgQyA5NDguNzE4NzMsLTI1NS41IDk0Mi4xMjY4NCwtMjU4Ljc1MzQ4IDk0MS4yODEyNSwtMjU5LjE1NjI1IEMgOTQxLjA3OTAzLC0yNTkuMjUyNTcgOTQwLjcwODk5LC0yNTkuMzYzMjggOTQwLjI1LC0yNTkuNDY4NzUgQyA5NDEuNDY0MTQsLTI2MC4wNDMwMiA5NDUuMjkzNjYsLTI2MC41OTA5NCA5NDguMDMxMjUsLTI2MC45Njg3NSBDIDk1MS4wMzk2MywtMjYxLjM4Mzk1IDk1MS4zNTQzMiwtMjYxLjQxMTM4IDk1My40MDYyNSwtMjYxLjM0Mzc1IEMgOTU1LjUyNDIzLC0yNjEuMjczOTQgOTU2LjcxODc1LC0yNjEuMDkzNzUgOTU2LjcxODc1LC0yNjEuMDkzNzUgQyA5NTYuNzE4NzMsLTI2MS4wOTM3NSA5NTYuNjQxNSwtMjYxLjczMTE2IDk1Ny43NSwtMjYyIEMgOTU4LjQ5MzYyLC0yNjIuMTgwMzUgOTYyLjkwMTc2LC0yNjIuNjYzNTUgOTY1LjAzMTI1LC0yNjIuODQzNzUgQyA5NjcuMDg5NzIsLTI2My4wMTc5MiA5NzAuMzc0NDksLTI2Mi45NjgwNyA5NzIuMjgxMjUsLTI2Mi4xODc1IEMgOTc0LjIzNTg0LC0yNjEuMzg3MzQgOTgwLjE1NjI1LC0yNTguNjU2MjUgOTgwLjE1NjI1LC0yNTguNjU2MjUgQyA5ODAuMTU2MjMsLTI1OC42NTYyNSA5NzMuNTk2MzIsLTI2MS45NjUwMSA5NzIuNzUsLTI2Mi4zNzUgQyA5NzIuNTQ3NjMsLTI2Mi40NzMwNSA5NzIuMTc4MTQsLTI2Mi41NzgxIDk3MS43MTg3NSwtMjYyLjY4NzUgQyA5NzIuOTMzOTIsLTI2My4yNTE0IDk3Ni43Mjg4MywtMjYzLjgwMTggOTc5LjQ2ODc1LC0yNjQuMTU2MjUgQyA5ODIuNDc5NjYsLTI2NC41NDU3NyA5ODIuNzkwMDYsLTI2NC41NTM5IDk4NC44NDM3NSwtMjY0LjQ2ODc1IEMgOTg2Ljc4ODE0LC0yNjQuMzg4MTUgOTg3Ljg1MDM4LC0yNjQuMjE1NTEgOTg4LjAzMTI1LC0yNjQuMTg3NSBDIDk4OC4xNTA0MSwtMjY0LjM3ODM2IDk4OC40MTQwMiwtMjY0LjkzMjgxIDk4OC45Njg3NSwtMjY1LjA2MjUgQyA5ODkuNzEzMDEsLTI2NS4yMzY1IDk5NC4xMTg2OCwtMjY1LjcxMjk3IDk5Ni4yNSwtMjY1Ljg3NSBDIDk5OC4wMTY2MiwtMjY2LjAwOTI3IDEwMDAuNjk5NywtMjY2LjAwMDcxIDEwMDIuNjI1LC0yNjUuNSBDIDEwMDIuOTQ1LC0yNjUuNDE2NzkgMTAwMy4yMjgzLC0yNjUuMjk4NzMgMTAwMy41LC0yNjUuMTg3NSBDIDEwMDUuNDU0NiwtMjY0LjM4NzM0IDEwMTEuNDA2MywtMjYxLjYyNSAxMDExLjQwNjMsLTI2MS42MjUgQyAxMDExLjQwNjIsLTI2MS42MjUgMTAwNC44MTUxLC0yNjQuOTY1MDEgMTAwMy45Njg4LC0yNjUuMzc1IEMgMTAwMy43NjY0LC0yNjUuNDczMDUgMTAwMy4zOTY5LC0yNjUuNTc4MTEgMTAwMi45Mzc1LC0yNjUuNjg3NSBDIDEwMDQuMTUyNiwtMjY2LjI1MTQgMTAwNy45Nzg4LC0yNjYuNzcwNTYgMTAxMC43MTg4LC0yNjcuMTI1IEMgMTAxMy43Mjk3LC0yNjcuNTE0NTMgMTAxNC4wNzEzLC0yNjcuNTUzOSAxMDE2LjEyNSwtMjY3LjQ2ODc1IEMgMTAxOC4yNDQ3LC0yNjcuMzgwODcgMTAxOS40Mzc1LC0yNjcuMTU2MjUgMTAxOS40Mzc1LC0yNjcuMTU2MjUgQyAxMDE5LjQzNzUsLTI2Ny4xNTYyNSAxMDE5LjM1OTEsLTI2Ny44MDUyNyAxMDIwLjQ2ODgsLTI2OC4wNjI1IEMgMTAyMS4yMTMxLC0yNjguMjM1MDYgMTAyNS42MTgzLC0yNjguNjg1ODYgMTAyNy43NSwtMjY4Ljg0Mzc1IEMgMTAyOS44MTA2LC0yNjguOTk2MzUgMTAzMy4wOTI5LC0yNjguOTQwNTIgMTAzNSwtMjY4LjE1NjI1IEMgMTAzNi45NTUsLTI2Ny4zNTIzIDEwNDIuODc1LC0yNjQuNjU2MjUgMTA0Mi44NzUsLTI2NC42NTYyNSBDIDEwNDIuODc1LC0yNjQuNjU2MjUgMTAzNi4zMTUyLC0yNjcuOTMyMTIgMTAzNS40Njg4LC0yNjguMzQzNzUgQyAxMDM1LjI2NjMsLTI2OC40NDIxOSAxMDM0Ljg5NywtMjY4LjU0NTk3IDEwMzQuNDM3NSwtMjY4LjY1NjI1IEMgMTAzNS42NTI5LC0yNjkuMjE3NzkgMTAzOS40NDk0LC0yNjkuNzg0MDMgMTA0Mi4xODc1LC0yNzAuMTU2MjUgQyAxMDQ1LjE5NjUsLTI3MC41NjUzIDEwNDUuNTEwMiwtMjcwLjU3MTgzIDEwNDcuNTYyNSwtMjcwLjUgQyAxMDQ5LjUwNTYsLTI3MC40MzIwMSAxMDUwLjU2OTcsLTI3MC4zMzUxNSAxMDUwLjc1LC0yNzAuMzEyNSBDIDEwNTAuODY4OCwtMjcwLjUwNjkgMTA1MS4xMzQ2LC0yNzEuMDQxMzEgMTA1MS42ODc1LC0yNzEuMTg3NSBDIDEwNTIuNDI5MywtMjcxLjM4MzYyIDEwNTYuODE4NiwtMjcyLjAxNjI4IDEwNTguOTM3NSwtMjcyLjI4MTI1IEMgMTA2MC42OTM5LC0yNzIuNTAwODYgMTA2My4zNDI4LC0yNzIuNjEzNTYgMTA2NS4yNSwtMjcyLjI1IEMgMTA2NS41NjY5LC0yNzIuMTg5NTkgMTA2NS44NTU4LC0yNzIuMDYwNjIgMTA2Ni4xMjUsLTI3MS45Njg3NSBDIDEwNjguMDYxMiwtMjcxLjMwNzgzIDEwNzMuOTY4OCwtMjY5LjAzMTI1IDEwNzMuOTY4OCwtMjY5LjAzMTI1IEMgMTA3My45Njg3LC0yNjkuMDMxMjUgMTA2Ny40MzIxLC0yNzEuODM3OCAxMDY2LjU5MzgsLTI3Mi4xODc1IEMgMTA2Ni4zOTMzLC0yNzIuMjcxMTMgMTA2Ni4wMTc2LC0yNzIuMzYwODMgMTA2NS41NjI1LC0yNzIuNDM3NSBDIDEwNjYuNzY2MiwtMjczLjA4Nzk2IDEwNzAuNTgxNiwtMjczLjgwOTQ1IDEwNzMuMjgxMywtMjc0LjQzNzUgQyAxMDc2LjI0OCwtMjc1LjEyNzcgMTA3Ni41NzAyLC0yNzUuMTkyNTcgMTA3OC41OTM4LC0yNzUuMzEyNSBDIDEwODAuNjgyNCwtMjc1LjQzNjMgMTA4MS44NzUsLTI3NS4zNDM3NSAxMDgxLjg3NSwtMjc1LjM0Mzc1IEMgMTA4MS44NzUsLTI3NS4zNDM3NCAxMDgxLjc4OCwtMjc1Ljk3NTggMTA4Mi44NzUsLTI3Ni4zNzUgQyAxMDgzLjYwNDIsLTI3Ni42NDI4IDEwODcuOTIyMiwtMjc3LjcxMjk3IDEwOTAsLTI3OC4xODc1IEMgMTA5Mi4wMDg1LC0yNzguNjQ2MTkgMTA5NS4xNjc5LC0yNzkuMjE2OCAxMDk3LC0yNzguODEyNSBDIDEwOTguODc4MSwtMjc4LjM5ODA0IDExMTAuNTc4MiwtMjc1Ljc5Njg3IDExMTAuNTc4MiwtMjc1Ljc5Njg3IEMgMTExMC41NzgyLC0yNzUuNzk2ODcgMTA5OC4yNTA3LC0yNzguODE5NTMgMTA5Ny40Mzc1LC0yNzkuMDYyNSBDIDEwOTcuMjQzLC0yNzkuMTIwNjIgMTA5Ni44Nzg5LC0yNzkuMTY4NzYgMTA5Ni40Mzc1LC0yNzkuMTg3NSBDIDEwOTcuNjA1MSwtMjc5Ljk5MTE5IDEwOTkuOTUxNywtMjgwLjg3NDggMTEwMi41NDY5LC0yODEuODkwNjIgQyAxMTA0LjIyODMsLTI4Mi41NDg4IDExMDMuNDcwNiwtMjgyLjI2NzIxIDExMDUuMzIyOCwtMjgyLjg5NDIyIEMgMTEwNy4wNzY0LC0yODMuNDg3ODggMTEwNy44MDgyLC0yODMuOTA0OTMgMTEwNy45NTMyLC0yODQuMDA3MjEgQyAxMTA4LjI5OTMsLTI4NC4yMTM3MiAxMTA3LjU5NzIsLTI4NC4xMjkwOSAxMTA3LjQwOSwtMjg0LjA0OTYxIHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjcwMDEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenNjc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3NjY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY2MiIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODA5NSIKKyAgICAgICAgICAgZD0iTSAxMDgyLjYyNSwtMjc1LjEyNSBDIDEwODQuNDk4LC0yNzQuNzMxNTIgMTA4Ny4xMjExLC0yNzMuOTc5NDUgMTA4OC42NTYzLC0yNzMuMTU2MjUgQyAxMDkwLjE5MTUsLTI3Mi4zMzMwNiAxMDkxLjQ3ODUsLTI3Mi4xMDAyNSAxMDk0LjAzMTMsLTI3MC42NTYyNSBDIDEwOTYuNTU3OSwtMjY5LjIyNjk5IDEwOTguODI3MSwtMjY4LjY0OTI5IDExMDEsLTI2OC4xMjUgQyAxMTAzLjM0NzYsLTI2Ny41NTg1OCAxMTA2LjQzNTQsLTI2Ny40MDk3NyAxMTA5Ljg0MzgsLTI2Ni45Mzc1IEMgMTEwOC43NTQ5LC0yNjcuNzc3MjUgMTEwMy4yMzY0LC0yNjguMTA5OTUgMTEwMS40Mzc1LC0yNjguNSBDIDEwOTkuNjM4NiwtMjY4Ljg5MDA2IDEwOTcuNTQzNCwtMjY5LjUxNjE2IDEwOTQuODQzOCwtMjcwLjgxMjUgQyAxMDkyLjE0NDEsLTI3Mi4xMDg4NCAxMDkxLjM0OTQsLTI3Mi42MTE0NiAxMDg5LjAzMTMsLTI3My41IEMgMTA4Ni43MTMxLC0yNzQuMzg4NTQgMTA4NS4wMjY5LC0yNzQuODgzMTQgMTA4Mi42MjUsLTI3NS4xMjUgeiIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNjk0OSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgwOTciCisgICAgICAgICAgIGQ9Ik0gMTA1MS40Njg4LC0yNzAgQyAxMDUzLjM3NDEsLTI2OS40MjI0MSAxMDU1Ljk5NjksLTI2OC4zODQyOCAxMDU3LjU2MjUsLTI2Ny40MDYyNSBDIDEwNTkuMTI4MSwtMjY2LjQyODIzIDEwNjAuNDQyNywtMjY2LjA0NjQ0IDEwNjMuMDYyNSwtMjY0LjI4MTI1IEMgMTA2NS42NTU1LC0yNjIuNTM0MDkgMTA2OC4wNDg0LC0yNjEuNTcxOTggMTA3MC4zMTI1LC0yNjAuNjg3NSBDIDEwNzIuNzU4NiwtMjU5LjczMTkzIDEwNzUuOTk1MSwtMjU5LjAzMDM3IDEwNzkuNzE4OCwtMjU3LjYyNSBDIDEwNzguNTI5MiwtMjU4Ljc2Mjg0IDEwNzIuNjU1NywtMjYwLjMxMTc1IDEwNzAuNzgxMywtMjYxIEMgMTA2OC45MDY4LC0yNjEuNjg4MjUgMTA2Ni42OTk1LC0yNjIuNTY2MiAxMDYzLjkwNjMsLTI2NC4yODEyNSBDIDEwNjEuMTEzLC0yNjUuOTk2MjkgMTA2MC4zMzI3LC0yNjYuNTY1MTUgMTA1Ny45Njg4LC0yNjcuNjg3NSBDIDEwNTUuNjA0NywtMjY4LjgwOTg0IDEwNTMuOTEyMSwtMjY5LjUyMjA1IDEwNTEuNDY4OCwtMjcwIHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5NjEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MDk5IgorICAgICAgICAgICBkPSJNIDEwMjAuMjE4OCwtMjY2Ljg0Mzc1IEMgMTAyMi4xMzA3LC0yNjYuMjA1NjQgMTAyNC44LC0yNjUuMDg4MzkgMTAyNi4zNzUsLTI2NC4wMzEyNSBDIDEwMjcuOTUwMSwtMjYyLjk3NDEgMTAyOS4yNzA2LC0yNjIuNTIyNTggMTAzMS45MDYzLC0yNjAuNjI1IEMgMTAzNC41MTQ5LC0yNTguNzQ2NzkgMTAzNi45MzQ3LC0yNTcuNTk0OTcgMTAzOS4yMTg4LC0yNTYuNTYyNSBDIDEwNDEuNjg2NSwtMjU1LjQ0NzA1IDEwNDQuOTgzMywtMjU0LjM4OTIgMTA0OC43NSwtMjUyLjcxODc1IEMgMTA0Ny41NDY3LC0yNTMuOTQxMjggMTA0MS41NDcyLC0yNTYuMDMyOTggMTAzOS42NTYzLC0yNTYuODQzNzUgQyAxMDM3Ljc2NTMsLTI1Ny42NTQ1MiAxMDM1LjU5MTQsLTI1OC43Mzc1NCAxMDMyLjc4MTMsLTI2MC41OTM3NSBDIDEwMjkuOTcxMSwtMjYyLjQ0OTk1IDEwMjkuMTU5NSwtMjYzLjA3MDY4IDEwMjYuNzgxMywtMjY0LjMxMjUgQyAxMDI0LjQwMywtMjY1LjU1NDMgMTAyMi42NzA2LC0yNjYuMjg4MTkgMTAyMC4yMTg4LC0yNjYuODQzNzUgeiIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNjk1Nyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxMDEiCisgICAgICAgICAgIGQ9Ik0gMTExMC4xNzE5LC0yNjYuODkwNjMgQyAxMTEwLjMyMjcsLTI2Ni44NDIwNyAxMTEwLjg1OTksLTI2Ni4yNTk2MyAxMTEwLjI4MTMsLTI2NS40MDYyNSBDIDExMDkuNDcxMiwtMjY0LjIxMTY2IDExMDQuNTc2NCwtMjYyLjA4MTk2IDExMDEuNzE4OCwtMjYxLjI4MTI1IEMgMTA5OC44NzM5LC0yNjAuNDg0MTMgMTA5NS40Mjg3LC0yNjAuMzAzNTEgMTA5MS4xNTYzLC0yNjEuNjU2MjUgQyAxMDg2Ljg1NDcsLTI2My4wMTgyIDEwODUuNjg2NiwtMjY0LjEyNDk3IDEwODAuNSwtMjY1Ljk2ODc1IEMgMTA4NS4xNjQsLTI2My44NTM1OCAxMDg2LjY5NTMsLTI2Mi4wMTY0MiAxMDkwLjYyNSwtMjYwLjYyNSBDIDEwOTIuMjQ1NywtMjYwLjA1MTEzIDEwOTMuOTkyMSwtMjU5LjY4NTQgMTA5NS42ODc1LC0yNTkuNTkzNzUgQyAxMDk1LjI0MjQsLTI1OS4yNjgxMiAxMDk0LjE1NzIsLTI1OC42MTA0NSAxMDkyLjEyNSwtMjU4IEMgMTA4OS4zMjk1LC0yNTcuMTYwMzEgMTA4NS40NzU5LC0yNTYuNDY2MjIgMTA4My44NzUsLTI1Ni4zNzUgQyAxMDgyLjM2MDQsLTI1Ni4yODg2OCAxMDgwLjczMywtMjU2Ljg4NzQ5IDEwODAuNDM3NSwtMjU3IEMgMTA4MC42MDQyLC0yNTYuODk2OTIgMTA4MC44MTA3LC0yNTYuNjIyNjYgMTA4MC4xODc1LC0yNTUuOTY4NzUgQyAxMDc5LjI4ODIsLTI1NS4wMjUxMiAxMDc0LjA0MDEsLTI1NC4wNDU3NSAxMDcxLjA2MjUsLTI1My43MTg3NSBDIDEwNjguMDk4MiwtMjUzLjM5MzIgMTA2NC41NDA5LC0yNTMuNzM0NzEgMTA2MC4xNTYzLC0yNTUuNjI1IEMgMTA1Ni4xNzgzLC0yNTcuMzM5OTcgMTA1NC44MTczLC0yNTguNTQwMzYgMTA1MC43NSwtMjYwLjM3NSBDIDEwNTAuNzUsLTI2MC4zNzUgMTA1MC43NSwtMjYwLjIxODc1IDEwNTAuNzUsLTI2MC4yMTg3NSBDIDEwNTQuMzkzMSwtMjU4LjEyMzQ2IDEwNTYuMDM0LC0yNTYuMzM1NDggMTA1OS42MjUsLTI1NC42NTYyNSBDIDEwNjEuMzU1MiwtMjUzLjg0NzE2IDEwNjMuMjE2NywtMjUzLjI0NzQ5IDEwNjUuMDMxMywtMjUyLjkzNzUgQyAxMDY0LjQ5NjQsLTI1Mi42NTA3NCAxMDYzLjQ3MzUsLTI1Mi4yMjU5OSAxMDYxLjU5MzgsLTI1MS45MDYyNSBDIDEwNTguNzI0OCwtMjUxLjQxODI5IDEwNTQuNzg0OCwtMjUxLjA5MDExIDEwNTMuMTU2MywtMjUxLjE1NjI1IEMgMTA1Mi4zMDU2LC0yNTEuMTkwNzkgMTA1MS40Mjc3LC0yNTEuMzQwNjIgMTA1MC43NSwtMjUxLjU2MjUgQyAxMDUwLjA2NTIsLTI1MS43NzczOCAxMDQ5LjU2MDMsLTI1Mi4wMDcxNyAxMDQ5LjQzNzUsLTI1Mi4wNjI1IEMgMTA0OS42MDY5LC0yNTEuOTU1MjkgMTA0OS44Njg2LC0yNTEuNjU5NjIgMTA0OS4yMTg4LC0yNTEuMDMxMjUgQyAxMDQ4LjMwOTEsLTI1MC4xNTE2MyAxMDQyLjk3MjcsLTI0OS42OTQ4NyAxMDM5Ljk2ODgsLTI0OS41NjI1IEMgMTAzNi45NzgzLC0yNDkuNDMwNzEgMTAzMy4zNzk5LC0yNTAuMDEzMTMgMTAyOC45Njg4LC0yNTIuMTI1IEMgMTAyNC41Mjc2LC0yNTQuMjUxMjYgMTAyMy4zMjczLC0yNTUuNTI2NiAxMDE4LjA2MjUsLTI1Ny45MDYyNSBDIDEwMjIuNzk2OCwtMjU1LjMwOTIxIDEwMjQuMzQ5LC0yNTMuMjc3MTUgMTAyOC40MDYzLC0yNTEuMTg3NSBDIDEwMzAuMDc5NiwtMjUwLjMyNTY1IDEwMzEuODkxNSwtMjQ5LjY5MzI1IDEwMzMuNjU2MywtMjQ5LjI1IEMgMTAzMy4xOTMsLTI0OS4wMTY2OCAxMDMyLjA2NjksLTI0OC41NjE4NiAxMDI5Ljk2ODgsLTI0OC4zMTI1IEMgMTAyNy4wODI1LC0yNDcuOTY5NTIgMTAyMy4xMzQyLC0yNDcuODE5NjIgMTAyMS41LC0yNDcuOTM3NSBDIDEwMTkuOTUzOCwtMjQ4LjA0OSAxMDE4LjI2ODgsLTI0OC43OTQ0NiAxMDE3Ljk2ODgsLTI0OC45Mzc1IEMgMTAxOC4xMzc5LC0yNDguODE3MjEgMTAxOC4zODI2LC0yNDguNTI3MDIgMTAxNy43NSwtMjQ3LjkzNzUgQyAxMDE2LjgzNzIsLTI0Ny4wODY3NyAxMDExLjUwNTksLTI0Ni42NzUzOCAxMDA4LjUsLTI0Ni41NjI1IEMgMTAwNS41MDc1LC0yNDYuNDUwMTMgMTAwMS45MTAzLC0yNDcuMDUyOTMgOTk3LjUsLTI0OS4xNTYyNSBDIDk5My40OTg3NSwtMjUxLjA2NDQ4IDk5Mi4xMTE5NywtMjUyLjI5NDA4IDk4OC4wMzEyNSwtMjU0LjI1IEMgOTg4LjAzMTIyLC0yNTQuMjUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgQyA5OTEuNjg2MzEsLTI1MS44ODk4MyA5OTMuMzI1NDYsLTI1MC4wNDEyIDk5Ni45Mzc1LC0yNDguMTg3NSBDIDk5OC42Nzc3OSwtMjQ3LjI5NDM1IDEwMDAuNTc0NSwtMjQ2LjY1OTIzIDEwMDIuNDA2MywtMjQ2LjIxODc1IEMgMTAwMS44NjYzLC0yNDUuOTcwNDUgMTAwMC44MjgyLC0yNDUuNjAzNDIgOTk4LjkzNzUsLTI0NS4zNzUgQyA5OTYuMDUxODIsLTI0NS4wMjY0MiA5OTIuMDcxNDUsLTI0NC44NTQwNSA5OTAuNDM3NSwtMjQ0Ljk2ODc1IEMgOTg5LjU4NDA1LC0yNDUuMDI4NjUgOTg4LjcxMTE5LC0yNDUuMjI2NjYgOTg4LjAzMTI1LC0yNDUuNDY4NzUgQyA5ODcuMzQ0MTUsLTI0NS43MDQwNSA5ODYuODQxOSwtMjQ1Ljk0MTAxIDk4Ni43MTg3NSwtMjQ2IEMgOTg2Ljg4ODczLC0yNDUuODg3NzMgOTg3LjE4MzIzLC0yNDUuNTc3NzUgOTg2LjUzMTI1LC0yNDQuOTY4NzUgQyA5ODUuNjE4NiwtMjQ0LjExNjI1IDk4MC4yNTU5MiwtMjQzLjY3NTM4IDk3Ny4yNSwtMjQzLjU2MjUgQyA5NzQuMjU3NTQsLTI0My40NTAxMyA5NzAuNjU2NTQsLTI0NC4wOTA1NSA5NjYuMjUsLTI0Ni4xNTYyNSBDIDk2MS44MTM0NywtMjQ4LjIzNjAzIDk2MC42MDMxMiwtMjQ5LjQ4Nzk2IDk1NS4zNDM3NSwtMjUxLjgxMjUgQyA5NjAuMDczMTMsLTI0OS4yNjUwMSA5NjEuNjM0NDksLTI0Ny4yMzQ3IDk2NS42ODc1LC0yNDUuMTg3NSBDIDk2Ny4zNTkwNSwtMjQ0LjM0MzE3IDk2OS4xNzMwNCwtMjQzLjcyMTA3IDk3MC45Mzc1LC0yNDMuMjgxMjUgQyA5NzAuNDc0MjcsLTI0My4wNDcwMyA5NjkuMzQ3OCwtMjQyLjU5NzE4IDk2Ny4yNSwtMjQyLjM0Mzc1IEMgOTY0LjM2NDMxLC0yNDEuOTk1MTcgOTYwLjQxMzgsLTI0MS43NzQyMyA5NTguNzgxMjUsLTI0MS44NzUgQyA5NTcuMjM2NjksLTI0MS45NzAzMiA5NTUuNTgwOTQsLTI0Mi43MDM4NSA5NTUuMjgxMjUsLTI0Mi44NDM3NSBDIDk1NS40NTAyNCwtMjQyLjcyNTIyIDk1NS42NjMxNywtMjQyLjQzOTkgOTU1LjAzMTI1LC0yNDEuODQzNzUgQyA5NTQuMTE5MzksLTI0MC45ODM0NyA5NDguNzg0NiwtMjQwLjUxMzUgOTQ1Ljc4MTI1LC0yNDAuMzc1IEMgOTQyLjc5MTMsLTI0MC4yMzcxIDkzOS4yMTM4LC0yNDAuODI1NjggOTM0LjgxMjUsLTI0Mi44NDM3NSBDIDkzMC44MTk0MiwtMjQ0LjY3NDY0IDkyOS40NDczOSwtMjQ1Ljg3Mjk1IDkyNS4zNzUsLTI0Ny43NSBDIDkyNS4zNzQ5OCwtMjQ3Ljc1IDkyNS4zNzUsLTI0Ny41OTM3NSA5MjUuMzc1LC0yNDcuNTkzNzUgQyA5MjkuMDIyNjEsLTI0NS40NjA0OCA5MzAuNjQ1MzMsLTI0My42NTg4OCA5MzQuMjUsLTI0MS44NzUgQyA5MzUuOTg2NzUsLTI0MS4wMTU0OSA5MzcuODU3MjcsLTI0MC40MjQ4NiA5MzkuNjg3NSwtMjQwIEMgOTM5LjE0ODAzLC0yMzkuNzQ3MSA5MzguMTM2ODcsLTIzOS4zNTg3MSA5MzYuMjUsLTIzOS4wOTM3NSBDIDkzMy4zNzAyMiwtMjM4LjY4OTM5IDkyOS40MTE4NywtMjM4LjQ0ODEzIDkyNy43ODEyNSwtMjM4LjUzMTI1IEMgOTI2LjkyOTUzLC0yMzguNTc0NjYgOTI2LjA1MzU1LC0yMzguNzM5OCA5MjUuMzc1LC0yMzguOTY4NzUgQyA5MjQuNjg5MzEsLTIzOS4xOTA3NiA5MjQuMTg1NCwtMjM5LjQxMjE0IDkyNC4wNjI1LC0yMzkuNDY4NzUgQyA5MjQuMjMyMDksLTIzOS4zNTk3NiA5MjQuNDk0NCwtMjM5LjA1OTEgOTIzLjg0Mzc1LC0yMzguNDM3NSBDIDkyMi45MzI5NiwtMjM3LjU2NzM2IDkxNy41OTM1NCwtMjM3LjA0NTk4IDkxNC41OTM3NSwtMjM2Ljg3NSBDIDkxMS42MDc0MiwtMjM2LjcwNDc5IDkwOC4wMTk5NCwtMjM3LjE5MDc3IDkwMy42MjUsLTIzOS4xNTYyNSBDIDg5OS4yMDAxMSwtMjQxLjEzNTEzIDg5OC4wMTkwNCwtMjQyLjM4NDQ0IDg5Mi43ODEyNSwtMjQ0LjUzMTI1IEMgODk3LjQ5MTIyLC0yNDIuMTQzNTggODk5LjA1MTQyLC0yNDAuMTQyNTIgOTAzLjA5Mzc1LC0yMzguMTg3NSBDIDkwNC43NjA5LC0yMzcuMzgxMTkgOTA2LjU1NDE4LC0yMzYuNzkwOTIgOTA4LjMxMjUsLTIzNi40MDYyNSBDIDkwNy44NTA4NywtMjM2LjE1NzU1IDkwNi43MTU1LC0yMzUuNjk0IDkwNC42MjUsLTIzNS4zNzUgQyA5MDEuNzQ5NCwtMjM0LjkzNjI0IDg5Ny44NDQ2LC0yMzQuNjQxOSA4OTYuMjE4NzUsLTIzNC42ODc1IEMgODk0LjY4MDUyLC0yMzQuNzMwNjIgODkyLjk4NTk1LC0yMzUuNDMyNzIgODkyLjY4NzUsLTIzNS41NjI1IEMgODkyLjg1NTgzLC0yMzUuNDQ5NjggODkzLjA5ODA3LC0yMzUuMTQ4NzUgODkyLjQ2ODc1LC0yMzQuNTMxMjUgQyA4OTEuNTYwNjMsLTIzMy42NDAxNSA4ODYuMjY1OCwtMjMzLjAwMyA4ODMuMjgxMjUsLTIzMi43MTg3NSBDIDg4MC4zMTAwNywtMjMyLjQzNTc3IDg3Ni43MDc4MywtMjMyLjg5NDU1IDg3Mi4zNDM3NSwtMjM0LjY1NjI1IEMgODY4LjM4NDQxLC0yMzYuMjU0NTYgODY3LjAxNDYsLTIzNy40NTExMiA4NjMsLTIzOC45Njg3NSBDIDg2My4wMDAwMywtMjM4Ljk2ODc1IDg2MywtMjM4LjgxMjUgODYzLC0yMzguODEyNSBDIDg2Ni41OTU5LC0yMzcuMDAxMTUgODY4LjIzODMxLC0yMzUuMjMwMTcgODcxLjgxMjUsLTIzMy42NTYyNSBDIDg3My41MzQ1NywtMjMyLjg5NzkgODc1LjM5OTk4LC0yMzIuMzY3MyA4NzcuMjE4NzUsLTIzMi4wMzEyNSBDIDg3Ni42ODI2NiwtMjMxLjc1MjE3IDg3NS42NTIxNywtMjMxLjM0MzYyIDg3My43ODEyNSwtMjMwLjk2ODc1IEMgODcwLjkyNTg2LC0yMzAuMzk2NjUgODY2Ljk5MTgzLC0yMjkuOTQ5MzYgODY1LjM3NSwtMjI5LjkzNzUgQyA4NjQuNTMwNDksLTIyOS45MzEyOSA4NjMuNjY4OTIsLTIzMC4wMTg0NCA4NjMsLTIzMC4xODc1IEMgODYyLjMyNDA5LC0yMzAuMzQ5MDEgODYxLjgzOTkxLC0yMzAuNTE2NzMgODYxLjcxODc1LC0yMzAuNTYyNSBDIDg2MS44ODU5NywtMjMwLjQ2ODQ4IDg2Mi4xNDE0MiwtMjMwLjE3OTAyIDg2MS41LC0yMjkuNSBDIDg2MC42MDIxMywtMjI4LjU0OTQ4IDg1NS4zMTM1MiwtMjI3LjU4MjkyIDg1Mi4zNzUsLTIyNy4wNjI1IEMgODQ5LjQ0OTY2LC0yMjYuNTQ0NDEgODQ1Ljk0Mjg1LC0yMjYuNjg4MjYgODQxLjY1NjI1LC0yMjguMDkzNzUgQyA4MzcuMzQwNDUsLTIyOS41MDg4MiA4MzYuMTgzNDgsLTIzMC42MjM2OSA4MzEuMDkzNzUsLTIzMi4wNjI1IEMgODM1LjY3MDYsLTIzMC4zMTE0OSA4MzcuMTgyMywtMjI4LjUwMjQ0IDg0MS4xMjUsLTIyNy4wNjI1IEMgODQyLjc1MTA4LC0yMjYuNDY4NjEgODQ0LjQ5Mzg1LC0yMjYuMTA2ODUgODQ2LjIxODc1LC0yMjUuOTA2MjUgQyA4NDUuNzY1OSwtMjI1LjYwOTIzIDg0NC42NjM5NywtMjI1LjAyMjg2IDg0Mi42MjUsLTIyNC40Mzc1IEMgODM5LjgyMDI4LC0yMjMuNjMyMzMgODM1Ljk4NjE0LC0yMjIuODYxNjcgODM0LjQwNjI1LC0yMjIuNjg3NSBDIDgzMi45MTE1LC0yMjIuNTIyNyA4MzEuMjkwMDIsLTIyMy4wMDQzMSA4MzEsLTIyMy4wOTM3NSBDIDgzMS4xNjM1NiwtMjIzLjAwMzY4IDgzMS4zOTI3OCwtMjIyLjczMzgyIDgzMC43ODEyNSwtMjIyLjAzMTI1IEMgODI5Ljg5ODc4LC0yMjEuMDE3NCA4MjQuNzM2NzMsLTIxOS42NTk2IDgyMS44NDM3NSwtMjE4Ljk2ODc1IEMgODE4Ljk2MzczLC0yMTguMjgwOTcgODE1LjUwODE1LC0yMTguMjA4NzMgODExLjI4MTI1LC0yMTkuNDA2MjUgQyA4MDcuNDQ2NCwtMjIwLjQ5MjcgODA2LjEwODY3LC0yMjEuNDc4NjIgODAyLjIxODc1LC0yMjIuNTMxMjUgQyA4MDIuMjE4NzQsLTIyMi41MzEyNSA4MDIuMjE4NzUsLTIyMi4zNzUgODAyLjIxODc1LC0yMjIuMzc1IEMgODA1LjcwMjkzLC0yMjAuOTgwMTUgODA3LjI4ODE2LC0yMTkuNDU1NiA4MTAuNzUsLTIxOC4zNDM3NSBDIDgxMi40MTc5MywtMjE3LjgwODAzIDgxNC4yMDU3OCwtMjE3LjU1NzAxIDgxNS45Njg3NSwtMjE3LjQ2ODc1IEMgODE1LjQ0OTExLC0yMTcuMTE2NjMgODE0LjQ2ODM2LC0yMTYuNTU0MjMgODEyLjY1NjI1LC0yMTUuOTM3NSBDIDgwOS44OTA1OSwtMjE0Ljk5NjI1IDgwNi4wNjYwMSwtMjE0LjAwMjEzIDgwNC41LC0yMTMuNzgxMjUgQyA4MDMuNjgyMDYsLTIxMy42NjU4NiA4MDIuODY2OSwtMjEzLjY1ODQyIDgwMi4yMTg3NSwtMjEzLjc1IEMgODAxLjU2Mzc5LC0yMTMuODMzMjEgODAxLjA4NjE1LC0yMTMuOTY4MjcgODAwLjk2ODc1LC0yMTQgQyA4MDEuMTMwNzksLTIxMy45MjUzNiA4MDEuNDAyNzQsLTIxMy42NTk1NiA4MDAuNzgxMjUsLTIxMi45MDYyNSBDIDc5OS45MTEyNSwtMjExLjg1MTcyIDc5NC43NzE2MiwtMjEwLjI0NyA3OTEuOTA2MjUsLTIwOS40Njg3NSBDIDc4OS4wNTM3MiwtMjA4LjY5Mzk5IDc4NS42NDcxMywtMjA4LjUxMDU1IDc4MS40Njg3NSwtMjA5LjU2MjUgQyA3NzcuMjYxOTIsLTIxMC42MjE2MyA3NzYuMTEyMDYsLTIxMS42MDQxNiA3NzEuMTI1LC0yMTIuNzE4NzUgQyA3NzUuNjA5NTQsLTIxMS4yNTkyOSA3NzcuMDk0MzUsLTIwOS41ODM1MiA3ODAuOTM3NSwtMjA4LjQ2ODc1IEMgNzgyLjUyMjU0LC0yMDguMDA4OTggNzg0LjIyNDI5LC0yMDcuODMwNSA3ODUuOTA2MjUsLTIwNy43ODEyNSBDIDc4NS40NjQ2OCwtMjA3LjQ0NDQ5IDc4NC4zOTM3NCwtMjA2Ljc1MzUyIDc4Mi40MDYyNSwtMjA2IEMgNzc5LjY3MjMyLC0yMDQuOTYzNTEgNzc1Ljk1NDI3LC0yMDMuODM3MzEgNzc0LjQwNjI1LC0yMDMuNTYyNSBDIDc3Mi45NDE2MywtMjAzLjMwMjQ4IDc3MS4zNDY2NywtMjAzLjY3OTA0IDc3MS4wNjI1LC0yMDMuNzUgQyA3NzEuMjIyNzUsLTIwMy42NzAzNSA3NzEuNDQyOTQsLTIwMy40MjkwMiA3NzAuODQzNzUsLTIwMi42ODc1IEMgNzY5Ljk3OTA5LC0yMDEuNjE3NDQgNzY0LjkyNzIzLC0xOTkuODY5MzUgNzYyLjA5Mzc1LC0xOTkgQyA3NTkuMjcyOTUsLTE5OC4xMzQ1MyA3NTUuODg2MjUsLTE5Ny44NDM2OSA3NTEuNzUsLTE5OC43ODEyNSBDIDc0Ny45OTc0MSwtMTk5LjYzMTg2IDc0Ni43MDIxNSwtMjAwLjQ5NzcyIDc0Mi44NzUsLTIwMS4zNzUgQyA3NDIuODc1LC0yMDEuMzc1IDc0Mi44NzUsLTIwMS4yMTg3NSA3NDIuODc1LC0yMDEuMjE4NzUgQyA3NDYuMzAyOTYsLTE5OS45ODA5NiA3NDcuODYyNDEsLTE5OC41ODY0NSA3NTEuMjUsLTE5Ny42ODc1IEMgNzUyLjg4MjE2LC0xOTcuMjU0MzYgNzU0LjYxNzA0LC0xOTcuMTA0NDkgNzU2LjM0Mzc1LC0xOTcuMTI1IEMgNzU1LjgzNDgyLC0xOTYuNzQwODMgNzU0Ljg2NywtMTk2LjEwMzE4IDc1My4wOTM3NSwtMTk1LjM3NSBDIDc1MC4zODc0MSwtMTk0LjI2MzY2IDc0Ni42NTc0MiwtMTkzLjA2NzE5IDc0NS4xMjUsLTE5Mi43NSBDIDc0NC4zMjQ2LC0xOTIuNTg0MzEgNzQzLjUxMjY5LC0xOTIuNTMxMzggNzQyLjg3NSwtMTkyLjU5Mzc1IEMgNzQyLjg3NSwtMTkyLjU5Mzc1IDc0Mi44NzUsLTE5Mi4wNzgyMyA3NDIuODc1LC0xOTEuNjcxNDYgQyA3NDIuODc1LC0xOTEuNDA2MzkgNzQyLjg3NSwtMTkxLjE4NzUgNzQyLjg3NSwtMTkxLjE4NzUgQyA3NDMuMTAxNDUsLTE5MS4zMzIxOCA3NDMuMzIzOTEsLTE5MS40NjAxMSA3NDMuNTkzNzUsLTE5MS41NjI1IEMgNzQ0LjY3NDI3LC0xOTEuOTcyNDggNzQ1Ljc2NTM2LC0xOTEuNzc4MjcgNzQ5LjU5Mzc1LC0xOTMuMjUgQyA3NTMuNDIyMTgsLTE5NC43MjE3NCA3NTQuODE3ODcsLTE5NS4yNTQ5OCA3NTUuNSwtMTk1LjY1NjI1IEMgNzU2LjE3OTYsLTE5Ni4wNTYwMyA3NTcuMTExNjUsLTE5Ni41MzU2MiA3NTcuNzE4NzUsLTE5Ny4xODc1IEMgNzU5LjU0NTYsLTE5Ny4zMjUyNSA3NjEuMjg5NSwtMTk3LjY4MDczIDc2Mi42NTYyNSwtMTk4LjE4NzUgQyA3NjUuNjI0MzcsLTE5OS4yODgwMiA3NjcuNTMxNjIsLTE5OS45OTM2OSA3NjkuNDM3NSwtMjAwLjY1NjI1IEMgNzcxLjM0MzM2LC0yMDEuMzE4NzkgNzcxLjc5MTU5LC0yMDIuMDcxMTIgNzcyLjg0Mzc1LC0yMDIuNDM3NSBDIDc3My45MzUzLC0yMDIuODE3NjEgNzc1LjAzODg2LC0yMDIuNjAyODggNzc4LjkwNjI1LC0yMDMuOTY4NzUgQyA3ODIuNzczNywtMjA1LjMzNDYxIDc4NC4xODk0MSwtMjA1Ljc5NTgzIDc4NC44NzUsLTIwNi4xODc1IEMgNzg1LjU3NjA5LC0yMDYuNTg4MDIgNzg2LjU3NTgxLC0yMDcuMTIwNDggNzg3LjE4NzUsLTIwNy43ODEyNSBDIDc4OS4xNTgzLC0yMDcuODM1OTEgNzkxLjAwNDM1LC0yMDguMTY1ODggNzkyLjQ2ODc1LC0yMDguNjU2MjUgQyA3OTUuNDcwMjMsLTIwOS42NjEzMyA3OTcuMzk0OSwtMjEwLjI3Nzk2IDc5OS4zMTI1LC0yMTAuOTA2MjUgQyA4MDAuODUxMSwtMjExLjQxMDM1IDgwMS40ODY1MiwtMjExLjk1MzAyIDgwMi4yMTg3NSwtMjEyLjM0Mzc1IEMgODAyLjQ0ODkxLC0yMTIuNDc4MDYgODAyLjY5NDQ5LC0yMTIuNTk3NDggODAyLjk2ODc1LC0yMTIuNjg3NSBDIDgwNC4wNjY5OCwtMjEzLjA0Nzk4IDgwNS4xNTAyLC0yMTIuNzY4ODcgODA5LjA2MjUsLTIxNCBDIDgxMi45NzQ4MywtMjE1LjIzMTEzIDgxNC40Mjg1NSwtMjE1LjY3Mjk1IDgxNS4xMjUsLTIxNi4wMzEyNSBDIDgxNS44MTg4OCwtMjE2LjM4ODIyIDgxNi43NTUxNSwtMjE2LjgyMzg2IDgxNy4zNzUsLTIxNy40Mzc1IEMgODE5LjI0MDIxLC0yMTcuNDYwMTYgODIxLjAxMDgxLC0yMTcuNzA0MzMgODIyLjQwNjI1LC0yMTguMTI1IEMgODI1LjQzNjY4LC0yMTkuMDM4NTQgODI3LjM5ODYzLC0yMTkuNTU1MSA4MjkuMzQzNzUsLTIyMC4wOTM3NSBDIDgzMS4yODg4NiwtMjIwLjYzMjM5IDgzMS43Njk5MywtMjIxLjM1ODI3IDgzMi44NDM3NSwtMjIxLjY1NjI1IEMgODMzLjk1Nzc2LC0yMjEuOTY1NCA4MzUuMDYzNjksLTIyMS42NDg4NiA4MzkuMDMxMjUsLTIyMi42ODc1IEMgODQyLjk5ODg2LC0yMjMuNzI2MTMgODQ0LjQ0ODgzLC0yMjQuMTIwMjMgODQ1LjE1NjI1LC0yMjQuNDM3NSBDIDg0NS44OTExMiwtMjI0Ljc2NzA5IDg0Ni45NzAwOCwtMjI1LjE5MTIyIDg0Ny41OTM3NSwtMjI1LjgxMjUgQyA4NDkuNTkxNDksLTIyNS42OTY1IDg1MS40NTExOCwtMjI1LjgzMjU5IDg1Mi45Mzc1LC0yMjYuMTg3NSBDIDg1Ni4wMTU2MSwtMjI2LjkyMjUgODU4LjAyMDk0LC0yMjcuMjg4NDQgODYwLC0yMjcuNjg3NSBDIDg2MS41ODc5MiwtMjI4LjAwNzY4IDg2Mi4yNDQyOSwtMjI4LjQ3ODA1IDg2MywtMjI4Ljc4MTI1IEMgODYzLjIzNzU3LC0yMjguODg4MDUgODYzLjQ2Njk1LC0yMjguOTc0MDEgODYzLjc1LC0yMjkuMDMxMjUgQyA4NjQuODgzNDcsLTIyOS4yNjA0NCA4NjYuMDU0NDgsLTIyOC44MjIzMiA4NzAuMDkzNzUsLTIyOS41MzEyNSBDIDg3NC4xMzMwOCwtMjMwLjI0MDE4IDg3NS41OTQsLTIzMC40NTgzNCA4NzYuMzEyNSwtMjMwLjcxODc1IEMgODc3LjAyODM2LC0yMzAuOTc4MTkgODc4LjAxNjc4LC0yMzEuMjg1OTkgODc4LjY1NjI1LC0yMzEuODEyNSBDIDg4MC41ODA1MiwtMjMxLjU3MzAxIDg4Mi40MDQxMywtMjMxLjU4Nzk3IDg4My44NDM3NSwtMjMxLjgxMjUgQyA4ODYuOTcwMDgsLTIzMi4zMDAxMiA4ODguOTk4MywtMjMyLjUxMzE3IDg5MSwtMjMyLjc4MTI1IEMgODkzLjAwMTcxLC0yMzMuMDQ5MzIgODkzLjQ4ODY5LC0yMzMuNzI2MzkgODk0LjU5Mzc1LC0yMzMuODc1IEMgODk1Ljc0MDE0LC0yMzQuMDI5MTggODk2Ljg2OTY3LC0yMzMuNTczNDMgOTAwLjkzNzUsLTIzNC4wOTM3NSBDIDkwNS4wMDUzNCwtMjM0LjYxNDA3IDkwNi40OTc2MywtMjM0Ljc4OTQ4IDkwNy4yMTg3NSwtMjM1LjAzMTI1IEMgOTA3Ljk1NTg1LC0yMzUuMjc4MzkgOTA5LjAxNjg0LC0yMzUuNjE3NDggOTA5LjY1NjI1LC0yMzYuMTU2MjUgQyA5MTEuNzA2MzIsLTIzNS44MjA3MiA5MTMuNjMwMDMsLTIzNS43NTgyOSA5MTUuMTU2MjUsLTIzNS45Mzc1IEMgOTE4LjI5ODU2LC0yMzYuMzA2NDYgOTIwLjMzNjE5LC0yMzYuNDk2ODYgOTIyLjM0Mzc1LC0yMzYuNzE4NzUgQyA5MjMuOTU0NTEsLTIzNi44OTY3NyA5MjQuNjA4NDIsLTIzNy4zMjY5NSA5MjUuMzc1LC0yMzcuNTYyNSBDIDkyNS42MTU5NCwtMjM3LjY0ODAyIDkyNS44NjkxMiwtMjM3LjcxODEgOTI2LjE1NjI1LC0yMzcuNzUgQyA5MjcuMzA2MDMsLTIzNy44Nzc3MiA5MjguNDU3NTQsLTIzNy40MDMzNSA5MzIuNTMxMjUsLTIzNy44NzUgQyA5MzYuNjA0OTksLTIzOC4zNDY2NSA5MzguMDkwMzQsLTIzOC40ODU2IDkzOC44MTI1LC0yMzguNzE4NzUgQyA5MzkuNTMxOTYsLTIzOC45NTEwMiA5NDAuNTEyNzQsLTIzOS4xOTIyMSA5NDEuMTU2MjUsLTIzOS42ODc1IEMgOTQzLjA5MjYyLC0yMzkuMzU0MDQgOTQ0LjkyNjMxLC0yMzkuMjgzMjYgOTQ2LjM3NSwtMjM5LjQzNzUgQyA5NDkuNTIxMDIsLTIzOS43NzI0NSA5NTEuNTUyNTYsLTIzOS45NTYwOSA5NTMuNTYyNSwtMjQwLjE1NjI1IEMgOTU1LjU3MjQ2LC0yNDAuMzU2MzkgOTU2LjA0NjY0LC0yNDAuOTgyNjQgOTU3LjE1NjI1LC0yNDEuMDkzNzUgQyA5NTguMzA3MzksLTI0MS4yMDkwMyA5NTkuNDUyNjgsLTI0MC43Mjg2OSA5NjMuNTMxMjUsLTI0MS4xNTYyNSBDIDk2Ny42MDk4NiwtMjQxLjU4MzgxIDk2OS4xMjAxMSwtMjQxLjcxODM0IDk2OS44NDM3NSwtMjQxLjkzNzUgQyA5NzAuNTgyOSwtMjQyLjE2MTM2IDk3MS42Mzk0NywtMjQyLjQ1MDc1IDk3Mi4yODEyNSwtMjQyLjk2ODc1IEMgOTc0LjMzODM1LC0yNDIuNTcwMDggOTc2LjI4MzEyLC0yNDIuNDc1MzUgOTc3LjgxMjUsLTI0Mi42MjUgQyA5ODAuOTYxMjMsLTI0Mi45MzMxIDk4Mi45ODgzNCwtMjQzLjA5ODI1IDk4NSwtMjQzLjI4MTI1IEMgOTg2LjYxNDA3LC0yNDMuNDI4MDcgOTg3LjI2MzEsLTI0My44NDE4IDk4OC4wMzEyNSwtMjQ0LjA2MjUgQyA5ODguMjcyNjcsLTI0NC4xNDMzNiA5ODguNTI0NzgsLTI0NC4xOTI0MSA5ODguODEyNSwtMjQ0LjIxODc1IEMgOTg5Ljk2NDYxLC0yNDQuMzI0MiA5OTEuMTA1NDYsLTI0My44MjYgOTk1LjE4NzUsLTI0NC4yMTg3NSBDIDk5OS4yNjk1OCwtMjQ0LjYxMTUgMTAwMC43NzY0LC0yNDQuNzQ5NTkgMTAwMS41LC0yNDQuOTY4NzUgQyAxMDAyLjIyMDksLTI0NS4xODcwOCAxMDAzLjE5OTcsLTI0NS40MTY0NSAxMDAzLjg0MzgsLTI0NS45MDYyNSBDIDEwMDUuNzgxOCwtMjQ1LjU1NjI2IDEwMDcuNjEyNiwtMjQ1LjQ1MTg3IDEwMDkuMDYyNSwtMjQ1LjU5Mzc1IEMgMTAxMi4yMTEyLC0yNDUuOTAxODUgMTAxNC4yMzgzLC0yNDYuMDY3IDEwMTYuMjUsLTI0Ni4yNSBDIDEwMTguMjYxNiwtMjQ2LjQzMjk5IDEwMTguNzY0MiwtMjQ3LjA4ODAyIDEwMTkuODc1LC0yNDcuMTg3NSBDIDEwMjEuMDI3MywtMjQ3LjI5MDczIDEwMjIuMTY3MiwtMjQ2LjgwMjY3IDEwMjYuMjUsLTI0Ny4xODc1IEMgMTAzMC4zMzI5LC0yNDcuNTcyMzIgMTAzMS44Mzg3LC0yNDcuNjg4NSAxMDMyLjU2MjUsLTI0Ny45MDYyNSBDIDEwMzMuMzAxOCwtMjQ4LjEyODY4IDEwMzQuMzU4MSwtMjQ4LjQyMDc0IDEwMzUsLTI0OC45Mzc1IEMgMTAzNy4wNTc0LC0yNDguNTM1NzMgMTAzOS4wMDI5LC0yNDguNDM0MTcgMTA0MC41MzEzLC0yNDguNTkzNzUgQyAxMDQzLjY3NzksLTI0OC45MjIyNyAxMDQ1LjcwODQsLTI0OS4xMTY0NSAxMDQ3LjcxODgsLTI0OS4zMTI1IEMgMTA0OS4zMzE4LC0yNDkuNDY5NzkgMTA0OS45ODQ0LC0yNDkuOTQzOTggMTA1MC43NSwtMjUwLjE4NzUgQyAxMDUwLjk5MDcsLTI1MC4yNzU1NCAxMDUxLjIxMzIsLTI1MC4zMDg4NyAxMDUxLjUsLTI1MC4zNDM3NSBDIDEwNTIuNjQ4MywtMjUwLjQ4MzQ1IDEwNTMuODE2NywtMjUwLjAwMzg0IDEwNTcuODc1LC0yNTAuNTkzNzUgQyAxMDYxLjkzMzMsLTI1MS4xODM2NyAxMDYzLjQzNjgsLTI1MS4zNzA4OSAxMDY0LjE1NjMsLTI1MS42MjUgQyAxMDY0Ljg3MywtMjUxLjg3ODE2IDEwNjUuODMwOCwtMjUyLjE4MzA3IDEwNjYuNDY4OCwtMjUyLjcxODc1IEMgMTA2OC4zODg1LC0yNTIuNTA2ODEgMTA3MC4xODg3LC0yNTIuNTY3MzQgMTA3MS42MjUsLTI1Mi44MTI1IEMgMTA3NC43NDQxLC0yNTMuMzQ0OSAxMDc2LjczNjYsLTI1My43NDExMSAxMDc4LjcxODgsLTI1NC4xMjUgQyAxMDgwLjcwMDksLTI1NC41MDg4NyAxMDgxLjE5MzEsLTI1NS4xNjQ2NSAxMDgyLjI4MTMsLTI1NS40MDYyNSBDIDEwODMuNDEwMSwtMjU1LjY1NjkxIDEwODQuNTUxNiwtMjU1LjI4OTk2IDEwODguNTMxMywtMjU2LjI4MTI1IEMgMTA5Mi41MTA5LC0yNTcuMjcyNTMgMTA5My45NjA5LC0yNTcuNzAwNTUgMTA5NC42NTYzLC0yNTguMDYyNSBDIDEwOTUuMzc4NiwtMjU4LjQzODUxIDEwOTYuNDE4MiwtMjU4LjkzMzA4IDEwOTcuMDMxMywtMjU5LjU5Mzc1IEMgMTA5OC45OTQzLC0yNTkuNjA1OCAxMTAwLjgyNSwtMjU5Ljg4NDggMTEwMi4yNSwtMjYwLjQzNzUgQyAxMTA1LjIwMTIsLTI2MS41ODIxMSAxMTA3LjEyMzIsLTI2Mi4zMDY5MiAxMTA4LjkzNzUsLTI2My4xODc1IEMgMTExMC4zOTMyLC0yNjMuODk0MDMgMTExMS4yNzIzLC0yNjQuODczOTEgMTExMS40ODQ0LC0yNjUuMTcxODggQyAxMTExLjY5NjYsLTI2NS40Njk4NCAxMTExLjU5NjIsLTI2NS45MTcxOCAxMTExLjYyMjMsLTI2NS45Mzg2MyBDIDExMTEuNjY1MiwtMjY1Ljk3Mzg3IDExMTEuOTQxNiwtMjY2LjAyMzYgMTExMi4xMDEzLC0yNjYuMzY3MDcgQyAxMTEyLjk2MDIsLTI2OC4yMTQxNSAxMTE0LjQyMjMsLTI3Mi4wMTE2NiAxMTE0LjUzNjUsLTI3Mi42OTY1MiBDIDExMTQuNjUwMiwtMjczLjM3ODY4IDExMTQuNzAwMywtMjc0LjA0NDI2IDExMTQuNzUxLC0yNzQuNDQxNDkgQyAxMTE0Ljc4MDQsLTI3NC42NzEwMSAxMTE0LjYwNDMsLTI3NS4zMDY5MyAxMTE0LjYyNjQsLTI3NS4zNjU1MyBDIDExMTQuNjU3MywtMjc1LjQ0NzU5IDExMTQuOTMwOSwtMjc1LjYzMDgxIDExMTQuOTg2MywtMjc1Ljg4MDI0IEMgMTExNS4yNTI2LC0yNzcuMDc4NTcgMTExNS4wNzUyLC0yNzguMDcxNTMgMTExNC44NjEyLC0yNzkuNDg5MTcgQyAxMTE0LjY0NzIsLTI4MC45MDY4MSAxMTEzLjg3NzUsLTI4NC4xMTEzMSAxMTEzLjIyNDMsLTI4NC45NjU0MyBDIDExMTIuNTY1NCwtMjg1LjgyNzE1IDExMTIuMDAxNCwtMjg1Ljk3NjYgMTExMS40NzY0LC0yODUuOTY2MDkgQyAxMTExLjI2NzgsLTI4NS42OTYzMyAxMTExLjYxMzIsLTI4NS43MDMgMTExMS42MzksLTI4NS42NTM0OCBDIDExMTIuMzE5NiwtMjg1LjYwMjY5IDExMTIuNTczLC0yODUuMjg0ODQgMTExMy4wNTgyLC0yODQuNzU2ODYgQyAxMTEzLjU0MzQsLTI4NC4yMjg4OCAxMTE0LjUwMSwtMjgwLjgxNzMgMTExNC42Mzc2LC0yNzkuMzY2OTEgQyAxMTE0Ljc3NDIsLTI3Ny45MTY1MiAxMTE0LjgyNzYsLTI3Ni41MDY3MSAxMTE0LjU0OTYsLTI3NS44OTgyNyBDIDExMTQuMjcxNSwtMjc1LjI4OTgyIDExMTMuNjA1NCwtMjc1LjQ2OTYzIDExMTMuMzEzLC0yNzUuNDAzNzUgQyAxMTEzLjg0NCwtMjc1LjIxNzg2IDExMTQuMjAzOCwtMjc1LjE5MDUzIDExMTQuMjY1NCwtMjc0LjM0NjA3IEMgMTExNC4zMjQ3LC0yNzMuNTMyNjkgMTExNC4xMzIyLC0yNzIuNzA2MzggMTExMy43NDU2LC0yNzEuNTQwNDUgQyAxMTEzLjM1NDQsLTI3MC4zNjA0NCAxMTExLjkwMDQsLTI2Ny4xOTA0NyAxMTExLjQ1OTksLTI2Ni45NDE2OCBDIDExMTEuMDA3NiwtMjY2LjY4NjE3IDExMTAuNTA3NSwtMjY2Ljc1OTY5IDExMTAuMTcxOSwtMjY2Ljg5MDYzIHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5OTcpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3NzY3Njc3Njc3NzY2NzY3Nzc3Nzc3Njc2Nzc2Nzc3NzY3Njc3Nzc3Nzc2NzY3NzY3Nzc3Njc2Nzc3Nzc3NzY3Njc3Njc3Nzc2NzY3Nzc3Nzc3Njc2Nzc2Nzc3NzY3Njc3Nzc3Nzc2NzY3NzY3Nzc2Njc2Nzc2NzY3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3NzenNzenNzc3p6Y2N6enpjenp6YyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTAzIgorICAgICAgICAgICBkPSJNIDk4OC43NSwtMjYzLjg0Mzc1IEMgOTkwLjY2MTYxLC0yNjMuMjA5MzUgOTkzLjMwMDI3LC0yNjIuMDg1MzQgOTk0Ljg3NSwtMjYxLjAzMTI1IEMgOTk2LjQ0OTc3LC0yNTkuOTc3MTYgOTk3Ljc3MTEsLTI1OS41NDg3MyAxMDAwLjQwNjMsLTI1Ny42NTYyNSBDIDEwMDMuMDE0NSwtMjU1Ljc4MzExIDEwMDUuNDMzMiwtMjU0LjY0MTAzIDEwMDcuNzE4OCwtMjUzLjU5Mzc1IEMgMTAxMC4xODgxLC0yNTIuNDYyMjggMTAxMy40NzA5LC0yNTEuNDM5MDEgMTAxNy4yNSwtMjQ5LjY1NjI1IEMgMTAxNi4wNDI4LC0yNTAuOTE0NjUgMTAxMC4xMTEsLTI1My4wMjA3IDEwMDguMjE4OCwtMjUzLjg0Mzc1IEMgMTAwNi4zMjY2LC0yNTQuNjY2NzkgMTAwNC4wOTA4LC0yNTUuNzc0MjQgMTAwMS4yODEzLC0yNTcuNjI1IEMgOTk4LjQ3MTY5LC0yNTkuNDc1NzUgOTk3LjY1OTA2LC0yNjAuMTA2NTQgOTk1LjI4MTI1LC0yNjEuMzQzNzUgQyA5OTIuOTAzNDMsLTI2Mi41ODA5NCA5OTEuMjAxMzcsLTI2My4yOTI5NSA5ODguNzUsLTI2My44NDM3NSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTUzKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODEwNSIKKyAgICAgICAgICAgZD0iTSA5NTcuNSwtMjYwLjc4MTI1IEMgOTU5LjQxLC0yNjAuMTYzMTUgOTYyLjA4Mjg4LC0yNTkuMDcxOTEgOTYzLjY1NjI1LC0yNTguMDMxMjUgQyA5NjUuMjI5NjQsLTI1Ni45OTA1OSA5NjYuNTUyMzMsLTI1Ni41NDg3MyA5NjkuMTg3NSwtMjU0LjY1NjI1IEMgOTcxLjc5NTczLC0yNTIuNzgzMSA5NzQuMjE0NDIsLTI1MS42NDEwNCA5NzYuNSwtMjUwLjU5Mzc1IEMgOTc4Ljk2OTMxLC0yNDkuNDYyMjggOTgyLjI1MjEzLC0yNDguNDM5IDk4Ni4wMzEyNSwtMjQ2LjY1NjI1IEMgOTg0LjgyMzk3LC0yNDcuOTE0NjUgOTc4LjgyOTcxLC0yNTAuMDUxOTUgOTc2LjkzNzUsLTI1MC44NzUgQyA5NzUuMDQ1MzMsLTI1MS42OTgwNCA5NzIuODQwODQsLTI1Mi44MDU1IDk3MC4wMzEyNSwtMjU0LjY1NjI1IEMgOTY3LjIyMTY3LC0yNTYuNTA3IDk2Ni40MzgzLC0yNTcuMDk1NTcgOTY0LjA2MjUsLTI1OC4zMTI1IEMgOTYxLjY4NjcyLC0yNTkuNTI5NDEgOTU5Ljk0OTI5LC0yNjAuMjUxMzUgOTU3LjUsLTI2MC43ODEyNSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTkzKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODEwNyIKKyAgICAgICAgICAgZD0iTSA5MjYuMDkzNzUsLTI1Ny4zNzUgQyA5MjguMDAxNDcsLTI1Ni43Nzc1NSA5MzAuNjQ3MjMsLTI1NS43MTExNiA5MzIuMjE4NzUsLTI1NC42ODc1IEMgOTMzLjc5MDI1LC0yNTMuNjYzODUgOTM1LjA4ODk3LC0yNTMuMjQ3NzkgOTM3LjcxODc1LC0yNTEuNDA2MjUgQyA5NDAuMzIxNjYsLTI0OS41ODM1MiA5NDIuNzQ3NjIsLTI0OC40MzQwNSA5NDUuMDMxMjUsLTI0Ny40MDYyNSBDIDk0Ny40OTg0NSwtMjQ2LjI5NTg0IDk1MC43ODY2LC0yNDUuMzEzMDIgOTU0LjU2MjUsLTI0My41NjI1IEMgOTUzLjM1NjI3LC0yNDQuODEwNiA5NDcuMzkwNiwtMjQ2Ljg4MDU5IDk0NS41LC0yNDcuNjg3NSBDIDk0My42MDk0MiwtMjQ4LjQ5NDQgOTQxLjM5NzU4LC0yNDkuNTc4NTQgOTM4LjU5Mzc1LC0yNTEuMzc1IEMgOTM1Ljc4OTksLTI1My4xNzE0NCA5MzQuOTY2NzEsLTI1My43Nzc1MSA5MzIuNTkzNzUsLTI1NC45Njg3NSBDIDkzMC4yMjA3OCwtMjU2LjE1OTk5IDkyOC41NDAxMywtMjU2Ljg3MTU4IDkyNi4wOTM3NSwtMjU3LjM3NSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTg5KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODEwOSIKKyAgICAgICAgICAgZD0iTSA4OTQuOTA2MjUsLTI1My41NjI1IEMgODk2LjgwODM4LC0yNTMuMDA4OTUgODk5LjQ5MzI2LC0yNTEuOTczNjMgOTAxLjA2MjUsLTI1MC45Njg3NSBDIDkwMi42MzE3MywtMjQ5Ljk2Mzg4IDkwMy45MzY1MSwtMjQ5LjU2MDExIDkwNi41NjI1LC0yNDcuNzUgQyA5MDkuMTYxNjIsLTI0NS45NTgzNiA5MTEuNTYyODQsLTI0NC44NzgxMSA5MTMuODQzNzUsLTI0My44NzUgQyA5MTYuMzA4MDMsLTI0Mi43OTEyNiA5MTkuNjAzNTksLTI0MS44MzQ3MSA5MjMuMzc1LC0yNDAuMTI1IEMgOTIyLjE3MDIsLTI0MS4zNjAwNyA5MTYuMjAwODQsLTI0My4zNjk3OCA5MTQuMzEyNSwtMjQ0LjE1NjI1IEMgOTEyLjQyNDE4LC0yNDQuOTQyNzIgOTEwLjIzNzMsLTI0NS45ODcwNSA5MDcuNDM3NSwtMjQ3Ljc1IEMgOTA0LjYzNzczLC0yNDkuNTEyOTQgOTAzLjgzODMxLC0yNTAuMTE4MzYgOTAxLjQ2ODc1LC0yNTEuMjgxMjUgQyA4OTkuMDk5MTgsLTI1Mi40NDQxMyA4OTcuMzQ1NSwtMjUzLjExNTM3IDg5NC45MDYyNSwtMjUzLjU2MjUgeiIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNjk4NSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxMTEiCisgICAgICAgICAgIGQ9Ik0gODYzLjcxODc1LC0yNDguNjU2MjUgQyA4NjUuNTk5MzcsLTI0OC4yMjcxNiA4NjguMjIzMDIsLTI0Ny4yNzU4NyA4NjkuNzgxMjUsLTI0Ni4zNDM3NSBDIDg3MS4zMzk0OCwtMjQ1LjQxMTY0IDg3Mi42MzM1OCwtMjQ1LjA4NTk5IDg3NS4yNSwtMjQzLjM0Mzc1IEMgODc3LjgzOTcxLC0yNDEuNjE5MzEgODgwLjIzMDY3LC0yNDAuNjM1NzMgODgyLjUsLTIzOS43MTg3NSBDIDg4NC45NTE3NiwtMjM4LjcyODA2IDg4OC4yMzk1OSwtMjM3Ljg0MTY4IDg5MiwtMjM2LjIxODc1IEMgODkwLjc5ODY5LC0yMzcuNDI2MDkgODg0Ljg0NzUxLC0yMzkuMjg0ODQgODgyLjk2ODc1LC0yNDAgQyA4ODEuMDksLTI0MC43MTUxNyA4NzguODgzMzUsLTI0MS42ODQ0MiA4NzYuMDkzNzUsLTI0My4zNzUgQyA4NzMuMzA0MTIsLTI0NS4wNjU1NyA4NzIuNTA5MTQsLTI0NS42MDMyMiA4NzAuMTU2MjUsLTI0Ni42NTYyNSBDIDg2Ny44MDMzMywtMjQ3LjcwOTI2IDg2Ni4xMzA0MSwtMjQ4LjM2ODczIDg2My43MTg3NSwtMjQ4LjY1NjI1IHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5NjUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTEzIgorICAgICAgICAgICBkPSJNIDgzMy4xNTYyNSwtMjQxLjM3NSBDIDgzNS4wMDQ2MSwtMjQxLjA3ODU2IDgzNy42MjU3LC0yNDAuMzk4NjggODM5LjE1NjI1LC0yMzkuNTkzNzUgQyA4NDAuNjg2ODMsLTIzOC43ODg4MiA4NDEuOTY5OTksLTIzOC41MzgwMiA4NDQuNTMxMjUsLTIzNy4wNjI1IEMgODQ3LjA2NjI5LC0yMzUuNjAyMDQgODQ5LjQyMTkzLC0yMzQuNzM3NDEgODUxLjY1NjI1LC0yMzQgQyA4NTQuMDcwMjQsLTIzMy4yMDMzMiA4NTcuMzEzMzYsLTIzMi41MzMxMSA4NjEuMDMxMjUsLTIzMS4xNTYyNSBDIDg1OS44NDM1NCwtMjMyLjI4NDk4IDg1My45NDM1MywtMjMzLjc0NiA4NTIuMDkzNzUsLTIzNC4zMTI1IEMgODUwLjI0Mzk4LC0yMzQuODc5IDg0OC4wOTAzMywtMjM1LjY4NjQyIDg0NS4zNDM3NSwtMjM3LjE1NjI1IEMgODQyLjU5NzE4LC0yMzguNjI2MDggODQxLjg0MjM5LC0yMzkuMDc2NTMgODM5LjUzMTI1LC0yMzkuOTM3NSBDIDgzNy4yMjAxLC0yNDAuNzk4NDUgODM1LjUyNjU0LC0yNDEuMjU3NTkgODMzLjE1NjI1LC0yNDEuMzc1IHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5ODEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTE1IgorICAgICAgICAgICBkPSJNIDgwMi45MDYyNSwtMjMyLjMxMjUgQyA4MDQuNzI4NDUsLTIzMi4xMDEyMyA4MDcuMjcyMDEsLTIzMS41MTE5MyA4MDguNzgxMjUsLTIzMC43ODEyNSBDIDgxMC4yOTA1LC0yMzAuMDUwNTkgODExLjUzNjkzLC0yMjkuODUxMjcgODE0LjA2MjUsLTIyOC41IEMgODE2LjU2MjI2LC0yMjcuMTYyNTQgODE4Ljg5NDA0LC0yMjYuNDUxNTcgODIxLjA5Mzc1LC0yMjUuODQzNzUgQyA4MjMuNDcwMjgsLTIyNS4xODcwOCA4MjYuNjU4MzksLTIyNC43NzA4NyA4MzAuMzEyNSwtMjIzLjY1NjI1IEMgODI5LjE0NTE1LC0yMjQuNzAxMjEgODIzLjM4MzYyLC0yMjUuNzU5NTQgODIxLjU2MjUsLTIyNi4yMTg3NSBDIDgxOS43NDEzOSwtMjI2LjY3Nzk2IDgxNy42MTAyNSwtMjI3LjM0NTcxIDgxNC45MDYyNSwtMjI4LjY1NjI1IEMgODEyLjIwMjIyLC0yMjkuOTY2NzcgODExLjQzNTE5LC0yMzAuMzc2MTUgODA5LjE1NjI1LC0yMzEuMTI1IEMgODA2Ljg3NzMsLTIzMS44NzM4MyA4MDUuMjQzLC0yMzIuMzA0MzEgODAyLjkwNjI1LC0yMzIuMzEyNSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTc3KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODExNyIKKyAgICAgICAgICAgZD0iTSA3NzMuMTg3NSwtMjIyLjE4NzUgQyA3NzQuOTk4NTksLTIyMi4wMDg4IDc3Ny41MDgwOSwtMjIxLjUyMjQ0IDc3OSwtMjIwLjg0Mzc1IEMgNzgwLjQ5MTk0LC0yMjAuMTY1MDYgNzgxLjc1MzQsLTIyMC4wNDU1MyA3ODQuMjUsLTIxOC43ODEyNSBDIDc4Ni43MjEwNywtMjE3LjUyOTg3IDc4OS4wNDAwNSwtMjE2Ljg4NTExIDc5MS4yMTg3NSwtMjE2LjM0Mzc1IEMgNzkzLjU3MjYyLC0yMTUuNzU4ODcgNzk2LjcxMDA5LC0yMTUuNDQ2MjMgODAwLjMxMjUsLTIxNC41IEMgNzk5LjE2MTY2LC0yMTUuNDkxMTYgNzkzLjQ1OTk5LC0yMTYuMjgzMyA3OTEuNjU2MjUsLTIxNi42ODc1IEMgNzg5Ljg1MjUzLC0yMTcuMDkxNyA3ODcuNzQwNzIsLTIxNy43MDg2NiA3ODUuMDYyNSwtMjE4LjkzNzUgQyA3ODIuMzg0MzIsLTIyMC4xNjYzNCA3ODEuNjU5MDUsLTIyMC41NDgzOSA3NzkuNDA2MjUsLTIyMS4yMTg3NSBDIDc3Ny4xNTM0NiwtMjIxLjg4OTA5IDc3NS41MDk5OCwtMjIyLjIyMTA3IDc3My4xODc1LC0yMjIuMTg3NSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTczKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODExOSIKKyAgICAgICAgICAgZD0iTSA3NDMuNTYyNSwtMjExLjE4NzUgQyA3NDUuMzU1MzEsLTIxMS4wNTgzOSA3NDcuODM1NjMsLTIxMC42Mzc4NSA3NDkuMzEyNSwtMjEwIEMgNzUwLjc4OTQsLTIwOS4zNjIxNSA3NTIuMDI4NiwtMjA5LjI1ODQ0IDc1NC41LC0yMDguMDYyNSBDIDc1Ni45NDYxOCwtMjA2Ljg3ODc4IDc1OS4yMjA1NCwtMjA2LjMxNTg0IDc2MS4zNzUsLTIwNS44NDM3NSBDIDc2My43MDI2NywtMjA1LjMzMzcyIDc2Ni43OTQ2LC0yMDUuMTYzMTEgNzcwLjM3NSwtMjA0LjI4MTI1IEMgNzY5LjIzMTIxLC0yMDUuMjUxODUgNzYzLjYyNzQxLC0yMDUuODcxOSA3NjEuODQzNzUsLTIwNi4yMTg3NSBDIDc2MC4wNjAwOCwtMjA2LjU2NTU5IDc1Ny45NjA5LC0yMDcuMTA2MzEgNzU1LjMxMjUsLTIwOC4yNSBDIDc1Mi42NjQwOSwtMjA5LjM5MzY4IDc1MS45MTc1NSwtMjA5Ljc2NjMxIDc0OS42ODc1LC0yMTAuMzc1IEMgNzQ3LjQ1NzQyLC0yMTAuOTgzNjggNzQ1Ljg2MTU2LC0yMTEuMjg0NjYgNzQzLjU2MjUsLTIxMS4xODc1IHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5NjkpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPGcKKyAgICAgICAgICAgaWQ9Imc4MTIxIgorICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjczNDUpIj4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTIzIgorICAgICAgICAgICAgIGQ9Ik0gNzQ0LjkzNzUsLTIxMi4xMTczMSBDIDc0NC45Mzc1LC0yMTIuMTE3MzEgNzUyLjE1OTc5LC0yMTUuMzQwNDkgNzU0LC0yMTUuNjE3MzEgQyA3NTUuODQwMjEsLTIxNS44OTQxMyA3NTcuMzUyMjUsLTIxNS42MjA1NCA3NjAsLTIxNS4wNTQ4MSBDIDc2Mi42NDc3NSwtMjE0LjQ4OTA4IDc2OC43MzU3LC0yMTIuODM5NjMgNzcxLjE4NzUsLTIxMS42Nzk4MSBDIDc3My42MzkzLC0yMTAuNTE5OTkgNzc2LjUsLTIwOC4xMTczMSA3NzYuNSwtMjA4LjExNzMxIEMgNzc2LjUsLTIwOC4xMTczMSA3NjkuMzUzNTYsLTIxMC44OTc1IDc2Ni4zMTI1LC0yMTEuNjc5ODEgQyA3NjMuMjcxNDQsLTIxMi40NjIxMiA3NTguNjY3ODksLTIxMy43NjM1NSA3NTUuOTM3NSwtMjEzLjk5MjMxIEMgNzUzLjIwNzExLC0yMTQuMjIxMDcgNzQ0LjkzNzUsLTIxMi4xMTczMSA3NDQuOTM3NSwtMjEyLjExNzMxIHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODEyNSIKKyAgICAgICAgICAgICBkPSJNIDczNS40Njg3NSwtMjA2Ljk1NDE2IEMgNzM1LjQ2ODc1LC0yMDYuOTU0MTYgNzM5LjEyODU0LC0yMDkuMTc3MzQgNzQwLjk2ODc1LC0yMDkuNDU0MTYgQyA3NDIuODA4OTYsLTIwOS43MzA5OCA3NDQuNjMzNSwtMjA5LjIwNzM5IDc0Ny4yODEyNSwtMjA4LjY0MTY2IEMgNzQ5LjkyOSwtMjA4LjA3NTkzIDc1Ni4wMTY5NSwtMjA2LjQyNjQ4IDc1OC40Njg3NSwtMjA1LjI2NjY2IEMgNzYwLjkyMDU1LC0yMDQuMTA2ODQgNzY1LjAzMTI1LC0yMDMuMTQxNjYgNzY1LjAzMTI1LC0yMDMuMTQxNjYgQyA3NjUuMDMxMjUsLTIwMy4xNDE2NiA3NTYuNjM0ODEsLTIwNC40ODQzNSA3NTMuNTkzNzUsLTIwNS4yNjY2NiBDIDc1MC41NTI2OSwtMjA2LjA0ODk3IDc0NS42MzY2NCwtMjA3LjYwMDQgNzQyLjkwNjI1LC0yMDcuODI5MTYgQyA3NDAuMTc1ODYsLTIwOC4wNTc5MiA3MzUuNDY4NzUsLTIwNi45NTQxNiA3MzUuNDY4NzUsLTIwNi45NTQxNiB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTI3IgorICAgICAgICAgICAgIGQ9Ik0gNzU5Ljg1MDQyLC0yMTcuNjExMTYgQyA3NTkuODUwNDIsLTIxNy42MTExNiA3NjguMzk0MTIsLTIyMC45MDk3MyA3NzAuMjQ4MiwtMjIxLjA2OTAyIEMgNzcyLjEwMjI5LC0yMjEuMjI4MzIgNzczLjg4OTg2LC0yMjAuNTg5ODIgNzc2LjQ5NjMsLTIxOS44NTY5NCBDIDc3OS4xMDI3NCwtMjE5LjEyNDA2IDc4NS4wNzM1NCwtMjE3LjA5MSA3ODcuNDQ2NjYsLTIxNS43Nzc2OSBDIDc4OS44MTk3OCwtMjE0LjQ2NDM4IDc5My44NjA4MywtMjEzLjIzOTg3IDc5My44NjA4MywtMjEzLjIzOTg3IEMgNzkzLjg2MDgzLC0yMTMuMjM5ODcgNzg1LjU2NjcsLTIxNS4xMTM1MiA3ODIuNTgxNTIsLTIxNi4wODc1NCBDIDc3OS41OTYzMywtMjE3LjA2MTU2IDc3NC43ODg4MywtMjE4LjkyMjMyIDc3Mi4wNzg1LC0yMTkuMzI0MTYgQyA3NjkuMzY4MTcsLTIxOS43MjYgNzU5Ljg1MDQyLC0yMTcuNjExMTYgNzU5Ljg1MDQyLC0yMTcuNjExMTYgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODEyOSIKKyAgICAgICAgICAgICBkPSJNIDc3NS4xOTgxMywtMjIzLjIyNjYgQyA3NzUuMTk4MTMsLTIyMy4yMjY2IDc4Mi45Njk0NiwtMjI2LjAwOTA0IDc4NC44MjY0NCwtMjI2LjEzMDA5IEMgNzg2LjY4MzQxLC0yMjYuMjUxMTMgNzg4LjQ1NzQ0LC0yMjUuNTc1OTIgNzkxLjA0ODIyLC0yMjQuNzg5NDcgQyA3OTMuNjM4OTksLTIyNC4wMDMwMiA3OTkuNTY2NjIsLTIyMS44NDczIDgwMS45MTIxNiwtMjIwLjQ4NTM1IEMgODA0LjI1NzcxLC0yMTkuMTIzNCA4MDguMjcyNjUsLTIxNy44MTU4NSA4MDguMjcyNjUsLTIxNy44MTU4NSBDIDgwOC4yNzI2NSwtMjE3LjgxNTg1IDgwMC4wMTg5MiwtMjE5Ljg2MDA4IDc5Ny4wNTQ0NCwtMjIwLjg5NTQzIEMgNzk0LjA4OTk3LC0yMjEuOTMwNzggNzg5LjMyMTg1LC0yMjMuODkwMjQgNzg2LjYyMDM4LC0yMjQuMzQ3ODYgQyA3ODMuOTE4OTEsLTIyNC44MDU0OSA3NzUuMTk4MTMsLTIyMy4yMjY2IDc3NS4xOTgxMywtMjIzLjIyNjYgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii00LjMxOTA5MDYiCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSIxMy44NTIxNDUiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxMzEiCisgICAgICAgICAgICAgZD0iTSA3ODkuNjQyOTgsLTIyNy45NTQxNyBDIDc4OS42NDI5OCwtMjI3Ljk1NDE3IDc5OC4zMjU1NCwtMjMxLjQ3NDQ4IDgwMC4xODQ1MiwtMjMxLjU1OTUyIEMgODAyLjA0MzQ5LC0yMzEuNjQ0NTUgODAzLjgwNDEsLTIzMC45MzUxIDgwNi4zNzkxNSwtMjMwLjA5ODU5IEMgODA4Ljk1NDIsLTIyOS4yNjIxIDgxNC44Mzg5NCwtMjI2Ljk5MTkzIDgxNy4xNTc2NiwtMjI1LjU4NDc5IEMgODE5LjQ3NjM4LC0yMjQuMTc3NjQgODIzLjQ2NTIzLC0yMjIuNzkyNTUgODIzLjQ2NTIzLC0yMjIuNzkyNTUgQyA4MjMuNDY1MjMsLTIyMi43OTI1NSA4MTUuMjUyNjYsLTIyNC45OTYzMiA4MTIuMzA4OCwtMjI2LjA4ODkxIEMgODA5LjM2NDk0LC0yMjcuMTgxNSA4MDQuNjM1NjgsLTIyOS4yMzI5OSA4MDEuOTQzNTgsLTIyOS43NDI4OCBDIDc5OS4yNTE0OSwtMjMwLjI1Mjc2IDc4OS42NDI5OCwtMjI3Ljk1NDE3IDc4OS42NDI5OCwtMjI3Ljk1NDE3IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC4zMTkwOTA2IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuODUyMTQ1IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTMzIgorICAgICAgICAgICAgIGQ9Ik0gODA0LjQ5NTEzLC0yMzMuMzI5NDggQyA4MDQuNDk1MTMsLTIzMy4zMjk0OCA4MTIuMzAyNjksLTIzNS45MTIyOSA4MTQuMTYxNjcsLTIzNS45OTczMyBDIDgxNi4wMjA2NCwtMjM2LjA4MjM2IDgxNy43ODEyNSwtMjM1LjM3MjkxIDgyMC4zNTYzLC0yMzQuNTM2NCBDIDgyMi45MzEzNSwtMjMzLjY5OTkxIDgyOC44MTYwOSwtMjMxLjQyOTc0IDgzMS4xMzQ4MSwtMjMwLjAyMjYgQyA4MzMuNDUzNTMsLTIyOC42MTU0NSA4MzcuNDQyMzgsLTIyNy4yMzAzNiA4MzcuNDQyMzgsLTIyNy4yMzAzNiBDIDgzNy40NDIzOCwtMjI3LjIzMDM2IDgyOS4yMjk4MSwtMjI5LjQzNDEzIDgyNi4yODU5NSwtMjMwLjUyNjcyIEMgODIzLjM0MjA5LC0yMzEuNjE5MzEgODE4LjYxMjgzLC0yMzMuNjcwOCA4MTUuOTIwNzMsLTIzNC4xODA2OSBDIDgxMy4yMjg2NCwtMjM0LjY5MDU3IDgwNC40OTUxMywtMjMzLjMyOTQ4IDgwNC40OTUxMywtMjMzLjMyOTQ4IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC4zMTkwOTA2IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuODUyMTQ1IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTM1IgorICAgICAgICAgICAgIGQ9Ik0gODE5LjU1NzYzLC0yMzcuNTc5NDggQyA4MTkuNTU3NjMsLTIzNy41Nzk0OCA4MjguMTE1MTksLTI0MC4xNjIyOSA4MjkuOTc0MTcsLTI0MC4yNDczMyBDIDgzMS44MzMxNCwtMjQwLjMzMjM2IDgzMy41OTM3NSwtMjM5LjYyMjkxIDgzNi4xNjg4LC0yMzguNzg2NCBDIDgzOC43NDM4NSwtMjM3Ljk0OTkxIDg0NC42Mjg1OSwtMjM1LjY3OTc0IDg0Ni45NDczMSwtMjM0LjI3MjYgQyA4NDkuMjY2MDMsLTIzMi44NjU0NSA4NTMuMjU0ODgsLTIzMS40ODAzNiA4NTMuMjU0ODgsLTIzMS40ODAzNiBDIDg1My4yNTQ4OCwtMjMxLjQ4MDM2IDg0NS4wNDIzMSwtMjMzLjY4NDEzIDg0Mi4wOTg0NSwtMjM0Ljc3NjcyIEMgODM5LjE1NDU5LC0yMzUuODY5MzEgODM0LjQyNTMzLC0yMzcuOTIwOCA4MzEuNzMzMjMsLTIzOC40MzA2OSBDIDgyOS4wNDExNCwtMjM4Ljk0MDU3IDgxOS41NTc2MywtMjM3LjU3OTQ4IDgxOS41NTc2MywtMjM3LjU3OTQ4IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC45MjY5MDQyIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuNjQxNDEiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxMzciCisgICAgICAgICAgICAgZD0iTSA4MzYuMjMzOTUsLTI0Mi42MDEyNSBDIDgzNi4yMzM5NSwtMjQyLjYwMTI1IDg0My4yMDA5NywtMjQ0LjU4ODQ4IDg0NS4wNjE3OSwtMjQ0LjU2ODgyIEMgODQ2LjkyMjYsLTI0NC41NDkxNSA4NDguNjQwNTIsLTI0My43NDE4IDg1MS4xNjQ0NCwtMjQyLjc2MTc3IEMgODUzLjY4ODM3LC0yNDEuNzgxNzcgODU5LjQzNjEsLTIzOS4xODQxOSA4NjEuNjcyLC0yMzcuNjQ4ODYgQyA4NjMuOTA3OSwtMjM2LjExMzUxIDg2Ny44MTI1MywtMjM0LjUwNjI1IDg2Ny44MTI1MywtMjM0LjUwNjI1IEMgODY3LjgxMjUzLC0yMzQuNTA2MjUgODU5LjczNjkyLC0yMzcuMTY4NDcgODU2Ljg1OTE3LC0yMzguNDI0OTEgQyA4NTMuOTgxNDMsLTIzOS42ODEzNiA4NDkuMzc1MDUsLTI0MS45OTU2MSA4NDYuNzE1ODksLTI0Mi42NTYxMiBDIDg0NC4wNTY3NCwtMjQzLjMxNjYxIDgzNi4yMzM5NSwtMjQyLjYwMTI1IDgzNi4yMzM5NSwtMjQyLjYwMTI1IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS4xNTQyMTE5IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuNTUwNjgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxMzkiCisgICAgICAgICAgICAgZD0iTSA4NTAuNzMwMjgsLTI0Ni4wMDQ2MSBDIDg1MC43MzAyOCwtMjQ2LjAwNDYxIDg1OC40MTgxMiwtMjQ4LjAzMjI5IDg2MC4yNzgxLC0yNDcuOTczMTUgQyA4NjIuMTM4MDcsLTI0Ny45MTQgODYzLjgzODQ4LC0yNDcuMDcwMzYgODY2LjM0MTAzLC0yNDYuMDM2OTkgQyA4NjguODQzNTgsLTI0NS4wMDM2NSA4NzQuNTM0OSwtMjQyLjI4NDY3IDg3Ni43Mzc3MSwtMjQwLjcwMjI0IEMgODc4Ljk0MDUzLC0yMzkuMTE5NzkgODgyLjgxMDE2LC0yMzcuNDMwMDQgODgyLjgxMDE2LC0yMzcuNDMwMDQgQyA4ODIuODEwMTYsLTIzNy40MzAwNCA4NzQuNzkyODcsLTI0MC4yNjMwMiA4NzEuOTQyNDQsLTI0MS41ODAyNiBDIDg2OS4wOTIwMSwtMjQyLjg5NzQ5IDg2NC41MzU3OCwtMjQ1LjMwODk4IDg2MS44OTEyNCwtMjQ2LjAyNTc2IEMgODU5LjI0NjcsLTI0Ni43NDI1NCA4NTAuNzMwMjgsLTI0Ni4wMDQ2MSA4NTAuNzMwMjgsLTI0Ni4wMDQ2MSB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNDc0MDg4NyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjQxMTUxIgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTQxIgorICAgICAgICAgICAgIGQ9Ik0gODY0LjgyNDk2LC0yNDkuMjEwODEgQyA4NjQuODI0OTYsLTI0OS4yMTA4MSA4NzIuOTk0NDgsLTI1MS4xNzk4NyA4NzQuODUxODQsLTI1MS4wNjQ3NyBDIDg3Ni43MDkxOSwtMjUwLjk0OTY1IDg3OC4zODM0MiwtMjUwLjA1NTIxIDg4MC44NTM3NCwtMjQ4Ljk0Njk4IEMgODgzLjMyNDA1LC0yNDcuODM4NzcgODg4LjkzMDk0LC0yNDQuOTQ5NzEgODkxLjA4NTEyLC0yNDMuMzAxNjcgQyA4OTMuMjM5MywtMjQxLjY1MzYzIDg5Ny4wNTYzMiwtMjM5Ljg0ODE1IDg5Ny4wNTYzMiwtMjM5Ljg0ODE1IEMgODk3LjA1NjMyLC0yMzkuODQ4MTUgODg5LjEyNzkzLC0yNDIuOTIxMjEgODg2LjMxODQ1LC0yNDQuMzIzNjUgQyA4ODMuNTA4OTYsLTI0NS43MjYwOSA4NzkuMDI3MzksLTI0OC4yNzM2NCA4NzYuNDA1NjIsLTI0OS4wNjk3MSBDIDg3My43ODM4NiwtMjQ5Ljg2NTc3IDg2NC44MjQ5NiwtMjQ5LjIxMDgxIDg2NC44MjQ5NiwtMjQ5LjIxMDgxIHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43OTM3NiIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI1ODgwNSIKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODE0MyIKKyAgICAgICAgICAgICBkPSJNIDg4MS4zODQ4NSwtMjUxLjYwMjgyIEMgODgxLjM4NDg1LC0yNTEuNjAyODIgODg5LjQ3MDIxLC0yNTMuNTEwOTEgODkxLjMyMzIyLC0yNTMuMzM5NDYgQyA4OTMuMTc2MjIsLTI1My4xNjc5OSA4OTQuODIyNTIsLTI1Mi4yMjMxMyA4OTcuMjU4MDQsLTI1MS4wNDAzOCBDIDg5OS42OTM1NywtMjQ5Ljg1NzY3IDkwNS4yMTAxMywtMjQ2Ljc5OTY4IDkwNy4zMTMyNywtMjQ1LjA4Njk5IEMgOTA5LjQxNjQxLC0yNDMuMzc0MjkgOTEzLjE3Njg0LC0yNDEuNDUzNzMgOTEzLjE3Njg0LC0yNDEuNDUzNzMgQyA5MTMuMTc2ODQsLTI0MS40NTM3MyA5MDUuMzQ1NDQsLTI0NC43NjYxMyA5MDIuNTc5ODQsLTI0Ni4yNTMyMyBDIDg5OS44MTQyMywtMjQ3Ljc0MDM1IDg5NS40MTIwOSwtMjUwLjQyMjgyIDg5Mi44MTU3LC0yNTEuMjk4MTQgQyA4OTAuMjE5MzMsLTI1Mi4xNzM0NSA4ODEuMzg0ODUsLTI1MS42MDI4MiA4ODEuMzg0ODUsLTI1MS42MDI4MiB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTQ1IgorICAgICAgICAgICAgIGQ9Ik0gODk2LjU4NDE1LC0yNTQuMzQ3MjQgQyA4OTYuNTg0MTUsLTI1NC4zNDcyNCA5MDQuMjI1ODEsLTI1NS43NzQ5NCA5MDYuMDc5NjIsLTI1NS42MTIzOSBDIDkwNy45MzM0MiwtMjU1LjQ0OTgzIDkwOS41ODQyNCwtMjU0LjUxMjg5IDkxMi4wMjU0MSwtMjUzLjM0MTg2IEMgOTE0LjQ2NjU5LC0yNTIuMTcwODYgOTE5Ljk5Nzc5LC0yNDkuMTM5NCA5MjIuMTA5MTMsLTI0Ny40MzY4NCBDIDkyNC4yMjA0NywtMjQ1LjczNDI2IDkyNy45OTAwOSwtMjQzLjgzMTc5IDkyNy45OTAwOSwtMjQzLjgzMTc5IEMgOTI3Ljk5MDA5LC0yNDMuODMxNzkgOTIwLjE0Mjg2LC0yNDcuMTA2NTMgOTE3LjM3MDE0LC0yNDguNTgwMzQgQyA5MTQuNTk3NDMsLTI1MC4wNTQxNCA5MTAuMTgyNDUsLTI1Mi43MTU0MyA5MDcuNTgxODksLTI1My41NzgyNyBDIDkwNC45ODEzNCwtMjU0LjQ0MTA5IDg5Ni41ODQxNSwtMjU0LjM0NzI0IDg5Ni41ODQxNSwtMjU0LjM0NzI0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43NDMzODkzIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuMjgzNzgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNDciCisgICAgICAgICAgICAgZD0iTSA5MTEuNDUzMjgsLTI1NS45ODU0NCBDIDkxMS40NTMyOCwtMjU1Ljk4NTQ0IDkyMC4wOTQ5NCwtMjU3LjUzODE0IDkyMS45NDg3NSwtMjU3LjM3NTU5IEMgOTIzLjgwMjU1LC0yNTcuMjEzMDMgOTI1LjQ1MzM3LC0yNTYuMjc2MDkgOTI3Ljg5NDU0LC0yNTUuMTA1MDYgQyA5MzAuMzM1NzIsLTI1My45MzQwNiA5MzUuODY2OTIsLTI1MC45MDI2IDkzNy45NzgyNiwtMjQ5LjIwMDA0IEMgOTQwLjA4OTYsLTI0Ny40OTc0NiA5NDMuODU5MjIsLTI0NS41OTQ5OSA5NDMuODU5MjIsLTI0NS41OTQ5OSBDIDk0My44NTkyMiwtMjQ1LjU5NDk5IDkzNi4wMTE5OSwtMjQ4Ljg2OTczIDkzMy4yMzkyNywtMjUwLjM0MzU0IEMgOTMwLjQ2NjU2LC0yNTEuODE3MzQgOTI2LjA1MTU4LC0yNTQuNDc4NjMgOTIzLjQ1MTAyLC0yNTUuMzQxNDcgQyA5MjAuODUwNDcsLTI1Ni4yMDQyOSA5MTEuNDUzMjgsLTI1NS45ODU0NCA5MTEuNDUzMjgsLTI1NS45ODU0NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTQ5IgorICAgICAgICAgICAgIGQ9Ik0gOTI3LjcwMzI4LC0yNTguMjk3OTQgQyA5MjcuNzAzMjgsLTI1OC4yOTc5NCA5MzUuMzQ0OTQsLTI1OS4xNjMxNCA5MzcuMTk4NzUsLTI1OS4wMDA1OSBDIDkzOS4wNTI1NSwtMjU4LjgzODAzIDk0MC43MDMzNywtMjU3LjkwMTA5IDk0My4xNDQ1NCwtMjU2LjczMDA2IEMgOTQ1LjU4NTcyLC0yNTUuNTU5MDYgOTUxLjExNjkyLC0yNTIuNTI3NiA5NTMuMjI4MjYsLTI1MC44MjUwNCBDIDk1NS4zMzk2LC0yNDkuMTIyNDYgOTU5LjEwOTIyLC0yNDcuMjE5OTkgOTU5LjEwOTIyLC0yNDcuMjE5OTkgQyA5NTkuMTA5MjIsLTI0Ny4yMTk5OSA5NTEuMjYxOTksLTI1MC40OTQ3MyA5NDguNDg5MjcsLTI1MS45Njg1NCBDIDk0NS43MTY1NiwtMjUzLjQ0MjM0IDk0MS4zMDE1OCwtMjU2LjEwMzYzIDkzOC43MDEwMiwtMjU2Ljk2NjQ3IEMgOTM2LjEwMDQ3LC0yNTcuODI5MjkgOTI3LjcwMzI4LC0yNTguMjk3OTQgOTI3LjcwMzI4LC0yNTguMjk3OTQgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii01Ljc0MzM4OTMiCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSIxMy4yODM3OCIKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODE1MSIKKyAgICAgICAgICAgICBkPSJNIDk0Mi44MjgyOCwtMjU5LjQ4NTQ0IEMgOTQyLjgyODI4LC0yNTkuNDg1NDQgOTUxLjQwNzQ0LC0yNjAuOTc1NjQgOTUzLjI2MTI1LC0yNjAuODEzMDkgQyA5NTUuMTE1MDUsLTI2MC42NTA1MyA5NTYuNzY1ODcsLTI1OS43MTM1OSA5NTkuMjA3MDQsLTI1OC41NDI1NiBDIDk2MS42NDgyMiwtMjU3LjM3MTU2IDk2Ny4xNzk0MiwtMjU0LjM0MDEgOTY5LjI5MDc2LC0yNTIuNjM3NTQgQyA5NzEuNDAyMSwtMjUwLjkzNDk2IDk3NS4xNzE3MiwtMjQ5LjAzMjQ5IDk3NS4xNzE3MiwtMjQ5LjAzMjQ5IEMgOTc1LjE3MTcyLC0yNDkuMDMyNDkgOTY3LjMyNDQ5LC0yNTIuMzA3MjMgOTY0LjU1MTc3LC0yNTMuNzgxMDQgQyA5NjEuNzc5MDYsLTI1NS4yNTQ4NCA5NTcuMzY0MDgsLTI1Ny45MTYxMyA5NTQuNzYzNTIsLTI1OC43Nzg5NyBDIDk1Mi4xNjI5NywtMjU5LjY0MTc5IDk0Mi44MjgyOCwtMjU5LjQ4NTQ0IDk0Mi44MjgyOCwtMjU5LjQ4NTQ0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43NDMzODkzIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuMjgzNzgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNTMiCisgICAgICAgICAgICAgZD0iTSA5NTkuMDc4MjgsLTI2MS41NDc5NCBDIDk1OS4wNzgyOCwtMjYxLjU0Nzk0IDk2Ni45MDc0NCwtMjYyLjM1MDY0IDk2OC43NjEyNSwtMjYyLjE4ODA5IEMgOTcwLjYxNTA1LC0yNjIuMDI1NTMgOTcyLjI2NTg3LC0yNjEuMDg4NTkgOTc0LjcwNzA0LC0yNTkuOTE3NTYgQyA5NzcuMTQ4MjIsLTI1OC43NDY1NiA5ODIuNjc5NDIsLTI1NS43MTUxIDk4NC43OTA3NiwtMjU0LjAxMjU0IEMgOTg2LjkwMjEsLTI1Mi4zMDk5NiA5OTAuNjcxNzIsLTI1MC40MDc0OSA5OTAuNjcxNzIsLTI1MC40MDc0OSBDIDk5MC42NzE3MiwtMjUwLjQwNzQ5IDk4Mi44MjQ0OSwtMjUzLjY4MjIzIDk4MC4wNTE3NywtMjU1LjE1NjA0IEMgOTc3LjI3OTA2LC0yNTYuNjI5ODQgOTcyLjg2NDA4LC0yNTkuMjkxMTMgOTcwLjI2MzUyLC0yNjAuMTUzOTcgQyA5NjcuNjYyOTcsLTI2MS4wMTY3OSA5NTkuMDc4MjgsLTI2MS41NDc5NCA5NTkuMDc4MjgsLTI2MS41NDc5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTU1IgorICAgICAgICAgICAgIGQ9Ik0gOTc0LjQ1MzI4LC0yNjIuNzk3OTQgQyA5NzQuNDUzMjgsLTI2Mi43OTc5NCA5ODIuODQ0OTQsLTI2My45NzU2NCA5ODQuNjk4NzUsLTI2My44MTMwOSBDIDk4Ni41NTI1NSwtMjYzLjY1MDUzIDk4OC4yMDMzNywtMjYyLjcxMzU5IDk5MC42NDQ1NCwtMjYxLjU0MjU2IEMgOTkzLjA4NTcyLC0yNjAuMzcxNTYgOTk4LjYxNjkyLC0yNTcuMzQwMSAxMDAwLjcyODMsLTI1NS42Mzc1NCBDIDEwMDIuODM5NiwtMjUzLjkzNDk2IDEwMDYuNjA5MiwtMjUyLjAzMjQ5IDEwMDYuNjA5MiwtMjUyLjAzMjQ5IEMgMTAwNi42MDkyLC0yNTIuMDMyNDkgOTk4Ljc2MTk5LC0yNTUuMzA3MjMgOTk1Ljk4OTI3LC0yNTYuNzgxMDQgQyA5OTMuMjE2NTYsLTI1OC4yNTQ4NCA5ODguODAxNTgsLTI2MC45MTYxMyA5ODYuMjAxMDIsLTI2MS43Nzg5NyBDIDk4My42MDA0NywtMjYyLjY0MTc5IDk3NC40NTMyOCwtMjYyLjc5Nzk0IDk3NC40NTMyOCwtMjYyLjc5Nzk0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43NDMzODkzIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuMjgzNzgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNTciCisgICAgICAgICAgICAgZD0iTSA5OTAuNjQwNzgsLTI2NC44NjA0NCBDIDk5MC42NDA3OCwtMjY0Ljg2MDQ0IDk5Ny41MzI0NCwtMjY1Ljg1MDY0IDk5OS4zODYyNSwtMjY1LjY4ODA5IEMgMTAwMS4yNDAxLC0yNjUuNTI1NTMgMTAwMi44OTA5LC0yNjQuNTg4NTkgMTAwNS4zMzIsLTI2My40MTc1NiBDIDEwMDcuNzczMiwtMjYyLjI0NjU2IDEwMTMuMzA0NCwtMjU5LjIxNTEgMTAxNS40MTU4LC0yNTcuNTEyNTQgQyAxMDE3LjUyNzEsLTI1NS44MDk5NiAxMDIxLjI5NjcsLTI1My45MDc0OSAxMDIxLjI5NjcsLTI1My45MDc0OSBDIDEwMjEuMjk2NywtMjUzLjkwNzQ5IDEwMTMuNDQ5NSwtMjU3LjE4MjIzIDEwMTAuNjc2OCwtMjU4LjY1NjA0IEMgMTAwNy45MDQxLC0yNjAuMTI5ODQgMTAwMy40ODkxLC0yNjIuNzkxMTMgMTAwMC44ODg1LC0yNjMuNjUzOTcgQyA5OTguMjg3OTcsLTI2NC41MTY3OSA5OTAuNjQwNzgsLTI2NC44NjA0NCA5OTAuNjQwNzgsLTI2NC44NjA0NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTU5IgorICAgICAgICAgICAgIGQ9Ik0gMTAwNy43NjU4LC0yNjUuNzk3OTQgQyAxMDA3Ljc2NTgsLTI2NS43OTc5NCAxMDE0LjU5NDksLTI2Ni45NzU2NCAxMDE2LjQ0ODgsLTI2Ni44MTMwOSBDIDEwMTguMzAyNiwtMjY2LjY1MDUzIDEwMTkuOTUzNCwtMjY1LjcxMzU5IDEwMjIuMzk0NSwtMjY0LjU0MjU2IEMgMTAyNC44MzU3LC0yNjMuMzcxNTYgMTAzMC4zNjY5LC0yNjAuMzQwMSAxMDMyLjQ3ODMsLTI1OC42Mzc1NCBDIDEwMzQuNTg5NiwtMjU2LjkzNDk2IDEwMzguMzU5MiwtMjU1LjAzMjQ5IDEwMzguMzU5MiwtMjU1LjAzMjQ5IEMgMTAzOC4zNTkyLC0yNTUuMDMyNDkgMTAzMC41MTIsLTI1OC4zMDcyMyAxMDI3LjczOTMsLTI1OS43ODEwNCBDIDEwMjQuOTY2NiwtMjYxLjI1NDg0IDEwMjAuNTUxNiwtMjYzLjkxNjEzIDEwMTcuOTUxLC0yNjQuNzc4OTcgQyAxMDE1LjM1MDUsLTI2NS42NDE3OSAxMDA3Ljc2NTgsLTI2NS43OTc5NCAxMDA3Ljc2NTgsLTI2NS43OTc5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTYxIgorICAgICAgICAgICAgIGQ9Ik0gMTAyMy44OTA4LC0yNjcuNzk3OTQgQyAxMDIzLjg5MDgsLTI2Ny43OTc5NCAxMDI5Ljk2OTksLTI2OC4yMjU2NCAxMDMxLjgyMzgsLTI2OC4wNjMwOSBDIDEwMzMuNjc3NiwtMjY3LjkwMDUzIDEwMzUuMzI4NCwtMjY2Ljk2MzU5IDEwMzcuNzY5NSwtMjY1Ljc5MjU2IEMgMTA0MC4yMTA3LC0yNjQuNjIxNTYgMTA0NS43NDE5LC0yNjEuNTkwMSAxMDQ3Ljg1MzMsLTI1OS44ODc1NCBDIDEwNDkuOTY0NiwtMjU4LjE4NDk2IDEwNTMuNzM0MiwtMjU2LjI4MjQ5IDEwNTMuNzM0MiwtMjU2LjI4MjQ5IEMgMTA1My43MzQyLC0yNTYuMjgyNDkgMTA0NS44ODcsLTI1OS41NTcyMyAxMDQzLjExNDMsLTI2MS4wMzEwNCBDIDEwNDAuMzQxNiwtMjYyLjUwNDg0IDEwMzUuOTI2NiwtMjY1LjE2NjEzIDEwMzMuMzI2LC0yNjYuMDI4OTcgQyAxMDMwLjcyNTUsLTI2Ni44OTE3OSAxMDIzLjg5MDgsLTI2Ny43OTc5NCAxMDIzLjg5MDgsLTI2Ny43OTc5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTYzIgorICAgICAgICAgICAgIGQ9Ik0gMTAzOS43MDMzLC0yNjkuMTcyOTQgQyAxMDM5LjcwMzMsLTI2OS4xNzI5NCAxMDQ2LjE1NzQsLTI2OS44NTA2NCAxMDQ4LjAxMTMsLTI2OS42ODgwOSBDIDEwNDkuODY1MSwtMjY5LjUyNTUzIDEwNTEuNTE1OSwtMjY4LjU4ODU5IDEwNTMuOTU3LC0yNjcuNDE3NTYgQyAxMDU2LjM5ODIsLTI2Ni4yNDY1NiAxMDYxLjkyOTQsLTI2My4yMTUxIDEwNjQuMDQwOCwtMjYxLjUxMjU0IEMgMTA2Ni4xNTIxLC0yNTkuODA5OTYgMTA2OS45MjE3LC0yNTcuOTA3NDkgMTA2OS45MjE3LC0yNTcuOTA3NDkgQyAxMDY5LjkyMTcsLTI1Ny45MDc0OSAxMDYyLjA3NDUsLTI2MS4xODIyMyAxMDU5LjMwMTgsLTI2Mi42NTYwNCBDIDEwNTYuNTI5MSwtMjY0LjEyOTg0IDEwNTIuMTE0MSwtMjY2Ljc5MTEzIDEwNDkuNTEzNSwtMjY3LjY1Mzk3IEMgMTA0Ni45MTMsLTI2OC41MTY3OSAxMDM5LjcwMzMsLTI2OS4xNzI5NCAxMDM5LjcwMzMsLTI2OS4xNzI5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuMTM2MDcyNCIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjU1ODEzIgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTY1IgorICAgICAgICAgICAgIGQ9Ik0gMTA1NS4yNzE4LC0yNzEuMDMzMTkgQyAxMDU1LjI3MTgsLTI3MS4wMzMxOSAxMDYwLjc2OTQsLTI3MS45NDI2NCAxMDYyLjYyOTYsLTI3MS44ODY2NyBDIDEwNjQuNDg5NywtMjcxLjgzMDY3IDEwNjYuMTkxNSwtMjcwLjk4OTkzIDEwNjguNjk1NywtMjY5Ljk2MDgxIEMgMTA3MS4yMDAxLC0yNjguOTMxNzEgMTA3Ni44OTYsLTI2Ni4yMjI0MSAxMDc5LjEwMTUsLTI2NC42NDM3MiBDIDEwODEuMzA3LC0yNjMuMDY1MDEgMTA4NS4xNzk1LC0yNjEuMzgxODIgMTA4NS4xNzk1LC0yNjEuMzgxODIgQyAxMDg1LjE3OTUsLTI2MS4zODE4MiAxMDc3LjE1NzUsLTI2NC4yMDEyMSAxMDc0LjMwNDcsLTI2NS41MTM2IEMgMTA3MS40NTIxLC0yNjYuODI1OTggMTA2Ni44OTE4LC0yNjkuMjI5NzMgMTA2NC4yNDYsLTI2OS45NDIwMyBDIDEwNjEuNjAwMywtMjcwLjY1NDMxIDEwNTUuMjcxOCwtMjcxLjAzMzE5IDEwNTUuMjcxOCwtMjcxLjAzMzE5IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC42MzcwMTQ3IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuNzQ3NTgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNjciCisgICAgICAgICAgICAgZD0iTSAxMDcyLjcwMDcsLTI3My40ODUzNyBDIDEwNzIuNzAwNywtMjczLjQ4NTM3IDEwNzcuMjQ3OSwtMjc0LjY0MTE4IDEwNzkuMTA4NywtMjc0LjY3MTU4IEMgMTA4MC45Njk0LC0yNzQuNzAxOTYgMTA4Mi43MDgzLC0yNzMuOTQxMDkgMTA4NS4yNTc2LC0yNzMuMDI5MjcgQyAxMDg3LjgwNywtMjcyLjExNzUgMTA5My42MjI1LC0yNjkuNjc1NDEgMTA5NS44OTksLTI2OC4yMDA3NyBDIDEwOTguMTc1MywtMjY2LjcyNjA5IDExMDIuMTIxNywtMjY1LjIyNDQxIDExMDIuMTIxNywtMjY1LjIyNDQxIEMgMTEwMi4xMjE3LC0yNjUuMjI0NDEgMTA5My45Nzc1LC0yNjcuNjY4NTIgMTA5MS4wNjcsLTI2OC44NDcxMyBDIDEwODguMTU2NSwtMjcwLjAyNTczIDEwODMuNDg5NiwtMjcyLjIxNTI4IDEwODAuODEzNiwtMjcyLjgwNDA0IEMgMTA3OC4xMzc3LC0yNzMuMzkyNzkgMTA3Mi43MDA3LC0yNzMuNDg1MzcgMTA3Mi43MDA3LC0yNzMuNDg1MzcgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii00LjQ4NDIzOTIiCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSIxMy43OTkzMyIKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODE2OSIKKyAgICAgICAgICAgICBkPSJNIDEwODcuMTU4NSwtMjc2LjUyNDQgQyAxMDg3LjE1ODUsLTI3Ni41MjQ0IDEwOTMuMTE4NSwtMjc4LjI5Nzk1IDEwOTQuOTc4NywtMjc4LjM1NDY0IEMgMTA5Ni44Mzg3LC0yNzguNDExMzEgMTA5OC41ODgzLC0yNzcuNjc1MDkgMTEwMS4xNTAyLC0yNzYuNzk5MzkgQyAxMTAzLjcxMjIsLTI3NS45MjM3MyAxMTAzLjY3MjgsLTI3NS45NDIyNiAxMTA2LjQ4MzcsLTI3NS4zMDkyNCBDIDExMDkuMjgwNiwtMjc0LjY3OTM4IDExMTMuNTYwNCwtMjczLjc5NjExIDExMTMuNTYwNCwtMjczLjc5NjExIEMgMTExMy41NjA0LC0yNzMuNzk2MTEgMTEwOS45NDQ5LC0yNzMuODEyMzkgMTEwNi43NjgxLC0yNzQuMjYyMjUgQyAxMTAzLjY1MjYsLTI3NC43MDM0NCAxMDk5LjM5MzgsLTI3NS45NjA1IDEwOTYuNzA5NywtMjc2LjUxMTM4IEMgMTA5NC4wMjU4LC0yNzcuMDYyMjYgMTA4Ny4xNTg1LC0yNzYuNTI0NCAxMDg3LjE1ODUsLTI3Ni41MjQ0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjemN6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNzEiCisgICAgICAgICAgICAgZD0iTSAxMDk5LjI1LC0yNzkuOTI5ODEgQyAxMDk5LjQxMTIsLTI3OS42NjExOSAxMTEwLjQ1ODEsLTI4NC41MzAyNyAxMTExLjQzNzUsLTI4NC42MTczMSBDIDExMTIuNDE2OSwtMjg0LjcwNDM1IDExMTMuNDM3NSwtMjgxLjQ5MjMxIDExMTMuNDM3NSwtMjgxLjQ5MjMxIEMgMTExMy40Mzc1LC0yODEuNDkyMzEgMTExMi42NjI0LC0yODIuOTk2NjUgMTExMC41NjI1LC0yODIuNTU0ODEgQyAxMTA4LjQ2MjYsLTI4Mi4xMTI5NyAxMDk5LjI2MTYsLTI3OS44ODM0IDEwOTkuMjUsLTI3OS45Mjk4MSB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgorICAgICAgICA8L2c+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE3MyIKKyAgICAgICAgICAgZD0iTSAxMTA3LjQ1MzIsLTI4NC4wOTM4IEMgMTEwNy4wMzQ1LC0yODMuODgwOTcgMTEwNy4yOTc2LC0yODMuOTk5OTEgMTEwNi44MDYsLTI4My43ODc5OSBDIDExMDYuMzE5OSwtMjgzLjU3ODQ1IDExMDUuMDgyNiwtMjgzLjIxMzYgMTEwMi43MjY0LC0yODIuMzI5MDQgQyAxMDk5LjM5NTMsLTI4MS4wNzg0NyAxMDk2Ljg5NjIsLTI4MC4xNzU2IDEwOTUuNzAwNSwtMjc5LjI2Mjk0IEMgMTA5NC4xNjQ0LC0yNzkuMjQxNjggMTA5MS45OCwtMjc5LjAyOTYzIDEwOTAuMDQ0MiwtMjc4LjU0NDE5IEMgMTA4Ny4wNjI3LC0yNzcuNzk2NTMgMTA4NS4xODksLTI3Ny4zNzAxOCAxMDgzLjI5NDIsLTI3Ni45NTA0NCBDIDEwODEuMzk5NCwtMjc2LjUzMDcyIDEwODEuNjE4NywtMjc2LjMwODI1IDEwODAuNDE5MiwtMjc2LjA3NTQ0IEMgMTA3OS4xMjI2LC0yNzUuODIzNzggMTA3OC42OTc4LC0yNzYuMDg0NDMgMTA3NC45ODE3LC0yNzUuMjk0MTkgQyAxMDcxLjQ5MTgsLTI3NC41NTIwNSAxMDY2LjA4NjksLTI3My4zNjMxMiAxMDY0LjgyNTUsLTI3Mi42MDY2OSBDIDEwNjMuMjQxNiwtMjcyLjc4NzQ4IDEwNjAuOTU4LC0yNzIuOTI4NDcgMTA1OC45ODE3LC0yNzIuNjM3OTQgQyAxMDU1Ljk0MTMsLTI3Mi4xOTA5OSAxMDU0LjA2NTUsLTI3MS45NjUxOCAxMDUyLjEzOCwtMjcxLjczMTY5IEMgMTA1MS40ODI2LC0yNzEuNjUyMzIgMTA1MS4wOTY5LC0yNzEuNTMwOTEgMTA1MC43OTQyLC0yNzEuNDUwNDQgQyAxMDUwLjM2OCwtMjcxLjMxODc5IDEwNTAuMTA4NCwtMjcxLjE5MDQyIDEwNDkuNDE5MiwtMjcxLjEwNjY5IEMgMTA0OC4xMDc2LC0yNzAuOTQ3MzMgMTA0Ny42NTcsLTI3MS4yNjM1MiAxMDQzLjg4OCwtMjcwLjgyNTQ0IEMgMTA0MC4zMzQxLC0yNzAuNDEyMzYgMTAzNC44ODI2LC0yNjkuNTUyNjIgMTAzMy42MzgsLTI2OC44ODc5NCBDIDEwMzIuMDM5LC0yNjkuMTg1MjQgMTAyOS43ODAyLC0yNjkuNDIyMTMgMTAyNy43OTQyLC0yNjkuMjMxNjkgQyAxMDI0LjczNTQsLTI2OC45MzgzOCAxMDIyLjgyMjIsLTI2OC43NDc3IDEwMjAuODg4LC0yNjguNTc1NDQgQyAxMDE4Ljk1MzcsLTI2OC40MDMxOCAxMDE5LjE5OTMsLTI2OC4xNTMwNyAxMDE3Ljk4MTcsLTI2OC4wNDQxOSBDIDEwMTYuNjY1NSwtMjY3LjkyNjUgMTAxNi4yMjE5LC0yNjguMjA3ODIgMTAxMi40NTA1LC0yNjcuNzk0MTkgQyAxMDA4LjkwODYsLTI2Ny40MDU3NSAxMDAzLjQ0MjYsLTI2Ni41ODQ5MiAxMDAyLjE2OTIsLTI2NS45MTkxOSBDIDEwMDAuNTcwMywtMjY2LjIxMzg5IDk5OC4yODIwMiwtMjY2LjQyNjIgOTk2LjI5NDE5LC0yNjYuMjMxNjkgQyA5OTMuMjM1OTUsLTI2NS45MzI0NSA5OTEuMzUzMDYsLTI2NS43NTE0NSA5ODkuNDE5MTksLTI2NS41NzU0NCBDIDk4OC43NjE3LC0yNjUuNTE1NiA5ODguMzc5MTUsLTI2NS4zOTY4OCA5ODguMDc1NDQsLTI2NS4zMjU0NCBDIDk4Ny42NDc3OSwtMjY1LjIwNjQ5IDk4Ny4zOTE5MywtMjY1LjEwNzM3IDk4Ni43MDA0NCwtMjY1LjA0NDE5IEMgOTg1LjM4NDQ4LC0yNjQuOTIzOTQgOTg0Ljk0MDY4LC0yNjUuMjM5MDcgOTgxLjE2OTE5LC0yNjQuODI1NDQgQyA5NzcuNjEzMDUsLTI2NC40MzU0MyA5NzIuMTYzNjUsLTI2My41ODYyOCA5NzAuOTE5MTksLTI2Mi45MTkxOSBDIDk2OS4zMjA1NiwtMjYzLjIxMzM4IDk2Ny4wNTkzNSwtMjYzLjQ0MjkxIDk2NS4wNzU0NCwtMjYzLjIzMTY5IEMgOTYyLjAxOTg0LC0yNjIuOTA2MzcgOTYwLjEwMTQsLTI2Mi43MDU0NSA5NTguMTY5MTksLTI2Mi41MTI5NCBDIDk1Ni4yMzY5OCwtMjYyLjMyMDQ0IDk1Ni40NzkzMiwtMjYyLjA3MjA2IDk1NS4yNjI5NCwtMjYxLjk1MDQ0IEMgOTUzLjk0ODA2LC0yNjEuODE4OTggOTUzLjQ5OTk2LC0yNjIuMTE0OTggOTQ5LjczMTY5LC0yNjEuNjY5MTkgQyA5NDYuMTkyODIsLTI2MS4yNTA1NCA5NDAuNzU0MDEsLTI2MC4zNzcwMiA5MzkuNDgxNjksLTI1OS43MDA0NCBDIDkzNy44ODQxNCwtMjU5Ljk4MTQ5IDkzNS42MjE3MywtMjYwLjEyMDg3IDkzMy42Mzc5NCwtMjU5Ljg4Nzk0IEMgOTMwLjU4NTk2LC0yNTkuNTI5NTggOTI4LjY5Mjg2LC0yNTkuMzIwMDggOTI2Ljc2Mjk0LC0yNTkuMTA2NjkgQyA5MjYuMTA2NzQsLTI1OS4wMzQxNCA5MjUuNzIyMjgsLTI1OC45MzQgOTI1LjQxOTE5LC0yNTguODU2NjkgQyA5MjQuOTkyNDIsLTI1OC43Mjk0NyA5MjQuNzM0MjgsLTI1OC41ODk0OSA5MjQuMDQ0MTksLTI1OC41MTI5NCBDIDkyMi43MzA4NiwtMjU4LjM2NzI2IDkyMi4yNzY3MywtMjU4LjY4Njk2IDkxOC41MTI5NCwtMjU4LjIwMDQ0IEMgOTE0Ljk2NDA1LC0yNTcuNzQxNjkgOTA5LjUzNDMxLC0yNTYuNzgxNDIgOTA4LjI5NDE5LC0yNTYuMDc1NDQgQyA5MDYuNzAxMTQsLTI1Ni4zMTk2OCA5MDQuNDYwMzgsLTI1Ni40NTY3OSA5MDIuNDgxNjksLTI1Ni4yMDA0NCBDIDg5OS40MzQxLC0yNTUuODA1NjMgODk3LjUzMDk4LC0yNTUuNTUxOTkgODk1LjYwNjY5LC0yNTUuMjk0MTkgQyA4OTMuNjgyNDEsLTI1NS4wMzY0IDg5My44ODA1OCwtMjU0LjgwMDY2IDg5Mi42NjkxOSwtMjU0LjYzNzk0IEMgODkxLjM1OTczLC0yNTQuNDYyMDQgODkwLjkyMiwtMjU0Ljc0MjMyIDg4Ny4xNjkxOSwtMjU0LjE2OTE5IEMgODgzLjY0NDksLTI1My42MzA5NSA4NzguMjQ2MDQsLTI1Mi40NzAwMiA4NzYuOTgxNjksLTI1MS43MzE2OSBDIDg3NS4zOTQxOSwtMjUxLjkzNTIzIDg3My4xMzYxOSwtMjUxLjk4NjQyIDg3MS4xNjkxOSwtMjUxLjYzNzk0IEMgODY4LjE0MzAyLC0yNTEuMTAxODIgODY2LjI3MDMsLTI1MC43NzYyNSA4NjQuMzU2NjksLTI1MC40NTA0NCBDIDg2My43MDYwOCwtMjUwLjMzOTY3IDg2My4zNDI5OCwtMjUwLjE3OTUgODYzLjA0NDE5LC0yNTAuMDc1NDQgQyA4NjIuNjIzNTIsLTI0OS45MTA1NiA4NjIuMzgwNzQsLTI0OS43NDQxNCA4NjEuNzAwNDQsLTI0OS42MDY2OSBDIDg2MC40MDU3OSwtMjQ5LjM0NTEgODU5Ljk3MzMyLC0yNDkuNjEyODkgODU2LjI2Mjk0LC0yNDguNzk0MTkgQyA4NTIuNzY0NDEsLTI0OC4wMjIyNCA4NDcuNDE2OTksLTI0Ni40MTEyNiA4NDYuMjAwNDQsLTI0NS41NzU0NCBDIDg0NC42Mzc2NiwtMjQ1LjY1Mjg5IDg0Mi40NDI4NiwtMjQ1LjQ5MDE2IDg0MC41MTI5NCwtMjQ0Ljk4MTY5IEMgODM3LjU0MDUsLTI0NC4xOTg1NiA4MzUuNjk1MzMsLTI0My43NDk2IDgzMy44MjU0NCwtMjQzLjIzMTY5IEMgODMxLjk1NTU2LC0yNDIuNzEzNzkgODMyLjE1ODg0LC0yNDIuNDY0NDEgODMwLjk4MTY5LC0yNDIuMTM3OTQgQyA4MjkuNzA5MjMsLTI0MS43ODUwNCA4MjkuMjg0NjYsLTI0Mi4wMzA4NSA4MjUuNjM3OTQsLTI0MC45NTA0NCBDIDgyMi4yMTMyNCwtMjM5LjkzNTgxIDgxNi45ODg1LC0yMzguMDE3MjcgODE1Ljc2Mjk0LC0yMzcuMTA2NjkgQyA4MTQuMjI0MTEsLTIzNy4wOTM5NSA4MTIuMDQzMTEsLTIzNi44MzQ0NyA4MTAuMTM3OTQsLTIzNi4yMzE2OSBDIDgwNy4yMDY4OCwtMjM1LjMwNDM1IDgwNS4zODc2MywtMjM0Ljc3MzI3IDgwMy41NDQxOSwtMjM0LjE2OTE5IEMgODAyLjkxNzQzLC0yMzMuOTYzODEgODAyLjU1MjQ2LC0yMzMuNzc2NjEgODAyLjI2Mjk0LC0yMzMuNjM3OTQgQyA4MDEuODU1MzEsLTIzMy40MjQzMyA4MDEuNjA5NiwtMjMzLjIyOTE5IDgwMC45NTA0NCwtMjMzLjAxMjk0IEMgNzk5LjY5NTk4LC0yMzIuNjAxNCA3OTkuMjY0MzMsLTIzMi44MjM5IDc5NS42NjkxOSwtMjMxLjU3NTQ0IEMgNzkyLjI3OTM0LC0yMzAuMzk4MjcgNzg3LjA3NDIxLC0yMjguMzYxNzQgNzg1Ljg4Nzk0LC0yMjcuNDE5MTkgQyA3ODQuMzY0MDUsLTIyNy4zNTk1MiA3ODIuMjM3ODksLTIyNy4wMjQzMiA3ODAuMzU2NjksLTIyNi4zNTY2OSBDIDc3Ny40NTkzLC0yMjUuMzI4NCA3NzUuNjU3NjEsLTIyNC42ODEyMSA3NzMuODI1NDQsLTIyNC4wNDQxOSBDIDc3MS45OTMyNywtMjIzLjQwNzE4IDc3Mi4xOTc1OSwtMjIzLjE5NTY1IDc3MS4wNDQxOSwtMjIyLjc5NDE5IEMgNzY5Ljc5NzQxLC0yMjIuMzYwMjMgNzY5LjM4MDU4LC0yMjIuNTk0NDcgNzY1LjgyNTQ0LC0yMjEuMjMxNjkgQyA3NjIuNDg2NzcsLTIxOS45NTE4OSA3NTcuMzM4MjksLTIxNy43NDkxNCA3NTYuMTM3OTQsLTIxNi43NjI5NCBDIDc1NC42MzA3NiwtMjE2LjY1NTI1IDc1Mi41MDIyNSwtMjE2LjI2NDE0IDc1MC42Mzc5NCwtMjE1LjU0NDE5IEMgNzQ3Ljc2OTc2LC0yMTQuNDM2NTkgNzQ2LjAxNDE0LC0yMTMuNzYyNjMgNzQ0LjIwMDQ0LC0yMTMuMDc1NDQgQyA3NDMuNTgzNzgsLTIxMi44NDE4MSA3NDMuMjA0MDMsLTIxMi42MzM0MSA3NDIuOTE5MTksLTIxMi40ODE2OSBDIDc0Mi45MTkxOSwtMjEyLjQ4MTY5IDc0Mi45MTkxOSwtMjExLjM4Nzk0IDc0Mi45MTkxOSwtMjExLjM4Nzk0IEMgNzQzLjAzMDk3LC0yMTEuNjEwMyA3NDMuMzA1MTgsLTIxMi4yMDUzNyA3NDMuODI1NDQsLTIxMi40ODE2OSBDIDc0NC41MjM0MSwtMjEyLjg1MjQxIDc0OC42MzkwNywtMjE0LjQ3NTA2IDc1MC42Mzc5NCwtMjE1LjIwMDQ0IEMgNzUyLjI5NDgsLTIxNS44MDE2OSA3NTQuNzkxODMsLTIxNi41MjkxMiA3NTYuNjA2NjksLTIxNi41MTI5NCBDIDc1Ni45MDgzMSwtMjE2LjUxMDI1IDc1Ny4xOTQzMSwtMjE2LjQ2MjA0IDc1Ny40NTA0NCwtMjE2LjQxOTE5IEMgNzU5LjI5MjkzLC0yMTYuMTEwOTQgNzY0LjkxOTE5LC0yMTQuODU2NjkgNzY0LjkxOTE5LC0yMTQuODU2NjkgQyA3NjQuOTE5MTgsLTIxNC44NTY2OSA3NTguNjg1NywtMjE2LjUwMzQ0IDc1Ny44ODc5NCwtMjE2LjcwMDQ0IEMgNzU3LjY5NzE1LC0yMTYuNzQ3NTUgNzU3LjM1MjIyLC0yMTYuNzY5MTYgNzU2LjkxOTE5LC0yMTYuNzYyOTQgQyA3NTguMDY0NjUsLTIxNy42MzI2NSA3NjEuNjgwMTksLTIxOS4xNTY0NSA3NjQuMjYyOTQsLTIyMC4yMDA0NCBDIDc2Ny4xMDExNiwtMjIxLjM0NzcxIDc2Ny4zNzk3NSwtMjIxLjQ1MjI2IDc2OS4zMjU0NCwtMjIxLjg1NjY5IEMgNzcxLjMzMzc0LC0yMjIuMjc0MTMgNzcyLjQ4MTY5LC0yMjIuMzU2NjkgNzcyLjQ4MTY5LC0yMjIuMzU2NjkgQyA3NzIuNDgxNjksLTIyMi4zNTY2OCA3NzIuMzk5MzMsLTIyMi45NTc4MyA3NzMuNDUwNDQsLTIyMy40ODE2OSBDIDc3NC4xNTU1NCwtMjIzLjgzMzEgNzc4LjMzNzQ2LC0yMjUuMzc0MDkgNzgwLjM1NjY5LC0yMjYuMDQ0MTkgQyA3ODIuMzA4NTksLTIyNi42OTE5MiA3ODUuNDE0MDksLTIyNy40MDI2OSA3ODcuMjMxNjksLTIyNy4wNDQxOSBDIDc4OS4wOTQ5MiwtMjI2LjY3NjY5IDc5NC43NjI5NCwtMjI1LjIzMTY5IDc5NC43NjI5NCwtMjI1LjIzMTY5IEMgNzk0Ljc2Mjk1LC0yMjUuMjMxNjkgNzg4LjQ3NTk0LC0yMjcuMTAyOCA3ODcuNjY5MTksLTIyNy4zMjU0NCBDIDc4Ny40NzYyNywtMjI3LjM3ODY5IDc4Ny4xMzgzNSwtMjI3LjQxMTQ4IDc4Ni43MDA0NCwtMjI3LjQxOTE5IEMgNzg3Ljg1ODc4LC0yMjguMjUyMDcgNzkxLjQ5NDg4LC0yMjkuNjE0NTEgNzk0LjEwNjY5LC0yMzAuNTc1NDQgQyA3OTYuOTc2ODUsLTIzMS42MzE0NSA3OTcuMjc0MDMsLTIzMS43MzcyNCA3OTkuMjMxNjksLTIzMi4xMDY2OSBDIDgwMS4wODUxOCwtMjMyLjQ1NjQ4IDgwMi4wOTA1MywtMjMyLjUzMjE3IDgwMi4yNjI5NCwtMjMyLjU0NDE5IEMgODAyLjM3NjU0LC0yMzIuNzYxNDMgODAyLjY0MDM5LC0yMzMuMzU0MjEgODAzLjE2OTE5LC0yMzMuNjA2NjkgQyA4MDMuODc4NjMsLTIzMy45NDU0MyA4MDguMDk1MjYsLTIzNS4zMTk0NCA4MTAuMTM3OTQsLTIzNS45MTkxOSBDIDgxMS44MzExMSwtMjM2LjQxNjMgODE0LjM3ODcxLC0yMzYuOTU1OTYgODE2LjIzMTY5LC0yMzYuODI1NDQgQyA4MTYuNTM5NjQsLTIzNi44MDM3NiA4MTYuODQ1MTgsLTIzNi43MjgxOCA4MTcuMTA2NjksLTIzNi42NjkxOSBDIDgxOC45ODc4NywtMjM2LjI0NDg3IDgyNC43MDA0NCwtMjM0LjYzNzk0IDgyNC43MDA0NCwtMjM0LjYzNzk0IEMgODI0LjcwMDQ1LC0yMzQuNjM3OTQgODE4LjM1ODcsLTIzNi43MDMxOSA4MTcuNTQ0MTksLTIzNi45NTA0NCBDIDgxNy4zNDk0LC0yMzcuMDA5NTggODE2Ljk4NjMxLC0yMzcuMDU0MzggODE2LjU0NDE5LC0yMzcuMDc1NDQgQyA4MTcuNzEzNjgsLTIzNy44NzI5OSA4MjEuNDA3MjEsLTIzOS4xMzE2NiA4MjQuMDQ0MTksLTI0MC4wMTI5NCBDIDgyNi45NDIsLTI0MC45ODE0MSA4MjcuMjc3MiwtMjQxLjAxNjI2IDgyOS4yNjI5NCwtMjQxLjI5NDE5IEMgODMxLjMxMjU5LC0yNDEuNTgxMDggODMyLjQ1MDQ0LC0yNDEuNjA2NjkgODMyLjQ1MDQ0LC0yNDEuNjA2NjkgQyA4MzIuNDUwNDIsLTI0MS42MDY2OSA4MzIuMzc3NjksLTI0Mi4yMTM2NiA4MzMuNDUwNDQsLTI0Mi42NjkxOSBDIDgzNC4xNzAwNCwtMjQyLjk3NDc2IDgzOC40NDE0MiwtMjQ0LjE2OTk0IDg0MC41MTI5NCwtMjQ0LjY2OTE5IEMgODQyLjUxNTM4LC0yNDUuMTUxNzcgODQ1LjcxMTQzLC0yNDUuNTk3NDggODQ3LjU3NTQ0LC0yNDUuMDc1NDQgQyA4NDkuNDg2MjIsLTI0NC41NDAyOSA4NTUuMjk0MTksLTI0Mi41NzU0NCA4NTUuMjk0MTksLTI0Mi41NzU0NCBDIDg1NS4yOTQxOSwtMjQyLjU3NTQ0IDg0OC44NzE1MywtMjQ0Ljk5ODk1IDg0OC4wNDQxOSwtMjQ1LjI5NDE5IEMgODQ3Ljg0NjM1LC0yNDUuMzY0OCA4NDcuNDYyMDMsLTI0NS40MzQ1OCA4NDcuMDEyOTQsLTI0NS40ODE2OSBDIDg0OC4yMDA4NCwtMjQ2LjIxMDM0IDg1MS45MjgyMSwtMjQ3LjI1NTc3IDg1NC42MDY2OSwtMjQ3Ljk4MTY5IEMgODU3LjU1MDExLC0yNDguNzc5NDQgODU3Ljg5ODc3LC0yNDguNzUyNTIgODU5LjkxOTE5LC0yNDguODg3OTQgQyA4NjEuODMyMDgsLTI0OS4wMTYxNyA4NjIuODY2MjQsLTI0OC45NTkwMyA4NjMuMDQ0MTksLTI0OC45NTA0NCBDIDg2My4xNjE0NywtMjQ5LjE1NDEgODYzLjQzNTk1LC0yNDkuNzI5OTIgODYzLjk4MTY5LC0yNDkuOTE5MTkgQyA4NjQuNzEzODgsLTI1MC4xNzMxMyA4NjkuMDYwMjEsLTI1MC45NjcwOCA4NzEuMTY5MTksLTI1MS4yOTQxOSBDIDg3Mi45MTczMiwtMjUxLjU2NTMgODc1LjU3MDA3LC0yNTEuNzc4ODkgODc3LjQ4MTY5LC0yNTEuMzg3OTQgQyA4NzcuNzk5MzUsLTI1MS4zMjI5OCA4NzguMDg2OTEsLTI1MS4yMDI0MyA4NzguMzU2NjksLTI1MS4xMDY2OSBDIDg4MC4yOTc0MywtMjUwLjQxNzk2IDg4Ni4yMDA0NCwtMjQ4LjAxMjk0IDg4Ni4yMDA0NCwtMjQ4LjAxMjk0IEMgODg2LjIwMDQ1LC0yNDguMDEyOTQgODc5LjY2NTczLC0yNTAuOTYzNzEgODc4LjgyNTQ0LC0yNTEuMzI1NDQgQyA4NzguNjI0NDcsLTI1MS40MTE5NSA4NzguMjUwMzEsLTI1MS40OTIyMyA4NzcuNzk0MTksLTI1MS41NzU0NCBDIDg3OS4wMDA2OSwtMjUyLjIwODYyIDg4Mi44MjM3NSwtMjUyLjk3MTA0IDg4NS41NDQxOSwtMjUzLjQ4MTY5IEMgODg4LjUzMzcyLC0yNTQuMDQyODggODg4Ljg0NDQyLC0yNTQuMDExMjMgODkwLjg4Nzk0LC0yNTQuMDEyOTQgQyA4OTIuOTk3MiwtMjU0LjAxNDcxIDg5NC4yMDA0NCwtMjUzLjg4Nzk0IDg5NC4yMDA0NCwtMjUzLjg4Nzk0IEMgODk0LjIwMDQ0LC0yNTMuODg3OTMgODk0LjEyNzczLC0yNTQuNTE5MTMgODk1LjIzMTY5LC0yNTQuODI1NDQgQyA4OTUuOTcyMjEsLTI1NS4wMzA5MSA5MDAuMzU3ODEsLTI1NS42NTkzMSA5MDIuNDgxNjksLTI1NS44ODc5NCBDIDkwNC41MzQ3MSwtMjU2LjEwODkzIDkwNy44MDAzMiwtMjU2LjE0MDE2IDkwOS43MDA0NCwtMjU1LjQxOTE5IEMgOTExLjY0ODIzLC0yNTQuNjgwMTIgOTE3LjU0NDE5LC0yNTIuMDQ0MTkgOTE3LjU0NDE5LC0yNTIuMDQ0MTkgQyA5MTcuNTQ0MjEsLTI1Mi4wNDQxOSA5MTAuOTgxMzEsLTI1NS4yMjMxNiA5MTAuMTM3OTQsLTI1NS42MDY2OSBDIDkwOS45MzYyNiwtMjU1LjY5ODQyIDkwOS41OTU3MywtMjU1Ljc5MjkgOTA5LjEzNzk0LC0yNTUuODg3OTQgQyA5MTAuMzQ4ODYsLTI1Ni40ODk4MiA5MTQuMTIyMzYsLTI1Ny4xMzY3OCA5MTYuODU2NjksLTI1Ny41NDQxOSBDIDkxOS44NjE0OSwtMjU3Ljk5MTkxIDkyMC4xODIyLC0yNTcuOTk1ODkgOTIyLjIzMTY5LC0yNTcuOTUwNDQgQyA5MjQuMTcyMTQsLTI1Ny45MDc0MiA5MjUuMjM4NjgsLTI1Ny43NTYyMSA5MjUuNDE5MTksLTI1Ny43MzE2OSBDIDkyNS41MzgxMSwtMjU3LjkyNDg1IDkyNS44MDMwOSwtMjU4LjQ5NzUyIDkyNi4zNTY2OSwtMjU4LjYzNzk0IEMgOTI3LjA5OTQsLTI1OC44MjYzMiA5MzEuNTEwOTgsLTI1OS4zNzIyMiA5MzMuNjM3OTQsLTI1OS41NzU0NCBDIDkzNS40MDA5NywtMjU5Ljc0Mzg2IDkzOC4wNTgwMywtMjU5LjgwOTczIDkzOS45ODE2OSwtMjU5LjMyNTQ0IEMgOTQwLjMwMTM3LC0yNTkuMjQ0OTYgOTQwLjU4NTIsLTI1OS4xMjE4NSA5NDAuODU2NjksLTI1OS4wMTI5NCBDIDk0Mi44MDk2MiwtMjU4LjIyOTQ1IDk0OC43NjI5NCwtMjU1LjU0NDE5IDk0OC43NjI5NCwtMjU1LjU0NDE5IEMgOTQ4Ljc2MjkyLC0yNTUuNTQ0MTkgOTQyLjE3MTAzLC0yNTguNzk3NjcgOTQxLjMyNTQ0LC0yNTkuMjAwNDQgQyA5NDEuMTIzMjIsLTI1OS4yOTY3NiA5NDAuNzUzMTgsLTI1OS40MDc0NyA5NDAuMjk0MTksLTI1OS41MTI5NCBDIDk0MS41MDgzMywtMjYwLjA4NzIxIDk0NS4zMzc4NSwtMjYwLjYzNTEzIDk0OC4wNzU0NCwtMjYxLjAxMjk0IEMgOTUxLjA4MzgyLC0yNjEuNDI4MTQgOTUxLjM5ODUxLC0yNjEuNDU1NTcgOTUzLjQ1MDQ0LC0yNjEuMzg3OTQgQyA5NTUuNTY4NDIsLTI2MS4zMTgxMyA5NTYuNzYyOTQsLTI2MS4xMzc5NCA5NTYuNzYyOTQsLTI2MS4xMzc5NCBDIDk1Ni43NjI5MiwtMjYxLjEzNzk0IDk1Ni42ODU2OSwtMjYxLjc3NTM1IDk1Ny43OTQxOSwtMjYyLjA0NDE5IEMgOTU4LjUzNzgxLC0yNjIuMjI0NTQgOTYyLjk0NTk1LC0yNjIuNzA3NzQgOTY1LjA3NTQ0LC0yNjIuODg3OTQgQyA5NjcuMTMzOTEsLTI2My4wNjIxMSA5NzAuNDE4NjgsLTI2My4wMTIyNiA5NzIuMzI1NDQsLTI2Mi4yMzE2OSBDIDk3NC4yODAwMywtMjYxLjQzMTUzIDk4MC4yMDA0NCwtMjU4LjcwMDQ0IDk4MC4yMDA0NCwtMjU4LjcwMDQ0IEMgOTgwLjIwMDQyLC0yNTguNzAwNDQgOTczLjY0MDUxLC0yNjIuMDA5MiA5NzIuNzk0MTksLTI2Mi40MTkxOSBDIDk3Mi41OTE4MiwtMjYyLjUxNzI0IDk3Mi4yMjIzMywtMjYyLjYyMjI5IDk3MS43NjI5NCwtMjYyLjczMTY5IEMgOTcyLjk3ODExLC0yNjMuMjk1NTkgOTc2Ljc3MzAyLC0yNjMuODQ1OTkgOTc5LjUxMjk0LC0yNjQuMjAwNDQgQyA5ODIuNTIzODUsLTI2NC41ODk5NiA5ODIuODM0MjUsLTI2NC41OTgwOSA5ODQuODg3OTQsLTI2NC41MTI5NCBDIDk4Ni44MzIzMywtMjY0LjQzMjM0IDk4Ny44OTQ1NywtMjY0LjI1OTcgOTg4LjA3NTQ0LC0yNjQuMjMxNjkgQyA5ODguMTk0NiwtMjY0LjQyMjU1IDk4OC40NTgyMSwtMjY0Ljk3NyA5ODkuMDEyOTQsLTI2NS4xMDY2OSBDIDk4OS43NTcyLC0yNjUuMjgwNjkgOTk0LjE2Mjg3LC0yNjUuNzU3MTYgOTk2LjI5NDE5LC0yNjUuOTE5MTkgQyA5OTguMDYwODEsLTI2Ni4wNTM0NiAxMDAwLjc0MzksLTI2Ni4wNDQ5IDEwMDIuNjY5MiwtMjY1LjU0NDE5IEMgMTAwMi45ODkyLC0yNjUuNDYwOTggMTAwMy4yNzI1LC0yNjUuMzQyOTIgMTAwMy41NDQyLC0yNjUuMjMxNjkgQyAxMDA1LjQ5ODgsLTI2NC40MzE1MyAxMDExLjQ1MDUsLTI2MS42NjkxOSAxMDExLjQ1MDUsLTI2MS42NjkxOSBDIDEwMTEuNDUwNCwtMjYxLjY2OTE5IDEwMDQuODU5MywtMjY1LjAwOTIgMTAwNC4wMTMsLTI2NS40MTkxOSBDIDEwMDMuODEwNiwtMjY1LjUxNzI0IDEwMDMuNDQxMSwtMjY1LjYyMjMgMTAwMi45ODE3LC0yNjUuNzMxNjkgQyAxMDA0LjE5NjgsLTI2Ni4yOTU1OSAxMDA4LjAyMywtMjY2LjgxNDc1IDEwMTAuNzYzLC0yNjcuMTY5MTkgQyAxMDEzLjc3MzksLTI2Ny41NTg3MiAxMDE0LjExNTUsLTI2Ny41OTgwOSAxMDE2LjE2OTIsLTI2Ny41MTI5NCBDIDEwMTguMjg4OSwtMjY3LjQyNTA2IDEwMTkuNDgxNywtMjY3LjIwMDQ0IDEwMTkuNDgxNywtMjY3LjIwMDQ0IEMgMTAxOS40ODE3LC0yNjcuMjAwNDQgMTAxOS40MDMzLC0yNjcuODQ5NDYgMTAyMC41MTMsLTI2OC4xMDY2OSBDIDEwMjEuMjU3MywtMjY4LjI3OTI1IDEwMjUuNjYyNSwtMjY4LjczMDA1IDEwMjcuNzk0MiwtMjY4Ljg4Nzk0IEMgMTAyOS44NTQ4LC0yNjkuMDQwNTQgMTAzMy4xMzcxLC0yNjguOTg0NzEgMTAzNS4wNDQyLC0yNjguMjAwNDQgQyAxMDM2Ljk5OTIsLTI2Ny4zOTY0OSAxMDQyLjkxOTIsLTI2NC43MDA0NCAxMDQyLjkxOTIsLTI2NC43MDA0NCBDIDEwNDIuOTE5MiwtMjY0LjcwMDQ0IDEwMzYuMzU5NCwtMjY3Ljk3NjMxIDEwMzUuNTEzLC0yNjguMzg3OTQgQyAxMDM1LjMxMDUsLTI2OC40ODYzOCAxMDM0Ljk0MTIsLTI2OC41OTAxNiAxMDM0LjQ4MTcsLTI2OC43MDA0NCBDIDEwMzUuNjk3MSwtMjY5LjI2MTk4IDEwMzkuNDkzNiwtMjY5LjgyODIyIDEwNDIuMjMxNywtMjcwLjIwMDQ0IEMgMTA0NS4yNDA3LC0yNzAuNjA5NDkgMTA0NS41NTQ0LC0yNzAuNjE2MDIgMTA0Ny42MDY3LC0yNzAuNTQ0MTkgQyAxMDQ5LjU0OTgsLTI3MC40NzYyIDEwNTAuNjEzOSwtMjcwLjM3OTM0IDEwNTAuNzk0MiwtMjcwLjM1NjY5IEMgMTA1MC45MTMsLTI3MC41NTEwOSAxMDUxLjE3ODgsLTI3MS4wODU1IDEwNTEuNzMxNywtMjcxLjIzMTY5IEMgMTA1Mi40NzM1LC0yNzEuNDI3ODEgMTA1Ni44NjI4LC0yNzIuMDYwNDcgMTA1OC45ODE3LC0yNzIuMzI1NDQgQyAxMDYwLjczODEsLTI3Mi41NDUwNSAxMDYzLjM4NywtMjcyLjY1Nzc1IDEwNjUuMjk0MiwtMjcyLjI5NDE5IEMgMTA2NS42MTExLC0yNzIuMjMzNzggMTA2NS45LC0yNzIuMTA0ODEgMTA2Ni4xNjkyLC0yNzIuMDEyOTQgQyAxMDY4LjEwNTQsLTI3MS4zNTIwMiAxMDc0LjAxMywtMjY5LjA3NTQ0IDEwNzQuMDEzLC0yNjkuMDc1NDQgQyAxMDc0LjAxMjksLTI2OS4wNzU0NCAxMDY3LjQ3NjMsLTI3MS44ODE5OSAxMDY2LjYzOCwtMjcyLjIzMTY5IEMgMTA2Ni40Mzc1LC0yNzIuMzE1MzIgMTA2Ni4wNjE4LC0yNzIuNDA1MDIgMTA2NS42MDY3LC0yNzIuNDgxNjkgQyAxMDY2LjgxMDQsLTI3My4xMzIxNSAxMDcwLjYyNTgsLTI3My44NTM2NCAxMDczLjMyNTUsLTI3NC40ODE2OSBDIDEwNzYuMjkyMiwtMjc1LjE3MTg5IDEwNzYuNjE0NCwtMjc1LjIzNjc2IDEwNzguNjM4LC0yNzUuMzU2NjkgQyAxMDgwLjcyNjYsLTI3NS40ODA0OSAxMDgxLjkxOTIsLTI3NS4zODc5NCAxMDgxLjkxOTIsLTI3NS4zODc5NCBDIDEwODEuOTE5MiwtMjc1LjM4NzkzIDEwODEuODMyMiwtMjc2LjAxOTk5IDEwODIuOTE5MiwtMjc2LjQxOTE5IEMgMTA4My42NDg0LC0yNzYuNjg2OTkgMTA4Ny45NjY0LC0yNzcuNzU3MTYgMTA5MC4wNDQyLC0yNzguMjMxNjkgQyAxMDkyLjA1MjcsLTI3OC42OTAzOCAxMDk1LjIxMjEsLTI3OS4yNjA5OSAxMDk3LjA0NDIsLTI3OC44NTY2OSBDIDEwOTguOTIyMywtMjc4LjQ0MjIzIDExMTAuNjIyNCwtMjc1Ljg0MTA2IDExMTAuNjIyNCwtMjc1Ljg0MTA2IEMgMTExMC42MjI0LC0yNzUuODQxMDYgMTA5OC4yOTQ5LC0yNzguODYzNzIgMTA5Ny40ODE3LC0yNzkuMTA2NjkgQyAxMDk3LjI4NzIsLTI3OS4xNjQ4MSAxMDk2LjkyMzEsLTI3OS4yMTI5NSAxMDk2LjQ4MTcsLTI3OS4yMzE2OSBDIDEwOTcuNjQ5MywtMjgwLjAzNTM4IDEwOTkuOTk1OSwtMjgwLjkxODk5IDExMDIuNTkxMSwtMjgxLjkzNDgxIEMgMTEwNC4yNzI1LC0yODIuNTkyOTkgMTEwMy41MTQ4LC0yODIuMzExNCAxMTA1LjM2NywtMjgyLjkzODQxIEMgMTEwNy4xMjA2LC0yODMuNTMyMDcgMTEwNy44NTI0LC0yODMuOTQ5MTIgMTEwNy45OTc0LC0yODQuMDUxNCBDIDExMDguMzQzNSwtMjg0LjI1NzkxIDExMDcuNjQxNCwtMjg0LjE3MzI4IDExMDcuNDUzMiwtMjg0LjA5MzggeiIKKyAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjczMzMpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenNjc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3NjY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY2MiIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE3NSIKKyAgICAgICAgICAgZD0iTSAxMDgyLjYyNSwtMjc1LjEyNSBDIDEwODQuNDk4LC0yNzQuNzMxNTIgMTA4Ny4xMjExLC0yNzMuOTc5NDUgMTA4OC42NTYzLC0yNzMuMTU2MjUgQyAxMDkwLjE5MTUsLTI3Mi4zMzMwNiAxMDkxLjQ3ODUsLTI3Mi4xMDAyNSAxMDk0LjAzMTMsLTI3MC42NTYyNSBDIDEwOTYuNTU3OSwtMjY5LjIyNjk5IDEwOTguODI3MSwtMjY4LjY0OTI5IDExMDEsLTI2OC4xMjUgQyAxMTAzLjM0NzYsLTI2Ny41NTg1OCAxMTA2LjQzNTQsLTI2Ny40MDk3NyAxMTA5Ljg0MzgsLTI2Ni45Mzc1IEMgMTEwOC43NTQ5LC0yNjcuNzc3MjUgMTEwMy4yMzY0LC0yNjguMTA5OTUgMTEwMS40Mzc1LC0yNjguNSBDIDEwOTkuNjM4NiwtMjY4Ljg5MDA2IDEwOTcuNTQzNCwtMjY5LjUxNjE2IDEwOTQuODQzOCwtMjcwLjgxMjUgQyAxMDkyLjE0NDEsLTI3Mi4xMDg4NCAxMDkxLjM0OTQsLTI3Mi42MTE0NiAxMDg5LjAzMTMsLTI3My41IEMgMTA4Ni43MTMxLC0yNzQuMzg4NTQgMTA4NS4wMjY5LC0yNzQuODgzMTQgMTA4Mi42MjUsLTI3NS4xMjUgeiIKKyAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjcyODUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTc3IgorICAgICAgICAgICBkPSJNIDEwNTEuNDY4OCwtMjcwIEMgMTA1My4zNzQxLC0yNjkuNDIyNDEgMTA1NS45OTY5LC0yNjguMzg0MjggMTA1Ny41NjI1LC0yNjcuNDA2MjUgQyAxMDU5LjEyODEsLTI2Ni40MjgyMyAxMDYwLjQ0MjcsLTI2Ni4wNDY0NCAxMDYzLjA2MjUsLTI2NC4yODEyNSBDIDEwNjUuNjU1NSwtMjYyLjUzNDA5IDEwNjguMDQ4NCwtMjYxLjU3MTk4IDEwNzAuMzEyNSwtMjYwLjY4NzUgQyAxMDcyLjc1ODYsLTI1OS43MzE5MyAxMDc1Ljk5NTEsLTI1OS4wMzAzNyAxMDc5LjcxODgsLTI1Ny42MjUgQyAxMDc4LjUyOTIsLTI1OC43NjI4NCAxMDcyLjY1NTcsLTI2MC4zMTE3NSAxMDcwLjc4MTMsLTI2MSBDIDEwNjguOTA2OCwtMjYxLjY4ODI1IDEwNjYuNjk5NSwtMjYyLjU2NjIgMTA2My45MDYzLC0yNjQuMjgxMjUgQyAxMDYxLjExMywtMjY1Ljk5NjI5IDEwNjAuMzMyNywtMjY2LjU2NTE1IDEwNTcuOTY4OCwtMjY3LjY4NzUgQyAxMDU1LjYwNDcsLTI2OC44MDk4NCAxMDUzLjkxMjEsLTI2OS41MjIwNSAxMDUxLjQ2ODgsLTI3MCB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzI4OSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxNzkiCisgICAgICAgICAgIGQ9Ik0gMTAyMC4yMTg4LC0yNjYuODQzNzUgQyAxMDIyLjEzMDcsLTI2Ni4yMDU2NCAxMDI0LjgsLTI2NS4wODgzOSAxMDI2LjM3NSwtMjY0LjAzMTI1IEMgMTAyNy45NTAxLC0yNjIuOTc0MSAxMDI5LjI3MDYsLTI2Mi41MjI1OCAxMDMxLjkwNjMsLTI2MC42MjUgQyAxMDM0LjUxNDksLTI1OC43NDY3OSAxMDM2LjkzNDcsLTI1Ny41OTQ5NyAxMDM5LjIxODgsLTI1Ni41NjI1IEMgMTA0MS42ODY1LC0yNTUuNDQ3MDUgMTA0NC45ODMzLC0yNTQuMzg5MiAxMDQ4Ljc1LC0yNTIuNzE4NzUgQyAxMDQ3LjU0NjcsLTI1My45NDEyOCAxMDQxLjU0NzIsLTI1Ni4wMzI5OCAxMDM5LjY1NjMsLTI1Ni44NDM3NSBDIDEwMzcuNzY1MywtMjU3LjY1NDUyIDEwMzUuNTkxNCwtMjU4LjczNzU0IDEwMzIuNzgxMywtMjYwLjU5Mzc1IEMgMTAyOS45NzExLC0yNjIuNDQ5OTUgMTAyOS4xNTk1LC0yNjMuMDcwNjggMTAyNi43ODEzLC0yNjQuMzEyNSBDIDEwMjQuNDAzLC0yNjUuNTU0MyAxMDIyLjY3MDYsLTI2Ni4yODgxOSAxMDIwLjIxODgsLTI2Ni44NDM3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzI5Myk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxODEiCisgICAgICAgICAgIGQ9Ik0gMTExMC4xNzE5LC0yNjYuODkwNjMgQyAxMTEwLjMyMjcsLTI2Ni44NDIwNyAxMTEwLjg1OTksLTI2Ni4yNTk2MyAxMTEwLjI4MTMsLTI2NS40MDYyNSBDIDExMDkuNDcxMiwtMjY0LjIxMTY2IDExMDQuNTc2NCwtMjYyLjA4MTk2IDExMDEuNzE4OCwtMjYxLjI4MTI1IEMgMTA5OC44NzM5LC0yNjAuNDg0MTMgMTA5NS40Mjg3LC0yNjAuMzAzNTEgMTA5MS4xNTYzLC0yNjEuNjU2MjUgQyAxMDg2Ljg1NDcsLTI2My4wMTgyIDEwODUuNjg2NiwtMjY0LjEyNDk3IDEwODAuNSwtMjY1Ljk2ODc1IEMgMTA4NS4xNjQsLTI2My44NTM1OCAxMDg2LjY5NTMsLTI2Mi4wMTY0MiAxMDkwLjYyNSwtMjYwLjYyNSBDIDEwOTIuMjQ1NywtMjYwLjA1MTEzIDEwOTMuOTkyMSwtMjU5LjY4NTQgMTA5NS42ODc1LC0yNTkuNTkzNzUgQyAxMDk1LjI0MjQsLTI1OS4yNjgxMiAxMDk0LjE1NzIsLTI1OC42MTA0NSAxMDkyLjEyNSwtMjU4IEMgMTA4OS4zMjk1LC0yNTcuMTYwMzEgMTA4NS40NzU5LC0yNTYuNDY2MjIgMTA4My44NzUsLTI1Ni4zNzUgQyAxMDgyLjM2MDQsLTI1Ni4yODg2OCAxMDgwLjczMywtMjU2Ljg4NzQ5IDEwODAuNDM3NSwtMjU3IEMgMTA4MC42MDQyLC0yNTYuODk2OTIgMTA4MC44MTA3LC0yNTYuNjIyNjYgMTA4MC4xODc1LC0yNTUuOTY4NzUgQyAxMDc5LjI4ODIsLTI1NS4wMjUxMiAxMDc0LjA0MDEsLTI1NC4wNDU3NSAxMDcxLjA2MjUsLTI1My43MTg3NSBDIDEwNjguMDk4MiwtMjUzLjM5MzIgMTA2NC41NDA5LC0yNTMuNzM0NzEgMTA2MC4xNTYzLC0yNTUuNjI1IEMgMTA1Ni4xNzgzLC0yNTcuMzM5OTcgMTA1NC44MTczLC0yNTguNTQwMzYgMTA1MC43NSwtMjYwLjM3NSBDIDEwNTAuNzUsLTI2MC4zNzUgMTA1MC43NSwtMjYwLjIxODc1IDEwNTAuNzUsLTI2MC4yMTg3NSBDIDEwNTQuMzkzMSwtMjU4LjEyMzQ2IDEwNTYuMDM0LC0yNTYuMzM1NDggMTA1OS42MjUsLTI1NC42NTYyNSBDIDEwNjEuMzU1MiwtMjUzLjg0NzE2IDEwNjMuMjE2NywtMjUzLjI0NzQ5IDEwNjUuMDMxMywtMjUyLjkzNzUgQyAxMDY0LjQ5NjQsLTI1Mi42NTA3NCAxMDYzLjQ3MzUsLTI1Mi4yMjU5OSAxMDYxLjU5MzgsLTI1MS45MDYyNSBDIDEwNTguNzI0OCwtMjUxLjQxODI5IDEwNTQuNzg0OCwtMjUxLjA5MDExIDEwNTMuMTU2MywtMjUxLjE1NjI1IEMgMTA1Mi4zMDU2LC0yNTEuMTkwNzkgMTA1MS40Mjc3LC0yNTEuMzQwNjIgMTA1MC43NSwtMjUxLjU2MjUgQyAxMDUwLjA2NTIsLTI1MS43NzczOCAxMDQ5LjU2MDMsLTI1Mi4wMDcxNyAxMDQ5LjQzNzUsLTI1Mi4wNjI1IEMgMTA0OS42MDY5LC0yNTEuOTU1MjkgMTA0OS44Njg2LC0yNTEuNjU5NjIgMTA0OS4yMTg4LC0yNTEuMDMxMjUgQyAxMDQ4LjMwOTEsLTI1MC4xNTE2MyAxMDQyLjk3MjcsLTI0OS42OTQ4NyAxMDM5Ljk2ODgsLTI0OS41NjI1IEMgMTAzNi45NzgzLC0yNDkuNDMwNzEgMTAzMy4zNzk5LC0yNTAuMDEzMTMgMTAyOC45Njg4LC0yNTIuMTI1IEMgMTAyNC41Mjc2LC0yNTQuMjUxMjYgMTAyMy4zMjczLC0yNTUuNTI2NiAxMDE4LjA2MjUsLTI1Ny45MDYyNSBDIDEwMjIuNzk2OCwtMjU1LjMwOTIxIDEwMjQuMzQ5LC0yNTMuMjc3MTUgMTAyOC40MDYzLC0yNTEuMTg3NSBDIDEwMzAuMDc5NiwtMjUwLjMyNTY1IDEwMzEuODkxNSwtMjQ5LjY5MzI1IDEwMzMuNjU2MywtMjQ5LjI1IEMgMTAzMy4xOTMsLTI0OS4wMTY2OCAxMDMyLjA2NjksLTI0OC41NjE4NiAxMDI5Ljk2ODgsLTI0OC4zMTI1IEMgMTAyNy4wODI1LC0yNDcuOTY5NTIgMTAyMy4xMzQyLC0yNDcuODE5NjIgMTAyMS41LC0yNDcuOTM3NSBDIDEwMTkuOTUzOCwtMjQ4LjA0OSAxMDE4LjI2ODgsLTI0OC43OTQ0NiAxMDE3Ljk2ODgsLTI0OC45Mzc1IEMgMTAxOC4xMzc5LC0yNDguODE3MjEgMTAxOC4zODI2LC0yNDguNTI3MDIgMTAxNy43NSwtMjQ3LjkzNzUgQyAxMDE2LjgzNzIsLTI0Ny4wODY3NyAxMDExLjUwNTksLTI0Ni42NzUzOCAxMDA4LjUsLTI0Ni41NjI1IEMgMTAwNS41MDc1LC0yNDYuNDUwMTMgMTAwMS45MTAzLC0yNDcuMDUyOTMgOTk3LjUsLTI0OS4xNTYyNSBDIDk5My40OTg3NSwtMjUxLjA2NDQ4IDk5Mi4xMTE5NywtMjUyLjI5NDA4IDk4OC4wMzEyNSwtMjU0LjI1IEMgOTg4LjAzMTIyLC0yNTQuMjUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgQyA5OTEuNjg2MzEsLTI1MS44ODk4MyA5OTMuMzI1NDYsLTI1MC4wNDEyIDk5Ni45Mzc1LC0yNDguMTg3NSBDIDk5OC42Nzc3OSwtMjQ3LjI5NDM1IDEwMDAuNTc0NSwtMjQ2LjY1OTIzIDEwMDIuNDA2MywtMjQ2LjIxODc1IEMgMTAwMS44NjYzLC0yNDUuOTcwNDUgMTAwMC44MjgyLC0yNDUuNjAzNDIgOTk4LjkzNzUsLTI0NS4zNzUgQyA5OTYuMDUxODIsLTI0NS4wMjY0MiA5OTIuMDcxNDUsLTI0NC44NTQwNSA5OTAuNDM3NSwtMjQ0Ljk2ODc1IEMgOTg5LjU4NDA1LC0yNDUuMDI4NjUgOTg4LjcxMTE5LC0yNDUuMjI2NjYgOTg4LjAzMTI1LC0yNDUuNDY4NzUgQyA5ODcuMzQ0MTUsLTI0NS43MDQwNSA5ODYuODQxOSwtMjQ1Ljk0MTAxIDk4Ni43MTg3NSwtMjQ2IEMgOTg2Ljg4ODczLC0yNDUuODg3NzMgOTg3LjE4MzIzLC0yNDUuNTc3NzUgOTg2LjUzMTI1LC0yNDQuOTY4NzUgQyA5ODUuNjE4NiwtMjQ0LjExNjI1IDk4MC4yNTU5MiwtMjQzLjY3NTM4IDk3Ny4yNSwtMjQzLjU2MjUgQyA5NzQuMjU3NTQsLTI0My40NTAxMyA5NzAuNjU2NTQsLTI0NC4wOTA1NSA5NjYuMjUsLTI0Ni4xNTYyNSBDIDk2MS44MTM0NywtMjQ4LjIzNjAzIDk2MC42MDMxMiwtMjQ5LjQ4Nzk2IDk1NS4zNDM3NSwtMjUxLjgxMjUgQyA5NjAuMDczMTMsLTI0OS4yNjUwMSA5NjEuNjM0NDksLTI0Ny4yMzQ3IDk2NS42ODc1LC0yNDUuMTg3NSBDIDk2Ny4zNTkwNSwtMjQ0LjM0MzE3IDk2OS4xNzMwNCwtMjQzLjcyMTA3IDk3MC45Mzc1LC0yNDMuMjgxMjUgQyA5NzAuNDc0MjcsLTI0My4wNDcwMyA5NjkuMzQ3OCwtMjQyLjU5NzE4IDk2Ny4yNSwtMjQyLjM0Mzc1IEMgOTY0LjM2NDMxLC0yNDEuOTk1MTcgOTYwLjQxMzgsLTI0MS43NzQyMyA5NTguNzgxMjUsLTI0MS44NzUgQyA5NTcuMjM2NjksLTI0MS45NzAzMiA5NTUuNTgwOTQsLTI0Mi43MDM4NSA5NTUuMjgxMjUsLTI0Mi44NDM3NSBDIDk1NS40NTAyNCwtMjQyLjcyNTIyIDk1NS42NjMxNywtMjQyLjQzOTkgOTU1LjAzMTI1LC0yNDEuODQzNzUgQyA5NTQuMTE5MzksLTI0MC45ODM0NyA5NDguNzg0NiwtMjQwLjUxMzUgOTQ1Ljc4MTI1LC0yNDAuMzc1IEMgOTQyLjc5MTMsLTI0MC4yMzcxIDkzOS4yMTM4LC0yNDAuODI1NjggOTM0LjgxMjUsLTI0Mi44NDM3NSBDIDkzMC44MTk0MiwtMjQ0LjY3NDY0IDkyOS40NDczOSwtMjQ1Ljg3Mjk1IDkyNS4zNzUsLTI0Ny43NSBDIDkyNS4zNzQ5OCwtMjQ3Ljc1IDkyNS4zNzUsLTI0Ny41OTM3NSA5MjUuMzc1LC0yNDcuNTkzNzUgQyA5MjkuMDIyNjEsLTI0NS40NjA0OCA5MzAuNjQ1MzMsLTI0My42NTg4OCA5MzQuMjUsLTI0MS44NzUgQyA5MzUuOTg2NzUsLTI0MS4wMTU0OSA5MzcuODU3MjcsLTI0MC40MjQ4NiA5MzkuNjg3NSwtMjQwIEMgOTM5LjE0ODAzLC0yMzkuNzQ3MSA5MzguMTM2ODcsLTIzOS4zNTg3MSA5MzYuMjUsLTIzOS4wOTM3NSBDIDkzMy4zNzAyMiwtMjM4LjY4OTM5IDkyOS40MTE4NywtMjM4LjQ0ODEzIDkyNy43ODEyNSwtMjM4LjUzMTI1IEMgOTI2LjkyOTUzLC0yMzguNTc0NjYgOTI2LjA1MzU1LC0yMzguNzM5OCA5MjUuMzc1LC0yMzguOTY4NzUgQyA5MjQuNjg5MzEsLTIzOS4xOTA3NiA5MjQuMTg1NCwtMjM5LjQxMjE0IDkyNC4wNjI1LC0yMzkuNDY4NzUgQyA5MjQuMjMyMDksLTIzOS4zNTk3NiA5MjQuNDk0NCwtMjM5LjA1OTEgOTIzLjg0Mzc1LC0yMzguNDM3NSBDIDkyMi45MzI5NiwtMjM3LjU2NzM2IDkxNy41OTM1NCwtMjM3LjA0NTk4IDkxNC41OTM3NSwtMjM2Ljg3NSBDIDkxMS42MDc0MiwtMjM2LjcwNDc5IDkwOC4wMTk5NCwtMjM3LjE5MDc3IDkwMy42MjUsLTIzOS4xNTYyNSBDIDg5OS4yMDAxMSwtMjQxLjEzNTEzIDg5OC4wMTkwNCwtMjQyLjM4NDQ0IDg5Mi43ODEyNSwtMjQ0LjUzMTI1IEMgODk3LjQ5MTIyLC0yNDIuMTQzNTggODk5LjA1MTQyLC0yNDAuMTQyNTIgOTAzLjA5Mzc1LC0yMzguMTg3NSBDIDkwNC43NjA5LC0yMzcuMzgxMTkgOTA2LjU1NDE4LC0yMzYuNzkwOTIgOTA4LjMxMjUsLTIzNi40MDYyNSBDIDkwNy44NTA4NywtMjM2LjE1NzU1IDkwNi43MTU1LC0yMzUuNjk0IDkwNC42MjUsLTIzNS4zNzUgQyA5MDEuNzQ5NCwtMjM0LjkzNjI0IDg5Ny44NDQ2LC0yMzQuNjQxOSA4OTYuMjE4NzUsLTIzNC42ODc1IEMgODk0LjY4MDUyLC0yMzQuNzMwNjIgODkyLjk4NTk1LC0yMzUuNDMyNzIgODkyLjY4NzUsLTIzNS41NjI1IEMgODkyLjg1NTgzLC0yMzUuNDQ5NjggODkzLjA5ODA3LC0yMzUuMTQ4NzUgODkyLjQ2ODc1LC0yMzQuNTMxMjUgQyA4OTEuNTYwNjMsLTIzMy42NDAxNSA4ODYuMjY1OCwtMjMzLjAwMyA4ODMuMjgxMjUsLTIzMi43MTg3NSBDIDg4MC4zMTAwNywtMjMyLjQzNTc3IDg3Ni43MDc4MywtMjMyLjg5NDU1IDg3Mi4zNDM3NSwtMjM0LjY1NjI1IEMgODY4LjM4NDQxLC0yMzYuMjU0NTYgODY3LjAxNDYsLTIzNy40NTExMiA4NjMsLTIzOC45Njg3NSBDIDg2My4wMDAwMywtMjM4Ljk2ODc1IDg2MywtMjM4LjgxMjUgODYzLC0yMzguODEyNSBDIDg2Ni41OTU5LC0yMzcuMDAxMTUgODY4LjIzODMxLC0yMzUuMjMwMTcgODcxLjgxMjUsLTIzMy42NTYyNSBDIDg3My41MzQ1NywtMjMyLjg5NzkgODc1LjM5OTk4LC0yMzIuMzY3MyA4NzcuMjE4NzUsLTIzMi4wMzEyNSBDIDg3Ni42ODI2NiwtMjMxLjc1MjE3IDg3NS42NTIxNywtMjMxLjM0MzYyIDg3My43ODEyNSwtMjMwLjk2ODc1IEMgODcwLjkyNTg2LC0yMzAuMzk2NjUgODY2Ljk5MTgzLC0yMjkuOTQ5MzYgODY1LjM3NSwtMjI5LjkzNzUgQyA4NjQuNTMwNDksLTIyOS45MzEyOSA4NjMuNjY4OTIsLTIzMC4wMTg0NCA4NjMsLTIzMC4xODc1IEMgODYyLjMyNDA5LC0yMzAuMzQ5MDEgODYxLjgzOTkxLC0yMzAuNTE2NzMgODYxLjcxODc1LC0yMzAuNTYyNSBDIDg2MS44ODU5NywtMjMwLjQ2ODQ4IDg2Mi4xNDE0MiwtMjMwLjE3OTAyIDg2MS41LC0yMjkuNSBDIDg2MC42MDIxMywtMjI4LjU0OTQ4IDg1NS4zMTM1MiwtMjI3LjU4MjkyIDg1Mi4zNzUsLTIyNy4wNjI1IEMgODQ5LjQ0OTY2LC0yMjYuNTQ0NDEgODQ1Ljk0Mjg1LC0yMjYuNjg4MjYgODQxLjY1NjI1LC0yMjguMDkzNzUgQyA4MzcuMzQwNDUsLTIyOS41MDg4MiA4MzYuMTgzNDgsLTIzMC42MjM2OSA4MzEuMDkzNzUsLTIzMi4wNjI1IEMgODM1LjY3MDYsLTIzMC4zMTE0OSA4MzcuMTgyMywtMjI4LjUwMjQ0IDg0MS4xMjUsLTIyNy4wNjI1IEMgODQyLjc1MTA4LC0yMjYuNDY4NjEgODQ0LjQ5Mzg1LC0yMjYuMTA2ODUgODQ2LjIxODc1LC0yMjUuOTA2MjUgQyA4NDUuNzY1OSwtMjI1LjYwOTIzIDg0NC42NjM5NywtMjI1LjAyMjg2IDg0Mi42MjUsLTIyNC40Mzc1IEMgODM5LjgyMDI4LC0yMjMuNjMyMzMgODM1Ljk4NjE0LC0yMjIuODYxNjcgODM0LjQwNjI1LC0yMjIuNjg3NSBDIDgzMi45MTE1LC0yMjIuNTIyNyA4MzEuMjkwMDIsLTIyMy4wMDQzMSA4MzEsLTIyMy4wOTM3NSBDIDgzMS4xNjM1NiwtMjIzLjAwMzY4IDgzMS4zOTI3OCwtMjIyLjczMzgyIDgzMC43ODEyNSwtMjIyLjAzMTI1IEMgODI5Ljg5ODc4LC0yMjEuMDE3NCA4MjQuNzM2NzMsLTIxOS42NTk2IDgyMS44NDM3NSwtMjE4Ljk2ODc1IEMgODE4Ljk2MzczLC0yMTguMjgwOTcgODE1LjUwODE1LC0yMTguMjA4NzMgODExLjI4MTI1LC0yMTkuNDA2MjUgQyA4MDcuNDQ2NCwtMjIwLjQ5MjcgODA2LjEwODY3LC0yMjEuNDc4NjIgODAyLjIxODc1LC0yMjIuNTMxMjUgQyA4MDIuMjE4NzQsLTIyMi41MzEyNSA4MDIuMjE4NzUsLTIyMi4zNzUgODAyLjIxODc1LC0yMjIuMzc1IEMgODA1LjcwMjkzLC0yMjAuOTgwMTUgODA3LjI4ODE2LC0yMTkuNDU1NiA4MTAuNzUsLTIxOC4zNDM3NSBDIDgxMi40MTc5MywtMjE3LjgwODAzIDgxNC4yMDU3OCwtMjE3LjU1NzAxIDgxNS45Njg3NSwtMjE3LjQ2ODc1IEMgODE1LjQ0OTExLC0yMTcuMTE2NjMgODE0LjQ2ODM2LC0yMTYuNTU0MjMgODEyLjY1NjI1LC0yMTUuOTM3NSBDIDgwOS44OTA1OSwtMjE0Ljk5NjI1IDgwNi4wNjYwMSwtMjE0LjAwMjEzIDgwNC41LC0yMTMuNzgxMjUgQyA4MDMuNjgyMDYsLTIxMy42NjU4NiA4MDIuODY2OSwtMjEzLjY1ODQyIDgwMi4yMTg3NSwtMjEzLjc1IEMgODAxLjU2Mzc5LC0yMTMuODMzMjEgODAxLjA4NjE1LC0yMTMuOTY4MjcgODAwLjk2ODc1LC0yMTQgQyA4MDEuMTMwNzksLTIxMy45MjUzNiA4MDEuNDAyNzQsLTIxMy42NTk1NiA4MDAuNzgxMjUsLTIxMi45MDYyNSBDIDc5OS45MTEyNSwtMjExLjg1MTcyIDc5NC43NzE2MiwtMjEwLjI0NyA3OTEuOTA2MjUsLTIwOS40Njg3NSBDIDc4OS4wNTM3MiwtMjA4LjY5Mzk5IDc4NS42NDcxMywtMjA4LjUxMDU1IDc4MS40Njg3NSwtMjA5LjU2MjUgQyA3NzcuMjYxOTIsLTIxMC42MjE2MyA3NzYuMTEyMDYsLTIxMS42MDQxNiA3NzEuMTI1LC0yMTIuNzE4NzUgQyA3NzUuNjA5NTQsLTIxMS4yNTkyOSA3NzcuMDk0MzUsLTIwOS41ODM1MiA3ODAuOTM3NSwtMjA4LjQ2ODc1IEMgNzgyLjUyMjU0LC0yMDguMDA4OTggNzg0LjIyNDI5LC0yMDcuODMwNSA3ODUuOTA2MjUsLTIwNy43ODEyNSBDIDc4NS40NjQ2OCwtMjA3LjQ0NDQ5IDc4NC4zOTM3NCwtMjA2Ljc1MzUyIDc4Mi40MDYyNSwtMjA2IEMgNzc5LjY3MjMyLC0yMDQuOTYzNTEgNzc1Ljk1NDI3LC0yMDMuODM3MzEgNzc0LjQwNjI1LC0yMDMuNTYyNSBDIDc3Mi45NDE2MywtMjAzLjMwMjQ4IDc3MS4zNDY2NywtMjAzLjY3OTA0IDc3MS4wNjI1LC0yMDMuNzUgQyA3NzEuMjIyNzUsLTIwMy42NzAzNSA3NzEuNDQyOTQsLTIwMy40MjkwMiA3NzAuODQzNzUsLTIwMi42ODc1IEMgNzY5Ljk3OTA5LC0yMDEuNjE3NDQgNzY0LjkyNzIzLC0xOTkuODY5MzUgNzYyLjA5Mzc1LC0xOTkgQyA3NTkuMjcyOTUsLTE5OC4xMzQ1MyA3NTUuODg2MjUsLTE5Ny44NDM2OSA3NTEuNzUsLTE5OC43ODEyNSBDIDc0Ny45OTc0MSwtMTk5LjYzMTg2IDc0Ni43MDIxNSwtMjAwLjQ5NzcyIDc0Mi44NzUsLTIwMS4zNzUgQyA3NDIuODc1LC0yMDEuMzc1IDc0Mi44NzUsLTIwMS4yMTg3NSA3NDIuODc1LC0yMDEuMjE4NzUgQyA3NDYuMzAyOTYsLTE5OS45ODA5NiA3NDcuODYyNDEsLTE5OC41ODY0NSA3NTEuMjUsLTE5Ny42ODc1IEMgNzUyLjg4MjE2LC0xOTcuMjU0MzYgNzU0LjYxNzA0LC0xOTcuMTA0NDkgNzU2LjM0Mzc1LC0xOTcuMTI1IEMgNzU1LjgzNDgyLC0xOTYuNzQwODMgNzU0Ljg2NywtMTk2LjEwMzE4IDc1My4wOTM3NSwtMTk1LjM3NSBDIDc1MC4zODc0MSwtMTk0LjI2MzY2IDc0Ni42NTc0MiwtMTkzLjA2NzE5IDc0NS4xMjUsLTE5Mi43NSBDIDc0NC4zMjQ2LC0xOTIuNTg0MzEgNzQzLjUxMjY5LC0xOTIuNTMxMzggNzQyLjg3NSwtMTkyLjU5Mzc1IEMgNzQyLjg3NSwtMTkyLjU5Mzc1IDc0Mi44NzUsLTE5Mi4wNzgyMyA3NDIuODc1LC0xOTEuNjcxNDYgQyA3NDIuODc1LC0xOTEuNDA2MzkgNzQyLjg3NSwtMTkxLjE4NzUgNzQyLjg3NSwtMTkxLjE4NzUgQyA3NDMuMTAxNDUsLTE5MS4zMzIxOCA3NDMuMzIzOTEsLTE5MS40NjAxMSA3NDMuNTkzNzUsLTE5MS41NjI1IEMgNzQ0LjY3NDI3LC0xOTEuOTcyNDggNzQ1Ljc2NTM2LC0xOTEuNzc4MjcgNzQ5LjU5Mzc1LC0xOTMuMjUgQyA3NTMuNDIyMTgsLTE5NC43MjE3NCA3NTQuODE3ODcsLTE5NS4yNTQ5OCA3NTUuNSwtMTk1LjY1NjI1IEMgNzU2LjE3OTYsLTE5Ni4wNTYwMyA3NTcuMTExNjUsLTE5Ni41MzU2MiA3NTcuNzE4NzUsLTE5Ny4xODc1IEMgNzU5LjU0NTYsLTE5Ny4zMjUyNSA3NjEuMjg5NSwtMTk3LjY4MDczIDc2Mi42NTYyNSwtMTk4LjE4NzUgQyA3NjUuNjI0MzcsLTE5OS4yODgwMiA3NjcuNTMxNjIsLTE5OS45OTM2OSA3NjkuNDM3NSwtMjAwLjY1NjI1IEMgNzcxLjM0MzM2LC0yMDEuMzE4NzkgNzcxLjc5MTU5LC0yMDIuMDcxMTIgNzcyLjg0Mzc1LC0yMDIuNDM3NSBDIDc3My45MzUzLC0yMDIuODE3NjEgNzc1LjAzODg2LC0yMDIuNjAyODggNzc4LjkwNjI1LC0yMDMuOTY4NzUgQyA3ODIuNzczNywtMjA1LjMzNDYxIDc4NC4xODk0MSwtMjA1Ljc5NTgzIDc4NC44NzUsLTIwNi4xODc1IEMgNzg1LjU3NjA5LC0yMDYuNTg4MDIgNzg2LjU3NTgxLC0yMDcuMTIwNDggNzg3LjE4NzUsLTIwNy43ODEyNSBDIDc4OS4xNTgzLC0yMDcuODM1OTEgNzkxLjAwNDM1LC0yMDguMTY1ODggNzkyLjQ2ODc1LC0yMDguNjU2MjUgQyA3OTUuNDcwMjMsLTIwOS42NjEzMyA3OTcuMzk0OSwtMjEwLjI3Nzk2IDc5OS4zMTI1LC0yMTAuOTA2MjUgQyA4MDAuODUxMSwtMjExLjQxMDM1IDgwMS40ODY1MiwtMjExLjk1MzAyIDgwMi4yMTg3NSwtMjEyLjM0Mzc1IEMgODAyLjQ0ODkxLC0yMTIuNDc4MDYgODAyLjY5NDQ5LC0yMTIuNTk3NDggODAyLjk2ODc1LC0yMTIuNjg3NSBDIDgwNC4wNjY5OCwtMjEzLjA0Nzk4IDgwNS4xNTAyLC0yMTIuNzY4ODcgODA5LjA2MjUsLTIxNCBDIDgxMi45NzQ4MywtMjE1LjIzMTEzIDgxNC40Mjg1NSwtMjE1LjY3Mjk1IDgxNS4xMjUsLTIxNi4wMzEyNSBDIDgxNS44MTg4OCwtMjE2LjM4ODIyIDgxNi43NTUxNSwtMjE2LjgyMzg2IDgxNy4zNzUsLTIxNy40Mzc1IEMgODE5LjI0MDIxLC0yMTcuNDYwMTYgODIxLjAxMDgxLC0yMTcuNzA0MzMgODIyLjQwNjI1LC0yMTguMTI1IEMgODI1LjQzNjY4LC0yMTkuMDM4NTQgODI3LjM5ODYzLC0yMTkuNTU1MSA4MjkuMzQzNzUsLTIyMC4wOTM3NSBDIDgzMS4yODg4NiwtMjIwLjYzMjM5IDgzMS43Njk5MywtMjIxLjM1ODI3IDgzMi44NDM3NSwtMjIxLjY1NjI1IEMgODMzLjk1Nzc2LC0yMjEuOTY1NCA4MzUuMDYzNjksLTIyMS42NDg4NiA4MzkuMDMxMjUsLTIyMi42ODc1IEMgODQyLjk5ODg2LC0yMjMuNzI2MTMgODQ0LjQ0ODgzLC0yMjQuMTIwMjMgODQ1LjE1NjI1LC0yMjQuNDM3NSBDIDg0NS44OTExMiwtMjI0Ljc2NzA5IDg0Ni45NzAwOCwtMjI1LjE5MTIyIDg0Ny41OTM3NSwtMjI1LjgxMjUgQyA4NDkuNTkxNDksLTIyNS42OTY1IDg1MS40NTExOCwtMjI1LjgzMjU5IDg1Mi45Mzc1LC0yMjYuMTg3NSBDIDg1Ni4wMTU2MSwtMjI2LjkyMjUgODU4LjAyMDk0LC0yMjcuMjg4NDQgODYwLC0yMjcuNjg3NSBDIDg2MS41ODc5MiwtMjI4LjAwNzY4IDg2Mi4yNDQyOSwtMjI4LjQ3ODA1IDg2MywtMjI4Ljc4MTI1IEMgODYzLjIzNzU3LC0yMjguODg4MDUgODYzLjQ2Njk1LC0yMjguOTc0MDEgODYzLjc1LC0yMjkuMDMxMjUgQyA4NjQuODgzNDcsLTIyOS4yNjA0NCA4NjYuMDU0NDgsLTIyOC44MjIzMiA4NzAuMDkzNzUsLTIyOS41MzEyNSBDIDg3NC4xMzMwOCwtMjMwLjI0MDE4IDg3NS41OTQsLTIzMC40NTgzNCA4NzYuMzEyNSwtMjMwLjcxODc1IEMgODc3LjAyODM2LC0yMzAuOTc4MTkgODc4LjAxNjc4LC0yMzEuMjg1OTkgODc4LjY1NjI1LC0yMzEuODEyNSBDIDg4MC41ODA1MiwtMjMxLjU3MzAxIDg4Mi40MDQxMywtMjMxLjU4Nzk3IDg4My44NDM3NSwtMjMxLjgxMjUgQyA4ODYuOTcwMDgsLTIzMi4zMDAxMiA4ODguOTk4MywtMjMyLjUxMzE3IDg5MSwtMjMyLjc4MTI1IEMgODkzLjAwMTcxLC0yMzMuMDQ5MzIgODkzLjQ4ODY5LC0yMzMuNzI2MzkgODk0LjU5Mzc1LC0yMzMuODc1IEMgODk1Ljc0MDE0LC0yMzQuMDI5MTggODk2Ljg2OTY3LC0yMzMuNTczNDMgOTAwLjkzNzUsLTIzNC4wOTM3NSBDIDkwNS4wMDUzNCwtMjM0LjYxNDA3IDkwNi40OTc2MywtMjM0Ljc4OTQ4IDkwNy4yMTg3NSwtMjM1LjAzMTI1IEMgOTA3Ljk1NTg1LC0yMzUuMjc4MzkgOTA5LjAxNjg0LC0yMzUuNjE3NDggOTA5LjY1NjI1LC0yMzYuMTU2MjUgQyA5MTEuNzA2MzIsLTIzNS44MjA3MiA5MTMuNjMwMDMsLTIzNS43NTgyOSA5MTUuMTU2MjUsLTIzNS45Mzc1IEMgOTE4LjI5ODU2LC0yMzYuMzA2NDYgOTIwLjMzNjE5LC0yMzYuNDk2ODYgOTIyLjM0Mzc1LC0yMzYuNzE4NzUgQyA5MjMuOTU0NTEsLTIzNi44OTY3NyA5MjQuNjA4NDIsLTIzNy4zMjY5NSA5MjUuMzc1LC0yMzcuNTYyNSBDIDkyNS42MTU5NCwtMjM3LjY0ODAyIDkyNS44NjkxMiwtMjM3LjcxODEgOTI2LjE1NjI1LC0yMzcuNzUgQyA5MjcuMzA2MDMsLTIzNy44Nzc3MiA5MjguNDU3NTQsLTIzNy40MDMzNSA5MzIuNTMxMjUsLTIzNy44NzUgQyA5MzYuNjA0OTksLTIzOC4zNDY2NSA5MzguMDkwMzQsLTIzOC40ODU2IDkzOC44MTI1LC0yMzguNzE4NzUgQyA5MzkuNTMxOTYsLTIzOC45NTEwMiA5NDAuNTEyNzQsLTIzOS4xOTIyMSA5NDEuMTU2MjUsLTIzOS42ODc1IEMgOTQzLjA5MjYyLC0yMzkuMzU0MDQgOTQ0LjkyNjMxLC0yMzkuMjgzMjYgOTQ2LjM3NSwtMjM5LjQzNzUgQyA5NDkuNTIxMDIsLTIzOS43NzI0NSA5NTEuNTUyNTYsLTIzOS45NTYwOSA5NTMuNTYyNSwtMjQwLjE1NjI1IEMgOTU1LjU3MjQ2LC0yNDAuMzU2MzkgOTU2LjA0NjY0LC0yNDAuOTgyNjQgOTU3LjE1NjI1LC0yNDEuMDkzNzUgQyA5NTguMzA3MzksLTI0MS4yMDkwMyA5NTkuNDUyNjgsLTI0MC43Mjg2OSA5NjMuNTMxMjUsLTI0MS4xNTYyNSBDIDk2Ny42MDk4NiwtMjQxLjU4MzgxIDk2OS4xMjAxMSwtMjQxLjcxODM0IDk2OS44NDM3NSwtMjQxLjkzNzUgQyA5NzAuNTgyOSwtMjQyLjE2MTM2IDk3MS42Mzk0NywtMjQyLjQ1MDc1IDk3Mi4yODEyNSwtMjQyLjk2ODc1IEMgOTc0LjMzODM1LC0yNDIuNTcwMDggOTc2LjI4MzEyLC0yNDIuNDc1MzUgOTc3LjgxMjUsLTI0Mi42MjUgQyA5ODAuOTYxMjMsLTI0Mi45MzMxIDk4Mi45ODgzNCwtMjQzLjA5ODI1IDk4NSwtMjQzLjI4MTI1IEMgOTg2LjYxNDA3LC0yNDMuNDI4MDcgOTg3LjI2MzEsLTI0My44NDE4IDk4OC4wMzEyNSwtMjQ0LjA2MjUgQyA5ODguMjcyNjcsLTI0NC4xNDMzNiA5ODguNTI0NzgsLTI0NC4xOTI0MSA5ODguODEyNSwtMjQ0LjIxODc1IEMgOTg5Ljk2NDYxLC0yNDQuMzI0MiA5OTEuMTA1NDYsLTI0My44MjYgOTk1LjE4NzUsLTI0NC4yMTg3NSBDIDk5OS4yNjk1OCwtMjQ0LjYxMTUgMTAwMC43NzY0LC0yNDQuNzQ5NTkgMTAwMS41LC0yNDQuOTY4NzUgQyAxMDAyLjIyMDksLTI0NS4xODcwOCAxMDAzLjE5OTcsLTI0NS40MTY0NSAxMDAzLjg0MzgsLTI0NS45MDYyNSBDIDEwMDUuNzgxOCwtMjQ1LjU1NjI2IDEwMDcuNjEyNiwtMjQ1LjQ1MTg3IDEwMDkuMDYyNSwtMjQ1LjU5Mzc1IEMgMTAxMi4yMTEyLC0yNDUuOTAxODUgMTAxNC4yMzgzLC0yNDYuMDY3IDEwMTYuMjUsLTI0Ni4yNSBDIDEwMTguMjYxNiwtMjQ2LjQzMjk5IDEwMTguNzY0MiwtMjQ3LjA4ODAyIDEwMTkuODc1LC0yNDcuMTg3NSBDIDEwMjEuMDI3MywtMjQ3LjI5MDczIDEwMjIuMTY3MiwtMjQ2LjgwMjY3IDEwMjYuMjUsLTI0Ny4xODc1IEMgMTAzMC4zMzI5LC0yNDcuNTcyMzIgMTAzMS44Mzg3LC0yNDcuNjg4NSAxMDMyLjU2MjUsLTI0Ny45MDYyNSBDIDEwMzMuMzAxOCwtMjQ4LjEyODY4IDEwMzQuMzU4MSwtMjQ4LjQyMDc0IDEwMzUsLTI0OC45Mzc1IEMgMTAzNy4wNTc0LC0yNDguNTM1NzMgMTAzOS4wMDI5LC0yNDguNDM0MTcgMTA0MC41MzEzLC0yNDguNTkzNzUgQyAxMDQzLjY3NzksLTI0OC45MjIyNyAxMDQ1LjcwODQsLTI0OS4xMTY0NSAxMDQ3LjcxODgsLTI0OS4zMTI1IEMgMTA0OS4zMzE4LC0yNDkuNDY5NzkgMTA0OS45ODQ0LC0yNDkuOTQzOTggMTA1MC43NSwtMjUwLjE4NzUgQyAxMDUwLjk5MDcsLTI1MC4yNzU1NCAxMDUxLjIxMzIsLTI1MC4zMDg4NyAxMDUxLjUsLTI1MC4zNDM3NSBDIDEwNTIuNjQ4MywtMjUwLjQ4MzQ1IDEwNTMuODE2NywtMjUwLjAwMzg0IDEwNTcuODc1LC0yNTAuNTkzNzUgQyAxMDYxLjkzMzMsLTI1MS4xODM2NyAxMDYzLjQzNjgsLTI1MS4zNzA4OSAxMDY0LjE1NjMsLTI1MS42MjUgQyAxMDY0Ljg3MywtMjUxLjg3ODE2IDEwNjUuODMwOCwtMjUyLjE4MzA3IDEwNjYuNDY4OCwtMjUyLjcxODc1IEMgMTA2OC4zODg1LC0yNTIuNTA2ODEgMTA3MC4xODg3LC0yNTIuNTY3MzQgMTA3MS42MjUsLTI1Mi44MTI1IEMgMTA3NC43NDQxLC0yNTMuMzQ0OSAxMDc2LjczNjYsLTI1My43NDExMSAxMDc4LjcxODgsLTI1NC4xMjUgQyAxMDgwLjcwMDksLTI1NC41MDg4NyAxMDgxLjE5MzEsLTI1NS4xNjQ2NSAxMDgyLjI4MTMsLTI1NS40MDYyNSBDIDEwODMuNDEwMSwtMjU1LjY1NjkxIDEwODQuNTUxNiwtMjU1LjI4OTk2IDEwODguNTMxMywtMjU2LjI4MTI1IEMgMTA5Mi41MTA5LC0yNTcuMjcyNTMgMTA5My45NjA5LC0yNTcuNzAwNTUgMTA5NC42NTYzLC0yNTguMDYyNSBDIDEwOTUuMzc4NiwtMjU4LjQzODUxIDEwOTYuNDE4MiwtMjU4LjkzMzA4IDEwOTcuMDMxMywtMjU5LjU5Mzc1IEMgMTA5OC45OTQzLC0yNTkuNjA1OCAxMTAwLjgyNSwtMjU5Ljg4NDggMTEwMi4yNSwtMjYwLjQzNzUgQyAxMTA1LjIwMTIsLTI2MS41ODIxMSAxMTA3LjEyMzIsLTI2Mi4zMDY5MiAxMTA4LjkzNzUsLTI2My4xODc1IEMgMTExMC4zOTMyLC0yNjMuODk0MDMgMTExMS4yNzIzLC0yNjQuODczOTEgMTExMS40ODQ0LC0yNjUuMTcxODggQyAxMTExLjY5NjYsLTI2NS40Njk4NCAxMTExLjU5NjIsLTI2NS45MTcxOCAxMTExLjYyMjMsLTI2NS45Mzg2MyBDIDExMTEuNjY1MiwtMjY1Ljk3Mzg3IDExMTEuOTQxNiwtMjY2LjAyMzYgMTExMi4xMDEzLC0yNjYuMzY3MDcgQyAxMTEyLjk2MDIsLTI2OC4yMTQxNSAxMTE0LjQyMjMsLTI3Mi4wMTE2NiAxMTE0LjUzNjUsLTI3Mi42OTY1MiBDIDExMTQuNjUwMiwtMjczLjM3ODY4IDExMTQuNzAwMywtMjc0LjA0NDI2IDExMTQuNzUxLC0yNzQuNDQxNDkgQyAxMTE0Ljc4MDQsLTI3NC42NzEwMSAxMTE0LjYwNDMsLTI3NS4zMDY5MyAxMTE0LjYyNjQsLTI3NS4zNjU1MyBDIDExMTQuNjU3MywtMjc1LjQ0NzU5IDExMTQuOTMwOSwtMjc1LjYzMDgxIDExMTQuOTg2MywtMjc1Ljg4MDI0IEMgMTExNS4yNTI2LC0yNzcuMDc4NTcgMTExNS4wNzUyLC0yNzguMDcxNTMgMTExNC44NjEyLC0yNzkuNDg5MTcgQyAxMTE0LjY0NzIsLTI4MC45MDY4MSAxMTEzLjg3NzUsLTI4NC4xMTEzMSAxMTEzLjIyNDMsLTI4NC45NjU0MyBDIDExMTIuNTY1NCwtMjg1LjgyNzE1IDExMTIuMDAxNCwtMjg1Ljk3NjYgMTExMS40NzY0LC0yODUuOTY2MDkgQyAxMTExLjI2NzgsLTI4NS42OTYzMyAxMTExLjYxMzIsLTI4NS43MDMgMTExMS42MzksLTI4NS42NTM0OCBDIDExMTIuMzE5NiwtMjg1LjYwMjY5IDExMTIuNTczLC0yODUuMjg0ODQgMTExMy4wNTgyLC0yODQuNzU2ODYgQyAxMTEzLjU0MzQsLTI4NC4yMjg4OCAxMTE0LjI4LC0yODAuOTA1NjkgMTExNC40MTY2LC0yNzkuNDU1MyBDIDExMTQuNTUzMiwtMjc4LjAwNDkxIDExMTQuNjA2NiwtMjc2LjU5NTEgMTExNC4zMjg2LC0yNzUuOTg2NjYgQyAxMTE0LjA1MDUsLTI3NS4zNzgyMSAxMTEzLjYwNTQsLTI3NS40Njk2MyAxMTEzLjMxMywtMjc1LjQwMzc1IEMgMTExMy44NDQsLTI3NS4yMTc4NiAxMTEzLjk4MjgsLTI3NS4yNzg5MiAxMTE0LjA0NDQsLTI3NC40MzQ0NiBDIDExMTQuMTAzNywtMjczLjYyMTA4IDExMTMuOTExMiwtMjcyLjc5NDc3IDExMTMuNTI0NiwtMjcxLjYyODg0IEMgMTExMy4xMzM0LC0yNzAuNDQ4ODMgMTExMS42Nzk0LC0yNjcuMjc4ODYgMTExMS4yMzg5LC0yNjcuMDMwMDcgQyAxMTEwLjc4NjYsLTI2Ni43NzQ1NiAxMTEwLjUwNzUsLTI2Ni43NTk2OSAxMTEwLjE3MTksLTI2Ni44OTA2MyB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMzNyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Njc2Nzc2Nzc3NjY3Njc3Nzc3Nzc2NzY3NzY3Nzc3Njc2Nzc3Nzc3NzY3Njc3Njc3Nzc2NzY3Nzc3Nzc3Njc2Nzc2Nzc3NzY3Njc3Nzc3Nzc2NzY3NzY3Nzc3Njc2Nzc3Nzc3NzY3Njc3Njc3NzY2NzY3NzY3Njc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3N6c3N6c3NzenpjY3p6emN6enpjIiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxODMiCisgICAgICAgICAgIGQ9Ik0gOTg4Ljc1LC0yNjMuODQzNzUgQyA5OTAuNjYxNjEsLTI2My4yMDkzNSA5OTMuMzAwMjcsLTI2Mi4wODUzNCA5OTQuODc1LC0yNjEuMDMxMjUgQyA5OTYuNDQ5NzcsLTI1OS45NzcxNiA5OTcuNzcxMSwtMjU5LjU0ODczIDEwMDAuNDA2MywtMjU3LjY1NjI1IEMgMTAwMy4wMTQ1LC0yNTUuNzgzMTEgMTAwNS40MzMyLC0yNTQuNjQxMDMgMTAwNy43MTg4LC0yNTMuNTkzNzUgQyAxMDEwLjE4ODEsLTI1Mi40NjIyOCAxMDEzLjQ3MDksLTI1MS40MzkwMSAxMDE3LjI1LC0yNDkuNjU2MjUgQyAxMDE2LjA0MjgsLTI1MC45MTQ2NSAxMDEwLjExMSwtMjUzLjAyMDcgMTAwOC4yMTg4LC0yNTMuODQzNzUgQyAxMDA2LjMyNjYsLTI1NC42NjY3OSAxMDA0LjA5MDgsLTI1NS43NzQyNCAxMDAxLjI4MTMsLTI1Ny42MjUgQyA5OTguNDcxNjksLTI1OS40NzU3NSA5OTcuNjU5MDYsLTI2MC4xMDY1NCA5OTUuMjgxMjUsLTI2MS4zNDM3NSBDIDk5Mi45MDM0MywtMjYyLjU4MDk0IDk5MS4yMDEzNywtMjYzLjI5Mjk1IDk4OC43NSwtMjYzLjg0Mzc1IHoiCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3Mjk3KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE4NSIKKyAgICAgICAgICAgZD0iTSA5NTcuNSwtMjYwLjc4MTI1IEMgOTU5LjQxLC0yNjAuMTYzMTUgOTYyLjA4Mjg4LC0yNTkuMDcxOTEgOTYzLjY1NjI1LC0yNTguMDMxMjUgQyA5NjUuMjI5NjQsLTI1Ni45OTA1OSA5NjYuNTUyMzMsLTI1Ni41NDg3MyA5NjkuMTg3NSwtMjU0LjY1NjI1IEMgOTcxLjc5NTczLC0yNTIuNzgzMSA5NzQuMjE0NDIsLTI1MS42NDEwNCA5NzYuNSwtMjUwLjU5Mzc1IEMgOTc4Ljk2OTMxLC0yNDkuNDYyMjggOTgyLjI1MjEzLC0yNDguNDM5IDk4Ni4wMzEyNSwtMjQ2LjY1NjI1IEMgOTg0LjgyMzk3LC0yNDcuOTE0NjUgOTc4LjgyOTcxLC0yNTAuMDUxOTUgOTc2LjkzNzUsLTI1MC44NzUgQyA5NzUuMDQ1MzMsLTI1MS42OTgwNCA5NzIuODQwODQsLTI1Mi44MDU1IDk3MC4wMzEyNSwtMjU0LjY1NjI1IEMgOTY3LjIyMTY3LC0yNTYuNTA3IDk2Ni40MzgzLC0yNTcuMDk1NTcgOTY0LjA2MjUsLTI1OC4zMTI1IEMgOTYxLjY4NjcyLC0yNTkuNTI5NDEgOTU5Ljk0OTI5LC0yNjAuMjUxMzUgOTU3LjUsLTI2MC43ODEyNSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMwMSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxODciCisgICAgICAgICAgIGQ9Ik0gOTI2LjA5Mzc1LC0yNTcuMzc1IEMgOTI4LjAwMTQ3LC0yNTYuNzc3NTUgOTMwLjY0NzIzLC0yNTUuNzExMTYgOTMyLjIxODc1LC0yNTQuNjg3NSBDIDkzMy43OTAyNSwtMjUzLjY2Mzg1IDkzNS4wODg5NywtMjUzLjI0Nzc5IDkzNy43MTg3NSwtMjUxLjQwNjI1IEMgOTQwLjMyMTY2LC0yNDkuNTgzNTIgOTQyLjc0NzYyLC0yNDguNDM0MDUgOTQ1LjAzMTI1LC0yNDcuNDA2MjUgQyA5NDcuNDk4NDUsLTI0Ni4yOTU4NCA5NTAuNzg2NiwtMjQ1LjMxMzAyIDk1NC41NjI1LC0yNDMuNTYyNSBDIDk1My4zNTYyNywtMjQ0LjgxMDYgOTQ3LjM5MDYsLTI0Ni44ODA1OSA5NDUuNSwtMjQ3LjY4NzUgQyA5NDMuNjA5NDIsLTI0OC40OTQ0IDk0MS4zOTc1OCwtMjQ5LjU3ODU0IDkzOC41OTM3NSwtMjUxLjM3NSBDIDkzNS43ODk5LC0yNTMuMTcxNDQgOTM0Ljk2NjcxLC0yNTMuNzc3NTEgOTMyLjU5Mzc1LC0yNTQuOTY4NzUgQyA5MzAuMjIwNzgsLTI1Ni4xNTk5OSA5MjguNTQwMTMsLTI1Ni44NzE1OCA5MjYuMDkzNzUsLTI1Ny4zNzUgeiIKKyAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjczMDUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTg5IgorICAgICAgICAgICBkPSJNIDg5NC45MDYyNSwtMjUzLjU2MjUgQyA4OTYuODA4MzgsLTI1My4wMDg5NSA4OTkuNDkzMjYsLTI1MS45NzM2MyA5MDEuMDYyNSwtMjUwLjk2ODc1IEMgOTAyLjYzMTczLC0yNDkuOTYzODggOTAzLjkzNjUxLC0yNDkuNTYwMTEgOTA2LjU2MjUsLTI0Ny43NSBDIDkwOS4xNjE2MiwtMjQ1Ljk1ODM2IDkxMS41NjI4NCwtMjQ0Ljg3ODExIDkxMy44NDM3NSwtMjQzLjg3NSBDIDkxNi4zMDgwMywtMjQyLjc5MTI2IDkxOS42MDM1OSwtMjQxLjgzNDcxIDkyMy4zNzUsLTI0MC4xMjUgQyA5MjIuMTcwMiwtMjQxLjM2MDA3IDkxNi4yMDA4NCwtMjQzLjM2OTc4IDkxNC4zMTI1LC0yNDQuMTU2MjUgQyA5MTIuNDI0MTgsLTI0NC45NDI3MiA5MTAuMjM3MywtMjQ1Ljk4NzA1IDkwNy40Mzc1LC0yNDcuNzUgQyA5MDQuNjM3NzMsLTI0OS41MTI5NCA5MDMuODM4MzEsLTI1MC4xMTgzNiA5MDEuNDY4NzUsLTI1MS4yODEyNSBDIDg5OS4wOTkxOCwtMjUyLjQ0NDEzIDg5Ny4zNDU1LC0yNTMuMTE1MzcgODk0LjkwNjI1LC0yNTMuNTYyNSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMwOSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxOTEiCisgICAgICAgICAgIGQ9Ik0gODYzLjcxODc1LC0yNDguNjU2MjUgQyA4NjUuNTk5MzcsLTI0OC4yMjcxNiA4NjguMjIzMDIsLTI0Ny4yNzU4NyA4NjkuNzgxMjUsLTI0Ni4zNDM3NSBDIDg3MS4zMzk0OCwtMjQ1LjQxMTY0IDg3Mi42MzM1OCwtMjQ1LjA4NTk5IDg3NS4yNSwtMjQzLjM0Mzc1IEMgODc3LjgzOTcxLC0yNDEuNjE5MzEgODgwLjIzMDY3LC0yNDAuNjM1NzMgODgyLjUsLTIzOS43MTg3NSBDIDg4NC45NTE3NiwtMjM4LjcyODA2IDg4OC4yMzk1OSwtMjM3Ljg0MTY4IDg5MiwtMjM2LjIxODc1IEMgODkwLjc5ODY5LC0yMzcuNDI2MDkgODg0Ljg0NzUxLC0yMzkuMjg0ODQgODgyLjk2ODc1LC0yNDAgQyA4ODEuMDksLTI0MC43MTUxNyA4NzguODgzMzUsLTI0MS42ODQ0MiA4NzYuMDkzNzUsLTI0My4zNzUgQyA4NzMuMzA0MTIsLTI0NS4wNjU1NyA4NzIuNTA5MTQsLTI0NS42MDMyMiA4NzAuMTU2MjUsLTI0Ni42NTYyNSBDIDg2Ny44MDMzMywtMjQ3LjcwOTI2IDg2Ni4xMzA0MSwtMjQ4LjM2ODczIDg2My43MTg3NSwtMjQ4LjY1NjI1IHoiCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3MzEzKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE5MyIKKyAgICAgICAgICAgZD0iTSA4MzMuMTU2MjUsLTI0MS4zNzUgQyA4MzUuMDA0NjEsLTI0MS4wNzg1NiA4MzcuNjI1NywtMjQwLjM5ODY4IDgzOS4xNTYyNSwtMjM5LjU5Mzc1IEMgODQwLjY4NjgzLC0yMzguNzg4ODIgODQxLjk2OTk5LC0yMzguNTM4MDIgODQ0LjUzMTI1LC0yMzcuMDYyNSBDIDg0Ny4wNjYyOSwtMjM1LjYwMjA0IDg0OS40MjE5MywtMjM0LjczNzQxIDg1MS42NTYyNSwtMjM0IEMgODU0LjA3MDI0LC0yMzMuMjAzMzIgODU3LjMxMzM2LC0yMzIuNTMzMTEgODYxLjAzMTI1LC0yMzEuMTU2MjUgQyA4NTkuODQzNTQsLTIzMi4yODQ5OCA4NTMuOTQzNTMsLTIzMy43NDYgODUyLjA5Mzc1LC0yMzQuMzEyNSBDIDg1MC4yNDM5OCwtMjM0Ljg3OSA4NDguMDkwMzMsLTIzNS42ODY0MiA4NDUuMzQzNzUsLTIzNy4xNTYyNSBDIDg0Mi41OTcxOCwtMjM4LjYyNjA4IDg0MS44NDIzOSwtMjM5LjA3NjUzIDgzOS41MzEyNSwtMjM5LjkzNzUgQyA4MzcuMjIwMSwtMjQwLjc5ODQ1IDgzNS41MjY1NCwtMjQxLjI1NzU5IDgzMy4xNTYyNSwtMjQxLjM3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMxNyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxOTUiCisgICAgICAgICAgIGQ9Ik0gODAyLjkwNjI1LC0yMzIuMzEyNSBDIDgwNC43Mjg0NSwtMjMyLjEwMTIzIDgwNy4yNzIwMSwtMjMxLjUxMTkzIDgwOC43ODEyNSwtMjMwLjc4MTI1IEMgODEwLjI5MDUsLTIzMC4wNTA1OSA4MTEuNTM2OTMsLTIyOS44NTEyNyA4MTQuMDYyNSwtMjI4LjUgQyA4MTYuNTYyMjYsLTIyNy4xNjI1NCA4MTguODk0MDQsLTIyNi40NTE1NyA4MjEuMDkzNzUsLTIyNS44NDM3NSBDIDgyMy40NzAyOCwtMjI1LjE4NzA4IDgyNi42NTgzOSwtMjI0Ljc3MDg3IDgzMC4zMTI1LC0yMjMuNjU2MjUgQyA4MjkuMTQ1MTUsLTIyNC43MDEyMSA4MjMuMzgzNjIsLTIyNS43NTk1NCA4MjEuNTYyNSwtMjI2LjIxODc1IEMgODE5Ljc0MTM5LC0yMjYuNjc3OTYgODE3LjYxMDI1LC0yMjcuMzQ1NzEgODE0LjkwNjI1LC0yMjguNjU2MjUgQyA4MTIuMjAyMjIsLTIyOS45NjY3NyA4MTEuNDM1MTksLTIzMC4zNzYxNSA4MDkuMTU2MjUsLTIzMS4xMjUgQyA4MDYuODc3MywtMjMxLjg3MzgzIDgwNS4yNDMsLTIzMi4zMDQzMSA4MDIuOTA2MjUsLTIzMi4zMTI1IHoiCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3MzIxKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE5NyIKKyAgICAgICAgICAgZD0iTSA3NzMuMTg3NSwtMjIyLjE4NzUgQyA3NzQuOTk4NTksLTIyMi4wMDg4IDc3Ny41MDgwOSwtMjIxLjUyMjQ0IDc3OSwtMjIwLjg0Mzc1IEMgNzgwLjQ5MTk0LC0yMjAuMTY1MDYgNzgxLjc1MzQsLTIyMC4wNDU1MyA3ODQuMjUsLTIxOC43ODEyNSBDIDc4Ni43MjEwNywtMjE3LjUyOTg3IDc4OS4wNDAwNSwtMjE2Ljg4NTExIDc5MS4yMTg3NSwtMjE2LjM0Mzc1IEMgNzkzLjU3MjYyLC0yMTUuNzU4ODcgNzk2LjcxMDA5LC0yMTUuNDQ2MjMgODAwLjMxMjUsLTIxNC41IEMgNzk5LjE2MTY2LC0yMTUuNDkxMTYgNzkzLjQ1OTk5LC0yMTYuMjgzMyA3OTEuNjU2MjUsLTIxNi42ODc1IEMgNzg5Ljg1MjUzLC0yMTcuMDkxNyA3ODcuNzQwNzIsLTIxNy43MDg2NiA3ODUuMDYyNSwtMjE4LjkzNzUgQyA3ODIuMzg0MzIsLTIyMC4xNjYzNCA3ODEuNjU5MDUsLTIyMC41NDgzOSA3NzkuNDA2MjUsLTIyMS4yMTg3NSBDIDc3Ny4xNTM0NiwtMjIxLjg4OTA5IDc3NS41MDk5OCwtMjIyLjIyMTA3IDc3My4xODc1LC0yMjIuMTg3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMyOSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxOTkiCisgICAgICAgICAgIGQ9Ik0gNzQzLjU2MjUsLTIxMS4xODc1IEMgNzQ1LjM1NTMxLC0yMTEuMDU4MzkgNzQ3LjgzNTYzLC0yMTAuNjM3ODUgNzQ5LjMxMjUsLTIxMCBDIDc1MC43ODk0LC0yMDkuMzYyMTUgNzUyLjAyODYsLTIwOS4yNTg0NCA3NTQuNSwtMjA4LjA2MjUgQyA3NTYuOTQ2MTgsLTIwNi44Nzg3OCA3NTkuMjIwNTQsLTIwNi4zMTU4NCA3NjEuMzc1LC0yMDUuODQzNzUgQyA3NjMuNzAyNjcsLTIwNS4zMzM3MiA3NjYuNzk0NiwtMjA1LjE2MzExIDc3MC4zNzUsLTIwNC4yODEyNSBDIDc2OS4yMzEyMSwtMjA1LjI1MTg1IDc2My42Mjc0MSwtMjA1Ljg3MTkgNzYxLjg0Mzc1LC0yMDYuMjE4NzUgQyA3NjAuMDYwMDgsLTIwNi41NjU1OSA3NTcuOTYwOSwtMjA3LjEwNjMxIDc1NS4zMTI1LC0yMDguMjUgQyA3NTIuNjY0MDksLTIwOS4zOTM2OCA3NTEuOTE3NTUsLTIwOS43NjYzMSA3NDkuNjg3NSwtMjEwLjM3NSBDIDc0Ny40NTc0MiwtMjEwLjk4MzY4IDc0NS44NjE1NiwtMjExLjI4NDY2IDc0My41NjI1LC0yMTEuMTg3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMyNSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgPC9nPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA4NjMuODc4MTIsNDc1LjY2NzkgQyA4NjUuNTIwMjQsNDcyLjQ0OTkgODY3LjM5NTkzLDQ2OS45MzI2MSA4NjguNzM5NDgsNDY1LjgxODkyIEMgODY5LjUzODIsNDYyLjE2MTAzIDg3Mi4wNTE1Miw0NjMuNzg4MTkgODc1Ljk5OTk1LDQ1Ny40MjIwMiBDIDg3Ny40MDE4OCw0NTUuMTgyNTIgODgxLjQ3NjQ4LDQ1Ny44MTMzOCA4ODQuOTY1MDUsNDU1LjAyMjkxIEMgODg2LjIzNTc3LDQ1NC4yMTk3MiA4ODcuODQ5OTMsNDU0LjYxODYgODg5LjQ0NzYxLDQ1NC45NTk3OCBDIDg5My4yMTMsNDU2LjI3ODc0IDg5NS4yNzMzNyw0NTguNjYzMzMgODk3Ljc4MTM3LDQ2MC43NjgxNSBDIDkwMy45MjA0Myw0NjYuNzM4MzggOTE4LjMxNTUxLDQ2OC43MTE0MiA5MjEuMjY3NDEsNDY3LjA4MTYxIEMgOTIyLjcwMTQ2LDQ2NC4xNzY4NyA5MjkuMTQ4NjksNDYxLjY3MjczIDkzMy42NDE3OCw0NTUuOTY5OTMgQyA5MzQuMzg5ODksNDU0Ljg0NzI2IDk0NS4zNzExNCw0NDcuMjI1NDcgOTQ4LjI4ODk5LDQ0OS40MDM5NCIKKyAgICAgICBpZD0icGF0aDgyMDEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gODg4LjUwMDU5LDQ2NS4yNTA3MSBDIDg5NS44NjQsNDYyLjAxNzc0IDkwMi4zMTE0OSw0NTYuMzQyMzEgOTA5LjIwODcyLDQ1MS44NjYxOSBDIDkxMi41MTkyOSw0NDkuODk2NjUgOTE2LjA3ODU1LDQ1NS4wODIyIDkyMC4wMDQ3Miw0NTUuNDY0ODUgQyA5MjIuMzAyNDUsNDU1LjI0NjcyIDkyMy43MTc2Miw0NTYuNjY3NDQgOTI1LjY4NjgzLDQ1Ny4xMDYzNSBDIDkzMC44NDMxOSw0NTguNDI0MTQgOTI4LjA4NDc2LDQ2MC45NzEyMyA5MzUuNjYyMDksNDYzLjU0NjA3IEMgOTQxLjgxNzcsNDY1LjI2NjQ3IDk0NC41Njk0OSw0NTYuNzQ3NiA5NTAuNTYxODQsNDU2LjIyMjQ3IEMgOTU1LjQzOTIzLDQ1NS43MTk0OCA5NTguNjYwNzYsNDU1LjkwNjQ0IDk2Mi4xNzg1OSw0NTUuOTY5OTMgQyA5NjYuMTA1NTUsNDU2LjEwODgyIDk2Ni4yNTcxNCw0NTIuNDcyMzMgOTY4LjIzOTUxLDQ1MC42NjY2MyBDIDk3MS4yMjAwNyw0NDcuODYxNDEgOTc1LjM5NTEyLDQ0OC44MTY5MSA5NzguMzg0MzYsNDQ1LjkyNTczIEMgOTc5LjQwMTksNDQ0LjU0MTA1IDk4MC4zMzg5NCw0NDIuOTE0ODggOTgxLjExODk1LDQ0MC44MTc2NCBDIDk4Mi4wMDA5Niw0MzguODE3MyA5ODQuMTU5MDEsNDQxLjEyMzYyIDk4NS45MTcxOCw0NDIuMDgwMzMiCisgICAgICAgaWQ9InBhdGg4MjAzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2MiIC8+CisgIDwvZz4KKyAgPGcKKyAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKKyAgICAgaWQ9ImxheWVyMTUiCisgICAgIGlua3NjYXBlOmxhYmVsPSJGZWV0IgorICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI5MDQ4KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNDAzLjI3OTIyLDEwNTYuMzA1OCBMIDQ1OS44NDc3NiwxMDEzLjg3OTQgTCA1MzEuOTcyNjUsMTAyOC4wMjE1IEwgNDg1LjMwMzYxLDEwODAuMzQ3NCBMIDQzMS41NjM0OSwxMDg3LjQxODUgTCA0MDMuMjc5MjIsMTA1Ni4zMDU4IHoiCisgICAgICAgaWQ9InBhdGg4OTk0IiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhZGE0Njk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDU0Mi4yNzE4MywxMDYwLjU3MTkgQyA1NDAuODY0NTYsMTA3OS4zNzMxIDU0MS4xMjY5MywxMDkzLjMyMjkgNTQ0LjM1MzU3LDExMDkuODc1MiBDIDU0Ny41ODAyMywxMTI2LjQyNzUgNTYwLjc1OTY2LDExNTUuNzgyNSA1NjQuNjg3OTgsMTE3My4wNTg5IEMgNTY4LjYxNDE5LDExOTAuMzI2IDU2Ny4zODIxMSwxMjExLjM2ODYgNTUyLjIyODU0LDEyMjQuMjA3MiBDIDUzNi45MTA5MywxMjM3LjE4NDYgNTEwLjE3NzI2LDEyNDUuODA2MSA0ODQuMzk2MjMsMTIzOS45NDA5IEMgNDU4LjYxNTE4LDEyMzQuMDc1NyA0MTQuODQ3MTYsMTE5MC43MTc1IDM5NS44MDYwNCwxMTY5LjcxMjYgQyAzNzYuNjkzOSwxMTQ4LjYyOTMgMzMyLjA0NTE4LDEwNzUuODYyIDMxNy44Njc1MSwxMDQ1LjQzNjggQyAzMDMuNjg5ODQsMTAxNS4wMTE3IDMwNS4yMDc5LDEwMDguNzE4MiAzMDkuNzQ3NzksOTk5LjkwNzA4IEMgMzAwLjM4MTA3LDk3NS4zODY1OCAyOTcuMzM0MDgsOTQ5Ljg0MDI3IDI3Ni4wMzUzNCw5MjQuMzMwNDQgQyAzMDYuMzYwODEsOTI3LjQ0NDg4IDMxOS45MTU2Miw5NTEuMjg2NzcgMzM2LjE2MTAyLDk3MS40NzAxOSBDIDMzMC42MzExMyw5MjMuMzk0MTYgMzE4LjEwNjMxLDkwNy4wNTM2OSAzMDcuNzg3MDcsODgwLjc0NTg5IEMgMzM3Ljc4MTM3LDg4Ni44Mjc1NCAzNTguMzY2NDMsOTEyLjYxODI4IDM3MS43NjY4Niw5NTMuNDU4MzkgQyAzODEuMzIxMDEsOTQ5LjU0MDQ4IDM5MC4wMDQ2Miw5NDQuMDg1NDUgNDAxLjk1NDI3LDk0NC4zOTcxOSBDIDM5MC42NTY3Nyw5MDIuNzAxMzkgMzg0LjAwNDgxLDg3NC40ODEzNSAzNjUuMjY3MDIsODQzLjMyNzI1IEMgNDE4LjcwODk4LDg0OC45OTc1OCA0NDguOTI0MDQsOTIzLjk2NjU3IDQ0NC4yMzg0NCw5MzEuMjg4MDUgQyA0NTQuMjE2NDEsOTI5LjA0NDA2IDQ2My4yNDQwOSw5MjQuNzU3NjcgNDc0LjY3NDk3LDkyNS42MzYzOCBDIDQ2My40MjYsODg3LjI4OTM2IDQ1My42MjcxNiw4NDguNzY4NDggNDcxLjAxNTI2LDgwNi45ODgxOSBDIDQ3MS4wMTUyNiw4MDYuOTg4MTkgNTE5LjMwMjA0LDg3Mi40MjUwNyA1MjUuNDA0OTIsODkyLjc5Mzk3IEMgNTMxLjUwNzc5LDkxMy4xNjI4NyA1MjYuOTIzNzMsOTMxLjQ5NDQ4IDUyNi45MjM3Myw5MzEuNDk0NDggQyA1MjYuOTIzNzMsOTMxLjQ5NDQ4IDU0My44ODMzLDk2Mi41Nzk3OCA1NDcuMjE3NjUsOTgyLjU4ODYyIEMgNTUwLjU5MDc1LDEwMDIuODMgNTQzLjY4NDk2LDEwNDEuNjkxOSA1NDIuMjcxODMsMTA2MC41NzE5IHoiCisgICAgICAgaWQ9InBhdGg0MTg5IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6emNjY2NjY2NjY2N6Y3p6IiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzNTg3KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNzE5LjUsNzM4LjY5NTE5IEwgNzM3LjgxMTc3LDc1NC4xMjcxNSBMIDc4Mi4yMjI4LDczOC43Mzg5NCBMIDgwNS41LDcxMy4xOTUxOSBMIDgxNi45NjM5Nyw3MzIuNDE1ODQgTCA4NDcuNjM1NTgsNzQ1LjE5OTM4IEwgODcyLjczMjk1LDc1MC45Mjc3NSBMIDg5Miw3MjMuMTk1MTkgTCA5MDguMDIzMDksNzQ3LjAyMTI2IEwgOTQ3LDc1Mi4xOTUxOSBMIDk1Ny4yNDU0MSw3NDUuOTk2NjcgTCA5NjQuMDAwMTIsNzU0LjY5NDg3IEwgOTg5LjUsNzY1LjY5NTE5IEwgOTkxLjUsNzI1LjE5NTE5IEwgOTU1Ljk0ODY2LDcxMC42NTc2IEwgOTIzLjQ1NTkxLDY4OS4xMzA1IEwgODgzLjAwMzgsNjc3LjY2NDkyIEwgODYxLjY5NjY4LDY2Mi4xMzE0OCBMIDg0MCw2ODUuMTk1MTkgTCA3NTUuMDI4NzgsNjM4LjYxMjA4IEwgNzIyLDY3Ni42OTUxOSBMIDcxOS41LDczOC42OTUxOSB6IgorICAgICAgIGlkPSJwYXRoNDE5MSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjY2NjY2NjY2NjY2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYzMSkiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw5OTUuMjg2NDYsMjMuNTM0OTMpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41ODc3NTUwOTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyMzg5OCk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gNTg0LDY5Ni41IEwgNTc3LjQzNzUsNzEzLjY1NjI1IEMgNTc3LjQzNzUsNzEzLjY1NjI1IDU2OS42MjU5OCw3MzQuMDIxMTMgNTYxLjc1LDc1Ny4zMTI1IEMgNTU3LjgxMjAxLDc2OC45NTgxOCA1NTMuODY2OTgsNzgxLjM1Mzk1IDU1MC44MTI1LDc5Mi40Mzc1IEMgNTQ3Ljc1ODAyLDgwMy41MjEwNSA1NDUuNDc2NjQsODEyLjgxNzM2IDU0NS4zMTI1LDgyMC43MTg3NSBDIDU0NC45MTQ0Myw4MzkuODgwNzEgNTUxLjA1OTAzLDg1NS42MDcwNSA1NTQuMjUsODYyLjQ2ODc1IEMgNTUzLjQ3ODQ3LDg2Ni4wMjM5OCA1NTIuMjU4NjMsODcxLjkyMzA3IDU1MC45MDYyNSw4ODAuNTYyNSBDIDU0OC45ODU4Myw4OTIuODMwNzEgNTQ3LjE4Nzk4LDkwNy43MTY5MSA1NDguNTMxMjUsOTIwLjQzNzUgQyA1NDkuOTEzMzQsOTMzLjUyNTg1IDU1NS4zNDM0Nyw5NDguNjI1MTUgNTYxLjEyNSw5NjMuNDY4NzUgQyA1NjYuOTA2NTMsOTc4LjMxMjM1IDU3My4xNzkzNSw5OTIuNjk1ODYgNTc2LjM0Mzc1LDEwMDEuNSBDIDU4Mi45NzU4MSwxMDE5Ljk1MTkgNTg2LjMzNjcxLDEwMzMuMDc2MyA1ODcuNjU2MjUsMTA1MCBDIDU4OC4yMzc2LDEwNTcuNDU2MSA1ODcuNDEzOTgsMTA3MC4zMzYgNTg2LjQwNjI1LDEwODMuMzc1IEMgNTg1LjM5ODUyLDEwOTYuNDE0IDU4NC4yMTk2NCwxMTA5LjY3NjQgNTg0LjcxODc1LDExMjAuMzQzOCBDIDU4NS43MDc4NiwxMTQxLjQ4MzYgNTk0LjA0NjczLDExNjcuMTc4NSA2MTguMDkzNzUsMTE3OC4yODEyIEMgNjQwLjg2ODU4LDExODguNzk2NiA2NzMuNDIwNTcsMTE4OS45ODM0IDcwMS41MzEyNSwxMTc0Ljg0MzggQyA3MTcuNjkxMTcsMTE2Ni4xNDA0IDczMS42MDc1OSwxMTQ3Ljc0NjIgNzQ0LjkwNjI1LDExMjcuOTM3NSBDIDc1OC4yMDQ5MSwxMTA4LjEyODggNzY5Ljg3NTQyLDEwODYuODg0MSA3NzYuODQzNzUsMTA3My4wMzEyIEMgNzkyLjE5NjY3LDEwNDIuNTEgODE2LjIzNzI4LDk1Ny41NjcwMiA4MjIuNDY4NzUsOTIwLjMxMjUgQyA4MjUuNDg3MzQsOTAyLjI2NTk3IDgyNi4zOTA0MSw4OTEuMjQ2OTUgODI1LjA5Mzc1LDg4Mi4yODEyNSBDIDgyNC4xMTUyMiw4NzUuNTE1MjEgODIxLjI2NTU2LDg3MC4xMzM4NSA4MTguMjE4NzUsODY2LjA2MjUgQyA4MjAuMjYxNDksODM4LjU1NDU5IDgxNy40ODY2OCw4MTQuNjkzNzIgODMwLjE4NzUsNzg2LjY1NjI1IEwgODQwLjc1LDc2My4zNzUgTCA4MTYuOTM3NSw3NzIuNjg3NSBDIDc5OS40NDc3NSw3NzkuNTI1MDMgNzg4LjAzNTg2LDc5MS43MzI4NiA3ODAuMzQzNzUsODA0Ljc1IEMgNzgwLjAyMTI0LDgwNS4yOTU3NyA3NzkuNzgwNjEsODA1Ljg1Nzc2IDc3OS40Njg3NSw4MDYuNDA2MjUgQyA3NzkuNjkwNzgsNzgzLjg5MTA0IDc4My44NzY1OSw3NjguNzY4NjYgNzg2LjA2MjUsNzQ3LjcxODc1IEwgNzg4LjAzMTI1LDcyOC43MTg3NSBMIDc3MSw3MzcuMzc1IEMgNzQwLjQwNTUxLDc1Mi45MzA3MSA3MjUuMzA1MTEsNzg1LjU2ODIxIDcyMS4yODEyNSw4MjcuNTkzNzUgQyA3MTcuMDM1OTMsODI2Ljk2ODI4IDcxMi40NDk4NSw4MjYuNTc0MSA3MDcuNDY4NzUsODI2Ljc1IEMgNzA3LjE3NzI2LDc4Ny41Njk2NCA3MDcuMDcyNDYsNzU5LjcxMzE1IDcxNi4wNjI1LDcyNy4zNzUgTCA3MjEuNjU2MjUsNzA3LjI1IEwgNzAyLjIxODc1LDcxNC45MDYyNSBDIDY3MS4zMDkzOCw3MjcuMTEwMTkgNjU0LjM1OTIxLDc1Ni44MzY5OCA2NDUuNTkzNzUsNzgzLjI4MTI1IEMgNjQxLjIxMTAyLDc5Ni41MDMzOSA2MzguODQ3OTMsODA5LjA4MjQ2IDYzOCw4MTkuMjE4NzUgQyA2MzcuNzY3OTcsODIxLjk5MjQ4IDYzNy42ODg5NCw4MjQuNTMwMDcgNjM3LjY4NzUsODI2LjkzNzUgQyA2MzQuNDQ1NjMsODI2LjkwMTA5IDYzMS4yNjY5OCw4MjcuMDczMzkgNjI3LjYyNSw4MjcuNDM3NSBDIDYyNy42NjY2Miw3ODguNDMyNzcgNjI0LjE0MDc2LDc0Ny42ODMzNSA1OTUuMzQzNzUsNzEwLjkzNzUgTCA1ODQsNjk2LjUgeiBNIDU4OS44MTI1LDc0MC4zMTI1IEMgNjA2LjYxOTQxLDc3MC45NTYzMyA2MDcuMjg3MDEsODA0LjI3OTc4IDYwNi43NSw4NDAuMDYyNSBMIDYwNi41MzEyNSw4NTUuMTI1IEwgNjE4LjU2NjE4LDg0OC41ODU3OSBDIDYyNy4yMjgyMyw4NDUuNDUyNzcgNjM4LjEyNjc2LDg0OC4zNTgyNyA2NTAuNSw4NDcuNzUgTCA2NjUuMTc0NjUsODU3LjEwNjYgTCA2NTguODQzNzUsODMxLjMxMjUgQyA2NTguNzU0MSw4MzEuMDgyNTMgNjU4LjYyMzI5LDgzMC44OTU4MSA2NTguNTkzNzUsODMwLjU5Mzc1IEMgNjU4LjM5NDI0LDgyOC41NTM4OSA2NTguMzcxNDMsODI1LjEyMDY4IDY1OC43MTg3NSw4MjAuOTY4NzUgQyA2NTkuNDEzMzksODEyLjY2NDg5IDY2MS41MDgzMiw4MDEuMzgzNTEgNjY1LjM0Mzc1LDc4OS44MTI1IEMgNjcwLjQ5OTA3LDc3NC4yNTk1NiA2NzguODMxNzYsNzU4LjYyMDAyIDY5MC40Njg3NSw3NDcuMjgxMjUgQyA2ODUuNzg0OTQsNzc1LjkxOTIzIDY4Ny4yNTMxNiw4MDcuNTQwNTkgNjg3LjQ1NzExLDg0My4wODYzOSBMIDY4NC42OTExOCw4NTYuMzQ4MDMgTCA3MDAuMTg3NSw4NDguNzUgQyA3MDkuMjE2OSw4NDUuOTkyMjkgNzE3LjM3NjQ3LDg0OC40MDAwNCA3MjkuNDY4NzUsODQ5Ljg0Mzc1IEwgNzQyLjcxNTA3LDg1OS4yODc5OCBMIDc0MS4wOTM3NSw4NDAgQyA3NDIuNTQxNjgsODA5LjAyODIzIDc0OS4zMTUyNCw3ODYuMzIxOTIgNzYxLjgxMjUsNzcxLjEyNSBDIDc1OC44MjU2Miw3OTAuOTAzODQgNzU2LjM4MjA3LDgxMi45MDk4IDc2Mi4xMjUsODQ5LjQ2ODc1IEwgNzYzLjE5MDUyLDg1NS44NDE5MyBMIDc2MC4yNTIzNyw4NjcuMzU4NzggTCA3NzAuODY5NDgsODU5LjE5MDYgTCA3ODAuMDU5MjEsODY5LjQxMjU4IEwgNzc4LjUxMDkzLDg1OC45NDg5OCBMIDc4MS45Mzc1LDg1MiBDIDc4Ny42Mzg1Miw4MzguNzg4NTEgNzkyLjExMDMyLDgyNS43ODY2MyA3OTguMjgxMjUsODE1LjM0Mzc1IEMgNzk5LjI0MTExLDgxMy43MTk0MSA4MDAuMzEyNzgsODEyLjI3OTM5IDgwMS4zNDM3NSw4MTAuNzgxMjUgQyA3OTcuNjYzMDksODMxLjkzNjYgNzk4LjkxNjU5LDg1MC45ODk0IDc5Ny4yNSw4NjguNTYyNSBMIDc5Mi41Njk4Niw4NzYuMzY5NDggTCA3OTkuOTY4NzUsODc2LjU5Mzc1IEMgODAzLjE4ODgsODgwLjA3NzM2IDgwMy44MzYyNSw4ODAuNDQ0NDMgODA0LjUzMTI1LDg4NS4yNSBDIDgwNS4yMjYyNSw4OTAuMDU1NTcgODA0Ljg0OTg3LDg5OS42NTAzNSA4MDEuOTY4NzUsOTE2Ljg3NSBDIDc5Ni40MDA3Niw5NTAuMTYyOTIgNzcwLjEyMzEzLDk5NC43MTQ4MSA3NTguMjI4MzUsMTAxOC4zNjE0IEMgNzUxLjYyMzQ0LDEwMzEuNDkxOCA3MzkuNzAwMDIsMTA3NS44NDczIDcyNy4xMDUsMTA5NC42MDc5IEMgNzE0LjUwOTk4LDExMTMuMzY4NCA2OTguNTczNjMsMTEzNC4zNzUyIDY4OS45MzI5NiwxMTM5LjAyODggQyA2NjguNDQyNDQsMTE1MC42MDMgNjQ1LjM3NzAyLDExNjQuNTM0NyA2MjkuMzE0MDcsMTE1Ny4xMTgzIEMgNjE0LjkzOTIxLDExNTAuNDgxMyA2MDYuMjc0MzgsMTEzNS45MjU2IDYwNS41LDExMTkuMzc1IEMgNjA1LjExNjg5LDExMTEuMTg3IDYwNi4xMTI3OSwxMDk4LjA2NTggNjA3LjEyNSwxMDg0Ljk2ODggQyA2MDguMTM3MjEsMTA3MS44NzE3IDYxOC40MTM5MSwxMDYyLjM5OCA2MjIuNTQ4MzksMTA0OC40MDYyIEMgNjI3LjkyMDY4LDEwMzAuMjI1NCA2MjEuMTAxNTIsMTAxMS44MTE4IDYxMC4wNDgzOSw5OTQuNDY4NzUgQyA2MDMuNTYxODQsOTg0LjI5MDk3IDU4Ni4wNzE1OSw5NzAuMjEwODUgNTgwLjUsOTU1LjkwNjI1IEMgNTc0LjkyODQxLDk0MS42MDE2NSA1NzAuMTMyNDksOTI2LjkwMzEgNTY5LjIxODc1LDkxOC4yNSBDIDU2OC4yOTI1NCw5MDkuNDc4ODcgNTY5LjY0MTI1LDg5NS4yMjQ5OCA1NzEuNDM3NSw4ODMuNzUgQyA1NzMuMjMzNzUsODcyLjI3NTAzIDU3NS4yODEyNSw4NjMuNDY4NzUgNTc1LjI4MTI1LDg2My40Njg3NSBMIDU4NC43MDQwMyw4NTkuODUzNTUgTCA1NzQuMjE4NzUsODU1Ljk2ODc1IEMgNTc0LjIxODc1LDg1NS45Njg3NSA1NjUuNzE5ODYsODQwLjY1ODY1IDU2Ni4xMjUsODIxLjE1NjI1IEMgNTY2LjE5NjExLDgxNy43MzMwOSA1NjcuOTYxMjYsODA4LjQyODIgNTcwLjg0Mzc1LDc5Ny45Njg3NSBDIDU3My43MjYyNCw3ODcuNTA5MyA1NzcuNjA4NDEsNzc1LjQxNjA0IDU4MS40Njg3NSw3NjQgQyA1ODQuNTEzMTQsNzU0Ljk5NjkyIDU4Ny4yNDkzOCw3NDcuMzk2NTUgNTg5LjgxMjUsNzQwLjMxMjUgeiIKKyAgICAgICBpZD0icGF0aDQxOTMiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzY3NykiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3Nzc3Nzc3Nzc3NzY2NjY3NjY2NjY2NjY2Nzc2NjY2NjY2NjY2Njc3NzY2NjY2NjY2NjY2NjY2Njc2NjY2Nzc3Nzc3Nzc3Nzc3NzY2Njc3NzYyIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45MDQ1MzI3LDAuMjUwNjYyNiwwLjI1MDY2MjYsMC45MDQ1MzI3LDgyMi4yODkzMSwxMC45MzU4OSkiIC8+CisgICAgPGcKKyAgICAgICBpZD0iZzM2MTciCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYyMikiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjkwNDUzMjcsMC4yNTA2NjI2LDAuMjUwNjYyNiwwLjkwNDUzMjcsLTUyLjIwMDQ5OCw3NC4wOTcwNykiCisgICAgICAgICBpZD0icGF0aDQxOTUiCisgICAgICAgICBkPSJNIC0xNS42Njc1MSw4NDMuNDg4NTIgTCAtNjUuMTY0OTksODI3LjkzMjE3IEwgLTkyLjAzNTA0LDg4MC4yNTgwNyBMIC01MS4wMjI4NSw5MjUuNTEyOTEgTCAtMS41MjUzOCw4ODcuMzI5MTQgTCAtMTUuNjY3NTEsODQzLjQ4ODUyIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjkwMjQpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjIgorICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNywtNDYuOTI4NDIsNzUuNTExMjg0KSIKKyAgICAgICAgIGlkPSJwYXRoNDE5NyIKKyAgICAgICAgIGQ9Ik0gMTE4LjcwNjQ4LDg1OS45MzA0OCBMIDYzLjU1MjE1Miw4MTMuMjYxNDQgTCAxOS43MTE1MzIsODUwLjAzMDk5IEwgNTMuNjUyNjYyLDkwMy43NzExIEwgNDAuMDU1ODQ4LDk4OS4yMzMxMyBMIDAuNjEwNDgyMjEsMTAxNy41MjUzIEwgLTQwLjQwMTcxOCwxMDI4LjgzOSBMIC00My4yMzAxMzgsMTA3NS41MDggTCAxMy4zMzg0MDIsMTEwMC45NjM5IEwgMzIuMjgyMzg5LDEwMzEuMzEzOSBMIDU1LjczODkzOSw5NzIuNDU3MjcgTCAxMDIuMDg2NDgsODk5Ljg0MjM2IEwgMTE4LjcwNjQ4LDg1OS45MzA0OCB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI5MDIwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyOTA0NCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIC03MC44MjE4NCw5MzIuNTgzOTcgTCAtMTAuMDEwNjYsOTA1LjcxMzkyIEwgOTAuMzk4NSw5MzYuODI2NjIgTCAyNi43NTg4OSw5NjcuOTM5MzEgTCAtNTUuMjY1NDksOTUwLjk2ODc1IEwgLTcwLjgyMTg0LDkzMi41ODM5NyB6IgorICAgICAgIGlkPSJwYXRoNDE5OSIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45MDQ1MzI3LDAuMjUwNjYyNiwwLjI1MDY2MjYsMC45MDQ1MzI3LDIyOS4wNzE1OCwyMTEuNTExMjgpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41ODc3NTUwOTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDEwNSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gNTgzLjA2MjUsNzE1Ljc1IEMgNTcwLjk1NjQxLDc1MC4xOTk3NCA1NTYuMzQ4LDc4NC4yODMzMyA1NTEuMzEyNSw4MjAuNTkzNzUgQyA1NTAuNDgwNDIsODM1LjUyMjQyIDU1NS45MDE2NSw4NDkuNzUzMTggNTYwLjE1NjI1LDg2My42NTYyNSBDIDU1NC4yNDAwMSw4OTAuODU3NTEgNTUwLjAxOTQ0LDkyMC41NTYyIDU2MS4zMTI1LDk0Ni43ODEyNSBDIDU3NC44Mjk2Nyw5ODQuOTQyMSA1OTYuMzEzOTcsMTAyMi40NjM0IDU5My43MzUyOSwxMDY0LjI0OTUgQyA1OTIuNzg2OTksMTA5My41NDM3IDU4NC43MjA4NSwxMTI1LjI0MzYgNTk5LjEyNSwxMTUyLjUzMTIgQyA2MDkuMzIzNjQsMTE3MS44NjYgNjMyLjI2NDU2LDExNzkuODQyOSA2NTMuMDkyODUsMTE4MC4xOTg4IEMgNjgwLjk1NTA0LDExODEuMzcyOSA3MDkuNTU1NDYsMTE2OC41NzcyIDcyNS4wOTM3NSwxMTQ0LjkzNzUgQyA3NDcuNjg5MjQsMTExNS41NjU4IDc2Ni44OTQyNiwxMDgzLjQ0MDIgNzgwLjMzMjQsMTA0OC44Nzc3IEMgNzk3LjIyMjkzLDEwMDMuMzcxNyA4MTAuMDA0Miw5NTYuMzE2OTggODE4LjI2NjQyLDkwOC40Nzg4IEMgODIwLjA5MDgyLDg5NS41Mzc3NCA4MjEuMzY3NSw4ODEuMDA4OTUgODEzLjY4NzUsODY5LjY1NjI1IEMgODEwLjI1NjM1LDg2Mi4zMTk5MyA4MTMuNzI5NTcsODU0LjA5NjExIDgxMy4wMDI5Myw4NDYuMzQ2NDggQyA4MTMuNjc2OTMsODIxLjM1MTgyIDgxNy4wMTUyNSw3OTUuNjgyNzIgODI5LjY1NjI1LDc3My43NSBDIDgxMS45MjMxMiw3ODAuMTk0NiA3OTQuNTgzNTcsNzkwLjMwOTcxIDc4NS42NTMxOCw4MDcuNjE0MjUgQyA3ODEuNzE4MSw4MTQuMzIzOCA3NzguMDQ4MzYsODIxLjE4ODM4IDc3NC4yODEyNSw4MjggQyA3NzAuNzMxMjYsNzk3Ljk4NTkyIDc3OC4wMDA4OCw3NjguMzUxNzIgNzgxLjA2MjUsNzM4LjcxODc1IEMgNzYwLjg5NjQ2LDc0Ny43NzMzOCA3NDQuMTg1NzgsNzY0LjM3Mzk3IDczNi44ODc1NSw3ODUuNDAwNzUgQyA3MzAuNTgyOTIsODAwLjk4MDc4IDcyOC4wODUzMyw4MTcuNzE3OTMgNzI2LjYyNSw4MzQuNDM3NSBDIDcxOC4zNzE2Niw4MzIuOTE4MjUgNzA5Ljk0MDUzLDgzMi4zMzU5NSA3MDEuNTYyNSw4MzIuOTM3NSBDIDcwMC41OTk0Miw3OTQuMjM5NjMgNzAxLjA5NTU0LDc1My41MzAzNSA3MTIuNTMxMjUsNzE3LjAzMTI1IEMgNjkzLjg1MDEyLDcyMy4yNDkwMSA2NzcuMzY1MDQsNzM1Ljc2Njc2IDY2Ni45MDMyMiw3NTIuNDE4NDggQyA2NTMuMDUwNjgsNzczLjI5ODI3IDY0NS42NDE4Miw3OTguMTcyNDMgNjQzLjg0Mzc1LDgyMy4wMzEyNSBDIDY0NC40MjkwOSw4MjcuMzU1NzkgNjQzLjc4MjQ5LDgzNC44NzEzNCA2MzcuNSw4MzIuOTA2MjUgQyA2MzIuMTY4ODIsODMyLjkyMzggNjI2Ljg3MDkyLDgzMy41ODUwOCA2MjEuNTYyNSw4MzQgQyA2MjIuNzEwMzQsNzk0LjYxODUyIDYxOC4yMjEwNiw3NTIuMzcxOCA1OTQuNSw3MTkuNzgxMjUgQyA1OTEuNDM5MjksNzE2LjE0NDA4IDU4OC44NjMxNSw3MTIuMDk2ODcgNTg1Ljg3NSw3MDguNDM3NSBDIDU4NC45Mzc1LDcxMC44NzUgNTg0LDcxMy4zMTI1IDU4My4wNjI1LDcxNS43NSB6IE0gNTkwLjgxMjUsNzI5LjU5Mzc1IEMgNjA5LjM3Nzc3LDc1OC44OTAwNCA2MTMuMjk1LDc5NC40MTM4NyA2MTIuOTM3NSw4MjguNDY4NzUgQyA2MTMuMTQxNTksODMzLjY0NDAxIDYxMi40MjA5NCw4NDAuMjk3OTUgNjEzLjA2MjUsODQ0LjUzMTI1IEMgNjI1LjM4MTA2LDgzOC40Mjg1IDYzOS44MDE2Miw4NDIuMDkxMzUgNjUyLjg0Mzc1LDg0Mi4zNDM3NSBDIDY1NS4xNjA4Nyw4NDMuNTY3IDY1Ni4wMzU4NSw4NDMuOTk2MTggNjU0Ljc1LDg0MC45Mzc1IEMgNjUwLjU4NTQ1LDgyNi45ODQ2NSA2NTIuOTAxNzIsODEyLjMyNDUgNjU2LjU1NTA0LDc5OC41Mjk4NiBDIDY2Mi45MjE5MSw3NzIuMjM5MjIgNjc3LjE4MzMyLDc0Ny40NDE4OCA2OTkuMzc1LDczMS41IEMgNjkwLjc1NzkxLDc2OC43MzcwNiA2OTMuNjU4NDIsODA4LjA2MTYxIDY5My4yODEyNSw4NDUuNDY4NzUgQyA3MDUuNTM0NjksODM4LjU1ODg1IDcyMC41NjAwNCw4NDIuMDIyNjIgNzMzLjMxMjUsODQ1LjIxODc1IEMgNzM2LjcwNDcyLDg0OC43NTM1NSA3MzUuNjAxODUsODQ0LjQ4OTI3IDczNS41LDg0MS40MDYyNSBDIDczNS4wMTY5MSw4MjAuMDM1NjcgNzM5LjYzMTMzLDc5OC4zMzY2MiA3NDkuMTg3NSw3NzkuMjUgQyA3NTUuMTUwMTYsNzY4LjU2MjczIDc2My40MzA4OCw3NTkuNDQ2MjEgNzcxLjYyNSw3NTAuMzc1IEMgNzYzLjc1MzQ0LDc4NC4yMTMxIDc2Mi40MjIxLDgxOS43MTA5MyA3NjguOTA2MjUsODUzLjg3NSBDIDc3MC42MzExLDg1Mi40NjM4MiA3NzMuNTEzMDYsODUzLjQyMDg2IDc3NC41NjI1LDg1My41IEMgNzg0LjI0NjE5LDgzMi4yNjMxOCA3OTAuOTEzNjIsODA4LjExOTM4IDgwOS40NTI2Niw3OTIuNzU4MTUgQyA4MTEuMzI1OTUsNzkyLjM4NjkzIDgwOC4wMDQ0OCw4MDEuMjgzMSA4MDcuOTY4NzUsODA0LjY1NjI1IEMgODA0LjQzMzg3LDgyNi41MDIwNiA4MDAuNzkzNTksODQ4Ljc5ODU5IDc5OS4xODQ1NCw4NzAuODc1MzYgQyA3OTAuNDAwNzUsODczLjIxNzA3IDgwMi4wMzI4OSw4NzMuMTk4OSA4MDIuNjUzMjksODc0LjkzNzg2IEMgODEwLjU3NjQsODg1LjUwMzY2IDgwNy4zMTYyOCw4OTkuMzQyNTggODA2LjI4NDk0LDkxMS4yOTEyIEMgNzk5LjIyMDg5LDk1Ni4zMjQ3NSA3ODQuMTQyNjMsOTk4LjY1MzE0IDc3MC4zMzEzOSwxMDQxLjk3MSBDIDc1OC4yNTY2MywxMDc0LjkyMDMgNzQyLjk1NzE5LDExMDAuODIzNSA3MjIuNDQzMzEsMTEyOS4xNzI1IEMgNzExLjQ5MDc0LDExNDIuNzIzOSA2OTkuMTk4NTksMTE1Ny4wMjM4IDY4MS41OTk1NiwxMTYxLjY3MjUgQyA2NjEuNDQzNTUsMTE2Ny45MTM4IDYzNy4zOTI4LDExNzIuNTQ5NCA2MTksMTE2MS43MTg4IEMgNjAxLjcxMDM0LDExNDkuMzc3NCA1OTcuOTc2MDcsMTEyNi4wMDk5IDU5OS43Mzc3NCwxMTA2LjAzMjQgQyA1OTkuNzg2NTMsMTA5MC4yMDYyIDYwNC42NzY2LDEwNzcuNTIwMyA2MDQuMTQ4MzQsMTA2Mi41NDA2IEMgNjAzLjYxMDEsMTA0Ny4yNzc3IDYwMS44NTY5OSwxMDMxLjk3NTkgNTk3LjYwNTczLDEwMTUuNjc0MyBDIDU5My4zNTQ0Nyw5OTkuMzcyNjggNTg4LjU2MjQ4LDk5MC43NTYzNiA1ODEuNDg2NjcsOTc0LjEwMDkyIEMgNTc0LjI0NTU2LDk1Ny4wNTYzNiA1NjYuNDE2NTIsOTM3LjM1MjI5IDU2My4yODEyNSw5MTcuODEyNSBDIDU2MS41MzE3Nyw4OTkuMTg1MzYgNTY2LjE3Mjk2LDg4MC42ODk4OCA1NjkuMDYyNSw4NjIuNTYyNSBDIDU3Mi4zNTg3Myw4NTkuNzI1NTQgNTY3LjQ2NDUxLDg1Ny4zNjU5MSA1NjYuNzUsODU0LjM3NSBDIDU1OS4xNDg4Nyw4MzcuMzU5OTIgNTU4LjM0MjUzLDgxNy42MDAxIDU2NC4wMDc2Niw3OTkuODE1MDIgQyA1NzEuMTM3ODYsNzc0Ljc0MjcyIDU3OS43Njg1Myw3NTAuMTgyNjEgNTg4LjY4NzUsNzI1LjY4NzUgQyA1ODkuMzk1ODMsNzI2Ljk4OTU4IDU5MC4xMDQxNyw3MjguMjkxNjcgNTkwLjgxMjUsNzI5LjU5Mzc1IHoiCisgICAgICAgaWQ9InBhdGg0MjAxIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Njenp6Y2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQxNzcpIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjkwNDUzMjcsMC4yNTA2NjI2LDAuMjUwNjYyNiwwLjkwNDUzMjcsODIyLjI4OTMxLDEwLjkzNTg5KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyNDEzMCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDczNS4wNTYzNSw3MzMuMDM4MzQgTCA3MzcuODExNzcsNzU0LjEyNzE1IEwgNzgyLjIyMjgsNzM4LjczODk0IEwgNzg3LjA3MzQzLDcxNi4zNDkxOSBMIDc4My4xMzcyNiw2OTQuMjk2OTcgTCA3NjAuNjg1NjMsNjU3LjcwMzk2IEwgNzUyLjQwNTU5LDY4OC4wMDg5IEwgNzM1LjA1NjM1LDczMy4wMzgzNCB6IgorICAgICAgIGlkPSJwYXRoNDIwMyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2MzEpIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjkwNDUzMjcsMC4yNTA2NjI2LDAuMjUwNjYyNiwwLjkwNDUzMjcsOTk1LjI4NjQ2LDIzLjUzNDkzKSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyNDE0MSk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDgzMS44MTMyMSw3MzAuMjk0NTIgTCA4NDcuNjM1NTgsNzQ1LjE5OTM4IEwgODY4LjQ5MDMxLDc0OC4wOTkzMiBMIDg2Ni45MDAwMiw3MDguMTczMzQgTCA4NzUuMjI1NjMsNjc3LjY2NDkyIEwgODY4LjA2MDY0LDY3MS4zMjM4NiBMIDg0Ni4zNjM5NSw2OTIuMjY2MjYgTCA4MzEuODEzMjEsNzMwLjI5NDUyIHoiCisgICAgICAgaWQ9InBhdGg0MjA1IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYzMSkiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw5OTUuMjg2NDYsMjMuNTM0OTMpIiAvPgorICAgIDxnCisgICAgICAgaWQ9Imc4MzE3IgorICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXI4MzMzKSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MzM4KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw3MTkuMjg2NDYsLTExMi40NjUwNykiCisgICAgICAgICBjbGlwLXBhdGg9Im5vbmUiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgorICAgICAgICAgaWQ9InBhdGg0MjA5IgorICAgICAgICAgZD0iTSA5NjQuMDAwMTIsNzU0LjY5NDg3IEwgOTgyLjQyODkzLDc2Mi4xNTk2NiBMIDk5MS41LDcyNS4xOTUxOSBMIDk3Ni42Mjk2OSw3MzAuMDM0MDUgTCA5NjQuMDAwMTIsNzU0LjY5NDg3IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICA8cmVjdAorICAgICAgICAgeT0iNzU3LjE5NTE5IgorICAgICAgICAgeD0iLTU1IgorICAgICAgICAgaGVpZ2h0PSIxNzciCisgICAgICAgICB3aWR0aD0iMTgyIgorICAgICAgICAgaWQ9InJlY3Q4MzE1IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9nPgorICAgIDxnCisgICAgICAgaWQ9Imc4MzQ2IgorICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXI4MzU0KSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MzU5KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw3MTkuMjg2NDYsLTExMi40NjUwNykiCisgICAgICAgICBjbGlwLXBhdGg9Im5vbmUiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiCisgICAgICAgICBpZD0icGF0aDQyMDciCisgICAgICAgICBkPSJNIDkxMC4xNDQ0MSw3NDYuMzE0MTUgTCA5NDIuNzU3MzYsNzUxLjQ4ODA4IEwgOTQyLjM5NjE3LDcyNy42MTE4OSBMIDk0OS41ODQ3LDY5Ny45Mjk2OCBMIDk0MS4xMzM1OCw2OTIuNjY2MDMgTCA5MTkuMzExNjQsNzE5LjE3NjggTCA5MTAuMTQ0NDEsNzQ2LjMxNDE1IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICA8cmVjdAorICAgICAgICAgeT0iNjk2LjE5NTE5IgorICAgICAgICAgeD0iLTIyIgorICAgICAgICAgaGVpZ2h0PSIxNzYiCisgICAgICAgICB3aWR0aD0iMTY1IgorICAgICAgICAgaWQ9InJlY3Q4MzQ0IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9nPgorICA8L2c+CisgIDxnCisgICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCisgICAgIGlkPSJsYXllcjE2IgorICAgICBpbmtzY2FwZTpsYWJlbD0iTGVmdCBGb290IgorICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhZGE0Njk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDEwMzYuMTY0LDEwNzEuODMzOCBDIDEwNDIuOTU4MSwxMDkwLjczNjYgMTA0Ni42NTc3LDExMDUuMTMzNSAxMDQ4LjA1NDMsMTEyMy4wNDU3IEMgMTA0OS40NTA5LDExNDAuOTU4IDEwNDQuMjcxNiwxMTc0Ljg0NjUgMTA0NS4xNTM4LDExOTMuNzAxOCBDIDEwNDYuMDM1NiwxMjEyLjU0NyAxMDUzLjI4NzUsMTIzMy44MDA4IDEwNzIuNDk4NCwxMjQyLjY3MDcgQyAxMDkxLjkxNzMsMTI1MS42MzY1IDExMjEuODE3NywxMjUyLjg4MiAxMTQ2LjYxODMsMTIzOS41MjUxIEMgMTE3MS40MTg5LDEyMjYuMTY4MSAxMjA0LjAxOTMsMTE2OS4xOTk2IDEyMTcuNTkyNSwxMTQyLjIxNjQgQyAxMjMxLjIxNjQsMTExNS4xMzI1IDEyNTYuMzUzNiwxMDI3LjcxOSAxMjYyLjI1MzMsOTkyLjQ0NzgxIEMgMTI2OC4xNTMxLDk1Ny4xNzY2IDEyNjQuODAzOSw5NTEuMTQ3MDQgMTI1Ny42MzU5LDk0My4zOTIzMiBDIDEyNjAuMjc2Miw5MTUuNTUyMTcgMTI1Ni4xMzYxLDg4OC40NTY4OSAxMjcwLjc0NTUsODU2LjIwNjE0IEMgMTI0MC40OTY1LDg2OC4wMzE4NCAxMjMzLjM2MzIsODk2LjM2Njg0IDEyMjIuNDI2Niw5MjEuNzExMjIgQyAxMjE0LjQyNTcsODcwLjc3ODI5IDEyMjIuNjM1OCw4NTAuNDM4MDMgMTIyNS43NDU1LDgyMC40OTE4NiBDIDExOTYuNjgwOCw4MzUuMjY5NzcgMTE4Mi44ODQsODY3LjYwNTg4IDExODAuNzQ1NSw5MTMuMzQ5IEMgMTE2OS44MjE2LDkxMi4wNDQ4IDExNTkuMzU0MSw5MDguOTE0NzcgMTE0Ny4xNzQxLDkxMi42MzQ3MSBDIDExNDYuOTEwMSw4NjYuNjExMzcgMTE0NS43MTA2LDgzNS43NDUzIDExNTYuMDg0Nyw3OTguNDI4MjIgQyAxMTAyLjgyOTMsODE5LjQ1NTA4IDEwOTMuMTM3NSw5MDUuMDIyMzIgMTEwMC4wMzEyLDkxMS4yMDYxNCBDIDEwODkuMTQ4NCw5MTEuNzQxMTQgMTA3OC42NjAyLDkwOS45MDg4NCAxMDY3LjE3NDEsOTE0LjA2MzI5IEMgMTA2Ny44MTMsODcxLjQ5MTk0IDEwNjYuOTEzNiw4MjkuMTU0NjggMTAzNy4xNzQxLDc5MS4yMDYxNCBDIDEwMzcuMTc0MSw3OTEuMjA2MTQgMTAwNi4yMTYxLDg3Mi4xMjg0OCAxMDA1Ljc0NTUsODk0Ljc3NzU3IEMgMTAwNS4yNzUsOTE3LjQyNjY2IDEwMTUuMTk3MSw5MzQuOTQzNDUgMTAxNS4xOTcxLDkzNC45NDM0NSBDIDEwMTUuMTk3MSw5MzQuOTQzNDUgMTAwNi42MjkxLDk3MS42ODM5NiAxMDA4Ljg5ODUsOTkzLjE3NTY4IEMgMTAxMS4xOTQ0LDEwMTQuOTE3MSAxMDI5LjM0MTQsMTA1Mi44NTE5IDEwMzYuMTY0LDEwNzEuODMzOCB6IgorICAgICAgIGlkPSJwYXRoODg0OCIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjY2NjY2NjY2NjemN6eiIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyMzU4Nyk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDcxOS41LDczOC42OTUxOSBMIDczNy44MTE3Nyw3NTQuMTI3MTUgTCA3ODIuMjIyOCw3MzguNzM4OTQgTCA4MDUuNSw3MTMuMTk1MTkgTCA4MTYuOTYzOTcsNzMyLjQxNTg0IEwgODQ3LjYzNTU4LDc0NS4xOTkzOCBMIDg3Mi43MzI5NSw3NTAuOTI3NzUgTCA4OTIsNzIzLjE5NTE5IEwgOTA4LjAyMzA5LDc0Ny4wMjEyNiBMIDk0Nyw3NTIuMTk1MTkgTCA5NTcuMjQ1NDEsNzQ1Ljk5NjY3IEwgOTY0LjAwMDEyLDc1NC42OTQ4NyBMIDk4OS41LDc2NS42OTUxOSBMIDk5MS41LDcyNS4xOTUxOSBMIDk1NS45NDg2Niw3MTAuNjU3NiBMIDkyMy40NTU5MSw2ODkuMTMwNSBMIDg4My4wMDM4LDY3Ny42NjQ5MiBMIDg2MS42OTY2OCw2NjIuMTMxNDggTCA4NDAsNjg1LjE5NTE5IEwgNzU1LjAyODc4LDYzOC42MTIwOCBMIDcyMiw2NzYuNjk1MTkgTCA3MTkuNSw3MzguNjk1MTkgeiIKKyAgICAgICBpZD0icGF0aDM2MzUiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2MzEpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41ODc3NTUwOTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyMzg5OCk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gNTg0LDY5Ni41IEwgNTc3LjQzNzUsNzEzLjY1NjI1IEMgNTc3LjQzNzUsNzEzLjY1NjI1IDU2OS42MjU5OCw3MzQuMDIxMTMgNTYxLjc1LDc1Ny4zMTI1IEMgNTU3LjgxMjAxLDc2OC45NTgxOCA1NTMuODY2OTgsNzgxLjM1Mzk1IDU1MC44MTI1LDc5Mi40Mzc1IEMgNTQ3Ljc1ODAyLDgwMy41MjEwNSA1NDUuNDc2NjQsODEyLjgxNzM2IDU0NS4zMTI1LDgyMC43MTg3NSBDIDU0NC45MTQ0Myw4MzkuODgwNzEgNTUxLjA1OTAzLDg1NS42MDcwNSA1NTQuMjUsODYyLjQ2ODc1IEMgNTUzLjQ3ODQ3LDg2Ni4wMjM5OCA1NTIuMjU4NjMsODcxLjkyMzA3IDU1MC45MDYyNSw4ODAuNTYyNSBDIDU0OC45ODU4Myw4OTIuODMwNzEgNTQ3LjE4Nzk4LDkwNy43MTY5MSA1NDguNTMxMjUsOTIwLjQzNzUgQyA1NDkuOTEzMzQsOTMzLjUyNTg1IDU1NS4zNDM0Nyw5NDguNjI1MTUgNTYxLjEyNSw5NjMuNDY4NzUgQyA1NjYuOTA2NTMsOTc4LjMxMjM1IDU3My4xNzkzNSw5OTIuNjk1ODYgNTc2LjM0Mzc1LDEwMDEuNSBDIDU4Mi45NzU4MSwxMDE5Ljk1MTkgNTg2LjMzNjcxLDEwMzMuMDc2MyA1ODcuNjU2MjUsMTA1MCBDIDU4OC4yMzc2LDEwNTcuNDU2MSA1ODcuNDEzOTgsMTA3MC4zMzYgNTg2LjQwNjI1LDEwODMuMzc1IEMgNTg1LjM5ODUyLDEwOTYuNDE0IDU4NC4yMTk2NCwxMTA5LjY3NjQgNTg0LjcxODc1LDExMjAuMzQzOCBDIDU4NS43MDc4NiwxMTQxLjQ4MzYgNTk0LjA0NjczLDExNjcuMTc4NSA2MTguMDkzNzUsMTE3OC4yODEyIEMgNjQwLjg2ODU4LDExODguNzk2NiA2NzMuNDIwNTcsMTE4OS45ODM0IDcwMS41MzEyNSwxMTc0Ljg0MzggQyA3MTcuNjkxMTcsMTE2Ni4xNDA0IDczMS42MDc1OSwxMTQ3Ljc0NjIgNzQ0LjkwNjI1LDExMjcuOTM3NSBDIDc1OC4yMDQ5MSwxMTA4LjEyODggNzY5Ljg3NTQyLDEwODYuODg0MSA3NzYuODQzNzUsMTA3My4wMzEyIEMgNzkyLjE5NjY3LDEwNDIuNTEgODE2LjIzNzI4LDk1Ny41NjcwMiA4MjIuNDY4NzUsOTIwLjMxMjUgQyA4MjUuNDg3MzQsOTAyLjI2NTk3IDgyNi4zOTA0MSw4OTEuMjQ2OTUgODI1LjA5Mzc1LDg4Mi4yODEyNSBDIDgyNC4xMTUyMiw4NzUuNTE1MjEgODIxLjI2NTU2LDg3MC4xMzM4NSA4MTguMjE4NzUsODY2LjA2MjUgQyA4MjAuMjYxNDksODM4LjU1NDU5IDgxNy40ODY2OCw4MTQuNjkzNzIgODMwLjE4NzUsNzg2LjY1NjI1IEwgODQwLjc1LDc2My4zNzUgTCA4MTYuOTM3NSw3NzIuNjg3NSBDIDc5OS40NDc3NSw3NzkuNTI1MDMgNzg4LjAzNTg2LDc5MS43MzI4NiA3ODAuMzQzNzUsODA0Ljc1IEMgNzgwLjAyMTI0LDgwNS4yOTU3NyA3NzkuNzgwNjEsODA1Ljg1Nzc2IDc3OS40Njg3NSw4MDYuNDA2MjUgQyA3NzkuNjkwNzgsNzgzLjg5MTA0IDc4My44NzY1OSw3NjguNzY4NjYgNzg2LjA2MjUsNzQ3LjcxODc1IEwgNzg4LjAzMTI1LDcyOC43MTg3NSBMIDc3MSw3MzcuMzc1IEMgNzQwLjQwNTUxLDc1Mi45MzA3MSA3MjUuMzA1MTEsNzg1LjU2ODIxIDcyMS4yODEyNSw4MjcuNTkzNzUgQyA3MTcuMDM1OTMsODI2Ljk2ODI4IDcxMi40NDk4NSw4MjYuNTc0MSA3MDcuNDY4NzUsODI2Ljc1IEMgNzA3LjE3NzI2LDc4Ny41Njk2NCA3MDcuMDcyNDYsNzU5LjcxMzE1IDcxNi4wNjI1LDcyNy4zNzUgTCA3MjEuNjU2MjUsNzA3LjI1IEwgNzAyLjIxODc1LDcxNC45MDYyNSBDIDY3MS4zMDkzOCw3MjcuMTEwMTkgNjU0LjM1OTIxLDc1Ni44MzY5OCA2NDUuNTkzNzUsNzgzLjI4MTI1IEMgNjQxLjIxMTAyLDc5Ni41MDMzOSA2MzguODQ3OTMsODA5LjA4MjQ2IDYzOCw4MTkuMjE4NzUgQyA2MzcuNzY3OTcsODIxLjk5MjQ4IDYzNy42ODg5NCw4MjQuNTMwMDcgNjM3LjY4NzUsODI2LjkzNzUgQyA2MzQuNDQ1NjMsODI2LjkwMTA5IDYzMS4yNjY5OCw4MjcuMDczMzkgNjI3LjYyNSw4MjcuNDM3NSBDIDYyNy42NjY2Miw3ODguNDMyNzcgNjI0LjE0MDc2LDc0Ny42ODMzNSA1OTUuMzQzNzUsNzEwLjkzNzUgTCA1ODQsNjk2LjUgeiBNIDU4OS44MTI1LDc0MC4zMTI1IEMgNjA2LjYxOTQxLDc3MC45NTYzMyA2MDcuMjg3MDEsODA0LjI3OTc4IDYwNi43NSw4NDAuMDYyNSBMIDYwNi41MzEyNSw4NTUuMTI1IEwgNjE4LjU2NjE4LDg0OC41ODU3OSBDIDYyNy4yMjgyMyw4NDUuNDUyNzcgNjM4LjEyNjc2LDg0OC4zNTgyNyA2NTAuNSw4NDcuNzUgTCA2NjUuMTc0NjUsODU3LjEwNjYgTCA2NTguODQzNzUsODMxLjMxMjUgQyA2NTguNzU0MSw4MzEuMDgyNTMgNjU4LjYyMzI5LDgzMC44OTU4MSA2NTguNTkzNzUsODMwLjU5Mzc1IEMgNjU4LjM5NDI0LDgyOC41NTM4OSA2NTguMzcxNDMsODI1LjEyMDY4IDY1OC43MTg3NSw4MjAuOTY4NzUgQyA2NTkuNDEzMzksODEyLjY2NDg5IDY2MS41MDgzMiw4MDEuMzgzNTEgNjY1LjM0Mzc1LDc4OS44MTI1IEMgNjcwLjQ5OTA3LDc3NC4yNTk1NiA2NzguODMxNzYsNzU4LjYyMDAyIDY5MC40Njg3NSw3NDcuMjgxMjUgQyA2ODUuNzg0OTQsNzc1LjkxOTIzIDY4Ny4yNTMxNiw4MDcuNTQwNTkgNjg3LjQ1NzExLDg0My4wODYzOSBMIDY4NC42OTExOCw4NTYuMzQ4MDMgTCA3MDAuMTg3NSw4NDguNzUgQyA3MDkuMjE2OSw4NDUuOTkyMjkgNzE3LjM3NjQ3LDg0OC40MDAwNCA3MjkuNDY4NzUsODQ5Ljg0Mzc1IEwgNzQyLjcxNTA3LDg1OS4yODc5OCBMIDc0MS4wOTM3NSw4NDAgQyA3NDIuNTQxNjgsODA5LjAyODIzIDc0OS4zMTUyNCw3ODYuMzIxOTIgNzYxLjgxMjUsNzcxLjEyNSBDIDc1OC44MjU2Miw3OTAuOTAzODQgNzU2LjM4MjA3LDgxMi45MDk4IDc2Mi4xMjUsODQ5LjQ2ODc1IEwgNzYzLjE5MDUyLDg1NS44NDE5MyBMIDc2MC4yNTIzNyw4NjcuMzU4NzggTCA3NzAuODY5NDgsODU5LjE5MDYgTCA3ODAuMDU5MjEsODY5LjQxMjU4IEwgNzc4LjUxMDkzLDg1OC45NDg5OCBMIDc4MS45Mzc1LDg1MiBDIDc4Ny42Mzg1Miw4MzguNzg4NTEgNzkyLjExMDMyLDgyNS43ODY2MyA3OTguMjgxMjUsODE1LjM0Mzc1IEMgNzk5LjI0MTExLDgxMy43MTk0MSA4MDAuMzEyNzgsODEyLjI3OTM5IDgwMS4zNDM3NSw4MTAuNzgxMjUgQyA3OTcuNjYzMDksODMxLjkzNjYgNzk4LjkxNjU5LDg1MC45ODk0IDc5Ny4yNSw4NjguNTYyNSBMIDc5Mi41Njk4Niw4NzYuMzY5NDggTCA3OTkuOTY4NzUsODc2LjU5Mzc1IEMgODAzLjE4ODgsODgwLjA3NzM2IDgwMy44MzYyNSw4ODAuNDQ0NDMgODA0LjUzMTI1LDg4NS4yNSBDIDgwNS4yMjYyNSw4OTAuMDU1NTcgODA0Ljg0OTg3LDg5OS42NTAzNSA4MDEuOTY4NzUsOTE2Ljg3NSBDIDc5Ni40MDA3Niw5NTAuMTYyOTIgNzcwLjE3NjAzLDEwNDAuMDQwOSA3NTguMjgxMjUsMTA2My42ODc1IEMgNzUxLjY3NjM0LDEwNzYuODE3OSA3NDAuMjUxMjcsMTA5Ny41ODMyIDcyNy42NTYyNSwxMTE2LjM0MzggQyA3MTUuMDYxMjMsMTEzNS4xMDQzIDcwMC4yOTY5MiwxMTUxLjg3NzYgNjkxLjY1NjI1LDExNTYuNTMxMiBDIDY3MC4xNjU3MywxMTY4LjEwNTQgNjQyLjg3NTQ1LDExNjYuNzkxNCA2MjYuODEyNSwxMTU5LjM3NSBDIDYxMi40Mzc2NCwxMTUyLjczOCA2MDYuMjc0MzgsMTEzNS45MjU2IDYwNS41LDExMTkuMzc1IEMgNjA1LjExNjg5LDExMTEuMTg3IDYwNi4xMTI3OSwxMDk4LjA2NTggNjA3LjEyNSwxMDg0Ljk2ODggQyA2MDguMTM3MjEsMTA3MS44NzE3IDYxOC40MTM5MSwxMDYyLjM5OCA2MjIuNTQ4MzksMTA0OC40MDYyIEMgNjI3LjkyMDY4LDEwMzAuMjI1NCA2MjEuMTAxNTIsMTAxMS44MTE4IDYxMC4wNDgzOSw5OTQuNDY4NzUgQyA2MDMuNTYxODQsOTg0LjI5MDk3IDU4Ni4wNzE1OSw5NzAuMjEwODUgNTgwLjUsOTU1LjkwNjI1IEMgNTc0LjkyODQxLDk0MS42MDE2NSA1NzAuMTMyNDksOTI2LjkwMzEgNTY5LjIxODc1LDkxOC4yNSBDIDU2OC4yOTI1NCw5MDkuNDc4ODcgNTY5LjY0MTI1LDg5NS4yMjQ5OCA1NzEuNDM3NSw4ODMuNzUgQyA1NzMuMjMzNzUsODcyLjI3NTAzIDU3NS4yODEyNSw4NjMuNDY4NzUgNTc1LjI4MTI1LDg2My40Njg3NSBMIDU4NC43MDQwMyw4NTkuODUzNTUgTCA1NzQuMjE4NzUsODU1Ljk2ODc1IEMgNTc0LjIxODc1LDg1NS45Njg3NSA1NjUuNzE5ODYsODQwLjY1ODY1IDU2Ni4xMjUsODIxLjE1NjI1IEMgNTY2LjE5NjExLDgxNy43MzMwOSA1NjcuOTYxMjYsODA4LjQyODIgNTcwLjg0Mzc1LDc5Ny45Njg3NSBDIDU3My43MjYyNCw3ODcuNTA5MyA1NzcuNjA4NDEsNzc1LjQxNjA0IDU4MS40Njg3NSw3NjQgQyA1ODQuNTEzMTQsNzU0Ljk5NjkyIDU4Ny4yNDkzOCw3NDcuMzk2NTUgNTg5LjgxMjUsNzQwLjMxMjUgeiIKKyAgICAgICBpZD0icGF0aDM2NjkiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzY3NykiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3Nzc3Nzc3Nzc3NzY2NjY3NjY2NjY2NjY2Nzc2NjY2NjY2NjY2Njc3NzY2NjY2NjY2NjY2NjY2Njc2NjY2Nzc3Nzc3Nzc3Nzc3NzY2Njc3NzYyIgLz4KKyAgICA8ZworICAgICAgIGlkPSJnMzYyOCIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjM2KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgaWQ9InBhdGg4OTg4IgorICAgICAgICAgZD0iTSA4MjQuNDg2NTEsODE4LjQ4MjQyIEwgNzc0Ljk4OTAzLDgwMi45MjYwNyBMIDc0OC4xMTg5OCw4NTUuMjUxOTcgTCA3ODkuMTMxMTcsOTAwLjUwNjgxIEwgODM4LjYyODY0LDg2Mi4zMjMwNCBMIDgyNC40ODY1MSw4MTguNDgyNDIgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyOTAyNCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBpZD0icGF0aDg5OTAiCisgICAgICAgICBkPSJNIDk2NC40OTM2NSw4NTUuMjUxOTcgTCA5MDkuMzM5MzIsODA4LjU4MjkzIEwgODY1LjQ5ODcsODQ1LjM1MjQ4IEwgODk5LjQzOTgzLDg5OS4wOTI1OSBMIDkwNi41MTA4OSw5NjUuNTYwNjMgTCA4NTUuNTk5MjEsMTAwMC45MTYgTCA4MTQuNTg3MDEsMTAxMi4yMjk3IEwgODExLjc1ODU5LDEwNTguODk4NyBMIDg2OC4zMjcxMywxMDg0LjM1NDYgTCA5MzEuOTY2NzQsMTAwNy45ODcgTCA5NTYuMDA4MzcsOTEzLjIzNDczIEwgOTY0LjQ5MzY1LDg1NS4yNTE5NyB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI5MDIwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyOTA0NCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDEwNDUuMzMyMiwxMDQzLjU3NzkgTCAxMTA2LjE0MzQsMTAxNi43MDc4IEwgMTIwNi41NTI1LDEwNDcuODIwNSBMIDExNDIuOTEyOSwxMDc4LjkzMzIgTCAxMDYwLjg4ODUsMTA2MS45NjI2IEwgMTA0NS4zMzIyLDEwNDMuNTc3OSB6IgorICAgICAgIGlkPSJwYXRoODk5MiIgLz4KKyAgICA8cGF0aAorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MC4wMzEyNSw3My44NDM5NjQpIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNTg3NzU1MDk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyMC43OTk5OTkyNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjQxODUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDU4My4wNjI1LDcxNS43NSBDIDU3MC45NTY0MSw3NTAuMTk5NzQgNTU2LjM0OCw3ODQuMjgzMzMgNTUxLjMxMjUsODIwLjU5Mzc1IEMgNTUwLjQ4MDQyLDgzNS41MjI0MiA1NTUuOTAxNjUsODQ5Ljc1MzE4IDU2MC4xNTYyNSw4NjMuNjU2MjUgQyA1NTQuMjQwMDEsODkwLjg1NzUxIDU1MC4wMTk0NCw5MjAuNTU2MiA1NjEuMzEyNSw5NDYuNzgxMjUgQyA1NzQuODI5NjcsOTg0Ljk0MjEgNTk2LjMxMzk3LDEwMjIuNDYzNCA1OTMuNzM1MjksMTA2NC4yNDk1IEMgNTkyLjc4Njk5LDEwOTMuNTQzNyA1ODQuNzIwODUsMTEyNS4yNDM2IDU5OS4xMjUsMTE1Mi41MzEyIEMgNjA5LjMyMzY0LDExNzEuODY2IDYzMi4yNjQ1NiwxMTc5Ljg0MjkgNjUzLjA5Mjg1LDExODAuMTk4OCBDIDY4MC45NTUwNCwxMTgxLjM3MjkgNzA5LjU1NTQ2LDExNjguNTc3MiA3MjUuMDkzNzUsMTE0NC45Mzc1IEMgNzQ3LjY4OTI0LDExMTUuNTY1OCA3NjYuODk0MjYsMTA4My40NDAyIDc4MC4zMzI0LDEwNDguODc3NyBDIDc5Ny4yMjI5MywxMDAzLjM3MTcgODEwLjAwNDIsOTU2LjMxNjk4IDgxOC4yNjY0Miw5MDguNDc4OCBDIDgyMC4wOTA4Miw4OTUuNTM3NzQgODIxLjM2NzUsODgxLjAwODk1IDgxMy42ODc1LDg2OS42NTYyNSBDIDgxMC4yNTYzNSw4NjIuMzE5OTMgODEzLjcyOTU3LDg1NC4wOTYxMSA4MTMuMDAyOTMsODQ2LjM0NjQ4IEMgODEzLjY3NjkzLDgyMS4zNTE4MiA4MTcuMDE1MjUsNzk1LjY4MjcyIDgyOS42NTYyNSw3NzMuNzUgQyA4MTEuOTIzMTIsNzgwLjE5NDYgNzk0LjU4MzU3LDc5MC4zMDk3MSA3ODUuNjUzMTgsODA3LjYxNDI1IEMgNzgxLjcxODEsODE0LjMyMzggNzc4LjA0ODM2LDgyMS4xODgzOCA3NzQuMjgxMjUsODI4IEMgNzcwLjczMTI2LDc5Ny45ODU5MiA3NzguMDAwODgsNzY4LjM1MTcyIDc4MS4wNjI1LDczOC43MTg3NSBDIDc2MC44OTY0Niw3NDcuNzczMzggNzQ0LjE4NTc4LDc2NC4zNzM5NyA3MzYuODg3NTUsNzg1LjQwMDc1IEMgNzMwLjU4MjkyLDgwMC45ODA3OCA3MjguMDg1MzMsODE3LjcxNzkzIDcyNi42MjUsODM0LjQzNzUgQyA3MTguMzcxNjYsODMyLjkxODI1IDcwOS45NDA1Myw4MzIuMzM1OTUgNzAxLjU2MjUsODMyLjkzNzUgQyA3MDAuNTk5NDIsNzk0LjIzOTYzIDcwMS4wOTU1NCw3NTMuNTMwMzUgNzEyLjUzMTI1LDcxNy4wMzEyNSBDIDY5My44NTAxMiw3MjMuMjQ5MDEgNjc3LjM2NTA0LDczNS43NjY3NiA2NjYuOTAzMjIsNzUyLjQxODQ4IEMgNjUzLjA1MDY4LDc3My4yOTgyNyA2NDUuNjQxODIsNzk4LjE3MjQzIDY0My44NDM3NSw4MjMuMDMxMjUgQyA2NDQuNDI5MDksODI3LjM1NTc5IDY0My43ODI0OSw4MzQuODcxMzQgNjM3LjUsODMyLjkwNjI1IEMgNjMyLjE2ODgyLDgzMi45MjM4IDYyNi44NzA5Miw4MzMuNTg1MDggNjIxLjU2MjUsODM0IEMgNjIyLjcxMDM0LDc5NC42MTg1MiA2MTguMjIxMDYsNzUyLjM3MTggNTk0LjUsNzE5Ljc4MTI1IEMgNTkxLjQzOTI5LDcxNi4xNDQwOCA1ODguODYzMTUsNzEyLjA5Njg3IDU4NS44NzUsNzA4LjQzNzUgQyA1ODQuOTM3NSw3MTAuODc1IDU4NCw3MTMuMzEyNSA1ODMuMDYyNSw3MTUuNzUgeiBNIDU5MC44MTI1LDcyOS41OTM3NSBDIDYwOS4zNzc3Nyw3NTguODkwMDQgNjEzLjI5NSw3OTQuNDEzODcgNjEyLjkzNzUsODI4LjQ2ODc1IEMgNjEzLjE0MTU5LDgzMy42NDQwMSA2MTIuNDIwOTQsODQwLjI5Nzk1IDYxMy4wNjI1LDg0NC41MzEyNSBDIDYyNS4zODEwNiw4MzguNDI4NSA2MzkuODAxNjIsODQyLjA5MTM1IDY1Mi44NDM3NSw4NDIuMzQzNzUgQyA2NTUuMTYwODcsODQzLjU2NyA2NTYuMDM1ODUsODQzLjk5NjE4IDY1NC43NSw4NDAuOTM3NSBDIDY1MC41ODU0NSw4MjYuOTg0NjUgNjUyLjkwMTcyLDgxMi4zMjQ1IDY1Ni41NTUwNCw3OTguNTI5ODYgQyA2NjIuOTIxOTEsNzcyLjIzOTIyIDY3Ny4xODMzMiw3NDcuNDQxODggNjk5LjM3NSw3MzEuNSBDIDY5MC43NTc5MSw3NjguNzM3MDYgNjkzLjY1ODQyLDgwOC4wNjE2MSA2OTMuMjgxMjUsODQ1LjQ2ODc1IEMgNzA1LjUzNDY5LDgzOC41NTg4NSA3MjAuNTYwMDQsODQyLjAyMjYyIDczMy4zMTI1LDg0NS4yMTg3NSBDIDczNi43MDQ3Miw4NDguNzUzNTUgNzM1LjYwMTg1LDg0NC40ODkyNyA3MzUuNSw4NDEuNDA2MjUgQyA3MzUuMDE2OTEsODIwLjAzNTY3IDczOS42MzEzMyw3OTguMzM2NjIgNzQ5LjE4NzUsNzc5LjI1IEMgNzU1LjE1MDE2LDc2OC41NjI3MyA3NjMuNDMwODgsNzU5LjQ0NjIxIDc3MS42MjUsNzUwLjM3NSBDIDc2My43NTM0NCw3ODQuMjEzMSA3NjIuNDIyMSw4MTkuNzEwOTMgNzY4LjkwNjI1LDg1My44NzUgQyA3NzAuNjMxMSw4NTIuNDYzODIgNzczLjUxMzA2LDg1My40MjA4NiA3NzQuNTYyNSw4NTMuNSBDIDc4NC4yNDYxOSw4MzIuMjYzMTggNzkwLjkxMzYyLDgwOC4xMTkzOCA4MDkuNDUyNjYsNzkyLjc1ODE1IEMgODExLjMyNTk1LDc5Mi4zODY5MyA4MDguMDA0NDgsODAxLjI4MzEgODA3Ljk2ODc1LDgwNC42NTYyNSBDIDgwNC40MzM4Nyw4MjYuNTAyMDYgODA0LjY3MTU1LDg0OC44Mjk0OCA4MDMuMDYyNSw4NzAuOTA2MjUgQyA4MDEuNzUwMTIsODcyLjI4MzA0IDgwNS45MTA4NSw4NzMuMjI5NzkgODA2LjUzMTI1LDg3NC45Njg3NSBDIDgxNC40NTQzNiw4ODUuNTM0NTUgODA5LjY1NDE5LDg5OS44MDAyNCA4MDguNjIyODUsOTExLjc0ODg2IEMgODAxLjU1ODgsOTU2Ljc4MjQxIDc4Ni44NTczMiwxMDAwLjEyODIgNzczLjA0NjA4LDEwNDMuNDQ2IEMgNzYwLjk3MTMyLDEwNzYuMzk1MyA3NDIuMzI2MzgsMTEwNi41MjYgNzIxLjgxMjUsMTEzNC44NzUgQyA3MTAuODU5OTMsMTE0OC40MjY0IDY5OC41Njc3OCwxMTYyLjcyNjMgNjgwLjk2ODc1LDExNjcuMzc1IEMgNjYwLjgxMjc0LDExNzMuNjE2MyA2MzcuMzkyOCwxMTcyLjU0OTQgNjE5LDExNjEuNzE4OCBDIDYwMS43MTAzNCwxMTQ5LjM3NzQgNTk3Ljk3NjA3LDExMjYuMDA5OSA1OTkuNzM3NzQsMTEwNi4wMzI0IEMgNTk5Ljc4NjUzLDEwOTAuMjA2MiA2MDIuMTA5ODUsMTA3OC4yMzE2IDYwNy42NTUyMSwxMDYzLjIyNzEgQyA2MTMuMjAwNTYsMTA0OC4yMjI2IDYxMC4xMjYyNiwxMDMxLjg5NTQgNjA1Ljg3NSwxMDE1LjU5MzggQyA2MDEuNjIzNzQsOTk5LjI5MjIgNTkzLjY5NTk3LDk4OS4zMzM3OCA1ODQuMDUzNDIsOTczLjM4OTYzIEMgNTc0LjQxMDg3LDk1Ny40NDU0OCA1NjYuNDE2NTIsOTM3LjM1MjI5IDU2My4yODEyNSw5MTcuODEyNSBDIDU2MS41MzE3Nyw4OTkuMTg1MzYgNTY2LjE3Mjk2LDg4MC42ODk4OCA1NjkuMDYyNSw4NjIuNTYyNSBDIDU3Mi4zNTg3Myw4NTkuNzI1NTQgNTY3LjQ2NDUxLDg1Ny4zNjU5MSA1NjYuNzUsODU0LjM3NSBDIDU1OS4xNDg4Nyw4MzcuMzU5OTIgNTU4LjM0MjUzLDgxNy42MDAxIDU2NC4wMDc2Niw3OTkuODE1MDIgQyA1NzEuMTM3ODYsNzc0Ljc0MjcyIDU3OS43Njg1Myw3NTAuMTgyNjEgNTg4LjY4NzUsNzI1LjY4NzUgQyA1ODkuMzk1ODMsNzI2Ljk4OTU4IDU5MC4xMDQxNyw3MjguMjkxNjcgNTkwLjgxMjUsNzI5LjU5Mzc1IHoiCisgICAgICAgaWQ9InBhdGg0MTQ5IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Njenp6Y2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQxNzcpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI0MTMwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNzM1LjA1NjM1LDczMy4wMzgzNCBMIDczNy44MTE3Nyw3NTQuMTI3MTUgTCA3ODIuMjIyOCw3MzguNzM4OTQgTCA3ODcuMDczNDMsNzE2LjM0OTE5IEwgNzgzLjEzNzI2LDY5NC4yOTY5NyBMIDc2MC42ODU2Myw2NTcuNzAzOTYgTCA3NTIuNDA1NTksNjg4LjAwODkgTCA3MzUuMDU2MzUsNzMzLjAzODM0IHoiCisgICAgICAgaWQ9InBhdGgzOTAyIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYzMSkiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQxNDEpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA4MzEuODEzMjEsNzMwLjI5NDUyIEwgODQ3LjYzNTU4LDc0NS4xOTkzOCBMIDg2OC40OTAzMSw3NDguMDk5MzIgTCA4NjYuOTAwMDIsNzA4LjE3MzM0IEwgODc1LjIyNTYzLDY3Ny42NjQ5MiBMIDg2OC4wNjA2NCw2NzEuMzIzODYgTCA4NDYuMzYzOTUsNjkyLjI2NjI2IEwgODMxLjgxMzIxLDczMC4yOTQ1MiB6IgorICAgICAgIGlkPSJwYXRoNDEzNSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2MzEpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxnCisgICAgICAgaWQ9Imc4MzY3IgorICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXI4Mzc5KSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MzkyKSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgY2xpcC1wYXRoPSJub25lIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgorICAgICAgICAgaWQ9InBhdGg0MTQ1IgorICAgICAgICAgZD0iTSA5MTAuMTQ0NDEsNzQ2LjMxNDE1IEwgOTQyLjc1NzM2LDc1MS40ODgwOCBMIDk0Mi4zOTYxNyw3MjcuNjExODkgTCA5NDkuNTg0Nyw2OTcuOTI5NjggTCA5NDEuMTMzNTgsNjkyLjY2NjAzIEwgOTE5LjMxMTY0LDcxOS4xNzY4IEwgOTEwLjE0NDQxLDc0Ni4zMTQxNSB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgPHJlY3QKKyAgICAgICAgIHk9IjY1MC4xOTA5OCIKKyAgICAgICAgIHg9Ijg3Ny41MTk1MyIKKyAgICAgICAgIGhlaWdodD0iMTcyLjUzNDA2IgorICAgICAgICAgd2lkdGg9IjEyMy4wMzY1OCIKKyAgICAgICAgIGlkPSJyZWN0ODM2NSIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgICA8ZworICAgICAgIGlkPSJnODQwMCIKKyAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyODQwNCkiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODQxNykiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiPgorICAgICAgPHBhdGgKKyAgICAgICAgIGNsaXAtcGF0aD0ibm9uZSIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCisgICAgICAgICBpZD0icGF0aDQxNDciCisgICAgICAgICBkPSJNIDk2NC4wMDAxMiw3NTQuNjk0ODcgTCA5ODIuNDI4OTMsNzYyLjE1OTY2IEwgOTkxLjUsNzI1LjE5NTE5IEwgOTc2LjYyOTY5LDczMC4wMzQwNSBMIDk2NC4wMDAxMiw3NTQuNjk0ODcgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgIDxyZWN0CisgICAgICAgICB5PSI2NzcuMDYxMDQiCisgICAgICAgICB4PSI5MjQuODk1NjkiCisgICAgICAgICBoZWlnaHQ9IjEyNS4xNTc5IgorICAgICAgICAgd2lkdGg9IjE0Mi4xMjg0NiIKKyAgICAgICAgIGlkPSJyZWN0ODM5OCIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgPC9nPgorPC9zdmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvZ28udHh0IGIvRG9jdW1lbnRhdGlvbi9sb2dvLnR4dAppbmRleCAyOTZmMGY3Li5hMmU2MjQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xvZ28udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbG9nby50eHQKQEAgLTEsMTMgKzEsNCBAQAotVGhpcyBpcyB0aGUgZnVsbC1jb2xvdXIgdmVyc2lvbiBvZiB0aGUgY3VycmVudGx5IHVub2ZmaWNpYWwgTGludXggbG9nbwotKCJjdXJyZW50bHkgdW5vZmZpY2lhbCIganVzdCBtZWFucyB0aGF0IHRoZXJlIGhhcyBiZWVuIG5vIHBhcGVyd29yayBhbmQKLXRoYXQgSSBoYXZlIG5vdCByZWFsbHkgYW5ub3VuY2VkIGl0IHlldCkuICBJdCB3YXMgY3JlYXRlZCBieSBMYXJyeSBFd2luZywKLWFuZCBpcyBmcmVlbHkgdXNhYmxlIGFzIGxvbmcgYXMgeW91IGFja25vd2xlZGdlIExhcnJ5IGFzIHRoZSBvcmlnaW5hbAotYXJ0aXN0LiAKK1R1eCBpcyB0YWtpbmcgYSB0aHJlZSBtb250aCBzYWJiYXRpY2FsIHRvIHdvcmsgYXMgYSBiYXJiZXIsIHNvIFR1eiBpcworc3RhbmRpbmcgaW4uICBIZSdzIHRha2VuIHBhaW5zIHRvIGVuc3VyZSB5b3UnbGwgaGFyZGx5IG5vdGljZS4KIAotTm90ZSB0aGF0IHRoZXJlIGFyZSBibGFjay1hbmQtd2hpdGUgdmVyc2lvbnMgb2YgdGhpcyBhdmFpbGFibGUgdGhhdAotc2NhbGUgZG93biB0byBzbWFsbGVyIHNpemVzIGFuZCBhcmUgYmV0dGVyIGZvciBsZXR0ZXJoZWFkcyBvciB3aGF0ZXZlcgoteW91IHdhbnQgdG8gdXNlIGl0IGZvcjogZm9yIHRoZSBmdWxsIHJhbmdlIG9mIGxvZ29zIHRha2UgYSBsb29rIGF0Ci1MYXJyeSdzIHdlYi1wYWdlOgotCi0JaHR0cDovL3d3dy5pc2MudGFtdS5lZHUvfmxld2luZy9saW51eC8KLQorSW1hZ2UgYnkgQW5kcmV3IE1jR293biBhbmQgSm9zaCBCdXNoLiAgSW1hZ2UgaXMgbGljZW5zZWQgQ0MgQlktU0EuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IGZmM2YyMTkuLmVjNWRlMDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0yLDcgKzIsNyBAQAogCiBpcF9mb3J3YXJkIC0gQk9PTEVBTgogCTAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKLQlub3QgMCAtIGVuYWJsZWQgCisJbm90IDAgLSBlbmFibGVkCiAKIAlGb3J3YXJkIFBhY2tldHMgYmV0d2VlbiBpbnRlcmZhY2VzLgogCkBAIC0zNiw0OSArMzYsNDkgQEAKIElQIEZyYWdtZW50YXRpb246CiAKIGlwZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKLQlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuIAorCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMuIFdoZW4KIAlpcGZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAogCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwZnJhZ19sb3dfdGhyZXNoCiAJaXMgcmVhY2hlZC4KLQkKKwogaXBmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCi0JU2VlIGlwZnJhZ19oaWdoX3RocmVzaAkKKwlTZWUgaXBmcmFnX2hpZ2hfdGhyZXNoCiAKIGlwZnJhZ190aW1lIC0gSU5URUdFUgotCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQIGZyYWdtZW50IGluIG1lbW9yeS4JCisJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgogCiBpcGZyYWdfc2VjcmV0X2ludGVydmFsIC0gSU5URUdFUgotCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZSAKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUKIAlmb3IgdGhlIGhhc2ggc2VjcmV0KSBmb3IgSVAgZnJhZ21lbnRzLgogCURlZmF1bHQ6IDYwMAogCiBpcGZyYWdfbWF4X2Rpc3QgLSBJTlRFR0VSCi0JaXBmcmFnX21heF9kaXN0IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2hpY2ggZGVmaW5lcyB0aGUgCi0JbWF4aW11bSAiZGlzb3JkZXIiIHdoaWNoIGlzIGFsbG93ZWQgYW1vbmcgZnJhZ21lbnRzIHdoaWNoIHNoYXJlIGEgCi0JY29tbW9uIElQIHNvdXJjZSBhZGRyZXNzLiBOb3RlIHRoYXQgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGlzIAotCW5vdCB1bnVzdWFsLCBidXQgaWYgYSBsYXJnZSBudW1iZXIgb2YgZnJhZ21lbnRzIGFycml2ZSBmcm9tIGEgc291cmNlIAotCUlQIGFkZHJlc3Mgd2hpbGUgYSBwYXJ0aWN1bGFyIGZyYWdtZW50IHF1ZXVlIHJlbWFpbnMgaW5jb21wbGV0ZSwgaXQgCi0JcHJvYmFibHkgaW5kaWNhdGVzIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGJlbG9uZ2luZyB0byB0aGF0IHF1ZXVlIAotCWhhdmUgYmVlbiBsb3N0LiBXaGVuIGlwZnJhZ19tYXhfZGlzdCBpcyBwb3NpdGl2ZSwgYW4gYWRkaXRpb25hbCBjaGVjayAKLQlpcyBkb25lIG9uIGZyYWdtZW50cyBiZWZvcmUgdGhleSBhcmUgYWRkZWQgdG8gYSByZWFzc2VtYmx5IHF1ZXVlIC0gaWYgCi0JaXBmcmFnX21heF9kaXN0IChvciBtb3JlKSBmcmFnbWVudHMgaGF2ZSBhcnJpdmVkIGZyb20gYSBwYXJ0aWN1bGFyIElQIAotCWFkZHJlc3MgYmV0d2VlbiBhZGRpdGlvbnMgdG8gYW55IElQIGZyYWdtZW50IHF1ZXVlIHVzaW5nIHRoYXQgc291cmNlIAotCWFkZHJlc3MsIGl0J3MgcHJlc3VtZWQgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgaW4gdGhlIHF1ZXVlIGFyZSAKLQlsb3N0LiBUaGUgZXhpc3RpbmcgZnJhZ21lbnQgcXVldWUgd2lsbCBiZSBkcm9wcGVkLCBhbmQgYSBuZXcgb25lIAorCWlwZnJhZ19tYXhfZGlzdCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGRlZmluZXMgdGhlCisJbWF4aW11bSAiZGlzb3JkZXIiIHdoaWNoIGlzIGFsbG93ZWQgYW1vbmcgZnJhZ21lbnRzIHdoaWNoIHNoYXJlIGEKKwljb21tb24gSVAgc291cmNlIGFkZHJlc3MuIE5vdGUgdGhhdCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaXMKKwlub3QgdW51c3VhbCwgYnV0IGlmIGEgbGFyZ2UgbnVtYmVyIG9mIGZyYWdtZW50cyBhcnJpdmUgZnJvbSBhIHNvdXJjZQorCUlQIGFkZHJlc3Mgd2hpbGUgYSBwYXJ0aWN1bGFyIGZyYWdtZW50IHF1ZXVlIHJlbWFpbnMgaW5jb21wbGV0ZSwgaXQKKwlwcm9iYWJseSBpbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgYmVsb25naW5nIHRvIHRoYXQgcXVldWUKKwloYXZlIGJlZW4gbG9zdC4gV2hlbiBpcGZyYWdfbWF4X2Rpc3QgaXMgcG9zaXRpdmUsIGFuIGFkZGl0aW9uYWwgY2hlY2sKKwlpcyBkb25lIG9uIGZyYWdtZW50cyBiZWZvcmUgdGhleSBhcmUgYWRkZWQgdG8gYSByZWFzc2VtYmx5IHF1ZXVlIC0gaWYKKwlpcGZyYWdfbWF4X2Rpc3QgKG9yIG1vcmUpIGZyYWdtZW50cyBoYXZlIGFycml2ZWQgZnJvbSBhIHBhcnRpY3VsYXIgSVAKKwlhZGRyZXNzIGJldHdlZW4gYWRkaXRpb25zIHRvIGFueSBJUCBmcmFnbWVudCBxdWV1ZSB1c2luZyB0aGF0IHNvdXJjZQorCWFkZHJlc3MsIGl0J3MgcHJlc3VtZWQgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgaW4gdGhlIHF1ZXVlIGFyZQorCWxvc3QuIFRoZSBleGlzdGluZyBmcmFnbWVudCBxdWV1ZSB3aWxsIGJlIGRyb3BwZWQsIGFuZCBhIG5ldyBvbmUKIAlzdGFydGVkLiBBbiBpcGZyYWdfbWF4X2Rpc3QgdmFsdWUgb2YgemVybyBkaXNhYmxlcyB0aGlzIGNoZWNrLgogCiAJVXNpbmcgYSB2ZXJ5IHNtYWxsIHZhbHVlLCBlLmcuIDEgb3IgMiwgZm9yIGlwZnJhZ19tYXhfZGlzdCBjYW4KIAlyZXN1bHQgaW4gdW5uZWNlc3NhcmlseSBkcm9wcGluZyBmcmFnbWVudCBxdWV1ZXMgd2hlbiBub3JtYWwKLQlyZW9yZGVyaW5nIG9mIHBhY2tldHMgb2NjdXJzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvb3IgYXBwbGljYXRpb24gCi0JcGVyZm9ybWFuY2UuIFVzaW5nIGEgdmVyeSBsYXJnZSB2YWx1ZSwgZS5nLiA1MDAwMCwgaW5jcmVhc2VzIHRoZSAKLQlsaWtlbGlob29kIG9mIGluY29ycmVjdGx5IHJlYXNzZW1ibGluZyBJUCBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGUgCisJcmVvcmRlcmluZyBvZiBwYWNrZXRzIG9jY3Vycywgd2hpY2ggY291bGQgbGVhZCB0byBwb29yIGFwcGxpY2F0aW9uCisJcGVyZm9ybWFuY2UuIFVzaW5nIGEgdmVyeSBsYXJnZSB2YWx1ZSwgZS5nLiA1MDAwMCwgaW5jcmVhc2VzIHRoZQorCWxpa2VsaWhvb2Qgb2YgaW5jb3JyZWN0bHkgcmVhc3NlbWJsaW5nIElQIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZQogCWZyb20gZGlmZmVyZW50IElQIGRhdGFncmFtcywgd2hpY2ggY291bGQgcmVzdWx0IGluIGRhdGEgY29ycnVwdGlvbi4KIAlEZWZhdWx0OiA2NAogCiBJTkVUIHBlZXIgc3RvcmFnZToKIAogaW5ldF9wZWVyX3RocmVzaG9sZCAtIElOVEVHRVIKLQlUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiB0aGUgc3RvcmFnZS4gIFN0YXJ0aW5nIGZyb20gdGhpcyB0aHJlc2hvbGQJCisJVGhlIGFwcHJveGltYXRlIHNpemUgb2YgdGhlIHN0b3JhZ2UuICBTdGFydGluZyBmcm9tIHRoaXMgdGhyZXNob2xkCiAJZW50cmllcyB3aWxsIGJlIHRocm93biBhZ2dyZXNzaXZlbHkuICBUaGlzIHRocmVzaG9sZCBhbHNvIGRldGVybWluZXMKIAllbnRyaWVzJyB0aW1lLXRvLWxpdmUgYW5kIHRpbWUgaW50ZXJ2YWxzIGJldHdlZW4gZ2FyYmFnZSBjb2xsZWN0aW9uCiAJcGFzc2VzLiAgTW9yZSBlbnRyaWVzLCBsZXNzIHRpbWUtdG8tbGl2ZSwgbGVzcyBHQyBpbnRlcnZhbC4KQEAgLTEwNSw3ICsxMDUsNyBAQAogCWluIGVmZmVjdCB1bmRlciBsb3cgKG9yIGFic2VudCkgbWVtb3J5IHByZXNzdXJlIG9uIHRoZSBwb29sLgogCU1lYXN1cmVkIGluIHNlY29uZHMuCiAKLVRDUCB2YXJpYWJsZXM6IAorVENQIHZhcmlhYmxlczoKIAogc29tYXhjb25uIC0gSU5URUdFUgogCUxpbWl0IG9mIHNvY2tldCBsaXN0ZW4oKSBiYWNrbG9nLCBrbm93biBpbiB1c2Vyc3BhY2UgYXMgU09NQVhDT05OLgpAQCAtMzEwLDcgKzMxMCw3IEBACiAKIHRjcF9yZW9yZGVyaW5nIC0gSU5URUdFUgogCU1heGltYWwgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGluIGEgVENQIHN0cmVhbS4KLQlEZWZhdWx0OiAzCQorCURlZmF1bHQ6IDMKIAogdGNwX3JldHJhbnNfY29sbGFwc2UgLSBCT09MRUFOCiAJQnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBicm9rZW4gcHJpbnRlcnMuCkBAIC01MjEsNyArNTIxLDcgQEAKIAogaXBfbG9jYWxfcG9ydF9yYW5nZSAtIDIgSU5URUdFUlMKIAlEZWZpbmVzIHRoZSBsb2NhbCBwb3J0IHJhbmdlIHRoYXQgaXMgdXNlZCBieSBUQ1AgYW5kIFVEUCB0bwotCWNob29zZSB0aGUgbG9jYWwgcG9ydC4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgZmlyc3QsIHRoZSAKKwljaG9vc2UgdGhlIGxvY2FsIHBvcnQuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGZpcnN0LCB0aGUKIAlzZWNvbmQgdGhlIGxhc3QgbG9jYWwgcG9ydCBudW1iZXIuIERlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbgogCWFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW06CiAJPiAxMjhNYiAzMjc2OC02MTAwMApAQCAtNTk0LDEyICs1OTQsMTIgQEAKIAogCUlmIHplcm8sIGljbXAgZXJyb3IgbWVzc2FnZXMgYXJlIHNlbnQgd2l0aCB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mCiAJdGhlIGV4aXRpbmcgaW50ZXJmYWNlLgotIAorCiAJSWYgbm9uLXplcm8sIHRoZSBtZXNzYWdlIHdpbGwgYmUgc2VudCB3aXRoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YKIAl0aGUgaW50ZXJmYWNlIHRoYXQgcmVjZWl2ZWQgdGhlIHBhY2tldCB0aGF0IGNhdXNlZCB0aGUgaWNtcCBlcnJvci4KIAlUaGlzIGlzIHRoZSBiZWhhdmlvdXIgbmV0d29yayBtYW55IGFkbWluaXN0cmF0b3JzIHdpbGwgZXhwZWN0IGZyb20KIAlhIHJvdXRlci4gQW5kIGl0IGNhbiBtYWtlIGRlYnVnZ2luZyBjb21wbGljYXRlZCBuZXR3b3JrIGxheW91dHMKLQltdWNoIGVhc2llci4gCisJbXVjaCBlYXNpZXIuCiAKIAlOb3RlIHRoYXQgaWYgbm8gcHJpbWFyeSBhZGRyZXNzIGV4aXN0cyBmb3IgdGhlIGludGVyZmFjZSBzZWxlY3RlZCwKIAl0aGVuIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG5vbi1sb29wYmFjayBpbnRlcmZhY2UgdGhhdApAQCAtNjExLDcgKzYxMSw3IEBACiAJQ2hhbmdlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzIHdlIGNhbiBzdWJzY3JpYmUgdG8uCiAJRGVmYXVsdDogMjAKIAotY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzIAorY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzCiAJCSAgdGhlIG5hbWUgb2YgeW91ciBuZXR3b3JrIGludGVyZmFjZSkKIGNvbmYvYWxsLyoJICBpcyBzcGVjaWFsLCBjaGFuZ2VzIHRoZSBzZXR0aW5ncyBmb3IgYWxsIGludGVyZmFjZXMKIApAQCAtNjI1LDExICs2MjUsMTEgQEAKIGFjY2VwdF9yZWRpcmVjdHMgLSBCT09MRUFOCiAJQWNjZXB0IElDTVAgcmVkaXJlY3QgbWVzc2FnZXMuCiAJYWNjZXB0X3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWY6Ci0JLSBib3RoIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgYXJlIFRSVUUgaW4gdGhlIGNhc2UgZm9yd2FyZGluZwotCSAgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAorCS0gYm90aCBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGFyZSBUUlVFIGluIHRoZSBjYXNlCisJICBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKIAlvcgotCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUgY2FzZQotCSAgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAorCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUKKwkgIGNhc2UgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAogCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKIAlkZWZhdWx0IFRSVUUgKGhvc3QpCiAJCUZBTFNFIChyb3V0ZXIpCkBAIC02NDAsOCArNjQwLDggQEAKIG1jX2ZvcndhcmRpbmcgLSBCT09MRUFOCiAJRG8gbXVsdGljYXN0IHJvdXRpbmcuIFRoZSBrZXJuZWwgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfTVJPVVRFCiAJYW5kIGEgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uIGlzIHJlcXVpcmVkLgotCWNvbmYvYWxsL21jX2ZvcndhcmRpbmcgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBtdWx0aWNhc3Qgcm91dGluZwotCWZvciB0aGUgaW50ZXJmYWNlCisJY29uZi9hbGwvbWNfZm9yd2FyZGluZyBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZW5hYmxlIG11bHRpY2FzdAorCXJvdXRpbmcJZm9yIHRoZSBpbnRlcmZhY2UKIAogbWVkaXVtX2lkIC0gSU5URUdFUgogCUludGVnZXIgdmFsdWUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBkZXZpY2VzIGJ5IHRoZSBtZWRpdW0gdGhleQpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJdGhlIGJyb2FkY2FzdCBwYWNrZXRzIGFyZSByZWNlaXZlZCBvbmx5IG9uIG9uZSBvZiB0aGVtLgogCVRoZSBkZWZhdWx0IHZhbHVlIDAgbWVhbnMgdGhhdCB0aGUgZGV2aWNlIGlzIHRoZSBvbmx5IGludGVyZmFjZQogCXRvIGl0cyBtZWRpdW0sIHZhbHVlIG9mIC0xIG1lYW5zIHRoYXQgbWVkaXVtIGlzIG5vdCBrbm93bi4KLQkKKwogCUN1cnJlbnRseSwgaXQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIHByb3h5X2FycCBiZWhhdmlvcjoKIAl0aGUgcHJveHlfYXJwIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgcGFja2V0cyBmb3J3YXJkZWQgYmV0d2VlbgogCXR3byBkZXZpY2VzIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBtZWRpYS4KQEAgLTY5OSwxNiArNjk5LDIyIEBACiAJZGVmYXVsdCBUUlVFIChyb3V0ZXIpCiAJCUZBTFNFIChob3N0KQogCi1ycF9maWx0ZXIgLSBCT09MRUFOCi0JMSAtIGRvIHNvdXJjZSB2YWxpZGF0aW9uIGJ5IHJldmVyc2VkIHBhdGgsIGFzIHNwZWNpZmllZCBpbiBSRkMxODEyCi0JICAgIFJlY29tbWVuZGVkIG9wdGlvbiBmb3Igc2luZ2xlIGhvbWVkIGhvc3RzIGFuZCBzdHViIG5ldHdvcmsKLQkgICAgcm91dGVycy4gQ291bGQgY2F1c2UgdHJvdWJsZXMgZm9yIGNvbXBsaWNhdGVkIChub3QgbG9vcCBmcmVlKQotCSAgICBuZXR3b3JrcyBydW5uaW5nIGEgc2xvdyB1bnJlbGlhYmxlIHByb3RvY29sIChzb3J0IG9mIFJJUCksCi0JICAgIG9yIHVzaW5nIHN0YXRpYyByb3V0ZXMuCi0KK3JwX2ZpbHRlciAtIElOVEVHRVIKIAkwIC0gTm8gc291cmNlIHZhbGlkYXRpb24uCisJMSAtIFN0cmljdCBtb2RlIGFzIGRlZmluZWQgaW4gUkZDMzcwNCBTdHJpY3QgUmV2ZXJzZSBQYXRoCisJICAgIEVhY2ggaW5jb21pbmcgcGFja2V0IGlzIHRlc3RlZCBhZ2FpbnN0IHRoZSBGSUIgYW5kIGlmIHRoZSBpbnRlcmZhY2UKKwkgICAgaXMgbm90IHRoZSBiZXN0IHJldmVyc2UgcGF0aCB0aGUgcGFja2V0IGNoZWNrIHdpbGwgZmFpbC4KKwkgICAgQnkgZGVmYXVsdCBmYWlsZWQgcGFja2V0cyBhcmUgZGlzY2FyZGVkLgorCTIgLSBMb29zZSBtb2RlIGFzIGRlZmluZWQgaW4gUkZDMzcwNCBMb29zZSBSZXZlcnNlIFBhdGgKKwkgICAgRWFjaCBpbmNvbWluZyBwYWNrZXQncyBzb3VyY2UgYWRkcmVzcyBpcyBhbHNvIHRlc3RlZCBhZ2FpbnN0IHRoZSBGSUIKKwkgICAgYW5kIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyBub3QgcmVhY2hhYmxlIHZpYSBhbnkgaW50ZXJmYWNlCisJICAgIHRoZSBwYWNrZXQgY2hlY2sgd2lsbCBmYWlsLgogCi0JY29uZi9hbGwvcnBfZmlsdGVyIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBkbyBzb3VyY2UgdmFsaWRhdGlvbgorCUN1cnJlbnQgcmVjb21tZW5kZWQgcHJhY3RpY2UgaW4gUkZDMzcwNCBpcyB0byBlbmFibGUgc3RyaWN0IG1vZGUKKwl0byBwcmV2ZW50IElQIHNwb29maW5nIGZyb20gRERvcyBhdHRhY2tzLiBJZiB1c2luZyBhc3ltbWV0cmljIHJvdXRpbmcKKwlvciBvdGhlciBjb21wbGljYXRlZCByb3V0aW5nLCB0aGVuIGxvb3NlIG1vZGUgaXMgcmVjb21tZW5kZWQuCisKKwljb25mL2FsbC9ycF9maWx0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byBub24temVybyB0byBkbyBzb3VyY2UgdmFsaWRhdGlvbgogCW9uIHRoZSBpbnRlcmZhY2UKIAogCURlZmF1bHQgdmFsdWUgaXMgMC4gTm90ZSB0aGF0IHNvbWUgZGlzdHJpYnV0aW9ucyBlbmFibGUgaXQKQEAgLTgyOSw3ICs4MzUsNyBAQAogCiBiaW5kdjZvbmx5IC0gQk9PTEVBTgogCURlZmF1bHQgdmFsdWUgZm9yIElQVjZfVjZPTkxZIHNvY2tldCBvcHRpb24sCi0Jd2hpY2ggcmVzdHJpY3RzIHVzZSBvZiB0aGUgSVB2NiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9uIAorCXdoaWNoIHJlc3RyaWN0cyB1c2Ugb2YgdGhlIElQdjYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbgogCW9ubHkuCiAJCVRSVUU6IGRpc2FibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCiAJCUZBTFNFOiBlbmFibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCkBAIC04MzksMTkgKzg0NSwxOSBAQAogSVB2NiBGcmFnbWVudGF0aW9uOgogCiBpcDZmcmFnX2hpZ2hfdGhyZXNoIC0gSU5URUdFUgotCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUHY2IGZyYWdtZW50cy4gV2hlbiAKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVB2NiBmcmFnbWVudHMuIFdoZW4KIAlpcDZmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZSwKIAl0aGUgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MgcGFja2V0cyB1bnRpbCBpcDZmcmFnX2xvd190aHJlc2gKIAlpcyByZWFjaGVkLgotCQorCiBpcDZmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCi0JU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gJCisJU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gKIAogaXA2ZnJhZ190aW1lIC0gSU5URUdFUgogCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQdjYgZnJhZ21lbnQgaW4gbWVtb3J5LgogCiBpcDZmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKLQlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lCiAJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQdjYgZnJhZ21lbnRzLgogCURlZmF1bHQ6IDYwMAogCkBAIC04NjAsMTcgKzg2NiwxNyBAQAogCiAKIGNvbmYvYWxsLyo6Ci0JQ2hhbmdlIGFsbCB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIHNldHRpbmdzLiAgCisJQ2hhbmdlIGFsbCB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIHNldHRpbmdzLgogCiAJW1hYWDogIE90aGVyIHNwZWNpYWwgZmVhdHVyZXMgdGhhbiBmb3J3YXJkaW5nP10KIAogY29uZi9hbGwvZm9yd2FyZGluZyAtIEJPT0xFQU4KLQlFbmFibGUgZ2xvYmFsIElQdjYgZm9yd2FyZGluZyBiZXR3ZWVuIGFsbCBpbnRlcmZhY2VzLiAgCisJRW5hYmxlIGdsb2JhbCBJUHY2IGZvcndhcmRpbmcgYmV0d2VlbiBhbGwgaW50ZXJmYWNlcy4KIAotCUlQdjQgYW5kIElQdjYgd29yayBkaWZmZXJlbnRseSBoZXJlOyBlLmcuIG5ldGZpbHRlciBtdXN0IGJlIHVzZWQgCisJSVB2NCBhbmQgSVB2NiB3b3JrIGRpZmZlcmVudGx5IGhlcmU7IGUuZy4gbmV0ZmlsdGVyIG11c3QgYmUgdXNlZAogCXRvIGNvbnRyb2wgd2hpY2ggaW50ZXJmYWNlcyBtYXkgZm9yd2FyZCBwYWNrZXRzIGFuZCB3aGljaCBub3QuCiAKLQlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZyAKKwlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZwogCSdmb3J3YXJkaW5nJyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgogCiAJVGhpcyByZWZlcnJlZCB0byBhcyBnbG9iYWwgZm9yd2FyZGluZy4KQEAgLTg4MSwxMiArODg3LDEyIEBACiBjb25mL2ludGVyZmFjZS8qOgogCUNoYW5nZSBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UuCiAKLQlUaGUgZnVuY3Rpb25hbCBiZWhhdmlvdXIgZm9yIGNlcnRhaW4gc2V0dGluZ3MgaXMgZGlmZmVyZW50IAorCVRoZSBmdW5jdGlvbmFsIGJlaGF2aW91ciBmb3IgY2VydGFpbiBzZXR0aW5ncyBpcyBkaWZmZXJlbnQKIAlkZXBlbmRpbmcgb24gd2hldGhlciBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb3Igbm90LgogCiBhY2NlcHRfcmEgLSBCT09MRUFOCiAJQWNjZXB0IFJvdXRlciBBZHZlcnRpc2VtZW50czsgYXV0b2NvbmZpZ3VyZSB1c2luZyB0aGVtLgotCQorCiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQuCiAJCQkgICAgZGlzYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLgogCkBAIC05MzIsNyArOTM4LDcgQEAKIAlEZWZhdWx0OiAwCiAKIGF1dG9jb25mIC0gQk9PTEVBTgotCUF1dG9jb25maWd1cmUgYWRkcmVzc2VzIHVzaW5nIFByZWZpeCBJbmZvcm1hdGlvbiBpbiBSb3V0ZXIgCisJQXV0b2NvbmZpZ3VyZSBhZGRyZXNzZXMgdXNpbmcgUHJlZml4IEluZm9ybWF0aW9uIGluIFJvdXRlcgogCUFkdmVydGlzZW1lbnRzLgogCiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGFjY2VwdF9yYV9waW5mbyBpcyBlbmFibGVkLgpAQCAtOTQxLDExICs5NDcsMTEgQEAKIGRhZF90cmFuc21pdHMgLSBJTlRFR0VSCiAJVGhlIGFtb3VudCBvZiBEdXBsaWNhdGUgQWRkcmVzcyBEZXRlY3Rpb24gcHJvYmVzIHRvIHNlbmQuCiAJRGVmYXVsdDogMQotCQotZm9yd2FyZGluZyAtIEJPT0xFQU4KLQlDb25maWd1cmUgaW50ZXJmYWNlLXNwZWNpZmljIEhvc3QvUm91dGVyIGJlaGF2aW91ci4gIAogCi0JTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGUgc2FtZSBzZXR0aW5nIG9uIGFsbCAKK2ZvcndhcmRpbmcgLSBCT09MRUFOCisJQ29uZmlndXJlIGludGVyZmFjZS1zcGVjaWZpYyBIb3N0L1JvdXRlciBiZWhhdmlvdXIuCisKKwlOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNldHRpbmcgb24gYWxsCiAJaW50ZXJmYWNlczsgbWl4ZWQgcm91dGVyL2hvc3Qgc2NlbmFyaW9zIGFyZSByYXRoZXIgdW5jb21tb24uCiAKIAlGQUxTRToKQEAgLTk1NCwxMyArOTYwLDEzIEBACiAKIAkxLiBJc1JvdXRlciBmbGFnIGlzIG5vdCBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgogCTIuIFJvdXRlciBTb2xpY2l0YXRpb25zIGFyZSBiZWluZyBzZW50IHdoZW4gbmVjZXNzYXJ5LgotCTMuIElmIGFjY2VwdF9yYSBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJvdXRlciAKKwkzLiBJZiBhY2NlcHRfcmEgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSb3V0ZXIKIAkgICBBZHZlcnRpc2VtZW50cyAoYW5kIGRvIGF1dG9jb25maWd1cmF0aW9uKS4KIAk0LiBJZiBhY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUmVkaXJlY3RzLgogCiAJVFJVRToKIAotCUlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgUm91dGVyIGJlaGF2aW91ciBpcyBhc3N1bWVkLiAKKwlJZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIFJvdXRlciBiZWhhdmlvdXIgaXMgYXNzdW1lZC4KIAlUaGlzIG1lYW5zIGV4YWN0bHkgdGhlIHJldmVyc2UgZnJvbSB0aGUgYWJvdmU6CiAKIAkxLiBJc1JvdXRlciBmbGFnIGlzIHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCkBAIC05OTUsNyArMTAwMSw3IEBACiAJRGVmYXVsdDogNAogCiByb3V0ZXJfc29saWNpdGF0aW9ucyAtIElOVEVHRVIKLQlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubyAKKwlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubwogCXJvdXRlcnMgYXJlIHByZXNlbnQuCiAJRGVmYXVsdDogMwogCkBAIC0xMDE5LDExICsxMDI1LDExIEBACiAKIG1heF9kZXN5bmNfZmFjdG9yIC0gSU5URUdFUgogCU1heGltdW0gdmFsdWUgZm9yIERFU1lOQ19GQUNUT1IsIHdoaWNoIGlzIGEgcmFuZG9tIHZhbHVlCi0JdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2ggCisJdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2gKIAlvdGhlciBhbmQgZ2VuZXJhdGUgbmV3IGFkZHJlc3NlcyBhdCBleGFjdGx5IHRoZSBzYW1lIHRpbWUuCiAJdmFsdWUgaXMgaW4gc2Vjb25kcy4KIAlEZWZhdWx0OiA2MDAKLQkKKwogcmVnZW5fbWF4X3JldHJ5IC0gSU5URUdFUgogCU51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgZ2l2ZSB1cCBhdHRlbXB0aW5nIHRvIGdlbmVyYXRlCiAJdmFsaWQgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KQEAgLTEwMzEsMTMgKzEwMzcsMTUgQEAKIAogbWF4X2FkZHJlc3NlcyAtIElOVEVHRVIKIAlOdW1iZXIgb2YgbWF4aW11bSBhZGRyZXNzZXMgcGVyIGludGVyZmFjZS4gIDAgZGlzYWJsZXMgbGltaXRhdGlvbi4KLQlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZCAKLQliZSB0b28gZWFzeSB3YXkgdG8gY3Jhc2gga2VybmVsIHRvIGFsbG93IHRvIGNyZWF0ZSB0b28gbXVjaCBvZiAKKwlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZAorCWJlIHRvbyBlYXN5IHdheSB0byBjcmFzaCBrZXJuZWwgdG8gYWxsb3cgdG8gY3JlYXRlIHRvbyBtdWNoIG9mCiAJYXV0b2NvbmZpZ3VyZWQgYWRkcmVzc2VzLgogCURlZmF1bHQ6IDE2CiAKIGRpc2FibGVfaXB2NiAtIEJPT0xFQU4KLQlEaXNhYmxlIElQdjYgb3BlcmF0aW9uLgorCURpc2FibGUgSVB2NiBvcGVyYXRpb24uICBJZiBhY2NlcHRfZGFkIGlzIHNldCB0byAyLCB0aGlzIHZhbHVlCisJd2lsbCBiZSBkeW5hbWljYWxseSBzZXQgdG8gVFJVRSBpZiBEQUQgZmFpbHMgZm9yIHRoZSBsaW5rLWxvY2FsCisJYWRkcmVzcy4KIAlEZWZhdWx0OiBGQUxTRSAoZW5hYmxlIElQdjYgb3BlcmF0aW9uKQogCiBhY2NlcHRfZGFkIC0gSU5URUdFUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OGU1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXB2Ni50eHQKQEAgLTAsMCArMSwzNSBAQAorCitPcHRpb25zIGZvciB0aGUgaXB2NiBtb2R1bGUgYXJlIHN1cHBsaWVkIGFzIHBhcmFtZXRlcnMgYXQgbG9hZCB0aW1lLgorCitNb2R1bGUgb3B0aW9ucyBtYXkgYmUgZ2l2ZW4gYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byB0aGUgaW5zbW9kCitvciBtb2Rwcm9iZSBjb21tYW5kLCBidXQgYXJlIHVzdWFsbHkgc3BlY2lmaWVkIGluIGVpdGhlciB0aGUKKy9ldGMvbW9kdWxlcy5jb25mIG9yIC9ldGMvbW9kcHJvYmUuY29uZiBjb25maWd1cmF0aW9uIGZpbGUsIG9yIGluIGEKK2Rpc3Ryby1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuCisKK1RoZSBhdmFpbGFibGUgaXB2NiBtb2R1bGUgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGJlbG93LiAgSWYgYSBwYXJhbWV0ZXIKK2lzIG5vdCBzcGVjaWZpZWQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4KKworVGhlIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CisKK2Rpc2FibGUKKworCVNwZWNpZmllcyB3aGV0aGVyIHRvIGxvYWQgdGhlIElQdjYgbW9kdWxlLCBidXQgZGlzYWJsZSBhbGwKKwlpdHMgZnVuY3Rpb25hbGl0eS4gIFRoaXMgbWlnaHQgYmUgdXNlZCB3aGVuIGFub3RoZXIgbW9kdWxlCisJaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgSVB2NiBtb2R1bGUgYmVpbmcgbG9hZGVkLCBidXQgbm8KKwlJUHY2IGFkZHJlc3NlcyBvciBvcGVyYXRpb25zIGFyZSBkZXNpcmVkLgorCisJVGhlIHBvc3NpYmxlIHZhbHVlcyBhbmQgdGhlaXIgZWZmZWN0cyBhcmU6CisKKwkwCisJCUlQdjYgaXMgZW5hYmxlZC4KKworCQlUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlLgorCisJMQorCQlJUHY2IGlzIGRpc2FibGVkLgorCisJCU5vIElQdjYgYWRkcmVzc2VzIHdpbGwgYmUgYWRkZWQgdG8gaW50ZXJmYWNlcywgYW5kCisJCWl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIG9wZW4gYW4gSVB2NiBzb2NrZXQuCisKKwkJQSByZWJvb3QgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIElQdjYuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjY4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0CkBAIC0wLDAgKzEsMTk5IEBACitMaW51eCBCYXNlIERyaXZlciBmb3IgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBJbnRlbChSKSBOZXR3b3JrIENvbm5lY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNYXJjaCAxMCwgMjAwOQorCisKK0NvbnRlbnRzCis9PT09PT09PQorCistIEluIFRoaXMgUmVsZWFzZQorLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorLSBBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCistIFN1cHBvcnQKKworCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGl4Z2JlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgMTAgR2lnYWJpdCBQQ0kKK0V4cHJlc3MgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uLiAgVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IKK0l0YW5pdW0oUikyLWJhc2VkIHN5c3RlbXMuCisKK0ZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uCitzdXBwbGllZCB3aXRoIHlvdXIgMTAgR2lnYWJpdCBhZGFwdGVyLiAgQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgYXBwbHkKK3RvIHVzZSB3aXRoIExpbnV4LgorCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhpcyBrZXJuZWw6CisgLSBOYXRpdmUgVkxBTnMKKyAtIENoYW5uZWwgQm9uZGluZyAodGVhbWluZykKKyAtIFNOTVAKKyAtIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkCisgLSBEYXRhIENlbnRlciBCcmlkZ2luZworCitDaGFubmVsIEJvbmRpbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2U6CisvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisKK0V0aHRvb2wsIGxzcGNpLCBhbmQgaWZjb25maWcgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBkZXZpY2UgYW5kIGRyaXZlcgorc3BlY2lmaWMgaW5mb3JtYXRpb24uCisKKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgZGV2aWNlcyBiYXNlZCBvbiB0aGUgODI1OTggY29udHJvbGxlciBhbmQgdGhlIDgyNTk5Citjb250cm9sbGVyLgorCitGb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gaWRlbnRpZnlpbmcgd2hpY2ggYWRhcHRlciB5b3UgaGF2ZSwgcGxlYXNlIHZpc2l0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9zYi9DUy0wMDg0NDEuaHRtCisKKworQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitzZWxlY3QgbSBmb3IgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiIGxvY2F0ZWQgYXQ6CisgICAgICBMb2NhdGlvbjoKKyAgICAgICAgLT4gRGV2aWNlIERyaXZlcnMKKyAgICAgICAgICAtPiBOZXR3b3JrIGRldmljZSBzdXBwb3J0IChORVRERVZJQ0VTIFs9eV0pCisgICAgICAgICAgICAtPiBFdGhlcm5ldCAoMTAwMDAgTWJpdCkgKE5FVERFVl8xMDAwMCBbPXldKQorCisxLiBtYWtlIG1vZHVsZXMgJiBtYWtlIG1vZHVsZXNfaW5zdGFsbAorCisyLiBMb2FkIHRoZSBtb2R1bGU6CisKKyMgbW9kcHJvYmUgaXhnYmUKKworICAgVGhlIGluc21vZCBjb21tYW5kIGNhbiBiZSB1c2VkIGlmIHRoZSBmdWxsCisgICBwYXRoIHRvIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHNwZWNpZmllZC4gIEZvciBleGFtcGxlOgorCisgICAgIGluc21vZCAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUua28KKworICAgV2l0aCAyLjYgYmFzZWQga2VybmVscyBhbHNvIG1ha2Ugc3VyZSB0aGF0IG9sZGVyIGl4Z2JlIGRyaXZlcnMgYXJlCisgICByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCwgYmVmb3JlIGxvYWRpbmcgdGhlIG5ldyBtb2R1bGU6CisKKyAgICAgcm1tb2QgaXhnYmU7IG1vZHByb2JlIGl4Z2JlCisKKzMuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKKyAgIHggaXMgdGhlIGludGVyZmFjZSBudW1iZXI6CisKKyAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KKworNC4gVmVyaWZ5IHRoYXQgdGhlIGludGVyZmFjZSB3b3Jrcy4gRW50ZXIgdGhlIGZvbGxvd2luZywgd2hlcmUgPElQX2FkZHJlc3M+CisgICBpcyB0aGUgSVAgYWRkcmVzcyBmb3IgYW5vdGhlciBtYWNoaW5lIG9uIHRoZSBzYW1lIHN1Ym5ldCBhcyB0aGUgaW50ZXJmYWNlCisgICB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKKworICAgICBwaW5nICA8SVBfYWRkcmVzcz4KKworCitBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzCisgIHJlc3RyaWN0aW5nIHN5c3RlbSBtZXNzYWdlcy4gSW4gb3JkZXIgdG8gc2VlIG5ldHdvcmsgZHJpdmVyIGxpbmsgbWVzc2FnZXMgb24KKyAgeW91ciBjb25zb2xlLCBzZXQgZG1lc2cgdG8gZWlnaHQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGRtZXNnIC1uIDgKKworICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLgorCisKKyAgSnVtYm8gRnJhbWVzCisgIC0tLS0tLS0tLS0tLQorICBUaGUgZHJpdmVyIHN1cHBvcnRzIEp1bWJvIEZyYW1lcyBmb3IgYWxsIGFkYXB0ZXJzLiBKdW1ibyBGcmFtZXMgc3VwcG9ydCBpcworICBlbmFibGVkIGJ5IGNoYW5naW5nIHRoZSBNVFUgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiAxNTAwLgorICBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIE1UVSBpcyAxNjExMC4gIFVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0bworICBpbmNyZWFzZSB0aGUgTVRVIHNpemUuICBGb3IgZXhhbXBsZToKKworICAgICAgICBpZmNvbmZpZyBldGh4IG10dSA5MDAwIHVwCisKKyAgVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyAxNjExMC4gIFRoaXMgdmFsdWUgY29pbmNpZGVzCisgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgMTYxMjguCisKKyAgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIGFrYSBHUk8KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlIGRyaXZlciBzdXBwb3J0cyB0aGUgaW4ta2VybmVsIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIEdSTy4gIEdSTyBoYXMKKyAgc2hvd24gdGhhdCBieSBjb2FsZXNjaW5nIFJ4IHRyYWZmaWMgaW50byBsYXJnZXIgY2h1bmtzIG9mIGRhdGEsIENQVQorICB1dGlsaXphdGlvbiBjYW4gYmUgc2lnbmlmaWNhbnRseSByZWR1Y2VkIHdoZW4gdW5kZXIgbGFyZ2UgUnggbG9hZC4gIEdSTyBpcyBhbgorICBldm9sdXRpb24gb2YgdGhlIHByZXZpb3VzbHktdXNlZCBMUk8gaW50ZXJmYWNlLiAgR1JPIGlzIGFibGUgdG8gY29hbGVzY2UKKyAgb3RoZXIgcHJvdG9jb2xzIGJlc2lkZXMgVENQLiAgSXQncyBhbHNvIHNhZmUgdG8gdXNlIHdpdGggY29uZmlndXJhdGlvbnMgdGhhdAorICBhcmUgcHJvYmxlbWF0aWMgZm9yIExSTywgbmFtZWx5IGJyaWRnaW5nIGFuZCBpU0NTSS4KKworICBHUk8gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBkcml2ZXIuICBGdXR1cmUgdmVyc2lvbnMgb2YgZXRodG9vbCB3aWxsCisgIHN1cHBvcnQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBHUk8gb24gdGhlIGZseS4KKworCisgIERhdGEgQ2VudGVyIEJyaWRnaW5nLCBha2EgRENCCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRENCIGlzIGEgY29uZmlndXJhdGlvbiBRdWFsaXR5IG9mIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gaW4gaGFyZHdhcmUuCisgIEl0IHVzZXMgdGhlIFZMQU4gcHJpb3JpdHkgdGFnICg4MDIuMXApIHRvIGZpbHRlciB0cmFmZmljLiAgVGhhdCBtZWFucworICB0aGF0IHRoZXJlIGFyZSA4IGRpZmZlcmVudCBwcmlvcml0aWVzIHRoYXQgdHJhZmZpYyBjYW4gYmUgZmlsdGVyZWQgaW50by4KKyAgSXQgYWxzbyBlbmFibGVzIHByaW9yaXR5IGZsb3cgY29udHJvbCB3aGljaCBjYW4gbGltaXQgb3IgZWxpbWluYXRlIHRoZQorICBudW1iZXIgb2YgZHJvcHBlZCBwYWNrZXRzIGR1cmluZyBuZXR3b3JrIHN0cmVzcy4gIEJhbmR3aWR0aCBjYW4gYmUKKyAgYWxsb2NhdGVkIHRvIGVhY2ggb2YgdGhlc2UgcHJpb3JpdGllcywgd2hpY2ggaXMgZW5mb3JjZWQgYXQgdGhlIGhhcmR3YXJlCisgIGxldmVsLgorCisgIFRvIGVuYWJsZSBEQ0Igc3VwcG9ydCBpbiBpeGdiZSwgeW91IG11c3QgZW5hYmxlIHRoZSBEQ0IgbmV0bGluayBsYXllciB0bworICBhbGxvdyB0aGUgdXNlcnNwYWNlIHRvb2xzIChzZWUgYmVsb3cpIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRyaXZlci4KKyAgVGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGhlcmU6CisKKyAgICAgICAgLT4gTmV0d29ya2luZyBzdXBwb3J0CisgICAgICAgICAgLT4gTmV0d29ya2luZyBvcHRpb25zCisgICAgICAgICAgICAtPiBEYXRhIENlbnRlciBCcmlkZ2luZyBzdXBwb3J0CisKKyAgT25jZSB0aGlzIGlzIHNlbGVjdGVkLCBEQ0Igc3VwcG9ydCBtdXN0IGJlIHNlbGVjdGVkIGZvciBpeGdiZS4gIFRoaXMgY2FuCisgIGJlIGZvdW5kIGhlcmU6CisKKyAgICAgICAgLT4gRGV2aWNlIERyaXZlcnMKKyAgICAgICAgICAtPiBOZXR3b3JrIGRldmljZSBzdXBwb3J0IChORVRERVZJQ0VTIFs9eV0pCisgICAgICAgICAgICAtPiBFdGhlcm5ldCAoMTAwMDAgTWJpdCkgKE5FVERFVl8xMDAwMCBbPXldKQorICAgICAgICAgICAgICAtPiBJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0CisgICAgICAgICAgICAgICAgLT4gRGF0YSBDZW50ZXIgQnJpZGdpbmcgKERDQikgU3VwcG9ydAorCisgIEFmdGVyIHRoZXNlIG9wdGlvbnMgYXJlIHNlbGVjdGVkLCB5b3UgbXVzdCByZWJ1aWxkIHlvdXIga2VybmVsIGFuZCB5b3VyCisgIG1vZHVsZXMuCisKKyAgSW4gb3JkZXIgdG8gdXNlIERDQiwgdXNlcnNwYWNlIHRvb2xzIG11c3QgYmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkLgorICBUaGUgZGNiZCB0b29scyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgICAgICAgaHR0cDovL2UxMDAwLnNmLm5ldAorCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKKyAgdmVyc2lvbiAzLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisKKworICBOQVBJCisgIC0tLS0KKworICBOQVBJIChSeCBwb2xsaW5nIG1vZGUpIGlzIHN1cHBvcnRlZCBpbiB0aGUgaXhnYmUgZHJpdmVyLiAgTkFQSSBpcyBlbmFibGVkCisgIGJ5IGRlZmF1bHQgaW4gdGhlIGRyaXZlci4KKworICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgorCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CisKKyAgICBodHRwOi8vZTEwMDAuc291cmNlZm9yZ2UubmV0CisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKK3RvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Jkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MDc3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0CkBAIC0wLDAgKzEsMzU2IEBACisKK092ZXJ2aWV3Cis9PT09PT09PQorCitUaGlzIHJlYWRtZSB0cmllcyB0byBwcm92aWRlIHNvbWUgYmFja2dyb3VuZCBvbiB0aGUgaG93cyBhbmQgd2h5cyBvZiBSRFMsCithbmQgd2lsbCBob3BlZnVsbHkgaGVscCB5b3UgZmluZCB5b3VyIHdheSBhcm91bmQgdGhlIGNvZGUuCisKK0luIGFkZGl0aW9uLCBwbGVhc2Ugc2VlIHRoaXMgZW1haWwgYWJvdXQgUkRTIG9yaWdpbnM6CitodHRwOi8vb3NzLm9yYWNsZS5jb20vcGlwZXJtYWlsL3Jkcy1kZXZlbC8yMDA3LU5vdmVtYmVyLzAwMDIyOC5odG1sCisKK1JEUyBBcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT0KKworUkRTIHByb3ZpZGVzIHJlbGlhYmxlLCBvcmRlcmVkIGRhdGFncmFtIGRlbGl2ZXJ5IGJ5IHVzaW5nIGEgc2luZ2xlCityZWxpYWJsZSBjb25uZWN0aW9uIGJldHdlZW4gYW55IHR3byBub2RlcyBpbiB0aGUgY2x1c3Rlci4gVGhpcyBhbGxvd3MKK2FwcGxpY2F0aW9ucyB0byB1c2UgYSBzaW5nbGUgc29ja2V0IHRvIHRhbGsgdG8gYW55IG90aGVyIHByb2Nlc3MgaW4gdGhlCitjbHVzdGVyIC0gc28gaW4gYSBjbHVzdGVyIHdpdGggTiBwcm9jZXNzZXMgeW91IG5lZWQgTiBzb2NrZXRzLCBpbiBjb250cmFzdAordG8gTipOIGlmIHlvdSB1c2UgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCB0cmFuc3BvcnQgbGlrZSBUQ1AuCisKK1JEUyBpcyBub3QgSW5maW5pYmFuZC1zcGVjaWZpYzsgaXQgd2FzIGRlc2lnbmVkIHRvIHN1cHBvcnQgZGlmZmVyZW50Cit0cmFuc3BvcnRzLiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlZCB0byBzdXBwb3J0IFJEUyBvdmVyIFRDUCBhcyB3ZWxsCithcyBJQi4gV29yayBpcyBpbiBwcm9ncmVzcyB0byBzdXBwb3J0IFJEUyBvdmVyIGlXQVJQLCBhbmQgdXNpbmcgRENFIHRvCitndWFyYW50ZWUgbm8gZHJvcHBlZCBwYWNrZXRzIG9uIEV0aGVybmV0LCBpdCBtYXkgYmUgcG9zc2libGUgdG8gdXNlIFJEUyBvdmVyCitVRFAgaW4gdGhlIGZ1dHVyZS4KKworVGhlIGhpZ2gtbGV2ZWwgc2VtYW50aWNzIG9mIFJEUyBmcm9tIHRoZSBhcHBsaWNhdGlvbidzIHBvaW50IG9mIHZpZXcgYXJlCisKKyAqCUFkZHJlc3NpbmcKKyAgICAgICAgUkRTIHVzZXMgSVB2NCBhZGRyZXNzZXMgYW5kIDE2Yml0IHBvcnQgbnVtYmVycyB0byBpZGVudGlmeQorICAgICAgICB0aGUgZW5kIHBvaW50IG9mIGEgY29ubmVjdGlvbi4gQWxsIHNvY2tldCBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZQorICAgICAgICBwYXNzaW5nIGFkZHJlc3NlcyBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZSBnZW5lcmFsbHkKKyAgICAgICAgdXNlIGEgc3RydWN0IHNvY2thZGRyX2luLgorCisgICAgICAgIFRoZSBmYWN0IHRoYXQgSVB2NCBhZGRyZXNzZXMgYXJlIHVzZWQgZG9lcyBub3QgbWVhbiB0aGUgdW5kZXJseWluZworICAgICAgICB0cmFuc3BvcnQgaGFzIHRvIGJlIElQLWJhc2VkLiBJbiBmYWN0LCBSRFMgb3ZlciBJQiB1c2VzIGEKKyAgICAgICAgcmVsaWFibGUgSUIgY29ubmVjdGlvbjsgdGhlIElQIGFkZHJlc3MgaXMgdXNlZCBleGNsdXNpdmVseSB0bworICAgICAgICBsb2NhdGUgdGhlIHJlbW90ZSBub2RlJ3MgR0lEIChieSBBUlBpbmcgZm9yIHRoZSBnaXZlbiBJUCkuCisKKyAgICAgICAgVGhlIHBvcnQgc3BhY2UgaXMgZW50aXJlbHkgaW5kZXBlbmRlbnQgb2YgVURQLCBUQ1Agb3IgYW55IG90aGVyCisgICAgICAgIHByb3RvY29sLgorCisgKglTb2NrZXQgaW50ZXJmYWNlCisgICAgICAgIFJEUyBzb2NrZXRzIHdvcmsgKm1vc3RseSogYXMgeW91IHdvdWxkIGV4cGVjdCBmcm9tIGEgQlNECisgICAgICAgIHNvY2tldC4gVGhlIG5leHQgc2VjdGlvbiB3aWxsIGNvdmVyIHRoZSBkZXRhaWxzLiBBdCBhbnkgcmF0ZSwKKyAgICAgICAgYWxsIEkvTyBpcyBwZXJmb3JtZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgQlNEIHNvY2tldCBBUEkuCisgICAgICAgIFNvbWUgYWRkaXRpb25zIGxpa2UgemVyb2NvcHkgc3VwcG9ydCBhcmUgaW1wbGVtZW50ZWQgdGhyb3VnaAorICAgICAgICBjb250cm9sIG1lc3NhZ2VzLCB3aGlsZSBvdGhlciBleHRlbnNpb25zIHVzZSB0aGUgZ2V0c29ja29wdC8KKyAgICAgICAgc2V0c29ja29wdCBjYWxscy4KKworICAgICAgICBTb2NrZXRzIG11c3QgYmUgYm91bmQgYmVmb3JlIHlvdSBjYW4gc2VuZCBvciByZWNlaXZlIGRhdGEuCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgYmluZGluZyBhbHNvIHNlbGVjdHMgYSB0cmFuc3BvcnQgYW5kCisgICAgICAgIGF0dGFjaGVzIGl0IHRvIHRoZSBzb2NrZXQuIE9uY2UgYm91bmQsIHRoZSB0cmFuc3BvcnQgYXNzaWdubWVudAorICAgICAgICBkb2VzIG5vdCBjaGFuZ2UuIFJEUyB3aWxsIHRvbGVyYXRlIElQcyBtb3ZpbmcgYXJvdW5kIChlZyBpbgorICAgICAgICBhIGFjdGl2ZS1hY3RpdmUgSEEgc2NlbmFyaW8pLCBidXQgb25seSBhcyBsb25nIGFzIHRoZSBhZGRyZXNzCisgICAgICAgIGRvZXNuJ3QgbW92ZSB0byBhIGRpZmZlcmVudCB0cmFuc3BvcnQuCisKKyAqCXN5c2N0bHMKKyAgICAgICAgUkRTIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHN5c2N0bHMgaW4gL3Byb2Mvc3lzL25ldC9yZHMKKworCitTb2NrZXQgSW50ZXJmYWNlCis9PT09PT09PT09PT09PT09CisKKyAgQUZfUkRTLCBQRl9SRFMsIFNPTF9SRFMKKyAgICAgICAgVGhlc2UgY29uc3RhbnRzIGhhdmVuJ3QgYmVlbiBhc3NpZ25lZCB5ZXQsIGJlY2F1c2UgUkRTIGlzbid0IGluCisgICAgICAgIG1haW5saW5lIHlldC4gQ3VycmVudGx5LCB0aGUga2VybmVsIG1vZHVsZSBhc3NpZ25zIHNvbWUgY29uc3RhbnQKKyAgICAgICAgYW5kIHB1Ymxpc2hlcyBpdCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdHdvIHN5c2N0bCBmaWxlcworICAgICAgICAgICAgICAgIC9wcm9jL3N5cy9uZXQvcmRzL3BmX3JkcworICAgICAgICAgICAgICAgIC9wcm9jL3N5cy9uZXQvcmRzL3NvbF9yZHMKKworICBmZCA9IHNvY2tldChQRl9SRFMsIFNPQ0tfU0VRUEFDS0VULCAwKTsKKyAgICAgICAgVGhpcyBjcmVhdGVzIGEgbmV3LCB1bmJvdW5kIFJEUyBzb2NrZXQuCisKKyAgc2V0c29ja29wdChTT0xfU09DS0VUKTogc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgc2l6ZQorICAgICAgICBSRFMgaG9ub3JzIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBzaXplIHNvY2tldCBvcHRpb25zLgorICAgICAgICBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHF1ZXVlIG1vcmUgdGhhbiBTT19TTkRTSVpFIGJ5dGVzIHRvCisgICAgICAgIGEgc29ja2V0LiBBIG1lc3NhZ2UgaXMgcXVldWVkIHdoZW4gc2VuZG1zZyBpcyBjYWxsZWQsIGFuZAorICAgICAgICBpdCBsZWF2ZXMgdGhlIHF1ZXVlIHdoZW4gdGhlIHJlbW90ZSBzeXN0ZW0gYWNrbm93bGVkZ2VzCisgICAgICAgIGl0cyBhcnJpdmFsLgorCisgICAgICAgIFRoZSBTT19SQ1ZTSVpFIG9wdGlvbiBjb250cm9scyB0aGUgbWF4aW11bSByZWNlaXZlIHF1ZXVlIGxlbmd0aC4KKyAgICAgICAgVGhpcyBpcyBhIHNvZnQgbGltaXQgcmF0aGVyIHRoYW4gYSBoYXJkIGxpbWl0IC0gUkRTIHdpbGwKKyAgICAgICAgY29udGludWUgdG8gYWNjZXB0IGFuZCBxdWV1ZSBpbmNvbWluZyBtZXNzYWdlcywgZXZlbiBpZiB0aGF0CisgICAgICAgIHRha2VzIHRoZSBxdWV1ZSBsZW5ndGggb3ZlciB0aGUgbGltaXQuIEhvd2V2ZXIsIGl0IHdpbGwgYWxzbworICAgICAgICBtYXJrIHRoZSBwb3J0IGFzICJjb25nZXN0ZWQiIGFuZCBzZW5kIGEgY29uZ2VzdGlvbiB1cGRhdGUgdG8KKyAgICAgICAgdGhlIHNvdXJjZSBub2RlLiBUaGUgc291cmNlIG5vZGUgaXMgc3VwcG9zZWQgdG8gdGhyb3R0bGUgYW55CisgICAgICAgIHByb2Nlc3NlcyBzZW5kaW5nIHRvIHRoaXMgY29uZ2VzdGVkIHBvcnQuCisKKyAgYmluZChmZCwgJnNvY2thZGRyX2luLCAuLi4pCisgICAgICAgIFRoaXMgYmluZHMgdGhlIHNvY2tldCB0byBhIGxvY2FsIElQIGFkZHJlc3MgYW5kIHBvcnQsIGFuZCBhCisgICAgICAgIHRyYW5zcG9ydC4KKworICBzZW5kbXNnKGZkLCAuLi4pCisgICAgICAgIFNlbmRzIGEgbWVzc2FnZSB0byB0aGUgaW5kaWNhdGVkIHJlY2lwaWVudC4gVGhlIGtlcm5lbCB3aWxsCisgICAgICAgIHRyYW5zcGFyZW50bHkgZXN0YWJsaXNoIHRoZSB1bmRlcmx5aW5nIHJlbGlhYmxlIGNvbm5lY3Rpb24KKyAgICAgICAgaWYgaXQgaXNuJ3QgdXAgeWV0LgorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2VuZCBhIG1lc3NhZ2UgdGhhdCBleGNlZWRzIFNPX1NORFNJWkUgd2lsbAorICAgICAgICByZXR1cm4gd2l0aCAtRU1TR1NJWkUKKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNlbmQgYSBtZXNzYWdlIHRoYXQgd291bGQgdGFrZSB0aGUgdG90YWwgbnVtYmVyCisgICAgICAgIG9mIHF1ZXVlZCBieXRlcyBvdmVyIHRoZSBTT19TTkRTSVpFIHRocmVzaG9sZCB3aWxsIHJldHVybgorICAgICAgICBFQUdBSU4uCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZW5kIGEgbWVzc2FnZSB0byBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgbWFya2VkCisgICAgICAgIGFzICJjb25nZXN0ZWQiIHdpbGwgcmV0dXJuIEVOT0JVRlMuCisKKyAgcmVjdm1zZyhmZCwgLi4uKQorICAgICAgICBSZWNlaXZlcyBhIG1lc3NhZ2UgdGhhdCB3YXMgcXVldWVkIHRvIHRoaXMgc29ja2V0LiBUaGUgc29ja2V0cworICAgICAgICByZWN2IHF1ZXVlIGFjY291bnRpbmcgaXMgYWRqdXN0ZWQsIGFuZCBpZiB0aGUgcXVldWUgbGVuZ3RoCisgICAgICAgIGRyb3BzIGJlbG93IFNPX1NORFNJWkUsIHRoZSBwb3J0IGlzIG1hcmtlZCB1bmNvbmdlc3RlZCwgYW5kCisgICAgICAgIGEgY29uZ2VzdGlvbiB1cGRhdGUgaXMgc2VudCB0byBhbGwgcGVlcnMuCisKKyAgICAgICAgQXBwbGljYXRpb25zIGNhbiBhc2sgdGhlIFJEUyBrZXJuZWwgbW9kdWxlIHRvIHJlY2VpdmUKKyAgICAgICAgbm90aWZpY2F0aW9ucyB2aWEgY29udHJvbCBtZXNzYWdlcyAoZm9yIGluc3RhbmNlLCB0aGVyZSBpcyBhCisgICAgICAgIG5vdGlmaWNhdGlvbiB3aGVuIGEgY29uZ2VzdGlvbiB1cGRhdGUgYXJyaXZlZCwgb3Igd2hlbiBhIFJETUEKKyAgICAgICAgb3BlcmF0aW9uIGNvbXBsZXRlcykuIFRoZXNlIG5vdGlmaWNhdGlvbnMgYXJlIHJlY2VpdmVkIHRocm91Z2gKKyAgICAgICAgdGhlIG1zZy5tc2dfY29udHJvbCBidWZmZXIgb2Ygc3RydWN0IG1zZ2hkci4gVGhlIGZvcm1hdCBvZiB0aGUKKyAgICAgICAgbWVzc2FnZXMgaXMgZGVzY3JpYmVkIGluIG1hbnBhZ2VzLgorCisgIHBvbGwoZmQpCisgICAgICAgIFJEUyBzdXBwb3J0cyB0aGUgcG9sbCBpbnRlcmZhY2UgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uCisgICAgICAgIHRvIGltcGxlbWVudCBhc3luYyBJL08uCisKKyAgICAgICAgUE9MTElOIGhhbmRsaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFdoZW4gdGhlcmUncyBhbgorICAgICAgICBpbmNvbWluZyBtZXNzYWdlIHF1ZXVlZCB0byB0aGUgc29ja2V0LCBvciBhIHBlbmRpbmcgbm90aWZpY2F0aW9uLAorICAgICAgICB3ZSBzaWduYWwgUE9MTElOLgorCisgICAgICAgIFBPTExPVVQgaXMgYSBsaXR0bGUgaGFyZGVyLiBTaW5jZSB5b3UgY2FuIGVzc2VudGlhbGx5IHNlbmQKKyAgICAgICAgdG8gYW55IGRlc3RpbmF0aW9uLCBSRFMgd2lsbCBhbHdheXMgc2lnbmFsIFBPTExPVVQgYXMgbG9uZyBhcworICAgICAgICB0aGVyZSdzIHJvb20gb24gdGhlIHNlbmQgcXVldWUgKGllIHRoZSBudW1iZXIgb2YgYnl0ZXMgcXVldWVkCisgICAgICAgIGlzIGxlc3MgdGhhbiB0aGUgc2VuZGJ1ZiBzaXplKS4KKworICAgICAgICBIb3dldmVyLCB0aGUga2VybmVsIHdpbGwgcmVmdXNlIHRvIGFjY2VwdCBtZXNzYWdlcyB0bworICAgICAgICBhIGRlc3RpbmF0aW9uIG1hcmtlZCBjb25nZXN0ZWQgLSBpbiB0aGlzIGNhc2UgeW91IHdpbGwgbG9vcAorICAgICAgICBmb3JldmVyIGlmIHlvdSByZWx5IG9uIHBvbGwgdG8gdGVsbCB5b3Ugd2hhdCB0byBkby4KKyAgICAgICAgVGhpcyBpc24ndCBhIHRyaXZpYWwgcHJvYmxlbSwgYnV0IGFwcGxpY2F0aW9ucyBjYW4gZGVhbCB3aXRoCisgICAgICAgIHRoaXMgLSBieSB1c2luZyBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbnMsIGFuZCBieSBjaGVja2luZyBmb3IKKyAgICAgICAgRU5PQlVGUyBlcnJvcnMgcmV0dXJuZWQgYnkgc2VuZG1zZy4KKworICBzZXRzb2Nrb3B0KFNPTF9SRFMsIFJEU19DQU5DRUxfU0VOVF9UTywgJnNvY2thZGRyX2luKQorICAgICAgICBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gZGlzY2FyZCBhbGwgbWVzc2FnZXMgcXVldWVkIHRvIGEKKyAgICAgICAgc3BlY2lmaWMgZGVzdGluYXRpb24gb24gdGhpcyBwYXJ0aWN1bGFyIHNvY2tldC4KKworICAgICAgICBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gY2FuY2VsIG91dHN0YW5kaW5nIG1lc3NhZ2VzIGlmCisgICAgICAgIGl0IGRldGVjdHMgYSB0aW1lb3V0LiBGb3IgaW5zdGFuY2UsIGlmIGl0IHRyaWVkIHRvIHNlbmQgYSBtZXNzYWdlLAorICAgICAgICBhbmQgdGhlIHJlbW90ZSBob3N0IGlzIHVucmVhY2hhYmxlLCBSRFMgd2lsbCBrZWVwIHRyeWluZyBmb3JldmVyLgorICAgICAgICBUaGUgYXBwbGljYXRpb24gbWF5IGRlY2lkZSBpdCdzIG5vdCB3b3J0aCBpdCwgYW5kIGNhbmNlbCB0aGUKKyAgICAgICAgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIGl0IHdvdWxkIHVzZSBSRFNfQ0FOQ0VMX1NFTlRfVE8gdG8KKyAgICAgICAgbnVrZSBhbnkgcGVuZGluZyBtZXNzYWdlcy4KKworCitSRE1BIGZvciBSRFMKKz09PT09PT09PT09PQorCisgIHNlZSByZHMtcmRtYSg3KSBtYW5wYWdlIChhdmFpbGFibGUgaW4gcmRzLXRvb2xzKQorCisKK0Nvbmdlc3Rpb24gTm90aWZpY2F0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgc2VlIHJkcyg3KSBtYW5wYWdlCisKKworUkRTIFByb3RvY29sCis9PT09PT09PT09PT0KKworICBNZXNzYWdlIGhlYWRlcgorCisgICAgVGhlIG1lc3NhZ2UgaGVhZGVyIGlzIGEgJ3N0cnVjdCByZHNfaGVhZGVyJyAoc2VlIHJkcy5oKToKKyAgICBGaWVsZHM6CisgICAgICBoX3NlcXVlbmNlOgorICAgICAgICAgIHBlci1wYWNrZXQgc2VxdWVuY2UgbnVtYmVyCisgICAgICBoX2FjazoKKyAgICAgICAgICBwaWdneWJhY2tlZCBhY2tub3dsZWRnbWVudCBvZiBsYXN0IHBhY2tldCByZWNlaXZlZAorICAgICAgaF9sZW46CisgICAgICAgICAgbGVuZ3RoIG9mIGRhdGEsIG5vdCBpbmNsdWRpbmcgaGVhZGVyCisgICAgICBoX3Nwb3J0OgorICAgICAgICAgIHNvdXJjZSBwb3J0CisgICAgICBoX2Rwb3J0OgorICAgICAgICAgIGRlc3RpbmF0aW9uIHBvcnQKKyAgICAgIGhfZmxhZ3M6CisgICAgICAgICAgQ09OR19CSVRNQVAgLSB0aGlzIGlzIGEgY29uZ2VzdGlvbiB1cGRhdGUgYml0bWFwCisgICAgICAgICAgQUNLX1JFUVVJUkVEIC0gcmVjZWl2ZXIgbXVzdCBhY2sgdGhpcyBwYWNrZXQKKyAgICAgICAgICBSRVRSQU5TTUlUVEVEIC0gcGFja2V0IGhhcyBwcmV2aW91c2x5IGJlZW4gc2VudAorICAgICAgaF9jcmVkaXQ6CisgICAgICAgICAgaW5kaWNhdGUgdG8gb3RoZXIgZW5kIG9mIGNvbm5lY3Rpb24gdGhhdAorICAgICAgICAgIGl0IGhhcyBtb3JlIGNyZWRpdHMgYXZhaWxhYmxlIChpLmUuIHRoZXJlIGlzCisgICAgICAgICAgbW9yZSBzZW5kIHJvb20pCisgICAgICBoX3BhZGRpbmdbNF06CisgICAgICAgICAgdW51c2VkLCBmb3IgZnV0dXJlIHVzZQorICAgICAgaF9jc3VtOgorICAgICAgICAgIGhlYWRlciBjaGVja3N1bQorICAgICAgaF9leHRoZHI6CisgICAgICAgICAgb3B0aW9uYWwgZGF0YSBjYW4gYmUgcGFzc2VkIGhlcmUuIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgZm9yCisgICAgICAgICAgcGFzc2luZyBSRE1BLXJlbGF0ZWQgaW5mb3JtYXRpb24uCisKKyAgQUNLIGFuZCByZXRyYW5zbWl0IGhhbmRsaW5nCisKKyAgICAgIE9uZSBtaWdodCB0aGluayB0aGF0IHdpdGggcmVsaWFibGUgSUIgY29ubmVjdGlvbnMgeW91IHdvdWxkbid0IG5lZWQKKyAgICAgIHRvIGFjayBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgSUIKKyAgICAgIGhhcmR3YXJlIGdlbmVyYXRlcyBhbiBhY2sgbWVzc2FnZSBiZWZvcmUgaXQgaGFzIERNQWVkIHRoZSBtZXNzYWdlCisgICAgICBpbnRvIG1lbW9yeS4gIFRoaXMgY3JlYXRlcyBhIHBvdGVudGlhbCBtZXNzYWdlIGxvc3MgaWYgdGhlIEhDQSBpcworICAgICAgZGlzYWJsZWQgZm9yIGFueSByZWFzb24gYmV0d2VlbiB3aGVuIGl0IHNlbmRzIHRoZSBhY2sgYW5kIGJlZm9yZQorICAgICAgdGhlIG1lc3NhZ2UgaXMgRE1BZWQgYW5kIHByb2Nlc3NlZC4gIFRoaXMgaXMgb25seSBhIHBvdGVudGlhbCBpc3N1ZQorICAgICAgaWYgYW5vdGhlciBIQ0EgaXMgYXZhaWxhYmxlIGZvciBmYWlsLW92ZXIuCisKKyAgICAgIFNlbmRpbmcgYW4gYWNrIGltbWVkaWF0ZWx5IHdvdWxkIGFsbG93IHRoZSBzZW5kZXIgdG8gZnJlZSB0aGUgc2VudAorICAgICAgbWVzc2FnZSBmcm9tIHRoZWlyIHNlbmQgcXVldWUgcXVpY2tseSwgYnV0IGNvdWxkIGNhdXNlIGV4Y2Vzc2l2ZQorICAgICAgdHJhZmZpYyB0byBiZSB1c2VkIGZvciBhY2tzLiBSRFMgcGlnZ3liYWNrcyBhY2tzIG9uIHNlbnQgZGF0YQorICAgICAgcGFja2V0cy4gIEFjay1vbmx5IHBhY2tldHMgYXJlIHJlZHVjZWQgYnkgb25seSBhbGxvd2luZyBvbmUgdG8gYmUKKyAgICAgIGluIGZsaWdodCBhdCBhIHRpbWUsIGFuZCBieSB0aGUgc2VuZGVyIG9ubHkgYXNraW5nIGZvciBhY2tzIHdoZW4KKyAgICAgIGl0cyBzZW5kIGJ1ZmZlcnMgc3RhcnQgdG8gZmlsbCB1cC4gQWxsIHJldHJhbnNtaXNzaW9ucyBhcmUgYWxzbworICAgICAgYWNrZWQuCisKKyAgRmxvdyBDb250cm9sCisKKyAgICAgIFJEUydzIElCIHRyYW5zcG9ydCB1c2VzIGEgY3JlZGl0LWJhc2VkIG1lY2hhbmlzbSB0byB2ZXJpZnkgdGhhdAorICAgICAgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHBlZXIncyByZWNlaXZlIGJ1ZmZlcnMgZm9yIG1vcmUgZGF0YS4gVGhpcworICAgICAgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgaGFyZHdhcmUgcmV0cmllcyBvbiB0aGUgY29ubmVjdGlvbi4KKworICBDb25nZXN0aW9uCisKKyAgICAgIE1lc3NhZ2VzIHdhaXRpbmcgaW4gdGhlIHJlY2VpdmUgcXVldWUgb24gdGhlIHJlY2VpdmluZyBzb2NrZXQKKyAgICAgIGFyZSBhY2NvdW50ZWQgYWdhaW5zdCB0aGUgc29ja2V0cyBTT19SQ1ZCVUYgb3B0aW9uIHZhbHVlLiAgT25seQorICAgICAgdGhlIHBheWxvYWQgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgYXJlIGFjY291bnRlZCBmb3IuICBJZiB0aGUKKyAgICAgIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgZXF1YWxzIG9yIGV4Y2VlZHMgcmN2YnVmIHRoZW4gdGhlIHNvY2tldAorICAgICAgaXMgY29uZ2VzdGVkLiAgQWxsIHNlbmRzIGF0dGVtcHRlZCB0byB0aGlzIHNvY2tldCdzIGFkZHJlc3MKKyAgICAgIHNob3VsZCByZXR1cm4gYmxvY2sgb3IgcmV0dXJuIC1FV09VTERCTE9DSy4KKworICAgICAgQXBwbGljYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSByZWFzb25hYmx5IHR1bmVkIHN1Y2ggdGhhdCB0aGlzCisgICAgICBzaXR1YXRpb24gdmVyeSByYXJlbHkgb2NjdXJzLiAgQW4gYXBwbGljYXRpb24gZW5jb3VudGVyaW5nIHRoaXMKKyAgICAgICJiYWNrLXByZXNzdXJlIiBpcyBjb25zaWRlcmVkIGEgYnVnLgorCisgICAgICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyBlYWNoIG5vZGUgbWFpbnRhaW4gYml0bWFwcyB3aGljaAorICAgICAgaW5kaWNhdGUgd2hpY2ggcG9ydHMgb24gYm91bmQgYWRkcmVzc2VzIGFyZSBjb25nZXN0ZWQuICBBcyB0aGUKKyAgICAgIGJpdG1hcCBjaGFuZ2VzIGl0IGlzIHNlbnQgdGhyb3VnaCBhbGwgdGhlIGNvbm5lY3Rpb25zIHdoaWNoCisgICAgICB0ZXJtaW5hdGUgaW4gdGhlIGxvY2FsIGFkZHJlc3Mgb2YgdGhlIGJpdG1hcCB3aGljaCBjaGFuZ2VkLgorCisgICAgICBUaGUgYml0bWFwcyBhcmUgYWxsb2NhdGVkIGFzIGNvbm5lY3Rpb25zIGFyZSBicm91Z2h0IHVwLiAgVGhpcworICAgICAgYXZvaWRzIGFsbG9jYXRpb24gaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBwYXRoIHdoaWNoIHF1ZXVlcworICAgICAgc2FnZXMgb24gc29ja2V0cy4gIFRoZSBkZW5zZSBiaXRtYXBzIGxldCB0cmFuc3BvcnRzIHNlbmQgdGhlCisgICAgICBlbnRpcmUgYml0bWFwIG9uIGFueSBiaXRtYXAgY2hhbmdlIHJlYXNvbmFibHkgZWZmaWNpZW50bHkuICBUaGlzCisgICAgICBpcyBtdWNoIGVhc2llciB0byBpbXBsZW1lbnQgdGhhbiBzb21lIGZpbmVyLWdyYWluZWQKKyAgICAgIGNvbW11bmljYXRpb24gb2YgcGVyLXBvcnQgY29uZ2VzdGlvbi4gIFRoZSBzZW5kZXIgZG9lcyBhIHZlcnkKKyAgICAgIGluZXhwZW5zaXZlIGJpdCB0ZXN0IHRvIHRlc3QgaWYgdGhlIHBvcnQgaXQncyBhYm91dCB0byBzZW5kIHRvCisgICAgICBpcyBjb25nZXN0ZWQgb3Igbm90LgorCisKK1JEUyBUcmFuc3BvcnQgTGF5ZXIKKz09PT09PT09PT09PT09PT09PQorCisgIEFzIG1lbnRpb25lZCBhYm92ZSwgUkRTIGlzIG5vdCBJQi1zcGVjaWZpYy4gSXRzIGNvZGUgaXMgZGl2aWRlZAorICBpbnRvIGEgZ2VuZXJhbCBSRFMgbGF5ZXIgYW5kIGEgdHJhbnNwb3J0IGxheWVyLgorCisgIFRoZSBnZW5lcmFsIGxheWVyIGhhbmRsZXMgdGhlIHNvY2tldCBBUEksIGNvbmdlc3Rpb24gaGFuZGxpbmcsCisgIGxvb3BiYWNrLCBzdGF0cywgdXNlcm1lbSBwaW5uaW5nLCBhbmQgdGhlIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZS4KKworICBUaGUgdHJhbnNwb3J0IGxheWVyIGhhbmRsZXMgdGhlIGRldGFpbHMgb2YgdGhlIHRyYW5zcG9ydC4gVGhlIElCCisgIHRyYW5zcG9ydCwgZm9yIGV4YW1wbGUsIGhhbmRsZXMgYWxsIHRoZSBxdWV1ZSBwYWlycywgd29yayByZXF1ZXN0cywKKyAgQ00gZXZlbnQgaGFuZGxlcnMsIGFuZCBvdGhlciBJbmZpbmliYW5kIGRldGFpbHMuCisKKworUkRTIEtlcm5lbCBTdHJ1Y3R1cmVzCis9PT09PT09PT09PT09PT09PT09PT0KKworICBzdHJ1Y3QgcmRzX21lc3NhZ2UKKyAgICBha2EgcG9zc2libHkgInJkc19vdXRnb2luZyIsIHRoZSBnZW5lcmljIFJEUyBsYXllciBjb3BpZXMgZGF0YSB0bworICAgIGJlIHNlbnQgYW5kIHNldHMgaGVhZGVyIGZpZWxkcyBhcyBuZWVkZWQsIGJhc2VkIG9uIHRoZSBzb2NrZXQgQVBJLgorICAgIFRoaXMgaXMgdGhlbiBxdWV1ZWQgZm9yIHRoZSBpbmRpdmlkdWFsIGNvbm5lY3Rpb24gYW5kIHNlbnQgYnkgdGhlCisgICAgY29ubmVjdGlvbidzIHRyYW5zcG9ydC4KKyAgc3RydWN0IHJkc19pbmNvbWluZworICAgIGEgZ2VuZXJpYyBzdHJ1Y3QgcmVmZXJyaW5nIHRvIGluY29taW5nIGRhdGEgdGhhdCBjYW4gYmUgaGFuZGVkIGZyb20KKyAgICB0aGUgdHJhbnNwb3J0IHRvIHRoZSBnZW5lcmFsIGNvZGUgYW5kIHF1ZXVlZCBieSB0aGUgZ2VuZXJhbCBjb2RlCisgICAgd2hpbGUgdGhlIHNvY2tldCBpcyBhd29rZW4uIEl0IGlzIHRoZW4gcGFzc2VkIGJhY2sgdG8gdGhlIHRyYW5zcG9ydAorICAgIGNvZGUgdG8gaGFuZGxlIHRoZSBhY3R1YWwgY29weS10by11c2VyLgorICBzdHJ1Y3QgcmRzX3NvY2tldAorICAgIHBlci1zb2NrZXQgaW5mb3JtYXRpb24KKyAgc3RydWN0IHJkc19jb25uZWN0aW9uCisgICAgcGVyLWNvbm5lY3Rpb24gaW5mb3JtYXRpb24KKyAgc3RydWN0IHJkc190cmFuc3BvcnQKKyAgICBwb2ludGVycyB0byB0cmFuc3BvcnQtc3BlY2lmaWMgZnVuY3Rpb25zCisgIHN0cnVjdCByZHNfc3RhdGlzdGljcworICAgIG5vbi10cmFuc3BvcnQtc3BlY2lmaWMgc3RhdGlzdGljcworICBzdHJ1Y3QgcmRzX2NvbmdfbWFwCisgICAgd3JhcHMgdGhlIHJhdyBjb25nZXN0aW9uIGJpdG1hcCwgY29udGFpbnMgcmJub2RlLCB3YWl0cSwgZXRjLgorCitDb25uZWN0aW9uIG1hbmFnZW1lbnQKKz09PT09PT09PT09PT09PT09PT09PQorCisgIENvbm5lY3Rpb25zIG1heSBiZSBpbiBVUCwgRE9XTiwgQ09OTkVDVElORywgRElTQ09OTkVDVElORywgYW5kCisgIEVSUk9SIHN0YXRlcy4KKworICBUaGUgZmlyc3QgdGltZSBhbiBhdHRlbXB0IGlzIG1hZGUgYnkgYW4gUkRTIHNvY2tldCB0byBzZW5kIGRhdGEgdG8KKyAgYSBub2RlLCBhIGNvbm5lY3Rpb24gaXMgYWxsb2NhdGVkIGFuZCBjb25uZWN0ZWQuIFRoYXQgY29ubmVjdGlvbiBpcworICB0aGVuIG1haW50YWluZWQgZm9yZXZlciAtLSBpZiB0aGVyZSBhcmUgdHJhbnNwb3J0IGVycm9ycywgdGhlCisgIGNvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkIGFuZCByZS1lc3RhYmxpc2hlZC4KKworICBEcm9wcGluZyBhIGNvbm5lY3Rpb24gd2hpbGUgcGFja2V0cyBhcmUgcXVldWVkIHdpbGwgY2F1c2UgcXVldWVkIG9yCisgIHBhcnRpYWxseS1zZW50IGRhdGFncmFtcyB0byBiZSByZXRyYW5zbWl0dGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMKKyAgcmUtZXN0YWJsaXNoZWQuCisKKworVGhlIHNlbmQgcGF0aAorPT09PT09PT09PT09PQorCisgIHJkc19zZW5kbXNnKCkKKyAgICBzdHJ1Y3QgcmRzX21lc3NhZ2UgYnVpbHQgZnJvbSBpbmNvbWluZyBkYXRhCisgICAgQ01TR3MgcGFyc2VkIChlLmcuIFJETUEgb3BzKQorICAgIHRyYW5zcG9ydCBjb25uZWN0aW9uIGFsbG9jZWQgYW5kIGNvbm5lY3RlZCBpZiBub3QgYWxyZWFkeQorICAgIHJkc19tZXNzYWdlIHBsYWNlZCBvbiBzZW5kIHF1ZXVlCisgICAgc2VuZCB3b3JrZXIgYXdva2VuCisgIHJkc19zZW5kX3dvcmtlcigpCisgICAgY2FsbHMgcmRzX3NlbmRfeG1pdCgpIHVudGlsIHF1ZXVlIGlzIGVtcHR5CisgIHJkc19zZW5kX3htaXQoKQorICAgIHRyYW5zbWl0cyBjb25nZXN0aW9uIG1hcCBpZiBvbmUgaXMgcGVuZGluZworICAgIG1heSBzZXQgQUNLX1JFUVVJUkVECisgICAgY2FsbHMgdHJhbnNwb3J0IHRvIHNlbmQgZWl0aGVyIG5vbi1SRE1BIG9yIFJETUEgbWVzc2FnZQorICAgIChSRE1BIG9wcyBuZXZlciByZXRyYW5zbWl0dGVkKQorICByZHNfaWJfeG1pdCgpCisgICAgYWxsb2NzIHdvcmsgcmVxdWVzdHMgZnJvbSBzZW5kIHJpbmcKKyAgICBhZGRzIGFueSBuZXcgc2VuZCBjcmVkaXRzIGF2YWlsYWJsZSB0byBwZWVyIChoX2NyZWRpdHMpCisgICAgbWFwcyB0aGUgcmRzX21lc3NhZ2UncyBzZyBsaXN0CisgICAgcGlnZ3liYWNrcyBhY2sKKyAgICBwb3B1bGF0ZXMgd29yayByZXF1ZXN0cworICAgIHBvc3Qgc2VuZCB0byBjb25uZWN0aW9uJ3MgcXVldWUgcGFpcgorCitUaGUgcmVjdiBwYXRoCis9PT09PT09PT09PT09CisKKyAgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKCkKKyAgICBsb29rcyBhdCB3cml0ZSBjb21wbGV0aW9ucworICAgIHVubWFwcyByZWN2IGJ1ZmZlciBmcm9tIGRldmljZQorICAgIG5vIGVycm9ycywgY2FsbCByZHNfaWJfcHJvY2Vzc19yZWN2KCkKKyAgICByZWZpbGwgcmVjdiByaW5nCisgIHJkc19pYl9wcm9jZXNzX3JlY3YoKQorICAgIHZhbGlkYXRlIGhlYWRlciBjaGVja3N1bQorICAgIGNvcHkgaGVhZGVyIHRvIHJkc19pYl9pbmNvbWluZyBzdHJ1Y3QgaWYgc3RhcnQgb2YgYSBuZXcgZGF0YWdyYW0KKyAgICBhZGQgdG8gaWJpbmMncyBmcmFnbGlzdAorICAgIGlmIGNvbXBldGVkIGRhdGFncmFtOgorICAgICAgdXBkYXRlIGNvbmcgbWFwIGlmIGRhdGFncmFtIHdhcyBjb25nIHVwZGF0ZQorICAgICAgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpIG90aGVyd2lzZQorICAgICAgbm90ZSBpZiBhY2sgaXMgcmVxdWlyZWQKKyAgcmRzX3JlY3ZfaW5jb21pbmcoKQorICAgIGRyb3AgZHVwbGljYXRlIHBhY2tldHMKKyAgICByZXNwb25kIHRvIHBpbmdzCisgICAgZmluZCB0aGUgc29jayBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRhZ3JhbQorICAgIGFkZCB0byBzb2NrIHF1ZXVlCisgICAgd2FrZSB1cCBzb2NrCisgICAgZG8gc29tZSBjb25nZXN0aW9uIGNhbGN1bGF0aW9ucworICByZHNfcmVjdm1zZworICAgIGNvcHkgZGF0YSBpbnRvIHVzZXIgaW92ZWMKKyAgICBoYW5kbGUgQ01TR3MKKyAgICByZXR1cm4gdG8gYXBwbGljYXRpb24KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCmluZGV4IGFhYmNjM2EuLjNjMDBjOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCkBAIC0yLDggKzIsNiBAQAogCS0gdGhpcyBmaWxlLgogc2NoZWQtYXJjaC50eHQKIAktIENQVSBTY2hlZHVsZXIgaW1wbGVtZW50YXRpb24gaGludHMgZm9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlLgotc2NoZWQtY29kaW5nLnR4dAotCS0gcmVmZXJlbmNlIGZvciB2YXJpb3VzIHNjaGVkdWxlci1yZWxhdGVkIG1ldGhvZHMgaW4gdGhlIE8oMSkgc2NoZWR1bGVyLgogc2NoZWQtZGVzaWduLUNGUy50eHQKIAktIGdvYWxzLCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDb21wbGV0ZSBGYWlyIFNjaGVkdWxlci4KIHNjaGVkLWRvbWFpbnMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtY29kaW5nLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkOGRiNy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSAgICAgUmVmZXJlbmNlIGZvciB2YXJpb3VzIHNjaGVkdWxlci1yZWxhdGVkIG1ldGhvZHMgaW4gdGhlIE8oMSkgc2NoZWR1bGVyCi0JCVJvYmVydCBMb3ZlIDxybWxAdGVjaDkubmV0PiwgTW9udGFWaXN0YSBTb2Z0d2FyZQotCi0KLU5vdGUgbW9zdCBvZiB0aGVzZSBtZXRob2RzIGFyZSBsb2NhbCB0byBrZXJuZWwvc2NoZWQuYyAtIHRoaXMgaXMgYnkgZGVzaWduLgotVGhlIHNjaGVkdWxlciBpcyBtZWFudCB0byBiZSBzZWxmLWNvbnRhaW5lZCBhbmQgYWJzdHJhY3RlZCBhd2F5LiAgVGhpcyBkb2N1bWVudAotaXMgcHJpbWFyaWx5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY2hlZHVsZXIsIG5vdCBpbnRlcmZhY2luZyB0byBpdC4gIFNvbWUgb2YKLXRoZSBkaXNjdXNzZWQgaW50ZXJmYWNlcywgaG93ZXZlciwgYXJlIGdlbmVyYWwgcHJvY2Vzcy9zY2hlZHVsaW5nIG1ldGhvZHMuCi1UaGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmguCi0KLQotTWFpbiBTY2hlZHVsaW5nIE1ldGhvZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgbG9hZF9iYWxhbmNlKHJ1bnF1ZXVlX3QgKnRoaXNfcnEsIGludCBpZGxlKQotCUF0dGVtcHRzIHRvIHB1bGwgdGFza3MgZnJvbSBvbmUgY3B1IHRvIGFub3RoZXIgdG8gYmFsYW5jZSBjcHUgdXNhZ2UsCi0JaWYgbmVlZGVkLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV4cGxpY2l0bHkgaWYgdGhlIHJ1bnF1ZXVlcyBhcmUKLQlpbWJhbGFuY2VkIG9yIHBlcmlvZGljYWxseSBieSB0aGUgdGltZXIgdGljay4gIFByaW9yIHRvIGNhbGxpbmcsCi0JdGhlIGN1cnJlbnQgcnVucXVldWUgbXVzdCBiZSBsb2NrZWQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCi0KLXZvaWQgc2NoZWR1bGUoKQotCVRoZSBtYWluIHNjaGVkdWxpbmcgZnVuY3Rpb24uICBVcG9uIHJldHVybiwgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKLQlwcm9jZXNzIHdpbGwgYmUgYWN0aXZlLgotCi0KLUxvY2tpbmcKLS0tLS0tLS0KLQotRWFjaCBydW5xdWV1ZSBoYXMgaXRzIG93biBsb2NrLCBycS0+bG9jay4gIFdoZW4gbXVsdGlwbGUgcnVucXVldWVzIG5lZWQKLXRvIGJlIGxvY2tlZCwgbG9jayBhY3F1aXJlcyBtdXN0IGJlIG9yZGVyZWQgYnkgYXNjZW5kaW5nICZydW5xdWV1ZSB2YWx1ZS4KLQotQSBzcGVjaWZpYyBydW5xdWV1ZSBpcyBsb2NrZWQgdmlhCi0KLQl0YXNrX3JxX2xvY2sodGFza190IHBpZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCi0KLXdoaWNoIGRpc2FibGVzIHByZWVtcHRpb24sIGRpc2FibGVzIGludGVycnVwdHMsIGFuZCBsb2NrcyB0aGUgcnVucXVldWUgcGlkIGlzCi1ydW5uaW5nIG9uLiAgTGlrZXdpc2UsCi0KLQl0YXNrX3JxX3VubG9jayh0YXNrX3QgcGlkLCB1bnNpZ25lZCBsb25nICpmbGFncykKLQotdW5sb2NrcyB0aGUgcnVucXVldWUgcGlkIGlzIHJ1bm5pbmcgb24sIHJlc3RvcmVzIGludGVycnVwdHMgdG8gdGhlaXIgcHJldmlvdXMKLXN0YXRlLCBhbmQgcmVlbmFibGVzIHByZWVtcHRpb24uCi0KLVRoZSByb3V0aW5lcwotCi0JZG91YmxlX3JxX2xvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCi0KLWFuZAotCi0JZG91YmxlX3JxX3VubG9jayhydW5xdWV1ZV90ICpycTEsIHJ1bnF1ZXVlX3QgKnJxMikKLQotc2FmZWx5IGxvY2sgYW5kIHVubG9jaywgcmVzcGVjdGl2ZWx5LCB0aGUgdHdvIHNwZWNpZmllZCBydW5xdWV1ZXMuICBUaGV5IGRvCi1ub3QsIGhvd2V2ZXIsIGRpc2FibGUgYW5kIHJlc3RvcmUgaW50ZXJydXB0cy4gIFVzZXJzIGFyZSByZXF1aXJlZCB0byBkbyBzbwotbWFudWFsbHkgYmVmb3JlIGFuZCBhZnRlciBjYWxscy4KLQotCi1WYWx1ZXMKLS0tLS0tLQotCi1NQVhfUFJJTwotCVRoZSBtYXhpbXVtIHByaW9yaXR5IG9mIHRoZSBzeXN0ZW0sIHN0b3JlZCBpbiB0aGUgdGFzayBhcyB0YXNrLT5wcmlvLgotCUxvd2VyIHByaW9yaXRpZXMgYXJlIGhpZ2hlci4gIE5vcm1hbCAobm9uLVJUKSBwcmlvcml0aWVzIHJhbmdlIGZyb20KLQlNQVhfUlRfUFJJTyB0byAoTUFYX1BSSU8gLSAxKS4KLU1BWF9SVF9QUklPCi0JVGhlIG1heGltdW0gcmVhbC10aW1lIHByaW9yaXR5IG9mIHRoZSBzeXN0ZW0uICBWYWxpZCBSVCBwcmlvcml0aWVzCi0JcmFuZ2UgZnJvbSAwIHRvIChNQVhfUlRfUFJJTyAtIDEpLgotTUFYX1VTRVJfUlRfUFJJTwotCVRoZSBtYXhpbXVtIHJlYWwtdGltZSBwcmlvcml0eSB0aGF0IGlzIGV4cG9ydGVkIHRvIHVzZXItc3BhY2UuICBTaG91bGQKLQlhbHdheXMgYmUgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIE1BWF9SVF9QUklPLiAgU2V0dGluZyBpdCBsZXNzIGFsbG93cwotCWtlcm5lbCB0aHJlYWRzIHRvIGhhdmUgaGlnaGVyIHByaW9yaXRpZXMgdGhhbiBhbnkgdXNlci1zcGFjZSB0YXNrLgotTUlOX1RJTUVTTElDRQotTUFYX1RJTUVTTElDRQotCVJlc3BlY3RpdmVseSwgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdGltZXNsaWNlcyAocXVhbnRhKSBvZiBhIHByb2Nlc3MuCi0KLURhdGEKLS0tLS0KLQotc3RydWN0IHJ1bnF1ZXVlCi0JVGhlIG1haW4gcGVyLUNQVSBydW5xdWV1ZSBkYXRhIHN0cnVjdHVyZS4KLXN0cnVjdCB0YXNrX3N0cnVjdAotCVRoZSBtYWluIHBlci1wcm9jZXNzIGRhdGEgc3RydWN0dXJlLgotCi0KLUdlbmVyYWwgTWV0aG9kcwotLS0tLS0tLS0tLS0tLS0tCi0KLWNwdV9ycShjcHUpCi0JUmV0dXJucyB0aGUgcnVucXVldWUgb2YgdGhlIHNwZWNpZmllZCBjcHUuCi10aGlzX3JxKCkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSBvZiB0aGUgY3VycmVudCBjcHUuCi10YXNrX3JxKHBpZCkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSB3aGljaCBob2xkcyB0aGUgc3BlY2lmaWVkIHBpZC4KLWNwdV9jdXJyKGNwdSkKLQlSZXR1cm5zIHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBnaXZlbiBjcHUuCi1ydF90YXNrKHBpZCkKLQlSZXR1cm5zIHRydWUgaWYgcGlkIGlzIHJlYWwtdGltZSwgZmFsc2UgaWYgbm90LgotCi0KLVByb2Nlc3MgQ29udHJvbCBNZXRob2RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIHNldF91c2VyX25pY2UodGFza190ICpwLCBsb25nIG5pY2UpCi0JU2V0cyB0aGUgIm5pY2UiIHZhbHVlIG9mIHRhc2sgcCB0byB0aGUgZ2l2ZW4gdmFsdWUuCi1pbnQgc2V0c2NoZWR1bGVyKHBpZF90IHBpZCwgaW50IHBvbGljeSwgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKLQlTZXRzIHRoZSBzY2hlZHVsaW5nIHBvbGljeSBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGdpdmVuIHBpZC4KLWludCBzZXRfY3B1c19hbGxvd2VkKHRhc2tfdCAqcCwgdW5zaWduZWQgbG9uZyBuZXdfbWFzaykKLQlTZXRzIGEgZ2l2ZW4gdGFzaydzIENQVSBhZmZpbml0eSBhbmQgbWlncmF0ZXMgaXQgdG8gYSBwcm9wZXIgY3B1LgotCUNhbGxlcnMgbXVzdCBoYXZlIGEgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIGFuZCBhc3N1cmUgdGhlCi0JdGFzayBub3QgZXhpdCBwcmVtYXR1cmVseS4gIE5vIGxvY2tzIGNhbiBiZSBoZWxkIGR1cmluZyB0aGUgY2FsbC4KLXNldF90YXNrX3N0YXRlKHRzaywgc3RhdGVfdmFsdWUpCi0JU2V0cyB0aGUgZ2l2ZW4gdGFzaydzIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLXNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQotCVNldHMgdGhlIGN1cnJlbnQgdGFzaydzIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLXZvaWQgc2V0X3Rza19uZWVkX3Jlc2NoZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi0JU2V0cyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGdpdmVuIHRhc2suCi12b2lkIGNsZWFyX3Rza19uZWVkX3Jlc2NoZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi0JQ2xlYXJzIG5lZWRfcmVzY2hlZCBpbiB0aGUgZ2l2ZW4gdGFzay4KLXZvaWQgc2V0X25lZWRfcmVzY2hlZCgpCi0JU2V0cyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGN1cnJlbnQgdGFzay4KLXZvaWQgY2xlYXJfbmVlZF9yZXNjaGVkKCkKLQlDbGVhcnMgbmVlZF9yZXNjaGVkIGluIHRoZSBjdXJyZW50IHRhc2suCi1pbnQgbmVlZF9yZXNjaGVkKCkKLQlSZXR1cm5zIHRydWUgaWYgbmVlZF9yZXNjaGVkIGlzIHNldCBpbiB0aGUgY3VycmVudCB0YXNrLCBmYWxzZQotCW90aGVyd2lzZS4KLXlpZWxkKCkKLQlQbGFjZSB0aGUgY3VycmVudCBwcm9jZXNzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnF1ZXVlIGFuZCBjYWxsIHNjaGVkdWxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2N4Z2IzaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvY3hnYjNpLnR4dAppbmRleCA4MTQxZmEwLi43YWM4MDMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvY3hnYjNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvY3hnYjNpLnR4dApAQCAtNCw3ICs0LDcgQEAKID09PT09PT09PT09PQogCiBUaGUgQ2hlbHNpbyBUMyBBU0lDIGJhc2VkIEFkYXB0ZXJzIChTMzEwLCBTMzIwLCBTMzAyLCBTMzA0LCBNZXp6IGNhcmRzLCBldGMuCi1zZXJpZXMgb2YgcHJvZHVjdHMpIHN1cHBvcnRzIGlTQ1NJIGFjY2VsZXJhdGlvbiBhbmQgaVNDU0kgRGlyZWN0IERhdGEgUGxhY2VtZW50CitzZXJpZXMgb2YgcHJvZHVjdHMpIHN1cHBvcnQgaVNDU0kgYWNjZWxlcmF0aW9uIGFuZCBpU0NTSSBEaXJlY3QgRGF0YSBQbGFjZW1lbnQKIChERFApIHdoZXJlIHRoZSBoYXJkd2FyZSBoYW5kbGVzIHRoZSBleHBlbnNpdmUgYnl0ZSB0b3VjaGluZyBvcGVyYXRpb25zLCBzdWNoCiBhcyBDUkMgY29tcHV0YXRpb24gYW5kIHZlcmlmaWNhdGlvbiwgYW5kIGRpcmVjdCBETUEgdG8gdGhlIGZpbmFsIGhvc3QgbWVtb3J5CiBkZXN0aW5hdGlvbjoKQEAgLTMxLDkgKzMxLDkgQEAKIAkgIHRoZSBUQ1Agc2VnbWVudHMgb250byB0aGUgd2lyZS4gSXQgaGFuZGxlcyBUQ1AgcmV0cmFuc21pc3Npb24gaWYKIAkgIG5lZWRlZC4KIAotCSAgT24gcmVjZXZpbmcsIFMzIGgvdyByZWNvdmVycyB0aGUgaVNDU0kgUERVIGJ5IHJlYXNzZW1ibGluZyBUQ1AKKwkgIE9uIHJlY2VpdmluZywgUzMgaC93IHJlY292ZXJzIHRoZSBpU0NTSSBQRFUgYnkgcmVhc3NlbWJsaW5nIFRDUAogCSAgc2VnbWVudHMsIHNlcGFyYXRpbmcgdGhlIGhlYWRlciBhbmQgZGF0YSwgY2FsY3VsYXRpbmcgYW5kIHZlcmlmeWluZwotCSAgdGhlIGRpZ2VzdHMsIHRoZW4gZm9yd2FyZHMgdGhlIGhlYWRlciB0byB0aGUgaG9zdC4gVGhlIHBheWxvYWQgZGF0YSwKKwkgIHRoZSBkaWdlc3RzLCB0aGVuIGZvcndhcmRpbmcgdGhlIGhlYWRlciB0byB0aGUgaG9zdC4gVGhlIHBheWxvYWQgZGF0YSwKIAkgIGlmIHBvc3NpYmxlLCB3aWxsIGJlIGRpcmVjdGx5IHBsYWNlZCBpbnRvIHRoZSBwcmUtcG9zdGVkIGhvc3QgRERQCiAJICBidWZmZXIuIE90aGVyd2lzZSwgdGhlIHBheWxvYWQgZGF0YSB3aWxsIGJlIHNlbnQgdG8gdGhlIGhvc3QgdG9vLgogCkBAIC02OCw5ICs2OCw4IEBACiAJc3VyZSB0aGUgaXAgYWRkcmVzcyBpcyB1bmlxdWUgaW4gdGhlIG5ldHdvcmsuCiAKIDMuIGVkaXQgL2V0Yy9pc2NzaS9pc2NzaWQuY29uZgotICAgVGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgTWF4UmVjdkRhdGFTZWdtZW50TGVuZ3RoICgxMzEwNzIpIGlzIHRvbyBiaWcsCi0gICByZXBsYWNlICJub2RlLmNvbm5bMF0uaXNjc2kuTWF4UmVjdkRhdGFTZWdtZW50TGVuZ3RoIiB0byBiZSBhIHZhbHVlIG5vCi0gICBiaWdnZXIgdGhhbiAxNTM2MCAoZm9yIGV4YW1wbGUgODE5Mik6CisgICBUaGUgZGVmYXVsdCBzZXR0aW5nIGZvciBNYXhSZWN2RGF0YVNlZ21lbnRMZW5ndGggKDEzMTA3MikgaXMgdG9vIGJpZzsKKyAgIHJlcGxhY2Ugd2l0aCBhIHZhbHVlIG5vIGJpZ2dlciB0aGFuIDE1MzYwIChmb3IgZXhhbXBsZSA4MTkyKToKIAogCW5vZGUuY29ublswXS5pc2NzaS5NYXhSZWN2RGF0YVNlZ21lbnRMZW5ndGggPSA4MTkyCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggODQxYTkzNi4uMDEyODU4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTM0Niw2ICszNDYsOSBAQAogICAgIHNiaXJxCS0gSVJRICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKICAgICBzYmRtYTgJLSA4Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCiAgICAgc2JkbWExNgktIDE2Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisgICAgZm1wb3J0CS0gKG9wdGlvbmFsKSBPUEwzIEkvTyBwb3J0CisgICAgbXB1cG9ydAktIChvcHRpb25hbCkgTVBVNDAxIEkvTyBwb3J0CisgICAgbXB1aXJxCS0gKG9wdGlvbmFsKSBNUFU0MDEgaXJxICMKIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzIGFuZCBhdXRvcHJvYmUuCiAKQEAgLTM4OCwzNCArMzkxLDExIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAgICAgCi0gIE1vZHVsZSBzbmQtY3M0MjMyCi0gIC0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzMi9DUzQyMzJBIElTQSBjaGlwcy4KLQotICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCi0KLSAgICB3aXRoIGlzYXBucD0wLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKLQotICAgIHBvcnQJLSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDUzNCkKLSAgICBjcG9ydAktIGNvbnRyb2wgcG9ydCAjIGZvciBDUzQyMzIgY2hpcCAoUG5QIHNldHVwIC0gMHgxMjAsMHgyMTAsMHhmMDApCi0gICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwIC0gMHgzMDApLCAtMSA9IGRpc2FibGUKLSAgICBmbV9wb3J0CS0gRk0gcG9ydCAjIGZvciBDUzQyMzIgY2hpcCAoUG5QIHNldHVwIC0gMHgzODgpLCAtMSA9IGRpc2FibGUKLSAgICBpcnEJCS0gSVJRICMgZm9yIENTNDIzMiBjaGlwICg1LDcsOSwxMSwxMiwxNSkKLSAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoOSwxMSwxMiwxNSkKLSAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIENTNDIzMiBjaGlwICgwLDEsMykKLSAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBZYW1haGEgQ1M0MjMyIGNoaXAgKDAsMSwzKSwgLTEgPSBkaXNhYmxlCi0gICAgCi0gICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCi0gICAgKGlmIElTQSBQblAgaXMgbm90IHVzZWQpIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZQotICAgIG9wdGlvbmFsLgotCi0gICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgotICAgIAogICBNb2R1bGUgc25kLWNzNDIzNgogICAtLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQyMzUvQ1M0MjM2L0NTNDIzNkIvQ1M0MjM3Qi8KKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzMi9DUzQyMzJBLAorICAgIAkgICAgICAgCSAgICAgCSAgIAkgICBDUzQyMzUvQ1M0MjM2L0NTNDIzNkIvQ1M0MjM3Qi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1M0MjM4Qi9DUzQyMzkgSVNBIGNoaXBzLgogCiAgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKQEAgLTQzNyw2ICs0MTcsOSBAQAogCiAgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgogCisgICAgVGhpcyBtb2R1bGUgaXMgYWxpYXNlZCBhcyBzbmQtY3M0MjMyIHNpbmNlIGl0IHByb3ZpZGVzIHRoZSBvbGQKKyAgICBzbmQtY3M0MjMyIGZ1bmN0aW9uYWxpdHksIHRvby4KKwogICBNb2R1bGUgc25kLWNzNDI4MQogICAtLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02MDYsNiArNTg5LDcgQEAKICAgICBNb2R1bGUgZm9yIEVTUyBBdWRpb0RyaXZlIEVTLTE2ODggYW5kIEVTLTY4OCBzb3VuZCBjYXJkcy4KIAogICAgIHBvcnQJLSBwb3J0ICMgZm9yIEVTLTE2ODggY2hpcCAoMHgyMjAsMHgyNDAsMHgyNjApCisgICAgZm1fcG9ydAktIHBvcnQgIyBmb3IgT1BMMyAob3B0aW9uOyBzaGFyZSB0aGUgc2FtZSBwb3J0IGFzIGRlZmF1bHQpCiAgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgcG9ydCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApLCAtMSA9IGRpc2FibGUgKGRlZmF1bHQpCiAgICAgaXJxCQktIElSUSAjIGZvciBFUy0xNjg4IGNoaXAgKDUsNyw5LDEwKQogICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBwb3J0ICg1LDcsOSwxMCkKQEAgLTc1Nyw2ICs3NDEsOSBAQAogICAgIG1vZGVsCS0gZm9yY2UgdGhlIG1vZGVsIG5hbWUKICAgICBwb3NpdGlvbl9maXggLSBGaXggRE1BIHBvaW50ZXIgKDAgPSBhdXRvLCAxID0gdXNlIExQSUIsIDIgPSBQT1NCVUYpCiAgICAgcHJvYmVfbWFzayAgLSBCaXRtYXNrIHRvIHByb2JlIGNvZGVjcyAoZGVmYXVsdCA9IC0xLCBtZWFuaW5nIGFsbCBzbG90cykKKyAgICAJCSAgV2hlbiB0aGUgYml0IDggKDB4MTAwKSBpcyBzZXQsIHRoZSBsb3dlciA4IGJpdHMgYXJlIHVzZWQKKwkJICBhcyB0aGUgImZpeGVkIiBjb2RlYyBzbG90czsgaS5lLiB0aGUgZHJpdmVyIHByb2JlcyB0aGUKKwkJICBzbG90cyByZWdhcmRsZXNzIHdoYXQgaGFyZHdhcmUgcmVwb3J0cyBiYWNrCiAgICAgcHJvYmVfb25seQktIE9ubHkgcHJvYmluZyBhbmQgbm8gY29kZWMgaW5pdGlhbGl6YXRpb24gKGRlZmF1bHQ9b2ZmKTsKIAkJICBVc2VmdWwgdG8gY2hlY2sgdGhlIGluaXRpYWwgY29kZWMgc3RhdHVzIGZvciBkZWJ1Z2dpbmcKICAgICBiZGxfcG9zX2FkagktIFNwZWNpZmllcyB0aGUgRE1BIElSUSB0aW1pbmcgZGVsYXkgaW4gc2FtcGxlcy4KQEAgLTExODUsNiArMTE3Miw1NCBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcyBhbmQgUG5QLgogICAgIAorICBNb2R1bGUgc25kLW1zbmQtY2xhc3NpYworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGkgb3IgTW9udGVyZXkKKyAgICBzb3VuZGNhcmRzLgorCisgICAgaW8JCS0gUG9ydCAjIGZvciBtc25kLWNsYXNzaWMgY2FyZAorICAgIGlycQkJLSBJUlEgIyBmb3IgbXNuZC1jbGFzc2ljIGNhcmQKKyAgICBtZW0JCS0gTWVtb3J5IGFkZHJlc3MgKDB4YjAwMDAsIDB4YzgwMDAsIDB4ZDAwMDAsIDB4ZDgwMDAsCisJCSAgMHhlMDAwMCBvciAweGU4MDAwKQorICAgIHdyaXRlX25kZWxheSAtIGVuYWJsZSB3cml0ZSBuZGVsYXkgKGRlZmF1bHQgPSAxKQorICAgIGNhbGlicmF0ZV9zaWduYWwgLSBjYWxpYnJhdGUgc2lnbmFsIChkZWZhdWx0ID0gMCkKKyAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIGRpZ2l0YWwJLSBEaWdpdGFsIGRhdWdodGVyYm9hcmQgcHJlc2VudCAoZGVmYXVsdCA9IDApCisgICAgY2ZnCQktIENvbmZpZyBwb3J0ICgweDI1MCwgMHgyNjAgb3IgMHgyNzApIGRlZmF1bHQgPSBQblAKKyAgICByZXNldAktIFJlc2V0IGFsbCBkZXZpY2VzCisgICAgbXB1X2lvCS0gTVBVNDAxIEkvTyBwb3J0CisgICAgbXB1X2lycQktIE1QVTQwMSBpcnEjCisgICAgaWRlX2lvMAktIElERSBwb3J0ICMwCisgICAgaWRlX2lvMQktIElERSBwb3J0ICMxCisgICAgaWRlX2lycQktIElERSBpcnEjCisgICAgam95c3RpY2tfaW8JLSBKb3lzdGljayBJL08gcG9ydAorCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBmaWxlcyAidHVydGxlYmVhY2gvbXNuZGluaXQuYmluIiBhbmQKKyAgICAidHVydGxlYmVhY2gvbXNuZHBlcm0uYmluIiBpbiB0aGUgcHJvcGVyIGZpcm13YXJlIGRpcmVjdG9yeS4KKworICAgIFNlZSBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24KKyAgICBhYm91dCB0aGlzIGRyaXZlci4gIE5vdGUgdGhhdCBpdCBoYXMgYmVlbiBkaXNjb250aW51ZWQsIGJ1dCB0aGUgCisgICAgVm95ZXRyYSBUdXJ0bGUgQmVhY2gga25vd2xlZGdlIGJhc2UgZW50cnkgZm9yIGl0IGlzIHN0aWxsIGF2YWlsYWJsZQorICAgIGF0CisJaHR0cDovL3d3dy50dXJ0bGViZWFjaC5jb20vc2l0ZS9rYl9mdHAvNzkwLmFzcAorCisgIE1vZHVsZSBzbmQtbXNuZC1waW5uYWNsZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvRmlqaSBzb3VuZGNhcmRzLgorCisgICAgaW8JCS0gUG9ydCAjIGZvciBwaW5uYWNsZS9maWppIGNhcmQKKyAgICBpcnEJCS0gSVJRICMgZm9yIHBpbm5hbGNlL2ZpamkgY2FyZAorICAgIG1lbQkJLSBNZW1vcnkgYWRkcmVzcyAoMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwKKwkJICAweGUwMDAwIG9yIDB4ZTgwMDApCisgICAgd3JpdGVfbmRlbGF5IC0gZW5hYmxlIHdyaXRlIG5kZWxheSAoZGVmYXVsdCA9IDEpCisgICAgY2FsaWJyYXRlX3NpZ25hbCAtIGNhbGlicmF0ZSBzaWduYWwgKGRlZmF1bHQgPSAwKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGZpbGVzICJ0dXJ0bGViZWFjaC9wbmRzcGluaS5iaW4iIGFuZAorICAgICJ0dXJ0bGViZWFjaC9wbmRzcGVybS5iaW4iIGluIHRoZSBwcm9wZXIgZmlybXdhcmUgZGlyZWN0b3J5LgorCiAgIE1vZHVsZSBzbmQtbXRwYXYKICAgLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xODI0LDcgKzE4NTksNyBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZSBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLAotICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCBhbmQgSERBVjEuMyAoRGVsdXhlKS4KKyAgICBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIEhEQVYxLjMgKERlbHV4ZSksIGFuZCBFc3NlbmNlIFNUWC4KIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgY2FyZHMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKaW5kZXggMGY1ZDI2Yi4uOGVlYzA1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKQEAgLTU2LDYgKzU2LDcgQEAKICAgc29ueS1hc3NhbWQJU29ueSBBU1NBTUQKICAgdG9zaGliYS1zMDYJVG9zaGliYSBTMDYKICAgdG9zaGliYS1yeDEJVG9zaGliYSBSWDEKKyAgdHlhbgkJVHlhbiBUaHVuZGVyIG42NjUwVyAoUzI5MTUtRSkKICAgdWx0cmEJCVNhbXN1bmcgUTEgVWx0cmEgVmlzdGEgbW9kZWwKICAgbGVub3ZvLTMwMDAJTGVub3ZvIDMwMDAgeTQxMAogICBuZWMJCU5FQyBWZXJzYSBTOTEwMApAQCAtMjYxLDYgKzI2Miw4IEBACiA9PT09PT09PT09PT09CiAgIGxhcHRvcAlCYXNpYyBMYXB0b3AgY29uZmlnIChkZWZhdWx0KQogICBocAkJSFAgU3BhcnRhbiBsYXB0b3AKKyAgaHAtZHY2NzM2CUhQIGR2NjczNgorICBsZW5vdm8teDIwMAlMZW5vdm8gWDIwMCBsYXB0b3AKIAogU1RBQzkyMDAKID09PT09PT09CkBAIC0yNzgsNiArMjgxLDcgQEAKICAgZ2F0ZXdheS1tNAlHYXRld2F5IGxhcHRvcHMgd2l0aCBFQVBEIGNvbnRyb2wKICAgZ2F0ZXdheS1tNC0yCUdhdGV3YXkgbGFwdG9wcyB3aXRoIEVBUEQgY29udHJvbAogICBwYW5hc29uaWMJUGFuYXNvbmljIENGLTc0CisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjA1LzkyNTQKID09PT09PT09PT09PT0KQEAgLTI4NSw2ICsyODksOCBAQAogICBkZWxsLW00MglEZWxsICh1bmtub3duKQogICBkZWxsLW00MwlEZWxsIFByZWNpc2lvbgogICBkZWxsLW00NAlEZWxsIEluc3Bpcm9uCisgIGVhcGQJCUtlZXAgRUFQRCBvbiAoZS5nLiBHYXRld2F5IFQxNjE2KQorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIyMC85MjIxCiA9PT09PT09PT09PT09CkBAIC0zMDgsNiArMzE0LDcgQEAKICAgZGVsbC1kODIJRGVsbCAodW5rbm93bikKICAgZGVsbC1tODEJRGVsbCAodW5rbm93bikKICAgZGVsbC1tODIJRGVsbCBYUFMgTTEyMTAKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMDIvOTI1MC85MjUxCiA9PT09PT09PT09PT09PT09PT0KQEAgLTMxOSw2ICszMjYsNyBAQAogICBtMwkJU29tZSBHYXRld2F5IE1YIHNlcmllcyBsYXB0b3BzCiAgIG01CQlTb21lIEdhdGV3YXkgTVggc2VyaWVzIGxhcHRvcHMgKE1QNjk1NCkKICAgbTYJCVNvbWUgR2F0ZXdheSBOWCBzZXJpZXMgbGFwdG9wcworICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIyNy85MjI4LzkyMjkvOTI3eAogPT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMyOCw2ICszMzYsNyBAQAogICA1c3RhY2sJRDk2NSA1c3RhY2sgKyBTUERJRgogICBkZWxsLTNzdGFjawlEZWxsIERpbWVuc2lvbiBFNTIwCiAgIGRlbGwtYmlvcwlGaXhlcyB3aXRoIERlbGwgQklPUyBzZXR1cAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDcxQioKID09PT09PT09PT09PQpAQCAtMzM1LDcgKzM0NCwxMCBAQAogICBkZWxsLW00LTEJRGVsbCBkZXNrdG9wcwogICBkZWxsLW00LTIJRGVsbCBkZXNrdG9wcwogICBkZWxsLW00LTMJRGVsbCBkZXNrdG9wcwotICBocC1tNAkJSFAgZHYgbGFwdG9wcworICBocC1tNAkJSFAgbWluaSAxMDAwCisgIGhwLWR2NQlIUCBkdiBzZXJpZXMKKyAgaHAtaGR4CUhQIEhEWCBzZXJpZXMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ3MyoKID09PT09PT09PT09CkBAIC0zNDUsMTMgKzM1NywxNiBAQAogICBkZWxsLW02LWRtaWMJRGVsbCBkZXNrdG9wcy9sYXB0b3BzIHdpdGggZGlnaXRhbCBtaWNzCiAgIGRlbGwtbTYJRGVsbCBkZXNrdG9wcy9sYXB0b3BzIHdpdGggYm90aCB0eXBlIG9mIG1pY3MKICAgZGVsbC1lcQlEZWxsIGRlc2t0b3BzL2xhcHRvcHMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ4MyoKID09PT09PT09PT09CiAgIHJlZgkJUmVmZXJlbmNlIGJvYXJkCiAgIG1pYy1yZWYJUmVmZXJlbmNlIGJvYXJkIHdpdGggcG93ZXIgbWFuYWdtZW50IGZvciBwb3J0cworICBkZWxsLXMxNAlEZWxsIGxhcHRvcAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTg3MgogPT09PT09PT0KLSAgdmFpbwkJU2V0dXAgZm9yIFZBSU8gRkU1NTBHL1NaMTEwCi0gIHZhaW8tYXIgU2V0dXAgZm9yIFZBSU8gQVIKKyAgdmFpbwkJVkFJTyBsYXB0b3Agd2l0aG91dCBTUERJRgorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKaW5kZXggOGQ2OGZmZi4uYzU5NDhmMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CkBAIC0xMDksNiArMTA5LDEzIEBACiBTaW5jZSAyLjYuMjkga2VybmVsLCB0aGUgZHJpdmVyIGhhcyBhIG1vcmUgcm9idXN0IHByb2JpbmcgbWV0aG9kLCBzbwogdGhpcyBlcnJvciBtaWdodCBoYXBwZW4gcmFyZWx5LCB0aG91Z2guCiAKK09uIGEgbWFjaGluZSB3aXRoIGEgYnJva2VuIEJJT1MsIHNvbWV0aW1lcyB5b3UgbmVlZCB0byBmb3JjZSB0aGUKK2RyaXZlciB0byBwcm9iZSB0aGUgY29kZWMgc2xvdHMgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgcmVwb3J0IGZvciB1c2UuCitJbiBzdWNoIGEgY2FzZSwgdHVybiB0aGUgYml0IDggKDB4MTAwKSBvZiBgcHJvYmVfbWFza2Agb3B0aW9uIG9uLgorVGhlbiB0aGUgcmVzdCA4IGJpdHMgYXJlIHBhc3NlZCBhcyB0aGUgY29kZWMgc2xvdHMgdG8gcHJvYmUKK3VuY29uZGl0aW9uYWxseS4gIEZvciBleGFtcGxlLCBgcHJvYmVfbWFzaz0weDEwM2Agd2lsbCBmb3JjZSB0byBwcm9iZQordGhlIGNvZGVjIHNsb3RzIDAgYW5kIDEgbm8gbWF0dGVyIHdoYXQgdGhlIGhhcmR3YXJlIHJlcG9ydHMuCisKIAogSW50ZXJydXB0IEhhbmRsaW5nCiB+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTM1OCwxMCArMzY1LDI2IEBACiAgIHRvIHRoaXMgZmlsZS4KIGluaXRfdmVyYnM6OgogICBUaGUgZXh0cmEgdmVyYnMgdG8gZXhlY3V0ZSBhdCBpbml0aWFsaXphdGlvbi4gIFlvdSBjYW4gYWRkIGEgdmVyYiBieQotICB3cml0aW5nIHRvIHRoaXMgZmlsZS4gIFBhc3MgdHJlZSBudW1iZXJzLCBuaWQsIHZlcmIgYW5kIHBhcmFtZXRlci4KKyAgd3JpdGluZyB0byB0aGlzIGZpbGUuICBQYXNzIHRocmVlIG51bWJlcnM6IG5pZCwgdmVyYiBhbmQgcGFyYW1ldGVyCisgIChzZXBhcmF0ZWQgd2l0aCBhIHNwYWNlKS4KIGhpbnRzOjoKLSAgU2hvd3MgaGludCBzdHJpbmdzIGZvciBjb2RlYyBwYXJzZXJzIGZvciBhbnkgdXNlLiAgUmlnaHQgbm93IGl0J3MKLSAgbm90IHVzZWQuCisgIFNob3dzIC8gc3RvcmVzIGhpbnQgc3RyaW5ncyBmb3IgY29kZWMgcGFyc2VycyBmb3IgYW55IHVzZS4KKyAgSXRzIGZvcm1hdCBpcyBga2V5ID0gdmFsdWVgLiAgRm9yIGV4YW1wbGUsIHBhc3NpbmcgYGhwX2RldGVjdCA9IHllc2AKKyAgdG8gSURUL1NUQUMgY29kZWMgcGFyc2VyIHdpbGwgcmVzdWx0IGluIHRoZSBkaXNhYmxlbWVudCBvZiB0aGUKKyAgaGVhZHBob25lIGRldGVjdGlvbi4KK2luaXRfcGluX2NvbmZpZ3M6OgorICBTaG93cyB0aGUgaW5pdGlhbCBwaW4gZGVmYXVsdCBjb25maWcgdmFsdWVzIHNldCBieSBCSU9TLgorZHJpdmVyX3Bpbl9jb25maWdzOjoKKyAgU2hvd3MgdGhlIHBpbiBkZWZhdWx0IHZhbHVlcyBzZXQgYnkgdGhlIGNvZGVjIHBhcnNlciBleHBsaWNpdGx5LgorICBUaGlzIGRvZXNuJ3Qgc2hvdyBhbGwgcGluIHZhbHVlcyBidXQgb25seSB0aGUgY2hhbmdlZCB2YWx1ZXMgYnkKKyAgdGhlIHBhcnNlci4gIFRoYXQgaXMsIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBjaGFuZ2UgdGhlIHBpbiBkZWZhdWx0CisgIGNvbmZpZyB2YWx1ZXMgYnkgaXRzZWxmLCB0aGlzIHdpbGwgY29udGFpbiBub3RoaW5nLgordXNlcl9waW5fY29uZmlnczo6CisgIFNob3dzIHRoZSBwaW4gZGVmYXVsdCBjb25maWcgdmFsdWVzIHRvIG92ZXJyaWRlIHRoZSBCSU9TIHNldHVwLgorICBXcml0aW5nIHRoaXMgKHdpdGggdHdvIG51bWJlcnMsIE5JRCBhbmQgdmFsdWUpIGFwcGVuZHMgdGhlIG5ldworICB2YWx1ZS4gIFRoZSBnaXZlbiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW5pdGlhbCBCSU9TIHZhbHVlIGF0CisgIHRoZSBuZXh0IHJlY29uZmlndXJhdGlvbiB0aW1lLiAgTm90ZSB0aGF0IHRoaXMgY29uZmlnIHdpbGwgb3ZlcnJpZGUKKyAgZXZlbiB0aGUgZHJpdmVyIHBpbiBjb25maWdzLCB0b28uCiByZWNvbmZpZzo6CiAgIFRyaWdnZXJzIHRoZSBjb2RlYyByZS1jb25maWd1cmF0aW9uLiAgV2hlbiBhbnkgdmFsdWUgaXMgd3JpdHRlbiB0bwogICB0aGlzIGZpbGUsIHRoZSBkcml2ZXIgcmUtaW5pdGlhbGl6ZSBhbmQgcGFyc2VzIHRoZSBjb2RlYyB0cmVlCkBAIC0zNzEsNiArMzk0LDE0IEBACiAgIFJlc2V0cyB0aGUgY29kZWMsIHJlbW92ZXMgdGhlIG1peGVyIGVsZW1lbnRzIGFuZCBQQ00gc3R1ZmYgb2YgdGhlCiAgIHNwZWNpZmllZCBjb2RlYywgYW5kIGNsZWFyIGFsbCBpbml0IHZlcmJzIGFuZCBoaW50cy4KIAorRm9yIGV4YW1wbGUsIHdoZW4geW91IHdhbnQgdG8gY2hhbmdlIHRoZSBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uCit2YWx1ZSBvZiB0aGUgcGluIHdpZGdldCAweDE0IHRvIDB4OTk5MzAxM2YsIGFuZCBsZXQgdGhlIGRyaXZlcgorcmUtY29uZmlndXJlIGJhc2VkIG9uIHRoYXQgc3RhdGUsIHJ1biBsaWtlIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICMgZWNobyAweDE0IDB4OTk5MzAxM2YgPiAvc3lzL2NsYXNzL3NvdW5kL2h3QzBEMC91c2VyX3Bpbl9jb25maWdzCisgICMgZWNobyAxID4gL3N5cy9jbGFzcy9zb3VuZC9od0MwRDAvcmVjb25maWcgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIAogUG93ZXItU2F2aW5nCiB+fn5+fn5+fn5+fn4KQEAgLTQ2MSw2ICs0OTIsMTYgQEAKIFRoZXJlIGFyZSBzb21lIG90aGVyIHVzZWZ1bCBvcHRpb25zLiAgU2VlIGAtLWhlbHBgIG9wdGlvbiBvdXRwdXQgZm9yCiBkZXRhaWxzLgogCitXaGVuIGEgcHJvYmUgZXJyb3Igb2NjdXJzIG9yIHdoZW4gdGhlIGRyaXZlciBvYnZpb3VzbHkgYXNzaWducyBhCittaXNtYXRjaGVkIG1vZGVsLCBpdCdkIGJlIGhlbHBmdWwgdG8gbG9hZCB0aGUgZHJpdmVyIHdpdGgKK2Bwcm9iZV9vbmx5PTFgIG9wdGlvbiAoYXQgYmVzdCBhZnRlciB0aGUgY29sZCByZWJvb3QpIGFuZCBydW4KK2Fsc2EtaW5mbyBhdCB0aGlzIHN0YXRlLiAgV2l0aCB0aGlzIG9wdGlvbiwgdGhlIGRyaXZlciB3b24ndCBjb25maWd1cmUKK3RoZSBtaXhlciBhbmQgUENNIGJ1dCBqdXN0IHRyaWVzIHRvIHByb2JlIHRoZSBjb2RlYyBzbG90LiAgQWZ0ZXIKK3Byb2JpbmcsIHRoZSBwcm9jIGZpbGUgaXMgYXZhaWxhYmxlLCBzbyB5b3UgY2FuIGdldCB0aGUgcmF3IGNvZGVjCitpbmZvcm1hdGlvbiBiZWZvcmUgbW9kaWZpZWQgYnkgdGhlIGRyaXZlci4gIE9mIGNvdXJzZSwgdGhlIGRyaXZlcgoraXNuJ3QgdXNhYmxlIHdpdGggYHByb2JlX29ubHk9MWAuICBCdXQgeW91IGNhbiBjb250aW51ZSB0aGUKK2NvbmZpZ3VyYXRpb24gdmlhIGh3ZGVwIHN5c2ZzIGZpbGUgaWYgaGRhLXJlY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLgorCiAKIGhkYS12ZXJiCiB+fn5+fn5+fgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKaW5kZXggNDZmOTY4NC4uOWU2NzYzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CkBAIC0xMTYsNiArMTE2LDkgQEAKIFNORF9TT0NfREFQTV9NSVhFUigiT3V0cHV0IE1peGVyIiwgV004NzMxX1BXUiwgNCwgMSwgd204NzMxX291dHB1dF9taXhlcl9jb250cm9scywKIAlBUlJBWV9TSVpFKHdtODczMV9vdXRwdXRfbWl4ZXJfY29udHJvbHMpKSwKIAorSWYgeW91IGRvbnQgd2FudCB0aGUgbWl4ZXIgZWxlbWVudHMgcHJlZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbWl4ZXIgd2lkZ2V0LAoreW91IGNhbiB1c2UgU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTCBpbnN0ZWFkLiB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUKK2FzIGZvciBTTkRfU09DX0RBUE1fTUlYRVIuCiAKIDIuMyBQbGF0Zm9ybS9NYWNoaW5lIGRvbWFpbiBXaWRnZXRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDZhZjdhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVRvIGNvbmZpZ3VyZSB0aGUgQ3J5c3RhbCBDUzQyM3ggc291bmQgY2hpcCBhbmQgYWN0aXZhdGUgaXRzIERTUCBmdW5jdGlvbnMsCi1tb2R1bGVzIG1heSBiZSBsb2FkZWQgaW4gdGhpcyBvcmRlcjoKLSAgCi0JbW9kcHJvYmUgc291bmQKLQlpbnNtb2QgYWQxODQ4Ci0JaW5zbW9kIHVhcnQ0MDEKLQlpbnNtb2QgY3M0MjMyIGlvPSogaXJxPSogZG1hPSogZG1hMj0qCi0gIAotVGhpcyBpcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFyYW1ldGVyczoKLSAgCi0JaW8tLUkvTyBhZGRyZXNzIG9mIHRoZSBXaW5kb3dzIFNvdW5kIFN5c3RlbSAobm9ybWFsbHkgMHg1MzQpCi0JaXJxLS1JUlEgb2YgdGhpcyBkZXZpY2UKLQlkbWEgYW5kIGRtYTItLURNQSBjaGFubmVscyAoRE1BMiBtYXkgYmUgMCkKLSAgCi1PbiBzb21lIGNhcmRzLCB0aGUgYm9hcmQgYXR0ZW1wdHMgdG8gZG8gbm9uLVBuUCBzZXR1cCwgYW5kIGZhaWxzLiAgSWYgeW91Ci1oYXZlIHByb2JsZW1zLCB1c2UgTGludXgnIFBuUCBmYWNpbGl0aWVzLiAKLSAgCi1UbyBnZXQgTUlESSBmYWNpbGl0aWVzIGFkZAotICAKLQlpbnNtb2Qgb3BsMyBpbz0qCi0gIAotd2hlcmUgImlvIiBpcyB0aGUgSS9PIGFkZHJlc3Mgb2YgdGhlIE9QTDMgc3ludGhlc2l6ZXIuIFRoaXMgd2lsbCBiZSBzaG93bgotaW4gL3Byb2Mvc3lzL3BucCBhbmQgaXMgbm9ybWFsbHkgMHgzODguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KaW5kZXggZjA0YmE2Yi4uNzVkOTY3ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgpAQCAtODAsNyArODAsNyBAQAogICAgIGFkZGl0aW9uYWwgZmVhdHVyZXMuCiAKIDIuICBUaGUgY29tbWVyY2lhbCBPU1MgZHJpdmVyIG1heSBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzaXRlOgotICAgIGh0dHA6Ly93d3cvb3BlbnNvdW5kLmNvbS4gIFRoaXMgbWF5IGJlIHVzZWQgZm9yIGNhcmRzIHRoYXQKKyAgICBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20uICBUaGlzIG1heSBiZSB1c2VkIGZvciBjYXJkcyB0aGF0CiAgICAgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLCBvciBtYXkgYmUgdXNlZAogICAgIGJ5IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLiAgCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Vycy9tbWlvdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQKaW5kZXggY2RlMjNiNC4uNTczMWM2NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQKQEAgLTc4LDEyICs3OCwxMCBAQAogZXZlbnRzIHdlcmUgbG9zdCwgdGhlIHRyYWNlIGlzIGluY29tcGxldGUuIFlvdSBzaG91bGQgZW5sYXJnZSB0aGUgYnVmZmVycyBhbmQKIHRyeSBhZ2Fpbi4gQnVmZmVycyBhcmUgZW5sYXJnZWQgYnkgZmlyc3Qgc2VlaW5nIGhvdyBsYXJnZSB0aGUgY3VycmVudCBidWZmZXJzCiBhcmU6Ci0kIGNhdCAvZGVidWcvdHJhY2luZy90cmFjZV9lbnRyaWVzCiskIGNhdCAvZGVidWcvdHJhY2luZy9idWZmZXJfc2l6ZV9rYgogZ2l2ZXMgeW91IGEgbnVtYmVyLiBBcHByb3hpbWF0ZWx5IGRvdWJsZSB0aGlzIG51bWJlciBhbmQgd3JpdGUgaXQgYmFjaywgZm9yCiBpbnN0YW5jZToKLSQgZWNobyAwID4gL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkCi0kIGVjaG8gMTI4MDAwID4gL2RlYnVnL3RyYWNpbmcvdHJhY2VfZW50cmllcwotJCBlY2hvIDEgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQKKyQgZWNobyAxMjgwMDAgPiAvZGVidWcvdHJhY2luZy9idWZmZXJfc2l6ZV9rYgogVGhlbiBzdGFydCBhZ2FpbiBmcm9tIHRoZSB0b3AuCiAKIElmIHlvdSBhcmUgZG9pbmcgYSB0cmFjZSBmb3IgYSBkcml2ZXIgcHJvamVjdCwgZS5nLiBOb3V2ZWF1LCB5b3Ugc2hvdWxkIGFsc28KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CmluZGV4IDI3MDQ4MTkuLjZjM2M2MjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dApAQCAtMjI5LDE2ICsyMjksMjYgQEAKIAlpbnQgc3RhdHVzOwkJLyogMjg6ICovCiAJdW5zaWduZWQgaW50IGxlbmd0aDsJLyogMzI6IExlbmd0aCBvZiBkYXRhIChzdWJtaXR0ZWQgb3IgYWN0dWFsKSAqLwogCXVuc2lnbmVkIGludCBsZW5fY2FwOwkvKiAzNjogRGVsaXZlcmVkIGxlbmd0aCAqLwotCXVuc2lnbmVkIGNoYXIgc2V0dXBbOF07CS8qIDQwOiBPbmx5IGZvciBDb250cm9sICdTJyAqLwotfTsJCQkJLyogNDggYnl0ZXMgdG90YWwgKi8KKwl1bmlvbiB7CQkJLyogNDA6ICovCisJCXVuc2lnbmVkIGNoYXIgc2V0dXBbU0VUVVBfTEVOXTsJLyogT25seSBmb3IgQ29udHJvbCBTLXR5cGUgKi8KKwkJc3RydWN0IGlzb19yZWMgewkJLyogT25seSBmb3IgSVNPICovCisJCQlpbnQgZXJyb3JfY291bnQ7CisJCQlpbnQgbnVtZGVzYzsKKwkJfSBpc287CisJfSBzOworCWludCBpbnRlcnZhbDsJCS8qIDQ4OiBPbmx5IGZvciBJbnRlcnJ1cHQgYW5kIElTTyAqLworCWludCBzdGFydF9mcmFtZTsJLyogNTI6IEZvciBJU08gKi8KKwl1bnNpZ25lZCBpbnQgeGZlcl9mbGFnczsgLyogNTY6IGNvcHkgb2YgVVJCJ3MgdHJhbnNmZXJfZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgbmRlc2M7CS8qIDYwOiBBY3R1YWwgbnVtYmVyIG9mIElTTyBkZXNjcmlwdG9ycyAqLworfTsJCQkJLyogNjQgdG90YWwgbGVuZ3RoICovCiAKIFRoZXNlIGV2ZW50cyBjYW4gYmUgcmVjZWl2ZWQgZnJvbSBhIGNoYXJhY3RlciBkZXZpY2UgYnkgcmVhZGluZyB3aXRoIHJlYWQoMiksCi13aXRoIGFuIGlvY3RsKDIpLCBvciBieSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciB3aXRoIG1tYXAuCit3aXRoIGFuIGlvY3RsKDIpLCBvciBieSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciB3aXRoIG1tYXAuIEhvd2V2ZXIsIHJlYWQoMikKK29ubHkgcmV0dXJucyBmaXJzdCA0OCBieXRlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgogCiBUaGUgY2hhcmFjdGVyIGRldmljZSBpcyB1c3VhbGx5IGNhbGxlZCAvZGV2L3VzYm1vbk4sIHdoZXJlIE4gaXMgdGhlIFVTQiBidXMKIG51bWJlci4gTnVtYmVyIHplcm8gKC9kZXYvdXNibW9uMCkgaXMgc3BlY2lhbCBhbmQgbWVhbnMgImFsbCBidXNlcyIuCi1Ib3dldmVyLCB0aGlzIGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIHlldC4gTm90ZSB0aGF0IHNwZWNpZmljIG5hbWluZwotcG9saWN5IGlzIHNldCBieSB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KK05vdGUgdGhhdCBzcGVjaWZpYyBuYW1pbmcgcG9saWN5IGlzIHNldCBieSB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KIAogSWYgeW91IGNyZWF0ZSAvZGV2L3VzYm1vbjAgYnkgaGFuZCwgbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3duZWQgYnkgcm9vdAogYW5kIGhhcyBtb2RlIDA2MDAuIE90aGVyd2lzZSwgdW5wcml2aWxlZGdlZCB1c2VycyB3aWxsIGJlIGFibGUgdG8gc25vb3AKQEAgLTI3OSw5ICsyODksMTAgQEAKIFRoaXMgY2FsbCByZXR1cm5zIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KIAogIE1PTl9JT0NYX0dFVCwgZGVmaW5lZCBhcyBfSU9XKE1PTl9JT0NfTUFHSUMsIDYsIHN0cnVjdCBtb25fZ2V0X2FyZykKKyBNT05fSU9DWF9HRVRYLCBkZWZpbmVkIGFzIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fZ2V0X2FyZykKIAotVGhpcyBjYWxsIHdhaXRzIGZvciBldmVudHMgdG8gYXJyaXZlIGlmIG5vbmUgd2VyZSBpbiB0aGUga2VybmVsIGJ1ZmZlciwKLXRoZW4gcmV0dXJucyB0aGUgZmlyc3QgZXZlbnQuIEl0cyBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZvbGxvd2luZworVGhlc2UgY2FsbHMgd2FpdCBmb3IgZXZlbnRzIHRvIGFycml2ZSBpZiBub25lIHdlcmUgaW4gdGhlIGtlcm5lbCBidWZmZXIsCit0aGVuIHJldHVybiB0aGUgZmlyc3QgZXZlbnQuIFRoZSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZvbGxvd2luZwogc3RydWN0dXJlOgogCiBzdHJ1Y3QgbW9uX2dldF9hcmcgewpAQCAtMjk0LDYgKzMwNSw4IEBACiBwb2ludGVkIGJ5IGhkciBjb250YWlucyB0aGUgbmV4dCBldmVudCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGF0YSBidWZmZXIgY29udGFpbnMKIHRoZSBkYXRhLCBpZiBhbnkuIFRoZSBldmVudCBpcyByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCBidWZmZXIuCiAKK1RoZSBNT05fSU9DWF9HRVQgY29waWVzIDQ4IGJ5dGVzLCBNT05fSU9DWF9HRVRYIGNvcGllcyA2NCBieXRlcy4KKwogIE1PTl9JT0NYX01GRVRDSCwgZGVmaW5lZCBhcyBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX21mZXRjaF9hcmcpCiAKIFRoaXMgaW9jdGwgaXMgcHJpbWFyaWx5IHVzZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gYWNjZXNzZXMgdGhlIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBkYjY1YjRlLi5mYTdiZTA0IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjkyLDYgKzY5MiwxMyBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCitBUk0vTlVWT1RPTiBXOTBYOTAwIEFSTSBBUkNISVRFQ1RVUkUKK1A6ICAgICAgV2FuIFpvbmdTaHVuCitNOiAgICAgIG1jdW9zLmNvbUBnbWFpbC5jb20KK0w6ICAgICAgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorVzogICAgICBodHRwOi8vd3d3Lm1jdW9zLmNvbQorUzogICAgICBNYWludGFpbmVkCisKIEFSUEQgU1VQUE9SVAogUDoJSm9uYXRoYW4gTGF5ZXMKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTEwMDQsNiArMTAxMSw4IEBACiBTOglTdXBwb3J0ZWQKIAogQlJPQURDT00gVEczIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCitQOglNYXR0IENhcmxzb24KK006CW1jYXJsc29uQGJyb2FkY29tLmNvbQogUDoJTWljaGFlbCBDaGFuCiBNOgltY2hhbkBicm9hZGNvbS5jb20KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTEyNjIsNiArMTI3MSwxMiBAQAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9oZXJiZXJ0L2NyeXB0by0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiAKK0NSWVBUT0dSQVBISUMgUkFORE9NIE5VTUJFUiBHRU5FUkFUT1IKK1A6CU5laWwgSG9ybWFuCitNOgluaG9ybWFuQHR1eGRyaXZlci5jb20KK0w6CWxpbnV4LWNyeXB0b0B2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogQ1M1NTM1IEF1ZGlvIEFMU0EgZHJpdmVyCiBQOglKYXlhIEt1bWFyCiBNOglqYXlha3VtYXIuYWxzYUBnbWFpbC5jb20KQEAgLTE0NjIsOCArMTQ3Nyw2IEBACiBTOglTdXBwb3J0ZWQKIAogRE9DVU1FTlRBVElPTiAoL0RvY3VtZW50YXRpb24gZGlyZWN0b3J5KQotUDoJTWljaGFlbCBLZXJyaXNrCi1NOgltdGsubWFucGFnZXNAZ21haWwuY29tCiBQOglSYW5keSBEdW5sYXAKIE06CXJkdW5sYXBAeGVub3RpbWUubmV0CiBMOglsaW51eC1kb2NAdmdlci5rZXJuZWwub3JnCkBAIC0xOTA1LDEwICsxOTE4LDEwIEBACiBTOglNYWludGFpbmVkCiAKIEhBUkQgRFJJVkUgQUNUSVZFIFBST1RFQ1RJT04gU1lTVEVNIChIREFQUykgRFJJVkVSCi1QOglSb2JlcnQgTG92ZQotTToJcmxvdmVAcmxvdmUub3JnCi1NOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvcm1sL2hkYXBzLworUDoJRnJhbmsgU2VpZGVsCitNOglmcmFua0BmLXNlaWRlbC5kZQorTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZworVzoJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2ZzZWlkZWwvaGRhcHMvCiBTOglNYWludGFpbmVkCiAKIEdTUENBIEZJTkVQSVggU1VCRFJJVkVSCkBAIC0yMDAxLDcgKzIwMTQsNyBAQAogCiBISUJFUk5BVElPTiAoYWthIFNvZnR3YXJlIFN1c3BlbmQsIGFrYSBzd3N1c3ApCiBQOglQYXZlbCBNYWNoZWsKLU06CXBhdmVsQHN1c2UuY3oKK006CXBhdmVsQHVjdy5jegogUDoJUmFmYWVsIEouIFd5c29ja2kKIE06CXJqd0BzaXNrLnBsCiBMOglsaW51eC1wbUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpAQCAtMjIxMSw2ICsyMjI0LDExIEBACiBMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKK0lOVEVHUklUWSBNRUFTVVJFTUVOVCBBUkNISVRFQ1RVUkUgKElNQSkKK1A6CU1pbWkgWm9oYXIKK006CXpvaGFyQHVzLmlibS5jb20KK1M6CVN1cHBvcnRlZAorCiBJTVMgVFdJTlRVUkJPIEZSQU1FQlVGRkVSIERSSVZFUgogTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU9ycGhhbgpAQCAtMjQ1Nyw3ICsyNDc1LDcgQEAKIAogSVNETiBTVUJTWVNURU0KIFA6CUthcnN0ZW4gS2VpbAotTToJa2tlaWxAc3VzZS5kZQorTToJaXNkbkBsaW51eC1waW5naS5kZQogTDoJaXNkbjRsaW51eEBsaXN0c2Vydi5pc2RuNGxpbnV4LmRlIChzdWJzY3JpYmVycy1vbmx5KQogVzoJaHR0cDovL3d3dy5pc2RuNGxpbnV4LmRlCiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwva2tlaWwvaXNkbi0yLjYuZ2l0CkBAIC0yODI3LDcgKzI4NDUsNyBAQAogTToJemlwcGVsQGxpbnV4LW02OGsub3JnCiBMOglsaW51eC1tNjhrQGxpc3RzLmxpbnV4LW02OGsub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LW02OGsub3JnLwotVzoJaHR0cDovL2xpbnV4LW02OGstY3ZzLnViYi5jYS8KK1Q6CWdpdCBnaXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ2VlcnQvbGludXgtbTY4ay5naXQKIFM6CU1haW50YWluZWQKIAogTTY4SyBPTiBBUFBMRSBNQUNJTlRPU0gKQEAgLTI4NzIsNyArMjg5MCw3IEBACiBNOgltdGsubWFucGFnZXNAZ21haWwuY29tCiBXOglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL21hbi1wYWdlcwogTDoJbGludXgtbWFuQHZnZXIua2VybmVsLm9yZwotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIE1BUlZFTEwgTElCRVJUQVMgV0lSRUxFU1MgRFJJVkVSCiBQOglEYW4gV2lsbGlhbXMKQEAgLTMzMjcsOCArMzM0NSw4IEBACiBNOglqZXJlbXlAeGVuc291cmNlLmNvbQogUDoJQ2hyaXMgV3JpZ2h0CiBNOgljaHJpc3dAc291cy1zb2wub3JnCi1QOglaYWNoYXJ5IEFtc2RlbgotTToJemFjaEB2bXdhcmUuY29tCitQOglBbG9rIEthdGFyaWEKK006CWFrYXRhcmlhQHZtd2FyZS5jb20KIFA6CVJ1c3R5IFJ1c3NlbGwKIE06CXJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdQogTDoJdmlydHVhbGl6YXRpb25AbGlzdHMub3NkbC5vcmcKQEAgLTMzNDUsMTAgKzMzNjMsOCBAQAogUEFSSVNDIEFSQ0hJVEVDVFVSRQogUDoJS3lsZSBNY01hcnRpbgogTToJa3lsZUBtY21hcnRpbi5jYQotUDoJTWF0dGhldyBXaWxjb3gKLU06CW1hdHRoZXdAd2lsLmN4Ci1QOglHcmFudCBHcnVuZGxlcgotTToJZ3J1bmRsZXJAcGFyaXNjLWxpbnV4Lm9yZworUDoJSGVsZ2UgRGVsbGVyCitNOglkZWxsZXJAZ214LmRlCiBMOglsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LnBhcmlzYy1saW51eC5vcmcvCiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2t5bGUvcGFyaXNjLTIuNi5naXQKQEAgLTM2MzIsNiArMzY0OCwxMiBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCitSRFMgLSBSRUxJQUJMRSBEQVRBR1JBTSBTT0NLRVRTCitQOglBbmR5IEdyb3ZlcgorTToJYW5keS5ncm92ZXJAb3JhY2xlLmNvbQorTDoJcmRzLWRldmVsQG9zcy5vcmFjbGUuY29tCitTOglTdXBwb3J0ZWQKKwogUkVBRC1DT1BZIFVQREFURSAoUkNVKQogUDoJRGlwYW5rYXIgU2FybWEKIE06CWRpcGFua2FyQGluLmlibS5jb20KQEAgLTM3MjMsNiArMzc0NSwxNSBAQAogVzoJaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpbnV4MzkwLwogUzoJU3VwcG9ydGVkCiAKK1MzOTAgWkNSWVBUIERSSVZFUgorUDoJRmVsaXggQmVjaworTToJZmVsaXguYmVja0BkZS5pYm0uY29tCitQOglSYWxwaCBXdWVydGhuZXIKK006CXJhbHBoLnd1ZXJ0aG5lckBkZS5pYm0uY29tCitNOglsaW51eDM5MEBkZS5pYm0uY29tCitMOglsaW51eC1zMzkwQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCisKIFMzOTAgWkZDUCBEUklWRVIKIFA6CUNocmlzdG9mIFNjaG1pdHQKIE06CWNocmlzdG9mLnNjaG1pdHRAZGUuaWJtLmNvbQpAQCAtMzg0MSw2ICszODcyLDcgQEAKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB2Z2VyLmtlcm5lbC5vcmcgKHN1Z2dlc3RlZCBDYzopCiBUOglnaXQga2VybmVsLm9yZzpwdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvam1vcnJpcy9zZWN1cml0eS10ZXN0aW5nLTIuNi5naXQKK1c6CWh0dHA6Ly9zZWN1cml0eS53aWtpLmtlcm5lbC5vcmcvCiBTOglTdXBwb3J0ZWQKIAogU0VDVVJJVFkgQ09OVEFDVApAQCAtMzg3Myw2ICszOTA1LDE1IEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2pnYXJ6aWsvbGliYXRhLWRldi5naXQKIFM6CVN1cHBvcnRlZAogCitTRVJWRVIgRU5HSU5FUyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKK1A6CVNhdGh5YSBQZXJsYQorTToJc2F0aHlhcEBzZXJ2ZXJlbmdpbmVzLmNvbQorUDogICAgICBTdWJidSBTZWV0aGFyYW1hbgorTTogICAgICBzdWJidXNAc2VydmVyZW5naW5lcy5jb20KK0w6ICAgICAgbmV0ZGV2QHZnZXIua2VybmVsLm9yZworVzogICAgICBodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitTOiAgICAgIFN1cHBvcnRlZAorCiBTRkMgTkVUV09SSyBEUklWRVIKIFA6CVN0ZXZlIEhvZGdzb24KIFA6CUJlbiBIdXRjaGluZ3MKQEAgLTQxNzIsNyArNDIxMyw3IEBACiBQOglMZW4gQnJvd24KIE06CWxlbi5icm93bkBpbnRlbC5jb20KIFA6CVBhdmVsIE1hY2hlawotTToJcGF2ZWxAc3VzZS5jegorTToJcGF2ZWxAdWN3LmN6CiBQOglSYWZhZWwgSi4gV3lzb2NraQogTToJcmp3QHNpc2sucGwKIEw6CWxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCkBAIC00MjczLDYgKzQzMTQsMTkgQEAKIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdGxhbi8KIFM6CU1haW50YWluZWQKIAorVE9NT1lPIFNFQ1VSSVRZIE1PRFVMRQorUDoJS2VudGFybyBUYWtlZGEKK006CXRha2VkYWtuQG50dGRhdGEuY28uanAKK1A6CVRldHN1byBIYW5kYQorTToJcGVuZ3Vpbi1rZXJuZWxASS1sb3ZlLlNBS1VSQS5uZS5qcAorTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyAoa2VybmVsIGlzc3VlcykKK0w6CXRvbW95by11c2Vycy1lbkBsaXN0cy5zb3VyY2Vmb3JnZS5qcCAoc3Vic2NyaWJlcnMtb25seSwgZm9yIGRldmVsb3BlcnMgYW5kIHVzZXJzIGluIEVuZ2xpc2gpCitMOgl0b21veW8tZGV2QGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgZGV2ZWxvcGVycyBpbiBKYXBhbmVzZSkKK0w6CXRvbW95by11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5qcCAoc3Vic2NyaWJlcnMtb25seSwgZm9yIHVzZXJzIGluIEphcGFuZXNlKQorVzoJaHR0cDovL3RvbW95by5zb3VyY2Vmb3JnZS5qcC8KK1Q6CXF1aWx0IGh0dHA6Ly9zdm4uc291cmNlZm9yZ2UuanAvc3Zucm9vdC90b21veW8vdHJ1bmsvMi4yLngvdG9tb3lvLWxzbS9wYXRjaGVzLworUzoJTWFpbnRhaW5lZAorCiBUT1NISUJBIEFDUEkgRVhUUkFTIERSSVZFUgogUDoJSm9obiBCZWxtb250ZQogTToJdG9zaGliYV9hY3BpQG1lbWViZWFtLm9yZwpAQCAtNDkyNCwxMSArNDk3OCwxMSBAQAogUzoJTWFpbnRhaW5lZAogCiBaUjM2MDY3IFZJREVPIEZPUiBMSU5VWCBEUklWRVIKLVA6CVJvbmFsZCBCdWx0amUKLU06CXJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldAogTDoJbWpwZWctdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9tanBlZy5zb3VyY2Vmb3JnZS5uZXQvZHJpdmVyLXpvcmFuLwotUzoJTWFpbnRhaW5lZAorVDoJTWVyY3VyaWFsIGh0dHA6Ly9saW51eHR2Lm9yZy9oZy92NGwtZHZiCitTOglPZGQgRml4ZXMKIAogWlMgREVDU1RBVElPTiBaODVDMzAgU0VSSUFMIERSSVZFUgogUDoJTWFjaWVqIFcuIFJvenlja2kKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMjJkNzU4NC4uMWFiM2ViZiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsOCArMSw4IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMjkKLUVYVFJBVkVSU0lPTiA9IC1yYzUKLU5BTUUgPSBFcm90aWMgUGlja2xlZCBIZXJyaW5nCitFWFRSQVZFUlNJT04gPQorTkFNRSA9IFRlbXBvcmFyeSBUYXNtYW5pYW4gRGV2aWwKIAogIyAqRE9DVU1FTlRBVElPTioKICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgpAQCAtMzg5LDYgKzM4OSw3IEBACiAjIG91dHB1dCBkaXJlY3RvcnkuCiBvdXRwdXRtYWtlZmlsZToKIGlmbmVxICgkKEtCVUlMRF9TUkMpLCkKKwkkKFEpbG4gLWZzbiAkKHNyY3RyZWUpIHNvdXJjZQogCSQoUSkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL21rbWFrZWZpbGUgXAogCSAgICAkKHNyY3RyZWUpICQob2JqdHJlZSkgJChWRVJTSU9OKSAkKFBBVENITEVWRUwpCiBlbmRpZgpAQCAtNTY1LDYgKzU2NiwxMiBAQAogIyBkaXNhYmxlIHBvaW50ZXIgc2lnbmVkIC8gdW5zaWduZWQgd2FybmluZ3MgaW4gZ2NjIDQuMAogS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1Xbm8tcG9pbnRlci1zaWduLCkKIAorIyBkaXNhYmxlIGludmFsaWQgImNhbid0IHdyYXAiIG9wdGltemF0aW9ucyBmb3Igc2lnbmVkIC8gcG9pbnRlcnMKK0tCVUlMRF9DRkxBR1MJKz0gJChjYWxsIGNjLW9wdGlvbiwtZndyYXB2KQorCisjIHJldmVydCB0byBwcmUtZ2NjLTQuNCBiZWhhdmlvdXIgb2YgLmVoX2ZyYW1lCitLQlVJTERfQ0ZMQUdTCSs9ICQoY2FsbCBjYy1vcHRpb24sLWZuby1kd2FyZjItY2ZpLWFzbSkKKwogIyBBZGQgdXNlciBzdXBwbGllZCBDUFBGTEFHUywgQUZMQUdTIGFuZCBDRkxBR1MgYXMgdGhlIGxhc3QgYXNzaWdubWVudHMKICMgQnV0IHdhcm4gdXNlciB3aGVuIHdlIGRvIHNvCiB3YXJuLWFzc2lnbiA9IFwKQEAgLTkwMywxMiArOTEwLDE4IEBACiAjIGFuZCBpZiB0aGUgU0NNIGlzIGtub3cgYSB0YWcgZnJvbSB0aGUgU0NNIGlzIGFwcGVuZGVkLgogIyBUaGUgYXBwZW5kZWQgdGFnIGlzIGRldGVybWluZWQgYnkgdGhlIFNDTSB1c2VkLgogIwotIyBDdXJyZW50bHksIG9ubHkgZ2l0IGlzIHN1cHBvcnRlZC4KLSMgT3RoZXIgU0NNcyBjYW4gZWRpdCBzY3JpcHRzL3NldGxvY2FsdmVyc2lvbiBhbmQgYWRkIHRoZSBhcHByb3ByaWF0ZQotIyBjaGVja3MgYXMgbmVlZGVkLgorIyAuc2NtdmVyc2lvbiBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyBycG0gcGFja2FnZXMgc28gd2UgZG8gbm90IGxvb3NlCisjIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIFNDTSB3aGVuIHdlIGRvIHRoZSBidWlsZCBvZiB0aGUga2VybmVsCisjIGZyb20gdGhlIGNvcGllZCBzb3VyY2UKIGlmZGVmIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTwotCV9sb2NhbHZlci1hdXRvID0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgXAotCSAgICAgICAgICAgICAgICAgICQoc3JjdHJlZSkvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24gJChzcmN0cmVlKSkKKworaWZlcSAoJCh3aWxkY2FyZCAuc2NtdmVyc2lvbiksKQorICAgICAgICBfbG9jYWx2ZXItYXV0byA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAkKHNyY3RyZWUpL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uICQoc3JjdHJlZSkpCitlbHNlCisgICAgICAgIF9sb2NhbHZlci1hdXRvID0gJChzaGVsbCBjYXQgLnNjbXZlcnNpb24gMj4gL2Rldi9udWxsKQorZW5kaWYKKwogCWxvY2FsdmVyLWF1dG8gID0gJChMT0NBTFZFUlNJT04pJChfbG9jYWx2ZXItYXV0bykKIGVuZGlmCiAKQEAgLTk0Niw3ICs5NTksNiBAQAogCSAgICBta2RpciAtcCBpbmNsdWRlMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJICAgIGxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpIGluY2x1ZGUyL2FzbTsgICAgIFwKIAlmaQotCWxuIC1mc24gJChzcmN0cmVlKSBzb3VyY2UKIGVuZGlmCiAKICMgcHJlcGFyZTIgY3JlYXRlcyBhIG1ha2VmaWxlIGlmIHVzaW5nIGEgc2VwYXJhdGUgb3V0cHV0IGRpcmVjdG9yeQpAQCAtMTUzNyw3ICsxNTQ5LDcgQEAKICAgICAgIGNtZF9kZXBtb2QgPSBcCiAJaWYgWyAtciBTeXN0ZW0ubWFwIC1hIC14ICQoREVQTU9EKSBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkkKERFUE1PRCkgLWFlIC1GIFN5c3RlbS5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkkKGlmICQoc3RyaXAgJChJTlNUQUxMX01PRF9QQVRIKSksIC1iICQoSU5TVEFMTF9NT0RfUEFUSCkgLXIpICAgXAorCQkkKGlmICQoc3RyaXAgJChJTlNUQUxMX01PRF9QQVRIKSksIC1iICQoSU5TVEFMTF9NT0RfUEFUSCkgKSAgICAgXAogCQkkKEtFUk5FTFJFTEVBU0UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWZpCiAKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA5MGEwNzY1Li5kNmM2Yzc0IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJCSAgIHZhbHVlcyB0byByYW5kb20gdmFsdWVzLgogCiAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgTGludXgga2VybmVsIGNvbmZpZyB0b29scwotICAgaW4gRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZS1jb25maWdzLnR4dC4KKyAgIGluIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWcudHh0LgogCiAJTk9URVMgb24gIm1ha2UgY29uZmlnIjoKIAktIGhhdmluZyB1bm5lY2Vzc2FyeSBkcml2ZXJzIHdpbGwgbWFrZSB0aGUga2VybmVsIGJpZ2dlciwgYW5kIGNhbgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKaW5kZXggZGUzNWNkNC4uY2NkMmUxOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfQUxQSEFfU1RBVEZTX0gKICNkZWZpbmUgX0FMUEhBX1NUQVRGU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBBbHBoYSBpcyB0aGUgb25seSA2NC1iaXQgcGxhdGZvcm0gd2l0aCAzMi1iaXQgc3RhdGZzLiBBbmQgZG9lc24ndAogICAgZXZlbiBzZWVtIHRvIGltcGxlbWVudCBzdGF0ZnM2NCAqLwogI2RlZmluZSBfX3N0YXRmc193b3JkIF9fdTMyCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDY4ZTcwODkuLjRkNjgyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQUxQSEFfU1dBQl9ICiAjZGVmaW5lIF9BTFBIQV9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwppbmRleCA3MDM3MzFhLi5kMzgxMmViIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwpAQCAtOTAsNyArOTAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaXJxKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2lycV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpcnEsIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2lycV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVjJXMiLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCBlMTZhZWI2Li42N2MxOWY4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtNjQsNyArNjQsNyBAQAogCQlzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdChyZWdzKTsKIAkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlpZiAoY3B1ICE9IGJvb3RfY3B1aWQpIHsKLQkJICAgICAgICBrc3RhdF9jcHUoY3B1KS5pcnFzW1JUQ19JUlFdKys7CisJCSAgICAgICAga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KFJUQ19JUlEsIGlycV90b19kZXNjKFJUQ19JUlEpKTsKIAkJfSBlbHNlIHsKIAkJCWhhbmRsZV9pcnEoUlRDX0lSUSk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwppbmRleCBmMjM4MzcwLi44ZDAwOTdmIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05Myw4ICs5Myw4IEBACiAJaWYgKGNwdWlkICE9IGJvb3RfY3B1aWQpIHsKIAkJZmxhZ3MgfD0gMHgwMDA0MDAwMFVMOyAvKiAicmVtYWluIGhhbHRlZCIgKi8KIAkJKnBmbGFncyA9IGZsYWdzOwotCQljcHVfY2xlYXIoY3B1aWQsIGNwdV9wcmVzZW50X21hcCk7Ci0JCWNwdV9jbGVhcihjcHVpZCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCXNldF9jcHVfcHJlc2VudChjcHVpZCwgZmFsc2UpOworCQlzZXRfY3B1X3Bvc3NpYmxlKGNwdWlkLCBmYWxzZSk7CiAJCWhhbHQoKTsKIAl9CiAjZW5kaWYKQEAgLTEyMCw4ICsxMjAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFdhaXQgZm9yIHRoZSBzZWNvbmRhcmllcyB0byBoYWx0LiAqLwotCWNwdV9jbGVhcihib290X2NwdWlkLCBjcHVfcHJlc2VudF9tYXApOwotCWNwdV9jbGVhcihib290X2NwdWlkLCBjcHVfcG9zc2libGVfbWFwKTsKKwlzZXRfY3B1X3ByZXNlbnQoYm9vdF9jcHVpZCwgZmFsc2UpOworCXNldF9jcHVfcG9zc2libGUoYm9vdF9jcHVpZCwgZmFsc2UpOwogCXdoaWxlIChjcHVzX3dlaWdodChjcHVfcHJlc2VudF9tYXApKQogCQliYXJyaWVyKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKaW5kZXggMDBmMWRjMy4uYjFmZTU2NyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKQEAgLTEyMCwxMiArMTIwLDEyIEBACiBzbXBfY2FsbGluKHZvaWQpCiB7CiAJaW50IGNwdWlkID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JY3B1bWFza190IG1hc2sgPSBjcHVfb25saW5lX21hcDsKIAotCWlmIChjcHVfdGVzdF9hbmRfc2V0KGNwdWlkLCBtYXNrKSkgeworCWlmIChjcHVfb25saW5lKGNwdWlkKSkgewogCQlwcmludGsoIj8/LCBjcHUgMHgleCBhbHJlYWR5IHByZXNlbnQ/P1xuIiwgY3B1aWQpOwogCQlCVUcoKTsKIAl9CisJc2V0X2NwdV9vbmxpbmUoY3B1aWQsIHRydWUpOwogCiAJLyogVHVybiBvbiBtYWNoaW5lIGNoZWNrcy4gICovCiAJd3JtY2VzKDcpOwpAQCAtNDM2LDggKzQzNiw4IEBACiAJCQkJKChjaGFyICopY3B1YmFzZSArIGkqaHdycGItPnByb2Nlc3Nvcl9zaXplKTsKIAkJCWlmICgoY3B1LT5mbGFncyAmIDB4MWNjKSA9PSAweDFjYykgewogCQkJCXNtcF9udW1fcHJvYmVkKys7Ci0JCQkJY3B1X3NldChpLCBjcHVfcG9zc2libGVfbWFwKTsKLQkJCQljcHVfc2V0KGksIGNwdV9wcmVzZW50X21hcCk7CisJCQkJc2V0X2NwdV9wb3NzaWJsZShpLCB0cnVlKTsKKwkJCQlzZXRfY3B1X3ByZXNlbnQoaSwgdHJ1ZSk7CiAJCQkJY3B1LT5wYWxfcmV2aXNpb24gPSBib290X2NwdV9wYWxyZXY7CiAJCQl9CiAKQEAgLTQ3MCw4ICs0NzAsOCBAQAogCiAJLyogTm90aGluZyB0byBkbyBvbiBhIFVQIGJveCwgb3Igd2hlbiB0b2xkIG5vdCB0by4gICovCiAJaWYgKHNtcF9udW1fcHJvYmVkID09IDEgfHwgbWF4X2NwdXMgPT0gMCkgewotCQljcHVfcG9zc2libGVfbWFwID0gY3B1bWFza19vZl9jcHUoYm9vdF9jcHVpZCk7Ci0JCWNwdV9wcmVzZW50X21hcCA9IGNwdW1hc2tfb2ZfY3B1KGJvb3RfY3B1aWQpOworCQlpbml0X2NwdV9wb3NzaWJsZShjcHVtYXNrX29mKGJvb3RfY3B1aWQpKTsKKwkJaW5pdF9jcHVfcHJlc2VudChjcHVtYXNrX29mKGJvb3RfY3B1aWQpKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIG1vZGUgZGVhY3RpdmF0ZWQuXG4iKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwZWtfZGVmY29uZmlnCmluZGV4IGUwZWU3MDYuLjk4ZTJmM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZwpAQCAtNjA4LDcgKzYwOCw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxU0FNOV9XQVRDSERPRz15CitDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKIAogIwogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnCmluZGV4IDAxZDFlZjkuLjE0OTQ1NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZwpAQCAtNzAwLDcgKzcwMCw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxU0FNOV9XQVRDSERPRz15CitDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKIAogIwogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnCmluZGV4IDAzNmExMjYuLjIxNTk5ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZwpAQCAtNzEwLDcgKzcxMCw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxU0FNOV9XQVRDSERPRz15CitDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKIAogIwogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZwppbmRleCAyMzdhMmE2Li5lMmRmODFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnCkBAIC02MDYsNyArNjA2LDcgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0FUOTFTQU05X1dBVENIRE9HPXkKK0NPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9xaWwtYTkyNjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9xaWwtYTkyNjBfZGVmY29uZmlnCmluZGV4IGNkMWQ3MTcuLjliMzJkMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3FpbC1hOTI2MF9kZWZjb25maWcKQEAgLTcyNyw3ICs3MjcsNyBAQAogIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxU0FNOV9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmgKaW5kZXggNzk0ODlmZC4uMDgzODk0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBfX0FSTV9BX09VVF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGV4ZWMKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGYyY2QxOGEuLmVlMTMwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBfX0FTTUFSTV9TRVRVUF9ICiAjZGVmaW5lIF9fQVNNQVJNX1NFVFVQX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMTAyNAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggMjdhNjg5Yi4uY2EyYmYyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBfX0FTTV9BUk1fU1dBQl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKICMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZWxmLmMgYi9hcmNoL2FybS9rZXJuZWwvZWxmLmMKaW5kZXggODQ4NDkwOS4uZDRhMGRhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VsZi5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbGYuYwpAQCAtNzQsOSArNzQsOSBAQAogICovCiBpbnQgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYyhjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICp4LCBpbnQgZXhlY3V0YWJsZV9zdGFjaykKIHsKLQlpZiAoZXhlY3V0YWJsZV9zdGFjayAhPSBFWFNUQUNLX0VOQUJMRV9YKQorCWlmIChleGVjdXRhYmxlX3N0YWNrICE9IEVYU1RBQ0tfRElTQUJMRV9YKQogCQlyZXR1cm4gMTsKLQlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpIDw9IENQVV9BUkNIX0FSTXY2KQorCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPCBDUFVfQVJDSF9BUk12NikKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggNDlhNmJhOS4uMTU5ZDA0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtMTExLDYgKzExMSw3IEBACiAJLmdsb2JsIG1jb3VudF9jYWxsCiBtY291bnRfY2FsbDoKIAlibCBmdHJhY2Vfc3R1YgorCWxkciBsciwgW2ZwLCAjLTRdCQkJQCByZXN0b3JlIGxyCiAJbGRtaWEgc3AhLCB7cjAtcjMsIHBjfQogCiBFTlRSWShmdHJhY2VfY2FsbGVyKQpAQCAtMTIyLDYgKzEyMyw3IEBACiAJLmdsb2JsIGZ0cmFjZV9jYWxsCiBmdHJhY2VfY2FsbDoKIAlibCBmdHJhY2Vfc3R1YgorCWxkciBsciwgW2ZwLCAjLTRdCQkJQCByZXN0b3JlIGxyCiAJbGRtaWEgc3AhLCB7cjAtcjMsIHBjfQogCiAjZWxzZQpAQCAtMTMzLDYgKzEzNSw3IEBACiAJYWRyIHIwLCBmdHJhY2Vfc3R1YgogCWNtcCByMCwgcjIKIAlibmUgdHJhY2UKKwlsZHIgbHIsIFtmcCwgIy00XQkJCUAgcmVzdG9yZSBscgogCWxkbWlhIHNwISwge3IwLXIzLCBwY30KIAogdHJhY2U6CkBAIC0xNDEsNiArMTQ0LDcgQEAKIAlzdWIgcjAsIHIwLCAjTUNPVU5UX0lOU05fU0laRQogCW1vdiBsciwgcGMKIAltb3YgcGMsIHIyCisJbW92IGxyLCByMQkJCQlAIHJlc3RvcmUgbHIKIAlsZG1pYSBzcCEsIHtyMC1yMywgcGN9CiAKICNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9maXEuYyBiL2FyY2gvYXJtL2tlcm5lbC9maXEuYwppbmRleCAzNmY4MWQ5Li42ZmY3OTE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZmlxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2ZpcS5jCkBAIC04OCw3ICs4OCw3IEBACiAgKiBkaXNhYmxlIGlycXMgZm9yIHRoZSBkdXJhdGlvbi4gIE5vdGUgLSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbW9zdAogICogZW50aXJlbHkgY29kZWQgaW4gYXNzZW1ibHkuCiAgKi8KLXZvaWQgX19hdHRyaWJ1dGVfXygobmFrZWQpKSBzZXRfZmlxX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIF9fbmFrZWQgc2V0X2ZpcV9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdG1wOwogCWFzbSB2b2xhdGlsZSAoCkBAIC0xMDYsNyArMTA2LDcgQEAKIAk6ICJyIiAoJnJlZ3MtPkFSTV9yOCksICJJIiAoUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgRklRX01PREUpKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpIGdldF9maXFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgX19uYWtlZCBnZXRfZmlxX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0bXA7CiAJYXNtIHZvbGF0aWxlICgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwppbmRleCAzNjNkYjE4Li43Mjk2ZjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC03Niw3ICs3Niw3IEBACiAKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCXNlcV9wcmludGYocCwgIiAlMTBzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSA/IDogIi0iKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggNzA0OTgxNS4uNjhkNjQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTIzMywxMiArMjMzLDEzIEBACiAJdW5zaWduZWQgaW50IGNhY2hldHlwZSA9IHJlYWRfY3B1aWRfY2FjaGV0eXBlKCk7CiAJdW5zaWduZWQgaW50IGFyY2ggPSBjcHVfYXJjaGl0ZWN0dXJlKCk7CiAKLQlpZiAoYXJjaCA+PSBDUFVfQVJDSF9BUk12NykgewotCQljYWNoZWlkID0gQ0FDSEVJRF9WSVBUX05PTkFMSUFTSU5HOwotCQlpZiAoKGNhY2hldHlwZSAmICgzIDw8IDE0KSkgPT0gMSA8PCAxNCkKLQkJCWNhY2hlaWQgfD0gQ0FDSEVJRF9BU0lEX1RBR0dFRDsKLQl9IGVsc2UgaWYgKGFyY2ggPj0gQ1BVX0FSQ0hfQVJNdjYpIHsKLQkJaWYgKGNhY2hldHlwZSAmICgxIDw8IDIzKSkKKwlpZiAoYXJjaCA+PSBDUFVfQVJDSF9BUk12NikgeworCQlpZiAoKGNhY2hldHlwZSAmICg3IDw8IDI5KSkgPT0gNCA8PCAyOSkgeworCQkJLyogQVJNdjcgcmVnaXN0ZXIgZm9ybWF0ICovCisJCQljYWNoZWlkID0gQ0FDSEVJRF9WSVBUX05PTkFMSUFTSU5HOworCQkJaWYgKChjYWNoZXR5cGUgJiAoMyA8PCAxNCkpID09IDEgPDwgMTQpCisJCQkJY2FjaGVpZCB8PSBDQUNIRUlEX0FTSURfVEFHR0VEOworCQl9IGVsc2UgaWYgKGNhY2hldHlwZSAmICgxIDw8IDIzKSkKIAkJCWNhY2hlaWQgPSBDQUNIRUlEX1ZJUFRfQUxJQVNJTkc7CiAJCWVsc2UKIAkJCWNhY2hlaWQgPSBDQUNIRUlEX1ZJUFRfTk9OQUxJQVNJTkc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYwppbmRleCA5ZWNhMjIwLi40MTJhYTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKQEAgLTY5Nyw3ICs2OTcsNyBAQAogICogIFdhdGNoZG9nCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxY2FwOV93ZHRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJhdDkxX3dkdCIsCiAJLmlkCQk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKaW5kZXggZmRkZTFlYS4uZDc0YzlhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCkBAIC02NDMsNyArNjQzLDcgQEAKICAqICBXYXRjaGRvZwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPR19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfd2R0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV93ZHQiLAogCS5pZAkJPSAtMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCmluZGV4IDE3Mjg5NzUuLjU5ZmM0ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYwpAQCAtNjIxLDcgKzYyMSw3IEBACiAgKiAgV2F0Y2hkb2cKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0dfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF0OTFfd2R0IiwKIAkuaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYwppbmRleCBiNzUzY2I4Li5iN2YyMzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKQEAgLTM0Nyw2ICszNDcsMTExIEBACiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHNob3J0IG1tY19pZCwgc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpIHt9CiAjZW5kaWYKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDb21wYWN0IEZsYXNoIChQQ01DSUEgb3IgSURFKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUOTFfQ0YpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFfQ0ZfTU9EVUxFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfQVQ5MV9NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmMF9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNmMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF80LAorCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzQgKyBTWl8yNTZNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV84QU5EMTZCSVQsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2YwX2RldmljZSA9IHsKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YQk9ICZjZjBfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNmMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNmMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YxX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzUsCisJCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNSArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhBTkQxNkJJVCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjFfZGV2aWNlID0geworCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY2YxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YxX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGViaTBfY3NhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qCisJICogYXNzaWduIENTNCBvciBDUzUgdG8gU01DIHdpdGggQ29tcGFjdCBGbGFzaCBsb2dpYyBzdXBwb3J0LAorCSAqIHdlIGFzc3VtZSBTTUMgdGltaW5ncyBhcmUgY29uZmlndXJlZCBieSBib2FyZCBjb2RlLAorCSAqIGV4Y2VwdCBUcnVlIElERSB3aGVyZSB0aW1pbmdzIGFyZSBjb250cm9sbGVkIGJ5IGRyaXZlcgorCSAqLworCWViaTBfY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9FQkkwQ1NBKTsKKwlzd2l0Y2ggKGRhdGEtPmNoaXBzZWxlY3QpIHsKKwljYXNlIDQ6CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENiwgMCk7ICAvKiBFQkkwX05DUzQvQ0ZDUzAgKi8KKwkJZWJpMF9jc2EgfD0gQVQ5MV9NQVRSSVhfRUJJMF9DUzRBX1NNQ19DRjE7CisJCWNmMF9kYXRhID0gKmRhdGE7CisJCXBkZXYgPSAmY2YwX2RldmljZTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDcsIDApOyAgLyogRUJJMF9OQ1M1L0NGQ1MxICovCisJCWViaTBfY3NhIHw9IEFUOTFfTUFUUklYX0VCSTBfQ1M1QV9TTUNfQ0YyOworCQljZjFfZGF0YSA9ICpkYXRhOworCQlwZGV2ID0gJmNmMV9kZXZpY2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiQVQ5MSBDRjogYmFkIGNoaXAtc2VsZWN0IHJlcXVlc3RlZCAoJXUpXG4iLAorCQkgICAgICAgZGF0YS0+Y2hpcHNlbGVjdCk7CisJCXJldHVybjsKKwl9CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJMENTQSwgZWJpMF9jc2EpOworCisJaWYgKGRhdGEtPmRldF9waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7CisJfQorCisJaWYgKGRhdGEtPmlycV9waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5pcnFfcGluLCAxKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+aXJxX3BpbiwgMSk7CisJfQorCisJaWYgKGRhdGEtPnZjY19waW4pCisJCS8qIGluaXRpYWxseSBvZmYgKi8KKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmNjX3BpbiwgMCk7CisKKwkvKiBlbmFibGUgRUJJIGNvbnRyb2xsZWQgcGlucyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENSwgMSk7ICAvKiBOV0FJVCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOCwgMCk7ICAvKiBDRkNFMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOSwgMCk7ICAvKiBDRkNFMiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTQsIDApOyAvKiBDRk5SVyAqLworCisJcGRldi0+bmFtZSA9IChkYXRhLT5mbGFncyAmIEFUOTFfQ0ZfVFJVRV9JREUpID8gImF0OTFfaWRlIiA6ICJhdDkxX2NmIjsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBOQU5EIC8gU21hcnRNZWRpYQpAQCAtODU0LDcgKzk1OSw3IEBACiAgKiAgV2F0Y2hkb2cKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0dfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF0OTFfd2R0IiwKIAkuaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKaW5kZXggMTQ1MzI0Zi4uNzI4MTg2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwpAQCAtNjA5LDcgKzYwOSw3IEBACiAgKiAgV2F0Y2hkb2cKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0dfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfd2R0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV93ZHQiLAogCS5pZAkJPSAtMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCmluZGV4IDliMDQ0N2MuLjJmN2Q0OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpAQCAtNDkwLDcgKzQ5MCw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBUaGlzIGxvY2sgY2xhc3MgdGVsbHMgbG9ja2RlcCB0aGF0IEdQSU8gaXJxcyBhcmUgaW4gYSBkaWZmZXJlbnQKKy8qCisgKiBUaGlzIGxvY2sgY2xhc3MgdGVsbHMgbG9ja2RlcCB0aGF0IEdQSU8gaXJxcyBhcmUgaW4gYSBkaWZmZXJlbnQKICAqIGNhdGVnb3J5IHRoYW4gdGhlaXIgcGFyZW50cywgc28gaXQgd29uJ3QgcmVwb3J0IGZhbHNlIHJlY3Vyc2lvbi4KICAqLwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBncGlvX2xvY2tfY2xhc3M7CkBAIC01MDksOSArNTEwLDYgQEAKIAkJdW5zaWduZWQJaWQgPSB0aGlzLT5pZDsKIAkJdW5zaWduZWQJaTsKIAotCQkvKiBlbmFibGUgUElPIGNvbnRyb2xsZXIncyBjbG9jayAqLwotCQljbGtfZW5hYmxlKHRoaXMtPmNsb2NrKTsKLQogCQlfX3Jhd193cml0ZWwofjAsIHRoaXMtPnJlZ2Jhc2UgKyBQSU9fSURSKTsKIAogCQlmb3IgKGkgPSAwLCBwaW4gPSB0aGlzLT5jaGlwYmFzZTsgaSA8IDMyOyBpKyssIHBpbisrKSB7CkBAIC01NTYsNyArNTU0LDE0IEBACiAJCWRhdGEtPmNoaXBiYXNlID0gUElOX0JBU0UgKyBpICogMzI7CiAJCWRhdGEtPnJlZ2Jhc2UgPSBkYXRhLT5vZmZzZXQgKyAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1NZUzsKIAotCQkvKiBBVDkxU0FNOTI2M19JRF9QSU9DREUgZ3JvdXBzIFBJT0MsIFBJT0QsIFBJT0UgKi8KKwkJLyogZW5hYmxlIFBJTyBjb250cm9sbGVyJ3MgY2xvY2sgKi8KKwkJY2xrX2VuYWJsZShkYXRhLT5jbG9jayk7CisKKwkJLyoKKwkJICogU29tZSBwcm9jZXNzb3JzIHNoYXJlIHBlcmlwaGVyYWwgSUQgYmV0d2VlbiBtdWx0aXBsZSBHUElPIGJhbmtzLgorCQkgKiAgU0FNOTI2MyAoUElPQywgUElPRCwgUElPRSkKKwkJICogIENBUDkgKFBJT0EsIFBJT0IsIFBJT0MsIFBJT0QpCisJCSAqLwogCQlpZiAobGFzdCAmJiBsYXN0LT5pZCA9PSBkYXRhLT5pZCkKIAkJCWxhc3QtPm5leHQgPSBkYXRhOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCBmYjUxZjBlLi43OTNmZTdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC01Niw2ICs1Niw5IEBACiAJdTgJdmNjX3BpbjsJCS8qIHBvd2VyIHN3aXRjaGluZyAqLwogCXU4CXJzdF9waW47CQkvKiBjYXJkIHJlc2V0ICovCiAJdTgJY2hpcHNlbGVjdDsJCS8qIEVCSSBDaGlwIFNlbGVjdCBudW1iZXIgKi8KKwl1OAlmbGFnczsKKyNkZWZpbmUgQVQ5MV9DRl9UUlVFX0lERQkweDAxCisjZGVmaW5lIEFUOTFfSURFX1NXQVBfQTBfQTIJMHgwMgogfTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSk7CiAKQEAgLTkzLDYgKzk2LDcgQEAKIAl1OAkJZW5hYmxlX3BpbjsJLyogY2hpcCBlbmFibGUgKi8KIAl1OAkJZGV0X3BpbjsJLyogY2FyZCBkZXRlY3QgKi8KIAl1OAkJcmR5X3BpbjsJLyogcmVhZHkvYnVzeSAqLworCXU4ICAgICAgICAgICAgICByZHlfcGluX2FjdGl2ZV9sb3c7ICAgICAvKiByZHlfcGluIHZhbHVlIGlzIGludmVydGVkICovCiAJdTgJCWFsZTsJCS8qIGFkZHJlc3MgbGluZSBudW1iZXIgY29ubmVjdGVkIHRvIEFMRSAqLwogCXU4CQljbGU7CQkvKiBhZGRyZXNzIGxpbmUgbnVtYmVyIGNvbm5lY3RlZCB0byBDTEUgKi8KIAl1OAkJYnVzX3dpZHRoXzE2OwkvKiBidXN3aWR0aCBpcyAxNiBiaXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKaW5kZXggOWJiNGYwNC4uN2FjODEyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKQEAgLTMzMiw3ICszMzIsNiBAQAogCQkJYXQ5MV9zeXNfcmVhZChBVDkxX0FJQ19JUFIpICYgYXQ5MV9zeXNfcmVhZChBVDkxX0FJQ19JTVIpKTsKIAogZXJyb3I6Ci0Jc2RyYW1fc2VsZnJlZnJlc2hfZGlzYWJsZSgpOwogCXRhcmdldF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CiAJYXQ5MV9pcnFfcmVzdW1lKCk7CiAJYXQ5MV9ncGlvX3Jlc3VtZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWV2bS5jCmluZGV4IGE5NTdkMjMuLjM4YjZhOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZXZtLmMKQEAgLTMxMSw2ICszMTEsOSBAQAogCWdwaW9fcmVxdWVzdChncGlvICsgNywgIm5DRl9TRUwiKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIDcsIDEpOwogCisJLyogaXJsbWw2NDAxIHN1c3RhaW5zIG92ZXIgM0EsIHN3aXRjaGVzIDVWIGluIHVuZGVyIDggbXNlYyAqLworCXNldHVwX3VzYig1MDAsIDgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNyw5ICs0MjAsNiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRhdmluY2lfZXZtX2RldmljZXMsCiAJCQkgICAgIEFSUkFZX1NJWkUoZGF2aW5jaV9ldm1fZGV2aWNlcykpOwogCWV2bV9pbml0X2kyYygpOwotCi0JLyogaXJsbWw2NDAxIHN1c3RhaW5zIG92ZXIgM0EsIHN3aXRjaGVzIDVWIGluIHVuZGVyIDggbXNlYyAqLwotCXNldHVwX3VzYig1MDAsIDgpOwogfQogCiBzdGF0aWMgX19pbml0IHZvaWQgZGF2aW5jaV9ldm1faXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMKaW5kZXggMjhmNmRiYy4uYWJiOTJiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMKQEAgLTIzMSw2ICsyMzEsMTEgQEAKIAkJLmxwc2MgPSBEQVZJTkNJX0xQU0NfR1BJTywKIAl9LAogCXsKKwkJLm5hbWUgPSAidXNiIiwKKwkJLnJhdGUgPSAmY29tbW9ucmF0ZSwKKwkJLmxwc2MgPSBEQVZJTkNJX0xQU0NfVVNCLAorCX0sCisJewogCQkubmFtZSA9ICJBRU1JRkNMSyIsCiAJCS5yYXRlID0gJmNvbW1vbnJhdGUsCiAJCS5scHNjID0gREFWSU5DSV9MUFNDX0FFTUlGLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3VzYi5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3VzYi5jCmluZGV4IDg2N2VhZDIuLjY5NjgwNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS91c2IuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvdXNiLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hPU1QpCiAJLm1vZGUgICAgICAgICAgID0gTVVTQl9IT1NULAogI2VuZGlmCisJLmNsb2NrCQk9ICJ1c2IiLAogCS5jb25maWcJCT0gJm11c2JfY29uZmlnLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dlc2JjOTMxMi5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dlc2JjOTMxMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWZlMmI5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9nZXNiYzkzMTIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9nZXNiYzkzMTIuaAotICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDUyOTgwN2QuLjI4NjYyOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAKICNpbmNsdWRlICJwbGF0Zm9ybS5oIgogCi0jaW5jbHVkZSAiZ2VzYmM5MzEyLmgiCiAjaW5jbHVkZSAidHM3Mnh4LmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCA4OGY3ZTg4Li4wNWYwZjRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNCw2ICs0LDggQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorc3RydWN0IGkyY19ib2FyZF9pbmZvOworCiBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhCiB7CiAJdW5zaWduZWQgY2hhcglkZXZfYWRkcls2XTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IGIzNDA0YjcuLjBkMjA3NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtMjMxLDE0ICsyMzEsMTcgQEAKIAogdm9pZCBfX2luaXQga2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdChzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKmQsIGludCBpcnEpCiB7CisJaW50IGk7CisKIAlpZiAoaXJxICE9IE5PX0lSUSkgewogCQlraXJrd29vZF9zd2l0Y2hfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gaXJxOwogCQlraXJrd29vZF9zd2l0Y2hfcmVzb3VyY2VzWzBdLmVuZCA9IGlycTsKIAkJa2lya3dvb2Rfc3dpdGNoX2RldmljZS5udW1fcmVzb3VyY2VzID0gMTsKIAl9CiAKLQlkLT5taWlfYnVzID0gJmtpcmt3b29kX2dlMDBfc2hhcmVkLmRldjsKIAlkLT5uZXRkZXYgPSAma2lya3dvb2RfZ2UwMC5kZXY7CisJZm9yIChpID0gMDsgaSA8IGQtPm5yX2NoaXBzOyBpKyspCisJCWQtPmNoaXBbaV0ubWlpX2J1cyA9ICZraXJrd29vZF9nZTAwX3NoYXJlZC5kZXY7CiAJa2lya3dvb2Rfc3dpdGNoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmtpcmt3b29kX3N3aXRjaF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pcnEuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaXJxLmMKaW5kZXggZWZiODZiNy4uMDYwODNiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2lycS5jCkBAIC00Miw3ICs0Miw3IEBACiAJd3JpdGVsKDAsIEdQSU9fRURHRV9DQVVTRSgzMikpOwogCiAJZm9yIChpID0gSVJRX0tJUktXT09EX0dQSU9fU1RBUlQ7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZvcmlvbl9ncGlvX2lycV9sZXZlbF9jaGlwKTsKKwkJc2V0X2lycV9jaGlwKGksICZvcmlvbl9ncGlvX2lycV9jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlpcnFfZGVzY1tpXS5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKaW5kZXggOWEwZTkwNS4uZTFjMDUxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCkBAIC03NSw3ICs3NSw3IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzJdCT0gImxhbjMiLApAQCAtODMsNiArODMsMTEgQEAKIAkucG9ydF9uYW1lc1s1XQk9ICJjcHUiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfZ2UwMV9kYXRhID0gewogCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDExKSwKIH07CkBAIC0xMDUsMTIgKzExMCwxMiBAQAogCWtpcmt3b29kX2dlMDBfaW5pdCgmcmQ4OGY2MjgxX2dlMDBfZGF0YSk7CiAJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKIAlpZiAocmV2ID09IE1WODhGNjI4MV9SRVZfQTApIHsKLQkJcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLnN3X2FkZHIgPSAxMDsKKwkJcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEuc3dfYWRkciA9IDEwOwogCQlraXJrd29vZF9nZTAxX2luaXQoJnJkODhmNjI4MV9nZTAxX2RhdGEpOwogCX0gZWxzZSB7Ci0JCXJkODhmNjI4MV9zd2l0Y2hfZGF0YS5wb3J0X25hbWVzWzRdID0gIndhbiI7CisJCXJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhLnBvcnRfbmFtZXNbNF0gPSAid2FuIjsKIAl9Ci0Ja2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLCBOT19JUlEpOworCWtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoJnJkODhmNjI4MV9zd2l0Y2hfcGxhdF9kYXRhLCBOT19JUlEpOwogCiAJa2lya3dvb2RfcnRjX2luaXQoKTsKIAlraXJrd29vZF9zYXRhX2luaXQoJnJkODhmNjI4MV9zYXRhX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2lycS5jCmluZGV4IGUyNzM0MTguLjMwYjdlNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaXJxLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl3cml0ZWwoMCwgR1BJT19FREdFX0NBVVNFKDApKTsKIAogCWZvciAoaSA9IElSUV9NVjc4WFgwX0dQSU9fU1RBUlQ7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZvcmlvbl9ncGlvX2lycV9sZXZlbF9jaGlwKTsKKwkJc2V0X2lycV9jaGlwKGksICZvcmlvbl9ncGlvX2lycV9jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlpcnFfZGVzY1tpXS5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCmluZGV4IDY4NmQ4ZDIuLmE5NTY0NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9jc2lfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgxL214MWFkcy5jCmluZGV4IDJlNGIxODUuLjMyMDBjZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL214MWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL214MWFkcy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKaW5kZXggMjJlMGViNi4uZmViMGU1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKQEAgLTYzLDcgKzYzLDYgQEAKICNlbHNlCiBzdGF0aWMgdm9pZCBoYW5kbGVfcHJpb19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CiAKQEAgLTcyLDcgKzcxLDcgQEAKIAlCVUdfT04oZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAlpZiAodW5saWtlbHkoIWFjdGlvbiB8fCAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCBmNmExMzQ1Li42MDMxZTE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAl9CiAKIAlsZHBfc21jOTExeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MDsKLQlsZHBfc21jOTExeF9yZXNvdXJjZXNbMF0uZW5kICAgPSBjc19tZW1fYmFzZSArIDB4ZjsKKwlsZHBfc21jOTExeF9yZXNvdXJjZXNbMF0uZW5kICAgPSBjc19tZW1fYmFzZSArIDB4ZmY7CiAJdWRlbGF5KDEwMCk7CiAKIAlldGhfZ3BpbyA9IExEUF9TTUM5MTFYX0dQSU87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggMzhjODhmYi4uZTM5Y2QyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtMTc4LDcgKzE3OCw5IEBACiAjaWZkZWYgQ09ORklHX0kyQzJfT01BUF9CRUFHTEUKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgNDAwLCBOVUxMLCAwKTsKICNlbmRpZgotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOworCS8qIEJ1cyAzIGlzIGF0dGFjaGVkIHRvIHRoZSBEVkkgcG9ydCB3aGVyZSBkZXZpY2VzIGxpa2UgdGhlIHBpY28gRExQCisJICogcHJvamVjdG9yIGRvbid0IHdvcmsgcmVsaWFibHkgd2l0aCA0MDBrSHogKi8KKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgMTAwLCBOVUxMLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCmluZGV4IGFkNzIxZTAuLmNlNGQ0NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTU2NSw3ICs1NjUsNyBAQAogICoKICAqIEdpdmVuIGEgc3RydWN0IGNsayBvZiBhIHJhdGUtc2VsZWN0YWJsZSBjbGtzZWwgY2xvY2ssIGFuZCBhIGNsb2NrIGRpdmlzb3IsCiAgKiBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGZpZWxkIHZhbHVlLiAgVGhlIHJldHVybiByZWdpc3RlciB2YWx1ZSBpcwotICogdGhlIHZhbHVlIGJlZm9yZSBsZWZ0LXNoaWZ0aW5nLiAgUmV0dXJucyAweGZmZmZmZmZmIG9uIGVycm9yCisgKiB0aGUgdmFsdWUgYmVmb3JlIGxlZnQtc2hpZnRpbmcuICBSZXR1cm5zIH4wIG9uIGVycm9yCiAgKi8KIHUzMiBvbWFwMl9kaXZpc29yX3RvX2Nsa3NlbChzdHJ1Y3QgY2xrICpjbGssIHUzMiBkaXYpCiB7CkBAIC01NzcsNyArNTc3LDcgQEAKIAogCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKIAlpZiAoY2xrcyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIH4wOwogCiAJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CiAJCWlmICgoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykgJiYgKGNsa3ItPmRpdiA9PSBkaXYpKQpAQCAtNTg4LDcgKzU4OCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IENvdWxkIG5vdCBmaW5kIGRpdmlzb3IgJWQgZm9yICIKIAkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGRpdiwgY2xrLT5uYW1lLAogCQkgICAgICAgY2xrLT5wYXJlbnQtPm5hbWUpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIH4wOwogCX0KIAogCXJldHVybiBjbGtyLT52YWw7CkBAIC03MDgsNyArNzA4LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKLQkJaWYgKGNsa3ItPmZsYWdzICYgKGNwdV9tYXNrIHwgREVGQVVMVF9SQVRFKSkKKwkJaWYgKGNsa3ItPmZsYWdzICYgY3B1X21hc2sgJiYgY2xrci0+ZmxhZ3MgJiBERUZBVUxUX1JBVEUpCiAJCQlicmVhazsgLyogRm91bmQgdGhlIGRlZmF1bHQgcmF0ZSBmb3IgdGhpcyBwbGF0Zm9ybSAqLwogCX0KIApAQCAtNzQ2LDcgKzc0Niw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNsay0+dXNlY291bnQgPiAwKQotCQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKKwkJb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKIAogCS8qIFNldCBuZXcgc291cmNlIHZhbHVlIChwcmV2aW91cyBkaXZpZGVycyBpZiBhbnkgaW4gZWZmZWN0KSAqLwogCXJlZ192YWwgPSBfX3Jhd19yZWFkbChzcmNfYWRkcikgJiB+ZmllbGRfbWFzazsKQEAgLTc1OSwxMSArNzU5LDExIEBACiAJCXdtYigpOwogCX0KIAotCWlmIChjbGstPnVzZWNvdW50ID4gMCkKLQkJX29tYXAyX2Nsa19lbmFibGUoY2xrKTsKLQogCWNsay0+cGFyZW50ID0gbmV3X3BhcmVudDsKIAorCWlmIChjbGstPnVzZWNvdW50ID4gMCkKKwkJb21hcDJfY2xrX2VuYWJsZShjbGspOworCiAJLyogQ0xLU0VMIGNsb2NrcyBmb2xsb3cgdGhlaXIgcGFyZW50cycgcmF0ZXMsIGRpdmlkZWQgYnkgYSBkaXZpc29yICovCiAJY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCmluZGV4IDBhNjIzMzcuLjY4Y2MzZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2VoY2ktb3Jpb24uaD4KICNpbmNsdWRlIDxwbGF0L212X3hvci5oPgogI2luY2x1ZGUgPHBsYXQvb3Jpb25fbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb241eF93ZHQuaD4KICNpbmNsdWRlIDxwbGF0L3RpbWUuaD4KICNpbmNsdWRlICJjb21tb24uaCIKIApAQCAtMjE5LDE0ICsyMjAsMTcgQEAKIAogdm9pZCBfX2luaXQgb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQogeworCWludCBpOworCiAJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7CiAJfQogCi0JZC0+bWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZvcmlvbjV4X2V0aC5kZXY7CisJZm9yIChpID0gMDsgaSA8IGQtPm5yX2NoaXBzOyBpKyspCisJCWQtPmNoaXBbaV0ubWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCW9yaW9uNXhfc3dpdGNoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfc3dpdGNoX2RldmljZSk7CkBAIC00MzEsNiArNDM1LDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFhPUiBlbmdpbmUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IG12X3hvcl9wbGF0Zm9ybV9zaGFyZWRfZGF0YSBvcmlvbjV4X3hvcl9zaGFyZWRfZGF0YSA9IHsKKwkuZHJhbQkJPSAmb3Jpb241eF9tYnVzX2RyYW1faW5mbywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Jpb241eF94b3Jfc2hhcmVkX3Jlc291cmNlc1tdID0gewogCXsKIAkJLm5hbWUJPSAieG9yIGxvdyIsCkBAIC00NDgsNiArNDU2LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfeG9yX3NoYXJlZCA9IHsKIAkubmFtZQkJPSBNVl9YT1JfU0hBUkVEX05BTUUsCiAJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm9yaW9uNXhfeG9yX3NoYXJlZF9kYXRhLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9yaW9uNXhfeG9yX3NoYXJlZF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IG9yaW9uNXhfeG9yX3NoYXJlZF9yZXNvdXJjZXMsCiB9OwpAQCAtNTI2LDYgKzUzNywyOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV2F0Y2hkb2cKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhIG9yaW9uNXhfd2R0X2RhdGEgPSB7CisJLnRjbGsJCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbjV4X3dkdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9yaW9uNXhfd2R0IiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm9yaW9uNXhfd2R0X2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCit2b2lkIF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCit7CisJb3Jpb241eF93ZHRfZGF0YS50Y2xrID0gb3Jpb241eF90Y2xrOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb241eF93ZHRfZGV2aWNlKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRpbWUgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IG9yaW9uNXhfdGNsazsKQEAgLTYyNCw2ICs2NTgsMTEgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT3Jpb246IEFwcGx5aW5nIDUyODEgRDAgV0ZJIHdvcmthcm91bmQuXG4iKTsKIAkJZGlzYWJsZV9obHQoKTsKIAl9CisKKwkvKgorCSAqIFJlZ2lzdGVyIHdhdGNoZG9nIGRyaXZlcgorCSAqLworCW9yaW9uNXhfd2R0X2luaXQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYwppbmRleCAwY2FhZTQzLi5lMDNmN2I0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2lycS5jCkBAIC00NCw3ICs0NCw3IEBACiAJICogVXNlciBjYW4gdXNlIHNldF90eXBlKCkgaWYgaGUgd2FudHMgdG8gdXNlIGVkZ2UgdHlwZXMgaGFuZGxlcnMuCiAJICovCiAJZm9yIChpID0gSVJRX09SSU9ONVhfR1BJT19TVEFSVDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJm9yaW9uX2dwaW9faXJxX2xldmVsX2NoaXApOworCQlzZXRfaXJxX2NoaXAoaSwgJm9yaW9uX2dwaW9faXJxX2NoaXApOwogCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCmluZGV4IDE1ZjUzMjMuLjljMWNhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCkBAIC05NCw3ICs5NCw3IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTAzLDYgKzEwMywxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2Z4b19zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNTE4MWxfZnhvX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcmQ4OGY1MTgxbF9meG9faW5pdCh2b2lkKQogewogCS8qCkBAIC0xMTcsNyArMTIyLDcgQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjUxODFsX2Z4b19ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZnhvX3N3aXRjaF9kYXRhLCBOT19JUlEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfcGxhdF9kYXRhLCBOT19JUlEpOwogCW9yaW9uNXhfdWFydDBfaW5pdCgpOwogCiAJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oUkQ4OEY1MTgxTF9GWE9fTk9SX0JPT1RfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCmluZGV4IDhhZDM5MzQuLmVlMTM5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwpAQCAtOTUsNyArOTUsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzJdCT0gIndhbiIsCkBAIC0xMDQsNiArMTA0LDExIEBACiAJLnBvcnRfbmFtZXNbN10JPSAibGFuMyIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjUxODFsX2dlX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcmQ4OGY1MTgxbF9nZV9pMmNfcnRjID0gewogCUkyQ19CT0FSRF9JTkZPKCJkczEzMzgiLCAweDY4KSwKIH07CkBAIC0xMjIsNyArMTI3LDggQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjUxODFsX2dlX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfZGF0YSwgZ3Bpb190b19pcnEoOCkpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2dlX3N3aXRjaF9wbGF0X2RhdGEsCisJCQkJZ3Bpb190b19pcnEoOCkpOwogCW9yaW9uNXhfaTJjX2luaXQoKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYwppbmRleCAyNjJlMjVlLi43NzM3Y2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYwpAQCAtMzUsNyArMzUsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCkBAIC00NCw2ICs0NCwxMSBAQAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX2NoaXBfZGF0YSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByZDg4ZjYxODNhcF9nZV9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQk9ICJrZXJuZWwiLApAQCAtODksNyArOTQsOCBAQAogCSAqLwogCW9yaW9uNXhfZWhjaTBfaW5pdCgpOwogCW9yaW9uNXhfZXRoX2luaXQoJnJkODhmNjE4M2FwX2dlX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDMpKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX3BsYXRfZGF0YSwKKwkJCQlncGlvX3RvX2lycSgzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8sCiAJCQkJQVJSQVlfU0laRShyZDg4ZjYxODNhcF9nZV9zcGlfc2xhdmVfaW5mbykpOwogCW9yaW9uNXhfc3BpX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCmluZGV4IGNjOGY4OTIuLjFiNGFkOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSB3cnQzNTBuX3YyX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKQEAgLTExNSw2ICsxMTUsMTEgQEAKIAkucG9ydF9uYW1lc1s3XQk9ICJsYW40IiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJndydDM1MG5fdjJfc3dpdGNoX2NoaXBfZGF0YSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCB3cnQzNTBuX3YyX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTI5LDcgKzEzNCw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmd3J0MzUwbl92Ml9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJndydDM1MG5fdjJfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJndydDM1MG5fdjJfc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFdSVDM1ME5fVjJfTk9SX0JPT1RfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwppbmRleCA2ZDQ4ZTAwLi5hNmZmZjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCkBAIC0xMzUsNiArMTM1LDExIEBACiAJLyogSXJEQSAqLwogCUdQSU8zOF9HUElPIHwgTUZQX0xQTV9EUklWRV9ISUdILAogCisJLyogQXVkaW8gcG93ZXIgY29udHJvbCAqLworCUdQSU8xNl9HUElPLCAgLyogQUM5NyBjb2RlYyBBVkREMiBzdXBwbHkgKGFuYWxvZ3VlIHBvd2VyKSAqLworCUdQSU80MF9HUElPLCAgLyogTWljIGFtcCBwb3dlciAqLworCUdQSU80MV9HUElPLCAgLyogSGVhZHBob25lIGFtcCBwb3dlciAqLworCiAJLyogUEMgQ2FyZCAqLwogCUdQSU84X0dQSU8sICAgLyogQ0QwICovCiAJR1BJTzQ0X0dQSU8sICAvKiBDRDEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwppbmRleCBiZTFhYjhlLi42NjUwNjZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCkBAIC0xMzMsNiArMTMzLDExIEBACiAJLyogSXJEQSAqLwogCUdQSU8zOF9HUElPIHwgTUZQX0xQTV9EUklWRV9ISUdILAogCisJLyogQXVkaW8gcG93ZXIgY29udHJvbCAqLworCUdQSU80X0dQSU8sICAvKiBIZWFkcGhvbmUgYW1wIHBvd2VyICovCisJR1BJTzdfR1BJTywgIC8qIFNwZWFrZXIgYW1wIHBvd2VyICovCisJR1BJTzM3X0dQSU8sIC8qIEhlYWRwaG9uZSBkZXRlY3QgKi8KKwogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwogCUdQSU80NF9HUElPLCAgLyogQ0QxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYwppbmRleCBkYTZlNDQyLi4yOTVlYzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKQEAgLTE1Myw2ICsxNTMsMTMgQEAKIAlHUElPMjNfU1NQMV9TQ0xLLAogCUdQSU8yNV9TU1AxX1RYRCwKIAlHUElPMjZfU1NQMV9SWEQsCisKKwkvKiBJMlMgKi8KKwlHUElPMjhfSTJTX0JJVENMS19PVVQsCisJR1BJTzI5X0kyU19TREFUQV9JTiwKKwlHUElPMzBfSTJTX1NEQVRBX09VVCwKKwlHUElPMzFfSTJTX1NZTkMsCisJR1BJTzMyX0kyU19TWVNDTEssCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCmluZGV4IGVmYmQyYWEuLmYzZTU1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKQEAgLTQ1LDYgKzQ1LDIxIEBACiAvKiBlN3h4IElyREEgcG93ZXIgY29udHJvbCAqLwogI2RlZmluZSBHUElPX0U3WFhfSVJfT0ZGICAgICAgICAgMzgKIAorLyogZTc0MCBhdWRpbyBjb250cm9sIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyICAxNgorI2RlZmluZSBHUElPX0U3NDBfTUlDX09OICAgICAgICAgNDAKKyNkZWZpbmUgR1BJT19FNzQwX0FNUF9PTiAgICAgICAgIDQxCisKKy8qIGU3NTAgYXVkaW8gY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPX0U3NTBfSFBfQU1QX09GRiAgICAgIDQKKyNkZWZpbmUgR1BJT19FNzUwX1NQS19BTVBfT0ZGICAgICA3CisjZGVmaW5lIEdQSU9fRTc1MF9IUF9ERVRFQ1QgICAgICAzNworCisvKiBlODAwIGF1ZGlvIGNvbnRyb2wgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19FODAwX0hQX0RFVEVDVCAgICAgIDgxCisjZGVmaW5lIEdQSU9fRTgwMF9IUF9BTVBfT0ZGICAgICA4MgorI2RlZmluZSBHUElPX0U4MDBfU1BLX0FNUF9PTiAgICAgODMKKwogLyogQVNJQyByZWxhdGVkIEdQSU9zICovCiAjZGVmaW5lIEdQSU9fRVNFUklFU19UTUlPX0lSUSAgICAgICAgNQogI2RlZmluZSBHUElPX0VTRVJJRVNfVE1JT19QQ0xSICAgICAgMTkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmgKaW5kZXggY2YzMTk4Ni4uMDE4ZjZkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNkZWZpbmUgU1NDUjBfVFVNCSgxIDw8IDIzKQkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuIGludGVycnVwdCBtYXNrICovCiAjZGVmaW5lIFNTQ1IwX0ZSREMJKDB4MDcwMDAwMDApCS8qIEZyYW1lIHJhdGUgZGl2aWRlciBjb250cm9sIChtYXNrKSAqLwogI2RlZmluZSBTU0NSMF9TbG90c1BlckZybSh4KSAoKCh4KSAtIDEpIDw8IDI0KQkvKiBUaW1lIHNsb3RzIHBlciBmcmFtZSBbMS4uOF0gKi8KLSNkZWZpbmUgU1NDUjBfQURDCSgxIDw8IDMwKQkvKiBBdWRpbyBjbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgU1NDUjBfQUNTCSgxIDw8IDMwKQkvKiBBdWRpbyBjbG9jayBzZWxlY3QgKi8KICNkZWZpbmUgU1NDUjBfTU9ECSgxIDw8IDMxKQkvKiBNb2RlIChub3JtYWwgb3IgbmV0d29yaykgKi8KICNlbmRpZgogCkBAIC0xMDksNiArMTA5LDExIEBACiAjZGVmaW5lIFNTU1JfVElOVAkJKDEgPDwgMTkpCS8qIFJlY2VpdmVyIFRpbWUtb3V0IEludGVycnVwdCAqLwogI2RlZmluZSBTU1NSX1BJTlQJCSgxIDw8IDE4KQkvKiBQZXJpcGhlcmFsIFRyYWlsaW5nIEJ5dGUgSW50ZXJydXB0ICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QWEEzeHgpCisjZGVmaW5lIFNTUFNQX0VETVlTVE9QKHgpCSgoeCkgPDwgMjgpICAgICAvKiBFeHRlbmRlZCBEdW1teSBTdG9wICovCisjZGVmaW5lIFNTUFNQX0VETVlTVFJUKHgpCSgoeCkgPDwgMjYpICAgICAvKiBFeHRlbmRlZCBEdW1teSBTdGFydCAqLworI2VuZGlmCisKICNkZWZpbmUgU1NQU1BfRlNSVAkJKDEgPDwgMjUpCS8qIEZyYW1lIFN5bmMgUmVsYXRpdmUgVGltaW5nICovCiAjZGVmaW5lIFNTUFNQX0RNWVNUT1AoeCkJKCh4KSA8PCAyMykJLyogRHVtbXkgU3RvcCAqLwogI2RlZmluZSBTU1BTUF9TRlJNV0RUSCh4KQkoKHgpIDw8IDE2KQkvKiBTZXJpYWwgRnJhbWUgV2lkdGggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDZkNDQ3YzkuLjBkNjJkMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMTA1LDYgKzEwNSwxMiBAQAogCUdQSU81N19uSU9JUzE2LAogCUdQSU8xMDRfUFNLVFNFTCwKIAorCS8qIEkyUyAqLworCUdQSU8yOF9JMlNfQklUQ0xLX09VVCwKKwlHUElPMjlfSTJTX1NEQVRBX0lOLAorCUdQSU8zMF9JMlNfU0RBVEFfT1VULAorCUdQSU8zMV9JMlNfU1lOQywKKwogCS8qIE1NQyAqLwogCUdQSU8zMl9NTUNfQ0xLLAogCUdQSU8xMTJfTU1DX0NNRCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL3Jpc2NwYy5jIGIvYXJjaC9hcm0vbWFjaC1ycGMvcmlzY3BjLmMKaW5kZXggZTg4ZDQxNy4uYzdmYzAxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvcmlzY3BjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvcmlzY3BjLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTIwMSw4ICsyMDIsMTMgQEAKIAkmcGF0YV9kZXZpY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19ydGMgPSB7CisJSTJDX0JPQVJEX0lORk8oInBjZjg1ODMiLCAweDUwKQorfTsKKwogc3RhdGljIGludCBfX2luaXQgcnBjX2luaXQodm9pZCkKIHsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmaTJjX3J0YywgMSk7CiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldnMsIEFSUkFZX1NJWkUoZGV2cykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKaW5kZXggNTUyYjRjNy4uNDQwYzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCA2MDc4ZjA5Li44MzMxZThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5jbHVkZSA8bWFjaC9iYXN0LW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvYmFzdC1pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCmluZGV4IDkxOTg1NmMuLjllMzQ3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogI2RlZmluZSBNQVAoeCkgeyAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKaW5kZXggNWI1ZWUwYi4uNjliNmNmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0NDBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggMmE1OGE0ZC4uODQzMGU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiAjZGVmaW5lIE1BUCh4KSB7IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCmluZGV4IDNjNGQ0NzEuLjI1Zjc5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJLnZpZGNvbjEJPSBWSURDT04xX0lOVl9IU1lOQyB8IFZJRENPTjFfSU5WX1ZTWU5DLAogfTsKIAotc3RydWN0IG1hcF9kZXNjIHNtZGs2NDEwX2lvZGVzY1tdID0ge307CitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGs2NDEwX2lvZGVzY1tdID0ge307CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrNjQxMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKICNpZmRlZiBDT05GSUdfU01ESzY0MTBfU0RfQ0gwCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2czBbXSBfX2luaXRkYXRhID0gewogCXsgSTJDX0JPQVJEX0lORk8oIjI0YzA4IiwgMHg1MCksIH0sCi0JeyBJMkNfQk9BUkRfSU5GTygiV004NTgwIiwgMFgxYiksIH0sCisJeyBJMkNfQk9BUkRfSU5GTygid204NTgwIiwgMHgxYiksIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19kZXZzMVtdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUyBiL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TCmluZGV4IDhhN2Y2NWIuLjk0MDc3ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TCisrKyBiL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TCkBAIC0yMyw3ICsyMyw4IEBACiAjaWZkZWYgQ09ORklHX0NQVV8zMnY2SwogCWNscmV4CiAjZWxzZQotCXN0cmV4CXIwLCByMSwgW3NwXQkJCUAgQ2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCisJc3ViCXIxLCBzcCwgIzQJCQlAIEdldCB1bnVzZWQgc3RhY2sgbG9jYXRpb24KKwlzdHJleAlyMCwgcjEsIFtyMV0JCQlAIENsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogI2VuZGlmCiAJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCiAJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYwppbmRleCBjM2JhNmE5Li43MDk5N2Q1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLWZlcm9jZW9uLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitzdGF0aWMgdm9pZCBfX25ha2VkCiBmZXJvY2Vvbl9jb3B5X3VzZXJfcGFnZSh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tKQogewogCWFzbSgiXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMKaW5kZXggNzBlZDk2Yy4uZGU5YzA2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5jCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogRklYTUU6IGRvIHdlIG5lZWQgdG8gaGFuZGxlIGNhY2hlIHN0dWZmLi4uCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIHYzX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20pCiB7CiAJYXNtKCJcblwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYwppbmRleCAxNjAxNjk4Li43MzcwYTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCkBAIC00NCw3ICs0NCw3IEBACiAgKiBpbnN0cnVjdGlvbi4gIElmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBseSB0aGlzLCB5b3UgaGF2ZSB0byB3cml0ZSB5b3VyCiAgKiBvd24gY29weV91c2VyX2hpZ2hwYWdlIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIG1jX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmZyb20sIHZvaWQgKnRvKQogewogCWFzbSB2b2xhdGlsZSgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYwppbmRleCAzZWM5M2RhLi45YWIwOTg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBpbnN0cnVjdGlvbi4gIElmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBseSB0aGlzLCB5b3UgaGF2ZSB0byB3cml0ZSB5b3VyCiAgKiBvd24gY29weV91c2VyX2hpZ2hwYWdlIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIHY0d2JfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSkKIHsKIAlhc20oIlwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYwppbmRleCAwZjExODhlLi4zMDBlZmFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBkaXJ0eSBkYXRhIGluIHRoZSBjYWNoZS4gIEhvd2V2ZXIsIHdlIGRvIGhhdmUgdG8gZW5zdXJlIHRoYXQKICAqIHN1YnNlcXVlbnQgcmVhZHMgYXJlIHVwIHRvIGRhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIHY0d3RfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSkKIHsKIAlhc20oIlwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuYwppbmRleCAzOWE5OTQ1Li5iYzQ1MjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2MzLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgKiBpZiB3ZSBldmVudHVhbGx5IGVuZCB1cCB1c2luZyBvdXIgY29waWVkIHBhZ2UuCiAgKgogICovCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitzdGF0aWMgdm9pZCBfX25ha2VkCiB4c2MzX21jX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20pCiB7CiAJYXNtKCJcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCmluZGV4IGQxOGYyMzkuLjc2ODI0ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCkBAIC00Miw3ICs0Miw3IEBACiAgKiBEY2FjaGUgYWxpYXNpbmcgaXNzdWUuICBUaGUgd3JpdGVzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSB3cml0ZSBidWZmZXIsCiAgKiBhbmQgbWVyZ2VkIGFzIGFwcHJvcHJpYXRlLgogICovCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitzdGF0aWMgdm9pZCBfX25ha2VkCiBtY19jb3B5X3VzZXJfcGFnZSh2b2lkICpmcm9tLCB2b2lkICp0bykKIHsKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggMzEwZTQ3OS4uZjFlZjU2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC00OTAsMjYgKzQ5MCwzMCBAQAogICovCiB2b2lkIGRtYV9jYWNoZV9tYWludChjb25zdCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiB7Ci0JY29uc3Qgdm9pZCAqZW5kID0gc3RhcnQgKyBzaXplOworCXZvaWQgKCppbm5lcl9vcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCXZvaWQgKCpvdXRlcl9vcCkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKLQlCVUdfT04oIXZpcnRfYWRkcl92YWxpZChzdGFydCkgfHwgIXZpcnRfYWRkcl92YWxpZChlbmQgLSAxKSk7CisJQlVHX09OKCF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQpIHx8ICF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQgKyBzaXplIC0gMSkpOwogCiAJc3dpdGNoIChkaXJlY3Rpb24pIHsKIAljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLwotCQlkbWFjX2ludl9yYW5nZShzdGFydCwgZW5kKTsKLQkJb3V0ZXJfaW52X3JhbmdlKF9fcGEoc3RhcnQpLCBfX3BhKGVuZCkpOworCQlpbm5lcl9vcCA9IGRtYWNfaW52X3JhbmdlOworCQlvdXRlcl9vcCA9IG91dGVyX2ludl9yYW5nZTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfVE9fREVWSUNFOgkJLyogd3JpdGViYWNrIG9ubHkgKi8KLQkJZG1hY19jbGVhbl9yYW5nZShzdGFydCwgZW5kKTsKLQkJb3V0ZXJfY2xlYW5fcmFuZ2UoX19wYShzdGFydCksIF9fcGEoZW5kKSk7CisJCWlubmVyX29wID0gZG1hY19jbGVhbl9yYW5nZTsKKwkJb3V0ZXJfb3AgPSBvdXRlcl9jbGVhbl9yYW5nZTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfQklESVJFQ1RJT05BTDoJCS8qIHdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZSAqLwotCQlkbWFjX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpOwotCQlvdXRlcl9mbHVzaF9yYW5nZShfX3BhKHN0YXJ0KSwgX19wYShlbmQpKTsKKwkJaW5uZXJfb3AgPSBkbWFjX2ZsdXNoX3JhbmdlOworCQlvdXRlcl9vcCA9IG91dGVyX2ZsdXNoX3JhbmdlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CisKKwlpbm5lcl9vcChzdGFydCwgc3RhcnQgKyBzaXplKTsKKwlvdXRlcl9vcChfX3BhKHN0YXJ0KSwgX19wYShzdGFydCkgKyBzaXplKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2NhY2hlX21haW50KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDM0ZGY0ZDkuLjgwZmQzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTM4Miw3ICszODIsNyBAQAogCWZvcl9lYWNoX25vZGUobm9kZSkKIAkJYm9vdG1lbV9mcmVlX25vZGUobm9kZSwgbWkpOwogCi0JaGlnaF9tZW1vcnkgPSBfX3ZhKG1lbWVuZF9wZm4gPDwgUEFHRV9TSElGVCk7CisJaGlnaF9tZW1vcnkgPSBfX3ZhKChtZW1lbmRfcGZuIDw8IFBBR0VfU0hJRlQpIC0gMSkgKyAxOwogCiAJLyoKIAkgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSB1c2VkIGJ5IHRoZSBMaW51eCBtZW1vcnkgbWFuYWdlciBhbnkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCA1MzU4ZmNjLi5mNzQ1N2ZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIHsKIAlpZiAoYWRkciA8IFBIWVNfT0ZGU0VUKQogCQlyZXR1cm4gMDsKLQlpZiAoYWRkciArIHNpemUgPiBfX3BhKGhpZ2hfbWVtb3J5KSkKKwlpZiAoYWRkciArIHNpemUgPj0gX19wYShoaWdoX21lbW9yeSAtIDEpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCA5YjM2YzVjLi5kNGQwODJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtNjkzLDcgKzY5Myw4IEBACiAJCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBtZW1vcnkgYmFuayB3b3VsZCBlbnRpcmVseSBvdmVybGFwCiAJCSAqIHRoZSB2bWFsbG9jIGFyZWEuCiAJCSAqLwotCQlpZiAoX192YShiYW5rLT5zdGFydCkgPj0gVk1BTExPQ19NSU4pIHsKKwkJaWYgKF9fdmEoYmFuay0+c3RhcnQpID49IFZNQUxMT0NfTUlOIHx8CisJCSAgICBfX3ZhKGJhbmstPnN0YXJ0KSA8IFBBR0VfT0ZGU0VUKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIklnbm9yaW5nIFJBTSBhdCAlLjhseC0lLjhseCAiCiAJCQkgICAgICAgIih2bWFsbG9jIHJlZ2lvbiBvdmVybGFwKS5cbiIsCiAJCQkgICAgICAgYmFuay0+c3RhcnQsIGJhbmstPnN0YXJ0ICsgYmFuay0+c2l6ZSAtIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCmluZGV4IGRlYWZmNTguLjA0YTEwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKQEAgLTE4LDcgKzE4LDggQEAKIG9iai0kKENPTkZJR19PTUFQX0RNX1RJTUVSKSArPSBkbXRpbWVyLm8KIG9iai0kKENPTkZJR19PTUFQX0RFQlVHX0RFVklDRVMpICs9IGRlYnVnLWRldmljZXMubwogb2JqLSQoQ09ORklHX09NQVBfREVCVUdfTEVEUykgKz0gZGVidWctbGVkcy5vCi1vYmotJChDT05GSUdfSTJDX09NQVApICs9IGkyYy5vCitpMmMtb21hcC0kKENPTkZJR19JMkNfT01BUCkgOj0gaTJjLm8KK29iai15ICs9ICQoaTJjLW9tYXAtbSkgJChpMmMtb21hcC15KQogCiAjIE9NQVAgbWFpbGJveCBmcmFtZXdvcmsKIG9iai0kKENPTkZJR19PTUFQX01CT1hfRldLKSArPSBtYWlsYm94Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCAwODQzYjg4Li42ODI1ZmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCkBAIC0yMDAsMjAgKzIwMCwxNiBAQAogfTsKIAogLyoKLSAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgbnNlYy4KLSAqLwotdW5zaWduZWQgbG9uZyBsb25nIG9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKHVuc2lnbmVkIGxvbmcgdGlja3NfMzJrKQotewotCXJldHVybiBjeWMybnMoJmNsb2Nrc291cmNlXzMyaywgdGlja3NfMzJrKTsKLX0KLQotLyoKICAqIFJldHVybnMgY3VycmVudCB0aW1lIGZyb20gYm9vdCBpbiBuc2Vjcy4gSXQncyBPSyBmb3IgdGhpcyB0byB3cmFwCiAgKiBhcm91bmQgZm9yIG5vdywgYXMgaXQncyBqdXN0IGEgcmVsYXRpdmUgdGltZSBzdGFtcC4KICAqLwogdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIG9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKG9tYXBfMzJrX3JlYWQoKSk7CisJdW5zaWduZWQgbG9uZyBsb25nIHJldDsKKworCXJldCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpb21hcF8zMmtfcmVhZCgpOworCXJldCA9IChyZXQgKiBjbG9ja3NvdXJjZV8zMmsubXVsdF9vcmlnKSA+PiBjbG9ja3NvdXJjZV8zMmsuc2hpZnQ7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggZWY3MGUyYi4uZTc0NmVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0zNSw3ICszNSw3IEBACiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwogZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2VuYWJsZV9jbG9ja3MoaW50IGVuYWJsZSk7Ci0jaWZkZWYgQ09ORklHX0kyQ19PTUFQCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0kyQ19PTUFQX01PRFVMRSkKIGV4dGVybiBpbnQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLAogCQkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sCiAJCQkJIHVuc2lnbmVkIGxlbik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKaW5kZXggMmE5YzI3YS4uMzdlMmYwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaApAQCAtMTA4LDcgKzEwOCw3IEBACiAJIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpICYmIFwKIAkhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgJiYgXAogCSFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQotI2Vycm9yICJQb3dlciBtYW5hZ2VtZW50IGZvciB0aGlzIHByb2Nlc3NvciBub3QgaW1wbGVtZW50ZWQgeWV0IgorI3dhcm5pbmcgIlBvd2VyIG1hbmFnZW1lbnQgZm9yIHRoaXMgcHJvY2Vzc29yIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCmluZGV4IDk2NzE4NjQuLjBkMTJjMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCkBAIC0yNjUsNTEgKzI2NSwzNiBAQAogICogICAgICAgIHBvbGFyaXR5ICAgIExFVkVMICAgICAgICAgIG1hc2sKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGdwaW9faXJxX2VkZ2VfYWNrKHUzMiBpcnEpCi17Ci0JaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7CiAKLQl3cml0ZWwofigxIDw8IChwaW4gJiAzMSkpLCBHUElPX0VER0VfQ0FVU0UocGluKSk7CitzdGF0aWMgdm9pZCBncGlvX2lycV9hY2sodTMyIGlycSkKK3sKKwlpbnQgdHlwZSA9IGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKKwlpZiAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpIHsKKwkJaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7CisJCXdyaXRlbCh+KDEgPDwgKHBpbiAmIDMxKSksIEdQSU9fRURHRV9DQVVTRShwaW4pKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGdwaW9faXJxX2VkZ2VfbWFzayh1MzIgaXJxKQorc3RhdGljIHZvaWQgZ3Bpb19pcnFfbWFzayh1MzIgaXJxKQogewogCWludCBwaW4gPSBpcnFfdG9fZ3BpbyhpcnEpOwotCXUzMiB1OwotCi0JdSA9IHJlYWRsKEdQSU9fRURHRV9NQVNLKHBpbikpOworCWludCB0eXBlID0gaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCXUzMiByZWcgPSAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpID8KKwkJR1BJT19FREdFX01BU0socGluKSA6IEdQSU9fTEVWRUxfTUFTSyhwaW4pOworCXUzMiB1ID0gcmVhZGwocmVnKTsKIAl1ICY9IH4oMSA8PCAocGluICYgMzEpKTsKLQl3cml0ZWwodSwgR1BJT19FREdFX01BU0socGluKSk7CisJd3JpdGVsKHUsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdwaW9faXJxX2VkZ2VfdW5tYXNrKHUzMiBpcnEpCitzdGF0aWMgdm9pZCBncGlvX2lycV91bm1hc2sodTMyIGlycSkKIHsKIAlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKLQl1MzIgdTsKLQotCXUgPSByZWFkbChHUElPX0VER0VfTUFTSyhwaW4pKTsKKwlpbnQgdHlwZSA9IGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKKwl1MzIgcmVnID0gKHR5cGUgJiAoSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpKSA/CisJCUdQSU9fRURHRV9NQVNLKHBpbikgOiBHUElPX0xFVkVMX01BU0socGluKTsKKwl1MzIgdSA9IHJlYWRsKHJlZyk7CiAJdSB8PSAxIDw8IChwaW4gJiAzMSk7Ci0Jd3JpdGVsKHUsIEdQSU9fRURHRV9NQVNLKHBpbikpOwotfQotCi1zdGF0aWMgdm9pZCBncGlvX2lycV9sZXZlbF9tYXNrKHUzMiBpcnEpCi17Ci0JaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7Ci0JdTMyIHU7Ci0KLQl1ID0gcmVhZGwoR1BJT19MRVZFTF9NQVNLKHBpbikpOwotCXUgJj0gfigxIDw8IChwaW4gJiAzMSkpOwotCXdyaXRlbCh1LCBHUElPX0xFVkVMX01BU0socGluKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdwaW9faXJxX2xldmVsX3VubWFzayh1MzIgaXJxKQotewotCWludCBwaW4gPSBpcnFfdG9fZ3BpbyhpcnEpOwotCXUzMiB1OwotCi0JdSA9IHJlYWRsKEdQSU9fTEVWRUxfTUFTSyhwaW4pKTsKLQl1IHw9IDEgPDwgKHBpbiAmIDMxKTsKLQl3cml0ZWwodSwgR1BJT19MRVZFTF9NQVNLKHBpbikpOworCXdyaXRlbCh1LCByZWcpOwogfQogCiBzdGF0aWMgaW50IGdwaW9faXJxX3NldF90eXBlKHUzMiBpcnEsIHUzMiB0eXBlKQpAQCAtMzMxLDkgKzMxNiw5IEBACiAJICogU2V0IGVkZ2UvbGV2ZWwgdHlwZS4KIAkgKi8KIAlpZiAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpIHsKLQkJZGVzYy0+Y2hpcCA9ICZvcmlvbl9ncGlvX2lycV9lZGdlX2NoaXA7CisJCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7CiAJfSBlbHNlIGlmICh0eXBlICYgKElSUV9UWVBFX0xFVkVMX0hJR0ggfCBJUlFfVFlQRV9MRVZFTF9MT1cpKSB7Ci0JCWRlc2MtPmNoaXAgPSAmb3Jpb25fZ3Bpb19pcnFfbGV2ZWxfY2hpcDsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IGlycT0lZCAodHlwZT0lZClcbiIsIGlycSwgdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzcxLDE5ICszNTYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGlycV9jaGlwIG9yaW9uX2dwaW9faXJxX2VkZ2VfY2hpcCA9IHsKLQkubmFtZQkJPSAib3Jpb25fZ3Bpb19pcnFfZWRnZSIsCi0JLmFjawkJPSBncGlvX2lycV9lZGdlX2FjaywKLQkubWFzawkJPSBncGlvX2lycV9lZGdlX21hc2ssCi0JLnVubWFzawkJPSBncGlvX2lycV9lZGdlX3VubWFzaywKLQkuc2V0X3R5cGUJPSBncGlvX2lycV9zZXRfdHlwZSwKLX07Ci0KLXN0cnVjdCBpcnFfY2hpcCBvcmlvbl9ncGlvX2lycV9sZXZlbF9jaGlwID0gewotCS5uYW1lCQk9ICJvcmlvbl9ncGlvX2lycV9sZXZlbCIsCi0JLm1hc2sJCT0gZ3Bpb19pcnFfbGV2ZWxfbWFzaywKLQkubWFza19hY2sJPSBncGlvX2lycV9sZXZlbF9tYXNrLAotCS51bm1hc2sJCT0gZ3Bpb19pcnFfbGV2ZWxfdW5tYXNrLAorc3RydWN0IGlycV9jaGlwIG9yaW9uX2dwaW9faXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIm9yaW9uX2dwaW8iLAorCS5hY2sJCT0gZ3Bpb19pcnFfYWNrLAorCS5tYXNrCQk9IGdwaW9faXJxX21hc2ssCisJLnVubWFzawkJPSBncGlvX2lycV91bm1hc2ssCiAJLnNldF90eXBlCT0gZ3Bpb19pcnFfc2V0X3R5cGUsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9ncGlvLmgKaW5kZXggNTRkZWFmMi4uZWM3NDNlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaApAQCAtMzEsOCArMzEsNyBAQAogLyoKICAqIEdQSU8gaW50ZXJydXB0IGhhbmRsaW5nLgogICovCi1leHRlcm4gc3RydWN0IGlycV9jaGlwIG9yaW9uX2dwaW9faXJxX2VkZ2VfY2hpcDsKLWV4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgb3Jpb25fZ3Bpb19pcnFfbGV2ZWxfY2hpcDsKK2V4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgb3Jpb25fZ3Bpb19pcnFfY2hpcDsKIHZvaWQgb3Jpb25fZ3Bpb19pcnFfaGFuZGxlcihpbnQgaXJxb2ZmKTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzljZjZhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19QTEFUX09SSU9ONVhfV0RUX0gKKyNkZWZpbmUgX19QTEFUX09SSU9ONVhfV0RUX0gKKworc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgeworCXUzMgl0Y2xrOwkJLyogbm8gPGxpbnV4L2Nsay5oPiBzdXBwb3J0IHlldCAqLworfTsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9hdWRpby5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvYXVkaW8uaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaAppbmRleCAyNWQ0MDU4Li4wZmFkNzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCkBAIC0zMyw2ICszMyw5IEBACiAjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRQkoMSA8PCAxKQogI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFCSgxIDw8IDApCiAKKyNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfSU1TX1BDTEsJCSgwIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX0lJU01PRF9JTVNfU1lTTVVYCSgxIDw8IDEwKQorCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01BU1RFUl9JTlRFUk5BTAkoMCA8PCAxMCkKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0VYVEVSTkFMCSgxIDw8IDEwKQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TTEFWRQkJKDIgPDwgMTApCkBAIC00NCw4ICs0Nyw4IEBACiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0xSX0xMT1cJCSgwIDw8IDcpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0xSX1JMT1cJCSgxIDw8IDcpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9JSVMJCSgwIDw8IDUpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9NU0IJCSgwIDw8IDUpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9MU0IJCSgwIDw8IDUpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9NU0IJCSgxIDw8IDUpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9MU0IJCSgyIDw8IDUpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NERl9NQVNLCQkoMyA8PCA1KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzI1NkZTCSgwIDw8IDMpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfNTEyRlMJKDEgPDwgMykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKaW5kZXggY2Q5MWQxNS4uODIyYzg3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCkBAIC0xLDkgKzEsOSBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaAogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCi0gKiBTM0MyNDEwIC0gdXNiIHBvcnQgaW5mb3JtYXRpb24KKyAqIFMzQyAtIFVTQiBob3N0IHBvcnQgaW5mb3JtYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTExLDcgKzExLDcgQEAKICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9VU0JDT05UUk9MX0gKLSNkZWZpbmUgX19BU01fQVJDSF9VU0JDT05UUk9MX0ggImFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaCIKKyNkZWZpbmUgX19BU01fQVJDSF9VU0JDT05UUk9MX0gKIAogI2RlZmluZSBTM0NfSENERkxHX1VTRUQJKDEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcmVncy1paXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtaWlzLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2Nsb2NrLmMKaW5kZXggMTM2Yzk4Mi4uYWQxYjk2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2Nsb2NrLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCSZjbGtfNDhtLAogfTsKIAotdm9pZCBzM2M2NHh4X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQordm9pZCBfX2luaXQgczNjNjR4eF9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKIHsKIAlzdHJ1Y3QgY2xrICpjbGtwOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2dwaW9saWIuYwppbmRleCBjYzYyOTQxLi5lZTkxODhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9ncGlvbGliLmMKQEAgLTQxNyw0ICs0MTcsNCBAQAogCXJldHVybiAwOwogfQogCi1hcmNoX2luaXRjYWxsKHMzYzY0eHhfZ3Bpb2xpYl9pbml0KTsKK2NvcmVfaW5pdGNhbGwoczNjNjR4eF9ncGlvbGliX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaAppbmRleCAyODQ2ZjU1Li5mODY1YmY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaApAQCAtMTE3LDcgKzExNyw3IEBACiAjZGVmaW5lIElSUV9PTkVOQU5EMQkJUzNDNjRYWF9JUlFfVklDMSgxMikKICNkZWZpbmUgSVJRX05GQwkJCVMzQzY0WFhfSVJRX1ZJQzEoMTMpCiAjZGVmaW5lIElSUV9DRkNPTgkJUzNDNjRYWF9JUlFfVklDMSgxNCkKLSNkZWZpbmUgSVJRX1VIT1NUCQlTM0M2NFhYX0lSUV9WSUMxKDE1KQorI2RlZmluZSBJUlFfVVNCSAkJUzNDNjRYWF9JUlFfVklDMSgxNSkKICNkZWZpbmUgSVJRX1NQSTAJCVMzQzY0WFhfSVJRX1ZJQzEoMTYpCiAjZGVmaW5lIElSUV9TUEkxCQlTM0M2NFhYX0lSUV9WSUMxKDE3KQogI2RlZmluZSBJUlFfSUlDCQkJUzNDNjRYWF9JUlFfVklDMSgxOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKaW5kZXggMWY3Y2MwMC4uY2Y1MjQ4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKQEAgLTE0LDEyICsxNCwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtaXJxdHlwZS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtNTUsNyArNTgsNyBAQAogCXUzMiBtYXNrOwogCiAJbWFzayA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfRUlOVDBNQVNLKTsKLQltYXNrIHw9IGVpbnRfaXJxX3RvX2JpdChpcnEpOworCW1hc2sgJj0gfmVpbnRfaXJxX3RvX2JpdChpcnEpOwogCV9fcmF3X3dyaXRlbChtYXNrLCBTM0M2NFhYX0VJTlQwTUFTSyk7CiB9CiAKQEAgLTc0LDYgKzc3LDcgQEAKIHN0YXRpYyBpbnQgczNjX2lycV9laW50X3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQogewogCWludCBvZmZzID0gZWludF9vZmZzZXQoaXJxKTsKKwlpbnQgcGluOwogCWludCBzaGlmdDsKIAl1MzIgY3RybCwgbWFzazsKIAl1MzIgbmV3dmFsdWUgPSAwOwpAQCAtMTI1LDYgKzEyOSwxNSBAQAogCWN0cmwgfD0gbmV3dmFsdWUgPDwgc2hpZnQ7CiAJX19yYXdfd3JpdGVsKGN0cmwsIHJlZyk7CiAKKwkvKiBzZXQgdGhlIEdQSU8gcGluIGFwcHJvcHJpYXRlbHkgKi8KKworCWlmIChvZmZzIDwgMjMpCisJCXBpbiA9IFMzQzY0WFhfR1BOKG9mZnMpOworCWVsc2UKKwkJcGluID0gUzNDNjRYWF9HUE0ob2ZmcyAtIDIzKTsKKworCXMzY19ncGlvX2NmZ3BpbihwaW4sIFMzQ19HUElPX1NGTigyKSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxLDcgKzE5NCw3IEBACiAJczNjX2lycV9kZW11eF9laW50KDIwLCAyNyk7CiB9CiAKLWludCBfX2luaXQgczNjNjR4eF9pbml0X2lycV9laW50KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X2luaXRfaXJxX2VpbnQodm9pZCkKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMKaW5kZXggYTk0ZjFkNS4uZjIyZWRmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzM2M2NHh4X3VhcnRfaXJxKHN0cnVjdCB1YXJ0X2lycSAqdWlycSkKIHsKLQl2b2lkICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgb2ZmczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKaW5kZXggOGQ5YTBjYS4uMDViMTc1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCkBAIC0zNiw3ICszNiw3IEBACiAgKiBleHRfeHRhbF9tdXggZm9yIHdhbnQgb2YgYW4gYWN0dWFsIG5hbWUgZnJvbSB0aGUgbWFudWFsLgogKi8KIAotc3RydWN0IGNsayBjbGtfZXh0X3h0YWxfbXV4ID0geworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2V4dF94dGFsX211eCA9IHsKIAkubmFtZQkJPSAiZXh0X3h0YWwiLAogCS5pZAkJPSAtMSwKIH07CkBAIC02Myw3ICs2Myw3IEBACiAJdm9pZCBfX2lvbWVtCQkqcmVnX2RpdmlkZXI7CiB9OwogCi1zdHJ1Y3QgY2xrIGNsa19mb3V0X2FwbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsayBjbGtfZm91dF9hcGxsID0gewogCS5uYW1lCQk9ICJmb3V0X2FwbGwiLAogCS5pZAkJPSAtMSwKIH07CkBAIC03OCw3ICs3OCw3IEBACiAJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfYXBsbF9saXN0KSwKIH07CiAKLXN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2FwbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfYXBsbCA9IHsKIAkuY2xrCT0gewogCQkubmFtZQkJPSAibW91dF9hcGxsIiwKIAkJLmlkCQk9IC0xLApAQCAtODgsNyArODgsNyBAQAogCS5zb3VyY2VzCT0gJmNsa19zcmNfYXBsbCwKIH07CiAKLXN0cnVjdCBjbGsgY2xrX2ZvdXRfZXBsbCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mb3V0X2VwbGwgPSB7CiAJLm5hbWUJCT0gImZvdXRfZXBsbCIsCiAJLmlkCQk9IC0xLAogfTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2VwbGxfbGlzdCksCiB9OwogCi1zdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9lcGxsID0geworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2VwbGwgPSB7CiAJLmNsawk9IHsKIAkJLm5hbWUJCT0gIm1vdXRfZXBsbCIsCiAJCS5pZAkJPSAtMSwKQEAgLTEyMyw3ICsxMjMsNyBAQAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX21wbGxfbGlzdCksCiB9OwogCi1zdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9tcGxsID0geworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X21wbGwgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gIm1vdXRfbXBsbCIsCiAJCS5pZAkJPSAtMSwKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJldHVybiByYXRlOwogfQogCi1zdHJ1Y3QgY2xrIGNsa19kb3V0X21wbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsayBjbGtfZG91dF9tcGxsID0gewogCS5uYW1lCQk9ICJkb3V0X21wbGwiLAogCS5pZAkJPSAtMSwKIAkucGFyZW50CQk9ICZjbGtfbW91dF9tcGxsLmNsaywKQEAgLTE4OSwxMCArMTg5LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3Vob3N0X2xpc3RbXSA9IHsKKwkmY2xrXzQ4bSwKIAkmY2xrX21vdXRfZXBsbC5jbGssCiAJJmNsa19kb3V0X21wbGwsCiAJJmNsa19maW5fZXBsbCwKLQkmY2xrXzQ4bSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X3Vob3N0ID0gewpAQCAtMjM5LDEwICsyMzksMTIgQEAKIAogCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShjbGssIHJhdGUpOwogCWRpdiA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyByYXRlOworCWlmIChkaXYgPiAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCXZhbCAmPSB+c2Nsay0+bWFzazsKLQl2YWwgfD0gKHJhdGUgLSAxKSA8PCBzY2xrLT5zaGlmdDsKKwl2YWwgJj0gfigweGYgPDwgc2Nsay0+c2hpZnQpOworCXZhbCB8PSAoZGl2IC0gMSkgPDwgc2Nsay0+c2hpZnQ7CiAJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKIAogCXJldHVybiAwOwpAQCAtMzUxLDcgKzM1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfdXNiaG9zdCA9IHsKIAkuY2xrCT0gewotCQkubmFtZQkJPSAidXNiLWhvc3QtYnVzIiwKKwkJLm5hbWUJCT0gInVzYi1idXMtaG9zdCIsCiAJCS5pZAkJPSAtMSwKIAkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX1VIT1NULAogCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggZmQyM2MwZS4uYjQyMTFkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogU3VuIE5vdiAzMCAxNjozOTozNiAyMDA4CisjIExhc3QgdXBkYXRlOiBUaHUgTWFyIDEyIDE4OjAxOjQ1IDIwMDkKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTgxMSw3ICsxODExLDcgQEAKIGphZGUJCQlNQUNIX0pBREUJCUpBREUJCQkxODIxCiBrczg2OTVfc29mdHBsYwkJTUFDSF9LUzg2OTVfU09GVFBMQwlLUzg2OTVfU09GVFBMQwkJMTgyMgogZ3ByaXNjMwkJCU1BQ0hfR1BSSVNDMwkJR1BSSVNDMwkJCTE4MjMKLXN0YW1wOTI2MAkJTUFDSF9TVEFNUDkyNjAJCVNUQU1QOTI2MAkJMTgyNAorc3RhbXA5ZzIwCQlNQUNIX1NUQU1QOUcyMAkJU1RBTVA5RzIwCQkxODI0CiBzbWRrNjQzMAkJTUFDSF9TTURLNjQzMAkJU01ESzY0MzAJCTE4MjUKIHNtZGtjMTAwCQlNQUNIX1NNREtDMTAwCQlTTURLQzEwMAkJMTgyNgogdGF2b3JldmIJCU1BQ0hfVEFWT1JFVkIJCVRBVk9SRVZCCQkxODI3CkBAIC0xOTkzLDQgKzE5OTMsMTM0IEBACiBiZW56aW5hCQkJTUFDSF9CRU5aSU5BCQlCRU5aSU5BCQkJMjAwMwogYmxhemUJCQlNQUNIX0JMQVpFCQlCTEFaRQkJCTIwMDQKIGxpbmtzdGF0aW9uX2xzX2hnbAlNQUNIX0xJTktTVEFUSU9OX0xTX0hHTAlMSU5LU1RBVElPTl9MU19IR0wJMjAwNQotaHRjdmVudXMJCU1BQ0hfSFRDVkVOVVMJCUhUQ1ZFTlVTCQkyMDA2CitodGNrb3Zza3kJCU1BQ0hfSFRDVkVOVVMJCUhUQ1ZFTlVTCQkyMDA2Citzb255X3ByczUwNQkJTUFDSF9TT05ZX1BSUzUwNQlTT05ZX1BSUzUwNQkJMjAwNworaGFubGluX3YzCQlNQUNIX0hBTkxJTl9WMwkJSEFOTElOX1YzCQkyMDA4CitzYXBwaGlyYQkJTUFDSF9TQVBQSElSQQkJU0FQUEhJUkEJCTIwMDkKK2RhY2tfc2RhXzAxCQlNQUNIX0RBQ0tfU0RBXzAxCURBQ0tfU0RBXzAxCQkyMDEwCithcm1ib3gJCQlNQUNIX0FSTUJPWAkJQVJNQk9YCQkJMjAxMQoraGFycmlzX3J2cAkJTUFDSF9IQVJSSVNfUlZQCQlIQVJSSVNfUlZQCQkyMDEyCityaWJhbGRvCQkJTUFDSF9SSUJBTERPCQlSSUJBTERPCQkJMjAxMworYWdvcmEJCQlNQUNIX0FHT1JBCQlBR09SQQkJCTIwMTQKK29tYXAzX21pbmkJCU1BQ0hfT01BUDNfTUlOSQkJT01BUDNfTUlOSQkJMjAxNQorYTlzYW02NDMyX2IJCU1BQ0hfQTlTQU02NDMyX0IJQTlTQU02NDMyX0IJCTIwMTYKK3VzZzI0MTAJCQlNQUNIX1VTRzI0MTAJCVVTRzI0MTAJCQkyMDE3CitwYzcyMDUyX2kxMF9yZXZiCU1BQ0hfUEM3MjA1Ml9JMTBfUkVWQglQQzcyMDUyX0kxMF9SRVZCCTIwMTgKK214MzVfZXhtMzIJCU1BQ0hfTVgzNV9FWE0zMgkJTVgzNV9FWE0zMgkJMjAxOQordG9wYXM5MTAJCU1BQ0hfVE9QQVM5MTAJCVRPUEFTOTEwCQkyMDIwCitoeWVuYQkJCU1BQ0hfSFlFTkEJCUhZRU5BCQkJMjAyMQorcG9zcGF4CQkJTUFDSF9QT1NQQVgJCVBPU1BBWAkJCTIwMjIKK2hkbF9neAkJCU1BQ0hfSERMX0dYCQlIRExfR1gJCQkyMDIzCitjdGVyYV80YmF5CQlNQUNIX0NURVJBXzRCQVkJCUNURVJBXzRCQVkJCTIwMjQKK2N0ZXJhX3BsdWdfYwkJTUFDSF9DVEVSQV9QTFVHX0MJQ1RFUkFfUExVR19DCQkyMDI1CitjcndlYV9wbHVnX2kJCU1BQ0hfQ1JXRUFfUExVR19JCUNSV0VBX1BMVUdfSQkJMjAyNgorZWdhdWdlMgkJCU1BQ0hfRUdBVUdFMgkJRUdBVUdFMgkJCTIwMjcKK2RpZGoJCQlNQUNIX0RJREoJCURJREoJCQkyMDI4CittX3MzYzI0NDMJCU1BQ0hfTUVJU1RFUgkJTUVJU1RFUgkJCTIwMjkKK2h0Y2JsYWNrc3RvbmUJCU1BQ0hfSFRDQkxBQ0tTVE9ORQlIVENCTEFDS1NUT05FCQkyMDMwCitjcHVhdDlnMjAJCU1BQ0hfQ1BVQVQ5RzIwCQlDUFVBVDlHMjAJCTIwMzEKK3NtZGs2NDQwCQlNQUNIX1NNREs2NDQwCQlTTURLNjQ0MAkJMjAzMgorb21hcF8zNXh4X212cAkJTUFDSF9PTUFQXzM1WFhfTVZQCU9NQVBfMzVYWF9NVlAJCTIwMzMKK2N0ZXJhX3BsdWdfaQkJTUFDSF9DVEVSQV9QTFVHX0kJQ1RFUkFfUExVR19JCQkyMDM0Citwdmc2MTBfMTAwCQlNQUNIX1BWRzYxMAkJUFZHNjEwCQkJMjAzNQoraHBydzY4MTUJCU1BQ0hfSFBSVzY4MTUJCUhQUlc2ODE1CQkyMDM2CitvbWFwM19vc3dhbGQJCU1BQ0hfT01BUDNfT1NXQUxECU9NQVAzX09TV0FMRAkJMjAzNworbmFzNDIyMGIJCU1BQ0hfTkFTNDIyMEIJCU5BUzQyMjBCCQkyMDM4CitodGNyYXBoYWVsX2NkbWEJCU1BQ0hfSFRDUkFQSEFFTF9DRE1BCUhUQ1JBUEhBRUxfQ0RNQQkJMjAzOQoraHRjZGlhbW9uZF9jZG1hCQlNQUNIX0hUQ0RJQU1PTkRfQ0RNQQlIVENESUFNT05EX0NETUEJCTIwNDAKK3NjYWxlcgkJCU1BQ0hfU0NBTEVSCQlTQ0FMRVIJCQkyMDQxCit6eWxvbml0ZTIJCU1BQ0hfWllMT05JVEUyCQlaWUxPTklURTIJCTIwNDIKK2FzcGVuaXRlCQlNQUNIX0FTUEVOSVRFCQlBU1BFTklURQkJMjA0MwordGV0b24JCQlNQUNIX1RFVE9OCQlURVRPTgkJCTIwNDQKK3R0Y19ka2IJCQlNQUNIX1RUQ19ES0IJCVRUQ19ES0IJCQkyMDQ1CitiaXNob3AyCQkJTUFDSF9CSVNIT1AyCQlCSVNIT1AyCQkJMjA0NgoraXBwdjUJCQlNQUNIX0lQUFY1CQlJUFBWNQkJCTIwNDcKK2Zhcm05MjYJCQlNQUNIX0ZBUk05MjYJCUZBUk05MjYJCQkyMDQ4CittbWNjcHUJCQlNQUNIX01NQ0NQVQkJTU1DQ1BVCQkJMjA0OQorc2dtc2ZsCQkJTUFDSF9TR01TRkwJCVNHTVNGTAkJCTIwNTAKK3R0ODAwMAkJCU1BQ0hfVFQ4MDAwCQlUVDgwMDAJCQkyMDUxCit6cm40MzAwbHAJCU1BQ0hfWlJONDMwMExQCQlaUk40MzAwTFAJCTIwNTIKK21wdGMJCQlNQUNIX01QVEMJCU1QVEMJCQkyMDUzCitoNjA1MQkJCU1BQ0hfSDYwNTEJCUg2MDUxCQkJMjA1NAorcHZnNjEwXzEwMQkJTUFDSF9QVkc2MTBfMTAxCQlQVkc2MTBfMTAxCQkyMDU1CitzdGFtcDkyNjFfcGNfZXZiCU1BQ0hfU1RBTVA5MjYxX1BDX0VWQglTVEFNUDkyNjFfUENfRVZCCTIwNTYKK3BlbGNvX29keXNzZXVzCQlNQUNIX1BFTENPX09EWVNTRVVTCVBFTENPX09EWVNTRVVTCQkyMDU3Cit0bnlfYTkyNjAJCU1BQ0hfVE5ZX0E5MjYwCQlUTllfQTkyNjAJCTIwNTgKK3RueV9hOWcyMAkJTUFDSF9UTllfQTlHMjAJCVROWV9BOUcyMAkJMjA1OQorYWVzb3BfbXAyNTMwZgkJTUFDSF9BRVNPUF9NUDI1MzBGCUFFU09QX01QMjUzMEYJCTIwNjAKK2R4OTAwCQkJTUFDSF9EWDkwMAkJRFg5MDAJCQkyMDYxCitjcG9kYzIJCQlNQUNIX0NQT0RDMgkJQ1BPREMyCQkJMjA2MgordGlsdF84OTI1CQlNQUNIX1RJTFRfODkyNQkJVElMVF84OTI1CQkyMDYzCitkYXZpbmNpX2RtMzU3X2V2bQlNQUNIX0RBVklOQ0lfRE0zNTdfRVZNCURBVklOQ0lfRE0zNTdfRVZNCTIwNjQKK3N3b3JkZmlzaAkJTUFDSF9TV09SREZJU0gJCVNXT1JERklTSAkJMjA2NQorY29ydnVzCQkJTUFDSF9DT1JWVVMJCUNPUlZVUwkJCTIwNjYKK3RhdXJ1cwkJCU1BQ0hfVEFVUlVTCQlUQVVSVVMJCQkyMDY3CitheG0JCQlNQUNIX0FYTQkJQVhNCQkJMjA2OAorYXhjCQkJTUFDSF9BWEMJCUFYQwkJCTIwNjkKK2JhYnkJCQlNQUNIX0JBQlkJCUJBQlkJCQkyMDcwCittcDIwMAkJCU1BQ0hfTVAyMDAJCU1QMjAwCQkJMjA3MQorcGNtMDQzCQkJTUFDSF9QQ00wNDMJCVBDTTA0MwkJCTIwNzIKK2hhbmxpbl92M2MJCU1BQ0hfSEFOTElOX1YzQwkJSEFOTElOX1YzQwkJMjA3Mwora2JrOWcyMAkJCU1BQ0hfS0JLOUcyMAkJS0JLOUcyMAkJCTIwNzQKK2Fkc3R1cmJvZzUJCU1BQ0hfQURTVFVSQk9HNQkJQURTVFVSQk9HNQkJMjA3NQorYXZlbmdlcl9saXRlMQkJTUFDSF9BVkVOR0VSX0xJVEUxCUFWRU5HRVJfTElURTEJCTIwNzYKK3N1YzgyeAkJCU1BQ0hfU1VDCQlTVUMJCQkyMDc3CithdDkxc2FtN3MyNTYJCU1BQ0hfQVQ5MVNBTTdTMjU2CUFUOTFTQU03UzI1NgkJMjA3OAorbWVuZG96YQkJCU1BQ0hfTUVORE9aQQkJTUVORE9aQQkJCTIwNzkKK2tpcmEJCQlNQUNIX0tJUkEJCUtJUkEJCQkyMDgwCitteDFoYm0JCQlNQUNIX01YMUhCTQkJTVgxSEJNCQkJMjA4MQorcXVhdHJvNDN4eAkJTUFDSF9RVUFUUk80M1hYCQlRVUFUUk80M1hYCQkyMDgyCitxdWF0cm80MjMwCQlNQUNIX1FVQVRSTzQyMzAJCVFVQVRSTzQyMzAJCTIwODMKK25zYjQwMAkJCU1BQ0hfTlNCNDAwCQlOU0I0MDAJCQkyMDg0CitkcnAyNTUJCQlNQUNIX0RSUDI1NQkJRFJQMjU1CQkJMjA4NQordGhvdGgJCQlNQUNIX1RIT1RICQlUSE9USAkJCTIwODYKK2ZpcmVzdG9uZQkJTUFDSF9GSVJFU1RPTkUJCUZJUkVTVE9ORQkJMjA4NworYXN1c3A3NTAJCU1BQ0hfQVNVU1A3NTAJCUFTVVNQNzUwCQkyMDg4CitjdGVyYV9kbAkJTUFDSF9DVEVSQV9ETAkJQ1RFUkFfREwJCTIwODkKK3NvY3IJCQlNQUNIX1NPQ1IJCVNPQ1IJCQkyMDkwCitodGNveHlnZW4JCU1BQ0hfSFRDT1hZR0VOCQlIVENPWFlHRU4JCTIwOTEKK2hlcm9jCQkJTUFDSF9IRVJPQwkJSEVST0MJCQkyMDkyCit6ZW5vNjgwMAkJTUFDSF9aRU5PNjgwMAkJWkVOTzY4MDAJCTIwOTMKK3NjMm1jcwkJCU1BQ0hfU0MyTUNTCQlTQzJNQ1MJCQkyMDk0CitnZW5lMTAwCQkJTUFDSF9HRU5FMTAwCQlHRU5FMTAwCQkJMjA5NQorYXMzNTN4CQkJTUFDSF9BUzM1M1gJCUFTMzUzWAkJCTIwOTYKK3NoZWV2YXBsdWcJCU1BQ0hfU0hFRVZBUExVRwkJU0hFRVZBUExVRwkJMjA5NworYXQ5MXNhbTlnMjAJCU1BQ0hfQVQ5MVNBTTlHMjAJQVQ5MVNBTTlHMjAJCTIwOTgKK212ODhmNjE5Mmd0d19mZQkJTUFDSF9NVjg4RjYxOTJHVFdfRkUJTVY4OEY2MTkyR1RXX0ZFCQkyMDk5CitjYzkyMDAJCQlNQUNIX0NDOTIwMAkJQ0M5MjAwCQkJMjEwMAorc205MjAwCQkJTUFDSF9TTTkyMDAJCVNNOTIwMAkJCTIxMDEKK3RwOTIwMAkJCU1BQ0hfVFA5MjAwCQlUUDkyMDAJCQkyMTAyCitzbmFwcGVyZHYJCU1BQ0hfU05BUFBFUkRWCQlTTkFQUEVSRFYJCTIxMDMKK2F2ZW5nZXJzX2xpdGUJCU1BQ0hfQVZFTkdFUlNfTElURQlBVkVOR0VSU19MSVRFCQkyMTA0CithdmVuZ2Vyc19saXRlMQkJTUFDSF9BVkVOR0VSU19MSVRFMQlBVkVOR0VSU19MSVRFMQkJMjEwNQorb21hcDNheG9uCQlNQUNIX09NQVAzQVhPTgkJT01BUDNBWE9OCQkyMTA2CittYTh4eAkJCU1BQ0hfTUE4WFgJCU1BOFhYCQkJMjEwNworbXAyMDFlawkJCU1BQ0hfTVAyMDFFSwkJTVAyMDFFSwkJCTIxMDgKK2RhdmluY2lfdHV4CQlNQUNIX0RBVklOQ0lfVFVYCURBVklOQ0lfVFVYCQkyMTA5CittcGExNjAwCQkJTUFDSF9NUEExNjAwCQlNUEExNjAwCQkJMjExMAorcGVsY29fdHJveQkJTUFDSF9QRUxDT19UUk9ZCQlQRUxDT19UUk9ZCQkyMTExCituc2I2NjcJCQlNQUNIX05TQjY2NwkJTlNCNjY3CQkJMjExMgorcm92ZXJzNV80bXBpeAkJTUFDSF9ST1ZFUlM1XzRNUElYCVJPVkVSUzVfNE1QSVgJCTIxMTMKK3R3b2NvbQkJCU1BQ0hfVFdPQ09NCQlUV09DT00JCQkyMTE0Cit1YmlzeXNfcDlfcmN1M3IyCU1BQ0hfVUJJU1lTX1A5X1JDVTNSMglVQklTWVNfUDlfUkNVM1IyCTIxMTUKK2hlcm9fZXNwcmVzc28JCU1BQ0hfSEVST19FU1BSRVNTTwlIRVJPX0VTUFJFU1NPCQkyMTE2CithZmV1c2IJCQlNQUNIX0FGRVVTQgkJQUZFVVNCCQkJMjExNwordDgzMAkJCU1BQ0hfVDgzMAkJVDgzMAkJCTIxMTgKK3NwZDgwMjBfY2MJCU1BQ0hfU1BEODAyMF9DQwkJU1BEODAyMF9DQwkJMjExOQorb21fM2Q3awkJCU1BQ0hfT01fM0Q3SwkJT01fM0Q3SwkJCTIxMjAKK3BpY29jb20yCQlNQUNIX1BJQ09DT00yCQlQSUNPQ09NMgkJMjEyMQordXdnNG14MjcJCU1BQ0hfVVdHNE1YMjcJCVVXRzRNWDI3CQkyMTIyCit1d2c0bXgzMQkJTUFDSF9VV0c0TVgzMQkJVVdHNE1YMzEJCTIxMjMKK2NoZXJyeQkJCU1BQ0hfQ0hFUlJZCQlDSEVSUlkJCQkyMTI0CitteDUxX2JhYmJhZ2UJCU1BQ0hfTVg1MV9CQUJCQUdFCU1YNTFfQkFCQkFHRQkJMjEyNQorczNjMjQ0MHR1cmtpeWUJCU1BQ0hfUzNDMjQ0MFRVUktJWUUJUzNDMjQ0MFRVUktJWUUJCTIxMjYKK3R4MzcJCQlNQUNIX1RYMzcJCVRYMzcJCQkyMTI3CitzYmMyODAwXzlnMjAJCU1BQ0hfU0JDMjgwMF85RzIwCVNCQzI4MDBfOUcyMAkJMjEyOAorYmVuemdsYgkJCU1BQ0hfQkVOWkdMQgkJQkVOWkdMQgkJCTIxMjkKK2Jlbnp0ZAkJCU1BQ0hfQkVOWlRECQlCRU5aVEQJCQkyMTMwCitjYXJ0ZXNpb19wbHVzCQlNQUNIX0NBUlRFU0lPX1BMVVMJQ0FSVEVTSU9fUExVUwkJMjEzMQorc29scmFkX2cyMAkJTUFDSF9TT0xSQURfRzIwCQlTT0xSQURfRzIwCQkyMTMyCitteDI3d2FsbGFjZQkJTUFDSF9NWDI3V0FMTEFDRQlNWDI3V0FMTEFDRQkJMjEzMworZm16d2VibW9kdWwJCU1BQ0hfRk1aV0VCTU9EVUwJRk1aV0VCTU9EVUwJCTIxMzQKK3JkNzh4MDBfbWFzYQkJTUFDSF9SRDc4WDAwX01BU0EJUkQ3OFgwMF9NQVNBCQkyMTM1CitzbWFsbG9nZ2VyCQlNQUNIX1NNQUxMT0dHRVIJCVNNQUxMT0dHRVIJCTIxMzYKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYwppbmRleCBhOThjNmRkLi41NTliYmNiMCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2lzcDExNnguaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL3BvcnRtdXguaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggYTE0YWE1Yi4uMTRjYzczNyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTQsNyArNCw3IEBACiAjaWZuZGVmIF9fQVNNX0FWUjMyX1NXQUJfSAogI2RlZmluZSBfX0FTTV9BVlIzMl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IGVkMDkyMzkuLjI0NWIyZWUyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMjMwLDEwICsyMzAsMTAgQEAKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKIAkJIjE6CWxkLiIgc3VmZml4ICIJJTEsICUzCQkJXG4iCVwKIAkJIjI6CQkJCQkJXG4iCVwKLQkJIgkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIgkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMQkJCQlcbiIJXAogCQkiMzoJbW92CSUwLCAlNAkJCQlcbiIJXAogCQkiCXJqbXAJMmIJCQkJXG4iCVwKLQkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAwCQkJCVxuIglcCiAJCSIJLnNlY3Rpb24gX19leF90YWJsZSwgXCJhXCIJCVxuIglcCiAJCSIJLmxvbmcJMWIsIDNiCQkJCVxuIglcCiAJCSIJLnByZXZpb3VzCQkJCVxuIglcCkBAIC0yOTUsMTAgKzI5NSwxMCBAQAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAogCQkiMToJc3QuIiBzdWZmaXggIgklMSwgJTMJCQlcbiIJXAogCQkiMjoJCQkJCQlcbiIJXAotCQkiCS5zZWN0aW9uIC5maXh1cCwgXCJheFwiCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAxCQkJCVxuIglcCiAJCSIzOgltb3YJJTAsICU0CQkJCVxuIglcCiAJCSIJcmptcAkyYgkJCQlcbiIJXAotCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDAJCQkJXG4iCVwKIAkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIgkJXG4iCVwKIAkJIgkubG9uZwkxYiwgM2IJCQkJXG4iCVwKIAkJIgkucHJldmlvdXMJCQkJXG4iCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKaW5kZXggMzNkNDkzNy4uMDA5YTgwMSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKQEAgLTE1MCwxMCArMTUwLDEwIEBACiAJdGxibWlzc19yZXN0b3JlCiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fcGFnZV9mYXVsdAorCWNhbGwJZG9fcGFnZV9mYXVsdAogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMgpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIAkuZ2xvYmFsIHJldF9mcm9tX2ZvcmsKIHJldF9mcm9tX2Zvcms6Ci0JcmNhbGwgICBzY2hlZHVsZV90YWlsCisJY2FsbCAgIHNjaGVkdWxlX3RhaWwKIAogCS8qIGNoZWNrIGZvciBzeXNjYWxsIHRyYWNpbmcgKi8KIAlnZXRfdGhyZWFkX2luZm8gcjAKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiBzeXNjYWxsX3RyYWNlX2VudGVyOgogCXB1c2htCXI4LXIxMgotCXJjYWxsCXN5c2NhbGxfdHJhY2UKKwljYWxsCXN5c2NhbGxfdHJhY2UKIAlwb3BtCXI4LXIxMgogCXJqbXAJc3lzY2FsbF90cmFjZV9jb250CiAKQEAgLTI2OSwxNCArMjY5LDE0IEBACiAJYmxkCXIxLCBUSUZfU1lTQ0FMTF9UUkFDRQogCWJyY2MJMWYKIAl1bm1hc2tfaW50ZXJydXB0cwotCXJjYWxsCXN5c2NhbGxfdHJhY2UKKwljYWxsCXN5c2NhbGxfdHJhY2UKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAogMToJYmxkCXIxLCBUSUZfTkVFRF9SRVNDSEVECiAJYnJjYwkyZgogCXVubWFza19pbnRlcnJ1cHRzCi0JcmNhbGwJc2NoZWR1bGUKKwljYWxsCXNjaGVkdWxlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAkxYgpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCBzcAogCW1vdglyMTEsIHIwCi0JcmNhbGwJZG9fbm90aWZ5X3Jlc3VtZQorCWNhbGwJZG9fbm90aWZ5X3Jlc3VtZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJMWIKQEAgLTM5NCw3ICszOTQsNyBAQAogCiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2NyaXRpY2FsX2V4Y2VwdGlvbgorCWNhbGwJZG9fY3JpdGljYWxfZXhjZXB0aW9uCiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuLi4gKi8KIGJhZF9yZXR1cm46CkBAIC00MDcsMTggKzQwNywxOCBAQAogZG9fYnVzX2Vycm9yX3dyaXRlOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbW92CXIxMSwgMQogCXJqbXAJMWYKIAogZG9fYnVzX2Vycm9yX3JlYWQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltb3YJcjExLCAwCiAxOgltZnNyCXIxMiwgU1lTUkVHX0JFQVIKIAltb3YJcjEwLCBzcAotCXJjYWxsCWRvX2J1c19lcnJvcgorCWNhbGwJZG9fYnVzX2Vycm9yCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogCS5hbGlnbgkxCkBAIC00MzMsNyArNDMzLDcgQEAKIDE6CXB1c2htCXI4LCByOQkvKiBQQyBhbmQgU1IgKi8KIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fbm1pCisJY2FsbAlkb19ubWkKIAlwb3BtCXI4LXI5CiAJbXRzcglTWVNSRUdfUkFSX05NSSwgcjgKIAl0c3QJcjAsIHIwCkBAIC00NTcsMjkgKzQ1NywyOSBAQAogaGFuZGxlX2FkZHJlc3NfZmF1bHQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fYWRkcmVzc19leGNlcHRpb24KKwljYWxsCWRvX2FkZHJlc3NfZXhjZXB0aW9uCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogaGFuZGxlX3Byb3RlY3Rpb25fZmF1bHQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fcGFnZV9mYXVsdAorCWNhbGwJZG9fcGFnZV9mYXVsdAogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMQogZG9faWxsZWdhbF9vcGNvZGVfbGw6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9faWxsZWdhbF9vcGNvZGUKKwljYWxsCWRvX2lsbGVnYWxfb3Bjb2RlCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogZG9fZHRsYl9tb2RpZmllZDoKQEAgLTUxMywxMSArNTEzLDExIEBACiBkb19mcGVfbGw6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAl1bm1hc2tfaW50ZXJydXB0cwogCW1vdglyMTIsIDI2CiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19mcGUKKwljYWxsCWRvX2ZwZQogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKQEAgLTU1Myw3ICs1NTMsNyBAQAogCWxkZHNwCXI0LCBzcFtSRUdfU1JdCiAJYmxkCXI0LCBTWVNSRUdfR01fT0ZGU0VUCiAJYnJjcwkxZgotCXJjYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCisJY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQogMToKICNlbmRpZgogCkBAIC01ODIsNyArNTgyLDcgQEAKIAlibGQJcjEsIFRJRl9ORUVEX1JFU0NIRUQKIAlicmNjCTFmCiAJdW5tYXNrX2ludGVycnVwdHMKLQlyY2FsbAlzY2hlZHVsZQorCWNhbGwJc2NoZWR1bGUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCWZhdWx0X2V4aXRfd29yawpAQCAtNTkzLDcgKzU5Myw3IEBACiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCBzcAogCW1vdglyMTEsIHIwCi0JcmNhbGwJZG9fbm90aWZ5X3Jlc3VtZQorCWNhbGwJZG9fbm90aWZ5X3Jlc3VtZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJZmF1bHRfZXhpdF93b3JrCkBAIC02MTYsMTAgKzYxNiwxMCBAQAogCiAuTGRlYnVnX2ZpeHVwX2NvbnQ6CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmCisJY2FsbAl0cmFjZV9oYXJkaXJxc19vZmYKICNlbmRpZgogCW1vdglyMTIsIHNwCi0JcmNhbGwJZG9fZGVidWcKKwljYWxsCWRvX2RlYnVnCiAJbW92CXNwLCByMTIKIAogCWxkZHNwCXIyLCBzcFtSRUdfU1JdCkBAIC02NDMsNyArNjQzLDcgQEAKIAltdHNyCVNZU1JFR19SU1JfREJHLCByMTEKIAltdHNyCVNZU1JFR19SQVJfREJHLCByMTAKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KIDE6CiAjZW5kaWYKIAlsZG10cwlzcCsrLCByMC1scgpAQCAtNjc2LDcgKzY3Niw3IEBACiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJYmxkCXIxMSwgU1lTUkVHX0dNX09GRlNFVAogCWJyY2MJMWYKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KIDE6CiAjZW5kaWYKIAltZnNyCXIyLCBTWVNSRUdfU1IKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCW1vdglyMTEsIHNwCiAJbW92CXIxMiwgXGxldmVsCiAKLQlyY2FsbAlkb19JUlEKKwljYWxsCWRvX0lSUQogCiAJbGRkc3AJcjQsIHNwW1JFR19TUl0KIAliZmV4dHUJcjQsIHI0LCBTWVNSRUdfTTBfT0ZGU0VULCAzCkBAIC03NjcsNyArNzY3LDcgQEAKIAogMToKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KICNlbmRpZgogCXBvcG0JcjgtcjkKIAltdHNyCXJhcl9pbnRcbGV2ZWwsIHI4CkBAIC04MDcsNyArODA3LDcgQEAKIAlsZGRzcAlyNCwgc3BbUkVHX1NSXQogCWJsZAlyNCwgU1lTUkVHX0dNX09GRlNFVAogCWJyY3MJMWIKLQlyY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQorCWNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKICNlbmRpZgogCXJqbXAJMWIKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwppbmRleCBhOGU3NjdkLi45ZjU3MjIyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCmluZGV4IDY3MzE3OGUuLmY3MjQ0Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKQEAgLTYxLDcgKzYxLDcgQEAKIF9fc3lzX21tYXAyOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX21tYXAyCisJY2FsbAlzeXNfbW1hcDIKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC03MCw3ICs3MCw3IEBACiBfX3N5c19zZW5kdG86CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc2VuZHRvCisJY2FsbAlzeXNfc2VuZHRvCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtNzksNyArNzksNyBAQAogX19zeXNfcmVjdmZyb206CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfcmVjdmZyb20KKwljYWxsCXN5c19yZWN2ZnJvbQogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTg4LDcgKzg4LDcgQEAKIF9fc3lzX3BzZWxlY3Q2OgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3BzZWxlY3Q2CisJY2FsbAlzeXNfcHNlbGVjdDYKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC05Nyw3ICs5Nyw3IEBACiBfX3N5c19zcGxpY2U6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc3BsaWNlCisJY2FsbAlzeXNfc3BsaWNlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtMTA2LDcgKzEwNiw3IEBACiBfX3N5c19lcG9sbF9wd2FpdDoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19lcG9sbF9wd2FpdAorCWNhbGwJc3lzX2Vwb2xsX3B3YWl0CiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtMTE1LDYgKzExNSw2IEBACiBfX3N5c19zeW5jX2ZpbGVfcmFuZ2U6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc3luY19maWxlX3JhbmdlCisJY2FsbAlzeXNfc3luY19maWxlX3JhbmdlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TIGIvYXJjaC9hdnIzMi9saWIvc3Rybmxlbl91c2VyLlMKaW5kZXggNjVjZTExYS4uZTQ2ZjQ3MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCisrKyBiL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCkBAIC00OCw3ICs0OCw3IEBACiAJbGRkcGMJbHIsIF90YXNrX3NpemUKIAlzdWIJcjExLCBsciwgcjEyCiAJbW92CXI5LCByMTEKLQlyY2FsbAlfX3N0cm5sZW5fdXNlcgorCWNhbGwJX19zdHJubGVuX3VzZXIKIAljcC53CXIxMiwgcjkKIAlicmd0CTFmCiAJcG9wbQlwYwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKaW5kZXggYWFmYWY3YS4uY2ZmOGU4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaApAQCAtMTE2LDYgKzExNiw3IEBACiAJaW50CWVuYWJsZV9waW47CS8qIGNoaXAgZW5hYmxlICovCiAJaW50CWRldF9waW47CS8qIGNhcmQgZGV0ZWN0ICovCiAJaW50CXJkeV9waW47CS8qIHJlYWR5L2J1c3kgKi8KKwl1OAlyZHlfcGluX2FjdGl2ZV9sb3c7CS8qIHJkeV9waW4gdmFsdWUgaXMgaW52ZXJ0ZWQgKi8KIAl1OAlhbGU7CQkvKiBhZGRyZXNzIGxpbmUgbnVtYmVyIGNvbm5lY3RlZCB0byBBTEUgKi8KIAl1OAljbGU7CQkvKiBhZGRyZXNzIGxpbmUgbnVtYmVyIGNvbm5lY3RlZCB0byBDTEUgKi8KIAl1OAlidXNfd2lkdGhfMTY7CS8qIGJ1c3dpZHRoIGlzIDE2IGJpdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCmluZGV4IDhmMWY5N2QuLjBjMWY4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKQEAgLTExMjksNiArMTEyOSw3IEBACiAKIGNvbmZpZyBQTV9XQUtFVVBfQllfR1BJTwogCWJvb2wgIkFsbG93IFdha2V1cCBmcm9tIFN0YW5kYnkgYnkgR1BJTyIKKwlkZXBlbmRzIG9uIFBNICYmICFCRjU0eAogCiBjb25maWcgUE1fV0FLRVVQX0dQSU9fTlVNQkVSCiAJaW50ICJHUElPIG51bWJlciIKQEAgLTExNjgsNiArMTE2OSwxMiBAQAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIEVuYWJsZSBHZW5lcmFsLVB1cnBvc2UgV2FrZS1VcCAoVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXItVXApCisJICAoYWxsIHByb2Nlc3NvcnMsIGV4Y2VwdCBBRFNQLUJGNTQ5KS4gVGhpcyBvcHRpb24gc2V0cworCSAgdGhlIGdlbmVyYWwtcHVycG9zZSB3YWtlLXVwIGVuYWJsZSAoR1BXRSkgY29udHJvbCBiaXQgdG8gZW5hYmxlCisJICB3YWtlLXVwIHVwb24gZGV0ZWN0aW9uIG9mIGFuIGFjdGl2ZSBsb3cgc2lnbmFsIG9uIHRoZSAvR1BXIChQSDcpIHBpbi4KKwkgIE9uIEFEU1AtQkY1NDkgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBvbiB0aGUKKwkgIC9NUlhPTiBwaW4gYWxzbyBQSDcuCisKIGVuZG1lbnUKIAogbWVudSAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnCmluZGV4IDVmOTgxZDkuLjc5ZTdlNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcuZGVidWcKQEAgLTIxLDEyICsyMSw2IEBACiBjb25maWcgSEFWRV9BUkNIX0tHREIKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBLR0RCX1RFU1RDQVNFCi0JdHJpc3RhdGUgIktHREI6IGZvciB0ZXN0IGNhc2UgaW4gZXhwZWN0IgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgaXMgYSBrZ2RiIHRlc3QgY2FzZSBmb3IgYXV0b21hdGVkIHRlc3RpbmcuCi0KIGNvbmZpZyBERUJVR19WRVJCT1NFCiAJYm9vbCAiVmVyYm9zZSBmYXVsdCBtZXNzYWdlcyIKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKaW5kZXggNGZkYjllMC4uMjgxZjRiNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCi0jIEZyaSBKYW4gIDkgMTc6NTg6NDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4CisjIEZyaSBGZWIgMjAgMTA6MDE6NDQgMjAwOQogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0xMzMsMTAgKzEzMywxNSBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0wCiBDT05GSUdfQkZfUkVWX01BWD0yCkBAIC00MjYsNyArNDMxLDE3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0RTQT15CisjIENPTkZJR19ORVRfRFNBX1RBR19EU0EgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfRURTQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRFNBX1RBR19TVFBJRD15CisjIENPTkZJR19ORVRfRFNBX01WODhFNlhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX01WODhFNjA2MCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX01WODhFNlhYWF9ORUVEX1BQVSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX01WODhFNjEzMSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX01WODhFNjEyM182MV82NSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0RTQV9LU1o4ODkzTT15CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTUyOSw2ICs1NDQsOCBAQAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTYxLDcgKzU3OCw5IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNjA3LDYgKzYyNiw3IEBACiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTc2NCw3ICs3ODQsMjMgQEAKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9CRklOPXkKKyMgQ09ORklHX1NQSV9CRklOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTc4OCw4ICs4MjQsMTAgQEAKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTg2MSwxMCArODk5LDE4IEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTA2MiwxMiArMTEwOCwyMCBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfS0dEQl9URVNUQ0FTRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVkVSQk9TRT15CiBDT05GSUdfREVCVUdfTU1SUz15CiAjIENPTkZJR19ERUJVR19IV0VSUiBpcyBub3Qgc2V0CkBAIC0xMTAwLDYgKzExNTQsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCmluZGV4IDgzMzEyOGIuLmE1MDA1MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwpAQCAtMzI3LDggKzMyNyw4IEBACiBDT05GSUdfQkZJTl9EQ0FDSEU9eQogIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1dCIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX1dUPXkKK0NPTkZJR19CRklOX1dCPXkKKyMgQ09ORklHX0JGSU5fV1QgaXMgbm90IHNldAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKaW5kZXggMzM0Yzk0Yi4uMGEyYTAwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCkBAIC0yOTAsOCArMjkwLDggQEAKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX0lDQUNIRV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fV0IgaXMgbm90IHNldAotQ09ORklHX0JGSU5fV1Q9eQorQ09ORklHX0JGSU5fV0I9eQorIyBDT05GSUdfQkZJTl9XVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NUFUgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCA5ZDczMzQzLi5lYjAyNzU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTI5MCw4ICsyOTAsOCBAQAogQ09ORklHX0JGSU5fRENBQ0hFPXkKICMgQ09ORklHX0JGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQkZJTl9XQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9XVD15CitDT05GSUdfQkZJTl9XQj15CisjIENPTkZJR19CRklOX1dUIGlzIG5vdCBzZXQKICMgQ09ORklHX01QVSBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCmluZGV4IDRmYjQxMDguLjllNjJiOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZwpAQCAtMjk4LDggKzI5OCw4IEBACiBDT05GSUdfQkZJTl9EQ0FDSEU9eQogIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1dCIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX1dUPXkKK0NPTkZJR19CRklOX1dCPXkKKyMgQ09ORklHX0JGSU5fV1QgaXMgbm90IHNldAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwpAQCAtNTY4LDE1ICs1NjgsNyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORD1tCi0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0JGSU4gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz1tCi0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPW0KKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcKaW5kZXggY2IzMmY1Ni4uZGQ2YWQ2YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZwpAQCAtMzA2LDggKzMwNiw4IEBACiBDT05GSUdfQkZJTl9EQ0FDSEU9eQogIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1dCIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX1dUPXkKK0NPTkZJR19CRklOX1dCPXkKKyMgQ09ORklHX0JGSU5fV1QgaXMgbm90IHNldAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKaW5kZXggMGY4Njk3NjEuLjZiYzJmYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZwpAQCAtMzYxLDggKzM2MSw4IEBACiBDT05GSUdfQkZJTl9EQ0FDSEU9eQogIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1dCIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX1dUPXkKK0NPTkZJR19CRklOX1dCPXkKKyMgQ09ORklHX0JGSU5fV1QgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9MMl9DQUNIRUFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIApAQCAtNjgwLDcgKzY4MCw3IEBACiBDT05GSUdfU0NTSV9ETUE9eQogIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKaW5kZXggMDQyYzdhZC4uNjk3MTRmYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCkBAIC0zMjksOCArMzI5LDggQEAKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX0lDQUNIRV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fV0IgaXMgbm90IHNldAotQ09ORklHX0JGSU5fV1Q9eQorQ09ORklHX0JGSU5fV0I9eQorIyBDT05GSUdfQkZJTl9XVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX0wyX0NBQ0hFQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NUFUgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQmxhY2tTdGFtcF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQmxhY2tTdGFtcF9kZWZjb25maWcKaW5kZXggM2EyMGUyOC4uMDE3YzZlYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JsYWNrU3RhbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CbGFja1N0YW1wX2RlZmNvbmZpZwpAQCAtMjg4LDggKzI4OCw4IEBACiBDT05GSUdfQkZJTl9EQ0FDSEU9eQogIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1dCIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX1dUPXkKK0NPTkZJR19CRklOX1dCPXkKKyMgQ09ORklHX0JGSU5fV1QgaXMgbm90IHNldAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKaW5kZXggODY1ZWQ4NS4uZDg4MGVmNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCkBAIC0zMzIsOCArMzMyLDggQEAKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX0lDQUNIRV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fV0IgaXMgbm90IHNldAotQ09ORklHX0JGSU5fV1Q9eQorQ09ORklHX0JGSU5fV0I9eQorIyBDT05GSUdfQkZJTl9XVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NUFUgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZwppbmRleCBlZmU5NzQxLi5mNDEwNDMwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKQEAgLTMzNiw4ICszMzYsOCBAQAogQ09ORklHX0JGSU5fRENBQ0hFPXkKICMgQ09ORklHX0JGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQkZJTl9XQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9XVD15CitDT05GSUdfQkZJTl9XQj15CisjIENPTkZJR19CRklOX1dUIGlzIG5vdCBzZXQKIENPTkZJR19MMV9NQVhfUElFQ0U9MTYKICMgQ09ORklHX01QVSBpcyBub3Qgc2V0CiAKQEAgLTU5NSw3ICs1OTUsNyBAQAogQ09ORklHX1NDU0lfRE1BPXkKICMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZwppbmRleCBlYWU4M2I1Li43ZGI5Mzg3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnCkBAIC02MTIsNyArNjEyLDcgQEAKIENPTkZJR19TQ1NJPXkKICMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9TUlYxX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9TUlYxX2RlZmNvbmZpZwppbmRleCBmYTU4MGFmLi5hNDY1MjljIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1NSVjFfZGVmY29uZmlnCkBAIC0yODIsOCArMjgyLDggQEAKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX0lDQUNIRV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fV0IgaXMgbm90IHNldAotQ09ORklHX0JGSU5fV1Q9eQorQ09ORklHX0JGSU5fV0I9eQorIyBDT05GSUdfQkZJTl9XVCBpcyBub3Qgc2V0CiBDT05GSUdfTDFfTUFYX1BJRUNFPTE2CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggNjA2ZWNmZC4uMDljMzE0MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9LYnVpbGQKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTEsMyArMSw0IEBACiBpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQogCit1bmlmZGVmLXkgKz0gYmZpbl9zcG9ydC5oCiB1bmlmZGVmLXkgKz0gZml4ZWRfY29kZS5oCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc3BvcnQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zcG9ydC5oCmluZGV4IGZlODhhMmMuLjY1YTY1MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zcG9ydC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zcG9ydC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2JmaW5fc3BvcnQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIFJveSBIdWFuZyAocm95Lmh1YW5nQGFuYWxvZy5jb20pCisgKiBiZmluX3Nwb3J0LmggLSB1c2Vyc3BhY2UgaGVhZGVyIGZvciBiZmluIHNwb3J0IGRyaXZlcgogICoKLSAqIENyZWF0ZWQ6ICAgICAgVGh1IEF1Zy4gMjQgMjAwNgotICogRGVzY3JpcHRpb246CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0JGSU5fU1BPUlRfSF9fCkBAIC00MiwxMSArMjEsMTAgQEAKICNkZWZpbmUgTk9STV9GT1JNQVQJMHgwCiAjZGVmaW5lIEFMQVdfRk9STUFUCTB4MgogI2RlZmluZSBVTEFXX0ZPUk1BVAkweDMKLXN0cnVjdCBzcG9ydF9yZWdpc3RlcjsKIAogLyogRnVuY3Rpb24gZHJpdmVyIHdoaWNoIHVzZSBzcG9ydCBtdXN0IGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSAqLwogc3RydWN0IHNwb3J0X2NvbmZpZyB7Ci0JLypURE0gKG11bHRpY2hhbm5lbHMpLCBJMlMgb3Igb3RoZXIgbW9kZSAqLworCS8qIFRETSAobXVsdGljaGFubmVscyksIEkyUyBvciBvdGhlciBtb2RlICovCiAJdW5zaWduZWQgaW50IG1vZGU6MzsKIAogCS8qIGlmIFRETSBtb2RlIGlzIHNlbGVjdGVkLCBjaGFubmVscyBtdXN0IGJlIHNldCAqLwpAQCAtNzIsMTIgKzUwLDE4IEBACiAJaW50IHNlcmlhbF9jbGs7CiAJaW50IGZzeW5jX2NsazsKIAotCXVuc2lnbmVkIGludCBkYXRhX2Zvcm1hdDoyOwkvKk5vcm1hbCwgdS1sYXcgb3IgYS1sYXcgKi8KKwl1bnNpZ25lZCBpbnQgZGF0YV9mb3JtYXQ6MjsJLyogTm9ybWFsLCB1LWxhdyBvciBhLWxhdyAqLwogCiAJaW50IHdvcmRfbGVuOwkJLyogSG93IGxlbmd0aCBvZiB0aGUgd29yZCBpbiBiaXRzLCAzLTMyIGJpdHMgKi8KIAlpbnQgZG1hX2VuYWJsZWQ7CiB9OwogCisvKiBVc2Vyc3BhY2UgaW50ZXJmYWNlICovCisjZGVmaW5lIFNQT1JUX0lPQ19NQUdJQwkJJ1AnCisjZGVmaW5lIFNQT1JUX0lPQ19DT05GSUcJX0lPV1IoJ1AnLCAweDAxLCBzdHJ1Y3Qgc3BvcnRfY29uZmlnKQorCisjaWZkZWYgX19LRVJORUxfXworCiBzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgewogCXVuc2lnbmVkIHNob3J0IHRjcjE7CiAJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQwOwpAQCAtMTE3LDkgKzEwMSw2IEBACiAJdW5zaWduZWQgbG9uZyBtcmNzMzsKIH07CiAKLSNkZWZpbmUgU1BPUlRfSU9DX01BR0lDCQknUCcKLSNkZWZpbmUgU1BPUlRfSU9DX0NPTkZJRwlfSU9XUignUCcsIDB4MDEsIHN0cnVjdCBzcG9ydF9jb25maWcpCi0KIHN0cnVjdCBzcG9ydF9kZXYgewogCXN0cnVjdCBjZGV2IGNkZXY7CS8qIENoYXIgZGV2aWNlIHN0cnVjdHVyZSAqLwogCkBAIC0xNDksNiArMTMwLDggQEAKIAlzdHJ1Y3Qgc3BvcnRfY29uZmlnIGNvbmZpZzsKIH07CiAKKyNlbmRpZgorCiAjZGVmaW5lIFNQT1JUX1RDUjEJMAogI2RlZmluZQlTUE9SVF9UQ1IyCTEKICNkZWZpbmUJU1BPUlRfVENMS0RJVgkyCkBAIC0xNjksNCArMTUyLDQgQEAKICNkZWZpbmUgU1BPUlRfTVJDUzIJMjIKICNkZWZpbmUgU1BPUlRfTVJDUzMJMjMKIAotI2VuZGlmCQkJCS8qX19CRklOX1NQT1JUX0hfXyovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXBpcGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXBpcGUuaAppbmRleCA3NmY1M2Q4Li4zNDNiNTYzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZS5oCkBAIC0zNSw5ICszNSw5IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCi0jZGVmaW5lIElQSVBFX0FSQ0hfU1RSSU5HICAgICAiMS44LTAwIgorI2RlZmluZSBJUElQRV9BUkNIX1NUUklORyAgICAgIjEuOS0wMCIKICNkZWZpbmUgSVBJUEVfTUFKT1JfTlVNQkVSICAgIDEKLSNkZWZpbmUgSVBJUEVfTUlOT1JfTlVNQkVSICAgIDgKKyNkZWZpbmUgSVBJUEVfTUlOT1JfTlVNQkVSICAgIDkKICNkZWZpbmUgSVBJUEVfUEFUQ0hfTlVNQkVSICAgIDAKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTgzLDkgKzgzLDkgQEAKIAkJCQkiJTIgPSBDWUNMRVMyXG4iCQlcCiAJCQkJIkNDID0gJTIgPT0gJTBcbiIJCVwKIAkJCQkiaWYgISBDQyBqdW1wIDFiXG4iCQlcCi0JCQkJOiAiPXIiICgoKHVuc2lnbmVkIGxvbmcgKikmdClbMV0pLAlcCi0JCQkJICAiPXIiICgoKHVuc2lnbmVkIGxvbmcgKikmdClbMF0pLAlcCi0JCQkJICAiPXIiIChfX2N5MikJCQkJXAorCQkJCTogIj1kLGEiICgoKHVuc2lnbmVkIGxvbmcgKikmdClbMV0pLAlcCisJCQkJICAiPWQsYSIgKCgodW5zaWduZWQgbG9uZyAqKSZ0KVswXSksCVwKKwkJCQkgICI9ZCxhIiAoX19jeTIpCQkJCVwKIAkJCQk6IC8qbm8gaW5wdXQqLyA6ICJDQyIpOwkJCVwKIAl0OwkJCQkJCQkJXAogCX0pCkBAIC0xMTgsMzUgKzExOCw0MCBAQAogCiAjZGVmaW5lIF9faXBpcGVfZGlzYWJsZV9pcnEoaXJxKQkoaXJxX2Rlc2NbaXJxXS5jaGlwLT5tYXNrKGlycSkpCiAKLSNkZWZpbmUgX19pcGlwZV9sb2NrX3Jvb3QoKQkJCQkJXAotCXNldF9iaXQoSVBJUEVfUk9PVExPQ0tfRkxBRywgJmlwaXBlX3Jvb3RfZG9tYWluLT5mbGFncykKK3N0YXRpYyBpbmxpbmUgaW50IF9faXBpcGVfY2hlY2tfdGlja2Rldihjb25zdCBjaGFyICpkZXZuYW1lKQoreworCXJldHVybiAxOworfQogCi0jZGVmaW5lIF9faXBpcGVfdW5sb2NrX3Jvb3QoKQkJCQkJXAotCWNsZWFyX2JpdChJUElQRV9ST09UTE9DS19GTEFHLCAmaXBpcGVfcm9vdF9kb21haW4tPmZsYWdzKQorc3RhdGljIGlubGluZSB2b2lkIF9faXBpcGVfbG9ja19yb290KHZvaWQpCit7CisJc2V0X2JpdChJUElQRV9TWU5DREVGRVJfRkxBRywgJmlwaXBlX3Jvb3RfY3B1ZG9tX3ZhcihzdGF0dXMpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faXBpcGVfdW5sb2NrX3Jvb3Qodm9pZCkKK3sKKwljbGVhcl9iaXQoSVBJUEVfU1lOQ0RFRkVSX0ZMQUcsICZpcGlwZV9yb290X2NwdWRvbV92YXIoc3RhdHVzKSk7Cit9CiAKIHZvaWQgX19pcGlwZV9lbmFibGVfcGlwZWxpbmUodm9pZCk7CiAKICNkZWZpbmUgX19pcGlwZV9ob29rX2NyaXRpY2FsX2lwaShpcGQpIGRvIHsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX2lwaXBlX3N5bmNfcGlwZWxpbmUoc3luY21hc2spCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlzdHJ1Y3QgaXBpcGVfZG9tYWluICppcGQgPSBpcGlwZV9jdXJyZW50X2RvbWFpbjsJXAotCQlpZiAobGlrZWx5KGlwZCAhPSBpcGlwZV9yb290X2RvbWFpbiB8fCAhdGVzdF9iaXQoSVBJUEVfUk9PVExPQ0tfRkxBRywgJmlwZC0+ZmxhZ3MpKSkgXAotCQkJX19pcGlwZV9zeW5jX3N0YWdlKHN5bmNtYXNrKTsJCQlcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19pcGlwZV9zeW5jX3BpcGVsaW5lICBfX19pcGlwZV9zeW5jX3BpcGVsaW5lCit2b2lkIF9fX2lwaXBlX3N5bmNfcGlwZWxpbmUodW5zaWduZWQgbG9uZyBzeW5jbWFzayk7CiAKIHZvaWQgX19pcGlwZV9oYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBpbnQgX19pcGlwZV9nZXRfaXJxX3ByaW9yaXR5KHVuc2lnbmVkIGlycSk7CiAKLWludCBfX2lwaXBlX2dldF9pcnF0aHJlYWRfcHJpb3JpdHkodW5zaWduZWQgaXJxKTsKLQogdm9pZCBfX2lwaXBlX3N0YWxsX3Jvb3RfcmF3KHZvaWQpOwogCiB2b2lkIF9faXBpcGVfdW5zdGFsbF9yb290X3Jhdyh2b2lkKTsKIAogdm9pZCBfX2lwaXBlX3NlcmlhbF9kZWJ1Zyhjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKK2FzbWxpbmthZ2Ugdm9pZCBfX2lwaXBlX2NhbGxfaXJxdGFpbCh1bnNpZ25lZCBsb25nIGFkZHIpOworCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MsIF9faXBpcGVfdGlja19yZWdzKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pcGlwZV9jb3JlX2Nsb2NrOwpAQCAtMTYyLDQyICsxNjcsMjUgQEAKIAogI2RlZmluZSBfX2lwaXBlX3J1bl9pcnF0YWlsKCkgIC8qIE11c3QgYmUgYSBtYWNybyAqLwkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWFzbWxpbmthZ2Ugdm9pZCBfX2lwaXBlX2NhbGxfaXJxdGFpbCh2b2lkKTsJCVwKIAkJdW5zaWduZWQgbG9uZyBfX3BlbmRpbmc7CQkJCVwKLQkJQ1NZTkMoKTsJCQkJCVwKKwkJQ1NZTkMoKTsJCQkJCQlcCiAJCV9fcGVuZGluZyA9IGJmaW5fcmVhZF9JUEVORCgpOwkJCQlcCiAJCWlmIChfX3BlbmRpbmcgJiAweDgwMDApIHsJCQkJXAogCQkJX19wZW5kaW5nICY9IH4weDgwMTA7CQkJCVwKIAkJCWlmIChfX3BlbmRpbmcgJiYgKF9fcGVuZGluZyAmIChfX3BlbmRpbmcgLSAxKSkgPT0gMCkgXAotCQkJCV9faXBpcGVfY2FsbF9pcnF0YWlsKCk7CQkJXAorCQkJCV9faXBpcGVfY2FsbF9pcnF0YWlsKF9faXBpcGVfaXJxX3RhaWxfaG9vayk7IFwKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfX2lwaXBlX3J1bl9pc3IoaXBkLCBpcnEpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoaXBkID09IGlwaXBlX3Jvb3RfZG9tYWluKSB7CQkJCVwKLQkJCS8qCQkJCQkJXAotCQkJICogTm90ZTogdGhlIEktcGlwZSBpbXBsZW1lbnRzIGEgdGhyZWFkZWQgaW50ZXJydXB0IG1vZGVsIG9uIFwKLQkJCSAqIHRoaXMgYXJjaCBmb3IgTGludXggZXh0ZXJuYWwgSVJRcy4gVGhlIGludGVycnVwdCBoYW5kbGVyIHdlIFwKLQkJCSAqIGNhbGwgaGVyZSBvbmx5IHdha2VzIHVwIHRoZSBhc3NvY2lhdGVkIElSUSB0aHJlYWQuIFwKLQkJCSAqLwkJCQkJCVwKLQkJCWlmIChpcGlwZV92aXJ0dWFsX2lycV9wKGlycSkpIHsJCQlcCi0JCQkJLyogTm8gaXJxdGFpbCBoZXJlOyB2aXJ0dWFsIGludGVycnVwdHMgaGF2ZSBubyBlZmZlY3QgXAotCQkJCSAgIG9uIElQRU5EIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHByb2Nlc3NpbmcgXAotCQkJCSAgIGRlZmVycmFsLiAqLwkJCQlcCi0JCQkJbG9jYWxfaXJxX2VuYWJsZV9ub2hlYWQoaXBkKTsJCVwKKwkJCWxvY2FsX2lycV9lbmFibGVfaHcoKTsJCQkJXAorCQkJaWYgKGlwaXBlX3ZpcnR1YWxfaXJxX3AoaXJxKSkJCQlcCiAJCQkJaXBkLT5pcnFzW2lycV0uaGFuZGxlcihpcnEsIGlwZC0+aXJxc1tpcnFdLmNvb2tpZSk7IFwKLQkJCQlsb2NhbF9pcnFfZGlzYWJsZV9ub2hlYWQoaXBkKTsJCVwKLQkJCX0gZWxzZQkJCQkJCVwKLQkJCQkvKgkJCQkJXAotCQkJCSAqIE5vIG5lZWQgdG8gcnVuIHRoZSBpcnF0YWlsIGhlcmUgZWl0aGVyOyBcCi0JCQkJICogd2UgY2FuJ3QgYmUgcHJlZW1wdGVkIGJ5IGh3IElSUXMsIHNvCVwKLQkJCQkgKiBub24tTGludXggSVJRcyBjYW5ub3Qgc3RhY2sgb3ZlciB0aGUgc2hvcnQgXAotCQkJCSAqIHRocmVhZCB3YWtldXAgY29kZS4gV2hpY2ggaW4gdHVybiBtZWFucyBcCi0JCQkJICogdGhhdCBubyBpcnF0YWlsIGNvbmRpdGlvbiBjb3VsZCBiZSBwZW5kaW5nIFwKLQkJCQkgKiBmb3IgZG9tYWlucyBhYm92ZSBMaW51eCBpbiB0aGUgcGlwZWxpbmUuIFwKLQkJCQkgKi8JCQkJCVwKKwkJCWVsc2UJCQkJCQlcCiAJCQkJaXBkLT5pcnFzW2lycV0uaGFuZGxlcihpcnEsICZfX3Jhd19nZXRfY3B1X3ZhcihfX2lwaXBlX3RpY2tfcmVncykpOyBcCisJCQlsb2NhbF9pcnFfZGlzYWJsZV9odygpOwkJCQlcCiAJCX0gZWxzZSB7CQkJCQkJXAogCQkJX19jbGVhcl9iaXQoSVBJUEVfU1lOQ19GTEFHLCAmaXBpcGVfY3B1ZG9tX3ZhcihpcGQsIHN0YXR1cykpOyBcCiAJCQlsb2NhbF9pcnFfZW5hYmxlX25vaGVhZChpcGQpOwkJCVwKQEAgLTIxNyw0MiArMjA1LDI0IEBACiAKIGludCBpcGlwZV9zdGFydF9pcnFfdGhyZWFkKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIAotI2RlZmluZSBJU19TWVNJUlEoaXJxKQkJKChpcnEpID4gSVJRX0NPUkVUTVIgJiYgKGlycSkgPD0gU1lTX0lSUVMpCi0jZGVmaW5lIElTX0dQSU9JUlEoaXJxKQkJKChpcnEpID49IEdQSU9fSVJRX0JBU0UgJiYgKGlycSkgPCBOUl9JUlFTKQotCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMKKyNkZWZpbmUgSVJRX1NZU1RNUgkJSVJRX0NPUkVUTVIKKyNkZWZpbmUgSVJRX1BSSU9UTVIJCUlSUV9DT1JFVE1SCisjZWxzZQogI2RlZmluZSBJUlFfU1lTVE1SCQlJUlFfVElNRVIwCiAjZGVmaW5lIElSUV9QUklPVE1SCQlDT05GSUdfSVJRX1RJTUVSMAorI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CRjUzMSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MzIpIHx8IGRlZmluZWQoQ09ORklHX0JGNTMzKQotI2RlZmluZSBQUklPX0dQSU9ERU1VWChpcnEpCUNPTkZJR19QRkEKLSNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTM0KSB8fCBkZWZpbmVkKENPTkZJR19CRjUzNikgfHwgZGVmaW5lZChDT05GSUdfQkY1MzcpCi0jZGVmaW5lIFBSSU9fR1BJT0RFTVVYKGlycSkJQ09ORklHX0lSUV9QUk9HX0lOVEEKLSNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTJ4KQotI2RlZmluZSBQUklPX0dQSU9ERU1VWChpcnEpCSgoaXJxKSA9PSBJUlFfUE9SVEZfSU5UQSA/IENPTkZJR19JUlFfUE9SVEZfSU5UQSA6IFwKLQkJCQkgKGlycSkgPT0gSVJRX1BPUlRHX0lOVEEgPyBDT05GSUdfSVJRX1BPUlRHX0lOVEEgOiBcCi0JCQkJIChpcnEpID09IElSUV9QT1JUSF9JTlRBID8gQ09ORklHX0lSUV9QT1JUSF9JTlRBIDogXAotCQkJCSAtMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTYxKQotI2RlZmluZSBQUklPX0dQSU9ERU1VWChpcnEpCSgoaXJxKSA9PSBJUlFfUFJPRzBfSU5UQSA/IENPTkZJR19JUlFfUFJPRzBfSU5UQSA6IFwKLQkJCQkgKGlycSkgPT0gSVJRX1BST0cxX0lOVEEgPyBDT05GSUdfSVJRX1BST0cxX0lOVEEgOiBcCi0JCQkJIChpcnEpID09IElSUV9QUk9HMl9JTlRBID8gQ09ORklHX0lSUV9QUk9HMl9JTlRBIDogXAotCQkJCSAtMSkKKyNpZmRlZiBDT05GSUdfQkY1NjEKICNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9ESVNBQkxFKHZhbCkJYmZpbl93cml0ZV9UTVJTOF9ESVNBQkxFKHZhbCkKICNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9FTkFCTEUodmFsKQliZmluX3dyaXRlX1RNUlM4X0VOQUJMRSh2YWwpCiAjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1RBVFVTKHZhbCkJYmZpbl93cml0ZV9UTVJTOF9TVEFUVVModmFsKQogI2RlZmluZSBiZmluX3JlYWRfVElNRVJfU1RBVFVTKCkJYmZpbl9yZWFkX1RNUlM4X1NUQVRVUygpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkKLSNkZWZpbmUgUFJJT19HUElPREVNVVgoaXJxKQkoKGlycSkgPT0gSVJRX1BJTlQwID8gQ09ORklHX0lSUV9QSU5UMCA6IFwKLQkJCQkgKGlycSkgPT0gSVJRX1BJTlQxID8gQ09ORklHX0lSUV9QSU5UMSA6IFwKLQkJCQkgKGlycSkgPT0gSVJRX1BJTlQyID8gQ09ORklHX0lSUV9QSU5UMiA6IFwKLQkJCQkgKGlycSkgPT0gSVJRX1BJTlQzID8gQ09ORklHX0lSUV9QSU5UMyA6IFwKLQkJCQkgLTEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRElTQUJMRSh2YWwpCWJmaW5fd3JpdGVfVElNRVJfRElTQUJMRTAodmFsKQogI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0VOQUJMRSh2YWwpCWJmaW5fd3JpdGVfVElNRVJfRU5BQkxFMCh2YWwpCiAjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1RBVFVTKHZhbCkJYmZpbl93cml0ZV9USU1FUl9TVEFUVVMwKHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX1NUQVRVUyh2YWwpCWJmaW5fcmVhZF9USU1FUl9TVEFUVVMwKHZhbCkKLSNlbHNlCi0jIGVycm9yICJubyBQUklPX0dQSU9ERU1VWCgpIGZvciB0aGlzIHBhcnQiCiAjZW5kaWYKIAogI2RlZmluZSBfX2lwaXBlX3Jvb3RfdGlja19wKHJlZ3MpCSgocmVncy0+aXBlbmQgJiAweDEwKSAhPSAwKQpAQCAtMjc1LDQgKzI0NSw2IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0lQSVBFICovCiAKKyNkZWZpbmUgaXBpcGVfdXBkYXRlX3RpY2tfZXZ0ZGV2KGV2dGRldikJZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYJLyogIV9fQVNNX0JMQUNLRklOX0lQSVBFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXBpcGVfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZV9iYXNlLmgKaW5kZXggY2IxMDI1YS4uM2U4YWNiZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZV9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZV9iYXNlLmgKQEAgLTEsNSArMSw1IEBACiAvKiAgIC0qLSBsaW51eC1jIC0qLQotICogICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9fYmFzZWlwaXBlLmgKKyAqICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vaXBpcGVfYmFzZS5oCiAgKgogICogICBDb3B5cmlnaHQgKEMpIDIwMDcgUGhpbGlwcGUgR2VydW0uCiAgKgpAQCAtMjcsOCArMjcsOSBAQAogI2RlZmluZSBJUElQRV9OUl9YSVJRUwkJTlJfSVJRUwogI2RlZmluZSBJUElQRV9JUlFfSVNISUZUCTUJLyogMl41IGZvciAzMmJpdHMgYXJjaC4gKi8KIAotLyogQmxhY2tmaW4tc3BlY2lmaWMsIGdsb2JhbCBkb21haW4gZmxhZ3MgKi8KLSNkZWZpbmUgSVBJUEVfUk9PVExPQ0tfRkxBRwkxCS8qIExvY2sgcGlwZWxpbmUgZm9yIHJvb3QgKi8KKy8qIEJsYWNrZmluLXNwZWNpZmljLCBwZXItY3B1IHBpcGVsaW5lIHN0YXR1cyAqLworI2RlZmluZSBJUElQRV9TWU5DREVGRVJfRkxBRwkxNQorI2RlZmluZSBJUElQRV9TWU5DREVGRVJfTUFTSwkoMUwgPDwgSVBJUEVfU1lOQ0RFRkVSX01BU0spCiAKICAvKiBCbGFja2ZpbiB0cmFwcyAtLSBpLmUuIGV4Y2VwdGlvbiB2ZWN0b3IgbnVtYmVycyAqLwogI2RlZmluZSBJUElQRV9OUl9GQVVMVFMJCTUyIC8qIFdlIGxlYXZlIGEgZ2FwIGFmdGVyIFZFQ19JTExfUkVTLiAqLwpAQCAtNDgsMTEgKzQ5LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi1leHRlcm4gaW50IHRlc3RfYml0KGludCBuciwgY29uc3Qgdm9pZCAqYWRkcik7Ci0KLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pcGlwZV9yb290X3N0YXR1czsgLyogQWxpYXMgdG8gaXBpcGVfcm9vdF9jcHVkb21fdmFyKHN0YXR1cykgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9faXBpcGVfc3RhbGxfcm9vdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggM2Q5Nzc5MC4uNzY0NWU4NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycS5oCkBAIC02MSwyMCArNjEsMzggQEAKICNkZWZpbmUgcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpCSghaXJxc19lbmFibGVkX2Zyb21fZmxhZ3NfaHcoZmxhZ3MpKQogI2RlZmluZSBsb2NhbF90ZXN0X2lmbGFnX2h3KHgpCQlpcnFzX2VuYWJsZWRfZnJvbV9mbGFnc19odyh4KQogCi0jZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQkoeCkgPSBfX2lwaXBlX3Rlc3Rfcm9vdCgpID8gXAorI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKHgpCQkJCQkgXAorCWRvIHsJCQkJCQkJIFwKKwkJKHgpID0gX19pcGlwZV90ZXN0X3Jvb3QoKSA/CQkJIFwKIAkJCV9fYWxsX21hc2tlZF9pcnFfZmxhZ3MgOiBiZmluX2lycV9mbGFnczsgXAorCQliYXJyaWVyKCk7CQkJCQkgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCSh4KSA9IF9faXBpcGVfdGVzdF9hbmRfc3RhbGxfcm9vdCgpOwlcCisjZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCQkJCQkgXAorCWRvIHsJCQkJCQkgCSBcCisJCSh4KSA9IF9faXBpcGVfdGVzdF9hbmRfc3RhbGxfcm9vdCgpID8JCSBcCisJCQlfX2FsbF9tYXNrZWRfaXJxX2ZsYWdzIDogYmZpbl9pcnFfZmxhZ3M7IFwKKwkJYmFycmllcigpOwkJCQkJIFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKHgpCV9faXBpcGVfcmVzdG9yZV9yb290KHgpCi0jZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkJX19pcGlwZV9zdGFsbF9yb290KCkKLSNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCV9faXBpcGVfdW5zdGFsbF9yb290KCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIHgpCit7CisJYmFycmllcigpOworCV9faXBpcGVfcmVzdG9yZV9yb290KHggPT0gX19hbGxfbWFza2VkX2lycV9mbGFncyk7Cit9CisKKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKQkJCVwKKwlkbyB7CQkJCQlcCisJCV9faXBpcGVfc3RhbGxfcm9vdCgpOwkJXAorCQliYXJyaWVyKCk7CQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pcnFfZW5hYmxlKHZvaWQpCit7CisJYmFycmllcigpOworCV9faXBpcGVfdW5zdGFsbF9yb290KCk7Cit9CisKICNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQlfX2lwaXBlX3Rlc3Rfcm9vdCgpCiAKICNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFnc19odyh4KSBcCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDY5YTA1MWIuLjY0MDNhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQkxBQ0tGSU5fU1dBQl9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGU3MjFjZTUuLjI5MjAwODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEyMiw2ICsxMjIsNyBAQAogI2RlZmluZSBUSUZfTUVNRElFICAgICAgICAgICAgICA0CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCiAjZGVmaW5lIFRJRl9GUkVFWkUgICAgICAgICAgICAgIDYgICAgICAgLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KKyNkZWZpbmUgVElGX0lSUV9TWU5DICAgICAgICAgICAgNyAgICAgICAvKiBzeW5jIHBpcGVsaW5lIHN0YWdlICovCiAKIC8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLwogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQpAQCAtMTMwLDYgKzEzMSw3IEBACiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfRlJFRVpFICAgICAgICAgICAgICgxPDxUSUZfRlJFRVpFKQorI2RlZmluZSBfVElGX0lSUV9TWU5DICAgICAgICAgICAoMTw8VElGX0lSUV9TWU5DKQogCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9NYWtlZmlsZQppbmRleCA0YTkyYTg2Li5mZDRkNDMyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTUsMTMgKzE1LDE1IEBACiAgICAgb2JqLXkgKz0gdGltZS5vCiBlbmRpZgogCi1DRkxBR1Nfa2dkYl90ZXN0Lm8gOj0gLW1sb25nLWNhbGxzIC1PMAotCiBvYmotJChDT05GSUdfSVBJUEUpICAgICAgICAgICAgICAgICAgKz0gaXBpcGUubwogb2JqLSQoQ09ORklHX0lQSVBFX1RSQUNFX01DT1VOVCkgICAgICs9IG1jb3VudC5vCiBvYmotJChDT05GSUdfQkZJTl9HUFRJTUVSUykgICAgICAgICAgKz0gZ3B0aW1lcnMubwogb2JqLSQoQ09ORklHX0NQTEJfSU5GTykgICAgICAgICAgICAgICs9IGNwbGJpbmZvLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSAgICAgICAgICAgICAgICArPSBtb2R1bGUubwogb2JqLSQoQ09ORklHX0tHREIpICAgICAgICAgICAgICAgICAgICs9IGtnZGIubwotb2JqLSQoQ09ORklHX0tHREJfVEVTVENBU0UpICAgICAgICAgICs9IGtnZGJfdGVzdC5vCitvYmotJChDT05GSUdfS0dEQl9URVNUUykgICAgICAgICAgICAgKz0ga2dkYl90ZXN0Lm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspICAgICAgICAgICArPSBlYXJseV9wcmludGsubworCisjIHRoZSBrZ2RiIHRlc3QgcHV0cyBjb2RlIGludG8gTDIgYW5kIHdpdGhvdXQgbGlua2VyCisjIHJlbGF4YXRpb24sIHdlIG5lZWQgdG8gZm9yY2UgbG9uZyBjYWxscyB0by9mcm9tIGl0CitDRkxBR1Nfa2dkYl90ZXN0Lm8gOj0gLW1sb25nLWNhbGxzIC1PMApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCmluZGV4IDBlMjhmNzUuLmQ2YzA2NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKQEAgLTUzLDkgKzUzLDEzIEBACiAKIAlpX2QgPSBpX2kgPSAwOwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk8KIAkvKiBTZXQgdXAgdGhlIHplcm8gcGFnZS4gICovCiAJZF90YmxbaV9kXS5hZGRyID0gMDsKIAlkX3RibFtpX2QrK10uZGF0YSA9IFNEUkFNX09PUFMgfCBQQUdFX1NJWkVfMUtCOworCWlfdGJsW2lfaV0uYWRkciA9IDA7CisJaV90YmxbaV9pKytdLmRhdGEgPSBTRFJBTV9PT1BTIHwgUEFHRV9TSVpFXzFLQjsKKyNlbmRpZgogCiAJLyogQ292ZXIga2VybmVsIG1lbW9yeSB3aXRoIDRNIHBhZ2VzLiAgKi8KIAlhZGRyID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lwaXBlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcGlwZS5jCmluZGV4IDMzOWJlNWEuLmE1ZGU4ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lwaXBlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXBpcGUuYwpAQCAtMzUsMTQgKzM1LDggQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBpbnQgY3JlYXRlX2lycV90aHJlYWRzOwotCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHRfcmVncywgX19pcGlwZV90aWNrX3JlZ3MpOwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcGVuZGluZ19pcnF0aHJlYWRfbWFzayk7Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQgW0lWRzEzICsgMV0sIHBlbmRpbmdfaXJxX2NvdW50KTsKLQogYXNtbGlua2FnZSB2b2lkIGFzbV9kb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBzdGF0aWMgdm9pZCBfX2lwaXBlX25vX2lycXRhaWwodm9pZCk7CkBAIC05Myw2ICs4Nyw3IEBACiAgKi8KIHZvaWQgX19pcGlwZV9oYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RydWN0IGlwaXBlX3BlcmNwdV9kb21haW5fZGF0YSAqcCA9IGlwaXBlX3Jvb3RfY3B1ZG9tX3B0cigpOwogCXN0cnVjdCBpcGlwZV9kb21haW4gKnRoaXNfZG9tYWluLCAqbmV4dF9kb21haW47CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgKnBvczsKIAlpbnQgbV9hY2ssIHMgPSAtMTsKQEAgLTEwNCw3ICs5OSw2IEBACiAJICogaW50ZXJydXB0LgogCSAqLwogCW1fYWNrID0gKHJlZ3MgPT0gTlVMTCB8fCBpcnEgPT0gSVJRX1NZU1RNUiB8fCBpcnEgPT0gSVJRX0NPUkVUTVIpOwotCiAJdGhpc19kb21haW4gPSBpcGlwZV9jdXJyZW50X2RvbWFpbjsKIAogCWlmICh1bmxpa2VseSh0ZXN0X2JpdChJUElQRV9TVElDS1lfRkxBRywgJnRoaXNfZG9tYWluLT5pcnFzW2lycV0uY29udHJvbCkpKQpAQCAtMTE0LDQ5ICsxMDgsMjggQEAKIAkJbmV4dF9kb21haW4gPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCBpcGlwZV9kb21haW4sIHBfbGluayk7CiAJCWlmIChsaWtlbHkodGVzdF9iaXQoSVBJUEVfV0lSRURfRkxBRywgJm5leHRfZG9tYWluLT5pcnFzW2lycV0uY29udHJvbCkpKSB7CiAJCQlpZiAoIW1fYWNrICYmIG5leHRfZG9tYWluLT5pcnFzW2lycV0uYWNrbm93bGVkZ2UgIT0gTlVMTCkKLQkJCQluZXh0X2RvbWFpbi0+aXJxc1tpcnFdLmFja25vd2xlZGdlKGlycSwgaXJxX2Rlc2MgKyBpcnEpOwotCQkJaWYgKHRlc3RfYml0KElQSVBFX1JPT1RMT0NLX0ZMQUcsICZpcGlwZV9yb290X2RvbWFpbi0+ZmxhZ3MpKQotCQkJCXMgPSBfX3Rlc3RfYW5kX3NldF9iaXQoSVBJUEVfU1RBTExfRkxBRywKLQkJCQkJCSAgICAgICAmaXBpcGVfcm9vdF9jcHVkb21fdmFyKHN0YXR1cykpOworCQkJCW5leHRfZG9tYWluLT5pcnFzW2lycV0uYWNrbm93bGVkZ2UoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKKwkJCWlmICh0ZXN0X2JpdChJUElQRV9TWU5DREVGRVJfRkxBRywgJnAtPnN0YXR1cykpCisJCQkJcyA9IF9fdGVzdF9hbmRfc2V0X2JpdChJUElQRV9TVEFMTF9GTEFHLCAmcC0+c3RhdHVzKTsKIAkJCV9faXBpcGVfZGlzcGF0Y2hfd2lyZWQobmV4dF9kb21haW4sIGlycSk7Ci0JCQkJZ290byBmaW5hbGl6ZTsKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJLyogQWNrIHRoZSBpbnRlcnJ1cHQuICovCiAKIAlwb3MgPSBoZWFkOwotCiAJd2hpbGUgKHBvcyAhPSAmX19pcGlwZV9waXBlbGluZSkgewogCQluZXh0X2RvbWFpbiA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgaXBpcGVfZG9tYWluLCBwX2xpbmspOwotCQkvKgotCQkgKiBGb3IgZWFjaCBkb21haW4gaGFuZGxpbmcgdGhlIGluY29taW5nIElSUSwgbWFyayBpdAotCQkgKiBhcyBwZW5kaW5nIGluIGl0cyBsb2cuCi0JCSAqLwogCQlpZiAodGVzdF9iaXQoSVBJUEVfSEFORExFX0ZMQUcsICZuZXh0X2RvbWFpbi0+aXJxc1tpcnFdLmNvbnRyb2wpKSB7Ci0JCQkvKgotCQkJICogRG9tYWlucyB0aGF0IGhhbmRsZSB0aGlzIElSUSBhcmUgcG9sbGVkIGZvcgotCQkJICogYWNrbm93bGVkZ2luZyBpdCBieSBkZWNyZWFzaW5nIHByaW9yaXR5Ci0JCQkgKiBvcmRlci4gVGhlIGludGVycnVwdCBtdXN0IGJlIG1hZGUgcGVuZGluZwotCQkJICogX2ZpcnN0XyBpbiB0aGUgZG9tYWluJ3Mgc3RhdHVzIGZsYWdzIGJlZm9yZQotCQkJICogdGhlIFBJQyBpcyB1bmxvY2tlZC4KLQkJCSAqLwogCQkJX19pcGlwZV9zZXRfaXJxX3BlbmRpbmcobmV4dF9kb21haW4sIGlycSk7Ci0KIAkJCWlmICghbV9hY2sgJiYgbmV4dF9kb21haW4tPmlycXNbaXJxXS5hY2tub3dsZWRnZSAhPSBOVUxMKSB7Ci0JCQkJbmV4dF9kb21haW4tPmlycXNbaXJxXS5hY2tub3dsZWRnZShpcnEsIGlycV9kZXNjICsgaXJxKTsKKwkJCQluZXh0X2RvbWFpbi0+aXJxc1tpcnFdLmFja25vd2xlZGdlKGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAJCQkJbV9hY2sgPSAxOwogCQkJfQogCQl9Ci0KLQkJLyoKLQkJICogSWYgdGhlIGRvbWFpbiBkb2VzIG5vdCB3YW50IHRoZSBJUlEgdG8gYmUgcGFzc2VkCi0JCSAqIGRvd24gdGhlIGludGVycnVwdCBwaXBlLCBleGl0IHRoZSBsb29wIG5vdy4KLQkJICovCiAJCWlmICghdGVzdF9iaXQoSVBJUEVfUEFTU19GTEFHLCAmbmV4dF9kb21haW4tPmlycXNbaXJxXS5jb250cm9sKSkKIAkJCWJyZWFrOwotCiAJCXBvcyA9IG5leHRfZG9tYWluLT5wX2xpbmsubmV4dDsKIAl9CiAKQEAgLTE2NiwxOCArMTM5LDI0IEBACiAJICogaW1tZWRpYXRlbHkgdG8gdGhlIGN1cnJlbnQgZG9tYWluIGlmIHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4KIAkgKiBtYXJrZWQgYXMgJ3N0aWNreScuIFRoaXMgc2VhcmNoIGRvZXMgbm90IGdvIGJleW9uZCB0aGUKIAkgKiBjdXJyZW50IGRvbWFpbiBpbiB0aGUgcGlwZWxpbmUuIFdlIGFsc28gZW5mb3JjZSB0aGUKLQkgKiBhZGRpdGlvbmFsIHJvb3Qgc3RhZ2UgbG9jayAoYmxhY2tmaW4tc3BlY2lmaWMpLiAqLworCSAqIGFkZGl0aW9uYWwgcm9vdCBzdGFnZSBsb2NrIChibGFja2Zpbi1zcGVjaWZpYykuCisJICovCisJaWYgKHRlc3RfYml0KElQSVBFX1NZTkNERUZFUl9GTEFHLCAmcC0+c3RhdHVzKSkKKwkJcyA9IF9fdGVzdF9hbmRfc2V0X2JpdChJUElQRV9TVEFMTF9GTEFHLCAmcC0+c3RhdHVzKTsKIAotCWlmICh0ZXN0X2JpdChJUElQRV9ST09UTE9DS19GTEFHLCAmaXBpcGVfcm9vdF9kb21haW4tPmZsYWdzKSkKLQkJcyA9IF9fdGVzdF9hbmRfc2V0X2JpdChJUElQRV9TVEFMTF9GTEFHLAotCQkJCSAgICAgICAmaXBpcGVfcm9vdF9jcHVkb21fdmFyKHN0YXR1cykpOwotZmluYWxpemU6CisJLyoKKwkgKiBJZiB0aGUgaW50ZXJydXB0IHByZWVtcHRlZCB0aGUgaGVhZCBkb21haW4sIHRoZW4gZG8gbm90CisJICogZXZlbiB0cnkgdG8gd2FsayB0aGUgcGlwZWxpbmUsIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMKKwkgKiBwZW5kaW5nIGZvciBpdC4KKwkgKi8KKwlpZiAodGVzdF9iaXQoSVBJUEVfQUhFQURfRkxBRywgJnRoaXNfZG9tYWluLT5mbGFncykgJiYKKwkgICAgaXBpcGVfaGVhZF9jcHVkb21fdmFyKGlycXBlbmRfaGltYXNrKSA9PSAwKQorCQlnb3RvIG91dDsKIAogCV9faXBpcGVfd2Fsa19waXBlbGluZShoZWFkKTsKLQorb3V0OgogCWlmICghcykKLQkJX19jbGVhcl9iaXQoSVBJUEVfU1RBTExfRkxBRywKLQkJCSAgICAmaXBpcGVfcm9vdF9jcHVkb21fdmFyKHN0YXR1cykpOworCQlfX2NsZWFyX2JpdChJUElQRV9TVEFMTF9GTEFHLCAmcC0+c3RhdHVzKTsKIH0KIAogaW50IF9faXBpcGVfY2hlY2tfcm9vdCh2b2lkKQpAQCAtMTg3LDcgKzE2Niw3IEBACiAKIHZvaWQgX19pcGlwZV9lbmFibGVfaXJxZGVzYyhzdHJ1Y3QgaXBpcGVfZG9tYWluICppcGQsIHVuc2lnbmVkIGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCWludCBwcmlvID0gZGVzYy0+aWNfcHJpbzsKIAogCWRlc2MtPmRlcHRoID0gMDsKQEAgLTE5OSw3ICsxNzgsNyBAQAogCiB2b2lkIF9faXBpcGVfZGlzYWJsZV9pcnFkZXNjKHN0cnVjdCBpcGlwZV9kb21haW4gKmlwZCwgdW5zaWduZWQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJaW50IHByaW8gPSBkZXNjLT5pY19wcmlvOwogCiAJaWYgKGlwZCAhPSAmaXBpcGVfcm9vdCAmJgpAQCAtMjM2LDE1ICsyMTUsMTggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogV2UgbmVlZCB0byBydW4gdGhlIElSUSB0YWlsIGhvb2sgd2hlbmV2ZXIgd2UgZG9uJ3QKKwkvKgorCSAqIFdlIG5lZWQgdG8gcnVuIHRoZSBJUlEgdGFpbCBob29rIHdoZW5ldmVyIHdlIGRvbid0CiAJICogcHJvcGFnYXRlIGEgc3lzY2FsbCB0byBoaWdoZXIgZG9tYWlucywgYmVjYXVzZSB3ZSBrbm93IHRoYXQKIAkgKiBpbXBvcnRhbnQgb3BlcmF0aW9ucyBtaWdodCBiZSBwZW5kaW5nIHRoZXJlIChlLmcuIFhlbm9tYWkKLQkgKiBkZWZlcnJlZCByZXNjaGVkdWxpbmcpLiAqLworCSAqIGRlZmVycmVkIHJlc2NoZWR1bGluZykuCisJICovCiAKLQlpZiAoIV9faXBpcGVfc3lzY2FsbF93YXRjaGVkX3AoY3VycmVudCwgcmVncy0+b3JpZ19wMCkpIHsKKwlpZiAocmVncy0+b3JpZ19wMCA8IE5SX3N5c2NhbGxzKSB7CiAJCXZvaWQgKCpob29rKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlfX2lwaXBlX2lycV90YWlsX2hvb2s7CiAJCWhvb2soKTsKLQkJcmV0dXJuIDA7CisJCWlmICgoY3VycmVudC0+ZmxhZ3MgJiBQRl9FVk5PVElGWSkgPT0gMCkKKwkJCXJldHVybiAwOwogCX0KIAogCS8qCkBAIC0zMTIsMTEyICsyOTQsNDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisjaWZkZWYgQ09ORklHX0lQSVBFX0RFQlVHCiAJaWYgKGlycSA+PSBJUElQRV9OUl9JUlFTIHx8CiAJICAgIChpcGlwZV92aXJ0dWFsX2lycV9wKGlycSkKIAkgICAgICYmICF0ZXN0X2JpdChpcnEgLSBJUElQRV9WSVJRX0JBU0UsICZfX2lwaXBlX3ZpcnR1YWxfaXJxX21hcCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgogCiAJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOwotCiAJX19pcGlwZV9oYW5kbGVfaXJxKGlycSwgTlVMTCk7Ci0KIAlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CiAKIAlyZXR1cm4gMTsKIH0KIAotLyogTW92ZSBMaW51eCBJUlEgdG8gdGhyZWFkcy4gKi8KLQotc3RhdGljIGludCBkb19pcnFkKHZvaWQgKl9fZGVzYykKK2FzbWxpbmthZ2Ugdm9pZCBfX2lwaXBlX3N5bmNfcm9vdCh2b2lkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IF9fZGVzYzsKLQl1bnNpZ25lZCBpcnEgPSBkZXNjIC0gaXJxX2Rlc2M7Ci0JaW50IHRocnByaW8gPSBkZXNjLT50aHJfcHJpbzsKLQlpbnQgdGhybWFzayA9IDEgPDwgdGhycHJpbzsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWNwdW1hc2tfdCBjcHVtYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzaWdmaWxsc2V0KCZjdXJyZW50LT5ibG9ja2VkKTsKLQljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKLQljcHVtYXNrID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2spOwotCWlwaXBlX3NldHNjaGVkdWxlcl9yb290KGN1cnJlbnQsIFNDSEVEX0ZJRk8sIDUwICsgdGhycHJpbyk7CisJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CiAKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfU0NIRURVTEVEKSkgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLXJlc2NoZWQ6Ci0JCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJfQotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCS8qCi0JCSAqIElmIGhpZ2hlciBwcmlvcml0eSBpbnRlcnJ1cHQgc2VydmVycyBhcmUgcmVhZHkgdG8KLQkJICogcnVuLCByZXNjaGVkdWxlIGltbWVkaWF0ZWx5LiBXZSBuZWVkIHRoaXMgZm9yIHRoZQotCQkgKiBHUElPIGRlbXV4IElSUSBoYW5kbGVyIHRvIHVubWFzayB0aGUgaW50ZXJydXB0IGxpbmUKLQkJICogX2xhc3RfLCBhZnRlciBhbGwgR1BJTyBJUlFzIGhhdmUgcnVuLgotCQkgKi8KLQkJaWYgKHBlcl9jcHUocGVuZGluZ19pcnF0aHJlYWRfbWFzaywgY3B1KSAmIH4odGhybWFza3wodGhybWFzay0xKSkpCi0JCQlnb3RvIHJlc2NoZWQ7Ci0JCWlmICgtLXBlcl9jcHUocGVuZGluZ19pcnFfY291bnRbdGhycHJpb10sIGNwdSkgPT0gMCkKLQkJCXBlcl9jcHUocGVuZGluZ19pcnF0aHJlYWRfbWFzaywgY3B1KSAmPSB+dGhybWFzazsKLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfU0NIRURVTEVEOwotCQlkZXNjLT50aHJfaGFuZGxlcihpcnEsICZfX3Jhd19nZXRfY3B1X3ZhcihfX2lwaXBlX3RpY2tfcmVncykpOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZXR1cm4gMDsKKwlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CisKKwljbGVhcl90aHJlYWRfZmxhZyhUSUZfSVJRX1NZTkMpOworCisJaWYgKGlwaXBlX3Jvb3RfY3B1ZG9tX3ZhcihpcnFwZW5kX2hpbWFzaykgIT0gMCkKKwkJX19pcGlwZV9zeW5jX3BpcGVsaW5lKElQSVBFX0lSUU1BU0tfQU5ZKTsKKworCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQga2lja19pcnFkKHVuc2lnbmVkIGlycSwgdm9pZCAqY29va2llKQordm9pZCBfX19pcGlwZV9zeW5jX3BpcGVsaW5lKHVuc2lnbmVkIGxvbmcgc3luY21hc2spCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JaW50IHRocnByaW8gPSBkZXNjLT50aHJfcHJpbzsKLQlpbnQgdGhybWFzayA9IDEgPDwgdGhycHJpbzsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBpcGlwZV9kb21haW4gKmlwZCA9IGlwaXBlX2N1cnJlbnRfZG9tYWluOwogCi0JaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX1NDSEVEVUxFRCkpIHsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9TQ0hFRFVMRUQ7Ci0JCXBlcl9jcHUocGVuZGluZ19pcnF0aHJlYWRfbWFzaywgY3B1KSB8PSB0aHJtYXNrOwotCQkrK3Blcl9jcHUocGVuZGluZ19pcnFfY291bnRbdGhycHJpb10sIGNwdSk7Ci0JCXdha2VfdXBfcHJvY2VzcyhkZXNjLT50aHJlYWQpOwotCX0KLX0KLQotaW50IGlwaXBlX3N0YXJ0X2lycV90aHJlYWQodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaWYgKGRlc2MtPnRocmVhZCB8fCAhY3JlYXRlX2lycV90aHJlYWRzKQotCQlyZXR1cm4gMDsKLQotCWRlc2MtPnRocmVhZCA9IGt0aHJlYWRfY3JlYXRlKGRvX2lycWQsIGRlc2MsICJJUlEgJWQiLCBpcnEpOwotCWlmIChkZXNjLT50aHJlYWQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImlycWQ6IGNvdWxkIG5vdCBjcmVhdGUgSVJRIHRocmVhZCAlZCFcbiIsIGlycSk7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChpcGQgPT0gaXBpcGVfcm9vdF9kb21haW4pIHsKKwkJaWYgKHRlc3RfYml0KElQSVBFX1NZTkNERUZFUl9GTEFHLCAmaXBpcGVfcm9vdF9jcHVkb21fdmFyKHN0YXR1cykpKQorCQkJcmV0dXJuOwogCX0KIAotCXdha2VfdXBfcHJvY2VzcyhkZXNjLT50aHJlYWQpOwotCi0JZGVzYy0+dGhyX2hhbmRsZXIgPSBpcGlwZV9yb290X2RvbWFpbi0+aXJxc1tpcnFdLmhhbmRsZXI7Ci0JaXBpcGVfcm9vdF9kb21haW4tPmlycXNbaXJxXS5oYW5kbGVyID0gJmtpY2tfaXJxZDsKLQotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBpcGlwZV9pbml0X2lycV90aHJlYWRzKHZvaWQpCi17Ci0JdW5zaWduZWQgaXJxOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQotCWNyZWF0ZV9pcnFfdGhyZWFkcyA9IDE7Ci0KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7Ci0JCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQkJaWYgKGRlc2MtPmFjdGlvbiAhPSBOVUxMIHx8Ci0JCQkoZGVzYy0+c3RhdHVzICYgSVJRX05PUkVRVUVTVCkgIT0gMCkKLQkJCWlwaXBlX3N0YXJ0X2lycV90aHJlYWQoaXJxLCBkZXNjKTsKLQl9CisJX19pcGlwZV9zeW5jX3N0YWdlKHN5bmNtYXNrKTsKIH0KIAogRVhQT1JUX1NZTUJPTChzaG93X3N0YWNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwppbmRleCA3NTcyNGVlLi5iZDA1MmE2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCkBAIC04Myw3ICs4Myw3IEBACiAJCQlnb3RvIHNraXA7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKQEAgLTE0NCwxMSArMTQ0LDE1IEBACiAjZW5kaWYKIAlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKIAotI2lmbmRlZiBDT05GSUdfSVBJUEUJLyogVXNlbGVzcyBhbmQgYnVnb3VzIG92ZXIgdGhlIEktcGlwZTogSVJRcyBhcmUgdGhyZWFkZWQuICovCi0JLyogSWYgd2UncmUgdGhlIG9ubHkgaW50ZXJydXB0IHJ1bm5pbmcgKGlnbm9yaW5nIElSUTE1IHdoaWNoIGlzIGZvcgotCSAgIHN5c2NhbGxzKSwgbG93ZXIgb3VyIHByaW9yaXR5IHRvIElSUTE0IHNvIHRoYXQgc29mdGlycXMgcnVuIGF0Ci0JICAgdGhhdCBsZXZlbC4gIElmIHRoZXJlJ3MgYW5vdGhlciwgbG93ZXItbGV2ZWwgaW50ZXJydXB0LCBpcnFfZXhpdAotCSAgIHdpbGwgZGVmZXIgc29mdGlycXMgdG8gdGhhdC4gICovCisjaWZuZGVmIENPTkZJR19JUElQRQorCS8qCisJICogSWYgd2UncmUgdGhlIG9ubHkgaW50ZXJydXB0IHJ1bm5pbmcgKGlnbm9yaW5nIElSUTE1IHdoaWNoCisJICogaXMgZm9yIHN5c2NhbGxzKSwgbG93ZXIgb3VyIHByaW9yaXR5IHRvIElSUTE0IHNvIHRoYXQKKwkgKiBzb2Z0aXJxcyBydW4gYXQgdGhhdCBsZXZlbC4gIElmIHRoZXJlJ3MgYW5vdGhlciwKKwkgKiBsb3dlci1sZXZlbCBpbnRlcnJ1cHQsIGlycV9leGl0IHdpbGwgZGVmZXIgc29mdGlycXMgdG8KKwkgKiB0aGF0LiBJZiB0aGUgaW50ZXJydXB0IHBpcGVsaW5lIGlzIGVuYWJsZWQsIHdlIGFyZSBhbHJlYWR5CisJICogcnVubmluZyBhdCBJUlExNCBwcmlvcml0eSwgc28gd2UgZG9uJ3QgbmVlZCB0aGlzIGNvZGUuCisJICovCiAJQ1NZTkMoKTsKIAlwZW5kaW5nID0gYmZpbl9yZWFkX0lQRU5EKCkgJiB+MHg4MDAwOwogCW90aGVyX2ludHMgPSBwZW5kaW5nICYgKHBlbmRpbmcgLSAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGJfdGVzdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYl90ZXN0LmMKaW5kZXggM2RiYTljMS4uZGJjZjNlNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYl90ZXN0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYl90ZXN0LmMKQEAgLTIwLDYgKzIwLDcgQEAKIHN0YXRpYyBjaGFyIGNtZGxpbmVbMjU2XTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxlbjsKIAorI2lmbmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IG51bTEgX19hdHRyaWJ1dGVfXygobDFfZGF0YSkpOwogCiB2b2lkIGtnZGJfbDFfdGVzdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChsMV90ZXh0KSk7CkBAIC0zMiw2ICszMyw4IEBACiAJcHJpbnRrKEtFUk5fQUxFUlQgIkwxKGFmdGVyIGNoYW5nZSkgOiBkYXRhIHZhcmlhYmxlIGFkZHIgPSAweCVwLCBkYXRhIHZhbHVlIGlzICVkXG4iLCAmbnVtMSwgbnVtMSk7CiAJcmV0dXJuIDsKIH0KKyNlbmRpZgorCiAjaWYgTDJfTEVOR1RICiAKIHN0YXRpYyBpbnQgbnVtMiBfX2F0dHJpYnV0ZV9fKChsMikpOwpAQCAtNTksMTAgKzYyLDEyIEBACiBzdGF0aWMgaW50IHRlc3RfcHJvY19vdXRwdXQoY2hhciAqYnVmKQogewogCWtnZGJfdGVzdCgiaGVsbG8gd29ybGQhIiwgMTIsIDB4NTUsIDB4MTApOworI2lmbmRlZiBDT05GSUdfU01QCiAJa2dkYl9sMV90ZXN0KCk7Ci0JI2lmIEwyX0xFTkdUSAorI2VuZGlmCisjaWYgTDJfTEVOR1RICiAJa2dkYl9sMl90ZXN0KCk7Ci0JI2VuZGlmCisjZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwppbmRleCA1OTRlMzI1Li5kNzY2MThkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZml4ZWRfY29kZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21lbV9tYXAuaD4KIAogI2RlZmluZSBURVhUX09GRlNFVCAwCkBAIC0yNDAsNyArMjQxLDcgQEAKIAogCQkJfSBlbHNlIGlmIChhZGRyID49IEZJWEVEX0NPREVfU1RBUlQKIAkJCSAgICAmJiBhZGRyICsgc2l6ZW9mKHRtcCkgPD0gRklYRURfQ09ERV9FTkQpIHsKLQkJCQltZW1jcHkoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciksIHNpemVvZih0bXApKTsKKwkJCQljb3B5X2Zyb21fdXNlcl9wYWdlKDAsIDAsIDAsICZ0bXAsIChjb25zdCB2b2lkICopKGFkZHIpLCBzaXplb2YodG1wKSk7CiAJCQkJY29waWVkID0gc2l6ZW9mKHRtcCk7CiAKIAkJCX0gZWxzZQpAQCAtMzIwLDcgKzMyMSw3IEBACiAKIAkJCX0gZWxzZSBpZiAoYWRkciA+PSBGSVhFRF9DT0RFX1NUQVJUCiAJCQkgICAgJiYgYWRkciArIHNpemVvZihkYXRhKSA8PSBGSVhFRF9DT0RFX0VORCkgewotCQkJCW1lbWNweSgodm9pZCAqKShhZGRyKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CisJCQkJY29weV90b191c2VyX3BhZ2UoMCwgMCwgMCwgKHZvaWQgKikoYWRkciksICZkYXRhLCBzaXplb2YoZGF0YSkpOwogCQkJCWNvcGllZCA9IHNpemVvZihkYXRhKTsKIAogCQkJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwppbmRleCBlNWMxMTYyLi5hNTg2ODdiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKQEAgLTg4OSw2ICs4ODksMTAgQEAKIAkJCSAgICAgICBDUFUsIGJmaW5fcmV2aWQoKSk7CiAJfQogCisJLyogV2UgY2FuJ3QgcnVuIG9uIEJGNTQ4LTAuMSBkdWUgdG8gQU5PTUFMWSAwNTAwMDQ0OCAqLworCWlmIChiZmluX2NwdWlkKCkgPT0gMHgyN2RlICYmIGJmaW5fcmV2aWQoKSA9PSAxKQorCQlwYW5pYygiWW91IGNhbid0IHJ1biBvbiB0aGlzIHByb2Nlc3NvciBkdWUgdG8gMDUwMDA0NDhcbiIpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTGludXggc3VwcG9ydCBieSBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvXG4iKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlByb2Nlc3NvciBTcGVlZDogJWx1IE1IeiBjb3JlIGNsb2NrIGFuZCAlbHUgTUh6IFN5c3RlbSBDbG9ja1xuIiwKQEAgLTExNDEsMTIgKzExNDUsMTIgQEAKIAkJaWNhY2hlX3NpemUgPSAwOwogCiAJc2VxX3ByaW50ZihtLCAiY2FjaGUgc2l6ZVx0OiAlZCBLQihMMSBpY2FjaGUpICIKLQkJIiVkIEtCKEwxIGRjYWNoZS0lcykgJWQgS0IoTDIgY2FjaGUpXG4iLAorCQkiJWQgS0IoTDEgZGNhY2hlJXMpICVkIEtCKEwyIGNhY2hlKVxuIiwKIAkJaWNhY2hlX3NpemUsIGRjYWNoZV9zaXplLAogI2lmIGRlZmluZWQgQ09ORklHX0JGSU5fV0IKLQkJIndiIgorCQkiLXdiIgogI2VsaWYgZGVmaW5lZCBDT05GSUdfQkZJTl9XVAotCQkid3QiCisJCSItd3QiCiAjZW5kaWYKIAkJIiIsIDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKaW5kZXggMTcyYjRjNTguLjFiYmFjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKQEAgLTEzNCw3ICsxMzQsMTAgQEAKIAogCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwogI2lmIGRlZmluZWQoQ09ORklHX1RJQ0tfU09VUkNFX1NZU1RNUjApICYmICFkZWZpbmVkKENPTkZJR19JUElQRSkKLS8qIEZJWE1FOiBIZXJlIFRJTUlMMCBpcyBub3Qgc2V0IHdoZW4gSVBJUEUgZW5hYmxlZCwgd2h5PyAqLworCS8qCisJICogVElNSUwwIGlzIGxhdGNoZWQgaW4gX19pcGlwZV9ncmFiX2lycSgpIHdoZW4gdGhlIEktUGlwZSBpcworCSAqIGVuYWJsZWQuCisJICovCiAJaWYgKGdldF9ncHRpbWVyX3N0YXR1cygwKSAmIFRJTUVSX1NUQVRVU19USU1JTDApIHsKICNlbmRpZgogCQlkb190aW1lcigxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwppbmRleCAwZTE3NTM0Li40MWYyZWFjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jCkBAIC0xMTMsNyArMTEzLDYgQEAKIAkubmFtZSA9ICJiZmluX21hYyIsCiAJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fbWlpX2J1cywKIH07Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX05FVF9EU0FfS1NaODg5M00pIHx8IGRlZmluZWQoQ09ORklHX05FVF9EU0FfS1NaODg5M01fTU9EVUxFKQogc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSBrc3o4ODkzbV9zd2l0Y2hfZGF0YSA9IHsKQEAgLTEzMiw2ICsxMzEsNyBAQAogCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZrc3o4ODkzbV9zd2l0Y2hfZGF0YSwKIH07CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MCkgXAogCXx8IGRlZmluZWQoQ09ORklHX01URF9NMjVQODBfTU9EVUxFKQpAQCAtMTcxLDYgKzE3MSw3IEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19CRklOX01BQykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfTU9EVUxFKQogI2lmIGRlZmluZWQoQ09ORklHX05FVF9EU0FfS1NaODg5M00pIFwKIAl8fCBkZWZpbmVkKENPTkZJR19ORVRfRFNBX0tTWjg4OTNNX01PRFVMRSkKIC8qIFNQSSBTV0lUQ0ggQ0hJUCAqLwpAQCAtMTc5LDEwICsxODAsMTEgQEAKIAkuYml0c19wZXJfd29yZCA9IDgsCiB9OwogI2VuZGlmCisjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9tbWNfY2hpcF9pbmZvID0gewotCS5lbmFibGVfZG1hID0gMSwKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfU1BJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBtbWNfc3BpX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAogfTsKICNlbmRpZgpAQCAtMjU5LDYgKzI2MSw3IEBACiAJfSwKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkKICNpZiBkZWZpbmVkKENPTkZJR19ORVRfRFNBX0tTWjg4OTNNKSBcCiAJfHwgZGVmaW5lZChDT05GSUdfTkVUX0RTQV9LU1o4ODkzTV9NT0RVTEUpCiAJewpAQCAtMjcxLDI0ICsyNzQsMTUgQEAKIAkJLm1vZGUgPSBTUElfTU9ERV8zLAogCX0sCiAjZW5kaWYKKyNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCiAJewotCQkubW9kYWxpYXMgPSAic3BpX21tY19kdW1teSIsCisJCS5tb2RhbGlhcyA9ICJtbWNfc3BpIiwKIAkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwogCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDAsCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKLQkJLm1vZGUgPSBTUElfTU9ERV8zLAotCX0sCi0JewotCQkubW9kYWxpYXMgPSAic3BpX21tYyIsCi0JCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSBDT05GSUdfU1BJX01NQ19DU19DSEFOLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCisJCS5jaGlwX3NlbGVjdCA9IDUsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbW1jX3NwaV9jaGlwX2luZm8sCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAl9LAogI2VuZGlmCkBAIC02MzAsMTEgKzYyNCwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fTUFDKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX01BQ19NT0RVTEUpCiAJJmJmaW5fbWlpX2J1cywKIAkmYmZpbl9tYWNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19ORVRfRFNBX0tTWjg4OTNNKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfRFNBX0tTWjg4OTNNX01PRFVMRSkKIAkma3N6ODg5M21fc3dpdGNoX2RldmljZSwKICNlbmRpZgorI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TUElfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU1BJX0JGSU5fTU9EVUxFKQogCSZiZmluX3NwaTBfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAppbmRleCBlNWI0YmVmLi5jODQ3YmIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtMiwxMiArMiwxMiBAQAogICogRmlsZTogaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9hbm9tYWx5LmgKICAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxlIGJlIHVwIHRvIGRhdGUgd2l0aDoKLSAqICAtID8/Pz8KKyAqICAtIFJldmlzaW9uIEIsIDAyLzAzLzIwMDk7IEFEU1AtQkY1MTIvQkY1MTQvQkY1MTYvQkY1MTggQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAogICovCiAKICNpZm5kZWYgX01BQ0hfQU5PTUFMWV9IXwpAQCAtMTksNiArMTksOCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTIyICgxKQogLyogRmFsc2UgSGFyZHdhcmUgRXJyb3IgZnJvbSBhbiBBY2Nlc3MgaW4gdGhlIFNoYWRvdyBvZiBhIENvbmRpdGlvbmFsIEJyYW5jaCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjQ1ICgxKQorLyogSW5jb3JyZWN0IFRpbWVyIFB1bHNlIFdpZHRoIGluIFNpbmdsZS1TaG90IFBXTV9PVVQgTW9kZSB3aXRoIEV4dGVybmFsIENsb2NrICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyNTQgKDEpCiAvKiBTZW5zaXRpdml0eSBUbyBOb2lzZSB3aXRoIFNsb3cgSW5wdXQgRWRnZSBSYXRlcyBvbiBFeHRlcm5hbCBTUE9SVCBUWCBhbmQgUlggQ2xvY2tzICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjUgKDEpCiAvKiBGYWxzZSBIYXJkd2FyZSBFcnJvcnMgQ2F1c2VkIGJ5IEZldGNoZXMgYXQgdGhlIEJvdW5kYXJ5IG9mIFJlc2VydmVkIE1lbW9yeSAqLwpAQCAtNTMsNiArNTUsMTIgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0MyAoMSkKIC8qIEluY29ycmVjdCBMMSBJbnN0cnVjdGlvbiBCYW5rIEIgTWVtb3J5IE1hcCBMb2NhdGlvbiAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQ0ICgxKQorLyogSW5jb3JyZWN0IERlZmF1bHQgSHlzdGVyZXNpcyBTZXR0aW5nIGZvciBSRVNFVCwgTk1JLCBhbmQgQk1PREUgU2lnbmFscyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDUyICgxKQorLyogUFdNX1RSSVBCIFNpZ25hbCBOb3QgQXZhaWxhYmxlIG9uIFBHMTAgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ1MyAoMSkKKy8qIFBQSV9GUzMgaXMgRHJpdmVuIE9uZSBIYWxmIEN5Y2xlIExhdGVyIFRoYW4gUFBJIERhdGEgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ1NSAoMSkKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxMjUgKDApCkBAIC02NSwxNSArNzMsMjAgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3OCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI4NSAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyMyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2MyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4MCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQzMiAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0NyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0OCAoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBiNTBhNjNiLi5lMjFjMWMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTE0NCw3ICsxNDQsNyBAQAogCSBDSF9VQVJUMF9UWCwKIAkgQ0hfVUFSVDBfUlgsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAJIENPTkZJR19VQVJUMF9DVFNfUElOLAogCSBDT05GSUdfVUFSVDBfUlRTX1BJTiwKICNlbmRpZgpAQCAtMTU4LDcgKzE1OCw3IEBACiAJIENIX1VBUlQxX1RYLAogCSBDSF9VQVJUMV9SWCwKICNlbmRpZgotI2lmZGVmIENPTkZJR19CRklOX1VBUlQxX0NUU1JUUworI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKIAkgQ09ORklHX1VBUlQxX0NUU19QSU4sCiAJIENPTkZJR19VQVJUMV9SVFNfUElOLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKaW5kZXggODU2YzA5Ny4uNDhlNjllZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwpAQCAtNDg3LDkgKzQ4Nyw5IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDEsCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgIG1tY19zcGlfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDgsCiB9OwogI2VuZGlmCkBAIC01ODUsMjMgKzU4NSwxMyBAQAogCQkuY29udHJvbGxlcl9kYXRhID0gJmFkOTk2MF9zcGlfY2hpcF9pbmZvLAogCX0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfU1BJX01PRFVMRSkKIAl7Ci0JCS5tb2RhbGlhcyA9ICJzcGlfbW1jX2R1bW15IiwKLQkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkubW9kYWxpYXMgPSAibW1jX3NwaSIsCisJCS5tYXhfc3BlZWRfaHogPSAyMDAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KIAkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSAwLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCi0JCS5tb2RlID0gU1BJX01PREVfMywKLQl9LAotCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWMiLAotCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gQ09ORklHX1NQSV9NTUNfQ1NfQ0hBTiwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAorCQkuY2hpcF9zZWxlY3QgPSA1LAorCQkuY29udHJvbGxlcl9kYXRhID0gJm1tY19zcGlfY2hpcF9pbmZvLAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCmluZGV4IDgzNjA2ZmMuLjdmZTQ4MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKQEAgLTI1Niw5ICsyNTYsOSBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX21tY19jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAxLAorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIG1tY19zcGlfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDgsCiB9OwogI2VuZGlmCkBAIC0zNjYsMjMgKzM2NiwxMyBAQAogCX0sCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQogCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWNfZHVtbXkiLAorCQkubW9kYWxpYXMgPSAibW1jX3NwaSIsCiAJCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KIAkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSAwLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCi0JCS5tb2RlID0gU1BJX01PREVfMywKLQl9LAotCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWMiLAotCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gQ09ORklHX1NQSV9NTUNfQ1NfQ0hBTiwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAorCQkuY2hpcF9zZWxlY3QgPSA1LAorCQkuY29udHJvbGxlcl9kYXRhID0gJm1tY19zcGlfY2hpcF9pbmZvLAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAppbmRleCAwMzVlOGQ4Li5kZjY4MDhkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtMiw3ICsyLDcgQEAKICAqIEZpbGU6IGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvYW5vbWFseS5oCiAgKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApAQCAtMTY3LDEyICsxNjcsMTYgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3OCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI4NSAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyMyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxMiAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0NyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0OCAoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCA3NTcyMmQ2Li5lOGM0MWZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTE0NCw3ICsxNDQsNyBAQAogCSBDSF9VQVJUMF9UWCwKIAkgQ0hfVUFSVDBfUlgsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAJIENPTkZJR19VQVJUMF9DVFNfUElOLAogCSBDT05GSUdfVUFSVDBfUlRTX1BJTiwKICNlbmRpZgpAQCAtMTU4LDcgKzE1OCw3IEBACiAJIENIX1VBUlQxX1RYLAogCSBDSF9VQVJUMV9SWCwKICNlbmRpZgotI2lmZGVmIENPTkZJR19CRklOX1VBUlQxX0NUU1JUUworI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKIAkgQ09ORklHX1VBUlQxX0NUU19QSU4sCiAJIENPTkZJR19VQVJUMV9SVFNfUElOLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0tjb25maWcKaW5kZXggMzA4Yzk4ZC4uOGQ4YjNlNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvS2NvbmZpZwpAQCAtMzgsOSArMzgsNCBAQAogCWhlbHAKIAkgIENvcmUgc3VwcG9ydCBmb3IgSVAwNC9JUDA0IG9wZW4gaGFyZHdhcmUgSVAtUEJYLgogCi1jb25maWcgR0VORVJJQ19CRjUzM19CT0FSRAotCWJvb2wgIkdlbmVyaWMiCi0JaGVscAotCSAgR2VuZXJpYyBvciBDdXN0b20gYm9hcmQgc3VwcG9ydC4KLQogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9NYWtlZmlsZQppbmRleCA5YWZiZTcyLi5mZjFlODMyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvTWFrZWZpbGUKQEAgLTIsNyArMiw2IEBACiAjIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvTWFrZWZpbGUKICMKIAotb2JqLSQoQ09ORklHX0dFTkVSSUNfQkY1MzNfQk9BUkQpICAgICAgKz0gZ2VuZXJpY19ib2FyZC5vCiBvYmotJChDT05GSUdfQkZJTjUzM19TVEFNUCkgICAgICAgICAgICArPSBzdGFtcC5vCiBvYmotJChDT05GSUdfQkZJTjUzMl9JUDBYKSAgICAgICAgICAgICArPSBpcDB4Lm8KIG9iai0kKENPTkZJR19CRklONTMzX0VaS0lUKSAgICAgICAgICAgICs9IGV6a2l0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvYmxhY2tzdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMKaW5kZXggMDE1YzE4Zi4uMDc2NTg3MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMKQEAgLTEwMSw5ICsxMDEsOSBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX21tY19jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAxLAorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIG1tY19zcGlfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDgsCiB9OwogI2VuZGlmCkBAIC0xMjksMjMgKzEyOSwxMyBAQAogCX0sCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQogCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWNfZHVtbXkiLAorCQkubW9kYWxpYXMgPSAibW1jX3NwaSIsCiAJCS5tYXhfc3BlZWRfaHogPSAyMDAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KIAkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSAwLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCi0JCS5tb2RlID0gU1BJX01PREVfMywKLQl9LAotCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWMiLAotCQkubWF4X3NwZWVkX2h6ID0gMjAwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gQ09ORklHX1NQSV9NTUNfQ1NfQ0hBTiwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAorCQkuY2hpcF9zZWxlY3QgPSA1LAorCQkuY29udHJvbGxlcl9kYXRhID0gJm1tY19zcGlfY2hpcF9pbmZvLAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jCmluZGV4IGU3MDYxYzcuLmU4OTc0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKQEAgLTk2LDkgKzk2LDkgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9tbWNfY2hpcF9pbmZvID0gewotCS5lbmFibGVfZG1hID0gMSwKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfU1BJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBtbWNfc3BpX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAogfTsKICNlbmRpZgpAQCAtMTM4LDIzICsxMzgsMTMgQEAKIAl9LAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfU1BJX01PRFVMRSkKIAl7Ci0JCS5tb2RhbGlhcyA9ICJzcGlfbW1jX2R1bW15IiwKKwkJLm1vZGFsaWFzID0gIm1tY19zcGkiLAogCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCiAJCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMCwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAotCQkubW9kZSA9IFNQSV9NT0RFXzMsCi0JfSwKLQl7Ci0JCS5tb2RhbGlhcyA9ICJzcGlfbW1jIiwKLQkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwotCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IENPTkZJR19TUElfTU1DX0NTX0NIQU4sCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKKwkJLmNoaXBfc2VsZWN0ID0gNSwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZtbWNfc3BpX2NoaXBfaW5mbywKIAkJLm1vZGUgPSBTUElfTU9ERV8zLAogCX0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9nZW5lcmljX2JvYXJkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NmVlZWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9nZW5lcmljX2JvYXJkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2dlbmVyaWNfYm9hcmQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgotICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLS8qCi0gKiBOYW1lIHRoZSBCb2FyZCBmb3IgdGhlIC9wcm9jL2NwdWluZm8KLSAqLwotY29uc3QgY2hhciBiZmluX2JvYXJkX25hbWVbXSA9ICJVTktOT1dOIEJPQVJEIjsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicnRjLWJmaW4iLAotCS5pZCAgID0gLTEsCi19OwotI2VuZGlmCi0KLS8qCi0gKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gMHgyMDMwMDMwMCwKLQkJLmVuZCA9IDB4MjAzMDAzMDAgKyAxNiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBJUlFfUFJPR19JTlRCLAotCQkuZW5kID0gSVJRX1BST0dfSU5UQiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCi0JfSwgewotCQkuc3RhcnQgPSBJUlFfUEY3LAotCQkuZW5kID0gSVJRX1BGNywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic21jOTF4IiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBzbWM5MXhfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkZJTl9TSVIpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fU0lSX01PRFVMRSkKLSNpZmRlZiBDT05GSUdfQkZJTl9TSVIwCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fc2lyMF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IDB4RkZDMDA0MDAsCi0JCS5lbmQgPSAweEZGQzAwNEZGLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0ID0gSVJRX1VBUlQwX1JYLAotCQkuZW5kID0gSVJRX1VBUlQwX1JYKzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JewotCQkuc3RhcnQgPSBDSF9VQVJUMF9SWCwKLQkJLmVuZCA9IENIX1VBUlQwX1JYKzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3NpcjBfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW5fc2lyIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3NpcjBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBiZmluX3NpcjBfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZW5lcmljX2JvYXJkX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKLQkmcnRjX2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQotCSZzbWM5MXhfZGV2aWNlLAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19CRklOX1NJUikgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9TSVJfTU9EVUxFKQotI2lmZGVmIENPTkZJR19CRklOX1NJUjAKLQkmYmZpbl9zaXIwX2RldmljZSwKLSNlbmRpZgotI2VuZGlmCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBnZW5lcmljX2JvYXJkX2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGdlbmVyaWNfYm9hcmRfZGV2aWNlcywgQVJSQVlfU0laRShnZW5lcmljX2JvYXJkX2RldmljZXMpKTsKLX0KLQotYXJjaF9pbml0Y2FsbChnZW5lcmljX2JvYXJkX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwppbmRleCBlMzBiMWI3Li5mMTliNjMzNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMKQEAgLTEyNyw4ICsxMjcsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCiAvKiBhbGwgU1BJIHBlcmlwaGVyYWxzIGluZm8gZ29lcyBoZXJlICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfU1BJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBtbWNfc3BpX2NoaXBfaW5mbyA9IHsKIC8qCiAgKiBDUE9MIChDbG9jayBQb2xhcml0eSkKICAqICAwIC0gQWN0aXZlIGhpZ2ggU0NLCkBAIC0xNTIsMTQgKzE1MiwxMyBAQAogLyogTm90aWNlOiBmb3IgYmxhY2tmaW4sIHRoZSBzcGVlZF9oeiBpcyB0aGUgdmFsdWUgb2YgcmVnaXN0ZXIKICAqIFNQSV9CQVVELCBub3QgdGhlIHJlYWwgYmF1ZHJhdGUgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gYmZpbl9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCiAJewotCQkubW9kYWxpYXMgPSAic3BpX21tYyIsCisJCS5tb2RhbGlhcyA9ICJtbWNfc3BpIiwKIAkJLm1heF9zcGVlZF9oeiA9IDIsCiAJCS5idXNfbnVtID0gMSwKLQkJLmNoaXBfc2VsZWN0ID0gQ09ORklHX1NQSV9NTUNfQ1NfQ0hBTiwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAorCQkuY2hpcF9zZWxlY3QgPSA1LAorCQkuY29udHJvbGxlcl9kYXRhID0gJm1tY19zcGlfY2hpcF9pbmZvLAogCX0sCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDBkM2EwMzQuLjFjZjg5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0yLDcgKzIsNyBAQAogICogRmlsZTogaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9hbm9tYWx5LmgKICAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCkBAIC0xNjAsNyArMTYwLDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwMSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogU1NZTkNzIEFmdGVyIFdyaXRlcyBUbyBETUEgTU1SIFJlZ2lzdGVycyBNYXkgTm90IEJlIEhhbmRsZWQgQ29ycmVjdGx5ICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKLS8qIE5ldyBGZWF0dXJlOiBBZGRpdGlvbmFsIEh5c3RlcmVzaXMgb24gU1BPUlQgSW5wdXQgUGlucyAoTm90IEF2YWlsYWJsZSBPbiBPbGRlciBTaWxpY29uKSAqLworLyogU1BPUlRfSFlTIEJpdCBpbiBQTExfQ1RMIFJlZ2lzdGVyIElzIE5vdCBGdW5jdGlvbmFsICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDUgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIE5ldyBGZWF0dXJlOiBBZGRpdGlvbmFsIFBQSSBGcmFtZSBTeW5jIFNhbXBsaW5nIE9wdGlvbnMgKE5vdCBBdmFpbGFibGUgT24gT2xkZXIgU2lsaWNvbikgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQpAQCAtMjc4LDkgKzI3OCwxMiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjY2ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzIzICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzUzICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzgwICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg2ICgxKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDEyICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMyICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDM1ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQ3ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQ4ICgwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGYzZDllNDkuLjVmNTE3ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMTM0LDcgKzEzNCw3IEBACiAJQ0hfVUFSVF9UWCwKIAlDSF9VQVJUX1JYLAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwogCUNPTkZJR19VQVJUMF9DVFNfUElOLAogCUNPTkZJR19VQVJUMF9SVFNfUElOLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL0tjb25maWcKaW5kZXggNDJhNTdiMC4uNzdjNTlkYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvS2NvbmZpZwpAQCAtMzMsOSArMzMsNCBAQAogCWhlbHAKIAkgIEJvYXJkIHN1cHBseSBwYWNrYWdlIGZvciBDU1AgTWlub3RhdXIKIAotY29uZmlnIEdFTkVSSUNfQkY1MzdfQk9BUkQKLQlib29sICJHZW5lcmljIgotCWhlbHAKLQkgIEdlbmVyaWMgb3IgQ3VzdG9tIGJvYXJkIHN1cHBvcnQuCi0KIGVuZGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvTWFrZWZpbGUKaW5kZXggNzE2OGNjMS4uNjhiOThhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9NYWtlZmlsZQpAQCAtMiw3ICsyLDYgQEAKICMgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9NYWtlZmlsZQogIwogCi1vYmotJChDT05GSUdfR0VORVJJQ19CRjUzN19CT0FSRCkgICAgICArPSBnZW5lcmljX2JvYXJkLm8KIG9iai0kKENPTkZJR19CRklONTM3X1NUQU1QKSAgICAgICAgICAgICs9IHN0YW1wLm8KIG9iai0kKENPTkZJR19CRklONTM3X0JMVUVURUNITklYX0NNKSAgICs9IGNtX2JmNTM3Lm8KIG9iai0kKENPTkZJR19CRklONTM3X0JMVUVURUNITklYX1RDTSkgICs9IHRjbV9iZjUzNy5vCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3LmMKaW5kZXggOWNkOGZiMi4uNDFjNzViOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzcuYwpAQCAtMTA4LDkgKzEwOCw5IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDEsCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgIG1tY19zcGlfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDgsCiB9OwogI2VuZGlmCkBAIC0xNjAsMjMgKzE2MCwxMyBAQAogCX0sCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQogCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWNfZHVtbXkiLAotCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5tb2RhbGlhcyA9ICJtbWNfc3BpIiwKKwkJLm1heF9zcGVlZF9oeiA9IDIwMDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwogCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDcsCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKLQkJLm1vZGUgPSBTUElfTU9ERV8zLAotCX0sCi0JewotCQkubW9kYWxpYXMgPSAic3BpX21tYyIsCi0JCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSBDT05GSUdfU1BJX01NQ19DU19DSEFOLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCisJCS5jaGlwX3NlbGVjdCA9IDEsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbW1jX3NwaV9jaGlwX2luZm8sCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2dlbmVyaWNfYm9hcmQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTcxMGZkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzQ1ICswLDAgQEAKLS8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgotICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRF9NT0RVTEUpCi0jaW5jbHVkZSA8bGludXgvdXNiL2lzcDEzNjIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9zbDgxMS5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vYmZpbjV4eF9zcGkuaD4KLSNpbmNsdWRlIDxhc20vcmVib290Lmg+Ci0jaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvYWQ3ODc3Lmg+Ci0KLS8qCi0gKiBOYW1lIHRoZSBCb2FyZCBmb3IgdGhlIC9wcm9jL2NwdWluZm8KLSAqLwotY29uc3QgY2hhciBiZmluX2JvYXJkX25hbWVbXSA9ICJVTktOT1dOIEJPQVJEIjsKLQotLyoKLSAqICBEcml2ZXIgbmVlZHMgdG8ga25vdyBhZGRyZXNzLCBpcnEgYW5kIGZsYWcgcGluLgotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTc2MF9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9JU1AxNzYwX0hDRF9NT0RVTEUpCi0jaW5jbHVkZSA8bGludXgvdXNiL2lzcDE3NjAuaD4KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9pc3AxNzYwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IDB4MjAzQzAwMDAsCi0JCS5lbmQgICAgPSAweDIwM0MwMDAwICsgMHgwMDBmZmZmZiwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgID0gSVJRX1BGNywKLQkJLmVuZCAgICA9IElSUV9QRjcsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpc3AxNzYwX3BsYXRmb3JtX2RhdGEgaXNwMTc2MF9wcml2ID0gewotCS5pc19pc3AxNzYxID0gMCwKLQkucG9ydDFfZGlzYWJsZSA9IDAsCi0JLmJ1c193aWR0aF8xNiA9IDEsCi0JLnBvcnQxX290ZyA9IDAsCi0JLmFuYWxvZ19vYyA9IDAsCi0JLmRhY2tfcG9sYXJpdHlfaGlnaCA9IDAsCi0JLmRyZXFfcG9sYXJpdHlfaGlnaCA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2lzcDE3NjBfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJpc3AxNzYwLWhjZCIsCi0JLmlkICAgICAgICAgICAgID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZpc3AxNzYwX3ByaXYsCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGJmaW5faXNwMTc2MF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGJmaW5faXNwMTc2MF9yZXNvdXJjZXMsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19CRklOX0NGUENNQ0lBKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0NGUENNQ0lBX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9wY21jaWFfY2ZfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSAweDIwMzEwMDAwLCAvKiBJTyBQT1JUICovCi0JCS5lbmQgPSAweDIwMzEyMDAwLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IDB4MjAzMTEwMDAsIC8qIEF0dHJpYnV0ZSBNZW1vcnkgKi8KLQkJLmVuZCA9IDB4MjAzMTFGRkYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gSVJRX1BGNCwKLQkJLmVuZCA9IElSUV9QRjQsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCi0JfSwgewotCQkuc3RhcnQgPSA2LCAvKiBDYXJkIERldGVjdCBQRjYgKi8KLQkJLmVuZCA9IDYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3BjbWNpYV9jZl9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmZpbl9jZl9wY21jaWEiLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3BjbWNpYV9jZl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGJmaW5fcGNtY2lhX2NmX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicnRjLWJmaW4iLAotCS5pZCAgID0gLTEsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpIHx8IGRlZmluZWQoQ09ORklHX1NNQzkxWF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNtYzkxeC1yZWdzIiwKLQkJLnN0YXJ0ID0gMHgyMDMwMDMwMCwKLQkJLmVuZCA9IDB4MjAzMDAzMDAgKyAxNiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCi0JCS5zdGFydCA9IElSUV9QRjcsCi0JCS5lbmQgPSBJUlFfUEY3LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKLQl9LAotfTsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic21jOTF4IiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBzbWM5MXhfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKSB8fCBkZWZpbmVkKENPTkZJR19ETTkwMDBfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweDIwM0ZCODAwLAotCQkuZW5kCT0gMHgyMDNGQjgwMCArIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAweDIwM0ZCODAwICsgNCwKLQkJLmVuZAk9IDB4MjAzRkI4MDAgKyA1LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1BGOSwKLQkJLmVuZAk9IElSUV9QRjksCi0JCS5mbGFncwk9IChJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFKSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZG05MDAwIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRtOTAwMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGRtOTAwMF9yZXNvdXJjZXMsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfU0w4MTFfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0w4MTFfSENEX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2w4MTFfaGNkX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gMHgyMDM0MDAwMCwKLQkJLmVuZCA9IDB4MjAzNDAwMDAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gMHgyMDM0MDAwNCwKLQkJLmVuZCA9IDB4MjAzNDAwMDQsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gQ09ORklHX1VTQl9TTDgxMV9CRklOX0lSUSwKLQkJLmVuZCA9IENPTkZJR19VU0JfU0w4MTFfQkZJTl9JUlEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAotCX0sCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1NMODExX0JGSU5fVVNFX1ZCVVMpCi12b2lkIHNsODExX3BvcnRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfb24pCi17Ci0JZ3Bpb19yZXF1ZXN0KENPTkZJR19VU0JfU0w4MTFfQkZJTl9HUElPX1ZCVVMsICJ1c2I6U0w4MTFfVkJVUyIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDT05GSUdfVVNCX1NMODExX0JGSU5fR1BJT19WQlVTLCBpc19vbik7Ci0KLX0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNsODExX3BsYXRmb3JtX2RhdGEgc2w4MTFfcHJpdiA9IHsKLQkucG90cGcgPSAxMCwKLQkucG93ZXIgPSAyNTAsICAgICAgIC8qID09IDUwMG1BICovCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1NMODExX0JGSU5fVVNFX1ZCVVMpCi0JLnBvcnRfcG93ZXIgPSAmc2w4MTFfcG9ydF9wb3dlciwKLSNlbmRpZgotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2w4MTFfaGNkX2RldmljZSA9IHsKLQkubmFtZSA9ICJzbDgxMS1oY2QiLAotCS5pZCA9IDAsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmc2w4MTFfcHJpdiwKLQl9LAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzbDgxMV9oY2RfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBzbDgxMV9oY2RfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpc3AxMzYyX2hjZF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IDB4MjAzNjAwMDAsCi0JCS5lbmQgPSAweDIwMzYwMDAwLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IDB4MjAzNjAwMDQsCi0JCS5lbmQgPSAweDIwMzYwMDA0LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IENPTkZJR19VU0JfSVNQMTM2Ml9CRklOX0dQSU9fSVJRLAotCQkuZW5kID0gQ09ORklHX1VTQl9JU1AxMzYyX0JGSU5fR1BJT19JUlEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlzcDEzNjJfcGxhdGZvcm1fZGF0YSBpc3AxMzYyX3ByaXYgPSB7Ci0JLnNlbDE1S3JlcyA9IDEsCi0JLmNsa25vdHN0b3AgPSAwLAotCS5vY19lbmFibGUgPSAwLAotCS5pbnRfYWN0X2hpZ2ggPSAwLAotCS5pbnRfZWRnZV90cmlnZ2VyZWQgPSAwLAotCS5yZW1vdGVfd2FrZXVwX2Nvbm5lY3RlZCA9IDAsCi0JLm5vX3Bvd2VyX3N3aXRjaGluZyA9IDEsCi0JLnBvd2VyX3N3aXRjaGluZ19tb2RlID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlzcDEzNjJfaGNkX2RldmljZSA9IHsKLQkubmFtZSA9ICJpc3AxMzYyLWhjZCIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZpc3AxMzYyX3ByaXYsCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaXNwMTM2Ml9oY2RfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpc3AxMzYyX2hjZF9yZXNvdXJjZXMsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19CRklOX01BQykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9taWlfYnVzID0gewotCS5uYW1lID0gImJmaW5fbWlpX2J1cyIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX21hY19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmZpbl9tYWMiLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZiZmluX21paV9idXMsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3MikgfHwgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzJfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuZXQyMjcyX2JmaW5fcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSAweDIwMzAwMDAwLAotCQkuZW5kID0gMHgyMDMwMDAwMCArIDB4MTAwLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IElSUV9QRjcsCi0JCS5lbmQgPSBJUlFfUEY3LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmV0MjI3Ml9iZmluX2RldmljZSA9IHsKLQkubmFtZSA9ICJuZXQyMjcyIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobmV0MjI3Ml9iZmluX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbmV0MjI3Ml9iZmluX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCi0vKiBhbGwgU1BJIHBlcmlwaGVyYWxzIGluZm8gZ29lcyBoZXJlICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfTTI1UDgwKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYmZpbl9zcGlfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAiYm9vdGxvYWRlcihzcGkpIiwKLQkJLnNpemUgPSAweDAwMDIwMDAwLAotCQkub2Zmc2V0ID0gMCwKLQkJLm1hc2tfZmxhZ3MgPSBNVERfQ0FQX1JPTQotCX0sIHsKLQkJLm5hbWUgPSAibGludXgga2VybmVsKHNwaSkiLAotCQkuc2l6ZSA9IDB4ZTAwMDAsCi0JCS5vZmZzZXQgPSAweDIwMDAwCi0JfSwgewotCQkubmFtZSA9ICJmaWxlIHN5c3RlbShzcGkpIiwKLQkJLnNpemUgPSAweDcwMDAwMCwKLQkJLm9mZnNldCA9IDB4MDAxMDAwMDAsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGJmaW5fc3BpX2ZsYXNoX2RhdGEgPSB7Ci0JLm5hbWUgPSAibTI1cDgwIiwKLQkucGFydHMgPSBiZmluX3NwaV9mbGFzaF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoYmZpbl9zcGlfZmxhc2hfcGFydGl0aW9ucyksCi0JLnR5cGUgPSAibTI1cDY0IiwKLX07Ci0KLS8qIFNQSSBmbGFzaCBjaGlwIChtMjVwNjQpICovCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCi0JLmJpdHNfcGVyX3dvcmQgPSA4LAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FEQ19CRjUzMykgXAotCXx8IGRlZmluZWQoQ09ORklHX1NQSV9BRENfQkY1MzNfTU9EVUxFKQotLyogU1BJIEFEQyBjaGlwICovCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkY19jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAxLCAgICAgICAgIC8qIHVzZSBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLwotCS5iaXRzX3Blcl93b3JkID0gMTYsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQkxBQ0tGSU5fQUQxODM2KSBcCi0JfHwgZGVmaW5lZChDT05GSUdfU05EX0JMQUNLRklOX0FEMTgzNl9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgYWQxODM2X3NwaV9jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAwLAotCS5iaXRzX3Blcl93b3JkID0gMTYsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BRDk5NjApIHx8IGRlZmluZWQoQ09ORklHX0FEOTk2MF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgYWQ5OTYwX3NwaV9jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAwLAotCS5iaXRzX3Blcl93b3JkID0gMTYsCi19OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDEsCi0JLmJpdHNfcGVyX3dvcmQgPSA4LAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUEJYKQotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9zaTN4eHhfY2hpcF9pbmZvID0gewotCS5jdGxfcmVnCT0gMHg0LCAvKiBzZW5kIHplcm8gKi8KLQkuZW5hYmxlX2RtYQk9IDAsCi0JLmJpdHNfcGVyX3dvcmQJPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAxLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewotCS5lbmFibGVfZG1hID0gMCwKLQkuYml0c19wZXJfd29yZCA9IDE2LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhZDc4NzdfcGxhdGZvcm1fZGF0YSBiZmluX2FkNzg3N190c19pbmZvID0gewotCS5tb2RlbAkJCT0gNzg3NywKLQkudnJlZl9kZWxheV91c2Vjcwk9IDUwLAkvKiBpbnRlcm5hbCwgbm8gY2FwYWNpdG9yICovCi0JLnhfcGxhdGVfb2htcwkJPSA0MTksCi0JLnlfcGxhdGVfb2htcwkJPSA0ODYsCi0JLnByZXNzdXJlX21heAkJPSAxMDAwLAotCS5wcmVzc3VyZV9taW4JCT0gMCwKLQkuc3RvcGFjcV9wb2xhcml0eSAJPSAxLAotCS5maXJzdF9jb252ZXJzaW9uX2RlbGF5ID0gMywKLQkuYWNxdWlzaXRpb25fdGltZSAJPSAxLAotCS5hdmVyYWdpbmcgCQk9IDEsCi0JLnBlbl9kb3duX2FjY19pbnRlcnZhbCAJPSAxLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGJmaW5fc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX01URF9NMjVQODApIFwKLQl8fCBkZWZpbmVkKENPTkZJR19NVERfTTI1UDgwX01PRFVMRSkKLQl7Ci0JCS8qIHRoZSBtb2RhbGlhcyBtdXN0IGJlIHRoZSBzYW1lIGFzIHNwaSBkZXZpY2UgZHJpdmVyIG5hbWUgKi8KLQkJLm1vZGFsaWFzID0gIm0yNXA4MCIsIC8qIE5hbWUgb2Ygc3BpX2RyaXZlciBmb3IgdGhpcyBkZXZpY2UgKi8KLQkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwotCQkuYnVzX251bSA9IDAsIC8qIEZyYW1ld29yayBidXMgbnVtYmVyICovCi0JCS5jaGlwX3NlbGVjdCA9IDEsIC8qIEZyYW1ld29yayBjaGlwIHNlbGVjdC4gT24gU1RBTVA1MzcgaXQgaXMgU1BJU1NFTDEqLwotCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX3NwaV9mbGFzaF9kYXRhLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9mbGFzaF9jaGlwX2luZm8sCi0JCS5tb2RlID0gU1BJX01PREVfMywKLQl9LAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfQURDX0JGNTMzKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1BJX0FEQ19CRjUzM19NT0RVTEUpCi0JewotCQkubW9kYWxpYXMgPSAiYmZpbl9zcGlfYWRjIiwgLyogTmFtZSBvZiBzcGlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLwotCQkubWF4X3NwZWVkX2h6ID0gNjI1MDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLCAvKiBGcmFtZXdvcmsgYnVzIG51bWJlciAqLwotCQkuY2hpcF9zZWxlY3QgPSAxLCAvKiBGcmFtZXdvcmsgY2hpcCBzZWxlY3QuICovCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwgLyogTm8gc3BpX2RyaXZlciBzcGVjaWZpYyBjb25maWcgKi8KLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfYWRjX2NoaXBfaW5mbywKLQl9LAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQkxBQ0tGSU5fQUQxODM2KSBcCi0JfHwgZGVmaW5lZChDT05GSUdfU05EX0JMQUNLRklOX0FEMTgzNl9NT0RVTEUpCi0JewotCQkubW9kYWxpYXMgPSAiYWQxODM2LXNwaSIsCi0JCS5tYXhfc3BlZWRfaHogPSAzMTI1MDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwotCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IENPTkZJR19TTkRfQkxBQ0tGSU5fU1BJX1BGQklULAotCQkuY29udHJvbGxlcl9kYXRhID0gJmFkMTgzNl9zcGlfY2hpcF9pbmZvLAotCX0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BRDk5NjApIHx8IGRlZmluZWQoQ09ORklHX0FEOTk2MF9NT0RVTEUpCi0JewotCQkubW9kYWxpYXMgPSAiYWQ5OTYwLXNwaSIsCi0JCS5tYXhfc3BlZWRfaHogPSAxMDAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSAxLAotCQkuY29udHJvbGxlcl9kYXRhID0gJmFkOTk2MF9zcGlfY2hpcF9pbmZvLAotCX0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcyA9ICJzcGlfbW1jX2R1bW15IiwKLQkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwotCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDAsCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKLQkJLm1vZGUgPSBTUElfTU9ERV8zLAotCX0sCi0JewotCQkubW9kYWxpYXMgPSAic3BpX21tYyIsCi0JCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSBDT05GSUdfU1BJX01NQ19DU19DSEFOLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCi0JCS5tb2RlID0gU1BJX01PREVfMywKLQl9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfUEJYKQotCXsKLQkJLm1vZGFsaWFzID0gImZ4cy1zcGkiLAotCQkubWF4X3NwZWVkX2h6ID0gMTI1MDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gOCAtIENPTkZJR19KMTFfSlVNUEVSLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9zaTN4eHhfY2hpcF9pbmZvLAotCQkubW9kZSA9IFNQSV9NT0RFXzMsCi0JfSwKLQl7Ci0JCS5tb2RhbGlhcyA9ICJmeG8tc3BpIiwKLQkJLm1heF9zcGVlZF9oeiA9IDEyNTAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwotCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDggLSBDT05GSUdfSjE5X0pVTVBFUiwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfc2kzeHh4X2NoaXBfaW5mbywKLQkJLm1vZGUgPSBTUElfTU9ERV8zLAotCX0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCi0JewotCQkubW9kYWxpYXMJCT0gImFkNzg3NyIsCi0JCS5wbGF0Zm9ybV9kYXRhCQk9ICZiZmluX2FkNzg3N190c19pbmZvLAotCQkuaXJxCQkJPSBJUlFfUEY2LAotCQkubWF4X3NwZWVkX2h6CT0gMTI1MDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtCT0gMCwKLQkJLmNoaXBfc2VsZWN0ICA9IDEsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2FkNzg3N19jaGlwX2luZm8sCi0JfSwKLSNlbmRpZgotfTsKLQotLyogU1BJIGNvbnRyb2xsZXIgZGF0YSAqLwotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9tYXN0ZXIgYmZpbl9zcGkwX2luZm8gPSB7Ci0JLm51bV9jaGlwc2VsZWN0ID0gOCwKLQkuZW5hYmxlX2RtYSA9IDEsICAvKiBtYXN0ZXIgaGFzIHRoZSBhYmlsaXR5IHRvIGRvIGRtYSB0cmFuc2ZlciAqLwotCS5waW5fcmVxID0ge1BfU1BJMF9TQ0ssIFBfU1BJMF9NSVNPLCBQX1NQSTBfTU9TSSwgMH0sCi19OwotCi0vKiBTUEkgKDApICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fc3BpMF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gU1BJMF9SRUdCQVNFLAotCQkuZW5kICAgPSBTUEkwX1JFR0JBU0UgKyAweEZGLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IENIX1NQSSwKLQkJLmVuZCAgID0gQ0hfU1BJLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcGkwX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLXNwaSIsCi0JLmlkID0gMCwgLyogQnVzIG51bWJlciAqLwotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3NwaTBfcmVzb3VyY2UpLAotCS5yZXNvdXJjZSA9IGJmaW5fc3BpMF9yZXNvdXJjZSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX3NwaTBfaW5mbywgLyogUGFzc2VkIHRvIGRyaXZlciAqLwotCX0sCi19OwotI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRjUzN19MUTAzNSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkY1MzdfTFEwMzVfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmY1MzctbHEwMzUiLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gMHhGRkMwMDQwMCwKLQkJLmVuZCA9IDB4RkZDMDA0RkYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gMHhGRkMwMjAwMCwKLQkJLmVuZCA9IDB4RkZDMDIwRkYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3VhcnRfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tdWFydCIsCi0JLmlkID0gMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl91YXJ0X3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gYmZpbl91YXJ0X3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fU0lSKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX1NJUl9NT0RVTEUpCi0jaWZkZWYgQ09ORklHX0JGSU5fU0lSMAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3NpcjBfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSAweEZGQzAwNDAwLAotCQkuZW5kID0gMHhGRkMwMDRGRiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydCA9IElSUV9VQVJUMF9SWCwKLQkJLmVuZCA9IElSUV9VQVJUMF9SWCsxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCXsKLQkJLnN0YXJ0ID0gQ0hfVUFSVDBfUlgsCi0JCS5lbmQgPSBDSF9VQVJUMF9SWCsxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zaXIwX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluX3NpciIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9zaXIwX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gYmZpbl9zaXIwX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9TSVIxCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fc2lyMV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IDB4RkZDMDIwMDAsCi0JCS5lbmQgPSAweEZGQzAyMEZGLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0ID0gSVJRX1VBUlQxX1JYLAotCQkuZW5kID0gSVJRX1VBUlQxX1JYKzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JewotCQkuc3RhcnQgPSBDSF9VQVJUMV9SWCwKLQkJLmVuZCA9IENIX1VBUlQxX1JYKzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3NpcjFfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW5fc2lyIiwKLQkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3NpcjFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBiZmluX3NpcjFfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl90d2kwX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBUV0kwX1JFR0JBU0UsCi0JCS5lbmQgICA9IFRXSTBfUkVHQkFTRSArIDB4RkYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfVFdJLAotCQkuZW5kICAgPSBJUlFfVFdJLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2JmaW5fdHdpX2RldmljZSA9IHsKLQkubmFtZSA9ICJpMmMtYmZpbi10d2kiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fdHdpMF9yZXNvdXJjZSksCi0JLnJlc291cmNlID0gYmZpbl90d2kwX3Jlc291cmNlLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tc3BvcnQtdWFydCIsCi0JLmlkID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tc3BvcnQtdWFydCIsCi0JLmlkID0gMSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnN0YW1wX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fQ0ZQQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fQ0ZQQ01DSUFfTU9EVUxFKQotCSZiZmluX3BjbWNpYV9jZl9kZXZpY2UsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKLQkmcnRjX2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1NMODExX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX1NMODExX0hDRF9NT0RVTEUpCi0JJnNsODExX2hjZF9kZXZpY2UsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEX01PRFVMRSkKLQkmaXNwMTM2Ml9oY2RfZGV2aWNlLAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpIHx8IGRlZmluZWQoQ09ORklHX1NNQzkxWF9NT0RVTEUpCi0JJnNtYzkxeF9kZXZpY2UsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0RNOTAwMCkgfHwgZGVmaW5lZChDT05GSUdfRE05MDAwX01PRFVMRSkKLQkmZG05MDAwX2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkKLQkmYmZpbl9taWlfYnVzLAotCSZiZmluX21hY19kZXZpY2UsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3Ml9NT0RVTEUpCi0JJm5ldDIyNzJfYmZpbl9kZXZpY2UsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JU1AxNzYwX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0lTUDE3NjBfSENEX01PRFVMRSkKLQkmYmZpbl9pc3AxNzYwX2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NQSV9CRklOX01PRFVMRSkKLQkmYmZpbl9zcGkwX2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkY1MzdfTFEwMzUpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1X01PRFVMRSkKLQkmYmZpbl9mYl9kZXZpY2UsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLQkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKLQkmYmZpbl91YXJ0X2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkZJTl9TSVIpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fU0lSX01PRFVMRSkKLSNpZmRlZiBDT05GSUdfQkZJTl9TSVIwCi0JJmJmaW5fc2lyMF9kZXZpY2UsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9TSVIxCi0JJmJmaW5fc2lyMV9kZXZpY2UsCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9NT0RVTEUpCi0JJmkyY19iZmluX3R3aV9kZXZpY2UsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVF9NT0RVTEUpCi0JJmJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlLAotCSZiZmluX3Nwb3J0MV91YXJ0X2RldmljZSwKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogcmVnaXN0ZXJpbmcgZGV2aWNlIHJlc291cmNlc1xuIiwgX19mdW5jX18pOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHN0YW1wX2RldmljZXMsIEFSUkFZX1NJWkUoc3RhbXBfZGV2aWNlcykpOwotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywKLQkJCQlBUlJBWV9TSVpFKGJmaW5fc3BpX2JvYXJkX2luZm8pKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoZ2VuZXJpY19pbml0KTsKLQotdm9pZCBuYXRpdmVfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNtZCkKLXsKLQkvKiB3b3JrYXJvdW5kIHJlYm9vdCBoYW5nIHdoZW4gYm9vdGluZyBmcm9tIFNQSSAqLwotCWlmICgoYmZpbl9yZWFkX1NZU0NSKCkgJiAweDcpID09IDB4MykKLQkJYmZpbl9yZXNldF9ib290X3NwaV9jcyhQX0RFRkFVTFRfQk9PVF9TUElfQ1MpOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkKLXZvaWQgYmZpbl9nZXRfZXRoZXJfYWRkcihjaGFyICphZGRyKQotewotCXJhbmRvbV9ldGhlcl9hZGRyKGFkZHIpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiVzOiBTZXR0aW5nIEV0aGVybmV0IE1BQyB0byBhIHJhbmRvbSBvbmVcbiIsIF9fRklMRV9fLCBfX2Z1bmNfXyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGJmaW5fZ2V0X2V0aGVyX2FkZHIpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMKaW5kZXggZGI3ZDNhMy4uM2MxNTk4MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYwpAQCAtMTM0LDkgKzEzNCw5IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDEsCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgbW1jX3NwaV9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gOCwKIH07CiAjZW5kaWYKQEAgLTE1NiwyMyArMTU2LDEzIEBACiAJfSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCiAJewotCQkubW9kYWxpYXMgPSAic3BpX21tY19kdW1teSIsCisJCS5tb2RhbGlhcyA9ICJtbWNfc3BpIiwKIAkJLm1heF9zcGVlZF9oeiA9IDUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCiAJCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMCwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAotCQkubW9kZSA9IFNQSV9NT0RFXzMsCi0JfSwKLQl7Ci0JCS5tb2RhbGlhcyA9ICJzcGlfbW1jIiwKLQkJLm1heF9zcGVlZF9oeiA9IDUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gQ09ORklHX1NQSV9NTUNfQ1NfQ0hBTiwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAorCQkuY2hpcF9zZWxlY3QgPSA1LAorCQkuY29udHJvbGxlcl9kYXRhID0gJm1tY19zcGlfY2hpcF9pbmZvLAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKaW5kZXggNTkwZWIzYS4uNGUxZGUxZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCkBAIC0yODksOSArMjg5LDkgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9tbWNfY2hpcF9pbmZvID0gewotCS5lbmFibGVfZG1hID0gMSwKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfU1BJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBtbWNfc3BpX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAogfTsKICNlbmRpZgpAQCAtMzY0LDIzICszNjQsMTMgQEAKIAkJLmNvbnRyb2xsZXJfZGF0YSA9ICZhZDk5NjBfc3BpX2NoaXBfaW5mbywKIAl9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCiAJewotCQkubW9kYWxpYXMgPSAic3BpX21tY19kdW1teSIsCisJCS5tb2RhbGlhcyA9ICJtbWNfc3BpIiwKIAkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwogCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDcsCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKLQkJLm1vZGUgPSBTUElfTU9ERV8zLAotCX0sCi0JewotCQkubW9kYWxpYXMgPSAic3BpX21tYyIsCi0JCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSBDT05GSUdfU1BJX01NQ19DU19DSEFOLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCisJCS5jaGlwX3NlbGVjdCA9IDUsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbW1jX3NwaV9jaGlwX2luZm8sCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYwppbmRleCAzZjRmMjAzLi41M2FkMTBmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKQEAgLTEwOCw5ICsxMDgsOSBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX21tY19jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAxLAorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIG1tY19zcGlfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDgsCiB9OwogI2VuZGlmCkBAIC0xNjAsMjMgKzE2MCwxMyBAQAogCX0sCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQogCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWNfZHVtbXkiLAorCQkubW9kYWxpYXMgPSAibW1jX3NwaSIsCiAJCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KIAkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSA3LAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCi0JCS5tb2RlID0gU1BJX01PREVfMywKLQl9LAotCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWMiLAotCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gQ09ORklHX1NQSV9NTUNfQ1NfQ0hBTiwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAorCQkuY2hpcF9zZWxlY3QgPSA1LAorCQkuY29udHJvbGxlcl9kYXRhID0gJm1tY19zcGlfY2hpcF9pbmZvLAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAppbmRleCA5Y2IzOTEyLi4xYmZkODBjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtMiw3ICsyLDcgQEAKICAqIEZpbGU6IGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYW5vbWFseS5oCiAgKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApAQCAtMTEwLDcgKzExMCw3IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDEgKDEpCiAvKiBTU1lOQ3MgQWZ0ZXIgV3JpdGVzIFRvIENBTi9ETUEgTU1SIFJlZ2lzdGVycyBBcmUgTm90IEFsd2F5cyBIYW5kbGVkIENvcnJlY3RseSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDMpCi0vKiBOZXcgRmVhdHVyZTogQWRkaXRpb25hbCBIeXN0ZXJlc2lzIG9uIFNQT1JUIElucHV0IFBpbnMgKE5vdCBBdmFpbGFibGUgT24gT2xkZXIgU2lsaWNvbikgKi8KKy8qIFNQT1JUX0hZUyBCaXQgaW4gUExMX0NUTCBSZWdpc3RlciBJcyBOb3QgRnVuY3Rpb25hbCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDMpCiAvKiBTQ0tFTE9XIEJpdCBEb2VzIE5vdCBNYWludGFpbiBTdGF0ZSBUaHJvdWdoIEhpYmVybmF0ZSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDMpCkBAIC0xNjgsOSArMTY4LDEyIEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTMgKDEpCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjMgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODAgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzODYgKDEpCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTIgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzIgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzUgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDcgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDggKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggYjNmODdlMS4uOWUzNDcwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlDSF9VQVJUMF9UWCwKIAlDSF9VQVJUMF9SWCwKICNlbmRpZgotI2lmZGVmIENPTkZJR19CRklOX1VBUlQwX0NUU1JUUworI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKIAlDT05GSUdfVUFSVDBfQ1RTX1BJTiwKIAlDT05GSUdfVUFSVDBfUlRTX1BJTiwKICNlbmRpZgpAQCAtMTU4LDcgKzE1OCw3IEBACiAJQ0hfVUFSVDFfVFgsCiAJQ0hfVUFSVDFfUlgsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAJQ09ORklHX1VBUlQxX0NUU19QSU4sCiAJQ09ORklHX1VBUlQxX1JUU19QSU4sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggZTEzMGI0Zi4uM2E1Njk5OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTIsNyArMiw3IEBACiAgKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2Fub21hbHkuaAogICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKQEAgLTEyMCwxMyArMTIwLDE3IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxOTggKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyMzAgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjMgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDUgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTEgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTMgKDEpCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjMgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODAgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzODYgKDEpCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTIgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzIgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzUgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDcgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDggKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggNDA1MDNiNi4uM2MyODExZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlDSF9VQVJUMF9UWCwKIAlDSF9VQVJUMF9SWCwKICNlbmRpZgotI2lmZGVmIENPTkZJR19CRklOX1VBUlQwX0NUU1JUUworI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKIAlDT05GSUdfVUFSVDBfQ1RTX1BJTiwKIAlDT05GSUdfVUFSVDBfUlRTX1BJTiwKICNlbmRpZgpAQCAtMTU4LDcgKzE1OCw3IEBACiAJQ0hfVUFSVDFfVFgsCiAJQ0hfVUFSVDFfUlgsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAJQ09ORklHX1VBUlQxX0NUU19QSU4sCiAJQ09ORklHX1VBUlQxX1JUU19QSU4sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggMjNkMDNjNS4uODgyZTQwYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTIsMTIgKzIsMTIgQEAKICAqIEZpbGU6IGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYW5vbWFseS5oCiAgKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZSBiZSB1cCB0byBkYXRlIHdpdGg6Ci0gKiAgLSBSZXZpc2lvbiBHLCAwOC8wNy8yMDA4OyBBRFNQLUJGNTQyL0JGNTQ0L0JGNTQ3L0JGNTQ4L0JGNTQ5IEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKKyAqICAtIFJldmlzaW9uIEgsIDAxLzE2LzIwMDk7IEFEU1AtQkY1NDIvQkY1NDQvQkY1NDcvQkY1NDgvQkY1NDkgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAogICovCiAKICNpZm5kZWYgX01BQ0hfQU5PTUFMWV9IXwpAQCAtOTEsOCArOTEsNiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzcxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBVU0IgRFAvRE0gRGF0YSBQaW5zIE1heSBMb3NlIFN0YXRlIFdoZW4gRW50ZXJpbmcgSGliZXJuYXRlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKLS8qIE1vYmlsZSBERFIgT3BlcmF0aW9uIE5vdCBGdW5jdGlvbmFsICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNzcgKDEpCiAvKiBTZWN1cml0eS9BdXRoZW50aWNhdGlvbiBTcGVlZHBhdGggQ2F1c2VzIEF1dGhlbnRpY2F0aW9uIFRvIEZhaWwgVG8gSW5pdGlhdGUgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3OCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogMTYtQml0IE5BTkQgRkxBU0ggQm9vdCBNb2RlIElzIE5vdCBGdW5jdGlvbmFsICovCkBAIC0xNTcsOCArMTU1LDIyIEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFNvZnR3YXJlIFN5c3RlbSBSZXNldCBDb3JydXB0cyBQTExfTE9DS0NOVCBSZWdpc3RlciAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMwIChfX1NJTElDT05fUkVWSVNJT05fXyA+PSAyKQorLyogSW5jb3JyZWN0IFVzZSBvZiBTdGFjayBpbiBMb2NrYm94IEZpcm13YXJlIER1cmluZyBBdXRoZW50aWNhdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDMpCisvKiBPVFAgV3JpdGUgQWNjZXNzZXMgTm90IFN1cHBvcnRlZCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQyIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBJRkxVU0ggSW5zdHJ1Y3Rpb24gYXQgRW5kIG9mIEhhcmR3YXJlIExvb3AgQ2F1c2VzIEluZmluaXRlIFN0YWxsICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDMgKDEpCisvKiBDRE1BUFJJTyBhbmQgTDJETUFQUklPIEJpdHMgaW4gdGhlIFNZU0NSIFJlZ2lzdGVyIEFyZSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQ2ICgxKQorLyogVUFSVCBJckRBIFJlY2VpdmVyIEZhaWxzIG9uIEV4dGVuZGVkIEJpdCBQdWxzZXMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0NyAoMSkKKy8qIEREUiBDbG9jayBEdXR5IEN5Y2xlIFNwZWMgVmlvbGF0aW9uICh0Q0gsIHRDTCkgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0OCAoX19TSUxJQ09OX1JFVklTSU9OX18gPT0gMSkKKy8qIFJlZHVjZWQgVGltaW5nIE1hcmdpbnMgb24gRERSIE91dHB1dCBTZXR1cCBhbmQgSG9sZCAodERTIGFuZCB0REgpICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fID09IDEpCisvKiBVU0IgRE1BIE1vZGUgMSBTaG9ydCBQYWNrZXQgRGF0YSBDb3JydXB0aW9uICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NTAgKDEKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxMjUgKDApCkBAIC0xNzEsNiArMTgzLDggQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3OCAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyMyAoMCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGU0Y2YzNWUuLmMwNWU3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtNjMsNyArNjMsNyBAQAogI2RlZmluZSBVQVJUX0VOQUJMRV9JTlRTKHgsIHYpIFVBUlRfU0VUX0lFUih4LCB2KQogI2RlZmluZSBVQVJUX0RJU0FCTEVfSU5UUyh4KSBVQVJUX0NMRUFSX0lFUih4LCAweEYpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQwX0NUU1JUUykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMpCisjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDJfQ1RTUlRTKQogIyBkZWZpbmUgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwogCiAjIGlmbmRlZiBDT05GSUdfVUFSVDBfQ1RTX1BJTgpAQCAtNzQsMTIgKzc0LDEyIEBACiAjICBkZWZpbmUgQ09ORklHX1VBUlQwX1JUU19QSU4gLTEKICMgZW5kaWYKIAotIyBpZm5kZWYgQ09ORklHX1VBUlQxX0NUU19QSU4KLSMgIGRlZmluZSBDT05GSUdfVUFSVDFfQ1RTX1BJTiAtMQorIyBpZm5kZWYgQ09ORklHX1VBUlQyX0NUU19QSU4KKyMgIGRlZmluZSBDT05GSUdfVUFSVDJfQ1RTX1BJTiAtMQogIyBlbmRpZgogCi0jIGlmbmRlZiBDT05GSUdfVUFSVDFfUlRTX1BJTgotIyAgZGVmaW5lIENPTkZJR19VQVJUMV9SVFNfUElOIC0xCisjIGlmbmRlZiBDT05GSUdfVUFSVDJfUlRTX1BJTgorIyAgZGVmaW5lIENPTkZJR19VQVJUMl9SVFNfUElOIC0xCiAjIGVuZGlmCiAjZW5kaWYKIApAQCAtMTMwLDcgKzEzMCw3IEBACiAJQ0hfVUFSVDBfVFgsCiAJQ0hfVUFSVDBfUlgsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAJQ09ORklHX1VBUlQwX0NUU19QSU4sCiAJQ09ORklHX1VBUlQwX1JUU19QSU4sCiAjZW5kaWYKQEAgLTE0NCw2ICsxNDQsMTAgQEAKIAlDSF9VQVJUMV9UWCwKIAlDSF9VQVJUMV9SWCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKKwkwLAorCTAsCisjZW5kaWYKIAl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1VBUlQyCkBAIC0xNTQsNyArMTU4LDcgQEAKIAlDSF9VQVJUMl9UWCwKIAlDSF9VQVJUMl9SWCwKICNlbmRpZgotI2lmZGVmIENPTkZJR19CRklOX1VBUlQyX0NUU1JUUworI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKIAlDT05GSUdfVUFSVDJfQ1RTX1BJTiwKIAlDT05GSUdfVUFSVDJfUlRTX1BJTiwKICNlbmRpZgpAQCAtMTY4LDYgKzE3MiwxMCBAQAogCUNIX1VBUlQzX1RYLAogCUNIX1VBUlQzX1JYLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUworCTAsCisJMCwKKyNlbmRpZgogCX0sCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCA2MDI5OWE3Li5mMTk0NjI1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEyMyw4ICsxMjMsOCBAQAogI2RlZmluZSBJUlFfTVhWUl9FUlJPUgkJQkZJTl9JUlEoNTEpCS8qIE1YVlIgU3RhdHVzIChFcnJvcikgSW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9NWFZSX01TRwkJQkZJTl9JUlEoNTIpCS8qIE1YVlIgTWVzc2FnZSBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX01YVlJfUEtUCQlCRklOX0lSUSg1MykJLyogTVhWUiBQYWNrZXQgSW50ZXJydXB0ICovCi0jZGVmaW5lIElSUV9FUFAxX0VSUk9SCQlCRklOX0lSUSg1NCkJLyogRVBQSTEgRXJyb3IgSW50ZXJydXB0ICovCi0jZGVmaW5lIElSUV9FUFAyX0VSUk9SCQlCRklOX0lSUSg1NSkJLyogRVBQSTIgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9FUFBJMV9FUlJPUgkJQkZJTl9JUlEoNTQpCS8qIEVQUEkxIEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBJUlFfRVBQSTJfRVJST1IJCUJGSU5fSVJRKDU1KQkvKiBFUFBJMiBFcnJvciBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX1VBUlQzX0VSUk9SCQlCRklOX0lSUSg1NikJLyogVUFSVDMgU3RhdHVzIChFcnJvcikgSW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9IT1NUX0VSUk9SCQlCRklOX0lSUSg1NykJLyogSE9TVCBTdGF0dXMgKEVycm9yKSBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX1BJWENfRVJST1IJCUJGSU5fSVJRKDU5KQkvKiBQSVhDIFN0YXR1cyAoRXJyb3IpIEludGVycnVwdCAqLwpAQCAtMzYxLDggKzM2MSw4IEBACiAjZGVmaW5lIElSUV9VQVJUMl9FUlIgCQlJUlFfVUFSVDJfRVJST1IKICNkZWZpbmUgSVJRX0NBTjBfRVJSICAJCUlSUV9DQU4wX0VSUk9SCiAjZGVmaW5lIElSUV9NWFZSX0VSUiAgCQlJUlFfTVhWUl9FUlJPUgotI2RlZmluZSBJUlFfRVBQMV9FUlIgIAkJSVJRX0VQUDFfRVJST1IKLSNkZWZpbmUgSVJRX0VQUDJfRVJSICAJCUlSUV9FUFAyX0VSUk9SCisjZGVmaW5lIElSUV9FUFBJMV9FUlIgIAkJSVJRX0VQUEkxX0VSUk9SCisjZGVmaW5lIElSUV9FUFBJMl9FUlIgIAkJSVJRX0VQUEkyX0VSUk9SCiAjZGVmaW5lIElSUV9VQVJUM19FUlIgCQlJUlFfVUFSVDNfRVJST1IKICNkZWZpbmUgSVJRX0hPU1RfRVJSICAJCUlSUV9IT1NUX0VSUk9SCiAjZGVmaW5lIElSUV9QSVhDX0VSUiAgCQlJUlFfUElYQ19FUlJPUgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9LY29uZmlnCmluZGV4IGU0MWE2N2IuLmU0YmM2ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL0tjb25maWcKQEAgLTE5LDkgKzE5LDQgQEAKIAloZWxwCiAJICBDTS1CRjU2MSBzdXBwb3J0IGZvciBFVkFMLSBhbmQgREVWLUJvYXJkLgogCi1jb25maWcgR0VORVJJQ19CRjU2MV9CT0FSRAotCWJvb2wgIkdlbmVyaWMiCi0JaGVscAotCSAgR2VuZXJpYyBvciBDdXN0b20gYm9hcmQgc3VwcG9ydC4KLQogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9NYWtlZmlsZQppbmRleCAwNGFkZDAxLi4zYTE1MjU1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvTWFrZWZpbGUKQEAgLTIsNyArMiw2IEBACiAjIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvTWFrZWZpbGUKICMKIAotb2JqLSQoQ09ORklHX0dFTkVSSUNfQkY1NjFfQk9BUkQpICAgICAgKz0gZ2VuZXJpY19ib2FyZC5vCiBvYmotJChDT05GSUdfQkZJTjU2MV9CTFVFVEVDSE5JWF9DTSkgICArPSBjbV9iZjU2MS5vCiBvYmotJChDT05GSUdfQkZJTjU2MV9FWktJVCkgICAgICAgICAgICArPSBlemtpdC5vCiBvYmotJChDT05GSUdfQkZJTjU2MV9URVBMQSkgICAgICAgICAgICArPSB0ZXBsYS5vCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKaW5kZXggNjg4MGQxZS4uZjYyM2M2YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwpAQCAtMTA1LDkgKzEwNSw5IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDEsCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgbW1jX3NwaV9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gOCwKIH07CiAjZW5kaWYKQEAgLTE1NSwxNCArMTU1LDEzIEBACiAJCS5jb250cm9sbGVyX2RhdGEgPSAmYWQ5OTYwX3NwaV9jaGlwX2luZm8sCiAJfSwKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX01NQ19TUEkpIHx8IGRlZmluZWQoQ09ORklHX01NQ19TUElfTU9EVUxFKQogCXsKLQkJLm1vZGFsaWFzID0gInNwaV9tbWMiLAorCQkubW9kYWxpYXMgPSAibW1jX3NwaSIsCiAJCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KIAkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSBDT05GSUdfU1BJX01NQ19DU19DSEFOLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCisJCS5jaGlwX3NlbGVjdCA9IDUsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbW1jX3NwaV9jaGlwX2luZm8sCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2dlbmVyaWNfYm9hcmQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmEzNjZhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9nZW5lcmljX2JvYXJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KLSAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLWNvbnN0IGNoYXIgYmZpbl9ib2FyZF9uYW1lW10gPSAiVU5LTk9XTiBCT0FSRCI7Ci0KLS8qCi0gKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gMHgyQzAxMDMwMCwKLQkJLmVuZCA9IDB4MkMwMTAzMDAgKyAxNiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBJUlFfUFJPR19JTlRCLAotCQkuZW5kID0gSVJRX1BST0dfSU5UQiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCi0JfSwgewotCQkuc3RhcnQgPSBJUlFfUEY5LAotCQkuZW5kID0gSVJRX1BGOSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic21jOTF4IiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBzbWM5MXhfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkZJTl9TSVIpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fU0lSX01PRFVMRSkKLSNpZmRlZiBDT05GSUdfQkZJTl9TSVIwCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fc2lyMF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IDB4RkZDMDA0MDAsCi0JCS5lbmQgPSAweEZGQzAwNEZGLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0ID0gSVJRX1VBUlQwX1JYLAotCQkuZW5kID0gSVJRX1VBUlQwX1JYKzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JewotCQkuc3RhcnQgPSBDSF9VQVJUMF9SWCwKLQkJLmVuZCA9IENIX1VBUlQwX1JYKzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3NpcjBfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW5fc2lyIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3NpcjBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBiZmluX3NpcjBfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZW5lcmljX2JvYXJkX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKLQkmc21jOTF4X2RldmljZSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkZJTl9TSVIpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fU0lSX01PRFVMRSkKLSNpZmRlZiBDT05GSUdfQkZJTl9TSVIwCi0JJmJmaW5fc2lyMF9kZXZpY2UsCi0jZW5kaWYKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19ib2FyZF9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogcmVnaXN0ZXJpbmcgZGV2aWNlIHJlc291cmNlc1xuIiwgX19mdW5jX18pOwotCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhnZW5lcmljX2JvYXJkX2RldmljZXMsCi0JCQkJICAgIEFSUkFZX1NJWkUoZ2VuZXJpY19ib2FyZF9kZXZpY2VzKSk7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoZ2VuZXJpY19ib2FyZF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggMWE5ZTE3NS4uZDBiMGIzNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTIsNyArMiw3IEBACiAgKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2Fub21hbHkuaAogICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKQEAgLTIyNCw3ICsyMjQsNyBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzAxICgxKQogLyogU1NZTkNzIEFmdGVyIFdyaXRlcyBUbyBETUEgTU1SIFJlZ2lzdGVycyBNYXkgTm90IEJlIEhhbmRsZWQgQ29ycmVjdGx5ICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDIgKDEpCi0vKiBOZXcgRmVhdHVyZTogQWRkaXRpb25hbCBIeXN0ZXJlc2lzIG9uIFNQT1JUIElucHV0IFBpbnMgKE5vdCBBdmFpbGFibGUgT24gT2xkZXIgU2lsaWNvbikgKi8KKy8qIFNQT1JUX0hZUyBCaXQgaW4gUExMX0NUTCBSZWdpc3RlciBJcyBOb3QgRnVuY3Rpb25hbCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCiAvKiBTQ0tFTE9XIEJpdCBEb2VzIE5vdCBNYWludGFpbiBTdGF0ZSBUaHJvdWdoIEhpYmVybmF0ZSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCkBAIC0yODMsOCArMjgzLDExIEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTEgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTMgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODAgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzODYgKDEpCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzIgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzUgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDcgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NDggKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggMDQzYmZjZi4uY2E4YzVmNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlDSF9VQVJUX1RYLAogCUNIX1VBUlRfUlgsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAJQ09ORklHX1VBUlQwX0NUU19QSU4sCiAJQ09ORklHX1VBUlQwX1JUU19QSU4sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYwppbmRleCA5ODEzM2I5Li44MGQzOWIyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCkBAIC02MiwzICs2MiwxMiBAQAogI2lmIChDT05GSUdfQk9PVF9MT0FEICYgMHgzKQogIyBlcnJvciAiVGhlIGtlcm5lbCBsb2FkIGFkZHJlc3MgbXVzdCBiZSA0IGJ5dGUgYWxpZ25lZCIKICNlbmRpZgorCisvKiBUaGUgZW50aXJlIGtlcm5lbCBtdXN0IGJlIGFibGUgdG8gbWFrZSBhIDI0Yml0IHBjcmVsIGNhbGwgdG8gc3RhcnQgb2YgTDEgKi8KKyNpZiAoKDB4ZmZmZmZmZmYgLSBMMV9DT0RFX1NUQVJUICsgMSkgKyBDT05GSUdfQk9PVF9MT0FEKSA+IDB4MTAwMDAwMAorIyBlcnJvciAiVGhlIGtlcm5lbCBsb2FkIGFkZHJlc3MgaXMgdG9vIGhpZ2g7IGtlZXAgaXQgYmVsb3cgMTBtZWcgZm9yIHNhZmV0eSIKKyNlbmRpZgorCisjaWYgQU5PTUFMWV8wNTAwMDQ0OAorIyBlcnJvciBZb3UgYXJlIHVzaW5nIGEgcGFydCB3aXRoIGFub21hbHkgMDUwMDA0NDgsIHRoaXMgaXNzdWUgY2F1c2VzIHJhbmRvbSBtZW1vcnkgcmVhZC93cml0ZSBmYWlsdXJlcyAtIHRoYXQgbWVhbnMgcmFuZG9tIGNyYXNoZXMuCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwppbmRleCAzYzk4ZGFjLi5hYTA2NDhjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCkBAIC02NiwxMSArNjYsMzMgQEAKIAogLyogSW52YWxpZGF0ZSBhbGwgaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZXMgYXNzb2NvaWF0ZWQgd2l0aCB0aGlzIG1lbW9yeSBhcmVhICovCiBFTlRSWShfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKQorLyoKKyAqIFdhbGthcm91bmQgdG8gYXZvaWQgbG9hZGluZyB3cm9uZyBpbnN0cnVjdGlvbiBhZnRlciBpbnZhbGlkYXRpbmcgaWNhY2hlCisgKiBhbmQgZm9sbG93aW5nIHNlcXVlbmNlIGlzIG1ldC4KKyAqCisgKiAxKSBPbmUgaW5zdHJ1Y3Rpb24gYWRkcmVzcyBpcyBjYWNoZWQgaW4gdGhlIGluc3RydWN0aW9uIGNhY2hlLgorICogMikgVGhpcyBpbnN0cnVjdGlvbiBpbiBTRFJBTSBpcyBjaGFuZ2VkLgorICogMykgSUZMQVNIW1AwXSBpcyBleGVjdXRlZCBvbmx5IG9uY2UgaW4gYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKCkuCisgKiA0KSBUaGlzIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkIGFnYWluLCBidXQgdGhlIG9sZCBvbmUgaXMgbG9hZGVkLgorICovCisJUDAgPSBSMDsKKwlJRkxVU0hbUDBdOwogCWRvX2ZsdXNoIElGTFVTSCwgLCBub3AKIEVORFBST0MoX2JsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSkKIAogLyogRmx1c2ggYWxsIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcyBhcmVhIG9mIG1lbW9yeS4gKi8KIEVOVFJZKF9ibGFja2Zpbl9pY2FjaGVfZGNhY2hlX2ZsdXNoX3JhbmdlKQorLyoKKyAqIFdhbGthcm91bmQgdG8gYXZvaWQgbG9hZGluZyB3cm9uZyBpbnN0cnVjdGlvbiBhZnRlciBpbnZhbGlkYXRpbmcgaWNhY2hlCisgKiBhbmQgZm9sbG93aW5nIHNlcXVlbmNlIGlzIG1ldC4KKyAqCisgKiAxKSBPbmUgaW5zdHJ1Y3Rpb24gYWRkcmVzcyBpcyBjYWNoZWQgaW4gdGhlIGluc3RydWN0aW9uIGNhY2hlLgorICogMikgVGhpcyBpbnN0cnVjdGlvbiBpbiBTRFJBTSBpcyBjaGFuZ2VkLgorICogMykgSUZMQVNIW1AwXSBpcyBleGVjdXRlZCBvbmx5IG9uY2UgaW4gYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKCkuCisgKiA0KSBUaGlzIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkIGFnYWluLCBidXQgdGhlIG9sZCBvbmUgaXMgbG9hZGVkLgorICovCisJUDAgPSBSMDsKKwlJRkxVU0hbUDBdOwogCWRvX2ZsdXNoIEZMVVNILCBJRkxVU0gKIEVORFBST0MoX2JsYWNrZmluX2ljYWNoZV9kY2FjaGVfZmx1c2hfcmFuZ2UpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2xvY2tzLWluaXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2xvY2tzLWluaXQuYwppbmRleCA5ZGRkYjZmLi4zNTM5MzY1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2Nsb2Nrcy1pbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jbG9ja3MtaW5pdC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjZGVmaW5lIFNER0NUTF9XSURUSCAoMSA8PCAzMSkJLyogU0RSQU0gZXh0ZXJuYWwgZGF0YSBwYXRoIHdpZHRoICovCiAjZGVmaW5lIFBMTF9DVExfVkFMIFwKIAkoKChDT05GSUdfVkNPX01VTFQgJiA2MykgPDwgOSkgfCBDTEtJTl9IQUxGIHwgXAotCSAoUExMX0JZUEFTUyA8PCA4KSB8IChBTk9NQUxZXzA1MDAwMjY1ID8gMHg4MDAwIDogMCkpCisJIChQTExfQllQQVNTIDw8IDgpIHwgKEFOT01BTFlfMDUwMDAzMDUgPyAwIDogMHg4MDAwKSkKIAogX19hdHRyaWJ1dGVfXygobDFfdGV4dCkpCiBzdGF0aWMgdm9pZCBkb19zeW5jKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWNfbW9kZXMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZHBtY19tb2Rlcy5TCmluZGV4IDRkYTUwYmMuLjgwMDlhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZHBtY19tb2Rlcy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZHBtY19tb2Rlcy5TCkBAIC0zNzYsMTAgKzM3NiwyMiBAQAogI2VuZGlmCiAKICNpZmRlZiBQSU5UMF9BU1NJR04KKwlQTV9TWVNfUFVTSChQSU5UMF9NQVNLX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UMV9NQVNLX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UMl9NQVNLX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UM19NQVNLX1NFVCkKIAlQTV9TWVNfUFVTSChQSU5UMF9BU1NJR04pCiAJUE1fU1lTX1BVU0goUElOVDFfQVNTSUdOKQogCVBNX1NZU19QVVNIKFBJTlQyX0FTU0lHTikKIAlQTV9TWVNfUFVTSChQSU5UM19BU1NJR04pCisJUE1fU1lTX1BVU0goUElOVDBfSU5WRVJUX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UMV9JTlZFUlRfU0VUKQorCVBNX1NZU19QVVNIKFBJTlQyX0lOVkVSVF9TRVQpCisJUE1fU1lTX1BVU0goUElOVDNfSU5WRVJUX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UMF9FREdFX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UMV9FREdFX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UMl9FREdFX1NFVCkKKwlQTV9TWVNfUFVTSChQSU5UM19FREdFX1NFVCkKICNlbmRpZgogCiAJUE1fU1lTX1BVU0goRUJJVV9BTUJDVEwwKQpAQCAtNzE0LDEwICs3MjYsMjIgQEAKIAlQTV9TWVNfUE9QKEVCSVVfQU1CQ1RMMCkKIAogI2lmZGVmIFBJTlQwX0FTU0lHTgorCVBNX1NZU19QT1AoUElOVDNfRURHRV9TRVQpCisJUE1fU1lTX1BPUChQSU5UMl9FREdFX1NFVCkKKwlQTV9TWVNfUE9QKFBJTlQxX0VER0VfU0VUKQorCVBNX1NZU19QT1AoUElOVDBfRURHRV9TRVQpCisJUE1fU1lTX1BPUChQSU5UM19JTlZFUlRfU0VUKQorCVBNX1NZU19QT1AoUElOVDJfSU5WRVJUX1NFVCkKKwlQTV9TWVNfUE9QKFBJTlQxX0lOVkVSVF9TRVQpCisJUE1fU1lTX1BPUChQSU5UMF9JTlZFUlRfU0VUKQogCVBNX1NZU19QT1AoUElOVDNfQVNTSUdOKQogCVBNX1NZU19QT1AoUElOVDJfQVNTSUdOKQogCVBNX1NZU19QT1AoUElOVDFfQVNTSUdOKQogCVBNX1NZU19QT1AoUElOVDBfQVNTSUdOKQorCVBNX1NZU19QT1AoUElOVDNfTUFTS19TRVQpCisJUE1fU1lTX1BPUChQSU5UMl9NQVNLX1NFVCkKKwlQTV9TWVNfUE9QKFBJTlQxX01BU0tfU0VUKQorCVBNX1NZU19QT1AoUElOVDBfTUFTS19TRVQpCiAjZW5kaWYKIAogI2lmZGVmIFNJQ0FfSVdSMQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCmluZGV4IDg4ZGUwNTMuLjIxZTY1YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKQEAgLTYwMCw2ICs2MDAsMTkgQEAKIAlwMiA9IFtwMl07CiAKIAlbcDIrKFRBU0tfVEhSRUFEK1RIUkVBRF9LU1ApXSA9IHNwOworI2lmZGVmIENPTkZJR19JUElQRQorCXIwID0gc3A7CisJU1AgKz0gLTEyOworCWNhbGwgX19faXBpcGVfc3lzY2FsbF9yb290OworCVNQICs9IDEyOworCWNjID0gcjAgPT0gMTsKKwlpZiBjYyBqdW1wIC5Mc3lzY2FsbF9yZWFsbHlfZXhpdDsKKwljYyA9IHIwID09IC0xOworCWlmIGNjIGp1bXAgLkxyZXN1bWVfdXNlcnNwYWNlOworCXIzID0gW3NwICsgUFRfUjNdOworCXI0ID0gW3NwICsgUFRfUjRdOworCXAwID0gW3NwICsgUFRfT1JJR19QMF07CisjZW5kaWYgLyogQ09ORklHX0lQSVBFICovCiAKIAkvKiBDaGVjayB0aGUgU3lzdGVtIENhbGwgKi8KIAlyNyA9IF9fTlJfc3lzY2FsbDsKQEAgLTY1NCw2ICs2NjcsMTcgQEAKIAlyNyA9ICByNyAmIHI0OwogCiAuTHN5c2NhbGxfcmVzY2hlZDoKKyNpZmRlZiBDT05GSUdfSVBJUEUKKwljYyA9IEJJVFRTVChyNywgVElGX0lSUV9TWU5DKTsKKwlpZiAhY2MganVtcCAuTHN5c2NhbGxfbm9faXJxc3luYzsKKwlbLS1zcF0gPSByZXRpOworCXIwID0gW3NwKytdOworCVNQICs9IC0xMjsKKwljYWxsIF9fX2lwaXBlX3N5bmNfcm9vdDsKKwlTUCArPSAxMjsKKwlqdW1wIC5McmVzdW1lX3VzZXJzcGFjZV8xOworLkxzeXNjYWxsX25vX2lycXN5bmM6CisjZW5kaWYKIAljYyA9IEJJVFRTVChyNywgVElGX05FRURfUkVTQ0hFRCk7CiAJaWYgIWNjIGp1bXAgLkxzeXNjYWxsX3NpZ3BlbmRpbmc7CiAKQEAgLTY4NSw2ICs3MDksMTAgQEAKIC5Mc3lzY2FsbF9yZWFsbHlfZXhpdDoKIAlyNSA9IFtzcCArIFBUX1JFU0VSVkVEXTsKIAlyZXRzID0gcjU7CisjaWZkZWYgQ09ORklHX0lQSVBFCisJWy0tc3BdID0gcmV0aTsKKwlyNSA9IFtzcCsrXTsKKyNlbmRpZiAvKiBDT05GSUdfSVBJUEUgKi8KIAlydHM7CiBFTkRQUk9DKF9zeXN0ZW1fY2FsbCkKIApAQCAtNzcxLDYgKzc5OSwxNSBAQAogRU5EUFJPQyhfcmVzdW1lKQogCiBFTlRSWShfcmV0X2Zyb21fZXhjZXB0aW9uKQorI2lmZGVmIENPTkZJR19JUElQRQorCVstLXNwXSA9IHJldHM7CisJU1AgKz0gLTEyOworCWNhbGwgX19faXBpcGVfY2hlY2tfcm9vdAorCVNQICs9IDEyCisJcmV0cyA9IFtzcCsrXTsKKwljYyA9IHIwID09IDA7CisJaWYgY2MganVtcCA0ZjsgICAgICAgICAgICAgICAgLyogbm90IG9uIGJlaGFsZiBvZiBMaW51eCwgZ2V0IG91dCAqLworI2VuZGlmIC8qIENPTkZJR19JUElQRSAqLwogCXAyLmwgPSBsbyhJUEVORCk7CiAJcDIuaCA9IGhpKElQRU5EKTsKIApAQCAtODI3LDYgKzg2NCwyOCBAQAogCXJ0czsKIEVORFBST0MoX3JldF9mcm9tX2V4Y2VwdGlvbikKIAorI2lmZGVmIENPTkZJR19JUElQRQorCitfc3luY19yb290X2lycXM6CisJWy0tc3BdID0gcmV0aTsJCS8qIFJlZW5hYmxlIGludGVycnVwdHMgKi8KKwlyMCA9IFtzcCsrXTsKKwlqdW1wLmwgX19faXBpcGVfc3luY19yb290CisKK19yZXN1bWVfa2VybmVsX2Zyb21faW50OgorCXIwLmwgPSBfc3luY19yb290X2lycXMKKwlyMC5oID0gX3N5bmNfcm9vdF9pcnFzCisJWy0tc3BdID0gcmV0czsKKwlbLS1zcF0gPSAoIHI3OjQsIHA1OjMgKTsKKwlTUCArPSAtMTI7CisJY2FsbCBfX19pcGlwZV9jYWxsX2lycXRhaWwKKwlTUCArPSAxMjsKKwkoIHI3OjQsIHA1OjMgKSA9IFtzcCsrXTsKKwlyZXRzID0gW3NwKytdOworCXJ0cworI2Vsc2UKKyNkZWZpbmUgX3Jlc3VtZV9rZXJuZWxfZnJvbV9pbnQJIDJmCisjZW5kaWYKKwogRU5UUlkoX3JldHVybl9mcm9tX2ludCkKIAkvKiBJZiBzb21lb25lIGVsc2UgYWxyZWFkeSByYWlzZWQgSVJRIDE1LCBkbyBub3RoaW5nLiAgKi8KIAljc3luYzsKQEAgLTg0OCw3ICs5MDcsNyBAQAogCXIxID0gcjAgLSByMTsKIAlyMiA9IHIwICYgcjE7CiAJY2MgPSByMiA9PSAwOwotCWlmICFjYyBqdW1wIDJmOworCWlmICFjYyBqdW1wIF9yZXN1bWVfa2VybmVsX2Zyb21faW50OwogCiAJLyogTG93ZXIgdGhlIGludGVycnVwdCBsZXZlbCB0byAxNS4gICovCiAJcDAubCA9IGxvKEVWVDE1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCmluZGV4IDQzYzRlYjkuLjAwNjljMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwpAQCAtMjM1LDYgKzIzNSw3IEBACiAKICNpZmRlZiBDT05GSUdfSVBJUEUKIEVOVFJZKF9fX2lwaXBlX2NhbGxfaXJxdGFpbCkKKwlwMCA9IHIwOwogCXIwLmwgPSAxZjsKIAlyMC5oID0gMWY7CiAJcmV0aSA9IHIwOwpAQCAtMjQyLDkgKzI0Myw2IEBACiAxOgogCVstLXNwXSA9IHJldHM7CiAJWy0tc3BdID0gKCByNzo0LCBwNTozICk7Ci0JcDAubCA9IF9fX2lwaXBlX2lycV90YWlsX2hvb2s7Ci0JcDAuaCA9IF9fX2lwaXBlX2lycV90YWlsX2hvb2s7Ci0JcDAgPSBbcDBdOwogCXNwICs9IC0xMjsKIAljYWxsIChwMCk7CiAJc3AgKz0gMTI7CkBAIC0yNTksNyArMjU3LDcgQEAKIAlwMC5oID0gaGkoRVZUMTQpOwogCVtwMF0gPSByMDsKIAljc3luYzsKLQlyMCA9IDB4NDAxZjsKKwlyMCA9IDB4NDAxZiAoeik7CiAJc3RpIHIwOwogCXJhaXNlIDE0OwogCVstLXNwXSA9IHJldGk7ICAgICAgICAgIC8qIElSUXMgb24uICovCkBAIC0yNzcsMTEgKzI3NSw3IEBACiAJcDAuaCA9IF9iZmluX2lycV9mbGFnczsKIAlyMCA9IFtwMF07CiAJc3RpIHIwOwotI2lmIDAgLyogRklYTUU6IHRoaXMgYWN0dWFsbHkgcmFpc2VzIHNjaGVkdWxpbmcgbGF0ZW5jaWVzICovCi0JLyogUmVlbmFibGUgaW50ZXJydXB0cyAqLwotCVstLXNwXSA9IHJldGk7Ci0JcjAgPSBbc3ArK107Ci0jZW5kaWYKIAlydHM7CiBFTkRQUk9DKF9fX2lwaXBlX2NhbGxfaXJxdGFpbCkKKwogI2VuZGlmIC8qIENPTkZJR19JUElQRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwppbmRleCAyMDI0OTQ1Li5hN2Q3YjJkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwpAQCAtMTYxLDExICsxNjEsMTUgQEAKIAogc3RhdGljIHZvaWQgYmZpbl9pbnRlcm5hbF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKICNpZmRlZiBDT05GSUdfQkY1M3gKKwlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAJYmZpbl93cml0ZV9TSUNfSU1BU0soYmZpbl9yZWFkX1NJQ19JTUFTSygpICYKIAkJCSAgICAgfigxIDw8IFNJQ19TWVNJUlEoaXJxKSkpOwogI2Vsc2UKIAl1bnNpZ25lZCBtYXNrX2JhbmssIG1hc2tfYml0OworCWxvY2FsX2lycV9zYXZlX2h3KGZsYWdzKTsKIAltYXNrX2JhbmsgPSBTSUNfU1lTSVJRKGlycSkgLyAzMjsKIAltYXNrX2JpdCA9IFNJQ19TWVNJUlEoaXJxKSAlIDMyOwogCWJmaW5fd3JpdGVfU0lDX0lNQVNLKG1hc2tfYmFuaywgYmZpbl9yZWFkX1NJQ19JTUFTSyhtYXNrX2JhbmspICYKQEAgLTE3NSwxNSArMTc5LDIwIEBACiAJCQkgICAgIH4oMSA8PCBtYXNrX2JpdCkpOwogI2VuZGlmCiAjZW5kaWYKKwlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJmaW5faW50ZXJuYWxfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKICNpZmRlZiBDT05GSUdfQkY1M3gKKwlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAJYmZpbl93cml0ZV9TSUNfSU1BU0soYmZpbl9yZWFkX1NJQ19JTUFTSygpIHwKIAkJCSAgICAgKDEgPDwgU0lDX1NZU0lSUShpcnEpKSk7CiAjZWxzZQogCXVuc2lnbmVkIG1hc2tfYmFuaywgbWFza19iaXQ7CisJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOwogCW1hc2tfYmFuayA9IFNJQ19TWVNJUlEoaXJxKSAvIDMyOwogCW1hc2tfYml0ID0gU0lDX1NZU0lSUShpcnEpICUgMzI7CiAJYmZpbl93cml0ZV9TSUNfSU1BU0sobWFza19iYW5rLCBiZmluX3JlYWRfU0lDX0lNQVNLKG1hc2tfYmFuaykgfApAQCAtMTkzLDYgKzIwMiw3IEBACiAJCQkgICAgICgxIDw8IG1hc2tfYml0KSk7CiAjZW5kaWYKICNlbmRpZgorCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMzkwLDcgKzQwMCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYmZpbl9zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlKQogewogI2lmZGVmIENPTkZJR19JUElQRQotCV9zZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCV9zZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKICNlbHNlCiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJLyogTWF5IG5vdCBjYWxsIGdlbmVyaWMgc2V0X2lycV9oYW5kbGVyKCkgZHVlIHRvIHNwaW5sb2NrCkBAIC0xMDU1LDEzICsxMDY1LDE4IEBACiAjZW5kaWYKIAkJZGVmYXVsdDoKICNpZmRlZiBDT05GSUdfSVBJUEUKLQkvKgotCSAqIFdlIHdhbnQgaW50ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgbWFza2VkLCBiZWNhdXNlCi0JICogSVNScyBtYXkgdHJpZ2dlciBpbnRlcnJ1cHRzIHJlY3Vyc2l2ZWx5IChlLmcuIERNQSksIGJ1dAotCSAqIGludGVycnVwdHMgYXJlIF9ub3RfIG1hc2tlZCBhdCBDUFUgbGV2ZWwuIFNvIGxldCdzIGhhbmRsZQotCSAqIHRoZW0gYXMgbGV2ZWwgaW50ZXJydXB0cy4KLQkgKi8KLQkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQkJLyoKKwkJCSAqIFdlIHdhbnQgaW50ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUKKwkJCSAqIG1hc2tlZCwgYmVjYXVzZSBJU1JzIG1heSB0cmlnZ2VyIGludGVycnVwdHMKKwkJCSAqIHJlY3Vyc2l2ZWx5IChlLmcuIERNQSksIGJ1dCBpbnRlcnJ1cHRzIGFyZQorCQkJICogX25vdF8gbWFza2VkIGF0IENQVSBsZXZlbC4gU28gbGV0J3MgaGFuZGxlCisJCQkgKiBtb3N0IG9mIHRoZW0gYXMgbGV2ZWwgaW50ZXJydXB0cywgZXhjZXB0CisJCQkgKiB0aGUgdGltZXIgaW50ZXJydXB0IHdoaWNoIGlzIHNwZWNpYWwuCisJCQkgKi8KKwkJCWlmIChpcnEgPT0gSVJRX1NZU1RNUiB8fCBpcnEgPT0gSVJRX0NPUkVUTVIpCisJCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX3NpbXBsZV9pcnEpOworCQkJZWxzZQorCQkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogI2Vsc2UgLyogIUNPTkZJR19JUElQRSAqLwogCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX3NpbXBsZV9pcnEpOwogI2VuZGlmIC8qICFDT05GSUdfSVBJUEUgKi8KQEAgLTExMjMsOSArMTEzOCw4IEBACiAKICNpZmRlZiBDT05GSUdfSVBJUEUKIAlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCQlkZXNjLT5pY19wcmlvID0gX19pcGlwZV9nZXRfaXJxX3ByaW9yaXR5KGlycSk7Ci0JCWRlc2MtPnRocl9wcmlvID0gX19pcGlwZV9nZXRfaXJxdGhyZWFkX3ByaW9yaXR5KGlycSk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19JUElQRSAqLwogCkBAIC0xMjA4LDc2ICsxMjIyLDIxIEBACiAJcmV0dXJuIElWRzE1OwogfQogCi1pbnQgX19pcGlwZV9nZXRfaXJxdGhyZWFkX3ByaW9yaXR5KHVuc2lnbmVkIGlycSkKLXsKLQlpbnQgaWVudCwgcHJpbzsKLQlpbnQgZGVtdXhfaXJxOwotCi0JLyogVGhlIHJldHVybmVkIHByaW9yaXR5IHZhbHVlIGlzIHJlc2NhbGVkIHRvIFswLi5JVkcxMysxXQotCSAqIHdpdGggMCBiZWluZyB0aGUgbG93ZXN0IGVmZmVjdGl2ZSBwcmlvcml0eSBsZXZlbC4gKi8KLQotCWlmIChpcnEgPD0gSVJRX0NPUkVUTVIpCi0JCXJldHVybiBJVkcxMyAtIGlycSArIDE7Ci0KLQkvKiBHUElPIElSUXMgYXJlIGdpdmVuIHRoZSBwcmlvcml0eSBvZiB0aGUgZGVtdXgKLQkgKiBpbnRlcnJ1cHQuICovCi0JaWYgKElTX0dQSU9JUlEoaXJxKSkgewotI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQotCQl1MzIgYmFuayA9IFBJTlRfMl9CQU5LKGlycTJwaW50X2x1dFtpcnEgLSBTWVNfSVJRU10pOwotCQlkZW11eF9pcnEgPSAoYmFuayA9PSAwID8gSVJRX1BJTlQwIDoKLQkJCQliYW5rID09IDEgPyBJUlFfUElOVDEgOgotCQkJCWJhbmsgPT0gMiA/IElSUV9QSU5UMiA6Ci0JCQkJSVJRX1BJTlQzKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTYxKQotCQlkZW11eF9pcnEgPSAoaXJxID49IElSUV9QRjMyID8gSVJRX1BST0cyX0lOVEEgOgotCQkJCWlycSA+PSBJUlFfUEYxNiA/IElSUV9QUk9HMV9JTlRBIDoKLQkJCQlJUlFfUFJPRzBfSU5UQSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkKLQkJZGVtdXhfaXJxID0gKGlycSA+PSBJUlFfUEgwID8gSVJRX1BPUlRIX0lOVEEgOgotCQkJCWlycSA+PSBJUlFfUEcwID8gSVJRX1BPUlRHX0lOVEEgOgotCQkJCUlSUV9QT1JURl9JTlRBKTsKLSNlbHNlCi0JCWRlbXV4X2lycSA9IGlycTsKLSNlbmRpZgotCQlyZXR1cm4gSVZHMTMgLSBQUklPX0dQSU9ERU1VWChkZW11eF9pcnEpICsgMTsKLQl9Ci0KLQkvKiBUaGUgR1BJTyBkZW11eCBpbnRlcnJ1cHQgaXMgZ2l2ZW4gYSBsb3dlciBwcmlvcml0eQotCSAqIHRoYW4gdGhlIEdQSU8gSVJRcywgc28gdGhhdCBpdHMgdGhyZWFkZWQgaGFuZGxlcgotCSAqIHVubWFza3MgdGhlIGludGVycnVwdCBsaW5lIGFmdGVyIHRoZSBkZWNvZGVkIElSUXMKLQkgKiBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAqLwotCXByaW8gPSBQUklPX0dQSU9ERU1VWChpcnEpOwotCS8qIGRlbXV4IGlycT8gKi8KLQlpZiAocHJpbyAhPSAtMSkKLQkJcmV0dXJuIElWRzEzIC0gcHJpbzsKLQotCWZvciAoaWVudCA9IDA7IGllbnQgPCBOUl9QRVJJX0lOVFM7IGllbnQrKykgewotCQlzdHJ1Y3QgaXZneCAqaXZnID0gaXZnX3RhYmxlICsgaWVudDsKLQkJaWYgKGl2Zy0+aXJxbm8gPT0gaXJxKSB7Ci0JCQlmb3IgKHByaW8gPSAwOyBwcmlvIDw9IElWRzEzLUlWRzc7IHByaW8rKykgewotCQkJCWlmIChpdmc3XzEzW3ByaW9dLmlmaXJzdCA8PSBpdmcgJiYKLQkJCQkgICAgaXZnN18xM1twcmlvXS5pc3RvcCA+IGl2ZykKLQkJCQkJcmV0dXJuIElWRzcgLSBwcmlvOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIEh3IGludGVycnVwdHMgYXJlIGRpc2FibGVkIG9uIGVudHJ5IChjaGVjayBTQVZFX0NPTlRFWFQpLiAqLwogI2lmZGVmIENPTkZJR19ET19JUlFfTDEKIF9fYXR0cmlidXRlX18oKGwxX3RleHQpKQogI2VuZGlmCiBhc21saW5rYWdlIGludCBfX2lwaXBlX2dyYWJfaXJxKGludCB2ZWMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXN0cnVjdCBpcGlwZV9wZXJjcHVfZG9tYWluX2RhdGEgKnAgPSBpcGlwZV9yb290X2NwdWRvbV9wdHIoKTsKKwlzdHJ1Y3QgaXBpcGVfZG9tYWluICp0aGlzX2RvbWFpbiA9IGlwaXBlX2N1cnJlbnRfZG9tYWluOwogCXN0cnVjdCBpdmd4ICppdmdfc3RvcCA9IGl2ZzdfMTNbdmVjLUlWRzddLmlzdG9wOwogCXN0cnVjdCBpdmd4ICppdmcgPSBpdmc3XzEzW3ZlYy1JVkc3XS5pZmlyc3Q7Ci0JaW50IGlycTsKKwlpbnQgaXJxLCBzOwogCiAJaWYgKGxpa2VseSh2ZWMgPT0gRVZUX0lWVE1SX1ApKSB7CiAJCWlycSA9IElSUV9DT1JFVE1SOwotCQlnb3RvIGhhbmRsZV9pcnE7CisJCWdvdG8gY29yZV90aWNrOwogCX0KIAogCVNTWU5DKCk7CkBAIC0xMzE5LDI0ICsxMjc4LDM5IEBACiAJaXJxID0gaXZnLT5pcnFubzsKIAogCWlmIChpcnEgPT0gSVJRX1NZU1RNUikgeworI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCitjb3JlX3RpY2s6CisjZWxzZQogCQliZmluX3dyaXRlX1RJTUVSX1NUQVRVUygxKTsgLyogTGF0Y2ggVElNSUwwICovCisjZW5kaWYKIAkJLyogVGhpcyBpcyBiYXNpY2FsbHkgd2hhdCB3ZSBuZWVkIGZyb20gdGhlIHJlZ2lzdGVyIGZyYW1lLiAqLwogCQlfX3Jhd19nZXRfY3B1X3ZhcihfX2lwaXBlX3RpY2tfcmVncykuaXBlbmQgPSByZWdzLT5pcGVuZDsKIAkJX19yYXdfZ2V0X2NwdV92YXIoX19pcGlwZV90aWNrX3JlZ3MpLnBjID0gcmVncy0+cGM7Ci0JCWlmICghaXBpcGVfcm9vdF9kb21haW5fcCkKLQkJCV9fcmF3X2dldF9jcHVfdmFyKF9faXBpcGVfdGlja19yZWdzKS5pcGVuZCB8PSAweDEwOwotCQllbHNlCisJCWlmICh0aGlzX2RvbWFpbiAhPSBpcGlwZV9yb290X2RvbWFpbikKIAkJCV9fcmF3X2dldF9jcHVfdmFyKF9faXBpcGVfdGlja19yZWdzKS5pcGVuZCAmPSB+MHgxMDsKKwkJZWxzZQorCQkJX19yYXdfZ2V0X2NwdV92YXIoX19pcGlwZV90aWNrX3JlZ3MpLmlwZW5kIHw9IDB4MTA7CiAJfQogCi1oYW5kbGVfaXJxOgorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUworY29yZV90aWNrOgorI2VuZGlmCisJaWYgKHRoaXNfZG9tYWluID09IGlwaXBlX3Jvb3RfZG9tYWluKSB7CisJCXMgPSBfX3Rlc3RfYW5kX3NldF9iaXQoSVBJUEVfU1lOQ0RFRkVSX0ZMQUcsICZwLT5zdGF0dXMpOworCQliYXJyaWVyKCk7CisJfQogCiAJaXBpcGVfdHJhY2VfaXJxX2VudHJ5KGlycSk7CiAJX19pcGlwZV9oYW5kbGVfaXJxKGlycSwgcmVncyk7Ci0gICAgICAgaXBpcGVfdHJhY2VfaXJxX2V4aXQoaXJxKTsKKwlpcGlwZV90cmFjZV9pcnFfZXhpdChpcnEpOwogCi0gICAgICAgaWYgKGlwaXBlX3Jvb3RfZG9tYWluX3ApCi0JCXJldHVybiAhdGVzdF9iaXQoSVBJUEVfU1RBTExfRkxBRywgJmlwaXBlX3Jvb3RfY3B1ZG9tX3ZhcihzdGF0dXMpKTsKKwlpZiAodGhpc19kb21haW4gPT0gaXBpcGVfcm9vdF9kb21haW4pIHsKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9JUlFfU1lOQyk7CisJCWlmICghcykgeworCQkJX19jbGVhcl9iaXQoSVBJUEVfU1lOQ0RFRkVSX0ZMQUcsICZwLT5zdGF0dXMpOworCQkJcmV0dXJuICF0ZXN0X2JpdChJUElQRV9TVEFMTF9GTEFHLCAmcC0+c3RhdHVzKTsKKwkJfQorCX0KIAogICAgICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKaW5kZXggNzdjOTkyOC4uOTNlYWI2MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCkBAIC0xNTgsMTAgKzE1OCwxNCBAQAogCQkJa2ZyZWUobXNnKTsKIAkJCWJyZWFrOwogCQljYXNlIEJGSU5fSVBJX0NBTExfRlVOQzoKKwkJCXNwaW5fdW5sb2NrKCZtc2dfcXVldWUtPmxvY2spOwogCQkJaXBpX2NhbGxfZnVuY3Rpb24oY3B1LCBtc2cpOworCQkJc3Bpbl9sb2NrKCZtc2dfcXVldWUtPmxvY2spOwogCQkJYnJlYWs7CiAJCWNhc2UgQkZJTl9JUElfQ1BVX1NUT1A6CisJCQlzcGluX3VubG9jaygmbXNnX3F1ZXVlLT5sb2NrKTsKIAkJCWlwaV9jcHVfc3RvcChjcHUpOworCQkJc3Bpbl9sb2NrKCZtc2dfcXVldWUtPmxvY2spOwogCQkJa2ZyZWUobXNnKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDU3LDcgKzQ2MSw3IEBACiAJc21wX2ZsdXNoX2RhdGEuc3RhcnQgPSBzdGFydDsKIAlzbXBfZmx1c2hfZGF0YS5lbmQgPSBlbmQ7CiAKLQlpZiAoc21wX2NhbGxfZnVuY3Rpb24oJmlwaV9mbHVzaF9pY2FjaGUsICZzbXBfZmx1c2hfZGF0YSwgMSkpCisJaWYgKHNtcF9jYWxsX2Z1bmN0aW9uKCZpcGlfZmx1c2hfaWNhY2hlLCAmc21wX2ZsdXNoX2RhdGEsIDApKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVA6IGZhaWxlZCB0byBydW4gSS1jYWNoZSBmbHVzaCByZXF1ZXN0IG9uIG90aGVyIENQVXNcbiIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc21wX2ljYWNoZV9mbHVzaF9yYW5nZV9vdGhlcnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwppbmRleCBkMDUzMmI3Li45YzM2MjliIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2luaXQuYworKysgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJfQogfQogCi1hc21saW5rYWdlIHZvaWQgaW5pdF9wZGEodm9pZCkKK2FzbWxpbmthZ2Ugdm9pZCBfX2luaXQgaW5pdF9wZGEodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKaW5kZXggMmRmYWM4Yy4uN2Y2NDJmYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCkBAIC02Niw3ICs2Niw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYwppbmRleCA3M2FiYWU3Li5hZjNlODI0IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCkBAIC03NCw3ICs3NCw3IEBACiAJCWlmIChhY3Rpb24pIHsKIAkJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggYzEwOGYzOS4uMzlhYmJmNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9IODMwMF9TV0FCX0gKICNkZWZpbmUgX0g4MzAwX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2lycS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKaW5kZXggZWY0ZjAwNC4uNzRmOGRkNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2OwogCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTk2LDcgKzE5Niw3IEBACiAJCWlmICghYWN0aW9uKQogCQkJZ290byB1bmxvY2s7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIixpKTsKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA2MTgzYWVjLi4xNTNlNzI3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtMjIxLDcgKzIyMSwxMSBAQAogCiBjb25maWcgSUE2NF9YRU5fR1VFU1QKIAlib29sICJYZW4gZ3Vlc3QiCisJc2VsZWN0IFNXSU9UTEIKIAlkZXBlbmRzIG9uIFhFTgorCWhlbHAKKwkgIEJ1aWxkIGEga2VybmVsIHRoYXQgcnVucyBvbiBYZW4gZ3Vlc3QgZG9tYWluLiBBdCB0aGlzIG1vbWVudCBvbmx5CisJICAxNktCIHBhZ2Ugc2l6ZSBpbiBzdXBwb3J0ZWQuCiAKIGVuZGNob2ljZQogCkBAIC00NzksOCArNDgzLDcgQEAKIAlkZWZhdWx0IHkgaWYgVklSVFVBTF9NRU1fTUFQCiAKIGNvbmZpZyBIQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwlkZWZfYm9vbCBOVU1BICYmIFNQQVJTRU1FTQogCiBjb25maWcgSEFWRV9BUkNIX05PREVEQVRBX0VYVEVOU0lPTgogCWRlZl9ib29sIHkKQEAgLTYzNSw2ICs2MzgsMTcgQEAKIAkgIGFuZCBpbmNsdWRlIFBDSSBkZXZpY2Ugc2NvcGUgY292ZXJlZCBieSB0aGVzZSBETUEKIAkgIHJlbWFwcGluZyBkZXZpY2VzLgogCitjb25maWcgRE1BUl9ERUZBVUxUX09OCisJZGVmX2Jvb2wgeQorCXByb21wdCAiRW5hYmxlIERNQSBSZW1hcHBpbmcgRGV2aWNlcyBieSBkZWZhdWx0IgorCWRlcGVuZHMgb24gRE1BUgorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBhIERNQVIgZGV2aWNlIGF0IGJvb3QgdGltZSBpZgorCSAgb25lIGlzIGZvdW5kLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2VsZWN0ZWQsIERNQVIgc3VwcG9ydCBjYW4KKwkgIGJlIGVuYWJsZWQgYnkgcGFzc2luZyBpbnRlbF9pb21tdT1vbiB0byB0aGUga2VybmVsLiBJdCBpcworCSAgcmVjb21tZW5kZWQgeW91IHNheSBOIGhlcmUgd2hpbGUgdGhlIERNQVIgY29kZSByZW1haW5zCisJICBleHBlcmltZW50YWwuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3hlbl9kb211X2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3hlbl9kb211X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmIwNzE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MveGVuX2RvbXVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTYwMSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMQorIyBGcmkgSmFuIDE2IDExOjQ5OjU5IDIwMDkKKyMKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0yMAorQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0s9eQorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorCisjCisjIENvbnRyb2wgR3JvdXAgc3VwcG9ydAorIworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKK0NPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcworIworQ09ORklHX0lBNjQ9eQorQ09ORklHXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1NXSU9UTEI9eQorQ09ORklHX0lPTU1VX0hFTFBFUj15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQorQ09ORklHX0RNST15CitDT05GSUdfRUZJPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX1BBUkFWSVJUX0dVRVNUPXkKK0NPTkZJR19QQVJBVklSVD15CitDT05GSUdfWEVOPXkKK0NPTkZJR19YRU5fWEVOQ09NTT15CitDT05GSUdfTk9fSURMRV9IWj15CisjIENPTkZJR19JQTY0X0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9ESUcgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9ESUdfVlREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfSFBfWlgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9TR0lfU04yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfU0dJX1VWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfSFBfU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19JQTY0X1hFTl9HVUVTVD15CisjIENPTkZJR19JVEFOSVVNIGlzIG5vdCBzZXQKK0NPTkZJR19NQ0tJTkxFWT15CisjIENPTkZJR19JQTY0X1BBR0VfU0laRV80S0IgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKK0NPTkZJR19JQTY0X1BBR0VfU0laRV8xNktCPXkKKyMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX1BHVEFCTEVfMz15CisjIENPTkZJR19QR1RBQkxFXzQgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19JQTY0X0wxX0NBQ0hFX1NISUZUPTcKK0NPTkZJR19JQTY0X0NZQ0xPTkU9eQorQ09ORklHX0lPU0FQSUM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTcKKyMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0xNgorQ09ORklHX0hPVFBMVUdfQ1BVPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1BFUk1JVF9CU1BfUkVNT1ZFPXkKK0NPTkZJR19GT1JDRV9DUEVJX1JFVEFSR0VUPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX05SX1FVSUNLPTEKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfVklSVFVBTF9NRU1fTUFQPXkKK0NPTkZJR19IT0xFU19JTl9aT05FPXkKKyMgQ09ORklHX0lBMzJfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgaXMgbm90IHNldAorQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZPXkKK0NPTkZJR19QRVJGTU9OPXkKK0NPTkZJR19JQTY0X1BBTElORk89eQorIyBDT05GSUdfSUE2NF9NQ19FUlJfSU5KRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfRVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfSFBfQU1MX05GVyBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisKKyMKKyMgRmlybXdhcmUgRHJpdmVycworIworIyBDT05GSUdfRklSTVdBUkVfTUVNTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfVkFSUz15CitDT05GSUdfRUZJX1BDRFA9eQorQ09ORklHX0RNSUlEPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9bQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKK0NPTkZJR19BQ1BJPXkKK0NPTkZJR19BQ1BJX1NMRUVQPXkKK0NPTkZJR19BQ1BJX1BST0NGUz15CitDT05GSUdfQUNQSV9QUk9DRlNfUE9XRVI9eQorQ09ORklHX0FDUElfU1lTRlNfUE9XRVI9eQorQ09ORklHX0FDUElfUFJPQ19FVkVOVD15CitDT05GSUdfQUNQSV9CVVRUT049bQorQ09ORklHX0FDUElfRkFOPW0KKyMgQ09ORklHX0FDUElfRE9DSyBpcyBub3Qgc2V0CitDT05GSUdfQUNQSV9QUk9DRVNTT1I9bQorQ09ORklHX0FDUElfSE9UUExVR19DUFU9eQorQ09ORklHX0FDUElfVEhFUk1BTD1tCisjIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKK0NPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKKyMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9QQ0lfU0xPVCBpcyBub3Qgc2V0CitDT05GSUdfQUNQSV9TWVNURU09eQorQ09ORklHX0FDUElfQ09OVEFJTkVSPW0KKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEpCisjCitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHX1BDST1tCisjIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHX1BDSV9BQ1BJPW0KKyMgQ09ORklHX0hPVFBMVUdfUENJX0FDUElfSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CitDT05GSUdfQVJQRD15CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfUE5QPXkKK0NPTkZJR19QTlBfREVCVUdfTUVTU0FHRVM9eQorCisjCisjIFByb3RvY29scworIworQ09ORklHX1BOUEFDUEk9eQorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX1hFTl9CTEtERVZfRlJPTlRFTkQ9eQorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1RJTUlOR1M9eQorQ09ORklHX0lERV9BVEFQST15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUFDUEkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKK0NPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9DTUQ2NFg9eQorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9QSUlYPXkKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ORVRMSU5LPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTEKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQorQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CitDT05GSUdfRlVTSU9OPXkKK0NPTkZJR19GVVNJT05fU1BJPXkKK0NPTkZJR19GVVNJT05fRkM9eQorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CitDT05GSUdfRlVTSU9OX0NUTD15CisjIENPTkZJR19GVVNJT05fTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorQ09ORklHX05FVF9UVUxJUD15CisjIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKK0NPTkZJR19UVUxJUD1tCisjIENPTkZJR19UVUxJUF9NV0kgaXMgbm90IHNldAorIyBDT05GSUdfVFVMSVBfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19UVUxJUF9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorQ09ORklHX0UxMDA9bQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CitDT05GSUdfVElHT04zPXkKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1hFTl9ORVRERVZfRlJPTlRFTkQ9eQorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19HQU1FUE9SVD1tCisjIENPTkZJR19HQU1FUE9SVF9OUzU1OCBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVF9MNCBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUX0ZNODAxIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAorIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0kgaXMgbm90IHNldAorIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CisjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAorIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAorIyBDT05GSUdfU1ggaXMgbm90IHNldAorIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX1BOUD15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19IVkNfRFJJVkVSPXkKK0NPTkZJR19IVkNfSVJRPXkKK0NPTkZJR19IVkNfWEVOPXkKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0VGSV9SVEM9eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorQ09ORklHX1JBV19EUklWRVI9bQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKK0NPTkZJR19IUEVUPXkKK0NPTkZJR19IUEVUX01NQVA9eQorIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD1tCisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPXkKKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzTFYwMkQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD1tCisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfQUdQPW0KK0NPTkZJR19EUk09bQorQ09ORklHX0RSTV9UREZYPW0KK0NPTkZJR19EUk1fUjEyOD1tCitDT05GSUdfRFJNX1JBREVPTj1tCitDT05GSUdfRFJNX01HQT1tCitDT05GSUdfRFJNX1NJUz1tCisjIENPTkZJR19EUk1fVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1VTQl9VSENJX0hDRD15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKK0NPTkZJR19YRU5fQkFMTE9PTj15CitDT05GSUdfWEVOX1NDUlVCX1BBR0VTPXkKK0NPTkZJR19YRU5GUz15CitDT05GSUdfWEVOX0NPTVBBVF9YRU5GUz15CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TUEVDIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz15CisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX1hGU19GUz15CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9bQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorQ09ORklHX1NVTlJQQ19HU1M9bQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9bQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NHSV9QQVJUSVRJT049eQorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRUZJX1BBUlRJVElPTj15CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTIwNDgKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CPXkKKyMgQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUyBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNBQkxFX1ZIUFQgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9ERUJVR19DTVBYQ0hHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfREVCVUdfSVJRIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz1tCisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LVk09eQorQ09ORklHX1ZJUlRVQUxJWkFUSU9OPXkKKyMgQ09ORklHX0tWTSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUSU9fUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRJT19CQUxMT09OIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQorIyBDT05GSUdfSU9NTVVfQVBJIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mcHUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mcHUuaAppbmRleCAzODU5NTU4Li4wYzI2MTU3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oCkBAIC02LDggKzYsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogLyogZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyOiAqLwogI2RlZmluZSBGUFNSX1RSQVBfVkQJKDEgPDwgMCkJLyogaW52YWxpZCBvcCB0cmFwIGRpc2FibGVkICovCiAjZGVmaW5lIEZQU1JfVFJBUF9ERAkoMSA8PCAxKQkvKiBkZW5vcm1hbCB0cmFwIGRpc2FibGVkICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ2NjX2ludHJpbi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaAppbmRleCAwZjViNTU5Li5jMmM1ZmQ4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ2NjX2ludHJpbi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmgKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwMyBTdXJlc2ggU2lkZGhhIDxzdXJlc2guYi5zaWRkaGFAaW50ZWwuY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKIC8qIGRlZmluZSB0aGlzIG1hY3JvIHRvIGdldCBzb21lIGFzbSBzdG10cyBpbmNsdWRlZCBpbiAnYycgZmlsZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCmluZGV4IGEzZTQ0YTUuLmM0NzgzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaApAQCAtMTAsNiArMTAsNyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIC8qIGluY2x1ZGUgY29tcGlsZXIgc3BlY2lmaWMgaW50cmluc2ljcyAqLwogI2luY2x1ZGUgPGFzbS9pYTY0cmVncy5oPgogI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaAppbmRleCA2OGFhNmRhLi4xOGE3ZTQ5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCkBAIC0yMSwxMCArMjEsMTMgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCisvKiBTZWxlY3QgeDg2IHNwZWNpZmljIGZlYXR1cmVzIGluIDxsaW51eC9rdm0uaD4gKi8KKyNkZWZpbmUgX19LVk1fSEFWRV9JT0FQSUMKKyNkZWZpbmUgX19LVk1fSEFWRV9ERVZJQ0VfQVNTSUdOTUVOVAorCiAvKiBBcmNoaXRlY3R1cmFsIGludGVycnVwdCBsaW5lIGNvdW50LiAqLwogI2RlZmluZSBLVk1fTlJfSU5URVJSVVBUUyAyNTYKIApAQCAtMTYyLDcgKzE2NSw0MCBAQAogCXVuc2lnbmVkIGxvbmcgIHZjcHVpZFs1XTsKIAl1bnNpZ25lZCBsb25nICB2cHNyOwogCXVuc2lnbmVkIGxvbmcgIHZwcjsKLQl1bnNpZ25lZCBsb25nICB2Y3JbMTI4XTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgIHZjclsxMjhdOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBkY3I7CisJCQl1bnNpZ25lZCBsb25nIGl0bTsKKwkJCXVuc2lnbmVkIGxvbmcgaXZhOworCQkJdW5zaWduZWQgbG9uZyByc3YxWzVdOworCQkJdW5zaWduZWQgbG9uZyBwdGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjJbN107CisJCQl1bnNpZ25lZCBsb25nIGlwc3I7CisJCQl1bnNpZ25lZCBsb25nIGlzcjsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2MzsKKwkJCXVuc2lnbmVkIGxvbmcgaWlwOworCQkJdW5zaWduZWQgbG9uZyBpZmE7CisJCQl1bnNpZ25lZCBsb25nIGl0aXI7CisJCQl1bnNpZ25lZCBsb25nIGlpcGE7CisJCQl1bnNpZ25lZCBsb25nIGlmczsKKwkJCXVuc2lnbmVkIGxvbmcgaWltOworCQkJdW5zaWduZWQgbG9uZyBpaGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjRbMzhdOworCQkJdW5zaWduZWQgbG9uZyBsaWQ7CisJCQl1bnNpZ25lZCBsb25nIGl2cjsKKwkJCXVuc2lnbmVkIGxvbmcgdHByOworCQkJdW5zaWduZWQgbG9uZyBlb2k7CisJCQl1bnNpZ25lZCBsb25nIGlycls0XTsKKwkJCXVuc2lnbmVkIGxvbmcgaXR2OworCQkJdW5zaWduZWQgbG9uZyBwbXY7CisJCQl1bnNpZ25lZCBsb25nIGNtY3Y7CisJCQl1bnNpZ25lZCBsb25nIHJzdjVbNV07CisJCQl1bnNpZ25lZCBsb25nIGxycjA7CisJCQl1bnNpZ25lZCBsb25nIGxycjE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjZbNDZdOworCQl9OworCX07CiB9OwogCiBzdHJ1Y3Qga3ZtX3JlZ3MgewpAQCAtMjEwLDQgKzI0NiwxOCBAQAogc3RydWN0IGt2bV9mcHUgewogfTsKIAorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NISUZUCTE2CisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRQkoMVVMIDw8IEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0hJRlQpCisKK3N0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIHsKKwl1bnNpZ25lZCBjaGFyIHN0YWNrW0tWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRV07Cit9OworCitzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCB7Cit9OworCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAzNDg2NjM2Li40NTQyNjUxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTEyLDcgKzExMiwxMSBAQAogI2RlZmluZSBWQ1BVX1NUUlVDVF9TSElGVAkxNgogI2RlZmluZSBWQ1BVX1NUUlVDVF9TSVpFCShfX0lBNjRfVUxfQ09OU1QoMSkgPDwgVkNQVV9TVFJVQ1RfU0hJRlQpCiAKLSNkZWZpbmUgS1ZNX1NUS19PRkZTRVQJCVZDUFVfU1RSVUNUX1NJWkUKKy8qCisgKiBUaGlzIG11c3QgbWF0Y2ggS1ZNX0lBNjRfVkNQVV9TVEFDS197U0hJRlQsU0laRX0gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCisgKi8KKyNkZWZpbmUgS1ZNX1NUS19TSElGVAkJMTYKKyNkZWZpbmUgS1ZNX1NUS19PRkZTRVQJCShfX0lBNjRfVUxfQ09OU1QoMSk8PCBLVk1fU1RLX1NISUZUKQogCiAjZGVmaW5lIEtWTV9WTV9TVFJVQ1RfU0hJRlQJMTkKICNkZWZpbmUgS1ZNX1ZNX1NUUlVDVF9TSVpFCShfX0lBNjRfVUxfQ09OU1QoMSkgPDwgS1ZNX1ZNX1NUUlVDVF9TSElGVCkKQEAgLTE1MywxMCArMTU3LDEwIEBACiAJc3RydWN0IGt2bV92Y3B1X2RhdGEgdmNwdV9kYXRhW0tWTV9NQVhfVkNQVVNdOwogfTsKIAotI2RlZmluZSBWQ1BVX0JBU0UobikJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKLQkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIHZjcHVfZGF0YVtuXSkKLSNkZWZpbmUgVk1fQkFTRQkJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKLQkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV92bV9zdHJ1Y3QpCisjZGVmaW5lIFZDUFVfQkFTRShuKQkoS1ZNX1ZNX0RBVEFfQkFTRSArIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIHZjcHVfZGF0YVtuXSkpCisjZGVmaW5lIEtWTV9WTV9CQVNFCShLVk1fVk1fREFUQV9CQVNFICsgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBrdm1fdm1fZGF0YSwga3ZtX3ZtX3N0cnVjdCkpCiAjZGVmaW5lIEtWTV9NRU1fRElSVFlfTE9HX0JBU0UJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKIAkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV9tZW1fZGlydHlfbG9nKQogCkBAIC0yMzUsOCArMjM5LDYgQEAKIAogc3RydWN0IGt2bTsKIHN0cnVjdCBrdm1fdmNwdTsKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWd7Ci19OwogCiBzdHJ1Y3Qga3ZtX21taW9fcmVxIHsKIAl1aW50NjRfdCBhZGRyOyAgICAgICAgICAvKiAgcGh5c2ljYWwgYWRkcmVzcwkJKi8KQEAgLTQ2Miw2ICs0NjQsOCBAQAogCXVuc2lnbmVkIGxvbmcJbWV0YXBoeXNpY2FsX3JyNDsKIAl1bnNpZ25lZCBsb25nCXZtbV9pbml0X3JyOwogCisJaW50CQlvbmxpbmVfdmNwdXM7CisKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYzsKIAlzdHJ1Y3Qga3ZtX3ZtX3N0YXQgc3RhdDsKIAlzdHJ1Y3Qga3ZtX3NhbF9kYXRhIHJkdl9zYWxfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbXpvbmUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbXpvbmUuaAppbmRleCAzNGVmZTg4Li5mMmNhMzIwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW16b25lLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21tem9uZS5oCkBAIC0zMSwxMCArMzEsNiBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKLWV4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19JQTY0X0RJRyAvKiBESUcgc3lzdGVtcyBhcmUgc21hbGwgKi8KICMgZGVmaW5lIE1BWF9QSFlTTk9ERV9JRAk4CiAjIGRlZmluZSBOUl9OT0RFX01FTUJMS1MJKE1BWF9OVU1OT0RFUyAqIDgpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYzEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9JQTY0X01TSV9ERUZfSAorI2RlZmluZSBfSUE2NF9NU0lfREVGX0gKKworLyoKKyAqIFNoaWZ0cyBmb3IgQVBJQy1iYXNlZCBkYXRhCisgKi8KKworI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX1NISUZUCTAKKyNkZWZpbmUJICAgIE1TSV9EQVRBX1ZFQ1RPUih2KQkJKCgodTgpdikgPDwgTVNJX0RBVEFfVkVDVE9SX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX01BU0sJMHhmZmZmZmYwMAorCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUCTgKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkJKDEgPDwgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCkKKworI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfU0hJRlQJMTQKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0xFVkVMX0RFQVNTRVJUCSgwIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfQVNTRVJUCSgxIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX1NISUZUCTE1CisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX0VER0UJKDAgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwJKDEgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKworLyoKKyAqIFNoaWZ0L21hc2sgZmllbGRzIGZvciBBUElDLWJhc2VkIGJ1cyBhZGRyZXNzCisgKi8KKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9TSElGVAk0CisjZGVmaW5lICAgICBNU0lfQUREUl9IRUFERVIJCTB4ZmVlMDAwMDAKKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9NQVNLCTB4ZmZmMDAwMGYKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdSkJKChjcHUpIDw8IE1TSV9BRERSX0RFU1RfSURfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVAkyCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX01PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUX01PREVfU0hJRlQpCisjZGVmaW5lCSAgICBNU0lfQUREUl9ERVNUX01PREVfTE9HSUMJKDEgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVAkzCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9DUFUJKDAgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkJKDEgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisKKyNlbmRpZi8qIF9JQTY0X01TSV9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL2J0ZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL2J0ZS5oCmluZGV4IDVlZmVjZjAuLjk2Nzk4ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9idGUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc24vYnRlLmgKQEAgLTM5LDcgKzM5LDcgQEAKIC8qIEJURSBzdGF0dXMgcmVnaXN0ZXIgb25seSBzdXBwb3J0cyAxNiBiaXRzIGZvciBsZW5ndGggZmllbGQgKi8KICNkZWZpbmUgQlRFX0xFTl9CSVRTICgxNikKICNkZWZpbmUgQlRFX0xFTl9NQVNLICgoMSA8PCBCVEVfTEVOX0JJVFMpIC0gMSkKLSNkZWZpbmUgQlRFX01BWF9YRkVSICgoMSA8PCBCVEVfTEVOX0JJVFMpICogTDFfQ0FDSEVfQllURVMpCisjZGVmaW5lIEJURV9NQVhfWEZFUiAoQlRFX0xFTl9NQVNLIDw8IEwxX0NBQ0hFX1NISUZUKQogCiAKIC8qIERlZmluZSBoYXJkd2FyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggNmFhNThiNi4uYzg5YThjYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC02LDcgKzYsNyBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvLgogICovCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwppbmRleCA1Y2ZkM2Q5Li5lMTMxMjUwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwpAQCAtNTA3LDcgKzUwNyw3IEBACiAJaWYgKHRyaWdnZXIgPT0gSU9TQVBJQ19FREdFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IGkgPD0gTlJfSVJRUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewogCQlpbmZvID0gJmlvc2FwaWNfaW50cl9pbmZvW2ldOwogCQlpZiAoaW5mby0+dHJpZ2dlciA9PSB0cmlnZ2VyICYmIGluZm8tPnBvbGFyaXR5ID09IHBvbCAmJgogCQkgICAgKGluZm8tPmRtb2RlID09IElPU0FQSUNfRklYRUQgfHwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCmluZGV4IGE1OGY2NGMuLjRmNTk2NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYwpAQCAtODAsNyArODAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7Ci0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQl9CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYwppbmRleCA4OTAzMzkzLi4zNjhlZTRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCkBAIC03LDQ0ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0vKgotICogU2hpZnRzIGZvciBBUElDLWJhc2VkIGRhdGEKLSAqLwotCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9TSElGVAkJMAotI2RlZmluZQkgICAgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh1OCl2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLCQkweGZmZmZmZjAwCi0KLSNkZWZpbmUgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQJCTgKLSNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJCSgxIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotCi0jZGVmaW5lIE1TSV9EQVRBX0xFVkVMX1NISUZUCQkxNAotI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfREVBU1NFUlQJKDAgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9BU1NFUlQJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfVFJJR0dFUl9TSElGVAkJMTUKLSNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkoMCA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9MRVZFTAkoMSA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotCi0vKgotICogU2hpZnQvbWFzayBmaWVsZHMgZm9yIEFQSUMtYmFzZWQgYnVzIGFkZHJlc3MKLSAqLwotCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQk0Ci0jZGVmaW5lIE1TSV9BRERSX0hFQURFUgkJCTB4ZmVlMDAwMDAKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUSURfTUFTSwkJMHhmZmYwMDAwZgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVElEX0NQVShjcHUpCSgoY3B1KSA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCkKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUTU9ERV9TSElGVAkJMgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVE1PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUTU9ERV9TSElGVCkKLSNkZWZpbmUJICAgIE1TSV9BRERSX0RFU1RNT0RFX0xPR0lDCSgxIDw8IE1TSV9BRERSX0RFU1RNT0RFX1NISUZUKQotCi0jZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSQkoMSA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAJaWE2NF9tc2lfY2hpcDsKIApAQCAtNjUsOCArMjgsOCBAQAogCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOwogCiAJYWRkciA9IG1zZy5hZGRyZXNzX2xvOwotCWFkZHIgJj0gTVNJX0FERFJfREVTVElEX01BU0s7Ci0JYWRkciB8PSBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKKwlhZGRyICY9IE1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwlhZGRyIHw9IE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKIAltc2cuYWRkcmVzc19sbyA9IGFkZHI7CiAKIAlkYXRhID0gbXNnLmRhdGE7CkBAIC05OCw5ICs2MSw5IEBACiAJbXNnLmFkZHJlc3NfaGkgPSAwOwogCW1zZy5hZGRyZXNzX2xvID0KIAkJTVNJX0FERFJfSEVBREVSIHwKLQkJTVNJX0FERFJfREVTVE1PREVfUEhZUyB8CisJCU1TSV9BRERSX0RFU1RfTU9ERV9QSFlTIHwKIAkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVIHwKLQkJTVNJX0FERFJfREVTVElEX0NQVShkZXN0X3BoeXNfaWQpOworCQlNU0lfQUREUl9ERVNUX0lEX0NQVShkZXN0X3BoeXNfaWQpOwogCiAJbXNnLmRhdGEgPQogCQlNU0lfREFUQV9UUklHR0VSX0VER0UgfApAQCAtMTgzLDggKzE0Niw4IEBACiAKIAltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7CiAJbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVElEX01BU0s7Ci0JbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVElEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CisJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CiAKIAlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOwogCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqbWFzazsKQEAgLTIxNSw5ICsxNzgsOSBAQAogCW1zZy0+YWRkcmVzc19oaSA9IDA7CiAJbXNnLT5hZGRyZXNzX2xvID0KIAkJTVNJX0FERFJfSEVBREVSIHwKLQkJTVNJX0FERFJfREVTVE1PREVfUEhZUyB8CisJCU1TSV9BRERSX0RFU1RfTU9ERV9QSFlTIHwKIAkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVIHwKLQkJTVNJX0FERFJfREVTVElEX0NQVShkZXN0KTsKKwkJTVNJX0FERFJfREVTVF9JRF9DUFUoZGVzdCk7CiAKIAltc2ctPmRhdGEgPQogCQlNU0lfREFUQV9UUklHR0VSX0VER0UgfApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCAxMTQ2Mzk5Li41MjI5MDU0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtNzM2LDE0ICs3MzYsMTUgQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJfQogCisJY3B1X2NsZWFyKGNwdSwgY3B1X29ubGluZV9tYXApOworCiAJaWYgKG1pZ3JhdGVfcGxhdGZvcm1faXJxcyhjcHUpKSB7CiAJCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0JCXJldHVybiAoLUVCVVNZKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZW1vdmVfc2libGluZ2luZm8oY3B1KTsKIAlmaXh1cF9pcnFzKCk7Ci0JY3B1X2NsZWFyKGNwdSwgY3B1X29ubGluZV9tYXApOwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIAljcHVfY2xlYXIoY3B1LCBjcHVfY2FsbGluX21hcCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Vud2luZC5jIGIvYXJjaC9pYTY0L2tlcm5lbC91bndpbmQuYwppbmRleCA2NzgxMGI3Li5iNmMwZTYzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Vud2luZC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdW53aW5kLmMKQEAgLTIxNDksNyArMjE0OSw3IEBACiAKIAkvKiBuZXh0LCByZW1vdmUgaGFzaCB0YWJsZSBlbnRyaWVzIGZvciB0aGlzIHRhYmxlICovCiAKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPD0gVU5XX0hBU0hfU0laRTsgKytpbmRleCkgeworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFVOV19IQVNIX1NJWkU7ICsraW5kZXgpIHsKIAkJdG1wID0gdW53LmNhY2hlICsgdW53Lmhhc2hbaW5kZXhdOwogCQlpZiAodW53Lmhhc2hbaW5kZXhdID49IFVOV19DQUNIRV9TSVpFCiAJCSAgICB8fCB0bXAtPmlwIDwgdGFibGUtPnN0YXJ0IHx8IHRtcC0+aXAgPj0gdGFibGUtPmVuZCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vS2NvbmZpZyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwppbmRleCBmODMzYTBiLi4wYTJkNmI4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL0tjb25maWcKKysrIGIvYXJjaC9pYTY0L2t2bS9LY29uZmlnCkBAIC00LDYgKzQsMTAgQEAKIGNvbmZpZyBIQVZFX0tWTQogCWJvb2wKIAorY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKKyAgICAgICBib29sCisgICAgICAgZGVmYXVsdCB5CisKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKIAlkZXBlbmRzIG9uIEhBVkVfS1ZNIHx8IElBNjQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vaXJxLmggYi9hcmNoL2lhNjQva3ZtL2lycS5oCmluZGV4IGM2Nzg2ZTguLmMwNzg1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vaXJxLmgKKysrIGIvYXJjaC9pYTY0L2t2bS9pcnEuaApAQCAtMjMsNiArMjMsOCBAQAogI2lmbmRlZiBfX0lSUV9ICiAjZGVmaW5lIF9fSVJRX0gKIAorI2luY2x1ZGUgImxhcGljLmgiCisKIHN0YXRpYyBpbmxpbmUgaW50IGlycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwppbmRleCA0ZTU4NmY2Li4wNzZiMDBkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAlzd2l0Y2ggKGV4dCkgewogCWNhc2UgS1ZNX0NBUF9JUlFDSElQOgogCWNhc2UgS1ZNX0NBUF9NUF9TVEFURToKLQorCWNhc2UgS1ZNX0NBUF9JUlFfSU5KRUNUX1NUQVRVUzoKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9DT0FMRVNDRURfTU1JTzoKQEAgLTMxNCw3ICszMTQsNyBAQAogCXVuaW9uIGlhNjRfbGlkIGxpZDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7CiAJCWlmIChrdm0tPnZjcHVzW2ldKSB7CiAJCQlsaWQudmFsID0gVkNQVV9MSUQoa3ZtLT52Y3B1c1tpXSk7CiAJCQlpZiAobGlkLmlkID09IGlkICYmIGxpZC5laWQgPT0gZWlkKQpAQCAtMzg4LDcgKzM4OCw3IEBACiAKIAljYWxsX2RhdGEucHRjX2dfZGF0YSA9IHAtPnUucHRjX2dfZGF0YTsKIAotCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7CiAJCWlmICgha3ZtLT52Y3B1c1tpXSB8fCBrdm0tPnZjcHVzW2ldLT5hcmNoLm1wX3N0YXRlID09CiAJCQkJCQlLVk1fTVBfU1RBVEVfVU5JTklUSUFMSVpFRCB8fAogCQkJCQl2Y3B1ID09IGt2bS0+dmNwdXNbaV0pCkBAIC03ODgsNiArNzg4LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJa3ZtX2luaXRfdm0oa3ZtKTsKIAorCWt2bS0+YXJjaC5vbmxpbmVfdmNwdXMgPSAwOworCiAJcmV0dXJuIGt2bTsKIAogfQpAQCAtOTE5LDcgKzkyMSwxMyBAQAogCQlyID0ga3ZtX2lvYXBpY19pbml0KGt2bSk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhrdm0pOworCQlpZiAocikgeworCQkJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOworCQkJZ290byBvdXQ7CisJCX0KIAkJYnJlYWs7CisJY2FzZSBLVk1fSVJRX0xJTkVfU1RBVFVTOgogCWNhc2UgS1ZNX0lSUV9MSU5FOiB7CiAJCXN0cnVjdCBrdm1faXJxX2xldmVsIGlycV9ldmVudDsKIApAQCAtOTI3LDEwICs5MzUsMTcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpcnFfZXZlbnQsIGFyZ3AsIHNpemVvZiBpcnFfZXZlbnQpKQogCQkJZ290byBvdXQ7CiAJCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pKSB7CisJCQlfX3MzMiBzdGF0dXM7CiAJCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwotCQkJa3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCisJCQlzdGF0dXMgPSBrdm1fc2V0X2lycShrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwKIAkJCQkgICAgaXJxX2V2ZW50LmlycSwgaXJxX2V2ZW50LmxldmVsKTsKIAkJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJCWlmIChpb2N0bCA9PSBLVk1fSVJRX0xJTkVfU1RBVFVTKSB7CisJCQkJaXJxX2V2ZW50LnN0YXR1cyA9IHN0YXR1czsKKwkJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpcnFfZXZlbnQsCisJCQkJCQkJc2l6ZW9mIGlycV9ldmVudCkpCisJCQkJCWdvdG8gb3V0OworCQkJfQogCQkJciA9IDA7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMTQ5LDcgKzExNjQsNyBAQAogCiAJCS8qSW5pdGlhbGl6ZSBpdGMgb2Zmc2V0IGZvciB2Y3B1cyovCiAJCWl0Y19vZmZzZXQgPSAwVUwgLSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfSVRDKTsKLQkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7CiAJCQl2ID0gKHN0cnVjdCBrdm1fdmNwdSAqKSgoY2hhciAqKXZjcHUgKwogCQkJCQlzaXplb2Yoc3RydWN0IGt2bV92Y3B1X2RhdGEpICogaSk7CiAJCQl2LT5hcmNoLml0Y19vZmZzZXQgPSBpdGNfb2Zmc2V0OwpAQCAtMTI4Myw2ICsxMjk4LDggQEAKIAkJZ290byBmYWlsOwogCX0KIAorCWt2bS0+YXJjaC5vbmxpbmVfdmNwdXMrKzsKKwogCXJldHVybiB2Y3B1OwogZmFpbDoKIAlyZXR1cm4gRVJSX1BUUihyKTsKQEAgLTEzMDMsOCArMTMyMCw4IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQoraW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTMzNyw2ICsxMzU0LDEwIEBACiAJfQogfQogCit2b2lkIGt2bV9hcmNoX3N5bmNfZXZlbnRzKHN0cnVjdCBrdm0gKmt2bSkKK3sKK30KKwogdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoa3ZtKTsKQEAgLTE0MTcsNiArMTQzOCwyMyBAQAogCXJldHVybiAwOwogfQogCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrKQoreworCW1lbWNweShzdGFjaywgdmNwdSwgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICBzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2spCit7CisJbWVtY3B5KHZjcHUgKyAxLCAmc3RhY2stPnN0YWNrWzBdICsgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksCisJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykgLSBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7CisKKwl2Y3B1LT5hcmNoLmV4aXRfZGF0YSA9ICgoc3RydWN0IGt2bV92Y3B1ICopc3RhY2spLT5hcmNoLmV4aXRfZGF0YTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBrdm1fYXJjaF92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAKQEAgLTE0MjYsOSArMTQ2NCw3OCBAQAogCiAKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2sgPSBOVUxMOworCWxvbmcgcjsKKworCXN3aXRjaCAoaW9jdGwpIHsKKwljYXNlIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiB7CisJCXN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIF9fdXNlciAqdXNlcl9zdGFjazsKKwkgICAgICAgIHZvaWQgX191c2VyICpmaXJzdF9wID0gYXJncDsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX3N0YWNrLCBmaXJzdF9wLCBzaXplb2Yodm9pZCAqKSkpCisJCQlnb3RvIG91dDsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzZXJfc3RhY2ssCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIktWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiAiCisJCQkgICAgICAgIklsbGVnYWwgdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBzdGFja1xuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzdGFjayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3RhY2spIHsKKwkJCXIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2sodmNwdSwgc3RhY2spOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9zdGFjaywgc3RhY2ssCisJCQkJIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKQorCQkJZ290byBvdXQ7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0s6IHsKKwkJc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgX191c2VyICp1c2VyX3N0YWNrOworCSAgICAgICAgdm9pZCBfX3VzZXIgKmZpcnN0X3AgPSBhcmdwOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXJfc3RhY2ssIGZpcnN0X3AsIHNpemVvZih2b2lkICopKSkKKwkJCWdvdG8gb3V0OworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX3N0YWNrLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJLVk1fSUE2NF9WQ1BVX1NFVF9TVEFDSzogIgorCQkJICAgICAgICJJbGxlZ2FsIHVzZXIgYWRkcmVzcyBmb3Igc3RhY2tcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YWNrKSB7CisJCQlyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihzdGFjaywgdXNlcl9zdGFjaywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkKKwkJCWdvdG8gb3V0OworCisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayh2Y3B1LCBzdGFjayk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXIgPSAtRUlOVkFMOworCX0KKworb3V0OgorCWtmcmVlKHN0YWNrKTsKKwlyZXR1cm4gcjsKIH0KIAogaW50IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTE0NjgsNyArMTU3NSw3IEBACiB9CiAKIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAotCQl1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTE3MzMsNyArMTg0MCw3IEBACiAJc3RydWN0IGt2bV92Y3B1ICpsdmNwdSA9IGt2bS0+dmNwdXNbMF07CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoIWt2bS0+dmNwdXNbaV0pCiAJCQljb250aW51ZTsKIAkJaWYgKGx2Y3B1LT5hcmNoLnh0cCA+IGt2bS0+dmNwdXNbaV0tPmFyY2gueHRwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYyBiL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMKaW5kZXggY2I3NjAwYi4uYThhZTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jCkBAIC0yMjcsNiArMjI3LDE4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3JlZ2lzdGVyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3JlZ2lzdGVyX2luZm8oaW4xLCAmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9jYWNoZV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIApAQCAtMjY4LDggKzI4MCwxMiBAQAogc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3ZtX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgaW4wLCBpbjEsIGluMiwgaW4zOwogCi0JSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisKKwlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfdm1faW5mbyhpbjEsIGluMiwKKwkJCShwYWxfdGNfaW5mb191X3QgKikmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yOTIsNiArMzA4LDEwOCBAQAogCXZjcHUtPmFyY2gudGltZXJfZmlyZWQgPSAwOwogfQogCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfcGVyZl9tb25faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjMsIHI5OworCXVuc2lnbmVkIGxvbmcgcG1fYnVmZmVyWzE2XTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlzdGF0dXMgPSBpYTY0X3BhbF9wZXJmX21vbl9pbmZvKHBtX2J1ZmZlciwKKwkJCQkocGFsX3BlcmZfbW9uX2luZm9fdV90ICopICZyOSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHIlBBTF9QRVJGX01PTl9JTkZPIGZhaWxzIHJldD0lbGRcbiIsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKGluMSkKKwkJCW1lbWNweSgodm9pZCAqKWluMSwgcG1fYnVmZmVyLCBzaXplb2YocG1fYnVmZmVyKSk7CisJCWVsc2UgeworCQkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIkludmFsaWQgcGFyYW1ldGVycyAiCisJCQkJCQkiZm9yIFBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwkJfQorCX0KKwlyZXR1cm4gKHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwpe3N0YXR1cywgcjksIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfaGFsdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHJlcyA9IDEwMDBVTCB8ICgxMDAwVUwgPDwgMTYpIHwgKDEwVUwgPDwgMzIpCisJCQkJCXwgKDFVTCA8PCA2MSkgfCAoMVVMIDw8IDYwKTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlpZiAoaW4xKSB7CisJCW1lbWNweSgodm9pZCAqKWluMSwgJnJlcywgc2l6ZW9mKHJlcykpOworCQlzdGF0dXMgPSAwOworCX0gZWxzZXsKKwkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkciSW52YWxpZCBwYXJhbWV0ZXJzICIKKwkJCQkJImZvciBQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJfQorCisJcmV0dXJuIChzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsKXtzdGF0dXMsIDAsIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfbWVtX2F0dHJpYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyByOTsKKwlsb25nIHN0YXR1czsKKworCXN0YXR1cyA9IGlhNjRfcGFsX21lbV9hdHRyaWIoJnI5KTsKKworCXJldHVybiAoc3RydWN0IGlhNjRfcGFsX3JldHZhbCl7c3RhdHVzLCByOSwgMCwgMH07Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZV9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2b2lkICp2KQoreworCXM2NCB0cmFuc190eXBlID0gKHM2NCl2OworCWlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodHJhbnNfdHlwZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9wcmVmZXRjaF92aXNpYmlsaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoaW4xKTsKKwlpZiAocmVzdWx0LnN0YXR1cyA9PSAwKSB7CisJCS8qIE11c3QgYmUgcGVyZm9ybWVkIG9uIGFsbCByZW1vdGUgcHJvY2Vzc29ycworCQlpbiB0aGUgY29oZXJlbmNlIGRvbWFpbi4gKi8KKwkJc21wX2NhbGxfZnVuY3Rpb24ocmVtb3RlX3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5LAorCQkJCQkodm9pZCAqKWluMSwgMSk7CisJCS8qIFVubmVjZXNzYXJ5IG9uIHJlbW90ZSBwcm9jZXNzb3IgZm9yIG90aGVyIHZjcHVzISovCisJCXJlc3VsdC5zdGF0dXMgPSAxOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfcGFsX21jX2RyYWluKHZvaWQgKnYpCit7CisJaWE2NF9wYWxfbWNfZHJhaW4oKTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX2dldF9icmFuZF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKworCWlmIChpbjEgPT0gMCAmJiBpbjIpIHsKKwkJY2hhciBicmFuZF9pbmZvWzEyOF07CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9nZXRfYnJhbmRfaW5mbyhicmFuZF9pbmZvKTsKKwkJaWYgKHJlc3VsdC5zdGF0dXMgPT0gUEFMX1NUQVRVU19TVUNDRVNTKQorCQkJbWVtY3B5KCh2b2lkICopaW4yLCBicmFuZF9pbmZvLCAxMjgpOworCX0gZWxzZSB7CisJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1JFUVVJUkVTX01FTU9SWTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyJJbnZhbGlkIHBhcmFtZXRlcnMgZm9yICIKKwkJCQkJIlBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBpbnQga3ZtX3BhbF9lbXVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bikKIHsKIApAQCAtMzAwLDE0ICs0MTgsMjIgQEAKIAlpbnQgcmV0ID0gMTsKIAogCWdyMjggPSBrdm1fZ2V0X3BhbF9jYWxsX2luZGV4KHZjcHUpOwotCS8qcHJpbnRrKCJwYWxfY2FsbCBpbmRleDolbHhcbiIsZ3IyOCk7Ki8KIAlzd2l0Y2ggKGdyMjgpIHsKIAljYXNlIFBBTF9DQUNIRV9GTFVTSDoKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX2ZsdXNoKHZjcHUpOwogCQlicmVhazsKKwljYXNlIFBBTF9NRU1fQVRUUklCOgorCQlyZXN1bHQgPSBwYWxfbWVtX2F0dHJpYih2Y3B1KTsKKwkJYnJlYWs7CiAJY2FzZSBQQUxfQ0FDSEVfU1VNTUFSWToKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX3N1bW1hcnkodmNwdSk7CiAJCWJyZWFrOworCWNhc2UgUEFMX1BFUkZfTU9OX0lORk86CisJCXJlc3VsdCA9IHBhbF9wZXJmX21vbl9pbmZvKHZjcHUpOworCQlicmVhazsKKwljYXNlIFBBTF9IQUxUX0lORk86CisJCXJlc3VsdCA9IHBhbF9oYWx0X2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX0hBTFRfTElHSFQ6CiAJewogCQlJTklUX1BBTF9TVEFUVVNfU1VDQ0VTUyhyZXN1bHQpOwpAQCAtMzE3LDYgKzQ0MywxNiBAQAogCX0KIAkJYnJlYWs7CiAKKwljYXNlIFBBTF9QUkVGRVRDSF9WSVNJQklMSVRZOgorCQlyZXN1bHQgPSBwYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfTUNfRFJBSU46CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9tY19kcmFpbigpOworCQkvKiBGSVhNRTogQWxsIHZjcHVzIGxpa2VseSBjYWxsIFBBTF9NQ19EUkFJTi4KKwkJICAgVGhhdCBjYXVzZXMgdGhlIGNvbmdlc3Rpb24uICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlbW90ZV9wYWxfbWNfZHJhaW4sIE5VTEwsIDEpOworCQlicmVhazsKKwogCWNhc2UgUEFMX0ZSRVFfUkFUSU9TOgogCQlyZXN1bHQgPSBwYWxfZnJlcV9yYXRpb3ModmNwdSk7CiAJCWJyZWFrOwpAQCAtMzQ2LDYgKzQ4Miw5IEBACiAJCUlOSVRfUEFMX1NUQVRVU19TVUNDRVNTKHJlc3VsdCk7CiAJCXJlc3VsdC52MSA9ICgxTCA8PCAzMikgfCAxTDsKIAkJYnJlYWs7CisJY2FzZSBQQUxfUkVHSVNURVJfSU5GTzoKKwkJcmVzdWx0ID0gcGFsX3JlZ2lzdGVyX2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX1ZNX1BBR0VfU0laRToKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZtX3BhZ2Vfc2l6ZSgmcmVzdWx0LnYwLAogCQkJCQkJCSZyZXN1bHQudjEpOwpAQCAtMzY1LDEyICs1MDQsMTggQEAKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZlcnNpb24oCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjAsCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjEpOwotCiAJCWJyZWFrOwogCWNhc2UgUEFMX0ZJWEVEX0FERFI6CiAJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1NVQ0NFU1M7CiAJCXJlc3VsdC52MCA9IHZjcHUtPnZjcHVfaWQ7CiAJCWJyZWFrOworCWNhc2UgUEFMX0JSQU5EX0lORk86CisJCXJlc3VsdCA9IHBhbF9nZXRfYnJhbmRfaW5mbyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfR0VUX1BTVEFURToKKwljYXNlIFBBTF9DQUNIRV9TSEFSRURfSU5GTzoKKwkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyJrdm06IFVuc3VwcG9ydGVkIHBhbCBjYWxsLCIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKaW5kZXggNTUyZDA3Ny4uYjFkYzgwOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKQEAgLTE2Nyw3ICsxNjcsNiBAQAogCXJldHVybiAocnIxLnZhbCk7CiB9CiAKLQogLyoKICAqIFNldCB2SUZBICYgdklUSVIgJiB2SUhBLCB3aGVuIHZQU1IuaWMgPTEKICAqIFBhcmFtZXRlcjoKQEAgLTIyMiw4ICsyMjEsNiBAQAogCWluamVjdF9ndWVzdF9pbnRlcnJ1cHRpb24odmNwdSwgSUE2NF9JTlNUX1RMQl9WRUNUT1IpOwogfQogCi0KLQogLyoKICAqIERhdGEgTmVzdGVkIFRMQiBGYXVsdAogICogIEAgRGF0YSBOZXN0ZWQgVExCIFZlY3RvcgpAQCAtMjQ1LDcgKzI0Miw2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X0FMVF9EQVRBX1RMQl9WRUNUT1IpOwogfQogCi0KIC8qCiAgKiBEYXRhIFRMQiBGYXVsdAogICogIEAgRGF0YSBUTEIgdmVjdG9yCkBAIC0yNjUsOCArMjYxLDYgQEAKIAkvKiBJZiB2UFNSLmljLCBJRkEsIElUSVIsIElIQSovCiAJc2V0X2lmYV9pdGlyX2loYSh2Y3B1LCB2YWRyLCAxLCAxLCAxKTsKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfVkhQVF9UUkFOU19WRUNUT1IpOwotCi0KIH0KIAogLyoKQEAgLTI3OSw3ICsyNzMsNiBAQAogCV92aHB0X2ZhdWx0KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qCiAgKiBWSFBUIERhdGEgRmF1bHQKICAqICBAIFZIUFQgVHJhbnNsYXRpb24gdmVjdG9yCkBAIC0yOTAsOCArMjgzLDYgQEAKIAlfdmhwdF9mYXVsdCh2Y3B1LCB2YWRyKTsKIH0KIAotCi0KIC8qCiAgKiBEZWFsIHdpdGg6CiAgKiAgR2VuZXJhbCBFeGNlcHRpb24gdmVjdG9yCkBAIC0zMDEsNyArMjkyLDYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfR0VORVhfVkVDVE9SKTsKIH0KIAotCiAvKgogICogSWxsZWdhbCBPcGVyYXRpb24gRmF1bHQKICAqICBAIEdlbmVyYWwgRXhjZXB0aW9uIFZlY3RvcgpAQCAtNDE5LDE5ICs0MDksMTYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfUEFHRV9OT1RfUFJFU0VOVF9WRUNUT1IpOwogfQogCi0KIHZvaWQgZGF0YV9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIHZvaWQgaW5zdF9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qIERlYWwgd2l0aAogICogIERhdGEgYWNjZXNzIHJpZ2h0cyB2ZWN0b3IKICAqLwpAQCAtNDU1LDEzICs0NDIsMTggQEAKIAlpZiAoIXZtbV9mcHN3YV9pbnRlcmZhY2UpCiAJCXJldHVybiAoZnBzd2FfcmV0X3QpIHstMSwgMCwgMCwgMH07CiAKLQkvKgotCSAqIEp1c3QgbGV0IGZwc3dhIGRyaXZlciB0byB1c2UgaGFyZHdhcmUgZnAgcmVnaXN0ZXJzLgotCSAqIE5vIGZwIHJlZ2lzdGVyIGlzIHZhbGlkIGluIG1lbW9yeS4KLQkgKi8KIAltZW1zZXQoJmZwX3N0YXRlLCAwLCBzaXplb2YoZnBfc3RhdGVfdCkpOwogCiAJLyoKKwkgKiBjb21wdXRlIGZwX3N0YXRlLiAgb25seSBGUCByZWdpc3RlcnMgZjYgLSBmMTEgYXJlIHVzZWQgYnkgdGhlCisJICogdm1tLCBzbyBzZXQgdGhvc2UgYml0cyBpbiB0aGUgbWFzayBhbmQgc2V0IHRoZSBsb3cgdm9sYXRpbGUKKwkgKiBwb2ludGVyIHRvIHBvaW50IHRvIHRoZXNlIHJlZ2lzdGVycy4KKwkgKi8KKwlmcF9zdGF0ZS5iaXRtYXNrX2xvdzY0ID0gMHhmYzA7ICAvKiBiaXQ2Li5iaXQxMSAqLworCisJZnBfc3RhdGUuZnBfc3RhdGVfbG93X3ZvbGF0aWxlID0gKGZwX3N0YXRlX2xvd192b2xhdGlsZV90ICopICZyZWdzLT5mNjsKKworICAgLyoKIAkgKiB1bnNpZ25lZCBsb25nICgqRUZJX0ZQU1dBKSAoCiAJICogICAgICB1bnNpZ25lZCBsb25nICAgIHRyYXBfdHlwZSwKIAkgKiAgICAgIHZvaWQgICAgICAgICAgICAgKkJ1bmRsZSwKQEAgLTU0NSwxMCArNTM3LDYgQEAKIAkJc3RhdHVzID0gdm1tX2hhbmRsZV9mcHVfc3dhKDAsIHJlZ3MsIGlzcik7CiAJCWlmICghc3RhdHVzKQogCQkJcmV0dXJuIDsKLQkJZWxzZSBpZiAoLUVBR0FJTiA9PSBzdGF0dXMpIHsKLQkJCXZjcHVfZGVjcmVtZW50X2lpcCh2Y3B1KTsKLQkJCXJldHVybiA7Ci0JCX0KIAkJYnJlYWs7CiAJfQogCkBAIC01NjIsMjIgKzU1MCw2NCBAQAogCWluamVjdF9ndWVzdF9pbnRlcnJ1cHRpb24odmNwdSwgdmVjdG9yKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3RyYW5zX3BhbF9jYWxsX2FyZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHRoYXNoX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBncGEsIHBvZmY7CisKKwlpZiAoIWlzX3BoeXNpY2FsX21vZGUodmNwdSkpIHsKKwkJLyogRGVwZW5kcyBvbiBjYWxsZXIgdG8gcHJvdmlkZSB0aGUgRFRSIG9yIERUQyBtYXBwaW5nLiovCisJCWRhdGEgPSB2dGxiX2xvb2t1cCh2Y3B1LCBhcmcsIERfVExCKTsKKwkJaWYgKGRhdGEpCisJCQlncGEgPSBkYXRhLT5wYWdlX2ZsYWdzICYgX1BBR0VfUFBOX01BU0s7CisJCWVsc2UgeworCQkJZGF0YSA9IHZocHRfbG9va3VwKGFyZyk7CisJCQlpZiAoIWRhdGEpCisJCQkJcmV0dXJuIDA7CisJCQlncGEgPSBkYXRhLT5ncGFkZHIgJiBfUEFHRV9QUE5fTUFTSzsKKwkJfQorCisJCXBvZmYgPSBhcmcgJiAoUFNJWkUoZGF0YS0+cHMpIC0gMSk7CisJCWFyZyA9IFBBR0VBTElHTihncGEsIGRhdGEtPnBzKSB8IHBvZmY7CisJfQorCWFyZyA9IGt2bV9ncGFfdG9fbXBhKGFyZyA8PCAxID4+IDEpOworCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKV9fdmEoYXJnKTsKK30KKwogc3RhdGljIHZvaWQgc2V0X3BhbF9jYWxsX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBleGl0X2N0bF9kYXRhICpwID0gJnZjcHUtPmFyY2guZXhpdF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZ3IyOCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI4KTsKKwl1bnNpZ25lZCBsb25nIGdyMjkgPSB2Y3B1X2dldF9ncih2Y3B1LCAyOSk7CisJdW5zaWduZWQgbG9uZyBncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOwogCiAJLypGSVhNRTpGb3Igc3RhdGljIGFuZCBzdGFja2VkIGNvbnZlbnRpb24sIGZpcm13YXJlCiAJICogaGFzIHB1dCB0aGUgcGFyYW1ldGVycyBpbiBncjI4LWdyMzEgYmVmb3JlCiAJICogYnJlYWsgdG8gdm1tICAhISovCiAKLQlwLT51LnBhbF9kYXRhLmdyMjggPSB2Y3B1X2dldF9ncih2Y3B1LCAyOCk7Ci0JcC0+dS5wYWxfZGF0YS5ncjI5ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjkpOwotCXAtPnUucGFsX2RhdGEuZ3IzMCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMwKTsKKwlzd2l0Y2ggKGdyMjgpIHsKKwljYXNlIFBBTF9QRVJGX01PTl9JTkZPOgorCWNhc2UgUEFMX0hBTFRfSU5GTzoKKwkJcC0+dS5wYWxfZGF0YS5ncjI5ID0gIGt2bV90cmFuc19wYWxfY2FsbF9hcmdzKHZjcHUsIGdyMjkpOworCQlwLT51LnBhbF9kYXRhLmdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CisJCWJyZWFrOworCWNhc2UgUEFMX0JSQU5EX0lORk86CisJCXAtPnUucGFsX2RhdGEuZ3IyOSA9IGdyMjk7OworCQlwLT51LnBhbF9kYXRhLmdyMzAgPSBrdm1fdHJhbnNfcGFsX2NhbGxfYXJncyh2Y3B1LCBncjMwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcC0+dS5wYWxfZGF0YS5ncjI5ID0gZ3IyOTs7CisJCXAtPnUucGFsX2RhdGEuZ3IzMCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMwKTsKKwl9CisJcC0+dS5wYWxfZGF0YS5ncjI4ID0gZ3IyODsKIAlwLT51LnBhbF9kYXRhLmdyMzEgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMSk7CisKIAlwLT5leGl0X3JlYXNvbiA9IEVYSVRfUkVBU09OX1BBTF9DQUxMOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfcGFsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyB2b2lkIGdldF9wYWxfY2FsbF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBleGl0X2N0bF9kYXRhICpwID0gJnZjcHUtPmFyY2guZXhpdF9kYXRhOwogCkBAIC02MDUsNyArNjM1LDcgQEAKIAlwLT5leGl0X3JlYXNvbiA9IEVYSVRfUkVBU09OX1NBTF9DQUxMOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc2FsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyB2b2lkIGdldF9zYWxfY2FsbF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBleGl0X2N0bF9kYXRhICpwID0gJnZjcHUtPmFyY2guZXhpdF9kYXRhOwogCkBAIC02MjgsMTMgKzY1OCwxMyBAQAogCQlpZiAoaWltID09IERPTU5fUEFMX1JFUVVFU1QpIHsKIAkJCXNldF9wYWxfY2FsbF9kYXRhKHYpOwogCQkJdm1tX3RyYW5zaXRpb24odik7Ci0JCQlzZXRfcGFsX2NhbGxfcmVzdWx0KHYpOworCQkJZ2V0X3BhbF9jYWxsX3Jlc3VsdCh2KTsKIAkJCXZjcHVfaW5jcmVtZW50X2lpcCh2KTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIGlmIChpaW0gPT0gRE9NTl9TQUxfUkVRVUVTVCkgewogCQkJc2V0X3NhbF9jYWxsX2RhdGEodik7CiAJCQl2bW1fdHJhbnNpdGlvbih2KTsKLQkJCXNldF9zYWxfY2FsbF9yZXN1bHQodik7CisJCQlnZXRfc2FsX2NhbGxfcmVzdWx0KHYpOwogCQkJdmNwdV9pbmNyZW1lbnRfaWlwKHYpOwogCQkJcmV0dXJuOwogCQl9CkBAIC03MDIsNyArNzMyLDYgQEAKIAl9CiB9CiAKLQogdm9pZCBsZWF2ZV9oeXBlcnZpc29yX3RhaWwodm9pZCkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnYgPSBjdXJyZW50X3ZjcHU7CkBAIC03MzYsNyArNzY1LDYgQEAKIAl9CiB9CiAKLQogc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9sZHMoc3RydWN0IGt2bV9wdF9yZWdzICpyZWdzKQogewogCXJlZ3MtPmNyX2lwc3IgfD0gSUE2NF9QU1JfRUQ7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZjcHUuYyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5jCmluZGV4IGVjZDUyNmIuLmQ0ZDI4MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdmNwdS5jCisrKyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5jCkBAIC0xMTIsNyArMTEyLDYgQEAKIAlyZXR1cm47CiB9CiAKLQogdm9pZCBzd2l0Y2hfdG9fdmlydHVhbF9yaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgcHNyOwpAQCAtMTY2LDggKzE2NSw2IEBACiAJcmV0dXJuOwogfQogCi0KLQogLyoKICAqIEluIHBoeXNpY2FsIG1vZGUsIGluc2VydCB0Yy90ciBmb3IgcmVnaW9uIDAgYW5kIDQgdXNlcwogICogUklEWzBdIGFuZCBSSURbNF0gd2hpY2ggaXMgZm9yIHBoeXNpY2FsIG1vZGUgZW11bGF0aW9uLgpAQCAtMjY5LDcgKzI2Niw2IEBACiAJcmV0dXJuIHJvdGF0ZV9yZWcoOTYsIHJyYl9mciwgKHJlZ251bSAtIElBNjRfRklSU1RfUk9UQVRJTkdfRlIpKTsKIH0KIAotCiAvKgogICogVGhlIGludmVyc2Ugb2YgdGhlIGFib3ZlOiBnaXZlbiBic3BzdG9yZSBhbmQgdGhlIG51bWJlciBvZgogICogcmVnaXN0ZXJzLCBjYWxjdWxhdGUgYXIuYnNwLgpAQCAtODExLDEyICs4MDcsMTUgQEAKIHN0YXRpYyB2b2lkIHZjcHVfc2V0X2l0YyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2OworCXN0cnVjdCBrdm0gKmt2bTsKIAlpbnQgaTsKIAlsb25nIGl0Y19vZmZzZXQgPSB2YWwgLSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfSVRDKTsKIAl1bnNpZ25lZCBsb25nIHZpdHYgPSBWQ1BVKHZjcHUsIGl0dik7CiAKKwlrdm0gPSAoc3RydWN0IGt2bSAqKUtWTV9WTV9CQVNFOworCiAJaWYgKHZjcHUtPnZjcHVfaWQgPT0gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJCXYgPSAoc3RydWN0IGt2bV92Y3B1ICopKChjaGFyICopdmNwdSArCiAJCQkJCXNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHVfZGF0YSkgKiBpKTsKIAkJCVZNWCh2LCBpdGNfb2Zmc2V0KSA9IGl0Y19vZmZzZXQ7CkBAIC0xMDM5LDggKzEwMzgsNiBAQAogCXJldHVybiBrZXk7CiB9CiAKLQotCiB2b2lkIGt2bV90aGFzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgdGhhc2gsIHZhZHI7CkBAIC0xMDUwLDcgKzEwNDcsNiBAQAogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTQ2LnIxLCB0aGFzaCwgMCk7CiB9CiAKLQogdm9pZCBrdm1fdHRhZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgdGFnLCB2YWRyOwpAQCAtMTEzMSw3ICsxMTI3LDYgQEAKIAlyZXR1cm4gSUE2NF9OT19GQVVMVDsKIH0KIAotCiBpbnQga3ZtX3RwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjEsIHIzOwpAQCAtMTE1NCw3ICsxMTQ5LDYgQEAKIAl2Y3B1X3NldF9ncih2Y3B1LCBpbnN0Lk00Ni5yMSwgcjEsIDApOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEluc2VydC9QdXJnZSB0cmFuc2xhdGlvbiByZWdpc3Rlci9jYWNoZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEzODUsNyArMTM3OSw2IEBACiAJdmNwdV9zZXRfaXRjKHZjcHUsIHIyKTsKIH0KIAotCiB2b2lkIGt2bV9tb3ZfZnJvbV9hcl9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHIxOwpAQCAtMTM5Myw4ICsxMzg2LDkgQEAKIAlyMSA9IHZjcHVfZ2V0X2l0Yyh2Y3B1KTsKIAl2Y3B1X3NldF9ncih2Y3B1LCBpbnN0Lk0zMS5yMSwgcjEsIDApOwogfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgc3RydWN0IGt2bV92Y3B1KnByb3RlY3Rpb24ga2V5IHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcworICBzdHJ1Y3Qga3ZtX3ZjcHUgcHJvdGVjdGlvbiBrZXkgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHVuc2lnbmVkIGxvbmcgdmNwdV9nZXRfcGtyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZWcpCkBAIC0xNDA3LDIwICsxNDAxLDYgQEAKIAlpYTY0X3NldF9wa3IocmVnLCB2YWwpOwogfQogCi0KLXVuc2lnbmVkIGxvbmcgdmNwdV9nZXRfaXRpcl9vbl9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgaWZhKQotewotCXVuaW9uIGlhNjRfcnIgcnIsIHJyMTsKLQotCXJyLnZhbCA9IHZjcHVfZ2V0X3JyKHZjcHUsIGlmYSk7Ci0JcnIxLnZhbCA9IDA7Ci0JcnIxLnBzID0gcnIucHM7Ci0JcnIxLnJpZCA9IHJyLnJpZDsKLQlyZXR1cm4gKHJyMS52YWwpOwotfQotCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNb3ZlcyB0byBwcml2aWxlZ2VkIHJlZ2lzdGVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTQ2NCw4ICsxNDQ0LDYgQEAKIAlyZXR1cm4gKElBNjRfTk9fRkFVTFQpOwogfQogCi0KLQogdm9pZCBrdm1fbW92X3RvX3JyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMywgcjI7CkBAIC0xNTEwLDggKzE0ODgsNiBAQAogCXZjcHVfc2V0X3Brcih2Y3B1LCByMywgcjIpOwogfQogCi0KLQogdm9pZCBrdm1fbW92X2Zyb21fcnIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHIzLCByMTsKQEAgLTE1NTcsNyArMTUzMyw2IEBACiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NNDMucjEsIHIxLCAwKTsKIH0KIAotCiB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZWcpCiB7CiAJLyogRklYTUU6IFRoaXMgY291bGQgZ2V0IGNhbGxlZCBhcyBhIHJlc3VsdCBvZiBhIHJzdmQtcmVnIGZhdWx0ICovCkBAIC0xNjA5LDcgKzE1ODQsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHVuc2lnbmVkIGxvbmcga3ZtX21vdl9mcm9tX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyB0Z3QgPSBpbnN0Lk0zMy5yMTsKQEAgLTE2MzMsOCArMTYwNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCiB2b2lkIHZjcHVfc2V0X3BzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdmFsKQogewogCkBAIC0xNzc2LDkgKzE3NDgsNiBAQAogCX0KIH0KIAotCi0KLQogdm9pZCB2Y3B1X3JmaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBpZnMsIHBzcjsKQEAgLTE3OTYsNyArMTc2NSw2IEBACiAJcmVncy0+Y3JfaWlwID0gVkNQVSh2Y3B1LCBpaXApOwogfQogCi0KIC8qCiAgICBWUFNSIGNhbid0IGtlZXAgdHJhY2sgb2YgYmVsb3cgYml0cyBvZiBndWVzdCBQU1IKICAgIFRoaXMgZnVuY3Rpb24gZ2V0cyBndWVzdCBQU1IKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdmNwdS5oIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmgKaW5kZXggYjJmMTJhNS4uMDQyYWY5MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92Y3B1LmgKKysrIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmgKQEAgLTcwMyw3ICs3MDMsNyBAQAogZXh0ZXJuIHZvaWQgdGhhc2hfcHVyZ2VfZW50cmllcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCB2YSwgdTY0IHBzKTsKIGV4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2VudHJpZXNfcmVtb3RlKHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHZhLCB1NjQgcHMpOwogZXh0ZXJuIHU2NCB0cmFuc2xhdGVfcGh5X3B0ZSh1NjQgKnB0ZSwgdTY0IGl0aXIsIHU2NCB2YSk7Ci1leHRlcm4gaW50IHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLAorZXh0ZXJuIHZvaWQgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsCiAJCXU2NCBpdGlyLCB1NjQgaWZhLCBpbnQgdHlwZSk7CiBleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9hbGwoc3RydWN0IGt2bV92Y3B1ICp2KTsKIGV4dGVybiBzdHJ1Y3QgdGhhc2hfZGF0YSAqdnRsYl9sb29rdXAoc3RydWN0IGt2bV92Y3B1ICp2LApAQCAtNzM4LDcgKzczOCw3IEBACiB2b2lkIHRoYXNoX2luaXQoc3RydWN0IHRoYXNoX2NiICpoY2IsIHU2NCBzeik7CiAKIHZvaWQgcGFuaWNfdm0oc3RydWN0IGt2bV92Y3B1ICp2LCBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0KK3U2NCBrdm1fZ3BhX3RvX21wYSh1NjQgZ3BhKTsKIGV4dGVybiB1NjQgaWE2NF9jYWxsX3ZzYSh1NjQgcHJvYywgdTY0IGFyZzEsIHU2NCBhcmcyLCB1NjQgYXJnMywKIAkJdTY0IGFyZzQsIHU2NCBhcmc1LCB1NjQgYXJnNiwgdTY0IGFyZzcpOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCmluZGV4IDZiNjMwN2EuLjM4MjMyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jCisrKyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCkBAIC0xNjQsMTEgKzE2NCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgcHMsIGdwYWRkcjsKIAogCXBzID0gaXRpcl9wcyhpdGlyKTsKLQotCWdwYWRkciA9ICgoZ3B0ZSAmIF9QQUdFX1BQTl9NQVNLKSA+PiBwcyA8PCBwcykgfAotCQkoaWZhICYgKCgxVUwgPDwgcHMpIC0gMSkpOwotCiAJcnIudmFsID0gaWE2NF9nZXRfcnIoaWZhKTsKKworCSBncGFkZHIgPSAoKGdwdGUgJiBfUEFHRV9QUE5fTUFTSykgPj4gcHMgPDwgcHMpIHwKKwkJCQkJKGlmYSAmICgoMVVMIDw8IHBzKSAtIDEpKTsKKwogCWhlYWQgPSAoc3RydWN0IHRoYXNoX2RhdGEgKilpYTY0X3RoYXNoKGlmYSk7CiAJaGVhZC0+ZXRhZyA9IElOVkFMSURfVElfVEFHOwogCWlhNjRfbWYoKTsKQEAgLTQxMiwxNiArNDEyLDE0IEBACiAKIC8qCiAgKiBQdXJnZSBvdmVybGFwIFRDcyBhbmQgdGhlbiBpbnNlcnQgdGhlIG5ldyBlbnRyeSB0byBlbXVsYXRlIGl0YyBvcHMuCi0gKiAgICBOb3RlczogT25seSBUQyBlbnRyeSBjYW4gcHVyZ2UgYW5kIGluc2VydC4KLSAqICAgIDEgaW5kaWNhdGVzIHRoaXMgaXMgTU1JTworICogTm90ZXM6IE9ubHkgVEMgZW50cnkgY2FuIHB1cmdlIGFuZCBpbnNlcnQuCiAgKi8KLWludCB0aGFzaF9wdXJnZV9hbmRfaW5zZXJ0KHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHB0ZSwgdTY0IGl0aXIsCit2b2lkICB0aGFzaF9wdXJnZV9hbmRfaW5zZXJ0KHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHB0ZSwgdTY0IGl0aXIsCiAJCQkJCQl1NjQgaWZhLCBpbnQgdHlwZSkKIHsKIAl1NjQgcHM7CiAJdTY0IHBoeV9wdGUsIGlvX21hc2ssIGluZGV4OwogCXVuaW9uIGlhNjRfcnIgdnJyLCBtcnI7Ci0JaW50IHJldCA9IDA7CiAKIAlwcyA9IGl0aXJfcHMoaXRpcik7CiAJdnJyLnZhbCA9IHZjcHVfZ2V0X3JyKHYsIGlmYSk7CkBAIC00NDEsMjUgKzQzOSwxOSBAQAogCQlwaHlfcHRlICY9IH5fUEFHRV9NQV9NQVNLOwogCX0KIAotCWlmIChwdGUgJiBWVExCX1BURV9JTykKLQkJcmV0ID0gMTsKLQogCXZ0bGJfcHVyZ2UodiwgaWZhLCBwcyk7CiAJdmhwdF9wdXJnZSh2LCBpZmEsIHBzKTsKIAotCWlmIChwcyA9PSBtcnIucHMpIHsKLQkJaWYgKCEocHRlJlZUTEJfUFRFX0lPKSkgewotCQkJdmhwdF9pbnNlcnQocGh5X3B0ZSwgaXRpciwgaWZhLCBwdGUpOwotCQl9IGVsc2UgewotCQkJdnRsYl9pbnNlcnQodiwgcHRlLCBpdGlyLCBpZmEpOwotCQkJdmNwdV9xdWlja19yZWdpb25fc2V0KFZNWCh2LCB0Y19yZWdpb25zKSwgaWZhKTsKLQkJfQotCX0gZWxzZSBpZiAocHMgPiBtcnIucHMpIHsKKwlpZiAoKHBzICE9IG1yci5wcykgfHwgKHB0ZSAmIFZUTEJfUFRFX0lPKSkgewogCQl2dGxiX2luc2VydCh2LCBwdGUsIGl0aXIsIGlmYSk7CiAJCXZjcHVfcXVpY2tfcmVnaW9uX3NldChWTVgodiwgdGNfcmVnaW9ucyksIGlmYSk7Ci0JCWlmICghKHB0ZSZWVExCX1BURV9JTykpCi0JCQl2aHB0X2luc2VydChwaHlfcHRlLCBpdGlyLCBpZmEsIHB0ZSk7Ci0JfSBlbHNlIHsKKwl9CisJaWYgKHB0ZSAmIFZUTEJfUFRFX0lPKQorCQlyZXR1cm47CisKKwlpZiAocHMgPj0gbXJyLnBzKQorCQl2aHB0X2luc2VydChwaHlfcHRlLCBpdGlyLCBpZmEsIHB0ZSk7CisJZWxzZSB7CiAJCXU2NCBwc3I7CiAJCXBoeV9wdGUgICY9IH5QQUdFX0ZMQUdTX1JWX01BU0s7CiAJCXBzciA9IGlhNjRfY2xlYXJfaWMoKTsKQEAgLTQ2OSw3ICs0NjEsNiBAQAogCWlmICghKHB0ZSZWVExCX1BURV9JTykpCiAJCW1hcmtfcGFnZXNfZGlydHkodiwgcHRlLCBwcyk7CiAKLQlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNTA5LDcgKzUwMCw2IEBACiAJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwogfQogCi0KIC8qCiAgKiBMb29rdXAgdGhlIGhhc2ggdGFibGUgYW5kIGl0cyBjb2xsaXNpb24gY2hhaW4gdG8gZmluZCBhbiBlbnRyeQogICogY292ZXJpbmcgdGhpcyBhZGRyZXNzIHJpZDp2YSBvciB0aGUgZW50cnkuCkBAIC01MTcsNyArNTA3LDYgQEAKICAqIElOUFVUOgogICogIGluOiBUTEIgZm9ybWF0IGZvciBib3RoIFZIUFQgJiBUTEIuCiAgKi8KLQogc3RydWN0IHRoYXNoX2RhdGEgKnZ0bGJfbG9va3VwKHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHZhLCBpbnQgaXNfZGF0YSkKIHsKIAlzdHJ1Y3QgdGhhc2hfZGF0YSAgKmNjaDsKQEAgLTU0Nyw3ICs1MzYsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0KIC8qCiAgKiBJbml0aWFsaXplIGludGVybmFsIGNvbnRyb2wgZGF0YSBiZWZvcmUgc2VydmljZS4KICAqLwpAQCAtNTczLDYgKzU2MSwxMCBAQAogdTY0IGt2bV9nZXRfbXB0X2VudHJ5KHU2NCBncGZuKQogewogCXU2NCAqYmFzZSA9ICh1NjQgKikgS1ZNX1AyTV9CQVNFOworCisJaWYgKGdwZm4gPj0gKEtWTV9QMk1fU0laRSA+PiAzKSkKKwkJcGFuaWNfdm0oY3VycmVudF92Y3B1LCAiSW52YWxpZCBncGZuID0lbHhcbiIsIGdwZm4pOworCiAJcmV0dXJuICooYmFzZSArIGdwZm4pOwogfQogCkBAIC01ODksNyArNTgxLDYgQEAKIAlyZXR1cm4gKHB0ZSA+PiBQQUdFX1NISUZUIDw8IFBBR0VfU0hJRlQpIHwgKGdwYSAmIH5QQUdFX01BU0spOwogfQogCi0KIC8qCiAgKiBGZXRjaCBndWVzdCBidW5kbGUgY29kZS4KICAqIElOUFVUOgpAQCAtNjMxLDcgKzYyMiw2IEBACiAJcmV0dXJuIElBNjRfTk9fRkFVTFQ7CiB9CiAKLQogdm9pZCBrdm1faW5pdF92aHB0KHN0cnVjdCBrdm1fdmNwdSAqdikKIHsKIAl2LT5hcmNoLnZocHQubnVtID0gVkhQVF9OVU1fRU5UUklFUzsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9udW1hLmMgYi9hcmNoL2lhNjQvbW0vbnVtYS5jCmluZGV4IGI3M2JmMTguLjNlZmVhN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9udW1hLmMKKysrIGIvYXJjaC9pYTY0L21tL251bWEuYwpAQCAtNTgsNyArNTgsNyBAQAogICogU1BBUlNFTUVNIHRvIGFsbG9jYXRlIHRoZSBTUEFSU0VNRU0gc2VjdGlvbm1hcCBvbiB0aGUgTlVNQSBub2RlIHdoZXJlCiAgKiB0aGUgc2VjdGlvbiByZXNpZGVzLgogICovCi1pbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKK2ludCBfX21lbWluaXQgX19lYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQogewogCWludCBpLCBzZWN0aW9uID0gcGZuID4+IFBGTl9TRUNUSU9OX1NISUZULCBzc2VjLCBlc2VjOwogCkBAIC03MCw3ICs3MCw3IEBACiAJCQlyZXR1cm4gbm9kZV9tZW1ibGtbaV0ubmlkOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiAtMTsKIH0KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKaW5kZXggOTQ1NmQ0MC4uYzZkNmI2MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCkBAIC05Nyw5ICs5NywxMCBAQAogCQlyZXR1cm4gQlRFX1NVQ0NFU1M7CiAJfQogCi0JQlVHX09OKChsZW4gJiBMMV9DQUNIRV9NQVNLKSB8fAotCQkgKHNyYyAmIEwxX0NBQ0hFX01BU0spIHx8IChkZXN0ICYgTDFfQ0FDSEVfTUFTSykpOwotCUJVR19PTighKGxlbiA8ICgoQlRFX0xFTl9NQVNLICsgMSkgPDwgTDFfQ0FDSEVfU0hJRlQpKSk7CisJQlVHX09OKGxlbiAmIEwxX0NBQ0hFX01BU0spOworCUJVR19PTihzcmMgJiBMMV9DQUNIRV9NQVNLKTsKKwlCVUdfT04oZGVzdCAmIEwxX0NBQ0hFX01BU0spOworCUJVR19PTihsZW4gPiBCVEVfTUFYX1hGRVIpOwogCiAJLyoKIAkgKiBTdGFydCB3aXRoIGludGVyZmFjZSBjb3JyZXNwb25kaW5nIHRvIGNwdSBudW1iZXIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCmluZGV4IGU2MjZlNTAuLjA2MGRmNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYwpAQCAtMTM1LDExICsxMzUsMTAgQEAKIAlpZiAoU05fRE1BX0FERFJUWVBFKGRtYV9mbGFncykgPT0gU05fRE1BX0FERFJfUEhZUykKIAkJcGNpX2FkZHIgPSBJU19QSUNfU09GVChwY2lidXNfaW5mbykgPwogCQkJCVBIWVNfVE9fRE1BKHBhZGRyKSA6Ci0JCSAgICAJCVBIWVNfVE9fVElPRE1BKHBhZGRyKSB8IGRtYV9hdHRyaWJ1dGVzOworCQkJCVBIWVNfVE9fVElPRE1BKHBhZGRyKTsKIAllbHNlCi0JCXBjaV9hZGRyID0gSVNfUElDX1NPRlQocGNpYnVzX2luZm8pID8KLQkJCQlwYWRkciA6Ci0JCQkJcGFkZHIgfCBkbWFfYXR0cmlidXRlczsKKwkJcGNpX2FkZHIgPSBwYWRkcjsKKwlwY2lfYWRkciB8PSBkbWFfYXR0cmlidXRlczsKIAogCS8qIEhhbmRsZSBCdXMgbW9kZSAqLwogCWlmIChJU19QQ0lYKHBjaWJ1c19pbmZvKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vS2NvbmZpZyBiL2FyY2gvaWE2NC94ZW4vS2NvbmZpZwppbmRleCBmMTY4M2EyLi41MTVlMDgyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL0tjb25maWcKKysrIGIvYXJjaC9pYTY0L3hlbi9LY29uZmlnCkBAIC04LDggKzgsNyBAQAogCWRlcGVuZHMgb24gUEFSQVZJUlQgJiYgTUNLSU5MRVkgJiYgSUE2NF9QQUdFX1NJWkVfMTZLQiAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgWEVOX1hFTkNPTU0KIAlzZWxlY3QgTk9fSURMRV9IWgotCi0JIyB0aG9zZSBhcmUgcmVxdWlyZWQgdG8gc2F2ZS9yZXN0b3JlLgorCSMgZm9sbG93aW5ncyBhcmUgcmVxdWlyZWQgdG8gc2F2ZS9yZXN0b3JlLgogCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKIAlzZWxlY3QgU1VTUEVORAogCXNlbGVjdCBQTV9TTEVFUApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMgYi9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYwppbmRleCAwNGNkMTIzLi45MzZjZmYzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYworKysgYi9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJeGVuX3NldHVwX3ZjcHVfaW5mb19wbGFjZW1lbnQoKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pbml0X29wcyB4ZW5faW5pdF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW5pdF9vcHMgeGVuX2luaXRfb3BzIF9faW5pdGNvbnN0ID0gewogCS5iYW5uZXIgPSB4ZW5fYmFubmVyLAogCiAJLnJlc2VydmVfbWVtb3J5ID0geGVuX3Jlc2VydmVfbWVtb3J5LApAQCAtMzM3LDcgKzMzNyw3IEBACiAJSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9hcGljX3dyaXRlLCAmYXBpY19vcCk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW9zYXBpY19vcHMgeGVuX2lvc2FwaWNfb3BzIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2lvc2FwaWNfb3BzIHhlbl9pb3NhcGljX29wcyBfX2luaXRjb25zdCA9IHsKIAkucGNhdF9jb21wYXRfaW5pdCA9IHhlbl9wY2F0X2NvbXBhdF9pbml0LAogCS5fX2dldF9pcnFfY2hpcCA9IHhlbl9pb3NhcGljX2dldF9pcnFfY2hpcCwKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggMmFlYWU0Ni4uOGRmZDMxZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC00OSw3ICs0OSw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9NYWtlZmlsZSBiL2FyY2gvbTY4ay9NYWtlZmlsZQppbmRleCA4MTMzZGJjLi41NzBkODVjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL01ha2VmaWxlCkBAIC0xMTcsMyArMTE3LDYgQEAKIAogYXJjaGNsZWFuOgogCXJtIC1mIHZtbGludXguZ3ogdm1saW51eC5iejIKKworaW5zdGFsbDoKKwlzaCAkKHNyY3RyZWUpL2FyY2gvbTY4ay9pbnN0YWxsLnNoICQoS0VSTkVMUkVMRUFTRSkgdm1saW51eC5neiBTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwppbmRleCBkYmE0YWZhLi4zOTQ3OGRkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKQEAgLTE4Nyw4ICsxODcsOCBAQAogIglqYnJhCXJldF9mcm9tX2ludGVycnVwdFxuIgkJCQkJICAgXAogCSA6IDogImkiICgma3N0YXRfY3B1KDApLmlycXNbbis4XSksICJpIiAoJmlycV9oYW5kbGVyW24rOF0pLAkgICBcCiAJICAgICAibiIgKFBUX09GRl9TUiksICJuIiAobiksCQkJCQkgICBcCi0JICAgICAiaSIgKG4gJiA4ID8gKG4gJiAxNiA/ICZ0dF9tZnAuaW50X21rX2EgOiAmbWZwLmludF9ta19hKQkgICBcCi0JCSAgICAgICAgOiAobiAmIDE2ID8gJnR0X21mcC5pbnRfbWtfYiA6ICZtZnAuaW50X21rX2IpKSwJICAgXAorCSAgICAgImkiIChuICYgOCA/IChuICYgMTYgPyAmdHRfbWZwLmludF9ta19hIDogJnN0X21mcC5pbnRfbWtfYSkgICBcCisJCSAgICAgICAgOiAobiAmIDE2ID8gJnR0X21mcC5pbnRfbWtfYiA6ICZzdF9tZnAuaW50X21rX2IpKSwgXAogCSAgICAgIm0iIChwcmVlbXB0X2NvdW50KCkpLCAiZGkiIChIQVJESVJRX09GRlNFVCkJCSAgIFwKICk7CQkJCQkJCQkJICAgXAogCWZvciAoOzspOwkJCS8qIGZha2Ugbm9yZXR1cm4gKi8JCSAgIFwKQEAgLTM2NiwxNCArMzY2LDE0IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgTUZQKHMpICovCiAKICNpZmRlZiBBVEFSSV9VU0VfU09GVFdBUkVfRU9JCi0JbWZwLnZlY19hZHIgID0gMHg0ODsJLyogU29mdHdhcmUgRU9JLU1vZGUgKi8KKwlzdF9tZnAudmVjX2FkciAgPSAweDQ4OwkvKiBTb2Z0d2FyZSBFT0ktTW9kZSAqLwogI2Vsc2UKLQltZnAudmVjX2FkciAgPSAweDQwOwkvKiBBdXRvbWF0aWMgRU9JLU1vZGUgKi8KKwlzdF9tZnAudmVjX2FkciAgPSAweDQwOwkvKiBBdXRvbWF0aWMgRU9JLU1vZGUgKi8KICNlbmRpZgotCW1mcC5pbnRfZW5fYSA9IDB4MDA7CS8qIHR1cm4gb2ZmIE1GUC1JbnRzICovCi0JbWZwLmludF9lbl9iID0gMHgwMDsKLQltZnAuaW50X21rX2EgPSAweGZmOwkvKiBubyBNYXNraW5nICovCi0JbWZwLmludF9ta19iID0gMHhmZjsKKwlzdF9tZnAuaW50X2VuX2EgPSAweDAwOwkvKiB0dXJuIG9mZiBNRlAtSW50cyAqLworCXN0X21mcC5pbnRfZW5fYiA9IDB4MDA7CisJc3RfbWZwLmludF9ta19hID0gMHhmZjsJLyogbm8gTWFza2luZyAqLworCXN0X21mcC5pbnRfbWtfYiA9IDB4ZmY7CiAKIAlpZiAoQVRBUklIV19QUkVTRU5UKFRUX01GUCkpIHsKICNpZmRlZiBBVEFSSV9VU0VfU09GVFdBUkVfRU9JCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYwppbmRleCBhNWYzM2MwLi40YWRkOTZkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKQEAgLTYwOSwxMCArNjA5LDEwIEBACiAJCQkJIEFDSUFfUkhUSUQgOiAwKTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgaW50ZXJydXB0IGxpbmUgaXMgdXAgKi8KLQl9IHdoaWxlICgobWZwLnBhcl9kdF9yZWcgJiAweDEwKSA9PSAwKTsKKwl9IHdoaWxlICgoc3RfbWZwLnBhcl9kdF9yZWcgJiAweDEwKSA9PSAwKTsKIAogCS8qIGVuYWJsZSBBQ0lBIEludGVycnVwdHMgKi8KLQltZnAuYWN0aXZlX2VkZ2UgJj0gfjB4MTA7CisJc3RfbWZwLmFjdGl2ZV9lZGdlICY9IH4weDEwOwogCWF0YXJpX3R1cm5vbl9pcnEoSVJRX01GUF9BQ0lBKTsKIAogCWlrYmRfc2VsZl90ZXN0ID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCA0OWMyOGNkLi5hZTJkOTZlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkJCXByaW50aygiU1RORF9TSElGVEVSICIpOwogCQl9CiAJfQotCWlmIChod3JlZ19wcmVzZW50KCZtZnAucGFyX2R0X3JlZykpIHsKKwlpZiAoaHdyZWdfcHJlc2VudCgmc3RfbWZwLnBhcl9kdF9yZWcpKSB7CiAJCUFUQVJJSFdfU0VUKFNUX01GUCk7CiAJCXByaW50aygiU1RfTUZQICIpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jIGIvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMKaW5kZXggNzAyYjE1Yy4uMjhlZmRjMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMKQEAgLTM0LDkgKzM0LDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGF0YV9tZnBfb3V0KGNoYXIgYykKIHsKLQl3aGlsZSAoIShtZnAudHJuX3N0YXQgJiAweDgwKSkJLyogd2FpdCBmb3IgdHggYnVmIGVtcHR5ICovCisJd2hpbGUgKCEoc3RfbWZwLnRybl9zdGF0ICYgMHg4MCkpCS8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwogCQliYXJyaWVyKCk7Ci0JbWZwLnVzYXJ0X2R0YSA9IGM7CisJc3RfbWZwLnVzYXJ0X2R0YSA9IGM7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YXJpX21mcF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLApAQCAtOTEsNyArOTEsNyBAQAogCS8qIFRoaXMgYSBzb21lLXNlY29uZHMgdGltZW91dCBpbiBjYXNlIG5vIHByaW50ZXIgaXMgY29ubmVjdGVkICovCiAJdW5zaWduZWQgbG9uZyBpID0gbG9vcHNfcGVyX2ppZmZ5ID4gMSA/IGxvb3BzX3Blcl9qaWZmeSA6IDEwMDAwMDAwL0haOwogCi0Jd2hpbGUgKChtZnAucGFyX2R0X3JlZyAmIDEpICYmIC0taSkgLyogd2FpdCBmb3IgQlVTWSA9PSBMICovCisJd2hpbGUgKChzdF9tZnAucGFyX2R0X3JlZyAmIDEpICYmIC0taSkgLyogd2FpdCBmb3IgQlVTWSA9PSBMICovCiAJCTsKIAlpZiAoIWkpCiAJCXJldHVybiAwOwpAQCAtMTMxLDkgKzEzMSw5IEBACiAjaWYgMAogaW50IGF0YXJpX21mcF9jb25zb2xlX3dhaXRfa2V5KHN0cnVjdCBjb25zb2xlICpjbykKIHsKLQl3aGlsZSAoIShtZnAucmN2X3N0YXQgJiAweDgwKSkJLyogd2FpdCBmb3IgcnggYnVmIGZpbGxlZCAqLworCXdoaWxlICghKHN0X21mcC5yY3Zfc3RhdCAmIDB4ODApKQkvKiB3YWl0IGZvciByeCBidWYgZmlsbGVkICovCiAJCWJhcnJpZXIoKTsKLQlyZXR1cm4gbWZwLnVzYXJ0X2R0YTsKKwlyZXR1cm4gc3RfbWZwLnVzYXJ0X2R0YTsKIH0KIAogaW50IGF0YXJpX3NjY19jb25zb2xlX3dhaXRfa2V5KHN0cnVjdCBjb25zb2xlICpjbykKQEAgLTE3NSwxMiArMTc1LDEyIEBACiAJCWJhdWQgPSBCOTYwMDsJCS8qIHVzZSBkZWZhdWx0IDk2MDBicHMgZm9yIG5vbi1pbXBsZW1lbnRlZCByYXRlcyAqLwogCWJhdWQgLT0gQjEyMDA7CQkJLyogYmF1ZF90YWJsZVtdIHN0YXJ0cyBhdCAxMjAwYnBzICovCiAKLQltZnAudHJuX3N0YXQgJj0gfjB4MDE7CQkvKiBkaXNhYmxlIFRYICovCi0JbWZwLnVzYXJ0X2N0ciA9IHBhcml0eSB8IGNzaXplIHwgMHg4ODsgLyogMToxNiBjbGsgbW9kZSwgMSBzdG9wIGJpdCAqLwotCW1mcC50aW1fY3RfY2QgJj0gMHg3MDsJCS8qIHN0b3AgdGltZXIgRCAqLwotCW1mcC50aW1fZHRfZCA9IGJhdWRfdGFibGVbYmF1ZF07Ci0JbWZwLnRpbV9jdF9jZCB8PSAweDAxOwkJLyogc3RhcnQgdGltZXIgRCwgMTo0ICovCi0JbWZwLnRybl9zdGF0IHw9IDB4MDE7CQkvKiBlbmFibGUgVFggKi8KKwlzdF9tZnAudHJuX3N0YXQgJj0gfjB4MDE7CS8qIGRpc2FibGUgVFggKi8KKwlzdF9tZnAudXNhcnRfY3RyID0gcGFyaXR5IHwgY3NpemUgfCAweDg4OyAvKiAxOjE2IGNsayBtb2RlLCAxIHN0b3AgYml0ICovCisJc3RfbWZwLnRpbV9jdF9jZCAmPSAweDcwOwkvKiBzdG9wIHRpbWVyIEQgKi8KKwlzdF9tZnAudGltX2R0X2QgPSBiYXVkX3RhYmxlW2JhdWRdOworCXN0X21mcC50aW1fY3RfY2QgfD0gMHgwMTsJLyogc3RhcnQgdGltZXIgRCwgMTo0ICovCisJc3RfbWZwLnRybl9zdGF0IHw9IDB4MDE7CS8qIGVuYWJsZSBUWCAqLwogfQogCiAjZGVmaW5lIFNDQ19XUklURShyZWcsIHZhbCkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYyBiL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMKaW5kZXggZDA3NmZmOC4uYTA1MzFmMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYworKysgYi9hcmNoL202OGsvYXRhcmkvdGltZS5jCkBAIC0yNyw5ICsyNyw5IEBACiBhdGFyaV9zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgdGltZXJfcm91dGluZSkKIHsKICAgICAvKiBzZXQgVGltZXIgQyBkYXRhIFJlZ2lzdGVyICovCi0gICAgbWZwLnRpbV9kdF9jID0gSU5UX1RJQ0tTOworICAgIHN0X21mcC50aW1fZHRfYyA9IElOVF9USUNLUzsKICAgICAvKiBzdGFydCB0aW1lciBDLCBkaXYgPSAxOjEwMCAqLwotICAgIG1mcC50aW1fY3RfY2QgPSAobWZwLnRpbV9jdF9jZCAmIDE1KSB8IDB4NjA7CisgICAgc3RfbWZwLnRpbV9jdF9jZCA9IChzdF9tZnAudGltX2N0X2NkICYgMTUpIHwgMHg2MDsKICAgICAvKiBpbnN0YWxsIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIE1GUCBUaW1lciBDICovCiAgICAgaWYgKHJlcXVlc3RfaXJxKElSUV9NRlBfVElNQywgdGltZXJfcm91dGluZSwgSVJRX1RZUEVfU0xPVywKIAkJICAgICJ0aW1lciIsIHRpbWVyX3JvdXRpbmUpKQpAQCAtNDYsMTEgKzQ2LDExIEBACiAgIHVuc2lnbmVkIGxvbmcgdGlja3MsIG9mZnNldCA9IDA7CiAKICAgLyogcmVhZCBNRlAgdGltZXIgQyBjdXJyZW50IHZhbHVlICovCi0gIHRpY2tzID0gbWZwLnRpbV9kdF9jOworICB0aWNrcyA9IHN0X21mcC50aW1fZHRfYzsKICAgLyogVGhlIHByb2JhYmlsaXR5IG9mIHVuZGVyZmxvdyBpcyBsZXNzIHRoYW4gMiUgKi8KICAgaWYgKHRpY2tzID4gSU5UX1RJQ0tTIC0gSU5UX1RJQ0tTIC8gNTApCiAgICAgLyogQ2hlY2sgZm9yIHBlbmRpbmcgdGltZXIgaW50ZXJydXB0ICovCi0gICAgaWYgKG1mcC5pbnRfcG5fYiAmICgxIDw8IDUpKQorICAgIGlmIChzdF9tZnAuaW50X3BuX2IgJiAoMSA8PCA1KSkKICAgICAgIG9mZnNldCA9IFRJQ0tfU0laRTsKIAogICB0aWNrcyA9IElOVF9USUNLUyAtIHRpY2tzOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmgKaW5kZXggMTQxMmI0YS4uYTcxNGUxYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oCkBAIC0xMTMsNyArMTEzLDcgQEAKICAqIG9mIG5vcHMgb24gdmFyaW91cyBtYWNoaW5lcy4gU29tZWJvZHkgY2xhaW1lZCB0aGF0IHRoZSB0c3RiIHRha2VzIDYwMCBucy4KICAqLwogI2RlZmluZQlNRlBERUxBWSgpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJ0c3RiICUwIiA6IDogIm0iIChtZnAucGFyX2R0X3JlZykgOiAiY2MiICk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCAidHN0YiAlMCIgOiA6ICJtIiAoc3RfbWZwLnBhcl9kdF9yZWcpIDogImNjIiApOwogCiAvKiBEbyBjYWNoZSBwdXNoL2ludmFsaWRhdGUgZm9yIERNQSByZWFkL3dyaXRlLiBUaGlzIGZ1bmN0aW9uIG9iZXlzIHRoZQogICogc25vb3Bpbmcgb24gc29tZSBtYWNoaW5lcyAoTWVkdXNhKSBhbmQgcHJvY2Vzc29yczogVGhlIE1lZHVzYSBpdHNlbGYgY2FuCkBAIC01NjUsNyArNTY1LDcgQEAKICAgdV9jaGFyIGNoYXJfZHVtbXkyMzsKICAgdV9jaGFyIHVzYXJ0X2R0YTsKICB9OwotIyBkZWZpbmUgbWZwICgoKih2b2xhdGlsZSBzdHJ1Y3QgTUZQKilNRlBfQkFTKSkKKyMgZGVmaW5lIHN0X21mcCAoKCoodm9sYXRpbGUgc3RydWN0IE1GUCopTUZQX0JBUykpCiAKIC8qIFRUJ3Mgc2Vjb25kIE1GUCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlpbnRzLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlpbnRzLmgKaW5kZXggNTc0OGU5OS4uZjU5Nzg5MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaW50cy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWludHMuaApAQCAtMTEzLDcgKzExMyw3IEBACiB7CXVuc2lnbmVkIGNoYXIJbWFzaywgKnJlZzsKIAogCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKLQlyZWcgPSAodW5zaWduZWQgY2hhciAqKSZtZnAuaW50X2VuX2EgKyB0eXBlKjQgKworCXJlZyA9ICh1bnNpZ25lZCBjaGFyICopJnN0X21mcC5pbnRfZW5fYSArIHR5cGUqNCArCiAJCSAgKChpcnEgJiA4KSA+PiAyKSArICgoKGlycS04KSAmIDE2KSA8PCAzKTsKIAlyZXR1cm4oICpyZWcgJiBtYXNrICk7CiB9CkBAIC0xMjMsNyArMTIzLDcgQEAKIHsJdW5zaWduZWQgY2hhcgltYXNrLCAqcmVnOwogCiAJbWFzayA9IDEgPDwgKGlycSAmIDcpOwotCXJlZyA9ICh1bnNpZ25lZCBjaGFyICopJm1mcC5pbnRfZW5fYSArIHR5cGUqNCArCisJcmVnID0gKHVuc2lnbmVkIGNoYXIgKikmc3RfbWZwLmludF9lbl9hICsgdHlwZSo0ICsKIAkJICAoKGlycSAmIDgpID4+IDIpICsgKCgoaXJxLTgpICYgMTYpIDw8IDMpOwogCV9fYXNtX18gX192b2xhdGlsZV9fICggIm9yYiAlMCwlMSIKIAkJCSAgICAgIDogOiAiZGkiIChtYXNrKSwgIm0iICgqcmVnKSA6ICJtZW1vcnkiICk7CkBAIC0xMzQsNyArMTM0LDcgQEAKIHsJdW5zaWduZWQgY2hhcgltYXNrLCAqcmVnOwogCiAJbWFzayA9IH4oMSA8PCAoaXJxICYgNykpOwotCXJlZyA9ICh1bnNpZ25lZCBjaGFyICopJm1mcC5pbnRfZW5fYSArIHR5cGUqNCArCisJcmVnID0gKHVuc2lnbmVkIGNoYXIgKikmc3RfbWZwLmludF9lbl9hICsgdHlwZSo0ICsKIAkJICAoKGlycSAmIDgpID4+IDIpICsgKCgoaXJxLTgpICYgMTYpIDw8IDMpOwogCWlmICh0eXBlID09IE1GUF9QRU5ESU5HIHx8IHR5cGUgPT0gTUZQX1NFUlZJQ0UpCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICggIm1vdmViICUwLCUxIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oCmluZGV4IDIyNmJmYzAuLjBjYWI0MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pcnFfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CiAKIC8qCkBAIC04MCw3ICs4MSw3IEBACiAgKiBpbnRlcnJ1cHQgc291cmNlIChpZiBpdCBzdXBwb3J0cyBjaGFpbmluZykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGlycV9ub2RlIHsKLQlpbnQJCSgqaGFuZGxlcikoaW50LCB2b2lkICopOworCWlycXJldHVybl90CSgqaGFuZGxlcikoaW50LCB2b2lkICopOwogCXZvaWQJCSpkZXZfaWQ7CiAJc3RydWN0IGlycV9ub2RlICpuZXh0OwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKaW5kZXggMDUzMDlmNy4uNTBkYjM1OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaApAQCAtMzQsNiArMzQsNyBAQAogCWNoYXIgc2NjX3R5cGU7CiAJY2hhciBldGhlcl90eXBlOwogCWNoYXIgbnVidXNfdHlwZTsKKwljaGFyIGZsb3BweV90eXBlOwogfTsKIAogI2RlZmluZSBNQUNfQURCX05PTkUJCTAKQEAgLTcxLDYgKzcyLDEyIEBACiAjZGVmaW5lIE1BQ19OT19OVUJVUwkJMAogI2RlZmluZSBNQUNfTlVCVVMJCTEKIAorI2RlZmluZSBNQUNfRkxPUFBZX0lXTQkJMAorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fQUREUjEJMQorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fQUREUjIJMgorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fSU9QCTMKKyNkZWZpbmUgTUFDX0ZMT1BQWV9BVgkJNAorCiAvKgogICoJR2VzdGFsdCBudW1iZXJzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggNDBkMTExMi4uODVjNDFiNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTEsNSArMSwyNiBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicGFyYW1fbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAicGFyYW1fbW0uaCIKKyNpZm5kZWYgX002OEtfUEFSQU1fSAorI2RlZmluZSBfTTY4S19QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwogI2VuZGlmCisKKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFogMTAwCisjZW5kaWYKKworI2lmZGVmIF9fdUNsaW51eF9fCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgorI2Vsc2UKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk4MTkyCisjZW5kaWYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmIC8qIF9NNjhLX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNmEyNzguLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1BBUkFNX0gKLSNkZWZpbmUgX002OEtfUEFSQU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KLSMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk4MTkyCi0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZiAvKiBfTTY4S19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW1fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ0Mzk3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1BBUkFNX0gKLSNkZWZpbmUgX002OEtOT01NVV9QQVJBTV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIEhaIENPTkZJR19IWgotI2RlZmluZQlVU0VSX0haCQlIWgotI2RlZmluZQlDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikKLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaCTEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2Ci0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZiAvKiBfTTY4S05PTU1VX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBlODNjZDJmLi44YzkxOTRiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xLDUgKzEsODcgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInB0cmFjZV9uby5oIgorI2lmbmRlZiBfTTY4S19QVFJBQ0VfSAorI2RlZmluZSBfTTY4S19QVFJBQ0VfSAorCisjZGVmaW5lIFBUX0QxCSAgIDAKKyNkZWZpbmUgUFRfRDIJICAgMQorI2RlZmluZSBQVF9EMwkgICAyCisjZGVmaW5lIFBUX0Q0CSAgIDMKKyNkZWZpbmUgUFRfRDUJICAgNAorI2RlZmluZSBQVF9ENgkgICA1CisjZGVmaW5lIFBUX0Q3CSAgIDYKKyNkZWZpbmUgUFRfQTAJICAgNworI2RlZmluZSBQVF9BMQkgICA4CisjZGVmaW5lIFBUX0EyCSAgIDkKKyNkZWZpbmUgUFRfQTMJICAgMTAKKyNkZWZpbmUgUFRfQTQJICAgMTEKKyNkZWZpbmUgUFRfQTUJICAgMTIKKyNkZWZpbmUgUFRfQTYJICAgMTMKKyNkZWZpbmUgUFRfRDAJICAgMTQKKyNkZWZpbmUgUFRfVVNQCSAgIDE1CisjZGVmaW5lIFBUX09SSUdfRDAgMTYKKyNkZWZpbmUgUFRfU1IJICAgMTcKKyNkZWZpbmUgUFRfUEMJICAgMTgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogdGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAgIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLiAqLworCitzdHJ1Y3QgcHRfcmVncyB7CisgIGxvbmcgICAgIGQxOworICBsb25nICAgICBkMjsKKyAgbG9uZyAgICAgZDM7CisgIGxvbmcgICAgIGQ0OworICBsb25nICAgICBkNTsKKyAgbG9uZyAgICAgYTA7CisgIGxvbmcgICAgIGExOworICBsb25nICAgICBhMjsKKyAgbG9uZyAgICAgZDA7CisgIGxvbmcgICAgIG9yaWdfZDA7CisgIGxvbmcgICAgIHN0a2FkajsKKyNpZmRlZiBDT05GSUdfQ09MREZJUkUKKyAgdW5zaWduZWQgZm9ybWF0IDogIDQ7IC8qIGZyYW1lIGZvcm1hdCBzcGVjaWZpZXIgKi8KKyAgdW5zaWduZWQgdmVjdG9yIDogMTI7IC8qIHZlY3RvciBvZmZzZXQgKi8KKyAgdW5zaWduZWQgc2hvcnQgc3I7CisgIHVuc2lnbmVkIGxvbmcgIHBjOwogI2Vsc2UKLSNpbmNsdWRlICJwdHJhY2VfbW0uaCIKKyAgdW5zaWduZWQgc2hvcnQgc3I7CisgIHVuc2lnbmVkIGxvbmcgIHBjOworICB1bnNpZ25lZCBmb3JtYXQgOiAgNDsgLyogZnJhbWUgZm9ybWF0IHNwZWNpZmllciAqLworICB1bnNpZ25lZCB2ZWN0b3IgOiAxMjsgLyogdmVjdG9yIG9mZnNldCAqLwogI2VuZGlmCit9OworCisvKgorICogVGhpcyBpcyB0aGUgZXh0ZW5kZWQgc3RhY2sgdXNlZCBieSBzaWduYWwgaGFuZGxlcnMgYW5kIHRoZSBjb250ZXh0CisgKiBzd2l0Y2hlcjogaXQncyBwdXNoZWQgYWZ0ZXIgdGhlIG5vcm1hbCAic3RydWN0IHB0X3JlZ3MiLgorICovCitzdHJ1Y3Qgc3dpdGNoX3N0YWNrIHsKKwl1bnNpZ25lZCBsb25nICBkNjsKKwl1bnNpZ25lZCBsb25nICBkNzsKKwl1bnNpZ25lZCBsb25nICBhMzsKKwl1bnNpZ25lZCBsb25nICBhNDsKKwl1bnNpZ25lZCBsb25nICBhNTsKKwl1bnNpZ25lZCBsb25nICBhNjsKKwl1bnNpZ25lZCBsb25nICByZXRwYzsKK307CisKKy8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLworI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgUFNfUworI2RlZmluZSBQU19TICAoMHgyMDAwKQorI2RlZmluZSBQU19NICAoMHgxMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICghKChyZWdzKS0+c3IgJiBQU19TKSkKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5wYykKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9NNjhLX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTc2M2QuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZV9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19QVFJBQ0VfSAotI2RlZmluZSBfTTY4S19QVFJBQ0VfSAotCi0jZGVmaW5lIFBUX0QxCSAgIDAKLSNkZWZpbmUgUFRfRDIJICAgMQotI2RlZmluZSBQVF9EMwkgICAyCi0jZGVmaW5lIFBUX0Q0CSAgIDMKLSNkZWZpbmUgUFRfRDUJICAgNAotI2RlZmluZSBQVF9ENgkgICA1Ci0jZGVmaW5lIFBUX0Q3CSAgIDYKLSNkZWZpbmUgUFRfQTAJICAgNwotI2RlZmluZSBQVF9BMQkgICA4Ci0jZGVmaW5lIFBUX0EyCSAgIDkKLSNkZWZpbmUgUFRfQTMJICAgMTAKLSNkZWZpbmUgUFRfQTQJICAgMTEKLSNkZWZpbmUgUFRfQTUJICAgMTIKLSNkZWZpbmUgUFRfQTYJICAgMTMKLSNkZWZpbmUgUFRfRDAJICAgMTQKLSNkZWZpbmUgUFRfVVNQCSAgIDE1Ci0jZGVmaW5lIFBUX09SSUdfRDAgMTYKLSNkZWZpbmUgUFRfU1IJICAgMTcKLSNkZWZpbmUgUFRfUEMJICAgMTgKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogdGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKLSAgIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLiAqLwotCi1zdHJ1Y3QgcHRfcmVncyB7Ci0gIGxvbmcgICAgIGQxOwotICBsb25nICAgICBkMjsKLSAgbG9uZyAgICAgZDM7Ci0gIGxvbmcgICAgIGQ0OwotICBsb25nICAgICBkNTsKLSAgbG9uZyAgICAgYTA7Ci0gIGxvbmcgICAgIGExOwotICBsb25nICAgICBhMjsKLSAgbG9uZyAgICAgZDA7Ci0gIGxvbmcgICAgIG9yaWdfZDA7Ci0gIGxvbmcgICAgIHN0a2FkajsKLSAgdW5zaWduZWQgc2hvcnQgc3I7Ci0gIHVuc2lnbmVkIGxvbmcgIHBjOwotICB1bnNpZ25lZCBmb3JtYXQgOiAgNDsgLyogZnJhbWUgZm9ybWF0IHNwZWNpZmllciAqLwotICB1bnNpZ25lZCB2ZWN0b3IgOiAxMjsgLyogdmVjdG9yIG9mZnNldCAqLwotfTsKLQotLyoKLSAqIFRoaXMgaXMgdGhlIGV4dGVuZGVkIHN0YWNrIHVzZWQgYnkgc2lnbmFsIGhhbmRsZXJzIGFuZCB0aGUgY29udGV4dAotICogc3dpdGNoZXI6IGl0J3MgcHVzaGVkIGFmdGVyIHRoZSBub3JtYWwgInN0cnVjdCBwdF9yZWdzIi4KLSAqLwotc3RydWN0IHN3aXRjaF9zdGFjayB7Ci0JdW5zaWduZWQgbG9uZyAgZDY7Ci0JdW5zaWduZWQgbG9uZyAgZDc7Ci0JdW5zaWduZWQgbG9uZyAgYTM7Ci0JdW5zaWduZWQgbG9uZyAgYTQ7Ci0JdW5zaWduZWQgbG9uZyAgYTU7Ci0JdW5zaWduZWQgbG9uZyAgYTY7Ci0JdW5zaWduZWQgbG9uZyAgcmV0cGM7Ci19OwotCi0vKiBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIHNhbWUgcHRyYWNlIG51bWJlcnMgYXMgdXNlZCBieSB0aGUgU3BhcmMgY29kZS4gKi8KLSNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgotI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKLSNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZuZGVmIFBTX1MKLSNkZWZpbmUgUFNfUyAgKDB4MjAwMCkKLSNkZWZpbmUgUFNfTSAgKDB4MTAwMCkKLSNlbmRpZgotCi0jZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnNyICYgUFNfUykpCi0jZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCi0jZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQotZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBfTTY4S19QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzkxOTRiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2Vfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNpZm5kZWYgX002OEtfUFRSQUNFX0gKLSNkZWZpbmUgX002OEtfUFRSQUNFX0gKLQotI2RlZmluZSBQVF9EMQkgICAwCi0jZGVmaW5lIFBUX0QyCSAgIDEKLSNkZWZpbmUgUFRfRDMJICAgMgotI2RlZmluZSBQVF9ENAkgICAzCi0jZGVmaW5lIFBUX0Q1CSAgIDQKLSNkZWZpbmUgUFRfRDYJICAgNQotI2RlZmluZSBQVF9ENwkgICA2Ci0jZGVmaW5lIFBUX0EwCSAgIDcKLSNkZWZpbmUgUFRfQTEJICAgOAotI2RlZmluZSBQVF9BMgkgICA5Ci0jZGVmaW5lIFBUX0EzCSAgIDEwCi0jZGVmaW5lIFBUX0E0CSAgIDExCi0jZGVmaW5lIFBUX0E1CSAgIDEyCi0jZGVmaW5lIFBUX0E2CSAgIDEzCi0jZGVmaW5lIFBUX0QwCSAgIDE0Ci0jZGVmaW5lIFBUX1VTUAkgICAxNQotI2RlZmluZSBQVF9PUklHX0QwIDE2Ci0jZGVmaW5lIFBUX1NSCSAgIDE3Ci0jZGVmaW5lIFBUX1BDCSAgIDE4Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCi0gICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4gKi8KLQotc3RydWN0IHB0X3JlZ3MgewotICBsb25nICAgICBkMTsKLSAgbG9uZyAgICAgZDI7Ci0gIGxvbmcgICAgIGQzOwotICBsb25nICAgICBkNDsKLSAgbG9uZyAgICAgZDU7Ci0gIGxvbmcgICAgIGEwOwotICBsb25nICAgICBhMTsKLSAgbG9uZyAgICAgYTI7Ci0gIGxvbmcgICAgIGQwOwotICBsb25nICAgICBvcmlnX2QwOwotICBsb25nICAgICBzdGthZGo7Ci0jaWZkZWYgQ09ORklHX0NPTERGSVJFCi0gIHVuc2lnbmVkIGZvcm1hdCA6ICA0OyAvKiBmcmFtZSBmb3JtYXQgc3BlY2lmaWVyICovCi0gIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAvKiB2ZWN0b3Igb2Zmc2V0ICovCi0gIHVuc2lnbmVkIHNob3J0IHNyOwotICB1bnNpZ25lZCBsb25nICBwYzsKLSNlbHNlCi0gIHVuc2lnbmVkIHNob3J0IHNyOwotICB1bnNpZ25lZCBsb25nICBwYzsKLSAgdW5zaWduZWQgZm9ybWF0IDogIDQ7IC8qIGZyYW1lIGZvcm1hdCBzcGVjaWZpZXIgKi8KLSAgdW5zaWduZWQgdmVjdG9yIDogMTI7IC8qIHZlY3RvciBvZmZzZXQgKi8KLSNlbmRpZgotfTsKLQotLyoKLSAqIFRoaXMgaXMgdGhlIGV4dGVuZGVkIHN0YWNrIHVzZWQgYnkgc2lnbmFsIGhhbmRsZXJzIGFuZCB0aGUgY29udGV4dAotICogc3dpdGNoZXI6IGl0J3MgcHVzaGVkIGFmdGVyIHRoZSBub3JtYWwgInN0cnVjdCBwdF9yZWdzIi4KLSAqLwotc3RydWN0IHN3aXRjaF9zdGFjayB7Ci0JdW5zaWduZWQgbG9uZyAgZDY7Ci0JdW5zaWduZWQgbG9uZyAgZDc7Ci0JdW5zaWduZWQgbG9uZyAgYTM7Ci0JdW5zaWduZWQgbG9uZyAgYTQ7Ci0JdW5zaWduZWQgbG9uZyAgYTU7Ci0JdW5zaWduZWQgbG9uZyAgYTY7Ci0JdW5zaWduZWQgbG9uZyAgcmV0cGM7Ci19OwotCi0vKiBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIHNhbWUgcHRyYWNlIG51bWJlcnMgYXMgdXNlZCBieSB0aGUgU3BhcmMgY29kZS4gKi8KLSNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgotI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKLSNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZuZGVmIFBTX1MKLSNkZWZpbmUgUFNfUyAgKDB4MjAwMCkKLSNkZWZpbmUgUFNfTSAgKDB4MTAwMCkKLSNlbmRpZgotCi0jZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnNyICYgUFNfUykpCi0jZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCi0jZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQotZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBfTTY4S19QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCA4NDJmODZmLi40ZGZiMzk1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMSw1ICsxLDM3NiBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2V0dXBfbm8uaCIKKy8qCisqKiBhc20vc2V0dXAuaCAtLSBEZWZpbml0aW9uIG9mIHRoZSBMaW51eC9tNjhrIHNldHVwIGluZm9ybWF0aW9uCisqKgorKiogQ29weXJpZ2h0IDE5OTIgYnkgR3JlZyBIYXJwCisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyoqIENyZWF0ZWQgMDkvMjkvOTIgYnkgR3JlZyBIYXJwCisqKgorKiogNS8yLzk0IFJvbWFuIEhvZGVrOgorKiogICBBZGRlZCBiaV9hdGFyaSBwYXJ0IG9mIHRoZSBtYWNoaW5lIGRlcGVuZGVudCB1bmlvbiBiaV91bjsgZm9yIG5vdyBpdAorKiogICBjb250YWlucyBqdXN0IGEgbW9kZWwgZmllbGQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBUVCBhbmQgRmFsY29uLgorKiogMjYvNy85NiBSb21hbiBaaXBwZWw6CisqKiAgIFJlbmFtZWQgdG8gc2V0dXAuaDsgYWRkZWQgc29tZSB1c2VmdWwgbWFjcm9zIHRvIGFsbG93IGdjYyBzb21lCisqKiAgIG9wdGltaXphdGlvbnMgaWYgcG9zc2libGUuCisqKiA1LzEwLzk2IEdlZXJ0IFV5dHRlcmhvZXZlbjoKKyoqICAgUmVkZXNpZ24gb2YgdGhlIGJvb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlOyBtb3ZlZCBib290IGluZm9ybWF0aW9uCisqKiAgIHN0cnVjdHVyZSB0byBib290aW5mby5oCisqLworCisjaWZuZGVmIF9NNjhLX1NFVFVQX0gKKyNkZWZpbmUgX002OEtfU0VUVVBfSAorCisKKworICAgIC8qCisgICAgICogIExpbnV4L202OGsgQXJjaGl0ZWN0dXJlcworICAgICAqLworCisjZGVmaW5lIE1BQ0hfQU1JR0EgICAgMQorI2RlZmluZSBNQUNIX0FUQVJJICAgIDIKKyNkZWZpbmUgTUFDSF9NQUMgICAgICAzCisjZGVmaW5lIE1BQ0hfQVBPTExPICAgNAorI2RlZmluZSBNQUNIX1NVTjMgICAgIDUKKyNkZWZpbmUgTUFDSF9NVk1FMTQ3ICA2CisjZGVmaW5lIE1BQ0hfTVZNRTE2eCAgNworI2RlZmluZSBNQUNIX0JWTUU2MDAwIDgKKyNkZWZpbmUgTUFDSF9IUDMwMCAgICA5CisjZGVmaW5lIE1BQ0hfUTQwICAgICAxMAorI2RlZmluZSBNQUNIX1NVTjNYICAgMTEKKworI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyNTYKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBDTF9TSVpFIENPTU1BTkRfTElORV9TSVpFCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21hY2h0eXBlOworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19BTUlHQSkKKyMgIGRlZmluZSBNQUNIX0lTX0FNSUdBICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCisJfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0FNSUdBIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQU1JR0EpCiAjZWxzZQotI2luY2x1ZGUgInNldHVwX21tLmgiCisjICBkZWZpbmUgTUFDSF9BTUlHQV9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19BTUlHQSAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQU1JR0EpCiAjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19BVEFSSSkKKyMgIGRlZmluZSBNQUNIX0lTX0FUQVJJICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCisJfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0FUQVJJIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQVRBUkkpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfQVRBUklfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FUQVJJKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTUFDKQorIyAgZGVmaW5lIE1BQ0hfSVNfTUFDICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIFwKKwl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX01BQyAobTY4a19tYWNodHlwZSA9PSBNQUNIX01BQykKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9NQUNfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfTUFDICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NQUMpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NVTjMpCisjZGVmaW5lIE1BQ0hfSVNfU1VOMyAoMSkKKyNkZWZpbmUgTUFDSF9TVU4zX09OTFkgKDEpCisjZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9TVU4zKQorI2Vsc2UKKyNkZWZpbmUgTUFDSF9JU19TVU4zICgwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX0FQT0xMTykKKyMgIGRlZmluZSBNQUNIX0lTX0FQT0xMTyAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9BUE9MTE8pCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfQVBPTExPX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX0FQT0xMTyAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQVBPTExPKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3ICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NVk1FMTQ3KQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX01WTUUxNDdfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTVZNRTE0NykKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19NVk1FMTZ4KQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4IChtNjhrX21hY2h0eXBlID09IE1BQ0hfTVZNRTE2eCkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9NVk1FMTZ4X09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01WTUUxNngpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfQlZNRTYwMDApCisjICBkZWZpbmUgTUFDSF9JU19CVk1FNjAwMCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19CVk1FNjAwMCAobTY4a19tYWNodHlwZSA9PSBNQUNIX0JWTUU2MDAwKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX0JWTUU2MDAwX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9CVk1FNjAwMCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19IUDMwMCkKKyMgIGRlZmluZSBNQUNIX0lTX0hQMzAwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19IUDMwMCAobTY4a19tYWNodHlwZSA9PSBNQUNIX0hQMzAwKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX0hQMzAwX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX0hQMzAwICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9IUDMwMCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19RNDApCisjICBkZWZpbmUgTUFDSF9JU19RNDAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfUTQwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfUTQwKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX1E0MF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19RNDAgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX1E0MCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19TVU4zWCkKKyMgIGRlZmluZSBNQUNIX0lTX1NVTjNYICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfSFAzMDApICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19RNDApIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19TVU4zWCAobTY4a19tYWNodHlwZSA9PSBNQUNIX1NVTjNYKQorI2Vsc2UKKyMgIGRlZmluZSBDT05GSUdfU1VOM1hfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX1NVTjNYKQorI2VuZGlmCisKKyNpZm5kZWYgTUFDSF9UWVBFCisjICBkZWZpbmUgTUFDSF9UWVBFIChtNjhrX21hY2h0eXBlKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKworICAgIC8qCisgICAgICogIENQVSwgRlBVIGFuZCBNTVUgdHlwZXMKKyAgICAgKgorICAgICAqICBOb3RlOiB3ZSBtYXkgcmVseSBvbiB0aGUgZm9sbG93aW5nIGVxdWFsaXRpZXM6CisgICAgICoKKyAgICAgKiAgICAgIENQVV82ODAyMCA9PSBNTVVfNjg4NTEKKyAgICAgKiAgICAgIENQVV82ODAzMCA9PSBNTVVfNjgwMzAKKyAgICAgKiAgICAgIENQVV82ODA0MCA9PSBGUFVfNjgwNDAgPT0gTU1VXzY4MDQwCisgICAgICogICAgICBDUFVfNjgwNjAgPT0gRlBVXzY4MDYwID09IE1NVV82ODA2MAorICAgICAqLworCisjZGVmaW5lIENQVUJfNjgwMjAgICAgIDAKKyNkZWZpbmUgQ1BVQl82ODAzMCAgICAgMQorI2RlZmluZSBDUFVCXzY4MDQwICAgICAyCisjZGVmaW5lIENQVUJfNjgwNjAgICAgIDMKKworI2RlZmluZSBDUFVfNjgwMjAgICAgICAoMTw8Q1BVQl82ODAyMCkKKyNkZWZpbmUgQ1BVXzY4MDMwICAgICAgKDE8PENQVUJfNjgwMzApCisjZGVmaW5lIENQVV82ODA0MCAgICAgICgxPDxDUFVCXzY4MDQwKQorI2RlZmluZSBDUFVfNjgwNjAgICAgICAoMTw8Q1BVQl82ODA2MCkKKworI2RlZmluZSBGUFVCXzY4ODgxICAgICAwCisjZGVmaW5lIEZQVUJfNjg4ODIgICAgIDEKKyNkZWZpbmUgRlBVQl82ODA0MCAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgRlBVICovCisjZGVmaW5lIEZQVUJfNjgwNjAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIEZQVSAqLworI2RlZmluZSBGUFVCX1NVTkZQQSAgICA0ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdW4tMyBGUEEgKi8KKworI2RlZmluZSBGUFVfNjg4ODEgICAgICAoMTw8RlBVQl82ODg4MSkKKyNkZWZpbmUgRlBVXzY4ODgyICAgICAgKDE8PEZQVUJfNjg4ODIpCisjZGVmaW5lIEZQVV82ODA0MCAgICAgICgxPDxGUFVCXzY4MDQwKQorI2RlZmluZSBGUFVfNjgwNjAgICAgICAoMTw8RlBVQl82ODA2MCkKKyNkZWZpbmUgRlBVX1NVTkZQQSAgICAgKDE8PEZQVUJfU1VORlBBKQorCisjZGVmaW5lIE1NVUJfNjg4NTEgICAgIDAKKyNkZWZpbmUgTU1VQl82ODAzMCAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCisjZGVmaW5lIE1NVUJfNjgwNDAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLworI2RlZmluZSBNTVVCXzY4MDYwICAgICAzICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KKyNkZWZpbmUgTU1VQl9BUE9MTE8gICAgNCAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VzdG9tIEFwb2xsbyAqLworI2RlZmluZSBNTVVCX1NVTjMgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXN0b20gU3VuLTMgKi8KKworI2RlZmluZSBNTVVfNjg4NTEgICAgICAoMTw8TU1VQl82ODg1MSkKKyNkZWZpbmUgTU1VXzY4MDMwICAgICAgKDE8PE1NVUJfNjgwMzApCisjZGVmaW5lIE1NVV82ODA0MCAgICAgICgxPDxNTVVCXzY4MDQwKQorI2RlZmluZSBNTVVfNjgwNjAgICAgICAoMTw8TU1VQl82ODA2MCkKKyNkZWZpbmUgTU1VX1NVTjMgICAgICAgKDE8PE1NVUJfU1VOMykKKyNkZWZpbmUgTU1VX0FQT0xMTyAgICAgKDE8PE1NVUJfQVBPTExPKQorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19jcHV0eXBlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19mcHV0eXBlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19tbXV0eXBlOworI2lmZGVmIENPTkZJR19WTUUKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZtZV9icmR0eXBlOworI2VuZGlmCisKKyAgICAvKgorICAgICAqICBtNjhrX2lzMDQwb3IwNjAgaXMgIT0gMCBmb3IgYSAnMDQwIG9yIGhpZ2hlcjsKKyAgICAgKiAgdXNlZCBudW1iZXJzIGFyZSA0IGZvciA2ODA0MCBhbmQgNiBmb3IgNjgwNjAuCisgICAgICovCisKK2V4dGVybiBpbnQgbTY4a19pczA0MG9yMDYwOworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMjApCisjICBkZWZpbmUgQ1BVX0lTXzAyMCAoMCkKKyMgIGRlZmluZSBNTVVfSVNfODUxICgwKQorIyAgZGVmaW5lIE1NVV9JU19TVU4zICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDMwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDIwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwMjApCisjICBkZWZpbmUgTU1VX0lTXzg1MSAobTY4a19tbXV0eXBlICYgTU1VXzY4ODUxKQorIyAgZGVmaW5lIE1NVV9JU19TVU4zICgwKQkvKiBTdW4zIG5vdCBzdXBwb3J0ZWQgd2l0aCBvdGhlciBDUFUgZW5hYmxlZCAqLworI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDIwX09OTFkKKyMgIGRlZmluZSBDUFVfSVNfMDIwICgxKQorI2lmZGVmIE1BQ0hfU1VOM19PTkxZCisjICBkZWZpbmUgTU1VX0lTX1NVTjMgKDEpCisjICBkZWZpbmUgTU1VX0lTXzg1MSAoMCkKKyNlbHNlCisjICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCisjICBkZWZpbmUgTU1VX0lTXzg1MSAoMSkKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDMwKQorIyAgZGVmaW5lIENQVV9JU18wMzAgKDApCisjICBkZWZpbmUgTU1VX0lTXzAzMCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzAzMCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDMwKQorIyAgZGVmaW5lIE1NVV9JU18wMzAgKG02OGtfbW11dHlwZSAmIE1NVV82ODAzMCkKKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODAzMF9PTkxZCisjICBkZWZpbmUgQ1BVX0lTXzAzMCAoMSkKKyMgIGRlZmluZSBNTVVfSVNfMDMwICgxKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDQwKQorIyAgZGVmaW5lIENQVV9JU18wNDAgKDApCisjICBkZWZpbmUgTU1VX0lTXzA0MCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzA0MCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDQwKQorIyAgZGVmaW5lIE1NVV9JU18wNDAgKG02OGtfbW11dHlwZSAmIE1NVV82ODA0MCkKKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODA0MF9PTkxZCisjICBkZWZpbmUgQ1BVX0lTXzA0MCAoMSkKKyMgIGRlZmluZSBNTVVfSVNfMDQwICgxKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wNjAgKDApCisjICBkZWZpbmUgTU1VX0lTXzA2MCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNDApCisjICBkZWZpbmUgQ1BVX0lTXzA2MCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDYwKQorIyAgZGVmaW5lIE1NVV9JU18wNjAgKG02OGtfbW11dHlwZSAmIE1NVV82ODA2MCkKKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODA2MF9PTkxZCisjICBkZWZpbmUgQ1BVX0lTXzA2MCAoMSkKKyMgIGRlZmluZSBNTVVfSVNfMDYwICgxKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDIwKSAmJiAhZGVmaW5lZChDT05GSUdfTTY4MDMwKQorIyAgZGVmaW5lIENQVV9JU18wMjBfT1JfMDMwICgwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDIwX09SX002ODAzMAorIyAgaWYgZGVmaW5lZChDT05GSUdfTTY4MDQwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICAgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoIW02OGtfaXMwNDBvcjA2MCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIENQVV9NNjgwMjBfT1JfTTY4MDMwX09OTFkKKyMgICAgZGVmaW5lIENQVV9JU18wMjBfT1JfMDMwICgxKQorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODA0MCkgJiYgIWRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAoMCkKKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODA0MF9PUl9NNjgwNjAKKyMgIGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKQorIyAgICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKG02OGtfaXMwNDBvcjA2MCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIENQVV9NNjgwNDBfT1JfTTY4MDYwX09OTFkKKyMgICAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwICgxKQorIyAgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIENQVV9UWVBFIChtNjhrX2NwdXR5cGUpCisKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVUKKyMgIGlmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZCisjICAgIGRlZmluZSBGUFVfSVNfRU1VICgxKQorIyAgZWxzZQorIyAgICBkZWZpbmUgRlBVX0lTX0VNVSAoIW02OGtfZnB1dHlwZSkKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIEZQVV9JU19FTVUgKDApCisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiAgTWlzY2VsbGFuZW91cworICAgICAqLworCisjZGVmaW5lIE5VTV9NRU1JTkZPCTQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBtZW1faW5mbyB7CisJdW5zaWduZWQgbG9uZyBhZGRyOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgY2h1bmsgKi8KKwl1bnNpZ25lZCBsb25nIHNpemU7CQkvKiBsZW5ndGggb2YgbWVtb3J5IGNodW5rIChpbiBieXRlcykgKi8KK307CisKK2V4dGVybiBpbnQgbTY4a19udW1fbWVtb3J5OwkJLyogIyBvZiBtZW1vcnkgYmxvY2tzIGZvdW5kIChhbmQgdXNlZCkgKi8KK2V4dGVybiBpbnQgbTY4a19yZWFsbnVtX21lbW9yeTsJCS8qIHJlYWwgIyBvZiBtZW1vcnkgYmxvY2tzIGZvdW5kICovCitleHRlcm4gc3RydWN0IG1lbV9pbmZvIG02OGtfbWVtb3J5W05VTV9NRU1JTkZPXTsvKiBtZW1vcnkgZGVzY3JpcHRpb24gKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXBfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRmYjM5NS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXBfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NiArMCwwIEBACi0vKgotKiogYXNtL3NldHVwLmggLS0gRGVmaW5pdGlvbiBvZiB0aGUgTGludXgvbTY4ayBzZXR1cCBpbmZvcm1hdGlvbgotKioKLSoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAotKioKLSoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0qKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotKiogZm9yIG1vcmUgZGV0YWlscy4KLSoqCi0qKiBDcmVhdGVkIDA5LzI5LzkyIGJ5IEdyZWcgSGFycAotKioKLSoqIDUvMi85NCBSb21hbiBIb2RlazoKLSoqICAgQWRkZWQgYmlfYXRhcmkgcGFydCBvZiB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdW5pb24gYmlfdW47IGZvciBub3cgaXQKLSoqICAgY29udGFpbnMganVzdCBhIG1vZGVsIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVFQgYW5kIEZhbGNvbi4KLSoqIDI2LzcvOTYgUm9tYW4gWmlwcGVsOgotKiogICBSZW5hbWVkIHRvIHNldHVwLmg7IGFkZGVkIHNvbWUgdXNlZnVsIG1hY3JvcyB0byBhbGxvdyBnY2Mgc29tZQotKiogICBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgotKiogNS8xMC85NiBHZWVydCBVeXR0ZXJob2V2ZW46Ci0qKiAgIFJlZGVzaWduIG9mIHRoZSBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgbW92ZWQgYm9vdCBpbmZvcm1hdGlvbgotKiogICBzdHJ1Y3R1cmUgdG8gYm9vdGluZm8uaAotKi8KLQotI2lmbmRlZiBfTTY4S19TRVRVUF9ICi0jZGVmaW5lIF9NNjhLX1NFVFVQX0gKLQotCi0KLSAgICAvKgotICAgICAqICBMaW51eC9tNjhrIEFyY2hpdGVjdHVyZXMKLSAgICAgKi8KLQotI2RlZmluZSBNQUNIX0FNSUdBICAgIDEKLSNkZWZpbmUgTUFDSF9BVEFSSSAgICAyCi0jZGVmaW5lIE1BQ0hfTUFDICAgICAgMwotI2RlZmluZSBNQUNIX0FQT0xMTyAgIDQKLSNkZWZpbmUgTUFDSF9TVU4zICAgICA1Ci0jZGVmaW5lIE1BQ0hfTVZNRTE0NyAgNgotI2RlZmluZSBNQUNIX01WTUUxNnggIDcKLSNkZWZpbmUgTUFDSF9CVk1FNjAwMCA4Ci0jZGVmaW5lIE1BQ0hfSFAzMDAgICAgOQotI2RlZmluZSBNQUNIX1E0MCAgICAgMTAKLSNkZWZpbmUgTUFDSF9TVU4zWCAgIDExCi0KLSNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjU2Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgQ0xfU0laRSBDT01NQU5EX0xJTkVfU0laRQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19tYWNodHlwZTsKLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfQU1JR0EpCi0jICBkZWZpbmUgTUFDSF9JU19BTUlHQSAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAotCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19BTUlHQSAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FNSUdBKQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX0FNSUdBX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX0FNSUdBICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BTUlHQSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX0FUQVJJKQotIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIFwKLQl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9BVEFSSSkKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9BVEFSSV9PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19BVEFSSSAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQVRBUkkpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19NQUMpCi0jICBkZWZpbmUgTUFDSF9JU19NQUMgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAotCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfTUFDIChtNjhrX21hY2h0eXBlID09IE1BQ0hfTUFDKQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX01BQ19PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19NQUMgKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01BQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU1VOMykKLSNkZWZpbmUgTUFDSF9JU19TVU4zICgxKQotI2RlZmluZSBNQUNIX1NVTjNfT05MWSAoMSkKLSNkZWZpbmUgTUFDSF9UWVBFIChNQUNIX1NVTjMpCi0jZWxzZQotI2RlZmluZSBNQUNIX0lTX1NVTjMgKDApCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIChDT05GSUdfQVBPTExPKQotIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX0FQT0xMTyAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FQT0xMTykKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9BUE9MTE9fT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BUE9MTE8pCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAotCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KQotIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAobTY4a19tYWNodHlwZSA9PSBNQUNIX01WTUUxNDcpCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfTVZNRTE0N19PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3ICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NVk1FMTQ3KQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCAoQ09ORklHX01WTUUxNngpCi0jICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4ICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NVk1FMTZ4KQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX01WTUUxNnhfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTVZNRTE2eCkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKENPTkZJR19CVk1FNjAwMCkKLSMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQlZNRTYwMDApCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfQlZNRTYwMDBfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0JWTUU2MDAwKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCAoQ09ORklHX0hQMzAwKQotIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAotCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgXAotCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX0hQMzAwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfSFAzMDApCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfSFAzMDBfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0hQMzAwKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCAoQ09ORklHX1E0MCkKLSMgIGRlZmluZSBNQUNIX0lTX1E0MCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19RNDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9RNDApCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfUTQwX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX1E0MCAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfUTQwKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCAoQ09ORklHX1NVTjNYKQotIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAotCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1E0MCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX1NVTjNYIChtNjhrX21hY2h0eXBlID09IE1BQ0hfU1VOM1gpCi0jZWxzZQotIyAgZGVmaW5lIENPTkZJR19TVU4zWF9PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19TVU4zWCAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfU1VOM1gpCi0jZW5kaWYKLQotI2lmbmRlZiBNQUNIX1RZUEUKLSMgIGRlZmluZSBNQUNIX1RZUEUgKG02OGtfbWFjaHR5cGUpCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotCi0gICAgLyoKLSAgICAgKiAgQ1BVLCBGUFUgYW5kIE1NVSB0eXBlcwotICAgICAqCi0gICAgICogIE5vdGU6IHdlIG1heSByZWx5IG9uIHRoZSBmb2xsb3dpbmcgZXF1YWxpdGllczoKLSAgICAgKgotICAgICAqICAgICAgQ1BVXzY4MDIwID09IE1NVV82ODg1MQotICAgICAqICAgICAgQ1BVXzY4MDMwID09IE1NVV82ODAzMAotICAgICAqICAgICAgQ1BVXzY4MDQwID09IEZQVV82ODA0MCA9PSBNTVVfNjgwNDAKLSAgICAgKiAgICAgIENQVV82ODA2MCA9PSBGUFVfNjgwNjAgPT0gTU1VXzY4MDYwCi0gICAgICovCi0KLSNkZWZpbmUgQ1BVQl82ODAyMCAgICAgMAotI2RlZmluZSBDUFVCXzY4MDMwICAgICAxCi0jZGVmaW5lIENQVUJfNjgwNDAgICAgIDIKLSNkZWZpbmUgQ1BVQl82ODA2MCAgICAgMwotCi0jZGVmaW5lIENQVV82ODAyMCAgICAgICgxPDxDUFVCXzY4MDIwKQotI2RlZmluZSBDUFVfNjgwMzAgICAgICAoMTw8Q1BVQl82ODAzMCkKLSNkZWZpbmUgQ1BVXzY4MDQwICAgICAgKDE8PENQVUJfNjgwNDApCi0jZGVmaW5lIENQVV82ODA2MCAgICAgICgxPDxDUFVCXzY4MDYwKQotCi0jZGVmaW5lIEZQVUJfNjg4ODEgICAgIDAKLSNkZWZpbmUgRlBVQl82ODg4MiAgICAgMQotI2RlZmluZSBGUFVCXzY4MDQwICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBGUFUgKi8KLSNkZWZpbmUgRlBVQl82ODA2MCAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgRlBVICovCi0jZGVmaW5lIEZQVUJfU1VORlBBICAgIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1bi0zIEZQQSAqLwotCi0jZGVmaW5lIEZQVV82ODg4MSAgICAgICgxPDxGUFVCXzY4ODgxKQotI2RlZmluZSBGUFVfNjg4ODIgICAgICAoMTw8RlBVQl82ODg4MikKLSNkZWZpbmUgRlBVXzY4MDQwICAgICAgKDE8PEZQVUJfNjgwNDApCi0jZGVmaW5lIEZQVV82ODA2MCAgICAgICgxPDxGUFVCXzY4MDYwKQotI2RlZmluZSBGUFVfU1VORlBBICAgICAoMTw8RlBVQl9TVU5GUEEpCi0KLSNkZWZpbmUgTU1VQl82ODg1MSAgICAgMAotI2RlZmluZSBNTVVCXzY4MDMwICAgICAxICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KLSNkZWZpbmUgTU1VQl82ODA0MCAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCi0jZGVmaW5lIE1NVUJfNjgwNjAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLwotI2RlZmluZSBNTVVCX0FQT0xMTyAgICA0ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXN0b20gQXBvbGxvICovCi0jZGVmaW5lIE1NVUJfU1VOMyAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1c3RvbSBTdW4tMyAqLwotCi0jZGVmaW5lIE1NVV82ODg1MSAgICAgICgxPDxNTVVCXzY4ODUxKQotI2RlZmluZSBNTVVfNjgwMzAgICAgICAoMTw8TU1VQl82ODAzMCkKLSNkZWZpbmUgTU1VXzY4MDQwICAgICAgKDE8PE1NVUJfNjgwNDApCi0jZGVmaW5lIE1NVV82ODA2MCAgICAgICgxPDxNTVVCXzY4MDYwKQotI2RlZmluZSBNTVVfU1VOMyAgICAgICAoMTw8TU1VQl9TVU4zKQotI2RlZmluZSBNTVVfQVBPTExPICAgICAoMTw8TU1VQl9BUE9MTE8pCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX2NwdXR5cGU7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX2ZwdXR5cGU7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21tdXR5cGU7Ci0jaWZkZWYgQ09ORklHX1ZNRQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1lX2JyZHR5cGU7Ci0jZW5kaWYKLQotICAgIC8qCi0gICAgICogIG02OGtfaXMwNDBvcjA2MCBpcyAhPSAwIGZvciBhICcwNDAgb3IgaGlnaGVyOwotICAgICAqICB1c2VkIG51bWJlcnMgYXJlIDQgZm9yIDY4MDQwIGFuZCA2IGZvciA2ODA2MC4KLSAgICAgKi8KLQotZXh0ZXJuIGludCBtNjhrX2lzMDQwb3IwNjA7Ci0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jaWYgIWRlZmluZWQoQ09ORklHX002ODAyMCkKLSMgIGRlZmluZSBDUFVfSVNfMDIwICgwKQotIyAgZGVmaW5lIE1NVV9JU184NTEgKDApCi0jICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQotIyAgZGVmaW5lIENQVV9JU18wMjAgKG02OGtfY3B1dHlwZSAmIENQVV82ODAyMCkKLSMgIGRlZmluZSBNTVVfSVNfODUxIChtNjhrX21tdXR5cGUgJiBNTVVfNjg4NTEpCi0jICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCS8qIFN1bjMgbm90IHN1cHBvcnRlZCB3aXRoIG90aGVyIENQVSBlbmFibGVkICovCi0jZWxzZQotIyAgZGVmaW5lIENQVV9NNjgwMjBfT05MWQotIyAgZGVmaW5lIENQVV9JU18wMjAgKDEpCi0jaWZkZWYgTUFDSF9TVU4zX09OTFkKLSMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMSkKLSMgIGRlZmluZSBNTVVfSVNfODUxICgwKQotI2Vsc2UKLSMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkKLSMgIGRlZmluZSBNTVVfSVNfODUxICgxKQotI2VuZGlmCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMzApCi0jICBkZWZpbmUgQ1BVX0lTXzAzMCAoMCkKLSMgIGRlZmluZSBNTVVfSVNfMDMwICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKLSMgIGRlZmluZSBDUFVfSVNfMDMwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwMzApCi0jICBkZWZpbmUgTU1VX0lTXzAzMCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDMwKQotI2Vsc2UKLSMgIGRlZmluZSBDUFVfTTY4MDMwX09OTFkKLSMgIGRlZmluZSBDUFVfSVNfMDMwICgxKQotIyAgZGVmaW5lIE1NVV9JU18wMzAgKDEpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNDApCi0jICBkZWZpbmUgQ1BVX0lTXzA0MCAoMCkKLSMgIGRlZmluZSBNTVVfSVNfMDQwICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKLSMgIGRlZmluZSBDUFVfSVNfMDQwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwNDApCi0jICBkZWZpbmUgTU1VX0lTXzA0MCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDQwKQotI2Vsc2UKLSMgIGRlZmluZSBDUFVfTTY4MDQwX09OTFkKLSMgIGRlZmluZSBDUFVfSVNfMDQwICgxKQotIyAgZGVmaW5lIE1NVV9JU18wNDAgKDEpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNjApCi0jICBkZWZpbmUgQ1BVX0lTXzA2MCAoMCkKLSMgIGRlZmluZSBNTVVfSVNfMDYwICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkKLSMgIGRlZmluZSBDUFVfSVNfMDYwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwNjApCi0jICBkZWZpbmUgTU1VX0lTXzA2MCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDYwKQotI2Vsc2UKLSMgIGRlZmluZSBDUFVfTTY4MDYwX09OTFkKLSMgIGRlZmluZSBDUFVfSVNfMDYwICgxKQotIyAgZGVmaW5lIE1NVV9JU18wNjAgKDEpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMjApICYmICFkZWZpbmVkKENPTkZJR19NNjgwMzApCi0jICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKDApCi0jZWxzZQotIyAgZGVmaW5lIENQVV9NNjgwMjBfT1JfTTY4MDMwCi0jICBpZiBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKLSMgICAgZGVmaW5lIENQVV9JU18wMjBfT1JfMDMwICghbTY4a19pczA0MG9yMDYwKQotIyAgZWxzZQotIyAgICBkZWZpbmUgQ1BVX002ODAyMF9PUl9NNjgwMzBfT05MWQotIyAgICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKDEpCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDQwKSAmJiAhZGVmaW5lZChDT05GSUdfTTY4MDYwKQotIyAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwICgwKQotI2Vsc2UKLSMgIGRlZmluZSBDUFVfTTY4MDQwX09SX002ODA2MAotIyAgaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApCi0jICAgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAobTY4a19pczA0MG9yMDYwKQotIyAgZWxzZQotIyAgICBkZWZpbmUgQ1BVX002ODA0MF9PUl9NNjgwNjBfT05MWQotIyAgICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKDEpCi0jICBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgQ1BVX1RZUEUgKG02OGtfY3B1dHlwZSkKLQotI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVQotIyAgaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX09OTFkKLSMgICAgZGVmaW5lIEZQVV9JU19FTVUgKDEpCi0jICBlbHNlCi0jICAgIGRlZmluZSBGUFVfSVNfRU1VICghbTY4a19mcHV0eXBlKQotIyAgZW5kaWYKLSNlbHNlCi0jICBkZWZpbmUgRlBVX0lTX0VNVSAoMCkKLSNlbmRpZgotCi0KLSAgICAvKgotICAgICAqICBNaXNjZWxsYW5lb3VzCi0gICAgICovCi0KLSNkZWZpbmUgTlVNX01FTUlORk8JNAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotc3RydWN0IG1lbV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIG1lbW9yeSBjaHVuayAqLwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsJCS8qIGxlbmd0aCBvZiBtZW1vcnkgY2h1bmsgKGluIGJ5dGVzKSAqLwotfTsKLQotZXh0ZXJuIGludCBtNjhrX251bV9tZW1vcnk7CQkvKiAjIG9mIG1lbW9yeSBibG9ja3MgZm91bmQgKGFuZCB1c2VkKSAqLwotZXh0ZXJuIGludCBtNjhrX3JlYWxudW1fbWVtb3J5OwkJLyogcmVhbCAjIG9mIG1lbW9yeSBibG9ja3MgZm91bmQgKi8KLWV4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbTlVNX01FTUlORk9dOy8qIG1lbW9yeSBkZXNjcmlwdGlvbiAqLwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBfTTY4S19TRVRVUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXBfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWQyODZjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9zZXR1cF9tbS5oPgotCi0vKiBXZSBoYXZlIGEgYmlnZ2VyIGNvbW1hbmQgbGluZSBidWZmZXIuICovCi0jdW5kZWYgQ09NTUFORF9MSU5FX1NJWkUKLQotI2VuZGlmICAvKiAgX19LRVJORUxfXyAgKi8KLQotI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQk1MTIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IGJmZjZkNDAuLjUyM2RiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMSw1ICsxLDI0IEBACisjaWZuZGVmIF9BU01fTTY4a19TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9NNjhrX1NJR0NPTlRFWFRfSAorCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJdW5zaWduZWQgbG9uZyAgc2NfbWFzazsJCS8qIG9sZCBzaWdtYXNrICovCisJdW5zaWduZWQgbG9uZyAgc2NfdXNwOwkJLyogb2xkIHVzZXIgc3RhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgIHNjX2QwOworCXVuc2lnbmVkIGxvbmcgIHNjX2QxOworCXVuc2lnbmVkIGxvbmcgIHNjX2EwOworCXVuc2lnbmVkIGxvbmcgIHNjX2ExOwogI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2lnY29udGV4dF9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJzaWdjb250ZXh0X21tLmgiCisJdW5zaWduZWQgbG9uZyAgc2NfYTU7CisjZW5kaWYKKwl1bnNpZ25lZCBzaG9ydCBzY19zcjsKKwl1bnNpZ25lZCBsb25nICBzY19wYzsKKwl1bnNpZ25lZCBzaG9ydCBzY19mb3JtYXR2ZWM7CisjaWZuZGVmIF9fdUNsaW51eF9fCisJdW5zaWduZWQgbG9uZyAgc2NfZnByZWdzWzIqM107ICAvKiByb29tIGZvciB0d28gZnAgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAgc2NfZnBjbnRsWzNdOworCXVuc2lnbmVkIGNoYXIgIHNjX2Zwc3RhdGVbMjE2XTsKKyNlbmRpZgorfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmYmUzNC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotI2lmbmRlZiBfQVNNX002OGtfU0lHQ09OVEVYVF9ICi0jZGVmaW5lIF9BU01fTTY4a19TSUdDT05URVhUX0gKLQotc3RydWN0IHNpZ2NvbnRleHQgewotCXVuc2lnbmVkIGxvbmcgIHNjX21hc2s7CQkvKiBvbGQgc2lnbWFzayAqLwotCXVuc2lnbmVkIGxvbmcgIHNjX3VzcDsJCS8qIG9sZCB1c2VyIHN0YWNrIHBvaW50ZXIgKi8KLQl1bnNpZ25lZCBsb25nICBzY19kMDsKLQl1bnNpZ25lZCBsb25nICBzY19kMTsKLQl1bnNpZ25lZCBsb25nICBzY19hMDsKLQl1bnNpZ25lZCBsb25nICBzY19hMTsKLQl1bnNpZ25lZCBzaG9ydCBzY19zcjsKLQl1bnNpZ25lZCBsb25nICBzY19wYzsKLQl1bnNpZ25lZCBzaG9ydCBzY19mb3JtYXR2ZWM7Ci0JdW5zaWduZWQgbG9uZyAgc2NfZnByZWdzWzIqM107ICAvKiByb29tIGZvciB0d28gZnAgcmVnaXN0ZXJzICovCi0JdW5zaWduZWQgbG9uZyAgc2NfZnBjbnRsWzNdOwotCXVuc2lnbmVkIGNoYXIgIHNjX2Zwc3RhdGVbMjE2XTsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YzI5M2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NNjhLTk9NTVVfU0lHQ09OVEVYVF9ICi0jZGVmaW5lIF9BU01fTTY4S05PTU1VX1NJR0NPTlRFWFRfSAotCi1zdHJ1Y3Qgc2lnY29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZyAgc2NfbWFzazsgCS8qIG9sZCBzaWdtYXNrICovCi0JdW5zaWduZWQgbG9uZyAgc2NfdXNwOwkJLyogb2xkIHVzZXIgc3RhY2sgcG9pbnRlciAqLwotCXVuc2lnbmVkIGxvbmcgIHNjX2QwOwotCXVuc2lnbmVkIGxvbmcgIHNjX2QxOwotCXVuc2lnbmVkIGxvbmcgIHNjX2EwOwotCXVuc2lnbmVkIGxvbmcgIHNjX2ExOwotCXVuc2lnbmVkIGxvbmcgIHNjX2E1OwotCXVuc2lnbmVkIHNob3J0IHNjX3NyOwotCXVuc2lnbmVkIGxvbmcgIHNjX3BjOwotCXVuc2lnbmVkIHNob3J0IHNjX2Zvcm1hdHZlYzsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKaW5kZXggNjEyMTlkNy4uY2E3ZGRlOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCkBAIC0xLDUgKzEsOTcgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInNpZ2luZm9fbm8uaCIKKyNpZm5kZWYgX002OEtfU0lHSU5GT19ICisjZGVmaW5lIF9NNjhLX1NJR0lORk9fSAorCisjaWZuZGVmIF9fdUNsaW51eF9fCisjZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKKyNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTworI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKKyNpZm5kZWYgX191Q2xpbnV4X18KKwordHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CisJaW50IHNpX3NpZ25vOworCWludCBzaV9lcnJubzsKKwlpbnQgc2lfY29kZTsKKworCXVuaW9uIHsKKwkJaW50IF9wYWRbU0lfUEFEX1NJWkVdOworCisJCS8qIGtpbGwoKSAqLworCQlzdHJ1Y3QgeworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCisJCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9raWxsOworCisJCS8qIFBPU0lYLjFiIHRpbWVycyAqLworCQlzdHJ1Y3QgeworCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KKwkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KKwkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07CisJCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCisJCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KKwkJfSBfdGltZXI7CisKKwkJLyogUE9TSVguMWIgc2lnbmFscyAqLworCQlzdHJ1Y3QgeworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCisJCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJc2lndmFsX3QgX3NpZ3ZhbDsKKwkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KKwkJfSBfcnQ7CisKKwkJLyogU0lHQ0hMRCAqLworCQlzdHJ1Y3QgeworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KKwkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLworCQkJY2xvY2tfdCBfdXRpbWU7CisJCQljbG9ja190IF9zdGltZTsKKwkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KKwkJfSBfc2lnY2hsZDsKKworCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCisJCXN0cnVjdCB7CisJCQl2b2lkICpfYWRkcjsgLyogZmF1bHRpbmcgaW5zbi9tZW1vcnkgcmVmLiAqLworCQl9IF9zaWdmYXVsdDsKKworCQkvKiBTSUdQT0xMICovCisJCXN0cnVjdCB7CisJCQlpbnQgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLworCQkJaW50IF9mZDsKKwkJfSBfc2lncG9sbDsKKwl9IF9zaWZpZWxkczsKK30gc2lnaW5mb190OworCisjZGVmaW5lIFVJRDE2X1NJR0lORk9fQ09NUEFUX05FRURFRAorCisvKgorICogSG93IHRoZXNlIGZpZWxkcyBhcmUgdG8gYmUgYWNjZXNzZWQuCisgKi8KKyN1bmRlZiBzaV91aWQKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQzMgorI2RlZmluZSBzaV91aWQxNglfc2lmaWVsZHMuX2tpbGwuX3VpZAogI2Vsc2UKLSNpbmNsdWRlICJzaWdpbmZvX21tLmgiCisjZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3NpZ2luZm8oc3RydWN0IHNpZ2luZm8gKnRvLCBzdHJ1Y3Qgc2lnaW5mbyAqZnJvbSkKK3sKKwlpZiAoZnJvbS0+c2lfY29kZSA8IDApCisJCW1lbWNweSh0bywgZnJvbSwgc2l6ZW9mKCp0bykpOworCWVsc2UKKwkJLyogX3NpZ2NobGQgaXMgY3VycmVudGx5IHRoZSBsYXJnZXN0IGtub3cgdW5pb24gbWVtYmVyICovCisJCW1lbWNweSh0bywgZnJvbSwgMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAhX191Q2xpbnV4X18gKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mb19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm9fbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhOGQ2ZC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mb19tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19TSUdJTkZPX0gKLSNkZWZpbmUgX002OEtfU0lHSU5GT19ICi0KLSNkZWZpbmUgSEFWRV9BUkNIX1NJR0lORk9fVAotI2RlZmluZSBIQVZFX0FSQ0hfQ09QWV9TSUdJTkZPCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHNpZ2luZm8gewotCWludCBzaV9zaWdubzsKLQlpbnQgc2lfZXJybm87Ci0JaW50IHNpX2NvZGU7Ci0KLQl1bmlvbiB7Ci0JCWludCBfcGFkW1NJX1BBRF9TSVpFXTsKLQotCQkvKiBraWxsKCkgKi8KLQkJc3RydWN0IHsKLQkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfa2lsbDsKLQotCQkvKiBQT1NJWC4xYiB0aW1lcnMgKi8KLQkJc3RydWN0IHsKLQkJCXRpbWVyX3QgX3RpZDsJCS8qIHRpbWVyIGlkICovCi0JCQlpbnQgX292ZXJydW47CQkvKiBvdmVycnVuIGNvdW50ICovCi0JCQljaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOwotCQkJc2lndmFsX3QgX3NpZ3ZhbDsJLyogc2FtZSBhcyBiZWxvdyAqLwotCQkJaW50IF9zeXNfcHJpdmF0ZTsgICAgICAgLyogbm90IHRvIGJlIHBhc3NlZCB0byB1c2VyICovCi0JCX0gX3RpbWVyOwotCi0JCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KLQkJc3RydWN0IHsKLQkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLQkJCXNpZ3ZhbF90IF9zaWd2YWw7Ci0JCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCi0JCX0gX3J0OwotCi0JCS8qIFNJR0NITEQgKi8KLQkJc3RydWN0IHsKLQkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHdoaWNoIGNoaWxkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNsb2NrX3QgX3V0aW1lOwotCQkJY2xvY2tfdCBfc3RpbWU7Ci0JCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCi0JCX0gX3NpZ2NobGQ7Ci0KLQkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLwotCQlzdHJ1Y3QgewotCQkJdm9pZCAqX2FkZHI7IC8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KLQkJfSBfc2lnZmF1bHQ7Ci0KLQkJLyogU0lHUE9MTCAqLwotCQlzdHJ1Y3QgewotCQkJaW50IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KLQkJCWludCBfZmQ7Ci0JCX0gX3NpZ3BvbGw7Ci0JfSBfc2lmaWVsZHM7Ci19IHNpZ2luZm9fdDsKLQotI2RlZmluZSBVSUQxNl9TSUdJTkZPX0NPTVBBVF9ORUVERUQKLQotLyoKLSAqIEhvdyB0aGVzZSBmaWVsZHMgYXJlIHRvIGJlIGFjY2Vzc2VkLgotICovCi0jdW5kZWYgc2lfdWlkCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkMzIKLSNkZWZpbmUgc2lfdWlkMTYJX3NpZmllbGRzLl9raWxsLl91aWQKLSNlbHNlCi0jZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQKLSNlbmRpZgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3NpZ2luZm8oc3RydWN0IHNpZ2luZm8gKnRvLCBzdHJ1Y3Qgc2lnaW5mbyAqZnJvbSkKLXsKLQlpZiAoZnJvbS0+c2lfY29kZSA8IDApCi0JCW1lbWNweSh0bywgZnJvbSwgc2l6ZW9mKCp0bykpOwotCWVsc2UKLQkJLyogX3NpZ2NobGQgaXMgY3VycmVudGx5IHRoZSBsYXJnZXN0IGtub3cgdW5pb24gbWVtYmVyICovCi0JCW1lbWNweSh0bywgZnJvbSwgMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKTsKLX0KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mb19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm9fbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE4ZTVmNC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mb19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9NNjhLTk9NTVVfU0lHSU5GT19ICi0jZGVmaW5lIF9NNjhLTk9NTVVfU0lHSU5GT19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbC5oCmluZGV4IDNjMTk5ODguLjA4Nzg4ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWwuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsLmgKQEAgLTEsNSArMSwyMTMgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInNpZ25hbF9uby5oIgorI2lmbmRlZiBfTTY4S19TSUdOQUxfSAorI2RlZmluZSBfTTY4S19TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBzaWdpbmZvOworCisjaWZkZWYgX19LRVJORUxfXworLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKKyAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisKKyNkZWZpbmUgX05TSUcJCTY0CisjZGVmaW5lIF9OU0lHX0JQVwkzMgorI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Cit9IHNpZ3NldF90OworCiAjZWxzZQotI2luY2x1ZGUgInNpZ25hbF9tbS5oIgotI2VuZGlmCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKKyAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgorICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KKyAqCisgKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCisgKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0CisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMAorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwCisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwCisKKyNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKKworLyoKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSwkxCisjZGVmaW5lIFNTX0RJU0FCTEUJMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKKyNkZWZpbmUgU0lHU1RLU1oJODE5MgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworfTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkIF9fdXNlciAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyNpZm5kZWYgX191Q2xpbnV4X18KKyNkZWZpbmUgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUworCitzdGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCWFzbSAoImJmc2V0ICUweyUxLCMxfSIKKwkJOiAiK29kIiAoKnNldCkKKwkJOiAiaWQiICgoX3NpZyAtIDEpIF4gMzEpCisJCTogImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJYXNtICgiYmZjbHIgJTB7JTEsIzF9IgorCQk6ICIrb2QiICgqc2V0KQorCQk6ICJpZCIgKChfc2lnIC0gMSkgXiAzMSkKKwkJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19jb25zdF9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOworCXJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gPj4gKHNpZyAlIF9OU0lHX0JQVykpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2dlbl9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlpbnQgcmV0OworCWFzbSAoImJmZXh0dSAlMXslMiwjMX0sJTAiCisJCTogIj1kIiAocmV0KQorCQk6ICJvZCIgKCpzZXQpLCAiaWQiICgoX3NpZy0xKSBeIDMxKQorCQk6ICJjYyIpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgc2lnaXNtZW1iZXIoc2V0LHNpZykJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpZykgPwkJXAorCSBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNldCxzaWcpIDoJCVwKKwkgX19nZW5fc2lnaXNtZW1iZXIoc2V0LHNpZykpCisKK3N0YXRpYyBpbmxpbmUgaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3JkKQoreworCWFzbSAoImJmZmZvICUxeyMwLCMwfSwlMCIKKwkJOiAiPWQiICh3b3JkKQorCQk6ICJkIiAod29yZCAmIC13b3JkKQorCQk6ICJjYyIpOworCXJldHVybiB3b3JkIF4gMzE7Cit9CisKK3N0cnVjdCBwdF9yZWdzOworZXh0ZXJuIHZvaWQgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpjb29raWUpOworCisjZWxzZQorCisjdW5kZWYgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUworI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX3VDbGludXhfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9NNjhLX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYjhhODEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLSNpZm5kZWYgX002OEtfU0lHTkFMX0gKLSNkZWZpbmUgX002OEtfU0lHTkFMX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCi1zdHJ1Y3Qgc2lnaW5mbzsKLQotI2lmZGVmIF9fS0VSTkVMX18KLS8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCi0gICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLwotCi0jZGVmaW5lIF9OU0lHCQk2NAotI2RlZmluZSBfTlNJR19CUFcJMzIKLSNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOwotfSBzaWdzZXRfdDsKLQotI2Vsc2UKLS8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLwotCi0jZGVmaW5lIE5TSUcJCTMyCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNkZWZpbmUgU0lHSFVQCQkgMQotI2RlZmluZSBTSUdJTlQJCSAyCi0jZGVmaW5lIFNJR1FVSVQJCSAzCi0jZGVmaW5lIFNJR0lMTAkJIDQKLSNkZWZpbmUgU0lHVFJBUAkJIDUKLSNkZWZpbmUgU0lHQUJSVAkJIDYKLSNkZWZpbmUgU0lHSU9UCQkgNgotI2RlZmluZSBTSUdCVVMJCSA3Ci0jZGVmaW5lIFNJR0ZQRQkJIDgKLSNkZWZpbmUgU0lHS0lMTAkJIDkKLSNkZWZpbmUgU0lHVVNSMQkJMTAKLSNkZWZpbmUgU0lHU0VHVgkJMTEKLSNkZWZpbmUgU0lHVVNSMgkJMTIKLSNkZWZpbmUgU0lHUElQRQkJMTMKLSNkZWZpbmUgU0lHQUxSTQkJMTQKLSNkZWZpbmUgU0lHVEVSTQkJMTUKLSNkZWZpbmUgU0lHU1RLRkxUCTE2Ci0jZGVmaW5lIFNJR0NITEQJCTE3Ci0jZGVmaW5lIFNJR0NPTlQJCTE4Ci0jZGVmaW5lIFNJR1NUT1AJCTE5Ci0jZGVmaW5lIFNJR1RTVFAJCTIwCi0jZGVmaW5lIFNJR1RUSU4JCTIxCi0jZGVmaW5lIFNJR1RUT1UJCTIyCi0jZGVmaW5lIFNJR1VSRwkJMjMKLSNkZWZpbmUgU0lHWENQVQkJMjQKLSNkZWZpbmUgU0lHWEZTWgkJMjUKLSNkZWZpbmUgU0lHVlRBTFJNCTI2Ci0jZGVmaW5lIFNJR1BST0YJCTI3Ci0jZGVmaW5lIFNJR1dJTkNICTI4Ci0jZGVmaW5lIFNJR0lPCQkyOQotI2RlZmluZSBTSUdQT0xMCQlTSUdJTwotLyoKLSNkZWZpbmUgU0lHTE9TVAkJMjkKLSovCi0jZGVmaW5lIFNJR1BXUgkJMzAKLSNkZWZpbmUgU0lHU1lTCQkzMQotI2RlZmluZQlTSUdVTlVTRUQJMzEKLQotLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KLSNkZWZpbmUgU0lHUlRNSU4JMzIKLSNkZWZpbmUgU0lHUlRNQVgJX05TSUcKLQotLyoKLSAqIFNBX0ZMQUdTIHZhbHVlczoKLSAqCi0gKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQotICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCi0gKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCi0gKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KLSAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgotICoKLSAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKLSAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KLSAqLwotI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQotI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgotI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKLSNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCi0jZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKLSNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKLQotI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgotI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotCi0vKgotICogc2lnYWx0c3RhY2sgY29udHJvbHMKLSAqLwotI2RlZmluZSBTU19PTlNUQUNLCTEKLSNkZWZpbmUgU1NfRElTQUJMRQkyCi0KLSNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAotI2RlZmluZSBTSUdTVEtTWgk4MTkyCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCW9sZF9zaWdzZXRfdCBzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Ci19OwotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Ci0Jc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotc3RydWN0IGtfc2lnYWN0aW9uIHsKLQlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotfTsKLSNlbHNlCi0vKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KLQotc3RydWN0IHNpZ2FjdGlvbiB7Ci0JdW5pb24gewotCSAgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7Ci0JICB2b2lkICgqX3NhX3NpZ2FjdGlvbikoaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCB2b2lkICopOwotCX0gX3U7Ci0Jc2lnc2V0X3Qgc2FfbWFzazsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Ci19OwotCi0jZGVmaW5lIHNhX2hhbmRsZXIJX3UuX3NhX2hhbmRsZXIKLSNkZWZpbmUgc2Ffc2lnYWN0aW9uCV91Ll9zYV9zaWdhY3Rpb24KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewotCXZvaWQgX191c2VyICpzc19zcDsKLQlpbnQgc3NfZmxhZ3M7Ci0Jc2l6ZV90IHNzX3NpemU7Ci19IHN0YWNrX3Q7Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KLQotI2RlZmluZSBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaWdhZGRzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JYXNtICgiYmZzZXQgJTB7JTEsIzF9IgotCQk6ICIrb2QiICgqc2V0KQotCQk6ICJpZCIgKChfc2lnIC0gMSkgXiAzMSkKLQkJOiAiY2MiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKLXsKLQlhc20gKCJiZmNsciAlMHslMSwjMX0iCi0JCTogIitvZCIgKCpzZXQpCi0JCTogImlkIiAoKF9zaWcgLSAxKSBeIDMxKQotCQk6ICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQotewotCXVuc2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7Ci0JcmV0dXJuIDEgJiAoc2V0LT5zaWdbc2lnIC8gX05TSUdfQlBXXSA+PiAoc2lnICUgX05TSUdfQlBXKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fZ2VuX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQotewotCWludCByZXQ7Ci0JYXNtICgiYmZleHR1ICUxeyUyLCMxfSwlMCIKLQkJOiAiPWQiIChyZXQpCi0JCTogIm9kIiAoKnNldCksICJpZCIgKChfc2lnLTEpIF4gMzEpCi0JCTogImNjIik7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBzaWdpc21lbWJlcihzZXQsc2lnKQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKSA/CQlcCi0JIF9fY29uc3Rfc2lnaXNtZW1iZXIoc2V0LHNpZykgOgkJXAotCSBfX2dlbl9zaWdpc21lbWJlcihzZXQsc2lnKSkKLQotc3RhdGljIGlubGluZSBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdvcmQpCi17Ci0JYXNtICgiYmZmZm8gJTF7IzAsIzB9LCUwIgotCQk6ICI9ZCIgKHdvcmQpCi0JCTogImQiICh3b3JkICYgLXdvcmQpCi0JCTogImNjIik7Ci0JcmV0dXJuIHdvcmQgXiAzMTsKLX0KLQotc3RydWN0IHB0X3JlZ3M7Ci1leHRlcm4gdm9pZCBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSk7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBfTTY4S19TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZjMDhiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWxfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0jaWZuZGVmIF9NNjhLTk9NTVVfU0lHTkFMX0gKLSNkZWZpbmUgX002OEtOT01NVV9TSUdOQUxfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KLXN0cnVjdCBzaWdpbmZvOwotCi0jaWZkZWYgX19LRVJORUxfXwotLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKLSAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCi0KLSNkZWZpbmUgX05TSUcJCTY0Ci0jZGVmaW5lIF9OU0lHX0JQVwkzMgotI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Ci19IHNpZ3NldF90OwotCi0jZWxzZQotLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCi0KLSNkZWZpbmUgTlNJRwkJMzIKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2RlZmluZSBTSUdIVVAJCSAxCi0jZGVmaW5lIFNJR0lOVAkJIDIKLSNkZWZpbmUgU0lHUVVJVAkJIDMKLSNkZWZpbmUgU0lHSUxMCQkgNAotI2RlZmluZSBTSUdUUkFQCQkgNQotI2RlZmluZSBTSUdBQlJUCQkgNgotI2RlZmluZSBTSUdJT1QJCSA2Ci0jZGVmaW5lIFNJR0JVUwkJIDcKLSNkZWZpbmUgU0lHRlBFCQkgOAotI2RlZmluZSBTSUdLSUxMCQkgOQotI2RlZmluZSBTSUdVU1IxCQkxMAotI2RlZmluZSBTSUdTRUdWCQkxMQotI2RlZmluZSBTSUdVU1IyCQkxMgotI2RlZmluZSBTSUdQSVBFCQkxMwotI2RlZmluZSBTSUdBTFJNCQkxNAotI2RlZmluZSBTSUdURVJNCQkxNQotI2RlZmluZSBTSUdTVEtGTFQJMTYKLSNkZWZpbmUgU0lHQ0hMRAkJMTcKLSNkZWZpbmUgU0lHQ09OVAkJMTgKLSNkZWZpbmUgU0lHU1RPUAkJMTkKLSNkZWZpbmUgU0lHVFNUUAkJMjAKLSNkZWZpbmUgU0lHVFRJTgkJMjEKLSNkZWZpbmUgU0lHVFRPVQkJMjIKLSNkZWZpbmUgU0lHVVJHCQkyMwotI2RlZmluZSBTSUdYQ1BVCQkyNAotI2RlZmluZSBTSUdYRlNaCQkyNQotI2RlZmluZSBTSUdWVEFMUk0JMjYKLSNkZWZpbmUgU0lHUFJPRgkJMjcKLSNkZWZpbmUgU0lHV0lOQ0gJMjgKLSNkZWZpbmUgU0lHSU8JCTI5Ci0jZGVmaW5lIFNJR1BPTEwJCVNJR0lPCi0vKgotI2RlZmluZSBTSUdMT1NUCQkyOQotKi8KLSNkZWZpbmUgU0lHUFdSCQkzMAotI2RlZmluZSBTSUdTWVMJCTMxCi0jZGVmaW5lCVNJR1VOVVNFRAkzMQotCi0vKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLwotI2RlZmluZSBTSUdSVE1JTgkzMgotI2RlZmluZSBTSUdSVE1BWAlfTlNJRwotCi0vKgotICogU0FfRkxBR1MgdmFsdWVzOgotICoKLSAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCi0gKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KLSAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KLSAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgotICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCi0gKgotICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQotICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgotICovCi0jZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCi0jZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCi0jZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAotI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKLSNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAotI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAotCi0jZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCi0jZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0KLS8qIAotICogc2lnYWx0c3RhY2sgY29udHJvbHMKLSAqLwotI2RlZmluZSBTU19PTlNUQUNLCTEKLSNkZWZpbmUgU1NfRElTQUJMRQkyCi0KLSNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAotI2RlZmluZSBTSUdTVEtTWgk4MTkyCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCW9sZF9zaWdzZXRfdCBzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0Jdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKLX07Ci0KLXN0cnVjdCBzaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOwotCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLXN0cnVjdCBrX3NpZ2FjdGlvbiB7Ci0Jc3RydWN0IHNpZ2FjdGlvbiBzYTsKLX07Ci0jZWxzZQotLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCi0KLXN0cnVjdCBzaWdhY3Rpb24gewotCXVuaW9uIHsKLQkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOwotCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKLQl9IF91OwotCXNpZ3NldF90IHNhX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOwotfTsKLQotI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCi0jZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLXR5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKLQl2b2lkICpzc19zcDsKLQlpbnQgc3NfZmxhZ3M7Ci0Jc2l6ZV90IHNzX3NpemU7Ci19IHN0YWNrX3Q7Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgotI3VuZGVmIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKLQotI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBfTTY4S05PTU1VX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA3ZDdkZGUxLi45ZTMwNTRlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNSArMSwyNyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic3dhYl9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJzd2FiX21tLmgiCisjaWZuZGVmIF9NNjhLX1NXQUJfSAorI2RlZmluZSBfTTY4S19TV0FCX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXworCisjaWYgZGVmaW5lZCAoX19tY2Zpc2FhcGx1c19fKSB8fCBkZWZpbmVkIChfX21jZmlzYWNfXykKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKK3sKKwlfX2FzbV9fKCJieXRlcmV2ICUwIiA6ICI9ZCIgKHZhbCkgOiAiMCIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKKyNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCisjZWxpZiAhZGVmaW5lZChfX3VDbGludXhfXykKKworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fYXJjaF9zd2FiMzIoX191MzIgdmFsKQoreworCV9fYXNtX18oInJvbHcgIzgsJTA7IHN3YXAgJTA7IHJvbHcgIzgsJTAiIDogIj1kIiAodmFsKSA6ICIwIiAodmFsKSk7CisJcmV0dXJuIHZhbDsKK30KKyNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCiAjZW5kaWYKKworI2VuZGlmIC8qIF9NNjhLX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMjFlMzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNpZm5kZWYgX002OEtfU1dBQl9ICi0jZGVmaW5lIF9NNjhLX1NXQUJfSAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKLXsKLQlfX2FzbV9fKCJyb2x3ICM4LCUwOyBzd2FwICUwOyByb2x3ICM4LCUwIiA6ICI9ZCIgKHZhbCkgOiAiMCIgKHZhbCkpOwotCXJldHVybiB2YWw7Ci19Ci0jZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgotCi0jZW5kaWYgLyogX002OEtfU1dBQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYl9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4MjI1Ny4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYl9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1NXQUJfSAotI2RlZmluZSBfTTY4S05PTU1VX1NXQUJfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQotIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX19tY2Zpc2FhcGx1c19fKSB8fCBkZWZpbmVkIChfX21jZmlzYWNfXykKLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKLXsKLQlhc20oCi0JCQkiYnl0ZXJldiAlMCIKLQkJCTogIj1kIiAodmFsKQotCQkJOiAiMCIgKHZhbCkKLQkgICApOwotCXJldHVybiB2YWw7Ci19Ci0KLSNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfU1dBQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggZGYxZDlkNC4uM2MxOTAyNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMSw1ICsxLDM3MiBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAidW5pc3RkX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInVuaXN0ZF9tbS5oIgotI2VuZGlmCisjaWZuZGVmIF9BU01fTTY4S19VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9NNjhLX1VOSVNURF9IXworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29wZW4JCSAgNQorI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKKyNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9jcmVhdAkJICA4CisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQorI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKKyNkZWZpbmUgX19OUl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9ta25vZAkJIDE0CisjZGVmaW5lIF9fTlJfY2htb2QJCSAxNQorI2RlZmluZSBfX05SX2Nob3duCQkgMTYKKyNkZWZpbmUgX19OUl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAorI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKyNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CisjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKKyNkZWZpbmUgX19OUl9zdHR5CQkgMzEKKyNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworI2RlZmluZSBfX05SX25pY2UJCSAzNAorI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisjZGVmaW5lIF9fTlJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfYnJrCQkgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgorI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9hY2N0CQkgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKKyNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pb2N0bAkJIDU0CisjZGVmaW5lIF9fTlJfZmNudGwJCSA1NQorI2RlZmluZSBfX05SX21weAkJIDU2CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3CisjZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKKyNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKKyNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NworI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5CisjZGVmaW5lIF9fTlJfbW1hcAkJIDkwCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisjZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCisjZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1CisjZGVmaW5lIF9fTlJfc3RhdAkJMTA2CisjZGVmaW5lIF9fTlJfbHN0YXQJCTEwNworI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKKyNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5CisjZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKKyNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAorI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCisjZGVmaW5lIF9fTlJfbGNob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCisjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1CisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAorI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCisjZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3CisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgorI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNworI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAorI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgorI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAorI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1CisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3CisjZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgorI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3CisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4CisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5CisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKKyNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkyODIKKyNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkyODMKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMjg0CisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMjg1CisjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkyODYKKyNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTI4NworI2RlZmluZSBfX05SX29wZW5hdAkJMjg4CisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg5CisjZGVmaW5lIF9fTlJfbWtub2RhdAkJMjkwCisjZGVmaW5lIF9fTlJfZmNob3duYXQJCTI5MQorI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjkyCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyOTMKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJMjk0CisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5NQorI2RlZmluZSBfX05SX2xpbmthdAkJMjk2CisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTcKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTgKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk5CisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMDAKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzAxCisjZGVmaW5lIF9fTlJfcHBvbGwJCTMwMgorI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMwMworI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDQKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzA1CisjZGVmaW5lIF9fTlJfc3BsaWNlCQkzMDYKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzA3CisjZGVmaW5lIF9fTlJfdGVlCQkzMDgKKyNkZWZpbmUgX19OUl92bXNwbGljZQkJMzA5CisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzEwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMzExCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMzEyCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzEzCisjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTQKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTUKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNgorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTcKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTgKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTkKKyNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMyMAorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMjEKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzIyCisjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkzMjMKKyNkZWZpbmUgX19OUl9ldmVudGZkMgkJMzI0CisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkzMjUKKyNkZWZpbmUgX19OUl9kdXAzCQkzMjYKKyNkZWZpbmUgX19OUl9waXBlMgkJMzI3CisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMjgKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBOUl9zeXNjYWxscwkJMzI5CisKKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICoKKyAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCisgKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKKyAqLworI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzE5MDI3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19VTklTVERfSF8KLSNkZWZpbmUgX0FTTV9NNjhLX1VOSVNURF9IXwotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgotICovCi0KLSNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCi0jZGVmaW5lIF9fTlJfZXhpdAkJICAxCi0jZGVmaW5lIF9fTlJfZm9yawkJICAyCi0jZGVmaW5lIF9fTlJfcmVhZAkJICAzCi0jZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAotI2RlZmluZSBfX05SX29wZW4JCSAgNQotI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKLSNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKLSNkZWZpbmUgX19OUl9jcmVhdAkJICA4Ci0jZGVmaW5lIF9fTlJfbGluawkJICA5Ci0jZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKLSNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQotI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKLSNkZWZpbmUgX19OUl90aW1lCQkgMTMKLSNkZWZpbmUgX19OUl9ta25vZAkJIDE0Ci0jZGVmaW5lIF9fTlJfY2htb2QJCSAxNQotI2RlZmluZSBfX05SX2Nob3duCQkgMTYKLSNkZWZpbmUgX19OUl9icmVhawkJIDE3Ci0jZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4Ci0jZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQotI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCi0jZGVmaW5lIF9fTlJfbW91bnQJCSAyMQotI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCi0jZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKLSNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAotI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKLSNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgotI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKLSNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4Ci0jZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQotI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKLSNkZWZpbmUgX19OUl9zdHR5CQkgMzEKLSNkZWZpbmUgX19OUl9ndHR5CQkgMzIKLSNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMwotI2RlZmluZSBfX05SX25pY2UJCSAzNAotI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKLSNkZWZpbmUgX19OUl9zeW5jCQkgMzYKLSNkZWZpbmUgX19OUl9raWxsCQkgMzcKLSNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAotI2RlZmluZSBfX05SX21rZGlyCQkgMzkKLSNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCi0jZGVmaW5lIF9fTlJfZHVwCQkgNDEKLSNkZWZpbmUgX19OUl9waXBlCQkgNDIKLSNkZWZpbmUgX19OUl90aW1lcwkJIDQzCi0jZGVmaW5lIF9fTlJfcHJvZgkJIDQ0Ci0jZGVmaW5lIF9fTlJfYnJrCQkgNDUKLSNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgotI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3Ci0jZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKLSNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKLSNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKLSNkZWZpbmUgX19OUl9hY2N0CQkgNTEKLSNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKLSNkZWZpbmUgX19OUl9sb2NrCQkgNTMKLSNkZWZpbmUgX19OUl9pb2N0bAkJIDU0Ci0jZGVmaW5lIF9fTlJfZmNudGwJCSA1NQotI2RlZmluZSBfX05SX21weAkJIDU2Ci0jZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3Ci0jZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKLSNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKLSNkZWZpbmUgX19OUl91bWFzawkJIDYwCi0jZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKLSNkZWZpbmUgX19OUl91c3RhdAkJIDYyCi0jZGVmaW5lIF9fTlJfZHVwMgkJIDYzCi0jZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0Ci0jZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1Ci0jZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKLSNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NwotI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKLSNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5Ci0jZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAotI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKLSNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKLSNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKLSNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQotI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2Ci0jZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4Ci0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQotI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKLSNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgotI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MwotI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKLSNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1Ci0jZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKLSNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NwotI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4Ci0jZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5Ci0jZGVmaW5lIF9fTlJfbW1hcAkJIDkwCi0jZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKLSNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKLSNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAotI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1Ci0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2Ci0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3Ci0jZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKLSNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQotI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAotI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCi0jZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCi0jZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKLSNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAotI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1Ci0jZGVmaW5lIF9fTlJfc3RhdAkJMTA2Ci0jZGVmaW5lIF9fTlJfbHN0YXQJCTEwNwotI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKLSNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ci0jZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKLSNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKLSNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKLSNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAotI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKLSNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKLSNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKLSNkZWZpbmUgX19OUl9pcGMJCTExNwotI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKLSNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQotI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKLSNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQotI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKLSNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKLSNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0Ci0jZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQotI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgotI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3Ci0jZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4Ci0jZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCi0jZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQotI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgotI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCi0jZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0Ci0jZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQotI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgotI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4Ci0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQotI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAotI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKLSNkZWZpbmUgX19OUl9mbG9jawkJMTQzCi0jZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAotI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKLSNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgotI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3Ci0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKLSNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKLSNkZWZpbmUgX19OUl9tbG9jawkJMTUwCi0jZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCi0jZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgotI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MwotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1Ci0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NwotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCi0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQotI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCi0jZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAotI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1Ci0jZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2Ci0jZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NwotI2RlZmluZSBfX05SX3BvbGwJCTE2OAotI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQotI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKLSNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCi0jZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MwotI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKLSNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKLSNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgotI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKLSNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4Ci0jZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKLSNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKLSNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCi0jZGVmaW5lIF9fTlJfbGNob3duCQkxODIKLSNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MwotI2RlZmluZSBfX05SX2NhcGdldAkJMTg0Ci0jZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKLSNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3Ci0jZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLwotI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KLSNkZWZpbmUgX19OUl92Zm9yawkJMTkwCi0jZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCi0jZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAotI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1Ci0jZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2Ci0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3Ci0jZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4Ci0jZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQotI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKLSNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQotI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCi0jZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0Ci0jZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1Ci0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2Ci0jZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNwotI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAotI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQotI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAotI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQotI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKLSNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAotI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQotI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgotI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNwotI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAotI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCi0jZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgotI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKLSNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAotI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1Ci0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgotI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3Ci0jZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKLSNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAotI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQotI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgotI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKLSNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0Ci0jZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQotI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgotI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNwotI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAotI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQotI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCi0jZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQotI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgotI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKLSNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAotI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1Ci0jZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKLSNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgotI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0Ci0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3Ci0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAotI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5Ci0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCi0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgotI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKLSNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAotI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1Ci0jZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKLSNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3Ci0jZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAotI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5Ci0jZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKLSNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKLSNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgotI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0Ci0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKLSNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgotI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3Ci0jZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4Ci0jZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5Ci0jZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCi0jZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkyODIKLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkyODMKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMjg0Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMjg1Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkyODYKLSNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTI4NwotI2RlZmluZSBfX05SX29wZW5hdAkJMjg4Ci0jZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg5Ci0jZGVmaW5lIF9fTlJfbWtub2RhdAkJMjkwCi0jZGVmaW5lIF9fTlJfZmNob3duYXQJCTI5MQotI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjkyCi0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyOTMKLSNkZWZpbmUgX19OUl91bmxpbmthdAkJMjk0Ci0jZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5NQotI2RlZmluZSBfX05SX2xpbmthdAkJMjk2Ci0jZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTcKLSNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTgKLSNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk5Ci0jZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMDAKLSNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzAxCi0jZGVmaW5lIF9fTlJfcHBvbGwJCTMwMgotI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMwMwotI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDQKLSNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzA1Ci0jZGVmaW5lIF9fTlJfc3BsaWNlCQkzMDYKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzA3Ci0jZGVmaW5lIF9fTlJfdGVlCQkzMDgKLSNkZWZpbmUgX19OUl92bXNwbGljZQkJMzA5Ci0jZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzEwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMzExCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMzEyCi0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzEzCi0jZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTQKLSNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTUKLSNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNgotI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTcKLSNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTgKLSNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTkKLSNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMyMAotI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMjEKLSNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzIyCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkzMjMKLSNkZWZpbmUgX19OUl9ldmVudGZkMgkJMzI0Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkzMjUKLSNkZWZpbmUgX19OUl9kdXAzCQkzMjYKLSNkZWZpbmUgX19OUl9waXBlMgkJMzI3Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMjgKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBOUl9zeXNjYWxscwkJMzI5Ci0KLSNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotCi0vKgotICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwotICoKLSAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCi0gKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKLSAqLwotI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM0YTJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19VTklTVERfSF8KLSNkZWZpbmUgX0FTTV9NNjhLX1VOSVNURF9IXwotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgotICovCi0KLSNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgICAgICAwCi0jZGVmaW5lIF9fTlJfZXhpdAkJICAxCi0jZGVmaW5lIF9fTlJfZm9yawkJICAyCi0jZGVmaW5lIF9fTlJfcmVhZAkJICAzCi0jZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAotI2RlZmluZSBfX05SX29wZW4JCSAgNQotI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKLSNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKLSNkZWZpbmUgX19OUl9jcmVhdAkJICA4Ci0jZGVmaW5lIF9fTlJfbGluawkJICA5Ci0jZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKLSNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQotI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKLSNkZWZpbmUgX19OUl90aW1lCQkgMTMKLSNkZWZpbmUgX19OUl9ta25vZAkJIDE0Ci0jZGVmaW5lIF9fTlJfY2htb2QJCSAxNQotI2RlZmluZSBfX05SX2Nob3duCQkgMTYKLSNkZWZpbmUgX19OUl9icmVhawkJIDE3Ci0jZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4Ci0jZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQotI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCi0jZGVmaW5lIF9fTlJfbW91bnQJCSAyMQotI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCi0jZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKLSNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAotI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKLSNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgotI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKLSNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4Ci0jZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQotI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKLSNkZWZpbmUgX19OUl9zdHR5CQkgMzEKLSNkZWZpbmUgX19OUl9ndHR5CQkgMzIKLSNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMwotI2RlZmluZSBfX05SX25pY2UJCSAzNAotI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKLSNkZWZpbmUgX19OUl9zeW5jCQkgMzYKLSNkZWZpbmUgX19OUl9raWxsCQkgMzcKLSNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAotI2RlZmluZSBfX05SX21rZGlyCQkgMzkKLSNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCi0jZGVmaW5lIF9fTlJfZHVwCQkgNDEKLSNkZWZpbmUgX19OUl9waXBlCQkgNDIKLSNkZWZpbmUgX19OUl90aW1lcwkJIDQzCi0jZGVmaW5lIF9fTlJfcHJvZgkJIDQ0Ci0jZGVmaW5lIF9fTlJfYnJrCQkgNDUKLSNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgotI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3Ci0jZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKLSNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKLSNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKLSNkZWZpbmUgX19OUl9hY2N0CQkgNTEKLSNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKLSNkZWZpbmUgX19OUl9sb2NrCQkgNTMKLSNkZWZpbmUgX19OUl9pb2N0bAkJIDU0Ci0jZGVmaW5lIF9fTlJfZmNudGwJCSA1NQotI2RlZmluZSBfX05SX21weAkJIDU2Ci0jZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3Ci0jZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKLSNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKLSNkZWZpbmUgX19OUl91bWFzawkJIDYwCi0jZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKLSNkZWZpbmUgX19OUl91c3RhdAkJIDYyCi0jZGVmaW5lIF9fTlJfZHVwMgkJIDYzCi0jZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0Ci0jZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1Ci0jZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKLSNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NwotI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKLSNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5Ci0jZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAotI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKLSNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKLSNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKLSNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQotI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2Ci0jZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4Ci0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQotI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKLSNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgotI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MwotI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKLSNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1Ci0jZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKLSNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NwotI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4Ci0jZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5Ci0jZGVmaW5lIF9fTlJfbW1hcAkJIDkwCi0jZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKLSNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKLSNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAotI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1Ci0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2Ci0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3Ci0jZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKLSNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQotI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAotI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCi0jZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCi0jZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKLSNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAotI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1Ci0jZGVmaW5lIF9fTlJfc3RhdAkJMTA2Ci0jZGVmaW5lIF9fTlJfbHN0YXQJCTEwNwotI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKLSNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ci0jZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKLSNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKLSNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKLSNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAotI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKLSNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKLSNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKLSNkZWZpbmUgX19OUl9pcGMJCTExNwotI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKLSNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQotI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKLSNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQotI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKLSNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKLSNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0Ci0jZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQotI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgotI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3Ci0jZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4Ci0jZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCi0jZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQotI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgotI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCi0jZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0Ci0jZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQotI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgotI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4Ci0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQotI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAotI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKLSNkZWZpbmUgX19OUl9mbG9jawkJMTQzCi0jZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAotI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKLSNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgotI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3Ci0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKLSNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKLSNkZWZpbmUgX19OUl9tbG9jawkJMTUwCi0jZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCi0jZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgotI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MwotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1Ci0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NwotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCi0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQotI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCi0jZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAotI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1Ci0jZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2Ci0jZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NwotI2RlZmluZSBfX05SX3BvbGwJCTE2OAotI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQotI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKLSNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCi0jZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MwotI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKLSNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKLSNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgotI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKLSNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4Ci0jZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKLSNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKLSNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCi0jZGVmaW5lIF9fTlJfbGNob3duCQkxODIKLSNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MwotI2RlZmluZSBfX05SX2NhcGdldAkJMTg0Ci0jZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKLSNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3Ci0jZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLwotI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KLSNkZWZpbmUgX19OUl92Zm9yawkJMTkwCi0jZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCi0jZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAotI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1Ci0jZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2Ci0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3Ci0jZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4Ci0jZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQotI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKLSNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQotI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCi0jZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0Ci0jZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1Ci0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2Ci0jZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNwotI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAotI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQotI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAotI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQotI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKLSNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAotI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQotI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgotI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNwotI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAotI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCi0jZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgotI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKLSNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAotI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1Ci0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgotI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3Ci0jZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKLSNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAotI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQotI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgotI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKLSNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0Ci0jZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQotI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgotI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNwotI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAotI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQotI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCi0jZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQotI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgotI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKLSNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAotI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1Ci0jZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKLSNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgotI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0Ci0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3Ci0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAotI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5Ci0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCi0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgotI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKLSNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAotI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1Ci0jZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKLSNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3Ci0jZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAotI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5Ci0jZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKLSNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKLSNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgotI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0Ci0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKLSNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgotI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3Ci0jZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4Ci0jZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5Ci0jZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCi0jZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkyODIKLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkyODMKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMjg0Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMjg1Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkyODYKLSNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTI4NwotI2RlZmluZSBfX05SX29wZW5hdAkJMjg4Ci0jZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg5Ci0jZGVmaW5lIF9fTlJfbWtub2RhdAkJMjkwCi0jZGVmaW5lIF9fTlJfZmNob3duYXQJCTI5MQotI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjkyCi0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyOTMKLSNkZWZpbmUgX19OUl91bmxpbmthdAkJMjk0Ci0jZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5NQotI2RlZmluZSBfX05SX2xpbmthdAkJMjk2Ci0jZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTcKLSNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTgKLSNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk5Ci0jZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMDAKLSNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzAxCi0jZGVmaW5lIF9fTlJfcHBvbGwJCTMwMgotI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMwMwotI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDQKLSNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzA1Ci0jZGVmaW5lIF9fTlJfc3BsaWNlCQkzMDYKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzA3Ci0jZGVmaW5lIF9fTlJfdGVlCQkzMDgKLSNkZWZpbmUgX19OUl92bXNwbGljZQkJMzA5Ci0jZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzEwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMzExCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMzEyCi0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzEzCi0jZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTQKLSNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTUKLSNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNgotI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTcKLSNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTgKLSNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTkKLSNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMyMAotI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMjEKLSNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzIyCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkzMjMKLSNkZWZpbmUgX19OUl9ldmVudGZkMgkJMzI0Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkzMjUKLSNkZWZpbmUgX19OUl9kdXAzCQkzMjYKLSNkZWZpbmUgX19OUl9waXBlMgkJMzI3Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMjgKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBOUl9zeXNjYWxscwkJMzI5Ci0KLSNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotCi0vKgotICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwotICoKLSAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCi0gKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKLSAqLwotI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luc3RhbGwuc2ggYi9hcmNoL202OGsvaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzZiYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2luc3RhbGwuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1IGJ5IExpbnVzIFRvcnZhbGRzCisjCisjIEFkYXB0ZWQgZnJvbSBjb2RlIGluIGFyY2gvaTM4Ni9ib290L01ha2VmaWxlIGJ5IEguIFBldGVyIEFudmluCisjCisjICJtYWtlIGluc3RhbGwiIHNjcmlwdCBmb3IgbTY4ayBhcmNoaXRlY3R1cmUKKyMKKyMgQXJndW1lbnRzOgorIyAgICQxIC0ga2VybmVsIHZlcnNpb24KKyMgICAkMiAtIGtlcm5lbCBpbWFnZSBmaWxlCisjICAgJDMgLSBrZXJuZWwgbWFwIGZpbGUKKyMgICAkNCAtIGRlZmF1bHQgaW5zdGFsbCBwYXRoIChibGFuayBpZiByb290IGRpcmVjdG9yeSkKKyMKKwordmVyaWZ5ICgpIHsKKwlpZiBbICEgLWYgIiQxIiBdOyB0aGVuCisJCWVjaG8gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWVjaG8gIiAqKiogTWlzc2luZyBmaWxlOiAkMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWVjaG8gJyAqKiogWW91IG5lZWQgdG8gcnVuICJtYWtlIiBiZWZvcmUgIm1ha2UgaW5zdGFsbCIuJyAxPiYyCisJCWVjaG8gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWV4aXQgMQorCWZpCit9CisKKyMgTWFrZSBzdXJlIHRoZSBmaWxlcyBhY3R1YWxseSBleGlzdAordmVyaWZ5ICIkMiIKK3ZlcmlmeSAiJDMiCisKKyMgVXNlciBtYXkgaGF2ZSBhIGN1c3RvbSBpbnN0YWxsIHNjcmlwdAorCitpZiBbIC14IH4vYmluLyR7Q1JPU1NfQ09NUElMRX1pbnN0YWxsa2VybmVsIF07IHRoZW4gZXhlYyB+L2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCAiJEAiOyBmaQoraWYgWyAteCAvc2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCBdOyB0aGVuIGV4ZWMgL3NiaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgIiRAIjsgZmkKKworIyBEZWZhdWx0IGluc3RhbGwgLSBzYW1lIGFzIG1ha2UgemxpbG8KKworaWYgWyAtZiAkNC92bWxpbnV6IF07IHRoZW4KKwltdiAkNC92bWxpbnV6ICQ0L3ZtbGludXoub2xkCitmaQorCitpZiBbIC1mICQ0L1N5c3RlbS5tYXAgXTsgdGhlbgorCW12ICQ0L1N5c3RlbS5tYXAgJDQvU3lzdGVtLm9sZAorZmkKKworY2F0ICQyID4gJDQvdm1saW51egorY3AgJDMgJDQvU3lzdGVtLm1hcAorCitzeW5jCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCA5OGI2YmNmLi5iZTAxNzk4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKQEAgLTIyLDYgKzIyLDcgQEAKIC8qIGtleWIgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTQzLDYgKzQ0LDEwIEBACiAjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgogCisvKiBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqLworCisjZGVmaW5lIFNXSU1fSU9fU0laRSAweDIwMDAJLyogU1dJTSBJTyByZXNvdXJjZSBzaXplICovCisKIC8qIE1hYyBib290aW5mbyBzdHJ1Y3QgKi8KIAogc3RydWN0IG1hY19ib290ZXJfZGF0YSBtYWNfYmlfZGF0YTsKQEAgLTIyNCw3ICsyMjksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KIAl9LAogCiAJLyoKQEAgLTIzOSw3ICsyNDUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlYLAogCQkubmFtZQkJPSAiSUl4IiwKQEAgLTI0Nyw3ICsyNTQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJQ1gsCiAJCS5uYW1lCQk9ICJJSWN4IiwKQEAgLTI1NSw3ICsyNjMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1NFMzAsCiAJCS5uYW1lCQk9ICJTRS8zMCIsCkBAIC0yNjMsNyArMjcyLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtMjgwLDcgKzI5MCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUZYLAogCQkubmFtZQkJPSAiSUlmeCIsCkBAIC0yODgsNyArMjk5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlTSSwKIAkJLm5hbWUJCT0gIklJc2kiLApAQCAtMjk2LDcgKzMwOCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZJLAogCQkubmFtZQkJPSAiSUl2aSIsCkBAIC0zMDQsNyArMzE3LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVlgsCiAJCS5uYW1lCQk9ICJJSXZ4IiwKQEAgLTMxMiw3ICszMjYsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTMyNiw3ICszNDEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQ0NMLAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyIsCkBAIC0zMzQsNyArMzUwLDkgQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVU30sCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwl9LAogCiAJLyoKIAkgKglTb21lIE1hYyBMQyBtYWNoaW5lcy4gQmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBJSWNpLCBBREIgbGlrZSBJSXNpCkBAIC0zNDcsNyArMzY1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUksCiAJCS5uYW1lCQk9ICJMQyBJSSIsCkBAIC0zNTUsNyArMzc0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUlJLAogCQkubmFtZQkJPSAiTEMgSUlJIiwKQEAgLTM2Myw3ICszODMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTM4Myw3ICs0MDQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYwNV9BQ0MsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjA1IiwKQEAgLTM5MSw3ICs0MTMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYxMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MTAiLApAQCAtNDAwLDcgKzQyMyw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjMwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYzMCIsCkBAIC00MTAsNyArNDM0LDggQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjUwLAogCQkubmFtZQkJPSAiUXVhZHJhIDY1MCIsCkBAIC00MTksNyArNDQ0LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwKIAkvKglUaGUgUTcwMCBkb2VzIGhhdmUgYSBOUyBTb25pYyAqLwogCXsKQEAgLTQzMCw3ICs0NTYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODAwIiwKQEAgLTQzOSw3ICs0NjYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTg0MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4NDBBViIsCkBAIC00NDgsNyArNDc2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDkwMCIsCkBAIC00NTcsNyArNDg2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTk1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA5NTAiLApAQCAtNDY2LDcgKzQ5Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCiAJfSwKIAogCS8qCkBAIC00ODAsNyArNTExLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzUsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKQEAgLTQ4OCw3ICs1MjAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1RiwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLApAQCAtNDk2LDcgKzUyOSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1MjAsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTIwIiwKQEAgLTUwNCw3ICs1MzgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU1MCwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA1NTAiLApAQCAtNTEyLDcgKzU0Nyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAJLyogVGhlc2UgaGF2ZSB0aGUgY29tbSBzbG90LCBhbmQgdGhlcmVmb3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBTT05JQyBldGhlcm5ldCAqLwogCXsKQEAgLTUyMyw3ICs1NTksOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTg4LAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTg4IiwKQEAgLTUzMyw3ICs1NzAsOCBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfVFYsCiAJCS5uYW1lCQk9ICJUViIsCkBAIC01NDEsNyArNTc5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDYwMCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDYwMCIsCkBAIC01NDksNyArNTg4LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC01NjUsNyArNjA1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NTAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY1MCIsCkBAIC01NzQsNyArNjE1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NjAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY2MEFWIiwKQEAgLTU4Myw3ICs2MjUsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCiAJfSwKIAogCS8qCkBAIC01OTksNyArNjQyLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTQ1LAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE0NSIsCkBAIC02MDcsNyArNjUxLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE1MCIsCkBAIC02MTYsNyArNjYxLDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9QQiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTYwIiwKQEAgLTYyNCw3ICs2NzAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1IiwKQEAgLTYzMiw3ICs2NzksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjVDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NWMiLApAQCAtNjQwLDcgKzY4OCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE3MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNzAiLApAQCAtNjQ4LDcgKzY5Nyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODAiLApAQCAtNjU2LDcgKzcwNiw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwYyIsCkBAIC02NjQsNyArNzE1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTkwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE5MCIsCkBAIC02NzMsNyArNzI1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9CQUJPT04sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCNTIwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDUyMCIsCkBAIC02ODIsNyArNzM1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC03MDIsNyArNzU2LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjIzMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjMwIiwKQEAgLTcxMCw3ICs3NjUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNTAiLApAQCAtNzE4LDcgKzc3NCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNzBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNzBjIiwKQEAgLTcyNiw3ICs3ODMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODAiLApAQCAtNzM0LDcgKzc5Miw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODBjIiwKQEAgLTc0Miw3ICs4MDEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC04MTUsMyArODc1LDQyIEBACiAJc3RyY3B5KHN0ciwgIk1hY2ludG9zaCAiKTsKIAlzdHJjYXQoc3RyLCBtYWNpbnRvc2hfY29uZmlnLT5uYW1lKTsKIH0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzd2ltX3Jlc291cmNlc1sxXTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3dpbV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInN3aW0iLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3dpbV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHN3aW1fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc3dpbV9kZXZpY2UKK307CisKK2ludCBfX2luaXQgbWFjX3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwl1OCAqc3dpbV9iYXNlOworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5mbG9wcHlfdHlwZSkgeworCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIxOgorCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxRTAwMCk7CisJCWJyZWFrOworCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIyOgorCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxNjAwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXN3aW1fcmVzb3VyY2VzWzBdLm5hbWUgPSAic3dpbS1yZWdzIjsKKwlzd2ltX3Jlc291cmNlc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3Qpc3dpbV9iYXNlOworCXN3aW1fcmVzb3VyY2VzWzBdLmVuZCA9IChyZXNvdXJjZV9zaXplX3QpKHN3aW1fYmFzZSArIFNXSU1fSU9fU0laRSk7CisJc3dpbV9yZXNvdXJjZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtYWNfcGxhdGZvcm1fZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShtYWNfcGxhdGZvcm1fZGV2aWNlcykpOworfQorCithcmNoX2luaXRjYWxsKG1hY19wbGF0Zm9ybV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvdmlhLmMgYi9hcmNoL202OGsvbWFjL3ZpYS5jCmluZGV4IDdkOTdiYTUuLjExYmNlM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvdmlhLmMKKysrIGIvYXJjaC9tNjhrL21hYy92aWEuYwpAQCAtNjQ1LDMgKzY0NSwxMiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKwordm9pZCB2aWExX3NldF9oZWFkKGludCBoZWFkKQoreworCWlmIChoZWFkID09IDApCisJCXZpYTFbdkJ1ZkFdICY9IH5WSUExQV92SGVhZFNlbDsKKwllbHNlCisJCXZpYTFbdkJ1ZkFdIHw9IFZJQTFBX3ZIZWFkU2VsOworfQorRVhQT1JUX1NZTUJPTCh2aWExX3NldF9oZWFkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKaW5kZXggZDAxYTVkMi4uZGI5MDI1NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KICNpbmNsdWRlIDxhc20vbWNmc2ltLmg+CiAjaW5jbHVkZSA8YXNtL21jZmRtYS5oPgorI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jCmluZGV4IDA2ZDg4N2MuLjg1NWZjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYwpAQCAtNDksOCArNDksMzkgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTIweF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTIweF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDMwMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgzMDAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDM2LAorCQkuZW5kCQk9IDY0ICsgMzYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDAsCisJCS5lbmQJCT0gNjQgKyA0MCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MiwKKwkJLmVuZAkJPSA2NCArIDQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjB4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyMHhfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjB4X2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyMHhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjB4X3VhcnQsCisJJm01MjB4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDMsNiArMTM0LDMwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTIweF9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisJdTggdjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlYigweDQsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAzNik7CisJd3JpdGViKDB4NCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDQwKTsKKwl3cml0ZWIoMHg0LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgNDIpOworCisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weDAwMDFGRkYwOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSAqLworCXYgPSByZWFkYihNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQyk7CisJd3JpdGViKHYgfCAweGYwLCBNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQyk7CisKKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpOworCXdyaXRlYih2IHwgMHgwZiwgTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKgogICogIFByb2dyYW0gdGhlIHZlY3RvciB0byBiZSBhbiBhdXRvLXZlY3RvcmVkLgogICovCkBAIC0xMTgsNiArMTczLDcgQEAKIHsKIAltYWNoX3Jlc2V0ID0gY29sZGZpcmVfcmVzZXQ7CiAJbTUyMHhfdWFydHNfaW5pdCgpOworCW01MjB4X2ZlY19pbml0KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYwppbmRleCAxM2YwMjYxLi43NDEzM2YyIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKQEAgLTUwLDggKzUwLDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyM3hfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyM3hfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjMsCisJCS5lbmQJCT0gNjQgKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyNywKKwkJLmVuZAkJPSA2NCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI5LAorCQkuZW5kCQk9IDY0ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyM3hfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTIzeF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUyM3hfZmVjX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTIzeF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyM3hfdWFydCwKKwkmbTUyM3hfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgzLDYgKzExNCwyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyM3hfZmVjX2luaXQodm9pZCkKK3sKKwl1MzIgaW1yOworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJd3JpdGViKDB4MjgsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyMyk7CisJd3JpdGViKDB4MjcsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyNyk7CisJd3JpdGViKDB4MjYsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyOSk7CisKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4ZjsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKKwlpbXIgJj0gfjB4ZmY4MDAwMDE7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMTAzLDYgKzE1Myw3IEBACiAJbWNmX2Rpc2FibGVhbGwoKTsKIAltYWNoX3Jlc2V0ID0gY29sZGZpcmVfcmVzZXQ7CiAJbTUyM3hfdWFydHNfaW5pdCgpOworCW01MjN4X2ZlY19pbml0KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYwppbmRleCAyMzBiYWU2Li5lMDQ5MjQ1IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMKQEAgLTU1LDggKzU1LDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyNzJfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyNzJfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHg4NDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDg0MCArIDB4MWNmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA4NiwKKwkJLmVuZAkJPSA4NiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gODcsCisJCS5lbmQJCT0gODcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDg4LAorCQkuZW5kCQk9IDg4LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjcyX2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyNzJfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjcyX2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyNzJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjcyX3VhcnQsCisJJm01MjcyX2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05MSw2ICsxMjIsMjIgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01MjcyX2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWltciA9IHJlYWRsKE1DRl9NQkFSICsgTUNGU0lNX0lDUjMpOworCWltciA9IChpbXIgJiB+MHgwMDAwMGZmZikgfCAweDAwMDAwZGRkOworCXdyaXRlbChpbXIsIE1DRl9NQkFSICsgTUNGU0lNX0lDUjMpOworCisJaW1yID0gcmVhZGwoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7CisJaW1yID0gKGltciAmIH4weDBmMDAwMDAwKSB8IDB4MGQwMDAwMDA7CisJd3JpdGVsKGltciwgTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCSppY3JwOwpAQCAtMTU1LDYgKzIwMiw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01MjcyX3VhcnRzX2luaXQoKTsKKwltNTI3Ml9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01MjcyX2RldmljZXMsIEFSUkFZX1NJWkUobTUyNzJfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKaW5kZXggNzNjZDFhZS4uNDkzNDNmYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCkBAIC01MCw4ICs1MCw3MyBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01Mjd4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjd4X2ZlYzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDEwMDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDEwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyMywKKwkJLmVuZAkJPSA2NCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI3LAorCQkuZW5kCQk9IDY0ICsgMjcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjksCisJCS5lbmQJCT0gNjQgKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjd4X2ZlYzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDE4MDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDE4MDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gMTI4ICsgMjMsCisJCS5lbmQJCT0gMTI4ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDEyOCArIDI3LAorCQkuZW5kCQk9IDEyOCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSAxMjggKyAyOSwKKwkJLmVuZAkJPSAxMjggKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI3eF9mZWNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJmZWMiLAorCQkuaWQJCT0gMCwKKwkJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG01Mjd4X2ZlYzBfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlCT0gbTUyN3hfZmVjMF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJmZWMiLAorCQkuaWQJCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG01Mjd4X2ZlYzFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlCT0gbTUyN3hfZmVjMV9yZXNvdXJjZXMsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTI3eF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyN3hfdWFydCwKKwkmbTUyN3hfZmVjWzBdLAorI2lmZGVmIENPTkZJR19GRUMyCisJJm01Mjd4X2ZlY1sxXSwKKyNlbmRpZgogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk3LDYgKzE2Miw1MSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyN3hfZmVjX2lycV9pbml0KGludCBucikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJdTMyIGltcjsKKworCWJhc2UgPSBNQ0ZfSVBTQkFSICsgKG5yID8gTUNGSUNNX0lOVEMxIDogTUNGSUNNX0lOVEMwKTsKKworCXdyaXRlYigweDI4LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjMpOworCXdyaXRlYigweDI3LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjcpOworCXdyaXRlYigweDI2LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjkpOworCisJaW1yID0gcmVhZGwoYmFzZSArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weGY7CisJd3JpdGVsKGltciwgYmFzZSArIE1DRklOVENfSU1SSCk7CisJaW1yID0gcmVhZGwoYmFzZSArIE1DRklOVENfSU1STCk7CisJaW1yICY9IH4weGZmODAwMDAxOworCXdyaXRlbChpbXIsIGJhc2UgKyBNQ0ZJTlRDX0lNUkwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyN3hfZmVjX2luaXQodm9pZCkKK3sKKwl1MTYgcGFyOworCXU4IHY7CisKKwltNTI3eF9mZWNfaXJxX2luaXQoMCk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMwICovCisJcGFyID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl3cml0ZXcocGFyIHwgMHhmMDAsIE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyAweDEwMDA3OCk7CisJd3JpdGViKHYgfCAweGMwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNzgpOworCisjaWZkZWYgQ09ORklHX0ZFQzIKKwltNTI3eF9mZWNfaXJxX2luaXQoMSk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMxICovCisJcGFyID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl3cml0ZXcocGFyIHwgMHhhMCwgTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIDB4MTAwMDc5KTsKKwl3cml0ZWIodiB8IDB4YzAsIE1DRl9JUFNCQVIgKyAweDEwMDA3OSk7CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogdm9pZCBtY2ZfZGlzYWJsZWFsbCh2b2lkKQogewogCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpKSA9IDB4ZmZmZmZmZmY7CkBAIC0xMTYsMTMgKzIyNiwxNCBAQAogewogCW1jZl9kaXNhYmxlYWxsKCk7CiAJbWFjaF9yZXNldCA9IGNvbGRmaXJlX3Jlc2V0OworCW01Mjd4X3VhcnRzX2luaXQoKTsKKwltNTI3eF9mZWNfaW5pdCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewotCW01Mjd4X3VhcnRzX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTI3eF9kZXZpY2VzLCBBUlJBWV9TSVpFKG01Mjd4X2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCmluZGV4IGRmZGI1YzJlLi5iZWU1MjZmIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KICNpbmNsdWRlIDxhc20vbWNmc2ltLmg+CiAjaW5jbHVkZSA8YXNtL21jZnVhcnQuaD4KLSNpbmNsdWRlIDxhc20vbWNmcXNwaS5oPgogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KQEAgLTMzLDIzMyArMzIsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdm9pZCBjb2xkZmlyZV9yZXNldCh2b2lkKTsKLXN0YXRpYyB2b2lkIGNvbGRmaXJlX3FzcGlfY3NfY29udHJvbCh1OCBjcywgdTggY29tbWFuZCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUEkpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19XSUxERklSRSkKLSNkZWZpbmUgU1BJX05VTV9DSElQU0VMRUNUUyAJMHgwMgotI2RlZmluZSBTUElfUEFSX1ZBTAkJMHgwNyAgLyogRW5hYmxlIERJTiwgRE9VVCwgQ0xLICovCi0jZGVmaW5lIFNQSV9DU19NQVNLCQkweDE4Ci0KLSNkZWZpbmUgRkxBU0hfQkxPQ0tTSVpFCQkoMTAyNCo2NCkKLSNkZWZpbmUgRkxBU0hfTlVNQkxPQ0tTCQkxNgotI2RlZmluZSBGTEFTSF9UWVBFCQkibTI1cDgwIgotCi0jZGVmaW5lIE0yNVA4MF9DUwkJMAotI2RlZmluZSBNTUNfQ1MJCQkxCi0KLSNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzdG0yNXBfcGFydGl0aW9uc1tdID0gewotCS8qIHNmbGFzaCAqLwotCVswXSA9IHsKLQkJLm5hbWUgPSAic3RtMjVwODAiLAotCQkub2Zmc2V0ID0gMHgwMDAwMDAwMCwKLQkJLnNpemUgPSBGTEFTSF9CTE9DS1NJWkUgKiBGTEFTSF9OVU1CTE9DS1MsCi0JCS5tYXNrX2ZsYWdzID0gMAotCX0KLX07Ci0KLSNlbmRpZgotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19XSUxERklSRU1PRCkKLQotI2RlZmluZSBTUElfTlVNX0NISVBTRUxFQ1RTCTB4MDgKLSNkZWZpbmUgU1BJX1BBUl9WQUwJCTB4MDcgIC8qIEVuYWJsZSBESU4sIERPVVQsIENMSyAqLwotI2RlZmluZSBTUElfQ1NfTUFTSwkJMHg3OAotCi0jZGVmaW5lIEZMQVNIX0JMT0NLU0laRQkJKDEwMjQqNjQpCi0jZGVmaW5lIEZMQVNIX05VTUJMT0NLUwkJNjQKLSNkZWZpbmUgRkxBU0hfVFlQRQkJIm0yNXAzMiIKLS8qIFJlc2VydmUgMU0gZm9yIHRoZSBrZXJuZWwgcGFyaXRpb24gKi8KLSNkZWZpbmUgRkxBU0hfS0VSTkVMX1NJWkUgICAoMTAyNCAqIDEwMjQpCi0KLSNkZWZpbmUgTTI1UDgwX0NTCQk1Ci0jZGVmaW5lIE1NQ19DUwkJCTYKLQotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHN0bTI1cF9wYXJ0aXRpb25zW10gPSB7Ci0JLyogc2ZsYXNoICovCi0JWzBdID0gewotCQkubmFtZSA9ICJrZXJuZWwiLAotCQkub2Zmc2V0ID0gRkxBU0hfQkxPQ0tTSVpFICogRkxBU0hfTlVNQkxPQ0tTIC0gRkxBU0hfS0VSTkVMX1NJWkUsCi0JCS5zaXplID0gRkxBU0hfS0VSTkVMX1NJWkUsCi0JCS5tYXNrX2ZsYWdzID0gMAotCX0sCi0JWzFdID0gewotCQkubmFtZSA9ICJpbWFnZSIsCi0JCS5vZmZzZXQgPSAweDAwMDAwMDAwLAotCQkuc2l6ZSA9IEZMQVNIX0JMT0NLU0laRSAqIEZMQVNIX05VTUJMT0NLUyAtIEZMQVNIX0tFUk5FTF9TSVpFLAotCQkubWFza19mbGFncyA9IDAKLQl9LAotCVsyXSA9IHsKLQkJLm5hbWUgPSAiYWxsIiwKLQkJLm9mZnNldCA9IDB4MDAwMDAwMDAsCi0JCS5zaXplID0gRkxBU0hfQkxPQ0tTSVpFICogRkxBU0hfTlVNQkxPQ0tTLAotCQkubWFza19mbGFncyA9IDAKLQl9Ci19OwotI2VuZGlmCi0KLSNlbHNlCi0jZGVmaW5lIFNQSV9OVU1fQ0hJUFNFTEVDVFMgCTB4MDQKLSNkZWZpbmUgU1BJX1BBUl9WQUwJCTB4N0YgIC8qIEVuYWJsZSBESU4sIERPVVQsIENMSywgQ1MwIC0gQ1M0ICovCi0jZW5kaWYKLQotI2lmZGVmIE1NQ19DUwotc3RhdGljIHN0cnVjdCBjb2xkZmlyZV9zcGlfY2hpcCBmbGFzaF9jaGlwX2luZm8gPSB7Ci0JLm1vZGUgPSBTUElfTU9ERV8wLAotCS5iaXRzX3Blcl93b3JkID0gMTYsCi0JLmRlbF9jc190b19jbGsgPSAxNywKLQkuZGVsX2FmdGVyX3RyYW5zID0gMSwKLQkudm9pZF93cml0ZV9kYXRhID0gMAotfTsKLQotc3RhdGljIHN0cnVjdCBjb2xkZmlyZV9zcGlfY2hpcCBtbWNfY2hpcF9pbmZvID0gewotCS5tb2RlID0gU1BJX01PREVfMCwKLQkuYml0c19wZXJfd29yZCA9IDE2LAotCS5kZWxfY3NfdG9fY2xrID0gMTcsCi0JLmRlbF9hZnRlcl90cmFucyA9IDEsCi0JLnZvaWRfd3JpdGVfZGF0YSA9IDB4RkZGRgotfTsKLSNlbmRpZgotCi0jaWZkZWYgTTI1UDgwX0NTCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgc3RtMjVwODBfcGxhdGZvcm1fZGF0YSA9IHsKLQkubmFtZSA9ICJTVCBNMjVQODAgU1BJIEZsYXNoIGNoaXAiLAotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotCS5wYXJ0cyA9IHN0bTI1cF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cyA9IHNpemVvZihzdG0yNXBfcGFydGl0aW9ucykgLyBzaXplb2YoKnN0bTI1cF9wYXJ0aXRpb25zKSwKLSNlbmRpZgotCS50eXBlID0gRkxBU0hfVFlQRQotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKLSNpZmRlZiBNMjVQODBfQ1MKLQl7Ci0JCS5tb2RhbGlhcyA9ICJtMjVwODAiLAotCQkubWF4X3NwZWVkX2h6ID0gMTYwMDAwMDAsCi0JCS5idXNfbnVtID0gMSwKLQkJLmNoaXBfc2VsZWN0ID0gTTI1UDgwX0NTLAotCQkucGxhdGZvcm1fZGF0YSA9ICZzdG0yNXA4MF9wbGF0Zm9ybV9kYXRhLAotCQkuY29udHJvbGxlcl9kYXRhID0gJmZsYXNoX2NoaXBfaW5mbwotCX0sCi0jZW5kaWYKLSNpZmRlZiBNTUNfQ1MKLQl7Ci0JCS5tb2RhbGlhcyA9ICJtbWNfc3BpIiwKLQkJLm1heF9zcGVlZF9oeiA9IDE2MDAwMDAwLAotCQkuYnVzX251bSA9IDEsCi0JCS5jaGlwX3NlbGVjdCA9IE1NQ19DUywKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZtbWNfY2hpcF9pbmZvCi0JfQotI2VuZGlmCi19OwotCi1zdGF0aWMgc3RydWN0IGNvbGRmaXJlX3NwaV9tYXN0ZXIgY29sZGZpcmVfbWFzdGVyX2luZm8gPSB7Ci0JLmJ1c19udW0gPSAxLAotCS5udW1fY2hpcHNlbGVjdCA9IFNQSV9OVU1fQ0hJUFNFTEVDVFMsCi0JLmlycV9zb3VyY2UgPSBNQ0Y1MjgyX1FTUElfSVJRX1NPVVJDRSwKLQkuaXJxX3ZlY3RvciA9IE1DRjUyODJfUVNQSV9JUlFfVkVDVE9SLAotCS5pcnFfbWFzayA9ICgoMHgwMSA8PCBNQ0Y1MjgyX1FTUElfSVJRX1NPVVJDRSkgfCAweDAxKSwKLQkuaXJxX2xwID0gMHgyQiwgIC8qIExldmVsIDUgYW5kIFByaW9yaXR5IDMgKi8KLQkucGFyX3ZhbCA9IFNQSV9QQVJfVkFMLAotCS5jc19jb250cm9sID0gY29sZGZpcmVfcXNwaV9jc19jb250cm9sLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2xkZmlyZV9zcGlfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZSA9ICJxc3BpLXBhciIsCi0JCS5zdGFydCA9IE1DRjUyODJfUVNQSV9QQVIsCi0JCS5lbmQgPSBNQ0Y1MjgyX1FTUElfUEFSLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQotCX0sCi0KLQlbMV0gPSB7Ci0JCS5uYW1lID0gInFzcGktbW9kdWxlIiwKLQkJLnN0YXJ0ID0gTUNGNTI4Ml9RU1BJX1FNUiwKLQkJLmVuZCA9IE1DRjUyODJfUVNQSV9RTVIgKyAweDE4LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQotCX0sCi0KLQlbMl0gPSB7Ci0JCS5uYW1lID0gInFzcGktaW50LWxldmVsIiwKLQkJLnN0YXJ0ID0gTUNGNTI4Ml9JTlRDMCArIE1DRklOVENfSUNSMCArIE1DRjUyODJfUVNQSV9JUlFfU09VUkNFLAotCQkuZW5kID0gTUNGNTI4Ml9JTlRDMCArIE1DRklOVENfSUNSMCArIE1DRjUyODJfUVNQSV9JUlFfU09VUkNFLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQotCX0sCi0KLQlbM10gPSB7Ci0JCS5uYW1lID0gInFzcGktaW50LW1hc2siLAotCQkuc3RhcnQgPSBNQ0Y1MjgyX0lOVEMwICsgTUNGSU5UQ19JTVJMLAotCQkuZW5kID0gTUNGNTI4Ml9JTlRDMCArIE1DRklOVENfSU1STCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb2xkZmlyZV9zcGkgPSB7Ci0JLm5hbWUgPSAic3BpX2NvbGRmaXJlIiwKLQkuaWQgPSAtMSwKLQkucmVzb3VyY2UgPSBjb2xkZmlyZV9zcGlfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShjb2xkZmlyZV9zcGlfcmVzb3VyY2VzKSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZjb2xkZmlyZV9tYXN0ZXJfaW5mbywKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBjb2xkZmlyZV9xc3BpX2NzX2NvbnRyb2wodTggY3MsIHU4IGNvbW1hbmQpCi17Ci0JdTggY3NfYml0ID0gKCgweDAxIDw8IGNzKSA8PCAzKSAmIFNQSV9DU19NQVNLOwotCi0jaWYgZGVmaW5lZChDT05GSUdfV0lMREZJUkUpCi0JdTggY3NfbWFzayA9IH4oKCgweDAxIDw8IGNzKSA8PCAzKSAmIFNQSV9DU19NQVNLKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1dJTERGSVJFTU9EKQotCXU4IGNzX21hc2sgPSAoY3MgPDwgMykgJiBTUElfQ1NfTUFTSzsKLSNlbmRpZgotCi0JLyoKLQkgKiBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgY2hpcCBzZWxlY3QgaXMgbm90Ci0JICogb25lIG9mIHRoZSBwb3J0IHFzIHBpbnMuCi0JICovCi0JaWYgKGNvbW1hbmQgJiBRU1BJX0NTX0lOSVQpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19XSUxERklSRSkKLQkJTUNGNTI4Ml9HUElPX0REUlFTICB8PSBjc19iaXQ7Ci0JCU1DRjUyODJfR1BJT19QUVNQQVIgJj0gfmNzX2JpdDsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfV0lMREZJUkVNT0QpCi0JCU1DRjUyODJfR1BJT19ERFJRUyAgfD0gU1BJX0NTX01BU0s7Ci0JCU1DRjUyODJfR1BJT19QUVNQQVIgJj0gflNQSV9DU19NQVNLOwotI2VuZGlmCi0JfQotCi0JaWYgKGNvbW1hbmQgJiBRU1BJX0NTX0FTU0VSVCkgewotCQlNQ0Y1MjgyX0dQSU9fUE9SVFFTICY9IH5TUElfQ1NfTUFTSzsKLQkJTUNGNTI4Ml9HUElPX1BPUlRRUyB8PSBjc19tYXNrOwotCX0gZWxzZSBpZiAoY29tbWFuZCAmIFFTUElfQ1NfRFJPUCkgewotCQlNQ0Y1MjgyX0dQSU9fUE9SVFFTIHw9IFNQSV9DU19NQVNLOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgc3BpX2Rldl9pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY29sZGZpcmVfc3BpKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCWlmIChBUlJBWV9TSVpFKHNwaV9ib2FyZF9pbmZvKSkKLQkJcmV0dmFsID0gc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpX2JvYXJkX2luZm8pKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfU1BJICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTI4NSw4ICs1Nyw0MCBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01Mjh4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjh4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDIzLAorCQkuZW5kCQk9IDY0ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjcsCisJCS5lbmQJCT0gNjQgKyAyNywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyOSwKKwkJLmVuZAkJPSA2NCArIDI5LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01Mjh4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyOHhfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01Mjh4X2ZlY19yZXNvdXJjZXMsCit9OworCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTI4eF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyOHhfdWFydCwKKwkmbTUyOHhfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMyNyw2ICsxMzEsMzEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01Mjh4X2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKwl1MTYgdjE2OworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJd3JpdGViKDB4MjgsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyMyk7CisJd3JpdGViKDB4MjcsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyNyk7CisJd3JpdGViKDB4MjYsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyOSk7CisKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4ZjsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKKwlpbXIgJj0gfjB4ZmY4MDAwMDE7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMwICovCisJdjE2ID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDU2KTsKKwl3cml0ZXcodjE2IHwgMHhmMDAsIE1DRl9JUFNCQVIgKyAweDEwMDA1Nik7CisJd3JpdGViKDB4YzAsIE1DRl9JUFNCQVIgKyAweDEwMDA1OCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMzg2LDYgKzIxNSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01Mjh4X3VhcnRzX2luaXQoKTsKKwltNTI4eF9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01Mjh4X2RldmljZXMsIEFSUkFZX1NJWkUobTUyOHhfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMKaW5kZXggYTM0NzYyMy4uNTkxZjJmOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzJ4L2NvbmZpZy5jCkBAIC02MSw4ICs2MSwzOCBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MzJ4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MzJ4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSAweGZjMDMwMDAwLAorCQkuZW5kCQk9IDB4ZmMwMzA3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMzYsCisJCS5lbmQJCT0gNjQgKyAzNiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MCwKKwkJLmVuZAkJPSA2NCArIDQwLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDQyLAorCQkuZW5kCQk9IDY0ICsgNDIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUzMnhfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTMyeF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUzMnhfZmVjX3Jlc291cmNlcywKK307CiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUzMnhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MzJ4X3VhcnQsCisJJm01MzJ4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05Myw2ICsxMjMsMjQgQEAKIAlmb3IgKGxpbmUgPSAwOyAobGluZSA8IG5ybGluZXMpOyBsaW5lKyspCiAJCW01MzJ4X3VhcnRfaW5pdF9saW5lKGxpbmUsIG01MzJ4X3VhcnRfcGxhdGZvcm1bbGluZV0uaXJxKTsKIH0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTMyeF9mZWNfaW5pdCh2b2lkKQoreworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCU1DRl9JTlRDMF9JQ1IzNiA9IDB4MjsKKwlNQ0ZfSU5UQzBfSUNSNDAgPSAweDI7CisJTUNGX0lOVEMwX0lDUjQyID0gMHgyOworCisJTUNGX0lOVEMwX0lNUkggJj0gfihNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLMzYgfAorCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDAgfCBNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDIpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMCAqLworCU1DRl9HUElPX1BBUl9GRUNJMkMgfD0gKE1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01EQ19FTURDIHwKKwkJTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURJT19FTURJTyk7CisJTUNGX0dQSU9fUEFSX0ZFQyA9IChNQ0ZfR1BJT19QQVJfRkVDX1BBUl9GRUNfN1dfRkVDIHwKKwkJTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDX01JSV9GRUMpOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xNTAsNiArMTk4LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfQlNQKHZvaWQpCiB7CiAJbTUzMnhfdWFydHNfaW5pdCgpOworCW01MzJ4X2ZlY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobTUzMnhfZGV2aWNlcywgQVJSQVlfU0laRShtNTMyeF9kZXZpY2VzKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDYwMGVlZjMuLjIwNmNiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0yMzgsOCArMjM4LDEyIEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIE1JUFMgVGVjaG5vbG9naWVzIE1JUFNzaW0gc29mdHdhcmUKIAkgIGVtdWxhdG9yLgogCi1jb25maWcgTUFDSF9FTU1BCi0JYm9vbCAiTkVDIEVNTUEgc2VyaWVzIGJhc2VkIG1hY2hpbmVzIgorY29uZmlnIE5FQ19NQVJLRUlOUworCWJvb2wgIk5FQyBFTU1BMlJIIE1hcmstZWlucyBib2FyZCIKKwlzZWxlY3QgU09DX0VNTUEyUkgKKwlzZWxlY3QgSFdfSEFTX1BDSQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTkVDIEVsZWN0cm9uaWNzIE1hcmstZWlucyBib2FyZHMuCiAKIGNvbmZpZyBNQUNIX1ZSNDFYWAogCWJvb2wgIk5FQyBWUjQxMDAgc2VyaWVzIGJhc2VkIG1hY2hpbmVzIgpAQCAtNjAzLDcgKzYwNyw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KLQlzZWxlY3QgQ1BVX0NBVklVTV9PQ1RFT04KKwlzZWxlY3QgU1lTX0hBU19DUFVfQ0FWSVVNX09DVEVPTgogCWhlbHAKIAkgIFRoZSBPY3Rlb24gc2ltdWxhdG9yIGlzIHNvZnR3YXJlIHBlcmZvcm1hbmNlIG1vZGVsIG9mIHRoZSBDYXZpdW0KIAkgIE9jdGVvbiBQcm9jZXNzb3IuIEl0IHN1cHBvcnRzIHNpbXVsYXRpbmcgT2N0ZW9uIHByb2Nlc3NvcnMgb24geDg2CkBAIC02MTgsNyArNjIyLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KIAlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKLQlzZWxlY3QgQ1BVX0NBVklVTV9PQ1RFT04KKwlzZWxlY3QgU1lTX0hBU19DUFVfQ0FWSVVNX09DVEVPTgogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJaGVscAogCSAgVGhpcyBvcHRpb24gc3VwcG9ydHMgYWxsIG9mIHRoZSBPY3Rlb24gcmVmZXJlbmNlIGJvYXJkcyBmcm9tIENhdml1bQpAQCAtNjM3LDcgKzY0MSw2IEBACiAKIHNvdXJjZSAiYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvS2NvbmZpZyIKLXNvdXJjZSAiYXJjaC9taXBzL2VtbWEvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2phenovS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2xhc2F0L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9wbWMtc2llcnJhL0tjb25maWciCkBAIC04OTUsNiArODk4LDE4IEBACiAJYm9vbAogCXNlbGVjdCBTRVJJQUxfUk05MDAwCiAKK2NvbmZpZyBTT0NfRU1NQTJSSAorCWJvb2wKKwlzZWxlY3QgQ0VWVF9SNEsKKwlzZWxlY3QgQ1NSQ19SNEsKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1dBUF9JT19TUEFDRQorCXNlbGVjdCBTWVNfSEFTX0NQVV9SNTUwMAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwogY29uZmlnIFNPQ19QTlg4MzNYCiAJYm9vbAogCXNlbGVjdCBDRVZUX1I0SwpAQCAtOTMwLDExICs5NDUsNiBAQAogY29uZmlnIFNXQVBfSU9fU1BBQ0UKIAlib29sCiAKLWNvbmZpZyBFTU1BMlJICi0JYm9vbAotCWRlcGVuZHMgb24gTUFSS0VJTlMKLQlkZWZhdWx0IHkKLQogY29uZmlnIFNFUklBTF9STTkwMDAKIAlib29sCiAKQEAgLTEyMzQsNiArMTI0NCw3IEBACiAKIGNvbmZpZyBDUFVfQ0FWSVVNX09DVEVPTgogCWJvb2wgIkNhdml1bSBPY3Rlb24gcHJvY2Vzc29yIgorCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfQ0FWSVVNX09DVEVPTgogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IElSUV9DUFVfT0NURU9OCiAJc2VsZWN0IENQVV9IQVNfUFJFRkVUQ0gKQEAgLTEzMTQsNiArMTMyNSw5IEBACiBjb25maWcgU1lTX0hBU19DUFVfU0IxCiAJYm9vbAogCitjb25maWcgU1lTX0hBU19DUFVfQ0FWSVVNX09DVEVPTgorCWJvb2wKKwogIwogIyBDUFUgbWF5IHJlb3JkZXIgUi0+UiwgUi0+VywgVy0+UiwgVy0+VwogIyBSZW9yZGVyaW5nIGJleW9uZCBMTCBhbmQgU0MgaXMgaGFuZGxlZCBpbiBXRUFLX1JFT1JERVJJTkdfQkVZT05EX0xMU0MKQEAgLTEzODcsNiArMTQwMSw3IEBACiBjb25maWcgNjRCSVQKIAlib29sICI2NC1iaXQga2VybmVsIgogCWRlcGVuZHMgb24gQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTCAmJiBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCisJc2VsZWN0IEhBVkVfU1lTQ0FMTF9XUkFQUEVSUwogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBidWlsZCBhIDY0LWJpdCBrZXJuZWwuCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCAyMWIwMGU5Li4yMmRhYjJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC00MTYsNyArNDE2LDcgQEAKICMKICMgQ29tbW9uIE5FQyBFTU1BWFhYCiAjCi1jb3JlLSQoQ09ORklHX1NPQ19FTU1BKQkJKz0gYXJjaC9taXBzL2VtbWEvY29tbW9uLworY29yZS0kKENPTkZJR19TT0NfRU1NQTJSSCkJKz0gYXJjaC9taXBzL2VtbWEvY29tbW9uLwogY2ZsYWdzLSQoQ09ORklHX1NPQ19FTU1BMlJIKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZW1tYTJyaAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYwppbmRleCA2ZmQ0NDFkLi5mNThkNGZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCSAqIHNldHVwIGNvdW50ZXIgMSAoUlRDKSB0byB0aWNrIGF0IGZ1bGwgc3BlZWQKIAkgKi8KIAl0ID0gMHhmZmZmZmY7Ci0Jd2hpbGUgKChhdV9yZWFkbChTWVNfQ09VTlRFUl9DTlRSTCkgJiBTWVNfQ05UUkxfVDFTKSAmJiB0LS0pCisJd2hpbGUgKChhdV9yZWFkbChTWVNfQ09VTlRFUl9DTlRSTCkgJiBTWVNfQ05UUkxfVDFTKSAmJiAtLXQpCiAJCWFzbSB2b2xhdGlsZSAoIm5vcCIpOwogCWlmICghdCkKIAkJZ290byBjbnRyX2VycjsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWF1X3N5bmMoKTsKIAogCXQgPSAweGZmZmZmZjsKLQl3aGlsZSAoKGF1X3JlYWRsKFNZU19DT1VOVEVSX0NOVFJMKSAmIFNZU19DTlRSTF9DMVMpICYmIHQtLSkKKwl3aGlsZSAoKGF1X3JlYWRsKFNZU19DT1VOVEVSX0NOVFJMKSAmIFNZU19DTlRSTF9DMVMpICYmIC0tdCkKIAkJYXNtIHZvbGF0aWxlICgibm9wIik7CiAJaWYgKCF0KQogCQlnb3RvIGNudHJfZXJyOwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJYXVfc3luYygpOwogCiAJdCA9IDB4ZmZmZmZmOwotCXdoaWxlICgoYXVfcmVhZGwoU1lTX0NPVU5URVJfQ05UUkwpICYgU1lTX0NOVFJMX0MxUykgJiYgdC0tKQorCXdoaWxlICgoYXVfcmVhZGwoU1lTX0NPVU5URVJfQ05UUkwpICYgU1lTX0NOVFJMX0MxUykgJiYgLS10KQogCQlhc20gdm9sYXRpbGUgKCJub3AiKTsKIAlpZiAoIXQpCiAJCWdvdG8gY250cl9lcnI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCmluZGV4IGExZTM1MjYuLmRmYmZkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCkBAIC0zMyw4ICszMyw4IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqaW9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKLXN0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogc3RhdGljIGludCBpb2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgaW9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBzdGF0aWMgc3NpemVfdCBpb2Rldl9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCBzLCBsb2ZmX3QgKik7CkBAIC02NSwxMyArNjUsMTMgQEAKIAkuZm9wcwkJPSAmZm9wcwogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlvZGV2X2RyaXZlciA9Ci17Ci0JLm5hbWUJCT0gKGNoYXIgKikgaW9kZXZfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpb2Rldl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gaW9kZXZfbmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGlvZGV2X3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3AoaW9kZXZfcmVtb3ZlKQorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaW9kZXZfcmVtb3ZlKSwKIH07CiAKIApAQCAtODksMTEgKzg5LDEwIEBACiAKIAogLyogTm8gaG90cGx1Z2dpbmcgb24gdGhlIHBsYXRmb3JtIGJ1cyAtIHVzZSBfX2luaXQgKi8KLXN0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogY29uc3QgcGR2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJY29uc3Qgc3RydWN0IHJlc291cmNlICogY29uc3QgcmkgPQotCQlpb2Rldl9nZXRfcmVzb3VyY2UocGR2LCBJT0RFVl9SRVNPVVJDRV9JUlEsIElPUkVTT1VSQ0VfSVJRKTsKKwkJaW9kZXZfZ2V0X3Jlc291cmNlKGRldiwgSU9ERVZfUkVTT1VSQ0VfSVJRLCBJT1JFU09VUkNFX0lSUSk7CiAKIAlpZiAodW5saWtlbHkoIXJpKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTEwNCw3ICsxMDMsNyBAQAogCiAKIAotc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIG1pc2NfZGVyZWdpc3RlcigmbWlzY2Rldik7CiB9CkBAIC0xNjAsMTQgKzE1OSwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpb2Rldl9pbml0X21vZHVsZSh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKIH0KIAogCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpb2Rldl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpb2Rldl9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCmluZGV4IGYyYmFlYTMuLjAyMDg3MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCkBAIC01MTIsNyArNTEyLDcgQEAKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCi1DT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDQ1Nj15CiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwppbmRleCA5ZDViZDJhLi41MzgwZjFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzkKLSMgRnJpIEp1bCAxMSAyMzowMTozNiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3CisjIFdlZCBNYXIgIDQgMjM6MDc6MTYgMjAwOQogIwogQ09ORklHX01JUFM9eQogCkBAIC0xOCw4ICsxOCwxMCBAQAogIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1NQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CkBAIC0zOSw3ICs0MSwxMSBAQAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1RYMzlYWD15CiAjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1RYWDk9eQogQ09ORklHX1RPU0hJQkFfSk1SMzkyNz15CiBDT05GSUdfU09DX1RYMzkyNz15CiAjIENPTkZJR19UT1NISUJBX0ZQQ0lCMCBpcyBub3Qgc2V0CkBAIC01NCwxMiArNjAsMTQgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0NFVlRfVFhYOT15CiBDT05GSUdfR1BJT19UWFg5PXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0dQSU89eQpAQCAtODcsNiArOTUsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTQsNiArMTAzLDcgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSEFTX0NQVV9UWDM5WFg9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQpAQCAtMTE3LDE0ICsxMjcsMTIgQEAKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMTU5LDYgKzE2NywxNSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CkBAIC0xNzEsNyArMTg4LDYgQEAKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0xODgsMjYgKzIwNCwyMyBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjIxLDcgKzIzNCw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCkBAIC0yMzEsMTIgKzI0NCwxNSBAQAogQ09ORklHX1BDSV9ET01BSU5TPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKQEAgLTI0NSwxNSArMjYxLDEyIEBACiAjCiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yOTMsNiArMzA2LDcgQEAKICMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTMwMiwxNCArMzE2LDkgQEAKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIAogIwpAQCAtMzIzLDcgKzMzMiw4OSBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CisjIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKQEAgLTMzNiw2ICs0MjcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zNjEsNyArNDUzLDYgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldApAQCAtMzgzLDYgKzQ3NCw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTM5Miw2ICs0ODYsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0OTQsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTQwNiw3ICs1MDQsNiBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfVEMzNTgxNT15Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTQxNSw5ICs1MTIsMTEgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTQyOCw2ICs1MjcsMTAgQEAKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CkBAIC00NDAsMjcgKzU0Myw3IEBACiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC01MTcsMTAgKzYwMCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HUElPX0xJQj15CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQogCiAjCi0jIEdQSU8gU3VwcG9ydAorIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgogIwogCiAjCkBAIC01MjgsNiArNjEyLDExIEBACiAjCiAKICMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisKKyMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNTQyLDYgKzYzMSw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CiBDT05GSUdfVFhYOV9XRFQ9eQogCiAjCkBAIC01NDksMTggKzYzOSwyMSBAQAogIwogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTU5MSwxNiArNjg0LDI2IEBACiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCitDT05GSUdfTEVEU19HUElPPXkKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CkBAIC02MjYsMjcgKzcyOSwzNCBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTc0Mj15CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKQEAgLTY3NiwyOCArNzg2LDE3IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKQEAgLTcyNiw3ICs4MjUsMTYgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfQ01ETElORT0iIgogCiAjCkBAIC03MzQsMTUgKzg0MiwxOCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9taXBzL2NvbmZpZ3MvbWFya2VpbnNfZGVmY29uZmlnCmluZGV4IGZlYTliYzkuLmJhZDg5MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2VtbWEycmhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZwpAQCAtMzUsNyArMzUsNyBAQAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19NQVJLRUlOUz15CitDT05GSUdfTkVDX01BUktFSU5TPXkKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKQEAgLTY4LDcgKzY4LDcgQEAKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CiBDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfU1dBUF9JT19TUEFDRT15Ci1DT05GSUdfRU1NQTJSSD15CitDT05GSUdfU09DX0VNTUEyUkg9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCkBAIC01NzQsOSArNTc0LDkgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgxZTAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAyMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCmluZGV4IDgzZDVjNTguLjFlZmU5NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmM5Ci0jIEZyaSBKdWwgMTEgMjM6MDM6MjEgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNworIyBXZWQgTWFyICA0IDIzOjA4OjA2IDIwMDkKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTgsOCArMTgsMTAgQEAKICMgQ09ORklHX0xFTU9URV9GVUxPTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNTUEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldApAQCAtMzksMjAgKzQxLDI4IEBACiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAogQ09ORklHX01BQ0hfVFg0OVhYPXkKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVFhYOT15CiBDT05GSUdfVE9TSElCQV9SQlRYNDkyNz15CiBDT05GSUdfVE9TSElCQV9SQlRYNDkzOD15CitDT05GSUdfVE9TSElCQV9SQlRYNDkzOT15CiBDT05GSUdfU09DX1RYNDkyNz15CiBDT05GSUdfU09DX1RYNDkzOD15CitDT05GSUdfU09DX1RYNDkzOT15CitDT05GSUdfVFhYOV83U0VHTEVEPXkKICMgQ09ORklHX1RPU0hJQkFfRlBDSUIwIGlzIG5vdCBzZXQKIENPTkZJR19QSUNNR19QQ0lfQkFDS1BMQU5FX0RFRkFVTFQ9eQogCiAjCiAjIE11bHRpcGxleCBQaW4gU2VsZWN0CiAjCi1DT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9QSU81OF82MT15CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX1BJTzU4XzYxIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzhfTVBMRVhfTkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9LRUVQPXkKIENPTkZJR19QQ0lfVFg0OTI3PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CkBAIC02NCwxNCArNzQsMTggQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CiBDT05GSUdfQ0VWVF9SNEs9eQogQ09ORklHX0NFVlRfVFhYOT15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19DU1JDX1I0Sz15CiBDT05GSUdfR1BJT19UWFg5PXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0dQSU89eQpAQCAtMTAwLDYgKzExNCw3IEBACiBDT05GSUdfQ1BVX1RYNDlYWD15CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtMTA3LDYgKzEyMiw3IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfVFg0OVhYPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKQEAgLTEzNCwxMyArMTUwLDEyIEBACiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQEAgLTE3Niw2ICsxOTEsMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xOTAsNyArMjE0LDYgQEAKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0yMDcsMzAgKzIzMCwyNiBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI0NCw3ICsyNjMsOCBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKQEAgLTI1NCwxMiArMjc0LDE1IEBACiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCkBAIC0yNjgsMTUgKzI5MSwxMiBAQAogIwogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzE4LDYgKzMzOCw3IEBACiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zMjcsMTQgKzM0OCw5IEBACiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKICMKQEAgLTM0OCw3ICszNjQsOTAgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldApAQCAtMzY1LDkgKzQ2NCw2MCBAQAogIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1RJTUlOR1M9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVfVFg0OTM4PXkKK0NPTkZJR19CTEtfREVWX0lERV9UWDQ5Mzk9eQorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC0zOTAsNyArNTQwLDYgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldApAQCAtNDEyLDE1ICs1NjEsMTkgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CkBAIC00MjksNiArNTgyLDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC00MzYsNyArNTkyLDYgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogQ09ORklHX1RDMzU4MTU9eQotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CkBAIC00NDUsOSArNjAwLDExIEBACiAjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CkBAIC00NTgsNiArNjE1LDEwIEBACiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldApAQCAtNTAyLDYgKzY2Myw3IEBACiBDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKQEAgLTUxNywxNyArNjc5LDE5IEBACiAjCiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1RYWDk9eQogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCi1DT05GSUdfRUVQUk9NX0FUMjU9eQogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR1BJT19MSUI9eQorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKIAogIwotIyBHUElPIFN1cHBvcnQKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKIAogIwpAQCAtNTM1LDggKzY5OSwxNCBAQAogIwogCiAjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CkBAIC01NTAsNiArNzIwLDcgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKIENPTkZJR19UWFg5X1dEVD1tCiAKICMKQEAgLTU1NywxOCArNzI4LDIxIEBACiAjCiAjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNTk5LDE1ICs3NzMsMjcgQEAKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0dQSU89eQorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQpAQCAtNjI4LDM1ICs4MTQsNDcgQEAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTc0Mj15CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfVFg0OTM5PXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02ODcsMzAgKzg4NSwxOSBAQAogQ09ORklHX1BST0NfRlM9eQogIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQpAQCAtNzQwLDcgKzkyNywxNiBAQAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfQ01ETElORT0iIgogCiAjCkBAIC03NDgsMTUgKzk0NCwxOCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYS9LY29uZmlnIGIvYXJjaC9taXBzL2VtbWEvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY2OWM3Mi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZW1tYS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotY2hvaWNlCi0JcHJvbXB0ICJNYWNoaW5lIHR5cGUiCi0JZGVwZW5kcyBvbiBNQUNIX0VNTUEKLQlkZWZhdWx0IE5FQ19NQVJLRUlOUwotCi1jb25maWcgTkVDX01BUktFSU5TCi0JYm9vbCAiTkVDIEVNTUEyUkggTWFyay1laW5zIGJvYXJkIgotCXNlbGVjdCBTT0NfRU1NQTJSSAotCXNlbGVjdCBIV19IQVNfUENJCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgTWFyay1laW5zIGJvYXJkcy4KLQotZW5kY2hvaWNlCi0KLWNvbmZpZyBTT0NfRU1NQTJSSAotCWJvb2wKLQlzZWxlY3QgU09DX0VNTUEKLQlzZWxlY3QgU1lTX0hBU19DUFVfUjU1MDAKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCi0KLWNvbmZpZyBTT0NfRU1NQQotCWJvb2wKLQlzZWxlY3QgQ0VWVF9SNEsKLQlzZWxlY3QgQ1NSQ19SNEsKLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IElSUV9DUFUKLQlzZWxlY3QgU1dBUF9JT19TUEFDRQotCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMKaW5kZXggODhlODdmNi4uZDVmNDdlNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9wbGF0Zm9ybS5jCkBAIC0xNDEsMTMgKzE0MSw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gPSB7Ci0JJmkyY19lbW1hX2RldmljZXNbMF0sCi0JJmkyY19lbW1hX2RldmljZXNbMV0sCi0JJmkyY19lbW1hX2RldmljZXNbMl0sCi0JJnNlcmlhbF9lbW1hLAotfTsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG1hcmtlaW5zX3BhcnRzW10gPSB7CiAJWzBdID0gewogCQkubmFtZSA9ICJSb290RlMiLApAQCAtMTgxLDExICsxNzQsMzkgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWFya2VpbnNfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG1hcmtlaW5zX3BhcnRzKSwKKwkucGFydHMJCT0gbWFya2VpbnNfcGFydHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWFya2VpbnNfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4MWUwMDAwMDAsCisJLmVuZAkJPSAweDAyMDAwMDAwLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWFya2VpbnNfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKyAgICAgICAgCS5wbGF0Zm9ybV9kYXRhICA9ICZtYXJrZWluc19mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZtYXJrZWluc19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gPSB7CisJaTJjX2VtbWFfZGV2aWNlcywKKwlpMmNfZW1tYV9kZXZpY2VzICsgMSwKKwlpMmNfZW1tYV9kZXZpY2VzICsgMiwKKwkmc2VyaWFsX2VtbWEsCisJJm1hcmtlaW5zX2ZsYXNoX2RldmljZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHBsYXRmb3JtX2RldmljZXNfc2V0dXAodm9pZCkKIHsKLQlwaHlzbWFwX3NldF9wYXJ0aXRpb25zKG1hcmtlaW5zX3BhcnRzLCBBUlJBWV9TSVpFKG1hcmtlaW5zX3BhcnRzKSk7CiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCiBhcmNoX2luaXRjYWxsKHBsYXRmb3JtX2RldmljZXNfc2V0dXApOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY29tcGF0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY29tcGF0LmgKaW5kZXggYWM1ZDU0MS4uNmM1YjQwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jb21wYXQuaApAQCAtMyw2ICszLDggQEAKIC8qCiAgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcwogICovCisjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTIxOCw0ICsyMjAsOSBAQAogCWNvbXBhdF91bG9uZ190CV9fdW51c2VkMjsKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2NvbXBhdF90YXNrKHZvaWQpCit7CisJcmV0dXJuIHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKTsKK30KKwogI2VuZGlmIC8qIF9BU01fQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oCmluZGV4IDQzYmFlZDEuLjEzNGUxZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaApAQCAtMTM4LDcgKzEzOCw4IEBACiAJCV9faW5zdHJ1Y3Rpb25faGF6YXJkKCk7CQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SMTAwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OKSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfUjU1MDApCiAKIC8qCiAgKiBSMTAwMDAgcm9ja3MgLSBhbGwgaGF6YXJkcyBoYW5kbGVkIGluIGhhcmR3YXJlLCBzbyB0aGlzIGJlY29tZXMgYSBub2JyYWluZXIuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCmluZGV4IDA0MTc1MTYuLjUyNmYzMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCkBAIC0xMzkxLDExICsxMzkxLDExIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAogc2V0X2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQkJXAogewkJCQkJCQkJXAotCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IHJlcywgbmV3OwkJCQkJXAogCQkJCQkJCQlcCiAJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKLQlyZXMgfD0gc2V0OwkJCQkJCVwKLQl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwluZXcgPSByZXMgfCBzZXQ7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKG5ldyk7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXR1cm4gcmVzOwkJCQkJCVwKIH0JCQkJCQkJCVwKQEAgLTE0MDMsMjQgKzE0MDMsMjQgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCiBjbGVhcl9jMF8jI25hbWUodW5zaWduZWQgaW50IGNsZWFyKQkJCQlcCiB7CQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzLCBuZXc7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAotCXJlcyAmPSB+Y2xlYXI7CQkJCQkJXAotCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCW5ldyA9IHJlcyAmIH5jbGVhcjsJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUobmV3KTsJCQkJCVwKIAkJCQkJCQkJXAogCXJldHVybiByZXM7CQkJCQkJXAogfQkJCQkJCQkJXAogCQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAotY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgbmV3KQkJXAorY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgdmFsKQkJXAogewkJCQkJCQkJXAotCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IHJlcywgbmV3OwkJCQkJXAogCQkJCQkJCQlcCiAJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKLQlyZXMgJj0gfmNoYW5nZTsJCQkJCQlcCi0JcmVzIHw9IChuZXcgJiBjaGFuZ2UpOwkJCQkJXAotCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCW5ldyA9IHJlcyAmIH5jaGFuZ2U7CQkJCQlcCisJbmV3IHw9ICh2YWwgJiBjaGFuZ2UpOwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShuZXcpOwkJCQkJXAogCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJlZmV0Y2guaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCmluZGV4IDE3ODUwODMuLmE1NjU5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBQcmVmX1dyaXRlQmFja0ludmFsaWRhdGUgaXMgYSBub3AgYW5kIFByZWZfUHJlcGFyZUZvclN0b3JlIGlzIGJyb2tlbiBpbgogICogY3VycmVudCB2ZXJzaW9ucyBkdWUgdG8gZXJyYXR1bSBHMTA1LgogICoKLSAqIFZSNzcwMSBvbmx5IGltcGxlbWVudHMgdGhlIExvYWQgcHJlZmV0Y2guCisgKiBWUjU1MDAgKGluY2x1ZGluZyBWUjU3MDEgYW5kIFZSNzcwMSkgb25seSBpbXBsZW1lbnQgbG9hZCBwcmVmZXRjaC4KICAqCiAgKiBGaW5hbGx5IE1JUFMzMiBhbmQgTUlQUzY0IGltcGxlbWVudCBhbGwgb2YgdGhlIGZvbGxvd2luZyBoaW50cy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlY2NvbXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZWNjb21wLmgKaW5kZXggMzZlZDQ0MC4uYWU2MzA2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlY2NvbXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2VjY29tcC5oCkBAIC0xLDYgKzEsNSBAQAogI2lmbmRlZiBfX0FTTV9TRUNDT01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAKICNkZWZpbmUgX19OUl9zZWNjb21wX3JlYWQgX19OUl9yZWFkCkBAIC0xNiw4ICsxNSw2IEBACiAgKi8KICNpZmRlZiBDT05GSUdfTUlQUzMyX08zMgogCi0jZGVmaW5lIFRJRl8zMkJJVCBUSUZfMzJCSVRfUkVHUwotCiAjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyCQk0MDAzCiAjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZV8zMgkJNDAwNAogI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdF8zMgkJNDAwMQpAQCAtMjUsOCArMjIsNiBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTMzJfTjMyKQogCi0jZGVmaW5lIFRJRl8zMkJJVCBfVElGXzMyQklUX0FERFIKLQogI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZF8zMgkJNjAwMAogI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGVfMzIJCTYwMDEKICNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIJCTYwNTgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IDljZTA2MDcuLjllODljZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtOSw2ICs5LDcgQEAKICNpZm5kZWYgX0FTTV9TSUdDT05URVhUX0gKICNkZWZpbmUgX0FTTV9TSUdDT05URVhUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDg4ZjFmN2QuLjk5OTkzYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgX0FTTV9TV0FCX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggM2Y3NmRlNy4uNjc2YWEyYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEyNyw2ICsxMjcsMTIgQEAKICNkZWZpbmUgVElGX0xPQURfV0FUQ0gJCTI1CS8qIElmIHNldCwgbG9hZCB3YXRjaCByZWdpc3RlcnMgKi8KICNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMzEJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KIAorI2lmZGVmIENPTkZJR19NSVBTMzJfTzMyCisjZGVmaW5lIFRJRl8zMkJJVCBUSUZfMzJCSVRfUkVHUworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQUzMyX04zMikKKyNkZWZpbmUgVElGXzMyQklUIF9USUZfMzJCSVRfQUREUgorI2VuZGlmIC8qIENPTkZJR19NSVBTMzJfTzMyICovCisKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggYTcxNjJhNC4uMWJkYmNhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xNDksNiArMTQ5LDcgQEAKIAljYXNlIENQVV9SNDY1MDoKIAljYXNlIENQVV9SNDcwMDoKIAljYXNlIENQVV9SNTAwMDoKKwljYXNlIENQVV9SNTUwMDoKIAljYXNlIENQVV9ORVZBREE6CiAJY2FzZSBDUFVfNEtDOgogCWNhc2UgQ1BVXzRLRUM6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwppbmRleCBhMGZmMmI2Li43Yjg0NWJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKQEAgLTEwOCwxMCArMTA4LDkgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKLQkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggYWEyYzU1ZS4uNDlhYWM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTYzLDkgKzYzLDkgQEAKICNkZWZpbmUgbWVyZ2VfNjQocjEsIHIyKSAoKCgocjIpICYgMHhmZmZmZmZmZlVMKSA8PCAzMikgKyAoKHIxKSAmIDB4ZmZmZmZmZmZVTCkpCiAjZW5kaWYKIAotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCi1zeXMzMl9tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCi0gICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQorU1lTQ0FMTF9ERUZJTkU2KDMyX21tYXAyLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBsZW4sCisJdW5zaWduZWQgbG9uZywgcHJvdCwgdW5zaWduZWQgbG9uZywgZmxhZ3MsIHVuc2lnbmVkIGxvbmcsIGZkLAorCXVuc2lnbmVkIGxvbmcsIHBnb2ZmKQogewogCXN0cnVjdCBmaWxlICogZmlsZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBlcnJvcjsKQEAgLTEyMSwyMSArMTIxLDIxIEBACiAJaW50CXJsaW1fbWF4OwogfTsKIAotYXNtbGlua2FnZSBsb25nIHN5czMyX3RydW5jYXRlNjQoY29uc3QgY2hhciBfX3VzZXIgKiBwYXRoLAotCXVuc2lnbmVkIGxvbmcgX19kdW1teSwgaW50IGEyLCBpbnQgYTMpCitTWVNDQUxMX0RFRklORTQoMzJfdHJ1bmNhdGU2NCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aCwKKwl1bnNpZ25lZCBsb25nLCBfX2R1bW15LCB1bnNpZ25lZCBsb25nLCBhMiwgdW5zaWduZWQgbG9uZywgYTMpCiB7CiAJcmV0dXJuIHN5c190cnVuY2F0ZShwYXRoLCBtZXJnZV82NChhMiwgYTMpKTsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5czMyX2Z0cnVuY2F0ZTY0KHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgbG9uZyBfX2R1bW15LAotCWludCBhMiwgaW50IGEzKQorU1lTQ0FMTF9ERUZJTkU0KDMyX2Z0cnVuY2F0ZTY0LCB1bnNpZ25lZCBsb25nLCBmZCwgdW5zaWduZWQgbG9uZywgX19kdW1teSwKKwl1bnNpZ25lZCBsb25nLCBhMiwgdW5zaWduZWQgbG9uZywgYTMpCiB7CiAJcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsIG1lcmdlXzY0KGEyLCBhMykpOwogfQogCi1hc21saW5rYWdlIGludCBzeXMzMl9sbHNlZWsodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgb2Zmc2V0X2hpZ2gsCi0JCQkgICAgdW5zaWduZWQgaW50IG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKiByZXN1bHQsCi0JCQkgICAgdW5zaWduZWQgaW50IG9yaWdpbikKK1NZU0NBTExfREVGSU5FNSgzMl9sbHNlZWssIHVuc2lnbmVkIGxvbmcsIGZkLCB1bnNpZ25lZCBsb25nLCBvZmZzZXRfaGlnaCwKKwl1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LCBsb2ZmX3QgX191c2VyICosIHJlc3VsdCwKKwl1bnNpZ25lZCBsb25nLCBvcmlnaW4pCiB7CiAJcmV0dXJuIHN5c19sbHNlZWsoZmQsIG9mZnNldF9oaWdoLCBvZmZzZXRfbG93LCByZXN1bHQsIG9yaWdpbik7CiB9CkBAIC0xNDQsMjAgKzE0NCwyMCBAQAogICAgbHNlZWsgYmFjayB0byBvcmlnaW5hbCBsb2NhdGlvbi4gIFRoZXkgZmFpbCBqdXN0IGxpa2UgbHNlZWsgZG9lcyBvbgogICAgbm9uLXNlZWthYmxlIGZpbGVzLiAgKi8KIAotYXNtbGlua2FnZSBzc2l6ZV90IHN5czMyX3ByZWFkKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKiBidWYsCi0JCQkgICAgICAgc2l6ZV90IGNvdW50LCB1MzIgdW51c2VkLCB1NjQgYTQsIHU2NCBhNSkKK1NZU0NBTExfREVGSU5FNigzMl9wcmVhZCwgdW5zaWduZWQgbG9uZywgZmQsIGNoYXIgX191c2VyICosIGJ1Ziwgc2l6ZV90LCBjb3VudCwKKwl1bnNpZ25lZCBsb25nLCB1bnVzZWQsIHVuc2lnbmVkIGxvbmcsIGE0LCB1bnNpZ25lZCBsb25nLCBhNSkKIHsKIAlyZXR1cm4gc3lzX3ByZWFkNjQoZmQsIGJ1ZiwgY291bnQsIG1lcmdlXzY0KGE0LCBhNSkpOwogfQogCi1hc21saW5rYWdlIHNzaXplX3Qgc3lzMzJfcHdyaXRlKHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCi0JCQkgICAgICAgIHNpemVfdCBjb3VudCwgdTMyIHVudXNlZCwgdTY0IGE0LCB1NjQgYTUpCitTWVNDQUxMX0RFRklORTYoMzJfcHdyaXRlLCB1bnNpZ25lZCBpbnQsIGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBidWYsCisJc2l6ZV90LCBjb3VudCwgdTMyLCB1bnVzZWQsIHU2NCwgYTQsIHU2NCwgYTUpCiB7CiAJcmV0dXJuIHN5c19wd3JpdGU2NChmZCwgYnVmLCBjb3VudCwgbWVyZ2VfNjQoYTQsIGE1KSk7CiB9CiAKLWFzbWxpbmthZ2UgaW50IHN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbChjb21wYXRfcGlkX3QgcGlkLAotCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICppbnRlcnZhbCkKK1NZU0NBTExfREVGSU5FMigzMl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwsIGNvbXBhdF9waWRfdCwgcGlkLAorCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICosIGludGVydmFsKQogewogCXN0cnVjdCB0aW1lc3BlYyB0OwogCWludCByZXQ7CkBAIC0xNzQsOCArMTc0LDggQEAKIAogI2lmZGVmIENPTkZJR19TWVNWSVBDCiAKLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfaXBjKHUzMiBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsIGludCB0aGlyZCwgdTMyIHB0ciwgdTMyIGZpZnRoKQorU1lTQ0FMTF9ERUZJTkU2KDMyX2lwYywgdTMyLCBjYWxsLCBsb25nLCBmaXJzdCwgbG9uZywgc2Vjb25kLCBsb25nLCB0aGlyZCwKKwl1bnNpZ25lZCBsb25nLCBwdHIsIHVuc2lnbmVkIGxvbmcsIGZpZnRoKQogewogCWludCB2ZXJzaW9uLCBlcnI7CiAKQEAgLTIzMyw4ICsyMzMsOCBAQAogCiAjZWxzZQogCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX2lwYyh1MzIgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgdGhpcmQsIHUzMiBwdHIsIHUzMiBmaWZ0aCkKK1NZU0NBTExfREVGSU5FNigzMl9pcGMsIHUzMiwgY2FsbCwgaW50LCBmaXJzdCwgaW50LCBzZWNvbmQsIGludCwgdGhpcmQsCisJdTMyLCBwdHIsIHUzMiwgZmlmdGgpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC0yNDIsNyArMjQyLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfU1lTVklQQyAqLwogCiAjaWZkZWYgQ09ORklHX01JUFMzMl9OMzIKLWFzbWxpbmthZ2UgbG9uZyBzeXNuMzJfc2VtY3RsKGludCBzZW1pZCwgaW50IHNlbW51bSwgaW50IGNtZCwgdTMyIGFyZykKK1NZU0NBTExfREVGSU5FNChuMzJfc2VtY3RsLCBpbnQsIHNlbWlkLCBpbnQsIHNlbW51bSwgaW50LCBjbWQsIHUzMiwgYXJnKQogewogCS8qIGNvbXBhdF9zeXNfc2VtY3RsIGV4cGVjdHMgYSBwb2ludGVyIHRvIHVuaW9uIHNlbXVuICovCiAJdTMyIF9fdXNlciAqdXB0ciA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZih1MzIpKTsKQEAgLTI1MSwxMyArMjUxLDE0IEBACiAJcmV0dXJuIGNvbXBhdF9zeXNfc2VtY3RsKHNlbWlkLCBzZW1udW0sIGNtZCwgdXB0cik7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBzeXNuMzJfbXNnc25kKGludCBtc3FpZCwgdTMyIG1zZ3AsIHVuc2lnbmVkIG1zZ3N6LCBpbnQgbXNnZmxnKQorU1lTQ0FMTF9ERUZJTkU0KG4zMl9tc2dzbmQsIGludCwgbXNxaWQsIHUzMiwgbXNncCwgdW5zaWduZWQgaW50LCBtc2dzeiwKKwlpbnQsIG1zZ2ZsZykKIHsKIAlyZXR1cm4gY29tcGF0X3N5c19tc2dzbmQobXNxaWQsIG1zZ3N6LCBtc2dmbGcsIGNvbXBhdF9wdHIobXNncCkpOwogfQogCi1hc21saW5rYWdlIGxvbmcgc3lzbjMyX21zZ3JjdihpbnQgbXNxaWQsIHUzMiBtc2dwLCBzaXplX3QgbXNnc3osIGludCBtc2d0eXAsCi0JCQkgICAgICBpbnQgbXNnZmxnKQorU1lTQ0FMTF9ERUZJTkU1KG4zMl9tc2dyY3YsIGludCwgbXNxaWQsIHUzMiwgbXNncCwgc2l6ZV90LCBtc2dzeiwKKwlpbnQsIG1zZ3R5cCwgaW50LCBtc2dmbGcpCiB7CiAJcmV0dXJuIGNvbXBhdF9zeXNfbXNncmN2KG1zcWlkLCBtc2dzeiwgbXNndHlwLCBtc2dmbGcsIElQQ182NCwKIAkJCQkgY29tcGF0X3B0cihtc2dwKSk7CkBAIC0yNzcsNyArMjc4LDcgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVExfU1lTQ0FMTAogCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc3lzY3RsKHN0cnVjdCBzeXNjdGxfYXJnczMyIF9fdXNlciAqYXJncykKK1NZU0NBTExfREVGSU5FMSgzMl9zeXNjdGwsIHN0cnVjdCBzeXNjdGxfYXJnczMyIF9fdXNlciAqLCBhcmdzKQogewogCXN0cnVjdCBzeXNjdGxfYXJnczMyIHRtcDsKIAlpbnQgZXJyb3I7CkBAIC0zMTYsOSArMzE3LDE2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisjZWxzZQorCitTWVNDQUxMX0RFRklORTEoMzJfc3lzY3RsLCBzdHJ1Y3Qgc3lzY3RsX2FyZ3MzMiBfX3VzZXIgKiwgYXJncykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKwogI2VuZGlmIC8qIENPTkZJR19TWVNDVExfU1lTQ0FMTCAqLwogCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqIG5hbWUpCitTWVNDQUxMX0RFRklORTEoMzJfbmV3dW5hbWUsIHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKiwgbmFtZSkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMzM0LDcgKzM0Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzMzJfcGVyc29uYWxpdHkodW5zaWduZWQgbG9uZyBwZXJzb25hbGl0eSkKK1NZU0NBTExfREVGSU5FMSgzMl9wZXJzb25hbGl0eSwgdW5zaWduZWQgbG9uZywgcGVyc29uYWxpdHkpCiB7CiAJaW50IHJldDsKIAlwZXJzb25hbGl0eSAmPSAweGZmZmZmZmZmOwpAQCAtMzU3LDcgKzM2NSw3IEBACiAKIGV4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX3VzdGF0KGRldl90IGRldiwgc3RydWN0IHVzdGF0IF9fdXNlciAqIHVidWYpOwogCi1hc21saW5rYWdlIGludCBzeXMzMl91c3RhdChkZXZfdCBkZXYsIHN0cnVjdCB1c3RhdDMyIF9fdXNlciAqIHVidWYzMikKK1NZU0NBTExfREVGSU5FMigzMl91c3RhdCwgZGV2X3QsIGRldiwgc3RydWN0IHVzdGF0MzIgX191c2VyICosIHVidWYzMikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCB1c3RhdCB0bXA7CkBAIC0zODEsOCArMzg5LDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1hc21saW5rYWdlIGludCBzeXMzMl9zZW5kZmlsZShpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIGNvbXBhdF9vZmZfdCBfX3VzZXIgKm9mZnNldCwKLQlzMzIgY291bnQpCitTWVNDQUxMX0RFRklORTQoMzJfc2VuZGZpbGUsIGxvbmcsIG91dF9mZCwgbG9uZywgaW5fZmQsCisJY29tcGF0X29mZl90IF9fdXNlciAqLCBvZmZzZXQsIHMzMiwgY291bnQpCiB7CiAJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggNTFkMWJhNC4uOWFiNzBjMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJc3lzCXN5c19zd2Fwb24JCTIKIAlzeXMJc3lzX3JlYm9vdAkJMwogCXN5cwlzeXNfb2xkX3JlYWRkaXIJCTMKLQlzeXMJb2xkX21tYXAJCTYJLyogNDA5MCAqLworCXN5cwlzeXNfbWlwc19tbWFwCQk2CS8qIDQwOTAgKi8KIAlzeXMJc3lzX211bm1hcAkJMgogCXN5cwlzeXNfdHJ1bmNhdGUJCTIKIAlzeXMJc3lzX2Z0cnVuY2F0ZQkJMgpAQCAtNTE5LDcgKzUxOSw3IEBACiAJc3lzCXN5c19zZW5kZmlsZQkJNAogCXN5cwlzeXNfbmlfc3lzY2FsbAkJMAogCXN5cwlzeXNfbmlfc3lzY2FsbAkJMAotCXN5cwlzeXNfbW1hcDIJCTYJLyogNDIxMCAqLworCXN5cwlzeXNfbWlwc19tbWFwMgkJNgkvKiA0MjEwICovCiAJc3lzCXN5c190cnVuY2F0ZTY0CQk0CiAJc3lzCXN5c19mdHJ1bmNhdGU2NAkJNAogCXN5cwlzeXNfc3RhdDY0CQkyCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IGE5ZTE3MTYuLjliNDY5ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlQVFIJc3lzX25ld2xzdGF0CiAJUFRSCXN5c19wb2xsCiAJUFRSCXN5c19sc2VlawotCVBUUglvbGRfbW1hcAorCVBUUglzeXNfbWlwc19tbWFwCiAJUFRSCXN5c19tcHJvdGVjdAkJCS8qIDUwMTAgKi8KIAlQVFIJc3lzX211bm1hcAogCVBUUglzeXNfYnJrCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggMzBmM2I2My4uNzQzOGU5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtMTI5LDEyICsxMjksMTIgQEAKIAlQVFIJc3lzX25ld2xzdGF0CiAJUFRSCXN5c19wb2xsCiAJUFRSCXN5c19sc2VlawotCVBUUglvbGRfbW1hcAorCVBUUglzeXNfbWlwc19tbWFwCiAJUFRSCXN5c19tcHJvdGVjdAkJCS8qIDYwMTAgKi8KIAlQVFIJc3lzX211bm1hcAogCVBUUglzeXNfYnJrCi0JUFRSCXN5czMyX3J0X3NpZ2FjdGlvbgotCVBUUglzeXMzMl9ydF9zaWdwcm9jbWFzaworCVBUUglzeXNfMzJfcnRfc2lnYWN0aW9uCisJUFRSCXN5c18zMl9ydF9zaWdwcm9jbWFzawogCVBUUgljb21wYXRfc3lzX2lvY3RsCQkvKiA2MDE1ICovCiAJUFRSCXN5c19wcmVhZDY0CiAJUFRSCXN5c19wd3JpdGU2NApAQCAtMTU5LDcgKzE1OSw3IEBACiAJUFRSCWNvbXBhdF9zeXNfc2V0aXRpbWVyCiAJUFRSCXN5c19hbGFybQogCVBUUglzeXNfZ2V0cGlkCi0JUFRSCXN5czMyX3NlbmRmaWxlCisJUFRSCXN5c18zMl9zZW5kZmlsZQogCVBUUglzeXNfc29ja2V0CQkJLyogNjA0MCAqLwogCVBUUglzeXNfY29ubmVjdAogCVBUUglzeXNfYWNjZXB0CkBAIC0xODEsMTQgKzE4MSwxNCBAQAogCVBUUglzeXNfZXhpdAogCVBUUgljb21wYXRfc3lzX3dhaXQ0CiAJUFRSCXN5c19raWxsCQkJLyogNjA2MCAqLwotCVBUUglzeXMzMl9uZXd1bmFtZQorCVBUUglzeXNfMzJfbmV3dW5hbWUKIAlQVFIJc3lzX3NlbWdldAogCVBUUglzeXNfc2Vtb3AKLQlQVFIJc3lzbjMyX3NlbWN0bAorCVBUUglzeXNfbjMyX3NlbWN0bAogCVBUUglzeXNfc2htZHQJCQkvKiA2MDY1ICovCiAJUFRSCXN5c19tc2dnZXQKLQlQVFIJc3lzbjMyX21zZ3NuZAotCVBUUglzeXNuMzJfbXNncmN2CisJUFRSCXN5c19uMzJfbXNnc25kCisJUFRSCXN5c19uMzJfbXNncmN2CiAJUFRSCWNvbXBhdF9zeXNfbXNnY3RsCiAJUFRSCWNvbXBhdF9zeXNfZmNudGwJCS8qIDYwNzAgKi8KIAlQVFIJc3lzX2Zsb2NrCkBAIC0yNDUsMTUgKzI0NSwxNSBAQAogCVBUUglzeXNfZ2V0c2lkCiAJUFRSCXN5c19jYXBnZXQKIAlQVFIJc3lzX2NhcHNldAotCVBUUglzeXMzMl9ydF9zaWdwZW5kaW5nCQkvKiA2MTI1ICovCisJUFRSCXN5c18zMl9ydF9zaWdwZW5kaW5nCQkvKiA2MTI1ICovCiAJUFRSCWNvbXBhdF9zeXNfcnRfc2lndGltZWR3YWl0Ci0JUFRSCXN5czMyX3J0X3NpZ3F1ZXVlaW5mbworCVBUUglzeXNfMzJfcnRfc2lncXVldWVpbmZvCiAJUFRSCXN5c24zMl9ydF9zaWdzdXNwZW5kCiAJUFRSCXN5czMyX3NpZ2FsdHN0YWNrCiAJUFRSCWNvbXBhdF9zeXNfdXRpbWUJCS8qIDYxMzAgKi8KIAlQVFIJc3lzX21rbm9kCi0JUFRSCXN5czMyX3BlcnNvbmFsaXR5Ci0JUFRSCXN5czMyX3VzdGF0CisJUFRSCXN5c18zMl9wZXJzb25hbGl0eQorCVBUUglzeXNfMzJfdXN0YXQKIAlQVFIJY29tcGF0X3N5c19zdGF0ZnMKIAlQVFIJY29tcGF0X3N5c19mc3RhdGZzCQkvKiA2MTM1ICovCiAJUFRSCXN5c19zeXNmcwpAQCAtMjY1LDE0ICsyNjUsMTQgQEAKIAlQVFIJc3lzX3NjaGVkX2dldHNjaGVkdWxlcgogCVBUUglzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogCVBUUglzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgotCVBUUglzeXMzMl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJLyogNjE0NSAqLworCVBUUglzeXNfMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCS8qIDYxNDUgKi8KIAlQVFIJc3lzX21sb2NrCiAJUFRSCXN5c19tdW5sb2NrCiAJUFRSCXN5c19tbG9ja2FsbAogCVBUUglzeXNfbXVubG9ja2FsbAogCVBUUglzeXNfdmhhbmd1cAkJCS8qIDYxNTAgKi8KIAlQVFIJc3lzX3Bpdm90X3Jvb3QKLQlQVFIJc3lzMzJfc3lzY3RsCisJUFRSCXN5c18zMl9zeXNjdGwKIAlQVFIJc3lzX3ByY3RsCiAJUFRSCWNvbXBhdF9zeXNfYWRqdGltZXgKIAlQVFIJY29tcGF0X3N5c19zZXRybGltaXQJCS8qIDYxNTUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwppbmRleCBmZWZlZjRhLi5iMGZlZjRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC0yNjUsMTIgKzI2NSwxMiBAQAogCVBUUglzeXNfb2xkdW5hbWUKIAlQVFIJc3lzX3VtYXNrCQkJLyogNDA2MCAqLwogCVBUUglzeXNfY2hyb290Ci0JUFRSCXN5czMyX3VzdGF0CisJUFRSCXN5c18zMl91c3RhdAogCVBUUglzeXNfZHVwMgogCVBUUglzeXNfZ2V0cHBpZAogCVBUUglzeXNfZ2V0cGdycAkJCS8qIDQwNjUgKi8KIAlQVFIJc3lzX3NldHNpZAotCVBUUglzeXMzMl9zaWdhY3Rpb24KKwlQVFIJc3lzXzMyX3NpZ2FjdGlvbgogCVBUUglzeXNfc2dldG1hc2sKIAlQVFIJc3lzX3NzZXRtYXNrCiAJUFRSCXN5c19zZXRyZXVpZAkJCS8qIDQwNzAgKi8KQEAgLTI5Myw3ICsyOTMsNyBAQAogCVBUUglzeXNfc3dhcG9uCiAJUFRSCXN5c19yZWJvb3QKIAlQVFIJY29tcGF0X3N5c19vbGRfcmVhZGRpcgotCVBUUglvbGRfbW1hcAkJCS8qIDQwOTAgKi8KKwlQVFIJc3lzX21pcHNfbW1hcAkJCS8qIDQwOTAgKi8KIAlQVFIJc3lzX211bm1hcAogCVBUUglzeXNfdHJ1bmNhdGUKIAlQVFIJc3lzX2Z0cnVuY2F0ZQpAQCAtMzIwLDEyICszMjAsMTIgQEAKIAlQVFIJY29tcGF0X3N5c193YWl0NAogCVBUUglzeXNfc3dhcG9mZgkJCS8qIDQxMTUgKi8KIAlQVFIJY29tcGF0X3N5c19zeXNpbmZvCi0JUFRSCXN5czMyX2lwYworCVBUUglzeXNfMzJfaXBjCiAJUFRSCXN5c19mc3luYwogCVBUUglzeXMzMl9zaWdyZXR1cm4KIAlQVFIJc3lzMzJfY2xvbmUJCQkvKiA0MTIwICovCiAJUFRSCXN5c19zZXRkb21haW5uYW1lCi0JUFRSCXN5czMyX25ld3VuYW1lCisJUFRSCXN5c18zMl9uZXd1bmFtZQogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHN5c19tb2RpZnlfbGR0ICovCiAJUFRSCWNvbXBhdF9zeXNfYWRqdGltZXgKIAlQVFIJc3lzX21wcm90ZWN0CQkJLyogNDEyNSAqLwpAQCAtMzM5LDExICszMzksMTEgQEAKIAlQVFIJc3lzX2ZjaGRpcgogCVBUUglzeXNfYmRmbHVzaAogCVBUUglzeXNfc3lzZnMJCQkvKiA0MTM1ICovCi0JUFRSCXN5czMyX3BlcnNvbmFsaXR5CisJUFRSCXN5c18zMl9wZXJzb25hbGl0eQogCVBUUglzeXNfbmlfc3lzY2FsbAkgCQkvKiBmb3IgYWZzX3N5c2NhbGwgKi8KIAlQVFIJc3lzX3NldGZzdWlkCiAJUFRSCXN5c19zZXRmc2dpZAotCVBUUglzeXMzMl9sbHNlZWsJCQkvKiA0MTQwICovCisJUFRSCXN5c18zMl9sbHNlZWsJCQkvKiA0MTQwICovCiAJUFRSCWNvbXBhdF9zeXNfZ2V0ZGVudHMKIAlQVFIJY29tcGF0X3N5c19zZWxlY3QKIAlQVFIJc3lzX2Zsb2NrCkBAIC0zNTYsNyArMzU2LDcgQEAKIAlQVFIJc3lzX25pX3N5c2NhbGwJCQkvKiA0MTUwICovCiAJUFRSCXN5c19nZXRzaWQKIAlQVFIJc3lzX2ZkYXRhc3luYwotCVBUUglzeXMzMl9zeXNjdGwKKwlQVFIJc3lzXzMyX3N5c2N0bAogCVBUUglzeXNfbWxvY2sKIAlQVFIJc3lzX211bmxvY2sJCQkvKiA0MTU1ICovCiAJUFRSCXN5c19tbG9ja2FsbApAQCAtMzY4LDcgKzM2OCw3IEBACiAJUFRSCXN5c19zY2hlZF95aWVsZAogCVBUUglzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogCVBUUglzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgotCVBUUglzeXMzMl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgCS8qIDQxNjUgKi8KKwlQVFIJc3lzXzMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAJLyogNDE2NSAqLwogCVBUUgljb21wYXRfc3lzX25hbm9zbGVlcAogCVBUUglzeXNfbXJlbWFwCiAJUFRSCXN5c19hY2NlcHQKQEAgLTM5NywyNSArMzk3LDI1IEBACiAJUFRSCXN5c19nZXRyZXNnaWQKIAlQVFIJc3lzX3ByY3RsCiAJUFRSCXN5czMyX3J0X3NpZ3JldHVybgotCVBUUglzeXMzMl9ydF9zaWdhY3Rpb24KLQlQVFIJc3lzMzJfcnRfc2lncHJvY21hc2sgCQkvKiA0MTk1ICovCi0JUFRSCXN5czMyX3J0X3NpZ3BlbmRpbmcKKwlQVFIJc3lzXzMyX3J0X3NpZ2FjdGlvbgorCVBUUglzeXNfMzJfcnRfc2lncHJvY21hc2sgCQkvKiA0MTk1ICovCisJUFRSCXN5c18zMl9ydF9zaWdwZW5kaW5nCiAJUFRSCWNvbXBhdF9zeXNfcnRfc2lndGltZWR3YWl0Ci0JUFRSCXN5czMyX3J0X3NpZ3F1ZXVlaW5mbworCVBUUglzeXNfMzJfcnRfc2lncXVldWVpbmZvCiAJUFRSCXN5czMyX3J0X3NpZ3N1c3BlbmQKLQlQVFIJc3lzMzJfcHJlYWQJCQkvKiA0MjAwICovCi0JUFRSCXN5czMyX3B3cml0ZQorCVBUUglzeXNfMzJfcHJlYWQJCQkvKiA0MjAwICovCisJUFRSCXN5c18zMl9wd3JpdGUKIAlQVFIJc3lzX2Nob3duCiAJUFRSCXN5c19nZXRjd2QKIAlQVFIJc3lzX2NhcGdldAogCVBUUglzeXNfY2Fwc2V0CQkJLyogNDIwNSAqLwogCVBUUglzeXMzMl9zaWdhbHRzdGFjawotCVBUUglzeXMzMl9zZW5kZmlsZQorCVBUUglzeXNfMzJfc2VuZGZpbGUKIAlQVFIJc3lzX25pX3N5c2NhbGwKIAlQVFIJc3lzX25pX3N5c2NhbGwKLQlQVFIJc3lzMzJfbW1hcDIJCQkvKiA0MjEwICovCi0JUFRSCXN5czMyX3RydW5jYXRlNjQKLQlQVFIJc3lzMzJfZnRydW5jYXRlNjQKKwlQVFIJc3lzX21pcHNfbW1hcDIJCQkvKiA0MjEwICovCisJUFRSCXN5c18zMl90cnVuY2F0ZTY0CisJUFRSCXN5c18zMl9mdHJ1bmNhdGU2NAogCVBUUglzeXNfbmV3c3RhdAogCVBUUglzeXNfbmV3bHN0YXQKIAlQVFIJc3lzX25ld2ZzdGF0CQkJLyogNDIxNSAqLwpAQCAtNDgxLDcgKzQ4MSw3IEBACiAJUFRSCWNvbXBhdF9zeXNfbXFfbm90aWZ5CQkvKiA0Mjc1ICovCiAJUFRSCWNvbXBhdF9zeXNfbXFfZ2V0c2V0YXR0cgogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHN5c192c2VydmVyICovCi0JUFRSCXN5czMyX3dhaXRpZAorCVBUUglzeXNfMzJfd2FpdGlkCiAJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogYXZhaWxhYmxlLCB3YXMgc2V0YWx0cm9vdCAqLwogCVBUUglzeXNfYWRkX2tleQkJCS8qIDQyODAgKi8KIAlQVFIJc3lzX3JlcXVlc3Rfa2V5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwppbmRleCBhNGUxMDZjLi44MzBjNWVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FiaS5oPgpAQCAtMzM4LDggKzMzOSw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfVFJBRF9TSUdOQUxTCi1hc21saW5rYWdlIGludCBzeXNfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCi0Jc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QpCitTWVNDQUxMX0RFRklORTMoc2lnYWN0aW9uLCBpbnQsIHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKiwgYWN0LAorCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICosIG9hY3QpCiB7CiAJc3RydWN0IGtfc2lnYWN0aW9uIG5ld19rYSwgb2xkX2thOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggNjUyNzA5Yi4uMmU3NDA3NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYwpAQCAtMzQ5LDggKzM0OSw4IEBACiAJcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzMzJfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uMzIgX191c2VyICpvYWN0KQorU1lTQ0FMTF9ERUZJTkUzKDMyX3NpZ2FjdGlvbiwgbG9uZywgc2lnLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uMzIgX191c2VyICosIGFjdCwKKwlzdHJ1Y3Qgc2lnYWN0aW9uMzIgX191c2VyICosIG9hY3QpCiB7CiAJc3RydWN0IGtfc2lnYWN0aW9uIG5ld19rYSwgb2xkX2thOwogCWludCByZXQ7CkBAIC03MDQsOSArNzA0LDkgQEAKIAkucmVzdGFydAk9IF9fTlJfTzMyX3Jlc3RhcnRfc3lzY2FsbAogfTsKIAotYXNtbGlua2FnZSBpbnQgc3lzMzJfcnRfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKLQkJCQkgIHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKm9hY3QsCi0JCQkJICB1bnNpZ25lZCBpbnQgc2lnc2V0c2l6ZSkKK1NZU0NBTExfREVGSU5FNCgzMl9ydF9zaWdhY3Rpb24sIGludCwgc2lnLAorCWNvbnN0IHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKiwgYWN0LAorCXN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKiwgb2FjdCwgdW5zaWduZWQgaW50LCBzaWdzZXRzaXplKQogewogCXN0cnVjdCBrX3NpZ2FjdGlvbiBuZXdfc2EsIG9sZF9zYTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKQEAgLTc0OCw4ICs3NDgsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2UgaW50IHN5czMyX3J0X3NpZ3Byb2NtYXNrKGludCBob3csIGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnNldCwKLQljb21wYXRfc2lnc2V0X3QgX191c2VyICpvc2V0LCB1bnNpZ25lZCBpbnQgc2lnc2V0c2l6ZSkKK1NZU0NBTExfREVGSU5FNCgzMl9ydF9zaWdwcm9jbWFzaywgaW50LCBob3csIGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKiwgc2V0LAorCWNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKiwgb3NldCwgdW5zaWduZWQgaW50LCBzaWdzZXRzaXplKQogewogCXNpZ3NldF90IG9sZF9zZXQsIG5ld19zZXQ7CiAJaW50IHJldDsKQEAgLTc3MCw4ICs3NzAsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2UgaW50IHN5czMyX3J0X3NpZ3BlbmRpbmcoY29tcGF0X3NpZ3NldF90IF9fdXNlciAqdXNldCwKLQl1bnNpZ25lZCBpbnQgc2lnc2V0c2l6ZSkKK1NZU0NBTExfREVGSU5FMigzMl9ydF9zaWdwZW5kaW5nLCBjb21wYXRfc2lnc2V0X3QgX191c2VyICosIHVzZXQsCisJdW5zaWduZWQgaW50LCBzaWdzZXRzaXplKQogewogCWludCByZXQ7CiAJc2lnc2V0X3Qgc2V0OwpAQCAtNzg3LDcgKzc4Nyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzMzJfcnRfc2lncXVldWVpbmZvKGludCBwaWQsIGludCBzaWcsIGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp1aW5mbykKK1NZU0NBTExfREVGSU5FMygzMl9ydF9zaWdxdWV1ZWluZm8sIGludCwgcGlkLCBpbnQsIHNpZywKKwljb21wYXRfc2lnaW5mb190IF9fdXNlciAqLCB1aW5mbykKIHsKIAlzaWdpbmZvX3QgaW5mbzsKIAlpbnQgcmV0OwpAQCAtODAyLDEwICs4MDMsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfd2FpdGlkKGludCB3aGljaCwgY29tcGF0X3BpZF90IHBpZCwKLQkgICAgIGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp1aW5mbywgaW50IG9wdGlvbnMsCi0JICAgICBzdHJ1Y3QgY29tcGF0X3J1c2FnZSBfX3VzZXIgKnVydSkKK1NZU0NBTExfREVGSU5FNSgzMl93YWl0aWQsIGludCwgd2hpY2gsIGNvbXBhdF9waWRfdCwgcGlkLAorCSAgICAgY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKiwgdWluZm8sIGludCwgb3B0aW9ucywKKwkgICAgIHN0cnVjdCBjb21wYXRfcnVzYWdlIF9fdXNlciAqLCB1cnUpCiB7CiAJc2lnaW5mb190IGluZm87CiAJc3RydWN0IHJ1c2FnZSBydTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMzc5NzBkOS4uOGNmMzg0NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTE1Miw5ICsxNTIsOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCi1vbGRfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgcHJvdCwKLQlpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KQorU1lTQ0FMTF9ERUZJTkU2KG1pcHNfbW1hcCwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAorCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLCB1bnNpZ25lZCBsb25nLAorCWZkLCBvZmZfdCwgb2Zmc2V0KQogewogCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwogCkBAIC0xNjgsOSArMTY4LDkgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1hc21saW5rYWdlIHVuc2lnbmVkIGxvbmcKLXN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCi0gICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZikKK1NZU0NBTExfREVGSU5FNihtaXBzX21tYXAyLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBsZW4sCisJdW5zaWduZWQgbG9uZywgcHJvdCwgdW5zaWduZWQgbG9uZywgZmxhZ3MsIHVuc2lnbmVkIGxvbmcsIGZkLAorCXVuc2lnbmVkIGxvbmcsIHBnb2ZmKQogewogCWlmIChwZ29mZiAmICh+UEFHRV9NQVNLID4+IDEyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNDAsNyArMjQwLDcgQEAKIC8qCiAgKiBDb21wYWNyYXBhYmlsaXR5IC4uLgogICovCi1hc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqIG5hbWUpCitTWVNDQUxMX0RFRklORTEodW5hbWUsIHN0cnVjdCBvbGRfdXRzbmFtZSBfX3VzZXIgKiwgbmFtZSkKIHsKIAlpZiAobmFtZSAmJiAhY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKSwgc2l6ZW9mICgqbmFtZSkpKQogCQlyZXR1cm4gMDsKQEAgLTI1MCw3ICsyNTAsNyBAQAogLyoKICAqIENvbXBhY3JhcGFiaWxpdHkgLi4uCiAgKi8KLWFzbWxpbmthZ2UgaW50IHN5c19vbGR1bmFtZShzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgX191c2VyICogbmFtZSkKK1NZU0NBTExfREVGSU5FMShvbGR1bmFtZSwgc3RydWN0IG9sZG9sZF91dHNuYW1lIF9fdXNlciAqLCBuYW1lKQogewogCWludCBlcnJvcjsKIApAQCAtMjc5LDcgKzI3OSw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1hc21saW5rYWdlIGludCBzeXNfc2V0X3RocmVhZF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcikKK1NZU0NBTExfREVGSU5FMShzZXRfdGhyZWFkX2FyZWEsIHVuc2lnbmVkIGxvbmcsIGFkZHIpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCk7CiAKQEAgLTI5MCw3ICsyOTAsNyBAQAogCXJldHVybiAwOwogfQogCi1hc21saW5rYWdlIGludCBfc3lzX3N5c21pcHMoaW50IGNtZCwgbG9uZyBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMpCithc21saW5rYWdlIGludCBfc3lzX3N5c21pcHMobG9uZyBjbWQsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMpCiB7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE1JUFNfQVRPTUlDX1NFVDoKQEAgLTMyNSw4ICszMjUsOCBAQAogICoKICAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuCiAgKi8KLWFzbWxpbmthZ2UgaW50IHN5c19pcGModW5zaWduZWQgaW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdGhpcmQsIHZvaWQgX191c2VyICpwdHIsIGxvbmcgZmlmdGgpCitTWVNDQUxMX0RFRklORTYoaXBjLCB1bnNpZ25lZCBpbnQsIGNhbGwsIGludCwgZmlyc3QsIGludCwgc2Vjb25kLAorCXVuc2lnbmVkIGxvbmcsIHRoaXJkLCB2b2lkIF9fdXNlciAqLCBwdHIsIGxvbmcsIGZpZnRoKQogewogCWludCB2ZXJzaW9uLCByZXQ7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQAogLyoKICAqIE5vIGltcGxlbWVudGVkIHlldCAuLi4KICAqLwotYXNtbGlua2FnZSBpbnQgc3lzX2NhY2hlY3RsKGNoYXIgKmFkZHIsIGludCBuYnl0ZXMsIGludCBvcCkKK1NZU0NBTExfREVGSU5FMyhjYWNoZWN0bCwgY2hhciAqLCBhZGRyLCBpbnQsIG5ieXRlcywgaW50LCBvcCkKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCBiMmQ3MDQxLi4yOWZhZGFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC0xNTIwLDcgKzE1MjAsOSBAQAogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CisJCXVuc2lnbmVkIGxvbmcgc3IgPSBzZXRfYzBfc3RhdHVzKFNUMF9CRVYpOwogCQl3cml0ZV9jMF9lYmFzZShlYmFzZSk7CisJCXdyaXRlX2MwX3N0YXR1cyhzcik7CiAJCS8qIFNldHRpbmcgdmVjdG9yIHNwYWNpbmcgZW5hYmxlcyBFSS9WSSBtb2RlICAqLwogCQljaGFuZ2VfYzBfaW50Y3RsKDB4M2UwLCBWRUNUT1JTUEFDSU5HKTsKIAl9CkBAIC0xNjAyLDggKzE2MDQsNiBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCXVuc2lnbmVkIGxvbmcgdW5jYWNoZWRfZWJhc2UgPSBUT19VTkNBQyhlYmFzZSk7CiAjZW5kaWYKLQlpZiAoY3B1X2hhc19taXBzX3IyKQotCQl1bmNhY2hlZF9lYmFzZSArPSAocmVhZF9jMF9lYmFzZSgpICYgMHgzZmZmZjAwMCk7CiAKIAlpZiAoIWFkZHIpCiAJCXBhbmljKHBhbmljX251bGxfY2Vycik7CkBAIC0xNjM1LDkgKzE2MzUsMTEgQEAKIAkJcmV0dXJuOwkvKiBBbHJlYWR5IGRvbmUgKi8KICNlbmRpZgogCi0JaWYgKGNwdV9oYXNfdmVpYyB8fCBjcHVfaGFzX3ZpbnQpCi0JCWViYXNlID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKDB4MjAwICsgVkVDVE9SU1BBQ0lORyo2NCk7Ci0JZWxzZSB7CisJaWYgKGNwdV9oYXNfdmVpYyB8fCBjcHVfaGFzX3ZpbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gMHgyMDAgKyBWRUNUT1JTUEFDSU5HKjY0OworCQllYmFzZSA9ICh1bnNpZ25lZCBsb25nKQorCQkJX19hbGxvY19ib290bWVtKHNpemUsIDEgPDwgZmxzKHNpemUpLCAwKTsKKwl9IGVsc2UgewogCQllYmFzZSA9IENBQ19CQVNFOwogCQlpZiAoY3B1X2hhc19taXBzX3IyKQogCQkJZWJhc2UgKz0gKHJlYWRfYzBfZWJhc2UoKSAmIDB4M2ZmZmYwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjRrLmMgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwppbmRleCBjNDNmNGIyLi44NzFlODI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwpAQCAtNzgwLDcgKzc4MCw3IEBACiAJCWMtPmRjYWNoZS53YXlzID0gMjsKIAkJYy0+ZGNhY2hlLndheWJpdCA9IDA7CiAKLQkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1A7CisJCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfQ0FDSEVfQ0RFWF9QIHwgTUlQU19DUFVfUFJFRkVUQ0g7CiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfVFg0OVhYOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2NhY2hlLmMgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwppbmRleCA5OGFkMGE4Li42OTRkNTFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2FjaGUuYworKysgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC01OCw4ICs1OSw4IEBACiAgKiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSB0aGUgY2FjaGUgYXJndW1lbnQgaXMgbm90IEJDQUNIRSBidXQKICAqIHRoYXQgc2VlbXMgdmVyeSBhdHlwaWNhbCB1c2UgLi4uCiAgKi8KLWFzbWxpbmthZ2UgaW50IHN5c19jYWNoZWZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwKLQl1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBpbnQgY2FjaGUpCitTWVNDQUxMX0RFRklORTMoY2FjaGVmbHVzaCwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgYnl0ZXMsCisJdW5zaWduZWQgaW50LCBjYWNoZSkKIHsKIAlpZiAoYnl0ZXMgPT0gMCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCmluZGV4IDU0NmU2OTcuLmJlZDU2ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAlpZiAoIXBsYXRfZGV2aWNlX2lzX2NvaGVyZW50KGRldikgJiYgZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyOwogCi0JCWFkZHIgPSBwbGF0X2RtYV9hZGRyX3RvX3BoeXMoZG1hX2FkZHJlc3MpOworCQlhZGRyID0gZG1hX2FkZHJfdG9fdmlydChkbWFfYWRkcmVzcyk7CiAJCWRtYV9jYWNoZV93YmFja19pbnYoYWRkciwgc2l6ZSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vcGFnZS5jIGIvYXJjaC9taXBzL21tL3BhZ2UuYwppbmRleCAxNDE3YzY0Li40ODA2MGM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGFnZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9wYWdlLmMKQEAgLTE3Miw4ICsxNzIsOSBAQAogCQkgKi8KIAkJY2FjaGVfbGluZV9zaXplID0gY3B1X2RjYWNoZV9saW5lX3NpemUoKTsKIAkJc3dpdGNoIChjdXJyZW50X2NwdV90eXBlKCkpIHsKKwkJY2FzZSBDUFVfUjU1MDA6CiAJCWNhc2UgQ1BVX1RYNDlYWDoKLQkJCS8qIFRYNDkgc3VwcG9ydHMgb25seSBQcmVmX0xvYWQgKi8KKwkJCS8qIFRoZXNlIHByb2Nlc3NvcnMgb25seSBzdXBwb3J0IHRoZSBQcmVmX0xvYWQuICovCiAJCQlwcmVmX2JpYXNfY29weV9sb2FkID0gMjU2OwogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggNDI5NDIwMy4uZjMzNWNmNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTMxOCw2ICszMTgsNyBAQAogCWNhc2UgQ1BVX0JDTTQ3MTA6CiAJY2FzZSBDUFVfTE9PTkdTT04yOgogCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT046CisJY2FzZSBDUFVfUjU1MDA6CiAJCWlmIChtNGtjX3RsYnBfd2FyKCkpCiAJCQl1YXNtX2lfbm9wKHApOwogCQl0bGJ3KHApOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL0tjb25maWcgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwppbmRleCA5YTlmNDMzLi40MWQxNjgyIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvS2NvbmZpZworKysgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIAogY29uZmlnIE1OMTAzMDAKIAlkZWZfYm9vbCB5CisJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAogY29uZmlnIEFNMzMKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYwppbmRleCA1NmM2NGNjLi41MGZkYjVjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQlpZiAoYWN0aW9uKSB7CiAJCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJCXNlcV9wcmludGYocCwgIiAlMTRzLiV1IiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSwKIAkJCQkgICAoR3hJQ1IoaSkgJiBHeElDUl9MRVZFTCkgPj4KIAkJCQkgICBHeElDUl9MRVZFTF9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYwppbmRleCAxYTg2NDI1Li4wN2RiYmNkIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQlCUklER0VSRUdCKHdoZXJlKSA9IHZhbHVlOwogCX0gZWxzZSB7CiAJCWlmIChidXMtPm51bWJlciA9PSAwICYmCi0JCSAgICAoZGV2Zm4gPT0gUENJX0RFVkZOKDIsIDApICYmIGRldmZuID09IFBDSV9ERVZGTigzLCAwKSkKKwkJICAgIChkZXZmbiA9PSBQQ0lfREVWRk4oMiwgMCkgfHwgZGV2Zm4gPT0gUENJX0RFVkZOKDMsIDApKQogCQkgICAgKQogCQkJX19wY2lkZWJ1ZygiPD0gJTAyeCIsIGJ1cywgZGV2Zm4sIHdoZXJlLCB2YWx1ZSk7CiAJCUNPTkZJR19BRERSRVNTID0gQ09ORklHX0NNRChidXMsIGRldmZuLCB3aGVyZSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9jb25maWdzLzcxMl9kZWZjb25maWcgYi9hcmNoL3BhcmlzYy9jb25maWdzLzcxMl9kZWZjb25maWcKaW5kZXggOWZjOTZlNy4uYmYzNGEyOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvY29uZmlncy83MTJfZGVmY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvNzEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMwotIyBGcmkgT2N0IDEyIDIxOjAwOjA3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAwMTozMjo1NSAyMDA5CiAjCiBDT05GSUdfUEFSSVNDPXkKIENPTkZJR19NTVU9eQpAQCAtMzMsMTcgKzMzLDM1IEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC01NSwyOSArNzMsMzggQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKK0NPTkZJR19JTklUX0FMTF9QT1NTSUJMRT15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05MSw2ICsxMTgsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwpAQCAtMTE0LDE3ICsxNDIsMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19IUFVYIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM4LDEwICsxNjgsNiBAQAogIyBDT05GSUdfRUlTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NiwxNiArMTgyLDE1IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMTczLDYgKzE5OCw3IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0yMDMsMjUgKzIyOSwyNSBAQAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CkBAIC0yMzAsNiArMjU2LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQpAQCAtMjQwLDI4ICsyNjcsMjYgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiBDT05GSUdfTkVUX1BLVEdFTj1tCiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTI3Niw2ICszMDEsOCBAQAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldApAQCAtMjk4LDExICszMjUsMTkgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTYxNDQKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIwogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC0zNDIsMTQgKzM3NywxNyBAQAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xBU0k3MDA9eQogQ09ORklHXzUzQzcwMF9MRV9PTl9CRT15CiAjIENPTkZJR19TQ1NJX1pBTE9OIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD1tCkBAIC0zNjIsNyArNDAwLDYgQEAKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC0zNzcsNiArNDE0LDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKQEAgLTM4Nyw2ICs0MjcsMTEgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQpAQCAtNDAxLDcgKzQ0Niw2IEBACiAjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC00MjMsNyArNDY3LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC00NDYsOCArNDg5LDggQEAKIENPTkZJR19NT1VTRV9QUzJfQUxQUz15CiBDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9TRVJJQUw9bQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC00NzQsOSArNTE3LDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01MDEsNzIgKzU0Niw3NiBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD02NAogQ09ORklHX1BSSU5URVI9bQogIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBERVY9bQotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci1DT05GSUdfR0VOX1JUQ19YPXkKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19NQVhfUkFXX0RFVlM9MjU2CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQEAgLTU3OSw2ICs2MjgsMTQgQEAKIENPTkZJR19GQl9TVEk9eQogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC02MDYsMTUgKzY2Myw4IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19QQVJJU0NfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTYzMCwxMCArNjgwLDcgQEAKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CkBAIC02NDEsNjMgKzY4OCw4MiBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUE9SVE1BTjJYNCBpcyBub3Qgc2V0Ci0KLSMKLSMgR1NDIGRldmljZXMKLSMKK0NPTkZJR19TTkRfR1NDPXkKIENPTkZJR19TTkRfSEFSTU9OWT15Ci0KLSMKLSMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAotIwogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFN1cGVySAotIwotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiBDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFJUQyBpbnRlcmZhY2VzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIERNQSBEZXZpY2VzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfUEFSSVNDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNzA3LDcgKzc3Myw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CkBAIC03MTcsMTkgKzc4MywxOCBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPW0KICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC03NTksMTYgKzgyNCwxMyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKQEAgLTc3OCwzNSArODQwLDM0IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKIENPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KIENPTkZJR19TTUJfRlM9bQpAQCAtODE1LDYgKzg3Niw3IEBACiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfVVBDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldApAQCAtODI3LDEwICs4ODksNiBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpAQCAtODcxLDMzICs5MjksMjggQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCi0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT1tCi0KLSMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC05MDksMTAgKzk2MiwzMiBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1JPREFUQT15CiAKICMKQEAgLTkyMSw1NyArOTk2LDExMyBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTlVMTD1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIwogQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19URVNUPW0KLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD1tCiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYTUwMF9kZWZjb25maWcgYi9hcmNoL3BhcmlzYy9jb25maWdzL2E1MDBfZGVmY29uZmlnCmluZGV4IGRkYWNjNzIuLmYxMmU0YjggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvY29uZmlncy9hNTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMwotIyBGcmkgT2N0IDEyIDIxOjEyOjQ0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAwMTozMjo1NiAyMDA5CiAjCiBDT05GSUdfUEFSSVNDPXkKIENPTkZJR19NTVU9eQpAQCAtMzQsMTggKzM0LDMwIEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNTcsMjggKzY5LDQwIEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQorQ09ORklHX0lOSVRfQUxMX1BPU1NJQkxFPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogQ09ORklHX0JMT0NLX0NPTVBBVD15CiAKICMKQEAgLTkzLDYgKzExNyw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwpAQCAtMTE4LDEyICsxNDMsMTIgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMPXkKQEAgLTEzMSwxMSArMTU2LDEyIEBACiBDT05GSUdfRElTQ09OVElHTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX05SX0NQVVM9OAogCkBAIC0xNDUsMTQgKzE3MSwxMyBAQAogIyBDT05GSUdfR1NDIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEJBPXkKIENPTkZJR19JT1NBUElDPXkKIENPTkZJR19JT01NVV9TQkE9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1BDQ0FSRD1tCiAjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQT1tCkBAIC0xODcsMTYgKzIxMiwxNSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjA0LDYgKzIyOCw4IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCiBDT05GSUdfTkVUX0tFWT1tCiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMjM0LDcgKzI2MCw2IEBACiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CkBAIC0yNTAsNjYgKzI3NSw3MiBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiAjIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiAjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9SQVc9bQpAQCAtMzE4LDMzICszNDksMzAgQEAKIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09QVFM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotIyBDT05GSUdfSVA2X05GX01BVENIX09XTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiAjIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2NCBpcyBub3Qgc2V0Ci1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX1JBVz1tCiBDT05GSUdfSVBfRENDUD1tCiBDT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQotQ09ORklHX0lQX0RDQ1BfQUNLVkVDPXkKIAogIwogIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKLUNPTkZJR19JUF9EQ0NQX0NDSUQyPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUF9DQ0lEMyBpcyBub3Qgc2V0CiAKQEAgLTM1Niw2ICszODQsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogQ09ORklHX0xMQz1tCkBAIC0zNjYsMjggKzM5NSwyNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKIENPTkZJR19ORVRfUEtUR0VOPW0KICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDAyLDYgKzQyOSw4IEBACiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC00MjEsMTQgKzQ1MCwyMyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjE0NAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00NjgsOCArNTA2LDEwIEBACiBDT05GSUdfU0NTSV9GQ19BVFRSUz1tCiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDc4LDE2ICs1MTgsMjEgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0xCkBAIC01MDMsOSArNTQ4LDExIEBACiBDT05GSUdfU0NTSV9ERUJVRz1tCiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKQEAgLTUxNCwxMCArNTYxLDYgQEAKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0ZVU0lPTj15CiBDT05GSUdfRlVTSU9OX1NQST1tCiBDT05GSUdfRlVTSU9OX0ZDPW0KQEAgLTUyOSwyMCArNTcyLDQwIEBACiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPW0KIENPTkZJR19CT05ESU5HPW0KICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPW0KKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPW0KICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CkBAIC01NjcsMzMgKzYzMCwzOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj1tCi0jIENPTkZJR19QQ05FVDMyX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPW0KICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD1tCi1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTYwMSwyMyArNjY5LDMxIEBACiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9bQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI1LDYgKzcwMSwxMSBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogQ09ORklHX05FVF9QQ01DSUE9eQogQ09ORklHX1BDTUNJQV8zQzU4OT1tCiBDT05GSUdfUENNQ0lBXzNDNTc0PW0KQEAgLTY1MCw3ICs3MzEsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY2OSw3ICs3NDksNiBAQAogIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNjkzLDEwICs3NzIsMTMgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC03MjEsMTcgKzgwMywxMiBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLUNPTkZJR19HRU5fUlRDX1g9eQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotQ09ORklHX0FHUD15Ci1DT05GSUdfQUdQX1BBUklTQz15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNzM5LDUxICs4MTYsNjYgQEAKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CiBDT05GSUdfTUFYX1JBV19ERVZTPTI1NgogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19BR1A9eQorQ09ORklHX0FHUF9QQVJJU0M9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTc5Miw1MCArODg0LDgzIEBACiBDT05GSUdfRFVNTVlfQ09OU09MRV9DT0xVTU5TPTE2MAogQ09ORklHX0RVTU1ZX0NPTlNPTEVfUk9XUz02NAogIyBDT05GSUdfU1RJX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBSVEMgaW50ZXJmYWNlcwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBETUEgRGV2aWNlcworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBVc2Vyc3BhY2UgSS9PCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfUEFSSVNDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtODQ1LDcgKzk3MCw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CkBAIC04NTUsMTkgKzk4MCwxOSBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPW0KICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC04OTcsMTYgKzEwMjIsMTMgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CkBAIC05MTYsMzQgKzEwMzgsMzMgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU19ESVJFQ1RJTz15CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX0xPQ0tEPW0KIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCiBDT05GSUdfU1VOUlBDX0dTUz1tCi0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KIENPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KIENPTkZJR19TTUJfRlM9bQpAQCAtOTUyLDYgKzEwNzMsNyBAQAogQ09ORklHX0NJRlM9bQogIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1VQQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKQEAgLTk2NCwxMCArMTA4Niw2IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCkBAIC0xMDA4LDMzICsxMTI2LDI4IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KLQotIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMDQ2LDEwICsxMTU5LDMzIEBACiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0RPQ1NSQyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JPREFUQSBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNTgsNTYgKzExOTQsMTEyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX05VTEw9bQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPW0KLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKICMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1RFU1Q9bQotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvY29uZmlncy9iMTgwX2RlZmNvbmZpZyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYjE4MF9kZWZjb25maWcKaW5kZXggMWJmMjJjOS4uOThiYjA1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvY29uZmlncy9iMTgwX2RlZmNvbmZpZworKysgYi9hcmNoL3BhcmlzYy9jb25maWdzL2IxODBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIEZyaSBPY3QgMTIgMjE6MTY6NDYgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAorIyBGcmkgTWFyIDEzIDAxOjMyOjU3IDIwMDkKICMKIENPTkZJR19QQVJJU0M9eQogQ09ORklHX01NVT15CkBAIC0zMywxMyArMzMsMjkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNTEsMjcgKzY3LDM0IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVF9BTExfUE9TU0lCTEU9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODUsNiArMTA4LDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCkBAIC0xMDgsMTMgKzEzMiwxNSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19IUFVYIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMwLDE0ICsxNTYsMTQgQEAKIENPTkZJR19JU0E9eQogQ09ORklHX1BDST15CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogQ09ORklHX0dTQ19ESU5PPXkKICMgQ09ORklHX1BDSV9MQkEgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBQQS1SSVNDIHNwZWNpZmljIGRyaXZlcnMKQEAgLTE1MSwxNiArMTc3LDE1IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yMDUsMzYgKzIzMCwzNyBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCiAjCkBAIC0yNDcsNyArMjczLDkgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTI3NSwxMCArMzAzLDE4IEBACiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKIENPTkZJR19BVEFfT1ZFUl9FVEg9eQorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTMxNyw4ICszNTMsMTAgQEAKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtMzMwLDEyICszNjgsMTUgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldApAQCAtMzQ2LDYgKzM4Nyw3IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTEFTSTcwMD15CiBDT05GSUdfNTNDNzAwX0xFX09OX0JFPXkKQEAgLTM2MCw3ICs0MDIsNiBAQAogQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTPTMyCiBDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQz00MAogIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldApAQCAtMzczLDkgKzQxNCwxMSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQpAQCAtMzgzLDI2ICs0MjYsMTggQEAKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKIAogIwotIyBBbiBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQorIyBBIG5ldyBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQogIwogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CkBAIC00MzQsMzYgKzQ2OSw0OSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC00NzEsNiArNTE5LDExIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKQEAgLTUwMyw3ICs1NTYsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC01MjYsMTEgKzU3OCwxMiBAQAogQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKQEAgLTU2NCw5ICs2MTcsMTEgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU5OCw3NSArNjUzLDc5IEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIENPTkZJR19QUklOVEVSPXkKICMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIwogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC02OTEsNiArNzUwLDcgQEAKICMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC02OTgsNyArNzU4LDE2IEBACiAjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTcxOCwxNSArNzg3LDggQEAKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX0xPR09fUEFSSVNDX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC03NDIsMTAgKzgwNCw3IEBACiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIworQ09ORklHX1NORF9EUklWRVJTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldApAQCAtNzUzLDEwICs4MTIsNyBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUE9SVE1BTjJYNCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUENJPXkKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CkBAIC03NjUsOSArODIxLDExIEBACiAjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldApAQCAtNzkyLDYgKzg1MCw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC04MDksMzAgKzg2OCwyMyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLQotIwotIyBHU0MgZGV2aWNlcwotIworQ09ORklHX1NORF9HU0M9eQogQ09ORklHX1NORF9IQVJNT05ZPXkKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKIENPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtODQwLDM2ICs4OTIsNjMgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgUlRDIGludGVyZmFjZXMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgRE1BIERldmljZXMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9QQVJJU0M9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC04NzksMTkgKzk1OCwxOCBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC05MTcsMzUgKzk5NSwzMiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQpAQCAtOTYyLDEwICsxMDM3LDYgQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KQEAgLTEwMTEsNyArMTA4Miw5IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMTksOSArMTA5MiwxMiBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMDMzLDEwICsxMTA5LDI5IEBACiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlVJTERfRE9DU1JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUk9EQVRBIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0NCw1MiArMTEzOSwxMDggQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCiBDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIwogIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYzMwMDBfZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcKaW5kZXggYzZkZWYzYy4uMGFhODAxNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMKLSMgRnJpIE9jdCAxMiAyMToyNDowMCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM4CisjIEZyaSBNYXIgMTMgMDE6MzI6NTggMjAwOQogIwogQ09ORklHX1BBUklTQz15CiBDT05GSUdfTU1VPXkKQEAgLTMzLDE2ICszMywyOSBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC01NCwyOSArNjcsMzkgQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKK0NPTkZJR19JTklUX0FMTF9QT1NTSUJMRT15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05MCw2ICsxMTMsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwpAQCAtMTE1LDE3ICsxMzksMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19IUFVYIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM0LDE0ICsxNjAsMTMgQEAKICMgQ09ORklHX0dTQyBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xCQT15CiBDT05GSUdfSU9TQVBJQz15CiBDT05GSUdfSU9NTVVfU0JBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCitDT05GSUdfSU9NTVVfSEVMUEVSPXkKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTE1OCwxNiArMTgzLDE1IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0xNzUsNiArMTk5LDggQEAKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0yMDQsNyArMjMwLDYgQEAKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKQEAgLTIyMCwyOSArMjQ1LDM0IEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogQ09ORklHX05FVEZJTFRFUl9ERUJVRz15CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogCiAjCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTI1MSw2ICsyODEsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0yNjAsMjggKzI5MSwyNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKIENPTkZJR19ORVRfUEtUR0VOPW0KICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMjk2LDYgKzMyNSw4IEBACiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC0zMTYsNTkgKzM0Nyw2MiBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIEVFUFJPTSBzdXBwb3J0CiAjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST15CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFRE1BX09OTFlESVNLPXkKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTlM4NzQxNT15CkBAIC0zODAsMTAgKzQxNCw3IEBACiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydApAQCAtNDIyLDggKzQ1MywxMCBAQAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDMzLDE2ICs0NjYsMjAgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MApAQCAtNDU4LDkgKzQ5NSwxMSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9ERUJVRz1tCiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKQEAgLTQ3NSwxMyArNTE0LDggQEAKIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RNX01VTFRJUEFUSD1tCi0jIENPTkZJR19ETV9NVUxUSVBBVEhfRU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX01VTFRJUEFUSF9SREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAogQ09ORklHX0ZVU0lPTj15CiBDT05GSUdfRlVTSU9OX1NQST1tCiAjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldApAQCAtNDkzLDIwICs1MjcsNDAgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9bQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKQEAgLTUyOCwzMyArNTgyLDM4IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPW0KICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz1tCiAjIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPW0KLSMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01NjIsMjMgKzYyMSwzMSBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPW0KICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTU4Niw2ICs2NTMsMTEgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNTk0LDcgKzY2Niw2IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldApAQCAtNjEyLDcgKzY4Myw2IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjM0LDcgKzcwNCw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTYwMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTEyMDAKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTY1Miw2ICs3MjEsNyBAQAogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNjcyLDEwICs3NDIsMTMgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC02OTksNzIgKzc3Miw3NyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLUNPTkZJR19HRU5fUlRDX1g9eQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CiBDT05GSUdfTUFYX1JBV19ERVZTPTI1NgogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQEAgLTc5MCw2ICs4NjgsNyBAQAogIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKQEAgLTc5OCw3ICs4NzcsMTYgQEAKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydApAQCAtODE4LDE1ICs5MDYsOCBAQAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAogQ09ORklHX0xPR09fUEFSSVNDX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC04NDIsMjAgKzkyMywxNiBAQAogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKK0NPTkZJR19TTkRfVk1BU1RFUj15CiBDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9EUklWRVJTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKKyMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQogQ09ORklHX1NORF9BRDE4ODk9eQogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CkBAIC04NjQsMTAgKzk0MSwxMiBAQAogIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKQEAgLTg5Miw2ICs5NzEsNyBAQAogIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldApAQCAtOTA5LDQ3ICs5ODksNTkgQEAKICMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgZGV2aWNlcwotIworQ09ORklHX1NORF9VU0I9eQogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtOTU4LDEyICsxMDUwLDIwIEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTk3MSwzMiArMTA3MSwzNyBAQAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BSSU5URVI9bQorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQogQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNCwxNSArMTEwOSwxMCBAQAogIwogQ09ORklHX1VTQl9NREM4MDA9bQogQ09ORklHX1VTQl9NSUNST1RFSz1tCi0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjEsNyArMTEyMSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogQ09ORklHX1VTQl9MRUdPVE9XRVI9bQogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMDM3LDM3ICsxMTM3LDU5IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgUlRDIGludGVyZmFjZXMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgRE1BIERldmljZXMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgVXNlcnNwYWNlIEkvTworIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX1BBUklTQz15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEwNzcsMjUgKzExOTksMjQgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPW0KICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xMTI0LDE2ICsxMjQ1LDEzIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtMTE0MiwzMiArMTI2MCwzMSBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTE4MSwxMCArMTI5OCw2IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCkBAIC0xMjI1LDMzICsxMzM4LDI4IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KLQotIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMjYzLDEwICsxMzcxLDMzIEBACiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0RPQ1NSQyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19ST0RBVEE9eQogCiAjCkBAIC0xMjc0LDU0ICsxNDA1LDExMCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KK0NPTkZJR19DUllQVE9fUk5HMj1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTlVMTD1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PW0KKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz1tCi0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz1tCi0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCiAjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1RFU1Q9bQotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZwppbmRleCA0NDhhNzU3Li4yODNhOTZjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvZGVmYXVsdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMKLSMgRnJpIE9jdCAxMiAyMDo1NDo1NyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM4CisjIEZyaSBNYXIgMTMgMDE6MzI6NTkgMjAwOQogIwogQ09ORklHX1BBUklTQz15CiBDT05GSUdfTU1VPXkKQEAgLTMzLDE3ICszMywzNSBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNTUsMjkgKzczLDM5IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CitDT05GSUdfSU5JVF9BTExfUE9TU0lCTEU9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtOTEsNiArMTE5LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKQEAgLTExNCwxNyArMTQzLDE5IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogIyBDT05GSUdfSFBVWCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0MCwxNSArMTcxLDE0IEBACiAjIENPTkZJR19JU0EgaXMgbm90IHNldAogQ09ORklHX1BDST15CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogQ09ORklHX0dTQ19ESU5PPXkKIENPTkZJR19QQ0lfTEJBPXkKIENPTkZJR19JT1NBUElDPXkKIENPTkZJR19JT01NVV9TQkE9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1BDQ0FSRD15CiAjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQT15CkBAIC0xODMsMTYgKzIxMywxNSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz1tCi0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTIwMCw2ICsyMjksOCBAQAogQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9eQogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTI0NSw4ICsyNzYsMTAgQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC0yNTQsNiArMjg3LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQpAQCAtMjY0LDI4ICsyOTgsMjYgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMzAwLDYgKzMzMiw4IEBACiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC0zMzAsNjMgKzM2NCw2OCBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjE0NAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgRUVQUk9NIHN1cHBvcnQKICMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDUz15CiAjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST15CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotQ09ORklHX0lERURNQV9PTkxZRElTSz15CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05TODc0MTU9eQpAQCAtMzk4LDEwICs0MzcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTQ0MCw4ICs0NzYsMTAgQEAKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDUyLDExICs0OTAsMTQgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC00NjQsNiArNTA1LDcgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xBU0k3MDA9eQogQ09ORklHXzUzQzcwMF9MRV9PTl9CRT15CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldApAQCAtNDg3LDkgKzUyOSwxMSBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKQEAgLTUwNSwzMiArNTQ5LDQ3IEBACiAjIENPTkZJR19ETV9aRVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQogQ09ORklHX0xBU0lfODI1OTY9eQpAQCAtNTUwLDEzICs2MDksMTUgQEAKICMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV9YSVJDT00gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1hJUlRVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC01NjQsNyArNjI1LDcgQEAKICMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0xORTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldApAQCAtNTc0LDE5ICs2MzUsMjQgQEAKICMgQ09ORklHX0VTMzIxMCBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz15CiAjIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01OTQsMjMgKzY2MCwzMSBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOCw2ICs2OTIsMTEgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNjI2LDcgKzcwNSw2IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKQEAgLTY1NCw3ICs3MzIsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY3Niw3ICs3NTMsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTY5OSwxMSArNzc1LDEyIEBACiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQogQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPXkKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9ISUw9eQogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldApAQCAtNzI5LDEwICs4MDYsMTMgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC03NTksMjEgKzgzOSwxNiBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKIENPTkZJR19QUklOVEVSPW0KICMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1BQREVWPW0KLSMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX0dFTl9SVENfWD15CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKQEAgLTc4MSw2MCArODU2LDcwIEBACiAjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtODYwLDYgKzk0NSw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtODY4LDcgKzk1NCwxNiBAQAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC04OTYsMTUgKzk5MSw4IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19QQVJJU0NfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTkyMCwxMSArMTAwOCw5IEBACiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIworQ09ORklHX1NORF9WTUFTVEVSPXkKIENPTkZJR19TTkRfQUM5N19DT0RFQz15CitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CkBAIC05MzIsMTAgKzEwMTgsOCBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUE9SVE1BTjJYNCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKKyMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQogQ09ORklHX1NORF9BRDE4ODk9eQogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CkBAIC05NDQsMTAgKzEwMjgsMTIgQEAKICMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CkBAIC05NzIsNiArMTA1OCw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC05ODksNTggKzEwNzYsNjcgQEAKICMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgZGV2aWNlcwotIworQ09ORklHX1NORF9VU0I9eQogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgZGV2aWNlcwotIworQ09ORklHX1NORF9QQ01DSUE9eQogIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotCi0jCi0jIEdTQyBkZXZpY2VzCi0jCitDT05GSUdfU05EX0dTQz15CiBDT05GSUdfU05EX0hBUk1PTlk9eQotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKICMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKIENPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTEwNDksMTIgKzExNDUsMTggQEAKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTA2MiwxOSArMTE2NCwyMyBAQAogQ09ORklHX1VTQl9VSENJX0hDRD15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKQEAgLTEwODQsMTYgKzExOTAsMTEgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwMiw3ICsxMjAzLDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtMTExOCwzOCArMTIxOSw2MCBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFJUQyBpbnRlcmZhY2VzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIERNQSBEZXZpY2VzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfUEFSSVNDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTE1OSwyMSArMTI4MiwyMCBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMDIsMTYgKzEzMjQsMTMgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CkBAIC0xMjIxLDMzICsxMzQwLDMyIEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiBDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCiBDT05GSUdfU01CX0ZTPW0KQEAgLTEyNTYsNiArMTM3NCw3IEBACiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfVVBDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldApAQCAtMTI2OCwxMCArMTM4Nyw2IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CkBAIC0xMzEyLDMzICsxNDI3LDI4IEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9eQotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9bQotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiBDT05GSUdfSEVBREVSU19DSEVDSz15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTEzNTAsMTAgKzE0NjAsMzMgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19UUkFDSU5HPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9ET0NTUkMgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ST0RBVEEgaXMgbm90IHNldAogCiAjCkBAIC0xMzYyLDU2ICsxNDk1LDExMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19OVUxMPW0KKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKIENPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fVEVTVD1tCi0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2hwdXgvZnMuYyBiL2FyY2gvcGFyaXNjL2hwdXgvZnMuYwppbmRleCBiZDlhNGRiMy4uNWNiZTlmOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaHB1eC9mcy5jCisrKyBiL2FyY2gvcGFyaXNjL2hwdXgvZnMuYwpAQCAtMTM3LDcgKzEzNyw2IEBACiAJCQllcnJvciA9IGNvdW50IC0gYnVmLmNvdW50OwogCX0KIAotb3V0X3B1dGY6CiAJZnB1dChmaWxlKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hc3NlbWJseS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXNzZW1ibHkuaAppbmRleCBmZmIyMDg4Li44OWZiNDAwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hc3NlbWJseS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Fzc2VtYmx5LmgKQEAgLTc5LDYgKzc5LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtcmVncy5oPgogCkBAIC0xMjksMjcgKzEzMCwyNyBAQAogCiAJLyogU2hpZnQgTGVmdCAtIG5vdGUgdGhlIHIgYW5kIHQgY2FuIE5PVCBiZSB0aGUgc2FtZSEgKi8KIAkubWFjcm8gc2hsIHIsIHNhLCB0Ci0JZGVwLHoJXHIsIDMxLVxzYSwgMzItXHNhLCBcdAorCWRlcCx6CVxyLCAzMS0oXHNhKSwgMzItKFxzYSksIFx0CiAJLmVuZG0KIAogCS8qIFRoZSBQQSAyLjAgc2hpZnQgbGVmdCAqLwogCS5tYWNybyBzaGx3IHIsIHNhLCB0Ci0JZGVwdyx6CVxyLCAzMS1cc2EsIDMyLVxzYSwgXHQKKwlkZXB3LHoJXHIsIDMxLShcc2EpLCAzMi0oXHNhKSwgXHQKIAkuZW5kbQogCiAJLyogQW5kIHRoZSBQQSAyLjBXIHNoaWZ0IGxlZnQgKi8KIAkubWFjcm8gc2hsZCByLCBzYSwgdAotCWRlcGQseglcciwgNjMtXHNhLCA2NC1cc2EsIFx0CisJZGVwZCx6CVxyLCA2My0oXHNhKSwgNjQtKFxzYSksIFx0CiAJLmVuZG0KIAogCS8qIFNoaWZ0IFJpZ2h0IC0gbm90ZSB0aGUgciBhbmQgdCBjYW4gTk9UIGJlIHRoZSBzYW1lISAqLwogCS5tYWNybyBzaHIgciwgc2EsIHQKLQlleHRydSBcciwgMzEtXHNhLCAzMi1cc2EsIFx0CisJZXh0cnUgXHIsIDMxLShcc2EpLCAzMi0oXHNhKSwgXHQKIAkuZW5kbQogCiAJLyogcGEyMHcgdmVyc2lvbiBvZiBzaGlmdCByaWdodCAqLwogCS5tYWNybyBzaHJkIHIsIHNhLCB0Ci0JZXh0cmQsdSBcciwgNjMtXHNhLCA2NC1cc2EsIFx0CisJZXh0cmQsdSBcciwgNjMtKFxzYSksIDY0LShcc2EpLCBcdAogCS5lbmRtCiAKIAkvKiBsb2FkIDMyLWJpdCAndmFsdWUnIGludG8gJ3JlZycgY29tcGVuc2F0aW5nIGZvciB0aGUgbGRpbApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDMwMzFkMS4uMWY2ZDJhZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pby5oCkBAIC0xNzQsMTUgKzE3NCw0OCBAQAogCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIF9fZm9yY2UgKikgYWRkciA9IGI7CiB9CiAKLS8qIHJlYWRiIGNhbiBuZXZlciBiZSBjb25zdCwgc28gdXNlIF9fZnN3YWIgaW5zdGVhZCBvZiBsZSpfdG9fY3B1ICovCi0jZGVmaW5lIHJlYWRiKGFkZHIpIF9fcmF3X3JlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3KGFkZHIpIGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKQotI2RlZmluZSByZWFkbChhZGRyKSBsZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhZGRyKSkKLSNkZWZpbmUgcmVhZHEoYWRkcikgbGU2NF90b19jcHUoX19yYXdfcmVhZHEoYWRkcikpCi0jZGVmaW5lIHdyaXRlYihiLCBhZGRyKSBfX3Jhd193cml0ZWIoYiwgYWRkcikKLSNkZWZpbmUgd3JpdGV3KGIsIGFkZHIpIF9fcmF3X3dyaXRldyhjcHVfdG9fbGUxNihiKSwgYWRkcikKLSNkZWZpbmUgd3JpdGVsKGIsIGFkZHIpIF9fcmF3X3dyaXRlbChjcHVfdG9fbGUzMihiKSwgYWRkcikKLSNkZWZpbmUgd3JpdGVxKGIsIGFkZHIpIF9fcmF3X3dyaXRlcShjcHVfdG9fbGU2NChiKSwgYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciByZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRiKGFkZHIpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gbGUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBsZTY0X3RvX2NwdShfX3Jhd19yZWFkcShhZGRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWIodW5zaWduZWQgY2hhciBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGViKGIsIGFkZHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRldyh1bnNpZ25lZCBzaG9ydCB3LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KHcpLCBhZGRyKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWwodW5zaWduZWQgaW50IGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWwoY3B1X3RvX2xlMzIobCksIGFkZHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlcSh1bnNpZ25lZCBsb25nIGxvbmcgcSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlcShjcHVfdG9fbGU2NChxKSwgYWRkcik7Cit9CisKKyNkZWZpbmUJcmVhZGIJcmVhZGIKKyNkZWZpbmUJcmVhZHcJcmVhZHcKKyNkZWZpbmUJcmVhZGwJcmVhZGwKKyNkZWZpbmUgcmVhZHEJcmVhZHEKKyNkZWZpbmUgd3JpdGViCXdyaXRlYgorI2RlZmluZSB3cml0ZXcJd3JpdGV3CisjZGVmaW5lIHdyaXRlbAl3cml0ZWwKKyNkZWZpbmUgd3JpdGVxCXdyaXRlcQogCiAjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKICNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCAzOTljODE5Li5kZmEyNmI2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtNDksNyArNDksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHhuX2FmZmluaXR5X2FkZHIodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CiAKIGV4dGVybiBpbnQgY3B1X2NsYWltX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKiwgdm9pZCAqKTsKLWV4dGVybiBpbnQgY3B1X2NoZWNrX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCAqZGVzdCk7CitleHRlcm4gaW50IGNwdV9jaGVja19hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCk7CiAKIC8qIHNvZnQgcG93ZXIgc3dpdGNoIHN1cHBvcnQgKHBvd2VyLmMpICovCiBleHRlcm4gc3RydWN0IHRhc2tsZXRfc3RydWN0IHBvd2VyX3Rhc2tsZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCmluZGV4IGM1ODRiMDAuLjQzMGYxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCkBAIC0zMzYsMTAgKzMzNiwxMSBAQAogI2RlZmluZSBOVU1fUERDX1JFU1VMVAkzMgogCiAjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIGV4dGVybiBpbnQgcGRjX3R5cGU7CiAKIC8qIFZhbHVlcyBmb3IgcGRjX3R5cGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCAzZmYxNmM1Li5lNzg0MDNiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfUEFSSVNDX1NXQUJfSAogI2RlZmluZSBfUEFSSVNDX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCAxYzZkYmI2Li5jZDRjMGIyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0yNDEsNiArMjQxLDcgQEAKICNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKICNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCiAKK3N0cnVjdCBwdF9yZWdzOwogaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKICNlbmRpZiAvKiBfX1BBUklTQ19VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKaW5kZXggNTI1OWQ4Yy4uODM3NTMwZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKQEAgLTU1MSwxMCArNTUxLDcgQEAKIHsKIAlpbnQgc3IzOwogCi0JaWYgKCF2bWEtPnZtX21tLT5jb250ZXh0KSB7Ci0JCUJVRygpOwotCQlyZXR1cm47Ci0JfQorCUJVR19PTighdm1hLT52bV9tbS0+Y29udGV4dCk7CiAKIAlzcjMgPSBtZnNwKDMpOwogCWlmICh2bWEtPnZtX21tLT5jb250ZXh0ID09IHNyMykgewpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwppbmRleCBkMWZhNGVkLi4wZGI5ZmRjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJICogYWJzdHJhY3Rpb25zIGZvciB0aGUgbWFjcm9zICovCiAJLm1hY3JvCQlFWFRSCXJlZzEsc3RhcnQsbGVuZ3RoLHJlZzIKICNpZmRlZiBDT05GSUdfNjRCSVQKLQlleHRyZCx1CQlccmVnMSwzMitcc3RhcnQsXGxlbmd0aCxccmVnMgorCWV4dHJkLHUJCVxyZWcxLDMyKyhcc3RhcnQpLFxsZW5ndGgsXHJlZzIKICNlbHNlCiAJZXh0cncsdQkJXHJlZzEsXHN0YXJ0LFxsZW5ndGgsXHJlZzIKICNlbmRpZgpAQCAtMzc2LDcgKzM3Niw3IEBACiAKIAkubWFjcm8JCURFUAlyZWcxLHN0YXJ0LGxlbmd0aCxyZWcyCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JZGVwZAkJXHJlZzEsMzIrXHN0YXJ0LFxsZW5ndGgsXHJlZzIKKwlkZXBkCQlccmVnMSwzMisoXHN0YXJ0KSxcbGVuZ3RoLFxyZWcyCiAjZWxzZQogCWRlcHcJCVxyZWcxLFxzdGFydCxcbGVuZ3RoLFxyZWcyCiAjZW5kaWYKQEAgLTM4NCw3ICszODQsNyBAQAogCiAJLm1hY3JvCQlERVBJCXZhbCxzdGFydCxsZW5ndGgscmVnCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JZGVwZGkJCVx2YWwsMzIrXHN0YXJ0LFxsZW5ndGgsXHJlZworCWRlcGRpCQlcdmFsLDMyKyhcc3RhcnQpLFxsZW5ndGgsXHJlZwogI2Vsc2UKIAlkZXB3aQkJXHZhbCxcc3RhcnQsXGxlbmd0aCxccmVnCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKaW5kZXggMDNmMjZiZC4uZjZkMjQxMiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi12b2lkIF9faW5pdCBzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQodm9pZCkKK3ZvaWQgX19jcHVpbml0IHNldF9maXJtd2FyZV93aWR0aF91bmxvY2tlZCh2b2lkKQogewogCWludCByZXQ7CiAKQEAgLTE2OCw3ICsxNjgsNyBAQAogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBkY18qIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUKICAqIGNvbnZlcnRfdG9fd2lkZSBmdW5jdGlvbi4KICAqLwotdm9pZCBfX2luaXQgc2V0X2Zpcm13YXJlX3dpZHRoKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBzZXRfZmlybXdhcmVfd2lkdGgodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwZGNfbG9jaywgZmxhZ3MpOwpAQCAtMTc2LDExICsxNzYsMTEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfbG9jaywgZmxhZ3MpOwogfQogI2Vsc2UKLXZvaWQgX19pbml0IHNldF9maXJtd2FyZV93aWR0aF91bmxvY2tlZCh2b2lkKSB7Cit2b2lkIF9fY3B1aW5pdCBzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQodm9pZCkgewogCXJldHVybjsKIH0KIAotdm9pZCBfX2luaXQgc2V0X2Zpcm13YXJlX3dpZHRoKHZvaWQpIHsKK3ZvaWQgX19jcHVpbml0IHNldF9maXJtd2FyZV93aWR0aCh2b2lkKSB7CiAJcmV0dXJuOwogfQogI2VuZGlmIC8qQ09ORklHXzY0QklUKi8KQEAgLTMwMiw3ICszMDIsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWludCBfX2luaXQgcGRjX2NvcHJvY19jZmdfdW5sb2NrZWQoc3RydWN0IHBkY19jb3Byb2NfY2ZnICpwZGNfY29wcm9jX2luZm8pCitpbnQgX19jcHVpbml0IHBkY19jb3Byb2NfY2ZnX3VubG9ja2VkKHN0cnVjdCBwZGNfY29wcm9jX2NmZyAqcGRjX2NvcHJvY19pbmZvKQogewogCWludCByZXQ7CiAKQEAgLTMyMyw3ICszMjMsNyBAQAogICogVGhpcyBQREMgY2FsbCByZXR1cm5zIHRoZSBwcmVzZW5jZSBhbmQgc3RhdHVzIG9mIGFsbCB0aGUgY29wcm9jZXNzb3JzCiAgKiBhdHRhY2hlZCB0byB0aGUgcHJvY2Vzc29yLgogICovCi1pbnQgX19pbml0IHBkY19jb3Byb2NfY2ZnKHN0cnVjdCBwZGNfY29wcm9jX2NmZyAqcGRjX2NvcHJvY19pbmZvKQoraW50IF9fY3B1aW5pdCBwZGNfY29wcm9jX2NmZyhzdHJ1Y3QgcGRjX2NvcHJvY19jZmcgKnBkY19jb3Byb2NfaW5mbykKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKaW5kZXggYWMyYzgyMi4uYWRmZDYxNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwpAQCAtMTEyLDcgKzExMiw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU01QCi1pbnQgY3B1X2NoZWNrX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCAqZGVzdCkKK2ludCBjcHVfY2hlY2tfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7CiAJaW50IGNwdV9kZXN0OwogCkBAIC0xMjAsMjMgKzEyMCwyNSBAQAogCWlmIChDSEVDS19JUlFfUEVSX0NQVShpcnEpKSB7CiAJCS8qIEJhZCBsaW51eCBkZXNpZ24gZGVjaXNpb24uICBUaGUgbWFzayBoYXMgYWxyZWFkeQogCQkgKiBiZWVuIHNldDsgd2UgbXVzdCByZXNldCBpdCAqLwotCQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gQ1BVX01BU0tfQUxMOworCQljcHVtYXNrX3NldGFsbCgmaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIHdoYXRldmVyIG1hc2sgdGhleSBzZXQsIHdlIGp1c3QgYWxsb3cgb25lIENQVSAqLwogCWNwdV9kZXN0ID0gZmlyc3RfY3B1KCpkZXN0KTsKLQkqZGVzdCA9IGNwdW1hc2tfb2ZfY3B1KGNwdV9kZXN0KTsKIAotCXJldHVybiAwOworCXJldHVybiBjcHVfZGVzdDsKIH0KIAogc3RhdGljIHZvaWQgY3B1X3NldF9hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7Ci0JaWYgKGNwdV9jaGVja19hZmZpbml0eShpcnEsIGRlc3QpKQorCWludCBjcHVfZGVzdDsKKworCWNwdV9kZXN0ID0gY3B1X2NoZWNrX2FmZmluaXR5KGlycSwgZGVzdCk7CisJaWYgKGNwdV9kZXN0IDwgMCkKIAkJcmV0dXJuOwogCi0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9ICpkZXN0OworCWNwdW1hc2tfY29weSgmaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgJmNwdW1hc2tfb2ZfY3B1KGNwdV9kZXN0KSk7CiB9CiAjZW5kaWYKIApAQCAtMTgzLDcgKzE4NSw3IEBACiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2Vsc2UKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbmRpZgpAQCAtMjk1LDcgKzI5Nyw3IEBACiB1bnNpZ25lZCBsb25nIHR4bl9hZmZpbml0eV9hZGRyKHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCWNwdW1hc2tfY29weSgmaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgY3B1bWFza19vZihjcHUpKTsKICNlbmRpZgogCiAJcmV0dXJuIHBlcl9jcHUoY3B1X2RhdGEsIGNwdSkudHhuX2FkZHI7CkBAIC0zNTIsNyArMzU0LDcgQEAKIAlpcnEgPSBlaXJyX3RvX2lycShlaXJyX3ZhbCk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JZGVzdCA9IGlycV9kZXNjW2lycV0uYWZmaW5pdHk7CisJY3B1bWFza19jb3B5KCZkZXN0LCAmaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSk7CiAJaWYgKENIRUNLX0lSUV9QRVJfQ1BVKGlycV9kZXNjW2lycV0uc3RhdHVzKSAmJgogCSAgICAhY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgZGVzdCkpIHsKIAkJaW50IGNwdSA9IGZpcnN0X2NwdShkZXN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IGRmNDc4OTUuLjdkOTI3ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS1kbWEuYwpAQCAtNDQ3LDEwICs0NDcsNyBAQAogCiBzdGF0aWMgZG1hX2FkZHJfdCBwYTExX2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGExMV9kbWFfbWFwX3NpbmdsZShQQ0lfRE1BX05PTkUpIGNhbGxlZCBieSAlcFxuIiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQkJQlVHKCk7Ci0JfQorCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwogCiAJZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgYWRkciwgc2l6ZSk7CiAJcmV0dXJuIHZpcnRfdG9fcGh5cyhhZGRyKTsKQEAgLTQ1OCwxMCArNDU1LDcgQEAKIAogc3RhdGljIHZvaWQgcGExMV9kbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCWlmIChkaXJlY3Rpb24gPT0gRE1BX05PTkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYTExX2RtYV91bm1hcF9zaW5nbGUoUENJX0RNQV9OT05FKSBjYWxsZWQgYnkgJXBcbiIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JCUJVRygpOwotCX0KKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKIAogCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKIAkgICAgcmV0dXJuOwpAQCAtNDgwLDggKzQ3NCw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKQotCSAgICBCVUcoKTsKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrLCBzZ2xpc3QrKyApIHsKIAkJdW5zaWduZWQgbG9uZyB2YWRkciA9IHNnX3ZpcnRfYWRkcihzZ2xpc3QpOwpAQCAtNDk2LDggKzQ4OSw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKQotCSAgICBCVUcoKTsKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKIAogCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKIAkgICAgcmV0dXJuOwpAQCAtNTExLDE2ICs1MDMsMTQgQEAKIAogc3RhdGljIHZvaWQgcGExMV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkKLQkgICAgQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSBwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSkgKyBvZmZzZXQsIHNpemUpOwogfQogCiBzdGF0aWMgdm9pZCBwYTExX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKQotCSAgICBCVUcoKTsKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKIAogCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpIHBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSArIG9mZnNldCwgc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggN2MxNTVjMi4uOWQ3MDRkOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtMzA0LDEwICszMDQsOCBAQAogCSAqLwogCW1heF9sb3dfcGZuID0gbWF4X3BmbjsKIAotCWlmICgoYm9vdG1hcF9wZm4gLSBib290bWFwX3N0YXJ0X3BmbikgIT0gYm9vdG1hcF9wYWdlcykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HISBib290bWFwIHNpemluZyBpcyBtZXNzZWQgdXAhXG4iKTsKLQkJQlVHKCk7Ci0JfQorCS8qIGJvb3RtYXAgc2l6aW5nIG1lc3NlZCB1cD8gKi8KKwlCVUdfT04oKGJvb3RtYXBfcGZuIC0gYm9vdG1hcF9zdGFydF9wZm4pICE9IGJvb3RtYXBfcGFnZXMpOwogCiAJLyogcmVzZXJ2ZSBQQUdFMCBwZGMgbWVtb3J5LCBrZXJuZWwgdGV4dC9kYXRhL2JzcyAmIGJvb3RtYXAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKaW5kZXggOGI1YmE4Mi4uNDQ0N2RlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0AxODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQ2MGV4LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDQgMHgwMDE4MDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4ND47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwZXgiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwppbmRleCAyODA0NDQ0Li41ZTZiMDhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCkBAIC05Nyw2ICs5NywxMyBAQAogCQkJCSAgICAgIDB4NiAweDQ+OwkvKiBFQ0MgU0VDIEVycm9yICovIAogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQGVmNzAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1jYyxwcGM0MDVleC1jcnlwdG8iLCAiYW1jYyxwcGM0eHgtY3J5cHRvIjsKKwkJCXJlZyA9IDwweGVmNzAwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MTcgMHgyPjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00MDVleCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3ZpcnRleF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvdmlydGV4X2RlZmNvbmZpZwppbmRleCBiNjg4ODM4NC4uZjU2OThmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3ZpcnRleF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3ZpcnRleF9kZWZjb25maWcKQEAgLTY4Niw3ICs2ODYsNyBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdmlydGV4NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdmlydGV4NV9kZWZjb25maWcKaW5kZXggMTVhYWIxYy4uMWJmMGE2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3ZpcnRleDVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC92aXJ0ZXg1X2RlZmNvbmZpZwpAQCAtNjkxLDcgKzY5MSw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZwppbmRleCBhYTU4NTVhLi4xNTkwMGRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBNb24gSmFuIDI2IDE1OjM1OjI5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzYKKyMgRnJpIE1hciAgNiAwMDowNzozOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTcxLDYgKzcxLDE1IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODgsNiArOTcsNyBAQAogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC0xNTMsMTEgKzE2Myw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yOTQsNyArMjk5LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CkBAIC01MDgsOCArNTEyLDggQEAKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCkBAIC01ODcsNyArNTkxLDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNjE3LDEzICs2MjAsMTkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fTEVHQUNZPW0KKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtODM5LDYgKzg0OCw3IEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC0xMDM3LDggKzEwNDcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci1DT05GSUdfRUVQUk9NX0xFR0FDWT1tCiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKaW5kZXggYjZlZWU3Yy4uYWMxNGY1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjMwotIyBXZWQgQXVnIDIwIDA4OjE2OjUzIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAwOToyODo0NSAyMDA5CiAjCiBDT05GSUdfUFBDNjQ9eQogCkBAIC0xNiwxMyArMTYsMTQgQEAKIENPTkZJR19BTFRJVkVDPXkKICMgQ09ORklHX1ZTWCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzY0PXkKIENPTkZJR19QUENfTU1fU0xJQ0VTPXkKIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgogQ09ORklHXzY0QklUPXkKIENPTkZJR19XT1JEX1NJWkU9NjQKLUNPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKQEAgLTQ2LDcgKzQ3LDcgQEAKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfUFBDX09GPXkKIENPTkZJR19PRj15CkBAIC03NCwxMCArNzUsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC04NiwxMSArOTYsMTMgQEAKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CkBAIC05OSwzNyArMTExLDM2IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTM3LDcgKzE0OCw2IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKQEAgLTE1Nyw3ICsxNjcsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xODMsMTggKzE5MywyMCBAQAogQ09ORklHX1BTM19ESVNLPXkKIENPTkZJR19QUzNfUk9NPXkKIENPTkZJR19QUzNfRkxBU0g9eQotQ09ORklHX09QUk9GSUxFX1BTMz15CitDT05GSUdfUFMzX1ZSQU09bQogQ09ORklHX1BTM19MUE09bQogQ09ORklHX1BQQ19DRUxMPXkKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9RUEFDRSBpcyBub3Qgc2V0CiAKICMKICMgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIG9wdGlvbnMKICMKIENPTkZJR19TUFVfRlM9eQogQ09ORklHX1NQVV9GU182NEtfTFM9eQorIyBDT05GSUdfU1BVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19TUFVfQkFTRT15CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjIyLDcgQEAKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0yMjksNiArMjQyLDggQEAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKICMgQ09ORklHX0lPTU1VX1ZNRVJHRSBpcyBub3Qgc2V0CkBAIC0yNTEsNyArMjY2LDYgQEAKIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CiAjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCBpcyBub3Qgc2V0CkBAIC0yNjEsMTEgKzI3NSwxNCBAQAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFPXkKIENPTkZJR19QUENfSEFTX0hBU0hfNjRLPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiBDT05GSUdfU0NIRURfU01UPXkKQEAgLTI5OSw2ICszMTYsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzYxLDYgKzM3OSw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM3MSw2ICszOTAsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zOTIsMzkgKzQxMiwzNyBAQAogIwogIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19CVF9IQ0lVU0I9bQotQ09ORklHX0JUX0hDSVVTQl9TQ089eQorQ09ORklHX0JUX0hDSUJUVVNCPW0KICMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPW0KKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTkw4MDIxMT15CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9bQogCiAjCiAjIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCiAjCiBDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCiAjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ1MCw2ICs0NjgsNyBAQAogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDk0LDcgKzUxMyw2IEBACiAjCiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUFMzVlJBTT15CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCkBAIC01MDgsNiArNTI2LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUyOCw4ICs1NTEsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU3NSw3ICs2MDMsMTcgQEAKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX01EPXkKKyMgQ09ORklHX0JMS19ERVZfTUQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjI5LDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfR0VMSUNfTkVUPXkKQEAgLTYwNCw2ICs2NDUsNyBAQAogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTl84MDIxMT15CiAjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKQEAgLTYxNSwxMyArNjU3LDExIEBACiAjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAogQ09ORklHX1pEMTIxMVJXPW0KICMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19SVDJYMDA9bQotQ09ORklHX1JUMlgwMF9MSUI9bQotQ09ORklHX1JUMlgwMF9MSUJfVVNCPW0KLUNPTkZJR19SVDJYMDBfTElCX0ZJUk1XQVJFPXkKLSMgQ09ORklHX1JUMjUwMFVTQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlQ3M1VTQj1tCi0jIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTYzNCw2ICs2NzQsNyBAQAogQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCiAjIENPTkZJR19VU0JfTkVUX0NEQ0VUSEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldApAQCAtNjY0LDcgKzcwNSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwpAQCAtNzM1LDggKzc3NiwxMCBAQAogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldApAQCAtNzUzLDExICs3OTYsMTEgQEAKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY3LDYgKzgxMCw3IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNzkyLDYgKzgzNiw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKQEAgLTgxNyw2ICs4NjIsOCBAQAogQ09ORklHX0ZCX1BTMz15CiBDT05GSUdfRkJfUFMzX0RFRkFVTFRfU0laRV9NPTkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtODQxLDYgKzg4OCw3IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC04NDksNiArODk3LDcgQEAKICMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CkBAIC04NzMsMTUgKzkyMiw0MCBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9bQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwogIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC04OTgsNyArOTcyLDExIEBACiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVNQRU5EPXkKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPW0KKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtOTA5LDYgKzk4Nyw3IEBACiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQpAQCAtOTE4LDYgKzk5Nyw3IEBACiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCkBAIC05MjksMjAgKzEwMDksMjAgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTk1MCw3ICsxMDMwLDYgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TSUVSUkEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCkBAIC05NzEsNiArMTA1MCw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC05ODgsNyArMTA2OCwxMiBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xMDE0LDEyICsxMDk5LDE1IEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAyOCw2ICsxMTE2LDcgQEAKIENPTkZJR19SVENfRFJWX1BQQz1tCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEwMzUsMjYgKzExMjQsMzUgQEAKIENPTkZJR19FWFQyX0ZTPW0KICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlM9bQogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQorQ09ORklHX0VYVDRfRlM9eQorIyBDT05GSUdfRVhUNERFVl9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPW0KICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CiAjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT15CiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKIENPTkZJR19RVU9UQUNUTD15CkBAIC0xMDg3LDE2ICsxMTg1LDE0IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTA2LDYgKzEyMDIsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTEyNiw2ICsxMjIzLDcgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTE5MCw5ICsxMjg4LDkgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19DUkNfSVRVX1Q9bQogQ09ORklHX0NSQzMyPXkKQEAgLTEyNTAsMjcgKzEzNDgsNDQgQEAKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiBDT05GSUdfREVCVUdfTElTVD15CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJRU1RBQ0tTPXkKICMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldApAQCAtMTI4MiwxNiArMTM5NywyNiBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKQEAgLTEzNjMsNiArMTQ4OCwxMSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwppbmRleCA4NjUxMmM4Li45NDkwMzQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgTW9uIEphbiAyNiAxNTozNTo0NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM2CisjIEZyaSBNYXIgIDYgMDA6MDk6MDggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC03MSw2ICs3MSwxNSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTE0NCwxMSArMTUzLDYgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0zNzcsOCArMzgxLDggQEAKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCkBAIC00NTIsNyArNDU2LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDc4LDEzICs0ODEsMTkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIApAQCAtNjc3LDYgKzY4Niw3IEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CkBAIC04MTgsOCArODI4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldApAQCAtMTE1OSw2ICsxMTY3LDcgQEAKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX0VYUE9SVEZTPW0KIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKaW5kZXggNTdiODJlMy4uNjBhM2M5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKQEAgLTksNyArOSw3IEBACiAjaWZuZGVmIF9fQVNNX0JPT1RYX0hfXwogI2RlZmluZSBfX0FTTV9CT09UWF9IX18KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBtYWNpbnRvc2gKICNpbmNsdWRlIDxUeXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCmluZGV4IGQ4MTFhOGMuLjQ3NzRjMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb21wYXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTIxMCw1ICsyMTAsMTAgQEAKIAljb21wYXRfdWxvbmdfdCBfX3VudXNlZDY7CiB9OwogCitzdGF0aWMgaW5saW5lIGludCBpc19jb21wYXRfdGFzayh2b2lkKQoreworCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCk7Cit9CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IDQ5MTExMDQuLjIxMTcyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0yNDEsOSArMjQxLDExIEBACiAvKiBXZSBuZWVkIHRvIG1hcmsgYWxsIHBhZ2VzIGFzIGJlaW5nIGNvaGVyZW50IGlmIHdlJ3JlIFNNUCBvciB3ZSBoYXZlIGEKICAqIDc0WzQ1XXggYW5kIGFuIE1QQzEwNyBob3N0IGJyaWRnZS4gQWxzbyA4M3h4IGFuZCBQb3dlclFVSUNDIElJCiAgKiByZXF1aXJlIGl0IGZvciBQQ0kgInN0cmVhbWluZy9wcmVmZXRjaCIgdG8gd29yayBwcm9wZXJseS4KKyAqIFRoaXMgaXMgYWxzbyByZXF1aXJlZCBieSA1Mnh4IGZhbWlseS4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfTVBDMTBYX0JSSURHRSkgXAotCXx8IGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKQorCXx8IGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKSBcCisJfHwgZGVmaW5lZChDT05GSUdfUFBDX01QQzUyeHgpCiAjZGVmaW5lIENQVV9GVFJfQ09NTU9OICAgICAgICAgICAgICAgICAgQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UCiAjZWxzZQogI2RlZmluZSBDUFVfRlRSX0NPTU1PTiAgICAgICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjZDQ2ZjAyLi5iNTYwMGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGY5OTNlNDEuLmJiMmRlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgX19MSU5VWF9LVk1fUE9XRVJQQ19ICiAjZGVmaW5lIF9fTElOVVhfS1ZNX1BPV0VSUENfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGt2bV9yZWdzIHsKIAlfX3U2NCBwYzsKQEAgLTUyLDQgKzUyLDExIEBACiAJX191NjQgZnByWzMyXTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfS1ZNX1BPV0VSUENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKaW5kZXggZjQ5MDMxYi4uZDIyZDM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCkBAIC0yOCw2ICsyOCwxMyBAQAogICogbmVlZCB0byBmaW5kIHNvbWUgd2F5IG9mIGFkdmVydGlzaW5nIGl0LiAqLwogI2RlZmluZSBLVk00NHhfR1VFU1RfVExCX1NJWkUgNjQKIAorc3RydWN0IGt2bXBwY180NHhfdGxiZSB7CisJdTMyIHRpZDsgLyogT25seSB0aGUgbG93IDggYml0cyBhcmUgdXNlZC4gKi8KKwl1MzIgd29yZDA7CisJdTMyIHdvcmQxOworCXUzMiB3b3JkMjsKK307CisKIHN0cnVjdCBrdm1wcGNfNDR4X3NoYWRvd19yZWYgewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXUxNiBndGxiX2luZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKaW5kZXggMjE5Nzc2NC4uNTZiZmFlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCkBAIC00Miw3ICs0MiwxMiBAQAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTIDEzCiAjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MgMTQKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX0RFQlVHIDE1Ci0jZGVmaW5lIEJPT0tFX01BWF9JTlRFUlJVUFQgMTUKKworLyogRTUwMCAqLworI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUwgMzIKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBIDMzCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQgMzQKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1BFUkZPUk1BTkNFX01PTklUT1IgMzUKIAogI2RlZmluZSBSRVNVTUVfRkxBR19OViAgICAgICAgICAoMTw8MCkgIC8qIFJlbG9hZCBndWVzdCBub252b2xhdGlsZSBzdGF0ZT8gKi8KICNkZWZpbmUgUkVTVU1FX0ZMQUdfSE9TVCAgICAgICAgKDE8PDEpICAvKiBSZXN1bWUgaG9zdD8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0OTdjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9LVk1fRTUwMF9IX18KKyNkZWZpbmUgX19BU01fS1ZNX0U1MDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TSVpFIDM2CisKKyNkZWZpbmUgRTUwMF9QSURfTlVNICAgMworI2RlZmluZSBFNTAwX1RMQl9OVU0gICAyCisKK3N0cnVjdCB0bGJleworCXUzMiBtYXMxOworCXUzMiBtYXMyOworCXUzMiBtYXMzOworCXUzMiBtYXM3OworfTsKKworc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgeworCS8qIFVubW9kaWZpZWQgY29weSBvZiB0aGUgZ3Vlc3QncyBUTEIuICovCisJc3RydWN0IHRsYmUgKmd1ZXN0X3RsYltFNTAwX1RMQl9OVU1dOworCS8qIFRMQiB0aGF0J3MgYWN0dWFsbHkgdXNlZCB3aGVuIHRoZSBndWVzdCBpcyBydW5uaW5nLiAqLworCXN0cnVjdCB0bGJlICpzaGFkb3dfdGxiW0U1MDBfVExCX05VTV07CisJLyogUGFnZXMgd2hpY2ggYXJlIHJlZmVyZW5jZWQgaW4gdGhlIHNoYWRvdyBUTEIuICovCisJc3RydWN0IHBhZ2UgKipzaGFkb3dfcGFnZXNbRTUwMF9UTEJfTlVNXTsKKworCXVuc2lnbmVkIGludCBndWVzdF90bGJfc2l6ZVtFNTAwX1RMQl9OVU1dOworCXVuc2lnbmVkIGludCBzaGFkb3dfdGxiX3NpemVbRTUwMF9UTEJfTlVNXTsKKwl1bnNpZ25lZCBpbnQgZ3Vlc3RfdGxiX252W0U1MDBfVExCX05VTV07CisKKwl1MzIgaG9zdF9waWRbRTUwMF9QSURfTlVNXTsKKwl1MzIgcGlkW0U1MDBfUElEX05VTV07CisKKwl1MzIgbWFzMDsKKwl1MzIgbWFzMTsKKwl1MzIgbWFzMjsKKwl1MzIgbWFzMzsKKwl1MzIgbWFzNDsKKwl1MzIgbWFzNTsKKwl1MzIgbWFzNjsKKwl1MzIgbWFzNzsKKwl1MzIgbDFjc3IxOworCXUzMiBoaWQwOworCXUzMiBoaWQxOworCisJc3RydWN0IGt2bV92Y3B1IHZjcHU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp0b19lNTAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwLCB2Y3B1KTsKK30KKworI2VuZGlmIC8qIF9fQVNNX0tWTV9FNTAwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBjMWU0MzZmLi5kZmRmMTNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNjQsMTMgKzY0LDYgQEAKIAl1MzIgaGFsdF93YWtldXA7CiB9OwogCi1zdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHsKLQl1MzIgdGlkOyAvKiBPbmx5IHRoZSBsb3cgOCBiaXRzIGFyZSB1c2VkLiAqLwotCXUzMiB3b3JkMDsKLQl1MzIgd29yZDE7Ci0JdTMyIHdvcmQyOwotfTsKLQogZW51bSBrdm1fZXhpdF90eXBlcyB7CiAJTU1JT19FWElUUywKIAlEQ1JfRVhJVFMsCkBAIC0xMTgsMTEgKzExMSw2IEBACiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJdTMyIGhvc3Rfc3RhY2s7CiAJdTMyIGhvc3RfcGlkOwotCXUzMiBob3N0X2RiY3IwOwotCXUzMiBob3N0X2RiY3IxOwotCXUzMiBob3N0X2RiY3IyOwotCXUzMiBob3N0X2lhY1s0XTsKLQl1MzIgaG9zdF9tc3I7CiAKIAl1NjQgZnByWzMyXTsKIAl1bG9uZyBncHJbMzJdOwpAQCAtMTU3LDcgKzE0NSw3IEBACiAJdTMyIHRidTsKIAl1MzIgdGNyOwogCXUzMiB0c3I7Ci0JdTMyIGl2b3JbMTZdOworCXUzMiBpdm9yWzY0XTsKIAl1bG9uZyBpdnByOwogCXUzMiBwaXI7CiAKQEAgLTE3MCw2ICsxNTgsNyBAQAogCXUzMiBjY3IxOwogCXUzMiBkYmNyMDsKIAl1MzIgZGJjcjE7CisJdTMyIGRic3I7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HCiAJc3RydWN0IGt2bXBwY19leGl0X3RpbWluZyB0aW1pbmdfZXhpdDsKQEAgLTIwMCwxMCArMTg5LDQgQEAKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmdfZXhjZXB0aW9uczsKIH07CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgYnBbNF07Ci0JaW50IHNpbmdsZXN0ZXA7Ci19OwotCiAjZW5kaWYgLyogX19QT1dFUlBDX0tWTV9IT1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggMzZkMmE1MC4uMmM2ZWUzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtNTIsMTMgKzUyLDE5IEBACiBleHRlcm4gaW50IGt2bXBwY19lbXVsYXRlX21taW8oc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19lbXVsYXRlX2RlYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCisvKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCisKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IGFzaWQsIHUzMiBmbGFncywgdTMyIG1heF9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBndGxiX2lkeCk7CiBleHRlcm4gdm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKTsKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfc3dpdGNoX3BpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwaWQpOwotCi0vKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiBpbnQga3ZtcHBjX21tdV9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIGludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CitleHRlcm4gZ3BhX3Qga3ZtcHBjX21tdV94bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBndGxiX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfaXRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIGV4dGVybiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bXBwY19jb3JlX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCk7CkBAIC03MSw5ICs3Nyw2IEBACiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLWV4dGVybiB2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfZGVsaXZlcl9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gaW50IGt2bXBwY19jb3JlX3BlbmRpbmdfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAppbmRleCAzZjk0MWMwLi40Mjg1YjY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKQEAgLTc1LDYgKzc1LDggQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7CisKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQJaWQ7CiAJdW5zaWduZWQgaW50CWFjdGl2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS00ay5oCmluZGV4IDZiMThiYTkuLjFkYmNhNGU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS00ay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTRrLmgKQEAgLTYwLDcgKzYwLDcgQEAKIC8qIEl0IHNob3VsZCBiZSBwcmVzZXJ2aW5nIHRoZSBoaWdoIDQ4IGJpdHMgYW5kIHRoZW4gc3BlY2lmaWNhbGx5ICovCiAvKiBwcmVzZXJ2aW5nIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYICovCiAjZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX0hQVEVGTEFHUykKKyAgICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9IUFRFRkxBR1MgfCBfUEFHRV9TUEVDSUFMKQogCiAvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQTUQgdG8gZ2V0IHRvIHRoZSBQVEUgcGFnZSAqLwogI2RlZmluZSBQTURfTUFTS0VEX0JJVFMJCTAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNjRrLmgKaW5kZXggMDdiMGQ4Zi4uNzM4OTAwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNjRrLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNjRrLmgKQEAgLTExNCw3ICsxMTQsNyBAQAogICogcGdwcm90IGNoYW5nZXMKICAqLwogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX1JQTl9NQVNLIHwgX1BBR0VfSFBURUZMQUdTIHwgX1BBR0VfRElSVFkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TUEVDSUFMKQogCiAvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQTUQgdG8gZ2V0IHRvIHRoZSBQVEUgcGFnZSAqLwogI2RlZmluZSBQTURfTUFTS0VEX0JJVFMJCTB4MWZmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAppbmRleCBmNjlhNGQ5Li44MjBiNWYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKQEAgLTQyOSw3ICs0MjksOCBAQAogI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZCkJYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSgpCiAjZW5kaWYKIAotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBcCisJCQkgX1BBR0VfU1BFQ0lBTCkKIAogCiAjZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9OT19DQUNIRSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKaW5kZXggM2YxMjFmZS4uZTcyMzNhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX1BTM0ZCX0hfCiAjZGVmaW5lIF9BU01fUE9XRVJQQ19QUzNGQl9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAvKiBpb2N0bCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NlY2NvbXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZWNjb21wLmgKaW5kZXggODUzNzY1ZS4uMDBjMWQ5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NlY2NvbXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2VjY29tcC5oCkBAIC0xLDEwICsxLDYgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX1NFQ0NPTVBfSAogI2RlZmluZSBfQVNNX1BPV0VSUENfU0VDQ09NUF9ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAKICNkZWZpbmUgX19OUl9zZWNjb21wX3JlYWQgX19OUl9yZWFkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCmluZGV4IDM1NDVlZmIuLjEyODZjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCkBAIC0yMyw5ICsyMywxMCBAQAogI2lmbmRlZiBfU1BVX0lORk9fSAogI2RlZmluZSBfU1BVX0lORk9fSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vc3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNlbHNlCiBzdHJ1Y3QgbWZjX2NxX3NyIHsKIAlfX3U2NCBtZmNfY3FfZGF0YTBfUlc7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBlZjgyNGFlLi5jNTgxZTNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTgsNyArOCw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZmRlZiBfX0dOVUNfXwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCmluZGV4IDVhZjRlOWIuLjczY2I2YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKQEAgLTM2NywyNyArMzY3LDI0IEBACiBzdGF0aWMgaW50IGVtdWxhdGVfZnBfcGFpcih1bnNpZ25lZCBjaGFyIF9fdXNlciAqYWRkciwgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQljaGFyICpwdHIgPSAoY2hhciAqKSAmY3VycmVudC0+dGhyZWFkLlRTX0ZQUihyZWcpOwotCWludCBpLCByZXQ7CisJY2hhciAqcHRyMCA9IChjaGFyICopICZjdXJyZW50LT50aHJlYWQuVFNfRlBSKHJlZyk7CisJY2hhciAqcHRyMSA9IChjaGFyICopICZjdXJyZW50LT50aHJlYWQuVFNfRlBSKHJlZysxKTsKKwlpbnQgaSwgcmV0LCBzdyA9IDA7CiAKIAlpZiAoIShmbGFncyAmIEYpKQogCQlyZXR1cm4gMDsKIAlpZiAocmVnICYgMSkKIAkJcmV0dXJuIDA7CS8qIGludmFsaWQgZm9ybTogRlJTL0ZSVCBtdXN0IGJlIGV2ZW4gKi8KLQlpZiAoIShmbGFncyAmIFNXKSkgewotCQkvKiBub3QgYnl0ZS1zd2FwcGVkIC0gZWFzeSAqLwotCQlpZiAoIShmbGFncyAmIFNUKSkKLQkJCXJldCA9IF9fY29weV9mcm9tX3VzZXIocHRyLCBhZGRyLCAxNik7Ci0JCWVsc2UKLQkJCXJldCA9IF9fY29weV90b191c2VyKGFkZHIsIHB0ciwgMTYpOwotCX0gZWxzZSB7Ci0JCS8qIGVhY2ggRlBSIHZhbHVlIGlzIGJ5dGUtc3dhcHBlZCBzZXBhcmF0ZWx5ICovCi0JCXJldCA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0JCQlpZiAoIShmbGFncyAmIFNUKSkKLQkJCQlyZXQgfD0gX19nZXRfdXNlcihwdHJbaV43XSwgYWRkciArIGkpOwotCQkJZWxzZQotCQkJCXJldCB8PSBfX3B1dF91c2VyKHB0cltpXjddLCBhZGRyICsgaSk7CisJaWYgKGZsYWdzICYgU1cpCisJCXN3ID0gNzsKKwlyZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJaWYgKCEoZmxhZ3MgJiBTVCkpIHsKKwkJCXJldCB8PSBfX2dldF91c2VyKHB0cjBbaV5zd10sIGFkZHIgKyBpKTsKKwkJCXJldCB8PSBfX2dldF91c2VyKHB0cjFbaV5zd10sIGFkZHIgKyBpICsgOCk7CisJCX0gZWxzZSB7CisJCQlyZXQgfD0gX19wdXRfdXNlcihwdHIwW2lec3ddLCBhZGRyICsgaSk7CisJCQlyZXQgfD0gX19wdXRfdXNlcihwdHIxW2lec3ddLCBhZGRyICsgaSArIDgpOwogCQl9CiAJfQogCWlmIChyZXQpCkBAIC02NDYsMTEgKzY0MywxNiBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IGFyZWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotCWNoYXIgKnB0ciA9IChjaGFyICopICZjdXJyZW50LT50aHJlYWQuVFNfRlBSKHJlZyk7CisJY2hhciAqcHRyOwogCWludCByZXQgPSAwOwogCiAJZmx1c2hfdnN4X3RvX3RocmVhZChjdXJyZW50KTsKIAorCWlmIChyZWcgPCAzMikKKwkJcHRyID0gKGNoYXIgKikgJmN1cnJlbnQtPnRocmVhZC5UU19GUFIocmVnKTsKKwllbHNlCisJCXB0ciA9IChjaGFyICopICZjdXJyZW50LT50aHJlYWQudnJbcmVnIC0gMzJdOworCiAJaWYgKGZsYWdzICYgU1QpCiAJCXJldCA9IF9fY29weV90b191c2VyKGFkZHIsIHB0ciwgbGVuZ3RoKTsKICAgICAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMTllZTQ5MS4uNDJmZTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2FscGFjYS5oPgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0tWTQotI2luY2x1ZGUgPGFzbS9rdm1fNDR4Lmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHXzQweCkKQEAgLTM2MSw4ICszNjEsNiBAQAogCURFRklORShQVEVfU0laRSwgc2l6ZW9mKHB0ZV90KSk7CiAKICNpZmRlZiBDT05GSUdfS1ZNCi0JREVGSU5FKFRMQkVfQllURVMsIHNpemVvZihzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlKSk7Ci0KIAlERUZJTkUoVkNQVV9IT1NUX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9zdGFjaykpOwogCURFRklORShWQ1BVX0hPU1RfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9waWQpKTsKIAlERUZJTkUoVkNQVV9HUFJTLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZ3ByKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGExYzRjZmQuLmQ3OTRhNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCkBAIC01MTEsOCArNTExLDExIEBACiAJYW5kCXIxLHIxLHIyCQkvKiB3cml0YWJsZSBpZiBfUlcgYW5kIF9ESVJUWSAqLwogCXJsd2ltaQlyMyxyMywzMi0xLDMwLDMwCS8qIF9QQUdFX1VTRVIgLT4gUFAgbXNiICovCiAJcmx3aW1pCXIzLHIzLDMyLTEsMzEsMzEJLyogX1BBR0VfVVNFUiAtPiBQUCBsc2IgKi8KLQlvcmkJcjEscjEsMHhlMTQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzIGFuZCBNICovCisJb3JpCXIxLHIxLDB4ZTA0CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyAqLwogCWFuZGMJcjEscjMscjEJCS8qIFBQID0gdXNlcj8gKHJ3JmRpcnR5PyAyOiAzKTogMCAqLworQkVHSU5fRlRSX1NFQ1RJT04KKwlybHdpbm0JcjEscjEsMCx+X1BBR0VfQ09IRVJFTlQJLyogY2xlYXIgTSAoY29oZXJlbmNlIG5vdCByZXF1aXJlZCkgKi8KK0VORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX05FRURfQ09IRVJFTlQpCiAJbXRzcHIJU1BSTl9SUEEscjEKIAltZnNwcglyMyxTUFJOX0lNSVNTCiAJdGxibGkJcjMKQEAgLTU4NSw4ICs1ODgsMTEgQEAKIAlhbmQJcjEscjEscjIJCS8qIHdyaXRhYmxlIGlmIF9SVyBhbmQgX0RJUlRZICovCiAJcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KIAlybHdpbWkJcjMscjMsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLwotCW9yaQlyMSxyMSwweGUxNAkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgYW5kIE0gKi8KKwlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCiAJYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCitCRUdJTl9GVFJfU0VDVElPTgorCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLworRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQogCW1mc3ByCXIzLFNQUk5fRE1JU1MKIAl0bGJsZAlyMwpAQCAtNjUzLDggKzY1OSwxMSBAQAogCXN0dwlyMywwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQvZGlydHkgYml0cykgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCiAJcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KLQlsaQlyMSwweGUxNQkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgYW5kIE0gKi8KKwlsaQlyMSwweGUwNQkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgJiBQUCBsc2IgKi8KIAlhbmRjCXIxLHIzLHIxCQkvKiBQUCA9IHVzZXI/IDI6IDAgKi8KK0JFR0lOX0ZUUl9TRUNUSU9OCisJcmx3aW5tCXIxLHIxLDAsfl9QQUdFX0NPSEVSRU5UCS8qIGNsZWFyIE0gKGNvaGVyZW5jZSBub3QgcmVxdWlyZWQpICovCitFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UKQogCW10c3ByCVNQUk5fUlBBLHIxCiAJbWZzcHIJcjMsU1BSTl9ETUlTUwogCXRsYmxkCXIzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAyM2I4YjVlLi4xN2VmYjcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbHNlCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKaW5kZXggYTY2YmVjNS4uMGNlZjgwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCkBAIC0yOCw3MiArMjgsNiBAQAogCiAjaW5jbHVkZSAiNDR4X3RsYi5oIgogCi0vKiBOb3RlOiBjbGVhcmluZyBNU1JbREVdIGp1c3QgbWVhbnMgdGhhdCB0aGUgZGVidWcgaW50ZXJydXB0IHdpbGwgbm90IGJlCi0gKiBkZWxpdmVyZWQgKmltbWVkaWF0ZWx5Ki4gSW5zdGVhZCwgaXQgc2ltcGx5IHNldHMgdGhlIGFwcHJvcHJpYXRlIERCU1IgYml0cy4KLSAqIElmIHRob3NlIERCU1IgYml0cyBhcmUgc3RpbGwgc2V0IHdoZW4gTVNSW0RFXSBpcyByZS1lbmFibGVkLCB0aGUgaW50ZXJydXB0Ci0gKiB3aWxsIGJlIGRlbGl2ZXJlZCBhcyBhbiAiaW1wcmVjaXNlIGRlYnVnIGV2ZW50IiAod2hpY2ggaXMgaW5kaWNhdGVkIGJ5Ci0gKiBEQlNSW0lERV0uCi0gKi8KLXN0YXRpYyB2b2lkIGt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHModm9pZCkKLXsKLQltdG1zcihtZm1zcigpICYgfk1TUl9ERSk7Ci19Ci0KLXZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKLQotCW10c3ByKFNQUk5fSUFDMSwgdmNwdS0+YXJjaC5ob3N0X2lhY1swXSk7Ci0JbXRzcHIoU1BSTl9JQUMyLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzFdKTsKLQltdHNwcihTUFJOX0lBQzMsIHZjcHUtPmFyY2guaG9zdF9pYWNbMl0pOwotCW10c3ByKFNQUk5fSUFDNCwgdmNwdS0+YXJjaC5ob3N0X2lhY1szXSk7Ci0JbXRzcHIoU1BSTl9EQkNSMSwgdmNwdS0+YXJjaC5ob3N0X2RiY3IxKTsKLQltdHNwcihTUFJOX0RCQ1IyLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjIpOwotCW10c3ByKFNQUk5fREJDUjAsIHZjcHUtPmFyY2guaG9zdF9kYmNyMCk7Ci0JbXRtc3IodmNwdS0+YXJjaC5ob3N0X21zcik7Ci19Ci0KLXZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcgPSAmdmNwdS0+Z3Vlc3RfZGVidWc7Ci0JdTMyIGRiY3IwID0gMDsKLQotCXZjcHUtPmFyY2guaG9zdF9tc3IgPSBtZm1zcigpOwotCWt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKLQotCS8qIFNhdmUgaG9zdCBkZWJ1ZyByZWdpc3RlciBzdGF0ZS4gKi8KLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzBdID0gbWZzcHIoU1BSTl9JQUMxKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzFdID0gbWZzcHIoU1BSTl9JQUMyKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzJdID0gbWZzcHIoU1BSTl9JQUMzKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzNdID0gbWZzcHIoU1BSTl9JQUM0KTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjAgPSBtZnNwcihTUFJOX0RCQ1IwKTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjEgPSBtZnNwcihTUFJOX0RCQ1IxKTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjIgPSBtZnNwcihTUFJOX0RCQ1IyKTsKLQotCS8qIHNldCByZWdpc3RlcnMgdXAgZm9yIGd1ZXN0ICovCi0KLQlpZiAoZGJnLT5icFswXSkgewotCQltdHNwcihTUFJOX0lBQzEsIGRiZy0+YnBbMF0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMxIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFsxXSkgewotCQltdHNwcihTUFJOX0lBQzIsIGRiZy0+YnBbMV0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMyIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFsyXSkgewotCQltdHNwcihTUFJOX0lBQzMsIGRiZy0+YnBbMl0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMzIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFszXSkgewotCQltdHNwcihTUFJOX0lBQzQsIGRiZy0+YnBbM10pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUM0IHwgREJDUjBfSURNOwotCX0KLQotCW10c3ByKFNQUk5fREJDUjAsIGRiY3IwKTsKLQltdHNwcihTUFJOX0RCQ1IxLCAwKTsKLQltdHNwcihTUFJOX0RCQ1IyLCAwKTsKLX0KLQogdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCWt2bXBwY180NHhfdGxiX2xvYWQodmNwdSk7CkBAIC0xNDksOCArODMsNiBAQAogaW50IGt2bXBwY19jb3JlX3ZjcHVfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uICp0cikKIHsKLQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZTsKIAlpbnQgaW5kZXg7CiAJZ3ZhX3QgZWFkZHI7CiAJdTggcGlkOwpAQCAtMTY2LDkgKzk4LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZ3RsYmUgPSAmdmNwdV80NHgtPmd1ZXN0X3RsYltpbmRleF07Ci0KLQl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IHRsYl94bGF0ZShndGxiZSwgZWFkZHIpOworCXRyLT5waHlzaWNhbF9hZGRyZXNzID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBpbmRleCwgZWFkZHIpOwogCS8qIFhYWCB3aGF0IGRvZXMgIndyaXRlYWJsZSIgYW5kICJ1c2VybW9kZSIgZXZlbiBtZWFuPyAqLwogCXRyLT52YWxpZCA9IDE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYwppbmRleCA4MjQ4OWE3Li42MWFmNThmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jCkBAIC0yNywyNSArMjcsMTIgQEAKICNpbmNsdWRlICJib29rZS5oIgogI2luY2x1ZGUgIjQ0eF90bGIuaCIKIAotI2RlZmluZSBPUF9SRkkgICAgICAxOQotCi0jZGVmaW5lIFhPUF9SRkkgICAgIDUwCi0jZGVmaW5lIFhPUF9NRk1TUiAgIDgzCi0jZGVmaW5lIFhPUF9XUlRFRSAgIDEzMQotI2RlZmluZSBYT1BfTVRNU1IgICAxNDYKLSNkZWZpbmUgWE9QX1dSVEVFSSAgMTYzCiAjZGVmaW5lIFhPUF9NRkRDUiAgIDMyMwogI2RlZmluZSBYT1BfTVREQ1IgICA0NTEKICNkZWZpbmUgWE9QX1RMQlNYICAgOTE0CiAjZGVmaW5lIFhPUF9JQ0NDSSAgIDk2NgogI2RlZmluZSBYT1BfVExCV0UgICA5NzgKIAotc3RhdGljIHZvaWQga3ZtcHBjX2VtdWxfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl2Y3B1LT5hcmNoLnBjID0gdmNwdS0+YXJjaC5zcnIwOwotCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guc3JyMSk7Ci19Ci0KIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX29wKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpCiB7CkBAIC01OSw0OCArNDYsOSBAQAogCWludCB3czsKIAogCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7Ci0JY2FzZSBPUF9SRkk6Ci0JCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgewotCQljYXNlIFhPUF9SRkk6Ci0JCQlrdm1wcGNfZW11bF9yZmkodmNwdSk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9SRklfRVhJVFMpOwotCQkJKmFkdmFuY2UgPSAwOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KIAljYXNlIDMxOgogCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKIAotCQljYXNlIFhPUF9NRk1TUjoKLQkJCXJ0ID0gZ2V0X3J0KGluc3QpOwotCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5tc3I7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRk1TUl9FWElUUyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFhPUF9NVE1TUjoKLQkJCXJzID0gZ2V0X3JzKGluc3QpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRNU1JfRVhJVFMpOwotCQkJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWE9QX1dSVEVFOgotCQkJcnMgPSBnZXRfcnMoaW5zdCk7Ci0JCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCi0JCQkJCQkJIHwgKHZjcHUtPmFyY2guZ3ByW3JzXSAmIE1TUl9FRSk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFhPUF9XUlRFRUk6Ci0JCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCi0JCQkJCQkJIHwgKGluc3QgJiBNU1JfRUUpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfV1JURUVfRVhJVFMpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBYT1BfTUZEQ1I6CiAJCQlkY3JuID0gZ2V0X2Rjcm4oaW5zdCk7CiAJCQlydCA9IGdldF9ydChpbnN0KTsKQEAgLTE4NiwxODYgKzEzNCw1MSBAQAogCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKIAl9CiAKKwlpZiAoZW11bGF0ZWQgPT0gRU1VTEFURV9GQUlMKQorCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX29wKHJ1biwgdmNwdSwgaW5zdCwgYWR2YW5jZSk7CisKIAlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKIHsKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKIAlzd2l0Y2ggKHNwcm4pIHsKLQljYXNlIFNQUk5fTU1VQ1I6Ci0JCXZjcHUtPmFyY2gubW11Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwogCWNhc2UgU1BSTl9QSUQ6CiAJCWt2bXBwY19zZXRfcGlkKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7IGJyZWFrOworCWNhc2UgU1BSTl9NTVVDUjoKKwkJdmNwdS0+YXJjaC5tbXVjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjA6CiAJCXZjcHUtPmFyY2guY2NyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjE6CiAJCXZjcHUtPmFyY2guY2NyMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0VTUjoKLQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMDoKLQkJdmNwdS0+YXJjaC5kYmNyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmRiY3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fVFNSOgotCQl2Y3B1LT5hcmNoLnRzciAmPSB+dmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fVENSOgotCQl2Y3B1LT5hcmNoLnRjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJa3ZtcHBjX2VtdWxhdGVfZGVjKHZjcHUpOwotCQlicmVhazsKLQotCS8qIE5vdGU6IFNQUkc0LTcgYXJlIHVzZXItcmVhZGFibGUuIFRoZXNlIHZhbHVlcyBhcmUKLQkgKiBsb2FkZWQgaW50byB0aGUgcmVhbCBTUFJHcyB3aGVuIHJlc3VtaW5nIHRoZQotCSAqIGd1ZXN0LiAqLwotCWNhc2UgU1BSTl9TUFJHNDoKLQkJdmNwdS0+YXJjaC5zcHJnNCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX1NQUkc1OgotCQl2Y3B1LT5hcmNoLnNwcmc1ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fU1BSRzY6Ci0JCXZjcHUtPmFyY2guc3ByZzYgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9TUFJHNzoKLQkJdmNwdS0+YXJjaC5zcHJnNyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0KLQljYXNlIFNQUk5fSVZQUjoKLQkJdmNwdS0+YXJjaC5pdnByID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjA6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0NSSVRJQ0FMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IyOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjM6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRV0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjU6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FMSUdOTUVOVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNzoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SODoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SOToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTA6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRklUXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEzOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE0OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE1OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUJVR10gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKLQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcih2Y3B1LCBzcHJuLCBycyk7CiAJfQogCiAJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRTUFJfRVhJVFMpOwotCXJldHVybiBFTVVMQVRFX0RPTkU7CisJcmV0dXJuIGVtdWxhdGVkOwogfQogCiBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpCiB7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCiAJc3dpdGNoIChzcHJuKSB7Ci0JLyogNDQwICovCisJY2FzZSBTUFJOX1BJRDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5waWQ7IGJyZWFrOwogCWNhc2UgU1BSTl9NTVVDUjoKIAkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5tbXVjcjsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjA6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY2NyMDsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjE6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY2NyMTsgYnJlYWs7Ci0KLQkvKiBCb29rIEUgKi8KLQljYXNlIFNQUk5fUElEOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnBpZDsgYnJlYWs7Ci0JY2FzZSBTUFJOX0lWUFI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZwcjsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGVhcjsgYnJlYWs7Ci0JY2FzZSBTUFJOX0VTUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5lc3I7IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYmNyMDsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IxOyBicmVhazsKLQotCWNhc2UgU1BSTl9JVk9SMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQ1JJVElDQUxdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRV07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I0OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I2OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I3OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I4OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I5OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVDUkVNRU5URVJdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjExOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEyOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTM6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RUTEJfTUlTU107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lUTEJfTUlTU107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTU6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgotCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHZjcHUsIHNwcm4sIHJ0KTsKIAl9CiAKIAlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRlNQUl9FWElUUyk7Ci0JcmV0dXJuIEVNVUxBVEVfRE9ORTsKKwlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKaW5kZXggOWEzNGI4ZS4uNGExNmY0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKQEAgLTIwOCwyMCArMjA4LDM4IEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCitncGFfdCBrdm1wcGNfbW11X3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIGd2YV90IGVhZGRyKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOworCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07CisJdW5zaWduZWQgaW50IHBnbWFzayA9IGdldF90bGJfYnl0ZXMoZ3RsYmUpIC0gMTsKKworCXJldHVybiBnZXRfdGxiX3JhZGRyKGd0bGJlKSB8IChlYWRkciAmIHBnbWFzayk7Cit9CisKK2ludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUyk7CiAKIAlyZXR1cm4ga3ZtcHBjXzQ0eF90bGJfaW5kZXgodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGlkLCBhcyk7CiB9CiAKLWludCBrdm1wcGNfNDR4X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK2ludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUyk7CiAKIAlyZXR1cm4ga3ZtcHBjXzQ0eF90bGJfaW5kZXgodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGlkLCBhcyk7CiB9CiAKK3ZvaWQga3ZtcHBjX21tdV9pdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19tbXVfZHRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKK30KKwogc3RhdGljIHZvaWQga3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0bGJfaW5kZXgpCiB7CkBAIC0yNDgsNyArMjY2LDcgQEAKIAlLVk1UUkFDRV8xRChTVExCX0lOVkFMLCAmdmNwdV80NHgtPnZjcHUsIHN0bGJfaW5kZXgsIGhhbmRsZXIpOwogfQogCi12b2lkIGt2bXBwY19jb3JlX2Rlc3Ryb3lfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3ZvaWQga3ZtcHBjX21tdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKIAlpbnQgaTsKQEAgLTI2OSwxNSArMjg3LDE5IEBACiAgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGd1ZXN0IFRMQiBlbnRyeSBpcyBzYWZlIHRvIGluc2VydCBpbnRvCiAgKiB0aGUgc2hhZG93IFRMQi4KICAqLwotdm9pZCBrdm1wcGNfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmFkZHIsIGdwYV90IGdwYWRkciwgdTY0IGFzaWQsCi0gICAgICAgICAgICAgICAgICAgIHUzMiBmbGFncywgdTMyIG1heF9ieXRlcywgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgpCit2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3RsYl9pbmRleCkKIHsKIAlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHN0bGJlOwogCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOworCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07CiAJc3RydWN0IGt2bXBwY180NHhfc2hhZG93X3JlZiAqcmVmOwogCXN0cnVjdCBwYWdlICpuZXdfcGFnZTsKIAlocGFfdCBocGFkZHI7CiAJZ2ZuX3QgZ2ZuOworCXUzMiBhc2lkID0gZ3RsYmUtPnRpZDsKKwl1MzIgZmxhZ3MgPSBndGxiZS0+d29yZDI7CisJdTMyIG1heF9ieXRlcyA9IGdldF90bGJfYnl0ZXMoZ3RsYmUpOwogCXVuc2lnbmVkIGludCB2aWN0aW07CiAKIAkvKiBTZWxlY3QgVExCIGVudHJ5IHRvIGNsb2JiZXIuIEluZGlyZWN0bHkgZ3VhcmQgYWdhaW5zdCByYWNlcyB3aXRoIHRoZSBUTEIKQEAgLTQ0OCwxMCArNDcwLDggQEAKIAl9CiAKIAlpZiAodGxiZV9pc19ob3N0X3NhZmUodmNwdSwgdGxiZSkpIHsKLQkJdTY0IGFzaWQ7CiAJCWd2YV90IGVhZGRyOwogCQlncGFfdCBncGFkZHI7Ci0JCXUzMiBmbGFnczsKIAkJdTMyIGJ5dGVzOwogCiAJCWVhZGRyID0gZ2V0X3RsYl9lYWRkcih0bGJlKTsKQEAgLTQ2MiwxMCArNDgyLDcgQEAKIAkJZWFkZHIgJj0gfihieXRlcyAtIDEpOwogCQlncGFkZHIgJj0gfihieXRlcyAtIDEpOwogCi0JCWFzaWQgPSAodGxiZS0+d29yZDAgJiBQUEM0NHhfVExCX1RTKSB8IHRsYmUtPnRpZDsKLQkJZmxhZ3MgPSB0bGJlLT53b3JkMiAmIDB4ZmZmZjsKLQotCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBhc2lkLCBmbGFncywgYnl0ZXMsIGd0bGJfaW5kZXgpOworCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBndGxiX2luZGV4KTsKIAl9CiAKIAlLVk1UUkFDRV81RChHVExCX1dSSVRFLCB2Y3B1LCBndGxiX2luZGV4LCB0bGJlLT50aWQsIHRsYmUtPndvcmQwLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmggYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaAppbmRleCA3NzIxOTFmLi5hOWZmODBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaApAQCAtMjUsOCArMjUsNiBAQAogCiBleHRlcm4gaW50IGt2bXBwY180NHhfdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwaWQsIHVuc2lnbmVkIGludCBhcyk7Ci1leHRlcm4gaW50IGt2bXBwY180NHhfZHRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKTsKLWV4dGVybiBpbnQga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOwogCiBleHRlcm4gaW50IGt2bXBwY180NHhfZW11bF90bGJzeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHJ0LCB1OCByYSwgdTggcmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCByYyk7CkBAIC04NSwxMSArODMsNCBAQAogCXJldHVybiAodmNwdS0+YXJjaC5tbXVjciA+PiAxNikgJiAweDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZ3BhX3QgdGxiX3hsYXRlKHN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKnRsYmUsIGd2YV90IGVhZGRyKQotewotCXVuc2lnbmVkIGludCBwZ21hc2sgPSBnZXRfdGxiX2J5dGVzKHRsYmUpIC0gMTsKLQotCXJldHVybiBnZXRfdGxiX3JhZGRyKHRsYmUpIHwgKGVhZGRyICYgcGdtYXNrKTsKLX0KLQogI2VuZGlmIC8qIF9fS1ZNX1BPV0VSUENfVExCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCmluZGV4IDZkYmRjNDguLjVhMTUyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTIsNiArMiw5IEBACiAjIEtWTSBjb25maWd1cmF0aW9uCiAjCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJLS0taGVscC0tLQpAQCAtNDMsNiArNDYsMTkgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEtWTV9FNTAwCisJYm9vbCAiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMCBwcm9jZXNzb3JzIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEU1MDAKKwlzZWxlY3QgS1ZNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgRTUwMCBndWVzdCBrZXJuZWxzIGluIHZpcnR1YWwgbWFjaGluZXMgb24KKwkgIEU1MDAgaG9zdCBwcm9jZXNzb3JzLgorCisJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoCisJICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEtWTV9UUkFDRQogCWJvb2wgIktWTSB0cmFjZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gS1ZNICYmIE1BUktFUlMgJiYgU1lTRlMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCmluZGV4IGRmN2JhNTkuLjRiMmRmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQpAQCAtMTYsOCArMTYsMTggQEAKIAoga3ZtLTQ0MC1vYmpzIDo9IFwKIAlib29rZS5vIFwKKwlib29rZV9lbXVsYXRlLm8gXAogCWJvb2tlX2ludGVycnVwdHMubyBcCiAJNDR4Lm8gXAogCTQ0eF90bGIubyBcCiAJNDR4X2VtdWxhdGUubwogb2JqLSQoQ09ORklHX0tWTV80NDApICs9IGt2bS00NDAubworCitrdm0tZTUwMC1vYmpzIDo9IFwKKwlib29rZS5vIFwKKwlib29rZV9lbXVsYXRlLm8gXAorCWJvb2tlX2ludGVycnVwdHMubyBcCisJZTUwMC5vIFwKKwllNTAwX3RsYi5vIFwKKwllNTAwX2VtdWxhdGUubworb2JqLSQoQ09ORklHX0tWTV9FNTAwKSArPSBrdm0tZTUwMC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKaW5kZXggMzU0ODVkZC4uNjQyZTQyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYwpAQCAtMzAsMTAgKzMwLDggQEAKICNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgogI2luY2x1ZGUgInRpbWluZy5oIgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV80NHguaD4KIAogI2luY2x1ZGUgImJvb2tlLmgiCi0jaW5jbHVkZSAiNDR4X3RsYi5oIgogCiB1bnNpZ25lZCBsb25nIGt2bXBwY19ib29rZV9oYW5kbGVyczsKIApAQCAtMTIwLDYgKzExOCw5IEBACiAJY2FzZSBCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRToKIAljYXNlIEJPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFOgogCWNhc2UgQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMOgorCWNhc2UgQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTDoKKwljYXNlIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEE6CisJY2FzZSBCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORDoKIAljYXNlIEJPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTDoKIAljYXNlIEJPT0tFX0lSUVBSSU9fQUxJR05NRU5UOgogCQlhbGxvd2VkID0gMTsKQEAgLTE2NSw3ICsxNjYsNyBAQAogCXVuc2lnbmVkIGludCBwcmlvcml0eTsKIAogCXByaW9yaXR5ID0gX19mZnMoKnBlbmRpbmcpOwotCXdoaWxlIChwcmlvcml0eSA8PSBCT09LRV9NQVhfSU5URVJSVVBUKSB7CisJd2hpbGUgKHByaW9yaXR5IDw9IEJPT0tFX0lSUVBSSU9fTUFYKSB7CiAJCWlmIChrdm1wcGNfYm9va2VfaXJxcHJpb19kZWxpdmVyKHZjcHUsIHByaW9yaXR5KSkKIAkJCWJyZWFrOwogCkBAIC0yNjMsNiArMjY0LDIxIEBACiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCWJyZWFrOwogCisJY2FzZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUw6CisJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUwpOworCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKworCWNhc2UgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBOgorCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBKTsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisKKwljYXNlIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQ6CisJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EKTsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisKIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0U6CiAJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKIAkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKQEAgLTI4NCwyOSArMzAwLDI3IEBACiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCWJyZWFrOwogCi0JLyogWFhYIG1vdmUgdG8gYSA0NDAtc3BlY2lmaWMgZmlsZS4gKi8KIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1M6IHsKLQkJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7Ci0JCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlOwogCQl1bnNpZ25lZCBsb25nIGVhZGRyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQlpbnQgZ3RsYl9pbmRleDsKKwkJZ3BhX3QgZ3BhZGRyOwogCQlnZm5fdCBnZm47CiAKIAkJLyogQ2hlY2sgdGhlIGd1ZXN0IFRMQi4gKi8KLQkJZ3RsYl9pbmRleCA9IGt2bXBwY180NHhfZHRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CisJCWd0bGJfaW5kZXggPSBrdm1wcGNfbW11X2R0bGJfaW5kZXgodmNwdSwgZWFkZHIpOwogCQlpZiAoZ3RsYl9pbmRleCA8IDApIHsKIAkJCS8qIFRoZSBndWVzdCBkaWRuJ3QgaGF2ZSBhIG1hcHBpbmcgZm9yIGl0LiAqLwogCQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19EVExCX01JU1MpOwogCQkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKKwkJCWt2bXBwY19tbXVfZHRsYl9taXNzKHZjcHUpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEVExCX1JFQUxfTUlTU19FWElUUyk7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQkJYnJlYWs7CiAJCX0KIAotCQlndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOwotCQl2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkID0gdGxiX3hsYXRlKGd0bGJlLCBlYWRkcik7Ci0JCWdmbiA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQgPj4gUEFHRV9TSElGVDsKKwkJZ3BhZGRyID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBndGxiX2luZGV4LCBlYWRkcik7CisJCWdmbiA9IGdwYWRkciA+PiBQQUdFX1NISUZUOwogCiAJCWlmIChrdm1faXNfdmlzaWJsZV9nZm4odmNwdS0+a3ZtLCBnZm4pKSB7CiAJCQkvKiBUaGUgZ3Vlc3QgVExCIGhhZCBhIG1hcHBpbmcsIGJ1dCB0aGUgc2hhZG93IFRMQgpAQCAtMzE1LDEzICszMjksMTMgQEAKIAkJCSAqIGIpIHRoZSBndWVzdCB1c2VkIGEgbGFyZ2UgbWFwcGluZyB3aGljaCB3ZSdyZSBmYWtpbmcKIAkJCSAqIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gc2F0aXNmeSB0aGUgZmF1bHQgd2l0aG91dAogCQkJICogaW52b2tpbmcgdGhlIGd1ZXN0LiAqLwotCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQsIGd0bGJlLT50aWQsCi0JCQkgICAgICAgICAgICAgICBndGxiZS0+d29yZDIsIGdldF90bGJfYnl0ZXMoZ3RsYmUpLCBndGxiX2luZGV4KTsKKwkJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGd0bGJfaW5kZXgpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEVExCX1ZJUlRfTUlTU19FWElUUyk7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQl9IGVsc2UgewogCQkJLyogR3Vlc3QgaGFzIG1hcHBlZCBhbmQgYWNjZXNzZWQgYSBwYWdlIHdoaWNoIGlzIG5vdAogCQkJICogYWN0dWFsbHkgUkFNLiAqLworCQkJdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCA9IGdwYWRkcjsKIAkJCXIgPSBrdm1wcGNfZW11bGF0ZV9tbWlvKHJ1biwgdmNwdSk7CiAJCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIE1NSU9fRVhJVFMpOwogCQl9CkBAIC0zMjksMTAgKzM0Myw3IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIFhYWCBtb3ZlIHRvIGEgNDQwLXNwZWNpZmljIGZpbGUuICovCiAJY2FzZSBCT09LRV9JTlRFUlJVUFRfSVRMQl9NSVNTOiB7Ci0JCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOwotCQlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZTsKIAkJdW5zaWduZWQgbG9uZyBlYWRkciA9IHZjcHUtPmFyY2gucGM7CiAJCWdwYV90IGdwYWRkcjsKIAkJZ2ZuX3QgZ2ZuOwpAQCAtMzQxLDE4ICszNTIsMTggQEAKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAogCQkvKiBDaGVjayB0aGUgZ3Vlc3QgVExCLiAqLwotCQlndGxiX2luZGV4ID0ga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHZjcHUsIGVhZGRyKTsKKwkJZ3RsYl9pbmRleCA9IGt2bXBwY19tbXVfaXRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CiAJCWlmIChndGxiX2luZGV4IDwgMCkgewogCQkJLyogVGhlIGd1ZXN0IGRpZG4ndCBoYXZlIGEgbWFwcGluZyBmb3IgaXQuICovCiAJCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX0lUTEJfTUlTUyk7CisJCQlrdm1wcGNfbW11X2l0bGJfbWlzcyh2Y3B1KTsKIAkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgSVRMQl9SRUFMX01JU1NfRVhJVFMpOwogCQkJYnJlYWs7CiAJCX0KIAogCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIElUTEJfVklSVF9NSVNTX0VYSVRTKTsKIAotCQlndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOwotCQlncGFkZHIgPSB0bGJfeGxhdGUoZ3RsYmUsIGVhZGRyKTsKKwkJZ3BhZGRyID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBndGxiX2luZGV4LCBlYWRkcik7CiAJCWdmbiA9IGdwYWRkciA+PiBQQUdFX1NISUZUOwogCiAJCWlmIChrdm1faXNfdmlzaWJsZV9nZm4odmNwdS0+a3ZtLCBnZm4pKSB7CkBAIC0zNjIsOCArMzczLDcgQEAKIAkJCSAqIGIpIHRoZSBndWVzdCB1c2VkIGEgbGFyZ2UgbWFwcGluZyB3aGljaCB3ZSdyZSBmYWtpbmcKIAkJCSAqIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gc2F0aXNmeSB0aGUgZmF1bHQgd2l0aG91dAogCQkJICogaW52b2tpbmcgdGhlIGd1ZXN0LiAqLwotCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYmUtPnRpZCwKLQkJCSAgICAgICAgICAgICAgIGd0bGJlLT53b3JkMiwgZ2V0X3RsYl9ieXRlcyhndGxiZSksIGd0bGJfaW5kZXgpOworCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYl9pbmRleCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBHdWVzdCBtYXBwZWQgYW5kIGxlYXBlZCBhdCBub24tUkFNISAqLwogCQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaAppbmRleCBjZjdjOTRjLi5kNTliY2NhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KICNpbmNsdWRlICJ0aW1pbmcuaCIKIAogLyogaW50ZXJydXB0IHByaW9ydGl0eSBvcmRlcmluZyAqLwpAQCAtMzAsMTcgKzMxLDI0IEBACiAjZGVmaW5lIEJPT0tFX0lSUVBSSU9fQUxJR05NRU5UIDIKICNkZWZpbmUgQk9PS0VfSVJRUFJJT19QUk9HUkFNIDMKICNkZWZpbmUgQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMIDQKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19TWVNDQUxMIDUKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMIDYKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19EVExCX01JU1MgNwotI2RlZmluZSBCT09LRV9JUlFQUklPX0lUTEJfTUlTUyA4Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDSyA5Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVCVUcgMTAKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19DUklUSUNBTCAxMQotI2RlZmluZSBCT09LRV9JUlFQUklPX1dBVENIRE9HIDEyCi0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fRVhURVJOQUwgMTMKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19GSVQgMTQKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUiAxNQorI2RlZmluZSBCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMIDUKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TUEVfRlBfREFUQSA2CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EIDcKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TWVNDQUxMIDgKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMIDkKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19EVExCX01JU1MgMTAKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19JVExCX01JU1MgMTEKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLIDEyCisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVCVUcgMTMKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19DUklUSUNBTCAxNAorI2RlZmluZSBCT09LRV9JUlFQUklPX1dBVENIRE9HIDE1CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fRVhURVJOQUwgMTYKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19GSVQgMTcKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUiAxOAorI2RlZmluZSBCT09LRV9JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1IgMTkKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19NQVggMTkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcga3ZtcHBjX2Jvb2tlX2hhbmRsZXJzOwogCiAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yICJmdWxsIiBNU1Igd3JpdGVzLiBObyBuZWVkIHRvIGNhbGwgdGhpcyBpZiBvbmx5IEVFIGlzCiAgKiBjaGFuZ2luZy4gKi8KQEAgLTU3LDQgKzY1LDkgQEAKIAl9OwogfQogCitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpOworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCk7CitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKTsKKwogI2VuZGlmIC8qIF9fS1ZNX0JPT0tFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2VtdWxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJjNjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqCisgKiBBdXRob3JzOiBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL2Rpc2Fzc2VtYmxlLmg+CisKKyNpbmNsdWRlICJib29rZS5oIgorCisjZGVmaW5lIE9QXzE5X1hPUF9SRkkgICAgIDUwCisKKyNkZWZpbmUgT1BfMzFfWE9QX01GTVNSICAgODMKKyNkZWZpbmUgT1BfMzFfWE9QX1dSVEVFICAgMTMxCisjZGVmaW5lIE9QXzMxX1hPUF9NVE1TUiAgIDE0NgorI2RlZmluZSBPUF8zMV9YT1BfV1JURUVJICAxNjMKKworc3RhdGljIHZvaWQga3ZtcHBjX2VtdWxfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5hcmNoLnBjID0gdmNwdS0+YXJjaC5zcnIwOworCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guc3JyMSk7Cit9CisKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9vcChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisJaW50IHJzOworCWludCBydDsKKworCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7CisJY2FzZSAxOToKKwkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CisJCWNhc2UgT1BfMTlfWE9QX1JGSToKKwkJCWt2bXBwY19lbXVsX3JmaSh2Y3B1KTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1JGSV9FWElUUyk7CisJCQkqYWR2YW5jZSA9IDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMzE6CisJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgeworCisJCWNhc2UgT1BfMzFfWE9QX01GTVNSOgorCQkJcnQgPSBnZXRfcnQoaW5zdCk7CisJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLm1zcjsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01GTVNSX0VYSVRTKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfMzFfWE9QX01UTVNSOgorCQkJcnMgPSBnZXRfcnMoaW5zdCk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NVE1TUl9FWElUUyk7CisJCQlrdm1wcGNfc2V0X21zcih2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10pOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUF8zMV9YT1BfV1JURUU6CisJCQlycyA9IGdldF9ycyhpbnN0KTsKKwkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKKwkJCQkJCQkgfCAodmNwdS0+YXJjaC5ncHJbcnNdICYgTVNSX0VFKTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1dSVEVFX0VYSVRTKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfMzFfWE9QX1dSVEVFSToKKwkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKKwkJCQkJCQkgfCAoaW5zdCAmIE1TUl9FRSk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fREVBUjoKKwkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fRVNSOgorCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IwOgorCQl2Y3B1LT5hcmNoLmRiY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjE6CisJCXZjcHUtPmFyY2guZGJjcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9EQlNSOgorCQl2Y3B1LT5hcmNoLmRic3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1RTUjoKKwkJdmNwdS0+YXJjaC50c3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1RDUjoKKwkJdmNwdS0+YXJjaC50Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWt2bXBwY19lbXVsYXRlX2RlYyh2Y3B1KTsKKwkJYnJlYWs7CisKKwkvKiBOb3RlOiBTUFJHNC03IGFyZSB1c2VyLXJlYWRhYmxlLiBUaGVzZSB2YWx1ZXMgYXJlCisJICogbG9hZGVkIGludG8gdGhlIHJlYWwgU1BSR3Mgd2hlbiByZXN1bWluZyB0aGUKKwkgKiBndWVzdC4gKi8KKwljYXNlIFNQUk5fU1BSRzQ6CisJCXZjcHUtPmFyY2guc3ByZzQgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9TUFJHNToKKwkJdmNwdS0+YXJjaC5zcHJnNSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1NQUkc2OgorCQl2Y3B1LT5hcmNoLnNwcmc2ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fU1BSRzc6CisJCXZjcHUtPmFyY2guc3ByZzcgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCisJY2FzZSBTUFJOX0lWUFI6CisJCXZjcHUtPmFyY2guaXZwciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IwOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMjoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjQ6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I1OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjY6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjc6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjg6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjk6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEwOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTE6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTI6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMzoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fSVZQUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdnByOyBicmVhazsKKwljYXNlIFNQUk5fREVBUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kZWFyOyBicmVhazsKKwljYXNlIFNQUk5fRVNSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmVzcjsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IwOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGJjcjE7IGJyZWFrOworCWNhc2UgU1BSTl9EQlNSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRic3I7IGJyZWFrOworCisJY2FzZSBTUFJOX0lWT1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I1OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjY6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjc6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjg6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjk6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKaW5kZXggMDg0ZWJjZC4uZDBjNmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKQEAgLTg2LDYgKzg2LDkgQEAKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1MKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9ERUJVRworS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX1NQRV9VTkFWQUlMCitLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX0RBVEEKK0tWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQKIAogX0dMT0JBTChrdm1wcGNfaGFuZGxlcl9sZW4pCiAJLmxvbmcga3ZtcHBjX2hhbmRsZXJfMSAtIGt2bXBwY19oYW5kbGVyXzAKQEAgLTM0Nyw3ICszNTAsOSBAQAogCWx3eglyMywgVkNQVV9TSEFET1dfUElEKHI0KQogCW10c3ByCVNQUk5fUElELCByMwogCisjaWZkZWYgQ09ORklHXzQ0eAogCWljY2NpCTAsIDAgLyogWFhYIGhhY2sgKi8KKyNlbmRpZgogCiAJLyogTG9hZCBzb21lIGd1ZXN0IHZvbGF0aWxlcy4gKi8KIAlsd3oJcjAsIFZDUFVfR1BSKHIwKShyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNjdmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBZdSBMaXUsIDx5dS5saXVAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYXJjaC9wb3dlcnBjL2t2bS80NHguYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZTUwMC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisKKyNpbmNsdWRlICJib29rZS5oIgorI2luY2x1ZGUgImU1MDBfdGxiLmgiCisKK3ZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKK3sKKwlrdm1wcGNfZTUwMF90bGJfbG9hZCh2Y3B1LCBjcHUpOworfQorCit2b2lkIGt2bXBwY19jb3JlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfZTUwMF90bGJfcHV0KHZjcHUpOworfQorCitpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCh2b2lkKQoreworCWludCByOworCisJaWYgKHN0cmNtcChjdXJfY3B1X3NwZWMtPmNwdV9uYW1lLCAiZTUwMHYyIikgPT0gMCkKKwkJciA9IDA7CisJZWxzZQorCQlyID0gLUVOT1RTVVBQOworCisJcmV0dXJuIHI7Cit9CisKK2ludCBrdm1wcGNfY29yZV92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCWt2bXBwY19lNTAwX3RsYl9zZXR1cCh2Y3B1X2U1MDApOworCisJLyogVXNlIHRoZSBzYW1lIGNvcmUgdmVydGlvbiBhcyBob3N0J3MgKi8KKwl2Y3B1LT5hcmNoLnB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKKworCXJldHVybiAwOworfQorCisvKiAnbGluZWFyX2FkZHJlc3MnIGlzIGFjdHVhbGx5IGFuIGVuY29kaW5nIG9mIEFTfFBJRHxFQUREUiAuICovCitpbnQga3ZtcHBjX2NvcmVfdmNwdV90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKnRyKQoreworCWludCBpbmRleDsKKwlndmFfdCBlYWRkcjsKKwl1OCBwaWQ7CisJdTggYXM7CisKKwllYWRkciA9IHRyLT5saW5lYXJfYWRkcmVzczsKKwlwaWQgPSAodHItPmxpbmVhcl9hZGRyZXNzID4+IDMyKSAmIDB4ZmY7CisJYXMgPSAodHItPmxpbmVhcl9hZGRyZXNzID4+IDQwKSAmIDB4MTsKKworCWluZGV4ID0ga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaCh2Y3B1LCBlYWRkciwgcGlkLCBhcyk7CisJaWYgKGluZGV4IDwgMCkgeworCQl0ci0+dmFsaWQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IGt2bXBwY19tbXVfeGxhdGUodmNwdSwgaW5kZXgsIGVhZGRyKTsKKwkvKiBYWFggd2hhdCBkb2VzICJ3cml0ZWFibGUiIGFuZCAidXNlcm1vZGUiIGV2ZW4gbWVhbj8gKi8KKwl0ci0+dmFsaWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IGVycjsKKworCXZjcHVfZTUwMCA9IGttZW1fY2FjaGVfemFsbG9jKGt2bV92Y3B1X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHVfZTUwMCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl2Y3B1ID0gJnZjcHVfZTUwMC0+dmNwdTsKKwllcnIgPSBrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV92Y3B1OworCisJZXJyID0ga3ZtcHBjX2U1MDBfdGxiX2luaXQodmNwdV9lNTAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVuaW5pdF92Y3B1OworCisJcmV0dXJuIHZjcHU7CisKK3VuaW5pdF92Y3B1OgorCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKK2ZyZWVfdmNwdToKKwlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHZjcHVfZTUwMCk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBrdm1wcGNfY29yZV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCisJa3ZtcHBjX2U1MDBfdGxiX3VuaW5pdCh2Y3B1X2U1MDApOworCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKKwlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHZjcHVfZTUwMCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfaW5pdCh2b2lkKQoreworCWludCByLCBpOworCXVuc2lnbmVkIGxvbmcgaXZvclszXTsKKwl1bnNpZ25lZCBsb25nIG1heF9pdm9yID0gMDsKKworCXIgPSBrdm1wcGNfYm9va2VfaW5pdCgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCS8qIGNvcHkgZXh0cmEgRTUwMCBleGNlcHRpb24gaGFuZGxlcnMgKi8KKwlpdm9yWzBdID0gbWZzcHIoU1BSTl9JVk9SMzIpOworCWl2b3JbMV0gPSBtZnNwcihTUFJOX0lWT1IzMyk7CisJaXZvclsyXSA9IG1mc3ByKFNQUk5fSVZPUjM0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpdm9yW2ldID4gbWF4X2l2b3IpCisJCQltYXhfaXZvciA9IGl2b3JbaV07CisKKwkJbWVtY3B5KCh2b2lkICopa3ZtcHBjX2Jvb2tlX2hhbmRsZXJzICsgaXZvcltpXSwKKwkJICAgICAgIGt2bXBwY19oYW5kbGVyc19zdGFydCArIChpICsgMTYpICoga3ZtcHBjX2hhbmRsZXJfbGVuLAorCQkgICAgICAga3ZtcHBjX2hhbmRsZXJfbGVuKTsKKwl9CisJZmx1c2hfaWNhY2hlX3JhbmdlKGt2bXBwY19ib29rZV9oYW5kbGVycywKKwkJCWt2bXBwY19ib29rZV9oYW5kbGVycyArIG1heF9pdm9yICsga3ZtcHBjX2hhbmRsZXJfbGVuKTsKKworCXJldHVybiBrdm1faW5pdChOVUxMLCBzaXplb2Yoc3RydWN0IGt2bXBwY192Y3B1X2U1MDApLCBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX2V4aXQodm9pZCkKK3sKKwlrdm1wcGNfYm9va2VfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChrdm1wcGNfZTUwMF9pbml0KTsKK21vZHVsZV9leGl0KGt2bXBwY19lNTAwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3NjA0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKworI2luY2x1ZGUgImJvb2tlLmgiCisjaW5jbHVkZSAiZTUwMF90bGIuaCIKKworI2RlZmluZSBYT1BfVExCSVZBWCA3ODYKKyNkZWZpbmUgWE9QX1RMQlNYICAgOTE0CisjZGVmaW5lIFhPUF9UTEJSRSAgIDk0NgorI2RlZmluZSBYT1BfVExCV0UgICA5NzgKKworaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisJaW50IHJhOworCWludCByYjsKKworCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7CisJY2FzZSAzMToKKwkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CisKKwkJY2FzZSBYT1BfVExCUkU6CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxicmUodmNwdSk7CisJCQlicmVhazsKKworCQljYXNlIFhPUF9UTEJXRToKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJ3ZSh2Y3B1KTsKKwkJCWJyZWFrOworCisJCWNhc2UgWE9QX1RMQlNYOgorCQkJcmIgPSBnZXRfcmIoaW5zdCk7CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxic3godmNwdSxyYik7CisJCQlicmVhazsKKworCQljYXNlIFhPUF9UTEJJVkFYOgorCQkJcmEgPSBnZXRfcmEoaW5zdCk7CisJCQlyYiA9IGdldF9yYihpbnN0KTsKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJpdmF4KHZjcHUsIHJhLCByYik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCWlmIChlbXVsYXRlZCA9PSBFTVVMQVRFX0ZBSUwpCisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3AocnVuLCB2Y3B1LCBpbnN0LCBhZHZhbmNlKTsKKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKworCXN3aXRjaCAoc3BybikgeworCWNhc2UgU1BSTl9QSUQ6CisJCXZjcHVfZTUwMC0+cGlkWzBdID0gdmNwdS0+YXJjaC5zaGFkb3dfcGlkID0KKwkJCXZjcHUtPmFyY2gucGlkID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fUElEMToKKwkJdmNwdV9lNTAwLT5waWRbMV0gPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9QSUQyOgorCQl2Y3B1X2U1MDAtPnBpZFsyXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzA6CisJCXZjcHVfZTUwMC0+bWFzMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzE6CisJCXZjcHVfZTUwMC0+bWFzMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzI6CisJCXZjcHVfZTUwMC0+bWFzMiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzM6CisJCXZjcHVfZTUwMC0+bWFzMyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzQ6CisJCXZjcHVfZTUwMC0+bWFzNCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzY6CisJCXZjcHVfZTUwMC0+bWFzNiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzc6CisJCXZjcHVfZTUwMC0+bWFzNyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0wxQ1NSMToKKwkJdmNwdV9lNTAwLT5sMWNzcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9ISUQwOgorCQl2Y3B1X2U1MDAtPmhpZDAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9ISUQxOgorCQl2Y3B1X2U1MDAtPmhpZDEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCisJY2FzZSBTUFJOX01NVUNTUjA6CisJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF9tdF9tbXVjc3IwKHZjcHVfZTUwMCwKKwkJCQl2Y3B1LT5hcmNoLmdwcltyc10pOworCQlicmVhazsKKworCS8qIGV4dHJhIGV4Y2VwdGlvbnMgKi8KKwljYXNlIFNQUk5fSVZPUjMyOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzM6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcih2Y3B1LCBzcHJuLCBycyk7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQorCitpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCisJc3dpdGNoIChzcHJuKSB7CisJY2FzZSBTUFJOX1BJRDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5waWRbMF07IGJyZWFrOworCWNhc2UgU1BSTl9QSUQxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFsxXTsgYnJlYWs7CisJY2FzZSBTUFJOX1BJRDI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+cGlkWzJdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMwOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMxOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMyOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMzOyBicmVhazsKKwljYXNlIFNQUk5fTUFTNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM0OyBicmVhazsKKwljYXNlIFNQUk5fTUFTNjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM2OyBicmVhazsKKwljYXNlIFNQUk5fTUFTNzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM3OyBicmVhazsKKworCWNhc2UgU1BSTl9UTEIwQ0ZHOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1RMQjBDRkcpOworCQl2Y3B1LT5hcmNoLmdwcltydF0gJj0gfjB4ZmZmVUw7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzBdOworCQlicmVhazsKKworCWNhc2UgU1BSTl9UTEIxQ0ZHOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1RMQjFDRkcpOworCQl2Y3B1LT5hcmNoLmdwcltydF0gJj0gfjB4ZmZmVUw7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdOworCQlicmVhazsKKworCWNhc2UgU1BSTl9MMUNTUjE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bDFjc3IxOyBicmVhazsKKwljYXNlIFNQUk5fSElEMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5oaWQwOyBicmVhazsKKwljYXNlIFNQUk5fSElEMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5oaWQxOyBicmVhazsKKworCWNhc2UgU1BSTl9NTVVDU1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSAwOyBicmVhazsKKworCS8qIGV4dHJhIGV4Y2VwdGlvbnMgKi8KKwljYXNlIFNQUk5fSVZPUjMyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzM6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUl07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbWZzcHIodmNwdSwgc3BybiwgcnQpOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzczZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKQEAgLTAsMCArMSw3NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgeXUubGl1QGZyZWVzY2FsZS5jb20KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBhcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9lNTAwLmg+CisKKyNpbmNsdWRlICIuLi9tbS9tbXVfZGVjbC5oIgorI2luY2x1ZGUgImU1MDBfdGxiLmgiCisKKyNkZWZpbmUgdG9faHRsYjFfZXNlbChlc2VsKSAodGxiMV9lbnRyeV9udW0gLSAoZXNlbCkgLSAxKQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRsYjFfZW50cnlfbnVtOworCit2b2lkIGt2bXBwY19kdW1wX3RsYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXN0cnVjdCB0bGJlICp0bGJlOworCWludCBpLCB0bGJzZWw7CisKKwlwcmludGsoInwgJThzIHwgJThzIHwgJThzIHwgJThzIHwgJThzIHxcbiIsCisJCQkibnIiLCAibWFzMSIsICJtYXMyIiwgIm1hczMiLCAibWFzNyIpOworCisJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykgeworCQlwcmludGsoIkd1ZXN0IFRMQiVkOlxuIiwgdGxic2VsKTsKKwkJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgaSsrKSB7CisJCQl0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1baV07CisJCQlpZiAodGxiZS0+bWFzMSAmIE1BUzFfVkFMSUQpCisJCQkJcHJpbnRrKCIgR1slZF1bJTNkXSB8ICAlMDhYIHwgJTA4WCB8ICUwOFggfCAlMDhYIHxcbiIsCisJCQkJCXRsYnNlbCwgaSwgdGxiZS0+bWFzMSwgdGxiZS0+bWFzMiwKKwkJCQkJdGxiZS0+bWFzMywgdGxiZS0+bWFzNyk7CisJCX0KKwl9CisKKwlmb3IgKHRsYnNlbCA9IDA7IHRsYnNlbCA8IDI7IHRsYnNlbCsrKSB7CisJCXByaW50aygiU2hhZG93IFRMQiVkOlxuIiwgdGxic2VsKTsKKwkJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+c2hhZG93X3RsYl9zaXplW3RsYnNlbF07IGkrKykgeworCQkJdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtpXTsKKwkJCWlmICh0bGJlLT5tYXMxICYgTUFTMV9WQUxJRCkKKwkJCQlwcmludGsoIiBTWyVkXVslM2RdIHwgICUwOFggfCAlMDhYIHwgJTA4WCB8ICUwOFggfFxuIiwKKwkJCQkJdGxic2VsLCBpLCB0bGJlLT5tYXMxLCB0bGJlLT5tYXMyLAorCQkJCQl0bGJlLT5tYXMzLCB0bGJlLT5tYXM3KTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGxiMF9nZXRfbmV4dF92aWN0aW0oCisJCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJdW5zaWduZWQgaW50IHZpY3RpbTsKKworCXZpY3RpbSA9IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdKys7CisJaWYgKHVubGlrZWx5KHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdID49IEtWTV9FNTAwX1RMQjBfV0FZX05VTSkpCisJCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdID0gMDsKKworCXJldHVybiB2aWN0aW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRsYjFfbWF4X3NoYWRvd19zaXplKHZvaWQpCit7CisJcmV0dXJuIHRsYjFfZW50cnlfbnVtIC0gdGxiY2FtX2luZGV4OworfQorCitzdGF0aWMgaW5saW5lIGludCB0bGJlX2lzX3dyaXRhYmxlKHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiB0bGJlLT5tYXMzICYgKE1BUzNfU1d8TUFTM19VVyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGU1MDBfc2hhZG93X21hczNfYXR0cmliKHUzMiBtYXMzLCBpbnQgdXNlcm1vZGUpCit7CisJLyogTWFzayBvZmYgcmVzZXJ2ZWQgYml0cy4gKi8KKwltYXMzICY9IE1BUzNfQVRUUklCX01BU0s7CisKKwlpZiAoIXVzZXJtb2RlKSB7CisJCS8qIEd1ZXN0IGlzIGluIHN1cGVydmlzb3IgbW9kZSwKKwkJICogc28gd2UgbmVlZCB0byB0cmFuc2xhdGUgZ3Vlc3QKKwkJICogc3VwZXJ2aXNvciBwZXJtaXNzaW9ucyBpbnRvIHVzZXIgcGVybWlzc2lvbnMuICovCisJCW1hczMgJj0gfkU1MDBfVExCX1VTRVJfUEVSTV9NQVNLOworCQltYXMzIHw9IChtYXMzICYgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLKSA8PCAxOworCX0KKworCXJldHVybiBtYXMzIHwgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBlNTAwX3NoYWRvd19tYXMyX2F0dHJpYih1MzIgbWFzMiwgaW50IHVzZXJtb2RlKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gKG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLKSB8IE1BUzJfTTsKKyNlbHNlCisJcmV0dXJuIG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLOworI2VuZGlmCit9CisKKy8qCisgKiB3cml0aW5nIHNoYWRvdyB0bGIgZW50cnkgdG8gaG9zdCBUTEIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVfaG9zdF90bGJlKHN0cnVjdCB0bGJlICpzdGxiZSkKK3sKKwltdHNwcihTUFJOX01BUzEsIHN0bGJlLT5tYXMxKTsKKwltdHNwcihTUFJOX01BUzIsIHN0bGJlLT5tYXMyKTsKKwltdHNwcihTUFJOX01BUzMsIHN0bGJlLT5tYXMzKTsKKwltdHNwcihTUFJOX01BUzcsIHN0bGJlLT5tYXM3KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRsYndlXG4iIDogOiApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaG9zdF90bGJlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKHRsYnNlbCA9PSAwKSB7CisJCV9fd3JpdGVfaG9zdF90bGJlKHN0bGJlKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCByZWdpc3RlciBtYXMwOworCisJCW1hczAgPSBtZnNwcihTUFJOX01BUzApOworCisJCW10c3ByKFNQUk5fTUFTMCwgTUFTMF9UTEJTRUwoMSkgfCBNQVMwX0VTRUwodG9faHRsYjFfZXNlbChlc2VsKSkpOworCQlfX3dyaXRlX2hvc3RfdGxiZShzdGxiZSk7CisKKwkJbXRzcHIoU1BSTl9NQVMwLCBtYXMwKTsKKwl9CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgaTsKKwl1bnNpZ25lZCByZWdpc3RlciBtYXMwOworCisJLyogTG9hZCBhbGwgdmFsaWQgVExCMSBlbnRyaWVzIHRvIHJlZHVjZSBndWVzdCB0bGIgbWlzcyBmYXVsdCAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbWFzMCA9IG1mc3ByKFNQUk5fTUFTMCk7CisJZm9yIChpID0gMDsgaSA8IHRsYjFfbWF4X3NoYWRvd19zaXplKCk7IGkrKykgeworCQlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdW2ldOworCisJCWlmIChnZXRfdGxiX3Yoc3RsYmUpKSB7CisJCQltdHNwcihTUFJOX01BUzAsIE1BUzBfVExCU0VMKDEpCisJCQkJCXwgTUFTMF9FU0VMKHRvX2h0bGIxX2VzZWwoaSkpKTsKKwkJCV9fd3JpdGVfaG9zdF90bGJlKHN0bGJlKTsKKwkJfQorCX0KKwltdHNwcihTUFJOX01BUzAsIG1hczApOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKwordm9pZCBrdm1wcGNfZTUwMF90bGJfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlfdGxiaWxfYWxsKCk7Cit9CisKKy8qIFNlYXJjaCB0aGUgZ3Vlc3QgVExCIGZvciBhIG1hdGNoaW5nIGVudHJ5LiAqLworc3RhdGljIGludCBrdm1wcGNfZTUwMF90bGJfaW5kZXgoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJZ3ZhX3QgZWFkZHIsIGludCB0bGJzZWwsIHVuc2lnbmVkIGludCBwaWQsIGludCBhcykKK3sKKwlpbnQgaTsKKworCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgaSsrKSB7CisJCXN0cnVjdCB0bGJlICp0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1baV07CisJCXVuc2lnbmVkIGludCB0aWQ7CisKKwkJaWYgKGVhZGRyIDwgZ2V0X3RsYl9lYWRkcih0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlYWRkciA+IGdldF90bGJfZW5kKHRsYmUpKQorCQkJY29udGludWU7CisKKwkJdGlkID0gZ2V0X3RsYl90aWQodGxiZSk7CisJCWlmICh0aWQgJiYgKHRpZCAhPSBwaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFnZXRfdGxiX3YodGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X3RsYl90cyh0bGJlKSAhPSBhcyAmJiBhcyAhPSAtMSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBpOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2Uoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCXN0cnVjdCBwYWdlICpwYWdlID0gdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXTsKKworCWlmIChwYWdlKSB7CisJCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzW3RsYnNlbF1bZXNlbF0gPSBOVUxMOworCisJCWlmIChnZXRfdGxiX3Yoc3RsYmUpKSB7CisJCQlpZiAodGxiZV9pc193cml0YWJsZShzdGxiZSkpCisJCQkJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCWVsc2UKKwkJCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF9zdGxiZV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKworCWt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwlzdGxiZS0+bWFzMSA9IDA7CisJS1ZNVFJBQ0VfNUQoU1RMQl9JTlZBTCwgJnZjcHVfZTUwMC0+dmNwdSwgaW5kZXhfb2YodGxic2VsLCBlc2VsKSwKKwkJCXN0bGJlLT5tYXMxLCBzdGxiZS0+bWFzMiwgc3RsYmUtPm1hczMsIHN0bGJlLT5tYXM3LAorCQkJaGFuZGxlcik7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX3RsYjFfaW52YWxpZGF0ZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlndmFfdCBlYWRkciwgZ3ZhX3QgZWVuZCwgdTMyIHRpZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGlkID0gdGlkICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV07IGkrKykgeworCQlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdW2ldOworCQl1bnNpZ25lZCBpbnQgdGlkOworCisJCWlmICghZ2V0X3RsYl92KHN0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlZW5kIDwgZ2V0X3RsYl9lYWRkcihzdGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZWFkZHIgPiBnZXRfdGxiX2VuZChzdGxiZSkpCisJCQljb250aW51ZTsKKworCQl0aWQgPSBnZXRfdGxiX3RpZChzdGxiZSk7CisJCWlmICh0aWQgJiYgKHRpZCAhPSBwaWQpKQorCQkJY29udGludWU7CisKKwkJa3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIDEsIGkpOworCQl3cml0ZV9ob3N0X3RsYmUodmNwdV9lNTAwLCAxLCBpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfZTUwMF9kZWxpdmVyX3RsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJdW5zaWduZWQgaW50IGVhZGRyLCBpbnQgYXMpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJdW5zaWduZWQgaW50IHZpY3RpbSwgcGlkc2VsLCB0c2l6ZWQ7CisJaW50IHRsYnNlbDsKKworCS8qIHNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4gKi8KKwl0bGJzZWwgPSAodmNwdV9lNTAwLT5tYXM0ID4+IDI4KSAmIDB4MTsKKwl2aWN0aW0gPSAodGxic2VsID09IDApID8gdGxiMF9nZXRfbmV4dF92aWN0aW0odmNwdV9lNTAwKSA6IDA7CisJcGlkc2VsID0gKHZjcHVfZTUwMC0+bWFzNCA+PiAxNikgJiAweGY7CisJdHNpemVkID0gKHZjcHVfZTUwMC0+bWFzNCA+PiA4KSAmIDB4ZjsKKworCXZjcHVfZTUwMC0+bWFzMCA9IE1BUzBfVExCU0VMKHRsYnNlbCkgfCBNQVMwX0VTRUwodmljdGltKQorCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJdmNwdV9lNTAwLT5tYXMxID0gTUFTMV9WQUxJRCB8IChhcyA/IE1BUzFfVFMgOiAwKQorCQl8IE1BUzFfVElEKHZjcHVfZTUwMC0+cGlkW3BpZHNlbF0pCisJCXwgTUFTMV9UU0laRSh0c2l6ZWQpOworCXZjcHVfZTUwMC0+bWFzMiA9IChlYWRkciAmIE1BUzJfRVBOKQorCQl8ICh2Y3B1X2U1MDAtPm1hczQgJiBNQVMyX0FUVFJJQl9NQVNLKTsKKwl2Y3B1X2U1MDAtPm1hczMgJj0gTUFTM19VMCB8IE1BUzNfVTEgfCBNQVMzX1UyIHwgTUFTM19VMzsKKwl2Y3B1X2U1MDAtPm1hczYgPSAodmNwdV9lNTAwLT5tYXM2ICYgTUFTNl9TUElEMSkKKwkJfCAoZ2V0X2N1cl9waWQodmNwdSkgPDwgMTYpCisJCXwgKGFzID8gTUFTNl9TQVMgOiAwKTsKKwl2Y3B1X2U1MDAtPm1hczcgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX2U1MDBfc2hhZG93X21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCXU2NCBndmFkZHIsIGdmbl90IGdmbiwgc3RydWN0IHRsYmUgKmd0bGJlLCBpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CisJc3RydWN0IHRsYmUgKnN0bGJlOworCWhwYV90IGhwYWRkcjsKKworCXN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCisJLyogR2V0IHJlZmVyZW5jZSB0byBuZXcgcGFnZS4gKi8KKwluZXdfcGFnZSA9IGdmbl90b19wYWdlKHZjcHVfZTUwMC0+dmNwdS5rdm0sIGdmbik7CisJaWYgKGlzX2Vycm9yX3BhZ2UobmV3X3BhZ2UpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ2V0IGd1ZXN0IHBhZ2UgZm9yIGdmbiAlbHghXG4iLCBnZm4pOworCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKG5ld19wYWdlKTsKKwkJcmV0dXJuOworCX0KKwlocGFkZHIgPSBwYWdlX3RvX3BoeXMobmV3X3BhZ2UpOworCisJLyogRHJvcCByZWZlcmVuY2UgdG8gb2xkIHBhZ2UuICovCisJa3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2UodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCisJdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXSA9IG5ld19wYWdlOworCisJLyogRm9yY2UgVFM9MSBJUFJPVD0wIFRTSVpFPTRLQiBmb3IgYWxsIGd1ZXN0IG1hcHBpbmdzLiAqLworCXN0bGJlLT5tYXMxID0gTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspCisJCXwgTUFTMV9USUQoZ2V0X3RsYl90aWQoZ3RsYmUpKSB8IE1BUzFfVFMgfCBNQVMxX1ZBTElEOworCXN0bGJlLT5tYXMyID0gKGd2YWRkciAmIE1BUzJfRVBOKQorCQl8IGU1MDBfc2hhZG93X21hczJfYXR0cmliKGd0bGJlLT5tYXMyLAorCQkJCXZjcHVfZTUwMC0+dmNwdS5hcmNoLm1zciAmIE1TUl9QUik7CisJc3RsYmUtPm1hczMgPSAoaHBhZGRyICYgTUFTM19SUE4pCisJCXwgZTUwMF9zaGFkb3dfbWFzM19hdHRyaWIoZ3RsYmUtPm1hczMsCisJCQkJdmNwdV9lNTAwLT52Y3B1LmFyY2gubXNyICYgTVNSX1BSKTsKKwlzdGxiZS0+bWFzNyA9IChocGFkZHIgPj4gMzIpICYgTUFTN19SUE47CisKKwlLVk1UUkFDRV81RChTVExCX1dSSVRFLCAmdmNwdV9lNTAwLT52Y3B1LCBpbmRleF9vZih0bGJzZWwsIGVzZWwpLAorCQkJc3RsYmUtPm1hczEsIHN0bGJlLT5tYXMyLCBzdGxiZS0+bWFzMywgc3RsYmUtPm1hczcsCisJCQloYW5kbGVyKTsKK30KKworLyogWFhYIG9ubHkgbWFwIHRoZSBvbmUtb25lIGNhc2UsIGZvciBub3cgdXNlIFRMQjAgKi8KK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfc3RsYmVfbWFwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpndGxiZTsKKworCWd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlrdm1wcGNfZTUwMF9zaGFkb3dfbWFwKHZjcHVfZTUwMCwgZ2V0X3RsYl9lYWRkcihndGxiZSksCisJCQlnZXRfdGxiX3JhZGRyKGd0bGJlKSA+PiBQQUdFX1NISUZULAorCQkJZ3RsYmUsIHRsYnNlbCwgZXNlbCk7CisKKwlyZXR1cm4gZXNlbDsKK30KKworLyogQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBndWVzdCBUTEIgZW50cnkgaXMgc2FmZSB0byBpbnNlcnQgaW50bworICogdGhlIHNoYWRvdyBUTEIuICovCisvKiBYWFggZm9yIGJvdGggb25lLW9uZSBhbmQgb25lLXRvLW1hbnkgLCBmb3Igbm93IHVzZSBUTEIxICovCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX3RsYjFfbWFwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCXU2NCBndmFkZHIsIGdmbl90IGdmbiwgc3RydWN0IHRsYmUgKmd0bGJlKQoreworCXVuc2lnbmVkIGludCB2aWN0aW07CisKKwl2aWN0aW0gPSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlsxXSsrOworCisJaWYgKHVubGlrZWx5KHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzFdID49IHRsYjFfbWF4X3NoYWRvd19zaXplKCkpKQorCQl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlsxXSA9IDA7CisKKwlrdm1wcGNfZTUwMF9zaGFkb3dfbWFwKHZjcHVfZTUwMCwgZ3ZhZGRyLCBnZm4sIGd0bGJlLCAxLCB2aWN0aW0pOworCisJcmV0dXJuIHZpY3RpbTsKK30KKworLyogSW52YWxpZGF0ZSBhbGwgZ3Vlc3Qga2VybmVsIG1hcHBpbmdzIHdoZW4gZW50ZXIgdXNlcm1vZGUsCisgKiBzbyB0aGF0IHdoZW4gdGhleSBmYXVsdCBiYWNrIGluIHRoZXkgd2lsbCBnZXQgdGhlCisgKiBwcm9wZXIgcGVybWlzc2lvbiBiaXRzLiAqLwordm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKQoreworCWlmICh1c2VybW9kZSkgeworCQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwkJaW50IGk7CisKKwkJLyogWFhYIFJlcGxhY2UgbG9vcCB3aXRoIGZhbmN5IGRhdGEgc3RydWN0dXJlcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHRsYjFfbWF4X3NoYWRvd19zaXplKCk7IGkrKykKKwkJCWt2bXBwY19lNTAwX3N0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAxLCBpKTsKKworCQlfdGxiaWxfYWxsKCk7CisJfQorfQorCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKmd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlpZiAodW5saWtlbHkoZ2V0X3RsYl9pcHJvdChndGxiZSkpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodGxic2VsID09IDEpIHsKKwkJa3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgZ2V0X3RsYl9lYWRkcihndGxiZSksCisJCQkJZ2V0X3RsYl9lbmQoZ3RsYmUpLAorCQkJCWdldF90bGJfdGlkKGd0bGJlKSk7CisJfSBlbHNlIHsKKwkJa3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CisJfQorCisJZ3RsYmUtPm1hczEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX210X21tdWNzcjAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwgdWxvbmcgdmFsdWUpCit7CisJaW50IGVzZWw7CisKKwlpZiAodmFsdWUgJiBNTVVDU1IwX1RMQjBGSSkKKwkJZm9yIChlc2VsID0gMDsgZXNlbCA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMF07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAwLCBlc2VsKTsKKwlpZiAodmFsdWUgJiBNTVVDU1IwX1RMQjFGSSkKKwkJZm9yIChlc2VsID0gMDsgZXNlbCA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAxLCBlc2VsKTsKKworCV90bGJpbF9hbGwoKTsKKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX3RsYml2YXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmEsIGludCByYikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwl1bnNpZ25lZCBpbnQgaWE7CisJaW50IGVzZWwsIHRsYnNlbDsKKwlndmFfdCBlYTsKKworCWVhID0gKChyYSkgPyB2Y3B1LT5hcmNoLmdwcltyYV0gOiAwKSArIHZjcHUtPmFyY2guZ3ByW3JiXTsKKworCWlhID0gKGVhID4+IDIpICYgMHgxOworCisJLyogc2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLiAqLworCXRsYnNlbCA9IChlYSA+PiAzKSAmIDB4MTsKKworCWlmIChpYSkgeworCQkvKiBpbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovCisJCWZvciAoZXNlbCA9IDA7IGVzZWwgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCX0gZWxzZSB7CisJCWVhICY9IDB4ZmZmZmYwMDA7CisJCWVzZWwgPSBrdm1wcGNfZTUwMF90bGJfaW5kZXgodmNwdV9lNTAwLCBlYSwgdGxic2VsLAorCQkJCWdldF9jdXJfcGlkKHZjcHUpLCAtMSk7CisJCWlmIChlc2VsID49IDApCisJCQlrdm1wcGNfZTUwMF9ndGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwl9CisKKwlfdGxiaWxfYWxsKCk7CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IHRsYnNlbCwgZXNlbDsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmU7CisKKwl0bGJzZWwgPSBnZXRfdGxiX3RsYnNlbCh2Y3B1X2U1MDApOworCWVzZWwgPSBnZXRfdGxiX2VzZWwodmNwdV9lNTAwLCB0bGJzZWwpOworCisJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKwl2Y3B1X2U1MDAtPm1hczAgJj0gfk1BUzBfTlYofjApOworCXZjcHVfZTUwMC0+bWFzMCB8PSBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCXZjcHVfZTUwMC0+bWFzMSA9IGd0bGJlLT5tYXMxOworCXZjcHVfZTUwMC0+bWFzMiA9IGd0bGJlLT5tYXMyOworCXZjcHVfZTUwMC0+bWFzMyA9IGd0bGJlLT5tYXMzOworCXZjcHVfZTUwMC0+bWFzNyA9IGd0bGJlLT5tYXM3OworCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxic3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmIpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGFzID0gISFnZXRfY3VyX3Nhcyh2Y3B1X2U1MDApOworCXVuc2lnbmVkIGludCBwaWQgPSBnZXRfY3VyX3NwaWQodmNwdV9lNTAwKTsKKwlpbnQgZXNlbCwgdGxic2VsOworCXN0cnVjdCB0bGJlICpndGxiZSA9IE5VTEw7CisJZ3ZhX3QgZWE7CisKKwllYSA9IHZjcHUtPmFyY2guZ3ByW3JiXTsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJZXNlbCA9IGt2bXBwY19lNTAwX3RsYl9pbmRleCh2Y3B1X2U1MDAsIGVhLCB0bGJzZWwsIHBpZCwgYXMpOworCQlpZiAoZXNlbCA+PSAwKSB7CisJCQlndGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZ3RsYmUpIHsKKwkJdmNwdV9lNTAwLT5tYXMwID0gTUFTMF9UTEJTRUwodGxic2VsKSB8IE1BUzBfRVNFTChlc2VsKQorCQkJfCBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCQl2Y3B1X2U1MDAtPm1hczEgPSBndGxiZS0+bWFzMTsKKwkJdmNwdV9lNTAwLT5tYXMyID0gZ3RsYmUtPm1hczI7CisJCXZjcHVfZTUwMC0+bWFzMyA9IGd0bGJlLT5tYXMzOworCQl2Y3B1X2U1MDAtPm1hczcgPSBndGxiZS0+bWFzNzsKKwl9IGVsc2UgeworCQlpbnQgdmljdGltOworCisJCS8qIHNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4gKi8KKwkJdGxic2VsID0gdmNwdV9lNTAwLT5tYXM0ID4+IDI4ICYgMHgxOworCQl2aWN0aW0gPSAodGxic2VsID09IDApID8gdGxiMF9nZXRfbmV4dF92aWN0aW0odmNwdV9lNTAwKSA6IDA7CisKKwkJdmNwdV9lNTAwLT5tYXMwID0gTUFTMF9UTEJTRUwodGxic2VsKSB8IE1BUzBfRVNFTCh2aWN0aW0pCisJCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJCXZjcHVfZTUwMC0+bWFzMSA9ICh2Y3B1X2U1MDAtPm1hczYgJiBNQVM2X1NQSUQwKQorCQkJfCAodmNwdV9lNTAwLT5tYXM2ICYgKE1BUzZfU0FTID8gTUFTMV9UUyA6IDApKQorCQkJfCAodmNwdV9lNTAwLT5tYXM0ICYgTUFTNF9UU0laRUQofjApKTsKKwkJdmNwdV9lNTAwLT5tYXMyICY9IE1BUzJfRVBOOworCQl2Y3B1X2U1MDAtPm1hczIgfD0gdmNwdV9lNTAwLT5tYXM0ICYgTUFTMl9BVFRSSUJfTUFTSzsKKwkJdmNwdV9lNTAwLT5tYXMzICY9IE1BUzNfVTAgfCBNQVMzX1UxIHwgTUFTM19VMiB8IE1BUzNfVTM7CisJCXZjcHVfZTUwMC0+bWFzNyA9IDA7CisJfQorCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxid2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXU2NCBlYWRkcjsKKwl1NjQgcmFkZHI7CisJdTMyIHRpZDsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmU7CisJaW50IHRsYnNlbCwgZXNlbCwgc3RsYnNlbCwgc2VzZWw7CisKKwl0bGJzZWwgPSBnZXRfdGxiX3RsYnNlbCh2Y3B1X2U1MDApOworCWVzZWwgPSBnZXRfdGxiX2VzZWwodmNwdV9lNTAwLCB0bGJzZWwpOworCisJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKworCWlmIChnZXRfdGxiX3YoZ3RsYmUpICYmIHRsYnNlbCA9PSAxKSB7CisJCWVhZGRyID0gZ2V0X3RsYl9lYWRkcihndGxiZSk7CisJCXRpZCA9IGdldF90bGJfdGlkKGd0bGJlKTsKKwkJa3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgZWFkZHIsCisJCQkJZ2V0X3RsYl9lbmQoZ3RsYmUpLCB0aWQpOworCX0KKworCWd0bGJlLT5tYXMxID0gdmNwdV9lNTAwLT5tYXMxOworCWd0bGJlLT5tYXMyID0gdmNwdV9lNTAwLT5tYXMyOworCWd0bGJlLT5tYXMzID0gdmNwdV9lNTAwLT5tYXMzOworCWd0bGJlLT5tYXM3ID0gdmNwdV9lNTAwLT5tYXM3OworCisJS1ZNVFJBQ0VfNUQoR1RMQl9XUklURSwgdmNwdSwgdmNwdV9lNTAwLT5tYXMwLAorCQkJZ3RsYmUtPm1hczEsIGd0bGJlLT5tYXMyLCBndGxiZS0+bWFzMywgZ3RsYmUtPm1hczcsCisJCQloYW5kbGVyKTsKKworCS8qIEludmFsaWRhdGUgc2hhZG93IG1hcHBpbmdzIGZvciB0aGUgYWJvdXQtdG8tYmUtY2xvYmJlcmVkIFRMQkUuICovCisJaWYgKHRsYmVfaXNfaG9zdF9zYWZlKHZjcHUsIGd0bGJlKSkgeworCQlzd2l0Y2ggKHRsYnNlbCkgeworCQljYXNlIDA6CisJCQkvKiBUTEIwICovCisJCQlndGxiZS0+bWFzMSAmPSB+TUFTMV9UU0laRSh+MCk7CisJCQlndGxiZS0+bWFzMSB8PSBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80Syk7CisKKwkJCXN0bGJzZWwgPSAwOworCQkJc2VzZWwgPSBrdm1wcGNfZTUwMF9zdGxiZV9tYXAodmNwdV9lNTAwLCAwLCBlc2VsKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSAxOgorCQkJLyogVExCMSAqLworCQkJZWFkZHIgPSBnZXRfdGxiX2VhZGRyKGd0bGJlKTsKKwkJCXJhZGRyID0gZ2V0X3RsYl9yYWRkcihndGxiZSk7CisKKwkJCS8qIENyZWF0ZSBhIDRLQiBtYXBwaW5nIG9uIHRoZSBob3N0LgorCQkJICogSWYgdGhlIGd1ZXN0IHdhbnRlZCBhIGxhcmdlIHBhZ2UsCisJCQkgKiBvbmx5IHRoZSBmaXJzdCA0S0IgaXMgbWFwcGVkIGhlcmUgYW5kIHRoZSByZXN0CisJCQkgKiBhcmUgbWFwcGVkIG9uIHRoZSBmbHkuICovCisJCQlzdGxic2VsID0gMTsKKwkJCXNlc2VsID0ga3ZtcHBjX2U1MDBfdGxiMV9tYXAodmNwdV9lNTAwLCBlYWRkciwKKwkJCQkJcmFkZHIgPj4gUEFHRV9TSElGVCwgZ3RsYmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJCXdyaXRlX2hvc3RfdGxiZSh2Y3B1X2U1MDAsIHN0bGJzZWwsIHNlc2VsKTsKKwl9CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX21tdV9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpOworCisJcmV0dXJuIGt2bXBwY19lNTAwX3RsYl9zZWFyY2godmNwdSwgZWFkZHIsIGdldF9jdXJfcGlkKHZjcHUpLCBhcyk7Cit9CisKK2ludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUyk7CisKKwlyZXR1cm4ga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaCh2Y3B1LCBlYWRkciwgZ2V0X2N1cl9waWQodmNwdSksIGFzKTsKK30KKwordm9pZCBrdm1wcGNfbW11X2l0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpOworCisJa3ZtcHBjX2U1MDBfZGVsaXZlcl90bGJfbWlzcyh2Y3B1LCB2Y3B1LT5hcmNoLnBjLCBhcyk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0RTKTsKKworCWt2bXBwY19lNTAwX2RlbGl2ZXJfdGxiX21pc3ModmNwdSwgdmNwdS0+YXJjaC5mYXVsdF9kZWFyLCBhcyk7Cit9CisKK2dwYV90IGt2bXBwY19tbXVfeGxhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQlndmFfdCBlYWRkcikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmUgPQorCQkmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsX29mKGluZGV4KV1bZXNlbF9vZihpbmRleCldOworCXU2NCBwZ21hc2sgPSBnZXRfdGxiX2J5dGVzKGd0bGJlKSAtIDE7CisKKwlyZXR1cm4gZ2V0X3RsYl9yYWRkcihndGxiZSkgfCAoZWFkZHIgJiBwZ21hc2spOworfQorCit2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IHRsYnNlbCwgaTsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspCisJCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGkrKykKKwkJCWt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHZjcHVfZTUwMCwgdGxic2VsLCBpKTsKKworCS8qIGRpc2NhcmQgYWxsIGd1ZXN0IG1hcHBpbmcgKi8KKwlfdGxiaWxfYWxsKCk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWFkZHIsIGdwYV90IGdwYWRkciwKKwkJCXVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgdGxic2VsID0gdGxic2VsX29mKGluZGV4KTsKKwlpbnQgZXNlbCA9IGVzZWxfb2YoaW5kZXgpOworCWludCBzdGxic2VsLCBzZXNlbDsKKworCXN3aXRjaCAodGxic2VsKSB7CisJY2FzZSAwOgorCQlzdGxic2VsID0gMDsKKwkJc2VzZWwgPSBlc2VsOworCQlicmVhazsKKworCWNhc2UgMTogeworCQlnZm5fdCBnZm4gPSBncGFkZHIgPj4gUEFHRV9TSElGVDsKKwkJc3RydWN0IHRsYmUgKmd0bGJlCisJCQk9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCisJCXN0bGJzZWwgPSAxOworCQlzZXNlbCA9IGt2bXBwY19lNTAwX3RsYjFfbWFwKHZjcHVfZTUwMCwgZWFkZHIsIGdmbiwgZ3RsYmUpOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXdyaXRlX2hvc3RfdGxiZSh2Y3B1X2U1MDAsIHN0bGJzZWwsIHNlc2VsKTsKK30KKworaW50IGt2bXBwY19lNTAwX3RsYl9zZWFyY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCWd2YV90IGVhZGRyLCB1bnNpZ25lZCBpbnQgcGlkLCBpbnQgYXMpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGVzZWwsIHRsYnNlbDsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJZXNlbCA9IGt2bXBwY19lNTAwX3RsYl9pbmRleCh2Y3B1X2U1MDAsIGVhZGRyLCB0bGJzZWwsIHBpZCwgYXMpOworCQlpZiAoZXNlbCA+PSAwKQorCQkJcmV0dXJuIGluZGV4X29mKHRsYnNlbCwgZXNlbCk7CisJfQorCisJcmV0dXJuIC0xOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl9zZXR1cChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXN0cnVjdCB0bGJlICp0bGJlOworCisJLyogSW5zZXJ0IGxhcmdlIGluaXRpYWwgbWFwcGluZyBmb3IgZ3Vlc3QuICovCisJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVswXTsKKwl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzI1Nk0pOworCXRsYmUtPm1hczIgPSAwOworCXRsYmUtPm1hczMgPSBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0s7CisJdGxiZS0+bWFzNyA9IDA7CisKKwkvKiA0SyBtYXAgZm9yIHNlcmlhbCBvdXRwdXQuIFVzZWQgYnkga2VybmVsIHdyYXBwZXIuICovCisJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVsxXTsKKwl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzRLKTsKKwl0bGJlLT5tYXMyID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IE1BUzJfSSB8IE1BUzJfRzsKKwl0bGJlLT5tYXMzID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSzsKKwl0bGJlLT5tYXM3ID0gMDsKK30KKworaW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJdGxiMV9lbnRyeV9udW0gPSBtZnNwcihTUFJOX1RMQjFDRkcpICYgMHhGRkY7CisKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzBdID0gS1ZNX0U1MDBfVExCMF9TSVpFOworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5ndWVzdF90bGJbMF0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0OworCisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiX3NpemVbMF0gPSBLVk1fRTUwMF9UTEIwX1NJWkU7CisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9ndWVzdDA7CisKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdID0gS1ZNX0U1MDBfVExCMV9TSVpFOworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5ndWVzdF90bGJbMV0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X3NoYWRvdzA7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd190bGJfc2l6ZVsxXSA9IHRsYjFfZW50cnlfbnVtOworCXZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bGJlKSAqIHRsYjFfZW50cnlfbnVtLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9ndWVzdDE7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSA9IChzdHJ1Y3QgcGFnZSAqKikKKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBLVk1fRTUwMF9UTEIwX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfc2hhZG93MTsKKworCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzFdID0gKHN0cnVjdCBwYWdlICoqKQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIHRsYjFfZW50cnlfbnVtLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMV0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X3BhZ2UwOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcGFnZTA6CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0pOworZXJyX291dF9zaGFkb3cxOgorCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSk7CitlcnJfb3V0X2d1ZXN0MToKKwlrZnJlZSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXSk7CitlcnJfb3V0X3NoYWRvdzA6CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdKTsKK2Vycl9vdXRfZ3Vlc3QwOgorCWtmcmVlKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdKTsKK2Vycl9vdXQ6CisJcmV0dXJuIC0xOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl91bmluaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1sxXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0pOworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMV0pOworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlswXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMF0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjA2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgeXUubGl1QGZyZWVzY2FsZS5jb20KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBhcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaCwKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19LVk1fRTUwMF9UTEJfSF9fCisjZGVmaW5lIF9fS1ZNX0U1MDBfVExCX0hfXworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vbW11LWZzbC1ib29rZS5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX0JJVAk3CS8qIEZpeGVkICovCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkUJCSgxVUwgPDwgS1ZNX0U1MDBfVExCMF9XQVlfU0laRV9CSVQpCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkVfTUFTSwkoS1ZNX0U1MDBfVExCMF9XQVlfU0laRSAtIDEpCisKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX0JJVAkxCS8qIE5vIGdyZWF0ZXIgdGhhbiA3ICovCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX05VTQkJKDFVTCA8PCBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fQklUKQorI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fTUFTSwkoS1ZNX0U1MDBfVExCMF9XQVlfTlVNIC0gMSkKKworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1NJWkUgIChLVk1fRTUwMF9UTEIwX1dBWV9TSVpFICogS1ZNX0U1MDBfVExCMF9XQVlfTlVNKQorI2RlZmluZSBLVk1fRTUwMF9UTEIxX1NJWkUgIDE2CisKKyNkZWZpbmUgaW5kZXhfb2YodGxic2VsLCBlc2VsKQkoKCh0bGJzZWwpIDw8IDE2KSB8ICgoZXNlbCkgJiAweEZGRkYpKQorI2RlZmluZSB0bGJzZWxfb2YoaW5kZXgpCSgoaW5kZXgpID4+IDE2KQorI2RlZmluZSBlc2VsX29mKGluZGV4KQkJKChpbmRleCkgJiAweEZGRkYpCisKKyNkZWZpbmUgRTUwMF9UTEJfVVNFUl9QRVJNX01BU0sgKE1BUzNfVVh8TUFTM19VUnxNQVMzX1VXKQorI2RlZmluZSBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0sgKE1BUzNfU1h8TUFTM19TUnxNQVMzX1NXKQorI2RlZmluZSBNQVMyX0FUVFJJQl9NQVNLIFwKKwkgIChNQVMyX1gwIHwgTUFTMl9YMSkKKyNkZWZpbmUgTUFTM19BVFRSSUJfTUFTSyBcCisJICAoTUFTM19VMCB8IE1BUzNfVTEgfCBNQVMzX1UyIHwgTUFTM19VMyBcCisJICAgfCBFNTAwX1RMQl9VU0VSX1BFUk1fTUFTSyB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSykKKworZXh0ZXJuIHZvaWQga3ZtcHBjX2R1bXBfdGxicyhzdHJ1Y3Qga3ZtX3ZjcHUgKik7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfbXRfbW11Y3NyMChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqLCB1bG9uZyk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxid2Uoc3RydWN0IGt2bV92Y3B1ICopOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF9lbXVsX3RsYnJlKHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJpdmF4KHN0cnVjdCBrdm1fdmNwdSAqLCBpbnQsIGludCk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxic3goc3RydWN0IGt2bV92Y3B1ICosIGludCk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX3RsYl9zZWFyY2goc3RydWN0IGt2bV92Y3B1ICosIGd2YV90LCB1bnNpZ25lZCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfcHV0KHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqLCBpbnQpOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqKTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl91bmluaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKik7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfc2V0dXAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKik7CisKKy8qIFRMQiBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3NpemUoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDgpICYgMHhmOworfQorCitzdGF0aWMgaW5saW5lIGd2YV90IGdldF90bGJfZWFkZHIoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuIHRsYmUtPm1hczIgJiAweGZmZmZmMDAwOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGxiX2J5dGVzKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXVuc2lnbmVkIGludCBwZ3NpemUgPSBnZXRfdGxiX3NpemUodGxiZSk7CisJcmV0dXJuIDFVTEwgPDwgMTAgPDwgKHBnc2l6ZSA8PCAxKTsKK30KKworc3RhdGljIGlubGluZSBndmFfdCBnZXRfdGxiX2VuZChjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwl1NjQgYnl0ZXMgPSBnZXRfdGxiX2J5dGVzKHRsYmUpOworCXJldHVybiBnZXRfdGxiX2VhZGRyKHRsYmUpICsgYnl0ZXMgLSAxOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGxiX3JhZGRyKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXU2NCBycG4gPSB0bGJlLT5tYXM3OworCXJldHVybiAocnBuIDw8IDMyKSB8ICh0bGJlLT5tYXMzICYgMHhmZmZmZjAwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdGlkKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAxNikgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3RzKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAxMikgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdihjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gMzEpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2lwcm90KGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAzMCkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jdXJfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5waWQgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3VyX3NwaWQoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuICh2Y3B1X2U1MDAtPm1hczYgPj4gMTYpICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2N1cl9zYXMoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuIHZjcHVfZTUwMC0+bWFzNiAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl90bGJzZWwoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJLyoKKwkgKiBNYW51YWwgc2F5cyB0aGF0IHRsYnNlbCBoYXMgMiBiaXRzIHdpZGUuCisJICogU2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLgorCSAqLworCXJldHVybiAodmNwdV9lNTAwLT5tYXMwID4+IDI4KSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9udl9iaXQoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuIHZjcHVfZTUwMC0+bWFzMCAmIDB4ZmZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2VzZWxfYml0KAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXJldHVybiAodmNwdV9lNTAwLT5tYXMwID4+IDE2KSAmIDB4ZmZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2VzZWwoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwpCit7CisJdW5zaWduZWQgaW50IGVzZWwgPSBnZXRfdGxiX2VzZWxfYml0KHZjcHVfZTUwMCk7CisKKwlpZiAodGxic2VsID09IDApIHsKKwkJZXNlbCAmPSBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fTUFTSzsKKwkJZXNlbCB8PSAoKHZjcHVfZTUwMC0+bWFzMiA+PiAxMikgJiBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX01BU0spCisJCQkJPDwgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX0JJVDsKKwl9IGVsc2UgeworCQllc2VsICY9IEtWTV9FNTAwX1RMQjFfU0laRSAtIDE7CisJfQorCisJcmV0dXJuIGVzZWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRsYmVfaXNfaG9zdF9zYWZlKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCWNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCWdwYV90IGdwYTsKKworCWlmICghZ2V0X3RsYl92KHRsYmUpKQorCQlyZXR1cm4gMDsKKworCS8qIERvZXMgaXQgbWF0Y2ggY3VycmVudCBndWVzdCBBUz8gKi8KKwkvKiBYWFggd2hhdCBhYm91dCBJUyAhPSBEUz8gKi8KKwlpZiAoZ2V0X3RsYl90cyh0bGJlKSAhPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUykpCisJCXJldHVybiAwOworCisJZ3BhID0gZ2V0X3RsYl9yYWRkcih0bGJlKTsKKwlpZiAoIWdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpKQorCQkvKiBNYXBwaW5nIGlzIG5vdCBmb3IgUkFNLiAqLworCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogX19LVk1fRTUwMF9UTEJfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCmluZGV4IGQxZDM4ZGEuLmE1NjFkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCkBAIC0zMCw2ICszMCwzOSBAQAogI2luY2x1ZGUgPGFzbS9kaXNhc3NlbWJsZS5oPgogI2luY2x1ZGUgInRpbWluZy5oIgogCisjZGVmaW5lIE9QX1RSQVAgMworCisjZGVmaW5lIE9QXzMxX1hPUF9MV1pYICAgICAgMjMKKyNkZWZpbmUgT1BfMzFfWE9QX0xCWlggICAgICA4NworI2RlZmluZSBPUF8zMV9YT1BfU1RXWCAgICAgIDE1MQorI2RlZmluZSBPUF8zMV9YT1BfU1RCWCAgICAgIDIxNQorI2RlZmluZSBPUF8zMV9YT1BfU1RCVVggICAgIDI0NworI2RlZmluZSBPUF8zMV9YT1BfTEhaWCAgICAgIDI3OQorI2RlZmluZSBPUF8zMV9YT1BfTEhaVVggICAgIDMxMQorI2RlZmluZSBPUF8zMV9YT1BfTUZTUFIgICAgIDMzOQorI2RlZmluZSBPUF8zMV9YT1BfU1RIWCAgICAgIDQwNworI2RlZmluZSBPUF8zMV9YT1BfU1RIVVggICAgIDQzOQorI2RlZmluZSBPUF8zMV9YT1BfTVRTUFIgICAgIDQ2NworI2RlZmluZSBPUF8zMV9YT1BfRENCSSAgICAgIDQ3MAorI2RlZmluZSBPUF8zMV9YT1BfTFdCUlggICAgIDUzNAorI2RlZmluZSBPUF8zMV9YT1BfVExCU1lOQyAgIDU2NgorI2RlZmluZSBPUF8zMV9YT1BfU1RXQlJYICAgIDY2MgorI2RlZmluZSBPUF8zMV9YT1BfTEhCUlggICAgIDc5MAorI2RlZmluZSBPUF8zMV9YT1BfU1RIQlJYICAgIDkxOAorCisjZGVmaW5lIE9QX0xXWiAgMzIKKyNkZWZpbmUgT1BfTFdaVSAzMworI2RlZmluZSBPUF9MQlogIDM0CisjZGVmaW5lIE9QX0xCWlUgMzUKKyNkZWZpbmUgT1BfU1RXICAzNgorI2RlZmluZSBPUF9TVFdVIDM3CisjZGVmaW5lIE9QX1NUQiAgMzgKKyNkZWZpbmUgT1BfU1RCVSAzOQorI2RlZmluZSBPUF9MSFogIDQwCisjZGVmaW5lIE9QX0xIWlUgNDEKKyNkZWZpbmUgT1BfU1RIICA0NAorI2RlZmluZSBPUF9TVEhVIDQ1CisKIHZvaWQga3ZtcHBjX2VtdWxhdGVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAodmNwdS0+YXJjaC50Y3IgJiBUQ1JfRElFKSB7CkBAIC03OCw3ICsxMTEsNyBAQAogCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX0lOU1RfRVhJVFMpOwogCiAJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKLQljYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhcCAqLworCWNhc2UgT1BfVFJBUDoKIAkJdmNwdS0+YXJjaC5lc3IgfD0gRVNSX1BUUjsKIAkJa3ZtcHBjX2NvcmVfcXVldWVfcHJvZ3JhbSh2Y3B1KTsKIAkJYWR2YW5jZSA9IDA7CkBAIC04NywzMSArMTIwLDMxIEBACiAJY2FzZSAzMToKIAkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CiAKLQkJY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbHd6eCAqLworCQljYXNlIE9QXzMxX1hPUF9MV1pYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxienggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEJaWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMSwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDE1MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHd4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUV1g6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5ncHJbcnNdLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAyMTU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RieCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEJYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YnV4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUQlVYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTI2LDEyICsxNTksMTIgQEAKIAkJCXZjcHUtPmFyY2guZ3ByW3JzXSA9IGVhOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAyNzk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGh6eCAqLworCQljYXNlIE9QXzMxX1hPUF9MSFpYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAyLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMzExOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoenV4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xIWlVYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTQ0LDcgKzE3Nyw3IEBACiAJCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSBlYTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMzM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1mc3ByICovCisJCWNhc2UgT1BfMzFfWE9QX01GU1BSOgogCQkJc3BybiA9IGdldF9zcHJuKGluc3QpOwogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAKQEAgLTE4NSw3ICsyMTgsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSA0MDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoeCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEhYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTk1LDcgKzIyOCw3IEBACiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDQzOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGh1eCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEhVWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTIxMCw3ICsyNDMsNyBAQAogCQkJdmNwdS0+YXJjaC5ncHJbcmFdID0gZWE7CiAJCQlicmVhazsKIAotCQljYXNlIDQ2NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtdHNwciAqLworCQljYXNlIE9QXzMxX1hPUF9NVFNQUjoKIAkJCXNwcm4gPSBnZXRfc3BybihpbnN0KTsKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJc3dpdGNoIChzcHJuKSB7CkBAIC0yNDYsNyArMjc5LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgNDcwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRjYmkgKi8KKwkJY2FzZSBPUF8zMV9YT1BfRENCSToKIAkJCS8qIERvIG5vdGhpbmcuIFRoZSBndWVzdCBpcyBwZXJmb3JtaW5nIGRjYmkgYmVjYXVzZQogCQkJICogaGFyZHdhcmUgRE1BIGlzIG5vdCBzbm9vcGVkIGJ5IHRoZSBkY2FjaGUsIGJ1dAogCQkJICogZW11bGF0ZWQgRE1BIGVpdGhlciBnb2VzIHRocm91Z2ggdGhlIGRjYWNoZSBhcwpAQCAtMjU0LDE1ICsyODcsMTUgQEAKIAkJCSAqIGNvaGVyZW5jZS4gKi8KIAkJCWJyZWFrOwogCi0JCWNhc2UgNTM0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3YnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xXQlJYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAwKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgNTY2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRsYnN5bmMgKi8KKwkJY2FzZSBPUF8zMV9YT1BfVExCU1lOQzoKIAkJCWJyZWFrOwogCi0JCWNhc2UgNjYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0d2JyeCAqLworCQljYXNlIE9QXzMxX1hPUF9TVFdCUlg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0yNzIsMTIgKzMwNSwxMiBAQAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA3OTA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGhicnggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEhCUlg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA5MTg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoYnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUSEJSWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTI5MywzNyArMzI2LDM3IEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3eiAqLworCWNhc2UgT1BfTFdaOgogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgNCwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsd3p1ICovCisJY2FzZSBPUF9MV1pVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDQsIDEpOwogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgMzQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGJ6ICovCisJY2FzZSBPUF9MQlo6CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAxLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxienUgKi8KKwljYXNlIE9QX0xCWlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMSwgMSk7CiAJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CiAJCWJyZWFrOwogCi0JY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHcgKi8KKwljYXNlIE9QX1NUVzoKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwogCQlicmVhazsKIAotCWNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3R3dSAqLworCWNhc2UgT1BfU1RXVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCkBAIC0zMzEsMTMgKzM2NCwxMyBAQAogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RiICovCisJY2FzZSBPUF9TVEI6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YnUgKi8KKwljYXNlIE9QX1NUQlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLApAQCAtMzQ1LDI1ICszNzgsMjUgQEAKIAkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKIAkJYnJlYWs7CiAKLQljYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoeiAqLworCWNhc2UgT1BfTEhaOgogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMiwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaHp1ICovCisJY2FzZSBPUF9MSFpVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDEpOwogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgNDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoICovCisJY2FzZSBPUF9TVEg6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDQ1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0aHUgKi8KKwljYXNlIE9QX1NUSFU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCAyODIyYzhjLi45MDU3MzM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtMTI1LDYgKzEyNSwxMCBAQAogCX0KIH0KIAordm9pZCBrdm1fYXJjaF9zeW5jX2V2ZW50cyhzdHJ1Y3Qga3ZtICprdm0pCit7Cit9CisKIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJa3ZtcHBjX2ZyZWVfdmNwdXMoa3ZtKTsKQEAgLTIxMiw0NiArMjE2LDIzIEBACiAKIHZvaWQga3ZtX2FyY2hfdmNwdV91bmluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bXBwY19jb3JlX2Rlc3Ryb3lfbW11KHZjcHUpOworCWt2bXBwY19tbXVfZGVzdHJveSh2Y3B1KTsKIH0KIAogdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQlrdm1wcGNfY29yZV9sb2FkX2d1ZXN0X2RlYnVnc3RhdGUodmNwdSk7Ci0KIAlrdm1wcGNfY29yZV92Y3B1X2xvYWQodmNwdSwgY3B1KTsKIH0KIAogdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bXBwY19jb3JlX2xvYWRfaG9zdF9kZWJ1Z3N0YXRlKHZjcHUpOwotCi0JLyogRG9uJ3QgbGVhdmUgZ3Vlc3QgVExCIGVudHJpZXMgcmVzaWRlbnQgd2hlbiBiZWluZyBkZS1zY2hlZHVsZWQuICovCi0JLyogWFhYIEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGhlYXZ5d2VpZ2h0IGV4aXQgYW5kCi0JICogc2NoZWRfb3V0IGhlcmUsIHNpbmNlIHdlIGNvdWxkIGF2b2lkIHRoZSBUTEIgZmx1c2ggZm9yIGhlYXZ5d2VpZ2h0Ci0JICogZXhpdHMuICovCi0JX3RsYmlsX2FsbCgpOwogCWt2bXBwY19jb3JlX3ZjcHVfcHV0KHZjcHUpOwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQlpbnQgaTsKLQotCXZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQgPSBkYmctPmVuYWJsZWQ7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpIHsKLQkJZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKHZjcHUtPmd1ZXN0X2RlYnVnLmJwKTsgaSsrKSB7Ci0JCQlpZiAoZGJnLT5icmVha3BvaW50c1tpXS5lbmFibGVkKQotCQkJCXZjcHUtPmd1ZXN0X2RlYnVnLmJwW2ldID0gZGJnLT5icmVha3BvaW50c1tpXS5hZGRyZXNzOwotCQkJZWxzZQotCQkJCXZjcHUtPmd1ZXN0X2RlYnVnLmJwW2ldID0gMDsKLQkJfQotCX0KLQotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdm9pZCBrdm1wcGNfY29tcGxldGVfZGNyX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TCmluZGV4IDcwNjkzYTUuLjY5M2IxNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMKQEAgLTYyLDE4ICs2MiwxOSBAQAogNzI6CXN0ZAlyOCw4KHIzKQogCWJlcSsJM2YKIAlhZGRpCXIzLHIzLDE2Ci0yMzoJbGQJcjksOChyNCkKIC5MZG9fdGFpbDoKIAliZgljcjcqNCsxLDFmCi0Jcm90bGRpCXI5LHI5LDMyCisyMzoJbHd6CXI5LDgocjQpCisJYWRkaQlyNCxyNCw0CiA3MzoJc3R3CXI5LDAocjMpCiAJYWRkaQlyMyxyMyw0CiAxOgliZgljcjcqNCsyLDJmCi0Jcm90bGRpCXI5LHI5LDE2Cis0NDoJbGh6CXI5LDgocjQpCisJYWRkaQlyNCxyNCwyCiA3NDoJc3RoCXI5LDAocjMpCiAJYWRkaQlyMyxyMywyCiAyOgliZgljcjcqNCszLDNmCi0Jcm90bGRpCXI5LHI5LDgKKzQ1OglsYnoJcjksOChyNCkKIDc1OglzdGIJcjksMChyMykKIDM6CWxpCXIzLDAKIAlibHIKQEAgLTE0MSwxMSArMTQyLDI0IEBACiA2OgljbXB3aQljcjEscjUsOAogCWFkZGkJcjMscjMsMzIKIAlzbGQJcjkscjkscjEwCi0JYmxlCWNyMSwuTGRvX3RhaWwKKwlibGUJY3IxLDdmCiAzNDoJbGQJcjAsOChyNCkKIAlzcmQJcjcscjAscjExCiAJb3IJcjkscjcscjkKLQliCS5MZG9fdGFpbAorNzoKKwliZgljcjcqNCsxLDFmCisJcm90bGRpCXI5LHI5LDMyCis5NDoJc3R3CXI5LDAocjMpCisJYWRkaQlyMyxyMyw0CisxOgliZgljcjcqNCsyLDJmCisJcm90bGRpCXI5LHI5LDE2Cis5NToJc3RoCXI5LDAocjMpCisJYWRkaQlyMyxyMywyCisyOgliZgljcjcqNCszLDNmCisJcm90bGRpCXI5LHI5LDgKKzk2OglzdGIJcjksMChyMykKKzM6CWxpCXIzLDAKKwlibHIKIAogLkxkc3RfdW5hbGlnbmVkOgogCVBQQ19NVE9DUkYJMHgwMSxyNgkJLyogcHV0ICNieXRlcyB0byA4QiBiZHJ5IGludG8gY3I3ICovCkBAIC0yMTgsNyArMjMyLDYgQEAKIDEyMToKIDEzMjoKIAlhZGRpCXIzLHIzLDgKLTEyMzoKIDEzNDoKIDEzNToKIDEzODoKQEAgLTIyNiw2ICsyMzksOSBAQAogMTQwOgogMTQxOgogMTQyOgorMTIzOgorMTQ0OgorMTQ1OgogCiAvKgogICogaGVyZSB3ZSBoYXZlIGhhZCBhIGZhdWx0IG9uIGEgbG9hZCBhbmQgcjMgcG9pbnRzIHRvIHRoZSBmaXJzdApAQCAtMzA5LDYgKzMyNSw5IEBACiAxODc6CiAxODg6CiAxODk6CQorMTk0OgorMTk1OgorMTk2OgogMToKIAlsZAlyNiwtMjQocjEpCiAJbGQJcjUsLTgocjEpCkBAIC0zMjksNyArMzQ4LDkgQEAKIAkubGxvbmcJNzJiLDE3MmIKIAkubGxvbmcJMjNiLDEyM2IKIAkubGxvbmcJNzNiLDE3M2IKKwkubGxvbmcJNDRiLDE0NGIKIAkubGxvbmcJNzRiLDE3NGIKKwkubGxvbmcJNDViLDE0NWIKIAkubGxvbmcJNzViLDE3NWIKIAkubGxvbmcJMjRiLDEyNGIKIAkubGxvbmcJMjViLDEyNWIKQEAgLTM0Nyw2ICszNjgsOSBAQAogCS5sbG9uZwk3OWIsMTc5YgogCS5sbG9uZwk4MGIsMTgwYgogCS5sbG9uZwkzNGIsMTM0YgorCS5sbG9uZwk5NGIsMTk0YgorCS5sbG9uZwk5NWIsMTk1YgorCS5sbG9uZwk5NmIsMTk2YgogCS5sbG9uZwkzNWIsMTM1YgogCS5sbG9uZwk4MWIsMTgxYgogCS5sbG9uZwkzNmIsMTM2YgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9tZW1jcHlfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvbWVtY3B5XzY0LlMKaW5kZXggZmUyZDM0ZS4uZTE3ODkyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9tZW1jcHlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL21lbWNweV82NC5TCkBAIC01MywxOCArNTMsMTkgQEAKIDM6CXN0ZAlyOCw4KHIzKQogCWJlcQkzZgogCWFkZGkJcjMscjMsMTYKLQlsZAlyOSw4KHI0KQogLkxkb190YWlsOgogCWJmCWNyNyo0KzEsMWYKLQlyb3RsZGkJcjkscjksMzIKKwlsd3oJcjksOChyNCkKKwlhZGRpCXI0LHI0LDQKIAlzdHcJcjksMChyMykKIAlhZGRpCXIzLHIzLDQKIDE6CWJmCWNyNyo0KzIsMmYKLQlyb3RsZGkJcjkscjksMTYKKwlsaHoJcjksOChyNCkKKwlhZGRpCXI0LHI0LDIKIAlzdGgJcjksMChyMykKIAlhZGRpCXIzLHIzLDIKIDI6CWJmCWNyNyo0KzMsM2YKLQlyb3RsZGkJcjkscjksOAorCWxieglyOSw4KHI0KQogCXN0YglyOSwwKHIzKQogMzoJbGQJcjMsNDgocjEpCS8qIHJldHVybiBkZXN0IHBvaW50ZXIgKi8KIAlibHIKQEAgLTEzMywxMSArMTM0LDI0IEBACiAJY21wd2kJY3IxLHI1LDgKIAlhZGRpCXIzLHIzLDMyCiAJc2xkCXI5LHI5LHIxMAotCWJsZQljcjEsLkxkb190YWlsCisJYmxlCWNyMSw2ZgogCWxkCXIwLDgocjQpCiAJc3JkCXI3LHIwLHIxMQogCW9yCXI5LHI3LHI5Ci0JYgkuTGRvX3RhaWwKKzY6CisJYmYJY3I3KjQrMSwxZgorCXJvdGxkaQlyOSxyOSwzMgorCXN0dwlyOSwwKHIzKQorCWFkZGkJcjMscjMsNAorMToJYmYJY3I3KjQrMiwyZgorCXJvdGxkaQlyOSxyOSwxNgorCXN0aAlyOSwwKHIzKQorCWFkZGkJcjMscjMsMgorMjoJYmYJY3I3KjQrMywzZgorCXJvdGxkaQlyOSxyOSw4CisJc3RiCXI5LDAocjMpCiszOglsZAlyMyw0OChyMSkJLyogcmV0dXJuIGRlc3QgcG9pbnRlciAqLworCWJscgogCiAuTGRzdF91bmFsaWduZWQ6CiAJUFBDX01UT0NSRgkweDAxLHI2CQkjIHB1dCAjYnl0ZXMgdG8gOEIgYmRyeSBpbnRvIGNyNwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggNzM5M2JkNy4uNWFjMDhiOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogI2luY2x1ZGUgPGFzbS9zcGFyc2VtZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTg4Miw3ICs4ODMsNyBAQAogCQl1bnNpZ25lZCBsb25nIHBoeXNiYXNlID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlOwogCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemU7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gcGh5c2Jhc2UgPj4gUEFHRV9TSElGVDsKLQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gKChwaHlzYmFzZSArIHNpemUpID4+IFBBR0VfU0hJRlQpOworCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQRk5fVVAocGh5c2Jhc2UgKyBzaXplKTsKIAkJc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiBub2RlX2FyOwogCQl1bnNpZ25lZCBsb25nIG5vZGVfZW5kX3BmbiA9IG5vZGUtPm5vZGVfc3RhcnRfcGZuICsKIAkJCQkJICAgICBub2RlLT5ub2RlX3NwYW5uZWRfcGFnZXM7CkBAIC05MDgsNyArOTA5LDcgQEAKIAkJCSAqLwogCQkJaWYgKGVuZF9wZm4gPiBub2RlX2FyLmVuZF9wZm4pCiAJCQkJcmVzZXJ2ZV9zaXplID0gKG5vZGVfYXIuZW5kX3BmbiA8PCBQQUdFX1NISUZUKQotCQkJCQktIChzdGFydF9wZm4gPDwgUEFHRV9TSElGVCk7CisJCQkJCS0gcGh5c2Jhc2U7CiAJCQkvKgogCQkJICogT25seSB3b3JyeSBhYm91dCAqdGhpcyogbm9kZSwgb3RoZXJzIG1heSBub3QKIAkJCSAqIHlldCBoYXZlIHZhbGlkIE5PREVfREFUQSgpLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKaW5kZXggZmIzNzFmNS4uZDZiNzcyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCkBAIC0xNDIsNiArMTQyLDEwIEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAorCS8qIERvIG5vdCBkbyB0aGUgZml4dXAgb24gb3RoZXIgcGxhdGZvcm1zISAqLworCWlmICghbWFjaGluZV9pcyhnZWZfc2JjNjEwKSkKKwkJcmV0dXJuOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiUnVubmluZyBORUMgdVBENzIwMTAxIEZpeHVwXG4iKTsKIAogCS8qIEVuc3VyZSBwb3J0cyAxLCAyLCAzLCA0ICYgNSBhcmUgZW5hYmxlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCmluZGV4IDI4YzA0ZGEuLjg4MmU0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKQEAgLTIzNyw4ICsyMzcsNiBAQAogCiBzdGF0aWMgdm9pZCBoYW5kbGVfaWljX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQogCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwpAQCAtMjU0LDcgKzI1Miw3IEBACiAJCWdvdG8gb3V0X2VvaTsKIAl9CiAKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuKi8KIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCmluZGV4IDZhMGFkMTkuLmYwODUzNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCkBAIC01MDgsNyArNTA4LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmY3R4LT5ycSwgJnNwdV9wcmlvLT5ydW5xW2N0eC0+cHJpb10pOwogCQlzZXRfYml0KGN0eC0+cHJpbywgc3B1X3ByaW8tPmJpdG1hcCk7CiAJCWlmICghc3B1X3ByaW8tPm5yX3dhaXRpbmcrKykKLQkJCV9fbW9kX3RpbWVyKCZzcHVzY2hlZF90aW1lciwgamlmZmllcyArIFNQVVNDSEVEX1RJQ0spOworCQkJbW9kX3RpbWVyKCZzcHVzY2hlZF90aW1lciwgamlmZmllcyArIFNQVVNDSEVEX1RJQ0spOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9saW5rc3RhdGlvbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9saW5rc3RhdGlvbi5jCmluZGV4IDJjYTdiZTYuLjI0NGY5OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbGlua3N0YXRpb24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2xpbmtzdGF0aW9uLmMKQEAgLTEyLDcgKzEyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CkBAIC0yMiwzOSArMjEsNiBAQAogCiAjaW5jbHVkZSAibXBjMTB4LmgiCiAKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBsaW5rc3RhdGlvbl9waHlzbWFwX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lICAgPSAibXRkX2Zpcm1pbWciLAotCQkub2Zmc2V0ID0gMHgwMDAwMDAsCi0JCS5zaXplICAgPSAweDMwMDAwMCwKLQl9LAotCXsKLQkJLm5hbWUgICA9ICJtdGRfYm9vdGNvZGUiLAotCQkub2Zmc2V0ID0gMHgzMDAwMDAsCi0JCS5zaXplICAgPSAweDA3MDAwMCwKLQl9LAotCXsKLQkJLm5hbWUgICA9ICJtdGRfc3RhdHVzIiwKLQkJLm9mZnNldCA9IDB4MzcwMDAwLAotCQkuc2l6ZSAgID0gMHgwMTAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lICAgPSAibXRkX2NvbmYiLAotCQkub2Zmc2V0ID0gMHgzODAwMDAsCi0JCS5zaXplICAgPSAweDA4MDAwMCwKLQl9LAotCXsKLQkJLm5hbWUgICA9ICJtdGRfYWxsZmxhc2giLAotCQkub2Zmc2V0ID0gMHgwMDAwMDAsCi0JCS5zaXplICAgPSAweDQwMDAwMCwKLQl9LAotCXsKLQkJLm5hbWUgICA9ICJtdGRfZGF0YSIsCi0JCS5vZmZzZXQgPSAweDMxMDAwMCwKLQkJLnNpemUgICA9IDB4MGYwMDAwLAotCX0sCi19OwotCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKQEAgLTk5LDEwICs2NSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbGlua3N0YXRpb25fc2V0dXBfYXJjaCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0jaWZkZWYgQ09ORklHX01URF9QSFlTTUFQCi0JcGh5c21hcF9zZXRfcGFydGl0aW9ucyhsaW5rc3RhdGlvbl9waHlzbWFwX3BhcnRpdGlvbnMsCi0JCQkgICAgICAgQVJSQVlfU0laRShsaW5rc3RhdGlvbl9waHlzbWFwX3BhcnRpdGlvbnMpKTsKLSNlbmRpZgogCiAJLyogTG9va3VwIFBDSSBob3N0IGJyaWRnZXMgKi8KIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAibXBjMTB4LXBjaSIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3N0b3JjZW50ZXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvc3RvcmNlbnRlci5jCmluZGV4IDg4NjRlNDguLjYxMzA3MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvc3RvcmNlbnRlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvc3RvcmNlbnRlci5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMjYsMzIgKzI1LDYgQEAKICNpbmNsdWRlICJtcGMxMHguaCIKIAogCi0jaWZkZWYgQ09ORklHX01URF9QSFlTTUFQCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc3RvcmNlbnRlcl9waHlzbWFwX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lICAgPSAia2VybmVsIiwKLQkJLm9mZnNldCA9IDB4MDAwMDAwLAotCQkuc2l6ZSAgID0gMHgxNzAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lICAgPSAicm9vdGZzIiwKLQkJLm9mZnNldCA9IDB4MTcwMDAwLAotCQkuc2l6ZSAgID0gMHg1OTAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lICAgPSAidWJvb3QiLAotCQkub2Zmc2V0ID0gMHg3MDAwMDAsCi0JCS5zaXplICAgPSAweDA0MDAwMCwKLQl9LAotCXsKLQkJLm5hbWUgICA9ICJjb25maWciLAotCQkub2Zmc2V0ID0gMHg3NDAwMDAsCi0JCS5zaXplICAgPSAweDBjMDAwMCwKLQl9LAotfTsKLSNlbmRpZgotCi0KIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3RvcmNlbnRlcl9vZl9idXNbXSA9IHsKIAl7IC5uYW1lID0gInNvYyIsIH0sCiAJe30sCkBAIC05NiwxMSArNjksNiBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKLSNpZmRlZiBDT05GSUdfTVREX1BIWVNNQVAKLQlwaHlzbWFwX3NldF9wYXJ0aXRpb25zKHN0b3JjZW50ZXJfcGh5c21hcF9wYXJ0aXRpb25zLAotCQkJICAgICAgIEFSUkFZX1NJWkUoc3RvcmNlbnRlcl9waHlzbWFwX3BhcnRpdGlvbnMpKTsKLSNlbmRpZgotCiAJLyogTG9va3VwIFBDSSBob3N0IGJyaWRnZXMgKi8KIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAibXBjMTB4LXBjaSIpCiAJCXN0b3JjZW50ZXJfYWRkX2JyaWRnZShucCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZwppbmRleCA5MjBjZjdhLi43NDBlZjU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKQEAgLTEyOCw2ICsxMjgsMTMgQEAKIAkgIGJlIGRpc2FibGVkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHVzaW5nICJwczNmbGFzaD1vZmYiLCB0bwogCSAgbm90IGFsbG9jYXRlIHRoaXMgZml4ZWQgYnVmZmVyLgogCitjb25maWcgUFMzX1ZSQU0KKwl0cmlzdGF0ZSAiUFMzIFZpZGVvIFJBTSBTdG9yYWdlIERyaXZlciIKKwlkZXBlbmRzIG9uIEZCX1BTMz15ICYmIEJMT0NLICYmIG0KKwloZWxwCisJICBUaGlzIGRyaXZlciBhbGxvd3MgeW91IHRvIHVzZSBleGNlc3MgUFMzIHZpZGVvIFJBTSBhcyB2b2xhdGlsZQorCSAgc3RvcmFnZSBvciBzeXN0ZW0gc3dhcC4KKwogY29uZmlnIFBTM19MUE0KIAl0cmlzdGF0ZSAiUFMzIExvZ2ljYWwgUGVyZm9ybWFuY2UgTW9uaXRvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gUFBDX1BTMwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKaW5kZXggNjdkZTZiZjMuLmQyODFjYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotY29yZV9pbml0Y2FsbChwczNfbW1fYWRkX21lbW9yeSk7CitkZXZpY2VfaW5pdGNhbGwocHMzX21tX2FkZF9tZW1vcnkpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogZG1hIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwppbmRleCA1ODMxMWE4Li5hNzA1ZmZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyICpkcnY7CiAKIAlCVUdfT04oIWRldik7Ci0JcHJfZGVidWcoIiAtPiAlczolZDogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgX2Rldi0+YnVzX2lkKTsKKwlkZXZfZGJnKF9kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCWRydiA9IHBzM19zeXN0ZW1fYnVzX2Rldl90b19zeXN0ZW1fYnVzX2RydihkZXYpOwogCUJVR19PTighZHJ2KTsKQEAgLTM5OCw3ICszOTgsNyBAQAogCXN0cnVjdCBwczNfc3lzdGVtX2J1c19kcml2ZXIgKmRydjsKIAogCUJVR19PTighZGV2KTsKLQlwcl9kZWJ1ZygiIC0+ICVzOiVkOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBfZGV2LT5idXNfaWQpOworCWRldl9kYmcoX2RldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCiAJZHJ2ID0gcHMzX3N5c3RlbV9idXNfZGV2X3RvX3N5c3RlbV9idXNfZHJ2KGRldik7CiAJQlVHX09OKCFkcnYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwppbmRleCA3N2ZhZTVmLi41NTU4ZDkzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwpAQCAtMjA0LDYgKzIwNCwyMyBAQAogewogCXUzMiBtYSwgcGNpbGEsIHBjaWhhOwogCisJLyogSGFjayB3YXJuaW5nICEgVGhlICJvbGQiIFBDSSAyLnggY2VsbCBvbmx5IGxldCB1cyBjb25maWd1cmUgdGhlIGxvdworCSAqIDMyLWJpdCBvZiBpbmNvbWluZyBQTEIgYWRkcmVzc2VzLiBUaGUgdG9wIDQgYml0cyBvZiB0aGUgMzYtYml0CisJICogYWRkcmVzcyBhcmUgYWN0dWFsbHkgaGFyZCB3aXJlZCB0byBhIHZhbHVlIHRoYXQgYXBwZWFycyB0byBkZXBlbmQKKwkgKiBvbiB0aGUgc3BlY2lmaWMgU29DLiBGb3IgZXhhbXBsZSwgaXQncyAwIG9uIDQ0MEVQIGFuZCAxIG9uIDQ0MEVQeC4KKwkgKgorCSAqIFRoZSB0cmljayBoZXJlIGlzIHdlIGp1c3QgY3JvcCB0aG9zZSB0b3AgYml0cyBhbmQgaWdub3JlIHRoZW0gd2hlbgorCSAqIHByb2dyYW1taW5nIHRoZSBjaGlwLiBUaGF0IG1lYW5zIHRoZSBkZXZpY2UtdHJlZSBoYXMgdG8gYmUgcmlnaHQKKwkgKiBmb3IgdGhlIHNwZWNpZmljIHBhcnQgdXNlZCAod2UgZG9uJ3QgcHJpbnQgYSB3YXJuaW5nIGlmIGl0J3Mgd3JvbmcKKwkgKiBidXQgb24gdGhlIG90aGVyIGhhbmQsIHlvdSdsbCBjcmFzaCBxdWlja2x5IGVub3VnaCksIGJ1dCBhdCBsZWFzdAorCSAqIHRoaXMgY29kZSBzaG91bGQgd29yayB3aGF0ZXZlciB0aGUgaGFyZCBjb2RlZCB2YWx1ZSBpcworCSAqLworCXBsYl9hZGRyICY9IDB4ZmZmZmZmZmZ1bGw7CisKKwkvKiBOb3RlOiBEdWUgdG8gdGhlIGFib3ZlIGhhY2ssIHRoZSB0ZXN0IGJlbG93IGRvZXNuJ3QgYWN0dWFsbHkgdGVzdAorCSAqIGlmIHlvdSBhZGRyZXNzIGlzIGFib3ZlIDRHLCBidXQgaXQgdGVzdHMgdGhhdCBhZGRyZXNzIGFuZAorCSAqIChhZGRyZXNzICsgc2l6ZSkgYXJlIGJvdGggY29udGFpbmVkIGluIHRoZSBzYW1lIDRHCisJICovCiAJaWYgKChwbGJfYWRkciArIHNpemUpID4gMHhmZmZmZmZmZnVsbCB8fCAhaXNfcG93ZXJfb2ZfMihzaXplKSB8fAogCSAgICBzaXplIDwgMHgxMDAwIHx8IChwbGJfYWRkciAmIChzaXplIC0gMSkpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc291cmNlIG91dCBvZiByYW5nZVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggNmIwYTM1My4uMmE4YWY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTM0MywxMyArMzQzLDYgQEAKIAogY29tbWVudCAiSS9PIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIgogCi1jb25maWcgTUFDSENIS19XQVJOSU5HCi0JYm9vbCAiUHJvY2VzcyB3YXJuaW5nIG1hY2hpbmUgY2hlY2tzIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUgbWFjaGluZSBjaGVjayBoYW5kbGVyIG9uIElCTSBTLzM5MCBvcgotCSAgelNlcmllcyB0byBwcm9jZXNzIHdhcm5pbmcgbWFjaGluZSBjaGVja3MgKGUuZy4gb24gcG93ZXIgZmFpbHVyZXMpLgotCSAgSWYgdW5zdXJlLCBzYXkgIlkiLgotCiBjb25maWcgUURJTwogCXRyaXN0YXRlICJRRElPIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtNTIxLDcgKzUxNCw3IEBACiAKIGNvbmZpZyBBUFBMREFUQV9ORVRfU1VNCiAJdHJpc3RhdGUgIk1vbml0b3Igb3ZlcmFsbCBuZXR3b3JrIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFCisJZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFICYmIE5FVAogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgbmV0d29yayByZWxhdGVkIGRhdGEgdG8gdGhlIExpbnV4IC0gVk0gTW9uaXRvciBTdHJlYW0sCiAJICBjdXJyZW50bHkgdGhlcmUgaXMgb25seSBhIHRvdGFsIHN1bSBvZiBuZXR3b3JrIEkvTyBzdGF0aXN0aWNzLCBubwpAQCAtNTUyLDcgKzU0NSw3IEBACiAJICBidXQgaXMgaW5kZXBlbmRlbnQgb2YgaGFyZHdhcmUvbWljcm9jb2RlIHN1cHBvcnQuCiAKIGNvbmZpZyBaRkNQRFVNUAotCXRyaXN0YXRlICJ6ZmNwZHVtcCBzdXBwb3J0IgorCWJvb2wgInpmY3BkdW1wIHN1cHBvcnQiCiAJc2VsZWN0IFNNUAogCWRlZmF1bHQgbgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwppbmRleCBjNDJjZDg5Li42MTE4ODkwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCkBAIC01NTYsNyArNTU2LDcgQEAKIG1vZHVsZV9pbml0KGFlc19zMzkwX2luaXQpOwogbW9kdWxlX2V4aXQoYWVzX3MzOTBfZmluaSk7CiAKLU1PRFVMRV9BTElBUygiYWVzIik7CitNT0RVTEVfQUxJQVMoImFlcy1hbGwiKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWpuZGFlbCAoQUVTKSBDaXBoZXIgQWxnb3JpdGhtIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCmluZGV4IGVjYTcyNGQuLmI0OWMwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCkBAIC0yMDEsOCArMjAxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcm5nX2V4aXQodm9pZCkKIHsKIAkvKiB3aXBlIG1lICovCi0JbWVtc2V0KHAtPmJ1ZiwgMCwgcHJuZ19jaHVua19zaXplKTsKLQlrZnJlZShwLT5idWYpOworCWt6ZnJlZShwLT5idWYpOwogCWtmcmVlKHApOwogCiAJbWlzY19kZXJlZ2lzdGVyKCZwcm5nX2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEuaAppbmRleCAxY2VhZmE1Li5mNGU5ZGM3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKQEAgLTI5LDcgKzI5LDkgQEAKIAlpbnQgZnVuYzsJCS8qIEtJTUQgZnVuY3Rpb24gdG8gdXNlICovCiB9OwogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Ci12b2lkIHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpOworc3RydWN0IHNoYXNoX2Rlc2M7CisKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBzMzkwX3NoYV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKm91dCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKaW5kZXggYjNjYjVhOC4uZTg1YmEzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCkBAIC0yMywxNyArMjMsMTcgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KIAogI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKICNpbmNsdWRlICJzaGEuaCIKIAotc3RhdGljIHZvaWQgc2hhMV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTFfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTFfSDA7CiAJc2N0eC0+c3RhdGVbMV0gPSBTSEExX0gxOwpAQCAtNDIsMzQgKzQyLDM2IEBACiAJc2N0eC0+c3RhdGVbNF0gPSBTSEExX0g0OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGExIiwKLQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMS1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGExX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGExX2luaXQsCisJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCisJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQk9CSJzaGExIiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTEtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaGExX3MzOTBfaW5pdCh2b2lkKQogewogCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV8xKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGExX3MzOTBfZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoc2hhMV9zMzkwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCmluZGV4IDE5YzAzZmIuLmY5ZmVmYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKQEAgLTE2LDE3ICsxNiwxNyBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgInNoYS5oIgogCi1zdGF0aWMgdm9pZCBzaGEyNTZfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGEyNTZfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTI1Nl9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTI1Nl9IMTsKQEAgLTM4LDIyICszOCwyNCBAQAogCXNjdHgtPnN0YXRlWzddID0gU0hBMjU2X0g3OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMjU2OworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTI1NiIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEyNTYtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEyNTZfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTI1Nl9pbml0LAotCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIGFsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTI1Nl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGEyNTZfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTI1NiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGEyNTYtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgc2hhMjU2X3MzOTBfaW5pdCh2b2lkKQpAQCAtNjEsMTIgKzYzLDEyIEBACiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzI1NikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGEyNTZfczM5MF9maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOwogfQogCiBtb2R1bGVfaW5pdChzaGEyNTZfczM5MF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwppbmRleCAyM2M3ODYxLi44MzE5MmJmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCkBAIC0xMiwxNiArMTIsMTYgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi1zdGF0aWMgdm9pZCBzaGE1MTJfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGE1MTJfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzBdID0gMHg2YTA5ZTY2N2YzYmNjOTA4VUxMOwogCSooX191NjQgKikmY3R4LT5zdGF0ZVsyXSA9IDB4YmI2N2FlODU4NGNhYTczYlVMTDsKQEAgLTMzLDI5ICszMywzMSBAQAogCSooX191NjQgKikmY3R4LT5zdGF0ZVsxNF0gPSAweDViZTBjZDE5MTM3ZTIxNzlVTEw7CiAJY3R4LT5jb3VudCA9IDA7CiAJY3R4LT5mdW5jID0gS0lNRF9TSEFfNTEyOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGE1MTJfYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGE1MTIiLAotCS5jcmFfZHJpdmVyX25hbWUgPQkic2hhNTEyLXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAotCS5jcmFfYmxvY2tzaXplCT0JU0hBNTEyX0JMT0NLX1NJWkUsCi0JLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAotCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CT0JTElTVF9IRUFEX0lOSVQoc2hhNTEyX2FsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEE1MTJfRElHRVNUX1NJWkUsCi0JLmRpYV9pbml0CT0Jc2hhNTEyX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgc2hhNTEyX2FsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTUxMl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGE1MTJfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTUxMiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGE1MTItczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTUxMl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIE1PRFVMRV9BTElBUygic2hhNTEyIik7CiAKLXN0YXRpYyB2b2lkIHNoYTM4NF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTM4NF9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMF0gPSAweGNiYmI5ZDVkYzEwNTllZDhVTEw7CiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzJdID0gMHg2MjlhMjkyYTM2N2NkNTA3VUxMOwpAQCAtNjcsMjIgKzY5LDI1IEBACiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzE0XSA9IDB4NDdiNTQ4MWRiZWZhNGZhNFVMTDsKIAljdHgtPmNvdW50ID0gMDsKIAljdHgtPmZ1bmMgPSBLSU1EX1NIQV81MTI7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTM4NF9hbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTM4NCIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEzODQtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEzODRfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChzaGEzODRfYWxnLmNyYV9saXN0KSwKLQkuY3JhX3UJCT0JeyAuZGlnZXN0ID0gewotCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTM4NF9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGEzODRfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGEzODRfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTM4NF9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhMzg0IiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTM4NC1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMzg0X0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBNT0RVTEVfQUxJQVMoInNoYTM4NCIpOwpAQCAtOTMsMTggKzk4LDE4IEBACiAKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfNTEyKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZykpIDwgMCkKKwlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZykpIDwgMCkKIAkJZ290byBvdXQ7Ci0JaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKSkgPCAwKQotCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOworCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKSkgPCAwKQorCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZyk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMzg0X2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTUxMl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IDlkNmViOGMuLjc5MDNlYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0xMywxNCArMTMsMTQgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXVuc2lnbmVkIGludCBpbmRleDsKIAlpbnQgcmV0OwogCkBAIC01MSwxMyArNTEsMTUgQEAKIHN0b3JlOgogCWlmIChsZW4pCiAJCW1lbWNweShjdHgtPmJ1ZiArIGluZGV4ICwgZGF0YSwgbGVuKTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9zaGFfdXBkYXRlKTsKIAotdm9pZCBzMzkwX3NoYV9maW5hbChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0KQoraW50IHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXU2NCBiaXRzOwogCXVuc2lnbmVkIGludCBpbmRleCwgZW5kLCBwbGVuOwogCWludCByZXQ7CkBAIC04Nyw5ICs4OSwxMSBAQAogCUJVR19PTihyZXQgIT0gZW5kKTsKIAogCS8qIGNvcHkgZGlnZXN0IHRvIG91dCAqLwotCW1lbWNweShvdXQsIGN0eC0+c3RhdGUsIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoY3J5cHRvX2hhc2hfY2FzdCh0Zm0pKSk7CisJbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUoZGVzYy0+dGZtKSk7CiAJLyogd2lwZSBjb250ZXh0ICovCiAJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mICpjdHgpOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV9maW5hbCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA4ZTkyNDNhLi5iMzA2MDZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiB3aXRoIG9wZXJhdGlvbiBvZiB0aGUgZm9ybSAic2V0X2JpdChiaXRuciwgZmxhZ3MpIi4KICAqLwogCi0vKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9TMzkwL2tlcm5lbC9iaXRtYXAuUyAqLworLyogYml0bWFwIHRhYmxlcyBmcm9tIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMgKi8KIGV4dGVybiBjb25zdCBjaGFyIF9vaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF9uaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF96Yl9maW5kbWFwW107CkBAIC01MjUsMTYgKzUyNSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZ6X3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAweGZmZmZmZmZmKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikpIHsKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikgewogCQl3b3JkID4+PSAxNjsKIAkJbnIgKz0gMTY7CiAJfQotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmKSA9PSAweGZmKSkgeworCWlmICgod29yZCAmIDB4ZmYpID09IDB4ZmYpIHsKIAkJd29yZCA+Pj0gODsKIAkJbnIgKz0gODsKIAl9CkBAIC01NDksMTYgKzU0OSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZzX3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAwKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmKSA9PSAwKSB7CiAJCXdvcmQgPj49IDE2OwogCQluciArPSAxNjsKIAl9Ci0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMCkgewogCQl3b3JkID4+PSA4OwogCQluciArPSA4OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCmluZGV4IDUyMTcyNjQuLjk1YjBmN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApAQCAtMTQ1LDcgKzE0NSw3IEBACiAJdmFsdWUtPnR2X3VzZWMgPSBycC5zdWJyZWcuZXZlbiAvIDQwOTY7CiAJdmFsdWUtPnR2X3NlYyA9IHJwLnN1YnJlZy5vZGQ7CiAjZWxzZQotCXZhbHVlLT50dl91c2VjID0gY3B1dGltZSAlIDQwOTYwMDAwMDBVTEw7CisJdmFsdWUtPnR2X3VzZWMgPSAoY3B1dGltZSAlIDQwOTYwMDAwMDBVTEwpIC8gNDA5NjsKIAl2YWx1ZS0+dHZfc2VjID0gY3B1dGltZSAvIDQwOTYwMDAwMDBVTEw7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg1YTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgIERhdGEgZGVmaW5pdGlvbnMgZm9yIGNoYW5uZWwgcmVwb3J0IHByb2Nlc3NpbmcKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9DUldfSAorI2RlZmluZSBfQVNNX1MzOTBfQ1JXX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBDaGFubmVsIFJlcG9ydCBXb3JkCisgKi8KK3N0cnVjdCBjcncgeworCV9fdTMyIHJlczEgOiAgMTsgICAvKiByZXNlcnZlZCB6ZXJvICovCisJX191MzIgc2xjdCA6ICAxOyAgIC8qIHNvbGljaXRlZCAqLworCV9fdTMyIG9mbHcgOiAgMTsgICAvKiBvdmVyZmxvdyAqLworCV9fdTMyIGNobiAgOiAgMTsgICAvKiBjaGFpbmVkICovCisJX191MzIgcnNjICA6ICA0OyAgIC8qIHJlcG9ydGluZyBzb3VyY2UgY29kZSAqLworCV9fdTMyIGFuYyAgOiAgMTsgICAvKiBhbmNpbGxhcnkgcmVwb3J0ICovCisJX191MzIgcmVzMiA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KKwlfX3UzMiBlcmMgIDogIDY7ICAgLyogZXJyb3ItcmVjb3ZlcnkgY29kZSAqLworCV9fdTMyIHJzaWQgOiAxNjsgICAvKiByZXBvcnRpbmctc291cmNlIElEICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordHlwZWRlZiB2b2lkICgqY3J3X2hhbmRsZXJfdCkoc3RydWN0IGNydyAqLCBzdHJ1Y3QgY3J3ICosIGludCk7CisKK2V4dGVybiBpbnQgY3J3X3JlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKTsKK2V4dGVybiB2b2lkIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYyk7CitleHRlcm4gdm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpOworCisjZGVmaW5lIE5SX1JTQ1MgMTYKKworI2RlZmluZSBDUldfUlNDX01PTklUT1IgIDB4MiAgLyogbW9uaXRvcmluZyBmYWNpbGl0eSAqLworI2RlZmluZSBDUldfUlNDX1NDSAkgMHgzICAvKiBzdWJjaGFubmVsICovCisjZGVmaW5lIENSV19SU0NfQ1BBVEgJIDB4NCAgLyogY2hhbm5lbCBwYXRoICovCisjZGVmaW5lIENSV19SU0NfQ09ORklHCSAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KKyNkZWZpbmUgQ1JXX1JTQ19DU1MJIDB4QiAgLyogY2hhbm5lbCBzdWJzeXN0ZW0gKi8KKworI2RlZmluZSBDUldfRVJDX0VWRU5UCSAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KKyNkZWZpbmUgQ1JXX0VSQ19BVkFJTAkgMHgwMSAvKiBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ1JXX0VSQ19JTklUCSAweDAyIC8qIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSUk9SCSAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLworI2RlZmluZSBDUldfRVJDX0lQQVJNCSAweDA0IC8qIGluc3RhbGxlZCBwYXJtIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSTQkgMHgwNSAvKiB0ZXJtaW5hbCAqLworI2RlZmluZSBDUldfRVJDX1BFUlJOCSAweDA2IC8qIHBlcm0uIGVycm9yLCBmYWMuIG5vdCBpbml0ICovCisjZGVmaW5lIENSV19FUkNfUEVSUkkJIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19QTU9ECSAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncpCit7CisJaW50IGNjb2RlOworCisJYXNtIHZvbGF0aWxlKAorCQkiCXN0Y3J3CTAoJTIpXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCisJCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKKwkJOiAiYSIgKHBjcncpCisJCTogImNjIiApOworCXJldHVybiBjY29kZTsKK30KKworI2VuZGlmIC8qIF9BU01fUzM5MF9DUldfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKaW5kZXggZTJkYjZmMS4uMjE4YmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCkBAIC0xNjIsMTUgKzE2MiwxNSBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgZGFzZF9pb19ucl9yZXFbMzJdOyAvKiBoaXN0b2dyYW0gb2YgIyBvZiByZXF1ZXN0cyBpbiBjaGFucSAqLwogfSBkYXNkX3Byb2ZpbGVfaW5mb190OwogCi0vKiAKKy8qCiAgKiBzdHJ1Y3QgZm9ybWF0X2RhdGFfdAogICogcmVwcmVzZW50cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8gZm9ybWF0IGEgZGFzZAogICovCiB0eXBlZGVmIHN0cnVjdCBmb3JtYXRfZGF0YV90IHsKLQlpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLwotCWludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLwotCWludCBibGtzaXplOyAgICAvKiBzZWN0b3JzaXplICovCi0gICAgICAgIGludCBpbnRlbnNpdHk7ICAKKwl1bnNpZ25lZCBpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLworCXVuc2lnbmVkIGludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLworCXVuc2lnbmVkIGludCBibGtzaXplOwkgLyogc2VjdG9yc2l6ZSAqLworCXVuc2lnbmVkIGludCBpbnRlbnNpdHk7CiB9IGZvcm1hdF9kYXRhX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCmluZGV4IGU4MmMxMGUuLmFhZTI3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCkBAIC00NCwyNCArNDQsMTggQEAKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpZGFsIHdvcmRzIG5lZWRlZCBmb3IgYW4gYWRkcmVzcy9sZW5ndGggcGFpci4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWlkYWxfbnJfd29yZHModm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpZGFsX25yX3dvcmRzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotI2lmZGVmIF9fczM5MHhfXwotCWlmIChpZGFsX2lzX25lZWRlZCh2YWRkciwgbGVuZ3RoKSkKLQkJcmV0dXJuICgoX19wYSh2YWRkcikgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsgCi0JCQkoSURBX0JMT0NLX1NJWkUtMSkpID4+IElEQV9TSVpFX0xPRzsKLSNlbmRpZgotCXJldHVybiAwOworCXJldHVybiAoKF9fcGEodmFkZHIpICYgKElEQV9CTE9DS19TSVpFLTEpKSArIGxlbmd0aCArCisJCShJREFfQkxPQ0tfU0laRS0xKSkgPj4gSURBX1NJWkVfTE9HOwogfQogCiAvKgogICogQ3JlYXRlIHRoZSBsaXN0IG9mIGlkYWwgd29yZHMgZm9yIGFuIGFkZHJlc3MvbGVuZ3RoIHBhaXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqCi1pZGFsX2NyZWF0ZV93b3Jkcyh1bnNpZ25lZCBsb25nICppZGF3cywgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmlkYWxfY3JlYXRlX3dvcmRzKHVuc2lnbmVkIGxvbmcgKmlkYXdzLAorCQkJCQkgICAgICAgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgX19zMzkweF9fCiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKIAl1bnNpZ25lZCBpbnQgY2lkYXc7CiAKQEAgLTc0LDcgKzY4LDYgQEAKIAkJcGFkZHIgKz0gSURBX0JMT0NLX1NJWkU7CiAJCSppZGF3cysrID0gcGFkZHI7CiAJfQotI2VuZGlmCiAJcmV0dXJuIGlkYXdzOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggZTFmNTQ2NS4uMGIyZjgyOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtNDIsNCArNDIsMTEgQEAKIAlfX3U2NCBmcHJzWzE2XTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDNjNTVlNDEuLmM2ZTY3NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yMSw5ICsyMSw2IEBACiAvKiBtZW1vcnkgc2xvdHMgdGhhdCBkb2VzIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSAqLwogI2RlZmluZSBLVk1fUFJJVkFURV9NRU1fU0xPVFMgNAogCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLX07Ci0KIHN0cnVjdCBzY2FfZW50cnkgewogCWF0b21pY190IHNjbjsKIAlfX3U2NAlyZXNlcnZlZDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCmluZGV4IGYzNzIwZGUuLmIzNDlmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaApAQCAtMTEsMTI5ICsxMSwxMTggQEAKICNpZm5kZWYgX0FTTV9TMzkwX0xPV0NPUkVfSAogI2RlZmluZSBfQVNNX1MzOTBfTE9XQ09SRV9ICiAKLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIF9fTENfRVhUX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMTgKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAyMAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDI4Ci0jZGVmaW5lIF9fTENfTUNLX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMzAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAzOAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDU4Ci0jZGVmaW5lIF9fTENfU1ZDX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNjAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2OAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDcwCi0jZGVmaW5lIF9fTENfSU9fTkVXX1BTVyAgICAgICAgICAgICAgICAgMHgwNzgKLSNlbHNlIC8qICFfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxMzAKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNDAKLSNkZWZpbmUgX19MQ19QR01fT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNTAKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNjAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAxNzAKLSNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYjAKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYzAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZDAKLSNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZTAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDAxZjAKLSNlbmRpZiAvKiAhX19zMzkweF9fICovCisjZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDAxNAorI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMJCQkweDAwODAKKyNkZWZpbmUgX19MQ19DUFVfQUREUkVTUwkJMHgwMDg0CisjZGVmaW5lIF9fTENfRVhUX0lOVF9DT0RFCQkweDAwODYKIAotI2RlZmluZSBfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSCQkweDAxNAotI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMgICAgICAgICAgICAgICAgIDB4MDgwCi0jZGVmaW5lIF9fTENfQ1BVX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwODQKLSNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4NgorI2RlZmluZSBfX0xDX1NWQ19JTEMJCQkweDAwODgKKyNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUJCTB4MDA4YQorI2RlZmluZSBfX0xDX1BHTV9JTEMJCQkweDAwOGMKKyNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUJCTB4MDA4ZQogCi0jZGVmaW5lIF9fTENfU1ZDX0lMQyAgICAgICAgICAgICAgICAgICAgMHgwODgKLSNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4QQotI2RlZmluZSBfX0xDX1BHTV9JTEMgICAgICAgICAgICAgICAgICAgIDB4MDhDCi0jZGVmaW5lIF9fTENfUEdNX0lOVF9DT0RFICAgICAgICAgICAgICAgMHgwOEUKKyNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDAwOTYKKyNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwMDk4CisjZGVmaW5lIF9fTENfUEVSX0FDQ0VTU19JRAkJMHgwMGExCisjZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MDBhMwogCi0jZGVmaW5lIF9fTENfUEVSX0FUTUlECQkJMHgwOTYKLSNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwOTgKLSNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDBBMQotI2RlZmluZSBfX0xDX0FSX01PREVfSUQJCQkweDBBMworI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQJCTB4MDBiOAorI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIJCTB4MDBiYQorI2RlZmluZSBfX0xDX0lPX0lOVF9QQVJNCQkweDAwYmMKKyNkZWZpbmUgX19MQ19JT19JTlRfV09SRAkJMHgwMGMwCisjZGVmaW5lIF9fTENfTUNDS19DT0RFCQkJMHgwMGU4CiAKLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lEICAgICAgICAgICAgICAweDBCOAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIgICAgICAgICAgICAgIDB4MEJBCi0jZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0gICAgICAgICAgICAgICAgMHgwQkMKLSNkZWZpbmUgX19MQ19JT19JTlRfV09SRCAgICAgICAgICAgICAgICAweDBDMAotI2RlZmluZSBfX0xDX01DQ0tfQ09ERSAgICAgICAgICAgICAgICAgIDB4MEU4Ci0KLSNkZWZpbmUgX19MQ19MQVNUX0JSRUFLIAkJMHgxMTAKLQotI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cgICAgICAgICAgICAgICAgIDB4MjAwCi0KLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEgICAgICAgICAgICAgICAgICAweEMwMAorI2RlZmluZSBfX0xDX0RVTVBfUkVJUEwJCQkweDBlMDAKIAogI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIwOAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjQ4Ci0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjU4Ci0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI2OAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4Mjg4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhDNDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhDNDQKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEM0OAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEM0QwotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4QzUwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhDNTQKLSNkZWZpbmUgX19MQ19DUFVJRCAgICAgICAgICAgICAgICAgICAgICAweEM2MAotI2RlZmluZSBfX0xDX0NQVUFERFIgICAgICAgICAgICAgICAgICAgIDB4QzY4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhDN0MKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhDOTAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweEM5OAorI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAwMTgKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMDIwCisjZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDAyOAorI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAwMzAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMDM4CisjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDA1OAorI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAwNjAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMDY4CisjZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDA3MAorI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAwNzgKKyNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjQwCisjZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyNDgKKyNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyNTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMjU4CisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDI2MAorI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyNjgKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDI3MAorI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyNzgKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMjgwCisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDI4OAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyOTAKKyNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMjk0CisjZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyOTgKKyNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMjljCisjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDJhMAorI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAyYTQKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAyYTgKKyNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMmFjCisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAyYzgKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzMDAKKyNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgwMDgwCisjZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDAwZDgKKyNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDAwZTAKKyNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDAxMDAKKyNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDAxMDgKKyNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MDEyMAorI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MDE2MAorI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MDE4MAorI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgwMWMwCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIxMAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjU4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjY4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI4MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4OAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4MjkwCi0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhENDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhENDgKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ1MAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEQ1OAotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4RDYwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhENjgKLSNkZWZpbmUgX19MQ19DUFVJRAkJCTB4RDgwCi0jZGVmaW5lIF9fTENfQ1BVQUREUgkJCTB4RDg4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhEQjgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhERDgKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweERFOAotI2RlZmluZSBfX0xDX1ZEU09fUEVSX0NQVQkJMHhFMzgKLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQotI2RlZmluZSBfX0xDX1BBU1RFCQkJMHhFNDAKLQotI2RlZmluZSBfX0xDX1BBTklDX01BR0lDCQkweEUwMAotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTSAgICAgICAgICAgICAweDA4MAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MEQ4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwRTAKLSNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEwMAotI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTA4Ci0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMjAKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDE2MAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTgwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxQzAKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MTFCOAorI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsJCQkweDAxMTAKKyNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVwkJMHgwMTMwCisjZGVmaW5lIF9fTENfU1ZDX09MRF9QU1cJCTB4MDE0MAorI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXCQkweDAxNTAKKyNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVwkJMHgwMTYwCisjZGVmaW5lIF9fTENfSU9fT0xEX1BTVwkJCTB4MDE3MAorI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAxYjAKKyNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMWMwCisjZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDFkMAorI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAxZTAKKyNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMWYwCisjZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCisjZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI4MAorI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjkwCisjZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMmEwCisjZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDJhOAorI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMmI4CisjZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyYzAKKyNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMmM4CisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDJkMAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyZDgKKyNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMmUwCisjZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDJlOAorI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMmYwCisjZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDJmOAorI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAzMDAKKyNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMzA4CisjZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMzEwCisjZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDMxOAorI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMzIwCisjZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMzQwCisjZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweDAzNTAKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzODAKKyNkZWZpbmUgX19MQ19QQVNURQkJCTB4MDNjMAorI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDExYjgKICNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDEyMDAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBICAgICAgICAgICAweDEyODAKKyNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDEyODAKICNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEzMDAKICNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDEzMTgKLSNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFDCisjZGVmaW5lIF9fTENfRlBfQ1JFR19TQVZFX0FSRUEJCTB4MTMxYwogI2RlZmluZSBfX0xDX1RPRFJFR19TQVZFX0FSRUEJCTB4MTMyNAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MTMyOAorI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgxMzI4CiAjZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgxMzMxCi0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzQwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzgwCisjZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDEzNDAKKyNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MTM4MAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMTk4LDIyMiArMTg3LDI0MCBAQAogc3RydWN0IF9sb3djb3JlCiB7CiAjaWZuZGVmIF9fczM5MHhfXwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgwMTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDAyMCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MDI4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgwMzAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDAzOCAqLwotCV9fdTggICAgICAgICBwYWQxWzB4NTgtMHg0MF07ICAgICAgICAgIC8qIDB4MDQwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX25ld19wc3c7ICAgICAgICAgLyogMHgwNTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX25ld19wc3c7ICAgICAgICAgICAgICAvKiAweDA2MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX25ld19wc3c7ICAgICAgICAgIC8qIDB4MDY4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfbmV3X3BzdzsgICAgICAgICAgICAgLyogMHgwNzAgKi8KLQlwc3dfdCAgICAgICAgaW9fbmV3X3BzdzsgICAgICAgICAgICAgICAvKiAweDA3OCAqLwotCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCi0JX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KLQlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLwotCV9fdTMyICAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MDkwICovCi0JX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KLQlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLwotCV9fdTMyICAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCi0JX191MzIgICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KLQlfX3U4ICAgICAgICAgZXhjX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMCAqLwotCV9fdTggICAgICAgICBwZXJfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGExICovCi0JX191OCAgICAgICAgIHBhZDJbMHhCOC0weEEyXTsgICAgICAgICAgLyogMHgwYTIgKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCi0JX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLwotCV9fdTgJICAgICBwYWQzWzB4YzgtMHhjNF07CSAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyCSAgICAgc3RmbF9mYWNfbGlzdDsJICAgICAgIC8qIDB4MGM4ICovCi0JX191OAkgICAgIHBhZDRbMHhkNC0weGNjXTsJICAgICAgIC8qIDB4MGNjICovCi0JX191MzIgICAgICAgIGV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOyAgLyogMHgwZDQgKi8KLQlfX3UzMiAgICAgICAgY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsgICAvKiAweDBkOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgIC8qIDB4MGUwICovCi0JX191MzIgICAgICAgIG1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07IC8qIDB4MGU4ICovCi0JX191OAkgICAgIHBhZDVbMHhmNC0weGYwXTsJICAgICAgIC8qIDB4MGYwICovCi0JX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KLQlfX3UzMiAgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLwotCV9fdTgJICAgICBwYWQ2WzB4MTAwLTB4ZmNdOwkgICAgICAgLyogMHgwZmMgKi8KLQlfX3UzMiAgICAgICAgc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsvKiAweDEwMCAqLwotCV9fdTgJICAgICBwYWQ3WzB4MTIwLTB4MTEwXTsgICAgICAgIC8qIDB4MTEwICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07LyogMHgxMjAgKi8KLQlfX3UzMiAgICAgICAgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOyAvKiAweDE2MCAqLwotCV9fdTMyICAgICAgICBncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgIC8qIDB4MTgwICovCi0JX191MzIgICAgICAgIGNyZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxYzAgKi8JCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDAwMCAqLworCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCisJcHN3X3QJZXh0ZXJuYWxfb2xkX3BzdzsJCS8qIDB4MDAxOCAqLworCXBzd190CXN2Y19vbGRfcHN3OwkJCS8qIDB4MDAyMCAqLworCXBzd190CXByb2dyYW1fb2xkX3BzdzsJCS8qIDB4MDAyOCAqLworCXBzd190CW1jY2tfb2xkX3BzdzsJCQkvKiAweDAwMzAgKi8KKwlwc3dfdAlpb19vbGRfcHN3OwkJCS8qIDB4MDAzOCAqLworCV9fdTgJcGFkXzB4MDA0MFsweDAwNTgtMHgwMDQwXTsJLyogMHgwMDQwICovCisJcHN3X3QJZXh0ZXJuYWxfbmV3X3BzdzsJCS8qIDB4MDA1OCAqLworCXBzd190CXN2Y19uZXdfcHN3OwkJCS8qIDB4MDA2MCAqLworCXBzd190CXByb2dyYW1fbmV3X3BzdzsJCS8qIDB4MDA2OCAqLworCXBzd190CW1jY2tfbmV3X3BzdzsJCQkvKiAweDAwNzAgKi8KKwlwc3dfdAlpb19uZXdfcHN3OwkJCS8qIDB4MDA3OCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMgl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwOTAgKi8KKwlfX3UxNgltb25fY2xhc3NfbnVtOwkJCS8qIDB4MDA5NCAqLworCV9fdTE2CXBlcl9wZXJjX2F0bWlkOwkJCS8qIDB4MDA5NiAqLworCV9fdTMyCXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTMyCW1vbml0b3JfY29kZTsJCQkvKiAweDAwOWMgKi8KKwlfX3U4CWV4Y19hY2Nlc3NfaWQ7CQkJLyogMHgwMGEwICovCisJX191OAlwZXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMSAqLworCV9fdTgJcGFkXzB4MDBhMlsweDAwYjgtMHgwMGEyXTsJLyogMHgwMGEyICovCisJX191MTYJc3ViY2hhbm5lbF9pZDsJCQkvKiAweDAwYjggKi8KKwlfX3UxNglzdWJjaGFubmVsX25yOwkJCS8qIDB4MDBiYSAqLworCV9fdTMyCWlvX2ludF9wYXJtOwkJCS8qIDB4MDBiYyAqLworCV9fdTMyCWlvX2ludF93b3JkOwkJCS8qIDB4MDBjMCAqLworCV9fdTgJcGFkXzB4MDBjNFsweDAwYzgtMHgwMGM0XTsJLyogMHgwMGM0ICovCisJX191MzIJc3RmbF9mYWNfbGlzdDsJCQkvKiAweDAwYzggKi8KKwlfX3U4CXBhZF8weDAwY2NbMHgwMGQ0LTB4MDBjY107CS8qIDB4MDBjYyAqLworCV9fdTMyCWV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwkvKiAweDAwZDQgKi8KKwlfX3UzMgljcHVfdGltZXJfc2F2ZV9hcmVhWzJdOwkJLyogMHgwMGQ4ICovCisJX191MzIJY2xvY2tfY29tcF9zYXZlX2FyZWFbMl07CS8qIDB4MDBlMCAqLworCV9fdTMyCW1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07CS8qIDB4MDBlOCAqLworCV9fdTgJcGFkXzB4MDBmMFsweDAwZjQtMHgwMGYwXTsJLyogMHgwMGYwICovCisJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KKwlfX3UzMglmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMGZjWzB4MDEwMC0weDAwZmNdOwkvKiAweDAwZmMgKi8KKwlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDAxMDAgKi8KKwlfX3U4CXBhZF8weDAxMTBbMHgwMTIwLTB4MDExMF07CS8qIDB4MDExMCAqLwogCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMDggKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI0OCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjUwICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNTggKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2MCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNjggKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODAgKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyODggKi8KLQlfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDI5MF07ICAgICAgICAvKiAweDI5MCAqLworCS8qIENQVSByZWdpc3RlciBzYXZlIGFyZWE6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgwMTIwICovCisJX191MzIJZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOwkvKiAweDAxNjAgKi8KKwlfX3UzMglncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MDE4MCAqLworCV9fdTMyCWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDAxYzAgKi8KIAotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCi0JX191MzIgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KLQlfX3UzMiAgICAgICAga2VybmVsX3N0YWNrOyAgICAgICAgICAgICAvKiAweGM0MCAqLwotCV9fdTMyICAgICAgICB0aHJlYWRfaW5mbzsgICAgICAgICAgICAgIC8qIDB4YzQ0ICovCi0JX191MzIgICAgICAgIGFzeW5jX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNDggKi8KLQlfX3UzMiAgICAgICAga2VybmVsX2FzY2U7ICAgICAgICAgICAgICAvKiAweGM0YyAqLwotCV9fdTMyICAgICAgICB1c2VyX2FzY2U7ICAgICAgICAgICAgICAgIC8qIDB4YzUwICovCi0JX191MzIgICAgICAgIHBhbmljX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNTQgKi8KLQlfX3UzMgkgICAgIHVzZXJfZXhlY19hc2NlOwkgICAgICAgLyogMHhjNTggKi8KLQlfX3U4CSAgICAgcGFkMTBbMHhjNjAtMHhjNWNdOyAgICAgICAvKiAweGM1YyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgc3RhcnQgKi8KLQlzdHJ1Y3QgICAgICAgY3B1aW5mb19TMzkwIGNwdV9kYXRhOyAgICAvKiAweGM2MCAqLwotCV9fdTMyICAgICAgICBpcGxfZGV2aWNlOyAgICAgICAgICAgICAgIC8qIDB4YzdjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKwkvKiBSZXR1cm4gcHN3cy4gKi8KKwlfX3UzMglzYXZlX2FyZWFbMTZdOwkJCS8qIDB4MDIwMCAqLworCXBzd190CXJldHVybl9wc3c7CQkJLyogMHgwMjQwICovCisJcHN3X3QJcmV0dXJuX21jY2tfcHN3OwkJLyogMHgwMjQ4ICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGM4MCAqLwotCV9fdTMyICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4Yzg4ICovCi0JX191MzIgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhjOGMgKi8KLQlfX3UzMiAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhjOTAgKi8KLQlfX3UzMiAgICAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhjOTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGM5OCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTFbMHhlMDAtMHhjYTBdOyAgICAgICAvKiAweGNhMCAqLworCS8qIENQVSB0aW1lIGFjY291bnRpbmcgdmFsdWVzICovCisJX191NjQJc3luY19lbnRlcl90aW1lcjsJCS8qIDB4MDI1MCAqLworCV9fdTY0CWFzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMjU4ICovCisJX191NjQJZXhpdF90aW1lcjsJCQkvKiAweDAyNjAgKi8KKwlfX3U2NAl1c2VyX3RpbWVyOwkJCS8qIDB4MDI2OCAqLworCV9fdTY0CXN5c3RlbV90aW1lcjsJCQkvKiAweDAyNzAgKi8KKwlfX3U2NAlzdGVhbF90aW1lcjsJCQkvKiAweDAyNzggKi8KKwlfX3U2NAlsYXN0X3VwZGF0ZV90aW1lcjsJCS8qIDB4MDI4MCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX2Nsb2NrOwkJLyogMHgwMjg4ICovCiAKLSAgICAgICAgLyogMHhlMDAgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIGR1bXAgdG9vbHMgKi8KLSAgICAgICAgLyogd2hldGhlciB0aGUga2VybmVsIGRpZWQgd2l0aCBwYW5pYygpIG9yIG5vdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgcGFuaWNfbWFnaWM7ICAgICAgICAgICAgICAvKiAweGUwMCAqLworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3UzMgljdXJyZW50X3Rhc2s7CQkJLyogMHgwMjkwICovCisJX191MzIJdGhyZWFkX2luZm87CQkJLyogMHgwMjk0ICovCisJX191MzIJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDI5OCAqLwogCi0gICAgICAgIC8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KLQlfX3U4ICAgICAgICAgcGFkMTJbMHgxMDAwLTB4ZTA0XTsgICAgICAvKiAweGUwNCAqLworCS8qIEludGVycnVwdCBhbmQgcGFuaWMgc3RhY2suICovCisJX191MzIJYXN5bmNfc3RhY2s7CQkJLyogMHgwMjljICovCisJX191MzIJcGFuaWNfc3RhY2s7CQkJLyogMHgwMmEwICovCisKKwkvKiBBZGRyZXNzIHNwYWNlIHBvaW50ZXIuICovCisJX191MzIJa2VybmVsX2FzY2U7CQkJLyogMHgwMmE0ICovCisJX191MzIJdXNlcl9hc2NlOwkJCS8qIDB4MDJhOCAqLworCV9fdTMyCXVzZXJfZXhlY19hc2NlOwkJCS8qIDB4MDJhYyAqLworCisJLyogU01QIGluZm8gYXJlYSAqLworCWNwdWlkX3QJY3B1X2lkOwkJCQkvKiAweDAyYjAgKi8KKwlfX3UzMgljcHVfbnI7CQkJCS8qIDB4MDJiOCAqLworCV9fdTMyCXNvZnRpcnFfcGVuZGluZzsJCS8qIDB4MDJiYyAqLworCV9fdTMyCXBlcmNwdV9vZmZzZXQ7CQkJLyogMHgwMmMwICovCisJX191MzIJZXh0X2NhbGxfZmFzdDsJCQkvKiAweDAyYzQgKi8KKwlfX3U2NAlpbnRfY2xvY2s7CQkJLyogMHgwMmM4ICovCisJX191NjQJY2xvY2tfY29tcGFyYXRvcjsJCS8qIDB4MDJkMCAqLworCV9fdTgJcGFkXzB4MDJkOFsweDAzMDAtMHgwMmQ4XTsJLyogMHgwMmQ4ICovCisKKwkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgKi8KKwlfX3U4CWlyYls2NF07CQkJLyogMHgwMzAwICovCisKKwlfX3U4CXBhZF8weDA0MDBbMHgwZTAwLTB4MDQwMF07CS8qIDB4MDQwMCAqLworCisJLyoKKwkgKiAweGUwMCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgSVBMIFBhcmFtZXRlciBJbmZvcm1hdGlvbgorCSAqIGJsb2NrLiBEdW1wIHRvb2xzIG5lZWQgSVBJQiBmb3IgSVBMIGFmdGVyIGR1bXAuCisJICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW55IGZpZWxkcyBpbiAweDBlMDAtMHgwZjAwCisJICovCisJX191MzIJaXBpYjsJCQkJLyogMHgwZTAwICovCisJX191MzIJaXBpYl9jaGVja3N1bTsJCQkvKiAweDBlMDQgKi8KKworCS8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KKwlfX3U4CXBhZF8weDBlMDhbMHgxMDAwLTB4MGUwOF07CS8qIDB4MGUwOCAqLwogI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlfX3UzMiAgICAgICAgY2N3MVsyXTsgICAgICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JX191OCAgICAgICAgIHBhZDFbMHg4MC0weDE4XTsgICAgICAgICAgLyogMHgwMTggKi8KLQlfX3UzMiAgICAgICAgZXh0X3BhcmFtczsgICAgICAgICAgICAgICAvKiAweDA4MCAqLwotCV9fdTE2ICAgICAgICBjcHVfYWRkcjsgICAgICAgICAgICAgICAgIC8qIDB4MDg0ICovCi0JX191MTYgICAgICAgIGV4dF9pbnRfY29kZTsgICAgICAgICAgICAgLyogMHgwODYgKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwODggKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGEgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwOGMgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGUgKi8KLQlfX3UzMiAgICAgICAgZGF0YV9leGNfY29kZTsgICAgICAgICAgICAvKiAweDA5MCAqLwotCV9fdTE2ICAgICAgICBtb25fY2xhc3NfbnVtOyAgICAgICAgICAgIC8qIDB4MDk0ICovCi0JX191MTYgICAgICAgIHBlcl9wZXJjX2F0bWlkOyAgICAgICAgICAgLyogMHgwOTYgKi8KLQlhZGRyX3QgICAgICAgcGVyX2FkZHJlc3M7ICAgICAgICAgICAgICAvKiAweDA5OCAqLwotCV9fdTggICAgICAgICBleGNfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGEwICovCi0JX191OCAgICAgICAgIHBlcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTEgKi8KLQlfX3U4ICAgICAgICAgb3BfYWNjZXNzX2lkOyAgICAgICAgICAgICAvKiAweDBhMiAqLwotCV9fdTggICAgICAgICBhcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEzICovCi0JX191OCAgICAgICAgIHBhZDJbMHhBOC0weEE0XTsgICAgICAgICAgLyogMHgwYTQgKi8KLQlhZGRyX3QgICAgICAgdHJhbnNfZXhjX2NvZGU7ICAgICAgICAgICAvKiAweDBBMCAqLwotCWFkZHJfdCAgICAgICBtb25pdG9yX2NvZGU7ICAgICAgICAgICAgIC8qIDB4MDljICovCi0JX191MTYgICAgICAgIHN1YmNoYW5uZWxfaWQ7ICAgICAgICAgICAgLyogMHgwYjggKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9ucjsgICAgICAgICAgICAvKiAweDBiYSAqLwotCV9fdTMyICAgICAgICBpb19pbnRfcGFybTsgICAgICAgICAgICAgIC8qIDB4MGJjICovCi0JX191MzIgICAgICAgIGlvX2ludF93b3JkOyAgICAgICAgICAgICAgLyogMHgwYzAgKi8KLQlfX3U4ICAgICAgICAgcGFkM1sweGM4LTB4YzRdOyAgICAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyICAgICAgICBzdGZsX2ZhY19saXN0OyAgICAgICAgICAgIC8qIDB4MGM4ICovCi0JX191OCAgICAgICAgIHBhZDRbMHhlOC0weGNjXTsgICAgICAgICAgLyogMHgwY2MgKi8KLQlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KLQlfX3U4ICAgICAgICAgcGFkNVsweGY0LTB4ZjBdOyAgICAgICAgICAvKiAweDBmMCAqLwotCV9fdTMyICAgICAgICBleHRlcm5hbF9kYW1hZ2VfY29kZTsgICAgIC8qIDB4MGY0ICovCi0JYWRkcl90ICAgICAgIGZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOyAgLyogMHgwZjggKi8KLQlfX3U4ICAgICAgICAgcGFkNlsweDEyMC0weDEwMF07ICAgICAgICAvKiAweDEwMCAqLwotCXBzd190ICAgICAgICByZXN0YXJ0X29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTIwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgxMzAgKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDE0MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTUwICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgxNjAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDE3MCAqLwotCV9fdTggICAgICAgICBwYWQ3WzB4MWEwLTB4MTgwXTsgICAgICAgIC8qIDB4MTgwICovCi0JcHN3X3QgICAgICAgIHJlc3RhcnRfcHN3OyAgICAgICAgICAgICAgLyogMHgxYTAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfbmV3X3BzdzsgICAgICAgICAvKiAweDFiMCAqLwotCXBzd190ICAgICAgICBzdmNfbmV3X3BzdzsgICAgICAgICAgICAgIC8qIDB4MWMwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fbmV3X3BzdzsgICAgICAgICAgLyogMHgxZDAgKi8KLQlwc3dfdCAgICAgICAgbWNja19uZXdfcHN3OyAgICAgICAgICAgICAvKiAweDFlMCAqLwotCXBzd190ICAgICAgICBpb19uZXdfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MWYwICovCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMTAgKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI1MCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjU4ICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNjAgKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2OCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyODAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODggKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyOTAgKi8KLSAgICAgICAgX191OCAgICAgICAgIHBhZDhbMHhjMDAtMHgyYTBdOyAgICAgICAgLyogMHgyYTAgKi8KLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLwotCV9fdTY0ICAgICAgICBzYXZlX2FyZWFbMTZdOyAgICAgICAgICAgIC8qIDB4YzAwICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQ5WzB4ZDQwLTB4YzgwXTsgICAgICAgIC8qIDB4YzgwICovCi0gCV9fdTY0ICAgICAgICBrZXJuZWxfc3RhY2s7ICAgICAgICAgICAgIC8qIDB4ZDQwICovCi0JX191NjQgICAgICAgIHRocmVhZF9pbmZvOyAgICAgICAgICAgICAgLyogMHhkNDggKi8KLQlfX3U2NCAgICAgICAgYXN5bmNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ1MCAqLwotCV9fdTY0ICAgICAgICBrZXJuZWxfYXNjZTsgICAgICAgICAgICAgIC8qIDB4ZDU4ICovCi0JX191NjQgICAgICAgIHVzZXJfYXNjZTsgICAgICAgICAgICAgICAgLyogMHhkNjAgKi8KLQlfX3U2NCAgICAgICAgcGFuaWNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ2OCAqLwotCV9fdTY0CSAgICAgdXNlcl9leGVjX2FzY2U7CSAgICAgICAvKiAweGQ3MCAqLwotCV9fdTgJICAgICBwYWQxMFsweGQ4MC0weGQ3OF07ICAgICAgIC8qIDB4ZDc4ICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBzdGFydCAqLwotCXN0cnVjdCAgICAgICBjcHVpbmZvX1MzOTAgY3B1X2RhdGE7ICAgIC8qIDB4ZDgwICovCi0JX191MzIgICAgICAgIGlwbF9kZXZpY2U7ICAgICAgICAgICAgICAgLyogMHhkYjggKi8KLQlfX3UzMiAgICAgICAgcGFkMTE7ICAgICAgICAgICAgICAgICAgICAvKiAweGRiYyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgZW5kICovCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTMyCWNjdzFbMl07CQkJLyogMHgwMDAwICovCisJX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlfX3U4CXBhZF8weDAwMThbMHgwMDgwLTB4MDAxOF07CS8qIDB4MDAxOCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMglkYXRhX2V4Y19jb2RlOwkJCS8qIDB4MDA5MCAqLworCV9fdTE2CW1vbl9jbGFzc19udW07CQkJLyogMHgwMDk0ICovCisJX191MTYJcGVyX3BlcmNfYXRtaWQ7CQkJLyogMHgwMDk2ICovCisJYWRkcl90CXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KKwlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCisJX191OAlvcF9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEyICovCisJX191OAlhcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEzICovCisJX191OAlwYWRfMHgwMGE0WzB4MDBhOC0weDAwYTRdOwkvKiAweDAwYTQgKi8KKwlhZGRyX3QJdHJhbnNfZXhjX2NvZGU7CQkJLyogMHgwMGE4ICovCisJYWRkcl90CW1vbml0b3JfY29kZTsJCQkvKiAweDAwYjAgKi8KKwlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLworCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCisJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCisJX191MzIJaW9faW50X3dvcmQ7CQkJLyogMHgwMGMwICovCisJX191OAlwYWRfMHgwMGM0WzB4MDBjOC0weDAwYzRdOwkvKiAweDAwYzQgKi8KKwlfX3UzMglzdGZsX2ZhY19saXN0OwkJCS8qIDB4MDBjOCAqLworCV9fdTgJcGFkXzB4MDBjY1sweDAwZTgtMHgwMGNjXTsJLyogMHgwMGNjICovCisJX191MzIJbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsJLyogMHgwMGU4ICovCisJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KKwlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLworCWFkZHJfdAlmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMTAwWzB4MDEyMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAxMjAgKi8KKwlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMTMwICovCisJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMTQwICovCisJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMTUwICovCisJcHN3X3QJbWNja19vbGRfcHN3OwkJCS8qIDB4MDE2MCAqLworCXBzd190CWlvX29sZF9wc3c7CQkJLyogMHgwMTcwICovCisJX191OAlwYWRfMHgwMTgwWzB4MDFhMC0weDAxODBdOwkvKiAweDAxODAgKi8KKwlwc3dfdAlyZXN0YXJ0X3BzdzsJCQkvKiAweDAxYTAgKi8KKwlwc3dfdAlleHRlcm5hbF9uZXdfcHN3OwkJLyogMHgwMWIwICovCisJcHN3X3QJc3ZjX25ld19wc3c7CQkJLyogMHgwMWMwICovCisJcHN3X3QJcHJvZ3JhbV9uZXdfcHN3OwkJLyogMHgwMWQwICovCisJcHN3X3QJbWNja19uZXdfcHN3OwkJCS8qIDB4MDFlMCAqLworCXBzd190CWlvX25ld19wc3c7CQkJLyogMHgwMWYwICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGRjMCAqLwotCV9fdTY0ICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4ZGM4ICovCi0JX191NjQgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhkZDAgKi8KLQlfX3U2NCAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhkZDggKi8KLQlfX3UzMgkgICAgIHNvZnRpcnFfcGVuZGluZzsJICAgICAgIC8qIDB4ZGUwICovCi0JX191MzIJICAgICBwYWRfMHgwZGU0OwkgICAgICAgLyogMHhkZTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGRlOCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTJbMHhlMDAtMHhkZjBdOyAgICAgICAvKiAweGRmMCAqLworCS8qIEVudHJ5L2V4aXQgc2F2ZSBhcmVhICYgcmV0dXJuIHBzd3MuICovCisJX191NjQJc2F2ZV9hcmVhWzE2XTsJCQkvKiAweDAyMDAgKi8KKwlwc3dfdAlyZXR1cm5fcHN3OwkJCS8qIDB4MDI4MCAqLworCXBzd190CXJldHVybl9tY2NrX3BzdzsJCS8qIDB4MDI5MCAqLwogCi0gICAgICAgIC8qIDB4ZTAwIGlzIHVzZWQgYXMgaW5kaWNhdG9yIGZvciBkdW1wIHRvb2xzICovCi0gICAgICAgIC8qIHdoZXRoZXIgdGhlIGtlcm5lbCBkaWVkIHdpdGggcGFuaWMoKSBvciBub3QgKi8KLSAgICAgICAgX191MzIgICAgICAgIHBhbmljX21hZ2ljOyAgICAgICAgICAgICAgLyogMHhlMDAgKi8KKwkvKiBDUFUgYWNjb3VudGluZyBhbmQgdGltaW5nIHZhbHVlcy4gKi8KKwlfX3U2NAlzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMmEwICovCisJX191NjQJYXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyYTggKi8KKwlfX3U2NAlleGl0X3RpbWVyOwkJCS8qIDB4MDJiMCAqLworCV9fdTY0CXVzZXJfdGltZXI7CQkJLyogMHgwMmI4ICovCisJX191NjQJc3lzdGVtX3RpbWVyOwkJCS8qIDB4MDJjMCAqLworCV9fdTY0CXN0ZWFsX3RpbWVyOwkJCS8qIDB4MDJjOCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX3RpbWVyOwkJLyogMHgwMmQwICovCisJX191NjQJbGFzdF91cGRhdGVfY2xvY2s7CQkvKiAweDAyZDggKi8KKworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3U2NAljdXJyZW50X3Rhc2s7CQkJLyogMHgwMmUwICovCisJX191NjQJdGhyZWFkX2luZm87CQkJLyogMHgwMmU4ICovCisJX191NjQJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDJmMCAqLworCisJLyogSW50ZXJydXB0IGFuZCBwYW5pYyBzdGFjay4gKi8KKwlfX3U2NAlhc3luY19zdGFjazsJCQkvKiAweDAyZjggKi8KKwlfX3U2NAlwYW5pY19zdGFjazsJCQkvKiAweDAzMDAgKi8KKworCS8qIEFkZHJlc3Mgc3BhY2UgcG9pbnRlci4gKi8KKwlfX3U2NAlrZXJuZWxfYXNjZTsJCQkvKiAweDAzMDggKi8KKwlfX3U2NAl1c2VyX2FzY2U7CQkJLyogMHgwMzEwICovCisJX191NjQJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMzE4ICovCisKKwkvKiBTTVAgaW5mbyBhcmVhICovCisJY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDMyMCAqLworCV9fdTMyCWNwdV9ucjsJCQkJLyogMHgwMzI4ICovCisJX191MzIJc29mdGlycV9wZW5kaW5nOwkJLyogMHgwMzJjICovCisJX191NjQJcGVyY3B1X29mZnNldDsJCQkvKiAweDAzMzAgKi8KKwlfX3U2NAlleHRfY2FsbF9mYXN0OwkJCS8qIDB4MDMzOCAqLworCV9fdTY0CWludF9jbG9jazsJCQkvKiAweDAzNDAgKi8KKwlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMzQ4ICovCisJX191NjQJdmRzb19wZXJfY3B1X2RhdGE7CQkvKiAweDAzNTAgKi8KKwlfX3U4CXBhZF8weDAzNThbMHgwMzgwLTB4MDM1OF07CS8qIDB4MDM1OCAqLworCisJLyogSW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrLiAqLworCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzODAgKi8KIAogCS8qIFBlciBjcHUgcHJpbWFyeSBzcGFjZSBhY2Nlc3MgbGlzdCAqLwotCV9fdTgJICAgICBwYWRfMHhlMDRbMHhlMzgtMHhlMDRdOyAgIC8qIDB4ZTA0ICovCi0JX191NjQJICAgICB2ZHNvX3Blcl9jcHVfZGF0YTsJICAgICAgIC8qIDB4ZTM4ICovCi0JX191MzIJICAgICBwYXN0ZVsxNl07CQkgICAgICAgLyogMHhlNDAgKi8KKwlfX3UzMglwYXN0ZVsxNl07CQkJLyogMHgwM2MwICovCiAKLQlfX3U4CSAgICAgcGFkMTNbMHgxMWI4LTB4ZTgwXTsgICAgICAvKiAweGU4MCAqLworCV9fdTgJcGFkXzB4MDQwMFsweDBlMDAtMHgwNDAwXTsJLyogMHgwNDAwICovCiAKLQkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0LCBkaWFnIDI1MCBldGMgICovCi0JX191NjQgICAgICAgIGV4dF9wYXJhbXMyOyAgICAgICAgICAgICAgIC8qIDB4MTFCOCAqLworCS8qCisJICogMHhlMDAgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIElQTCBQYXJhbWV0ZXIgSW5mb3JtYXRpb24KKwkgKiBibG9jay4gRHVtcCB0b29scyBuZWVkIElQSUIgZm9yIElQTCBhZnRlciBkdW1wLgorCSAqIE5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIGFueSBmaWVsZHMgaW4gMHgwZTAwLTB4MGYwMAorCSAqLworCV9fdTY0CWlwaWI7CQkJCS8qIDB4MGUwMCAqLworCV9fdTMyCWlwaWJfY2hlY2tzdW07CQkJLyogMHgwZTA4ICovCisJX191OAlwYWRfMHgwZTBjWzB4MTFiOC0weDBlMGNdOwkvKiAweDBlMGMgKi8KIAotCV9fdTggICAgICAgICBwYWQxNFsweDEyMDAtMHgxMUMwXTsgICAgICAvKiAweDExQzAgKi8KKwkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0L2RpYWcgMjUwOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTY0CWV4dF9wYXJhbXMyOwkJCS8qIDB4MTFCOCAqLworCV9fdTgJcGFkXzB4MTFjMFsweDEyMDAtMHgxMUMwXTsJLyogMHgxMUMwICovCiAKLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLyAKLQotCV9fdTY0ICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOyAvKiAweDEyMDAgKi8KLQlfX3U2NCAgICAgICAgZ3ByZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxMjgwICovCi0JX191MzIgICAgICAgIHN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07IC8qIDB4MTMwMCAqLwotCV9fdTggICAgICAgICBwYWQxNVsweDEzMTgtMHgxMzEwXTsgICAgICAvKiAweDEzMTAgKi8KLQlfX3UzMiAgICAgICAgcHJlZml4cmVnX3NhdmVfYXJlYTsgICAgICAgLyogMHgxMzE4ICovCi0JX191MzIgICAgICAgIGZwdF9jcmVnX3NhdmVfYXJlYTsgICAgICAgIC8qIDB4MTMxYyAqLwotCV9fdTggICAgICAgICBwYWQxNlsweDEzMjQtMHgxMzIwXTsgICAgICAvKiAweDEzMjAgKi8KLQlfX3UzMiAgICAgICAgdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOyAgICAgLyogMHgxMzI0ICovCi0JX191MzIgICAgICAgIGNwdV90aW1lcl9zYXZlX2FyZWFbMl07ICAgIC8qIDB4MTMyOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgICAvKiAweDEzMzAgKi8KLQlfX3U4ICAgICAgICAgcGFkMTdbMHgxMzQwLTB4MTMzOF07ICAgICAgLyogMHgxMzM4ICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07IC8qIDB4MTM0MCAqLyAKLQlfX3U2NCAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAgLyogMHgxMzgwICovCisJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlfX3U2NAlmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOwkvKiAweDEyMDAgKi8KKwlfX3U2NAlncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTI4MCAqLworCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MTMwMCAqLworCV9fdTgJcGFkXzB4MTMxMFsweDEzMTgtMHgxMzEwXTsJLyogMHgxMzEwICovCisJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxOCAqLworCV9fdTMyCWZwdF9jcmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxYyAqLworCV9fdTgJcGFkXzB4MTMyMFsweDEzMjQtMHgxMzIwXTsJLyogMHgxMzIwICovCisJX191MzIJdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzI0ICovCisJX191MzIJY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsJCS8qIDB4MTMyOCAqLworCV9fdTMyCWNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOwkvKiAweDEzMzAgKi8KKwlfX3U4CXBhZF8weDEzMzhbMHgxMzQwLTB4MTMzOF07CS8qIDB4MTMzOCAqLworCV9fdTMyCWFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07CS8qIDB4MTM0MCAqLworCV9fdTY0CWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDEzODAgKi8KIAogCS8qIGFsaWduIHRvIHRoZSB0b3Agb2YgdGhlIHByZWZpeCBhcmVhICovCi0KLQlfX3U4ICAgICAgICAgcGFkMThbMHgyMDAwLTB4MTQwMF07ICAgICAgLyogMHgxNDAwICovCisJX191OAlwYWRfMHgxNDAwWzB4MjAwMC0weDE0MDBdOwkvKiAweDE0MDAgKi8KICNlbmRpZiAvKiAhX19zMzkweF9fICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAvKiBFbmQgc3RydWN0dXJlKi8KIApAQCAtNDMzLDggKzQ0MCw2IEBACiAJcmV0dXJuIGFkZHJlc3M7CiB9CiAKLSNkZWZpbmUgX19QQU5JQ19NQUdJQyAgICAgICAgICAgMHhERUFEQzBERQotCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA3ODM5NzY3Li5kYTAxNDMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTIyLDQgKzIyLDkgQEAKICNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwogI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwogCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmIGRlZmluZWQoQ09ORklHXzY0QklUKQoraW50IHMzOTBfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKKyNkZWZpbmUgYXJjaF9tbWFwX2NoZWNrKGFkZHIsbGVuLGZsYWdzKQlzMzkwX21tYXBfY2hlY2soYWRkcixsZW4pCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fUzM5MF9NTUFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAyOGVjODcwLi5mYzdlZGQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtNzQsNyArNzQsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAogCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbmV4dC0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobmV4dCkpOwogCXVwZGF0ZV9tbShuZXh0LCB0c2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbm1pLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbm1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiNjA0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ubWkuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogICBNYWNoaW5lIGNoZWNrIGhhbmRsZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyA8YWRsdW5nQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+LAorICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfTk1JX0gKKyNkZWZpbmUgX0FTTV9TMzkwX05NSV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgbWNpIHsKKwlfX3UzMiBzZCA6ICAxOyAvKiAwMCBzeXN0ZW0gZGFtYWdlICovCisJX191MzIgcGQgOiAgMTsgLyogMDEgaW5zdHJ1Y3Rpb24tcHJvY2Vzc2luZyBkYW1hZ2UgKi8KKwlfX3UzMiBzciA6ICAxOyAvKiAwMiBzeXN0ZW0gcmVjb3ZlcnkgKi8KKwlfX3UzMgkgOiAgMTsgLyogMDMgKi8KKwlfX3UzMiBjZCA6ICAxOyAvKiAwNCB0aW1pbmctZmFjaWxpdHkgZGFtYWdlICovCisJX191MzIgZWQgOiAgMTsgLyogMDUgZXh0ZXJuYWwgZGFtYWdlICovCisJX191MzIJIDogIDE7IC8qIDA2ICovCisJX191MzIgZGcgOiAgMTsgLyogMDcgZGVncmFkYXRpb24gKi8KKwlfX3UzMiB3ICA6ICAxOyAvKiAwOCB3YXJuaW5nIHBlbmRpbmcgKi8KKwlfX3UzMiBjcCA6ICAxOyAvKiAwOSBjaGFubmVsLXJlcG9ydCBwZW5kaW5nICovCisJX191MzIgc3AgOiAgMTsgLyogMTAgc2VydmljZS1wcm9jZXNzb3IgZGFtYWdlICovCisJX191MzIgY2sgOiAgMTsgLyogMTEgY2hhbm5lbC1zdWJzeXN0ZW0gZGFtYWdlICovCisJX191MzIJIDogIDI7IC8qIDEyLTEzICovCisJX191MzIgYiAgOiAgMTsgLyogMTQgYmFja2VkIHVwICovCisJX191MzIJIDogIDE7IC8qIDE1ICovCisJX191MzIgc2UgOiAgMTsgLyogMTYgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAqLworCV9fdTMyIHNjIDogIDE7IC8qIDE3IHN0b3JhZ2UgZXJyb3IgY29ycmVjdGVkICovCisJX191MzIga2UgOiAgMTsgLyogMTggc3RvcmFnZS1rZXkgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KKwlfX3UzMiBkcyA6ICAxOyAvKiAxOSBzdG9yYWdlIGRlZ3JhZGF0aW9uICovCisJX191MzIgd3AgOiAgMTsgLyogMjAgcHN3IG13cCB2YWxpZGl0eSAqLworCV9fdTMyIG1zIDogIDE7IC8qIDIxIHBzdyBtYXNrIGFuZCBrZXkgdmFsaWRpdHkgKi8KKwlfX3UzMiBwbSA6ICAxOyAvKiAyMiBwc3cgcHJvZ3JhbSBtYXNrIGFuZCBjYyB2YWxpZGl0eSAqLworCV9fdTMyIGlhIDogIDE7IC8qIDIzIHBzdyBpbnN0cnVjdGlvbiBhZGRyZXNzIHZhbGlkaXR5ICovCisJX191MzIgZmEgOiAgMTsgLyogMjQgZmFpbGluZyBzdG9yYWdlIGFkZHJlc3MgdmFsaWRpdHkgKi8KKwlfX3UzMgkgOiAgMTsgLyogMjUgKi8KKwlfX3UzMiBlYyA6ICAxOyAvKiAyNiBleHRlcm5hbCBkYW1hZ2UgY29kZSB2YWxpZGl0eSAqLworCV9fdTMyIGZwIDogIDE7IC8qIDI3IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgZ3IgOiAgMTsgLyogMjggZ2VuZXJhbCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGNyIDogIDE7IC8qIDI5IGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMgkgOiAgMTsgLyogMzAgKi8KKwlfX3UzMiBzdCA6ICAxOyAvKiAzMSBzdG9yYWdlIGxvZ2ljYWwgdmFsaWRpdHkgKi8KKwlfX3UzMiBpZSA6ICAxOyAvKiAzMiBpbmRpcmVjdCBzdG9yYWdlIGVycm9yICovCisJX191MzIgYXIgOiAgMTsgLyogMzMgYWNjZXNzIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgZGEgOiAgMTsgLyogMzQgZGVsYXllZCBhY2Nlc3MgZXhjZXB0aW9uICovCisJX191MzIJIDogIDc7IC8qIDM1LTQxICovCisJX191MzIgcHIgOiAgMTsgLyogNDIgdG9kIHByb2dyYW1tYWJsZSByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGZjIDogIDE7IC8qIDQzIGZwIGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBhcCA6ICAxOyAvKiA0NCBhbmNpbGxhcnkgcmVwb3J0ICovCisJX191MzIJIDogIDE7IC8qIDQ1ICovCisJX191MzIgY3QgOiAgMTsgLyogNDYgY3B1IHRpbWVyIHZhbGlkaXR5ICovCisJX191MzIgY2MgOiAgMTsgLyogNDcgY2xvY2sgY29tcGFyYXRvciB2YWxpZGl0eSAqLworCV9fdTMyCSA6IDE2OyAvKiA0Ny02MyAqLworfTsKKworc3RydWN0IHB0X3JlZ3M7CisKK2V4dGVybiB2b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCk7CitleHRlcm4gdm9pZCBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX0FTTV9TMzkwX05NSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMDY2Yjk5NS4uNjE4NjJiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtNDIsMjYgKzQyLDEyIEBACiAJYXNtIHZvbGF0aWxlKCJzdGlkcCAwKCUxKSIgOiAiPW0iICgqcHRyKSA6ICJhIiAocHRyKSk7CiB9CiAKLXN0cnVjdCBjcHVpbmZvX1MzOTAKLXsKLSAgICAgICAgY3B1aWRfdCAgY3B1X2lkOwotICAgICAgICBfX3UxNiAgICBjcHVfYWRkcjsKLSAgICAgICAgX191MTYgICAgY3B1X25yOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOwotI2lmZGVmIF9fczM5MHhfXwotICAgICAgICB1bnNpZ25lZCBsb25nICpwbWRfcXVpY2s7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgKnB0ZV9xdWljazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OwotfTsKLQogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKLWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKik7CitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyh2b2lkKTsKIGV4dGVybiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqKTsKIAogLyoKLSAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IgZm9yIDMxIGJpdCwgNFRCIGZvciA2NCBiaXQuCisgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMkdCIGZvciAzMSBiaXQsIDRUQiBvciA4UFQgZm9yIDY0IGJpdC4KICAqLwogI2lmbmRlZiBfX3MzOTB4X18KIApAQCAtNzAsOCArNTYsNyBAQAogCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAotI2RlZmluZSBUQVNLX1NJWkVfT0YodHNrKQkodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLFRJRl8zMUJJVCkgPyBcCi0JCQkJCSgxVUwgPDwgMzEpIDogKDFVTCA8PCA1MykpCisjZGVmaW5lIFRBU0tfU0laRV9PRih0c2spCSgodHNrKS0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCkKICNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCkgPyBcCiAJCQkJCSgxVUwgPDwgMzApIDogKDFVTCA8PCA0MSkpCiAjZGVmaW5lIFRBU0tfU0laRQkJVEFTS19TSVpFX09GKGN1cnJlbnQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggODkyMDAyNS4uZjFiMDUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTcyLDYgKzE3Miw4IEBACiAjZGVmaW5lIE5VTV9DUlMJCTE2CiAjZGVmaW5lIE5VTV9BQ1JTCTE2CiAKKyNkZWZpbmUgTlVNX0NSX1dPUkRTCTMKKwogI2RlZmluZSBGUFJfU0laRQk4CiAjZGVmaW5lIEZQQ19TSVpFCTQKICNkZWZpbmUgRlBDX1BBRF9TSVpFCTQgLyogZ2NjIGluc2lzdHMgb24gYWxpZ25pbmcgdGhlIGZwcmVncyAqLwpAQCAtMzM0LDcgKzMzNiw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0JdW5zaWduZWQgbG9uZyBjclszXTsKKwl1bnNpZ25lZCBsb25nIGNyW05VTV9DUl9XT1JEU107CiB9IHBlcl9jcl93b3JkczsKIAogI2RlZmluZSBQRVJfRU1fTUFTSyAweEU4MDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDI3ZmMxNzQuLjQwMmQ2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaApAQCAtMzE0LDYgKzMxNCw3IEBACiAJCQkgICAgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBxZGlvIGVycm9ycyByZXBvcnRlZCB0byB0aGUgdXBwZXItbGF5ZXIgcHJvZ3JhbSAqLworI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfVEFSR0VUCQkJMHgwMgogI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfQUNDRVNTX0VYQ0VQVElPTgkweDEwCiAjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9CVVNZCQkJMHgyMAogI2RlZmluZSBRRElPX0VSUk9SX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTgkweDQwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDJiZDlmYWUuLmU4YmQ2YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC00Myw2ICs0Myw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgbWVtX2NodW5rIG1lbW9yeV9jaHVua1tdOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVhbF9tZW1vcnlfc2l6ZTsKK2V4dGVybiBpbnQgbWVtb3J5X2VuZF9zZXQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kOwogCiB2b2lkIGRldGVjdF9tZW1vcnlfbGF5b3V0KHN0cnVjdCBtZW1fY2h1bmsgY2h1bmtbXSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAwMjRiOTFlLi4yMDA5MTU4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC01MCwxMiArNTAsNyBAQAogIAogI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZCTIwCQkvKiBTY2hlZHVsZSBwZW5hbHR5ICovCiAKLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9ucikKLQotc3RhdGljIGlubGluZSBfX3UxNiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlyZXR1cm4gc3RhcCgpOwotfQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShTMzkwX2xvd2NvcmUuY3B1X25yKQogCiAvKgogICogcmV0dXJucyAxIGlmIGNwdSBpcyBpbiBzdG9wcGVkL2NoZWNrIHN0b3BwZWQgc3RhdGUgb3Igbm90IG9wZXJhdGlvbmFsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggZDA3NDY3My4uY2QwMjQxZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtMTAwLDYgKzEwMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IDA7CiAJY2hhciAqcmV0ID0gZHN0OwogCkBAIC0xMDksMTAgKzExMCwxNCBAQAogCQk6ICIrJmEiIChkc3QpLCAiKyZhIiAoc3JjKSA6ICJkIiAocjApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRzdCwgc3JjKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHIwIGFzbSgiMCIpID0gMDsKIAljb25zdCBjaGFyICp0bXAgPSBzOwogCkBAIC0xMjEsNiArMTI2LDkgQEAKIAkJIglqbwkwYiIKIAkJOiAiK2QiIChyMCksICIrYSIgKHRtcCkgOiAgOiAiY2MiKTsKIAlyZXR1cm4gcjAgLSAodW5zaWduZWQgbG9uZykgczsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJsZW4ocyk7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pCkBAIC0xMzUsNyArMTQzLDEzIEBACiAJCTogIithIiAoZW5kKSwgIithIiAodG1wKSA6ICJkIiAocjApICA6ICJjYyIpOwogCXJldHVybiBlbmQgLSBzOwogfQotCisjZWxzZSAvKiBJTl9BUkNIX1NUUklOR19DICovCit2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqIHMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1zY2FuKHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CitjaGFyICpzdHJjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcyk7CitzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pOwogI2VuZGlmIC8qICFJTl9BUkNIX1NUUklOR19DICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaAppbmRleCBhZDkzMjEyLi45ZDcwMDU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQljaGFyIHJlc2VydmVkXzFbMjRdOwogCiAJfSB2bVs4XTsKKwljaGFyIHJlc2VydmVkXzU0NFszNTUyXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN0c2kodm9pZCAqc3lzaW5mbywgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGQ2MDM5NGIuLjMwNGNmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC01MSw3ICs1MSw3IEBACiAJICogSWYgdGhlIHByb2Nlc3Mgb25seSByYW4gb24gdGhlIGxvY2FsIGNwdSwgZG8gYSBsb2NhbCBmbHVzaC4KIAkgKi8KIAlsb2NhbF9jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIGxvY2FsX2NwdW1hc2spKQorCWlmIChjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCAmbG9jYWxfY3B1bWFzaykpCiAJCV9fdGxiX2ZsdXNoX2xvY2FsKCk7CiAJZWxzZQogCQlfX3RsYl9mbHVzaF9nbG9iYWwoKTsKQEAgLTczLDcgKzczLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2ZsdXNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKIHsKLQlpZiAodW5saWtlbHkoY3B1c19lbXB0eShtbS0+Y3B1X3ZtX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShtbV9jcHVtYXNrKG1tKSkpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBJZiB0aGUgbWFjaGluZSBoYXMgSURURSB3ZSBwcmVmZXIgdG8gZG8gYSBwZXIgbW0gZmx1c2gKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggYzkzZWI1MC4uNWUwYWQ2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTUsNyArNSw2IEBACiAKICNkZWZpbmUgbWNfY2FwYWJsZSgpCSgxKQogCi1jcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAodW5zaWduZWQgaW50IGNwdSk7CiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKHVuc2lnbmVkIGludCBjcHUpOwogCiBleHRlcm4gY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKQEAgLTMwLDYgKzI5LDggQEAKIH07CiAjZW5kaWYKIAorI2RlZmluZSBTRF9NQ19JTklUIFNEX0NQVV9JTklUCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgogCiAjZW5kaWYgLyogX0FTTV9TMzkwX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdnRvYy5oCmluZGV4IDNhNTI2N2QuLjg0MDZhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaApAQCAtMzksNyArMzksNyBAQAogCV9fdTE2IGRheTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWwKK3N0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9jZGwKIHsKIAljaGFyIHZvbGtleVs0XTsJCS8qIHZvbHVtZSBrZXkgPSB2b2x1bWUgbGFiZWwgKi8KIAljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLwpAQCAtNTYsNiArNTYsMTQgQEAKIAljaGFyIHJlczNbMjldOwkJLyogcmVzZXJ2ZWQgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfbGRsIHsKKwljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLworCWNoYXIgdm9saWRbNl07CQkvKiB2b2x1bWUgaWRlbnRpZmllciAqLworCWNoYXIgcmVzM1s2OV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgbGRsX3ZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyLCB2YWxpZCBmb3IgbGRsIGZvcm1hdCAqLworCV9fdTY0IGZvcm1hdHRlZF9ibG9ja3M7IC8qIHZhbGlkIHdoZW4gbGRsX3ZlcnNpb24gPj0gZjIgICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHZ0b2NfZXh0ZW50CiB7CiAJX191OCB0eXBlaW5kOwkJCS8qIGV4dGVudCB0eXBlIGluZGljYXRvciAqLwpAQCAtMTQwLDcgKzE0OCwxMSBAQAogCWNoYXIgcmVzMlsxMF07CQkvKiByZXNlcnZlZCAqLwogCV9fdTggRFM0RUZMVkw7CQkvKiBleHRlbmRlZCBmcmVlLXNwYWNlIG1hbmFnZW1lbnQgbGV2ZWwgKi8KIAlzdHJ1Y3QgdnRvY19jY2hoYiBEUzRFRlBUUjsgLyogcG9pbnRlciB0byBleHRlbmRlZCBmcmVlLXNwYWNlIGluZm8gKi8KLQljaGFyIHJlczNbOV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgcmVzMzsJCS8qIHJlc2VydmVkICovCisJX191MzIgRFM0RENZTDsJCS8qIG51bWJlciBvZiBsb2dpY2FsIGN5bHMgKi8KKwljaGFyIHJlczRbMl07CQkvKiByZXNlcnZlZCAqLworCV9fdTggRFM0REVWRjI7CQkvKiBkZXZpY2UgZmxhZ3MgKi8KKwljaGFyIHJlczU7CQkvKiByZXNlcnZlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCB2dG9jX2RzNWV4dApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggM2VkYzZjNi4uMjI4ZTMxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCkBAIC0xNywxMCArMTcsMTIgQEAKICMKIENGTEFHU19wdHJhY2UubwkJKz0gLURVVFNfTUFDSElORT0nIiQoVVRTX01BQ0hJTkUpIicKIAorQ0ZMQUdTX3N5c2luZm8ubyArPSAtSWluY2x1ZGUvbWF0aC1lbXUgLUlhcmNoL3MzOTAvbWF0aC1lbXUgLXcKKwogb2JqLXkJOj0gIGJpdG1hcC5vIHRyYXBzLm8gdGltZS5vIHByb2Nlc3MubyBiYXNlLm8gZWFybHkubyBzZXR1cC5vIFwKIAkgICAgcHJvY2Vzc29yLm8gc3lzX3MzOTAubyBwdHJhY2UubyBzaWduYWwubyBjcGNtZC5vIGViY2RpYy5vIFwKIAkgICAgczM5MF9leHQubyBkZWJ1Zy5vIGlycS5vIGlwbC5vIGRpcy5vIGRpYWcubyBtZW1fZGV0ZWN0Lm8gXAotCSAgICB2ZHNvLm8gdnRpbWUubworCSAgICB2ZHNvLm8gdnRpbWUubyBzeXNpbmZvLm8gbm1pLm8KIAogb2JqLXkJKz0gJChpZiAkKENPTkZJR182NEJJVCksZW50cnk2NC5vLGVudHJ5Lm8pCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxyZWlwbDY0Lm8scmVpcGwubykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMgYi9hcmNoL3MzOTAva2VybmVsL2JpdG1hcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmI0MWY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKLSAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCi0gKiAgICBTZWUgaW5jbHVkZS9hc20tczM5MC97Yml0b3BzLmh8cG9zaXhfdHlwZXMuaH0gZm9yIGRldGFpbHMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICovCi0KLSAgICAgICAgIC5nbG9ibCBfb2lfYml0bWFwCi1fb2lfYml0bWFwOgotICAgICAgICAgLmJ5dGUgIDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MAotCi0gICAgICAgICAuZ2xvYmwgX25pX2JpdG1hcAotX25pX2JpdG1hcDoKLSAgICAgICAgIC5ieXRlICAweEZFLDB4RkQsMHhGQiwweEY3LDB4RUYsMHhERiwweEJGLDB4N0YKLQotICAgICAgICAgLmdsb2JsIF96Yl9maW5kbWFwCi1femJfZmluZG1hcDoKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQgCi0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNgotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDcKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsOAotCi0gICAgICAgICAuZ2xvYmwgX3NiX2ZpbmRtYXAKLV9zYl9maW5kbWFwOgotICAgICAgICAgLmJ5dGUgIDgsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlNDc1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCisgKiAgICBTZWUgaW5jbHVkZS9hc20ve2JpdG9wcy5ofHBvc2l4X3R5cGVzLmh9IGZvciBkZXRhaWxzCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDkKKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2NvbnN0IGNoYXIgX29pX2JpdG1hcFtdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwIH07CitFWFBPUlRfU1lNQk9MKF9vaV9iaXRtYXApOworCitjb25zdCBjaGFyIF9uaV9iaXRtYXBbXSA9IHsgMHhmZSwgMHhmZCwgMHhmYiwgMHhmNywgMHhlZiwgMHhkZiwgMHhiZiwgMHg3ZiB9OworRVhQT1JUX1NZTUJPTChfbmlfYml0bWFwKTsKKworY29uc3QgY2hhciBfemJfZmluZG1hcFtdID0geworCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNywKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDggfTsKK0VYUE9SVF9TWU1CT0woX3piX2ZpbmRtYXApOworCitjb25zdCBjaGFyIF9zYl9maW5kbWFwW10gPSB7CisJOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTcsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCB9OworRVhQT1JUX1NZTUJPTChfc2JfZmluZG1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9wdHJhY2UuaCBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCmluZGV4IGEyYmUzYTkuLjEyM2RkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCkBAIC0xLDEwICsxLDExIEBACiAjaWZuZGVmIF9QVFJBQ0UzMl9ICiAjZGVmaW5lIF9QVFJBQ0UzMl9ICiAKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+ICAgIC8qIG5lZWRlZCBmb3IgTlVNX0NSX1dPUkRTICovCiAjaW5jbHVkZSAiY29tcGF0X2xpbnV4LmgiICAvKiBuZWVkZWQgZm9yIHBzd19jb21wYXRfdCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JX191MzIgY3JbM107CisJX191MzIgY3JbTlVNX0NSX1dPUkRTXTsKIH0gcGVyX2NyX3dvcmRzMzI7CiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwppbmRleCBiYTAzZmMwLi5iZThiY2VhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCkBAIC02MDMsNyArNjAzLDcgQEAKIHN0YXRpYyBpbnQKIGRlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGkgPSAwLCByYyA9IDA7CisJaW50IGksIHJjID0gMDsKIAlmaWxlX3ByaXZhdGVfaW5mb190ICpwX2luZm87CiAJZGVidWdfaW5mb190ICpkZWJ1Z19pbmZvLCAqZGVidWdfaW5mb19zbmFwc2hvdDsKIApAQCAtNjQyLDggKzY0Miw3IEBACiAJcF9pbmZvID0ga21hbGxvYyhzaXplb2YoZmlsZV9wcml2YXRlX2luZm9fdCksCiAJCQkJCQlHRlBfS0VSTkVMKTsKIAlpZighcF9pbmZvKXsKLQkJaWYoZGVidWdfaW5mb19zbmFwc2hvdCkKLQkJCWRlYnVnX2luZm9fZnJlZShkZWJ1Z19pbmZvX3NuYXBzaG90KTsKKwkJZGVidWdfaW5mb19mcmVlKGRlYnVnX2luZm9fc25hcHNob3QpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY5OCw4ICs2OTcsNyBAQAogCWlmICgodWlkICE9IDApIHx8IChnaWQgIT0gMCkpCiAJCXByX3dhcm5pbmcoIlJvb3QgYmVjb21lcyB0aGUgb3duZXIgb2YgYWxsIHMzOTBkYmYgZmlsZXMgIgogCQkJICAgImluIHN5c2ZzXG4iKTsKLQlpZiAoIWluaXRpYWxpemVkKQotCQlCVUcoKTsKKwlCVUdfT04oIWluaXRpYWxpemVkKTsKIAltdXRleF9sb2NrKCZkZWJ1Z19tdXRleCk7CiAKICAgICAgICAgLyogY3JlYXRlIG5ldyBkZWJ1Z19pbmZvICovCkBAIC0xMTU2LDcgKzExNTQsNiBAQAogCWVsc2UgewogCQlkZWJ1Z2ZzX3JlbW92ZShpZC0+ZGVidWdmc19lbnRyaWVzW2ldKTsKIAkJaWQtPnZpZXdzW2ldID0gTlVMTDsKLQkJcmMgPSAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZC0+bG9jaywgZmxhZ3MpOwogb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IDJhMmNhMjYuLjRkMjIxYzggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTYsNiArNiw3IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKQEAgLTE3MywxOSArMTc1LDIxIEBACiAJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfREVGQVVMVF9LRVkpOwogfQogCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB2bW1zIF9fYWxpZ25lZChQQUdFX1NJWkUpOworCiBzdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgZGV0ZWN0X21hY2hpbmVfdHlwZSh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8gPSAmUzM5MF9sb3djb3JlLmNwdV9kYXRhOworCS8qIE5vIFZNIGluZm9ybWF0aW9uPyBMb29rcyBsaWtlIExQQVIgKi8KKwlpZiAoc3RzaSgmdm1tcywgMywgMiwgMikgPT0gLUVOT1NZUykKKwkJcmV0dXJuOworCWlmICghdm1tcy5jb3VudCkKKwkJcmV0dXJuOwogCi0JZ2V0X2NwdV9pZCgmUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9pZCk7Ci0KLQkvKiBSdW5uaW5nIHVuZGVyIHovVk0gPyAqLwotCWlmIChjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiA9PSAweGZmKQotCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19WTTsKLQotCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNID8gKi8KLQlpZiAoY3B1aW5mby0+Y3B1X2lkLnZlcnNpb24gPT0gMHhmZSkKKwkvKiBSdW5uaW5nIHVuZGVyIEtWTT8gSWYgbm90IHdlIGFzc3VtZSB6L1ZNICovCisJaWYgKCFtZW1jbXAodm1tcy52bVswXS5jcGksICJceGQyXHhlNVx4ZDQiLCAzKSkKIAkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfS1ZNOworCWVsc2UKKwkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfVk07CiB9CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wZ21fY2hlY2tfaGFuZGxlcih2b2lkKQpAQCAtMzQ4LDcgKzM1Miw2IEBACiAKIAkvKiBjb3B5IGFyY2ggY29tbWFuZCBsaW5lICovCiAJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FLCBBUkNIX0NPTU1BTkRfTElORV9TSVpFKTsKLQlib290X2NvbW1hbmRfbGluZVtBUkNIX0NPTU1BTkRfTElORV9TSVpFIC0gMV0gPSAwOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCiAJaWYgKE1BQ0hJTkVfSVNfVk0pIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggZWM3ZTM1Zi4uMTA0NmMyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTQ2OSw2ICs0NjksOCBAQAogCS5vcmcJMHgxMDAwMAogc3RhcnR1cDpiYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcwOgorCXhjCTB4MjAwKDI1NiksMHgyMDAJIyBwYXJ0aWFsbHkgY2xlYXIgbG93Y29yZQorCXhjCTB4MzAwKDI1NiksMHgzMDAKIAogI2lmbmRlZiBDT05GSUdfTUFSQ0hfRzUKIAkjIGNoZWNrIHByb2Nlc3NvciB2ZXJzaW9uIGFnYWluc3QgTUFSQ0hfe0c1LFo5MDAsWjk5MCxaOV8xMDksWjEwfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggZGI0NzZkMS4uMmNlZDg0NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0yMCw3ICsyMCw2IEBACiAJbGN0bAklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKSAjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSAjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQotCW12YwlfX0xDX0lQTERFVig0KSxJUExfREVWSUNFLVBBUk1BUkVBKCVyMTIpCiAjCiAjIFNldHVwIHN0YWNrCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwppbmRleCBmOWY3MGFhLi42NTY2N2IyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKQEAgLTg2LDcgKzg2LDYgQEAKIAlsY3RsZwklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKQkjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsZwklcjEyLC5McGFybWFkZHItLkxQRzEoJXIxMykJIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCiAJCQkJCSMgbW92ZSBJUEwgZGV2aWNlIHRvIGxvd2NvcmUKLQltdmMJX19MQ19JUExERVYoNCksSVBMX0RFVklDRSs0LVBBUk1BUkVBKCVyMTIpCiAJbGdoaQklcjAsX19MQ19QQVNURQogCXN0ZwklcjAsX19MQ19WRFNPX1BFUl9DUFUKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDJkY2Y1OTBmLi42ZjM3MTFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL3Jlc2V0Lmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KIAogI2RlZmluZSBJUExfUEFSTV9CTE9DS19WRVJTSU9OIDAKIApAQCAtNTYsMTMgKzU2LDE0IEBACiB9OwogCiAvKgotICogRml2ZSBzaHV0ZG93biBhY3Rpb24gdHlwZXMgYXJlIHN1cHBvcnRlZDoKKyAqIFRoZSBmb2xsb3dpbmcgc2h1dGRvd24gYWN0aW9uIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgKi8KICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX0lQTF9TVFIJCSJpcGwiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9SRUlQTF9TVFIJInJlaXBsIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fRFVNUF9TVFIJImR1bXAiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9WTUNNRF9TVFIJInZtY21kIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fU1RPUF9TVFIJInN0b3AiCisjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9EVU1QX1JFSVBMX1NUUgkiZHVtcF9yZWlwbCIKIAogc3RydWN0IHNodXRkb3duX2FjdGlvbiB7CiAJY2hhciAqbmFtZTsKQEAgLTE0Niw2ICsxNDcsNyBAQAogc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19mY3A7CiBzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2NjdzsKIHN0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqcmVpcGxfYmxvY2tfbnNzOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19hY3R1YWw7CiAKIHN0YXRpYyBpbnQgZHVtcF9jYXBhYmlsaXRpZXMgPSBEVU1QX1RZUEVfTk9ORTsKIHN0YXRpYyBlbnVtIGR1bXBfdHlwZSBkdW1wX3R5cGUgPSBEVU1QX1RZUEVfTk9ORTsKQEAgLTgzNSw2ICs4MzcsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19DSU87CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX2NjdzsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1A6CiAJCWlmIChkaWFnMzA4X3NldF93b3JrcykKQEAgLTg0Myw2ICs4NDYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19ESUFHOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19mY3A7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfRkNQX0RVTVA6CiAJCXJlaXBsX21ldGhvZCA9IFJFSVBMX01FVEhPRF9GQ1BfRFVNUDsKQEAgLTg1Miw2ICs4NTYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX05TU19ESUFHOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfTlNTOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19uc3M7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfVU5LTk9XTjoKIAkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0RFRkFVTFQ7CkBAIC05NjAsNyArOTY1LDYgQEAKIAkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgUkVJUExfTUVUSE9EX0ZDUF9EVU1QOgotCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwpAQCAtMTA2OSwxMCArMTA3MywxMiBAQAogewogCWludCByYzsKIAotCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9GQ1ApKQotCQlyZXR1cm4gMDsKLQlpZiAoKCFkaWFnMzA4X3NldF93b3JrcykgJiYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKSkKLQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpIHsKKwkJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKQorCQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CiAKIAlyZWlwbF9ibG9ja19mY3AgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWlwbF9ibG9ja19mY3ApCkBAIC0xMjUzLDcgKzEyNTksNiBAQAogCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgRFVNUF9NRVRIT0RfTk9ORToKLQlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQogCXByaW50ayhLRVJOX0VNRVJHICJEdW1wIGZhaWxlZCFcbiIpOwpAQCAtMTMzMiw2ICsxMzM3LDQ5IEBACiAJLmluaXQJPSBkdW1wX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCBkdW1wX3JlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKgorCSAqIEJ5cGFzcyBkeW5hbWljIGFkZHJlc3MgdHJhbnNsYXRpb24gKERBVCkgd2hlbiBzdG9yaW5nIElQTCBwYXJhbWV0ZXIKKwkgKiBpbmZvcm1hdGlvbiBibG9jayBhZGRyZXNzIGFuZCBjaGVja3N1bSBpbnRvIHRoZSBwcmVmaXggYXJlYQorCSAqIChjb3JyZXNwb25kaW5nIHRvIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEpLgorCSAqIFdoZW4gZW5oYW5jZWQgREFUIGFwcGxpZXMgYW5kIHRoZSBTVEUgZm9ybWF0IGNvbnRyb2wgaW4gb25lLAorCSAqIHRoZSBhYnNvbHV0ZSBhZGRyZXNzIGlzIGZvcm1lZCB3aXRob3V0IHByZWZpeGluZy4gSW4gdGhpcyBjYXNlIGEKKwkgKiBub3JtYWwgc3RvcmUgKHN0Zy9zdCkgaW50byB0aGUgcHJlZml4IGFyZWEgd291bGQgbm8gbW9yZSBtYXRjaCB0bworCSAqIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEuCisJICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJYXNtIHZvbGF0aWxlKCJzdHVyZyAlMCwlMSIKKwkJOjogImEiICgodW5zaWduZWQgbG9uZykgcmVpcGxfYmxvY2tfYWN0dWFsKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYikpOworI2Vsc2UKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19hY3R1YWwpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliKSk7CisjZW5kaWYKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKGNzdW1fcGFydGlhbChyZWlwbF9ibG9ja19hY3R1YWwsCisJCQkJICAgICByZWlwbF9ibG9ja19hY3R1YWwtPmhkci5sZW4sIDApKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYl9jaGVja3N1bSkpOworCXByZWVtcHRfZW5hYmxlKCk7CisJZHVtcF9ydW4odHJpZ2dlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR1bXBfcmVpcGxfaW5pdCh2b2lkKQoreworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiBfX3JlZmRhdGEgZHVtcF9yZWlwbF9hY3Rpb24gPSB7CisJLm5hbWUJPSBTSFVURE9XTl9BQ1RJT05fRFVNUF9SRUlQTF9TVFIsCisJLmZuCT0gZHVtcF9yZWlwbF9ydW4sCisJLmluaXQJPSBkdW1wX3JlaXBsX2luaXQsCit9OworCiAvKgogICogdm1jbWQgc2h1dGRvd24gYWN0aW9uOiBUcmlnZ2VyIHZtIGNvbW1hbmQgb24gc2h1dGRvd24uCiAgKi8KQEAgLTE0MjEsNyArMTQ2OSw4IEBACiAvKiBhY3Rpb24gbGlzdCAqLwogCiBzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiAqc2h1dGRvd25fYWN0aW9uc19saXN0W10gPSB7Ci0JJmlwbF9hY3Rpb24sICZyZWlwbF9hY3Rpb24sICZkdW1wX2FjdGlvbiwgJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKKwkmaXBsX2FjdGlvbiwgJnJlaXBsX2FjdGlvbiwgJmR1bXBfcmVpcGxfYWN0aW9uLCAmZHVtcF9hY3Rpb24sCisJJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OU19DT1VOVCAoc2l6ZW9mKHNodXRkb3duX2FjdGlvbnNfbGlzdCkgLyBzaXplb2Yodm9pZCAqKSkKIAogLyoKQEAgLTE0MzQsMTEgKzE0ODMsMTEgQEAKIAkJICAgICAgIHNpemVfdCBsZW4pCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgU0hVVERPV05fQUNUSU9OU19DT1VOVDsgaSsrKSB7CiAJCWlmICghc2h1dGRvd25fYWN0aW9uc19saXN0W2ldKQogCQkJY29udGludWU7Ci0JCWlmIChzdHJuY21wKGJ1Ziwgc2h1dGRvd25fYWN0aW9uc19saXN0W2ldLT5uYW1lLAotCQkJICAgIHN0cmxlbihzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0tPm5hbWUpKSA9PSAwKSB7CisJCWlmIChzeXNmc19zdHJlcShidWYsIHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXS0+bmFtZSkpIHsKIAkJCXRyaWdnZXItPmFjdGlvbiA9IHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXTsKIAkJCXJldHVybiBsZW47CiAJCX0KQEAgLTE2NzIsNyArMTcyMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb25fcGFuaWNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBvbl9wYW5pY19ub3RpZnksCi0JLnByaW9yaXR5ID0gMCwKKwkucHJpb3JpdHkgPSBJTlRfTUlOLAogfTsKIAogdm9pZCBfX2luaXQgc2V0dXBfaXBsKHZvaWQpCkBAIC0xNjk2LDcgKzE3NDUsNiBAQAogCQkJc2l6ZW9mKGlwbF9pbmZvLmRhdGEubnNzLm5hbWUpKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9VTktOT1dOOgotCWRlZmF1bHQ6CiAJCS8qIFdlIGhhdmUgbm8gaW5mbyB0byBjb3B5ICovCiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCmluZGV4IDM5N2QxMzEuLjgwNjQxMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUwpAQCAtNSw2ICs1LDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCiAjaWZuZGVmIENPTkZJR182NEJJVAogLmdsb2JsIF9tY291bnQKIF9tY291bnQ6CkBAIC0xNCw3ICsxNiw3IEBACiAJYWhpCSVyMTUsLTk2CiAJbAklcjMsMTAwKCVyMTUpCiAJbGEJJXIyLDAoJXIxNCkKLQlzdAklcjEsMCglcjE1KQorCXN0CSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQogCWxhCSVyMywwKCVyMykKIAlicmFzCSVyMTQsMGYKIAkubG9uZwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24KQEAgLTM4LDcgKzQwLDcgQEAKIAlzdGcJJXIxNCwxMTIoJXIxNSkKIAlsZ3IJJXIxLCVyMTUKIAlhZ2hpCSVyMTUsLTE2MAotCXN0ZwklcjEsMCglcjE1KQorCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAlsZ3IJJXIyLCVyMTQKIAlsZwklcjMsMTY4KCVyMTUpCiAJbGFybAklcjE0LGZ0cmFjZV90cmFjZV9mdW5jdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNTliNGU3OS4uZWVkNGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC0zMTAsMTUgKzMxMCwyMCBAQAogCQkJaW5mby0+cGx0X2luaXRpYWxpemVkID0gMTsKIAkJfQogCQlpZiAocl90eXBlID09IFJfMzkwX1BMVE9GRjE2IHx8Ci0JCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGMzIKLQkJICAgIHx8IHJfdHlwZSA9PSBSXzM5MF9QTFRPRkY2NAotCQkJKQorCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjMyIHx8CisJCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGNjQpCiAJCQl2YWwgPSBtZS0+YXJjaC5wbHRfb2Zmc2V0IC0gbWUtPmFyY2guZ290X29mZnNldCArCiAJCQkJaW5mby0+cGx0X29mZnNldCArIHJlbGEtPnJfYWRkZW5kOwotCQllbHNlCi0JCQl2YWwgPSAgKEVsZl9BZGRyKSBtZS0+bW9kdWxlX2NvcmUgKwotCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKyBpbmZvLT5wbHRfb2Zmc2V0ICsgCi0JCQkJcmVsYS0+cl9hZGRlbmQgLSBsb2M7CisJCWVsc2UgeworCQkJaWYgKCEoKHJfdHlwZSA9PSBSXzM5MF9QTFQxNkRCTCAmJgorCQkJICAgICAgIHZhbCAtIGxvYyArIDB4ZmZmZlVMIDwgMHgxZmZmZmVVTCkgfHwKKwkJCSAgICAgIChyX3R5cGUgPT0gUl8zOTBfUExUMzJEQkwgJiYKKwkJCSAgICAgICB2YWwgLSBsb2MgKyAweGZmZmZmZmZmVUxMIDwgMHgxZmZmZmZmZmVVTEwpKSkKKwkJCQl2YWwgPSAoRWxmX0FkZHIpIG1lLT5tb2R1bGVfY29yZSArCisJCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKworCQkJCQlpbmZvLT5wbHRfb2Zmc2V0OworCQkJdmFsICs9IHJlbGEtPnJfYWRkZW5kIC0gbG9jOworCQl9CiAJCWlmIChyX3R5cGUgPT0gUl8zOTBfUExUMTZEQkwpCiAJCQkqKHVuc2lnbmVkIHNob3J0ICopIGxvYyA9IHZhbCA+PiAxOwogCQllbHNlIGlmIChyX3R5cGUgPT0gUl8zOTBfUExUT0ZGMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKcmVuYW1lIHRvIGFyY2gvczM5MC9rZXJuZWwvbm1pLmMKaW5kZXggOTJiMDQxNy4uNGJmZGM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwpAQCAtMSwxMzcgKzEsMjMgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKLSAqICAgUy8zOTAgbWFjaGluZSBjaGVjayBoYW5kbGVyCisgKiAgIE1hY2hpbmUgY2hlY2sgaGFuZGxlcgogICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA4Ci0gKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIChhZGx1bmdAZGUuaWJtLmNvbSkKLSAqCQkgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQotICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+CisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyA8YWRsdW5nQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+LAorICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxhc20vZXRyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vY2lvLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9ldHIuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+Ci0jaW5jbHVkZSAiczM5MG1hY2guaCIKLQotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbV9zZW07Ci0KLXN0YXRpYyBOT1JFVF9UWVBFIHZvaWQKLXMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNtcF9zZW5kX3N0b3AoKTsKLSNlbmRpZgotCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZm9yKDs7KTsKLX0KLQotc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOwotCi0vKioKLSAqIHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKiBAaGFuZGxlcjogaGFuZGxlciB0byBiZSByZWdpc3RlcmVkCi0gKgotICogUmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotaW50IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKQotewotCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFjbXB4Y2hnKCZjcndfaGFuZGxlcnNbcnNjXSwgTlVMTCwgaGFuZGxlcikpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUJVU1k7Ci19Ci0KLS8qKgotICogczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKCkgLSB1bnJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKi8KLXZvaWQgczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MpCi17Ci0JaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQotCQlyZXR1cm47Ci0JeGNoZygmY3J3X2hhbmRsZXJzW3JzY10sIE5VTEwpOwotCXN5bmNocm9uaXplX3NjaGVkKCk7Ci19Ci0KLS8qCi0gKiBSZXRyaWV2ZSBDUldzIGFuZCBjYWxsIGZ1bmN0aW9uIHRvIGhhbmRsZSBldmVudC4KLSAqLwotc3RhdGljIGludCBzMzkwX2NvbGxlY3RfY3J3X2luZm8odm9pZCAqcGFyYW0pCi17Ci0Jc3RydWN0IGNydyBjcndbMl07Ci0JaW50IGNjb2RlOwotCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKLQl1bnNpZ25lZCBpbnQgY2hhaW47Ci0JaW50IGlnbm9yZTsKLQotCXNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopcGFyYW07Ci1yZXBlYXQ6Ci0JaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci0JY2hhaW4gPSAwOwotCXdoaWxlICgxKSB7Ci0JCWlmICh1bmxpa2VseShjaGFpbiA+IDEpKSB7Ci0JCQlzdHJ1Y3QgY3J3IHRtcF9jcnc7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvZGUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlICIKLQkJCSAgICAgICAidGhhbiB0d28gY2hhaW5lZCBjcndzOyBwbGVhc2UgcmVwb3J0IHRvICIKLQkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKLQkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgotCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHRtcF9jcncuc2xjdCwgdG1wX2Nydy5vZmx3LAotCQkJICAgICAgIHRtcF9jcncuY2huLCB0bXBfY3J3LnJzYywgdG1wX2Nydy5hbmMsCi0JCQkgICAgICAgdG1wX2Nydy5lcmMsIHRtcF9jcncucnNpZCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBUaGlzIHdhcyBjcncgbnVtYmVyICV4IGluIHRoZSAiCi0JCQkgICAgICAgImNoYWluXG4iLCBfX2Z1bmNfXywgY2hhaW4pOwotCQkJaWYgKGNjb2RlICE9IDApCi0JCQkJYnJlYWs7Ci0JCQljaGFpbiA9IHRtcF9jcncuY2huID8gY2hhaW4gKyAxIDogMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOwotCQlpZiAoY2NvZGUgIT0gMCkKLQkJCWJyZWFrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCi0JCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkgICAgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAotCQkgICAgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKLQkJICAgICAgIGNyd1tjaGFpbl0ucnNpZCk7Ci0JCS8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCi0JCWlmIChjcndbY2hhaW5dLm9mbHcpIHsKLQkJCWludCBpOwotCi0JCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBOUl9SU0NTOyBpKyspIHsKLQkJCQlpZiAoY3J3X2hhbmRsZXJzW2ldKQotCQkJCQljcndfaGFuZGxlcnNbaV0oTlVMTCwgTlVMTCwgMSk7Ci0JCQl9Ci0JCQljaGFpbiA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKLQkJCWNoYWluKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3X2hhbmRsZXJzW2Nyd1tjaGFpbl0ucnNjXSkKLQkJCWNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY10oJmNyd1swXSwKLQkJCQkJCSAgICAgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwKLQkJCQkJCSAgICAgMCk7Ci0JCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KLQkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7Ci0JfQotCWdvdG8gcmVwZWF0OwotCXJldHVybiAwOwotfQorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKIHN0cnVjdCBtY2NrX3N0cnVjdCB7CiAJaW50IGtpbGxfdGFzazsKQEAgLTE0MiwxMiArMjgsMTggQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2NrX3N0cnVjdCwgY3B1X21jY2spOwogCitzdGF0aWMgTk9SRVRfVFlQRSB2b2lkIHMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCit7CisJc21wX3NlbmRfc3RvcCgpOworCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJd2hpbGUgKDEpOworfQorCiAvKgogICogTWFpbiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgZnVuY3Rpb24uIFdpbGwgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkCiAgKiBvciBkaXNhYmxlZCBhbmQgbWFjaGluZSBjaGVja3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAqLwotdm9pZAotczM5MF9oYW5kbGVfbWNjayh2b2lkKQordm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWNja19zdHJ1Y3QgbWNjazsKQEAgLTE2NiwyOSArNTgsMjQgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAobWNjay5jaGFubmVsX3JlcG9ydCkKLQkJdXAoJm1fc2VtKTsKLQotI2lmZGVmIENPTkZJR19NQUNIQ0hLX1dBUk5JTkcKLS8qCi0gKiBUaGUgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KLSAqIChhY3R1YWxseSB0aWxsIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQgb2ZmLCBvciB1bnRpbCB0aGUgcHJvYmxlbSBpcyBnb25lKQotICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBwcmV2ZW50IGNvbnRpbnVvdXNseQotICogYmVpbmcgaW50ZXJydXB0ZWQuICBPbmUgY2F2ZWF0IGlzIGhvd2V2ZXIsIHRoYXQgd2UgbXVzdCBkbyB0aGlzIHBlcgotICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCi0gKiBPbiBWTSB3ZSBvbmx5IGdldCBvbmUgaW50ZXJydXB0IHBlciB2aXJ0YWxseSBwcmVzZW50ZWQgbWFjaGluZWNoZWNrLgotICogVGhvdWdoIG9uZSBzdWZmaWNlcywgd2UgbWF5IGdldCBvbmUgaW50ZXJydXB0IHBlciAodmlydHVhbCkgcHJvY2Vzc29yLgotICovCisJCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwkvKgorCSAqIEEgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KKwkgKiAoYWN0dWFsbHkgdW50aWwgdGhlIG1hY2hpbmUgaXMgcG93ZXJlZCBvZmYsIG9yIHRoZSBwcm9ibGVtIGlzIGdvbmUpCisJICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBhdm9pZCBjb250aW51b3VzbHkKKwkgKiBiZWluZyBpbnRlcnJ1cHRlZC4gIE9uZSBjYXZlYXQgaXMgaG93ZXZlciwgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgcGVyCisJICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCisJICogT24gVk0gd2Ugb25seSBnZXQgb25lIGludGVycnVwdCBwZXIgdmlydGFsbHkgcHJlc2VudGVkIG1hY2hpbmVjaGVjay4KKwkgKiBUaG91Z2ggb25lIHN1ZmZpY2VzLCB3ZSBtYXkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyICh2aXJ0dWFsKSBjcHUuCisJICovCiAJaWYgKG1jY2sud2FybmluZykgewkvKiBXQVJOSU5HIHBlbmRpbmcgPyAqLwogCQlzdGF0aWMgaW50IG1jaGNoa193bmdfcG9zdGVkID0gMDsKLQkJLyoKLQkJICogVXNlIHNpbmdsZSBtYWNoaW5lIGNsZWFyLCBhcyB3ZSBjYW5ub3QgaGFuZGxlIHNtcCByaWdodCBub3cKLQkJICovCisKKwkJLyogVXNlIHNpbmdsZSBjcHUgY2xlYXIsIGFzIHdlIGNhbm5vdCBoYW5kbGUgc21wIGhlcmUuICovCiAJCV9fY3RsX2NsZWFyX2JpdCgxNCwgMjQpOwkvKiBEaXNhYmxlIFdBUk5JTkcgTUNIICovCiAJCWlmICh4Y2hnKCZtY2hjaGtfd25nX3Bvc3RlZCwgMSkgPT0gMCkKIAkJCWtpbGxfY2FkX3BpZChTSUdQV1IsIDEpOwogCX0KLSNlbmRpZgotCiAJaWYgKG1jY2sua2lsbF90YXNrKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIm1jY2s6IFRlcm1pbmF0aW5nIHRhc2sgYmVjYXVzZSBvZiBtYWNoaW5lICIKQEAgLTIwNCw4ICs5MSw3IEBACiAgKiByZXR1cm5zIDAgaWYgYWxsIHJlZ2lzdGVycyBjb3VsZCBiZSB2YWxpZGF0ZWQKICAqIHJldHVybnMgMSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludAotczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCitzdGF0aWMgaW50IG5vdHJhY2UgczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCiB7CiAJaW50IGtpbGxfdGFzazsKIAl1NjQgdG1wY2xvY2s7CkBAIC0yMTQsMjIgKzEwMCwyMSBAQAogCiAJa2lsbF90YXNrID0gMDsKIAl6ZXJvID0gMDsKLQkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmdyKQorCisJaWYgKCFtY2ktPmdyKSB7CiAJCS8qCiAJCSAqIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgY291bGRuJ3QgYmUgcmVzdG9yZWQgYW5kIGhhdmUKIAkJICogdW5rbm93biBjb250ZW50cy4gUHJvY2VzcyBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgogCQkgKi8KIAkJa2lsbF90YXNrID0gMTsKLQotCS8qIFJldmFsaWRhdGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmZwKQorCX0KKwlpZiAoIW1jaS0+ZnApIHsKIAkJLyoKIAkJICogRmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGNhbid0IGJlIHJlc3RvcmVkIGFuZAogCQkgKiB0aGVyZWZvcmUgdGhlIHByb2Nlc3MgbmVlZHMgdG8gYmUgdGVybWluYXRlZC4KIAkJICovCiAJCWtpbGxfdGFzayA9IDE7Ci0KKwl9CiAjaWZuZGVmIENPTkZJR182NEJJVAogCWFzbSB2b2xhdGlsZSgKIAkJIglsZAkwLDAoJTApXG4iCkBAIC0yNDUsOSArMTMwLDggQEAKIAkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gJlMzOTBfbG93Y29yZS5mcHRfY3JlZ19zYXZlX2FyZWE7CiAjZWxzZQogCQlmcHRfc2F2ZV9hcmVhID0gKHZvaWQgKikgUzM5MF9sb3djb3JlLmV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwotCQlmcHRfY3JlZ19zYXZlX2FyZWEgPSBmcHRfc2F2ZV9hcmVhKzEyODsKKwkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gZnB0X3NhdmVfYXJlYSArIDEyODsKICNlbmRpZgotCQkvKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyICovCiAJCWlmICghbWNpLT5mYykgewogCQkJLyoKIAkJCSAqIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIgY2FuJ3QgYmUgcmVzdG9yZWQuCkBAIC0yNzgsMjYgKzE2MiwyNSBAQAogCQkJIglsZAkxNSwxMjAoJTApXG4iCiAJCQk6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7CiAJfQotCiAJLyogUmV2YWxpZGF0ZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJYXNtIHZvbGF0aWxlKAogCQkiCWxhbQkwLDE1LDAoJTApIgogCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOwotCWlmICghbWNpLT5hcikKKwlpZiAoIW1jaS0+YXIpIHsKIAkJLyoKIAkJICogQWNjZXNzIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCiAJCSAqIFRlcm1pbmF0aW5nIHRhc2suCiAJCSAqLwogCQlraWxsX3Rhc2sgPSAxOwotCisJfQogCS8qIFJldmFsaWRhdGUgY29udHJvbCByZWdpc3RlcnMgKi8KLQlpZiAoIW1jaS0+Y3IpCisJaWYgKCFtY2ktPmNyKSB7CiAJCS8qCiAJCSAqIENvbnRyb2wgcmVnaXN0ZXJzIGhhdmUgdW5rbm93biBjb250ZW50cy4KIAkJICogQ2FuJ3QgcmVjb3ZlciBhbmQgdGhlcmVmb3JlIHN0b3BwaW5nIG1hY2hpbmUuCiAJCSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoImludmFsaWQgY29udHJvbCByZWdpc3RlcnMuIik7Ci0JZWxzZQorCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHXzY0QklUCiAJCWFzbSB2b2xhdGlsZSgKIAkJCSIJbGN0bGcJMCwxNSwwKCUwKSIKQEAgLTMwNywxMiArMTkwLDExIEBACiAJCQkiCWxjdGwJMCwxNSwwKCUwKSIKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7CiAjZW5kaWYKLQorCX0KIAkvKgogCSAqIFdlIGRvbid0IGV2ZW4gdHJ5IHRvIHJldmFsaWRhdGUgdGhlIFRPRCByZWdpc3Rlciwgc2luY2Ugd2Ugc2ltcGx5CiAJICogY2FuJ3Qgd3JpdGUgc29tZXRoaW5nIHNlbnNpYmxlIGludG8gdGhhdCByZWdpc3Rlci4KIAkgKi8KLQogI2lmZGVmIENPTkZJR182NEJJVAogCS8qCiAJICogU2VlIGlmIHdlIGNhbiByZXZhbGlkYXRlIHRoZSBUT0QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHdpdGggaXRzCkBAIC0zMzAsNyArMjEyLDYgQEAKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUudG9kX3Byb2dyZWdfc2F2ZV9hcmVhKQogCQkJOiAiMCIsICJjYyIpOwogI2VuZGlmCi0KIAkvKiBSZXZhbGlkYXRlIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KIAlhc20gdm9sYXRpbGUoCiAJCSIJc3RjawkwKCUxKVxuIgpAQCAtMzU0LDMyICsyMzUsMzUgQEAKICNkZWZpbmUgTUFYX0lQRF9DT1VOVAkyOQogI2RlZmluZSBNQVhfSVBEX1RJTUUJKDUgKiA2MCAqIFVTRUNfUEVSX1NFQykgLyogNSBtaW51dGVzICovCiAKKyNkZWZpbmUgRURfU1RQX0lTTEFORAk2CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgaXNsYW5kIGNoZWNrICovCisjZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCisjZGVmaW5lIEVEX0VUUl9TWU5DCTEyCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3luYyBjaGVjayAqLworI2RlZmluZSBFRF9FVFJfU1dJVENICTEzCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3dpdGNoIHRvIGxvY2FsICovCisKIC8qCiAgKiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuCiAgKi8KLXZvaWQKLXMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgbm90cmFjZSBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RhdGljIGludCBpcGRfY291bnQ7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhpcGRfbG9jayk7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X2lwZDsKLQlzdGF0aWMgaW50IGlwZF9jb3VudDsKKwlzdHJ1Y3QgbWNja19zdHJ1Y3QgKm1jY2s7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAlzdHJ1Y3QgbWNpICptY2k7Ci0Jc3RydWN0IG1jY2tfc3RydWN0ICptY2NrOwogCWludCB1bW9kZTsKIAogCWxvY2tkZXBfb2ZmKCk7Ci0KIAlzMzkwX2lkbGVfY2hlY2soKTsKIAogCW1jaSA9IChzdHJ1Y3QgbWNpICopICZTMzkwX2xvd2NvcmUubWNja19pbnRlcnJ1cHRpb25fY29kZTsKIAltY2NrID0gJl9fZ2V0X2NwdV92YXIoY3B1X21jY2spOwogCXVtb2RlID0gdXNlcl9tb2RlKHJlZ3MpOwogCi0JaWYgKG1jaS0+c2QpCisJaWYgKG1jaS0+c2QpIHsKIAkJLyogU3lzdGVtIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3lzdGVtIGRhbWFnZSBtYWNoaW5lIGNoZWNrLiIpOwotCisJfQogCWlmIChtY2ktPnBkKSB7CiAJCWlmIChtY2ktPmIpIHsKIAkJCS8qIFByb2Nlc3NpbmcgYmFja3VwIC0+IHZlcmlmeSBpZiB3ZSBjYW4gc3Vydml2ZSB0aGlzICovCkBAIC00MDksMjQgKzI5MywxNyBAQAogCQkJICogTnVsbGlmeWluZyBleGlnZW50IGNvbmRpdGlvbiwgdGhlcmVmb3JlIHdlIG1pZ2h0CiAJCQkgKiByZXRyeSB0aGlzIGluc3RydWN0aW9uLgogCQkJICovCi0KIAkJCXNwaW5fbG9jaygmaXBkX2xvY2spOwotCiAJCQl0bXAgPSBnZXRfY2xvY2soKTsKLQogCQkJaWYgKCgodG1wIC0gbGFzdF9pcGQpID4+IDEyKSA8IE1BWF9JUERfVElNRSkKIAkJCQlpcGRfY291bnQrKzsKIAkJCWVsc2UKIAkJCQlpcGRfY291bnQgPSAxOwotCiAJCQlsYXN0X2lwZCA9IHRtcDsKLQogCQkJaWYgKGlwZF9jb3VudCA9PSBNQVhfSVBEX0NPVU5UKQogCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidG9vIG1hbnkgaXBkIHJldHJpZXMuIik7Ci0KIAkJCXNwaW5fdW5sb2NrKCZpcGRfbG9jayk7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBQcm9jZXNzaW5nIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIGluc3RydWN0aW9uIHByb2Nlc3NpbmcgIgogCQkJCQkgICAiZGFtYWdlIG1hY2hpbmUgY2hlY2suIik7CkBAIC00NDEsMjAgKzMxOCwxOCBAQAogCQkJbWNjay0+a2lsbF90YXNrID0gMTsKIAkJCW1jY2stPm1jY2tfY29kZSA9ICoodW5zaWduZWQgbG9uZyBsb25nICopIG1jaTsKIAkJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKLQkJfQotCQllbHNlCisJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogQ291bGRuJ3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXIgY29udGVudHMgd2hpbGUgaW4KIAkJCSAqIGtlcm5lbCBtb2RlIC0+IHN0b3BwaW5nIG1hY2hpbmUuCiAJCQkgKi8KIAkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidW5hYmxlIHRvIHJldmFsaWRhdGUgcmVnaXN0ZXJzLiIpOworCQl9CiAJfQotCiAJaWYgKG1jaS0+Y2QpIHsKIAkJLyogVGltaW5nIGZhY2lsaXR5IGRhbWFnZSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoIlRPRCBjbG9jayBkYW1hZ2VkIik7CiAJfQotCiAJaWYgKG1jaS0+ZWQgJiYgbWNpLT5lYykgewogCQkvKiBFeHRlcm5hbCBkYW1hZ2UgKi8KIAkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9FVFJfU1lOQykpCkBAIC00NjYsMjggKzM0MSwyMyBAQAogCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX1NUUF9JU0xBTkQpKQogCQkJc3RwX2lzbGFuZF9jaGVjaygpOwogCX0KLQogCWlmIChtY2ktPnNlKQogCQkvKiBTdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5rZSkKIAkJLyogU3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgKi8KIAkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGtleS1lcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5kcyAmJiBtY2ktPmZhKQogCQkvKiBTdG9yYWdlIGRlZ3JhZGF0aW9uICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBkZWdyYWRhdGlvbiBtYWNoaW5lICIKIAkJCQkgICAiY2hlY2suIik7Ci0KIAlpZiAobWNpLT5jcCkgewogCQkvKiBDaGFubmVsIHJlcG9ydCB3b3JkIHBlbmRpbmcgKi8KIAkJbWNjay0+Y2hhbm5lbF9yZXBvcnQgPSAxOwogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CiAJfQotCiAJaWYgKG1jaS0+dykgewogCQkvKiBXYXJuaW5nIHBlbmRpbmcgKi8KIAkJbWNjay0+d2FybmluZyA9IDE7CkBAIC00OTYsNDMgKzM2NiwxMSBAQAogCWxvY2tkZXBfb24oKTsKIH0KIAotLyoKLSAqIHMzOTBfaW5pdF9tYWNoaW5lX2NoZWNrCi0gKgotICogaW5pdGlhbGl6ZSBtYWNoaW5lIGNoZWNrIGhhbmRsaW5nCi0gKi8KLXN0YXRpYyBpbnQKLW1hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbWFjaGluZV9jaGVja19pbml0KHZvaWQpCiB7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJm1fc2VtKTsKIAljdGxfc2V0X2JpdCgxNCwgMjUpOwkvKiBlbmFibGUgZXh0ZXJuYWwgZGFtYWdlIE1DSCAqLwotCWN0bF9zZXRfYml0KDE0LCAyNyk7ICAgIC8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCi0jaWZkZWYgQ09ORklHX01BQ0hDSEtfV0FSTklORworCWN0bF9zZXRfYml0KDE0LCAyNyk7CS8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCiAJY3RsX3NldF9iaXQoMTQsIDI0KTsJLyogZW5hYmxlIHdhcm5pbmcgTUNIICovCi0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIG1hY2hpbmUgY2hlY2sgaGFuZGxlciByZWFsbHkgZWFybHkgdG8gYmUgYWJsZSB0bwotICogY2F0Y2ggYWxsIG1hY2hpbmUgY2hlY2tzIHRoYXQgaGFwcGVuIGR1cmluZyBib290Ci0gKi8KIGFyY2hfaW5pdGNhbGwobWFjaGluZV9jaGVja19pbml0KTsKLQotLyoKLSAqIE1hY2hpbmUgY2hlY2tzIGZvciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gbXVzdCBiZSBlbmFibGVkCi0gKiBhZnRlciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQKLSAqLwotc3RhdGljIGludCBfX2luaXQKLW1hY2hpbmVfY2hlY2tfY3J3X2luaXQgKHZvaWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCi0JdGFzayA9IGt0aHJlYWRfcnVuKHMzOTBfY29sbGVjdF9jcndfaW5mbywgJm1fc2VtLCAia21jaGVjayIpOwotCWlmIChJU19FUlIodGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHRhc2spOwotCWN0bF9zZXRfYml0KDE0LCAyOCk7CS8qIGVuYWJsZSBjaGFubmVsIHJlcG9ydCBNQ0ggKi8KLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsIChtYWNoaW5lX2NoZWNrX2Nyd19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWNkMzhhOS4uYjQ4ZTk2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsMTggKzEsMTAgQEAKIC8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuCiAgKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAotICoKLSAqICBEZXJpdmVkIGZyb20gImFyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIgotICogICAgQ29weXJpZ2h0IChDKSAxOTk1LCBMaW51cyBUb3J2YWxkcwotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDA5CisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIEhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KQEAgLTQ3LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBhc20gKCJyZXRfZnJvbV9mb3JrIik7CkBAIC03Niw3ICs2OSw2IEBACiAJcmV0dXJuIHNmLT5ncHJzWzhdOwogfQogCi1leHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwogLyoKICAqIFRoZSBpZGxlIGxvb3Agb24gYSBTMzkwLi4uCiAgKi8KQEAgLTE0OSw2ICsxNDEsNyBAQAogCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwKIAkJICAgICAgIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KK0VYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKIC8qCiAgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgpAQCAtMTY4LDM0ICsxNjEsMzUgQEAKIH0KIAogaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAotCXVuc2lnbmVkIGxvbmcgdW51c2VkLAotICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCisJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAorCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotICAgICAgICBzdHJ1Y3QgZmFrZV9mcmFtZQotICAgICAgICAgIHsKLQkgICAgc3RydWN0IHN0YWNrX2ZyYW1lIHNmOwotICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOwotICAgICAgICAgIH0gKmZyYW1lOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJc3RydWN0IGZha2VfZnJhbWUKKwl7CisJCXN0cnVjdCBzdGFja19mcmFtZSBzZjsKKwkJc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOworCX0gKmZyYW1lOwogCi0gICAgICAgIGZyYW1lID0gY29udGFpbmVyX29mKHRhc2tfcHRfcmVncyhwKSwgc3RydWN0IGZha2VfZnJhbWUsIGNoaWxkcmVncyk7Ci0gICAgICAgIHAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJZnJhbWUgPSBjb250YWluZXJfb2YodGFza19wdF9yZWdzKHApLCBzdHJ1Y3QgZmFrZV9mcmFtZSwgY2hpbGRyZWdzKTsKKwlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwogCS8qIFN0b3JlIGFjY2VzcyByZWdpc3RlcnMgdG8ga2VybmVsIHN0YWNrIG9mIG5ldyBwcm9jZXNzLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzID0gKnJlZ3M7CisJZnJhbWUtPmNoaWxkcmVncyA9ICpyZWdzOwogCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1syXSA9IDA7CS8qIGNoaWxkIHJldHVybnMgMCBvbiBmb3JrLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMTVdID0gbmV3X3N0YWNrcDsKLSAgICAgICAgZnJhbWUtPnNmLmJhY2tfY2hhaW4gPSAwOworCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1sxNV0gPSBuZXdfc3RhY2twOworCWZyYW1lLT5zZi5iYWNrX2NoYWluID0gMDsKIAotICAgICAgICAvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KLSAgICAgICAgZnJhbWUtPnNmLmdwcnNbOF0gPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKKwkvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KKwlmcmFtZS0+c2YuZ3Byc1s4XSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0gICAgICAgIC8qIGZha2UgcmV0dXJuIHN0YWNrIGZvciByZXN1bWUoKSwgZG9uJ3QgZ28gYmFjayB0byBzY2hlZHVsZSAqLwotICAgICAgICBmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKKwkvKiBmYWtlIHJldHVybiBzdGFjayBmb3IgcmVzdW1lKCksIGRvbid0IGdvIGJhY2sgdG8gc2NoZWR1bGUgKi8KKwlmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAogCS8qIFNhdmUgYWNjZXNzIHJlZ2lzdGVycyB0byBuZXcgdGhyZWFkIHN0cnVjdHVyZS4gKi8KIAlzYXZlX2FjY2Vzc19yZWdzKCZwLT50aHJlYWQuYWNyc1swXSk7CiAKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGNoaWxkLgogCSAqLwpAQCAtMjIwLDEwICsyMTQsMTMgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAkvKiBzdGFydCBuZXcgcHJvY2VzcyB3aXRoIGFyNCBwb2ludGluZyB0byB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlICovCiAJcC0+dGhyZWFkLm1tX3NlZ21lbnQgPSBnZXRfZnMoKTsKLSAgICAgICAgLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KLSAgICAgICAgbWVtc2V0KCZwLT50aHJlYWQucGVyX2luZm8sMCxzaXplb2YocC0+dGhyZWFkLnBlcl9pbmZvKSk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisJLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KKwltZW1zZXQoJnAtPnRocmVhZC5wZXJfaW5mbywgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfaW5mbykpOworCS8qIEluaXRpYWxpemUgcGVyIHRocmVhZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXIgdmFsdWVzICovCisJdGkgPSB0YXNrX3RocmVhZF9pbmZvKHApOworCXRpLT51c2VyX3RpbWVyID0gMDsKKwl0aS0+c3lzdGVtX3RpbWVyID0gMDsKKwlyZXR1cm4gMDsKIH0KIAogU1lTQ0FMTF9ERUZJTkUwKGZvcmspCkBAIC0zMTEsNyArMzA4LDcgQEAKIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGR1bXAuCiAJICovCkBAIC0zMjIsNiArMzE5LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC0zNDYsNCArMzQ0LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgyYzE4NzIuLjgwMmM4YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMTgsMTAgKzE4LDExIEBACiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KIAotdm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbykKK3ZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHZvaWQpCiB7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0YXJ0ZWQsIGFkZHJlc3MgJWQsIGlkZW50aWZpY2F0aW9uICUwNlhcbiIsCi0JCWNwdWluZm8tPmNwdV9uciwgY3B1aW5mby0+Y3B1X2FkZHIsIGNwdWluZm8tPmNwdV9pZC5pZGVudCk7CisJCVMzOTBfbG93Y29yZS5jcHVfbnIsIFMzOTBfbG93Y29yZS5jcHVfYWRkciwKKwkJUzM5MF9sb3djb3JlLmNwdV9pZC5pZGVudCk7CiB9CiAKIC8qCkBAIC0zMCw0OCArMzEsNDYgQEAKIAogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbOF0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IgorCQkiZWRhdCIsICJldGYzZWgiCiAJfTsKLSAgICAgICBzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKLSAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgX2xvd2NvcmUgKmxjOworCXVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKKwlpbnQgaTsKIAotICAgICAgIHMzOTBfYWRqdXN0X2ppZmZpZXMoKTsKLSAgICAgICBwcmVlbXB0X2Rpc2FibGUoKTsKLSAgICAgICBpZiAoIW4pIHsKLQkgICAgICAgc2VxX3ByaW50ZihtLCAidmVuZG9yX2lkICAgICAgIDogSUJNL1MzOTBcbiIKLQkJCSAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCi0JCQkgICJib2dvbWlwcyBwZXIgY3B1OiAlbHUuJTAybHVcbiIsCi0JCQkgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCi0JCQkgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOwotCSAgICAgICBzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7Ci0JICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCSAgICAgICBpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKLQkJCSAgICAgICBzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwotCSAgICAgICBzZXFfcHV0cyhtLCAiXG4iKTsKLSAgICAgICB9CisJczM5MF9hZGp1c3RfamlmZmllcygpOworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICghbikgeworCQlzZXFfcHJpbnRmKG0sICJ2ZW5kb3JfaWQgICAgICAgOiBJQk0vUzM5MFxuIgorCQkJICAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCisJCQkgICAiYm9nb21pcHMgcGVyIGNwdTogJWx1LiUwMmx1XG4iLAorCQkJICAgbnVtX29ubGluZV9jcHVzKCksIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkJCSAgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOworCQlzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKKwkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOworCQlzZXFfcHV0cyhtLCAiXG4iKTsKKwl9CiAKLSAgICAgICBpZiAoY3B1X29ubGluZShuKSkgeworCWlmIChjcHVfb25saW5lKG4pKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCSAgICAgICBpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IG4pCi0JCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKLQkgICAgICAgZWxzZQotCQkgICAgICAgY3B1aW5mbyA9ICZsb3djb3JlX3B0cltuXS0+Y3B1X2RhdGE7CisJCWxjID0gKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBuKSA/CisJCQkmUzM5MF9sb3djb3JlIDogbG93Y29yZV9wdHJbbl07CiAjZWxzZQotCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKKwkJbGMgPSAmUzM5MF9sb3djb3JlOwogI2VuZGlmCi0JICAgICAgIHNlcV9wcmludGYobSwgInByb2Nlc3NvciAlbGk6ICIKLQkJCSAgInZlcnNpb24gPSAlMDJYLCAgIgotCQkJICAiaWRlbnRpZmljYXRpb24gPSAlMDZYLCAgIgotCQkJICAibWFjaGluZSA9ICUwNFhcbiIsCi0JCQkgIG4sIGNwdWluZm8tPmNwdV9pZC52ZXJzaW9uLAotCQkJICBjcHVpbmZvLT5jcHVfaWQuaWRlbnQsCi0JCQkgIGNwdWluZm8tPmNwdV9pZC5tYWNoaW5lKTsKLSAgICAgICB9Ci0gICAgICAgcHJlZW1wdF9lbmFibGUoKTsKLSAgICAgICByZXR1cm4gMDsKKwkJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yICVsaTogIgorCQkJICAgInZlcnNpb24gPSAlMDJYLCAgIgorCQkJICAgImlkZW50aWZpY2F0aW9uID0gJTA2WCwgICIKKwkJCSAgICJtYWNoaW5lID0gJTA0WFxuIiwKKwkJCSAgIG4sIGxjLT5jcHVfaWQudmVyc2lvbiwKKwkJCSAgIGxjLT5jcHVfaWQuaWRlbnQsCisJCQkgICBsYy0+Y3B1X2lkLm1hY2hpbmUpOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwppbmRleCBjNDE5MzA0Li43NzQxNDc4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwpAQCAtMSwxMCArMSw3IEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgKEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbSkKLQkJIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycCAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KQEAgLTMwLDcgKzI3LDcgQEAKIAkJbXZjCV9fTENfUFJFRklYX1NBVkVfQVJFQS0weDEwMDAoNCwlcjEpLDAoJXIxMCkKIAkJc3RmcGMJX19MQ19GUF9DUkVHX1NBVkVfQVJFQS0weDEwMDAoJXIxKQogCQlzdGNrYwkuTGNsa2NtcC0uTHBnMCglcjEzKQotCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQS0weDEwMDAoOCwlcjEpLC5MY2xrY21wLS5McGcwKCVyMTMpCisJCW12YwlfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLTB4MTAwMCg3LCVyMSksLkxjbGtjbXAtLkxwZzAoJXIxMykKIAkJc3RwdAlfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3RnCSVyMTMsIF9fTENfUFNXX1NBVkVfQVJFQS0weDEwMDArOCglcjEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKaW5kZXggNDZiOTBjYi4uNjU2ZmNiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKQEAgLTEsNDkgKzEsNSBAQAotLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8YXNtL2NwY21kLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vZnRyYWNlLmg+Ci0jaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAotI2luY2x1ZGUgPG5ldC9hcnAuaD4KLSNlbmRpZgotCi0vKgotICogbWVtb3J5IG1hbmFnZW1lbnQKLSAqLwotRVhQT1JUX1NZTUJPTChfb2lfYml0bWFwKTsKLUVYUE9SVF9TWU1CT0woX25pX2JpdG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF96Yl9maW5kbWFwKTsKLUVYUE9SVF9TWU1CT0woX3NiX2ZpbmRtYXApOwotCi0vKgotICogYmluZm10X2VsZiBsb2FkZXIgCi0gKi8KLWV4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICogcmVncywgczM5MF9mcF9yZWdzICpmcHJlZ3MpOwotRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7Ci1FWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7Ci0KLS8qCi0gKiBtaXNjLgotICovCi1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfZmxhZ3MpOwotRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwotRVhQT1JUX1NZTUJPTChjc3VtX2ZvbGQpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX21vZGUpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX2Rldm5vKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9pcnEpOwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCBkODI1ZjQ5Li4wNjIwMWI5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03NCwxNSArNzQsMjkgQEAKICAqIE1hY2hpbmUgc2V0dXAuLgogICovCiB1bnNpZ25lZCBpbnQgY29uc29sZV9tb2RlID0gMDsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9tb2RlKTsKKwogdW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm8gPSAtMTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9kZXZubyk7CisKIHVuc2lnbmVkIGludCBjb25zb2xlX2lycSA9IC0xOworRVhQT1JUX1NZTUJPTChjb25zb2xlX2lycSk7CisKIHVuc2lnbmVkIGxvbmcgbWFjaGluZV9mbGFnczsKK0VYUE9SVF9TWU1CT0wobWFjaGluZV9mbGFncyk7CisKIHVuc2lnbmVkIGxvbmcgZWxmX2h3Y2FwID0gMDsKIGNoYXIgZWxmX3BsYXRmb3JtW0VMRl9QTEFURk9STV9TSVpFXTsKIAogc3RydWN0IG1lbV9jaHVuayBfX2luaXRkYXRhIG1lbW9yeV9jaHVua1tNRU1PUllfQ0hVTktTXTsKIHZvbGF0aWxlIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsgLyogbG9naWNhbCBjcHUgdG8gY3B1IGFkZHJlc3MgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKKworaW50IF9faW5pdGRhdGEgbWVtb3J5X2VuZF9zZXQ7Cit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKKworLyogQW4gYXJyYXkgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGxvd2NvcmUgb2YgZXZlcnkgQ1BVLiAqLworc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKK0VYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOwogCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCkBAIC0xMDcsMTMgKzEyMSwxMCBAQAogICovCiB2b2lkIF9fY3B1aW5pdCBjcHVfaW5pdCh2b2lkKQogewotICAgICAgICBpbnQgYWRkciA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAgICAgICAgIC8qCiAgICAgICAgICAqIFN0b3JlIHByb2Nlc3NvciBpZCBpbiBsb3djb3JlICh1c2VkIGUuZy4gaW4gdGltZXJfaW50ZXJydXB0KQogICAgICAgICAgKi8KLQlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2lkKTsKLSAgICAgICAgUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyID0gYWRkcjsKKwlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2lkKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBGb3JjZSBGUFUgaW5pdGlhbGl6YXRpb246CkBAIC0xMjMsOCArMTM0LDcgQEAKIAogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCWN1cnJlbnQtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotICAgICAgICBpZiAoY3VycmVudC0+bW0pCi0gICAgICAgICAgICAgICAgQlVHKCk7CisJQlVHX09OKGN1cnJlbnQtPm1tKTsKICAgICAgICAgZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIGN1cnJlbnQpOwogfQogCkBAIC0yMTUsNyArMjI1LDcgQEAKIAl9CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aRkNQRFVNUCkgfHwgZGVmaW5lZChDT05GSUdfWkZDUERVTVBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19aRkNQRFVNUAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3pmY3BkdW1wKHVuc2lnbmVkIGludCBjb25zb2xlX2Rldm5vKQogewogCXN0YXRpYyBjaGFyIHN0cls0MV07CkBAIC0yODEsMTYgKzI5MSwxMyBAQAogc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApCiB7CiAJbWVtb3J5X2VuZCA9IG1lbXBhcnNlKHAsICZwKTsKKwltZW1vcnlfZW5kX3NldCA9IDE7CiAJcmV0dXJuIDA7CiB9CiBlYXJseV9wYXJhbSgibWVtIiwgZWFybHlfcGFyc2VfbWVtKTsKIAogI2lmZGVmIENPTkZJR19TMzkwX1NXSVRDSF9BTU9ERQotI2lmZGVmIENPTkZJR19QR1NURQotdW5zaWduZWQgaW50IHN3aXRjaF9hbW9kZSA9IDE7Ci0jZWxzZQogdW5zaWduZWQgaW50IHN3aXRjaF9hbW9kZSA9IDA7Ci0jZW5kaWYKIEVYUE9SVF9TWU1CT0xfR1BMKHN3aXRjaF9hbW9kZSk7CiAKIHN0YXRpYyBpbnQgc2V0X2Ftb2RlX2FuZF91YWNjZXNzKHVuc2lnbmVkIGxvbmcgdXNlcl9hbW9kZSwKQEAgLTQxMSw3ICs0MTgsNiBAQAogCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSBtY2NrX2ludF9oYW5kbGVyOwogCWxjLT5pb19uZXdfcHN3Lm1hc2sgPSBwc3dfa2VybmVsX2JpdHM7CiAJbGMtPmlvX25ld19wc3cuYWRkciA9IFBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIGlvX2ludF9oYW5kbGVyOwotCWxjLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJbGMtPmNsb2NrX2NvbXBhcmF0b3IgPSAtMVVMTDsKIAlsYy0+a2VybmVsX3N0YWNrID0gKCh1bnNpZ25lZCBsb25nKSAmaW5pdF90aHJlYWRfdW5pb24pICsgVEhSRUFEX1NJWkU7CiAJbGMtPmFzeW5jX3N0YWNrID0gKHVuc2lnbmVkIGxvbmcpCkBAIC00MzEsNiArNDM3LDcgQEAKIAlsYy0+dmRzb19wZXJfY3B1X2RhdGEgPSAodW5zaWduZWQgbG9uZykgJmxjLT5wYXN0ZVswXTsKICNlbmRpZgogCXNldF9wcmVmaXgoKHUzMikodW5zaWduZWQgbG9uZykgbGMpOworCWxvd2NvcmVfcHRyWzBdID0gbGM7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApAQCAtNTA3LDkgKzUxNCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X21lbTsKIAlpbnQgaTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19aRkNQRFVNUF9NT0RVTEUpCi0JaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQX0RVTVApCisjaWZkZWYgQ09ORklHX1pGQ1BEVU1QCisJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQX0RVTVApIHsKIAkJbWVtb3J5X2VuZCA9IFpGQ1BEVU1QX0hTQV9TSVpFOworCQltZW1vcnlfZW5kX3NldCA9IDE7CisJfQogI2VuZGlmCiAJbWVtb3J5X3NpemUgPSAwOwogCW1lbW9yeV9lbmQgJj0gUEFHRV9NQVNLOwpAQCAtNjcyLDcgKzY4MSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaHdjYXBzKHZvaWQpCiB7CiAJc3RhdGljIGNvbnN0IGludCBzdGZsX2JpdHNbNl0gPSB7IDAsIDIsIDcsIDE3LCAxOSwgMjEgfTsKLQlzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZmFjaWxpdHlfbGlzdF9leHRlbmRlZDsKIAl1bnNpZ25lZCBpbnQgZmFjaWxpdHlfbGlzdDsKIAlpbnQgaTsKQEAgLTY4OCwxNSArNjk2LDIyIEBACiAJICogICBCaXQgMTc6IHRoZSBtZXNzYWdlLXNlY3VyaXR5IGFzc2lzdCBpcyBpbnN0YWxsZWQKIAkgKiAgIEJpdCAxOTogdGhlIGxvbmctZGlzcGxhY2VtZW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqICAgQml0IDIxOiB0aGUgZXh0ZW5kZWQtaW1tZWRpYXRlIGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDIyOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGlzIGluc3RhbGxlZAorCSAqICAgQml0IDMwOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGVuaGFuY2VtZW50IGZhY2lsaXR5CiAJICogVGhlc2UgZ2V0IHRyYW5zbGF0ZWQgdG86CiAJICogICBIV0NBUF9TMzkwX0VTQU4zIGJpdCAwLCBIV0NBUF9TMzkwX1pBUkNIIGJpdCAxLAogCSAqICAgSFdDQVBfUzM5MF9TVEZMRSBiaXQgMiwgSFdDQVBfUzM5MF9NU0EgYml0IDMsCi0JICogICBIV0NBUF9TMzkwX0xESVNQIGJpdCA0LCBhbmQgSFdDQVBfUzM5MF9FSU1NIGJpdCA1LgorCSAqICAgSFdDQVBfUzM5MF9MRElTUCBiaXQgNCwgSFdDQVBfUzM5MF9FSU1NIGJpdCA1IGFuZAorCSAqICAgSFdDQVBfUzM5MF9FVEYzRUggYml0IDggKDIyICYmIDMwKS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlpZiAoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gc3RmbF9iaXRzW2ldKSkpCiAJCQllbGZfaHdjYXAgfD0gMVVMIDw8IGk7CiAKKwlpZiAoKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDIyKSkpCisJICAgICYmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAzMCkpKSkKKwkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA4OworCiAJLyoKIAkgKiBDaGVjayBmb3IgYWRkaXRpb25hbCBmYWNpbGl0aWVzIHdpdGggc3RvcmUtZmFjaWxpdHktbGlzdC1leHRlbmRlZC4KIAkgKiBzdGZsZSBzdG9yZXMgZG91Ymxld29yZHMgKDggYnl0ZSkgd2l0aCBiaXQgMVVMTDw8NjMgYXMgYml0IDAKQEAgLTcwNSwyMCArNzIwLDIyIEBACiAJICogSG93IG1hbnkgZmFjaWxpdHkgd29yZHMgYXJlIHN0b3JlZCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKIAkgKiBkb3VibGV3b3JkcyBwYXNzZWQgdG8gdGhlIGluc3RydWN0aW9uLiBUaGUgYWRkaXRpb25hbCBmYWNpbGl0ZXMKIAkgKiBhcmU6Ci0JICogICBCaXQgNDM6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDI6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDQ6IHBlcmZvcm0gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uIGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqIHRyYW5zbGF0ZWQgdG86Ci0JICogICBIV0NBUF9TMzkwX0RGUCBiaXQgNi4KKwkgKiAgIEhXQ0FQX1MzOTBfREZQIGJpdCA2ICg0MiAmJiA0NCkuCiAJICovCiAJaWYgKChlbGZfaHdjYXAgJiAoMVVMIDw8IDIpKSAmJgogCSAgICBfX3N0ZmxlKCZmYWNpbGl0eV9saXN0X2V4dGVuZGVkLCAxKSA+IDApIHsKLQkJaWYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjQgLSA0MykpKQorCQlpZiAoKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0MikpKQorCQkgICAgJiYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0NCkpKSkKIAkJCWVsZl9od2NhcCB8PSAxVUwgPDwgNjsKIAl9CiAKIAlpZiAoTUFDSElORV9IQVNfSFBBR0UpCiAJCWVsZl9od2NhcCB8PSAxVUwgPDwgNzsKIAotCXN3aXRjaCAoY3B1aW5mby0+Y3B1X2lkLm1hY2hpbmUpIHsKKwlzd2l0Y2ggKFMzOTBfbG93Y29yZS5jcHVfaWQubWFjaGluZSkgewogCWNhc2UgMHg5NjcyOgogI2lmICFkZWZpbmVkKENPTkZJR182NEJJVCkKIAlkZWZhdWx0OgkvKiBVc2UgImc1IiBhcyBkZWZhdWx0IGZvciAzMSBiaXQga2VybmVscy4gKi8KQEAgLTgxMSw3ICs4MjgsNyBAQAogCXNldHVwX2xvd2NvcmUoKTsKIAogICAgICAgICBjcHVfaW5pdCgpOwotICAgICAgICBfX2NwdV9sb2dpY2FsX21hcFswXSA9IFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfYWRkcjsKKwlfX2NwdV9sb2dpY2FsX21hcFswXSA9IHN0YXAoKTsKIAlzMzkwX2luaXRfY3B1X3RvcG9sb2d5KCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMmQzMzdjYi4uMDA2ZWQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC01MCwxMiArNTEsNiBAQAogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKIAotLyoKLSAqIEFuIGFycmF5IHdpdGggYSBwb2ludGVyIHRoZSBsb3djb3JlIG9mIGV2ZXJ5IENQVS4KLSAqLwotc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKLUVYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOwotCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3NldFtOUl9DUFVTXTsKIAogc3RhdGljIHU4IHNtcF9jcHVfdHlwZTsKQEAgLTgxLDkgKzc2LDcgQEAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMvbWFjaGluZSBjaGVja3MgKi8KIAlfX2xvYWRfcHN3X21hc2socHN3X2tlcm5lbF9iaXRzICYgflBTV19NQVNLX01DSEVDSyk7Ci0KLQkvKiB3cml0ZSBtYWdpYyBudW1iZXIgdG8gemVybyBwYWdlIChhYnNvbHV0ZSAwKSAqLwotCWxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0tPnBhbmljX21hZ2ljID0gX19QQU5JQ19NQUdJQzsKKwl0cmFjZV9oYXJkaXJxc19vZmYoKTsKIAogCS8qIHN0b3AgYWxsIHByb2Nlc3NvcnMgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewpAQCAtMjMzLDcgKzIyNiw3IEBACiAgKi8KICNkZWZpbmUgQ1BVX0lOSVRfTk8JMQogCi0jaWYgZGVmaW5lZChDT05GSUdfWkZDUERVTVApIHx8IGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAogLyoKICAqIHpmY3BkdW1wX3ByZWZpeF9hcnJheSBob2xkcyBwcmVmaXggcmVnaXN0ZXJzIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgpAQCAtMjc0LDcgKzI2Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfZ2V0X3NhdmVfYXJlYSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcGh5X2NwdSkgeyB9CiAKLSNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgfHwgQ09ORklHX1pGQ1BEVU1QX01PRFVMRSAqLworI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwogCiBzdGF0aWMgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCiB7CkBAIC0zMDQsOCArMjk3LDggQEAKIHsKIAlpbnQgY3B1X2lkLCBsb2dpY2FsX2NwdTsKIAotCWxvZ2ljYWxfY3B1ID0gZmlyc3RfY3B1KGF2YWlsKTsKLQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfZmlyc3QoJmF2YWlsKTsKKwlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIDA7CiAJZm9yIChjcHVfaWQgPSAwOyBjcHVfaWQgPD0gNjU1MzU7IGNwdV9pZCsrKSB7CiAJCWlmIChjcHVfa25vd24oY3B1X2lkKSkKQEAgLTMxNiw4ICszMDksOCBAQAogCQkJY29udGludWU7CiAJCWNwdV9zZXQobG9naWNhbF9jcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMyOSw4ICszMjIsOCBAQAogCWludCBjcHVfaWQsIGxvZ2ljYWxfY3B1LCBjcHU7CiAJaW50IHJjOwogCi0JbG9naWNhbF9jcHUgPSBmaXJzdF9jcHUoYXZhaWwpOwotCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19maXJzdCgmYXZhaWwpOworCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQlyZXR1cm4gMDsKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCkBAIC0zNTEsOCArMzQ0LDggQEAKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX1NUQU5EQlk7CiAJCWVsc2UKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIG91dDoKQEAgLTM3OSw3ICszNzIsNyBAQAogCiAJY19jcHVzID0gMTsKIAlzX2NwdXMgPSAwOwotCWJvb3RfY3B1X2FkZHIgPSBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHI7CisJYm9vdF9jcHVfYWRkciA9IF9fY3B1X2xvZ2ljYWxfbWFwWzBdOwogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcGFuaWMoInNtcF9kZXRlY3RfY3B1cyBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKQEAgLTQ1Myw3ICs0NDYsNyBAQAogCS8qIFN3aXRjaCBvbiBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCS8qIFByaW50IGluZm8gYWJvdXQgdGhpcyBwcm9jZXNzb3IgKi8KLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCS8qIGNwdV9pZGxlIHdpbGwgY2FsbCBzY2hlZHVsZSBmb3IgdXMgKi8KIAljcHVfaWRsZSgpOwogCXJldHVybiAwOwpAQCAtNTE1LDcgKzUwOCw2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyB2b2lkIHNtcF9mcmVlX2xvd2NvcmUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmU7CkBAIC01MzQsNyArNTI2LDYgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CiAJbG93Y29yZV9wdHJbY3B1XSA9IE5VTEw7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIC8qIFVwcGluZyBhbmQgZG93bmluZyBvZiBDUFVzICovCiBpbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCkBAIC01NDMsMTYgKzUzNCwyMyBAQAogCXN0cnVjdCBfbG93Y29yZSAqY3B1X2xvd2NvcmU7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpzZjsKIAlzaWdwX2Njb2RlIGNjb2RlOworCXUzMiBsb3djb3JlOwogCiAJaWYgKHNtcF9jcHVfc3RhdGVbY3B1XSAhPSBDUFVfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHNtcF9hbGxvY19sb3djb3JlKGNwdSkpCiAJCXJldHVybiAtRU5PTUVNOworCWRvIHsKKwkJY2NvZGUgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9pbml0aWFsX2NwdV9yZXNldCk7CisJCWlmIChjY29kZSA9PSBzaWdwX2J1c3kpCisJCQl1ZGVsYXkoMTApOworCQlpZiAoY2NvZGUgPT0gc2lncF9ub3Rfb3BlcmF0aW9uYWwpCisJCQlnb3RvIGVycl9vdXQ7CisJfSB3aGlsZSAoY2NvZGUgPT0gc2lncF9idXN5KTsKIAotCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3Nvcl9wKChfX3UzMikodW5zaWduZWQgbG9uZykobG93Y29yZV9wdHJbY3B1XSksCi0JCQkJICAgY3B1LCBzaWdwX3NldF9wcmVmaXgpOwotCWlmIChjY29kZSkKLQkJcmV0dXJuIC1FSU87CisJbG93Y29yZSA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpbG93Y29yZV9wdHJbY3B1XTsKKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3Nvcl9wKGxvd2NvcmUsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCisJCXVkZWxheSgxMCk7CiAKIAlpZGxlID0gY3VycmVudF9zZXRbY3B1XTsKIAljcHVfbG93Y29yZSA9IGxvd2NvcmVfcHRyW2NwdV07CkBAIC01NzEsOSArNTY5LDggQEAKIAkJOiA6ICJhIiAoJmNwdV9sb3djb3JlLT5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpIDogIm1lbW9yeSIpOwogCWNwdV9sb3djb3JlLT5wZXJjcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwogCWNwdV9sb3djb3JlLT5jdXJyZW50X3Rhc2sgPSAodW5zaWduZWQgbG9uZykgaWRsZTsKLQljcHVfbG93Y29yZS0+Y3B1X2RhdGEuY3B1X25yID0gY3B1OworCWNwdV9sb3djb3JlLT5jcHVfbnIgPSBjcHU7CiAJY3B1X2xvd2NvcmUtPmtlcm5lbF9hc2NlID0gUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlOwotCWNwdV9sb3djb3JlLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJZWllaW8oKTsKIAogCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9yZXN0YXJ0KSA9PSBzaWdwX2J1c3kpCkBAIC01ODIsNiArNTc5LDEwIEBACiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCiAJCWNwdV9yZWxheCgpOwogCXJldHVybiAwOworCitlcnJfb3V0OgorCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcG9zc2libGVfY3B1cyhjaGFyICpzKQpAQCAtNTg5LDkgKzU5MCw4IEBACiAJaW50IHBjcHVzLCBjcHU7CiAKIAlwY3B1cyA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOwotCWNwdV9wb3NzaWJsZV9tYXAgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQlmb3IgKGNwdSA9IDE7IGNwdSA8IHBjcHVzICYmIGNwdSA8IE5SX0NQVVM7IGNwdSsrKQotCQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBwY3B1cyAmJiBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykKKwkJc2V0X2NwdV9wb3NzaWJsZShjcHUsIHRydWUpOwogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oInBvc3NpYmxlX2NwdXMiLCBzZXR1cF9wb3NzaWJsZV9jcHVzKTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCS8qIHJlcXVlc3QgdGhlIDB4MTIwMSBlbWVyZ2VuY3kgc2lnbmFsIGV4dGVybmFsIGludGVycnVwdCAqLwogCWlmIChyZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgxMjAxLCBkb19leHRfY2FsbF9pbnRlcnJ1cHQpICE9IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZXF1ZXN0IGV4dGVybmFsIGludGVycnVwdCAweDEyMDEiKTsKLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCiAJLyogUmVhbGxvY2F0ZSBjdXJyZW50IGxvd2NvcmUsIGJ1dCBrZWVwIGl0cyBjb250ZW50cy4gKi8KIAlsY19vcmRlciA9IHNpemVvZihsb25nKSA9PSA4ID8gMSA6IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc3lzaW5mby5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3N5c2luZm8uYwpyZW5hbWUgdG8gYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKaW5kZXggMGVlYTkwNy4uYjVlNzVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3N5c2luZm8uYwotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDgKLSAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIChVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tKQotICoJICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDkKKyAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIDxVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tPiwKKyAqCSAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI0LDcgKzIyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgc3RzaV8wKHZvaWQpCiB7Ci0JaW50IHJjID0gc3RzaSAoTlVMTCwgMCwgMCwgMCk7CisJaW50IHJjID0gc3RzaShOVUxMLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmMgPT0gLUVOT1NZUyA/IHJjIDogKCgodW5zaWduZWQgaW50KSByYykgPj4gMjgpOwogfQogCkBAIC03OCwyMyArNzYsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLSNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyBpbnQgc3RzaV8xXzJfMShzdHJ1Y3Qgc3lzaW5mb18xXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlpZiAoc3RzaShpbmZvLCAxLCAyLCAxKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JRUJDQVNDKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIENQVTogICAgICAgICAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8xXzJfMihzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKmV4dDsKQEAgLTE0NSwzMyArMTI2LDE1IEBACiAJaWYgKGluZm8tPnNlY29uZGFyeV9jYXBhYmlsaXR5ICE9IDApCiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZWNvbmRhcnkgQ2FwYWJpbGl0eTogJWRcbiIsCiAJCQkgICAgICAgaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkpOwotCiAJcmV0dXJuIGxlbjsKIH0KIAotI2lmIDAgLyogQ3VycmVudGx5IHVudXNlZCAqLwotc3RhdGljIGludCBzdHNpXzJfMl8xKHN0cnVjdCBzeXNpbmZvXzJfMl8xICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWlmIChzdHNpKGluZm8sIDIsIDIsIDEpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKLQlFQkNBU0MgKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MgKGluZm8tPnBsYW50LCBzaXplb2YoaW5mby0+cGxhbnQpKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VxdWVuY2UgQ29kZSBvZiBsb2dpY2FsIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIGxvZ2ljYWwgQ1BVOiAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8yXzJfMihzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlpZiAoc3RzaShpbmZvLCAyLCAyLCAyKSA9PSAtRU5PU1lTKQogCQlyZXR1cm4gbGVuOwogCi0JRUJDQVNDIChpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOworCUVCQ0FTQyhpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOwogCiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgTnVtYmVyOiAgICAgICAgICAlZFxuIiwKQEAgLTIxNCw4ICsxNzcsOCBAQAogCWlmIChzdHNpKGluZm8sIDMsIDIsIDIpID09IC1FTk9TWVMpCiAJCXJldHVybiBsZW47CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPmNvdW50OyBpKyspIHsKLQkJRUJDQVNDIChpbmZvLT52bVtpXS5uYW1lLCBzaXplb2YoaW5mby0+dm1baV0ubmFtZSkpOwotCQlFQkNBU0MgKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOworCQlFQkNBU0MoaW5mby0+dm1baV0ubmFtZSwgc2l6ZW9mKGluZm8tPnZtW2ldLm5hbWUpKTsKKwkJRUJDQVNDKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOwogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBOYW1lOiAgICAgICAgICAgICUtOC44c1xuIiwKIAkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5uYW1lKTsKQEAgLTIzNywxNCArMjAwLDEzIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotCiBzdGF0aWMgaW50IHByb2NfcmVhZF9zeXNpbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpbmZvID0gZ2V0X3plcm9lZF9wYWdlIChHRlBfS0VSTkVMKTsKKwl1bnNpZ25lZCBsb25nIGluZm8gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaW50IGxldmVsLCBsZW47Ci0JCisKIAlpZiAoIWluZm8pCiAJCXJldHVybiAwOwogCkBAIC0yNjIsOCArMjI0LDggQEAKIAlpZiAobGV2ZWwgPj0gMykKIAkJbGVuID0gc3RzaV8zXzJfMigoc3RydWN0IHN5c2luZm9fM18yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKIAotCWZyZWVfcGFnZSAoaW5mbyk7Ci0gICAgICAgIHJldHVybiBsZW47CisJZnJlZV9wYWdlKGluZm8pOworCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3N5c2luZm8odm9pZCkKQEAgLTI3Miw4ICsyMzQsNyBAQAogCQkJICAgICAgIHByb2NfcmVhZF9zeXNpbmZvLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KLQotX19pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKK2RldmljZV9pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKIAogLyoKICAqIFNlcnZpY2UgbGV2ZWxzIGludGVyZmFjZS4KQEAgLTM4NywxMyArMzQ4LDExIEBACiAJCXJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJnNlcnZpY2VfbGV2ZWxfdm0pOwogCXJldHVybiAwOwogfQotCiBzdWJzeXNfaW5pdGNhbGwoY3JlYXRlX3Byb2Nfc2VydmljZV9sZXZlbCk7CiAKIC8qCiAgKiBCb2dvbWlwcyBjYWxjdWxhdGlvbiBiYXNlZCBvbiBjcHUgY2FwYWJpbGl0eS4KICAqLwotCiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqY2FwYWJpbGl0eSkKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggZmM0NjhjYS4uZjcyZDQxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTMzMSw2ICszMzEsNyBAQAogfQogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGNsb2NrX3N5bmNfd29yZCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2NrX3N5bmNfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xvY2tfc3luY19mbGFnczsKIAogI2RlZmluZSBDTE9DS19TWU5DX0hBU19FVFIJMApAQCAtMzk0LDYgKzM5NSwyMCBAQAogCWF0b21pY19zZXRfbWFzaygweDgwMDAwMDAwLCBzd19wdHIpOwogfQogCisvKgorICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGNsb2NrIGlzIGluIHN5bmMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N5bmNfY2xvY2sodm9pZCkKK3sKKwlhdG9taWNfdCAqc3dfcHRyOworCWludCByYzsKKworCXN3X3B0ciA9ICZnZXRfY3B1X3ZhcihjbG9ja19zeW5jX3dvcmQpOworCXJjID0gKGF0b21pY19yZWFkKHN3X3B0cikgJiAweDgwMDAwMDAwVSkgIT0gMDsKKwlwdXRfY3B1X3ZhcihjbG9ja19zeW5jX3N5bmMpOworCXJldHVybiByYzsKK30KKwogLyogU2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSB1c2VkIGZvciBldHIgYW5kIHN0cCBzeW5jIGV2ZW50cyAqLwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0aW1lX3N5bmNfd3E7CiAKQEAgLTQ4NSw2ICs1MDAsOCBAQAogCWlmIChldHJfc2V0cigmZXRyX2VhY3IpID09IDApIHsKIAkJZXRyX3RvbGVjID0gZ2V0X2Nsb2NrKCk7CiAJCXNldF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfSBlbHNlIGlmIChldHJfcG9ydDBfb25saW5lIHx8IGV0cl9wb3J0MV9vbmxpbmUpIHsKIAkJcHJfd2FybmluZygiVGhlIHJlYWwgb3IgdmlydHVhbCBoYXJkd2FyZSBzeXN0ZW0gZG9lcyAiCiAJCQkgICAibm90IHByb3ZpZGUgYW4gRVRSIGludGVyZmFjZVxuIik7CkBAIC01MzMsOCArNTUwLDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLnNsKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1dJVENIX0xPQ0FMLCAmZXRyX2V2ZW50cyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiB9CkBAIC01NDksOCArNTY1LDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLmVzKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1lOQ19DSEVDSywgJmV0cl9ldmVudHMpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogfQpAQCAtOTE0LDcgKzkyOSw3IEBACiAJICogRG8gbm90IHRyeSB0byBnZXQgdGhlIGFsdGVybmF0ZSBwb3J0IGFpYiBpZiB0aGUgY2xvY2sKIAkgKiBpcyBub3QgaW4gc3luYyB5ZXQuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpICYmICFlYWNyLmVzKQorCWlmICghY2hlY2tfc3luY19jbG9jaygpKQogCQlyZXR1cm4gZWFjcjsKIAogCS8qCkBAIC05OTcsNyArMTAxMiw2IEBACiAJCW9uX2VhY2hfY3B1KGRpc2FibGVfc3luY19jbG9jaywgTlVMTCwgMSk7CiAJCWRlbF90aW1lcl9zeW5jKCZldHJfdGltZXIpOwogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC0xMDcxLDE4ICsxMDg1LDEzIEBACiAJCS8qIEJvdGggcG9ydHMgbm90IHVzYWJsZS4gKi8KIAkJZWFjci5lcyA9IGVhY3Iuc2wgPSAwOwogCQlzeW5jX3BvcnQgPSAtMTsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQllYWNyLmVzID0gMDsKLQogCS8qCiAJICogSWYgdGhlIGNsb2NrIGlzIGluIHN5bmMganVzdCB1cGRhdGUgdGhlIGVhY3IgYW5kIHJldHVybi4KIAkgKiBJZiB0aGVyZSBpcyBubyB2YWxpZCBzeW5jIHBvcnQgd2FpdCBmb3IgYSBwb3J0IHVwZGF0ZS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSB8fAotCSAgICBlYWNyLmVzIHx8IHN5bmNfcG9ydCA8IDApIHsKKwlpZiAoY2hlY2tfc3luY19jbG9jaygpIHx8IHN5bmNfcG9ydCA8IDApIHsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwogCQlldHJfc2V0X3RvbGVjX3RpbWVvdXQobm93KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTEwMywxMyArMTExMiwxMSBAQAogCSAqIGFuZCBzZXQgdXAgYSB0aW1lciB0byB0cnkgYWdhaW4gYWZ0ZXIgMC41IHNlY29uZHMKIAkgKi8KIAlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0Jc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCWlmIChub3cgPCBldHJfdG9sZWMgKyAoMTYwMDAwMCA8PCAxMikgfHwKIAkgICAgZXRyX3N5bmNfY2xvY2tfc3RvcCgmYWliLCBzeW5jX3BvcnQpICE9IDApIHsKIAkJLyogU3luYyBmYWlsZWQuIFRyeSBhZ2FpbiBpbiAxLzIgc2Vjb25kLiAqLwogCQllYWNyLmVzID0gMDsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJZXRyX3NldF9zeW5jX3RpbWVvdXQoKTsKIAl9IGVsc2UKIAkJZXRyX3NldF90b2xlY190aW1lb3V0KG5vdyk7CkBAIC0xMTkxLDE5ICsxMTk4LDMwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwltdXRleF9sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlpZiAoZGV2ID09ICZldHJfcG9ydDBfZGV2KSB7CiAJCWlmIChldHJfcG9ydDBfb25saW5lID09IHZhbHVlKQotCQkJcmV0dXJuIGNvdW50OwkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQkJZ290byBvdXQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCiAJCWV0cl9wb3J0MF9vbmxpbmUgPSB2YWx1ZTsKKwkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgJiYgZXRyX3BvcnQxX29ubGluZSkKKwkJCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCXNldF9iaXQoRVRSX0VWRU5UX1BPUlQwX0NIQU5HRSwgJmV0cl9ldmVudHMpOwogCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIAl9IGVsc2UgewogCQlpZiAoZXRyX3BvcnQxX29ubGluZSA9PSB2YWx1ZSkKLQkJCXJldHVybiBjb3VudDsJLyogTm90aGluZyB0byBkby4gKi8KKwkJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIGRvLiAqLwogCQlldHJfcG9ydDFfb25saW5lID0gdmFsdWU7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlzZXRfYml0KEVUUl9FVkVOVF9QT1JUMV9DSEFOR0UsICZldHJfZXZlbnRzKTsKIAkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNDcxLDggKzE0ODksNiBAQAogICovCiB2b2lkIHN0cF9zeW5jX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTQ4NSw4ICsxNTAxLDYgQEAKICAqLwogdm9pZCBzdHBfaXNsYW5kX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTUxMywxMCArMTUyNyw2IEBACiAKIAllbmFibGVfc3luY19jbG9jaygpOwogCi0Jc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7Ci0KIAlyYyA9IDA7CiAJaWYgKHN0cF9pbmZvLnRvZG9mZlswXSB8fCBzdHBfaW5mby50b2RvZmZbMV0gfHwKIAkgICAgc3RwX2luZm8udG9kb2ZmWzJdIHx8IHN0cF9pbmZvLnRvZG9mZlszXSB8fApAQCAtMTUzNSw5ICsxNTQ1LDYgQEAKIAlpZiAocmMpIHsKIAkJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCQlzdHBfc3luYy0+aW5fc3luYyA9IC1FQUdBSU47Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCQlpZiAoZXRyX3BvcnQwX29ubGluZSB8fCBldHJfcG9ydDFfb25saW5lKQotCQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfSBlbHNlCiAJCXN0cF9zeW5jLT5pbl9zeW5jID0gMTsKIAl4Y2hnKCZmaXJzdCwgMCk7CkBAIC0xNTY5LDYgKzE1NzYsMTAgQEAKIAlpZiAocmMgfHwgc3RwX2luZm8uYyA9PSAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwkvKiBTa2lwIHN5bmNocm9uaXphdGlvbiBpZiB0aGUgY2xvY2sgaXMgYWxyZWFkeSBpbiBzeW5jLiAqLworCWlmIChjaGVja19zeW5jX2Nsb2NrKCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCW1lbXNldCgmc3RwX3N5bmMsIDAsIHNpemVvZihzdHBfc3luYykpOwogCWdldF9vbmxpbmVfY3B1cygpOwogCWF0b21pY19zZXQoJnN0cF9zeW5jLmNwdXMsIG51bV9vbmxpbmVfY3B1cygpIC0gMSk7CkBAIC0xNjg0LDggKzE2OTUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0hBU19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCW11dGV4X2xvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCXN0cF9vbmxpbmUgPSB2YWx1ZTsKKwlpZiAoc3RwX29ubGluZSkKKwkJc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZzdHBfd29yayk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCBjYzM2MmM5Li4zYzcyYzljIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC03NCw3ICs3NCw3IEBACiAKIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjb3JlX2luZm8gKmNvcmUgPSAmY29yZV9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggNDU4NGQ4MS4uYzJlNDJjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtNjEsOSArNjEsMTEgQEAKICNkZWZpbmUgc3RhY2tfcG9pbnRlciAoeyB2b2lkICoqc3A7IGFzbSgibGEgJTAsMCgxNSkiIDogIj0mZCIgKHNwKSk7IHNwOyB9KQogCiAjaWZuZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBMT05HICIlMDhseCAiCiAjZGVmaW5lIEZPVVJMT05HICIlMDhseCAlMDhseCAlMDhseCAlMDhseFxuIgogc3RhdGljIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSAxMjsKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLworI2RlZmluZSBMT05HICIlMDE2bHggIgogI2RlZmluZSBGT1VSTE9ORyAiJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XG4iCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDIwOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwpAQCAtMTU1LDcgKzE1Nyw3IEBACiAJCQlicmVhazsKIAkJaWYgKGkgJiYgKChpICogc2l6ZW9mIChsb25nKSAlIDMyKSA9PSAwKSkKIAkJCXByaW50aygiXG4gICAgICAgIik7Ci0JCXByaW50aygiJXAgIiwgKHZvaWQgKikqc3RhY2srKyk7CisJCXByaW50ayhMT05HLCAqc3RhY2srKyk7CiAJfQogCXByaW50aygiXG4iKTsKIAlzaG93X3RyYWNlKHRhc2ssIHNwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNjkwZTE3OC4uODliMmU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIHZkc29fZnJlZV9wZXJfY3B1KGludCBjcHUsIHN0cnVjdCBfbG93Y29yZSAqbG93Y29yZSkKIHsKIAl1bnNpZ25lZCBsb25nIHNlZ21lbnRfdGFibGUsIHBhZ2VfdGFibGUsIHBhZ2VfZnJhbWU7CkBAIC0xNjMsNyArMTYyLDYgQEAKIAlmcmVlX3BhZ2UocGFnZV90YWJsZSk7CiAJZnJlZV9wYWdlcyhzZWdtZW50X3RhYmxlLCBTRUdNRU5UX09SREVSKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIHZvaWQgX192ZHNvX2luaXRfY3I1KHZvaWQgKmR1bW15KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQ3OTZkMDUuLjdhMjA2M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwOCw2ICsxMDgsOCBAQAogCQlFWElUX1RFWFQKIAl9CiAKKwkvKiBlYXJseS5jIHVzZXMgc3RzaSwgd2hpY2ggcmVxdWlyZXMgcGFnZSBhbGlnbmVkIGRhdGEuICovCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmluaXQuZGF0YSA6IHsKIAkJSU5JVF9EQVRBCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCmluZGV4IGUwNTFjYWQuLjNlMjYwYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZworKysgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKQEAgLTQsNiArNCw5IEBACiBjb25maWcgSEFWRV9LVk0KICAgICAgICBib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwppbmRleCA2MTIzNjEwLi45ZDE5ODAzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogc3RhdGljIGludGVyY2VwdF9oYW5kbGVyX3QgaW5zdHJ1Y3Rpb25faGFuZGxlcnNbMjU2XSA9IHsKIAlbMHg4M10gPSBrdm1fczM5MF9oYW5kbGVfZGlhZywKIAlbMHhhZV0gPSBrdm1fczM5MF9oYW5kbGVfc2lncCwKLQlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfcHJpdiwKKwlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfYjIsCiAJWzB4YjddID0gaGFuZGxlX2xjdGwsCiAJWzB4ZWJdID0gaGFuZGxlX2xjdGxnLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IGY0ZmUyOGEuLjAxODkzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtNTU1LDkgKzU1NSwxNCBAQAogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHByb2dyYW0gY2hlY2sgJWQgKGZyb20gdXNlcikiLAogCQkJICAgczM5MGludC0+cGFybSk7CiAJCWJyZWFrOworCWNhc2UgS1ZNX1MzOTBfU0lHUF9TRVRfUFJFRklYOgorCQlpbnRpLT5wcmVmaXguYWRkcmVzcyA9IHMzOTBpbnQtPnBhcm07CisJCWludGktPnR5cGUgPSBzMzkwaW50LT50eXBlOworCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHNldCBwcmVmaXggdG8gJXggKGZyb20gdXNlcikiLAorCQkJICAgczM5MGludC0+cGFybSk7CisJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfU0lHUF9TVE9QOgogCWNhc2UgS1ZNX1MzOTBfUkVTVEFSVDoKLQljYXNlIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWDoKIAljYXNlIEtWTV9TMzkwX0lOVF9FTUVSR0VOQ1k6CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgImluamVjdDogdHlwZSAleCIsIHMzOTBpbnQtPnR5cGUpOwogCQlpbnRpLT50eXBlID0gczM5MGludC0+dHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCBiZTg0OTcxLi5mNGQ1NmU5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSAia3ZtLXMzOTAuaCIKICNpbmNsdWRlICJnYWNjZXNzLmgiCiAKQEAgLTIxMiw2ICsyMTIsMTAgQEAKIAl9CiB9CiAKK3ZvaWQga3ZtX2FyY2hfc3luY19ldmVudHMoc3RydWN0IGt2bSAqa3ZtKQoreworfQorCiB2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCWt2bV9mcmVlX3ZjcHVzKGt2bSk7CkBAIC0yODIsNyArMjg2LDcgQEAKIAlzZXR1cF90aW1lcigmdmNwdS0+YXJjaC5ja2NfdGltZXIsIGt2bV9zMzkwX2lkbGVfd2FrZXVwLAogCQkgKHVuc2lnbmVkIGxvbmcpIHZjcHUpOwogCWdldF9jcHVfaWQoJnZjcHUtPmFyY2guY3B1X2lkKTsKLQl2Y3B1LT5hcmNoLmNwdV9pZC52ZXJzaW9uID0gMHhmZTsKKwl2Y3B1LT5hcmNoLmNwdV9pZC52ZXJzaW9uID0gMHhmZjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE4LDggKzQyMiw4IEBACiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KIAotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KQEAgLTQzNiw4ICs0NDAsNiBAQAogCXJldHVybiAtRUlOVkFMOyAvKiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiB9CiAKLWV4dGVybiB2b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCW1lbWNweSgmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdnMTQsICZ2Y3B1LT5hcmNoLmd1ZXN0X2dwcnNbMTRdLCAxNik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKaW5kZXggMzg5M2NmMS4uMDBiYmU2OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaApAQCAtNTAsNyArNTAsNyBAQAogaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKTsKIAogLyogaW1wbGVtZW50ZWQgaW4gcHJpdi5jICovCi1pbnQga3ZtX3MzOTBfaGFuZGxlX3ByaXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogLyogaW1wbGVtZW50ZWQgaW4gc2lncC5jICovCiBpbnQga3ZtX3MzOTBfaGFuZGxlX3NpZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggMzYwNWRmNDUuLjRiODg4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0zMDQsMTIgKzMwNCwyNCBAQAogCVsweGIxXSA9IGhhbmRsZV9zdGZsLAogfTsKIAotaW50IGt2bV9zMzkwX2hhbmRsZV9wcml2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK2ludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludGVyY2VwdF9oYW5kbGVyX3QgaGFuZGxlcjsKIAorCS8qCisJICogYSBsb3Qgb2YgQjIgaW5zdHJ1Y3Rpb25zIGFyZSBwcml2aWxlZGdlZC4gV2UgZmlyc3QgY2hlY2sgZm9yCisJICogdGhlIHByaXZpbGVkZ2VzIG9uZXMsIHRoYXQgd2UgY2FuIGhhbmRsZSBpbiB0aGUga2VybmVsLiBJZiB0aGUKKwkgKiBrZXJuZWwgY2FuIGhhbmRsZSB0aGlzIGluc3RydWN0aW9uLCB3ZSBjaGVjayBmb3IgdGhlIHByb2JsZW0KKwkgKiBzdGF0ZSBiaXQgYW5kIChhKSBoYW5kbGUgdGhlIGluc3RydWN0aW9uIG9yIChiKSBzZW5kIGEgY29kZSAyCisJICogcHJvZ3JhbSBjaGVjay4KKwkgKiBBbnl0aGluZyBlbHNlIGdvZXMgdG8gdXNlcnNwYWNlLiovCiAJaGFuZGxlciA9IHByaXZfaGFuZGxlcnNbdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MDBmZl07Ci0JaWYgKGhhbmRsZXIpCi0JCXJldHVybiBoYW5kbGVyKHZjcHUpOworCWlmIChoYW5kbGVyKSB7CisJCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQorCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LAorCQkJCQkJICAgUEdNX1BSSVZJTEVHRURfT1BFUkFUSU9OKTsKKwkJZWxzZQorCQkJcmV0dXJuIGhhbmRsZXIodmNwdSk7CisJfQogCXJldHVybiAtRU5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCmluZGV4IDJhMDFiOWUuLmYyN2RiZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vc2lncC5jCisrKyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCkBAIC0xNTMsOCArMTUzLDYgQEAKIAogCXN3aXRjaCAocGFyYW1ldGVyICYgMHhmZikgewogCWNhc2UgMDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAia3ZtOiByZXF1ZXN0IHRvIHN3aXRjaCB0byBFU0EvMzkwIG1vZGUiCi0JCQkJCQkJIiBub3Qgc3VwcG9ydGVkIik7CiAJCXJjID0gMzsgLyogbm90IG9wZXJhdGlvbmFsICovCiAJCWJyZWFrOwogCWNhc2UgMToKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvZGVsYXkuYyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwppbmRleCA2Y2NiOWZhLi4zZjVmNjgwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTkyLDYgKzkzLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOwogCiAvKgogICogU2ltcGxlIHVkZWxheSB2YXJpYW50LiBUbyBiZSB1c2VkIG9uIHN0YXJ0dXAgYW5kIHJlYm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kaXY2NC5jIGIvYXJjaC9zMzkwL2xpYi9kaXY2NC5jCmluZGV4IGE1ZjgzMDAuLmQ5ZTYyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGl2NjQuYworKysgYi9hcmNoL3MzOTAvbGliL2RpdjY0LmMKQEAgLTYxLDcgKzYxLDcgQEAKIAkJIgljbHIJJTAsJTNcbiIKIAkJIglqbAkwZlxuIgogCQkiCXNscgklMCwlM1xuIgotCQkiCWFscgklMSwlMlxuIgorCQkiCWFoaQklMSwxXG4iCiAJCSIwOlxuIgogCQk6ICIrZCIgKHJlZzIpLCAiK2QiIChyZWczKSwgIj1kIiAodG1wKQogCQk6ICJkIiAoYmFzZSksICIyIiAoMVVMKSA6ICJjYyIgKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMgYi9hcmNoL3MzOTAvbGliL3N0cmluZy5jCmluZGV4IGFlNWNmNWQuLjQxNDNiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMKKysrIGIvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYwpAQCAtNDQsNyArNDQsMTEgQEAKICAqLwogc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJldHVybiBfX3N0cmVuZChzKSAtIHM7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RybGVuKHMpOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiAKQEAgLTcwLDYgKzc0LDcgQEAKICAqLwogY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciBpbnQgcjAgYXNtKCIwIikgPSAwOwogCWNoYXIgKnJldCA9IGRlc3Q7CiAKQEAgLTc4LDYgKzgzLDkgQEAKIAkJICAgICAgOiAiKyZhIiAoZGVzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKIAkJICAgICAgOiAiY2MiLCAibWVtb3J5IiApOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRlc3QsIHNyYyk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc3RyY3B5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYwppbmRleCBkNjYyMTViLi5iMGI4NGMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYwpAQCAtMTE5LDggKzExOSw2IEBACiAJCQlnb3RvIGZhdWx0OwogCiAJCXBmbiA9IHB0ZV9wZm4oKnB0ZSk7Ci0JCWlmICghcGZuX3ZhbGlkKHBmbikpCi0JCQlnb3RvIG91dDsKIAogCQlvZmZzZXQgPSB1YWRkciAmIChQQUdFX1NJWkUgLSAxKTsKIAkJc2l6ZSA9IG1pbihuIC0gZG9uZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKQEAgLTEzNSw3ICsxMzMsNiBAQAogCQlkb25lICs9IHNpemU7CiAJCXVhZGRyICs9IHNpemU7CiAJfSB3aGlsZSAoZG9uZSA8IG4pOwotb3V0OgogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAlyZXR1cm4gbiAtIGRvbmU7CiBmYXVsdDoKQEAgLTE2Myw5ICsxNjAsNiBAQAogCQlnb3RvIGZhdWx0OwogCiAJcGZuID0gcHRlX3BmbigqcHRlKTsKLQlpZiAoIXBmbl92YWxpZChwZm4pKQotCQlnb3RvIG91dDsKLQogCXJldCA9IChwZm4gPDwgUEFHRV9TSElGVCkgKyAodWFkZHIgJiAoUEFHRV9TSVpFIC0gMSkpOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC0yNDQsMTEgKzIzOCw2IEBACiAJCQlnb3RvIGZhdWx0OwogCiAJCXBmbiA9IHB0ZV9wZm4oKnB0ZSk7Ci0JCWlmICghcGZuX3ZhbGlkKHBmbikpIHsKLQkJCWRvbmUgPSAtMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KIAkJb2Zmc2V0ID0gdWFkZHIgJiAoUEFHRV9TSVpFLTEpOwogCQlhZGRyID0gKGNoYXIgKikocGZuIDw8IFBBR0VfU0hJRlQpICsgb2Zmc2V0OwogCQlsZW4gPSBtaW4oY291bnQgLSBkb25lLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwpAQCAtMjU2LDcgKzI0NSw2IEBACiAJCWRvbmUgKz0gbGVuX3N0cjsKIAkJdWFkZHIgKz0gbGVuX3N0cjsKIAl9IHdoaWxlICgobGVuX3N0ciA9PSBsZW4pICYmIChkb25lIDwgY291bnQpKTsKLW91dDoKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJcmV0dXJuIGRvbmUgKyAxOwogZmF1bHQ6CkBAIC0zMjUsMTIgKzMxMyw3IEBACiAJCX0KIAogCQlwZm5fZnJvbSA9IHB0ZV9wZm4oKnB0ZV9mcm9tKTsKLQkJaWYgKCFwZm5fdmFsaWQocGZuX2Zyb20pKQotCQkJZ290byBvdXQ7CiAJCXBmbl90byA9IHB0ZV9wZm4oKnB0ZV90byk7Ci0JCWlmICghcGZuX3ZhbGlkKHBmbl90bykpCi0JCQlnb3RvIG91dDsKLQogCQlvZmZzZXRfZnJvbSA9IHVhZGRyX2Zyb20gJiAoUEFHRV9TSVpFLTEpOwogCQlvZmZzZXRfdG8gPSB1YWRkcl9mcm9tICYgKFBBR0VfU0laRS0xKTsKIAkJb2Zmc2V0X21heCA9IG1heChvZmZzZXRfZnJvbSwgb2Zmc2V0X3RvKTsKQEAgLTM0Miw3ICszMjUsNiBAQAogCQl1YWRkcl9mcm9tICs9IHNpemU7CiAJCXVhZGRyX3RvICs9IHNpemU7CiAJfSB3aGlsZSAoZG9uZSA8IG4pOwotb3V0OgogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAlyZXR1cm4gbiAtIGRvbmU7CiBmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggNGQ1MzcyMC4uODMzZTgzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTIwMCwyOSArMjAwLDYgQEAKIAlkb19ub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIDApOwogfQogCi0vKgotICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlCi0gKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCi0gKi8KLXN0YXRpYyBpbnQgZG9fb3V0X29mX21lbW9yeShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwotCi0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfZ2xvYmFsX2luaXQodHNrKSkgewotCQl5aWVsZCgpOwotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXJldHVybiAxOwotCX0KLQlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQotCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCWRvX25vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0zNjcsNyArMzQ0LDYgQEAKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfQogCi1zdXJ2aXZlOgogCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKIAkJYWRkcmVzcyAmPSBIUEFHRV9NQVNLOwogCS8qCkBAIC0zNzgsOCArMzU0LDggQEAKIAlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCB3cml0ZSk7CiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewotCQkJaWYgKGRvX291dF9vZl9tZW1vcnkocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcykpCi0JCQkJZ290byBzdXJ2aXZlOworCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCWRvX3NpZ2J1cyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IGYwMjU4Y2EuLmM2MzRkZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtNDAsNyArNDAsOSBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhQQUdFX1NJWkUpKSk7CisKIGNoYXIgIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFBBR0VfU0laRSkpKTsKK0VYUE9SVF9TWU1CT0woZW1wdHlfemVyb19wYWdlKTsKIAogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9tbWFwLmMgYi9hcmNoL3MzOTAvbW0vbW1hcC5jCmluZGV4IDU5MzJhODIuLmUwMDhkMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9tbWFwLmMKKysrIGIvYXJjaC9zMzkwL21tL21tYXAuYwpAQCAtMzUsNyArMzUsNyBAQAogICogTGVhdmUgYW4gYXQgbGVhc3QgfjEyOCBNQiBob2xlLgogICovCiAjZGVmaW5lIE1JTl9HQVAgKDEyOCoxMDI0KjEwMjQpCi0jZGVmaW5lIE1BWF9HQVAgKFRBU0tfU0laRS82KjUpCisjZGVmaW5lIE1BWF9HQVAgKFNUQUNLX1RPUC82KjUpCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbWFwX2Jhc2Uodm9pZCkKIHsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAllbHNlIGlmIChnYXAgPiBNQVhfR0FQKQogCQlnYXAgPSBNQVhfR0FQOwogCi0JcmV0dXJuIFRBU0tfU0laRSAtIChnYXAgJiBQQUdFX01BU0spOworCXJldHVybiBTVEFDS19UT1AgLSAoZ2FwICYgUEFHRV9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbW1hcF9pc19sZWdhY3kodm9pZCkKQEAgLTg5LDQyICs4OSw1OCBAQAogCiAjZWxzZQogCitpbnQgczM5MF9tbWFwX2NoZWNrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCkgJiYKKwkgICAgbGVuID49IFRBU0tfU0laRSAmJiBUQVNLX1NJWkUgPCAoMVVMIDw8IDUzKSkKKwkJcmV0dXJuIGNyc3RfdGFibGVfdXBncmFkZShjdXJyZW50LT5tbSwgMVVMIDw8IDUzKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcKIHMzOTBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIGFyZWE7CiAJaW50IHJjOwogCi0JYWRkciA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOwotCWlmIChhZGRyICYgflBBR0VfTUFTSykKLQkJcmV0dXJuIGFkZHI7Ci0JaWYgKHVubGlrZWx5KG1tLT5jb250ZXh0LmFzY2VfbGltaXQgPCBhZGRyICsgbGVuKSkgewotCQlyYyA9IGNyc3RfdGFibGVfdXBncmFkZShtbSwgYWRkciArIGxlbik7CisJYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOworCWlmICghKGFyZWEgJiB+UEFHRV9NQVNLKSkKKwkJcmV0dXJuIGFyZWE7CisJaWYgKGFyZWEgPT0gLUVOT01FTSAmJgorCSAgICAhdGVzdF90aHJlYWRfZmxhZyhUSUZfMzFCSVQpICYmIFRBU0tfU0laRSA8ICgxVUwgPDwgNTMpKSB7CisJCS8qIFVwZ3JhZGUgdGhlIHBhZ2UgdGFibGUgdG8gNCBsZXZlbHMgYW5kIHJldHJ5LiAqLworCQlyYyA9IGNyc3RfdGFibGVfdXBncmFkZShtbSwgMVVMIDw8IDUzKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSByYzsKKwkJYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOwogCX0KLQlyZXR1cm4gYWRkcjsKKwlyZXR1cm4gYXJlYTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcKLXMzOTBfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyMCwKK3MzOTBfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICBjb25zdCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgdW5zaWduZWQgbG9uZyBwZ29mZiwKIAkJCSAgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwOworCXVuc2lnbmVkIGxvbmcgYXJlYTsKIAlpbnQgcmM7CiAKLQlhZGRyID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTsKLQlpZiAoYWRkciAmIH5QQUdFX01BU0spCi0JCXJldHVybiBhZGRyOwotCWlmICh1bmxpa2VseShtbS0+Y29udGV4dC5hc2NlX2xpbWl0IDwgYWRkciArIGxlbikpIHsKLQkJcmMgPSBjcnN0X3RhYmxlX3VwZ3JhZGUobW0sIGFkZHIgKyBsZW4pOworCWFyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOworCWlmICghKGFyZWEgJiB+UEFHRV9NQVNLKSkKKwkJcmV0dXJuIGFyZWE7CisJaWYgKGFyZWEgPT0gLUVOT01FTSAmJgorCSAgICAhdGVzdF90aHJlYWRfZmxhZyhUSUZfMzFCSVQpICYmIFRBU0tfU0laRSA8ICgxVUwgPDwgNTMpKSB7CisJCS8qIFVwZ3JhZGUgdGhlIHBhZ2UgdGFibGUgdG8gNCBsZXZlbHMgYW5kIHJldHJ5LiAqLworCQlyYyA9IGNyc3RfdGFibGVfdXBncmFkZShtbSwgMVVMIDw8IDUzKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSByYzsKKwkJYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sCisJCQkJCQkgICAgICBwZ29mZiwgZmxhZ3MpOwogCX0KLQlyZXR1cm4gYWRkcjsKKwlyZXR1cm4gYXJlYTsKIH0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uLCBjYWxsZWQgdmVyeSBlYXJseSBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGEgbmV3CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCAwNzY3ODI3Li5iZTZjMWNmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogCQljcnN0X3RhYmxlX2luaXQodGFibGUsIGVudHJ5KTsKIAkJcGdkX3BvcHVsYXRlKG1tLCAocGdkX3QgKikgdGFibGUsIChwdWRfdCAqKSBwZ2QpOwogCQltbS0+cGdkID0gKHBnZF90ICopIHRhYmxlOworCQltbS0+dGFza19zaXplID0gbW0tPmNvbnRleHQuYXNjZV9saW1pdDsKIAkJdGFibGUgPSBOVUxMOwogCX0KIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CkBAIC0xNTQsNiArMTU1LDcgQEAKIAkJCUJVRygpOwogCQl9CiAJCW1tLT5wZ2QgPSAocGdkX3QgKikgKHBnZF92YWwoKnBnZCkgJiBfUkVHSU9OX0VOVFJZX09SSUdJTik7CisJCW1tLT50YXNrX3NpemUgPSBtbS0+Y29udGV4dC5hc2NlX2xpbWl0OwogCQljcnN0X3RhYmxlX2ZyZWUobW0sICh1bnNpZ25lZCBsb25nICopIHBnZCk7CiAJfQogCXVwZGF0ZV9tbShtbSwgY3VycmVudCk7CkBAIC0yNTYsNiArMjU4LDEwIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqb2xkX21tOwogCisJLyogRG8gd2UgaGF2ZSBzd2l0Y2hlZCBhbW9kZT8gSWYgbm8sIHdlIGNhbm5vdCBkbyBzaWUgKi8KKwlpZiAoIXN3aXRjaF9hbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBEbyB3ZSBoYXZlIHBnc3Rlcz8gaWYgeWVzLCB3ZSBhcmUgZG9uZSAqLwogCWlmICh0c2stPm1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKIAkJcmV0dXJuIDA7CkBAIC0yOTAsNyArMjk2LDcgQEAKIAl0c2stPm1tID0gdHNrLT5hY3RpdmVfbW0gPSBtbTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAl1cGRhdGVfbW0obW0sIHRzayk7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJdGFza191bmxvY2sodHNrKTsKIAltbXB1dChvbGRfbW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGViYWJlNTEuLjhkNTBkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTEwNyw2ICsxMDcsOSBAQAogY29uZmlnIFNZU19TVVBQT1JUU19QQ0kKIAlib29sCiAKK2NvbmZpZyBTWVNfU1VQUE9SVFNfQ01UCisJYm9vbAorCiBjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCiAJZGVmX2Jvb2wgeQogCkBAIC0xNzYsNiArMTc5LDEwIEBACiBjb25maWcgQ1BVX1NIWDMKIAlib29sCiAKK2NvbmZpZyBBUkNIX1NITU9CSUxFCisJYm9vbAorCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKKwogY2hvaWNlCiAJcHJvbXB0ICJQcm9jZXNzb3Igc3ViLXR5cGUgc2VsZWN0aW9uIgogCkBAIC0xODgsNiArMTk1LDcgQEAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDc2MTkKIAlib29sICJTdXBwb3J0IFNINzYxOSBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiAjIFNILTJBIFByb2Nlc3NvciBTdXBwb3J0CiAKQEAgLTIwMCwxNSArMjA4LDE4IEBACiAJYm9vbCAiU3VwcG9ydCBTSDcyMDMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyQQogCXNlbGVjdCBDUFVfSEFTX0ZQVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDcyMDYKIAlib29sICJTdXBwb3J0IFNINzIwNiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDJBCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzI2MwogCWJvb2wgIlN1cHBvcnQgU0g3MjYzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMkEKIAlzZWxlY3QgQ1BVX0hBU19GUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfTVhHCiAJYm9vbCAiU3VwcG9ydCBNWC1HIHByb2Nlc3NvciIKQEAgLTMyMyw3ICszMzQsOSBAQAogCWJvb2wgIlN1cHBvcnQgU0g3NzIzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKIAlzZWxlY3QgQ1BVX1NIWDIKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCWhlbHAKIAkgIFNlbGVjdCBTSDc3MjMgaWYgeW91IGhhdmUgYW4gU0gtTW9iaWxlUjIgQ1BVLgogCkBAIC0zNDgsNiArMzYxLDE0IEBACiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQogCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3Nzg2CisJYm9vbCAiU3VwcG9ydCBTSDc3ODYgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0QQorCXNlbGVjdCBDUFVfU0hYMworCXNlbGVjdCBDUFVfSEFTX1BURUFFWAorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKKwogY29uZmlnIENQVV9TVUJUWVBFX1NIWDMKIAlib29sICJTdXBwb3J0IFNILVgzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKQEAgLTM2MiwyMCArMzgzLDI2IEBACiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MzQzCiAJYm9vbCAiU3VwcG9ydCBTSDczNDMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QUxfRFNQCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzIyCiAJYm9vbCAiU3VwcG9ydCBTSDc3MjIgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzM2NgogCWJvb2wgIlN1cHBvcnQgU0g3MzY2IHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBDUFVfU0hYMgorCXNlbGVjdCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKICMgU0gtNSBQcm9jZXNzb3IgU3VwcG9ydAogCkBAIC0zOTgsMjUgKzQyNSwzNCBAQAogbWVudSAiVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24iCiAKIGNvbmZpZyBTSF9UTVUKLQlkZWZfYm9vbCB5Ci0JcHJvbXB0ICJUTVUgdGltZXIgc3VwcG9ydCIKKwlib29sICJUTVUgdGltZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TSDMgfHwgQ1BVX1NINAorCWRlZmF1bHQgeQogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBUTVUgYXMgdGhlIHN5c3RlbSB0aW1lci4KIAogY29uZmlnIFNIX0NNVAotCWRlZl9ib29sIHkKLQlwcm9tcHQgIkNNVCB0aW1lciBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1NIMiAmJiAhQ1BVX1NVQlRZUEVfTVhHCisJYm9vbCAiQ01UIHRpbWVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfQ01UICYmIENQVV9TSDIKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgQ01UIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKKyMKKyMgU3VwcG9ydCBmb3IgdGhlIG5ldy1zdHlsZSBDTVQgZHJpdmVyLiBUaGlzIHdpbGwgcmVwbGFjZSBTSF9DTVQKKyMgb25jZSBpdHMgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBtZXJnZWQuCisjCitjb25maWcgU0hfVElNRVJfQ01UCisJYm9vbCAiQ01UIGNsb2NrZXZlbnRzIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19DTVQgJiYgIVNIX0NNVAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBTSF9NVFUyCi0JZGVmX2Jvb2wgbgotCXByb21wdCAiTVRVMiB0aW1lciBzdXBwb3J0IgorCWJvb2wgIk1UVTIgdGltZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TSDJBCisJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIE1UVTIgYXMgdGhlIHN5c3RlbSB0aW1lci4KIApAQCAtNDI2LDcgKzQ2Miw4IEBACiAJCQlDUFVfU1VCVFlQRV9TSDc3NjMKIAlkZWZhdWx0ICI4NiIgaWYgQ1BVX1NVQlRZUEVfU0g3NjE5CiAJZGVmYXVsdCAiMTQwIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDYKLQlkZWZhdWx0ICIxNDIiIGlmIENQVV9TVUJUWVBFX1NINzIwMworCWRlZmF1bHQgIjE0MiIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzICYmIFNIX0NNVAorCWRlZmF1bHQgIjE1MyIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzICYmIFNIX01UVTIKIAlkZWZhdWx0ICIyMzgiIGlmIENQVV9TVUJUWVBFX01YRwogCWRlZmF1bHQgIjE2IgogCkBAIC00MzgsNyArNDc1LDggQEAKIAlkZWZhdWx0ICIzMzMzMzMzMyIgaWYgQ1BVX1NVQlRZUEVfU0g3NzcwIHx8IENQVV9TVUJUWVBFX1NINzcyMyB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3NjAgfHwgQ1BVX1NVQlRZUEVfU0g3NzA1IHx8IFwKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwMyB8fCBDUFVfU1VCVFlQRV9TSDcyMDYgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IENQVV9TVUJUWVBFX01YRworCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IENQVV9TVUJUWVBFX01YRyAgICB8fCBcCisJCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3ODYKIAlkZWZhdWx0ICI2MDAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IENQVV9TVUJUWVBFX1NINzc1MVIKIAlkZWZhdWx0ICI2NjAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g0XzIwMgogCWRlZmF1bHQgIjUwMDAwMDAwIgpAQCAtNTIxLDYgKzU1OSwxMyBAQAogCiAJICBGb3IgbW9yZSBkZXRhaWxzIHNlZSBEb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dAogCitjb25maWcgS0VYRUNfSlVNUAorCWJvb2wgImtleGVjIGp1bXAgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTVVBFUkgzMiAmJiBLRVhFQyAmJiBISUJFUk5BVElPTiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlCisJICBjb2RlIHZpYSBLRVhFQworCiBjb25maWcgU0VDQ09NUAogCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKIAlkZXBlbmRzIG9uIFBST0NfRlMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZy5jcHUgYi9hcmNoL3NoL0tjb25maWcuY3B1CmluZGV4IDBlMjdmZTMuLmM3ZDcwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC9zaC9LY29uZmlnLmNwdQpAQCAtMTA0LDYgKzEwNCw5IEBACiBjb25maWcgQ1BVX0hBU19QVEVBCiAJYm9vbAogCitjb25maWcgQ1BVX0hBU19QVEVBRVgKKwlib29sCisKIGNvbmZpZyBDUFVfSEFTX0RTUAogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggNDA2N2IwZC4uYmVjZTFmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC04MCw2ICs4MCw3IEBACiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU1VQRVJIMzIpCQkJOj0gekltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfU0g3Nzg1TENSKQkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfUlNLKQkJCTo9IHVJbWFnZQorZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1VSUVVFTEwpCQk6PSB1SW1hZ2UKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83MjA2X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIXzc2MTlfU09MVVRJT05fRU5HSU5FKQk6PSB2bWxpbnV4CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IDg2MTkxNDcuLmRjYzFhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTU1LDE3ICsxNTUsMjIgQEAKIAogY29uZmlnIFNIX1NINzc4NUxDUl8yOUJJVF9QSFlTTUFQUwogCWJvb2wgIlNINzc4NUxDUiAyOWJpdCBwaHlzbWFwcyIKLQlkZXBlbmRzIG9uIFNIX1NINzc4NUxDUgorCWRlcGVuZHMgb24gU0hfU0g3Nzg1TENSICYmIDI5QklUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBib2FyZCBoYXMgMiBwaHlzaWNhbCBtZW1vcnkgbWFwcy4gSXQgY2FuIGJlIGNoYW5nZWQgd2l0aAogCSAgRElQIHN3aXRjaChTMi01KS4gSWYgeW91IHNldCB0aGUgRElQIHN3aXRjaCBmb3IgUzItNSA9IE9OLAogCSAgeW91IGNhbiBhY2Nlc3MgYWxsIG9uLWJvYXJkIGRldmljZSBpbiAyOWJpdCBhZGRyZXNzIG1vZGUuCiAKK2NvbmZpZyBTSF9VUlFVRUxMCisJYm9vbCAiVXJxdWVsbCIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4NgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCiBjb25maWcgU0hfTUlHT1IKIAlib29sICJNaWdvLVIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjIKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgU2VsZWN0IE1pZ28tUiBpZiBjb25maWd1cmluZyBmb3IgdGhlIFNINzcyMiBNaWdvLVIgcGxhdGZvcm0KICAgICAgICAgICBieSBSZW5lc2FzIFN5c3RlbSBTb2x1dGlvbnMgQXNpYSBQdGUuIEx0ZC4KQEAgLTE3Myw3ICsxNzgsNyBAQAogY29uZmlnIFNIX0FQMzI1UlhBCiAJYm9vbCAiQVAtMzI1UlhBIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIzCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFJlbmVzYXMgIkFQLTMyNVJYQSIgc3VwcG9ydC4KIAkgIENvbXBhdGlibGUgd2l0aCBBTEdPIFNZU1RFTSBDTy4sTFRELiAiQVAtMzIwQSIKQEAgLTE4NSw2ICsxOTAsMTMgQEAKIAkgIFNlbGVjdCBTSDc3NjNSRFAgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBTSDc3NjMKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBTSF9FU1BUCisJYm9vbCAiRVNQVCIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc2MworCWhlbHAKKwkgIFNlbGVjdCBFU1BUIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgU0g3NzYzCisJICB3aXRoIGdpZ2FiaXQgZXRoZXIgZXZhbHVhdGlvbiBib2FyZC4KKwogY29uZmlnIFNIX0VET1NLNzcwNQogCWJvb2wgIkVET1NLNzcwNSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcwNQpAQCAtMjQwLDcgKzI1Miw3IEBACiBjb25maWcgU0hfTUFHSUNfUEFORUxfUjIKIAlib29sICJNYWdpYyBQYW5lbCBSMiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMAotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBTZWxlY3QgTWFnaWMgUGFuZWwgUjIgaWYgY29uZmlndXJpbmcgZm9yIE1hZ2ljIFBhbmVsIFIyLgogCkBAIC0yNDksNiArMjYxLDEzIEBACiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDVfMTAxIHx8IENQVV9TVUJUWVBFX1NINV8xMDMKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1BDSQogCitjb25maWcgU0hfUE9MQVJJUworCWJvb2wgIlNNU0MgUG9sYXJpcyIKKwlzZWxlY3QgQ1BVX0hBU19JUFJfSVJRCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDkKKwloZWxwCisJICBTZWxlY3QgaWYgY29uZmlndXJpbmcgZm9yIGFuIFNNU0MgUG9sYXJpcyBkZXZlbG9wbWVudCBib2FyZAorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKaW5kZXggMjY5YWUyYi4uN2JhYTIxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKQEAgLTQsNSArNCw4IEBACiBvYmotJChDT05GSUdfU0hfQVAzMjVSWEEpCSs9IGJvYXJkLWFwMzI1cnhhLm8KIG9iai0kKENPTkZJR19TSF9NQUdJQ19QQU5FTF9SMikJKz0gYm9hcmQtbWFnaWNwYW5lbHIyLm8KIG9iai0kKENPTkZJR19TSF9TSDc3ODVMQ1IpCSs9IGJvYXJkLXNoNzc4NWxjci5vCitvYmotJChDT05GSUdfU0hfVVJRVUVMTCkJKz0gYm9hcmQtdXJxdWVsbC5vCiBvYmotJChDT05GSUdfU0hfU0hNSU4pCQkrPSBib2FyZC1zaG1pbi5vCiBvYmotJChDT05GSUdfU0hfRURPU0s3NzYwKQkrPSBib2FyZC1lZG9zazc3NjAubworb2JqLSQoQ09ORklHX1NIX0VTUFQpCQkrPSBib2FyZC1lc3B0Lm8KK29iai0kKENPTkZJR19TSF9QT0xBUklTKQkrPSBib2FyZC1wb2xhcmlzLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCmluZGV4IDdjMzU3ODcuLmE2NGUzODggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9ncGlvLmg+Ci0jaW5jbHVkZSA8bWVkaWEvb3Y3NzJ4Lmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CiAjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KQEAgLTE2Niw2ICsxNjYsMTYgQEAKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIAorc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwkvKiBiYWNrbGlnaHQgKi8KKwljdHJsX291dHcoMCwgRlBHQV9CS0xSRUcpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMSk7CisKKwkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT0ZGICovCisJY3RybF9vdXR3KDAsIEZQR0FfTENEUkVHKTsKK30KKwogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGNfaW5mbyA9IHsKIAkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfRVhURVJOQUwsCiAJLmNoWzBdID0gewpAQCAtMTkxLDYgKzIwMSw3IEBACiAJCX0sCiAJCS5ib2FyZF9jZmcgPSB7CiAJCQkuZGlzcGxheV9vbiA9IGFwMzIwX3d2Z2FfcG93ZXJfb24sCisJCQkuZGlzcGxheV9vZmYgPSBhcDMyMF93dmdhX3Bvd2VyX29mZiwKIAkJfSwKIAl9CiB9OwpAQCAtMjI0LDcgKzIzNSw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfSTJDCi0vKiBzdXBwb3J0IGZvciB0aGUgb2xkIG5jbTAzaiBjYW1lcmEgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhbWVyYV9uY20wM2pfbWFnaWNbXSA9CiB7CiAJMHg4NywgMHgwMCwgMHg4OCwgMHgwOCwgMHg4OSwgMHgwMSwgMHg4QSwgMHhFOCwKQEAgLTI0NSwyMyArMjU1LDYgQEAKIAkweDYzLCAweEQ0LCAweDY0LCAweEVBLCAweEQ2LCAweDBGLAogfTsKIAotc3RhdGljIGludCBjYW1lcmFfcHJvYmUodm9pZCkKLXsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmEgPSBpMmNfZ2V0X2FkYXB0ZXIoMCk7Ci0Jc3RydWN0IGkyY19tc2cgbXNnOwotCWludCByZXQ7Ci0KLQljYW1lcmFfcG93ZXIoMSk7Ci0JbXNnLmFkZHIgPSAweDZlOwotCW1zZy5idWYgPSBjYW1lcmFfbmNtMDNqX21hZ2ljOwotCW1zZy5sZW4gPSAyOwotCW1zZy5mbGFncyA9IDA7Ci0JcmV0ID0gaTJjX3RyYW5zZmVyKGEsICZtc2csIDEpOwotCWNhbWVyYV9wb3dlcigwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgY2FtZXJhX3NldF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm8sCiAJCQkgICAgICBpbnQgZW5hYmxlKQogewpAQCAtMzEzLDM1ICszMDYsOCBAQAogCQkucGxhdGZvcm1fZGF0YQk9ICZjYW1lcmFfaW5mbywKIAl9LAogfTsKLQotc3RhdGljIGludCBfX2luaXQgY2FtZXJhX3NldHVwKHZvaWQpCi17Ci0JaWYgKGNhbWVyYV9wcm9iZSgpID4gMCkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKLQotCXJldHVybiAwOwotfQotbGF0ZV9pbml0Y2FsbChjYW1lcmFfc2V0dXApOwotCiAjZW5kaWYgLyogQ09ORklHX0kyQyAqLwogCi1zdGF0aWMgaW50IG92NzcyNV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWNhbWVyYV9wb3dlcigwKTsKLQlpZiAobW9kZSkKLQkJY2FtZXJhX3Bvd2VyKDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvIG92NzcyNV9pbmZvID0gewotCS5idXN3aWR0aCAgPSBTT0NBTV9EQVRBV0lEVEhfOCwKLQkuZmxhZ3MgPSBPVjc3MlhfRkxBR19WRkxJUCB8IE9WNzcyWF9GTEFHX0hGTElQLAotCS5saW5rID0gewotCQkucG93ZXIgID0gb3Y3NzI1X3Bvd2VyLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7CiAJLmZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAogCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzgsCkBAIC0zOTIsNiArMzU4LDkgQEAKIAkmYXAzMjVyeGFfbm9yX2ZsYXNoX2RldmljZSwKIAkmbGNkY19kZXZpY2UsCiAJJmNldV9kZXZpY2UsCisjaWZkZWYgQ09ORklHX0kyQworCSZjYW1lcmFfZGV2aWNlLAorI2VuZGlmCiAJJm5hbmRfZmxhc2hfZGV2aWNlLAogCSZzZGNhcmRfY24zX2RldmljZSwKIH07CkBAIC00MDAsMTAgKzM2OSw2IEBACiAJewogCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAogCX0sCi0JewotCQlJMkNfQk9BUkRfSU5GTygib3Y3NzJ4IiwgMHgyMSksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJm92NzcyNV9pbmZvLAotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGFwMzI1cnhhX3NwaV9kZXZpY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZTVlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVzcHQuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIERhdGEgVGVjaG5vbG9neSBJbmMuIEVTUFQtR0lHQSBib2FyZCBzdXBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3Uubm9idWhpcm9AcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3NoX2V0aC5oPgorCisvKiBOT1IgRmxhc2ggKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlc3B0X25vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJVLUJvb3QiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUgPSAoMiAqIFNaXzEyOEspLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCX0sIHsKKwkJLm5hbWUgPSAiTGludXgtS2VybmVsIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSAoMjAgKiBTWl8xMjhLKSwKKwl9LCB7CisJCS5uYW1lID0gIlJvb3QgRmlsZXN5c3RlbSIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXNwdF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorCS5wYXJ0cyA9IGVzcHRfbm9yX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzID0gQVJSQVlfU0laRShlc3B0X25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXNwdF9ub3JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZSA9ICJOT1IgRmxhc2giLAorCQkuc3RhcnQgPSAwLAorCQkuZW5kID0gU1pfOE0gLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwdF9ub3JfZmxhc2hfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5yZXNvdXJjZSA9IGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZXNwdF9ub3JfZmxhc2hfcmVzb3VyY2VzKSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlc3B0X25vcl9mbGFzaF9kYXRhLAorCX0sCit9OworCisvKiBTSC1FdGhlciAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9ldGhfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgID0gMHhGRUUwMDgwMCwgICAvKiB1c2UgZXRoMSAqLworCQkuZW5kICAgID0gMHhGRUUwMEY3QyAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgPSA1NywgICAvKiBpcnEgbnVtYmVyICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhIHNoNzc2M19ldGhfcGRhdGEgPSB7CisJLnBoeSA9IDAsCisJLmVkbWFjX2VuZGlhbiA9IEVETUFDX0xJVFRMRV9FTkRJQU4sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlc3B0X2V0aF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgPSAic2gtZXRoIiwKKwkucmVzb3VyY2UgICA9IHNoX2V0aF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaF9ldGhfcmVzb3VyY2VzKSwKKwkuZGV2ICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2g3NzYzX2V0aF9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVzcHRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmVzcHRfbm9yX2ZsYXNoX2RldmljZSwKKwkmZXNwdF9ldGhfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZXNwdF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGVzcHRfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShlc3B0X2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbChlc3B0X2RldmljZXNfc2V0dXApOworCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2VzcHQgX19pbml0bXYgPSB7CisJLm12X25hbWUgPSAiRVNQVC1HSUdBIiwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2MDdlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIEp1bmUgMjAwNiBzdGV2ZS5nbGVuZGlubmluZ0BzbXNjLmNvbQorICoKKyAqIFBvbGFyaXMtc3BlY2lmaWMgcmVzb3VyY2UgZGVjbGFyYXRpb24KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGNwdS9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC1zZS9tYWNoL3NlLmg+CisKKyNkZWZpbmUgQkNSMgkJKDB4RkZGRkZGNjIpCisjZGVmaW5lIFdDUjIJCSgweEZGRkZGRjY2KQorI2RlZmluZSBBUkVBNV9XQUlUX0NUUkwJKDB4MUMwMCkKKyNkZWZpbmUgV0FJVF9TVEFURVNfMTAJKDB4NykKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJzbXNjOTExeC1tZW1vcnkiLAorCQkuc3RhcnQJCT0gUEFfRVhUNSwKKwkJLmVuZAkJPSBQQV9FWFQ1ICsgMHgxZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJzbXNjOTExeC1pcnEiLAorCQkuc3RhcnQJCT0gSVJRMF9JUlEsCisJCS5lbmQJCT0gSVJRMF9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfY29uZmlnID0geworCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQsCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21zYzkxMXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbXNjOTExeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhcnRiZWF0X2JpdF9wb3NbXSA9IHsgMCwgMSwgMiwgMyB9OworCitzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0geworCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCisJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKKwkucmVnc2l6ZQk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBPUlRfUENEUiwKKwkJLmVuZAk9IFBPUlRfUENEUiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG9sYXJpc19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc21zYzkxMXhfZGV2aWNlLAorCSZoZWFydGJlYXRfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG9sYXJpc19pbml0aWFsaXNlKHZvaWQpCit7CisJdTE2IHdjciwgYmNyX21hc2s7CisKKwlwcmludGsoS0VSTl9JTkZPICJDb25maWd1cmluZyBQb2xhcmlzIGV4dGVybmFsIGJ1c1xuIik7CisKKwkvKiBDb25maWd1cmUgYXJlYSA1IHdpdGggMiB3YWl0IHN0YXRlcyAqLworCXdjciA9IGN0cmxfaW53KFdDUjIpOworCXdjciAmPSAofkFSRUE1X1dBSVRfQ1RSTCk7CisJd2NyIHw9IChXQUlUX1NUQVRFU18xMCA8PCAxMCk7CisJY3RybF9vdXR3KHdjciwgV0NSMik7CisKKwkvKiBDb25maWd1cmUgYXJlYSA1IGZvciAzMi1iaXQgYWNjZXNzICovCisJYmNyX21hc2sgPSBjdHJsX2ludyhCQ1IyKTsKKwliY3JfbWFzayB8PSAxIDw8IDEwOworCWN0cmxfb3V0dyhiY3JfbWFzaywgQkNSMik7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocG9sYXJpc19kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHBvbGFyaXNfZGV2aWNlcykpOworfQorYXJjaF9pbml0Y2FsbChwb2xhcmlzX2luaXRpYWxpc2UpOworCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIGlwcl9pcnFfdGFibGVbXSA9IHsKKwkvKiBFeHRlcm5hbCBJUlFzICovCisJeyBJUlEwX0lSUSwgMCwgIDAsICAxLCB9LAkvKiBJUlEwICovCisJeyBJUlExX0lSUSwgMCwgIDQsICAxLCB9LAkvKiBJUlExICovCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcHJfb2Zmc2V0c1tdID0geworCUlOVENfSVBSQworfTsKKworc3RhdGljIHN0cnVjdCBpcHJfZGVzYyBpcHJfaXJxX2Rlc2MgPSB7CisJLmlwcl9vZmZzZXRzCT0gaXByX29mZnNldHMsCisJLm5yX29mZnNldHMJPSBBUlJBWV9TSVpFKGlwcl9vZmZzZXRzKSwKKworCS5pcHJfZGF0YQk9IGlwcl9pcnFfdGFibGUsCisJLm5yX2lycXMJPSBBUlJBWV9TSVpFKGlwcl9pcnFfdGFibGUpLAorCS5jaGlwID0geworCQkubmFtZQk9ICJzaDc3MDktZXh0IiwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfcG9sYXJpc19pcnEodm9pZCkKK3sKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJY3RybF9vdXR3KDAsIEJDUl9JTENSQSk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSQik7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSQyk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRCk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRSk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRik7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRyk7CisKKwlyZWdpc3Rlcl9pcHJfY29udHJvbGxlcigmaXByX2lycV9kZXNjKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9wb2xhcmlzIF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJQb2xhcmlzIiwKKwkubXZfbnJfaXJxcwkJPSA2MSwKKwkubXZfaW5pdF9pcnEJCT0gaW5pdF9wb2xhcmlzX2lycSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jCmluZGV4IDM4YTY0OTYuLjk0YzAyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jCkBAIC0yNzUsNyArMjc1LDE4IEBACiAKIHN0YXRpYyB2b2lkIHNoNzc4NWxjcl9wb3dlcl9vZmYodm9pZCkKIHsKLQljdHJsX291dGIoMHgwMSwgUDJTRUdBRERSKFBMRF9QT0ZDUikpOworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwlwID0gaW9yZW1hcChQTERfUE9GQ1IsIFBMRF9QT0ZDUiArIDEpOworCWlmICghcCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGVycm9yLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCSpwID0gMHgwMTsKKwlpb3VubWFwKHApOworCXNldF9ibF9iaXQoKTsKKwl3aGlsZSAoMSkKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwMzZjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIFJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLiBTSDc3ODYgVXJxdWVsbCBTdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBZb3NoaWhpcm8gU2hpbW9kYQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL3VycXVlbGwuaD4KKyNpbmNsdWRlIDxjcHUvc2g3Nzg2Lmg+CisjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKKwkJLmVuZAk9IEJPQVJEUkVHKFNMRURSKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CisJLnJlZ3NpemUgPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X2V0aF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lICAgPSAiU01DOTFDMTExIiAsCisJCS5zdGFydCAgPSAweDA1ODAwMzAwLAorCQkuZW5kICAgID0gMHgwNTgwMDMwZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMTEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2V0aF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNtYzkxeCIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzbWM5MXhfZXRoX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gc21jOTF4X2V0aF9yZXNvdXJjZXMsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jOTF4X2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gImxvYWRlciIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gImJvb3RlbnYiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gImtlcm5lbCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl80TSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImRhdGEiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IG5vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBub3JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBOT1JfRkxBU0hfQUREUiwKKwkJLmVuZAk9IE5PUl9GTEFTSF9BRERSICsgTk9SX0ZMQVNIX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBub3JfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbm9yX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1cnF1ZWxsX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoZWFydGJlYXRfZGV2aWNlLAorCSZzbWM5MXhfZXRoX2RldmljZSwKKwkmbm9yX2ZsYXNoX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVycXVlbGxfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCS8qIFVTQiAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1VTQl9PVkMwLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVVNCX1BFTkMwLCBOVUxMKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyh1cnF1ZWxsX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUodXJxdWVsbF9kZXZpY2VzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwodXJxdWVsbF9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIHZvaWQgdXJxdWVsbF9wb3dlcl9vZmYodm9pZCkKK3sKKwlfX3Jhd193cml0ZXcoMHhhNWE1LCBVQk9BUkRSRUcoU1JTVFIpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHVycXVlbGxfaW5pdF9pcnEodm9pZCkKK3sKKwlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTBfTUFTSyk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCitzdGF0aWMgdm9pZCBfX2luaXQgdXJxdWVsbF9zZXR1cChjaGFyICoqY21kbGluZV9wKQoreworCXByaW50ayhLRVJOX0lORk8gIlJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLiBVcnF1ZWxsIHN1cHBvcnQuXG4iKTsKKworCXBtX3Bvd2VyX29mZiA9IHVycXVlbGxfcG93ZXJfb2ZmOworfQorCisvKgorICogVGhlIE1hY2hpbmUgVmVjdG9yCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdXJxdWVsbCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQk9ICJVcnF1ZWxsIiwKKwkubXZfc2V0dXAJPSB1cnF1ZWxsX3NldHVwLAorCS5tdl9pbml0X2lycQk9IHVycXVlbGxfaW5pdF9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvS2NvbmZpZwppbmRleCAwODA1N2Y2Li5kZWY0OWNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvS2NvbmZpZwpAQCAtMTgsNyArMTgsNyBAQAogY29uZmlnIFNIX1I3Nzg1UlAKIAlib29sICJSNzc4NVJQIGJvYXJkIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODUKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAKIGVuZGNob2ljZQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUwppbmRleCA0NGI2NDhjLi40ZjE4ZDQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG1fd2FrZXVwLlMKQEAgLTEwLDQ3ICsxMCwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxjcHUvbW11X2NvbnRleHQuaD4KIAotI2RlZmluZSBrMAlyMAotI2RlZmluZSBrMQlyMQotI2RlZmluZSBrMglyMgotI2RlZmluZSBrMwlyMwotI2RlZmluZSBrNAlyNAotCiAvKgogICogS2VybmVsIG1vZGUgcmVnaXN0ZXIgdXNhZ2U6CiAgKglrMAlzY3JhdGNoCiAgKglrMQlzY3JhdGNoCi0gKglrMglzY3JhdGNoIChFeGNlcHRpb24gY29kZSkKLSAqCWszCXNjcmF0Y2ggKFJldHVybiBhZGRyZXNzKQotICoJazQJc2NyYXRjaAotICoJazUJcmVzZXJ2ZWQKLSAqCWs2CUdsb2JhbCBJbnRlcnJ1cHQgTWFzayAoMC0tMTUgPDwgNCkKLSAqCWs3CUNVUlJFTlRfVEhSRUFEX0lORk8gKHBvaW50ZXIgdG8gY3VycmVudCB0aHJlYWQgaW5mbykKKyAqIEZvciBtb3JlIGRldGFpbHMsIHBsZWFzZSBoYXZlIGEgbG9vayBhdCBlbnRyeS5TCiAgKi8KIAorI2RlZmluZSBrMAlyMAorI2RlZmluZSBrMQlyMQorCiBFTlRSWSh3YWtldXBfc3RhcnQpCiAhIGNsZWFyIFNUQlkgYml0Ci0JbW92CSMtMTI2LCBrMgorCW1vdgkjLTEyNiwgazEKICAgIAlhbmQJIzEyNywgazAKLQltb3YuYglrMCwgQGsyCisJbW92LmIJazAsIEBrMQogISBlbmFibGUgcmVmcmVzaAogCW1vdi5sCTVmLCBrMQogCW1vdi53CTZmLCBrMAogICAJbW92LncJazAsIEBrMQogISBqdW1wIHRvIGhhbmRsZXIKLQltb3YubAkyZiwgazIKLQltb3YubAkzZiwgazMKLQltb3YubAlAazIsIGsyCi0KIAltb3YubAk0ZiwgazEKIAlqbXAJQGsxCi0Jbm9wCisJIG5vcAogCiAJLmFsaWduCTIKLTE6CS5sb25nCUVYUEVWVAotMjoJLmxvbmcJSU5URVZUCi0zOgkubG9uZwlyZXRfZnJvbV9pcnEKLTQ6CS5sb25nCWhhbmRsZV9leGNlcHRpb24KKzQ6CS5sb25nCWhhbmRsZV9pbnRlcnJ1cHQKIDU6CS5sb25nCTB4ZmZmZmZmNjgKIDY6CS53b3JkCTB4MDUyNAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKaW5kZXggNzQ2NzQyYmQuLjhmMzA1YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKQEAgLTExNSw3ICsxMTUsNiBAQAogCS5tdl9zZXR1cCA9IGhwNnh4X3NldHVwLAogCS8qIElSUSdzIDogQ1BVKDY0KSArIENDSElQKDE2KSArIEZSRUVfVE9fVVNFKDYpICovCiAJLm12X25yX2lycXMgPSBIRDY0NDYxX0lSUUJBU0UgKyBIRDY0NDYxX0lSUV9OVU0gKyA2LAotCS5tdl9pcnFfZGVtdXggPSBoZDY0NDYxX2lycV9kZW11eCwKIAkvKiBFbmFibGUgSVJRMCAtPiBJUlEzIGluIElSUV9NT0RFICovCiAJLm12X2luaXRfaXJxID0gaHA2eHhfaW5pdF9pcnEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IDI4ZTU2YzUuLmJjMzViNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTQ1MCw2ICs0NTAsMTQgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWlnb3JfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCisjaWZkZWYgQ09ORklHX1BNCisJLyogTGV0IEQxMSBMRUQgc2hvdyBTVEFUVVMwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMCwgTlVMTCk7CisKKwkvKiBMaXQgRDEyIExFRCBzaG93IFBEU1RBVFVTICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOworI2Vsc2UKIAkvKiBMaXQgRDExIExFRCAqLwogCWdwaW9fcmVxdWVzdChHUElPX1BUSjcsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjcsIDEpOwpAQCAtNDU5LDYgKzQ2Nyw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7CiAJZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKKyNlbmRpZgogCiAJLyogU01DOTFDMTExIC0gRW5hYmxlIElSUTAsIFNldHVwIENTNCBmb3IgMTYtYml0IGZhc3QgYWNjZXNzICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZwppbmRleCBiZmYwOTVkLi5hZWZmM2IwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL0tjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIAogY29uZmlnIFNIX1JTSzcyMDMKIAlib29sICJSU0s3MjAzIgotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzIwMwogCiBlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCmluZGV4IDZmOTI2ZmQuLjM5MDUzNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwpAQCAtNjMsMTUgKzYzLDE5IEBACiAJfSwKIH07CiAKLS8qIFNILUV0aGVyICovCisvKgorICogU0gtRXRoZXIKKyAqCisgKiBTSCBFdGhlciBvZiBTSDc3NjMgaGFzIG11bHRpIElSUSBoYW5kbGluZy4KKyAqICg1Nyw1OCw1OSAtPiA1NykKKyAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9ldGhfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgID0gMHhGRUUwMDgwMCwgICAvKiB1c2UgZXRoMSAqLwogCQkuZW5kICAgID0gMHhGRUUwMEY3QyAtIDEsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydCAgPSA1OCwgICAvKiBpcnEgbnVtYmVyICovCi0JCS5lbmQgICAgPSA1OCwKKwkJLnN0YXJ0ICA9IDU3LCAgIC8qIGlycSBudW1iZXIgKi8KIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IGMxNmNjZDQuLjk1NDgzZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTMzLDIwICszMywyNCBAQAogJChvYmopL2NvbXByZXNzZWQvdm1saW51eDogRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvY29tcHJlc3NlZCAkQAogCi1pZmVxICgkKENPTkZJR18zMkJJVCkseSkKLUtFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAotCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCi0JCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKV0nKQotZWxzZQotS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCi0JCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKLQkJCSQoQ09ORklHX01FTU9SWV9TVEFSVCkgKyBcCi0JCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKV0nKQorS0VSTkVMX01FTU9SWSA6PSAweDAwMDAwMDAwCitpZmVxICgkKENPTkZJR19QTUJfRklYRUQpLHkpCitLRVJORUxfTUVNT1JZIDo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAorCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCkgJiAweDFmZmZmZmZmXScpCiBlbmRpZgoraWZlcSAoJChDT05GSUdfMjlCSVQpLHkpCitLRVJORUxfTUVNT1JZIDo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAorCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCldJykKK2VuZGlmCisKK0tFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAorCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCisJCQkkKEtFUk5FTF9NRU1PUlkpICsgXAorCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKIAogS0VSTkVMX0VOVFJZCTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAogCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCi0JCQkkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAorCQkJJChLRVJORUxfTUVNT1JZKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpICsgJChDT05GSUdfRU5UUllfT0ZGU0VUKV0nKQogCiBxdWlldF9jbWRfdWltYWdlID0gVUlNQUdFICAkQApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwppbmRleCAyN2NlZWI5Li4yNWVmOTEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYworKysgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwpAQCAtNTMsMjEgKzUzLDIyIEBACiAJLnVubWFzawkJPSBoZDY0NDYxX3VubWFza19pcnEsCiB9OwogCi1pbnQgaGQ2NDQ2MV9pcnFfZGVtdXgoaW50IGlycSkKK3N0YXRpYyB2b2lkIGhkNjQ0NjFfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlpZiAoaXJxID09IENPTkZJR19IRDY0NDYxX0lSUSkgewotCQl1bnNpZ25lZCBzaG9ydCBiaXQ7Ci0JCXVuc2lnbmVkIHNob3J0IG5pcnIgPSBpbncoSEQ2NDQ2MV9OSVJSKTsKLQkJdW5zaWduZWQgc2hvcnQgbmltciA9IGludyhIRDY0NDYxX05JTVIpOwotCQlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gY3RybF9pbncoSEQ2NDQ2MV9OSVJSKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmV4dF9kZXNjOworCXVuc2lnbmVkIGludCBleHRfaXJxID0gSEQ2NDQ2MV9JUlFCQVNFOwogCi0JCW5pcnIgJj0gfm5pbXI7Ci0JCWZvciAoYml0ID0gMSwgaSA9IDA7IGkgPCAxNjsgYml0IDw8PSAxLCBpKyspCi0JCQlpZiAobmlyciAmIGJpdCkKLQkJCQlicmVhazsKLQkJaXJxID0gSEQ2NDQ2MV9JUlFCQVNFICsgaTsKKwlpbnR2ICY9ICgxIDw8IEhENjQ0NjFfSVJRX05VTSkgLSAxOworCisJd2hpbGUgKGludHYpIHsKKwkJaWYgKGludHYgJiAxKSB7CisJCQlleHRfZGVzYyA9IGlycV9kZXNjICsgZXh0X2lycTsKKwkJCWhhbmRsZV9sZXZlbF9pcnEoZXh0X2lycSwgZXh0X2Rlc2MpOworCQl9CisJCWludHYgPj49IDE7CisJCWV4dF9pcnErKzsKIAl9Ci0JcmV0dXJuIGlycTsKIH0KIAogaW50IF9faW5pdCBzZXR1cF9oZDY0NDYxKHZvaWQpCkBAIC05Myw2ICs5NCw5IEBACiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmaGQ2NDQ2MV9pcnFfY2hpcCwKIAkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQ09ORklHX0hENjQ0NjFfSVJRLCBoZDY0NDYxX2lycV9kZW11eCk7CisJc2V0X2lycV90eXBlKENPTkZJR19IRDY0NDYxX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwogI2lmZGVmIENPTkZJR19IRDY0NDYxX0VOQUJMRVIKIAlwcmludGsoS0VSTl9JTkZPICJIRDY0NDYxOiBlbmFibGluZyBQQ01DSUEgZGV2aWNlc1xuIik7CiAJX19yYXdfd3JpdGViKDB4NGMsIEhENjQ0NjFfUENDMUNTQ0lFUik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczZWM0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDExOTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzcKKyMgVHVlIE1hciAxNyAxMzoyNTo1OCAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKK0NPTkZJR19VVFNfTlM9eQorQ09ORklHX0lQQ19OUz15CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CisjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworIyBDT05GSUdfU0hfU0g3NzYzUkRQIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9FU1BUPXkKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTI4CitDT05GSUdfU0hfUENMS19GUkVRPTY2NjY2NjY2CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CitDT05GSUdfU0hfRVRIPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOPXkKK0NPTkZJR19GQl9CT1RIX0VORElBTj15CisjIENPTkZJR19GQl9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TSDc3NjA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19MT0dPX1NVUEVSSF9NT05PPXkKK0NPTkZJR19MT0dPX1NVUEVSSF9WR0ExNj15CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PXkKK0NPTkZJR19OTFNfSVNPODg1OV84PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9eQorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj15CitDT05GSUdfTkxTX0lTTzg4NTlfMz15CitDT05GSUdfTkxTX0lTTzg4NTlfND15CitDT05GSUdfTkxTX0lTTzg4NTlfNT15CitDT05GSUdfTkxTX0lTTzg4NTlfNj15CitDT05GSUdfTkxTX0lTTzg4NTlfNz15CitDT05GSUdfTkxTX0lTTzg4NTlfOT15CitDT05GSUdfTkxTX0lTTzg4NTlfMTM9eQorQ09ORklHX05MU19JU084ODU5XzE0PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CitDT05GSUdfTkxTX0tPSThfUj15CitDT05GSUdfTkxTX0tPSThfVT15CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX1QxMERJRj15CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGRlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKQEAgLTAsMCArMSw5NjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgV2VkIEZlYiAxMSAxODo0MTo1OSAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0gzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwQzAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKK0NPTkZJR18yOUJJVD15CitDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFVfRU1VPXkKK0NPTkZJR19TSF9BREM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX0lQUl9JUlE9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0CitDT05GSUdfU0hfUE9MQVJJUz15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzAwMDAwMAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9ETUFfQVBJPXkKK0NPTkZJR19TSF9ETUE9eQorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9amZmczIgbWVtPTYzTSBtdGRwYXJ0cz1waHlzbWFwLWZsYXNoLjA6MHgwMDEwMDAwMChib290bG9hZGVyKXJvLDB4MDA1MDAwMDAoS2VybmVsKXJvLDB4MDBBMDAwMDAoRmlsZXN5c3RlbSkiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAxMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAorIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAorIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TSD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0RFUD15CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TRz15CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4MDAwMDAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CitDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0dFTkVSSUM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlMWRlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTU1MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNAorIyBGcmkgRmViIDIwIDE4OjI1OjI5IDIwMDkKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19JT19UUkFQUEVEPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorQ09ORklHX0NQVV9TSFgyPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHg0MDAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MjAwMDAwMDAKKyMgQ09ORklHXzI5QklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CitDT05GSUdfUE1CX0VOQUJMRT15CisjIENPTkZJR19QTUIgaXMgbm90IHNldAorQ09ORklHX1BNQl9GSVhFRD15CisjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CitDT05GSUdfVlNZU0NBTEw9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MgorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQT15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0hJR0hMQU5ERVIgaXMgbm90IHNldAorQ09ORklHX1NIX1NINzc4NUxDUj15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0yOAorQ09ORklHX1NIX1BDTEtfRlJFUT01MDAwMDAwMAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CitDT05GSUdfUENJX0FVVE89eQorQ09ORklHX1BDSV9BVVRPX1VQREFURV9SRVNPVVJDRVM9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTD15CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorQ09ORklHX01JST15CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CitDT05GSUdfUjgxNjk9eQorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09QQ0E9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCitDT05GSUdfSTJDX1BDQV9QTEFURk9STT15CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KK0NPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQorQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GT1BTPW0KK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CitDT05GSUdfRkJfU0hfTU9CSUxFX0xDREM9bQorQ09ORklHX0ZCX1NNNTAxPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19USFJVU1RNQVNURVJfRkY9bQorQ09ORklHX1pFUk9QTFVTX0ZGPW0KK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9SUzVDMzcyPXkKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05URlNfUlc9eQorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzI2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzMyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0CisjIFRodSBNYXIgIDUgMTc6Mjg6MTMgMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CitDT05GSUdfQ1BVX1NIWDM9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKK0NPTkZJR18yOUJJVD15CisjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CitDT05GSUdfVlNZU0NBTEw9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCitDT05GSUdfU0hfVVJRVUVMTD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLCAzODQwMCBlYXJseXByaW50az1zZXJpYWwgaXA9b24gaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBtZW1jaHVuay52cHU9NG0iCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPUENBPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfUENBX1BMQVRGT1JNPXkKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX01GRF9TTTUwMV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KK0NPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQorQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GT1BTPW0KK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05URlNfUlc9eQorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IDAxOTM2MzYuLmYxM2EwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTksMTMgKzksMjEgQEAKIAlzZWxlY3QgU0hfRE1BX0FQSQogCWRlZmF1bHQgbgogCitjb25maWcgU0hfRE1BX0lSUV9NVUxUSQorCWJvb2wKKwlkZXBlbmRzIG9uIFNIX0RNQQorCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IFwKKwkJQ1BVX1NVQlRZUEVfU0g3NzUwUyB8fCBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIgfHwgXAorCQlDUFVfU1VCVFlQRV9TSDcwOTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzYzIHx8IENQVV9TVUJUWVBFX1NINzc2NCB8fCBcCisJCUNQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKKwogY29uZmlnIE5SX09OQ0hJUF9ETUFfQ0hBTk5FTFMKIAlpbnQKIAlkZXBlbmRzIG9uIFNIX0RNQQotCWRlZmF1bHQgIjYiIGlmIENQVV9TVUJUWVBFX1NINzcyMCB8fCBDUFVfU1VCVFlQRV9TSDc3MjEKLQlkZWZhdWx0ICI4IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIKLQlkZWZhdWx0ICIxMiIgaWYgQ1BVX1NVQlRZUEVfU0g3NzgwCi0JZGVmYXVsdCAiNCIKKwlkZWZhdWx0ICI0IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IENQVV9TVUJUWVBFX1NINzc1MFMKKwlkZWZhdWx0ICI4IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIgfHwgQ1BVX1NVQlRZUEVfU0g3NzYwCisJZGVmYXVsdCAiMTIiIGlmIENQVV9TVUJUWVBFX1NINzcyMyB8fCBDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CisJZGVmYXVsdCAiNiIKIAloZWxwCiAJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgdGhlIG9uLWNoaXAKIAkgIERNQUMgc3VwcG9ydHMuIFRoaXMgd2lsbCBiZSA0IGZvciBTSDc3NTAvU0g3NzUxIGFuZCA4IGZvciB0aGUKQEAgLTQ2LDQgKzU0LDI4IEBACiAJICBvZiB0aGUgU0g3NzYwLgogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIEF1ZGlvL1VTQiBETUEgb24geW91ciBTSDc3NjAgYm9hcmQuCiAKK2NvbmZpZyBQVlIyX0RNQQorCXRyaXN0YXRlICJQb3dlclZSIDIgRE1BQyBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUICYmIFNIX0RNQQorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBQVlIyIERNQSBjb250cm9sbGVyLgorCSAgQXMgdGhpcyBjaGFpbnMgb2ZmIG9mIHRoZSBvbi1jaGlwIERNQUMsIHRoYXQgbXVzdCBhbHNvIGJlCisJICBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKwkgIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgYnkgdGhlIHB2cjJmYiBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yCisJICBjZXJ0YWluIG9wdGltaXphdGlvbnMsIGJ1dCBpcyBub3QgbmVjZXNzYXJ5IGZvciBmdW5jdGlvbmFsaXR5LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKK2NvbmZpZyBHMl9ETUEKKwl0cmlzdGF0ZSAiRzIgQnVzIERNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUCisJc2VsZWN0IFNIX0RNQV9BUEkKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIERNQSBjb250cm9sbGVyIGZvciB0aGUgRHJlYW1jYXN0J3MKKwkgIEcyIGJ1cy4gRHJpdmVycyB0aGF0IHdhbnQgdGhpcyB3aWxsIGdlbmVyYWxseSBlbmFibGUgdGhpcyBvbgorCSAgdGhlaXIgb3duLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IGFiOTU2YWQuLmM2MDY4MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtNCw1ICs0LDYgQEAKIAogb2JqLSQoQ09ORklHX1NIX0RNQV9BUEkpCSs9IGRtYS1hcGkubyBkbWEtc3lzZnMubwogb2JqLSQoQ09ORklHX1NIX0RNQSkJCSs9IGRtYS1zaC5vCi1vYmotJChDT05GSUdfU0hfRFJFQU1DQVNUKQkrPSBkbWEtcHZyMi5vIGRtYS1nMi5vCitvYmotJChDT05GSUdfUFZSMl9ETUEpCQkrPSBkbWEtcHZyMi5vCitvYmotJChDT05GSUdfRzJfRE1BKQkJKz0gZG1hLWcyLm8KIG9iai0kKENPTkZJR19TSF9ETUFCUkcpCQkrPSBkbWFicmcubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKaW5kZXggNTA4ODdhNS4uMzdmYjViOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCkBAIC0xNywyOCArMTcsMTYgQEAKICNpbmNsdWRlIDxtYWNoLWRyZWFtY2FzdC9tYWNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlICJkbWEtc2guaCIKKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CiAKLXN0YXRpYyBpbnQgZG10ZV9pcnFfbWFwW10gPSB7Ci0JRE1URTBfSVJRLAotCURNVEUxX0lSUSwKLQlETVRFMl9JUlEsCi0JRE1URTNfSVJRLAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQotCURNVEU0X0lSUSwKLQlETVRFNV9JUlEsCisjaWYgZGVmaW5lZChETUFFMV9JUlEpCisjZGVmaW5lIE5SX0RNQUUJCTIKKyNlbHNlCisjZGVmaW5lIE5SX0RNQUUJCTEKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQotCURNVEU2X0lSUSwKLQlETVRFN19JUlEsCi0jZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKmRtYWVfbmFtZVtdID0geworCSJETUFDIEFkZHJlc3MgRXJyb3IwIiwgIkRNQUMgQWRkcmVzcyBFcnJvcjEiCiB9OwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfZG10ZV9pcnEodW5zaWduZWQgaW50IGNoYW4pCkBAIC00Niw3ICszNCwxNCBAQAogCXVuc2lnbmVkIGludCBpcnEgPSAwOwogCWlmIChjaGFuIDwgQVJSQVlfU0laRShkbXRlX2lycV9tYXApKQogCQlpcnEgPSBkbXRlX2lycV9tYXBbY2hhbl07CisKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCWlmIChpcnEgPiBETVRFNl9JUlEpCisJCXJldHVybiBETVRFNl9JUlE7CisJcmV0dXJuIERNVEUwX0lSUTsKKyNlbHNlCiAJcmV0dXJuIGlycTsKKyNlbmRpZgogfQogCiAvKgpAQCAtNTksNyArNTQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCXUzMiBjaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJdTMyIGNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAKIAlyZXR1cm4gdHNfc2hpZnRbKGNoY3IgJiBDSENSX1RTX01BU0spPj5DSENSX1RTX1NISUZUXTsKIH0KQEAgLTc1LDEzICs3MCwxMyBAQAogCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbiA9IGRldl9pZDsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCiAJaWYgKCEoY2hjciAmIENIQ1JfVEUpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAljaGNyICY9IH4oQ0hDUl9JRSB8IENIQ1JfREUpOwotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAl3YWtlX3VwKCZjaGFuLT53YWl0X3F1ZXVlKTsKIApAQCAtOTQsNyArODksMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gcmVxdWVzdF9pcnEoZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pLCBkbWFfdGVpLAotCQkJICAgSVJRRl9ESVNBQkxFRCwgY2hhbi0+ZGV2X2lkLCBjaGFuKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCQkJCUlSUUZfU0hBUkVELAorI2Vsc2UKKwkJCQlJUlFGX0RJU0FCTEVELAorI2VuZGlmCisJCQkJY2hhbi0+ZGV2X2lkLCBjaGFuKTsKIH0KIAogc3RhdGljIHZvaWQgc2hfZG1hY19mcmVlX2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJY2hhbi0+ZmxhZ3MgJj0gfkRNQV9URUlfQ0FQQUJMRTsKIAl9CiAKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJY2hhbi0+ZmxhZ3MgfD0gRE1BX0NPTkZJR1VSRUQ7CiAJcmV0dXJuIDA7CkBAIC0xMjYsMTMgKzEyNiwxMyBAQAogCWludCBpcnE7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyIHw9IENIQ1JfREU7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpCiAJCWNoY3IgfD0gQ0hDUl9JRTsKIAotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpIHsKIAkJaXJxID0gZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pOwpAQCAtMTUwLDkgKzE1MCw5IEBACiAJCWRpc2FibGVfaXJxKGlycSk7CiAJfQogCi0JY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAJY2hjciAmPSB+KENIQ1JfREUgfCBDSENSX1RFIHwgQ0hDUl9JRSk7Ci0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIH0KIAogc3RhdGljIGludCBzaF9kbWFjX3hmZXJfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKQEAgLTE4MywxMiArMTgzLDEzIEBACiAJICovCiAJaWYgKGNoYW4tPnNhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJgogCQkJICBjaGFuLT5jaGFuID09IFBWUjJfQ0FTQ0FERV9DSEFOKSkKLQkJY3RybF9vdXRsKGNoYW4tPnNhciwgU0FSW2NoYW4tPmNoYW5dKTsKKwkJY3RybF9vdXRsKGNoYW4tPnNhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0rU0FSKSk7CiAJaWYgKGNoYW4tPmRhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJgogCQkJICBjaGFuLT5jaGFuID09IFBWUjJfQ0FTQ0FERV9DSEFOKSkKLQkJY3RybF9vdXRsKGNoYW4tPmRhciwgREFSW2NoYW4tPmNoYW5dKTsKKwkJY3RybF9vdXRsKGNoYW4tPmRhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBEQVIpKTsKIAotCWN0cmxfb3V0bChjaGFuLT5jb3VudCA+PiBjYWxjX3htaXRfc2hpZnQoY2hhbiksIERNQVRDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwKKwkJKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpKTsKIAogCXNoX2RtYWNfZW5hYmxlX2RtYShjaGFuKTsKIApAQCAtMTk3LDM2ICsxOTgsMjYgQEAKIAogc3RhdGljIGludCBzaF9kbWFjX2dldF9kbWFfcmVzaWR1ZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JaWYgKCEoY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSkgJiBDSENSX0RFKSkKKwlpZiAoIShjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikgJiBDSENSX0RFKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gY3RybF9pbmwoRE1BVENSW2NoYW4tPmNoYW5dKSA8PCBjYWxjX3htaXRfc2hpZnQoY2hhbik7CisJcmV0dXJuIGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpCisJCSA8PCBjYWxjX3htaXRfc2hpZnQoY2hhbik7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCi0jZGVmaW5lIGRtYW9yX3JlYWRfcmVnKCkJY3RybF9pbncoRE1BT1IpCi0jZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhkYXRhKQljdHJsX291dHcoZGF0YSwgRE1BT1IpCi0jZWxzZQotI2RlZmluZSBkbWFvcl9yZWFkX3JlZygpCWN0cmxfaW5sKERNQU9SKQotI2RlZmluZSBkbWFvcl93cml0ZV9yZWcoZGF0YSkJY3RybF9vdXRsKGRhdGEsIERNQU9SKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IGRtYW9yX3Jlc2V0KHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBkbWFvcl9yZXNldChpbnQgbm8pCiB7Ci0JdW5zaWduZWQgbG9uZyBkbWFvciA9IGRtYW9yX3JlYWRfcmVnKCk7CisJdW5zaWduZWQgbG9uZyBkbWFvciA9IGRtYW9yX3JlYWRfcmVnKG5vKTsKIAogCS8qIFRyeSB0byBjbGVhciB0aGUgZXJyb3IgZmxhZ3MgZmlyc3QsIGluY2FzZSB0aGV5IGFyZSBzZXQgKi8KIAlkbWFvciAmPSB+KERNQU9SX05NSUYgfCBETUFPUl9BRSk7Ci0JZG1hb3Jfd3JpdGVfcmVnKGRtYW9yKTsKKwlkbWFvcl93cml0ZV9yZWcobm8sIGRtYW9yKTsKIAogCWRtYW9yIHw9IERNQU9SX0lOSVQ7Ci0JZG1hb3Jfd3JpdGVfcmVnKGRtYW9yKTsKKwlkbWFvcl93cml0ZV9yZWcobm8sIGRtYW9yKTsKIAogCS8qIFNlZSBpZiB3ZSBnb3QgYW4gZXJyb3IgYWdhaW4gKi8KLQlpZiAoKGRtYW9yX3JlYWRfcmVnKCkgJiAoRE1BT1JfQUUgfCBETUFPUl9OTUlGKSkpIHsKKwlpZiAoKGRtYW9yX3JlYWRfcmVnKG5vKSAmIChETUFPUl9BRSB8IERNQU9SX05NSUYpKSkgewogCQlwcmludGsoS0VSTl9FUlIgImRtYS1zaDogQ2FuJ3QgaW5pdGlhbGl6ZSBETUFPUi5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMzcsMTAgKzIyOCwzMyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2VycihpbnQgaXJxLCB2b2lkICpkdW1teSkKIHsKLQlkbWFvcl9yZXNldCgpOworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJaW50IGNudCA9IDA7CisJc3dpdGNoIChpcnEpIHsKKyNpZiBkZWZpbmVkKERNVEU2X0lSUSkgJiYgZGVmaW5lZChETUFFMV9JUlEpCisJY2FzZSBETVRFNl9JUlE6CisJCWNudCsrOworI2VuZGlmCisJY2FzZSBETVRFMF9JUlE6CisJCWlmIChkbWFvcl9yZWFkX3JlZyhjbnQpICYgKERNQU9SX05NSUYgfCBETUFPUl9BRSkpIHsKKwkJCWRpc2FibGVfaXJxKGlycSk7CisJCQkvKiBETUEgbXVsdGkgYW5kIGVycm9yIElSUSAqLworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKyNlbHNlCisJZG1hb3JfcmVzZXQoMCk7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisJZG1hb3JfcmVzZXQoMSk7CisjZW5kaWYKIAlkaXNhYmxlX2lycShpcnEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMjU5LDI0ICsyNzMsNTkgQEAKIAkuZmxhZ3MJCT0gRE1BQ19DSEFOTkVMU19URUlfQ0FQQUJMRSwKIH07CiAKKyNpZmRlZiBDT05GSUdfQ1BVX1NINAorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfZG1hX2Vycm9yX2lycShpbnQgbikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCXJldHVybiAobiA9PSAwKSA/IGdldF9kbXRlX2lycSgwKSA6IGdldF9kbXRlX2lycSg2KTsKKyNlbHNlCisJcmV0dXJuIChuID09IDApID8gRE1BRTBfSVJRIDoKKyNpZiBkZWZpbmVkKERNQUUxX0lSUSkKKwkJCQlETUFFMV9JUlE7CisjZWxzZQorCQkJCS0xOworI2VuZGlmCisjZW5kaWYKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBzaF9kbWFjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZG1hX2luZm8gKmluZm8gPSAmc2hfZG1hY19pbmZvOwogCWludCBpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDQKLQlpID0gcmVxdWVzdF9pcnEoRE1BRV9JUlEsIGRtYV9lcnIsIElSUUZfRElTQUJMRUQsICJETUFDIEFkZHJlc3MgRXJyb3IiLCAwKTsKLQlpZiAodW5saWtlbHkoaSA8IDApKQotCQlyZXR1cm4gaTsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBOUl9ETUFFOyBuKyspIHsKKwkJaSA9IHJlcXVlc3RfaXJxKGdldF9kbWFfZXJyb3JfaXJxKG4pLCBkbWFfZXJyLAorI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJCQkJSVJRRl9TSEFSRUQsCisjZWxzZQorCQkJCUlSUUZfRElTQUJMRUQsCiAjZW5kaWYKKwkJCQlkbWFlX25hbWVbbl0sICh2b2lkICopZG1hZV9uYW1lW25dKTsKKwkJaWYgKHVubGlrZWx5KGkgPCAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyByZXF1ZXN0X2lycSBmYWlsXG4iLCBkbWFlX25hbWVbbl0pOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisjZW5kaWYgLyogQ09ORklHX0NQVV9TSDQgKi8KIAogCS8qCiAJICogSW5pdGlhbGl6ZSBETUFPUiwgYW5kIGNsZWFuIHVwIGFueSBlcnJvciBmbGFncyB0aGF0IG1heSBoYXZlCiAJICogYmVlbiBzZXQuCiAJICovCi0JaSA9IGRtYW9yX3Jlc2V0KCk7CisJaSA9IGRtYW9yX3Jlc2V0KDApOwogCWlmICh1bmxpa2VseShpICE9IDApKQogCQlyZXR1cm4gaTsKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKwlpID0gZG1hb3JfcmVzZXQoMSk7CisJaWYgKHVubGlrZWx5KGkgIT0gMCkpCisJCXJldHVybiBpOworI2VuZGlmCiAKIAlyZXR1cm4gcmVnaXN0ZXJfZG1hYyhpbmZvKTsKIH0KQEAgLTI4NCw4ICszMzMsMTIgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaF9kbWFjX2V4aXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQ1BVX1NINAotCWZyZWVfaXJxKERNQUVfSVJRLCAwKTsKLSNlbmRpZgorCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IE5SX0RNQUU7IG4rKykgeworCQlmcmVlX2lycShnZXRfZG1hX2Vycm9yX2lycShuKSwgKHZvaWQgKilkbWFlX25hbWVbbl0pOworCX0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINCAqLwogCXVucmVnaXN0ZXJfZG1hYygmc2hfZG1hY19pbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaCBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZmVjZDUuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwICBUYWthc2hpIFlPU0hJSQotICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19ETUFfU0hfSAotI2RlZmluZSBfX0RNQV9TSF9ICi0KLSNpbmNsdWRlIDxjcHUvZG1hLmg+Ci0KLS8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KLSNkZWZpbmUgUkVRX0wJMHgwMDAwMDAwMAotI2RlZmluZSBSRVFfRQkweDAwMDgwMDAwCi0jZGVmaW5lIFJBQ0tfSAkweDAwMDAwMDAwCi0jZGVmaW5lIFJBQ0tfTAkweDAwMDQwMDAwCi0jZGVmaW5lIEFDS19SCTB4MDAwMDAwMDAKLSNkZWZpbmUgQUNLX1cJMHgwMDAyMDAwMAotI2RlZmluZSBBQ0tfSAkweDAwMDAwMDAwCi0jZGVmaW5lIEFDS19MCTB4MDAwMTAwMDAKLSNkZWZpbmUgRE1fSU5DCTB4MDAwMDQwMDAKLSNkZWZpbmUgRE1fREVDCTB4MDAwMDgwMDAKLSNkZWZpbmUgU01fSU5DCTB4MDAwMDEwMDAKLSNkZWZpbmUgU01fREVDCTB4MDAwMDIwMDAKLSNkZWZpbmUgUlNfSU4JMHgwMDAwMDIwMAotI2RlZmluZSBSU19PVVQJMHgwMDAwMDMwMAotI2RlZmluZSBUU19CTEsJMHgwMDAwMDA0MAotI2RlZmluZSBUTV9CVVIJMHgwMDAwMDAyMAotI2RlZmluZSBDSENSX0RFIDB4MDAwMDAwMDEKLSNkZWZpbmUgQ0hDUl9URSAweDAwMDAwMDAyCi0jZGVmaW5lIENIQ1JfSUUgMHgwMDAwMDAwNAotCi0vKiBETUFPUiBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBETUFPUl9BRQkweDAwMDAwMDA0Ci0jZGVmaW5lIERNQU9SX05NSUYJMHgwMDAwMDAwMgotI2RlZmluZSBETUFPUl9ETUUJMHgwMDAwMDAwMQotCi0vKgotICogRGVmaW5lIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGR1YWwgYWRkcmVzcyBtZW1vcnktbWVtb3J5IHRyYW5zZmVyLgotICogVGhlIDB4NDAwIHZhbHVlIHJlcHJlc2VudHMgYXV0by1yZXF1ZXN0LCBleHRlcm5hbC0+ZXh0ZXJuYWwuCi0gKi8KLSNkZWZpbmUgUlNfRFVBTAkoRE1fSU5DIHwgU01fSU5DIHwgMHg0MDAgfCBUU18zMikKLQotI2RlZmluZSBNQVhfRE1BQ19DSEFOTkVMUwkoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCi0KLS8qCi0gKiBTdWJ0eXBlcyB0aGF0IGhhdmUgZmV3ZXIgY2hhbm5lbHMgdGhhbiB0aGlzIHNpbXBseSBuZWVkIHRvIGNoYW5nZQotICogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMuIExpa2V3aXNlLCBzdWJ0eXBlcyB3aXRoIGEgbGFyZ2VyIG51bWJlcgotICogb2YgY2hhbm5lbHMgc2hvdWxkIGV4cGFuZCBvbiB0aGlzLgotICoKLSAqIEZvciBtb3N0IHN1YnR5cGVzIHdlIGNhbiBlYXNpbHkgZmlndXJlIHRoZXNlIHZhbHVlcyBvdXQgd2l0aCBzb21lCi0gKiBiYXNpYyBjYWxjdWxhdGlvbiwgdW5mb3J0dW5hdGVseSBvbiBvdGhlciBzdWJ0eXBlcyB0aGVzZSBhcmUgbW9yZQotICogc2NhdHRlcmVkLCBzbyB3ZSBqdXN0IGxlYXZlIGl0IHVucm9sbGVkIGZvciBzaW1wbGljaXR5LgotICovCi0jZGVmaW5lIFNBUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwMCwgU0hfRE1BQ19CQVNFICsgMHgxMCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjAsIFNIX0RNQUNfQkFTRSArIDB4MzAsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDUwLCBTSF9ETUFDX0JBU0UgKyAweDYwfSkKLSNkZWZpbmUgREFSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDA0LCBTSF9ETUFDX0JBU0UgKyAweDE0LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyNCwgU0hfRE1BQ19CQVNFICsgMHgzNCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NTQsIFNIX0RNQUNfQkFTRSArIDB4NjR9KQotI2RlZmluZSBETUFUQ1IJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDgsIFNIX0RNQUNfQkFTRSArIDB4MTgsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDI4LCBTSF9ETUFDX0JBU0UgKyAweDM4LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1OCwgU0hfRE1BQ19CQVNFICsgMHg2OH0pCi0jZGVmaW5lIENIQ1IJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MGMsIFNIX0RNQUNfQkFTRSArIDB4MWMsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDJjLCBTSF9ETUFDX0JBU0UgKyAweDNjLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1YywgU0hfRE1BQ19CQVNFICsgMHg2Y30pCi0KLSNkZWZpbmUgRE1BT1IJKFNIX0RNQUNfQkFTRSArIDB4NDApCi0KLSNlbmRpZiAvKiBfX0RNQV9TSF9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKaW5kZXggMDc4ZGM0NC4uNzczZDU3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKQEAgLTEyNyw4ICsxMjcsOCBAQAogCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSUxTUjApOwogCXBjaV93cml0ZV9yZWcoMHgwMDAwMDAwMSwgU0g0X1BDSUxTUjEpOwogCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAwIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0Jd29yZCA9IChDT05GSUdfTUVNT1JZX1NJWkUgPiAweDA4MDAwMDAwKSA/IDB4MTAwMDAwMDAgOiAweDA4MDAwMDAwOwotCXBjaV93cml0ZV9yZWcod29yZCB8IDB4YTAwMDAwMDAsIFNINF9QQ0lMQVIwKTsKKwl3b3JkID0gQ09ORklHX01FTU9SWV9TVEFSVCB8IChDT05GSUdfTUVNT1JZX1NJWkUgLSAweDAxMDAwMDAwKTsKKwlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lMQVIwKTsKIAlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINzc4MF9QQ0lNQkFSMCk7CiAJLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDEgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KIAlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDAsIFNINF9QQ0lMQVIxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCmluZGV4IDM2NzM2YzcuLjgwZDQwODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaApAQCAtMzEsNyArMzEsNyBAQAogLyogUmV0dXJucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIFBuU0VHIChuPTEsMikgYWRkcmVzcyAgICovCiAjZGVmaW5lIFBIWVNBRERSKGEpCSgoKHVuc2lnbmVkIGxvbmcpKGEpKSAmIDB4MWZmZmZmZmYpCiAKLSNpZmRlZiBDT05GSUdfMjlCSVQKKyNpZiBkZWZpbmVkKENPTkZJR18yOUJJVCkgfHwgZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogLyoKICAqIE1hcCBhbiBhZGRyZXNzIHRvIGEgY2VydGFpbiBwcml2aWxlZ2VkIHNlZ21lbnQKICAqLwpAQCAtNDMsNyArNDMsNyBAQAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDNTRUcpKQogI2RlZmluZSBQNFNFR0FERFIoYSkJXAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDRTRUcpKQotI2VuZGlmIC8qIDI5QklUICovCisjZW5kaWYgLyogMjlCSVQgfHwgUE1CX0ZJWEVEICovCiAjZW5kaWYgLyogUDFTRUcgKi8KIAogLyogQ2hlY2sgaWYgYW4gYWRkcmVzcyBjYW4gYmUgcmVhY2hlZCBpbiAyOSBiaXRzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oCmluZGV4IDc0Zjc5NDMuLmEwYjM0ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oCkBAIC0xMSw3ICsxMSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2ICs9IGk7CisJdi0+Y291bnRlciArPSBpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjAsNyArMjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiAtPSBpOworCXYtPmNvdW50ZXIgLT0gaTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTI5LDkgKzI5LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRlbXAgPSAqKGxvbmcgKil2OworCXRlbXAgPSB2LT5jb3VudGVyOwogCXRlbXAgKz0gaTsKLQkqKGxvbmcgKil2ID0gdGVtcDsKKwl2LT5jb3VudGVyID0gdGVtcDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gdGVtcDsKQEAgLTQyLDkgKzQyLDkgQEAKIAl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRlbXAgPSAqKGxvbmcgKil2OworCXRlbXAgPSB2LT5jb3VudGVyOwogCXRlbXAgLT0gaTsKLQkqKGxvbmcgKil2ID0gdGVtcDsKKwl2LT5jb3VudGVyID0gdGVtcDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gdGVtcDsKQEAgLTU1LDcgKzU1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgJj0gfm1hc2s7CisJdi0+Y291bnRlciAmPSB+bWFzazsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY0LDcgKzY0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgfD0gbWFzazsKKwl2LT5jb3VudGVyIHw9IG1hc2s7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKaW5kZXggMWQyZmMwYi4uZDgzMjhiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19BU01fU0hfQklUT1BTX0xMU0NfSAogI2RlZmluZSBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7CiAJaW50CW1hc2s7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTEzLDE2ICsxMywxNiBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKIAkJIm1vdmxpLmwJQCUxLCAlMAkhIHNldF9iaXQJCVxuXHQiCi0JCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJvcgkJJTIsICUwCQkJCVxuXHQiCiAJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAiPSZ6IiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7CiAJaW50CW1hc2s7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTM0LDE2ICszNCwxNiBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKIAkJIm1vdmxpLmwJQCUxLCAlMAkhIGNsZWFyX2JpdAkJXG5cdCIKLQkJImFuZAkJJTMsICUwCQkJCVxuXHQiCisJCSJhbmQJCSUyLCAlMAkJCQlcblx0IgogCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKLQkJOiAiMSIgKGEpLCAiciIgKH5tYXNrKQorCQk6ICI9JnoiICh0bXApCisJCTogInIiIChhKSwgInIiICh+bWFzaykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKIAlpbnQJbWFzazsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwpAQCAtNTUsODYgKzU1LDg2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgogCQkibW92bGkubAlAJTEsICUwCSEgY2hhbmdlX2JpdAkJXG5cdCIKKwkJInhvcgkJJTIsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApCisJCTogInIiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB0ZXN0X2FuZF9zZXRfYml0CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgorCQkib3IJCSUzLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTMsICUxCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbCAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKKwkJImFuZAkJJTQsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklMywgJTEJCQkJXG5cdCIKKwkJInN5bmNvCQkJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spLCAiciIgKH5tYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbCAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB0ZXN0X2FuZF9jaGFuZ2VfYml0CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgogCQkieG9yCQklMywgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCi0JCTogInQiLCAibWVtb3J5IgotCSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLQlpbnQJbWFzaywgcmV0dmFsOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlhICs9IG5yID4+IDU7Ci0JbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9zZXRfYml0CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkib3IJCSU0LCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCi0JCSJiZgkJMWIJCQkJXG5cdCIKLQkJImFuZAkJJTQsICUyCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKLQkJOiAidCIsICJtZW1vcnkiCi0JKTsKLQotCXJldHVybiByZXR2YWwgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCi17Ci0JaW50CW1hc2ssIHJldHZhbDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYSArPSBuciA+PiA1OwotCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfY2xlYXJfYml0CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkiYW5kCQklNSwgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgotCQkiYmYJCTFiCQkJCVxuXHQiCi0JCSJhbmQJCSU0LCAlMgkJCQlcblx0IgorCQkiYW5kCQklMywgJTEJCQkJXG5cdCIKIAkJInN5bmNvCQkJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKLQkJOiAidCIsICJtZW1vcnkiCi0JKTsKLQotCXJldHVybiByZXR2YWwgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQotewotCWludAltYXNrLCByZXR2YWw7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWEgKz0gbnIgPj4gNTsKLQltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJ4b3IJCSU0LCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCi0JCSJiZgkJMWIJCQkJXG5cdCIKLQkJImFuZAkJJTQsICUyCQkJCVxuXHQiCi0JCSJzeW5jbwkJCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCBmOWM4ODU4Li4yZjZjOTYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0xNSw2ICsxNSw3IEBACiAJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBjbGsgKmNsayk7CiAJdm9pZCAoKnJlY2FsYykoc3RydWN0IGNsayAqY2xrKTsKIAlpbnQgKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKTsKKwlpbnQgKCpzZXRfcGFyZW50KShzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCk7CiAJbG9uZyAoKnJvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oCmluZGV4IGFlZTNiZjIuLjBmYWMzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApAQCAtOCwxNCArOCwxNCBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3UzMglcblx0IgotCQkibW92CQklMCwgJTIJCQlcblx0IgotCQkibW92CQklNCwgJTAJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHhjaGdfdTMyCVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCVxuXHQiCisJCSJtb3YJCSUzLCAlMAkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQlcblx0IgogCQkiYmYJCTFiCQkJXG5cdCIKIAkJInN5bmNvCQkJCQlcblx0IgotCQk6ICI9JnoiKHRtcCksICI9ciIgKG0pLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAobSksICJyIiAodmFsKQorCQk6ICI9JnoiKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChtKSwgInIiICh2YWwpCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKQEAgLTI5LDE0ICsyOSwxNCBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3U4CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCVxuXHQiCi0JCSJtb3YJCSU0LCAlMAkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgeGNoZ191OAlcblx0IgorCQkibW92CQklMCwgJTEJCQlcblx0IgorCQkibW92CQklMywgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJXG5cdCIKIAkJImJmCQkxYgkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJXG5cdCIKLQkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCisJCTogIj0meiIodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKQEAgLTUxLDE3ICs1MSwxNyBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgX19jbXB4Y2hnX3UzMgkJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJjbXAvZXEJCSUyLCAlNAkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgX19jbXB4Y2hnX3UzMgkJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCisJCSJjbXAvZXEJCSUxLCAlMwkJCQlcblx0IgogCQkiYmYJCTJmCQkJCVxuXHQiCi0JCSJtb3YJCSU1LCAlMAkJCQlcblx0IgorCQkibW92CQklMywgJTAJCQkJXG5cdCIKIAkJIjI6CQkJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKIAkJInN5bmNvCQkJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChtKSwgInIiIChvbGQpLCAiciIgKG5ldykKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaAppbmRleCA4NjMwOGFhLi42OTRhYmU0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKQEAgLTIxLDUgKzIxLDYgQEAKICNkZWZpbmUgQ1BVX0hBU19MTFNDCQkweDAwNDAJLyogbW92bGkubC9tb3Zjby5sICovCiAjZGVmaW5lIENQVV9IQVNfTDJfQ0FDSEUJMHgwMDgwCS8qIFNlY29uZGFyeSBjYWNoZSAvIFVSQU0gKi8KICNkZWZpbmUgQ1BVX0hBU19PUDMyCQkweDAxMDAJLyogMzItYml0IGluc3RydWN0aW9uIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ1BVX0hBU19QVEVBRVgJCTB4MDIwMAkvKiBQVEUgQVNJRCBFeHRlbnNpb24gc3VwcG9ydCAqLwogCiAjZW5kaWYgLyogX19BU01fU0hfQ1BVX0ZFQVRVUkVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOGY4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgVGFrYXNoaSBZT1NISUkKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fRE1BX1NIX0gKKyNkZWZpbmUgX19ETUFfU0hfSAorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGNwdS9kbWEuaD4KKworLyogRE1BT1IgY29udG9ybDogVGhlIERNQU9SIGFjY2VzcyBzaXplIGlzIGRpZmZlcmVudCBieSBDUFUuKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCXx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIFwKKyAgICAobiA/IGN0cmxfaW53KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorCTogY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIFwKKyAgICAobiA/IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKKyAgICA6IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorI2Vsc2UgLyogT3RoZXIgQ1BVICovCisjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIGN0cmxfaW53KFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpCisjZW5kaWYKKworc3RhdGljIGludCBkbXRlX2lycV9tYXBbXSBfX21heWJlX3VudXNlZCA9IHsKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA0KQorICAgIERNVEUwX0lSUSwKKyAgICBETVRFMF9JUlEgKyAxLAorICAgIERNVEUwX0lSUSArIDIsCisgICAgRE1URTBfSVJRICsgMywKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDYpCisgICAgRE1URTRfSVJRLAorICAgIERNVEU0X0lSUSArIDEsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA4KQorICAgIERNVEU2X0lSUSwKKyAgICBETVRFNl9JUlEgKyAxLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gMTIpCisgICAgRE1URThfSVJRLAorICAgIERNVEU5X0lSUSwKKyAgICBETVRFMTBfSVJRLAorICAgIERNVEUxMV9JUlEsCisjZW5kaWYKK307CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KKyNkZWZpbmUgUkVRX0wJMHgwMDAwMDAwMAorI2RlZmluZSBSRVFfRQkweDAwMDgwMDAwCisjZGVmaW5lIFJBQ0tfSAkweDAwMDAwMDAwCisjZGVmaW5lIFJBQ0tfTAkweDAwMDQwMDAwCisjZGVmaW5lIEFDS19SCTB4MDAwMDAwMDAKKyNkZWZpbmUgQUNLX1cJMHgwMDAyMDAwMAorI2RlZmluZSBBQ0tfSAkweDAwMDAwMDAwCisjZGVmaW5lIEFDS19MCTB4MDAwMTAwMDAKKyNkZWZpbmUgRE1fSU5DCTB4MDAwMDQwMDAKKyNkZWZpbmUgRE1fREVDCTB4MDAwMDgwMDAKKyNkZWZpbmUgU01fSU5DCTB4MDAwMDEwMDAKKyNkZWZpbmUgU01fREVDCTB4MDAwMDIwMDAKKyNkZWZpbmUgUlNfSU4JMHgwMDAwMDIwMAorI2RlZmluZSBSU19PVVQJMHgwMDAwMDMwMAorI2RlZmluZSBUU19CTEsJMHgwMDAwMDA0MAorI2RlZmluZSBUTV9CVVIJMHgwMDAwMDAyMAorI2RlZmluZSBDSENSX0RFIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0hDUl9URSAweDAwMDAwMDAyCisjZGVmaW5lIENIQ1JfSUUgMHgwMDAwMDAwNAorCisvKiBETUFPUiBkZWZpbml0aW9ucyAqLworI2RlZmluZSBETUFPUl9BRQkweDAwMDAwMDA0CisjZGVmaW5lIERNQU9SX05NSUYJMHgwMDAwMDAwMgorI2RlZmluZSBETUFPUl9ETUUJMHgwMDAwMDAwMQorCisvKgorICogRGVmaW5lIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGR1YWwgYWRkcmVzcyBtZW1vcnktbWVtb3J5IHRyYW5zZmVyLgorICogVGhlIDB4NDAwIHZhbHVlIHJlcHJlc2VudHMgYXV0by1yZXF1ZXN0LCBleHRlcm5hbC0+ZXh0ZXJuYWwuCisgKi8KKyNkZWZpbmUgUlNfRFVBTAkoRE1fSU5DIHwgU01fSU5DIHwgMHg0MDAgfCBUU18zMikKKworLyogRE1BIGJhc2UgYWRkcmVzcyAqLworc3RhdGljIHUzMiBkbWFfYmFzZV9hZGRyW10gX19tYXliZV91bnVzZWQgPSB7CisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNCkKKwlTSF9ETUFDX0JBU0UwICsgMHgwMCwJLyogY2hhbm5lbCAwICovCisJU0hfRE1BQ19CQVNFMCArIDB4MTAsCisJU0hfRE1BQ19CQVNFMCArIDB4MjAsCisJU0hfRE1BQ19CQVNFMCArIDB4MzAsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA2KQorCVNIX0RNQUNfQkFTRTAgKyAweDUwLAorCVNIX0RNQUNfQkFTRTAgKyAweDYwLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gOCkKKwlTSF9ETUFDX0JBU0UxICsgMHgwMCwKKwlTSF9ETUFDX0JBU0UxICsgMHgxMCwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDEyKQorCVNIX0RNQUNfQkFTRTEgKyAweDIwLAorCVNIX0RNQUNfQkFTRTEgKyAweDMwLAorCVNIX0RNQUNfQkFTRTEgKyAweDUwLAorCVNIX0RNQUNfQkFTRTEgKyAweDYwLCAvKiBjaGFubmVsIDExICovCisjZW5kaWYKK307CisKKy8qIERNQSByZWdpc3RlciAqLworI2RlZmluZSBTQVIgICAgIDB4MDAKKyNkZWZpbmUgREFSICAgICAweDA0CisjZGVmaW5lIFRDUiAgICAgMHgwOAorI2RlZmluZSBDSENSICAgIDB4MEMKKyNkZWZpbmUgRE1BT1IJMHg0MAorCisjZW5kaWYgLyogX19ETUFfU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKaW5kZXggYmVjYTcxMi4uNmJkMTc4NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC0yNSw5ICsyNSw5IEBACiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUKzB4MTAwMDAwMDApCiAKICNpZmRlZiBDT05GSUdfTlJfRE1BX0NIQU5ORUxTCi0jICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKKyMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTICAgKENPTkZJR19OUl9ETUFfQ0hBTk5FTFMpCiAjZWxzZQotIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQorIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TCmluZGV4IDJkYWIwYjguLjNhNDc1MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUwpAQCAtMzEsMyArMzEsOCBAQAogI2VuZGlmCQogCS5lbmRtCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyMgZGVmaW5lIFBSRUYoeCkJcHJlZglAeAorI2Vsc2UKKyMgZGVmaW5lIFBSRUYoeCkJbm9wCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmgKaW5kZXggOTA2NzM2NS4uNjFmOTNkYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmgKQEAgLTE5LDggKzE5LDQyIEBACiAjaW5jbHVkZSA8Y3B1L2dwaW8uaD4KICNlbmRpZgogCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MgNTEyCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2dldF92YWx1ZShncGlvKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlXQVJOX09OKDEpOworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogQ09ORklHX0dQSU9MSUIgKi8KKwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwaW5tdXhfZW51bV90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHBpbm11eF9mbGFnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpbm11eF9mbGFnX3Q7CiAKICNkZWZpbmUgUElOTVVYX1RZUEVfTk9ORSAgICAgICAgICAgIDAKICNkZWZpbmUgUElOTVVYX1RZUEVfRlVOQ1RJT04gICAgICAgIDEKQEAgLTM0LDYgKzY4LDExIEBACiAjZGVmaW5lIFBJTk1VWF9GTEFHX1dBTlRfUFVMTFVQICAgICAoMSA8PCAzKQogI2RlZmluZSBQSU5NVVhfRkxBR19XQU5UX1BVTExET1dOICAgKDEgPDwgNCkKIAorI2RlZmluZSBQSU5NVVhfRkxBR19EQklUX1NISUZUICAgICAgNQorI2RlZmluZSBQSU5NVVhfRkxBR19EQklUICAgICAgICAgICAgKDB4MWYgPDwgUElOTVVYX0ZMQUdfREJJVF9TSElGVCkKKyNkZWZpbmUgUElOTVVYX0ZMQUdfRFJFR19TSElGVCAgICAgIDEwCisjZGVmaW5lIFBJTk1VWF9GTEFHX0RSRUcgICAgICAgICAgICAoMHgzZiA8PCBQSU5NVVhfRkxBR19EUkVHX1NISUZUKQorCiBzdHJ1Y3QgcGlubXV4X2dwaW8gewogCXBpbm11eF9lbnVtX3QgZW51bV9pZDsKIAlwaW5tdXhfZmxhZ190IGZsYWdzOwpAQCAtNTQsNyArOTMsNyBAQAogCS5lbnVtX2lkcyA9IChwaW5tdXhfZW51bV90IFsocl93aWR0aCAvIGZfd2lkdGgpICogKDEgPDwgZl93aWR0aCldKSBcCiAKIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgewotCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGg7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgcmVnX3NoYWRvdzsKIAlwaW5tdXhfZW51bV90ICplbnVtX2lkczsKIH07CiAKQEAgLTg5LDM0ICsxMjgsOSBAQAogCXVuc2lnbmVkIGludCBncGlvX2RhdGFfc2l6ZTsKIAogCXVuc2lnbmVkIGxvbmcgKmdwaW9faW5fdXNlOworCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKIH07CiAKIGludCByZWdpc3Rlcl9waW5tdXgoc3RydWN0IHBpbm11eF9pbmZvICpwaXApOwogCi1pbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3Bpbyk7Ci1zdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JcmV0dXJuIF9fZ3Bpb19yZXF1ZXN0KGdwaW8pOwotfQotdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1pbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLS8qIElSUSBtb2RlcyBhcmUgdW5zcHBvcnRlZCAqLwotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlXQVJOX09OKDEpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCi17Ci0JV0FSTl9PTigxKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KLQogI2VuZGlmIC8qIF9fQVNNX1NIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaAppbmRleCA4YzEzNTNiLi41MmI0YjYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaApAQCAtMjQyLDcgKzI0Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KIAogLyogYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMgKi8KLWludCBoZDY0NDYxX2lycV9kZW11eChpbnQgaXJxKTsKIHZvaWQgaGQ2NDQ2MV9yZWdpc3Rlcl9pcnFfZGVtdXgoaW50IGlycSwKIAkJCQlpbnQgKCpkZW11eCkgKGludCBpcnEsIHZvaWQgKmRldiksIHZvaWQgKmRldik7CiB2b2lkIGhkNjQ0NjFfdW5yZWdpc3Rlcl9pcnFfZGVtdXgoaW50IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNjFmNmRhZS4uMDQ1NGY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaApAQCAtMjM4LDcgKzIzOCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCiBfX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotI2lmZGVmIENPTkZJR19TVVBFUkgzMgorI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSDMyKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyID0gb2Zmc2V0ICsgc2l6ZSAtIDE7CiAjZW5kaWYKIAl2b2lkIF9faW9tZW0gKnJldDsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgzMikgJiYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKIAkvKgogCSAqIEZvciBQMSBhbmQgUDIgc3BhY2UgdGhpcyBpcyB0cml2aWFsLCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkKIAkgKiBtYXBwZWQuIFVuY2FjaGVkIGFjY2VzcyBmb3IgUDEgYWRkcmVzc2VzIGFyZSBkb25lIHRocm91Z2ggUDIuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCmluZGV4IDYwNzhkOGUuLjYxMzY0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC0xNiw3ICsxNiw3IEBACiAJPyAoTUFYX1NUQUNLX1NJWkUpIFwKIAk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkKIAotI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKQkJKChyZWdzKS0+cmVnc1swXSkKKyNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUoX3JlZ3MpCQkoKF9yZWdzKS0+cmVnc1swXSkKICNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZQkwCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA1ZDkxNTdiLi4yYTljNTVmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xOSwxMyArMTksMTggQEAKICAqICAgIChhKSBUTEIgY2FjaGUgdmVyc2lvbiAob3Igcm91bmQsIGN5Y2xlIHdoYXRldmVyIGV4cHJlc3Npb24geW91IGxpa2UpCiAgKiAgICAoYikgQVNJRCAoQWRkcmVzcyBTcGFjZSBJRGVudGlmaWVyKQogICovCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUFRFQUVYCisjZGVmaW5lIE1NVV9DT05URVhUX0FTSURfTUFTSwkJMHgwMDAwZmZmZgorI2Vsc2UKICNkZWZpbmUgTU1VX0NPTlRFWFRfQVNJRF9NQVNLCQkweDAwMDAwMGZmCi0jZGVmaW5lIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSwkweGZmZmZmZjAwCi0jZGVmaW5lIE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT04JMHgwMDAwMDEwMAotI2RlZmluZSBOT19DT05URVhUCQkJMFVMCisjZW5kaWYKIAotLyogQVNJRCBpcyA4LWJpdCB2YWx1ZSwgc28gaXQgY2FuJ3QgYmUgMHgxMDAgKi8KLSNkZWZpbmUgTU1VX05PX0FTSUQJCQkweDEwMAorI2RlZmluZSBNTVVfQ09OVEVYVF9WRVJTSU9OX01BU0sJKH4wVUwgJiB+TU1VX0NPTlRFWFRfQVNJRF9NQVNLKQorI2RlZmluZSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCShNTVVfQ09OVEVYVF9BU0lEX01BU0sgKyAxKQorCisvKiBJbXBvc3NpYmxlIEFTSUQgdmFsdWUsIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBOT19DT05URVhULiAqLworI2RlZmluZSBNTVVfTk9fQVNJRAkJCU1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT04KKyNkZWZpbmUgTk9fQ09OVEVYVAkJCTBVTAogCiAjZGVmaW5lIGFzaWRfY2FjaGUoY3B1KQkJKGNwdV9kYXRhW2NwdV0uYXNpZF9jYWNoZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCmluZGV4IGY0ZjlhZWIuLjhlZjgwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKQEAgLTEwLDYgKzEwLDE3IEBACiAJLyogRG8gbm90aGluZyAqLwogfQogCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUFRFQUVYCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FzaWQodW5zaWduZWQgbG9uZyBhc2lkKQoreworCV9fcmF3X3dyaXRlbChhc2lkLCBNTVVfUFRFQUVYKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9hc2lkKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE1NVV9QVEVBRVgpICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLOworfQorI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBfX2R1bW15OwpAQCAtMzMsNiArNDQsNyBAQAogCWFzaWQgJj0gTU1VX0NPTlRFWFRfQVNJRF9NQVNLOwogCXJldHVybiBhc2lkOwogfQorI2VuZGlmIC8qIENPTkZJR19DUFVfSEFTX1BURUFFWCAqLwogCiAvKiBNTVVfVFRCIGlzIHVzZWQgZm9yIG9wdGltaXppbmcgdGhlIGZhdWx0IGhhbmRsaW5nLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHNldF9UVEIocGdkX3QgKnBnZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNTg3MWQ3OC4uOWM2ZDIxZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEyOSw3ICsxMjksMTIgQEAKICAqIGlzIG5vdCB2aXNpYmxlIChpdCBpcyBwYXJ0IG9mIHRoZSBQTUIgbWFwcGluZykgYW5kIHNvIG5lZWRzIHRvIGJlCiAgKiBhZGRlZCBvciBzdWJ0cmFjdGVkIGFzIHJlcXVpcmVkLgogICovCi0jaWZkZWYgQ09ORklHXzMyQklUCisjaWYgZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQorLyogcGh5cyA9IHZpcnQgLSBQQUdFX09GRlNFVCAtIChfX01FTU9SWV9TVEFSVCAmIDB4ZTAwMDAwMDApICovCisjZGVmaW5lIFBNQl9PRkZTRVQJKFBBR0VfT0ZGU0VUIC0gUFhTRUcoX19NRU1PUllfU1RBUlQpKQorI2RlZmluZSBfX3BhKHgpCSgodW5zaWduZWQgbG9uZykoeCkgLSBQTUJfT0ZGU0VUKQorI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBQTUJfT0ZGU0VUKSkKKyNlbGlmIGRlZmluZWQoQ09ORklHXzMyQklUKQogI2RlZmluZSBfX3BhKHgpCSgodW5zaWduZWQgbG9uZykoeCktUEFHRV9PRkZTRVQrX19NRU1PUllfU1RBUlQpCiAjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVC1fX01FTU9SWV9TVEFSVCkpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMWVmNGIyNC4uMWZkNThiNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMSw3ICszMSw3IEBACiAJQ1BVX1NINzc2MCwgQ1BVX1NINF8yMDIsIENQVV9TSDRfNTAxLAogCiAJLyogU0gtNEEgdHlwZXMgKi8KLQlDUFVfU0g3NzYzLCBDUFVfU0g3NzcwLCBDUFVfU0g3NzgwLCBDUFVfU0g3NzgxLCBDUFVfU0g3Nzg1LAorCUNQVV9TSDc3NjMsIENQVV9TSDc3NzAsIENQVV9TSDc3ODAsIENQVV9TSDc3ODEsIENQVV9TSDc3ODUsIENQVV9TSDc3ODYsCiAJQ1BVX1NINzcyMywgQ1BVX1NIWDMsCiAKIAkvKiBTSDRBTC1EU1AgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCmluZGV4IGQ3OTA2M2MuLmVmZGQ3OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaApAQCAtMTA4LDEyICsxMDgsMTIgQEAKIC8qCiAgKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuCiAgKi8KLSNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAorI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAogCXNldF9mcyhVU0VSX0RTKTsJCQkgXAotCXJlZ3MtPnByID0gMDsJCQkJIFwKLQlyZWdzLT5zciA9IFNSX0ZEOwkvKiBVc2VyIG1vZGUuICovIFwKLQlyZWdzLT5wYyA9IG5ld19wYzsJCQkgXAotCXJlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCisJX3JlZ3MtPnByID0gMDsJCQkJIFwKKwlfcmVncy0+c3IgPSBTUl9GRDsJLyogVXNlciBtb2RlLiAqLyBcCisJX3JlZ3MtPnBjID0gbmV3X3BjOwkJCSBcCisJX3JlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CkBAIC0xODksMTAgKzE4OSw5IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICh0YXNrX3B0X3JlZ3ModHNrKS0+cGMpCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgICh0YXNrX3B0X3JlZ3ModHNrKS0+cmVnc1sxNV0pCiAKLSNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPnJlZ3NbMTVdKQorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIoX3JlZ3MpCSgoX3JlZ3MpLT5yZWdzWzE1XSkKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDJBKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKICNkZWZpbmUgUFJFRkVUQ0hfU1RSSURFCQlMMV9DQUNIRV9CWVRFUwogI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSAogI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFcKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCmluZGV4IDgwMzE3N2YuLjU3MjdkMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaApAQCAtMTQ1LDEzICsxNDUsMTMgQEAKICAqLwogI2RlZmluZSBTUl9VU0VSIChTUl9NTVUgfCBTUl9GRCkKIAotI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X3BjLCBuZXdfc3ApCQkJXAorI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIG5ld19wYywgbmV3X3NwKQkJCVwKIAlzZXRfZnMoVVNFUl9EUyk7CQkJCQlcCi0JcmVncy0+c3IgPSBTUl9VU0VSOwkvKiBVc2VyIG1vZGUuICovCQlcCi0JcmVncy0+cGMgPSBuZXdfcGMgLSA0OwkvKiBDb21wZW5zYXRlIHN5c2NhbGwgZXhpdCAqLwlcCi0JcmVncy0+cGMgfD0gMTsJCS8qIFNldCBTSG1lZGlhICEgKi8JCVwKLQlyZWdzLT5yZWdzWzE4XSA9IDA7CQkJCQlcCi0JcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKKwlfcmVncy0+c3IgPSBTUl9VU0VSOwkvKiBVc2VyIG1vZGUuICovCQlcCisJX3JlZ3MtPnBjID0gbmV3X3BjIC0gNDsJLyogQ29tcGVuc2F0ZSBzeXNjYWxsIGV4aXQgKi8JXAorCV9yZWdzLT5wYyB8PSAxOwkJLyogU2V0IFNIbWVkaWEgISAqLwkJXAorCV9yZWdzLT5yZWdzWzE4XSA9IDA7CQkJCQlcCisJX3JlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CkBAIC0yMjYsNyArMjI2LDcgQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKCh0c2spLT50aHJlYWQucGMpCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkLnNwKQogCi0jZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5yZWdzWzE1XSkKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKF9yZWdzKQkoKF9yZWdzKS0+cmVnc1sxNV0pCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9QUk9DRVNTT1JfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMTI5MTJhYi4uODFjNjU2OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMjIsMTQgKzEyMiwxMiBAQAogI2lmZGVmIENPTkZJR19TSF9EU1AKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCi0JCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkJIC0gc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSkgLSAxKQogI2RlZmluZSB0YXNrX3B0X2RzcHJlZ3ModGFzaykgXAotCSgoc3RydWN0IHB0X2RzcHJlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisJKChzdHJ1Y3QgcHRfZHNwcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKICNlbHNlCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCi0JKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSkgLSAxKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IDhmOGY0YWQuLjAxYTQwNzZhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgogCitleHRlcm4gdm9pZCBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOwogZXh0ZXJuIGxvbmcgX19tYWNodmVjX3N0YXJ0LCBfX21hY2h2ZWNfZW5kOwogZXh0ZXJuIGNoYXIgX191bmNhY2hlZF9zdGFydCwgX191bmNhY2hlZF9lbmQ7CiBleHRlcm4gY2hhciBfZWJzc1tdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI5OTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNX1NIX1NVU1BFTkRfSAorI2RlZmluZSBfQVNNX1NIX1NVU1BFTkRfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkgeyByZXR1cm4gMDsgfQorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3Qgc3dzdXNwX2FyY2hfcmVncyB7CisJc3RydWN0IHB0X3JlZ3MgdXNlcl9yZWdzOworCXVuc2lnbmVkIGxvbmcgYmFuazFfcmVnc1s4XTsKK307CisjZW5kaWYKKworLyogZmxhZ3MgcGFzc2VkIHRvIGFzc2VtYmx5IHN1c3BlbmQgY29kZSAqLworI2RlZmluZSBTVVNQX1NIX1NMRUVQCQkoMSA8PCAwKSAvKiBSZWd1bGFyIHNsZWVwIG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9TVEFOREJZCQkoMSA8PCAxKSAvKiBTSC1Nb2JpbGUgU29mdHdhcmUgc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfUlNUQU5EQlkJKDEgPDwgMikgLyogU0gtTW9iaWxlIFItc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfVVNUQU5EQlkJKDEgPDwgMykgLyogU0gtTW9iaWxlIFUtc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfU0YJCSgxIDw8IDQpIC8qIEVuYWJsZSBzZWxmLXJlZnJlc2ggKi8KKworI2VuZGlmIC8qIF9BU01fU0hfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggYTdjYTNhMS4uNGMzYjY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTksNyArOSw2IEBACiAJaW50ICgqaW5pdCkodm9pZCk7CiAJaW50ICgqc3RhcnQpKHZvaWQpOwogCWludCAoKnN0b3ApKHZvaWQpOwotCWN5Y2xlX3QgKCpyZWFkKSh2b2lkKTsKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQogCXVuc2lnbmVkIGxvbmcgKCpnZXRfb2Zmc2V0KSh2b2lkKTsKICNlbmRpZgpAQCAtMzksNiArMzgsNyBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC90aW1lLmMgKi8KIHZvaWQgaGFuZGxlX3RpbWVyX3RpY2sodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5OworCitleHRlcm4gc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3NoOwogCiAjZW5kaWYgLyogX19BU01fU0hfVElNRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggODhmZjFhZS4uOWMxNmY3MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC02LDIyICs2LDEwNiBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCi0jZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpIFwKLQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKQotCi0jZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQlcCi0JZmx1c2hfdGxiX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpCi0KLSNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorI2lmZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgotICogRmx1c2ggd2hvbGUgVExCcyBmb3IgTU0KKyAqIFRMQiBoYW5kbGluZy4gIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBwYWdlcyBmcm9tIHRoZSBwYWdlCisgKiB0YWJsZXMsIGFuZCBlZmZpY2llbnRseSBoYW5kbGUgdGhlIFRMQiBpc3N1ZXMuCiAgKi8KLSNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCQkJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKK3N0cnVjdCBtbXVfZ2F0aGVyIHsKKwlzdHJ1Y3QgbW1fc3RydWN0CSptbTsKKwl1bnNpZ25lZCBpbnQJCWZ1bGxtbTsKKwl1bnNpZ25lZCBsb25nCQlzdGFydCwgZW5kOworfTsKIAotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF90bGJfZ2F0aGVyKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCit7CisJdGxiLT5zdGFydCA9IFRBU0tfU0laRTsKKwl0bGItPmVuZCA9IDA7CisKKwlpZiAodGxiLT5mdWxsbW0pIHsKKwkJdGxiLT5zdGFydCA9IDA7CisJCXRsYi0+ZW5kID0gVEFTS19TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW11X2dhdGhlciAqCit0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGZ1bGxfbW1fZmx1c2gpCit7CisJc3RydWN0IG1tdV9nYXRoZXIgKnRsYiA9ICZnZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7CisKKwl0bGItPm1tID0gbW07CisJdGxiLT5mdWxsbW0gPSBmdWxsX21tX2ZsdXNoOworCisJaW5pdF90bGJfZ2F0aGVyKHRsYik7CisKKwlyZXR1cm4gdGxiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICh0bGItPmZ1bGxtbSkKKwkJZmx1c2hfdGxiX21tKHRsYi0+bW0pOworCisJLyoga2VlcCB0aGUgcGFnZSB0YWJsZSBjYWNoZSB3aXRoaW4gYm91bmRzICovCisJY2hlY2tfcGd0X2NhY2hlKCk7CisKKwlwdXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX3JlbW92ZV90bGJfZW50cnkoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlpZiAodGxiLT5zdGFydCA+IGFkZHJlc3MpCisJCXRsYi0+c3RhcnQgPSBhZGRyZXNzOworCWlmICh0bGItPmVuZCA8IGFkZHJlc3MgKyBQQUdFX1NJWkUpCisJCXRsYi0+ZW5kID0gYWRkcmVzcyArIFBBR0VfU0laRTsKK30KKworLyoKKyAqIEluIHRoZSBjYXNlIG9mIHRsYiB2bWEgaGFuZGxpbmcsIHdlIGNhbiBvcHRpbWlzZSB0aGVzZSBhd2F5IGluIHRoZQorICogY2FzZSB3aGVyZSB3ZSdyZSBkb2luZyBhIGZ1bGwgTU0gZmx1c2guICBXaGVuIHdlJ3JlIGRvaW5nIGEgbXVubWFwLAorICogdGhlIHZtYXMgYXJlIGFkanVzdGVkIHRvIG9ubHkgY292ZXIgdGhlIHJlZ2lvbiB0byBiZSB0b3JuIGRvd24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX3N0YXJ0X3ZtYShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0bGJfZW5kX3ZtYShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tICYmIHRsYi0+ZW5kKSB7CisJCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHRsYi0+c3RhcnQsIHRsYi0+ZW5kKTsKKwkJaW5pdF90bGJfZ2F0aGVyKHRsYik7CisJfQorfQorCisjZGVmaW5lIHRsYl9yZW1vdmVfcGFnZSh0bGIscGFnZSkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpCisjZGVmaW5lIHB0ZV9mcmVlX3RsYih0bGIsIHB0ZXApCQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZXApCisjZGVmaW5lIHBtZF9mcmVlX3RsYih0bGIsIHBtZHApCQlwbWRfZnJlZSgodGxiKS0+bW0sIHBtZHApCisjZGVmaW5lIHB1ZF9mcmVlX3RsYih0bGIsIHB1ZHApCQlwdWRfZnJlZSgodGxiKS0+bW0sIHB1ZHApCisKKyNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQorCisjZWxzZSAvKiBDT05GSUdfTU1VICovCisKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQkJCQlkbyB7IH0gd2hpbGUgKDApCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KIAorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCmluZGV4IDY4MTNjMzIuLjBlYTE1ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKQEAgLTEsMjIgKzEsMTcgQEAKICNpZm5kZWYgX19BU01fQ1BVX1NIM19ETUFfSAogI2RlZmluZSBfX0FTTV9DUFVfU0gzX0RNQV9ICiAKLQogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4YTQwMTAwMjAKLSNlbHNlCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGE0MDAwMDIwCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4YTQwMTAwMjAKKyNlbHNlIC8qIFNINzcwNS8wNi8wNy8wOSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4YTQwMDAwMjAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAjZGVmaW5lIERNVEUwX0lSUQk0OAotI2RlZmluZSBETVRFMV9JUlEJNDkKLSNkZWZpbmUgRE1URTJfSVJRCTUwCi0jZGVmaW5lIERNVEUzX0lSUQk1MQogI2RlZmluZSBETVRFNF9JUlEJNzYKLSNkZWZpbmUgRE1URTVfSVJRCTc3Ci0jZW5kaWYKIAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwogI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDIwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDUxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtMCwwICsxLDk0IEBACisjaWZuZGVmIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICisjZGVmaW5lIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MzApCisjZGVmaW5lIERNVEUwX0lSUQk0OAorI2RlZmluZSBETVRFNF9JUlEJNzYKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZFMDA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1BRTBfSVJRCTM4CisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRjYwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkY2MDkwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCisjZGVmaW5lIERNVEU0X0lSUQk0MAkvKiBETUFDMEIgKi8KKyNkZWZpbmUgRE1URTZfSVJRCTQyCisjZGVmaW5lIERNVEU4X0lSUQk3NgkvKiBETUFDMUEgKi8KKyNkZWZpbmUgRE1URTlfSVJRCTc3CisjZGVmaW5lIERNVEUxMF9JUlEJNzIJLyogRE1BQzFCICovCisjZGVmaW5lIERNVEUxMV9JUlEJNzMKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBETUFFMV9JUlEJNzQJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZEQzA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1URTZfSVJRCTQ2CisjZGVmaW5lIERNVEU4X0lSUQk5MgorI2RlZmluZSBETVRFOV9JUlEJOTMKKyNkZWZpbmUgRE1URTEwX0lSUQk5NAorI2RlZmluZSBETVRFMTFfSVJRCTk1CisjZGVmaW5lIERNQUUwX0lSUQkzOAkvKiBETUEgRXJyb3IgSVJRICovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkM4MTgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZWxzZSAvKiBTSDc3ODUgKi8KKyNkZWZpbmUgRE1URTBfSVJRCTMzCisjZGVmaW5lIERNVEU0X0lSUQkzNworI2RlZmluZSBETVRFNl9JUlEJNTIKKyNkZWZpbmUgRE1URThfSVJRCTU0CisjZGVmaW5lIERNVEU5X0lSUQk1NQorI2RlZmluZSBETVRFMTBfSVJRCTU2CisjZGVmaW5lIERNVEUxMV9JUlEJNTcKKyNkZWZpbmUgRE1BRTBfSVJRCTM5CS8qIERNQSBFcnJvciBJUlEwICovCisjZGVmaW5lIERNQUUxX0lSUQk1OAkvKiBETUEgRXJyb3IgSVJRMSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDQzA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2VuZGlmCisKKyNkZWZpbmUgUkVRX0hFCTB4MDAwMDAwQzAKKyNkZWZpbmUgUkVRX0gJMHgwMDAwMDA4MAorI2RlZmluZSBSRVFfTEUJMHgwMDAwMDA0MAorI2RlZmluZSBUTV9CVVJTVCAweDAwMDAwMjAKKyNkZWZpbmUgVFNfOAkweDAwMDAwMDAwCisjZGVmaW5lIFRTXzE2CTB4MDAwMDAwMDgKKyNkZWZpbmUgVFNfMzIJMHgwMDAwMDAxMAorI2RlZmluZSBUU18xNkJMSwkweDAwMDAwMDE4CisjZGVmaW5lIFRTXzMyQkxLCTB4MDAxMDAwMDAKKworLyoKKyAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCisgKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KKyAqCisgKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgorICovCitlbnVtIHsKKwlYTUlUX1NaXzhCSVQsCisJWE1JVF9TWl8xNkJJVCwKKwlYTUlUX1NaXzMyQklULAorCVhNSVRfU1pfMTI4QklULAorCVhNSVRfU1pfMjU2QklULAorfTsKKworLyoKKyAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7CisJW1hNSVRfU1pfOEJJVF0JCT0gMCwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g3NzgwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjQyNmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKLSNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKLQotI2RlZmluZSBSRVFfSEUJMHgwMDAwMDBDMAotI2RlZmluZSBSRVFfSAkweDAwMDAwMDgwCi0jZGVmaW5lIFJFUV9MRQkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDAyMAotI2RlZmluZSBUU184CTB4MDAwMDAwMDAKLSNkZWZpbmUgVFNfMTYJMHgwMDAwMDAwOAotI2RlZmluZSBUU18zMgkweDAwMDAwMDEwCi0jZGVmaW5lIFRTXzE2QkxLCTB4MDAwMDAwMTgKLSNkZWZpbmUgVFNfMzJCTEsJMHgwMDEwMDAwMAotCi0vKgotICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKLSAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgotICoKLSAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCi0gKi8KLWVudW0gewotCVhNSVRfU1pfOEJJVCwKLQlYTUlUX1NaXzE2QklULAotCVhNSVRfU1pfMzJCSVQsCi0JWE1JVF9TWl8xMjhCSVQsCi0JWE1JVF9TWl8yNTZCSVQsCi19OwotCi0vKgotICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAotfTsKLQotI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKaW5kZXggMjM1YjdjZC4uYmNiMzAyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaApAQCAtMSwzMSArMSwyOSBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0g0X0RNQV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDRfRE1BX0gKIAotI2RlZmluZSBETUFPUl9JTklUCSggMHg4MDAwIHwgRE1BT1JfRE1FICkKLQogLyogU0g3NzUxLzc3NjAvNzc4MCBETUEgSVJRIHNvdXJjZXMgKi8KLSNkZWZpbmUgRE1URTBfSVJRCTM0Ci0jZGVmaW5lIERNVEUxX0lSUQkzNQotI2RlZmluZSBETVRFMl9JUlEJMzYKLSNkZWZpbmUgRE1URTNfSVJRCTM3Ci0jZGVmaW5lIERNVEU0X0lSUQk0NAotI2RlZmluZSBETVRFNV9JUlEJNDUKLSNkZWZpbmUgRE1URTZfSVJRCTQ2Ci0jZGVmaW5lIERNVEU3X0lSUQk0NwotI2RlZmluZSBETUFFX0lSUQkzOAogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDRBCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGZjODA4MDIwCiAKKyNkZWZpbmUgRE1BT1JfSU5JVAkoRE1BT1JfRE1FKQogI2RlZmluZSBDSENSX1RTX01BU0sJMHgxOAogI2RlZmluZSBDSENSX1RTX1NISUZUCTMKIAotI2luY2x1ZGUgPGNwdS9kbWEtc2g3NzgwLmg+Ci0jZWxzZQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmZmEwMDAwMAorI2luY2x1ZGUgPGNwdS9kbWEtc2g0YS5oPgorI2Vsc2UgLyogQ09ORklHX0NQVV9TSDRBICovCisvKgorICogU0g3NzUwL1NINzc1MS9TSDc3NjAKKyAqLworI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNVEU2X0lSUQk0NgorI2RlZmluZSBETUFFMF9JUlEJMzgKIAorI2RlZmluZSBETUFPUl9JTklUCSgweDgwMDB8RE1BT1JfRE1FKQorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4ZmZhMDAwMDAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweGZmYTAwMDcwCiAvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCi0jZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDA4MAorI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDgwCiAjZGVmaW5lIFRTXzgJCTB4MDAwMDAwMTAKICNkZWZpbmUgVFNfMTYJCTB4MDAwMDAwMjAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMzAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oCmluZGV4IGMyM2FmODEuLjc0OWQxYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaApAQCAtMjksNiArMjksMTAgQEAKICNkZWZpbmUgRlJRQ1IwCQkJMHhmZmM4MDAwMAogI2RlZmluZSBGUlFDUjEJCQkweGZmYzgwMDA0CiAjZGVmaW5lIEZSUU1SMQkJCTB4ZmZjODAwMTQKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKKyNkZWZpbmUgRlJRQ1IwCQkJMHhmZmM0MDAwMAorI2RlZmluZSBGUlFDUjEJCQkweGZmYzQwMDA0CisjZGVmaW5lIEZSUU1SMQkJCTB4ZmZjNDAwMTQKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiAjZGVmaW5lIEZSUUNSCQkJMHhmZmMwMDAxNAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKaW5kZXggOWVhOGViMi4uM2NlN2VmNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKQEAgLTE0LDI4ICsxNCwzNSBAQAogI2RlZmluZSBNTVVfUFRFTAkweEZGMDAwMDA0CS8qIFBhZ2UgdGFibGUgZW50cnkgcmVnaXN0ZXIgTE9XICovCiAjZGVmaW5lIE1NVV9UVEIJCTB4RkYwMDAwMDgJLyogVHJhbnNsYXRpb24gdGFibGUgYmFzZSByZWdpc3RlciAqLwogI2RlZmluZSBNTVVfVEVBCQkweEZGMDAwMDBDCS8qIFRMQiBFeGNlcHRpb24gQWRkcmVzcyAqLwotI2RlZmluZSBNTVVfUFRFQQkweEZGMDAwMDM0CS8qIFBhZ2UgdGFibGUgZW50cnkgYXNzaXN0YW5jZSByZWdpc3RlciAqLworI2RlZmluZSBNTVVfUFRFQQkweEZGMDAwMDM0CS8qIFBURSBhc3Npc3RhbmNlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NVV9QVEVBRVgJMHhGRjAwMDA3QwkvKiBQVEUgQVNJRCBleHRlbnNpb24gcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBNTVVDUgkJMHhGRjAwMDAxMAkvKiBNTVUgQ29udHJvbCBSZWdpc3RlciAqLwogCi0jZGVmaW5lIE1NVV9JVExCX0FERFJFU1NfQVJSQVkJMHhGMjAwMDAwMAogI2RlZmluZSBNTVVfVVRMQl9BRERSRVNTX0FSUkFZCTB4RjYwMDAwMDAKKyNkZWZpbmUgTU1VX1VUTEJfQUREUkVTU19BUlJBWTIJMHhGNjgwMDAwMAogI2RlZmluZSBNTVVfUEFHRV9BU1NPQ19CSVQJMHg4MAogCiAjZGVmaW5lIE1NVUNSX1RJCQkoMTw8MikKIAotI2lmZGVmIENPTkZJR19YMlRMQgotI2RlZmluZSBNTVVDUl9NRQkJKDEgPDwgNykKLSNlbHNlCi0jZGVmaW5lIE1NVUNSX01FCQkoMCkKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCiAjZGVmaW5lIE1NVUNSX1NFCQkoMSA8PCA0KQogI2Vsc2UKICNkZWZpbmUgTU1VQ1JfU0UJCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBRVgKKyNkZWZpbmUgTU1VQ1JfQUVYCQkoMSA8PCA2KQorI2Vsc2UKKyNkZWZpbmUgTU1VQ1JfQUVYCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1gyVExCCisjZGVmaW5lIE1NVUNSX01FCQkoMSA8PCA3KQorI2Vsc2UKKyNkZWZpbmUgTU1VQ1JfTUUJCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTCiAjZGVmaW5lIE1NVUNSX1NRTUQJCSgxIDw8IDkpCiAjZWxzZQpAQCAtNDMsMTcgKzUwLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIE1NVV9OVExCX0VOVFJJRVMJNjQKLSNkZWZpbmUgTU1VX0NPTlRST0xfSU5JVAkoMHgwNXxNTVVDUl9TUU1EfE1NVUNSX01FfE1NVUNSX1NFKQotCi0jZGVmaW5lIE1NVV9JVExCX0RBVEFfQVJSQVkJMHhGMzAwMDAwMAotI2RlZmluZSBNTVVfVVRMQl9EQVRBX0FSUkFZCTB4RjcwMDAwMDAKLQotI2RlZmluZSBNTVVfVVRMQl9FTlRSSUVTCSAgIDY0Ci0jZGVmaW5lIE1NVV9VX0VOVFJZX1NISUZUCSAgICA4Ci0jZGVmaW5lIE1NVV9VVExCX1ZBTElECQkweDEwMAotI2RlZmluZSBNTVVfSVRMQl9FTlRSSUVTCSAgICA0Ci0jZGVmaW5lIE1NVV9JX0VOVFJZX1NISUZUCSAgICA4Ci0jZGVmaW5lIE1NVV9JVExCX1ZBTElECQkweDEwMAorI2RlZmluZSBNTVVfQ09OVFJPTF9JTklUCSgweDA1fE1NVUNSX1NRTUR8TU1VQ1JfTUV8TU1VQ1JfU0V8TU1VQ1JfQUVYKQogCiAjZGVmaW5lIFRSQQkweGZmMDAwMDIwCiAjZGVmaW5lIEVYUEVWVAkweGZmMDAwMDI0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ODhhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIFNINzc4NiBQaW5tdXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIEJhc2VkIG9uIHNoNzc4NS5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0NQVV9TSDc3ODZfSF9fCisjZGVmaW5lIF9fQ1BVX1NINzc4Nl9IX18KKworZW51bSB7CisJLyogUEEgKi8KKwlHUElPX1BBNywgR1BJT19QQTYsIEdQSU9fUEE1LCBHUElPX1BBNCwKKwlHUElPX1BBMywgR1BJT19QQTIsIEdQSU9fUEExLCBHUElPX1BBMCwKKworCS8qIFBCICovCisJR1BJT19QQjcsIEdQSU9fUEI2LCBHUElPX1BCNSwgR1BJT19QQjQsCisJR1BJT19QQjMsIEdQSU9fUEIyLCBHUElPX1BCMSwgR1BJT19QQjAsCisKKwkvKiBQQyAqLworCUdQSU9fUEM3LCBHUElPX1BDNiwgR1BJT19QQzUsIEdQSU9fUEM0LAorCUdQSU9fUEMzLCBHUElPX1BDMiwgR1BJT19QQzEsIEdQSU9fUEMwLAorCisJLyogUEQgKi8KKwlHUElPX1BENywgR1BJT19QRDYsIEdQSU9fUEQ1LCBHUElPX1BENCwKKwlHUElPX1BEMywgR1BJT19QRDIsIEdQSU9fUEQxLCBHUElPX1BEMCwKKworCS8qIFBFICovCisJR1BJT19QRTUsIEdQSU9fUEU0LCBHUElPX1BFMywgR1BJT19QRTIsCisJR1BJT19QRTEsIEdQSU9fUEUwLAorCisJLyogUEYgKi8KKwlHUElPX1BGNywgR1BJT19QRjYsIEdQSU9fUEY1LCBHUElPX1BGNCwKKwlHUElPX1BGMywgR1BJT19QRjIsIEdQSU9fUEYxLCBHUElPX1BGMCwKKworCS8qIFBHICovCisJR1BJT19QRzcsIEdQSU9fUEc2LCBHUElPX1BHNSwgR1BJT19QRzQsCisJR1BJT19QRzMsIEdQSU9fUEcyLCBHUElPX1BHMSwgR1BJT19QRzAsCisKKwkvKiBQSCAqLworCUdQSU9fUEg3LCBHUElPX1BINiwgR1BJT19QSDUsIEdQSU9fUEg0LAorCUdQSU9fUEgzLCBHUElPX1BIMiwgR1BJT19QSDEsIEdQSU9fUEgwLAorCisJLyogUEogKi8KKwlHUElPX1BKNywgR1BJT19QSjYsIEdQSU9fUEo1LCBHUElPX1BKNCwKKwlHUElPX1BKMywgR1BJT19QSjIsIEdQSU9fUEoxLCBHUElPX1BKMCwKKworCUdQSU9fRk5fQ0RFLAorCUdQSU9fRk5fRVRIX01BR0lDLAorCUdQSU9fRk5fRElTUCwKKwlHUElPX0ZOX0VUSF9MSU5LLAorCUdQSU9fRk5fRFI1LAorCUdQSU9fRk5fRVRIX1RYX0VSLAorCUdQSU9fRk5fRFI0LAorCUdQSU9fRk5fRVRIX1RYX0VOLAorCUdQSU9fRk5fRFIzLAorCUdQSU9fRk5fRVRIX1RYRDMsCisJR1BJT19GTl9EUjIsCisJR1BJT19GTl9FVEhfVFhEMiwKKwlHUElPX0ZOX0RSMSwKKwlHUElPX0ZOX0VUSF9UWEQxLAorCUdQSU9fRk5fRFIwLAorCUdQSU9fRk5fRVRIX1RYRDAsCisJR1BJT19GTl9WU1lOQywKKwlHUElPX0ZOX0hTUElfQ0xLLAorCUdQSU9fRk5fT0RERiwKKwlHUElPX0ZOX0hTUElfQ1MsCisJR1BJT19GTl9ERzUsCisJR1BJT19GTl9FVEhfTURJTywKKwlHUElPX0ZOX0RHNCwKKwlHUElPX0ZOX0VUSF9SWF9DTEssCisJR1BJT19GTl9ERzMsCisJR1BJT19GTl9FVEhfTURDLAorCUdQSU9fRk5fREcyLAorCUdQSU9fRk5fRVRIX0NPTCwKKwlHUElPX0ZOX0RHMSwKKwlHUElPX0ZOX0VUSF9UWF9DTEssCisJR1BJT19GTl9ERzAsCisJR1BJT19GTl9FVEhfQ1JTLAorCUdQSU9fRk5fRENMS0lOLAorCUdQSU9fRk5fSFNQSV9SWCwKKwlHUElPX0ZOX0hTWU5DLAorCUdQSU9fRk5fSFNQSV9UWCwKKwlHUElPX0ZOX0RCNSwKKwlHUElPX0ZOX0VUSF9SWEQzLAorCUdQSU9fRk5fREI0LAorCUdQSU9fRk5fRVRIX1JYRDIsCisJR1BJT19GTl9EQjMsCisJR1BJT19GTl9FVEhfUlhEMSwKKwlHUElPX0ZOX0RCMiwKKwlHUElPX0ZOX0VUSF9SWEQwLAorCUdQSU9fRk5fREIxLAorCUdQSU9fRk5fRVRIX1JYX0RWLAorCUdQSU9fRk5fREIwLAorCUdQSU9fRk5fRVRIX1JYX0VSLAorCUdQSU9fRk5fRENMS09VVCwKKwlHUElPX0ZOX1NDSUYxX1NMSywKKwlHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1RYRCwKKwlHUElPX0ZOX0RBQ0sxLAorCUdQSU9fRk5fQkFDSywKKwlHUElPX0ZOX0ZBTEUsCisJR1BJT19GTl9EQUNLMCwKKwlHUElPX0ZOX0ZDTEUsCisJR1BJT19GTl9EUkVRMSwKKwlHUElPX0ZOX0JSRVEsCisJR1BJT19GTl9VU0JfT1ZDMSwKKwlHUElPX0ZOX0RSRVEwLAorCUdQSU9fRk5fVVNCX09WQzAsCisJR1BJT19GTl9VU0JfUEVOQzEsCisJR1BJT19GTl9VU0JfUEVOQzAsCisJR1BJT19GTl9IQUMxX1NET1VULAorCUdQSU9fRk5fU1NJMV9TREFUQSwKKwlHUElPX0ZOX1NESUYxQ01ELAorCUdQSU9fRk5fSEFDMV9TRElOLAorCUdQSU9fRk5fU1NJMV9TQ0ssCisJR1BJT19GTl9TRElGMUNELAorCUdQSU9fRk5fSEFDMV9TWU5DLAorCUdQSU9fRk5fU1NJMV9XUywKKwlHUElPX0ZOX1NESUYxV1AsCisJR1BJT19GTl9IQUMxX0JJVENMSywKKwlHUElPX0ZOX1NTSTFfQ0xLLAorCUdQSU9fRk5fU0RJRjFDTEssCisJR1BJT19GTl9IQUMwX1NET1VULAorCUdQSU9fRk5fU1NJMF9TREFUQSwKKwlHUElPX0ZOX1NESUYxRDMsCisJR1BJT19GTl9IQUMwX1NESU4sCisJR1BJT19GTl9TU0kwX1NDSywKKwlHUElPX0ZOX1NESUYxRDIsCisJR1BJT19GTl9IQUMwX1NZTkMsCisJR1BJT19GTl9TU0kwX1dTLAorCUdQSU9fRk5fU0RJRjFEMSwKKwlHUElPX0ZOX0hBQzBfQklUQ0xLLAorCUdQSU9fRk5fU1NJMF9DTEssCisJR1BJT19GTl9TRElGMUQwLAorCUdQSU9fRk5fU0NJRjNfU0NLLAorCUdQSU9fRk5fU1NJMl9TREFUQSwKKwlHUElPX0ZOX1NDSUYzX1JYRCwKKwlHUElPX0ZOX1RDTEssCisJR1BJT19GTl9TU0kyX1NDSywKKwlHUElPX0ZOX1NDSUYzX1RYRCwKKwlHUElPX0ZOX0hBQ19SRVMsCisJR1BJT19GTl9TU0kyX1dTLAorCUdQSU9fRk5fREFDSzMsCisJR1BJT19GTl9TRElGMENNRCwKKwlHUElPX0ZOX0RBQ0syLAorCUdQSU9fRk5fU0RJRjBDRCwKKwlHUElPX0ZOX0RSRVEzLAorCUdQSU9fRk5fU0RJRjBXUCwKKwlHUElPX0ZOX1NDSUYwX0NUUywKKwlHUElPX0ZOX0RSRVEyLAorCUdQSU9fRk5fU0RJRjBDTEssCisJR1BJT19GTl9TQ0lGMF9SVFMsCisJR1BJT19GTl9JUkw3LAorCUdQSU9fRk5fU0RJRjBEMywKKwlHUElPX0ZOX1NDSUYwX1NDSywKKwlHUElPX0ZOX0lSTDYsCisJR1BJT19GTl9TRElGMEQyLAorCUdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fSVJMNSwKKwlHUElPX0ZOX1NESUYwRDEsCisJR1BJT19GTl9TQ0lGMF9UWEQsCisJR1BJT19GTl9JUkw0LAorCUdQSU9fRk5fU0RJRjBEMCwKKwlHUElPX0ZOX1NDSUY1X1NDSywKKwlHUElPX0ZOX0ZSQiwKKwlHUElPX0ZOX1NDSUY1X1JYRCwKKwlHUElPX0ZOX0lPSVMxNiwKKwlHUElPX0ZOX1NDSUY1X1RYRCwKKwlHUElPX0ZOX0NFMkIsCisJR1BJT19GTl9EUkFLMywKKwlHUElPX0ZOX0NFMkEsCisJR1BJT19GTl9TQ0lGNF9TQ0ssCisJR1BJT19GTl9EUkFLMiwKKwlHUElPX0ZOX1NTSTNfV1MsCisJR1BJT19GTl9TQ0lGNF9SWEQsCisJR1BJT19GTl9EUkFLMSwKKwlHUElPX0ZOX1NTSTNfU0RBVEEsCisJR1BJT19GTl9GU1RBVFVTLAorCUdQSU9fRk5fU0NJRjRfVFhELAorCUdQSU9fRk5fRFJBSzAsCisJR1BJT19GTl9TU0kzX1NDSywKKwlHUElPX0ZOX0ZTRSwKK307CisKKyNlbmRpZiAvKiBfX0NQVV9TSDc3ODZfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiM2UxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3VycXVlbGwuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIF9fTUFDSF9VUlFVRUxMX0gKKyNkZWZpbmUgX19NQUNIX1VSUVVFTExfSAorCisvKgorICogLS0tLS0tIDB4MDAwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MwIHwgKFNXMSxTVzQ3KSAgICBFRVBST00sIFNSQU0sIE5PUiBGTEFTSAorICogLS0tLS0rIDB4MDQwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MxIHwgKFNXNDcpICAgICAgICBTUkFNLCBTUkFNLUxBTi1QQ01DSUEsIE5PUiBGTEFTSAorICogLS0tLS0rIDB4MDgwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MyIHwgICAgICAgICAgICAgICBERFIzCisgKiAgQ1MzIHwKKyAqIC0tLS0tKyAweDEwMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNCB8ICAgICAgICAgICAgICAgUENJZQorICogLS0tLS0rIDB4MTQwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M1IHwgKFNXNDcpICAgICAgICBMUkFNL1VSQU0sIFNSQU0tTEFOLVBDTUNJQQorICogLS0tLS0rIDB4MTgwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M2IHwgICAgICAgICAgICAgICBBVEEsIE5BTkQgRkxBU0gKKyAqIC0tLS0tKyAweDFjMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNyB8ICAgICAgICAgICAgICAgU0g3Nzg2IHJlZ2lzdGVyCisgKiAtLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lIE5PUl9GTEFTSF9BRERSCTB4MDAwMDAwMDAKKyNkZWZpbmUgTk9SX0ZMQVNIX1NJWkUJMHgwNDAwMDAwMAorCisjZGVmaW5lIENTMV9CQVNFCTB4MDUwMDAwMDAKKyNkZWZpbmUgQ1M1X0JBU0UJMHgxNTAwMDAwMAorI2RlZmluZSBGUEdBX0JBU0UJQ1MxX0JBU0UKKworI2RlZmluZSBCT0FSRFJFRyhvZnMpCShGUEdBX0JBU0UgKyBvZnMjI19PRlMpCisjZGVmaW5lIFVCT0FSRFJFRyhvZnMpCSgweGEwMDAwMDAwICsgRlBHQV9CQVNFICsgb2ZzIyNfT0ZTKQorCisjZGVmaW5lIFNSU1RSX09GUwkweDAwMDAgLyogU3lzdGVtIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIEJETVJfT0ZTCTB4MDAxMCAvKiBCb2FyZCBvcGVyYXRpbmcgbW9kZSByZXNpc3RlciAqLworI2RlZmluZSBJUkwwU1JfT0ZTCTB4MDAyMCAvKiBJUkwwIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwwTVNLUl9PRlMJMHgwMDMwIC8qIElSTDAgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwxU1JfT0ZTCTB4MDA0MCAvKiBJUkwxIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwxTVNLUl9PRlMJMHgwMDUwIC8qIElSTDEgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwyU1JfT0ZTCTB4MDA2MCAvKiBJUkwyIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwyTVNLUl9PRlMJMHgwMDcwIC8qIElSTDIgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwzU1JfT0ZTCTB4MDA4MCAvKiBJUkwzIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwzTVNLUl9PRlMJMHgwMDkwIC8qIElSTDMgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBTT0ZUSU5UUl9PRlMJMHgwMTIwIC8qIFNvZnR3ZWFyIEludGVycnVwdCByZWdpc3RlciAqLworI2RlZmluZSBTTEVEUl9PRlMJMHgwMTMwIC8qIExFRCBjb250cm9sIHJlc2lzdGVyICovCisjZGVmaW5lIE1BUFNDSUZTV1JfT0ZTCTB4MDE0MCAvKiBNYXAvU0NJRiBTd2l0Y2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBWRVJSX09GUwkweDAxNTAgLyogRlBHQSBWZXJzaW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQREFURVJfT0ZTCTB4MDE2MCAvKiBGUEdBIERhdGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBZRUFSUl9PRlMJMHgwMTcwIC8qIEZQR0EgWWVhciByZWdpc3RlciAqLworI2RlZmluZSBUQ0xLQ1JfT0ZTCTB4MDE4MCAvKiBUQ0xLIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElQU1dNUl9PRlMJMHgxMDAwIC8qIERJUFNXIG1vbml0b3IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBPRFJfT0ZTCTB4MTAxMCAvKiBPdXRwdXQgcG9ydCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIEFUQUNOUl9PRlMJMHgxMDIwIC8qIEFUQS1DTiBDb250cm9sL3N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBGUElORFJfT0ZTCTB4MTAzMCAvKiBJbnB1dCBwb3J0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURTV01SX09GUwkweDEwNDAgLyogTU9ERSBTVyBtb25pdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEREUjNCVVBDUl9PRlMJMHgxMDUwIC8qIEREUjMgQmFja3VwIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NJQ09ERUNDUl9PRlMJMHgxMDYwIC8qIFNTSS1DT0RFQyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVTTE9UU1JfT0ZTCTB4MTA3MCAvKiBQQ0lleHByZXNzIFNsb3Qgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEVUSEVSUE9SVFNSX09GUwkweDEwODAgLyogRXRoZXJQaHkgUG9ydCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0hDUl9PRlMJMHgzMDAwIC8qIExhdGNoIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ1VBUl9PRlMJMHgzMDEwIC8qIExhdGNoIHVwcGVyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xBUl9PRlMJMHgzMDEyIC8qIExhdGNoIGxvd2VyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xVRFJfT0ZTCTB4MzAyNCAvKiBMYXRjaCBEMzEtMTYgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xMRFJfT0ZTCTB4MzAyNiAvKiBMYXRjaCBEMTUtMCByZWdpc3RlciAqLworCisjZGVmaW5lIENIQVJMRURfT0ZTCTB4MjAwMCAvKiBDaGFyYWN0ZXIgTEVEICovCisKKyNlbmRpZiAgLyogX19NQUNIX1VSUVVFTExfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMiBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCmluZGV4IDJlMWI4NmUuLjgyYTNhMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCkBAIC0zMCw1ICszMCw2IEBACiBvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSBncGlvLm8KIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19EVU1QX0NPREUpCQkrPSBkaXNhc3NlbWJsZS5vCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcC5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA1N2NmMGUwLi45OWFjZWIyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMiw4ICsxMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiBpbnQgbWFpbih2b2lkKQogewpAQCAtMjUsNSArMjcsMTEgQEAKIAlERUZJTkUoVElfUFJFX0NPVU5ULAlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpKTsKIAlERUZJTkUoVElfUkVTVEFSVF9CTE9DSyxvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHJlc3RhcnRfYmxvY2spKTsKIAorI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorCURFRklORShQQkVfQUREUkVTUywgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgYWRkcmVzcykpOworCURFRklORShQQkVfT1JJR19BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBvcmlnX2FkZHJlc3MpKTsKKwlERUZJTkUoUEJFX05FWFQsIG9mZnNldG9mKHN0cnVjdCBwYmUsIG5leHQpKTsKKwlERUZJTkUoU1dTVVNQX0FSQ0hfUkVHU19TSVpFLCBzaXplb2Yoc3RydWN0IHN3c3VzcF9hcmNoX3JlZ3MpKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IGY0NzFkMjQuLjI2MDA2NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAKICMgU3BlY2lhbCBjYXNlcyBmb3IgZmFtaWx5IGFuY2VzdHJ5LgogCiBvYmotJChDT05GSUdfQ1BVX1NINEEpCQkrPSBzaDRhLworb2JqLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCSs9IHNobW9iaWxlLwogCiAjIENvbW1vbiBpbnRlcmZhY2VzLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IDdiMTcxMzcuLjFkYzg5NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjM5LDYgKzI0MSwzNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2xrX3JlY2FsY19yYXRlKTsKIAoraW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBjbGsgKm9sZDsKKworCWlmICghcGFyZW50IHx8ICFjbGspCisJCXJldHVybiByZXQ7CisKKwlvbGQgPSBjbGstPnBhcmVudDsKKwlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5zZXRfcGFyZW50KSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPm9wcy0+c2V0X3BhcmVudChjbGssIHBhcmVudCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwkJY2xrLT5wYXJlbnQgPSAocmV0ID8gb2xkIDogcGFyZW50KTsKKwl9CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIENMS19SQVRFX1BST1BBR0FURVMpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfc2V0X3BhcmVudCk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZ2V0X3BhcmVudCk7CisKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaWYgKGxpa2VseShjbGstPm9wcyAmJiBjbGstPm9wcy0+cm91bmRfcmF0ZSkpIHsKQEAgLTMyOSw2ICszNjAsNzAgQEAKIAlyZXR1cm4gcCAtIGJ1ZjsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBjbGtzX3N5c2Rldl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdGF0aWMgcG1fbWVzc2FnZV90IHByZXZfc3RhdGU7CisJc3RydWN0IGNsayAqY2xrcDsKKworCXN3aXRjaCAoc3RhdGUuZXZlbnQpIHsKKwljYXNlIFBNX0VWRU5UX09OOgorCQkvKiBSZXN1bWVpbmcgZnJvbSBoaWJlcm5hdGlvbiAqLworCQlpZiAocHJldl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJmNsb2NrX2xpc3QsIG5vZGUpCisJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMpKSB7CisJCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa3AtPnJhdGU7CisKKwkJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMtPnNldF9wYXJlbnQpKQorCQkJCQkJY2xrcC0+b3BzLT5zZXRfcGFyZW50KGNsa3AsCisJCQkJCQkJY2xrcC0+cGFyZW50KTsKKwkJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMtPnNldF9yYXRlKSkKKwkJCQkJCWNsa3AtPm9wcy0+c2V0X3JhdGUoY2xrcCwKKwkJCQkJCQlyYXRlLCBOT19DSEFOR0UpOworCQkJCQllbHNlIGlmIChsaWtlbHkoY2xrcC0+b3BzLT5yZWNhbGMpKQorCQkJCQkJY2xrcC0+b3BzLT5yZWNhbGMoY2xrcCk7CisJCQkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX0ZSRUVaRToKKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9TVVNQRU5EOgorCQlicmVhazsKKwl9CisKKwlwcmV2X3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xrc19zeXNkZXZfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNsa3Nfc3lzZGV2X3N1c3BlbmQoZGV2LCBQTVNHX09OKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgY2xrc19zeXNkZXZfY2xhc3MgPSB7CisJLm5hbWUgPSAiY2xrcyIsCit9OworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgY2xrc19zeXNkZXZfZHJpdmVyID0geworCS5zdXNwZW5kID0gY2xrc19zeXNkZXZfc3VzcGVuZCwKKwkucmVzdW1lID0gY2xrc19zeXNkZXZfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGNsa3Nfc3lzZGV2X2RldiA9IHsKKwkuY2xzID0gJmNsa3Nfc3lzZGV2X2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX3N5c2Rldl9pbml0KHZvaWQpCit7CisJc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZjbGtzX3N5c2Rldl9jbGFzcyk7CisJc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY2xrc19zeXNkZXZfY2xhc3MsICZjbGtzX3N5c2Rldl9kcml2ZXIpOworCXN5c2Rldl9yZWdpc3RlcigmY2xrc19zeXNkZXZfZGV2KTsKKworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGNsa19zeXNkZXZfaW5pdCk7CisjZW5kaWYKKwogaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQogewogCWludCBpLCByZXQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKaW5kZXggNTZlNTg3OC4uMGUzMmQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCkBAIC0yLDYgKzIsNyBAQAogICogU0g3NjE5IFNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiAgWW9zaGlub3JpIFNhdG8KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTgsMTUgKzE5LDEwIEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVdEVCwgRURNQUMsIENNVDAsIENNVDEsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwKIAlISUZfSElGSSwgSElGX0hJRkJJLAogCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLAogCVNJT0YsCi0KLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JU0NJRjAsIFNDSUYxLCBTQ0lGMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMzYsMjQgKzMyLDE4IEBACiAJSU5UQ19JUlEoSVJRNiwgODIpLCBJTlRDX0lSUShJUlE3LCA4MyksCiAJSU5UQ19JUlEoV0RULCA4NCksIElOVENfSVJRKEVETUFDLCA4NSksCiAJSU5UQ19JUlEoQ01UMCwgODYpLCBJTlRDX0lSUShDTVQxLCA4NyksCi0JSU5UQ19JUlEoU0NJRjBfRVJJLCA4OCksIElOVENfSVJRKFNDSUYwX1JYSSwgODkpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgOTApLCBJTlRDX0lSUShTQ0lGMF9UWEksIDkxKSwKLQlJTlRDX0lSUShTQ0lGMV9FUkksIDkyKSwgSU5UQ19JUlEoU0NJRjFfUlhJLCA5MyksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCA5NCksIElOVENfSVJRKFNDSUYxX1RYSSwgOTUpLAotCUlOVENfSVJRKFNDSUYyX0VSSSwgOTYpLCBJTlRDX0lSUShTQ0lGMl9SWEksIDk3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDk4KSwgSU5UQ19JUlEoU0NJRjJfVFhJLCA5OSksCisJSU5UQ19JUlEoU0NJRjAsIDg4KSwgSU5UQ19JUlEoU0NJRjAsIDg5KSwKKwlJTlRDX0lSUShTQ0lGMCwgOTApLCBJTlRDX0lSUShTQ0lGMCwgOTEpLAorCUlOVENfSVJRKFNDSUYxLCA5MiksIElOVENfSVJRKFNDSUYxLCA5MyksCisJSU5UQ19JUlEoU0NJRjEsIDk0KSwgSU5UQ19JUlEoU0NJRjEsIDk1KSwKKwlJTlRDX0lSUShTQ0lGMiwgOTYpLCBJTlRDX0lSUShTQ0lGMiwgOTcpLAorCUlOVENfSVJRKFNDSUYyLCA5OCksIElOVENfSVJRKFNDSUYyLCA5OSksCiAJSU5UQ19JUlEoSElGX0hJRkksIDEwMCksIElOVENfSVJRKEhJRl9ISUZCSSwgMTAxKSwKIAlJTlRDX0lSUShETUFDMCwgMTA0KSwgSU5UQ19JUlEoRE1BQzEsIDEwNSksCiAJSU5UQ19JUlEoRE1BQzIsIDEwNiksIElOVENfSVJRKERNQUMzLCAxMDcpLAogCUlOVENfSVJRKFNJT0YsIDEwOCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGY4MTQwMDA2LCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IElSUTAsIElSUTEsIElSUTIsIElSUTMgfSB9LAogCXsgMHhmODE0MDAwOCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKQEAgLTY0LDcgKzU0LDcgQEAKIAl7IDB4ZjgwODAwMDgsIDAsIDE2LCA0LCAvKiBJUFJHICovIHsgU0lPRiB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NjE5IiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzYxOSIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKQEAgLTcyLDE3ICs2MiwxNyBAQAogCQkubWFwYmFzZQk9IDB4Zjg0MDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyA4OCwgODksIDkxLCA5MH0sCisJCS5pcnFzCQk9IHsgODgsIDg4LCA4OCwgODggfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmODQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDkyLCA5MywgOTUsIDk0fSwKKwkJLmlycXMJCT0geyA5MiwgOTIsIDkyLCA5MiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGY4NDIwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgOTYsIDk3LCA5OSwgOTh9LAorCQkuaXJxcwkJPSB7IDk2LCA5NiwgOTYsIDk2IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKaW5kZXggMDIwYTk2Zi4uNGE1ZTU5NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxhc20vZnJlcS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1jb25zdCBzdGF0aWMgaW50IHBsbDFyYXRlW109ezEsMiwzLDQsNiw4fTsKLWNvbnN0IHN0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW109ezEsMiwzLDQsNiw4LDEyfTsKK3N0YXRpYyBjb25zdCBpbnQgcGxsMXJhdGVbXT17MSwyLDMsNCw2LDh9Oworc3RhdGljIGNvbnN0IGludCBwZmNfZGl2aXNvcnNbXT17MSwyLDMsNCw2LDgsMTJ9OwogI2RlZmluZSBpZmNfZGl2aXNvcnMgcGZjX2Rpdmlzb3JzCiAKICNpZiAoQ09ORklHX1NIX0NMS19NRCA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtbXhnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYwppbmRleCBlNjExZDc5Li44NDQyOTM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSZW5lc2FzIE1YLUcgKFI4QTAzMDIyQkcpIFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yMCwyMyArMjAsMTUgQEAKIAlJUlE4LCBJUlE5LCBJUlExMCwgSVJRMTEsIElSUTEyLCBJUlExMywgSVJRMTQsIElSUTE1LAogCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAotCiAJU0lOVDgsIFNJTlQ3LCBTSU5UNiwgU0lOVDUsIFNJTlQ0LCBTSU5UMywgU0lOVDIsIFNJTlQxLAogCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKKwlTQ0lGMCwgU0NJRjEsCiAKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKLQlNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXLAorCU1UVTJfR1JPVVAxLCBNVFUyX0dST1VQMiwgTVRVMl9HUk9VUDMsIE1UVTJfR1JPVVA0LCBNVFUyX0dST1VQNQorCU1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgU0NJRjAsIFNDSUYxLAotCU1UVTJfR1JPVVAxLCBNVFUyX0dST1VQMiwgTVRVMl9HUk9VUDMsIE1UVTJfR1JPVVA0LCBNVFUyX0dST1VQNQorCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU5LDQ3ICs1MSwzNiBAQAogCUlOVENfSVJRKFNJTlQ0LCA5OCksIElOVENfSVJRKFNJTlQzLCA5OSksCiAJSU5UQ19JUlEoU0lOVDIsIDEwMCksIElOVENfSVJRKFNJTlQxLCAxMDEpLAogCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAyMjApLCBJTlRDX0lSUShTQ0lGMF9UWEksIDIyMSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAyMjIpLCBJTlRDX0lSUShTQ0lGMF9FUkksIDIyMyksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAyMjQpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDIyNSksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAyMjYpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDIyNyksCisJSU5UQ19JUlEoU0NJRjAsIDIyMCksIElOVENfSVJRKFNDSUYwLCAyMjEpLAorCUlOVENfSVJRKFNDSUYwLCAyMjIpLCBJTlRDX0lSUShTQ0lGMCwgMjIzKSwKKwlJTlRDX0lSUShTQ0lGMSwgMjI0KSwgSU5UQ19JUlEoU0NJRjEsIDIyNSksCisJSU5UQ19JUlEoU0NJRjEsIDIyNiksIElOVENfSVJRKFNDSUYxLCAyMjcpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMjI4KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMjI5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAyMzApLCBJTlRDX0lSUShNVFUyX1RHSTBELCAyMzEpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDIzMiksIElOVENfSVJRKE1UVTJfVEdJMEUsIDIzMyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIyOCksIElOVENfSVJRKE1UVTJfR1JPVVAxLCAyMjkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzApLCBJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMyksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTBGLCAyMzQpLCBJTlRDX0lSUShNVFUyX1RHSTFBLCAyMzUpLAotCUlOVENfSVJRKE1UVTJfVEdJMUIsIDIzNiksIElOVENfSVJRKE1UVTJfVENJMVYsIDIzNyksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMjM4KSwgSU5UQ19JUlEoTVRVMl9UR0kyQSwgMjM5KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM0KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNiksIElOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzcpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzgpLCBJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM5KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMkIsIDI0MCksIElOVENfSVJRKE1UVTJfVENJMlYsIDI0MSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMjQyKSwgSU5UQ19JUlEoTVRVMl9UR0kzQSwgMjQzKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMywgMjQwKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MiksIElOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDMpLAogCiAJSU5UQ19JUlEoTVRVMl9UR0kzQiwgMjQ0KSwKIAlJTlRDX0lSUShNVFUyX1RHSTNDLCAyNDUpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kzRCwgMjQ2KSwgSU5UQ19JUlEoTVRVMl9UQ0kzViwgMjQ3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAyNDgpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAyNDkpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDI1MCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDI1MSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0NiksIElOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDcpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDgpLCBJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ5KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNCwgMjUwKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI1MSksCiAKLQlJTlRDX0lSUShNVFUyX1RDSTRWLCAyNTIpLCBJTlRDX0lSUShNVFUyX1RHSTVVLCAyNTMpLAotCUlOVENfSVJRKE1UVTJfVEdJNVYsIDI1NCksIElOVENfSVJRKE1UVTJfVEdJNVcsIDI1NSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1MiksIElOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTMpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTQpLCBJTlRDX0lSUShNVFUyX0dST1VQNSwgMjU1KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAxLCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCQkgICBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAyLCBNVFUyX1RHSTBGLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLAotCQkgICBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLCBNVFUyX1RHSTJBKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAzLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCQkgICBNVFUyX1RHSTNBKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVA0LCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLCBNVFUyX1RHSTRBLAotCQkgICBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVA1LCBNVFUyX1RDSTRWLCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTM3LDcgKzExOCw3IEBACiAJCS5tYXBiYXNlCT0gMHhmZjgwNDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjIzLCAyMjAsIDIyMSwgMjIyIH0sCisJCS5pcnFzCQk9IHsgMjIwLCAyMjAsIDIyMCwgMjIwIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKaW5kZXggMDYzMWU0Mi4uMDBmNDJmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgU0g3MjAxIHNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCAgUGV0ZXIgR3JpZmZpbiBwZ3JpZmZpbkBtcGMtZGF0YS5jby51aworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOCw1NyArMTksMzIgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAorCiAJQURDX0FESSwKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKLQlNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXLAotCVJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVAsCi0JV0RULAotCUlJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLCBJSUMzMF9URUksCi0JSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksIElJQzMxX1RFSSwKLQlJSUMzMl9TVFBJLCBJSUMzMl9OQUtJLCBJSUMzMl9SWEksIElJQzMyX1RYSSwgSUlDMzJfVEVJLAorCisJTVRVMjBfQUJDRCwgTVRVMjBfVkVGLCBNVFUyMV9BQiwgTVRVMjFfVlUsIE1UVTIyX0FCLCBNVFUyMl9WVSwKKwlNVFUyM19BQkNELCBNVFUyNF9BQkNELCBNVFUyNV9VVlcsIE1UVTJfVENJM1YsIE1UVTJfVENJNFYsCisKKwlSVEMsIFdEVCwKKworCUlJQzMwLCBJSUMzMSwgSUlDMzIsCiAKIAlETUFDMF9ETUlOVDAsIERNQUMxX0RNSU5UMSwKIAlETUFDMl9ETUlOVDIsIERNQUMzX0RNSU5UMywKIAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKLQlTQ0lGNF9CUkksIFNDSUY0X0VSSSwgU0NJRjRfUlhJLCBTQ0lGNF9UWEksCi0JU0NJRjVfQlJJLCBTQ0lGNV9FUkksIFNDSUY1X1JYSSwgU0NJRjVfVFhJLAotCVNDSUY2X0JSSSwgU0NJRjZfRVJJLCBTQ0lGNl9SWEksIFNDSUY2X1RYSSwKLQlTQ0lGN19CUkksIFNDSUY3X0VSSSwgU0NJRjdfUlhJLCBTQ0lGN19UWEksCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwgU0NJRjYsIFNDSUY3LAogCiAJRE1BQzBfRE1JTlRBLCBETUFDNF9ETUlOVDQsIERNQUM1X0RNSU5UNSwgRE1BQzZfRE1JTlQ2LAogCURNQUM3X0RNSU5UNywKIAotCVJDQU4wX0VSUywgUkNBTjBfT1ZSLAotCVJDQU4wX1NMRSwKLQlSQ0FOMF9STTAsIFJDQU4wX1JNMSwKLQotCVJDQU4xX0VSUywgUkNBTjFfT1ZSLAotCVJDQU4xX1NMRSwKLQlSQ0FOMV9STTAsIFJDQU4xX1JNMSwKKwlSQ0FOMCwgUkNBTjEsCiAKIAlTU0kwX1NTSUksIFNTSTFfU1NJSSwKIAotCVRNUjBfQ01JQTAsIFRNUjBfQ01JQjAsIFRNUjBfT1ZJMCwKLQlUTVIxX0NNSUExLCBUTVIxX0NNSUIxLCBUTVIxX09WSTEsCisJVE1SMCwgVE1SMSwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQotCUlSUSwgUElOVCwgQURDLAotCU1UVTIwX0FCQ0QsIE1UVTIwX1ZFRiwgTVRVMjFfQUIsIE1UVTIxX1ZVLCBNVFUyMl9BQiwgTVRVMjJfVlUsCi0JTVRVMjNfQUJDRCwgTVRVMjRfQUJDRCwgTVRVMjVfVVZXLAotCVJUQywgSUlDMzAsIElJQzMxLCBJSUMzMiwKLQlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LCBTQ0lGNiwgU0NJRjcsCi0JUkNBTjAsIFJDQU4xLCBUTVIwLCBUTVIxCi0KKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC03Niw2ICs1Miw3IEBACiAJSU5UQ19JUlEoSVJRMiwgNjYpLCBJTlRDX0lSUShJUlEzLCA2NyksCiAJSU5UQ19JUlEoSVJRNCwgNjgpLCBJTlRDX0lSUShJUlE1LCA2OSksCiAJSU5UQ19JUlEoSVJRNiwgNzApLCBJTlRDX0lSUShJUlE3LCA3MSksCisKIAlJTlRDX0lSUShQSU5UMCwgODApLCBJTlRDX0lSUShQSU5UMSwgODEpLAogCUlOVENfSVJRKFBJTlQyLCA4MiksIElOVENfSVJRKFBJTlQzLCA4MyksCiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKQEAgLTgzLDEyMyArNjAsOTIgQEAKIAogCUlOVENfSVJRKEFEQ19BREksIDkyKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDEwOCksIElOVENfSVJRKE1UVTJfVEdJMEIsIDEwOSksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTEwKSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTExKSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxMTIpLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDExMyksIElOVENfSVJRKE1UVTJfVEdJMEYsIDExNCksCisJSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTA4KSwgSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTA5KSwKKwlJTlRDX0lSUShNVFUyMF9BQkNELCAxMTApLCBJTlRDX0lSUShNVFUyMF9BQkNELCAxMTEpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTE2KSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTE3KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxMjApLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxMjEpLAorCUlOVENfSVJRKE1UVTIwX1ZFRiwgMTEyKSwgSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTMpLAorCUlOVENfSVJRKE1UVTIwX1ZFRiwgMTE0KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDEyNCksIElOVENfSVJRKE1UVTJfVEdJMkIsIDEyNSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTI4KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTI5KSwKKwlJTlRDX0lSUShNVFUyMV9BQiwgMTE2KSwgSU5UQ19JUlEoTVRVMjFfQUIsIDExNyksCisJSU5UQ19JUlEoTVRVMjFfVlUsIDEyMCksIElOVENfSVJRKE1UVTIxX1ZVLCAxMjEpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kzQSwgMTMyKSwgSU5UQ19JUlEoTVRVMl9UR0kzQiwgMTMzKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNDLCAxMzQpLCBJTlRDX0lSUShNVFUyX1RHSTNELCAxMzUpLAorCUlOVENfSVJRKE1UVTIyX0FCLCAxMjQpLCBJTlRDX0lSUShNVFUyMl9BQiwgMTI1KSwKKwlJTlRDX0lSUShNVFUyMl9WVSwgMTI4KSwgSU5UQ19JUlEoTVRVMjJfVlUsIDEyOSksCisKKwlJTlRDX0lSUShNVFUyM19BQkNELCAxMzIpLCBJTlRDX0lSUShNVFUyM19BQkNELCAxMzMpLAorCUlOVENfSVJRKE1UVTIzX0FCQ0QsIDEzNCksIElOVENfSVJRKE1UVTIzX0FCQ0QsIDEzNSksCisKIAlJTlRDX0lSUShNVFUyX1RDSTNWLCAxMzYpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMTQwKSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMTQxKSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAxNDIpLCBJTlRDX0lSUShNVFUyX1RHSTRELCAxNDMpLAorCUlOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MCksIElOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MSksCisJSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQyKSwgSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQzKSwKKwogCUlOVENfSVJRKE1UVTJfVENJNFYsIDE0NCksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTVVLCAxNDgpLCBJTlRDX0lSUShNVFUyX1RHSTVWLCAxNDkpLAotCUlOVENfSVJRKE1UVTJfVEdJNVcsIDE1MCksCisJSU5UQ19JUlEoTVRVMjVfVVZXLCAxNDgpLCBJTlRDX0lSUShNVFUyNV9VVlcsIDE0OSksCisJSU5UQ19JUlEoTVRVMjVfVVZXLCAxNTApLAogCi0JSU5UQ19JUlEoUlRDX0FSTSwgMTUyKSwgSU5UQ19JUlEoUlRDX1BSRCwgMTUzKSwKLQlJTlRDX0lSUShSVENfQ1VQLCAxNTQpLCBJTlRDX0lSUShXRFQsIDE1NiksCisJSU5UQ19JUlEoUlRDLCAxNTIpLCBJTlRDX0lSUShSVEMsIDE1MyksCisJSU5UQ19JUlEoUlRDLCAxNTQpLAogCi0JSU5UQ19JUlEoSUlDMzBfU1RQSSwgMTU3KSwgSU5UQ19JUlEoSUlDMzBfTkFLSSwgMTU4KSwKLQlJTlRDX0lSUShJSUMzMF9SWEksIDE1OSksIElOVENfSVJRKElJQzMwX1RYSSwgMTYwKSwKLQlJTlRDX0lSUShJSUMzMF9URUksIDE2MSksCisJSU5UQ19JUlEoV0RULCAxNTYpLAogCi0JSU5UQ19JUlEoSUlDMzFfU1RQSSwgMTY0KSwgSU5UQ19JUlEoSUlDMzFfTkFLSSwgMTY1KSwKLQlJTlRDX0lSUShJSUMzMV9SWEksIDE2NiksIElOVENfSVJRKElJQzMxX1RYSSwgMTY3KSwKLQlJTlRDX0lSUShJSUMzMV9URUksIDE2OCksCisJSU5UQ19JUlEoSUlDMzAsIDE1NyksIElOVENfSVJRKElJQzMwLCAxNTgpLAorCUlOVENfSVJRKElJQzMwLCAxNTkpLCBJTlRDX0lSUShJSUMzMCwgMTYwKSwKKwlJTlRDX0lSUShJSUMzMCwgMTYxKSwKIAotCUlOVENfSVJRKElJQzMyX1NUUEksIDE3MCksIElOVENfSVJRKElJQzMyX05BS0ksIDE3MSksCi0JSU5UQ19JUlEoSUlDMzJfUlhJLCAxNzIpLCBJTlRDX0lSUShJSUMzMl9UWEksIDE3MyksCi0JSU5UQ19JUlEoSUlDMzJfVEVJLCAxNzQpLAorCUlOVENfSVJRKElJQzMxLCAxNjQpLCBJTlRDX0lSUShJSUMzMSwgMTY1KSwKKwlJTlRDX0lSUShJSUMzMSwgMTY2KSwgSU5UQ19JUlEoSUlDMzEsIDE2NyksCisJSU5UQ19JUlEoSUlDMzEsIDE2OCksCisKKwlJTlRDX0lSUShJSUMzMiwgMTcwKSwgSU5UQ19JUlEoSUlDMzIsIDE3MSksCisJSU5UQ19JUlEoSUlDMzIsIDE3MiksIElOVENfSVJRKElJQzMyLCAxNzMpLAorCUlOVENfSVJRKElJQzMyLCAxNzQpLAogCiAJSU5UQ19JUlEoRE1BQzBfRE1JTlQwLCAxNzYpLCBJTlRDX0lSUShETUFDMV9ETUlOVDEsIDE3NyksCiAJSU5UQ19JUlEoRE1BQzJfRE1JTlQyLCAxNzgpLCBJTlRDX0lSUShETUFDM19ETUlOVDMsIDE3OSksCiAKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDE4MCksIElOVENfSVJRKFNDSUYwX0VSSSwgMTgxKSwKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDE4MiksIElOVENfSVJRKFNDSUYwX1RYSSwgMTgzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDE4NCksIElOVENfSVJRKFNDSUYxX0VSSSwgMTg1KSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDE4NiksIElOVENfSVJRKFNDSUYxX1RYSSwgMTg3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDE4OCksIElOVENfSVJRKFNDSUYyX0VSSSwgMTg5KSwKLQlJTlRDX0lSUShTQ0lGMl9SWEksIDE5MCksIElOVENfSVJRKFNDSUYyX1RYSSwgMTkxKSwKLQlJTlRDX0lSUShTQ0lGM19CUkksIDE5MiksIElOVENfSVJRKFNDSUYzX0VSSSwgMTkzKSwKLQlJTlRDX0lSUShTQ0lGM19SWEksIDE5NCksIElOVENfSVJRKFNDSUYzX1RYSSwgMTk1KSwKLQlJTlRDX0lSUShTQ0lGNF9CUkksIDE5NiksIElOVENfSVJRKFNDSUY0X0VSSSwgMTk3KSwKLQlJTlRDX0lSUShTQ0lGNF9SWEksIDE5OCksIElOVENfSVJRKFNDSUY0X1RYSSwgMTk5KSwKLQlJTlRDX0lSUShTQ0lGNV9CUkksIDIwMCksIElOVENfSVJRKFNDSUY1X0VSSSwgMjAxKSwKLQlJTlRDX0lSUShTQ0lGNV9SWEksIDIwMiksIElOVENfSVJRKFNDSUY1X1RYSSwgMjAzKSwKLQlJTlRDX0lSUShTQ0lGNl9CUkksIDIwNCksIElOVENfSVJRKFNDSUY2X0VSSSwgMjA1KSwKLQlJTlRDX0lSUShTQ0lGNl9SWEksIDIwNiksIElOVENfSVJRKFNDSUY2X1RYSSwgMjA3KSwKLQlJTlRDX0lSUShTQ0lGN19CUkksIDIwOCksIElOVENfSVJRKFNDSUY3X0VSSSwgMjA5KSwKLQlJTlRDX0lSUShTQ0lGN19SWEksIDIxMCksIElOVENfSVJRKFNDSUY3X1RYSSwgMjExKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTgwKSwgSU5UQ19JUlEoU0NJRjAsIDE4MSksCisJSU5UQ19JUlEoU0NJRjAsIDE4MiksIElOVENfSVJRKFNDSUYwLCAxODMpLAorCUlOVENfSVJRKFNDSUYxLCAxODQpLCBJTlRDX0lSUShTQ0lGMSwgMTg1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMTg2KSwgSU5UQ19JUlEoU0NJRjEsIDE4NyksCisJSU5UQ19JUlEoU0NJRjIsIDE4OCksIElOVENfSVJRKFNDSUYyLCAxODkpLAorCUlOVENfSVJRKFNDSUYyLCAxOTApLCBJTlRDX0lSUShTQ0lGMiwgMTkxKSwKKwlJTlRDX0lSUShTQ0lGMywgMTkyKSwgSU5UQ19JUlEoU0NJRjMsIDE5MyksCisJSU5UQ19JUlEoU0NJRjMsIDE5NCksIElOVENfSVJRKFNDSUYzLCAxOTUpLAorCUlOVENfSVJRKFNDSUY0LCAxOTYpLCBJTlRDX0lSUShTQ0lGNCwgMTk3KSwKKwlJTlRDX0lSUShTQ0lGNCwgMTk4KSwgSU5UQ19JUlEoU0NJRjQsIDE5OSksCisJSU5UQ19JUlEoU0NJRjUsIDIwMCksIElOVENfSVJRKFNDSUY1LCAyMDEpLAorCUlOVENfSVJRKFNDSUY1LCAyMDIpLCBJTlRDX0lSUShTQ0lGNSwgMjAzKSwKKwlJTlRDX0lSUShTQ0lGNiwgMjA0KSwgSU5UQ19JUlEoU0NJRjYsIDIwNSksCisJSU5UQ19JUlEoU0NJRjYsIDIwNiksIElOVENfSVJRKFNDSUY2LCAyMDcpLAorCUlOVENfSVJRKFNDSUY3LCAyMDgpLCBJTlRDX0lSUShTQ0lGNywgMjA5KSwKKwlJTlRDX0lSUShTQ0lGNywgMjEwKSwgSU5UQ19JUlEoU0NJRjcsIDIxMSksCiAKIAlJTlRDX0lSUShETUFDMF9ETUlOVEEsIDIxMiksIElOVENfSVJRKERNQUM0X0RNSU5UNCwgMjE2KSwKIAlJTlRDX0lSUShETUFDNV9ETUlOVDUsIDIxNyksIElOVENfSVJRKERNQUM2X0RNSU5UNiwgMjE4KSwKIAlJTlRDX0lSUShETUFDN19ETUlOVDcsIDIxOSksCiAKLQlJTlRDX0lSUShSQ0FOMF9FUlMsIDIyOCksIElOVENfSVJRKFJDQU4wX09WUiwgMjI5KSwKLQlJTlRDX0lSUShSQ0FOMF9TTEUsIDIzMCksCi0JSU5UQ19JUlEoUkNBTjBfUk0wLCAyMzEpLCBJTlRDX0lSUShSQ0FOMF9STTEsIDIzMiksCisJSU5UQ19JUlEoUkNBTjAsIDIyOCksIElOVENfSVJRKFJDQU4wLCAyMjkpLAorCUlOVENfSVJRKFJDQU4wLCAyMzApLAorCUlOVENfSVJRKFJDQU4wLCAyMzEpLCBJTlRDX0lSUShSQ0FOMCwgMjMyKSwKIAotCUlOVENfSVJRKFJDQU4xX0VSUywgMjM0KSwgSU5UQ19JUlEoUkNBTjFfT1ZSLCAyMzUpLAotCUlOVENfSVJRKFJDQU4xX1NMRSwgMjM2KSwKLQlJTlRDX0lSUShSQ0FOMV9STTAsIDIzNyksIElOVENfSVJRKFJDQU4xX1JNMSwgMjM4KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM0KSwgSU5UQ19JUlEoUkNBTjEsIDIzNSksCisJSU5UQ19JUlEoUkNBTjEsIDIzNiksCisJSU5UQ19JUlEoUkNBTjEsIDIzNyksIElOVENfSVJRKFJDQU4xLCAyMzgpLAogCiAJSU5UQ19JUlEoU1NJMF9TU0lJLCAyNDQpLCBJTlRDX0lSUShTU0kxX1NTSUksIDI0NSksCiAKLQlJTlRDX0lSUShUTVIwX0NNSUEwLCAyNDYpLCBJTlRDX0lSUShUTVIwX0NNSUIwLCAyNDcpLAotCUlOVENfSVJRKFRNUjBfT1ZJMCwgMjQ4KSwKKwlJTlRDX0lSUShUTVIwLCAyNDYpLCBJTlRDX0lSUShUTVIwLCAyNDcpLAorCUlOVENfSVJRKFRNUjAsIDI0OCksCiAKLQlJTlRDX0lSUShUTVIxX0NNSUExLCAyNTIpLCBJTlRDX0lSUShUTVIxX0NNSUIxLCAyNTMpLAotCUlOVENfSVJRKFRNUjFfT1ZJMSwgMjU0KSwKLQorCUlOVENfSVJRKFRNUjEsIDI1MiksIElOVENfSVJRKFRNUjEsIDI1MyksCisJSU5UQ19JUlEoVE1SMSwgMjU0KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKE1UVTIwX0FCQ0QsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQpLAotCUlOVENfR1JPVVAoTVRVMjBfVkVGLCBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGKSwKLQotCUlOVENfR1JPVVAoTVRVMjFfQUIsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIpLAotCUlOVENfR1JPVVAoTVRVMjFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMjJfQUIsIE1UVTJfVEdJMkEsIE1UVTJfVEdJMkIpLAotCUlOVENfR1JPVVAoTVRVMjJfVlUsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUpLAotCUlOVENfR1JPVVAoTVRVMjNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFUyNF9BQkNELCBNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTI1X1VWVywgTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VyksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVAgKSwKLQotCUlOVENfR1JPVVAoSUlDMzAsIElJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLAotCQkgICBJSUMzMF9URUkpLAotCUlOVENfR1JPVVAoSUlDMzEsIElJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLAotCQkgICBJSUMzMV9URUkpLAotCUlOVENfR1JPVVAoSUlDMzIsIElJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLAotCQkgICBJSUMzMl9URUkpLAotCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY0LCBTQ0lGNF9CUkksIFNDSUY0X0VSSSwgU0NJRjRfUlhJLCBTQ0lGNF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjUsIFNDSUY1X0JSSSwgU0NJRjVfRVJJLCBTQ0lGNV9SWEksIFNDSUY1X1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNiwgU0NJRjZfQlJJLCBTQ0lGNl9FUkksIFNDSUY2X1JYSSwgU0NJRjZfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY3LCBTQ0lGN19CUkksIFNDSUY3X0VSSSwgU0NJRjdfUlhJLCBTQ0lGN19UWEkpLAotCi0JSU5UQ19HUk9VUChSQ0FOMCwgUkNBTjBfRVJTLCBSQ0FOMF9PVlIsIFJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCQkgICBSQ0FOMF9TTEUpLAotCUlOVENfR1JPVVAoUkNBTjEsIFJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwKLQkJICAgUkNBTjFfU0xFKSwKLQotCUlOVENfR1JPVVAoVE1SMCwgVE1SMF9DTUlBMCwgVE1SMF9DTUlCMCwgVE1SMF9PVkkwKSwKLQlJTlRDX0dST1VQKFRNUjEsIFRNUjFfQ01JQTEsIFRNUjFfQ01JQjEsIFRNUjFfT1ZJMSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMjEyLDcgKzE1OCw3IEBACiAKIAl7IDB4ZmZmZTk4MDYsIDAsIDE2LCA0LCAvKiBJUFIwOSAqLyB7IFJUQywgV0RULCBJSUMzMCwgMCB9IH0sCiAJeyAweGZmZmU5ODA4LCAwLCAxNiwgNCwgLyogSVBSMTAgKi8geyBJSUMzMSwgSUlDMzIsIERNQUMwX0RNSU5UMCwgRE1BQzFfRE1JTlQxIH0gfSwKLQl7IDB4ZmZmZTk4MGEsIDAsIDE2LCA0LCAvKiBJUFIxMSAqLyB7IERNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLCBTQ0lGMCAsIFNDSUYxIH0gfSwKKwl7IDB4ZmZmZTk4MGEsIDAsIDE2LCA0LCAvKiBJUFIxMSAqLyB7IERNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLCBTQ0lGMCwgU0NJRjEgfSB9LAogCXsgMHhmZmZlOTgwYywgMCwgMTYsIDQsIC8qIElQUjEyICovIHsgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUgfSB9LAogCXsgMHhmZmZlOTgwZSwgMCwgMTYsIDQsIC8qIElQUjEzICovIHsgU0NJRjYsIFNDSUY3LCBETUFDMF9ETUlOVEEsIERNQUM0X0RNSU5UNCAgfSB9LAogCXsgMHhmZmZlOTgxMCwgMCwgMTYsIDQsIC8qIElQUjE0ICovIHsgRE1BQzVfRE1JTlQ1LCBETUFDNl9ETUlOVDYsIERNQUM3X0RNSU5UNywgMCB9IH0sCkBAIC0yMzQsNDIgKzE4MCw0MiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE4MSwgMTgyLCAxODMsIDE4MH0KKwkJLmlycXMJCT0geyAxODAsIDE4MCwgMTgwLCAxODAgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODUsIDE4NiwgMTg3LCAxODR9CisJCS5pcnFzCQk9IHsgMTg0LCAxODQsIDE4NCwgMTg0IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTg5LCAxODYsIDE4NywgMTg4fQorCQkuaXJxcwkJPSB7IDE4OCwgMTg4LCAxODgsIDE4OCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE5MywgMTk0LCAxOTUsIDE5Mn0KKwkJLmlycXMJCT0geyAxOTIsIDE5MiwgMTkyLCAxOTIgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmVhMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxOTYsIDE5OCwgMTk5LCAxOTZ9CisJCS5pcnFzCQk9IHsgMTk2LCAxOTYsIDE5NiwgMTk2IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjAxLCAyMDIsIDIwMywgMjAwfQorCQkuaXJxcwkJPSB7IDIwMCwgMjAwLCAyMDAsIDIwMCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWIwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIwNSwgMjA2LCAyMDcsIDIwNH0KKwkJLmlycXMJCT0geyAyMDQsIDIwNCwgMjA0LCAyMDQgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmViODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDksIDIxMCwgMjExLCAyMDh9CisJCS5pcnFzCQk9IHsgMjA4LCAyMDgsIDIwOCwgMjA4IH0KIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMjkwLDE3ICsyMzYsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDE1MywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAxNTQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMTUyLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwppbmRleCBlOThkYzQ0Li44MjBkZmIyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTSDcyMDMgYW5kIFNINzI2MyBTZXR1cAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDUwICsxOCwyNyBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCi0JRE1BQzBfREVJLCBETUFDMF9IRUksIERNQUMxX0RFSSwgRE1BQzFfSEVJLAotCURNQUMyX0RFSSwgRE1BQzJfSEVJLCBETUFDM19ERUksIERNQUMzX0hFSSwKLQlETUFDNF9ERUksIERNQUM0X0hFSSwgRE1BQzVfREVJLCBETUFDNV9IRUksCi0JRE1BQzZfREVJLCBETUFDNl9IRUksIERNQUM3X0RFSSwgRE1BQzdfSEVJLAorCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKIAlVU0IsIExDREMsIENNVDAsIENNVDEsIEJTQywgV0RULAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAorCisJTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKKwlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwgTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwKKwogCUFEQ19BREksCi0JSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksIElJQzMwX1RFSSwKLQlJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwgSUlDMzFfVEVJLAotCUlJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLCBJSUMzMl9URUksCi0JSUlDMzNfU1RQSSwgSUlDMzNfTkFLSSwgSUlDMzNfUlhJLCBJSUMzM19UWEksIElJQzMzX1RFSSwKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAotCVNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEksCi0JU1NVMF9TU0VSSSwgU1NVMF9TU1JYSSwgU1NVMF9TU1RYSSwKLQlTU1UxX1NTRVJJLCBTU1UxX1NTUlhJLCBTU1UxX1NTVFhJLAorCisJSUlDMzAsIElJQzMxLCBJSUMzMiwgSUlDMzMsCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisKKwlTU1UwLCBTU1UxLAorCiAJU1NJMF9TU0lJLCBTU0kxX1NTSUksIFNTSTJfU1NJSSwgU1NJM19TU0lJLAogCiAJLyogUk9NLURFQywgU0RISSwgU1JDLCBhbmQgSUVCIGFyZSBTSDcyNjMgc3BlY2lmaWMgKi8KLQlST01ERUNfSVNZLCBST01ERUNfSUVSUiwgUk9NREVDX0lBUkcsIFJPTURFQ19JU0VDLCBST01ERUNfSUJVRiwKLQlST01ERUNfSVJFQURZLAotCi0JRkxDVExfRkxTVEVJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxUUkVRMUksCi0KLQlTREhJMywgU0RISTAsIFNESEkxLAotCi0JUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCwKLQlSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsIFJDQU4wX1NMRSwKLQlSQ0FOMV9FUlMsIFJDQU4xX09WUiwgUkNBTjFfUk0wLCBSQ0FOMV9STTEsIFJDQU4xX1NMRSwKLQotCVNSQ19PVkYsIFNSQ19PREZJLCBTUkNfSURFSSwgSUVCSSwKKwlST01ERUMsIEZMQ1RMLCBTREhJLCBSVEMsIFJDQU4wLCBSQ0FOMSwKKwlTUkMsIElFQkksCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAotCU1UVTBfQUJDRCwgTVRVMF9WRUYsIE1UVTFfQUIsIE1UVTFfVlUsIE1UVTJfQUIsIE1UVTJfVlUsCi0JTVRVM19BQkNELCBNVFU0X0FCQ0QsCi0JSUlDMzAsIElJQzMxLCBJSUMzMiwgSUlDMzMsIFNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAotCVNTVTAsIFNTVTEsIFJPTURFQywgU0RISSwgRkxDVEwsIFJUQywgUkNBTjAsIFJDQU4xLCBTUkMKKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC03Myw3OSArNTAsODAgQEAKIAlJTlRDX0lSUShQSU5UMiwgODIpLCBJTlRDX0lSUShQSU5UMywgODMpLAogCUlOVENfSVJRKFBJTlQ0LCA4NCksIElOVENfSVJRKFBJTlQ1LCA4NSksCiAJSU5UQ19JUlEoUElOVDYsIDg2KSwgSU5UQ19JUlEoUElOVDcsIDg3KSwKLQlJTlRDX0lSUShETUFDMF9ERUksIDEwOCksIElOVENfSVJRKERNQUMwX0hFSSwgMTA5KSwKLQlJTlRDX0lSUShETUFDMV9ERUksIDExMiksIElOVENfSVJRKERNQUMxX0hFSSwgMTEzKSwKLQlJTlRDX0lSUShETUFDMl9ERUksIDExNiksIElOVENfSVJRKERNQUMyX0hFSSwgMTE3KSwKLQlJTlRDX0lSUShETUFDM19ERUksIDEyMCksIElOVENfSVJRKERNQUMzX0hFSSwgMTIxKSwKLQlJTlRDX0lSUShETUFDNF9ERUksIDEyNCksIElOVENfSVJRKERNQUM0X0hFSSwgMTI1KSwKLQlJTlRDX0lSUShETUFDNV9ERUksIDEyOCksIElOVENfSVJRKERNQUM1X0hFSSwgMTI5KSwKLQlJTlRDX0lSUShETUFDNl9ERUksIDEzMiksIElOVENfSVJRKERNQUM2X0hFSSwgMTMzKSwKLQlJTlRDX0lSUShETUFDN19ERUksIDEzNiksIElOVENfSVJRKERNQUM3X0hFSSwgMTM3KSwKKwlJTlRDX0lSUShETUFDMCwgMTA4KSwgSU5UQ19JUlEoRE1BQzAsIDEwOSksCisJSU5UQ19JUlEoRE1BQzEsIDExMiksIElOVENfSVJRKERNQUMxLCAxMTMpLAorCUlOVENfSVJRKERNQUMyLCAxMTYpLCBJTlRDX0lSUShETUFDMiwgMTE3KSwKKwlJTlRDX0lSUShETUFDMywgMTIwKSwgSU5UQ19JUlEoRE1BQzMsIDEyMSksCisJSU5UQ19JUlEoRE1BQzQsIDEyNCksIElOVENfSVJRKERNQUM0LCAxMjUpLAorCUlOVENfSVJRKERNQUM1LCAxMjgpLCBJTlRDX0lSUShETUFDNSwgMTI5KSwKKwlJTlRDX0lSUShETUFDNiwgMTMyKSwgSU5UQ19JUlEoRE1BQzYsIDEzMyksCisJSU5UQ19JUlEoRE1BQzcsIDEzNiksIElOVENfSVJRKERNQUM3LCAxMzcpLAogCUlOVENfSVJRKFVTQiwgMTQwKSwgSU5UQ19JUlEoTENEQywgMTQxKSwKIAlJTlRDX0lSUShDTVQwLCAxNDIpLCBJTlRDX0lSUShDTVQxLCAxNDMpLAogCUlOVENfSVJRKEJTQywgMTQ0KSwgSU5UQ19JUlEoV0RULCAxNDUpLAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDE0NiksIElOVENfSVJRKE1UVTJfVEdJMEIsIDE0NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTQ4KSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTQ5KSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxNTApLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDE1MSksIElOVENfSVJRKE1UVTJfVEdJMEYsIDE1MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTUzKSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTU0KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxNTUpLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxNTYpLAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDE1NyksIElOVENfSVJRKE1UVTJfVEdJMkIsIDE1OCksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTU5KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTYwKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxNjEpLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxNjIpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDE2MyksIElOVENfSVJRKE1UVTJfVEdJM0QsIDE2NCksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNDYpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE0NyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNDgpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE0OSksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE1MCksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE1MSksIElOVENfSVJRKE1UVTBfVkVGLCAxNTIpLAorCUlOVENfSVJRKE1UVTFfQUIsIDE1MyksIElOVENfSVJRKE1UVTFfQUIsIDE1NCksCisJSU5UQ19JUlEoTVRVMV9WVSwgMTU1KSwgSU5UQ19JUlEoTVRVMV9WVSwgMTU2KSwKKwlJTlRDX0lSUShNVFUyX0FCLCAxNTcpLCBJTlRDX0lSUShNVFUyX0FCLCAxNTgpLAorCUlOVENfSVJRKE1UVTJfVlUsIDE1OSksIElOVENfSVJRKE1UVTJfVlUsIDE2MCksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxNjEpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MiksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxNjMpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE2NCksCiAJSU5UQ19JUlEoTVRVMl9UQ0kzViwgMTY1KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxNjYpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxNjcpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE2OCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE2OSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxNjYpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE2NyksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxNjgpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE2OSksCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTcwKSwKIAlJTlRDX0lSUShBRENfQURJLCAxNzEpLAotCUlOVENfSVJRKElJQzMwX1NUUEksIDE3MiksIElOVENfSVJRKElJQzMwX05BS0ksIDE3MyksCi0JSU5UQ19JUlEoSUlDMzBfUlhJLCAxNzQpLCBJTlRDX0lSUShJSUMzMF9UWEksIDE3NSksCi0JSU5UQ19JUlEoSUlDMzBfVEVJLCAxNzYpLAotCUlOVENfSVJRKElJQzMxX1NUUEksIDE3NyksIElOVENfSVJRKElJQzMxX05BS0ksIDE3OCksCi0JSU5UQ19JUlEoSUlDMzFfUlhJLCAxNzkpLCBJTlRDX0lSUShJSUMzMV9UWEksIDE4MCksCi0JSU5UQ19JUlEoSUlDMzFfVEVJLCAxODEpLAotCUlOVENfSVJRKElJQzMyX1NUUEksIDE4MiksIElOVENfSVJRKElJQzMyX05BS0ksIDE4MyksCi0JSU5UQ19JUlEoSUlDMzJfUlhJLCAxODQpLCBJTlRDX0lSUShJSUMzMl9UWEksIDE4NSksCi0JSU5UQ19JUlEoSUlDMzJfVEVJLCAxODYpLAotCUlOVENfSVJRKElJQzMzX1NUUEksIDE4NyksIElOVENfSVJRKElJQzMzX05BS0ksIDE4OCksCi0JSU5UQ19JUlEoSUlDMzNfUlhJLCAxODkpLCBJTlRDX0lSUShJSUMzM19UWEksIDE5MCksCi0JSU5UQ19JUlEoSUlDMzNfVEVJLCAxOTEpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMTkyKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAxOTMpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMTk0KSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAxOTUpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMTk2KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAxOTcpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMTk4KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAxOTkpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMjAwKSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAyMDEpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMjAyKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAyMDMpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMjA0KSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAyMDUpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMjA2KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAyMDcpLAotCUlOVENfSVJRKFNTVTBfU1NFUkksIDIwOCksIElOVENfSVJRKFNTVTBfU1NSWEksIDIwOSksCi0JSU5UQ19JUlEoU1NVMF9TU1RYSSwgMjEwKSwKLQlJTlRDX0lSUShTU1UxX1NTRVJJLCAyMTEpLCBJTlRDX0lSUShTU1UxX1NTUlhJLCAyMTIpLAotCUlOVENfSVJRKFNTVTFfU1NUWEksIDIxMyksCisJSU5UQ19JUlEoSUlDMzAsIDE3MiksIElOVENfSVJRKElJQzMwLCAxNzMpLAorCUlOVENfSVJRKElJQzMwLCAxNzQpLCBJTlRDX0lSUShJSUMzMCwgMTc1KSwKKwlJTlRDX0lSUShJSUMzMCwgMTc2KSwKKwlJTlRDX0lSUShJSUMzMSwgMTc3KSwgSU5UQ19JUlEoSUlDMzEsIDE3OCksCisJSU5UQ19JUlEoSUlDMzEsIDE3OSksIElOVENfSVJRKElJQzMxLCAxODApLAorCUlOVENfSVJRKElJQzMxLCAxODEpLAorCUlOVENfSVJRKElJQzMyLCAxODIpLCBJTlRDX0lSUShJSUMzMiwgMTgzKSwKKwlJTlRDX0lSUShJSUMzMiwgMTg0KSwgSU5UQ19JUlEoSUlDMzIsIDE4NSksCisJSU5UQ19JUlEoSUlDMzIsIDE4NiksCisJSU5UQ19JUlEoSUlDMzMsIDE4NyksIElOVENfSVJRKElJQzMzLCAxODgpLAorCUlOVENfSVJRKElJQzMzLCAxODkpLCBJTlRDX0lSUShJSUMzMywgMTkwKSwKKwlJTlRDX0lSUShJSUMzMywgMTkxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTkyKSwgSU5UQ19JUlEoU0NJRjAsIDE5MyksCisJSU5UQ19JUlEoU0NJRjAsIDE5NCksIElOVENfSVJRKFNDSUYwLCAxOTUpLAorCUlOVENfSVJRKFNDSUYxLCAxOTYpLCBJTlRDX0lSUShTQ0lGMSwgMTk3KSwKKwlJTlRDX0lSUShTQ0lGMSwgMTk4KSwgSU5UQ19JUlEoU0NJRjEsIDE5OSksCisJSU5UQ19JUlEoU0NJRjIsIDIwMCksIElOVENfSVJRKFNDSUYyLCAyMDEpLAorCUlOVENfSVJRKFNDSUYyLCAyMDIpLCBJTlRDX0lSUShTQ0lGMiwgMjAzKSwKKwlJTlRDX0lSUShTQ0lGMywgMjA0KSwgSU5UQ19JUlEoU0NJRjMsIDIwNSksCisJSU5UQ19JUlEoU0NJRjMsIDIwNiksIElOVENfSVJRKFNDSUYzLCAyMDcpLAorCUlOVENfSVJRKFNTVTAsIDIwOCksIElOVENfSVJRKFNTVTAsIDIwOSksCisJSU5UQ19JUlEoU1NVMCwgMjEwKSwKKwlJTlRDX0lSUShTU1UxLCAyMTEpLCBJTlRDX0lSUShTU1UxLCAyMTIpLAorCUlOVENfSVJRKFNTVTEsIDIxMyksCiAJSU5UQ19JUlEoU1NJMF9TU0lJLCAyMTQpLCBJTlRDX0lSUShTU0kxX1NTSUksIDIxNSksCiAJSU5UQ19JUlEoU1NJMl9TU0lJLCAyMTYpLCBJTlRDX0lSUShTU0kzX1NTSUksIDIxNyksCi0JSU5UQ19JUlEoRkxDVExfRkxTVEVJLCAyMjQpLCBJTlRDX0lSUShGTENUTF9GTFRFTkRJLCAyMjUpLAotCUlOVENfSVJRKEZMQ1RMX0ZMVFJFUTBJLCAyMjYpLCBJTlRDX0lSUShGTENUTF9GTFRSRVExSSwgMjI3KSwKLQlJTlRDX0lSUShSVENfQVJNLCAyMzEpLCBJTlRDX0lSUShSVENfUFJELCAyMzIpLAotCUlOVENfSVJRKFJUQ19DVVAsIDIzMyksCi0JSU5UQ19JUlEoUkNBTjBfRVJTLCAyMzQpLCBJTlRDX0lSUShSQ0FOMF9PVlIsIDIzNSksCi0JSU5UQ19JUlEoUkNBTjBfUk0wLCAyMzYpLCBJTlRDX0lSUShSQ0FOMF9STTEsIDIzNyksCi0JSU5UQ19JUlEoUkNBTjBfU0xFLCAyMzgpLAotCUlOVENfSVJRKFJDQU4xX0VSUywgMjM5KSwgSU5UQ19JUlEoUkNBTjFfT1ZSLCAyNDApLAotCUlOVENfSVJRKFJDQU4xX1JNMCwgMjQxKSwgSU5UQ19JUlEoUkNBTjFfUk0xLCAyNDIpLAotCUlOVENfSVJRKFJDQU4xX1NMRSwgMjQzKSwKKwlJTlRDX0lSUShGTENUTCwgMjI0KSwgSU5UQ19JUlEoRkxDVEwsIDIyNSksCisJSU5UQ19JUlEoRkxDVEwsIDIyNiksIElOVENfSVJRKEZMQ1RMLCAyMjcpLAorCUlOVENfSVJRKFJUQywgMjMxKSwgSU5UQ19JUlEoUlRDLCAyMzIpLAorCUlOVENfSVJRKFJUQywgMjMzKSwKKwlJTlRDX0lSUShSQ0FOMCwgMjM0KSwgSU5UQ19JUlEoUkNBTjAsIDIzNSksCisJSU5UQ19JUlEoUkNBTjAsIDIzNiksIElOVENfSVJRKFJDQU4wLCAyMzcpLAorCUlOVENfSVJRKFJDQU4wLCAyMzgpLAorCUlOVENfSVJRKFJDQU4xLCAyMzkpLCBJTlRDX0lSUShSQ0FOMSwgMjQwKSwKKwlJTlRDX0lSUShSQ0FOMSwgMjQxKSwgSU5UQ19JUlEoUkNBTjEsIDI0MiksCisJSU5UQ19JUlEoUkNBTjEsIDI0MyksCiAKIAkvKiBTSDcyNjMtc3BlY2lmaWMgdHJhc2ggKi8KICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzCi0JSU5UQ19JUlEoUk9NREVDX0lTWSwgMjE4KSwgSU5UQ19JUlEoUk9NREVDX0lFUlIsIDIxOSksCi0JSU5UQ19JUlEoUk9NREVDX0lBUkcsIDIyMCksIElOVENfSVJRKFJPTURFQ19JU0VDLCAyMjEpLAotCUlOVENfSVJRKFJPTURFQ19JQlVGLCAyMjIpLCBJTlRDX0lSUShST01ERUNfSVJFQURZLCAyMjMpLAorCUlOVENfSVJRKFJPTURFQywgMjE4KSwgSU5UQ19JUlEoUk9NREVDLCAyMTkpLAorCUlOVENfSVJRKFJPTURFQywgMjIwKSwgSU5UQ19JUlEoUk9NREVDLCAyMjEpLAorCUlOVENfSVJRKFJPTURFQywgMjIyKSwgSU5UQ19JUlEoUk9NREVDLCAyMjMpLAogCi0JSU5UQ19JUlEoU0RISTMsIDIyOCksIElOVENfSVJRKFNESEkwLCAyMjkpLCBJTlRDX0lSUShTREhJMSwgMjMwKSwKKwlJTlRDX0lSUShTREhJLCAyMjgpLCBJTlRDX0lSUShTREhJLCAyMjkpLAorCUlOVENfSVJRKFNESEksIDIzMCksCiAKLQlJTlRDX0lSUShTUkNfT1ZGLCAyNDQpLCBJTlRDX0lSUShTUkNfT0RGSSwgMjQ1KSwKLQlJTlRDX0lSUShTUkNfSURFSSwgMjQ2KSwKKwlJTlRDX0lSUShTUkMsIDI0NCksIElOVENfSVJRKFNSQywgMjQ1KSwKKwlJTlRDX0lSUShTUkMsIDI0NiksCiAKIAlJTlRDX0lSUShJRUJJLCAyNDcpLAogI2VuZGlmCkBAIC0xNTQsNTAgKzEzMiw2IEBACiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfREVJLCBETUFDMF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSSwgRE1BQzFfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUksIERNQUMyX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMywgRE1BQzNfREVJLCBETUFDM19IRUkpLAotCUlOVENfR1JPVVAoRE1BQzQsIERNQUM0X0RFSSwgRE1BQzRfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM1LCBETUFDNV9ERUksIERNQUM1X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNiwgRE1BQzZfREVJLCBETUFDNl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzcsIERNQUM3X0RFSSwgRE1BQzdfSEVJKSwKLQlJTlRDX0dST1VQKE1UVTBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUwX1ZFRiwgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiksCi0JSU5UQ19HUk9VUChNVFUxX0FCLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCKSwKLQlJTlRDX0dST1VQKE1UVTFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyX1ZVLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVKSwKLQlJTlRDX0dST1VQKE1UVTNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoSUlDMzAsIElJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLAotCQkgICBJSUMzMF9URUkpLAotCUlOVENfR1JPVVAoSUlDMzEsIElJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLAotCQkgICBJSUMzMV9URUkpLAotCUlOVENfR1JPVVAoSUlDMzIsIElJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLAotCQkgICBJSUMzMl9URUkpLAotCUlOVENfR1JPVVAoSUlDMzMsIElJQzMzX1NUUEksIElJQzMzX05BS0ksIElJQzMzX1JYSSwgSUlDMzNfVFhJLAotCQkgICBJSUMzM19URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjMsIFNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSksCi0JSU5UQ19HUk9VUChTU1UwLCBTU1UwX1NTRVJJLCBTU1UwX1NTUlhJLCBTU1UwX1NTVFhJKSwKLQlJTlRDX0dST1VQKFNTVTEsIFNTVTFfU1NFUkksIFNTVTFfU1NSWEksIFNTVTFfU1NUWEkpLAotCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxUUkVRMEksCi0JCSAgIEZMQ1RMX0ZMVFJFUTFJKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCksCi0JSU5UQ19HUk9VUChSQ0FOMCwgUkNBTjBfRVJTLCBSQ0FOMF9PVlIsIFJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCQkgICBSQ0FOMF9TTEUpLAotCUlOVENfR1JPVVAoUkNBTjEsIFJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwKLQkJICAgUkNBTjFfU0xFKSwKLQotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMKLQlJTlRDX0dST1VQKFJPTURFQywgUk9NREVDX0lTWSwgUk9NREVDX0lFUlIsIFJPTURFQ19JQVJHLAotCQkgICBST01ERUNfSVNFQywgUk9NREVDX0lCVUYsIFJPTURFQ19JUkVBRFkpLAotCUlOVENfR1JPVVAoU0RISSwgU0RISTMsIFNESEkwLCBTREhJMSksCi0JSU5UQ19HUk9VUChTUkMsIFNSQ19PVkYsIFNSQ19PREZJLCBTUkNfSURFSSksCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yNDIsMjIgKzE3NiwyMiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAxOTMsIDE5NCwgMTk1LCAxOTIgfSwKKwkJLmlycXMJCT0gIHsgMTkyLCAxOTIsIDE5MiwgMTkyIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAxOTcsIDE5OCwgMTk5LCAxOTYgfSwKKwkJLmlycXMJCT0gIHsgMTk2LCAxOTYsIDE5NiwgMTk2IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTkwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyMDEsIDIwMiwgMjAzLCAyMDAgfSwKKwkJLmlycXMJCT0gIHsgMjAwLCAyMDAsIDIwMCwgMjAwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyMDUsIDIwNiwgMjA3LCAyMDQgfSwKKwkJLmlycXMJCT0gIHsgMjA0LCAyMDQsIDIwNCwgMjA0IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTI3OCwxNyArMjEyLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIzMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKaW5kZXggZTZkNGVjNC4uYzQ2YTgzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDcyMDYgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBZb3NoaW5vcmkgU2F0bworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOSwzNCArMjAsMjMgQEAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKIAlBRENfQURJMCwgQURDX0FESTEsCi0JRE1BQzBfREVJLCBETUFDMF9IRUksIERNQUMxX0RFSSwgRE1BQzFfSEVJLAotCURNQUMyX0RFSSwgRE1BQzJfSEVJLCBETUFDM19ERUksIERNQUMzX0hFSSwKLQlETUFDNF9ERUksIERNQUM0X0hFSSwgRE1BQzVfREVJLCBETUFDNV9IRUksCi0JRE1BQzZfREVJLCBETUFDNl9IRUksIERNQUM3X0RFSSwgRE1BQzdfSEVJLAotCUNNVDAsIENNVDEsIEJTQywgV0RULAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCi0JUE9FMl9PRUkxLCBQT0UyX09FSTIsCi0JTVRVMlNfVEdJM0EsIE1UVTJTX1RHSTNCLCBNVFUyU19UR0kzQywgTVRVMlNfVEdJM0QsIE1UVTJTX1RDSTNWLAotCU1UVTJTX1RHSTRBLCBNVFUyU19UR0k0QiwgTVRVMlNfVEdJNEMsIE1UVTJTX1RHSTRELCBNVFUyU19UQ0k0ViwKLQlNVFUyU19UR0k1VSwgTVRVMlNfVEdJNVYsIE1UVTJTX1RHSTVXLAotCVBPRTJfT0VJMywKLQlJSUMzX1NUUEksIElJQzNfTkFLSSwgSUlDM19SWEksIElJQzNfVFhJLCBJSUMzX1RFSSwKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAotCVNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEksCiAKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAorCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKKwogCU1UVTBfQUJDRCwgTVRVMF9WRUYsIE1UVTFfQUIsIE1UVTFfVlUsIE1UVTJfQUIsIE1UVTJfVlUsCiAJTVRVM19BQkNELCBNVFU0X0FCQ0QsIE1UVTUsIFBPRTJfMTIsIE1UVTNTX0FCQ0QsIE1UVTRTX0FCQ0QsIE1UVTVTLAotCUlJQzMsIFNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAorCUlJQzMsCisKKwlDTVQwLCBDTVQxLCBCU0MsIFdEVCwKKworCU1UVTJfVENJM1YsIE1UVTJfVENJNFYsIE1UVTJTX1RDSTNWLCBNVFUyU19UQ0k0ViwKKworCVBPRTJfT0VJMywKKworCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyAqLworCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU5LDg2ICs0OSw1OCBAQAogCUlOVENfSVJRKFBJTlQ0LCA4NCksIElOVENfSVJRKFBJTlQ1LCA4NSksCiAJSU5UQ19JUlEoUElOVDYsIDg2KSwgSU5UQ19JUlEoUElOVDcsIDg3KSwKIAlJTlRDX0lSUShBRENfQURJMCwgOTIpLCBJTlRDX0lSUShBRENfQURJMSwgOTYpLAotCUlOVENfSVJRKERNQUMwX0RFSSwgMTA4KSwgSU5UQ19JUlEoRE1BQzBfSEVJLCAxMDkpLAotCUlOVENfSVJRKERNQUMxX0RFSSwgMTEyKSwgSU5UQ19JUlEoRE1BQzFfSEVJLCAxMTMpLAotCUlOVENfSVJRKERNQUMyX0RFSSwgMTE2KSwgSU5UQ19JUlEoRE1BQzJfSEVJLCAxMTcpLAotCUlOVENfSVJRKERNQUMzX0RFSSwgMTIwKSwgSU5UQ19JUlEoRE1BQzNfSEVJLCAxMjEpLAotCUlOVENfSVJRKERNQUM0X0RFSSwgMTI0KSwgSU5UQ19JUlEoRE1BQzRfSEVJLCAxMjUpLAotCUlOVENfSVJRKERNQUM1X0RFSSwgMTI4KSwgSU5UQ19JUlEoRE1BQzVfSEVJLCAxMjkpLAotCUlOVENfSVJRKERNQUM2X0RFSSwgMTMyKSwgSU5UQ19JUlEoRE1BQzZfSEVJLCAxMzMpLAotCUlOVENfSVJRKERNQUM3X0RFSSwgMTM2KSwgSU5UQ19JUlEoRE1BQzdfSEVJLCAxMzcpLAorCUlOVENfSVJRKERNQUMwLCAxMDgpLCBJTlRDX0lSUShETUFDMCwgMTA5KSwKKwlJTlRDX0lSUShETUFDMSwgMTEyKSwgSU5UQ19JUlEoRE1BQzEsIDExMyksCisJSU5UQ19JUlEoRE1BQzIsIDExNiksIElOVENfSVJRKERNQUMyLCAxMTcpLAorCUlOVENfSVJRKERNQUMzLCAxMjApLCBJTlRDX0lSUShETUFDMywgMTIxKSwKKwlJTlRDX0lSUShETUFDNCwgMTI0KSwgSU5UQ19JUlEoRE1BQzQsIDEyNSksCisJSU5UQ19JUlEoRE1BQzUsIDEyOCksIElOVENfSVJRKERNQUM1LCAxMjkpLAorCUlOVENfSVJRKERNQUM2LCAxMzIpLCBJTlRDX0lSUShETUFDNiwgMTMzKSwKKwlJTlRDX0lSUShETUFDNywgMTM2KSwgSU5UQ19JUlEoRE1BQzcsIDEzNyksCiAJSU5UQ19JUlEoQ01UMCwgMTQwKSwgSU5UQ19JUlEoQ01UMSwgMTQ0KSwKIAlJTlRDX0lSUShCU0MsIDE0OCksIElOVENfSVJRKFdEVCwgMTUyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAxNTYpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAxNTcpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDE1OCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDE1OSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMTYwKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBFLCAxNjEpLCBJTlRDX0lSUShNVFUyX1RHSTBGLCAxNjIpLAotCUlOVENfSVJRKE1UVTJfVEdJMUEsIDE2NCksIElOVENfSVJRKE1UVTJfVEdJMUIsIDE2NSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxViwgMTY4KSwgSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMTY5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTJBLCAxNzIpLCBJTlRDX0lSUShNVFUyX1RHSTJCLCAxNzMpLAotCUlOVENfSVJRKE1UVTJfVENJMlYsIDE3NiksIElOVENfSVJRKE1UVTJfVENJMlUsIDE3NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQSwgMTgwKSwgSU5UQ19JUlEoTVRVMl9UR0kzQiwgMTgxKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNDLCAxODIpLCBJTlRDX0lSUShNVFUyX1RHSTNELCAxODMpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTU2KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNTcpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTU4KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNTkpLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNjApLCBJTlRDX0lSUShNVFUwX1ZFRiwgMTYxKSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTYyKSwKKwlJTlRDX0lSUShNVFUxX0FCLCAxNjQpLCBJTlRDX0lSUShNVFUxX0FCLCAxNjUpLAorCUlOVENfSVJRKE1UVTFfVlUsIDE2OCksIElOVENfSVJRKE1UVTFfVlUsIDE2OSksCisJSU5UQ19JUlEoTVRVMl9BQiwgMTcyKSwgSU5UQ19JUlEoTVRVMl9BQiwgMTczKSwKKwlJTlRDX0lSUShNVFUyX1ZVLCAxNzYpLCBJTlRDX0lSUShNVFUyX1ZVLCAxNzcpLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTgwKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxODEpLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTgyKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxODMpLAogCUlOVENfSVJRKE1UVTJfVENJM1YsIDE4NCksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMTg4KSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMTg5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAxOTApLCBJTlRDX0lSUShNVFUyX1RHSTRELCAxOTEpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTg4KSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxODkpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTkwKSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxOTEpLAogCUlOVENfSVJRKE1UVTJfVENJNFYsIDE5MiksCi0JSU5UQ19JUlEoTVRVMl9UR0k1VSwgMTk2KSwgSU5UQ19JUlEoTVRVMl9UR0k1ViwgMTk3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTVXLCAxOTgpLAotCUlOVENfSVJRKFBPRTJfT0VJMSwgMjAwKSwgSU5UQ19JUlEoUE9FMl9PRUkyLCAyMDEpLAotCUlOVENfSVJRKE1UVTJTX1RHSTNBLCAyMDQpLCBJTlRDX0lSUShNVFUyU19UR0kzQiwgMjA1KSwKLQlJTlRDX0lSUShNVFUyU19UR0kzQywgMjA2KSwgSU5UQ19JUlEoTVRVMlNfVEdJM0QsIDIwNyksCisJSU5UQ19JUlEoTVRVNSwgMTk2KSwgSU5UQ19JUlEoTVRVNSwgMTk3KSwKKwlJTlRDX0lSUShNVFU1LCAxOTgpLAorCUlOVENfSVJRKFBPRTJfMTIsIDIwMCksIElOVENfSVJRKFBPRTJfMTIsIDIwMSksCisJSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA0KSwgSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA1KSwKKwlJTlRDX0lSUShNVFUzU19BQkNELCAyMDYpLCBJTlRDX0lSUShNVFUzU19BQkNELCAyMDcpLAogCUlOVENfSVJRKE1UVTJTX1RDSTNWLCAyMDgpLAotCUlOVENfSVJRKE1UVTJTX1RHSTRBLCAyMTIpLCBJTlRDX0lSUShNVFUyU19UR0k0QiwgMjEzKSwKLQlJTlRDX0lSUShNVFUyU19UR0k0QywgMjE0KSwgSU5UQ19JUlEoTVRVMlNfVEdJNEQsIDIxNSksCisJSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjEyKSwgSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjEzKSwKKwlJTlRDX0lSUShNVFU0U19BQkNELCAyMTQpLCBJTlRDX0lSUShNVFU0U19BQkNELCAyMTUpLAogCUlOVENfSVJRKE1UVTJTX1RDSTRWLCAyMTYpLAotCUlOVENfSVJRKE1UVTJTX1RHSTVVLCAyMjApLCBJTlRDX0lSUShNVFUyU19UR0k1ViwgMjIxKSwKLQlJTlRDX0lSUShNVFUyU19UR0k1VywgMjIyKSwKKwlJTlRDX0lSUShNVFU1UywgMjIwKSwgSU5UQ19JUlEoTVRVNVMsIDIyMSksCisJSU5UQ19JUlEoTVRVNVMsIDIyMiksCiAJSU5UQ19JUlEoUE9FMl9PRUkzLCAyMjQpLAotCUlOVENfSVJRKElJQzNfU1RQSSwgMjI4KSwgSU5UQ19JUlEoSUlDM19OQUtJLCAyMjkpLAotCUlOVENfSVJRKElJQzNfUlhJLCAyMzApLCBJTlRDX0lSUShJSUMzX1RYSSwgMjMxKSwKLQlJTlRDX0lSUShJSUMzX1RFSSwgMjMyKSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDI0MCksIElOVENfSVJRKFNDSUYwX0VSSSwgMjQxKSwKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDI0MiksIElOVENfSVJRKFNDSUYwX1RYSSwgMjQzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDI0NCksIElOVENfSVJRKFNDSUYxX0VSSSwgMjQ1KSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDI0NiksIElOVENfSVJRKFNDSUYxX1RYSSwgMjQ3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDI0OCksIElOVENfSVJRKFNDSUYyX0VSSSwgMjQ5KSwKLQlJTlRDX0lSUShTQ0lGMl9SWEksIDI1MCksIElOVENfSVJRKFNDSUYyX1RYSSwgMjUxKSwKLQlJTlRDX0lSUShTQ0lGM19CUkksIDI1MiksIElOVENfSVJRKFNDSUYzX0VSSSwgMjUzKSwKLQlJTlRDX0lSUShTQ0lGM19SWEksIDI1NCksIElOVENfSVJRKFNDSUYzX1RYSSwgMjU1KSwKKwlJTlRDX0lSUShJSUMzLCAyMjgpLCBJTlRDX0lSUShJSUMzLCAyMjkpLAorCUlOVENfSVJRKElJQzMsIDIzMCksIElOVENfSVJRKElJQzMsIDIzMSksCisJSU5UQ19JUlEoSUlDMywgMjMyKSwKKwlJTlRDX0lSUShTQ0lGMCwgMjQwKSwgSU5UQ19JUlEoU0NJRjAsIDI0MSksCisJSU5UQ19JUlEoU0NJRjAsIDI0MiksIElOVENfSVJRKFNDSUYwLCAyNDMpLAorCUlOVENfSVJRKFNDSUYxLCAyNDQpLCBJTlRDX0lSUShTQ0lGMSwgMjQ1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMjQ2KSwgSU5UQ19JUlEoU0NJRjEsIDI0NyksCisJSU5UQ19JUlEoU0NJRjIsIDI0OCksIElOVENfSVJRKFNDSUYyLCAyNDkpLAorCUlOVENfSVJRKFNDSUYyLCAyNTApLCBJTlRDX0lSUShTQ0lGMiwgMjUxKSwKKwlJTlRDX0lSUShTQ0lGMywgMjUyKSwgSU5UQ19JUlEoU0NJRjMsIDI1MyksCisJSU5UQ19JUlEoU0NJRjMsIDI1NCksIElOVENfSVJRKFNDSUYzLCAyNTUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RFSSwgRE1BQzBfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ERUksIERNQUMxX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQzJfREVJLCBETUFDMl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzMsIERNQUMzX0RFSSwgRE1BQzNfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM0LCBETUFDNF9ERUksIERNQUM0X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNSwgRE1BQzVfREVJLCBETUFDNV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzYsIERNQUM2X0RFSSwgRE1BQzZfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM3LCBETUFDN19ERUksIERNQUM3X0hFSSksCi0JSU5UQ19HUk9VUChNVFUwX0FCQ0QsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQpLAotCUlOVENfR1JPVVAoTVRVMF9WRUYsIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYpLAotCUlOVENfR1JPVVAoTVRVMV9BQiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiksCi0JSU5UQ19HUk9VUChNVFUxX1ZVLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVKSwKLQlJTlRDX0dST1VQKE1UVTJfQUIsIE1UVTJfVEdJMkEsIE1UVTJfVEdJMkIpLAotCUlOVENfR1JPVVAoTVRVMl9WVSwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSksCi0JSU5UQ19HUk9VUChNVFUzX0FCQ0QsIE1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVNF9BQkNELCBNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTUsIE1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcpLAotCUlOVENfR1JPVVAoUE9FMl8xMiwgUE9FMl9PRUkxLCBQT0UyX09FSTIpLAotCUlOVENfR1JPVVAoTVRVM1NfQUJDRCwgTVRVMlNfVEdJM0EsIE1UVTJTX1RHSTNCLAotCQkgICBNVFUyU19UR0kzQywgTVRVMlNfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVNFNfQUJDRCwgTVRVMlNfVEdJNEEsIE1UVTJTX1RHSTRCLAotCQkgICBNVFUyU19UR0k0QywgTVRVMlNfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVNVMsIE1UVTJTX1RHSTVVLCBNVFUyU19UR0k1ViwgTVRVMlNfVEdJNVcpLAotCUlOVENfR1JPVVAoSUlDMywgSUlDM19TVFBJLCBJSUMzX05BS0ksIElJQzNfUlhJLCBJSUMzX1RYSSwgSUlDM19URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjMsIFNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTc0LDIyICsxMzYsMjIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZmU4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQxLCAyNDIsIDI0MywgMjQwIH0sCisJCS5pcnFzCQk9IHsgMjQwLCAyNDAsIDI0MCwgMjQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDUsIDI0NiwgMjQ3LCAyNDQgfSwKKwkJLmlycXMJCT0geyAyNDQsIDI0NCwgMjQ0LCAyNDQgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0OSwgMjUwLCAyNTEsIDI0OCB9LAorCQkuaXJxcwkJPSB7IDI0OCwgMjQ4LCAyNDgsIDI0OCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjUzLCAyNTQsIDI1NSwgMjUyIH0sCisJCS5pcnFzCQk9IHsgMjUyLCAyNTIsIDI1MiwgMjUyIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IGUwN2M2OWUuLmVjYWIyNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtNCw2ICs0LDggQEAKIAogb2JqLXkJOj0gZXgubyBwcm9iZS5vIGVudHJ5Lm8gc2V0dXAtc2gzLm8KIAorb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkJKz0gc3dzdXNwLm8KKwogIyBDUFUgc3VidHlwZSBzZXR1cAogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkJKz0gc2V0dXAtc2g3NzA1Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpCSs9IHNldHVwLXNoNzcweC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggYjQxMDZkMC4uNTVkYTBmZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxjcHUvbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAhIE5PVEU6CiAhIEdOVSBhcyAoYXMgb2YgMi45LjEpIGNoYW5nZXMgYmYvcyBpbnRvIGJ0L3MgYW5kIGJyYSwgd2hlbiB0aGUgYWRkcmVzcwpAQCAtMTg3LDQ0ICsxODgsMzUgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQogCS8qIFVud2luZCB0aGUgc3RhY2sgYW5kIGptcCB0byB0aGUgZGVidWcgZW50cnkgKi8KIEVOVFJZKHNoX2Jpb3NfaGFuZGxlcikKLQltb3YubAlAcjE1KywgcjAKLQltb3YubAlAcjE1KywgcjEKLQltb3YubAlAcjE1KywgcjIKLQltb3YubAlAcjE1KywgcjMKLQltb3YubAlAcjE1KywgcjQKLQltb3YubAlAcjE1KywgcjUKLQltb3YubAlAcjE1KywgcjYKLQltb3YubAlAcjE1KywgcjcKLQlzdGMJc3IsIHI4Ci0JbW92LmwJMWYsIHI5CQkJISBCTCA9MSwgUkI9MSwgSU1BU0s9MHgwRgotCW9yCXI5LCByOAotCWxkYwlyOCwgc3IJCQkhIGhlcmUsIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYmFuawotCW1vdi5sCUByMTUrLCByOAotCW1vdi5sCUByMTUrLCByOQotCW1vdi5sCUByMTUrLCByMTAKLQltb3YubAlAcjE1KywgcjExCi0JbW92LmwJQHIxNSssIHIxMgotCW1vdi5sCUByMTUrLCByMTMKLQltb3YubAlAcjE1KywgcjE0Ci0JbW92LmwJQHIxNSssIGswCi0JbGRjLmwJQHIxNSssIHNwYwotCWxkcy5sCUByMTUrLCBwcgotCW1vdi5sCUByMTUrLCBrMQotCWxkYy5sCUByMTUrLCBnYnIKLQlsZHMubAlAcjE1KywgbWFjaAotCWxkcy5sCUByMTUrLCBtYWNsCi0JbW92CWswLCByMTUKKwltb3YubAkxZiwgcjgKKwlic3IJcmVzdG9yZV9yZWdzCisJIG5vcAorCisJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgorCW1vdglrNCwgcjE1CiAJIQogCW1vdi5sCTJmLCBrMAogCW1vdi5sCUBrMCwgazAKIAlqbXAJQGswCi0JIGxkYwlrMSwgc3NyCisJIGxkYwlrMywgc3NyCiAJLmFsaWduCTIKIDE6CS5sb25nCTB4MzAwMDAwZjAKIDI6CS5sb25nCWdkYl92YnJfdmVjdG9yCiAjZW5kaWYgLyogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgKi8KIAotcmVzdG9yZV9hbGw6CishIHJlc3RvcmVfcmVncygpCishIC0gcmVzdG9yZSByMCwgcjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjcgZnJvbSB0aGUgc3RhY2sKKyEgLSBzd2l0Y2ggYmFuaworISAtIHJlc3RvcmUgcjgsIHI5LCByMTAsIHIxMSwgcjEyLCByMTMsIHIxNCwgcjE1IGZyb20gdGhlIHN0YWNrCishIC0gcmVzdG9yZSBzcGMsIHByKiwgc3NyLCBnYnIsIG1hY2gsIG1hY2wsIHNraXAgZGVmYXVsdCB0cmEKKyEgazIgcmV0dXJucyBvcmlnaW5hbCBwcgorISBrMyByZXR1cm5zIG9yaWdpbmFsIHNyCishIGs0IHJldHVybnMgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgorISByOCBwYXNzZXMgU1IgYml0bWFzaywgb3ZlcndyaXR0ZW4gd2l0aCByZXN0b3JlZCBkYXRhIG9uIHJldHVybgorISByOSB0cmFzaGVkCishIEJMPTAgb24gZW50cnksIG9uIGV4aXQgQkw9MSAoZGVwZW5kaW5nIG9uIHI4KS4KKworRU5UUlkocmVzdG9yZV9yZWdzKQogCW1vdi5sCUByMTUrLCByMAogCW1vdi5sCUByMTUrLCByMQogCW1vdi5sCUByMTUrLCByMgpAQCAtMjM0LDEwICsyMjYsOSBAQAogCW1vdi5sCUByMTUrLCByNgogCW1vdi5sCUByMTUrLCByNwogCSEKLQlzdGMJc3IsIHI4Ci0JbW92LmwJN2YsIHI5Ci0Jb3IJcjksIHI4CQkJISBCTCA9MSwgUkI9MQotCWxkYwlyOCwgc3IJCQkhIGhlcmUsIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYmFuaworCXN0YwlzciwgcjkKKwlvcglyOCwgcjkKKwlsZGMJcjksIHNyCiAJIQogCW1vdi5sCUByMTUrLCByOAogCW1vdi5sCUByMTUrLCByOQpAQCAtMjQ4LDEyICsyMzksMjAgQEAKIAltb3YubAlAcjE1KywgcjE0CiAJbW92LmwJQHIxNSssIGs0CQkhIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIKIAlsZGMubAlAcjE1Kywgc3BjCi0JbGRzLmwJQHIxNSssIHByCisJbW92LmwJQHIxNSssIGsyCQkhIG9yaWdpbmFsIFBSCiAJbW92LmwJQHIxNSssIGszCQkhIG9yaWdpbmFsIFNSCiAJbGRjLmwJQHIxNSssIGdicgogCWxkcy5sCUByMTUrLCBtYWNoCiAJbGRzLmwJQHIxNSssIG1hY2wKLQlhZGQJIzQsIHIxNQkJCSEgU2tpcCBzeXNjYWxsIG51bWJlcgorCXJ0cworCSBhZGQJIzQsIHIxNQkJCSEgU2tpcCBzeXNjYWxsIG51bWJlcgorCityZXN0b3JlX2FsbDoKKwltb3YubAk3ZiwgcjgKKwlic3IJcmVzdG9yZV9yZWdzCisJIG5vcAorCisJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgogCSEKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAJbW92LmwJQHIxNSssIGswCQkhIERTUCBtb2RlIG1hcmtlcgpAQCAtMjk0LDcgKzI5Myw3IEBACiAJbW92CSMweGYwLCBrMQogCWV4dHUuYglrMSwgazEKIAlub3QJazEsIGsxCi0JYW5kCWsxLCBrMgkJCSEgTWFzayBvcmlnbmFsIFNSIHZhbHVlCisJYW5kCWsxLCBrMgkJCSEgTWFzayBvcmlnaW5hbCBTUiB2YWx1ZQogCSEKIAltb3YJazMsIGswCQkJISBDYWxjdWxhdGUgSU1BU0stYml0cwogCXNobHIyCWswCkBAIC0zMTMsNyArMzEyLDYgQEAKIAltb3YJIzAsIGsxCiAJbW92LmIJazEsIEBrMAogI2VuZGlmCi0JbW92LmwJQHIxNSssIGsyCQkhIHJlc3RvcmUgRVhQRVZUCiAJbW92CWs0LCByMTUKIAlydGUKIAkgbm9wCkBAIC0zMzYsODEgKzMzNCw1NSBAQAogRU5UUlkodmJyX2Jhc2UpCiAJLmxvbmcJMAogIQorISAweDEwMDogR2VuZXJhbCBleGNlcHRpb24gdmVjdG9yCishCiAJLmJhbGlnbiAJMjU2LDAsMjU2CiBnZW5lcmFsX2V4Y2VwdGlvbjoKLQltb3YubAkxZiwgazIKLQltb3YubAkyZiwgazMKLSNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMwotCW1vdi5sCUBrMiwgazIKKyNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMKKwlicmEJaGFuZGxlX2V4Y2VwdGlvbgorCSBzdHMJcHIsIGszCQkhIHNhdmUgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKyNlbHNlCisJbW92LmwJMWYsIGs0CisJbW92LmwJQGs0LCBrNAogCiAJISBJcyBFWFBFVlQgbGFyZ2VyIHRoYW4gMHg4MDA/CiAJbW92CSMweDgsIGswCiAJc2hsbDgJazAKLQljbXAvaHMJazAsIGsyCisJY21wL2hzCWswLCBrNAogCWJmCTBmCiAKIAkhIHRoZW4gYWRkIDB4NTgwIChrMiBpcyAweGQ4MCBvciAweGRhMCkKIAltb3YJIzB4NTgsIGswCiAJc2hsbDIJazAKIAlzaGxsMglrMAotCWFkZAlrMCwgazIKKwlhZGQJazAsIGs0CiAwOgotCWJyYQloYW5kbGVfZXhjZXB0aW9uCisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAogCSBub3AKLSNlbHNlCi0JYnJhCWhhbmRsZV9leGNlcHRpb24KLQkgbW92LmwJQGsyLCBrMgorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YJCWs0LCBrMgkJISBrZWVwIHZlY3RvciBpbiBrMgorCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG5vcAorCisJYnJhCWhhbmRsZV9leGNlcHRpb25fc3BlY2lhbAorCSBub3AKKworCS5hbGlnbgkyCisxOgkubG9uZwlFWFBFVlQKICNlbmRpZgotCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTI6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgotIQotIQogCi0JLmJhbGlnbiAJMTAyNCwwLDEwMjQKLXRsYl9taXNzOgotCW1vdi5sCTFmLCBrMgotCW1vdi5sCTRmLCBrMwotCWJyYQloYW5kbGVfZXhjZXB0aW9uCi0JIG1vdi5sCUBrMiwgazIKLSEKLQkuYmFsaWduIAk1MTIsMCw1MTIKLWludGVycnVwdDoKLQltb3YubAkzZiwgazMKLSNpZiBkZWZpbmVkKENPTkZJR19LR0RCKQotCW1vdi5sCTJmLCBrMgotCSEgRGVib3VuY2UgKGZpbHRlciBuZXN0ZWQgTk1JKQotCW1vdi5sCUBrMiwgazAKLQltb3YubAk1ZiwgazEKLQljbXAvZXEJazEsIGswCi0JYmYJMGYKLQltb3YubAk2ZiwgazEKLQl0YXMuYglAazEKLQlidAkwZgotCXJ0ZQotCSBub3AKLQkuYWxpZ24JMgotMjoJLmxvbmcJSU5URVZUCi01OgkubG9uZwlOTUlfVkVDCi02OgkubG9uZwlpbl9ubWkKLTA6Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfS0dEQikgKi8KLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgotCSBtb3YJIy0xLCBrMgkJISBpbnRlcnJ1cHQgZXhjZXB0aW9uIG1hcmtlcgorISBwcmVwYXJlX3N0YWNrX3NhdmVfZHNwKCkKKyEgLSByb2xsIGJhY2sgZ1JCCishIC0gc3dpdGNoIHRvIGtlcm5lbCBzdGFjaworISAtIHNhdmUgRFNQCishIGswIHJldHVybnMgb3JpZ2luYWwgc3AgKGFmdGVyIHJvbGwgYmFjaykKKyEgazEgdHJhc2hlZAorISBrMiB0cmFzaGVkCiAKLQkuYWxpZ24JMgotMToJLmxvbmcJRVhQRVZUCi0zOgkubG9uZwlyZXRfZnJvbV9pcnEKLTQ6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgotCi0hCi0hCi0JLmFsaWduCTIKLUVOVFJZKGhhbmRsZV9leGNlcHRpb24pCi0JISBVc2luZyBrMCwgazEgZm9yIHNjcmF0Y2ggcmVnaXN0ZXJzIChyMF9iYW5rMSwgcjFfYmFuayksCi0JISBzYXZlIGFsbCByZWdpc3RlcnMgb250byBzdGFjay4KLQkhCi0KK3ByZXBhcmVfc3RhY2tfc2F2ZV9kc3A6CiAjaWZkZWYgQ09ORklHX0dVU0EKIAkhIENoZWNrIGZvciByb2xsIGJhY2sgZ1JCIChVc2VyIGFuZCBLZXJuZWwpCiAJbW92CXIxNSwgazAKQEAgLTQzMCw3ICs0MDIsNyBAQAogMjoJbW92CWsxLCByMTUJCSEgU1AgPSByMQogMToKICNlbmRpZgotCisJISBTd2l0Y2ggdG8ga2VybmVsIHN0YWNrIGlmIG5lZWRlZAogCXN0Ywlzc3IsIGswCQkhIElzIGl0IGZyb20ga2VybmVsIHNwYWNlPwogCXNobGwJazAJCSEgQ2hlY2sgTUQgYml0IChiaXQzMCkgYnkgc2hpZnRpbmcgaXQgaW50by4uLgogCXNobGwJazAJCSEgICAgICAgLi4udGhlIFQgYml0CkBAIC00NDMsMTggKzQxNSwxNyBAQAogCWFkZAljdXJyZW50LCBrMQogCW1vdglrMSwgcjE1CQkhIGNoYW5nZSB0byBrZXJuZWwgc3RhY2sKIAkhCi0xOgltb3YubAkyZiwgazEKLQkhCisxOgogI2lmZGVmIENPTkZJR19TSF9EU1AKLQltb3YubAlyMiwgQC1yMTUJCSEgU2F2ZSByMiwgd2UgbmVlZCBhbm90aGVyIHJlZwotCXN0YwlzciwgazQKLQltb3YubAkxZiwgcjIKLQl0c3QJcjIsIGs0CQkJISBDaGVjayBpZiBpbiBEU1AgbW9kZQotCW1vdi5sCUByMTUrLCByMgkJISBSZXN0b3JlIHIyIG5vdworCSEgU2F2ZSBEU1AgY29udGV4dCBpZiBuZWVkZWQKKwlzdGMJc3IsIGsxCisJbW92CSMweDEwLCBrMgorCXNobGw4ICAgazIJCQkhIERTUD0xICgweDAwMDAxMDAwKQorCXRzdAlrMiwgazEJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlIChwYXNzZWQgaW4gazIpCiAJYnQvcwlza2lwX3NhdmUKLQkgbW92CSMwLCBrNAkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKKwkgbW92CSMwLCBrMQkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKIAotCW1vdglyMiwgazQJCQkhIEJhY2t1cCByMiAoaW4gazQpIGZvciBsYXRlcgorCW1vdglrMiwgazEJCQkhIFNhdmUgaGFzLWZyYW1lIG1hcmtlcgogCiAJISBTYXZlIERTUCByZWdpc3RlcnMgb24gc3RhY2sKIAlzdGMubAltb2QsIEAtcjE1CkBAIC00NzMsMzUgKzQ0NCw3NCBAQAogCSEgYXMgd2UncmUgbm90IGF0IGFsbCBpbnRlcmVzdGVkIGluIHN1cHBvcnRpbmcgYW5jaWVudCB0b29sY2hhaW5zIGF0CiAJISB0aGlzIHBvaW50LiAtLSBQRk0uCiAKLQltb3YJcjE1LCByMgorCW1vdglyMTUsIGsyCiAJLndvcmQJMHhmNjUzCQkJISBtb3ZzLmwJYTEsIEAtcjIKIAkud29yZAkweGY2ZjMJCQkhIG1vdnMubAlhMGcsIEAtcjIKIAkud29yZAkweGY2ZDMJCQkhIG1vdnMubAlhMWcsIEAtcjIKIAkud29yZAkweGY2YzMJCQkhIG1vdnMubAltMCwgQC1yMgogCS53b3JkCTB4ZjZlMwkJCSEgbW92cy5sCW0xLCBALXIyCi0JbW92CXIyLCByMTUKKwltb3YJazIsIHIxNQogCi0JbW92CWs0LCByMgkJCSEgUmVzdG9yZSByMgotCW1vdi5sCTFmLCBrNAkJCSEgRm9yY2UgRFNQIHN0YWNrIGZyYW1lCiBza2lwX3NhdmU6Ci0JbW92LmwJazQsIEAtcjE1CQkhIFB1c2ggRFNQIG1vZGUgbWFya2VyIG9udG8gc3RhY2sKKwltb3YubAlrMSwgQC1yMTUJCSEgUHVzaCBEU1AgbW9kZSBtYXJrZXIgb250byBzdGFjawogI2VuZGlmCi0JISBTYXZlIHRoZSB1c2VyIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suCi0JbW92LmwJazIsIEAtcjE1CSEgRVhQRVZUCisJcnRzCisJIG5vcAorIQorISAweDQwMDogSW5zdHJ1Y3Rpb24gYW5kIERhdGEgVExCIG1pc3MgZXhjZXB0aW9uIHZlY3RvcgorIQorCS5iYWxpZ24gCTEwMjQsMCwxMDI0Cit0bGJfbWlzczoKKwlzdHMJcHIsIGszCQkhIHNhdmUgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKIAotCW1vdgkjLTEsIGs0Ci0JbW92LmwJazQsIEAtcjE1CSEgc2V0IFRSQSAoZGVmYXVsdDogLTEpCi0JIQoraGFuZGxlX2V4Y2VwdGlvbjoKKwltb3ZhCWV4Y2VwdGlvbl9kYXRhLCBrMAorCisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCSBQUkVGKGswKQorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YubAk1ZiwgazIJCSEgdmVjdG9yIHJlZ2lzdGVyIGFkZHJlc3MKKwltb3YubAkxZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCWJzcglzYXZlX3JlZ3MJISBuZWVkcyBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCSBtb3YubAlAazIsIGsyCQkhIHJlYWQgb3V0IHZlY3RvciBhbmQga2VlcCBpbiBrMgorCitoYW5kbGVfZXhjZXB0aW9uX3NwZWNpYWw6CisJISBTZXR1cCByZXR1cm4gYWRkcmVzcyBhbmQganVtcCB0byBleGNlcHRpb24gaGFuZGxlcgorCW1vdi5sCTdmLCByOQkJISBmZXRjaCByZXR1cm4gYWRkcmVzcworCXN0YwlyMl9iYW5rLCByMAkhIGsyICh2ZWN0b3IpCisJbW92LmwJNmYsIHIxMAorCXNobHIyCXIwCisJc2hscglyMAorCW1vdi5sCUAocjAsIHIxMCksIHIxMAorCWptcAlAcjEwCisJIGxkcwlyOSwgcHIJCSEgcHV0IHJldHVybiBhZGRyZXNzIGluIHByCisKKwkuYWxpZ24JTDFfQ0FDSEVfU0hJRlQKKworISBzYXZlX3JlZ3MoKQorISAtIHNhdmUgZGVmYXVsdCB0cmEsIG1hY2wsIG1hY2gsIGdiciwgc3NyLCBwciogYW5kIHNwYyBvbiB0aGUgc3RhY2sKKyEgLSBzYXZlIHIxNSosIHIxNCwgcjEzLCByMTIsIHIxMSwgcjEwLCByOSwgcjggb24gdGhlIHN0YWNrCishIC0gc3dpdGNoIGJhbmsKKyEgLSBzYXZlIHI3LCByNiwgcjUsIHI0LCByMywgcjIsIHIxLCByMCBvbiB0aGUgc3RhY2sKKyEgazAgY29udGFpbnMgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcioKKyEgazEgdHJhc2hlZAorISBrMyBwYXNzZXMgb3JpZ2luYWwgcHIqCishIGs0IHBhc3NlcyBTUiBiaXRtYXNrCishIEJMPTEgb24gZW50cnksIG9uIGV4aXQgQkw9MC4KKworRU5UUlkoc2F2ZV9yZWdzKQorCW1vdgkjLTEsIHIxCisJbW92LmwJazEsIEAtcjE1CSEgc2V0IFRSQSAoZGVmYXVsdDogLTEpCiAJc3RzLmwJbWFjbCwgQC1yMTUKIAlzdHMubAltYWNoLCBALXIxNQogCXN0Yy5sCWdiciwgQC1yMTUKIAlzdGMubAlzc3IsIEAtcjE1Ci0Jc3RzLmwJcHIsIEAtcjE1CisJbW92LmwJazMsIEAtcjE1CSEgb3JpZ2luYWwgcHIgaW4gazMKIAlzdGMubAlzcGMsIEAtcjE1Ci0JIQotCWxkcwlrMywgcHIJCSEgU2V0IHRoZSByZXR1cm4gYWRkcmVzcyB0byBwcgotCSEKLQltb3YubAlrMCwgQC1yMTUJISBzYXZlIG9yaWduYWwgc3RhY2sKKworCW1vdi5sCWswLCBALXIxNQkhIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIgaW4gazAKIAltb3YubAlyMTQsIEAtcjE1CiAJbW92LmwJcjEzLCBALXIxNQogCW1vdi5sCXIxMiwgQC1yMTUKQEAgLTUwOSwxMyArNTE5LDIzIEBACiAJbW92LmwJcjEwLCBALXIxNQogCW1vdi5sCXI5LCBALXIxNQogCW1vdi5sCXI4LCBALXIxNQotCSEKLQlzdGMJc3IsIHI4CQkhIEJhY2sgdG8gbm9ybWFsIHJlZ2lzdGVyIGJhbmssIGFuZAotCW9yCWsxLCByOAkJISBCbG9jayBhbGwgaW50ZXJydXB0cwotCW1vdi5sCTNmLCBrMQotCWFuZAlrMSwgcjgJCSEgLi4uCi0JbGRjCXI4LCBzcgkJISAuLi5jaGFuZ2VkIGhlcmUuCi0JIQorCisJbW92LmwJMGYsIGszCQkhIFNSIGJpdHMgdG8gc2V0IGluIGszCisKKwkhIGZhbGwtdGhyb3VnaAorCishIHNhdmVfbG93X3JlZ3MoKQorISAtIG1vZGlmeSBTUiBmb3IgYmFuayBzd2l0Y2gKKyEgLSBzYXZlIHI3LCByNiwgcjUsIHI0LCByMywgcjIsIHIxLCByMCBvbiB0aGUgc3RhY2sKKyEgazMgcGFzc2VzIGJpdHMgdG8gc2V0IGluIFNSCishIGs0IHBhc3NlcyBiaXRzIHRvIGNsZWFyIGluIFNSCisKK0VOVFJZKHNhdmVfbG93X3JlZ3MpCisJc3RjCXNyLCByOAorCW9yCWszLCByOAorCWFuZAlrNCwgcjgKKwlsZGMJcjgsIHNyCisKIAltb3YubAlyNywgQC1yMTUKIAltb3YubAlyNiwgQC1yMTUKIAltb3YubAlyNSwgQC1yMTUKQEAgLTUyMyw1MiArNTQzLDYzIEBACiAJbW92LmwJcjMsIEAtcjE1CiAJbW92LmwJcjIsIEAtcjE1CiAJbW92LmwJcjEsIEAtcjE1Ci0JbW92LmwJcjAsIEAtcjE1Ci0KLQkvKgotCSAqIFRoaXMgZ2V0cyBhIGJpdCB0cmlja3kuLiBpbiB0aGUgSU5URVZUIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byB1c2UKLQkgKiB0aGUgVkJSIG9mZnNldCBhcyBhIGRlc3RpbmF0aW9uIGluIHRoZSBqdW1wIGNhbGwgdGFibGUsIHNpbmNlIGFsbAotCSAqIG9mIHRoZSBkZXN0aW5hdGlvbnMgYXJlIHRoZSBzYW1lLiBJbiB0aGlzIGNhc2UsIChpbnRlcnJ1cHQpIHNldHMKLQkgKiBhIG1hcmtlciBpbiByMiAobm93IHIyX2Jhbmsgc2luY2UgU1IuUkIgY2hhbmdlZCksIHdoaWNoIHdlIGNoZWNrCi0JICogdG8gZGV0ZXJtaW5lIHRoZSBleGNlcHRpb24gdHlwZS4gRm9yIGFsbCBvdGhlciBleGNlcHRpb25zLCB3ZQotCSAqIGZvcmNpYmx5IHJlYWQgRVhQRVZUIGZyb20gbWVtb3J5IGFuZCBmaXggdXAgdGhlIGp1bXAgYWRkcmVzcywgaW4KLQkgKiB0aGUgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYXNlIHdlIGp1bXAgdG8gZG9fSVJRKCkgYW5kIGRlZmVyIHRoZQotCSAqIElOVEVWVCByZWFkIHVudGlsIHRoZXJlLiBBcyBhIGJvbnVzLCB3ZSBjYW4gYWxzbyBjbGVhbiB1cCB0aGUgU1IuUkIKLQkgKiBjaGVja3MgdGhhdCBkb19JUlEoKSB3YXMgZG9pbmcuLgotCSAqLwotCXN0YwlyMl9iYW5rLCByOAotCWNtcC9weglyOAotCWJmCWludGVycnVwdF9leGNlcHRpb24KLQlzaGxyMglyOAotCXNobHIJcjgKLQltb3YubAk0ZiwgcjkKLQlhZGQJcjgsIHI5Ci0JbW92LmwJQHI5LCByOQotCWptcAlAcjkKLQkgbm9wCiAJcnRzCisJIG1vdi5sCXIwLCBALXIxNQorCishCishIDB4NjAwOiBJbnRlcnJ1cHQgLyBOTUkgdmVjdG9yCishCisJLmJhbGlnbiAJNTEyLDAsNTEyCitFTlRSWShoYW5kbGVfaW50ZXJydXB0KQorI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCisJbW92LmwJMmYsIGsyCisJISBEZWJvdW5jZSAoZmlsdGVyIG5lc3RlZCBOTUkpCisJbW92LmwJQGsyLCBrMAorCW1vdi5sCTlmLCBrMQorCWNtcC9lcQlrMSwgazAKKwliZgkxMWYKKwltb3YubAkxMGYsIGsxCisJdGFzLmIJQGsxCisJYnQJMTFmCisJcnRlCiAJIG5vcAotCiAJLmFsaWduCTIKLTE6CS5sb25nCTB4MDAwMDEwMDAJISBEU1A9MQotMjoJLmxvbmcJMHgwMDAwODBmMAkhIEZEPTEsIElNQVNLPTE1Ci0zOgkubG9uZwkweGNmZmZmZmZmCSEgUkI9MCwgQkw9MAotNDoJLmxvbmcJZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlCis5OgkubG9uZwlOTUlfVkVDCisxMDoJLmxvbmcJaW5fbm1pCisxMToKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19LR0RCKSAqLworCXN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCiAKLWludGVycnVwdF9leGNlcHRpb246Ci0JbW92LmwJMWYsIHI5CisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCSBQUkVGKGswKQorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YubAkxZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCWJzcglzYXZlX3JlZ3MJISBuZWVkcyBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCSBtb3YJIy0xLCBrMgkJISBkZWZhdWx0IHZlY3RvciBrZXB0IGluIGsyCisKKwkhIFNldHVwIHJldHVybiBhZGRyZXNzIGFuZCBqdW1wIHRvIGRvX0lSUQorCW1vdi5sCTRmLCByOQkJISBmZXRjaCByZXR1cm4gYWRkcmVzcworCWxkcwlyOSwgcHIJCSEgcHV0IHJldHVybiBhZGRyZXNzIGluIHByCiAJbW92LmwJMmYsIHI0Ci0JbW92LmwJQHI0LCByNAorCW1vdi5sCTNmLCByOQorCW1vdi5sCUByNCwgcjQJCSEgcGFzcyBJTlRFVlQgdmVjdG9yIGFzIGFyZzAKIAlqbXAJQHI5Ci0JIG1vdglyMTUsIHI1Ci0JcnRzCi0JIG5vcAorCSBtb3YJcjE1LCByNQkJISBwYXNzIHNhdmVkIHJlZ2lzdGVycyBhcyBhcmcxCiAKLQkuYWxpZ24gMgotMToJLmxvbmcJZG9fSVJRCi0yOgkubG9uZwlJTlRFVlQKLQotCS5hbGlnbgkyCiBFTlRSWShleGNlcHRpb25fbm9uZSkKIAlydHMKIAkgbm9wCisKKwkuYWxpZ24JTDFfQ0FDSEVfU0hJRlQKK2V4Y2VwdGlvbl9kYXRhOgorMDoJLmxvbmcJMHgwMDAwODBmMAkhIEZEPTEsIElNQVNLPTE1CisxOgkubG9uZwkweGNmZmZmZmZmCSEgUkI9MCwgQkw9MAorMjoJLmxvbmcJSU5URVZUCiszOgkubG9uZwlkb19JUlEKKzQ6CS5sb25nCXJldF9mcm9tX2lycQorNToJLmxvbmcJRVhQRVZUCis2OgkubG9uZwlleGNlcHRpb25faGFuZGxpbmdfdGFibGUKKzc6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKaW5kZXggNjQ2OGFlOC4uNjNiNjdiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNINzcwNSBTZXR1cAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA5ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMSw1MSArMjEsMzYgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsCiAJUElOVDA3LCBQSU5UODE1LAotCURNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMywKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JQURDX0FESSwKLQlVU0JfVVNJMCwgVVNCX1VTSTEsCi0JVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywKLQlUTVUwLCBUTVUxLCBUTVUyX1RVTkksIFRNVTJfVElDUEksCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGX1JDTUksCiAKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUlRDLCBUTVUyLCBETUFDLCBVU0IsIFNDSUYyLCBTQ0lGMCwKKwlETUFDLCBTQ0lGMCwgU0NJRjIsIEFEQ19BREksIFVTQiwKKworCVRQVTAsIFRQVTEsIFRQVTIsIFRQVTMsCisJVE1VMCwgVE1VMSwgVE1VMiwKKworCVJUQywgV0RULCBSRUZfUkNNSSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCS8qIElSUTAtPjUgYXJlIGhhbmRsZWQgaW4gc2V0dXAtc2gzLmMgKi8KIAlJTlRDX1ZFQ1QoUElOVDA3LCAweDcwMCksIElOVENfVkVDVChQSU5UODE1LCAweDcyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAotCUlOVENfVkVDVChTQ0lGMl9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMl9UWEksIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4MjApLAorCUlOVENfVkVDVChETUFDLCAweDg0MCksIElOVENfVkVDVChETUFDLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoQURDX0FESSwgMHg5ODApLAotCUlOVENfVkVDVChVU0JfVVNJMCwgMHhhMjApLCBJTlRDX1ZFQ1QoVVNCX1VTSTEsIDB4YTQwKSwKKwlJTlRDX1ZFQ1QoVVNCLCAweGEyMCksIElOVENfVkVDVChVU0IsIDB4YTQwKSwKIAlJTlRDX1ZFQ1QoVFBVMCwgMHhjMDApLCBJTlRDX1ZFQ1QoVFBVMSwgMHhjMjApLAogCUlOVENfVkVDVChUUFUyLCAweGM4MCksIElOVENfVkVDVChUUFUzLCAweGNhMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMl9UVU5JLCAweDQ0MCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDQ2MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFRNVTIsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoVVNCLCBVU0JfVVNJMCwgVVNCX1VTSTEpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZmZmZlZTIsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4ZmZmZmZlZTQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUZfUkNNSSwgMCwgMCB9IH0sCkBAIC03OCw3ICs2Myw3IEBACiAKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MDUiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzA1IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewpAQCAtODYsMTIgKzcxLDEyIEBACiAJCS5tYXBiYXNlCT0gMHhhNDQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTYsIDU3LCA1OSB9LAorCQkuaXJxcwkJPSB7IDU2LCA1NiwgNTYgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSB9LAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMTE1LDE0ICsxMDAsNiBAQAogCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfcnRjX3BsYXRmb3JtX2luZm8gcnRjX2luZm8gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwppbmRleCA5M2M1NWUyLi5hNzRmOTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDMgU2V0dXAgY29kZSBmb3IgU0g3NzA2LCBTSDc3MDcsIFNINzcwOCwgU0g3NzA5CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgTWFnbnVzIERhbW0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBCYXNlZCBvbiBzZXR1cC1zaDc3MDkuYwogICoKQEAgLTI0LDQ2ICsyNSwzNyBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKIAlQSU5UMDcsIFBJTlQ4MTUsCi0JRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCi0JU0NJX0VSSSwgU0NJX1JYSSwgU0NJX1RYSSwgU0NJX1RFSSwKLQlBRENfQURJLAorCURNQUMsIFNDSUYwLCBTQ0lGMiwgU0NJLCBBRENfQURJLAogCUxDREMsIFBDQzAsIFBDQzEsCi0JVE1VMCwgVE1VMSwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVJFRl9SQ01JLCBSRUZfUk9WSSwKLQotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIFJFRiwgVE1VMiwgRE1BQywgU0NJLCBTQ0lGMiwgU0NJRjAsCisJVE1VMCwgVE1VMSwgVE1VMiwKKwlSVEMsIFdEVCwgUkVGLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMl9UVU5JLCAweDQ0MCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDQ2MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAotCUlOVENfVkVDVChTQ0lfRVJJLCAweDRlMCksIElOVENfVkVDVChTQ0lfUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNDSV9UWEksIDB4NTIwKSwgSU5UQ19WRUNUKFNDSV9URUksIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg0NjApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoU0NJLCAweDRlMCksIElOVENfVkVDVChTQ0ksIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0NJLCAweDUyMCksIElOVENfVkVDVChTQ0ksIDB4NTQwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCi0JSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksCi0JSU5UQ19WRUNUKFJFRl9ST1ZJLCAweDVhMCksCisJSU5UQ19WRUNUKFJFRiwgMHg1ODApLAorCUlOVENfVkVDVChSRUYsIDB4NWEwKSwKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwotCUlOVENfVkVDVChETUFDX0RFSTAsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUNfREVJMSwgMHg4MjApLAotCUlOVENfVkVDVChETUFDX0RFSTIsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUNfREVJMywgMHg4NjApLAorCUlOVENfVkVDVChETUFDLCAweDgwMCksIElOVENfVkVDVChETUFDLCAweDgyMCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODYwKSwKIAlJTlRDX1ZFQ1QoQURDX0FESSwgMHg5ODApLAotCUlOVENfVkVDVChTQ0lGMl9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMl9CUkksIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYyX1RYSSwgMHg5NjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYyLCAweDk2MCksCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAJSU5UQ19WRUNUKFBJTlQwNywgMHg3MDApLCBJTlRDX1ZFQ1QoUElOVDgxNSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg4YTApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhlMCksCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpCiAJSU5UQ19WRUNUKExDREMsIDB4OWEwKSwKQEAgLTcxLDE2ICs2Myw2IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFRNVTIsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChSRUYsIFJFRl9SQ01JLCBSRUZfUk9WSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoU0NJLCBTQ0lfRVJJLCBTQ0lfUlhJLCBTQ0lfVFhJLCBTQ0lfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmZmZmZmVlMiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhmZmZmZmVlNCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRiwgU0NJLCAwIH0gfSwKQEAgLTEwMSw3ICs4Myw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MHgiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzB4IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewpAQCAtMTExLDE0ICs5Myw2IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0JewotCQkuc3RhcnQgID0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7CiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKQEAgLTEzNiw3ICsxMTAsNyBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZmZlODAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0ksCi0JCS5pcnFzCQk9IHsgMjMsIDI0LCAyNSwgMCB9LAorCQkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKIAl9LAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXApAQCAtMTQ1LDcgKzExOSw3IEBACiAJCS5tYXBiYXNlCT0gMHhhNDAwMDE1MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTYsIDU3LCA1OSwgNTggfSwKKwkJLmlycXMJCT0geyA1NiwgNTYsIDU2LCA1NiB9LAogCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKQEAgLTE1NCw3ICsxMjgsNyBAQAogCQkubWFwYmFzZQk9IDB4YTQwMDAxNDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9JUkRBLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKIAl9LAogI2VuZGlmCiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKaW5kZXggNzdlZWU0OC4uMzM1MDk4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNIMyBTZXR1cCBjb2RlIGZvciBTSDc3MTAsIFNINzcxMgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA5ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMCw1OSArMjAsNDAgQEAKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKLQlETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlETUFDX0RFSTQsIERNQUNfREVJNSwKLQlJUFNFQywKKwlETUFDMSwgU0NJRjAsIFNDSUYxLCBETUFDMiwgSVBTRUMsCiAJRURNQUMwLCBFRE1BQzEsIEVETUFDMiwKLQlTSU9GMF9FUkksIFNJT0YwX1RYSSwgU0lPRjBfUlhJLCBTSU9GMF9DQ0ksCi0JU0lPRjFfRVJJLCBTSU9GMV9UWEksIFNJT0YxX1JYSSwgU0lPRjFfQ0NJLAotCVRNVTAsIFRNVTEsIFRNVTIsCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGLAorCVNJT0YwLCBTSU9GMSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIERNQUMxLCBTQ0lGMCwgU0NJRjEsIERNQUMyLCBTSU9GMCwgU0lPRjEsCisJVE1VMCwgVE1VMSwgVE1VMiwKKwlSVEMsIFdEVCwgUkVGLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwotCUlOVENfVkVDVChETUFDX0RFSTAsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUNfREVJMSwgMHg4MjApLAotCUlOVENfVkVDVChETUFDX0RFSTIsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUNfREVJMywgMHg4NjApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg4YTApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHg5NjApLAotCUlOVENfVkVDVChETUFDX0RFSTQsIDB4YjgwKSwgSU5UQ19WRUNUKERNQUNfREVJNSwgMHhiYTApLAorCUlOVENfVkVDVChETUFDMSwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMxLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDkyMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDk0MCksIElOVENfVkVDVChTQ0lGMSwgMHg5NjApLAorCUlOVENfVkVDVChETUFDMiwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQzIsIDB4YmEwKSwKICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwCiAJSU5UQ19WRUNUKElQU0VDLCAweGJlMCksCiAjZW5kaWYKIAlJTlRDX1ZFQ1QoRURNQUMwLCAweGMwMCksIElOVENfVkVDVChFRE1BQzEsIDB4YzIwKSwKIAlJTlRDX1ZFQ1QoRURNQUMyLCAweGM0MCksCi0JSU5UQ19WRUNUKFNJT0YwX0VSSSwgMHhlMDApLCBJTlRDX1ZFQ1QoU0lPRjBfVFhJLCAweGUyMCksCi0JSU5UQ19WRUNUKFNJT0YwX1JYSSwgMHhlNDApLCBJTlRDX1ZFQ1QoU0lPRjBfQ0NJLCAweGU2MCksCi0JSU5UQ19WRUNUKFNJT0YxX0VSSSwgMHhlODApLCBJTlRDX1ZFQ1QoU0lPRjFfVFhJLCAweGVhMCksCi0JSU5UQ19WRUNUKFNJT0YxX1JYSSwgMHhlYzApLCBJTlRDX1ZFQ1QoU0lPRjFfQ0NJLCAweGVlMCksCisJSU5UQ19WRUNUKFNJT0YwLCAweGUwMCksIElOVENfVkVDVChTSU9GMCwgMHhlMjApLAorCUlOVENfVkVDVChTSU9GMCwgMHhlNDApLCBJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTYwKSwKKwlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZTgwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGVhMCksCisJSU5UQ19WRUNUKFNJT0YxLCAweGVjMCksIElOVENfVkVDVChTSU9GMSwgMHhlZTApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQ19ERUk0LCBETUFDX0RFSTUpLAotCUlOVENfR1JPVVAoU0lPRjAsIFNJT0YwX0VSSSwgU0lPRjBfVFhJLCBTSU9GMF9SWEksIFNJT0YwX0NDSSksCi0JSU5UQ19HUk9VUChTSU9GMSwgU0lPRjFfRVJJLCBTSU9GMV9UWEksIFNJT0YxX1JYSSwgU0lPRjFfQ0NJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGZmZmZmZWUyLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweGZmZmZmZWU0LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGLCAwLCAwIH0gfSwKQEAgLTg1LDcgKzY2LDcgQEAKIAl7IDB4YTQwODAwMDYsIDAsIDE2LCA0LCAvKiBJUFJJICovIHsgMCwgMCwgU0lPRjEgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcxMCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MTAiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC05OCwxNCArNzksNiBAQAogCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfcnRjX3BsYXRmb3JtX2luZm8gcnRjX2luZm8gPSB7CkBAIC0xMjcsMTIgKzEwMCwxMiBAQAogCQkubWFwYmFzZQk9IDB4YTQ0MDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhhNDQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzICAgICAgICAgICA9IHsgNTYsIDU3LCA1OSwgNTggfSwKKwkJLmlycXMgICAgICAgICAgID0geyA1NiwgNTYsIDU2LCA1NiB9LAogCX0sIHsKIAogCQkuZmxhZ3MgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKaW5kZXggZjgwN2EyMS4uMDAzODc0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCkBAIC0yLDYgKzIsNyBAQAogICogU0g3NzIwIFNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgTWFya3VzIEJydW5uZXIsIE1hcmsgSm9uYXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiAgQmFzZWQgb24gYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYzoKICAqCkBAIC0yNiwxNyArMjcsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtMTUwLDYyICsxNDEsNDkgQEAKIAlVTlVTRUQgPSAwLAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlUTVUwLCBUTVUxLCBUTVUyLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwgUkVGX1JDTUksIFNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5ELAorCVRNVTAsIFRNVTEsIFRNVTIsIFJUQywKKwlXRFQsIFJFRl9SQ01JLCBTSU0sCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywKIAlVU0JGX1NQRCwgVE1VX1NVTkksIElSUTUsIElSUTQsCi0JRE1BQzFfREVJMCwgRE1BQzFfREVJMSwgRE1BQzFfREVJMiwgRE1BQzFfREVJMywgTENEQywgU1NMLAotCUFEQywgRE1BQzJfREVJNCwgRE1BQzJfREVJNSwgVVNCRkkwLCBVU0JGSTEsIENNVCwKKwlETUFDMSwgTENEQywgU1NMLAorCUFEQywgRE1BQzIsIFVTQkZJLCBDTVQsCiAJU0NJRjAsIFNDSUYxLAotCVBJTlQwNywgUElOVDgxNSwgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywgSUlDLAotCVNJT0YwLCBTSU9GMSwgTU1DSTAsIE1NQ0kxLCBNTUNJMiwgTU1DSTMsIFBDQywKKwlQSU5UMDcsIFBJTlQ4MTUsIFRQVSwgSUlDLAorCVNJT0YwLCBTSU9GMSwgTU1DLCBQQ0MsCiAJVVNCSEksIEFGRUlGLAogCUhfVURJLAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlUTVUsIFJUQywgU0lNLCBETUFDMSwgVVNCRkksIERNQUMyLCBVU0IsIFRQVSwgTU1DLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwogCUlOVENfVkVDVChUTVUwLCAweDQwMCksICAgICAgIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgICAgICAgSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwKLQlJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLCAgICBJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAotCUlOVENfVkVDVChTSU1fRVJJLCAweDRlMCksICAgIElOVENfVkVDVChTSU1fUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNJTV9UWEksIDB4NTIwKSwgICAgSU5UQ19WRUNUKFNJTV9URU5ELCAweDU0MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgICAgICAgSU5UQ19WRUNUKFJUQywgMHg0ODApLAorCUlOVENfVkVDVChSVEMsIDB4NGEwKSwJICAgICAgSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTSU0sIDB4NGUwKSwJICAgICAgSU5UQ19WRUNUKFNJTSwgMHg1MDApLAorCUlOVENfVkVDVChTSU0sIDB4NTIwKSwJICAgICAgSU5UQ19WRUNUKFNJTSwgMHg1NDApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwgICAgICAgIElOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLAogCS8qIEhfVURJIGNhbm5vdCBiZSBtYXNrZWQgKi8gIElOVENfVkVDVChUTVVfU1VOSSwgMHg2YzApLAotCUlOVENfVkVDVChVU0JGX1NQRCwgMHg2ZTApLCAgIElOVENfVkVDVChETUFDMV9ERUkwLCAweDgwMCksCi0JSU5UQ19WRUNUKERNQUMxX0RFSTEsIDB4ODIwKSwgSU5UQ19WRUNUKERNQUMxX0RFSTIsIDB4ODQwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfREVJMywgMHg4NjApLCBJTlRDX1ZFQ1QoTENEQywgMHg5MDApLAorCUlOVENfVkVDVChVU0JGX1NQRCwgMHg2ZTApLCAgIElOVENfVkVDVChETUFDMSwgMHg4MDApLAorCUlOVENfVkVDVChETUFDMSwgMHg4MjApLCAgICAgIElOVENfVkVDVChETUFDMSwgMHg4NDApLAorCUlOVENfVkVDVChETUFDMSwgMHg4NjApLCAgICAgIElOVENfVkVDVChMQ0RDLCAweDkwMCksCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKQogCUlOVENfVkVDVChTU0wsIDB4OTgwKSwKICNlbmRpZgotCUlOVENfVkVDVChVU0JGSTAsIDB4YTIwKSwgICAgIElOVENfVkVDVChVU0JGSTEsIDB4YTQwKSwKKwlJTlRDX1ZFQ1QoVVNCRkksIDB4YTIwKSwgICAgICBJTlRDX1ZFQ1QoVVNCRkksIDB4YTQwKSwKIAlJTlRDX1ZFQ1QoVVNCSEksIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzJfREVJNCwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQzJfREVJNSwgMHhiYTApLAorCUlOVENfVkVDVChETUFDMiwgMHhiODApLCAgICAgIElOVENfVkVDVChETUFDMiwgMHhiYTApLAogCUlOVENfVkVDVChBREMsIDB4YmUwKSwgICAgICAgIElOVENfVkVDVChTQ0lGMCwgMHhjMDApLAogCUlOVENfVkVDVChTQ0lGMSwgMHhjMjApLCAgICAgIElOVENfVkVDVChQSU5UMDcsIDB4YzgwKSwKIAlJTlRDX1ZFQ1QoUElOVDgxNSwgMHhjYTApLCAgICBJTlRDX1ZFQ1QoU0lPRjAsIDB4ZDAwKSwKLQlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZDIwKSwgICAgICBJTlRDX1ZFQ1QoVFBVMCwgMHhkODApLAotCUlOVENfVkVDVChUUFUxLCAweGRhMCksICAgICAgIElOVENfVkVDVChUUFUyLCAweGRjMCksCi0JSU5UQ19WRUNUKFRQVTMsIDB4ZGUwKSwgICAgICAgSU5UQ19WRUNUKElJQywgMHhlMDApLAotCUlOVENfVkVDVChNTUNJMCwgMHhlODApLCAgICAgIElOVENfVkVDVChNTUNJMSwgMHhlYTApLAotCUlOVENfVkVDVChNTUNJMiwgMHhlYzApLCAgICAgIElOVENfVkVDVChNTUNJMywgMHhlZTApLAorCUlOVENfVkVDVChTSU9GMSwgMHhkMjApLCAgICAgIElOVENfVkVDVChUUFUsIDB4ZDgwKSwKKwlJTlRDX1ZFQ1QoVFBVLCAweGRhMCksICAgICAgICBJTlRDX1ZFQ1QoVFBVLCAweGRjMCksCisJSU5UQ19WRUNUKFRQVSwgMHhkZTApLCAgICAgICAgSU5UQ19WRUNUKElJQywgMHhlMDApLAorCUlOVENfVkVDVChNTUMsIDB4ZTgwKSwgICAgICAgIElOVENfVkVDVChNTUMsIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoTU1DLCAweGVjMCksICAgICAgICBJTlRDX1ZFQ1QoTU1DLCAweGVlMCksCiAJSU5UQ19WRUNUKENNVCwgMHhmMDApLCAgICAgICAgSU5UQ19WRUNUKFBDQywgMHhmNjApLAogCUlOVENfVkVDVChBRkVJRiwgMHhmZTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChUTVUsIFRNVTAsIFRNVTEsIFRNVTIpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFNJTSwgU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSTAsIERNQUMxX0RFSTEsIERNQUMxX0RFSTIsIERNQUMxX0RFSTMpLAotCUlOVENfR1JPVVAoVVNCRkksIFVTQkZJMCwgVVNCRkkxKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUk0LCBETUFDMl9ERUk1KSwKLQlJTlRDX0dST1VQKFRQVSwgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMyksCi0JSU5UQ19HUk9VUChNTUMsIE1NQ0kwLCBNTUNJMSwgTU1DSTIsIE1NQ0kzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweEE0MTRGRUUyVUwsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4QTQxNEZFRTRVTCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRl9SQ01JLCBTSU0sIDAgfSB9LApAQCAtMjE5LDcgKzE5Nyw3IEBACiAJeyAweEE0MDgwMDA4VUwsIDAsIDE2LCA0LCAvKiBJUFJKICovIHsgMCwgVVNCSEksIDAsIEFGRUlGIH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MjAiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzIwIiwgdmVjdG9ycywgTlVMTCwKIAkJTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNDU0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIGswCXIwCisjZGVmaW5lIGsxCXIxCisjZGVmaW5lIGsyCXIyCisjZGVmaW5lIGszCXIzCisjZGVmaW5lIGs0CXI0CisKKyEgc3dzdXNwX2FyY2hfcmVzdW1lKCkKKyEgLSBjb3B5IHJlc3RvcmVfcGJsaXN0IHBhZ2VzCishIC0gcmVzdG9yZSByZWdpc3RlcnMgZnJvbSBzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKworRU5UUlkoc3dzdXNwX2FyY2hfcmVzdW1lKQorCW1vdi5sCTFmLCByMTUKKwltb3YubAkyZiwgcjQKKwltb3YubAlAcjQsIHI0CisKK3N3c3VzcF9jb3B5X2xvb3A6CisJbW92CXI0LCByMAorCWNtcC9lcQkjMCwgcjAKKwlidAlzd3N1c3BfcmVzdG9yZV9yZWdzCisKKwltb3YubAlAKFBCRV9BRERSRVNTLCByNCksIHIyCisJbW92LmwJQChQQkVfT1JJR19BRERSRVNTLCByNCksIHI1CisKKwltb3YJIyhQQUdFX1NJWkUgPj4gMTApLCByMworCXNobGw4CXIzCisJc2hscjIJcjMgLyogUEFHRV9TSVpFIC8gMTYgKi8KK3N3c3VzcF9jb3B5X3BhZ2U6CisJZHQJcjMKKwltb3YubAlAcjIrLHIxICAgLyogIDE2biswICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMQkgIC8qICAxNm4rNCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzggKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxICAgLyogIDE2bisxMiAqLworCW1vdi5sCXIxLEByNQorCWJmL3MJc3dzdXNwX2NvcHlfcGFnZQorCSBhZGQJIzQscjUKKworCWJyYQlzd3N1c3BfY29weV9sb29wCisJIG1vdi5sCUAoUEJFX05FWFQsIHI0KSwgcjQKKworc3dzdXNwX3Jlc3RvcmVfcmVnczoKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdi5sCTNmLCByOAorCW1vdi5sCTRmLCByNQorCWpzcglAcjUKKwkgbm9wCisKKwkhIEJMPTE6IFI3LT5SMCBpcyBiYW5rMQorCWxkcwlrMiwgcHIKKwlsZGMJazMsIHNzcgorCisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJbW92LmwJQHIxNSssIHI3CisKKwlydGUKKwkgbm9wCisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKworCS5hbGlnbgkyCisxOgkubG9uZwlzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKzI6CS5sb25nCXJlc3RvcmVfcGJsaXN0CiszOgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQorNDoJLmxvbmcJcmVzdG9yZV9yZWdzCisKKyEgc3dzdXNwX2FyY2hfc3VzcGVuZCgpCishIC0gcHJlcGFyZSBwYyBmb3IgcmVzdW1lLCByZXR1cm4gZnJvbSBmdW5jdGlvbiB3aXRob3V0IHN3c3VzcF9zYXZlIG9uIHJlc3VtZQorISAtIHNhdmUgcmVnaXN0ZXJzIGluIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorISAtIGNhbGwgc3dzdXNwX3NhdmUgd3JpdGUgc3VzcGVuZCBpbWFnZQorCitFTlRSWShzd3N1c3BfYXJjaF9zdXNwZW5kKQorCXN0cwlwciwgcjAJCSEgc2F2ZSBwciBpbiByMAorCW1vdglyMTUsIHIyCQkhIHNhdmUgc3AgaW4gcjIKKwltb3YJcjgsIHI1CQkhIHNhdmUgcjggaW4gcjUKKwlzdGMJc3IsIHIxCisJbGRjCXIxLCBzc3IJCSEgc2F2ZSBzciBpbiBzc3IKKwltb3YubAkxZiwgcjEKKwlsZGMJcjEsIHNwYwkJISBzZXR1cCBwYyB2YWx1ZSBmb3IgcmVzdW1pbmcKKwltb3YubAk1ZiwgcjE1CQkhIHVzZSBzd3N1c3BfYXJjaF9yZWdzX2NwdTAgYXMgc3RhY2sKKwltb3YubAk2ZiwgcjMKKwlhZGQJcjMsIHIxNQkJISBzYXZlIGZyb20gdG9wIG9mIHN0cnVjdHVyZQorCisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKwltb3YubAkyZiwgcjMJCSEgZ2V0IG5ldyBTUiB2YWx1ZSBmb3IgYmFuazEKKwltb3YJIzAsIHI0CisJbW92LmwJN2YsIHIxCisJanNyCUByMQkJISBzd2l0Y2ggdG8gYmFuazEgYW5kIHNhdmUgYmFuazEgcjctPnIwCisJIG5vdAlyNCwgcjQKKworCSEgQkw9MTogUjctPlIwIGlzIGJhbmsxCisJc3RjCXIyX2JhbmssIGswCSEgZmV0Y2ggb2xkIHNwIGZyb20gcjJfYmFuazAKKwltb3YubAkzZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCW1vdi5sCThmLCBrMQorCWpzcglAazEJCSEgc3dpdGNoIHRvIGJhbmswIGFuZCBzYXZlIGFsbCByZWdzCisJIHN0YwlyMF9iYW5rLCBrMwkhIGZldGNoIG9sZCBwciBmcm9tIHIwX2JhbmswCisKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdglyMiwgcjE1CQkhIHJlc3RvcmUgb2xkIHNwCisJbW92CXI1LCByOAkJISByZXN0b3JlIG9sZCByOAorCXN0Ywlzc3IsIHIxCisJbGRjCXIxLCBzcgkJISByZXN0b3JlIG9sZCBzcgorCWxkcwlyMCwgcHIJCSEgcmVzdG9yZSBvbGQgcHIKKwltb3YubAk0ZiwgcjAKKwlqbXAJQHIwCisJIG5vcAorCitzd3N1c3BfY2FsbF9zYXZlOgorCW1vdglyMiwgcjE1CQkhIHJlc3RvcmUgb2xkIHNwCisJbW92CXI1LCByOAkJISByZXN0b3JlIG9sZCByOAorCWxkcwlyMCwgcHIJCSEgcmVzdG9yZSBvbGQgcHIKKwlydHMKKwkgbW92CSMwLCByMAorCisJLmFsaWduCTIKKzE6CS5sb25nCXN3c3VzcF9jYWxsX3NhdmUKKzI6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCiszOgkubG9uZwkweGRmZmZmZmZmICEgUkI9MAorNDoJLmxvbmcJc3dzdXNwX3NhdmUKKzU6CS5sb25nCXN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorNjoJLmxvbmcJU1dTVVNQX0FSQ0hfUkVHU19TSVpFCis3OgkubG9uZwlzYXZlX2xvd19yZWdzCis4OgkubG9uZwlzYXZlX3JlZ3MKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCmluZGV4IGQ2MDg1NTcuLjIwM2IxODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIG9iai15CTo9IHByb2JlLm8gY29tbW9uLm8KIGNvbW1vbi15CSs9ICQoYWRkcHJlZml4IC4uL3NoMy8sIGVudHJ5Lm8gZXgubykKIAorb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkJKz0gJChhZGRwcmVmaXggLi4vc2gzLywgc3dzdXNwLm8pCiBvYmotJChDT05GSUdfU0hfRlBVKQkJCSs9IGZwdS5vIHNvZnRmbG9hdC5vCiBvYmotJChDT05GSUdfU0hfU1RPUkVfUVVFVUVTKQkJKz0gc3EubwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggMmU0MjU3Mi4uM2QzYTNjNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19QRVJGX0NPVU5URVIgfAogCQkJCQkgIENQVV9IQVNfTExTQzsKIAkJYnJlYWs7CisJY2FzZSAweDQwMDQ6CisJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3ODY7CisJCWJvb3RfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OworCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKKwkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVSB8IENQVV9IQVNfUEVSRl9DT1VOVEVSIHwKKwkJCUNQVV9IQVNfTExTQyB8IENQVV9IQVNfUFRFQUVYOworCQlicmVhazsKIAljYXNlIDB4MzAwODoKIAkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKaW5kZXggZWM4ODQwMy4uYTFjODBkOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCkBAIC0yMSwxNyArMjEsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtNTAsMTMgKzQwLDEzIEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJCS5pcnFzCQk9IHsgMjMsIDIzLCAyMywgMCB9LAogCX0sIHsKICNlbmRpZgogCQkubWFwYmFzZQk9IDB4ZmZlODAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtODcsNDMgKzc3LDI3IEBACiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSTDAsIElSTDEsIElSTDIsIElSTDMsIC8qIG9ubHkgSVJMTSBtb2RlIHN1cHBvcnRlZCAqLwotCUhVREksIEdQSU9JLAotCURNQUNfRE1URTAsIERNQUNfRE1URTEsIERNQUNfRE1URTIsIERNQUNfRE1URTMsCi0JRE1BQ19ETVRFNCwgRE1BQ19ETVRFNSwgRE1BQ19ETVRFNiwgRE1BQ19ETVRFNywKLQlETUFDX0RNQUUsCisJSFVESSwgR1BJT0ksIERNQUMsCiAJUENJQzBfUENJU0VSUiwgUENJQzFfUENJRVJSLCBQQ0lDMV9QQ0lQV0RXTiwgUENJQzFfUENJUFdPTiwKIAlQQ0lDMV9QQ0lETUEwLCBQQ0lDMV9QQ0lETUExLCBQQ0lDMV9QQ0lETUEyLCBQQ0lDMV9QQ0lETUEzLAotCVRNVTMsIFRNVTQsIFRNVTAsIFRNVTEsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVNDSTFfRVJJLCBTQ0kxX1JYSSwgU0NJMV9UWEksIFNDSTFfVEVJLAotCVNDSUZfRVJJLCBTQ0lGX1JYSSwgU0NJRl9CUkksIFNDSUZfVFhJLAotCVdEVCwKLQlSRUZfUkNNSSwgUkVGX1JPVkksCisJVE1VMywgVE1VNCwgVE1VMCwgVE1VMSwgVE1VMiwgUlRDLCBTQ0kxLCBTQ0lGLCBXRFQsIFJFRiwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlETUFDLCBQQ0lDMSwgVE1VMiwgUlRDLCBTQ0kxLCBTQ0lGLCBSRUYsCisJUENJQzEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLCBJTlRDX1ZFQ1QoR1BJT0ksIDB4NjIwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNDSTFfRVJJLCAweDRlMCksIElOVENfVkVDVChTQ0kxX1JYSSwgMHg1MDApLAotCUlOVENfVkVDVChTQ0kxX1RYSSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJMV9URUksIDB4NTQwKSwKLQlJTlRDX1ZFQ1QoU0NJRl9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUZfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUZfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGX1RYSSwgMHg3NjApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTQ0kxLCAweDRlMCksIElOVENfVkVDVChTQ0kxLCAweDUwMCksCisJSU5UQ19WRUNUKFNDSTEsIDB4NTIwKSwgSU5UQ19WRUNUKFNDSTEsIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoU0NJRiwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRiwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGLCAweDc0MCksIElOVENfVkVDVChTQ0lGLCAweDc2MCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAotCUlOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLCBJTlRDX1ZFQ1QoUkVGX1JPVkksIDB4NWEwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChTQ0kxLCBTQ0kxX0VSSSwgU0NJMV9SWEksIFNDSTFfVFhJLCBTQ0kxX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGLCBTQ0lGX0VSSSwgU0NJRl9SWEksIFNDSUZfQlJJLCBTQ0lGX1RYSSksCi0JSU5UQ19HUk9VUChSRUYsIFJFRl9SQ01JLCBSRUZfUk9WSSksCisJSU5UQ19WRUNUKFJFRiwgMHg1ODApLCBJTlRDX1ZFQ1QoUkVGLCAweDVhMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTM2LDcgKzExMCw3IEBACiAJCQkJCQkgUENJQzEsIFBDSUMwX1BDSVNFUlIgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc1MCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3NTAiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogLyogU0g3NzUwLCBTSDc3NTBTLCBTSDc3NTEgYW5kIFNINzA5MSBhbGwgaGF2ZSA0LWNoYW5uZWwgRE1BIGNvbnRyb2xsZXJzICovCkBAIC0xNDUsMzkgKzExOSwyOCBAQAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSkKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfZG1hNFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKERNQUNfRE1URTAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUNfRE1URTEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDX0RNQUUsIDB4NmMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNfZG1hNFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RNVEUwLCBETUFDX0RNVEUxLCBETUFDX0RNVEUyLAotCQkgICBETUFDX0RNVEUzLCBETUFDX0RNQUUpLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2YzApLAogfTsKIAogc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19kbWE0LCAic2g3NzUwX2RtYTQiLAotCQkJIHZlY3RvcnNfZG1hNCwgZ3JvdXBzX2RtYTQsCisJCQkgdmVjdG9yc19kbWE0LCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKICNlbmRpZgogCiAvKiBTSDc3NTBSIGFuZCBTSDc3NTFSIGJvdGggaGF2ZSA4LWNoYW5uZWwgRE1BIGNvbnRyb2xsZXJzICovCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfZG1hOFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKERNQUNfRE1URTAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUNfRE1URTEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDX0RNVEU0LCAweDc4MCksIElOVENfVkVDVChETUFDX0RNVEU1LCAweDdhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTYsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUNfRE1URTcsIDB4N2UwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETUFFLCAweDZjMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzX2RtYThbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoRE1BQywgRE1BQ19ETVRFMCwgRE1BQ19ETVRFMSwgRE1BQ19ETVRFMiwKLQkJICAgRE1BQ19ETVRFMywgRE1BQ19ETVRFNCwgRE1BQ19ETVRFNSwKLQkJICAgRE1BQ19ETVRFNiwgRE1BQ19ETVRFNywgRE1BQ19ETUFFKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2NjApLAorCUlOVENfVkVDVChETUFDLCAweDY4MCksIElOVENfVkVDVChETUFDLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQywgMHg3ZTApLAorCUlOVENfVkVDVChETUFDLCAweDZjMCksCiB9OwogCiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2RtYTgsICJzaDc3NTBfZG1hOCIsCi0JCQkgdmVjdG9yc19kbWE4LCBncm91cHNfZG1hOCwKKwkJCSB2ZWN0b3JzX2RtYTgsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKaW5kZXggOGUzNDRlYy4uMWE5MjM2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQkrPSBzZXR1cC1zaDc3NzAubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJKz0gc2V0dXAtc2g3NzgwLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCSs9IHNldHVwLXNoNzc4NS5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQkrPSBzZXR1cC1zaDc3ODYubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJKz0gc2V0dXAtc2g3MzQzLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCSs9IHNldHVwLXNoNzcyMi5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQkrPSBzZXR1cC1zaDc3MjMubwpAQCAtMjEsNiArMjIsNyBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQk6PSBjbG9jay1zaDc3NzAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQk6PSBjbG9jay1zaDc3ODAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQk6PSBjbG9jay1zaDc3ODUubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBjbG9jay1zaDc3ODYubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQk6PSBjbG9jay1zaDc3MjIubwpAQCAtMzEsNiArMzMsNyBAQAogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJOj0gcGlubXV4LXNoNzcyMi5vCiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQk6PSBwaW5tdXgtc2g3NzIzLm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCTo9IHBpbm11eC1zaDc3ODUubworcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJOj0gcGlubXV4LXNoNzc4Ni5vCiAKIG9iai15CQkJKz0gJChjbG9jay15KQogb2JqLSQoQ09ORklHX1NNUCkJKz0gJChzbXAteSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0YTljMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKyAqCisgKiBTSDc3ODYgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBTSDc3ODUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IGlmY19kaXZpc29yc1tdID0geyAxLCAyLCA0LCAxIH07CitzdGF0aWMgaW50IHNmY19kaXZpc29yc1tdID0geyAxLCAxLCA0LCAxIH07CitzdGF0aWMgaW50IGJmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxMiwgMTYsIDEsCisJCQkgICAgIDI0LCAzMiwgMSwgMSwgMSwgMSwgMSwgMSB9Oworc3RhdGljIGludCBtZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Oworc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgMTYsIDEsCisJCQkgICAgICAyNCwgMzIsIDEsIDQ4LCAxLCAxLCAxLCAxIH07CisKK3N0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmXTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9IChjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X21vZHVsZV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gbW9kdWxlX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAxNikgJiAweDAwMGYpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfYnVzX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDI4KSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDc3ODZfY2xrX29wc1tdID0geworCSZzaDc3ODZfbWFzdGVyX2Nsa19vcHMsCisJJnNoNzc4Nl9tb2R1bGVfY2xrX29wcywKKwkmc2g3Nzg2X2J1c19jbGtfb3BzLAorCSZzaDc3ODZfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwlpZiAoaWR4IDwgQVJSQVlfU0laRShzaDc3ODZfY2xrX29wcykpCisJCSpvcHMgPSBzaDc3ODZfY2xrX29wc1tpZHhdOworfQorCitzdGF0aWMgdm9pZCBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAyMCkgJiAweDAwMDMpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc2ZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfc2h5d2F5X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBzaHl3YXlfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoNzc4Nl9zaHl3YXlfY2xrID0geworCS5uYW1lCQk9ICJzaHl3YXlfY2xrIiwKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJnNoNzc4Nl9zaHl3YXlfY2xrX29wcywKK307CisKK3N0YXRpYyB2b2lkIGRkcl9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDEyKSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9kZHJfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGRkcl9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X2Rkcl9jbGsgPSB7CisJLm5hbWUJCT0gImRkcl9jbGsiLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmc2g3Nzg2X2Rkcl9jbGtfb3BzLAorfTsKKworLyoKKyAqIEFkZGl0aW9uYWwgU0g3Nzg2LXNwZWNpZmljIG9uLWNoaXAgY2xvY2tzIHRoYXQgYXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUKKyAqIGNsb2NrIGZyYW1ld29yaworICovCitzdGF0aWMgc3RydWN0IGNsayAqc2g3Nzg2X29uY2hpcF9jbG9ja3NbXSA9IHsKKwkmc2g3Nzg2X3NoeXdheV9jbGssCisJJnNoNzc4Nl9kZHJfY2xrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3Nzg2X2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAibWFzdGVyX2NsayIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2g3Nzg2X29uY2hpcF9jbG9ja3MpOyBpKyspIHsKKwkJc3RydWN0IGNsayAqY2xrcCA9IHNoNzc4Nl9vbmNoaXBfY2xvY2tzW2ldOworCisJCWNsa3AtPnBhcmVudCA9IGNsazsKKwkJY2xrX3JlZ2lzdGVyKGNsa3ApOworCQljbGtfZW5hYmxlKGNsa3ApOworCX0KKworCS8qCisJICogTm93IHRoYXQgd2UgaGF2ZSB0aGUgcmVzdCBvZiB0aGUgY2xvY2tzIHJlZ2lzdGVyZWQsIHdlIG5lZWQgdG8KKwkgKiBmb3JjZSB0aGUgcGFyZW50IGNsb2NrIHRvIHByb3BhZ2F0ZSBzbyB0aGF0IHRoZXNlIGNsb2NrcyB3aWxsCisJICogYXV0b21hdGljYWxseSBmaWd1cmUgb3V0IHRoZWlyIHJhdGUuIFdlIGNoZWF0IGJ5IGhhbmRpbmcgdGhlCisJICogcGFyZW50IGNsb2NrIGl0cyBjdXJyZW50IHJhdGUgYW5kIGZvcmNpbmcgY2hpbGQgcHJvcGFnYXRpb24uCisJICovCisJY2xrX3NldF9yYXRlKGNsaywgY2xrX2dldF9yYXRlKGNsaykpOworCisJY2xrX3B1dChjbGspOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHNoNzc4Nl9jbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczYjM0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwpAQCAtMCwwICsxLDk1MCBAQAorLyoKKyAqIFNINzc4NiBQaW5tdXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIEJhc2VkIG9uIFNINzc4NSBwaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGNwdS9zaDc3ODYuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBLAorCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBLAorCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCVBDM19EQVRBLCBQQzJfREFUQSwgUEMxX0RBVEEsIFBDMF9EQVRBLAorCVBEN19EQVRBLCBQRDZfREFUQSwgUEQ1X0RBVEEsIFBENF9EQVRBLAorCVBEM19EQVRBLCBQRDJfREFUQSwgUEQxX0RBVEEsIFBEMF9EQVRBLAorCVBFN19EQVRBLCBQRTZfREFUQSwKKwlQRjdfREFUQSwgUEY2X0RBVEEsIFBGNV9EQVRBLCBQRjRfREFUQSwKKwlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSwKKwlQRzdfREFUQSwgUEc2X0RBVEEsIFBHNV9EQVRBLAorCVBIN19EQVRBLCBQSDZfREFUQSwgUEg1X0RBVEEsIFBINF9EQVRBLAorCVBIM19EQVRBLCBQSDJfREFUQSwgUEgxX0RBVEEsIFBIMF9EQVRBLAorCVBKN19EQVRBLCBQSjZfREFUQSwgUEo1X0RBVEEsIFBKNF9EQVRBLAorCVBKM19EQVRBLCBQSjJfREFUQSwgUEoxX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBBN19JTiwgUEE2X0lOLCBQQTVfSU4sIFBBNF9JTiwKKwlQQTNfSU4sIFBBMl9JTiwgUEExX0lOLCBQQTBfSU4sCisJUEI3X0lOLCBQQjZfSU4sIFBCNV9JTiwgUEI0X0lOLAorCVBCM19JTiwgUEIyX0lOLCBQQjFfSU4sIFBCMF9JTiwKKwlQQzdfSU4sIFBDNl9JTiwgUEM1X0lOLCBQQzRfSU4sCisJUEMzX0lOLCBQQzJfSU4sIFBDMV9JTiwgUEMwX0lOLAorCVBEN19JTiwgUEQ2X0lOLCBQRDVfSU4sIFBENF9JTiwKKwlQRDNfSU4sIFBEMl9JTiwgUEQxX0lOLCBQRDBfSU4sCisJUEU3X0lOLCBQRTZfSU4sCisJUEY3X0lOLCBQRjZfSU4sIFBGNV9JTiwgUEY0X0lOLAorCVBGM19JTiwgUEYyX0lOLCBQRjFfSU4sIFBGMF9JTiwKKwlQRzdfSU4sIFBHNl9JTiwgUEc1X0lOLAorCVBIN19JTiwgUEg2X0lOLCBQSDVfSU4sIFBINF9JTiwKKwlQSDNfSU4sIFBIMl9JTiwgUEgxX0lOLCBQSDBfSU4sCisJUEo3X0lOLCBQSjZfSU4sIFBKNV9JTiwgUEo0X0lOLAorCVBKM19JTiwgUEoyX0lOLCBQSjFfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sCisJUEE3X0lOX1BVLCBQQTZfSU5fUFUsIFBBNV9JTl9QVSwgUEE0X0lOX1BVLAorCVBBM19JTl9QVSwgUEEyX0lOX1BVLCBQQTFfSU5fUFUsIFBBMF9JTl9QVSwKKwlQQjdfSU5fUFUsIFBCNl9JTl9QVSwgUEI1X0lOX1BVLCBQQjRfSU5fUFUsCisJUEIzX0lOX1BVLCBQQjJfSU5fUFUsIFBCMV9JTl9QVSwgUEIwX0lOX1BVLAorCVBDN19JTl9QVSwgUEM2X0lOX1BVLCBQQzVfSU5fUFUsIFBDNF9JTl9QVSwKKwlQQzNfSU5fUFUsIFBDMl9JTl9QVSwgUEMxX0lOX1BVLCBQQzBfSU5fUFUsCisJUEQ3X0lOX1BVLCBQRDZfSU5fUFUsIFBENV9JTl9QVSwgUEQ0X0lOX1BVLAorCVBEM19JTl9QVSwgUEQyX0lOX1BVLCBQRDFfSU5fUFUsIFBEMF9JTl9QVSwKKwlQRTdfSU5fUFUsIFBFNl9JTl9QVSwKKwlQRjdfSU5fUFUsIFBGNl9JTl9QVSwgUEY1X0lOX1BVLCBQRjRfSU5fUFUsCisJUEYzX0lOX1BVLCBQRjJfSU5fUFUsIFBGMV9JTl9QVSwgUEYwX0lOX1BVLAorCVBHN19JTl9QVSwgUEc2X0lOX1BVLCBQRzVfSU5fUFUsCisJUEg3X0lOX1BVLCBQSDZfSU5fUFUsIFBINV9JTl9QVSwgUEg0X0lOX1BVLAorCVBIM19JTl9QVSwgUEgyX0lOX1BVLCBQSDFfSU5fUFUsIFBIMF9JTl9QVSwKKwlQSjdfSU5fUFUsIFBKNl9JTl9QVSwgUEo1X0lOX1BVLCBQSjRfSU5fUFUsCisJUEozX0lOX1BVLCBQSjJfSU5fUFUsIFBKMV9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUEE3X09VVCwgUEE2X09VVCwgUEE1X09VVCwgUEE0X09VVCwKKwlQQTNfT1VULCBQQTJfT1VULCBQQTFfT1VULCBQQTBfT1VULAorCVBCN19PVVQsIFBCNl9PVVQsIFBCNV9PVVQsIFBCNF9PVVQsCisJUEIzX09VVCwgUEIyX09VVCwgUEIxX09VVCwgUEIwX09VVCwKKwlQQzdfT1VULCBQQzZfT1VULCBQQzVfT1VULCBQQzRfT1VULAorCVBDM19PVVQsIFBDMl9PVVQsIFBDMV9PVVQsIFBDMF9PVVQsCisJUEQ3X09VVCwgUEQ2X09VVCwgUEQ1X09VVCwgUEQ0X09VVCwKKwlQRDNfT1VULCBQRDJfT1VULCBQRDFfT1VULCBQRDBfT1VULAorCVBFN19PVVQsIFBFNl9PVVQsCisJUEY3X09VVCwgUEY2X09VVCwgUEY1X09VVCwgUEY0X09VVCwKKwlQRjNfT1VULCBQRjJfT1VULCBQRjFfT1VULCBQRjBfT1VULAorCVBHN19PVVQsIFBHNl9PVVQsIFBHNV9PVVQsCisJUEg3X09VVCwgUEg2X09VVCwgUEg1X09VVCwgUEg0X09VVCwKKwlQSDNfT1VULCBQSDJfT1VULCBQSDFfT1VULCBQSDBfT1VULAorCVBKN19PVVQsIFBKNl9PVVQsIFBKNV9PVVQsIFBKNF9PVVQsCisJUEozX09VVCwgUEoyX09VVCwgUEoxX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQQTdfRk4sIFBBNl9GTiwgUEE1X0ZOLCBQQTRfRk4sCisJUEEzX0ZOLCBQQTJfRk4sIFBBMV9GTiwgUEEwX0ZOLAorCVBCN19GTiwgUEI2X0ZOLCBQQjVfRk4sIFBCNF9GTiwKKwlQQjNfRk4sIFBCMl9GTiwgUEIxX0ZOLCBQQjBfRk4sCisJUEM3X0ZOLCBQQzZfRk4sIFBDNV9GTiwgUEM0X0ZOLAorCVBDM19GTiwgUEMyX0ZOLCBQQzFfRk4sIFBDMF9GTiwKKwlQRDdfRk4sIFBENl9GTiwgUEQ1X0ZOLCBQRDRfRk4sCisJUEQzX0ZOLCBQRDJfRk4sIFBEMV9GTiwgUEQwX0ZOLAorCVBFN19GTiwgUEU2X0ZOLAorCVBGN19GTiwgUEY2X0ZOLCBQRjVfRk4sIFBGNF9GTiwKKwlQRjNfRk4sIFBGMl9GTiwgUEYxX0ZOLCBQRjBfRk4sCisJUEc3X0ZOLCBQRzZfRk4sIFBHNV9GTiwKKwlQSDdfRk4sIFBINl9GTiwgUEg1X0ZOLCBQSDRfRk4sCisJUEgzX0ZOLCBQSDJfRk4sIFBIMV9GTiwgUEgwX0ZOLAorCVBKN19GTiwgUEo2X0ZOLCBQSjVfRk4sIFBKNF9GTiwKKwlQSjNfRk4sIFBKMl9GTiwgUEoxX0ZOLAorCVAxTVNFTDE0XzAsIFAxTVNFTDE0XzEsCisJUDFNU0VMMTNfMCwgUDFNU0VMMTNfMSwKKwlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCVAxTVNFTDExXzAsIFAxTVNFTDExXzEsCisJUDFNU0VMMTBfMCwgUDFNU0VMMTBfMSwKKwlQMU1TRUw5XzAsIFAxTVNFTDlfMSwKKwlQMU1TRUw4XzAsIFAxTVNFTDhfMSwKKwlQMU1TRUw3XzAsIFAxTVNFTDdfMSwKKwlQMU1TRUw2XzAsIFAxTVNFTDZfMSwKKwlQMU1TRUw1XzAsIFAxTVNFTDVfMSwKKwlQMU1TRUw0XzAsIFAxTVNFTDRfMSwKKwlQMU1TRUwzXzAsIFAxTVNFTDNfMSwKKwlQMU1TRUwyXzAsIFAxTVNFTDJfMSwKKwlQMU1TRUwxXzAsIFAxTVNFTDFfMSwKKwlQMU1TRUwwXzAsIFAxTVNFTDBfMSwKKworCVAyTVNFTDE1XzAsIFAyTVNFTDE1XzEsCisJUDJNU0VMMTRfMCwgUDJNU0VMMTRfMSwKKwlQMk1TRUwxM18wLCBQMk1TRUwxM18xLAorCVAyTVNFTDEyXzAsIFAyTVNFTDEyXzEsCisJUDJNU0VMMTFfMCwgUDJNU0VMMTFfMSwKKwlQMk1TRUwxMF8wLCBQMk1TRUwxMF8xLAorCVAyTVNFTDlfMCwgUDJNU0VMOV8xLAorCVAyTVNFTDhfMCwgUDJNU0VMOF8xLAorCVAyTVNFTDdfMCwgUDJNU0VMN18xLAorCVAyTVNFTDZfMCwgUDJNU0VMNl8xLAorCVAyTVNFTDVfMCwgUDJNU0VMNV8xLAorCVAyTVNFTDRfMCwgUDJNU0VMNF8xLAorCVAyTVNFTDNfMCwgUDJNU0VMM18xLAorCVAyTVNFTDJfMCwgUDJNU0VMMl8xLAorCVAyTVNFTDFfMCwgUDJNU0VMMV8xLAorCVAyTVNFTDBfMCwgUDJNU0VMMF8xLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlDREVfTUFSSywKKwlFVEhfTUFHSUNfTUFSSywKKwlESVNQX01BUkssCisJRVRIX0xJTktfTUFSSywKKwlEUjVfTUFSSywKKwlFVEhfVFhfRVJfTUFSSywKKwlEUjRfTUFSSywKKwlFVEhfVFhfRU5fTUFSSywKKwlEUjNfTUFSSywKKwlFVEhfVFhEM19NQVJLLAorCURSMl9NQVJLLAorCUVUSF9UWEQyX01BUkssCisJRFIxX01BUkssCisJRVRIX1RYRDFfTUFSSywKKwlEUjBfTUFSSywKKwlFVEhfVFhEMF9NQVJLLAorCisJVlNZTkNfTUFSSywKKwlIU1BJX0NMS19NQVJLLAorCU9EREZfTUFSSywKKwlIU1BJX0NTX01BUkssCisJREc1X01BUkssCisJRVRIX01ESU9fTUFSSywKKwlERzRfTUFSSywKKwlFVEhfUlhfQ0xLX01BUkssCisJREczX01BUkssCisJRVRIX01EQ19NQVJLLAorCURHMl9NQVJLLAorCUVUSF9DT0xfTUFSSywKKwlERzFfTUFSSywKKwlFVEhfVFhfQ0xLX01BUkssCisJREcwX01BUkssCisJRVRIX0NSU19NQVJLLAorCisJRENMS0lOX01BUkssCisJSFNQSV9SWF9NQVJLLAorCUhTWU5DX01BUkssCisJSFNQSV9UWF9NQVJLLAorCURCNV9NQVJLLAorCUVUSF9SWEQzX01BUkssCisJREI0X01BUkssCisJRVRIX1JYRDJfTUFSSywKKwlEQjNfTUFSSywKKwlFVEhfUlhEMV9NQVJLLAorCURCMl9NQVJLLAorCUVUSF9SWEQwX01BUkssCisJREIxX01BUkssCisJRVRIX1JYX0RWX01BUkssCisJREIwX01BUkssCisJRVRIX1JYX0VSX01BUkssCisKKwlEQ0xLT1VUX01BUkssCisJU0NJRjFfU0xLX01BUkssCisJU0NJRjFfUlhEX01BUkssCisJU0NJRjFfVFhEX01BUkssCisJREFDSzFfTUFSSywKKwlCQUNLX01BUkssCisJRkFMRV9NQVJLLAorCURBQ0swX01BUkssCisJRkNMRV9NQVJLLAorCURSRVExX01BUkssCisJQlJFUV9NQVJLLAorCVVTQl9PVkMxX01BUkssCisJRFJFUTBfTUFSSywKKwlVU0JfT1ZDMF9NQVJLLAorCisJVVNCX1BFTkMxX01BUkssCisJVVNCX1BFTkMwX01BUkssCisKKwlIQUMxX1NET1VUX01BUkssCisJU1NJMV9TREFUQV9NQVJLLAorCVNESUYxQ01EX01BUkssCisJSEFDMV9TRElOX01BUkssCisJU1NJMV9TQ0tfTUFSSywKKwlTRElGMUNEX01BUkssCisJSEFDMV9TWU5DX01BUkssCisJU1NJMV9XU19NQVJLLAorCVNESUYxV1BfTUFSSywKKwlIQUMxX0JJVENMS19NQVJLLAorCVNTSTFfQ0xLX01BUkssCisJU0RJRjFDTEtfTUFSSywKKwlIQUMwX1NET1VUX01BUkssCisJU1NJMF9TREFUQV9NQVJLLAorCVNESUYxRDNfTUFSSywKKwlIQUMwX1NESU5fTUFSSywKKwlTU0kwX1NDS19NQVJLLAorCVNESUYxRDJfTUFSSywKKwlIQUMwX1NZTkNfTUFSSywKKwlTU0kwX1dTX01BUkssCisJU0RJRjFEMV9NQVJLLAorCUhBQzBfQklUQ0xLX01BUkssCisJU1NJMF9DTEtfTUFSSywKKwlTRElGMUQwX01BUkssCisKKwlTQ0lGM19TQ0tfTUFSSywKKwlTU0kyX1NEQVRBX01BUkssCisJU0NJRjNfUlhEX01BUkssCisJVENMS19NQVJLLAorCVNTSTJfU0NLX01BUkssCisJU0NJRjNfVFhEX01BUkssCisJSEFDX1JFU19NQVJLLAorCVNTSTJfV1NfTUFSSywKKworCURBQ0szX01BUkssCisJU0RJRjBDTURfTUFSSywKKwlEQUNLMl9NQVJLLAorCVNESUYwQ0RfTUFSSywKKwlEUkVRM19NQVJLLAorCVNESUYwV1BfTUFSSywKKwlTQ0lGMF9DVFNfTUFSSywKKwlEUkVRMl9NQVJLLAorCVNESUYwQ0xLX01BUkssCisJU0NJRjBfUlRTX01BUkssCisJSVJMN19NQVJLLAorCVNESUYwRDNfTUFSSywKKwlTQ0lGMF9TQ0tfTUFSSywKKwlJUkw2X01BUkssCisJU0RJRjBEMl9NQVJLLAorCVNDSUYwX1JYRF9NQVJLLAorCUlSTDVfTUFSSywKKwlTRElGMEQxX01BUkssCisJU0NJRjBfVFhEX01BUkssCisJSVJMNF9NQVJLLAorCVNESUYwRDBfTUFSSywKKworCVNDSUY1X1NDS19NQVJLLAorCUZSQl9NQVJLLAorCVNDSUY1X1JYRF9NQVJLLAorCUlPSVMxNl9NQVJLLAorCVNDSUY1X1RYRF9NQVJLLAorCUNFMkJfTUFSSywKKwlEUkFLM19NQVJLLAorCUNFMkFfTUFSSywKKwlTQ0lGNF9TQ0tfTUFSSywKKwlEUkFLMl9NQVJLLAorCVNTSTNfV1NfTUFSSywKKwlTQ0lGNF9SWERfTUFSSywKKwlEUkFLMV9NQVJLLAorCVNTSTNfU0RBVEFfTUFSSywKKwlGU1RBVFVTX01BUkssCisJU0NJRjRfVFhEX01BUkssCisJRFJBSzBfTUFSSywKKwlTU0kzX1NDS19NQVJLLAorCUZTRV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSBHUElPICovCisJUElOTVVYX0RBVEEoUEE3X0RBVEEsIFBBN19JTiwgUEE3X09VVCwgUEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTZfREFUQSwgUEE2X0lOLCBQQTZfT1VULCBQQTZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4sIFBBNV9PVVQsIFBBNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEE0X0RBVEEsIFBBNF9JTiwgUEE0X09VVCwgUEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTNfREFUQSwgUEEzX0lOLCBQQTNfT1VULCBQQTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4sIFBBMl9PVVQsIFBBMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEExX0RBVEEsIFBBMV9JTiwgUEExX09VVCwgUEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTBfREFUQSwgUEEwX0lOLCBQQTBfT1VULCBQQTBfSU5fUFUpLAorCisJLyogUEIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBCN19EQVRBLCBQQjdfSU4sIFBCN19PVVQsIFBCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNl9JTiwgUEI2X09VVCwgUEI2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjVfREFUQSwgUEI1X0lOLCBQQjVfT1VULCBQQjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNF9EQVRBLCBQQjRfSU4sIFBCNF9PVVQsIFBCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM19JTiwgUEIzX09VVCwgUEIzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjJfREFUQSwgUEIyX0lOLCBQQjJfT1VULCBQQjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMV9EQVRBLCBQQjFfSU4sIFBCMV9PVVQsIFBCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCMF9JTiwgUEIwX09VVCwgUEIwX0lOX1BVKSwKKworCS8qIFBDIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQzdfREFUQSwgUEM3X0lOLCBQQzdfT1VULCBQQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNl9EQVRBLCBQQzZfSU4sIFBDNl9PVVQsIFBDNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEM1X0RBVEEsIFBDNV9JTiwgUEM1X09VVCwgUEM1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzRfREFUQSwgUEM0X0lOLCBQQzRfT1VULCBQQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDM19EQVRBLCBQQzNfSU4sIFBDM19PVVQsIFBDM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEMyX0RBVEEsIFBDMl9JTiwgUEMyX09VVCwgUEMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzFfREFUQSwgUEMxX0lOLCBQQzFfT1VULCBQQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMF9EQVRBLCBQQzBfSU4sIFBDMF9PVVQsIFBDMF9JTl9QVSksCisKKwkvKiBQRCBHUElPICovCisJUElOTVVYX0RBVEEoUEQ3X0RBVEEsIFBEN19JTiwgUEQ3X09VVCwgUEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDZfREFUQSwgUEQ2X0lOLCBQRDZfT1VULCBQRDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENV9EQVRBLCBQRDVfSU4sIFBENV9PVVQsIFBENV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ0X0RBVEEsIFBENF9JTiwgUEQ0X09VVCwgUEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDNfREFUQSwgUEQzX0lOLCBQRDNfT1VULCBQRDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMl9EQVRBLCBQRDJfSU4sIFBEMl9PVVQsIFBEMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQxX0RBVEEsIFBEMV9JTiwgUEQxX09VVCwgUEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDBfREFUQSwgUEQwX0lOLCBQRDBfT1VULCBQRDBfSU5fUFUpLAorCisJLyogUEUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBFN19EQVRBLCBQRTdfSU4sIFBFN19PVVQsIFBFN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEU2X0RBVEEsIFBFNl9JTiwgUEU2X09VVCwgUEU2X0lOX1BVKSwKKworCS8qIFBGIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRjdfREFUQSwgUEY3X0lOLCBQRjdfT1VULCBQRjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNl9EQVRBLCBQRjZfSU4sIFBGNl9PVVQsIFBGNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEY1X0RBVEEsIFBGNV9JTiwgUEY1X09VVCwgUEY1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjRfREFUQSwgUEY0X0lOLCBQRjRfT1VULCBQRjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGM19EQVRBLCBQRjNfSU4sIFBGM19PVVQsIFBGM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEYyX0RBVEEsIFBGMl9JTiwgUEYyX09VVCwgUEYyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjFfREFUQSwgUEYxX0lOLCBQRjFfT1VULCBQRjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMF9EQVRBLCBQRjBfSU4sIFBGMF9PVVQsIFBGMF9JTl9QVSksCisKKwkvKiBQRyBHUElPICovCisJUElOTVVYX0RBVEEoUEc3X0RBVEEsIFBHN19JTiwgUEc3X09VVCwgUEc3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRzZfREFUQSwgUEc2X0lOLCBQRzZfT1VULCBQRzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHNV9EQVRBLCBQRzVfSU4sIFBHNV9PVVQsIFBHNV9JTl9QVSksCisKKwkvKiBQSCBHUElPICovCisJUElOTVVYX0RBVEEoUEg3X0RBVEEsIFBIN19JTiwgUEg3X09VVCwgUEg3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDZfREFUQSwgUEg2X0lOLCBQSDZfT1VULCBQSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINV9EQVRBLCBQSDVfSU4sIFBINV9PVVQsIFBINV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEg0X0RBVEEsIFBINF9JTiwgUEg0X09VVCwgUEg0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDNfREFUQSwgUEgzX0lOLCBQSDNfT1VULCBQSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMl9EQVRBLCBQSDJfSU4sIFBIMl9PVVQsIFBIMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEgxX0RBVEEsIFBIMV9JTiwgUEgxX09VVCwgUEgxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDBfREFUQSwgUEgwX0lOLCBQSDBfT1VULCBQSDBfSU5fUFUpLAorCisJLyogUEogR1BJTyAqLworCVBJTk1VWF9EQVRBKFBKN19EQVRBLCBQSjdfSU4sIFBKN19PVVQsIFBKN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEo2X0RBVEEsIFBKNl9JTiwgUEo2X09VVCwgUEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjVfREFUQSwgUEo1X0lOLCBQSjVfT1VULCBQSjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNF9EQVRBLCBQSjRfSU4sIFBKNF9PVVQsIFBKNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEozX0RBVEEsIFBKM19JTiwgUEozX09VVCwgUEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjJfREFUQSwgUEoyX0lOLCBQSjJfT1VULCBQSjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKMV9EQVRBLCBQSjFfSU4sIFBKMV9PVVQsIFBKMV9JTl9QVSksCisKKwkvKiBQQSBGTiAqLworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVBJTk1VWF9EQVRBKENERV9NQVJLLAkJUDFNU0VMMl8wLCBQQTdfRk4pLAorCVBJTk1VWF9EQVRBKERJU1BfTUFSSywJCVAxTVNFTDJfMCwgUEE2X0ZOKSwKKwlQSU5NVVhfREFUQShEUjVfTUFSSywJCVAxTVNFTDJfMCwgUEE1X0ZOKSwKKwlQSU5NVVhfREFUQShEUjRfTUFSSywJCVAxTVNFTDJfMCwgUEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEUjNfTUFSSywJCVAxTVNFTDJfMCwgUEEzX0ZOKSwKKwlQSU5NVVhfREFUQShEUjJfTUFSSywJCVAxTVNFTDJfMCwgUEEyX0ZOKSwKKwlQSU5NVVhfREFUQShEUjFfTUFSSywJCVAxTVNFTDJfMCwgUEExX0ZOKSwKKwlQSU5NVVhfREFUQShEUjBfTUFSSywJCVAxTVNFTDJfMCwgUEEwX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTUFHSUNfTUFSSywJUDFNU0VMMl8xLCBQQTdfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9MSU5LX01BUkssCVAxTVNFTDJfMSwgUEE2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhfRVJfTUFSSywJUDFNU0VMMl8xLCBQQTVfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9FTl9NQVJLLAlQMU1TRUwyXzEsIFBBNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDNfTUFSSywJUDFNU0VMMl8xLCBQQTNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQyX01BUkssCVAxTVNFTDJfMSwgUEEyX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEMV9NQVJLLAlQMU1TRUwyXzEsIFBBMV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDBfTUFSSywJUDFNU0VMMl8xLCBQQTBfRk4pLAorCisJLyogUEIgRk4gKi8KKwlQSU5NVVhfREFUQShWU1lOQ19NQVJLLAkJUDFNU0VMM18wLCBQQjdfRk4pLAorCVBJTk1VWF9EQVRBKE9EREZfTUFSSywJCVAxTVNFTDNfMCwgUEI2X0ZOKSwKKwlQSU5NVVhfREFUQShERzVfTUFSSywJCVAxTVNFTDJfMCwgUEI1X0ZOKSwKKwlQSU5NVVhfREFUQShERzRfTUFSSywJCVAxTVNFTDJfMCwgUEI0X0ZOKSwKKwlQSU5NVVhfREFUQShERzNfTUFSSywJCVAxTVNFTDJfMCwgUEIzX0ZOKSwKKwlQSU5NVVhfREFUQShERzJfTUFSSywJCVAxTVNFTDJfMCwgUEIyX0ZOKSwKKwlQSU5NVVhfREFUQShERzFfTUFSSywJCVAxTVNFTDJfMCwgUEIxX0ZOKSwKKwlQSU5NVVhfREFUQShERzBfTUFSSywJCVAxTVNFTDJfMCwgUEIwX0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX0NMS19NQVJLLAlQMU1TRUwzXzEsIFBCN19GTiksCisJUElOTVVYX0RBVEEoSFNQSV9DU19NQVJLLAlQMU1TRUwzXzEsIFBCNl9GTiksCisJUElOTVVYX0RBVEEoRVRIX01ESU9fTUFSSywJUDFNU0VMMl8xLCBQQjVfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWF9DTEtfTUFSSywJUDFNU0VMMl8xLCBQQjRfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9NRENfTUFSSywJUDFNU0VMMl8xLCBQQjNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9DT0xfTUFSSywJUDFNU0VMMl8xLCBQQjJfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9DTEtfTUFSSywJUDFNU0VMMl8xLCBQQjFfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9DUlNfTUFSSywJUDFNU0VMMl8xLCBQQjBfRk4pLAorCisJLyogUEMgRk4gKi8KKwlQSU5NVVhfREFUQShEQ0xLSU5fTUFSSywJUDFNU0VMM18wLCBQQzdfRk4pLAorCVBJTk1VWF9EQVRBKEhTWU5DX01BUkssCQlQMU1TRUwzXzAsIFBDNl9GTiksCisJUElOTVVYX0RBVEEoREI1X01BUkssCQlQMU1TRUwyXzAsIFBDNV9GTiksCisJUElOTVVYX0RBVEEoREI0X01BUkssCQlQMU1TRUwyXzAsIFBDNF9GTiksCisJUElOTVVYX0RBVEEoREIzX01BUkssCQlQMU1TRUwyXzAsIFBDM19GTiksCisJUElOTVVYX0RBVEEoREIyX01BUkssCQlQMU1TRUwyXzAsIFBDMl9GTiksCisJUElOTVVYX0RBVEEoREIxX01BUkssCQlQMU1TRUwyXzAsIFBDMV9GTiksCisJUElOTVVYX0RBVEEoREIwX01BUkssCQlQMU1TRUwyXzAsIFBDMF9GTiksCisKKwlQSU5NVVhfREFUQShIU1BJX1JYX01BUkssCVAxTVNFTDNfMSwgUEM3X0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX1RYX01BUkssCVAxTVNFTDNfMSwgUEM2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEM19NQVJLLAlQMU1TRUwyXzEsIFBDNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDJfTUFSSywJUDFNU0VMMl8xLCBQQzRfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQxX01BUkssCVAxTVNFTDJfMSwgUEMzX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEMF9NQVJLLAlQMU1TRUwyXzEsIFBDMl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYX0RWX01BUkssCVAxTVNFTDJfMSwgUEMxX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhfRVJfTUFSSywJUDFNU0VMMl8xLCBQQzBfRk4pLAorCisJLyogUEQgRk4gKi8KKwlQSU5NVVhfREFUQShEQ0xLT1VUX01BUkssCVBEN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0xLX01BUkssCVBENl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssCVBENV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfVFhEX01BUkssCVBENF9GTiksCisJUElOTVVYX0RBVEEoREFDSzFfTUFSSywJCVAxTVNFTDEzXzEsIFAxTVNFTDEyXzAsIFBEM19GTiksCisJUElOTVVYX0RBVEEoQkFDS19NQVJLLAkJUDFNU0VMMTNfMCwgUDFNU0VMMTJfMSwgUEQzX0ZOKSwKKwlQSU5NVVhfREFUQShGQUxFX01BUkssCQlQMU1TRUwxM18wLCBQMU1TRUwxMl8wLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0swX01BUkssCQlQMU1TRUwxNF8xLCBQRDJfRk4pLAorCVBJTk1VWF9EQVRBKEZDTEVfTUFSSywJCVAxTVNFTDE0XzAsIFBEMl9GTiksCisJUElOTVVYX0RBVEEoRFJFUTFfTUFSSywJCVAxTVNFTDEwXzAsIFAxTVNFTDlfMSwgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShCUkVRX01BUkssCQlQMU1TRUwxMF8xLCBQMU1TRUw5XzAsIFBEMV9GTiksCisJUElOTVVYX0RBVEEoVVNCX09WQzFfTUFSSywJUDFNU0VMMTBfMCwgUDFNU0VMOV8wLCBQRDFfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssCQlQMU1TRUwxMV8xLCBQRDBfRk4pLAorCVBJTk1VWF9EQVRBKFVTQl9PVkMwX01BUkssCVAxTVNFTDExXzAsIFBEMF9GTiksCisKKwkvKiBQRSBGTiAqLworCVBJTk1VWF9EQVRBKFVTQl9QRU5DMV9NQVJLLAlQRTdfRk4pLAorCVBJTk1VWF9EQVRBKFVTQl9QRU5DMF9NQVJLLAlQRTZfRk4pLAorCisJLyogUEYgRk4gKi8KKwlQSU5NVVhfREFUQShIQUMxX1NET1VUX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGN19GTiksCisJUElOTVVYX0RBVEEoSEFDMV9TRElOX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGNl9GTiksCisJUElOTVVYX0RBVEEoSEFDMV9TWU5DX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoSEFDMV9CSVRDTEtfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NET1VUX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGM19GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TRElOX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGMl9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TWU5DX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGMV9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9CSVRDTEtfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYwX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1NEQVRBX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGN19GTiksCisJUElOTVVYX0RBVEEoU1NJMV9TQ0tfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1dTX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoU1NJMV9DTEtfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1NEQVRBX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGM19GTiksCisJUElOTVVYX0RBVEEoU1NJMF9TQ0tfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYyX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1dTX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGMV9GTiksCisJUElOTVVYX0RBVEEoU1NJMF9DTEtfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYwX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUNNRF9NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjdfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxQ0RfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMVdQX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFDTEtfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQzX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGM19GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEMl9NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjJfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDFfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQwX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGMF9GTiksCisKKwkvKiBQRyBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUYzX1NDS19NQVJLLAlQMU1TRUw4XzAsIFBHN19GTiksCisJUElOTVVYX0RBVEEoU1NJMl9TREFUQV9NQVJLLAlQMU1TRUw4XzEsIFBHN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUlhEX01BUkssCVAxTVNFTDdfMCwgUDFNU0VMNl8wLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTJfU0NLX01BUkssCVAxTVNFTDdfMSwgUDFNU0VMNl8wLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFRDTEtfTUFSSywJCVAxTVNFTDdfMCwgUDFNU0VMNl8xLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1RYRF9NQVJLLAlQMU1TRUw1XzAsIFAxTVNFTDRfMCwgUEc1X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kyX1dTX01BUkssCVAxTVNFTDVfMSwgUDFNU0VMNF8wLCBQRzVfRk4pLAorCVBJTk1VWF9EQVRBKEhBQ19SRVNfTUFSSywJUDFNU0VMNV8wLCBQMU1TRUw0XzEsIFBHNV9GTiksCisKKwkvKiBQSCBGTiAqLworCVBJTk1VWF9EQVRBKERBQ0szX01BUkssCQlQMk1TRUw0XzAsIFBIN19GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDTURfTUFSSywJUDJNU0VMNF8xLCBQSDdfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0syX01BUkssCQlQMk1TRUw0XzAsIFBINl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDRF9NQVJLLAlQMk1TRUw0XzEsIFBINl9GTiksCisJUElOTVVYX0RBVEEoRFJFUTNfTUFSSywJCVAyTVNFTDRfMCwgUEg1X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMFdQX01BUkssCVAyTVNFTDRfMSwgUEg1X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLAkJUDJNU0VMM18wLCBQMk1TRUwyXzEsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDTEtfTUFSSywJUDJNU0VMM18xLCBQMk1TRUwyXzAsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfQ1RTX01BUkssCVAyTVNFTDNfMCwgUDJNU0VMMl8wLCBQSDRfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDNfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlRTX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKElSTDdfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDJfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDJfRk4pLAorCVBJTk1VWF9EQVRBKElSTDZfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDJfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDFfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlhEX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKElSTDVfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDBfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfVFhEX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDBfRk4pLAorCVBJTk1VWF9EQVRBKElSTDRfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDBfRk4pLAorCisJLyogUEogRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGNV9TQ0tfTUFSSywJUDJNU0VMMTFfMSwgUEo3X0ZOKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywJCVAyTVNFTDExXzAsIFBKN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUlhEX01BUkssCVAyTVNFTDEwXzAsIFBKNl9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssCVAyTVNFTDEwXzEsIFBKNl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfVFhEX01BUkssCVAyTVNFTDEwXzAsIFBKNV9GTiksCisJUElOTVVYX0RBVEEoQ0UyQl9NQVJLLAkJUDJNU0VMMTBfMSwgUEo1X0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLM19NQVJLLAkJUDJNU0VMN18wLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKENFMkFfTUFSSywJCVAyTVNFTDdfMSwgUEo0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9TQ0tfTUFSSywJUDJNU0VMOV8wLCBQMk1TRUw4XzAsIFBKM19GTiksCisJUElOTVVYX0RBVEEoRFJBSzJfTUFSSywJCVAyTVNFTDlfMCwgUDJNU0VMOF8xLCBQSjNfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfV1NfTUFSSywJUDJNU0VMOV8xLCBQMk1TRUw4XzAsIFBKM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUlhEX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8wLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKERSQUsxX01BUkssCQlQMk1TRUw2XzAsIFAyTVNFTDVfMSwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShGU1RBVFVTX01BUkssCVAyTVNFTDZfMCwgUDJNU0VMNV8wLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfU0RBVEFfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzEsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfVFhEX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8wLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKERSQUswX01BUkssCQlQMk1TRUw2XzAsIFAyTVNFTDVfMSwgUEoxX0ZOKSwKKwlQSU5NVVhfREFUQShGU0VfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8wLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfU0NLX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8xLCBQSjFfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQQSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEE3LCBQQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTYsIFBBNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNSwgUEE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE0LCBQQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTMsIFBBM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMiwgUEEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEExLCBQQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTAsIFBBMF9EQVRBKSwKKworCS8qIFBCICovCisJUElOTVVYX0dQSU8oR1BJT19QQjcsIFBCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNiwgUEI2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI1LCBQQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjQsIFBCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMywgUEIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIyLCBQQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjEsIFBCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMCwgUEIwX0RBVEEpLAorCisJLyogUEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BDNywgUEM3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM2LCBQQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzUsIFBDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNCwgUEM0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMzLCBQQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzIsIFBDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMSwgUEMxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMwLCBQQzBfREFUQSksCisKKwkvKiBQRCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEQ3LCBQRDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDYsIFBENl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENSwgUEQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ0LCBQRDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDMsIFBEM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMiwgUEQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxLCBQRDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDAsIFBEMF9EQVRBKSwKKworCS8qIFBFICovCisJUElOTVVYX0dQSU8oR1BJT19QRTUsIFBFN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNCwgUEU2X0RBVEEpLAorCisJLyogUEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BGNywgUEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY2LCBQRjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjUsIFBGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNCwgUEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYzLCBQRjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIsIFBGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMSwgUEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYwLCBQRjBfREFUQSksCisKKwkvKiBQRyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEc3LCBQRzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRzYsIFBHNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHNSwgUEc1X0RBVEEpLAorCisJLyogUEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BINywgUEg3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg2LCBQSDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDUsIFBINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINCwgUEg0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgzLCBQSDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDIsIFBIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMSwgUEgxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgwLCBQSDBfREFUQSksCisKKwkvKiBQSiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEo3LCBQSjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjYsIFBKNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNSwgUEo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo0LCBQSjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjMsIFBKM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMiwgUEoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEoxLCBQSjFfREFUQSksCisKKwkvKiBGTiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0RFLAkJQ0RFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01BR0lDLAkJRVRIX01BR0lDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRElTUCwJCURJU1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTElOSywJCUVUSF9MSU5LX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFI1LAkJRFI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYX0VSLAkJRVRIX1RYX0VSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFI0LAkJRFI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYX0VOLAkJRVRIX1RYX0VOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIzLAkJRFIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDMsCQlFVEhfVFhEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMiwJCURSMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQyLAkJRVRIX1RYRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjEsCQlEUjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMSwJCUVUSF9UWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIwLAkJRFIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDAsCQlFVEhfVFhEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZTWU5DLAkJVlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX0NMSywJCUhTUElfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fT0RERiwJCU9EREZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX0NTLAkJSFNQSV9DU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHNSwJCURHNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9NRElPLAkJRVRIX01ESU9fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzQsCQlERzRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfQ0xLLAkJRVRIX1JYX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMywJCURHM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9NREMsCQlFVEhfTURDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREcyLAkJREcyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX0NPTCwJCUVUSF9DT0xfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzEsCQlERzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfQ0xLLAkJRVRIX1RYX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMCwJCURHMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9DUlMsCQlFVEhfQ1JTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRENMS0lOLAkJRENMS0lOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9SWCwJCUhTUElfUlhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1lOQywJCUhTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9UWCwJCUhTUElfVFhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjUsCQlEQjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMywJCUVUSF9SWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREI0LAkJREI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDIsCQlFVEhfUlhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMywJCURCM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQxLAkJRVRIX1JYRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjIsCQlEQjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMCwJCUVUSF9SWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIxLAkJREIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYX0RWLAkJRVRIX1JYX0RWX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIwLAkJREIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYX0VSLAkJRVRIX1JYX0VSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRENMS09VVCwJCURDTEtPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9TTEssCQlTQ0lGMV9TTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9SWEQsCQlTQ0lGMV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsCQlTQ0lGMV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMSwJCURBQ0sxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQkFDSywJCUJBQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQUxFLAkJRkFMRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swLAkJREFDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0xFLAkJRkNMRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExLAkJRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUkVRLAkJQlJFUV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9PVkMxLAkJVVNCX09WQzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwJCURSRVEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX09WQzAsCQlVU0JfT1ZDMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9QRU5DMSwJCVVTQl9QRU5DMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9QRU5DMCwJCVVTQl9QRU5DMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfU0RPVVQsCQlIQUMxX1NET1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9TREFUQSwJCVNTSTFfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUNNRCwJCVNESUYxQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TRElOLAkJSEFDMV9TRElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9TQ0ssCQlTU0kxX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ0QsCQlTRElGMUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TWU5DLAkJSEFDMV9TWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9XUywJCVNTSTFfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMVdQLAkJU0RJRjFXUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfQklUQ0xLLAlIQUMxX0JJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfQ0xLLAkJU1NJMV9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUNMSywJCVNESUYxQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TRE9VVCwJCUhBQzBfU0RPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1NEQVRBLAkJU1NJMF9TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDMsCQlTRElGMUQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TRElOLAkJSEFDMF9TRElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9TQ0ssCQlTU0kwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDIsCQlTRElGMUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TWU5DLAkJSEFDMF9TWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9XUywJCVNTSTBfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQxLAkJU0RJRjFEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzBfQklUQ0xLLAlIQUMwX0JJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfQ0xLLAkJU1NJMF9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQwLAkJU0RJRjFEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1NDSywJCVNDSUYzX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfU0RBVEEsCQlTU0kyX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUlhELAkJU0NJRjNfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMSywJCVRDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kyX1NDSywJCVNTSTJfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfVFhELAkJU0NJRjNfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDX1JFUywJCUhBQ19SRVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kyX1dTLAkJU1NJMl9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0szLAkJREFDSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMENNRCwJCVNESUYwQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzIsCQlEQUNLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ0QsCQlTRElGMENEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTMsCQlEUkVRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwV1AsCQlTRElGMFdQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfQ1RTLAkJU0NJRjBfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTIsCQlEUkVRMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ0xLLAkJU0RJRjBDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SVFMsCQlTQ0lGMF9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw3LAkJSVJMN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDMsCQlTRElGMEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfU0NLLAkJU0NJRjBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNiwJCUlSTDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQyLAkJU0RJRjBEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JYRCwJCVNDSUYwX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDUsCQlJUkw1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMSwJCVNESUYwRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9UWEQsCQlTQ0lGMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw0LAkJSVJMNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDAsCQlTRElGMEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfU0NLLAkJU0NJRjVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlJCLAkJRlJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUlhELAkJU0NJRjVfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LAkJSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfVFhELAkJU0NJRjVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQiwJCUNFMkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMywJCURSQUszX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQSwJCUNFMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9TQ0ssCQlTQ0lGNF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMiwJCURSQUsyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJM19XUywJCVNTSTNfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9SWEQsCQlTQ0lGNF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMSwJCURSQUsxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJM19TREFUQSwJCVNTSTNfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GU1RBVFVTLAkJRlNUQVRVU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1RYRCwJCVNDSUY0X1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUswLAkJRFJBSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1NDSywJCVNTSTNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNFLAkJRlNFX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhmZmNjMDAwMCwgMTYsIDIpIHsKKwkJUEE3X0ZOLCBQQTdfT1VULCBQQTdfSU4sIFBBN19JTl9QVSwKKwkJUEE2X0ZOLCBQQTZfT1VULCBQQTZfSU4sIFBBNl9JTl9QVSwKKwkJUEE1X0ZOLCBQQTVfT1VULCBQQTVfSU4sIFBBNV9JTl9QVSwKKwkJUEE0X0ZOLCBQQTRfT1VULCBQQTRfSU4sIFBBNF9JTl9QVSwKKwkJUEEzX0ZOLCBQQTNfT1VULCBQQTNfSU4sIFBBM19JTl9QVSwKKwkJUEEyX0ZOLCBQQTJfT1VULCBQQTJfSU4sIFBBMl9JTl9QVSwKKwkJUEExX0ZOLCBQQTFfT1VULCBQQTFfSU4sIFBBMV9JTl9QVSwKKwkJUEEwX0ZOLCBQQTBfT1VULCBQQTBfSU4sIFBBMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSIiwgMHhmZmNjMDAwMiwgMTYsIDIpIHsKKwkJUEI3X0ZOLCBQQjdfT1VULCBQQjdfSU4sIFBCN19JTl9QVSwKKwkJUEI2X0ZOLCBQQjZfT1VULCBQQjZfSU4sIFBCNl9JTl9QVSwKKwkJUEI1X0ZOLCBQQjVfT1VULCBQQjVfSU4sIFBCNV9JTl9QVSwKKwkJUEI0X0ZOLCBQQjRfT1VULCBQQjRfSU4sIFBCNF9JTl9QVSwKKwkJUEIzX0ZOLCBQQjNfT1VULCBQQjNfSU4sIFBCM19JTl9QVSwKKwkJUEIyX0ZOLCBQQjJfT1VULCBQQjJfSU4sIFBCMl9JTl9QVSwKKwkJUEIxX0ZOLCBQQjFfT1VULCBQQjFfSU4sIFBCMV9JTl9QVSwKKwkJUEIwX0ZOLCBQQjBfT1VULCBQQjBfSU4sIFBCMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhmZmNjMDAwNCwgMTYsIDIpIHsKKwkJUEM3X0ZOLCBQQzdfT1VULCBQQzdfSU4sIFBDN19JTl9QVSwKKwkJUEM2X0ZOLCBQQzZfT1VULCBQQzZfSU4sIFBDNl9JTl9QVSwKKwkJUEM1X0ZOLCBQQzVfT1VULCBQQzVfSU4sIFBDNV9JTl9QVSwKKwkJUEM0X0ZOLCBQQzRfT1VULCBQQzRfSU4sIFBDNF9JTl9QVSwKKwkJUEMzX0ZOLCBQQzNfT1VULCBQQzNfSU4sIFBDM19JTl9QVSwKKwkJUEMyX0ZOLCBQQzJfT1VULCBQQzJfSU4sIFBDMl9JTl9QVSwKKwkJUEMxX0ZOLCBQQzFfT1VULCBQQzFfSU4sIFBDMV9JTl9QVSwKKwkJUEMwX0ZOLCBQQzBfT1VULCBQQzBfSU4sIFBDMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhmZmNjMDAwNiwgMTYsIDIpIHsKKwkJUEQ3X0ZOLCBQRDdfT1VULCBQRDdfSU4sIFBEN19JTl9QVSwKKwkJUEQ2X0ZOLCBQRDZfT1VULCBQRDZfSU4sIFBENl9JTl9QVSwKKwkJUEQ1X0ZOLCBQRDVfT1VULCBQRDVfSU4sIFBENV9JTl9QVSwKKwkJUEQ0X0ZOLCBQRDRfT1VULCBQRDRfSU4sIFBENF9JTl9QVSwKKwkJUEQzX0ZOLCBQRDNfT1VULCBQRDNfSU4sIFBEM19JTl9QVSwKKwkJUEQyX0ZOLCBQRDJfT1VULCBQRDJfSU4sIFBEMl9JTl9QVSwKKwkJUEQxX0ZOLCBQRDFfT1VULCBQRDFfSU4sIFBEMV9JTl9QVSwKKwkJUEQwX0ZOLCBQRDBfT1VULCBQRDBfSU4sIFBEMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSIiwgMHhmZmNjMDAwOCwgMTYsIDIpIHsKKwkJUEU3X0ZOLCBQRTdfT1VULCBQRTdfSU4sIFBFN19JTl9QVSwKKwkJUEU2X0ZOLCBQRTZfT1VULCBQRTZfSU4sIFBFNl9JTl9QVSwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4ZmZjYzAwMGEsIDE2LCAyKSB7CisJCVBGN19GTiwgUEY3X09VVCwgUEY3X0lOLCBQRjdfSU5fUFUsCisJCVBGNl9GTiwgUEY2X09VVCwgUEY2X0lOLCBQRjZfSU5fUFUsCisJCVBGNV9GTiwgUEY1X09VVCwgUEY1X0lOLCBQRjVfSU5fUFUsCisJCVBGNF9GTiwgUEY0X09VVCwgUEY0X0lOLCBQRjRfSU5fUFUsCisJCVBGM19GTiwgUEYzX09VVCwgUEYzX0lOLCBQRjNfSU5fUFUsCisJCVBGMl9GTiwgUEYyX09VVCwgUEYyX0lOLCBQRjJfSU5fUFUsCisJCVBGMV9GTiwgUEYxX09VVCwgUEYxX0lOLCBQRjFfSU5fUFUsCisJCVBGMF9GTiwgUEYwX09VVCwgUEYwX0lOLCBQRjBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4ZmZjYzAwMGMsIDE2LCAyKSB7CisJCVBHN19GTiwgUEc3X09VVCwgUEc3X0lOLCBQRzdfSU5fUFUsCisJCVBHNl9GTiwgUEc2X09VVCwgUEc2X0lOLCBQRzZfSU5fUFUsCisJCVBHNV9GTiwgUEc1X09VVCwgUEc1X0lOLCBQRzVfSU5fUFUsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGZmY2MwMDBlLCAxNiwgMikgeworCQlQSDdfRk4sIFBIN19PVVQsIFBIN19JTiwgUEg3X0lOX1BVLAorCQlQSDZfRk4sIFBINl9PVVQsIFBINl9JTiwgUEg2X0lOX1BVLAorCQlQSDVfRk4sIFBINV9PVVQsIFBINV9JTiwgUEg1X0lOX1BVLAorCQlQSDRfRk4sIFBINF9PVVQsIFBINF9JTiwgUEg0X0lOX1BVLAorCQlQSDNfRk4sIFBIM19PVVQsIFBIM19JTiwgUEgzX0lOX1BVLAorCQlQSDJfRk4sIFBIMl9PVVQsIFBIMl9JTiwgUEgyX0lOX1BVLAorCQlQSDFfRk4sIFBIMV9PVVQsIFBIMV9JTiwgUEgxX0lOX1BVLAorCQlQSDBfRk4sIFBIMF9PVVQsIFBIMF9JTiwgUEgwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGZmY2MwMDEwLCAxNiwgMikgeworCQlQSjdfRk4sIFBKN19PVVQsIFBKN19JTiwgUEo3X0lOX1BVLAorCQlQSjZfRk4sIFBKNl9PVVQsIFBKNl9JTiwgUEo2X0lOX1BVLAorCQlQSjVfRk4sIFBKNV9PVVQsIFBKNV9JTiwgUEo1X0lOX1BVLAorCQlQSjRfRk4sIFBKNF9PVVQsIFBKNF9JTiwgUEo0X0lOX1BVLAorCQlQSjNfRk4sIFBKM19PVVQsIFBKM19JTiwgUEozX0lOX1BVLAorCQlQSjJfRk4sIFBKMl9PVVQsIFBKMl9JTiwgUEoyX0lOX1BVLAorCQlQSjFfRk4sIFBKMV9PVVQsIFBKMV9JTiwgUEoxX0lOX1BVLAorCQkwLCAwLCAwLCAwLCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQMU1TRUxSIiwgMHhmZmNjMDA4MCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUDFNU0VMMTRfMCwgUDFNU0VMMTRfMSwKKwkJUDFNU0VMMTNfMCwgUDFNU0VMMTNfMSwKKwkJUDFNU0VMMTJfMCwgUDFNU0VMMTJfMSwKKwkJUDFNU0VMMTFfMCwgUDFNU0VMMTFfMSwKKwkJUDFNU0VMMTBfMCwgUDFNU0VMMTBfMSwKKwkJUDFNU0VMOV8wLCAgUDFNU0VMOV8xLAorCQlQMU1TRUw4XzAsICBQMU1TRUw4XzEsCisJCVAxTVNFTDdfMCwgIFAxTVNFTDdfMSwKKwkJUDFNU0VMNl8wLCAgUDFNU0VMNl8xLAorCQlQMU1TRUw1XzAsICBQMU1TRUw1XzEsCisJCVAxTVNFTDRfMCwgIFAxTVNFTDRfMSwKKwkJUDFNU0VMM18wLCAgUDFNU0VMM18xLAorCQlQMU1TRUwyXzAsICBQMU1TRUwyXzEsCisJCVAxTVNFTDFfMCwgIFAxTVNFTDFfMSwKKwkJUDFNU0VMMF8wLCAgUDFNU0VMMF8xIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlAyTVNFTFIiLCAweGZmY2MwMDgyLCAxNiwgMSkgeworCQlQMk1TRUwxNV8wLCBQMk1TRUwxNV8xLAorCQlQMk1TRUwxNF8wLCBQMk1TRUwxNF8xLAorCQlQMk1TRUwxM18wLCBQMk1TRUwxM18xLAorCQlQMk1TRUwxMl8wLCBQMk1TRUwxMl8xLAorCQlQMk1TRUwxMV8wLCBQMk1TRUwxMV8xLAorCQlQMk1TRUwxMF8wLCBQMk1TRUwxMF8xLAorCQlQMk1TRUw5XzAsICBQMk1TRUw5XzEsCisJCVAyTVNFTDhfMCwgIFAyTVNFTDhfMSwKKwkJUDJNU0VMN18wLCAgUDJNU0VMN18xLAorCQlQMk1TRUw2XzAsICBQMk1TRUw2XzEsCisJCVAyTVNFTDVfMCwgIFAyTVNFTDVfMSwKKwkJUDJNU0VMNF8wLCAgUDJNU0VMNF8xLAorCQlQMk1TRUwzXzAsICBQMk1TRUwzXzEsCisJCVAyTVNFTDJfMCwgIFAyTVNFTDJfMSwKKwkJUDJNU0VMMV8wLCAgUDJNU0VMMV8xLAorCQlQMk1TRUwwXzAsICBQMk1TRUwwXzEgfQorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHBpbm11eF9kYXRhX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEFEUiIsIDB4ZmZjYzAwMjAsIDgpIHsKKwkJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSIiwgMHhmZmNjMDAyMiwgOCkgeworCQlQQjdfREFUQSwgUEI2X0RBVEEsIFBCNV9EQVRBLCBQQjRfREFUQSwKKwkJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGZmY2MwMDI0LCA4KSB7CisJCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCQlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4ZmZjYzAwMjYsIDgpIHsKKwkJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJCVBEM19EQVRBLCBQRDJfREFUQSwgUEQxX0RBVEEsIFBEMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRURSIiwgMHhmZmNjMDAyOCwgOCkgeworCQlQRTdfREFUQSwgUEU2X0RBVEEsCisJCTAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFIiLCAweGZmY2MwMDJhLCA4KSB7CisJCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCQlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEdEUiIsIDB4ZmZjYzAwMmMsIDgpIHsKKwkJUEc3X0RBVEEsIFBHNl9EQVRBLCBQRzVfREFUQSwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4ZmZjYzAwMmUsIDgpIHsKKwkJUEg3X0RBVEEsIFBINl9EQVRBLCBQSDVfREFUQSwgUEg0X0RBVEEsCisJCVBIM19EQVRBLCBQSDJfREFUQSwgUEgxX0RBVEEsIFBIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhmZmNjMDAzMCwgOCkgeworCQlQSjdfREFUQSwgUEo2X0RBVEEsIFBKNV9EQVRBLCBQSjRfREFUQSwKKwkJUEozX0RBVEEsIFBKMl9EQVRBLCBQSjFfREFUQSwgMCB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzc4Nl9waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3ODZfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fRlNFLAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3Nzg2X3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCmluZGV4IDRmZjRkYzYuLmMxNTQ5MzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpaWMwX3Jlc291cmNlc1tdID0gewpAQCAtMTQwLDYgKzE0MSwzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShqcHVfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTE3NSw2ICsyMDgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM0M19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmaWljMF9kZXZpY2UsCiAJJmlpYzFfZGV2aWNlLAogCSZzY2lfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwppbmRleCA4MzlhZTk3Li45M2VjZjhlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaWljX3Jlc291cmNlc1tdID0gewpAQCAtMTQ3LDYgKzE0OCwzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2ZXUxX3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCkBAIC0xNjcsNiArMjAwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczNjZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJmlpY19kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCiAJJnVzYl9ob3N0X2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggNTE0NmFmYy4uMGU1ZDIwNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCkBAIC0xNzYsNiArMTc3LDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGpwdV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMjA5LDYgKzI0Miw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZ1c2JmX2RldmljZSwKIAkmaWljX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKaW5kZXggODQ5NzcwZC4uNTMzOGRhYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCkBAIC0xMDAsNiArMTAxLDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZldTFfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMDAwMDAsCkBAIC0yMjEsNiArMjU0LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJmlpY19kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCmluZGV4IDNjNWI2MjkuLmJkZjBmNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFlvc2hpaGlybyBTaGltb2RhCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBOb2J1aGlybyBJd2FtYXRzdQorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgTm9idWhpcm8gSXdhbWF0c3UKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMjIsMTggKzIyLDggQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLwotCQkuc3RhcnQJPSAyMCwKKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KKwkJLnN0YXJ0ICA9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTUwLDE3ICs0MCwxNyBAQAogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmUwODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNzYsIDc3LCA3OSwgNzggfSwKKwkJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxMDQsIDEwNSwgMTA3LCAxMDYgfSwKKwkJLmlycXMJCT0geyAxMDQsIDEwNCwgMTA0LCAxMDQgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMTQ4LDkzICsxMzgsNjUgQEAKIAlJUkxfSEhMTCwgSVJMX0hITEgsIElSTF9ISEhMLAogCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLCBMQ0RDLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsCi0JSUlDMCwgSUlDMSwKLQlDTVQsCi0JR0VJTlQwLCBHRUlOVDEsIEdFSU5UMiwKLQlIQUMsCi0JUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwKLQlQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDAsCi0JU1RJRjAsIFNUSUYxLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTSU9GMCwgU0lPRjEsIFNJT0YyLAotCVVTQkgsIFVTQkZJMCwgVVNCRkkxLAotCVRQVSwgUENDLAotCU1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFksCi0JU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQsCisJUlRDLCBXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgTENEQywgRE1BQywgU0NJRjAsIElJQzAsIElJQzEsIENNVCwgR0VUSEVSLCBIQUMsCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU1RJRjAsIFNUSUYxLCBTQ0lGMSwgU0lPRjAsIFNJT0YxLCBTSU9GMiwKKwlVU0JILCBVU0JGLCBUUFUsIFBDQywgTU1DSUYsIFNJTSwKIAlUTVUzLCBUTVU0LCBUTVU1LCBBREMsIFNTSTAsIFNTSTEsIFNTSTIsIFNTSTMsCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJLAotCUdQSU9fQ0gwLCBHUElPX0NIMSwgR1BJT19DSDIsIEdQSU9fQ0gzLAorCVNDSUYyLCBHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JVE1VMDEyLCBUTVUzNDUsIFJUQywgRE1BQywgU0NJRjAsIEdFVEhFUiwgUENJQzUsCi0JU0NJRjEsIFVTQkYsIE1NQ0lGLCBTSU0sIFNDSUYyLCBHUElPLAorCVRNVTAxMiwgVE1VMzQ1LAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksIElOVENfVkVDVChUTVUwLCAweDU4MCksCiAJSU5UQ19WRUNUKFRNVTEsIDB4NWEwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwKIAlJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg1ZTApLCBJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAogCUlOVENfVkVDVChMQ0RDLCAweDYyMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNQUUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4NzYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDc4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2NjApLAorCUlOVENfVkVDVChETUFDLCAweDY4MCksIElOVENfVkVDVChETUFDLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChETUFDLCAweDc4MCksIElOVENfVkVDVChETUFDLCAweDdhMCksCiAJSU5UQ19WRUNUKElJQzAsIDB4OEEwKSwgSU5UQ19WRUNUKElJQzEsIDB4OEMwKSwKLQlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChHRUlOVDAsIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoR0VJTlQxLCAweDk0MCksIElOVENfVkVDVChHRUlOVDIsIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChHRVRIRVIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoR0VUSEVSLCAweDk0MCksIElOVENfVkVDVChHRVRIRVIsIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoSEFDLCAweDk4MCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKIAlJTlRDX1ZFQ1QoU1RJRjAsIDB4YjQwKSwgSU5UQ19WRUNUKFNUSUYxLCAweGI2MCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweGJhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweGJlMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGI4MCksIElOVENfVkVDVChTQ0lGMSwgMHhiYTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmUwKSwKIAlJTlRDX1ZFQ1QoU0lPRjAsIDB4YzAwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGMyMCksCi0JSU5UQ19WRUNUKFVTQkgsIDB4YzYwKSwgSU5UQ19WRUNUKFVTQkZJMCwgMHhjODApLAotCUlOVENfVkVDVChVU0JGSTEsIDB4Y2EwKSwKKwlJTlRDX1ZFQ1QoVVNCSCwgMHhjNjApLCBJTlRDX1ZFQ1QoVVNCRiwgMHhjODApLAorCUlOVENfVkVDVChVU0JGLCAweGNhMCksCiAJSU5UQ19WRUNUKFRQVSwgMHhjYzApLCBJTlRDX1ZFQ1QoUENDLCAweGNlMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0ZTVEFULCAweGQwMCksIElOVENfVkVDVChNTUNJRl9UUkFOLCAweGQyMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0VSUiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUZfRlJEWSwgMHhkNjApLAotCUlOVENfVkVDVChTSU1fRVJJLCAweGQ4MCksIElOVENfVkVDVChTSU1fUlhJLCAweGRhMCksCi0JSU5UQ19WRUNUKFNJTV9UWEksIDB4ZGMwKSwgSU5UQ19WRUNUKFNJTV9URU5ELCAweGRlMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweGQ4MCksIElOVENfVkVDVChTSU0sIDB4ZGEwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweGRjMCksIElOVENfVkVDVChTSU0sIDB4ZGUwKSwKIAlJTlRDX1ZFQ1QoVE1VMywgMHhlMDApLCBJTlRDX1ZFQ1QoVE1VNCwgMHhlMjApLAogCUlOVENfVkVDVChUTVU1LCAweGU0MCksIElOVENfVkVDVChBREMsIDB4ZTYwKSwKIAlJTlRDX1ZFQ1QoU1NJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhlYTApLAogCUlOVENfVkVDVChTU0kyLCAweGVjMCksIElOVENfVkVDVChTU0kzLCAweGVlMCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHhmMDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweGYyMCksCi0JSU5UQ19WRUNUKFNDSUYyX0JSSSwgMHhmNDApLCBJTlRDX1ZFQ1QoU0NJRjJfVFhJLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9fQ0gwLCAweGY4MCksIElOVENfVkVDVChHUElPX0NIMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPX0NIMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT19DSDMsIDB4ZmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjAwKSwgSU5UQ19WRUNUKFNDSUYyLCAweGYyMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweGY0MCksIElOVENfVkVDVChTQ0lGMiwgMHhmNjApLAorCUlOVENfVkVDVChHUElPLCAweGY4MCksIElOVENfVkVDVChHUElPLCAweGZhMCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmUwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoVE1VMDEyLCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJKSwKIAlJTlRDX0dST1VQKFRNVTM0NSwgVE1VMywgVE1VNCwgVE1VNSksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoRE1BQywgRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwKLQkJICAgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKEdFVEhFUiwgR0VJTlQwLCBHRUlOVDEsIEdFSU5UMiksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoVVNCRiwgVVNCRkkwLCBVU0JGSTEpLAotCUlOVENfR1JPVVAoTU1DSUYsIE1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFkpLAotCUlOVENfR1JPVVAoU0lNLCBTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9fQ0gwLCBHUElPX0NIMSwgR1BJT19DSDIsIEdQSU9fQ0gzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCmluZGV4IGZiODIwMGMuLjZmNzIyN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCkBAIC0yMCwxNyArMjAsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtNDgsMTIgKzM4LDEyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTkwLDgyICs4MCw1NSBAQAogCUlSTF9ISExMLCBJUkxfSEhMSCwgSVJMX0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCi0JSFVESSwKLQlETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLCBETUFDMF9ETUlOVDMsIERNQUMwX0RNQUUsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCURNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywKLQlDTVQsIEhBQywKLQlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELAotCVBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JU0lPRiwgSFNQSSwKLQlNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZLAotCURNQUMxX0RNSU5UOCwgRE1BQzFfRE1JTlQ5LCBETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExLAotCVRNVTMsIFRNVTQsIFRNVTUsCi0JU1NJLAotCUZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEsCi0JR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzLAorCVJUQywgV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAorCUhVREksIERNQUMwLCBTQ0lGMCwgRE1BQzEsIENNVCwgSEFDLAorCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsIFBDSUM1LAorCVNDSUYxLCBTSU9GLCBIU1BJLCBNTUNJRiwgVE1VMywgVE1VNCwgVE1VNSwgU1NJLCBGTENUTCwJR1BJTywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KIAotCVJUQywgVE1VMDEyLCBETUFDMCwgU0NJRjAsIERNQUM0NSwgRE1BQzEsCi0JUENJQzUsIFNDSUYxLCBNTUNJRiwgVE1VMzQ1LCBGTENUTCwgR1BJTywKKwlUTVUwMTIsCVRNVTM0NSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChUTVUwLCAweDU4MCksIElOVENfVkVDVChUTVUxLCAweDVhMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NWUwKSwKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDIsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDMF9ETUFFLCAweDZjMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDc2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UNCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ1LCAweDdhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UNiwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ3LCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY0MCksIElOVENfVkVDVChETUFDMCwgMHg2NjApLAorCUlOVENfVkVDVChETUFDMCwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChETUFDMCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUMxLCAweDdlMCksCiAJSU5UQ19WRUNUKENNVCwgMHg5MDApLCBJTlRDX1ZFQ1QoSEFDLCAweDk4MCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweGJhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweGJlMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJhMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGJjMCksIElOVENfVkVDVChTQ0lGMSwgMHhiZTApLAogCUlOVENfVkVDVChTSU9GLCAweGMwMCksIElOVENfVkVDVChIU1BJLCAweGM4MCksCi0JSU5UQ19WRUNUKE1NQ0lGX0ZTVEFULCAweGQwMCksIElOVENfVkVDVChNTUNJRl9UUkFOLCAweGQyMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0VSUiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUZfRlJEWSwgMHhkNjApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDgsIDB4ZDgwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UOSwgMHhkYTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDEwLCAweGRjMCksIElOVENfVkVDVChETUFDMV9ETUlOVDExLCAweGRlMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ZDgwKSwgSU5UQ19WRUNUKERNQUMxLCAweGRhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweGRjMCksIElOVENfVkVDVChETUFDMSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwKIAlJTlRDX1ZFQ1QoU1NJLCAweGU4MCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMU1RFLCAweGYwMCksIElOVENfVkVDVChGTENUTF9GTEVORCwgMHhmMjApLAotCUlOVENfVkVDVChGTENUTF9GTFRSUTAsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMSwgMHhmNjApLAotCUlOVENfVkVDVChHUElPSTAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9JMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPSTIsIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU9JMywgMHhmZTApLAorCUlOVENfVkVDVChGTENUTCwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAogCUlOVENfR1JPVVAoVE1VMDEyLCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLAotCQkgICBETUFDMF9ETUlOVDMsIERNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsCi0JCSAgIERNQUMxX0RNSU5UOSwgRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoTU1DSUYsIE1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsCi0JCSAgIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCAzMGJhYTYzLi5kODA4MDJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtMjAsMTggKzIwLDEzIEBACiAJCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZWIwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0NCwgNDUsIDQ3LCA0NiB9LAotCX0sCi0KLQkvKgotCSAqIFRoZSByZXN0IG9mIHRoZXNlIGFsbCBoYXZlIG11bHRpcGxleGVkIElSUXMKLQkgKi8KLQl7CisJCS5pcnFzCQk9IHsgNDQsIDQ0LCA0NCwgNDQgfSwKKwl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmVjMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCkBAIC05MSwzMyArODYsMTkgQEAKIAlJUkw0X0hITEwsIElSTDRfSEhMSCwgSVJMNF9ISEhMLAogCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKLQlXRFQsCi0JVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywKLQlETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCURNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsIERNQUMxX0RNSU5UOSwKLQlETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExLCBETUFDMV9ETUFFLAotCUhTUEksCisJV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAorCUhVREksIERNQUMwLCBTQ0lGMCwgU0NJRjEsIERNQUMxLCBIU1BJLAogCVNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAotCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsCi0JUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwLAotCVNJT0YsCi0JTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSwKLQlEVSwKLQlHRFRBX0dBQ0xJLCBHRFRBX0dBTUNJLCBHRFRBX0dBRVJJLAorCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsIFBDSUM1LAorCVNJT0YsIE1NQ0lGLCBEVSwgR0RUQSwKIAlUTVUzLCBUTVU0LCBUTVU1LAogCVNTSTAsIFNTSTEsCiAJSEFDMCwgSEFDMSwKLQlGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExLAotCUdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMywKKwlGTENUTCwgR1BJTywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KIAotCVRNVTAxMiwgRE1BQzAsIFNDSUYwLCBTQ0lGMSwgRE1BQzEsCi0JUENJQzUsIE1NQ0lGLCBHRFRBLCBUTVUzNDUsIEZMQ1RMLCBHUElPCisJVE1VMDEyLAlUTVUzNDUKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTI1LDU3ICsxMDYsNDUgQEAKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg1ODApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg1YTApLAogCUlOVENfVkVDVChUTVUyLCAweDVjMCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDVlMCksCiAJSU5UQ19WRUNUKEhVREksIDB4NjAwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQwLCAweDYyMCksIElOVENfVkVDVChETUFDMF9ETUlOVDEsIDB4NjQwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQyLCAweDY2MCksIElOVENfVkVDVChETUFDMF9ETUlOVDMsIDB4NjgwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDZhMCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1BRSwgMHg2ZTApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg3NjApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4NzgwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHg3YTApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4N2MwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHg3ZTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDYsIDB4ODgwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UNywgMHg4YTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDgsIDB4OGMwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UOSwgMHg4ZTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDEwLCAweDkwMCksIElOVENfVkVDVChETUFDMV9ETUlOVDExLCAweDkyMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNQUUsIDB4OTQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY0MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY2MCksIElOVENfVkVDVChETUFDMCwgMHg2ODApLAorCUlOVENfVkVDVChETUFDMCwgMHg2YTApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3ODApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4N2MwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDg4MCksIElOVENfVkVDVChETUFDMSwgMHg4YTApLAorCUlOVENfVkVDVChETUFDMSwgMHg4YzApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4OTAwKSwgSU5UQ19WRUNUKERNQUMxLCAweDkyMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDk0MCksCiAJSU5UQ19WRUNUKEhTUEksIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTgwKSwgSU5UQ19WRUNUKFNDSUYzLCAweDlhMCksCiAJSU5UQ19WRUNUKFNDSUY0LCAweDljMCksIElOVENfVkVDVChTQ0lGNSwgMHg5ZTApLAogCUlOVENfVkVDVChQQ0lTRVJSLCAweGEwMCksIElOVENfVkVDVChQQ0lJTlRBLCAweGEyMCksCiAJSU5UQ19WRUNUKFBDSUlOVEIsIDB4YTQwKSwgSU5UQ19WRUNUKFBDSUlOVEMsIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJRVJSLCAweGFhMCksCi0JSU5UQ19WRUNUKFBDSVBXRDMsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSVBXRDIsIDB4YWUwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJUFdEMCwgMHhiMjApLAorCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lDNSwgMHhhYTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhhYzApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWUwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGIyMCksCiAJSU5UQ19WRUNUKFNJT0YsIDB4YzAwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKIAlJTlRDX1ZFQ1QoRFUsIDB4ZDgwKSwKLQlJTlRDX1ZFQ1QoR0RUQV9HQUNMSSwgMHhkYTApLCBJTlRDX1ZFQ1QoR0RUQV9HQU1DSSwgMHhkYzApLAotCUlOVENfVkVDVChHRFRBX0dBRVJJLCAweGRlMCksCisJSU5UQ19WRUNUKEdEVEEsIDB4ZGEwKSwgSU5UQ19WRUNUKEdEVEEsIDB4ZGMwKSwKKwlJTlRDX1ZFQ1QoR0RUQSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwKIAlJTlRDX1ZFQ1QoU1NJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhlYTApLAogCUlOVENfVkVDVChIQUMwLCAweGVjMCksIElOVENfVkVDVChIQUMxLCAweGVlMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMU1RFLCAweGYwMCksIElOVENfVkVDVChGTENUTF9GTEVORCwgMHhmMjApLAotCUlOVENfVkVDVChGTENUTF9GTFRSUTAsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMSwgMHhmNjApLAotCUlOVENfVkVDVChHUElPSTAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9JMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPSTIsIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU9JMywgMHhmZTApLAorCUlOVENfVkVDVChGTENUTCwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsCi0JCSAgIERNQUMwX0RNSU5UMywgRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywgRE1BQzFfRE1JTlQ4LAotCQkgICBETUFDMV9ETUlOVDksIERNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsIERNQUMxX0RNQUUpLAotCUlOVENfR1JPVVAoUENJQzUsIFBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCi0JSU5UQ19HUk9VUChHRFRBLCBHRFRBX0dBQ0xJLCBHRFRBX0dBTUNJLCBHRFRBX0dBRVJJKSwKIAlJTlRDX0dST1VQKFRNVTM0NSwgVE1VMywgVE1VNCwgVE1VNSksCi0JSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELAotCQkgICBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSksCi0JSU5UQ19HUk9VUChHUElPLCBHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0N2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCkBAIC0wLDAgKzEsNDkwIEBACisvKgorICogU0g3Nzg2IFNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIFNINzc4NSBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwl9LAorCS8qCisJICogVGhlIHJlc3Qgb2YgdGhlc2UgYWxsIGhhdmUgbXVsdGlwbGV4ZWQgSVJRcworCSAqLworCXsKKwkJLm1hcGJhc2UJPSAweGZmZWIwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA0NCwgNDQsIDQ0LCA0NCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWMwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MCwgNTAsIDUwLCA1MCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWQwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MSwgNTEsIDUxLCA1MSB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWUwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWYwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MywgNTMsIDUzLCA1MyB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2Jfb2hjaV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4ZmZlNzA0MDAsCisJCS5lbmQJPSAweGZmZTcwNGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gNzcsCisJCS5lbmQJPSA3NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgdXNiX29oY2lfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX29oY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9vaGNpIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZ1c2Jfb2hjaV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2Jfb2hjaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVzYl9vaGNpX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaV9kZXZpY2UsCisJJnVzYl9vaGNpX2RldmljZSwKK307CisKKworLyoKKyAqIFBsZWFzZSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91ciBwbGF0Zm9ybSBib2FyZAorICogdXNlIGV4dGVybmFsIGNsb2NrIGZvciBVU0IKKyAqICovCisjZGVmaW5lIFVTQkNUTDAJCTB4ZmZlNzA4NTgKKyNkZWZpbmUgQ0xPQ0tfTU9ERV9NQVNLIDB4ZmZmZmZmN2YKKyNkZWZpbmUgRVhUX0NMT0NLX01PREUgIDB4MDAwMDAwODAKK3ZvaWQgX19pbml0IHNoNzc4Nl91c2JfdXNlX2V4Y2xvY2sodm9pZCkKK3sKKwl1MzIgdmFsID0gX19yYXdfcmVhZGwoVVNCQ1RMMCkgJiBDTE9DS19NT0RFX01BU0s7CisJX19yYXdfd3JpdGVsKHZhbCB8IEVYVF9DTE9DS19NT0RFLCBVU0JDVEwwKTsKK30KKworI2RlZmluZSBVU0JJTklUUkVHMQkweGZmZTcwMDk0CisjZGVmaW5lIFVTQklOSVRSRUcyCTB4ZmZlNzAwOWMKKyNkZWZpbmUgVVNCSU5JVFZBTDEJMHgwMGZmMDA0MAorI2RlZmluZSBVU0JJTklUVkFMMgkweDAwMDAwMDAxCisKKyNkZWZpbmUgVVNCUENUTDEJMHhmZmU3MDgwNAorI2RlZmluZSBVU0JTVAkJMHhmZmU3MDgwOAorI2RlZmluZSBQSFlfRU5CCQkweDAwMDAwMDAxCisjZGVmaW5lIFBMTF9FTkIJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUEhZX1JTVAkJMHgwMDAwMDAwNAorI2RlZmluZSBBQ1RfUExMX1NUQVRVUwkweGMwMDAwMDAwCitzdGF0aWMgdm9pZCBfX2luaXQgc2g3Nzg2X3VzYl9zZXR1cCh2b2lkKQoreworCWludCBpID0gMTAwMDAwMDsKKworCS8qCisJICogVVNCIGluaXRpYWwgc2V0dGluZ3MKKwkgKgorCSAqIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIG5lY2Vzc2FyeQorCSAqIGZvciB1c2luZyB0aGUgVVNCIG1vZHVsZXMuCisJICoKKwkgKiBzZWUgIlVTQiBJbml0YWwgU2V0dGluZ3MiIGZvciBkZXRhaWwKKwkgKi8KKwlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDEsIFVTQklOSVRSRUcxKTsKKwlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDIsIFVTQklOSVRSRUcyKTsKKworCS8qCisJICogU2V0IHRoZSBQSFkgYW5kIFBMTCBlbmFibGUgYml0CisJICovCisJX19yYXdfd3JpdGVsKFBIWV9FTkIgfCBQTExfRU5CLCBVU0JQQ1RMMSk7CisJd2hpbGUgKGktLSAmJgorCSAgICAgICAoKF9fcmF3X3JlYWRsKFVTQlNUKSAmIEFDVF9QTExfU1RBVFVTKSAhPSBBQ1RfUExMX1NUQVRVUykpCisJCWNwdV9yZWxheCgpOworCisJaWYgKGkpIHsKKwkJLyogU2V0IHRoZSBQSFkgUlNUIGJpdCAqLworCQlfX3Jhd193cml0ZWwoUEhZX0VOQiB8IFBMTF9FTkIgfCBQSFlfUlNULCBVU0JQQ1RMMSk7CisJCXByaW50ayhLRVJOX0lORk8gInNoNzc4NiB1c2Igc2V0dXAgZG9uZVxuIik7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODZfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXNoNzc4Nl91c2Jfc2V0dXAoKTsKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3Nzg2X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3Nzg2X2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbChzaDc3ODZfZGV2aWNlc19zZXR1cCk7CisKK2VudW0geworCVVOVVNFRCA9IDAsCisKKwkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLworCisJSVJMMF9MTExMLCBJUkwwX0xMTEgsIElSTDBfTExITCwgSVJMMF9MTEhILAorCUlSTDBfTEhMTCwgSVJMMF9MSExILCBJUkwwX0xISEwsIElSTDBfTEhISCwKKwlJUkwwX0hMTEwsIElSTDBfSExMSCwgSVJMMF9ITEhMLCBJUkwwX0hMSEgsCisJSVJMMF9ISExMLCBJUkwwX0hITEgsIElSTDBfSEhITCwKKworCUlSTDRfTExMTCwgSVJMNF9MTExILCBJUkw0X0xMSEwsIElSTDRfTExISCwKKwlJUkw0X0xITEwsIElSTDRfTEhMSCwgSVJMNF9MSEhMLCBJUkw0X0xISEgsCisJSVJMNF9ITExMLCBJUkw0X0hMTEgsIElSTDRfSExITCwgSVJMNF9ITEhILAorCUlSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsCisKKwlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAorCVdEVCwKKwlUTVUwXzAsIFRNVTBfMSwgVE1VMF8yLCBUTVUwXzMsCisJVE1VMV8wLCBUTVUxXzEsIFRNVTFfMiwKKwlETUFDMF8wLCBETUFDMF8xLCBETUFDMF8yLCBETUFDMF8zLCBETUFDMF80LCBETUFDMF81LCBETUFDMF82LAorCUhVREkxLCBIVURJMCwKKwlETUFDMV8wLCBETUFDMV8xLCBETUFDMV8yLCBETUFDMV8zLAorCUhQQl8wLCBIUEJfMSwgSFBCXzIsCisJU0NJRjBfMCwgU0NJRjBfMSwgU0NJRjBfMiwgU0NJRjBfMywKKwlTQ0lGMSwKKwlUTVUyLCBUTVUzLAorCVNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAorCUV0aF8wLCBFdGhfMSwKKwlQQ0llQzBfMCwgUENJZUMwXzEsIFBDSWVDMF8yLAorCVBDSWVDMV8wLCBQQ0llQzFfMSwgUENJZUMxXzIsCisJVVNCLAorCUkyQzAsIEkyQzEsCisJRFUsCisJU1NJMCwgU1NJMSwgU1NJMiwgU1NJMywKKwlQQ0llQzJfMCwgUENJZUMyXzEsIFBDSWVDMl8yLAorCUhBQzAsIEhBQzEsCisJRkxDVEwsCisJSFNQSSwKKwlHUElPMCwgR1BJTzEsCisJVGhlcm1hbCwKKwlJTlRDMCwgSU5UQzEsIElOVEMyLCBJTlRDMywgSU5UQzQsIElOVEM1LCBJTlRDNiwgSU5UQzcsCisKKwkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoV0RULCAweDNlMCksCisJSU5UQ19WRUNUKFRNVTBfMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMF8xLCAweDQyMCksCisJSU5UQ19WRUNUKFRNVTBfMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMF8zLCAweDQ2MCksCisJSU5UQ19WRUNUKFRNVTFfMCwgMHg0ODApLCBJTlRDX1ZFQ1QoVE1VMV8xLCAweDRhMCksCisJSU5UQ19WRUNUKFRNVTFfMiwgMHg0YzApLAorCUlOVENfVkVDVChETUFDMF8wLCAweDUwMCksIElOVENfVkVDVChETUFDMF8xLCAweDUyMCksCisJSU5UQ19WRUNUKERNQUMwXzIsIDB4NTQwKSwgSU5UQ19WRUNUKERNQUMwXzMsIDB4NTYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfNCwgMHg1ODApLCBJTlRDX1ZFQ1QoRE1BQzBfNSwgMHg1YTApLAorCUlOVENfVkVDVChETUFDMF82LCAweDVjMCksCisJSU5UQ19WRUNUKEhVREkxLCAweDVlMCksIElOVENfVkVDVChIVURJMCwgMHg2MDApLAorCUlOVENfVkVDVChETUFDMV8wLCAweDYyMCksIElOVENfVkVDVChETUFDMV8xLCAweDY0MCksCisJSU5UQ19WRUNUKERNQUMxXzIsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMxXzMsIDB4NjgwKSwKKwlJTlRDX1ZFQ1QoSFBCXzAsIDB4NmEwKSwgSU5UQ19WRUNUKEhQQl8xLCAweDZjMCksCisJSU5UQ19WRUNUKEhQQl8yLCAweDZlMCksCisJSU5UQ19WRUNUKFNDSUYwXzAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwXzEsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjBfMiwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfMywgMHg3NjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3ODApLAorCUlOVENfVkVDVChUTVUyLCAweDdhMCksIElOVENfVkVDVChUTVUzLCAweDdjMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDg0MCksIElOVENfVkVDVChTQ0lGMywgMHg4NjApLAorCUlOVENfVkVDVChTQ0lGNCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjUsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoRXRoXzAsIDB4OGMwKSwgSU5UQ19WRUNUKEV0aF8xLCAweDhlMCksCisJSU5UQ19WRUNUKFBDSWVDMF8wLCAweGFlMCksIElOVENfVkVDVChQQ0llQzBfMSwgMHhiMDApLAorCUlOVENfVkVDVChQQ0llQzBfMiwgMHhiMjApLAorCUlOVENfVkVDVChQQ0llQzFfMCwgMHhiNDApLCBJTlRDX1ZFQ1QoUENJZUMxXzEsIDB4YjYwKSwKKwlJTlRDX1ZFQ1QoUENJZUMxXzIsIDB4YjgwKSwKKwlJTlRDX1ZFQ1QoVVNCLCAweGJhMCksCisJSU5UQ19WRUNUKEkyQzAsIDB4Y2MwKSwgSU5UQ19WRUNUKEkyQzEsIDB4Y2UwKSwKKwlJTlRDX1ZFQ1QoRFUsIDB4ZDAwKSwKKwlJTlRDX1ZFQ1QoU1NJMCwgMHhkMjApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhkNDApLAorCUlOVENfVkVDVChTU0kyLCAweGQ2MCksIElOVENfVkVDVChTU0kzLCAweGQ4MCksCisJSU5UQ19WRUNUKFBDSWVDMl8wLCAweGRhMCksIElOVENfVkVDVChQQ0llQzJfMSwgMHhkYzApLAorCUlOVENfVkVDVChQQ0llQzJfMiwgMHhkZTApLAorCUlOVENfVkVDVChIQUMwLCAweGUwMCksIElOVENfVkVDVChIQUMxLCAweGUyMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGU0MCksCisJSU5UQ19WRUNUKEhTUEksIDB4ZTgwKSwKKwlJTlRDX1ZFQ1QoR1BJTzAsIDB4ZWEwKSwgSU5UQ19WRUNUKEdQSU8xLCAweGVjMCksCisJSU5UQ19WRUNUKFRoZXJtYWwsIDB4ZWUwKSwKK307CisKKy8qIEZJWE1FOiBNYWluIENQVSBzdXBwb3J0IG9ubHkgbm93ICovCisjaWYgMSAvKiBNYWluIENQVSAqLworI2RlZmluZSBDbklOVE1TSzAJMHhmZTQxMDAzMAorI2RlZmluZSBDbklOVE1TSzEJMHhmZTQxMDA0MAorI2RlZmluZSBDbklOVE1TS0NMUjAJMHhmZTQxMDA1MAorI2RlZmluZSBDbklOVE1TS0NMUjEJMHhmZTQxMDA2MAorI2RlZmluZSBDbklOVDJNU0tSMAkweGZlNDEwYTIwCisjZGVmaW5lIENuSU5UMk1TS1IxCTB4ZmU0MTBhMjQKKyNkZWZpbmUgQ25JTlQyTVNLUjIJMHhmZTQxMGEyOAorI2RlZmluZSBDbklOVDJNU0tSMwkweGZlNDEwYTJjCisjZGVmaW5lIENuSU5UMk1TS0NSMAkweGZlNDEwYTMwCisjZGVmaW5lIENuSU5UMk1TS0NSMQkweGZlNDEwYTM0CisjZGVmaW5lIENuSU5UMk1TS0NSMgkweGZlNDEwYTM4CisjZGVmaW5lIENuSU5UMk1TS0NSMwkweGZlNDEwYTNjCisjZWxzZSAvKiBTdWIgQ1BVICovCisjZGVmaW5lIENuSU5UTVNLMAkweGZlNDEwMDM0CisjZGVmaW5lIENuSU5UTVNLMQkweGZlNDEwMDQ0CisjZGVmaW5lIENuSU5UTVNLQ0xSMAkweGZlNDEwMDU0CisjZGVmaW5lIENuSU5UTVNLQ0xSMQkweGZlNDEwMDY0CisjZGVmaW5lIENuSU5UMk1TS1IwCTB4ZmU0MTBiMjAKKyNkZWZpbmUgQ25JTlQyTVNLUjEJMHhmZTQxMGIyNAorI2RlZmluZSBDbklOVDJNU0tSMgkweGZlNDEwYjI4CisjZGVmaW5lIENuSU5UMk1TS1IzCTB4ZmU0MTBiMmMKKyNkZWZpbmUgQ25JTlQyTVNLQ1IwCTB4ZmU0MTBiMzAKKyNkZWZpbmUgQ25JTlQyTVNLQ1IxCTB4ZmU0MTBiMzQKKyNkZWZpbmUgQ25JTlQyTVNLQ1IyCTB4ZmU0MTBiMzgKKyNkZWZpbmUgQ25JTlQyTVNLQ1IzCTB4ZmU0MTBiM2MKKyNlbmRpZgorCisjZGVmaW5lIElOVE1TSzIJCTB4ZmU0MTAwNjgKKyNkZWZpbmUgSU5UTVNLQ0xSMgkweGZlNDEwMDZjCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyBDbklOVE1TSzAsIENuSU5UTVNLQ0xSMCwgMzIsCisJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorCXsgSU5UTVNLMiwgSU5UTVNLQ0xSMiwgMzIsCisJICB7IElSTDBfTExMTCwgSVJMMF9MTExILCBJUkwwX0xMSEwsIElSTDBfTExISCwKKwkgICAgSVJMMF9MSExMLCBJUkwwX0xITEgsIElSTDBfTEhITCwgSVJMMF9MSEhILAorCSAgICBJUkwwX0hMTEwsIElSTDBfSExMSCwgSVJMMF9ITEhMLCBJUkwwX0hMSEgsCisJICAgIElSTDBfSEhMTCwgSVJMMF9ISExILCBJUkwwX0hISEwsIDAsCisJICAgIElSTDRfTExMTCwgSVJMNF9MTExILCBJUkw0X0xMSEwsIElSTDRfTExISCwKKwkgICAgSVJMNF9MSExMLCBJUkw0X0xITEgsIElSTDRfTEhITCwgSVJMNF9MSEhILAorCSAgICBJUkw0X0hMTEwsIElSTDRfSExMSCwgSVJMNF9ITEhMLCBJUkw0X0hMSEgsCisJICAgIElSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsIDAsIH0gfSwKKwl7IENuSU5UMk1TS1IwLCBDbklOVDJNU0tDUjAgLCAzMiwKKwkgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgV0RUIH0gfSwKKwl7IENuSU5UMk1TS1IxLCBDbklOVDJNU0tDUjEsIDMyLAorCSAgeyBUTVUwXzAsIFRNVTBfMSwgVE1VMF8yLCBUTVUwXzMsIFRNVTFfMCwgVE1VMV8xLCBUTVUxXzIsIDAsCisJICAgIERNQUMwXzAsIERNQUMwXzEsIERNQUMwXzIsIERNQUMwXzMsIERNQUMwXzQsIERNQUMwXzUsIERNQUMwXzYsCisJICAgIEhVREkxLCBIVURJMCwKKwkgICAgRE1BQzFfMCwgRE1BQzFfMSwgRE1BQzFfMiwgRE1BQzFfMywKKwkgICAgSFBCXzAsIEhQQl8xLCBIUEJfMiwKKwkgICAgU0NJRjBfMCwgU0NJRjBfMSwgU0NJRjBfMiwgU0NJRjBfMywKKwkgICAgU0NJRjEsCisJICAgIFRNVTIsIFRNVTMsIDAsIH0gfSwKKwl7IENuSU5UMk1TS1IyLCBDbklOVDJNU0tDUjIsIDMyLAorCSAgeyAwLCAwLCBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwKKwkgICAgRXRoXzAsIEV0aF8xLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICBQQ0llQzBfMCwgUENJZUMwXzEsIFBDSWVDMF8yLAorCSAgICBQQ0llQzFfMCwgUENJZUMxXzEsIFBDSWVDMV8yLAorCSAgICBVU0IsIDAsIDAgfSB9LAorCXsgQ25JTlQyTVNLUjMsIENuSU5UMk1TS0NSMywgMzIsCisJICB7IDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIEkyQzAsIEkyQzEsCisJICAgIERVLCBTU0kwLCBTU0kxLCBTU0kyLCBTU0kzLAorCSAgICBQQ0llQzJfMCwgUENJZUMyXzEsIFBDSWVDMl8yLAorCSAgICBIQUMwLCBIQUMxLAorCSAgICBGTENUTCwgMCwKKwkgICAgSFNQSSwgR1BJTzAsIEdQSU8xLCBUaGVybWFsLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGZlNDEwMDEwLCAwLCAzMiwgNCwgLyogSU5UUFJJICovICAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLAorCQkJCQkJIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorCXsgMHhmZTQxMDgwMCwgMCwgMzIsIDgsIC8qIElOVDJQUkkwICovIHsgMCwgMCwgMCwgV0RUIH0gfSwKKwl7IDB4ZmU0MTA4MDQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMSAqLyB7IFRNVTBfMCwgVE1VMF8xLAorCQkJCQkJIFRNVTBfMiwgVE1VMF8zIH0gfSwKKwl7IDB4ZmU0MTA4MDgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMiAqLyB7IFRNVTFfMCwgVE1VMV8xLAorCQkJCQkJIFRNVTFfMiwgMCB9IH0sCisJeyAweGZlNDEwODBjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTMgKi8geyBETUFDMF8wLCBETUFDMF8xLAorCQkJCQkJIERNQUMwXzIsIERNQUMwXzMgfSB9LAorCXsgMHhmZTQxMDgxMCwgMCwgMzIsIDgsIC8qIElOVDJQUkk0ICovIHsgRE1BQzBfNCwgRE1BQzBfNSwKKwkJCQkJCSBETUFDMF82LCBIVURJMSB9IH0sCisJeyAweGZlNDEwODE0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTUgKi8geyBIVURJMCwgRE1BQzFfMCwKKwkJCQkJCSBETUFDMV8xLCBETUFDMV8yIH0gfSwKKwl7IDB4ZmU0MTA4MTgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNiAqLyB7IERNQUMxXzMsIEhQQl8wLAorCQkJCQkJIEhQQl8xLCBIUEJfMiB9IH0sCisJeyAweGZlNDEwODFjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTcgKi8geyBTQ0lGMF8wLCBTQ0lGMF8xLAorCQkJCQkJIFNDSUYwXzIsIFNDSUYwXzMgfSB9LAorCXsgMHhmZTQxMDgyMCwgMCwgMzIsIDgsIC8qIElOVDJQUkk4ICovIHsgU0NJRjEsIFRNVTIsIFRNVTMsIDAgfSB9LAorCXsgMHhmZTQxMDgyNCwgMCwgMzIsIDgsIC8qIElOVDJQUkk5ICovIHsgMCwgMCwgU0NJRjIsIFNDSUYzIH0gfSwKKwl7IDB4ZmU0MTA4MjgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTAgKi8geyBTQ0lGNCwgU0NJRjUsCisJCQkJCQkgIEV0aF8wLCBFdGhfMSB9IH0sCisJeyAweGZlNDEwODJjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTExICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODMwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTEyICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODM0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTEzICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODM4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTE0ICovIHsgMCwgMCwgMCwgUENJZUMwXzAgfSB9LAorCXsgMHhmZTQxMDgzYywgMCwgMzIsIDgsIC8qIElOVDJQUkkxNSAqLyB7IFBDSWVDMF8xLCBQQ0llQzBfMiwKKwkJCQkJCSAgUENJZUMxXzAsIFBDSWVDMV8xIH0gfSwKKwl7IDB4ZmU0MTA4NDAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTYgKi8geyBQQ0llQzFfMiwgVVNCLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NDQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTcgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NDgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTggKi8geyAwLCAwLCBJMkMwLCBJMkMxIH0gfSwKKwl7IDB4ZmU0MTA4NGMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTkgKi8geyBEVSwgU1NJMCwgU1NJMSwgU1NJMiB9IH0sCisJeyAweGZlNDEwODUwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTIwICovIHsgU1NJMywgUENJZUMyXzAsCisJCQkJCQkgIFBDSWVDMl8xLCBQQ0llQzJfMiB9IH0sCisJeyAweGZlNDEwODU0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTIxICovIHsgSEFDMCwgSEFDMSwgRkxDVEwsIDAgfSB9LAorCXsgMHhmZTQxMDg1OCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyMiAqLyB7IEhTUEksIEdQSU8wLAorCQkJCQkJICBHUElPMSwgVGhlcm1hbCB9IH0sCisJeyAweGZlNDEwODVjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTIzICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODYwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTI0ICovIHsgMCwgMCwgMCwgMCB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3Nzg2IiwgdmVjdG9ycywgTlVMTCwKKwkJCSBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIE5VTEwpOworCisvKiBTdXBwb3J0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucyBpbiBJUlEgbW9kZSAqLworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lycTAxMjNbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUlEwLCAweDIwMCksIElOVENfVkVDVChJUlExLCAweDI0MCksCisJSU5UQ19WRUNUKElSUTIsIDB4MjgwKSwgSU5UQ19WRUNUKElSUTMsIDB4MmMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJxNDU2N1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSUTQsIDB4MzAwKSwgSU5UQ19WRUNUKElSUTUsIDB4MzQwKSwKKwlJTlRDX1ZFQ1QoSVJRNiwgMHgzODApLCBJTlRDX1ZFQ1QoSVJRNywgMHgzYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3NlbnNlX3JlZyBzZW5zZV9yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZTQxMDAxYywgMzIsIDIsIC8qIElDUjEgKi8gICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsCisJCQkJCSAgICBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBhY2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZmU0MTAwMjQsIDAsIDMyLCAvKiBJTlRSRVEgKi8KKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzY19pcnEwMTIzLCAic2g3Nzg2LWlycTAxMjMiLAorCQkJICAgICB2ZWN0b3JzX2lycTAxMjMsIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjX2Rlc2NfaXJxNDU2NywgInNoNzc4Ni1pcnE0NTY3IiwKKwkJCSAgICAgdmVjdG9yc19pcnE0NTY3LCBOVUxMLCBtYXNrX3JlZ2lzdGVycywKKwkJCSAgICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyk7CisKKy8qIEV4dGVybmFsIGludGVycnVwdCBwaW5zIGluIElSTCBtb2RlICovCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJsMDEyM1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSTDBfTExMTCwgMHgyMDApLCBJTlRDX1ZFQ1QoSVJMMF9MTExILCAweDIyMCksCisJSU5UQ19WRUNUKElSTDBfTExITCwgMHgyNDApLCBJTlRDX1ZFQ1QoSVJMMF9MTEhILCAweDI2MCksCisJSU5UQ19WRUNUKElSTDBfTEhMTCwgMHgyODApLCBJTlRDX1ZFQ1QoSVJMMF9MSExILCAweDJhMCksCisJSU5UQ19WRUNUKElSTDBfTEhITCwgMHgyYzApLCBJTlRDX1ZFQ1QoSVJMMF9MSEhILCAweDJlMCksCisJSU5UQ19WRUNUKElSTDBfSExMTCwgMHgzMDApLCBJTlRDX1ZFQ1QoSVJMMF9ITExILCAweDMyMCksCisJSU5UQ19WRUNUKElSTDBfSExITCwgMHgzNDApLCBJTlRDX1ZFQ1QoSVJMMF9ITEhILCAweDM2MCksCisJSU5UQ19WRUNUKElSTDBfSEhMTCwgMHgzODApLCBJTlRDX1ZFQ1QoSVJMMF9ISExILCAweDNhMCksCisJSU5UQ19WRUNUKElSTDBfSEhITCwgMHgzYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcmw0NTY3W10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJMNF9MTExMLCAweDkwMCksIElOVENfVkVDVChJUkw0X0xMTEgsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MTEhMLCAweDk0MCksIElOVENfVkVDVChJUkw0X0xMSEgsIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MSExMLCAweDk4MCksIElOVENfVkVDVChJUkw0X0xITEgsIDB4OWEwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MSEhMLCAweDljMCksIElOVENfVkVDVChJUkw0X0xISEgsIDB4OWUwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ITExMLCAweGEwMCksIElOVENfVkVDVChJUkw0X0hMTEgsIDB4YTIwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ITEhMLCAweGE0MCksIElOVENfVkVDVChJUkw0X0hMSEgsIDB4YTYwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ISExMLCAweGE4MCksIElOVENfVkVDVChJUkw0X0hITEgsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ISEhMLCAweGFjMCksCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2lybDAxMjMsICJzaDc3ODYtaXJsMDEyMyIsIHZlY3RvcnNfaXJsMDEyMywKKwkJCSBOVUxMLCBtYXNrX3JlZ2lzdGVycywgTlVMTCwgTlVMTCk7CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfaXJsNDU2NywgInNoNzc4Ni1pcmw0NTY3IiwgdmVjdG9yc19pcmw0NTY3LAorCQkJIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLCBOVUxMLCBOVUxMKTsKKworI2RlZmluZSBJTlRDX0lDUjAJMHhmZTQxMDAwMAorI2RlZmluZSBJTlRDX0lOVE1TSzAJQ25JTlRNU0swCisjZGVmaW5lIElOVENfSU5UTVNLMQlDbklOVE1TSzEKKyNkZWZpbmUgSU5UQ19JTlRNU0syCUlOVE1TSzIKKyNkZWZpbmUgSU5UQ19JTlRNU0tDTFIxCUNuSU5UTVNLQ0xSMQorI2RlZmluZSBJTlRDX0lOVE1TS0NMUjIJSU5UTVNLQ0xSMgorCit2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQoreworCS8qIGRpc2FibGUgSVJRMy0wICsgSVJRNy00ICovCisJY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisKKwkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLworCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCisJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KKwljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCisJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOworfQorCit2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQoreworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgSVJRX01PREVfSVJRNzY1NDoKKwkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkw3LTQgKi8KKwkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgorCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLworCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CisJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KKwkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDMyMTA6CisJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KKwkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKKwkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCisJCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmw0NTY3KTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CisJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLworCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKwordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGJmYTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L1N1cGVySCBTSC1Nb2JpbGUgYmFja2VuZHMuCisjCisKKyMgUG93ZXIgTWFuYWdlbWVudCAmIFNsZWVwIG1vZGUKK29iai0kKENPTkZJR19QTSkJKz0gcG0ubyBzbGVlcC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDY3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcG0tc2hfbW9iaWxlLmMKKyAqCisgKiBQb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgY29kZSBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBTbGVlcCBtb2RlcyBhdmFpbGFibGUgb24gU3VwZXJIIE1vYmlsZToKKyAqCisgKiBTbGVlcCBtb2RlIGlzIGp1c3QgcGxhaW4gInNsZWVwIiBpbnN0cnVjdGlvbgorICogU2xlZXAgU2VsZi1SZWZyZXNoIG1vZGUgaXMgYWJvdmUgcGx1cyBSQU0gcHV0IGluIFNlbGYtUmVmcmVzaAorICogU3RhbmRieSBTZWxmLVJlZnJlc2ggbW9kZSBpcyBhYm92ZSBwbHVzIHN0b3BwZWQgY2xvY2tzCisgKi8KKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQCQkoU1VTUF9TSF9TTEVFUCkKKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQX1NGCShTVVNQX1NIX1NMRUVQIHwgU1VTUF9TSF9TRikKKyNkZWZpbmUgU1VTUF9NT0RFX1NUQU5EQllfU0YJKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBub3QgdGhlcmUgeWV0OgorICoKKyAqIFItc3RhbmRieSBtb2RlIGlzIHVuc3VwcG9ydGVkLCBidXQgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlCisgKiBVLXN0YW5kYnkgbW9kZSBpcyBsb3cgcHJpb3JpdHkgc2luY2UgaXQgbmVlZHMgYm9vdGxvYWRlciBoYWNrcworICoKKyAqIEFsbCBtb2RlcyBzaG91bGQgYmUgdGllZCBpbiB3aXRoIGNwdWlkbGUuIEJ1dCBiZWZvcmUgdGhhdCBjYW4KKyAqIGhhcHBlbiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgZW5hYmxlZCBoYXJkd2FyZSBibG9ja3Mgc28gd2UKKyAqIGNhbiBhdm9pZCBlbnRlcmluZyBzbGVlcCBtb2RlcyB0aGF0IHN0b3AgY2xvY2tzIHRvIGhhcmR3YXJlCisgKiBibG9ja3MgdGhhdCBhcmUgaW4gdXNlIGV2ZW4gdGhvdWdoIHRoZSBjcHUgY29yZSBpcyBpZGxlLgorICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHNoX21vYmlsZV9zdGFuZGJ5W107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHNoX21vYmlsZV9zdGFuZGJ5X3NpemU7CisKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9jYWxsX3N0YW5kYnkodW5zaWduZWQgbG9uZyBtb2RlKQoreworCWV4dGVybiB2b2lkICp2YnJfYmFzZTsKKwl2b2lkICpvbmNoaXBfbWVtID0gKHZvaWQgKikweGU1MjAwMDAwOyAvKiBJTFJBTSAqLworCXZvaWQgKCpzdGFuZGJ5X29uY2hpcF9tZW0pKHVuc2lnbmVkIGxvbmcpID0gb25jaGlwX21lbTsKKworCS8qIE5vdGU6IFdha2UgdXAgZnJvbSBzbGVlcCBtYXkgZ2VuZXJhdGUgZXhjZXB0aW9ucyEKKwkgKiBTZXR1cCBWQlIgdG8gcG9pbnQgdG8gb24tY2hpcCByYW0gaWYgc2VsZi1yZWZyZXNoIGlzCisJICogZ29pbmcgdG8gYmUgdXNlZC4KKwkgKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKG9uY2hpcF9tZW0pIDogIm1lbW9yeSIpOworCisJLyogQ29weSB0aGUgYXNzZW1ibHkgc25pcHBldCB0byB0aGUgb3RoZXJ3aXNlIHVudW5zZWQgSUxSQU0gKi8KKwltZW1jcHkob25jaGlwX21lbSwgc2hfbW9iaWxlX3N0YW5kYnksIHNoX21vYmlsZV9zdGFuZGJ5X3NpemUpOworCXdtYigpOworCWN0cmxfYmFycmllcigpOworCisJLyogTGV0IGFzc2VtYmx5IHNuaXBwZXQgaW4gb24tY2hpcCBtZW1vcnkgaGFuZGxlIHRoZSByZXN0ICovCisJc3RhbmRieV9vbmNoaXBfbWVtKG1vZGUpOworCisJLyogUHV0IFZCUiBiYWNrIGluIFN5c3RlbSBSQU0gYWdhaW4gKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbnQgc2hfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc2V0X2JsX2JpdCgpOworCXNoX21vYmlsZV9jYWxsX3N0YW5kYnkoU1VTUF9NT0RFX1NUQU5EQllfU0YpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJY2xlYXJfYmxfYml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgc2hfcG1fb3BzID0geworCS5lbnRlciAgICAgICAgICA9IHNoX3BtX2VudGVyLAorCS52YWxpZCAgICAgICAgICA9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9wbV9pbml0KHZvaWQpCit7CisJc3VzcGVuZF9zZXRfb3BzKCZzaF9wbV9vcHMpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHNoX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg4OGVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbGVlcC1zaF9tb2JpbGUuUworICoKKyAqIFNsZWVwIG1vZGUgYW5kIFN0YW5kYnkgbW9kZXMgc3VwcG9ydCBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKworLyogbWFuYWdlIHNlbGYtcmVmcmVzaCBhbmQgZW50ZXIgc3RhbmRieSBtb2RlLgorICogdGhpcyBjb2RlIHdpbGwgYmUgY29waWVkIHRvIG9uLWNoaXAgbWVtb3J5IGFuZCBleGVjdXRlZCBmcm9tIHRoZXJlLgorICovCisKKwkuYmFsaWduIAk0MDk2LDAsNDA5NgorRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnkpCisJbW92CXI0LCByMAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfc2V0X3NmCisKKwkvKiBTRFJBTTogZGlzYWJsZSBwb3dlciBkb3duIGFuZCBwdXQgaW4gc2VsZi1yZWZyZXNoIG1vZGUgKi8KKwltb3YubAkxZiwgcjQKKwltb3YubAkyZiwgcjEKKwltb3YubAlAcjQsIHIyCisJb3IJcjEsIHIyCisJbW92LmwgICAzZiwgcjMKKwlhbmQJcjMsIHIyCisJbW92LmwJcjIsIEByNAorCitza2lwX3NldF9zZjoKKwl0c3QJI1NVU1BfU0hfU0xFRVAsIHIwCisJYnQJdGVzdF9zdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAic2xlZXAgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDAwLCByMQorCit0ZXN0X3N0YW5kYnk6CisJdHN0CSNTVVNQX1NIX1NUQU5EQlksIHIwCisJYnQJdGVzdF9yc3RhbmRieQorCisJLyogc2V0IG1vZGUgdG8gInNvZnR3YXJlIHN0YW5kYnkgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDgwLCByMQorCit0ZXN0X3JzdGFuZGJ5OgorCXRzdAkjU1VTUF9TSF9SU1RBTkRCWSwgcjAKKwlidAl0ZXN0X3VzdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAici1zdGFuZGJ5IG1vZGUiICovCisJYnJhCWRvX3NsZWVwCisJIG1vdgkjMHgyMCwgcjEKKwordGVzdF91c3RhbmRieToKKwl0c3QJI1NVU1BfU0hfVVNUQU5EQlksIHIwCisJYnQJZG9uZV9zbGVlcAorCisJLyogc2V0IG1vZGUgdG8gInUtc3RhbmRieSBtb2RlIiAqLworCW1vdgkjMHgxMCwgcjEKKworCS8qIGZhbGwtdGhyb3VnaCAqLworCitkb19zbGVlcDoKKwkvKiBzZXR1cCBhbmQgZW50ZXIgc2VsZWN0ZWQgc3RhbmRieSBtb2RlICovCisJbW92LmwJNWYsIHI0CisJbW92LmwJcjEsIEByNAorCXNsZWVwCisKK2RvbmVfc2xlZXA6CisJLyogcmVzZXQgc3RhbmRieSBtb2RlIHRvIHNsZWVwIG1vZGUgKi8KKwltb3YubAk1ZiwgcjQKKwltb3YJIzB4MDAsIHIxCisJbW92LmwJcjEsIEByNAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfcmVzdG9yZV9zZgorCisJLyogU0RSQU06IHNldCBhdXRvLXJlZnJlc2ggbW9kZSAqLworCW1vdi5sCTFmLCByNAorCW1vdi5sCUByNCwgcjIKKwltb3YubCAgIDRmLCByMworCWFuZAlyMywgcjIKKwltb3YubAlyMiwgQHI0CisJbW92LmwJNmYsIHI0CisJbW92LmwJN2YsIHIxCisJbW92LmwJOGYsIHIyCisJbW92LmwJQHI0LCByMworCW1vdgkjLTEsIHI0CisJYWRkCXI0LCByMworCW9yCXIyLCByMworCW1vdi5sCXIzLCBAcjEKK3NraXBfcmVzdG9yZV9zZjoKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKKzE6CS5sb25nCTB4ZmU0MDAwMDggLyogU0RDUjAgKi8KKzI6CS5sb25nCTB4MDAwMDA0MDAKKzM6CS5sb25nCTB4ZmZmZjdmZmYKKzQ6CS5sb25nCTB4ZmZmZmZiZmYKKzU6CS5sb25nCTB4YTQxNTAwMjAgLyogU1RCQ1IgKi8KKzY6CS5sb25nICAgMHhmZTQwMDAxYyAvKiBSVENPUiAqLworNzoJLmxvbmcgICAweGZlNDAwMDE4IC8qIFJUQ05UICovCis4OgkubG9uZyAgIDB4YTU1YTAwMDAKKworLyogaW50ZXJydXB0IHZlY3RvciBAIDB4NjAwICovCisJLmJhbGlnbiAJMHg0MDAsMCwweDQwMAorCS5sb25nCTB4ZGVhZGJlZWYKKwkuYmFsaWduIAkweDIwMCwwLDB4MjAwCisJLyogc2g3NzIyIHdpbGwgZW5kIHVwIGhlcmUgaW4gc2xlZXAgbW9kZSAqLworCXJ0ZQorCSBub3AKK3NoX21vYmlsZV9zdGFuZGJ5X2VuZDoKKworRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZSkKKwkubG9uZyBzaF9tb2JpbGVfc3RhbmRieV9lbmQgLSBzaF9tb2JpbGVfc3RhbmRieQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCmluZGV4IGQzNzE2NTMuLmQyMmU1YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2dwaW8uYworKysgYi9hcmNoL3NoL2tlcm5lbC9ncGlvLmMKQEAgLTE5LDIyICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi1zdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87Ci0KLXN0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQotewotCWlmICghcmVnaXN0ZXJlZF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKLX0KLQogc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKIHsKIAlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQpAQCAtNDYsOSArMzAsNjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCByZWFkX3dyaXRlX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCi0JCQkgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAotCQkJICB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZG9fd3JpdGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3JlYWRfcmF3X3JlZyh1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgpCit7CisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCXJldHVybiBjdHJsX2luYihyZWcpOworCWNhc2UgMTY6CisJCXJldHVybiBjdHJsX2ludyhyZWcpOworCWNhc2UgMzI6CisJCXJldHVybiBjdHJsX2lubChyZWcpOworCX0KKworCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBncGlvX3dyaXRlX3Jhd19yZWcodW5zaWduZWQgbG9uZyByZWcsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQljdHJsX291dGIoZGF0YSwgcmVnKTsKKwkJcmV0dXJuOworCWNhc2UgMTY6CisJCWN0cmxfb3V0dyhkYXRhLCByZWcpOworCQlyZXR1cm47CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCXJldHVybjsKKwl9CisKKwlCVUcoKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb193cml0ZV9iaXQoc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGluX3BvcywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBvczsKKworCXBvcyA9IGRyLT5yZWdfd2lkdGggLSAoaW5fcG9zICsgMSk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX2JpdCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkXG4iLAorCQlkci0+cmVnLCAhIXZhbHVlLCBwb3MsIGRyLT5yZWdfd2lkdGgpOworI2VuZGlmCisKKwlpZiAodmFsdWUpCisJCXNldF9iaXQocG9zLCAmZHItPnJlZ19zaGFkb3cpOworCWVsc2UKKwkJY2xlYXJfYml0KHBvcywgJmRyLT5yZWdfc2hhZG93KTsKKworCWdwaW9fd3JpdGVfcmF3X3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLCBkci0+cmVnX3NoYWRvdyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19yZWFkX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhLCBtYXNrLCBwb3M7CiAKQEAgLTU3LDUyICs5Niw1MyBAQAogCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CiAKICNpZmRlZiBERUJVRwotCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJcHJfaW5mbygicmVhZF9yZWc6IGFkZHIgPSAlbHgsIHBvcyA9ICVsZCwgIgogCQkicl93aWR0aCA9ICVsZCwgZl93aWR0aCA9ICVsZFxuIiwKLQkJZG9fd3JpdGUgPyAid3JpdGUiIDogInJlYWQiLCByZWcsIHZhbHVlLCBwb3MsCi0JCXJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworCQlyZWcsIHBvcywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CiAjZW5kaWYKIAotCXN3aXRjaCAocmVnX3dpZHRoKSB7Ci0JY2FzZSA4OgotCQlkYXRhID0gY3RybF9pbmIocmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJZGF0YSA9IGN0cmxfaW53KHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWRhdGEgPSBjdHJsX2lubChyZWcpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoIWRvX3dyaXRlKQotCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7Ci0KLQlkYXRhICY9IH4obWFzayA8PCBwb3MpOwotCWRhdGEgfD0gdmFsdWUgPDwgcG9zOwotCi0Jc3dpdGNoIChyZWdfd2lkdGgpIHsKLQljYXNlIDg6Ci0JCWN0cmxfb3V0YihkYXRhLCByZWcpOwotCQlicmVhazsKLQljYXNlIDE2OgotCQljdHJsX291dHcoZGF0YSwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJY3RybF9vdXRsKGRhdGEsIHJlZyk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKKwlkYXRhID0gZ3Bpb19yZWFkX3Jhd19yZWcocmVnLCByZWdfd2lkdGgpOworCXJldHVybiAoZGF0YSA+PiBwb3MpICYgbWFzazsKIH0KIAotc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKLQkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3N0YXRpYyB2b2lkIGdwaW9fd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAorCQkJICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHBvczsKKworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX3JlZyBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlyZWcsIHZhbHVlLCBwb3MsIHJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworI2VuZGlmCisKKwltYXNrID0gfihtYXNrIDw8IHBvcyk7CisJdmFsdWUgPSB2YWx1ZSA8PCBwb3M7CisKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2UgODoKKwkJY3RybF9vdXRiKChjdHJsX2luYihyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJY3RybF9vdXR3KChjdHJsX2ludyhyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKChjdHJsX2lubChyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNldHVwX2RhdGFfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9ncGlvICpncGlvcCA9ICZncGlvYy0+Z3Bpb3NbZ3Bpb107CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZGF0YV9yZWc7CiAJaW50IGssIG47CiAKLQlpZiAoIWVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5kYXRhKSkKKwlpZiAoIWVudW1faW5fcmFuZ2UoZ3Bpb3AtPmVudW1faWQsICZncGlvYy0+ZGF0YSkpCiAJCXJldHVybiAtMTsKIAogCWsgPSAwOwpAQCAtMTEzLDE5ICsxNTMsNTggQEAKIAkJCWJyZWFrOwogCiAJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKLQkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgewotCQkJCSpkcnAgPSBkYXRhX3JlZzsKLQkJCQkqYml0cCA9IG47CisJCQlpZiAoZGF0YV9yZWctPmVudW1faWRzW25dID09IGdwaW9wLT5lbnVtX2lkKSB7CisJCQkJZ3Bpb3AtPmZsYWdzICY9IH5QSU5NVVhfRkxBR19EUkVHOworCQkJCWdwaW9wLT5mbGFncyB8PSAoayA8PCBQSU5NVVhfRkxBR19EUkVHX1NISUZUKTsKKwkJCQlncGlvcC0+ZmxhZ3MgJj0gflBJTk1VWF9GTEFHX0RCSVQ7CisJCQkJZ3Bpb3AtPmZsYWdzIHw9IChuIDw8IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQpOwogCQkJCXJldHVybiAwOwotCiAJCQl9CiAJCX0KIAkJaysrOwogCX0KIAorCUJVRygpOworCiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9kYXRhX3JlZ3Moc3RydWN0IHBpbm11eF9pbmZvICpncGlvYykKK3sKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkcnA7CisJaW50IGs7CisKKwlmb3IgKGsgPSBncGlvYy0+Zmlyc3RfZ3BpbzsgayA8PSBncGlvYy0+bGFzdF9ncGlvOyBrKyspCisJCXNldHVwX2RhdGFfcmVnKGdwaW9jLCBrKTsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWRycCA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZHJwLT5yZWdfd2lkdGgpCisJCQlicmVhazsKKworCQlkcnAtPnJlZ19zaGFkb3cgPSBncGlvX3JlYWRfcmF3X3JlZyhkcnAtPnJlZywgZHJwLT5yZWdfd2lkdGgpOworCQlrKys7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9kYXRhX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqKmRycCwgaW50ICpiaXRwKQoreworCXN0cnVjdCBwaW5tdXhfZ3BpbyAqZ3Bpb3AgPSAmZ3Bpb2MtPmdwaW9zW2dwaW9dOworCWludCBrLCBuOworCisJaWYgKCFlbnVtX2luX3JhbmdlKGdwaW9wLT5lbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gKGdwaW9wLT5mbGFncyAmIFBJTk1VWF9GTEFHX0RSRUcpID4+IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQ7CisJbiA9IChncGlvcC0+ZmxhZ3MgJiBQSU5NVVhfRkxBR19EQklUKSA+PiBQSU5NVVhfRkxBR19EQklUX1NISUZUOworCSpkcnAgPSBncGlvYy0+ZGF0YV9yZWdzICsgazsKKwkqYml0cCA9IG47CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgcGlubXV4X2VudW1fdCBlbnVtX2lkLAogCQkJICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKipjcnAsIGludCAqaW5kZXhwLAogCQkJICB1bnNpZ25lZCBsb25nICoqY250cCkKQEAgLTE4Nyw5ICsyNjYsOSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCi0JCQkgICAgc3RydWN0IHBpbm11eF9jZmdfcmVnICpjcnAsCi0JCQkgICAgaW50IGluZGV4KQorc3RhdGljIHZvaWQgd3JpdGVfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICAgaW50IGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgbmNvbWIsIHBvcywgdmFsdWU7CiAKQEAgLTE5Nyw4ICsyNzYsNyBAQAogCXBvcyA9IGluZGV4IC8gbmNvbWI7CiAJdmFsdWUgPSBpbmRleCAlIG5jb21iOwogCi0JcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKLQkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworCWdwaW9fd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwgY3JwLT5maWVsZF93aWR0aCwgcG9zLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLApAQCAtMjExLDggKzI4OSw4IEBACiAJcG9zID0gaW5kZXggLyBuY29tYjsKIAl2YWx1ZSA9IGluZGV4ICUgbmNvbWI7CiAKLQlpZiAocmVhZF93cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLAotCQkJICAgY3JwLT5maWVsZF93aWR0aCwgcG9zLCAwLCAwKSA9PSB2YWx1ZSkKKwlpZiAoZ3Bpb19yZWFkX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsCisJCQkgIGNycC0+ZmllbGRfd2lkdGgsIHBvcykgPT0gdmFsdWUpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC0xOwpAQCAtMjIwLDggKzI5OCw4IEBACiAKIGVudW0geyBHUElPX0NGR19EUllSVU4sIEdQSU9fQ0ZHX1JFUSwgR1BJT19DRkdfRlJFRSB9OwogCi1pbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCi0JCSAgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKK3N0YXRpYyBpbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCisJCQkgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKIHsKIAlzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNyID0gTlVMTDsKIAlwaW5tdXhfZW51bV90IGVudW1faWQ7CkBAIC0yODcsOCArMzY1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgR1BJT19DRkdfUkVROgotCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKLQkJCQlnb3RvIG91dF9lcnI7CisJCQl3cml0ZV9jb25maWdfcmVnKGdwaW9jLCBjciwgaW5kZXgpOwogCQkJKmNudHAgPSAqY250cCArIDE7CiAJCQlicmVhazsKIApAQCAtMzA1LDkgKzM4MiwxNCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CiAKLWludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKQorc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyAqY2hpcF90b19waW5tdXgoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBpbm11eF9pbmZvLCBjaGlwKTsKK30KKworc3RhdGljIGludCBzaF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCByZXQsIHBpbm11eF90eXBlOwpAQCAtMzE5LDI5ICs0MDEsMzAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCWlmICgoZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKKwlpZiAoKGdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKIAkJZ290byBlcnJfdW5sb2NrOwogCiAJLyogc2V0dXAgcGluIGZ1bmN0aW9uIGhlcmUgaWYgbm8gZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggcGluICovCiAKLQlpZiAoZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHVtbXksICZpKSAhPSAwKQorCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIG9mZnNldCwgJmR1bW15LCAmaSkgIT0gMCkKIAkJcGlubXV4X3R5cGUgPSBQSU5NVVhfVFlQRV9GVU5DVElPTjsKIAllbHNlCiAJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfR1BJTzsKIAogCWlmIChwaW5tdXhfdHlwZSA9PSBQSU5NVVhfVFlQRV9GVU5DVElPTikgewotCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsCiAJCQkJICAgICAgIHBpbm11eF90eXBlLAogCQkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCiAJCQlnb3RvIGVycl91bmxvY2s7CiAKLQkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LAogCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKIAkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQkJQlVHKCk7CiAJfQogCi0JZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gcGlubXV4X3R5cGU7CiAKIAlyZXQgPSAwOwogIGVycl91bmxvY2s6CkBAIC0zNDksMTEgKzQzMiwxMCBAQAogIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19ncGlvX3JlcXVlc3QpOwogCi12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQorc3RhdGljIHZvaWQgc2hfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwaW5tdXhfdHlwZTsKIApAQCAtMzYyLDIwICs0NDQsMjMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKLQlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKLQlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOworCXBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gUElOTVVYX1RZUEVfTk9ORTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX2ZyZWUpOwogCiBzdGF0aWMgaW50IHBpbm11eF9kaXJlY3Rpb24oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKIAkJCSAgICB1bnNpZ25lZCBncGlvLCBpbnQgbmV3X3Bpbm11eF90eXBlKQogewotCWludCByZXQsIHBpbm11eF90eXBlOworCWludCBwaW5tdXhfdHlwZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCXJldCA9IC1FSU5WQUw7CisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCiAJcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOwogCiAJc3dpdGNoIChwaW5tdXhfdHlwZSkgewpAQCAtNDAxLDEwMiArNDg2LDk5IEBACiAJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQlCVUcoKTsKIAotCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyA9IG5ld19waW5tdXhfdHlwZTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzIHw9IG5ld19waW5tdXhfdHlwZTsKIAogCXJldCA9IDA7CiAgZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIWdwaW9jKQotCQlnb3RvIGVycl9vdXQ7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9JTlBVVCk7CisJcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgb2Zmc2V0LCBQSU5NVVhfVFlQRV9JTlBVVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0gZXJyX291dDoKKwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKIAotc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAotCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKLQkJCQlpbnQgZG9fd3JpdGUpCitzdGF0aWMgdm9pZCBzaF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOwogCWludCBiaXQgPSAwOwogCi0JaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCWlmICghZ3Bpb2MgfHwgZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApCiAJCUJVRygpOwogCWVsc2UKLQkJdmFsdWUgPSByZWFkX3dyaXRlX3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLAotCQkJCSAgICAgICAxLCBiaXQsICEhdmFsdWUsIGRvX3dyaXRlKTsKLQotCXJldHVybiB2YWx1ZTsKKwkJZ3Bpb193cml0ZV9iaXQoZHIsIGJpdCwgdmFsdWUpOwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJaW50IHJldDsKIAotCWlmICghZ3Bpb2MpCi0JCWdvdG8gZXJyX291dDsKLQorCXNoX2dwaW9fc2V0X3ZhbHVlKGdwaW9jLCBvZmZzZXQsIHZhbHVlKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9PVVRQVVQpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIG9mZnNldCwgUElOTVVYX1RZUEVfT1VUUFVUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLSBlcnJfb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKIAotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB2YWx1ZSA9IDA7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOwogCi0JaWYgKCFncGlvYykKKwlpZiAoIWdwaW9jIHx8IGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKSB7CiAJCUJVRygpOwotCWVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JCXZhbHVlID0gX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIDAsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHZhbHVlOworCXJldHVybiBncGlvX3JlYWRfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsIDEsIGJpdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZ2V0X3ZhbHVlKTsKIAotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWdwaW9jKQotCQlCVUcoKTsKLQllbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQlfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgdmFsdWUsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQl9CisJcmV0dXJuIHNoX2dwaW9fZ2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX3NldF92YWx1ZSk7CisKK3N0YXRpYyB2b2lkIHNoX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXNoX2dwaW9fc2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQsIHZhbHVlKTsKK30KIAogaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCkKIHsKLQlyZWdpc3RlcmVkX2dwaW8gPSBwaXA7Ci0JcHJfaW5mbygicGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAorCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSAmcGlwLT5jaGlwOworCisJcHJfaW5mbygic2ggcGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAogCQlwaXAtPm5hbWUsIHBpcC0+Zmlyc3RfZ3BpbywgcGlwLT5sYXN0X2dwaW8pOwogCi0JcmV0dXJuIDA7CisJc2V0dXBfZGF0YV9yZWdzKHBpcCk7CisKKwljaGlwLT5yZXF1ZXN0ID0gc2hfZ3Bpb19yZXF1ZXN0OworCWNoaXAtPmZyZWUgPSBzaF9ncGlvX2ZyZWU7CisJY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID0gc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJY2hpcC0+Z2V0ID0gc2hfZ3Bpb19nZXQ7CisJY2hpcC0+ZGlyZWN0aW9uX291dHB1dCA9IHNoX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwljaGlwLT5zZXQgPSBzaF9ncGlvX3NldDsKKworCVdBUk5fT04ocGlwLT5maXJzdF9ncGlvICE9IDApOyAvKiBuZWVkcyB0ZXN0aW5nICovCisKKwljaGlwLT5sYWJlbCA9IHBpcC0+bmFtZTsKKwljaGlwLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNoaXAtPmJhc2UgPSBwaXAtPmZpcnN0X2dwaW87CisJY2hpcC0+bmdwaW8gPSAocGlwLT5sYXN0X2dwaW8gLSBwaXAtPmZpcnN0X2dwaW8pICsgMTsKKworCXJldHVybiBncGlvY2hpcF9hZGQoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDY0Yjc2OTAuLjNmMTM3MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC01MSw3ICs1MSw3IEBACiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICItJS04cyIsIGlycV9kZXNjW2ldLm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCX0KICNlbmRpZgogCi0JaXJxID0gaXJxX2RlbXV4KGV2dDJpcnEoaXJxKSk7CisJaXJxID0gaXJxX2RlbXV4KGludGNfZXZ0MmlycShpcnEpKTsKIAogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIAljdXJjdHggPSAodW5pb24gaXJxX2N0eCAqKWN1cnJlbnRfdGhyZWFkX2luZm8oKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA5NGRmNTZiLi43ZWEyNzA0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xNCwyMSArMTQsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXR5cGVkZWYgTk9SRVRfVFlQRSB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSgKLQkJCQl1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCi0JCQkJdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCi0JCQkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLAotCQkJCXVuc2lnbmVkIGxvbmcgdmJyX3JlZykgQVRUUklCX05PUkVUOwordHlwZWRlZiB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzKTsKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CiBleHRlcm4gdm9pZCAqZ2RiX3Zicl92ZWN0b3I7CitleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CiAKIHZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQogewpAQCAtNDUsNiArNDYsMTIgQEAKICAqLwogaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKKwkvKiBvbGRlciB2ZXJzaW9ucyBvZiBrZXhlYy10b29scyBhcmUgcGFzc2luZworCSAqIHRoZSB6SW1hZ2UgZW50cnkgcG9pbnQgYXMgYSB2aXJ0dWFsIGFkZHJlc3MuCisJICovCisJaWYgKGltYWdlLT5zdGFydCAhPSBQSFlTQUREUihpbWFnZS0+c3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogdXBncmFkZSB5b3VyIGtleGVjLXRvb2xzICovCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzMsMTcgKzgwLDMzIEBACiAgKi8KIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKLQogCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0OwogCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgdmJyX3JlZzsKIAlyZWxvY2F0ZV9uZXdfa2VybmVsX3Qgcm5rOworCXVuc2lnbmVkIGxvbmcgZW50cnk7CisJdW5zaWduZWQgbG9uZyAqcHRyOworCWludCBzYXZlX2Z0cmFjZV9lbmFibGVkOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLQl2YnJfcmVnID0gKCh1bnNpZ25lZCBsb25nIClnZGJfdmJyX3ZlY3RvcikgLSAweDEwMDsKLSNlbHNlCi0JdmJyX3JlZyA9IDB4ODAwMDAwMDA7ICAvLyBkdW1teQorCS8qCisJICogTmlja2VkIGZyb20gdGhlIG1pcHMgdmVyc2lvbiBvZiBtYWNoaW5lX2tleGVjKCk6CisJICogVGhlIGdlbmVyaWMga2V4ZWMgY29kZSBidWlsZHMgYSBwYWdlIGxpc3Qgd2l0aCBwaHlzaWNhbAorCSAqIGFkZHJlc3Nlcy4gVXNlIHBoeXNfdG9fdmlydCgpIHRvIGNvbnZlcnQgdGhlbSB0byB2aXJ0dWFsLgorCSAqLworCWZvciAocHRyID0gJmltYWdlLT5oZWFkOyAoZW50cnkgPSAqcHRyKSAmJiAhKGVudHJ5ICYgSU5EX0RPTkUpOworCSAgICAgcHRyID0gKGVudHJ5ICYgSU5EX0lORElSRUNUSU9OKSA/CisJICAgICAgIHBoeXNfdG9fdmlydChlbnRyeSAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9ICh1bnNpZ25lZCBsb25nKSBwaHlzX3RvX3ZpcnQoKnB0cik7CisJfQorCisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CiAjZW5kaWYKKworCXNhdmVfZnRyYWNlX2VuYWJsZWQgPSBfX2Z0cmFjZV9lbmFibGVkX3NhdmUoKTsKKwogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIApAQCAtOTcsMTIgKzEyMCwzNyBAQAogCW1lbWNweSgodm9pZCAqKXJlYm9vdF9jb2RlX2J1ZmZlciwgcmVsb2NhdGVfbmV3X2tlcm5lbCwKIAkJCQkJCXJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CiAKLSAgICAgICAga2V4ZWNfaW5mbyhpbWFnZSk7CisJa2V4ZWNfaW5mbyhpbWFnZSk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDoKKwkJICAgICA6ICJyIiAoKCh1bnNpZ25lZCBsb25nKSBnZGJfdmJyX3ZlY3RvcikgLSAweDEwMCkKKwkJICAgICA6ICJtZW1vcnkiKTsKKyNlbmRpZgorCiAJLyogbm93IGNhbGwgaXQgKi8KIAlybmsgPSAocmVsb2NhdGVfbmV3X2tlcm5lbF90KSByZWJvb3RfY29kZV9idWZmZXI7Ci0JKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLCBQMlNFR0FERFIoaW1hZ2UtPnN0YXJ0KSwgdmJyX3JlZyk7CisJKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoaW1hZ2UtPnN0YXJ0KSk7CisKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7CisKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CisKKwkvKiBDb252ZXJ0IHBhZ2UgbGlzdCBiYWNrIHRvIHBoeXNpY2FsIGFkZHJlc3Nlcywgd2hhdCBhIG1lc3MuICovCisJZm9yIChwdHIgPSAmaW1hZ2UtPmhlYWQ7IChlbnRyeSA9ICpwdHIpICYmICEoZW50cnkgJiBJTkRfRE9ORSk7CisJICAgICBwdHIgPSAoKnB0ciAmIElORF9JTkRJUkVDVElPTikgPworCSAgICAgICBwaHlzX3RvX3ZpcnQoKnB0ciAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9IHZpcnRfdG9fcGh5cygqcHRyKTsKKwl9CisjZW5kaWYKKworCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIH0KIAogdm9pZCBhcmNoX2NyYXNoX3NhdmVfdm1jb3JlaW5mbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCBjNjZjYjMyLi5mY2M5OTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworKysgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtNCw2ICs0LDggQEAKICAqCiAgKiBMQU5ESVNLL3NoNCBpcyBzdXBwb3J0ZWQuIE1heWJlLCBTSCBhcmNodGVjdHVyZSB3b3JrcyB3ZWxsLgogICoKKyAqIDIwMDktMDMtMTggTWFnbnVzIERhbW0gLSBBZGRlZCBLZXhlYyBKdW1wIHN1cHBvcnQKKyAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKICAqIFZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KQEAgLTE2LDIzICsxOCwxNDEgQEAKIAkvKiByNCA9IGluZGlyZWN0aW9uX3BhZ2UgICAqLwogCS8qIHI1ID0gcmVib290X2NvZGVfYnVmZmVyICovCiAJLyogcjYgPSBzdGFydF9hZGRyZXNzICAgICAgKi8KLQkvKiByNyA9IHZicl9yZWcgICAgICAgICAgICAqLwogCi0JbW92LmwJMTBmLHI4CSAgLyogUEFHRV9TSVpFICovCi0JbW92LmwJMTFmLHI5ICAgIC8qIFAyU0VHICovCisJbW92LmwJMTBmLCByMAkJLyogUEFHRV9TSVpFICovCisJYWRkCXI1LCByMAkJLyogc2V0dXAgbmV3IHN0YWNrIGF0IGVuZCBvZiBjb250cm9sIHBhZ2UgKi8KIAotCS8qICBzdGFjayBzZXR0aW5nICovCi0JYWRkCXI4LHI1Ci0JbW92CXI1LHIxNQorCS8qIHNhdmUgcjE1LT5yOCB0byBuZXcgc3RhY2sgKi8KKwltb3YubAlyMTUsIEAtcjAKKwltb3YJcjAsIHIxNQorCW1vdi5sCXIxNCwgQC1yMTUKKwltb3YubAlyMTMsIEAtcjE1CisJbW92LmwJcjEyLCBALXIxNQorCW1vdi5sCXIxMSwgQC1yMTUKKwltb3YubAlyMTAsIEAtcjE1CisJbW92LmwJcjksIEAtcjE1CisJbW92LmwJcjgsIEAtcjE1CiAKKwkvKiBzYXZlIG90aGVyIHJhbmRvbSByZWdpc3RlcnMgKi8KKwlzdHMubAltYWNsLCBALXIxNQorCXN0cy5sCW1hY2gsIEAtcjE1CisJc3RjLmwJZ2JyLCBALXIxNQorCXN0Yy5sCXNzciwgQC1yMTUKKwlzdGMubAlzciwgQC1yMTUKKwlzdHMubAlwciwgQC1yMTUKKwlzdGMubAlzcGMsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazEgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCXN0YwlzciwgcjgKKwlvcglyOSwgcjgKKwlsZGMJcjgsIHNyCisJbW92LmwJcjcsIEAtcjE1CisJbW92LmwJcjYsIEAtcjE1CisJbW92LmwJcjUsIEAtcjE1CisJbW92LmwJcjQsIEAtcjE1CisJbW92LmwJcjMsIEAtcjE1CisJbW92LmwJcjIsIEAtcjE1CisJbW92LmwJcjEsIEAtcjE1CisJbW92LmwJcjAsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazAgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwltb3YubAlyMCwgQC1yMTUKKworCW1vdi5sCXI0LCBALXIxNQkvKiBzYXZlIGluZGlyZWN0aW9uIHBhZ2UgYWdhaW4gKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmVmb3JlIGp1bXBpbmcgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdmEJMTFmLCByMAorCW1vdi5sCXIxNSwgQHIwCS8qIHNhdmUgcG9pbnRlciB0byBzdGFjayAqLworCisJanNyCUByNgkJLyogaGFuZCBvdmVyIGNvbnRyb2wgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdi5sCTExZiwgcjE1CS8qIGdldCBwb2ludGVyIHRvIHN0YWNrICovCisJbW92LmwJQHIxNSssIHI0CS8qIHJlc3RvcmUgcjQgdG8gZ2V0IGluZGlyZWN0aW9uIHBhZ2UgKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmFjayB0byBwcmV2aW91cyBzdGF0ZSAqLworCSBub3AKKworCS8qIG1ha2Ugc3VyZSBiYW5rMCBpcyBhY3RpdmUgYW5kIHJlc3RvcmUgcjAtPnI3ICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCB0byBiYW5rMSBhbmQgcmVzdG9yZSByMC0+cjcgKi8KKwltb3YubAkxMmYsIHI5CisJc3RjCXNyLCByOAorCW9yCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCBiYWNrIHRvIGJhbmswICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKworCS8qIHJlc3RvcmUgb3RoZXIgcmFuZG9tIHJlZ2lzdGVycyAqLworCWxkYy5sCUByMTUrLCBzcGMKKwlsZHMubAlAcjE1KywgcHIKKwlsZGMubAlAcjE1Kywgc3IKKwlsZGMubAlAcjE1Kywgc3NyCisJbGRjLmwJQHIxNSssIGdicgorCWxkcy5sCUByMTUrLCBtYWNoCisJbGRzLmwJQHIxNSssIG1hY2wKKworCS8qIHJlc3RvcmUgcjgtPnIxNSAqLworCW1vdi5sCUByMTUrLCByOAorCW1vdi5sCUByMTUrLCByOQorCW1vdi5sCUByMTUrLCByMTAKKwltb3YubAlAcjE1KywgcjExCisJbW92LmwJQHIxNSssIHIxMgorCW1vdi5sCUByMTUrLCByMTMKKwltb3YubAlAcjE1KywgcjE0CisJbW92LmwJQHIxNSssIHIxNQorCXJ0cworCSBub3AKKworc3dhcF9wYWdlczoKIAlicmEJMWYKLQltb3YJcjQscjAJICAvKiBjbWQgPSBpbmRpcmVjdGlvbl9wYWdlICovCisJIG1vdglyNCxyMAkgIC8qIGNtZCA9IGluZGlyZWN0aW9uX3BhZ2UgKi8KIDA6CiAJbW92LmwJQHI0KyxyMAkgIC8qIGNtZCA9ICppbmQrKyAqLwogCi0xOgkvKiBhZGRyID0gKGNtZCB8IFAyU0VHKSAmIDB4ZmZmZmZmZjAgKi8KKzE6CS8qIGFkZHIgPSBjbWQgJiAweGZmZmZmZmYwICovCiAJbW92CXIwLHIyCi0Jb3IJcjkscjIKIAltb3YJIy0xNixyMQogCWFuZAlyMSxyMgogCkBAIC00MCw1NyArMTYwLDcwIEBACiAJdHN0CSMxLHIwCiAJYnQJMmYKIAlicmEJMGIKLQltb3YJcjIscjUKKwkgbW92CXIyLHI1CiAKIDI6CS8qIGVsc2UgaWYoY21kICYgSU5EX0lORElSRUNUSU9OKSBpbmQgPSBhZGRyICAqLwogCXRzdAkjMixyMAogCWJ0CTNmCiAJYnJhCTBiCi0JbW92CXIyLHI0CisJIG1vdglyMixyNAogCi0zOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSBnb3RvIDYgICovCiszOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSByZXR1cm4gKi8KIAl0c3QJIzQscjAKIAlidAk0ZgotCWJyYQk2ZgotCW5vcAorCXJ0cworCSBub3AKIAogNDoJLyogZWxzZSBpZihjbWQgJiBJTkRfU09VUkNFKSBtZW1jcHkoZHN0LGFkZHIsUEFHRV9TSVpFKSAqLwogCXRzdAkjOCxyMAogCWJ0CTBiCiAKLQltb3YJcjgscjMKKwltb3YubAkxMGYscjMJICAvKiBQQUdFX1NJWkUgKi8KIAlzaGxyMglyMwogCXNobHIyCXIzCiA1OgogCWR0CXIzCi0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMCAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQotCW1vdi5sCUByMisscjEJICAvKiAgMTZuKzQgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKLQltb3YubAlAcjIrLHIxICAgLyogIDE2bis4ICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1Ci0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMTIgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKKworCS8qIHJlZ3VsYXIga2V4ZWMganVzdCBvdmVyd3JpdGVzIHRoZSBkZXN0aW5hdGlvbiBwYWdlCisJICogd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHNvdXJjZSBwYWdlLgorCSAqIGZvciB0aGUga2V4ZWMganVtcCBjYXNlIHdlIG5lZWQgdG8gc3dhcCB0aGUgY29udGVudHMKKwkgKiBvZiB0aGUgcGFnZXMuCisJICogdG8ga2VlcCBpdCBzaW1wbGUgc3dhcCB0aGUgY29udGVudHMgZm9yIGJvdGggY2FzZXMuCisJICovCisJbW92LmwJQCgwLCByMiksIHI4CisJbW92LmwJQCgwLCByNSksIHIxCisJbW92LmwJcjgsIEAoMCwgcjUpCisJbW92LmwJcjEsIEAoMCwgcjIpCisKKwltb3YubAlAKDQsIHIyKSwgcjgKKwltb3YubAlAKDQsIHI1KSwgcjEKKwltb3YubAlyOCwgQCg0LCByNSkKKwltb3YubAlyMSwgQCg0LCByMikKKworCW1vdi5sCUAoOCwgcjIpLCByOAorCW1vdi5sCUAoOCwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDgsIHI1KQorCW1vdi5sCXIxLCBAKDgsIHIyKQorCisJbW92LmwJQCgxMiwgcjIpLCByOAorCW1vdi5sCUAoMTIsIHI1KSwgcjEKKwltb3YubAlyOCwgQCgxMiwgcjUpCisJbW92LmwJcjEsIEAoMTIsIHIyKQorCisJYWRkCSMxNixyNQorCWFkZAkjMTYscjIKIAliZgk1YgogCiAJYnJhCTBiCi0Jbm9wCi02OgotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi0JbGRjICAgcjcsIHZicgotI2VuZGlmCi0Jam1wIEByNgotCW5vcAorCSBub3AKIAogCS5hbGlnbiAyCiAxMDoKIAkubG9uZwlQQUdFX1NJWkUKIDExOgotCS5sb25nCVAyU0VHCisJLmxvbmcJMAorMTI6CisJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKIAogcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQ6CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM3MGQyY2YuLjI0YzYwMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDMyLDYgKzQzMiw3IEBACiAJW0NQVV9TSDc3NjNdCT0gIlNINzc2MyIsCVtDUFVfU0g3NzcwXQk9ICJTSDc3NzAiLAogCVtDUFVfU0g3NzgwXQk9ICJTSDc3ODAiLAlbQ1BVX1NINzc4MV0JPSAiU0g3NzgxIiwKIAlbQ1BVX1NINzM0M10JPSAiU0g3MzQzIiwJW0NQVV9TSDc3ODVdCT0gIlNINzc4NSIsCisJW0NQVV9TSDc3ODZdCT0gIlNINzc4NiIsCiAJW0NQVV9TSDc3MjJdCT0gIlNINzcyMiIsCVtDUFVfU0hYM10JPSAiU0gtWDMiLAogCVtDUFVfU0g1XzEwMV0JPSAiU0g1LTEwMSIsCVtDUFVfU0g1XzEwM10JPSAiU0g1LTEwMyIsCiAJW0NQVV9NWEddCT0gIk1YLUciLAlbQ1BVX1NINzcyM10JPSAiU0g3NzIzIiwKQEAgLTQ0OCw3ICs0NDksNyBAQAogLyogU3ltYm9saWMgQ1BVIGZsYWdzLCBrZWVwIGluIHN5bmMgd2l0aCBhc20vY3B1LWZlYXR1cmVzLmggKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjcHVfZmxhZ3NbXSA9IHsKIAkibm9uZSIsICJmcHUiLCAicDJmbHVzaCIsICJtbXVhc3NvYyIsICJkc3AiLCAicGVyZmN0ciIsCi0JInB0ZWEiLCAibGxzYyIsICJsMiIsICJvcDMyIiwgTlVMTAorCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsICJwdGVhZXgiLCBOVUxMCiB9OwogCiBzdGF0aWMgdm9pZCBzaG93X2NwdWZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNoX2NwdWluZm8gKmMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYyBiL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjY0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogc3dzdXNwLmMgLSBTdXBlckggaGliZXJuYXRpb24gc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisKK3N0cnVjdCBzd3N1c3BfYXJjaF9yZWdzIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MDsKKworaW50IHBmbl9pc19ub3NhdmUodW5zaWduZWQgbG9uZyBwZm4pCit7CisJdW5zaWduZWQgbG9uZyBiZWdpbl9wZm4gPSBfX3BhKCZfX25vc2F2ZV9iZWdpbikgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQQUdFX0FMSUdOKF9fcGEoJl9fbm9zYXZlX2VuZCkpID4+IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4gKHBmbiA+PSBiZWdpbl9wZm4pICYmIChwZm4gPCBlbmRfcGZuKTsKK30KKwordm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQoreworCWluaXRfZnB1KGN1cnJlbnQpOworfQorCit2b2lkIHJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDg0NTdmODMuLmMzNGUxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKQEAgLTQxLDE0ICs0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBOdWxsIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGZ1bmN0aW9ucyBmb3Igc3lzdGVtcyBsYWNraW5nIG9uZS4KLSAqLwotc3RhdGljIGN5Y2xlX3QgbnVsbF9ocHRfcmVhZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKikgPSBudWxsX3J0Y19nZXRfdGltZTsKIGludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KSA9IG51bGxfcnRjX3NldF90aW1lOwogCkBAIC0xMTIsNyArMTA0LDYgQEAKIEVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKICNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfVElNRSAqLwogCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAvKiBsYXN0IHRpbWUgdGhlIFJUQyBjbG9jayBnb3QgdXBkYXRlZCAqLwogc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlOwogCkBAIC0xNTYsNyArMTQ3LDYgQEAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKICNlbmRpZgogfQotI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgdGltZXJfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0xODksNyArMTc5LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRpbWVyX2luaXRfc3lzZnModm9pZCkKIHsKLQlpbnQgcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1lcl9zeXNjbGFzcyk7CisJaW50IHJldDsKKworCWlmICghc3lzX3RpbWVyKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfc3lzY2xhc3MpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjAwLDQyICsxOTUsMjEgQEAKIAogdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CiAKLS8qCi0gKiBTaGFtZWxlc3NseSBiYXNlZCBvbiB0aGUgTUlQUyBhbmQgU3BhcmM2NCB3b3JrLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCBfX3JlYWRfbW9zdGx5OwotdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5ID0gMDsKLQotI2RlZmluZSBOU0VDX1BFUl9DWUNfU0hJRlQJMTAKLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKK3N0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKIAkubmFtZQkJPSAiU3VwZXJIIiwKLQkucmF0aW5nCQk9IDIwMCwKLQkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkucmVhZAkJPSBudWxsX2hwdF9yZWFkLAotCS5zaGlmdAkJPSAxNiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zaF9jbG9ja3NvdXJjZSh2b2lkKQotewotCWlmICghc2hfaHB0X2ZyZXF1ZW5jeSB8fCBjbG9ja3NvdXJjZV9zaC5yZWFkID09IG51bGxfaHB0X3JlYWQpCi0JCXJldHVybjsKLQotCWNsb2Nrc291cmNlX3NoLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHNoX2hwdF9mcmVxdWVuY3ksCi0JCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKLQotCXRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChzaF9ocHRfZnJlcXVlbmN5LCBOU0VDX1BFUl9DWUNfU0hJRlQpOwotCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3NoKTsKLX0KLQogI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrcyA9IGNsb2Nrc291cmNlX3NoLnJlYWQoKTsKLQlyZXR1cm4gKHRpY2tzICogdGltZXJfdGlja3NfcGVyX25zZWNfcXVvdGllbnQpID4+IE5TRUNfUEVSX0NZQ19TSElGVDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzOworCisJLyogamlmZmllcyBiYXNlZCBzY2hlZF9jbG9jayBpZiBubyBjbG9ja3NvdXJjZSBpcyBpbnN0YWxsZWQgKi8KKwlpZiAoIWNsb2Nrc291cmNlX3NoLnJhdGluZykKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqIChOU0VDX1BFUl9TRUMgLyBIWik7CisKKwljeWNsZXMgPSBjbG9ja3NvdXJjZV9zaC5yZWFkKCk7CisJcmV0dXJuIGN5YzJucygmY2xvY2tzb3VyY2Vfc2gsIGN5Y2xlcyk7CiB9CiAjZW5kaWYKIApAQCAtMjU5LDE3ICsyMzMsOCBAQAogCSAqIGluaXRpYWxpemVkIGZvciB1cy4KIAkgKi8KIAlzeXNfdGltZXIgPSBnZXRfc3lzX3RpbWVyKCk7CisJaWYgKHVubGlrZWx5KCFzeXNfdGltZXIpKQorCQlwYW5pYygiU3lzdGVtIHRpbWVyIG1pc3NpbmcuXG4iKTsKKwogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nICVzIGZvciBzeXN0ZW0gdGltZXJcbiIsIHN5c190aW1lci0+bmFtZSk7Ci0KLQotCWlmIChzeXNfdGltZXItPm9wcy0+cmVhZCkKLQkJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHN5c190aW1lci0+b3BzLT5yZWFkOwotCi0JaW5pdF9zaF9jbG9ja3NvdXJjZSgpOwotCi0JaWYgKHNoX2hwdF9mcmVxdWVuY3kpCi0JCXByaW50aygiVXNpbmcgJWx1LiUwM2x1IE1IeiBoaWdoIHByZWNpc2lvbiB0aW1lci5cbiIsCi0JCSAgICAgICAoKHNoX2hwdF9mcmVxdWVuY3kgKyA1MDApIC8gMTAwMCkgLyAxMDAwLAotCQkgICAgICAgKChzaF9ocHRfZnJlcXVlbmN5ICsgNTAwKSAvIDEwMDApICUgMTAwMCk7Ci0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCmluZGV4IGMzZDIzN2UuLjlhNzdhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYwpAQCAtMzUsNyArMzUsOCBAQAogI2RlZmluZSBNVFUyX1RTUl8xCTB4ZmZmZTQzODUKICNkZWZpbmUgTVRVMl9UQ05UXzEJMHhmZmZlNDM4NgkvKiAxNi1iaXQgY291bnRlciAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMykKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4OAogI2Vsc2UKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4YQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCmluZGV4IDBkYjNmOTUuLjEwYjVhNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKQEAgLTE0Niw3ICsxNDYsMTQgQEAKIAlfdG11X2NsZWFyX3N0YXR1cyhUTVUwKTsKIAlfdG11X3NldF9pcnEoVE1VMCx0bXUwX2Nsb2NrZXZlbnQubW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKIAotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCXN3aXRjaCAodG11MF9jbG9ja2V2ZW50Lm1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIzNyw2ICsyNDQsNyBAQAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgJiYgXAorICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKIAljdHJsX291dGIoVE1VX1RPQ1JfSU5JVCwgVE1VX1RPQ1IpOwogI2VuZGlmCkBAIC0yNTQsNyArMjYyLDE0IEBACiAKIAlfdG11X3N0YXJ0KFRNVTEpOwogCi0Jc2hfaHB0X2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MV9jbGspOworCWNsb2Nrc291cmNlX3NoLnJhdGluZyA9IDIwMDsKKwljbG9ja3NvdXJjZV9zaC5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMik7CisJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHRtdV90aW1lcl9yZWFkOworCWNsb2Nrc291cmNlX3NoLnNoaWZ0ID0gMTA7CisJY2xvY2tzb3VyY2Vfc2gubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY2xrX2dldF9yYXRlKCZ0bXUxX2NsayksCisJCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9zaC5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9zaCk7CiAKIAl0bXUwX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhmcmVxdWVuY3ksIE5TRUNfUEVSX1NFQywKIAkJCQkgICAgICB0bXUwX2Nsb2NrZXZlbnQuc2hpZnQpOwpAQCAtMjY0LDYgKzI3OSw3IEBACiAJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZ0bXUwX2Nsb2NrZXZlbnQpOwogCiAJdG11MF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCXRtdTBfY2xvY2tldmVudC5yYXRpbmcgPSAxMDA7CiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnRtdTBfY2xvY2tldmVudCk7CiAKQEAgLTI3NCw3ICsyOTAsNiBAQAogCS5pbml0CQk9IHRtdV90aW1lcl9pbml0LAogCS5zdGFydAkJPSB0bXVfdGltZXJfc3RhcnQsCiAJLnN0b3AJCT0gdG11X3RpbWVyX3N0b3AsCi0JLnJlYWQJCT0gdG11X3RpbWVyX3JlYWQsCiB9OwogCiBzdHJ1Y3Qgc3lzX3RpbWVyIHRtdV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCmluZGV4IDdiNGI4MmJkLi5kMGIyYTcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMKQEAgLTE1LDcgKzE1LDEwIEBACiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19QTUJfRklYRUQKKwkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgKENPTkZJR19NRU1PUllfU1RBUlQgJiAweDFmZmZmZmZmKSArCisJICAgIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOworI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCiAJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwogI2Vsc2UKIAkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDU1NWVjOTcuLjEwYzI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTU3LDcgKzU3LDcgQEAKIAlib29sCiAJZGVmYXVsdCB5IGlmIENQVV9TSDUKIAotY29uZmlnIFBNQgorY29uZmlnIFBNQl9FTkFCTEUKIAlib29sICJTdXBwb3J0IDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHRocm91Z2ggUE1CIgogCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKIAlzZWxlY3QgMzJCSVQKQEAgLTY3LDYgKzY3LDMzIEBACiAJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKIAkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KIAorY2hvaWNlCisJcHJvbXB0ICJQTUIgaGFuZGxpbmcgdHlwZSIKKwlkZXBlbmRzIG9uIFBNQl9FTkFCTEUKKwlkZWZhdWx0IFBNQl9GSVhFRAorCitjb25maWcgUE1CCisJYm9vbCAiUE1CIgorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCisJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKKwkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KKworY29uZmlnIFBNQl9GSVhFRAorCWJvb2wgImZpeGVkIFBNQiIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBcCisJCQkJCSAgIENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBmaXhlZCBQTUIgbWFwcGluZ3MgYXJlIGluaGVyaXRlZAorCSAgZnJvbSB0aGUgYm9vdCBsb2FkZXIsIGFuZCB0aGUga2VybmVsIGRvZXMgbm90IGF0dGVtcHQgZHluYW1pYworCSAgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgY2xvc2VzdCB0byBsZWdhY3kgMjktYml0IHBoeXNpY2FsIG1vZGUsCisJICBhbmQgYWxsb3dzIHN5c3RlbXMgdG8gc3VwcG9ydCB1cCB0byA1MTJNaUIgb2Ygc3lzdGVtIG1lbW9yeS4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBYMlRMQgogCWJvb2wgIkVuYWJsZSBleHRlbmRlZCBUTEIgbW9kZSIKIAlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMiBiL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIKaW5kZXggY2IyZjNmMi4uOTg2YTFlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL21tL01ha2VmaWxlXzMyCkBAIC0yNSw4ICsyNSwxMCBAQAogZW5kaWYKIAogaWZkZWYgQ09ORklHX01NVQotb2JqLSQoQ09ORklHX0NQVV9TSDMpCSs9IHRsYi1zaDMubwotb2JqLSQoQ09ORklHX0NQVV9TSDQpCSs9IHRsYi1zaDQubwordGxiLSQoQ09ORklHX0NQVV9TSDMpCQk6PSB0bGItc2gzLm8KK3RsYi0kKENPTkZJR19DUFVfU0g0KQkJOj0gdGxiLXNoNC5vCit0bGItJChDT05GSUdfQ1BVX0hBU19QVEVBRVgpCTo9IHRsYi1wdGVhZXgubworb2JqLXkJCQkJKz0gJCh0bGIteSkKIGlmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCiBvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IHBnLXNoNC5vCiBvYmotJChDT05GSUdfU0g3NzA1X0NBQ0hFXzMyS0IpCSs9IHBnLXNoNzcwNS5vCkBAIC0zNSw2ICszNyw3IEBACiAKIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpCSs9IGh1Z2V0bGJwYWdlLm8KIG9iai0kKENPTkZJR19QTUIpCQkrPSBwbWIubworb2JqLSQoQ09ORklHX1BNQl9GSVhFRCkJCSs9IHBtYi1maXhlZC5vCiBvYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWEubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2FzaWRzLWRlYnVnZnMuYwppbmRleCA4ZTkxMmExLi5jZDhjM2JmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKQEAgLTM3LDEwICszNyw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocC0+bW0pCi0JCQlzZXFfcHJpbnRmKGZpbGUsICIlNWQgOiAlMDJseFxuIiwgcGlkLAorCQkJc2VxX3ByaW50ZihmaWxlLCAiJTVkIDogJTA0bHhcbiIsIHBpZCwKIAkJCQkgICBjcHVfYXNpZChzbXBfcHJvY2Vzc29yX2lkKCksIHAtPm1tKSk7Ci0JCWVsc2UKLQkJCXNlcV9wcmludGYoZmlsZSwgIiU1ZCA6IChub25lKVxuIiwgcGlkKTsKIAl9CiAKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IDMyOTQ2ZmIuLjYwY2M0ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC01OSwxMSArNTksMTMgQEAKIAlpZiAoaXNfcGNpX21lbWFkZHIocGh5c19hZGRyKSAmJiBpc19wY2lfbWVtYWRkcihsYXN0X2FkZHIpKQogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfYWRkcjsKIAorI2lmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJaWYgKHBoeXNfYWRkciA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpCiAJCXJldHVybiBOVUxMOworI2VuZGlmCiAKIAkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCkBAIC04MSw3ICs4Myw3IEBACiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwogCW9yaWdfYWRkciA9IGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOwogCi0jaWZkZWYgQ09ORklHXzMyQklUCisjaWZkZWYgQ09ORklHX1BNQgogCS8qCiAJICogRmlyc3QgdHJ5IHRvIHJlbWFwIHRocm91Z2ggdGhlIFBNQiBvbmNlIGEgdmFsaWQgVk1BIGhhcyBiZWVuCiAJICogZXN0YWJsaXNoZWQuIFNtYWxsZXIgYWxsb2NhdGlvbnMgKG9yIHRoZSByZXN0IG9mIHRoZSBzaXplCkBAIC0xMTksMTAgKzEyMSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgc2VnID0gUFhTRUcodmFkZHIpOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CiAKLQlpZiAoc2VnIDwgUDNTRUcgfHwgc2VnID49IFAzX0FERFJfTUFYIHx8IGlzX3BjaV9tZW1hZGRyKHZhZGRyKSkKKwlpZiAoc2VnIDwgUDNTRUcgfHwgdmFkZHIgPj0gUDNfQUREUl9NQVggfHwgaXNfcGNpX21lbWFkZHIodmFkZHIpKQogCQlyZXR1cm47CiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfUE1CCiAJLyoKIAkgKiBQdXJnZSBhbnkgUE1CIGVudHJpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzCiAJICogbWFwcGluZywgdGhlbiBwcm9jZWVkIHdpdGggY29udmVudGlvbmFsIFZNQSB0ZWFyZG93bi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLWZpeGVkLmMgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzhlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBhcmNoL3NoL21tL2ZpeGVkX3BtYi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKK3N0YXRpYyBpbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZml4ZWRfcG1iX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUE1CX0VOVFJZX01BWDsgaSsrKSB7CisJCWFkZHIgPSBQTUJfREFUQSArIChpIDw8IFBNQl9FX1NISUZUKTsKKwkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQlpZiAoIShkYXRhICYgUE1CX1YpKQorCQkJY29udGludWU7CisKKwkJaWYgKGRhdGEgJiBQTUJfQykgeworI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCkKKwkJCWRhdGEgfD0gUE1CX1dUOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQorCQkJZGF0YSAmPSB+UE1CX1dUOworI2Vsc2UKKwkJCWRhdGEgJj0gfihQTUJfQyB8IFBNQl9XVCk7CisjZW5kaWYKKwkJfQorCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJfQorCisJYmFja190b19jYWNoZWQoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChmaXhlZF9wbWJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi5jIGIvYXJjaC9zaC9tbS9wbWIuYwppbmRleCA4NDI0MTY3Li5iMWE3MTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTE1LDYgKzE1LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC00MDIsMyArNDA0LDM5IEBACiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChwbWJfZGVidWdmc19pbml0KTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbWJfc3lzZGV2X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0YXRpYyBwbV9tZXNzYWdlX3QgcHJldl9zdGF0ZTsKKworCS8qIFJlc3RvcmUgdGhlIFBNQiBhZnRlciBhIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uICovCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OICYmCisJICAgIHByZXZfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisJCXNwaW5fbG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCQlmb3IgKHBtYmUgPSBwbWJfbGlzdDsgcG1iZTsgcG1iZSA9IHBtYmUtPm5leHQpCisJCQlzZXRfcG1iX2VudHJ5KHBtYmUpOworCQlzcGluX3VubG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCX0KKwlwcmV2X3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1iX3N5c2Rldl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcG1iX3N5c2Rldl9zdXNwZW5kKGRldiwgUE1TR19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBwbWJfc3lzZGV2X2RyaXZlciA9IHsKKwkuc3VzcGVuZCA9IHBtYl9zeXNkZXZfc3VzcGVuZCwKKwkucmVzdW1lID0gcG1iX3N5c2Rldl9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbWJfc3lzZGV2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJnBtYl9zeXNkZXZfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHBtYl9zeXNkZXZfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jIGIvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhYjNlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBhcmNoL3NoL21tL3RsYi1wdGVhZXguYworICoKKyAqIFRMQiBvcGVyYXRpb25zIGZvciBTSC1YMyBDUFVzIGZlYXR1cmluZyBQVEUgQVNJRCBFeHRlbnNpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBwdGV2YWw7CisJdW5zaWduZWQgbG9uZyB2cG47CisKKwkvKiBQdHJhY2UgbWF5IGNhbGwgdGhpcyByb3V0aW5lLiAqLworCWlmICh2bWEgJiYgY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCisJCXJldHVybjsKKworI2lmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCisJeworCQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKworCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCQkJaWYgKCF0ZXN0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncykpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwdGVfdmFsKHB0ZSkgJiBQVEVfUEhZU19NQVNLOworCQkJCV9fZmx1c2hfd2JhY2tfcmVnaW9uKCh2b2lkICopUDFTRUdBRERSKHBoeXMpLAorCQkJCQkJICAgICBQQUdFX1NJWkUpOworCQkJCV9fc2V0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncyk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCisJdnBuID0gYWRkcmVzcyAmIE1NVV9WUE5fTUFTSzsKKwlfX3Jhd193cml0ZWwodnBuLCBNTVVfUFRFSCk7CisKKwkvKiBTZXQgUFRFQUVYICovCisJX19yYXdfd3JpdGVsKGdldF9hc2lkKCksIE1NVV9QVEVBRVgpOworCisJcHRldmFsID0gcHRlLnB0ZV9sb3c7CisKKwkvKiBTZXQgUFRFQSByZWdpc3RlciAqLworI2lmZGVmIENPTkZJR19YMlRMQgorCS8qCisJICogRm9yIHRoZSBleHRlbmRlZCBtb2RlIFRMQiB0aGlzIGlzIHRyaXZpYWwsIG9ubHkgdGhlIEVTWiBhbmQKKwkgKiBFUFIgYml0cyBuZWVkIHRvIGJlIHdyaXR0ZW4gb3V0IHRvIFBURUEsIHdpdGggdGhlIHJlbWFpbmRlciBvZgorCSAqIHRoZSBwcm90ZWN0aW9uIGJpdHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgY29tcGF0LW1vZGUgU1oKKwkgKiBhbmQgUFIgYml0cywgd2hpY2ggYXJlIGNsZWFyZWQpIGJlaW5nIHdyaXR0ZW4gb3V0IGluIFBURUwuCisJICovCisJX19yYXdfd3JpdGVsKHB0ZS5wdGVfaGlnaCwgTU1VX1BURUEpOworI2VuZGlmCisKKwkvKiBTZXQgUFRFTCByZWdpc3RlciAqLworCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCisjaWZkZWYgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSAorCXB0ZXZhbCB8PSBfUEFHRV9XVDsKKyNlbmRpZgorCS8qIGNvbnZlbmllbnRseSwgd2Ugd2FudCBhbGwgdGhlIHNvZnR3YXJlIGZsYWdzIHRvIGJlIDAgYW55d2F5ICovCisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOworCisJLyogTG9hZCB0aGUgVExCICovCisJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFdoaWxlIFNILVgyIGV4dGVuZGVkIFRMQiBtb2RlIHNwbGl0cyBvdXQgdGhlIG1lbW9yeS1tYXBwZWQgSS9VVExCCisgKiBkYXRhIGFycmF5cywgU0gtWDMgY29yZXMgd2l0aCBQVEVBRVggc3BsaXQgb3V0IHRoZSBtZW1vcnktbWFwcGVkCisgKiBhZGRyZXNzIGFycmF5cy4gSW4gY29tcGF0IG1vZGUgdGhlIHNlY29uZCBhcnJheSBpcyBpbmFjY2Vzc2libGUsIHdoaWxlCisgKiBpbiBleHRlbmRlZCBtb2RlLCB0aGUgbGVnYWN5IDgtYml0IEFTSUQgZmllbGQgaW4gYWRkcmVzcyBhcnJheSAxIGhhcworICogdW5kZWZpbmVkIGJlaGF2aW91ci4KKyAqLwordm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJanVtcF90b191bmNhY2hlZCgpOworCV9fcmF3X3dyaXRlbChwYWdlLCBNTVVfVVRMQl9BRERSRVNTX0FSUkFZIHwgTU1VX1BBR0VfQVNTT0NfQklUKTsKKwlfX3Jhd193cml0ZWwoYXNpZCwgTU1VX1VUTEJfQUREUkVTU19BUlJBWTIgfCBNTVVfUEFHRV9BU1NPQ19CSVQpOworCWJhY2tfdG9fY2FjaGVkKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9zaC9vcHJvZmlsZS9jb21tb24uYwppbmRleCAxZDk3ZDY0Li4xYjlkNDMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvc2gvb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCWNhc2UgQ1BVX1NINzc4MDoKIAljYXNlIENQVV9TSDc3ODE6CiAJY2FzZSBDUFVfU0g3Nzg1OgorCWNhc2UgQ1BVX1NINzc4NjoKIAljYXNlIENQVV9TSDc3MjM6CiAJY2FzZSBDUFVfU0hYMzoKIAkJbG1vZGVsID0gJm9wX21vZGVsX3NoNGFfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDI4NGI3ZTguLjg0NzdiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTUyLDMgKzUyLDYgQEAKIEFQMzI1UlhBCQlTSF9BUDMyNVJYQQogU0g3NzYzUkRQCQlTSF9TSDc3NjNSRFAKIFNINzc4NUxDUgkJU0hfU0g3Nzg1TENSCitVUlFVRUxMCQkJU0hfVVJRVUVMTAorRVNQVAkJCVNIX0VTUFQKK1BPTEFSSVMJCQlTSF9QT0xBUklTCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCBmMjYwYjU4Li4wZTcwNjI1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTI0MCw0ICsyNDAsOSBAQAogCXVuc2lnbmVkIGludAlfX3VudXNlZDI7CiB9OwogCitzdGF0aWMgaW5saW5lIGludCBpc19jb21wYXRfdGFzayh2b2lkKQoreworCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCk7Cit9CisKICNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGlsLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BpbC5oCmluZGV4IDMyYTdlZmUuLjI2NjkzNzAzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BpbC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGlsLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUElMX0RFVklDRV9JUlEJCTUKICNkZWZpbmUgUElMX1NNUF9DQUxMX0ZVTkNfU05HTAk2CiAjZGVmaW5lIFBJTF9ERUZFUlJFRF9QQ1JfV09SSwk3CisjZGVmaW5lIFBJTF9LR0RCX0NBUFRVUkUJOAogI2RlZmluZSBQSUxfTk9STUFMX01BWAkJMTQKICNkZWZpbmUgUElMX05NSQkJCTE1CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2VjY29tcC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWNjb21wLmgKaW5kZXggN2ZjZDk5Ni4uYWRjYTFiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWNjb21wLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWNjb21wLmgKQEAgLTEsMTEgKzEsNSBAQAogI2lmbmRlZiBfQVNNX1NFQ0NPTVBfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4gLyogYWxyZWFkeSBkZWZpbmVzIFRJRl8zMkJJVCAqLwotCi0jaWZuZGVmIFRJRl8zMkJJVAotI2Vycm9yICJ1bmV4cGVjdGVkIFRJRl8zMkJJVCBvbiBzcGFyYzY0IgotI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KIAogI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZCBfX05SX3JlYWQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCmluZGV4IGVjODFjZGUuLmVlMzhlNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaApAQCAtNTcsNiArNTcsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqbXApCiB7CisJaWYgKCFtcC0+ZnVsbG1tKQorCQlmbHVzaF90bGJfcGVuZGluZygpOwogCWlmIChtcC0+bmVlZF9mbHVzaCkgewogCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKG1wLT5wYWdlcywgbXAtPnBhZ2VzX25yKTsKIAkJbXAtPnBhZ2VzX25yID0gMDsKQEAgLTc4LDggKzgwLDYgQEAKIAogCWlmIChtcC0+ZnVsbG1tKQogCQltcC0+ZnVsbG1tID0gMDsKLQllbHNlCi0JCWZsdXNoX3RsYl9wZW5kaW5nKCk7CiAKIAkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KIAljaGVja19wZ3RfY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYwppbmRleCAzYjlmNGQ2Li5lMWE5NTk4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jCkBAIC0zMDYsNiArMzA2LDcgQEAKIAkJYnVmWzFdID0gJz8nOwogCQlidWZbMl0gPSAnPyc7CiAJCWJ1ZlszXSA9ICdcMCc7CisJCXJldHVybiAwOwogCX0KIAlwID0gZHAtPmNvbnRyb2xsZXI7CiAJcHJvcCA9ICZwLT5sYXlvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCmluZGV4IGUyODkzNzYuLjhiYTA2NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICU5cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CkBAIC0zMjMsMTcgKzMyMywyNSBAQAogCXN1bjR1X2lycV9lbmFibGUodmlydF9pcnEpOwogfQogCisvKiBEb24ndCBkbyBhbnl0aGluZy4gIFRoZSBkZXNjLT5zdGF0dXMgY2hlY2sgZm9yIElSUV9ESVNBQkxFRCBpbgorICogaGFuZGxlcl9pcnEoKSB3aWxsIHNraXAgdGhlIGhhbmRsZXIgY2FsbCBhbmQgdGhhdCB3aWxsIGxlYXZlIHRoZQorICogaW50ZXJydXB0IGluIHRoZSBzZW50IHN0YXRlLiAgVGhlIG5leHQgLT5lbmFibGUoKSBjYWxsIHdpbGwgaGl0IHRoZQorICogSUNMUiByZWdpc3RlciB0byByZXNldCB0aGUgc3RhdGUgbWFjaGluZS4KKyAqCisgKiBUaGlzIHNjaGVtZSBpcyBuZWNlc3NhcnksIGluc3RlYWQgb2YgY2xlYXJpbmcgdGhlIFZhbGlkIGJpdCBpbiB0aGUKKyAqIElNQVAgcmVnaXN0ZXIsIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiBJTUFQIHJlZ2lzdGVycyBiZWluZyBzaGFyZWQgYnkKKyAqIG11bHRpcGxlIElOT3MgKGFuZCB0aHVzIElDTFIgcmVnaXN0ZXJzKS4gIFNpbmNlIHdlIHVzZSBhIGRpZmZlcmVudAorICogdmlydHVhbCBJUlEgZm9yIGVhY2ggc2hhcmVkIElNQVAgaW5zdGFuY2UsIHRoZSBnZW5lcmljIGNvZGUgdGhpbmtzCisgKiB0aGVyZSBpcyBvbmx5IG9uZSB1c2VyIHNvIGl0IHByZW1hdHVyZWx5IGNhbGxzIC0+ZGlzYWJsZSgpIG9uCisgKiBmcmVlX2lycSgpLgorICoKKyAqIFdlIGhhdmUgdG8gcHJvdmlkZSBhbiBleHBsaWNpdCAtPmRpc2FibGUoKSBtZXRob2QgaW5zdGVhZCBvZiB1c2luZworICogTlVMTCB0byBnZXQgdGhlIGRlZmF1bHQuICBUaGUgcmVhc29uIGlzIHRoYXQgaWYgdGhlIGdlbmVyaWMgY29kZQorICogc2VlcyB0aGF0LCBpdCBhbHNvIGhvb2tzIHVwIGEgZGVmYXVsdCAtPnNodXRkb3duIG1ldGhvZCB3aGljaAorICogaW52b2tlcyAtPm1hc2soKSB3aGljaCB3ZSBkbyBub3Qgd2FudC4gIFNlZSBpcnFfY2hpcF9zZXRfZGVmYXVsdHMoKS4KKyAqLwogc3RhdGljIHZvaWQgc3VuNHVfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IHZpcnRfaXJxKQogewotCXN0cnVjdCBpcnFfaGFuZGxlcl9kYXRhICpkYXRhID0gZ2V0X2lycV9jaGlwX2RhdGEodmlydF9pcnEpOwotCi0JaWYgKGxpa2VseShkYXRhKSkgewotCQl1bnNpZ25lZCBsb25nIGltYXAgPSBkYXRhLT5pbWFwOwotCQl1bnNpZ25lZCBsb25nIHRtcCA9IHVwYV9yZWFkcShpbWFwKTsKLQotCQl0bXAgJj0gfklNQVBfVkFMSUQ7Ci0JCXVwYV93cml0ZXEodG1wLCBpbWFwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHN1bjR1X2lycV9lb2kodW5zaWduZWQgaW50IHZpcnRfaXJxKQpAQCAtNzQ2LDcgKzc1NCw4IEBACiAKIAkJZGVzYyA9IGlycV9kZXNjICsgdmlydF9pcnE7CiAKLQkJZGVzYy0+aGFuZGxlX2lycSh2aXJ0X2lycSwgZGVzYyk7CisJCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpCisJCQlkZXNjLT5oYW5kbGVfaXJxKHZpcnRfaXJxLCBkZXNjKTsKIAogCQlidWNrZXRfcGEgPSBuZXh0X3BhOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2tnZGJfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2tnZGJfNjQuYwppbmRleCBmZWZiZTZkLi5mNWEwZmQ0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9rZ2RiXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwva2dkYl82NC5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgc21wX2tnZGJfY2FwdHVyZV9jbGllbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIHNtcF9rZ2RiX2NhcHR1cmVfY2xpZW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYwppbmRleCA2NGU2ZWRmLi5iNzc1NjU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAljb25zdCB1MzIgKnZkbWEgPSBvZl9nZXRfcHJvcGVydHkocGJtLT5vcC0+bm9kZSwgInZpcnR1YWwtZG1hIiwgTlVMTCk7CiAKIAlpZiAodmRtYSkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJwID0ga21hbGxvYyhzaXplb2YoKnJwKSwgR0ZQX0tFUk5FTCk7CisJCXN0cnVjdCByZXNvdXJjZSAqcnAgPSBremFsbG9jKHNpemVvZigqcnApLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIXJwKSB7CiAJCQlwcm9tX3ByaW50ZigiQ2Fubm90IGFsbG9jYXRlIElPTU1VIHJlc291cmNlLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggMmRiM2MyMi4uNjQyNTYyZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwpAQCAtMzYsMTAgKzM2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdHRhYmxlLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUwppbmRleCBkOWJkZmI5Li43NmQ4MzdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUwpAQCAtNjQsNyArNjQsMTIgQEAKIHRsMF9pcnE2OglCVFJBUCgweDQ2KQogI2VuZGlmCiB0bDBfaXJxNzoJVFJBUF9JUlEoZGVmZXJyZWRfcGNyX3dvcmtfaXJxLCA3KQotdGwwX2lycTg6CUJUUkFQKDB4NDgpIEJUUkFQKDB4NDkpCisjaWZkZWYgQ09ORklHX0tHREIKK3RsMF9pcnE4OglUUkFQX0lSUShzbXBfa2dkYl9jYXB0dXJlX2NsaWVudCwgOCkKKyNlbHNlCit0bDBfaXJxODoJQlRSQVAoMHg0OCkKKyNlbmRpZgordGwwX2lycTk6CUJUUkFQKDB4NDkpCiB0bDBfaXJxMTA6CUJUUkFQKDB4NGEpIEJUUkFQKDB4NGIpIEJUUkFQKDB4NGMpIEJUUkFQKDB4NGQpCiB0bDBfaXJxMTQ6CVRSQVBfSVJRKHRpbWVyX2ludGVycnVwdCwgMTQpCiB0bDBfaXJxMTU6CVRSQVBfTk1JX0lSUShwZXJmY3RyX2lycSwgMTUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3VsdHJhLlMgYi9hcmNoL3NwYXJjL21tL3VsdHJhLlMKaW5kZXggODBjNzg4ZS4uYjU3YTU5NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS91bHRyYS5TCisrKyBiL2FyY2gvc3BhcmMvbW0vdWx0cmEuUwpAQCAtNjc5LDI4ICs2NzksOCBAQAogI2lmZGVmIENPTkZJR19LR0RCCiAJLmdsb2JsCQl4Y2FsbF9rZ2RiX2NhcHR1cmUKIHhjYWxsX2tnZGJfY2FwdHVyZToKLTY2MToJcmRwcgkJJXBzdGF0ZSwgJWcyCi0Jd3JwcgkJJWcyLCBQU1RBVEVfSUcgfCBQU1RBVEVfQUcsICVwc3RhdGUKLQkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKLQkud29yZAkJNjYxYgotCW5vcAotCW5vcAotCS5wcmV2aW91cwotCi0JcmRwcgkJJXBpbCwgJWcyCi0Jd3JwcgkJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAotCXNldGhpCQklaGkoMTA5ZiksICVnNwotCWJhLHB0CQkleGNjLCBldHJhcF9pcnEKLTEwOToJIG9yCQklZzcsICVsbygxMDliKSwgJWc3Ci0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JY2FsbAkJdHJhY2VfaGFyZGlycXNfb2ZmCi0JIG5vcAotI2VuZGlmCi0JY2FsbAkJc21wX2tnZGJfY2FwdHVyZV9jbGllbnQKLQkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMAotCS8qIEhhcyB0byBiZSBhIG5vbi12OSBicmFuY2ggZHVlIHRvIHRoZSBsYXJnZSBkaXN0YW5jZS4gKi8KLQliYQkJcnRyYXBfeGNhbGwKLQkgbGR4CQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RTVEFURV0sICVsMQorCXdyCQklZzAsICgxIDw8IFBJTF9LR0RCX0NBUFRVUkUpLCAlc2V0X3NvZnRpbnQKKwlyZXRyeQogI2VuZGlmCiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdmRlX3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy92ZGVfdXNlci5jCmluZGV4IDU2NTMzZGIuLmM1YzQzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy92ZGVfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy92ZGVfdXNlci5jCkBAIC03OCw3ICs3OCw3IEBACiB7CiAJc3RydWN0IHZkZV9vcGVuX2FyZ3MgKmFyZ3M7CiAKLQl2cHJpLT5hcmdzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZkZV9vcGVuX2FyZ3MpLCBVTV9HRlBfS0VSTkVMKTsKKwl2cHJpLT5hcmdzID0gdW1sX2ttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2ZGVfb3Blbl9hcmdzKSwgVU1fR0ZQX0tFUk5FTCk7CiAJaWYgKHZwcmktPmFyZ3MgPT0gTlVMTCkgewogCQlwcmludGsoVU1fS0VSTl9FUlIgInZkZV9pbml0X2xpYnN0dWZmIC0gdmRlX29wZW5fYXJncyAiCiAJCSAgICAgICAiYWxsb2NhdGlvbiBmYWlsZWQiKTsKQEAgLTkxLDggKzkxLDggQEAKIAlhcmdzLT5ncm91cCA9IGluaXQtPmdyb3VwOwogCWFyZ3MtPm1vZGUgPSBpbml0LT5tb2RlID8gaW5pdC0+bW9kZSA6IDA3MDA7CiAKLQlhcmdzLT5wb3J0ID8gIHByaW50ayhVTV9LRVJOX0lORk8gInBvcnQgJWQiLCBhcmdzLT5wb3J0KSA6Ci0JCXByaW50ayhVTV9LRVJOX0lORk8gInVuZGVmaW5lZCBwb3J0Iik7CisJYXJncy0+cG9ydCA/ICBwcmludGsoInBvcnQgJWQiLCBhcmdzLT5wb3J0KSA6CisJCXByaW50aygidW5kZWZpbmVkIHBvcnQiKTsKIH0KIAogaW50IHZkZV91c2VyX3JlYWQodm9pZCAqY29ubiwgdm9pZCAqYnVmLCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaXJxLmMgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwppbmRleCAzZDdhYWQwLi4zMzZiNjE1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwpAQCAtNDIsNyArNDIsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCmluZGV4IDE1ZThiN2MuLjhlM2Q2OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCkBAIC02NCw2ICs2NCwxMSBAQAogCQlyZXQgPSBwb2tlX3VzZXIoY2hpbGQsIGFkZHIsIGRhdGEpOwogCQlicmVhazsKIAorCWNhc2UgUFRSQUNFX1NZU0VNVToKKwljYXNlIFBUUkFDRV9TWVNFTVVfU0lOR0xFU1RFUDoKKwkJcmV0ID0gLUVJTzsKKwkJYnJlYWs7CisKIAkvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX1NZU0NBTEw6CiAJLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jIGIvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYwppbmRleCA3NGY0OWJiLi44OWI0OGExIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMKQEAgLTE0LDcgKzE0LDYgQEAKICN1bmRlZiBtZW1zZXQKIAogZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKLWV4dGVybiB2b2lkICptZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CiBleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKIGV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CiBleHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7CkBAIC0yNCw3ICsyMywxMSBAQAogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogI2VuZGlmCiAKKyNpZm5kZWYgX194ODZfNjRfXworZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKKyNlbmRpZgorCiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwogRVhQT1JUX1NZTUJPTChwcmludGYpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggOWMzOTA5NS4uM2EzMzBhNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMTY1LDYgKzE2NSw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xODAzLDcgKzE4MDYsNyBAQAogCSAgcmVtYXBwaW5nIGRldmljZXMuCiAKIGNvbmZpZyBETUFSX0RFRkFVTFRfT04KLQlkZWZfYm9vbCBuCisJZGVmX2Jvb2wgeQogCXByb21wdCAiRW5hYmxlIERNQSBSZW1hcHBpbmcgRGV2aWNlcyBieSBkZWZhdWx0IgogCWRlcGVuZHMgb24gRE1BUgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IDEwZDZjYzMuLmUxOTgzZmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtMTc0LDI4ICsxNzQsOCBAQAogCSAgQWRkIGEgc2ltcGxlIGxlYWsgdHJhY2VyIHRvIHRoZSBJT01NVSBjb2RlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdQogCSAgYXJlIGRlYnVnZ2luZyBhIGJ1Z2d5IGRldmljZSBkcml2ZXIgdGhhdCBsZWFrcyBJT01NVSBtYXBwaW5ncy4KIAotY29uZmlnIE1NSU9UUkFDRQotCWJvb2wgIk1lbW9yeSBtYXBwZWQgSU8gdHJhY2luZyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQQ0kKLQlzZWxlY3QgVFJBQ0lORwotCWhlbHAKLQkgIE1taW90cmFjZSB0cmFjZXMgTWVtb3J5IE1hcHBlZCBJL08gYWNjZXNzIGFuZCBpcyBtZWFudCBmb3IKLQkgIGRlYnVnZ2luZyBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZy4gSXQgaXMgY2FsbGVkIGZyb20gdGhlIGlvcmVtYXAKLQkgIGltcGxlbWVudGF0aW9uIGFuZCB3b3JrcyB2aWEgcGFnZSBmYXVsdHMuIFRyYWNpbmcgaXMgZGlzYWJsZWQgYnkKLQkgIGRlZmF1bHQgYW5kIGNhbiBiZSBlbmFibGVkIGF0IHJ1bi10aW1lLgotCi0JICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQuCi0JICBJZiB5b3UgYXJlIG5vdCBoZWxwaW5nIHRvIGRldmVsb3AgZHJpdmVycywgc2F5IE4uCi0KLWNvbmZpZyBNTUlPVFJBQ0VfVEVTVAotCXRyaXN0YXRlICJUZXN0IG1vZHVsZSBmb3IgbW1pb3RyYWNlIgotCWRlcGVuZHMgb24gTU1JT1RSQUNFICYmIG0KLQloZWxwCi0JICBUaGlzIGlzIGEgZHVtYiBtb2R1bGUgZm9yIHRlc3RpbmcgbW1pb3RyYWNlLiBJdCBpcyB2ZXJ5IGRhbmdlcm91cwotCSAgYXMgaXQgd2lsbCB3cml0ZSBnYXJiYWdlIHRvIElPIG1lbW9yeSBzdGFydGluZyBhdCBhIGdpdmVuIGFkZHJlc3MuCi0JICBIb3dldmVyLCBpdCBzaG91bGQgYmUgc2FmZSB0byB1c2Ugb24gZS5nLiB1bnVzZWQgcG9ydGlvbiBvZiBWUkFNLgotCi0JICBTYXkgTiwgdW5sZXNzIHlvdSBhYnNvbHV0ZWx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorY29uZmlnIEhBVkVfTU1JT1RSQUNFX1NVUFBPUlQKKwlkZWZfYm9vbCB5CiAKICMKICMgSU8gZGVsYXkgdHlwZXM6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKaW5kZXggOTAzZGU0YS4uZWJlN2RlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIG9iai0kKENPTkZJR19DUllQVE9fQUVTX1g4Nl82NCkgKz0gYWVzLXg4Nl82NC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfWDg2XzY0KSArPSB0d29maXNoLXg4Nl82NC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NBTFNBMjBfWDg2XzY0KSArPSBzYWxzYTIwLXg4Nl82NC5vCitvYmotJChDT05GSUdfQ1JZUFRPX0FFU19OSV9JTlRFTCkgKz0gYWVzbmktaW50ZWwubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSQzMyQ19JTlRFTCkgKz0gY3JjMzJjLWludGVsLm8KIApAQCAtMTksMyArMjAsNSBAQAogYWVzLXg4Nl82NC15IDo9IGFlcy14ODZfNjQtYXNtXzY0Lm8gYWVzX2dsdWUubwogdHdvZmlzaC14ODZfNjQteSA6PSB0d29maXNoLXg4Nl82NC1hc21fNjQubyB0d29maXNoX2dsdWUubwogc2Fsc2EyMC14ODZfNjQteSA6PSBzYWxzYTIwLXg4Nl82NC1hc21fNjQubyBzYWxzYTIwX2dsdWUubworCithZXNuaS1pbnRlbC15IDo9IGFlc25pLWludGVsX2FzbS5vIGFlc25pLWludGVsX2dsdWUubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TIGIvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TCmluZGV4IGU0MWIxNDcuLmI5NDllYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMKQEAgLTQxLDE0ICs0MSwxNCBAQAogI2RlZmluZSB0bGVuIDEwMjQgICAvLyBsZW5ndGggb2YgZWFjaCBvZiA0ICd4b3InIGFycmF5cyAoMjU2IDMyLWJpdCB3b3JkcykKIAogLyogb2Zmc2V0cyB0byBwYXJhbWV0ZXJzIHdpdGggb25lIHJlZ2lzdGVyIHB1c2hlZCBvbnRvIHN0YWNrICovCi0jZGVmaW5lIHRmbSA4CisjZGVmaW5lIGN0eCA4CiAjZGVmaW5lIG91dF9ibGsgMTIKICNkZWZpbmUgaW5fYmxrIDE2CiAKLS8qIG9mZnNldHMgaW4gY3J5cHRvX3RmbSBzdHJ1Y3R1cmUgKi8KLSNkZWZpbmUga2xlbiAoY3J5cHRvX3RmbV9jdHhfb2Zmc2V0ICsgMCkKLSNkZWZpbmUgZWtleSAoY3J5cHRvX3RmbV9jdHhfb2Zmc2V0ICsgNCkKLSNkZWZpbmUgZGtleSAoY3J5cHRvX3RmbV9jdHhfb2Zmc2V0ICsgMjQ0KQorLyogb2Zmc2V0cyBpbiBjcnlwdG9fYWVzX2N0eCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUga2xlbiAoNDgwKQorI2RlZmluZSBla2V5ICgwKQorI2RlZmluZSBka2V5ICgyNDApCiAKIC8vIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIGVuY3J5cHQgYW5kIGRlY3J5cHQgc3Vicm91dGluZXMKIApAQCAtMjE3LDcgKzIxNyw3IEBACiAJZG9fY29sICh0YWJsZSwgcjUscjAscjEscjQsIHIyLHIzKTsJCS8qIGlkeD1yNSAqLwogCiAvLyBBRVMgKFJpam5kYWVsKSBFbmNyeXB0aW9uIFN1YnJvdXRpbmUKLS8qIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCisvKiB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KIAogLmdsb2JhbCAgYWVzX2VuY19ibGsKIApAQCAtMjI4LDcgKzIyOCw3IEBACiAKIGFlc19lbmNfYmxrOgogCXB1c2ggICAgJWVicAotCW1vdiAgICAgdGZtKCVlc3ApLCVlYnAKKwltb3YgICAgIGN0eCglZXNwKSwlZWJwCiAKIC8vIENBVVRJT046IHRoZSBvcmRlciBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZXNlIGFzc2lnbnMgCiAvLyByZWx5IG9uIHRoZSByZWdpc3RlciBtYXBwaW5ncwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJcmV0CiAKIC8vIEFFUyAoUmlqbmRhZWwpIERlY3J5cHRpb24gU3Vicm91dGluZQotLyogdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KKy8qIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLwogCiAuZ2xvYmFsICBhZXNfZGVjX2JsawogCkBAIC0zMDMsNyArMzAzLDcgQEAKIAogYWVzX2RlY19ibGs6CiAJcHVzaCAgICAlZWJwCi0JbW92ICAgICB0Zm0oJWVzcCksJWVicAorCW1vdiAgICAgY3R4KCVlc3ApLCVlYnAKIAogLy8gQ0FVVElPTjogdGhlIG9yZGVyIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlc2UgYXNzaWducyAKIC8vIHJlbHkgb24gdGhlIHJlZ2lzdGVyIG1hcHBpbmdzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUyBiL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TCmluZGV4IGExMjBmNTIuLjViNTc3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TCkBAIC0xNyw4ICsxNyw2IEBACiAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAotI2RlZmluZSBCQVNFIGNyeXB0b190Zm1fY3R4X29mZnNldAotCiAjZGVmaW5lIFIxCSVyYXgKICNkZWZpbmUgUjFFCSVlYXgKICNkZWZpbmUgUjFYCSVheApAQCAtNTYsMTMgKzU0LDEzIEBACiAJLmFsaWduCTg7CQkJXAogRlVOQzoJbW92cQlyMSxyMjsJCQlcCiAJbW92cQlyMyxyNDsJCQlcCi0JbGVhcQlCQVNFK0tFWSs0OCs0KHI4KSxyOTsJXAorCWxlYXEJS0VZKzQ4KHI4KSxyOTsJCVwKIAltb3ZxCXIxMCxyMTE7CQlcCiAJbW92bAkocjcpLHI1ICMjIEU7CQlcCiAJbW92bAk0KHI3KSxyMSAjIyBFOwkJXAogCW1vdmwJOChyNykscjYgIyMgRTsJCVwKIAltb3ZsCTEyKHI3KSxyNyAjIyBFOwkJXAotCW1vdmwJQkFTRSswKHI4KSxyMTAgIyMgRTsJXAorCW1vdmwJNDgwKHI4KSxyMTAgIyMgRTsJXAogCXhvcmwJLTQ4KHI5KSxyNSAjIyBFOwlcCiAJeG9ybAktNDQocjkpLHIxICMjIEU7CVwKIAl4b3JsCS00MChyOSkscjYgIyMgRTsJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYwppbmRleCA3MWY0NTc4Li40OWFlOWZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYwpAQCAtNSwxNyArNSwyOSBAQAogCiAjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgogCi1hc21saW5rYWdlIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKTsKLWFzbWxpbmthZ2Ugdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOworCit2b2lkIGNyeXB0b19hZXNfZW5jcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJYWVzX2VuY19ibGsoY3R4LCBkc3QsIHNyYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWVzX2VuY3J5cHRfeDg2KTsKKwordm9pZCBjcnlwdG9fYWVzX2RlY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCWFlc19kZWNfYmxrKGN0eCwgZHN0LCBzcmMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2Flc19kZWNyeXB0X3g4Nik7CiAKIHN0YXRpYyB2b2lkIGFlc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7Ci0JYWVzX2VuY19ibGsodGZtLCBkc3QsIHNyYyk7CisJYWVzX2VuY19ibGsoY3J5cHRvX3RmbV9jdHgodGZtKSwgZHN0LCBzcmMpOwogfQogCiBzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogewotCWFlc19kZWNfYmxrKHRmbSwgZHN0LCBzcmMpOworCWFlc19kZWNfYmxrKGNyeXB0b190Zm1fY3R4KHRmbSksIGRzdCwgc3JjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc19hbGcgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiYTk5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUwpAQCAtMCwwICsxLDg5NiBAQAorLyoKKyAqIEltcGxlbWVudCBBRVMgYWxnb3JpdGhtIGluIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMuCisgKgorICogVGhlIHdoaXRlIHBhcGVyIG9mIEFFUy1OSSBpbnN0cnVjdGlvbnMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKKyAqICAgaHR0cDovL3NvZnR3YXJlY29tbXVuaXR5LmludGVsLmNvbS9pc24vZG93bmxvYWRzL2ludGVsYXZ4L0FFUy1JbnN0cnVjdGlvbnMtU2V0X1dQLnBkZgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgSW50ZWwgQ29ycC4KKyAqICAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKiAgICAgICAgICAgIFZpbm9kaCBHb3BhbCA8dmlub2RoLmdvcGFsQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgS2FocmFtYW4gQWtkZW1pcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLnRleHQKKworI2RlZmluZSBTVEFURTEJJXhtbTAKKyNkZWZpbmUgU1RBVEUyCSV4bW00CisjZGVmaW5lIFNUQVRFMwkleG1tNQorI2RlZmluZSBTVEFURTQJJXhtbTYKKyNkZWZpbmUgU1RBVEUJU1RBVEUxCisjZGVmaW5lIElOMQkleG1tMQorI2RlZmluZSBJTjIJJXhtbTcKKyNkZWZpbmUgSU4zCSV4bW04CisjZGVmaW5lIElONAkleG1tOQorI2RlZmluZSBJTglJTjEKKyNkZWZpbmUgS0VZCSV4bW0yCisjZGVmaW5lIElWCSV4bW0zCisKKyNkZWZpbmUgS0VZUAklcmRpCisjZGVmaW5lIE9VVFAJJXJzaQorI2RlZmluZSBJTlAJJXJkeAorI2RlZmluZSBMRU4JJXJjeAorI2RlZmluZSBJVlAJJXI4CisjZGVmaW5lIEtMRU4JJXI5ZAorI2RlZmluZSBUMQklcjEwCisjZGVmaW5lIFRLRVlQCVQxCisjZGVmaW5lIFQyCSVyMTEKKworX2tleV9leHBhbnNpb25fMTI4OgorX2tleV9leHBhbnNpb25fMjU2YToKKwlwc2h1ZmQgJDBiMTExMTExMTEsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJcHhvciAleG1tMSwgJXhtbTAKKwltb3ZhcHMgJXhtbTAsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCXJldAorCitfa2V5X2V4cGFuc2lvbl8xOTJhOgorCXBzaHVmZCAkMGIwMTAxMDEwMSwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlweG9yICV4bW0xLCAleG1tMAorCisJbW92YXBzICV4bW0yLCAleG1tNQorCW1vdmFwcyAleG1tMiwgJXhtbTYKKwlwc2xsZHEgJDQsICV4bW01CisJcHNodWZkICQwYjExMTExMTExLCAleG1tMCwgJXhtbTMKKwlweG9yICV4bW0zLCAleG1tMgorCXB4b3IgJXhtbTUsICV4bW0yCisKKwltb3ZhcHMgJXhtbTAsICV4bW0xCisJc2h1ZnBzICQwYjAxMDAwMTAwLCAleG1tMCwgJXhtbTYKKwltb3ZhcHMgJXhtbTYsICglcmN4KQorCXNodWZwcyAkMGIwMTAwMTExMCwgJXhtbTIsICV4bW0xCisJbW92YXBzICV4bW0xLCAxNiglcmN4KQorCWFkZCAkMHgyMCwgJXJjeAorCXJldAorCitfa2V5X2V4cGFuc2lvbl8xOTJiOgorCXBzaHVmZCAkMGIwMTAxMDEwMSwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlweG9yICV4bW0xLCAleG1tMAorCisJbW92YXBzICV4bW0yLCAleG1tNQorCXBzbGxkcSAkNCwgJXhtbTUKKwlwc2h1ZmQgJDBiMTExMTExMTEsICV4bW0wLCAleG1tMworCXB4b3IgJXhtbTMsICV4bW0yCisJcHhvciAleG1tNSwgJXhtbTIKKworCW1vdmFwcyAleG1tMCwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJcmV0CisKK19rZXlfZXhwYW5zaW9uXzI1NmI6CisJcHNodWZkICQwYjEwMTAxMDEwLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0yLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0yCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMiwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMgorCXB4b3IgJXhtbTEsICV4bW0yCisJbW92YXBzICV4bW0yLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwlyZXQKKworLyoKKyAqIGludCBhZXNuaV9zZXRfa2V5KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqaW5fa2V5LAorICogICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pCisgKi8KK0VOVFJZKGFlc25pX3NldF9rZXkpCisJbW92dXBzICglcnNpKSwgJXhtbTAJCSMgdXNlciBrZXkgKGZpcnN0IDE2IGJ5dGVzKQorCW1vdmFwcyAleG1tMCwgKCVyZGkpCisJbGVhIDB4MTAoJXJkaSksICVyY3gJCSMga2V5IGFkZHIKKwltb3ZsICVlZHgsIDQ4MCglcmRpKQorCXB4b3IgJXhtbTQsICV4bW00CQkjIHhtbTQgaXMgYXNzdW1lZCAwIGluIF9rZXlfZXhwYW5zaW9uX3gKKwljbXAgJDI0LCAlZGwKKwlqYiAuTGVuY19rZXkxMjgKKwlqZSAuTGVuY19rZXkxOTIKKwltb3Z1cHMgMHgxMCglcnNpKSwgJXhtbTIJIyBvdGhlciB1c2VyIGtleQorCW1vdmFwcyAleG1tMiwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTIsICV4bW0xCSMgcm91bmQgMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTIsICV4bW0xCSMgcm91bmQgMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTIsICV4bW0xCSMgcm91bmQgMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA3CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHg0MAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCWptcCAuTGRlY19rZXkKKy5MZW5jX2tleTE5MjoKKwltb3ZxIDB4MTAoJXJzaSksICV4bW0yCQkjIG90aGVyIHVzZXIga2V5CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTIsICV4bW0xCSMgcm91bmQgMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMiwgJXhtbTEJIyByb3VuZCAyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0yLCAleG1tMQkjIHJvdW5kIDMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0MCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4NDAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4MCwgJXhtbTIsICV4bW0xCSMgcm91bmQgOAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4ODAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwlqbXAgLkxkZWNfa2V5CisuTGVuY19rZXkxMjg6CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTAsICV4bW0xCSMgcm91bmQgMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0wLCAleG1tMQkjIHJvdW5kIDIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMCwgJXhtbTEJIyByb3VuZCAzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA1CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDYKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0MCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4NDAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA4CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHg4MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MWIsICV4bW0wLCAleG1tMQkjIHJvdW5kIDkKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDFiCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgzNiwgJXhtbTAsICV4bW0xCSMgcm91bmQgMTAKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDM2CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKy5MZGVjX2tleToKKwlzdWIgJDB4MTAsICVyY3gKKwltb3ZhcHMgKCVyZGkpLCAleG1tMAorCW1vdmFwcyAoJXJjeCksICV4bW0xCisJbW92YXBzICV4bW0wLCAyNDAoJXJjeCkKKwltb3ZhcHMgJXhtbTEsIDI0MCglcmRpKQorCWFkZCAkMHgxMCwgJXJkaQorCWxlYSAyNDAtMTYoJXJjeCksICVyc2kKKy5hbGlnbiA0CisuTGRlY19rZXlfbG9vcDoKKwltb3ZhcHMgKCVyZGkpLCAleG1tMAorCSMgYWVzaW1jICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGIsIDB4YzgKKwltb3ZhcHMgJXhtbTEsICglcnNpKQorCWFkZCAkMHgxMCwgJXJkaQorCXN1YiAkMHgxMCwgJXJzaQorCWNtcCAlcmN4LCAlcmRpCisJamIgLkxkZWNfa2V5X2xvb3AKKwl4b3IgJXJheCwgJXJheAorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCisgKi8KK0VOVFJZKGFlc25pX2VuYykKKwltb3ZsIDQ4MChLRVlQKSwgS0xFTgkJIyBrZXkgbGVuZ3RoCisJbW92dXBzIChJTlApLCBTVEFURQkJIyBpbnB1dAorCWNhbGwgX2Flc25pX2VuYzEKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQkJIyBvdXRwdXQKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9lbmMxOgkJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlyb3VuZCBjb3VudAorICoJU1RBVEU6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqIG91dHB1dDoKKyAqCVNUQVRFOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9lbmMxOgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUJCSMgcm91bmQgMAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkxlbmMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkxlbmMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorLmFsaWduIDQKKy5MZW5jMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKy5hbGlnbiA0CisuTGVuYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGMyCisJcmV0CisKKy8qCisgKiBfYWVzbmlfZW5jNDoJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlyb3VuZCBjb3VudAorICoJU1RBVEUxOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBvdXRwdXQ6CisgKglTVEFURTE6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2VuYzQ6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURTEJCSMgcm91bmQgMAorCXB4b3IgS0VZLCBTVEFURTIKKwlweG9yIEtFWSwgU1RBVEUzCisJcHhvciBLRVksIFNUQVRFNAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkw0ZW5jMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MNGVuYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKyMuYWxpZ24gNAorLkw0ZW5jMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorIy5hbGlnbiA0CisuTDRlbmMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUxCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4YzIKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGUyCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhlYQorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZjIKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZGVjIChzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKKyAqLworRU5UUlkoYWVzbmlfZGVjKQorCW1vdiA0ODAoS0VZUCksIEtMRU4JCSMga2V5IGxlbmd0aAorCWFkZCAkMjQwLCBLRVlQCisJbW92dXBzIChJTlApLCBTVEFURQkJIyBpbnB1dAorCWNhbGwgX2Flc25pX2RlYzEKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQkJI291dHB1dAorCXJldAorCisvKgorICogX2Flc25pX2RlYzE6CQlpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCWtleSBsZW5ndGgKKyAqCVNUQVRFOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKiBvdXRwdXQ6CisgKglTVEFURToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZGVjMToKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFCQkjIHJvdW5kIDAKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MZGVjMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MZGVjMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKy5hbGlnbiA0CisuTGRlYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisuYWxpZ24gNAorLkxkZWMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUJCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4YzIKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9kZWM0OglpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCWtleSBsZW5ndGgKKyAqCVNUQVRFMToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogb3V0cHV0OgorICoJU1RBVEUxOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9kZWM0OgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUxCQkjIHJvdW5kIDAKKwlweG9yIEtFWSwgU1RBVEUyCisJcHhvciBLRVksIFNUQVRFMworCXB4b3IgS0VZLCBTVEFURTQKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MNGRlYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTDRkZWMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisuYWxpZ24gNAorLkw0ZGVjMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorLmFsaWduIDQKKy5MNGRlYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTEJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhjMgorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4ZTIKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGVhCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhmMgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9lY2JfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4pCisgKi8KK0VOVFJZKGFlc25pX2VjYl9lbmMpCisJdGVzdCBMRU4sIExFTgkJIyBjaGVjayBsZW5ndGgKKwlqeiAuTGVjYl9lbmNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2VuY19yZXQKKwljbXAgJDY0LCBMRU4KKwlqYiAuTGVjYl9lbmNfbG9vcDEKKy5hbGlnbiA0CisuTGVjYl9lbmNfbG9vcDQ6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwltb3Z1cHMgMHgxMChJTlApLCBTVEFURTIKKwltb3Z1cHMgMHgyMChJTlApLCBTVEFURTMKKwltb3Z1cHMgMHgzMChJTlApLCBTVEFURTQKKwljYWxsIF9hZXNuaV9lbmM0CisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJbW92dXBzIFNUQVRFMiwgMHgxMChPVVRQKQorCW1vdnVwcyBTVEFURTMsIDB4MjAoT1VUUCkKKwltb3Z1cHMgU1RBVEU0LCAweDMwKE9VVFApCisJc3ViICQ2NCwgTEVOCisJYWRkICQ2NCwgSU5QCisJYWRkICQ2NCwgT1VUUAorCWNtcCAkNjQsIExFTgorCWpnZSAuTGVjYl9lbmNfbG9vcDQKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9lbmNfcmV0CisuYWxpZ24gNAorLkxlY2JfZW5jX2xvb3AxOgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJY2FsbCBfYWVzbmlfZW5jMQorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxlY2JfZW5jX2xvb3AxCisuTGVjYl9lbmNfcmV0OgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9lY2JfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4pOworICovCitFTlRSWShhZXNuaV9lY2JfZGVjKQorCXRlc3QgTEVOLCBMRU4KKwlqeiAuTGVjYl9kZWNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCWFkZCAkMjQwLCBLRVlQCisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZGVjX3JldAorCWNtcCAkNjQsIExFTgorCWpiIC5MZWNiX2RlY19sb29wMQorLmFsaWduIDQKKy5MZWNiX2RlY19sb29wNDoKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCW1vdnVwcyAweDEwKElOUCksIFNUQVRFMgorCW1vdnVwcyAweDIwKElOUCksIFNUQVRFMworCW1vdnVwcyAweDMwKElOUCksIFNUQVRFNAorCWNhbGwgX2Flc25pX2RlYzQKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwltb3Z1cHMgU1RBVEUyLCAweDEwKE9VVFApCisJbW92dXBzIFNUQVRFMywgMHgyMChPVVRQKQorCW1vdnVwcyBTVEFURTQsIDB4MzAoT1VUUCkKKwlzdWIgJDY0LCBMRU4KKwlhZGQgJDY0LCBJTlAKKwlhZGQgJDY0LCBPVVRQCisJY21wICQ2NCwgTEVOCisJamdlIC5MZWNiX2RlY19sb29wNAorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2RlY19yZXQKKy5hbGlnbiA0CisuTGVjYl9kZWNfbG9vcDE6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwljYWxsIF9hZXNuaV9kZWMxCisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGVjYl9kZWNfbG9vcDEKKy5MZWNiX2RlY19yZXQ6CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2NiY19lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbiwgdTggKml2KQorICovCitFTlRSWShhZXNuaV9jYmNfZW5jKQorCWNtcCAkMTYsIExFTgorCWpiIC5MY2JjX2VuY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJbW92dXBzIChJVlApLCBTVEFURQkjIGxvYWQgaXYgYXMgaW5pdGlhbCBzdGF0ZQorLmFsaWduIDQKKy5MY2JjX2VuY19sb29wOgorCW1vdnVwcyAoSU5QKSwgSU4JIyBsb2FkIGlucHV0CisJcHhvciBJTiwgU1RBVEUKKwljYWxsIF9hZXNuaV9lbmMxCisJbW92dXBzIFNUQVRFLCAoT1VUUCkJIyBzdG9yZSBvdXRwdXQKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MY2JjX2VuY19sb29wCisJbW92dXBzIFNUQVRFLCAoSVZQKQorLkxjYmNfZW5jX3JldDoKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfY2JjX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuLCB1OCAqaXYpCisgKi8KK0VOVFJZKGFlc25pX2NiY19kZWMpCisJY21wICQxNiwgTEVOCisJamIgLkxjYmNfZGVjX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwlhZGQgJDI0MCwgS0VZUAorCW1vdnVwcyAoSVZQKSwgSVYKKwljbXAgJDY0LCBMRU4KKwlqYiAuTGNiY19kZWNfbG9vcDEKKy5hbGlnbiA0CisuTGNiY19kZWNfbG9vcDQ6CisJbW92dXBzIChJTlApLCBJTjEKKwltb3ZhcHMgSU4xLCBTVEFURTEKKwltb3Z1cHMgMHgxMChJTlApLCBJTjIKKwltb3ZhcHMgSU4yLCBTVEFURTIKKwltb3Z1cHMgMHgyMChJTlApLCBJTjMKKwltb3ZhcHMgSU4zLCBTVEFURTMKKwltb3Z1cHMgMHgzMChJTlApLCBJTjQKKwltb3ZhcHMgSU40LCBTVEFURTQKKwljYWxsIF9hZXNuaV9kZWM0CisJcHhvciBJViwgU1RBVEUxCisJcHhvciBJTjEsIFNUQVRFMgorCXB4b3IgSU4yLCBTVEFURTMKKwlweG9yIElOMywgU1RBVEU0CisJbW92YXBzIElONCwgSVYKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwltb3Z1cHMgU1RBVEUyLCAweDEwKE9VVFApCisJbW92dXBzIFNUQVRFMywgMHgyMChPVVRQKQorCW1vdnVwcyBTVEFURTQsIDB4MzAoT1VUUCkKKwlzdWIgJDY0LCBMRU4KKwlhZGQgJDY0LCBJTlAKKwlhZGQgJDY0LCBPVVRQCisJY21wICQ2NCwgTEVOCisJamdlIC5MY2JjX2RlY19sb29wNAorCWNtcCAkMTYsIExFTgorCWpiIC5MY2JjX2RlY19yZXQKKy5hbGlnbiA0CisuTGNiY19kZWNfbG9vcDE6CisJbW92dXBzIChJTlApLCBJTgorCW1vdmFwcyBJTiwgU1RBVEUKKwljYWxsIF9hZXNuaV9kZWMxCisJcHhvciBJViwgU1RBVEUKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQorCW1vdmFwcyBJTiwgSVYKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MY2JjX2RlY19sb29wMQorCW1vdnVwcyBJViwgKElWUCkKKy5MY2JjX2RlY19yZXQ6CisJcmV0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmFmMGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMuIFRoaXMgZmlsZSBjb250YWlucyBnbHVlCisgKiBjb2RlLCB0aGUgcmVhbCBBRVMgaW1wbGVtZW50YXRpb24gaXMgaW4gaW50ZWwtYWVzX2FzbS5TLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgSW50ZWwgQ29ycC4KKyAqICAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRkLmg+CisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKyNpbmNsdWRlIDxhc20vYWVzLmg+CisKK3N0cnVjdCBhc3luY19hZXNfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm07Cit9OworCisjZGVmaW5lIEFFU05JX0FMSUdOCTE2CisjZGVmaW5lIEFFU19CTE9DS19NQVNLCSh+KEFFU19CTE9DS19TSVpFLTEpKQorCithc21saW5rYWdlIGludCBhZXNuaV9zZXRfa2V5KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqaW5fa2V5LAorCQkJICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9lY2JfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9lY2JfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9jYmNfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2NiY19kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF9mcHVfdXNpbmcodm9pZCkKK3sKKwlpZiAoaW5faW50ZXJydXB0KCkgJiYgIShyZWFkX2NyMCgpICYgWDg2X0NSMF9UUykpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqYWVzX2N0eCh2b2lkICpyYXdfY3R4KQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXJhd19jdHg7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IEFFU05JX0FMSUdOOworCisJaWYgKGFsaWduIDw9IGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpKQorCQlhbGlnbiA9IDE7CisJcmV0dXJuIChzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKilBTElHTihhZGRyLCBhbGlnbik7Cit9CisKK3N0YXRpYyBpbnQgYWVzX3NldF9rZXlfY29tbW9uKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHZvaWQgKnJhd19jdHgsCisJCQkgICAgICBjb25zdCB1OCAqaW5fa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgocmF3X2N0eCk7CisJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKKwlpbnQgZXJyOworCisJaWYgKGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTI4ICYmIGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTkyICYmCisJICAgIGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMjU2KSB7CisJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwkJZXJyID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKKwllbHNlIHsKKwkJa2VybmVsX2ZwdV9iZWdpbigpOworCQllcnIgPSBhZXNuaV9zZXRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKKwkJa2VybmVsX2ZwdV9lbmQoKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFlc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlyZXR1cm4gYWVzX3NldF9rZXlfY29tbW9uKHRmbSwgY3J5cHRvX3RmbV9jdHgodGZtKSwgaW5fa2V5LCBrZXlfbGVuKTsKK30KKworc3RhdGljIHZvaWQgYWVzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKQorCQljcnlwdG9fYWVzX2VuY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOworCWVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCWFlc25pX2VuYyhjdHgsIGRzdCwgc3JjKTsKKwkJa2VybmVsX2ZwdV9lbmQoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFlc19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwkJY3J5cHRvX2Flc19kZWNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKKwllbHNlIHsKKwkJa2VybmVsX2ZwdV9iZWdpbigpOworCQlhZXNuaV9kZWMoY3R4LCBkc3QsIHNyYyk7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzbmlfYWxnID0geworCS5jcmFfbmFtZQkJPSAiYWVzIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gImFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSAzMDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGNyeXB0b19hZXNfY3R4KStBRVNOSV9BTElHTi0xLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGFlc25pX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CT0geworCQkuY2lwaGVyCT0geworCQkJLmNpYV9taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkuY2lhX21heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5jaWFfc2V0a2V5CQk9IGFlc19zZXRfa2V5LAorCQkJLmNpYV9lbmNyeXB0CQk9IGFlc19lbmNyeXB0LAorCQkJLmNpYV9kZWNyeXB0CQk9IGFlc19kZWNyeXB0CisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IGVjYl9lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9lY2JfZW5jKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSyk7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGVjYl9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9lY2JfZGVjKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSyk7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYmxrX2VjYl9hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJfX2VjYi1hZXMtYWVzbmkiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiX19kcml2ZXItZWNiLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCkrQUVTTklfQUxJR04tMSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChibGtfZWNiX2FsZy5jcmFfbGlzdCksCisJLmNyYV91ID0geworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFlc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBlY2JfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gZWNiX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgY2JjX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2NiY19lbmMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLLCB3YWxrLml2KTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2JjX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2NiY19kZWMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLLCB3YWxrLml2KTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBibGtfY2JjX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gIl9fY2JjLWFlcy1hZXNuaSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJfX2RyaXZlci1jYmMtYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGNyeXB0b19hZXNfY3R4KStBRVNOSV9BTElHTi0xLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGJsa19jYmNfYWxnLmNyYV9saXN0KSwKKwkuY3JhX3UgPSB7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWVzX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGNiY19lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBjYmNfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBhYmxrX3NldF9rZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCQl1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CisKKwlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KCZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UsIGtleSwga2V5X2xlbik7Cit9CisKK3N0YXRpYyBpbnQgYWJsa19lbmNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpIHsKKwkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CisJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CisJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CisJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKGNyeXB0ZF9yZXEsICZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UpOworCQlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChjcnlwdGRfcmVxKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKKwkJZGVzYy50Zm0gPSBjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChjdHgtPmNyeXB0ZF90Zm0pOworCQlkZXNjLmluZm8gPSByZXEtPmluZm87CisJCWRlc2MuZmxhZ3MgPSAwOworCQlyZXR1cm4gY3J5cHRvX2Jsa2NpcGhlcl9jcnQoZGVzYy50Zm0pLT5lbmNyeXB0KAorCQkJJmRlc2MsIHJlcS0+ZHN0LCByZXEtPnNyYywgcmVxLT5uYnl0ZXMpOworCX0KK30KKworc3RhdGljIGludCBhYmxrX2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkgeworCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KKwkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oY3J5cHRkX3JlcSwgJmN0eC0+Y3J5cHRkX3RmbS0+YmFzZSk7CisJCXJldHVybiBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KGNyeXB0ZF9yZXEpOworCX0gZWxzZSB7CisJCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjOworCQlkZXNjLnRmbSA9IGNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKGN0eC0+Y3J5cHRkX3RmbSk7CisJCWRlc2MuaW5mbyA9IHJlcS0+aW5mbzsKKwkJZGVzYy5mbGFncyA9IDA7CisJCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2NydChkZXNjLnRmbSktPmRlY3J5cHQoCisJCQkmZGVzYywgcmVxLT5kc3QsIHJlcS0+c3JjLCByZXEtPm5ieXRlcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhYmxrX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0ZF9mcmVlX2FibGtjaXBoZXIoY3R4LT5jcnlwdGRfdGZtKTsKK30KKworc3RhdGljIHZvaWQgYWJsa19pbml0X2NvbW1vbihzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJICAgICBzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm0pCit7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljdHgtPmNyeXB0ZF90Zm0gPSBjcnlwdGRfdGZtOworCXRmbS0+Y3J0X2FibGtjaXBoZXIucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSArCisJCWNyeXB0b19hYmxrY2lwaGVyX3JlcXNpemUoJmNyeXB0ZF90Zm0tPmJhc2UpOworfQorCitzdGF0aWMgaW50IGFibGtfZWNiX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm07CisKKwljcnlwdGRfdGZtID0gY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIoIl9fZHJpdmVyLWVjYi1hZXMtYWVzbmkiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNyeXB0ZF90Zm0pKQorCQlyZXR1cm4gUFRSX0VSUihjcnlwdGRfdGZtKTsKKwlhYmxrX2luaXRfY29tbW9uKHRmbSwgY3J5cHRkX3RmbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhYmxrX2VjYl9hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJlY2IoYWVzKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJlY2ItYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDQwMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSfENSWVBUT19BTEdfQVNZTkMsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgYXN5bmNfYWVzX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGFibGtfZWNiX2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9IGFibGtfZWNiX2luaXQsCisJLmNyYV9leGl0CQk9IGFibGtfZXhpdCwKKwkuY3JhX3UgPSB7CisJCS5hYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFibGtfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gYWJsa19lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBhYmxrX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgYWJsa19jYmNfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbTsKKworCWNyeXB0ZF90Zm0gPSBjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcigiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsIDAsIDApOworCWlmIChJU19FUlIoY3J5cHRkX3RmbSkpCisJCXJldHVybiBQVFJfRVJSKGNyeXB0ZF90Zm0pOworCWFibGtfaW5pdF9jb21tb24odGZtLCBjcnlwdGRfdGZtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFibGtfY2JjX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gImNiYyhhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gImNiYy1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gNDAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVJ8Q1JZUFRPX0FMR19BU1lOQywKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBhc3luY19hZXNfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYWJsa19jYmNfYWxnLmNyYV9saXN0KSwKKwkuY3JhX2luaXQJCT0gYWJsa19jYmNfaW5pdCwKKwkuY3JhX2V4aXQJCT0gYWJsa19leGl0LAorCS5jcmFfdSA9IHsKKwkJLmFibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5pdnNpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFibGtfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gYWJsa19lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBhYmxrX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFlc25pX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJaWYgKCFjcHVfaGFzX2FlcykgeworCQlwcmludGsoS0VSTl9FUlIgIkludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgYXJlIG5vdCBkZXRlY3RlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpKSkKKwkJZ290byBhZXNfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpKSkKKwkJZ290byBibGtfZWNiX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmJsa19jYmNfYWxnKSkpCisJCWdvdG8gYmxrX2NiY19lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhYmxrX2VjYl9hbGcpKSkKKwkJZ290byBhYmxrX2VjYl9lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhYmxrX2NiY19hbGcpKSkKKwkJZ290byBhYmxrX2NiY19lcnI7CisKKwlyZXR1cm4gZXJyOworCithYmxrX2NiY19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX2VjYl9hbGcpOworYWJsa19lY2JfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2NiY19hbGcpOworYmxrX2NiY19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfZWNiX2FsZyk7CitibGtfZWNiX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZyk7CithZXNfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZXNuaV9leGl0KHZvaWQpCit7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX2NiY19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19lY2JfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19jYmNfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19lY2JfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZyk7Cit9CisKK21vZHVsZV9pbml0KGFlc25pX2luaXQpOworbW9kdWxlX2V4aXQoYWVzbmlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUmlqbmRhZWwgKEFFUykgQ2lwaGVyIEFsZ29yaXRobSwgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBvcHRpbWl6ZWQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygiYWVzIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Flcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTQ1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZXMuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIEFTTV9YODZfQUVTX0gKKyNkZWZpbmUgQVNNX1g4Nl9BRVNfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorCit2b2lkIGNyeXB0b19hZXNfZW5jcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsCisJCQkgICAgY29uc3QgdTggKnNyYyk7Cit2b2lkIGNyeXB0b19hZXNfZGVjcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsCisJCQkgICAgY29uc3QgdTggKnNyYyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCA3MzAxZTYwLi4wYmViYTBkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0yMTMsNiArMjEzLDcgQEAKICNkZWZpbmUgY3B1X2hhc194bW0JCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0pCiAjZGVmaW5lIGNwdV9oYXNfeG1tMgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTIpCiAjZGVmaW5lIGNwdV9oYXNfeG1tMwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTMpCisjZGVmaW5lIGNwdV9oYXNfYWVzCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQUVTKQogI2RlZmluZSBjcHVfaGFzX2h0CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFQpCiAjZGVmaW5lIGNwdV9oYXNfbXAJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9NUCkKICNkZWZpbmUgY3B1X2hhc19ueAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05YKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaAppbmRleCBjYTVmZmIyLi5lZGM5MGYyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaApAQCAtMzcsOCArMzcsNiBAQAogCiAjZWxzZSAvKiAhQ09ORklHX1g4Nl8zMiAqLwogCi0jZGVmaW5lIE1BWF9FRklfSU9fUEFHRVMJMTAwCi0KIGV4dGVybiB1NjQgZWZpX2NhbGwwKHZvaWQgKmZwKTsKIGV4dGVybiB1NjQgZWZpX2NhbGwxKHZvaWQgKmZwLCB1NjQgYXJnMSk7CiBleHRlcm4gdTY0IGVmaV9jYWxsMih2b2lkICpmcCwgdTY0IGFyZzEsIHU2NCBhcmcyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwXzY0LmgKaW5kZXggMDBhMzBhYjkuLjhiZTc0MDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgotI2luY2x1ZGUgPGFzbS9lZmkuaD4KIAogLyoKICAqIEhlcmUgd2UgZGVmaW5lIGFsbCB0aGUgY29tcGlsZS10aW1lICdzcGVjaWFsJyB2aXJ0dWFsCkBAIC00Myw5ICs0Miw2IEBACiAJRklYX0FQSUNfQkFTRSwJLyogbG9jYWwgKENQVSkgQVBJQykgLS0gcmVxdWlyZWQgZm9yIFNNUCBvciBub3QgKi8KIAlGSVhfSU9fQVBJQ19CQVNFXzAsCiAJRklYX0lPX0FQSUNfQkFTRV9FTkQgPSBGSVhfSU9fQVBJQ19CQVNFXzAgKyBNQVhfSU9fQVBJQ1MgLSAxLAotCUZJWF9FRklfSU9fTUFQX0xBU1RfUEFHRSwKLQlGSVhfRUZJX0lPX01BUF9GSVJTVF9QQUdFID0gRklYX0VGSV9JT19NQVBfTEFTVF9QQUdFCi0JCQkJICArIE1BWF9FRklfSU9fUEFHRVMgLSAxLAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogCUZJWF9QQVJBVklSVF9CT09UTUFQLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggNDhmMDAwNC4uNzFjOWU1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMTcyLDcgKzE3MiwxMyBAQAogCiAjZWxzZSAgLyogQ09ORklHX1g4Nl8zMiAqLwogCi1leHRlcm4gdm9pZCBmaW5pdCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfTUFUSF9FTVVMQVRJT04KK2V4dGVybiB2b2lkIGZpbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0b2xlcmFudF9md2FpdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmgKaW5kZXggYzFmMDYyOC4uODZhZjI2MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21hcC5oCkBAIC0yMyw2ICsyMyw5IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAoraW50Citpc19pb19tYXBwaW5nX3Bvc3NpYmxlKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOworCiB2b2lkICoKIGlvbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGQyZTNiZjMuLmRjM2Y2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCkBAIC05LDYgKzksMTQgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKKy8qIFNlbGVjdCB4ODYgc3BlY2lmaWMgZmVhdHVyZXMgaW4gPGxpbnV4L2t2bS5oPiAqLworI2RlZmluZSBfX0tWTV9IQVZFX1BJVAorI2RlZmluZSBfX0tWTV9IQVZFX0lPQVBJQworI2RlZmluZSBfX0tWTV9IQVZFX0RFVklDRV9BU1NJR05NRU5UCisjZGVmaW5lIF9fS1ZNX0hBVkVfTVNJCisjZGVmaW5lIF9fS1ZNX0hBVkVfVVNFUl9OTUkKKyNkZWZpbmUgX19LVk1fSEFWRV9HVUVTVF9ERUJVRworCiAvKiBBcmNoaXRlY3R1cmFsIGludGVycnVwdCBsaW5lIGNvdW50LiAqLwogI2RlZmluZSBLVk1fTlJfSU5URVJSVVBUUyAyNTYKIApAQCAtMjA1LDcgKzIxMywzMCBAQAogCV9fczY0IGNvdW50X2xvYWRfdGltZTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKKwlfX3UzMiBleGNlcHRpb247CisJX191MzIgcGFkOworCV9fdTY0IHBjOworCV9fdTY0IGRyNjsKKwlfX3U2NCBkcjc7Cit9OworCisjZGVmaW5lIEtWTV9HVUVTVERCR19VU0VfU1dfQlAJCTB4MDAwMTAwMDAKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1VTRV9IV19CUAkJMHgwMDAyMDAwMAorI2RlZmluZSBLVk1fR1VFU1REQkdfSU5KRUNUX0RCCQkweDAwMDQwMDAwCisjZGVmaW5lIEtWTV9HVUVTVERCR19JTkpFQ1RfQlAJCTB4MDAwODAwMDAKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7CisJX191NjQgZGVidWdyZWdbOF07Cit9OworCiBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSB7CiAJc3RydWN0IGt2bV9waXRfY2hhbm5lbF9zdGF0ZSBjaGFubmVsc1szXTsKIH07CisKK3N0cnVjdCBrdm1fcmVpbmplY3RfY29udHJvbCB7CisJX191OCBwaXRfcmVpbmplY3Q7CisJX191OCByZXNlcnZlZFszMV07Cit9OwogI2VuZGlmIC8qIF9BU01fWDg2X0tWTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA3MzA4NDNkLi5mMGZhZjU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vcHZjbG9jay1hYmkuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL21zci1pbmRleC5oPgogCiAjZGVmaW5lIEtWTV9NQVhfVkNQVVMgMTYKICNkZWZpbmUgS1ZNX01FTU9SWV9TTE9UUyAzMgpAQCAtMTM0LDExICsxMzUsMTggQEAKIAogI2RlZmluZSBLVk1fTlJfTUVNX09CSlMgNDAKIAotc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyB7Ci0JaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgbG9uZyBicFs0XTsKLQlpbnQgc2luZ2xlc3RlcDsKLX07CisjZGVmaW5lIEtWTV9OUl9EQl9SRUdTCTQKKworI2RlZmluZSBEUjZfQkQJCSgxIDw8IDEzKQorI2RlZmluZSBEUjZfQlMJCSgxIDw8IDE0KQorI2RlZmluZSBEUjZfRklYRURfMQkweGZmZmYwZmYwCisjZGVmaW5lIERSNl9WT0xBVElMRQkweDAwMDBlMDBmCisKKyNkZWZpbmUgRFI3X0JQX0VOX01BU0sJMHgwMDAwMDBmZgorI2RlZmluZSBEUjdfR0UJCSgxIDw8IDkpCisjZGVmaW5lIERSN19HRAkJKDEgPDwgMTMpCisjZGVmaW5lIERSN19GSVhFRF8xCTB4MDAwMDA0MDAKKyNkZWZpbmUgRFI3X1ZPTEFUSUxFCTB4ZmZmZjIzZmYKIAogLyoKICAqIFdlIGRvbid0IHdhbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aXRoaW4gdGhlIG1tdSBjb2RlLCBzbyB3ZSBwcmVhbGxvY2F0ZQpAQCAtMTYyLDcgKzE3MCw4IEBACiAgKiAgIGJpdHMgMDozIC0gdG90YWwgZ3Vlc3QgcGFnaW5nIGxldmVscyAoMi00LCBvciB6ZXJvIGZvciByZWFsIG1vZGUpCiAgKiAgIGJpdHMgNDo3IC0gcGFnZSB0YWJsZSBsZXZlbCBmb3IgdGhpcyBzaGFkb3cgKDEtNCkKICAqICAgYml0cyA4OjkgLSBwYWdlIHRhYmxlIHF1YWRyYW50IGZvciAyLWxldmVsIGd1ZXN0cwotICogICBiaXQgICAxNiAtICJtZXRhcGh5c2ljYWwiIC0gZ2ZuIGlzIG5vdCBhIHJlYWwgcGFnZSAoaHVnZSBwYWdlL3JlYWwgbW9kZSkKKyAqICAgYml0ICAgMTYgLSBkaXJlY3QgbWFwcGluZyBvZiB2aXJ0dWFsIHRvIHBoeXNpY2FsIG1hcHBpbmcgYXQgZ2ZuCisgKiAgICAgICAgICAgICAgdXNlZCBmb3IgcmVhbCBtb2RlIGFuZCB0d28tZGltZW5zaW9uYWwgcGFnaW5nCiAgKiAgIGJpdHMgMTc6MTkgLSBjb21tb24gYWNjZXNzIHBlcm1pc3Npb25zIGZvciBhbGwgcHRlcyBpbiB0aGlzIHNoYWRvdyBwYWdlCiAgKi8KIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHsKQEAgLTE3Miw5ICsxODEsMTAgQEAKIAkJdW5zaWduZWQgbGV2ZWw6NDsKIAkJdW5zaWduZWQgcXVhZHJhbnQ6MjsKIAkJdW5zaWduZWQgcGFkX2Zvcl9uaWNlX2hleF9vdXRwdXQ6NjsKLQkJdW5zaWduZWQgbWV0YXBoeXNpY2FsOjE7CisJCXVuc2lnbmVkIGRpcmVjdDoxOwogCQl1bnNpZ25lZCBhY2Nlc3M6MzsKIAkJdW5zaWduZWQgaW52YWxpZDoxOworCQl1bnNpZ25lZCBjcjRfcGdlOjE7CiAJfTsKIH07CiAKQEAgLTIxOCw2ICsyMjgsMTggQEAKIAljaGFyIGJ1Zls1MTJdIF9fYWxpZ25lZChzaXplb2YobG9uZykpOwogfTsKIAorc3RydWN0IGt2bV9waW9fcmVxdWVzdCB7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwlpbnQgY3VyX2NvdW50OworCWd2YV90IGd1ZXN0X2d2YTsKKwlpbnQgaW47CisJaW50IHBvcnQ7CisJaW50IHNpemU7CisJaW50IHN0cmluZzsKKwlpbnQgZG93bjsKKwlpbnQgcmVwOworfTsKKwogLyoKICAqIHg4NiBzdXBwb3J0cyAzIHBhZ2luZyBtb2RlcyAoNC1sZXZlbCA2NC1iaXQsIDMtbGV2ZWwgNjQtYml0LCBhbmQgMi1sZXZlbAogICogMzItYml0KS4gIFRoZSBrdm1fbW11IHN0cnVjdHVyZSBhYnN0cmFjdHMgdGhlIGRldGFpbHMgb2YgdGhlIGN1cnJlbnQgbW11CkBAIC0yMzYsNiArMjU4LDcgQEAKIAlocGFfdCByb290X2hwYTsKIAlpbnQgcm9vdF9sZXZlbDsKIAlpbnQgc2hhZG93X3Jvb3RfbGV2ZWw7CisJdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgYmFzZV9yb2xlOwogCiAJdTY0ICpwYWVfcm9vdDsKIH07CkBAIC0yNTgsNiArMjgxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGNyMzsKIAl1bnNpZ25lZCBsb25nIGNyNDsKIAl1bnNpZ25lZCBsb25nIGNyODsKKwl1MzIgaGZsYWdzOwogCXU2NCBwZHB0cnNbNF07IC8qIHBhZSAqLwogCXU2NCBzaGFkb3dfZWZlcjsKIAl1NjQgYXBpY19iYXNlOwpAQCAtMzM4LDYgKzM2MiwxNSBAQAogCiAJc3RydWN0IG10cnJfc3RhdGVfdHlwZSBtdHJyX3N0YXRlOwogCXUzMiBwYXQ7CisKKwlpbnQgc3dpdGNoX2RiX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBob3N0X2RiW0tWTV9OUl9EQl9SRUdTXTsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZHI2OworCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjc7CisJdW5zaWduZWQgbG9uZyBkYltLVk1fTlJfREJfUkVHU107CisJdW5zaWduZWQgbG9uZyBkcjY7CisJdW5zaWduZWQgbG9uZyBkcjc7CisJdW5zaWduZWQgbG9uZyBlZmZfZGJbS1ZNX05SX0RCX1JFR1NdOwogfTsKIAogc3RydWN0IGt2bV9tZW1fYWxpYXMgewpAQCAtMzc4LDYgKzQxMSw3IEBACiAKIAl1bnNpZ25lZCBsb25nIGlycV9zb3VyY2VzX2JpdG1hcDsKIAl1bnNpZ25lZCBsb25nIGlycV9zdGF0ZXNbS1ZNX0lPQVBJQ19OVU1fUElOU107CisJdTY0IHZtX2luaXRfdHNjOwogfTsKIAogc3RydWN0IGt2bV92bV9zdGF0IHsKQEAgLTQ0Niw4ICs0ODAsNyBAQAogCXZvaWQgKCp2Y3B1X3B1dCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCWludCAoKnNldF9ndWVzdF9kZWJ1Zykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZyk7Ci0Jdm9pZCAoKmd1ZXN0X2RlYnVnX3ByZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpOwogCWludCAoKmdldF9tc3IpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0ICpwZGF0YSk7CiAJaW50ICgqc2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgZGF0YSk7CiAJdTY0ICgqZ2V0X3NlZ21lbnRfYmFzZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKTsKQEAgLTU4MywxNiArNjE2LDEyIEBACiB2b2lkIGt2bV9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IyLAogCQkJICAgdTMyIGVycm9yX2NvZGUpOwogCi12b2lkIGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCk7CitpbnQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKIAogdm9pZCBrdm1faW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB2b2lkIGZ4X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotaW50IGVtdWxhdG9yX3JlYWRfc3RkKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgdm9pZCAqdmFsLAotCQkgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgIGNvbnN0IHZvaWQgKnZhbCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCkBAIC03MzcsNiArNzY2LDEwIEBACiAJVEFTS19TV0lUQ0hfR0FURSA9IDMsCiB9OwogCisjZGVmaW5lIEhGX0dJRl9NQVNLCQkoMSA8PCAwKQorI2RlZmluZSBIRl9ISUZfTUFTSwkJKDEgPDwgMSkKKyNkZWZpbmUgSEZfVklOVFJfTUFTSwkJKDEgPDwgMikKKwogLyoKICAqIEhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgbWF5IGZhdWx0IGlmIGEKICAqIHJlYm9vdCB0dXJucyBvZmYgdmlydHVhbGl6YXRpb24gd2hpbGUgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaAppbmRleCAwN2YxYWY0Li4xMDVmYjkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaApAQCAtMzIsOCArMzIsNiBAQAogCWdldF9tZW1jZmdfbnVtYV9mbGF0KCk7CiB9CiAKLWV4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7Ci0KIGV4dGVybiB2b2lkIHJlc3VtZV9tYXBfbnVtYV9rdmEocGdkX3QgKnBnZCk7CiAKICNlbHNlIC8qICFDT05GSUdfTlVNQSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfNjQuaAppbmRleCBhNWIzODE3Li5hMjlmNDhjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfNjQuaApAQCAtNDAsOCArNDAsNiBAQAogI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsJXAogCQkJCSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQogCi1leHRlcm4gaW50IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pOwotCiAjaWZkZWYgQ09ORklHX05VTUFfRU1VCiAjZGVmaW5lIEZBS0VfTk9ERV9NSU5fU0laRQkoNjQgKiAxMDI0ICogMTAyNCkKICNkZWZpbmUgRkFLRV9OT0RFX01JTl9IQVNIX01BU0sJKH4oRkFLRV9OT0RFX01JTl9TSVpFIC0gMVVMKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggMzU4YWNjNS4uZjRlNTA1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTE4LDExICsxOCwxNSBAQAogI2RlZmluZSBfRUZFUl9MTUUJCTggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8KICNkZWZpbmUgX0VGRVJfTE1BCQkxMCAvKiBMb25nIG1vZGUgYWN0aXZlIChyZWFkLW9ubHkpICovCiAjZGVmaW5lIF9FRkVSX05YCQkxMSAvKiBObyBleGVjdXRlIGVuYWJsZSAqLworI2RlZmluZSBfRUZFUl9TVk1FCQkxMiAvKiBFbmFibGUgdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgX0VGRVJfRkZYU1IJCTE0IC8qIEVuYWJsZSBGYXN0IEZYU0FWRS9GWFJTVE9SICovCiAKICNkZWZpbmUgRUZFUl9TQ0UJCSgxPDxfRUZFUl9TQ0UpCiAjZGVmaW5lIEVGRVJfTE1FCQkoMTw8X0VGRVJfTE1FKQogI2RlZmluZSBFRkVSX0xNQQkJKDE8PF9FRkVSX0xNQSkKICNkZWZpbmUgRUZFUl9OWAkJCSgxPDxfRUZFUl9OWCkKKyNkZWZpbmUgRUZFUl9TVk1FCQkoMTw8X0VGRVJfU1ZNRSkKKyNkZWZpbmUgRUZFUl9GRlhTUgkJKDE8PF9FRkVSX0ZGWFNSKQogCiAvKiBJbnRlbCBNU1JzLiBTb21lIGFsc28gYXZhaWxhYmxlIG9uIG90aGVyIENQVXMgKi8KICNkZWZpbmUgTVNSX0lBMzJfUEVSRkNUUjAJCTB4MDAwMDAwYzEKQEAgLTM2MCw0ICszNjQsOSBAQAogI2RlZmluZSBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMyICAgIDB4MDAwMDA0OGIKICNkZWZpbmUgTVNSX0lBMzJfVk1YX0VQVF9WUElEX0NBUCAgICAgICAweDAwMDAwNDhjCiAKKy8qIEFNRC1WIE1TUnMgKi8KKworI2RlZmluZSBNU1JfVk1fQ1IgICAgICAgICAgICAgICAgICAgICAgIDB4YzAwMTAxMTQKKyNkZWZpbmUgTVNSX1ZNX0hTQVZFX1BBICAgICAgICAgICAgICAgICAweGMwMDEwMTE3CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9NU1JfSU5ERVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGU5ODczYTIuLjc3NjU3OTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTU3LDcgKzU3LDYgQEAKIHR5cGVkZWYgc3RydWN0IHsgcGdwcm90dmFsX3QgcGdwcm90OyB9IHBncHJvdF90OwogCiBleHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKLWV4dGVybiBpbnQgcGFnZXJhbmdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gaW50IGRldm1lbV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKIGV4dGVybiB2b2lkIG1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJICAgICAgIHBncHJvdF90IHZtYV9wcm90KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IGMwOWExNDEuLmUyOTkyODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtMTM1MiwxNCArMTM1Miw3IEBACiAJUFZPUF9WQ0FMTDAocHZfY3B1X29wcy5sYXp5X21vZGUubGVhdmUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mbHVzaF9sYXp5X2NwdV9tb2RlKHZvaWQpCi17Ci0JaWYgKHVubGlrZWx5KHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX0NQVSkpIHsKLQkJYXJjaF9sZWF2ZV9sYXp5X2NwdV9tb2RlKCk7Ci0JCWFyY2hfZW50ZXJfbGF6eV9jcHVfbW9kZSgpOwotCX0KLX0KLQordm9pZCBhcmNoX2ZsdXNoX2xhenlfY3B1X21vZGUodm9pZCk7CiAKICNkZWZpbmUgIF9fSEFWRV9BUkNIX0VOVEVSX0xBWllfTU1VX01PREUKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCkKQEAgLTEzNzIsMTMgKzEzNjUsNyBAQAogCVBWT1BfVkNBTEwwKHB2X21tdV9vcHMubGF6eV9tb2RlLmxlYXZlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSh2b2lkKQotewotCWlmICh1bmxpa2VseShwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCkgPT0gUEFSQVZJUlRfTEFaWV9NTVUpKSB7Ci0JCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwotCQlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKLQl9Ci19Cit2b2lkIGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSh2b2lkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2ZpeG1hcCh1bnNpZ25lZCAvKiBlbnVtIGZpeGVkX2FkZHJlc3NlcyAqLyBpZHgsCiAJCQkJdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCmluZGV4IGE4ODk0NjQuLjNhYzUwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaApAQCAtNiw4ICs2LDQgQEAKICNkZWZpbmUgQVJDSF9HRVRfRlMgMHgxMDAzCiAjZGVmaW5lIEFSQ0hfR0VUX0dTIDB4MTAwNAogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotZXh0ZXJuIGxvbmcgc3lzX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wXzMyLmgKaW5kZXggYTZhZDg3Yi4uYjgxMWQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjY29tcF8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY2NvbXBfMzIuaApAQCAtMSwxMiArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X1NFQ0NPTVBfMzJfSAogI2RlZmluZSBfQVNNX1g4Nl9TRUNDT01QXzMyX0gKIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0KLSNpZmRlZiBUSUZfMzJCSVQKLSNlcnJvciAidW5leHBlY3RlZCBUSUZfMzJCSVQgb24gaTM4NiIKLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAKICNkZWZpbmUgX19OUl9zZWNjb21wX3JlYWQgX19OUl9yZWFkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wXzY0LmgKaW5kZXggNDE3MWJiNy4uODRlYzFiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjY29tcF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY2NvbXBfNjQuaApAQCAtMSwxNCArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X1NFQ0NPTVBfNjRfSAogI2RlZmluZSBfQVNNX1g4Nl9TRUNDT01QXzY0X0gKIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0KLSNpZmRlZiBUSUZfMzJCSVQKLSNlcnJvciAidW5leHBlY3RlZCBUSUZfMzJCSVQgb24geDg2XzY0IgotI2Vsc2UKLSNkZWZpbmUgVElGXzMyQklUIFRJRl9JQTMyCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9pYTMyX3VuaXN0ZC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBlYmU4NThjLi5jMjMwOGY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTEsMjcgKzEsMTIgQEAKICNpZm5kZWYgX0FTTV9YODZfU0VUVVBfSAogI2RlZmluZSBfQVNNX1g4Nl9TRVRVUF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjA0OAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0vKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwotdm9pZCB2c21wX2luaXQodm9pZCk7Ci0KLQotdm9pZCBzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2sodm9pZCk7Ci0KLQotI2lmZGVmIENPTkZJR19YODZfVklTV1MKLWV4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKLWV4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLWV4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7Ci1leHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKIC8qCiAgKiBBbnkgc2V0dXAgcXVpcmtzIHRvIGJlIHBlcmZvcm1lZD8KICAqLwpAQCAtNDgsMTYgKzMzLDggQEAKIAlpbnQgKCp1cGRhdGVfZ2VuYXBpYykodm9pZCk7CiB9OwogCi1leHRlcm4gc3RydWN0IHg4Nl9xdWlya3MgKng4Nl9xdWlya3M7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF92aWRlb19tb2RlOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2RlZmluZSBwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2lmZGVmIF9faTM4Nl9fCiAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KQEAgLTc4LDYgKzU1LDI4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KIAorLyogSW50ZXJydXB0IGNvbnRyb2wgZm9yIHZTTVBvd2VyZWQgeDg2XzY0IHN5c3RlbXMgKi8KK3ZvaWQgdnNtcF9pbml0KHZvaWQpOworCit2b2lkIHNldHVwX2Jpb3NfY29ycnVwdGlvbl9jaGVjayh2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfVklTV1MKK2V4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKK2V4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKK2V4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7CitleHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKK2V4dGVybiBzdHJ1Y3QgeDg2X3F1aXJrcyAqeDg2X3F1aXJrczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX3ZpZGVvX21vZGU7CisKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCisjZGVmaW5lIHBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjaWZuZGVmIF9TRVRVUAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCAxYjhhZmE3Li44MmFkYTc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaApAQCAtMTc0LDEwICsxNzQsNiBAQAogI2RlZmluZSBTVk1fQ1BVSURfRkVBVFVSRV9TSElGVCAyCiAjZGVmaW5lIFNWTV9DUFVJRF9GVU5DIDB4ODAwMDAwMGEKIAotI2RlZmluZSBNU1JfRUZFUl9TVk1FX01BU0sgKDFVTEwgPDwgMTIpCi0jZGVmaW5lIE1TUl9WTV9DUiAgICAgICAweGMwMDEwMTE0Ci0jZGVmaW5lIE1TUl9WTV9IU0FWRV9QQSAweGMwMDEwMTE3VUxMCi0KICNkZWZpbmUgU1ZNX1ZNX0NSX1NWTV9ESVNBQkxFIDQKIAogI2RlZmluZSBTVk1fU0VMRUNUT1JfU19TSElGVCA0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAppbmRleCBjMGIwYmRhLi5lMjZkMzRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTc0LDYgKzc0LDcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICosIGNoYXIgX191c2VyICogX191c2VyICosCiAJCQkgICBjaGFyIF9fdXNlciAqIF9fdXNlciAqLAogCQkJICAgc3RydWN0IHB0X3JlZ3MgKik7Citsb25nIHN5c19hcmNoX3ByY3RsKGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIGtlcm5lbC9pb3BvcnQuYyAqLwogYXNtbGlua2FnZSBsb25nIHN5c19pb3BsKHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAppbmRleCAyYmI2YTgzLi40ZjVjMjQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTExLDggKzExLDggQEAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiBpbnQgdGltZXJfYWNrOworI2VuZGlmCiBleHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmgKaW5kZXggNTkzNjM2Mi4uZTBmOWFhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaApAQCAtMTE4LDcgKzExOCw3IEBACiAKIAl3cm1zcmwoTVNSX1ZNX0hTQVZFX1BBLCAwKTsKIAlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOwotCXdybXNybChNU1JfRUZFUiwgZWZlciAmIH5NU1JfRUZFUl9TVk1FX01BU0spOworCXdybXNybChNU1JfRUZFUiwgZWZlciAmIH5FRkVSX1NWTUUpOwogfQogCiAvKiogTWFrZXMgc3VyZSBTVk0gaXMgZGlzYWJsZWQsIGlmIGl0IGlzIHN1cHBvcnRlZCBvbiB0aGUgQ1BVCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCmluZGV4IGQwMjM4ZTYuLjQ5OGY5NDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCkBAIC0yNzAsOCArMjcwLDkgQEAKIAogI2RlZmluZSBJTlRSX1RZUEVfRVhUX0lOVFIgICAgICAgICAgICAgICgwIDw8IDgpIC8qIGV4dGVybmFsIGludGVycnVwdCAqLwogI2RlZmluZSBJTlRSX1RZUEVfTk1JX0lOVFIJCSgyIDw8IDgpIC8qIE5NSSAqLwotI2RlZmluZSBJTlRSX1RZUEVfRVhDRVBUSU9OICAgICAgICAgICAgICgzIDw8IDgpIC8qIHByb2Nlc3NvciBleGNlcHRpb24gKi8KKyNkZWZpbmUgSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OCSgzIDw8IDgpIC8qIHByb2Nlc3NvciBleGNlcHRpb24gKi8KICNkZWZpbmUgSU5UUl9UWVBFX1NPRlRfSU5UUiAgICAgICAgICAgICAoNCA8PCA4KSAvKiBzb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UUl9UWVBFX1NPRlRfRVhDRVBUSU9OCSg2IDw8IDgpIC8qIHNvZnR3YXJlIGV4Y2VwdGlvbiAqLwogCiAvKiBHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8gZmxhZ3MuICovCiAjZGVmaW5lIEdVRVNUX0lOVFJfU1RBVEVfU1RJCQkweDAwMDAwMDAxCkBAIC0zMTEsNyArMzEyLDcgQEAKICNkZWZpbmUgREVCVUdfUkVHX0FDQ0VTU19UWVBFICAgICAgICAgICAweDEwICAgIC8qIDQsIGRpcmVjdGlvbiBvZiBhY2Nlc3MgKi8KICNkZWZpbmUgVFlQRV9NT1ZfVE9fRFIgICAgICAgICAgICAgICAgICAoMCA8PCA0KQogI2RlZmluZSBUWVBFX01PVl9GUk9NX0RSICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIERFQlVHX1JFR19BQ0NFU1NfUkVHICAgICAgICAgICAgMHhmMDAgICAvKiAxMTo4LCBnZW5lcmFsIHB1cnBvc2UgcmVnLiAqLworI2RlZmluZSBERUJVR19SRUdfQUNDRVNTX1JFRyhlcSkgICAgICAgICgoKGVxKSA+PiA4KSAmIDB4ZikgLyogMTE6OCwgZ2VuZXJhbCBwdXJwb3NlIHJlZy4gKi8KIAogCiAvKiBzZWdtZW50IEFSICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCmluZGV4IGJjYzI5MzQuLjk2MjU4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCkBAIC0xMyw3ICsxMyw2IEBACiAJICogSG9vcmF5LCB3ZSBhcmUgaW4gTG9uZyA2NC1iaXQgbW9kZSAoYnV0IHN0aWxsIHJ1bm5pbmcgaW4gbG93IG1lbW9yeSkKIAkgKi8KIEVOVFJZKHdha2V1cF9sb25nNjQpCi13YWtldXBfbG9uZzY0OgogCW1vdnEJc2F2ZWRfbWFnaWMsICVyYXgKIAltb3ZxCSQweDEyMzQ1Njc4OWFiY2RlZjAsICVyZHgKIAljbXBxCSVyZHgsICVyYXgKQEAgLTM0LDE2ICszMywxMiBAQAogCiAJbW92cQlzYXZlZF9yaXAsICVyYXgKIAlqbXAJKiVyYXgKK0VORFBST0Mod2FrZXVwX2xvbmc2NCkKIAogYm9ndXNfNjRfbWFnaWM6CiAJam1wCWJvZ3VzXzY0X21hZ2ljCiAKLQkuYWxpZ24gMgotCS5wMmFsaWduIDQsLDE1Ci0uZ2xvYmwgZG9fc3VzcGVuZF9sb3dsZXZlbAotCS50eXBlCWRvX3N1c3BlbmRfbG93bGV2ZWwsQGZ1bmN0aW9uCi1kb19zdXNwZW5kX2xvd2xldmVsOgotLkxGQjU6CitFTlRSWShkb19zdXNwZW5kX2xvd2xldmVsKQogCXN1YnEJJDgsICVyc3AKIAl4b3JsCSVlYXgsICVlYXgKIAljYWxsCXNhdmVfcHJvY2Vzc29yX3N0YXRlCkBAIC02Nyw3ICs2Miw3IEBACiAJcHVzaGZxCiAJcG9wcQlwdF9yZWdzX2ZsYWdzKCVyYXgpCiAKLQltb3ZxCSQuTDk3LCBzYXZlZF9yaXAoJXJpcCkKKwltb3ZxCSRyZXN1bWVfcG9pbnQsIHNhdmVkX3JpcCglcmlwKQogCiAJbW92cQklcnNwLCBzYXZlZF9yc3AKIAltb3ZxCSVyYnAsIHNhdmVkX3JicApAQCAtNzgsMTQgKzczLDEyIEBACiAJYWRkcQkkOCwgJXJzcAogCW1vdmwJJDMsICVlZGkKIAl4b3JsCSVlYXgsICVlYXgKLQlqbXAJYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZQotLkw5NzoKLQkucDJhbGlnbiA0LCw3Ci0uTDk5OgotCS5hbGlnbiA0Ci0JbW92bAkkMjQsICVlYXgKLQltb3Z3CSVheCwgJWRzCisJY2FsbAlhY3BpX2VudGVyX3NsZWVwX3N0YXRlCisJLyogaW4gY2FzZSBzb21ldGhpbmcgd2VudCB3cm9uZywgcmVzdG9yZSB0aGUgbWFjaGluZSBzdGF0dXMgYW5kIGdvIG9uICovCisJam1wCXJlc3VtZV9wb2ludAogCisJLmFsaWduIDQKK3Jlc3VtZV9wb2ludDoKIAkvKiBXZSBkb24ndCByZXN0b3JlICVyYXgsIGl0IG11c3QgYmUgMCBhbnl3YXkgKi8KIAltb3ZxCSRzYXZlZF9jb250ZXh0LCAlcmF4CiAJbW92cQlzYXZlZF9jb250ZXh0X2NyNCglcmF4KSwgJXJieApAQCAtMTE3LDEyICsxMTAsOSBAQAogCXhvcmwJJWVheCwgJWVheAogCWFkZHEJJDgsICVyc3AKIAlqbXAJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUKLS5MRkU1OgotLkxmZTU6Ci0JLnNpemUJZG9fc3VzcGVuZF9sb3dsZXZlbCwgLkxmZTUtZG9fc3VzcGVuZF9sb3dsZXZlbAotCQorRU5EUFJPQyhkb19zdXNwZW5kX2xvd2xldmVsKQorCiAuZGF0YQotQUxJR04KIEVOVFJZKHNhdmVkX3JicCkJLnF1YWQJMAogRU5UUlkoc2F2ZWRfcnNpKQkucXVhZAkwCiBFTlRSWShzYXZlZF9yZGkpCS5xdWFkCTAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCmluZGV4IDExNTQ0OWYuLjU3MGYzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMuYwpAQCAtODYyLDcgKzg2Miw3IEBACiAJfQogCiAJLyogbGV0cyBub3QgdG91Y2ggdGhpcyBpZiB3ZSBkaWRuJ3QgZnJvYiBpdCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKFg4Nl9NQ0VfSU5URUwpCisjaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCiAJaWYgKG1heGx2dCA+PSA1KSB7CiAJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKIAkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IDk4ODA3YmIuLjI2NmVjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTExOTIsNiArMTE5Miw3IEBACiAJZGV2aWNlX3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisJc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMTIwOCw2ICsxMjA5LDcgQEAKIAlpZiAoZXJyICE9IEFQTV9TVUNDRVNTKQogCQlhcG1fZXJyb3IoInN1c3BlbmQiLCBlcnIpOwogCWVyciA9IChlcnIgPT0gQVBNX1NVQ0NFU1MpID8gMCA6IC1FSU87CisJc3lzZGV2X3Jlc3VtZSgpOwogCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWRldmljZV9yZXN1bWUoUE1TR19SRVNVTUUpOwpAQCAtMTIyOCw2ICsxMjMwLDcgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19TVVNQRU5EKTsKKwlzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCWVyciA9IHNldF9zeXN0ZW1fcG93ZXJfc3RhdGUoQVBNX1NUQVRFX1NUQU5EQlkpOwpAQCAtMTIzNSw2ICsxMjM4LDcgQEAKIAkJYXBtX2Vycm9yKCJzdGFuZGJ5IiwgZXJyKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc3lzZGV2X3Jlc3VtZSgpOwogCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwppbmRleCA2NTc5MmMyLi41MmM4Mzk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwpAQCAtODcsMzAgKzg3LDE1IEBACiBjb25maWcgWDg2X1BPV0VSTk9XX0s4CiAJdHJpc3RhdGUgIkFNRCBPcHRlcm9uL0F0aGxvbjY0IFBvd2VyTm93ISIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKKwlkZXBlbmRzIG9uIEFDUEkgJiYgQUNQSV9QUk9DRVNTT1IKIAloZWxwCi0JICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBtb2JpbGUgQU1EIE9wdGVyb24vQXRobG9uNjQgcHJvY2Vzc29ycy4KKwkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIEs4L0sxMCBPcHRlcm9uL0F0aGxvbjY0IHByb2Nlc3NvcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvd2Vybm93LWs4LgogCiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KLWNvbmZpZyBYODZfUE9XRVJOT1dfSzhfQUNQSQotCWJvb2wKLQlwcm9tcHQgIkFDUEkgU3VwcG9ydCIgaWYgWDg2XzMyCi0JZGVwZW5kcyBvbiBBQ1BJICYmIFg4Nl9QT1dFUk5PV19LOCAmJiBBQ1BJX1BST0NFU1NPUgotCWRlcGVuZHMgb24gIShYODZfUE9XRVJOT1dfSzggPSB5ICYmIEFDUElfUFJPQ0VTU09SID0gbSkKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSzhzIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBTdGF0ZXMgdmlhIEFDUEkuCi0JICBUaGlzIGRyaXZlciBpcyBwcm9iYWJseSByZXF1aXJlZCBmb3IgQ1BVRnJlcSB0byB3b3JrIHdpdGggbXVsdGktc29ja2V0IGFuZAotCSAgU01QIHN5c3RlbXMuICBJdCBpcyBub3QgcmVxdWlyZWQgb24gYXQgbGVhc3Qgc29tZSBzaW5nbGUtc29ja2V0IHlldAotCSAgbXVsdGktY29yZSBzeXN0ZW1zLCBldmVuIGlmIFNNUCBpcyBlbmFibGVkLgotCi0JICBJdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuCi0KIGNvbmZpZyBYODZfR1hfU1VTUE1PRAogCXRyaXN0YXRlICJDeXJpeCBNZWRpYUdYL05hdFNlbWkgR2VvZGUgU3VzcGVuZCBNb2R1bGF0aW9uIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFBDSQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCmluZGV4IDU2MGY3NzYuLjUwOTI5NmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKQEAgLTEsNiArMSwxMSBAQAorIyBMaW5rIG9yZGVyIG1hdHRlcnMuIEs4IGlzIHByZWZlcnJlZCB0byBBQ1BJIGJlY2F1c2Ugb2YgZmlybXdhcmUgYnVncyBpbiBlYXJseQorIyBLOCBzeXN0ZW1zLiBBQ1BJIGlzIHByZWZlcnJlZCB0byBhbGwgb3RoZXIgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4KKyMgc3BlZWRzdGVwLSogaXMgcHJlZmVycmVkIG92ZXIgcDQtY2xvY2ttb2QuCisKK29iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vCitvYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s2KQkJKz0gcG93ZXJub3ctazYubwogb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNykJCSs9IHBvd2Vybm93LWs3Lm8KLW9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vCiBvYmotJChDT05GSUdfWDg2X0xPTkdIQVVMKQkJKz0gbG9uZ2hhdWwubwogb2JqLSQoQ09ORklHX1g4Nl9FX1BPV0VSU0FWRVIpCQkrPSBlX3Bvd2Vyc2F2ZXIubwogb2JqLSQoQ09ORklHX0VMQU5fQ1BVRlJFUSkJCSs9IGVsYW5mcmVxLm8KQEAgLTEwLDcgKzE1LDYgQEAKIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0lDSCkJCSs9IHNwZWVkc3RlcC1pY2gubwogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCKQkJKz0gc3BlZWRzdGVwLWxpYi5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9TTUkpCQkrPSBzcGVlZHN0ZXAtc21pLm8KLW9iai0kKENPTkZJR19YODZfQUNQSV9DUFVGUkVRKQkJKz0gYWNwaS1jcHVmcmVxLm8KIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKQkrPSBzcGVlZHN0ZXAtY2VudHJpbm8ubwogb2JqLSQoQ09ORklHX1g4Nl9QNF9DTE9DS01PRCkJCSs9IHA0LWNsb2NrbW9kLm8KIG9iai0kKENPTkZJR19YODZfQ1BVRlJFUV9ORk9SQ0UyKQkrPSBjcHVmcmVxLW5mb3JjZTIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDRiMWMzMTkuLjNiYWJlMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYWNwaS1jcHVmcmVxLmMgLSBBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIgKCRSZXZpc2lvbjogMS40ICQpCisgKiBhY3BpLWNwdWZyZXEuYyAtIEFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlcgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQW5keSBHcm92ZXIgPGFuZHJldy5ncm92ZXJAaW50ZWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBQYXVsIERpZWZlbmJhdWdoIDxwYXVsLnMuZGllZmVuYmF1Z2hAaW50ZWwuY29tPgpAQCAtMzYsMTYgKzM2LDE4IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKwogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJhY3BpLWNwdWZyZXEiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkiYWNwaS1jcHVmcmVxIiwgbXNnKQogCiBNT0RVTEVfQVVUSE9SKCJQYXVsIERpZWZlbmJhdWdoLCBEb21pbmlrIEJyb2Rvd3NraSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIiKTsKQEAgLTk1LDcgKzk3LDcgQEAKIAogCXBlcmYgPSBkYXRhLT5hY3BpX2RhdGE7CiAKLQlmb3IgKGk9MDsgaTxwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKIAkJaWYgKHZhbHVlID09IHBlcmYtPnN0YXRlc1tpXS5zdGF0dXMpCiAJCQlyZXR1cm4gZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3k7CiAJfQpAQCAtMTEwLDcgKzExMiw3IEBACiAJbXNyICY9IElOVEVMX01TUl9SQU5HRTsKIAlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwogCi0JZm9yIChpPTA7IGRhdGEtPmZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CiAJCWlmIChtc3IgPT0gcGVyZi0+c3RhdGVzW2RhdGEtPmZyZXFfdGFibGVbaV0uaW5kZXhdLnN0YXR1cykKIAkJCXJldHVybiBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKIAl9CkBAIC0xMzgsMTUgKzE0MCwxMyBAQAogCXU4IGJpdF93aWR0aDsKIH07CiAKLXR5cGVkZWYgdW5pb24gewotCXN0cnVjdCBtc3JfYWRkciBtc3I7Ci0Jc3RydWN0IGlvX2FkZHIgaW87Ci19IGRydl9hZGRyX3VuaW9uOwotCiBzdHJ1Y3QgZHJ2X2NtZCB7CiAJdW5zaWduZWQgaW50IHR5cGU7CiAJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7Ci0JZHJ2X2FkZHJfdW5pb24gYWRkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCBtc3JfYWRkciBtc3I7CisJCXN0cnVjdCBpb19hZGRyIGlvOworCX0gYWRkcjsKIAl1MzIgdmFsOwogfTsKIApAQCAtMzY5LDcgKzM2OSw3IEBACiAJdW5zaWduZWQgaW50IGN1cl9mcmVxOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpPTA7IGk8MTAwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJY3VyX2ZyZXEgPSBleHRyYWN0X2ZyZXEoZ2V0X2N1cl92YWwobWFzayksIGRhdGEpOwogCQlpZiAoY3VyX2ZyZXEgPT0gZnJlcSkKIAkJCXJldHVybiAxOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAkJdW5zaWduZWQgbG9uZyBmcmVxbiA9IHBlcmYtPnN0YXRlc1swXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAKLQkJZm9yIChpPTA7IGk8KHBlcmYtPnN0YXRlX2NvdW50LTEpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IChwZXJmLT5zdGF0ZV9jb3VudC0xKTsgaSsrKSB7CiAJCQlmcmVxID0gZnJlcW47CiAJCQlmcmVxbiA9IHBlcmYtPnN0YXRlc1tpKzFdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkJCWlmICgoMiAqIGNwdV9raHopID4gKGZyZXFuICsgZnJlcSkpIHsKQEAgLTY3Myw3ICs2NzMsNyBAQAogCiAJLyogZGV0ZWN0IHRyYW5zaXRpb24gbGF0ZW5jeSAqLwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAwOwotCWZvciAoaT0wOyBpPHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewogCQlpZiAoKHBlcmYtPnN0YXRlc1tpXS50cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAwKSA+CiAJCSAgICBwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5KQogCQkJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CkBAIC02ODIsOCArNjgyLDggQEAKIAogCWRhdGEtPm1heF9mcmVxID0gcGVyZi0+c3RhdGVzWzBdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkvKiB0YWJsZSBpbml0ICovCi0JZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewotCQlpZiAoaT4wICYmIHBlcmYtPnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSA+PQorCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJCWlmIChpID4gMCAmJiBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgPj0KIAkJICAgIGRhdGEtPmZyZXFfdGFibGVbdmFsaWRfc3RhdGVzLTFdLmZyZXF1ZW5jeSAvIDEwMDApCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCmluZGV4IDk2NWVhNTIuLjczMzA5M2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqIG5mb3JjZTJfY2hpcHNldDoKICAqIEZTQiBpcyBjaGFuZ2VkIHVzaW5nIHRoZSBjaGlwc2V0CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmZvcmNlMl9jaGlwc2V0X2RldjsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmZvcmNlMl9kZXY7CiAKIC8qIGZpZDoKICAqIG11bHRpcGxpZXIgKiAxMApAQCAtNTYsNyArNTYsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhtaW5fZnNiLAogCQkiTWluaW11bSBGU0IgdG8gdXNlLCBpZiBub3QgZGVmaW5lZDogY3VycmVudCBGU0IgLSA1MCIpOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImNwdWZyZXEtbmZvcmNlMiIsIG1zZykKKyNkZWZpbmUgUEZYICJjcHVmcmVxLW5mb3JjZTI6ICIKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJjcHVmcmVxLW5mb3JjZTIiLCBtc2cpCiAKIC8qKgogICogbmZvcmNlMl9jYWxjX2ZzYiAtIGNhbGN1bGF0ZSBGU0IKQEAgLTExOCwxMSArMTIwLDExIEBACiAJaW50IHRlbXA7CiAKIAkvKiBTZXQgdGhlIHBsbCBhZGRyLiB0byAweDAwICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEFEUiwgMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExBRFIsIDApOwogCiAJLyogTm93IHdyaXRlIHRoZSB2YWx1ZSBpbiBhbGwgNjQgcmVnaXN0ZXJzICovCiAJZm9yICh0ZW1wID0gMDsgdGVtcCA8PSAweDNmOyB0ZW1wKyspCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExSRUcsIHBsbCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMUkVHLCBwbGwpOwogCiAJcmV0dXJuOwogfQpAQCAtMTM5LDggKzE0MSw4IEBACiAJdTMyIGZzYiwgdGVtcCA9IDA7CiAKIAkvKiBHZXQgY2hpcHNldCBib290IEZTQiBmcm9tIHN1YmRldmljZSA1IChGU0IgYXQgYm9vdC10aW1lKSAqLwotCW5mb3JjZTJfc3ViNSA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfTlZJRElBLAotCQkJCQkJMHgwMUVGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwluZm9yY2UyX3N1YjUgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwgMHgwMUVGLAorCQkJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwogCWlmICghbmZvcmNlMl9zdWI1KQogCQlyZXR1cm4gMDsKIApAQCAtMTQ4LDEzICsxNTAsMTMgQEAKIAlmc2IgLz0gMTAwMDAwMDsKIAogCS8qIENoZWNrIGlmIFBMTCByZWdpc3RlciBpcyBhbHJlYWR5IHNldCAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CiAKIAlpZiAoYm9vdGZzYiB8fCAhdGVtcCkKIAkJcmV0dXJuIGZzYjsKIAogCS8qIFVzZSBQTEwgcmVnaXN0ZXIgRlNCIHZhbHVlICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMUkVHLCAmdGVtcCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTFJFRywgJnRlbXApOwogCWZzYiA9IG5mb3JjZTJfY2FsY19mc2IodGVtcCk7CiAKIAlyZXR1cm4gZnNiOwpAQCAtMTc0LDE4ICsxNzYsMTggQEAKIAlpbnQgcGxsID0gMDsKIAogCWlmICgoZnNiID4gbWF4X2ZzYikgfHwgKGZzYiA8IE5GT1JDRTJfTUlOX0ZTQikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBGU0IgJWQgaXMgb3V0IG9mIHJhbmdlIVxuIiwgZnNiKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlNCICVkIGlzIG91dCBvZiByYW5nZSFcbiIsIGZzYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXRmc2IgPSBuZm9yY2UyX2ZzYl9yZWFkKDApOwogCWlmICghdGZzYikgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IEVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIEZTQlxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIEZTQlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEZpcnN0IHdyaXRlPyBUaGVuIHNldCBhY3R1YWwgdmFsdWUgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOwogCWlmICghdGVtcCkgewogCQlwbGwgPSBuZm9yY2UyX2NhbGNfcGxsKHRmc2IpOwogCkBAIC0xOTcsNyArMTk5LDcgQEAKIAogCS8qIEVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KIAl0ZW1wID0gMHgwMTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCl0ZW1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTgpdGVtcCk7CiAKIAlkaWZmID0gdGZzYiAtIGZzYjsKIApAQCAtMjIyLDcgKzIyNCw3IEBACiAJfQogCiAJdGVtcCA9IDB4NDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMQURSLCAodTgpdGVtcCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEFEUiwgKHU4KXRlbXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQsNyArMjQ2LDggQEAKICAqIG5mb3JjZTJfdGFyZ2V0IC0gc2V0IGEgbmV3IENQVUZyZXEgcG9saWN5CiAgKiBAcG9saWN5OiBuZXcgcG9saWN5CiAgKiBAdGFyZ2V0X2ZyZXE6IHRoZSB0YXJnZXQgZnJlcXVlbmN5Ci0gKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeSAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKKyAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5CisgKiAgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS4KICAqLwpAQCAtMjc2LDcgKzI3OSw3IEBACiAJLyogbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyAqLwogCiAJaWYgKG5mb3JjZTJfc2V0X2ZzYih0YXJnZXRfZnNiKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogQ2hhbmdpbmcgRlNCIHRvICVkIGZhaWxlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2hhbmdpbmcgRlNCIHRvICVkIGZhaWxlZFxuIiwKIAkJCXRhcmdldF9mc2IpOwogCWVsc2UKIAkJZHByaW50aygiQ2hhbmdlZCBGU0Igc3VjY2Vzc2Z1bGx5IHRvICVkXG4iLApAQCAtMzI3LDggKzMzMCw4IEBACiAJLyogRklYOiBHZXQgRklEIGZyb20gQ1BVICovCiAJaWYgKCFmaWQpIHsKIAkJaWYgKCFjcHVfa2h6KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNwdWZyZXE6IGNwdV9raHogbm90IHNldCwgY2FuJ3QgY2FsY3VsYXRlIG11bHRpcGxpZXIhXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkiY3B1X2toeiBub3Qgc2V0LCBjYW4ndCBjYWxjdWxhdGUgbXVsdGlwbGllciFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMzQzLDcgKzM0Niw3IEBACiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJjcHVmcmVxOiBGU0IgY3VycmVudGx5IGF0ICVpIE1IeiwgRklEICVkLiVkXG4iLCBmc2IsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZTQiBjdXJyZW50bHkgYXQgJWkgTUh6LCBGSUQgJWQuJWRcbiIsIGZzYiwKIAkgICAgICAgZmlkIC8gMTAsIGZpZCAlIDEwKTsKIAogCS8qIFNldCBtYXhpbXVtIEZTQiB0byBGU0IgYXQgYm9vdCB0aW1lICovCkBAIC0zOTIsMTcgKzM5NSwxOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mb3JjZTJfZGV0ZWN0X2NoaXBzZXQodm9pZCkKIHsKLQluZm9yY2UyX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsCisJbmZvcmNlMl9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwKIAkJCQkJUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMiwKIAkJCQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CiAKLQlpZiAobmZvcmNlMl9jaGlwc2V0X2RldiA9PSBOVUxMKQorCWlmIChuZm9yY2UyX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayhLRVJOX0lORk8gImNwdWZyZXE6IERldGVjdGVkIG5Gb3JjZTIgY2hpcHNldCByZXZpc2lvbiAlWFxuIiwKLQkgICAgICAgbmZvcmNlMl9jaGlwc2V0X2Rldi0+cmV2aXNpb24pOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgImNwdWZyZXE6IEZTQiBjaGFuZ2luZyBpcyBtYXliZSB1bnN0YWJsZSBhbmQgY2FuIGxlYWQgdG8gY3Jhc2hlcyBhbmQgZGF0YSBsb3NzLlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRldGVjdGVkIG5Gb3JjZTIgY2hpcHNldCByZXZpc2lvbiAlWFxuIiwKKwkgICAgICAgbmZvcmNlMl9kZXYtPnJldmlzaW9uKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWAorCSAgICAgICAiRlNCIGNoYW5naW5nIGlzIG1heWJlIHVuc3RhYmxlIGFuZCBjYW4gbGVhZCB0byAiCisJICAgICAgICJjcmFzaGVzIGFuZCBkYXRhIGxvc3MuXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIwLDcgKzQyNCw3IEBACiAKIAkvKiBkZXRlY3QgY2hpcHNldCAqLwogCWlmIChuZm9yY2UyX2RldGVjdF9jaGlwc2V0KCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBObyBuRm9yY2UyIGNoaXBzZXQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIG5Gb3JjZTIgY2hpcHNldC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwppbmRleCBjMmY5MzBkLi4zZjgzZWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCkBAIC0xMiwxMiArMTIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS90c2MuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAogI2RlZmluZSBFUFNfQlJBTkRfQzdNCTAKICNkZWZpbmUgRVBTX0JSQU5EX0M3CTEKQEAgLTE4NCw3ICsxODQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlzd2l0Y2goYnJhbmQpIHsKKwlzd2l0Y2ggKGJyYW5kKSB7CiAJY2FzZSBFUFNfQlJBTkRfQzdNOgogCQlwcmludGsoS0VSTl9DT05UICJDNy1NXG4iKTsKIAkJYnJlYWs7CkBAIC0yMTgsMTcgKzIxOCwyMCBAQAogCS8qIFByaW50IHZvbHRhZ2UgYW5kIG11bHRpcGxpZXIgKi8KIAlyZG1zcihNU1JfSUEzMl9QRVJGX1NUQVRVUywgbG8sIGhpKTsKIAljdXJyZW50X3ZvbHRhZ2UgPSBsbyAmIDB4ZmY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBDdXJyZW50IHZvbHRhZ2UgPSAlZG1WXG4iLCBjdXJyZW50X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBDdXJyZW50IHZvbHRhZ2UgPSAlZG1WXG4iLAorCQkJY3VycmVudF92b2x0YWdlICogMTYgKyA3MDApOwogCWN1cnJlbnRfbXVsdGlwbGllciA9IChsbyA+PiA4KSAmIDB4ZmY7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBDdXJyZW50IG11bHRpcGxpZXIgPSAlZFxuIiwgY3VycmVudF9tdWx0aXBsaWVyKTsKIAogCS8qIFByaW50IGxpbWl0cyAqLwogCW1heF92b2x0YWdlID0gaGkgJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gImVwczogSGlnaGVzdCB2b2x0YWdlID0gJWRtVlxuIiwgbWF4X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBIaWdoZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLAorCQkJbWF4X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CiAJbWF4X211bHRpcGxpZXIgPSAoaGkgPj4gOCkgJiAweGZmOwogCXByaW50ayhLRVJOX0lORk8gImVwczogSGlnaGVzdCBtdWx0aXBsaWVyID0gJWRcbiIsIG1heF9tdWx0aXBsaWVyKTsKIAltaW5fdm9sdGFnZSA9IChoaSA+PiAxNikgJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gImVwczogTG93ZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLCBtaW5fdm9sdGFnZSAqIDE2ICsgNzAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJlcHM6IExvd2VzdCB2b2x0YWdlID0gJWRtVlxuIiwKKwkJCW1pbl92b2x0YWdlICogMTYgKyA3MDApOwogCW1pbl9tdWx0aXBsaWVyID0gKGhpID4+IDI0KSAmIDB4ZmY7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBMb3dlc3QgbXVsdGlwbGllciA9ICVkXG4iLCBtaW5fbXVsdGlwbGllcik7CiAKQEAgLTMxOCw3ICszMjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogZXBzX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICplcHNfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTM1Niw3ICszNTksNyBAQAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmVwc19kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJSYWZhsyBCaWxza2kgPHJhZmFsYmlsc2tpQGludGVyaWEucGw+Iik7CitNT0RVTEVfQVVUSE9SKCJSYWZhbCBCaWxza2kgPHJhZmFsYmlsc2tpQGludGVyaWEucGw+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkVuaGFuY2VkIFBvd2VyU2F2ZXIgZHJpdmVyIGZvciBWSUEgQzcgQ1BVJ3MuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMKaW5kZXggZmU2MTNjOS4uMDA2YjI3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMKQEAgLTE4NCw3ICsxODQsOCBAQAogewogCXVuc2lnbmVkIGludCBuZXdzdGF0ZSA9IDA7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJmVsYW5mcmVxX3RhYmxlWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZlbGFuZnJlcV90YWJsZVswXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZWxhbmZyZXFfc2V0X2NwdV9zdGF0ZShuZXdzdGF0ZSk7CkBAIC0zMDEsNyArMzAyLDggQEAKIG1vZHVsZV9wYXJhbShtYXhfZnJlcSwgaW50LCAwNDQ0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgU3ZlbiBHZWdndXMgPHN2ZW5AZ2VnZ3VzLm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIlJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sICIKKwkJIlN2ZW4gR2VnZ3VzIDxzdmVuQGdlZ2d1cy5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImNwdWZyZXEgZHJpdmVyIGZvciBBTUQncyBFbGFuIENQVXMiKTsKIAogbW9kdWxlX2luaXQoZWxhbmZyZXFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYwppbmRleCA5ZDllYWU4Li5hYzI3ZWMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKQEAgLTc5LDggKzc5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItY3lyaXguaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAogLyogUENJIGNvbmZpZyByZWdpc3RlcnMsIGFsbCBhdCBGMCAqLwogI2RlZmluZSBQQ0lfUE1FUjEJMHg4MAkvKiBwb3dlciBtYW5hZ2VtZW50IGVuYWJsZSByZWdpc3RlciAxICovCkBAIC0xMjIsOCArMTIzLDggQEAKIHN0YXRpYyBpbnQgc3RvY2tfZnJlcTsKIAogLyogUENJIGJ1cyBjbG9jayAtIGRlZmF1bHRzIHRvIDMwLjAwMCBpZiBjcHVfa2h6IGlzIG5vdCBhdmFpbGFibGUgKi8KLXN0YXRpYyBpbnQgcGNpX2J1c2NsayA9IDA7Ci1tb2R1bGVfcGFyYW0gKHBjaV9idXNjbGssIGludCwgMDQ0NCk7CitzdGF0aWMgaW50IHBjaV9idXNjbGs7Cittb2R1bGVfcGFyYW0ocGNpX2J1c2NsaywgaW50LCAwNDQ0KTsKIAogLyogbWF4aW11bSBkdXJhdGlvbiBmb3Igd2hpY2ggdGhlIGNwdSBtYXkgYmUgc3VzcGVuZGVkCiAgKiAoMzJ1cyAqIE1BWF9EVVJBVElPTikuIElmIG5vIHBhcmFtZXRlciBpcyBnaXZlbiwgdGhpcyBkZWZhdWx0cwpAQCAtMTMyLDcgKzEzMyw3IEBACiAgKiBpcyBzdXNwZW5kZWQgLS0gcHJvY2Vzc2luZyBwb3dlciBpcyBqdXN0IDAuMzklIG9mIHdoYXQgaXQgdXNlZCB0byBiZSwKICAqIHRob3VnaC4gNzgxLjI1IGtIeighKSBmb3IgYSAyMDAgTUh6IHByb2Nlc3NvciAtLSB3b3cuICovCiBzdGF0aWMgaW50IG1heF9kdXJhdGlvbiA9IDI1NTsKLW1vZHVsZV9wYXJhbSAobWF4X2R1cmF0aW9uLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKG1heF9kdXJhdGlvbiwgaW50LCAwNDQ0KTsKIAogLyogRm9yIHRoZSBkZWZhdWx0IHBvbGljeSwgd2Ugd2FudCBhdCBsZWFzdCBzb21lIHByb2Nlc3NpbmcgcG93ZXIKICAqIC0gbGV0J3Mgc2F5IDUlLiAobWluID0gbWF4ZnJlcSAvIFBPTElDWV9NSU5fRElWKQpAQCAtMTQwLDcgKzE0MSw4IEBACiAjZGVmaW5lIFBPTElDWV9NSU5fRElWIDIwCiAKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJneC1zdXNwbW9kIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImd4LXN1c3Btb2QiLCBtc2cpCiAKIC8qKgogICogd2UgY2FuIGRldGVjdCBhIGNvcmUgbXVsdGlwaWxlciBmcm9tIGRpcjBfbHNiCkBAIC0xNjYsMTIgKzE2OCwyMCBAQAogICoJTG93IExldmVsIGNoaXBzZXQgaW50ZXJmYWNlCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGd4X2NoaXBzZXRfdGJsW10gX19pbml0ZGF0YSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1ksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAotCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXsgMCwgfSwKIH07CiAKK3N0YXRpYyB2b2lkIGd4X3dyaXRlX2J5dGUoaW50IHJlZywgaW50IHZhbHVlKQoreworCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgcmVnLCB2YWx1ZSk7Cit9CisKIC8qKgogICogZ3hfZGV0ZWN0X2NoaXBzZXQ6CiAgKgpAQCAtMjAwLDcgKzIxMCw4IEBACiAvKioKICAqIGd4X2dldF9jcHVzcGVlZDoKICAqCi0gKiBGaW5kcyBvdXQgYXQgd2hpY2ggZWZmaWNpZW50IGZyZXF1ZW5jeSB0aGUgQ3lyaXggTWVkaWFHWC9OYXRTZW1pIEdlb2RlIENQVSBydW5zLgorICogRmluZHMgb3V0IGF0IHdoaWNoIGVmZmljaWVudCBmcmVxdWVuY3kgdGhlIEN5cml4IE1lZGlhR1gvTmF0U2VtaQorICogR2VvZGUgQ1BVIHJ1bnMuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3hfZ2V0X2NwdXNwZWVkKHVuc2lnbmVkIGludCBjcHUpCiB7CkBAIC0yMTcsMTcgKzIyOCwxOCBAQAogICoKICAqKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBneF92YWxpZGF0ZV9zcGVlZCh1bnNpZ25lZCBpbnQga2h6LCB1OCAqb25fZHVyYXRpb24sIHU4ICpvZmZfZHVyYXRpb24pCitzdGF0aWMgdW5zaWduZWQgaW50IGd4X3ZhbGlkYXRlX3NwZWVkKHVuc2lnbmVkIGludCBraHosIHU4ICpvbl9kdXJhdGlvbiwKKwkJdTggKm9mZl9kdXJhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCB0bXBfb24sIHRtcF9vZmY7CiAJaW50IG9sZF90bXBfZnJlcSA9IHN0b2NrX2ZyZXE7CiAJaW50IHRtcF9mcmVxOwogCi0JKm9mZl9kdXJhdGlvbj0xOwotCSpvbl9kdXJhdGlvbj0wOworCSpvZmZfZHVyYXRpb24gPSAxOworCSpvbl9kdXJhdGlvbiA9IDA7CiAKLQlmb3IgKGk9bWF4X2R1cmF0aW9uOyBpPjA7IGktLSkgeworCWZvciAoaSA9IG1heF9kdXJhdGlvbjsgaSA+IDA7IGktLSkgewogCQl0bXBfb2ZmID0gKChraHogKiBpKSAvIHN0b2NrX2ZyZXEpICYgMHhmZjsKIAkJdG1wX29uID0gaSAtIHRtcF9vZmY7CiAJCXRtcF9mcmVxID0gKHN0b2NrX2ZyZXEgKiB0bXBfb2ZmKSAvIGk7CkBAIC0yNTksMjYgKzI3MSwzNCBAQAogCWZyZXFzLmNwdSA9IDA7CiAJZnJlcXMub2xkID0gZ3hfZ2V0X2NwdXNwZWVkKDApOwogCi0JbmV3X2toeiA9IGd4X3ZhbGlkYXRlX3NwZWVkKGtoeiwgJmd4X3BhcmFtcy0+b25fZHVyYXRpb24sICZneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7CisJbmV3X2toeiA9IGd4X3ZhbGlkYXRlX3NwZWVkKGtoeiwgJmd4X3BhcmFtcy0+b25fZHVyYXRpb24sCisJCQkmZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOwogCiAJZnJlcXMubmV3ID0gbmV3X2toejsKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0JaWYgKG5ld19raHogIT0gc3RvY2tfZnJlcSkgeyAgLyogaWYgbmV3IGtoeiA9PSAxMDAlIG9mIENQVSBzcGVlZCwgaXQgaXMgc3BlY2lhbCBjYXNlICovCisKKworCWlmIChuZXdfa2h6ICE9IHN0b2NrX2ZyZXEpIHsKKwkJLyogaWYgbmV3IGtoeiA9PSAxMDAlIG9mIENQVSBzcGVlZCwgaXQgaXMgc3BlY2lhbCBjYXNlICovCiAJCXN3aXRjaCAoZ3hfcGFyYW1zLT5jczU1eDAtPmRldmljZSkgewogCQljYXNlIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1k6CiAJCQlwbWVyMSA9IGd4X3BhcmFtcy0+cGNpX3BtZXIxIHwgSVJRX1NQRFVQIHwgVklEX1NQRFVQOwogCQkJLyogRklYTUU6IG5lZWQgdG8gdGVzdCBvdGhlciB2YWx1ZXMgLS0gWndhbmUsTWl1cmEgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX0lSUVRDLCA0KTsgLyogdHlwaWNhbCAyIHRvIDRtcyAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfVklEVEMsIDEwMCk7LyogdHlwaWNhbCA1MCB0byAxMDBtcyAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfUE1FUjEsIHBtZXIxKTsKKwkJCS8qIHR5cGljYWwgMiB0byA0bXMgKi8KKwkJCWd4X3dyaXRlX2J5dGUoUENJX0lSUVRDLCA0KTsKKwkJCS8qIHR5cGljYWwgNTAgdG8gMTAwbXMgKi8KKwkJCWd4X3dyaXRlX2J5dGUoUENJX1ZJRFRDLCAxMDApOworCQkJZ3hfd3JpdGVfYnl0ZShQQ0lfUE1FUjEsIHBtZXIxKTsKIAotCQkJaWYgKGd4X3BhcmFtcy0+Y3M1NXgwLT5yZXZpc2lvbiA8IDB4MTApIHsgICAvKiBDUzU1MzAocmV2IDEuMiwgMS4zKSAqLwotCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZyB8IFNVU01PRDsKLQkJCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1M1NTMwQSxCLi4gKi8KLQkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmcgfCBTVVNNT0QgfCBQV1JTVkU7CisJCQlpZiAoZ3hfcGFyYW1zLT5jczU1eDAtPnJldmlzaW9uIDwgMHgxMCkgeworCQkJCS8qIENTNTUzMChyZXYgMS4yLCAxLjMpICovCisJCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnfFNVU01PRDsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ1M1NTMwQSxCLi4gKi8KKwkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmd8U1VTTU9EfFBXUlNWRTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMDoKQEAgLTI5NCwxMyArMzE0LDEzIEBACiAJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZyAmIH4oU1VTTU9EKTsKIAkJZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24gPSAwOwogCQlneF9wYXJhbXMtPm9uX2R1cmF0aW9uID0gMDsKLQkJZHByaW50aygic3VzcGVuZCBtb2R1bGF0aW9uIGRpc2FibGVkOiBjcHUgcnVucyAxMDAgcGVyY2VudCBzcGVlZC5cbiIpOworCQlkcHJpbnRrKCJzdXNwZW5kIG1vZHVsYXRpb24gZGlzYWJsZWQ6IGNwdSBydW5zIDEwMCUlIHNwZWVkLlxuIik7CiAJfQogCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET0ZGLCBneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET04sIGd4X3BhcmFtcy0+b25fZHVyYXRpb24pOworCWd4X3dyaXRlX2J5dGUoUENJX01PRE9GRiwgZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOworCWd4X3dyaXRlX2J5dGUoUENJX01PRE9OLCBneF9wYXJhbXMtPm9uX2R1cmF0aW9uKTsKIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1NVU0NGRywgc3VzY2ZnKTsKKwlneF93cml0ZV9ieXRlKFBDSV9TVVNDRkcsIHN1c2NmZyk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9TVVNDRkcsICZzdXNjZmcpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMzM0LDcgKzM1NCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcG9saWN5LT5jcHUgPSAwOwotCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksIHN0b2NrX2ZyZXEpOworCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksCisJCQlzdG9ja19mcmVxKTsKIAogCS8qIGl0IG5lZWRzIHRvIGJlIGFzc3VyZWQgdGhhdCBhdCBsZWFzdCBvbmUgc3VwcG9ydGVkIGZyZXF1ZW5jeSBpcwogCSAqIHdpdGhpbiBwb2xpY3ktPm1pbiBhbmQgcG9saWN5LT5tYXguIElmIGl0IGlzIG5vdCwgcG9saWN5LT5tYXgKQEAgLTM1NCw3ICszNzUsOCBAQAogCXBvbGljeS0+bWF4ID0gdG1wX2ZyZXE7CiAJaWYgKHBvbGljeS0+bWF4IDwgcG9saWN5LT5taW4pCiAJCXBvbGljeS0+bWF4ID0gcG9saWN5LT5taW47Ci0JY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwgc3RvY2tfZnJlcSk7CisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwKKwkJCXN0b2NrX2ZyZXEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTgsMTggKzQyMCwxOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGRldGVybWluZSBtYXhpbXVtIGZyZXF1ZW5jeSAqLwotCWlmIChwY2lfYnVzY2xrKSB7CisJaWYgKHBjaV9idXNjbGspCiAJCW1heGZyZXEgPSBwY2lfYnVzY2xrICogZ3hfZnJlcV9tdWx0W2dldEN4ODYoQ1g4Nl9ESVIxKSAmIDB4MGZdOwotCX0gZWxzZSBpZiAoY3B1X2toeikgeworCWVsc2UgaWYgKGNwdV9raHopCiAJCW1heGZyZXEgPSBjcHVfa2h6OwotCX0gZWxzZSB7CisJZWxzZQogCQltYXhmcmVxID0gMzAwMDAgKiBneF9mcmVxX211bHRbZ2V0Q3g4NihDWDg2X0RJUjEpICYgMHgwZl07Ci0JfQorCiAJc3RvY2tfZnJlcSA9IG1heGZyZXE7CiAJY3VyZnJlcSA9IGd4X2dldF9jcHVzcGVlZCgwKTsKIAogCWRwcmludGsoImNwdSBtYXggZnJlcXVlbmN5IGlzICVkLlxuIiwgbWF4ZnJlcSk7Ci0JZHByaW50aygiY3B1IGN1cnJlbnQgZnJlcXVlbmN5IGlzICVka0h6LlxuIixjdXJmcmVxKTsKKwlkcHJpbnRrKCJjcHUgY3VycmVudCBmcmVxdWVuY3kgaXMgJWRrSHouXG4iLCBjdXJmcmVxKTsKIAogCS8qIHNldHVwIGJhc2ljIHN0cnVjdCBmb3IgY3B1ZnJlcSBBUEkgKi8KIAlwb2xpY3ktPmNwdSA9IDA7CkBAIC00NDcsNyArNDY5LDggQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZ3hfcGNpOwogCiAJLyogVGVzdCBpZiB3ZSBoYXZlIHRoZSByaWdodCBoYXJkd2FyZSAqLwotCWlmICgoZ3hfcGNpID0gZ3hfZGV0ZWN0X2NoaXBzZXQoKSkgPT0gTlVMTCkKKwlneF9wY2kgPSBneF9kZXRlY3RfY2hpcHNldCgpOworCWlmIChneF9wY2kgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBjaGVjayB3aGV0aGVyIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBzYW5lICovCkBAIC00NjgsOSArNDkxLDExIEBACiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9QTUVSMSwgJihwYXJhbXMtPnBjaV9wbWVyMSkpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfUE1FUjIsICYocGFyYW1zLT5wY2lfcG1lcjIpKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9OLCAmKHBhcmFtcy0+b25fZHVyYXRpb24pKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9GRiwgJihwYXJhbXMtPm9mZl9kdXJhdGlvbikpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET0ZGLAorCQkJJihwYXJhbXMtPm9mZl9kdXJhdGlvbikpOwogCi0JaWYgKChyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmZ3hfc3VzcG1vZF9kcml2ZXIpKSkgeworCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZneF9zdXNwbW9kX2RyaXZlcik7CisJaWYgKHJldCkgewogCQlrZnJlZShwYXJhbXMpOwogCQlyZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciBlcnJvciEgKi8KIAl9CkBAIC00ODUsOSArNTEwLDkgQEAKIAlrZnJlZShneF9wYXJhbXMpOwogfQogCi1NT0RVTEVfQVVUSE9SICgiSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkNwdWZyZXEgZHJpdmVyIGZvciBDeXJpeCBNZWRpYUdYIGFuZCBOYXRTZW1pIEdlb2RlIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ3B1ZnJlcSBkcml2ZXIgZm9yIEN5cml4IE1lZGlhR1ggYW5kIE5hdFNlbWkgR2VvZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoY3B1ZnJlcV9neF9pbml0KTsKIG1vZHVsZV9leGl0KGNwdWZyZXFfZ3hfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IGE0Y2ZmNWQuLmYxYzUxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKICNpbmNsdWRlICJsb25naGF1bC5oIgpAQCAtNTgsNyArNTgsNyBAQAogI2RlZmluZSBVU0VfTk9SVEhCUklER0UJCSgxIDw8IDIpCiAKIHN0YXRpYyBpbnQgY3B1X21vZGVsOwotc3RhdGljIHVuc2lnbmVkIGludCBudW1zY2FsZXM9MTY7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bXNjYWxlcyA9IDE2Owogc3RhdGljIHVuc2lnbmVkIGludCBmc2I7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbVZfcG9zICp2cm1fbVZfdGFibGU7CkBAIC02Nyw4ICs2Nyw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGhpZ2hlc3Rfc3BlZWQsIGxvd2VzdF9zcGVlZDsgLyoga0h6ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG1pbm11bHQsIG1heG11bHQ7CiBzdGF0aWMgaW50IGNhbl9zY2FsZV92b2x0YWdlOwotc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3ggPSBOVUxMOworc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CitzdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeDsKIHN0YXRpYyB1MzIgYWNwaV9yZWdzX2FkZHI7CiBzdGF0aWMgdTggbG9uZ2hhdWxfZmxhZ3M7CiBzdGF0aWMgdW5zaWduZWQgaW50IGxvbmdoYXVsX2luZGV4OwpAQCAtNzgsMTIgKzc4LDEzIEBACiBzdGF0aWMgaW50IGRpc2FibGVfYWNwaV9jMzsKIHN0YXRpYyBpbnQgcmV2aWRfZXJyYXRhOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImxvbmdoYXVsIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImxvbmdoYXVsIiwgbXNnKQogCiAKIC8qIENsb2NrIHJhdGlvcyBtdWx0aXBsaWVkIGJ5IDEwICovCi1zdGF0aWMgaW50IGNsb2NrX3JhdGlvWzMyXTsKLXN0YXRpYyBpbnQgZWJsY3JfdGFibGVbMzJdOworc3RhdGljIGludCBtdWx0c1szMl07CitzdGF0aWMgaW50IGVibGNyWzMyXTsKIHN0YXRpYyBpbnQgbG9uZ2hhdWxfdmVyc2lvbjsKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmxvbmdoYXVsX3RhYmxlOwogCkBAIC05Myw3ICs5NCw3IEBACiBzdGF0aWMgY2hhciAqcHJpbnRfc3BlZWQoaW50IHNwZWVkKQogewogCWlmIChzcGVlZCA8IDEwMDApIHsKLQkJc25wcmludGYoc3BlZWRidWZmZXIsIHNpemVvZihzcGVlZGJ1ZmZlciksIiVkTUh6Iiwgc3BlZWQpOworCQlzbnByaW50ZihzcGVlZGJ1ZmZlciwgc2l6ZW9mKHNwZWVkYnVmZmVyKSwgIiVkTUh6Iiwgc3BlZWQpOwogCQlyZXR1cm4gc3BlZWRidWZmZXI7CiAJfQogCkBAIC0xMjIsMjcgKzEyMywyOCBAQAogCiBzdGF0aWMgaW50IGxvbmdoYXVsX2dldF9jcHVfbXVsdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgaW52YWx1ZT0wLGxvLCBoaTsKKwl1bnNpZ25lZCBsb25nIGludmFsdWUgPSAwLCBsbywgaGk7CiAKLQlyZG1zciAoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIGxvLCBoaSk7Ci0JaW52YWx1ZSA9IChsbyAmICgxPDwyMnwxPDwyM3wxPDwyNHwxPDwyNSkpID4+MjI7Ci0JaWYgKGxvbmdoYXVsX3ZlcnNpb249PVRZUEVfTE9OR0hBVUxfVjIgfHwgbG9uZ2hhdWxfdmVyc2lvbj09VFlQRV9QT1dFUlNBVkVSKSB7CisJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIGxvLCBoaSk7CisJaW52YWx1ZSA9IChsbyAmICgxPDwyMnwxPDwyM3wxPDwyNHwxPDwyNSkpPj4yMjsKKwlpZiAobG9uZ2hhdWxfdmVyc2lvbiA9PSBUWVBFX0xPTkdIQVVMX1YyIHx8CisJICAgIGxvbmdoYXVsX3ZlcnNpb24gPT0gVFlQRV9QT1dFUlNBVkVSKSB7CiAJCWlmIChsbyAmICgxPDwyNykpCi0JCQlpbnZhbHVlKz0xNjsKKwkJCWludmFsdWUgKz0gMTY7CiAJfQotCXJldHVybiBlYmxjcl90YWJsZVtpbnZhbHVlXTsKKwlyZXR1cm4gZWJsY3JbaW52YWx1ZV07CiB9CiAKIC8qIEZvciBwcm9jZXNzb3Igd2l0aCBCQ1IyIE1TUiAqLwogCi1zdGF0aWMgdm9pZCBkb19sb25naGF1bDEodW5zaWduZWQgaW50IGNsb2NrX3JhdGlvX2luZGV4KQorc3RhdGljIHZvaWQgZG9fbG9uZ2hhdWwxKHVuc2lnbmVkIGludCBtdWx0c19pbmRleCkKIHsKIAl1bmlvbiBtc3JfYmNyMiBiY3IyOwogCiAJcmRtc3JsKE1TUl9WSUFfQkNSMiwgYmNyMi52YWwpOwogCS8qIEVuYWJsZSBzb2Z0d2FyZSBjbG9jayBtdWx0aXBsaWVyICovCiAJYmNyMi5iaXRzLkVTT0ZUQkYgPSAxOwotCWJjcjIuYml0cy5DTE9DS01VTCA9IGNsb2NrX3JhdGlvX2luZGV4ICYgMHhmZjsKKwliY3IyLmJpdHMuQ0xPQ0tNVUwgPSBtdWx0c19pbmRleCAmIDB4ZmY7CiAKIAkvKiBTeW5jIHRvIHRpbWVyIHRpY2sgKi8KIAlzYWZlX2hhbHQoKTsKQEAgLTE2MSw3ICsxNjMsNyBAQAogCiAvKiBGb3IgcHJvY2Vzc29yIHdpdGggTG9uZ2hhdWwgTVNSICovCiAKLXN0YXRpYyB2b2lkIGRvX3Bvd2Vyc2F2ZXIoaW50IGN4X2FkZHJlc3MsIHVuc2lnbmVkIGludCBjbG9ja19yYXRpb19pbmRleCwKK3N0YXRpYyB2b2lkIGRvX3Bvd2Vyc2F2ZXIoaW50IGN4X2FkZHJlc3MsIHVuc2lnbmVkIGludCBtdWx0c19pbmRleCwKIAkJCSAgdW5zaWduZWQgaW50IGRpcikKIHsKIAl1bmlvbiBtc3JfbG9uZ2hhdWwgbG9uZ2hhdWw7CkBAIC0xNzMsMTEgKzE3NSwxMSBAQAogCQlsb25naGF1bC5iaXRzLlJldmlzaW9uS2V5ID0gbG9uZ2hhdWwuYml0cy5SZXZpc2lvbklEOwogCWVsc2UKIAkJbG9uZ2hhdWwuYml0cy5SZXZpc2lvbktleSA9IDA7Ci0JbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW8gPSBjbG9ja19yYXRpb19pbmRleCAmIDB4ZjsKLQlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbzQgPSAoY2xvY2tfcmF0aW9faW5kZXggJiAweDEwKSA+PiA0OworCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvID0gbXVsdHNfaW5kZXggJiAweGY7CisJbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW80ID0gKG11bHRzX2luZGV4ICYgMHgxMCkgPj4gNDsKIAkvKiBTZXR1cCBuZXcgdm9sdGFnZSAqLwogCWlmIChjYW5fc2NhbGVfdm9sdGFnZSkKLQkJbG9uZ2hhdWwuYml0cy5Tb2Z0VklEID0gKGNsb2NrX3JhdGlvX2luZGV4ID4+IDgpICYgMHgxZjsKKwkJbG9uZ2hhdWwuYml0cy5Tb2Z0VklEID0gKG11bHRzX2luZGV4ID4+IDgpICYgMHgxZjsKIAkvKiBTeW5jIHRvIHRpbWVyIHRpY2sgKi8KIAlzYWZlX2hhbHQoKTsKIAkvKiBSYWlzZSB2b2x0YWdlIGlmIG5lY2Vzc2FyeSAqLwpAQCAtMjQwLDE0ICsyNDIsMTQgQEAKIAogLyoqCiAgKiBsb25naGF1bF9zZXRfY3B1X2ZyZXF1ZW5jeSgpCi0gKiBAY2xvY2tfcmF0aW9faW5kZXggOiBiaXRwYXR0ZXJuIG9mIHRoZSBuZXcgbXVsdGlwbGllci4KKyAqIEBtdWx0c19pbmRleCA6IGJpdHBhdHRlcm4gb2YgdGhlIG5ldyBtdWx0aXBsaWVyLgogICoKICAqIFNldHMgYSBuZXcgY2xvY2sgcmF0aW8uCiAgKi8KIAogc3RhdGljIHZvaWQgbG9uZ2hhdWxfc2V0c3RhdGUodW5zaWduZWQgaW50IHRhYmxlX2luZGV4KQogewotCXVuc2lnbmVkIGludCBjbG9ja19yYXRpb19pbmRleDsKKwl1bnNpZ25lZCBpbnQgbXVsdHNfaW5kZXg7CiAJaW50IHNwZWVkLCBtdWx0OwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTYsOSArMjU4LDkgQEAKIAl1MzIgYm1fdGltZW91dCA9IDEwMDA7CiAJdW5zaWduZWQgaW50IGRpciA9IDA7CiAKLQljbG9ja19yYXRpb19pbmRleCA9IGxvbmdoYXVsX3RhYmxlW3RhYmxlX2luZGV4XS5pbmRleDsKKwltdWx0c19pbmRleCA9IGxvbmdoYXVsX3RhYmxlW3RhYmxlX2luZGV4XS5pbmRleDsKIAkvKiBTYWZldHkgcHJlY2F1dGlvbnMgKi8KLQltdWx0ID0gY2xvY2tfcmF0aW9bY2xvY2tfcmF0aW9faW5kZXggJiAweDFmXTsKKwltdWx0ID0gbXVsdHNbbXVsdHNfaW5kZXggJiAweDFmXTsKIAlpZiAobXVsdCA9PSAtMSkKIAkJcmV0dXJuOwogCXNwZWVkID0gY2FsY19zcGVlZChtdWx0KTsKQEAgLTI3NCw3ICsyNzYsNyBAQAogCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAotCWRwcmludGsgKCJTZXR0aW5nIHRvIEZTQjolZE1IeiBNdWx0OiVkLiVkeCAoJXMpXG4iLAorCWRwcmludGsoIlNldHRpbmcgdG8gRlNCOiVkTUh6IE11bHQ6JWQuJWR4ICglcylcbiIsCiAJCQlmc2IsIG11bHQvMTAsIG11bHQlMTAsIHByaW50X3NwZWVkKHNwZWVkLzEwMDApKTsKIHJldHJ5X2xvb3A6CiAJcHJlZW1wdF9kaXNhYmxlKCk7CkBAIC0yODIsOCArMjg0LDggQEAKIAogCXBpYzJfbWFzayA9IGluYigweEExKTsKIAlwaWMxX21hc2sgPSBpbmIoMHgyMSk7CS8qIHdvcmtzIG9uIEMzLiBzYXZlIG1hc2suICovCi0Jb3V0YigweEZGLDB4QTEpOwkvKiBPdmVya2lsbCAqLwotCW91dGIoMHhGRSwweDIxKTsJLyogVE1SMCBvbmx5ICovCisJb3V0YigweEZGLCAweEExKTsJLyogT3ZlcmtpbGwgKi8KKwlvdXRiKDB4RkUsIDB4MjEpOwkvKiBUTVIwIG9ubHkgKi8KIAogCS8qIFdhaXQgd2hpbGUgUENJIGJ1cyBpcyBidXN5LiAqLwogCWlmIChhY3BpX3JlZ3NfYWRkciAmJiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfTk9SVEhCUklER0UKQEAgLTMxMiw3ICszMTQsNyBAQAogCSAqIFNvZnR3YXJlIGNvbnRyb2xsZWQgbXVsdGlwbGllcnMgb25seS4KIAkgKi8KIAljYXNlIFRZUEVfTE9OR0hBVUxfVjE6Ci0JCWRvX2xvbmdoYXVsMShjbG9ja19yYXRpb19pbmRleCk7CisJCWRvX2xvbmdoYXVsMShtdWx0c19pbmRleCk7CiAJCWJyZWFrOwogCiAJLyoKQEAgLTMyNyw5ICszMjksOSBAQAogCQlpZiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfQUNQSV9DMykgewogCQkJLyogRG9uJ3QgYWxsb3cgd2FrZXVwICovCiAJCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCk7Ci0JCQlkb19wb3dlcnNhdmVyKGN4LT5hZGRyZXNzLCBjbG9ja19yYXRpb19pbmRleCwgZGlyKTsKKwkJCWRvX3Bvd2Vyc2F2ZXIoY3gtPmFkZHJlc3MsIG11bHRzX2luZGV4LCBkaXIpOwogCQl9IGVsc2UgewotCQkJZG9fcG93ZXJzYXZlcigwLCBjbG9ja19yYXRpb19pbmRleCwgZGlyKTsKKwkJCWRvX3Bvd2Vyc2F2ZXIoMCwgbXVsdHNfaW5kZXgsIGRpcik7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMzQxLDggKzM0Myw4IEBACiAJCS8qIEVuYWJsZSBidXMgbWFzdGVyIGFyYml0cmF0aW9uICovCiAJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwKTsKIAl9Ci0Jb3V0YihwaWMyX21hc2ssMHhBMSk7CS8qIHJlc3RvcmUgbWFzayAqLwotCW91dGIocGljMV9tYXNrLDB4MjEpOworCW91dGIocGljMl9tYXNrLCAweEExKTsJLyogcmVzdG9yZSBtYXNrICovCisJb3V0YihwaWMxX21hc2ssIDB4MjEpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXByZWVtcHRfZW5hYmxlKCk7CkBAIC0zOTIsNyArMzk0LDggQEAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAogCWlmICghYm1fdGltZW91dCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhcm5pbmc6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgaWRsZSBQQ0kgYnVzLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXJuaW5nOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yICIKKwkJCQkiaWRsZSBQQ0kgYnVzLlxuIik7CiB9CiAKIC8qCkBAIC00NTgsMzEgKzQ2MSwzMiBAQAogCQlicmVhazsKIAl9CiAKLQlkcHJpbnRrICgiTWluTXVsdDolZC4lZHggTWF4TXVsdDolZC4lZHhcbiIsCisJZHByaW50aygiTWluTXVsdDolZC4lZHggTWF4TXVsdDolZC4lZHhcbiIsCiAJCSBtaW5tdWx0LzEwLCBtaW5tdWx0JTEwLCBtYXhtdWx0LzEwLCBtYXhtdWx0JTEwKTsKIAogCWhpZ2hlc3Rfc3BlZWQgPSBjYWxjX3NwZWVkKG1heG11bHQpOwogCWxvd2VzdF9zcGVlZCA9IGNhbGNfc3BlZWQobWlubXVsdCk7Ci0JZHByaW50ayAoIkZTQjolZE1IeiAgTG93ZXN0IHNwZWVkOiAlcyAgIEhpZ2hlc3Qgc3BlZWQ6JXNcbiIsIGZzYiwKKwlkcHJpbnRrKCJGU0I6JWRNSHogIExvd2VzdCBzcGVlZDogJXMgICBIaWdoZXN0IHNwZWVkOiVzXG4iLCBmc2IsCiAJCSBwcmludF9zcGVlZChsb3dlc3Rfc3BlZWQvMTAwMCksCiAJCSBwcmludF9zcGVlZChoaWdoZXN0X3NwZWVkLzEwMDApKTsKIAogCWlmIChsb3dlc3Rfc3BlZWQgPT0gaGlnaGVzdF9zcGVlZCkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggImhpZ2hlc3RzcGVlZCA9PSBsb3dlc3QsIGFib3J0aW5nLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJoaWdoZXN0c3BlZWQgPT0gbG93ZXN0LCBhYm9ydGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGxvd2VzdF9zcGVlZCA+IGhpZ2hlc3Rfc3BlZWQpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJub25zZW5zZSEgbG93ZXN0ICglZCA+ICVkKSAhXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAibm9uc2Vuc2UhIGxvd2VzdCAoJWQgPiAlZCkgIVxuIiwKIAkJCWxvd2VzdF9zcGVlZCwgaGlnaGVzdF9zcGVlZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxvbmdoYXVsX3RhYmxlID0ga21hbGxvYygobnVtc2NhbGVzICsgMSkgKiBzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoIWxvbmdoYXVsX3RhYmxlKQorCWxvbmdoYXVsX3RhYmxlID0ga21hbGxvYygobnVtc2NhbGVzICsgMSkgKiBzaXplb2YoKmxvbmdoYXVsX3RhYmxlKSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghbG9uZ2hhdWxfdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChqID0gMDsgaiA8IG51bXNjYWxlczsgaisrKSB7Ci0JCXJhdGlvID0gY2xvY2tfcmF0aW9bal07CisJCXJhdGlvID0gbXVsdHNbal07CiAJCWlmIChyYXRpbyA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocmF0aW8gPiBtYXhtdWx0IHx8IHJhdGlvIDwgbWlubXVsdCkKQEAgLTUwNywxMyArNTExLDEwIEBACiAJCQl9CiAJCX0KIAkJaWYgKG1pbl9pICE9IGopIHsKLQkJCXVuc2lnbmVkIGludCB0ZW1wOwotCQkJdGVtcCA9IGxvbmdoYXVsX3RhYmxlW2pdLmZyZXF1ZW5jeTsKLQkJCWxvbmdoYXVsX3RhYmxlW2pdLmZyZXF1ZW5jeSA9IGxvbmdoYXVsX3RhYmxlW21pbl9pXS5mcmVxdWVuY3k7Ci0JCQlsb25naGF1bF90YWJsZVttaW5faV0uZnJlcXVlbmN5ID0gdGVtcDsKLQkJCXRlbXAgPSBsb25naGF1bF90YWJsZVtqXS5pbmRleDsKLQkJCWxvbmdoYXVsX3RhYmxlW2pdLmluZGV4ID0gbG9uZ2hhdWxfdGFibGVbbWluX2ldLmluZGV4OwotCQkJbG9uZ2hhdWxfdGFibGVbbWluX2ldLmluZGV4ID0gdGVtcDsKKwkJCXN3YXAobG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5LAorCQkJICAgICBsb25naGF1bF90YWJsZVttaW5faV0uZnJlcXVlbmN5KTsKKwkJCXN3YXAobG9uZ2hhdWxfdGFibGVbal0uaW5kZXgsCisJCQkgICAgIGxvbmdoYXVsX3RhYmxlW21pbl9pXS5pbmRleCk7CiAJCX0KIAl9CiAKQEAgLTUyMSw3ICs1MjIsNyBAQAogCiAJLyogRmluZCBpbmRleCB3ZSBhcmUgcnVubmluZyBvbiAqLwogCWZvciAoaiA9IDA7IGogPCBrOyBqKyspIHsKLQkJaWYgKGNsb2NrX3JhdGlvW2xvbmdoYXVsX3RhYmxlW2pdLmluZGV4ICYgMHgxZl0gPT0gbXVsdCkgeworCQlpZiAobXVsdHNbbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggJiAweDFmXSA9PSBtdWx0KSB7CiAJCQlsb25naGF1bF9pbmRleCA9IGo7CiAJCQlicmVhazsKIAkJfQpAQCAtNTU5LDIwICs1NjAsMjIgQEAKIAltYXh2aWQgPSB2cm1fbVZfdGFibGVbbG9uZ2hhdWwuYml0cy5NYXhpbXVtVklEXTsKIAogCWlmIChtaW52aWQubVYgPT0gMCB8fCBtYXh2aWQubVYgPT0gMCB8fCBtaW52aWQubVYgPiBtYXh2aWQubVYpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJCb2d1cyB2YWx1ZXMgTWluOiVkLiUwM2QgTWF4OiVkLiUwM2QuICIKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkJvZ3VzIHZhbHVlcyBNaW46JWQuJTAzZCBNYXg6JWQuJTAzZC4gIgogCQkJCQkiVm9sdGFnZSBzY2FsaW5nIGRpc2FibGVkLlxuIiwKLQkJCQkJbWludmlkLm1WLzEwMDAsIG1pbnZpZC5tViUxMDAwLCBtYXh2aWQubVYvMTAwMCwgbWF4dmlkLm1WJTEwMDApOworCQkJCQltaW52aWQubVYvMTAwMCwgbWludmlkLm1WJTEwMDAsCisJCQkJCW1heHZpZC5tVi8xMDAwLCBtYXh2aWQubVYlMTAwMCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAobWludmlkLm1WID09IG1heHZpZC5tVikgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkNsYWltcyB0byBzdXBwb3J0IHZvbHRhZ2Ugc2NhbGluZyBidXQgbWluICYgbWF4IGFyZSAiCi0JCQkJImJvdGggJWQuJTAzZC4gVm9sdGFnZSBzY2FsaW5nIGRpc2FibGVkXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQ2xhaW1zIHRvIHN1cHBvcnQgdm9sdGFnZSBzY2FsaW5nIGJ1dCAiCisJCQkJIm1pbiAmIG1heCBhcmUgYm90aCAlZC4lMDNkLiAiCisJCQkJIlZvbHRhZ2Ugc2NhbGluZyBkaXNhYmxlZFxuIiwKIAkJCQltYXh2aWQubVYvMTAwMCwgbWF4dmlkLm1WJTEwMDApOwogCQlyZXR1cm47CiAJfQogCi0JLyogSG93IG1hbnkgdm9sdGFnZSBzdGVwcyAqLworCS8qIEhvdyBtYW55IHZvbHRhZ2Ugc3RlcHMqLwogCW51bXZzY2FsZXMgPSBtYXh2aWQucG9zIC0gbWludmlkLnBvcyArIDE7CiAJcHJpbnRrKEtFUk5fSU5GTyBQRlgKIAkJIk1heCBWSUQ9JWQuJTAzZCAgIgpAQCAtNTg2LDcgKzU4OSw3IEBACiAJaiA9IGxvbmdoYXVsLmJpdHMuTWluTUh6QlI7CiAJaWYgKGxvbmdoYXVsLmJpdHMuTWluTUh6QlI0KQogCQlqICs9IDE2OwotCW1pbl92aWRfc3BlZWQgPSBlYmxjcl90YWJsZVtqXTsKKwltaW5fdmlkX3NwZWVkID0gZWJsY3Jbal07CiAJaWYgKG1pbl92aWRfc3BlZWQgPT0gLTEpCiAJCXJldHVybjsKIAlzd2l0Y2ggKGxvbmdoYXVsLmJpdHMuTWluTUh6RlNCKSB7CkBAIC02MTcsNyArNjIwLDggQEAKIAkJCXBvcyA9IG1pbnZpZC5wb3M7CiAJCWxvbmdoYXVsX3RhYmxlW2pdLmluZGV4IHw9IG1WX3ZybV90YWJsZVtwb3NdIDw8IDg7CiAJCXZpZCA9IHZybV9tVl90YWJsZVttVl92cm1fdGFibGVbcG9zXV07Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJmOiAlZCBrSHosIGluZGV4OiAlZCwgdmlkOiAlZCBtVlxuIiwgc3BlZWQsIGosIHZpZC5tVik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJmOiAlZCBrSHosIGluZGV4OiAlZCwgdmlkOiAlZCBtVlxuIiwKKwkJCQlzcGVlZCwgaiwgdmlkLm1WKTsKIAkJaisrOwogCX0KIApAQCAtNjQwLDcgKzY0NCw4IEBACiAJdW5zaWduZWQgaW50IGRpciA9IDA7CiAJdTggdmlkLCBjdXJyZW50X3ZpZDsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBsb25naGF1bF90YWJsZSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmdGFibGVfaW5kZXgpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBsb25naGF1bF90YWJsZSwgdGFyZ2V0X2ZyZXEsCisJCQkJcmVsYXRpb24sICZ0YWJsZV9pbmRleCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRG9uJ3Qgc2V0IHNhbWUgZnJlcXVlbmN5IGFnYWluICovCkBAIC02NTYsNyArNjYxLDggQEAKIAkJICogdGhpcyBpbiBoYXJkd2FyZSwgQzMgaXMgb2xkIGFuZCB3ZSBuZWVkIHRvIGRvIHRoaXMKIAkJICogaW4gc29mdHdhcmUuICovCiAJCWkgPSBsb25naGF1bF9pbmRleDsKLQkJY3VycmVudF92aWQgPSAobG9uZ2hhdWxfdGFibGVbbG9uZ2hhdWxfaW5kZXhdLmluZGV4ID4+IDgpICYgMHgxZjsKKwkJY3VycmVudF92aWQgPSAobG9uZ2hhdWxfdGFibGVbbG9uZ2hhdWxfaW5kZXhdLmluZGV4ID4+IDgpOworCQljdXJyZW50X3ZpZCAmPSAweDFmOwogCQlpZiAodGFibGVfaW5kZXggPiBsb25naGF1bF9pbmRleCkKIAkJCWRpciA9IDE7CiAJCXdoaWxlIChpICE9IHRhYmxlX2luZGV4KSB7CkBAIC02OTEsOSArNjk3LDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmQ7CiAKLQlpZiAoIGFjcGlfYnVzX2dldF9kZXZpY2Uob2JqX2hhbmRsZSwgJmQpICkgeworCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKG9ial9oYW5kbGUsICZkKSkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJKnJldHVybl92YWx1ZSA9IGFjcGlfZHJpdmVyX2RhdGEoZCk7CiAJcmV0dXJuIDE7CiB9CkBAIC03NTAsNyArNzU2LDcgQEAKIAkvKiBGaW5kIFZUODIzNSBzb3V0aGJyaWRnZSAqLwogCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LCBOVUxMKTsKIAlpZiAoZGV2ID09IE5VTEwpCi0JLyogRmluZCBWVDgyMzcgc291dGhicmlkZ2UgKi8KKwkJLyogRmluZCBWVDgyMzcgc291dGhicmlkZ2UgKi8KIAkJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsCiAJCQkJICAgICBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LCBOVUxMKTsKIAlpZiAoZGV2ICE9IE5VTEwpIHsKQEAgLTc2OSw3ICs3NzUsOCBAQAogCQlpZiAocGNpX2NtZCAmIDEgPDwgNykgewogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg4OCwgJmFjcGlfcmVnc19hZGRyKTsKIAkJCWFjcGlfcmVnc19hZGRyICY9IDB4ZmYwMDsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJBQ1BJIEkvTyBhdCAweCV4XG4iLCBhY3BpX3JlZ3NfYWRkcik7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUNQSSBJL08gYXQgMHgleFxuIiwKKwkJCQkJYWNwaV9yZWdzX2FkZHIpOwogCQl9CiAKIAkJcGNpX2Rldl9wdXQoZGV2KTsKQEAgLTc4MSw3ICs3ODgsNyBAQAogc3RhdGljIGludCBfX2luaXQgbG9uZ2hhdWxfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwotCWNoYXIgKmNwdW5hbWU9TlVMTDsKKwljaGFyICpjcHVuYW1lID0gTlVMTDsKIAlpbnQgcmV0OwogCXUzMiBsbywgaGk7CiAKQEAgLTc5MSw4ICs3OTgsOCBAQAogCQljcHVfbW9kZWwgPSBDUFVfU0FNVUVMOwogCQljcHVuYW1lID0gIkMzICdTYW11ZWwnIFtDNUFdIjsKIAkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7Ci0JCW1lbWNweSAoY2xvY2tfcmF0aW8sIHNhbXVlbDFfY2xvY2tfcmF0aW8sIHNpemVvZihzYW11ZWwxX2Nsb2NrX3JhdGlvKSk7Ci0JCW1lbWNweSAoZWJsY3JfdGFibGUsIHNhbXVlbDFfZWJsY3IsIHNpemVvZihzYW11ZWwxX2VibGNyKSk7CisJCW1lbWNweShtdWx0cywgc2FtdWVsMV9tdWx0cywgc2l6ZW9mKHNhbXVlbDFfbXVsdHMpKTsKKwkJbWVtY3B5KGVibGNyLCBzYW11ZWwxX2VibGNyLCBzaXplb2Yoc2FtdWVsMV9lYmxjcikpOwogCQlicmVhazsKIAogCWNhc2UgNzoKQEAgLTgwMywxMCArODEwLDggQEAKIAkJCWNwdW5hbWUgPSAiQzMgJ1NhbXVlbCAyJyBbQzVCXSI7CiAJCQkvKiBOb3RlLCB0aGlzIGlzIG5vdCBhIHR5cG8sIGVhcmx5IFNhbXVlbDIncyBoYWQKIAkJCSAqIFNhbXVlbDEgcmF0aW9zLiAqLwotCQkJbWVtY3B5KGNsb2NrX3JhdGlvLCBzYW11ZWwxX2Nsb2NrX3JhdGlvLAotCQkJCXNpemVvZihzYW11ZWwxX2Nsb2NrX3JhdGlvKSk7Ci0JCQltZW1jcHkoZWJsY3JfdGFibGUsIHNhbXVlbDJfZWJsY3IsCi0JCQkJc2l6ZW9mKHNhbXVlbDJfZWJsY3IpKTsKKwkJCW1lbWNweShtdWx0cywgc2FtdWVsMV9tdWx0cywgc2l6ZW9mKHNhbXVlbDFfbXVsdHMpKTsKKwkJCW1lbWNweShlYmxjciwgc2FtdWVsMl9lYmxjciwgc2l6ZW9mKHNhbXVlbDJfZWJsY3IpKTsKIAkJCWJyZWFrOwogCQljYXNlIDEgLi4uIDE1OgogCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7CkBAIC04MTcsMTAgKzgyMiw4IEBACiAJCQkJY3B1X21vZGVsID0gQ1BVX0VaUkE7CiAJCQkJY3B1bmFtZSA9ICJDMyAnRXpyYScgW0M1Q10iOwogCQkJfQotCQkJbWVtY3B5KGNsb2NrX3JhdGlvLCBlenJhX2Nsb2NrX3JhdGlvLAotCQkJCXNpemVvZihlenJhX2Nsb2NrX3JhdGlvKSk7Ci0JCQltZW1jcHkoZWJsY3JfdGFibGUsIGV6cmFfZWJsY3IsCi0JCQkJc2l6ZW9mKGV6cmFfZWJsY3IpKTsKKwkJCW1lbWNweShtdWx0cywgZXpyYV9tdWx0cywgc2l6ZW9mKGV6cmFfbXVsdHMpKTsKKwkJCW1lbWNweShlYmxjciwgZXpyYV9lYmxjciwgc2l6ZW9mKGV6cmFfZWJsY3IpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtODI5LDE4ICs4MzIsMTYgQEAKIAkJY3B1X21vZGVsID0gQ1BVX0VaUkFfVDsKIAkJY3B1bmFtZSA9ICJDMyAnRXpyYS1UJyBbQzVNXSI7CiAJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX1BPV0VSU0FWRVI7Ci0JCW51bXNjYWxlcz0zMjsKLQkJbWVtY3B5IChjbG9ja19yYXRpbywgZXpyYXRfY2xvY2tfcmF0aW8sIHNpemVvZihlenJhdF9jbG9ja19yYXRpbykpOwotCQltZW1jcHkgKGVibGNyX3RhYmxlLCBlenJhdF9lYmxjciwgc2l6ZW9mKGV6cmF0X2VibGNyKSk7CisJCW51bXNjYWxlcyA9IDMyOworCQltZW1jcHkobXVsdHMsIGV6cmF0X211bHRzLCBzaXplb2YoZXpyYXRfbXVsdHMpKTsKKwkJbWVtY3B5KGVibGNyLCBlenJhdF9lYmxjciwgc2l6ZW9mKGV6cmF0X2VibGNyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSA5OgogCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9QT1dFUlNBVkVSOwogCQludW1zY2FsZXMgPSAzMjsKLQkJbWVtY3B5KGNsb2NrX3JhdGlvLAotCQkgICAgICAgbmVoZW1pYWhfY2xvY2tfcmF0aW8sCi0JCSAgICAgICBzaXplb2YobmVoZW1pYWhfY2xvY2tfcmF0aW8pKTsKLQkJbWVtY3B5KGVibGNyX3RhYmxlLCBuZWhlbWlhaF9lYmxjciwgc2l6ZW9mKG5laGVtaWFoX2VibGNyKSk7CisJCW1lbWNweShtdWx0cywgbmVoZW1pYWhfbXVsdHMsIHNpemVvZihuZWhlbWlhaF9tdWx0cykpOworCQltZW1jcHkoZWJsY3IsIG5laGVtaWFoX2VibGNyLCBzaXplb2YobmVoZW1pYWhfZWJsY3IpKTsKIAkJc3dpdGNoIChjLT54ODZfbWFzaykgewogCQljYXNlIDAgLi4uIDE6CiAJCQljcHVfbW9kZWwgPSBDUFVfTkVIRU1JQUg7CkBAIC04NjksMTQgKzg3MCwxNCBAQAogCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7CiAJfQogCi0JcHJpbnRrIChLRVJOX0lORk8gUEZYICJWSUEgJXMgQ1BVIGRldGVjdGVkLiAgIiwgY3B1bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlZJQSAlcyBDUFUgZGV0ZWN0ZWQuICAiLCBjcHVuYW1lKTsKIAlzd2l0Y2ggKGxvbmdoYXVsX3ZlcnNpb24pIHsKIAljYXNlIFRZUEVfTE9OR0hBVUxfVjE6CiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YyOgotCQlwcmludGsgKCJMb25naGF1bCB2JWQgc3VwcG9ydGVkLlxuIiwgbG9uZ2hhdWxfdmVyc2lvbik7CisJCXByaW50ayhLRVJOX0NPTlQgIkxvbmdoYXVsIHYlZCBzdXBwb3J0ZWQuXG4iLCBsb25naGF1bF92ZXJzaW9uKTsKIAkJYnJlYWs7CiAJY2FzZSBUWVBFX1BPV0VSU0FWRVI6Ci0JCXByaW50ayAoIlBvd2Vyc2F2ZXIgc3VwcG9ydGVkLlxuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIlBvd2Vyc2F2ZXIgc3VwcG9ydGVkLlxuIik7CiAJCWJyZWFrOwogCX07CiAKQEAgLTk0MCw3ICs5NDEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogbG9uZ2hhdWxfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKmxvbmdoYXVsX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC05NjYsMTMgKzk2NywxNSBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTW9yZSB0aGFuIDEgQ1BVIGRldGVjdGVkLCBsb25naGF1bCBkaXNhYmxlZC5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJNb3JlIHRoYW4gMSBDUFUgZGV0ZWN0ZWQsICIKKwkJCQkibG9uZ2hhdWwgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJaWYgKGNwdV9oYXNfYXBpYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBUElDIGRldGVjdGVkLiBMb25naGF1bCBpcyBjdXJyZW50bHkgYnJva2VuIGluIHRoaXMgY29uZmlndXJhdGlvbi5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJBUElDIGRldGVjdGVkLiBMb25naGF1bCBpcyBjdXJyZW50bHkgIgorCQkJCSJicm9rZW4gaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNlbmRpZgpAQCAtOTkzLDggKzk5Niw4IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGk9MDsgaSA8IG51bXNjYWxlczsgaSsrKSB7Ci0JCWlmIChjbG9ja19yYXRpb1tpXSA9PSBtYXhtdWx0KSB7CisJZm9yIChpID0gMDsgaSA8IG51bXNjYWxlczsgaSsrKSB7CisJCWlmIChtdWx0c1tpXSA9PSBtYXhtdWx0KSB7CiAJCQlsb25naGF1bF9zZXRzdGF0ZShpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMDA3LDExICsxMDEwLDExIEBACiAvKiBFdmVuIGlmIEJJT1MgaXMgZXhwb3J0aW5nIEFDUEkgQzMgc3RhdGUsIGFuZCBpdCBpcyB1c2VkCiAgKiB3aXRoIHN1Y2Nlc3Mgd2hlbiBDUFUgaXMgaWRsZSwgdGhpcyBzdGF0ZSBkb2Vzbid0CiAgKiB0cmlnZ2VyIGZyZXF1ZW5jeSB0cmFuc2l0aW9uIGluIHNvbWUgY2FzZXMuICovCi1tb2R1bGVfcGFyYW0gKGRpc2FibGVfYWNwaV9jMywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShkaXNhYmxlX2FjcGlfYzMsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfYWNwaV9jMywgIkRvbid0IHVzZSBBQ1BJIEMzIHN1cHBvcnQiKTsKIC8qIENoYW5nZSBDUFUgdm9sdGFnZSB3aXRoIGZyZXF1ZW5jeS4gVmVyeSB1c2VmdWxsIHRvIHNhdmUKICAqIHBvd2VyLCBidXQgbW9zdCBWSUEgQzMgcHJvY2Vzc29ycyBhcmVuJ3Qgc3VwcG9ydGluZyBpdC4gKi8KLW1vZHVsZV9wYXJhbSAoc2NhbGVfdm9sdGFnZSwgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShzY2FsZV92b2x0YWdlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzY2FsZV92b2x0YWdlLCAiU2NhbGUgdm9sdGFnZSBvZiBwcm9jZXNzb3IiKTsKIC8qIEZvcmNlIHJldmlzaW9uIGtleSB0byAwIGZvciBwcm9jZXNzb3JzIHdoaWNoIGRvZXNuJ3QKICAqIHN1cHBvcnQgdm9sdGFnZSBzY2FsaW5nLCBidXQgYXJlIGludHJvZHVjaW5nIGl0c2VsZiBhcwpAQCAtMTAxOSw5ICsxMDIyLDkgQEAKIG1vZHVsZV9wYXJhbShyZXZpZF9lcnJhdGEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJldmlkX2VycmF0YSwgIklnbm9yZSBDUFUgUmV2aXNpb24gSUQiKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJMb25naGF1bCBkcml2ZXIgZm9yIFZJQSBDeXJpeCBwcm9jZXNzb3JzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxvbmdoYXVsIGRyaXZlciBmb3IgVklBIEN5cml4IHByb2Nlc3NvcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIGxhdGVfaW5pdGNhbGwobG9uZ2hhdWxfaW5pdCk7CiBtb2R1bGVfZXhpdChsb25naGF1bF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKaW5kZXggNGZjYzMyMC4uZTIzNjBhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKQEAgLTQ5LDE0ICs0OSwxNCBAQAogCiAvKgogICogQ2xvY2sgcmF0aW8gdGFibGVzLiBEaXYvTW9kIGJ5IDEwIHRvIGdldCByYXRpby4KLSAqIFRoZSBlYmxjciBvbmVzIHNwZWNpZnkgdGhlIHJhdGlvIHJlYWQgZnJvbSB0aGUgQ1BVLgotICogVGhlIGNsb2NrX3JhdGlvIG9uZXMgc3BlY2lmeSB3aGF0IHRvIHdyaXRlIHRvIHRoZSBDUFUuCisgKiBUaGUgZWJsY3IgdmFsdWVzIHNwZWNpZnkgdGhlIHJhdGlvIHJlYWQgZnJvbSB0aGUgQ1BVLgorICogVGhlIG11bHRzIHZhbHVlcyBzcGVjaWZ5IHdoYXQgdG8gd3JpdGUgdG8gdGhlIENQVS4KICAqLwogCiAvKgogICogVklBIEMzIFNhbXVlbCAxICAmIFNhbXVlbCAyIChzdGVwcGluZyAwKQogICovCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgc2FtdWVsMV9jbG9ja19yYXRpb1sxNl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgc2FtdWVsMV9tdWx0c1sxNl0gPSB7CiAJLTEsIC8qIDAwMDAgLT4gUkVTRVJWRUQgKi8KIAkzMCwgLyogMDAwMSAtPiAgMy4weCAqLwogCTQwLCAvKiAwMDEwIC0+ICA0LjB4ICovCkBAIC0xMTksNyArMTE5LDcgQEAKIC8qCiAgKiBWSUEgQzMgRXpyYQogICovCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYV9jbG9ja19yYXRpb1sxNl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYV9tdWx0c1sxNl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJMzAsICAvKiAwMDAxIC0+ICAzLjB4ICovCiAJNDAsICAvKiAwMDEwIC0+ICA0LjB4ICovCkBAIC0xNjAsNyArMTYwLDcgQEAKIC8qCiAgKiBWSUEgQzMgKEV6cmEtVCkgW0M1TV0uCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhdF9jbG9ja19yYXRpb1szMl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYXRfbXVsdHNbMzJdID0gewogCTEwMCwgLyogMDAwMCAtPiAxMC4weCAqLwogCTMwLCAgLyogMDAwMSAtPiAgMy4weCAqLwogCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtMjM1LDcgKzIzNSw3IEBACiAvKgogICogVklBIEMzIE5laGVtaWFoICovCiAKLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSAgbmVoZW1pYWhfY2xvY2tfcmF0aW9bMzJdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhICBuZWhlbWlhaF9tdWx0c1szMl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJLTEsIC8qIDAwMDEgLT4gMTYuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCmluZGV4IDc3N2E3ZmYuLmRhNWY3MGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwpAQCAtMTEsMTIgKzExLDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAibG9uZ3J1biIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJsb25ncnVuIiwgbXNnKQogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyCWxvbmdydW5fZHJpdmVyOwogCkBAIC01MSw3ICs1Miw3IEBACiAJbXNyX2xvICY9IDB4MDAwMDAwN0Y7CiAJbXNyX2hpICY9IDB4MDAwMDAwN0Y7CiAKLQlpZiAoIGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEgKSB7CisJaWYgKGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEpIHsKIAkJLyogQXNzdW1lIGRlZ2VuZXJhdGUgTG9uZ3J1biB0YWJsZSAqLwogCQlwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gbG9uZ3J1bl9oaWdoX2ZyZXE7CiAJfSBlbHNlIHsKQEAgLTc5LDcgKzgwLDcgQEAKIAlpZiAoIXBvbGljeSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEgKSB7CisJaWYgKGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEpIHsKIAkJLyogQXNzdW1lIGRlZ2VuZXJhdGUgTG9uZ3J1biB0YWJsZSAqLwogCQlwY3RnX2xvID0gcGN0Z19oaSA9IDEwMDsKIAl9IGVsc2UgewpAQCAtMTUyLDcgKzE1Myw3IEBACiAJY3B1aWQoMHg4MDg2MDAwNywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CiAJZHByaW50aygiY3B1aWQgZWF4IGlzICV1XG4iLCBlYXgpOwogCi0JcmV0dXJuIChlYXggKiAxMDAwKTsKKwlyZXR1cm4gZWF4ICogMTAwMDsKIH0KIAogLyoqCkBAIC0xOTYsNyArMTk3LDggQEAKIAkJcmRtc3IoTVNSX1RNVEFfTFJUSV9WT0xUX01IWiwgbXNyX2xvLCBtc3JfaGkpOwogCQkqaGlnaF9mcmVxID0gbXNyX2xvICogMTAwMDsgLyogdG8ga0h6ICovCiAKLQkJZHByaW50aygibG9uZ3J1biB0YWJsZSBpbnRlcmZhY2UgdG9sZCAldSAtICV1IGtIelxuIiwgKmxvd19mcmVxLCAqaGlnaF9mcmVxKTsKKwkJZHByaW50aygibG9uZ3J1biB0YWJsZSBpbnRlcmZhY2UgdG9sZCAldSAtICV1IGtIelxuIiwKKwkJCQkqbG93X2ZyZXEsICpoaWdoX2ZyZXEpOwogCiAJCWlmICgqbG93X2ZyZXEgPiAqaGlnaF9mcmVxKQogCQkJKmxvd19mcmVxID0gKmhpZ2hfZnJlcTsKQEAgLTIxOSw3ICsyMjEsNyBAQAogCWNwdWlkKDB4ODA4NjAwMDcsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCS8qIHRyeSBkZWNyZWFzaW5nIGluIDEwJSBzdGVwcywgc29tZSBwcm9jZXNzb3JzIHJlYWN0IG9ubHkKIAkgKiBvbiBzb21lIGJhcnJpZXIgdmFsdWVzICovCi0JZm9yICh0cnlfaGkgPSA4MDsgdHJ5X2hpID4gMCAmJiBlY3ggPiA5MDsgdHJ5X2hpIC09MTApIHsKKwlmb3IgKHRyeV9oaSA9IDgwOyB0cnlfaGkgPiAwICYmIGVjeCA+IDkwOyB0cnlfaGkgLT0gMTApIHsKIAkJLyogc2V0IHRvIDAgdG8gdHJ5X2hpIHBlcmZfcGN0ZyAqLwogCQltc3JfbG8gJj0gMHhGRkZGRkY4MDsKIAkJbXNyX2hpICY9IDB4RkZGRkZGODA7CkBAIC0yMzYsNyArMjM4LDcgQEAKIAogCS8qIHBlcmZvcm1hbmNlX3BjdGcgPSAoY3VycmVudF9mcmVxIC0gbG93X2ZyZXEpLyhoaWdoX2ZyZXEgLSBsb3dfZnJlcSkKIAkgKiBlcWFscwotCSAqIGxvd19mcmVxICogKCAxIC0gcGVyZl9wY3RnKSA9IChjdXJfZnJlcSAtIGhpZ2hfZnJlcSAqIHBlcmZfcGN0ZykKKwkgKiBsb3dfZnJlcSAqICgxIC0gcGVyZl9wY3RnKSA9IChjdXJfZnJlcSAtIGhpZ2hfZnJlcSAqIHBlcmZfcGN0ZykKIAkgKgogCSAqIGhpZ2hfZnJlcSAqIHBlcmZfcGN0ZyBpcyBzdG9yZWQgdGVtcG9hcmlseSBpbnRvICJlYngiLgogCSAqLwpAQCAtMzE3LDkgKzMxOSwxMCBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJMb25nUnVuIGRyaXZlciBmb3IgVHJhbnNtZXRhIENydXNvZSBhbmQgRWZmaWNlb24gcHJvY2Vzc29ycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxvbmdSdW4gZHJpdmVyIGZvciBUcmFuc21ldGEgQ3J1c29lIGFuZCAiCisJCSJFZmZpY2VvbiBwcm9jZXNzb3JzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChsb25ncnVuX2luaXQpOwogbW9kdWxlX2V4aXQobG9uZ3J1bl9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKaW5kZXggYjU4NWUwNGMuLjQxZWQ5NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0yNywxNSArMjcsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KIAogI2luY2x1ZGUgInNwZWVkc3RlcC1saWIuaCIKIAogI2RlZmluZSBQRlgJInA0LWNsb2NrbW9kOiAiCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInA0LWNsb2NrbW9kIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInA0LWNsb2NrbW9kIiwgbXNnKQogCiAvKgogICogRHV0eSBDeWNsZSAoM2JpdHMpLCBub3RlIERDX0RJU0FCTEUgaXMgbm90IHNwZWNpZmllZCBpbgpAQCAtNTgsNyArNjAsOCBAQAogewogCXUzMiBsLCBoOwogCi0JaWYgKCFjcHVfb25saW5lKGNwdSkgfHwgKG5ld3N0YXRlID4gRENfRElTQUJMRSkgfHwgKG5ld3N0YXRlID09IERDX1JFU1YpKQorCWlmICghY3B1X29ubGluZShjcHUpIHx8CisJICAgIChuZXdzdGF0ZSA+IERDX0RJU0FCTEUpIHx8IChuZXdzdGF0ZSA9PSBEQ19SRVNWKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZG1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9USEVSTV9TVEFUVVMsICZsLCAmaCk7CkBAIC02Niw3ICs2OSw4IEBACiAJaWYgKGwgJiAweDAxKQogCQlkcHJpbnRrKCJDUFUjJWQgY3VycmVudGx5IHRoZXJtYWwgdGhyb3R0bGVkXG4iLCBjcHUpOwogCi0JaWYgKGhhc19ONDRfTzE3X2VycmF0YVtjcHVdICYmIChuZXdzdGF0ZSA9PSBEQ18yNVBUIHx8IG5ld3N0YXRlID09IERDX0RGTFQpKQorCWlmIChoYXNfTjQ0X08xN19lcnJhdGFbY3B1XSAmJgorCSAgICAobmV3c3RhdGUgPT0gRENfMjVQVCB8fCBuZXdzdGF0ZSA9PSBEQ19ERkxUKSkKIAkJbmV3c3RhdGUgPSBEQ18zOFBUOwogCiAJcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEhFUk1fQ09OVFJPTCwgJmwsICZoKTsKQEAgLTExMiw3ICsxMTYsOCBAQAogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCWludCBpOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmcmVxcy5vbGQgPSBjcHVmcmVxX3A0X2dldChwb2xpY3ktPmNwdSk7CkBAIC0xMjcsNyArMTMyLDggQEAKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAl9CiAKLQkvKiBydW4gb24gZWFjaCBsb2dpY2FsIENQVSwgc2VlIHNlY3Rpb24gMTMuMTUuMyBvZiBJQTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZQorCS8qIHJ1biBvbiBlYWNoIGxvZ2ljYWwgQ1BVLAorCSAqIHNlZSBzZWN0aW9uIDEzLjE1LjMgb2YgSUEzMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUKIAkgKiBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAzCiAJICovCiAJZm9yX2VhY2hfY3B1KGksIHBvbGljeS0+Y3B1cykKQEAgLTE1MywyOCArMTU5LDMwIEBACiB7CiAJaWYgKGMtPng4NiA9PSAweDA2KSB7CiAJCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgQ1BVIGRldGVjdGVkLiAiCi0JCQkgICAgICAgIlRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyB2b2x0YWdlIHNjYWxpbmciCi0JCQkgICAgICAgIiBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgc2NhbGluZy4gWW91IHNob3VsZCB1c2UgIgotCQkJICAgICAgICJ0aGF0IGluc3RlYWQgb2YgcDQtY2xvY2ttb2QsIGlmIHBvc3NpYmxlLlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgQ1BVICIKKwkJCSAgICAgICAiZGV0ZWN0ZWQuIFRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyAiCisJCQkgICAgICAgInZvbHRhZ2Ugc2NhbGluZyBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgIgorCQkJICAgICAgICJzY2FsaW5nLiBZb3Ugc2hvdWxkIHVzZSB0aGF0IGluc3RlYWQgb2YgIgorCQkJICAgICAgICJwNC1jbG9ja21vZCwgaWYgcG9zc2libGUuXG4iKTsKIAkJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAkJY2FzZSAweDBFOiAvKiBDb3JlICovCiAJCWNhc2UgMHgwRjogLyogQ29yZSBEdW8gKi8KIAkJY2FzZSAweDE2OiAvKiBDZWxlcm9uIENvcmUgKi8KIAkJCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7Ci0JCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUENPUkUpOworCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUENPUkUpOwogCQljYXNlIDB4MEQ6IC8qIFBlbnRpdW0gTSAoRG90aGFuKSAqLwogCQkJcDRjbG9ja21vZF9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIDB4MDk6IC8qIFBlbnRpdW0gTSAoQmFuaWFzKSAqLwotCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1BNKTsKKwkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1BNKTsKIAkJfQogCX0KIAogCWlmIChjLT54ODYgIT0gMHhGKSB7CiAJCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gcDQtY2xvY2ttb2QtY2FwYWJsZSBDUFUuICIKLQkJCQkiUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxjcHVmcmVxQHZnZXIua2VybmVsLm9yZz5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gQ1BVLiAiCisJCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byAiCisJCQkJIjxjcHVmcmVxQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE4MiwxNiArMTkwLDE2IEBACiAJICogdGhyb3R0bGluZyBpcyBhY3RpdmUgb3Igbm90LiAqLwogCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7CiAKLQlpZiAoc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKSA9PSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TSkgeworCWlmIChzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpID09IFNQRUVEU1RFUF9DUFVfUDRNKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBQZW50aXVtIDQtTSBkZXRlY3RlZC4gIgogCQkgICAgICAgIlRoZSBzcGVlZHN0ZXAtaWNoIG9yIGFjcGkgY3B1ZnJlcSBtb2R1bGVzIG9mZmVyICIKIAkJICAgICAgICJ2b2x0YWdlIHNjYWxpbmcgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5IHNjYWxpbmcuICIKIAkJICAgICAgICJZb3Ugc2hvdWxkIHVzZSBlaXRoZXIgb25lIGluc3RlYWQgb2YgcDQtY2xvY2ttb2QsICIKIAkJICAgICAgICJpZiBwb3NzaWJsZS5cbiIpOwotCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNKTsKKwkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUDRNKTsKIAl9CiAKLQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUDREKTsKKwlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koU1BFRURTVEVQX0NQVV9QNEQpOwogfQogCiAKQEAgLTIxNywxNCArMjI1LDIwIEBACiAJCWRwcmludGsoImhhcyBlcnJhdGEgLS0gZGlzYWJsaW5nIGxvdyBmcmVxdWVuY2llc1xuIik7CiAJfQogCisJaWYgKHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkgPT0gU1BFRURTVEVQX0NQVV9QNEQgJiYKKwkgICAgYy0+eDg2X21vZGVsIDwgMikgeworCQkvKiBzd2l0Y2ggdG8gbWF4aW11bSBmcmVxdWVuY3kgYW5kIG1lYXN1cmUgcmVzdWx0ICovCisJCWNwdWZyZXFfcDRfc2V0ZGMocG9saWN5LT5jcHUsIERDX0RJU0FCTEUpOworCQlyZWNhbGlicmF0ZV9jcHVfa2h6KCk7CisJfQogCS8qIGdldCBtYXggZnJlcXVlbmN5ICovCiAJc3RvY2tfZnJlcSA9IGNwdWZyZXFfcDRfZ2V0X2ZyZXF1ZW5jeShjKTsKIAlpZiAoIXN0b2NrX2ZyZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogdGFibGUgaW5pdCAqLwotCWZvciAoaT0xOyAocDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKLQkJaWYgKChpPDIpICYmIChoYXNfTjQ0X08xN19lcnJhdGFbcG9saWN5LT5jcHVdKSkKKwlmb3IgKGkgPSAxOyAocDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwkJaWYgKChpIDwgMikgJiYgKGhhc19ONDRfTzE3X2VycmF0YVtwb2xpY3ktPmNwdV0pKQogCQkJcDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CiAJCWVsc2UKIAkJCXA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ID0gKHN0b2NrX2ZyZXEgKiBpKS84OwpAQCAtMjMyLDcgKzI0NiwxMCBAQAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHA0Y2xvY2ttb2RfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwOyAvKiBhc3N1bWVkICovCisKKwkvKiB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5IGlzIHNldCB0byBiZSAxIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtCisJICogdHJhbnNpdGlvbiBsYXRlbmN5IG9mIHRoZSBvbmRlbWFuZCBnb3Zlcm5vciAqLworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwMTsKIAlwb2xpY3ktPmN1ciA9IHN0b2NrX2ZyZXE7CiAKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdKTsKQEAgLTI1OCwxMiArMjc1LDEyIEBACiAJCWwgPSBEQ19ESVNBQkxFOwogCiAJaWYgKGwgIT0gRENfRElTQUJMRSkKLQkJcmV0dXJuIChzdG9ja19mcmVxICogbCAvIDgpOworCQlyZXR1cm4gc3RvY2tfZnJlcSAqIGwgLyA4OwogCiAJcmV0dXJuIHN0b2NrX2ZyZXE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBwNGNsb2NrbW9kX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpwNGNsb2NrbW9kX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0yNzcsNyArMjk0LDYgQEAKIAkubmFtZQkJPSAicDQtY2xvY2ttb2QiLAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuYXR0cgkJPSBwNGNsb2NrbW9kX2F0dHIsCi0JLmhpZGVfaW50ZXJmYWNlCT0gMSwKIH07CiAKIApAQCAtMjk5LDkgKzMxNSwxMCBAQAogCiAJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnA0Y2xvY2ttb2RfZHJpdmVyKTsKIAlpZiAoIXJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlA0L1hlb24oVE0pIENQVSBPbi1EZW1hbmQgQ2xvY2sgTW9kdWxhdGlvbiBhdmFpbGFibGVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUDQvWGVvbihUTSkgQ1BVIE9uLURlbWFuZCBDbG9jayAiCisJCQkJIk1vZHVsYXRpb24gYXZhaWxhYmxlXG4iKTsKIAotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTMxMSw5ICszMjgsOSBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiY3B1ZnJlcSBkcml2ZXIgZm9yIFBlbnRpdW0oVE0pIDQvWGVvbihUTSkiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjcHVmcmVxIGRyaXZlciBmb3IgUGVudGl1bShUTSkgNC9YZW9uKFRNKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKGNwdWZyZXFfcDRfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX3A0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwppbmRleCBjMWFjNTc5Li5mMTBkZWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgVGhpcyBmaWxlIHdhcyBiYXNlZCB1cG9uIGNvZGUgaW4gUG93ZXJ0d2VhayBMaW51eCAoaHR0cDovL3Bvd2VydHdlYWsuc2YubmV0KQotICogIChDKSAyMDAwLTIwMDMgIERhdmUgSm9uZXMsIEFyamFuIHZhbiBkZSBWZW4sIEphbm5lIFDDpG5rw6Rsw6QsIERvbWluaWsgQnJvZG93c2tpLgorICogIChDKSAyMDAwLTIwMDMgIERhdmUgSm9uZXMsIEFyamFuIHZhbiBkZSBWZW4sIEphbm5lIFDDpG5rw6Rsw6QsCisgKiAgICAgICAgICAgICAgICAgRG9taW5payBCcm9kb3dza2kuCiAgKgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KICAqCkBAIC0xMywxNCArMTQsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKwogI2RlZmluZSBQT1dFUk5PV19JT1BPUlQgMHhmZmYwICAgICAgICAgIC8qIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlLCBhcyBsb25nCiAJCQkJCSAgIGFzIGl0IGlzIHVudXNlZCAqLwogCisjZGVmaW5lIFBGWCAicG93ZXJub3ctazY6ICIKIHN0YXRpYyB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICBidXNmcmVxOyAgIC8qIEZTQiwgaW4gMTAga0h6ICovCiBzdGF0aWMgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgbWF4X211bHRpcGxpZXI7CiAKQEAgLTQ3LDggKzQ5LDggQEAKICAqLwogc3RhdGljIGludCBwb3dlcm5vd19rNl9nZXRfY3B1X211bHRpcGxpZXIodm9pZCkKIHsKLQl1NjQgICAgICAgICAgICAgaW52YWx1ZSA9IDA7Ci0JdTMyICAgICAgICAgICAgIG1zcnZhbDsKKwl1NjQgaW52YWx1ZSA9IDA7CisJdTMyIG1zcnZhbDsKIAogCW1zcnZhbCA9IFBPV0VSTk9XX0lPUE9SVCArIDB4MTsKIAl3cm1zcihNU1JfSzZfRVBNUiwgbXNydmFsLCAwKTsgLyogZW5hYmxlIHRoZSBQb3dlck5vdyBwb3J0ICovCkBAIC02OCwxMiArNzAsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgcG93ZXJub3dfazZfc2V0X3N0YXRlKHVuc2lnbmVkIGludCBiZXN0X2kpCiB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgb3V0dmFsdWUgPSAwLCBpbnZhbHVlID0gMDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICBtc3J2YWw7Ci0Jc3RydWN0IGNwdWZyZXFfZnJlcXMgICAgZnJlcXM7CisJdW5zaWduZWQgbG9uZyBvdXR2YWx1ZSA9IDAsIGludmFsdWUgPSAwOworCXVuc2lnbmVkIGxvbmcgbXNydmFsOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCiAJaWYgKGNsb2NrX3JhdGlvW2Jlc3RfaV0uaW5kZXggPiBtYXhfbXVsdGlwbGllcikgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGludmFsaWQgdGFyZ2V0IGZyZXF1ZW5jeVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgdGFyZ2V0IGZyZXF1ZW5jeVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExOSw3ICsxMjEsOCBAQAogICogcG93ZXJub3dfazZfc2V0cG9saWN5IC0gc2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeQogICogQHBvbGljeTogbmV3IHBvbGljeQogICogQHRhcmdldF9mcmVxOiB0aGUgdGFyZ2V0IGZyZXF1ZW5jeQotICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCisgKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeQorICogIChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQogICoKICAqIHNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kKICAqLwpAQCAtMTI3LDkgKzEzMCwxMCBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7Ci0JdW5zaWduZWQgaW50ICAgIG5ld3N0YXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZjbG9ja19yYXRpb1swXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmY2xvY2tfcmF0aW9bMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBvd2Vybm93X2s2X3NldF9zdGF0ZShuZXdzdGF0ZSk7CkBAIC0xNDAsNyArMTQ0LDcgQEAKIAogc3RhdGljIGludCBwb3dlcm5vd19rNl9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaSwgZjsKIAlpbnQgcmVzdWx0OwogCiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCkBAIC0xNTIsMTAgKzE1NiwxMSBAQAogCiAJLyogdGFibGUgaW5pdCAqLwogCWZvciAoaSA9IDA7IChjbG9ja19yYXRpb1tpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKLQkJaWYgKGNsb2NrX3JhdGlvW2ldLmluZGV4ID4gbWF4X211bHRpcGxpZXIpCisJCWYgPSBjbG9ja19yYXRpb1tpXS5pbmRleDsKKwkJaWYgKGYgPiBtYXhfbXVsdGlwbGllcikKIAkJCWNsb2NrX3JhdGlvW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKIAkJZWxzZQotCQkJY2xvY2tfcmF0aW9baV0uZnJlcXVlbmN5ID0gYnVzZnJlcSAqIGNsb2NrX3JhdGlvW2ldLmluZGV4OworCQkJY2xvY2tfcmF0aW9baV0uZnJlcXVlbmN5ID0gYnVzZnJlcSAqIGY7CiAJfQogCiAJLyogY3B1aW5mbyBhbmQgZGVmYXVsdCBwb2xpY3kgdmFsdWVzICovCkBAIC0xODUsNyArMTkwLDkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm5vd19rNl9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gYnVzZnJlcSAqIHBvd2Vybm93X2s2X2dldF9jcHVfbXVsdGlwbGllcigpOworCXVuc2lnbmVkIGludCByZXQ7CisJcmV0ID0gKGJ1c2ZyZXEgKiBwb3dlcm5vd19rNl9nZXRfY3B1X211bHRpcGxpZXIoKSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X2s2X2F0dHJbXSA9IHsKQEAgLTIyMSw3ICsyMjgsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24oUE9XRVJOT1dfSU9QT1JULCAxNiwgIlBvd2VyTm93ISIpKSB7Ci0JCXByaW50aygiY3B1ZnJlcTogUG93ZXJOb3cgSU9QT1JUIHJlZ2lvbiBhbHJlYWR5IHVzZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBvd2VyTm93IElPUE9SVCByZWdpb24gYWxyZWFkeSB1c2VkLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQ2LDcgKzI1Myw4IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUigiQXJqYW4gdmFuIGRlIFZlbiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkFyamFuIHZhbiBkZSBWZW4sIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCAiCisJCSJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyTm93ISBkcml2ZXIgZm9yIEFNRCBLNi0yKyAvIEs2LTMrIHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKaW5kZXggMWI0NDZkNy4uM2MyOGNjZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKQEAgLTYsMTAgKzYsMTIgQEAKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCiAgKiAgQmFzZWQgdXBvbiBkYXRhc2hlZXRzICYgc2FtcGxlIENQVXMga2luZGx5IHByb3ZpZGVkIGJ5IEFNRC4KICAqCi0gKiBFcnJhdGEgNTogUHJvY2Vzc29yIG1heSBmYWlsIHRvIGV4ZWN1dGUgYSBGSUQvVklEIGNoYW5nZSBpbiBwcmVzZW5jZSBvZiBpbnRlcnJ1cHQuCi0gKiAtIFdlIGNsaS9zdGkgb24gc3RlcHBpbmcgQTAgQ1BVcyBhcm91bmQgdGhlIEZJRC9WSUQgdHJhbnNpdGlvbi4KLSAqIEVycmF0YSAxNTogUHJvY2Vzc29ycyB3aXRoIGhhbGYgZnJlcXVlbmN5IG11bHRpcGxpZXJzIG1heSBoYW5nIHVwb24gd2FrZXVwIGZyb20gZGlzY29ubmVjdC4KLSAqIC0gV2UgZGlzYWJsZSBoYWxmIG11bHRpcGxpZXJzIGlmIEFDUEkgaXMgdXNlZCBvbiBBMCBzdGVwcGluZyBDUFVzLgorICogRXJyYXRhIDU6CisgKiAgQ1BVIG1heSBmYWlsIHRvIGV4ZWN1dGUgYSBGSUQvVklEIGNoYW5nZSBpbiBwcmVzZW5jZSBvZiBpbnRlcnJ1cHQuCisgKiAgLSBXZSBjbGkvc3RpIG9uIHN0ZXBwaW5nIEEwIENQVXMgYXJvdW5kIHRoZSBGSUQvVklEIHRyYW5zaXRpb24uCisgKiBFcnJhdGEgMTU6CisgKiAgQ1BVIHdpdGggaGFsZiBmcmVxdWVuY3kgbXVsdGlwbGllcnMgbWF5IGhhbmcgdXBvbiB3YWtldXAgZnJvbSBkaXNjb25uZWN0LgorICogIC0gV2UgZGlzYWJsZSBoYWxmIG11bHRpcGxpZXJzIGlmIEFDUEkgaXMgdXNlZCBvbiBBMCBzdGVwcGluZyBDUFVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIwLDExICsyMiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlIDxhc20vdGltZXIuaD4JCS8qIE5lZWRlZCBmb3IgcmVjYWxpYnJhdGVfY3B1X2toeigpICovCiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS90aW1lci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzdfQUNQSQpAQCAtNTgsOSArNjAsOSBAQAogdW5pb24gcG93ZXJub3dfYWNwaV9jb250cm9sX3QgewogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGxvbmcgZmlkOjUsCi0JCXZpZDo1LAotCQlzZ3RjOjIwLAotCQlyZXMxOjI7CisJCQl2aWQ6NSwKKwkJCXNndGM6MjAsCisJCQlyZXMxOjI7CiAJfSBiaXRzOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogfTsKQEAgLTk0LDE0ICs5NiwxNSBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhbl9zY2FsZV9idXM7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNhbl9zY2FsZV92aWQ7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc3BlZWQ9LTE7CitzdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc3BlZWQgPSAtMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4aW11bV9zcGVlZDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtYmVyX3NjYWxlczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnNiOwogc3RhdGljIHVuc2lnbmVkIGludCBsYXRlbmN5Owogc3RhdGljIGNoYXIgaGF2ZV9hMDsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJwb3dlcm5vdy1rNyIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJwb3dlcm5vdy1rNyIsIG1zZykKIAogc3RhdGljIGludCBjaGVja19mc2IodW5zaWduZWQgaW50IGZzYnNwZWVkKQogewpAQCAtMTA5LDcgKzExMiw3IEBACiAJdW5zaWduZWQgaW50IGYgPSBmc2IgLyAxMDAwOwogCiAJZGVsdGEgPSAoZnNic3BlZWQgPiBmKSA/IGZzYnNwZWVkIC0gZiA6IGYgLSBmc2JzcGVlZDsKLQlyZXR1cm4gKGRlbHRhIDwgNSk7CisJcmV0dXJuIGRlbHRhIDwgNTsKIH0KIAogc3RhdGljIGludCBjaGVja19wb3dlcm5vdyh2b2lkKQpAQCAtMTE3LDI0ICsxMjAsMjYgQEAKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAJdW5zaWduZWQgaW50IG1heGVpLCBlYXgsIGVieCwgZWN4LCBlZHg7CiAKLQlpZiAoKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpIHx8IChjLT54ODYgIT02KSkgeworCWlmICgoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkgfHwgKGMtPng4NiAhPSA2KSkgewogI2lmZGVmIE1PRFVMRQotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlRoaXMgbW9kdWxlIG9ubHkgd29ya3Mgd2l0aCBBTUQgSzcgQ1BVc1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJUaGlzIG1vZHVsZSBvbmx5IHdvcmtzIHdpdGggIgorCQkJCSJBTUQgSzcgQ1BVc1xuIik7CiAjZW5kaWYKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogR2V0IG1heGltdW0gY2FwYWJpbGl0aWVzICovCi0JbWF4ZWkgPSBjcHVpZF9lYXggKDB4ODAwMDAwMDApOworCW1heGVpID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOwogCWlmIChtYXhlaSA8IDB4ODAwMDAwMDcpIHsJLyogQW55IHBvd2Vybm93IGluZm8gPyAqLwogI2lmZGVmIE1PRFVMRQotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIk5vIHBvd2Vybm93IGNhcGFiaWxpdGllcyBkZXRlY3RlZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBwb3dlcm5vdyBjYXBhYmlsaXRpZXMgZGV0ZWN0ZWRcbiIpOwogI2VuZGlmCiAJCXJldHVybiAwOwogCX0KIAogCWlmICgoYy0+eDg2X21vZGVsID09IDYpICYmIChjLT54ODZfbWFzayA9PSAwKSkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIks3IDY2MFtBMF0gY29yZSBkZXRlY3RlZCwgZW5hYmxpbmcgZXJyYXRhIHdvcmthcm91bmRzXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIks3IDY2MFtBMF0gY29yZSBkZXRlY3RlZCwgIgorCQkJCSJlbmFibGluZyBlcnJhdGEgd29ya2Fyb3VuZHNcbiIpOwogCQloYXZlX2EwID0gMTsKIAl9CiAKQEAgLTE0NCwzNyArMTQ5LDQyIEBACiAJaWYgKCEoZWR4ICYgKDEgPDwgMSB8IDEgPDwgMikpKQogCQlyZXR1cm4gMDsKIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiUG93ZXJOT1chIFRlY2hub2xvZ3kgcHJlc2VudC4gQ2FuIHNjYWxlOiAiKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiUG93ZXJOT1chIFRlY2hub2xvZ3kgcHJlc2VudC4gQ2FuIHNjYWxlOiAiKTsKIAogCWlmIChlZHggJiAxIDw8IDEpIHsKLQkJcHJpbnRrICgiZnJlcXVlbmN5Iik7Ci0JCWNhbl9zY2FsZV9idXM9MTsKKwkJcHJpbnRrKCJmcmVxdWVuY3kiKTsKKwkJY2FuX3NjYWxlX2J1cyA9IDE7CiAJfQogCiAJaWYgKChlZHggJiAoMSA8PCAxIHwgMSA8PCAyKSkgPT0gMHg2KQotCQlwcmludGsgKCIgYW5kICIpOworCQlwcmludGsoIiBhbmQgIik7CiAKIAlpZiAoZWR4ICYgMSA8PCAyKSB7Ci0JCXByaW50ayAoInZvbHRhZ2UiKTsKLQkJY2FuX3NjYWxlX3ZpZD0xOworCQlwcmludGsoInZvbHRhZ2UiKTsKKwkJY2FuX3NjYWxlX3ZpZCA9IDE7CiAJfQogCi0JcHJpbnRrICgiLlxuIik7CisJcHJpbnRrKCIuXG4iKTsKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9lbnRyeSh1bnNpZ25lZCBpbnQgZW50cnkpCit7CisJcG93ZXJub3dfdGFibGVbZW50cnldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKK30KIAotc3RhdGljIGludCBnZXRfcmFuZ2VzICh1bnNpZ25lZCBjaGFyICpwc3QpCitzdGF0aWMgaW50IGdldF9yYW5nZXModW5zaWduZWQgY2hhciAqcHN0KQogewogCXVuc2lnbmVkIGludCBqOwogCXVuc2lnbmVkIGludCBzcGVlZDsKIAl1OCBmaWQsIHZpZDsKIAotCXBvd2Vybm93X3RhYmxlID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKiAobnVtYmVyX3NjYWxlcyArIDEpKSwgR0ZQX0tFUk5FTCk7CisJcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqCisJCQkJKG51bWJlcl9zY2FsZXMgKyAxKSksIEdGUF9LRVJORUwpOwogCWlmICghcG93ZXJub3dfdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChqPTAgOyBqIDwgbnVtYmVyX3NjYWxlczsgaisrKSB7CisJZm9yIChqID0gMCA7IGogPCBudW1iZXJfc2NhbGVzOyBqKyspIHsKIAkJZmlkID0gKnBzdCsrOwogCiAJCXBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSA9IChmc2IgKiBmaWRfY29kZXNbZmlkXSkgLyAxMDsKQEAgLTE4MiwxMCArMTkyLDEwIEBACiAKIAkJc3BlZWQgPSBwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3k7CiAKLQkJaWYgKChmaWRfY29kZXNbZmlkXSAlIDEwKT09NSkgeworCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApID09IDUpIHsKICNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s3X0FDUEkKIAkJCWlmIChoYXZlX2EwID09IDEpCi0JCQkJcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJCWludmFsaWRhdGVfZW50cnkoaik7CiAjZW5kaWYKIAkJfQogCkBAIC0xOTcsNyArMjA3LDcgQEAKIAkJdmlkID0gKnBzdCsrOwogCQlwb3dlcm5vd190YWJsZVtqXS5pbmRleCB8PSAodmlkIDw8IDgpOyAvKiB1cHBlciA4IGJpdHMgKi8KIAotCQlkcHJpbnRrICgiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKKwkJZHByaW50aygiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKIAkJCSAiVklEOiAweCV4ICglZC4lMDNkVilcbiIsIGZpZCwgZmlkX2NvZGVzW2ZpZF0gLyAxMCwKIAkJCSBmaWRfY29kZXNbZmlkXSAlIDEwLCBzcGVlZC8xMDAwLCB2aWQsCiAJCQkgbW9iaWxlX3ZpZF90YWJsZVt2aWRdLzEwMDAsCkBAIC0yMTQsMTMgKzIyNCwxMyBAQAogewogCXVuaW9uIG1zcl9maWR2aWRjdGwgZmlkdmlkY3RsOwogCi0JcmRtc3JsIChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOworCXJkbXNybChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOwogCWlmIChmaWR2aWRjdGwuYml0cy5GSUQgIT0gZmlkKSB7CiAJCWZpZHZpZGN0bC5iaXRzLlNHVEMgPSBsYXRlbmN5OwogCQlmaWR2aWRjdGwuYml0cy5GSUQgPSBmaWQ7CiAJCWZpZHZpZGN0bC5iaXRzLlZJREMgPSAwOwogCQlmaWR2aWRjdGwuYml0cy5GSURDID0gMTsKLQkJd3Jtc3JsIChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOworCQl3cm1zcmwoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKIAl9CiB9CiAKQEAgLTIyOSwxOCArMjM5LDE4IEBACiB7CiAJdW5pb24gbXNyX2ZpZHZpZGN0bCBmaWR2aWRjdGw7CiAKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CiAJaWYgKGZpZHZpZGN0bC5iaXRzLlZJRCAhPSB2aWQpIHsKIAkJZmlkdmlkY3RsLmJpdHMuU0dUQyA9IGxhdGVuY3k7CiAJCWZpZHZpZGN0bC5iaXRzLlZJRCA9IHZpZDsKIAkJZmlkdmlkY3RsLmJpdHMuRklEQyA9IDA7CiAJCWZpZHZpZGN0bC5iaXRzLlZJREMgPSAxOwotCQl3cm1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJCXdybXNybChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOwogCX0KIH0KIAogCi1zdGF0aWMgdm9pZCBjaGFuZ2Vfc3BlZWQgKHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIGNoYW5nZV9zcGVlZCh1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJdTggZmlkLCB2aWQ7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CkBAIC0yNTcsNyArMjY3LDcgQEAKIAogCWZyZXFzLmNwdSA9IDA7CiAKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CiAJY2ZpZCA9IGZpZHZpZHN0YXR1cy5iaXRzLkNGSUQ7CiAJZnJlcXMub2xkID0gZnNiICogZmlkX2NvZGVzW2NmaWRdIC8gMTA7CiAKQEAgLTMyMSwxMiArMzMxLDE0IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlpZiAoYWNwaV9wcm9jZXNzb3JfcGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgeworCWlmIChhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkICE9CisJCQlBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgewogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycjI7CiAJfQogCi0JaWYgKGFjcGlfcHJvY2Vzc29yX3BlcmYtPnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgeworCWlmIChhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQgIT0KKwkJCUFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMjsKIAl9CkBAIC0zMzgsNyArMzUwLDggQEAKIAkJZ290byBlcnIyOwogCX0KIAotCXBvd2Vybm93X3RhYmxlID0ga3phbGxvYygobnVtYmVyX3NjYWxlcyArIDEpICogKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpKSwgR0ZQX0tFUk5FTCk7CisJcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqCisJCQkJKG51bWJlcl9zY2FsZXMgKyAxKSksIEdGUF9LRVJORUwpOwogCWlmICghcG93ZXJub3dfdGFibGUpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnIyOwpAQCAtMzUyLDcgKzM2NSw3IEBACiAJCXVuc2lnbmVkIGludCBzcGVlZCwgc3BlZWRfbWh6OwogCiAJCXBjLnZhbCA9ICh1bnNpZ25lZCBsb25nKSBzdGF0ZS0+Y29udHJvbDsKLQkJZHByaW50ayAoImFjcGk6ICBQJWQ6ICVkIE1IeiAlZCBtVyAlZCB1UyBjb250cm9sICUwOHggU0dUQyAlZFxuIiwKKwkJZHByaW50aygiYWNwaTogIFAlZDogJWQgTUh6ICVkIG1XICVkIHVTIGNvbnRyb2wgJTA4eCBTR1RDICVkXG4iLAogCQkJIGksCiAJCQkgKHUzMikgc3RhdGUtPmNvcmVfZnJlcXVlbmN5LAogCQkJICh1MzIpIHN0YXRlLT5wb3dlciwKQEAgLTM4MSwxMiArMzk0LDEyIEBACiAJCWlmIChzcGVlZCAlIDEwMDAgPiAwKQogCQkJc3BlZWRfbWh6Kys7CiAKLQkJaWYgKChmaWRfY29kZXNbZmlkXSAlIDEwKT09NSkgeworCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApID09IDUpIHsKIAkJCWlmIChoYXZlX2EwID09IDEpCi0JCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJCWludmFsaWRhdGVfZW50cnkoaSk7CiAJCX0KIAotCQlkcHJpbnRrICgiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKKwkJZHByaW50aygiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKIAkJCSAiVklEOiAweCV4ICglZC4lMDNkVilcbiIsIGZpZCwgZmlkX2NvZGVzW2ZpZF0gLyAxMCwKIAkJCSBmaWRfY29kZXNbZmlkXSAlIDEwLCBzcGVlZF9taHosIHZpZCwKIAkJCSBtb2JpbGVfdmlkX3RhYmxlW3ZpZF0vMTAwMCwKQEAgLTQyMiw3ICs0MzUsOCBAQAogZXJyMDU6CiAJa2ZyZWUoYWNwaV9wcm9jZXNzb3JfcGVyZik7CiBlcnIwOgotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJBQ1BJIHBlcmZsaWIgY2FuIG5vdCBiZSB1c2VkIGluIHRoaXMgcGxhdGZvcm1cbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJBQ1BJIHBlcmZsaWIgY2FuIG5vdCBiZSB1c2VkIG9uICIKKwkJCSJ0aGlzIHBsYXRmb3JtXG4iKTsKIAlhY3BpX3Byb2Nlc3Nvcl9wZXJmID0gTlVMTDsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNDM1LDcgKzQ0OSwxNCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcG93ZXJub3dfZGVjb2RlX2Jpb3MgKGludCBtYXhmaWQsIGludCBzdGFydHZpZCkKK3N0YXRpYyB2b2lkIHByaW50X3BzdF9lbnRyeShzdHJ1Y3QgcHN0X3MgKnBzdCwgdW5zaWduZWQgaW50IGopCit7CisJZHByaW50aygiUFNUOiVkIChAJXApXG4iLCBqLCBwc3QpOworCWRwcmludGsoIiBjcHVpZDogMHgleCAgZnNiOiAlZCAgbWF4RklEOiAweCV4ICBzdGFydHZpZDogMHgleFxuIiwKKwkJcHN0LT5jcHVpZCwgcHN0LT5mc2JzcGVlZCwgcHN0LT5tYXhmaWQsIHBzdC0+c3RhcnR2aWQpOworfQorCitzdGF0aWMgaW50IHBvd2Vybm93X2RlY29kZV9iaW9zKGludCBtYXhmaWQsIGludCBzdGFydHZpZCkKIHsKIAlzdHJ1Y3QgcHNiX3MgKnBzYjsKIAlzdHJ1Y3QgcHN0X3MgKnBzdDsKQEAgLTQ0Niw2MSArNDY3LDY3IEBACiAKIAlldHVwbGUgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMSk7CiAKLQlmb3IgKGk9MHhDMDAwMDsgaSA8IDB4ZmZmZjAgOyBpKz0xNikgeworCWZvciAoaSA9IDB4QzAwMDA7IGkgPCAweGZmZmYwIDsgaSArPSAxNikgewogCiAJCXAgPSBwaHlzX3RvX3ZpcnQoaSk7CiAKLQkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsICAxMCkgPT0gMCl7Ci0JCQlkcHJpbnRrICgiRm91bmQgUFNCIGhlYWRlciBhdCAlcFxuIiwgcCk7CisJCWlmIChtZW1jbXAocCwgIkFNREs3UE5PVyEiLCAgMTApID09IDApIHsKKwkJCWRwcmludGsoIkZvdW5kIFBTQiBoZWFkZXIgYXQgJXBcbiIsIHApOwogCQkJcHNiID0gKHN0cnVjdCBwc2JfcyAqKSBwOwotCQkJZHByaW50ayAoIlRhYmxlIHZlcnNpb246IDB4JXhcbiIsIHBzYi0+dGFibGV2ZXJzaW9uKTsKKwkJCWRwcmludGsoIlRhYmxlIHZlcnNpb246IDB4JXhcbiIsIHBzYi0+dGFibGV2ZXJzaW9uKTsKIAkJCWlmIChwc2ItPnRhYmxldmVyc2lvbiAhPSAweDEyKSB7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJTb3JyeSwgb25seSB2MS4yIHRhYmxlcyBzdXBwb3J0ZWQgcmlnaHQgbm93XG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiU29ycnksIG9ubHkgdjEuMiB0YWJsZXMiCisJCQkJCQkiIHN1cHBvcnRlZCByaWdodCBub3dcbiIpOwogCQkJCXJldHVybiAtRU5PREVWOwogCQkJfQogCi0JCQlkcHJpbnRrICgiRmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MpOwotCQkJaWYgKChwc2ItPmZsYWdzICYgMSk9PTApIHsKLQkJCQlkcHJpbnRrICgiTW9iaWxlIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZHByaW50ayAoIkRlc2t0b3Agdm9sdGFnZSByZWd1bGF0b3JcbiIpOwotCQkJfQorCQkJZHByaW50aygiRmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MpOworCQkJaWYgKChwc2ItPmZsYWdzICYgMSkgPT0gMCkKKwkJCQlkcHJpbnRrKCJNb2JpbGUgdm9sdGFnZSByZWd1bGF0b3JcbiIpOworCQkJZWxzZQorCQkJCWRwcmludGsoIkRlc2t0b3Agdm9sdGFnZSByZWd1bGF0b3JcbiIpOwogCiAJCQlsYXRlbmN5ID0gcHNiLT5zZXR0bGluZ3RpbWU7CiAJCQlpZiAobGF0ZW5jeSA8IDEwMCkgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJCSU9TIHNldCBzZXR0bGluZyB0aW1lIHRvICVkIG1pY3Jvc2Vjb25kcy4gIgotCQkJCQkJIlNob3VsZCBiZSBhdCBsZWFzdCAxMDAuIENvcnJlY3RpbmcuXG4iLCBsYXRlbmN5KTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQklPUyBzZXQgc2V0dGxpbmcgdGltZSAiCisJCQkJCQkidG8gJWQgbWljcm9zZWNvbmRzLiAiCisJCQkJCQkiU2hvdWxkIGJlIGF0IGxlYXN0IDEwMC4gIgorCQkJCQkJIkNvcnJlY3RpbmcuXG4iLCBsYXRlbmN5KTsKIAkJCQlsYXRlbmN5ID0gMTAwOwogCQkJfQotCQkJZHByaW50ayAoIlNldHRsaW5nIFRpbWU6ICVkIG1pY3Jvc2Vjb25kcy5cbiIsIHBzYi0+c2V0dGxpbmd0aW1lKTsKLQkJCWRwcmludGsgKCJIYXMgJWQgUFNUIHRhYmxlcy4gKE9ubHkgZHVtcGluZyBvbmVzIHJlbGV2YW50IHRvIHRoaXMgQ1BVKS5cbiIsIHBzYi0+bnVtcHN0KTsKKwkJCWRwcmludGsoIlNldHRsaW5nIFRpbWU6ICVkIG1pY3Jvc2Vjb25kcy5cbiIsCisJCQkJCXBzYi0+c2V0dGxpbmd0aW1lKTsKKwkJCWRwcmludGsoIkhhcyAlZCBQU1QgdGFibGVzLiAoT25seSBkdW1waW5nIG9uZXMgIgorCQkJCQkicmVsZXZhbnQgdG8gdGhpcyBDUFUpLlxuIiwKKwkJCQkJcHNiLT5udW1wc3QpOwogCi0JCQlwICs9IHNpemVvZiAoc3RydWN0IHBzYl9zKTsKKwkJCXAgKz0gc2l6ZW9mKHN0cnVjdCBwc2Jfcyk7CiAKIAkJCXBzdCA9IChzdHJ1Y3QgcHN0X3MgKikgcDsKIAotCQkJZm9yIChqPTA7IGo8cHNiLT5udW1wc3Q7IGorKykgeworCQkJZm9yIChqID0gMDsgaiA8IHBzYi0+bnVtcHN0OyBqKyspIHsKIAkJCQlwc3QgPSAoc3RydWN0IHBzdF9zICopIHA7CiAJCQkJbnVtYmVyX3NjYWxlcyA9IHBzdC0+bnVtcHN0YXRlczsKIAotCQkJCWlmICgoZXR1cGxlID09IHBzdC0+Y3B1aWQpICYmIGNoZWNrX2ZzYihwc3QtPmZzYnNwZWVkKSAmJgotCQkJCSAgICAobWF4ZmlkPT1wc3QtPm1heGZpZCkgJiYgKHN0YXJ0dmlkPT1wc3QtPnN0YXJ0dmlkKSkKLQkJCQl7Ci0JCQkJCWRwcmludGsgKCJQU1Q6JWQgKEAlcClcbiIsIGosIHBzdCk7Ci0JCQkJCWRwcmludGsgKCIgY3B1aWQ6IDB4JXggIGZzYjogJWQgIG1heEZJRDogMHgleCAgc3RhcnR2aWQ6IDB4JXhcbiIsCi0JCQkJCQkgcHN0LT5jcHVpZCwgcHN0LT5mc2JzcGVlZCwgcHN0LT5tYXhmaWQsIHBzdC0+c3RhcnR2aWQpOwotCi0JCQkJCXJldCA9IGdldF9yYW5nZXMgKChjaGFyICopIHBzdCArIHNpemVvZiAoc3RydWN0IHBzdF9zKSk7CisJCQkJaWYgKChldHVwbGUgPT0gcHN0LT5jcHVpZCkgJiYKKwkJCQkgICAgY2hlY2tfZnNiKHBzdC0+ZnNic3BlZWQpICYmCisJCQkJICAgIChtYXhmaWQgPT0gcHN0LT5tYXhmaWQpICYmCisJCQkJICAgIChzdGFydHZpZCA9PSBwc3QtPnN0YXJ0dmlkKSkgeworCQkJCQlwcmludF9wc3RfZW50cnkocHN0LCBqKTsKKwkJCQkJcCA9IChjaGFyICopcHN0ICsgc2l6ZW9mKHN0cnVjdCBwc3Rfcyk7CisJCQkJCXJldCA9IGdldF9yYW5nZXMocCk7CiAJCQkJCXJldHVybiByZXQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJdW5zaWduZWQgaW50IGs7Ci0JCQkJCXAgPSAoY2hhciAqKSBwc3QgKyBzaXplb2YgKHN0cnVjdCBwc3Rfcyk7Ci0JCQkJCWZvciAoaz0wOyBrPG51bWJlcl9zY2FsZXM7IGsrKykKLQkJCQkJCXArPTI7CisJCQkJCXAgPSAoY2hhciAqKXBzdCArIHNpemVvZihzdHJ1Y3QgcHN0X3MpOworCQkJCQlmb3IgKGsgPSAwOyBrIDwgbnVtYmVyX3NjYWxlczsgaysrKQorCQkJCQkJcCArPSAyOwogCQkJCX0KIAkJCX0KLQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiTm8gUFNUIHRhYmxlcyBtYXRjaCB0aGlzIGNwdWlkICgweCV4KVxuIiwgZXR1cGxlKTsKLQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVGhpcyBpcyBpbmRpY2F0aXZlIG9mIGEgYnJva2VuIEJJT1MuXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBQU1QgdGFibGVzIG1hdGNoIHRoaXMgY3B1aWQgIgorCQkJCQkiKDB4JXgpXG4iLCBldHVwbGUpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRoaXMgaXMgaW5kaWNhdGl2ZSBvZiBhIGJyb2tlbiAiCisJCQkJCSJCSU9TLlxuIik7CiAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC01MTEsMTMgKzUzOCwxNCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcG93ZXJub3dfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgcG93ZXJub3dfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHBvd2Vybm93X3RhYmxlLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHBvd2Vybm93X3RhYmxlLCB0YXJnZXRfZnJlcSwKKwkJCQlyZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljaGFuZ2Vfc3BlZWQobmV3c3RhdGUpOwpAQCAtNTI2LDcgKzU1NCw3IEBACiB9CiAKIAotc3RhdGljIGludCBwb3dlcm5vd192ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBwb3dlcm5vd192ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksIHBvd2Vybm93X3RhYmxlKTsKIH0KQEAgLTU2NiwxOCArNTk0LDIzIEBACiAKIAlpZiAoY3B1KQogCQlyZXR1cm4gMDsKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CiAJY2ZpZCA9IGZpZHZpZHN0YXR1cy5iaXRzLkNGSUQ7CiAKLQlyZXR1cm4gKGZzYiAqIGZpZF9jb2Rlc1tjZmlkXSAvIDEwKTsKKwlyZXR1cm4gZnNiICogZmlkX2NvZGVzW2NmaWRdIC8gMTA7CiB9CiAKIAogc3RhdGljIGludCBfX2luaXQgYWNlcl9jcHVmcmVxX3BzdChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBsYXB0b3Agd2l0aCBicm9rZW4gUFNUIHRhYmxlcyBpbiBCSU9TIGRldGVjdGVkLlxuIiwgZC0+aWRlbnQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIllvdSBuZWVkIHRvIGRvd25ncmFkZSB0byAzQTIxICgwOS8wOS8yMDAyKSwgb3IgdHJ5IGEgbmV3ZXIgQklPUyB0aGFuIDNBNzEgKDAxLzIwLzIwMDMpXG4iKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJjcHVmcmVxIHNjYWxpbmcgaGFzIGJlZW4gZGlzYWJsZWQgYXMgYSByZXN1bHQgb2YgdGhpcy5cbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSIlcyBsYXB0b3Agd2l0aCBicm9rZW4gUFNUIHRhYmxlcyBpbiBCSU9TIGRldGVjdGVkLlxuIiwKKwkJZC0+aWRlbnQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSJZb3UgbmVlZCB0byBkb3duZ3JhZGUgdG8gM0EyMSAoMDkvMDkvMjAwMiksIG9yIHRyeSBhIG5ld2VyICIKKwkJIkJJT1MgdGhhbiAzQTcxICgwMS8yMC8yMDAzKVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJImNwdWZyZXEgc2NhbGluZyBoYXMgYmVlbiBkaXNhYmxlZCBhcyBhIHJlc3VsdCBvZiB0aGlzLlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5OCw3ICs2MzEsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfY3B1X2luaXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJdW5pb24gbXNyX2ZpZHZpZHN0YXR1cyBmaWR2aWRzdGF0dXM7CiAJaW50IHJlc3VsdDsKQEAgLTYwNiw3ICs2MzksNyBAQAogCWlmIChwb2xpY3ktPmNwdSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAogCXJlY2FsaWJyYXRlX2NwdV9raHooKTsKIApAQCAtNjE4LDE5ICs2NTEsMjEgQEAKIAlkcHJpbnRrKCJGU0I6ICUzZE1IelxuIiwgZnNiLzEwMDApOwogCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0ocG93ZXJub3dfZG1pX3RhYmxlKSB8fCBhY3BpX2ZvcmNlKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiUFNCL1BTVCBrbm93biB0byBiZSBicm9rZW4uICBUcnlpbmcgQUNQSSBpbnN0ZWFkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBTQi9QU1Qga25vd24gdG8gYmUgYnJva2VuLiAgIgorCQkJCSJUcnlpbmcgQUNQSSBpbnN0ZWFkXG4iKTsKIAkJcmVzdWx0ID0gcG93ZXJub3dfYWNwaV9pbml0KCk7CiAJfSBlbHNlIHsKLQkJcmVzdWx0ID0gcG93ZXJub3dfZGVjb2RlX2Jpb3MoZmlkdmlkc3RhdHVzLmJpdHMuTUZJRCwgZmlkdmlkc3RhdHVzLmJpdHMuU1ZJRCk7CisJCXJlc3VsdCA9IHBvd2Vybm93X2RlY29kZV9iaW9zKGZpZHZpZHN0YXR1cy5iaXRzLk1GSUQsCisJCQkJZmlkdmlkc3RhdHVzLmJpdHMuU1ZJRCk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIEFDUEkgcGVyZmxpYlxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIEFDUEkgcGVyZmxpYlxuIik7CiAJCQltYXhpbXVtX3NwZWVkID0gMDsKIAkJCW1pbmltdW1fc3BlZWQgPSAtMTsKIAkJCWxhdGVuY3kgPSAwOwogCQkJcmVzdWx0ID0gcG93ZXJub3dfYWNwaV9pbml0KCk7CiAJCQlpZiAocmVzdWx0KSB7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJBQ1BJIGFuZCBsZWdhY3kgbWV0aG9kcyBmYWlsZWRcbiIpOwotCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiU2VlIGh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvY3B1ZnJlcS9wb3dlcm5vdy1rNy5odG1sXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCQkiQUNQSSBhbmQgbGVnYWN5IG1ldGhvZHMgZmFpbGVkXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIFNHVEMgdXNlIHRoZSBidXMgY2xvY2sgYXMgdGltZXIgKi8KQEAgLTY0MiwxMCArNjc3LDExIEBACiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiTWluaW11bSBzcGVlZCAlZCBNSHouIE1heGltdW0gc3BlZWQgJWQgTUh6LlxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiTWluaW11bSBzcGVlZCAlZCBNSHouIE1heGltdW0gc3BlZWQgJWQgTUh6LlxuIiwKIAkJCQltaW5pbXVtX3NwZWVkLzEwMDAsIG1heGltdW1fc3BlZWQvMTAwMCk7CiAKLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gY3B1ZnJlcV9zY2FsZSgyMDAwMDAwVUwsIGZzYiwgbGF0ZW5jeSk7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CisJCWNwdWZyZXFfc2NhbGUoMjAwMDAwMFVMLCBmc2IsIGxhdGVuY3kpOwogCiAJcG9saWN5LT5jdXIgPSBwb3dlcm5vd19nZXQoMCk7CiAKQEAgLTY1NCw3ICs2OTAsOCBAQAogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgcG93ZXJub3dfdGFibGUpOwogfQogCi1zdGF0aWMgaW50IHBvd2Vybm93X2NwdV9leGl0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkgeworc3RhdGljIGludCBwb3dlcm5vd19jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cihwb2xpY3ktPmNwdSk7CiAKICNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s3X0FDUEkKQEAgLTY2OSw3ICs3MDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcG93ZXJub3dfdGFibGVfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X3RhYmxlX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC02ODUsMTUgKzcyMiwxNSBAQAogCS5hdHRyCT0gcG93ZXJub3dfdGFibGVfYXR0ciwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93X2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19pbml0KHZvaWQpCiB7Ci0JaWYgKGNoZWNrX3Bvd2Vybm93KCk9PTApCisJaWYgKGNoZWNrX3Bvd2Vybm93KCkgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZwb3dlcm5vd19kcml2ZXIpOwogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBwb3dlcm5vd19leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBvd2Vybm93X2V4aXQodm9pZCkKIHsKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZwb3dlcm5vd19kcml2ZXIpOwogfQpAQCAtNzAxLDkgKzczOCw5IEBACiBtb2R1bGVfcGFyYW0oYWNwaV9mb3JjZSwgIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFjcGlfZm9yY2UsICJGb3JjZSBBQ1BJIHRvIGJlIHVzZWQuIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiUG93ZXJub3cgZHJpdmVyIGZvciBBTUQgSzcgcHJvY2Vzc29ycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlcm5vdyBkcml2ZXIgZm9yIEFNRCBLNyBwcm9jZXNzb3JzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKHBvd2Vybm93X2luaXQpOwogbW9kdWxlX2V4aXQocG93ZXJub3dfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IGZiMDM5Y2QuLmExNWFjOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0zMywxNiArMzMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIGN1cnJlbnQgLyBzZXRfY3B1c19hbGxvd2VkKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgotI2VuZGlmCiAKICNkZWZpbmUgUEZYICJwb3dlcm5vdy1rODogIgogI2RlZmluZSBWRVJTSU9OICJ2ZXJzaW9uIDIuMjAuMDAiCkBAIC03MSw3ICs2OSw4IEBACiAJcmV0dXJuIDEwMDAgKiBmaW5kX2ZyZXFfZnJvbV9maWQoZmlkKTsKIH0KIAotc3RhdGljIHUzMiBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZGF0YSwgdTMyIHBzdGF0ZSkKK3N0YXRpYyB1MzIgZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmRhdGEsCisJCXUzMiBwc3RhdGUpCiB7CiAJcmV0dXJuIGRhdGFbcHN0YXRlXS5mcmVxdWVuY3k7CiB9CkBAIC0xODYsNyArMTg1LDkgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JbG8gPSBmaWQgfCAoZGF0YS0+Y3VycnZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpIHwgTVNSX0NfTE9fSU5JVF9GSURfVklEOworCWxvID0gZmlkOworCWxvIHw9IChkYXRhLT5jdXJydmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCk7CisJbG8gfD0gTVNSX0NfTE9fSU5JVF9GSURfVklEOwogCiAJZHByaW50aygid3JpdGluZyBmaWQgMHgleCwgbG8gMHgleCwgaGkgMHgleFxuIiwKIAkJZmlkLCBsbywgZGF0YS0+cGxsbG9jayAqIFBMTF9MT0NLX0NPTlZFUlNJT04pOwpAQCAtMTk0LDcgKzE5NSw5IEBACiAJZG8gewogCQl3cm1zcihNU1JfRklEVklEX0NUTCwgbG8sIGRhdGEtPnBsbGxvY2sgKiBQTExfTE9DS19DT05WRVJTSU9OKTsKIAkJaWYgKGkrKyA+IDEwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSGFyZHdhcmUgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gbm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIkhhcmR3YXJlIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtICIKKwkJCQkibm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gd2hpbGUgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKTsKQEAgLTIwMiwxNCArMjA1LDE2IEBACiAJY291bnRfb2ZmX2lydChkYXRhKTsKIAogCWlmIChzYXZldmlkICE9IGRhdGEtPmN1cnJ2aWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidmlkIGNoYW5nZSBvbiBmaWQgdHJhbnMsIG9sZCAweCV4LCBuZXcgMHgleFxuIiwKLQkJICAgICAgIHNhdmV2aWQsIGRhdGEtPmN1cnJ2aWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkidmlkIGNoYW5nZSBvbiBmaWQgdHJhbnMsIG9sZCAweCV4LCBuZXcgMHgleFxuIiwKKwkJCXNhdmV2aWQsIGRhdGEtPmN1cnJ2aWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoZmlkICE9IGRhdGEtPmN1cnJmaWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmlkIHRyYW5zIGZhaWxlZCwgZmlkIDB4JXgsIGN1cnIgMHgleFxuIiwgZmlkLAotCQkgICAgICAgIGRhdGEtPmN1cnJmaWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiZmlkIHRyYW5zIGZhaWxlZCwgZmlkIDB4JXgsIGN1cnIgMHgleFxuIiwgZmlkLAorCQkJZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjI4LDcgKzIzMyw5IEBACiAJCXJldHVybiAxOwogCX0KIAotCWxvID0gZGF0YS0+Y3VycmZpZCB8ICh2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKSB8IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKKwlsbyA9IGRhdGEtPmN1cnJmaWQ7CisJbG8gfD0gKHZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpOworCWxvIHw9IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKIAogCWRwcmludGsoIndyaXRpbmcgdmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCiAJCXZpZCwgbG8sIFNUT1BfR1JBTlRfNU5TKTsKQEAgLTIzNiwyMCArMjQzLDI0IEBACiAJZG8gewogCQl3cm1zcihNU1JfRklEVklEX0NUTCwgbG8sIFNUT1BfR1JBTlRfNU5TKTsKIAkJaWYgKGkrKyA+IDEwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW50ZXJuYWwgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gbm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnRlcm5hbCBlcnJvciAtIHBlbmRpbmcgYml0ICIKKwkJCQkJInZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSAiCisJCQkJCSJjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSB3aGlsZSAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpOwogCiAJaWYgKHNhdmVmaWQgIT0gZGF0YS0+Y3VycmZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmaWQgY2hhbmdlZCBvbiB2aWQgdHJhbnMsIG9sZCAweCV4IG5ldyAweCV4XG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJmaWQgY2hhbmdlZCBvbiB2aWQgdHJhbnMsIG9sZCAiCisJCQkiMHgleCBuZXcgMHgleFxuIiwKIAkJICAgICAgIHNhdmVmaWQsIGRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAodmlkICE9IGRhdGEtPmN1cnJ2aWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidmlkIHRyYW5zIGZhaWxlZCwgdmlkIDB4JXgsIGN1cnIgMHgleFxuIiwgdmlkLAotCQkJCWRhdGEtPmN1cnJ2aWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2aWQgdHJhbnMgZmFpbGVkLCB2aWQgMHgleCwgIgorCQkJCSJjdXJyIDB4JXhcbiIsCisJCQkJdmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yNjEsNyArMjcyLDggQEAKICAqIERlY3JlYXNpbmcgdmlkIGNvZGVzIHJlcHJlc2VudCBpbmNyZWFzaW5nIHZvbHRhZ2VzOgogICogdmlkIG9mIDAgaXMgMS41NTBWLCB2aWQgb2YgMHgxZSBpcyAwLjgwMFYsIHZpZCBvZiBWSURfT0ZGIGlzIG9mZi4KICAqLwotc3RhdGljIGludCBkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxdmlkLCB1MzIgc3RlcCkKK3N0YXRpYyBpbnQgZGVjcmVhc2VfdmlkX2NvZGVfYnlfc3RlcChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdTMyIHJlcXZpZCwgdTMyIHN0ZXApCiB7CiAJaWYgKChkYXRhLT5jdXJydmlkIC0gcmVxdmlkKSA+IHN0ZXApCiAJCXJlcXZpZCA9IGRhdGEtPmN1cnJ2aWQgLSBzdGVwOwpAQCAtMjgzLDcgKzI5NSw4IEBACiB9CiAKIC8qIENoYW5nZSBPcHRlcm9uL0F0aGxvbjY0IGZpZCBhbmQgdmlkLCBieSB0aGUgMyBwaGFzZXMuICovCi1zdGF0aWMgaW50IHRyYW5zaXRpb25fZmlkX3ZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcWZpZCwgdTMyIHJlcXZpZCkKK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9maWRfdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1MzIgcmVxZmlkLCB1MzIgcmVxdmlkKQogewogCWlmIChjb3JlX3ZvbHRhZ2VfcHJlX3RyYW5zaXRpb24oZGF0YSwgcmVxdmlkKSkKIAkJcmV0dXJuIDE7CkBAIC0yOTgsNyArMzExLDggQEAKIAkJcmV0dXJuIDE7CiAKIAlpZiAoKHJlcWZpZCAhPSBkYXRhLT5jdXJyZmlkKSB8fCAocmVxdmlkICE9IGRhdGEtPmN1cnJ2aWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCAoY3B1JWQpOiByZXEgMHgleCAweCV4LCBjdXJyIDB4JXggMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIChjcHUlZCk6IHJlcSAweCV4IDB4JXgsICIKKwkJCQkiY3VyciAweCV4IDB4JXhcbiIsCiAJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQkJCXJlcWZpZCwgcmVxdmlkLCBkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJcmV0dXJuIDE7CkBAIC0zMTEsMTMgKzMyNSwxNSBAQAogfQogCiAvKiBQaGFzZSAxIC0gY29yZSB2b2x0YWdlIHRyYW5zaXRpb24gLi4uIHNldHVwIHZvbHRhZ2UgKi8KLXN0YXRpYyBpbnQgY29yZV92b2x0YWdlX3ByZV90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxdmlkKQorc3RhdGljIGludCBjb3JlX3ZvbHRhZ2VfcHJlX3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXUzMiByZXF2aWQpCiB7CiAJdTMyIHJ2b3N0ZXBzID0gZGF0YS0+cnZvOwogCXUzMiBzYXZlZmlkID0gZGF0YS0+Y3VycmZpZDsKIAl1MzIgbWF4dmlkLCBsbzsKIAotCWRwcmludGsoInBoMSAoY3B1JWQpOiBzdGFydCwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsIHJlcXZpZCAweCV4LCBydm8gMHgleFxuIiwKKwlkcHJpbnRrKCJwaDEgKGNwdSVkKTogc3RhcnQsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCAiCisJCSJyZXF2aWQgMHgleCwgcnZvIDB4JXhcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCwgcmVxdmlkLCBkYXRhLT5ydm8pOwogCkBAIC0zNDAsNyArMzU2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoInBoMTogY2hhbmdpbmcgdmlkIGZvciBydm8sIHJlcSAweCV4XG4iLAogCQkJCWRhdGEtPmN1cnJ2aWQgLSAxKTsKLQkJCWlmIChkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKGRhdGEsIGRhdGEtPmN1cnJ2aWQgLSAxLCAxKSkKKwkJCWlmIChkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKGRhdGEsIGRhdGEtPmN1cnJ2aWQtMSwgMSkpCiAJCQkJcmV0dXJuIDE7CiAJCQlydm9zdGVwcy0tOwogCQl9CkBAIC0zNTAsNyArMzY2LDggQEAKIAkJcmV0dXJuIDE7CiAKIAlpZiAoc2F2ZWZpZCAhPSBkYXRhLT5jdXJyZmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInBoMSBlcnIsIGN1cnJmaWQgY2hhbmdlZCAweCV4XG4iLCBkYXRhLT5jdXJyZmlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgxIGVyciwgY3VycmZpZCBjaGFuZ2VkIDB4JXhcbiIsCisJCQkJZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMzYzLDIwICszODAsMjQgQEAKIC8qIFBoYXNlIDIgLSBjb3JlIGZyZXF1ZW5jeSB0cmFuc2l0aW9uICovCiBzdGF0aWMgaW50IGNvcmVfZnJlcXVlbmN5X3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXFmaWQpCiB7Ci0JdTMyIHZjb3JlcWZpZCwgdmNvY3VycmZpZCwgdmNvZmlkZGlmZiwgZmlkX2ludGVydmFsLCBzYXZldmlkID0gZGF0YS0+Y3VycnZpZDsKKwl1MzIgdmNvcmVxZmlkLCB2Y29jdXJyZmlkLCB2Y29maWRkaWZmOworCXUzMiBmaWRfaW50ZXJ2YWwsIHNhdmV2aWQgPSBkYXRhLT5jdXJydmlkOwogCi0JaWYgKChyZXFmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSAmJiAoZGF0YS0+Y3VycmZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInBoMjogaWxsZWdhbCBsby1sbyB0cmFuc2l0aW9uIDB4JXggMHgleFxuIiwKLQkJCXJlcWZpZCwgZGF0YS0+Y3VycmZpZCk7CisJaWYgKChyZXFmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSAmJgorCSAgICAoZGF0YS0+Y3VycmZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBoMjogaWxsZWdhbCBsby1sbyB0cmFuc2l0aW9uICIKKwkJCQkiMHgleCAweCV4XG4iLCByZXFmaWQsIGRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoZGF0YS0+Y3VycmZpZCA9PSByZXFmaWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyIG51bGwgZmlkIHRyYW5zaXRpb24gMHgleFxuIiwgZGF0YS0+Y3VycmZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBoMiBudWxsIGZpZCB0cmFuc2l0aW9uIDB4JXhcbiIsCisJCQkJZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAwOwogCX0KIAotCWRwcmludGsoInBoMiAoY3B1JWQpOiBzdGFydGluZywgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsIHJlcWZpZCAweCV4XG4iLAorCWRwcmludGsoInBoMiAoY3B1JWQpOiBzdGFydGluZywgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsICIKKwkJInJlcWZpZCAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQsIHJlcWZpZCk7CiAKQEAgLTM5MCwxNCArNDExLDE0IEBACiAKIAkJaWYgKHJlcWZpZCA+IGRhdGEtPmN1cnJmaWQpIHsKIAkJCWlmIChkYXRhLT5jdXJyZmlkID4gTE9fRklEX1RBQkxFX1RPUCkgewotCQkJCWlmICh3cml0ZV9uZXdfZmlkKGRhdGEsIGRhdGEtPmN1cnJmaWQgKyBmaWRfaW50ZXJ2YWwpKSB7CisJCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwKKwkJCQkJCWRhdGEtPmN1cnJmaWQgKyBmaWRfaW50ZXJ2YWwpKQogCQkJCQlyZXR1cm4gMTsKLQkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWlmICh3cml0ZV9uZXdfZmlkCi0JCQkJICAgIChkYXRhLCAyICsgY29udmVydF9maWRfdG9fdmNvX2ZpZChkYXRhLT5jdXJyZmlkKSkpIHsKKwkJCQkgICAgKGRhdGEsCisJCQkJICAgICAyICsgY29udmVydF9maWRfdG9fdmNvX2ZpZChkYXRhLT5jdXJyZmlkKSkpCiAJCQkJCXJldHVybiAxOwotCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICh3cml0ZV9uZXdfZmlkKGRhdGEsIGRhdGEtPmN1cnJmaWQgLSBmaWRfaW50ZXJ2YWwpKQpAQCAtNDE3LDcgKzQzOCw4IEBACiAKIAlpZiAoZGF0YS0+Y3VycmZpZCAhPSByZXFmaWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJInBoMjogbWlzbWF0Y2gsIGZhaWxlZCBmaWQgdHJhbnNpdGlvbiwgY3VyciAweCV4LCByZXEgMHgleFxuIiwKKwkJCSJwaDI6IG1pc21hdGNoLCBmYWlsZWQgZmlkIHRyYW5zaXRpb24sICIKKwkJCSJjdXJyIDB4JXgsIHJlcSAweCV4XG4iLAogCQkJZGF0YS0+Y3VycmZpZCwgcmVxZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDM1LDcgKzQ1Nyw4IEBACiB9CiAKIC8qIFBoYXNlIDMgLSBjb3JlIHZvbHRhZ2UgdHJhbnNpdGlvbiBmbG93IC4uLiBqdW1wIHRvIHRoZSBmaW5hbCB2aWQuICovCi1zdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wb3N0X3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXF2aWQpCitzdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wb3N0X3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXUzMiByZXF2aWQpCiB7CiAJdTMyIHNhdmVmaWQgPSBkYXRhLT5jdXJyZmlkOwogCXUzMiBzYXZlcmVxdmlkID0gcmVxdmlkOwpAQCAtNDU3LDcgKzQ4MCw4IEBACiAKIAkJaWYgKGRhdGEtPmN1cnJ2aWQgIT0gcmVxdmlkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgInBoMzogZmFpbGVkIHZpZCB0cmFuc2l0aW9uXG4sIHJlcSAweCV4LCBjdXJyIDB4JXgiLAorCQkJICAgICAgICJwaDM6IGZhaWxlZCB2aWQgdHJhbnNpdGlvblxuLCAiCisJCQkgICAgICAgInJlcSAweCV4LCBjdXJyIDB4JXgiLAogCQkJICAgICAgIHJlcXZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNTA4LDcgKzUzMiw4IEBACiAJaWYgKChlYXggJiBDUFVJRF9YRkFNKSA9PSBDUFVJRF9YRkFNX0s4KSB7CiAJCWlmICgoKGVheCAmIENQVUlEX1VTRV9YRkFNX1hNT0QpICE9IENQVUlEX1VTRV9YRkFNX1hNT0QpIHx8CiAJCSAgICAoKGVheCAmIENQVUlEX1hNT0QpID4gQ1BVSURfWE1PRF9SRVZfTUFTSykpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJQcm9jZXNzb3IgY3B1aWQgJXggbm90IHN1cHBvcnRlZFxuIiwgZWF4KTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJIlByb2Nlc3NvciBjcHVpZCAleCBub3Qgc3VwcG9ydGVkXG4iLCBlYXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtNTIwLDggKzU0NSwxMCBAQAogCQl9CiAKIAkJY3B1aWQoQ1BVSURfRlJFUV9WT0xUX0NBUEFCSUxJVElFUywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0JCWlmICgoZWR4ICYgUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpICE9IFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUG93ZXIgc3RhdGUgdHJhbnNpdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7CisJCWlmICgoZWR4ICYgUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpCisJCQkhPSBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkiUG93ZXIgc3RhdGUgdHJhbnNpdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7IC8qIG11c3QgYmUgYSBIVyBQc3RhdGUgY2FwYWJsZSBwcm9jZXNzb3IgKi8KQEAgLTUzOSw3ICs1NjYsOCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBjaGVja19wc3RfdGFibGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBwc3RfcyAqcHN0LCB1OCBtYXh2aWQpCitzdGF0aWMgaW50IGNoZWNrX3BzdF90YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IHBzdF9zICpwc3QsCisJCXU4IG1heHZpZCkKIHsKIAl1bnNpZ25lZCBpbnQgajsKIAl1OCBsYXN0ZmlkID0gMHhmZjsKQEAgLTU1MCwxMiArNTc4LDE0IEBACiAJCQkgICAgICAgaiwgcHN0W2pdLnZpZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAocHN0W2pdLnZpZCA8IGRhdGEtPnJ2bykgewkvKiB2aWQgKyBydm8gPj0gMCAqLworCQlpZiAocHN0W2pdLnZpZCA8IGRhdGEtPnJ2bykgeworCQkJLyogdmlkICsgcnZvID49IDAgKi8KIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICIwIHZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSIKIAkJCSAgICAgICAiICVkXG4iLCBqKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmIChwc3Rbal0udmlkIDwgbWF4dmlkICsgZGF0YS0+cnZvKSB7CS8qIHZpZCArIHJ2byA+PSBtYXh2aWQgKi8KKwkJaWYgKHBzdFtqXS52aWQgPCBtYXh2aWQgKyBkYXRhLT5ydm8pIHsKKwkJCS8qIHZpZCArIHJ2byA+PSBtYXh2aWQgKi8KIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJtYXh2aWQgZXhjZWVkZWQgd2l0aCBwc3RhdGUiCiAJCQkgICAgICAgIiAlZFxuIiwgaik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU3OSwyMyArNjA5LDMxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobGFzdGZpZCA+IExPX0ZJRF9UQUJMRV9UT1ApCi0JCXByaW50ayhLRVJOX0lORk8gRldfQlVHIFBGWCAgImZpcnN0IGZpZCBub3QgZnJvbSBsbyBmcmVxIHRhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBGV19CVUcgUEZYCisJCQkiZmlyc3QgZmlkIG5vdCBmcm9tIGxvIGZyZXEgdGFibGVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfZW50cnkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBlbnRyeSkKK3sKKwlkYXRhLT5wb3dlcm5vd190YWJsZVtlbnRyeV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworfQorCiBzdGF0aWMgdm9pZCBwcmludF9iYXNpY3Moc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7CiAJaW50IGo7CiAJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bXBzOyBqKyspIHsKLQkJaWYgKGRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpIHsKKwkJaWYgKGRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSAhPQorCQkJCUNQVUZSRVFfRU5UUllfSU5WQUxJRCkgewogCQkJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIgICAlZCA6IHBzdGF0ZSAlZCAoJWQgTUh6KVxuIiwKLQkJCQkJaiwKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCQkiICAgJWQgOiBwc3RhdGUgJWQgKCVkIE1IeilcbiIsIGosCiAJCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4LAogCQkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kvMTAwMCk7CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIgICAlZCA6IGZpZCAweCV4ICglZCBNSHopLCB2aWQgMHgleFxuIiwKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCQkiICAgJWQgOiBmaWQgMHgleCAoJWQgTUh6KSwgdmlkIDB4JXhcbiIsCiAJCQkJCWosCiAJCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4ICYgMHhmZiwKIAkJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5LzEwMDAsCkBAIC02MDQsMjAgKzY0MiwyNSBAQAogCQl9CiAJfQogCWlmIChkYXRhLT5iYXRwcykKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9ubHkgJWQgcHN0YXRlcyBvbiBiYXR0ZXJ5XG4iLCBkYXRhLT5iYXRwcyk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJPbmx5ICVkIHBzdGF0ZXMgb24gYmF0dGVyeVxuIiwKKwkJCQlkYXRhLT5iYXRwcyk7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IHBzdF9zICpwc3QsIHU4IG1heHZpZCkKK3N0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJc3RydWN0IHBzdF9zICpwc3QsIHU4IG1heHZpZCkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlOwogCXVuc2lnbmVkIGludCBqOwogCi0JaWYgKGRhdGEtPmJhdHBzKSB7ICAgIC8qIHVzZSBBQ1BJIHN1cHBvcnQgdG8gZ2V0IGZ1bGwgc3BlZWQgb24gbWFpbnMgcG93ZXIgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIk9ubHkgJWQgcHN0YXRlcyB1c2FibGUgKHVzZSBBQ1BJIGRyaXZlciBmb3IgZnVsbCByYW5nZVxuIiwgZGF0YS0+YmF0cHMpOworCWlmIChkYXRhLT5iYXRwcykgeworCQkvKiB1c2UgQUNQSSBzdXBwb3J0IHRvIGdldCBmdWxsIHNwZWVkIG9uIG1haW5zIHBvd2VyICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkiT25seSAlZCBwc3RhdGVzIHVzYWJsZSAodXNlIEFDUEkgZHJpdmVyIGZvciBmdWxsICIKKwkJCSJyYW5nZVxuIiwgZGF0YS0+YmF0cHMpOwogCQlkYXRhLT5udW1wcyA9IGRhdGEtPmJhdHBzOwogCX0KIAotCWZvciAoIGo9MTsgajxkYXRhLT5udW1wczsgaisrICkgeworCWZvciAoaiA9IDE7IGogPCBkYXRhLT5udW1wczsgaisrKSB7CiAJCWlmIChwc3Rbai0xXS5maWQgPj0gcHN0W2pdLmZpZCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUFNUIG91dCBvZiBzZXF1ZW5jZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MCw5ICs2ODMsMTEgQEAKIAl9CiAKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykgeworCQlpbnQgZnJlcTsKIAkJcG93ZXJub3dfdGFibGVbal0uaW5kZXggPSBwc3Rbal0uZmlkOyAvKiBsb3dlciA4IGJpdHMgKi8KIAkJcG93ZXJub3dfdGFibGVbal0uaW5kZXggfD0gKHBzdFtqXS52aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwotCQlwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKHBzdFtqXS5maWQpOworCQlmcmVxID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChwc3Rbal0uZmlkKTsKKwkJcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ID0gZnJlcTsKIAl9CiAJcG93ZXJub3dfdGFibGVbZGF0YS0+bnVtcHNdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOwogCXBvd2Vybm93X3RhYmxlW2RhdGEtPm51bXBzXS5pbmRleCA9IDA7CkBAIC02NTgsNyArNzAzLDggQEAKIAkJcHJpbnRfYmFzaWNzKGRhdGEpOwogCiAJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bXBzOyBqKyspCi0JCWlmICgocHN0W2pdLmZpZD09ZGF0YS0+Y3VycmZpZCkgJiYgKHBzdFtqXS52aWQ9PWRhdGEtPmN1cnJ2aWQpKQorCQlpZiAoKHBzdFtqXS5maWQgPT0gZGF0YS0+Y3VycmZpZCkgJiYKKwkJICAgIChwc3Rbal0udmlkID09IGRhdGEtPmN1cnJ2aWQpKQogCQkJcmV0dXJuIDA7CiAKIAlkcHJpbnRrKCJjdXJyZmlkL3ZpZCBkbyBub3QgbWF0Y2ggUFNULCBpZ25vcmluZ1xuIik7CkBAIC02OTgsNyArNzQ0LDggQEAKIAkJfQogCiAJCWRhdGEtPnZzdGFibGUgPSBwc2ItPnZzdGFibGU7Ci0JCWRwcmludGsoInZvbHRhZ2Ugc3RhYmlsaXphdGlvbiB0aW1lOiAlZCgqMjB1cylcbiIsIGRhdGEtPnZzdGFibGUpOworCQlkcHJpbnRrKCJ2b2x0YWdlIHN0YWJpbGl6YXRpb24gdGltZTogJWQoKjIwdXMpXG4iLAorCQkJCWRhdGEtPnZzdGFibGUpOwogCiAJCWRwcmludGsoImZsYWdzMjogMHgleFxuIiwgcHNiLT5mbGFnczIpOwogCQlkYXRhLT5ydm8gPSBwc2ItPmZsYWdzMiAmIDM7CkBAIC03MTMsMTEgKzc2MCwxMiBAQAogCiAJCWRwcmludGsoIm51bXBzdDogMHgleFxuIiwgcHNiLT5udW1fdGFibGVzKTsKIAkJY3BzdCA9IHBzYi0+bnVtX3RhYmxlczsKLQkJaWYgKChwc2ItPmNwdWlkID09IDB4MDAwMDBmYzApIHx8IChwc2ItPmNwdWlkID09IDB4MDAwMDBmZTApICl7CisJCWlmICgocHNiLT5jcHVpZCA9PSAweDAwMDAwZmMwKSB8fAorCQkgICAgKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZlMCkpIHsKIAkJCXRoaXNjcHVpZCA9IGNwdWlkX2VheChDUFVJRF9QUk9DRVNTT1JfU0lHTkFUVVJFKTsKLQkJCWlmICgodGhpc2NwdWlkID09IDB4MDAwMDBmYzApIHx8ICh0aGlzY3B1aWQgPT0gMHgwMDAwMGZlMCkgKSB7CisJCQlpZiAoKHRoaXNjcHVpZCA9PSAweDAwMDAwZmMwKSB8fAorCQkJICAgICh0aGlzY3B1aWQgPT0gMHgwMDAwMGZlMCkpCiAJCQkJY3BzdCA9IDE7Ci0JCQl9CiAJCX0KIAkJaWYgKGNwc3QgIT0gMSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIm51bXBzdCBtdXN0IGJlIDFcbiIpOwpAQCAtNzMyLDcgKzc4MCw4IEBACiAKIAkJZGF0YS0+bnVtcHMgPSBwc2ItPm51bXBzOwogCQlkcHJpbnRrKCJudW1wc3RhdGVzOiAweCV4XG4iLCBkYXRhLT5udW1wcyk7Ci0JCXJldHVybiBmaWxsX3Bvd2Vybm93X3RhYmxlKGRhdGEsIChzdHJ1Y3QgcHN0X3MgKikocHNiKzEpLCBtYXh2aWQpOworCQlyZXR1cm4gZmlsbF9wb3dlcm5vd190YWJsZShkYXRhLAorCQkJCShzdHJ1Y3QgcHN0X3MgKikocHNiKzEpLCBtYXh2aWQpOwogCX0KIAkvKgogCSAqIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCBjb21wbGFpbiB0byBCSU9TIG1hbnVmYWN0dXJlci4gSWYKQEAgLTc0NSwyOCArNzk0LDMxIEBACiAJICogQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlLCB3aGljaCBpcyBhdmFpbGFibGUgb24KIAkgKiB3d3cuYW1kLmNvbQogCSAqLwotCXByaW50ayhLRVJOX0VSUiBQRlggIkJJT1MgZXJyb3IgLSBubyBQU0Igb3IgQUNQSSBfUFNTIG9iamVjdHNcbiIpOworCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJObyBQU0Igb3IgQUNQSSBfUFNTIG9iamVjdHNcbiIpOwogCXJldHVybiAtRU5PREVWOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJCi1zdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGluZGV4KQogeworCWFjcGlfaW50ZWdlciBjb250cm9sOworCiAJaWYgKCFkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgfHwgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkpCiAJCXJldHVybjsKIAotCWRhdGEtPmlydCA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IElSVF9TSElGVCkgJiBJUlRfTUFTSzsKLQlkYXRhLT5ydm8gPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBSVk9fU0hJRlQpICYgUlZPX01BU0s7Ci0JZGF0YS0+ZXh0dHlwZSA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IEVYVF9UWVBFX1NISUZUKSAmIEVYVF9UWVBFX01BU0s7Ci0JZGF0YS0+cGxsbG9jayA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IFBMTF9MX1NISUZUKSAmIFBMTF9MX01BU0s7Ci0JZGF0YS0+dmlkbXZzID0gMSA8PCAoKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gTVZTX1NISUZUKSAmIE1WU19NQVNLKTsKLQlkYXRhLT52c3RhYmxlID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gVlNUX1NISUZUKSAmIFZTVF9NQVNLOwotfQorCWNvbnRyb2wgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sOyBkYXRhLT5pcnQgPSAoY29udHJvbAorCQkJPj4gSVJUX1NISUZUKSAmIElSVF9NQVNLOyBkYXRhLT5ydm8gPSAoY29udHJvbCA+PgorCQkJCVJWT19TSElGVCkgJiBSVk9fTUFTSzsgZGF0YS0+ZXh0dHlwZSA9IChjb250cm9sCisJCQkJCT4+IEVYVF9UWVBFX1NISUZUKSAmIEVYVF9UWVBFX01BU0s7CisJZGF0YS0+cGxsbG9jayA9IChjb250cm9sID4+IFBMTF9MX1NISUZUKSAmIFBMTF9MX01BU0s7IGRhdGEtPnZpZG12cyA9IDEKKwkJPDwgKChjb250cm9sID4+IE1WU19TSElGVCkgJiBNVlNfTUFTSyk7IGRhdGEtPnZzdGFibGUgPQorCQkoY29udHJvbCA+PiBWU1RfU0hJRlQpICYgVlNUX01BU0s7IH0KIAogc3RhdGljIGludCBwb3dlcm5vd19rOF9jcHVfaW5pdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGU7CiAJaW50IHJldF92YWwgPSAtRU5PREVWOworCWFjcGlfaW50ZWdlciBzcGFjZV9pZDsKIAogCWlmIChhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpKSB7CiAJCWRwcmludGsoInJlZ2lzdGVyIHBlcmZvcm1hbmNlIGZhaWxlZDogYmFkIEFDUEkgZGF0YVxuIik7CkBAIC03NzksMTEgKzgzMSwxMiBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKChkYXRhLT5hY3BpX2RhdGEuY29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgfHwKLQkJKGRhdGEtPmFjcGlfZGF0YS5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpKSB7CisJc3BhY2VfaWQgPSBkYXRhLT5hY3BpX2RhdGEuY29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZDsKKwlpZiAoKHNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB8fAorCQkoc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpKSB7CiAJCWRwcmludGsoIkludmFsaWQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzICgleCAtICV4KVxuIiwKIAkJCWRhdGEtPmFjcGlfZGF0YS5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkLAotCQkJZGF0YS0+YWNwaV9kYXRhLnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCk7CisJCQlzcGFjZV9pZCk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTgwMiw3ICs4NTUsOCBAQAogCWlmIChyZXRfdmFsKQogCQlnb3RvIGVycl9vdXRfbWVtOwogCi0JcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKwlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmZyZXF1ZW5jeSA9CisJCUNQVUZSRVFfVEFCTEVfRU5EOwogCXBvd2Vybm93X3RhYmxlW2RhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudF0uaW5kZXggPSAwOwogCWRhdGEtPnBvd2Vybm93X3RhYmxlID0gcG93ZXJub3dfdGFibGU7CiAKQEAgLTgzMCwxMyArODg0LDE1IEBACiBlcnJfb3V0OgogCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KTsKIAotCS8qIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCBpbmZvcm1zIHVzIGF0IC0+ZXhpdCgpIHdoZXRoZXIgQUNQSSB3YXMgdXNlZCAqLworCS8qIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCBpbmZvcm1zIHVzIGF0IC0+ZXhpdCgpCisJICogd2hldGhlciBBQ1BJIHdhcyB1c2VkICovCiAJZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50ID0gMDsKIAogCXJldHVybiByZXRfdmFsOwogfQogCi1zdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQorc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSkKIHsKIAlpbnQgaTsKIAl1MzIgaGkgPSAwLCBsbyA9IDA7CkBAIC04NDgsODQgKzkwNCwxMDEgQEAKIAogCQlpbmRleCA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbCAmIEhXX1BTVEFURV9NQVNLOwogCQlpZiAoaW5kZXggPiBkYXRhLT5tYXhfaHdfcHN0YXRlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIHBzdGF0ZSAlZCAtIGJhZCB2YWx1ZSAlZC5cbiIsIGksIGluZGV4KTsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlBsZWFzZSByZXBvcnQgdG8gQklPUyBtYW51ZmFjdHVyZXJcbiIpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCBwc3RhdGUgJWQgLSAiCisJCQkJCSJiYWQgdmFsdWUgJWQuXG4iLCBpLCBpbmRleCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJQbGVhc2UgcmVwb3J0IHRvIEJJT1MgIgorCQkJCQkibWFudWZhY3R1cmVyXG4iKTsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlyZG1zcihNU1JfUFNUQVRFX0RFRl9CQVNFICsgaW5kZXgsIGxvLCBoaSk7CiAJCWlmICghKGhpICYgSFdfUFNUQVRFX1ZBTElEX01BU0spKSB7CiAJCQlkcHJpbnRrKCJpbnZhbGlkIHBzdGF0ZSAlZCwgaWdub3JpbmdcbiIsIGluZGV4KTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4ID0gaW5kZXg7CiAKLQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CisJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9CisJCQlkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQogewogCWludCBpOwogCWludCBjbnRsb2ZyZXEgPSAwOworCiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudDsgaSsrKSB7CiAJCXUzMiBmaWQ7CiAJCXUzMiB2aWQ7CisJCXUzMiBmcmVxLCBpbmRleDsKKwkJYWNwaV9pbnRlZ2VyIHN0YXR1cywgY29udHJvbDsKIAogCQlpZiAoZGF0YS0+ZXh0dHlwZSkgewotCQkJZmlkID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5zdGF0dXMgJiBFWFRfRklEX01BU0s7Ci0JCQl2aWQgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5zdGF0dXMgPj4gVklEX1NISUZUKSAmIEVYVF9WSURfTUFTSzsKKwkJCXN0YXR1cyA9ICBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLnN0YXR1czsKKwkJCWZpZCA9IHN0YXR1cyAmIEVYVF9GSURfTUFTSzsKKwkJCXZpZCA9IChzdGF0dXMgPj4gVklEX1NISUZUKSAmIEVYVF9WSURfTUFTSzsKIAkJfSBlbHNlIHsKLQkJCWZpZCA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbCAmIEZJRF9NQVNLOwotCQkJdmlkID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbCA+PiBWSURfU0hJRlQpICYgVklEX01BU0s7CisJCQljb250cm9sID0gIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbDsKKwkJCWZpZCA9IGNvbnRyb2wgJiBGSURfTUFTSzsKKwkJCXZpZCA9IChjb250cm9sID4+IFZJRF9TSElGVCkgJiBWSURfTUFTSzsKIAkJfQogCiAJCWRwcmludGsoIiAgICVkIDogZmlkIDB4JXgsIHZpZCAweCV4XG4iLCBpLCBmaWQsIHZpZCk7CiAKLQkJcG93ZXJub3dfdGFibGVbaV0uaW5kZXggPSBmaWQ7IC8qIGxvd2VyIDggYml0cyAqLwotCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCB8PSAodmlkIDw8IDgpOyAvKiB1cHBlciA4IGJpdHMgKi8KLQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChmaWQpOworCQlpbmRleCA9IGZpZCB8ICh2aWQ8PDgpOworCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCA9IGluZGV4OworCisJCWZyZXEgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGZpZCk7CisJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IGZyZXE7CiAKIAkJLyogdmVyaWZ5IGZyZXF1ZW5jeSBpcyBPSyAqLwotCQlpZiAoKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA+IChNQVhfRlJFUSAqIDEwMDApKSB8fAotCQkJKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA8IChNSU5fRlJFUSAqIDEwMDApKSkgewotCQkJZHByaW50aygiaW52YWxpZCBmcmVxICV1IGtIeiwgaWdub3JpbmdcbiIsIHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSk7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCWlmICgoZnJlcSA+IChNQVhfRlJFUSAqIDEwMDApKSB8fCAoZnJlcSA8IChNSU5fRlJFUSAqIDEwMDApKSkgeworCQkJZHByaW50aygiaW52YWxpZCBmcmVxICV1IGtIeiwgaWdub3JpbmdcbiIsIGZyZXEpOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyogdmVyaWZ5IHZvbHRhZ2UgaXMgT0sgLSBCSU9TcyBhcmUgdXNpbmcgIm9mZiIgdG8gaW5kaWNhdGUgaW52YWxpZCAqLworCQkvKiB2ZXJpZnkgdm9sdGFnZSBpcyBPSyAtCisJCSAqIEJJT1NzIGFyZSB1c2luZyAib2ZmIiB0byBpbmRpY2F0ZSBpbnZhbGlkICovCiAJCWlmICh2aWQgPT0gVklEX09GRikgewogCQkJZHByaW50aygiaW52YWxpZCB2aWQgJXUsIGlnbm9yaW5nXG4iLCB2aWQpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogdmVyaWZ5IG9ubHkgMSBlbnRyeSBmcm9tIHRoZSBsbyBmcmVxdWVuY3kgdGFibGUgKi8KIAkJaWYgKGZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pIHsKIAkJCWlmIChjbnRsb2ZyZXEpIHsKLQkJCQkvKiBpZiBib3RoIGVudHJpZXMgYXJlIHRoZSBzYW1lLCBpZ25vcmUgdGhpcyBvbmUgLi4uICovCi0JCQkJaWYgKChwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5mcmVxdWVuY3kpIHx8Ci0JCQkJICAgIChwb3dlcm5vd190YWJsZVtpXS5pbmRleCAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmluZGV4KSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJUb28gbWFueSBsbyBmcmVxIHRhYmxlIGVudHJpZXNcbiIpOworCQkJCS8qIGlmIGJvdGggZW50cmllcyBhcmUgdGhlIHNhbWUsCisJCQkJICogaWdub3JlIHRoaXMgb25lIC4uLiAqLworCQkJCWlmICgoZnJlcSAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmZyZXF1ZW5jeSkgfHwKKwkJCQkgICAgKGluZGV4ICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uaW5kZXgpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkJCSJUb28gbWFueSBsbyBmcmVxIHRhYmxlICIKKwkJCQkJCSJlbnRyaWVzXG4iKTsKIAkJCQkJcmV0dXJuIDE7CiAJCQkJfQogCi0JCQkJZHByaW50aygiZG91YmxlIGxvdyBmcmVxdWVuY3kgdGFibGUgZW50cnksIGlnbm9yaW5nIGl0LlxuIik7Ci0JCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJCWRwcmludGsoImRvdWJsZSBsb3cgZnJlcXVlbmN5IHRhYmxlIGVudHJ5LCAiCisJCQkJCQkiaWdub3JpbmcgaXQuXG4iKTsKKwkJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlCiAJCQkJY250bG9mcmVxID0gaTsKIAkJfQogCi0JCWlmIChwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgIT0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgZnJlcSBlbnRyaWVzICV1IGtIeiB2cy4gJXUga0h6XG4iLAotCQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSwKLQkJCQkodW5zaWduZWQgaW50KSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDApKTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJaWYgKGZyZXEgIT0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgZnJlcSBlbnRyaWVzICIKKwkJCQkiJXUga0h6IHZzLiAldSBrSHpcbiIsIGZyZXEsCisJCQkJKHVuc2lnbmVkIGludCkKKwkJCQkoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeQorCQkJCSAqIDEwMDApKTsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTkzNSw3ICsxMDA4LDggQEAKIHN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2NwdV9leGl0X2FjcGkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7CiAJaWYgKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCkKLQkJYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpOworCQlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsCisJCQkJZGF0YS0+Y3B1KTsKIAlmcmVlX2NwdW1hc2tfdmFyKGRhdGEtPmFjcGlfZGF0YS5zaGFyZWRfY3B1X21hcCk7CiB9CiAKQEAgLTk1MywxNSArMTAyNyw5IEBACiAJcmV0dXJuIDEwMDAgKiBtYXhfbGF0ZW5jeTsKIH0KIAotI2Vsc2UKLXN0YXRpYyBpbnQgcG93ZXJub3dfazhfY3B1X2luaXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkgeyByZXR1cm4gLUVOT0RFVjsgfQotc3RhdGljIHZvaWQgcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkgeyByZXR1cm47IH0KLXN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KSB7IHJldHVybjsgfQotc3RhdGljIGludCBnZXRfdHJhbnNpdGlvbl9sYXRlbmN5KHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJICovCi0KIC8qIFRha2UgYSBmcmVxdWVuY3ksIGFuZCBpc3N1ZSB0aGUgZmlkL3ZpZCB0cmFuc2l0aW9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpCitzdGF0aWMgaW50IHRyYW5zaXRpb25fZnJlcXVlbmN5X2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGluZGV4KQogewogCXUzMiBmaWQgPSAwOwogCXUzMiB2aWQgPSAwOwpAQCAtOTg5LDcgKzEwNTcsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoKGZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKKwlpZiAoKGZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmCisJICAgIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkgICAgICAgImlnbm9yaW5nIGlsbGVnYWwgY2hhbmdlIGluIGxvIGZyZXEgdGFibGUtJXggdG8gMHgleFxuIiwKIAkJICAgICAgIGRhdGEtPmN1cnJmaWQsIGZpZCk7CkBAIC0xMDE3LDcgKzEwODYsOCBAQAogfQogCiAvKiBUYWtlIGEgZnJlcXVlbmN5LCBhbmQgaXNzdWUgdGhlIGhhcmR3YXJlIHBzdGF0ZSB0cmFuc2l0aW9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpCitzdGF0aWMgaW50IHRyYW5zaXRpb25fZnJlcXVlbmN5X3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGluZGV4KQogewogCXUzMiBwc3RhdGUgPSAwOwogCWludCByZXMsIGk7CkBAIC0xMDI5LDcgKzEwOTksOCBAQAogCXBzdGF0ZSA9IGluZGV4ICYgSFdfUFNUQVRFX01BU0s7CiAJaWYgKHBzdGF0ZSA+IGRhdGEtPm1heF9od19wc3RhdGUpCiAJCXJldHVybiAwOwotCWZyZXFzLm9sZCA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIGRhdGEtPmN1cnJwc3RhdGUpOworCWZyZXFzLm9sZCA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsCisJCQlkYXRhLT5jdXJycHN0YXRlKTsKIAlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBwc3RhdGUpOwogCiAJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgKihkYXRhLT5hdmFpbGFibGVfY29yZXMpKSB7CkBAIC0xMDQ4LDcgKzExMTksOCBAQAogfQogCiAvKiBEcml2ZXIgZW50cnkgcG9pbnQgdG8gc3dpdGNoIHRvIHRoZSB0YXJnZXQgZnJlcXVlbmN5ICovCi1zdGF0aWMgaW50IHBvd2Vybm93azhfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sLCB1bnNpZ25lZCB0YXJnZnJlcSwgdW5zaWduZWQgcmVsYXRpb24pCitzdGF0aWMgaW50IHBvd2Vybm93azhfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sLAorCQl1bnNpZ25lZCB0YXJnZnJlcSwgdW5zaWduZWQgcmVsYXRpb24pCiB7CiAJY3B1bWFza190IG9sZG1hc2s7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEgPSBwZXJfY3B1KHBvd2Vybm93X2RhdGEsIHBvbC0+Y3B1KTsKQEAgLTEwODcsMTQgKzExNTksMTggQEAKIAkJZHByaW50aygidGFyZzogY3VyciBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCi0JCWlmICgoY2hlY2t2aWQgIT0gZGF0YS0+Y3VycnZpZCkgfHwgKGNoZWNrZmlkICE9IGRhdGEtPmN1cnJmaWQpKSB7CisJCWlmICgoY2hlY2t2aWQgIT0gZGF0YS0+Y3VycnZpZCkgfHwKKwkJICAgIChjaGVja2ZpZCAhPSBkYXRhLT5jdXJyZmlkKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCQkiZXJyb3IgLSBvdXQgb2Ygc3luYywgZml4IDB4JXggMHgleCwgdmlkIDB4JXggMHgleFxuIiwKLQkJCQljaGVja2ZpZCwgZGF0YS0+Y3VycmZpZCwgY2hlY2t2aWQsIGRhdGEtPmN1cnJ2aWQpOworCQkJCSJlcnJvciAtIG91dCBvZiBzeW5jLCBmaXggMHgleCAweCV4LCAiCisJCQkJInZpZCAweCV4IDB4JXhcbiIsCisJCQkJY2hlY2tmaWQsIGRhdGEtPmN1cnJmaWQsCisJCQkJY2hlY2t2aWQsIGRhdGEtPmN1cnJ2aWQpOwogCQl9CiAJfQogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlLCB0YXJnZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJCXRhcmdmcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJZ290byBlcnJfb3V0OwogCiAJbXV0ZXhfbG9jaygmZmlkdmlkX211dGV4KTsKQEAgLTExMTQsNyArMTE5MCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZmaWR2aWRfbXV0ZXgpOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBuZXdzdGF0ZSk7CisJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwKKwkJCQluZXdzdGF0ZSk7CiAJZWxzZQogCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CiAJcmV0ID0gMDsKQEAgLTExNDEsNiArMTIxOCw3IEBACiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2s7CiAJaW50IHJjOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKIAogCWlmICghY3B1X29ubGluZShwb2wtPmNwdSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTE1NywyNSArMTIzNSwyNSBAQAogCWRhdGEtPmNwdSA9IHBvbC0+Y3B1OwogCWRhdGEtPmN1cnJwc3RhdGUgPSBIV19QU1RBVEVfSU5WQUxJRDsKIAotCXJjID0gcG93ZXJub3dfazhfY3B1X2luaXRfYWNwaShkYXRhKTsKLQlpZiAocmMpIHsKKwlpZiAocG93ZXJub3dfazhfY3B1X2luaXRfYWNwaShkYXRhKSkgewogCQkvKgogCQkgKiBVc2UgdGhlIFBTQiBCSU9TIHN0cnVjdHVyZS4gVGhpcyBpcyBvbmx5IGF2YWlsYWJlIG9uCiAJCSAqIGFuIFVQIHZlcnNpb24sIGFuZCBpcyBkZXByZWNhdGVkIGJ5IEFNRC4KIAkJICovCiAJCWlmIChudW1fb25saW5lX2NwdXMoKSAhPSAxKSB7Ci0jaWZuZGVmIENPTkZJR19BQ1BJX1BST0NFU1NPUgotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQUNQSSBQcm9jZXNzb3Igc3VwcG9ydCBpcyByZXF1aXJlZCAiCi0JCQkgICAgICAgImZvciBTTVAgc3lzdGVtcyBidXQgaXMgYWJzZW50LiBQbGVhc2UgbG9hZCB0aGUgIgotCQkJICAgICAgICJBQ1BJIFByb2Nlc3NvciBtb2R1bGUgYmVmb3JlIHN0YXJ0aW5nIHRoaXMgIgotCQkJICAgICAgICJkcml2ZXIuXG4iKTsKLSNlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiWW91ciBCSU9TIGRvZXMgbm90IHByb3ZpZGUiCi0JCQkgICAgICAgIiBBQ1BJIF9QU1Mgb2JqZWN0cyBpbiBhIHdheSB0aGF0IExpbnV4ICIKLQkJCSAgICAgICAidW5kZXJzdGFuZHMuIFBsZWFzZSByZXBvcnQgdGhpcyB0byB0aGUgTGludXggIgotCQkJICAgICAgICJBQ1BJIG1haW50YWluZXJzIGFuZCBjb21wbGFpbiB0byB5b3VyIEJJT1MgIgotCQkJICAgICAgICJ2ZW5kb3IuXG4iKTsKLSNlbmRpZgorCQkJLyoKKwkJCSAqIFJlcGxhY2UgdGhpcyBvbmUgd2l0aCBwcmludF9vbmNlIGFzIHNvb24gYXMgc3VjaCBhCisJCQkgKiB0aGluZyBnZXRzIGludHJvZHVjZWQKKwkJCSAqLworCQkJaWYgKCFwcmludF9vbmNlKSB7CisJCQkJV0FSTl9PTkNFKDEsIEtFUk5fRVJSIEZXX0JVRyBQRlggIllvdXIgQklPUyAiCisJCQkJCSJkb2VzIG5vdCBwcm92aWRlIEFDUEkgX1BTUyBvYmplY3RzICIKKwkJCQkJImluIGEgd2F5IHRoYXQgTGludXggdW5kZXJzdGFuZHMuICIKKwkJCQkJIlBsZWFzZSByZXBvcnQgdGhpcyB0byB0aGUgTGludXggQUNQSSIKKwkJCQkJIiBtYWludGFpbmVycyBhbmQgY29tcGxhaW4gdG8geW91ciAiCisJCQkJCSJCSU9TIHZlbmRvci5cbiIpOworCQkJCXByaW50X29uY2UrKzsKKwkJCX0KIAkJCWdvdG8gZXJyX291dDsKIAkJfQogCQlpZiAocG9sLT5jcHUgIT0gMCkgewpAQCAtMTE4NSw5ICsxMjYzLDkgQEAKIAkJCWdvdG8gZXJyX291dDsKIAkJfQogCQlyYyA9IGZpbmRfcHNiX3RhYmxlKGRhdGEpOwotCQlpZiAocmMpIHsKKwkJaWYgKHJjKQogCQkJZ290byBlcnJfb3V0OwotCQl9CisKIAkJLyogVGFrZSBhIGNydWRlIGd1ZXNzIGhlcmUuCiAJCSAqIFRoYXQgZ3Vlc3Mgd2FzIGluIG1pY3Jvc2Vjb25kcywgc28gbXVsdGlwbHkgd2l0aCAxMDAwICovCiAJCXBvbC0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAoCkBAIC0xMjAyLDE2ICsxMjgwLDE2IEBACiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IHBvbC0+Y3B1KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImxpbWl0aW5nIHRvIGNwdSAldSBmYWlsZWRcbiIsIHBvbC0+Y3B1KTsKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfdW5tYXNrOwogCX0KIAogCWlmIChwZW5kaW5nX2JpdF9zdHVjaygpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxpbmcgaW5pdCwgY2hhbmdlIHBlbmRpbmcgYml0IHNldFxuIik7Ci0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X3VubWFzazsKIAl9CiAKIAlpZiAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpCi0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X3VubWFzazsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9PUFRFUk9OKQogCQlmaWR2aWRfbXNyX2luaXQoKTsKQEAgLTEyMjYsNyArMTMwNCw4IEBACiAJZGF0YS0+YXZhaWxhYmxlX2NvcmVzID0gcG9sLT5jcHVzOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBkYXRhLT5jdXJycHN0YXRlKTsKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCWRwcmludGsoInBvbGljeSBjdXJyZW50IGZyZXF1ZW5jeSAlZCBrSHpcbiIsIHBvbC0+Y3VyKTsKQEAgLTEyNDMsNyArMTMyMiw4IEBACiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoZGF0YS0+cG93ZXJub3dfdGFibGUsIHBvbC0+Y3B1KTsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCi0JCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgcHN0YXRlIDB4JXhcbiIsIGRhdGEtPmN1cnJwc3RhdGUpOworCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IHBzdGF0ZSAweCV4XG4iLAorCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCiAJCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKQEAgLTEyNTIsMTUgKzEzMzIsMTYgQEAKIAogCXJldHVybiAwOwogCi1lcnJfb3V0OgorZXJyX291dF91bm1hc2s6CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZG1hc2spOwogCXBvd2Vybm93X2s4X2NwdV9leGl0X2FjcGkoZGF0YSk7CiAKK2Vycl9vdXQ6CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHBvd2Vybm93azhfY3B1X2V4aXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sKQorc3RhdGljIGludCBfX2RldmV4aXQgcG93ZXJub3drOF9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbCkKIHsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IHBlcl9jcHUocG93ZXJub3dfZGF0YSwgcG9sLT5jcHUpOwogCkBAIC0xMjc3LDcgKzEzNTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vybm93azhfZ2V0ICh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm5vd2s4X2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhOwogCWNwdW1hc2tfdCBvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwpAQCAtMTMxMyw3ICsxMzk0LDcgQEAKIAlyZXR1cm4ga2h6OwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcG93ZXJub3dfazhfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X2s4X2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0xMzU4LDcgKzE0MzksOCBAQAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfYW1kNjRfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiUGF1bCBEZXZyaWVuZHQgPHBhdWwuZGV2cmllbmR0QGFtZC5jb20+IGFuZCBNYXJrIExhbmdzZG9yZiA8bWFyay5sYW5nc2RvcmZAYW1kLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgRGV2cmllbmR0IDxwYXVsLmRldnJpZW5kdEBhbWQuY29tPiBhbmQgIgorCQkiTWFyayBMYW5nc2RvcmYgPG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBBdGhsb24gNjQgYW5kIE9wdGVyb24gcHJvY2Vzc29yIGZyZXF1ZW5jeSBkcml2ZXIuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKaW5kZXggOGVjYzc1Yi4uNmM2Njk4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKQEAgLTQ1LDExICs0NSwxMCBAQAogCSAqIGZyZXF1ZW5jeSBpcyBpbiBrSHogKi8KIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgICpwb3dlcm5vd190YWJsZTsKIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQogCS8qIHRoZSBhY3BpIHRhYmxlIG5lZWRzIHRvIGJlIGtlcHQuIGl0J3Mgb25seSBhdmFpbGFibGUgaWYgQUNQSSB3YXMKIAkgKiB1c2VkIHRvIGRldGVybWluZSB2YWxpZCBmcmVxdWVuY3kvdmlkL2ZpZCBzdGF0ZXMgKi8KIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgYWNwaV9kYXRhOwotI2VuZGlmCisKIAkvKiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgYXNzb2NpYXRlZCBjb3JlcywgYnV0IGxldCBjcHVmcmVxCiAJICogaGFuZGxlIGhvdHBsdWcgZXZlbnRzIC0gc28ganVzdCBwb2ludCBhdCBjcHVmcmVxIHBvbC0+Y3B1cwogCSAqIHN0cnVjdHVyZSAqLwpAQCAtMjIyLDEwICsyMjEsOCBAQAogCiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKIHN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpOwogc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWZpbmVfc2libGluZ3MoaW50IGNwdSwgY3B1bWFza190IGNwdV9zaGFyZWRjb3JlX21hc2tbXSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCmluZGV4IDQyZGE5YmQuLjQzNWE5OTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYwpAQCAtMTksMTcgKzE5LDE5IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgTU1DUl9CQVNFCTB4ZmZmZWYwMDAJLyogVGhlIGRlZmF1bHQgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIE9GRlNfQ1BVQ1RMCTB4MiAgIC8qIENQVSBDb250cm9sIFJlZ2lzdGVyICovCiAKIHN0YXRpYyBfX3U4IF9faW9tZW0gKmNwdWN0bDsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzYzUyMF9mcmVxIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNjNTIwX2ZyZXEiLCBtc2cpCisjZGVmaW5lIFBGWCAic2M1MjBfZnJlcTogIgogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHNjNTIwX2ZyZXFfdGFibGVbXSA9IHsKIAl7MHgwMSwJMTAwMDAwfSwKQEAgLTQzLDcgKzQ1LDggQEAKIAogCXN3aXRjaCAoY2xvY2tzcGVlZF9yZWcgJiAweDAzKSB7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJzYzUyMF9mcmVxOiBlcnJvcjogY3B1Y3RsIHJlZ2lzdGVyIGhhcyB1bmV4cGVjdGVkIHZhbHVlICUwMnhcbiIsIGNsb2Nrc3BlZWRfcmVnKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3I6IGNwdWN0bCByZWdpc3RlciBoYXMgdW5leHBlY3RlZCAiCisJCQkJInZhbHVlICUwMnhcbiIsIGNsb2Nrc3BlZWRfcmVnKTsKIAljYXNlIDB4MDE6CiAJCXJldHVybiAxMDAwMDA7CiAJY2FzZSAweDAyOgpAQCAtNTEsNyArNTQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2M1MjBfZnJlcV9zZXRfY3B1X3N0YXRlICh1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBzYzUyMF9mcmVxX3NldF9jcHVfc3RhdGUodW5zaWduZWQgaW50IHN0YXRlKQogewogCiAJc3RydWN0IGNwdWZyZXFfZnJlcXMJZnJlcXM7CkBAIC03NiwxOCArNzksMTkgQEAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIH07CiAKLXN0YXRpYyBpbnQgc2M1MjBfZnJlcV92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzYzUyMF9mcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgJnNjNTIwX2ZyZXFfdGFibGVbMF0pOwogfQogCi1zdGF0aWMgaW50IHNjNTIwX2ZyZXFfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgc2M1MjBfZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHNjNTIwX2ZyZXFfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgc2M1MjBfZnJlcV90YWJsZSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc2M1MjBfZnJlcV9zZXRfY3B1X3N0YXRlKG5ld3N0YXRlKTsKQEAgLTExNiw3ICsxMjAsNyBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNjNTIwX2ZyZXFfdGFibGUpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybiAocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNjNTIwX2ZyZXFfdGFibGUsIHBvbGljeS0+Y3B1KTsKIApAQCAtMTMxLDcgKzEzNSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNjNTIwX2ZyZXFfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnNjNTIwX2ZyZXFfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTE1NSwxMyArMTU5LDEzIEBACiAJaW50IGVycjsKIAogCS8qIFRlc3QgaWYgd2UgaGF2ZSB0aGUgcmlnaHQgaGFyZHdhcmUgKi8KLQlpZihjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8Ci0JCQkJYy0+eDg2ICE9IDQgfHwgYy0+eDg2X21vZGVsICE9IDkpIHsKKwlpZiAoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCB8fAorCSAgICBjLT54ODYgIT0gNCB8fCBjLT54ODZfbW9kZWwgIT0gOSkgewogCQlkcHJpbnRrKCJubyBFbGFuIFNDNTIwIHByb2Nlc3NvciBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJY3B1Y3RsID0gaW9yZW1hcCgodW5zaWduZWQgbG9uZykoTU1DUl9CQVNFICsgT0ZGU19DUFVDVEwpLCAxKTsKLQlpZighY3B1Y3RsKSB7CisJaWYgKCFjcHVjdGwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzYzUyMF9mcmVxOiBlcnJvcjogZmFpbGVkIHRvIHJlbWFwIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IGRlZGMxZTkuLjhiYmIxMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtMzksNyArMzksNyBAQAogCiAvKiBzcGVlZHN0ZXBfcHJvY2Vzc29yCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX3Byb2Nlc3NvciA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3I7CiAKIHN0YXRpYyB1MzIgcG1iYXNlOwogCkBAIC01NCw3ICs1NCw4IEBACiB9OwogCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAic3BlZWRzdGVwLWljaCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJzcGVlZHN0ZXAtaWNoIiwgbXNnKQogCiAKIC8qKgpAQCAtNjIsNyArNjMsNyBAQAogICoKICAqIFJldHVybnM6IC1FTk9ERVYgaWYgbm8gcmVnaXN0ZXIgY291bGQgYmUgZm91bmQKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfZmluZF9yZWdpc3RlciAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX2ZpbmRfcmVnaXN0ZXIodm9pZCkKIHsKIAlpZiAoIXNwZWVkc3RlcF9jaGlwc2V0X2RldikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC05MCw3ICs5MSw3IEBACiAgKgogICogICBUcmllcyB0byBjaGFuZ2UgdGhlIFNwZWVkU3RlcCBzdGF0ZS4KICAqLwotc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSAodW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJdTggcG0yX2JsazsKIAl1OCB2YWx1ZTsKQEAgLTEzMywxMSArMTM0LDExIEBACiAKIAlkcHJpbnRrKCJyZWFkIGF0IHBtYmFzZSAweCV4ICsgMHg1MCByZXR1cm5lZCAweCV4XG4iLCBwbWJhc2UsIHZhbHVlKTsKIAotCWlmIChzdGF0ZSA9PSAodmFsdWUgJiAweDEpKSB7Ci0JCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkXG4iLCAoc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpIC8gMTAwMCkpOwotCX0gZWxzZSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSBmYWlsZWQgLSBJL08gZXJyb3JcbiIpOwotCX0KKwlpZiAoc3RhdGUgPT0gKHZhbHVlICYgMHgxKSkKKwkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWRcbiIsCisJCQlzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKSAvIDEwMDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgZmFpbGVkIC0gSS9PIGVycm9yXG4iKTsKIAogCXJldHVybjsKIH0KQEAgLTE0OSw3ICsxNTAsNyBAQAogICogICBUcmllcyB0byBhY3RpdmF0ZSB0aGUgU3BlZWRTdGVwIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlcnMuCiAgKiBSZXR1cm5zIC1FSU5WQUwgb24gYW4gdW5zdXBwb3J0ZWQgY2hpcHNldCwgYW5kIHplcm8gb24gc3VjY2Vzcy4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfYWN0aXZhdGUgKHZvaWQpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9hY3RpdmF0ZSh2b2lkKQogewogCXUxNiB2YWx1ZSA9IDA7CiAKQEAgLTE3NSwyMCArMTc2LDE4IEBACiAgKiBmdW5jdGlvbnMuIFJldHVybnMgdGhlIFNQRUVEU1RFUF9DSElQU0VUXy1udW1iZXIgZm9yIHRoZSBkZXRlY3RlZAogICogY2hpcHNldCwgb3IgemVybyBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfY2hpcHNldCAodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0KHZvaWQpCiB7CiAJc3BlZWRzdGVwX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCSAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwKLQkJCSAgICAgIFBDSV9BTllfSUQsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAorCQkJICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJCSAgICAgIE5VTEwpOwogCWlmIChzcGVlZHN0ZXBfY2hpcHNldF9kZXYpCiAJCXJldHVybiA0OyAvKiA0LU0gKi8KIAogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KQogCQlyZXR1cm4gMzsgLyogMy1NICovCkBAIC0xOTYsOCArMTk1LDcgQEAKIAogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMTAsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KSB7CiAJCS8qIHNwZWVkc3RlcC5jIGNhdXNlcyBsb2NrdXBzIG9uIERlbGwgSW5zcGlyb25zIDgwMDAgYW5kCkBAIC0yMDgsOCArMjA2LDcgQEAKIAogCQlob3N0YnJpZGdlICA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X01DLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAKIAkJaWYgKCFob3N0YnJpZGdlKQpAQCAtMjM2LDcgKzIzMyw3IEBACiAKIAljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1cyk7Ci0Jc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CisJc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1c19hbGxvd2VkKTsKIAlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIHNwZWVkKTsKIAlyZXR1cm4gc3BlZWQ7CkBAIC0yNTEsMTEgKzI0OCwxMiBAQAogICogc3BlZWRzdGVwX3RhcmdldCAtIHNldCBhIG5ldyBDUFVGcmVxIHBvbGljeQogICogQHBvbGljeTogbmV3IHBvbGljeQogICogQHRhcmdldF9mcmVxOiB0aGUgdGFyZ2V0IGZyZXF1ZW5jeQotICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCisgKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeQorICoJKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCSAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CkBAIC0yNjQsNyArMjYyLDggQEAKIAljcHVtYXNrX3QgY3B1c19hbGxvd2VkOwogCWludCBpOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gX3NwZWVkc3RlcF9nZXQocG9saWN5LT5jcHVzKTsKQEAgLTMwOCw3ICszMDcsNyBAQAogICogTGltaXQgbXVzdCBiZSB3aXRoaW4gc3BlZWRzdGVwX2xvd19mcmVxIGFuZCBzcGVlZHN0ZXBfaGlnaF9mcmVxLCB3aXRoCiAgKiBhdCBsZWFzdCBvbmUgYm9yZGVyIGluY2x1ZGVkLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdKTsKIH0KQEAgLTM0NCw3ICszNDMsOCBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWRwcmludGsoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAotCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkgPyAibG93IiA6ICJoaWdoIiwKKwkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpCisJCT8gImxvdyIgOiAiaGlnaCIsCiAJCShzcGVlZCAvIDEwMDApKTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwpAQCAtMzUyLDkgKzM1Miw5IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc3BlZWRzdGVwX2ZyZXFzKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CisJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2Niw3ICszNjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogc3BlZWRzdGVwX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpzcGVlZHN0ZXBfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTM5NiwxMyArMzk2LDE1IEBACiAJLyogZGV0ZWN0IHByb2Nlc3NvciAqLwogCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpOwogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGNhcGFibGUgcHJvY2Vzc29yIG5vdCBmb3VuZFxuIik7CisJCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgY2FwYWJsZSBwcm9jZXNzb3IgIgorCQkJCSJub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBkZXRlY3QgY2hpcHNldCAqLwogCWlmICghc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0KCkpIHsKLQkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBmb3IgdGhpcyBjaGlwc2V0IG5vdCAoeWV0KSBhdmFpbGFibGUuXG4iKTsKKwkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBmb3IgdGhpcyBjaGlwc2V0IG5vdCAiCisJCQkJIih5ZXQpIGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQzMSw5ICs0MzMsMTEgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzIHdpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCAiCisJCSJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzICIKKwkJIndpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChzcGVlZHN0ZXBfaW5pdCk7CiBtb2R1bGVfZXhpdChzcGVlZHN0ZXBfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwppbmRleCBjZGFjN2Q2Li4yZTNjNjg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKQEAgLTE2LDEyICsxNiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vdHNjLmg+CiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1saWIiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLWxpYiIsIG1zZykKKworI2RlZmluZSBQRlggInNwZWVkc3RlcC1saWI6ICIKIAogI2lmZGVmIENPTkZJR19YODZfU1BFRURTVEVQX1JFTEFYRURfQ0FQX0NIRUNLCi1zdGF0aWMgaW50IHJlbGF4ZWRfY2hlY2sgPSAwOworc3RhdGljIGludCByZWxheGVkX2NoZWNrOwogI2Vsc2UKICNkZWZpbmUgcmVsYXhlZF9jaGVjayAwCiAjZW5kaWYKQEAgLTMwLDE0ICszNCwxNCBAQAogICogICAgICAgICAgICAgICAgICAgR0VUIFBST0NFU1NPUiBDT1JFIFNQRUVEIElOIEtIWiAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtM19nZXRfZnJlcXVlbmN5ICh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQorc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtM19nZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCiB7Ci0gICAgICAgIC8qIFNlZSB0YWJsZSAxNCBvZiBwM19kcy5wZGYgYW5kIHRhYmxlIDIyIG9mIDI5ODM0MDAzLnBkZiAqLworCS8qIFNlZSB0YWJsZSAxNCBvZiBwM19kcy5wZGYgYW5kIHRhYmxlIDIyIG9mIDI5ODM0MDAzLnBkZiAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGludCByYXRpbzsJLyogRnJlcXVlbmN5IE11bHRpcGxpZXIgKHgxMCkgKi8KIAkJdTggYml0bWFwOwkJLyogcG93ZXIgb24gY29uZmlndXJhdGlvbiBiaXRzCiAJCQkJCVsyNywgMjU6MjJdIChpbiBNU1IgMHgyYSkgKi8KLQl9IG1zcl9kZWNvZGVfbXVsdCBbXSA9IHsKKwl9IG1zcl9kZWNvZGVfbXVsdFtdID0gewogCQl7IDMwLCAweDAxIH0sCiAJCXsgMzUsIDB4MDUgfSwKIAkJeyA0MCwgMHgwMiB9LApAQCAtNTIsNyArNTYsNyBAQAogCQl7IDg1LCAweDI2IH0sCiAJCXsgOTAsIDB4MjAgfSwKIAkJeyAxMDAsIDB4MmIgfSwKLQkJeyAwLCAweGZmIH0gICAgIC8qIGVycm9yIG9yIHVua25vd24gdmFsdWUgKi8KKwkJeyAwLCAweGZmIH0JLyogZXJyb3Igb3IgdW5rbm93biB2YWx1ZSAqLwogCX07CiAKIAkvKiBQSUlJKC1NKSBGU0Igc2V0dGluZ3M6IHNlZSB0YWJsZSBiMS1iIG9mIDI0NTQ3MjA2LnBkZiAqLwpAQCAtNjAsNyArNjQsNyBAQAogCQl1bnNpZ25lZCBpbnQgdmFsdWU7CS8qIEZyb250IFNpZGUgQnVzIHNwZWVkIGluIE1IeiAqLwogCQl1OCBiaXRtYXA7CQkvKiBwb3dlciBvbiBjb25maWd1cmF0aW9uIGJpdHMgWzE4OiAxOV0KIAkJCQkJKGluIE1TUiAweDJhKSAqLwotCX0gbXNyX2RlY29kZV9mc2IgW10gPSB7CisJfSBtc3JfZGVjb2RlX2ZzYltdID0gewogCQl7ICA2NiwgMHgwIH0sCiAJCXsgMTAwLCAweDIgfSwKIAkJeyAxMzMsIDB4MSB9LApAQCAtODUsNyArODksNyBAQAogCX0KIAogCS8qIGRlY29kZSB0aGUgbXVsdGlwbGllciAqLwotCWlmIChwcm9jZXNzb3IgPT0gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFkpIHsKKwlpZiAocHJvY2Vzc29yID09IFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZKSB7CiAJCWRwcmludGsoIndvcmthcm91bmQgZm9yIGVhcmx5IFBJSUlzXG4iKTsKIAkJbXNyX2xvICY9IDB4MDNjMDAwMDA7CiAJfSBlbHNlCkBAIC05Nyw5ICsxMDEsMTAgQEAKIAkJaisrOwogCX0KIAotCWRwcmludGsoInNwZWVkIGlzICV1XG4iLCAobXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDApKTsKKwlkcHJpbnRrKCJzcGVlZCBpcyAldVxuIiwKKwkJKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKSk7CiAKLQlyZXR1cm4gKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKTsKKwlyZXR1cm4gbXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDA7CiB9CiAKIApAQCAtMTEyLDIwICsxMTcsMjMgQEAKIAogCS8qIHNlZSB0YWJsZSBCLTIgb2YgMjQ1NDcyMTIucGRmICovCiAJaWYgKG1zcl9sbyAmIDB4MDAwNDAwMDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNwZWVkc3RlcC1saWI6IFBNIC0gaW52YWxpZCBGU0I6IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJQTSAtIGludmFsaWQgRlNCOiAweCV4IDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfdG1wKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJbXNyX3RtcCA9IChtc3JfbG8gPj4gMjIpICYgMHgxZjsKLQlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwgbXNyX3RtcCwgKG1zcl90bXAgKiAxMDAgKiAxMDAwKSk7CisJZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJCQltc3JfdG1wLCAobXNyX3RtcCAqIDEwMCAqIDEwMDApKTsKIAotCXJldHVybiAobXNyX3RtcCAqIDEwMCAqIDEwMDApOworCXJldHVybiBtc3JfdG1wICogMTAwICogMTAwMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtX2NvcmVfZ2V0X2ZyZXF1ZW5jeSh2b2lkKQogewogCXUzMiBmc2IgPSAwOwogCXUzMiBtc3JfbG8sIG1zcl90bXA7CisJaW50IHJldDsKIAogCXJkbXNyKE1TUl9GU0JfRlJFUSwgbXNyX2xvLCBtc3JfdG1wKTsKIAkvKiBzZWUgdGFibGUgQi0yIG9mIDI1MzY2OTIwLnBkZiAqLwpAQCAtMTUzLDEyICsxNjEsMTUgQEAKIAl9CiAKIAlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfdG1wKTsKLQlkcHJpbnRrKCJQQ09SRSAtIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX3RtcCk7CisJZHByaW50aygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLAorCQkJbXNyX2xvLCBtc3JfdG1wKTsKIAogCW1zcl90bXAgPSAobXNyX2xvID4+IDIyKSAmIDB4MWY7Ci0JZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsIG1zcl90bXAsIChtc3JfdG1wICogZnNiKSk7CisJZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJCQltc3JfdG1wLCAobXNyX3RtcCAqIGZzYikpOwogCi0JcmV0dXJuIChtc3JfdG1wICogZnNiKTsKKwlyZXQgPSAobXNyX3RtcCAqIGZzYik7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0xNjcsNiArMTc4LDE2IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CiAJdTMyIG1zcl9sbywgbXNyX2hpLCBtdWx0OwogCXVuc2lnbmVkIGludCBmc2IgPSAwOworCXVuc2lnbmVkIGludCByZXQ7CisJdTggZnNiX2NvZGU7CisKKwkvKiBQZW50aXVtIDQgTW9kZWwgMCBhbmQgMSBkbyBub3QgaGF2ZSB0aGUgQ29yZSBDbG9jayBGcmVxdWVuY3kKKwkgKiB0byBTeXN0ZW0gQnVzIEZyZXF1ZW5jeSBSYXRpbyBGaWVsZCBpbiB0aGUgUHJvY2Vzc29yIEZyZXF1ZW5jeQorCSAqIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgb2YgdGhlIE1TUi4gVGhlcmVmb3JlIHRoZSBjdXJyZW50CisJICogZnJlcXVlbmN5IGNhbm5vdCBiZSBjYWxjdWxhdGVkIGFuZCBoYXMgdG8gYmUgbWVhc3VyZWQuCisJICovCisJaWYgKGMtPng4Nl9tb2RlbCA8IDIpCisJCXJldHVybiBjcHVfa2h6OwogCiAJcmRtc3IoMHgyYywgbXNyX2xvLCBtc3JfaGkpOwogCkBAIC0xNzcsNjIgKzE5OCw2MSBAQAogCSAqIHJldmlzaW9uICMxMiBpbiBUYWJsZSBCLTE6IE1TUnMgaW4gdGhlIFBlbnRpdW0gNCBhbmQKIAkgKiBJbnRlbCBYZW9uIFByb2Nlc3NvcnMsIG9uIHBhZ2UgQi00IGFuZCBCLTUuCiAJICovCi0JaWYgKGMtPng4Nl9tb2RlbCA8IDIpCisJZnNiX2NvZGUgPSAobXNyX2xvID4+IDE2KSAmIDB4NzsKKwlzd2l0Y2ggKGZzYl9jb2RlKSB7CisJY2FzZSAwOgogCQlmc2IgPSAxMDAgKiAxMDAwOwotCWVsc2UgewotCQl1OCBmc2JfY29kZSA9IChtc3JfbG8gPj4gMTYpICYgMHg3OwotCQlzd2l0Y2ggKGZzYl9jb2RlKSB7Ci0JCWNhc2UgMDoKLQkJCWZzYiA9IDEwMCAqIDEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZnNiID0gMTMzMzMgKiAxMDsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlmc2IgPSAyMDAgKiAxMDAwOwotCQkJYnJlYWs7Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmc2IgPSAxMzMzMyAqIDEwOworCQlicmVhazsKKwljYXNlIDI6CisJCWZzYiA9IDIwMCAqIDEwMDA7CisJCWJyZWFrOwogCX0KIAogCWlmICghZnNiKQotCQlwcmludGsoS0VSTl9ERUJVRyAic3BlZWRzdGVwLWxpYjogY291bGRuJ3QgZGV0ZWN0IEZTQiBzcGVlZC4gUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxsaW51eEBicm9kby5kZT5cbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImNvdWxkbid0IGRldGVjdCBGU0Igc3BlZWQuICIKKwkJCQkiUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxsaW51eEBicm9kby5kZT5cbiIpOwogCiAJLyogTXVsdGlwbGllci4gKi8KIAltdWx0ID0gbXNyX2xvID4+IDI0OwogCi0JZHByaW50aygiUDQgLSBGU0IgJXUga0h6OyBNdWx0aXBsaWVyICV1OyBTcGVlZCAldSBrSHpcbiIsIGZzYiwgbXVsdCwgKGZzYiAqIG11bHQpKTsKKwlkcHJpbnRrKCJQNCAtIEZTQiAldSBrSHo7IE11bHRpcGxpZXIgJXU7IFNwZWVkICV1IGtIelxuIiwKKwkJCWZzYiwgbXVsdCwgKGZzYiAqIG11bHQpKTsKIAotCXJldHVybiAoZnNiICogbXVsdCk7CisJcmV0ID0gKGZzYiAqIG11bHQpOworCXJldHVybiByZXQ7CiB9CiAKIAotdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQordW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCiB7CiAJc3dpdGNoIChwcm9jZXNzb3IpIHsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUENPUkU6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BDT1JFOgogCQlyZXR1cm4gcGVudGl1bV9jb3JlX2dldF9mcmVxdWVuY3koKTsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUE06CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BNOgogCQlyZXR1cm4gcGVudGl1bU1fZ2V0X2ZyZXF1ZW5jeSgpOwotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQ6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TToKKwljYXNlIFNQRUVEU1RFUF9DUFVfUDREOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QNE06CiAJCXJldHVybiBwZW50aXVtNF9nZXRfZnJlcXVlbmN5KCk7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfVDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk6CiAJCXJldHVybiBwZW50aXVtM19nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSk7CitFWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSk7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIERFVEVDVCBTUEVFRFNURVAtQ0FQQUJMRSBQUk9DRVNTT1IgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yICh2b2lkKQordW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKHZvaWQpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCXUzMiBlYngsIG1zcl9sbywgbXNyX2hpOwpAQCAtMjYxLDcgKzI4MSw3IEBACiAJCQkgKiBzYW1wbGUgaGFzIGVieCA9IDB4MGYsIHByb2R1Y3Rpb24gaGFzIDB4MGUuCiAJCQkgKi8KIAkJCWlmICgoZWJ4ID09IDB4MGUpIHx8IChlYnggPT0gMHgwZikpCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1A0TTsKIAkJCWJyZWFrOwogCQljYXNlIDc6CiAJCQkvKgpAQCAtMjcyLDcgKzI5Miw3IEBACiAJCQkgKiBzYW1wbGVzIGFyZSBvbmx5IG9mIEItc3RlcHBpbmcuLi4KIAkJCSAqLwogCQkJaWYgKGVieCA9PSAweDBlKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QNE07CiAJCQlicmVhazsKIAkJY2FzZSA5OgogCQkJLyoKQEAgLTI4OCwxMCArMzA4LDEzIEBACiAJCQkgKiBNLVA0LU1zIG1heSBoYXZlIGVpdGhlciBlYng9MHhlIG9yIDB4ZiBbc2VlIGFib3ZlXQogCQkJICogTS1QNC81MzMgaGF2ZSBlaXRoZXIgZWJ4PTB4ZSBvciAweGYuIFsyNTMxNzYwNy5wZGZdCiAJCQkgKiBhbHNvLCBNLVA0TSBIVHMgaGF2ZSBlYng9MHg4LCB0b28KLQkJCSAqIEZvciBub3csIHRoZXkgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIG1vZGVsX2lkIHN0cmluZworCQkJICogRm9yIG5vdywgdGhleSBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbW9kZWxfaWQKKwkJCSAqIHN0cmluZwogCQkJICovCi0JCQlpZiAoKGVieCA9PSAweDBlKSB8fCAoc3Ryc3RyKGMtPng4Nl9tb2RlbF9pZCwiTW9iaWxlIEludGVsKFIpIFBlbnRpdW0oUikgNCIpICE9IE5VTEwpKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCWlmICgoZWJ4ID09IDB4MGUpIHx8CisJCQkJKHN0cnN0cihjLT54ODZfbW9kZWxfaWQsCisJCQkJICAgICJNb2JpbGUgSW50ZWwoUikgUGVudGl1bShSKSA0IikgIT0gTlVMTCkpCisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUDRNOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTMwMSw3ICszMjQsOCBAQAogCiAJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAljYXNlIDB4MEI6IC8qIEludGVsIFBJSUkgW1R1YWxhdGluXSAqLwotCQkvKiBjcHVpZF9lYngoMSkgaXMgMHgwNCBmb3IgZGVza3RvcCBQSUlJLCAweDA2IGZvciBtb2JpbGUgUElJSS1NICovCisJCS8qIGNwdWlkX2VieCgxKSBpcyAweDA0IGZvciBkZXNrdG9wIFBJSUksCisJCSAqIDB4MDYgZm9yIG1vYmlsZSBQSUlJLU0gKi8KIAkJZWJ4ID0gY3B1aWRfZWJ4KDB4MDAwMDAwMDEpOwogCQlkcHJpbnRrKCJlYnggaXMgJXhcbiIsIGVieCk7CiAKQEAgLTMxMywxNCArMzM3LDE1IEBACiAJCS8qIFNvIGZhciBhbGwgUElJSS1NIHByb2Nlc3NvcnMgc3VwcG9ydCBTcGVlZFN0ZXAuIFNlZQogCQkgKiBJbnRlbCdzIDI0NTQwNjQwLnBkZiBvZiBKdW5lIDIwMDMKIAkJICovCi0JCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDsKKwkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9UOwogCiAJY2FzZSAweDA4OiAvKiBJbnRlbCBQSUlJIFtDb3BwZXJtaW5lXSAqLwogCiAJCS8qIGFsbCBtb2JpbGUgUElJSSBDb3BwZXJtaW5lcyBoYXZlIEZTQiAxMDAgTUh6CiAJCSAqID09PiBzb3J0IG91dCBhIGZldyBkZXNrdG9wIFBJSUlzLiAqLwogCQlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfaGkpOwotCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiBpcyAweCV4LCAweCV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CisJCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OIGlzIDB4JXgsIDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfaGkpOwogCQltc3JfbG8gJj0gMHgwMGMwMDAwOwogCQlpZiAobXNyX2xvICE9IDB4MDA4MDAwMCkKIAkJCXJldHVybiAwOwpAQCAtMzMyLDEzICszNTcsMTUgQEAKIAkJICogYml0IDU2IG9yIDU3IGlzIHNldAogCQkgKi8KIAkJcmRtc3IoTVNSX0lBMzJfUExBVEZPUk1fSUQsIG1zcl9sbywgbXNyX2hpKTsKLQkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwgbXNyX2xvLCBtc3JfaGkpOwotCQlpZiAoKG1zcl9oaSAmICgxPDwxOCkpICYmIChyZWxheGVkX2NoZWNrID8gMSA6IChtc3JfaGkgJiAoMzw8MjQpKSkpIHsKKwkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwKKwkJCQltc3JfbG8sIG1zcl9oaSk7CisJCWlmICgobXNyX2hpICYgKDE8PDE4KSkgJiYKKwkJICAgIChyZWxheGVkX2NoZWNrID8gMSA6IChtc3JfaGkgJiAoMzw8MjQpKSkpIHsKIAkJCWlmIChjLT54ODZfbWFzayA9PSAweDAxKSB7CiAJCQkJZHByaW50aygiZWFybHkgUElJSSB2ZXJzaW9uXG4iKTsKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk7CisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOwogCQkJfSBlbHNlCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1BJSUlfQzsKIAkJfQogCiAJZGVmYXVsdDoKQEAgLTM2OSw3ICszOTYsNyBAQAogCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgYm90aCBzcGVlZHNcbiIpOwogCiAJLyogZ2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlwcmV2X3NwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CisJcHJldl9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCFwcmV2X3NwZWVkKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMzc5LDcgKzQwNiw3IEBACiAKIAkvKiBzd2l0Y2ggdG8gbG93IHN0YXRlICovCiAJc2V0X3N0YXRlKFNQRUVEU1RFUF9MT1cpOwotCSpsb3dfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kocHJvY2Vzc29yKTsKKwkqbG93X3NwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlpZiAoISpsb3dfc3BlZWQpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CkBAIC0zOTgsNyArNDI1LDcgQEAKIAlpZiAodHJhbnNpdGlvbl9sYXRlbmN5KQogCQlkb19nZXR0aW1lb2ZkYXkoJnR2Mik7CiAKLQkqaGlnaF9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShwcm9jZXNzb3IpOworCSpoaWdoX3NwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlpZiAoISpoaWdoX3NwZWVkKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtNDI2LDkgKzQ1MywxMiBAQAogCQkvKiBjaGVjayBpZiB0aGUgbGF0ZW5jeSBtZWFzdXJlbWVudCBpcyB0b28gaGlnaCBvciB0b28gbG93CiAJCSAqIGFuZCBzZXQgaXQgdG8gYSBzYWZlIHZhbHVlICg1MDB1U2VjKSBpbiB0aGF0IGNhc2UKIAkJICovCi0JCWlmICgqdHJhbnNpdGlvbl9sYXRlbmN5ID4gMTAwMDAwMDAgfHwgKnRyYW5zaXRpb25fbGF0ZW5jeSA8IDUwMDAwKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAic3BlZWRzdGVwOiBmcmVxdWVuY3kgdHJhbnNpdGlvbiBtZWFzdXJlZCBzZWVtcyBvdXQgb2YgIgotCQkJCQkicmFuZ2UgKCV1IG5TZWMpLCBmYWxsaW5nIGJhY2sgdG8gYSBzYWZlIG9uZSBvZiAldSBuU2VjLlxuIiwKKwkJaWYgKCp0cmFuc2l0aW9uX2xhdGVuY3kgPiAxMDAwMDAwMCB8fAorCQkgICAgKnRyYW5zaXRpb25fbGF0ZW5jeSA8IDUwMDAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiZnJlcXVlbmN5IHRyYW5zaXRpb24gIgorCQkJCQkibWVhc3VyZWQgc2VlbXMgb3V0IG9mIHJhbmdlICgldSAiCisJCQkJCSJuU2VjKSwgZmFsbGluZyBiYWNrIHRvIGEgc2FmZSBvbmUgb2YiCisJCQkJCSIldSBuU2VjLlxuIiwKIAkJCQkJKnRyYW5zaXRpb25fbGF0ZW5jeSwgNTAwMDAwKTsKIAkJCSp0cmFuc2l0aW9uX2xhdGVuY3kgPSA1MDAwMDA7CiAJCX0KQEAgLTQzNiwxNSArNDY2LDE2IEBACiAKIG91dDoKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X2ZyZXFzKTsKIAogI2lmZGVmIENPTkZJR19YODZfU1BFRURTVEVQX1JFTEFYRURfQ0FQX0NIRUNLCiBtb2R1bGVfcGFyYW0ocmVsYXhlZF9jaGVjaywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocmVsYXhlZF9jaGVjaywgIkRvbid0IGRvIGFsbCBjaGVja3MgZm9yIHNwZWVkc3RlcCBjYXBhYmlsaXR5LiIpOworTU9EVUxFX1BBUk1fREVTQyhyZWxheGVkX2NoZWNrLAorCQkiRG9uJ3QgZG8gYWxsIGNoZWNrcyBmb3Igc3BlZWRzdGVwIGNhcGFiaWxpdHkuIik7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkxpYnJhcnkgZm9yIEludGVsIFNwZWVkU3RlcCAxIG9yIDIgY3B1ZnJlcSBkcml2ZXJzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGlicmFyeSBmb3IgSW50ZWwgU3BlZWRTdGVwIDEgb3IgMiBjcHVmcmVxIGRyaXZlcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaAppbmRleCBiMTFiY2M2Li4yYjZjMDRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKQEAgLTEyLDE3ICsxMiwxNyBAQAogCiAvKiBwcm9jZXNzb3JzICovCiAKLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFkJMHgwMDAwMDAwMSAgLyogQ29wcGVybWluZSBjb3JlICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DCQkweDAwMDAwMDAyICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1QJCTB4MDAwMDAwMDMgIC8qIFR1YWxhdGluIGNvcmUgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QNE0JCQkweDAwMDAwMDA0ICAvKiBQNC1NICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWQkweDAwMDAwMDAxICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QSUlJX0MJCTB4MDAwMDAwMDIgIC8qIENvcHBlcm1pbmUgY29yZSAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BJSUlfVAkJMHgwMDAwMDAwMyAgLyogVHVhbGF0aW4gY29yZSAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1A0TQkJMHgwMDAwMDAwNCAgLyogUDQtTSAgKi8KIAogLyogdGhlIGZvbGxvd2luZyBwcm9jZXNzb3JzIGFyZSBub3Qgc3BlZWRzdGVwLWNhcGFibGUgYW5kIGFyZSBub3QgYXV0by1kZXRlY3RlZAogICogaW4gc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKS4gSG93ZXZlciwgdGhlaXIgc3BlZWQgY2FuIGJlIGRldGVjdGVkIHVzaW5nCi0gKiB0aGUgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KCkgY2FsbC4gKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QTQkJCTB4RkZGRkZGMDMgIC8qIFBlbnRpdW0gTSAgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQJCQkweEZGRkZGRjA0ICAvKiBkZXNrdG9wIFA0ICAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFCQkweEZGRkZGRjA1ICAvKiBDb3JlICovCisgKiB0aGUgc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koKSBjYWxsLiAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BNCQkweEZGRkZGRjAzICAvKiBQZW50aXVtIE0gICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUDRECQkweEZGRkZGRjA0ICAvKiBkZXNrdG9wIFA0ICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BDT1JFCQkweEZGRkZGRjA1ICAvKiBDb3JlICovCiAKIC8qIHNwZWVkc3RlcCBzdGF0ZXMgLS0gb25seSB0d28gb2YgdGhlbSAqLwogCkBAIC0zNCw3ICszNCw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yICh2b2lkKTsKIAogLyogZGV0ZWN0IHRoZSBjdXJyZW50IHNwZWVkIChpbiBraHopIG9mIHRoZSBwcm9jZXNzb3IgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKTsKIAogCiAvKiBkZXRlY3QgdGhlIGxvdyBhbmQgaGlnaCBzcGVlZHMgb2YgdGhlIHByb2Nlc3Nvci4gVGhlIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYwppbmRleCA4YTg1YzkzLi5iZWZlYTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vaXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKQEAgLTMwLDEyICszMCwxMiBAQAogICogSWYgdXNlciBnaXZlcyBpdCwgdGhlc2UgYXJlIHVzZWQuCiAgKgogICovCi1zdGF0aWMgaW50IHNtaV9wb3J0ID0gMDsKLXN0YXRpYyBpbnQgc21pX2NtZCA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHNtaV9zaWcgPSAwOworc3RhdGljIGludCBzbWlfcG9ydDsKK3N0YXRpYyBpbnQgc21pX2NtZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc21pX3NpZzsKIAogLyogaW5mbyBhYm91dCB0aGUgcHJvY2Vzc29yICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yOwogCiAvKgogICogVGhlcmUgYXJlIG9ubHkgdHdvIGZyZXF1ZW5jeSBzdGF0ZXMgZm9yIGVhY2ggcHJvY2Vzc29yLiBWYWx1ZXMKQEAgLTU2LDEyICs1NiwxMyBAQAogICogb2YgRE1BIGFjdGl2aXR5IGdvaW5nIG9uPyAqLwogI2RlZmluZSBTTUlfVFJJRVMgNQogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1zbWkiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLXNtaSIsIG1zZykKIAogLyoqCiAgKiBzcGVlZHN0ZXBfc21pX293bmVyc2hpcAogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX293bmVyc2hpcCh2b2lkKQogewogCXUzMiBjb21tYW5kLCByZXN1bHQsIG1hZ2ljLCBkdW1teTsKIAl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX09XTkVSOwpAQCAtNzAsMTYgKzcxLDE4IEBACiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCW1hZ2ljID0gdmlydF90b19waHlzKG1hZ2ljX2RhdGEpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIG9idGFpbiBvd25lcnNoaXAgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gb2J0YWluIG93bmVyc2hpcCB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwkJCWNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkicG9wICUlZWJwXG4iCi0JCTogIj1EIiAocmVzdWx0KSwgIj1hIiAoZHVtbXkpLCAiPWIiIChkdW1teSksICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLAotCQkJIj1TIiAoZHVtbXkpCisJCTogIj1EIiAocmVzdWx0KSwKKwkJICAiPWEiIChkdW1teSksICI9YiIgKGR1bW15KSwgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksCisJCSAgIj1TIiAoZHVtbXkpCiAJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLAotCQkJIkQiICgwKSwgIlMiIChtYWdpYykKKwkJICAiRCIgKDApLCAiUyIgKG1hZ2ljKQogCQk6ICJtZW1vcnkiCiAJKTsKIApAQCAtOTcsMTAgKzEwMCwxMCBAQAogICogZXZlbiBoYW5ncyBbY2YuIGJ1Z21lLm9zZGwub3JnICMgMTQyMl0gb24gZWFybGllciBzeXN0ZW1zLiBFbXBpcmljYWwgdGVzdGluZwogICogc2hvd3MgdGhhdCB0aGUgbGF0dGVyIG9jY3VycyBpZiAhKGlzdF9pbmZvLmV2ZW50ICYgMHhGRkZGKS4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcyAodW5zaWduZWQgaW50ICpsb3csIHVuc2lnbmVkIGludCAqaGlnaCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXModW5zaWduZWQgaW50ICpsb3csIHVuc2lnbmVkIGludCAqaGlnaCkKIHsKIAl1MzIgY29tbWFuZCwgcmVzdWx0ID0gMCwgZWRpLCBoaWdoX21oeiwgbG93X21oeiwgZHVtbXk7Ci0JdTMyIHN0YXRlPTA7CisJdTMyIHN0YXRlID0gMDsKIAl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX0ZSRVFTOwogCiAJaWYgKCEoaXN0X2luZm8uZXZlbnQgJiAweEZGRkYpKSB7CkBAIC0xMTAsMTcgKzExMywyNSBAQAogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOworCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgZnJlcXVlbmNpZXMgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJCQljb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJInB1c2ggJSVlYnBcbiIKIAkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJInBvcCAlJWVicCIKLQkJOiAiPWEiIChyZXN1bHQpLCAiPWIiIChoaWdoX21oeiksICI9YyIgKGxvd19taHopLCAiPWQiIChzdGF0ZSksICI9RCIgKGVkaSksICI9UyIgKGR1bW15KQotCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKHN0YXRlKSwgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKKwkJOiAiPWEiIChyZXN1bHQpLAorCQkgICI9YiIgKGhpZ2hfbWh6KSwKKwkJICAiPWMiIChsb3dfbWh6KSwKKwkJICAiPWQiIChzdGF0ZSksICI9RCIgKGVkaSksICI9UyIgKGR1bW15KQorCQk6ICJhIiAoY29tbWFuZCksCisJCSAgImIiIChmdW5jdGlvbiksCisJCSAgImMiIChzdGF0ZSksCisJCSAgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkpOwogCi0JZHByaW50aygicmVzdWx0ICV4LCBsb3dfZnJlcSAldSwgaGlnaF9mcmVxICV1XG4iLCByZXN1bHQsIGxvd19taHosIGhpZ2hfbWh6KTsKKwlkcHJpbnRrKCJyZXN1bHQgJXgsIGxvd19mcmVxICV1LCBoaWdoX2ZyZXEgJXVcbiIsCisJCQlyZXN1bHQsIGxvd19taHosIGhpZ2hfbWh6KTsKIAogCS8qIGFib3J0IGlmIHJlc3VsdHMgYXJlIG9idmlvdXNseSBpbmNvcnJlY3QuLi4gKi8KIAlpZiAoKGhpZ2hfbWh6ICsgbG93X21oeikgPCA2MDApCkBAIC0xMzcsMjYgKzE0OCwzMCBAQAogICogQHN0YXRlOiBwcm9jZXNzb3IgZnJlcXVlbmN5IHN0YXRlIChTUEVFRFNURVBfTE9XIG9yIFNQRUVEU1RFUF9ISUdIKQogICoKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfZ2V0X3N0YXRlICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfZ2V0X3N0YXRlKHZvaWQpCiB7Ci0JdTMyIGZ1bmN0aW9uPUdFVF9TUEVFRFNURVBfU1RBVEU7CisJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9TVEFURTsKIAl1MzIgcmVzdWx0LCBzdGF0ZSwgZWRpLCBjb21tYW5kLCBkdW1teTsKIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgY3VycmVudCBzZXR0aW5nIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBjdXJyZW50IHNldHRpbmcgd2l0aCBjb21tYW5kICV4ICIKKwkJImF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkicG9wICUlZWJwXG4iCi0JCTogIj1hIiAocmVzdWx0KSwgIj1iIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCi0JCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCTogIj1hIiAocmVzdWx0KSwKKwkJICAiPWIiIChzdGF0ZSksICI9RCIgKGVkaSksCisJCSAgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQorCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLAorCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAogCWRwcmludGsoInN0YXRlIGlzICV4LCByZXN1bHQgaXMgJXhcbiIsIHN0YXRlLCByZXN1bHQpOwogCi0JcmV0dXJuIChzdGF0ZSAmIDEpOworCXJldHVybiBzdGF0ZSAmIDE7CiB9CiAKIApAQCAtMTY1LDExICsxODAsMTEgQEAKICAqIEBzdGF0ZTogbmV3IHByb2Nlc3NvciBmcmVxdWVuY3kgc3RhdGUgKFNQRUVEU1RFUF9MT1cgb3IgU1BFRURTVEVQX0hJR0gpCiAgKgogICovCi1zdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlICh1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlKHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMCwgY29tbWFuZCwgbmV3X3N0YXRlLCBkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBmdW5jdGlvbj1TRVRfU1BFRURTVEVQX1NUQVRFOworCXVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFNFVF9TUEVFRFNURVBfU1RBVEU7CiAJdW5zaWduZWQgaW50IHJldHJ5ID0gMDsKIAogCWlmIChzdGF0ZSA+IDB4MSkKQEAgLTE4MCwxMSArMTk1LDE0IEBACiAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgc3RhdGUsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSAiCisJCSJ3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwkJc3RhdGUsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCWRvIHsKIAkJaWYgKHJldHJ5KSB7Ci0JCQlkcHJpbnRrKCJyZXRyeSAldSwgcHJldmlvdXMgcmVzdWx0ICV1LCB3YWl0aW5nLi4uXG4iLCByZXRyeSwgcmVzdWx0KTsKKwkJCWRwcmludGsoInJldHJ5ICV1LCBwcmV2aW91cyByZXN1bHQgJXUsIHdhaXRpbmcuLi5cbiIsCisJCQkJCXJldHJ5LCByZXN1bHQpOwogCQkJbWRlbGF5KHJldHJ5ICogNTApOwogCQl9CiAJCXJldHJ5Kys7CkBAIC0xOTIsMjAgKzIxMCwyNiBAQAogCQkJInB1c2ggJSVlYnBcbiIKIAkJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCQkicG9wICUlZWJwIgotCQkJOiAiPWIiIChuZXdfc3RhdGUpLCAiPUQiIChyZXN1bHQpLCAiPWMiIChkdW1teSksICI9YSIgKGR1bW15KSwKLQkJCQkiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQotCQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCQk6ICI9YiIgKG5ld19zdGF0ZSksICI9RCIgKHJlc3VsdCksCisJCQkgICI9YyIgKGR1bW15KSwgIj1hIiAoZHVtbXkpLAorCQkJICAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQorCQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksCisJCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJCQkpOwogCX0gd2hpbGUgKChuZXdfc3RhdGUgIT0gc3RhdGUpICYmIChyZXRyeSA8PSBTTUlfVFJJRVMpKTsKIAogCS8qIGVuYWJsZSBJUlFzICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JaWYgKG5ld19zdGF0ZSA9PSBzdGF0ZSkgewotCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZCBhZnRlciAldSB0cmllcyB3aXRoIHJlc3VsdCAldVxuIiwgKHNwZWVkc3RlcF9mcmVxc1tuZXdfc3RhdGVdLmZyZXF1ZW5jeSAvIDEwMDApLCByZXRyeSwgcmVzdWx0KTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSB0byBzdGF0ZSAldSBmYWlsZWQgd2l0aCBuZXdfc3RhdGUgJXUgYW5kIHJlc3VsdCAldVxuIiwgc3RhdGUsIG5ld19zdGF0ZSwgcmVzdWx0KTsKLQl9CisJaWYgKG5ld19zdGF0ZSA9PSBzdGF0ZSkKKwkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWQgYWZ0ZXIgJXUgdHJpZXMgIgorCQkJIndpdGggcmVzdWx0ICV1XG4iLAorCQkJKHNwZWVkc3RlcF9mcmVxc1tuZXdfc3RhdGVdLmZyZXF1ZW5jeSAvIDEwMDApLAorCQkJcmV0cnksIHJlc3VsdCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSB0byBzdGF0ZSAldSAiCisJCQkiZmFpbGVkIHdpdGggbmV3X3N0YXRlICV1IGFuZCByZXN1bHQgJXVcbiIsCisJCQlzdGF0ZSwgbmV3X3N0YXRlLCByZXN1bHQpOwogCiAJcmV0dXJuOwogfQpAQCAtMjE5LDEzICsyNDMsMTQgQEAKICAqCiAgKiBTZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5L2ZyZXEuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQl1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gc3BlZWRzdGVwX2ZyZXFzW3NwZWVkc3RlcF9nZXRfc3RhdGUoKV0uZnJlcXVlbmN5OwpAQCAtMjUwLDcgKzI3NSw3IEBACiAgKiBMaW1pdCBtdXN0IGJlIHdpdGhpbiBzcGVlZHN0ZXBfbG93X2ZyZXEgYW5kIHNwZWVkc3RlcF9oaWdoX2ZyZXEsIHdpdGgKICAqIGF0IGxlYXN0IG9uZSBib3JkZXIgaW5jbHVkZWQuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0pOwogfQpAQCAtMjU5LDcgKzI4NCw4IEBACiBzdGF0aWMgaW50IHNwZWVkc3RlcF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlpbnQgcmVzdWx0OwotCXVuc2lnbmVkIGludCBzcGVlZCxzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgc3BlZWQsIHN0YXRlOworCXVuc2lnbmVkIGludCAqbG93LCAqaGlnaDsKIAogCS8qIGNhcGFiaWxpdHkgY2hlY2sgKi8KIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKQEAgLTI3MiwxOSArMjk4LDIzIEBACiAJfQogCiAJLyogZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY3kgKi8KLQlyZXN1bHQgPSBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcygmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSwKLQkJCQkmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3kpOworCWxvdyA9ICZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5OworCWhpZ2ggPSAmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3k7CisKKwlyZXN1bHQgPSBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcyhsb3csIGhpZ2gpOwogCWlmIChyZXN1bHQpIHsKLQkJLyogZmFsbCBiYWNrIHRvIHNwZWVkc3RlcF9saWIuYyBkZWN0aW9uIG1lY2hhbmlzbTogdHJ5IGJvdGggc3RhdGVzIG91dCAqLwotCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY2llcyBieSBTTUkgY2FsbC5cbiIpOworCQkvKiBmYWxsIGJhY2sgdG8gc3BlZWRzdGVwX2xpYi5jIGRlY3Rpb24gbWVjaGFuaXNtOgorCQkgKiB0cnkgYm90aCBzdGF0ZXMgb3V0ICovCisJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgbG93IGFuZCBoaWdoIGZyZXF1ZW5jaWVzICIKKwkJCQkiYnkgU01JIGNhbGwuXG4iKTsKIAkJcmVzdWx0ID0gc3BlZWRzdGVwX2dldF9mcmVxcyhzcGVlZHN0ZXBfcHJvY2Vzc29yLAotCQkJCSZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5LAotCQkJCSZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0hJR0hdLmZyZXF1ZW5jeSwKKwkJCQlsb3csIGhpZ2gsCiAJCQkJTlVMTCwKIAkJCQkmc3BlZWRzdGVwX3NldF9zdGF0ZSk7CiAKIAkJaWYgKHJlc3VsdCkgewotCQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCB0d28gZGlmZmVyZW50IHNwZWVkcyAtLSBhYm9ydGluZy5cbiIpOworCQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCB0d28gZGlmZmVyZW50IHNwZWVkcyIKKwkJCQkJIiAtLSBhYm9ydGluZy5cbiIpOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfSBlbHNlCiAJCQlkcHJpbnRrKCJ3b3JrYXJvdW5kIHdvcmtlZC5cbiIpOwpAQCAtMjk1LDcgKzMyNSw4IEBACiAJc3BlZWQgPSBzcGVlZHN0ZXBfZnJlcXNbc3RhdGVdLmZyZXF1ZW5jeTsKIAogCWRwcmludGsoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAotCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkgPyAibG93IiA6ICJoaWdoIiwKKwkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpCisJCT8gImxvdyIgOiAiaGlnaCIsCiAJCShzcGVlZCAvIDEwMDApKTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwpAQCAtMzA0LDcgKzMzNSw3IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc3BlZWRzdGVwX2ZyZXFzKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzcGVlZHN0ZXBfZnJlcXMsIHBvbGljeS0+Y3B1KTsKIApAQCAtMzIxLDcgKzM1Miw3IEBACiB7CiAJaWYgKGNwdSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKKwlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CiB9CiAKIApAQCAtMzM1LDcgKzM2Niw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNwZWVkc3RlcF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqc3BlZWRzdGVwX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0zNjQsMjEgKzM5NSwyMyBAQAogCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpOwogCiAJc3dpdGNoIChzcGVlZHN0ZXBfcHJvY2Vzc29yKSB7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfVDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOwogCX0KIAogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrICgiTm8gc3VwcG9ydGVkIEludGVsIENQVSBkZXRlY3RlZC5cbiIpOworCQlkcHJpbnRrKCJObyBzdXBwb3J0ZWQgSW50ZWwgQ1BVIGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRwcmludGsoInNpZ25hdHVyZToweCUuOGx4LCBjb21tYW5kOjB4JS44bHgsIGV2ZW50OjB4JS44bHgsIHBlcmZfbGV2ZWw6MHglLjhseC5cbiIsCi0JCWlzdF9pbmZvLnNpZ25hdHVyZSwgaXN0X2luZm8uY29tbWFuZCwgaXN0X2luZm8uZXZlbnQsIGlzdF9pbmZvLnBlcmZfbGV2ZWwpOworCWRwcmludGsoInNpZ25hdHVyZToweCUuOGx4LCBjb21tYW5kOjB4JS44bHgsICIKKwkJImV2ZW50OjB4JS44bHgsIHBlcmZfbGV2ZWw6MHglLjhseC5cbiIsCisJCWlzdF9pbmZvLnNpZ25hdHVyZSwgaXN0X2luZm8uY29tbWFuZCwKKwkJaXN0X2luZm8uZXZlbnQsIGlzdF9pbmZvLnBlcmZfbGV2ZWwpOwogCiAJLyogRXJyb3IgaWYgbm8gSVNULVNNSSBCSU9TIG9yIG5vIFBBUk0KIAkJIHNpZz0gJ0lTR0UnIGFrYSAnSW50ZWwgU3BlZWRzdGVwIEdhdGUgRScgKi8KQEAgLTQxNiwxNyArNDQ5LDIwIEBACiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmc3BlZWRzdGVwX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9wYXJhbShzbWlfcG9ydCwgIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0oc21pX2NtZCwgICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHNtaV9zaWcsICB1aW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfcG9ydCwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfY21kLCAgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfc2lnLCB1aW50LCAwNDQ0KTsKIAotTU9EVUxFX1BBUk1fREVTQyhzbWlfcG9ydCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBwb3J0IHdpdGggdGhpcyB2YWx1ZSAtLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweGIyIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHNtaV9jbWQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgY29tbWFuZCB3aXRoIHRoaXMgdmFsdWUgLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHg4MiIpOwotTU9EVUxFX1BBUk1fREVTQyhzbWlfc2lnLCAiU2V0IHRvIDEgdG8gZmFrZSB0aGUgSVNUIHNpZ25hdHVyZSB3aGVuIHVzaW5nIHRoZSBTTUkgaW50ZXJmYWNlLiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfcG9ydCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBwb3J0IHdpdGggdGhpcyB2YWx1ZSAiCisJCSItLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweGIyIik7CitNT0RVTEVfUEFSTV9ERVNDKHNtaV9jbWQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgY29tbWFuZCB3aXRoIHRoaXMgdmFsdWUgIgorCQkiLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHg4MiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfc2lnLCAiU2V0IHRvIDEgdG8gZmFrZSB0aGUgSVNUIHNpZ25hdHVyZSB3aGVuIHVzaW5nIHRoZSAiCisJCSJTTUkgaW50ZXJmYWNlLiIpOwogCi1NT0RVTEVfQVVUSE9SICgiSGlyb3NoaSBNaXVyYSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiU3BlZWRzdGVwIGRyaXZlciBmb3IgSVNUIGFwcGxldCBTTUkgaW50ZXJmYWNlLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhpcm9zaGkgTWl1cmEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3BlZWRzdGVwIGRyaXZlciBmb3IgSVNUIGFwcGxldCBTTUkgaW50ZXJmYWNlLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChzcGVlZHN0ZXBfaW5pdCk7CiBtb2R1bGVfZXhpdChzcGVlZHN0ZXBfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggMjRmZjI2YS4uNWZmZjAwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKQEAgLTU2LDExICs1NywxNiBAQAogCiAJLyoKIAkgKiBjLT54ODZfcG93ZXIgaXMgODAwMF8wMDA3IGVkeC4gQml0IDggaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZQotCSAqIHdpdGggUC9UIHN0YXRlcyBhbmQgZG9lcyBub3Qgc3RvcCBpbiBkZWVwIEMtc3RhdGVzCisJICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuCisJICoKKwkgKiBJdCBpcyBhbHNvIHJlbGlhYmxlIGFjcm9zcyBjb3JlcyBhbmQgc29ja2V0cy4gKGJ1dCBub3QgYWNyb3NzCisJICogY2FiaW5ldHMgLSB3ZSB0dXJuIGl0IG9mZiBpbiB0aGF0IGNhc2UgZXhwbGljaXRseS4pCiAJICovCiAJaWYgKGMtPng4Nl9wb3dlciAmICgxIDw8IDgpKSB7CiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7CiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKTsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKKwkJc2NoZWRfY2xvY2tfc3RhYmxlID0gMTsKIAl9CiAKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKaW5kZXggMWM4MzgwMy4uZmU3OTk4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKQEAgLTI5NSwxMSArMjk1LDExIEBACiAJCSAqIElmIHdlIGtub3cgdGhhdCB0aGUgZXJyb3Igd2FzIGluIHVzZXIgc3BhY2UsIHNlbmQgYQogCQkgKiBTSUdCVVMuICBPdGhlcndpc2UsIHBhbmljIGlmIHRvbGVyYW5jZSBpcyBsb3cuCiAJCSAqCi0JCSAqIGRvX2V4aXQoKSB0YWtlcyBhbiBhd2Z1bCBsb3Qgb2YgbG9ja3MgYW5kIGhhcyBhIHNsaWdodAorCQkgKiBmb3JjZV9zaWcoKSB0YWtlcyBhbiBhd2Z1bCBsb3Qgb2YgbG9ja3MgYW5kIGhhcyBhIHNsaWdodAogCQkgKiByaXNrIG9mIGRlYWRsb2NraW5nLgogCQkgKi8KIAkJaWYgKHVzZXJfc3BhY2UpIHsKLQkJCWRvX2V4aXQoU0lHQlVTKTsKKwkJCWZvcmNlX3NpZyhTSUdCVVMsIGN1cnJlbnQpOwogCQl9IGVsc2UgaWYgKHBhbmljX29uX29vcHMgfHwgdG9sZXJhbnQgPCAyKSB7CiAJCQltY2VfcGFuaWMoIlVuY29ycmVjdGVkIG1hY2hpbmUgY2hlY2siLAogCQkJCSZwYW5pY20sIG1jZXN0YXJ0KTsKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBtY2VfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3N0YXRpYyB2b2lkIG1jZV9jcHVfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXN3aXRjaCAoYy0+eDg2X3ZlbmRvcikgewogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKQEAgLTczNCw2ICs3MzQsNyBAQAogc3RhdGljIGludCBtY2VfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7CiAJbWNlX2luaXQoTlVMTCk7CisJbWNlX2NwdV9mZWF0dXJlcygmY3VycmVudF9jcHVfZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwppbmRleCA4YWU4YzRmLi5mMmVlMGFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIH0KIAogLyogY3B1IGluaXQgZW50cnkgcG9pbnQsIGNhbGxlZCBmcm9tIG1jZS5jIHdpdGggcHJlZW1wdCBvZmYgKi8KLXZvaWQgX19jcHVpbml0IG1jZV9hbWRfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3ZvaWQgbWNlX2FtZF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXVuc2lnbmVkIGludCBiYW5rLCBibG9jazsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwppbmRleCA0YjQ4ZjI1Li5mNDRjMzY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwpAQCAtMzAsNyArMzAsNyBAQAogCWlycV9leGl0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbnRlbF9pbml0X3RoZXJtYWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHZvaWQgaW50ZWxfaW5pdF90aGVybWFsKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1MzIgbCwgaDsKIAlpbnQgdG0yID0gMDsKQEAgLTg0LDcgKzg0LDcgQEAKIAlyZXR1cm47CiB9CiAKLXZvaWQgX19jcHVpbml0IG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQordm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlpbnRlbF9pbml0X3RoZXJtYWwoYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHMuYyBiL2FyY2gveDg2L2tlcm5lbC9kcy5jCmluZGV4IDE2OWExMjAuLjg3YjY3ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kcy5jCkBAIC03MjksNyArNzI5LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzX2xvY2ssIGlycSk7CiAKLQlkc193cml0ZV9jb25maWcodHJhY2VyLT5kcy5jb250ZXh0LCAmdHJhY2VyLT50cmFjZS5kcywgZHNfYnRzKTsKKwlkc193cml0ZV9jb25maWcodHJhY2VyLT5kcy5jb250ZXh0LCAmdHJhY2VyLT50cmFjZS5kcywgZHNfcGVicyk7CiAJZHNfcmVzdW1lX3BlYnModHJhY2VyKTsKIAogCXJldHVybiB0cmFjZXI7CkBAIC0xMDI5LDUgKzEwMjksNCBAQAogCiB2b2lkIGRzX2V4aXRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCVdBUk5fT04odHNrLT50aHJlYWQuZHNfY3R4KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwppbmRleCAxMTE5ZDI0Li5lYjFlZjNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCkBAIC00NjcsNyArNDY3LDcgQEAKIAllZmlfbWVtb3J5X2Rlc2NfdCAqbWQ7CiAJZWZpX3N0YXR1c190IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdTY0IGVuZCwgc3lzdGFiLCBhZGRyLCBucGFnZXM7CisJdTY0IGVuZCwgc3lzdGFiLCBhZGRyLCBucGFnZXMsIGVuZF9wZm47CiAJdm9pZCAqcCwgKnZhOwogCiAJZWZpLnN5c3RhYiA9IE5VTEw7CkBAIC00NzksNyArNDc5LDEwIEBACiAJCXNpemUgPSBtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUOwogCQllbmQgPSBtZC0+cGh5c19hZGRyICsgc2l6ZTsKIAotCQlpZiAoUEZOX1VQKGVuZCkgPD0gbWF4X2xvd19wZm5fbWFwcGVkKQorCQllbmRfcGZuID0gUEZOX1VQKGVuZCk7CisJCWlmIChlbmRfcGZuIDw9IG1heF9sb3dfcGZuX21hcHBlZAorCQkgICAgfHwgKGVuZF9wZm4gPiAoMVVMIDw8ICgzMiAtIFBBR0VfU0hJRlQpKQorCQkJJiYgZW5kX3BmbiA8PSBtYXhfcGZuX21hcHBlZCkpCiAJCQl2YSA9IF9fdmEobWQtPnBoeXNfYWRkcik7CiAJCWVsc2UKIAkJCXZhID0gZWZpX2lvcmVtYXAobWQtPnBoeXNfYWRkciwgc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpXzY0LmMKaW5kZXggNjUyYzUyOC4uY2I3ODNiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmlfNjQuYwpAQCAtOTksMjQgKzk5LDExIEBACiAKIHZvaWQgX19pb21lbSAqX19pbml0IGVmaV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIHBhZ2VzX21hcHBlZCBfX2luaXRkYXRhOwotCXVuc2lnbmVkIGksIHBhZ2VzOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbGFzdF9tYXBfcGZuOwogCi0JcGFnZXMgPSBQRk5fVVAocGh5c19hZGRyICsgc2l6ZSkgLSBQRk5fRE9XTihwaHlzX2FkZHIpOwotCW9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7Ci0JcGh5c19hZGRyICY9IFBBR0VfTUFTSzsKLQotCWlmIChwYWdlc19tYXBwZWQgKyBwYWdlcyA+IE1BWF9FRklfSU9fUEFHRVMpCisJbGFzdF9tYXBfcGZuID0gaW5pdF9tZW1vcnlfbWFwcGluZyhwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOworCWlmICgobGFzdF9tYXBfcGZuIDw8IFBBR0VfU0hJRlQpIDwgcGh5c19hZGRyICsgc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykgewotCQlfX3NldF9maXhtYXAoRklYX0VGSV9JT19NQVBfRklSU1RfUEFHRSAtIHBhZ2VzX21hcHBlZCwKLQkJCSAgICAgcGh5c19hZGRyLCBQQUdFX0tFUk5FTCk7Ci0JCXBoeXNfYWRkciArPSBQQUdFX1NJWkU7Ci0JCXBhZ2VzX21hcHBlZCsrOwotCX0KLQotCXJldHVybiAodm9pZCBfX2lvbWVtICopX19maXhfdG9fdmlydChGSVhfRUZJX0lPX01BUF9GSVJTVF9QQUdFIC0gXAotCQkJCQkgICAgIChwYWdlc19tYXBwZWQgLSBwYWdlcykpICsgb2Zmc2V0OworCXJldHVybiAodm9pZCBfX2lvbWVtICopX192YShwaHlzX2FkZHIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggMzg4MjU0Zi4uNjQ4YjNhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC04MCw2ICs4MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYm9vdF9ocGV0X2Rpc2FibGU7CiBpbnQgaHBldF9mb3JjZV91c2VyOworc3RhdGljIGludCBocGV0X3ZlcmJvc2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGhwZXRfc2V0dXAoY2hhciAqc3RyKQogewpAQCAtODgsNiArODksOCBAQAogCQkJYm9vdF9ocGV0X2Rpc2FibGUgPSAxOwogCQlpZiAoIXN0cm5jbXAoImZvcmNlIiwgc3RyLCA1KSkKIAkJCWhwZXRfZm9yY2VfdXNlciA9IDE7CisJCWlmICghc3RybmNtcCgidmVyYm9zZSIsIHN0ciwgNykpCisJCQlocGV0X3ZlcmJvc2UgPSAxOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTExOSw2ICsxMjIsNDMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzX2hwZXRfZW5hYmxlZCk7CiAKK3N0YXRpYyB2b2lkIF9ocGV0X3ByaW50X2NvbmZpZyhjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IGxpbmUpCit7CisJdTMyIGksIHRpbWVycywgbCwgaDsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiAlcyglZCk6XG4iLCBmdW5jdGlvbiwgbGluZSk7CisJbCA9IGhwZXRfcmVhZGwoSFBFVF9JRCk7CisJaCA9IGhwZXRfcmVhZGwoSFBFVF9QRVJJT0QpOworCXRpbWVycyA9ICgobCAmIEhQRVRfSURfTlVNQkVSKSA+PiBIUEVUX0lEX05VTUJFUl9TSElGVCkgKyAxOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IElEOiAweCV4LCBQRVJJT0Q6IDB4JXhcbiIsIGwsIGgpOworCWwgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKKwloID0gaHBldF9yZWFkbChIUEVUX1NUQVRVUyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogQ0ZHOiAweCV4LCBTVEFUVVM6IDB4JXhcbiIsIGwsIGgpOworCWwgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CisJaCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKzQpOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IENPVU5URVJfbDogMHgleCwgQ09VTlRFUl9oOiAweCV4XG4iLCBsLCBoKTsKKworCWZvciAoaSA9IDA7IGkgPCB0aW1lcnM7IGkrKykgeworCQlsID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhpKSk7CisJCWggPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGkpKzQpOworCQlwcmludGsoS0VSTl9JTkZPICJocGV0OiBUJWQ6IENGR19sOiAweCV4LCBDRkdfaDogMHgleFxuIiwKKwkJICAgICAgIGksIGwsIGgpOworCQlsID0gaHBldF9yZWFkbChIUEVUX1RuX0NNUChpKSk7CisJCWggPSBocGV0X3JlYWRsKEhQRVRfVG5fQ01QKGkpKzQpOworCQlwcmludGsoS0VSTl9JTkZPICJocGV0OiBUJWQ6IENNUF9sOiAweCV4LCBDTVBfaDogMHgleFxuIiwKKwkJICAgICAgIGksIGwsIGgpOworCQlsID0gaHBldF9yZWFkbChIUEVUX1RuX1JPVVRFKGkpKTsKKwkJaCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9ST1VURShpKSs0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogVCVkIFJPVVRFX2w6IDB4JXgsIFJPVVRFX2g6IDB4JXhcbiIsCisJCSAgICAgICBpLCBsLCBoKTsKKwl9Cit9CisKKyNkZWZpbmUgaHBldF9wcmludF9jb25maWcoKQkJCQkJXAorZG8gewkJCQkJCQkJXAorCWlmIChocGV0X3ZlcmJvc2UpCQkJCQlcCisJCV9ocGV0X3ByaW50X2NvbmZpZyhfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsJXAorfSB3aGlsZSAoMCkKKwogLyoKICAqIFdoZW4gdGhlIGhwZXQgZHJpdmVyICgvZGV2L2hwZXQpIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gcmVzZXJ2ZQogICogdGltZXIgMCBhbmQgdGltZXIgMSBpbiBjYXNlIG9mIFJUQyBlbXVsYXRpb24uCkBAIC0xOTEsMjcgKzIzMSwzNyBAQAogCS5yYXRpbmcJCT0gNTAsCiB9OwogCi1zdGF0aWMgdm9pZCBocGV0X3N0YXJ0X2NvdW50ZXIodm9pZCkKK3N0YXRpYyB2b2lkIGhwZXRfc3RvcF9jb3VudGVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKLQogCWNmZyAmPSB+SFBFVF9DRkdfRU5BQkxFOwogCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOwogCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUik7CiAJaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSICsgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGhwZXRfc3RhcnRfY291bnRlcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2ZnID0gaHBldF9yZWFkbChIUEVUX0NGRyk7CiAJY2ZnIHw9IEhQRVRfQ0ZHX0VOQUJMRTsKIAlocGV0X3dyaXRlbChjZmcsIEhQRVRfQ0ZHKTsKIH0KIAorc3RhdGljIHZvaWQgaHBldF9yZXN0YXJ0X2NvdW50ZXIodm9pZCkKK3sKKwlocGV0X3N0b3BfY291bnRlcigpOworCWhwZXRfc3RhcnRfY291bnRlcigpOworfQorCiBzdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9kZXZpY2Uodm9pZCkKIHsKIAlmb3JjZV9ocGV0X3Jlc3VtZSgpOwogfQogCi1zdGF0aWMgdm9pZCBocGV0X3Jlc3RhcnRfY291bnRlcih2b2lkKQorc3RhdGljIHZvaWQgaHBldF9yZXN1bWVfY291bnRlcih2b2lkKQogewogCWhwZXRfcmVzdW1lX2RldmljZSgpOwotCWhwZXRfc3RhcnRfY291bnRlcigpOworCWhwZXRfcmVzdGFydF9jb3VudGVyKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwZXRfZW5hYmxlX2xlZ2FjeV9pbnQodm9pZCkKQEAgLTI1OSwyNyArMzA5LDIzIEBACiBzdGF0aWMgdm9pZCBocGV0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQsIGludCB0aW1lcikKIHsKLQl1bnNpZ25lZCBsb25nIGNmZywgY21wLCBub3c7CisJdW5zaWduZWQgbG9uZyBjZmc7CiAJdWludDY0X3QgZGVsdGE7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlocGV0X3N0b3BfY291bnRlcigpOwogCQlkZWx0YSA9ICgodWludDY0X3QpKE5TRUNfUEVSX1NFQy9IWikpICogZXZ0LT5tdWx0OwogCQlkZWx0YSA+Pj0gZXZ0LT5zaGlmdDsKLQkJbm93ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCQljbXAgPSBub3cgKyAodW5zaWduZWQgbG9uZykgZGVsdGE7CiAJCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcodGltZXIpKTsKKwkJLyogTWFrZSBzdXJlIHdlIHVzZSBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzICovCisJCWNmZyAmPSB+SFBFVF9UTl9MRVZFTDsKIAkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl9QRVJJT0RJQyB8CiAJCSAgICAgICBIUEVUX1ROX1NFVFZBTCB8IEhQRVRfVE5fMzJCSVQ7CiAJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcodGltZXIpKTsKLQkJLyoKLQkJICogVGhlIGZpcnN0IHdyaXRlIGFmdGVyIHdyaXRpbmcgVE5fU0VUVkFMIHRvIHRoZQotCQkgKiBjb25maWcgcmVnaXN0ZXIgc2V0cyB0aGUgY291bnRlciB2YWx1ZSwgdGhlIHNlY29uZAotCQkgKiB3cml0ZSBzZXRzIHRoZSBwZXJpb2QuCi0JCSAqLwotCQlocGV0X3dyaXRlbChjbXAsIEhQRVRfVG5fQ01QKHRpbWVyKSk7Ci0JCXVkZWxheSgxKTsKIAkJaHBldF93cml0ZWwoKHVuc2lnbmVkIGxvbmcpIGRlbHRhLCBIUEVUX1RuX0NNUCh0aW1lcikpOworCQlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKKwkJaHBldF9wcmludF9jb25maWcoKTsKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CkBAIC0zMDYsNiArMzUyLDcgQEAKIAkJCWlycV9zZXRfYWZmaW5pdHkoaGRldi0+aXJxLCBjcHVtYXNrX29mKGhkZXYtPmNwdSkpOwogCQkJZW5hYmxlX2lycShoZGV2LT5pcnEpOwogCQl9CisJCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTUyNCw2ICs1NzEsNyBAQAogCiAJbnVtX3RpbWVycyA9ICgoaWQgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpOwogCW51bV90aW1lcnMrKzsgLyogVmFsdWUgcmVhZCBvdXQgc3RhcnRzIGZyb20gMCAqLworCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAKIAlocGV0X2RldnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHBldF9kZXYpICogbnVtX3RpbWVycywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFocGV0X2RldnMpCkBAIC02OTMsNyArNzQxLDcgQEAKIAkubWFzawkJPSBIUEVUX01BU0ssCiAJLnNoaWZ0CQk9IEhQRVRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAotCS5yZXN1bWUJCT0gaHBldF9yZXN0YXJ0X2NvdW50ZXIsCisJLnJlc3VtZQkJPSBocGV0X3Jlc3VtZV9jb3VudGVyLAogI2lmZGVmIENPTkZJR19YODZfNjQKIAkudnJlYWQJCT0gdnJlYWRfaHBldCwKICNlbmRpZgpAQCAtNzA1LDcgKzc1Myw3IEBACiAJY3ljbGVfdCB0MTsKIAogCS8qIFN0YXJ0IHRoZSBjb3VudGVyICovCi0JaHBldF9zdGFydF9jb3VudGVyKCk7CisJaHBldF9yZXN0YXJ0X2NvdW50ZXIoKTsKIAogCS8qIFZlcmlmeSB3aGV0aGVyIGhwZXQgY291bnRlciB3b3JrcyAqLwogCXQxID0gcmVhZF9ocGV0KCk7CkBAIC03OTEsNiArODM5LDcgQEAKIAkgKiBpbmZvcm1hdGlvbiBhbmQgdGhlIG51bWJlciBvZiBjaGFubmVscwogCSAqLwogCWlkID0gaHBldF9yZWFkbChIUEVUX0lEKTsKKwlocGV0X3ByaW50X2NvbmZpZygpOwogCiAjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKIAkvKgpAQCAtODQzLDYgKzg5Miw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaHBldF9yZXNlcnZlX3BsYXRmb3JtX3RpbWVycyhocGV0X3JlYWRsKEhQRVRfSUQpKTsKKwlocGV0X3ByaW50X2NvbmZpZygpOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaHBldF9jcHVocF9ub3RpZnkoTlVMTCwgQ1BVX09OTElORSwgKHZvaWQgKikobG9uZyljcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2kzODcuYyBiL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKaW5kZXggYjBmNjFmMC4uZjJmODU0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2kzODcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCkBAIC0xMzYsNyArMTM2LDcgQEAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJaWYgKCFIQVZFX0hXRlApIHsKIAkJbWVtc2V0KHRzay0+dGhyZWFkLnhzdGF0ZSwgMCwgeHN0YXRlX3NpemUpOwotCQlmaW5pdCgpOworCQlmaW5pdF90YXNrKHRzayk7CiAJCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0c2spOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCBlOTQ4YjI4Li40NTU4ZGQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTE5Myw2ICsxOTMsOSBAQAogCWtwcm9iZV9vcGNvZGVfdCBvcGNvZGU7CiAJa3Byb2JlX29wY29kZV90ICpvcmlnX29wY29kZXMgPSBvcGNvZGVzOwogCisJaWYgKHNlYXJjaF9leGNlcHRpb25fdGFibGVzKG9wY29kZXMpKQorCQlyZXR1cm4gMDsJLyogUGFnZSBmYXVsdCBtYXkgb2NjdXIgb24gdGhpcyBhZGRyZXNzLiAqLworCiByZXRyeToKIAlpZiAob3Bjb2RlcyAtIG9yaWdfb3Bjb2RlcyA+IE1BWF9JTlNOX1NJWkUgLSAxKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9vbHBjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvb2xwYy5jCmluZGV4IDdhMTNmYWMuLjQwMDZjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9vbHBjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL29scGMuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcGxhdGZvcm1fZGV0ZWN0KHZvaWQpCiB7CiAJLyogc3RvcGdhcCB1bnRpbCBPRlcgc3VwcG9ydCBpcyBhZGRlZCB0byB0aGUga2VybmVsICovCi0Jb2xwY19wbGF0Zm9ybV9pbmZvLmJvYXJkcmV2ID0gMHhjMjsKKwlvbHBjX3BsYXRmb3JtX2luZm8uYm9hcmRyZXYgPSBvbHBjX2JvYXJkKDB4YzIpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggZTRjOGZiNi4uYzY1MjBhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTI2OCw2ICsyNjgsMzIgQEAKIAlyZXR1cm4gX19nZXRfY3B1X3ZhcihwYXJhdmlydF9sYXp5X21vZGUpOwogfQogCit2b2lkIGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSh2b2lkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCisJaWYgKHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX01NVSkgeworCQlXQVJOX09OKHByZWVtcHRfY291bnQoKSA9PSAxKTsKKwkJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CisJCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOworCX0KKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3ZvaWQgYXJjaF9mbHVzaF9sYXp5X2NwdV9tb2RlKHZvaWQpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwlpZiAocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpID09IFBBUkFWSVJUX0xBWllfQ1BVKSB7CisJCVdBUk5fT04ocHJlZW1wdF9jb3VudCgpID09IDEpOworCQlhcmNoX2xlYXZlX2xhenlfY3B1X21vZGUoKTsKKwkJYXJjaF9lbnRlcl9sYXp5X2NwdV9tb2RlKCk7CisJfQorCisJcHJlZW1wdF9lbmFibGUoKTsKK30KKwogc3RydWN0IHB2X2luZm8gcHZfaW5mbyA9IHsKIAkubmFtZSA9ICJiYXJlIGhhcmR3YXJlIiwKIAkucGFyYXZpcnRfZW5hYmxlZCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCBhNTQ2ZjU1Li5iZDRkYTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTEwNCw5ICsxMDQsNiBAQAogCQkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJCQlybWIoKTsKIAotCQkJaWYgKHJjdV9wZW5kaW5nKGNwdSkpCi0JCQkJcmN1X2NoZWNrX2NhbGxiYWNrcyhjcHUsIDApOwotCiAJCQlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkKIAkJCQlwbGF5X2RlYWQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDBhNWRmNWYuLjA2Y2EwN2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTgxMCwxMiArODEwLDE2IEBACiAKIHN0YXRpYyB2b2lkIHB0cmFjZV9idHNfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0JaWYgKHVubGlrZWx5KGNoaWxkLT5idHMpKSB7Ci0JCWRzX3JlbGVhc2VfYnRzKGNoaWxkLT5idHMpOwotCQljaGlsZC0+YnRzID0gTlVMTDsKLQotCQlwdHJhY2VfYnRzX2ZyZWVfYnVmZmVyKGNoaWxkKTsKLQl9CisJLyoKKwkgKiBQdHJhY2VfZGV0YWNoKCkgcmFjZXMgd2l0aCBwdHJhY2VfdW50cmFjZSgpIGluIGNhc2UKKwkgKiB0aGUgY2hpbGQgZGllcyBhbmQgaXMgcmVhcGVkIGJ5IGFub3RoZXIgdGhyZWFkLgorCSAqCisJICogV2Ugb25seSBkbyB0aGUgbWVtb3J5IGFjY291bnRpbmcgYXQgdGhpcyBwb2ludCBhbmQKKwkgKiBsZWF2ZSB0aGUgYnVmZmVyIGRlYWxsb2NhdGlvbiBhbmQgdGhlIGJ0cyB0cmFjZXIKKwkgKiByZWxlYXNlIHRvIHB0cmFjZV9idHNfdW50cmFjZSgpIHdoaWNoIHdpbGwgYmUgY2FsbGVkCisJICogbGF0ZXIgb24gd2l0aCB0YXNrbGlzdF9sb2NrIGhlbGQuCisJICovCisJcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGNoaWxkLT5idHNfYnVmZmVyLCBjaGlsZC0+YnRzX3NpemUpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdHJhY2VfYnRzX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHt9CkBAIC0xMzg0LDcgKzEzODgsNyBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKICMgZGVmaW5lIElTX0lBMzIJMQogI2VsaWYgZGVmaW5lZCBDT05GSUdfSUEzMl9FTVVMQVRJT04KLSMgZGVmaW5lIElTX0lBMzIJdGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikKKyMgZGVmaW5lIElTX0lBMzIJaXNfY29tcGF0X3Rhc2soKQogI2Vsc2UKICMgZGVmaW5lIElTX0lBMzIJMAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKaW5kZXggMzA5OTQ5ZS4uNjk3ZDFiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwpAQCAtMTcyLDcgKzE3Miw4IEBACiAJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfNywKIAkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwotCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzYTE2LAkvKiBJQ0gxMCAqLworCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqY2FjaGVkX2RldjsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDJiNDZlYjQuLjQ1MjZiM2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTIxNyw2ICsyMTcsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgQ29tcGFxIiksCiAJCX0sCiAJfSwKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBEZWxsIFhQUzcxMCAqLworCQkuY2FsbGJhY2sgPSBzZXRfYmlvc19yZWJvb3QsCisJCS5pZGVudCA9ICJEZWxsIFhQUzcxMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkRlbGwgWFBTNzEwIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggYzQ2MWY2ZC4uNmE4ODExYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTc3MCw2ICs3NzAsOSBAQAogCiAJZmluaXNoX2U4MjBfcGFyc2luZygpOwogCisJaWYgKGVmaV9lbmFibGVkKQorCQllZmlfaW5pdCgpOworCiAJZG1pX3NjYW5fbWFjaGluZSgpOwogCiAJZG1pX2NoZWNrX3N5c3RlbShiYWRfYmlvc19kbWlfdGFibGUpOwpAQCAtNzg5LDggKzc5Miw2IEBACiAJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmRhdGFfcmVzb3VyY2UpOwogCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZic3NfcmVzb3VyY2UpOwogCi0JaWYgKGVmaV9lbmFibGVkKQotCQllZmlfaW5pdCgpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmIChwcHJvX3dpdGhfcmFtX2J1ZygpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC94ODYva2VybmVsL3RpbWVfNjQuYwppbmRleCBlNmU2OTVhLi4yNDFlYzM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lXzY0LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwID0gewogCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9JUlFQT0xMIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfSVJRUE9MTCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RJTUVSLAogCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gInRpbWVyIgogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggNzkzMjMzOC4uYTllNzU0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTk5LDYgKzk5LDEyIEBACiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNvbmRpdGlvbmFsX2NsaShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAocmVncy0+ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlZW1wdF9jb25kaXRpb25hbF9jbGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKQEAgLTYyNiw4ICs2MzIsMTAgQEAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIGRlYnVnX3ZtODY6CisJLyogcmVlbmFibGUgcHJlZW1wdGlvbjogaGFuZGxlX3ZtODZfdHJhcCgpIG1pZ2h0IHNsZWVwICovCisJZGVjX3ByZWVtcHRfY291bnQoKTsKIAloYW5kbGVfdm04Nl90cmFwKChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqKSByZWdzLCBlcnJvcl9jb2RlLCAxKTsKLQlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKKwljb25kaXRpb25hbF9jbGkocmVncyk7CiAJcmV0dXJuOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwppbmRleCA1OTllNTgxLi4wOGFmYTE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC0xNywyMCArMTcsMjEgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogCi11bnNpZ25lZCBpbnQgY3B1X2toejsgICAgICAgICAgIC8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovCit1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBjcHVfa2h6OwkvKiBUU0MgY2xvY2tzIC8gdXNlYywgbm90IHVzZWQgaGVyZSAqLwogRVhQT1JUX1NZTUJPTChjcHVfa2h6KTsKLXVuc2lnbmVkIGludCB0c2Nfa2h6OworCit1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSB0c2Nfa2h6OwogRVhQT1JUX1NZTUJPTCh0c2Nfa2h6KTsKIAogLyoKICAqIFRTQyBjYW4gYmUgdW5zdGFibGUgZHVlIHRvIGNwdWZyZXEgb3IgZHVlIHRvIHVuc3luY2VkIFRTQ3MKICAqLwotc3RhdGljIGludCB0c2NfdW5zdGFibGU7CitzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgdHNjX3Vuc3RhYmxlOwogCiAvKiBuYXRpdmVfc2NoZWRfY2xvY2soKSBpcyBjYWxsZWQgYmVmb3JlIHRzY19pbml0KCksIHNvCiAgICB3ZSBtdXN0IHN0YXJ0IHdpdGggdGhlIFRTQyBzb2Z0IGRpc2FibGVkIHRvIHByZXZlbnQKICAgIGVycm9uZW91cyByZHRzYyB1c2FnZSBvbiAhY3B1X2hhc190c2MgcHJvY2Vzc29ycyAqLwotc3RhdGljIGludCB0c2NfZGlzYWJsZWQgPSAtMTsKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0c2NfZGlzYWJsZWQgPSAtMTsKIAogc3RhdGljIGludCB0c2NfY2xvY2tzb3VyY2VfcmVsaWFibGU7CiAvKgpAQCAtMjczLDMwICsyNzQsNDMgQEAKICAqIHVzZSB0aGUgVFNDIHZhbHVlIGF0IHRoZSB0cmFuc2l0aW9ucyB0byBjYWxjdWxhdGUgYSBwcmV0dHkKICAqIGdvb2QgdmFsdWUgZm9yIHRoZSBUU0MgZnJlcXVlbmN0eS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgcGl0X2V4cGVjdF9tc2IodW5zaWduZWQgY2hhciB2YWwpCitzdGF0aWMgaW5saW5lIGludCBwaXRfZXhwZWN0X21zYih1bnNpZ25lZCBjaGFyIHZhbCwgdTY0ICp0c2NwLCB1bnNpZ25lZCBsb25nICpkZWx0YXApCiB7Ci0JaW50IGNvdW50ID0gMDsKKwlpbnQgY291bnQ7CisJdTY0IHRzYyA9IDA7CiAKIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCA1MDAwMDsgY291bnQrKykgewogCQkvKiBJZ25vcmUgTFNCICovCiAJCWluYigweDQyKTsKIAkJaWYgKGluYigweDQyKSAhPSB2YWwpCiAJCQlicmVhazsKKwkJdHNjID0gZ2V0X2N5Y2xlcygpOwogCX0KLQlyZXR1cm4gY291bnQgPiA1MDsKKwkqZGVsdGFwID0gZ2V0X2N5Y2xlcygpIC0gdHNjOworCSp0c2NwID0gdHNjOworCisJLyoKKwkgKiBXZSByZXF1aXJlIF9zb21lXyBzdWNjZXNzLCBidXQgdGhlIHF1YWxpdHkgY29udHJvbAorCSAqIHdpbGwgYmUgYmFzZWQgb24gdGhlIGVycm9yIHRlcm1zIG9uIHRoZSBUU0MgdmFsdWVzLgorCSAqLworCXJldHVybiBjb3VudCA+IDU7CiB9CiAKIC8qCi0gKiBIb3cgbWFueSBNU0IgdmFsdWVzIGRvIHdlIHdhbnQgdG8gc2VlPyBXZSBhaW0gZm9yIGEKLSAqIDE1bXMgY2FsaWJyYXRpb24sIHdoaWNoIGFzc3VtaW5nIGEgMnVzIGNvdW50ZXIgcmVhZAotICogZXJyb3Igc2hvdWxkIGdpdmUgdXMgcm91Z2hseSAxNTAgcHBtIHByZWNpc2lvbiBmb3IKLSAqIHRoZSBjYWxpYnJhdGlvbi4KKyAqIEhvdyBtYW55IE1TQiB2YWx1ZXMgZG8gd2Ugd2FudCB0byBzZWU/IFdlIGFpbSBmb3IKKyAqIGEgbWF4aW11bSBlcnJvciByYXRlIG9mIDUwMHBwbSAoaW4gcHJhY3RpY2UgdGhlCisgKiByZWFsIGVycm9yIGlzIG11Y2ggc21hbGxlciksIGJ1dCByZWZ1c2UgdG8gc3BlbmQKKyAqIG1vcmUgdGhhbiAyNW1zIG9uIGl0LgogICovCi0jZGVmaW5lIFFVSUNLX1BJVF9NUyAxNQotI2RlZmluZSBRVUlDS19QSVRfSVRFUkFUSU9OUyAoUVVJQ0tfUElUX01TICogUElUX1RJQ0tfUkFURSAvIDEwMDAgLyAyNTYpCisjZGVmaW5lIE1BWF9RVUlDS19QSVRfTVMgMjUKKyNkZWZpbmUgTUFYX1FVSUNLX1BJVF9JVEVSQVRJT05TIChNQVhfUVVJQ0tfUElUX01TICogUElUX1RJQ0tfUkFURSAvIDEwMDAgLyAyNTYpCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWNrX3BpdF9jYWxpYnJhdGUodm9pZCkKIHsKKwlpbnQgaTsKKwl1NjQgdHNjLCBkZWx0YTsKKwl1bnNpZ25lZCBsb25nIGQxLCBkMjsKKwogCS8qIFNldCB0aGUgR2F0ZSBoaWdoLCBkaXNhYmxlIHNwZWFrZXIgKi8KIAlvdXRiKChpbmIoMHg2MSkgJiB+MHgwMikgfCAweDAxLCAweDYxKTsKIApAQCAtMzE1LDQ1ICszMjksNTIgQEAKIAlvdXRiKDB4ZmYsIDB4NDIpOwogCW91dGIoMHhmZiwgMHg0Mik7CiAKLQlpZiAocGl0X2V4cGVjdF9tc2IoMHhmZikpIHsKLQkJaW50IGk7Ci0JCXU2NCB0MSwgdDIsIGRlbHRhOwotCQl1bnNpZ25lZCBjaGFyIGV4cGVjdCA9IDB4ZmU7CisJLyoKKwkgKiBUaGUgUElUIHN0YXJ0cyBjb3VudGluZyBhdCB0aGUgbmV4dCBlZGdlLCBzbyB3ZQorCSAqIG5lZWQgdG8gZGVsYXkgZm9yIGEgbWljcm9zZWNvbmQuIFRoZSBlYXNpZXN0IHdheQorCSAqIHRvIGRvIHRoYXQgaXMgdG8ganVzdCByZWFkIGJhY2sgdGhlIDE2LWJpdCBjb3VudGVyCisJICogb25jZSBmcm9tIHRoZSBQSVQuCisJICovCisJaW5iKDB4NDIpOworCWluYigweDQyKTsKIAotCQl0MSA9IGdldF9jeWNsZXMoKTsKLQkJZm9yIChpID0gMDsgaSA8IFFVSUNLX1BJVF9JVEVSQVRJT05TOyBpKyssIGV4cGVjdC0tKSB7Ci0JCQlpZiAoIXBpdF9leHBlY3RfbXNiKGV4cGVjdCkpCi0JCQkJZ290byBmYWlsZWQ7CisJaWYgKHBpdF9leHBlY3RfbXNiKDB4ZmYsICZ0c2MsICZkMSkpIHsKKwkJZm9yIChpID0gMTsgaSA8PSBNQVhfUVVJQ0tfUElUX0lURVJBVElPTlM7IGkrKykgeworCQkJaWYgKCFwaXRfZXhwZWN0X21zYigweGZmLWksICZkZWx0YSwgJmQyKSkKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIEl0ZXJhdGUgdW50aWwgdGhlIGVycm9yIGlzIGxlc3MgdGhhbiA1MDAgcHBtCisJCQkgKi8KKwkJCWRlbHRhIC09IHRzYzsKKwkJCWlmIChkMStkMiA8IGRlbHRhID4+IDExKQorCQkJCWdvdG8gc3VjY2VzczsKIAkJfQotCQl0MiA9IGdldF9jeWNsZXMoKTsKLQotCQkvKgotCQkgKiBNYWtlIHN1cmUgd2UgY2FuIHJlbHkgb24gdGhlIHNlY29uZCBUU0MgdGltZXN0YW1wOgotCQkgKi8KLQkJaWYgKCFwaXRfZXhwZWN0X21zYihleHBlY3QpKQotCQkJZ290byBmYWlsZWQ7Ci0KLQkJLyoKLQkJICogT2ssIGlmIHdlIGdldCBoZXJlLCB0aGVuIHdlJ3ZlIHNlZW4gdGhlCi0JCSAqIE1TQiBvZiB0aGUgUElUIGRlY3JlbWVudCBRVUlDS19QSVRfSVRFUkFUSU9OUwotCQkgKiB0aW1lcywgYW5kIGVhY2ggTVNCIGhhZCBtYW55IGhpdHMsIHNvIHdlIG5ldmVyCi0JCSAqIGhhZCBhbnkgc3VkZGVuIGp1bXBzLgotCQkgKgotCQkgKiBBcyBhIHJlc3VsdCwgd2UgY2FuIGRlcGVuZCBvbiB0aGVyZSBub3QgYmVpbmcKLQkJICogYW55IG9kZCBkZWxheXMgYW55d2hlcmUsIGFuZCB0aGUgVFNDIHJlYWRzIGFyZQotCQkgKiByZWxpYWJsZS4KLQkJICoKLQkJICoga0h6ID0gdGlja3MgLyB0aW1lLWluLXNlY29uZHMgLyAxMDAwOwotCQkgKiBrSHogPSAodDIgLSB0MSkgLyAoUVBJICogMjU2IC8gUElUX1RJQ0tfUkFURSkgLyAxMDAwCi0JCSAqIGtIeiA9ICgodDIgLSB0MSkgKiBQSVRfVElDS19SQVRFKSAvIChRUEkgKiAyNTYgKiAxMDAwKQotCQkgKi8KLQkJZGVsdGEgPSAodDIgLSB0MSkqUElUX1RJQ0tfUkFURTsKLQkJZG9fZGl2KGRlbHRhLCBRVUlDS19QSVRfSVRFUkFUSU9OUyoyNTYqMTAwMCk7Ci0JCXByaW50aygiRmFzdCBUU0MgY2FsaWJyYXRpb24gdXNpbmcgUElUXG4iKTsKLQkJcmV0dXJuIGRlbHRhOwogCX0KLWZhaWxlZDoKKwlwcmludGsoIkZhc3QgVFNDIGNhbGlicmF0aW9uIGZhaWxlZFxuIik7CiAJcmV0dXJuIDA7CisKK3N1Y2Nlc3M6CisJLyoKKwkgKiBPaywgaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UndmUgc2VlbiB0aGUKKwkgKiBNU0Igb2YgdGhlIFBJVCBkZWNyZW1lbnQgJ2knIHRpbWVzLCBhbmQgdGhlCisJICogZXJyb3IgaGFzIHNocnVuayB0byBsZXNzIHRoYW4gNTAwIHBwbS4KKwkgKgorCSAqIEFzIGEgcmVzdWx0LCB3ZSBjYW4gZGVwZW5kIG9uIHRoZXJlIG5vdCBiZWluZworCSAqIGFueSBvZGQgZGVsYXlzIGFueXdoZXJlLCBhbmQgdGhlIFRTQyByZWFkcyBhcmUKKwkgKiByZWxpYWJsZSAod2l0aGluIHRoZSBlcnJvcikuIFdlIGFsc28gYWRqdXN0IHRoZQorCSAqIGRlbHRhIHRvIHRoZSBtaWRkbGUgb2YgdGhlIGVycm9yIGJhcnMsIGp1c3QKKwkgKiBiZWNhdXNlIGl0IGxvb2tzIG5pY2VyLgorCSAqCisJICoga0h6ID0gdGlja3MgLyB0aW1lLWluLXNlY29uZHMgLyAxMDAwOworCSAqIGtIeiA9ICh0MiAtIHQxKSAvIChJICogMjU2IC8gUElUX1RJQ0tfUkFURSkgLyAxMDAwCisJICoga0h6ID0gKCh0MiAtIHQxKSAqIFBJVF9USUNLX1JBVEUpIC8gKEkgKiAyNTYgKiAxMDAwKQorCSAqLworCWRlbHRhICs9IChsb25nKShkMiAtIGQxKS8yOworCWRlbHRhICo9IFBJVF9USUNLX1JBVEU7CisJZG9fZGl2KGRlbHRhLCBpKjI1NioxMDAwKTsKKwlwcmludGsoIkZhc3QgVFNDIGNhbGlicmF0aW9uIHVzaW5nIFBJVFxuIik7CisJcmV0dXJuIGRlbHRhOwogfQogCiAvKioKQEAgLTUyMyw4ICs1NDQsNiBAQAogCXJldHVybiB0c2NfcGl0X21pbjsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qIE9ubHkgY2FsbGVkIGZyb20gdGhlIFBvd2Vybm93IEs3IGNwdSBmcmVxIGRyaXZlciAqLwogaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCkKIHsKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNTQ2LDcgKzU2NSw2IEBACiAKIEVYUE9SVF9TWU1CT0wocmVjYWxpYnJhdGVfY3B1X2toeik7CiAKLSNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKIC8qIEFjY2VsZXJhdG9ycyBmb3Igc2NoZWRfY2xvY2soKQogICogY29udmVydCBmcm9tIGN5Y2xlcyg2NGJpdHMpID0+IG5hbm9zZWNvbmRzICg2NGJpdHMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCmluZGV4IGM0YzFmOWUuLmU1YjA4OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHZtaV9jbG9ja19hY3Rpb24gID0gewogCS5uYW1lIAkJPSAidm1pLXRpbWVyIiwKIAkuaGFuZGxlciAJPSB2bWlfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyAJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcsCisJLmZsYWdzIAkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfVElNRVIsCiAJLm1hc2sgCQk9IENQVV9NQVNLX0FMTCwKIH07CiAKQEAgLTI4MywxMCArMjgzLDEzIEBACiAjZW5kaWYKIAogLyoqIHZtaSBjbG9ja3NvdXJjZSAqLworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV92bWk7CiAKIHN0YXRpYyBjeWNsZV90IHJlYWRfcmVhbF9jeWNsZXModm9pZCkKIHsKLQlyZXR1cm4gdm1pX3RpbWVyX29wcy5nZXRfY3ljbGVfY291bnRlcihWTUlfQ1lDTEVTX1JFQUwpOworCWN5Y2xlX3QgcmV0ID0gKGN5Y2xlX3Qpdm1pX3RpbWVyX29wcy5nZXRfY3ljbGVfY291bnRlcihWTUlfQ1lDTEVTX1JFQUwpOworCXJldHVybiByZXQgPj0gY2xvY2tzb3VyY2Vfdm1pLmN5Y2xlX2xhc3QgPworCQlyZXQgOiBjbG9ja3NvdXJjZV92bWkuY3ljbGVfbGFzdDsKIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV92bWkgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCmluZGV4IGI4MTEyNWYuLjBhMzAzYzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCkBAIC00LDYgKzQsMTAgQEAKIGNvbmZpZyBIQVZFX0tWTQogICAgICAgIGJvb2wKIAorY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKKyAgICAgICBib29sCisgICAgICAgZGVmYXVsdCB5CisKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKIAlkZXBlbmRzIG9uIEhBVkVfS1ZNIHx8IFg4NgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCBlNjY1ZDFjLi5jMTNiYjkyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjAxLDEzICsyMDEsMTYgQEAKIAlpZiAoIWF0b21pY19pbmNfYW5kX3Rlc3QoJnB0LT5wZW5kaW5nKSkKIAkJc2V0X2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZ2Y3B1MC0+cmVxdWVzdHMpOwogCisJaWYgKCFwdC0+cmVpbmplY3QpCisJCWF0b21pY19zZXQoJnB0LT5wZW5kaW5nLCAxKTsKKwogCWlmICh2Y3B1MCAmJiB3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1MC0+d3EpKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZjcHUwLT53cSk7CiAKIAlocnRpbWVyX2FkZF9leHBpcmVzX25zKCZwdC0+dGltZXIsIHB0LT5wZXJpb2QpOwogCXB0LT5zY2hlZHVsZWQgPSBocnRpbWVyX2dldF9leHBpcmVzX25zKCZwdC0+dGltZXIpOwogCWlmIChwdC0+cGVyaW9kKQotCQlwcy0+Y2hhbm5lbHNbMF0uY291bnRfbG9hZF90aW1lID0gaHJ0aW1lcl9nZXRfZXhwaXJlcygmcHQtPnRpbWVyKTsKKwkJcHMtPmNoYW5uZWxzWzBdLmNvdW50X2xvYWRfdGltZSA9IGt0aW1lX2dldCgpOwogCiAJcmV0dXJuIChwdC0+cGVyaW9kID09IDAgPyAwIDogMSk7CiB9CkBAIC01MzYsNiArNTM5LDE2IEBACiAJcGl0LT5waXRfc3RhdGUuaXJxX2FjayA9IDE7CiB9CiAKK3N0YXRpYyB2b2lkIHBpdF9tYXNrX25vdGlmZXIoc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbiwgYm9vbCBtYXNrKQoreworCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSBjb250YWluZXJfb2Yoa2ltbiwgc3RydWN0IGt2bV9waXQsIG1hc2tfbm90aWZpZXIpOworCisJaWYgKCFtYXNrKSB7CisJCWF0b21pY19zZXQoJnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5wZW5kaW5nLCAwKTsKKwkJcGl0LT5waXRfc3RhdGUuaXJxX2FjayA9IDE7CisJfQorfQorCiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fcGl0ICpwaXQ7CkBAIC01NDUsOSArNTU4LDcgQEAKIAlpZiAoIXBpdCkKIAkJcmV0dXJuIE5VTEw7CiAKLQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCXBpdC0+aXJxX3NvdXJjZV9pZCA9IGt2bV9yZXF1ZXN0X2lycV9zb3VyY2VfaWQoa3ZtKTsKLQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJaWYgKHBpdC0+aXJxX3NvdXJjZV9pZCA8IDApIHsKIAkJa2ZyZWUocGl0KTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01ODAsMTAgKzU5MSwxNCBAQAogCXBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllci5nc2kgPSAwOwogCXBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllci5pcnFfYWNrZWQgPSBrdm1fcGl0X2Fja19pcnE7CiAJa3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoa3ZtLCAmcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyKTsKKwlwaXRfc3RhdGUtPnBpdF90aW1lci5yZWluamVjdCA9IHRydWU7CiAJbXV0ZXhfdW5sb2NrKCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAogCWt2bV9waXRfcmVzZXQocGl0KTsKIAorCXBpdC0+bWFza19ub3RpZmllci5mdW5jID0gcGl0X21hc2tfbm90aWZlcjsKKwlrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLCAmcGl0LT5tYXNrX25vdGlmaWVyKTsKKwogCXJldHVybiBwaXQ7CiB9CiAKQEAgLTU5Miw2ICs2MDcsOCBAQAogCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKIAogCWlmIChrdm0tPmFyY2gudnBpdCkgeworCQlrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihrdm0sIDAsCisJCQkJCSAgICAgICAma3ZtLT5hcmNoLnZwaXQtPm1hc2tfbm90aWZpZXIpOwogCQltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCQl0aW1lciA9ICZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci50aW1lcjsKIAkJaHJ0aW1lcl9jYW5jZWwodGltZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmggYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaAppbmRleCA0MTc4MDIyLi42YWNiZTRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaAorKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaApAQCAtOSw2ICs5LDcgQEAKIAlzNjQgcGVyaW9kOyAvKiB1bml0OiBucyAqLwogCXM2NCBzY2hlZHVsZWQ7CiAJYXRvbWljX3QgcGVuZGluZzsKKwlib29sIHJlaW5qZWN0OwogfTsKIAogc3RydWN0IGt2bV9rcGl0X2NoYW5uZWxfc3RhdGUgewpAQCAtNDUsNiArNDYsNyBAQAogCXN0cnVjdCBrdm0gKmt2bTsKIAlzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgcGl0X3N0YXRlOwogCWludCBpcnFfc291cmNlX2lkOworCXN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgbWFza19ub3RpZmllcjsKIH07CiAKICNkZWZpbmUgS1ZNX1BJVF9CQVNFX0FERFJFU1MJICAgIDB4NDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1OS5jIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKaW5kZXggMTc5ZGNiMC4uMWNjYjUwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU5LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKQEAgLTMyLDExICszMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAKIHN0YXRpYyB2b2lkIHBpY19sb2NrKHN0cnVjdCBrdm1fcGljICpzKQorCV9fYWNxdWlyZXMoJnMtPmxvY2spCiB7CiAJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcGljX3VubG9jayhzdHJ1Y3Qga3ZtX3BpYyAqcykKKwlfX3JlbGVhc2VzKCZzLT5sb2NrKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHMtPmt2bTsKIAl1bnNpZ25lZCBhY2tzID0gcy0+cGVuZGluZ19hY2tzOwpAQCAtNDksNyArNTEsOCBAQAogCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIAogCXdoaWxlIChhY2tzKSB7Ci0JCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgX19mZnMoYWNrcykpOworCQlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIFNFTEVDVF9QSUMoX19mZnMoYWNrcykpLAorCQkJCSAgICAgX19mZnMoYWNrcykpOwogCQlhY2tzICY9IGFja3MgLSAxOwogCX0KIApAQCAtNzYsMTIgKzc5LDEzIEBACiAvKgogICogc2V0IGlycSBsZXZlbC4gSWYgYW4gZWRnZSBpcyBkZXRlY3RlZCwgdGhlbiB0aGUgSVJSIGlzIHNldCB0byAxCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwaWNfc2V0X2lycTEoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitzdGF0aWMgaW5saW5lIGludCBwaWNfc2V0X2lycTEoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7Ci0JaW50IG1hc2s7CisJaW50IG1hc2ssIHJldCA9IDE7CiAJbWFzayA9IDEgPDwgaXJxOwogCWlmIChzLT5lbGNyICYgbWFzaykJLyogbGV2ZWwgdHJpZ2dlcmVkICovCiAJCWlmIChsZXZlbCkgeworCQkJcmV0ID0gIShzLT5pcnIgJiBtYXNrKTsKIAkJCXMtPmlyciB8PSBtYXNrOwogCQkJcy0+bGFzdF9pcnIgfD0gbWFzazsKIAkJfSBlbHNlIHsKQEAgLTkwLDExICs5NCwxNSBAQAogCQl9CiAJZWxzZQkvKiBlZGdlIHRyaWdnZXJlZCAqLwogCQlpZiAobGV2ZWwpIHsKLQkJCWlmICgocy0+bGFzdF9pcnIgJiBtYXNrKSA9PSAwKQorCQkJaWYgKChzLT5sYXN0X2lyciAmIG1hc2spID09IDApIHsKKwkJCQlyZXQgPSAhKHMtPmlyciAmIG1hc2spOwogCQkJCXMtPmlyciB8PSBtYXNrOworCQkJfQogCQkJcy0+bGFzdF9pcnIgfD0gbWFzazsKIAkJfSBlbHNlCiAJCQlzLT5sYXN0X2lyciAmPSB+bWFzazsKKworCXJldHVybiAocy0+aW1yICYgbWFzaykgPyAtMSA6IHJldDsKIH0KIAogLyoKQEAgLTE3MSwxNiArMTc5LDE5IEBACiAJcGljX3VubG9jayhzKTsKIH0KIAotdm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitpbnQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fcGljICpzID0gb3BhcXVlOworCWludCByZXQgPSAtMTsKIAogCXBpY19sb2NrKHMpOwogCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBQSUNfTlVNX1BJTlMpIHsKLQkJcGljX3NldF9pcnExKCZzLT5waWNzW2lycSA+PiAzXSwgaXJxICYgNywgbGV2ZWwpOworCQlyZXQgPSBwaWNfc2V0X2lycTEoJnMtPnBpY3NbaXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7CiAJCXBpY191cGRhdGVfaXJxKHMpOwogCX0KIAlwaWNfdW5sb2NrKHMpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTIzMiw3ICsyNDMsNyBAQAogCX0KIAlwaWNfdXBkYXRlX2lycShzKTsKIAlwaWNfdW5sb2NrKHMpOwotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgaXJxKTsKKwlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIFNFTEVDVF9QSUMoaXJxKSwgaXJxKTsKIAogCXJldHVybiBpbnRubzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pcnEuYyBiL2FyY2gveDg2L2t2bS9pcnEuYwppbmRleCBjMDE5YjhlLi5jZjE3ZWQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmMKKysrIGIvYXJjaC94ODYva3ZtL2lycS5jCkBAIC04NywxMyArODcsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMpOwogCi12b2lkIGt2bV90aW1lcl9pbnRyX3Bvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjKQotewotCWt2bV9hcGljX3RpbWVyX2ludHJfcG9zdCh2Y3B1LCB2ZWMpOwotCS8qIFRPRE86IFBJVCwgUlRDIGV0Yy4gKi8KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV90aW1lcl9pbnRyX3Bvc3QpOwotCiB2b2lkIF9fa3ZtX21pZ3JhdGVfdGltZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlfX2t2bV9taWdyYXRlX2FwaWNfdGltZXIodmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmggYi9hcmNoL3g4Ni9rdm0vaXJxLmgKaW5kZXggMmJmMzJhMC4uOWY1OTMxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5oCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuaApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgImxhcGljLmgiCiAKICNkZWZpbmUgUElDX05VTV9QSU5TIDE2CisjZGVmaW5lIFNFTEVDVF9QSUMoaXJxKSBcCisJKChpcnEpIDwgOCA/IEtWTV9JUlFDSElQX1BJQ19NQVNURVIgOiBLVk1fSVJRQ0hJUF9QSUNfU0xBVkUpCiAKIHN0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3ZjcHU7CkBAIC04OSw3ICs5MSw2IEBACiAKIHZvaWQga3ZtX3BpY19yZXNldChzdHJ1Y3Qga3ZtX2twaWNfc3RhdGUgKnMpOwogCi12b2lkIGt2bV90aW1lcl9pbnRyX3Bvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjKTsKIHZvaWQga3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX2luamVjdF9hcGljX3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX2FwaWNfbm1pX3dkX2RlbGl2ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmggYi9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oCmluZGV4IDhlNWVlOTkuLmVkNjZlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmgKKysrIGIvYXJjaC94ODYva3ZtL2t2bV9zdm0uaApAQCAtMTgsNyArMTgsNiBAQAogfTsKIAogI2RlZmluZSBOUl9IT1NUX1NBVkVfVVNFUl9NU1JTIEFSUkFZX1NJWkUoaG9zdF9zYXZlX3VzZXJfbXNycykKLSNkZWZpbmUgTlVNX0RCX1JFR1MgNAogCiBzdHJ1Y3Qga3ZtX3ZjcHU7CiAKQEAgLTI5LDE4ICsyOCwyMyBAQAogCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOwogCXVpbnQ2NF90IGFzaWRfZ2VuZXJhdGlvbjsKIAotCXVuc2lnbmVkIGxvbmcgZGJfcmVnc1tOVU1fREJfUkVHU107Ci0KIAl1NjQgbmV4dF9yaXA7CiAKIAl1NjQgaG9zdF91c2VyX21zcnNbTlJfSE9TVF9TQVZFX1VTRVJfTVNSU107CiAJdTY0IGhvc3RfZ3NfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGhvc3RfY3IyOwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kYl9yZWdzW05VTV9EQl9SRUdTXTsKLQl1bnNpZ25lZCBsb25nIGhvc3RfZHI2OwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjc7CiAKIAl1MzIgKm1zcnBtOworCXN0cnVjdCB2bWNiICpoc2F2ZTsKKwl1NjQgaHNhdmVfbXNyOworCisJdTY0IG5lc3RlZF92bWNiOworCisJLyogVGhlc2UgYXJlIHRoZSBtZXJnZWQgdmVjdG9ycyAqLworCXUzMiAqbmVzdGVkX21zcnBtOworCisJLyogZ3BhIHBvaW50ZXJzIHRvIHRoZSByZWFsIHZlY3RvcnMgKi8KKwl1NjQgbmVzdGVkX3ZtY2JfbXNycG07CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggYWZhYzY4Yy4uZjBiNjdmMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTM1LDYgKzM1LDEyIEBACiAjaW5jbHVkZSAia3ZtX2NhY2hlX3JlZ3MuaCIKICNpbmNsdWRlICJpcnEuaCIKIAorI2lmbmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIG1vZF82NCh4LCB5KSAoKHgpIC0gKHkpICogZGl2NjRfdTY0KHgsIHkpKQorI2Vsc2UKKyNkZWZpbmUgbW9kXzY0KHgsIHkpICgoeCkgJSAoeSkpCisjZW5kaWYKKwogI2RlZmluZSBQUklkNjQgImQiCiAjZGVmaW5lIFBSSXg2NCAibGx4IgogI2RlZmluZSBQUkl1NjQgInUiCkBAIC01MTEsNTIgKzUxNywyMiBAQAogCiBzdGF0aWMgdTMyIGFwaWNfZ2V0X3RtY2N0KHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCiB7Ci0JdTY0IGNvdW50ZXJfcGFzc2VkOwotCWt0aW1lX3QgcGFzc2VkLCBub3c7CisJa3RpbWVfdCByZW1haW5pbmc7CisJczY0IG5zOwogCXUzMiB0bWNjdDsKIAogCUFTU0VSVChhcGljICE9IE5VTEwpOwogCi0Jbm93ID0gYXBpYy0+dGltZXIuZGV2LmJhc2UtPmdldF90aW1lKCk7Ci0JdG1jY3QgPSBhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCk7Ci0KIAkvKiBpZiBpbml0aWFsIGNvdW50IGlzIDAsIGN1cnJlbnQgY291bnQgc2hvdWxkIGFsc28gYmUgMCAqLwotCWlmICh0bWNjdCA9PSAwKQorCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodW5saWtlbHkoa3RpbWVfdG9fbnMobm93KSA8PQotCQlrdGltZV90b19ucyhhcGljLT50aW1lci5sYXN0X3VwZGF0ZSkpKSB7Ci0JCS8qIFdyYXAgYXJvdW5kICovCi0JCXBhc3NlZCA9IGt0aW1lX2FkZCgoIHsKLQkJCQkgICAgKGt0aW1lX3QpIHsKLQkJCQkgICAgLnR2NjQgPSBLVElNRV9NQVggLQotCQkJCSAgICAoYXBpYy0+dGltZXIubGFzdF91cGRhdGUpLnR2NjR9OyB9Ci0JCQkJICAgKSwgbm93KTsKLQkJYXBpY19kZWJ1ZygidGltZSBlbGFwc2VkXG4iKTsKLQl9IGVsc2UKLQkJcGFzc2VkID0ga3RpbWVfc3ViKG5vdywgYXBpYy0+dGltZXIubGFzdF91cGRhdGUpOworCXJlbWFpbmluZyA9IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcoJmFwaWMtPnRpbWVyLmRldik7CisJaWYgKGt0aW1lX3RvX25zKHJlbWFpbmluZykgPCAwKQorCQlyZW1haW5pbmcgPSBrdGltZV9zZXQoMCwgMCk7CiAKLQljb3VudGVyX3Bhc3NlZCA9IGRpdjY0X3U2NChrdGltZV90b19ucyhwYXNzZWQpLAotCQkJCSAgIChBUElDX0JVU19DWUNMRV9OUyAqIGFwaWMtPnRpbWVyLmRpdmlkZV9jb3VudCkpOwotCi0JaWYgKGNvdW50ZXJfcGFzc2VkID4gdG1jY3QpIHsKLQkJaWYgKHVubGlrZWx5KCFhcGljX2x2dHRfcGVyaW9kKGFwaWMpKSkgewotCQkJLyogb25lLXNob3QgdGltZXJzIHN0aWNrIGF0IDAgdW50aWwgcmVzZXQgKi8KLQkJCXRtY2N0ID0gMDsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBwZXJpb2RpYyB0aW1lcnMgcmVzZXQgdG8gQVBJQ19UTUlDVCB3aGVuIHRoZXkKLQkJCSAqIGhpdCAwLiBUaGUgd2hpbGUgbG9vcCBzaW11bGF0ZXMgdGhpcyBoYXBwZW5pbmcgTgotCQkJICogdGltZXMuIChjb3VudGVyX3Bhc3NlZCAlPSB0bWNjdCkgd291bGQgYWxzbyB3b3JrLAotCQkJICogYnV0IG1pZ2h0IGJlIHNsb3dlciBvciBub3Qgd29yayBvbiAzMi1iaXQ/PwotCQkJICovCi0JCQl3aGlsZSAoY291bnRlcl9wYXNzZWQgPiB0bWNjdCkKLQkJCQljb3VudGVyX3Bhc3NlZCAtPSB0bWNjdDsKLQkJCXRtY2N0IC09IGNvdW50ZXJfcGFzc2VkOwotCQl9Ci0JfSBlbHNlIHsKLQkJdG1jY3QgLT0gY291bnRlcl9wYXNzZWQ7Ci0JfQorCW5zID0gbW9kXzY0KGt0aW1lX3RvX25zKHJlbWFpbmluZyksIGFwaWMtPnRpbWVyLnBlcmlvZCk7CisJdG1jY3QgPSBkaXY2NF91NjQobnMsIChBUElDX0JVU19DWUNMRV9OUyAqIGFwaWMtPnRpbWVyLmRpdmlkZV9jb3VudCkpOwogCiAJcmV0dXJuIHRtY2N0OwogfQpAQCAtNjUzLDggKzYyOSw2IEBACiB7CiAJa3RpbWVfdCBub3cgPSBhcGljLT50aW1lci5kZXYuYmFzZS0+Z2V0X3RpbWUoKTsKIAotCWFwaWMtPnRpbWVyLmxhc3RfdXBkYXRlID0gbm93OwotCiAJYXBpYy0+dGltZXIucGVyaW9kID0gYXBpY19nZXRfcmVnKGFwaWMsIEFQSUNfVE1JQ1QpICoKIAkJICAgIEFQSUNfQlVTX0NZQ0xFX05TICogYXBpYy0+dGltZXIuZGl2aWRlX2NvdW50OwogCWF0b21pY19zZXQoJmFwaWMtPnRpbWVyLnBlbmRpbmcsIDApOwpAQCAtMTExMCwxNiArMTA4NCw2IEBACiAJfQogfQogCi12b2lkIGt2bV9hcGljX3RpbWVyX2ludHJfcG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWMpCi17Ci0Jc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHZjcHUtPmFyY2guYXBpYzsKLQotCWlmIChhcGljICYmIGFwaWNfbHZ0X3ZlY3RvcihhcGljLCBBUElDX0xWVFQpID09IHZlYykKLQkJYXBpYy0+dGltZXIubGFzdF91cGRhdGUgPSBrdGltZV9hZGRfbnMoCi0JCQkJYXBpYy0+dGltZXIubGFzdF91cGRhdGUsCi0JCQkJYXBpYy0+dGltZXIucGVyaW9kKTsKLX0KLQogaW50IGt2bV9nZXRfYXBpY19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludCB2ZWN0b3IgPSBrdm1fYXBpY19oYXNfaW50ZXJydXB0KHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2xhcGljLmggYi9hcmNoL3g4Ni9rdm0vbGFwaWMuaAppbmRleCA4MTg1ODg4Li40NWFiNmVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbGFwaWMuaAorKysgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuaApAQCAtMTIsNyArMTIsNiBAQAogCQlhdG9taWNfdCBwZW5kaW5nOwogCQlzNjQgcGVyaW9kOwkvKiB1bml0OiBucyAqLwogCQl1MzIgZGl2aWRlX2NvdW50OwotCQlrdGltZV90IGxhc3RfdXBkYXRlOwogCQlzdHJ1Y3QgaHJ0aW1lciBkZXY7CiAJfSB0aW1lcjsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CkBAIC00Miw3ICs0MSw2IEBACiB2b2lkIGt2bV9hcGljX3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9sYXBpY19lbmFibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX2xhcGljX2ZpbmRfaGlnaGVzdF9pcnIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLXZvaWQga3ZtX2FwaWNfdGltZXJfaW50cl9wb3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYyk7CiAKIHZvaWQga3ZtX2xhcGljX3NldF92YXBpY19hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgdmFwaWNfYWRkcik7CiB2b2lkIGt2bV9sYXBpY19zeW5jX2Zyb21fdmFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCA4M2YxMWM3Li4yYTM2ZjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xNDUsMTEgKzE0NSwyMCBAQAogCXN0cnVjdCBrdm1fcm1hcF9kZXNjICptb3JlOwogfTsKIAotc3RydWN0IGt2bV9zaGFkb3dfd2FsayB7Ci0JaW50ICgqZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKndhbGssIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJICAgICB1NjQgYWRkciwgdTY0ICpzcHRlLCBpbnQgbGV2ZWwpOworc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciB7CisJdTY0IGFkZHI7CisJaHBhX3Qgc2hhZG93X2FkZHI7CisJaW50IGxldmVsOworCXU2NCAqc3B0ZXA7CisJdW5zaWduZWQgaW5kZXg7CiB9OwogCisjZGVmaW5lIGZvcl9lYWNoX3NoYWRvd19lbnRyeShfdmNwdSwgX2FkZHIsIF93YWxrZXIpICAgIFwKKwlmb3IgKHNoYWRvd193YWxrX2luaXQoJihfd2Fsa2VyKSwgX3ZjcHUsIF9hZGRyKTsJXAorCSAgICAgc2hhZG93X3dhbGtfb2theSgmKF93YWxrZXIpKTsJCQlcCisJICAgICBzaGFkb3dfd2Fsa19uZXh0KCYoX3dhbGtlcikpKQorCisKIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgewogCWludCAoKmVudHJ5KSAoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGspOwogfTsKQEAgLTM0Myw3ICszNTIsNiBAQAogCiAJQlVHX09OKCFtYy0+bm9ianMpOwogCXAgPSBtYy0+b2JqZWN0c1stLW1jLT5ub2Jqc107Ci0JbWVtc2V0KHAsIDAsIHNpemUpOwogCXJldHVybiBwOwogfQogCkBAIC03OTQsMTAgKzgwMiw4IEBACiAJc2V0X3BhZ2VfcHJpdmF0ZSh2aXJ0X3RvX3BhZ2Uoc3AtPnNwdCksICh1bnNpZ25lZCBsb25nKXNwKTsKIAlsaXN0X2FkZCgmc3AtPmxpbmssICZ2Y3B1LT5rdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnNwLT5vb3NfbGluayk7Ci0JQVNTRVJUKGlzX2VtcHR5X3NoYWRvd19wYWdlKHNwLT5zcHQpKTsKIAliaXRtYXBfemVybyhzcC0+c2xvdF9iaXRtYXAsIEtWTV9NRU1PUllfU0xPVFMgKyBLVk1fUFJJVkFURV9NRU1fU0xPVFMpOwogCXNwLT5tdWx0aW1hcHBlZCA9IDA7Ci0Jc3AtPmdsb2JhbCA9IDE7CiAJc3AtPnBhcmVudF9wdGUgPSBwYXJlbnRfcHRlOwogCS0tdmNwdS0+a3ZtLT5hcmNoLm5fZnJlZV9tbXVfcGFnZXM7CiAJcmV0dXJuIHNwOwpAQCAtOTgzLDggKzk4OSw4IEBACiAJICAgICBpZHggPCA1MTI7CQkJCQlcCiAJICAgICBpZHggPSBmaW5kX25leHRfYml0KGJpdG1hcCwgNTEyLCBpZHgrMSkpCiAKLWludCBtbXVfcGFnZXNfYWRkKHN0cnVjdCBrdm1fbW11X3BhZ2VzICpwdmVjLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKLQkJICAgaW50IGlkeCkKK3N0YXRpYyBpbnQgbW11X3BhZ2VzX2FkZChzdHJ1Y3Qga3ZtX21tdV9wYWdlcyAqcHZlYywgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQkgaW50IGlkeCkKIHsKIAlpbnQgaTsKIApAQCAtMTA1OSw3ICsxMDY1LDcgQEAKIAlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOwogCWJ1Y2tldCA9ICZrdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoc3AsIG5vZGUsIGJ1Y2tldCwgaGFzaF9saW5rKQotCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbAorCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLmRpcmVjdAogCQkgICAgJiYgIXNwLT5yb2xlLmludmFsaWQpIHsKIAkJCXBncHJpbnRrKCIlczogZm91bmQgcm9sZSAleFxuIiwKIAkJCQkgX19mdW5jX18sIHNwLT5yb2xlLndvcmQpOwpAQCAtMTExNSw4ICsxMTIxLDkgQEAKIAkJCWkgPCBwdmVjLm5yICYmICh7IHNwID0gcHZlYy5wYWdlW2ldLnNwOyAxO30pOwlcCiAJCQlpID0gbW11X3BhZ2VzX25leHQoJnB2ZWMsICZwYXJlbnRzLCBpKSkKIAotaW50IG1tdV9wYWdlc19uZXh0KHN0cnVjdCBrdm1fbW11X3BhZ2VzICpwdmVjLCBzdHJ1Y3QgbW11X3BhZ2VfcGF0aCAqcGFyZW50cywKLQkJICAgaW50IGkpCitzdGF0aWMgaW50IG1tdV9wYWdlc19uZXh0KHN0cnVjdCBrdm1fbW11X3BhZ2VzICpwdmVjLAorCQkJICBzdHJ1Y3QgbW11X3BhZ2VfcGF0aCAqcGFyZW50cywKKwkJCSAgaW50IGkpCiB7CiAJaW50IG47CiAKQEAgLTExMzUsNyArMTE0Miw3IEBACiAJcmV0dXJuIG47CiB9CiAKLXZvaWQgbW11X3BhZ2VzX2NsZWFyX3BhcmVudHMoc3RydWN0IG1tdV9wYWdlX3BhdGggKnBhcmVudHMpCitzdGF0aWMgdm9pZCBtbXVfcGFnZXNfY2xlYXJfcGFyZW50cyhzdHJ1Y3QgbW11X3BhZ2VfcGF0aCAqcGFyZW50cykKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAl1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOwpAQCAtMTE5Myw3ICsxMjAwLDcgQEAKIAkJCQkJICAgICBnZm5fdCBnZm4sCiAJCQkJCSAgICAgZ3ZhX3QgZ2FkZHIsCiAJCQkJCSAgICAgdW5zaWduZWQgbGV2ZWwsCi0JCQkJCSAgICAgaW50IG1ldGFwaHlzaWNhbCwKKwkJCQkJICAgICBpbnQgZGlyZWN0LAogCQkJCQkgICAgIHVuc2lnbmVkIGFjY2VzcywKIAkJCQkJICAgICB1NjQgKnBhcmVudF9wdGUpCiB7CkBAIC0xMjA0LDEwICsxMjExLDkgQEAKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKIAotCXJvbGUud29yZCA9IDA7Ci0Jcm9sZS5nbGV2ZWxzID0gdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbDsKKwlyb2xlID0gdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlOwogCXJvbGUubGV2ZWwgPSBsZXZlbDsKLQlyb2xlLm1ldGFwaHlzaWNhbCA9IG1ldGFwaHlzaWNhbDsKKwlyb2xlLmRpcmVjdCA9IGRpcmVjdDsKIAlyb2xlLmFjY2VzcyA9IGFjY2VzczsKIAlpZiAodmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCA8PSBQVDMyX1JPT1RfTEVWRUwpIHsKIAkJcXVhZHJhbnQgPSBnYWRkciA+PiAoUEFHRV9TSElGVCArIChQVDY0X1BUX0JJVFMgKiBsZXZlbCkpOwpAQCAtMTI0Miw4ICsxMjQ4LDkgQEAKIAlwZ3ByaW50aygiJXM6IGFkZGluZyBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fZnVuY19fLCBnZm4sIHJvbGUud29yZCk7CiAJc3AtPmdmbiA9IGdmbjsKIAlzcC0+cm9sZSA9IHJvbGU7CisJc3AtPmdsb2JhbCA9IHJvbGUuY3I0X3BnZTsKIAlobGlzdF9hZGRfaGVhZCgmc3AtPmhhc2hfbGluaywgYnVja2V0KTsKLQlpZiAoIW1ldGFwaHlzaWNhbCkgeworCWlmICghZGlyZWN0KSB7CiAJCWlmIChybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBnZm4pKQogCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJCWFjY291bnRfc2hhZG93ZWQodmNwdS0+a3ZtLCBnZm4pOwpAQCAtMTI1NSwzNSArMTI2MiwzNSBAQAogCXJldHVybiBzcDsKIH0KIAotc3RhdGljIGludCB3YWxrX3NoYWRvdyhzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICp3YWxrZXIsCi0JCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyKQorc3RhdGljIHZvaWQgc2hhZG93X3dhbGtfaW5pdChzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yICppdGVyYXRvciwKKwkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkcikKIHsKLQlocGFfdCBzaGFkb3dfYWRkcjsKLQlpbnQgbGV2ZWw7Ci0JaW50IHI7Ci0JdTY0ICpzcHRlcDsKLQl1bnNpZ25lZCBpbmRleDsKLQotCXNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucm9vdF9ocGE7Ci0JbGV2ZWwgPSB2Y3B1LT5hcmNoLm1tdS5zaGFkb3dfcm9vdF9sZXZlbDsKLQlpZiAobGV2ZWwgPT0gUFQzMkVfUk9PVF9MRVZFTCkgewotCQlzaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LnBhZV9yb290WyhhZGRyID4+IDMwKSAmIDNdOwotCQlzaGFkb3dfYWRkciAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOwotCQlpZiAoIXNoYWRvd19hZGRyKQotCQkJcmV0dXJuIDE7Ci0JCS0tbGV2ZWw7CisJaXRlcmF0b3ItPmFkZHIgPSBhZGRyOworCWl0ZXJhdG9yLT5zaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LnJvb3RfaHBhOworCWl0ZXJhdG9yLT5sZXZlbCA9IHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsOworCWlmIChpdGVyYXRvci0+bGV2ZWwgPT0gUFQzMkVfUk9PVF9MRVZFTCkgeworCQlpdGVyYXRvci0+c2hhZG93X2FkZHIKKwkJCT0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107CisJCWl0ZXJhdG9yLT5zaGFkb3dfYWRkciAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOworCQktLWl0ZXJhdG9yLT5sZXZlbDsKKwkJaWYgKCFpdGVyYXRvci0+c2hhZG93X2FkZHIpCisJCQlpdGVyYXRvci0+bGV2ZWwgPSAwOwogCX0KK30KIAotCXdoaWxlIChsZXZlbCA+PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSB7Ci0JCWluZGV4ID0gU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKTsKLQkJc3B0ZXAgPSAoKHU2NCAqKV9fdmEoc2hhZG93X2FkZHIpKSArIGluZGV4OwotCQlyID0gd2Fsa2VyLT5lbnRyeSh3YWxrZXIsIHZjcHUsIGFkZHIsIHNwdGVwLCBsZXZlbCk7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7Ci0JCXNoYWRvd19hZGRyID0gKnNwdGVwICYgUFQ2NF9CQVNFX0FERFJfTUFTSzsKLQkJLS1sZXZlbDsKLQl9Ci0JcmV0dXJuIDA7CitzdGF0aWMgYm9vbCBzaGFkb3dfd2Fsa19va2F5KHN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgKml0ZXJhdG9yKQoreworCWlmIChpdGVyYXRvci0+bGV2ZWwgPCBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQlyZXR1cm4gZmFsc2U7CisJaXRlcmF0b3ItPmluZGV4ID0gU0hBRE9XX1BUX0lOREVYKGl0ZXJhdG9yLT5hZGRyLCBpdGVyYXRvci0+bGV2ZWwpOworCWl0ZXJhdG9yLT5zcHRlcAk9ICgodTY0ICopX192YShpdGVyYXRvci0+c2hhZG93X2FkZHIpKSArIGl0ZXJhdG9yLT5pbmRleDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2hhZG93X3dhbGtfbmV4dChzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yICppdGVyYXRvcikKK3sKKwlpdGVyYXRvci0+c2hhZG93X2FkZHIgPSAqaXRlcmF0b3ItPnNwdGVwICYgUFQ2NF9CQVNFX0FERFJfTUFTSzsKKwktLWl0ZXJhdG9yLT5sZXZlbDsKIH0KIAogc3RhdGljIHZvaWQga3ZtX21tdV9wYWdlX3VubGlua19jaGlsZHJlbihzdHJ1Y3Qga3ZtICprdm0sCkBAIC0xMzg4LDcgKzEzOTUsNyBAQAogCWt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oa3ZtLCBzcCk7CiAJa3ZtX21tdV91bmxpbmtfcGFyZW50cyhrdm0sIHNwKTsKIAlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKLQlpZiAoIXNwLT5yb2xlLmludmFsaWQgJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCkKKwlpZiAoIXNwLT5yb2xlLmludmFsaWQgJiYgIXNwLT5yb2xlLmRpcmVjdCkKIAkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CiAJaWYgKHNwLT51bnN5bmMpCiAJCWt2bV91bmxpbmtfdW5zeW5jX3BhZ2Uoa3ZtLCBzcCk7CkBAIC0xNDUxLDcgKzE0NTgsNyBAQAogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykKLQkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5tZXRhcGh5c2ljYWwpIHsKKwkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5kaXJlY3QpIHsKIAkJCXBncHJpbnRrKCIlczogZ2ZuICVseCByb2xlICV4XG4iLCBfX2Z1bmNfXywgZ2ZuLAogCQkJCSBzcC0+cm9sZS53b3JkKTsKIAkJCXIgPSAxOwpAQCAtMTQ2MywxMSArMTQ3MCwyMCBAQAogCiBzdGF0aWMgdm9pZCBtbXVfdW5zaGFkb3coc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CisJdW5zaWduZWQgaW5kZXg7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5uOwogCi0Jd2hpbGUgKChzcCA9IGt2bV9tbXVfbG9va3VwX3BhZ2Uoa3ZtLCBnZm4pKSAhPSBOVUxMKSB7Ci0JCXBncHJpbnRrKCIlczogemFwICVseCAleFxuIiwgX19mdW5jX18sIGdmbiwgc3AtPnJvbGUud29yZCk7Ci0JCWt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCk7CisJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKKwlidWNrZXQgPSAma3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsIG5uLCBidWNrZXQsIGhhc2hfbGluaykgeworCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLmRpcmVjdAorCQkgICAgJiYgIXNwLT5yb2xlLmludmFsaWQpIHsKKwkJCXBncHJpbnRrKCIlczogemFwICVseCAleFxuIiwKKwkJCQkgX19mdW5jX18sIGdmbiwgc3AtPnJvbGUud29yZCk7CisJCQlrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApOworCQl9CiAJfQogfQogCkBAIC0xNjIyLDcgKzE2MzgsNyBAQAogCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJLyogZG9uJ3QgdW5zeW5jIGlmIHBhZ2V0YWJsZSBpcyBzaGFkb3dlZCB3aXRoIG11bHRpcGxlIHJvbGVzICovCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykgewotCQlpZiAocy0+Z2ZuICE9IHNwLT5nZm4gfHwgcy0+cm9sZS5tZXRhcGh5c2ljYWwpCisJCWlmIChzLT5nZm4gIT0gc3AtPmdmbiB8fCBzLT5yb2xlLmRpcmVjdCkKIAkJCWNvbnRpbnVlOwogCQlpZiAocy0+cm9sZS53b3JkICE9IHNwLT5yb2xlLndvcmQpCiAJCQlyZXR1cm4gMTsKQEAgLTE2NjksOCArMTY4NSw2IEBACiAJdTY0IG10X21hc2sgPSBzaGFkb3dfbXRfbWFzazsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc2hhZG93X3B0ZSkpOwogCi0JaWYgKCEodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X1BHRSkpCi0JCWdsb2JhbCA9IDA7CiAJaWYgKCFnbG9iYWwgJiYgc3AtPmdsb2JhbCkgewogCQlzcC0+Z2xvYmFsID0gMDsKIAkJaWYgKHNwLT51bnN5bmMpIHsKQEAgLTE2OTgsOCArMTcxMiwxMyBAQAogCWlmIChsYXJnZXBhZ2UpCiAJCXNwdGUgfD0gUFRfUEFHRV9TSVpFX01BU0s7CiAJaWYgKG10X21hc2spIHsKLQkJbXRfbWFzayA9IGdldF9tZW1vcnlfdHlwZSh2Y3B1LCBnZm4pIDw8Ci0JCQkgIGt2bV94ODZfb3BzLT5nZXRfbXRfbWFza19zaGlmdCgpOworCQlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKSB7CisJCQltdF9tYXNrID0gZ2V0X21lbW9yeV90eXBlKHZjcHUsIGdmbikgPDwKKwkJCQlrdm1feDg2X29wcy0+Z2V0X210X21hc2tfc2hpZnQoKTsKKwkJCW10X21hc2sgfD0gVk1YX0VQVF9JR01UX0JJVDsKKwkJfSBlbHNlCisJCQltdF9tYXNrID0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgPDwKKwkJCQlrdm1feDg2X29wcy0+Z2V0X210X21hc2tfc2hpZnQoKTsKIAkJc3B0ZSB8PSBtdF9tYXNrOwogCX0KIApAQCAtMTc3MiwxMiArMTc5MSw4IEBACiAJCQlwZ3ByaW50aygiaGZuIG9sZCAlbHggbmV3ICVseFxuIiwKIAkJCQkgc3B0ZV90b19wZm4oKnNoYWRvd19wdGUpLCBwZm4pOwogCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzaGFkb3dfcHRlKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChsYXJnZXBhZ2UpCi0JCQkJd2FzX3JtYXBwZWQgPSBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpOwotCQkJZWxzZQotCQkJCXdhc19ybWFwcGVkID0gMTsKLQkJfQorCQl9IGVsc2UKKwkJCXdhc19ybWFwcGVkID0gMTsKIAl9CiAJaWYgKHNldF9zcHRlKHZjcHUsIHNoYWRvd19wdGUsIHB0ZV9hY2Nlc3MsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAogCQkgICAgICBkaXJ0eSwgbGFyZ2VwYWdlLCBnbG9iYWwsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSkpIHsKQEAgLTE4MTUsNjcgKzE4MzAsNDIgQEAKIHsKIH0KIAotc3RydWN0IGRpcmVjdF9zaGFkb3dfd2FsayB7Ci0Jc3RydWN0IGt2bV9zaGFkb3dfd2FsayB3YWxrZXI7Ci0JcGZuX3QgcGZuOwotCWludCB3cml0ZTsKLQlpbnQgbGFyZ2VwYWdlOwotCWludCBwdF93cml0ZTsKLX07Ci0KLXN0YXRpYyBpbnQgZGlyZWN0X21hcF9lbnRyeShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICpfd2FsaywKLQkJCSAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgdTY0IGFkZHIsIHU2NCAqc3B0ZXAsIGludCBsZXZlbCkKLXsKLQlzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrICp3YWxrID0KLQkJY29udGFpbmVyX29mKF93YWxrLCBzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrLCB3YWxrZXIpOwotCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwotCWdmbl90IHBzZXVkb19nZm47Ci0JZ2ZuX3QgZ2ZuID0gYWRkciA+PiBQQUdFX1NISUZUOwotCi0JaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKLQkgICAgfHwgKHdhbGstPmxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7Ci0JCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgQUNDX0FMTCwgQUNDX0FMTCwKLQkJCSAgICAgMCwgd2Fsay0+d3JpdGUsIDEsICZ3YWxrLT5wdF93cml0ZSwKLQkJCSAgICAgd2Fsay0+bGFyZ2VwYWdlLCAwLCBnZm4sIHdhbGstPnBmbiwgZmFsc2UpOwotCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgqc3B0ZXAgPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKLQkJcHNldWRvX2dmbiA9IChhZGRyICYgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7Ci0JCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCBwc2V1ZG9fZ2ZuLCAoZ3ZhX3QpYWRkciwgbGV2ZWwgLSAxLAotCQkJCSAgICAgIDEsIEFDQ19BTEwsIHNwdGVwKTsKLQkJaWYgKCFzcCkgewotCQkJcGdwcmludGsoIm5vbnBhZ2luZ19tYXA6IEVOT01FTVxuIik7Ci0JCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4od2Fsay0+cGZuKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsCi0JCQkgICAgICAgX19wYShzcC0+c3B0KQotCQkJICAgICAgIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSwotCQkJICAgICAgIHwgc2hhZG93X3VzZXJfbWFzayB8IHNoYWRvd194X21hc2spOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2RpcmVjdF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2LCBpbnQgd3JpdGUsCiAJCQlpbnQgbGFyZ2VwYWdlLCBnZm5fdCBnZm4sIHBmbl90IHBmbikKIHsKLQlpbnQgcjsKLQlzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrIHdhbGtlciA9IHsKLQkJLndhbGtlciA9IHsgLmVudHJ5ID0gZGlyZWN0X21hcF9lbnRyeSwgfSwKLQkJLnBmbiA9IHBmbiwKLQkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKLQkJLndyaXRlID0gd3JpdGUsCi0JCS5wdF93cml0ZSA9IDAsCi0JfTsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOworCWludCBwdF93cml0ZSA9IDA7CisJZ2ZuX3QgcHNldWRvX2dmbjsKIAotCXIgPSB3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ2ZuIDw8IFBBR0VfU0hJRlQpOwotCWlmIChyIDwgMCkKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIHdhbGtlci5wdF93cml0ZTsKKwlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgKHU2NClnZm4gPDwgUEFHRV9TSElGVCwgaXRlcmF0b3IpIHsKKwkJaWYgKGl0ZXJhdG9yLmxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKKwkJICAgIHx8IChsYXJnZXBhZ2UgJiYgaXRlcmF0b3IubGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgeworCQkJbW11X3NldF9zcHRlKHZjcHUsIGl0ZXJhdG9yLnNwdGVwLCBBQ0NfQUxMLCBBQ0NfQUxMLAorCQkJCSAgICAgMCwgd3JpdGUsIDEsICZwdF93cml0ZSwKKwkJCQkgICAgIGxhcmdlcGFnZSwgMCwgZ2ZuLCBwZm4sIGZhbHNlKTsKKwkJCSsrdmNwdS0+c3RhdC5wZl9maXhlZDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCppdGVyYXRvci5zcHRlcCA9PSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSkgeworCQkJcHNldWRvX2dmbiA9IChpdGVyYXRvci5hZGRyICYgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisJCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcHNldWRvX2dmbiwgaXRlcmF0b3IuYWRkciwKKwkJCQkJICAgICAgaXRlcmF0b3IubGV2ZWwgLSAxLAorCQkJCQkgICAgICAxLCBBQ0NfQUxMLCBpdGVyYXRvci5zcHRlcCk7CisJCQlpZiAoIXNwKSB7CisJCQkJcGdwcmludGsoIm5vbnBhZ2luZ19tYXA6IEVOT01FTVxuIik7CisJCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCXNldF9zaGFkb3dfcHRlKGl0ZXJhdG9yLnNwdGVwLAorCQkJCSAgICAgICBfX3BhKHNwLT5zcHQpCisJCQkJICAgICAgIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSworCQkJCSAgICAgICB8IHNoYWRvd191c2VyX21hc2sgfCBzaGFkb3dfeF9tYXNrKTsKKwkJfQorCX0KKwlyZXR1cm4gcHRfd3JpdGU7CiB9CiAKIHN0YXRpYyBpbnQgbm9ucGFnaW5nX21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHYsIGludCB3cml0ZSwgZ2ZuX3QgZ2ZuKQpAQCAtMTk1Nyw3ICsxOTQ3LDcgQEAKIAlpbnQgaTsKIAlnZm5fdCByb290X2dmbjsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlpbnQgbWV0YXBoeXNpY2FsID0gMDsKKwlpbnQgZGlyZWN0ID0gMDsKIAogCXJvb3RfZ2ZuID0gdmNwdS0+YXJjaC5jcjMgPj4gUEFHRV9TSElGVDsKIApAQCAtMTk2NiwxOCArMTk1NiwxOCBAQAogCiAJCUFTU0VSVCghVkFMSURfUEFHRShyb290KSk7CiAJCWlmICh0ZHBfZW5hYmxlZCkKLQkJCW1ldGFwaHlzaWNhbCA9IDE7CisJCQlkaXJlY3QgPSAxOwogCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcm9vdF9nZm4sIDAsCi0JCQkJICAgICAgUFQ2NF9ST09UX0xFVkVMLCBtZXRhcGh5c2ljYWwsCisJCQkJICAgICAgUFQ2NF9ST09UX0xFVkVMLCBkaXJlY3QsCiAJCQkJICAgICAgQUNDX0FMTCwgTlVMTCk7CiAJCXJvb3QgPSBfX3BhKHNwLT5zcHQpOwogCQkrK3NwLT5yb290X2NvdW50OwogCQl2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSA9IHJvb3Q7CiAJCXJldHVybjsKIAl9Ci0JbWV0YXBoeXNpY2FsID0gIWlzX3BhZ2luZyh2Y3B1KTsKKwlkaXJlY3QgPSAhaXNfcGFnaW5nKHZjcHUpOwogCWlmICh0ZHBfZW5hYmxlZCkKLQkJbWV0YXBoeXNpY2FsID0gMTsKKwkJZGlyZWN0ID0gMTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CiAJCWhwYV90IHJvb3QgPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFtpXTsKIApAQCAtMTk5MSw3ICsxOTgxLDcgQEAKIAkJfSBlbHNlIGlmICh2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsID09IDApCiAJCQlyb290X2dmbiA9IDA7CiAJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCByb290X2dmbiwgaSA8PCAzMCwKLQkJCQkgICAgICBQVDMyX1JPT1RfTEVWRUwsIG1ldGFwaHlzaWNhbCwKKwkJCQkgICAgICBQVDMyX1JPT1RfTEVWRUwsIGRpcmVjdCwKIAkJCQkgICAgICBBQ0NfQUxMLCBOVUxMKTsKIAkJcm9vdCA9IF9fcGEoc3AtPnNwdCk7CiAJCSsrc3AtPnJvb3RfY291bnQ7CkBAIC0yMjQ2LDE3ICsyMjM2LDIzIEBACiAKIHN0YXRpYyBpbnQgaW5pdF9rdm1fc29mdG1tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaW50IHI7CisKIAlBU1NFUlQodmNwdSk7CiAJQVNTRVJUKCFWQUxJRF9QQUdFKHZjcHUtPmFyY2gubW11LnJvb3RfaHBhKSk7CiAKIAlpZiAoIWlzX3BhZ2luZyh2Y3B1KSkKLQkJcmV0dXJuIG5vbnBhZ2luZ19pbml0X2NvbnRleHQodmNwdSk7CisJCXIgPSBub25wYWdpbmdfaW5pdF9jb250ZXh0KHZjcHUpOwogCWVsc2UgaWYgKGlzX2xvbmdfbW9kZSh2Y3B1KSkKLQkJcmV0dXJuIHBhZ2luZzY0X2luaXRfY29udGV4dCh2Y3B1KTsKKwkJciA9IHBhZ2luZzY0X2luaXRfY29udGV4dCh2Y3B1KTsKIAllbHNlIGlmIChpc19wYWUodmNwdSkpCi0JCXJldHVybiBwYWdpbmczMkVfaW5pdF9jb250ZXh0KHZjcHUpOworCQlyID0gcGFnaW5nMzJFX2luaXRfY29udGV4dCh2Y3B1KTsKIAllbHNlCi0JCXJldHVybiBwYWdpbmczMl9pbml0X2NvbnRleHQodmNwdSk7CisJCXIgPSBwYWdpbmczMl9pbml0X2NvbnRleHQodmNwdSk7CisKKwl2Y3B1LT5hcmNoLm1tdS5iYXNlX3JvbGUuZ2xldmVscyA9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWw7CisKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBpbml0X2t2bV9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjQ4Nyw3ICsyNDgzLDcgQEAKIAlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOwogCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspIHsKLQkJaWYgKHNwLT5nZm4gIT0gZ2ZuIHx8IHNwLT5yb2xlLm1ldGFwaHlzaWNhbCB8fCBzcC0+cm9sZS5pbnZhbGlkKQorCQlpZiAoc3AtPmdmbiAhPSBnZm4gfHwgc3AtPnJvbGUuZGlyZWN0IHx8IHNwLT5yb2xlLmludmFsaWQpCiAJCQljb250aW51ZTsKIAkJcHRlX3NpemUgPSBzcC0+cm9sZS5nbGV2ZWxzID09IFBUMzJfUk9PVF9MRVZFTCA/IDQgOiA4OwogCQltaXNhbGlnbmVkID0gKG9mZnNldCBeIChvZmZzZXQgKyBieXRlcyAtIDEpKSAmIH4ocHRlX3NpemUgLSAxKTsKQEAgLTMxMjUsNyArMzEyMSw3IEBACiAJZ2ZuX3QgZ2ZuOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzcCwgJnZjcHUtPmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzLCBsaW5rKSB7Ci0JCWlmIChzcC0+cm9sZS5tZXRhcGh5c2ljYWwpCisJCWlmIChzcC0+cm9sZS5kaXJlY3QpCiAJCQljb250aW51ZTsKIAogCQlnZm4gPSB1bmFsaWFzX2dmbih2Y3B1LT5rdm0sIHNwLT5nZm4pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oCmluZGV4IDI1OGU1ZDUuLmVhYWIyMTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAorKysgYi9hcmNoL3g4Ni9rdm0vbW11LmgKQEAgLTU0LDcgKzU0LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xvbmdfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyICYgRUZFUl9MTUU7CisJcmV0dXJuIHZjcHUtPmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX0xNQTsKICNlbHNlCiAJcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKaW5kZXggOWZkNzhiNi4uNmJkNzAyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZiBQVFRZUEUgPT0gNjQKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1NjQKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXI2NAotCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyNjQKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjNjRfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDY0X0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0sKQEAgLTQyLDcgKzQxLDYgQEAKICNlbGlmIFBUVFlQRSA9PSAzMgogCSNkZWZpbmUgcHRfZWxlbWVudF90IHUzMgogCSNkZWZpbmUgZ3Vlc3Rfd2Fsa2VyIGd1ZXN0X3dhbGtlcjMyCi0JI2RlZmluZSBzaGFkb3dfd2Fsa2VyIHNoYWRvd193YWxrZXIzMgogCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyMzMl8jI25hbWUKIAkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUMzJfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDMyX0RJUl9CQVNFX0FERFJfTUFTSwpAQCAtNzMsMTggKzcxLDYgQEAKIAl1MzIgZXJyb3JfY29kZTsKIH07CiAKLXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHsKLQlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHdhbGtlcjsKLQlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndWVzdF93YWxrZXI7Ci0JaW50IHVzZXJfZmF1bHQ7Ci0JaW50IHdyaXRlX2ZhdWx0OwotCWludCBsYXJnZXBhZ2U7Ci0JaW50ICpwdHdyaXRlOwotCXBmbl90IHBmbjsKLQl1NjQgKnNwdGVwOwotCWdwYV90IHB0ZV9ncGE7Ci19OwotCiBzdGF0aWMgZ2ZuX3QgZ3B0ZV90b19nZm4ocHRfZWxlbWVudF90IGdwdGUpCiB7CiAJcmV0dXJuIChncHRlICYgUFRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CkBAIC0yODMsOTEgKzI2OSw3OSBAQAogLyoKICAqIEZldGNoIGEgc2hhZG93IHB0ZSBmb3IgYSBzcGVjaWZpYyBsZXZlbCBpbiB0aGUgcGFnaW5nIGhpZXJhcmNoeS4KICAqLwotc3RhdGljIGludCBGTkFNRShzaGFkb3dfd2Fsa19lbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3N3LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLAotCQkJCSAgICB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IHNoYWRvd193YWxrZXIgKnN3ID0KLQkJY29udGFpbmVyX29mKF9zdywgc3RydWN0IHNoYWRvd193YWxrZXIsIHdhbGtlcik7Ci0Jc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3cgPSBzdy0+Z3Vlc3Rfd2Fsa2VyOwotCXVuc2lnbmVkIGFjY2VzcyA9IGd3LT5wdF9hY2Nlc3M7Ci0Jc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93X3BhZ2U7Ci0JdTY0IHNwdGU7Ci0JaW50IG1ldGFwaHlzaWNhbDsKLQlnZm5fdCB0YWJsZV9nZm47Ci0JaW50IHI7Ci0JcHRfZWxlbWVudF90IGN1cnJfcHRlOwotCi0JaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKLQkgICAgfHwgKHN3LT5sYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgewotCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIGFjY2VzcywgZ3ctPnB0ZV9hY2Nlc3MgJiBhY2Nlc3MsCi0JCQkgICAgIHN3LT51c2VyX2ZhdWx0LCBzdy0+d3JpdGVfZmF1bHQsCi0JCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCi0JCQkgICAgIHN3LT5wdHdyaXRlLCBzdy0+bGFyZ2VwYWdlLAotCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9HTE9CQUxfTUFTSywKLQkJCSAgICAgZ3ctPmdmbiwgc3ctPnBmbiwgZmFsc2UpOwotCQlzdy0+c3B0ZXAgPSBzcHRlcDsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApICYmICFpc19sYXJnZV9wdGUoKnNwdGVwKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpIHsKLQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKLQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7Ci0JCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOwotCX0KLQotCWlmIChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwgJiYgZ3ctPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgewotCQltZXRhcGh5c2ljYWwgPSAxOwotCQlpZiAoIWlzX2RpcnR5X3B0ZShndy0+cHRlc1tsZXZlbCAtIDFdKSkKLQkJCWFjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7Ci0JCXRhYmxlX2dmbiA9IGdwdGVfdG9fZ2ZuKGd3LT5wdGVzW2xldmVsIC0gMV0pOwotCX0gZWxzZSB7Ci0JCW1ldGFwaHlzaWNhbCA9IDA7Ci0JCXRhYmxlX2dmbiA9IGd3LT50YWJsZV9nZm5bbGV2ZWwgLSAyXTsKLQl9Ci0Jc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgKGd2YV90KWFkZHIsIGxldmVsLTEsCi0JCQkJICAgICAgIG1ldGFwaHlzaWNhbCwgYWNjZXNzLCBzcHRlcCk7Ci0JaWYgKCFtZXRhcGh5c2ljYWwpIHsKLQkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIGd3LT5wdGVfZ3BhW2xldmVsIC0gMl0sCi0JCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKLQkJaWYgKHIgfHwgY3Vycl9wdGUgIT0gZ3ctPnB0ZXNbbGV2ZWwgLSAyXSkgewotCQkJa3ZtX21tdV9wdXRfcGFnZShzaGFkb3dfcGFnZSwgc3B0ZXApOwotCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHN3LT5wZm4pOwotCQkJc3ctPnNwdGVwID0gTlVMTDsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0Jc3B0ZSA9IF9fcGEoc2hhZG93X3BhZ2UtPnNwdCkgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLCi0JCXwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSzsKLQkqc3B0ZXAgPSBzcHRlOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTY0ICpGTkFNRShmZXRjaCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyLAotCQkJIHN0cnVjdCBndWVzdF93YWxrZXIgKmd1ZXN0X3dhbGtlciwKKwkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndywKIAkJCSBpbnQgdXNlcl9mYXVsdCwgaW50IHdyaXRlX2ZhdWx0LCBpbnQgbGFyZ2VwYWdlLAogCQkJIGludCAqcHR3cml0ZSwgcGZuX3QgcGZuKQogewotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHdhbGtlciA9IHsKLQkJLndhbGtlciA9IHsgLmVudHJ5ID0gRk5BTUUoc2hhZG93X3dhbGtfZW50cnkpLCB9LAotCQkuZ3Vlc3Rfd2Fsa2VyID0gZ3Vlc3Rfd2Fsa2VyLAotCQkudXNlcl9mYXVsdCA9IHVzZXJfZmF1bHQsCi0JCS53cml0ZV9mYXVsdCA9IHdyaXRlX2ZhdWx0LAotCQkubGFyZ2VwYWdlID0gbGFyZ2VwYWdlLAotCQkucHR3cml0ZSA9IHB0d3JpdGUsCi0JCS5wZm4gPSBwZm4sCi0JfTsKKwl1bnNpZ25lZCBhY2Nlc3MgPSBndy0+cHRfYWNjZXNzOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNoYWRvd19wYWdlOworCXU2NCBzcHRlLCAqc3B0ZXA7CisJaW50IGRpcmVjdDsKKwlnZm5fdCB0YWJsZV9nZm47CisJaW50IHI7CisJaW50IGxldmVsOworCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOwogCi0JaWYgKCFpc19wcmVzZW50X3B0ZShndWVzdF93YWxrZXItPnB0ZXNbZ3Vlc3Rfd2Fsa2VyLT5sZXZlbCAtIDFdKSkKKwlpZiAoIWlzX3ByZXNlbnRfcHRlKGd3LT5wdGVzW2d3LT5sZXZlbCAtIDFdKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQl3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgYWRkcik7CisJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsIGFkZHIsIGl0ZXJhdG9yKSB7CisJCWxldmVsID0gaXRlcmF0b3IubGV2ZWw7CisJCXNwdGVwID0gaXRlcmF0b3Iuc3B0ZXA7CisJCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCisJCSAgICB8fCAobGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgYWNjZXNzLAorCQkJCSAgICAgZ3ctPnB0ZV9hY2Nlc3MgJiBhY2Nlc3MsCisJCQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKKwkJCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCisJCQkJICAgICBwdHdyaXRlLCBsYXJnZXBhZ2UsCisJCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9HTE9CQUxfTUFTSywKKwkJCQkgICAgIGd3LT5nZm4sIHBmbiwgZmFsc2UpOworCQkJYnJlYWs7CisJCX0KIAotCXJldHVybiB3YWxrZXIuc3B0ZXA7CisJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSAmJiAhaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpIHsKKwkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOworCQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOworCQl9CisKKwkJaWYgKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTAorCQkgICAgJiYgZ3ctPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgeworCQkJZGlyZWN0ID0gMTsKKwkJCWlmICghaXNfZGlydHlfcHRlKGd3LT5wdGVzW2xldmVsIC0gMV0pKQorCQkJCWFjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7CisJCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbihndy0+cHRlc1tsZXZlbCAtIDFdKTsKKwkJfSBlbHNlIHsKKwkJCWRpcmVjdCA9IDA7CisJCQl0YWJsZV9nZm4gPSBndy0+dGFibGVfZ2ZuW2xldmVsIC0gMl07CisJCX0KKwkJc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgYWRkciwgbGV2ZWwtMSwKKwkJCQkJICAgICAgIGRpcmVjdCwgYWNjZXNzLCBzcHRlcCk7CisJCWlmICghZGlyZWN0KSB7CisJCQlyID0ga3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwKKwkJCQkJCSAgZ3ctPnB0ZV9ncGFbbGV2ZWwgLSAyXSwKKwkJCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKKwkJCWlmIChyIHx8IGN1cnJfcHRlICE9IGd3LT5wdGVzW2xldmVsIC0gMl0pIHsKKwkJCQlrdm1fbW11X3B1dF9wYWdlKHNoYWRvd19wYWdlLCBzcHRlcCk7CisJCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCQkJc3B0ZXAgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJc3B0ZSA9IF9fcGEoc2hhZG93X3BhZ2UtPnNwdCkKKwkJCXwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSworCQkJfCBQVF9XUklUQUJMRV9NQVNLIHwgUFRfVVNFUl9NQVNLOworCQkqc3B0ZXAgPSBzcHRlOworCX0KKworCXJldHVybiBzcHRlcDsKIH0KIAogLyoKQEAgLTQ2NSw1NCArNDM5LDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgRk5BTUUoc2hhZG93X2ludmxwZ19lbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3N3LAotCQkJCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsCi0JCQkJICAgICAgdTY0ICpzcHRlcCwgaW50IGxldmVsKQotewotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyICpzdyA9Ci0JCWNvbnRhaW5lcl9vZihfc3csIHN0cnVjdCBzaGFkb3dfd2Fsa2VyLCB3YWxrZXIpOwotCi0JLyogRklYTUU6IHByb3Blcmx5IGhhbmRsZSBpbnZscGcgb24gbGFyZ2UgZ3Vlc3QgcGFnZXMgKi8KLQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCB8fAotCSAgICAoKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSB7Ci0JCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOwotCi0JCXN3LT5wdGVfZ3BhID0gKHNwLT5nZm4gPDwgUEFHRV9TSElGVCk7Ci0JCXN3LT5wdGVfZ3BhICs9IChzcHRlcCAtIHNwLT5zcHQpICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7Ci0KLQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKSB7Ci0JCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKLQkJCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkKLQkJCQktLXZjcHUtPmt2bS0+c3RhdC5scGFnZXM7Ci0JCX0KLQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBGTkFNRShpbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQogeworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgaXRlcmF0b3I7CiAJcHRfZWxlbWVudF90IGdwdGU7Ci0Jc3RydWN0IHNoYWRvd193YWxrZXIgd2Fsa2VyID0gewotCQkud2Fsa2VyID0geyAuZW50cnkgPSBGTkFNRShzaGFkb3dfaW52bHBnX2VudHJ5KSwgfSwKLQkJLnB0ZV9ncGEgPSAtMSwKLQl9OworCWdwYV90IHB0ZV9ncGEgPSAtMTsKKwlpbnQgbGV2ZWw7CisJdTY0ICpzcHRlcDsKKwlpbnQgbmVlZF9mbHVzaCA9IDA7CiAKIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwotCXdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBndmEpOworCisJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsIGd2YSwgaXRlcmF0b3IpIHsKKwkJbGV2ZWwgPSBpdGVyYXRvci5sZXZlbDsKKwkJc3B0ZXAgPSBpdGVyYXRvci5zcHRlcDsKKworCQkvKiBGSVhNRTogcHJvcGVybHkgaGFuZGxlIGludmxwZyBvbiBsYXJnZSBndWVzdCBwYWdlcyAqLworCQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCB8fAorCQkgICAgKChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSkgeworCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGVwKSk7CisKKwkJCXB0ZV9ncGEgPSAoc3AtPmdmbiA8PCBQQUdFX1NISUZUKTsKKwkJCXB0ZV9ncGEgKz0gKHNwdGVwIC0gc3AtPnNwdCkgKiBzaXplb2YocHRfZWxlbWVudF90KTsKKworCQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKSB7CisJCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CisJCQkJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKQorCQkJCQktLXZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CisJCQkJbmVlZF9mbHVzaCA9IDE7CisJCQl9CisJCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG5lZWRfZmx1c2gpCisJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKLQlpZiAod2Fsa2VyLnB0ZV9ncGEgPT0gLTEpCisKKwlpZiAocHRlX2dwYSA9PSAtMSkKIAkJcmV0dXJuOwotCWlmIChrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCB3YWxrZXIucHRlX2dwYSwgJmdwdGUsCisJaWYgKGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIHB0ZV9ncGEsICZncHRlLAogCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCkpKQogCQlyZXR1cm47CiAJaWYgKGlzX3ByZXNlbnRfcHRlKGdwdGUpICYmIChncHRlICYgUFRfQUNDRVNTRURfTUFTSykpIHsKIAkJaWYgKG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUpKQogCQkJcmV0dXJuOwotCQlrdm1fbW11X3B0ZV93cml0ZSh2Y3B1LCB3YWxrZXIucHRlX2dwYSwgKGNvbnN0IHU4ICopJmdwdGUsCisJCWt2bV9tbXVfcHRlX3dyaXRlKHZjcHUsIHB0ZV9ncGEsIChjb25zdCB1OCAqKSZncHRlLAogCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCksIDApOwogCX0KIH0KQEAgLTU0MCw3ICs1MTYsNyBAQAogCXB0X2VsZW1lbnRfdCBwdFsyNTYgLyBzaXplb2YocHRfZWxlbWVudF90KV07CiAJZ3BhX3QgcHRlX2dwYTsKIAotCWlmIChzcC0+cm9sZS5tZXRhcGh5c2ljYWwKKwlpZiAoc3AtPnJvbGUuZGlyZWN0CiAJICAgIHx8IChQVFRZUEUgPT0gMzIgJiYgc3AtPnJvbGUubGV2ZWwgPiBQVF9QQUdFX1RBQkxFX0xFVkVMKSkgewogCQlub25wYWdpbmdfcHJlZmV0Y2hfcGFnZSh2Y3B1LCBzcCk7CiAJCXJldHVybjsKQEAgLTYxOSw3ICs1OTUsNiBAQAogCiAjdW5kZWYgcHRfZWxlbWVudF90CiAjdW5kZWYgZ3Vlc3Rfd2Fsa2VyCi0jdW5kZWYgc2hhZG93X3dhbGtlcgogI3VuZGVmIEZOQU1FCiAjdW5kZWYgUFRfQkFTRV9BRERSX01BU0sKICN1bmRlZiBQVF9JTkRFWApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IDE0NTI4NTEuLjE4MjFjMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTM4LDkgKzM4LDYgQEAKICNkZWZpbmUgSU9QTV9BTExPQ19PUkRFUiAyCiAjZGVmaW5lIE1TUlBNX0FMTE9DX09SREVSIDEKIAotI2RlZmluZSBEUjdfR0RfTUFTSyAoMSA8PCAxMykKLSNkZWZpbmUgRFI2X0JEX01BU0sgKDEgPDwgMTMpCi0KICNkZWZpbmUgU0VHX1RZUEVfTERUIDIKICNkZWZpbmUgU0VHX1RZUEVfQlVTWV9UU1MxNiAzCiAKQEAgLTUwLDYgKzQ3LDE1IEBACiAKICNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUyAofigweDNmVUxMKSkKIAorLyogVHVybiBvbiB0byBnZXQgZGVidWdnaW5nIG91dHB1dCovCisvKiAjZGVmaW5lIE5FU1RFRF9ERUJVRyAqLworCisjaWZkZWYgTkVTVEVEX0RFQlVHCisjZGVmaW5lIG5zdm1fcHJpbnRrKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fSU5GTyBmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBuc3ZtX3ByaW50ayhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKwogLyogZW5hYmxlIE5QVCBmb3IgQU1ENjQgYW5kIFg4NiB3aXRoIFBBRSAqLwogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkKIHN0YXRpYyBib29sIG5wdF9lbmFibGVkID0gdHJ1ZTsKQEAgLTYwLDE0ICs2NiwyOSBAQAogCiBtb2R1bGVfcGFyYW0obnB0LCBpbnQsIFNfSVJVR08pOwogCitzdGF0aWMgaW50IG5lc3RlZCA9IDA7Cittb2R1bGVfcGFyYW0obmVzdGVkLCBpbnQsIFNfSVJVR08pOworCiBzdGF0aWMgdm9pZCBrdm1fcmVwdXRfaXJxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIHN0YXRpYyB2b2lkIHN2bV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAorc3RhdGljIGludCBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBrdm1fb3ZlcnJpZGUpOworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKKwkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKTsKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9jaGVja19leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHVuc2lnbmVkIG5yLAorCQkJCSAgICAgIGJvb2wgaGFzX2Vycm9yX2NvZGUsIHUzMiBlcnJvcl9jb2RlKTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmNwdV9zdm0gKnRvX3N2bShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZih2Y3B1LCBzdHJ1Y3QgdmNwdV9zdm0sIHZjcHUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXJldHVybiBzdm0tPm5lc3RlZF92bWNiOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3BtX2Jhc2U7CiAKIHN0cnVjdCBrdm1fbGR0dHNzX2Rlc2MgewpAQCAtMTU3LDMyICsxNzgsNiBAQAogCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVjcjIiIDo6ICJyIiAodmFsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2RyNih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZHI2OwotCi0JYXNtIHZvbGF0aWxlICgibW92ICUlZHI2LCAlMCIgOiAiPXIiIChkcjYpKTsKLQlyZXR1cm4gZHI2OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZHI2KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjYiIDo6ICJyIiAodmFsKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2RyNyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZHI3OwotCi0JYXNtIHZvbGF0aWxlICgibW92ICUlZHI3LCAlMCIgOiAiPXIiIChkcjcpKTsKLQlyZXR1cm4gZHI3OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZHI3KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjciIDo6ICJyIiAodmFsKSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmb3JjZV9uZXdfYXNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdG9fc3ZtKHZjcHUpLT5hc2lkX2dlbmVyYXRpb24tLTsKQEAgLTE5OCw3ICsxOTMsNyBAQAogCWlmICghbnB0X2VuYWJsZWQgJiYgIShlZmVyICYgRUZFUl9MTUEpKQogCQllZmVyICY9IH5FRkVSX0xNRTsKIAotCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5lZmVyID0gZWZlciB8IE1TUl9FRkVSX1NWTUVfTUFTSzsKKwl0b19zdm0odmNwdSktPnZtY2ItPnNhdmUuZWZlciA9IGVmZXIgfCBFRkVSX1NWTUU7CiAJdmNwdS0+YXJjaC5zaGFkb3dfZWZlciA9IGVmZXI7CiB9CiAKQEAgLTIwNyw2ICsyMDIsMTEgQEAKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAorCS8qIElmIHdlIGFyZSB3aXRoaW4gYSBuZXN0ZWQgVk0gd2UnZCBiZXR0ZXIgI1ZNRVhJVCBhbmQgbGV0IHRoZQorCSAgIGd1ZXN0IGhhbmRsZSB0aGUgZXhjZXB0aW9uICovCisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN2bSwgbnIsIGhhc19lcnJvcl9jb2RlLCBlcnJvcl9jb2RlKSkKKwkJcmV0dXJuOworCiAJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IG5yCiAJCXwgU1ZNX0VWVElOSl9WQUxJRAogCQl8IChoYXNfZXJyb3JfY29kZSA/IFNWTV9FVlRJTkpfVkFMSURfRVJSIDogMCkKQEAgLTI0Miw3ICsyNDIsNyBAQAogCWt2bV9yaXBfd3JpdGUodmNwdSwgc3ZtLT5uZXh0X3JpcCk7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9zdGF0ZSAmPSB+U1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSzsKIAotCXZjcHUtPmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuID0gMTsKKwl2Y3B1LT5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9IChzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbnQgaGFzX3N2bSh2b2lkKQpAQCAtMjUwLDcgKzI1MCw3IEBACiAJY29uc3QgY2hhciAqbXNnOwogCiAJaWYgKCFjcHVfaGFzX3N2bSgmbXNnKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJoYXNfc3ZuOiAlc1xuIiwgbXNnKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGFzX3N2bTogJXNcbiIsIG1zZyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjkyLDcgKzI5Miw3IEBACiAJc3ZtX2RhdGEtPnRzc19kZXNjID0gKHN0cnVjdCBrdm1fbGR0dHNzX2Rlc2MgKikoZ2R0ICsgR0RUX0VOVFJZX1RTUyk7CiAKIAlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOwotCXdybXNybChNU1JfRUZFUiwgZWZlciB8IE1TUl9FRkVSX1NWTUVfTUFTSyk7CisJd3Jtc3JsKE1TUl9FRkVSLCBlZmVyIHwgRUZFUl9TVk1FKTsKIAogCXdybXNybChNU1JfVk1fSFNBVkVfUEEsCiAJICAgICAgIHBhZ2VfdG9fcGZuKHN2bV9kYXRhLT5zYXZlX2FyZWEpIDw8IFBBR0VfU0hJRlQpOwpAQCAtNDE3LDYgKzQxNywxNCBAQAogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpKQogCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX05YKTsKIAorCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfRlhTUl9PUFQpKQorCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX0ZGWFNSKTsKKworCWlmIChuZXN0ZWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBOZXN0ZWQgVmlydHVhbGl6YXRpb24gZW5hYmxlZFxuIik7CisJCWt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfU1ZNRSk7CisJfQorCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJciA9IHN2bV9jcHVfaW5pdChjcHUpOwogCQlpZiAocikKQEAgLTU1OSw3ICs1NjcsNyBAQAogCWluaXRfc3lzX3NlZygmc2F2ZS0+bGR0ciwgU0VHX1RZUEVfTERUKTsKIAlpbml0X3N5c19zZWcoJnNhdmUtPnRyLCBTRUdfVFlQRV9CVVNZX1RTUzE2KTsKIAotCXNhdmUtPmVmZXIgPSBNU1JfRUZFUl9TVk1FX01BU0s7CisJc2F2ZS0+ZWZlciA9IEVGRVJfU1ZNRTsKIAlzYXZlLT5kcjYgPSAweGZmZmYwZmYwOwogCXNhdmUtPmRyNyA9IDB4NDAwOwogCXNhdmUtPnJmbGFncyA9IDI7CkBAIC01OTEsNiArNTk5LDkgQEAKIAkJc2F2ZS0+Y3I0ID0gMDsKIAl9CiAJZm9yY2VfbmV3X2FzaWQoJnN2bS0+dmNwdSk7CisKKwlzdm0tPm5lc3RlZF92bWNiID0gMDsKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgPSBIRl9HSUZfTUFTSzsKIH0KIAogc3RhdGljIGludCBzdm1fdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02MTUsNiArNjI2LDggQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgcGFnZSAqbXNycG1fcGFnZXM7CisJc3RydWN0IHBhZ2UgKmhzYXZlX3BhZ2U7CisJc3RydWN0IHBhZ2UgKm5lc3RlZF9tc3JwbV9wYWdlczsKIAlpbnQgZXJyOwogCiAJc3ZtID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUwpOwpAQCAtNjM3LDE0ICs2NTAsMjUgQEAKIAltc3JwbV9wYWdlcyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIE1TUlBNX0FMTE9DX09SREVSKTsKIAlpZiAoIW1zcnBtX3BhZ2VzKQogCQlnb3RvIHVuaW5pdDsKKworCW5lc3RlZF9tc3JwbV9wYWdlcyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIE1TUlBNX0FMTE9DX09SREVSKTsKKwlpZiAoIW5lc3RlZF9tc3JwbV9wYWdlcykKKwkJZ290byB1bmluaXQ7CisKIAlzdm0tPm1zcnBtID0gcGFnZV9hZGRyZXNzKG1zcnBtX3BhZ2VzKTsKIAlzdm1fdmNwdV9pbml0X21zcnBtKHN2bS0+bXNycG0pOwogCisJaHNhdmVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFoc2F2ZV9wYWdlKQorCQlnb3RvIHVuaW5pdDsKKwlzdm0tPmhzYXZlID0gcGFnZV9hZGRyZXNzKGhzYXZlX3BhZ2UpOworCisJc3ZtLT5uZXN0ZWRfbXNycG0gPSBwYWdlX2FkZHJlc3MobmVzdGVkX21zcnBtX3BhZ2VzKTsKKwogCXN2bS0+dm1jYiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAljbGVhcl9wYWdlKHN2bS0+dm1jYik7CiAJc3ZtLT52bWNiX3BhID0gcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVDsKIAlzdm0tPmFzaWRfZ2VuZXJhdGlvbiA9IDA7Ci0JbWVtc2V0KHN2bS0+ZGJfcmVncywgMCwgc2l6ZW9mKHN2bS0+ZGJfcmVncykpOwogCWluaXRfdm1jYihzdm0pOwogCiAJZnhfaW5pdCgmc3ZtLT52Y3B1KTsKQEAgLTY2OSw2ICs2OTMsOCBAQAogCiAJX19mcmVlX3BhZ2UocGZuX3RvX3BhZ2Uoc3ZtLT52bWNiX3BhID4+IFBBR0VfU0hJRlQpKTsKIAlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKHN2bS0+bXNycG0pLCBNU1JQTV9BTExPQ19PUkRFUik7CisJX19mcmVlX3BhZ2UodmlydF90b19wYWdlKHN2bS0+aHNhdmUpKTsKKwlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKHN2bS0+bmVzdGVkX21zcnBtKSwgTVNSUE1fQUxMT0NfT1JERVIpOwogCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKIAlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHN2bSk7CiB9CkBAIC03MTgsNiArNzQ0LDE2IEBACiAJdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLnJmbGFncyA9IHJmbGFnczsKIH0KIAorc3RhdGljIHZvaWQgc3ZtX3NldF92aW50cihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9IDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSOworfQorCitzdGF0aWMgdm9pZCBzdm1fY2xlYXJfdmludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKK30KKwogc3RhdGljIHN0cnVjdCB2bWNiX3NlZyAqc3ZtX3NlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCiB7CiAJc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzYXZlID0gJnRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZTsKQEAgLTc2MCwyMCArNzk2LDM3IEBACiAJdmFyLT5kYiA9IChzLT5hdHRyaWIgPj4gU1ZNX1NFTEVDVE9SX0RCX1NISUZUKSAmIDE7CiAJdmFyLT5nID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfR19TSElGVCkgJiAxOwogCi0JLyoKLQkgKiBTVk0gYWx3YXlzIHN0b3JlcyAwIGZvciB0aGUgJ0cnIGJpdCBpbiB0aGUgQ1Mgc2VsZWN0b3IgaW4KLQkgKiB0aGUgVk1DQiBvbiBhIFZNRVhJVC4gVGhpcyBodXJ0cyBjcm9zcy12ZW5kb3IgbWlncmF0aW9uOgotCSAqIEludGVsJ3MgVk1FTlRSWSBoYXMgYSBjaGVjayBvbiB0aGUgJ0cnIGJpdC4KLQkgKi8KLQlpZiAoc2VnID09IFZDUFVfU1JFR19DUykKKwlzd2l0Y2ggKHNlZykgeworCWNhc2UgVkNQVV9TUkVHX0NTOgorCQkvKgorCQkgKiBTVk0gYWx3YXlzIHN0b3JlcyAwIGZvciB0aGUgJ0cnIGJpdCBpbiB0aGUgQ1Mgc2VsZWN0b3IgaW4KKwkJICogdGhlIFZNQ0Igb24gYSBWTUVYSVQuIFRoaXMgaHVydHMgY3Jvc3MtdmVuZG9yIG1pZ3JhdGlvbjoKKwkJICogSW50ZWwncyBWTUVOVFJZIGhhcyBhIGNoZWNrIG9uIHRoZSAnRycgYml0LgorCQkgKi8KIAkJdmFyLT5nID0gcy0+bGltaXQgPiAweGZmZmZmOwotCi0JLyoKLQkgKiBXb3JrIGFyb3VuZCBhIGJ1ZyB3aGVyZSB0aGUgYnVzeSBmbGFnIGluIHRoZSB0ciBzZWxlY3RvcgotCSAqIGlzbid0IGV4cG9zZWQKLQkgKi8KLQlpZiAoc2VnID09IFZDUFVfU1JFR19UUikKKwkJYnJlYWs7CisJY2FzZSBWQ1BVX1NSRUdfVFI6CisJCS8qCisJCSAqIFdvcmsgYXJvdW5kIGEgYnVnIHdoZXJlIHRoZSBidXN5IGZsYWcgaW4gdGhlIHRyIHNlbGVjdG9yCisJCSAqIGlzbid0IGV4cG9zZWQKKwkJICovCiAJCXZhci0+dHlwZSB8PSAweDI7CisJCWJyZWFrOworCWNhc2UgVkNQVV9TUkVHX0RTOgorCWNhc2UgVkNQVV9TUkVHX0VTOgorCWNhc2UgVkNQVV9TUkVHX0ZTOgorCWNhc2UgVkNQVV9TUkVHX0dTOgorCQkvKgorCQkgKiBUaGUgYWNjZXNzZWQgYml0IG11c3QgYWx3YXlzIGJlIHNldCBpbiB0aGUgc2VnbWVudAorCQkgKiBkZXNjcmlwdG9yIGNhY2hlLCBhbHRob3VnaCBpdCBjYW4gYmUgY2xlYXJlZCBpbiB0aGUKKwkJICogZGVzY3JpcHRvciwgdGhlIGNhY2hlZCBiaXQgYWx3YXlzIHJlbWFpbnMgYXQgMS4gU2luY2UKKwkJICogSW50ZWwgaGFzIGEgY2hlY2sgb24gdGhpcywgc2V0IGl0IGhlcmUgdG8gc3VwcG9ydAorCQkgKiBjcm9zcy12ZW5kb3IgbWlncmF0aW9uLgorCQkgKi8KKwkJaWYgKCF2YXItPnVudXNhYmxlKQorCQkJdmFyLT50eXBlIHw9IDB4MTsKKwkJYnJlYWs7CisJfQogCiAJdmFyLT51bnVzYWJsZSA9ICF2YXItPnByZXNlbnQ7CiB9CkBAIC05MDUsOSArOTU4LDM3IEBACiAKIH0KIAotc3RhdGljIGludCBzdm1fZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitzdGF0aWMgaW50IHN2bV9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaW50IG9sZF9kZWJ1ZyA9IHZjcHUtPmd1ZXN0X2RlYnVnOworCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOworCisJdmNwdS0+Z3Vlc3RfZGVidWcgPSBkYmctPmNvbnRyb2w7CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJj0KKwkJfigoMSA8PCBEQl9WRUNUT1IpIHwgKDEgPDwgQlBfVkVDVE9SKSk7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgeworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0KKwkJCQkxIDw8IERCX1ZFQ1RPUjsKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9TV19CUCkKKwkJCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PQorCQkJCTEgPDwgQlBfVkVDVE9SOworCX0gZWxzZQorCQl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IDA7CisKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQorCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gZGJnLT5hcmNoLmRlYnVncmVnWzddOworCWVsc2UKKwkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IHZjcHUtPmFyY2guZHI3OworCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgfD0gWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkY7CisJZWxzZSBpZiAob2xkX2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJj0gfihYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzdm1fZ2V0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC05NDksNyArMTAzMCwyOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKQogewotCXVuc2lnbmVkIGxvbmcgdmFsID0gdG9fc3ZtKHZjcHUpLT5kYl9yZWdzW2RyXTsKKwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXN3aXRjaCAoZHIpIHsKKwljYXNlIDAgLi4uIDM6CisJCXZhbCA9IHZjcHUtPmFyY2guZGJbZHJdOworCQlicmVhazsKKwljYXNlIDY6CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApCisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRyNjsKKwkJZWxzZQorCQkJdmFsID0gc3ZtLT52bWNiLT5zYXZlLmRyNjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQorCQkJdmFsID0gdmNwdS0+YXJjaC5kcjc7CisJCWVsc2UKKwkJCXZhbCA9IHN2bS0+dm1jYi0+c2F2ZS5kcjc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCA9IDA7CisJfQorCiAJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCXJldHVybiB2YWw7CiB9CkBAIC05NTksMzMgKzEwNjIsNDAgQEAKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAotCSpleGNlcHRpb24gPSAwOworCUtWTVRSQUNFXzJEKERSX1dSSVRFLCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbHVlLCBoYW5kbGVyKTsKIAotCWlmIChzdm0tPnZtY2ItPnNhdmUuZHI3ICYgRFI3X0dEX01BU0spIHsKLQkJc3ZtLT52bWNiLT5zYXZlLmRyNyAmPSB+RFI3X0dEX01BU0s7Ci0JCXN2bS0+dm1jYi0+c2F2ZS5kcjYgfD0gRFI2X0JEX01BU0s7Ci0JCSpleGNlcHRpb24gPSBEQl9WRUNUT1I7Ci0JCXJldHVybjsKLQl9CisJKmV4Y2VwdGlvbiA9IDA7CiAKIAlzd2l0Y2ggKGRyKSB7CiAJY2FzZSAwIC4uLiAzOgotCQlzdm0tPmRiX3JlZ3NbZHJdID0gdmFsdWU7CisJCXZjcHUtPmFyY2guZGJbZHJdID0gdmFsdWU7CisJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQl2Y3B1LT5hcmNoLmVmZl9kYltkcl0gPSB2YWx1ZTsKIAkJcmV0dXJuOwogCWNhc2UgNCAuLi4gNToKLQkJaWYgKHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9ERSkgeworCQlpZiAodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X0RFKQogCQkJKmV4Y2VwdGlvbiA9IFVEX1ZFQ1RPUjsKLQkJCXJldHVybjsKLQkJfQotCWNhc2UgNzogewotCQlpZiAodmFsdWUgJiB+KCgxVUxMIDw8IDMyKSAtIDEpKSB7CisJCXJldHVybjsKKwljYXNlIDY6CisJCWlmICh2YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgewogCQkJKmV4Y2VwdGlvbiA9IEdQX1ZFQ1RPUjsKIAkJCXJldHVybjsKIAkJfQotCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gdmFsdWU7CisJCXZjcHUtPmFyY2guZHI2ID0gKHZhbHVlICYgRFI2X1ZPTEFUSUxFKSB8IERSNl9GSVhFRF8xOwogCQlyZXR1cm47Ci0JfQorCWNhc2UgNzoKKwkJaWYgKHZhbHVlICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7CisJCQkqZXhjZXB0aW9uID0gR1BfVkVDVE9SOworCQkJcmV0dXJuOworCQl9CisJCXZjcHUtPmFyY2guZHI3ID0gKHZhbHVlICYgRFI3X1ZPTEFUSUxFKSB8IERSN19GSVhFRF8xOworCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSB7CisJCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gdmNwdS0+YXJjaC5kcjc7CisJCQl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0gKHZhbHVlICYgRFI3X0JQX0VOX01BU0spOworCQl9CisJCXJldHVybjsKIAlkZWZhdWx0OgorCQkvKiBGSVhNRTogUG9zc2libGUgY2FzZT8gKi8KIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmV4cGVjdGVkIGRyICV1XG4iLAogCQkgICAgICAgX19mdW5jX18sIGRyKTsKIAkJKmV4Y2VwdGlvbiA9IFVEX1ZFQ1RPUjsKQEAgLTEwMzEsNiArMTE0MSwyNyBAQAogCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcywgZXJyb3JfY29kZSk7CiB9CiAKK3N0YXRpYyBpbnQgZGJfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAoIShzdm0tPnZjcHUuZ3Vlc3RfZGVidWcgJgorCSAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkgeworCQlrdm1fcXVldWVfZXhjZXB0aW9uKCZzdm0tPnZjcHUsIERCX1ZFQ1RPUik7CisJCXJldHVybiAxOworCX0KKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPSBzdm0tPnZtY2ItPnNhdmUuY3MuYmFzZSArIHN2bS0+dm1jYi0+c2F2ZS5yaXA7CisJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBEQl9WRUNUT1I7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnBfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPSBzdm0tPnZtY2ItPnNhdmUuY3MuYmFzZSArIHN2bS0+dm1jYi0+c2F2ZS5yaXA7CisJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBCUF9WRUNUT1I7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdWRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlpbnQgZXI7CkBAIC0xMDgwLDcgKzEyMTEsNyBAQAogc3RhdGljIGludCBpb19pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXUzMiBpb19pbmZvID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xOyAvKiBhZGRyZXNzIHNpemUgYnVnPyAqLwotCWludCBzaXplLCBkb3duLCBpbiwgc3RyaW5nLCByZXA7CisJaW50IHNpemUsIGluLCBzdHJpbmc7CiAJdW5zaWduZWQgcG9ydDsKIAogCSsrc3ZtLT52Y3B1LnN0YXQuaW9fZXhpdHM7CkBAIC0xMDk5LDggKzEyMzAsNiBAQAogCWluID0gKGlvX2luZm8gJiBTVk1fSU9JT19UWVBFX01BU0spICE9IDA7CiAJcG9ydCA9IGlvX2luZm8gPj4gMTY7CiAJc2l6ZSA9IChpb19pbmZvICYgU1ZNX0lPSU9fU0laRV9NQVNLKSA+PiBTVk1fSU9JT19TSVpFX1NISUZUOwotCXJlcCA9IChpb19pbmZvICYgU1ZNX0lPSU9fUkVQX01BU0spICE9IDA7Ci0JZG93biA9IChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19ERikgIT0gMDsKIAogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAJcmV0dXJuIGt2bV9lbXVsYXRlX3Bpbygmc3ZtLT52Y3B1LCBrdm1fcnVuLCBpbiwgc2l6ZSwgcG9ydCk7CkBAIC0xMTM5LDYgKzEyNjgsNTY3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlpZiAoIShzdm0tPnZjcHUuYXJjaC5zaGFkb3dfZWZlciAmIEVGRVJfU1ZNRSkKKwkgICAgfHwgIWlzX3BhZ2luZygmc3ZtLT52Y3B1KSkgeworCQlrdm1fcXVldWVfZXhjZXB0aW9uKCZzdm0tPnZjcHUsIFVEX1ZFQ1RPUik7CisJCXJldHVybiAxOworCX0KKworCWlmIChzdm0tPnZtY2ItPnNhdmUuY3BsKSB7CisJCWt2bV9pbmplY3RfZ3AoJnN2bS0+dmNwdSwgMCk7CisJCXJldHVybiAxOworCX0KKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBuciwKKwkJCQkgICAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKK3sKKwlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX0VYQ1BfQkFTRSArIG5yOworCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlX2hpID0gMDsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xID0gZXJyb3JfY29kZTsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yID0gc3ZtLT52Y3B1LmFyY2guY3IyOworCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtLCBmYWxzZSkpIHsKKwkJCW5zdm1fcHJpbnRrKCJWTWV4aXQgLT4gRVhDUCAweCV4XG4iLCBucik7CisKKwkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXN0ZWRfc3ZtX2ludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJaWYgKGlzX25lc3RlZChzdm0pKSB7CisJCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCEoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfSElGX01BU0spKQorCQkJcmV0dXJuIDA7CisKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX0lOVFI7CisKKwkJaWYgKG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSwgZmFsc2UpKSB7CisJCQluc3ZtX3ByaW50aygiVk1leGl0IC0+IElOVFJcbiIpOworCQkJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbmVzdGVkX3N2bV9nZXRfcGFnZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGdwYSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlwYWdlID0gZ2ZuX3RvX3BhZ2Uoc3ZtLT52Y3B1Lmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoaXNfZXJyb3JfcGFnZShwYWdlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogY291bGQgbm90IGZpbmQgcGFnZSBhdCAweCVsbHhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZ3BhKTsKKwkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKKwkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBwYWdlOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZG8oc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkgdTY0IGFyZzFfZ3BhLCB1NjQgYXJnMl9ncGEsIHZvaWQgKm9wYXF1ZSwKKwkJCSBpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKKwkJCQkJdm9pZCAqYXJnMSwKKwkJCQkJdm9pZCAqYXJnMiwKKwkJCQkJdm9pZCAqb3BhcXVlKSkKK3sKKwlzdHJ1Y3QgcGFnZSAqYXJnMV9wYWdlOworCXN0cnVjdCBwYWdlICphcmcyX3BhZ2UgPSBOVUxMOworCXZvaWQgKmFyZzE7CisJdm9pZCAqYXJnMiA9IE5VTEw7CisJaW50IHJldHZhbDsKKworCWFyZzFfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcxX2dwYSk7CisJaWYoYXJnMV9wYWdlID09IE5VTEwpCisJCXJldHVybiAxOworCisJaWYgKGFyZzJfZ3BhKSB7CisJCWFyZzJfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcyX2dwYSk7CisJCWlmKGFyZzJfcGFnZSA9PSBOVUxMKSB7CisJCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKGFyZzFfcGFnZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWFyZzEgPSBrbWFwX2F0b21pYyhhcmcxX3BhZ2UsIEtNX1VTRVIwKTsKKwlpZiAoYXJnMl9ncGEpCisJCWFyZzIgPSBrbWFwX2F0b21pYyhhcmcyX3BhZ2UsIEtNX1VTRVIxKTsKKworCXJldHZhbCA9IGhhbmRsZXIoc3ZtLCBhcmcxLCBhcmcyLCBvcGFxdWUpOworCisJa3VubWFwX2F0b21pYyhhcmcxLCBLTV9VU0VSMCk7CisJaWYgKGFyZzJfZ3BhKQorCQlrdW5tYXBfYXRvbWljKGFyZzIsIEtNX1VTRVIxKTsKKworCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMV9wYWdlKTsKKwlpZiAoYXJnMl9ncGEpCisJCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMl9wYWdlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfcmVhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKKwkJCQkJdm9pZCAqYXJnMSwKKwkJCQkJdm9pZCAqYXJnMiwKKwkJCQkJdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJYm9vbCBrdm1fb3ZlcnJpZGVzID0gKihib29sICopb3BhcXVlOworCXUzMiBleGl0X2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlOworCisJaWYgKGt2bV9vdmVycmlkZXMpIHsKKwkJc3dpdGNoIChleGl0X2NvZGUpIHsKKwkJY2FzZSBTVk1fRVhJVF9JTlRSOgorCQljYXNlIFNWTV9FWElUX05NSToKKwkJCXJldHVybiAwOworCQkvKiBGb3Igbm93IHdlIGFyZSBhbHdheXMgaGFuZGxpbmcgTlBGcyB3aGVuIHVzaW5nIHRoZW0gKi8KKwkJY2FzZSBTVk1fRVhJVF9OUEY6CisJCQlpZiAobnB0X2VuYWJsZWQpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJLyogV2hlbiB3ZSdyZSBzaGFkb3dpbmcsIHRyYXAgUEZzICovCisJCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SOgorCQkJaWYgKCFucHRfZW5hYmxlZCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGV4aXRfY29kZSkgeworCWNhc2UgU1ZNX0VYSVRfUkVBRF9DUjAgLi4uIFNWTV9FWElUX1JFQURfQ1I4OiB7CisJCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9DUjApOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgJiBjcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX1dSSVRFX0NSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfQ1I4OiB7CisJCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfQ1IwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmIGNyX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfUkVBRF9EUjAgLi4uIFNWTV9FWElUX1JFQURfRFI3OiB7CisJCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9EUjApOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgJiBkcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX1dSSVRFX0RSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfRFI3OiB7CisJCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfRFIwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSAmIGRyX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFIC4uLiBTVk1fRVhJVF9FWENQX0JBU0UgKyAweDFmOiB7CisJCXUzMiBleGNwX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9FWENQX0JBU0UpOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJiBleGNwX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJdTY0IGV4aXRfYml0cyA9IDFVTEwgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX0lOVFIpOworCQluc3ZtX3ByaW50aygiZXhpdCBjb2RlOiAweCV4XG4iLCBleGl0X2NvZGUpOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICYgZXhpdF9iaXRzKQorCQkJcmV0dXJuIDE7CisJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKKwkJCQkgICAgICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiwKKwkJCQkgICAgICAgdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJdTggKm1zcnBtID0gKHU4ICopYXJnMjsKKyAgICAgICAgdTMyIHQwLCB0MTsKKwl1MzIgbXNyID0gc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKKwl1MzIgcGFyYW0gPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgJiAxOworCisJaWYgKCEobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICYgKDFVTEwgPDwgSU5URVJDRVBUX01TUl9QUk9UKSkpCisJCXJldHVybiAwOworCisJc3dpdGNoKG1zcikgeworCWNhc2UgMCAuLi4gMHgxZmZmOgorCQl0MCA9IChtc3IgKiAyKSAlIDg7CisJCXQxID0gbXNyIC8gODsKKwkJYnJlYWs7CisJY2FzZSAweGMwMDAwMDAwIC4uLiAweGMwMDAxZmZmOgorCQl0MCA9ICg4MTkyICsgbXNyIC0gMHhjMDAwMDAwMCkgKiAyOworCQl0MSA9ICh0MCAvIDgpOworCQl0MCAlPSA4OworCQlicmVhazsKKwljYXNlIDB4YzAwMTAwMDAgLi4uIDB4YzAwMTFmZmY6CisJCXQwID0gKDE2Mzg0ICsgbXNyIC0gMHhjMDAxMDAwMCkgKiAyOworCQl0MSA9ICh0MCAvIDgpOworCQl0MCAlPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWlmIChtc3JwbVt0MV0gJiAoKDEgPDwgcGFyYW0pIDw8IHQwKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBrdm1fb3ZlcnJpZGUpCit7CisJYm9vbCBrID0ga3ZtX292ZXJyaWRlOworCisJc3dpdGNoIChzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlKSB7CisJY2FzZSBTVk1fRVhJVF9NU1I6CisJCXJldHVybiBuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYiwKKwkJCQkgICAgIHN2bS0+bmVzdGVkX3ZtY2JfbXNycG0sIE5VTEwsCisJCQkJICAgICBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3IpOworCWRlZmF1bHQ6IGJyZWFrOworCX0KKworCXJldHVybiBuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYiwgMCwgJmssCisJCQkgICAgIG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX3JlYWwpOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3JlYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKmFyZzEsCisJCQkJICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiID0gKHN0cnVjdCB2bWNiICopYXJnMTsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPmhzYXZlOworCXU2NCBuZXN0ZWRfc2F2ZVtdID0geyBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjAsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjQsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+c2F2ZS5lZmVyLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZCwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0LAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYSwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmlvcG1fYmFzZV9wYSwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLnRzY19vZmZzZXQgfTsKKworCS8qIEdpdmUgdGhlIGN1cnJlbnQgdm1jYiB0byB0aGUgZ3Vlc3QgKi8KKwltZW1jcHkobmVzdGVkX3ZtY2IsIHN2bS0+dm1jYiwgc2l6ZW9mKHN0cnVjdCB2bWNiKSk7CisJbmVzdGVkX3ZtY2ItPnNhdmUuY3IwID0gbmVzdGVkX3NhdmVbMF07CisJaWYgKCFucHRfZW5hYmxlZCkKKwkJbmVzdGVkX3ZtY2ItPnNhdmUuY3IzID0gbmVzdGVkX3NhdmVbMV07CisJbmVzdGVkX3ZtY2ItPnNhdmUuY3I0ID0gbmVzdGVkX3NhdmVbMl07CisJbmVzdGVkX3ZtY2ItPnNhdmUuZWZlciA9IG5lc3RlZF9zYXZlWzNdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkID0gbmVzdGVkX3NhdmVbNF07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlID0gbmVzdGVkX3NhdmVbNV07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgPSBuZXN0ZWRfc2F2ZVs2XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGUgPSBuZXN0ZWRfc2F2ZVs3XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IG5lc3RlZF9zYXZlWzhdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCA9IG5lc3RlZF9zYXZlWzldOworCW5lc3RlZF92bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEgPSBuZXN0ZWRfc2F2ZVsxMF07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW9wbV9iYXNlX3BhID0gbmVzdGVkX3NhdmVbMTFdOworCW5lc3RlZF92bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSBuZXN0ZWRfc2F2ZVsxMl07CisKKwkvKiBXZSBhbHdheXMgc2V0IFZfSU5UUl9NQVNLSU5HIGFuZCByZW1lbWJlciB0aGUgb2xkIHZhbHVlIGluIGhmbGFncyAqLworCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICY9IH5WX0lOVFJfTUFTS0lOR19NQVNLOworCisJaWYgKChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICYgVl9JUlFfTUFTSykgJiYKKwkgICAgKG5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IpKSB7CisJCW5zdm1fcHJpbnRrKCJXQVJOSU5HOiBJUlEgMHgleCBzdGlsbCBlbmFibGVkIG9uICNWTUVYSVRcbiIsCisJCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X3ZlY3Rvcik7CisJfQorCisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgY29udHJvbCBlbnRyaWVzICovCisJc3ZtLT52bWNiLT5jb250cm9sID0gaHNhdmUtPmNvbnRyb2w7CisKKwkvKiBLaWxsIGFueSBwZW5kaW5nIGV4Y2VwdGlvbnMgKi8KKwlpZiAoc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPT0gdHJ1ZSkKKwkJbnN2bV9wcmludGsoIldBUk5JTkc6IFBlbmRpbmcgRXhjZXB0aW9uXG4iKTsKKwlzdm0tPnZjcHUuYXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOworCisJLyogUmVzdG9yZSBzZWxlY3RlZCBzYXZlIGVudHJpZXMgKi8KKwlzdm0tPnZtY2ItPnNhdmUuZXMgPSBoc2F2ZS0+c2F2ZS5lczsKKwlzdm0tPnZtY2ItPnNhdmUuY3MgPSBoc2F2ZS0+c2F2ZS5jczsKKwlzdm0tPnZtY2ItPnNhdmUuc3MgPSBoc2F2ZS0+c2F2ZS5zczsKKwlzdm0tPnZtY2ItPnNhdmUuZHMgPSBoc2F2ZS0+c2F2ZS5kczsKKwlzdm0tPnZtY2ItPnNhdmUuZ2R0ciA9IGhzYXZlLT5zYXZlLmdkdHI7CisJc3ZtLT52bWNiLT5zYXZlLmlkdHIgPSBoc2F2ZS0+c2F2ZS5pZHRyOworCXN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgPSBoc2F2ZS0+c2F2ZS5yZmxhZ3M7CisJc3ZtX3NldF9lZmVyKCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmVmZXIpOworCXN2bV9zZXRfY3IwKCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmNyMCB8IFg4Nl9DUjBfUEUpOworCXN2bV9zZXRfY3I0KCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmNyNCk7CisJaWYgKG5wdF9lbmFibGVkKSB7CisJCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSBoc2F2ZS0+c2F2ZS5jcjM7CisJCXN2bS0+dmNwdS5hcmNoLmNyMyA9IGhzYXZlLT5zYXZlLmNyMzsKKwl9IGVsc2UgeworCQlrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjMpOworCX0KKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JBWCwgaHNhdmUtPnNhdmUucmF4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JTUCwgaHNhdmUtPnNhdmUucnNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JJUCwgaHNhdmUtPnNhdmUucmlwKTsKKwlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gMDsKKwlzdm0tPnZtY2ItPnNhdmUuY3BsID0gMDsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbyA9IDA7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX0dJRl9NQVNLOworCS8qIEV4aXQgbmVzdGVkIFNWTSBtb2RlICovCisJc3ZtLT5uZXN0ZWRfdm1jYiA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwluc3ZtX3ByaW50aygiVk1leGl0XG4iKTsKKwlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2IsIDAsCisJCQkgIE5VTEwsIG5lc3RlZF9zdm1fdm1leGl0X3JlYWwpKQorCQlyZXR1cm4gMTsKKworCWt2bV9tbXVfcmVzZXRfY29udGV4dCgmc3ZtLT52Y3B1KTsKKwlrdm1fbW11X2xvYWQoJnN2bS0+dmNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuX21zcnBtKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAorCQkJCSAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCWludCBpOworCXUzMiAqbmVzdGVkX21zcnBtID0gKHUzMiopYXJnMTsKKwlmb3IgKGk9MDsgaTwgUEFHRV9TSVpFICogKDEgPDwgTVNSUE1fQUxMT0NfT1JERVIpIC8gNDsgaSsrKQorCQlzdm0tPm5lc3RlZF9tc3JwbVtpXSA9IHN2bS0+bXNycG1baV0gfCBuZXN0ZWRfbXNycG1baV07CisJc3ZtLT52bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEgPSBfX3BhKHN2bS0+bmVzdGVkX21zcnBtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKmFyZzEsCisJCQkgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJc3RydWN0IHZtY2IgKmhzYXZlID0gc3ZtLT5oc2F2ZTsKKworCS8qIG5lc3RlZF92bWNiIGlzIG91ciBpbmRpY2F0b3IgaWYgbmVzdGVkIFNWTSBpcyBhY3RpdmF0ZWQgKi8KKwlzdm0tPm5lc3RlZF92bWNiID0gc3ZtLT52bWNiLT5zYXZlLnJheDsKKworCS8qIENsZWFyIGludGVybmFsIHN0YXR1cyAqLworCXN2bS0+dmNwdS5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZmFsc2U7CisKKwkvKiBTYXZlIHRoZSBvbGQgdm1jYiwgc28gd2UgZG9uJ3QgbmVlZCB0byBwaWNrIHdoYXQgd2Ugc2F2ZSwgYnV0CisJICAgY2FuIHJlc3RvcmUgZXZlcnl0aGluZyB3aGVuIGEgVk1FWElUIG9jY3VycyAqLworCW1lbWNweShoc2F2ZSwgc3ZtLT52bWNiLCBzaXplb2Yoc3RydWN0IHZtY2IpKTsKKwkvKiBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBDUjMgaW4gdGhlIFNQVCBjYXNlICovCisJaWYgKCFucHRfZW5hYmxlZCkKKwkJaHNhdmUtPnNhdmUuY3IzID0gc3ZtLT52Y3B1LmFyY2guY3IzOworCWhzYXZlLT5zYXZlLmNyNCA9IHN2bS0+dmNwdS5hcmNoLmNyNDsKKwloc2F2ZS0+c2F2ZS5yaXAgPSBzdm0tPm5leHRfcmlwOworCisJaWYgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQorCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfSElGX01BU0s7CisJZWxzZQorCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX0hJRl9NQVNLOworCisJLyogTG9hZCB0aGUgbmVzdGVkIGd1ZXN0IHN0YXRlICovCisJc3ZtLT52bWNiLT5zYXZlLmVzID0gbmVzdGVkX3ZtY2ItPnNhdmUuZXM7CisJc3ZtLT52bWNiLT5zYXZlLmNzID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3M7CisJc3ZtLT52bWNiLT5zYXZlLnNzID0gbmVzdGVkX3ZtY2ItPnNhdmUuc3M7CisJc3ZtLT52bWNiLT5zYXZlLmRzID0gbmVzdGVkX3ZtY2ItPnNhdmUuZHM7CisJc3ZtLT52bWNiLT5zYXZlLmdkdHIgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5nZHRyOworCXN2bS0+dm1jYi0+c2F2ZS5pZHRyID0gbmVzdGVkX3ZtY2ItPnNhdmUuaWR0cjsKKwlzdm0tPnZtY2ItPnNhdmUucmZsYWdzID0gbmVzdGVkX3ZtY2ItPnNhdmUucmZsYWdzOworCXN2bV9zZXRfZWZlcigmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5lZmVyKTsKKwlzdm1fc2V0X2NyMCgmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjApOworCXN2bV9zZXRfY3I0KCZzdm0tPnZjcHUsIG5lc3RlZF92bWNiLT5zYXZlLmNyNCk7CisJaWYgKG5wdF9lbmFibGVkKSB7CisJCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjM7CisJCXN2bS0+dmNwdS5hcmNoLmNyMyA9IG5lc3RlZF92bWNiLT5zYXZlLmNyMzsKKwl9IGVsc2UgeworCQlrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMpOworCQlrdm1fbW11X3Jlc2V0X2NvbnRleHQoJnN2bS0+dmNwdSk7CisJfQorCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjI7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SQVgsIG5lc3RlZF92bWNiLT5zYXZlLnJheCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SU1AsIG5lc3RlZF92bWNiLT5zYXZlLnJzcCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SSVAsIG5lc3RlZF92bWNiLT5zYXZlLnJpcCk7CisJLyogSW4gY2FzZSB3ZSBkb24ndCBldmVuIHJlYWNoIHZjcHVfcnVuLCB0aGUgZmllbGRzIGFyZSBub3QgdXBkYXRlZCAqLworCXN2bS0+dm1jYi0+c2F2ZS5yYXggPSBuZXN0ZWRfdm1jYi0+c2F2ZS5yYXg7CisJc3ZtLT52bWNiLT5zYXZlLnJzcCA9IG5lc3RlZF92bWNiLT5zYXZlLnJzcDsKKwlzdm0tPnZtY2ItPnNhdmUucmlwID0gbmVzdGVkX3ZtY2ItPnNhdmUucmlwOworCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5kcjc7CisJc3ZtLT52bWNiLT5zYXZlLmRyNiA9IG5lc3RlZF92bWNiLT5zYXZlLmRyNjsKKwlzdm0tPnZtY2ItPnNhdmUuY3BsID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3BsOworCisJLyogV2UgZG9uJ3Qgd2FudCBhIG5lc3RlZCBndWVzdCB0byBiZSBtb3JlIHBvd2VyZnVsIHRoYW4gdGhlIGd1ZXN0LAorCSAgIHNvIGFsbCBpbnRlcmNlcHRzIGFyZSBPUmVkICovCisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZCB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZDsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnM7CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdDsKKworCXN2bS0+bmVzdGVkX3ZtY2JfbXNycG0gPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhOworCisJZm9yY2VfbmV3X2FzaWQoJnN2bS0+dmNwdSk7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8gPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9IG5lc3RlZF92bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm9fZXJyOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCB8IFZfSU5UUl9NQVNLSU5HX01BU0s7CisJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgJiBWX0lSUV9NQVNLKSB7CisJCW5zdm1fcHJpbnRrKCJuU1ZNIEluamVjdGluZyBJbnRlcnJ1cHQ6IDB4JXhcbiIsCisJCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCk7CisJfQorCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICYgVl9JTlRSX01BU0tJTkdfTUFTSykKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX1ZJTlRSX01BU0s7CisJZWxzZQorCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX1ZJTlRSX01BU0s7CisKKwluc3ZtX3ByaW50aygiblNWTSBleGl0X2ludF9pbmZvOiAweCV4IHwgaW50X3N0YXRlOiAweCV4XG4iLAorCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbywKKwkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9zdGF0ZSk7CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X3ZlY3RvciA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3I7CisJc3ZtLT52bWNiLT5jb250cm9sLmludF9zdGF0ZSA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludF9zdGF0ZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0OworCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmogJiBTVk1fRVZUSU5KX1ZBTElEKQorCQluc3ZtX3ByaW50aygiSW5qZWN0aW5nIEV2ZW50OiAweCV4XG4iLAorCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2luaik7CisJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IG5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2luajsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VyciA9IG5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2lual9lcnI7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfR0lGX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3RydWN0IHZtY2IgKmZyb21fdm1jYiwgc3RydWN0IHZtY2IgKnRvX3ZtY2IpCit7CisJdG9fdm1jYi0+c2F2ZS5mcyA9IGZyb21fdm1jYi0+c2F2ZS5mczsKKwl0b192bWNiLT5zYXZlLmdzID0gZnJvbV92bWNiLT5zYXZlLmdzOworCXRvX3ZtY2ItPnNhdmUudHIgPSBmcm9tX3ZtY2ItPnNhdmUudHI7CisJdG9fdm1jYi0+c2F2ZS5sZHRyID0gZnJvbV92bWNiLT5zYXZlLmxkdHI7CisJdG9fdm1jYi0+c2F2ZS5rZXJuZWxfZ3NfYmFzZSA9IGZyb21fdm1jYi0+c2F2ZS5rZXJuZWxfZ3NfYmFzZTsKKwl0b192bWNiLT5zYXZlLnN0YXIgPSBmcm9tX3ZtY2ItPnNhdmUuc3RhcjsKKwl0b192bWNiLT5zYXZlLmxzdGFyID0gZnJvbV92bWNiLT5zYXZlLmxzdGFyOworCXRvX3ZtY2ItPnNhdmUuY3N0YXIgPSBmcm9tX3ZtY2ItPnNhdmUuY3N0YXI7CisJdG9fdm1jYi0+c2F2ZS5zZm1hc2sgPSBmcm9tX3ZtY2ItPnNhdmUuc2ZtYXNrOworCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3MgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3M7CisJdG9fdm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3AgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwOworCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2VpcDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1sb2FkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKKwkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXJldHVybiBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoKHN0cnVjdCB2bWNiICopbmVzdGVkX3ZtY2IsIHN2bS0+dm1jYik7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXNhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKm5lc3RlZF92bWNiLAorCQkJICAgICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCit7CisJcmV0dXJuIG5lc3RlZF9zdm1fdm1sb2Fkc2F2ZShzdm0tPnZtY2IsIChzdHJ1Y3Qgdm1jYiAqKW5lc3RlZF92bWNiKTsKK30KKworc3RhdGljIGludCB2bWxvYWRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwluZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgMCwgTlVMTCwgbmVzdGVkX3N2bV92bWxvYWQpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsIE5VTEwsIG5lc3RlZF9zdm1fdm1zYXZlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZtcnVuX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJbnN2bV9wcmludGsoIlZNcnVuXG4iKTsKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsCisJCQkgIE5VTEwsIG5lc3RlZF9zdm1fdm1ydW4pKQorCQlyZXR1cm4gMTsKKworCWlmIChuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYl9tc3JwbSwgMCwKKwkJICAgICAgTlVMTCwgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3RnaV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCisJCXJldHVybiAxOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9HSUZfTUFTSzsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNsZ2lfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX0dJRl9NQVNLOworCisJLyogQWZ0ZXIgYSBDTEdJIG5vIGludGVycnVwdHMgc2hvdWxkIGNvbWUgKi8KKwlzdm1fY2xlYXJfdmludHIoc3ZtKTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JUlFfTUFTSzsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewpAQCAtMTI1MCw2ICsxOTQwLDE1IEBACiAJY2FzZSBNU1JfSUEzMl9MQVNUSU5UVE9JUDoKIAkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUubGFzdF9leGNwX3RvOwogCQlicmVhazsKKwljYXNlIE1TUl9WTV9IU0FWRV9QQToKKwkJKmRhdGEgPSBzdm0tPmhzYXZlX21zcjsKKwkJYnJlYWs7CisJY2FzZSBNU1JfVk1fQ1I6CisJCSpkYXRhID0gMDsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CisJCSpkYXRhID0gMHgwMTAwMDA2NTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGt2bV9nZXRfbXNyX2NvbW1vbih2Y3B1LCBlY3gsIGRhdGEpOwogCX0KQEAgLTEzNDQsNiArMjA0Myw5IEBACiAJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBwZXJmY3RyIHdybXNyOiAweCV4IGRhdGEgMHglbGx4XG4iLCBlY3gsIGRhdGEpOwogCiAJCWJyZWFrOworCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgorCQlzdm0tPmhzYXZlX21zciA9IGRhdGE7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBrdm1fc2V0X21zcl9jb21tb24odmNwdSwgZWN4LCBkYXRhKTsKIAl9CkBAIC0xMzgwLDcgKzIwODIsNyBAQAogewogCUtWTVRSQUNFXzBEKFBFTkRfSU5UUiwgJnN2bS0+dmNwdSwgaGFuZGxlcik7CiAKLQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBJTlRFUkNFUFRfVklOVFIpOworCXN2bV9jbGVhcl92aW50cihzdm0pOwogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsICY9IH5WX0lSUV9NQVNLOwogCS8qCiAJICogSWYgdGhlIHVzZXIgc3BhY2Ugd2FpdHMgdG8gaW5qZWN0IGludGVycnVwdHMsIGV4aXQgYXMgc29vbiBhcwpAQCAtMTQxNyw2ICsyMTE5LDggQEAKIAlbU1ZNX0VYSVRfV1JJVEVfRFIzXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dSSVRFX0RSNV0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9EUjddCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgREJfVkVDVE9SXQk9IGRiX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgQlBfVkVDVE9SXQk9IGJwX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SXQk9IHVkX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SXSAJPSBwZl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIE5NX1ZFQ1RPUl0gCT0gbm1faW50ZXJjZXB0aW9uLApAQCAtMTQzNiwxMiArMjE0MCwxMiBAQAogCVtTVk1fRVhJVF9NU1JdCQkJCT0gbXNyX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfVEFTS19TV0lUQ0hdCQkJPSB0YXNrX3N3aXRjaF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1NIVVRET1dOXQkJCT0gc2h1dGRvd25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9WTVJVTl0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WTVJVTl0JCQk9IHZtcnVuX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfVk1NQ0FMTF0JCQk9IHZtbWNhbGxfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9WTUxPQURdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfVk1TQVZFXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1NUR0ldCQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX0NMR0ldCQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1ZNTE9BRF0JCQk9IHZtbG9hZF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1ZNU0FWRV0JCQk9IHZtc2F2ZV9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1NUR0ldCQkJCT0gc3RnaV9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0NMR0ldCQkJCT0gY2xnaV9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1NLSU5JVF0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XQklOVkRdICAgICAgICAgICAgICAgICAgICAgICA9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9NT05JVE9SXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCkBAIC0xNDU3LDYgKzIxNjEsMTcgQEAKIAlLVk1UUkFDRV8zRChWTUVYSVQsIHZjcHUsIGV4aXRfY29kZSwgKHUzMilzdm0tPnZtY2ItPnNhdmUucmlwLAogCQkgICAgKHUzMikoKHU2NClzdm0tPnZtY2ItPnNhdmUucmlwID4+IDMyKSwgZW50cnlleGl0KTsKIAorCWlmIChpc19uZXN0ZWQoc3ZtKSkgeworCQluc3ZtX3ByaW50aygibmVzdGVkIGhhbmRsZV9leGl0OiAweCV4IHwgMHglbHggfCAweCVseCB8IDB4JWx4XG4iLAorCQkJICAgIGV4aXRfY29kZSwgc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xLAorCQkJICAgIHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiwgc3ZtLT52bWNiLT5zYXZlLnJpcCk7CisJCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIHRydWUpKSB7CisJCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOworCQkJbnN2bV9wcmludGsoIi0+ICNWTUVYSVRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKIAlpZiAobnB0X2VuYWJsZWQpIHsKIAkJaW50IG1tdV9yZWxvYWQgPSAwOwogCQlpZiAoKHZjcHUtPmFyY2guY3IwIF4gc3ZtLT52bWNiLT5zYXZlLmNyMCkgJiBYODZfQ1IwX1BHKSB7CkBAIC0xNTQ0LDYgKzIyNTksOCBAQAogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCisJbmVzdGVkX3N2bV9pbnRyKHN2bSk7CisKIAlzdm1faW5qZWN0X2lycShzdm0sIGlycSk7CiB9CiAKQEAgLTE1ODksMTggKzIzMDYsMjMgQEAKIAlpZiAoIWt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKIAkJZ290byBvdXQ7CiAKKwlpZiAobmVzdGVkX3N2bV9pbnRyKHN2bSkpCisJCWdvdG8gb3V0OworCisJaWYgKCEoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spKQorCQlnb3RvIG91dDsKKwogCWlmICghKHZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikgfHwKIAkgICAgKHZtY2ItPmNvbnRyb2wuaW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykgfHwKIAkgICAgKHZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qICYgU1ZNX0VWVElOSl9WQUxJRCkpIHsKIAkJLyogdW5hYmxlIHRvIGRlbGl2ZXIgaXJxLCBzZXQgcGVuZGluZyBpcnEgKi8KLQkJdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgfD0gKDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKKwkJc3ZtX3NldF92aW50cihzdm0pOwogCQlzdm1faW5qZWN0X2lycShzdm0sIDB4MCk7CiAJCWdvdG8gb3V0OwogCX0KIAkvKiBPa2F5LCB3ZSBjYW4gZGVsaXZlciB0aGUgaW50ZXJydXB0OiBncmFiIGl0IGFuZCB1cGRhdGUgUElDIHN0YXRlLiAqLwogCWludHJfdmVjdG9yID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpOwogCXN2bV9pbmplY3RfaXJxKHN2bSwgaW50cl92ZWN0b3IpOwotCWt2bV90aW1lcl9pbnRyX3Bvc3QodmNwdSwgaW50cl92ZWN0b3IpOwogb3V0OgogCXVwZGF0ZV9jcjhfaW50ZXJjZXB0KHZjcHUpOwogfQpAQCAtMTYxNiw3ICsyMzM4LDggQEAKIAl9CiAKIAlzdm0tPnZjcHUuYXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPQotCQkhKGNvbnRyb2wtPmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spOworCQkhKGNvbnRyb2wtPmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spICYmCisJCSAoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fZG9faW5qZWN0X3ZlY3RvcihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKQEAgLTE2MzgsOSArMjM2MSwxMyBAQAogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZzdm0tPnZtY2ItPmNvbnRyb2w7CiAKKwlpZiAobmVzdGVkX3N2bV9pbnRyKHN2bSkpCisJCXJldHVybjsKKwogCXN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9CiAJCSghKGNvbnRyb2wtPmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spICYmCi0JCSAoc3ZtLT52bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpKTsKKwkJIChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikgJiYKKwkJIChzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSykpOwogCiAJaWYgKHN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiAmJiBzdm0tPnZjcHUuYXJjaC5pcnFfc3VtbWFyeSkKIAkJLyoKQEAgLTE2NTMsOSArMjM4MCw5IEBACiAJICovCiAJaWYgKCFzdm0tPnZjcHUuYXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKIAkgICAgKHN2bS0+dmNwdS5hcmNoLmlycV9zdW1tYXJ5IHx8IGt2bV9ydW4tPnJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdykpCi0JCWNvbnRyb2wtPmludGVyY2VwdCB8PSAxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUjsKLQkgZWxzZQotCQljb250cm9sLT5pbnRlcmNlcHQgJj0gfigxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUik7CisJCXN2bV9zZXRfdmludHIoc3ZtKTsKKwllbHNlCisJCXN2bV9jbGVhcl92aW50cihzdm0pOwogfQogCiBzdGF0aWMgaW50IHN2bV9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcikKQEAgLTE2NjMsMjIgKzIzOTAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYXZlX2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZGJfcmVncykKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjAsICUwIiA6ICI9ciIoZGJfcmVnc1swXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMSwgJTAiIDogIj1yIihkYl9yZWdzWzFdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUlZHIyLCAlMCIgOiAiPXIiKGRiX3JlZ3NbMl0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjMsICUwIiA6ICI9ciIoZGJfcmVnc1szXSkpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZGJfcmVncykKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIwIiA6IDogInIiKGRiX3JlZ3NbMF0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIxIiA6IDogInIiKGRiX3JlZ3NbMV0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIyIiA6IDogInIiKGRiX3JlZ3NbMl0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIzIiA6IDogInIiKGRiX3JlZ3NbM10pKTsKLX0KLQogc3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZm9yY2VfbmV3X2FzaWQodmNwdSk7CkBAIC0xNzM3LDE5ICsyNDQ4LDEyIEBACiAJZ3Nfc2VsZWN0b3IgPSBrdm1fcmVhZF9ncygpOwogCWxkdF9zZWxlY3RvciA9IGt2bV9yZWFkX2xkdCgpOwogCXN2bS0+aG9zdF9jcjIgPSBrdm1fcmVhZF9jcjIoKTsKLQlzdm0tPmhvc3RfZHI2ID0gcmVhZF9kcjYoKTsKLQlzdm0tPmhvc3RfZHI3ID0gcmVhZF9kcjcoKTsKLQlzdm0tPnZtY2ItPnNhdmUuY3IyID0gdmNwdS0+YXJjaC5jcjI7CisJaWYgKCFpc19uZXN0ZWQoc3ZtKSkKKwkJc3ZtLT52bWNiLT5zYXZlLmNyMiA9IHZjcHUtPmFyY2guY3IyOwogCS8qIHJlcXVpcmVkIGZvciBsaXZlIG1pZ3JhdGlvbiB3aXRoIE5QVCAqLwogCWlmIChucHRfZW5hYmxlZCkKIAkJc3ZtLT52bWNiLT5zYXZlLmNyMyA9IHZjcHUtPmFyY2guY3IzOwogCi0JaWYgKHN2bS0+dm1jYi0+c2F2ZS5kcjcgJiAweGZmKSB7Ci0JCXdyaXRlX2RyNygwKTsKLQkJc2F2ZV9kYl9yZWdzKHN2bS0+aG9zdF9kYl9yZWdzKTsKLQkJbG9hZF9kYl9yZWdzKHN2bS0+ZGJfcmVncyk7Ci0JfQotCiAJY2xnaSgpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtMTgyNSwxNiArMjUyOSwxMSBAQAogI2VuZGlmCiAJCSk7CiAKLQlpZiAoKHN2bS0+dm1jYi0+c2F2ZS5kcjcgJiAweGZmKSkKLQkJbG9hZF9kYl9yZWdzKHN2bS0+aG9zdF9kYl9yZWdzKTsKLQogCXZjcHUtPmFyY2guY3IyID0gc3ZtLT52bWNiLT5zYXZlLmNyMjsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBzdm0tPnZtY2ItPnNhdmUucmF4OwogCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yc3A7CiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdID0gc3ZtLT52bWNiLT5zYXZlLnJpcDsKIAotCXdyaXRlX2RyNihzdm0tPmhvc3RfZHI2KTsKLQl3cml0ZV9kcjcoc3ZtLT5ob3N0X2RyNyk7CiAJa3ZtX3dyaXRlX2NyMihzdm0tPmhvc3RfY3IyKTsKIAogCWt2bV9sb2FkX2ZzKGZzX3NlbGVjdG9yKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCA2MjU5ZDc0Li5iYjQ4MTMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC05MSw2ICs5MSw3IEBACiAJfSBybW9kZTsKIAlpbnQgdnBpZDsKIAlib29sIGVtdWxhdGlvbl9yZXF1aXJlZDsKKwllbnVtIGVtdWxhdGlvbl9yZXN1bHQgaW52YWxpZF9zdGF0ZV9lbXVsYXRpb25fcmVzdWx0OwogCiAJLyogU3VwcG9ydCBmb3Igdm5taS1sZXNzIENQVXMgKi8KIAlpbnQgc29mdF92bm1pX2Jsb2NrZWQ7CkBAIC0xODksMjEgKzE5MCwyMSBAQAogewogCXJldHVybiAoaW50cl9pbmZvICYgKElOVFJfSU5GT19JTlRSX1RZUEVfTUFTSyB8IElOVFJfSU5GT19WRUNUT1JfTUFTSyB8CiAJCQkgICAgIElOVFJfSU5GT19WQUxJRF9NQVNLKSkgPT0KLQkJKElOVFJfVFlQRV9FWENFUFRJT04gfCBQRl9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCShJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04gfCBQRl9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX25vX2RldmljZSh1MzIgaW50cl9pbmZvKQogewogCXJldHVybiAoaW50cl9pbmZvICYgKElOVFJfSU5GT19JTlRSX1RZUEVfTUFTSyB8IElOVFJfSU5GT19WRUNUT1JfTUFTSyB8CiAJCQkgICAgIElOVFJfSU5GT19WQUxJRF9NQVNLKSkgPT0KLQkJKElOVFJfVFlQRV9FWENFUFRJT04gfCBOTV9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCShJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04gfCBOTV9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2ludmFsaWRfb3Bjb2RlKHUzMiBpbnRyX2luZm8pCiB7CiAJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLIHwKIAkJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spKSA9PQotCQkoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IFVEX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJKElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8IFVEX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfZXh0ZXJuYWxfaW50ZXJydXB0KHUzMiBpbnRyX2luZm8pCkBAIC00ODAsOCArNDgxLDEzIEBACiAJZWIgPSAoMXUgPDwgUEZfVkVDVE9SKSB8ICgxdSA8PCBVRF9WRUNUT1IpOwogCWlmICghdmNwdS0+ZnB1X2FjdGl2ZSkKIAkJZWIgfD0gMXUgPDwgTk1fVkVDVE9SOwotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgeworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfU1dfQlApCisJCQllYiB8PSAxdSA8PCBCUF9WRUNUT1I7CisJfQogCWlmICh2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkKIAkJZWIgPSB+MDsKIAlpZiAodm1fbmVlZF9lcHQoKSkKQEAgLTc0NywyOSArNzUzLDMzIEBACiAJCQkJYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisJdTMyIGludHJfaW5mbyA9IG5yIHwgSU5UUl9JTkZPX1ZBTElEX01BU0s7CiAKLQlpZiAoaGFzX2Vycm9yX2NvZGUpCisJaWYgKGhhc19lcnJvcl9jb2RlKSB7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwgZXJyb3JfY29kZSk7CisJCWludHJfaW5mbyB8PSBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0s7CisJfQogCiAJaWYgKHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKSB7CiAJCXZteC0+cm1vZGUuaXJxLnBlbmRpbmcgPSB0cnVlOwogCQl2bXgtPnJtb2RlLmlycS52ZWN0b3IgPSBucjsKIAkJdm14LT5ybW9kZS5pcnEucmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwotCQlpZiAobnIgPT0gQlBfVkVDVE9SKQorCQlpZiAobnIgPT0gQlBfVkVDVE9SIHx8IG5yID09IE9GX1ZFQ1RPUikKIAkJCXZteC0+cm1vZGUuaXJxLnJpcCsrOwotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAotCQkJICAgICBuciB8IElOVFJfVFlQRV9TT0ZUX0lOVFIKLQkJCSAgICAgfCAoaGFzX2Vycm9yX2NvZGUgPyBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0sgOiAwKQotCQkJICAgICB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9TT0ZUX0lOVFI7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsIGludHJfaW5mbyk7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sIDEpOwogCQlrdm1fcmlwX3dyaXRlKHZjcHUsIHZteC0+cm1vZGUuaXJxLnJpcCAtIDEpOwogCQlyZXR1cm47CiAJfQogCi0Jdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKLQkJICAgICBuciB8IElOVFJfVFlQRV9FWENFUFRJT04KLQkJICAgICB8IChoYXNfZXJyb3JfY29kZSA/IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSyA6IDApCi0JCSAgICAgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJaWYgKG5yID09IEJQX1ZFQ1RPUiB8fCBuciA9PSBPRl9WRUNUT1IpIHsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7CisJCWludHJfaW5mbyB8PSBJTlRSX1RZUEVfU09GVF9FWENFUFRJT047CisJfSBlbHNlCisJCWludHJfaW5mbyB8PSBJTlRSX1RZUEVfSEFSRF9FWENFUFRJT047CisKKwl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELCBpbnRyX2luZm8pOwogfQogCiBzdGF0aWMgYm9vbCB2bXhfZXhjZXB0aW9uX2luamVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTg1NiwxMSArODY2LDggQEAKICAqIHdyaXRlcyAnZ3Vlc3RfdHNjJyBpbnRvIGd1ZXN0J3MgdGltZXN0YW1wIGNvdW50ZXIgInJlZ2lzdGVyIgogICogZ3Vlc3RfdHNjID0gaG9zdF90c2MgKyB0c2Nfb2Zmc2V0ID09PiB0c2Nfb2Zmc2V0ID0gZ3Vlc3RfdHNjIC0gaG9zdF90c2MKICAqLwotc3RhdGljIHZvaWQgZ3Vlc3Rfd3JpdGVfdHNjKHU2NCBndWVzdF90c2MpCitzdGF0aWMgdm9pZCBndWVzdF93cml0ZV90c2ModTY0IGd1ZXN0X3RzYywgdTY0IGhvc3RfdHNjKQogewotCXU2NCBob3N0X3RzYzsKLQotCXJkdHNjbGwoaG9zdF90c2MpOwogCXZtY3Nfd3JpdGU2NChUU0NfT0ZGU0VULCBndWVzdF90c2MgLSBob3N0X3RzYyk7CiB9CiAKQEAgLTkwMyw2ICs5MTAsNyBAQAogCQlkYXRhID0gdm1jc19yZWFkbChHVUVTVF9TWVNFTlRFUl9FU1ApOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQl2bXhfbG9hZF9ob3N0X3N0YXRlKHRvX3ZteCh2Y3B1KSk7CiAJCW1zciA9IGZpbmRfbXNyX2VudHJ5KHRvX3ZteCh2Y3B1KSwgbXNyX2luZGV4KTsKIAkJaWYgKG1zcikgewogCQkJZGF0YSA9IG1zci0+ZGF0YTsKQEAgLTkyNCwxNCArOTMyLDE1IEBACiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IGt2bV9tc3JfZW50cnkgKm1zcjsKKwl1NjQgaG9zdF90c2M7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKG1zcl9pbmRleCkgewotI2lmZGVmIENPTkZJR19YODZfNjQKIAljYXNlIE1TUl9FRkVSOgogCQl2bXhfbG9hZF9ob3N0X3N0YXRlKHZteCk7CiAJCXJldCA9IGt2bV9zZXRfbXNyX2NvbW1vbih2Y3B1LCBtc3JfaW5kZXgsIGRhdGEpOwogCQlicmVhazsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiAJY2FzZSBNU1JfRlNfQkFTRToKIAkJdm1jc193cml0ZWwoR1VFU1RfRlNfQkFTRSwgZGF0YSk7CiAJCWJyZWFrOwpAQCAtOTQ5LDcgKzk1OCw4IEBACiAJCXZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VTUCwgZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOgotCQlndWVzdF93cml0ZV90c2MoZGF0YSk7CisJCXJkdHNjbGwoaG9zdF90c2MpOworCQlndWVzdF93cml0ZV90c2MoZGF0YSwgaG9zdF90c2MpOwogCQlicmVhazsKIAljYXNlIE1TUl9QNl9QRVJGQ1RSMDoKIAljYXNlIE1TUl9QNl9QRVJGQ1RSMToKQEAgLTk5OCw0MCArMTAwOCwyOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBzZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitzdGF0aWMgaW50IHNldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQl1bnNpZ25lZCBsb25nIGRyNyA9IDB4NDAwOwotCWludCBvbGRfc2luZ2xlc3RlcDsKKwlpbnQgb2xkX2RlYnVnID0gdmNwdS0+Z3Vlc3RfZGVidWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW9sZF9zaW5nbGVzdGVwID0gdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcDsKKwl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IGRiZy0+Y29udHJvbDsKKwlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19FTkFCTEUpKQorCQl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IDA7CiAKLQl2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkID0gZGJnLT5lbmFibGVkOwotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKSB7Ci0JCWludCBpOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApCisJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgZGJnLT5hcmNoLmRlYnVncmVnWzddKTsKKwllbHNlCisJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdmNwdS0+YXJjaC5kcjcpOwogCi0JCWRyNyB8PSAweDIwMDsgIC8qIGV4YWN0ICovCi0JCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKLQkJCWlmICghZGJnLT5icmVha3BvaW50c1tpXS5lbmFibGVkKQotCQkJCWNvbnRpbnVlOwotCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7Ci0JCQlkcjcgfD0gMiA8PCAoaSoyKTsgICAgLyogZ2xvYmFsIGVuYWJsZSAqLwotCQkJZHI3IHw9IDAgPDwgKGkqNCsxNik7IC8qIGV4ZWN1dGlvbiBicmVha3BvaW50ICovCi0JCX0KLQotCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwID0gZGJnLT5zaW5nbGVzdGVwOwotCX0gZWxzZQotCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwID0gMDsKLQotCWlmIChvbGRfc2luZ2xlc3RlcCAmJiAhdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCWZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCWZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQlmbGFncyB8PSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRjsKKwllbHNlIGlmIChvbGRfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKIAkJZmxhZ3MgJj0gfihYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRik7Ci0JCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwotCX0KKwl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIGZsYWdzKTsKIAogCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOwotCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgZHI3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQzMiw2ICsxNDMwLDI5IEBACiAJaW5pdF9ybW9kZSh2Y3B1LT5rdm0pOwogfQogCitzdGF0aWMgdm9pZCB2bXhfc2V0X2VmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcikKK3sKKwlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKKwlzdHJ1Y3Qga3ZtX21zcl9lbnRyeSAqbXNyID0gZmluZF9tc3JfZW50cnkodm14LCBNU1JfRUZFUik7CisKKwl2Y3B1LT5hcmNoLnNoYWRvd19lZmVyID0gZWZlcjsKKwlpZiAoIW1zcikKKwkJcmV0dXJuOworCWlmIChlZmVyICYgRUZFUl9MTUEpIHsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAorCQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykgfAorCQkJICAgICBWTV9FTlRSWV9JQTMyRV9NT0RFKTsKKwkJbXNyLT5kYXRhID0gZWZlcjsKKwl9IGVsc2UgeworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCisJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSAmCisJCQkgICAgIH5WTV9FTlRSWV9JQTMyRV9NT0RFKTsKKworCQltc3ItPmRhdGEgPSBlZmVyICYgfkVGRVJfTE1FOworCX0KKwlzZXR1cF9tc3JzKHZteCk7Cit9CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKIHN0YXRpYyB2b2lkIGVudGVyX2xtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE0NDYsMTMgKzE0NjcsOCBAQAogCQkJICAgICAoZ3Vlc3RfdHJfYXIgJiB+QVJfVFlQRV9NQVNLKQogCQkJICAgICB8IEFSX1RZUEVfQlVTWV82NF9UU1MpOwogCX0KLQogCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgfD0gRUZFUl9MTUE7Ci0KLQlmaW5kX21zcl9lbnRyeSh0b192bXgodmNwdSksIE1TUl9FRkVSKS0+ZGF0YSB8PSBFRkVSX0xNQSB8IEVGRVJfTE1FOwotCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKLQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykKLQkJICAgICB8IFZNX0VOVFJZX0lBMzJFX01PREUpOworCXZteF9zZXRfZWZlcih2Y3B1LCB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgZXhpdF9sbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xNjExLDMwICsxNjI3LDYgQEAKIAl2bWNzX3dyaXRlbChHVUVTVF9DUjQsIGh3X2NyNCk7CiB9CiAKLXN0YXRpYyB2b2lkIHZteF9zZXRfZWZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKQotewotCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCXN0cnVjdCBrdm1fbXNyX2VudHJ5ICptc3IgPSBmaW5kX21zcl9lbnRyeSh2bXgsIE1TUl9FRkVSKTsKLQotCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgPSBlZmVyOwotCWlmICghbXNyKQotCQlyZXR1cm47Ci0JaWYgKGVmZXIgJiBFRkVSX0xNQSkgewotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCi0JCQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykgfAotCQkJCSAgICAgVk1fRU5UUllfSUEzMkVfTU9ERSk7Ci0JCW1zci0+ZGF0YSA9IGVmZXI7Ci0KLQl9IGVsc2UgewotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCi0JCQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykgJgotCQkJCSAgICAgflZNX0VOVFJZX0lBMzJFX01PREUpOwotCi0JCW1zci0+ZGF0YSA9IGVmZXIgJiB+RUZFUl9MTUU7Ci0JfQotCXNldHVwX21zcnModm14KTsKLX0KLQogc3RhdGljIHU2NCB2bXhfZ2V0X3NlZ21lbnRfYmFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCiB7CiAJc3RydWN0IGt2bV92bXhfc2VnbWVudF9maWVsZCAqc2YgPSAma3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddOwpAQCAtMTY1Miw3ICsxNjQ0LDcgQEAKIAl2YXItPmxpbWl0ID0gdm1jc19yZWFkMzIoc2YtPmxpbWl0KTsKIAl2YXItPnNlbGVjdG9yID0gdm1jc19yZWFkMTYoc2YtPnNlbGVjdG9yKTsKIAlhciA9IHZtY3NfcmVhZDMyKHNmLT5hcl9ieXRlcyk7Ci0JaWYgKGFyICYgQVJfVU5VU0FCTEVfTUFTSykKKwlpZiAoKGFyICYgQVJfVU5VU0FCTEVfTUFTSykgJiYgIWVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKIAkJYXIgPSAwOwogCXZhci0+dHlwZSA9IGFyICYgMTU7CiAJdmFyLT5zID0gKGFyID4+IDQpICYgMTsKQEAgLTE3ODcsMTQgKzE3NzksMTYgQEAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOwogCWNzX3JwbCA9IGNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CiAKKwlpZiAoY3MudW51c2FibGUpCisJCXJldHVybiBmYWxzZTsKIAlpZiAofmNzLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9BQ0NFU1NFU19NQVNLKSkKIAkJcmV0dXJuIGZhbHNlOwogCWlmICghY3MucykKIAkJcmV0dXJuIGZhbHNlOwotCWlmICghKH5jcy50eXBlICYgKEFSX1RZUEVfQ09ERV9NQVNLfEFSX1RZUEVfV1JJVEVBQkxFX01BU0spKSkgeworCWlmIChjcy50eXBlICYgQVJfVFlQRV9XUklURUFCTEVfTUFTSykgewogCQlpZiAoY3MuZHBsID4gY3NfcnBsKQogCQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSBpZiAoY3MudHlwZSAmIEFSX1RZUEVfQ09ERV9NQVNLKSB7CisJfSBlbHNlIHsKIAkJaWYgKGNzLmRwbCAhPSBjc19ycGwpCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTgxMyw3ICsxODA3LDkgQEAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnNzLCBWQ1BVX1NSRUdfU1MpOwogCXNzX3JwbCA9IHNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CiAKLQlpZiAoKHNzLnR5cGUgIT0gMykgfHwgKHNzLnR5cGUgIT0gNykpCisJaWYgKHNzLnVudXNhYmxlKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoc3MudHlwZSAhPSAzICYmIHNzLnR5cGUgIT0gNykKIAkJcmV0dXJuIGZhbHNlOwogCWlmICghc3MucykKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTgzMyw2ICsxODI5LDggQEAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnZhciwgc2VnKTsKIAlycGwgPSB2YXIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKIAorCWlmICh2YXIudW51c2FibGUpCisJCXJldHVybiB0cnVlOwogCWlmICghdmFyLnMpCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXZhci5wcmVzZW50KQpAQCAtMTg1NCw5ICsxODUyLDExIEBACiAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnRyLCBWQ1BVX1NSRUdfVFIpOwogCisJaWYgKHRyLnVudXNhYmxlKQorCQlyZXR1cm4gZmFsc2U7CiAJaWYgKHRyLnNlbGVjdG9yICYgU0VMRUNUT1JfVElfTUFTSykJLyogVEkgPSAxICovCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoKHRyLnR5cGUgIT0gMykgfHwgKHRyLnR5cGUgIT0gMTEpKSAvKiBUT0RPOiBDaGVjayBpZiBndWVzdCBpcyBpbiBJQTMyZSBtb2RlICovCisJaWYgKHRyLnR5cGUgIT0gMyAmJiB0ci50eXBlICE9IDExKSAvKiBUT0RPOiBDaGVjayBpZiBndWVzdCBpcyBpbiBJQTMyZSBtb2RlICovCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXRyLnByZXNlbnQpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE4NzAsNiArMTg3MCw4IEBACiAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmxkdHIsIFZDUFVfU1JFR19MRFRSKTsKIAorCWlmIChsZHRyLnVudXNhYmxlKQorCQlyZXR1cm4gdHJ1ZTsKIAlpZiAobGR0ci5zZWxlY3RvciAmIFNFTEVDVE9SX1RJX01BU0spCS8qIFRJID0gMSAqLwogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGxkdHIudHlwZSAhPSAyKQpAQCAtMjExMSw3ICsyMTEzLDcgQEAKIHsKIAl1MzIgaG9zdF9zeXNlbnRlcl9jcywgbXNyX2xvdywgbXNyX2hpZ2g7CiAJdTMyIGp1bms7Ci0JdTY0IGhvc3RfcGF0OworCXU2NCBob3N0X3BhdCwgdHNjX3RoaXMsIHRzY19iYXNlOwogCXVuc2lnbmVkIGxvbmcgYTsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBkdDsKIAlpbnQgaTsKQEAgLTIyMzksNiArMjI0MSwxMiBAQAogCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH4wVUwpOwogCXZtY3Nfd3JpdGVsKENSNF9HVUVTVF9IT1NUX01BU0ssIEtWTV9HVUVTVF9DUjRfTUFTSyk7CiAKKwl0c2NfYmFzZSA9IHZteC0+dmNwdS5rdm0tPmFyY2gudm1faW5pdF90c2M7CisJcmR0c2NsbCh0c2NfdGhpcyk7CisJaWYgKHRzY190aGlzIDwgdm14LT52Y3B1Lmt2bS0+YXJjaC52bV9pbml0X3RzYykKKwkJdHNjX2Jhc2UgPSB0c2NfdGhpczsKKworCWd1ZXN0X3dyaXRlX3RzYygwLCB0c2NfYmFzZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMTgsNyArMjMyNiw2IEBACiAJCWt2bV9yaXBfd3JpdGUodmNwdSwgMCk7CiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU1AsIDApOwogCi0JLyogdG9kbzogZHIwID0gZHIxID0gZHIyID0gZHIzID0gMDsgZHI2ID0gMHhmZmZmMGZmMCAqLwogCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgMHg0MDApOwogCiAJdm1jc193cml0ZWwoR1VFU1RfR0RUUl9CQVNFLCAwKTsKQEAgLTIzMzEsOCArMjMzOCw2IEBACiAJdm1jc193cml0ZTMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywgMCk7CiAJdm1jc193cml0ZTMyKEdVRVNUX1BFTkRJTkdfREJHX0VYQ0VQVElPTlMsIDApOwogCi0JZ3Vlc3Rfd3JpdGVfdHNjKDApOwotCiAJLyogU3BlY2lhbCByZWdpc3RlcnMgKi8KIAl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9ERUJVR0NUTCwgMCk7CiAKQEAgLTI0ODUsNiArMjQ5MCwxMSBAQAogewogCXZteF91cGRhdGVfd2luZG93X3N0YXRlcyh2Y3B1KTsKIAorCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQl2bWNzX2NsZWFyX2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfU1RJIHwKKwkJCQlHVUVTVF9JTlRSX1NUQVRFX01PVl9TUyk7CisKIAlpZiAodmNwdS0+YXJjaC5ubWlfcGVuZGluZyAmJiAhdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQpIHsKIAkJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcpIHsKIAkJCWVuYWJsZV9ubWlfd2luZG93KHZjcHUpOwpAQCAtMjUzNSwyNCArMjU0NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9ndWVzdF9kZWJ1Z19wcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyA9ICZ2Y3B1LT5ndWVzdF9kZWJ1ZzsKLQotCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzBdLCAwKTsKLQlzZXRfZGVidWdyZWcoZGJnLT5icFsxXSwgMSk7Ci0Jc2V0X2RlYnVncmVnKGRiZy0+YnBbMl0sIDIpOwotCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzNdLCAzKTsKLQotCWlmIChkYmctPnNpbmdsZXN0ZXApIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKLQkJZmxhZ3MgfD0gWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkY7Ci0JCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwotCX0KLX0KLQogc3RhdGljIGludCBoYW5kbGVfcm1vZGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgIGludCB2ZWMsIHUzMiBlcnJfY29kZSkKIHsKQEAgLTI1NjksOSArMjU2MSwxNyBAQAogCSAqICAgICAgICB0aGUgcmVxdWlyZWQgZGVidWdnaW5nIGluZnJhc3RydWN0dXJlIHJld29yay4KIAkgKi8KIAlzd2l0Y2ggKHZlYykgewotCWNhc2UgREVfVkVDVE9SOgogCWNhc2UgREJfVkVDVE9SOgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQlyZXR1cm4gMDsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCB2ZWMpOworCQlyZXR1cm4gMTsKIAljYXNlIEJQX1ZFQ1RPUjoKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9TV19CUCkKKwkJCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIERFX1ZFQ1RPUjoKIAljYXNlIE9GX1ZFQ1RPUjoKIAljYXNlIEJSX1ZFQ1RPUjoKIAljYXNlIFVEX1ZFQ1RPUjoKQEAgLTI1ODgsOCArMjU4OCw4IEBACiBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1MzIgaW50cl9pbmZvLCBlcnJvcl9jb2RlOwotCXVuc2lnbmVkIGxvbmcgY3IyLCByaXA7CisJdTMyIGludHJfaW5mbywgZXhfbm8sIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyBjcjIsIHJpcCwgZHI2OwogCXUzMiB2ZWN0X2luZm87CiAJZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyOwogCkBAIC0yNjQ4LDE0ICsyNjQ4LDMwIEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmICgoaW50cl9pbmZvICYgKElOVFJfSU5GT19JTlRSX1RZUEVfTUFTSyB8IElOVFJfSU5GT19WRUNUT1JfTUFTSykpID09Ci0JICAgIChJTlRSX1RZUEVfRVhDRVBUSU9OIHwgMSkpIHsKKwlleF9ubyA9IGludHJfaW5mbyAmIElOVFJfSU5GT19WRUNUT1JfTUFTSzsKKwlzd2l0Y2ggKGV4X25vKSB7CisJY2FzZSBEQl9WRUNUT1I6CisJCWRyNiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKKwkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkpIHsKKwkJCXZjcHUtPmFyY2guZHI2ID0gZHI2IHwgRFI2X0ZJWEVEXzE7CisJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIERCX1ZFQ1RPUik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmRyNiA9IGRyNiB8IERSNl9GSVhFRF8xOworCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmRyNyA9IHZtY3NfcmVhZGwoR1VFU1RfRFI3KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBCUF9WRUNUT1I6CiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7Ci0JCXJldHVybiAwOworCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0gdm1jc19yZWFkbChHVUVTVF9DU19CQVNFKSArIHJpcDsKKwkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBleF9ubzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9FWENFUFRJT047CisJCWt2bV9ydW4tPmV4LmV4Y2VwdGlvbiA9IGV4X25vOworCQlrdm1fcnVuLT5leC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKwkJYnJlYWs7CiAJfQotCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRVhDRVBUSU9OOwotCWt2bV9ydW4tPmV4LmV4Y2VwdGlvbiA9IGludHJfaW5mbyAmIElOVFJfSU5GT19WRUNUT1JfTUFTSzsKLQlrdm1fcnVuLT5leC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY3Niw3ICsyNjkyLDcgQEAKIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb247Ci0JaW50IHNpemUsIGRvd24sIGluLCBzdHJpbmcsIHJlcDsKKwlpbnQgc2l6ZSwgaW4sIHN0cmluZzsKIAl1bnNpZ25lZCBwb3J0OwogCiAJKyt2Y3B1LT5zdGF0LmlvX2V4aXRzOwpAQCAtMjY5Miw4ICsyNzA4LDYgQEAKIAogCXNpemUgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICYgNykgKyAxOwogCWluID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDgpICE9IDA7Ci0JZG93biA9ICh2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUykgJiBYODZfRUZMQUdTX0RGKSAhPSAwOwotCXJlcCA9IChleGl0X3F1YWxpZmljYXRpb24gJiAzMikgIT0gMDsKIAlwb3J0ID0gZXhpdF9xdWFsaWZpY2F0aW9uID4+IDE2OwogCiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKQEAgLTI3OTQsMjEgKzI4MDgsNDQgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgZHIsIHJlZzsKIAotCS8qCi0JICogRklYTUU6IHRoaXMgY29kZSBhc3N1bWVzIHRoZSBob3N0IGlzIGRlYnVnZ2luZyB0aGUgZ3Vlc3QuCi0JICogICAgICAgIG5lZWQgdG8gZGVhbCB3aXRoIGd1ZXN0IGRlYnVnZ2luZyBpdHNlbGYgdG9vLgotCSAqLworCWRyID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOworCWlmIChkciAmIERSN19HRCkgeworCQkvKgorCQkgKiBBcyB0aGUgdm0tZXhpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGRlYnVnIHRyYXAsIHdlCisJCSAqIG5lZWQgdG8gZW11bGF0ZSB0aGUgbGF0dGVyLCBlaXRoZXIgZm9yIHRoZSBob3N0IG9yIHRoZQorCQkgKiBndWVzdCBkZWJ1Z2dpbmcgaXRzZWxmLgorCQkgKi8KKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkgeworCQkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5kcjYgPSB2Y3B1LT5hcmNoLmRyNjsKKwkJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI3ID0gZHI7CisJCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0KKwkJCQl2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpICsKKwkJCQl2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmV4Y2VwdGlvbiA9IERCX1ZFQ1RPUjsKKwkJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXZjcHUtPmFyY2guZHI3ICY9IH5EUjdfR0Q7CisJCQl2Y3B1LT5hcmNoLmRyNiB8PSBEUjZfQkQ7CisJCQl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZjcHUtPmFyY2guZHI3KTsKKwkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgREJfVkVDVE9SKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCiAJZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwotCWRyID0gZXhpdF9xdWFsaWZpY2F0aW9uICYgNzsKLQlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uID4+IDgpICYgMTU7Ci0JaWYgKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDE2KSB7Ci0JCS8qIG1vdiBmcm9tIGRyICovCisJZHIgPSBleGl0X3F1YWxpZmljYXRpb24gJiBERUJVR19SRUdfQUNDRVNTX05VTTsKKwlyZWcgPSBERUJVR19SRUdfQUNDRVNTX1JFRyhleGl0X3F1YWxpZmljYXRpb24pOworCWlmIChleGl0X3F1YWxpZmljYXRpb24gJiBUWVBFX01PVl9GUk9NX0RSKSB7CiAJCXN3aXRjaCAoZHIpIHsKKwkJY2FzZSAwIC4uLiAzOgorCQkJdmFsID0gdmNwdS0+YXJjaC5kYltkcl07CisJCQlicmVhazsKIAkJY2FzZSA2OgotCQkJdmFsID0gMHhmZmZmMGZmMDsKKwkJCXZhbCA9IHZjcHUtPmFyY2guZHI2OwogCQkJYnJlYWs7CiAJCWNhc2UgNzoKLQkJCXZhbCA9IDB4NDAwOworCQkJdmFsID0gdmNwdS0+YXJjaC5kcjc7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXZhbCA9IDA7CkBAIC0yODE2LDcgKzI4NTMsMzggQEAKIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKIAkJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCX0gZWxzZSB7Ci0JCS8qIG1vdiB0byBkciAqLworCQl2YWwgPSB2Y3B1LT5hcmNoLnJlZ3NbcmVnXTsKKwkJc3dpdGNoIChkcikgeworCQljYXNlIDAgLi4uIDM6CisJCQl2Y3B1LT5hcmNoLmRiW2RyXSA9IHZhbDsKKwkJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQkJdmNwdS0+YXJjaC5lZmZfZGJbZHJdID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgNCAuLi4gNToKKwkJCWlmICh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfREUpCisJCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmICh2YWwgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKKwkJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEdQX1ZFQ1RPUik7CisJCQkJYnJlYWs7CisJCQl9CisJCQl2Y3B1LT5hcmNoLmRyNiA9ICh2YWwgJiBEUjZfVk9MQVRJTEUpIHwgRFI2X0ZJWEVEXzE7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJaWYgKHZhbCAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgeworCQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgR1BfVkVDVE9SKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZjcHUtPmFyY2guZHI3ID0gKHZhbCAmIERSN19WT0xBVElMRSkgfCBEUjdfRklYRURfMTsKKwkJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpIHsKKwkJCQl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZjcHUtPmFyY2guZHI3KTsKKwkJCQl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0KKwkJCQkJKHZhbCAmIERSN19CUF9FTl9NQVNLKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCUtWTVRSQUNFXzJEKERSX1dSSVRFLCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbCwgaGFuZGxlcik7CiAJfQogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJcmV0dXJuIDE7CkBAIC0yOTY3LDE3ICszMDM1LDI1IEBACiAJfQogCXRzc19zZWxlY3RvciA9IGV4aXRfcXVhbGlmaWNhdGlvbjsKIAotCXJldHVybiBrdm1fdGFza19zd2l0Y2godmNwdSwgdHNzX3NlbGVjdG9yLCByZWFzb24pOworCWlmICgha3ZtX3Rhc2tfc3dpdGNoKHZjcHUsIHRzc19zZWxlY3RvciwgcmVhc29uKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjbGVhciBhbGwgbG9jYWwgYnJlYWtwb2ludCBlbmFibGUgZmxhZ3MgKi8KKwl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZtY3NfcmVhZGwoR1VFU1RfRFI3KSAmIH41NSk7CisKKwkvKgorCSAqIFRPRE86IFdoYXQgYWJvdXQgZGVidWcgdHJhcHMgb24gdHNzIHN3aXRjaD8KKwkgKiAgICAgICBBcmUgd2Ugc3VwcG9zZWQgdG8gaW5qZWN0IHRoZW0gYW5kIHVwZGF0ZSBkcjY/CisJICovCisKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXU2NCBleGl0X3F1YWxpZmljYXRpb247Ci0JZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyOwogCWdwYV90IGdwYTsKLQl1bnNpZ25lZCBsb25nIGh2YTsKIAlpbnQgZ2xhX3ZhbGlkaXR5OwotCWludCByOwogCiAJZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkNjQoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKIApAQCAtMzAwMCwzMiArMzA3Niw3IEBACiAJfQogCiAJZ3BhID0gdm1jc19yZWFkNjQoR1VFU1RfUEhZU0lDQUxfQUREUkVTUyk7Ci0JaHZhID0gZ2ZuX3RvX2h2YSh2Y3B1LT5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKTsKLQlpZiAoIWt2bV9pc19lcnJvcl9odmEoaHZhKSkgewotCQlyID0ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSAmIFBBR0VfTUFTSywgMCk7Ci0JCWlmIChyIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IE5vdCBlbm91Z2ggbWVtb3J5IVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQkvKiBtdXN0IGJlIE1NSU8gKi8KLQkJZXIgPSBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGt2bV9ydW4sIDAsIDAsIDApOwotCi0JCWlmIChlciA9PSBFTVVMQVRFX0ZBSUwpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICJFUFQ6IEZhaWwgdG8gaGFuZGxlIEVQVCB2aW9sYXRpb24gdm1leGl0IWVyIGlzICVkXG4iLAotCQkJIGVyKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiRVBUOiBHUEE6IDB4JWx4LCBHVkE6IDB4JWx4XG4iLAotCQkJIChsb25nIHVuc2lnbmVkIGludCl2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKSwKLQkJCSAobG9uZyB1bnNpZ25lZCBpbnQpdm1jc19yZWFkNjQoR1VFU1RfTElORUFSX0FERFJFU1MpKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiRVBUOiBFeGl0IHF1YWxpZmljYXRpb24gaXMgMHglbHhcbiIsCi0JCQkJKGxvbmcgdW5zaWduZWQgaW50KWV4aXRfcXVhbGlmaWNhdGlvbik7Ci0JCQlyZXR1cm4gLUVOT1RTVVBQOwotCQl9IGVsc2UgaWYgKGVyID09IEVNVUxBVEVfRE9fTU1JTykKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKKwlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSAmIFBBR0VfTUFTSywgMCk7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKQEAgLTMwNDUsNyArMzA5Niw3IEBACiAJCQkJc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JaW50IGVycjsKKwllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXJyID0gRU1VTEFURV9ET05FOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0zMDcwLDEwICszMTIxLDcgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCi0JLyogR3Vlc3Qgc3RhdGUgc2hvdWxkIGJlIHZhbGlkIG5vdyBleGNlcHQgaWYgd2UgbmVlZCB0bwotCSAqIGVtdWxhdGUgYW4gTU1JTyAqLwotCWlmIChndWVzdF9zdGF0ZV92YWxpZCh2Y3B1KSkKLQkJdm14LT5lbXVsYXRpb25fcmVxdWlyZWQgPSAwOworCXZteC0+aW52YWxpZF9zdGF0ZV9lbXVsYXRpb25fcmVzdWx0ID0gZXJyOwogfQogCiAvKgpAQCAtMzEyMiw4ICszMTcwLDExIEBACiAKIAkvKiBJZiB3ZSBuZWVkIHRvIGVtdWxhdGUgYW4gTU1JTyBmcm9tIGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlCiAJICogd2UganVzdCByZXR1cm4gMCAqLwotCWlmICh2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCAmJiBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpCi0JCXJldHVybiAwOworCWlmICh2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCAmJiBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpIHsKKwkJaWYgKGd1ZXN0X3N0YXRlX3ZhbGlkKHZjcHUpKQorCQkJdm14LT5lbXVsYXRpb25fcmVxdWlyZWQgPSAwOworCQlyZXR1cm4gdm14LT5pbnZhbGlkX3N0YXRlX2VtdWxhdGlvbl9yZXN1bHQgIT0gRU1VTEFURV9ET19NTUlPOworCX0KIAogCS8qIEFjY2VzcyBDUjMgZG9uJ3QgY2F1c2UgVk1FeGl0IGluIHBhZ2luZyBtb2RlLCBzbyB3ZSBuZWVkCiAJICogdG8gc3luYyB3aXRoIGd1ZXN0IHJlYWwgQ1IzLiAqLwpAQCAtMzIzNyw3ICszMjg4LDggQEAKIAkJCXZteC0+dmNwdS5hcmNoLm5taV9pbmplY3RlZCA9IGZhbHNlOwogCX0KIAlrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKCZ2bXgtPnZjcHUpOwotCWlmIChpZHR2X2luZm9fdmFsaWQgJiYgdHlwZSA9PSBJTlRSX1RZUEVfRVhDRVBUSU9OKSB7CisJaWYgKGlkdHZfaW5mb192YWxpZCAmJiAodHlwZSA9PSBJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04gfHwKKwkJCQl0eXBlID09IElOVFJfVFlQRV9TT0ZUX0VYQ0VQVElPTikpIHsKIAkJaWYgKGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX0RFTElWRVJfQ09ERV9NQVNLKSB7CiAJCQllcnJvciA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfRVJST1JfQ09ERSk7CiAJCQlrdm1fcXVldWVfZXhjZXB0aW9uX2UoJnZteC0+dmNwdSwgdmVjdG9yLCBlcnJvcik7CkBAIC0zMjU4LDYgKzMzMTAsMTEgQEAKIAogCXZteF91cGRhdGVfd2luZG93X3N0YXRlcyh2Y3B1KTsKIAorCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQl2bWNzX2NsZWFyX2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfU1RJIHwKKwkJCQlHVUVTVF9JTlRSX1NUQVRFX01PVl9TUyk7CisKIAlpZiAodmNwdS0+YXJjaC5ubWlfcGVuZGluZyAmJiAhdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQpIHsKIAkJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcpIHsKIAkJCWVuYWJsZV9ubWlfd2luZG93KHZjcHUpOwpAQCAtMzI4NSw3ICszMzQyLDYgQEAKIAl9CiAJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcpIHsKIAkJdm14X2luamVjdF9pcnEodmNwdSwgdmNwdS0+YXJjaC5pbnRlcnJ1cHQubnIpOwotCQlrdm1fdGltZXJfaW50cl9wb3N0KHZjcHUsIHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yKTsKIAkJaWYgKGt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKIAkJCWVuYWJsZV9pcnFfd2luZG93KHZjcHUpOwogCX0KQEAgLTMzNDcsNiArMzQwMyw4IEBACiAJICovCiAJdm1jc193cml0ZWwoSE9TVF9DUjAsIHJlYWRfY3IwKCkpOwogCisJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwogCWFzbSgKIAkJLyogU3RvcmUgaG9zdCByZWdpc3RlcnMgKi8KIAkJInB1c2ggJSUiUiJkeDsgcHVzaCAlJSJSImJwOyIKQEAgLTM0NDEsNiArMzQ5OSw4IEBACiAJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApKTsKIAl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSAwOwogCisJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwogCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTsKIAlpZiAodm14LT5ybW9kZS5pcnEucGVuZGluZykKIAkJZml4dXBfcm1vZGVfaXJxKHZteCk7CkBAIC0zNTk1LDcgKzM2NTUsNiBAQAogCS52Y3B1X3B1dCA9IHZteF92Y3B1X3B1dCwKIAogCS5zZXRfZ3Vlc3RfZGVidWcgPSBzZXRfZ3Vlc3RfZGVidWcsCi0JLmd1ZXN0X2RlYnVnX3ByZSA9IGt2bV9ndWVzdF9kZWJ1Z19wcmUsCiAJLmdldF9tc3IgPSB2bXhfZ2V0X21zciwKIAkuc2V0X21zciA9IHZteF9zZXRfbXNyLAogCS5nZXRfc2VnbWVudF9iYXNlID0gdm14X2dldF9zZWdtZW50X2Jhc2UsCkBAIC0zNjg3LDggKzM3NDYsNyBAQAogCWlmICh2bV9uZWVkX2VwdCgpKSB7CiAJCWJ5cGFzc19ndWVzdF9wZiA9IDA7CiAJCWt2bV9tbXVfc2V0X2Jhc2VfcHRlcyhWTVhfRVBUX1JFQURBQkxFX01BU0sgfAotCQkJVk1YX0VQVF9XUklUQUJMRV9NQVNLIHwKLQkJCVZNWF9FUFRfSUdNVF9CSVQpOworCQkJVk1YX0VQVF9XUklUQUJMRV9NQVNLKTsKIAkJa3ZtX21tdV9zZXRfbWFza19wdGVzKDB1bGwsIDB1bGwsIDB1bGwsIDB1bGwsCiAJCQkJVk1YX0VQVF9FWEVDVVRBQkxFX01BU0ssCiAJCQkJVk1YX0VQVF9ERUZBVUxUX01UIDw8IFZNWF9FUFRfTVRfRVBURV9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggY2MxNzU0Ni4uOGNhMTAwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CkBAIC02OSw2ICs3MCw4IEBACiAKIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKIAkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKTsKK3N0cnVjdCBrdm1fY3B1aWRfZW50cnkyICprdm1fZmluZF9jcHVpZF9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSAgICAgIHUzMiBmdW5jdGlvbiwgdTMyIGluZGV4KTsKIAogc3RydWN0IGt2bV94ODZfb3BzICprdm1feDg2X29wczsKIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV94ODZfb3BzKTsKQEAgLTE3Myw2ICsxNzYsNyBAQAogCQkJICAgdTMyIGVycm9yX2NvZGUpCiB7CiAJKyt2Y3B1LT5zdGF0LnBmX2d1ZXN0OworCiAJaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpIHsKIAkJaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLm5yID09IFBGX1ZFQ1RPUikgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImt2bTogaW5qZWN0X3BhZ2VfZmF1bHQ6IgpAQCAtMzYxLDYgKzM2NSw3IEBACiAJfQogCWt2bV94ODZfb3BzLT5zZXRfY3I0KHZjcHUsIGNyNCk7CiAJdmNwdS0+YXJjaC5jcjQgPSBjcjQ7CisJdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlLmNyNF9wZ2UgPSAoY3I0ICYgWDg2X0NSNF9QR0UpICYmICF0ZHBfZW5hYmxlZDsKIAlrdm1fbW11X3N5bmNfZ2xvYmFsKHZjcHUpOwogCWt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTsKIH0KQEAgLTQ0Miw2ICs0NDcsMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfY3I4KTsKIAorc3RhdGljIGlubGluZSB1MzIgYml0KGludCBiaXRubykKK3sKKwlyZXR1cm4gMSA8PCAoYml0bm8gJiAzMSk7Cit9CisKIC8qCiAgKiBMaXN0IG9mIG1zciBudW1iZXJzIHdoaWNoIHdlIGV4cG9zZSB0byB1c2Vyc3BhY2UgdGhyb3VnaCBLVk1fR0VUX01TUlMKICAqIGFuZCBLVk1fU0VUX01TUlMsIGFuZCBLVk1fR0VUX01TUl9JTkRFWF9MSVNULgpAQCAtNDU2LDcgKzQ2Niw3IEBACiAJTVNSX0NTVEFSLCBNU1JfS0VSTkVMX0dTX0JBU0UsIE1TUl9TWVNDQUxMX01BU0ssIE1TUl9MU1RBUiwKICNlbmRpZgogCU1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUiwgTVNSX0tWTV9TWVNURU1fVElNRSwgTVNSX0tWTV9XQUxMX0NMT0NLLAotCU1TUl9JQTMyX1BFUkZfU1RBVFVTLCBNU1JfSUEzMl9DUl9QQVQKKwlNU1JfSUEzMl9QRVJGX1NUQVRVUywgTVNSX0lBMzJfQ1JfUEFULCBNU1JfVk1fSFNBVkVfUEEKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBudW1fbXNyc190b19zYXZlOwpAQCAtNDgxLDYgKzQ5MSwyOCBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKGVmZXIgJiBFRkVSX0ZGWFNSKSB7CisJCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpmZWF0OworCisJCWZlYXQgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAxLCAwKTsKKwkJaWYgKCFmZWF0IHx8ICEoZmVhdC0+ZWR4ICYgYml0KFg4Nl9GRUFUVVJFX0ZYU1JfT1BUKSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfZWZlcjogI0dQLCBlbmFibGUgRkZYU1Igdy9vIENQVUlEIGNhcGFiaWxpdHlcbiIpOworCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChlZmVyICYgRUZFUl9TVk1FKSB7CisJCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpmZWF0OworCisJCWZlYXQgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAxLCAwKTsKKwkJaWYgKCFmZWF0IHx8ICEoZmVhdC0+ZWN4ICYgYml0KFg4Nl9GRUFUVVJFX1NWTSkpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2VmZXI6ICNHUCwgZW5hYmxlIFNWTSB3L28gU1ZNXG4iKTsKKwkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlrdm1feDg2X29wcy0+c2V0X2VmZXIodmNwdSwgZWZlcik7CiAKIAllZmVyICY9IH5FRkVSX0xNQTsKQEAgLTU4Niw2ICs2MTgsOCBAQAogCQkgaHZfY2xvY2stPnRzY190b19zeXN0ZW1fbXVsKTsKIH0KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGNwdV90c2Nfa2h6KTsKKwogc3RhdGljIHZvaWQga3ZtX3dyaXRlX2d1ZXN0X3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2KQogewogCXN0cnVjdCB0aW1lc3BlYyB0czsKQEAgLTU5Niw5ICs2MzAsOSBAQAogCWlmICgoIXZjcHUtPnRpbWVfcGFnZSkpCiAJCXJldHVybjsKIAotCWlmICh1bmxpa2VseSh2Y3B1LT5odl9jbG9ja190c2Nfa2h6ICE9IHRzY19raHopKSB7Ci0JCWt2bV9zZXRfdGltZV9zY2FsZSh0c2Nfa2h6LCAmdmNwdS0+aHZfY2xvY2spOwotCQl2Y3B1LT5odl9jbG9ja190c2Nfa2h6ID0gdHNjX2toejsKKwlpZiAodW5saWtlbHkodmNwdS0+aHZfY2xvY2tfdHNjX2toeiAhPSBfX2dldF9jcHVfdmFyKGNwdV90c2Nfa2h6KSkpIHsKKwkJa3ZtX3NldF90aW1lX3NjYWxlKF9fZ2V0X2NwdV92YXIoY3B1X3RzY19raHopLCAmdmNwdS0+aHZfY2xvY2spOworCQl2Y3B1LT5odl9jbG9ja190c2Nfa2h6ID0gX19nZXRfY3B1X3ZhcihjcHVfdHNjX2toeik7CiAJfQogCiAJLyogS2VlcCBpcnEgZGlzYWJsZWQgdG8gcHJldmVudCBjaGFuZ2VzIHRvIHRoZSBjbG9jayAqLwpAQCAtNjI5LDYgKzY2MywxNiBAQAogCW1hcmtfcGFnZV9kaXJ0eSh2LT5rdm0sIHZjcHUtPnRpbWUgPj4gUEFHRV9TSElGVCk7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KQoreworCXN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gJnYtPmFyY2g7CisKKwlpZiAoIXZjcHUtPnRpbWVfcGFnZSkKKwkJcmV0dXJuIDA7CisJc2V0X2JpdChLVk1fUkVRX0tWTUNMT0NLX1VQREFURSwgJnYtPnJlcXVlc3RzKTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGJvb2wgbXNyX210cnJfdmFsaWQodW5zaWduZWQgbXNyKQogewogCXN3aXRjaCAobXNyKSB7CkBAIC03MjIsNiArNzY2LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9XUklURToKKwljYXNlIE1TUl9WTV9IU0FWRV9QQToKIAkJYnJlYWs7CiAJY2FzZSAweDIwMCAuLi4gMHgyZmY6CiAJCXJldHVybiBzZXRfbXNyX210cnIodmNwdSwgbXNyLCBkYXRhKTsKQEAgLTc1OCw3ICs4MDMsNyBAQAogCQkJdmNwdS0+YXJjaC50aW1lX3BhZ2UgPSBOVUxMOwogCQl9CiAKLQkJa3ZtX3dyaXRlX2d1ZXN0X3RpbWUodmNwdSk7CisJCWt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHZjcHUpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTg0Myw2ICs4ODgsNyBAQAogCWNhc2UgTVNSX0lBMzJfTEFTVEJSQU5DSFRPSVA6CiAJY2FzZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQOgogCWNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6CisJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CiAJCWRhdGEgPSAwOwogCQlicmVhazsKIAljYXNlIE1TUl9NVFJSY2FwOgpAQCAtOTcyLDYgKzEwMTgsOCBAQAogCWNhc2UgS1ZNX0NBUF9OT1BfSU9fREVMQVk6CiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9TWU5DX01NVToKKwljYXNlIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTDoKKwljYXNlIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVM6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CkBAIC0xMDQyLDcgKzEwOTAsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNwdWlkLCBjcHVpZF9hcmcsIHNpemVvZiBjcHVpZCkpCiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZCgmY3B1aWQsCi0JCQljcHVpZF9hcmctPmVudHJpZXMpOworCQkJCQkJICAgICAgY3B1aWRfYXJnLT5lbnRyaWVzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIApAQCAtMTA2Miw3ICsxMTEwLDcgQEAKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlrdm1feDg2X29wcy0+dmNwdV9sb2FkKHZjcHUsIGNwdSk7Ci0Ja3ZtX3dyaXRlX2d1ZXN0X3RpbWUodmNwdSk7CisJa3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUodmNwdSk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTE0MCw4ICsxMTg4LDggQEAKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9zZXRfY3B1aWQyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCiB7CiAJaW50IHI7CiAKQEAgLTExNjAsOCArMTIwOCw4IEBACiB9CiAKIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X2NwdWlkMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQorCQkJCSAgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAorCQkJCSAgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQogewogCWludCByOwogCkBAIC0xMTcwLDcgKzEyMTgsNyBAQAogCQlnb3RvIG91dDsKIAlyID0gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKGVudHJpZXMsICZ2Y3B1LT5hcmNoLmNwdWlkX2VudHJpZXMsCi0JCQkgICB2Y3B1LT5hcmNoLmNwdWlkX25lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKKwkJCSB2Y3B1LT5hcmNoLmNwdWlkX25lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKIAkJZ290byBvdXQ7CiAJcmV0dXJuIDA7CiAKQEAgLTExNzksMTggKzEyMjcsMTMgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgYml0KGludCBiaXRubykKLXsKLQlyZXR1cm4gMSA8PCAoYml0bm8gJiAzMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRvX2NwdWlkXzFfZW50KHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplbnRyeSwgdTMyIGZ1bmN0aW9uLAotCQkJICB1MzIgaW5kZXgpCisJCQkgICB1MzIgaW5kZXgpCiB7CiAJZW50cnktPmZ1bmN0aW9uID0gZnVuY3Rpb247CiAJZW50cnktPmluZGV4ID0gaW5kZXg7CiAJY3B1aWRfY291bnQoZW50cnktPmZ1bmN0aW9uLCBlbnRyeS0+aW5kZXgsCi0JCSZlbnRyeS0+ZWF4LCAmZW50cnktPmVieCwgJmVudHJ5LT5lY3gsICZlbnRyeS0+ZWR4KTsKKwkJICAgICZlbnRyeS0+ZWF4LCAmZW50cnktPmVieCwgJmVudHJ5LT5lY3gsICZlbnRyeS0+ZWR4KTsKIAllbnRyeS0+ZmxhZ3MgPSAwOwogfQogCkBAIC0xMjIwLDE1ICsxMjYzLDE3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCQliaXQoWDg2X0ZFQVRVUkVfTE0pIHwKICNlbmRpZgorCQliaXQoWDg2X0ZFQVRVUkVfRlhTUl9PUFQpIHwKIAkJYml0KFg4Nl9GRUFUVVJFX01NWEVYVCkgfAogCQliaXQoWDg2X0ZFQVRVUkVfM0ROT1dFWFQpIHwKIAkJYml0KFg4Nl9GRUFUVVJFXzNETk9XKTsKIAljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkM194ODZfZmVhdHVyZXMgPQogCQliaXQoWDg2X0ZFQVRVUkVfWE1NMykgfCBiaXQoWDg2X0ZFQVRVUkVfQ1gxNik7CiAJY29uc3QgdTMyIGt2bV9zdXBwb3J0ZWRfd29yZDZfeDg2X2ZlYXR1cmVzID0KLQkJYml0KFg4Nl9GRUFUVVJFX0xBSEZfTE0pIHwgYml0KFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kpOworCQliaXQoWDg2X0ZFQVRVUkVfTEFIRl9MTSkgfCBiaXQoWDg2X0ZFQVRVUkVfQ01QX0xFR0FDWSkgfAorCQliaXQoWDg2X0ZFQVRVUkVfU1ZNKTsKIAotCS8qIGFsbCBmdW5jIDIgY3B1aWRfY291bnQoKSBzaG91bGQgYmUgY2FsbGVkIG9uIHRoZSBzYW1lIGNwdSAqLworCS8qIGFsbCBjYWxscyB0byBjcHVpZF9jb3VudCgpIHNob3VsZCBiZSBtYWRlIG9uIHRoZSBzYW1lIGNwdSAqLwogCWdldF9jcHUoKTsKIAlkb19jcHVpZF8xX2VudChlbnRyeSwgZnVuY3Rpb24sIGluZGV4KTsKIAkrKypuZW50OwpAQCAtMTMwMiw3ICsxMzQ3LDcgQEAKIH0KIAogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2dldF9zdXBwb3J0ZWRfY3B1aWQoc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCiB7CiAJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmNwdWlkX2VudHJpZXM7CiAJaW50IGxpbWl0LCBuZW50ID0gMCwgciA9IC1FMkJJRzsKQEAgLTEzMTksNyArMTM2NCw3IEBACiAJbGltaXQgPSBjcHVpZF9lbnRyaWVzWzBdLmVheDsKIAlmb3IgKGZ1bmMgPSAxOyBmdW5jIDw9IGxpbWl0ICYmIG5lbnQgPCBjcHVpZC0+bmVudDsgKytmdW5jKQogCQlkb19jcHVpZF9lbnQoJmNwdWlkX2VudHJpZXNbbmVudF0sIGZ1bmMsIDAsCi0JCQkJJm5lbnQsIGNwdWlkLT5uZW50KTsKKwkJCSAgICAgJm5lbnQsIGNwdWlkLT5uZW50KTsKIAlyID0gLUUyQklHOwogCWlmIChuZW50ID49IGNwdWlkLT5uZW50KQogCQlnb3RvIG91dF9mcmVlOwpAQCAtMTMyOCwxMCArMTM3MywxMCBAQAogCWxpbWl0ID0gY3B1aWRfZW50cmllc1tuZW50IC0gMV0uZWF4OwogCWZvciAoZnVuYyA9IDB4ODAwMDAwMDE7IGZ1bmMgPD0gbGltaXQgJiYgbmVudCA8IGNwdWlkLT5uZW50OyArK2Z1bmMpCiAJCWRvX2NwdWlkX2VudCgmY3B1aWRfZW50cmllc1tuZW50XSwgZnVuYywgMCwKLQkJCSAgICAgICAmbmVudCwgY3B1aWQtPm5lbnQpOworCQkJICAgICAmbmVudCwgY3B1aWQtPm5lbnQpOwogCXIgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIoZW50cmllcywgY3B1aWRfZW50cmllcywKLQkJCW5lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKKwkJCSBuZW50ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSkpCiAJCWdvdG8gb3V0X2ZyZWU7CiAJY3B1aWQtPm5lbnQgPSBuZW50OwogCXIgPSAwOwpAQCAtMTQ3NSw3ICsxNTIwLDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjcHVpZCwgY3B1aWRfYXJnLCBzaXplb2YgY3B1aWQpKQogCQkJZ290byBvdXQ7CiAJCXIgPSBrdm1fdmNwdV9pb2N0bF9zZXRfY3B1aWQyKHZjcHUsICZjcHVpZCwKLQkJCQljcHVpZF9hcmctPmVudHJpZXMpOworCQkJCQkgICAgICBjcHVpZF9hcmctPmVudHJpZXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKQEAgLTE0ODgsNyArMTUzMyw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY3B1aWQsIGNwdWlkX2FyZywgc2l6ZW9mIGNwdWlkKSkKIAkJCWdvdG8gb3V0OwogCQlyID0ga3ZtX3ZjcHVfaW9jdGxfZ2V0X2NwdWlkMih2Y3B1LCAmY3B1aWQsCi0JCQkJY3B1aWRfYXJnLT5lbnRyaWVzKTsKKwkJCQkJICAgICAgY3B1aWRfYXJnLT5lbnRyaWVzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FRkFVTFQ7CkBAIC0xNzA4LDYgKzE3NTMsMTUgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGludCBrdm1fdm1faW9jdGxfcmVpbmplY3Qoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSBzdHJ1Y3Qga3ZtX3JlaW5qZWN0X2NvbnRyb2wgKmNvbnRyb2wpCit7CisJaWYgKCFrdm0tPmFyY2gudnBpdCkKKwkJcmV0dXJuIC1FTlhJTzsKKwlrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5yZWluamVjdCA9IGNvbnRyb2wtPnBpdF9yZWluamVjdDsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEdldCAoYW5kIGNsZWFyKSB0aGUgZGlydHkgbWVtb3J5IGxvZyBmb3IgYSBtZW1vcnkgc2xvdC4KICAqLwpAQCAtMTgwNSwxMyArMTg1OSwyNiBAQAogCQkJfQogCQl9IGVsc2UKIAkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoa3ZtKTsKKwkJaWYgKHIpIHsKKwkJCWtmcmVlKGt2bS0+YXJjaC52cGljKTsKKwkJCWtmcmVlKGt2bS0+YXJjaC52aW9hcGljKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NSRUFURV9QSVQ6CisJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJCXIgPSAtRUVYSVNUOworCQlpZiAoa3ZtLT5hcmNoLnZwaXQpCisJCQlnb3RvIGNyZWF0ZV9waXRfdW5sb2NrOwogCQlyID0gLUVOT01FTTsKIAkJa3ZtLT5hcmNoLnZwaXQgPSBrdm1fY3JlYXRlX3BpdChrdm0pOwogCQlpZiAoa3ZtLT5hcmNoLnZwaXQpCiAJCQlyID0gMDsKKwljcmVhdGVfcGl0X3VubG9jazoKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCQlicmVhazsKKwljYXNlIEtWTV9JUlFfTElORV9TVEFUVVM6CiAJY2FzZSBLVk1fSVJRX0xJTkU6IHsKIAkJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxX2V2ZW50OwogCkBAIC0xODE5LDEwICsxODg2LDE3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaXJxX2V2ZW50LCBhcmdwLCBzaXplb2YgaXJxX2V2ZW50KSkKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgeworCQkJX19zMzIgc3RhdHVzOwogCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQkJCWt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAotCQkJCSAgICBpcnFfZXZlbnQuaXJxLCBpcnFfZXZlbnQubGV2ZWwpOworCQkJc3RhdHVzID0ga3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCisJCQkJCWlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CiAJCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCQlpZiAoaW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUykgeworCQkJCWlycV9ldmVudC5zdGF0dXMgPSBzdGF0dXM7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaXJxX2V2ZW50LAorCQkJCQkJCXNpemVvZiBpcnFfZXZlbnQpKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCXIgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtMTkwNSw2ICsxOTc5LDE3IEBACiAJCXIgPSAwOwogCQlicmVhazsKIAl9CisJY2FzZSBLVk1fUkVJTkpFQ1RfQ09OVFJPTDogeworCQlzdHJ1Y3Qga3ZtX3JlaW5qZWN0X2NvbnRyb2wgY29udHJvbDsKKwkJciA9ICAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbnRyb2wsIGFyZ3AsIHNpemVvZihjb250cm9sKSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92bV9pb2N0bF9yZWluamVjdChrdm0sICZjb250cm9sKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQk7CiAJfQpAQCAtMTk1OCwxMCArMjA0Myw4IEBACiAJcmV0dXJuIGRldjsKIH0KIAotaW50IGVtdWxhdG9yX3JlYWRfc3RkKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgdm9pZCAqdmFsLAotCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbnQga3ZtX3JlYWRfZ3Vlc3RfdmlydChndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdm9pZCAqZGF0YSA9IHZhbDsKIAlpbnQgciA9IFg4NkVNVUxfQ09OVElOVUU7CkBAIC0xOTY5LDI3ICsyMDUyLDU3IEBACiAJd2hpbGUgKGJ5dGVzKSB7CiAJCWdwYV90IGdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgYWRkcik7CiAJCXVuc2lnbmVkIG9mZnNldCA9IGFkZHIgJiAoUEFHRV9TSVpFLTEpOwotCQl1bnNpZ25lZCB0b2NvcHkgPSBtaW4oYnl0ZXMsICh1bnNpZ25lZClQQUdFX1NJWkUgLSBvZmZzZXQpOworCQl1bnNpZ25lZCB0b3JlYWQgPSBtaW4oYnl0ZXMsICh1bnNpZ25lZClQQUdFX1NJWkUgLSBvZmZzZXQpOwogCQlpbnQgcmV0OwogCiAJCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKSB7CiAJCQlyID0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlyZXQgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgdG9jb3B5KTsKKwkJcmV0ID0ga3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIHRvcmVhZCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlyID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWJ5dGVzIC09IHRvY29weTsKLQkJZGF0YSArPSB0b2NvcHk7Ci0JCWFkZHIgKz0gdG9jb3B5OworCQlieXRlcyAtPSB0b3JlYWQ7CisJCWRhdGEgKz0gdG9yZWFkOworCQlhZGRyICs9IHRvcmVhZDsKIAl9CiBvdXQ6CiAJcmV0dXJuIHI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlbXVsYXRvcl9yZWFkX3N0ZCk7CisKK3N0YXRpYyBpbnQga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQoZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZvaWQgKmRhdGEgPSB2YWw7CisJaW50IHIgPSBYODZFTVVMX0NPTlRJTlVFOworCisJd2hpbGUgKGJ5dGVzKSB7CisJCWdwYV90IGdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgYWRkcik7CisJCXVuc2lnbmVkIG9mZnNldCA9IGFkZHIgJiAoUEFHRV9TSVpFLTEpOworCQl1bnNpZ25lZCB0b3dyaXRlID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwkJaW50IHJldDsKKworCQlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkgeworCQkJciA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0ga3ZtX3dyaXRlX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCB0b3dyaXRlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXIgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYnl0ZXMgLT0gdG93cml0ZTsKKwkJZGF0YSArPSB0b3dyaXRlOworCQlhZGRyICs9IHRvd3JpdGU7CisJfQorb3V0OgorCXJldHVybiByOworfQorCiAKIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICB2b2lkICp2YWwsCkBAIC0yMDExLDggKzIxMjQsOCBAQAogCWlmICgoZ3BhICYgUEFHRV9NQVNLKSA9PSBBUElDX0RFRkFVTFRfUEhZU19CQVNFKQogCQlnb3RvIG1taW87CiAKLQlpZiAoZW11bGF0b3JfcmVhZF9zdGQoYWRkciwgdmFsLCBieXRlcywgdmNwdSkKLQkJCT09IFg4NkVNVUxfQ09OVElOVUUpCisJaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQoYWRkciwgdmFsLCBieXRlcywgdmNwdSkKKwkJCQk9PSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkKIAkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwpAQCAtMjIxNSw3ICsyMzI4LDcgQEAKIAogCXJpcF9saW5lYXIgPSByaXAgKyBnZXRfc2VnbWVudF9iYXNlKHZjcHUsIFZDUFVfU1JFR19DUyk7CiAKLQllbXVsYXRvcl9yZWFkX3N0ZChyaXBfbGluZWFyLCAodm9pZCAqKW9wY29kZXMsIDQsIHZjcHUpOworCWt2bV9yZWFkX2d1ZXN0X3ZpcnQocmlwX2xpbmVhciwgKHZvaWQgKilvcGNvZGVzLCA0LCB2Y3B1KTsKIAogCXByaW50ayhLRVJOX0VSUiAiZW11bGF0aW9uIGZhaWxlZCAoJXMpIHJpcCAlbHggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkgICAgICAgY29udGV4dCwgcmlwLCBvcGNvZGVzWzBdLCBvcGNvZGVzWzFdLCBvcGNvZGVzWzJdLCBvcGNvZGVzWzNdKTsKQEAgLTIyMjMsNyArMjMzNiw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKTsKIAogc3RhdGljIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7Ci0JLnJlYWRfc3RkICAgICAgICAgICAgPSBlbXVsYXRvcl9yZWFkX3N0ZCwKKwkucmVhZF9zdGQgICAgICAgICAgICA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQsCiAJLnJlYWRfZW11bGF0ZWQgICAgICAgPSBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkLAogCS53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsCiAJLmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLApAQCAtMjMyNSw0MCArMjQzOCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW11bGF0ZV9pbnN0cnVjdGlvbik7CiAKLXN0YXRpYyB2b2lkIGZyZWVfcGlvX2d1ZXN0X3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzKTsgKytpKQotCQlpZiAodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0pIHsKLQkJCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0pOwotCQkJdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0gPSBOVUxMOwotCQl9Ci19Ci0KIHN0YXRpYyBpbnQgcGlvX2NvcHlfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdm9pZCAqcCA9IHZjcHUtPmFyY2gucGlvX2RhdGE7Ci0Jdm9pZCAqcTsKKwlndmFfdCBxID0gdmNwdS0+YXJjaC5waW8uZ3Vlc3RfZ3ZhOwogCXVuc2lnbmVkIGJ5dGVzOwotCWludCBucl9wYWdlcyA9IHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzWzFdID8gMiA6IDE7CisJaW50IHJldDsKIAotCXEgPSB2bWFwKHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzLCBucl9wYWdlcywgVk1fUkVBRHxWTV9XUklURSwKLQkJIFBBR0VfS0VSTkVMKTsKLQlpZiAoIXEpIHsKLQkJZnJlZV9waW9fZ3Vlc3RfcGFnZXModmNwdSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlxICs9IHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2Vfb2Zmc2V0OwogCWJ5dGVzID0gdmNwdS0+YXJjaC5waW8uc2l6ZSAqIHZjcHUtPmFyY2gucGlvLmN1cl9jb3VudDsKIAlpZiAodmNwdS0+YXJjaC5waW8uaW4pCi0JCW1lbWNweShxLCBwLCBieXRlcyk7CisJCXJldCA9IGt2bV93cml0ZV9ndWVzdF92aXJ0KHEsIHAsIGJ5dGVzLCB2Y3B1KTsKIAllbHNlCi0JCW1lbWNweShwLCBxLCBieXRlcyk7Ci0JcSAtPSB2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlX29mZnNldDsKLQl2dW5tYXAocSk7Ci0JZnJlZV9waW9fZ3Vlc3RfcGFnZXModmNwdSk7Ci0JcmV0dXJuIDA7CisJCXJldCA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQocSwgcCwgYnl0ZXMsIHZjcHUpOworCXJldHVybiByZXQ7CiB9CiAKIGludCBjb21wbGV0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjQ2OSw3ICsyNTYxLDYgQEAKIAl2Y3B1LT5hcmNoLnBpby5pbiA9IGluOwogCXZjcHUtPmFyY2gucGlvLnN0cmluZyA9IDA7CiAJdmNwdS0+YXJjaC5waW8uZG93biA9IDA7Ci0JdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZV9vZmZzZXQgPSAwOwogCXZjcHUtPmFyY2gucGlvLnJlcCA9IDA7CiAKIAlpZiAodmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fSU4pCkBAIC0yNDk3LDkgKzI1ODgsNyBAQAogCQkgIGd2YV90IGFkZHJlc3MsIGludCByZXAsIHVuc2lnbmVkIHBvcnQpCiB7CiAJdW5zaWduZWQgbm93LCBpbl9wYWdlOwotCWludCBpLCByZXQgPSAwOwotCWludCBucl9wYWdlcyA9IDE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldCA9IDA7CiAJc3RydWN0IGt2bV9pb19kZXZpY2UgKnBpb19kZXY7CiAKIAl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU87CkBAIC0yNTExLDcgKzI2MDAsNiBAQAogCXZjcHUtPmFyY2gucGlvLmluID0gaW47CiAJdmNwdS0+YXJjaC5waW8uc3RyaW5nID0gMTsKIAl2Y3B1LT5hcmNoLnBpby5kb3duID0gZG93bjsKLQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHJlc3MpOwogCXZjcHUtPmFyY2gucGlvLnJlcCA9IHJlcDsKIAogCWlmICh2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9PSBLVk1fRVhJVF9JT19JTikKQEAgLTI1MzEsMTUgKzI2MTksOCBAQAogCWVsc2UKIAkJaW5fcGFnZSA9IG9mZnNldF9pbl9wYWdlKGFkZHJlc3MpICsgc2l6ZTsKIAlub3cgPSBtaW4oY291bnQsICh1bnNpZ25lZCBsb25nKWluX3BhZ2UgLyBzaXplKTsKLQlpZiAoIW5vdykgewotCQkvKgotCQkgKiBTdHJpbmcgSS9PIHN0cmFkZGxlcyBwYWdlIGJvdW5kYXJ5LiAgUGluIHR3byBndWVzdCBwYWdlcwotCQkgKiBzbyB0aGF0IHdlIHNhdGlzZnkgYXRvbWljaXR5IGNvbnN0cmFpbnRzLiAgRG8ganVzdCBvbmUKLQkJICogdHJhbnNhY3Rpb24gdG8gYXZvaWQgY29tcGxleGl0eS4KLQkJICovCi0JCW5yX3BhZ2VzID0gMjsKKwlpZiAoIW5vdykKIAkJbm93ID0gMTsKLQl9CiAJaWYgKGRvd24pIHsKIAkJLyoKIAkJICogU3RyaW5nIEkvTyBpbiByZXZlcnNlLiAgWXVjay4gIEtpbGwgdGhlIGd1ZXN0LCBmaXggbGF0ZXIuCkBAIC0yNTU0LDE1ICsyNjM1LDcgQEAKIAlpZiAodmNwdS0+YXJjaC5waW8uY3VyX2NvdW50ID09IHZjcHUtPmFyY2gucGlvLmNvdW50KQogCQlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgKytpKSB7Ci0JCXBhZ2UgPSBndmFfdG9fcGFnZSh2Y3B1LCBhZGRyZXNzICsgaSAqIFBBR0VfU0laRSk7Ci0JCXZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzW2ldID0gcGFnZTsKLQkJaWYgKCFwYWdlKSB7Ci0JCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQkJZnJlZV9waW9fZ3Vlc3RfcGFnZXModmNwdSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KKwl2Y3B1LT5hcmNoLnBpby5ndWVzdF9ndmEgPSBhZGRyZXNzOwogCiAJcGlvX2RldiA9IHZjcHVfZmluZF9waW9fZGV2KHZjcHUsIHBvcnQsCiAJCQkJICAgIHZjcHUtPmFyY2gucGlvLmN1cl9jb3VudCwKQEAgLTI1NzAsNyArMjY0MywxMSBAQAogCWlmICghdmNwdS0+YXJjaC5waW8uaW4pIHsKIAkJLyogc3RyaW5nIFBJTyB3cml0ZSAqLwogCQlyZXQgPSBwaW9fY29weV9kYXRhKHZjcHUpOwotCQlpZiAocmV0ID49IDAgJiYgcGlvX2RldikgeworCQlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKSB7CisJCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHJldCA9PSAwICYmIHBpb19kZXYpIHsKIAkJCXBpb19zdHJpbmdfd3JpdGUocGlvX2RldiwgdmNwdSk7CiAJCQljb21wbGV0ZV9waW8odmNwdSk7CiAJCQlpZiAodmNwdS0+YXJjaC5waW8uY291bnQgPT0gMCkKQEAgLTI1ODUsOSArMjY2Miw3MiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2VtdWxhdGVfcGlvX3N0cmluZyk7CiAKK3N0YXRpYyB2b2lkIGJvdW5jZV9vZmYodm9pZCAqaW5mbykKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgIHJlZl9mcmVxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHNjX2toel9yZWY7CisKK3N0YXRpYyBpbnQga3ZtY2xvY2tfY3B1ZnJlcV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOworCXN0cnVjdCBrdm0gKmt2bTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IGksIHNlbmRfaXBpID0gMDsKKworCWlmICghcmVmX2ZyZXEpCisJCXJlZl9mcmVxID0gZnJlcS0+b2xkOworCisJaWYgKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAmJiBmcmVxLT5vbGQgPiBmcmVxLT5uZXcpCisJCXJldHVybiAwOworCWlmICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGZyZXEtPm9sZCA8IGZyZXEtPm5ldykKKwkJcmV0dXJuIDA7CisJcGVyX2NwdShjcHVfdHNjX2toeiwgZnJlcS0+Y3B1KSA9IGNwdWZyZXFfc2NhbGUodHNjX2toel9yZWYsIHJlZl9mcmVxLCBmcmVxLT5uZXcpOworCisJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShrdm0sICZ2bV9saXN0LCB2bV9saXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKKwkJCXZjcHUgPSBrdm0tPnZjcHVzW2ldOworCQkJaWYgKCF2Y3B1KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZjcHUtPmNwdSAhPSBmcmVxLT5jcHUpCisJCQkJY29udGludWU7CisJCQlpZiAoIWt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHZjcHUpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZjcHUtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQkJc2VuZF9pcGkrKzsKKwkJfQorCX0KKwlzcGluX3VubG9jaygma3ZtX2xvY2spOworCisJaWYgKGZyZXEtPm9sZCA8IGZyZXEtPm5ldyAmJiBzZW5kX2lwaSkgeworCQkvKgorCQkgKiBXZSB1cHNjYWxlIHRoZSBmcmVxdWVuY3kuICBNdXN0IG1ha2UgdGhlIGd1ZXN0CisJCSAqIGRvZXNuJ3Qgc2VlIG9sZCBrdm1jbG9jayB2YWx1ZXMgd2hpbGUgcnVubmluZyB3aXRoCisJCSAqIHRoZSBuZXcgZnJlcXVlbmN5LCBvdGhlcndpc2Ugd2UgcmlzayB0aGUgZ3Vlc3Qgc2VlcworCQkgKiB0aW1lIGdvIGJhY2t3YXJkcy4KKwkJICoKKwkJICogSW4gY2FzZSB3ZSB1cGRhdGUgdGhlIGZyZXF1ZW5jeSBmb3IgYW5vdGhlciBjcHUKKwkJICogKHdoaWNoIG1pZ2h0IGJlIGluIGd1ZXN0IGNvbnRleHQpIHNlbmQgYW4gaW50ZXJydXB0CisJCSAqIHRvIGtpY2sgdGhlIGNwdSBvdXQgb2YgZ3Vlc3QgY29udGV4dC4gIE5leHQgdGltZQorCQkgKiBndWVzdCBjb250ZXh0IGlzIGVudGVyZWQga3ZtY2xvY2sgd2lsbCBiZSB1cGRhdGVkLAorCQkgKiBzbyB0aGUgZ3Vlc3Qgd2lsbCBub3Qgc2VlIHN0YWxlIHZhbHVlcy4KKwkJICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShmcmVxLT5jcHUsIGJvdW5jZV9vZmYsIE5VTEwsIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrID0geworICAgICAgICAubm90aWZpZXJfY2FsbCAgPSBrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyCit9OworCiBpbnQga3ZtX2FyY2hfaW5pdCh2b2lkICpvcGFxdWUpCiB7Ci0JaW50IHI7CisJaW50IHIsIGNwdTsKIAlzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKm9wcyA9IChzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKilvcGFxdWU7CiAKIAlpZiAoa3ZtX3g4Nl9vcHMpIHsKQEAgLTI2MTgsNiArMjc1OCwxNSBAQAogCWt2bV9tbXVfc2V0X2Jhc2VfcHRlcyhQVF9QUkVTRU5UX01BU0spOwogCWt2bV9tbXVfc2V0X21hc2tfcHRlcyhQVF9VU0VSX01BU0ssIFBUX0FDQ0VTU0VEX01BU0ssCiAJCQlQVF9ESVJUWV9NQVNLLCBQVDY0X05YX01BU0ssIDAsIDApOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJcGVyX2NwdShjcHVfdHNjX2toeiwgY3B1KSA9IHRzY19raHo7CisJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkgeworCQl0c2Nfa2h6X3JlZiA9IHRzY19raHo7CisJCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJmt2bWNsb2NrX2NwdWZyZXFfbm90aWZpZXJfYmxvY2ssCisJCQkJCSAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKwl9CisKIAlyZXR1cm4gMDsKIAogb3V0OgpAQCAtMjgyNSwyNSArMjk3NCwyMCBAQAogCWlmICgoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYKSAmJiBlLT5pbmRleCAhPSBpbmRleCkKIAkJcmV0dXJuIDA7CiAJaWYgKChlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NUQVRFRlVMX0ZVTkMpICYmCi0JCSEoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TVEFURV9SRUFEX05FWFQpKQorCSAgICAhKGUtPmZsYWdzICYgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVfUkVBRF9ORVhUKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmt2bV9maW5kX2NwdWlkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJICAgICAgdTMyIGZ1bmN0aW9uLCB1MzIgaW5kZXgpCiB7CiAJaW50IGk7Ci0JdTMyIGZ1bmN0aW9uLCBpbmRleDsKLQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZSwgKmJlc3Q7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3QgPSBOVUxMOwogCi0JZnVuY3Rpb24gPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKLQlpbmRleCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOwotCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCAwKTsKLQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgMCk7Ci0Ja3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIDApOwotCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCAwKTsKLQliZXN0ID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgdmNwdS0+YXJjaC5jcHVpZF9uZW50OyArK2kpIHsKKwkJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmU7CisKIAkJZSA9ICZ2Y3B1LT5hcmNoLmNwdWlkX2VudHJpZXNbaV07CiAJCWlmIChpc19tYXRjaGluZ19jcHVpZF9lbnRyeShlLCBmdW5jdGlvbiwgaW5kZXgpKSB7CiAJCQlpZiAoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TVEFURUZVTF9GVU5DKQpAQCAtMjg1OCw2ICszMDAyLDIxIEBACiAJCQlpZiAoIWJlc3QgfHwgZS0+ZnVuY3Rpb24gPiBiZXN0LT5mdW5jdGlvbikKIAkJCQliZXN0ID0gZTsKIAl9CisJcmV0dXJuIGJlc3Q7Cit9CisKK3ZvaWQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXUzMiBmdW5jdGlvbiwgaW5kZXg7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7CisKKwlmdW5jdGlvbiA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCWluZGV4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIDApOworCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCBmdW5jdGlvbiwgaW5kZXgpOwogCWlmIChiZXN0KSB7CiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCBiZXN0LT5lYXgpOwogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgYmVzdC0+ZWJ4KTsKQEAgLTI5NDMsNiArMzEwMiw4IEBACiAJaWYgKHZjcHUtPnJlcXVlc3RzKSB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NSUdSQVRFX1RJTUVSLCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJX19rdm1fbWlncmF0ZV90aW1lcnModmNwdSk7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9LVk1DTE9DS19VUERBVEUsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQlrdm1fd3JpdGVfZ3Vlc3RfdGltZSh2Y3B1KTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX01NVV9TWU5DLCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJa3ZtX21tdV9zeW5jX3Jvb3RzKHZjcHUpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfVExCX0ZMVVNILCAmdmNwdS0+cmVxdWVzdHMpKQpAQCAtMjk3Nyw5ICszMTM4LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bV94ODZfb3BzLT5ndWVzdF9kZWJ1Z19wcmUodmNwdSk7Ci0KIAl2Y3B1LT5ndWVzdF9tb2RlID0gMTsKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IGd1ZXN0X21vZGUgYXNzaWdubWVudCB3b24ndCBoYXBwZW4gYWZ0ZXIKQEAgLTMwMDAsMTAgKzMxNTgsMzQgQEAKIAogCWt2bV9ndWVzdF9lbnRlcigpOwogCisJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjYsIDYpOworCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI3LCA3KTsKKwlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykpIHsKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlswXSwgMCk7CisJCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMV0sIDEpOworCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzJdLCAyKTsKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlszXSwgMyk7CisKKwkJc2V0X2RlYnVncmVnKDAsIDcpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbMF0sIDApOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbMV0sIDEpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbMl0sIDIpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbM10sIDMpOworCX0KIAogCUtWTVRSQUNFXzBEKFZNRU5UUlksIHZjcHUsIGVudHJ5ZXhpdCk7CiAJa3ZtX3g4Nl9vcHMtPnJ1bih2Y3B1LCBrdm1fcnVuKTsKIAorCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzKSkgeworCQlzZXRfZGVidWdyZWcoMCwgNyk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMF0sIDApOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzFdLCAxKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsyXSwgMik7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbM10sIDMpOworCX0KKwlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNiwgNik7CisJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjcsIDcpOworCiAJdmNwdS0+Z3Vlc3RfbW9kZSA9IDA7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCkBAIC0zMTkwLDcgKzMzNzIsNyBAQAogCS8qCiAJICogRG9uJ3QgbGVhayBkZWJ1ZyBmbGFncyBpbiBjYXNlIHRoZXkgd2VyZSBzZXQgZm9yIGd1ZXN0IGRlYnVnZ2luZwogCSAqLwotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkICYmIHZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXApCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCiAJCXJlZ3MtPnJmbGFncyAmPSB+KFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGKTsKIAogCXZjcHVfcHV0KHZjcHUpOwpAQCAtMzgwOSwxNSArMzk5MSwzMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQlpbnQgcjsKKwlpbnQgaSwgcjsKIAogCXZjcHVfbG9hZCh2Y3B1KTsKIAorCWlmICgoZGJnLT5jb250cm9sICYgKEtWTV9HVUVTVERCR19FTkFCTEUgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgPT0KKwkgICAgKEtWTV9HVUVTVERCR19FTkFCTEUgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX0RCX1JFR1M7ICsraSkKKwkJCXZjcHUtPmFyY2guZWZmX2RiW2ldID0gZGJnLT5hcmNoLmRlYnVncmVnW2ldOworCQl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0KKwkJCShkYmctPmFyY2guZGVidWdyZWdbN10gJiBEUjdfQlBfRU5fTUFTSyk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEtWTV9OUl9EQl9SRUdTOyBpKyspCisJCQl2Y3B1LT5hcmNoLmVmZl9kYltpXSA9IHZjcHUtPmFyY2guZGJbaV07CisJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPSAodmNwdS0+YXJjaC5kcjcgJiBEUjdfQlBfRU5fTUFTSyk7CisJfQorCiAJciA9IGt2bV94ODZfb3BzLT5zZXRfZ3Vlc3RfZGVidWcodmNwdSwgZGJnKTsKIAorCWlmIChkYmctPmNvbnRyb2wgJiBLVk1fR1VFU1REQkdfSU5KRUNUX0RCKQorCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIERCX1ZFQ1RPUik7CisJZWxzZSBpZiAoZGJnLT5jb250cm9sICYgS1ZNX0dVRVNUREJHX0lOSkVDVF9CUCkKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBCUF9WRUNUT1IpOworCiAJdmNwdV9wdXQodmNwdSk7CiAKIAlyZXR1cm4gcjsKQEAgLTQwMDUsNiArNDIwNCwxMSBAQAogCXZjcHUtPmFyY2gubm1pX3BlbmRpbmcgPSBmYWxzZTsKIAl2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCA9IGZhbHNlOwogCisJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9IDA7CisJbWVtc2V0KHZjcHUtPmFyY2guZGIsIDAsIHNpemVvZih2Y3B1LT5hcmNoLmRiKSk7CisJdmNwdS0+YXJjaC5kcjYgPSBEUjZfRklYRURfMTsKKwl2Y3B1LT5hcmNoLmRyNyA9IERSN19GSVhFRF8xOworCiAJcmV0dXJuIGt2bV94ODZfb3BzLT52Y3B1X3Jlc2V0KHZjcHUpOwogfQogCkBAIC00MDk4LDYgKzQzMDIsOCBAQAogCS8qIFJlc2VydmUgYml0IDAgb2YgaXJxX3NvdXJjZXNfYml0bWFwIGZvciB1c2Vyc3BhY2UgaXJxIHNvdXJjZSAqLwogCXNldF9iaXQoS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELCAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCk7CiAKKwlyZHRzY2xsKGt2bS0+YXJjaC52bV9pbml0X3RzYyk7CisKIAlyZXR1cm4ga3ZtOwogfQogCkBAIC00MTI3LDkgKzQzMzMsMTMgQEAKIAogfQogCi12b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKQordm9pZCBrdm1fYXJjaF9zeW5jX2V2ZW50cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJa3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoa3ZtKTsKK30KKwordm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkKK3sKIAlrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoa3ZtKTsKIAlrdm1fZnJlZV9waXQoa3ZtKTsKIAlrZnJlZShrdm0tPmFyY2gudnBpYyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCmluZGV4IGQxNzRkYjcuLmNhOTE3NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCisrKyBiL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAkwLCBJbXBsaWNpdE9wcyB8IFN0YWNrLCAwLCAwLAogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTW92LCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IE1vdiwKIAkvKiAweEM4IC0gMHhDRiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwgMCwgMCwKIAkvKiAweEQwIC0gMHhENyAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwKQEAgLTExMzYsMTggKzExMzYsMTkgQEAKIH0KIAogc3RhdGljIGludCBlbXVsYXRlX3BvcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKKwkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKKwkJICAgICAgIHZvaWQgKmRlc3QsIGludCBsZW4pCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJaW50IHJjOwogCiAJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQocmVnaXN0ZXJfYWRkcmVzcyhjLCBzc19iYXNlKGN0eHQpLAogCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pLAotCQkJCSZjLT5zcmMudmFsLCBjLT5zcmMuYnl0ZXMsIGN0eHQtPnZjcHUpOworCQkJCWRlc3QsIGxlbiwgY3R4dC0+dmNwdSk7CiAJaWYgKHJjICE9IDApCiAJCXJldHVybiByYzsKIAotCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLCBjLT5zcmMuYnl0ZXMpOworCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLCBsZW4pOwogCXJldHVybiByYzsKIH0KIApAQCAtMTE1NywxMSArMTE1OCw5IEBACiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJaW50IHJjOwogCi0JYy0+c3JjLmJ5dGVzID0gYy0+ZHN0LmJ5dGVzOwotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzKTsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmRzdC52YWwsIGMtPmRzdC5ieXRlcyk7CiAJaWYgKHJjICE9IDApCiAJCXJldHVybiByYzsKLQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI3OSw2ICsxMjc4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZW11bGF0ZV9yZXRfZmFyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGNzOworCisJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjLT5laXAsIGMtPm9wX2J5dGVzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlpZiAoYy0+b3BfYnl0ZXMgPT0gNCkKKwkJYy0+ZWlwID0gKHUzMiljLT5laXA7CisJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjcywgYy0+b3BfYnl0ZXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0ga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQtPnZjcHUsICh1MTYpY3MsIDEsIFZDUFVfU1JFR19DUyk7CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW5saW5lIGludCB3cml0ZWJhY2soc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCQkgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQogewpAQCAtMTQ2NywxMSArMTQ4NSw5IEBACiAJCWJyZWFrOwogCWNhc2UgMHg1OCAuLi4gMHg1ZjogLyogcG9wIHJlZyAqLwogCXBvcF9pbnN0cnVjdGlvbjoKLQkJYy0+c3JjLmJ5dGVzID0gYy0+b3BfYnl0ZXM7Ci0JCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzKTsKKwkJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjLT5kc3QudmFsLCBjLT5vcF9ieXRlcyk7CiAJCWlmIChyYyAhPSAwKQogCQkJZ290byBkb25lOwotCQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKIAkJYnJlYWs7CiAJY2FzZSAweDYzOgkJLyogbW92c3hkICovCiAJCWlmIChjdHh0LT5tb2RlICE9IFg4NkVNVUxfTU9ERV9QUk9UNjQpCkBAIC0xNzM4LDYgKzE3NTQsMTEgQEAKIAltb3Y6CiAJCWMtPmRzdC52YWwgPSBjLT5zcmMudmFsOwogCQlicmVhazsKKwljYXNlIDB4Y2I6CQkvKiByZXQgZmFyICovCisJCXJjID0gZW11bGF0ZV9yZXRfZmFyKGN0eHQsIG9wcyk7CisJCWlmIChyYykKKwkJCWdvdG8gZG9uZTsKKwkJYnJlYWs7CiAJY2FzZSAweGQwIC4uLiAweGQxOgkvKiBHcnAyICovCiAJCWMtPnNyYy52YWwgPSAxOwogCQllbXVsYXRlX2dycDIoY3R4dCk7CkBAIC0xOTA4LDExICsxOTI5LDE2IEBACiAJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CiAJCQlicmVhazsKIAkJY2FzZSAzOiAvKiBsaWR0L3ZtbWNhbGwgKi8KLQkJCWlmIChjLT5tb2RybV9tb2QgPT0gMyAmJiBjLT5tb2RybV9ybSA9PSAxKSB7Ci0JCQkJcmMgPSBrdm1fZml4X2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gZG9uZTsKLQkJCQlrdm1fZW11bGF0ZV9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7CisJCQlpZiAoYy0+bW9kcm1fbW9kID09IDMpIHsKKwkJCQlzd2l0Y2ggKGMtPm1vZHJtX3JtKSB7CisJCQkJY2FzZSAxOgorCQkJCQlyYyA9IGt2bV9maXhfaHlwZXJjYWxsKGN0eHQtPnZjcHUpOworCQkJCQlpZiAocmMpCisJCQkJCQlnb3RvIGRvbmU7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlyYyA9IHJlYWRfZGVzY3JpcHRvcihjdHh0LCBvcHMsIGMtPnNyYy5wdHIsCiAJCQkJCQkgICAgICZzaXplLCAmYWRkcmVzcywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IDkyZjFjNmYuLjk2MGE4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xndWVzdC9ib290LmMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwpAQCAtMzQzLDYgKzM0MywxMSBAQAogCQkgKiBmbHVzaF90bGJfdXNlcigpIGZvciBib3RoIHVzZXIgYW5kIGtlcm5lbCBtYXBwaW5ncyB1bmxlc3MKIAkJICogdGhlIFBhZ2UgR2xvYmFsIEVuYWJsZSAoUEdFKSBmZWF0dXJlIGJpdCBpcyBzZXQuICovCiAJCSpkeCB8PSAweDAwMDAyMDAwOworCQkvKiBXZSBhbHNvIGxpZSwgYW5kIHNheSB3ZSdyZSBmYW1pbHkgaWQgNS4gIDYgb3IgZ3JlYXRlcgorCQkgKiBsZWFkcyB0byBhIHJkbXNyIGluIGVhcmx5X2luaXRfaW50ZWwgd2hpY2ggd2UgY2FuJ3QgaGFuZGxlLgorCQkgKiBGYW1pbHkgSUQgaXMgcmV0dXJuZWQgYXMgYml0cyA4LTEyIGluIGF4LiAqLworCQkqYXggJj0gMHhGRkZGRjBGRjsKKwkJKmF4IHw9IDB4MDAwMDA1MDA7CiAJCWJyZWFrOwogCWNhc2UgMHg4MDAwMDAwMDoKIAkJLyogRnV0dXJlcHJvb2YgdGhpcyBhIGxpdHRsZTogaWYgdGhleSBhc2sgaG93IG11Y2ggZXh0ZW5kZWQKQEAgLTU4OSwxOSArNTk0LDIxIEBACiAJCS8qIFNvbWUgc3lzdGVtcyBtYXAgInZlY3RvcnMiIHRvIGludGVycnVwdHMgd2VpcmRseS4gIExndWVzdCBoYXMKIAkJICogYSBzdHJhaWdodGZvcndhcmQgMSB0byAxIG1hcHBpbmcsIHNvIGZvcmNlIHRoYXQgaGVyZS4gKi8KIAkJX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdID0gaTsKLQkJaWYgKHZlY3RvciAhPSBTWVNDQUxMX1ZFQ1RPUikgewotCQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsCi0JCQkJICAgICAgaW50ZXJydXB0W3ZlY3Rvci1GSVJTVF9FWFRFUk5BTF9WRUNUT1JdKTsKLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZsZ3Vlc3RfaXJxX2NvbnRyb2xsZXIsCi0JCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLAotCQkJCQkJICAgICAgImxldmVsIik7Ci0JCX0KKwkJaWYgKHZlY3RvciAhPSBTWVNDQUxMX1ZFQ1RPUikKKwkJCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaV0pOwogCX0KIAkvKiBUaGlzIGNhbGwgaXMgcmVxdWlyZWQgdG8gc2V0IHVwIGZvciA0ayBzdGFja3MsIHdoZXJlIHdlIGhhdmUKIAkgKiBzZXBhcmF0ZSBzdGFja3MgZm9yIGhhcmQgYW5kIHNvZnQgaW50ZXJydXB0cy4gKi8KIAlpcnFfY3R4X2luaXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAordm9pZCBsZ3Vlc3Rfc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KGlycSwgMCk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbGd1ZXN0X2lycV9jb250cm9sbGVyLAorCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOworfQorCiAvKgogICogVGltZS4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYyBiL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCmluZGV4IGEyNjVhN2MuLjUwYjU5MTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCkBAIC05Niw3ICs5Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9JUlFQT0xMLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9JUlFQT0xMIHwgSVJRRl9USU1FUiwKIAkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAidGltZXIiCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3NldHVwLmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYwppbmRleCBkOTE0YTc5Li44ZTUxMTgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYwpAQCAtNTYsNyArNTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9JUlFQT0xMLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9JUlFQT0xMIHwgSVJRRl9USU1FUiwKIAkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAidGltZXIiCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwppbmRleCA3ZmZjZGVlLi5iOWNjODRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpAQCAtNjUsNyArNjUsNyBAQAogCiAvKiBCaXRtYXNrIG9mIENQVXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIC0gZXhwb3J0ZWQgYnkgaTM4Nl9zeW1zLmMsIHVzZWQKICAqIGJ5IHNjaGVkdWxlciBidXQgaW5kZXhlZCBwaHlzaWNhbGx5ICovCi1jcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXAgPSBDUFVfTUFTS19OT05FOworc3RhdGljIGNwdW1hc2tfdCB2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwID0gQ1BVX01BU0tfTk9ORTsKIAogLyogVGhlIGludGVybmFsIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgc2VuZF9DUEkoX191MzIgY3B1c2V0LCBfX3U4IGNwaSk7CkBAIC0zNjYsMTkgKzM2NiwxOSBAQAogCS8qIHNldCB1cCBldmVyeXRoaW5nIGZvciBqdXN0IHRoaXMgQ1BVLCB3ZSBjYW4gYWx0ZXIKIAkgKiB0aGlzIGFzIHdlIHN0YXJ0IHRoZSBvdGhlciBDUFVzIGxhdGVyICovCiAJLyogbm93IGdldCB0aGUgQ1BVIGRpc3Bvc2l0aW9uIGZyb20gdGhlIGV4dGVuZGVkIENNT1MgKi8KLQljcHVzX2FkZHIocGh5c19jcHVfcHJlc2VudF9tYXApWzBdID0KKwljcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0gPQogCSAgICB2b3lhZ2VyX2V4dGVuZGVkX2Ntb3NfcmVhZChWT1lBR0VSX1BST0NFU1NPUl9QUkVTRU5UX01BU0spOwotCWNwdXNfYWRkcihwaHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0KKwljcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0KIAkgICAgdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLICsgMSkgPDwgODsKLQljcHVzX2FkZHIocGh5c19jcHVfcHJlc2VudF9tYXApWzBdIHw9CisJY3B1c19hZGRyKHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXApWzBdIHw9CiAJICAgIHZveWFnZXJfZXh0ZW5kZWRfY21vc19yZWFkKFZPWUFHRVJfUFJPQ0VTU09SX1BSRVNFTlRfTUFTSyArCiAJCQkJICAgICAgIDIpIDw8IDE2OwotCWNwdXNfYWRkcihwaHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0KKwljcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0KIAkgICAgdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLICsKIAkJCQkgICAgICAgMykgPDwgMjQ7Ci0JaW5pdF9jcHVfcG9zc2libGUoJnBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQlwcmludGsoIlZPWUFHRVIgU01QOiBwaHlzX2NwdV9wcmVzZW50X21hcCA9IDB4JWx4XG4iLAotCSAgICAgICBjcHVzX2FkZHIocGh5c19jcHVfcHJlc2VudF9tYXApWzBdKTsKKwlpbml0X2NwdV9wb3NzaWJsZSgmdm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcCk7CisJcHJpbnRrKCJWT1lBR0VSIFNNUDogdm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcCA9IDB4JWx4XG4iLAorCSAgICAgICBjcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0pOwogCS8qIEhlcmUgd2Ugc2V0IHVwIHRoZSBWSUMgdG8gZW5hYmxlIFNNUCAqLwogCS8qIGVuYWJsZSB0aGUgQ1BJcyBieSB3cml0aW5nIHRoZSBiYXNlIHZlY3RvciB0byB0aGVpciByZWdpc3RlciAqLwogCW91dGIoVklDX0RFRkFVTFRfQ1BJX0JBU0UsIFZJQ19DUElfQkFTRV9SRUdJU1RFUik7CkBAIC02MjgsMTUgKzYyOCwxNSBAQAogCQkvKiBub3cgdGhhdCB0aGUgY2F0IGhhcyBwcm9iZWQgdGhlIFZveWFnZXIgU3lzdGVtIEJ1cywgc2FuaXR5CiAJCSAqIGNoZWNrIHRoZSBjcHUgbWFwICovCiAJCWlmICgoKHZveWFnZXJfcXVhZF9wcm9jZXNzb3JzIHwgdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycykKLQkJICAgICAmIGNwdXNfYWRkcihwaHlzX2NwdV9wcmVzZW50X21hcClbMF0pICE9Ci0JCSAgICBjcHVzX2FkZHIocGh5c19jcHVfcHJlc2VudF9tYXApWzBdKSB7CisJCSAgICAgJiBjcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0pICE9CisJCSAgICBjcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0pIHsKIAkJCS8qIHNob3VsZCBwYW5pYyAqLwogCQkJcHJpbnRrKCJcblxuKioqV0FSTklORyoqKiAiCiAJCQkgICAgICAgIlNhbml0eSBjaGVjayBvZiBDUFUgcHJlc2VudCBtYXAgRkFJTEVEXG4iKTsKIAkJfQogCX0gZWxzZSBpZiAodm95YWdlcl9sZXZlbCA9PSA0KQogCQl2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzID0KLQkJICAgIGNwdXNfYWRkcihwaHlzX2NwdV9wcmVzZW50X21hcClbMF07CisJCSAgICBjcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF07CiAKIAkvKiB0aGlzIHNldHMgdXAgdGhlIGlkbGUgdGFzayB0byBydW4gb24gdGhlIGN1cnJlbnQgY3B1ICovCiAJdm95YWdlcl9leHRlbmRlZF9jcHVzID0gMTsKQEAgLTY3MCw3ICs2NzAsNyBAQAogCS8qIGxvb3Agb3ZlciBhbGwgdGhlIGV4dGVuZGVkIFZJQyBDUFVzIGFuZCBib290IHRoZW0uICBUaGUKIAkgKiBRdWFkIENQVXMgbXVzdCBiZSBib290c3RyYXBwZWQgYnkgdGhlaXIgZXh0ZW5kZWQgVklDIGNwdSAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspIHsKLQkJaWYgKGkgPT0gYm9vdF9jcHVfaWQgfHwgIWNwdV9pc3NldChpLCBwaHlzX2NwdV9wcmVzZW50X21hcCkpCisJCWlmIChpID09IGJvb3RfY3B1X2lkIHx8ICFjcHVfaXNzZXQoaSwgdm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcCkpCiAJCQljb250aW51ZTsKIAkJZG9fYm9vdF9jcHUoaSk7CiAJCS8qIFRoaXMgdWRlbGF5IHNlZW1zIHRvIGJlIG5lZWRlZCBmb3IgdGhlIFF1YWQgYm9vdHMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hdGgtZW11L2ZwdV9hdXguYyBiL2FyY2gveDg2L21hdGgtZW11L2ZwdV9hdXguYwppbmRleCA0OTFlNzM3Li5hYTA5ODcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYXRoLWVtdS9mcHVfYXV4LmMKKysrIGIvYXJjaC94ODYvbWF0aC1lbXUvZnB1X2F1eC5jCkBAIC0zMCwyMCArMzAsMjkgQEAKIH0KIAogLyogTmVlZHMgdG8gYmUgZXh0ZXJuYWxseSB2aXNpYmxlICovCi12b2lkIGZpbml0KHZvaWQpCit2b2lkIGZpbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JY29udHJvbF93b3JkID0gMHgwMzdmOwotCXBhcnRpYWxfc3RhdHVzID0gMDsKLQl0b3AgPSAwOwkJLyogV2UgZG9uJ3Qga2VlcCB0b3AgaW4gdGhlIHN0YXR1cyB3b3JkIGludGVybmFsbHkuICovCi0JZnB1X3RhZ193b3JkID0gMHhmZmZmOworCXN0cnVjdCBpMzg3X3NvZnRfc3RydWN0ICpzb2Z0ID0gJnRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdDsKKwlzdHJ1Y3QgYWRkcmVzcyAqb2FkZHIsICppYWRkcjsKKwlzb2Z0LT5jd2QgPSAweDAzN2Y7CisJc29mdC0+c3dkID0gMDsKKwlzb2Z0LT5mdG9wID0gMDsJLyogV2UgZG9uJ3Qga2VlcCB0b3AgaW4gdGhlIHN0YXR1cyB3b3JkIGludGVybmFsbHkuICovCisJc29mdC0+dHdkID0gMHhmZmZmOwogCS8qIFRoZSBiZWhhdmlvdXIgaXMgZGlmZmVyZW50IGZyb20gdGhhdCBkZXRhaWxlZCBpbgogCSAgIFNlY3Rpb24gMTUuMS42IG9mIHRoZSBJbnRlbCBtYW51YWwgKi8KLQlvcGVyYW5kX2FkZHJlc3Mub2Zmc2V0ID0gMDsKLQlvcGVyYW5kX2FkZHJlc3Muc2VsZWN0b3IgPSAwOwotCWluc3RydWN0aW9uX2FkZHJlc3Mub2Zmc2V0ID0gMDsKLQlpbnN0cnVjdGlvbl9hZGRyZXNzLnNlbGVjdG9yID0gMDsKLQlpbnN0cnVjdGlvbl9hZGRyZXNzLm9wY29kZSA9IDA7Ci0Jbm9faXBfdXBkYXRlID0gMTsKKwlvYWRkciA9IChzdHJ1Y3QgYWRkcmVzcyAqKSZzb2Z0LT5mb287CisJb2FkZHItPm9mZnNldCA9IDA7CisJb2FkZHItPnNlbGVjdG9yID0gMDsKKwlpYWRkciA9IChzdHJ1Y3QgYWRkcmVzcyAqKSZzb2Z0LT5maXA7CisJaWFkZHItPm9mZnNldCA9IDA7CisJaWFkZHItPnNlbGVjdG9yID0gMDsKKwlpYWRkci0+b3Bjb2RlID0gMDsKKwlzb2Z0LT5ub191cGRhdGUgPSAxOworfQorCit2b2lkIGZpbml0KHZvaWQpCit7CisJZmluaXRfdGFzayhjdXJyZW50KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCBlNmQzNmI0Li5iMTM1MjI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC03MTQsNiArNzE0LDggQEAKIAlwb3MgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKIAllbmRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSkgPj4gUE1EX1NISUZUKQogCQkJPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWlmIChlbmRfcGZuID4gKGVuZCA+PiBQQUdFX1NISUZUKSkKKwkJZW5kX3BmbiA9IGVuZCA+PiBQQUdFX1NISUZUOwogCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CiAJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgMCk7CiAJCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMgYi9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCmluZGV4IGNhNTMyMjQuLjA0MTAyZDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwpAQCAtMjAsNiArMjAsMTcgQEAKICNpbmNsdWRlIDxhc20vcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKK2ludCBpc19pb19tYXBwaW5nX3Bvc3NpYmxlKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisjaWZuZGVmIENPTkZJR19YODZfUEFFCisJLyogVGhlcmUgaXMgbm8gd2F5IHRvIG1hcCBncmVhdGVyIHRoYW4gMSA8PCAzMiBhZGRyZXNzIHdpdGhvdXQgUEFFICovCisJaWYgKGJhc2UgKyBzaXplID4gMHgxMDAwMDAwMDBVTEwpCisJCXJldHVybiAwOworI2VuZGlmCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc19pb19tYXBwaW5nX3Bvc3NpYmxlKTsKKwogLyogTWFwICdwZm4nIHVzaW5nIGZpeGVkIG1hcCAndHlwZScgYW5kIHByb3RlY3Rpb25zICdwcm90JwogICovCiB2b2lkICoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCBhZjc1MGFiLi5mNDVkNWUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0xMzQsMjUgKzEzNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBwYWdlcmFuZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCByYW1fcGFnZSA9IDAsIG5vdF9yYW1wYWdlID0gMDsKLQl1bnNpZ25lZCBsb25nIHBhZ2VfbnI7Ci0KLQlmb3IgKHBhZ2VfbnIgPSAoc3RhcnQgPj4gUEFHRV9TSElGVCk7IHBhZ2VfbnIgPCAoZW5kID4+IFBBR0VfU0hJRlQpOwotCSAgICAgKytwYWdlX25yKSB7Ci0JCWlmIChwYWdlX2lzX3JhbShwYWdlX25yKSkKLQkJCXJhbV9wYWdlID0gMTsKLQkJZWxzZQotCQkJbm90X3JhbXBhZ2UgPSAxOwotCi0JCWlmIChyYW1fcGFnZSA9PSBub3RfcmFtcGFnZSkKLQkJCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gcmFtX3BhZ2U7Ci19Ci0KIC8qCiAgKiBGaXggdXAgdGhlIGxpbmVhciBkaXJlY3QgbWFwcGluZyBvZiB0aGUga2VybmVsIHRvIGF2b2lkIGNhY2hlIGF0dHJpYnV0ZQogICogY29uZmxpY3RzLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21taW8uYyBiL2FyY2gveDg2L21tL2ttbWlvLmMKaW5kZXggOTNkODIwMy4uNmE1MThkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21taW8uYworKysgYi9hcmNoL3g4Ni9tbS9rbW1pby5jCkBAIC0zMiwxMSArMzIsMTQgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGttbWlvX2ZhdWx0X3BhZ2UgKnJlbGVhc2VfbmV4dDsKIAl1bnNpZ25lZCBsb25nIHBhZ2U7IC8qIGxvY2F0aW9uIG9mIHRoZSBmYXVsdCBwYWdlICovCisJYm9vbCBvbGRfcHJlc2VuY2U7IC8qIHBhZ2UgcHJlc2VuY2UgcHJpb3IgdG8gYXJtaW5nICovCisJYm9vbCBhcm1lZDsKIAogCS8qCiAJICogTnVtYmVyIG9mIHRpbWVzIHRoaXMgcGFnZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFzIGEgcGFydAogCSAqIG9mIGEgcHJvYmUuIElmIHplcm8sIHBhZ2UgaXMgZGlzYXJtZWQgYW5kIHRoaXMgbWF5IGJlIGZyZWVkLgotCSAqIFVzZWQgb25seSBieSB3cml0ZXJzIChSQ1UpLgorCSAqIFVzZWQgb25seSBieSB3cml0ZXJzIChSQ1UpIGFuZCBwb3N0X2ttbWlvX2hhbmRsZXIoKS4KKwkgKiBQcm90ZWN0ZWQgYnkga21taW9fbG9jaywgd2hlbiBsaW5rZWQgaW50byBrbW1pb19wYWdlX3RhYmxlLgogCSAqLwogCWludCBjb3VudDsKIH07CkBAIC0xMDUsNTcgKzEwOCw4NSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfcGFnZV9wcmVzZW50KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBwcmVzZW50LAotCQkJCQkJCXVuc2lnbmVkIGludCAqcGdsZXZlbCkKK3N0YXRpYyB2b2lkIHNldF9wbWRfcHJlc2VuY2UocG1kX3QgKnBtZCwgYm9vbCBwcmVzZW50LCBib29sICpvbGQpCiB7Ci0JcHRldmFsX3QgcHRldmFsOwotCXBtZHZhbF90IHBtZHZhbDsKKwlwbWR2YWxfdCB2ID0gcG1kX3ZhbCgqcG1kKTsKKwkqb2xkID0gISEodiAmIF9QQUdFX1BSRVNFTlQpOworCXYgJj0gfl9QQUdFX1BSRVNFTlQ7CisJaWYgKHByZXNlbnQpCisJCXYgfD0gX1BBR0VfUFJFU0VOVDsKKwlzZXRfcG1kKHBtZCwgX19wbWQodikpOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHRlX3ByZXNlbmNlKHB0ZV90ICpwdGUsIGJvb2wgcHJlc2VudCwgYm9vbCAqb2xkKQoreworCXB0ZXZhbF90IHYgPSBwdGVfdmFsKCpwdGUpOworCSpvbGQgPSAhISh2ICYgX1BBR0VfUFJFU0VOVCk7CisJdiAmPSB+X1BBR0VfUFJFU0VOVDsKKwlpZiAocHJlc2VudCkKKwkJdiB8PSBfUEFHRV9QUkVTRU5UOworCXNldF9wdGVfYXRvbWljKHB0ZSwgX19wdGUodikpOworfQorCitzdGF0aWMgaW50IHNldF9wYWdlX3ByZXNlbmNlKHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBwcmVzZW50LCBib29sICpvbGQpCit7CiAJdW5zaWduZWQgaW50IGxldmVsOwotCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHIsICZsZXZlbCk7CiAKIAlpZiAoIXB0ZSkgewogCQlwcl9lcnIoImttbWlvOiBubyBwdGUgZm9yIHBhZ2UgMHglMDhseFxuIiwgYWRkcik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChwZ2xldmVsKQotCQkqcGdsZXZlbCA9IGxldmVsOwotCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgUEdfTEVWRUxfMk06Ci0JCXBtZCA9IChwbWRfdCAqKXB0ZTsKLQkJcG1kdmFsID0gcG1kX3ZhbCgqcG1kKSAmIH5fUEFHRV9QUkVTRU5UOwotCQlpZiAocHJlc2VudCkKLQkJCXBtZHZhbCB8PSBfUEFHRV9QUkVTRU5UOwotCQlzZXRfcG1kKHBtZCwgX19wbWQocG1kdmFsKSk7CisJCXNldF9wbWRfcHJlc2VuY2UoKHBtZF90ICopcHRlLCBwcmVzZW50LCBvbGQpOwogCQlicmVhazsKLQogCWNhc2UgUEdfTEVWRUxfNEs6Ci0JCXB0ZXZhbCA9IHB0ZV92YWwoKnB0ZSkgJiB+X1BBR0VfUFJFU0VOVDsKLQkJaWYgKHByZXNlbnQpCi0JCQlwdGV2YWwgfD0gX1BBR0VfUFJFU0VOVDsKLQkJc2V0X3B0ZV9hdG9taWMocHRlLCBfX3B0ZShwdGV2YWwpKTsKKwkJc2V0X3B0ZV9wcmVzZW5jZShwdGUsIHByZXNlbnQsIG9sZCk7CiAJCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJcHJfZXJyKCJrbW1pbzogdW5leHBlY3RlZCBwYWdlIGxldmVsIDB4JXguXG4iLCBsZXZlbCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC0xOwogCX0KIAogCV9fZmx1c2hfdGxiX29uZShhZGRyKTsKKwlyZXR1cm4gMDsKIH0KIAotLyoqIE1hcmsgdGhlIGdpdmVuIHBhZ2UgYXMgbm90IHByZXNlbnQuIEFjY2VzcyB0byBpdCB3aWxsIHRyaWdnZXIgYSBmYXVsdC4gKi8KLXN0YXRpYyB2b2lkIGFybV9rbW1pb19mYXVsdF9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgaW50ICpwZ2xldmVsKQorLyoKKyAqIE1hcmsgdGhlIGdpdmVuIHBhZ2UgYXMgbm90IHByZXNlbnQuIEFjY2VzcyB0byBpdCB3aWxsIHRyaWdnZXIgYSBmYXVsdC4KKyAqCisgKiBTdHJ1Y3Qga21taW9fZmF1bHRfcGFnZSBpcyBwcm90ZWN0ZWQgYnkgUkNVIGFuZCBrbW1pb19sb2NrLCBidXQgdGhlCisgKiBwcm90ZWN0aW9uIGlzIGlnbm9yZWQgaGVyZS4gUkNVIHJlYWQgbG9jayBpcyBhc3N1bWVkIGhlbGQsIHNvIHRoZSBzdHJ1Y3QKKyAqIHdpbGwgbm90IGRpc2FwcGVhciB1bmV4cGVjdGVkbHkuIEZ1cnRoZXJtb3JlLCB0aGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlLAorICogdGhhdCBkb3VibGUgYXJtaW5nIHRoZSBzYW1lIHZpcnR1YWwgYWRkcmVzcyAocGFnZSkgY2Fubm90IG9jY3VyLgorICoKKyAqIERvdWJsZSBkaXNhcm1pbmcgb24gdGhlIG90aGVyIGhhbmQgaXMgYWxsb3dlZCwgYW5kIG1heSBvY2N1ciB3aGVuIGEgZmF1bHQKKyAqIGFuZCBtbWlvdHJhY2Ugc2h1dGRvd24gaGFwcGVuIHNpbXVsdGFuZW91c2x5LgorICovCitzdGF0aWMgaW50IGFybV9rbW1pb19mYXVsdF9wYWdlKHN0cnVjdCBrbW1pb19mYXVsdF9wYWdlICpmKQogewotCXNldF9wYWdlX3ByZXNlbnQocGFnZSAmIFBBR0VfTUFTSywgZmFsc2UsIHBnbGV2ZWwpOworCWludCByZXQ7CisJV0FSTl9PTkNFKGYtPmFybWVkLCBLRVJOX0VSUiAia21taW8gcGFnZSBhbHJlYWR5IGFybWVkLlxuIik7CisJaWYgKGYtPmFybWVkKSB7CisJCXByX3dhcm5pbmcoImttbWlvIGRvdWJsZS1hcm06IHBhZ2UgMHglMDhseCwgcmVmICVkLCBvbGQgJWRcbiIsCisJCQkJCWYtPnBhZ2UsIGYtPmNvdW50LCBmLT5vbGRfcHJlc2VuY2UpOworCX0KKwlyZXQgPSBzZXRfcGFnZV9wcmVzZW5jZShmLT5wYWdlLCBmYWxzZSwgJmYtPm9sZF9wcmVzZW5jZSk7CisJV0FSTl9PTkNFKHJldCA8IDAsIEtFUk5fRVJSICJrbW1pbyBhcm1pbmcgMHglMDhseCBmYWlsZWQuXG4iLCBmLT5wYWdlKTsKKwlmLT5hcm1lZCA9IHRydWU7CisJcmV0dXJuIHJldDsKIH0KIAotLyoqIE1hcmsgdGhlIGdpdmVuIHBhZ2UgYXMgcHJlc2VudC4gKi8KLXN0YXRpYyB2b2lkIGRpc2FybV9rbW1pb19mYXVsdF9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgaW50ICpwZ2xldmVsKQorLyoqIFJlc3RvcmUgdGhlIGdpdmVuIHBhZ2UgdG8gc2F2ZWQgcHJlc2VuY2Ugc3RhdGUuICovCitzdGF0aWMgdm9pZCBkaXNhcm1fa21taW9fZmF1bHRfcGFnZShzdHJ1Y3Qga21taW9fZmF1bHRfcGFnZSAqZikKIHsKLQlzZXRfcGFnZV9wcmVzZW50KHBhZ2UgJiBQQUdFX01BU0ssIHRydWUsIHBnbGV2ZWwpOworCWJvb2wgdG1wOworCWludCByZXQgPSBzZXRfcGFnZV9wcmVzZW5jZShmLT5wYWdlLCBmLT5vbGRfcHJlc2VuY2UsICZ0bXApOworCVdBUk5fT05DRShyZXQgPCAwLAorCQkJS0VSTl9FUlIgImttbWlvIGRpc2FybWluZyAweCUwOGx4IGZhaWxlZC5cbiIsIGYtPnBhZ2UpOworCWYtPmFybWVkID0gZmFsc2U7CiB9CiAKIC8qCkBAIC0yMDIsMjggKzIzMywzMiBAQAogCiAJY3R4ID0gJmdldF9jcHVfdmFyKGttbWlvX2N0eCk7CiAJaWYgKGN0eC0+YWN0aXZlKSB7Ci0JCWRpc2FybV9rbW1pb19mYXVsdF9wYWdlKGZhdWx0cGFnZS0+cGFnZSwgTlVMTCk7CiAJCWlmIChhZGRyID09IGN0eC0+YWRkcikgewogCQkJLyoKLQkJCSAqIE9uIFNNUCB3ZSBzb21ldGltZXMgZ2V0IHJlY3Vyc2l2ZSBwcm9iZSBoaXRzIG9uIHRoZQotCQkJICogc2FtZSBhZGRyZXNzLiBDb250ZXh0IGlzIGFscmVhZHkgc2F2ZWQsIGZhbGwgb3V0LgorCQkJICogQSBzZWNvbmQgZmF1bHQgb24gdGhlIHNhbWUgcGFnZSBtZWFucyBzb21lIG90aGVyCisJCQkgKiBjb25kaXRpb24gbmVlZHMgaGFuZGxpbmcgYnkgZG9fcGFnZV9mYXVsdCgpLCB0aGUKKwkJCSAqIHBhZ2UgcmVhbGx5IG5vdCBiZWluZyBwcmVzZW50IGlzIHRoZSBtb3N0IGNvbW1vbi4KIAkJCSAqLwotCQkJcHJfZGVidWcoImttbWlvOiBkdXBsaWNhdGUgcHJvYmUgaGl0IG9uIENQVSAlZCwgZm9yICIKLQkJCQkJCSJhZGRyZXNzIDB4JTA4bHguXG4iLAotCQkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBhZGRyKTsKLQkJCXJldCA9IDE7Ci0JCQlnb3RvIG5vX2ttbWlvX2N0eDsKLQkJfQotCQkvKgotCQkgKiBQcmV2ZW50IG92ZXJ3cml0aW5nIGFscmVhZHkgaW4tZmxpZ2h0IGNvbnRleHQuCi0JCSAqIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGhvcGUgZGlzYXJtaW5nIGF0IGxlYXN0Ci0JCSAqIHByZXZlbnRzIGEgcGFuaWMuCi0JCSAqLwotCQlwcl9lbWVyZygia21taW86IHJlY3Vyc2l2ZSBwcm9iZSBoaXQgb24gQ1BVICVkLCAiCisJCQlwcl9kZWJ1Zygia21taW86IHNlY29uZGFyeSBoaXQgZm9yIDB4JTA4bHggQ1BVICVkLlxuIiwKKwkJCQkJYWRkciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCQkJaWYgKCFmYXVsdHBhZ2UtPm9sZF9wcmVzZW5jZSkKKwkJCQlwcl9pbmZvKCJrbW1pbzogdW5leHBlY3RlZCBzZWNvbmRhcnkgaGl0IGZvciAiCisJCQkJCSJhZGRyZXNzIDB4JTA4bHggb24gQ1BVICVkLlxuIiwgYWRkciwKKwkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBQcmV2ZW50IG92ZXJ3cml0aW5nIGFscmVhZHkgaW4tZmxpZ2h0IGNvbnRleHQuCisJCQkgKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBsZXQncyBob3BlIGRpc2FybWluZyBhdAorCQkJICogbGVhc3QgcHJldmVudHMgYSBwYW5pYy4KKwkJCSAqLworCQkJcHJfZW1lcmcoImttbWlvOiByZWN1cnNpdmUgcHJvYmUgaGl0IG9uIENQVSAlZCwgIgogCQkJCQkiZm9yIGFkZHJlc3MgMHglMDhseC4gSWdub3JpbmcuXG4iLAogCQkJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGFkZHIpOwotCQlwcl9lbWVyZygia21taW86IHByZXZpb3VzIGhpdCB3YXMgYXQgMHglMDhseC5cbiIsCi0JCQkJCWN0eC0+YWRkcik7CisJCQlwcl9lbWVyZygia21taW86IHByZXZpb3VzIGhpdCB3YXMgYXQgMHglMDhseC5cbiIsCisJCQkJCQljdHgtPmFkZHIpOworCQkJZGlzYXJtX2ttbWlvX2ZhdWx0X3BhZ2UoZmF1bHRwYWdlKTsKKwkJfQogCQlnb3RvIG5vX2ttbWlvX2N0eDsKIAl9CiAJY3R4LT5hY3RpdmUrKzsKQEAgLTI0NCw3ICsyNzksNyBAQAogCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX0lGOwogCiAJLyogTm93IHdlIHNldCBwcmVzZW50IGJpdCBpbiBQVEUgYW5kIHNpbmdsZSBzdGVwLiAqLwotCWRpc2FybV9rbW1pb19mYXVsdF9wYWdlKGN0eC0+ZnBhZ2UtPnBhZ2UsIE5VTEwpOworCWRpc2FybV9rbW1pb19mYXVsdF9wYWdlKGN0eC0+ZnBhZ2UpOwogCiAJLyoKIAkgKiBJZiBhbm90aGVyIGNwdSBhY2Nlc3NlcyB0aGUgc2FtZSBwYWdlIHdoaWxlIHdlIGFyZSBzdGVwcGluZywKQEAgLTI3NSw3ICszMTAsNyBAQAogCXN0cnVjdCBrbW1pb19jb250ZXh0ICpjdHggPSAmZ2V0X2NwdV92YXIoa21taW9fY3R4KTsKIAogCWlmICghY3R4LT5hY3RpdmUpIHsKLQkJcHJfZGVidWcoImttbWlvOiBzcHVyaW91cyBkZWJ1ZyB0cmFwIG9uIENQVSAlZC5cbiIsCisJCXByX3dhcm5pbmcoImttbWlvOiBzcHVyaW91cyBkZWJ1ZyB0cmFwIG9uIENQVSAlZC5cbiIsCiAJCQkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjgzLDcgKzMxOCwxMSBAQAogCWlmIChjdHgtPnByb2JlICYmIGN0eC0+cHJvYmUtPnBvc3RfaGFuZGxlcikKIAkJY3R4LT5wcm9iZS0+cG9zdF9oYW5kbGVyKGN0eC0+cHJvYmUsIGNvbmRpdGlvbiwgcmVncyk7CiAKLQlhcm1fa21taW9fZmF1bHRfcGFnZShjdHgtPmZwYWdlLT5wYWdlLCBOVUxMKTsKKwkvKiBQcmV2ZW50IHJhY2luZyBhZ2FpbnN0IHJlbGVhc2Vfa21taW9fZmF1bHRfcGFnZSgpLiAqLworCXNwaW5fbG9jaygma21taW9fbG9jayk7CisJaWYgKGN0eC0+ZnBhZ2UtPmNvdW50KQorCQlhcm1fa21taW9fZmF1bHRfcGFnZShjdHgtPmZwYWdlKTsKKwlzcGluX3VubG9jaygma21taW9fbG9jayk7CiAKIAlyZWdzLT5mbGFncyAmPSB+WDg2X0VGTEFHU19URjsKIAlyZWdzLT5mbGFncyB8PSBjdHgtPnNhdmVkX2ZsYWdzOwpAQCAtMzE1LDIwICszNTQsMjQgQEAKIAlmID0gZ2V0X2ttbWlvX2ZhdWx0X3BhZ2UocGFnZSk7CiAJaWYgKGYpIHsKIAkJaWYgKCFmLT5jb3VudCkKLQkJCWFybV9rbW1pb19mYXVsdF9wYWdlKGYtPnBhZ2UsIE5VTEwpOworCQkJYXJtX2ttbWlvX2ZhdWx0X3BhZ2UoZik7CiAJCWYtPmNvdW50Kys7CiAJCXJldHVybiAwOwogCX0KIAotCWYgPSBrbWFsbG9jKHNpemVvZigqZiksIEdGUF9BVE9NSUMpOworCWYgPSBremFsbG9jKHNpemVvZigqZiksIEdGUF9BVE9NSUMpOwogCWlmICghZikKIAkJcmV0dXJuIC0xOwogCiAJZi0+Y291bnQgPSAxOwogCWYtPnBhZ2UgPSBwYWdlOwotCWxpc3RfYWRkX3JjdSgmZi0+bGlzdCwga21taW9fcGFnZV9saXN0KGYtPnBhZ2UpKTsKIAotCWFybV9rbW1pb19mYXVsdF9wYWdlKGYtPnBhZ2UsIE5VTEwpOworCWlmIChhcm1fa21taW9fZmF1bHRfcGFnZShmKSkgeworCQlrZnJlZShmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxpc3RfYWRkX3JjdSgmZi0+bGlzdCwga21taW9fcGFnZV9saXN0KGYtPnBhZ2UpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQ3LDcgKzM5MCw3IEBACiAJZi0+Y291bnQtLTsKIAlCVUdfT04oZi0+Y291bnQgPCAwKTsKIAlpZiAoIWYtPmNvdW50KSB7Ci0JCWRpc2FybV9rbW1pb19mYXVsdF9wYWdlKGYtPnBhZ2UsIE5VTEwpOworCQlkaXNhcm1fa21taW9fZmF1bHRfcGFnZShmKTsKIAkJZi0+cmVsZWFzZV9uZXh0ID0gKnJlbGVhc2VfbGlzdDsKIAkJKnJlbGVhc2VfbGlzdCA9IGY7CiAJfQpAQCAtNDA4LDIzICs0NTEsMjQgQEAKIAogc3RhdGljIHZvaWQgcmVtb3ZlX2ttbWlvX2ZhdWx0X3BhZ2VzKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKLQlzdHJ1Y3Qga21taW9fZGVsYXllZF9yZWxlYXNlICpkciA9IGNvbnRhaW5lcl9vZigKLQkJCQkJCWhlYWQsCi0JCQkJCQlzdHJ1Y3Qga21taW9fZGVsYXllZF9yZWxlYXNlLAotCQkJCQkJcmN1KTsKKwlzdHJ1Y3Qga21taW9fZGVsYXllZF9yZWxlYXNlICpkciA9CisJCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qga21taW9fZGVsYXllZF9yZWxlYXNlLCByY3UpOwogCXN0cnVjdCBrbW1pb19mYXVsdF9wYWdlICpwID0gZHItPnJlbGVhc2VfbGlzdDsKIAlzdHJ1Y3Qga21taW9fZmF1bHRfcGFnZSAqKnByZXZwID0gJmRyLT5yZWxlYXNlX2xpc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZrbW1pb19sb2NrLCBmbGFncyk7CiAJd2hpbGUgKHApIHsKLQkJaWYgKCFwLT5jb3VudCkKKwkJaWYgKCFwLT5jb3VudCkgewogCQkJbGlzdF9kZWxfcmN1KCZwLT5saXN0KTsKLQkJZWxzZQorCQkJcHJldnAgPSAmcC0+cmVsZWFzZV9uZXh0OworCQl9IGVsc2UgewogCQkJKnByZXZwID0gcC0+cmVsZWFzZV9uZXh0OwotCQlwcmV2cCA9ICZwLT5yZWxlYXNlX25leHQ7CisJCX0KIAkJcCA9IHAtPnJlbGVhc2VfbmV4dDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma21taW9fbG9jaywgZmxhZ3MpOworCiAJLyogVGhpcyBpcyB0aGUgcmVhbCBSQ1UgZGVzdHJveSBjYWxsLiAqLwogCWNhbGxfcmN1KCZkci0+cmN1LCByY3VfZnJlZV9rbW1pb19mYXVsdF9wYWdlcyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKaW5kZXggNzFhMTRmOC4uZjM1MTZkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV82NC5jCisrKyBiL2FyY2gveDg2L21tL251bWFfNjQuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJcmV0dXJuIHNoaWZ0OwogfQogCi1pbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKK2ludCBfX21lbWluaXQgIF9fZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKIHsKIAlyZXR1cm4gcGh5c190b19uaWQocGZuIDw8IFBBR0VfU0hJRlQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKaW5kZXggODRiYTc0OC4uNzIzM2JkNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCkBAIC01MDgsMTggKzUwOCwyNCBAQAogI2VuZGlmCiAKIAkvKgotCSAqIEluc3RhbGwgdGhlIG5ldywgc3BsaXQgdXAgcGFnZXRhYmxlLiBJbXBvcnRhbnQgZGV0YWlscyBoZXJlOgorCSAqIEluc3RhbGwgdGhlIG5ldywgc3BsaXQgdXAgcGFnZXRhYmxlLgogCSAqCi0JICogT24gSW50ZWwgdGhlIE5YIGJpdCBvZiBhbGwgbGV2ZWxzIG11c3QgYmUgY2xlYXJlZCB0byBtYWtlIGEKLQkgKiBwYWdlIGV4ZWN1dGFibGUuIFNlZSBzZWN0aW9uIDQuMTMuMiBvZiBJbnRlbCA2NCBhbmQgSUEtMzIKLQkgKiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbCkuCi0JICoKLQkgKiBNYXJrIHRoZSBlbnRyeSBwcmVzZW50LiBUaGUgY3VycmVudCBtYXBwaW5nIG1pZ2h0IGJlCi0JICogc2V0IHRvIG5vdCBwcmVzZW50LCB3aGljaCB3ZSBwcmVzZXJ2ZWQgYWJvdmUuCisJICogV2UgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwgcGFnZXRhYmxlIHByb3RlY3Rpb25zIGZvciB0aGUgbmV3CisJICogcGFnZXRhYmxlIHByb3RlY3Rpb25zLCB0aGUgYWN0dWFsIHB0ZXMgc2V0IGFib3ZlIGNvbnRyb2wgdGhlCisJICogcHJpbWFyeSBwcm90ZWN0aW9uIGJlaGF2aW9yOgogCSAqLwotCXJlZl9wcm90ID0gcHRlX3BncHJvdChwdGVfbWtleGVjKHB0ZV9jbHJodWdlKCprcHRlKSkpOwotCXBncHJvdF92YWwocmVmX3Byb3QpIHw9IF9QQUdFX1BSRVNFTlQ7Ci0JX19zZXRfcG1kX3B0ZShrcHRlLCBhZGRyZXNzLCBta19wdGUoYmFzZSwgcmVmX3Byb3QpKTsKKwlfX3NldF9wbWRfcHRlKGtwdGUsIGFkZHJlc3MsIG1rX3B0ZShiYXNlLCBfX3BncHJvdChfS0VSTlBHX1RBQkxFKSkpOworCisJLyoKKwkgKiBJbnRlbCBBdG9tIGVycmF0YSBBQUg0MSB3b3JrYXJvdW5kLgorCSAqCisJICogVGhlIHJlYWwgZml4IHNob3VsZCBiZSBpbiBodyBvciBpbiBhIG1pY3JvY29kZSB1cGRhdGUsIGJ1dAorCSAqIHdlIGFsc28gcHJvYmFiaWxpc3RpY2FsbHkgdHJ5IHRvIHJlZHVjZSB0aGUgd2luZG93IG9mIGhhdmluZworCSAqIGEgbGFyZ2UgVExCIG1peGVkIHdpdGggNEsgVExCcyB3aGlsZSBpbnN0cnVjdGlvbiBmZXRjaGVzIGFyZQorCSAqIGdvaW5nIG9uLgorCSAqLworCV9fZmx1c2hfdGxiX2FsbCgpOworCiAJYmFzZSA9IE5VTEw7CiAKIG91dF91bmxvY2s6CkBAIC01NzUsNyArNTgxLDYgQEAKIAkJYWRkcmVzcyA9IGNwYS0+dmFkZHJbY3BhLT5jdXJwYWdlXTsKIAllbHNlCiAJCWFkZHJlc3MgPSAqY3BhLT52YWRkcjsKLQogcmVwZWF0OgogCWtwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyZXNzLCAmbGV2ZWwpOwogCWlmICgha3B0ZSkKQEAgLTgxMiw2ICs4MTcsMTMgQEAKIAogCXZtX3VubWFwX2FsaWFzZXMoKTsKIAorCS8qCisJICogSWYgd2UncmUgY2FsbGVkIHdpdGggbGF6eSBtbXUgdXBkYXRlcyBlbmFibGVkLCB0aGUKKwkgKiBpbi1tZW1vcnkgcHRlIHN0YXRlIG1heSBiZSBzdGFsZS4gIEZsdXNoIHBlbmRpbmcgdXBkYXRlcyB0bworCSAqIGJyaW5nIHRoZW0gdXAgdG8gZGF0ZS4KKwkgKi8KKwlhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUoKTsKKwogCWNwYS52YWRkciA9IGFkZHI7CiAJY3BhLm51bXBhZ2VzID0gbnVtcGFnZXM7CiAJY3BhLm1hc2tfc2V0ID0gbWFza19zZXQ7CkBAIC04NTQsNiArODY2LDEzIEBACiAJfSBlbHNlCiAJCWNwYV9mbHVzaF9hbGwoY2FjaGUpOwogCisJLyoKKwkgKiBJZiB3ZSd2ZSBiZWVuIGNhbGxlZCB3aXRoIGxhenkgbW11IHVwZGF0ZXMgZW5hYmxlZCwgdGhlbgorCSAqIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgZ2V0cyBmbHVzaGVkIG91dCBiZWZvcmUgd2UKKwkgKiByZXR1cm4uCisJICovCisJYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7CisKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCA3YjYxMDM2Li5lMGFiMTczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMjExLDYgKzIxMiwzMyBAQAogc3RhdGljIHN0cnVjdCBtZW10eXBlICpjYWNoZWRfZW50cnk7CiBzdGF0aWMgdTY0IGNhY2hlZF9zdGFydDsKIAorc3RhdGljIGludCBwYXRfcGFnZXJhbmdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgcmFtX3BhZ2UgPSAwLCBub3RfcmFtcGFnZSA9IDA7CisJdW5zaWduZWQgbG9uZyBwYWdlX25yOworCisJZm9yIChwYWdlX25yID0gKHN0YXJ0ID4+IFBBR0VfU0hJRlQpOyBwYWdlX25yIDwgKGVuZCA+PiBQQUdFX1NISUZUKTsKKwkgICAgICsrcGFnZV9ucikgeworCQkvKgorCQkgKiBGb3IgbGVnYWN5IHJlYXNvbnMsIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW4gdGhlIGxlZ2FjeSBJU0EKKwkJICogcmVnaW9uIGlzIHRyYWNrZWQgYXMgbm9uLVJBTS4gVGhpcyB3aWxsIGFsbG93IHVzZXJzIG9mCisJCSAqIC9kZXYvbWVtIHRvIG1hcCBwb3J0aW9ucyBvZiBsZWdhY3kgSVNBIHJlZ2lvbiwgZXZlbiB3aGVuCisJCSAqIHNvbWUgb2YgdGhvc2UgcG9ydGlvbnMgYXJlIGxpc3RlZChvciBub3QgZXZlbiBsaXN0ZWQpIHdpdGgKKwkJICogZGlmZmVyZW50IGU4MjAgdHlwZXMoUkFNL3Jlc2VydmVkLy4uKQorCQkgKi8KKwkJaWYgKHBhZ2VfbnIgPj0gKElTQV9FTkRfQUREUkVTUyA+PiBQQUdFX1NISUZUKSAmJgorCQkgICAgcGFnZV9pc19yYW0ocGFnZV9ucikpCisJCQlyYW1fcGFnZSA9IDE7CisJCWVsc2UKKwkJCW5vdF9yYW1wYWdlID0gMTsKKworCQlpZiAocmFtX3BhZ2UgPT0gbm90X3JhbXBhZ2UpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHJhbV9wYWdlOworfQorCiAvKgogICogRm9yIFJBTSBwYWdlcywgbWFyayB0aGUgcGFnZXMgYXMgbm9uIFdCIG1lbW9yeSB0eXBlIHVzaW5nCiAgKiBQYWdlTm9uV0IgKFBHX2FyY2hfMSkuIFdlIGFsbG93IG9ubHkgb25lIHNldF9tZW1vcnlfdWMoKSBvcgpAQCAtMzM2LDIwICszNjQsMTIgQEAKIAlpZiAobmV3X3R5cGUpCiAJCSpuZXdfdHlwZSA9IGFjdHVhbF90eXBlOwogCi0JLyoKLQkgKiBGb3IgbGVnYWN5IHJlYXNvbnMsIHNvbWUgcGFydHMgb2YgdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW4gdGhlCi0JICogbGVnYWN5IDFNQiByZWdpb24gaXMgdHJlYXRlZCBhcyBub24tUkFNIChldmVuIHdoZW4gbGlzdGVkIGFzIFJBTSBpbgotCSAqIHRoZSBlODIwIHRhYmxlcykuICBTbyB3ZSB3aWxsIHRyYWNrIHRoZSBtZW1vcnkgYXR0cmlidXRlcyBvZiB0aGlzCi0JICogbGVnYWN5IDFNQiByZWdpb24gdXNpbmcgdGhlIGxpbmVhciBtZW10eXBlX2xpc3QgYWx3YXlzLgotCSAqLwotCWlmIChlbmQgPj0gSVNBX0VORF9BRERSRVNTKSB7Ci0JCWlzX3JhbmdlX3JhbSA9IHBhZ2VyYW5nZV9pc19yYW0oc3RhcnQsIGVuZCk7Ci0JCWlmIChpc19yYW5nZV9yYW0gPT0gMSkKLQkJCXJldHVybiByZXNlcnZlX3JhbV9wYWdlc190eXBlKHN0YXJ0LCBlbmQsIHJlcV90eXBlLAotCQkJCQkJICAgICAgbmV3X3R5cGUpOwotCQllbHNlIGlmIChpc19yYW5nZV9yYW0gPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWlzX3JhbmdlX3JhbSA9IHBhdF9wYWdlcmFuZ2VfaXNfcmFtKHN0YXJ0LCBlbmQpOworCWlmIChpc19yYW5nZV9yYW0gPT0gMSkKKwkJcmV0dXJuIHJlc2VydmVfcmFtX3BhZ2VzX3R5cGUoc3RhcnQsIGVuZCwgcmVxX3R5cGUsCisJCQkJCSAgICAgIG5ld190eXBlKTsKKwllbHNlIGlmIChpc19yYW5nZV9yYW0gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5ldyAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtdHlwZSksIEdGUF9LRVJORUwpOwogCWlmICghbmV3KQpAQCAtNDQ2LDE5ICs0NjYsMTEgQEAKIAlpZiAoaXNfSVNBX3JhbmdlKHN0YXJ0LCBlbmQgLSAxKSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIEZvciBsZWdhY3kgcmVhc29ucywgc29tZSBwYXJ0cyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbiB0aGUKLQkgKiBsZWdhY3kgMU1CIHJlZ2lvbiBpcyB0cmVhdGVkIGFzIG5vbi1SQU0gKGV2ZW4gd2hlbiBsaXN0ZWQgYXMgUkFNIGluCi0JICogdGhlIGU4MjAgdGFibGVzKS4gIFNvIHdlIHdpbGwgdHJhY2sgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIG9mIHRoaXMKLQkgKiBsZWdhY3kgMU1CIHJlZ2lvbiB1c2luZyB0aGUgbGluZWFyIG1lbXR5cGVfbGlzdCBhbHdheXMuCi0JICovCi0JaWYgKGVuZCA+PSBJU0FfRU5EX0FERFJFU1MpIHsKLQkJaXNfcmFuZ2VfcmFtID0gcGFnZXJhbmdlX2lzX3JhbShzdGFydCwgZW5kKTsKLQkJaWYgKGlzX3JhbmdlX3JhbSA9PSAxKQotCQkJcmV0dXJuIGZyZWVfcmFtX3BhZ2VzX3R5cGUoc3RhcnQsIGVuZCk7Ci0JCWVsc2UgaWYgKGlzX3JhbmdlX3JhbSA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaXNfcmFuZ2VfcmFtID0gcGF0X3BhZ2VyYW5nZV9pc19yYW0oc3RhcnQsIGVuZCk7CisJaWYgKGlzX3JhbmdlX3JhbSA9PSAxKQorCQlyZXR1cm4gZnJlZV9yYW1fcGFnZXNfdHlwZShzdGFydCwgZW5kKTsKKwllbHNlIGlmIChpc19yYW5nZV9yYW0gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9jaygmbWVtdHlwZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbWVtdHlwZV9saXN0LCBuZCkgewpAQCAtNjI2LDE3ICs2MzgsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgd2FudF9mbGFncyA9IChwZ3Byb3RfdmFsKCp2bWFfcHJvdCkgJiBfUEFHRV9DQUNIRV9NQVNLKTsKIAotCWlzX3JhbSA9IHBhZ2VyYW5nZV9pc19yYW0ocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisJaXNfcmFtID0gcGF0X3BhZ2VyYW5nZV9pc19yYW0ocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAKLQlpZiAoaXNfcmFtICE9IDApIHsKLQkJLyoKLQkJICogRm9yIG1hcHBpbmcgUkFNIHBhZ2VzLCBkcml2ZXJzIG5lZWQgdG8gY2FsbAotCQkgKiBzZXRfbWVtb3J5X1t1Y3x3Y3x3Yl0gZGlyZWN0bHksIGZvciByZXNlcnZlIGFuZCBmcmVlLCBiZWZvcmUKLQkJICogc2V0dGluZyB1cCB0aGUgUFRFLgotCQkgKi8KLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm4gMDsKLQl9CisJLyoKKwkgKiByZXNlcnZlX3Bmbl9yYW5nZSgpIGRvZXNuJ3Qgc3VwcG9ydCBSQU0gcGFnZXMuCisJICovCisJaWYgKGlzX3JhbSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IHJlc2VydmVfbWVtdHlwZShwYWRkciwgcGFkZHIgKyBzaXplLCB3YW50X2ZsYWdzLCAmZmxhZ3MpOwogCWlmIChyZXQpCkBAIC02OTMsNyArNzAxLDcgQEAKIHsKIAlpbnQgaXNfcmFtOwogCi0JaXNfcmFtID0gcGFnZXJhbmdlX2lzX3JhbShwYWRkciwgcGFkZHIgKyBzaXplKTsKKwlpc19yYW0gPSBwYXRfcGFnZXJhbmdlX2lzX3JhbShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAlpZiAoaXNfcmFtID09IDApCiAJCWZyZWVfbWVtdHlwZShwYWRkciwgcGFkZHIgKyBzaXplKTsKIH0KQEAgLTg2MSw2ICs4NjksNyBAQAogCWVsc2UKIAkJcmV0dXJuIHBncHJvdF9ub25jYWNoZWQocHJvdCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwZ3Byb3Rfd3JpdGVjb21iaW5lKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19YODZfUEFUKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMgYi9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMKaW5kZXggYWI1MGE4ZC4uNDI3ZmQxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vdGVzdG1taW90cmFjZS5jCisrKyBiL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBXcml0dGVuIGJ5IFBla2thIFBhYWxhbmVuLCAyMDA4IDxwcUBpa2kuZmk+CisgKiBXcml0dGVuIGJ5IFBla2thIFBhYWxhbmVuLCAyMDA4LTIwMDkgPHBxQGlraS5maT4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC05LDM1ICs5LDc0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1taW9fYWRkcmVzczsKIG1vZHVsZV9wYXJhbShtbWlvX2FkZHJlc3MsIHVsb25nLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobW1pb19hZGRyZXNzLCAiU3RhcnQgYWRkcmVzcyBvZiB0aGUgbWFwcGluZyBvZiAxNiBrQi4iKTsKK01PRFVMRV9QQVJNX0RFU0MobW1pb19hZGRyZXNzLCAiIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIG1hcHBpbmcgb2YgMTYga0IgIgorCQkJCSIob3IgOCBNQiBpZiByZWFkX2ZhciBpcyBub24temVybykuIik7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfZmFyID0gMHg0MDAxMDA7Cittb2R1bGVfcGFyYW0ocmVhZF9mYXIsIHVsb25nLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmVhZF9mYXIsICIgT2Zmc2V0IG9mIGEgMzItYml0IHJlYWQgd2l0aGluIDggTUIgIgorCQkJCSIoZGVmYXVsdDogMHg0MDAxMDApLiIpOworCitzdGF0aWMgdW5zaWduZWQgdjE2KHVuc2lnbmVkIGkpCit7CisJcmV0dXJuIGkgKiAxMiArIDc7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB2MzIodW5zaWduZWQgaSkKK3sKKwlyZXR1cm4gaSAqIDIxMjM3MSArIDEzOworfQogCiBzdGF0aWMgdm9pZCBkb193cml0ZV90ZXN0KHZvaWQgX19pb21lbSAqcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKKwlwcl9pbmZvKE1PRFVMRV9OQU1FICI6IHdyaXRlIHRlc3QuXG4iKTsKIAltbWlvdHJhY2VfcHJpbnRrKCJXcml0ZSB0ZXN0LlxuIik7CisKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCiAJCWlvd3JpdGU4KGksIHAgKyBpKTsKKwogCWZvciAoaSA9IDEwMjQ7IGkgPCAoNSAqIDEwMjQpOyBpICs9IDIpCi0JCWlvd3JpdGUxNihpICogMTIgKyA3LCBwICsgaSk7CisJCWlvd3JpdGUxNih2MTYoaSksIHAgKyBpKTsKKwogCWZvciAoaSA9ICg1ICogMTAyNCk7IGkgPCAoMTYgKiAxMDI0KTsgaSArPSA0KQotCQlpb3dyaXRlMzIoaSAqIDIxMjM3MSArIDEzLCBwICsgaSk7CisJCWlvd3JpdGUzMih2MzIoaSksIHAgKyBpKTsKIH0KIAogc3RhdGljIHZvaWQgZG9fcmVhZF90ZXN0KHZvaWQgX19pb21lbSAqcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBlcnJzWzNdID0geyAwIH07CisJcHJfaW5mbyhNT0RVTEVfTkFNRSAiOiByZWFkIHRlc3QuXG4iKTsKIAltbWlvdHJhY2VfcHJpbnRrKCJSZWFkIHRlc3QuXG4iKTsKKwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJaW9yZWFkOChwICsgaSk7CisJCWlmIChpb3JlYWQ4KHAgKyBpKSAhPSBpKQorCQkJKytlcnJzWzBdOworCiAJZm9yIChpID0gMTAyNDsgaSA8ICg1ICogMTAyNCk7IGkgKz0gMikKLQkJaW9yZWFkMTYocCArIGkpOworCQlpZiAoaW9yZWFkMTYocCArIGkpICE9IHYxNihpKSkKKwkJCSsrZXJyc1sxXTsKKwogCWZvciAoaSA9ICg1ICogMTAyNCk7IGkgPCAoMTYgKiAxMDI0KTsgaSArPSA0KQotCQlpb3JlYWQzMihwICsgaSk7CisJCWlmIChpb3JlYWQzMihwICsgaSkgIT0gdjMyKGkpKQorCQkJKytlcnJzWzJdOworCisJbW1pb3RyYWNlX3ByaW50aygiUmVhZCBlcnJvcnM6IDgtYml0ICVkLCAxNi1iaXQgJWQsIDMyLWJpdCAlZC5cbiIsCisJCQkJCQllcnJzWzBdLCBlcnJzWzFdLCBlcnJzWzJdKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fdGVzdCh2b2lkKQorc3RhdGljIHZvaWQgZG9fcmVhZF9mYXJfdGVzdCh2b2lkIF9faW9tZW0gKnApCiB7Ci0Jdm9pZCBfX2lvbWVtICpwID0gaW9yZW1hcF9ub2NhY2hlKG1taW9fYWRkcmVzcywgMHg0MDAwKTsKKwlwcl9pbmZvKE1PRFVMRV9OQU1FICI6IHJlYWQgZmFyIHRlc3QuXG4iKTsKKwltbWlvdHJhY2VfcHJpbnRrKCJSZWFkIGZhciB0ZXN0LlxuIik7CisKKwlpb3JlYWQzMihwICsgcmVhZF9mYXIpOworfQorCitzdGF0aWMgdm9pZCBkb190ZXN0KHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnAgPSBpb3JlbWFwX25vY2FjaGUobW1pb19hZGRyZXNzLCBzaXplKTsKIAlpZiAoIXApIHsKIAkJcHJfZXJyKE1PRFVMRV9OQU1FICI6IGNvdWxkIG5vdCBpb3JlbWFwLCBhYm9ydGluZy5cbiIpOwogCQlyZXR1cm47CkBAIC00NSwxMSArODQsMTUgQEAKIAltbWlvdHJhY2VfcHJpbnRrKCJpb3JlbWFwIHJldHVybmVkICVwLlxuIiwgcCk7CiAJZG9fd3JpdGVfdGVzdChwKTsKIAlkb19yZWFkX3Rlc3QocCk7CisJaWYgKHJlYWRfZmFyICYmIHJlYWRfZmFyIDwgc2l6ZSAtIDQpCisJCWRvX3JlYWRfZmFyX3Rlc3QocCk7CiAJaW91bm1hcChwKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IChyZWFkX2ZhcikgPyAoOCA8PCAyMCkgOiAoMTYgPDwgMTApOworCiAJaWYgKG1taW9fYWRkcmVzcyA9PSAwKSB7CiAJCXByX2VycihNT0RVTEVfTkFNRSAiOiB5b3UgaGF2ZSB0byB1c2UgdGhlIG1vZHVsZSBhcmd1bWVudCAiCiAJCQkJCQkJIm1taW9fYWRkcmVzcy5cbiIpOwpAQCAtNTgsMTAgKzEwMSwxMSBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXByX3dhcm5pbmcoTU9EVUxFX05BTUUgIjogV0FSTklORzogbWFwcGluZyAxNiBrQiBAIDB4JTA4bHggIgotCQkJCQkiaW4gUENJIGFkZHJlc3Mgc3BhY2UsIGFuZCB3cml0aW5nICIKLQkJCQkJInJ1YmJpc2ggaW4gdGhlcmUuXG4iLCBtbWlvX2FkZHJlc3MpOwotCWRvX3Rlc3QoKTsKKwlwcl93YXJuaW5nKE1PRFVMRV9OQU1FICI6IFdBUk5JTkc6IG1hcHBpbmcgJWx1IGtCIEAgMHglMDhseCBpbiBQQ0kgIgorCQkiYWRkcmVzcyBzcGFjZSwgYW5kIHdyaXRpbmcgMTYga0Igb2YgcnViYmlzaCBpbiB0aGVyZS5cbiIsCisJCSBzaXplID4+IDEwLCBtbWlvX2FkZHJlc3MpOworCWRvX3Rlc3Qoc2l6ZSk7CisJcHJfaW5mbyhNT0RVTEVfTkFNRSAiOiBBbGwgZG9uZS5cbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKaW5kZXggZTlmODBjNy4uMTAxMzFmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwpAQCAtNzgsOCArNzgsMTggQEAKIAlpZiAoY3B1X2hhc19hcmNoX3BlcmZtb24pIHsKIAkJdW5pb24gY3B1aWQxMF9lYXggZWF4OwogCQllYXguZnVsbCA9IGNwdWlkX2VheCgweGEpOwotCQlpZiAoY291bnRlcl93aWR0aCA8IGVheC5zcGxpdC5iaXRfd2lkdGgpCi0JCQljb3VudGVyX3dpZHRoID0gZWF4LnNwbGl0LmJpdF93aWR0aDsKKworCQkvKgorCQkgKiBGb3IgQ29yZTIgKGZhbWlseSA2LCBtb2RlbCAxNSksIGRvbid0IHJlc2V0IHRoZQorCQkgKiBjb3VudGVyIHdpZHRoOgorCQkgKi8KKwkJaWYgKCEoZWF4LnNwbGl0LnZlcnNpb25faWQgPT0gMCAmJgorCQkJY3VycmVudF9jcHVfZGF0YS54ODYgPT0gNiAmJgorCQkJCWN1cnJlbnRfY3B1X2RhdGEueDg2X21vZGVsID09IDE1KSkgeworCisJCQlpZiAoY291bnRlcl93aWR0aCA8IGVheC5zcGxpdC5iaXRfd2lkdGgpCisJCQkJY291bnRlcl93aWR0aCA9IGVheC5zcGxpdC5iaXRfd2lkdGg7CisJCX0KIAl9CiAKIAkvKiBjbGVhciBhbGwgY291bnRlcnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBiZWEyMTUyLi5iNThlOTYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0xNjcyLDYgKzE2NzIsOSBAQAogCSAgIHBvc3NpYmxlIG1hcCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwogCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwllYXJseV9ib290X2lycXNfb2ZmKCk7CisKIAl4ZW5fcmF3X2NvbnNvbGVfd3JpdGUoIm1hcHBpbmcga2VybmVsIGludG8gcGh5c2ljYWwgbWVtb3J5XG4iKTsKIAlwZ2QgPSB4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2QsIHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL0tjb25maWcgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCmluZGV4IDZjODczZGMuLjk4MTIwMDggMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL0tjb25maWcKKysrIGIvYXJjaC94dGVuc2EvS2NvbmZpZwpAQCAtMTAzLDkgKzEwMyw2IEBACiAJaGVscAogCUNhbiB3ZSB1c2UgaW5mb3JtYXRpb24gb2YgY29uZmlndXJhdGlvbiBmaWxlPwogCi1jb25maWcgSElHSE1FTQotCWJvb2wgIkhpZ2ggbWVtb3J5IHN1cHBvcnQiCi0KIGVuZG1lbnUKIAogbWVudSAiUGxhdGZvcm0gb3B0aW9ucyIKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBmNTBiNjk3Li4yMjZhMzkxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9YVEVOU0FfU1dBQl9ICiAjZGVmaW5lIF9YVEVOU0FfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IDVmYmNkZTUuLmYzYjY2ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYwppbmRleCA5NjA2ZDJiLi40ZWMxNjMzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYwpAQCAtNDQsNiArNDQsOCBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogCisjaW5jbHVkZSA8cGxhdGZvcm0vaGFyZHdhcmUuaD4KKwogI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9DT05TT0xFKSB8fCBkZWZpbmVkKENPTkZJR19EVU1NWV9DT05TT0xFKQogc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvID0geyAwLCAyNCwgMCwgMCwgMCwgODAsIDAsIDAsIDAsIDI0LCAxLCAxNn07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKaW5kZXggYzdhMDIxZC4uYzQ0ZjgzMCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS90aW1leC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYyBiL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMKaW5kZXggMzNmMzY2Yi4uYmRkODYwZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYworKysgYi9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2NvbnNvbGUuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvY29uc29sZS5jCmluZGV4IGVmZWQ4ODkuLjI1ZDQ2YzggMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvY29uc29sZS5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvY29uc29sZS5jCkBAIC0xNDAsMTYgKzE0MCwxNCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHJzX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCitzdGF0aWMgaW50IHJzX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCiB7CiAJY2hhciBidWZbMl07CiAKLQlpZiAoIXR0eSkKLQkJcmV0dXJuOwotCiAJYnVmWzBdID0gY2g7CiAJYnVmWzFdID0gJ1wwJzsJCS8qIElzIHRoaXMgTlVMTCBuZWNlc3Nhcnk/ICovCiAJX19zaW1jIChTWVNfd3JpdGUsIDEsICh1bnNpZ25lZCBsb25nKSBidWYsIDEsIDAsIDApOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCByc19mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMjliY2ZhYy4uOTk2ZWQ5MCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC02MDMsMTMgKzYwMywxMCBAQAogCXEtPnF1ZXVlX2ZsYWdzCQk9IFFVRVVFX0ZMQUdfREVGQVVMVDsKIAlxLT5xdWV1ZV9sb2NrCQk9IGxvY2s7CiAKLQlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxLCBCTEtfU0VHX0JPVU5EQVJZX01BU0spOwotCisJLyoKKwkgKiBUaGlzIGFsc28gc2V0cyBody9waHlzIHNlZ21lbnRzLCBib3VuZGFyeSBhbmQgc2l6ZQorCSAqLwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocSwgX19tYWtlX3JlcXVlc3QpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIE1BWF9TRUdNRU5UX1NJWkUpOwotCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBNQVhfSFdfU0VHTUVOVFMpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBNQVhfUEhZU19TRUdNRU5UUyk7CiAKIAlxLT5zZ19yZXNlcnZlZF9zaXplID0gSU5UX01BWDsKIApAQCAtNzM1LDcgKzczMiw2IEBACiAJCV9fZnJlZWRfcmVxdWVzdChxLCBydyBeIDEpOwogfQogCi0jZGVmaW5lIGJsa2Rldl9mcmVlX3JxKGxpc3QpIGxpc3RfZW50cnkoKGxpc3QpLT5uZXh0LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQogLyoKICAqIEdldCBhIGZyZWUgcmVxdWVzdCwgcXVldWVfbG9jayBtdXN0IGJlIGhlbGQuCiAgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSwgd2l0aCBxdWV1ZV9sb2NrIGhlbGQuCkBAIC0xMDY2LDYgKzEwNjIsOSBAQAogCiAJZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KHEsIHJlcSk7CiAKKwkvKiB0aGlzIGlzIGEgYmlvIGxlYWsgKi8KKwlXQVJOX09OKHJlcS0+YmlvICE9IE5VTEwpOworCiAJLyoKIAkgKiBSZXF1ZXN0IG1heSBub3QgaGF2ZSBvcmlnaW5hdGVkIGZyb20gbGxfcndfYmxrLiBpZiBub3QsCiAJICogaXQgZGlkbid0IGNvbWUgb3V0IG9mIG91ciByZXNlcnZlZCBycSBwb29scwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCBiOTJmNWIwLi5lMzljYjI0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtMzgsNzIgKzM4LDc3IEBACiAJfQogfQogCi12b2lkIGJsa19yZWNhbGNfcnFfc2VnbWVudHMoc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2Jsa19yZWNhbGNfcnFfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJCSAgICAgc3RydWN0IGJpbyAqYmlvKQogewotCWludCBucl9waHlzX3NlZ3M7CiAJdW5zaWduZWQgaW50IHBoeXNfc2l6ZTsKIAlzdHJ1Y3QgYmlvX3ZlYyAqYnYsICpidnBydiA9IE5VTEw7Ci0JaW50IHNlZ19zaXplOwotCWludCBjbHVzdGVyOwotCXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKLQlpbnQgaGlnaCwgaGlnaHBydiA9IDE7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKKwlpbnQgY2x1c3RlciwgaSwgaGlnaCwgaGlnaHBydiA9IDE7CisJdW5zaWduZWQgaW50IHNlZ19zaXplLCBucl9waHlzX3NlZ3M7CisJc3RydWN0IGJpbyAqZmJpbywgKmJiaW87CiAKLQlpZiAoIXJxLT5iaW8pCi0JCXJldHVybjsKKwlpZiAoIWJpbykKKwkJcmV0dXJuIDA7CiAKKwlmYmlvID0gYmlvOwogCWNsdXN0ZXIgPSB0ZXN0X2JpdChRVUVVRV9GTEFHX0NMVVNURVIsICZxLT5xdWV1ZV9mbGFncyk7CiAJc2VnX3NpemUgPSAwOwogCXBoeXNfc2l6ZSA9IG5yX3BoeXNfc2VncyA9IDA7Ci0JcnFfZm9yX2VhY2hfc2VnbWVudChidiwgcnEsIGl0ZXIpIHsKLQkJLyoKLQkJICogdGhlIHRyaWNrIGhlcmUgaXMgbWFraW5nIHN1cmUgdGhhdCBhIGhpZ2ggcGFnZSBpcyBuZXZlcgotCQkgKiBjb25zaWRlcmVkIHBhcnQgb2YgYW5vdGhlciBzZWdtZW50LCBzaW5jZSB0aGF0IG1pZ2h0Ci0JCSAqIGNoYW5nZSB3aXRoIHRoZSBib3VuY2UgcGFnZS4KLQkJICovCi0JCWhpZ2ggPSBwYWdlX3RvX3Bmbihidi0+YnZfcGFnZSkgPiBxLT5ib3VuY2VfcGZuOwotCQlpZiAoaGlnaCB8fCBoaWdocHJ2KQotCQkJZ290byBuZXdfc2VnbWVudDsKLQkJaWYgKGNsdXN0ZXIpIHsKLQkJCWlmIChzZWdfc2l6ZSArIGJ2LT5idl9sZW4gPiBxLT5tYXhfc2VnbWVudF9zaXplKQorCWZvcl9lYWNoX2JpbyhiaW8pIHsKKwkJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgeworCQkJLyoKKwkJCSAqIHRoZSB0cmljayBoZXJlIGlzIG1ha2luZyBzdXJlIHRoYXQgYSBoaWdoIHBhZ2UgaXMKKwkJCSAqIG5ldmVyIGNvbnNpZGVyZWQgcGFydCBvZiBhbm90aGVyIHNlZ21lbnQsIHNpbmNlIHRoYXQKKwkJCSAqIG1pZ2h0IGNoYW5nZSB3aXRoIHRoZSBib3VuY2UgcGFnZS4KKwkJCSAqLworCQkJaGlnaCA9IHBhZ2VfdG9fcGZuKGJ2LT5idl9wYWdlKSA+IHEtPmJvdW5jZV9wZm47CisJCQlpZiAoaGlnaCB8fCBoaWdocHJ2KQogCQkJCWdvdG8gbmV3X3NlZ21lbnQ7Ci0JCQlpZiAoIUJJT1ZFQ19QSFlTX01FUkdFQUJMRShidnBydiwgYnYpKQotCQkJCWdvdG8gbmV3X3NlZ21lbnQ7Ci0JCQlpZiAoIUJJT1ZFQ19TRUdfQk9VTkRBUlkocSwgYnZwcnYsIGJ2KSkKLQkJCQlnb3RvIG5ld19zZWdtZW50OworCQkJaWYgKGNsdXN0ZXIpIHsKKwkJCQlpZiAoc2VnX3NpemUgKyBidi0+YnZfbGVuID4gcS0+bWF4X3NlZ21lbnRfc2l6ZSkKKwkJCQkJZ290byBuZXdfc2VnbWVudDsKKwkJCQlpZiAoIUJJT1ZFQ19QSFlTX01FUkdFQUJMRShidnBydiwgYnYpKQorCQkJCQlnb3RvIG5ld19zZWdtZW50OworCQkJCWlmICghQklPVkVDX1NFR19CT1VOREFSWShxLCBidnBydiwgYnYpKQorCQkJCQlnb3RvIG5ld19zZWdtZW50OwogCi0JCQlzZWdfc2l6ZSArPSBidi0+YnZfbGVuOwotCQkJYnZwcnYgPSBidjsKLQkJCWNvbnRpbnVlOwotCQl9CisJCQkJc2VnX3NpemUgKz0gYnYtPmJ2X2xlbjsKKwkJCQlidnBydiA9IGJ2OworCQkJCWNvbnRpbnVlOworCQkJfQogbmV3X3NlZ21lbnQ6Ci0JCWlmIChucl9waHlzX3NlZ3MgPT0gMSAmJiBzZWdfc2l6ZSA+IHJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplKQotCQkJcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUgPSBzZWdfc2l6ZTsKKwkJCWlmIChucl9waHlzX3NlZ3MgPT0gMSAmJiBzZWdfc2l6ZSA+CisJCQkgICAgZmJpby0+Ymlfc2VnX2Zyb250X3NpemUpCisJCQkJZmJpby0+Ymlfc2VnX2Zyb250X3NpemUgPSBzZWdfc2l6ZTsKIAotCQlucl9waHlzX3NlZ3MrKzsKLQkJYnZwcnYgPSBidjsKLQkJc2VnX3NpemUgPSBidi0+YnZfbGVuOwotCQloaWdocHJ2ID0gaGlnaDsKKwkJCW5yX3BoeXNfc2VncysrOworCQkJYnZwcnYgPSBidjsKKwkJCXNlZ19zaXplID0gYnYtPmJ2X2xlbjsKKwkJCWhpZ2hwcnYgPSBoaWdoOworCQl9CisJCWJiaW8gPSBiaW87CiAJfQogCi0JaWYgKG5yX3BoeXNfc2VncyA9PSAxICYmIHNlZ19zaXplID4gcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUpCi0JCXJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7Ci0JaWYgKHNlZ19zaXplID4gcnEtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUpCi0JCXJxLT5iaW90YWlsLT5iaV9zZWdfYmFja19zaXplID0gc2VnX3NpemU7CisJaWYgKG5yX3BoeXNfc2VncyA9PSAxICYmIHNlZ19zaXplID4gZmJpby0+Ymlfc2VnX2Zyb250X3NpemUpCisJCWZiaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7CisJaWYgKHNlZ19zaXplID4gYmJpby0+Ymlfc2VnX2JhY2tfc2l6ZSkKKwkJYmJpby0+Ymlfc2VnX2JhY2tfc2l6ZSA9IHNlZ19zaXplOwogCi0JcnEtPm5yX3BoeXNfc2VnbWVudHMgPSBucl9waHlzX3NlZ3M7CisJcmV0dXJuIG5yX3BoeXNfc2VnczsKK30KKwordm9pZCBibGtfcmVjYWxjX3JxX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlycS0+bnJfcGh5c19zZWdtZW50cyA9IF9fYmxrX3JlY2FsY19ycV9zZWdtZW50cyhycS0+cSwgcnEtPmJpbyk7CiB9CiAKIHZvaWQgYmxrX3JlY291bnRfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKLQlzdHJ1Y3QgcmVxdWVzdCBycTsKIAlzdHJ1Y3QgYmlvICpueHQgPSBiaW8tPmJpX25leHQ7Ci0JcnEucSA9IHE7Ci0JcnEuYmlvID0gcnEuYmlvdGFpbCA9IGJpbzsKKwogCWJpby0+YmlfbmV4dCA9IE5VTEw7Ci0JYmxrX3JlY2FsY19ycV9zZWdtZW50cygmcnEpOworCWJpby0+YmlfcGh5c19zZWdtZW50cyA9IF9fYmxrX3JlY2FsY19ycV9zZWdtZW50cyhxLCBiaW8pOwogCWJpby0+YmlfbmV4dCA9IG54dDsKLQliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSBycS5ucl9waHlzX3NlZ21lbnRzOwogCWJpby0+YmlfZmxhZ3MgfD0gKDEgPDwgQklPX1NFR19WQUxJRCk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19yZWNvdW50X3NlZ21lbnRzKTsKQEAgLTM5OCw2ICs0MDMsOCBAQAogCWlmIChibGtfcnFfY3B1X3ZhbGlkKG5leHQpKQogCQlyZXEtPmNwdSA9IG5leHQtPmNwdTsKIAorCS8qIG93bmVyLXNoaXAgb2YgYmlvIHBhc3NlZCBmcm9tIG5leHQgdG8gcmVxICovCisJbmV4dC0+YmlvID0gTlVMTDsKIAlfX2Jsa19wdXRfcmVxdWVzdChxLCBuZXh0KTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aW1lb3V0LmMgYi9ibG9jay9ibGstdGltZW91dC5jCmluZGV4IGEwOTUzNTMuLmJiYmRjNGIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aW1lb3V0LmMKKysrIGIvYmxvY2svYmxrLXRpbWVvdXQuYwpAQCAtMjA5LDEyICsyMDksMTkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXF1ZXN0ICpycSwgKnRtcDsKKwlMSVNUX0hFQUQobGlzdCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKIAllbHZfYWJvcnRfcXVldWUocSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnEsIHRtcCwgJnEtPnRpbWVvdXRfbGlzdCwgdGltZW91dF9saXN0KQorCS8qCisJICogU3BsaWNlIGVudHJpZXMgdG8gbG9jYWwgbGlzdCwgdG8gYXZvaWQgZGVhZGxvY2tpbmcgaWYgZW50cmllcworCSAqIGdldCByZWFkZGVkIHRvIHRoZSB0aW1lb3V0IGxpc3QgYnkgZXJyb3IgaGFuZGxpbmcKKwkgKi8KKwlsaXN0X3NwbGljZV9pbml0KCZxLT50aW1lb3V0X2xpc3QsICZsaXN0KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycSwgdG1wLCAmbGlzdCwgdGltZW91dF9saXN0KQogCQlibGtfYWJvcnRfcmVxdWVzdChycSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsa3RyYWNlLmMgYi9ibG9jay9ibGt0cmFjZS5jCmluZGV4IDM5Y2MzYmYuLjdjZjlkMWYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsa3RyYWNlLmMKKysrIGIvYmxvY2svYmxrdHJhY2UuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAKIAl3aGF0IHw9IGRkaXJfYWN0W3J3ICYgV1JJVEVdOwogCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIEJBUlJJRVIpOwotCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIFNZTkMpOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIFNZTkNJTyk7CiAJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgQUhFQUQpOwogCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIE1FVEEpOwogCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIERJU0NBUkQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYnNnLmMgYi9ibG9jay9ic2cuYwppbmRleCBkNDE0YmI1Li4yMDYwNjBlIDEwMDY0NAotLS0gYS9ibG9jay9ic2cuYworKysgYi9ibG9jay9ic2cuYwpAQCAtMjE4LDkgKzIxOCw2IEBACiAKIAlpZiAoaGRyLT5ndWFyZCAhPSAnUScpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChoZHItPmRvdXRfeGZlcl9sZW4gPiAocS0+bWF4X3NlY3RvcnMgPDwgOSkgfHwKLQkgICAgaGRyLT5kaW5feGZlcl9sZW4gPiAocS0+bWF4X3NlY3RvcnMgPDwgOSkpCi0JCXJldHVybiAtRUlPOwogCiAJc3dpdGNoIChoZHItPnByb3RvY29sKSB7CiAJY2FzZSBCU0dfUFJPVE9DT0xfU0NTSToKQEAgLTI0NCw3ICsyNDEsOCBAQAogICogbWFwIHNnX2lvX3Y0IHRvIGEgcmVxdWVzdC4KICAqLwogc3RhdGljIHN0cnVjdCByZXF1ZXN0ICoKLWJzZ19tYXBfaGRyKHN0cnVjdCBic2dfZGV2aWNlICpiZCwgc3RydWN0IHNnX2lvX3Y0ICpoZHIsIGZtb2RlX3QgaGFzX3dyaXRlX3Blcm0pCitic2dfbWFwX2hkcihzdHJ1Y3QgYnNnX2RldmljZSAqYmQsIHN0cnVjdCBzZ19pb192NCAqaGRyLCBmbW9kZV90IGhhc193cml0ZV9wZXJtLAorCSAgICB1OCAqc2Vuc2UpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZC0+cXVldWU7CiAJc3RydWN0IHJlcXVlc3QgKnJxLCAqbmV4dF9ycSA9IE5VTEw7CkBAIC0zMDYsNiArMzA0LDEwIEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CisKKwlycS0+c2Vuc2UgPSBzZW5zZTsKKwlycS0+c2Vuc2VfbGVuID0gMDsKKwogCXJldHVybiBycTsKIG91dDoKIAlpZiAocnEtPmNtZCAhPSBycS0+X19jbWQpCkBAIC0zNDgsOCArMzUwLDcgQEAKIHN0YXRpYyB2b2lkIGJzZ19hZGRfY29tbWFuZChzdHJ1Y3QgYnNnX2RldmljZSAqYmQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJICAgIHN0cnVjdCBic2dfY29tbWFuZCAqYmMsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlycS0+c2Vuc2UgPSBiYy0+c2Vuc2U7Ci0JcnEtPnNlbnNlX2xlbiA9IDA7CisJaW50IGF0X2hlYWQgPSAoMCA9PSAoYmMtPmhkci5mbGFncyAmIEJTR19GTEFHX1FfQVRfVEFJTCkpOwogCiAJLyoKIAkgKiBhZGQgYmMgY29tbWFuZCB0byBidXN5IHF1ZXVlIGFuZCBzdWJtaXQgcnEgZm9yIGlvCkBAIC0zNjYsNyArMzY3LDcgQEAKIAlkcHJpbnRrKCIlczogcXVldWVpbmcgcnEgJXAsIGJjICVwXG4iLCBiZC0+bmFtZSwgcnEsIGJjKTsKIAogCXJxLT5lbmRfaW9fZGF0YSA9IGJjOwotCWJsa19leGVjdXRlX3JxX25vd2FpdChxLCBOVUxMLCBycSwgMSwgYnNnX3JxX2VuZF9pbyk7CisJYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHEsIE5VTEwsIHJxLCBhdF9oZWFkLCBic2dfcnFfZW5kX2lvKTsKIH0KIAogc3RhdGljIHN0cnVjdCBic2dfY29tbWFuZCAqYnNnX25leHRfZG9uZV9jbWQoc3RydWN0IGJzZ19kZXZpY2UgKmJkKQpAQCAtNDE5LDcgKzQyMCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlkcHJpbnRrKCJycSAlcCBiaW8gJXAgJXVcbiIsIHJxLCBiaW8sIHJxLT5lcnJvcnMpOworCWRwcmludGsoInJxICVwIGJpbyAlcCAweCV4XG4iLCBycSwgYmlvLCBycS0+ZXJyb3JzKTsKIAkvKgogCSAqIGZpbGwgaW4gYWxsIHRoZSBvdXRwdXQgbWVtYmVycwogCSAqLwpAQCAtNjM1LDcgKzYzNiw3IEBACiAJCS8qCiAJCSAqIGdldCBhIHJlcXVlc3QsIGZpbGwgaW4gdGhlIGJsYW5rcywgYW5kIGFkZCB0byByZXF1ZXN0IHF1ZXVlCiAJCSAqLwotCQlycSA9IGJzZ19tYXBfaGRyKGJkLCAmYmMtPmhkciwgaGFzX3dyaXRlX3Blcm0pOworCQlycSA9IGJzZ19tYXBfaGRyKGJkLCAmYmMtPmhkciwgaGFzX3dyaXRlX3Blcm0sIGJjLT5zZW5zZSk7CiAJCWlmIChJU19FUlIocnEpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHJxKTsKIAkJCXJxID0gTlVMTDsKQEAgLTkyMiwxOCArOTIzLDIyIEBACiAJCXN0cnVjdCByZXF1ZXN0ICpycTsKIAkJc3RydWN0IGJpbyAqYmlvLCAqYmlkaV9iaW8gPSBOVUxMOwogCQlzdHJ1Y3Qgc2dfaW9fdjQgaGRyOworCQlpbnQgYXRfaGVhZDsKKwkJdTggc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmhkciwgdWFyZywgc2l6ZW9mKGhkcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJcnEgPSBic2dfbWFwX2hkcihiZCwgJmhkciwgZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpOworCQlycSA9IGJzZ19tYXBfaGRyKGJkLCAmaGRyLCBmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSwgc2Vuc2UpOwogCQlpZiAoSVNfRVJSKHJxKSkKIAkJCXJldHVybiBQVFJfRVJSKHJxKTsKIAogCQliaW8gPSBycS0+YmlvOwogCQlpZiAocnEtPm5leHRfcnEpCiAJCQliaWRpX2JpbyA9IHJxLT5uZXh0X3JxLT5iaW87Ci0JCWJsa19leGVjdXRlX3JxKGJkLT5xdWV1ZSwgTlVMTCwgcnEsIDApOworCisJCWF0X2hlYWQgPSAoMCA9PSAoaGRyLmZsYWdzICYgQlNHX0ZMQUdfUV9BVF9UQUlMKSk7CisJCWJsa19leGVjdXRlX3JxKGJkLT5xdWV1ZSwgTlVMTCwgcnEsIGF0X2hlYWQpOwogCQlyZXQgPSBibGtfY29tcGxldGVfc2d2NF9oZHJfcnEocnEsICZoZHIsIGJpbywgYmlkaV9iaW8pOwogCiAJCWlmIChjb3B5X3RvX3VzZXIodWFyZywgJmhkciwgc2l6ZW9mKGhkcikpKQpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggMzk3OTYwYy4uYTllYzkxMCAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC0yNTYsNiArMjU2LDIyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAorLyoqCisgKiByZWdpc3Rlcl9ibGtkZXYgLSByZWdpc3RlciBhIG5ldyBibG9jayBkZXZpY2UKKyAqCisgKiBAbWFqb3I6IHRoZSByZXF1ZXN0ZWQgbWFqb3IgZGV2aWNlIG51bWJlciBbMS4uMjU1XS4gSWYgQG1ham9yPTAsIHRyeSB0bworICogICAgICAgICBhbGxvY2F0ZSBhbnkgdW51c2VkIG1ham9yIG51bWJlci4KKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgbmV3IGJsb2NrIGRldmljZSBhcyBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcKKyAqCisgKiBUaGUgQG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBzeXN0ZW0uCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBAbWFqb3IgaW5wdXQgcGFyYW1ldGVyLgorICogIC0gaWYgYSBtYWpvciBkZXZpY2UgbnVtYmVyIHdhcyByZXF1ZXN0ZWQgaW4gcmFuZ2UgWzEuLjI1NV0gdGhlbiB0aGUKKyAqICAgIGZ1bmN0aW9uIHJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqICAtIGlmIGFueSB1bnVzZWQgbWFqb3IgbnVtYmVyIHdhcyByZXF1ZXN0ZWQgd2l0aCBAbWFqb3I9MCBwYXJhbWV0ZXIKKyAqICAgIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgYWxsb2NhdGVkIG1ham9yIG51bWJlciBpbiByYW5nZQorICogICAgWzEuLjI1NV0gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCiBpbnQgcmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCBtYWpvciwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgYmxrX21ham9yX25hbWUgKipuLCAqcDsKQEAgLTEwODcsNiArMTEwMywxNCBAQAogCQlpZiAoc3RyY21wKGRldl9uYW1lKGRldiksIG5hbWUpKQogCQkJY29udGludWU7CiAKKwkJaWYgKHBhcnRubyA8IGRpc2stPm1pbm9ycykgeworCQkJLyogV2UgbmVlZCB0byByZXR1cm4gdGhlIHJpZ2h0IGRldm5vLCBldmVuCisJCQkgKiBpZiB0aGUgcGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QgeWV0LgorCQkJICovCisJCQlkZXZ0ID0gTUtERVYoTUFKT1IoZGV2LT5kZXZ0KSwKKwkJCQkgICAgIE1JTk9SKGRldi0+ZGV2dCkgKyBwYXJ0bm8pOworCQkJYnJlYWs7CisJCX0KIAkJcGFydCA9IGRpc2tfZ2V0X3BhcnQoZGlzaywgcGFydG5vKTsKIAkJaWYgKHBhcnQpIHsKIAkJCWRldnQgPSBwYXJ0X2RldnQocGFydCk7CmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggZWU5YzY3ZC4uNjI2ZWUyNyAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMjE0LDIxICsyMTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIHVubWFwIGEgcmVxdWVzdCB0aGF0IHdhcyBwcmV2aW91c2x5IG1hcHBlZCB0byB0aGlzIHNnX2lvX2hkci4gaGFuZGxlcwotICogYm90aCBzZyBhbmQgbm9uLXNnIHNnX2lvX2hkci4KLSAqLwotc3RhdGljIGludCBibGtfdW5tYXBfc2doZHJfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3Qgc2dfaW9faGRyICpoZHIpCi17Ci0JYmxrX3JxX3VubWFwX3VzZXIocnEtPmJpbyk7Ci0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBibGtfY29tcGxldGVfc2doZHJfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3Qgc2dfaW9faGRyICpoZHIsCiAJCQkJIHN0cnVjdCBiaW8gKmJpbykKIHsKLQlpbnQgciwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCS8qCiAJICogZmlsbCBpbiBhbGwgdGhlIG91dHB1dCBtZW1iZXJzCkBAIC0yNTMsMTIgKzI0MiwxMCBAQAogCQkJcmV0ID0gLUVGQVVMVDsKIAl9CiAKLQlycS0+YmlvID0gYmlvOwotCXIgPSBibGtfdW5tYXBfc2doZHJfcnEocnEsIGhkcik7Ci0JaWYgKHJldCkKLQkJciA9IHJldDsKKwlibGtfcnFfdW5tYXBfdXNlcihiaW8pOworCWJsa19wdXRfcmVxdWVzdChycSk7CiAKLQlyZXR1cm4gcjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNnX2lvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZ2VuZGlzayAqYmRfZGlzaywKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggOGRkZTRmYy4uNzRkMGU2MiAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTU2LDYgKzU2LDcgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBDUllQVE9fQUxHQVBJMgogCXNlbGVjdCBDUllQVE9fUk5HMgorCXNlbGVjdCBDUllQVE9fV09SS1FVRVVFCiAKIGNvbmZpZyBDUllQVE9fSEFTSAogCXRyaXN0YXRlCkBAIC03NSw2ICs3NiwxMCBAQAogCXRyaXN0YXRlCiAJc2VsZWN0IENSWVBUT19BTEdBUEkyCiAKK2NvbmZpZyBDUllQVE9fUENPTVAKKwl0cmlzdGF0ZQorCXNlbGVjdCBDUllQVE9fQUxHQVBJMgorCiBjb25maWcgQ1JZUFRPX01BTkFHRVIKIAl0cmlzdGF0ZSAiQ3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gbWFuYWdlciIKIAlzZWxlY3QgQ1JZUFRPX01BTkFHRVIyCkBAIC04Nyw2ICs5Miw3IEBACiAJc2VsZWN0IENSWVBUT19BRUFEMgogCXNlbGVjdCBDUllQVE9fSEFTSDIKIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUjIKKwlzZWxlY3QgQ1JZUFRPX1BDT01QCiAKIGNvbmZpZyBDUllQVE9fR0YxMjhNVUwKIAl0cmlzdGF0ZSAiR0YoMl4xMjgpIG11bHRpcGxpY2F0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKQEAgLTEwNiwxMSArMTEyLDE1IEBACiAJaGVscAogCSAgVGhlc2UgYXJlICdOdWxsJyBhbGdvcml0aG1zLCB1c2VkIGJ5IElQc2VjLCB3aGljaCBkbyBub3RoaW5nLgogCitjb25maWcgQ1JZUFRPX1dPUktRVUVVRQorICAgICAgIHRyaXN0YXRlCisKIGNvbmZpZyBDUllQVE9fQ1JZUFRECiAJdHJpc3RhdGUgIlNvZnR3YXJlIGFzeW5jIGNyeXB0byBkYWVtb24iCiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKIAlzZWxlY3QgQ1JZUFRPX0hBU0gKIAlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKwlzZWxlY3QgQ1JZUFRPX1dPUktRVUVVRQogCWhlbHAKIAkgIFRoaXMgaXMgYSBnZW5lcmljIHNvZnR3YXJlIGFzeW5jaHJvbm91cyBjcnlwdG8gZGFlbW9uIHRoYXQKIAkgIGNvbnZlcnRzIGFuIGFyYml0cmFyeSBzeW5jaHJvbm91cyBzb2Z0d2FyZSBjcnlwdG8gYWxnb3JpdGhtCkBAIC00NzAsNiArNDgwLDMxIEBACiAKIAkgIFNlZSA8aHR0cDovL2NzcmMubmlzdC5nb3YvZW5jcnlwdGlvbi9hZXMvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorY29uZmlnIENSWVBUT19BRVNfTklfSU5URUwKKwl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIChBRVMtTkkpIgorCWRlcGVuZHMgb24gKFg4NiB8fCBVTUxfWDg2KSAmJiA2NEJJVAorCXNlbGVjdCBDUllQVE9fQUVTX1g4Nl82NAorCXNlbGVjdCBDUllQVE9fQ1JZUFRECisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwloZWxwCisJICBVc2UgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBmb3IgQUVTIGFsZ29yaXRobS4KKworCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbAorCSAgYWxnb3JpdGhtLgorCisJICBSaWpuZGFlbCBhcHBlYXJzIHRvIGJlIGNvbnNpc3RlbnRseSBhIHZlcnkgZ29vZCBwZXJmb3JtZXIgaW4KKwkgIGJvdGggaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgY29tcHV0aW5nCisJICBlbnZpcm9ubWVudHMgcmVnYXJkbGVzcyBvZiBpdHMgdXNlIGluIGZlZWRiYWNrIG9yIG5vbi1mZWVkYmFjaworCSAgbW9kZXMuIEl0cyBrZXkgc2V0dXAgdGltZSBpcyBleGNlbGxlbnQsIGFuZCBpdHMga2V5IGFnaWxpdHkgaXMKKwkgIGdvb2QuIFJpam5kYWVsJ3MgdmVyeSBsb3cgbWVtb3J5IHJlcXVpcmVtZW50cyBtYWtlIGl0IHZlcnkgd2VsbAorCSAgc3VpdGVkIGZvciByZXN0cmljdGVkLXNwYWNlIGVudmlyb25tZW50cywgaW4gd2hpY2ggaXQgYWxzbworCSAgZGVtb25zdHJhdGVzIGV4Y2VsbGVudCBwZXJmb3JtYW5jZS4gUmlqbmRhZWwncyBvcGVyYXRpb25zIGFyZQorCSAgYW1vbmcgdGhlIGVhc2llc3QgdG8gZGVmZW5kIGFnYWluc3QgcG93ZXIgYW5kIHRpbWluZyBhdHRhY2tzLgorCisJICBUaGUgQUVTIHNwZWNpZmllcyB0aHJlZSBrZXkgc2l6ZXM6IDEyOCwgMTkyIGFuZCAyNTYgYml0cworCisJICBTZWUgPGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIGNvbmZpZyBDUllQVE9fQU5VQklTCiAJdHJpc3RhdGUgIkFudWJpcyBjaXBoZXIgYWxnb3JpdGhtIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCkBAIC03MTQsNiArNzQ5LDE1IEBACiAKIAkgIFlvdSB3aWxsIG1vc3QgcHJvYmFibHkgd2FudCB0aGlzIGlmIHVzaW5nIElQU2VjLgogCitjb25maWcgQ1JZUFRPX1pMSUIKKwl0cmlzdGF0ZSAiWmxpYiBjb21wcmVzc2lvbiBhbGdvcml0aG0iCisJc2VsZWN0IENSWVBUT19QQ09NUAorCXNlbGVjdCBaTElCX0lORkxBVEUKKwlzZWxlY3QgWkxJQl9ERUZMQVRFCisJc2VsZWN0IE5MQVRUUgorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIHpsaWIgYWxnb3JpdGhtLgorCiBjb25maWcgQ1JZUFRPX0xaTwogCXRyaXN0YXRlICJMWk8gY29tcHJlc3Npb24gYWxnb3JpdGhtIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggNDZiMDhiZi4uNjczZDlmNyAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKyBiL2NyeXB0by9NYWtlZmlsZQpAQCAtNSw2ICs1LDggQEAKIG9iai0kKENPTkZJR19DUllQVE8pICs9IGNyeXB0by5vCiBjcnlwdG8tb2JqcyA6PSBhcGkubyBjaXBoZXIubyBkaWdlc3QubyBjb21wcmVzcy5vCiAKK29iai0kKENPTkZJR19DUllQVE9fV09SS1FVRVVFKSArPSBjcnlwdG9fd3EubworCiBvYmotJChDT05GSUdfQ1JZUFRPX0ZJUFMpICs9IGZpcHMubwogCiBjcnlwdG9fYWxnYXBpLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2MubwpAQCAtMjUsNiArMjcsOCBAQAogY3J5cHRvX2hhc2gtb2JqcyArPSBzaGFzaC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0hBU0gyKSArPSBjcnlwdG9faGFzaC5vCiAKK29iai0kKENPTkZJR19DUllQVE9fUENPTVApICs9IHBjb21wcmVzcy5vCisKIGNyeXB0b21nci1vYmpzIDo9IGFsZ2Jvc3MubyB0ZXN0bWdyLm8KIAogb2JqLSQoQ09ORklHX0NSWVBUT19NQU5BR0VSMikgKz0gY3J5cHRvbWdyLm8KQEAgLTcwLDYgKzc0LDcgQEAKIG9iai0kKENPTkZJR19DUllQVE9fU0VFRCkgKz0gc2VlZC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NBTFNBMjApICs9IHNhbHNhMjBfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFRkxBVEUpICs9IGRlZmxhdGUubworb2JqLSQoQ09ORklHX0NSWVBUT19aTElCKSArPSB6bGliLm8KIG9iai0kKENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMpICs9IG1pY2hhZWxfbWljLm8KIG9iai0kKENPTkZJR19DUllQVE9fQ1JDMzJDKSArPSBjcmMzMmMubwogb2JqLSQoQ09ORklHX0NSWVBUT19BVVRIRU5DKSArPSBhdXRoZW5jLm8KZGlmZiAtLWdpdCBhL2NyeXB0by9hYmxrY2lwaGVyLmMgYi9jcnlwdG8vYWJsa2NpcGhlci5jCmluZGV4IDk0MTQwYjMuLmUxMWNlMzcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hYmxrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2FibGtjaXBoZXIuYwpAQCAtMjgyLDYgKzI4MiwyNSBAQAogCQkJCQkgIGFsZy0+Y3JhX2FibGtjaXBoZXIuaXZzaXplKSkKIAkJcmV0dXJuIGFsZzsKIAorCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUsIHR5cGUgfCBDUllQVE9fQUxHX1RFU1RFRCwKKwkJCQkgICAgbWFzayAmIH5DUllQVE9fQUxHX1RFU1RFRCk7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gYWxnOworCisJaWYgKChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PQorCSAgICBDUllQVE9fQUxHX1RZUEVfR0lWQ0lQSEVSKSB7CisJCWlmICgoYWxnLT5jcmFfZmxhZ3MgXiB0eXBlIF4gfm1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpIHsKKwkJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJCQlhbGcgPSBFUlJfUFRSKC1FTk9FTlQpOworCQl9CisJCXJldHVybiBhbGc7CisJfQorCisJQlVHX09OKCEoKGFsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19UWVBFX01BU0spID09CisJCSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSID8gYWxnLT5jcmFfYmxrY2lwaGVyLml2c2l6ZSA6CisJCQkJCSAgICAgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpKTsKKwogCXJldHVybiBFUlJfUFRSKGNyeXB0b19naXZjaXBoZXJfZGVmYXVsdChhbGcsIHR5cGUsIG1hc2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FlYWQuYyBiL2NyeXB0by9hZWFkLmMKaW5kZXggM2E2ZjNmNS4uZDlhYTczMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FlYWQuYworKysgYi9jcnlwdG8vYWVhZC5jCkBAIC00MjIsNiArNDIyLDIyIEBACiAJaWYgKCFhbGctPmNyYV9hZWFkLml2c2l6ZSkKIAkJcmV0dXJuIGFsZzsKIAorCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUsIHR5cGUgfCBDUllQVE9fQUxHX1RFU1RFRCwKKwkJCQkgICAgbWFzayAmIH5DUllQVE9fQUxHX1RFU1RFRCk7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gYWxnOworCisJaWYgKGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19hZWFkX3R5cGUpIHsKKwkJaWYgKChhbGctPmNyYV9mbGFncyBeIHR5cGUgXiB+bWFzaykgJiBDUllQVE9fQUxHX1RFU1RFRCkgeworCQkJY3J5cHRvX21vZF9wdXQoYWxnKTsKKwkJCWFsZyA9IEVSUl9QVFIoLUVOT0VOVCk7CisJCX0KKwkJcmV0dXJuIGFsZzsKKwl9CisKKwlCVUdfT04oIWFsZy0+Y3JhX2FlYWQuaXZzaXplKTsKKwogCXJldHVybiBFUlJfUFRSKGNyeXB0b19uaXZhZWFkX2RlZmF1bHQoYWxnLCB0eXBlLCBtYXNrKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9haGFzaC5jIGIvY3J5cHRvL2FoYXNoLmMKaW5kZXggYmE1MjkyZC4uYjJkMWVlMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FoYXNoLmMKKysrIGIvY3J5cHRvL2FoYXNoLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCXNlcV9wcmludGYobSwgImFzeW5jICAgICAgICA6ICVzXG4iLCBhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkMgPwogCQkJCQkgICAgICJ5ZXMiIDogIm5vIik7CiAJc2VxX3ByaW50ZihtLCAiYmxvY2tzaXplICAgIDogJXVcbiIsIGFsZy0+Y3JhX2Jsb2Nrc2l6ZSk7Ci0Jc2VxX3ByaW50ZihtLCAiZGlnZXN0c2l6ZSAgIDogJXVcbiIsIGFsZy0+Y3JhX2hhc2guZGlnZXN0c2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiZGlnZXN0c2l6ZSAgIDogJXVcbiIsIGFsZy0+Y3JhX2FoYXNoLmRpZ2VzdHNpemUpOwogfQogCiBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX2FoYXNoX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYm9zcy5jIGIvY3J5cHRvL2FsZ2Jvc3MuYwppbmRleCA0NjAxZTQyNi4uNjkwNmY5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2Jvc3MuYworKysgYi9jcnlwdG8vYWxnYm9zcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjA2LDggKzIwNiw3IEBACiAJdTMyIHR5cGUgPSBwYXJhbS0+dHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghKCh0eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUikgJgotCSAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikpCisJaWYgKHR5cGUgJiBDUllQVE9fQUxHX1RFU1RFRCkKIAkJZ290byBza2lwdGVzdDsKIAogCWVyciA9IGFsZ190ZXN0KHBhcmFtLT5kcml2ZXIsIHBhcmFtLT5hbGcsIHR5cGUsIENSWVBUT19BTEdfVEVTVEVEKTsKQEAgLTIyMyw2ICsyMjIsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwogCXN0cnVjdCBjcnlwdG9fdGVzdF9wYXJhbSAqcGFyYW07CisJdTMyIHR5cGU7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBlcnI7CkBAIC0yMzMsNyArMjMzLDE5IEBACiAKIAltZW1jcHkocGFyYW0tPmRyaXZlciwgYWxnLT5jcmFfZHJpdmVyX25hbWUsIHNpemVvZihwYXJhbS0+ZHJpdmVyKSk7CiAJbWVtY3B5KHBhcmFtLT5hbGcsIGFsZy0+Y3JhX25hbWUsIHNpemVvZihwYXJhbS0+YWxnKSk7Ci0JcGFyYW0tPnR5cGUgPSBhbGctPmNyYV9mbGFnczsKKwl0eXBlID0gYWxnLT5jcmFfZmxhZ3M7CisKKwkvKiBUaGlzIHBpZWNlIG9mIGNyYXAgbmVlZHMgdG8gZGlzYXBwZWFyIGludG8gcGVyLXR5cGUgdGVzdCBob29rcy4gKi8KKwlpZiAoKCEoKHR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSKSAmCisJICAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikgJiYKKwkgICAgICgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkgICAgICBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSID8gYWxnLT5jcmFfYmxrY2lwaGVyLml2c2l6ZSA6CisJCQkJCSAgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpKSB8fAorCSAgICAoISgodHlwZSBeIENSWVBUT19BTEdfVFlQRV9BRUFEKSAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSAmJgorCSAgICAgYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX25pdmFlYWRfdHlwZSAmJiBhbGctPmNyYV9hZWFkLml2c2l6ZSkpCisJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CisKKwlwYXJhbS0+dHlwZSA9IHR5cGU7CiAKIAl0aHJlYWQgPSBrdGhyZWFkX3J1bihjcnlwdG9tZ3JfdGVzdCwgcGFyYW0sICJjcnlwdG9tZ3JfdGVzdCIpOwogCWlmIChJU19FUlIodGhyZWFkKSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hbnNpX2Nwcm5nLmMgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCmluZGV4IDBmYWM4ZmYuLmQ4MGVkNGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnNpX2Nwcm5nLmMKKysrIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwpAQCAtMTMyLDkgKzEzMiwxNSBAQAogCQkJICovCiAJCQlpZiAoIW1lbWNtcChjdHgtPnJhbmRfZGF0YSwgY3R4LT5sYXN0X3JhbmRfZGF0YSwKIAkJCQkJREVGQVVMVF9CTEtfU1opKSB7CisJCQkJaWYgKGZpcHNfZW5hYmxlZCkgeworCQkJCQlwYW5pYygiY3BybmcgJXAgRmFpbGVkIHJlcGV0aXRpb24gY2hlY2shXG4iLAorCQkJCQkJY3R4KTsKKwkJCQl9CisKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJImN0eCAlcCBGYWlsZWQgcmVwZXRpdGlvbiBjaGVjayFcbiIsCiAJCQkJCWN0eCk7CisKIAkJCQljdHgtPmZsYWdzIHw9IFBSTkdfTkVFRF9SRVNFVDsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTMzOCw3ICszNDQsMTYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZjdHgtPnBybmdfbG9jayk7CiAKLQlyZXR1cm4gcmVzZXRfcHJuZ19jb250ZXh0KGN0eCwgTlVMTCwgREVGQVVMVF9QUk5HX0tTWiwgTlVMTCwgTlVMTCk7CisJaWYgKHJlc2V0X3BybmdfY29udGV4dChjdHgsIE5VTEwsIERFRkFVTFRfUFJOR19LU1osIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGFmdGVyIGFsbG9jYXRpb24sIHdlIHNob3VsZCBhbHdheXMgZm9yY2UgdGhlIHVzZXIgdG8gcmVzZXQKKwkgKiBzbyB0aGV5IGRvbid0IGluYWR2ZXJ0ZW50bHkgdXNlIHRoZSBpbnNlY3VyZSBkZWZhdWx0IHZhbHVlcworCSAqIHdpdGhvdXQgc3BlY2lmeWluZyB0aGVtIGludGVudGlhbGx5CisJICovCisJY3R4LT5mbGFncyB8PSBQUk5HX05FRURfUkVTRVQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNwcm5nX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCBlZmU3N2RmLi4zMTRkYWI5IDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0yMTUsOCArMjE1LDE5IEBACiAJbWFzayAmPSB+KENSWVBUT19BTEdfTEFSVkFMIHwgQ1JZUFRPX0FMR19ERUFEKTsKIAl0eXBlICY9IG1hc2s7CiAKLQlhbGcgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShjcnlwdG9fYWxnX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKSwKLQkJCQkgICAgICBuYW1lKTsKKwlhbGcgPSBjcnlwdG9fYWxnX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKKwlpZiAoIWFsZykgeworCQljaGFyIHRtcFtDUllQVE9fTUFYX0FMR19OQU1FXTsKKworCQlyZXF1ZXN0X21vZHVsZShuYW1lKTsKKworCQlpZiAoISgodHlwZSBeIENSWVBUT19BTEdfTkVFRF9GQUxMQkFDSykgJiBtYXNrKSAmJgorCQkgICAgc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzLWFsbCIsIG5hbWUpIDwgc2l6ZW9mKHRtcCkpCisJCQlyZXF1ZXN0X21vZHVsZSh0bXApOworCisJCWFsZyA9IGNyeXB0b19hbGdfbG9va3VwKG5hbWUsIHR5cGUsIG1hc2spOworCX0KKwogCWlmIChhbGcpCiAJCXJldHVybiBjcnlwdG9faXNfbGFydmFsKGFsZykgPyBjcnlwdG9fbGFydmFsX3dhaXQoYWxnKSA6IGFsZzsKIApAQCAtMjQ0LDcgKzI1NSw3IEBACiAJc3RydWN0IGNyeXB0b19hbGcgKmxhcnZhbDsKIAlpbnQgb2s7CiAKLQlpZiAoIShtYXNrICYgQ1JZUFRPX0FMR19URVNURUQpKSB7CisJaWYgKCEoKHR5cGUgfCBtYXNrKSAmIENSWVBUT19BTEdfVEVTVEVEKSkgewogCQl0eXBlIHw9IENSWVBUT19BTEdfVEVTVEVEOwogCQltYXNrIHw9IENSWVBUT19BTEdfVEVTVEVEOwogCX0KQEAgLTQ1Myw4ICs0NjQsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FsbG9jX2Jhc2UpOwogCi1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2NyZWF0ZV90Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCit2b2lkICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKIHsKIAljaGFyICptZW07CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IE5VTEw7CkBAIC00ODgsOSArNDk5LDkgQEAKIAkJY3J5cHRvX3Nob290X2FsZyhhbGcpOwogCWtmcmVlKG1lbSk7CiBvdXRfZXJyOgotCXRmbSA9IEVSUl9QVFIoZXJyKTsKKwltZW0gPSBFUlJfUFRSKGVycik7CiBvdXQ6Ci0JcmV0dXJuIHRmbTsKKwlyZXR1cm4gbWVtOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2NyZWF0ZV90Zm0pOwogCkBAIC01MTQsMTIgKzUyNSwxMSBAQAogICoKICAqCUluIGNhc2Ugb2YgZXJyb3IgdGhlIHJldHVybiB2YWx1ZSBpcyBhbiBlcnJvciBwb2ludGVyLgogICovCi1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwKLQkJCQkgICAgdTMyIHR5cGUsIHUzMiBtYXNrKQordm9pZCAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqKCpsb29rdXApKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwl2b2lkICp0Zm07CiAJaW50IGVycjsKIAogCXR5cGUgJj0gZnJvbnRlbmQtPm1hc2tjbGVhcjsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibGtjaXBoZXIuYyBiL2NyeXB0by9ibGtjaXBoZXIuYwppbmRleCBkNzBhNDFjLi45MGQyNmM5IDEwMDY0NAotLS0gYS9jcnlwdG8vYmxrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2Jsa2NpcGhlci5jCkBAIC01MjEsNyArNTIxLDcgQEAKIAlpbnQgZXJyOwogCiAJdHlwZSA9IGNyeXB0b19za2NpcGhlcl90eXBlKHR5cGUpOwotCW1hc2sgPSBjcnlwdG9fc2tjaXBoZXJfbWFzayhtYXNrKSB8IENSWVBUT19BTEdfR0VOSVY7CisJbWFzayA9IGNyeXB0b19za2NpcGhlcl9tYXNrKG1hc2spfCBDUllQVE9fQUxHX0dFTklWOwogCiAJYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUsIHR5cGUsIG1hc2spOwogCWlmIChJU19FUlIoYWxnKSkKZGlmZiAtLWdpdCBhL2NyeXB0by9jaGFpbml2LmMgYi9jcnlwdG8vY2hhaW5pdi5jCmluZGV4IDdjMzdhNDkuLmJhMjAwYjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jaGFpbml2LmMKKysrIGIvY3J5cHRvL2NoYWluaXYuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3JuZy5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdG9fd3EuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMzMsNyArMTM0LDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCXF1ZXVlZCA9IHNjaGVkdWxlX3dvcmsoJmN0eC0+cG9zdHBvbmVkKTsKKwlxdWV1ZWQgPSBxdWV1ZV93b3JrKGtjcnlwdG9fd3EsICZjdHgtPnBvc3Rwb25lZCk7CiAJQlVHX09OKCFxdWV1ZWQpOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRkLmMgYi9jcnlwdG8vY3J5cHRkLmMKaW5kZXggZDI5ZTA2Yi4uZDE0YjIyNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0ZC5jCisrKyBiL2NyeXB0by9jcnlwdGQuYwpAQCAtMTIsMzAgKzEyLDMxIEBACiAKICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRkLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0b193cS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jZGVmaW5lIENSWVBURF9NQVhfUUxFTiAxMDAKKyNkZWZpbmUgQ1JZUFREX01BWF9DUFVfUUxFTiAxMDAKIAotc3RydWN0IGNyeXB0ZF9zdGF0ZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBtdXRleCBtdXRleDsKK3N0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlIHsKIAlzdHJ1Y3QgY3J5cHRvX3F1ZXVlIHF1ZXVlOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKK307CisKK3N0cnVjdCBjcnlwdGRfcXVldWUgeworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CiB9OwogCiBzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCB7CiAJc3RydWN0IGNyeXB0b19zcGF3biBzcGF3bjsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZTsKIH07CiAKIHN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX2N0eCB7CkBAIC01NCwxMSArNTUsODUgQEAKIAljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpjcnlwdGRfZ2V0X3N0YXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgdm9pZCBjcnlwdGRfcXVldWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3N0YXRpYyBpbnQgY3J5cHRkX2luaXRfcXVldWUoc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUsCisJCQkgICAgIHVuc2lnbmVkIGludCBtYXhfY3B1X3FsZW4pCit7CisJaW50IGNwdTsKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCisJcXVldWUtPmNwdV9xdWV1ZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSk7CisJaWYgKCFxdWV1ZS0+Y3B1X3F1ZXVlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWNwdV9xdWV1ZSA9IHBlcl9jcHVfcHRyKHF1ZXVlLT5jcHVfcXVldWUsIGNwdSk7CisJCWNyeXB0b19pbml0X3F1ZXVlKCZjcHVfcXVldWUtPnF1ZXVlLCBtYXhfY3B1X3FsZW4pOworCQlJTklUX1dPUksoJmNwdV9xdWV1ZS0+d29yaywgY3J5cHRkX3F1ZXVlX3dvcmtlcik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdGRfZmluaV9xdWV1ZShzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWNwdV9xdWV1ZSA9IHBlcl9jcHVfcHRyKHF1ZXVlLT5jcHVfcXVldWUsIGNwdSk7CisJCUJVR19PTihjcHVfcXVldWUtPnF1ZXVlLnFsZW4pOworCX0KKwlmcmVlX3BlcmNwdShxdWV1ZS0+Y3B1X3F1ZXVlKTsKK30KKworc3RhdGljIGludCBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlLAorCQkJCSAgc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWludCBjcHUsIGVycjsKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCisJY3B1ID0gZ2V0X2NwdSgpOworCWNwdV9xdWV1ZSA9IHBlcl9jcHVfcHRyKHF1ZXVlLT5jcHVfcXVldWUsIGNwdSk7CisJZXJyID0gY3J5cHRvX2VucXVldWVfcmVxdWVzdCgmY3B1X3F1ZXVlLT5xdWV1ZSwgcmVxdWVzdCk7CisJcXVldWVfd29ya19vbihjcHUsIGtjcnlwdG9fd3EsICZjcHVfcXVldWUtPndvcmspOworCXB1dF9jcHUoKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIENhbGxlZCBpbiB3b3JrcXVldWUgY29udGV4dCwgZG8gb25lIHJlYWwgY3J5cHRpb24gd29yayAodmlhCisgKiByZXEtPmNvbXBsZXRlKSBhbmQgcmVzY2hlZHVsZSBpdHNlbGYgaWYgdGhlcmUgYXJlIG1vcmUgd29yayB0bworICogZG8uICovCitzdGF0aWMgdm9pZCBjcnlwdGRfcXVldWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCXN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCAqYmFja2xvZzsKKworCWNwdV9xdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSwgd29yayk7CisJLyogT25seSBoYW5kbGUgb25lIHJlcXVlc3QgYXQgYSB0aW1lIHRvIGF2b2lkIGhvZ2dpbmcgY3J5cHRvCisJICogd29ya3F1ZXVlLiBwcmVlbXB0X2Rpc2FibGUvZW5hYmxlIGlzIHVzZWQgdG8gcHJldmVudAorCSAqIGJlaW5nIHByZWVtcHRlZCBieSBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KCkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwliYWNrbG9nID0gY3J5cHRvX2dldF9iYWNrbG9nKCZjcHVfcXVldWUtPnF1ZXVlKTsKKwlyZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZjcHVfcXVldWUtPnF1ZXVlKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJaWYgKCFyZXEpCisJCXJldHVybjsKKworCWlmIChiYWNrbG9nKQorCQliYWNrbG9nLT5jb21wbGV0ZShiYWNrbG9nLCAtRUlOUFJPR1JFU1MpOworCXJlcS0+Y29tcGxldGUocmVxLCAwKTsKKworCWlmIChjcHVfcXVldWUtPnF1ZXVlLnFsZW4pCisJCXF1ZXVlX3dvcmsoa2NyeXB0b193cSwgJmNwdV9xdWV1ZS0+d29yayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqY3J5cHRkX2dldF9xdWV1ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QgPSBjcnlwdG9fdGZtX2FsZ19pbnN0YW5jZSh0Zm0pOwogCXN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4ICppY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKLQlyZXR1cm4gaWN0eC0+c3RhdGU7CisJcmV0dXJuIGljdHgtPnF1ZXVlOwogfQogCiBzdGF0aWMgaW50IGNyeXB0ZF9ibGtjaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqcGFyZW50LApAQCAtMTMwLDE5ICsyMDUsMTMgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRkX2Jsa2NpcGhlcl9yZXF1ZXN0X2N0eCAqcmN0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0KLQkJY3J5cHRkX2dldF9zdGF0ZShjcnlwdG9fYWJsa2NpcGhlcl90Zm0odGZtKSk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZTsKIAorCXF1ZXVlID0gY3J5cHRkX2dldF9xdWV1ZShjcnlwdG9fYWJsa2NpcGhlcl90Zm0odGZtKSk7CiAJcmN0eC0+Y29tcGxldGUgPSByZXEtPmJhc2UuY29tcGxldGU7CiAJcmVxLT5iYXNlLmNvbXBsZXRlID0gY29tcGxldGU7CiAKLQlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQllcnIgPSBhYmxrY2lwaGVyX2VucXVldWVfcmVxdWVzdCgmc3RhdGUtPnF1ZXVlLCByZXEpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0KLQl3YWtlX3VwX3Byb2Nlc3Moc3RhdGUtPnRhc2spOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3QocXVldWUsICZyZXEtPmJhc2UpOwogfQogCiBzdGF0aWMgaW50IGNyeXB0ZF9ibGtjaXBoZXJfZW5jcnlwdF9lbnF1ZXVlKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKQEAgLTE3NiwyMSArMjQ1LDEyIEBACiBzdGF0aWMgdm9pZCBjcnlwdGRfYmxrY2lwaGVyX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gY3J5cHRkX2dldF9zdGF0ZSh0Zm0pOwotCWludCBhY3RpdmU7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWFjdGl2ZSA9IGFibGtjaXBoZXJfdGZtX2luX3F1ZXVlKCZzdGF0ZS0+cXVldWUsCi0JCQkJCSBfX2NyeXB0b19hYmxrY2lwaGVyX2Nhc3QodGZtKSk7Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCi0JQlVHX09OKGFjdGl2ZSk7CiAKIAljcnlwdG9fZnJlZV9ibGtjaXBoZXIoY3R4LT5jaGlsZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2NfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b19hbGcgKmFsZywKLQkJCQkJCSAgICAgc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCisJCQkJCQkgICAgIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0ZF9pbnN0YW5jZV9jdHggKmN0eDsKQEAgLTIxMyw3ICsyNzMsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKIAotCWN0eC0+c3RhdGUgPSBzdGF0ZTsKKwljdHgtPnF1ZXVlID0gcXVldWU7CiAKIAltZW1jcHkoaW5zdC0+YWxnLmNyYV9uYW1lLCBhbGctPmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FKTsKIApAQCAtMjMxLDcgKzI5MSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2NfYmxrY2lwaGVyKAotCXN0cnVjdCBydGF0dHIgKip0Yiwgc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCisJc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwogCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CkBAIC0yNDEsNyArMzAxLDcgQEAKIAlpZiAoSVNfRVJSKGFsZykpCiAJCXJldHVybiBFUlJfQ0FTVChhbGcpOwogCi0JaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHN0YXRlKTsKKwlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgcXVldWUpOwogCWlmIChJU19FUlIoaW5zdCkpCiAJCWdvdG8gb3V0X3B1dF9hbGc7CiAKQEAgLTI4OSwxNSArMzQ5LDYgQEAKIHN0YXRpYyB2b2lkIGNyeXB0ZF9oYXNoX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0ZF9oYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9IGNyeXB0ZF9nZXRfc3RhdGUodGZtKTsKLQlpbnQgYWN0aXZlOwotCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQlhY3RpdmUgPSBhaGFzaF90Zm1faW5fcXVldWUoJnN0YXRlLT5xdWV1ZSwKLQkJCQlfX2NyeXB0b19haGFzaF9jYXN0KHRmbSkpOwotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQotCUJVR19PTihhY3RpdmUpOwogCiAJY3J5cHRvX2ZyZWVfaGFzaChjdHgtPmNoaWxkKTsKIH0KQEAgLTMyMywxOSArMzc0LDEzIEBACiB7CiAJc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4ICpyY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPQotCQljcnlwdGRfZ2V0X3N0YXRlKGNyeXB0b19haGFzaF90Zm0odGZtKSk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSA9CisJCWNyeXB0ZF9nZXRfcXVldWUoY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKIAogCXJjdHgtPmNvbXBsZXRlID0gcmVxLT5iYXNlLmNvbXBsZXRlOwogCXJlcS0+YmFzZS5jb21wbGV0ZSA9IGNvbXBsZXRlOwogCi0Jc3Bpbl9sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0JZXJyID0gYWhhc2hfZW5xdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUsIHJlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQotCXdha2VfdXBfcHJvY2VzcyhzdGF0ZS0+dGFzayk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gY3J5cHRkX2VucXVldWVfcmVxdWVzdChxdWV1ZSwgJnJlcS0+YmFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyeXB0ZF9oYXNoX2luaXQoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXFfYXN5bmMsIGludCBlcnIpCkBAIC00NjgsNyArNTEzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19oYXNoKAotCXN0cnVjdCBydGF0dHIgKip0Yiwgc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCisJc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwogCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CkBAIC00NzgsNyArNTIzLDcgQEAKIAlpZiAoSVNfRVJSKGFsZykpCiAJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoYWxnKSk7CiAKLQlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgc3RhdGUpOworCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBxdWV1ZSk7CiAJaWYgKElTX0VSUihpbnN0KSkKIAkJZ290byBvdXRfcHV0X2FsZzsKIApAQCAtNTAyLDcgKzU0Nyw3IEBACiAJcmV0dXJuIGluc3Q7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRkX3N0YXRlIHN0YXRlOworc3RhdGljIHN0cnVjdCBjcnlwdGRfcXVldWUgcXVldWU7CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2Moc3RydWN0IHJ0YXR0ciAqKnRiKQogewpAQCAtNTE0LDkgKzU1OSw5IEBACiAKIAlzd2l0Y2ggKGFsZ3QtPnR5cGUgJiBhbGd0LT5tYXNrICYgQ1JZUFRPX0FMR19UWVBFX01BU0spIHsKIAljYXNlIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVI6Ci0JCXJldHVybiBjcnlwdGRfYWxsb2NfYmxrY2lwaGVyKHRiLCAmc3RhdGUpOworCQlyZXR1cm4gY3J5cHRkX2FsbG9jX2Jsa2NpcGhlcih0YiwgJnF1ZXVlKTsKIAljYXNlIENSWVBUT19BTEdfVFlQRV9ESUdFU1Q6Ci0JCXJldHVybiBjcnlwdGRfYWxsb2NfaGFzaCh0YiwgJnN0YXRlKTsKKwkJcmV0dXJuIGNyeXB0ZF9hbGxvY19oYXNoKHRiLCAmcXVldWUpOwogCX0KIAogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtNTM3LDgyICs1ODIsNTggQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBjcnlwdGRfY3JlYXRlX3RocmVhZChzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSwKLQkJCQkgICAgICAgaW50ICgqZm4pKHZvaWQgKmRhdGEpLCBjb25zdCBjaGFyICpuYW1lKQorc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcihjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJCQkJCSAgdTMyIHR5cGUsIHUzMiBtYXNrKQogewotCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+bG9jayk7Ci0JbXV0ZXhfaW5pdCgmc3RhdGUtPm11dGV4KTsKLQljcnlwdG9faW5pdF9xdWV1ZSgmc3RhdGUtPnF1ZXVlLCBDUllQVERfTUFYX1FMRU4pOworCWNoYXIgY3J5cHRkX2FsZ19uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtOwogCi0Jc3RhdGUtPnRhc2sgPSBrdGhyZWFkX3J1bihmbiwgc3RhdGUsIG5hbWUpOwotCWlmIChJU19FUlIoc3RhdGUtPnRhc2spKQotCQlyZXR1cm4gUFRSX0VSUihzdGF0ZS0+dGFzayk7CisJaWYgKHNucHJpbnRmKGNyeXB0ZF9hbGdfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAiY3J5cHRkKCVzKSIsIGFsZ19uYW1lKSA+PSBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihjcnlwdGRfYWxnX25hbWUsIHR5cGUsIG1hc2spOworCWlmIChJU19FUlIodGZtKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHRmbSk7CisJaWYgKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pLT5fX2NydF9hbGctPmNyYV9tb2R1bGUgIT0gVEhJU19NT0RVTEUpIHsKKwkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcih0Zm0pOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19jcnlwdGRfYWJsa2NpcGhlcl9jYXN0KHRmbSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdGRfc3RvcF90aHJlYWQoc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCitzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pCiB7Ci0JQlVHX09OKHN0YXRlLT5xdWV1ZS5xbGVuKTsKLQlrdGhyZWFkX3N0b3Aoc3RhdGUtPnRhc2spOworCXN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KCZ0Zm0tPmJhc2UpOworCXJldHVybiBjdHgtPmNoaWxkOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQpOwogCi1zdGF0aWMgaW50IGNyeXB0ZF90aHJlYWQodm9pZCAqZGF0YSkKK3ZvaWQgY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcihzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSkKIHsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9IGRhdGE7Ci0JaW50IHN0b3A7Ci0KLQljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKLQotCWRvIHsKLQkJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsICpiYWNrbG9nOwotCi0JCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQkJYmFja2xvZyA9IGNyeXB0b19nZXRfYmFja2xvZygmc3RhdGUtPnF1ZXVlKTsKLQkJcmVxID0gY3J5cHRvX2RlcXVldWVfcmVxdWVzdCgmc3RhdGUtPnF1ZXVlKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQotCQlzdG9wID0ga3RocmVhZF9zaG91bGRfc3RvcCgpOwotCi0JCWlmIChzdG9wIHx8IHJlcSkgewotCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJaWYgKHJlcSkgewotCQkJCWlmIChiYWNrbG9nKQotCQkJCQliYWNrbG9nLT5jb21wbGV0ZShiYWNrbG9nLAotCQkJCQkJCSAgLUVJTlBST0dSRVNTKTsKLQkJCQlyZXEtPmNvbXBsZXRlKHJlcSwgMCk7Ci0JCQl9Ci0JCX0KLQotCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0KLQkJc2NoZWR1bGUoKTsKLQl9IHdoaWxlICghc3RvcCk7Ci0KLQlyZXR1cm4gMDsKKwljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKCZ0Zm0tPmJhc2UpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcik7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNyeXB0ZF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGNyeXB0ZF9jcmVhdGVfdGhyZWFkKCZzdGF0ZSwgY3J5cHRkX3RocmVhZCwgImNyeXB0ZCIpOworCWVyciA9IGNyeXB0ZF9pbml0X3F1ZXVlKCZxdWV1ZSwgQ1JZUFREX01BWF9DUFVfUUxFTik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRkX3RtcGwpOwogCWlmIChlcnIpCi0JCWt0aHJlYWRfc3RvcChzdGF0ZS50YXNrKTsKKwkJY3J5cHRkX2ZpbmlfcXVldWUoJnF1ZXVlKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdGRfZXhpdCh2b2lkKQogewotCWNyeXB0ZF9zdG9wX3RocmVhZCgmc3RhdGUpOworCWNyeXB0ZF9maW5pX3F1ZXVlKCZxdWV1ZSk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0ZF90bXBsKTsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0b193cS5jIGIvY3J5cHRvL2NyeXB0b193cS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkY2Y2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vY3J5cHRvX3dxLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIFdvcmtxdWV1ZSBmb3IgY3J5cHRvIHN1YnN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3JwLgorICogICBBdXRob3I6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0b193cS5oPgorCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2NyeXB0b193cTsKK0VYUE9SVF9TWU1CT0xfR1BMKGtjcnlwdG9fd3EpOworCitzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fd3FfaW5pdCh2b2lkKQoreworCWtjcnlwdG9fd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJjcnlwdG8iKTsKKwlpZiAodW5saWtlbHkoIWtjcnlwdG9fd3EpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNyeXB0b193cV9leGl0KHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUoa2NyeXB0b193cSk7Cit9CisKK21vZHVsZV9pbml0KGNyeXB0b193cV9pbml0KTsKK21vZHVsZV9leGl0KGNyeXB0b193cV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXb3JrcXVldWUgZm9yIGNyeXB0byBzdWJzeXN0ZW0iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9nZjEyOG11bC5jIGIvY3J5cHRvL2dmMTI4bXVsLmMKaW5kZXggZWNiZWFhMS4uYTkwZDI2MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2dmMTI4bXVsLmMKKysrIGIvY3J5cHRvL2dmMTI4bXVsLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIFJpayBTbmVsIDxyc25lbEBjdWJlLmR5bmRucy5vcmc+CiAgKgogICogQmFzZWQgb24gRHIgQnJpYW4gR2xhZG1hbidzIChHUEwnZCkgd29yayBwdWJsaXNoZWQgYXQKLSAqIGh0dHA6Ly9mcC5nbGFkbWFuLnBsdXMuY29tL2NyeXB0b2dyYXBoeV90ZWNobm9sb2d5L2luZGV4Lmh0bQorICogaHR0cDovL2dsYWRtYW4ucGx1c2hvc3QuY28udWsvb2xkc2l0ZS9jcnlwdG9ncmFwaHlfdGVjaG5vbG9neS9pbmRleC5waHAKICAqIFNlZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBiZWxvdy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApkaWZmIC0tZ2l0IGEvY3J5cHRvL2ludGVybmFsLmggYi9jcnlwdG8vaW50ZXJuYWwuaAppbmRleCAzYzE5YTI3Li5mYzc2ZTFmIDEwMDY0NAotLS0gYS9jcnlwdG8vaW50ZXJuYWwuaAorKysgYi9jcnlwdG8vaW50ZXJuYWwuaApAQCAtMTA5LDggKzEwOSwxMCBAQAogdm9pZCBjcnlwdG9fc2hvb3RfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpOwogc3RydWN0IGNyeXB0b190Zm0gKl9fY3J5cHRvX2FsbG9jX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLCB1MzIgdHlwZSwKIAkJCQkgICAgICB1MzIgbWFzayk7Ci1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2NyZWF0ZV90Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpOwordm9pZCAqY3J5cHRvX2NyZWF0ZV90Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJCWNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpOwordm9pZCAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsIHUzMiB0eXBlLCB1MzIgbWFzayk7CiAKIGludCBjcnlwdG9fcmVnaXN0ZXJfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwKIAkJCSAgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vbHJ3LmMgYi9jcnlwdG8vbHJ3LmMKaW5kZXggOGVmNjY0ZS4uMzU4ZjgwYiAxMDA2NDQKLS0tIGEvY3J5cHRvL2xydy5jCisrKyBiL2NyeXB0by9scncuYwpAQCAtNDUsNyArNDUsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNldGJpdDEyOF9iYmUodm9pZCAqYiwgaW50IGJpdCkKIHsKLQlfX3NldF9iaXQoYml0IF4gMHg3OCwgYik7CisJX19zZXRfYml0KGJpdCBeICgweDgwIC0KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSBCSVRTX1BFUl9MT05HCisjZWxzZQorCQkJIEJJVFNfUEVSX0JZVEUKKyNlbmRpZgorCQkJKSwgYik7CiB9CiAKIHN0YXRpYyBpbnQgc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICpwYXJlbnQsIGNvbnN0IHU4ICprZXksCmRpZmYgLS1naXQgYS9jcnlwdG8vcGNvbXByZXNzLmMgYi9jcnlwdG8vcGNvbXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5YTRhZgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9wY29tcHJlc3MuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogUGFydGlhbCAoZGUpY29tcHJlc3Npb24gb3BlcmF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCisgKiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGNyeXB0by9jb21wcmVzcy5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworCitzdGF0aWMgaW50IGNyeXB0b19wY29tcF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fcGNvbXBfZXh0c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJCQkgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKK3sKKwlyZXR1cm4gYWxnLT5jcmFfY3R4c2l6ZTsKK30KKworc3RhdGljIGludCBjcnlwdG9fcGNvbXBfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCQkgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX3Bjb21wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQorCV9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKK3N0YXRpYyB2b2lkIGNyeXB0b19wY29tcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlzZXFfcHJpbnRmKG0sICJ0eXBlICAgICAgICAgOiBwY29tcFxuIik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3Bjb21wX3R5cGUgPSB7CisJLmV4dHNpemUJPSBjcnlwdG9fcGNvbXBfZXh0c2l6ZSwKKwkuaW5pdAkJPSBjcnlwdG9fcGNvbXBfaW5pdCwKKwkuaW5pdF90Zm0JPSBjcnlwdG9fcGNvbXBfaW5pdF90Zm0sCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwkuc2hvdwkJPSBjcnlwdG9fcGNvbXBfc2hvdywKKyNlbmRpZgorCS5tYXNrY2xlYXIJPSB+Q1JZUFRPX0FMR19UWVBFX01BU0ssCisJLm1hc2tzZXQJPSBDUllQVE9fQUxHX1RZUEVfTUFTSywKKwkudHlwZQkJPSBDUllQVE9fQUxHX1RZUEVfUENPTVBSRVNTLAorCS50Zm1zaXplCT0gb2Zmc2V0b2Yoc3RydWN0IGNyeXB0b19wY29tcCwgYmFzZSksCit9OworCitzdHJ1Y3QgY3J5cHRvX3Bjb21wICpjcnlwdG9fYWxsb2NfcGNvbXAoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAorCQkJCQl1MzIgbWFzaykKK3sKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19wY29tcF90eXBlLCB0eXBlLCBtYXNrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19wY29tcCk7CisKK2ludCBjcnlwdG9fcmVnaXN0ZXJfcGNvbXAoc3RydWN0IHBjb21wX2FsZyAqYWxnKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICpiYXNlID0gJmFsZy0+YmFzZTsKKworCWJhc2UtPmNyYV90eXBlID0gJmNyeXB0b19wY29tcF90eXBlOworCWJhc2UtPmNyYV9mbGFncyAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7CisJYmFzZS0+Y3JhX2ZsYWdzIHw9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1M7CisKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZyhiYXNlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19yZWdpc3Rlcl9wY29tcCk7CisKK2ludCBjcnlwdG9fdW5yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpCit7CisJcmV0dXJuIGNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnLT5iYXNlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQYXJ0aWFsIChkZSljb21wcmVzc2lvbiB0eXBlIik7CitNT0RVTEVfQVVUSE9SKCJTb255IENvcnBvcmF0aW9uIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCmluZGV4IGNhYTM1NDIuLjYzNDlkODMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCkBAIC0yLDcgKzIsNyBAQAogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogU0hBLTI1NiwgYXMgc3BlY2lmaWVkIGluCi0gKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9zaHMvc2hhMjU2LTM4NC01MTIucGRmCisgKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1RNL2NhdnAvZG9jdW1lbnRzL3Nocy9zaGEyNTYtMzg0LTUxMi5wZGYKICAqCiAgKiBTSEEtMjU2IGNvZGUgYnkgSmVhbi1MdWMgQ29va2UgPGpsY29va2VAY2VydGFpbmtleS5jb20+LgogICoKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGFzaC5jIGIvY3J5cHRvL3NoYXNoLmMKaW5kZXggZDVhMmI2MS4uN2E2NTk3MyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYXNoLmMKKysrIGIvY3J5cHRvL3NoYXNoLmMKQEAgLTE4LDE1ICsxOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19zaGFzaF90eXBlOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fc2hhc2ggKl9fY3J5cHRvX3NoYXNoX2Nhc3Qoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHRmbSwgc3RydWN0IGNyeXB0b19zaGFzaCwgYmFzZSk7Ci19Ci0KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19zaGFzaF90eXBlOworCiBzdGF0aWMgaW50IHNoYXNoX3NldGtleV91bmFsaWduZWQoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJCSAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKQEAgLTI4Miw4ICsyNzcsNyBAQAogCWlmICghY3J5cHRvX21vZF9nZXQoY2FsZykpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc2hhc2ggPSBfX2NyeXB0b19zaGFzaF9jYXN0KGNyeXB0b19jcmVhdGVfdGZtKAotCQljYWxnLCAmY3J5cHRvX3NoYXNoX3R5cGUpKTsKKwlzaGFzaCA9IGNyeXB0b19jcmVhdGVfdGZtKGNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSk7CiAJaWYgKElTX0VSUihzaGFzaCkpIHsKIAkJY3J5cHRvX21vZF9wdXQoY2FsZyk7CiAJCXJldHVybiBQVFJfRVJSKHNoYXNoKTsKQEAgLTM5MSw4ICszODUsNyBAQAogCWlmICghY3J5cHRvX21vZF9nZXQoY2FsZykpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc2hhc2ggPSBfX2NyeXB0b19zaGFzaF9jYXN0KGNyeXB0b19jcmVhdGVfdGZtKAotCQljYWxnLCAmY3J5cHRvX3NoYXNoX3R5cGUpKTsKKwlzaGFzaCA9IGNyeXB0b19jcmVhdGVfdGZtKGNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSk7CiAJaWYgKElTX0VSUihzaGFzaCkpIHsKIAkJY3J5cHRvX21vZF9wdXQoY2FsZyk7CiAJCXJldHVybiBQVFJfRVJSKHNoYXNoKTsKQEAgLTQ0Miw4ICs0MzUsNiBAQAogc3RhdGljIGludCBjcnlwdG9fc2hhc2hfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKIAkJCQkgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKIHsKLQlpZiAoZnJvbnRlbmQtPnR5cGUgIT0gQ1JZUFRPX0FMR19UWVBFX1NIQVNIKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgyLDggKzQ3Myw3IEBACiBzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjcnlwdG9fYWxsb2Nfc2hhc2goY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAogCQkJCQl1MzIgbWFzaykKIHsKLQlyZXR1cm4gX19jcnlwdG9fc2hhc2hfY2FzdCgKLQkJY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19zaGFzaF90eXBlLCB0eXBlLCBtYXNrKSk7CisJcmV0dXJuIGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsICZjcnlwdG9fc2hhc2hfdHlwZSwgdHlwZSwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2Nfc2hhc2gpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vdGNyeXB0LmMgYi9jcnlwdG8vdGNyeXB0LmMKaW5kZXggMjhhNDVhMS4uYzNjOTEyNCAxMDA2NDQKLS0tIGEvY3J5cHRvL3RjcnlwdC5jCisrKyBiL2NyeXB0by90Y3J5cHQuYwpAQCAtNTMsNyArNTMsNyBAQAogCSJjYXN0NiIsICJhcmM0IiwgIm1pY2hhZWxfbWljIiwgImRlZmxhdGUiLCAiY3JjMzJjIiwgInRlYSIsICJ4dGVhIiwKIAkia2hhemFkIiwgIndwNTEyIiwgIndwMzg0IiwgIndwMjU2IiwgInRuZXByZXMiLCAieGV0YSIsICAiZmNyeXB0IiwKIAkiY2FtZWxsaWEiLCAic2VlZCIsICJzYWxzYTIwIiwgInJtZDEyOCIsICJybWQxNjAiLCAicm1kMjU2IiwgInJtZDMyMCIsCi0JImx6byIsICJjdHMiLCBOVUxMCisJImx6byIsICJjdHMiLCAiemxpYiIsIE5VTEwKIH07CiAKIHN0YXRpYyBpbnQgdGVzdF9jaXBoZXJfamlmZmllcyhzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGludCBlbmMsCkBAIC02NjEsNiArNjYxLDEwIEBACiAJCXRjcnlwdF90ZXN0KCJlY2Ioc2VlZCkiKTsKIAkJYnJlYWs7CiAKKwljYXNlIDQ0OgorCQl0Y3J5cHRfdGVzdCgiemxpYiIpOworCQlicmVhazsKKwogCWNhc2UgMTAwOgogCQl0Y3J5cHRfdGVzdCgiaG1hYyhtZDUpIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuYyBiL2NyeXB0by90ZXN0bWdyLmMKaW5kZXggYTc1ZjExZi4uYjUwYzNjNiAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuYworKysgYi9jcnlwdG8vdGVzdG1nci5jCkBAIC03Miw2ICs3MiwxMyBAQAogCX0gY29tcCwgZGVjb21wOwogfTsKIAorc3RydWN0IHBjb21wX3Rlc3Rfc3VpdGUgeworCXN0cnVjdCB7CisJCXN0cnVjdCBwY29tcF90ZXN0dmVjICp2ZWNzOworCQl1bnNpZ25lZCBpbnQgY291bnQ7CisJfSBjb21wLCBkZWNvbXA7Cit9OworCiBzdHJ1Y3QgaGFzaF90ZXN0X3N1aXRlIHsKIAlzdHJ1Y3QgaGFzaF90ZXN0dmVjICp2ZWNzOwogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTg2LDYgKzkzLDcgQEAKIAkJc3RydWN0IGFlYWRfdGVzdF9zdWl0ZSBhZWFkOwogCQlzdHJ1Y3QgY2lwaGVyX3Rlc3Rfc3VpdGUgY2lwaGVyOwogCQlzdHJ1Y3QgY29tcF90ZXN0X3N1aXRlIGNvbXA7CisJCXN0cnVjdCBwY29tcF90ZXN0X3N1aXRlIHBjb21wOwogCQlzdHJ1Y3QgaGFzaF90ZXN0X3N1aXRlIGhhc2g7CiAJfSBzdWl0ZTsKIH07CkBAIC04OTgsNiArOTA2LDE1OSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdGVzdF9wY29tcChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCSAgICAgIHN0cnVjdCBwY29tcF90ZXN0dmVjICpjdGVtcGxhdGUsCisJCSAgICAgIHN0cnVjdCBwY29tcF90ZXN0dmVjICpkdGVtcGxhdGUsIGludCBjdGNvdW50LAorCQkgICAgICBpbnQgZHRjb3VudCkKK3sKKwljb25zdCBjaGFyICphbGdvID0gY3J5cHRvX3RmbV9hbGdfZHJpdmVyX25hbWUoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyIHJlc3VsdFtDT01QX0JVRl9TSVpFXTsKKwlpbnQgZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3Rjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBjb21wX3JlcXVlc3QgcmVxOworCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX3NldHVwKHRmbSwgY3RlbXBsYXRlW2ldLnBhcmFtcywKKwkJCQkJICAgICAgY3RlbXBsYXRlW2ldLnBhcmFtc2l6ZSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiBzZXR1cCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc19pbml0KHRmbSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiBpbml0IGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKKworCQlyZXEubmV4dF9pbiA9IGN0ZW1wbGF0ZVtpXS5pbnB1dDsKKwkJcmVxLmF2YWlsX2luID0gY3RlbXBsYXRlW2ldLmlubGVuIC8gMjsKKwkJcmVxLm5leHRfb3V0ID0gcmVzdWx0OworCQlyZXEuYXZhaWxfb3V0ID0gY3RlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBBZGQgcmVtYWluaW5nIGlucHV0IGRhdGEgKi8KKwkJcmVxLmF2YWlsX2luICs9IChjdGVtcGxhdGVbaV0uaW5sZW4gKyAxKSAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBQcm92aWRlIHJlbWFpbmluZyBvdXRwdXQgc3BhY2UgKi8KKwkJcmVxLmF2YWlsX291dCArPSBDT01QX0JVRl9TSVpFIC0gY3RlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfZmluYWwodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIGZpbmFsIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWlmIChDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCAhPSBjdGVtcGxhdGVbaV0ub3V0bGVuKSB7CisJCQlwcl9lcnIoImFsZzogY29tcDogQ29tcHJlc3Npb24gdGVzdCAlZCBmYWlsZWQgZm9yICVzOiAiCisJCQkgICAgICAgIm91dHB1dCBsZW4gPSAlZCAoZXhwZWN0ZWQgJWQpXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCwKKwkJCSAgICAgICBjdGVtcGxhdGVbaV0ub3V0bGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKG1lbWNtcChyZXN1bHQsIGN0ZW1wbGF0ZVtpXS5vdXRwdXQsIGN0ZW1wbGF0ZVtpXS5vdXRsZW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IENvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAiCisJCQkgICAgICAgIiVzXG4iLCBpICsgMSwgYWxnbyk7CisJCQloZXhkdW1wKHJlc3VsdCwgY3RlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBkdGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGNvbXBfcmVxdWVzdCByZXE7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc19zZXR1cCh0Zm0sIGR0ZW1wbGF0ZVtpXS5wYXJhbXMsCisJCQkJCQlkdGVtcGxhdGVbaV0ucGFyYW1zaXplKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gc2V0dXAgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX2luaXQodGZtKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gaW5pdCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisKKwkJcmVxLm5leHRfaW4gPSBkdGVtcGxhdGVbaV0uaW5wdXQ7CisJCXJlcS5hdmFpbF9pbiA9IGR0ZW1wbGF0ZVtpXS5pbmxlbiAvIDI7CisJCXJlcS5uZXh0X291dCA9IHJlc3VsdDsKKwkJcmVxLmF2YWlsX291dCA9IGR0ZW1wbGF0ZVtpXS5vdXRsZW4gLyAyOworCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIEFkZCByZW1haW5pbmcgaW5wdXQgZGF0YSAqLworCQlyZXEuYXZhaWxfaW4gKz0gKGR0ZW1wbGF0ZVtpXS5pbmxlbiArIDEpIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX3VwZGF0ZSh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiB1cGRhdGUgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBQcm92aWRlIHJlbWFpbmluZyBvdXRwdXQgc3BhY2UgKi8KKwkJcmVxLmF2YWlsX291dCArPSBDT01QX0JVRl9TSVpFIC0gZHRlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc19maW5hbCh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiBmaW5hbCBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWlmIChDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCAhPSBkdGVtcGxhdGVbaV0ub3V0bGVuKSB7CisJCQlwcl9lcnIoImFsZzogY29tcDogRGVjb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgIgorCQkJICAgICAgICIlczogb3V0cHV0IGxlbiA9ICVkIChleHBlY3RlZCAlZClcbiIsIGkgKyAxLAorCQkJICAgICAgIGFsZ28sIENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0LAorCQkJICAgICAgIGR0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobWVtY21wKHJlc3VsdCwgZHRlbXBsYXRlW2ldLm91dHB1dCwgZHRlbXBsYXRlW2ldLm91dGxlbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogRGVjb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgIgorCQkJICAgICAgICIlc1xuIiwgaSArIDEsIGFsZ28pOworCQkJaGV4ZHVtcChyZXN1bHQsIGR0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhbGdfdGVzdF9hZWFkKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpkcml2ZXIsCiAJCQkgdTMyIHR5cGUsIHUzMiBtYXNrKQogewpAQCAtMTAwNyw2ICsxMTY4LDI4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBhbGdfdGVzdF9wY29tcChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZHJpdmVyLAorCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJc3RydWN0IGNyeXB0b19wY29tcCAqdGZtOworCWludCBlcnI7CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfcGNvbXAoZHJpdmVyLCB0eXBlLCBtYXNrKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJcHJfZXJyKCJhbGc6IHBjb21wOiBGYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsCisJCSAgICAgICBkcml2ZXIsIFBUUl9FUlIodGZtKSk7CisJCXJldHVybiBQVFJfRVJSKHRmbSk7CisJfQorCisJZXJyID0gdGVzdF9wY29tcCh0Zm0sIGRlc2MtPnN1aXRlLnBjb21wLmNvbXAudmVjcywKKwkJCSBkZXNjLT5zdWl0ZS5wY29tcC5kZWNvbXAudmVjcywKKwkJCSBkZXNjLT5zdWl0ZS5wY29tcC5jb21wLmNvdW50LAorCQkJIGRlc2MtPnN1aXRlLnBjb21wLmRlY29tcC5jb3VudCk7CisKKwljcnlwdG9fZnJlZV9wY29tcCh0Zm0pOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYWxnX3Rlc3RfaGFzaChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZHJpdmVyLAogCQkJIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKQEAgLTE4MzUsNiArMjAxOCwyMSBAQAogCQkJCX0KIAkJCX0KIAkJfQorCX0sIHsKKwkJLmFsZyA9ICJ6bGliIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9wY29tcCwKKwkJLnN1aXRlID0geworCQkJLnBjb21wID0geworCQkJCS5jb21wID0geworCQkJCQkudmVjcyA9IHpsaWJfY29tcF90dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gWkxJQl9DT01QX1RFU1RfVkVDVE9SUworCQkJCX0sCisJCQkJLmRlY29tcCA9IHsKKwkJCQkJLnZlY3MgPSB6bGliX2RlY29tcF90dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gWkxJQl9ERUNPTVBfVEVTVF9WRUNUT1JTCisJCQkJfQorCQkJfQorCQl9CiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuaCBiL2NyeXB0by90ZXN0bWdyLmgKaW5kZXggMTMyOTUzZS4uNTI2ZjAwYSAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuaAorKysgYi9jcnlwdG8vdGVzdG1nci5oCkBAIC0xNSw2ICsxNSwxMSBAQAogI2lmbmRlZiBfQ1JZUFRPX1RFU1RNR1JfSAogI2RlZmluZSBfQ1JZUFRPX1RFU1RNR1JfSAogCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KKworI2luY2x1ZGUgPGNyeXB0by9jb21wcmVzcy5oPgorCiAjZGVmaW5lIE1BWF9ESUdFU1RfU0laRQkJNjQKICNkZWZpbmUgTUFYX1RBUAkJCTgKIApAQCAtODM0NywxMCArODM1MiwxOSBAQAogCWNoYXIgb3V0cHV0W0NPTVBfQlVGX1NJWkVdOwogfTsKIAorc3RydWN0IHBjb21wX3Rlc3R2ZWMgeworCXZvaWQgKnBhcmFtczsKKwl1bnNpZ25lZCBpbnQgcGFyYW1zaXplOworCWludCBpbmxlbiwgb3V0bGVuOworCWNoYXIgaW5wdXRbQ09NUF9CVUZfU0laRV07CisJY2hhciBvdXRwdXRbQ09NUF9CVUZfU0laRV07Cit9OworCiAvKgogICogRGVmbGF0ZSB0ZXN0IHZlY3RvcnMgKG51bGwtdGVybWluYXRlZCBzdHJpbmdzKS4KICAqIFBhcmFtczogd2luYml0cz0tMTEsIFpfREVGQVVMVF9DT01QUkVTU0lPTiwgTUFYX01FTV9MRVZFTC4KICAqLworCiAjZGVmaW5lIERFRkxBVEVfQ09NUF9URVNUX1ZFQ1RPUlMgMgogI2RlZmluZSBERUZMQVRFX0RFQ09NUF9URVNUX1ZFQ1RPUlMgMgogCkBAIC04NDI2LDYgKzg0NDAsMTM5IEBACiAJfSwKIH07CiAKKyNkZWZpbmUgWkxJQl9DT01QX1RFU1RfVkVDVE9SUyAyCisjZGVmaW5lIFpMSUJfREVDT01QX1RFU1RfVkVDVE9SUyAyCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXN0cnVjdCBubGF0dHIgbmxhOworCWludCB2YWw7Cit9IGRlZmxhdGVfY29tcF9wYXJhbXNbXSA9IHsKKwl7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9MRVZFTCwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAorCX0sIHsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX01FVEhPRCwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZMQVRFRCwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9XSU5ET1dCSVRTLAorCQl9LAorCQkudmFsCQkJPSAtMTEsCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfTUVNTEVWRUwsCisJCX0sCisJCS52YWwJCQk9IE1BWF9NRU1fTEVWRUwsCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfU1RSQVRFR1ksCisJCX0sCisJCS52YWwJCQk9IFpfREVGQVVMVF9TVFJBVEVHWSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdHJ1Y3QgbmxhdHRyIG5sYTsKKwlpbnQgdmFsOworfSBkZWZsYXRlX2RlY29tcF9wYXJhbXNbXSA9IHsKKwl7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfREVDT01QX1dJTkRPV0JJVFMsCisJCX0sCisJCS52YWwJCQk9IC0xMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBjb21wX3Rlc3R2ZWMgemxpYl9jb21wX3R2X3RlbXBsYXRlW10gPSB7CisJeworCQkucGFyYW1zID0gJmRlZmxhdGVfY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9jb21wX3BhcmFtcyksCisJCS5pbmxlbgk9IDcwLAorCQkub3V0bGVuCT0gMzgsCisJCS5pbnB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJCS5vdXRwdXQJPSAiXHhmM1x4Y2FceGNmXHhjY1x4NTNceDI4XHgyZFx4NTYiCisJCQkgICJceGM4XHhjYlx4MmZceDU3XHg0OFx4Y2NceDRiXHg1MSIKKwkJCSAgIlx4MjhceGNlXHg0OFx4MmNceDRhXHg1NVx4MjhceGM5IgorCQkJICAiXHg0OFx4NTVceDI4XHhjZVx4NGZceDJiXHgyOVx4MDciCisJCQkgICJceDcxXHhiY1x4MDhceDJiXHgwMVx4MDAiLAorCX0sIHsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2NvbXBfcGFyYW1zLAorCQkucGFyYW1zaXplID0gc2l6ZW9mKGRlZmxhdGVfY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSAxOTEsCisJCS5vdXRsZW4JPSAxMjIsCisJCS5pbnB1dAk9ICJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBhIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgREVGTEFURSIKKwkJCSJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKKwkJCSJ0aGUgREVGTEFURSBhbGdvcml0aG0gdG8gdGhlIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wuIiwKKwkJLm91dHB1dAk9ICJceDVkXHg4ZFx4MzFceDBlXHhjMlx4MzBceDEwXHgwNCIKKwkJCSAgIlx4YmZceGIyXHgyZlx4YzhceDFmXHgxMFx4MDRceDA5IgorCQkJICAiXHg4OVx4YzJceDg1XHgzZlx4NzBceGIxXHgyZlx4ZjgiCisJCQkgICJceDI0XHhkYlx4NjdceGQ5XHg0N1x4YzFceGVmXHg0OSIKKwkJCSAgIlx4NjhceDEyXHg1MVx4YWVceDc2XHg2N1x4ZDZceDI3IgorCQkJICAiXHgxOVx4ODhceDFhXHhkZVx4ODVceGFiXHgyMVx4ZjIiCisJCQkgICJceDA4XHg1ZFx4MTZceDFlXHgyMFx4MDRceDJkXHhhZCIKKwkJCSAgIlx4ZjNceDE4XHhhMlx4MTVceDg1XHgyZFx4NjlceGM0IgorCQkJICAiXHg0Mlx4ODNceDIzXHhiNlx4NmNceDg5XHg3MVx4OWIiCisJCQkgICJceGVmXHhjZlx4OGJceDlmXHhjZlx4MzNceGNhXHgyZiIKKwkJCSAgIlx4ZWRceDYyXHhhOVx4NGNceDgwXHhmZlx4MTNceGFmIgorCQkJICAiXHg1Mlx4MzdceGVkXHgwZVx4NTJceDZiXHg1OVx4MDIiCisJCQkgICJceGQ5XHg0ZVx4ZThceDdhXHg3Nlx4MWRceDAyXHg5OCIKKwkJCSAgIlx4ZmVceDhhXHg4N1x4ODNceGEzXHg0Zlx4NTZceDhhIgorCQkJICAiXHhiOFx4OWVceDhlXHg1Y1x4NTdceGQzXHhhMFx4NzkiCisJCQkgICJceGZhXHgwMiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNvbXBfdGVzdHZlYyB6bGliX2RlY29tcF90dl90ZW1wbGF0ZVtdID0geworCXsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2RlY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9kZWNvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gMTIyLAorCQkub3V0bGVuCT0gMTkxLAorCQkuaW5wdXQJPSAiXHg1ZFx4OGRceDMxXHgwZVx4YzJceDMwXHgxMFx4MDQiCisJCQkgICJceGJmXHhiMlx4MmZceGM4XHgxZlx4MTBceDA0XHgwOSIKKwkJCSAgIlx4ODlceGMyXHg4NVx4M2ZceDcwXHhiMVx4MmZceGY4IgorCQkJICAiXHgyNFx4ZGJceDY3XHhkOVx4NDdceGMxXHhlZlx4NDkiCisJCQkgICJceDY4XHgxMlx4NTFceGFlXHg3Nlx4NjdceGQ2XHgyNyIKKwkJCSAgIlx4MTlceDg4XHgxYVx4ZGVceDg1XHhhYlx4MjFceGYyIgorCQkJICAiXHgwOFx4NWRceDE2XHgxZVx4MjBceDA0XHgyZFx4YWQiCisJCQkgICJceGYzXHgxOFx4YTJceDE1XHg4NVx4MmRceDY5XHhjNCIKKwkJCSAgIlx4NDJceDgzXHgyM1x4YjZceDZjXHg4OVx4NzFceDliIgorCQkJICAiXHhlZlx4Y2ZceDhiXHg5Zlx4Y2ZceDMzXHhjYVx4MmYiCisJCQkgICJceGVkXHg2Mlx4YTlceDRjXHg4MFx4ZmZceDEzXHhhZiIKKwkJCSAgIlx4NTJceDM3XHhlZFx4MGVceDUyXHg2Ylx4NTlceDAyIgorCQkJICAiXHhkOVx4NGVceGU4XHg3YVx4NzZceDFkXHgwMlx4OTgiCisJCQkgICJceGZlXHg4YVx4ODdceDgzXHhhM1x4NGZceDU2XHg4YSIKKwkJCSAgIlx4YjhceDllXHg4ZVx4NWNceDU3XHhkM1x4YTBceDc5IgorCQkJICAiXHhmYVx4MDIiLAorCQkub3V0cHV0CT0gIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGEgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIHRoZSBERUZMQVRFIgorCQkJImNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFRoaXMgZG9jdW1lbnQgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gb2YgIgorCQkJInRoZSBERUZMQVRFIGFsZ29yaXRobSB0byB0aGUgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbC4iLAorCX0sIHsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2RlY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9kZWNvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gMzgsCisJCS5vdXRsZW4JPSA3MCwKKwkJLmlucHV0CT0gIlx4ZjNceGNhXHhjZlx4Y2NceDUzXHgyOFx4MmRceDU2IgorCQkJICAiXHhjOFx4Y2JceDJmXHg1N1x4NDhceGNjXHg0Ylx4NTEiCisJCQkgICJceDI4XHhjZVx4NDhceDJjXHg0YVx4NTVceDI4XHhjOSIKKwkJCSAgIlx4NDhceDU1XHgyOFx4Y2VceDRmXHgyYlx4MjlceDA3IgorCQkJICAiXHg3MVx4YmNceDA4XHgyYlx4MDFceDAwIiwKKwkJLm91dHB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJfSwKK307CisKIC8qCiAgKiBMWk8gdGVzdCB2ZWN0b3JzIChudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncykuCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by96bGliLmMgYi9jcnlwdG8vemxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjA5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vemxpYi5jCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogWmxpYiBhbGdvcml0aG0KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogQmFzZWQgb24gZGVmbGF0ZS5jLCB3aGljaCBpcworICogQ29weXJpZ2h0IChjKSAyMDAzIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRklYTUU6IGRlZmxhdGUgdHJhbnNmb3JtcyB3aWxsIHJlcXVpcmUgdXAgdG8gYSB0b3RhbCBvZiBhYm91dCA0MzZrIG9mIGtlcm5lbAorICogbWVtb3J5IG9uIGkzODYgKDM5MGsgZm9yIGNvbXByZXNzaW9uLCB0aGUgcmVzdCBmb3IgZGVjb21wcmVzc2lvbiksIGFzIHRoZQorICogY3VycmVudCB6bGliIGtlcm5lbCBjb2RlIHVzZXMgYSB3b3JzdCBjYXNlIHByZS1hbGxvY2F0aW9uIHN5c3RlbSBieSBkZWZhdWx0LgorICogVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBzbyB0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGlzIHByb3Blcmx5CisgKiByZWxhdGVkIHRvIHRoZSB3aW5iaXRzIGFuZCBtZW1sZXZlbCBwYXJhbWV0ZXJzLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIiVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorCisKK3N0cnVjdCB6bGliX2N0eCB7CisJc3RydWN0IHpfc3RyZWFtX3MgY29tcF9zdHJlYW07CisJc3RydWN0IHpfc3RyZWFtX3MgZGVjb21wX3N0cmVhbTsKKwlpbnQgZGVjb21wX3dpbmRvd0JpdHM7Cit9OworCisKK3N0YXRpYyB2b2lkIHpsaWJfY29tcF9leGl0KHN0cnVjdCB6bGliX2N0eCAqY3R4KQoreworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKKworCWlmIChzdHJlYW0tPndvcmtzcGFjZSkgeworCQl6bGliX2RlZmxhdGVFbmQoc3RyZWFtKTsKKwkJdmZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCB6bGliX2RlY29tcF9leGl0KHN0cnVjdCB6bGliX2N0eCAqY3R4KQoreworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5kZWNvbXBfc3RyZWFtOworCisJaWYgKHN0cmVhbS0+d29ya3NwYWNlKSB7CisJCXpsaWJfaW5mbGF0ZUVuZChzdHJlYW0pOworCQlrZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgemxpYl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHpsaWJfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCXpsaWJfY29tcF9leGl0KGN0eCk7CisJemxpYl9kZWNvbXBfZXhpdChjdHgpOworfQorCisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CisJc3RydWN0IG5sYXR0ciAqdGJbWkxJQl9DT01QX01BWCArIDFdOworCXNpemVfdCB3b3Jrc3BhY2VzaXplOworCWludCByZXQ7CisKKwlyZXQgPSBubGFfcGFyc2UodGIsIFpMSUJfQ09NUF9NQVgsIHBhcmFtcywgbGVuLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJemxpYl9jb21wX2V4aXQoY3R4KTsKKworCXdvcmtzcGFjZXNpemUgPSB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpOworCXN0cmVhbS0+d29ya3NwYWNlID0gdm1hbGxvYyh3b3Jrc3BhY2VzaXplKTsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChzdHJlYW0tPndvcmtzcGFjZSwgMCwgd29ya3NwYWNlc2l6ZSk7CisJcmV0ID0gemxpYl9kZWZsYXRlSW5pdDIoc3RyZWFtLAorCQkJCXRiW1pMSUJfQ09NUF9MRVZFTF0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTEVWRUxdKQorCQkJCQk6IFpfREVGQVVMVF9DT01QUkVTU0lPTiwKKwkJCQl0YltaTElCX0NPTVBfTUVUSE9EXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9NRVRIT0RdKQorCQkJCQk6IFpfREVGTEFURUQsCisJCQkJdGJbWkxJQl9DT01QX1dJTkRPV0JJVFNdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX1dJTkRPV0JJVFNdKQorCQkJCQk6IE1BWF9XQklUUywKKwkJCQl0YltaTElCX0NPTVBfTUVNTEVWRUxdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX01FTUxFVkVMXSkKKwkJCQkJOiBERUZfTUVNX0xFVkVMLAorCQkJCXRiW1pMSUJfQ09NUF9TVFJBVEVHWV0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfU1RSQVRFR1ldKQorCQkJCQk6IFpfREVGQVVMVF9TVFJBVEVHWSk7CisJaWYgKHJldCAhPSBaX09LKSB7CisJCXZmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKKwkJc3RyZWFtLT53b3Jrc3BhY2UgPSBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcmV0ID0gemxpYl9kZWZsYXRlUmVzZXQoc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5jb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlyZXQgPSB6bGliX2RlZmxhdGUoc3RyZWFtLCBaX05PX0ZMVVNIKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgWl9PSzoKKwkJYnJlYWs7CisKKwljYXNlIFpfQlVGX0VSUk9SOgorCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGNvdWxkIG5vdCBtYWtlIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkgICAgICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCXJldCA9IHpsaWJfZGVmbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkJIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHpsaWJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5kZWNvbXBfc3RyZWFtOworCXN0cnVjdCBubGF0dHIgKnRiW1pMSUJfREVDT01QX01BWCArIDFdOworCWludCByZXQgPSAwOworCisJcmV0ID0gbmxhX3BhcnNlKHRiLCBaTElCX0RFQ09NUF9NQVgsIHBhcmFtcywgbGVuLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJemxpYl9kZWNvbXBfZXhpdChjdHgpOworCisJY3R4LT5kZWNvbXBfd2luZG93Qml0cyA9IHRiW1pMSUJfREVDT01QX1dJTkRPV0JJVFNdCisJCQkJID8gbmxhX2dldF91MzIodGJbWkxJQl9ERUNPTVBfV0lORE9XQklUU10pCisJCQkJIDogREVGX1dCSVRTOworCisJc3RyZWFtLT53b3Jrc3BhY2UgPSBremFsbG9jKHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCksIEdGUF9LRVJORUwpOworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gemxpYl9pbmZsYXRlSW5pdDIoc3RyZWFtLCBjdHgtPmRlY29tcF93aW5kb3dCaXRzKTsKKwlpZiAocmV0ICE9IFpfT0spIHsKKwkJa2ZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOworCisJcmV0ID0gemxpYl9pbmZsYXRlUmVzZXQoc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9kZWNvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBaX09LOgorCWNhc2UgWl9TVFJFQU1fRU5EOgorCQlicmVhazsKKworCWNhc2UgWl9CVUZfRVJST1I6CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgY291bGQgbm90IG1ha2UgcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCSBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlpZiAoZGN0eC0+ZGVjb21wX3dpbmRvd0JpdHMgPCAwKSB7CisJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJCS8qCisJCSAqIFdvcmsgYXJvdW5kIGEgYnVnIGluIHpsaWIsIHdoaWNoIHNvbWV0aW1lcyB3YW50cyB0byB0YXN0ZSBhbgorCQkgKiBleHRyYSBieXRlIHdoZW4gYmVpbmcgdXNlZCBpbiB0aGUgKHVuZG9jdW1lbnRlZCkgcmF3IGRlZmxhdGUKKwkJICogbW9kZS4gKEZyb20gVVNBR0kpLgorCQkgKi8KKwkJaWYgKHJldCA9PSBaX09LICYmICFzdHJlYW0tPmF2YWlsX2luICYmIHN0cmVhbS0+YXZhaWxfb3V0KSB7CisJCQljb25zdCB2b2lkICpzYXZlZF9uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCQkJdTggemVyb3N0dWZmID0gMDsKKworCQkJc3RyZWFtLT5uZXh0X2luID0gJnplcm9zdHVmZjsKKwkJCXN0cmVhbS0+YXZhaWxfaW4gPSAxOworCQkJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCQkJc3RyZWFtLT5uZXh0X2luID0gc2F2ZWRfbmV4dF9pbjsKKwkJCXN0cmVhbS0+YXZhaWxfaW4gPSAwOworCQl9CisJfSBlbHNlCisJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlwcl9kZWJ1ZygiemxpYl9pbmZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBwY29tcF9hbGcgemxpYl9hbGcgPSB7CisJLmNvbXByZXNzX3NldHVwCQk9IHpsaWJfY29tcHJlc3Nfc2V0dXAsCisJLmNvbXByZXNzX2luaXQJCT0gemxpYl9jb21wcmVzc19pbml0LAorCS5jb21wcmVzc191cGRhdGUJPSB6bGliX2NvbXByZXNzX3VwZGF0ZSwKKwkuY29tcHJlc3NfZmluYWwJCT0gemxpYl9jb21wcmVzc19maW5hbCwKKwkuZGVjb21wcmVzc19zZXR1cAk9IHpsaWJfZGVjb21wcmVzc19zZXR1cCwKKwkuZGVjb21wcmVzc19pbml0CT0gemxpYl9kZWNvbXByZXNzX2luaXQsCisJLmRlY29tcHJlc3NfdXBkYXRlCT0gemxpYl9kZWNvbXByZXNzX3VwZGF0ZSwKKwkuZGVjb21wcmVzc19maW5hbAk9IHpsaWJfZGVjb21wcmVzc19maW5hbCwKKworCS5iYXNlCQkJPSB7CisJCS5jcmFfbmFtZQk9ICJ6bGliIiwKKwkJLmNyYV9mbGFncwk9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MsCisJCS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgemxpYl9jdHgpLAorCQkuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorCQkuY3JhX2luaXQJPSB6bGliX2luaXQsCisJCS5jcmFfZXhpdAk9IHpsaWJfZXhpdCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB6bGliX21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9wY29tcCgmemxpYl9hbGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgemxpYl9tb2RfZmluaSh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKCZ6bGliX2FsZyk7Cit9CisKK21vZHVsZV9pbml0KHpsaWJfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoemxpYl9tb2RfZmluaSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiWmxpYiBDb21wcmVzc2lvbiBBbGdvcml0aG0iKTsKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggYTc3OTlhOS4uOGE4NTFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTI1NCwxMyArMjU0LDYgQEAKIAkgIGhlbHAgeW91IGNvcnJlbGF0ZSBQQ0kgYnVzIGFkZHJlc3NlcyB3aXRoIHRoZSBwaHlzaWNhbCBnZW9ncmFwaHkKIAkgIG9mIHlvdXIgc2xvdHMuIElmIHlvdSBhcmUgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEFDUElfU1lTVEVNCi0JYm9vbAotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHdpbGwgZW5hYmxlIHlvdXIgc3lzdGVtIHRvIHNodXQgZG93biB1c2luZyBBQ1BJLCBhbmQKLQkgIGR1bXAgeW91ciBBQ1BJIERTRFQgdGFibGUgdXNpbmcgL3Byb2MvYWNwaS9kc2R0LgotCiBjb25maWcgWDg2X1BNX1RJTUVSCiAJYm9vbCAiUG93ZXIgTWFuYWdlbWVudCBUaW1lciBTdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggNjVkOTBjNy4uYjEzMGVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNTIsNyArNTIsNyBAQAogb2JqLSQoQ09ORklHX0FDUElfQ09OVEFJTkVSKQkrPSBjb250YWluZXIubwogb2JqLSQoQ09ORklHX0FDUElfVEhFUk1BTCkJKz0gdGhlcm1hbC5vCiBvYmoteQkJCQkrPSBwb3dlci5vCi1vYmotJChDT05GSUdfQUNQSV9TWVNURU0pCSs9IHN5c3RlbS5vIGV2ZW50Lm8KK29iai15CQkJCSs9IHN5c3RlbS5vIGV2ZW50Lm8KIG9iai0kKENPTkZJR19BQ1BJX0RFQlVHKQkrPSBkZWJ1Zy5vCiBvYmotJChDT05GSUdfQUNQSV9OVU1BKQkJKz0gbnVtYS5vCiBvYmotJChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWSkJKz0gYWNwaV9tZW1ob3RwbHVnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCmluZGV4IDY1MTMyZjkuLjY5Y2JjNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwpAQCAtMTM4LDYgKzEzOCwyOSBAQAogCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSk7CiAKK3N0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X2lzX2NoYXJnZWQoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKK3sKKwkvKiBlaXRoZXIgY2hhcmdpbmcgb3IgZGlzY2hhcmdpbmcgKi8KKwlpZiAoYmF0dGVyeS0+c3RhdGUgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBiYXR0ZXJ5IG5vdCByZXBvcnRpbmcgY2hhcmdlICovCisJaWYgKGJhdHRlcnktPmNhcGFjaXR5X25vdyA9PSBBQ1BJX0JBVFRFUllfVkFMVUVfVU5LTk9XTiB8fAorCSAgICBiYXR0ZXJ5LT5jYXBhY2l0eV9ub3cgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBnb29kIGJhdHRlcmllcyB1cGRhdGUgZnVsbF9jaGFyZ2UgYXMgdGhlIGJhdHRlcmllcyBkZWdyYWRlICovCisJaWYgKGJhdHRlcnktPmZ1bGxfY2hhcmdlX2NhcGFjaXR5ID09IGJhdHRlcnktPmNhcGFjaXR5X25vdykKKwkJcmV0dXJuIDE7CisKKwkvKiBmYWxsYmFjayB0byB1c2luZyBkZXNpZ24gdmFsdWVzIGZvciBicm9rZW4gYmF0dGVyaWVzICovCisJaWYgKGJhdHRlcnktPmRlc2lnbl9jYXBhY2l0eSA9PSBiYXR0ZXJ5LT5jYXBhY2l0eV9ub3cpCisJCXJldHVybiAxOworCisJLyogd2UgZG9uJ3QgZG8gYW55IHNvcnQgb2YgbWV0cmljIGJhc2VkIG9uIHBlcmNlbnRhZ2VzICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X2dldF9wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCiAJCQkJICAgICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCiAJCQkJICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQpAQCAtMTU1LDcgKzE3OCw3IEBACiAJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkc7CiAJCWVsc2UgaWYgKGJhdHRlcnktPnN0YXRlICYgMHgwMikKIAkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19DSEFSR0lORzsKLQkJZWxzZSBpZiAoYmF0dGVyeS0+c3RhdGUgPT0gMCkKKwkJZWxzZSBpZiAoYWNwaV9iYXR0ZXJ5X2lzX2NoYXJnZWQoYmF0dGVyeSkpCiAJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRlVMTDsKIAkJZWxzZQogCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX1VOS05PV047CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmMKaW5kZXggNzY1ZmQxYy4uYmVlNjRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtNzU4LDggKzc1OCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJZXh0ZXJuIGFjcGlfc3RhdHVzIGFjcGlfb3NfaW5pdGlhbGl6ZTEodm9pZCk7CiAKLQotCXN0YXR1cyA9IGFjcGlfb3NfaW5pdGlhbGl6ZTEoKTsKKwlhY3BpX29zX2luaXRpYWxpemUxKCk7CiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX2VuYWJsZV9zdWJzeXN0ZW0oQUNQSV9OT19IQVJEV0FSRV9JTklUIHwgQUNQSV9OT19BQ1BJX0VOQUJMRSk7CkBAIC03NjksMTIgKzc2OCw2IEBACiAJCWdvdG8gZXJyb3IxOwogCX0KIAotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCi0JCSAgICAgICAiVW5hYmxlIHRvIGluaXRpYWxpemUgQUNQSSBPUyBvYmplY3RzXG4iKTsKLQkJZ290byBlcnJvcjE7Ci0JfQotCiAJLyoKIAkgKiBBQ1BJIDIuMCByZXF1aXJlcyB0aGUgRUMgZHJpdmVyIHRvIGJlIGxvYWRlZCBhbmQgd29yayBiZWZvcmUKIAkgKiB0aGUgRUMgZGV2aWNlIGlzIGZvdW5kIGluIHRoZSBuYW1lc3BhY2UgKGkuZS4gYmVmb3JlIGFjcGlfaW5pdGlhbGl6ZV9vYmplY3RzKCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDM1MDk0ZjIuLjdhZjdkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJCXNpemVvZihzdHJ1Y3QgZG9ja19zdGF0aW9uICopKTsKIAogCS8qIHdlIHdhbnQgdGhlIGRvY2sgZGV2aWNlIHRvIHNlbmQgdWV2ZW50cyAqLwotCWRvY2tfZGV2aWNlLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmZG9ja19kZXZpY2UtPmRldiwgMCk7CiAKIAlpZiAoaXNfZG9jayhoYW5kbGUpKQogCQlkb2NrX3N0YXRpb24tPmZsYWdzIHw9IERPQ0tfSVNfRE9DSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggNWMyZjVkMy4uMmZlMTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTEyMCw2ICsxMjAsOCBAQAogCXNwaW5sb2NrX3QgY3Vycl9sb2NrOwogfSAqYm9vdF9lYywgKmZpcnN0X2VjOwogCitzdGF0aWMgaW50IEVDX0ZMQUdTX01TSTsgLyogT3V0LW9mLXNwZWMgTVNJIGNvbnRyb2xsZXIgKi8KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24gTWFuYWdlbWVudAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI1OSw2ICsyNjEsOCBAQAogCQljbGVhcl9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpOwogCQlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOwogCX0KKwlpZiAoRUNfRkxBR1NfTVNJKQorCQl1ZGVsYXkoQUNQSV9FQ19ERUxBWSk7CiAJLyogc3RhcnQgdHJhbnNhY3Rpb24gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmN1cnJfbG9jaywgdG1wKTsKIAkvKiBmb2xsb3dpbmcgdHdvIGFjdGlvbnMgc2hvdWxkIGJlIGtlcHQgYXRvbWljICovCkBAIC05NjcsNiArOTcxLDExIEBACiAJLyoKIAkgKiBHZW5lcmF0ZSBhIGJvb3QgZWMgY29udGV4dAogCSAqLworCWlmIChkbWlfbmFtZV9pbl92ZW5kb3JzKCJNaWNyby1TdGFyIikgfHwKKwkgICAgZG1pX25hbWVfaW5fdmVuZG9ycygiTm90ZWJvb2siKSkgeworCQlwcl9pbmZvKFBSRUZJWCAiRW5hYmxpbmcgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIEVDIGZyb20gTVNJLlxuIik7CisJCUVDX0ZMQUdTX01TSSA9IDE7CisJfQogCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX0VDRFQsIDEsCiAJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmZWNkdF9wdHIpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEuYyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKaW5kZXggYzVlMjkyYS4uM2EwZDhlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL251bWEuYworKysgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCkBAIC0yNzcsNyArMjc3LDcgQEAKIAlpbnQgcHhtLCBub2RlID0gLTE7CiAKIAlweG0gPSBhY3BpX2dldF9weG0oaGFuZGxlKTsKLQlpZiAocHhtID49IDApCisJaWYgKHB4bSA+PSAwICYmIHB4bSA8IE1BWF9QWE1fRE9NQUlOUykKIAkJbm9kZSA9IGFjcGlfbWFwX3B4bV90b19ub2RlKHB4bSk7CiAKIAlyZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCBiMzE5M2VjLi4xZTM1ZjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC0xMzE3LDU0ICsxMzE3LDYgQEAKIAlyZXR1cm4gQUVfU1VQUE9SVDsKIH0KIAotI2lmZGVmCUNPTkZJR19YODYKLQotc3RydWN0IGFtbF9wb3J0X2Rlc2MgewotCXVpbnQJc3RhcnQ7Ci0JdWludAllbmQ7Ci0JY2hhciogICBuYW1lOwotCWNoYXIJd2FybmVkOwotfTsKLQotc3RhdGljIHN0cnVjdCBhbWxfcG9ydF9kZXNjIGFtbF9pbnZhbGlkX3BvcnRfbGlzdFtdID0gewotCXsweDIwLCAweDIxLCAiUElDMCIsIDB9LAotCXsweEEwLCAweEExLCAiUElDMSIsIDB9LAotCXsweDREMCwgMHg0RDEsICJFTENSIiwgMH0KLX07Ci0KLS8qCi0gKiB2YWxpZF9hbWxfaW9fYWRkcmVzcygpCi0gKgotICogaWYgdmFsaWQsIHJldHVybiB0cnVlCi0gKiBlbHNlIGludmFsaWQsIHdhcm4gb25jZSwgcmV0dXJuIGZhbHNlCi0gKi8KLXN0YXRpYyBib29sIHZhbGlkX2FtbF9pb19hZGRyZXNzKHVpbnQgYWRkcmVzcywgdWludCBsZW5ndGgpCi17Ci0JaW50IGk7Ci0JaW50IGVudHJpZXMgPSBzaXplb2YoYW1sX2ludmFsaWRfcG9ydF9saXN0KSAvIHNpemVvZihzdHJ1Y3QgYW1sX3BvcnRfZGVzYyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgKytpKSB7Ci0JCWlmICgoYWRkcmVzcyA+PSBhbWxfaW52YWxpZF9wb3J0X2xpc3RbaV0uc3RhcnQgJiYKLQkJCWFkZHJlc3MgPD0gYW1sX2ludmFsaWRfcG9ydF9saXN0W2ldLmVuZCkgfHwKLQkJCShhZGRyZXNzICsgbGVuZ3RoID49IGFtbF9pbnZhbGlkX3BvcnRfbGlzdFtpXS5zdGFydCAmJgotCQkJYWRkcmVzcyAgKyBsZW5ndGggPD0gYW1sX2ludmFsaWRfcG9ydF9saXN0W2ldLmVuZCkpCi0JCXsKLQkJCWlmICghYW1sX2ludmFsaWRfcG9ydF9saXN0W2ldLndhcm5lZCkKLQkJCXsKLQkJCQlwcmludGsoS0VSTl9FUlIgIkFDUEk6IERlbmllZCBCSU9TIEFNTCBhY2Nlc3MiCi0JCQkJCSIgdG8gaW52YWxpZCBwb3J0IDB4JXgrMHgleCAoJXMpXG4iLAotCQkJCQlhZGRyZXNzLCBsZW5ndGgsCi0JCQkJCWFtbF9pbnZhbGlkX3BvcnRfbGlzdFtpXS5uYW1lKTsKLQkJCQlhbWxfaW52YWxpZF9wb3J0X2xpc3RbaV0ud2FybmVkID0gMTsKLQkJCX0KLQkJCXJldHVybiBmYWxzZTsJLyogaW52YWxpZCAqLwotCQl9Ci0JfQotCXJldHVybiB0cnVlOwkvKiB2YWxpZCAqLwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCB2YWxpZF9hbWxfaW9fYWRkcmVzcyh1aW50IGFkZHJlc3MsIHVpbnQgbGVuZ3RoKSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzCkBAIC0xMzk0LDggKzEzNDYsNiBAQAogCiAJc3dpdGNoIChzcGFjZV9pZCkgewogCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOgotCQlpZiAoIXZhbGlkX2FtbF9pb19hZGRyZXNzKGFkZHJlc3MsIGxlbmd0aCkpCi0JCQlyZXR1cm4gQUVfQU1MX0lMTEVHQUxfQUREUkVTUzsKIAljYXNlIEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlk6CiAJCS8qIE9ubHkgaW50ZXJmZXJlbmNlIGNoZWNrcyBhZ2FpbnN0IFN5c3RlbUlPIGFuZCBTeXRlbU1lbW9yeQogCQkgICBhcmUgbmVlZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDUxOTI2NjYuLjAwNDU2ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC0zNzgsNiArMzc4LDIyIEBACiAJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjbWluaTEsMSIpLAogCQl9LAogCX0sCisJeworCS5jYWxsYmFjayA9IGluaXRfb2xkX3N1c3BlbmRfb3JkZXJpbmcsCisJLmlkZW50ID0gIkFzdXMgUHVuZGl0IFAxLUFIMiAoTTJOOEwgbW90aGVyYm9hcmQpIiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBU1VTVGVrIENvbXB1dGVyIElOQy4iKSwKKwkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTTJOOEwiKSwKKwkJfSwKKwl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJUb3NoaWJhIFNhdGVsbGl0ZSBMMzAwIiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiVE9TSElCQSIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNhdGVsbGl0ZSBMMzAwIiksCisJCX0sCisJfSwKIAl7fSwKIH07CiAjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW1iYS9idXMuYyBiL2RyaXZlcnMvYW1iYS9idXMuYwppbmRleCAwMGM0NmUwLi4zZDc2M2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FtYmEvYnVzLmMKKysrIGIvZHJpdmVycy9hbWJhL2J1cy5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlkZXYtPmRldi5yZWxlYXNlID0gYW1iYV9kZXZpY2VfcmVsZWFzZTsKIAlkZXYtPmRldi5idXMgPSAmYW1iYV9idXN0eXBlOwogCWRldi0+ZGV2LmRtYV9tYXNrID0gJmRldi0+ZG1hX21hc2s7Ci0JZGV2LT5yZXMubmFtZSA9IGRldi0+ZGV2LmJ1c19pZDsKKwlkZXYtPnJlcy5uYW1lID0gZGV2X25hbWUoJmRldi0+ZGV2KTsKIAogCWlmICghZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgJiYgZGV2LT5kbWFfbWFzaykKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiY29oZXJlbnQgZG1hIG1hc2sgaXMgdW5zZXRcbiIpOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJaWYgKGQtPnBhcmVudCkKIAkJciAmPSBkLT5wYXJlbnQgPT0gZGV2LT5wYXJlbnQ7CiAJaWYgKGQtPmJ1c2lkKQotCQlyICY9IHN0cmNtcChkZXYtPmJ1c19pZCwgZC0+YnVzaWQpID09IDA7CisJCXIgJj0gc3RyY21wKGRldl9uYW1lKGRldiksIGQtPmJ1c2lkKSA9PSAwOwogCiAJaWYgKHIpIHsKIAkJZ2V0X2RldmljZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGE2MDNiYmYuLjc4OGJiYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCS8qIGJvYXJkX2FoY2kgKi8KIAl7CiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDEyLDcgKzQxMiw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19OQ1EgfCBBSENJX0hGTEFHX05PX1BNUCksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX3Z0ODI1MV9vcHMsCiAJfSwKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfSUdOX0lSUV9JRl9FUlIpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQzMCw3ICs0MzAsNyBAQAogCQkJCSBBSENJX0hGTEFHXzMyQklUX09OTFkgfCBBSENJX0hGTEFHX05PX01TSSB8CiAJCQkJIEFIQ0lfSEZMQUdfU0VDVDI1NSksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX3NiNjAwX29wcywKIAl9LApAQCAtNDQwLDcgKzQ0MCw3IEBACiAJCQkJIEFIQ0lfSEZMQUdfTVZfUEFUQSB8IEFIQ0lfSEZMQUdfTk9fUE1QKSwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19ETUEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC00NDgsNyArNDQ4LDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfc2I2MDBfb3BzLAogCX0sCkBAIC00NTYsNyArNDU2LDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX1lFU19OQ1EpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfTk9fUE1QKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC01ODIsMTggKzU4MiwxOCBAQAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBhYmQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3OSAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBhYmUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3OSAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBhYmYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3OSAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiYzgpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiYzkpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiY2EpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiY2IpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiY2MpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiY2QpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiY2UpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiY2YpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiYzQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiYzUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiYzYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBiYzcpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A3QiAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkODQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkODUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkODYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkODcpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkODgpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkODkpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkOGEpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkOGIpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkOGMpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkOGQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkOGUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDBkOGYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A4OSAqLwogCiAJLyogU2lTICovCiAJeyBQQ0lfVkRFVklDRShTSSwgMHgxMTg0KSwgYm9hcmRfYWhjaSB9LAkJLyogU2lTIDk2NiAqLwpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAKIAl3cml0ZWwobWVzc2FnZVsxXSwgbW1pbyArIGhwcml2LT5lbV9sb2MrNCk7CiAKIAkvKiBzYXZlIG9mZiBuZXcgbGVkIHN0YXRlIGZvciBwb3J0L3Nsb3QgKi8KLQllbXAtPmxlZF9zdGF0ZSA9IG1lc3NhZ2VbMV07CisJZW1wLT5sZWRfc3RhdGUgPSBzdGF0ZTsKIAogCS8qCiAJICogdGVsbCBoYXJkd2FyZSB0byB0cmFuc21pdCB0aGUgbWVzc2FnZQpAQCAtMjU2NSw2ICsyNTY1LDE1IEBACiAJCQkvKiBQQ0kgc2xvdCBudW1iZXIgb2YgdGhlIGNvbnRyb2xsZXIgKi8KIAkJCS5kcml2ZXJfZGF0YSA9ICh2b2lkICopMHgxRlVMLAogCQl9LAorCQl7CisJCQkuaWRlbnQgPSAiSFAgQ29tcGFxIDY3MjBzIiwKKwkJCS5tYXRjaGVzID0geworCQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgQ29tcGFxIDY3MjBzIiksCisJCQl9LAorCQkJLyogUENJIHNsb3QgbnVtYmVyIG9mIHRoZSBjb250cm9sbGVyICovCisJCQkuZHJpdmVyX2RhdGEgPSAodm9pZCAqKTB4MUZVTCwKKwkJfSwKIAogCQl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIAl9OwpAQCAtMjY0Nyw4ICsyNjU2LDggQEAKIAlpZiAoYm9hcmRfaWQgPT0gYm9hcmRfYWhjaV9zYjcwMCAmJiBwZGV2LT5yZXZpc2lvbiA+PSAweDQwKQogCQlocHJpdi0+ZmxhZ3MgJj0gfkFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUw7CiAKLQlpZiAoKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fTVNJKSB8fCBwY2lfZW5hYmxlX21zaShwZGV2KSkKLQkJcGNpX2ludHgocGRldiwgMSk7CisJaWYgKCEoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19OT19NU0kpKQorCQlwY2lfZW5hYmxlX21zaShwZGV2KTsKIAogCS8qIHNhdmUgaW5pdGlhbCBjb25maWcgKi8KIAlhaGNpX3NhdmVfaW5pdGlhbF9jb25maWcocGRldiwgaHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKaW5kZXggZGM0OGE2My4uZWNmZDIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCkBAIC0xMTgsOCArMTE4LDggQEAKIAl1MTYgY29tbWFuZDsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmZ2VuZXJpY19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwppbmRleCA1NDk2MWMwLi5lNWNiZTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKQEAgLTQ0NiwzNCArNDQ2LDM0IEBACiAJW3BpaXhfcGF0YV9td2RtYV0gPSAJLyogUElJWDMgTVdETUEgb25seSAqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KIAkJLnBvcnRfb3BzCT0gJnBpaXhfcGF0YV9vcHMsCiAJfSwKIAogCVtwaWl4X3BhdGFfMzNdID0JLyogUElJWDQgYXQgMzNNSHogKi8KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQV9NQVNLXzQwQywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfcGF0YV9vcHMsCiAJfSwKIAogCVtpY2hfcGF0YV8zM10gPSAJLyogSUNIMCAtIElDSCBhdCAzM01oeiovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sgCT0gMHgxZiwJLyogcGlvIDAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIENoZWNrOiBtYXliZSAweDA3ICAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLCAvKiBVRE1BMzMgKi8KKwkJLnBpb19tYXNrIAk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIENoZWNrOiBtYXliZSBNV0RNQTAgaXMgb2sgICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZpY2hfcGF0YV9vcHMsCiAJfSwKIAogCVtpY2hfcGF0YV82Nl0gPSAJLyogSUNIIGNvbnRyb2xsZXJzIHVwIHRvIDY2TUh6ICovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sgCT0gMHgxZiwJLyogcGlvIDAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIE1XRE1BMCBpcyBicm9rZW4gb24gY2hpcCAqLworCQkucGlvX21hc2sgCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogTVdETUEwIGlzIGJyb2tlbiBvbiBjaGlwICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZpY2hfcGF0YV9vcHMsCiAJfSwKQEAgLTQ4MSwxNyArNDgxLDE3IEBACiAJW2ljaF9wYXRhXzEwMF0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUyB8IFBJSVhfRkxBR19DSEVDS0lOVFIsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsIC8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJmljaF9wYXRhX29wcywKIAl9LAogCiAJW2ljaDVfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTQ5OSw4ICs0OTksOCBAQAogCVtpY2g2X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MDgsOCArNTA4LDggQEAKIAlbaWNoNm1fc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTUxNyw4ICs1MTcsOCBAQAogCVtpY2g4X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfU0lEUFIsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MjYsOCArNTI2LDggQEAKIAlbaWNoOF8ycG9ydF9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTIHwgUElJWF9GTEFHX1NJRFBSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTM1LDggKzUzNSw4IEBACiAJW3RvbGFwYWlfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTU0NCw4ICs1NDQsOCBAQAogCVtpY2g4bV9hcHBsZV9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTUzLDkgKzU1Myw5IEBACiAJW3BpaXhfcGF0YV92bXddID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQV9NQVNLXzQwQywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfdm13X29wcywKIAl9LAogCkBAIC0xMjg5LDYgKzEyODksMzkgQEAKIAlyZXR1cm4gbWFwOwogfQogCitzdGF0aWMgYm9vbCBwaWl4X25vX3NpZHByKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaG9zdC0+ZGV2KTsKKworCS8qCisJICogU2Ftc3VuZyBEQi1QNzAgb25seSBoYXMgdGhyZWUgQVRBIHBvcnRzIGV4cG9zZWQgYW5kCisJICogY3VyaW91c2x5IHRoZSB1bmNvbm5lY3RlZCBmaXJzdCBwb3J0IHJlcG9ydHMgbGluayBvbmxpbmUKKwkgKiB3aGlsZSBub3QgcmVzcG9uZGluZyB0byBTUlNUIHByb3RvY29sIGNhdXNpbmcgZXhjZXNzaXZlCisJICogZGV0ZWN0aW9uIGRlbGF5LgorCSAqCisJICogVW5mb3J0dW5hdGVseSwgdGhlIHN5c3RlbSBkb2Vzbid0IGNhcnJ5IGVub3VnaCBETUkKKwkgKiBpbmZvcm1hdGlvbiB0byBpZGVudGlmeSB0aGUgbWFjaGluZSBidXQgZG9lcyBoYXZlIHN1YnN5c3RlbQorCSAqIHZlbmRvciBhbmQgZGV2aWNlIHNldC4gIEFzIGl0J3MgdW5jbGVhciB3aGV0aGVyIHRoZQorCSAqIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIGlzIHVzZWQgb25seSBmb3IgdGhpcyBzcGVjaWZpYworCSAqIGJvYXJkLCB0aGUgcG9ydCBjYW4ndCBiZSBkaXNhYmxlZCBzb2xlbHkgd2l0aCB0aGUKKwkgKiBpbmZvcm1hdGlvbjsgaG93ZXZlciwgdHVybmluZyBvZmYgU0lEUFIgYWNjZXNzIHdvcmtzIGFyb3VuZAorCSAqIHRoZSBwcm9ibGVtLiAgVHVybiBpdCBvZmYuCisJICoKKwkgKiBUaGlzIHByb2JsZW0gaXMgcmVwb3J0ZWQgaW4gYm5jIzQ0MTI0MC4KKwkgKgorCSAqIGh0dHBzOi8vYnVnemlsbGEubm92ZWxsLmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NDQxNDIwCisJICovCisJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMICYmIHBkZXYtPmRldmljZSA9PSAweDI5MjAgJiYKKwkgICAgcGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcgJiYKKwkgICAgcGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweGIwNDkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhvc3QtPmRldiwKKwkJCSAgICJTYW1zdW5nIERCLVA3MCBkZXRlY3RlZCwgZGlzYWJsaW5nIFNJRFBSXG4iKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwaWl4X2luaXRfc2lkcHIoc3RydWN0IGF0YV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihob3N0LT5kZXYpOwpAQCAtMTMwMiw2ICsxMzM1LDEwIEBACiAJCWlmIChocHJpdi0+bWFwW2ldID09IElERSkKIAkJCXJldHVybiAwOwogCisJLyogaXMgaXQgYmxhY2tsaXN0ZWQ/ICovCisJaWYgKHBpaXhfbm9fc2lkcHIoaG9zdCkpCisJCXJldHVybiAwOworCiAJaWYgKCEoaG9zdC0+cG9ydHNbMF0tPmZsYWdzICYgUElJWF9GTEFHX1NJRFBSKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDlmYmYwNTkuLmU3ZWE3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CkBAIC0xMzIyLDE0ICsxMzIzLDE2IEBACiB7CiAJaWYgKGF0YV9pZF9oYXNfbGJhKGlkKSkgewogCQlpZiAoYXRhX2lkX2hhc19sYmE0OChpZCkpCi0JCQlyZXR1cm4gYXRhX2lkX3U2NChpZCwgMTAwKTsKKwkJCXJldHVybiBhdGFfaWRfdTY0KGlkLCBBVEFfSURfTEJBX0NBUEFDSVRZXzIpOwogCQllbHNlCi0JCQlyZXR1cm4gYXRhX2lkX3UzMihpZCwgNjApOworCQkJcmV0dXJuIGF0YV9pZF91MzIoaWQsIEFUQV9JRF9MQkFfQ0FQQUNJVFkpOwogCX0gZWxzZSB7CiAJCWlmIChhdGFfaWRfY3VycmVudF9jaHNfdmFsaWQoaWQpKQotCQkJcmV0dXJuIGF0YV9pZF91MzIoaWQsIDU3KTsKKwkJCXJldHVybiBpZFtBVEFfSURfQ1VSX0NZTFNdICogaWRbQVRBX0lEX0NVUl9IRUFEU10gKgorCQkJICAgICAgIGlkW0FUQV9JRF9DVVJfU0VDVE9SU107CiAJCWVsc2UKLQkJCXJldHVybiBpZFsxXSAqIGlkWzNdICogaWRbNl07CisJCQlyZXR1cm4gaWRbQVRBX0lEX0NZTFNdICogaWRbQVRBX0lEX0hFQURTXSAqCisJCQkgICAgICAgaWRbQVRBX0lEX1NFQ1RPUlNdOwogCX0KIH0KIApAQCAtMjM4Nyw2ICsyMzkwLDcgQEAKIAlkZXYtPmN5bGluZGVycyA9IDA7CiAJZGV2LT5oZWFkcyA9IDA7CiAJZGV2LT5zZWN0b3JzID0gMDsKKwlkZXYtPm11bHRpX2NvdW50ID0gMDsKIAogCS8qCiAJICogY29tbW9uIEFUQSwgQVRBUEkgZmVhdHVyZSB0ZXN0cwpAQCAtMjQyNCw4ICsyNDI4LDE1IEBACiAKIAkJZGV2LT5uX3NlY3RvcnMgPSBhdGFfaWRfbl9zZWN0b3JzKGlkKTsKIAotCQlpZiAoZGV2LT5pZFs1OV0gJiAweDEwMCkKLQkJCWRldi0+bXVsdGlfY291bnQgPSBkZXYtPmlkWzU5XSAmIDB4ZmY7CisJCS8qIGdldCBjdXJyZW50IFIvVyBNdWx0aXBsZSBjb3VudCBzZXR0aW5nICovCisJCWlmICgoZGV2LT5pZFs0N10gPj4gOCkgPT0gMHg4MCAmJiAoZGV2LT5pZFs1OV0gJiAweDEwMCkpIHsKKwkJCXVuc2lnbmVkIGludCBtYXggPSBkZXYtPmlkWzQ3XSAmIDB4ZmY7CisJCQl1bnNpZ25lZCBpbnQgY250ID0gZGV2LT5pZFs1OV0gJiAweGZmOworCQkJLyogb25seSByZWNvZ25pemUvYWxsb3cgcG93ZXJzIG9mIHR3byBoZXJlICovCisJCQlpZiAoaXNfcG93ZXJfb2ZfMihtYXgpICYmIGlzX3Bvd2VyX29mXzIoY250KSkKKwkJCQlpZiAoY250IDw9IG1heCkKKwkJCQkJZGV2LT5tdWx0aV9jb3VudCA9IGNudDsKKwkJfQogCiAJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKIAkJCWNvbnN0IGNoYXIgKmxiYV9kZXNjOwpAQCAtNDYxMiw3ICs0NjIzLDcgQEAKIAlWUFJJTlRLKCJ1bm1hcHBpbmcgJXUgc2cgZWxlbWVudHNcbiIsIHFjLT5uX2VsZW0pOwogCiAJaWYgKHFjLT5uX2VsZW0pCi0JCWRtYV91bm1hcF9zZyhhcC0+ZGV2LCBzZywgcWMtPm5fZWxlbSwgZGlyKTsKKwkJZG1hX3VubWFwX3NnKGFwLT5kZXYsIHNnLCBxYy0+b3JpZ19uX2VsZW0sIGRpcik7CiAKIAlxYy0+ZmxhZ3MgJj0gfkFUQV9RQ0ZMQUdfRE1BTUFQOwogCXFjLT5zZyA9IE5VTEw7CkBAIC00NzI3LDcgKzQ3MzgsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAlEUFJJTlRLKCIlZCBzZyBlbGVtZW50cyBtYXBwZWRcbiIsIG5fZWxlbSk7Ci0KKwlxYy0+b3JpZ19uX2VsZW0gPSBxYy0+bl9lbGVtOwogCXFjLT5uX2VsZW0gPSBuX2VsZW07CiAJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfRE1BTUFQOwogCkBAIC02NzA3LDYgKzY3MTgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2RvX2Rldl9yZWFkX2lkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX3NpbXVsYXRlKTsKIAorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Bpb19xdWV1ZV90YXNrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9waW9fbmVlZF9pb3JkeSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfdGltaW5nX2ZpbmRfbW9kZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfdGltaW5nX2NvbXB1dGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCBjZTJlZjA0Li4wMTgzMTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAKIAkvKiBGb3IgbmV3IEVILCBhbGwgcWNzIGFyZSBmaW5pc2hlZCBpbiBvbmUgb2YgdGhyZWUgd2F5cyAtCiAJICogbm9ybWFsIGNvbXBsZXRpb24sIGVycm9yIGNvbXBsZXRpb24sIGFuZCBTQ1NJIHRpbWVvdXQuCi0JICogQm90aCBjbXBsZXRpb25zIGNhbiByYWNlIGFnYWluc3QgU0NTSSB0aW1lb3V0LiAgV2hlbiBub3JtYWwKKwkgKiBCb3RoIGNvbXBsZXRpb25zIGNhbiByYWNlIGFnYWluc3QgU0NTSSB0aW1lb3V0LiAgV2hlbiBub3JtYWwKIAkgKiBjb21wbGV0aW9uIHdpbnMsIHRoZSBxYyBuZXZlciByZWFjaGVzIEVILiAgV2hlbiBlcnJvcgogCSAqIGNvbXBsZXRpb24gd2lucywgdGhlIHFjIGhhcyBBVEFfUUNGTEFHX0ZBSUxFRCBzZXQuCiAJICoKQEAgLTU2Miw3ICs1NjIsMTkgQEAKIAkJaW50IG5yX3RpbWVkb3V0ID0gMDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOworCQkKKwkJLyogVGhpcyBtdXN0IG9jY3VyIHVuZGVyIHRoZSBhcC0+bG9jayBhcyB3ZSBkb24ndCB3YW50CisJCSAgIGEgcG9sbGVkIHJlY292ZXJ5IHRvIHJhY2UgdGhlIHJlYWwgaW50ZXJydXB0IGhhbmRsZXIKKwkJICAgCisJCSAgIFRoZSBsb3N0X2ludGVycnVwdCBoYW5kbGVyIGNoZWNrcyBmb3IgYW55IGNvbXBsZXRlZCBidXQKKwkJICAgbm9uLW5vdGlmaWVkIGNvbW1hbmQgYW5kIGNvbXBsZXRlcyBtdWNoIGxpa2UgYW4gSVJRIGhhbmRsZXIuCisJCSAgIAorCQkgICBXZSB0aGVuIGZhbGwgaW50byB0aGUgZXJyb3IgcmVjb3ZlcnkgY29kZSB3aGljaCB3aWxsIHRyZWF0CisJCSAgIHRoaXMgYXMgaWYgbm9ybWFsIGNvbXBsZXRpb24gd29uIHRoZSByYWNlICovCiAKKwkJaWYgKGFwLT5vcHMtPmxvc3RfaW50ZXJydXB0KQorCQkJYXAtPm9wcy0+bG9zdF9pbnRlcnJ1cHQoYXApOworCQkJCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY21kLCB0bXAsICZob3N0LT5laF9jbWRfcSwgZWhfZW50cnkpIHsKIAkJCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAKQEAgLTYwNiw2ICs2MTgsOSBAQAogCQlhcC0+ZWhfdHJpZXMgPSBBVEFfRUhfTUFYX1RSSUVTOwogCX0gZWxzZQogCQlzcGluX3VubG9ja193YWl0KGFwLT5sb2NrKTsKKwkJCisJLyogSWYgd2UgdGltZWQgcmFjZWQgbm9ybWFsIGNvbXBsZXRpb24gYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8KKwkgICByZWNvdmVyIG5yX3RpbWVkb3V0ID09IDAgd2h5IGV4YWN0bHkgYXJlIHdlIGRvaW5nIGVycm9yIHJlY292ZXJ5ID8gKi8KIAogIHJlcGVhdDoKIAkvKiBpbnZva2UgZXJyb3IgaGFuZGxlciAqLwpAQCAtMjQyMywxMSArMjQzOCwxNCBAQAogCQl9CiAKIAkJLyogcHJlcmVzZXQoKSBtaWdodCBoYXZlIGNsZWFyZWQgQVRBX0VIX1JFU0VULiAgSWYgc28sCi0JCSAqIGJhbmcgY2xhc3NlcyBhbmQgcmV0dXJuLgorCQkgKiBiYW5nIGNsYXNzZXMsIHRoYXcgYW5kIHJldHVybi4KIAkJICovCiAJCWlmIChyZXNldCAmJiAhKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfUkVTRVQpKSB7CiAJCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKQogCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CisJCQlpZiAoKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKSAmJgorCQkJICAgIGF0YV9pc19ob3N0X2xpbmsobGluaykpCisJCQkJYXRhX2VoX3RoYXdfcG9ydChhcCk7CiAJCQlyYyA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjkwMSw3ICsyOTE5LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVEFfRUhfVUFfVFJJRVM7IGkrKykgewotCQl1OCBzZW5zZV9idWZmZXJbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKKwkJdTggKnNlbnNlX2J1ZmZlciA9IGRldi0+bGluay0+YXAtPnNlY3Rvcl9idWY7CiAJCXU4IHNlbnNlX2tleSA9IDA7CiAJCXVuc2lnbmVkIGludCBlcnJfbWFzazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IDBiMjk5YjAuLjgzMzJlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAkuc29mdHJlc2V0CQk9IGF0YV9zZmZfc29mdHJlc2V0LAogCS5oYXJkcmVzZXQJCT0gc2F0YV9zZmZfaGFyZHJlc2V0LAogCS5wb3N0cmVzZXQJCT0gYXRhX3NmZl9wb3N0cmVzZXQsCisJLmRyYWluX2ZpZm8JCT0gYXRhX3NmZl9kcmFpbl9maWZvLAogCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9zZmZfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kLAogCkBAIC02NCw2ICs2NSw4IEBACiAJLnNmZl9pcnFfb24JCT0gYXRhX3NmZl9pcnFfb24sCiAJLnNmZl9pcnFfY2xlYXIJCT0gYXRhX3NmZl9pcnFfY2xlYXIsCiAKKwkubG9zdF9pbnRlcnJ1cHQJCT0gYXRhX3NmZl9sb3N0X2ludGVycnVwdCwKKwogCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3BvcnRfb3BzKTsKQEAgLTc3MywxOCArNzc2LDMyIEBACiAJZWxzZQogCQlpb3dyaXRlMzJfcmVwKGRhdGFfYWRkciwgYnVmLCB3b3Jkcyk7CiAKKwkvKiBUcmFuc2ZlciB0cmFpbGluZyBieXRlcywgaWYgYW55ICovCiAJaWYgKHVubGlrZWx5KHNsb3ApKSB7Ci0JCV9fbGUzMiBwYWQ7CisJCXVuc2lnbmVkIGNoYXIgcGFkWzRdOworCisJCS8qIFBvaW50IGJ1ZiB0byB0aGUgdGFpbCBvZiBidWZmZXIgKi8KKwkJYnVmICs9IGJ1ZmxlbiAtIHNsb3A7CisKKwkJLyoKKwkJICogVXNlIGlvKl9yZXAoKSBhY2Nlc3NvcnMgaGVyZSBhcyB3ZWxsIHRvIGF2b2lkIHBvaW50bGVzc2x5CisJCSAqIHN3YXBwaW5nIGJ5dGVzIHRvIGFuZCBmcm8gb24gdGhlIGJpZyBlbmRpYW4gbWFjaGluZXMuLi4KKwkJICovCiAJCWlmIChydyA9PSBSRUFEKSB7Ci0JCQlwYWQgPSBjcHVfdG9fbGUzMihpb3JlYWQzMihhcC0+aW9hZGRyLmRhdGFfYWRkcikpOwotCQkJbWVtY3B5KGJ1ZiArIGJ1ZmxlbiAtIHNsb3AsICZwYWQsIHNsb3ApOworCQkJaWYgKHNsb3AgPCAzKQorCQkJCWlvcmVhZDE2X3JlcChkYXRhX2FkZHIsIHBhZCwgMSk7CisJCQllbHNlCisJCQkJaW9yZWFkMzJfcmVwKGRhdGFfYWRkciwgcGFkLCAxKTsKKwkJCW1lbWNweShidWYsIHBhZCwgc2xvcCk7CiAJCX0gZWxzZSB7Ci0JCQltZW1jcHkoJnBhZCwgYnVmICsgYnVmbGVuIC0gc2xvcCwgc2xvcCk7Ci0JCQlpb3dyaXRlMzIobGUzMl90b19jcHUocGFkKSwgYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCQkJbWVtY3B5KHBhZCwgYnVmLCBzbG9wKTsKKwkJCWlmIChzbG9wIDwgMykKKwkJCQlpb3dyaXRlMTZfcmVwKGRhdGFfYWRkciwgcGFkLCAxKTsKKwkJCWVsc2UKKwkJCQlpb3dyaXRlMzJfcmVwKGRhdGFfYWRkciwgcGFkLCAxKTsKIAkJfQotCQl3b3JkcysrOwogCX0KLQlyZXR1cm4gd29yZHMgPDwgMjsKKwlyZXR1cm4gKGJ1ZmxlbiArIDEpICYgfjE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2RhdGFfeGZlcjMyKTsKIApAQCAtMTYzMiw3ICsxNjQ5LDcgQEAKICAqCVJFVFVSTlM6CiAgKglPbmUgaWYgaW50ZXJydXB0IHdhcyBoYW5kbGVkLCB6ZXJvIGlmIG5vdCAoc2hhcmVkIGlycSkuCiAgKi8KLWlubGluZSB1bnNpZ25lZCBpbnQgYXRhX3NmZl9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKK3Vuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCSAgICAgIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmxpbmsuZWhfaW5mbzsKQEAgLTE3NjEsNiArMTc3OCw0OCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9pbnRlcnJ1cHQpOwogCiAvKioKKyAqCWF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQJLQlDaGVjayBmb3IgYW4gYXBwYXJlbnQgbG9zdCBpbnRlcnJ1cHQKKyAqCUBhcDogcG9ydCB0aGF0IGFwcGVhcnMgdG8gaGF2ZSB0aW1lZCBvdXQKKyAqCisgKglDYWxsZWQgZnJvbSB0aGUgbGliYXRhIGVycm9yIGhhbmRsZXJzIHdoZW4gdGhlIGNvcmUgY29kZSBzdXNwZWN0cworICoJYW4gaW50ZXJydXB0IGhhcyBiZWVuIGxvc3QuIElmIGl0IGhhcyBjb21wbGV0ZSBhbnl0aGluZyB3ZSBjYW4gYW5kCisgKgl0aGVuIHJldHVybi4gSW50ZXJmYWNlIG11c3Qgc3VwcG9ydCBhbHRzdGF0dXMgZm9yIHRoaXMgZmFzdGVyCisgKglyZWNvdmVyeSB0byBvY2N1ci4KKyAqCisgKglMb2NraW5nOgorICoJQ2FsbGVyIGhvbGRzIGhvc3QgbG9jaworICovCisKK3ZvaWQgYXRhX3NmZl9sb3N0X2ludGVycnVwdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXR1czsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCisJLyogT25seSBvbmUgb3V0c3RhbmRpbmcgY29tbWFuZCBwZXIgU0ZGIGNoYW5uZWwgKi8KKwlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7CisJLyogQ2hlY2sgd2UgaGF2ZSBhIGxpdmUgb25lLi4gKi8KKwlpZiAocWMgPT0gTlVMTCB8fCAgIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCisJCXJldHVybjsKKwkvKiBXZSBjYW5ub3QgbG9zZSBhbiBpbnRlcnJ1cHQgb24gYSBwb2xsZWQgY29tbWFuZCAqLworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJcmV0dXJuOworCS8qIFNlZSBpZiB0aGUgY29udHJvbGxlciB0aGlua3MgaXQgaXMgc3RpbGwgYnVzeSAtIGlmIHNvIHRoZSBjb21tYW5kCisJICAgaXNuJ3QgYSBsb3N0IElSUSBidXQgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwlzdGF0dXMgPSBhdGFfc2ZmX2FsdHN0YXR1cyhhcCk7CisJaWYgKHN0YXR1cyAmIEFUQV9CVVNZKQorCQlyZXR1cm47CisKKwkvKiBUaGVyZSB3YXMgYSBjb21tYW5kIHJ1bm5pbmcsIHdlIGFyZSBubyBsb25nZXIgYnVzeSBhbmQgd2UgaGF2ZQorCSAgIG5vIGludGVycnVwdC4gKi8KKwlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImxvc3QgaW50ZXJydXB0IChTdGF0dXMgMHgleClcbiIsCisJCQkJCQkJCXN0YXR1cyk7CisJLyogUnVuIHRoZSBob3N0IGludGVycnVwdCBsb2dpYyBhcyBpZiB0aGUgaW50ZXJydXB0IGhhZCBub3QgYmVlbgorCSAgIGxvc3QgKi8KKwlhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9sb3N0X2ludGVycnVwdCk7CisKKy8qKgogICoJYXRhX3NmZl9mcmVlemUgLSBGcmVlemUgU0ZGIGNvbnRyb2xsZXIgcG9ydAogICoJQGFwOiBwb3J0IHRvIGZyZWV6ZQogICoKQEAgLTIwNTIsNiArMjExMSw3IEBACiAJaW93cml0ZTgoYXAtPmN0bCB8IEFUQV9TUlNULCBpb2FkZHItPmN0bF9hZGRyKTsKIAl1ZGVsYXkoMjApOwkvKiBGSVhNRTogZmx1c2ggKi8KIAlpb3dyaXRlOChhcC0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKwlhcC0+bGFzdF9jdGwgPSBhcC0+Y3RsOwogCiAJLyogd2FpdCB0aGUgcG9ydCB0byBiZWNvbWUgcmVhZHkgKi8KIAlyZXR1cm4gYXRhX3NmZl93YWl0X2FmdGVyX3Jlc2V0KCZhcC0+bGluaywgZGV2bWFzaywgZGVhZGxpbmUpOwpAQCAtMjE3NiwxMiArMjIzNiw0NyBAQAogCX0KIAogCS8qIHNldCB1cCBkZXZpY2UgY29udHJvbCAqLwotCWlmIChhcC0+aW9hZGRyLmN0bF9hZGRyKQorCWlmIChhcC0+aW9hZGRyLmN0bF9hZGRyKSB7CiAJCWlvd3JpdGU4KGFwLT5jdGwsIGFwLT5pb2FkZHIuY3RsX2FkZHIpOworCQlhcC0+bGFzdF9jdGwgPSBhcC0+Y3RsOworCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfcG9zdHJlc2V0KTsKIAogLyoqCisgKglhdGFfc2ZmX2RyYWluX2ZpZm8gLSBTdG9jayBGSUZPIGRyYWluIGxvZ2ljIGZvciBTRkYgY29udHJvbGxlcnMKKyAqCUBxYzogY29tbWFuZAorICoKKyAqCURyYWluIHRoZSBGSUZPIGFuZCBkZXZpY2Ugb2YgYW55IHN0dWNrIGRhdGEgZm9sbG93aW5nIGEgY29tbWFuZAorICoJZmFpbGluZyB0byBjb21wbGV0ZS4gSW4gc29tZSBjYXNlcyB0aGlzIGlzIG5lY2Nlc3NhcnkgYmVmb3JlIGEKKyAqCXJlc2V0IHdpbGwgcmVjb3ZlciB0aGUgZGV2aWNlLgorICoKKyAqLworCit2b2lkIGF0YV9zZmZfZHJhaW5fZmlmbyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCWludCBjb3VudDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCisJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIGluY29taW5nIGRhdGEgd2hlbiBhIGNvbW1hbmQgd2FzIHJ1bm5pbmcgKi8KKwlpZiAocWMgPT0gTlVMTCB8fCBxYy0+ZG1hX2RpciA9PSBETUFfVE9fREVWSUNFKQorCQlyZXR1cm47CisKKwlhcCA9IHFjLT5hcDsKKwkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLworCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQorCQkJCQkJJiYgY291bnQgPCAzMjc2ODsgY291bnQrKykKKwkJaW9yZWFkMTYoYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCisJLyogQ2FuIGJlY29tZSBERUJVRyBsYXRlciAqLworCWlmIChjb3VudCkKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0RFQlVHLAorCQkJImRyYWluZWQgJWQgYnl0ZXMgdG8gY2xlYXIgRFJRLlxuIiwgY291bnQpOworCit9CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2RyYWluX2ZpZm8pOworCisvKioKICAqCWF0YV9zZmZfZXJyb3JfaGFuZGxlciAtIFN0b2NrIGVycm9yIGhhbmRsZXIgZm9yIEJNRE1BIGNvbnRyb2xsZXIKICAqCUBhcDogcG9ydCB0byBoYW5kbGUgZXJyb3IgZm9yCiAgKgpAQCAtMjIyMiw3ICsyMzE3LDggQEAKIAkJICogcmVhbGx5IGEgdGltZW91dCBldmVudCwgYWRqdXN0IGVycm9yIG1hc2sgYW5kCiAJCSAqIGNhbmNlbCBmcm96ZW4gc3RhdGUuCiAJCSAqLwotCQlpZiAocWMtPmVycl9tYXNrID09IEFDX0VSUl9USU1FT1VUICYmIChob3N0X3N0YXQgJiBBVEFfRE1BX0VSUikpIHsKKwkJaWYgKHFjLT5lcnJfbWFzayA9PSBBQ19FUlJfVElNRU9VVAorCQkJCQkJJiYgKGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgewogCQkJcWMtPmVycl9tYXNrID0gQUNfRVJSX0hPU1RfQlVTOwogCQkJdGhhdyA9IDE7CiAJCX0KQEAgLTIyMzMsNiArMjMyOSwxMyBAQAogCWF0YV9zZmZfc3luYyhhcCk7CQkvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0aGlzICovCiAJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CiAJYXAtPm9wcy0+c2ZmX2lycV9jbGVhcihhcCk7CisJLyogV2UgKk1VU1QqIGRvIEZJRk8gZHJhaW5pbmcgYmVmb3JlIHdlIGlzc3VlIGEgcmVzZXQgYXMgc2V2ZXJhbAorCSAqIGRldmljZXMgaGVscGZ1bGx5IGNsZWFyIHRoZWlyIGludGVybmFsIHN0YXRlIGFuZCB3aWxsIGxvY2sgc29saWQKKwkgKiBpZiB3ZSB0b3VjaCB0aGUgZGF0YSBwb3J0IHBvc3QgcmVzZXQuIFBhc3MgcWMgaW4gY2FzZSBhbnlvbmUgd2FudHMKKwkgKiAgdG8gZG8gZGlmZmVyZW50IFBJTy9ETUEgcmVjb3Zlcnkgb3IgaGFzIHBlciBjb21tYW5kIGZpeHVwcworCSAqLworCWlmIChhcC0+b3BzLT5kcmFpbl9maWZvKQorCQlhcC0+b3BzLT5kcmFpbl9maWZvKHFjKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjUyMCw2ICsyNjIzLDcgQEAKIAlpZiAoYXAtPmZsYWdzICYgKEFUQV9GTEFHX1NBVEFfUkVTRVQgfCBBVEFfRkxBR19TUlNUKSkgewogCQkvKiBzZXQgdXAgZGV2aWNlIGNvbnRyb2wgZm9yIEFUQV9GTEFHX1NBVEFfUkVTRVQgKi8KIAkJaW93cml0ZTgoYXAtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7CisJCWFwLT5sYXN0X2N0bCA9IGFwLT5jdGw7CiAJfQogCiAJRFBSSU5USygiRVhJVFxuIik7CkBAIC0yOTQxLDQgKzMwNDUsMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9zZmZfaW5pdF9vbmUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEuaCBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCmluZGV4IGNlYTgwMTQuLjg5YTFlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCkBAIC03OSw4ICs3OSw2IEBACiAJCQkgICB1NjQgYmxvY2ssIHUzMiBuX2Jsb2NrLCB1bnNpZ25lZCBpbnQgdGZfZmxhZ3MsCiAJCQkgICB1bnNpZ25lZCBpbnQgdGFnKTsKIGV4dGVybiB1NjQgYXRhX3RmX3JlYWRfYmxvY2soc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgYXRhX3Bpb19xdWV1ZV90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgKmRhdGEsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSk7CiBleHRlcm4gdm9pZCBhdGFfcG9ydF9mbHVzaF90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHVuc2lnbmVkIGF0YV9leGVjX2ludGVybmFsKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwgY29uc3QgdTggKmNkYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKaW5kZXggOGI3N2E5OC4uZDhmMzVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKQEAgLTI0Niw5ICsyNDYsOSBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAotCQkudWRtYV9tYXNrIAk9IDB4N2YsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE2LAogCiAJCS5wb3J0X29wcwk9ICZwYWNwaV9vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCmluZGV4IGViOTlkYmUuLjc1MWI3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwpAQCAtNDkyLDUzICs0OTIsNTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZhbGlfZWFybHlfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4MjAgYWRkZWQgRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fMjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJmFsaV8yMF9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHgyMCB3aXRoIHN1cHBvcnQgbG9naWMgYWRkZWQgVURNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzIwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCS8qIFVETUEzMyAqLworCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmYWxpXzIwX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEMyIGFkZHMgVURNQTY2ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzIgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmFsaV9jMl9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDMyBpcyBVRE1BNjYgZm9yIG5vdyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2MzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzJfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzQgaXMgVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2M0ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzRfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzUgaXMgVURNQTEzMyB3aXRoIExCQTQ4IERNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2M1ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzVfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKaW5kZXggNjM3MTlhYjllLi4zM2E3NGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9hbWQiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMTEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjQuMSIKIAogLyoqCiAgKgl0aW1pbmdfc2V0dXAJCS0Jc2hhcmVkIHRpbWluZyBjb21wdXRhdGlvbiBhbmQgbG9hZApAQCAtMTQ1LDYgKzE0NSwxMyBAQAogCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAorLyoqCisgKglhbWRfY2FibGVfZGV0ZWN0CS0JcmVwb3J0IGNhYmxlIHR5cGUKKyAqCUBhcDogcG9ydAorICoKKyAqCUFNRCBjb250cm9sbGVyL0JJT1Mgc2V0dXBzIHJlY29yZCB0aGUgY2FibGUgdHlwZSBpbiB3b3JkIDB4NDIKKyAqLworCiBzdGF0aWMgaW50IGFtZF9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdGF0aWMgY29uc3QgdTMyIGJpdG1hc2tbMl0gPSB7MHgwMywgMHgwQ307CkBAIC0xNTgsNiArMTY1LDQwIEBACiB9CiAKIC8qKgorICoJYW1kX2ZpZm9fc2V0dXAJCS0Jc2V0IHRoZSBQSU8gRklGTyBmb3IgQVRBL0FUQVBJCisgKglAYXA6IEFUQSBpbnRlcmZhY2UKKyAqCUBhZGV2OiBBVEEgZGV2aWNlCisgKgorICoJU2V0IHRoZSBQQ0kgZmlmbyBmb3IgdGhpcyBkZXZpY2UgYWNjb3JkaW5nIHRvIHRoZSBkZXZpY2VzIHByZXNlbnQKKyAqCW9uIHRoZSBidXMgYXQgdGhpcyBwb2ludCBpbiB0aW1lLiBXZSBuZWVkIHRvIHR1cm4gdGhlIHBvc3Qgd3JpdGUgYnVmZmVyCisgKglvZmYgZm9yIEFUQVBJIGRldmljZXMgYXMgd2UgbWF5IG5lZWQgdG8gaXNzdWUgYSB3b3JkIHNpemVkIHdyaXRlIHRvIHRoZQorICoJZGV2aWNlIGFzIHRoZSBmaW5hbCBJL08KKyAqLworCitzdGF0aWMgdm9pZCBhbWRfZmlmb19zZXR1cChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKwlzdGF0aWMgY29uc3QgdTggZmlmb2JpdFsyXSA9IHsgMHhDMCwgMHgzMH07CisJdTggZmlmbyA9IGZpZm9iaXRbYXAtPnBvcnRfbm9dOworCXU4IHI7CisKKworCWF0YV9mb3JfZWFjaF9kZXYoYWRldiwgJmFwLT5saW5rLCBFTkFCTEVEKSB7CisJCWlmIChhZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKQorCQkJZmlmbyA9IDA7CisJfQorCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxMSkgLyogRklGTyBpcyBicm9rZW4gKi8KKwkJZmlmbyA9IDA7CisKKwkvKiBPbiB0aGUgbGF0ZXIgY2hpcHMgdGhlIHJlYWQgcHJlZmV0Y2ggYml0cyBiZWNvbWUgbm8tb3AgYml0cyAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsICZyKTsKKwlyICY9IH5maWZvYml0W2FwLT5wb3J0X25vXTsKKwlyIHw9IGZpZm87CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIHIpOworfQorCisvKioKICAqCWFtZDMzX3NldF9waW9tb2RlCS0Jc2V0IGluaXRpYWwgUElPIG1vZGUgZGF0YQogICoJQGFwOiBBVEEgaW50ZXJmYWNlCiAgKglAYWRldjogQVRBIGRldmljZQpAQCAtMTY3LDIxICsyMDgsMjUgQEAKIAogc3RhdGljIHZvaWQgYW1kMzNfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CisJYW1kX2ZpZm9fc2V0dXAoYXApOwogCXRpbWluZ19zZXR1cChhcCwgYWRldiwgMHg0MCwgYWRldi0+cGlvX21vZGUsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBhbWQ2Nl9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKKwlhbWRfZmlmb19zZXR1cChhcCk7CiAJdGltaW5nX3NldHVwKGFwLCBhZGV2LCAweDQwLCBhZGV2LT5waW9fbW9kZSwgMik7CiB9CiAKIHN0YXRpYyB2b2lkIGFtZDEwMF9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKKwlhbWRfZmlmb19zZXR1cChhcCk7CiAJdGltaW5nX3NldHVwKGFwLCBhZGV2LCAweDQwLCBhZGV2LT5waW9fbW9kZSwgMyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFtZDEzM19zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKKwlhbWRfZmlmb19zZXR1cChhcCk7CiAJdGltaW5nX3NldHVwKGFwLCBhZGV2LCAweDQwLCBhZGV2LT5waW9fbW9kZSwgNCk7CiB9CiAKQEAgLTM5Nyw3NyArNDQyLDg3IEBACiAJLnNldF9kbWFtb2RlCT0gbnYxMzNfc2V0X2RtYW1vZGUsCiB9OwogCitzdGF0aWMgdm9pZCBhbWRfY2xlYXJfZmlmbyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1OCBmaWZvOworCS8qIERpc2FibGUgdGhlIEZJRk8sIHRoZSBGSUZPIGxvZ2ljIHdpbGwgcmUtZW5hYmxlIGl0IGFzCisJICAgYXBwcm9wcmlhdGUgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAmZmlmbyk7CisJZmlmbyAmPSAweDBGOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQxLCBmaWZvKTsKK30KKwogc3RhdGljIGludCBhbWRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1sxMF0gPSB7Ci0JCXsJLyogMDogQU1EIDc0MDEgKi8KKwkJewkvKiAwOiBBTUQgNzQwMSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywJLyogTm8gU1dETUEgKi8KLQkJCS51ZG1hX21hc2sgPSAweDA3LAkvKiBVRE1BIDMzICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCQkucG9ydF9vcHMgPSAmYW1kMzNfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiAxOiBFYXJseSBBTUQ3NDA5IC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwJLyogVURNQSA2NiAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmFtZDY2X3BvcnRfb3BzCiAJCX0sCi0JCXsJLyogMjogQU1EIDc0MDksIG5vIHN3ZG1hIGVycmF0YSAqLworCQl7CS8qIDI6IEFNRCA3NDA5ICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZhbWQ2Nl9wb3J0X29wcwogCQl9LAogCQl7CS8qIDM6IEFNRCA3NDExICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTAwX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogNDogQU1EIDc0NDEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMDBfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiA1OiBBTUQgODExMSovCisJCXsJLyogNTogQU1EIDgxMTEgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAkvKiBVRE1BIDEzMywgbm8gc3dkbWEgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMzNfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiA2OiBBTUQgODExMSBVRE1BIDEwMCAoU2VyZW5hZGUpICovCisJCXsJLyogNjogQU1EIDgxMTEgVURNQSAxMDAgKFNlcmVuYWRlKSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEzM19wb3J0X29wcwogCQl9LAogCQl7CS8qIDc6IE52aWRpYSBOZm9yY2UgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZudjEwMF9wb3J0X29wcwogCQl9LAotCQl7CS8qIDg6IE52aWRpYSBOZm9yY2UyIGFuZCBsYXRlciAqLworCQl7CS8qIDg6IE52aWRpYSBOZm9yY2UyIGFuZCBsYXRlciAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCS8qIFVETUEgMTMzLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkJLnBvcnRfb3BzID0gJm52MTMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogOTogQU1EIENTNTUzNiAoR2VvZGUgY29tcGFuaW9uKSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9CiAJfTsKQEAgLTUwMywxNCArNTU4LDggQEAKIAogCWlmICh0eXBlIDwgMykKIAkJYXRhX3BjaV9ibWRtYV9jbGVhcl9zaW1wbGV4KHBkZXYpOwotCi0JLyogQ2hlY2sgZm9yIEFNRDc0MTEgKi8KLQlpZiAodHlwZSA9PSAzKQotCQkvKiBGSUZPIGlzIGJyb2tlbiAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgZmlmbyAmIDB4MEYpOwotCWVsc2UKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIGZpZm8gfCAweEYwKTsKLQorCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQpCisJCWFtZF9jbGVhcl9maWZvKHBkZXYpOwogCS8qIENhYmxlIGRldGVjdGlvbiBvbiBOdmlkaWEgY2hpcHMgZG9lc24ndCB3b3JrIHRvbyB3ZWxsLAogCSAqIGNhY2hlIEJJT1MgcHJvZ3JhbW1lZCBVRE1BIG1vZGUuCiAJICovCkBAIC01MzYsMTggKzU4NSwxMSBAQAogCQlyZXR1cm4gcmM7CiAKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EKSB7Ci0JCXU4IGZpZm87Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsICZmaWZvKTsKLQkJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDExKQotCQkJLyogRklGTyBpcyBicm9rZW4gKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQxLCBmaWZvICYgMHgwRik7Ci0JCWVsc2UKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQxLCBmaWZvIHwgMHhGMCk7CisJCWFtZF9jbGVhcl9maWZvKHBkZXYpOwogCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MDkgfHwKIAkJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FNRF9DT0JSQV83NDAxKQogCQkJYXRhX3BjaV9ibWRtYV9jbGVhcl9zaW1wbGV4KHBkZXYpOwogCX0KLQogCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYwppbmRleCA2YjMwOTJjLi5kMzMyY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgkJcGVyZm9ybWFuY2UgQWxlc3NhbmRybyBadW1tbyA8YWxlc3NhbmRyby56dW1tb0B0b3dlcnRlY2guaXQ+CiAgKgogICoJVE9ETwotICoJODUwIHNlcmlhbGl6YXRpb24gb25jZSB0aGUgY29yZSBzdXBwb3J0cyBpdAogICoJSW52ZXN0aWdhdGUgbm9fZHNjIG9uIDg1MFIKICAqCUNsb2NrIGRldGVjdAogICovCkBAIC0yOSw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfYXJ0b3AiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjQuNCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC41IgogCiAvKgogICoJVGhlIEFSVE9QIGhhcyAzMyBNaHogYW5kICJvdmVyIGNsb2NrZWQiIHRpbWluZyB0YWJsZXMuIFVudGlsIHdlCkBAIC0yODMsNiArMjgyLDMxIEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDQgKyBhcC0+cG9ydF9ubywgdWx0cmEpOwogfQogCisvKioKKyAqCWFydG9wXzYyMTBfcWNfZGVmZXIJLQlpbXBsZW1lbnQgc2VyaWFsaXphdGlvbgorICoJQHFjOiBjb21tYW5kCisgKgorICoJSXNzdWUgY29tbWFuZHMgcGVyIGhvc3Qgb24gdGhpcyBjaGlwLgorICovCisKK3N0YXRpYyBpbnQgYXJ0b3A2MjEwX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gcWMtPmFwLT5ob3N0OworCXN0cnVjdCBhdGFfcG9ydCAqYWx0ID0gaG9zdC0+cG9ydHNbMSBeIHFjLT5hcC0+cG9ydF9ub107CisJaW50IHJjOworCisJLyogRmlyc3QgYXBwbHkgdGhlIHVzdWFsIHJ1bGVzICovCisJcmMgPSBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyogTm93IGFwcGx5IHNlcmlhbGl6YXRpb24gcnVsZXMuIE9ubHkgYWxsb3cgYSBjb21tYW5kIGlmIHRoZQorCSAgIG90aGVyIGNoYW5uZWwgc3RhdGUgbWFjaGluZSBpcyBpZGxlICovCisJaWYgKGFsdCAmJiBhbHQtPnFjX2FjdGl2ZSkKKwkJcmV0dXJuCUFUQV9ERUZFUl9QT1JUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhcnRvcF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwpAQCAtMjkzLDYgKzMxNyw3IEBACiAJLnNldF9waW9tb2RlCQk9IGFydG9wNjIxMF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gYXJ0b3A2MjEwX3NldF9kbWFtb2RlLAogCS5wcmVyZXNldAkJPSBhcnRvcDYyMTBfcHJlX3Jlc2V0LAorCS5xY19kZWZlcgkJPSBhcnRvcDYyMTBfcWNfZGVmZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXJ0b3A2MjYwX29wcyA9IHsKQEAgLTMyMywyOSArMzQ4LDI5IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjIxMCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjEwX29wcywKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyNnggPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182Mjh4ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI4eF9mYXN0ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CkBAIC0zNjIsMTIgKzM4Nyw4IEBACiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhID09IDApIHsJLyogNjIxMCB2YXJpYW50ICovCiAJCXBwaVswXSA9ICZpbmZvXzYyMTA7Ci0JCXBwaVsxXSA9ICZhdGFfZHVtbXlfcG9ydF9pbmZvOwogCQkvKiBCSU9TIG1heSBoYXZlIGxlZnQgdXMgaW4gVURNQSwgY2xlYXIgaXQgYmVmb3JlIGxpYmF0YSBwcm9iZSAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1NCwgMCk7Ci0JCS8qIEZvciB0aGUgbW9tZW50IChhbHNvIGxhY2tzIGRzYykgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVJUT1AgNjIxMCByZXF1aXJlcyBzZXJpYWxpemUgZnVuY3Rpb25hbGl0eSBub3QgeWV0IHN1cHBvcnRlZCBieSBsaWJhdGEuXG4iKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vjb25kYXJ5IEFUQSBwb3J0cyB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQuXG4iKTsKIAl9CiAJZWxzZSBpZiAoaWQtPmRyaXZlcl9kYXRhID09IDEpCS8qIDYyNjAgKi8KIAkJcHBpWzBdID0gJmluZm9fNjI2eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXQzMi5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKaW5kZXggYWI2MTA5NS4uNWMxMjlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKQEAgLTY3LDcgKzY3LDkgQEAKICAqCiAgKiBBbHRlciBQSU9fTUFTSyBiZWxvdyBhY2NvcmRpbmcgdG8gdGFibGUgdG8gc2V0IG1heGltYWwgUElPIG1vZGUuCiAgKi8KLSNkZWZpbmUgUElPX01BU0sgKDB4MWYpCitlbnVtIHsKKyAgUElPX01BU0sgPSBBVEFfUElPNCwKK307CiAKIC8qCiAgKiBTdHJ1Y3QgY29udGFpbmluZyBwcml2YXRlIGluZm9ybWF0aW9uIGFib3V0IGRldmljZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IDUwNmFkZGUuLmJlYzBiOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMjIwLDkgKzIyMCw5IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNiwJLyogTm8gTVdETUEwIHN1cHBvcnQgKi8KLQkJLnVkbWFfbWFzayA9IDB4M0YsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZhdGlpeHBfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgYXRpaXhwX2VuYWJsZV9iaXRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggMTA1MGZlZC4uYzRiNDdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwpAQCAtMTUwMiw3ICsxNTAyLDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MKIAkJCQl8IEFUQV9GTEFHX01NSU8KIAkJCQl8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IDAsCiAJCS51ZG1hX21hc2sJPSAwLAogCQkucG9ydF9vcHMJPSAmYmZpbl9wYXRhX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCmluZGV4IDM0YTM5NDIuLjVhY2Y5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYwpAQCAtMjExLDcgKzIxMSw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmY21kNjQwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCAzMTY3ZDhmLi5mOThkZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTI5OSw0MCArMjk5LDQwIEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGNtZF9pbmZvWzZdID0gewogCQl7CS8qIENNRCA2NDMgLSBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgd2l0aCBicm9rZW4gVURNQSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHdpdGggd29ya2luZyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHJldiAxICAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NDZyMV9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDggKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDkgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwppbmRleCAxMTg2YmNkLi5kYjZhOTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY3RsX3BvcnRbXSA9IHsgMHgzRjYsIDB4Mzc2IH07CiAJc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzCT0gJmNzNTUyMF9wb3J0X29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbMl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwppbmRleCBiYmE0NTMzLi5jOTc0YjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKQEAgLTI5OCwxNSArMjk4LDE1IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZjczU1MzBfcG9ydF9vcHMKIAl9OwogCS8qIFRoZSBkb2NraW5nIGNvbm5lY3RvciBkb2Vzbid0IGRvIFVETUEsIGFuZCBpdCBzZWVtcyBub3QgTVdETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYWxtYXhfc2Vjb25kYXJ5ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJmNzNTUzMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKaW5kZXggOGIyMzZhZi4uZDMzYWEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCkBAIC0xODEsOCArMTgxLDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmY3M1NTM1X3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCmluZGV4IGFmZWQ5MjkuLjZkYTRjYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYwpAQCAtMjQxLDggKzI0MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmNzNTUzNl9wb3J0X29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwppbmRleCBkNTQ2NDI1Li44ZmIwNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwpAQCAtMTI0LDggKzEyNCw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJmN5ODJjNjkzX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmYXRhX2R1bW15X3BvcnRfaW5mbyB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwppbmRleCBhYzYzOTJlLi4yMDg1ZTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwpAQCAtMjUxLDkgKzI1MSw5IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTEtMiAqLwotCQkudWRtYV9tYXNrIAk9IDB4MGYsIC8qIFVETUEgNjYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZlZmFyX29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCmluZGV4IDY1YzI4ZTUuLmQ3ZjJkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwpAQCAtMzM2LDggKzMzNiw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzY2ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZocHQzNjZfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKaW5kZXggNDIxNjM5OS4uODFhYjU3MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtNzUzLDU1ICs3NTMsNTUgQEAKIAkvKiBIUFQzNzAgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MEEgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwYSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwYV9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MF8zMyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzBBIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MGFfMzMgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3MGFfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MSwgMzcyIGFuZCBmcmllbmRzIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MiA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaHB0MzcyX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IHByZXJlc2V0IG1ldGhvZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3NF9mbjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3Ml9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0Mzc0X2ZuMSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0Mzc0X2ZuMV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IGQ1YzlmZDcuLjNkNTlmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC00NDEsOCArNDQxLDggQEAKIAkvKiBIUFQzNzJOIGFuZCBmcmllbmRzIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzeDJuX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCmluZGV4IGYxOWNjNjQuLjdlMzEwMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYwpAQCAtMTg4LDExICsxODgsMTEgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9IUFQzWDNfRE1BKQogCQkvKiBGdXJ0aGVyIGRlYnVnIG5lZWRlZCAqLwotCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCS51ZG1hX21hc2sgPSAweDA3LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAjZW5kaWYKIAkJLnBvcnRfb3BzID0gJmhwdDN4M19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwppbmRleCBjZjllOTg0Li5lNzM0N2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiAJaWYgKGVjLT5kbWEgIT0gTk9fRE1BICYmICFyZXF1ZXN0X2RtYShlYy0+ZG1hLCBEUlZfTkFNRSkpIHsKIAkJc3RhdGUtPmRtYSA9IGVjLT5kbWE7Ci0JCWluZm8tPm13ZG1hX21hc2sgPSAweDA3OwkvKiBNVzAuLjIgKi8KKwkJaW5mby0+bXdkbWFfbWFzayA9IEFUQV9NV0RNQTI7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NzMsNyArNDczLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnJfcG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07CiAKLQkJYXAtPnBpb19tYXNrID0gMHgxZjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5td2RtYV9tYXNrID0gaW5mby0+bXdkbWFfbWFzazsKIAkJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAJCWFwLT5vcHMgPSAmcGF0YV9pY3NpZGVfcG9ydF9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jIGIvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYwppbmRleCAxNWNkYjkxLi40YmNlYjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9pc2FwbnAiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi41IgogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpc2FwbnBfc2h0ID0gewogCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKQEAgLTI4LDYgKzI4LDEzIEBACiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiB9OwogCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaXNhcG5wX25vYWx0X3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAorCS8qIE5vIGFsdHN0YXR1cyBzbyB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgbG9zdCBpbnRlcnJ1cHQgcG9sbCAqLworCS5sb3N0X2ludGVycnVwdCA9IEFUQV9PUF9OVUxMLAorfTsKKwogLyoqCiAgKglpc2FwbnBfaW5pdF9vbmUJCS0JYXR0YWNoIGFuIGlzYXBucCBpbnRlcmZhY2UKICAqCUBpZGV2OiBQblAgZGV2aWNlCkBAIC02NSw4ICs3Miw4IEBACiAKIAlhcCA9IGhvc3QtPnBvcnRzWzBdOwogCi0JYXAtPm9wcyA9ICZpc2FwbnBfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMTsKKwlhcC0+b3BzID0gJmlzYXBucF9ub2FsdF9wb3J0X29wczsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPMDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBjbWRfYWRkcjsKQEAgLTc2LDYgKzgzLDcgQEAKIAkJCQkJICAgcG5wX3BvcnRfc3RhcnQoaWRldiwgMSksIDEpOwogCQlhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0gY3RsX2FkZHI7CiAJCWFwLT5pb2FkZHIuY3RsX2FkZHIgPSBjdGxfYWRkcjsKKwkJYXAtPm9wcyA9ICZpc2FwbnBfcG9ydF9vcHM7CiAJfQogCiAJYXRhX3NmZl9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKaW5kZXggYzExM2Q3Yy4uZjE1NmRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCkBAIC0yNjIsOCArMjYyLDggQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE0LCAvKiBGSVhNRTogd2FudCBVRE1BIDEwMD8gKi8KIAkJLnBvcnRfb3BzCT0gJml0ODIxM19vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCmluZGV4IGYxYmIyZjkuLjE4OGJjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwpAQCAtNTU3LDYgKzU1Nyw5IEBACiAJCWlkWzgzXSB8PSAweDQ0MDA7CS8qIFdvcmQgODMgaXMgdmFsaWQgYW5kIExCQTQ4ICovCiAJCWlkWzg2XSB8PSAweDA0MDA7CS8qIExCQTQ4IG9uICovCiAJCWlkW0FUQV9JRF9NQUpPUl9WRVJdIHw9IDB4MUY7CisJCS8qIENsZWFyIHRoZSBzZXJpYWwgbnVtYmVyIGJlY2F1c2UgaXQncyBkaWZmZXJlbnQgZWFjaCBib290CisJCSAgIHdoaWNoIGJyZWFrcyB2YWxpZGF0aW9uIG9uIHJlc3VtZSAqLworCQltZW1zZXQoJmlkW0FUQV9JRF9TRVJOT10sIDB4MjAsIEFUQV9JRF9TRVJOT19MRU4pOwogCX0KIAlyZXR1cm4gZXJyX21hc2s7CiB9CkBAIC04NzIsMjkgKzg3NSwyOSBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc21hcnQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9zbWFydF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcGFzc3RocnUgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9wYXNzdGhydV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcmRjID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZpdDgyMXhfcmRjX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19yZGNfMTEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLyogTm8gVURNQSAqLwogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3JkY19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwppbmRleCBiMTczYzE1Li4xOWZkZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKIAlhcC0+b3BzCT0gJml4cDR4eF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAweDFmOyAvKiBQSU80ICovCisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19OT19BVEFQSTsKIAogCWl4cDR4eF9zZXR1cF9wb3J0KGFwLCBkYXRhLCBjczAtPnN0YXJ0LCBjczEtPnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKaW5kZXggMzhjZjFhYi4uM2ExNDc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKQEAgLTEzNiw4ICsxMzYsOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAKIAkJLnBvcnRfb3BzCT0gJmptaWNyb25fb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKaW5kZXggNmMxZDc3OC4uM2Y4MzBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIHN0YXRpYyBpbnQgd2luYm9uZDsJCS8qIFNldCB0byBwcm9iZSBXaW5ib25kIGNvbnRyb2xsZXJzLAogCQkJCQlnaXZlIEkvTyBwb3J0IGlmIG5vbiBzdGFuZGFyZCAqLwogc3RhdGljIGludCBhdXRvc3BlZWQ7CQkvKiBDaGlwIHByZXNlbnQgd2hpY2ggc25vb3BzIHNwZWVkIGNoYW5nZXMgKi8KLXN0YXRpYyBpbnQgcGlvX21hc2sgPSAweDFGOwkvKiBQSU8gcmFuZ2UgZm9yIGF1dG9zcGVlZCBkZXZpY2VzICovCitzdGF0aWMgaW50IHBpb19tYXNrID0gQVRBX1BJTzQ7CS8qIFBJTyByYW5nZSBmb3IgYXV0b3NwZWVkIGRldmljZXMgKi8KIHN0YXRpYyBpbnQgaW9yZHlfbWFzayA9IDB4RkZGRkZGRkY7CS8qIFVzZSBpb3JkeSBpZiBhdmFpbGFibGUgKi8KIAogLyoqCkBAIC0yODMsOSArMjgzLDEwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHBkY19kYXRhX3hmZXJfdmxiKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCiAJCQl1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBydykKIHsKLQlpZiAoYXRhX2lkX2hhc19kd29yZF9pbyhkZXYtPmlkKSkgeworCWludCBzbG9wID0gYnVmbGVuICYgMzsKKwkvKiAzMmJpdCBJL08gY2FwYWJsZSAqYW5kKiB3ZSBuZWVkIHRvIHdyaXRlIGEgd2hvbGUgbnVtYmVyIG9mIGR3b3JkcyAqLworCWlmIChhdGFfaWRfaGFzX2R3b3JkX2lvKGRldi0+aWQpICYmIChzbG9wID09IDAgfHwgc2xvcCA9PSAzKSkgewogCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5saW5rLT5hcDsKLQkJaW50IHNsb3AgPSBidWZsZW4gJiAzOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTczNSw3ICs3MzYsNyBAQAogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhZGV2LT5saW5rLT5hcDsKIAlpbnQgc2xvcCA9IGJ1ZmxlbiAmIDM7CiAKLQlpZiAoYXRhX2lkX2hhc19kd29yZF9pbyhhZGV2LT5pZCkpIHsKKwlpZiAoYXRhX2lkX2hhc19kd29yZF9pbyhhZGV2LT5pZCkgJiYgKHNsb3AgPT0gMCB8fCBzbG9wID09IDMpKSB7CiAJCWlmIChydyA9PSBXUklURSkKIAkJCWlvd3JpdGUzMl9yZXAoYXAtPmlvYWRkci5kYXRhX2FkZHIsIGJ1ZiwgYnVmbGVuID4+IDIpOwogCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCmluZGV4IDc2ZTM5OWIuLjIwOTZmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCkBAIC0xMzYsOCArMTM2LDggQEAKIAkJLyogU2xhdmUgcG9zc2libGUgYXMgaXRzIG1hZ2ljYWxseSBtYXBwZWQgbm90IHJlYWwgKi8KIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCmluZGV4IDUwYWU2ZDEuLjY4ZDI3YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNzM3LDEwICs3MzcsMTAgQEAKIAkgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAibXdkbWEtbW9kZSIsICZwcm9wbGVuKTsKIAlpZiAoKHByb3ApICYmIChwcm9wbGVuID49IDQpKQotCQltd2RtYV9tYXNrID0gMHg3ICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOworCQltd2RtYV9tYXNrID0gQVRBX01XRE1BMiAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAidWRtYS1tb2RlIiwgJnByb3BsZW4pOwogCWlmICgocHJvcCkgJiYgKHByb3BsZW4gPj0gNCkpCi0JCXVkbWFfbWFzayA9IDB4NyAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKKwkJdWRtYV9tYXNrID0gQVRBX1VETUEyICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOwogCiAJYXRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKIAlpZiAoYXRhX2lycSA9PSBOT19JUlEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYwppbmRleCBhYTU3NmNhLi5iMjFmMDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkgICB0aGUgTVBJSVggeW91ciBib3ggZ29lcyBjYXN0b3JzIHVwICovCiAKIAlhcC0+b3BzID0gJm1waWl4X3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4MUY7CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IDlkYzA1ZTEuLmJkYjIzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC01MSw4ICs1MSw4IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkvKiBBY3R1YWxseSB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGVzZSBhcyB0aGUKIAkJICAgZmlybXdhcmUgZGVhbHMgd2l0aCBpdCAqLwotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwgLyogVURNQSAxMzMgKi8KIAkJLnBvcnRfb3BzCT0gJm5ldGNlbGxfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jCmluZGV4IDRkZDlhM2IuLjBmYjZiMWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcC0+b3BzID0gJm5pbmphMzJfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMHgxRjsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBiYXNlICsgMHgxMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggNDBkNDExYy4uY2E1M2ZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDBGLAorCQkucGlvX21hc2sgPSBBVEFfUElPMywKIAkJLnBvcnRfb3BzID0gJm5zODc0MTBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKaW5kZXggODliZjVmOC4uNzczYjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKQEAgLTM0Niw4ICszNDYsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm5zODc0MTVfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CkBAIC0zNTUsOCArMzU1LDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19TVVBFUklPKQogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvODc1NjAgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMJPSAmbnM4NzU2MF9wYXRhX29wcywKIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwppbmRleCAwZmU0ZWYzLi5lZmUyYzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCWFwLT5wcml2YXRlX2RhdGEgPSBjZl9wb3J0OwogCWNmX3BvcnQtPmFwID0gYXA7CiAJYXAtPm9wcyA9ICZvY3Rlb25fY2Zfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4N2Y7IC8qIFN1cHBvcnQgUElPIDAtNiAqLworCWFwLT5waW9fbWFzayA9IEFUQV9QSU82OwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZCiAJCSAgfCBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HOwogCkBAIC05MDAsNyArOTAwLDcgQEAKIAkJYXAtPmlvYWRkci5jdGxfYWRkcgk9IGNzMSArICg2IDw8IDEpICsgMTsKIAkJb2N0ZW9uX2NmX29wcy5zZmZfZGF0YV94ZmVyID0gb2N0ZW9uX2NmX2RhdGFfeGZlcjE2OwogCi0JCWFwLT5td2RtYV9tYXNrCT0gMHgxZjsgLyogU3VwcG9ydCBNV0RNQSAwLTQgKi8KKwkJYXAtPm13ZG1hX21hc2sJPSBBVEFfTVdETUE0OwogCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCQlpcnFfaGFuZGxlciA9IG9jdGVvbl9jZl9pbnRlcnJ1cHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggMmMxYTkxYy4uODRhYzUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm9sZHBpaXhfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCmluZGV4IGU0ZmE0ZDUuLjk5ZWRkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZvcHRpX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCmluZGV4IDkzYmI2ZTkuLjg2ODg1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCkBAIC0zOTksMTUgKzM5OSwxNSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzgyYzcwMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmb3B0aWRtYV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZvcHRpcGx1c19wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb184MmM3MDAsIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDY0YjJlMjIuLmY0ZDAwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfcGNtY2lhIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuNSIKIAogLyoKICAqCVByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gZ2x1ZSBzdHVmZiB0b2dldGhlcgpAQCAtMTI2LDYgKzEyNiwzNyBAQAogCXJldHVybiBidWZsZW47CiB9CiAKKy8qKgorICoJcGNtY2lhXzhiaXRfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisgCit2b2lkIHBjbWNpYV84Yml0X2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKworCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBpbmNvbWluZyBkYXRhIHdoZW4gYSBjb21tYW5kIHdhcyBydW5uaW5nICovCisJaWYgKHFjID09IE5VTEwgfHwgcWMtPmRtYV9kaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuOworCisJYXAgPSBxYy0+YXA7CisKKwkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLworCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQorCQkJCQkJCSYmIGNvdW50KysgPCA2NTUzNjspCisJCWlvcmVhZDgoYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImRyYWluZWQgJWQgYnl0ZXMgdG8gY2xlYXIgRFJRLlxuIiwKKwkJCQkJCQkJY291bnQpOworCit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBjbWNpYV9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMTQzLDYgKzE3NCw3IEBACiAJLnNmZl9kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyXzhiaXQsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlXzhiaXQsCisJLmRyYWluX2ZpZm8JPSBwY21jaWFfOGJpdF9kcmFpbl9maWZvLAogfTsKIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCkBAIC0yOTksNyArMzMxLDcgQEAKIAkJYXAgPSBob3N0LT5wb3J0c1twXTsKIAogCQlhcC0+b3BzID0gb3BzOwotCQlhcC0+cGlvX21hc2sgPSAxOwkJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPMDsJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGlvX2FkZHIgKyAweDEwICogcDsKIAkJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0bF9hZGRyICsgMHgxMCAqIHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKaW5kZXggZTk0ZWZjYy4uY2E1Y2FkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwpAQCAtMTUyLDE4ICsxNTIsMTggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJICAgICAgICAgICAgICAgICAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmcGRjMjAyN3hfcGF0YTEwMF9vcHMsCiAJfSwKIAkvKiBQRENfVURNQV8xMzMgKi8KIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKICAgICAgICAgICAgICAgICAgICAgICAgIAkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsIC8qIHVkbWEwLTYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkYzIwMjd4X3BhdGExMzNfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKaW5kZXggNzk5YTZhMC4uNWZlZGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCkBAIC0yOTEsMjIgKzI5MSwyMiBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzNdID0gewogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI0eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwppbmRleCBmMWIyNmY3Li40NTg3OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKQEAgLTIxMiwxMSArMjEyLDExIEBACiAKIAlpZiAodHlwZSA9PSA2NTgwKSB7CiAJCWFwLT5vcHMgPSAmcWRpNjU4MF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCX0gZWxzZSB7CiAJCWFwLT5vcHMgPSAmcWRpNjUwMF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgwNzsJLyogQWN0dWFsbHkgUElPMyAhSU9SRFkgaXMgcG9zc2libGUgKi8KKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzI7IC8qIEFjdHVhbGx5IFBJTzMgIUlPUkRZIGlzIHBvc3NpYmxlICovCiAJCWFwLT5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19JT1JEWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKaW5kZXggNjk1ZDQ0YS4uNDQwMWIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKQEAgLTIxNiw5ICsyMTYsOSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KLQkJLnVkbWFfbWFzawk9IDB4MTQsIC8qIFVETUEzMy82NiBvbmx5ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTI0X09OTFksCiAJCS5wb3J0X29wcwk9ICZyYWRpc3lzX3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCmluZGV4IGViZmNkYTIuLjhlM2NkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKQEAgLTQ4LDYzICs0OCwxMSBAQAogc3RydWN0IHJiNTMyX2NmX2luZm8gewogCXZvaWQgX19pb21lbQkqaW9iYXNlOwogCXVuc2lnbmVkIGludAlncGlvX2xpbmU7Ci0JaW50CQlmcm96ZW47CiAJdW5zaWduZWQgaW50CWlycTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmI1MzJfcGF0YV9maW5pc2hfaW8oc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gYXAtPmhvc3Q7Ci0Jc3RydWN0IHJiNTMyX2NmX2luZm8gKmluZm8gPSBhaC0+cHJpdmF0ZV9kYXRhOwotCi0JLyogRklYTUU6IEtlZXAgcHJldmlvdXMgZGVsYXkuIElmIHRoaXMgaXMgbWVyZWx5IGEgZmVuY2UgdGhlbgotCSAgIGF0YV9zZmZfc3luYyBtaWdodCBiZSBzdWZmaWNpZW50LiAqLwotCWF0YV9zZmZfZG1hX3BhdXNlKGFwKTsKLQluZGVsYXkoUkI1MDBfQ0ZfSU9fREVMQVkpOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCWNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXdyaXRlYih0Zi0+Y29tbWFuZCwgYXAtPmlvYWRkci5jb21tYW5kX2FkZHIpOwotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFwKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByYjUzMl9wYXRhX2RhdGFfeGZlcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCXVuc2lnbmVkIGludCBidWZsZW4sIGludCB3cml0ZV9kYXRhKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhZGV2LT5saW5rLT5hcDsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOwotCWludCByZXRsZW4gPSBidWZsZW47Ci0KLQlpZiAod3JpdGVfZGF0YSkgewotCQlmb3IgKDsgYnVmbGVuID4gMDsgYnVmbGVuLS0sIGJ1ZisrKQotCQkJd3JpdGViKCpidWYsIGlvYWRkcik7Ci0JfSBlbHNlIHsKLQkJZm9yICg7IGJ1ZmxlbiA+IDA7IGJ1Zmxlbi0tLCBidWYrKykKLQkJCSpidWYgPSByZWFkYihpb2FkZHIpOwotCX0KLQotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFkZXYtPmxpbmstPmFwKTsKLQlyZXR1cm4gcmV0bGVuOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHJiNTMyX3BhdGFfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDA7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCByYjUzMl9wYXRhX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gZGV2X2luc3RhbmNlOwpAQCAtMTEyLDggKzYwLDcgQEAKIAogCWlmIChncGlvX2dldF92YWx1ZShpbmZvLT5ncGlvX2xpbmUpKSB7CiAJCXNldF9pcnFfdHlwZShpbmZvLT5pcnEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0JCWlmICghaW5mby0+ZnJvemVuKQotCQkJYXRhX3NmZl9pbnRlcnJ1cHQoaW5mby0+aXJxLCBkZXZfaW5zdGFuY2UpOworCQlhdGFfc2ZmX2ludGVycnVwdChpbmZvLT5pcnEsIGRldl9pbnN0YW5jZSk7CiAJfSBlbHNlIHsKIAkJc2V0X2lycV90eXBlKGluZm8tPmlycSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7CiAJfQpAQCAtMTIzLDEwICs3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByYjUzMl9wYXRhX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKLQkuc2ZmX2V4ZWNfY29tbWFuZAk9IHJiNTMyX3BhdGFfZXhlY19jb21tYW5kLAotCS5zZmZfZGF0YV94ZmVyCQk9IHJiNTMyX3BhdGFfZGF0YV94ZmVyLAotCS5mcmVlemUJCQk9IHJiNTMyX3BhdGFfZnJlZXplLAotCS50aGF3CQkJPSByYjUzMl9wYXRhX3RoYXcsCisJLnNmZl9kYXRhX3hmZXIJCT0gYXRhX3NmZl9kYXRhX3hmZXIzMiwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTQ1LDcgKzg5LDcgQEAKIAlhcCA9IGFoLT5wb3J0c1swXTsKIAogCWFwLT5vcHMJCT0gJnJiNTMyX3BhdGFfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrCT0gMHgxZjsgLyogUElPNCAqLworCWFwLT5waW9fbWFzawk9IEFUQV9QSU80OwogCWFwLT5mbGFncwk9IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX01NSU87CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyCT0gaW5mby0+aW9iYXNlICsgUkI1MDBfQ0ZfUkVHX0JBU0U7CkBAIC0xNjAsNyArMTA0LDcgQEAKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgcmI1MzJfcGF0YV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOworCWludCBpcnE7CiAJaW50IGdwaW87CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGF0YV9ob3N0ICphaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IDQ2ZDZiYzEuLjBjNTc0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtODgsNyArODgsNyBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJnJ6MTAwMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggOWE0YmRjYS4uZjQ5ODE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yLDcgKzIsNiBAQAogICogTmV3IEFUQSBsYXllciBTQzEyMDAgZHJpdmVyCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqIFRPRE86IE1vZGUgc2VsZWN0aW9uIGZpbHRlcmluZwotICogVE9ETzogQ2FuJ3QgZW5hYmxlIHNlY29uZCBjaGFubmVsIHVudGlsIEFUQSBjb3JlIGhhcyBzZXJpYWxpemUKICAqIFRPRE86IE5lZWRzIGN1c3RvbSBETUEgY2xlYW51cCBjb2RlCiAgKgogICogQmFzZWQgdmVyeSBoZWF2aWx5IG9uCkBAIC0xNzgsNiArMTc3LDMxIEBACiAJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCisvKioKKyAqCXNjMTIwMF9xY19kZWZlcgktCWltcGxlbWVudCBzZXJpYWxpemF0aW9uCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglTZXJpYWxpemUgY29tbWFuZCBpc3N1ZSBvbiB0aGlzIGNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIGludCBzYzEyMDBfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBOb3cgYXBwbHkgc2VyaWFsaXphdGlvbiBydWxlcy4gT25seSBhbGxvdyBhIGNvbW1hbmQgaWYgdGhlCisJICAgb3RoZXIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KKwlpZiAoYWx0ICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4JQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjMTIwMF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQk9IExJQkFUQV9EVU1CX01BWF9QUkQsCkBAIC0xODcsNiArMjExLDcgQEAKIAkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5xY19wcmVwIAk9IGF0YV9zZmZfZHVtYl9xY19wcmVwLAogCS5xY19pc3N1ZQk9IHNjMTIwMF9xY19pc3N1ZSwKKwkucWNfZGVmZXIJPSBzYzEyMDBfcWNfZGVmZXIsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gc2MxMjAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHNjMTIwMF9zZXRfZG1hbW9kZSwKQEAgLTIwNSwxMyArMjMwLDEzIEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwogCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCB9OwogCiAJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2MxMjAwX3NodCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCBkNDQ3ZjFjLi40MjU3ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTEwMDEsOCArMTAwMSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NjX3BvcnRfaW5mb1tdID0gewogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDAwLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLyogTm8gTVdETUEgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnNjY19wYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zY2guYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKaW5kZXggNmFlZWVlYi4uOTljY2ViNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2guYwpAQCAtODQsOSArODQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NoX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSBBVEFfUElPNCwgICAvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsIC8qIG13ZG1hMC0yICovCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgIC8qIHVkbWEwLTUgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2NoX3BhdGFfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDhkMmZkOWQuLmJlYWVkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKQEAgLTM5OCwyNiArMzk4LDI2IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bNF0gPSB7CiAJCXsgLyogT1NCNCAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19vc2I0X3BvcnRfb3BzCiAJCX0sIHsgLyogT1NCNCBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSAweDAwLAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkvKiBObyBVRE1BICovCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX2NzYl9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgLSBsYXRlciByZXZpc2lvbnMqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3NfY3NiX3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDllNzY0ZTUuLjRjYjY0OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMjgyLDE1ICsyODIsMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmc2lsNjgwX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbG93ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZzaWw2ODBfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKaW5kZXggMjdjZWI0Mi4uNDg4ZTc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCkBAIC01NTIsNTEgKzU1Miw1NyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJPSAweDA3LAotCS51ZG1hX21hc2sJPSAwLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkvKiBObyBVRE1BICovCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzMzID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCT0gMHgwNywKLQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAkvKiBVRE1BIDMzICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzY2ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLworCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJLnBvcnRfb3BzCT0gJnNpc182Nl9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2lzXzEwMF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwX2Vhcmx5ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzMgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX29wcywKIH07CiBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzM19mb3Jfc2F0YSA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Zvcl9zYXRhX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZWFybHkgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Vhcmx5X29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKaW5kZXggMWIwZTdiNi4uMjlmNzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwpAQCAtMjgzLDEzICsyODMsMTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19kbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNsODJjMTA1X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZzbDgyYzEwNV9wb3J0X29wcwogCX07CiAJLyogZm9yIG5vdyB1c2Ugb25seSB0aGUgZmlyc3QgcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwppbmRleCBlZjk1OTc1Li5mMWYxM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwpAQCAtMTkxLDggKzE5MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnRyaWZsZXhfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDc5YTZjOWEuLmIwOGU2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMTEwLDcgKzExMCw4IEBACiAJeyAidnQ4MjM3cyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdTLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODI1MSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyNTEsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgImN4NzAwIiwJUENJX0RFVklDRV9JRF9WSUFfQ1g3MDAsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAotCXsgInZ0NjQxMCIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTAsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTfSwKKwl7ICJ2dDY0MTAiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDEwLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAorCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LApAQCAtNDIxLDQ2ICs0MjIsNDYgQEAKIAkvKiBFYXJseSBWSUEgd2l0aG91dCBVRE1BIHN1cHBvcnQgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX213ZG1hX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogRGl0dG8gd2l0aCBJUlEgbWFza2luZyByZXF1aXJlZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mb19ib3JrZWQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wc19ub2lycSwKIAl9OwogCS8qIFZJQSBVRE1BIDMzIGRldmljZXMgKGFuZCBib3JrZWQgNjYpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMzNfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSA2NiBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hNjZfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSAxMDAgZGV2aWNlcyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTEwMF9pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFVETUExMzMgd2l0aCBiYWQgQVNUIChBbGwgY3VycmVudCAxMzMpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogRklYTUU6IHNob3VsZCBjaGVjayBub3J0aCBicmlkZ2UgKi8KIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CkBAIC01OTMsNiArNTk0LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmlhW10gPSB7CisJeyBQQ0lfVkRFVklDRShWSUEsIDB4MDQxNSksIH0sCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MDU3MSksIH0sCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MDU4MSksIH0sCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MTU3MSksIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCmluZGV4IDMxOWUxNjQuLjZkODYxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJYXRhX3BvcnRfZGVzYyhhcCwgImNtZCAweCVseCBjdGwgMHglbHgiLCBjbWRfcG9ydCwgY3RsX3BvcnQpOwogCiAJCWFwLT5vcHMgPSAmd2luYm9uZF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCQlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCmluZGV4IGJlNTM1NDUuLjM5NTg4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwpAQCAtMTQ4LDYgKzE0OCw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWRtYV9hdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKIAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKKwogCS5jaGVja19hdGFwaV9kbWEJPSBhZG1hX2NoZWNrX2F0YXBpX2RtYSwKIAkucWNfcHJlcAkJPSBhZG1hX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFkbWFfcWNfaXNzdWUsCkBAIC0xNjYsNyArMTY4LDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmYWRtYV9hdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCA1NWJjODhjLi5jMmU5MGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTEyNzksOCArMTI3OSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2F0YV9mc2xfcG9ydF9pbmZvW10gPSB7CiAJewogCSAuZmxhZ3MgPSBTQVRBX0ZTTF9IT1NUX0ZMQUdTLAotCSAucGlvX21hc2sgPSAweDFmLAkvKiBwaW8gMC00ICovCi0JIC51ZG1hX21hc2sgPSAweDdmLAkvKiB1ZG1hIDAtNiAqLworCSAucGlvX21hc2sgPSBBVEFfUElPNCwKKwkgLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkgLnBvcnRfb3BzID0gJnNhdGFfZnNsX29wcywKIAkgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKaW5kZXggZmJiZDg3Yy4uMzA1YTRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwpAQCAtNzQ0LDggKzc0NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmljX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19QSU9fRE1BLAotCS5waW9fbWFzawkJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawkJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCS5waW9fbWFzawkJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawkJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwkJPSAmaW5pY19wb3J0X29wcwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCA0YWUxYTQxLi5hMzc3MjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0xLDEwICsxLDEzIEBACiAvKgogICogc2F0YV9tdi5jIC0gTWFydmVsbCBTQVRBIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgMjAwODogTWFydmVsbCBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDk6IE1hcnZlbGwgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNTogRU1DIENvcnBvcmF0aW9uLCBhbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJldHQgUnVzcy4KKyAqIEV4dGVuc2l2ZSBvdmVyaGF1bCBhbmQgZW5oYW5jZW1lbnQgYnkgTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+LgorICoKICAqIFBsZWFzZSBBTFdBWVMgY29weSBsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnIG9uIGVtYWlscy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMjAgKzI4LDEzIEBACiAvKgogICogc2F0YV9tdiBUT0RPIGxpc3Q6CiAgKgotICogLS0+IEVycmF0YSB3b3JrYXJvdW5kIGZvciBOQ1EgZGV2aWNlIGVycm9ycy4KLSAqCiAgKiAtLT4gTW9yZSBlcnJhdGEgd29ya2Fyb3VuZHMgZm9yIFBDSS1YLgogICoKICAqIC0tPiBDb21wbGV0ZSBhIGZ1bGwgZXJyYXRhIGF1ZGl0IGZvciBhbGwgY2hpcHNldHMgdG8gaWRlbnRpZnkgb3RoZXJzLgogICoKLSAqIC0tPiBBVEFQSSBzdXBwb3J0IChNYXJ2ZWxsIGNsYWltcyB0aGUgNjB4eC83MHh4IGNoaXBzIGNhbiBkbyBpdCkuCi0gKgogICogLS0+IERldmVsb3AgYSBsb3ctcG93ZXItY29uc3VtcHRpb24gc3RyYXRlZ3ksIGFuZCBpbXBsZW1lbnQgaXQuCiAgKgotICogLS0+IFtFeHBlcmltZW50LCBsb3cgcHJpb3JpdHldIEludmVzdGlnYXRlIGludGVycnVwdCBjb2FsZXNjaW5nLgotICogICAgICAgUXVpdGUgb2Z0ZW4sIGVzcGVjaWFsbHkgd2l0aCBQQ0kgTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0cyAoTVNJKSwKLSAqICAgICAgIHRoZSBvdmVyaGVhZCByZWR1Y2VkIGJ5IGludGVycnVwdCBtaXRpZ2F0aW9uIGlzIHF1aXRlIG9mdGVuIG5vdAotICogICAgICAgd29ydGggdGhlIGxhdGVuY3kgY29zdC4KKyAqIC0tPiBBZGQgc3lzZnMgYXR0cmlidXRlcyBmb3IgcGVyLWNoaXAgLyBwZXItSEMgSVJRIGNvYWxlc2NpbmcgdGhyZXNob2xkcy4KICAqCiAgKiAtLT4gW0V4cGVyaW1lbnQsIE1hcnZlbGwgdmFsdWUgYWRkZWRdIElzIGl0IHBvc3NpYmxlIHRvIHVzZSB0YXJnZXQKICAqICAgICAgIG1vZGUgdG8gY3Jvc3MtY29ubmVjdCB0d28gTGludXggYm94ZXMgd2l0aCBNYXJ2ZWxsIGNhcmRzPyAgSWYgc28sCkBAIC02OCw3ICs2NCwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX212IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4yNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMjciCisKKy8qCisgKiBtb2R1bGUgb3B0aW9ucworICovCisKK3N0YXRpYyBpbnQgbXNpOworI2lmZGVmIENPTkZJR19QQ0kKK21vZHVsZV9wYXJhbShtc2ksIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7CisjZW5kaWYKKworc3RhdGljIGludCBpcnFfY29hbGVzY2luZ19pb19jb3VudDsKK21vZHVsZV9wYXJhbShpcnFfY29hbGVzY2luZ19pb19jb3VudCwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2NvYWxlc2NpbmdfaW9fY291bnQsCisJCSAiSVJRIGNvYWxlc2NpbmcgSS9PIGNvdW50IHRocmVzaG9sZCAoMC4uMjU1KSIpOworCitzdGF0aWMgaW50IGlycV9jb2FsZXNjaW5nX3VzZWNzOworbW9kdWxlX3BhcmFtKGlycV9jb2FsZXNjaW5nX3VzZWNzLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpcnFfY29hbGVzY2luZ191c2VjcywKKwkJICJJUlEgY29hbGVzY2luZyB0aW1lIHRocmVzaG9sZCBpbiB1c2VjcyIpOwogCiBlbnVtIHsKIAkvKiBCQVIncyBhcmUgZW51bWVyYXRlZCBpbiB0ZXJtcyBvZiBwY2lfcmVzb3VyY2Vfc3RhcnQoKSB0ZXJtcyAqLwpAQCAtNzksMTMgKzk1LDMyIEBACiAJTVZfTUFKT1JfUkVHX0FSRUFfU1oJPSAweDEwMDAwLAkvKiA2NEtCICovCiAJTVZfTUlOT1JfUkVHX0FSRUFfU1oJPSAweDIwMDAsCS8qIDhLQiAqLwogCisJLyogRm9yIHVzZSB3aXRoIGJvdGggSVJRIGNvYWxlc2NpbmcgbWV0aG9kcyAoImFsbCBwb3J0cyIgb3IgInBlci1IQyIgKi8KKwlDT0FMX0NMT0NLU19QRVJfVVNFQwk9IDE1MCwJCS8qIGZvciBjYWxjdWxhdGluZyBDT0FMX1RJTUVzICovCisJTUFYX0NPQUxfVElNRV9USFJFU0hPTEQJPSAoKDEgPDwgMjQpIC0gMSksIC8qIGludGVybmFsIGNsb2NrcyBjb3VudCAqLworCU1BWF9DT0FMX0lPX0NPVU5UCT0gMjU1LAkJLyogY29tcGxldGVkIEkvTyBjb3VudCAqLworCiAJTVZfUENJX1JFR19CQVNFCQk9IDAsCi0JTVZfSVJRX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAkvKiA2eHh4IHBhcnQgb25seSAqLwotCU1WX0lSUV9DT0FMX0NBVVNFCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4MDgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0xPCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ODgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0hJCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAotCU1WX0lSUV9DT0FMX1RIUkVTSE9MRAkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweGNjKSwKLQlNVl9JUlFfQ09BTF9USU1FX1RIUkVTSE9MRAk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ZDApLAorCisJLyoKKwkgKiBQZXItY2hpcCAoImFsbCBwb3J0cyIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBvbmx5IGZvciBHRU5fSUkgLyBHRU5fSUlFIGhhcmR3YXJlLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCU1WX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAorCU1WX0lSUV9DT0FMX0NBVVNFCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDA4KSwKKwlBTExfUE9SVFNfQ09BTF9JUlEJPSAoMSA8PCA0KSwJLyogYWxsIHBvcnRzIGlycSBldmVudCAqLworCisJTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEICAgPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4Y2MpLAorCU1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEID0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweGQwKSwKKworCS8qCisJICogUmVnaXN0ZXJzIGZvciB0aGUgKHVudXNlZCBoZXJlKSB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nIGZlYXR1cmU6CisJICovCisJTVZfVFJBTl9DT0FMX0NBVVNFX0xPCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDg4KSwKKwlNVl9UUkFOX0NPQUxfQ0FVU0VfSEkJPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAogCiAJTVZfU0FUQUhDMF9SRUdfQkFTRQk9IDB4MjAwMDAsCiAJTVZfRkxBU0hfQ1RMX09GUwk9IDB4MTA0NmMsCkBAIC0xMTcsMTcgKzE1MiwxNiBAQAogCiAJLyogSG9zdCBGbGFncyAqLwogCU1WX0ZMQUdfRFVBTF9IQwkJPSAoMSA8PCAzMCksICAvKiB0d28gU0FUQSBIb3N0IENvbnRyb2xsZXJzICovCi0JTVZfRkxBR19JUlFfQ09BTEVTQ0UJPSAoMSA8PCAyOSksICAvKiBJUlEgY29hbGVzY2luZyBjYXBhYmlsaXR5ICovCiAKIAlNVl9DT01NT05fRkxBR1MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fQVRBUEkgfAotCQkJCSAgQVRBX0ZMQUdfUElPX1BPTExJTkcsCisJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX1BPTExJTkcsCiAKLQlNVl82WFhYX0ZMQUdTCQk9IE1WX0ZMQUdfSVJRX0NPQUxFU0NFLAorCU1WX0dFTl9JX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX05PX0FUQVBJLAogCi0JTVZfR0VOSUlFX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAotCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKLQkJCQkgIEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0FOLAorCU1WX0dFTl9JSV9GTEFHUwkJPSBNVl9DT01NT05fRkxBR1MgfCBBVEFfRkxBR19OQ1EgfAorCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBLAorCisJTVZfR0VOX0lJRV9GTEFHUwk9IE1WX0dFTl9JSV9GTEFHUyB8IEFUQV9GTEFHX0FOLAogCiAJQ1JRQl9GTEFHX1JFQUQJCT0gKDEgPDwgMCksCiAJQ1JRQl9UQUdfU0hJRlQJCT0gMSwKQEAgLTE4MCwxNiArMjE0LDE4IEBACiAJUENJX0hDX01BSU5fSVJRX01BU0tfT0ZTICA9IDB4MWQ2NCwKIAlTT0NfSENfTUFJTl9JUlFfQ0FVU0VfT0ZTID0gMHgyMDAyMCwKIAlTT0NfSENfTUFJTl9JUlFfTUFTS19PRlMgID0gMHgyMDAyNCwKLQlFUlJfSVJRCQkJPSAoMSA8PCAwKSwJLyogc2hpZnQgYnkgcG9ydCAjICovCi0JRE9ORV9JUlEJCT0gKDEgPDwgMSksCS8qIHNoaWZ0IGJ5IHBvcnQgIyAqLworCUVSUl9JUlEJCQk9ICgxIDw8IDApLAkvKiBzaGlmdCBieSAoMiAqIHBvcnQgIykgKi8KKwlET05FX0lSUQkJPSAoMSA8PCAxKSwJLyogc2hpZnQgYnkgKDIgKiBwb3J0ICMpICovCiAJSEMwX0lSUV9QRU5ECQk9IDB4MWZmLAkvKiBiaXRzIDAtOCA9IEhDMCdzIHBvcnRzICovCiAJSENfU0hJRlQJCT0gOSwJCS8qIGJpdHMgOS0xNyA9IEhDMSdzIHBvcnRzICovCisJRE9ORV9JUlFfMF8zCQk9IDB4MDAwMDAwYWEsCS8qIERPTkVfSVJRIHBvcnRzIDAsMSwyLDMgKi8KKwlET05FX0lSUV80XzcJCT0gKERPTkVfSVJRXzBfMyA8PCBIQ19TSElGVCksICAvKiA0LDUsNiw3ICovCiAJUENJX0VSUgkJCT0gKDEgPDwgMTgpLAotCVRSQU5fTE9fRE9ORQkJPSAoMSA8PCAxOSksCS8qIDZ4eHg6IElSUSBjb2FsZXNjaW5nICovCi0JVFJBTl9ISV9ET05FCQk9ICgxIDw8IDIwKSwJLyogNnh4eDogSVJRIGNvYWxlc2NpbmcgKi8KLQlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCi0JUE9SVFNfNF83X0NPQUxfRE9ORQk9ICgxIDw8IDE3KSwKLQlQT1JUU18wXzdfQ09BTF9ET05FCT0gKDEgPDwgMjEpLAkvKiA2eHh4OiBJUlEgY29hbGVzY2luZyAqLworCVRSQU5fQ09BTF9MT19ET05FCT0gKDEgPDwgMTkpLAkvKiB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nICovCisJVFJBTl9DT0FMX0hJX0RPTkUJPSAoMSA8PCAyMCksCS8qIHRyYW5zYWN0aW9uIGNvYWxlc2NpbmcgKi8KKwlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCS8qIEhDMCBJUlEgY29hbGVzY2luZyAqLworCVBPUlRTXzRfN19DT0FMX0RPTkUJPSAoMSA8PCAxNyksCS8qIEhDMSBJUlEgY29hbGVzY2luZyAqLworCUFMTF9QT1JUU19DT0FMX0RPTkUJPSAoMSA8PCAyMSksCS8qIEdFTl9JSShFKSBJUlEgY29hbGVzY2luZyAqLwogCUdQSU9fSU5UCQk9ICgxIDw8IDIyKSwKIAlTRUxGX0lOVAkJPSAoMSA8PCAyMyksCiAJVFdTSV9JTlQJCT0gKDEgPDwgMjQpLApAQCAtMjA1LDYgKzI0MSwyMSBAQAogCUhDX0NPQUxfSVJRCQk9ICgxIDw8IDQpLAkvKiBJUlEgY29hbGVzY2luZyAqLwogCURFVl9JUlEJCQk9ICgxIDw8IDgpLAkvKiBzaGlmdCBieSBwb3J0ICMgKi8KIAorCS8qCisJICogUGVyLUhDIChIb3N0LUNvbnRyb2xsZXIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBwcmVzZW50IG9uIGFsbCBjaGlwIGdlbmVyYXRpb25zLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCUhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMJPSAweDAwMGMsCisJSENfSVJRX0NPQUxfVElNRV9USFJFU0hPTERfT0ZTCT0gMHgwMDEwLAorCisJU09DX0xFRF9DVFJMX09GUwk9IDB4MmMsCisJU09DX0xFRF9DVFJMX0JMSU5LCT0gKDEgPDwgMCksCS8qIEFjdGl2ZSBMRUQgYmxpbmsgKi8KKwlTT0NfTEVEX0NUUkxfQUNUX1BSRVNFTkNFID0gKDEgPDwgMiksCS8qIE11bHRpcGxleCBkZXYgcHJlc2VuY2UgKi8KKwkJCQkJCS8qICB3aXRoIGRldiBhY3Rpdml0eSBMRUQgKi8KKwogCS8qIFNoYWRvdyBibG9jayByZWdpc3RlcnMgKi8KIAlTSERfQkxLX09GUwkJPSAweDEwMCwKIAlTSERfQ1RMX0FTVF9PRlMJCT0gMHgyMCwJCS8qIG9mcyBmcm9tIFNIRF9CTEtfT0ZTICovCkBAIC0zNDYsNiArMzk3LDEyIEBACiAJRURNQV9BUkJfQ0ZHX09GUwk9IDB4MzgsCiAKIAlFRE1BX0hBTFRDT05EX09GUwk9IDB4NjAsCQkvKiBHZW5JSWUgaGFsdCBjb25kaXRpb25zICovCisJRURNQV9VTktOT1dOX1JTVkRfT0ZTCT0gMHg2QywJCS8qIEdlbklJZSB1bmtub3duL3Jlc2VydmVkICovCisKKwlCTURNQV9DTURfT0ZTCQk9IDB4MjI0LAkvKiBibWRtYSBjb21tYW5kIHJlZ2lzdGVyICovCisJQk1ETUFfU1RBVFVTX09GUwk9IDB4MjI4LAkvKiBibWRtYSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlCTURNQV9QUkRfTE9XX09GUwk9IDB4MjJjLAkvKiBibWRtYSBQUkQgYWRkciAzMTowICovCisJQk1ETUFfUFJEX0hJR0hfT0ZTCT0gMHgyMzAsCS8qIGJtZG1hIFBSRCBhZGRyIDYzOjMyICovCiAKIAkvKiBIb3N0IHByaXZhdGUgZmxhZ3MgKGhwX2ZsYWdzKSAqLwogCU1WX0hQX0ZMQUdfTVNJCQk9ICgxIDw8IDApLApAQCAtMzU5LDEyICs0MTYsMTQgQEAKIAlNVl9IUF9QQ0lFCQk9ICgxIDw8IDkpLAkvKiBQQ0llIGJ1cy9yZWdzOiA3MDQyICovCiAJTVZfSFBfQ1VUX1RIUk9VR0gJPSAoMSA8PCAxMCksCS8qIGNhbiB1c2UgRURNQSBjdXQtdGhyb3VnaCAqLwogCU1WX0hQX0ZMQUdfU09DCQk9ICgxIDw8IDExKSwJLyogU3lzdGVtT25DaGlwLCBubyBQQ0kgKi8KKwlNVl9IUF9RVUlSS19MRURfQkxJTktfRU4gPSAoMSA8PCAxMiksCS8qIGlzIGxlZCBibGlua2luZyBlbmFibGVkPyAqLwogCiAJLyogUG9ydCBwcml2YXRlIGZsYWdzIChwcF9mbGFncykgKi8KIAlNVl9QUF9GTEFHX0VETUFfRU4JPSAoMSA8PCAwKSwJLyogaXMgRURNQSBlbmdpbmUgZW5hYmxlZD8gKi8KIAlNVl9QUF9GTEFHX05DUV9FTgk9ICgxIDw8IDEpLAkvKiBpcyBFRE1BIHNldCB1cCBmb3IgTkNRPyAqLwogCU1WX1BQX0ZMQUdfRkJTX0VOCT0gKDEgPDwgMiksCS8qIGlzIEVETUEgc2V0IHVwIGZvciBGQlM/ICovCiAJTVZfUFBfRkxBR19ERUxBWUVEX0VICT0gKDEgPDwgMyksCS8qIGRlbGF5ZWQgZGV2IGVyciBoYW5kbGluZyAqLworCU1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSA9ICgxIDw8IDQpLAkvKiBpZ25vcmUgaW5pdGlhbCBBVEFfRFJEWSAqLwogfTsKIAogI2RlZmluZSBJU19HRU5fSShocHJpdikgKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfR0VOX0kpCkBAIC00MzMsNiArNDkyLDE4IEBACiAJX19sZTMyCQkJcmVzZXJ2ZWQ7CiB9OwogCisvKgorICogV2Uga2VlcCBhIGxvY2FsIGNhY2hlIG9mIGEgZmV3IGZyZXF1ZW50bHkgYWNjZXNzZWQgcG9ydAorICogcmVnaXN0ZXJzIGhlcmUsIHRvIGF2b2lkIGhhdmluZyB0byByZWFkIHRoZW0gKHZlcnkgc2xvdykKKyAqIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gRURNQSBhbmQgbm9uLUVETUEgbW9kZXMuCisgKi8KK3N0cnVjdCBtdl9jYWNoZWRfcmVncyB7CisJdTMyCQkJZmlzY2ZnOworCXUzMgkJCWx0bW9kZTsKKwl1MzIJCQloYWx0Y29uZDsKKwl1MzIJCQl1bmtub3duX3JzdmQ7Cit9OworCiBzdHJ1Y3QgbXZfcG9ydF9wcml2IHsKIAlzdHJ1Y3QgbXZfY3JxYgkJKmNycWI7CiAJZG1hX2FkZHJfdAkJY3JxYl9kbWE7CkBAIC00NDUsNiArNTE2LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJlc3BfaWR4OwogCiAJdTMyCQkJcHBfZmxhZ3M7CisJc3RydWN0IG12X2NhY2hlZF9yZWdzCWNhY2hlZDsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5ZWRfZWhfcG1wX21hcDsKIH07CiAKQEAgLTUzNSw3ICs2MDcsNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgcG9ydF9ubyk7CiBzdGF0aWMgaW50IG12X3N0b3BfZWRtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyBpbnQgbXZfc3RvcF9lZG1hX2VuZ2luZSh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyk7Ci1zdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EpOworc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9lZG1hKTsKIAogc3RhdGljIHZvaWQgbXZfcG1wX3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgcG1wKTsKIHN0YXRpYyBpbnQgbXZfcG1wX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCkBAIC01NDYsNiArNjE4LDE0IEBACiBzdGF0aWMgdm9pZCBtdl9wcm9jZXNzX2NycGJfZW50cmllcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCQlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCk7CiAKK3N0YXRpYyB2b2lkIG12X3NmZl9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IG12X2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB2b2lkIG12X2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHU4ICAgbXZfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHU4IG12X3NmZl9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKIC8qIC5zZ190YWJsZXNpemUgaXMgKE1WX01BWF9TR19DVCAvIDIpIGluIHRoZSBzdHJ1Y3R1cmVzIGJlbG93CiAgKiBiZWNhdXNlIHdlIGhhdmUgdG8gYWxsb3cgcm9vbSBmb3Igd29yc3QgY2FzZSBzcGxpdHRpbmcgb2YKICAqIFBSRHMgZm9yIDY0SyBib3VuZGFyaWVzIGluIG12X2ZpbGxfc2coKS4KQEAgLTU2Niw2ICs2NDYsOCBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12NV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAorCiAJLnFjX2RlZmVyCQk9IG12X3FjX2RlZmVyLAogCS5xY19wcmVwCQk9IG12X3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IG12X3FjX2lzc3VlLApAQCAtNTkzLDYgKzY3NSwxNCBAQAogCS5wbXBfc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBtdl9wbXBfZXJyb3JfaGFuZGxlciwKKworCS5zZmZfY2hlY2tfc3RhdHVzCT0gbXZfc2ZmX2NoZWNrX3N0YXR1cywKKwkuc2ZmX2lycV9jbGVhcgkJPSBtdl9zZmZfaXJxX2NsZWFyLAorCS5jaGVja19hdGFwaV9kbWEJPSBtdl9jaGVja19hdGFwaV9kbWEsCisJLmJtZG1hX3NldHVwCQk9IG12X2JtZG1hX3NldHVwLAorCS5ibWRtYV9zdGFydAkJPSBtdl9ibWRtYV9zdGFydCwKKwkuYm1kbWFfc3RvcAkJPSBtdl9ibWRtYV9zdG9wLAorCS5ibWRtYV9zdGF0dXMJCT0gbXZfYm1kbWFfc3RhdHVzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12X2lpZV9vcHMgPSB7CkBAIC02MDMsNTMgKzY5Myw0OSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbXZfcG9ydF9pbmZvW10gPSB7CiAJeyAgLyogY2hpcF81MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDh4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDgwICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF82MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKLQkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8Ci0JCQkJICBBVEFfRkxBR19OQ1EsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY2X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNjA4eCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8Ci0JCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAotCQkJCSAgQVRBX0ZMQUdfTkNRIHwgTVZfRkxBR19EVUFMX0hDLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12Nl9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzYwNDIgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKIAl9LAogCXsgIC8qIGNoaXBfNzA0MiAqLwotCQkuZmxhZ3MJCT0gTVZfR0VOSUlFX0ZMQUdTLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJRV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdl9paWVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF9zb2MgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKQEAgLTc5NCw2ICs4ODAsNDQgQEAKIAlyZXR1cm4gKChwb3J0X2ZsYWdzICYgTVZfRkxBR19EVUFMX0hDKSA/IDIgOiAxKTsKIH0KIAorLyoqCisgKiAgICAgIG12X3NhdmVfY2FjaGVkX3JlZ3MgLSAocmUtKWluaXRpYWxpemUgY2FjaGVkIHBvcnQgcmVnaXN0ZXJzCisgKiAgICAgIEBhcDogdGhlIHBvcnQgd2hvc2UgcmVnaXN0ZXJzIHdlIGFyZSBjYWNoaW5nCisgKgorICoJSW5pdGlhbGl6ZSB0aGUgbG9jYWwgY2FjaGUgb2YgcG9ydCByZWdpc3RlcnMsCisgKglzbyB0aGF0IHJlYWRpbmcgdGhlbSBvdmVyIGFuZCBvdmVyIGFnYWluIGNhbgorICoJYmUgYXZvaWRlZCBvbiB0aGUgaG90dGVyIHBhdGhzIG9mIHRoaXMgZHJpdmVyLgorICoJVGhpcyBzYXZlcyBhIGZldyBtaWNyb3NlY29uZHMgZWFjaCB0aW1lIHdlIHN3aXRjaAorICoJdG8vZnJvbSBFRE1BIG1vZGUgdG8gcGVyZm9ybSAoZWcuKSBhIGRyaXZlIGNhY2hlIGZsdXNoLgorICovCitzdGF0aWMgdm9pZCBtdl9zYXZlX2NhY2hlZF9yZWdzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlwcC0+Y2FjaGVkLmZpc2NmZyA9IHJlYWRsKHBvcnRfbW1pbyArIEZJU0NGR19PRlMpOworCXBwLT5jYWNoZWQubHRtb2RlID0gcmVhZGwocG9ydF9tbWlvICsgTFRNT0RFX09GUyk7CisJcHAtPmNhY2hlZC5oYWx0Y29uZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTKTsKKwlwcC0+Y2FjaGVkLnVua25vd25fcnN2ZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfVU5LTk9XTl9SU1ZEX09GUyk7Cit9CisKKy8qKgorICogICAgICBtdl93cml0ZV9jYWNoZWRfcmVnIC0gd3JpdGUgdG8gYSBjYWNoZWQgcG9ydCByZWdpc3RlcgorICogICAgICBAYWRkcjogaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKKyAqICAgICAgQG9sZDogcG9pbnRlciB0byBjYWNoZWQgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyCisgKiAgICAgIEBuZXc6IG5ldyB2YWx1ZSBmb3IgdGhlIHJlZ2lzdGVyCisgKgorICoJV3JpdGUgYSBuZXcgdmFsdWUgdG8gYSBjYWNoZWQgcmVnaXN0ZXIsCisgKglidXQgb25seSBpZiB0aGUgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gYmVmb3JlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbXZfd3JpdGVfY2FjaGVkX3JlZyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiAqb2xkLCB1MzIgbmV3KQoreworCWlmIChuZXcgIT0gKm9sZCkgeworCQkqb2xkID0gbmV3OworCQl3cml0ZWwobmV3LCBhZGRyKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9lZG1hX3B0cnModm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgICAgIHN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2LAogCQkJICAgICBzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCkKQEAgLTgyNSw2ICs5NDksMjMgQEAKIAkJIHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOwogfQogCitzdGF0aWMgdm9pZCBtdl93cml0ZV9tYWluX2lycV9tYXNrKHUzMiBtYXNrLCBzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdikKK3sKKwkvKgorCSAqIFdoZW4gd3JpdGluZyB0byB0aGUgbWFpbl9pcnFfbWFzayBpbiBoYXJkd2FyZSwKKwkgKiB3ZSBtdXN0IGVuc3VyZSBleGNsdXNpdml0eSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBiaXRzCisJICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGl2aWR1YWwgcG9ydCBET05FX0lSUSBiaXRzLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgcmVhbGx5IGFuICJJUlEgZW5hYmxlIiByZWdpc3RlciwKKwkgKiBub3QgYW4gIklSUSBtYXNrIiByZWdpc3RlciBhcyBNYXJ2ZWxsJ3MgbmFtaW5nIG1pZ2h0IHN1Z2dlc3QuCisJICovCisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzBfM19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV8wXzM7CisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzRfN19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV80Xzc7CisJd3JpdGVsZmwobWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9tYWluX2lycV9tYXNrKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKIAkJCQkgdTMyIGRpc2FibGVfYml0cywgdTMyIGVuYWJsZV9iaXRzKQogewpAQCAtODM1LDcgKzk3Niw3IEBACiAJbmV3X21hc2sgPSAob2xkX21hc2sgJiB+ZGlzYWJsZV9iaXRzKSB8IGVuYWJsZV9iaXRzOwogCWlmIChuZXdfbWFzayAhPSBvbGRfbWFzaykgewogCQlocHJpdi0+bWFpbl9pcnFfbWFzayA9IG5ld19tYXNrOwotCQl3cml0ZWxmbChuZXdfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2sobmV3X21hc2ssIGhwcml2KTsKIAl9CiB9CiAKQEAgLTg1Miw4ICs5OTMsOTQgQEAKIAltdl9zZXRfbWFpbl9pcnFfbWFzayhhcC0+aG9zdCwgZGlzYWJsZV9iaXRzLCBlbmFibGVfYml0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIG12X2NsZWFyX2FuZF9lbmFibGVfcG9ydF9pcnFzKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJCSAgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCisJCQkJCSAgdW5zaWduZWQgaW50IHBvcnRfaXJxcykKK3sKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJaW50IGhhcmRwb3J0ID0gbXZfaGFyZHBvcnRfZnJvbV9wb3J0KGFwLT5wb3J0X25vKTsKKwl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKKwkJCQltdl9ob3N0X2Jhc2UoYXAtPmhvc3QpLCBhcC0+cG9ydF9ubyk7CisJdTMyIGhjX2lycV9jYXVzZTsKKworCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCisJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgRURNQV9FUlJfSVJRX0NBVVNFX09GUyk7CisKKwkvKiBjbGVhciBwZW5kaW5nIGlycSBldmVudHMgKi8KKwloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOworCXdyaXRlbGZsKGhjX2lycV9jYXVzZSwgaGNfbW1pbyArIEhDX0lSUV9DQVVTRV9PRlMpOworCisJLyogY2xlYXIgRklTIElSUSBDYXVzZSAqLworCWlmIChJU19HRU5fSUlFKGhwcml2KSkKKwkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisKKwltdl9lbmFibGVfcG9ydF9pcnFzKGFwLCBwb3J0X2lycXMpOworfQorCitzdGF0aWMgdm9pZCBtdl9zZXRfaXJxX2NvYWxlc2Npbmcoc3RydWN0IGF0YV9ob3N0ICpob3N0LAorCQkJCSAgdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgdXNlY3MpCit7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICptbWlvID0gaHByaXYtPmJhc2UsICpoY19tbWlvOworCXUzMiBjb2FsX2VuYWJsZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2xrcywgaXNfZHVhbF9oYyA9IGhwcml2LT5uX3BvcnRzID4gTVZfUE9SVFNfUEVSX0hDOworCWNvbnN0IHUzMiBjb2FsX2Rpc2FibGUgPSBQT1JUU18wXzNfQ09BTF9ET05FIHwgUE9SVFNfNF83X0NPQUxfRE9ORSB8CisJCQkJCQkJQUxMX1BPUlRTX0NPQUxfRE9ORTsKKworCS8qIERpc2FibGUgSVJRIGNvYWxlc2NpbmcgaWYgZWl0aGVyIHRocmVzaG9sZCBpcyB6ZXJvICovCisJaWYgKCF1c2VjcyB8fCAhY291bnQpIHsKKwkJY2xrcyA9IGNvdW50ID0gMDsKKwl9IGVsc2UgeworCQkvKiBSZXNwZWN0IG1heGltdW0gbGltaXRzIG9mIHRoZSBoYXJkd2FyZSAqLworCQljbGtzID0gdXNlY3MgKiBDT0FMX0NMT0NLU19QRVJfVVNFQzsKKwkJaWYgKGNsa3MgPiBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRCkKKwkJCWNsa3MgPSBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRDsKKwkJaWYgKGNvdW50ID4gTUFYX0NPQUxfSU9fQ09VTlQpCisJCQljb3VudCA9IE1BWF9DT0FMX0lPX0NPVU5UOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgY29hbF9kaXNhYmxlLCAwKTsKKworCWlmIChpc19kdWFsX2hjICYmICFJU19HRU5fSShocHJpdikpIHsKKwkJLyoKKwkJICogR0VOX0lJL0dFTl9JSUUgd2l0aCBkdWFsIGhvc3QgY29udHJvbGxlcnM6CisJCSAqIG9uZSBzZXQgb2YgZ2xvYmFsIHRocmVzaG9sZHMgZm9yIHRoZSBlbnRpcmUgY2hpcC4KKwkJICovCisJCXdyaXRlbChjbGtzLCAgbW1pbyArIE1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEKTsKKwkJd3JpdGVsKGNvdW50LCBtbWlvICsgTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEKTsKKwkJLyogY2xlYXIgbGVmdG92ZXIgY29hbCBJUlEgYml0ICovCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCQlpZiAoY291bnQpCisJCQljb2FsX2VuYWJsZSA9IEFMTF9QT1JUU19DT0FMX0RPTkU7CisJCWNsa3MgPSBjb3VudCA9IDA7IC8qIGZvcmNlIGNsZWFyaW5nIG9mIHJlZ3VsYXIgcmVncyBiZWxvdyAqLworCX0KKworCS8qCisJICogQWxsIGNoaXBzOiBpbmRlcGVuZGVudCB0aHJlc2hvbGRzIGZvciBlYWNoIEhDIG9uIHRoZSBjaGlwLgorCSAqLworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtbWlvLCAwKTsKKwl3cml0ZWwoY2xrcywgIGhjX21taW8gKyBIQ19JUlFfQ09BTF9USU1FX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbCh+SENfQ09BTF9JUlEsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKKwlpZiAoY291bnQpCisJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzBfM19DT0FMX0RPTkU7CisJaWYgKGlzX2R1YWxfaGMpIHsKKwkJaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KG1taW8sIE1WX1BPUlRTX1BFUl9IQyk7CisJCXdyaXRlbChjbGtzLCAgaGNfbW1pbyArIEhDX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEX09GUyk7CisJCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCQl3cml0ZWwofkhDX0NPQUxfSVJRLCBoY19tbWlvICsgSENfSVJRX0NBVVNFX09GUyk7CisJCWlmIChjb3VudCkKKwkJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzRfN19DT0FMX0RPTkU7CisJfQorCisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgY29hbF9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoqCi0gKiAgICAgIG12X3N0YXJ0X2RtYSAtIEVuYWJsZSBlRE1BIGVuZ2luZQorICogICAgICBtdl9zdGFydF9lZG1hIC0gRW5hYmxlIGVETUEgZW5naW5lCiAgKiAgICAgIEBiYXNlOiBwb3J0IGJhc2UgYWRkcmVzcwogICogICAgICBAcHA6IHBvcnQgcHJpdmF0ZSBkYXRhCiAgKgpAQCAtODYzLDcgKzEwOTAsNyBAQAogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXN0YXRpYyB2b2lkIG12X3N0YXJ0X2RtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKK3N0YXRpYyB2b2lkIG12X3N0YXJ0X2VkbWEoc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgc3RydWN0IG12X3BvcnRfcHJpdiAqcHAsIHU4IHByb3RvY29sKQogewogCWludCB3YW50X25jcSA9IChwcm90b2NvbCA9PSBBVEFfUFJPVF9OQ1EpOwpAQCAtODc1LDI2ICsxMTAyLDExIEBACiAJfQogCWlmICghKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikpIHsKIAkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCQlpbnQgaGFyZHBvcnQgPSBtdl9oYXJkcG9ydF9mcm9tX3BvcnQoYXAtPnBvcnRfbm8pOwotCQl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKLQkJCQkJbXZfaG9zdF9iYXNlKGFwLT5ob3N0KSwgYXAtPnBvcnRfbm8pOwotCQl1MzIgaGNfaXJxX2NhdXNlOwogCi0JCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCi0JCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfRVJSX0lSUV9DQVVTRV9PRlMpOwotCi0JCS8qIGNsZWFyIHBlbmRpbmcgaXJxIGV2ZW50cyAqLwotCQloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOwotCQl3cml0ZWxmbChoY19pcnFfY2F1c2UsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKLQotCQltdl9lZG1hX2NmZyhhcCwgd2FudF9uY3EpOwotCi0JCS8qIGNsZWFyIEZJUyBJUlEgQ2F1c2UgKi8KLQkJaWYgKElTX0dFTl9JSUUoaHByaXYpKQotCQkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisJCW12X2VkbWFfY2ZnKGFwLCB3YW50X25jcSwgMSk7CiAKIAkJbXZfc2V0X2VkbWFfcHRycyhwb3J0X21taW8sIGhwcml2LCBwcCk7Ci0JCW12X2VuYWJsZV9wb3J0X2lycXMoYXAsIERPTkVfSVJRfEVSUl9JUlEpOworCQltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgcG9ydF9tbWlvLCBET05FX0lSUXxFUlJfSVJRKTsKIAogCQl3cml0ZWxmbChFRE1BX0VOLCBwb3J0X21taW8gKyBFRE1BX0NNRF9PRlMpOwogCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19FRE1BX0VOOwpAQCAtOTUyLDYgKzExNjQsNyBAQAogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnIgPSAwOwogCiAJaWYgKCEocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSkKIAkJcmV0dXJuIDA7CkBAIC05NTksOSArMTE3MiwxMCBAQAogCW12X3dhaXRfZm9yX2VkbWFfZW1wdHlfaWRsZShhcCk7CiAJaWYgKG12X3N0b3BfZWRtYV9lbmdpbmUocG9ydF9tbWlvKSkgewogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiVW5hYmxlIHRvIHN0b3AgZURNQVxuIik7Ci0JCXJldHVybiAtRUlPOworCQllcnIgPSAtRUlPOwogCX0KLQlyZXR1cm4gMDsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CisJcmV0dXJuIGVycjsKIH0KIAogI2lmZGVmIEFUQV9ERUJVRwpAQCAtMTEzMCwzNSArMTM0NCwzMyBAQAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KIAotc3RhdGljIHZvaWQgbXZfY29uZmlnX2Zicyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9mYnMpCitzdGF0aWMgdm9pZCBtdl9jb25maWdfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZmJzKQogewotCXUzMiBuZXdfZmlzY2ZnLCBvbGRfZmlzY2ZnOwotCXUzMiBuZXdfbHRtb2RlLCBvbGRfbHRtb2RlOwotCXUzMiBuZXdfaGFsdGNvbmQsIG9sZF9oYWx0Y29uZDsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW87CiAKLQlvbGRfZmlzY2ZnICAgPSByZWFkbChwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlvbGRfbHRtb2RlICAgPSByZWFkbChwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlvbGRfaGFsdGNvbmQgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJdTMyIGZpc2NmZywgICAqb2xkX2Zpc2NmZyAgID0gJnBwLT5jYWNoZWQuZmlzY2ZnOworCXUzMiBsdG1vZGUsICAgKm9sZF9sdG1vZGUgICA9ICZwcC0+Y2FjaGVkLmx0bW9kZTsKKwl1MzIgaGFsdGNvbmQsICpvbGRfaGFsdGNvbmQgPSAmcHAtPmNhY2hlZC5oYWx0Y29uZDsKIAotCW5ld19maXNjZmcgICA9IG9sZF9maXNjZmcgJiB+KEZJU0NGR19TSU5HTEVfU1lOQyB8IEZJU0NGR19XQUlUX0RFVl9FUlIpOwotCW5ld19sdG1vZGUgICA9IG9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7Ci0JbmV3X2hhbHRjb25kID0gb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOworCWx0bW9kZSAgID0gKm9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7CisJaGFsdGNvbmQgPSAqb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOwogCiAJaWYgKHdhbnRfZmJzKSB7Ci0JCW5ld19maXNjZmcgPSBvbGRfZmlzY2ZnIHwgRklTQ0ZHX1NJTkdMRV9TWU5DOwotCQluZXdfbHRtb2RlID0gb2xkX2x0bW9kZSB8IExUTU9ERV9CSVQ4OworCQlmaXNjZmcgPSAqb2xkX2Zpc2NmZyB8IEZJU0NGR19TSU5HTEVfU1lOQzsKKwkJbHRtb2RlID0gKm9sZF9sdG1vZGUgfCBMVE1PREVfQklUODsKIAkJaWYgKHdhbnRfbmNxKQotCQkJbmV3X2hhbHRjb25kICY9IH5FRE1BX0VSUl9ERVY7CisJCQloYWx0Y29uZCAmPSB+RURNQV9FUlJfREVWOwogCQllbHNlCi0JCQluZXdfZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCQkJZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCX0gZWxzZSB7CisJCWZpc2NmZyA9ICpvbGRfZmlzY2ZnICYgfihGSVNDRkdfU0lOR0xFX1NZTkMgfCBGSVNDRkdfV0FJVF9ERVZfRVJSKTsKIAl9CiAKLQlpZiAobmV3X2Zpc2NmZyAhPSBvbGRfZmlzY2ZnKQotCQl3cml0ZWxmbChuZXdfZmlzY2ZnLCBwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlpZiAobmV3X2x0bW9kZSAhPSBvbGRfbHRtb2RlKQotCQl3cml0ZWxmbChuZXdfbHRtb2RlLCBwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlpZiAobmV3X2hhbHRjb25kICE9IG9sZF9oYWx0Y29uZCkKLQkJd3JpdGVsZmwobmV3X2hhbHRjb25kLCBwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJbXZfd3JpdGVfY2FjaGVkX3JlZyhwb3J0X21taW8gKyBGSVNDRkdfT0ZTLCBvbGRfZmlzY2ZnLCBmaXNjZmcpOworCW12X3dyaXRlX2NhY2hlZF9yZWcocG9ydF9tbWlvICsgTFRNT0RFX09GUywgb2xkX2x0bW9kZSwgbHRtb2RlKTsKKwltdl93cml0ZV9jYWNoZWRfcmVnKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTLCBvbGRfaGFsdGNvbmQsIGhhbHRjb25kKTsKIH0KIAogc3RhdGljIHZvaWQgbXZfNjB4MV9lcnJhdGFfc2F0YTI1KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSkKQEAgLTExNzYsNyArMTM4OCw4NiBAQAogCQl3cml0ZWwobmV3LCBocHJpdi0+YmFzZSArIE1WX0dQSU9fUE9SVF9DVExfT0ZTKTsKIH0KIAotc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxKQorLyoqCisgKgltdl9ibWRtYV9lbmFibGUgLSBzZXQgYSBtYWdpYyBiaXQgb24gR0VOX0lJRSB0byBhbGxvdyBibWRtYQorICoJQGFwOiBQb3J0IGJlaW5nIGluaXRpYWxpemVkCisgKgorICoJVGhlcmUgYXJlIHR3byBETUEgbW9kZXMgb24gdGhlc2UgY2hpcHM6ICBiYXNpYyBETUEsIGFuZCBFRE1BLgorICoKKyAqCUJpdC0wIG9mIHRoZSAiRURNQSBSRVNFUlZFRCIgcmVnaXN0ZXIgZW5hYmxlcy9kaXNhYmxlcyB1c2UKKyAqCW9mIGJhc2ljIERNQSBvbiB0aGUgR0VOX0lJRSB2ZXJzaW9ucyBvZiB0aGUgY2hpcHMuCisgKgorICoJVGhpcyBiaXQgc3Vydml2ZXMgRURNQSByZXNldHMsIGFuZCBtdXN0IGJlIHNldCBmb3IgYmFzaWMgRE1BCisgKgl0byBmdW5jdGlvbiwgYW5kIHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gRURNQSBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkIG12X2JtZG1hX2VuYWJsZV9paWUoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IGVuYWJsZV9ibWRtYSkKK3sKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdTMyIG5ldywgKm9sZCA9ICZwcC0+Y2FjaGVkLnVua25vd25fcnN2ZDsKKworCWlmIChlbmFibGVfYm1kbWEpCisJCW5ldyA9ICpvbGQgfCAxOworCWVsc2UKKwkJbmV3ID0gKm9sZCAmIH4xOworCW12X3dyaXRlX2NhY2hlZF9yZWcobXZfYXBfYmFzZShhcCkgKyBFRE1BX1VOS05PV05fUlNWRF9PRlMsIG9sZCwgbmV3KTsKK30KKworLyoKKyAqIFNPQyBjaGlwcyBoYXZlIGFuIGlzc3VlIHdoZXJlYnkgdGhlIEhERCBMRURzIGRvbid0IGFsd2F5cyBibGluaworICogZHVyaW5nIEkvTyB3aGVuIE5DUSBpcyBlbmFibGVkLiBFbmFibGluZyBhIHNwZWNpYWwgIkxFRCBibGluayIgbW9kZQorICogb2YgdGhlIFNPQyB0YWtlcyBjYXJlIG9mIGl0LCBnZW5lcmF0aW5nIGEgc3RlYWR5IGJsaW5rIHJhdGUgd2hlbgorICogYW55IGRyaXZlIG9uIHRoZSBjaGlwIGlzIGFjdGl2ZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgYmxpbmsgbW9kZSBpcyBhIGdsb2JhbCBoYXJkd2FyZSBzZXR0aW5nIGZvciB0aGUgU09DLAorICogc28gd2UgbXVzdCB1c2UgaXQgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIHBvcnQgb24gdGhlIFNPQyBoYXMgTkNRIGVuYWJsZWQuCisgKgorICogV2UgdHVybiAiTEVEIGJsaW5rIiBvZmYgd2hlbiBOQ1EgaXMgbm90IGluIHVzZSBhbnl3aGVyZSwgYmVjYXVzZSB0aGUgbm9ybWFsCisgKiBMRUQgb3BlcmF0aW9uIHdvcmtzIHRoZW4sIGFuZCBwcm92aWRlcyBiZXR0ZXIgKG1vcmUgYWNjdXJhdGUpIGZlZWRiYWNrLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IGFuIFNPQyBuZXZlciBoYXMgbW9yZSB0aGFuIG9uZSBIQyBvbmJvYXJkLgorICovCitzdGF0aWMgdm9pZCBtdl9zb2NfbGVkX2JsaW5rX2VuYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisKKwlpZiAoaHByaXYtPmhwX2ZsYWdzICYgTVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOKQorCQlyZXR1cm47CisJaHByaXYtPmhwX2ZsYWdzIHw9IE1WX0hQX1FVSVJLX0xFRF9CTElOS19FTjsKKwloY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobXZfaG9zdF9iYXNlKGhvc3QpLCBhcC0+cG9ydF9ubyk7CisJbGVkX2N0cmwgPSByZWFkbChoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7CisJd3JpdGVsKGxlZF9jdHJsIHwgU09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X3NvY19sZWRfYmxpbmtfZGlzYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisJdW5zaWduZWQgaW50IHBvcnQ7CisKKwlpZiAoIShocHJpdi0+aHBfZmxhZ3MgJiBNVl9IUF9RVUlSS19MRURfQkxJTktfRU4pKQorCQlyZXR1cm47CisKKwkvKiBkaXNhYmxlIGxlZC1ibGluayBvbmx5IGlmIG5vIHBvcnRzIGFyZSB1c2luZyBOQ1EgKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaHByaXYtPm5fcG9ydHM7IHBvcnQrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKnRoaXNfYXAgPSBob3N0LT5wb3J0c1twb3J0XTsKKwkJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSB0aGlzX2FwLT5wcml2YXRlX2RhdGE7CisKKwkJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKQorCQkJcmV0dXJuOworCX0KKworCWhwcml2LT5ocF9mbGFncyAmPSB+TVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOOworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtdl9ob3N0X2Jhc2UoaG9zdCksIGFwLT5wb3J0X25vKTsKKwlsZWRfY3RybCA9IHJlYWRsKGhjX21taW8gKyBTT0NfTEVEX0NUUkxfT0ZTKTsKKwl3cml0ZWwobGVkX2N0cmwgJiB+U09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZWRtYSkKIHsKIAl1MzIgY2ZnOwogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwICAgID0gYXAtPnByaXZhdGVfZGF0YTsKQEAgLTExODUsNyArMTQ3Niw4IEBACiAKIAkvKiBzZXQgdXAgbm9uLU5DUSBFRE1BIGNvbmZpZ3VyYXRpb24gKi8KIAljZmcgPSBFRE1BX0NGR19RX0RFUFRIOwkJLyogYWx3YXlzIDB4MWYgZm9yICphbGwqIGNoaXBzICovCi0JcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZCU19FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAlpZiAoSVNfR0VOX0koaHByaXYpKQogCQljZmcgfD0gKDEgPDwgOCk7CS8qIGVuYWIgY29uZmlnIGJ1cnN0IHNpemUgbWFzayAqLwpAQCAtMTIwNiw3ICsxNDk4LDcgQEAKIAkJICovCiAJCXdhbnRfZmJzICY9IHdhbnRfbmNxOwogCi0JCW12X2NvbmZpZ19mYnMocG9ydF9tbWlvLCB3YW50X25jcSwgd2FudF9mYnMpOworCQltdl9jb25maWdfZmJzKGFwLCB3YW50X25jcSwgd2FudF9mYnMpOwogCiAJCWlmICh3YW50X2ZicykgewogCQkJcHAtPnBwX2ZsYWdzIHw9IE1WX1BQX0ZMQUdfRkJTX0VOOwpAQCAtMTIxNCwxOCArMTUwNiwyNyBAQAogCQl9CiAKIAkJY2ZnIHw9ICgxIDw8IDIzKTsJLyogZG8gbm90IG1hc2sgUE0gZmllbGQgaW4gcngnZCBGSVMgKi8KLQkJY2ZnIHw9ICgxIDw8IDIyKTsJLyogZW5hYiA0LWVudHJ5IGhvc3QgcXVldWUgY2FjaGUgKi8KLQkJaWYgKCFJU19TT0MoaHByaXYpKQotCQkJY2ZnIHw9ICgxIDw8IDE4KTsJLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCWlmICh3YW50X2VkbWEpIHsKKwkJCWNmZyB8PSAoMSA8PCAyMik7IC8qIGVuYWIgNC1lbnRyeSBob3N0IHF1ZXVlIGNhY2hlICovCisJCQlpZiAoIUlTX1NPQyhocHJpdikpCisJCQkJY2ZnIHw9ICgxIDw8IDE4KTsgLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCX0KIAkJaWYgKGhwcml2LT5ocF9mbGFncyAmIE1WX0hQX0NVVF9USFJPVUdIKQogCQkJY2ZnIHw9ICgxIDw8IDE3KTsgLyogZW5hYiBjdXQtdGhydSAoZGlzIHN0b3ImZm9yd3JkKSAqLworCQltdl9ibWRtYV9lbmFibGVfaWllKGFwLCAhd2FudF9lZG1hKTsKKworCQlpZiAoSVNfU09DKGhwcml2KSkgeworCQkJaWYgKHdhbnRfbmNxKQorCQkJCW12X3NvY19sZWRfYmxpbmtfZW5hYmxlKGFwKTsKKwkJCWVsc2UKKwkJCQltdl9zb2NfbGVkX2JsaW5rX2Rpc2FibGUoYXApOworCQl9CiAJfQogCiAJaWYgKHdhbnRfbmNxKSB7CiAJCWNmZyB8PSBFRE1BX0NGR19OQ1E7CiAJCXBwLT5wcF9mbGFncyB8PSAgTVZfUFBfRkxBR19OQ1FfRU47Ci0JfSBlbHNlCi0JCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19OQ1FfRU47CisJfQogCiAJd3JpdGVsZmwoY2ZnLCBwb3J0X21taW8gKyBFRE1BX0NGR19PRlMpOwogfQpAQCAtMTMwOSw2ICsxNjEwLDggQEAKIAkJCXBwLT5zZ190YmxfZG1hW3RhZ10gPSBwcC0+c2dfdGJsX2RtYVswXTsKIAkJfQogCX0KKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAJcmV0dXJuIDA7CiAKIG91dF9wb3J0X2ZyZWVfZG1hX21lbToKQEAgLTEzNTcsMTIgKzE2NjAsMTMgQEAKIAkJCXUzMiBvZmZzZXQgPSBhZGRyICYgMHhmZmZmOwogCQkJdTMyIGxlbiA9IHNnX2xlbjsKIAotCQkJaWYgKChvZmZzZXQgKyBzZ19sZW4gPiAweDEwMDAwKSkKKwkJCWlmIChvZmZzZXQgKyBsZW4gPiAweDEwMDAwKQogCQkJCWxlbiA9IDB4MTAwMDAgLSBvZmZzZXQ7CiAKIAkJCW12X3NnLT5hZGRyID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQkJbXZfc2ctPmFkZHJfaGkgPSBjcHVfdG9fbGUzMigoYWRkciA+PiAxNikgPj4gMTYpOwogCQkJbXZfc2ctPmZsYWdzX3NpemUgPSBjcHVfdG9fbGUzMihsZW4gJiAweGZmZmYpOworCQkJbXZfc2ctPnJlc2VydmVkID0gMDsKIAogCQkJc2dfbGVuIC09IGxlbjsKIAkJCWFkZHIgKz0gbGVuOwpAQCAtMTM3NCw2ICsxNjc4LDcgQEAKIAogCWlmIChsaWtlbHkobGFzdF9zZykpCiAJCWxhc3Rfc2ctPmZsYWdzX3NpemUgfD0gY3B1X3RvX2xlMzIoRVBSRF9GTEFHX0VORF9PRl9UQkwpOworCW1iKCk7IC8qIGVuc3VyZSBkYXRhIHN0cnVjdHVyZSBpcyB2aXNpYmxlIHRvIHRoZSBjaGlwc2V0ICovCiB9CiAKIHN0YXRpYyB2b2lkIG12X2NycWJfcGFja19jbWQoX19sZTE2ICpjbWR3LCB1OCBkYXRhLCB1OCBhZGRyLCB1bnNpZ25lZCBsYXN0KQpAQCAtMTM4NCw2ICsxNjg5LDE0NyBAQAogfQogCiAvKioKKyAqCW12X3NmZl9pcnFfY2xlYXIgLSBDbGVhciBoYXJkd2FyZSBpbnRlcnJ1cHQgYWZ0ZXIgRE1BLgorICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KKyAqCisgKglXZSBuZWVkIHRoaXMgb25seSBmb3IgQVRBUEkgYm1kbWEgdHJhbnNhY3Rpb25zLAorICoJYXMgb3RoZXJ3aXNlIHdlIGV4cGVyaWVuY2Ugc3B1cmlvdXMgaW50ZXJydXB0cworICoJYWZ0ZXIgbGliYXRhLXNmZiBoYW5kbGVzIHRoZSBibWRtYSBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgdm9pZCBtdl9zZmZfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJbXZfY2xlYXJfYW5kX2VuYWJsZV9wb3J0X2lycXMoYXAsIG12X2FwX2Jhc2UoYXApLCBFUlJfSVJRKTsKK30KKworLyoqCisgKgltdl9jaGVja19hdGFwaV9kbWEgLSBGaWx0ZXIgQVRBUEkgY21kcyB3aGljaCBhcmUgdW5zdWl0YWJsZSBmb3IgRE1BLgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBjaGVjayBmb3IgY2hpcHNldC9ETUEgY29tcGF0aWJpbGl0eS4KKyAqCisgKglUaGUgYm1kbWEgZW5naW5lcyBjYW5ub3QgaGFuZGxlIHNwZWN1bGF0aXZlIGRhdGEgc2l6ZXMKKyAqCShieXRlY291bnQgdW5kZXIvb3ZlciBmbG93KS4gIFNvIG9ubHkgYWxsb3cgRE1BIGZvcgorICoJZGF0YSB0cmFuc2ZlciBjb21tYW5kcyB3aXRoIGtub3duIGRhdGEgc2l6ZXMuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIGludCBtdl9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gcWMtPnNjc2ljbWQ7CisKKwlpZiAoc2NtZCkgeworCQlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKKwkJY2FzZSBSRUFEXzY6CisJCWNhc2UgUkVBRF8xMDoKKwkJY2FzZSBSRUFEXzEyOgorCQljYXNlIFdSSVRFXzY6CisJCWNhc2UgV1JJVEVfMTA6CisJCWNhc2UgV1JJVEVfMTI6CisJCWNhc2UgR1BDTURfUkVBRF9DRDoKKwkJY2FzZSBHUENNRF9TRU5EX0RWRF9TVFJVQ1RVUkU6CisJCWNhc2UgR1BDTURfU0VORF9DVUVfU0hFRVQ6CisJCQlyZXR1cm4gMDsgLyogRE1BIGlzIHNhZmUgKi8KKwkJfQorCX0KKwlyZXR1cm4gLUVPUE5PVFNVUFA7IC8qIHVzZSBQSU8gaW5zdGVhZCAqLworfQorCisvKioKKyAqCW12X2JtZG1hX3NldHVwIC0gU2V0IHVwIEJNRE1BIHRyYW5zYWN0aW9uCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUgRE1BIGZvci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwltdl9maWxsX3NnKHFjKTsKKworCS8qIGNsZWFyIGFsbCBETUEgY21kIGJpdHMgKi8KKwl3cml0ZWwoMCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7CisKKwkvKiBsb2FkIFBSRCB0YWJsZSBhZGRyLiAqLworCXdyaXRlbCgocHAtPnNnX3RibF9kbWFbcWMtPnRhZ10gPj4gMTYpID4+IDE2LAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfSElHSF9PRlMpOworCXdyaXRlbGZsKHBwLT5zZ190YmxfZG1hW3FjLT50YWddLAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfTE9XX09GUyk7CisKKwkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLworCWFwLT5vcHMtPnNmZl9leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXJ0IC0gU3RhcnQgYSBCTURNQSB0cmFuc2FjdGlvbgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBzdGFydCBETUEgb24uCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdW5zaWduZWQgaW50IHJ3ID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7CisJdTMyIGNtZCA9IChydyA/IDAgOiBBVEFfRE1BX1dSKSB8IEFUQV9ETUFfU1RBUlQ7CisKKwkvKiBzdGFydCBob3N0IERNQSB0cmFuc2FjdGlvbiAqLworCXdyaXRlbGZsKGNtZCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7Cit9CisKKy8qKgorICoJbXZfYm1kbWFfc3RvcCAtIFN0b3AgQk1ETUEgdHJhbnNmZXIKKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gc3RvcCBETUEgb24uCisgKgorICoJQ2xlYXJzIHRoZSBBVEFfRE1BX1NUQVJUIGZsYWcgaW4gdGhlIGJtZG1hIGNvbnRyb2wgcmVnaXN0ZXIKKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXUzMiBjbWQ7CisKKwkvKiBjbGVhciBzdGFydC9zdG9wIGJpdCAqLworCWNtZCA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCWNtZCAmPSB+QVRBX0RNQV9TVEFSVDsKKwl3cml0ZWxmbChjbWQsIHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCisJLyogb25lLVBJTy1jeWNsZSBndWFyYW50ZWVkIHdhaXQsIHBlciBzcGVjLCBmb3IgSERNQTE6MCB0cmFuc2l0aW9uICovCisJYXRhX3NmZl9kbWFfcGF1c2UoYXApOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXR1cyAtIFJlYWQgQk1ETUEgc3RhdHVzCisgKglAYXA6IHBvcnQgZm9yIHdoaWNoIHRvIHJldHJpZXZlIERNQSBzdGF0dXMuCisgKgorICoJUmVhZCBhbmQgcmV0dXJuIGVxdWl2YWxlbnQgb2YgdGhlIHNmZiBCTURNQSBzdGF0dXMgcmVnaXN0ZXIuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHU4IG12X2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdTMyIHJlZywgc3RhdHVzOworCisJLyoKKwkgKiBPdGhlciBiaXRzIGFyZSB2YWxpZCBvbmx5IGlmIEFUQV9ETUFfQUNUSVZFPT0wLAorCSAqIGFuZCB0aGUgQVRBX0RNQV9JTlRSIGJpdCBkb2Vzbid0IGV4aXN0LgorCSAqLworCXJlZyA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX1NUQVRVU19PRlMpOworCWlmIChyZWcgJiBBVEFfRE1BX0FDVElWRSkKKwkJc3RhdHVzID0gQVRBX0RNQV9BQ1RJVkU7CisJZWxzZQorCQlzdGF0dXMgPSAocmVnICYgQVRBX0RNQV9FUlIpIHwgQVRBX0RNQV9JTlRSOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogICAgICBtdl9xY19wcmVwIC0gSG9zdCBzcGVjaWZpYyBjb21tYW5kIHByZXBhcmF0aW9uLgogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUKICAqCkBAIC0xNTQ1LDYgKzE5OTEsMTMyIEBACiB9CiAKIC8qKgorICoJbXZfc2ZmX2NoZWNrX3N0YXR1cyAtIGZldGNoIGRldmljZSBzdGF0dXMsIGlmIHZhbGlkCisgKglAYXA6IEFUQSBwb3J0IHRvIGZldGNoIHN0YXR1cyBmcm9tCisgKgorICoJV2hlbiB1c2luZyBjb21tYW5kIGlzc3VlIHZpYSBtdl9xY19pc3N1ZV9maXMoKSwKKyAqCXRoZSBpbml0aWFsIEFUQV9CVVNZIHN0YXRlIGRvZXMgbm90IHNob3cgdXAgaW4gdGhlCisgKglBVEEgc3RhdHVzIChzaGFkb3cpIHJlZ2lzdGVyLiAgVGhpcyBjYW4gY29uZnVzZSBsaWJhdGEhCisgKgorICoJU28gd2UgaGF2ZSBhIGhvb2sgaGVyZSB0byBmYWtlIEFUQV9CVVNZIGZvciB0aGF0IHNpdHVhdGlvbiwKKyAqCXVudGlsIHRoZSBmaXJzdCB0aW1lIGEgQlVTWSwgRFJRLCBvciBFUlIgYml0IGlzIHNlZW4uCisgKgorICoJVGhlIHJlc3Qgb2YgdGhlIHRpbWUsIGl0IHNpbXBseSByZXR1cm5zIHRoZSBBVEEgc3RhdHVzIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdTggbXZfc2ZmX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXQgPSBpb3JlYWQ4KGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1kpIHsKKwkJaWYgKHN0YXQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRIHwgQVRBX0VSUikpCisJCQlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWTsKKwkJZWxzZQorCQkJc3RhdCA9IEFUQV9CVVNZOworCX0KKwlyZXR1cm4gc3RhdDsKK30KKworLyoqCisgKgltdl9zZW5kX2ZpcyAtIFNlbmQgYSBGSVMsIHVzaW5nIHRoZSAiVmVuZG9yLVVuaXF1ZSBGSVMiIHJlZ2lzdGVyCisgKglAZmlzOiBmaXMgdG8gYmUgc2VudAorICoJQG53b3JkczogbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyBpbiB0aGUgZmlzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXZfc2VuZF9maXMoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyICpmaXMsIGludCBud29yZHMpCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwl1MzIgaWZjdGwsIG9sZF9pZmN0bCwgaWZzdGF0OworCWludCBpLCB0aW1lb3V0ID0gMjAwLCBmaW5hbF93b3JkID0gbndvcmRzIC0gMTsKKworCS8qIEluaXRpYXRlIEZJUyB0cmFuc21pc3Npb24gbW9kZSAqLworCW9sZF9pZmN0bCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKwlpZmN0bCA9IDB4MTAwIHwgKG9sZF9pZmN0bCAmIDB4Zik7CisJd3JpdGVsZmwoaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKworCS8qIFNlbmQgYWxsIHdvcmRzIG9mIHRoZSBGSVMgZXhjZXB0IGZvciB0aGUgZmluYWwgd29yZCAqLworCWZvciAoaSA9IDA7IGkgPCBmaW5hbF93b3JkOyArK2kpCisJCXdyaXRlbChmaXNbaV0sIHBvcnRfbW1pbyArIFZFTkRPUl9VTklRVUVfRklTX09GUyk7CisKKwkvKiBGbGFnIGVuZC1vZi10cmFuc21pc3Npb24sIGFuZCB0aGVuIHNlbmQgdGhlIGZpbmFsIHdvcmQgKi8KKwl3cml0ZWxmbChpZmN0bCB8IDB4MjAwLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisJd3JpdGVsZmwoZmlzW2ZpbmFsX3dvcmRdLCBwb3J0X21taW8gKyBWRU5ET1JfVU5JUVVFX0ZJU19PRlMpOworCisJLyoKKwkgKiBXYWl0IGZvciBGSVMgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlLgorCSAqIFRoaXMgdHlwaWNhbGx5IHRha2VzIGp1c3QgYSBzaW5nbGUgaXRlcmF0aW9uLgorCSAqLworCWRvIHsKKwkJaWZzdGF0ID0gcmVhZGwocG9ydF9tbWlvICsgU0FUQV9JRlNUQVRfT0ZTKTsKKwl9IHdoaWxlICghKGlmc3RhdCAmIDB4MTAwMCkgJiYgLS10aW1lb3V0KTsKKworCS8qIFJlc3RvcmUgb3JpZ2luYWwgcG9ydCBjb25maWd1cmF0aW9uICovCisJd3JpdGVsZmwob2xkX2lmY3RsLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisKKwkvKiBTZWUgaWYgaXQgd29ya2VkICovCisJaWYgKChpZnN0YXQgJiAweDMwMDApICE9IDB4MTAwMCkgeworCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywKKwkJCQkiJXMgdHJhbnNtaXNzaW9uIGVycm9yLCBpZnN0YXQ9JTA4eFxuIiwKKwkJCQlfX2Z1bmNfXywgaWZzdGF0KTsKKwkJcmV0dXJuIEFDX0VSUl9PVEhFUjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJbXZfcWNfaXNzdWVfZmlzIC0gSXNzdWUgYSBjb21tYW5kIGRpcmVjdGx5IGFzIGEgRklTCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CisgKgorICoJTm90ZSB0aGF0IHRoZSBBVEEgc2hhZG93IHJlZ2lzdGVycyBhcmUgbm90IHVwZGF0ZWQKKyAqCWFmdGVyIGNvbW1hbmQgaXNzdWUsIHNvIHRoZSBkZXZpY2Ugd2lsbCBhcHBlYXIgIlJFQURZIgorICoJaWYgcG9sbGVkLCBldmVuIHdoaWxlIGl0IGlzIEJVU1kgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4KKyAqCisgKglTbyB3ZSB1c2UgYSBzdGF0dXMgaG9vayB0byBmYWtlIEFUQV9CVVNZIHVudGlsIHRoZSBkcml2ZSBjaGFuZ2VzIHN0YXRlLgorICoKKyAqCU5vdGU6IHdlIGRvbid0IGdldCB1cGRhdGVkIHNoYWRvdyByZWdzIG9uICpjb21wbGV0aW9uKgorICoJb2Ygbm9uLWRhdGEgY29tbWFuZHMuIFNvIGF2b2lkIHNlbmRpbmcgdGhlbSB2aWEgdGhpcyBmdW5jdGlvbiwKKyAqCWFzIHRoZXkgd2lsbCBhcHBlYXIgdG8gaGF2ZSBjb21wbGV0ZWQgaW1tZWRpYXRlbHkuCisgKgorICoJR0VOX0lJRSBoYXMgc3BlY2lhbCByZWdpc3RlcnMgdGhhdCB3ZSBjb3VsZCBnZXQgdGhlIHJlc3VsdCB0ZiBmcm9tLAorICoJYnV0IGVhcmxpZXIgY2hpcHNldHMgZG8gbm90LiAgRm9yIG5vdywgd2UgaWdub3JlIHRob3NlIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtdl9xY19pc3N1ZV9maXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbmsgPSBxYy0+ZGV2LT5saW5rOworCXUzMiBmaXNbNV07CisJaW50IGVyciA9IDA7CisKKwlhdGFfdGZfdG9fZmlzKCZxYy0+dGYsIGxpbmstPnBtcCwgMSwgKHZvaWQgKilmaXMpOworCWVyciA9IG12X3NlbmRfZmlzKGFwLCBmaXMsIHNpemVvZihmaXMpIC8gc2l6ZW9mKGZpc1swXSkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBUElfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6CisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9GSVJTVDsKKwkJYnJlYWs7CisJY2FzZSBBVEFfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7CisJCWVsc2UKKwkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7CisJCWJyZWFrOworCX0KKworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogICAgICBtdl9xY19pc3N1ZSAtIEluaXRpYXRlIGEgY29tbWFuZCB0byB0aGUgaG9zdAogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CiAgKgpAQCAtMTU1OCwxNCArMjEzMCwyOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CisJc3RhdGljIGludCBsaW1pdF93YXJuaW5ncyA9IDEwOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTMyIGluX2luZGV4OworCXVuc2lnbmVkIGludCBwb3J0X2lycXM7CiAKLQlpZiAoKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9ETUEpICYmCi0JICAgIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfTkNRKSkgewotCQlzdGF0aWMgaW50IGxpbWl0X3dhcm5pbmdzID0gMTA7CisJcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7IC8qIHBhcmFub2lhICovCisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBX1BST1RfRE1BOgorCWNhc2UgQVRBX1BST1RfTkNROgorCQltdl9zdGFydF9lZG1hKGFwLCBwb3J0X21taW8sIHBwLCBxYy0+dGYucHJvdG9jb2wpOworCQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKKwkJaW5faW5kZXggPSBwcC0+cmVxX2lkeCA8PCBFRE1BX1JFUV9RX1BUUl9TSElGVDsKKworCQkvKiBXcml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLworCQl3cml0ZWxmbCgocHAtPmNycWJfZG1hICYgRURNQV9SRVFfUV9CQVNFX0xPX01BU0spIHwgaW5faW5kZXgsCisJCQkJCXBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7CisJCXJldHVybiAwOworCisJY2FzZSBBVEFfUFJPVF9QSU86CiAJCS8qCiAJCSAqIEVycmF0YSBTQVRBIzE2LCBTQVRBIzI0OiB3YXJuIGlmIG11bHRpcGxlIERSUXMgZXhwZWN0ZWQuCiAJCSAqCkBAIC0xNTgzLDI3ICsyMTY5LDQ2IEBACiAJCQkJCSI6IGF0dGVtcHRpbmcgUElPIHcvbXVsdGlwbGUgRFJROiAiCiAJCQkJCSJ0aGlzIG1heSBmYWlsIGR1ZSB0byBoL3cgZXJyYXRhXG4iKTsKIAkJfQotCQkvKgotCQkgKiBXZSdyZSBhYm91dCB0byBzZW5kIGEgbm9uLUVETUEgY2FwYWJsZSBjb21tYW5kIHRvIHRoZQotCQkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKLQkJICogc2hhZG93IGJsb2NrLCBldGMgcmVnaXN0ZXJzLgotCQkgKi8KLQkJbXZfc3RvcF9lZG1hKGFwKTsKLQkJbXZfZW5hYmxlX3BvcnRfaXJxcyhhcCwgRVJSX0lSUSk7Ci0JCW12X3BtcF9zZWxlY3QoYXAsIHFjLT5kZXYtPmxpbmstPnBtcCk7Ci0JCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKKwkJLyogZHJvcCB0aHJvdWdoICovCisJY2FzZSBBVEFfUFJPVF9OT0RBVEE6CisJY2FzZSBBVEFQSV9QUk9UX1BJTzoKKwljYXNlIEFUQVBJX1BST1RfTk9EQVRBOgorCQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUElPX1BPTExJTkcpCisJCQlxYy0+dGYuZmxhZ3MgfD0gQVRBX1RGTEFHX1BPTExJTkc7CisJCWJyZWFrOwogCX0KIAotCW12X3N0YXJ0X2RtYShhcCwgcG9ydF9tbWlvLCBwcCwgcWMtPnRmLnByb3RvY29sKTsKKwlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCXBvcnRfaXJxcyA9IEVSUl9JUlE7CS8qIG1hc2sgZGV2aWNlIGludGVycnVwdCB3aGVuIHBvbGxpbmcgKi8KKwllbHNlCisJCXBvcnRfaXJxcyA9IEVSUl9JUlEgfCBET05FX0lSUTsJLyogdW5tYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAKLQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKLQlpbl9pbmRleCA9IHBwLT5yZXFfaWR4IDw8IEVETUFfUkVRX1FfUFRSX1NISUZUOworCS8qCisJICogV2UncmUgYWJvdXQgdG8gc2VuZCBhIG5vbi1FRE1BIGNhcGFibGUgY29tbWFuZCB0byB0aGUKKwkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKKwkgKiBzaGFkb3cgYmxvY2ssIGV0YyByZWdpc3RlcnMuCisJICovCisJbXZfc3RvcF9lZG1hKGFwKTsKKwltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgbXZfYXBfYmFzZShhcCksIHBvcnRfaXJxcyk7CisJbXZfcG1wX3NlbGVjdChhcCwgcWMtPmRldi0+bGluay0+cG1wKTsKIAotCS8qIGFuZCB3cml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLwotCXdyaXRlbGZsKChwcC0+Y3JxYl9kbWEgJiBFRE1BX1JFUV9RX0JBU0VfTE9fTUFTSykgfCBpbl9pbmRleCwKLQkJIHBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7Ci0KLQlyZXR1cm4gMDsKKwlpZiAocWMtPnRmLmNvbW1hbmQgPT0gQVRBX0NNRF9SRUFEX0xPR19FWFQpIHsKKwkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCQkvKgorCQkgKiBXb3JrYXJvdW5kIGZvciA4OFNYNjB4MSBGRXIgU0FUQSMyNSAocGFydCAyKS4KKwkJICoKKwkJICogQWZ0ZXIgYW55IE5DUSBlcnJvciwgdGhlIFJFQURfTE9HX0VYVCBjb21tYW5kCisJCSAqIGZyb20gbGliYXRhLWVoICptdXN0KiB1c2UgbXZfcWNfaXNzdWVfZmlzKCkuCisJCSAqIE90aGVyd2lzZSBpdCBtaWdodCBmYWlsLCBkdWUgdG8gY2hpcCBlcnJhdGEuCisJCSAqCisJCSAqIFJhdGhlciB0aGFuIHNwZWNpYWwtY2FzZSBpdCwgd2UnbGwganVzdCAqYWx3YXlzKgorCQkgKiB1c2UgdGhpcyBtZXRob2QgaGVyZSBmb3IgUkVBRF9MT0dfRVhULCBtYWtpbmcgZm9yCisJCSAqIGVhc2llciB0ZXN0aW5nLgorCQkgKi8KKwkJaWYgKElTX0dFTl9JSShocHJpdikpCisJCQlyZXR1cm4gbXZfcWNfaXNzdWVfZmlzKHFjKTsKKwl9CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGF0YV9xdWV1ZWRfY21kICptdl9nZXRfYWN0aXZlX3FjKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0xNjE0LDggKzIyMTksMTIgQEAKIAlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pCiAJCXJldHVybiBOVUxMOwogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKLQlpZiAocWMgJiYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkKLQkJcWMgPSBOVUxMOworCWlmIChxYykgeworCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCQlxYyA9IE5VTEw7CisJCWVsc2UgaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKQorCQkJcWMgPSBOVUxMOworCX0KIAlyZXR1cm4gcWM7CiB9CiAKQEAgLTIwODQsNiArMjY5MywxMCBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5iYXNlLCAqaGNfbW1pbzsKIAl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDAsIHBvcnQ7CiAKKwkvKiBJZiBhc3NlcnRlZCwgY2xlYXIgdGhlICJhbGwgcG9ydHMiIElSUSBjb2FsZXNjaW5nIGJpdCAqLworCWlmIChtYWluX2lycV9jYXVzZSAmIEFMTF9QT1JUU19DT0FMX0RPTkUpCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhwcml2LT5uX3BvcnRzOyBwb3J0KyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW3BvcnRdOwogCQl1bnNpZ25lZCBpbnQgcCwgc2hpZnQsIGhhcmRwb3J0LCBwb3J0X2NhdXNlOwpAQCAtMjExNiw2ICsyNzI5LDggQEAKIAkJCSAqIHRvIGFjayAob25seSkgdGhvc2UgcG9ydHMgdmlhIGhjX2lycV9jYXVzZS4KIAkJCSAqLwogCQkJYWNrX2lycXMgPSAwOworCQkJaWYgKGhjX2NhdXNlICYgUE9SVFNfMF8zX0NPQUxfRE9ORSkKKwkJCQlhY2tfaXJxcyA9IEhDX0NPQUxfSVJROwogCQkJZm9yIChwID0gMDsgcCA8IE1WX1BPUlRTX1BFUl9IQzsgKytwKSB7CiAJCQkJaWYgKChwb3J0ICsgcCkgPj0gaHByaXYtPm5fcG9ydHMpCiAJCQkJCWJyZWFrOwpAQCAtMjIwNCw3ICsyODE5LDcgQEAKIAogCS8qIGZvciBNU0k6ICBibG9jayBuZXcgaW50ZXJydXB0cyB3aGlsZSBpbiBoZXJlICovCiAJaWYgKHVzaW5nX21zaSkKLQkJd3JpdGVsKDAsIGhwcml2LT5tYWluX2lycV9tYXNrX2FkZHIpOworCQltdl93cml0ZV9tYWluX2lycV9tYXNrKDAsIGhwcml2KTsKIAogCW1haW5faXJxX2NhdXNlID0gcmVhZGwoaHByaXYtPm1haW5faXJxX2NhdXNlX2FkZHIpOwogCXBlbmRpbmdfaXJxcyAgID0gbWFpbl9pcnFfY2F1c2UgJiBocHJpdi0+bWFpbl9pcnFfbWFzazsKQEAgLTIyMTgsMTEgKzI4MzMsMTIgQEAKIAkJZWxzZQogCQkJaGFuZGxlZCA9IG12X2hvc3RfaW50cihob3N0LCBwZW5kaW5nX2lycXMpOwogCX0KLQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CiAKIAkvKiBmb3IgTVNJOiB1bm1hc2s7IGludGVycnVwdCBjYXVzZSBiaXRzIHdpbGwgcmV0cmlnZ2VyIG5vdyAqLwogCWlmICh1c2luZ19tc2kpCi0JCXdyaXRlbChocHJpdi0+bWFpbl9pcnFfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2soaHByaXYtPm1haW5faXJxX21hc2ssIGhwcml2KTsKKworCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQpAQCAtMjc3Myw2ICszMzg5LDggQEAKIAogCW12X3Jlc2V0X2NoYW5uZWwoaHByaXYsIG1taW8sIGFwLT5wb3J0X25vKTsKIAlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRURNQV9FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBlcnJhdGEgRkVyIFNBVEEjMTAgKHBhcnQgMikgKi8KIAlkbyB7CkBAIC0yNzkyLDYgKzM0MTAsOCBAQAogCQkJCWV4dHJhID0gSFo7IC8qIG9ubHkgZXh0ZW5kIGl0IG9uY2UsIG1heCAqLwogCQl9CiAJfSB3aGlsZSAoc3N0YXR1cyAhPSAweDAgJiYgc3N0YXR1cyAhPSAweDExMyAmJiBzc3RhdHVzICE9IDB4MTIzKTsKKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTE0LDE5ICszNzM0LDE5IEBACiAJCXdyaXRlbGZsKDAsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKIAl9CiAKLQlpZiAoIUlTX1NPQyhocHJpdikpIHsKLQkJLyogQ2xlYXIgYW55IGN1cnJlbnRseSBvdXRzdGFuZGluZyBob3N0IGludGVycnVwdCBjb25kaXRpb25zICovCi0JCXdyaXRlbGZsKDAsIG1taW8gKyBocHJpdi0+aXJxX2NhdXNlX29mcyk7CisJLyogQ2xlYXIgYW55IGN1cnJlbnRseSBvdXRzdGFuZGluZyBob3N0IGludGVycnVwdCBjb25kaXRpb25zICovCisJd3JpdGVsZmwoMCwgbW1pbyArIGhwcml2LT5pcnFfY2F1c2Vfb2ZzKTsKIAotCQkvKiBhbmQgdW5tYXNrIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciBob3N0IHJlZ3MgKi8KLQkJd3JpdGVsZmwoaHByaXYtPnVubWFza19hbGxfaXJxcywgbW1pbyArIGhwcml2LT5pcnFfbWFza19vZnMpOworCS8qIGFuZCB1bm1hc2sgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIGhvc3QgcmVncyAqLworCXdyaXRlbGZsKGhwcml2LT51bm1hc2tfYWxsX2lycXMsIG1taW8gKyBocHJpdi0+aXJxX21hc2tfb2ZzKTsKIAotCQkvKgotCQkgKiBlbmFibGUgb25seSBnbG9iYWwgaG9zdCBpbnRlcnJ1cHRzIGZvciBub3cuCi0JCSAqIFRoZSBwZXItcG9ydCBpbnRlcnJ1cHRzIGdldCBkb25lIGxhdGVyIGFzIHBvcnRzIGFyZSBzZXQgdXAuCi0JCSAqLwotCQltdl9zZXRfbWFpbl9pcnFfbWFzayhob3N0LCAwLCBQQ0lfRVJSKTsKLQl9CisJLyoKKwkgKiBlbmFibGUgb25seSBnbG9iYWwgaG9zdCBpbnRlcnJ1cHRzIGZvciBub3cuCisJICogVGhlIHBlci1wb3J0IGludGVycnVwdHMgZ2V0IGRvbmUgbGF0ZXIgYXMgcG9ydHMgYXJlIHNldCB1cC4KKwkgKi8KKwltdl9zZXRfbWFpbl9pcnFfbWFzayhob3N0LCAwLCBQQ0lfRVJSKTsKKwltdl9zZXRfaXJxX2NvYWxlc2NpbmcoaG9zdCwgaXJxX2NvYWxlc2NpbmdfaW9fY291bnQsCisJCQkJICAgIGlycV9jb2FsZXNjaW5nX3VzZWNzKTsKIGRvbmU6CiAJcmV0dXJuIHJjOwogfQpAQCAtMzI4OCwxMiArMzkwOCw2IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIAotLyoKLSAqIG1vZHVsZSBvcHRpb25zCi0gKi8KLXN0YXRpYyBpbnQgbXNpOwkgICAgICAvKiBVc2UgUENJIG1zaTsgZWl0aGVyIHplcm8gKG9mZiwgZGVmYXVsdCkgb3Igbm9uLXplcm8gKi8KLQotCiAvKiBtb3ZlIHRvIFBDSSBsYXllciBvciBsaWJhdGEgY29yZT8gKi8KIHN0YXRpYyBpbnQgcGNpX2dvXzY0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMzQ3NSwxMCArNDA4OSw1IEBACiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOwogCi0jaWZkZWYgQ09ORklHX1BDSQotbW9kdWxlX3BhcmFtKG1zaSwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobXNpLCAiRW5hYmxlIHVzZSBvZiBQQ0kgTVNJICgwPW9mZiwgMT1vbikiKTsKLSNlbmRpZgotCiBtb2R1bGVfaW5pdChtdl9pbml0KTsKIG1vZHVsZV9leGl0KG12X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9udi5jIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCmluZGV4IDQ0NGFmMDQuLjZjZGExMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTU3LDkgKzU3LDkgQEAKIAlOVl9NTUlPX0JBUgkJCT0gNSwKIAogCU5WX1BPUlRTCQkJPSAyLAotCU5WX1BJT19NQVNLCQkJPSAweDFmLAotCU5WX01XRE1BX01BU0sJCQk9IDB4MDcsCi0JTlZfVURNQV9NQVNLCQkJPSAweDdmLAorCU5WX1BJT19NQVNLCQkJPSBBVEFfUElPNCwKKwlOVl9NV0RNQV9NQVNLCQkJPSBBVEFfTVdETUEyLAorCU5WX1VETUFfTUFTSwkJCT0gQVRBX1VETUE2LAogCU5WX1BPUlQwX1NDUl9SRUdfT0ZGU0VUCQk9IDB4MDAsCiAJTlZfUE9SVDFfU0NSX1JFR19PRkZTRVQJCT0gMHg0MCwKIApAQCAtNDA4LDYgKzQwOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBudl9jb21tb25fb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAkuc2NyX3JlYWQJCT0gbnZfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBudl9zY3Jfd3JpdGUsCiB9OwpAQCAtNDIxLDE5ICs0MjIsMjEgQEAKIAkuaGFyZHJlc2V0CQk9IEFUQV9PUF9OVUxMLAogfTsKIAotLyogT1NETCBiejMzNTIgcmVwb3J0cyB0aGF0IG5mMi8zIGNvbnRyb2xsZXJzIGNhbid0IGRldGVybWluZSBkZXZpY2UKLSAqIHNpZ25hdHVyZSByZWxpYWJseS4gIEFsc28sIHRoZSBmb2xsb3dpbmcgdGhyZWFkIHJlcG9ydHMgZGV0ZWN0aW9uCi0gKiBmYWlsdXJlIG9uIGNvbGQgYm9vdCB3aXRoIHRoZSBzdGFuZGFyZCBkZWJvdW5jaW5nIHRpbWluZy4KKy8qIG5mMiBpcyByaXBlIHdpdGggaGFyZHJlc2V0IHJlbGF0ZWQgcHJvYmxlbXMuCisgKgorICoga2VybmVsIGJ6IzMzNTIgcmVwb3J0cyBuZjIvMyBjb250cm9sbGVycyBjYW4ndCBkZXRlcm1pbmUgZGV2aWNlCisgKiBzaWduYXR1cmUgcmVsaWFibHkuICBUaGUgZm9sbG93aW5nIHRocmVhZCByZXBvcnRzIGRldGVjdGlvbiBmYWlsdXJlCisgKiBvbiBjb2xkIGJvb3Qgd2l0aCB0aGUgc3RhbmRhcmQgZGVib3VuY2luZyB0aW1pbmcuCiAgKgogICogaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUubGludXguaWRlLzM0MDk4CiAgKgotICogRGVib3VuY2Ugd2l0aCBob3RwbHVnIHRpbWluZyBhbmQgcmVxdWVzdCBmb2xsb3ctdXAgU1JTVC4KKyAqIEFuZCBieiMxMjE3NiByZXBvcnRzIHRoYXQgaGFyZHJlc2V0IHNpbXBseSBkb2Vzbid0IHdvcmsgb24gbmYyLgorICogR2l2ZSB1cCBvbiBpdCBhbmQganVzdCBkb24ndCBkbyBoYXJkcmVzZXQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBudl9uZjJfb3BzID0gewotCS5pbmhlcml0cwkJPSAmbnZfY29tbW9uX29wcywKKwkuaW5oZXJpdHMJCT0gJm52X2dlbmVyaWNfb3BzLAogCS5mcmVlemUJCQk9IG52X25mMl9mcmVlemUsCiAJLnRoYXcJCQk9IG52X25mMl90aGF3LAotCS5oYXJkcmVzZXQJCT0gbnZfbm9jbGFzc2lmeV9oYXJkcmVzZXQsCiB9OwogCiAvKiBGb3IgaW5pdGlhbCBwcm9iaW5nIGFmdGVyIGJvb3QgYW5kIGhvdCBwbHVnZ2luZywgaGFyZHJlc2V0IG1vc3RseQpAQCAtMjUyMSw3ICsyNTI0LDcgQEAKIG1vZHVsZV9pbml0KG52X2luaXQpOwogbW9kdWxlX2V4aXQobnZfZXhpdCk7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYWRtYSwgYWRtYV9lbmFibGVkLCBib29sLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYWRtYSwgIkVuYWJsZSB1c2Ugb2YgQURNQSAoRGVmYXVsdDogdHJ1ZSkiKTsKK01PRFVMRV9QQVJNX0RFU0MoYWRtYSwgIkVuYWJsZSB1c2Ugb2YgQURNQSAoRGVmYXVsdDogZmFsc2UpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc3duY3EsIHN3bmNxX2VuYWJsZWQsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzd25jcSwgIkVuYWJsZSB1c2Ugb2YgU1dOQ1EgKERlZmF1bHQ6IHRydWUpIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKaW5kZXggYmE5YTI1Ny4uYjFmZDdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKQEAgLTE3Niw3ICsxNzYsOSBAQAogCS5jaGVja19hdGFwaV9kbWEJPSBwZGNfY2hlY2tfYXRhcGlfZG1hLAogCS5xY19wcmVwCQk9IHBkY19xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWUsCisKIAkuc2ZmX2lycV9jbGVhcgkJPSBwZGNfaXJxX2NsZWFyLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAogCS5wb3N0X2ludGVybmFsX2NtZAk9IHBkY19wb3N0X2ludGVybmFsX2NtZCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfZXJyb3JfaGFuZGxlciwKQEAgLTIxMyw4ICsyMTUsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHX1NBVEFfUEFUQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19vbGRfc2F0YV9vcHMsCiAJfSwKQEAgLTIyMiw4ICsyMjQsOCBAQAogCVtib2FyZF8yMDM3eF9wYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfcGF0YV9vcHMsCiAJfSwKQEAgLTIzMiw4ICsyMzQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHXzRfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfb2xkX3NhdGFfb3BzLAogCX0sCkBAIC0yNDIsOCArMjQ0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkJICBQRENfRkxBR180X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3BhdGFfb3BzLAogCX0sCkBAIC0yNTIsOCArMjU0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR19HRU5fSUkgfCBQRENfRkxBR19TQVRBX1BBVEEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfc2F0YV9vcHMsCiAJfSwKQEAgLTI2Miw4ICsyNjQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCQkgIFBEQ19GTEFHX0dFTl9JSSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19wYXRhX29wcywKIAl9LApAQCAtMjcyLDggKzI3NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJIHwgUERDX0ZMQUdfNF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19zYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCmluZGV4IGEwMDBjODYuLmMzOTM2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCS5zb2Z0cmVzZXQJCT0gQVRBX09QX05VTEwsCiAJLmVycm9yX2hhbmRsZXIJCT0gcXNfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBBVEFfT1BfTlVMTCwKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAKIAkuc2NyX3JlYWQJCT0gcXNfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBxc19zY3Jfd3JpdGUsCkBAIC0xNjAsNyArMTYxLDcgQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcXNfYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKaW5kZXggZDAwOTE2MC4uZTY3Y2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCkBAIC0yMDAsOCArMjAwLDggQEAKIAkvKiBzaWxfMzExMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX01PRDE1V1JJVEUsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApAQCAtMjA5LDI0ICsyMDksMjQgQEAKIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFIHwKIAkJCQkgIFNJTF9GTEFHX05PX1NBVEFfSVJRLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKIAkvKiBzaWxfMzUxMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX1JFUlJfT05fRE1BX0FDVCwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCiAJLyogc2lsXzMxMTQgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCmluZGV4IDI1OTBjMjIuLjBkODk5MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKQEAgLTQyOSwyNSArNDI5LDI1IEBACiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoNCkgfAogCQkJCSAgU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsMjRfb3BzLAogCX0sCiAJLyogc2lsXzMxMzIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygyKSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKIAkvKiBzaWxfMzEzMS9zaWxfMzUzMSAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDEpLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbDI0X29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCmluZGV4IDljNDNiNGUuLjhmOTgzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwpAQCAtOTcsOCArOTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHg3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCmluZGV4IDYwOWQxNDcuLjcyNTdmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwpAQCAtMzYxLDggKzM2MSw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19OT19BVEFQSV9ETUEsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zNzEsOCArMzcxLDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfTk9fQVRBUElfRE1BIHwKIAkJCQkgIEsyX0ZMQUdfU0FUQV84X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApAQCAtMzgwLDggKzM4MCw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19CQVJfUE9TXzMsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zODksOCArMzg5LDggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwppbmRleCBlYzA0YjhkLi5kY2UzZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjXzIwNjIxX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKaW5kZXggMDE5NTc1Yi4uZTViZmY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCkBAIC04OSw3ICs4OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdWxpX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkgIEFUQV9GTEFHX0lHTl9TSU1QTEVYLAotCS5waW9fbWFzayAgICAgICA9IDB4MWYsCQkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sgICAgICAgPSBBVEFfUElPNCwKIAkudWRtYV9tYXNrICAgICAgPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzICAgICAgID0gJnVsaV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggNWM2MmRhOS4uOThlOGM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC0xNDYsMjQgKzE0NiwyNCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIwX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHgwNywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ2NDIwX3NhdGFfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMV9zcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDA3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfc2F0YV9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIxX3Bwb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDAsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfcGF0YV9vcHMsCiB9OwpAQCAtMTcxLDggKzE3MSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ4MjUxX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJICBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4MDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0ODI1MV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggYzU3Y2RmZi4uZWQ3MGJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC0zMDgsNiArMzA4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZzY19zYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkvKiBUaGUgSVJRIGhhbmRsaW5nIGlzIG5vdCBxdWl0ZSBzdGFuZGFyZCBTRkYgYmVoYXZpb3VyIHNvIHdlCisJICAgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBsb3N0IGludGVycnVwdCBoYW5kbGVyICovCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCS5zZmZfdGZfbG9hZAkJPSB2c2Nfc2F0YV90Zl9sb2FkLAogCS5zZmZfdGZfcmVhZAkJPSB2c2Nfc2F0YV90Zl9yZWFkLAogCS5mcmVlemUJCQk9IHZzY19mcmVlemUsCkBAIC0zNDUsOCArMzQ4LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnZzY19zYXRhX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCmluZGV4IDk4MDk5ZjUuLmIxMTk2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYworKysgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKQEAgLTE2OTAsMTcgKzE2OTAsMTcgQEAKIAkJICB8ICgwICogU0FSTU9ERTBfU0hBREVOKSAvKiBXZSBkb24ndCB1c2Ugc2hhZG93IHJlZ2lzdGVycy4gKi8KIAkJICB8ICgxICogU0FSTU9ERTBfSU5UTU9ERV9SRUFEQ0xFQVIpCiAJCSAgfCAoMSAqIFNBUk1PREUwX0NXUkUpCi0JCSAgfCBJU19GUzUwKGRldik/U0FSTU9ERTBfUFJQV1RfRlM1MF81OiAKLQkJICAgICAgICAgICAgICAgICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zCisJCSAgfCAoSVNfRlM1MChkZXYpID8gU0FSTU9ERTBfUFJQV1RfRlM1MF81OgorCQkJICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zKQogCQkgIHwgKDEgKiBTQVJNT0RFMF9DQUxTVVBfMSkKLQkJICB8IElTX0ZTNTAgKGRldik/KDAKKwkJICB8IChJU19GUzUwKGRldikgPyAoMAogCQkJCSAgIHwgU0FSTU9ERTBfUlhWQ1NfMzIKIAkJCQkgICB8IFNBUk1PREUwX0FCUlZDU18zMiAKIAkJCQkgICB8IFNBUk1PREUwX1RYVkNTXzMyKToKIAkJICAgICAgICAgICAgICAgICAgKDAKIAkJCQkgICB8IFNBUk1PREUwX1JYVkNTXzFrCiAJCQkJICAgfCBTQVJNT0RFMF9BQlJWQ1NfMWsgCi0JCQkJICAgfCBTQVJNT0RFMF9UWFZDU18xaykpOworCQkJCSAgIHwgU0FSTU9ERTBfVFhWQ1NfMWspKSk7CiAKIAkvKiAxMG1zICogMTAwIGlzIDEgc2Vjb25kLiBUaGF0IHNob3VsZCBiZSBlbm91Z2gsIGFzIEFOMzo5IHNheXMgaXQgdGFrZXMKIAkgICAxbXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pcGhhc2UuYyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCmluZGV4IGUxYzc2MTEuLjc4Yzk3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC05NzcsOSArOTc3LDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwQnVmICs9IHNwcmludGYoIHBCdWYsICIuIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgc3ByaW50ZiggcEJ1ZiwgIlxuIiApOwotICAgICAgICAvLyBTUHJpbnQocHJudEJ1Zik7Ci0gICAgICAgIHByaW50ayhwcm50QnVmKTsKKyAgICAgICAgcHJpbnRrKCIlc1xuIiwgcHJudEJ1Zik7CiAgICAgICAgIGNvdW50ICs9IGNvbDsKICAgICAgICAgcEJ1ZiA9IHBybnRCdWY7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbGFuYWkuYyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKaW5kZXggMTQ0YTQ5Zi4uODczM2EyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbGFuYWkuYworKysgYi9kcml2ZXJzL2F0bS9sYW5haS5jCkBAIC05MDEsNyArOTAxLDcgQEAKIAkJY2xvY2tfbCgpOyB1ZGVsYXkoNSk7CiAJCWZvciAoaSA9IDEyODsgaSAhPSAwOyBpID4+PSAxKSB7ICAgLyogd3JpdGUgY29tbWFuZCBvdXQgKi8KIAkJCXRtcCA9IChsYW5haS0+Y29uZjEgJiB+Q09ORklHMV9QUk9NREFUQSkgfAotCQkJICAgIChkYXRhICYgaSkgPyBDT05GSUcxX1BST01EQVRBIDogMDsKKwkJCSAgICAoKGRhdGEgJiBpKSA/IENPTkZJRzFfUFJPTURBVEEgOiAwKTsKIAkJCWlmIChsYW5haS0+Y29uZjEgIT0gdG1wKSB7CiAJCQkJc2V0X2NvbmZpZzEodG1wKTsKIAkJCQl1ZGVsYXkoNSk7CS8qIExldCBuZXcgZGF0YSBzZXR0bGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1hdHRybGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYTI4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0bS9zb2xvcy1hdHRybGlzdC5jCkBAIC0wLDAgKzEsNzAgQEAKK1NPTE9TX0FUVFJfUk8oRHJpdmVyVmVyc2lvbikKK1NPTE9TX0FUVFJfUk8oQVBJVmVyc2lvbikKK1NPTE9TX0FUVFJfUk8oRmlybXdhcmVWZXJzaW9uKQorLy8gU09MT1NfQVRUUl9STyhEc3BWZXJzaW9uKQorLy8gU09MT1NfQVRUUl9STyhDb21tb25IYW5kc2hha2UpCitTT0xPU19BVFRSX1JPKENvbm5lY3RlZCkKK1NPTE9TX0FUVFJfUk8oT3BlcmF0aW9uYWxNb2RlKQorU09MT1NfQVRUUl9STyhTdGF0ZSkKK1NPTE9TX0FUVFJfUk8oV2F0Y2hkb2cpCitTT0xPU19BVFRSX1JPKE9wZXJhdGlvblByb2dyZXNzKQorU09MT1NfQVRUUl9STyhMYXN0RmFpbGVkKQorU09MT1NfQVRUUl9STyhUeEJpdFJhdGUpCitTT0xPU19BVFRSX1JPKFJ4Qml0UmF0ZSkKKy8vIFNPTE9TX0FUVFJfUk8oRGVsdEFDVEFUUGRzKQorLy8gU09MT1NfQVRUUl9STyhEZWx0QUNUQVRQdXMpCitTT0xPU19BVFRSX1JPKFR4QVRUTkRSKQorU09MT1NfQVRUUl9STyhSeEFUVE5EUikKK1NPTE9TX0FUVFJfUk8oQW5uZXhUeXBlKQorU09MT1NfQVRUUl9STyhHZW5lcmFsRmFpbHVyZSkKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZURwRG4pCitTT0xPU19BVFRSX1JPKEludGVybGVhdmVEcFVwKQorU09MT1NfQVRUUl9STyhSU0NvcnJlY3RlZEVycm9yc0RuKQorU09MT1NfQVRUUl9STyhSU1VuQ29ycmVjdGVkRXJyb3JzRG4pCitTT0xPU19BVFRSX1JPKFJTQ29ycmVjdGVkRXJyb3JzVXApCitTT0xPU19BVFRSX1JPKFJTVW5Db3JyZWN0ZWRFcnJvcnNVcCkKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZVJEbikKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZVJVcCkKK1NPTE9TX0FUVFJfUk8oU2hvd3RpbWVTdGFydCkKK1NPTE9TX0FUVFJfUk8oQVRVUlZlbmRvcikKK1NPTE9TX0FUVFJfUk8oQVRVQ0NvdW50cnkpCitTT0xPU19BVFRSX1JPKEFUVVJBTlNJUmV2KQorU09MT1NfQVRUUl9STyhBVFVSQU5TSVNURCkKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lSZXYpCitTT0xPU19BVFRSX1JPKEFUVUNBTlNJSWQpCitTT0xPU19BVFRSX1JPKEFUVUNBTlNJU1REKQorU09MT1NfQVRUUl9STyhEYXRhQm9vc3QpCitTT0xPU19BVFRSX1JPKExvY2FsSVRVQ291bnRyeUNvZGUpCitTT0xPU19BVFRSX1JPKExvY2FsU0VGKQorU09MT1NfQVRUUl9STyhMb2NhbEVuZExPUykKK1NPTE9TX0FUVFJfUk8oTG9jYWxTTlJNYXJnaW4pCitTT0xPU19BVFRSX1JPKExvY2FsTGluZUF0dG4pCitTT0xPU19BVFRSX1JPKFJhd0F0dG4pCitTT0xPU19BVFRSX1JPKExvY2FsVHhQb3dlcikKK1NPTE9TX0FUVFJfUk8oUmVtb3RlVHhQb3dlcikKK1NPTE9TX0FUVFJfUk8oUmVtb3RlU0VGKQorU09MT1NfQVRUUl9STyhSZW1vdGVMT1MpCitTT0xPU19BVFRSX1JPKFJlbW90ZUxpbmVBdHRuKQorU09MT1NfQVRUUl9STyhSZW1vdGVTTlJNYXJnaW4pCitTT0xPU19BVFRSX1JPKExpbmVVcENvdW50KQorU09MT1NfQVRUUl9STyhTUkFDbnQpCitTT0xPU19BVFRSX1JPKFNSQUNudFVwKQorU09MT1NfQVRUUl9STyhQcm9maWxlU3RhdHVzKQorU09MT1NfQVRUUl9SVyhBY3Rpb24pCitTT0xPU19BVFRSX1JXKEFjdGl2YXRlTGluZSkKK1NPTE9TX0FUVFJfUk8oTGluZVN0YXR1cykKK1NPTE9TX0FUVFJfUlcoSG9zdENvbnRyb2wpCitTT0xPU19BVFRSX1JXKEF1dG9TdGFydCkKK1NPTE9TX0FUVFJfUlcoRmFpbHNhZmUpCitTT0xPU19BVFRSX1JXKFNob3d0aW1lTGVkKQorU09MT1NfQVRUUl9SVyhSZXRyYWluKQorU09MT1NfQVRUUl9SVyhEZWZhdWx0cykKK1NPTE9TX0FUVFJfUlcoTGluZU1vZGUpCitTT0xPU19BVFRSX1JXKFByb2ZpbGUpCitTT0xPU19BVFRSX1JXKERldGVjdE5vaXNlKQorU09MT1NfQVRUUl9STyhTdXBwb3J0ZWRBbm5leGVzKQorU09MT1NfQVRUUl9STyhTdGF0dXMpCitTT0xPU19BVFRSX1JPKFRvdGFsU3RhcnQpCitTT0xPU19BVFRSX1JPKFJlY2VudFNob3d0aW1lU3RhcnQpCitTT0xPU19BVFRSX1JPKFRvdGFsUnhCbG9ja3MpCitTT0xPU19BVFRSX1JPKFRvdGFsVHhCbG9ja3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCmluZGV4IDg5ZDdhNmUuLmJlMjA0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCkBAIC05LDYgKzksNyBAQAogICoKICAqIEF1dGhvcnM6IE5hdGhhbiBXaWxsaWFtcyA8bmF0aGFuQHRyYXZlcnNlLmNvbS5hdT4KICAqICAgICAgICAgIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqICAgICAgICAgIFRyZWtlciBDaGVuIDx0cmVrZXJAeHJpby5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTM2LDggKzM3LDExIEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KIAotI2RlZmluZSBWRVJTSU9OICIwLjA0IgorI2RlZmluZSBWRVJTSU9OICIwLjA3IgogI2RlZmluZSBQVEFHICJzb2xvcy1wY2kiCiAKICNkZWZpbmUgQ09ORklHX1JBTV9TSVpFCTEyOApAQCAtNDUsMTYgKzQ5LDMxIEBACiAjZGVmaW5lIElSUV9FTl9BRERSCTB4NzgKICNkZWZpbmUgRlBHQV9WRVIJMHg3NAogI2RlZmluZSBJUlFfQ0xFQVIJMHg3MAotI2RlZmluZSBCVUdfRkxBRwkweDZDCisjZGVmaW5lIFdSSVRFX0ZMQVNICTB4NkMKKyNkZWZpbmUgUE9SVFMJCTB4NjgKKyNkZWZpbmUgRkxBU0hfQkxPQ0sJMHg2NAorI2RlZmluZSBGTEFTSF9CVVNZCTB4NjAKKyNkZWZpbmUgRlBHQV9NT0RFCTB4NUMKKyNkZWZpbmUgRkxBU0hfTU9ERQkweDU4CisjZGVmaW5lIFRYX0RNQV9BRERSKHBvcnQpCSgweDQwICsgKDQgKiAocG9ydCkpKQorI2RlZmluZSBSWF9ETUFfQUREUihwb3J0KQkoMHgzMCArICg0ICogKHBvcnQpKSkKIAogI2RlZmluZSBEQVRBX1JBTV9TSVpFCTMyNzY4CiAjZGVmaW5lIEJVRl9TSVpFCTQwOTYKKyNkZWZpbmUgRlBHQV9QQUdFCTUyOCAvKiBGUEdBIGZsYXNoIHBhZ2Ugc2l6ZSovCisjZGVmaW5lIFNPTE9TX1BBR0UJNTEyIC8qIFNvbG9zIGZsYXNoIHBhZ2Ugc2l6ZSovCisjZGVmaW5lIEZQR0FfQkxPQ0sJKEZQR0FfUEFHRSAqIDgpIC8qIEZQR0EgZmxhc2ggYmxvY2sgc2l6ZSovCisjZGVmaW5lIFNPTE9TX0JMT0NLCShTT0xPU19QQUdFICogOCkgLyogU29sb3MgZmxhc2ggYmxvY2sgc2l6ZSovCiAKICNkZWZpbmUgUlhfQlVGKGNhcmQsIG5yKSAoKGNhcmQtPmJ1ZmZlcnMpICsgKG5yKSpCVUZfU0laRSoyKQogI2RlZmluZSBUWF9CVUYoY2FyZCwgbnIpICgoY2FyZC0+YnVmZmVycykgKyAobnIpKkJVRl9TSVpFKjIgKyBCVUZfU0laRSkKIAotc3RhdGljIGludCBkZWJ1ZyA9IDA7CisjZGVmaW5lIFJYX0RNQV9TSVpFCTIwNDgKKworc3RhdGljIGludCByZXNldCA9IDA7CiBzdGF0aWMgaW50IGF0bWRlYnVnID0gMDsKK3N0YXRpYyBpbnQgZmlybXdhcmVfdXBncmFkZSA9IDA7CitzdGF0aWMgaW50IGZwZ2FfdXBncmFkZSA9IDA7CiAKIHN0cnVjdCBwa3RfaGRyIHsKIAlfX2xlMTYgc2l6ZTsKQEAgLTYzLDIzICs4Miw0OCBAQAogCV9fbGUxNiB0eXBlOwogfTsKIAorc3RydWN0IHNvbG9zX3NrYl9jYiB7CisJc3RydWN0IGF0bV92Y2MgKnZjYzsKKwl1aW50MzJfdCBkbWFfYWRkcjsKK307CisKKworI2RlZmluZSBTS0JfQ0Ioc2tiKQkJKChzdHJ1Y3Qgc29sb3Nfc2tiX2NiICopc2tiLT5jYikKKwogI2RlZmluZSBQS1RfREFUQQkwCiAjZGVmaW5lIFBLVF9DT01NQU5ECTEKICNkZWZpbmUgUEtUX1BPUEVOCTMKICNkZWZpbmUgUEtUX1BDTE9TRQk0CisjZGVmaW5lIFBLVF9TVEFUVVMJNQogCiBzdHJ1Y3Qgc29sb3NfY2FyZCB7CiAJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKIAl2b2lkIF9faW9tZW0gKmJ1ZmZlcnM7CiAJaW50IG5yX3BvcnRzOworCWludCB0eF9tYXNrOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IGF0bV9kZXYgKmF0bWRldls0XTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGxldDsKIAlzcGlubG9ja190IHR4X2xvY2s7CiAJc3BpbmxvY2tfdCB0eF9xdWV1ZV9sb2NrOwogCXNwaW5sb2NrX3QgY2xpX3F1ZXVlX2xvY2s7CisJc3BpbmxvY2tfdCBwYXJhbV9xdWV1ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcGFyYW1fcXVldWU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVs0XTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGNsaV9xdWV1ZVs0XTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiWzRdOworCXN0cnVjdCBza19idWZmICpyeF9za2JbNF07CisJd2FpdF9xdWV1ZV9oZWFkX3QgcGFyYW1fd3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZndfd3E7CisJaW50IHVzaW5nX2RtYTsKK307CisKKworc3RydWN0IHNvbG9zX3BhcmFtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJcGlkX3QgcGlkOworCWludCBwb3J0OworCXN0cnVjdCBza19idWZmICpyZXNwb25zZTsKIH07CiAKICNkZWZpbmUgU09MT1NfQ0hBTihhdG1kZXYpICgoaW50KSh1bnNpZ25lZCBsb25nKShhdG1kZXYpLT5waHlfZGF0YSkKQEAgLTg4LDE5ICsxMzIsMjIgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU29sb3MgUENJIGRyaXZlciIpOwogTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIExvb3BiYWNrIik7CitNT0RVTEVfUEFSTV9ERVNDKHJlc2V0LCAiUmVzZXQgU29sb3MgY2hpcHMgb24gc3RhcnR1cCIpOwogTU9EVUxFX1BBUk1fREVTQyhhdG1kZWJ1ZywgIlByaW50IEFUTSBkYXRhIik7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0oYXRtZGVidWcsIGludCwgMDQ0NCk7Ci0KLXN0YXRpYyBpbnQgb3BlbnM7CitNT0RVTEVfUEFSTV9ERVNDKGZpcm13YXJlX3VwZ3JhZGUsICJJbml0aWF0ZSBTb2xvcyBmaXJtd2FyZSB1cGdyYWRlIik7CitNT0RVTEVfUEFSTV9ERVNDKGZwZ2FfdXBncmFkZSwgIkluaXRpYXRlIEZQR0EgdXBncmFkZSIpOworbW9kdWxlX3BhcmFtKHJlc2V0LCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGF0bWRlYnVnLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGZpcm13YXJlX3VwZ3JhZGUsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oZnBnYV91cGdyYWRlLCBpbnQsIDA0NDQpOwogCiBzdGF0aWMgdm9pZCBmcGdhX3F1ZXVlKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpOwotc3RhdGljIGludCBmcGdhX3R4KHN0cnVjdCBzb2xvc19jYXJkICopOworc3RhdGljIHVpbnQzMl90IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc29sb3NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgc3RydWN0IGF0bV92Y2MqIGZpbmRfdmNjKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSwgaW50IHZjaSk7CiBzdGF0aWMgaW50IGxpc3RfdmNjcyhpbnQgdmNpKTsKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KTsKIHN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgdm9pZCBhdG1fcmVtb3ZlKHN0cnVjdCBzb2xvc19jYXJkICopOwogc3RhdGljIGludCBzZW5kX2NvbW1hbmQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOwpAQCAtMTE1LDYgKzE2MiwyNjQgQEAKICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQogCitzdGF0aWMgc3NpemVfdCBzb2xvc19wYXJhbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBhdG1fZGV2ICphdG1kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYXRtX2RldiwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGF0bWRldi0+ZGV2X2RhdGE7CisJc3RydWN0IHNvbG9zX3BhcmFtIHBybTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CisJaW50IGJ1ZmxlbjsKKworCWJ1ZmxlbiA9IHN0cmxlbihhdHRyLT5hdHRyLm5hbWUpICsgMTA7CisKKwlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpICsgYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikgeworCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBzb2xvc19wYXJhbV9zaG93KClcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJYnVmbGVuID0gc25wcmludGYoKHZvaWQgKikmaGVhZGVyWzFdLCBidWZsZW4gLSAxLAorCQkJICAiTCUwNWRcbiVzXG4iLCBjdXJyZW50LT5waWQsIGF0dHItPmF0dHIubmFtZSk7CisJc2tiX3B1dChza2IsIGJ1Zmxlbik7CisKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihidWZsZW4pOworCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYoMCk7CisJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfQ09NTUFORCk7CisKKwlwcm0ucGlkID0gY3VycmVudC0+cGlkOworCXBybS5yZXNwb25zZSA9IE5VTEw7CisJcHJtLnBvcnQgPSBTT0xPU19DSEFOKGF0bWRldik7CisKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlsaXN0X2FkZCgmcHJtLmxpc3QsICZjYXJkLT5wYXJhbV9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCWZwZ2FfcXVldWUoY2FyZCwgcHJtLnBvcnQsIHNrYiwgTlVMTCk7CisKKwl3YWl0X2V2ZW50X3RpbWVvdXQoY2FyZC0+cGFyYW1fd3EsIHBybS5yZXNwb25zZSwgNSAqIEhaKTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfZGVsKCZwcm0ubGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCWlmICghcHJtLnJlc3BvbnNlKQorCQlyZXR1cm4gLUVJTzsKKworCWJ1ZmxlbiA9IHBybS5yZXNwb25zZS0+bGVuOworCW1lbWNweShidWYsIHBybS5yZXNwb25zZS0+ZGF0YSwgYnVmbGVuKTsKKwlrZnJlZV9za2IocHJtLnJlc3BvbnNlKTsKKworCXJldHVybiBidWZsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNvbG9zX3BhcmFtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdG1fZGV2ICphdG1kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYXRtX2RldiwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGF0bWRldi0+ZGV2X2RhdGE7CisJc3RydWN0IHNvbG9zX3BhcmFtIHBybTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CisJaW50IGJ1ZmxlbjsKKwlzc2l6ZV90IHJldDsKKworCWJ1ZmxlbiA9IHN0cmxlbihhdHRyLT5hdHRyLm5hbWUpICsgMTEgKyBjb3VudDsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHNvbG9zX3BhcmFtX3N0b3JlKClcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJYnVmbGVuID0gc25wcmludGYoKHZvaWQgKikmaGVhZGVyWzFdLCBidWZsZW4gLSAxLAorCQkJICAiTCUwNWRcbiVzXG4lc1xuIiwgY3VycmVudC0+cGlkLCBhdHRyLT5hdHRyLm5hbWUsIGJ1Zik7CisKKwlza2JfcHV0KHNrYiwgYnVmbGVuKTsKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihidWZsZW4pOworCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYoMCk7CisJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfQ09NTUFORCk7CisKKwlwcm0ucGlkID0gY3VycmVudC0+cGlkOworCXBybS5yZXNwb25zZSA9IE5VTEw7CisJcHJtLnBvcnQgPSBTT0xPU19DSEFOKGF0bWRldik7CisKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlsaXN0X2FkZCgmcHJtLmxpc3QsICZjYXJkLT5wYXJhbV9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCWZwZ2FfcXVldWUoY2FyZCwgcHJtLnBvcnQsIHNrYiwgTlVMTCk7CisKKwl3YWl0X2V2ZW50X3RpbWVvdXQoY2FyZC0+cGFyYW1fd3EsIHBybS5yZXNwb25zZSwgNSAqIEhaKTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfZGVsKCZwcm0ubGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCXNrYiA9IHBybS5yZXNwb25zZTsKKworCWlmICghc2tiKQorCQlyZXR1cm4gLUVJTzsKKworCWJ1ZmxlbiA9IHNrYi0+bGVuOworCisJLyogU29tZXRpbWVzIGl0IGhhcyBhIG5ld2xpbmUsIHNvbWV0aW1lcyBpdCBkb2Vzbid0LiAqLworCWlmIChza2ItPmRhdGFbYnVmbGVuIC0gMV0gPT0gJ1xuJykKKwkJYnVmbGVuLS07CisKKwlpZiAoYnVmbGVuID09IDIgJiYgIXN0cm5jbXAoc2tiLT5kYXRhLCAiT0siLCAyKSkKKwkJcmV0ID0gY291bnQ7CisJZWxzZSBpZiAoYnVmbGVuID09IDUgJiYgIXN0cm5jbXAoc2tiLT5kYXRhLCAiRVJST1IiLCA1KSkKKwkJcmV0ID0gLUVJTzsKKwllbHNlIHsKKwkJLyogV2Uga25vdyB3ZSBoYXZlIGVub3VnaCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoaXM7IHdlIGFsbG9jYXRlZCAKKwkJICAgaXQgb3Vyc2VsdmVzICovCisJCXNrYi0+ZGF0YVtidWZsZW5dID0gMDsKKwkKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiVW5leHBlY3RlZCBwYXJhbWV0ZXIgcmVzcG9uc2U6ICclcydcbiIsCisJCQkgc2tiLT5kYXRhKTsKKwkJcmV0ID0gLUVJTzsKKwl9CisJa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqbmV4dF9zdHJpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaSA9IDA7CisJY2hhciAqdGhpcyA9IHNrYi0+ZGF0YTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgc2tiLT5sZW47IGkrKykgeworCQlpZiAodGhpc1tpXSA9PSAnXG4nKSB7CisJCQl0aGlzW2ldID0gMDsKKwkJCXNrYl9wdWxsKHNrYiwgaSArIDEpOworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJaWYgKCFpc3ByaW50KHRoaXNbaV0pKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogU3RhdHVzIHBhY2tldCBoYXMgZmllbGRzIHNlcGFyYXRlZCBieSBcbiwgc3RhcnRpbmcgd2l0aCBhIHZlcnNpb24gbnVtYmVyCisgKiBmb3IgdGhlIGluZm9ybWF0aW9uIHRoZXJlaW4uIEZpZWxkcyBhcmUuLi4uCisgKgorICogICAgIHBhY2tldCB2ZXJzaW9uCisgKiAgICAgUnhCaXRSYXRlCSh2ZXJzaW9uID49IDEpCisgKiAgICAgVHhCaXRSYXRlCSh2ZXJzaW9uID49IDEpCisgKiAgICAgU3RhdGUJCSh2ZXJzaW9uID49IDEpCisgKiAgICAgTG9jYWxTTlJNYXJnaW4JKHZlcnNpb24gPj0gMSkKKyAqICAgICBMb2NhbExpbmVBdHRuCSh2ZXJzaW9uID49IDEpCisgKi8gICAgICAgCitzdGF0aWMgaW50IHByb2Nlc3Nfc3RhdHVzKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljaGFyICpzdHIsICplbmQsICpzdGF0ZV9zdHIsICpzbnIsICphdHRuOworCWludCB2ZXIsIHJhdGVfdXAsIHJhdGVfZG93bjsKKworCWlmICghY2FyZC0+YXRtZGV2W3BvcnRdKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCisJdmVyID0gc2ltcGxlX3N0cnRvbChzdHIsIE5VTEwsIDEwKTsKKwlpZiAodmVyIDwgMSkgeworCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbmV4cGVjdGVkIHN0YXR1cyBpbnRlcnJ1cHQgdmVyc2lvbiAlZFxuIiwKKwkJCSB2ZXIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzdHIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoIXN0cmNtcChzdHIsICJFUlJPUiIpKSB7CisJCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiU3RhdHVzIHBhY2tldCBpbmRpY2F0ZWQgU29sb3MgZXJyb3Igb24gcG9ydCAlZCAoc3RhcnRpbmcgdXA/KVxuIiwKKwkJCSBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmF0ZV9kb3duID0gc2ltcGxlX3N0cnRvbChzdHIsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIC1FSU87CisKKwlzdHIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTzsKKwlyYXRlX3VwID0gc2ltcGxlX3N0cnRvbChzdHIsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIC1FSU87CisKKwlzdGF0ZV9zdHIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RhdGVfc3RyKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIEFueXRoaW5nIGJ1dCAnU2hvd3RpbWUnIGlzIGRvd24gKi8KKwlpZiAoc3RyY21wKHN0YXRlX3N0ciwgIlNob3d0aW1lIikpIHsKKwkJY2FyZC0+YXRtZGV2W3BvcnRdLT5zaWduYWwgPSBBVE1fUEhZX1NJR19MT1NUOworCQlyZWxlYXNlX3ZjY3MoY2FyZC0+YXRtZGV2W3BvcnRdKTsKKwkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUG9ydCAlZDogJXNcbiIsIHBvcnQsIHN0YXRlX3N0cik7CisJCXJldHVybiAwOworCX0KKworCXNuciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCWF0dG4gPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghYXR0bikKKwkJcmV0dXJuIC1FSU87CisKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJQb3J0ICVkOiAlcyBAJWQvJWQga2IvcyVzJXMlcyVzXG4iLAorCQkgcG9ydCwgc3RhdGVfc3RyLCByYXRlX2Rvd24vMTAwMCwgcmF0ZV91cC8xMDAwLAorCQkgc25yWzBdPyIsIFNOUiAiOiIiLCBzbnIsIGF0dG5bMF0/IiwgQXR0biAiOiIiLCBhdHRuKTsKKwkKKwljYXJkLT5hdG1kZXZbcG9ydF0tPmxpbmtfcmF0ZSA9IHJhdGVfZG93biAvIDQyNDsKKwljYXJkLT5hdG1kZXZbcG9ydF0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0ZPVU5EOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19jb21tYW5kKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gKnBybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjbWRwaWQ7CisJaW50IGZvdW5kID0gMDsKKworCWlmIChza2ItPmxlbiA8IDcpCisJCXJldHVybiAwOworCisJaWYgKHNrYi0+ZGF0YVswXSAhPSAnTCcgICAgfHwgIWlzZGlnaXQoc2tiLT5kYXRhWzFdKSB8fAorCSAgICAhaXNkaWdpdChza2ItPmRhdGFbMl0pIHx8ICFpc2RpZ2l0KHNrYi0+ZGF0YVszXSkgfHwKKwkgICAgIWlzZGlnaXQoc2tiLT5kYXRhWzRdKSB8fCAhaXNkaWdpdChza2ItPmRhdGFbNV0pIHx8CisJICAgIHNrYi0+ZGF0YVs2XSAhPSAnXG4nKQorCQlyZXR1cm4gMDsKKworCWNtZHBpZCA9IHNpbXBsZV9zdHJ0b2woJnNrYi0+ZGF0YVsxXSwgTlVMTCwgMTApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBybSwgJmNhcmQtPnBhcmFtX3F1ZXVlLCBsaXN0KSB7CisJCWlmIChwcm0tPnBvcnQgPT0gcG9ydCAmJiBwcm0tPnBpZCA9PSBjbWRwaWQpIHsKKwkJCXBybS0+cmVzcG9uc2UgPSBza2I7CisJCQlza2JfcHVsbChza2IsIDcpOworCQkJd2FrZV91cCgmY2FyZC0+cGFyYW1fd3EpOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jaywgZmxhZ3MpOworCXJldHVybiBmb3VuZDsKK30KKwogc3RhdGljIHNzaXplX3QgY29uc29sZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgY2hhciAqYnVmKQogewpAQCAtMTQwLDggKzQ0NSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOwogCi0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgInNpemU6ICVkXG4iLCBzaXplKTsKLQogCWlmIChzaXplID4gKEJVRl9TSVpFIC0gc2l6ZW9mKCpoZWFkZXIpKSkgewogCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIkNvbW1hbmQgaXMgdG9vIGJpZy4gIERyb3BwaW5nIHJlcXVlc3RcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTE4MCw4MiArNDgzLDE4MSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoY29uc29sZSwgMDY0NCwgY29uc29sZV9zaG93LCBjb25zb2xlX3N0b3JlKTsKIAorCisjZGVmaW5lIFNPTE9TX0FUVFJfUk8oeCkgc3RhdGljIERFVklDRV9BVFRSKHgsIDA0NDQsIHNvbG9zX3BhcmFtX3Nob3csIE5VTEwpOworI2RlZmluZSBTT0xPU19BVFRSX1JXKHgpIHN0YXRpYyBERVZJQ0VfQVRUUih4LCAwNjQ0LCBzb2xvc19wYXJhbV9zaG93LCBzb2xvc19wYXJhbV9zdG9yZSk7CisKKyNpbmNsdWRlICJzb2xvcy1hdHRybGlzdC5jIgorCisjdW5kZWYgU09MT1NfQVRUUl9STworI3VuZGVmIFNPTE9TX0FUVFJfUlcKKworI2RlZmluZSBTT0xPU19BVFRSX1JPKHgpICZkZXZfYXR0cl8jI3guYXR0ciwKKyNkZWZpbmUgU09MT1NfQVRUUl9SVyh4KSAmZGV2X2F0dHJfIyN4LmF0dHIsCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzb2xvc19hdHRyc1tdID0geworI2luY2x1ZGUgInNvbG9zLWF0dHJsaXN0LmMiCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc29sb3NfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBzb2xvc19hdHRycywKKwkubmFtZSA9ICJwYXJhbWV0ZXJzIiwKK307CisKK3N0YXRpYyBpbnQgZmxhc2hfdXBncmFkZShzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IGNoaXApCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBjaGFyICpmd19uYW1lOworCXVpbnQzMl90IGRhdGEzMiA9IDA7CisJaW50IGJsb2Nrc2l6ZSA9IDA7CisJaW50IG51bWJsb2NrcyA9IDA7CisJaW50IG9mZnNldDsKKworCWlmIChjaGlwID09IDApIHsKKwkJZndfbmFtZSA9ICJzb2xvcy1GUEdBLmJpbiI7CisJCWJsb2Nrc2l6ZSA9IEZQR0FfQkxPQ0s7CisJfSBlbHNlIHsKKwkJZndfbmFtZSA9ICJzb2xvcy1GaXJtd2FyZS5iaW4iOworCQlibG9ja3NpemUgPSBTT0xPU19CTE9DSzsKKwl9CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZjYXJkLT5kZXYtPmRldikpCisJCXJldHVybiAtRU5PRU5UOworCisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiRmxhc2ggdXBncmFkZSBzdGFydGluZ1xuIik7CisKKwludW1ibG9ja3MgPSBmdy0+c2l6ZSAvIGJsb2Nrc2l6ZTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJGaXJtd2FyZSBzaXplOiAlemRcbiIsIGZ3LT5zaXplKTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJOdW1iZXIgb2YgYmxvY2tzOiAlZFxuIiwgbnVtYmxvY2tzKTsKKwkKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJDaGFuZ2luZyBGUEdBIHRvIFVwZGF0ZSBtb2RlXG4iKTsKKwlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCisKKwkvKiBTZXQgbW9kZSB0byBDaGlwIEVyYXNlICovCisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiU2V0IEZQR0EgRmxhc2ggbW9kZSB0byAlcyBDaGlwIEVyYXNlXG4iLAorCQkgY2hpcD8iU29sb3MiOiJGUEdBIik7CisJaW93cml0ZTMyKChjaGlwICogMiksIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfTU9ERSk7CisKKworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIFdSSVRFX0ZMQVNIKTsKKwl3YWl0X2V2ZW50KGNhcmQtPmZ3X3dxLCAhaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9CVVNZKSk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3LT5zaXplOyBvZmZzZXQgKz0gYmxvY2tzaXplKSB7CisJCWludCBpOworCisJCS8qIENsZWFyIHdyaXRlIGZsYWcgKi8KKwkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCisJCS8qIFNldCBtb2RlIHRvIEJsb2NrIFdyaXRlICovCisJCS8qIGRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlNldCBGUEdBIEZsYXNoIG1vZGUgdG8gQmxvY2sgV3JpdGVcbiIpOyAqLworCQlpb3dyaXRlMzIoKChjaGlwICogMikgKyAxKSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKworCQkvKiBDb3B5IGJsb2NrIHRvIGJ1ZmZlciwgc3dhcHBpbmcgZWFjaCAxNiBiaXRzICovCisJCWZvcihpID0gMDsgaSA8IGJsb2Nrc2l6ZTsgaSArPSA0KSB7CisJCQl1aW50MzJfdCB3b3JkID0gc3dhaGIzMnAoKHVpbnQzMl90ICopKGZ3LT5kYXRhICsgb2Zmc2V0ICsgaSkpOworCQkJaW93cml0ZTMyKHdvcmQsIFJYX0JVRihjYXJkLCAzKSArIGkpOworCQl9CisKKwkJLyogU3BlY2lmeSBibG9jayBudW1iZXIgYW5kIHRoZW4gdHJpZ2dlciBmbGFzaCB3cml0ZSAqLworCQlpb3dyaXRlMzIob2Zmc2V0IC8gYmxvY2tzaXplLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JMT0NLKTsKKwkJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCQl3YWl0X2V2ZW50KGNhcmQtPmZ3X3dxLCAhaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9CVVNZKSk7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfTU9ERSk7CisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmV0dXJuaW5nIEZQR0EgdG8gRGF0YSBtb2RlXG4iKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlycXJldHVybl90IHNvbG9zX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBkZXZfaWQ7CiAJaW50IGhhbmRsZWQgPSAxOwogCi0JLy9BQ0sgSVJRCiAJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0NMRUFSKTsKLQkvL0Rpc2FibGUgSVJRcyBmcm9tIEZQR0EKLQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKLQkvKiBJZiB3ZSBvbmx5IGRvIGl0IHdoZW4gdGhlIGRldmljZSBpcyBvcGVuLCB3ZSBsb3NlIGNvbnNvbGUKLQkgICBtZXNzYWdlcyAqLwotCWlmICgxIHx8IG9wZW5zKQorCS8qIElmIHdlJ3JlIHVwIGFuZCBydW5uaW5nLCBqdXN0IGtpY2sgdGhlIHRhc2tsZXQgdG8gcHJvY2VzcyBUWC9SWCAqLworCWlmIChjYXJkLT5hdG1kZXZbMF0pCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmNhcmQtPnRsZXQpOworCWVsc2UKKwkJd2FrZV91cCgmY2FyZC0+Zndfd3EpOwogCi0JLy9FbmFibGUgSVJRcyBmcm9tIEZQR0EKLQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKIHZvaWQgc29sb3NfYmgodW5zaWduZWQgbG9uZyBjYXJkX2FyZykKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9ICh2b2lkICopY2FyZF9hcmc7Ci0JaW50IHBvcnQ7CiAJdWludDMyX3QgY2FyZF9mbGFnczsKLQl1aW50MzJfdCB0eF9tYXNrOwogCXVpbnQzMl90IHJ4X2RvbmUgPSAwOworCWludCBwb3J0OwogCi0JY2FyZF9mbGFncyA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7Ci0KLQkvKiBUaGUgVFggYml0cyBhcmUgc2V0IGlmIHRoZSBjaGFubmVsIGlzIGJ1c3k7IGNsZWFyIGlmIG5vdC4gV2Ugd2FudCB0bwotCSAgIGludm9rZSBmcGdhX3R4KCkgdW5sZXNzIF9hbGxfIHRoZSBiaXRzIGZvciBhY3RpdmUgY2hhbm5lbHMgYXJlIHNldCAqLwotCXR4X21hc2sgPSAoMSA8PCBjYXJkLT5ucl9wb3J0cykgLSAxOwotCWlmICgoY2FyZF9mbGFncyAmIHR4X21hc2spICE9IHR4X21hc2spCi0JCWZwZ2FfdHgoY2FyZCk7CisJLyoKKwkgKiBTaW5jZSBmcGdhX3R4KCkgaXMgZ29pbmcgdG8gbmVlZCB0byByZWFkIHRoZSBmbGFncyB1bmRlciBpdHMgbG9jaywKKwkgKiBpdCBjYW4gcmV0dXJuIHRoZW0gdG8gdXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGhpdCBQQ0kgTU1JTworCSAqIGFnYWluIGZvciB0aGUgc2FtZSBpbmZvcm1hdGlvbgorCSAqLworCWNhcmRfZmxhZ3MgPSBmcGdhX3R4KGNhcmQpOwogCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGNhcmQtPm5yX3BvcnRzOyBwb3J0KyspIHsKIAkJaWYgKGNhcmRfZmxhZ3MgJiAoMHgxMCA8PCBwb3J0KSkgewotCQkJc3RydWN0IHBrdF9oZHIgaGVhZGVyOworCQkJc3RydWN0IHBrdF9oZHIgX2hkciwgKmhlYWRlcjsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCQkJaW50IHNpemU7CiAKLQkJCXJ4X2RvbmUgfD0gMHgxMCA8PCBwb3J0OworCQkJaWYgKGNhcmQtPnVzaW5nX2RtYSkgeworCQkJCXNrYiA9IGNhcmQtPnJ4X3NrYltwb3J0XTsKKwkJCQljYXJkLT5yeF9za2JbcG9ydF0gPSBOVUxMOwogCi0JCQltZW1jcHlfZnJvbWlvKCZoZWFkZXIsIFJYX0JVRihjYXJkLCBwb3J0KSwgc2l6ZW9mKGhlYWRlcikpOworCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCQkgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKLQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXIuc2l6ZSk7CisJCQkJaGVhZGVyID0gKHZvaWQgKilza2ItPmRhdGE7CisJCQkJc2l6ZSA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2l6ZSk7CisJCQkJc2tiX3B1dChza2IsIHNpemUgKyBzaXplb2YoKmhlYWRlcikpOworCQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKKwkJCX0gZWxzZSB7CisJCQkJaGVhZGVyID0gJl9oZHI7CiAKLQkJCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKLQkJCWlmICghc2tiKSB7Ci0JCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgZm9yIFJYXG4iKTsKLQkJCQljb250aW51ZTsKKwkJCQlyeF9kb25lIHw9IDB4MTAgPDwgcG9ydDsKKworCQkJCW1lbWNweV9mcm9taW8oaGVhZGVyLCBSWF9CVUYoY2FyZCwgcG9ydCksIHNpemVvZigqaGVhZGVyKSk7CisKKwkJCQlzaXplID0gbGUxNl90b19jcHUoaGVhZGVyLT5zaXplKTsKKworCQkJCXNrYiA9IGFsbG9jX3NrYihzaXplICsgMSwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKCFza2IpIHsKKwkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGZvciBSWFxuIik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLAorCQkJCQkgICAgICBSWF9CVUYoY2FyZCwgcG9ydCkgKyBzaXplb2YoKmhlYWRlciksCisJCQkJCSAgICAgIHNpemUpOwogCQkJfQotCi0JCQltZW1jcHlfZnJvbWlvKHNrYl9wdXQoc2tiLCBzaXplKSwKLQkJCQkgICAgICBSWF9CVUYoY2FyZCwgcG9ydCkgKyBzaXplb2YoaGVhZGVyKSwKLQkJCQkgICAgICBzaXplKTsKLQogCQkJaWYgKGF0bWRlYnVnKSB7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmVjZWl2ZWQ6IGRldmljZSAlZFxuIiwgcG9ydCk7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAic2l6ZTogJWQgVlBJOiAlZCBWQ0k6ICVkXG4iLAotCQkJCQkgc2l6ZSwgbGUxNl90b19jcHUoaGVhZGVyLnZwaSksCi0JCQkJCSBsZTE2X3RvX2NwdShoZWFkZXIudmNpKSk7CisJCQkJCSBzaXplLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCisJCQkJCSBsZTE2X3RvX2NwdShoZWFkZXItPnZjaSkpOwogCQkJCXByaW50X2J1ZmZlcihza2IpOwogCQkJfQogCi0JCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhlYWRlci50eXBlKSkgeworCQkJc3dpdGNoIChsZTE2X3RvX2NwdShoZWFkZXItPnR5cGUpKSB7CiAJCQljYXNlIFBLVF9EQVRBOgotCQkJCXZjYyA9IGZpbmRfdmNjKGNhcmQtPmF0bWRldltwb3J0XSwgbGUxNl90b19jcHUoaGVhZGVyLnZwaSksCi0JCQkJCSAgICAgICBsZTE2X3RvX2NwdShoZWFkZXIudmNpKSk7CisJCQkJdmNjID0gZmluZF92Y2MoY2FyZC0+YXRtZGV2W3BvcnRdLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCisJCQkJCSAgICAgICBsZTE2X3RvX2NwdShoZWFkZXItPnZjaSkpOwogCQkJCWlmICghdmNjKSB7CiAJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJSZWNlaXZlZCBwYWNrZXQgZm9yIHVua25vd24gVkNJLlZQSSAlZC4lZCBvbiBwb3J0ICVkXG4iLAotCQkJCQkJCSBsZTE2X3RvX2NwdShoZWFkZXIudmNpKSwgbGUxNl90b19jcHUoaGVhZGVyLnZwaSksCisJCQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSwgbGUxNl90b19jcHUoaGVhZGVyLT52cGkpLAogCQkJCQkJCSBwb3J0KTsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtMjY0LDE5ICs2NjYsNTAgQEAKIAkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeCk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgUEtUX1NUQVRVUzoKKwkJCQlpZiAocHJvY2Vzc19zdGF0dXMoY2FyZCwgcG9ydCwgc2tiKSAmJgorCQkJCSAgICBuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiQmFkIHN0YXR1cyBwYWNrZXQgb2YgJWQgYnl0ZXMgb24gcG9ydCAlZDpcbiIsIHNrYi0+bGVuLCBwb3J0KTsKKwkJCQkJcHJpbnRfYnVmZmVyKHNrYik7CisJCQkJfQorCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgUEtUX0NPTU1BTkQ6CiAJCQlkZWZhdWx0OiAvKiBGSVhNRTogTm90IHJlYWxseSwgc3VyZWx5PyAqLworCQkJCWlmIChwcm9jZXNzX2NvbW1hbmQoY2FyZCwgcG9ydCwgc2tiKSkKKwkJCQkJYnJlYWs7CiAJCQkJc3Bpbl9sb2NrKCZjYXJkLT5jbGlfcXVldWVfbG9jayk7CiAJCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJmNhcmQtPmNsaV9xdWV1ZVtwb3J0XSkgPiAxMCkgewogCQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRHJvcHBpbmcgY29uc29sZSByZXNwb25zZSBvbiBwb3J0ICVkXG4iLAogCQkJCQkJCSBwb3J0KTsKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQl9IGVsc2UKIAkJCQkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmNsaV9xdWV1ZVtwb3J0XSwgc2tiKTsKIAkJCQlzcGluX3VubG9jaygmY2FyZC0+Y2xpX3F1ZXVlX2xvY2spOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCS8qIEFsbG9jYXRlIFJYIHNrYnMgZm9yIGFueSBwb3J0cyB3aGljaCBuZWVkIHRoZW0gKi8KKwkJaWYgKGNhcmQtPnVzaW5nX2RtYSAmJiBjYXJkLT5hdG1kZXZbcG9ydF0gJiYKKwkJICAgICFjYXJkLT5yeF9za2JbcG9ydF0pIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IoUlhfRE1BX1NJWkUsIEdGUF9BVE9NSUMpOworCQkJaWYgKHNrYikgeworCQkJCVNLQl9DQihza2IpLT5kbWFfYWRkciA9CisJCQkJCXBjaV9tYXBfc2luZ2xlKGNhcmQtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJICAgICAgIFJYX0RNQV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCWlvd3JpdGUzMihTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCSAgY2FyZC0+Y29uZmlnX3JlZ3MgKyBSWF9ETUFfQUREUihwb3J0KSk7CisJCQkJY2FyZC0+cnhfc2tiW3BvcnRdID0gc2tiOworCQkJfSBlbHNlIHsKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgUlggc2tiIik7CisKKwkJCQkvKiBXZSdsbCBoYXZlIHRvIHRyeSBhZ2FpbiBsYXRlciAqLworCQkJCXRhc2tsZXRfc2NoZWR1bGUoJmNhcmQtPnRsZXQpOworCQkJfQorCQl9CiAJfQogCWlmIChyeF9kb25lKQogCQlpb3dyaXRlMzIocnhfZG9uZSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKQEAgLTMyNiw3ICs3NTksNyBAQAogCQkJICAgICAgIHZjYy0+dmNpKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvcihpPTA7IGk8MzI7IGkrKyl7CisJCWZvcihpID0gMDsgaSA8IFZDQ19IVEFCTEVfU0laRTsgaSsrKXsKIAkJCWhlYWQgPSAmdmNjX2hhc2hbaV07CiAJCQlza19mb3JfZWFjaChzLCBub2RlLCBoZWFkKSB7CiAJCQkJbnVtX2ZvdW5kICsrOwpAQCAtMzQyLDYgKzc3NSwyOCBAQAogCXJldHVybiBudW1fZm91bmQ7CiB9CiAKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KQoreworICAgICAgICBpbnQgaTsKKworICAgICAgICB3cml0ZV9sb2NrX2lycSgmdmNjX3NrbGlzdF9sb2NrKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFZDQ19IVEFCTEVfU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmdmNjX2hhc2hbaV07CisgICAgICAgICAgICAgICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CisgICAgICAgICAgICAgICAgc3RydWN0IHNvY2sgKnM7CisgICAgICAgICAgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYzsKKworICAgICAgICAgICAgICAgIHNrX2Zvcl9lYWNoX3NhZmUocywgbm9kZSwgdG1wLCBoZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2Y2MgPSBhdG1fc2socyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmNjLT5kZXYgPT0gZGV2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjY19yZWxlYXNlX2FzeW5jKHZjYywgLUVQSVBFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tfZGVsX25vZGVfaW5pdChzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd3JpdGVfdW5sb2NrX2lycSgmdmNjX3NrbGlzdF9sb2NrKTsKK30KKwogCiBzdGF0aWMgaW50IHBvcGVuKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CkBAIC0zNDksNiArODA0LDEyIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOwogCisJaWYgKHZjYy0+cW9zLmFhbCAhPSBBVE1fQUFMNSkgeworCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBBVE0gdHlwZSAlZFxuIiwKKwkJCSB2Y2MtPnFvcy5hYWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYiAmJiBuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gcG9wZW4oKVxuIik7CkBAIC0zNTYsMjIgKzgxNywxNyBAQAogCX0KIAloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpoZWFkZXIpKTsKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNigwKTsKIAloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KHZjYy0+dnBpKTsKIAloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KHZjYy0+dmNpKTsKIAloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfUE9QRU4pOwogCiAJZnBnYV9xdWV1ZShjYXJkLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSwgc2tiLCBOVUxMKTsKIAotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJPcGVuIGZvciB2cGkgJWQgYW5kIHZjaSAlZCBvbiBpbnRlcmZhY2UgJWRcbiIsIHZjYy0+dnBpLCB2Y2MtPnZjaSwgU09MT1NfQ0hBTih2Y2MtPmRldikpOwotCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsgLy8gYWNjZXB0IHRoZSB2cGkgLyB2Y2kKKwlzZXRfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncyk7CiAJc2V0X2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIAlsaXN0X3ZjY3MoMCk7CiAKLQlpZiAoIW9wZW5zKQotCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7Ci0KLQlvcGVucysrOyAvL2NvdW50IG9wZW4gUFZDcwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zODksMTcgKzg0NSwxMyBAQAogCX0KIAloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpoZWFkZXIpKTsKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNigwKTsKIAloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KHZjYy0+dnBpKTsKIAloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KHZjYy0+dmNpKTsKIAloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfUENMT1NFKTsKIAogCWZwZ2FfcXVldWUoY2FyZCwgU09MT1NfQ0hBTih2Y2MtPmRldiksIHNrYiwgTlVMTCk7CiAKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiQ2xvc2UgZm9yIHZwaSAlZCBhbmQgdmNpICVkIG9uIGludGVyZmFjZSAlZFxuIiwgdmNjLT52cGksIHZjYy0+dmNpLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSk7Ci0JaWYgKCEtLW9wZW5zKQotCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7Ci0KIAljbGVhcl9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAljbGVhcl9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncyk7CiAKQEAgLTQzOSwyMiArODkxLDI2IEBACiAJCSAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCWludCBvbGRfbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkqKHZvaWQgKiopc2tiLT5jYiA9IHZjYzsKKwlTS0JfQ0Ioc2tiKS0+dmNjID0gdmNjOwogCi0Jc3Bpbl9sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dHhfcXVldWVfbG9jaywgZmxhZ3MpOwogCW9sZF9sZW4gPSBza2JfcXVldWVfbGVuKCZjYXJkLT50eF9xdWV1ZVtwb3J0XSk7CiAJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPnR4X3F1ZXVlW3BvcnRdLCBza2IpOwotCXNwaW5fdW5sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKKwlpZiAoIW9sZF9sZW4pCisJCWNhcmQtPnR4X21hc2sgfD0gKDEgPDwgcG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dHhfcXVldWVfbG9jaywgZmxhZ3MpOwogCi0JLyogSWYgVFggbWlnaHQgbmVlZCB0byBiZSBzdGFydGVkLCBkbyBzbyAqLworCS8qIFRoZW9yZXRpY2FsbHkgd2UgY291bGQganVzdCBzY2hlZHVsZSB0aGUgdGFza2xldCBoZXJlLCBidXQKKwkgICB0aGF0IGludHJvZHVjZXMgbGF0ZW5jeSB3ZSBkb24ndCB3YW50IC0tIGl0J3Mgbm90aWNlYWJsZSAqLwogCWlmICghb2xkX2xlbikKIAkJZnBnYV90eChjYXJkKTsKIH0KIAotc3RhdGljIGludCBmcGdhX3R4KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkKQorc3RhdGljIHVpbnQzMl90IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQpCiB7Ci0JdWludDMyX3QgdHhfcGVuZGluZzsKKwl1aW50MzJfdCB0eF9wZW5kaW5nLCBjYXJkX2ZsYWdzOwogCXVpbnQzMl90IHR4X3N0YXJ0ZWQgPSAwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKQEAgLTQ2Miw2OSArOTE4LDc3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50eF9sb2NrLCBmbGFncyk7CisJCisJY2FyZF9mbGFncyA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJLyoKKwkgKiBUaGUgcXVldWUgbG9jayBpcyByZXF1aXJlZCBmb3IgX3dyaXRpbmdfIHRvIHR4X21hc2ssIGJ1dCB3ZSdyZQorCSAqIE9LIHRvIHJlYWQgaXQgaGVyZSB3aXRob3V0IGxvY2tpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1cGRhdGUKKwkgKiB0aGF0IHdlIGNvdWxkIHJhY2Ugd2l0aCBpcyBpbiBmcGdhX3F1ZXVlKCkgd2hlcmUgaXQgc2V0cyBhIGJpdAorCSAqIGZvciBhIG5ldyBwb3J0Li4uIGJ1dCBpdCdzIGdvaW5nIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiBpZgorCSAqIGl0J3MgZG9pbmcgdGhhdCwgYW55d2F5LgorCSAqLworCXR4X3BlbmRpbmcgPSBjYXJkLT50eF9tYXNrICYgfmNhcmRfZmxhZ3M7CiAKLQl0eF9wZW5kaW5nID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLQotCWRldl92ZGJnKCZjYXJkLT5kZXYtPmRldiwgIlRYIEZsYWdzIGFyZSAlWFxuIiwgdHhfcGVuZGluZyk7Ci0KLQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2FyZC0+bnJfcG9ydHM7IHBvcnQrKykgewotCQlpZiAoISh0eF9wZW5kaW5nICYgKDEgPDwgcG9ydCkpKSB7CisJZm9yIChwb3J0ID0gMDsgdHhfcGVuZGluZzsgdHhfcGVuZGluZyA+Pj0gMSwgcG9ydCsrKSB7CisJCWlmICh0eF9wZW5kaW5nICYgMSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKm9sZHNrYiA9IGNhcmQtPnR4X3NrYltwb3J0XTsKKwkJCWlmIChvbGRza2IpCisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihvbGRza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBvbGRza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKIAkJCXNwaW5fbG9jaygmY2FyZC0+dHhfcXVldWVfbG9jayk7CiAJCQlza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+dHhfcXVldWVbcG9ydF0pOworCQkJaWYgKCFza2IpCisJCQkJY2FyZC0+dHhfbWFzayAmPSB+KDEgPDwgcG9ydCk7CiAJCQlzcGluX3VubG9jaygmY2FyZC0+dHhfcXVldWVfbG9jayk7CiAKLQkJCWlmICghc2tiKQorCQkJaWYgKHNrYiAmJiAhY2FyZC0+dXNpbmdfZG1hKSB7CisJCQkJbWVtY3B5X3RvaW8oVFhfQlVGKGNhcmQsIHBvcnQpLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCQl0eF9zdGFydGVkIHw9IDEgPDwgcG9ydDsKKwkJCQlvbGRza2IgPSBza2I7IC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHNrYiBhbHJlYWR5ICovCisJCQl9IGVsc2UgaWYgKHNrYiAmJiBjYXJkLT51c2luZ19kbWEpIHsKKwkJCQlTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShjYXJkLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkJCQkJICAgICAgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlpb3dyaXRlMzIoU0tCX0NCKHNrYiktPmRtYV9hZGRyLAorCQkJCQkgIGNhcmQtPmNvbmZpZ19yZWdzICsgVFhfRE1BX0FERFIocG9ydCkpOworCQkJfQorCisJCQlpZiAoIW9sZHNrYikKIAkJCQljb250aW51ZTsKIAorCQkJLyogQ2xlYW4gdXAgYW5kIGZyZWUgb2xkc2tiIG5vdyBpdCdzIGdvbmUgKi8KIAkJCWlmIChhdG1kZWJ1ZykgewogCQkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlRyYW5zbWl0dGVkOiBwb3J0ICVkXG4iLAogCQkJCQkgcG9ydCk7Ci0JCQkJcHJpbnRfYnVmZmVyKHNrYik7CisJCQkJcHJpbnRfYnVmZmVyKG9sZHNrYik7CiAJCQl9Ci0JCQltZW1jcHlfdG9pbyhUWF9CVUYoY2FyZCwgcG9ydCksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCQl2Y2MgPSAqKHZvaWQgKiopc2tiLT5jYjsKKwkJCXZjYyA9IFNLQl9DQihvbGRza2IpLT52Y2M7CiAKIAkJCWlmICh2Y2MpIHsKIAkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eCk7Ci0JCQkJc29sb3NfcG9wKHZjYywgc2tiKTsKKwkJCQlzb2xvc19wb3AodmNjLCBvbGRza2IpOwogCQkJfSBlbHNlCi0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2lycShvbGRza2IpOwogCi0JCQl0eF9zdGFydGVkIHw9IDEgPDwgcG9ydDsgLy9TZXQgVFggZnVsbCBmbGFnCiAJCX0KIAl9CisJLyogRm9yIG5vbi1ETUEgVFgsIHdyaXRlIHRoZSAnVFggc3RhcnQnIGJpdCBmb3IgYWxsIGZvdXIgcG9ydHMgc2ltdWx0YW5lb3VzbHkgKi8KIAlpZiAodHhfc3RhcnRlZCkKIAkJaW93cml0ZTMyKHR4X3N0YXJ0ZWQsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50eF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGNhcmRfZmxhZ3M7CiB9CiAKIHN0YXRpYyBpbnQgcHNlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IHZjYy0+ZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IE5VTEw7CiAJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgcGt0bGVuOwogCi0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgInBzZW5kIGNhbGxlZC5cbiIpOwotCS8vZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJkZXYsdnBpLHZjaSA9ICVkLCVkLCVkXG4iLFNPTE9TX0NIQU4odmNjLT5kZXYpLHZjYy0+dnBpLHZjYy0+dmNpKTsKLQotCWlmIChkZWJ1ZykgewotCQlza2IyID0gYXRtX2FsbG9jX2NoYXJnZSh2Y2MsIHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHNrYjIpIHsKLQkJCW1lbWNweShza2IyLT5kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQkJCXNrYl9wdXQoc2tiMiwgc2tiLT5sZW4pOwotCQkJdmNjLT5wdXNoKHZjYywgc2tiMik7Ci0JCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeCk7Ci0JCX0KLQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHgpOwotCQlzb2xvc19wb3AodmNjLCBza2IpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2tiLT5sZW4gPiAoQlVGX1NJWkUgLSBzaXplb2YoKmhlYWRlcikpKSB7CisJcGt0bGVuID0gc2tiLT5sZW47CisJaWYgKHBrdGxlbiA+IChCVUZfU0laRSAtIHNpemVvZigqaGVhZGVyKSkpIHsKIAkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiTGVuZ3RoIG9mIFBEVSBpcyB0b28gbGFyZ2UuIERyb3BwaW5nIFBEVS5cbiIpOwogCQlzb2xvc19wb3AodmNjLCBza2IpOwogCQlyZXR1cm4gMDsKQEAgLTUzOSw2ICsxMDAzLDcgQEAKIAogCQlyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZXhwYW5kX2J5LCAwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAicHNrYl9leHBhbmRfaGVhZCBmYWlsZWQuXG4iKTsKIAkJCXNvbG9zX3BvcCh2Y2MsIHNrYik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC01NDYsNyArMTAxMSw4IEBACiAKIAloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKIAotCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKwkvKiBUaGlzIGRvZXMgX25vdF8gaW5jbHVkZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyICovCisJaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYocGt0bGVuKTsKIAloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KHZjYy0+dnBpKTsKIAloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KHZjYy0+dmNpKTsKIAloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfREFUQSk7CkBAIC01NzMsMjAgKzEwMzksMTkgQEAKIAogc3RhdGljIGludCBmcGdhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgZXJyLCBpOworCWludCBlcnI7CiAJdWludDE2X3QgZnBnYV92ZXI7CiAJdWludDhfdCBtYWpvcl92ZXIsIG1pbm9yX3ZlcjsKIAl1aW50MzJfdCBkYXRhMzI7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQ7CiAKLQlpZiAoZGVidWcpCi0JCXJldHVybiAwOwotCiAJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYXJkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNhcmQtPmRldiA9IGRldjsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5md193cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+cGFyYW1fd3EpOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC01OTQsNiArMTA1OSwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BXzMyQklUX01BU0spOworCWlmIChlcnIpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCAzMi1iaXQgRE1BIG1hc2tcbiIpOworCQlnb3RvIG91dDsKKwl9CisKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgInNvbG9zIik7CiAJaWYgKGVycikgewogCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCByZWdpb25zXG4iKTsKQEAgLTYxMSwxNyArMTA4MiwxMyBAQAogCQlnb3RvIG91dF91bm1hcF9jb25maWc7CiAJfQogCi0vLwlmb3IoaT0wO2k8NjQgO2krPTQpewotLy8JCWRhdGEzMj1pb3JlYWQzMihjYXJkLT5idWZmZXJzICsgaSk7Ci0vLwkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICIlMDhsWFxuIiwodW5zaWduZWQgbG9uZylkYXRhMzIpOwotLy8JfQorCWlmIChyZXNldCkgeworCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCQlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAogCi0JLy9GaWxsIENvbmZpZyBNZW0gd2l0aCB6ZXJvcwotCWZvcihpID0gMDsgaSA8IDEyODsgaSArPSA0KQotCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBpKTsKLQotCS8vU2V0IFJYIGVtcHR5IGZsYWdzCi0JaW93cml0ZTMyKDB4RjAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCisJfQogCiAJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX1ZFUik7CiAJZnBnYV92ZXIgPSAoZGF0YTMyICYgMHgwMDAwRkZGRik7CkBAIC02MzAsNTUgKzEwOTcsNTMgQEAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJTb2xvcyBGUEdBIFZlcnNpb24gJWQuJTAyZCBzdm4tJWRcbiIsCiAJCSBtYWpvcl92ZXIsIG1pbm9yX3ZlciwgZnBnYV92ZXIpOwogCi0JY2FyZC0+bnJfcG9ydHMgPSAyOyAvKiBGSVhNRTogRGV0ZWN0IGRhdWdodGVyYm9hcmQgKi8KKwlpZiAoMCAmJiBmcGdhX3ZlciA+IDI3KQorCQljYXJkLT51c2luZ19kbWEgPSAxOworCWVsc2UgeworCQkvKiBTZXQgUlggZW1wdHkgZmxhZyBmb3IgYWxsIHBvcnRzICovCisJCWlvd3JpdGUzMigweEYwLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOworCX0KIAotCWVyciA9IGF0bV9pbml0KGNhcmQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VubWFwX2JvdGg7CisJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBQT1JUUyk7CisJY2FyZC0+bnJfcG9ydHMgPSAoZGF0YTMyICYgMHgwMDAwMDBGRik7CiAKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBjYXJkKTsKKwogCXRhc2tsZXRfaW5pdCgmY2FyZC0+dGxldCwgc29sb3NfYmgsICh1bnNpZ25lZCBsb25nKWNhcmQpOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT50eF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+dHhfcXVldWVfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmNsaV9xdWV1ZV9sb2NrKTsKLS8qCi0JLy8gU2V0IExvb3BiYWNrIG1vZGUKLQlkYXRhMzIgPSAweDAwMDEwMDAwOwotCWlvd3JpdGUzMihkYXRhMzIsY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLSovCi0vKgotCS8vIEZpbGwgQnVmZmVycyB3aXRoIHplcm9zCi0JZm9yIChpID0gMDsgaSA8IEJVRl9TSVpFICogODsgaSArPSA0KQotCQlpb3dyaXRlMzIoMCwgY2FyZC0+YnVmZmVycyArIGkpOwotKi8KLS8qCi0JZm9yKGkgPSAwOyBpIDwgKEJVRl9TSVpFICogMSk7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4MTIzNDU2NzgsIGNhcmQtPmJ1ZmZlcnMgKyBpICsgKDAqQlVGX1NJWkUpKTsKLQlmb3IoaSA9IDA7IGkgPCAoQlVGX1NJWkUgKiAxKTsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHhhYmNkZWY5OCwgY2FyZC0+YnVmZmVycyArIGkgKyAoMSpCVUZfU0laRSkpOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cGFyYW1fcXVldWUpOwogCi0JLy8gUmVhZCBDb25maWcgTWVtb3J5Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlJlYWRpbmcgQ29uZmlnIE1FTVxuIik7Ci0JaSA9IDA7Ci0JZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlkYXRhMzI9aW9yZWFkMzIoY2FyZC0+YnVmZmVycyArIGkqKEJVRl9TSVpFLzIpKTsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIkFkZHI6ICVsWCBEYXRhOiAlMDhsWFxuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKShhZGRyX3N0YXJ0ICsgaSooQlVGX1NJWkUvMikpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZGF0YTMyKTsKLQl9Ci0qLwotCS8vZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJSZXF1ZXN0aW5nIElSUTogJWRcbiIsZGV2LT5pcnEpOwotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzb2xvc19pcnEsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbG9zX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkgICJzb2xvcy1wY2kiLCBjYXJkKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKIAkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpbnRlcnJ1cHQgSVJROiAlZFxuIiwgZGV2LT5pcnEpOworCQlnb3RvIG91dF91bm1hcF9ib3RoOworCX0KIAotCS8vIEVuYWJsZSBJUlFzCiAJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCisJaWYgKGZwZ2FfdXBncmFkZSkKKwkJZmxhc2hfdXBncmFkZShjYXJkLCAwKTsKKworCWlmIChmaXJtd2FyZV91cGdyYWRlKQorCQlmbGFzaF91cGdyYWRlKGNhcmQsIDEpOworCisJZXJyID0gYXRtX2luaXQoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZnJlZV9pcnE7CisKIAlyZXR1cm4gMDsKIAorIG91dF9mcmVlX2lycToKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CisJZnJlZV9pcnEoZGV2LT5pcnEsIGNhcmQpOworCXRhc2tsZXRfa2lsbCgmY2FyZC0+dGxldCk7CisJCiAgb3V0X3VubWFwX2JvdGg6CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5jb25maWdfcmVncyk7CiAgb3V0X3VubWFwX2NvbmZpZzoKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmJ1ZmZlcnMpOwpAQCAtNjkzLDkgKzExNTgsMTAgQEAKIHsKIAlpbnQgaTsKIAotCW9wZW5zID0gMDsKLQogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ucl9wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CisKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+dHhfcXVldWVbaV0pOwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT5jbGlfcXVldWVbaV0pOwogCkBAIC03MDcsNiArMTE3Myw4IEBACiAJCX0KIAkJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmY2FyZC0+YXRtZGV2W2ldLT5jbGFzc19kZXYsICZkZXZfYXR0cl9jb25zb2xlKSkKIAkJCWRldl9lcnIoJmNhcmQtPmRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIGNvbnNvbGUgZm9yIEFUTSBkZXZpY2UgJWRcbiIsIGkpOworCQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2Rldi5rb2JqLCAmc29sb3NfYXR0cl9ncm91cCkpCisJCQlkZXZfZXJyKCZjYXJkLT5kZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBwYXJhbWV0ZXIgZ3JvdXAgZm9yIEFUTSBkZXZpY2UgJWRcbiIsIGkpOwogCiAJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlJlZ2lzdGVyZWQgQVRNIGRldmljZSAlZFxuIiwgY2FyZC0+YXRtZGV2W2ldLT5udW1iZXIpOwogCkBAIC03MTQsNiArMTE4MiwyMiBAQAogCQljYXJkLT5hdG1kZXZbaV0tPmNpX3JhbmdlLnZjaV9iaXRzID0gMTY7CiAJCWNhcmQtPmF0bWRldltpXS0+ZGV2X2RhdGEgPSBjYXJkOwogCQljYXJkLT5hdG1kZXZbaV0tPnBoeV9kYXRhID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylpOworCQljYXJkLT5hdG1kZXZbaV0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX1VOS05PV047CisKKwkJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiKSB7CisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBhdG1faW5pdCgpXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNigwKTsKKwkJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwkJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNigwKTsKKwkJaGVhZGVyLT50eXBlID0gY3B1X3RvX2xlMTYoUEtUX1NUQVRVUyk7CisKKwkJZnBnYV9xdWV1ZShjYXJkLCBpLCBza2IsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTcyNCw4ICsxMjA4LDI4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnJfcG9ydHM7IGkrKykgewogCQlpZiAoY2FyZC0+YXRtZGV2W2ldKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCiAJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJVbnJlZ2lzdGVyaW5nIEFUTSBkZXZpY2UgJWRcbiIsIGNhcmQtPmF0bWRldltpXS0+bnVtYmVyKTsKKworCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2Rldi5rb2JqLCAmc29sb3NfYXR0cl9ncm91cCk7CiAJCQlhdG1fZGV2X2RlcmVnaXN0ZXIoY2FyZC0+YXRtZGV2W2ldKTsKKworCQkJc2tiID0gY2FyZC0+cnhfc2tiW2ldOworCQkJaWYgKHNrYikgeworCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCQkgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJfQorCQkJc2tiID0gY2FyZC0+dHhfc2tiW2ldOworCQkJaWYgKHNrYikgeworCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCX0KKwkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNhcmQtPnR4X3F1ZXVlW2ldKSkpCisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworIAogCQl9CiAJfQogfQpAQCAtNzMzLDMxICsxMjM3LDMxIEBACiBzdGF0aWMgdm9pZCBmcGdhX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJCisJLyogRGlzYWJsZSBJUlFzICovCisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCi0JaWYgKGRlYnVnKQotCQlyZXR1cm47CisJLyogUmVzZXQgRlBHQSAqLworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJKHZvaWQpaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKIAogCWF0bV9yZW1vdmUoY2FyZCk7CiAKLQlkZXZfdmRiZygmZGV2LT5kZXYsICJGcmVlaW5nIElSUVxuIik7Ci0JLy8gRGlzYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAlmcmVlX2lycShkZXYtPmlycSwgY2FyZCk7CiAJdGFza2xldF9raWxsKCZjYXJkLT50bGV0KTsKIAotCS8vCWlvd3JpdGUzMigweDAxLHBjaXJlZ3MpOwotCWRldl92ZGJnKCZkZXYtPmRldiwgIlVubWFwcGluZyBQQ0kgcmVzb3VyY2VcbiIpOworCS8qIFJlbGVhc2UgZGV2aWNlIGZyb20gcmVzZXQgKi8KKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCSh2b2lkKWlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCisKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmJ1ZmZlcnMpOwogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+Y29uZmlnX3JlZ3MpOwogCi0JZGV2X3ZkYmcoJmRldi0+ZGV2LCAiUmVsZWFzaW5nIFBDSSBSZWdpb25cbiIpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWtmcmVlKGNhcmQpOwotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJmcGdhX3JlbW92ZVxuIik7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZnBnYV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9iYXNlLmggYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCmluZGV4IDBhNWYwNTUuLmRkYzk3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmgKKysrIGIvZHJpdmVycy9iYXNlL2Jhc2UuaApAQCAtNjMsNiArNjMsMzIgQEAKICNkZWZpbmUgdG9fY2xhc3Mob2JqKQlcCiAJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNsYXNzX3ByaXZhdGUsIGNsYXNzX3N1YnN5cy5rb2JqKQogCisvKioKKyAqIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAtIHN0cnVjdHVyZSB0byBob2xkIHRoZSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgY29yZSBwb3J0aW9ucyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqCisgKiBAa2xpc3RfY2hpbGRyZW4gLSBrbGlzdCBjb250YWluaW5nIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGRldmljZQorICogQGtub2RlX3BhcmVudCAtIG5vZGUgaW4gc2libGluZyBsaXN0CisgKiBAa25vZGVfZHJpdmVyIC0gbm9kZSBpbiBkcml2ZXIgbGlzdAorICogQGtub2RlX2J1cyAtIG5vZGUgaW4gYnVzIGxpc3QKKyAqIEBkZXZpY2UgLSBwb2ludGVyIGJhY2sgdG8gdGhlIHN0cnVjdCBjbGFzcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzCisgKiBhc3NvY2lhdGVkIHdpdGguCisgKgorICogTm90aGluZyBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgY29yZSBzaG91bGQgZXZlciB0b3VjaCB0aGVzZSBmaWVsZHMuCisgKi8KK3N0cnVjdCBkZXZpY2VfcHJpdmF0ZSB7CisJc3RydWN0IGtsaXN0IGtsaXN0X2NoaWxkcmVuOworCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX3BhcmVudDsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9kcml2ZXI7CisJc3RydWN0IGtsaXN0X25vZGUga25vZGVfYnVzOworCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKK307CisjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX3BhcmVudChvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsIGtub2RlX3BhcmVudCkKKyNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfZHJpdmVyKG9iaikJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfZHJpdmVyKQorI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9idXMob2JqKQlcCisJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9idXMpCisKIC8qIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBkZXZpY2VzX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGJ1c2VzX2luaXQodm9pZCk7CkBAIC04NiwxMCArMTEyLDEzIEBACiAKIGV4dGVybiB2b2lkIGRyaXZlcl9kZXRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7CiBleHRlcm4gaW50IGRyaXZlcl9wcm9iZV9kZXZpY2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbmxpbmUgaW50IGRyaXZlcl9tYXRjaF9kZXZpY2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRydi0+YnVzLT5tYXRjaCAmJiBkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpOworfQogCiBleHRlcm4gdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCk7Ci1leHRlcm4gaW50IHN5c2Rldl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1leHRlcm4gaW50IHN5c2Rldl9yZXN1bWUodm9pZCk7CiAKIGV4dGVybiBjaGFyICptYWtlX2NsYXNzX25hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGtvYmplY3QgKmtvYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggODNmMzJiOC4uZGMwMzBmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJaW50IGVyciA9IC1FTk9ERVY7CiAKIAlkZXYgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1Zik7Ci0JaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMKSB7CisJaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMICYmIGRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKSB7CiAJCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KIAkJCWRvd24oJmRldi0+cGFyZW50LT5zZW0pOwogCQlkb3duKCZkZXYtPnNlbSk7CkBAIC0yNTMsNyArMjUzLDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cykgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OworCisJaWYgKG4pIHsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTI4Niw3ICsyOTMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZidXMtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPmtub2RlX2J1cyA6IE5VTEwpKTsKKwkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9idXMgOiBOVUxMKSk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihkZXYsIGRhdGEpOwogCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CkBAIC0zMjAsNyArMzI3LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmYnVzLT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9idXMgOiBOVUxMKSk7CisJCQkgICAgIChzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfYnVzIDogTlVMTCkpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkKIAkJaWYgKG1hdGNoKGRldiwgZGF0YSkgJiYgZ2V0X2RldmljZShkZXYpKQogCQkJYnJlYWs7CkBAIC01MDcsNyArNTE0LDggQEAKIAkJCXJldCA9IGRldmljZV9hdHRhY2goZGV2KTsKIAkJV0FSTl9PTihyZXQgPCAwKTsKIAkJaWYgKHJldCA+PSAwKQotCQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfYnVzLCAmYnVzLT5wLT5rbGlzdF9kZXZpY2VzKTsKKwkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX2J1cywKKwkJCQkgICAgICAgJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcyk7CiAJfQogfQogCkBAIC01MjgsOCArNTM2LDggQEAKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+YnVzLT5wLT5kZXZpY2VzX2tzZXQtPmtvYmosCiAJCQkJICBkZXZfbmFtZShkZXYpKTsKIAkJZGV2aWNlX3JlbW92ZV9hdHRycyhkZXYtPmJ1cywgZGV2KTsKLQkJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfYnVzKSkKLQkJCWtsaXN0X2RlbCgmZGV2LT5rbm9kZV9idXMpOworCQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5wLT5rbm9kZV9idXMpKQorCQkJa2xpc3RfZGVsKCZkZXYtPnAtPmtub2RlX2J1cyk7CiAKIAkJcHJfZGVidWcoImJ1czogJyVzJzogcmVtb3ZlIGRldmljZSAlc1xuIiwKIAkJCSBkZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CkBAIC04MzEsMTQgKzgzOSwxNiBAQAogCiBzdGF0aWMgdm9pZCBrbGlzdF9kZXZpY2VzX2dldChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCiAJZ2V0X2RldmljZShkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBrbGlzdF9kZXZpY2VzX3B1dChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCiAJcHV0X2RldmljZShkZXYpOwogfQpAQCAtOTMyLDYgKzk0Miw3IEBACiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7CiAJa2ZyZWUoYnVzLT5wKTsKIG91dDoKKwlidXMtPnAgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChidXNfcmVnaXN0ZXIpOwpAQCAtOTUzLDYgKzk2NCw3IEBACiAJYnVzX3JlbW92ZV9maWxlKGJ1cywgJmJ1c19hdHRyX3VldmVudCk7CiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7CiAJa2ZyZWUoYnVzLT5wKTsKKwlidXMtPnAgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3VucmVnaXN0ZXIpOwogCkBAIC05OTMsMTggKzEwMDUsMjAgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJc3RydWN0IGtsaXN0X25vZGUgKm47CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OwogCXN0cnVjdCBkZXZpY2UgKmI7CiAKIAlsaXN0X2Zvcl9lYWNoKHBvcywgbGlzdCkgewogCQluID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IGtsaXN0X25vZGUsIG5fbm9kZSk7Ci0JCWIgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJYiA9IGRldl9wcnYtPmRldmljZTsKIAkJaWYgKGNvbXBhcmUoYSwgYikgPD0gMCkgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsCi0JCQkJICAgICAgICZiLT5rbm9kZV9idXMubl9ub2RlKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZhLT5wLT5rbm9kZV9idXMubl9ub2RlLAorCQkJCSAgICAgICAmYi0+cC0+a25vZGVfYnVzLm5fbm9kZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOworCWxpc3RfbW92ZV90YWlsKCZhLT5wLT5rbm9kZV9idXMubl9ub2RlLCBsaXN0KTsKIH0KIAogdm9pZCBidXNfc29ydF9icmVhZHRoZmlyc3Qoc3RydWN0IGJ1c190eXBlICpidXMsCkBAIC0xMDE0LDYgKzEwMjgsNyBAQAogCUxJU1RfSEVBRChzb3J0ZWRfZGV2aWNlcyk7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwogCXN0cnVjdCBrbGlzdF9ub2RlICpuOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGtsaXN0ICpkZXZpY2Vfa2xpc3Q7CiAKQEAgLTEwMjIsNyArMTAzNyw4IEBACiAJc3Bpbl9sb2NrKCZkZXZpY2Vfa2xpc3QtPmtfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmZGV2aWNlX2tsaXN0LT5rX2xpc3QpIHsKIAkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOwotCQlkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCQlkZXZpY2VfaW5zZXJ0aW9uX3NvcnRfa2xpc3QoZGV2LCAmc29ydGVkX2RldmljZXMsIGNvbXBhcmUpOwogCX0KIAlsaXN0X3NwbGljZSgmc29ydGVkX2RldmljZXMsICZkZXZpY2Vfa2xpc3QtPmtfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCBmM2VhZTYzLi5lNzNjOTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTEwOSw2ICsxMDksNyBAQAogc3RhdGljIHZvaWQgZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmopOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcCA9IGRldi0+cDsKIAogCWlmIChkZXYtPnJlbGVhc2UpCiAJCWRldi0+cmVsZWFzZShkZXYpOwpAQCAtMTIwLDYgKzEyMSw3IEBACiAJCVdBUk4oMSwgS0VSTl9FUlIgIkRldmljZSAnJXMnIGRvZXMgbm90IGhhdmUgYSByZWxlYXNlKCkgIgogCQkJImZ1bmN0aW9uLCBpdCBpcyBicm9rZW4gYW5kIG11c3QgYmUgZml4ZWQuXG4iLAogCQkJZGV2X25hbWUoZGV2KSk7CisJa2ZyZWUocCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGRldmljZV9rdHlwZSA9IHsKQEAgLTEzNCw4ICsxMzYsNiBAQAogCiAJaWYgKGt0eXBlID09ICZkZXZpY2Vfa3R5cGUpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmopOwotCQlpZiAoZGV2LT51ZXZlbnRfc3VwcHJlc3MpCi0JCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+YnVzKQogCQkJcmV0dXJuIDE7CiAJCWlmIChkZXYtPmNsYXNzKQpAQCAtNTA3LDE0ICs1MDcsMTYgQEAKIAogc3RhdGljIHZvaWQga2xpc3RfY2hpbGRyZW5fZ2V0KHN0cnVjdCBrbGlzdF9ub2RlICpuKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9wYXJlbnQpOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcCA9IHRvX2RldmljZV9wcml2YXRlX3BhcmVudChuKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwLT5kZXZpY2U7CiAKIAlnZXRfZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGtsaXN0X2NoaWxkcmVuX3B1dChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnAgPSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcC0+ZGV2aWNlOwogCiAJcHV0X2RldmljZShkZXYpOwogfQpAQCAtNTM4LDggKzU0MCw2IEBACiB7CiAJZGV2LT5rb2JqLmtzZXQgPSBkZXZpY2VzX2tzZXQ7CiAJa29iamVjdF9pbml0KCZkZXYtPmtvYmosICZkZXZpY2Vfa3R5cGUpOwotCWtsaXN0X2luaXQoJmRldi0+a2xpc3RfY2hpbGRyZW4sIGtsaXN0X2NoaWxkcmVuX2dldCwKLQkJICAga2xpc3RfY2hpbGRyZW5fcHV0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5kbWFfcG9vbHMpOwogCWluaXRfTVVURVgoJmRldi0+c2VtKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5kZXZyZXNfbG9jayk7CkBAIC03NzcsMTcgKzc3NywxMiBAQAogaW50IGRldl9zZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgdmFyZ3M7Ci0JY2hhciAqczsKKwlpbnQgZXJyOwogCiAJdmFfc3RhcnQodmFyZ3MsIGZtdCk7Ci0JdnNucHJpbnRmKGRldi0+YnVzX2lkLCBzaXplb2YoZGV2LT5idXNfaWQpLCBmbXQsIHZhcmdzKTsKKwllcnIgPSBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKCZkZXYtPmtvYmosIGZtdCwgdmFyZ3MpOwogCXZhX2VuZCh2YXJncyk7Ci0KLQkvKiBld3d3Li4uIHNvbWUgb2YgdGhlc2UgYnVnZ2VycyBoYXZlIC8gaW4gdGhlIG5hbWUuLi4gKi8KLQl3aGlsZSAoKHMgPSBzdHJjaHIoZGV2LT5idXNfaWQsICcvJykpKQotCQkqcyA9ICchJzsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfc2V0X25hbWUpOwogCkBAIC04NjQsMTIgKzg1OSwyNiBAQAogCWlmICghZGV2KQogCQlnb3RvIGRvbmU7CiAKLQkvKiBUZW1wb3JhcmlseSBzdXBwb3J0IGluaXRfbmFtZSBpZiBpdCBpcyBzZXQuCi0JICogSXQgd2lsbCBvdmVycmlkZSBidXNfaWQgZm9yIG5vdyAqLwotCWlmIChkZXYtPmluaXRfbmFtZSkKLQkJZGV2X3NldF9uYW1lKGRldiwgIiVzIiwgZGV2LT5pbml0X25hbWUpOworCWRldi0+cCA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYtPnApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5wLT5kZXZpY2UgPSBkZXY7CisJa2xpc3RfaW5pdCgmZGV2LT5wLT5rbGlzdF9jaGlsZHJlbiwga2xpc3RfY2hpbGRyZW5fZ2V0LAorCQkgICBrbGlzdF9jaGlsZHJlbl9wdXQpOwogCi0JaWYgKCFzdHJsZW4oZGV2LT5idXNfaWQpKQorCS8qCisJICogZm9yIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGRldmljZXMsIHdoaWNoIHNob3VsZCBhbGwgYmUgY29udmVydGVkCisJICogc29tZSBkYXksIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbmFtZS4gV2UgcHJldmVudCByZWFkaW5nIGJhY2sKKwkgKiB0aGUgbmFtZSwgYW5kIGZvcmNlIHRoZSB1c2Ugb2YgZGV2X25hbWUoKQorCSAqLworCWlmIChkZXYtPmluaXRfbmFtZSkgeworCQlkZXZfc2V0X25hbWUoZGV2LCBkZXYtPmluaXRfbmFtZSk7CisJCWRldi0+aW5pdF9uYW1lID0gTlVMTDsKKwl9CisKKwlpZiAoIWRldl9uYW1lKGRldikpCiAJCWdvdG8gZG9uZTsKIAogCXByX2RlYnVnKCJkZXZpY2U6ICclcyc6ICVzXG4iLCBkZXZfbmFtZShkZXYpLCBfX2Z1bmNfXyk7CkBAIC05MjgsNyArOTM3LDggQEAKIAlrb2JqZWN0X3VldmVudCgmZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAJYnVzX2F0dGFjaF9kZXZpY2UoZGV2KTsKIAlpZiAocGFyZW50KQotCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9wYXJlbnQsICZwYXJlbnQtPmtsaXN0X2NoaWxkcmVuKTsKKwkJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfcGFyZW50LAorCQkJICAgICAgICZwYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuKTsKIAogCWlmIChkZXYtPmNsYXNzKSB7CiAJCW11dGV4X2xvY2soJmRldi0+Y2xhc3MtPnAtPmNsYXNzX211dGV4KTsKQEAgLTEwNDIsNyArMTA1Miw3IEBACiAJZGV2aWNlX3BtX3JlbW92ZShkZXYpOwogCWRwbV9zeXNmc19yZW1vdmUoZGV2KTsKIAlpZiAocGFyZW50KQotCQlrbGlzdF9kZWwoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJa2xpc3RfZGVsKCZkZXYtPnAtPmtub2RlX3BhcmVudCk7CiAJaWYgKE1BSk9SKGRldi0+ZGV2dCkpIHsKIAkJZGV2aWNlX3JlbW92ZV9zeXNfZGV2X2VudHJ5KGRldik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZ0X2F0dHIpOwpAQCAtMTEwMyw3ICsxMTEzLDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCkgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpwOworCisJaWYgKG4pIHsKKwkJcCA9IHRvX2RldmljZV9wcml2YXRlX3BhcmVudChuKTsKKwkJZGV2ID0gcC0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTExMjUsNyArMTE0Miw3IEBACiAJc3RydWN0IGRldmljZSAqY2hpbGQ7CiAJaW50IGVycm9yID0gMDsKIAotCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5rbGlzdF9jaGlsZHJlbiwgJmkpOworCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbiwgJmkpOwogCXdoaWxlICgoY2hpbGQgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihjaGlsZCwgZGF0YSk7CiAJa2xpc3RfaXRlcl9leGl0KCZpKTsKQEAgLTExNTYsNyArMTE3Myw3IEBACiAJaWYgKCFwYXJlbnQpCiAJCXJldHVybiBOVUxMOwogCi0Ja2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CisJa2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CiAJd2hpbGUgKChjaGlsZCA9IG5leHRfZGV2aWNlKCZpKSkpCiAJCWlmIChtYXRjaChjaGlsZCwgZGF0YSkgJiYgZ2V0X2RldmljZShjaGlsZCkpCiAJCQlicmVhazsKQEAgLTEzNDgsNyArMTM2NSwxMCBAQAogCWRldi0+cmVsZWFzZSA9IGRldmljZV9jcmVhdGVfcmVsZWFzZTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcnZkYXRhKTsKIAotCXZzbnByaW50ZihkZXYtPmJ1c19pZCwgQlVTX0lEX1NJWkUsIGZtdCwgYXJncyk7CisJcmV0dmFsID0ga29iamVjdF9zZXRfbmFtZV92YXJncygmZGV2LT5rb2JqLCBmbXQsIGFyZ3MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycm9yOwpAQCAtMTQ1MiwxOSArMTQ3MiwxNSBAQAogCQlvbGRfY2xhc3NfbmFtZSA9IG1ha2VfY2xhc3NfbmFtZShkZXYtPmNsYXNzLT5uYW1lLCAmZGV2LT5rb2JqKTsKICNlbmRpZgogCi0Jb2xkX2RldmljZV9uYW1lID0ga21hbGxvYyhCVVNfSURfU0laRSwgR0ZQX0tFUk5FTCk7CisJb2xkX2RldmljZV9uYW1lID0ga3N0cmR1cChkZXZfbmFtZShkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9sZF9kZXZpY2VfbmFtZSkgewogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQlzdHJsY3B5KG9sZF9kZXZpY2VfbmFtZSwgZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFKTsKLQlzdHJsY3B5KGRldi0+YnVzX2lkLCBuZXdfbmFtZSwgQlVTX0lEX1NJWkUpOwogCiAJZXJyb3IgPSBrb2JqZWN0X3JlbmFtZSgmZGV2LT5rb2JqLCBuZXdfbmFtZSk7Ci0JaWYgKGVycm9yKSB7Ci0JCXN0cmxjcHkoZGV2LT5idXNfaWQsIG9sZF9kZXZpY2VfbmFtZSwgQlVTX0lEX1NJWkUpOworCWlmIChlcnJvcikKIAkJZ290byBvdXQ7Ci0JfQogCiAjaWZkZWYgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQKIAlpZiAob2xkX2NsYXNzX25hbWUpIHsKQEAgLTE1NDUsOCArMTU2MSwxMCBAQAogICogZGV2aWNlX21vdmUgLSBtb3ZlcyBhIGRldmljZSB0byBhIG5ldyBwYXJlbnQKICAqIEBkZXY6IHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZGV2aWNlIHRvIGJlIG1vdmVkCiAgKiBAbmV3X3BhcmVudDogdGhlIG5ldyBwYXJlbnQgb2YgdGhlIGRldmljZSAoY2FuIGJ5IE5VTEwpCisgKiBAZHBtX29yZGVyOiBob3cgdG8gcmVvcmRlciB0aGUgZHBtX2xpc3QKICAqLwotaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCkKK2ludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQsCisJCWVudW0gZHBtX29yZGVyIGRwbV9vcmRlcikKIHsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGRldmljZSAqb2xkX3BhcmVudDsKQEAgLTE1NTYsNiArMTU3NCw3IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2aWNlX3BtX2xvY2soKTsKIAluZXdfcGFyZW50ID0gZ2V0X2RldmljZShuZXdfcGFyZW50KTsKIAluZXdfcGFyZW50X2tvYmogPSBnZXRfZGV2aWNlX3BhcmVudChkZXYsIG5ld19wYXJlbnQpOwogCkBAIC0xNTcwLDkgKzE1ODksMTAgQEAKIAlvbGRfcGFyZW50ID0gZGV2LT5wYXJlbnQ7CiAJZGV2LT5wYXJlbnQgPSBuZXdfcGFyZW50OwogCWlmIChvbGRfcGFyZW50KQotCQlrbGlzdF9yZW1vdmUoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJa2xpc3RfcmVtb3ZlKCZkZXYtPnAtPmtub2RlX3BhcmVudCk7CiAJaWYgKG5ld19wYXJlbnQpIHsKLQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LCAmbmV3X3BhcmVudC0+a2xpc3RfY2hpbGRyZW4pOworCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQsCisJCQkgICAgICAgJm5ld19wYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuKTsKIAkJc2V0X2Rldl9ub2RlKGRldiwgZGV2X3RvX25vZGUobmV3X3BhcmVudCkpOwogCX0KIApAQCAtMTU4NCwxMSArMTYwNCwxMSBAQAogCQlkZXZpY2VfbW92ZV9jbGFzc19saW5rcyhkZXYsIG5ld19wYXJlbnQsIG9sZF9wYXJlbnQpOwogCQlpZiAoIWtvYmplY3RfbW92ZSgmZGV2LT5rb2JqLCAmb2xkX3BhcmVudC0+a29iaikpIHsKIAkJCWlmIChuZXdfcGFyZW50KQotCQkJCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9wYXJlbnQpOworCQkJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9wYXJlbnQpOwogCQkJZGV2LT5wYXJlbnQgPSBvbGRfcGFyZW50OwogCQkJaWYgKG9sZF9wYXJlbnQpIHsKLQkJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9wYXJlbnQsCi0JCQkJCSAgICAgICAmb2xkX3BhcmVudC0+a2xpc3RfY2hpbGRyZW4pOworCQkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX3BhcmVudCwKKwkJCQkJICAgICAgICZvbGRfcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAJCQkJc2V0X2Rldl9ub2RlKGRldiwgZGV2X3RvX25vZGUob2xkX3BhcmVudCkpOwogCQkJfQogCQl9CkBAIC0xNTk2LDkgKzE2MTYsMjMgQEAKIAkJcHV0X2RldmljZShuZXdfcGFyZW50KTsKIAkJZ290byBvdXQ7CiAJfQorCXN3aXRjaCAoZHBtX29yZGVyKSB7CisJY2FzZSBEUE1fT1JERVJfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVDoKKwkJZGV2aWNlX3BtX21vdmVfYWZ0ZXIoZGV2LCBuZXdfcGFyZW50KTsKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVY6CisJCWRldmljZV9wbV9tb3ZlX2JlZm9yZShuZXdfcGFyZW50LCBkZXYpOworCQlicmVhazsKKwljYXNlIERQTV9PUkRFUl9ERVZfTEFTVDoKKwkJZGV2aWNlX3BtX21vdmVfbGFzdChkZXYpOworCQlicmVhazsKKwl9CiBvdXRfcHV0OgogCXB1dF9kZXZpY2Uob2xkX3BhcmVudCk7CiBvdXQ6CisJZGV2aWNlX3BtX3VubG9jaygpOwogCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jCmluZGV4IDMxNWJlZDguLmYxN2MzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZC5jCkBAIC0xOCw5ICsxOCwxMSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KIAogI2luY2x1ZGUgImJhc2UuaCIKICNpbmNsdWRlICJwb3dlci9wb3dlci5oIgpAQCAtMjgsNyArMzAsNyBAQAogCiBzdGF0aWMgdm9pZCBkcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPmtub2RlX2RyaXZlcikpIHsKKwlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5wLT5rbm9kZV9kcml2ZXIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkZXZpY2UgJXMgYWxyZWFkeSBib3VuZFxuIiwKIAkJCV9fZnVuY19fLCBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOwogCQlyZXR1cm47CkBAIC00MSw3ICs0Myw3IEBACiAJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRldi0+YnVzLT5wLT5idXNfbm90aWZpZXIsCiAJCQkJCSAgICAgQlVTX05PVElGWV9CT1VORF9EUklWRVIsIGRldik7CiAKLQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9kcml2ZXIsICZkZXYtPmRyaXZlci0+cC0+a2xpc3RfZGV2aWNlcyk7CisJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfZHJpdmVyLCAmZGV2LT5kcml2ZXItPnAtPmtsaXN0X2RldmljZXMpOwogfQogCiBzdGF0aWMgaW50IGRyaXZlcl9zeXNmc19hZGQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTY4LDE4ICsxNzAsMjMgQEAKIH0KIAogLyoqCisgKiB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUKKyAqIFdhaXQgZm9yIGRldmljZSBwcm9iaW5nIHRvIGJlIGNvbXBsZXRlZC4KKyAqLwordm9pZCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCkKK3sKKwkvKiB3YWl0IGZvciB0aGUga25vd24gZGV2aWNlcyB0byBjb21wbGV0ZSB0aGVpciBwcm9iaW5nICovCisJd2FpdF9ldmVudChwcm9iZV93YWl0cXVldWUsIGF0b21pY19yZWFkKCZwcm9iZV9jb3VudCkgPT0gMCk7CisJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOworfQorCisvKioKICAqIGRyaXZlcl9wcm9iZV9kZXZpY2UgLSBhdHRlbXB0IHRvIGJpbmQgZGV2aWNlICYgZHJpdmVyIHRvZ2V0aGVyCiAgKiBAZHJ2OiBkcml2ZXIgdG8gYmluZCBhIGRldmljZSB0bwogICogQGRldjogZGV2aWNlIHRvIHRyeSB0byBiaW5kIHRvIHRoZSBkcml2ZXIKICAqCi0gKiBGaXJzdCwgd2UgY2FsbCB0aGUgYnVzJ3MgbWF0Y2ggZnVuY3Rpb24sIGlmIG9uZSBwcmVzZW50LCB3aGljaCBzaG91bGQKLSAqIGNvbXBhcmUgdGhlIGRldmljZSBJRHMgdGhlIGRyaXZlciBzdXBwb3J0cyB3aXRoIHRoZSBkZXZpY2UgSURzIG9mIHRoZQotICogZGV2aWNlLiBOb3RlIHdlIGRvbid0IGRvIHRoaXMgb3Vyc2VsdmVzIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB0aGUKLSAqIGZvcm1hdCBvZiB0aGUgSUQgc3RydWN0dXJlcywgbm9yIHdoYXQgaXMgdG8gYmUgY29uc2lkZXJlZCBhIG1hdGNoIGFuZAotICogd2hhdCBpcyBub3QuCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDEgaWYgYSBtYXRjaCBpcyBmb3VuZCwgLUVOT0RFViBpZiB0aGUgZGV2aWNlIGlzCi0gKiBub3QgcmVnaXN0ZXJlZCwgYW5kIDAgb3RoZXJ3aXNlLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9ERVYgaWYgdGhlIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZCwKKyAqIDEgaWYgdGhlIGRldmljZSBpcyBib3VuZCBzdWNlc3NmdWxseSBhbmQgMCBvdGhlcndpc2UuCiAgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEBkZXYtPnNlbSBoZWxkLiAgV2hlbiBjYWxsZWQgZm9yIGEKICAqIFVTQiBpbnRlcmZhY2UsIEBkZXYtPnBhcmVudC0+c2VtIG11c3QgYmUgaGVsZCBhcyB3ZWxsLgpAQCAtMTkwLDIxICsxOTcsMjIgQEAKIAogCWlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGRydi0+YnVzLT5tYXRjaCAmJiAhZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KSkKLQkJZ290byBkb25lOwogCiAJcHJfZGVidWcoImJ1czogJyVzJzogJXM6IG1hdGNoZWQgZGV2aWNlICVzIHdpdGggZHJpdmVyICVzXG4iLAogCQkgZHJ2LT5idXMtPm5hbWUsIF9fZnVuY19fLCBkZXZfbmFtZShkZXYpLCBkcnYtPm5hbWUpOwogCiAJcmV0ID0gcmVhbGx5X3Byb2JlKGRldiwgZHJ2KTsKIAotZG9uZToKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2aWNlX2F0dGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisKKwlpZiAoIWRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiBkcml2ZXJfcHJvYmVfZGV2aWNlKGRydiwgZGV2KTsKIH0KIApAQCAtMjU3LDcgKzI2NSw3IEBACiAJICogaXMgYW4gZXJyb3IuCiAJICovCiAKLQlpZiAoZHJ2LT5idXMtPm1hdGNoICYmICFkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpKQorCWlmICghZHJpdmVyX21hdGNoX2RldmljZShkcnYsIGRldikpCiAJCXJldHVybiAwOwogCiAJaWYgKGRldi0+cGFyZW50KQkvKiBOZWVkZWQgZm9yIFVTQiAqLwpAQCAtMzEwLDcgKzMxOCw3IEBACiAJCQlkcnYtPnJlbW92ZShkZXYpOwogCQlkZXZyZXNfcmVsZWFzZV9hbGwoZGV2KTsKIAkJZGV2LT5kcml2ZXIgPSBOVUxMOwotCQlrbGlzdF9yZW1vdmUoJmRldi0+a25vZGVfZHJpdmVyKTsKKwkJa2xpc3RfcmVtb3ZlKCZkZXYtPnAtPmtub2RlX2RyaXZlcik7CiAJfQogfQogCkBAIC0zNDAsNiArMzQ4LDcgQEAKICAqLwogdm9pZCBkcml2ZXJfZGV0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCWZvciAoOzspIHsKQEAgLTM0OCw4ICszNTcsMTAgQEAKIAkJCXNwaW5fdW5sb2NrKCZkcnYtPnAtPmtsaXN0X2RldmljZXMua19sb2NrKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWRldiA9IGxpc3RfZW50cnkoZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbGlzdC5wcmV2LAotCQkJCXN0cnVjdCBkZXZpY2UsIGtub2RlX2RyaXZlci5uX25vZGUpOworCQlkZXZfcHJ2ID0gbGlzdF9lbnRyeShkcnYtPnAtPmtsaXN0X2RldmljZXMua19saXN0LnByZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsCisJCQkJICAgICBrbm9kZV9kcml2ZXIubl9ub2RlKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCQlnZXRfZGV2aWNlKGRldik7CiAJCXNwaW5fdW5sb2NrKCZkcnYtPnAtPmtsaXN0X2RldmljZXMua19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RyaXZlci5jIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCmluZGV4IDFlMmJkYTcuLmM1MWYxMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKQEAgLTE5LDcgKzE5LDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2RyaXZlcikgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OworCisJaWYgKG4pIHsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2RyaXZlcihuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTQyLDcgKzQ5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgc3RhcnQgPyAmc3RhcnQtPmtub2RlX2RyaXZlciA6IE5VTEwpOworCQkJICAgICBzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfZHJpdmVyIDogTlVMTCk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihkZXYsIGRhdGEpOwogCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CkBAIC03Niw3ICs4Myw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmRydi0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIChzdGFydCA/ICZzdGFydC0+a25vZGVfZHJpdmVyIDogTlVMTCkpOworCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2RyaXZlciA6IE5VTEwpKTsKIAl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkpCiAJCWlmIChtYXRjaChkZXYsIGRhdGEpICYmIGdldF9kZXZpY2UoZGV2KSkKIAkJCWJyZWFrOwpAQCAtMjE2LDYgKzIyMyw4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqb3RoZXI7CiAKKwlCVUdfT04oIWRydi0+YnVzLT5wKTsKKwogCWlmICgoZHJ2LT5idXMtPnByb2JlICYmIGRydi0+cHJvYmUpIHx8CiAJICAgIChkcnYtPmJ1cy0+cmVtb3ZlICYmIGRydi0+cmVtb3ZlKSB8fAogCSAgICAoZHJ2LT5idXMtPnNodXRkb3duICYmIGRydi0+c2h1dGRvd24pKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA0NDY5OWQ5Li5kM2E1OWM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCWZfZGV2LT5wYXJlbnQgPSBkZXZpY2U7CiAJZl9kZXYtPmNsYXNzID0gJmZpcm13YXJlX2NsYXNzOwogCWRldl9zZXRfZHJ2ZGF0YShmX2RldiwgZndfcHJpdik7Ci0JZl9kZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIDEpOwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihmX2Rldik7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAl9CiAKIAlpZiAodWV2ZW50KQotCQlmX2Rldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIDApOwogCSpkZXZfcCA9IGZfZGV2OwogCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA0M2ZhOTBiLi5mOGY1NzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCXNlY3Rfc3RhcnRfcGZuID0gc2VjdGlvbl9ucl90b19wZm4obWVtX2Jsay0+cGh5c19pbmRleCk7CiAJc2VjdF9lbmRfcGZuID0gc2VjdF9zdGFydF9wZm4gKyBQQUdFU19QRVJfU0VDVElPTiAtIDE7CiAJZm9yIChwZm4gPSBzZWN0X3N0YXJ0X3BmbjsgcGZuIDw9IHNlY3RfZW5kX3BmbjsgcGZuKyspIHsKLQkJdW5zaWduZWQgaW50IG5pZDsKKwkJaW50IG5pZDsKIAogCQluaWQgPSBnZXRfbmlkX2Zvcl9wZm4ocGZuKTsKIAkJaWYgKG5pZCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDM0OWExMDEuLmQyMTk4ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC0yMTcsNiArMjE3LDcgQEAKIAlpZiAoZCkgewogCQltZW1jcHkoZCwgZGF0YSwgc2l6ZSk7CiAJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKKwkJcGRldi0+cGxhdGZvcm1fZGF0YSA9IGQ7CiAJfQogCXJldHVybiBkID8gMCA6IC1FTk9NRU07CiB9CkBAIC0yNDYsNiArMjQ3LDIxIEBACiAJZWxzZQogCQlkZXZfc2V0X25hbWUoJnBkZXYtPmRldiwgcGRldi0+bmFtZSk7CiAKKwkvKiBXZSB3aWxsIHJlbW92ZSBwbGF0Zm9ybV9kYXRhIGZpZWxkIGZyb20gc3RydWN0IGRldmljZQorCSogaWYgYWxsIHBsYXRmb3JtIGRldmljZXMgcGFzcyBpdHMgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YQorCSogZnJvbSBwbGF0Zm9ybV9kZXZpY2UuIFRoZSBjb252ZXJzaW9uIGlzIGdvaW5nIHRvIGJlIGEKKwkqIGxvbmcgdGltZSwgc28gd2UgYWxsb3cgdGhlIHR3byBjYXNlcyBjb2V4aXN0IHRvIG1ha2UKKwkqIHRoaXMga2luZCBvZiBmaXggbW9yZSBlYXNpbHkqLworCWlmIChwZGV2LT5wbGF0Zm9ybV9kYXRhICYmIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogdXNlIHdoaWNoIHBsYXRmb3JtX2RhdGE/XG4iLAorCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwl9IGVsc2UgaWYgKHBkZXYtPnBsYXRmb3JtX2RhdGEpIHsKKwkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGV2LT5wbGF0Zm9ybV9kYXRhOworCX0gZWxzZSBpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJcGRldi0+cGxhdGZvcm1fZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBwZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlICpwLCAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKIApAQCAtNTg0LDEwICs2MDAsMjUgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAKLQlhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1wbGF0Zm9ybTolcyIsIHBkZXYtPm5hbWUpOworCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPSVzJXMiLCBQTEFURk9STV9NT0RVTEVfUFJFRklYLAorCQkocGRldi0+aWRfZW50cnkpID8gcGRldi0+aWRfZW50cnktPm5hbWUgOiBwZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKnBsYXRmb3JtX21hdGNoX2lkKAorCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWQsCisJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXdoaWxlIChpZC0+bmFtZVswXSkgeworCQlpZiAoc3RyY21wKHBkZXYtPm5hbWUsIGlkLT5uYW1lKSA9PSAwKSB7CisJCQlwZGV2LT5pZF9lbnRyeSA9IGlkOworCQkJcmV0dXJuIGlkOworCQl9CisJCWlkKys7CisJfQorCXJldHVybiBOVUxMOworfQorCiAvKioKICAqIHBsYXRmb3JtX21hdGNoIC0gYmluZCBwbGF0Zm9ybSBkZXZpY2UgdG8gcGxhdGZvcm0gZHJpdmVyLgogICogQGRldjogZGV2aWNlLgpAQCAtNjAzLDkgKzYzNCwxNCBAQAogICovCiBzdGF0aWMgaW50IHBsYXRmb3JtX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRydik7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBpZCB0YWJsZSBmaXJzdCAqLworCWlmIChwZHJ2LT5pZF90YWJsZSkKKwkJcmV0dXJuIHBsYXRmb3JtX21hdGNoX2lkKHBkcnYtPmlkX3RhYmxlLCBwZGV2KSAhPSBOVUxMOworCisJLyogZmFsbC1iYWNrIHRvIGRyaXZlciBuYW1lIG1hdGNoICovCiAJcmV0dXJuIChzdHJjbXAocGRldi0+bmFtZSwgZHJ2LT5uYW1lKSA9PSAwKTsKIH0KIApAQCAtNjIzLDI2ICs2NTksMjQgQEAKIAogc3RhdGljIGludCBwbGF0Zm9ybV9sZWdhY3lfc3VzcGVuZF9sYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnN1c3BlbmRfbGF0ZSkKLQkJcmV0ID0gZHJ2LT5zdXNwZW5kX2xhdGUocGRldiwgbWVzZyk7CisJaWYgKGRldi0+ZHJpdmVyICYmIHBkcnYtPnN1c3BlbmRfbGF0ZSkKKwkJcmV0ID0gcGRydi0+c3VzcGVuZF9sYXRlKHBkZXYsIG1lc2cpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwbGF0Zm9ybV9sZWdhY3lfcmVzdW1lX2Vhcmx5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQgPSAwOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+cmVzdW1lX2Vhcmx5KQotCQlyZXQgPSBkcnYtPnJlc3VtZV9lYXJseShwZGV2KTsKKwlpZiAoZGV2LT5kcml2ZXIgJiYgcGRydi0+cmVzdW1lX2Vhcmx5KQorCQlyZXQgPSBwZHJ2LT5yZXN1bWVfZWFybHkocGRldik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggNjcwYzlkNi4uZTI1NTM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC0xMDcsNiArMTA3LDUwIEBACiB9CiAKIC8qKgorICoJZGV2aWNlX3BtX21vdmVfYmVmb3JlIC0gbW92ZSBkZXZpY2UgaW4gZHBtX2xpc3QKKyAqCUBkZXZhOiAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqCUBkZXZiOiAgRGV2aWNlIEBkZXZhIHNob3VsZCBjb21lIGJlZm9yZQorICovCit2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICpkZXZhLCBzdHJ1Y3QgZGV2aWNlICpkZXZiKQoreworCXByX2RlYnVnKCJQTTogTW92aW5nICVzOiVzIGJlZm9yZSAlczolc1xuIiwKKwkJIGRldmEtPmJ1cyA/IGRldmEtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZhLT5rb2JqKSwKKwkJIGRldmItPmJ1cyA/IGRldmItPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZiLT5rb2JqKSk7CisJLyogRGVsZXRlIGRldmEgZnJvbSBkcG1fbGlzdCBhbmQgcmVpbnNlcnQgYmVmb3JlIGRldmIuICovCisJbGlzdF9tb3ZlX3RhaWwoJmRldmEtPnBvd2VyLmVudHJ5LCAmZGV2Yi0+cG93ZXIuZW50cnkpOworfQorCisvKioKKyAqCWRldmljZV9wbV9tb3ZlX2FmdGVyIC0gbW92ZSBkZXZpY2UgaW4gZHBtX2xpc3QKKyAqCUBkZXZhOiAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqCUBkZXZiOiAgRGV2aWNlIEBkZXZhIHNob3VsZCBjb21lIGFmdGVyCisgKi8KK3ZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqZGV2YSwgc3RydWN0IGRldmljZSAqZGV2YikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyBhZnRlciAlczolc1xuIiwKKwkJIGRldmEtPmJ1cyA/IGRldmEtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZhLT5rb2JqKSwKKwkJIGRldmItPmJ1cyA/IGRldmItPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZiLT5rb2JqKSk7CisJLyogRGVsZXRlIGRldmEgZnJvbSBkcG1fbGlzdCBhbmQgcmVpbnNlcnQgYWZ0ZXIgZGV2Yi4gKi8KKwlsaXN0X21vdmUoJmRldmEtPnBvd2VyLmVudHJ5LCAmZGV2Yi0+cG93ZXIuZW50cnkpOworfQorCisvKioKKyAqIAlkZXZpY2VfcG1fbW92ZV9sYXN0IC0gbW92ZSBkZXZpY2UgdG8gZW5kIG9mIGRwbV9saXN0CisgKiAJQGRldjogICBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdAorICovCit2b2lkIGRldmljZV9wbV9tb3ZlX2xhc3Qoc3RydWN0IGRldmljZSAqZGV2KQoreworCXByX2RlYnVnKCJQTTogTW92aW5nICVzOiVzIHRvIGVuZCBvZiBsaXN0XG4iLAorCQkgZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKKwlsaXN0X21vdmVfdGFpbCgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9saXN0KTsKK30KKworLyoqCiAgKglwbV9vcCAtIGV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3BpYXRlIGZvciBnaXZlbiBQTSBldmVudAogICoJQGRldjoJRGV2aWNlLgogICoJQG9wczoJUE0gb3BlcmF0aW9ucyB0byBjaG9vc2UgZnJvbS4KQEAgLTMzMyw3ICszNzcsNiBAQAogICovCiB2b2lkIGRldmljZV9wb3dlcl91cChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3lzZGV2X3Jlc3VtZSgpOwogCWRwbV9wb3dlcl91cChzdGF0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfcG93ZXJfdXApOwpAQCAtNTc3LDggKzYyMCw2IEBACiAJCX0KIAkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT0ZGX0lSUTsKIAl9Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChzdGF0ZSk7CiAJaWYgKGVycm9yKQogCQlkcG1fcG93ZXJfdXAocmVzdW1lX2V2ZW50KHN0YXRlKSk7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAppbmRleCA0MWY1MWZhLi5jN2NiNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaApAQCAtMTgsMTEgKzE4LDE5IEBACiAKIGV4dGVybiB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKik7CiAKICNlbHNlIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKmRldmEsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXZiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKmRldmEsCisJCQkJCXN0cnVjdCBkZXZpY2UgKmRldmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggYzk4YzMxZS4uY2JkMzZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIAogc3RhdGljIHNzaXplX3QKLXN5c2Rldl9zaG93KHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKiBidWZmZXIpCitzeXNkZXZfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmZmVyKQogewotCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOwotCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOworCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOwogCiAJaWYgKHN5c2Rldl9hdHRyLT5zaG93KQogCQlyZXR1cm4gc3lzZGV2X2F0dHItPnNob3coc3lzZGV2LCBzeXNkZXZfYXR0ciwgYnVmZmVyKTsKQEAgLTQyLDExICs0MiwxMSBAQAogCiAKIHN0YXRpYyBzc2l6ZV90Ci1zeXNkZXZfc3RvcmUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwKLQkgICAgIGNvbnN0IGNoYXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3N5c2Rldl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOwotCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOworCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOwogCiAJaWYgKHN5c2Rldl9hdHRyLT5zdG9yZSkKIAkJcmV0dXJuIHN5c2Rldl9hdHRyLT5zdG9yZShzeXNkZXYsIHN5c2Rldl9hdHRyLCBidWZmZXIsIGNvdW50KTsKQEAgLTYzLDEzICs2MywxMyBAQAogfTsKIAogCi1pbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICogcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBhKQoraW50IHN5c2Rldl9jcmVhdGVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmEpCiB7CiAJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9maWxlKCZzLT5rb2JqLCAmYS0+YXR0cik7CiB9CiAKIAotdm9pZCBzeXNkZXZfcmVtb3ZlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKiBzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIGEpCit2b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmEpCiB7CiAJc3lzZnNfcmVtb3ZlX2ZpbGUoJnMtPmtvYmosICZhLT5hdHRyKTsKIH0KQEAgLTg0LDcgKzg0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHN5c2Rldl9jbGFzc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJCSBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOwogCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyID0gdG9fc3lzZGV2X2NsYXNzX2F0dHIoYXR0cik7CiAKIAlpZiAoY2xhc3NfYXR0ci0+c2hvdykKQEAgLTk1LDggKzk1LDggQEAKIHN0YXRpYyBzc2l6ZV90IHN5c2Rldl9jbGFzc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqIGNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY2xhc3NfYXR0ciA9IHRvX3N5c2Rldl9jbGFzc19hdHRyKGF0dHIpOwogCiAJaWYgKGNsYXNzX2F0dHItPnN0b3JlKQogCQlyZXR1cm4gY2xhc3NfYXR0ci0+c3RvcmUoY2xhc3MsIGJ1ZmZlciwgY291bnQpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga3NldCAqc3lzdGVtX2tzZXQ7CiAKLWludCBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscykKK2ludCBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQogewogCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXNkZXYgY2xhc3MgJyVzJ1xuIiwgY2xzLT5uYW1lKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJcmV0dXJuIGtzZXRfcmVnaXN0ZXIoJmNscy0+a3NldCk7CiB9CiAKLXZvaWQgc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscykKK3ZvaWQgc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQogewogCXByX2RlYnVnKCJVbnJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLAogCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwpAQCAtMjAzLDggKzIwMyw4IEBACiAgKglAY2xzOglDbGFzcyBkcml2ZXIgYmVsb25ncyB0by4KICAqCUBkcnY6CURyaXZlci4KICAqLwotdm9pZCBzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscywKLQkJCSAgICAgIHN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2KQordm9pZCBzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzLAorCQkJICAgICAgc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydikKIHsKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2RlbF9pbml0KCZkcnYtPmVudHJ5KTsKQEAgLTIyOSwxMCArMjI5LDEwIEBACiAgKglAc3lzZGV2OglkZXZpY2UgaW4gcXVlc3Rpb24KICAqCiAgKi8KLWludCBzeXNkZXZfcmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYpCitpbnQgc3lzZGV2X3JlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCiB7CiAJaW50IGVycm9yOwotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHMgPSBzeXNkZXYtPmNsczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMgPSBzeXNkZXYtPmNsczsKIAogCWlmICghY2xzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkJCSAgICAgc3lzZGV2LT5pZCk7CiAKIAlpZiAoIWVycm9yKSB7Ci0JCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCiAJCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXMgZGV2aWNlICclcydcbiIsCiAJCQkga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKQEAgLTI3NCw5ICsyNzQsOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBzeXNkZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldikKK3ZvaWQgc3lzZGV2X3VucmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqIGRydjsKKwlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCiAJbXV0ZXhfbG9jaygmc3lzZGV2X2RyaXZlcnNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZzeXNkZXYtPmNscy0+ZHJpdmVycywgZW50cnkpIHsKQEAgLTMwMywyMiArMzAzLDIxIEBACiAgKglpcyBndWFyYW50ZWVkIGJ5IHZpcnR1ZSBvZiB0aGUgZmFjdCB0aGF0IGNoaWxkIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQKICAqCWFmdGVyIHRoZWlyIHBhcmVudHMuCiAgKi8KLQogdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAogCXByX2RlYnVnKCJTaHV0dGluZyBEb3duIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7Ci0JCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2OworCQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJCXByX2RlYnVnKCJTaHV0dGluZyBkb3duIHR5cGUgJyVzJzpcbiIsCiAJCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydjsKIAkJCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7CiAKIAkJCS8qIENhbGwgYXV4aWxsYXJ5IGRyaXZlcnMgZmlyc3QgKi8KQEAgLTM2MywxMCArMzYyLDkgQEAKICAqCVRoaXMgaXMgb25seSBjYWxsZWQgYnkgdGhlIGRldmljZSBQTSBjb3JlLCBzbyB3ZSBsZXQgdGhlbSBoYW5kbGUKICAqCWFsbCBzeW5jaHJvbml6YXRpb24uCiAgKi8KLQogaW50IHN5c2Rldl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCAqZXJyX2RldjsKIAlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2LCAqZXJyX2RydjsKIAlpbnQgcmV0OwpAQCAtNDMyLDcgKzQzMCw3IEBACiAJfQogCXJldHVybiByZXQ7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9zdXNwZW5kKTsKIAogLyoqCiAgKglzeXNkZXZfcmVzdW1lIC0gQnJpbmcgc3lzdGVtIGRldmljZXMgYmFjayB0byBsaWZlLgpAQCAtNDQyLDE1ICs0NDAsMTQgQEAKICAqCiAgKglOb3RlOiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuIGNhbGxlZC4KICAqLwotCiBpbnQgc3lzZGV2X3Jlc3VtZSh2b2lkKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCiAJcHJfZGVidWcoIlJlc3VtaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldjsKKwkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCQlwcl9kZWJ1ZygiUmVzdW1pbmcgdHlwZSAnJXMnOlxuIiwKIAkJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CkBAIC00NjMsNyArNDYwLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9yZXN1bWUpOwogCiBpbnQgX19pbml0IHN5c3RlbV9idXNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IDAzNDRhOGEuLmU3YjhhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTQ1LDYgKzQ1LDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKQogCSAgZmxvcHB5IGNvbnRyb2xsZXIsIHNheSBZIGhlcmUuIE1vc3QgY29tbW9ubHkgZm91bmQgaW4gUG93ZXJNYWNzLgogCitjb25maWcgQkxLX0RFVl9TV0lNCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNXSU0gTWFjaW50b3NoIGZsb3BweSIKKwlkZXBlbmRzIG9uIE02OEsgJiYgTUFDCisJaGVscAorCSAgWW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmxvcHB5IHN1cHBvcnQKKwkgIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy4KKwogY29uZmlnIEFNSUdBX1oyUkFNCiAJdHJpc3RhdGUgIkFtaWdhIFpvcnJvIElJIHJhbWRpc2sgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFpPUlJPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQppbmRleCAyMDQzMzJiLi4zMTQ1MTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKQEAgLTYsOSArNiwxMSBAQAogIyAKIAogb2JqLSQoQ09ORklHX01BQ19GTE9QUFkpCSs9IHN3aW0zLm8KK29iai0kKENPTkZJR19CTEtfREVWX1NXSU0pCSs9IHN3aW1fbW9kLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0ZEKQkrPSBmbG9wcHkubwogb2JqLSQoQ09ORklHX0FNSUdBX0ZMT1BQWSkJKz0gYW1pZmxvcC5vCiBvYmotJChDT05GSUdfUFMzX0RJU0spCQkrPSBwczNkaXNrLm8KK29iai0kKENPTkZJR19QUzNfVlJBTSkJCSs9IHBzM3ZyYW0ubwogb2JqLSQoQ09ORklHX0FUQVJJX0ZMT1BQWSkJKz0gYXRhZmxvcC5vCiBvYmotJChDT05GSUdfQU1JR0FfWjJSQU0pCSs9IHoycmFtLm8KIG9iai0kKENPTkZJR19CTEtfREVWX1JBTSkJKz0gYnJkLm8KQEAgLTMyLDMgKzM0LDUgQEAKIG9iai0kKENPTkZJR19CTEtfREVWX0hEKQkrPSBoZC5vCiAKIG9iai0kKENPTkZJR19YRU5fQkxLREVWX0ZST05URU5EKQkrPSB4ZW4tYmxrZnJvbnQubworCitzd2ltX21vZC1vYmpzCTo9IHN3aW0ubyBzd2ltX2FzbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2UuaCBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZS5oCmluZGV4IGMyMzc1MjcuLjVlNDFlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZS5oCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZS5oCkBAIC0xOCw2ICsxOCw3IEBACiBlbnVtIHsKIAlBT0VDTURfQVRBLAogCUFPRUNNRF9DRkcsCisJQU9FQ01EX1ZFTkRfTUlOID0gMHhmMCwKIAogCUFPRUZMX1JTUCA9ICgxPDwzKSwKIAlBT0VGTF9FUlIgPSAoMTw8MiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VkZXYuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jCmluZGV4IGNjMjUwNTcuLmVlZWE0NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAkJcmV0dXJuOwogCXdoaWxlIChhdG9taWNfcmVhZCgmc2tiX3NoaW5mbyhza2IpLT5kYXRhcmVmKSAhPSAxICYmIGktLSA+IDApCiAJCW1zbGVlcChTbXMpOwotCWlmIChpIDw9IDApIHsKKwlpZiAoaSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiYW9lOiAlcyBob2xkcyByZWY6ICVzXG4iLAogCQkJc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICJuZXRpZiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VuZXQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCmluZGV4IDMwZGU1YjEuLmNlMGQ2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCkBAIC0xNDIsNiArMTQyLDggQEAKIAkJYW9lY21kX2NmZ19yc3Aoc2tiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJaWYgKGgtPmNtZCA+PSBBT0VDTURfVkVORF9NSU4pCisJCQlicmVhazsJLyogZG9uJ3QgY29tcGxhaW4gYWJvdXQgdmVuZG9yIGNvbW1hbmRzICovCiAJCXByaW50ayhLRVJOX0lORk8gImFvZTogdW5rbm93biBjbWQgJWRcbiIsIGgtPmNtZCk7CiAJfQogZXhpdDoKQEAgLTE0OSw3ICsxNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFvZV9wdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYW9lX3B0IF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FPRSksCiAJLmZ1bmMgPSBhb2VuZXRfcmN2LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggNjllMWRmNy4uNDIzNGMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE3MzAsNyArMTczMCw3IEBACiAKIAl0aW1lb3V0ID0gamlmZmllcyArIDIqSForSFovMjsKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCi0JCWlmICghKG1mcC5wYXJfZHRfcmVnICYgMHgyMCkpCisJCWlmICghKHN0X21mcC5wYXJfZHRfcmVnICYgMHgyMCkpCiAJCQlicmVhazsKIAogCXN0YXR1cyA9IEZEQ19SRUFEKCBGRENSRUdfU1RBVFVTICk7CkBAIC0xNzQ3LDcgKzE3NDcsNyBAQAogCQkvKiBkdW1teSBzZWVrIGNvbW1hbmQgdG8gbWFrZSBXUCBiaXQgYWNjZXNzaWJsZSAqLwogCQlGRENfV1JJVEUoIEZEQ1JFR19EQVRBLCAwICk7CiAJCUZEQ19XUklURSggRkRDUkVHX0NNRCwgRkRDQ01EX1NFRUsgKTsKLQkJd2hpbGUoIG1mcC5wYXJfZHRfcmVnICYgMHgyMCApCisJCXdoaWxlKCBzdF9tZnAucGFyX2R0X3JlZyAmIDB4MjAgKQogCQkJOwogCQlzdGF0dXMgPSBGRENfUkVBRCggRkRDUkVHX1NUQVRVUyApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCAwMWU2OTM4Li41ZDBlMTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0zMzkwLDYgKzMzOTAsMjAzIEBACiAJa2ZyZWUocCk7CiB9CiAKKy8qIFNlbmQgYSBtZXNzYWdlIENEQiB0byB0aGUgZmlybXdhcmUuICovCitzdGF0aWMgX19kZXZpbml0IGludCBjY2lzc19tZXNzYWdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBjaGFyIG9wY29kZSwgdW5zaWduZWQgY2hhciB0eXBlKQoreworCXR5cGVkZWYgc3RydWN0IHsKKwkJQ29tbWFuZExpc3RIZWFkZXJfc3RydWN0IENvbW1hbmRIZWFkZXI7CisJCVJlcXVlc3RCbG9ja19zdHJ1Y3QgUmVxdWVzdDsKKwkJRXJyRGVzY3JpcHRvcl9zdHJ1Y3QgRXJyb3JEZXNjcmlwdG9yOworCX0gQ29tbWFuZDsKKwlzdGF0aWMgY29uc3Qgc2l6ZV90IGNtZF9zeiA9IHNpemVvZihDb21tYW5kKSArIHNpemVvZihFcnJvckluZm9fc3RydWN0KTsKKwlDb21tYW5kICpjbWQ7CisJZG1hX2FkZHJfdCBwYWRkcjY0OworCXVpbnQzMl90IHBhZGRyMzIsIHRhZzsKKwl2b2lkIF9faW9tZW0gKnZhZGRyOworCWludCBpLCBlcnI7CisKKwl2YWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCWlmICh2YWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFRoZSBJbmJvdW5kIFBvc3QgUXVldWUgb25seSBhY2NlcHRzIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzZXMgZm9yIHRoZQorCSAgIENDSVNTIGNvbW1hbmRzLCBzbyB0aGV5IG11c3QgYmUgYWxsb2NhdGVkIGZyb20gdGhlIGxvd2VyIDRHaUIgb2YKKwkgICBtZW1vcnkuICovCisJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwlpZiAoZXJyKSB7CisJCWlvdW5tYXAodmFkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbWQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBjbWRfc3osICZwYWRkcjY0KTsKKwlpZiAoY21kID09IE5VTEwpIHsKKwkJaW91bm1hcCh2YWRkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFRoaXMgbXVzdCBmaXQsIGJlY2F1c2Ugb2YgdGhlIDMyLWJpdCBjb25zaXN0ZW50IERNQSBtYXNrLiAgQWxzbywKKwkgICBhbHRob3VnaCB0aGVyZSdzIG5vIGd1YXJhbnRlZSwgd2UgYXNzdW1lIHRoYXQgdGhlIGFkZHJlc3MgaXMgYXQKKwkgICBsZWFzdCA0LWJ5dGUgYWxpZ25lZCAobW9zdCBsaWtlbHksIGl0J3MgcGFnZS1hbGlnbmVkKS4gKi8KKwlwYWRkcjMyID0gcGFkZHI2NDsKKworCWNtZC0+Q29tbWFuZEhlYWRlci5SZXBseVF1ZXVlID0gMDsKKwljbWQtPkNvbW1hbmRIZWFkZXIuU0dMaXN0ID0gMDsKKwljbWQtPkNvbW1hbmRIZWFkZXIuU0dUb3RhbCA9IDA7CisJY21kLT5Db21tYW5kSGVhZGVyLlRhZy5sb3dlciA9IHBhZGRyMzI7CisJY21kLT5Db21tYW5kSGVhZGVyLlRhZy51cHBlciA9IDA7CisJbWVtc2V0KCZjbWQtPkNvbW1hbmRIZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgMCwgOCk7CisKKwljbWQtPlJlcXVlc3QuQ0RCTGVuID0gMTY7CisJY21kLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfTVNHOworCWNtZC0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfSEVBRE9GUVVFVUU7CisJY21kLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOworCWNtZC0+UmVxdWVzdC5UaW1lb3V0ID0gMDsgLyogRG9uJ3QgdGltZSBvdXQgKi8KKwljbWQtPlJlcXVlc3QuQ0RCWzBdID0gb3Bjb2RlOworCWNtZC0+UmVxdWVzdC5DREJbMV0gPSB0eXBlOworCW1lbXNldCgmY21kLT5SZXF1ZXN0LkNEQlsyXSwgMCwgMTQpOyAvKiB0aGUgcmVzdCBvZiB0aGUgQ0RCIGlzIHJlc2VydmVkICovCisKKwljbWQtPkVycm9yRGVzY3JpcHRvci5BZGRyLmxvd2VyID0gcGFkZHIzMiArIHNpemVvZihDb21tYW5kKTsKKwljbWQtPkVycm9yRGVzY3JpcHRvci5BZGRyLnVwcGVyID0gMDsKKwljbWQtPkVycm9yRGVzY3JpcHRvci5MZW4gPSBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCk7CisKKwl3cml0ZWwocGFkZHIzMiwgdmFkZHIgKyBTQTVfUkVRVUVTVF9QT1JUX09GRlNFVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQl0YWcgPSByZWFkbCh2YWRkciArIFNBNV9SRVBMWV9QT1JUX09GRlNFVCk7CisJCWlmICgodGFnICYgfjMpID09IHBhZGRyMzIpCisJCQlicmVhazsKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFopOworCX0KKworCWlvdW5tYXAodmFkZHIpOworCisJLyogd2UgbGVhayB0aGUgRE1BIGJ1ZmZlciBoZXJlIC4uLiBubyBjaG9pY2Ugc2luY2UgdGhlIGNvbnRyb2xsZXIgY291bGQKKwkgICBzdGlsbCBjb21wbGV0ZSB0aGUgY29tbWFuZC4gKi8KKwlpZiAoaSA9PSAxMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBjb250cm9sbGVyIG1lc3NhZ2UgJTAyeDolMDJ4IHRpbWVkIG91dFxuIiwKKwkJCW9wY29kZSwgdHlwZSk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgY21kX3N6LCBjbWQsIHBhZGRyNjQpOworCisJaWYgKHRhZyAmIDIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogY29udHJvbGxlciBtZXNzYWdlICUwMng6JTAyeCBmYWlsZWRcbiIsCisJCQlvcGNvZGUsIHR5cGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJjY2lzczogY29udHJvbGxlciBtZXNzYWdlICUwMng6JTAyeCBzdWNjZWVkZWRcbiIsCisJCW9wY29kZSwgdHlwZSk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgY2Npc3Nfc29mdF9yZXNldF9jb250cm9sbGVyKHApIGNjaXNzX21lc3NhZ2UocCwgMSwgMCkKKyNkZWZpbmUgY2Npc3Nfbm9vcChwKSBjY2lzc19tZXNzYWdlKHAsIDMsIDApCisKK3N0YXRpYyBfX2RldmluaXQgaW50IGNjaXNzX3Jlc2V0X21zaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKy8qIHRoZSAjZGVmaW5lcyBhcmUgc3RvbGVuIGZyb20gZHJpdmVycy9wY2kvbXNpLmguICovCisjZGVmaW5lIG1zaV9jb250cm9sX3JlZyhiYXNlKQkJKGJhc2UgKyBQQ0lfTVNJX0ZMQUdTKQorI2RlZmluZSBQQ0lfTVNJWF9GTEFHU19FTkFCTEUJCSgxIDw8IDE1KQorCisJaW50IHBvczsKKwl1MTYgY29udHJvbCA9IDA7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAocG9zKSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CisJCWlmIChjb250cm9sICYgUENJX01TSV9GTEFHU19FTkFCTEUpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImNjaXNzOiByZXNldHRpbmcgTVNJXG4iKTsKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgY29udHJvbCAmIH5QQ0lfTVNJX0ZMQUdTX0VOQUJMRSk7CisJCX0KKwl9CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKHBvcykgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOworCQlpZiAoY29udHJvbCAmIFBDSV9NU0lYX0ZMQUdTX0VOQUJMRSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2Npc3M6IHJlc2V0dGluZyBNU0ktWFxuIik7CisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksIGNvbnRyb2wgJiB+UENJX01TSVhfRkxBR1NfRU5BQkxFKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGRvZXMgYSBoYXJkIHJlc2V0IG9mIHRoZSBjb250cm9sbGVyIHVzaW5nIFBDSSBwb3dlciBtYW5hZ2VtZW50CisgKiBzdGF0ZXMuICovCitzdGF0aWMgX19kZXZpbml0IGludCBjY2lzc19oYXJkX3Jlc2V0X2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdTE2IHBtY3NyLCBzYXZlZF9jb25maWdfc3BhY2VbMzJdOworCWludCBpLCBwb3M7CisKKwlwcmludGsoS0VSTl9JTkZPICJjY2lzczogdXNpbmcgUENJIFBNIHRvIHJlc2V0IGNvbnRyb2xsZXJcbiIpOworCisJLyogVGhpcyBpcyB2ZXJ5IG5lYXJseSB0aGUgc2FtZSB0aGluZyBhcworCisJICAgcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisJICAgcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOworCSAgIHBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKKwkgICBwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKKworCSAgIGJ1dCB3ZSBjYW4ndCB1c2UgdGhlc2UgbmljZSBjYW5uZWQga2VybmVsIHJvdXRpbmVzIG9uCisJICAga2V4ZWMsIGJlY2F1c2UgdGhleSBhbHNvIGNoZWNrIHRoZSBNU0kvTVNJLVggc3RhdGUgaW4gUENJCisJICAgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgZG8gdGhlIHdyb25nIHRoaW5nIHdoZW4gaXQgaXMKKwkgICBzZXQvY2xlYXJlZC4gIEFsc28sIHRoZSBwY2lfc2F2ZS9yZXN0b3JlX3N0YXRlIGZ1bmN0aW9ucworCSAgIHZpb2xhdGUgdGhlIG9yZGVyaW5nIHJlcXVpcmVtZW50cyBmb3IgcmVzdG9yaW5nIHRoZQorCSAgIGNvbmZpZ3VyYXRpb24gc3BhY2UgZnJvbSB0aGUgQ0NJU1MgZG9jdW1lbnQgKHNlZSB0aGUKKwkgICBjb21tZW50IGJlbG93KS4gIFNvIHdlIHJvbGwgb3VyIG93biAuLi4uICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMippLCAmc2F2ZWRfY29uZmlnX3NwYWNlW2ldKTsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QTSk7CisJaWYgKHBvcyA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2Npc3NfcmVzZXRfY29udHJvbGxlcjogUENJIFBNIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBRdW90aW5nIGZyb20gdGhlIE9wZW4gQ0lTUyBTcGVjaWZpY2F0aW9uOiAiVGhlIFBvd2VyCisJICogTWFuYWdlbWVudCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAoQ1NSKSBjb250cm9scyB0aGUgcG93ZXIKKwkgKiBzdGF0ZSBvZiB0aGUgZGV2aWNlLiAgVGhlIG5vcm1hbCBvcGVyYXRpbmcgc3RhdGUgaXMgRDAsCisJICogQ1NSPTAwaC4gIFRoZSBzb2Z0d2FyZSBvZmYgc3RhdGUgaXMgRDMsIENTUj0wM2guICBUbyByZXNldAorCSAqIHRoZSBjb250cm9sbGVyLCBwbGFjZSB0aGUgaW50ZXJmYWNlIGRldmljZSBpbiBEMyB0aGVuIHRvCisJICogRDAsIHRoaXMgY2F1c2VzIGEgc2Vjb25kYXJ5IFBDSSByZXNldCB3aGljaCB3aWxsIHJlc2V0IHRoZQorCSAqIGNvbnRyb2xsZXIuIiAqLworCisJLyogZW50ZXIgdGhlIEQzaG90IHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKwlwbWNzciAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKKwlwbWNzciB8PSBQQ0lfRDNob3Q7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCBwbWNzcik7CisKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiA+PiAxKTsKKworCS8qIGVudGVyIHRoZSBEMCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlICovCisJcG1jc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7CisJcG1jc3IgfD0gUENJX0QwOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOworCisJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFogPj4gMSk7CisKKwkvKiBSZXN0b3JlIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gIFRoZSBPcGVuIENJU1MKKwkgKiBTcGVjaWZpY2F0aW9uIHNheXMsICJSZXN0b3JlIHRoZSBQQ0kgQ29uZmlndXJhdGlvbgorCSAqIFJlZ2lzdGVycywgb2Zmc2V0cyAwMGggdGhyb3VnaCA2MGguIEl0IGlzIGltcG9ydGFudCB0bworCSAqIHJlc3RvcmUgdGhlIGNvbW1hbmQgcmVnaXN0ZXIsIDE2LWJpdHMgYXQgb2Zmc2V0IDA0aCwKKwkgKiBsYXN0LiBEbyBub3QgcmVzdG9yZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0dXMgcmVnaXN0ZXIsCisJICogMTYtYml0cyBhdCBvZmZzZXQgMDZoLiIgIE5vdGUgdGhhdCB0aGUgb2Zmc2V0IGlzIDIqaS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoaSA9PSAyIHx8IGkgPT0gMykKKwkJCWNvbnRpbnVlOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgMippLCBzYXZlZF9jb25maWdfc3BhY2VbaV0pOworCX0KKwl3bWIoKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgNCwgc2F2ZWRfY29uZmlnX3NwYWNlWzJdKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogIFRoaXMgaXMgaXQuICBGaW5kIGFsbCB0aGUgY29udHJvbGxlcnMgYW5kIHJlZ2lzdGVyIHRoZW0uICBJIHJlYWxseSBoYXRlCiAgKiAgc3RlYWxpbmcgYWxsIHRoZXNlIG1ham9yIGRldmljZSBudW1iZXJzLgpAQCAtMzQwNCw2ICszNjAxLDI2IEBACiAJaW50IGRhYywgcmV0dXJuX2NvZGU7CiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAKKwlpZiAocmVzZXRfZGV2aWNlcykgeworCQkvKiBSZXNldCB0aGUgY29udHJvbGxlciB3aXRoIGEgUENJIHBvd2VyLWN5Y2xlICovCisJCWlmIChjY2lzc19oYXJkX3Jlc2V0X2NvbnRyb2xsZXIocGRldikgfHwgY2Npc3NfcmVzZXRfbXNpKHBkZXYpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJLyogTm93IHRyeSB0byBnZXQgdGhlIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBhIG5vLW9wLiBTb21lCisJCSAgIGRldmljZXMgKG5vdGFibHkgdGhlIEhQIFNtYXJ0IEFycmF5IDVpIENvbnRyb2xsZXIpIG5lZWQKKwkJICAgdXAgdG8gMzAgc2Vjb25kcyB0byByZXNwb25kLiAqLworCQlmb3IgKGk9MDsgaTwzMDsgaSsrKSB7CisJCQlpZiAoY2Npc3Nfbm9vcChwZGV2KSA9PSAwKQorCQkJCWJyZWFrOworCisJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWik7CisJCX0KKwkJaWYgKGkgPT0gMzApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IGNvbnRyb2xsZXIgc2VlbXMgZGVhZFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCiAJaSA9IGFsbG9jX2NjaXNzX2hiYSgpOwogCWlmIChpIDwgMCkKIAkJcmV0dXJuIC0xOwpAQCAtMzY4MSw2ICszODk4LDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGNjaXNzX2luaXQodm9pZCkKIHsKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSByZXF1aXJlcyB0aGF0IGNvbW1hbmRzIGFyZSBhbGlnbmVkIG9uIGEgNjQtYml0CisJICogYm91bmRhcnkuIEdpdmVuIHRoYXQgd2UgdXNlIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgdG8gYWxsb2NhdGUgYW4KKwkgKiBhcnJheSBvZiB0aGVtLCB0aGUgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcy4KKwkgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCkgJSA4KTsKKwogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIlxuIik7CiAKIAkvKiBSZWdpc3RlciBmb3Igb3VyIFBDSSBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggNWQzOWRmMS4uY2EyNjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtNjE3LDYgKzYxNyw3IEBACiAJaW50IGk7CiAKIAljLT5wY2lfZGV2ID0gcGRldjsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogVW5hYmxlIHRvIEVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggY2YyOWNjNC4uYzJjOTVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC01NTgsNiArNTU4LDggQEAKIHN0YXRpYyB2b2lkIHJlY2FsaWJyYXRlX2Zsb3BweSh2b2lkKTsKIHN0YXRpYyB2b2lkIGZsb3BweV9zaHV0ZG93bih1bnNpZ25lZCBsb25nKTsKIAorc3RhdGljIGludCBmbG9wcHlfcmVxdWVzdF9yZWdpb25zKGludCk7CitzdGF0aWMgdm9pZCBmbG9wcHlfcmVsZWFzZV9yZWdpb25zKGludCk7CiBzdGF0aWMgaW50IGZsb3BweV9ncmFiX2lycV9hbmRfZG1hKHZvaWQpOwogc3RhdGljIHZvaWQgZmxvcHB5X3JlbGVhc2VfaXJxX2FuZF9kbWEodm9pZCk7CiAKQEAgLTQxMzMsMTAgKzQxMzUsOSBAQAogc3RhdGljIHNzaXplX3QgZmxvcHB5X2Ntb3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnAgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgZHJpdmU7CiAKLQlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSxkZXYpOwogCWRyaXZlID0gcC0+aWQ7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJVhcbiIsIFVEUC0+Y21vcyk7CiB9CkBAIC00Mjc0LDggKzQyNzUsNyBAQAogCQlGRENTLT5yYXdjbWQgPSAyOwogCQlpZiAodXNlcl9yZXNldF9mZGMoLTEsIEZEX1JFU0VUX0FMV0FZUywgMCkpIHsKIAkJCS8qIGZyZWUgaW9wb3J0cyByZXNlcnZlZCBieSBmbG9wcHlfZ3JhYl9pcnFfYW5kX2RtYSgpICovCi0JCQlyZWxlYXNlX3JlZ2lvbihGRENTLT5hZGRyZXNzICsgMiwgNCk7Ci0JCQlyZWxlYXNlX3JlZ2lvbihGRENTLT5hZGRyZXNzICsgNywgMSk7CisJCQlmbG9wcHlfcmVsZWFzZV9yZWdpb25zKGZkYyk7CiAJCQlGRENTLT5hZGRyZXNzID0gLTE7CiAJCQlGRENTLT52ZXJzaW9uID0gRkRDX05PTkU7CiAJCQljb250aW51ZTsKQEAgLTQyODQsOCArNDI4NCw3IEBACiAJCUZEQ1MtPnZlcnNpb24gPSBnZXRfZmRjX3ZlcnNpb24oKTsKIAkJaWYgKEZEQ1MtPnZlcnNpb24gPT0gRkRDX05PTkUpIHsKIAkJCS8qIGZyZWUgaW9wb3J0cyByZXNlcnZlZCBieSBmbG9wcHlfZ3JhYl9pcnFfYW5kX2RtYSgpICovCi0JCQlyZWxlYXNlX3JlZ2lvbihGRENTLT5hZGRyZXNzICsgMiwgNCk7Ci0JCQlyZWxlYXNlX3JlZ2lvbihGRENTLT5hZGRyZXNzICsgNywgMSk7CisJCQlmbG9wcHlfcmVsZWFzZV9yZWdpb25zKGZkYyk7CiAJCQlGRENTLT5hZGRyZXNzID0gLTE7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNDM1OCw2ICs0MzU3LDQ3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmxvcHB5X3VzYWdlX2xvY2spOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlvX3JlZ2lvbiB7CisJaW50IG9mZnNldDsKKwlpbnQgc2l6ZTsKK30gaW9fcmVnaW9uc1tdID0geworCXsgMiwgMSB9LAorCS8qIGFkZHJlc3MgKyAzIGlzIHNvbWV0aW1lcyByZXNlcnZlZCBieSBwbnAgYmlvcyBmb3IgbW90aGVyYm9hcmQgKi8KKwl7IDQsIDIgfSwKKwkvKiBhZGRyZXNzICsgNiBpcyByZXNlcnZlZCwgYW5kIG1heSBiZSB0YWtlbiBieSBJREUuCisJICogVW5mb3J0dW5hdGVseSwgQWRhcHRlYyBkb2Vzbid0IGtub3cgdGhpcyA6LSgsICovCisJeyA3LCAxIH0sCit9OworCitzdGF0aWMgdm9pZCBmbG9wcHlfcmVsZWFzZV9hbGxvY2F0ZWRfcmVnaW9ucyhpbnQgZmRjLCBjb25zdCBzdHJ1Y3QgaW9fcmVnaW9uICpwKQoreworCXdoaWxlIChwICE9IGlvX3JlZ2lvbnMpIHsKKwkJcC0tOworCQlyZWxlYXNlX3JlZ2lvbihGRENTLT5hZGRyZXNzICsgcC0+b2Zmc2V0LCBwLT5zaXplKTsKKwl9Cit9CisKKyNkZWZpbmUgQVJSQVlfRU5EKFgpICgmKChYKVtBUlJBWV9TSVpFKFgpXSkpCisKK3N0YXRpYyBpbnQgZmxvcHB5X3JlcXVlc3RfcmVnaW9ucyhpbnQgZmRjKQoreworCWNvbnN0IHN0cnVjdCBpb19yZWdpb24gKnA7CisKKwlmb3IgKHAgPSBpb19yZWdpb25zOyBwIDwgQVJSQVlfRU5EKGlvX3JlZ2lvbnMpOyBwKyspIHsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihGRENTLT5hZGRyZXNzICsgcC0+b2Zmc2V0LCBwLT5zaXplLCAiZmxvcHB5IikpIHsKKwkJCURQUklOVCgiRmxvcHB5IGlvLXBvcnQgMHglMDRseCBpbiB1c2VcbiIsIEZEQ1MtPmFkZHJlc3MgKyBwLT5vZmZzZXQpOworCQkJZmxvcHB5X3JlbGVhc2VfYWxsb2NhdGVkX3JlZ2lvbnMoZmRjLCBwKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlX3JlZ2lvbnMoaW50IGZkYykKK3sKKwlmbG9wcHlfcmVsZWFzZV9hbGxvY2F0ZWRfcmVnaW9ucyhmZGMsIEFSUkFZX0VORChpb19yZWdpb25zKSk7Cit9CisKIHN0YXRpYyBpbnQgZmxvcHB5X2dyYWJfaXJxX2FuZF9kbWEodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDM5OSwxOCArNDQzOSw4IEBACiAKIAlmb3IgKGZkYyA9IDA7IGZkYyA8IE5fRkRDOyBmZGMrKykgewogCQlpZiAoRkRDUy0+YWRkcmVzcyAhPSAtMSkgewotCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihGRENTLT5hZGRyZXNzICsgMiwgNCwgImZsb3BweSIpKSB7Ci0JCQkJRFBSSU5UKCJGbG9wcHkgaW8tcG9ydCAweCUwNGx4IGluIHVzZVxuIiwKLQkJCQkgICAgICAgRkRDUy0+YWRkcmVzcyArIDIpOwotCQkJCWdvdG8gY2xlYW51cDE7Ci0JCQl9Ci0JCQlpZiAoIXJlcXVlc3RfcmVnaW9uKEZEQ1MtPmFkZHJlc3MgKyA3LCAxLCAiZmxvcHB5IERJUiIpKSB7Ci0JCQkJRFBSSU5UKCJGbG9wcHkgaW8tcG9ydCAweCUwNGx4IGluIHVzZVxuIiwKLQkJCQkgICAgICAgRkRDUy0+YWRkcmVzcyArIDcpOwotCQkJCWdvdG8gY2xlYW51cDI7Ci0JCQl9Ci0JCQkvKiBhZGRyZXNzICsgNiBpcyByZXNlcnZlZCwgYW5kIG1heSBiZSB0YWtlbiBieSBJREUuCi0JCQkgKiBVbmZvcnR1bmF0ZWx5LCBBZGFwdGVjIGRvZXNuJ3Qga25vdyB0aGlzIDotKCwgKi8KKwkJCWlmIChmbG9wcHlfcmVxdWVzdF9yZWdpb25zKGZkYykpCisJCQkJZ290byBjbGVhbnVwOwogCQl9CiAJfQogCWZvciAoZmRjID0gMDsgZmRjIDwgTl9GREM7IGZkYysrKSB7CkBAIC00NDMyLDE1ICs0NDYyLDExIEBACiAJZmRjID0gMDsKIAlpcnFkbWFfYWxsb2NhdGVkID0gMTsKIAlyZXR1cm4gMDsKLWNsZWFudXAyOgotCXJlbGVhc2VfcmVnaW9uKEZEQ1MtPmFkZHJlc3MgKyAyLCA0KTsKLWNsZWFudXAxOgorY2xlYW51cDoKIAlmZF9mcmVlX2lycSgpOwogCWZkX2ZyZWVfZG1hKCk7Ci0Jd2hpbGUgKC0tZmRjID49IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oRkRDUy0+YWRkcmVzcyArIDIsIDQpOwotCQlyZWxlYXNlX3JlZ2lvbihGRENTLT5hZGRyZXNzICsgNywgMSk7Ci0JfQorCXdoaWxlICgtLWZkYyA+PSAwKQorCQlmbG9wcHlfcmVsZWFzZV9yZWdpb25zKGZkYyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZsb3BweV91c2FnZV9sb2NrLCBmbGFncyk7CiAJdXNhZ2VfY291bnQtLTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmbG9wcHlfdXNhZ2VfbG9jaywgZmxhZ3MpOwpAQCAtNDUwMSwxMCArNDUyNyw4IEBACiAjZW5kaWYKIAlvbGRfZmRjID0gZmRjOwogCWZvciAoZmRjID0gMDsgZmRjIDwgTl9GREM7IGZkYysrKQotCQlpZiAoRkRDUy0+YWRkcmVzcyAhPSAtMSkgewotCQkJcmVsZWFzZV9yZWdpb24oRkRDUy0+YWRkcmVzcyArIDIsIDQpOwotCQkJcmVsZWFzZV9yZWdpb24oRkRDUy0+YWRkcmVzcyArIDcsIDEpOwotCQl9CisJCWlmIChGRENTLT5hZGRyZXNzICE9IC0xKQorCQkJZmxvcHB5X3JlbGVhc2VfcmVnaW9ucyhmZGMpOwogCWZkYyA9IG9sZF9mZGM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggZWRiYWFjNi4uMjYyMWVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTM5Miw4ICszOTIsNyBAQAogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBwLT5sbzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKIAlzZWN0b3JfdCBJVjsKLQlzaXplX3Qgc2l6ZTsKLQlpbnQgcmV0OworCWludCBzaXplLCByZXQ7CiAKIAlyZXQgPSBidWYtPm9wcy0+Y29uZmlybShwaXBlLCBidWYpOwogCWlmICh1bmxpa2VseShyZXQpKQpAQCAtNDc1LDEwICs0NzQsMzUgQEAKIAlpbnQgcmV0OwogCiAJcG9zID0gKChsb2ZmX3QpIGJpby0+Ymlfc2VjdG9yIDw8IDkpICsgbG8tPmxvX29mZnNldDsKLQlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpCisKKwlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpIHsKKwkJaW50IGJhcnJpZXIgPSBiaW9fYmFycmllcihiaW8pOworCQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLT5sb19iYWNraW5nX2ZpbGU7CisKKwkJaWYgKGJhcnJpZXIpIHsKKwkJCWlmICh1bmxpa2VseSghZmlsZS0+Zl9vcC0+ZnN5bmMpKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IHZmc19mc3luYyhmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCiAJCXJldCA9IGxvX3NlbmQobG8sIGJpbywgcG9zKTsKLQllbHNlCisKKwkJaWYgKGJhcnJpZXIgJiYgIXJldCkgeworCQkJcmV0ID0gdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJcmV0ID0gLUVJTzsKKwkJfQorCX0gZWxzZQogCQlyZXQgPSBsb19yZWNlaXZlKGxvLCBiaW8sIGxvLT5sb19ibG9ja3NpemUsIHBvcyk7CisKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MjcsNiArODUxLDkgQEAKIAlsby0+bG9fcXVldWUtPnF1ZXVlZGF0YSA9IGxvOwogCWxvLT5sb19xdWV1ZS0+dW5wbHVnX2ZuID0gbG9vcF91bnBsdWc7CiAKKwlpZiAoIShsb19mbGFncyAmIExPX0ZMQUdTX1JFQURfT05MWSkgJiYgZmlsZS0+Zl9vcC0+ZnN5bmMpCisJCWJsa19xdWV1ZV9vcmRlcmVkKGxvLT5sb19xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CisKIAlzZXRfY2FwYWNpdHkobG8tPmxvX2Rpc2ssIHNpemUpOwogCWJkX3NldF9zaXplKGJkZXYsIHNpemUgPDwgOSk7CiAKQEAgLTk0MiwxMSArOTY5LDE4IEBACiAJCWJkX3NldF9zaXplKGJkZXYsIDApOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtPmZfbWFwcGluZywgZ2ZwKTsKIAlsby0+bG9fc3RhdGUgPSBMb191bmJvdW5kOwotCWZwdXQoZmlscCk7CiAJLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAlpZiAobWF4X3BhcnQgPiAwKQogCQlpb2N0bF9ieV9iZGV2KGJkZXYsIEJMS1JSUEFSVCwgMCk7CisJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwkvKgorCSAqIE5lZWQgbm90IGhvbGQgbG9fY3RsX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLgorCSAqIENhbGxpbmcgZnB1dCBob2xkaW5nIGxvX2N0bF9tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyCisJICogbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMgZnB1dCBjYW4gdGFrZQorCSAqIGJkX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX2N0bF9tdXRleC4KKwkgKi8KKwlmcHV0KGZpbHApOwogCXJldHVybiAwOwogfQogCkBAIC0xMTY0LDcgKzExOTgsNyBAQAogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAotCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZsby0+bG9fY3RsX211dGV4LCAxKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTE9PUF9TRVRfRkQ6CiAJCWVyciA9IGxvb3Bfc2V0X2ZkKGxvLCBtb2RlLCBiZGV2LCBhcmcpOwpAQCAtMTE3Myw3ICsxMjA3LDEwIEBACiAJCWVyciA9IGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpOwogCQlicmVhazsKIAljYXNlIExPT1BfQ0xSX0ZEOgorCQkvKiBsb29wX2Nscl9mZCB3b3VsZCBoYXZlIHVubG9ja2VkIGxvX2N0bF9tdXRleCBvbiBzdWNjZXNzICovCiAJCWVyciA9IGxvb3BfY2xyX2ZkKGxvLCBiZGV2KTsKKwkJaWYgKCFlcnIpCisJCQlnb3RvIG91dF91bmxvY2tlZDsKIAkJYnJlYWs7CiAJY2FzZSBMT09QX1NFVF9TVEFUVVM6CiAJCWVyciA9IGxvb3Bfc2V0X3N0YXR1c19vbGQobG8sIChzdHJ1Y3QgbG9vcF9pbmZvIF9fdXNlciAqKSBhcmcpOwpAQCAtMTE5MSw2ICsxMjI4LDggQEAKIAkJZXJyID0gbG8tPmlvY3RsID8gbG8tPmlvY3RsKGxvLCBjbWQsIGFyZykgOiAtRUlOVkFMOwogCX0KIAltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCitvdXRfdW5sb2NrZWQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMKaW5kZXggOWRmYTI3MS4uYzM5N2IzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZy5jCkBAIC00MjIsNyArNDIyLDcgQEAKIAogCWZvciAoayA9IDA7IGsgPCBsZW47IGsrKykgewogCQljaGFyIGMgPSAqYnVmKys7Ci0JCWlmIChjICE9ICcgJyB8fCBjICE9IGwpCisJCWlmIChjICE9ICcgJyAmJiBjICE9IGwpCiAJCQlsID0gKnRhcmcrKyA9IGM7CiAJfQogCWlmIChsID09ICcgJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jIGIvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzZWQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCkBAIC0wLDAgKzEsODY1IEBACisvKgorICogcHMzdnJhbSAtIFVzZSBleHRyYSBQUzMgdmlkZW8gcmFtIGFzIE1URCBibG9jayBkZXZpY2UuCisgKgorICogQ29weXJpZ2h0IDIwMDkgU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIEJhc2VkIG9uIHRoZSBNVEQgcHMzdnJhbSBkcml2ZXIsIHdoaWNoIGlzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KKyAqIEFkZGVkIHN1cHBvcnQgUlNYIERNQSBWaXZpZW4gQ2hhcHBlbGllciA8dml2aWVuLmNoYXBwZWxpZXJAZnJlZS5mcj4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CisjaW5jbHVkZSA8YXNtL3BzMy5oPgorCisKKyNkZWZpbmUgREVWSUNFX05BTUUJCSJwczN2cmFtIgorCisKKyNkZWZpbmUgWERSX0JVRl9TSVpFICgyICogMTAyNCAqIDEwMjQpIC8qIFhEUiBidWZmZXIgKG11c3QgYmUgMU1pQiBhbGlnbmVkKSAqLworI2RlZmluZSBYRFJfSU9JRiAweDBjMDAwMDAwCisKKyNkZWZpbmUgRklGT19CQVNFIFhEUl9JT0lGCisjZGVmaW5lIEZJRk9fU0laRSAoNjQgKiAxMDI0KQorCisjZGVmaW5lIERNQV9QQUdFX1NJWkUgKDQgKiAxMDI0KQorCisjZGVmaW5lIENBQ0hFX1BBR0VfU0laRSAoMjU2ICogMTAyNCkKKyNkZWZpbmUgQ0FDSEVfUEFHRV9DT1VOVCAoKFhEUl9CVUZfU0laRSAtIEZJRk9fU0laRSkgLyBDQUNIRV9QQUdFX1NJWkUpCisKKyNkZWZpbmUgQ0FDSEVfT0ZGU0VUIENBQ0hFX1BBR0VfU0laRQorI2RlZmluZSBGSUZPX09GRlNFVCAwCisKKyNkZWZpbmUgQ1RSTF9QVVQgMHgxMAorI2RlZmluZSBDVFJMX0dFVCAweDExCisjZGVmaW5lIENUUkxfVE9QIDB4MTUKKworI2RlZmluZSBVUExPQURfU1VCQ0gJMQorI2RlZmluZSBET1dOTE9BRF9TVUJDSAkyCisKKyNkZWZpbmUgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfT0ZGU0VUX0lOCTB4MDAwMDAzMGMKKyNkZWZpbmUgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfTk9USUZZCTB4MDAwMDAxMDQKKworI2RlZmluZSBMMUdQVV9DT05URVhUX0FUVFJJQlVURV9GQl9CTElUIDB4NjAxCisKKyNkZWZpbmUgQ0FDSEVfUEFHRV9QUkVTRU5UIDEKKyNkZWZpbmUgQ0FDSEVfUEFHRV9ESVJUWSAgIDIKKworc3RydWN0IHBzM3ZyYW1fdGFnIHsKKwl1bnNpZ25lZCBpbnQgYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCitzdHJ1Y3QgcHMzdnJhbV9jYWNoZSB7CisJdW5zaWduZWQgaW50IHBhZ2VfY291bnQ7CisJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZTsKKwlzdHJ1Y3QgcHMzdnJhbV90YWcgKnRhZ3M7CisJdW5zaWduZWQgaW50IGhpdDsKKwl1bnNpZ25lZCBpbnQgbWlzczsKK307CisKK3N0cnVjdCBwczN2cmFtX3ByaXYgeworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgZ2VuZGlzayAqZ2VuZGlzazsKKworCXU2NCBzaXplOworCisJdTY0IG1lbW9yeV9oYW5kbGU7CisJdTY0IGNvbnRleHRfaGFuZGxlOworCXUzMiAqY3RybDsKKwl1MzIgKnJlcG9ydHM7CisJdTggX19pb21lbSAqZGRyX2Jhc2U7CisJdTggKnhkcl9idWY7CisKKwl1MzIgKmZpZm9fYmFzZTsKKwl1MzIgKmZpZm9fcHRyOworCisJc3RydWN0IHBzM3ZyYW1fY2FjaGUgY2FjaGU7CisKKwkvKiBVc2VkIHRvIHNlcmlhbGl6ZSBjYWNoZS9ETUEgb3BlcmF0aW9ucyAqLworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworCitzdGF0aWMgaW50IHBzM3ZyYW1fbWFqb3I7CisKKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwczN2cmFtX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKKworCisjZGVmaW5lIERNQV9OT1RJRklFUl9IQU5ETEVfQkFTRSAweDY2NjA0MjAwIC8qIGZpcnN0IERNQSBub3RpZmllciBoYW5kbGUgKi8KKyNkZWZpbmUgRE1BX05PVElGSUVSX09GRlNFVF9CQVNFIDB4MTAwMCAgICAgLyogZmlyc3QgRE1BIG5vdGlmaWVyIG9mZnNldCAqLworI2RlZmluZSBETUFfTk9USUZJRVJfU0laRSAgICAgICAgMHg0MAorI2RlZmluZSBOT1RJRklFUiA3CS8qIG5vdGlmaWVyIHVzZWQgZm9yIGNvbXBsZXRpb24gcmVwb3J0ICovCisKK3N0YXRpYyBjaGFyICpzaXplID0gIjI1Nk0iOworbW9kdWxlX3BhcmFtKHNpemUsIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2l6ZSwgIm1lbW9yeSBzaXplIik7CisKK3N0YXRpYyB1MzIgKnBzM3ZyYW1fZ2V0X25vdGlmaWVyKHUzMiAqcmVwb3J0cywgaW50IG5vdGlmaWVyKQoreworCXJldHVybiAodm9pZCAqKXJlcG9ydHMgKyBETUFfTk9USUZJRVJfT0ZGU0VUX0JBU0UgKworCSAgICAgICBETUFfTk9USUZJRVJfU0laRSAqIG5vdGlmaWVyOworfQorCitzdGF0aWMgdm9pZCBwczN2cmFtX25vdGlmaWVyX3Jlc2V0KHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXUzMiAqbm90aWZ5ID0gcHMzdnJhbV9nZXRfbm90aWZpZXIocHJpdi0+cmVwb3J0cywgTk9USUZJRVIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJbm90aWZ5W2ldID0gMHhmZmZmZmZmZjsKK30KKworc3RhdGljIGludCBwczN2cmFtX25vdGlmaWVyX3dhaXQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAorCQkJCSB1bnNpZ25lZCBpbnQgdGltZW91dF9tcykKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXUzMiAqbm90aWZ5ID0gcHMzdnJhbV9nZXRfbm90aWZpZXIocHJpdi0+cmVwb3J0cywgTk9USUZJRVIpOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOworCisJZG8geworCQlpZiAoIW5vdGlmeVszXSkKKwkJCXJldHVybiAwOworCQltc2xlZXAoMSk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIHBzM3ZyYW1faW5pdF9yaW5nKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCisJcHJpdi0+Y3RybFtDVFJMX1BVVF0gPSBGSUZPX0JBU0UgKyBGSUZPX09GRlNFVDsKKwlwcml2LT5jdHJsW0NUUkxfR0VUXSA9IEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUOworfQorCitzdGF0aWMgaW50IHBzM3ZyYW1fd2FpdF9yaW5nKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiwKKwkJCSAgICAgdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTsKKworCWRvIHsKKwkJaWYgKHByaXYtPmN0cmxbQ1RSTF9QVVRdID09IHByaXYtPmN0cmxbQ1RSTF9HRVRdKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcCgxKTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CisKKwlkZXZfd2FybigmZGV2LT5jb3JlLCAiRklGTyB0aW1lb3V0ICglMDh4LyUwOHgvJTA4eClcbiIsCisJCSBwcml2LT5jdHJsW0NUUkxfUFVUXSwgcHJpdi0+Y3RybFtDVFJMX0dFVF0sCisJCSBwcml2LT5jdHJsW0NUUkxfVE9QXSk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIHZvaWQgcHMzdnJhbV9vdXRfcmluZyhzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2LCB1MzIgZGF0YSkKK3sKKwkqKHByaXYtPmZpZm9fcHRyKSsrID0gZGF0YTsKK30KKworc3RhdGljIHZvaWQgcHMzdnJhbV9iZWdpbl9yaW5nKHN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYsIHUzMiBjaGFuLCB1MzIgdGFnLAorCQkJICAgICAgIHUzMiBzaXplKQoreworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgKHNpemUgPDwgMTgpIHwgKGNoYW4gPDwgMTMpIHwgdGFnKTsKK30KKworc3RhdGljIHZvaWQgcHMzdnJhbV9yZXdpbmRfcmluZyhzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKwlpbnQgc3RhdHVzOworCisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweDIwMDAwMDAwIHwgKEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUKSk7CisKKwlwcml2LT5jdHJsW0NUUkxfUFVUXSA9IEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUOworCisJLyogYXNraW5nIHRoZSBIViBmb3IgYSBibGl0IHdpbGwga2ljayB0aGUgRklGTyAqLworCXN0YXR1cyA9IGx2MV9ncHVfY29udGV4dF9hdHRyaWJ1dGUocHJpdi0+Y29udGV4dF9oYW5kbGUsCisJCQkJCSAgIEwxR1BVX0NPTlRFWFRfQVRUUklCVVRFX0ZCX0JMSVQsIDAsCisJCQkJCSAgIDAsIDAsIDApOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoJmRldi0+Y29yZSwKKwkJCSIlczogbHYxX2dwdV9jb250ZXh0X2F0dHJpYnV0ZSBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLAorCQkJc3RhdHVzKTsKKworCXByaXYtPmZpZm9fcHRyID0gcHJpdi0+Zmlmb19iYXNlOworfQorCitzdGF0aWMgdm9pZCBwczN2cmFtX2ZpcmVfcmluZyhzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKwlpbnQgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcHMzX2dwdV9tdXRleCk7CisKKwlwcml2LT5jdHJsW0NUUkxfUFVUXSA9IEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUICsKKwkJCSAgICAgICAocHJpdi0+Zmlmb19wdHIgLSBwcml2LT5maWZvX2Jhc2UpICogc2l6ZW9mKHUzMik7CisKKwkvKiBhc2tpbmcgdGhlIEhWIGZvciBhIGJsaXQgd2lsbCBraWNrIHRoZSBGSUZPICovCisJc3RhdHVzID0gbHYxX2dwdV9jb250ZXh0X2F0dHJpYnV0ZShwcml2LT5jb250ZXh0X2hhbmRsZSwKKwkJCQkJICAgTDFHUFVfQ09OVEVYVF9BVFRSSUJVVEVfRkJfQkxJVCwgMCwKKwkJCQkJICAgMCwgMCwgMCk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmZGV2LT5jb3JlLAorCQkJIiVzOiBsdjFfZ3B1X2NvbnRleHRfYXR0cmlidXRlIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sCisJCQlzdGF0dXMpOworCisJaWYgKChwcml2LT5maWZvX3B0ciAtIHByaXYtPmZpZm9fYmFzZSkgKiBzaXplb2YodTMyKSA+CisJICAgIEZJRk9fU0laRSAtIDEwMjQpIHsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiRklGTyBmdWxsLCByZXdpbmRpbmdcbiIpOworCQlwczN2cmFtX3dhaXRfcmluZyhkZXYsIDIwMCk7CisJCXBzM3ZyYW1fcmV3aW5kX3JpbmcoZGV2KTsKKwl9CisKKwltdXRleF91bmxvY2soJnBzM19ncHVfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBwczN2cmFtX2JpbmQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisKKwlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgVVBMT0FEX1NVQkNILCAwLCAxKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDB4MzEzMzczMDMpOworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBVUExPQURfU1VCQ0gsIDB4MTgwLCAzKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIERNQV9OT1RJRklFUl9IQU5ETEVfQkFTRSArIE5PVElGSUVSKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDB4ZmVlZDAwMDEpOwkvKiBETUEgc3lzdGVtIFJBTSBpbnN0YW5jZSAqLworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHhmZWVkMDAwMCk7ICAgICAvKiBETUEgdmlkZW8gUkFNIGluc3RhbmNlICovCisKKwlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgRE9XTkxPQURfU1VCQ0gsIDAsIDEpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHgzMTM3YzBkZSk7CisJcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIERPV05MT0FEX1NVQkNILCAweDE4MCwgMyk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBETUFfTk9USUZJRVJfSEFORExFX0JBU0UgKyBOT1RJRklFUik7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweGZlZWQwMDAwKTsJLyogRE1BIHZpZGVvIFJBTSBpbnN0YW5jZSAqLworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHhmZWVkMDAwMSk7CS8qIERNQSBzeXN0ZW0gUkFNIGluc3RhbmNlICovCisKKwlwczN2cmFtX2ZpcmVfcmluZyhkZXYpOworfQorCitzdGF0aWMgaW50IHBzM3ZyYW1fdXBsb2FkKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiwKKwkJCSAgdW5zaWduZWQgaW50IHNyY19vZmZzZXQsIHVuc2lnbmVkIGludCBkc3Rfb2Zmc2V0LAorCQkJICBpbnQgbGVuLCBpbnQgY291bnQpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBVUExPQURfU1VCQ0gsCisJCQkgICBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9PRkZTRVRfSU4sIDgpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgWERSX0lPSUYgKyBzcmNfb2Zmc2V0KTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIGRzdF9vZmZzZXQpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgY291bnQpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgKDEgPDwgOCkgfCAxKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDApOworCisJcHMzdnJhbV9ub3RpZmllcl9yZXNldChkZXYpOworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBVUExPQURfU1VCQ0gsCisJCQkgICBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9OT1RJRlksIDEpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7CisJcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIFVQTE9BRF9TVUJDSCwgMHgxMDAsIDEpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7CisJcHMzdnJhbV9maXJlX3JpbmcoZGV2KTsKKwlpZiAocHMzdnJhbV9ub3RpZmllcl93YWl0KGRldiwgMjAwKSA8IDApIHsKKwkJZGV2X3dhcm4oJmRldi0+Y29yZSwgIiVzOiBOb3RpZmllciB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwczN2cmFtX2Rvd25sb2FkKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3JjX29mZnNldCwgdW5zaWduZWQgaW50IGRzdF9vZmZzZXQsCisJCQkgICAgaW50IGxlbiwgaW50IGNvdW50KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisKKwlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgRE9XTkxPQURfU1VCQ0gsCisJCQkgICBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9PRkZTRVRfSU4sIDgpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgc3JjX29mZnNldCk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBYRFJfSU9JRiArIGRzdF9vZmZzZXQpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgY291bnQpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgKDEgPDwgOCkgfCAxKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDApOworCisJcHMzdnJhbV9ub3RpZmllcl9yZXNldChkZXYpOworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBET1dOTE9BRF9TVUJDSCwKKwkJCSAgIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX05PVElGWSwgMSk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKKwlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgRE9XTkxPQURfU1VCQ0gsIDB4MTAwLCAxKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDApOworCXBzM3ZyYW1fZmlyZV9yaW5nKGRldik7CisJaWYgKHBzM3ZyYW1fbm90aWZpZXJfd2FpdChkZXYsIDIwMCkgPCAwKSB7CisJCWRldl93YXJuKCZkZXYtPmNvcmUsICIlczogTm90aWZpZXIgdGltZW91dFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBzM3ZyYW1fY2FjaGVfZXZpY3Qoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LCBpbnQgZW50cnkpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgcHMzdnJhbV9jYWNoZSAqY2FjaGUgPSAmcHJpdi0+Y2FjaGU7CisKKwlpZiAoIShjYWNoZS0+dGFnc1tlbnRyeV0uZmxhZ3MgJiBDQUNIRV9QQUdFX0RJUlRZKSkKKwkJcmV0dXJuOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiRmx1c2hpbmcgJWQ6IDB4JTA4eFxuIiwgZW50cnksCisJCWNhY2hlLT50YWdzW2VudHJ5XS5hZGRyZXNzKTsKKwlpZiAocHMzdnJhbV91cGxvYWQoZGV2LCBDQUNIRV9PRkZTRVQgKyBlbnRyeSAqIGNhY2hlLT5wYWdlX3NpemUsCisJCQkgICBjYWNoZS0+dGFnc1tlbnRyeV0uYWRkcmVzcywgRE1BX1BBR0VfU0laRSwKKwkJCSAgIGNhY2hlLT5wYWdlX3NpemUgLyBETUFfUEFHRV9TSVpFKSA8IDApIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLAorCQkJIkZhaWxlZCB0byB1cGxvYWQgZnJvbSAweCV4IHRvICIgIjB4JXggc2l6ZSAweCV4XG4iLAorCQkJZW50cnkgKiBjYWNoZS0+cGFnZV9zaXplLCBjYWNoZS0+dGFnc1tlbnRyeV0uYWRkcmVzcywKKwkJCWNhY2hlLT5wYWdlX3NpemUpOworCX0KKwljYWNoZS0+dGFnc1tlbnRyeV0uZmxhZ3MgJj0gfkNBQ0hFX1BBR0VfRElSVFk7Cit9CisKK3N0YXRpYyB2b2lkIHBzM3ZyYW1fY2FjaGVfbG9hZChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYsIGludCBlbnRyeSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXN0cnVjdCBwczN2cmFtX2NhY2hlICpjYWNoZSA9ICZwcml2LT5jYWNoZTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIkZldGNoaW5nICVkOiAweCUwOHhcbiIsIGVudHJ5LCBhZGRyZXNzKTsKKwlpZiAocHMzdnJhbV9kb3dubG9hZChkZXYsIGFkZHJlc3MsCisJCQkgICAgIENBQ0hFX09GRlNFVCArIGVudHJ5ICogY2FjaGUtPnBhZ2Vfc2l6ZSwKKwkJCSAgICAgRE1BX1BBR0VfU0laRSwKKwkJCSAgICAgY2FjaGUtPnBhZ2Vfc2l6ZSAvIERNQV9QQUdFX1NJWkUpIDwgMCkgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsCisJCQkiRmFpbGVkIHRvIGRvd25sb2FkIGZyb20gMHgleCB0byAweCV4IHNpemUgMHgleFxuIiwKKwkJCWFkZHJlc3MsIGVudHJ5ICogY2FjaGUtPnBhZ2Vfc2l6ZSwgY2FjaGUtPnBhZ2Vfc2l6ZSk7CisJfQorCisJY2FjaGUtPnRhZ3NbZW50cnldLmFkZHJlc3MgPSBhZGRyZXNzOworCWNhY2hlLT50YWdzW2VudHJ5XS5mbGFncyB8PSBDQUNIRV9QQUdFX1BSRVNFTlQ7Cit9CisKKworc3RhdGljIHZvaWQgcHMzdnJhbV9jYWNoZV9mbHVzaChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgcHMzdnJhbV9jYWNoZSAqY2FjaGUgPSAmcHJpdi0+Y2FjaGU7CisJaW50IGk7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICJGTFVTSFxuIik7CisJZm9yIChpID0gMDsgaSA8IGNhY2hlLT5wYWdlX2NvdW50OyBpKyspIHsKKwkJcHMzdnJhbV9jYWNoZV9ldmljdChkZXYsIGkpOworCQljYWNoZS0+dGFnc1tpXS5mbGFncyA9IDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBzM3ZyYW1fY2FjaGVfbWF0Y2goc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAorCQkJCQlsb2ZmX3QgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXN0cnVjdCBwczN2cmFtX2NhY2hlICpjYWNoZSA9ICZwcml2LT5jYWNoZTsKKwl1bnNpZ25lZCBpbnQgYmFzZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWludCBpOworCXN0YXRpYyBpbnQgY291bnRlcjsKKworCW9mZnNldCA9ICh1bnNpZ25lZCBpbnQpIChhZGRyZXNzICYgKGNhY2hlLT5wYWdlX3NpemUgLSAxKSk7CisJYmFzZSA9ICh1bnNpZ25lZCBpbnQpIChhZGRyZXNzIC0gb2Zmc2V0KTsKKworCS8qIGZ1bGx5IGFzc29jaWF0aXZlIGNoZWNrICovCisJZm9yIChpID0gMDsgaSA8IGNhY2hlLT5wYWdlX2NvdW50OyBpKyspIHsKKwkJaWYgKChjYWNoZS0+dGFnc1tpXS5mbGFncyAmIENBQ0hFX1BBR0VfUFJFU0VOVCkgJiYKKwkJICAgIGNhY2hlLT50YWdzW2ldLmFkZHJlc3MgPT0gYmFzZSkgeworCQkJY2FjaGUtPmhpdCsrOworCQkJZGV2X2RiZygmZGV2LT5jb3JlLCAiRm91bmQgZW50cnkgJWQ6IDB4JTA4eFxuIiwgaSwKKwkJCQljYWNoZS0+dGFnc1tpXS5hZGRyZXNzKTsKKwkJCXJldHVybiBpOworCQl9CisJfQorCisJLyogY2hvb3NlIGEgcmFuZG9tIGVudHJ5ICovCisJaSA9IChqaWZmaWVzICsgKGNvdW50ZXIrKykpICUgY2FjaGUtPnBhZ2VfY291bnQ7CisJZGV2X2RiZygmZGV2LT5jb3JlLCAiVXNpbmcgZW50cnkgJWRcbiIsIGkpOworCisJcHMzdnJhbV9jYWNoZV9ldmljdChkZXYsIGkpOworCXBzM3ZyYW1fY2FjaGVfbG9hZChkZXYsIGksIGJhc2UpOworCisJY2FjaGUtPm1pc3MrKzsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBwczN2cmFtX2NhY2hlX2luaXQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisKKwlwcml2LT5jYWNoZS5wYWdlX2NvdW50ID0gQ0FDSEVfUEFHRV9DT1VOVDsKKwlwcml2LT5jYWNoZS5wYWdlX3NpemUgPSBDQUNIRV9QQUdFX1NJWkU7CisJcHJpdi0+Y2FjaGUudGFncyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwczN2cmFtX3RhZykgKgorCQkJCSAgIENBQ0hFX1BBR0VfQ09VTlQsIEdGUF9LRVJORUwpOworCWlmIChwcml2LT5jYWNoZS50YWdzID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAiQ291bGQgbm90IGFsbG9jYXRlIGNhY2hlIHRhZ3NcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXZfaW5mbygmZGV2LT5jb3JlLCAiQ3JlYXRlZCByYW0gY2FjaGU6ICVkIGVudHJpZXMsICVkIEtpQiBlYWNoXG4iLAorCQlDQUNIRV9QQUdFX0NPVU5ULCBDQUNIRV9QQUdFX1NJWkUgLyAxMDI0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwczN2cmFtX2NhY2hlX2NsZWFudXAoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisKKwlwczN2cmFtX2NhY2hlX2ZsdXNoKGRldik7CisJa2ZyZWUocHJpdi0+Y2FjaGUudGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV9yZWFkKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiwgbG9mZl90IGZyb20sCisJCQlzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY2FjaGVkLCBjb3VudDsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiBmcm9tPTB4JTA4eCBsZW49MHglenhcbiIsIF9fZnVuY19fLAorCQkodW5zaWduZWQgaW50KWZyb20sIGxlbik7CisKKwlpZiAoZnJvbSA+PSBwcml2LT5zaXplKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChsZW4gPiBwcml2LT5zaXplIC0gZnJvbSkKKwkJbGVuID0gcHJpdi0+c2l6ZSAtIGZyb207CisKKwkvKiBDb3B5IGZyb20gdnJhbSB0byBidWYgKi8KKwljb3VudCA9IGxlbjsKKwl3aGlsZSAoY291bnQpIHsKKwkJdW5zaWduZWQgaW50IG9mZnNldCwgYXZhaWw7CisJCXVuc2lnbmVkIGludCBlbnRyeTsKKworCQlvZmZzZXQgPSAodW5zaWduZWQgaW50KSAoZnJvbSAmIChwcml2LT5jYWNoZS5wYWdlX3NpemUgLSAxKSk7CisJCWF2YWlsICA9IHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSAtIG9mZnNldDsKKworCQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKworCQllbnRyeSA9IHBzM3ZyYW1fY2FjaGVfbWF0Y2goZGV2LCBmcm9tKTsKKwkJY2FjaGVkID0gQ0FDSEVfT0ZGU0VUICsgZW50cnkgKiBwcml2LT5jYWNoZS5wYWdlX3NpemUgKyBvZmZzZXQ7CisKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6IGZyb209JTA4eCBjYWNoZWQ9JTA4eCBvZmZzZXQ9JTA4eCAiCisJCQkiYXZhaWw9JTA4eCBjb3VudD0lMDh4XG4iLCBfX2Z1bmNfXywKKwkJCSh1bnNpZ25lZCBpbnQpZnJvbSwgY2FjaGVkLCBvZmZzZXQsIGF2YWlsLCBjb3VudCk7CisKKwkJaWYgKGF2YWlsID4gY291bnQpCisJCQlhdmFpbCA9IGNvdW50OworCQltZW1jcHkoYnVmLCBwcml2LT54ZHJfYnVmICsgY2FjaGVkLCBhdmFpbCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCQlidWYgKz0gYXZhaWw7CisJCWNvdW50IC09IGF2YWlsOworCQlmcm9tICs9IGF2YWlsOworCX0KKworCSpyZXRsZW4gPSBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV93cml0ZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYsIGxvZmZfdCB0bywKKwkJCSBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY2FjaGVkLCBjb3VudDsKKworCWlmICh0byA+PSBwcml2LT5zaXplKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChsZW4gPiBwcml2LT5zaXplIC0gdG8pCisJCWxlbiA9IHByaXYtPnNpemUgLSB0bzsKKworCS8qIENvcHkgZnJvbSBidWYgdG8gdnJhbSAqLworCWNvdW50ID0gbGVuOworCXdoaWxlIChjb3VudCkgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBhdmFpbDsKKwkJdW5zaWduZWQgaW50IGVudHJ5OworCisJCW9mZnNldCA9ICh1bnNpZ25lZCBpbnQpICh0byAmIChwcml2LT5jYWNoZS5wYWdlX3NpemUgLSAxKSk7CisJCWF2YWlsICA9IHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSAtIG9mZnNldDsKKworCQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKworCQllbnRyeSA9IHBzM3ZyYW1fY2FjaGVfbWF0Y2goZGV2LCB0byk7CisJCWNhY2hlZCA9IENBQ0hFX09GRlNFVCArIGVudHJ5ICogcHJpdi0+Y2FjaGUucGFnZV9zaXplICsgb2Zmc2V0OworCisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiB0bz0lMDh4IGNhY2hlZD0lMDh4IG9mZnNldD0lMDh4ICIKKwkJCSJhdmFpbD0lMDh4IGNvdW50PSUwOHhcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KXRvLAorCQkJY2FjaGVkLCBvZmZzZXQsIGF2YWlsLCBjb3VudCk7CisKKwkJaWYgKGF2YWlsID4gY291bnQpCisJCQlhdmFpbCA9IGNvdW50OworCQltZW1jcHkocHJpdi0+eGRyX2J1ZiArIGNhY2hlZCwgYnVmLCBhdmFpbCk7CisKKwkJcHJpdi0+Y2FjaGUudGFnc1tlbnRyeV0uZmxhZ3MgfD0gQ0FDSEVfUEFHRV9ESVJUWTsKKworCQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJCWJ1ZiArPSBhdmFpbDsKKwkJY291bnQgLT0gYXZhaWw7CisJCXRvICs9IGF2YWlsOworCX0KKworCSpyZXRsZW4gPSBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiaGl0OiV1XG5taXNzOiV1XG4iLCBwcml2LT5jYWNoZS5oaXQsIHByaXYtPmNhY2hlLm1pc3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBzM3ZyYW1fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwczN2cmFtX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBzM3ZyYW1fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwczN2cmFtX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBzM3ZyYW1fcHJvY19pbml0KHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCisJcGRlID0gcHJvY19jcmVhdGUoREVWSUNFX05BTUUsIDA0NDQsIE5VTEwsICZwczN2cmFtX3Byb2NfZm9wcyk7CisJaWYgKCFwZGUpIHsKKwkJZGV2X3dhcm4oJmRldi0+Y29yZSwgImZhaWxlZCB0byBjcmVhdGUgL3Byb2MgZW50cnlcbiIpOworCQlyZXR1cm47CisJfQorCisJcGRlLT5vd25lciA9IFRISVNfTU9EVUxFOworCXBkZS0+ZGF0YSA9IHByaXY7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYgPSBxLT5xdWV1ZWRhdGE7CisJaW50IHdyaXRlID0gYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEU7CisJY29uc3QgY2hhciAqb3AgPSB3cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCI7CisJbG9mZl90IG9mZnNldCA9IGJpby0+Ymlfc2VjdG9yIDw8IDk7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBiaW8sIGkpIHsKKwkJLyogUFMzIGlzIHBwYzY0LCBzbyB3ZSBkb24ndCBoYW5kbGUgaGlnaG1lbSAqLworCQljaGFyICpwdHIgPSBwYWdlX2FkZHJlc3MoYnZlYy0+YnZfcGFnZSkgKyBidmVjLT5idl9vZmZzZXQ7CisJCXNpemVfdCBsZW4gPSBidmVjLT5idl9sZW4sIHJldGxlbjsKKworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIgICAgJXMgJXp1IGJ5dGVzIGF0IG9mZnNldCAlbGx1XG4iLCBvcCwKKwkJCWxlbiwgb2Zmc2V0KTsKKwkJaWYgKHdyaXRlKQorCQkJZXJyb3IgPSBwczN2cmFtX3dyaXRlKGRldiwgb2Zmc2V0LCBsZW4sICZyZXRsZW4sIHB0cik7CisJCWVsc2UKKwkJCWVycm9yID0gcHMzdnJhbV9yZWFkKGRldiwgb2Zmc2V0LCBsZW4sICZyZXRsZW4sIHB0cik7CisKKwkJaWYgKGVycm9yKSB7CisJCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlcyBmYWlsZWRcbiIsIG9wKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHJldGxlbiAhPSBsZW4pIHsKKwkJCWRldl9lcnIoJmRldi0+Y29yZSwgIlNob3J0ICVzXG4iLCBvcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9mZnNldCArPSBsZW47CisJfQorCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXMgY29tcGxldGVkXG4iLCBvcCk7CisKK291dDoKKwliaW9fZW5kaW8oYmlvLCBlcnJvcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBzM3ZyYW1fcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXY7CisJaW50IGVycm9yLCBzdGF0dXM7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBnZW5kaXNrICpnZW5kaXNrOworCXU2NCBkZHJfbHBhciwgY3RybF9scGFyLCBpbmZvX2xwYXIsIHJlcG9ydHNfbHBhciwgZGRyX3NpemUsCisJICAgIHJlcG9ydHNfc2l6ZTsKKwljaGFyICpyZXN0OworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCW11dGV4X2luaXQoJnByaXYtPmxvY2spOworCWRldi0+Y29yZS5kcml2ZXJfZGF0YSA9IHByaXY7CisKKwlwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCisJLyogQWxsb2NhdGUgWERSIGJ1ZmZlciAoMU1pQiBhbGlnbmVkKSAqLworCXByaXYtPnhkcl9idWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwkJZ2V0X29yZGVyKFhEUl9CVUZfU0laRSkpOworCWlmIChwcml2LT54ZHJfYnVmID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAiQ291bGQgbm90IGFsbG9jYXRlIFhEUiBidWZmZXJcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9mcmVlX3ByaXY7CisJfQorCisJLyogUHV0IEZJRk8gYXQgYmVnZ2lubmluZyBvZiBYRFIgYnVmZmVyICovCisJcHJpdi0+Zmlmb19iYXNlID0gKHUzMiAqKSAocHJpdi0+eGRyX2J1ZiArIEZJRk9fT0ZGU0VUKTsKKwlwcml2LT5maWZvX3B0ciA9IHByaXYtPmZpZm9fYmFzZTsKKworCS8qIFhYWDogTmVlZCB0byBvcGVuIEdQVSwgaW4gY2FzZSBwczNmYiBvciBzbmRfcHMzIGFyZW4ndCBsb2FkZWQgKi8KKwlpZiAocHMzX29wZW5faHZfZGV2aWNlKGRldikpIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAicHMzX29wZW5faHZfZGV2aWNlIGZhaWxlZFxuIik7CisJCWVycm9yID0gLUVBR0FJTjsKKwkJZ290byBvdXRfY2xvc2VfZ3B1OworCX0KKworCS8qIFJlcXVlc3QgbWVtb3J5ICovCisJc3RhdHVzID0gLTE7CisJZGRyX3NpemUgPSBBTElHTihtZW1wYXJzZShzaXplLCAmcmVzdCksIDEwMjQqMTAyNCk7CisJaWYgKCFkZHJfc2l6ZSkgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJTcGVjaWZpZWQgc2l6ZSBpcyB0b28gc21hbGxcbiIpOworCQllcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2Nsb3NlX2dwdTsKKwl9CisKKwl3aGlsZSAoZGRyX3NpemUgPiAwKSB7CisJCXN0YXR1cyA9IGx2MV9ncHVfbWVtb3J5X2FsbG9jYXRlKGRkcl9zaXplLCAwLCAwLCAwLCAwLAorCQkJCQkJICZwcml2LT5tZW1vcnlfaGFuZGxlLAorCQkJCQkJICZkZHJfbHBhcik7CisJCWlmICghc3RhdHVzKQorCQkJYnJlYWs7CisJCWRkcl9zaXplIC09IDEwMjQqMTAyNDsKKwl9CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJsdjFfZ3B1X21lbW9yeV9hbGxvY2F0ZSBmYWlsZWQgJWRcbiIsCisJCQlzdGF0dXMpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfeGRyX2J1ZjsKKwl9CisKKwkvKiBSZXF1ZXN0IGNvbnRleHQgKi8KKwlzdGF0dXMgPSBsdjFfZ3B1X2NvbnRleHRfYWxsb2NhdGUocHJpdi0+bWVtb3J5X2hhbmRsZSwgMCwKKwkJCQkJICAmcHJpdi0+Y29udGV4dF9oYW5kbGUsICZjdHJsX2xwYXIsCisJCQkJCSAgJmluZm9fbHBhciwgJnJlcG9ydHNfbHBhciwKKwkJCQkJICAmcmVwb3J0c19zaXplKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImx2MV9ncHVfY29udGV4dF9hbGxvY2F0ZSBmYWlsZWQgJWRcbiIsCisJCQlzdGF0dXMpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfbWVtb3J5OworCX0KKworCS8qIE1hcCBYRFIgYnVmZmVyIHRvIFJTWCAqLworCXN0YXR1cyA9IGx2MV9ncHVfY29udGV4dF9pb21hcChwcml2LT5jb250ZXh0X2hhbmRsZSwgWERSX0lPSUYsCisJCQkJICAgICAgIHBzM19tbV9waHlzX3RvX2xwYXIoX19wYShwcml2LT54ZHJfYnVmKSksCisJCQkJICAgICAgIFhEUl9CVUZfU0laRSwgMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJsdjFfZ3B1X2NvbnRleHRfaW9tYXAgZmFpbGVkICVkXG4iLAorCQkJc3RhdHVzKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2NvbnRleHQ7CisJfQorCisJcHJpdi0+ZGRyX2Jhc2UgPSBpb3JlbWFwX2ZsYWdzKGRkcl9scGFyLCBkZHJfc2l6ZSwgX1BBR0VfTk9fQ0FDSEUpOworCisJaWYgKCFwcml2LT5kZHJfYmFzZSkgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJpb3JlbWFwIEREUiBmYWlsZWRcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfY29udGV4dDsKKwl9CisKKwlwcml2LT5jdHJsID0gaW9yZW1hcChjdHJsX2xwYXIsIDY0ICogMTAyNCk7CisJaWYgKCFwcml2LT5jdHJsKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImlvcmVtYXAgQ1RSTCBmYWlsZWRcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubWFwX3ZyYW07CisJfQorCisJcHJpdi0+cmVwb3J0cyA9IGlvcmVtYXAocmVwb3J0c19scGFyLCByZXBvcnRzX3NpemUpOworCWlmICghcHJpdi0+cmVwb3J0cykgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJpb3JlbWFwIFJFUE9SVFMgZmFpbGVkXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bm1hcF9jdHJsOworCX0KKworCW11dGV4X2xvY2soJnBzM19ncHVfbXV0ZXgpOworCXBzM3ZyYW1faW5pdF9yaW5nKGRldik7CisJbXV0ZXhfdW5sb2NrKCZwczNfZ3B1X211dGV4KTsKKworCXByaXYtPnNpemUgPSBkZHJfc2l6ZTsKKworCXBzM3ZyYW1fYmluZChkZXYpOworCisJbXV0ZXhfbG9jaygmcHMzX2dwdV9tdXRleCk7CisJZXJyb3IgPSBwczN2cmFtX3dhaXRfcmluZyhkZXYsIDEwMCk7CisJbXV0ZXhfdW5sb2NrKCZwczNfZ3B1X211dGV4KTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNoYW5uZWxzXG4iKTsKKwkJZXJyb3IgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dF91bm1hcF9yZXBvcnRzOworCX0KKworCXBzM3ZyYW1fY2FjaGVfaW5pdChkZXYpOworCXBzM3ZyYW1fcHJvY19pbml0KGRldik7CisKKwlxdWV1ZSA9IGJsa19hbGxvY19xdWV1ZShHRlBfS0VSTkVMKTsKKwlpZiAoIXF1ZXVlKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImJsa19hbGxvY19xdWV1ZSBmYWlsZWRcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2NhY2hlX2NsZWFudXA7CisJfQorCisJcHJpdi0+cXVldWUgPSBxdWV1ZTsKKwlxdWV1ZS0+cXVldWVkYXRhID0gZGV2OworCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocXVldWUsIHBzM3ZyYW1fbWFrZV9yZXF1ZXN0KTsKKwlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocXVldWUsIE1BWF9QSFlTX1NFR01FTlRTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHF1ZXVlLCBNQVhfSFdfU0VHTUVOVFMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHF1ZXVlLCBNQVhfU0VHTUVOVF9TSVpFKTsKKwlibGtfcXVldWVfbWF4X3NlY3RvcnMocXVldWUsIFNBRkVfTUFYX1NFQ1RPUlMpOworCisJZ2VuZGlzayA9IGFsbG9jX2Rpc2soMSk7CisJaWYgKCFnZW5kaXNrKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImFsbG9jX2Rpc2sgZmFpbGVkXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfY2xlYW51cF9xdWV1ZTsKKwl9CisKKwlwcml2LT5nZW5kaXNrID0gZ2VuZGlzazsKKwlnZW5kaXNrLT5tYWpvciA9IHBzM3ZyYW1fbWFqb3I7CisJZ2VuZGlzay0+Zmlyc3RfbWlub3IgPSAwOworCWdlbmRpc2stPmZvcHMgPSAmcHMzdnJhbV9mb3BzOworCWdlbmRpc2stPnF1ZXVlID0gcXVldWU7CisJZ2VuZGlzay0+cHJpdmF0ZV9kYXRhID0gZGV2OworCWdlbmRpc2stPmRyaXZlcmZzX2RldiA9ICZkZXYtPmNvcmU7CisJc3RybGNweShnZW5kaXNrLT5kaXNrX25hbWUsIERFVklDRV9OQU1FLCBzaXplb2YoZ2VuZGlzay0+ZGlza19uYW1lKSk7CisJc2V0X2NhcGFjaXR5KGdlbmRpc2ssIHByaXYtPnNpemUgPj4gOSk7CisKKwlkZXZfaW5mbygmZGV2LT5jb3JlLCAiJXM6IFVzaW5nICVsdSBNaUIgb2YgR1BVIG1lbW9yeVxuIiwKKwkJIGdlbmRpc2stPmRpc2tfbmFtZSwgZ2V0X2NhcGFjaXR5KGdlbmRpc2spID4+IDExKTsKKworCWFkZF9kaXNrKGdlbmRpc2spOworCXJldHVybiAwOworCitmYWlsX2NsZWFudXBfcXVldWU6CisJYmxrX2NsZWFudXBfcXVldWUocXVldWUpOworb3V0X2NhY2hlX2NsZWFudXA6CisJcmVtb3ZlX3Byb2NfZW50cnkoREVWSUNFX05BTUUsIE5VTEwpOworCXBzM3ZyYW1fY2FjaGVfY2xlYW51cChkZXYpOworb3V0X3VubWFwX3JlcG9ydHM6CisJaW91bm1hcChwcml2LT5yZXBvcnRzKTsKK291dF91bm1hcF9jdHJsOgorCWlvdW5tYXAocHJpdi0+Y3RybCk7CitvdXRfdW5tYXBfdnJhbToKKwlpb3VubWFwKHByaXYtPmRkcl9iYXNlKTsKK291dF9mcmVlX2NvbnRleHQ6CisJbHYxX2dwdV9jb250ZXh0X2ZyZWUocHJpdi0+Y29udGV4dF9oYW5kbGUpOworb3V0X2ZyZWVfbWVtb3J5OgorCWx2MV9ncHVfbWVtb3J5X2ZyZWUocHJpdi0+bWVtb3J5X2hhbmRsZSk7CitvdXRfY2xvc2VfZ3B1OgorCXBzM19jbG9zZV9odl9kZXZpY2UoZGV2KTsKK291dF9mcmVlX3hkcl9idWY6CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcHJpdi0+eGRyX2J1ZiwgZ2V0X29yZGVyKFhEUl9CVUZfU0laRSkpOworZmFpbF9mcmVlX3ByaXY6CisJa2ZyZWUocHJpdik7CisJZGV2LT5jb3JlLmRyaXZlcl9kYXRhID0gTlVMTDsKK2ZhaWw6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IHBzM3ZyYW1fcmVtb3ZlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCisJZGVsX2dlbmRpc2socHJpdi0+Z2VuZGlzayk7CisJcHV0X2Rpc2socHJpdi0+Z2VuZGlzayk7CisJYmxrX2NsZWFudXBfcXVldWUocHJpdi0+cXVldWUpOworCXJlbW92ZV9wcm9jX2VudHJ5KERFVklDRV9OQU1FLCBOVUxMKTsKKwlwczN2cmFtX2NhY2hlX2NsZWFudXAoZGV2KTsKKwlpb3VubWFwKHByaXYtPnJlcG9ydHMpOworCWlvdW5tYXAocHJpdi0+Y3RybCk7CisJaW91bm1hcChwcml2LT5kZHJfYmFzZSk7CisJbHYxX2dwdV9jb250ZXh0X2ZyZWUocHJpdi0+Y29udGV4dF9oYW5kbGUpOworCWx2MV9ncHVfbWVtb3J5X2ZyZWUocHJpdi0+bWVtb3J5X2hhbmRsZSk7CisJcHMzX2Nsb3NlX2h2X2RldmljZShkZXYpOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHByaXYtPnhkcl9idWYsIGdldF9vcmRlcihYRFJfQlVGX1NJWkUpKTsKKwlrZnJlZShwcml2KTsKKwlkZXYtPmNvcmUuZHJpdmVyX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RyaXZlciBwczN2cmFtID0geworCS5tYXRjaF9pZAk9IFBTM19NQVRDSF9JRF9HUFUsCisJLm1hdGNoX3N1Yl9pZAk9IFBTM19NQVRDSF9TVUJfSURfR1BVX1JBTURJU0ssCisJLmNvcmUubmFtZQk9IERFVklDRV9OQU1FLAorCS5jb3JlLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLnByb2JlCQk9IHBzM3ZyYW1fcHJvYmUsCisJLnJlbW92ZQkJPSBwczN2cmFtX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBwczN2cmFtX3JlbW92ZSwKK307CisKKworc3RhdGljIGludCBfX2luaXQgcHMzdnJhbV9pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1BTM19MVjEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVycm9yID0gcmVnaXN0ZXJfYmxrZGV2KDAsIERFVklDRV9OQU1FKTsKKwlpZiAoZXJyb3IgPD0gMCkgeworCQlwcl9lcnIoIiVzOiByZWdpc3Rlcl9ibGtkZXYgZmFpbGVkICVkXG4iLCBERVZJQ0VfTkFNRSwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCXBzM3ZyYW1fbWFqb3IgPSBlcnJvcjsKKworCXByX2luZm8oIiVzOiByZWdpc3RlcmVkIGJsb2NrIGRldmljZSBtYWpvciAlZFxuIiwgREVWSUNFX05BTUUsCisJCXBzM3ZyYW1fbWFqb3IpOworCisJZXJyb3IgPSBwczNfc3lzdGVtX2J1c19kcml2ZXJfcmVnaXN0ZXIoJnBzM3ZyYW0pOworCWlmIChlcnJvcikKKwkJdW5yZWdpc3Rlcl9ibGtkZXYocHMzdnJhbV9tYWpvciwgREVWSUNFX05BTUUpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHMzdnJhbV9leGl0KHZvaWQpCit7CisJcHMzX3N5c3RlbV9idXNfZHJpdmVyX3VucmVnaXN0ZXIoJnBzM3ZyYW0pOworCXVucmVnaXN0ZXJfYmxrZGV2KHBzM3ZyYW1fbWFqb3IsIERFVklDRV9OQU1FKTsKK30KKworbW9kdWxlX2luaXQocHMzdnJhbV9pbml0KTsKK21vZHVsZV9leGl0KHBzM3ZyYW1fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUFMzIFZpZGVvIFJBTSBTdG9yYWdlIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU29ueSBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0FMSUFTKFBTM19NT0RVTEVfQUxJQVNfR1BVX1JBTURJU0spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjJjYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKQEAgLTAsMCArMSw5OTUgQEAKKy8qCisgKiBEcml2ZXIgZm9yIFNXSU0gKFNhbmRlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lKSBmbG9wcHkgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyIDxMYXVyZW50QGx2aXZpZXIuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxCisgKiBiYXNlZCBvbiBTV0lNMyBkcml2ZXIgKGMpIFBhdWwgTWFja2VycmFzLCAxOTk2CisgKiBiYXNlZCBvbiBuZXRCU0QgSVdNIGRyaXZlciAoYykgMTk5NywgMTk5OCBIYXVrZSBGYXRoLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogMjAwNC0wOC0yMSAobHYpIC0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICogMjAwOC0xMC0zMCAobHYpIC0gUG9ydCB0byAyLjYKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CisjaW5jbHVkZSA8YXNtL21hY192aWEuaD4KKworI2RlZmluZSBDQVJETkFNRSAic3dpbSIKKworc3RydWN0IHNlY3Rvcl9oZWFkZXIgeworCXVuc2lnbmVkIGNoYXIgc2lkZTsKKwl1bnNpZ25lZCBjaGFyIHRyYWNrOworCXVuc2lnbmVkIGNoYXIgc2VjdG9yOworCXVuc2lnbmVkIGNoYXIgc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGNyYzA7CisJdW5zaWduZWQgY2hhciBjcmMxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVmVyc2lvbiAwLjIgKDIwMDgtMTAtMzApIgorCisjZGVmaW5lIFJFRyh4KQl1bnNpZ25lZCBjaGFyIHgsIHggIyMgX3BhZFsweDIwMCAtIDFdOworCitzdHJ1Y3Qgc3dpbSB7CisJUkVHKHdyaXRlX2RhdGEpCisJUkVHKHdyaXRlX21hcmspCisJUkVHKHdyaXRlX0NSQykKKwlSRUcod3JpdGVfcGFyYW1ldGVyKQorCVJFRyh3cml0ZV9waGFzZSkKKwlSRUcod3JpdGVfc2V0dXApCisJUkVHKHdyaXRlX21vZGUwKQorCVJFRyh3cml0ZV9tb2RlMSkKKworCVJFRyhyZWFkX2RhdGEpCisJUkVHKHJlYWRfbWFyaykKKwlSRUcocmVhZF9lcnJvcikKKwlSRUcocmVhZF9wYXJhbWV0ZXIpCisJUkVHKHJlYWRfcGhhc2UpCisJUkVHKHJlYWRfc2V0dXApCisJUkVHKHJlYWRfc3RhdHVzKQorCVJFRyhyZWFkX2hhbmRzaGFrZSkKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgc3dpbV93cml0ZShiYXNlLCByZWcsIHYpIAlvdXRfOCgmKGJhc2UpLT53cml0ZV8jI3JlZywgKHYpKQorI2RlZmluZSBzd2ltX3JlYWQoYmFzZSwgcmVnKQkJaW5fOCgmKGJhc2UpLT5yZWFkXyMjcmVnKQorCisvKiBJV00gcmVnaXN0ZXJzICovCisKK3N0cnVjdCBpd20geworCVJFRyhwaDBMKQorCVJFRyhwaDBIKQorCVJFRyhwaDFMKQorCVJFRyhwaDFIKQorCVJFRyhwaDJMKQorCVJFRyhwaDJIKQorCVJFRyhwaDNMKQorCVJFRyhwaDNIKQorCVJFRyhtdHJPZmYpCisJUkVHKG10ck9uKQorCVJFRyhpbnREcml2ZSkKKwlSRUcoZXh0RHJpdmUpCisJUkVHKHE2TCkKKwlSRUcocTZIKQorCVJFRyhxN0wpCisJUkVHKHE3SCkKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCYoYmFzZSktPnJlZywgKHYpKQorI2RlZmluZSBpd21fcmVhZChiYXNlLCByZWcpCQlpbl84KCYoYmFzZSktPnJlZykKKworLyogYml0cyBpbiBwaGFzZSByZWdpc3RlciAqLworCisjZGVmaW5lIFNFRUtfUE9TSVRJVkUJMHgwNzAKKyNkZWZpbmUgU0VFS19ORUdBVElWRQkweDA3NAorI2RlZmluZSBTVEVQCQkweDA3MQorI2RlZmluZSBNT1RPUl9PTgkweDA3MgorI2RlZmluZSBNT1RPUl9PRkYJMHgwNzYKKyNkZWZpbmUgSU5ERVgJCTB4MDczCisjZGVmaW5lIEVKRUNUCQkweDA3NworI2RlZmluZSBTRVRNRk0JCTB4MTcxCisjZGVmaW5lIFNFVEdDUgkJMHgxNzUKKworI2RlZmluZSBSRUxBWAkJMHgwMzMKKyNkZWZpbmUgTFNUUkIJCTB4MDA4CisKKyNkZWZpbmUgQ0FfTUFTSwkJMHgwNzcKKworLyogU2VsZWN0IHZhbHVlcyBmb3Igc3dpbV9zZWxlY3QgYW5kIHN3aW1fcmVhZGJpdCAqLworCisjZGVmaW5lIFJFQURfREFUQV8wCTB4MDc0CisjZGVmaW5lIFRXT01FR19EUklWRQkweDA3NQorI2RlZmluZSBTSU5HTEVfU0lERUQJMHgwNzYKKyNkZWZpbmUgRFJJVkVfUFJFU0VOVAkweDA3NworI2RlZmluZSBESVNLX0lOCQkweDE3MAorI2RlZmluZSBXUklURV9QUk9UCTB4MTcxCisjZGVmaW5lIFRSQUNLX1pFUk8JMHgxNzIKKyNkZWZpbmUgVEFDSE8JCTB4MTczCisjZGVmaW5lIFJFQURfREFUQV8xCTB4MTc0CisjZGVmaW5lIE1GTV9NT0RFCTB4MTc1CisjZGVmaW5lIFNFRUtfQ09NUExFVEUJMHgxNzYKKyNkZWZpbmUgT05FTUVHX01FRElBCTB4MTc3CisKKy8qIEJpdHMgaW4gaGFuZHNoYWtlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgTUFSS19CWVRFCTB4MDEKKyNkZWZpbmUgQ1JDX1pFUk8JMHgwMgorI2RlZmluZSBSRERBVEEJCTB4MDQKKyNkZWZpbmUgU0VOU0UJCTB4MDgKKyNkZWZpbmUgTU9URU4JCTB4MTAKKyNkZWZpbmUgRVJST1IJCTB4MjAKKyNkZWZpbmUgREFUMkJZVEUJMHg0MAorI2RlZmluZSBEQVQxQllURQkweDgwCisKKy8qIGJpdHMgaW4gc2V0dXAgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBTX0lOVl9XREFUQQkweDAxCisjZGVmaW5lIFNfM181X1NFTEVDVAkweDAyCisjZGVmaW5lIFNfR0NSCQkweDA0CisjZGVmaW5lIFNfRkNMS19ESVYyCTB4MDgKKyNkZWZpbmUgU19FUlJPUl9DT1JSCTB4MTAKKyNkZWZpbmUgU19JQk1fRFJJVkUJMHgyMAorI2RlZmluZSBTX0dDUl9XUklURQkweDQwCisjZGVmaW5lIFNfVElNRU9VVAkweDgwCisKKy8qIGJpdHMgaW4gbW9kZSByZWdpc3RlciAqLworCisjZGVmaW5lIENMRklGTwkJMHgwMQorI2RlZmluZSBFTkJMMQkJMHgwMgorI2RlZmluZSBFTkJMMgkJMHgwNAorI2RlZmluZSBBQ1RJT04JCTB4MDgKKyNkZWZpbmUgV1JJVEVfTU9ERQkweDEwCisjZGVmaW5lIEhFRFNFTAkJMHgyMAorI2RlZmluZSBNT1RPTgkJMHg4MAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitlbnVtIGRyaXZlX2xvY2F0aW9uIHsKKwlJTlRFUk5BTF9EUklWRSA9IDB4MDIsCisJRVhURVJOQUxfRFJJVkUgPSAweDA0LAorfTsKKworZW51bSBtZWRpYV90eXBlIHsKKwlERF9NRURJQSwKKwlIRF9NRURJQSwKK307CisKK3N0cnVjdCBmbG9wcHlfc3RhdGUgeworCisJLyogcGh5c2ljYWwgcHJvcGVydGllcyAqLworCisJZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjsJLyogaW50ZXJuYWwgb3IgZXh0ZXJuYWwgZHJpdmUgKi8KKwlpbnQJCSBoZWFkX251bWJlcjsJLyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi8KKworCS8qIG1lZGlhICovCisKKwlpbnQJCSBkaXNrX2luOworCWludAkJIGVqZWN0ZWQ7CisJZW51bSBtZWRpYV90eXBlCSB0eXBlOworCWludAkJIHdyaXRlX3Byb3RlY3RlZDsKKworCWludAkJIHRvdGFsX3NlY3M7CisJaW50CQkgc2VjcGVyY3lsOworCWludAkJIHNlY3BlcnRyYWNrOworCisJLyogaW4tdXNlIGluZm9ybWF0aW9uICovCisKKwlpbnQJCXRyYWNrOworCWludAkJcmVmX2NvdW50OworCisJc3RydWN0IGdlbmRpc2sgKmRpc2s7CisKKwkvKiBwYXJlbnQgY29udHJvbGxlciAqLworCisJc3RydWN0IHN3aW1fcHJpdiAqc3dkOworfTsKKworZW51bSBtb3Rvcl9hY3Rpb24geworCU9GRiwKKwlPTiwKK307CisKK2VudW0gaGVhZCB7CisJTE9XRVJfSEVBRCA9IDAsCisJVVBQRVJfSEVBRCA9IDEsCit9OworCisjZGVmaW5lIEZEX01BWF9VTklUCTIKKworc3RydWN0IHN3aW1fcHJpdiB7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOworCWludCBmbG9wcHlfY291bnQ7CisJc3RydWN0IGZsb3BweV9zdGF0ZSB1bml0W0ZEX01BWF9VTklUXTsKK307CisKK2V4dGVybiBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCQkgICBzdHJ1Y3Qgc2VjdG9yX2hlYWRlciAqaGVhZGVyKTsKK2V4dGVybiBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBpd20gX19pb21lbSAqaXdtX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZW5hYmxlKSB7CisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIDB4ZjgpOworCQlyZXR1cm47CisJfQorCisJaXdtX2Jhc2UgPSAoc3RydWN0IGl3bSBfX2lvbWVtICopYmFzZTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpd21fcmVhZChpd21fYmFzZSwgcTdMKTsKKwlpd21fcmVhZChpd21fYmFzZSwgbXRyT2ZmKTsKKwlpd21fcmVhZChpd21fYmFzZSwgcTZIKTsKKworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDU3KTsKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHgxNyk7CisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDU3KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAweGY1KTsKKwlpZiAoc3dpbV9yZWFkKGJhc2UsIHBoYXNlKSAhPSAweGY1KQorCQlnb3RvIGlzX2l3bTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAweGY2KTsKKwlpZiAoc3dpbV9yZWFkKGJhc2UsIHBoYXNlKSAhPSAweGY2KQorCQlnb3RvIGlzX2l3bTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAweGY3KTsKKwlpZiAoc3dpbV9yZWFkKGJhc2UsIHBoYXNlKSAhPSAweGY3KQorCQlnb3RvIGlzX2l3bTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDE7Citpc19pd206CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9zZWxlY3Qoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IHNlbCkKK3sKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBSRUxBWCk7CisKKwl2aWExX3NldF9oZWFkKHNlbCAmIDB4MTAwKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIHNlbCAmIENBX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9hY3Rpb24oc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGFjdGlvbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTsKKwl1ZGVsYXkoMSk7CisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCPDw0KSB8IExTVFJCKTsKKwl1ZGVsYXkoMSk7CisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCPDw0KSB8ICgofkxTVFJCKSAmIDB4MEYpKTsKKwl1ZGVsYXkoMSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KQoreworCWludCBzdGF0OworCisJc3dpbV9zZWxlY3QoYmFzZSwgYml0KTsKKworCXVkZWxheSgxMCk7CisKKwlzdGF0ID0gc3dpbV9yZWFkKGJhc2UsIGhhbmRzaGFrZSk7CisKKwlyZXR1cm4gKHN0YXQgJiBTRU5TRSkgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZHJpdmUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCSAgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCit7CisJaWYgKGxvY2F0aW9uID09IElOVEVSTkFMX0RSSVZFKSB7CisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMSBiaXQgKi8KKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgSU5URVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMCBiaXQgKi8KKwl9IGVsc2UgaWYgKGxvY2F0aW9uID09IEVYVEVSTkFMX0RSSVZFKSB7CisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMCBiaXQgKi8KKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgRVhURVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMSBiaXQgKi8KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCisJCQkgICAgICBlbnVtIG1vdG9yX2FjdGlvbiBhY3Rpb24pCit7CisJaWYgKGFjdGlvbiA9PSBPTikgeworCQlpbnQgaTsKKworCQlzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PTik7CisKKwkJZm9yIChpID0gMDsgaSA8IDIqSFo7IGkrKykgeworCQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQkJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpCisJCQkJYnJlYWs7CisJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCX0KKwl9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHsKKwkJc3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTsKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZWplY3Qoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgaTsKKworCXN3aW1fYWN0aW9uKGJhc2UsIEVKRUNUKTsKKworCWZvciAoaSA9IDA7IGkgPCAyKkhaOyBpKyspIHsKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoIXN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkKKwkJCWJyZWFrOworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwl9CisJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKQoreworCS8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi8KKworCWlmIChoZWFkID09IFVQUEVSX0hFQUQpCisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTsKKwllbHNlIGlmIChoZWFkID09IExPV0VSX0hFQUQpCisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8wKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9zdGVwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJaW50IHdhaXQ7CisKKwlzd2ltX2FjdGlvbihiYXNlLCBTVEVQKTsKKworCWZvciAod2FpdCA9IDA7IHdhaXQgPCBIWjsgd2FpdCsrKSB7CisKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoIXN3aW1fcmVhZGJpdChiYXNlLCBTVEVQKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCWludCB0cnk7CisKKwlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTsKKworCWZvciAodHJ5ID0gMDsgdHJ5IDwgMTAwOyB0cnkrKykgeworCisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKKwkJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBUUkFDS19aRVJPKSkKKwkJCWJyZWFrOworCisJCWlmIChzd2ltX3N0ZXAoYmFzZSkpCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBUUkFDS19aRVJPKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcCkKK3sKKwlpZiAoc3RlcCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGVwIDwgMCkgeworCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTsKKwkJc3RlcCA9IC1zdGVwOworCX0gZWxzZQorCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX1BPU0lUSVZFKTsKKworCWZvciAoIDsgc3RlcCA+IDA7IHN0ZXAtLSkgeworCQlpZiAoc3dpbV9zdGVwKGJhc2UpKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCAgaW50IHRyYWNrKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCWludCByZXQ7CisKKwlyZXQgPSBzd2ltX3NlZWsoYmFzZSwgdHJhY2sgLSBmcy0+dHJhY2spOworCisJaWYgKHJldCA9PSAwKQorCQlmcy0+dHJhY2sgPSB0cmFjazsKKwllbHNlIHsKKwkJc3dpbV90cmFjazAwKGJhc2UpOworCQlmcy0+dHJhY2sgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJc3dpbV9kcml2ZShiYXNlLCBmcy0+bG9jYXRpb24pOworCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwlzd2ltX2VqZWN0KGJhc2UpOworCisJZnMtPmRpc2tfaW4gPSAwOworCWZzLT5lamVjdGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRfc2VjdG9yKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLAorCQkJCSAgIGludCBzaWRlLCBpbnQgdHJhY2ssCisJCQkJICAgaW50IHNlY3RvciwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNlY3Rvcl9oZWFkZXIgaGVhZGVyOworCWludCByZXQgPSAtMTsKKwlzaG9ydCBpOworCisJc3dpbV90cmFjayhmcywgdHJhY2spOworCisJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pOworCXN3aW1faGVhZChiYXNlLCBzaWRlKTsKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBzaWRlKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzY7IGkrKykgeworCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcihiYXNlLCAmaGVhZGVyKTsKKwkJaWYgKCFyZXQgJiYgKGhlYWRlci5zZWN0b3IgPT0gc2VjdG9yKSkgeworCQkJLyogZm91bmQgKi8KKworCQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlcik7CisJCQlicmVhazsKKwkJfQorCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBNT1RPTik7CisKKwlpZiAoKGhlYWRlci5zaWRlICE9IHNpZGUpICB8fCAoaGVhZGVyLnRyYWNrICE9IHRyYWNrKSB8fAorCSAgICAgKGhlYWRlci5zZWN0b3IgIT0gc2VjdG9yKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZsb3BweV9yZWFkX3NlY3RvcnMoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsCisJCQkgICAgICAgaW50IHJlcV9zZWN0b3IsIGludCBzZWN0b3JzX25iLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwlpbnQgcmV0OworCWludCBzaWRlLCB0cmFjaywgc2VjdG9yOworCWludCBpLCB0cnk7CisKKworCXN3aW1fZHJpdmUoYmFzZSwgZnMtPmxvY2F0aW9uKTsKKwlmb3IgKGkgPSByZXFfc2VjdG9yOyBpIDwgcmVxX3NlY3RvciArIHNlY3RvcnNfbmI7IGkrKykgeworCQlpbnQgeDsKKwkJdHJhY2sgPSBpIC8gZnMtPnNlY3BlcmN5bDsKKwkJeCA9IGkgJSBmcy0+c2VjcGVyY3lsOworCQlzaWRlID0geCAvIGZzLT5zZWNwZXJ0cmFjazsKKwkJc2VjdG9yID0geCAlIGZzLT5zZWNwZXJ0cmFjayArIDE7CisKKwkJdHJ5ID0gNTsKKwkJZG8geworCQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcihmcywgc2lkZSwgdHJhY2ssIHNlY3RvciwKKwkJCQkJCWJ1ZmZlcik7CisJCQlpZiAodHJ5LS0gPT0gMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0gd2hpbGUgKHJldCAhPSA1MTIpOworCisJCWJ1ZmZlciArPSByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzOworCisJd2hpbGUgKChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHEpKSkgeworCisJCWZzID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7CisJCWlmIChyZXEtPnNlY3RvciA8IDAgfHwgcmVxLT5zZWN0b3IgPj0gZnMtPnRvdGFsX3NlY3MpIHsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmVxLT5jdXJyZW50X25yX3NlY3RvcnMgPT0gMCkgeworCQkJZW5kX3JlcXVlc3QocmVxLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghZnMtPmRpc2tfaW4pIHsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgeworCQkJaWYgKGZzLT53cml0ZV9wcm90ZWN0ZWQpIHsKKwkJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXN3aXRjaCAocnFfZGF0YV9kaXIocmVxKSkgeworCQljYXNlIFdSSVRFOgorCQkJLyogTk9UIElNUExFTUVOVEVEICovCisJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJYnJlYWs7CisJCWNhc2UgUkVBRDoKKwkJCWlmIChmbG9wcHlfcmVhZF9zZWN0b3JzKGZzLCByZXEtPnNlY3RvciwKKwkJCQkJCXJlcS0+Y3VycmVudF9ucl9zZWN0b3JzLAorCQkJCQkJcmVxLT5idWZmZXIpKSB7CisJCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXJlcS0+bnJfc2VjdG9ycyAtPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwkJCXJlcS0+c2VjdG9yICs9IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOworCQkJcmVxLT5idWZmZXIgKz0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnMgKiA1MTI7CisJCQllbmRfcmVxdWVzdChyZXEsIDEpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRvX2ZkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJcmVkb19mZF9yZXF1ZXN0KHEpOworfQorCitzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7CisJeyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAgICovCisJeyAgNzIwLCAgOSwgMSwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogMzYwS0IgU1MgMy41IiovCisJeyAxNDQwLCAgOSwgMiwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogNzIwS0IgMy41IiAgICovCisJeyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNSIgICovCit9OworCitzdGF0aWMgaW50IGdldF9mbG9wcHlfZ2VvbWV0cnkoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsIGludCB0eXBlLAorCQkJICAgICAgIHN0cnVjdCBmbG9wcHlfc3RydWN0ICoqZykKK3sKKwlpZiAodHlwZSA+PSBBUlJBWV9TSVpFKGZsb3BweV90eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodHlwZSkKKwkJKmcgPSAmZmxvcHB5X3R5cGVbdHlwZV07CisJZWxzZSBpZiAoZnMtPnR5cGUgPT0gSERfTUVESUEpIC8qIEhpZ2gtRGVuc2l0eSBtZWRpYSAqLworCQkqZyA9ICZmbG9wcHlfdHlwZVszXTsKKwllbHNlIGlmIChmcy0+aGVhZF9udW1iZXIgPT0gMikgLyogZG91YmxlLXNpZGVkICovCisJCSpnID0gJmZsb3BweV90eXBlWzJdOworCWVsc2UKKwkJKmcgPSAmZmxvcHB5X3R5cGVbMV07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfbWVkaXVtKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkgeworCQlzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqZzsKKwkJZnMtPmRpc2tfaW4gPSAxOworCQlmcy0+d3JpdGVfcHJvdGVjdGVkID0gc3dpbV9yZWFkYml0KGJhc2UsIFdSSVRFX1BST1QpOworCQlmcy0+dHlwZSA9IHN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfTUVESUEpOworCisJCWlmIChzd2ltX3RyYWNrMDAoYmFzZSkpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiU1dJTTogY2Fubm90IG1vdmUgZmxvcHB5IGhlYWQgdG8gdHJhY2sgMFxuIik7CisKKwkJc3dpbV90cmFjazAwKGJhc2UpOworCisJCWdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsICZnKTsKKwkJZnMtPnRvdGFsX3NlY3MgPSBnLT5zaXplOworCQlmcy0+c2VjcGVyY3lsID0gZy0+aGVhZCAqIGctPnNlY3Q7CisJCWZzLT5zZWNwZXJ0cmFjayA9IGctPnNlY3Q7CisJCWZzLT50cmFjayA9IDA7CisJfSBlbHNlIHsKKwkJZnMtPmRpc2tfaW4gPSAwOworCX0KK30KKworc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJaW50IGVycjsKKworCWlmIChmcy0+cmVmX2NvdW50ID09IC0xIHx8IChmcy0+cmVmX2NvdW50ICYmIG1vZGUgJiBGTU9ERV9FWENMKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChtb2RlICYgRk1PREVfRVhDTCkKKwkJZnMtPnJlZl9jb3VudCA9IC0xOworCWVsc2UKKwkJZnMtPnJlZl9jb3VudCsrOworCisJc3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgIHwgU19GQ0xLX0RJVjIpOworCXVkZWxheSgxMCk7CisJc3dpbV9kcml2ZShiYXNlLCBJTlRFUk5BTF9EUklWRSk7CisJc3dpbV9tb3RvcihiYXNlLCBPTik7CisJc3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTsKKwlpZiAoZnMtPmVqZWN0ZWQpCisJCXNldHVwX21lZGl1bShmcyk7CisJaWYgKCFmcy0+ZGlza19pbikgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtb2RlICYgRk1PREVfTkRFTEFZKQorCQlyZXR1cm4gMDsKKworCWlmIChtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSB7CisJCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOworCQlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgZnMtPndyaXRlX3Byb3RlY3RlZCkgeworCQkJZXJyID0gLUVST0ZTOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7CitvdXQ6CisJaWYgKGZzLT5yZWZfY291bnQgPCAwKQorCQlmcy0+cmVmX2NvdW50ID0gMDsKKwllbHNlIGlmIChmcy0+cmVmX2NvdW50ID4gMCkKKwkJLS1mcy0+cmVmX2NvdW50OworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gMCkKKwkJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCWlmIChmcy0+cmVmX2NvdW50IDwgMCkKKwkJZnMtPnJlZl9jb3VudCA9IDA7CisJZWxzZSBpZiAoZnMtPnJlZl9jb3VudCA+IDApCisJCS0tZnMtPnJlZl9jb3VudDsKKworCWlmIChmcy0+cmVmX2NvdW50ID09IDApCisJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwlpZiAoKGNtZCAmIDB4ODApICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBGREVKRUNUOgorCQlpZiAoZnMtPnJlZl9jb3VudCAhPSAxKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJZXJyID0gZmxvcHB5X2VqZWN0KGZzKTsKKwkJcmV0dXJuIGVycjsKKworCWNhc2UgRkRHRVRQUk06CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopIHBhcmFtLCAodm9pZCAqKSAmZmxvcHB5X3R5cGUsCisJCQkJIHNpemVvZihzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNXSU0gZmxvcHB5X2lvY3RsOiB1bmtub3duIGNtZCAlZFxuIiwKKwkJICAgICAgIGNtZCk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbG9wcHlfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmbG9wcHlfc3RydWN0ICpnOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfZmxvcHB5X2dlb21ldHJ5KGZzLCAwLCAmZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdlby0+aGVhZHMgPSBnLT5oZWFkOworCWdlby0+c2VjdG9ycyA9IGctPnNlY3Q7CisJZ2VvLT5jeWxpbmRlcnMgPSBnLT50cmFjazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9jaGVja19jaGFuZ2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZnMtPmVqZWN0ZWQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlzd2ltX2RyaXZlKGJhc2UsIGZzLT5sb2NhdGlvbik7CisKKwlpZiAoZnMtPmVqZWN0ZWQpCisJCXNldHVwX21lZGl1bShmcyk7CisKKwlpZiAoIWZzLT5kaXNrX2luKQorCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisJZWxzZQorCQlmcy0+ZWplY3RlZCA9IDA7CisKKwlyZXR1cm4gIWZzLT5kaXNrX2luOworfQorCitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0geworCS5vd25lcgkJID0gVEhJU19NT0RVTEUsCisJLm9wZW4JCSA9IGZsb3BweV9vcGVuLAorCS5yZWxlYXNlCSA9IGZsb3BweV9yZWxlYXNlLAorCS5sb2NrZWRfaW9jdGwJID0gZmxvcHB5X2lvY3RsLAorCS5nZXRnZW8JCSA9IGZsb3BweV9nZXRnZW8sCisJLm1lZGlhX2NoYW5nZWQJID0gZmxvcHB5X2NoZWNrX2NoYW5nZSwKKwkucmV2YWxpZGF0ZV9kaXNrID0gZmxvcHB5X3JldmFsaWRhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGtvYmplY3QgKmZsb3BweV9maW5kKGRldl90IGRldiwgaW50ICpwYXJ0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IGRhdGE7CisJaW50IGRyaXZlID0gKCpwYXJ0ICYgMyk7CisKKwlpZiAoZHJpdmUgPiBzd2QtPmZsb3BweV9jb3VudCkKKwkJcmV0dXJuIE5VTEw7CisKKwkqcGFydCA9IDA7CisJcmV0dXJuIGdldF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN3aW1fYWRkX2Zsb3BweShzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QsCisJCQkJICAgICBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gJnN3ZC0+dW5pdFtzd2QtPmZsb3BweV9jb3VudF07CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC0+YmFzZTsKKworCWZzLT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisJc3dpbV9kcml2ZShiYXNlLCBsb2NhdGlvbik7CisKKwlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFNJTkdMRV9TSURFRCkpCisJCWZzLT5oZWFkX251bWJlciA9IDE7CisJZWxzZQorCQlmcy0+aGVhZF9udW1iZXIgPSAyOworCWZzLT5yZWZfY291bnQgPSAwOworCWZzLT5lamVjdGVkID0gMTsKKworCXN3ZC0+ZmxvcHB5X2NvdW50Kys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpCit7CisJaW50IGVycjsKKwlpbnQgZHJpdmU7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC0+YmFzZTsKKworCS8qIHNjYW4gZmxvcHB5IGRyaXZlcyAqLworCisJc3dpbV9kcml2ZShiYXNlLCBJTlRFUk5BTF9EUklWRSk7CisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSkKKwkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgSU5URVJOQUxfRFJJVkUpOworCXN3aW1fZHJpdmUoYmFzZSwgRVhURVJOQUxfRFJJVkUpOworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkpCisJCXN3aW1fYWRkX2Zsb3BweShzd2QsIEVYVEVSTkFMX0RSSVZFKTsKKworCS8qIHJlZ2lzdGVyIGZsb3BweSBkcml2ZXMgKi8KKworCWVyciA9IHJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBTV0lNIGZsb3BweVxuIiwKKwkJICAgICAgIEZMT1BQWV9NQUpPUik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZm9yIChkcml2ZSA9IDA7IGRyaXZlIDwgc3dkLT5mbG9wcHlfY291bnQ7IGRyaXZlKyspIHsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrID0gYWxsb2NfZGlzaygxKTsKKwkJaWYgKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBleGl0X3B1dF9kaXNrczsKKwkJfQorCQlzd2QtPnVuaXRbZHJpdmVdLnN3ZCA9IHN3ZDsKKwl9CisKKwlzd2QtPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoZG9fZmRfcmVxdWVzdCwgJnN3ZC0+bG9jayk7CisJaWYgKCFzd2QtPnF1ZXVlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9wdXRfZGlza3M7CisJfQorCisJZm9yIChkcml2ZSA9IDA7IGRyaXZlIDwgc3dkLT5mbG9wcHlfY291bnQ7IGRyaXZlKyspIHsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5tYWpvciA9IEZMT1BQWV9NQUpPUjsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5maXJzdF9taW5vciA9IGRyaXZlOworCQlzcHJpbnRmKHN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+ZGlza19uYW1lLCAiZmQlZCIsIGRyaXZlKTsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5mb3BzID0gJmZsb3BweV9mb3BzOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPnByaXZhdGVfZGF0YSA9ICZzd2QtPnVuaXRbZHJpdmVdOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPnF1ZXVlID0gc3dkLT5xdWV1ZTsKKwkJc2V0X2NhcGFjaXR5KHN3ZC0+dW5pdFtkcml2ZV0uZGlzaywgMjg4MCk7CisJCWFkZF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJfQorCisJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihGTE9QUFlfTUFKT1IsIDApLCAyNTYsIFRISVNfTU9EVUxFLAorCQkJICAgIGZsb3BweV9maW5kLCBOVUxMLCBzd2QpOworCisJcmV0dXJuIDA7CisKK2V4aXRfcHV0X2Rpc2tzOgorCXVucmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisJd2hpbGUgKGRyaXZlLS0pCisJCXB1dF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHN3aW0gX19pb21lbSAqc3dpbV9iYXNlOworCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZDsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBDQVJETkFNRSkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2ltX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFzd2ltX2Jhc2UpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0X3JlbGVhc2VfaW87CisJfQorCisJLyogcHJvYmUgZGV2aWNlICovCisKKwlzZXRfc3dpbV9tb2RlKHN3aW1fYmFzZSwgMSk7CisJaWYgKCFnZXRfc3dpbV9tb2RlKHN3aW1fYmFzZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1dJTSBkZXZpY2Ugbm90IGZvdW5kICFcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKworCS8qIHNldCBwbGF0Zm9ybSBkcml2ZXIgZGF0YSAqLworCisJc3dkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN3aW1fcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghc3dkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgc3dkKTsKKworCXN3ZC0+YmFzZSA9IHN3aW1fYmFzZTsKKworCXJldCA9IHN3aW1fZmxvcHB5X2luaXQoc3dkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9rZnJlZTsKKworCXJldHVybiAwOworCitvdXRfa2ZyZWU6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShzd2QpOworb3V0X2lvdW5tYXA6CisJaW91bm1hcChzd2ltX2Jhc2UpOworb3V0X3JlbGVhc2VfaW86CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3dpbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IGRyaXZlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJYmxrX3VucmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1Nik7CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlkZWxfZ2VuZGlzayhzd2QtPnVuaXRbZHJpdmVdLmRpc2spOworCQlwdXRfZGlzayhzd2QtPnVuaXRbZHJpdmVdLmRpc2spOworCX0KKworCXVucmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisKKwlibGtfY2xlYW51cF9xdWV1ZShzd2QtPnF1ZXVlKTsKKworCS8qIGVqZWN0IGZsb3BwaWVzICovCisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykKKwkJZmxvcHB5X2VqZWN0KCZzd2QtPnVuaXRbZHJpdmVdKTsKKworCWlvdW5tYXAoc3dkLT5iYXNlKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoZGV2LCBJT1JFU09VUkNFX01FTSwgInN3aW0tcmVncyIpOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShzd2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN3aW1fZHJpdmVyID0geworCS5wcm9iZSAgPSBzd2ltX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzd2ltX3JlbW92ZSksCisJLmRyaXZlciAgID0geworCQkubmFtZQk9IENBUkROQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3dpbV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1dJTSBmbG9wcHkgZHJpdmVyICVzXG4iLCBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzd2ltX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzd2ltX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc3dpbV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnN3aW1fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHN3aW1fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTV0lNIGZsb3BweSBjb250cm9sbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFZpdmllciA8bGF1cmVudEBsdml2aWVyLmluZm8+Iik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoRkxPUFBZX01BSk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uUyBiL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY2ODIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIKKyAqCisgKiBuZWVkcyBhc3NlbWJseSBsYW5ndWFnZSBiZWNhdXNlIGlzIHZlcnkgdGltaW5nIGRlcGVuZGVudAorICogdGhpcyBjb250cm9sbGVyIGV4aXN0cyBvbmx5IG9uIG1hY2ludG9zaCA2ODB4MCBiYXNlZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyIDxMYXVyZW50QGx2aXZpZXIuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxCisgKiBiYXNlZCBvbiBuZXRCU0QgSVdNIGRyaXZlciAoYykgMTk5NywgMTk5OCBIYXVrZSBGYXRoLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogMjAwNC0wOC0yMSAobHYpIC0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICogMjAwOC0xMS0wNSAobHYpIC0gYWRkIGdldF9zd2ltX21vZGUKKyAqLworCisJLmVxdQl3cml0ZV9kYXRhLAkweDAwMDAKKwkuZXF1CXdyaXRlX21hcmssCTB4MDIwMAorCS5lcXUJd3JpdGVfQ1JDLAkweDA0MDAKKwkuZXF1CXdyaXRlX3BhcmFtZXRlciwweDA2MDAKKwkuZXF1CXdyaXRlX3BoYXNlLAkweDA4MDAKKwkuZXF1CXdyaXRlX3NldHVwLAkweDBhMDAKKwkuZXF1CXdyaXRlX21vZGUwLAkweDBjMDAKKwkuZXF1CXdyaXRlX21vZGUxLAkweDBlMDAKKwkuZXF1CXJlYWRfZGF0YSwJMHgxMDAwCisJLmVxdQlyZWFkX21hcmssCTB4MTIwMAorCS5lcXUJcmVhZF9lcnJvciwJMHgxNDAwCisJLmVxdQlyZWFkX3BhcmFtZXRlciwJMHgxNjAwCisJLmVxdQlyZWFkX3BoYXNlLAkweDE4MDAKKwkuZXF1CXJlYWRfc2V0dXAsCTB4MWEwMAorCS5lcXUJcmVhZF9zdGF0dXMsCTB4MWMwMAorCS5lcXUJcmVhZF9oYW5kc2hha2UsCTB4MWUwMAorCisJLmVxdQlvX3NpZGUsIDAKKwkuZXF1CW9fdHJhY2ssIDEKKwkuZXF1CW9fc2VjdG9yLCAyCisJLmVxdQlvX3NpemUsIDMKKwkuZXF1CW9fY3JjMCwgNAorCS5lcXUJb19jcmMxLCA1CisKKwkuZXF1CXNlZWtfdGltZSwgMzAwMDAKKwkuZXF1CW1heF9yZXRyeSwgNDAKKwkuZXF1CXNlY3Rvcl9zaXplLCA1MTIKKworCS5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIKK3N3aW1fcmVhZF9zZWN0b3JfaGVhZGVyOgorCWxpbmsJJWE2LCAjMAorCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTQsJXNwQC0KKwltb3ZlbAklYTZAKDB4MGMpLCAlYTQKKwlic3IJbWZtX3JlYWRfYWRkcm1hcmsKKwltb3ZlbWwJJXNwQCssICVkMS0lZDUvJWEwLSVhNAorCXVubGsJJWE2CisJcnRzCisKK3NlY3Rvcl9hZGRyZXNzX21hcms6CisJLmJ5dGUJMHhhMSwgMHhhMSwgMHhhMSwgMHhmZQorc2VjdG9yX2RhdGFfbWFyazoKKwkuYnl0ZQkweGExLCAweGExLCAweGExLCAweGZiCisKK21mbV9yZWFkX2FkZHJtYXJrOgorCW1vdmVsCSVhNkAoMHgwOCksICVhMworCWxlYQklYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyCisJbGVhCSVhM0AocmVhZF9tYXJrKSwgJWEzCisJbW92ZXEJIy0xLCAlZDAKKwltb3Zldwkjc2Vla190aW1lLCAlZDIKKword2FpdF9oZWFkZXJfaW5pdDoKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKKworCWxlYQlzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTAKKwltb3ZlcQkjMywgJWQxCisKK3dhaXRfYWRkcl9tYXJrX2J5dGU6CisKKwl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgd2FpdF9hZGRyX21hcmtfYnl0ZQorCWJwbAloZWFkZXJfZXhpdAorCisJbW92ZWIJJWEzQCwgJWQzCisJY21wYgklYTBAKywgJWQzCisJZGJuZQklZDEsIHdhaXRfYWRkcl9tYXJrX2J5dGUKKwlibmUJd2FpdF9oZWFkZXJfaW5pdAorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMDoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMAorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob190cmFjaykKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCithbWFyazE6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBhbWFyazEKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fc2lkZSkKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCithbWFyazI6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBhbWFyazIKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fc2VjdG9yKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMzoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMworCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zaXplKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2NyYzA6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBjcmMwCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX2NyYzApCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworY3JjMToJdHN0YgklYTJACisJZGJtaQklZDIsIGNyYzEKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fY3JjMSkKKworCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCitoZWFkZXJfZXhpdDoKKwltb3ZlcQkjMCwgJWQwCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJcnRzCitzaWduYWxfbm9ueWI6CisJbW92ZXEJIy0xLCAlZDAKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwlydHMKKworCS5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhCitzd2ltX3JlYWRfc2VjdG9yX2RhdGE6CisJbGluawklYTYsICMwCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhNSwlc3BALQorCW1vdmVsCSVhNkAoMHgwYyksICVhNAorCWJzcgltZm1fcmVhZF9kYXRhCisJbW92ZW1sCSVzcEArLCAlZDEtJWQ1LyVhMC0lYTUKKwl1bmxrCSVhNgorCXJ0cworCittZm1fcmVhZF9kYXRhOgorCW1vdmVsCSVhNkAoMHgwOCksICVhMworCWxlYQklYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyCisJbGVhCSVhM0AocmVhZF9kYXRhKSwgJWE1CisJbGVhCSVhM0AocmVhZF9tYXJrKSwgJWEzCisJbW92ZXcJI3NlZWtfdGltZSwgJWQyCisKK3dhaXRfZGF0YV9pbml0OgorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCisJbGVhCXNlY3Rvcl9kYXRhX21hcmssICVhMAorCW1vdmVxCSMzLCAlZDEKKworCS8qIHdhaXQgZGF0YSBhZGRyZXNzIG1hcmsgKi8KKword2FpdF9kYXRhX21hcmtfYnl0ZToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCB3YWl0X2RhdGFfbWFya19ieXRlCisJYnBsCWRhdGFfZXhpdAorCisJbW92ZWIJJWEzQCwgJWQzCisJY21wYgklYTBAKywgJWQzCisJZGJuZQklZDEsIHdhaXRfZGF0YV9tYXJrX2J5dGUKKwlibmUJd2FpdF9kYXRhX2luaXQKKworCS8qIHJlYWQgZGF0YSAqLworCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisKKwltb3ZlbAkjc2VjdG9yX3NpemUtMSwgJWQ0CQkvKiBzZWN0b3Igc2l6ZSAqLworcmVhZF9uZXdfZGF0YToKKwltb3ZldwkjbWF4X3JldHJ5LCAlZDIKK3JlYWRfZGF0YV9sb29wOgorCW1vdmViCSVhMkAsICVkNQorCWFuZGIJIzB4YzAsICVkNQorCWRibmUJJWQyLCByZWFkX2RhdGFfbG9vcAorCWJlcQlkYXRhX2V4aXQKKwltb3ZlYgklYTVALCAlYTRAKworCWFuZGIJIzB4NDAsICVkNQorCWRibmUJJWQ0LCByZWFkX25ld19kYXRhCisJYmVxCWV4aXRfbG9vcAorCW1vdmViCSVhNUAsICVhNEArCisJZGJyYQklZDQsIHJlYWRfbmV3X2RhdGEKK2V4aXRfbG9vcDoKKworCS8qIHJlYWQgQ1JDICovCisKKwltb3ZldwkjbWF4X3JldHJ5LCAlZDIKK2RhdGFfY3JjMDoKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCBkYXRhX2NyYzAKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDUKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCitkYXRhX2NyYzE6CisKKwl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgZGF0YV9jcmMxCisJYnBsCWRhdGFfZXhpdAorCisJbW92ZWIJJWEzQCwgJWQ1CisKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKworCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCisJLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkICovCisKKwltb3ZlbAkjc2VjdG9yX3NpemUsICVkMAorCWFkZHcJIzEsICVkNAorCXN1YmwJJWQ0LCAlZDAKKwlydHMKK2RhdGFfZXhpdDoKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwltb3ZlcQkjLTEsICVkMAorCXJ0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDEyZmI4MTYuLjY5YjdmOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogICovCiAjaWZkZWYgQ09ORklHX1VTQl9MSUJVU1VBTAogCi0jZGVmaW5lIHViX3VzYl9pZHMgIHN0b3JhZ2VfdXNiX2lkcworI2RlZmluZSB1Yl91c2JfaWRzICB1c2Jfc3RvcmFnZV91c2JfaWRzCiAjZWxzZQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdWJfdXNiX2lkc1tdID0gewpAQCAtMjE0NiwxMCArMjE0Niw5IEBACiAJCWVwID0gJmFsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2M7CiAKIAkJLyogSXMgaXQgYSBCVUxLIGVuZHBvaW50PyAqLwotCQlpZiAoKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwKSkgewogCQkJLyogQlVMSyBpbiBvciBvdXQ/ICovCi0JCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpIHsKIAkJCQlpZiAoZXBfaW4gPT0gTlVMTCkKIAkJCQkJZXBfaW4gPSBlcDsKIAkJCX0gZWxzZSB7CkBAIC0yMTY4LDkgKzIxNjcsOSBAQAogCXNjLT5zZW5kX2N0cmxfcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkZXYsIDApOwogCXNjLT5yZWN2X2N0cmxfcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShkZXYsIDApOwogCXNjLT5zZW5kX2J1bGtfcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsCi0JCWVwX291dC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVzYl9lbmRwb2ludF9udW0oZXBfb3V0KSk7CiAJc2MtPnJlY3ZfYnVsa19waXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRldiwgCi0JCWVwX2luLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9pbikpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwppbmRleCA5MThlZjcyNS4uOGY5MDUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKICNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CiAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CkBAIC04Miw2ICs4Myw3IEBACiAJZW51bSBibGtpZl9zdGF0ZSBjb25uZWN0ZWQ7CiAJaW50IHJpbmdfcmVmOwogCXN0cnVjdCBibGtpZl9mcm9udF9yaW5nIHJpbmc7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW0JMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVF07CiAJdW5zaWduZWQgaW50IGV2dGNobiwgaXJxOwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpycTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKQEAgLTIwNCwxMiArMjA2LDExIEBACiAJc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8gPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9tZm47CiAJc3RydWN0IGJsa2lmX3JlcXVlc3QgKnJpbmdfcmVxOwotCXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKIAl1bnNpZ25lZCBsb25nIGlkOwogCXVuc2lnbmVkIGludCBmc2VjdCwgbHNlY3Q7Ci0JaW50IHJlZjsKKwlpbnQgaSwgcmVmOwogCWdyYW50X3JlZl90IGdyZWZfaGVhZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCiAJaWYgKHVubGlrZWx5KGluZm8tPmNvbm5lY3RlZCAhPSBCTEtJRl9TVEFURV9DT05ORUNURUQpKQogCQlyZXR1cm4gMTsKQEAgLTIzOCwxMiArMjM5LDEzIEBACiAJaWYgKGJsa19iYXJyaWVyX3JxKHJlcSkpCiAJCXJpbmdfcmVxLT5vcGVyYXRpb24gPSBCTEtJRl9PUF9XUklURV9CQVJSSUVSOwogCi0JcmluZ19yZXEtPm5yX3NlZ21lbnRzID0gMDsKLQlycV9mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIHJlcSwgaXRlcikgewotCQlCVUdfT04ocmluZ19yZXEtPm5yX3NlZ21lbnRzID09IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCk7Ci0JCWJ1ZmZlcl9tZm4gPSBwZm5fdG9fbWZuKHBhZ2VfdG9fcGZuKGJ2ZWMtPmJ2X3BhZ2UpKTsKLQkJZnNlY3QgPSBidmVjLT5idl9vZmZzZXQgPj4gOTsKLQkJbHNlY3QgPSBmc2VjdCArIChidmVjLT5idl9sZW4gPj4gOSkgLSAxOworCXJpbmdfcmVxLT5ucl9zZWdtZW50cyA9IGJsa19ycV9tYXBfc2cocmVxLT5xLCByZXEsIGluZm8tPnNnKTsKKwlCVUdfT04ocmluZ19yZXEtPm5yX3NlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKTsKKworCWZvcl9lYWNoX3NnKGluZm8tPnNnLCBzZywgcmluZ19yZXEtPm5yX3NlZ21lbnRzLCBpKSB7CisJCWJ1ZmZlcl9tZm4gPSBwZm5fdG9fbWZuKHBhZ2VfdG9fcGZuKHNnX3BhZ2Uoc2cpKSk7CisJCWZzZWN0ID0gc2ctPm9mZnNldCA+PiA5OworCQlsc2VjdCA9IGZzZWN0ICsgKHNnLT5sZW5ndGggPj4gOSkgLSAxOwogCQkvKiBpbnN0YWxsIGEgZ3JhbnQgcmVmZXJlbmNlLiAqLwogCQlyZWYgPSBnbnR0YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKCZncmVmX2hlYWQpOwogCQlCVUdfT04ocmVmID09IC1FTk9TUEMpOwpAQCAtMjU0LDE2ICsyNTYsMTIgQEAKIAkJCQlidWZmZXJfbWZuLAogCQkJCXJxX2RhdGFfZGlyKHJlcSkgKTsKIAotCQlpbmZvLT5zaGFkb3dbaWRdLmZyYW1lW3JpbmdfcmVxLT5ucl9zZWdtZW50c10gPQotCQkJCW1mbl90b19wZm4oYnVmZmVyX21mbik7Ci0KLQkJcmluZ19yZXEtPnNlZ1tyaW5nX3JlcS0+bnJfc2VnbWVudHNdID0KKwkJaW5mby0+c2hhZG93W2lkXS5mcmFtZVtpXSA9IG1mbl90b19wZm4oYnVmZmVyX21mbik7CisJCXJpbmdfcmVxLT5zZWdbaV0gPQogCQkJCShzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50KSB7CiAJCQkJCS5ncmVmICAgICAgID0gcmVmLAogCQkJCQkuZmlyc3Rfc2VjdCA9IGZzZWN0LAogCQkJCQkubGFzdF9zZWN0ICA9IGxzZWN0IH07Ci0KLQkJcmluZ19yZXEtPm5yX3NlZ21lbnRzKys7CiAJfQogCiAJaW5mby0+cmluZy5yZXFfcHJvZF9wdnQrKzsKQEAgLTYyMiw2ICs2MjAsOCBAQAogCVNIQVJFRF9SSU5HX0lOSVQoc3JpbmcpOwogCUZST05UX1JJTkdfSU5JVCgmaW5mby0+cmluZywgc3JpbmcsIFBBR0VfU0laRSk7CiAKKwlzZ19pbml0X3RhYmxlKGluZm8tPnNnLCBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpOworCiAJZXJyID0geGVuYnVzX2dyYW50X3JpbmcoZGV2LCB2aXJ0X3RvX21mbihpbmZvLT5yaW5nLnNyaW5nKSk7CiAJaWYgKGVyciA8IDApIHsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNyaW5nKTsKQEAgLTk3Nyw2ICs5NzcsOCBAQAogCQlicmVhazsKIAogCWNhc2UgWGVuYnVzU3RhdGVDbG9zaW5nOgorCQlpZiAoaW5mby0+Z2QgPT0gTlVMTCkKKwkJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCAtRU5PREVWLCAiZ2QgaXMgTlVMTCIpOwogCQliZCA9IGJkZ2V0X2Rpc2soaW5mby0+Z2QsIDApOwogCQlpZiAoYmQgPT0gTlVMTCkKIAkJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCAtRU5PREVWLCAiYmRnZXQgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCmluZGV4IDM4MWQ2ODYuLjExOWJlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCisrKyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCkBAIC00ODksNiArNDg5LDI4IEBACiAJCWFjZS0+ZnNtX3N0YXRlLCBhY2UtPmlkX3JlcV9jb3VudCk7CiAjZW5kaWYKIAorCS8qIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGFjdHVhbGx5IGEgQ0YgaW4gdGhlIHNsb3QuIElmIG5vdCwgdGhlbgorCSAqIGJhaWwgb3V0IGJhY2sgdG8gdGhlIGlkbGUgc3RhdGUgYW5kIHdha2UgdXAgYWxsIHRoZSB3YWl0ZXJzICovCisJc3RhdHVzID0gYWNlX2luMzIoYWNlLCBBQ0VfU1RBVFVTKTsKKwlpZiAoKHN0YXR1cyAmIEFDRV9TVEFUVVNfQ0ZERVRFQ1QpID09IDApIHsKKwkJYWNlLT5mc21fc3RhdGUgPSBBQ0VfRlNNX1NUQVRFX0lETEU7CisJCWFjZS0+bWVkaWFfY2hhbmdlID0gMTsKKwkJc2V0X2NhcGFjaXR5KGFjZS0+Z2QsIDApOworCQlkZXZfaW5mbyhhY2UtPmRldiwgIk5vIENGIGluIHNsb3RcbiIpOworCisJCS8qIERyb3AgYWxsIHBlbmRpbmcgcmVxdWVzdHMgKi8KKwkJd2hpbGUgKChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KGFjZS0+cXVldWUpKSAhPSBOVUxMKQorCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKworCQkvKiBEcm9wIGJhY2sgdG8gSURMRSBzdGF0ZSBhbmQgbm90aWZ5IHdhaXRlcnMgKi8KKwkJYWNlLT5mc21fc3RhdGUgPSBBQ0VfRlNNX1NUQVRFX0lETEU7CisJCWFjZS0+aWRfcmVzdWx0ID0gLUVJTzsKKwkJd2hpbGUgKGFjZS0+aWRfcmVxX2NvdW50KSB7CisJCQljb21wbGV0ZSgmYWNlLT5pZF9jb21wbGV0aW9uKTsKKwkJCWFjZS0+aWRfcmVxX2NvdW50LS07CisJCX0KKwl9CisKIAlzd2l0Y2ggKGFjZS0+ZnNtX3N0YXRlKSB7CiAJY2FzZSBBQ0VfRlNNX1NUQVRFX0lETEU6CiAJCS8qIFNlZSBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBkbyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKaW5kZXggZDNmMTRiZS4uMmEwMDcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCkBAIC0yNTcsOCArMjU3LDcgQEAKIAogCWlmIChoZHIgJiAweDEwKSB7CiAJCUJUX0VSUigiJXMgZXJyb3IgaW4gYmxvY2siLCBkYXRhLT5oZGV2LT5uYW1lKTsKLQkJaWYgKGRhdGEtPnJlYXNzZW1ibHkpCi0JCQlrZnJlZV9za2IoZGF0YS0+cmVhc3NlbWJseSk7CisJCWtmcmVlX3NrYihkYXRhLT5yZWFzc2VtYmx5KTsKIAkJZGF0YS0+cmVhc3NlbWJseSA9IE5VTEw7CiAJCXJldHVybiAtRUlPOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwppbmRleCBmZjE5NWMyLi5kNThlMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCkBAIC0zNTksOSArMzU5LDkgQEAKIAkJCUJUX0VSUigiVmVyeSBzdHJhbmdlIChzdGF0PTB4JTA0eCkiLCBzdGF0KTsKIAkJfSBlbHNlIGlmICgoc3RhdCAmIDB4ZmYpICE9IDB4ZmYpIHsKIAkJCWlmIChzdGF0ICYgMHgwMDIwKSB7Ci0JCQkJaW50IHN0YXQgPSBidDNjX3JlYWQoaW9iYXNlLCAweDcwMDIpICYgMHgxMDsKKwkJCQlpbnQgc3RhdHVzID0gYnQzY19yZWFkKGlvYmFzZSwgMHg3MDAyKSAmIDB4MTA7CiAJCQkJQlRfSU5GTygiJXM6IEFudGVubmEgJXMiLCBpbmZvLT5oZGV2LT5uYW1lLAotCQkJCQkJCXN0YXQgPyAib3V0IiA6ICJpbiIpOworCQkJCQkJCXN0YXR1cyA/ICJvdXQiIDogImluIik7CiAJCQl9CiAJCQlpZiAoc3RhdCAmIDB4MDAwMSkKIAkJCQlidDNjX3JlY2VpdmUoaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCBiNWZiZGE2Li5lNzBjNTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KIAotI2RlZmluZSBWRVJTSU9OICIwLjQiCisjZGVmaW5lIFZFUlNJT04gIjAuNSIKIAogc3RhdGljIGludCBpZ25vcmVfZGdhOwogc3RhdGljIGludCBpZ25vcmVfY3NyOwpAQCAtMTcxLDYgKzE3MSw3IEBACiAKIAlfX3U4IGNtZHJlcV90eXBlOwogCisJdW5zaWduZWQgaW50IHNjb19udW07CiAJaW50IGlzb2NfYWx0c2V0dGluZzsKIAlpbnQgc3VzcGVuZF9jb3VudDsKIH07CkBAIC00OTYsMTEgKzQ5NywyMyBAQAogCQlyZXR1cm4gMDsKIAogCWVyciA9IGJ0dXNiX3N1Ym1pdF9pbnRyX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwllcnIgPSBidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVyciA8IDApIHsKLQkJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpOworCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pbnRyX2FuY2hvcik7CisJCWdvdG8gZmFpbGVkOwogCX0KIAorCXNldF9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOworCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKKworCXJldHVybiAwOworCitmYWlsZWQ6CisJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKKwljbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjU1LDE5ICs2NjgsMTAgQEAKIAogCUJUX0RCRygiJXMgZXZ0ICVkIiwgaGRldi0+bmFtZSwgZXZ0KTsKIAotCWlmIChoZGV2LT5jb25uX2hhc2guYWNsX251bSA+IDApIHsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKSkgewotCQkJaWYgKGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfQVRPTUlDKSA8IDApCi0JCQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJCWVsc2UKLQkJCQlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0FUT01JQyk7Ci0JCX0KLQl9IGVsc2UgewotCQljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQl1c2JfdW5saW5rX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmJ1bGtfYW5jaG9yKTsKKwlpZiAoaGRldi0+Y29ubl9oYXNoLnNjb19udW0gIT0gZGF0YS0+c2NvX251bSkgeworCQlkYXRhLT5zY29fbnVtID0gaGRldi0+Y29ubl9oYXNoLnNjb19udW07CisJCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOwogCX0KLQotCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOwogfQogCiBzdGF0aWMgaW50IGlubGluZSBfX3NldF9pc29jX2ludGVyZmFjZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IGFsdHNldHRpbmcpCkBAIC05ODIsOSArOTg2LDExIEBACiAJfQogCiAJaWYgKHRlc3RfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKSkgewotCQlpZiAoYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKSA8IDApCisJCWVyciA9IGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTyk7CisJCWlmIChlcnIgPCAwKSB7CiAJCQljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQllbHNlCisJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UKIAkJCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCmluZGV4IGIwZmFmYjAuLmMwY2U4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCkBAIC0xMDIsOCArMTAyLDcgQEAKIAogCXNrYl9xdWV1ZV9wdXJnZSgmaDQtPnR4cSk7CiAKLQlpZiAoaDQtPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGg0LT5yeF9za2IpOworCWtmcmVlX3NrYihoNC0+cnhfc2tiKTsKIAogCWh1LT5wcml2ID0gTlVMTDsKIAlrZnJlZShoNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCmluZGV4IGI5MWQ0NWEuLjVjNjUwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCkBAIC0xNjMsOCArMTYzLDcgQEAKIAlza2JfcXVldWVfcHVyZ2UoJmxsLT50eF93YWl0X3EpOwogCXNrYl9xdWV1ZV9wdXJnZSgmbGwtPnR4cSk7CiAKLQlpZiAobGwtPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGxsLT5yeF9za2IpOworCWtmcmVlX3NrYihsbC0+cnhfc2tiKTsKIAogCWh1LT5wcml2ID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKaW5kZXggNTJmNDM2MS4uZDc2NWFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCkBAIC0yNzEsMTUgKzI3MSwxNSBAQAogCW5iX29yZGVyID0gKG5iX29yZGVyID4+IDEpICYgNzsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQobmIsIEFNRDY0X0dBUlRBUEVSVFVSRUJBU0UsICZuYl9iYXNlKTsKIAluYl9hcGVyID0gbmJfYmFzZSA8PCAyNTsKLQlpZiAoYWdwX2FwZXJ0dXJlX3ZhbGlkKG5iX2FwZXIsICgzMioxMDI0KjEwMjQpPDxuYl9vcmRlcikpIHsKLQkJcmV0dXJuIDA7Ci0JfQogCiAJLyogTm9ydGhicmlkZ2Ugc2VlbXMgdG8gY29udGFpbiBjcmFwLiBUcnkgdGhlIEFHUCBicmlkZ2UuICovCiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChhZ3AsIGNhcCsweDE0LCAmYXBzaXplKTsKLQlpZiAoYXBzaXplID09IDB4ZmZmZikKKwlpZiAoYXBzaXplID09IDB4ZmZmZikgeworCQlpZiAoYWdwX2FwZXJ0dXJlX3ZhbGlkKG5iX2FwZXIsICgzMioxMDI0KjEwMjQpPDxuYl9vcmRlcikpCisJCQlyZXR1cm4gMDsKIAkJcmV0dXJuIC0xOworCX0KIAogCWFwc2l6ZSAmPSAweGZmZjsKIAkvKiBTb21lIEJJT1MgdXNlIHdlaXJkIGVuY29kaW5ncyBub3QgaW4gdGhlIEFHUHYzIHRhYmxlLiAqLwpAQCAtMzAxLDYgKzMwMSwxMSBAQAogCQlvcmRlciA9IG5iX29yZGVyOwogCX0KIAorCWlmIChuYl9vcmRlciA+PSBvcmRlcikgeworCQlpZiAoYWdwX2FwZXJ0dXJlX3ZhbGlkKG5iX2FwZXIsICgzMioxMDI0KjEwMjQpPDxuYl9vcmRlcikpCisJCQlyZXR1cm4gMDsKKwl9CisKIAlkZXZfaW5mbygmYWdwLT5kZXYsICJhcGVydHVyZSBmcm9tIEFHUCBAICVMeCBzaXplICV1IE1CXG4iLAogCQkgYXBlciwgMzIgPDwgb3JkZXIpOwogCWlmIChvcmRlciA8IDAgfHwgIWFncF9hcGVydHVyZV92YWxpZChhcGVyLCAoMzIqMTAyNCoxMDI0KTw8b3JkZXIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggYzc3MTQxOC4uNDM3M2FkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC02MzMsMTMgKzYzMywxNSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKGd0dF9lbnRyaWVzID4gMCkKKwlpZiAoZ3R0X2VudHJpZXMgPiAwKSB7CiAJCWRldl9pbmZvKCZhZ3BfYnJpZGdlLT5kZXYtPmRldiwgImRldGVjdGVkICVkSyAlcyBtZW1vcnlcbiIsCiAJCSAgICAgICBndHRfZW50cmllcyAvIEtCKDEpLCBsb2NhbCA/ICJsb2NhbCIgOiAic3RvbGVuIik7Ci0JZWxzZQorCQlndHRfZW50cmllcyAvPSBLQig0KTsKKwl9IGVsc2UgewogCQlkZXZfaW5mbygmYWdwX2JyaWRnZS0+ZGV2LT5kZXYsCiAJCSAgICAgICAibm8gcHJlLWFsbG9jYXRlZCB2aWRlbyBtZW1vcnkgZGV0ZWN0ZWRcbiIpOwotCWd0dF9lbnRyaWVzIC89IEtCKDQpOworCQlndHRfZW50cmllcyA9IDA7CisJfQogCiAJaW50ZWxfcHJpdmF0ZS5ndHRfZW50cmllcyA9IGd0dF9lbnRyaWVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYwppbmRleCBkYjYwNTM5Li42OTllMzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYwpAQCAtMzU5LDkgKzM1OSwxNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKSB7Ci0Jc3RydWN0IGtsaXN0X25vZGUgKiBuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9wYXJlbnQpIDogTlVMTDsKK3N0YXRpYyBpbnQKK2ZpbmRfcXVpY2tzaWx2ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwYXJpc2NfZGV2aWNlICoqbGJhID0gZGF0YTsKKwlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqcGFkZXYgPSB0b19wYXJpc2NfZGV2aWNlKGRldik7CisKKwlpZiAoSVNfUVVJQ0tTSUxWRVIocGFkZXYpKQorCQkqbGJhID0gcGFkZXY7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMzcyLDggKzM3OSw2IEBACiAJaW50IGVyciA9IC0xOwogCXN0cnVjdCBwYXJpc2NfZGV2aWNlICpzYmEgPSBOVUxMLCAqbGJhID0gTlVMTDsKIAlzdHJ1Y3QgbGJhX2RldmljZSAqbGJhZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOwotCXN0cnVjdCBrbGlzdF9pdGVyIGk7CiAKIAlpZiAoIXNiYV9saXN0KQogCQlnb3RvIG91dDsKQEAgLTM4NiwxMyArMzkxLDcgQEAKIAl9CiAKIAkvKiBOb3cgc2VhcmNoIG91ciBQbHV0byBmb3Igb3VyIHByZWNpb3VzIEFHUCBkZXZpY2UuLi4gKi8KLQlrbGlzdF9pdGVyX2luaXQoJnNiYS0+ZGV2LmtsaXN0X2NoaWxkcmVuLCAmaSk7Ci0Jd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpKSB7Ci0JCXN0cnVjdCBwYXJpc2NfZGV2aWNlICpwYWRldiA9IHRvX3BhcmlzY19kZXZpY2UoZGV2KTsKLQkJaWYgKElTX1FVSUNLU0lMVkVSKHBhZGV2KSkKLQkJCWxiYSA9IHBhZGV2OwotCX0KLQlrbGlzdF9pdGVyX2V4aXQoJmkpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmc2JhLT5kZXYsICZsYmEsIGZpbmRfcXVpY2tzaWx2ZXIpOwogCiAJaWYgKCFsYmEpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZQRlggIk5vIEFHUCBkZXZpY2VzIGZvdW5kLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCmluZGV4IGE1MzQ5NjguLjU0NDgxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCkBAIC0xMywxMCArMTMsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPG5ldC9pdWN2L2l1Y3YuaD4KQEAgLTk1LDYgKzk2LDEyIEBACiAvKiBBcnJheSBvZiBhbGxvY2F0ZWQgaHZjIGl1Y3YgdHR5IGxpbmVzLi4uICovCiBzdGF0aWMgc3RydWN0IGh2Y19pdWN2X3ByaXZhdGUgKmh2Y19pdWN2X3RhYmxlW01BWF9IVkNfSVVDVl9MSU5FU107CiAjZGVmaW5lIElVQ1ZfSFZDX0NPTl9JRFgJKDApCisvKiBMaXN0IG9mIHovVk0gdXNlciBJRCBmaWx0ZXIgZW50cmllcyAoc3RydWN0IGl1Y3Zfdm1pZF9maWx0ZXIpICovCisjZGVmaW5lIE1BWF9WTUlEX0ZJTFRFUgkJKDUwMCkKK3N0YXRpYyBzaXplX3QgaHZjX2l1Y3ZfZmlsdGVyX3NpemU7CitzdGF0aWMgdm9pZCAqaHZjX2l1Y3ZfZmlsdGVyOworc3RhdGljIGNvbnN0IGNoYXIgKmh2Y19pdWN2X2ZpbHRlcl9zdHJpbmc7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhodmNfaXVjdl9maWx0ZXJfbG9jayk7CiAKIC8qIEttZW0gY2FjaGUgYW5kIG1lbXBvb2wgZm9yIGl1Y3ZfdHR5X2J1ZmZlciBlbGVtZW50cyAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpodmNfaXVjdl9idWZmZXJfY2FjaGU7CkBAIC02MTgsNiArNjI1LDI3IEBACiB9CiAKIC8qKgorICogaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEoKSAtIEZpbHRlciBjb25uZWN0aW9uIHJlcXVlc3QgYmFzZWQgb24gei9WTSB1c2VyIElECisgKiBAaXB2bWlkOglPcmlnaW5hdGluZyB6L1ZNIHVzZXIgSUQgKHJpZ2h0IHBhZGRlZCB3aXRoIGJsYW5rcykKKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHovVk0gdXNlciBJRCBAaXB2bWlkIGlzIGFsbG93ZWQgdG8gY29ubmVjdGlvbiwgb3RoZXJ3aXNlCisgKiBub24temVyby4KKyAqLworc3RhdGljIGludCBodmNfaXVjdl9maWx0ZXJfY29ubnJlcSh1OCBpcHZtaWRbOF0pCit7CisJc2l6ZV90IGk7CisKKwkvKiBOb3RlOiBkZWZhdWx0IHBvbGljeSBpcyBBQ0NFUFQgaWYgbm8gZmlsdGVyIGlzIHNldCAqLworCWlmICghaHZjX2l1Y3ZfZmlsdGVyX3NpemUpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGh2Y19pdWN2X2ZpbHRlcl9zaXplOyBpKyspCisJCWlmICgwID09IG1lbWNtcChpcHZtaWQsIGh2Y19pdWN2X2ZpbHRlciArICg4ICogaSksIDgpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgogICogaHZjX2l1Y3ZfcGF0aF9wZW5kaW5nKCkgLSBJVUNWIGhhbmRsZXIgdG8gcHJvY2VzcyBhIGNvbm5lY3Rpb24gcmVxdWVzdC4KICAqIEBwYXRoOglQZW5kaW5nIHBhdGggKHN0cnVjdCBpdWN2X3BhdGgpCiAgKiBAaXB2bWlkOgl6L1ZNIHN5c3RlbSBpZGVudGlmaWVyIG9mIG9yaWdpbmF0b3IKQEAgLTY0MSw2ICs2NjksNyBAQAogewogCXN0cnVjdCBodmNfaXVjdl9wcml2YXRlICpwcml2OwogCXU4IG51c2VyX2RhdGFbMTZdOworCXU4IHZtX3VzZXJfaWRbOV07CiAJaW50IGksIHJjOwogCiAJcHJpdiA9IE5VTEw7CkBAIC02NTMsNiArNjgyLDIwIEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCS8qIEVuZm9yY2UgdGhhdCBpcHZtaWQgaXMgYWxsb3dlZCB0byBjb25uZWN0IHRvIHVzICovCisJcmVhZF9sb2NrKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJcmMgPSBodmNfaXVjdl9maWx0ZXJfY29ubnJlcShpcHZtaWQpOworCXJlYWRfdW5sb2NrKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJaWYgKHJjKSB7CisJCWl1Y3ZfcGF0aF9zZXZlcihwYXRoLCBpcHVzZXIpOworCQlpdWN2X3BhdGhfZnJlZShwYXRoKTsKKwkJbWVtY3B5KHZtX3VzZXJfaWQsIGlwdm1pZCwgOCk7CisJCXZtX3VzZXJfaWRbOF0gPSAwOworCQlwcl9pbmZvKCJBIGNvbm5lY3Rpb24gcmVxdWVzdCBmcm9tIHovVk0gdXNlciBJRCAlcyAiCisJCQkid2FzIHJlZnVzZWRcbiIsIHZtX3VzZXJfaWQpOworCQlyZXR1cm4gMDsKKwl9CisKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCiAJLyogSWYgdGhlIHRlcm1pbmFsIGlzIGFscmVhZHkgY29ubmVjdGVkIG9yIGJlaW5nIHNldmVyZWQsIHRoZW4gc2V2ZXIKQEAgLTg3Nyw2ICs5MjAsMTcxIEBACiB9CiAKIC8qKgorICogaHZjX2l1Y3ZfcGFyc2VfZmlsdGVyKCkgLSBQYXJzZSBmaWx0ZXIgZm9yIGEgc2luZ2xlIHovVk0gdXNlciBJRAorICogQGZpbHRlcjoJU3RyaW5nIGNvbnRhaW5pbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9wYXJzZV9maWx0ZXIoY29uc3QgY2hhciAqZmlsdGVyLCBjaGFyICpkZXN0KQoreworCWNvbnN0IGNoYXIgKm5leHRkZWxpbSwgKnJlc2lkdWFsOworCXNpemVfdCBsZW47CisKKwluZXh0ZGVsaW0gPSBzdHJjaHIoZmlsdGVyLCAnLCcpOworCWlmIChuZXh0ZGVsaW0pIHsKKwkJbGVuID0gbmV4dGRlbGltIC0gZmlsdGVyOworCQlyZXNpZHVhbCA9IG5leHRkZWxpbSArIDE7CisJfSBlbHNlIHsKKwkJbGVuID0gc3RybGVuKGZpbHRlcik7CisJCXJlc2lkdWFsID0gZmlsdGVyICsgbGVuOworCX0KKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBjaGVjayBmb3IgJ1xuJyAoaWYgY2FsbGVkIGZyb20gc3lzZnMpICovCisJaWYgKGZpbHRlcltsZW4gLSAxXSA9PSAnXG4nKQorCQlsZW4tLTsKKworCWlmIChsZW4gPiA4KQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIHBhZCB3aXRoIGJsYW5rcyBhbmQgc2F2ZSB1cHBlciBjYXNlIHZlcnNpb24gb2YgdXNlciBJRCAqLworCW1lbXNldChkZXN0LCAnICcsIDgpOworCXdoaWxlIChsZW4tLSkKKwkJZGVzdFtsZW5dID0gdG91cHBlcihmaWx0ZXJbbGVuXSk7CisJcmV0dXJuIHJlc2lkdWFsOworfQorCisvKioKKyAqIGh2Y19pdWN2X3NldHVwX2ZpbHRlcigpIC0gU2V0IHVwIHovVk0gdXNlciBJRCBmaWx0ZXIKKyAqIEBmaWx0ZXI6CVN0cmluZyBjb25zaXN0aW5nIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICoKKyAqIFRoZSBmdW5jdGlvbiBwYXJzZXMgdGhlIEBmaWx0ZXIgc3RyaW5nIGFuZCBjcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAqIHRoZSBsaXN0IG9mIHovVk0gdXNlciBJRCBmaWx0ZXIgZW50cmllcy4KKyAqIFJldHVybiBjb2RlIDAgbWVhbnMgc3VjY2VzcywgLUVJTlZBTCBpZiB0aGUgZmlsdGVyIGlzIHN5bnRhY3RpY2FsbHkKKyAqIGluY29ycmVjdCwgLUVOT01FTSBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCisgKiBmaWx0ZXIgbGlzdCBhcnJheSwgb3IgLUVOT1NQQyBpZiB0b28gbWFueSB6L1ZNIHVzZXIgSURzIGhhdmUgYmVlbiBzcGVjaWZpZWQuCisgKi8KK3N0YXRpYyBpbnQgaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCkKK3sKKwljb25zdCBjaGFyICpyZXNpZHVhbDsKKwlpbnQgZXJyOworCXNpemVfdCBzaXplLCBjb3VudDsKKwl2b2lkICphcnJheSwgKm9sZF9maWx0ZXI7CisKKwljb3VudCA9IHN0cmxlbih2YWwpOworCWlmIChjb3VudCA9PSAwIHx8IChjb3VudCA9PSAxICYmIHZhbFswXSA9PSAnXG4nKSkgeworCQlzaXplICA9IDA7CisJCWFycmF5ID0gTlVMTDsKKwkJZ290byBvdXRfcmVwbGFjZV9maWx0ZXI7CS8qIGNsZWFyIGZpbHRlciAqLworCX0KKworCS8qIGNvdW50IHVzZXIgSURzIGluIG9yZGVyIHRvIGFsbG9jYXRlIHN1ZmZpY2llbnQgbWVtb3J5ICovCisJc2l6ZSA9IDE7CisJcmVzaWR1YWwgPSB2YWw7CisJd2hpbGUgKChyZXNpZHVhbCA9IHN0cmNocihyZXNpZHVhbCwgJywnKSkgIT0gTlVMTCkgeworCQlyZXNpZHVhbCsrOworCQlzaXplKys7CisJfQorCisJLyogY2hlY2sgaWYgdGhlIHNwZWNpZmllZCBsaXN0IGV4Y2VlZHMgdGhlIGZpbHRlciBsaW1pdCAqLworCWlmIChzaXplID4gTUFYX1ZNSURfRklMVEVSKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWFycmF5ID0ga3phbGxvYyhzaXplICogOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcnJheSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb3VudCA9IHNpemU7CisJcmVzaWR1YWwgPSB2YWw7CisJd2hpbGUgKCpyZXNpZHVhbCAmJiBjb3VudCkgeworCQlyZXNpZHVhbCA9IGh2Y19pdWN2X3BhcnNlX2ZpbHRlcihyZXNpZHVhbCwKKwkJCQkJCSBhcnJheSArICgoc2l6ZSAtIGNvdW50KSAqIDgpKTsKKwkJaWYgKElTX0VSUihyZXNpZHVhbCkpIHsKKwkJCWVyciA9IFBUUl9FUlIocmVzaWR1YWwpOworCQkJa2ZyZWUoYXJyYXkpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCWNvdW50LS07CisJfQorCitvdXRfcmVwbGFjZV9maWx0ZXI6CisJd3JpdGVfbG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCW9sZF9maWx0ZXIgPSBodmNfaXVjdl9maWx0ZXI7CisJaHZjX2l1Y3ZfZmlsdGVyX3NpemUgPSBzaXplOworCWh2Y19pdWN2X2ZpbHRlciA9IGFycmF5OworCXdyaXRlX3VubG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWtmcmVlKG9sZF9maWx0ZXIpOworCisJZXJyID0gMDsKK291dF9lcnI6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBwYXJhbV9zZXRfdm1pZGZpbHRlcigpIC0gU2V0IHovVk0gdXNlciBJRCBmaWx0ZXIgcGFyYW1ldGVyCisgKiBAdmFsOglTdHJpbmcgY29uc2lzdGluZyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqIEBrcDoJCUtlcm5lbCBwYXJhbWV0ZXIgcG9pbnRpbmcgdG8gaHZjX2l1Y3ZfZmlsdGVyIGFycmF5CisgKgorICogVGhlIGZ1bmN0aW9uIHNldHMgdXAgdGhlIHovVk0gdXNlciBJRCBmaWx0ZXIgc3BlY2lmaWVkIGFzIGNvbW1hLXNlcGFyYXRlZAorICogbGlzdCBvZiB1c2VyIElEcyBpbiBAdmFsLgorICogTm90ZTogSWYgaXQgaXMgY2FsbGVkIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MsIEB2YWwgaXMgc3RvcmVkIGFuZAorICoJIHBhcnNlZCBsYXRlciBpbiBodmNfaXVjdl9pbml0KCkuCisgKi8KK3N0YXRpYyBpbnQgcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIU1BQ0hJTkVfSVNfVk0gfHwgIWh2Y19pdWN2X2RldmljZXMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCF2YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmMgPSAwOworCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKQorCQlyYyA9IGh2Y19pdWN2X3NldHVwX2ZpbHRlcih2YWwpOworCWVsc2UKKwkJaHZjX2l1Y3ZfZmlsdGVyX3N0cmluZyA9IHZhbDsJLyogZGVmZXIuLi4gKi8KKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogcGFyYW1fZ2V0X3ZtaWRmaWx0ZXIoKSAtIEdldCB6L1ZNIHVzZXIgSUQgZmlsdGVyCisgKiBAYnVmZmVyOglCdWZmZXIgdG8gc3RvcmUgei9WTSB1c2VyIElEIGZpbHRlciwKKyAqCQkoYnVmZmVyIHNpemUgYXNzdW1wdGlvbiBQQUdFX1NJWkUpCisgKiBAa3A6CQlLZXJuZWwgcGFyYW1ldGVyIHBvaW50aW5nIHRvIHRoZSBodmNfaXVjdl9maWx0ZXIgYXJyYXkKKyAqCisgKiBUaGUgZnVuY3Rpb24gc3RvcmVzIHRoZSBmaWx0ZXIgYXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKiBpbiBAYnVmZmVyLiBUeXBpY2FsbHksIHN5c2ZzIHJvdXRpbmVzIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYXR0ciBzaG93LgorICovCitzdGF0aWMgaW50IHBhcmFtX2dldF92bWlkZmlsdGVyKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJjOworCXNpemVfdCBpbmRleCwgbGVuOworCXZvaWQgKnN0YXJ0LCAqZW5kOworCisJaWYgKCFNQUNISU5FX0lTX1ZNIHx8ICFodmNfaXVjdl9kZXZpY2VzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJjID0gMDsKKwlyZWFkX2xvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsgaW5kZXgrKykgeworCQlzdGFydCA9IGh2Y19pdWN2X2ZpbHRlciArICg4ICogaW5kZXgpOworCQllbmQgICA9IG1lbWNocihzdGFydCwgJyAnLCA4KTsKKwkJbGVuICAgPSAoZW5kKSA/IGVuZCAtIHN0YXJ0IDogODsKKwkJbWVtY3B5KGJ1ZmZlciArIHJjLCBzdGFydCwgbGVuKTsKKwkJcmMgKz0gbGVuOworCQlidWZmZXJbcmMrK10gPSAnLCc7CisJfQorCXJlYWRfdW5sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJaWYgKHJjKQorCQlidWZmZXJbLS1yY10gPSAnXDAnOwkvKiByZXBsYWNlIGxhc3QgY29tbWEgYW5kIHVwZGF0ZSByYyAqLworCXJldHVybiByYzsKK30KKworI2RlZmluZSBwYXJhbV9jaGVja192bWlkZmlsdGVyKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdm9pZCkKKworLyoqCiAgKiBodmNfaXVjdl9pbml0KCkgLSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24KICAqLwogc3RhdGljIGludCBfX2luaXQgaHZjX2l1Y3ZfaW5pdCh2b2lkKQpAQCAtODg0LDI0ICsxMDkyLDUzIEBACiAJaW50IHJjOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKCFNQUNISU5FX0lTX1ZNKSB7Ci0JCXByX2luZm8oIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90ICIKLQkJCSAgICJiZSB1c2VkIHdpdGhvdXQgei9WTVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCWlmICghaHZjX2l1Y3ZfZGV2aWNlcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoaHZjX2l1Y3ZfZGV2aWNlcyA+IE1BWF9IVkNfSVVDVl9MSU5FUykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFNQUNISU5FX0lTX1ZNKSB7CisJCXByX25vdGljZSgiVGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBjYW5ub3QgIgorCQkJICAgImJlIHVzZWQgd2l0aG91dCB6L1ZNXG4iKTsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwlpZiAoaHZjX2l1Y3ZfZGV2aWNlcyA+IE1BWF9IVkNfSVVDVl9MSU5FUykgeworCQlwcl9lcnIoIiVsdSBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhlIGh2Y19pdWN2PSAiCisJCQkia2VybmVsIHBhcmFtZXRlclxuIiwgaHZjX2l1Y3ZfZGV2aWNlcyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJLyogcGFyc2UgaHZjX2l1Y3ZfYWxsb3cgc3RyaW5nIGFuZCBjcmVhdGUgei9WTSB1c2VyIElEIGZpbHRlciBsaXN0ICovCisJaWYgKGh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcpIHsKKwkJcmMgPSBodmNfaXVjdl9zZXR1cF9maWx0ZXIoaHZjX2l1Y3ZfZmlsdGVyX3N0cmluZyk7CisJCXN3aXRjaCAocmMpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgLUVOT01FTToKKwkJCXByX2VycigiQWxsb2NhdGluZyBtZW1vcnkgZmFpbGVkIHdpdGggIgorCQkJCSJyZWFzb24gY29kZT0lZFxuIiwgMyk7CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJY2FzZSAtRUlOVkFMOgorCQkJcHJfZXJyKCJodmNfaXVjdl9hbGxvdz0gZG9lcyBub3Qgc3BlY2lmeSBhIHZhbGlkICIKKwkJCQkiei9WTSB1c2VyIElEIGxpc3RcbiIpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWNhc2UgLUVOT1NQQzoKKwkJCXByX2VycigiaHZjX2l1Y3ZfYWxsb3c9IHNwZWNpZmllcyB0b28gbWFueSAiCisJCQkJInovVk0gdXNlciBJRHNcbiIpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJfQorCX0KIAogCWh2Y19pdWN2X2J1ZmZlcl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKEtNU0dfQ09NUE9ORU5ULAogCQkJCQkgICBzaXplb2Yoc3RydWN0IGl1Y3ZfdHR5X2J1ZmZlciksCiAJCQkJCSAgIDAsIDAsIE5VTEwpOwogCWlmICghaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlKSB7CiAJCXByX2VycigiQWxsb2NhdGluZyBtZW1vcnkgZmFpbGVkIHdpdGggcmVhc29uIGNvZGU9JWRcbiIsIDEpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKIAl9CiAKIAlodmNfaXVjdl9tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKE1FTVBPT0xfTUlOX05SLApAQCAtOTA5LDcgKzExNDYsOCBAQAogCWlmICghaHZjX2l1Y3ZfbWVtcG9vbCkgewogCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoIHJlYXNvbiBjb2RlPSVkXG4iLCAyKTsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGh2Y19pdWN2X2J1ZmZlcl9jYWNoZSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2Vycm9yOwogCX0KIAogCS8qIHJlZ2lzdGVyIHRoZSBmaXJzdCB0ZXJtaW5hbCBkZXZpY2UgYXMgY29uc29sZQpAQCAtOTUzLDYgKzExOTEsOCBAQAogb3V0X2Vycm9yX21lbW9yeToKIAltZW1wb29sX2Rlc3Ryb3koaHZjX2l1Y3ZfbWVtcG9vbCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGh2Y19pdWN2X2J1ZmZlcl9jYWNoZSk7CitvdXRfZXJyb3I6CisJaHZjX2l1Y3ZfZGV2aWNlcyA9IDA7IC8qIGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGFueSBkZXZpY2UgKi8KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTk2OCwzICsxMjA4LDQgQEAKIAogZGV2aWNlX2luaXRjYWxsKGh2Y19pdWN2X2luaXQpOwogX19zZXR1cCgiaHZjX2l1Y3Y9IiwgaHZjX2l1Y3ZfY29uZmlnKTsKK2NvcmVfcGFyYW0oaHZjX2l1Y3ZfYWxsb3csIGh2Y19pdWN2X2ZpbHRlciwgdm1pZGZpbHRlciwgMDY0MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjcy5jIGIvZHJpdmVycy9jaGFyL2h2Y3MuYwppbmRleCA2ZTZlYjQ0Li5jNzZiY2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjcy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNzLmMKQEAgLTExMzksMTUgKzExMzksNiBAQAogCWh2Y3NkLT50dHkgPSB0dHk7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGh2Y3NkOwogCi0JLyoKLQkgKiBTZXQgdGhpcyBkcml2ZXIgdG8gbG93IGxhdGVuY3kgc28gdGhhdCB3ZSBhY3R1YWxseSBoYXZlIGEgY2hhbmNlIGF0Ci0JICogY2F0Y2hpbmcgYSB0aHJvdHRsZWQgVFRZIGFmdGVyIHdlIGZsaXBfYnVmZmVyX3B1c2guICBPdGhlcndpc2UgdGhlCi0JICogZmx1c2hfdG9fYXN5bmMgbWF5IG5vdCBleGVjdXRlIHVudGlsIGFmdGVyIHRoZSBrZXJuZWxfdGhyZWFkIGhhcwotCSAqIHlpZWxkZWQgYW5kIHJlc3VtZWQgdGhlIG5leHQgZmxpcF9idWZmZXJfcHVzaCByZXN1bHRpbmcgaW4gZGF0YQotCSAqIGxvc3MuCi0JICovCi0JdHR5LT5sb3dfbGF0ZW5jeSA9IDE7Ci0KIAltZW1zZXQoJmh2Y3NkLT5idWZmZXJbMF0sIDB4MDAsIEhWQ1NfQlVGRl9MRU4pOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odnNpLmMgYi9kcml2ZXJzL2NoYXIvaHZzaS5jCmluZGV4IDQwNmY4NzQuLjI5ODkwNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odnNpLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2c2kuYwpAQCAtODEwLDcgKzgxMCw2IEBACiAJaHAgPSAmaHZzaV9wb3J0c1tsaW5lXTsKIAogCXR0eS0+ZHJpdmVyX2RhdGEgPSBocDsKLQl0dHktPmxvd19sYXRlbmN5ID0gMTsgLyogYXZvaWQgdGhyb3R0bGUvdHR5X2ZsaXBfYnVmZmVyX3B1c2ggcmFjZSAqLwogCiAJbWIoKTsKIAlpZiAoaHAtPnN0YXRlID09IEhWU0lfRlNQX0RJRUQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKaW5kZXggODgyMmVjYS4uNWZhYjY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwpAQCAtMjAsNiArMjAsMjAgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIEhXX1JBTkRPTV9USU1FUklPTUVNCisJdHJpc3RhdGUgIlRpbWVyIElPTUVNIEhXIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgSEFTX0lPTUVNCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsLXNpZGUgc3VwcG9ydCBmb3IgYSBnZW5lcmljIFJhbmRvbQorCSAgTnVtYmVyIEdlbmVyYXRvciB1c2VkIGJ5IHJlYWRpbmcgYSAnZHVtYicgaW9tZW0gYWRkcmVzcyB0aGF0CisJICBpcyB0byBiZSByZWFkIG5vIGZhc3RlciB0aGFuLCBmb3IgZXhhbXBsZSwgb25jZSBhIHNlY29uZDsKKwkgIHRoZSBkZWZhdWx0IEZQR0EgYml0c3RyZWFtIG9uIHRoZSBUUy03ODAwIGhhcyBzdWNoIGZ1bmN0aW9uYWxpdHkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpbWVyaW9tZW0tcm5nLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgSFdfUkFORE9NX0lOVEVMCiAJdHJpc3RhdGUgIkludGVsIEhXIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgKFg4NiB8fCBJQTY0KSAmJiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCmluZGV4IGI2ZWZmYjcuLmU4MWQyMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX0hXX1JBTkRPTSkgKz0gcm5nLWNvcmUubwogcm5nLWNvcmUteSA6PSBjb3JlLm8KK29iai0kKENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSkgKz0gdGltZXJpb21lbS1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9JTlRFTCkgKz0gaW50ZWwtcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fQU1EKSArPSBhbWQtcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fR0VPREUpICs9IGdlb2RlLXJuZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhZDQxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIGRyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKKyAqICAgQ29weXJpZ2h0IDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogT3ZlcnZpZXc6CisgKiAgIFRoaXMgZHJpdmVyIGlzIHVzZWZ1bCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBhbiBJTyByYW5nZSB0aGF0IHByb3ZpZGVzCisgKiAgIHBlcmlvZGljIHJhbmRvbSBkYXRhIGZyb20gYSBzaW5nbGUgSU8gbWVtb3J5IGFkZHJlc3MuICBBbGwgdGhlIHBsYXRmb3JtCisgKiAgIGhhcyB0byBkbyBpcyBwcm92aWRlIHRoZSBhZGRyZXNzIGFuZCAnd2FpdCB0aW1lJyB0aGF0IG5ldyBkYXRhIGJlY29tZXMKKyAqICAgYXZhaWxhYmxlLgorICoKKyAqIFRPRE86IGFkZCBzdXBwb3J0IGZvciByZWFkaW5nIHNpemVzIG90aGVyIHRoYW4gMzJiaXRzIGFuZCBtYXNraW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXJpb21lbS1ybmcuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworc3RhdGljIHN0cnVjdCB0aW1lcmlvbWVtX3JuZ19kYXRhICp0aW1lcmlvbWVtX3JuZ19kYXRhOworCitzdGF0aWMgdm9pZCB0aW1lcmlvbWVtX3JuZ190cmlnZ2VyKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIERFRklORV9USU1FUih0aW1lcmlvbWVtX3JuZ190aW1lciwgdGltZXJpb21lbV9ybmdfdHJpZ2dlciwgMCwgMCk7CisKKy8qCisgKiBoYXZlIGRhdGEgcmV0dXJuIDEsIGhvd2V2ZXIgcmV0dXJuIDAgaWYgd2UgaGF2ZSBub3RoaW5nCisgKi8KK3N0YXRpYyBpbnQgdGltZXJpb21lbV9ybmdfZGF0YV9wcmVzZW50KHN0cnVjdCBod3JuZyAqcm5nLCBpbnQgd2FpdCkKK3sKKwlpZiAocm5nLT5wcml2ID09IDApCisJCXJldHVybiAxOworCisJaWYgKCF3YWl0IHx8IHRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQpCisJCXJldHVybiB0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50OworCisJd2FpdF9mb3JfY29tcGxldGlvbigmdGltZXJpb21lbV9ybmdfZGF0YS0+Y29tcGxldGlvbik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0aW1lcmlvbWVtX3JuZ19kYXRhX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGN1cjsKKwlzMzIgZGVsYXk7CisKKwkqZGF0YSA9IHJlYWRsKHRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpOworCisJaWYgKHJuZy0+cHJpdiAhPSAwKSB7CisJCWN1ciA9IGppZmZpZXM7CisKKwkJZGVsYXkgPSBjdXIgLSB0aW1lcmlvbWVtX3JuZ190aW1lci5leHBpcmVzOworCQlkZWxheSA9IHJuZy0+cHJpdiAtIChkZWxheSAlIHJuZy0+cHJpdik7CisKKwkJdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlcyA9IGN1ciArIGRlbGF5OworCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50ID0gMDsKKworCQlpbml0X2NvbXBsZXRpb24oJnRpbWVyaW9tZW1fcm5nX2RhdGEtPmNvbXBsZXRpb24pOworCQlhZGRfdGltZXIoJnRpbWVyaW9tZW1fcm5nX3RpbWVyKTsKKwl9CisKKwlyZXR1cm4gNDsKK30KKworc3RhdGljIHZvaWQgdGltZXJpb21lbV9ybmdfdHJpZ2dlcih1bnNpZ25lZCBsb25nIGR1bW15KQoreworCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQgPSAxOworCWNvbXBsZXRlKCZ0aW1lcmlvbWVtX3JuZ19kYXRhLT5jb21wbGV0aW9uKTsKK30KKworc3RhdGljIHN0cnVjdCBod3JuZyB0aW1lcmlvbWVtX3JuZ19vcHMgPSB7CisJLm5hbWUJCT0gInRpbWVyaW9tZW0iLAorCS5kYXRhX3ByZXNlbnQJPSB0aW1lcmlvbWVtX3JuZ19kYXRhX3ByZXNlbnQsCisJLmRhdGFfcmVhZAk9IHRpbWVyaW9tZW1fcm5nX2RhdGFfcmVhZCwKKwkucHJpdgkJPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGltZXJpb21lbV9ybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJdGltZXJpb21lbV9ybmdfZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCAhPSAwCisJCSYmIHVzZWNzX3RvX2ppZmZpZXModGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKSA+IDApIHsKKwkJdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXM7CisKKwkJdGltZXJpb21lbV9ybmdfb3BzLnByaXYgPSB1c2Vjc190b19qaWZmaWVzKAorCQkJCQkJdGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKTsKKwl9CisJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDE7CisKKwlyZXQgPSBod3JuZ19yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gcmVnaXN0ZXJpbmdcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIzMmJpdHMgZnJvbSAweCVwIEAgJWR1c1xuIiwKKwkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MsCisJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRpbWVyaW9tZW1fcm5nX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRlbF90aW1lcl9zeW5jKCZ0aW1lcmlvbWVtX3JuZ190aW1lcik7CisJaHdybmdfdW5yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1lcmlvbWVtX3JuZ19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInRpbWVyaW9tZW1fcm5nIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWVyaW9tZW1fcm5nX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGltZXJpb21lbV9ybmdfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWVyaW9tZW1fcm5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGltZXJpb21lbV9ybmdfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0aW1lcmlvbWVtX3JuZ19pbml0KTsKK21vZHVsZV9leGl0KHRpbWVyaW9tZW1fcm5nX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUaW1lciBJT01FTSBIL1cgUk5HIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDdjMTM1ODEuLjdjNDNhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTI0MSw2ICsyNDEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CiAKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUworIyBpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNTU4LDcgKzU2Miw3IEBACiAJdW5zaWduZWQgZG9udF9jb3VudF9lbnRyb3B5OjE7CiB9OwogCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqaXJxX3RpbWVyX3N0YXRlW05SX0lSUVNdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc2NjLmggYi9kcml2ZXJzL2NoYXIvc2NjLmgKaW5kZXggOTM5OThmNS4uMzQxYjExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NjYy5oCisrKyBiL2RyaXZlcnMvY2hhci9zY2MuaApAQCAtMzg3LDcgKzM4Nyw3IEBACiAvKiBUaGUgU0NDIG5lZWRzIDMuNSBQQ0xLIGN5Y2xlcyByZWNvdmVyeSB0aW1lIGJldHdlZW4gdG8gcmVnaXN0ZXIKICAqIGFjY2Vzc2VzLiBQQ0xLIHJ1bnMgd2l0aCA4IE1IeiBvbiBhbiBBdGFyaSwgc28gdGhpcyBkZWxheSBpcyAzLjUgKgogICogMTI1IG5zID0gNDM3LjUgbnMuIFRoaXMgaXMgdG9vIHNob3J0IGZvciB1ZGVsYXkoKS4KLSAqIDEwLzE2Lzk1OiBBIHRzdGIgbWZwLnBhcl9kdF9yZWcgdGFrZXMgNjAwbnMgKHN1cmU/KSBhbmQgdGh1cyBzaG91bGQgYmUKKyAqIDEwLzE2Lzk1OiBBIHRzdGIgc3RfbWZwLnBhcl9kdF9yZWcgdGFrZXMgNjAwbnMgKHN1cmU/KSBhbmQgdGh1cyBzaG91bGQgYmUKICAqIHF1aXRlIHJpZ2h0CiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGY0Mzc0NDMuLmZkM2RjZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTg4OCwxMiArODg4LDcgQEAKIAogc3RhdGljIGludCBzb255cGlfbWlzY19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9kZXZpY2UuZmlmb19hc3luYyk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2RldmljZS5maWZvX2FzeW5jKTsKIH0KIAogc3RhdGljIGludCBzb255cGlfbWlzY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N4LmMgYi9kcml2ZXJzL2NoYXIvc3guYwppbmRleCBmMTQ2ZTkwLi41MThmMmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3guYworKysgYi9kcml2ZXJzL2NoYXIvc3guYwpAQCAtMTc0Niw5ICsxNzQ2LDEwIEBACiAJCXN4X2RwcmludGsoU1hfREVCVUdfRklSTVdBUkUsICJyZXR1cm5pbmcgdHlwZT0gJWxkXG4iLCByYyk7CiAJCWJyZWFrOwogCWNhc2UgU1hJT19ET19SQU1URVNUOgotCQlpZiAoc3hfaW5pdGlhbGl6ZWQpCS8qIEFscmVhZHkgaW5pdGlhbGl6ZWQ6IGJldHRlciBub3QgcmFtdGVzdCB0aGUgYm9hcmQuICAqLworCQlpZiAoc3hfaW5pdGlhbGl6ZWQpIHsJLyogQWxyZWFkeSBpbml0aWFsaXplZDogYmV0dGVyIG5vdCByYW10ZXN0IHRoZSBib2FyZC4gICovCiAJCQlyYyA9IC1FUEVSTTsKIAkJCWJyZWFrOworCQl9CiAJCWlmIChJU19TWF9CT0FSRChib2FyZCkpIHsKIAkJCXJjID0gZG9fbWVtdGVzdChib2FyZCwgMCwgMHg3MDAwKTsKIAkJCWlmICghcmMpCkBAIC0xNzg4LDcgKzE3ODksNyBAQAogCQkJCQkJbmJ5dGVzIC0gaSA6IFNYX0NIVU5LX1NJWkUpKSB7CiAJCQkJCWtmcmVlKHRtcCk7CiAJCQkJCXJjID0gLUVGQVVMVDsKLQkJCQkJYnJlYWs7CisJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAkJCQltZW1jcHlfdG9pbyhib2FyZC0+YmFzZTIgKyBvZmZzZXQgKyBpLCB0bXAsCiAJCQkJCQkoaSArIFNYX0NIVU5LX1NJWkUgPiBuYnl0ZXMpID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDljNDdkYzQuLmNjZGQ4MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtNDI5LDEzNCArNDI5LDE0OCBAQAogI2RlZmluZSBUUE1fRElHRVNUX1NJWkUgMjAKICNkZWZpbmUgVFBNX0VSUk9SX1NJWkUgMTAKICNkZWZpbmUgVFBNX1JFVF9DT0RFX0lEWCA2Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9TSVpFX0lEWCAxMAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYIDE0Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFggMTgKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCAyMgotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzRfSURYIDI2Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1BFUk1fRElTQUJMRV9JRFggMTYKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUEVSTV9JTkFDVElWRV9JRFggMTgKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX0JPT0xfMV9JRFggMTQKLSNkZWZpbmUgVFBNX0dFVF9DQVBfVEVNUF9JTkFDVElWRV9JRFggMTYKLQotI2RlZmluZSBUUE1fQ0FQX0lEWCAxMwotI2RlZmluZSBUUE1fQ0FQX1NVQkNBUF9JRFggMjEKIAogZW51bSB0cG1fY2FwYWJpbGl0aWVzIHsKLQlUUE1fQ0FQX0ZMQUcgPSA0LAotCVRQTV9DQVBfUFJPUCA9IDUsCisJVFBNX0NBUF9GTEFHID0gY3B1X3RvX2JlMzIoNCksCisJVFBNX0NBUF9QUk9QID0gY3B1X3RvX2JlMzIoNSksCisJQ0FQX1ZFUlNJT05fMV8xID0gY3B1X3RvX2JlMzIoMHgwNiksCisJQ0FQX1ZFUlNJT05fMV8yID0gY3B1X3RvX2JlMzIoMHgxQSkKIH07CiAKIGVudW0gdHBtX3N1Yl9jYXBhYmlsaXRpZXMgewotCVRQTV9DQVBfUFJPUF9QQ1IgPSAweDEsCi0JVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiA9IDB4MywKLQlUUE1fQ0FQX0ZMQUdfUEVSTSA9IDB4OCwKLQlUUE1fQ0FQX0ZMQUdfVk9MID0gMHg5LAotCVRQTV9DQVBfUFJPUF9PV05FUiA9IDB4MTEsCi0JVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUID0gMHgxNSwKLQlUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OID0gMHgyMCwKKwlUUE1fQ0FQX1BST1BfUENSID0gY3B1X3RvX2JlMzIoMHgxMDEpLAorCVRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIgPSBjcHVfdG9fYmUzMigweDEwMyksCisJVFBNX0NBUF9GTEFHX1BFUk0gPSBjcHVfdG9fYmUzMigweDEwOCksCisJVFBNX0NBUF9GTEFHX1ZPTCA9IGNwdV90b19iZTMyKDB4MTA5KSwKKwlUUE1fQ0FQX1BST1BfT1dORVIgPSBjcHVfdG9fYmUzMigweDExMSksCisJVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUID0gY3B1X3RvX2JlMzIoMHgxMTUpLAorCVRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT04gPSBjcHVfdG9fYmUzMigweDEyMCksCisKIH07CiAKLS8qCi0gKiBUaGlzIGlzIGEgc2VtaSBnZW5lcmljIEdldENhcGFiaWxpdHkgY29tbWFuZCBmb3IgdXNlCi0gKiB3aXRoIHRoZSBjYXBhYmlsaXR5IHR5cGUgVFBNX0NBUF9QUk9QIG9yIFRQTV9DQVBfRkxBRwotICogYW5kIHRoZWlyIGFzc29jaWF0ZWQgc3ViX2NhcGFiaWxpdGllcy4KLSAqLwotCi1zdGF0aWMgY29uc3QgdTggdHBtX2NhcFtdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMjIsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAxMDEsCQkvKiBUUE1fT1JEX0dldENhcGFiaWxpdHkgKi8KLQkwLCAwLCAwLCAwLAkJLyogVFBNX0NBUF88VFlQRT4gKi8KLQkwLCAwLCAwLCA0LAkJLyogVFBNX0NBUF9TVUJfPFRZUEU+IHNpemUgKi8KLQkwLCAwLCAxLCAwCQkvKiBUUE1fQ0FQX1NVQl88VFlQRT4gKi8KLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2NtZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpkYXRhLCBpbnQgbGVuLAotCQkJICAgIGNoYXIgKmRlc2MpCitzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9jbWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBzdHJ1Y3QgdHBtX2NtZF90ICpjbWQsCisJCQkgICAgaW50IGxlbiwgY29uc3QgY2hhciAqZGVzYykKIHsKIAlpbnQgZXJyOwogCi0JbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIGxlbik7CisJbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsKHU4ICopIGNtZCwgbGVuKTsKIAlpZiAobGVuIDwgIDApCiAJCXJldHVybiBsZW47CiAJaWYgKGxlbiA9PSBUUE1fRVJST1JfU0laRSkgewotCQllcnIgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpOworCQllcnIgPSBiZTMyX3RvX2NwdShjbWQtPmhlYWRlci5vdXQucmV0dXJuX2NvZGUpOwogCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgJXNcbiIsIGVyciwgZGVzYyk7CiAJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwogfQogCisjZGVmaW5lIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSAyMDAKKyNkZWZpbmUgVFBNX1RBR19SUVVfQ09NTUFORCBjcHVfdG9fYmUxNigxOTMpCisjZGVmaW5lIFRQTV9PUkRfR0VUX0NBUCBjcHVfdG9fYmUzMigxMDEpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciB0cG1fZ2V0Y2FwX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMjIpLAorCS5vcmRpbmFsID0gVFBNX09SRF9HRVRfQ0FQCit9OworCitzc2l6ZV90IHRwbV9nZXRjYXAoc3RydWN0IGRldmljZSAqZGV2LCBfX2JlMzIgc3ViY2FwX2lkLCBjYXBfdCAqY2FwLAorCQkgICBjb25zdCBjaGFyICpkZXNjKQoreworCXN0cnVjdCB0cG1fY21kX3QgdHBtX2NtZDsKKwlpbnQgcmM7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCWlmIChzdWJjYXBfaWQgPT0gQ0FQX1ZFUlNJT05fMV8xIHx8IHN1YmNhcF9pZCA9PSBDQVBfVkVSU0lPTl8xXzIpIHsKKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IHN1YmNhcF9pZDsKKwkJLypzdWJjYXAgZmllbGQgbm90IG5lY2Vzc2FyeSAqLworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMigwKTsKKwkJdHBtX2NtZC5oZWFkZXIuaW4ubGVuZ3RoIC09IGNwdV90b19iZTMyKHNpemVvZihfX2JlMzIpKTsKKwl9IGVsc2UgeworCQlpZiAoc3ViY2FwX2lkID09IFRQTV9DQVBfRkxBR19QRVJNIHx8CisJCSAgICBzdWJjYXBfaWQgPT0gVFBNX0NBUF9GTEFHX1ZPTCkKKwkJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX0ZMQUc7CisJCWVsc2UKKwkJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gc3ViY2FwX2lkOworCX0KKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBkZXNjKTsKKwlpZiAoIXJjKQorCQkqY2FwID0gdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX291dC5jYXA7CisJcmV0dXJuIHJjOworfQorCiB2b2lkIHRwbV9nZW5faW50ZXJydXB0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQl1OCBkYXRhW21heF90KGludCwgQVJSQVlfU0laRSh0cG1fY2FwKSwgMzApXTsKKwlzdHJ1Y3QJdHBtX2NtZF90IHRwbV9jbWQ7CiAJc3NpemVfdCByYzsKIAotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKIAotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2dlbl9pbnRlcnJ1cHQpOwogCiB2b2lkIHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXU4IGRhdGFbbWF4X3QoaW50LCBBUlJBWV9TSVpFKHRwbV9jYXApLCAzMCldOworCXN0cnVjdCB0cG1fY21kX3QgdHBtX2NtZDsKKwlzdHJ1Y3QgdGltZW91dF90ICp0aW1lb3V0X2NhcDsKKwlzdHJ1Y3QgZHVyYXRpb25fdCAqZHVyYXRpb25fY2FwOwogCXNzaXplX3QgcmM7CiAJdTMyIHRpbWVvdXQ7CiAKLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGltZW91dHMiKTsKIAlpZiAocmMpCiAJCWdvdG8gZHVyYXRpb247CiAKLQlpZiAoYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYKSkpCisJaWYgKGJlMzJfdG9fY3B1KHRwbV9jbWQuaGVhZGVyLm91dC5sZW5ndGgpCiAJICAgICE9IDQgKiBzaXplb2YodTMyKSkKIAkJZ290byBkdXJhdGlvbjsKIAorCXRpbWVvdXRfY2FwID0gJnRwbV9jbWQucGFyYW1zLmdldGNhcF9vdXQuY2FwLnRpbWVvdXQ7CiAJLyogRG9uJ3Qgb3ZlcndyaXRlIGRlZmF1bHQgaWYgdmFsdWUgaXMgMCAqLwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+YSk7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+Yik7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2IgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+Yyk7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2MgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzRfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+ZCk7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCiBkdXJhdGlvbjoKLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OOworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTjsKIAotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBkdXJhdGlvbnMiKTsKIAlpZiAocmMpCiAJCXJldHVybjsKIAotCWlmIChiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFgpKSkKKwlpZiAoYmUzMl90b19jcHUodHBtX2NtZC5oZWFkZXIub3V0LnJldHVybl9jb2RlKQogCSAgICAhPSAzICogc2l6ZW9mKHUzMikpCiAJCXJldHVybjsKLQorCWR1cmF0aW9uX2NhcCA9ICZ0cG1fY21kLnBhcmFtcy5nZXRjYXBfb3V0LmNhcC5kdXJhdGlvbjsKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9Ci0JICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKLQkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCi0JCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdShkdXJhdGlvbl9jYXAtPnRwbV9zaG9ydCkpOwogCS8qIFRoZSBCcm9hZGNvbSBCQ00wMTAyIGNoaXBzZXQgaW4gYSBEZWxsIExhdGl0dWRlIEQ4MjAgZ2V0cyB0aGUgYWJvdmUKIAkgKiB2YWx1ZSB3cm9uZyBhbmQgYXBwYXJlbnRseSByZXBvcnRzIG1zZWNzIHJhdGhlciB0aGFuIHVzZWNzLiBTbyB3ZQogCSAqIGZpeCB1cCB0aGUgcmVzdWx0aW5nIHRvby1zbWFsbCBUUE1fU0hPUlQgdmFsdWUgdG8gbWFrZSB0aGluZ3Mgd29yay4KQEAgLTU2NSwxMyArNTc5LDkgQEAKIAkJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPSBIWjsKIAogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTUVESVVNXSA9Ci0JICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKLQkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCi0JCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYKSkpKTsKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdShkdXJhdGlvbl9jYXAtPnRwbV9tZWRpdW0pKTsKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX0xPTkddID0KLQkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQotCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKLQkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFgpKSkpOworCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1KGR1cmF0aW9uX2NhcC0+dHBtX2xvbmcpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9nZXRfdGltZW91dHMpOwogCkBAIC01ODcsMzYgKzU5NywxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2NvbnRpbnVlX3NlbGZ0ZXN0KTsKIAotI2RlZmluZSAgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFIDIwMAotCiBzc2l6ZV90IHRwbV9zaG93X2VuYWJsZWQoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAogCQkJY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfRkxBRzsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUdfUEVSTTsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXRwaW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGVuYWJsZWQgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9GTEFHX1BFUk0sICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgZW5hYmxlZCBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhZGF0YVtUUE1fR0VUX0NBUF9QRVJNX0RJU0FCTEVfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFjYXAucGVybV9mbGFncy5kaXNhYmxlKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19lbmFibGVkKTsKQEAgLTYyNCwzMSArNjE2LDE1IEBACiBzc2l6ZV90IHRwbV9zaG93X2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCiAJCQljaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19QRVJNOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtdHBpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgYWN0aXZlIHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfRkxBR19QRVJNLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGFjdGl2ZSBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhZGF0YVtUUE1fR0VUX0NBUF9QRVJNX0lOQUNUSVZFX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhY2FwLnBlcm1fZmxhZ3MuZGVhY3RpdmF0ZWQpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2FjdGl2ZSk7CkBAIC02NTYsMzEgKzYzMiwxNSBAQAogc3NpemVfdCB0cG1fc2hvd19vd25lZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCiAJCQljaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9PV05FUjsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgb3duZXIgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX09XTkVSLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgb3duZXIgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YVtUUE1fR0VUX0NBUF9SRVRfQk9PTF8xX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYXAub3duZWQpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X293bmVkKTsKQEAgLTY4OCwxMTYgKzY0OCwxODAgQEAKIHNzaXplX3QgdHBtX3Nob3dfdGVtcF9kZWFjdGl2YXRlZChzdHJ1Y3QgZGV2aWNlICogZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfRkxBRzsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUdfVk9MOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0ZW1wb3Jhcnkgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9GTEFHX1ZPTCwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRlbXBvcmFyeSBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhW1RQTV9HRVRfQ0FQX1RFTVBfSU5BQ1RJVkVfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGNhcC5zdGNsZWFyX2ZsYWdzLmRlYWN0aXZhdGVkKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKTsKIAotc3RhdGljIGNvbnN0IHU4IHBjcnJlYWRbXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDE0LAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMjEsCQkvKiBUUE1fT1JEX1BjclJlYWQgKi8KLQkwLCAwLCAwLCAwCQkvKiBQQ1IgaW5kZXggKi8KKy8qCisgKiB0cG1fY2hpcF9maW5kX2dldCAtIHJldHVybiB0cG1fY2hpcCBmb3IgZ2l2ZW4gY2hpcCBudW1iZXIKKyAqLworc3RhdGljIHN0cnVjdCB0cG1fY2hpcCAqdHBtX2NoaXBfZmluZF9nZXQoaW50IGNoaXBfbnVtKQoreworCXN0cnVjdCB0cG1fY2hpcCAqcG9zLCAqY2hpcCA9IE5VTEw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9zLCAmdHBtX2NoaXBfbGlzdCwgbGlzdCkgeworCQlpZiAoY2hpcF9udW0gIT0gVFBNX0FOWV9OVU0gJiYgY2hpcF9udW0gIT0gcG9zLT5kZXZfbnVtKQorCQkJY29udGludWU7CisKKwkJaWYgKHRyeV9tb2R1bGVfZ2V0KHBvcy0+ZGV2LT5kcml2ZXItPm93bmVyKSkgeworCQkJY2hpcCA9IHBvczsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBjaGlwOworfQorCisjZGVmaW5lIFRQTV9PUkRJTkFMX1BDUlJFQUQgY3B1X3RvX2JlMzIoMjEpCisjZGVmaW5lIFJFQURfUENSX1JFU1VMVF9TSVpFIDMwCitzdGF0aWMgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgcGNycmVhZF9oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDE0KSwKKwkub3JkaW5hbCA9IFRQTV9PUkRJTkFMX1BDUlJFQUQKIH07CiAKK2ludCBfX3RwbV9wY3JfcmVhZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1ZikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRwbV9jbWRfdCBjbWQ7CisKKwljbWQuaGVhZGVyLmluID0gcGNycmVhZF9oZWFkZXI7CisJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKKwlCVUlMRF9CVUdfT04oY21kLmhlYWRlci5pbi5sZW5ndGggPiBSRUFEX1BDUl9SRVNVTFRfU0laRSk7CisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJCQkgICJhdHRlbXB0aW5nIHRvIHJlYWQgYSBwY3IgdmFsdWUiKTsKKworCWlmIChyYyA9PSAwKQorCQltZW1jcHkocmVzX2J1ZiwgY21kLnBhcmFtcy5wY3JyZWFkX291dC5wY3JfcmVzdWx0LAorCQkgICAgICAgVFBNX0RJR0VTVF9TSVpFKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogdHBtX3Bjcl9yZWFkIC0gcmVhZCBhIHBjciB2YWx1ZQorICogQGNoaXBfbnVtOiAJdHBtIGlkeCAjIG9yIEFOWQorICogQHBjcl9pZHg6CXBjciBpZHggdG8gcmV0cmlldmUKKyAqIEByZXNfYnVmOiAJVFBNX1BDUiB2YWx1ZQorICogCQlzaXplIG9mIHJlc19idWYgaXMgMjAgYnl0ZXMgKG9yIE5VTEwgaWYgeW91IGRvbid0IGNhcmUpCisgKgorICogVGhlIFRQTSBkcml2ZXIgc2hvdWxkIGJlIGJ1aWx0LWluLCBidXQgZm9yIHdoYXRldmVyIHJlYXNvbiBpdAorICogaXNuJ3QsIHByb3RlY3QgYWdhaW5zdCB0aGUgY2hpcCBkaXNhcHBlYXJpbmcsIGJ5IGluY3JlbWVudGluZworICogdGhlIG1vZHVsZSB1c2FnZSBjb3VudC4KKyAqLworaW50IHRwbV9wY3JfcmVhZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1ZikKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisJaW50IHJjOworCisJY2hpcCA9IHRwbV9jaGlwX2ZpbmRfZ2V0KGNoaXBfbnVtKTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyYyA9IF9fdHBtX3Bjcl9yZWFkKGNoaXAsIHBjcl9pZHgsIHJlc19idWYpOworCW1vZHVsZV9wdXQoY2hpcC0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcGNyX3JlYWQpOworCisvKioKKyAqIHRwbV9wY3JfZXh0ZW5kIC0gZXh0ZW5kIHBjciB2YWx1ZSB3aXRoIGhhc2gKKyAqIEBjaGlwX251bTogCXRwbSBpZHggIyBvciBBTiYKKyAqIEBwY3JfaWR4OglwY3IgaWR4IHRvIGV4dGVuZAorICogQGhhc2g6IAloYXNoIHZhbHVlIHVzZWQgdG8gZXh0ZW5kIHBjciB2YWx1ZQorICoKKyAqIFRoZSBUUE0gZHJpdmVyIHNob3VsZCBiZSBidWlsdC1pbiwgYnV0IGZvciB3aGF0ZXZlciByZWFzb24gaXQKKyAqIGlzbid0LCBwcm90ZWN0IGFnYWluc3QgdGhlIGNoaXAgZGlzYXBwZWFyaW5nLCBieSBpbmNyZW1lbnRpbmcKKyAqIHRoZSBtb2R1bGUgdXNhZ2UgY291bnQuCisgKi8KKyNkZWZpbmUgVFBNX09SRF9QQ1JfRVhURU5EIGNwdV90b19iZTMyKDIwKQorI2RlZmluZSBFWFRFTkRfUENSX1NJWkUgMzQKK3N0YXRpYyBzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciBwY3JleHRlbmRfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigzNCksCisJLm9yZGluYWwgPSBUUE1fT1JEX1BDUl9FWFRFTkQKK307CisKK2ludCB0cG1fcGNyX2V4dGVuZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCBjb25zdCB1OCAqaGFzaCkKK3sKKwlzdHJ1Y3QgdHBtX2NtZF90IGNtZDsKKwlpbnQgcmM7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCisJY2hpcCA9IHRwbV9jaGlwX2ZpbmRfZ2V0KGNoaXBfbnVtKTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNtZC5oZWFkZXIuaW4gPSBwY3JleHRlbmRfaGVhZGVyOworCUJVSUxEX0JVR19PTihiZTMyX3RvX2NwdShjbWQuaGVhZGVyLmluLmxlbmd0aCkgPiBFWFRFTkRfUENSX1NJWkUpOworCWNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKKwltZW1jcHkoY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uaGFzaCwgaGFzaCwgVFBNX0RJR0VTVF9TSVpFKTsKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBjbWQuaGVhZGVyLmluLmxlbmd0aCwKKwkJCSAgImF0dGVtcHRpbmcgZXh0ZW5kIGEgUENSIHZhbHVlIik7CisKKwltb2R1bGVfcHV0KGNoaXAtPmRldi0+ZHJpdmVyLT5vd25lcik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Bjcl9leHRlbmQpOworCiBzc2l6ZV90IHRwbV9zaG93X3BjcnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKKwl1OCBkaWdlc3RbVFBNX0RJR0VTVF9TSVpFXTsKIAlzc2l6ZV90IHJjOwogCWludCBpLCBqLCBudW1fcGNyczsKLQlfX2JlMzIgaW5kZXg7CiAJY2hhciAqc3RyID0gYnVmOwotCiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfUENSOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAorCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9QQ1IsICZjYXAsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBQQ1JTIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JbnVtX3BjcnMgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyAxNCkpKTsKKwludW1fcGNycyA9IGJlMzJfdG9fY3B1KGNhcC5udW1fcGNycyk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9wY3JzOyBpKyspIHsKLQkJbWVtY3B5KGRhdGEsIHBjcnJlYWQsIHNpemVvZihwY3JyZWFkKSk7Ci0JCWluZGV4ID0gY3B1X3RvX2JlMzIoaSk7Ci0JCW1lbWNweShkYXRhICsgMTAsICZpbmRleCwgNCk7Ci0JCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCQkiYXR0ZW1wdGluZyB0byByZWFkIGEgUENSIik7CisJCXJjID0gX190cG1fcGNyX3JlYWQoY2hpcCwgaSwgZGlnZXN0KTsKIAkJaWYgKHJjKQotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiUENSLSUwMmQ6ICIsIGkpOwogCQlmb3IgKGogPSAwOyBqIDwgVFBNX0RJR0VTVF9TSVpFOyBqKyspCi0JCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlMDJYICIsICooZGF0YSArIDEwICsgaikpOworCQkJc3RyICs9IHNwcmludGYoc3RyLCAiJTAyWCAiLCBkaWdlc3Rbal0pOwogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJcbiIpOwogCX0KLW91dDoKLQlrZnJlZShkYXRhKTsKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfcGNycyk7CiAKICNkZWZpbmUgIFJFQURfUFVCRUtfUkVTVUxUX1NJWkUgMzE0Ci1zdGF0aWMgY29uc3QgdTggcmVhZHB1YmVrW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAzMCwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDEyNCwJCS8qIFRQTV9PUkRfUmVhZFB1YmVrICovCisjZGVmaW5lIFRQTV9PUkRfUkVBRFBVQkVLIGNwdV90b19iZTMyKDEyNCkKK3N0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHRwbV9yZWFkcHViZWtfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigzMCksCisJLm9yZGluYWwgPSBUUE1fT1JEX1JFQURQVUJFSwogfTsKIAogc3NpemVfdCB0cG1fc2hvd19wdWJlayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICAgY2hhciAqYnVmKQogewogCXU4ICpkYXRhOworCXN0cnVjdCB0cG1fY21kX3QgdHBtX2NtZDsKIAlzc2l6ZV90IGVycjsKIAlpbnQgaSwgcmM7CiAJY2hhciAqc3RyID0gYnVmOwogCiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkYXRhID0ga3phbGxvYyhSRUFEX1BVQkVLX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHJlYWRwdWJlaywgc2l6ZW9mKHJlYWRwdWJlaykpOwotCi0JZXJyID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFJFQURfUFVCRUtfUkVTVUxUX1NJWkUsCisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fcmVhZHB1YmVrX2hlYWRlcjsKKwllcnIgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFJFQURfUFVCRUtfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byByZWFkIHRoZSBQVUJFSyIpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtODEyLDcgKzgzNiw3IEBACiAJICAgMjU2IGJ5dGUgbW9kdWx1cwogCSAgIGlnbm9yZSBjaGVja3N1bSAyMCBieXRlcwogCSAqLwotCisJZGF0YSA9IHRwbV9jbWQucGFyYW1zLnJlYWRwdWJla19vdXRfYnVmZmVyOwogCXN0ciArPQogCSAgICBzcHJpbnRmKHN0ciwKIAkJICAgICJBbGdvcml0aG06ICUwMlggJTAyWCAlMDJYICUwMlhcbkVuY3NjaGVtZTogJTAyWCAlMDJYXG4iCkBAIC04MzIsNjUgKzg1NiwzMyBAQAogCX0KIG91dDoKIAlyYyA9IHN0ciAtIGJ1ZjsKLQlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19wdWJlayk7CiAKLSNkZWZpbmUgQ0FQX1ZFUlNJT05fMV8xIDYKLSNkZWZpbmUgQ0FQX1ZFUlNJT05fMV8yIDB4MUEKLSNkZWZpbmUgQ0FQX1ZFUlNJT05fSURYIDEzCi1zdGF0aWMgY29uc3QgdTggY2FwX3ZlcnNpb25bXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDE4LAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMTAxLAkJLyogVFBNX09SRF9HZXRDYXBhYmlsaXR5ICovCi0JMCwgMCwgMCwgMCwKLQkwLCAwLCAwLCAwCi19OwogCiBzc2l6ZV90IHRwbV9zaG93X2NhcHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUjsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSLCAmY2FwLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXIiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXN0ciArPSBzcHJpbnRmKHN0ciwgIk1hbnVmYWN0dXJlcjogMHgleFxuIiwKLQkJICAgICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOwotCi0JbWVtY3B5KGRhdGEsIGNhcF92ZXJzaW9uLCBzaXplb2YoY2FwX3ZlcnNpb24pKTsKLQlkYXRhW0NBUF9WRVJTSU9OX0lEWF0gPSBDQVBfVkVSU0lPTl8xXzE7Ci0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjEgdmVyc2lvbiIpOwogCWlmIChyYykKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOworCXN0ciArPSBzcHJpbnRmKHN0ciwgIk1hbnVmYWN0dXJlcjogMHgleFxuIiwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGNhcC5tYW51ZmFjdHVyZXJfaWQpKTsKIAorCXJjID0gdHBtX2dldGNhcChkZXYsIENBUF9WRVJTSU9OXzFfMSwgJmNhcCwKKwkJICAgICAgICAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMSB2ZXJzaW9uIik7CisJaWYgKHJjKQorCQlyZXR1cm4gMDsKIAlzdHIgKz0gc3ByaW50ZihzdHIsCiAJCSAgICAgICAiVENHIHZlcnNpb246ICVkLiVkXG5GaXJtd2FyZSB2ZXJzaW9uOiAlZC4lZFxuIiwKLQkJICAgICAgIChpbnQpIGRhdGFbMTRdLCAoaW50KSBkYXRhWzE1XSwgKGludCkgZGF0YVsxNl0sCi0JCSAgICAgICAoaW50KSBkYXRhWzE3XSk7Ci0KLW91dDoKLQlrZnJlZShkYXRhKTsKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbi5NYWpvciwgY2FwLnRwbV92ZXJzaW9uLk1pbm9yLAorCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uLnJldk1ham9yLCBjYXAudHBtX3ZlcnNpb24ucmV2TWlub3IpOwogCXJldHVybiBzdHIgLSBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19jYXBzKTsKQEAgLTg5OCw1MSArODkwLDI1IEBACiBzc2l6ZV90IHRwbV9zaG93X2NhcHNfMV8yKHN0cnVjdCBkZXZpY2UgKiBkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOwotCXNzaXplX3QgbGVuOworCWNhcF90IGNhcDsKKwlzc2l6ZV90IHJjOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUjsKLQotCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUpOwotCWlmIChsZW4gPD0gVFBNX0VSUk9SX1NJWkUpIHsKLQkJZGV2X2RiZyhjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICIKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbWFudWZhY3R1cmVyXG4iLAotCQkJYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKSk7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIsICZjYXAsCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG1hbnVmYWN0dXJlciIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQotCiAJc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAotCQkgICAgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7Ci0KLQltZW1jcHkoZGF0YSwgY2FwX3ZlcnNpb24sIHNpemVvZihjYXBfdmVyc2lvbikpOwotCWRhdGFbQ0FQX1ZFUlNJT05fSURYXSA9IENBUF9WRVJTSU9OXzFfMjsKLQotCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUpOwotCWlmIChsZW4gPD0gVFBNX0VSUk9SX1NJWkUpIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICIKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4yIHZlcnNpb25cbiIsCi0JCQliZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpKTsKLQkJZ290byBvdXQ7Ci0JfQorCQkgICAgICAgYmUzMl90b19jcHUoY2FwLm1hbnVmYWN0dXJlcl9pZCkpOworCXJjID0gdHBtX2dldGNhcChkZXYsIENBUF9WRVJTSU9OXzFfMiwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMiB2ZXJzaW9uIik7CisJaWYgKHJjKQorCQlyZXR1cm4gMDsKIAlzdHIgKz0gc3ByaW50ZihzdHIsCiAJCSAgICAgICAiVENHIHZlcnNpb246ICVkLiVkXG5GaXJtd2FyZSB2ZXJzaW9uOiAlZC4lZFxuIiwKLQkJICAgICAgIChpbnQpIGRhdGFbMTZdLCAoaW50KSBkYXRhWzE3XSwgKGludCkgZGF0YVsxOF0sCi0JCSAgICAgICAoaW50KSBkYXRhWzE5XSk7Ci0KLW91dDoKLQlrZnJlZShkYXRhKTsKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbl8xXzIuTWFqb3IsIGNhcC50cG1fdmVyc2lvbl8xXzIuTWlub3IsCisJCSAgICAgICBjYXAudHBtX3ZlcnNpb25fMV8yLnJldk1ham9yLAorCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uXzFfMi5yZXZNaW5vcik7CiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2NhcHNfMV8yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmggYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCmluZGV4IDhlMzBkZjQuLjhlMDBiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RwbS5oPgogCiBlbnVtIHRwbV90aW1lb3V0IHsKIAlUUE1fVElNRU9VVCA9IDUsCS8qIG1zZWNzICovCkBAIC0xMjMsNiArMTI0LDE0NyBAQAogCW91dGIoaW5kZXgsIGJhc2UpOwogCW91dGIodmFsdWUgJiAweEZGLCBiYXNlKzEpOwogfQorc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgeworCV9fYmUxNgl0YWc7CisJX19iZTMyCWxlbmd0aDsKKwlfX2JlMzIJb3JkaW5hbDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRwbV9vdXRwdXRfaGVhZGVyIHsKKwlfX2JlMTYJdGFnOworCV9fYmUzMglsZW5ndGg7CisJX19iZTMyCXJldHVybl9jb2RlOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJc3RjbGVhcl9mbGFnc190IHsKKwlfX2JlMTYJdGFnOworCXU4CWRlYWN0aXZhdGVkOworCXU4CWRpc2FibGVGb3JjZUNsZWFyOworCXU4CXBoeXNpY2FsUHJlc2VuY2U7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUxvY2s7CisJdTgJYkdsb2JhbExvY2s7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fdmVyc2lvbl90IHsKKwl1OAlNYWpvcjsKKwl1OAlNaW5vcjsKKwl1OAlyZXZNYWpvcjsKKwl1OAlyZXZNaW5vcjsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV92ZXJzaW9uXzFfMl90IHsKKwlfX2JlMTYJdGFnOworCXU4CU1ham9yOworCXU4CU1pbm9yOworCXU4CXJldk1ham9yOworCXU4CXJldk1pbm9yOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdGltZW91dF90IHsKKwlfX2JlMzIJYTsKKwlfX2JlMzIJYjsKKwlfX2JlMzIJYzsKKwlfX2JlMzIJZDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGR1cmF0aW9uX3QgeworCV9fYmUzMgl0cG1fc2hvcnQ7CisJX19iZTMyCXRwbV9tZWRpdW07CisJX19iZTMyCXRwbV9sb25nOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcGVybWFuZW50X2ZsYWdzX3QgeworCV9fYmUxNgl0YWc7CisJdTgJZGlzYWJsZTsKKwl1OAlvd25lcnNoaXA7CisJdTgJZGVhY3RpdmF0ZWQ7CisJdTgJcmVhZFB1YmVrOworCXU4CWRpc2FibGVPd25lckNsZWFyOworCXU4CWFsbG93TWFpbnRlbmFuY2U7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUxpZmV0aW1lTG9jazsKKwl1OAlwaHlzaWNhbFByZXNlbmNlSFdFbmFibGU7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUNNREVuYWJsZTsKKwl1OAlDRUtQVXNlZDsKKwl1OAlUUE1wb3N0OworCXU4CVRQTXBvc3RMb2NrOworCXU4CUZJUFM7CisJdTgJb3BlcmF0b3I7CisJdTgJZW5hYmxlUmV2b2tlRUs7CisJdTgJbnZMb2NrZWQ7CisJdTgJcmVhZFNSS1B1YjsKKwl1OAl0cG1Fc3RhYmxpc2hlZDsKKwl1OAltYWludGVuYW5jZURvbmU7CisJdTgJZGlzYWJsZUZ1bGxEQUxvZ2ljSW5mbzsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0CXBlcm1hbmVudF9mbGFnc190IHBlcm1fZmxhZ3M7CisJc3RydWN0CXN0Y2xlYXJfZmxhZ3NfdAlzdGNsZWFyX2ZsYWdzOworCWJvb2wJb3duZWQ7CisJX19iZTMyCW51bV9wY3JzOworCXN0cnVjdAl0cG1fdmVyc2lvbl90CXRwbV92ZXJzaW9uOworCXN0cnVjdAl0cG1fdmVyc2lvbl8xXzJfdCB0cG1fdmVyc2lvbl8xXzI7CisJX19iZTMyCW1hbnVmYWN0dXJlcl9pZDsKKwlzdHJ1Y3QgdGltZW91dF90ICB0aW1lb3V0OworCXN0cnVjdCBkdXJhdGlvbl90IGR1cmF0aW9uOworfSBjYXBfdDsKKworc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX2luIHsKKwlfX2JlMzIJY2FwOworCV9fYmUzMglzdWJjYXBfc2l6ZTsKKwlfX2JlMzIJc3ViY2FwOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfb3V0IHsKKwlfX2JlMzIJY2FwX3NpemU7CisJY2FwX3QJY2FwOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX3JlYWRwdWJla19wYXJhbXNfb3V0IHsKKwl1OAlhbGdvcml0aG1bNF07CisJdTgJZW5jc2NoZW1lWzJdOworCXU4CXNpZ3NjaGVtZVsyXTsKKwl1OAlwYXJhbWV0ZXJzWzEyXTsgLyphc3N1bWluZyBSU0EqLworCV9fYmUzMglrZXlzaXplOworCXU4CW1vZHVsdXNbMjU2XTsKKwl1OAljaGVja3N1bVsyMF07Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdAl0cG1faW5wdXRfaGVhZGVyIGluOworCXN0cnVjdAl0cG1fb3V0cHV0X2hlYWRlciBvdXQ7Cit9IHRwbV9jbWRfaGVhZGVyOworCisjZGVmaW5lIFRQTV9ESUdFU1RfU0laRSAyMAorc3RydWN0IHRwbV9wY3JyZWFkX291dCB7CisJdTgJcGNyX3Jlc3VsdFtUUE1fRElHRVNUX1NJWkVdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdHBtX3BjcnJlYWRfaW4geworCV9fYmUzMglwY3JfaWR4OworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdHBtX3BjcmV4dGVuZF9pbiB7CisJX19iZTMyCXBjcl9pZHg7CisJdTgJaGFzaFtUUE1fRElHRVNUX1NJWkVdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfb3V0IGdldGNhcF9vdXQ7CisJc3RydWN0CXRwbV9yZWFkcHViZWtfcGFyYW1zX291dCByZWFkcHViZWtfb3V0OworCXU4CXJlYWRwdWJla19vdXRfYnVmZmVyW3NpemVvZihzdHJ1Y3QgdHBtX3JlYWRwdWJla19wYXJhbXNfb3V0KV07CisJc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX2luIGdldGNhcF9pbjsKKwlzdHJ1Y3QJdHBtX3BjcnJlYWRfaW4JcGNycmVhZF9pbjsKKwlzdHJ1Y3QJdHBtX3BjcnJlYWRfb3V0CXBjcnJlYWRfb3V0OworCXN0cnVjdAl0cG1fcGNyZXh0ZW5kX2luIHBjcmV4dGVuZF9pbjsKK30gdHBtX2NtZF9wYXJhbXM7CisKK3N0cnVjdCB0cG1fY21kX3QgeworCXRwbV9jbWRfaGVhZGVyCWhlYWRlcjsKKwl0cG1fY21kX3BhcmFtcwlwYXJhbXM7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3NzaXplX3QJdHBtX2dldGNhcChzdHJ1Y3QgZGV2aWNlICosIF9fYmUzMiwgY2FwX3QgKiwgY29uc3QgY2hhciAqKTsKIAogZXh0ZXJuIHZvaWQgdHBtX2dldF90aW1lb3V0cyhzdHJ1Y3QgdHBtX2NoaXAgKik7CiBleHRlcm4gdm9pZCB0cG1fZ2VuX2ludGVycnVwdChzdHJ1Y3QgdHBtX2NoaXAgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYwppbmRleCBkMGU3OTI2Li5jNjRhMWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKQEAgLTE2OCwxMiArMTY4LDIyIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXRtbF9kcnYgPSB7Ci0JLm5hbWUgPSAidHBtX2F0bWVsIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5zdXNwZW5kID0gdHBtX3BtX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHRwbV9wbV9yZXN1bWUsCitzdGF0aWMgaW50IHRwbV9hdG1sX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiB0cG1fcG1fc3VzcGVuZCgmZGV2LT5kZXYsIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgdHBtX2F0bWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdHBtX3BtX3Jlc3VtZSgmZGV2LT5kZXYpOworfQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtbF9kcnYgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBtX2F0bWVsIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSB0cG1fYXRtbF9zdXNwZW5kLAorCS5yZXN1bWUgPSB0cG1fYXRtbF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2F0bWVsKHZvaWQpCkBAIC0xODQsNyArMTk0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGJhc2U7CiAJc3RydWN0ICB0cG1fY2hpcCAqY2hpcDsKIAotCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZhdG1sX2Rydik7CisJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF0bWxfZHJ2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjIzLDEzICsyMzMsMTMgQEAKIAkJYXRtZWxfcmVsZWFzZV9yZWdpb24oYmFzZSwKIAkJCQkgICAgIHJlZ2lvbl9zaXplKTsKIGVycl91bnJlZ19kcnY6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfYXRtZWwodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CiAJYXRtbF9wbGF0X3JlbW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IDcxN2FmN2EuLmFlYzE5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC02NTQsMTIgKzY1NCwyMiBAQAogCQkgICAgc2l6ZW9mKHRwbV9wbnBfdGJsW1RJU19ISURfVVNSX0lEWF0uaWQpLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaGlkLCAiU2V0IGFkZGl0aW9uYWwgc3BlY2lmaWMgSElEIGZvciB0aGlzIGRyaXZlciB0byBwcm9iZSIpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdGlzX2RydiA9IHsKLQkubmFtZSA9ICJ0cG1fdGlzIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5zdXNwZW5kID0gdHBtX3BtX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHRwbV9wbV9yZXN1bWUsCitzdGF0aWMgaW50IHRwbV90aXNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHRwbV9wbV9zdXNwZW5kKCZkZXYtPmRldiwgbXNnKTsKK30KKworc3RhdGljIGludCB0cG1fdGlzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKK30KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRpc19kcnYgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBtX3RpcyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kID0gdHBtX3Rpc19zdXNwZW5kLAorCS5yZXN1bWUgPSB0cG1fdGlzX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwpAQCAtNjcyLDE0ICs2ODIsMTQgQEAKIAlpbnQgcmM7CiAKIAlpZiAoZm9yY2UpIHsKLQkJcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJnRpc19kcnYpOworCQlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGlzX2Rydik7CiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CiAJCWlmIChJU19FUlIocGRldj1wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJ0cG1fdGlzIiwgLTEsIE5VTEwsIDApKSkKIAkJCXJldHVybiBQVFJfRVJSKHBkZXYpOwogCQlpZigocmM9dHBtX3Rpc19pbml0KCZwZGV2LT5kZXYsIFRJU19NRU1fQkFTRSwgVElTX01FTV9MRU4sIDApKSAhPSAwKSB7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKIAkJfQogCQlyZXR1cm4gcmM7CiAJfQpAQCAtNzExLDcgKzcyMSw3IEBACiAKIAlpZiAoZm9yY2UpIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOwogCX0gZWxzZQogCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJnRpc19wbnBfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBiYzg0ZTEyLi4yMjRmMjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0yMTYyLDEzICsyMTYyLDEyIEBACiAJaWYgKGdldF91c2VyKG5vbmJsb2NrLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkvKiBmaWxlLT5mX2ZsYWdzIGlzIHN0aWxsIEJLTCBwcm90ZWN0ZWQgaW4gdGhlIGZzIGxheWVyIC0gdm9taXQgKi8KLQlsb2NrX2tlcm5lbCgpOworCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlpZiAobm9uYmxvY2spCiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAllbHNlCiAJCWZpbGUtPmZfZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKaW5kZXggNGYzYjNmOS4uZDk0ZDI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCisrKyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwpAQCAtNDc5LDE4ICs0NzksMTggQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqdmNfY2xhc3M7CiAKLXZvaWQgdmNzX21ha2Vfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgdmNzX21ha2Vfc3lzZnMoaW50IGluZGV4KQogewotCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEpLCBOVUxMLAotCQkgICAgICAidmNzJXUiLCB0dHktPmluZGV4ICsgMSk7Ci0JZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMTI5KSwgTlVMTCwKLQkJICAgICAgInZjc2EldSIsIHR0eS0+aW5kZXggKyAxKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMSksIE5VTEwsCisJCSAgICAgICJ2Y3MldSIsIGluZGV4ICsgMSk7CisJZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEyOSksIE5VTEwsCisJCSAgICAgICJ2Y3NhJXUiLCBpbmRleCArIDEpOwogfQogCi12b2lkIHZjc19yZW1vdmVfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgdmNzX3JlbW92ZV9zeXNmcyhpbnQgaW5kZXgpCiB7Ci0JZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEpKTsKLQlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMTI5KSk7CisJZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxKSk7CisJZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxMjkpKTsKIH0KIAogaW50IF9faW5pdCB2Y3NfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCA3OTAwYmQ2Li4yYzFkMTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtNzc4LDYgKzc3OCw3IEBACiAJICAgIH0KIAkgICAgdmMtPnZjX2ttYWxsb2NlZCA9IDE7CiAJICAgIHZjX2luaXQodmMsIHZjLT52Y19yb3dzLCB2Yy0+dmNfY29scywgMSk7CisJICAgIHZjc19tYWtlX3N5c2ZzKGN1cnJjb25zKTsKIAkgICAgYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX0FMTE9DQVRFLCAmcGFyYW0pOwogCX0KIAlyZXR1cm4gMDsKQEAgLTk4Nyw3ICs5ODgsOSBAQAogCWlmICh2Y19jb25zX2FsbG9jYXRlZChjdXJyY29ucykpIHsKIAkJc3RydWN0IHZjX2RhdGEgKnZjID0gdmNfY29uc1tjdXJyY29uc10uZDsKIAkJc3RydWN0IHZ0X25vdGlmaWVyX3BhcmFtIHBhcmFtID0geyAudmMgPSB2YyB9OworCiAJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZ2dF9ub3RpZmllcl9saXN0LCBWVF9ERUFMTE9DQVRFLCAmcGFyYW0pOworCQl2Y3NfcmVtb3ZlX3N5c2ZzKGN1cnJjb25zKTsKIAkJdmMtPnZjX3N3LT5jb25fZGVpbml0KHZjKTsKIAkJcHV0X3BpZCh2Yy0+dnRfcGlkKTsKIAkJbW9kdWxlX3B1dCh2Yy0+dmNfc3ctPm93bmVyKTsKQEAgLTI3NzUsNyArMjc3OCw2IEBACiAJCQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnIHw9IElVVEY4OwogCQkJZWxzZQogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyAmPSB+SVVURjg7Ci0JCQl2Y3NfbWFrZV9zeXNmcyh0dHkpOwogCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtMjc5NSw3ICsyNzk3LDYgQEAKIAlCVUdfT04odmMgPT0gTlVMTCk7CiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCXZjLT52Y190dHkgPSBOVUxMOwotCXZjc19yZW1vdmVfc3lzZnModHR5KTsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAJdHR5X3NodXRkb3duKHR0eSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQppbmRleCAxNTI1ODgyLi4xZWZiMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKQEAgLTIsMyArMiw0IEBACiBvYmotJChDT05GSUdfWDg2X0NZQ0xPTkVfVElNRVIpCSs9IGN5Y2xvbmUubwogb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gYWNwaV9wbS5vCiBvYmotJChDT05GSUdfU0N4MjAwSFJfVElNRVIpCSs9IHNjeDIwMF9ocnQubworb2JqLSQoQ09ORklHX1NIX1RJTUVSX0NNVCkJKz0gc2hfY210Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODNiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorICogU3VwZXJIIFRpbWVyIFN1cHBvcnQgLSBDTVQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CisKK3N0cnVjdCBzaF9jbXRfcHJpdiB7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBsb25nIHdpZHRoOyAvKiAxNiBvciAzMiBiaXQgdmVyc2lvbiBvZiBoYXJkd2FyZSBibG9jayAqLworCXVuc2lnbmVkIGxvbmcgb3ZlcmZsb3dfYml0OworCXVuc2lnbmVkIGxvbmcgY2xlYXJfYml0czsKKwlzdHJ1Y3QgaXJxYWN0aW9uIGlycWFjdGlvbjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgbmV4dF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIG1heF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2VkOworCXVuc2lnbmVkIGxvbmcgdG90YWxfY3ljbGVzOworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhzaF9jbXRfbG9jayk7CisKKyNkZWZpbmUgQ01TVFIgLTEgLyogc2hhcmVkIHJlZ2lzdGVyICovCisjZGVmaW5lIENNQ1NSIDAgLyogY2hhbm5lbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNOVCAxIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01DT1IgMiAvKiBjaGFubmVsIHJlZ2lzdGVyICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaF9jbXRfcmVhZChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCByZWdfbnIpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXZvaWQgX19pb21lbSAqYmFzZSA9IHAtPm1hcGJhc2U7CisJdW5zaWduZWQgbG9uZyBvZmZzOworCisJaWYgKHJlZ19uciA9PSBDTVNUUikgeworCQlvZmZzID0gMDsKKwkJYmFzZSAtPSBjZmctPmNoYW5uZWxfb2Zmc2V0OworCX0gZWxzZQorCQlvZmZzID0gcmVnX25yOworCisJaWYgKHAtPndpZHRoID09IDE2KQorCQlvZmZzIDw8PSAxOworCWVsc2UgeworCQlvZmZzIDw8PSAyOworCQlpZiAoKHJlZ19uciA9PSBDTUNOVCkgfHwgKHJlZ19uciA9PSBDTUNPUikpCisJCQlyZXR1cm4gaW9yZWFkMzIoYmFzZSArIG9mZnMpOworCX0KKworCXJldHVybiBpb3JlYWQxNihiYXNlICsgb2Zmcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9jbXRfd3JpdGUoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgcmVnX25yLAorCQkJCXVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXZvaWQgX19pb21lbSAqYmFzZSA9IHAtPm1hcGJhc2U7CisJdW5zaWduZWQgbG9uZyBvZmZzOworCisJaWYgKHJlZ19uciA9PSBDTVNUUikgeworCQlvZmZzID0gMDsKKwkJYmFzZSAtPSBjZmctPmNoYW5uZWxfb2Zmc2V0OworCX0gZWxzZQorCQlvZmZzID0gcmVnX25yOworCisJaWYgKHAtPndpZHRoID09IDE2KQorCQlvZmZzIDw8PSAxOworCWVsc2UgeworCQlvZmZzIDw8PSAyOworCQlpZiAoKHJlZ19uciA9PSBDTUNOVCkgfHwgKHJlZ19uciA9PSBDTUNPUikpIHsKKwkJCWlvd3JpdGUzMih2YWx1ZSwgYmFzZSArIG9mZnMpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaW93cml0ZTE2KHZhbHVlLCBiYXNlICsgb2Zmcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2NtdF9nZXRfY291bnRlcihzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCisJCQkJCWludCAqaGFzX3dyYXBwZWQpCit7CisJdW5zaWduZWQgbG9uZyB2MSwgdjIsIHYzOworCisJLyogTWFrZSBzdXJlIHRoZSB0aW1lciB2YWx1ZSBpcyBzdGFibGUuIFN0b2xlbiBmcm9tIGFjcGlfcG0uYyAqLworCWRvIHsKKwkJdjEgPSBzaF9jbXRfcmVhZChwLCBDTUNOVCk7CisJCXYyID0gc2hfY210X3JlYWQocCwgQ01DTlQpOworCQl2MyA9IHNoX2NtdF9yZWFkKHAsIENNQ05UKTsKKwl9IHdoaWxlICh1bmxpa2VseSgodjEgPiB2MiAmJiB2MSA8IHYzKSB8fCAodjIgPiB2MyAmJiB2MiA8IHYxKQorCQkJICB8fCAodjMgPiB2MSAmJiB2MyA8IHYyKSkpOworCisJKmhhc193cmFwcGVkID0gc2hfY210X3JlYWQocCwgQ01DU1IpICYgcC0+b3ZlcmZsb3dfYml0OworCXJldHVybiB2MjsKK30KKworCitzdGF0aWMgdm9pZCBzaF9jbXRfc3RhcnRfc3RvcF9jaChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCBzdGFydCkKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsdWU7CisKKwkvKiBzdGFydCBzdG9wIHJlZ2lzdGVyIHNoYXJlZCBieSBtdWx0aXBsZSB0aW1lciBjaGFubmVscyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzaF9jbXRfbG9jaywgZmxhZ3MpOworCXZhbHVlID0gc2hfY210X3JlYWQocCwgQ01TVFIpOworCisJaWYgKHN0YXJ0KQorCQl2YWx1ZSB8PSAxIDw8IGNmZy0+dGltZXJfYml0OworCWVsc2UKKwkJdmFsdWUgJj0gfigxIDw8IGNmZy0+dGltZXJfYml0KTsKKworCXNoX2NtdF93cml0ZShwLCBDTVNUUiwgdmFsdWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNoX2NtdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X2VuYWJsZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgKnJhdGUpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwkvKiBlbmFibGUgY2xvY2sgKi8KKwlyZXQgPSBjbGtfZW5hYmxlKHAtPmNsayk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInNoX2NtdDogY2Fubm90IGVuYWJsZSBjbG9jayBcIiVzXCJcbiIsIGNmZy0+Y2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJKnJhdGUgPSBjbGtfZ2V0X3JhdGUocC0+Y2xrKSAvIDg7CisKKwkvKiBtYWtlIHN1cmUgY2hhbm5lbCBpcyBkaXNhYmxlZCAqLworCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDApOworCisJLyogY29uZmlndXJlIGNoYW5uZWwsIHBlcmlvZGljIG1vZGUgYW5kIG1heGltdW0gdGltZW91dCAqLworCWlmIChwLT53aWR0aCA9PSAxNikKKwkJc2hfY210X3dyaXRlKHAsIENNQ1NSLCAwKTsKKwllbHNlCisJCXNoX2NtdF93cml0ZShwLCBDTUNTUiwgMHgwMWE0KTsKKworCXNoX2NtdF93cml0ZShwLCBDTUNPUiwgMHhmZmZmZmZmZik7CisJc2hfY210X3dyaXRlKHAsIENNQ05ULCAwKTsKKworCS8qIGVuYWJsZSBjaGFubmVsICovCisJc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9kaXNhYmxlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCkKK3sKKwkvKiBkaXNhYmxlIGNoYW5uZWwgKi8KKwlzaF9jbXRfc3RhcnRfc3RvcF9jaChwLCAwKTsKKworCS8qIHN0b3AgY2xvY2sgKi8KKwljbGtfZGlzYWJsZShwLT5jbGspOworfQorCisvKiBwcml2YXRlIGZsYWdzICovCisjZGVmaW5lIEZMQUdfQ0xPQ0tFVkVOVCAoMSA8PCAwKQorI2RlZmluZSBGTEFHX0NMT0NLU09VUkNFICgxIDw8IDEpCisjZGVmaW5lIEZMQUdfUkVQUk9HUkFNICgxIDw8IDIpCisjZGVmaW5lIEZMQUdfU0tJUEVWRU5UICgxIDw8IDMpCisjZGVmaW5lIEZMQUdfSVJRQ09OVEVYVCAoMSA8PCA0KQorCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorCQkJCQkgICAgICBpbnQgYWJzb2x1dGUpCit7CisJdW5zaWduZWQgbG9uZyBuZXdfbWF0Y2g7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSA9IHAtPm5leHRfbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBkZWxheSA9IDA7CisJdW5zaWduZWQgbG9uZyBub3cgPSAwOworCWludCBoYXNfd3JhcHBlZDsKKworCW5vdyA9IHNoX2NtdF9nZXRfY291bnRlcihwLCAmaGFzX3dyYXBwZWQpOworCXAtPmZsYWdzIHw9IEZMQUdfUkVQUk9HUkFNOyAvKiBmb3JjZSByZXByb2dyYW0gKi8KKworCWlmIChoYXNfd3JhcHBlZCkgeworCQkvKiB3ZSdyZSBjb21wZXRpbmcgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisJCSAqICAtPiBsZXQgdGhlIGludGVycnVwdCBoYW5kbGVyIHJlcHJvZ3JhbSB0aGUgdGltZXIuCisJCSAqICAtPiBpbnRlcnJ1cHQgbnVtYmVyIHR3byBoYW5kbGVzIHRoZSBldmVudC4KKwkJICovCisJCXAtPmZsYWdzIHw9IEZMQUdfU0tJUEVWRU5UOworCQlyZXR1cm47CisJfQorCisJaWYgKGFic29sdXRlKQorCQlub3cgPSAwOworCisJZG8geworCQkvKiByZXByb2dyYW0gdGhlIHRpbWVyIGhhcmR3YXJlLAorCQkgKiBidXQgZG9uJ3Qgc2F2ZSB0aGUgbmV3IG1hdGNoIHZhbHVlIHlldC4KKwkJICovCisJCW5ld19tYXRjaCA9IG5vdyArIHZhbHVlICsgZGVsYXk7CisJCWlmIChuZXdfbWF0Y2ggPiBwLT5tYXhfbWF0Y2hfdmFsdWUpCisJCQluZXdfbWF0Y2ggPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisKKwkJc2hfY210X3dyaXRlKHAsIENNQ09SLCBuZXdfbWF0Y2gpOworCisJCW5vdyA9IHNoX2NtdF9nZXRfY291bnRlcihwLCAmaGFzX3dyYXBwZWQpOworCQlpZiAoaGFzX3dyYXBwZWQgJiYgKG5ld19tYXRjaCA+IHAtPm1hdGNoX3ZhbHVlKSkgeworCQkJLyogd2UgYXJlIGNoYW5naW5nIHRvIGEgZ3JlYXRlciBtYXRjaCB2YWx1ZSwKKwkJCSAqIHNvIHRoaXMgd3JhcCBtdXN0IGJlIGNhdXNlZCBieSB0aGUgY291bnRlcgorCQkJICogbWF0Y2hpbmcgdGhlIG9sZCB2YWx1ZS4KKwkJCSAqIC0+IGZpcnN0IGludGVycnVwdCByZXByb2dyYW1zIHRoZSB0aW1lci4KKwkJCSAqIC0+IGludGVycnVwdCBudW1iZXIgdHdvIGhhbmRsZXMgdGhlIGV2ZW50LgorCQkJICovCisJCQlwLT5mbGFncyB8PSBGTEFHX1NLSVBFVkVOVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGhhc193cmFwcGVkKSB7CisJCQkvKiB3ZSBhcmUgY2hhbmdpbmcgdG8gYSBzbWFsbGVyIG1hdGNoIHZhbHVlLAorCQkJICogc28gdGhlIHdyYXAgbXVzdCBiZSBjYXVzZWQgYnkgdGhlIGNvdW50ZXIKKwkJCSAqIG1hdGNoaW5nIHRoZSBuZXcgdmFsdWUuCisJCQkgKiAtPiBzYXZlIHByb2dyYW1tZWQgbWF0Y2ggdmFsdWUuCisJCQkgKiAtPiBsZXQgaXNyIGhhbmRsZSB0aGUgZXZlbnQuCisJCQkgKi8KKwkJCXAtPm1hdGNoX3ZhbHVlID0gbmV3X21hdGNoOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBiZSBzYWZlOiB2ZXJpZnkgaGFyZHdhcmUgc2V0dGluZ3MgKi8KKwkJaWYgKG5vdyA8IG5ld19tYXRjaCkgeworCQkJLyogdGltZXIgdmFsdWUgaXMgYmVsb3cgbWF0Y2ggdmFsdWUsIGFsbCBnb29kLgorCQkJICogdGhpcyBtYWtlcyBzdXJlIHdlIHdvbid0IG1pc3MgYW55IG1hdGNoIGV2ZW50cy4KKwkJCSAqIC0+IHNhdmUgcHJvZ3JhbW1lZCBtYXRjaCB2YWx1ZS4KKwkJCSAqIC0+IGxldCBpc3IgaGFuZGxlIHRoZSBldmVudC4KKwkJCSAqLworCQkJcC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHRoZSBjb3VudGVyIGhhcyByZWFjaGVkIGEgdmFsdWUgZ3JlYXRlcgorCQkgKiB0aGFuIG91ciBuZXcgbWF0Y2ggdmFsdWUuIGFuZCBzaW5jZSB0aGUKKwkJICogaGFzX3dyYXBwZWQgZmxhZyBpc24ndCBzZXQgd2UgbXVzdCBoYXZlCisJCSAqIHByb2dyYW1tZWQgYSB0b28gY2xvc2UgZXZlbnQuCisJCSAqIC0+IGluY3JlYXNlIGRlbGF5IGFuZCByZXRyeS4KKwkJICovCisJCWlmIChkZWxheSkKKwkJCWRlbGF5IDw8PSAxOworCQllbHNlCisJCQlkZWxheSA9IDE7CisKKwkJaWYgKCFkZWxheSkKKwkJCXByX3dhcm5pbmcoInNoX2NtdDogdG9vIGxvbmcgZGVsYXlcbiIpOworCisJfSB3aGlsZSAoZGVsYXkpOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfc2V0X25leHQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGRlbHRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGVsdGEgPiBwLT5tYXhfbWF0Y2hfdmFsdWUpCisJCXByX3dhcm5pbmcoInNoX2NtdDogZGVsdGEgb3V0IG9mIHJhbmdlXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IGRlbHRhOworCXNoX2NtdF9jbG9ja19ldmVudF9wcm9ncmFtX3ZlcmlmeShwLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9jbXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBkZXZfaWQ7CisKKwkvKiBjbGVhciBmbGFncyAqLworCXNoX2NtdF93cml0ZShwLCBDTUNTUiwgc2hfY210X3JlYWQocCwgQ01DU1IpICYgcC0+Y2xlYXJfYml0cyk7CisKKwkvKiB1cGRhdGUgY2xvY2sgc291cmNlIGNvdW50ZXIgdG8gYmVnaW4gd2l0aCBpZiBlbmFibGVkCisJICogdGhlIHdyYXAgZmxhZyBzaG91bGQgYmUgY2xlYXJlZCBieSB0aGUgdGltZXIgc3BlY2lmaWMKKwkgKiBpc3IgYmVmb3JlIHdlIGVuZCB1cCBoZXJlLgorCSAqLworCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tTT1VSQ0UpCisJCXAtPnRvdGFsX2N5Y2xlcyArPSBwLT5tYXRjaF92YWx1ZTsKKworCWlmICghKHAtPmZsYWdzICYgRkxBR19SRVBST0dSQU0pKQorCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCisJcC0+ZmxhZ3MgfD0gRkxBR19JUlFDT05URVhUOworCisJaWYgKHAtPmZsYWdzICYgRkxBR19DTE9DS0VWRU5UKSB7CisJCWlmICghKHAtPmZsYWdzICYgRkxBR19TS0lQRVZFTlQpKSB7CisJCQlpZiAocC0+Y2VkLm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCkgeworCQkJCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisJCQkJcC0+ZmxhZ3MgfD0gRkxBR19SRVBST0dSQU07CisJCQl9CisKKwkJCXAtPmNlZC5ldmVudF9oYW5kbGVyKCZwLT5jZWQpOworCQl9CisJfQorCisJcC0+ZmxhZ3MgJj0gfkZMQUdfU0tJUEVWRU5UOworCisJaWYgKHAtPmZsYWdzICYgRkxBR19SRVBST0dSQU0pIHsKKwkJcC0+ZmxhZ3MgJj0gfkZMQUdfUkVQUk9HUkFNOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkocCwgMSk7CisKKwkJaWYgKHAtPmZsYWdzICYgRkxBR19DTE9DS0VWRU5UKQorCQkJaWYgKChwLT5jZWQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTikKKwkJCSAgICB8fCAocC0+bWF0Y2hfdmFsdWUgPT0gcC0+bmV4dF9tYXRjaF92YWx1ZSkpCisJCQkJcC0+ZmxhZ3MgJj0gfkZMQUdfUkVQUk9HUkFNOworCX0KKworCXAtPmZsYWdzICY9IH5GTEFHX0lSUUNPTlRFWFQ7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X3N0YXJ0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBmbGFnKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCEocC0+ZmxhZ3MgJiAoRkxBR19DTE9DS0VWRU5UIHwgRkxBR19DTE9DS1NPVVJDRSkpKQorCQlyZXQgPSBzaF9jbXRfZW5hYmxlKHAsICZwLT5yYXRlKTsKKworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCXAtPmZsYWdzIHw9IGZsYWc7CisKKwkvKiBzZXR1cCB0aW1lb3V0IGlmIG5vIGNsb2NrZXZlbnQgKi8KKwlpZiAoKGZsYWcgPT0gRkxBR19DTE9DS1NPVVJDRSkgJiYgKCEocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpKSkKKwkJc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7Cisgb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9zdG9wKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBmbGFnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCWYgPSBwLT5mbGFncyAmIChGTEFHX0NMT0NLRVZFTlQgfCBGTEFHX0NMT0NLU09VUkNFKTsKKwlwLT5mbGFncyAmPSB+ZmxhZzsKKworCWlmIChmICYmICEocC0+ZmxhZ3MgJiAoRkxBR19DTE9DS0VWRU5UIHwgRkxBR19DTE9DS1NPVVJDRSkpKQorCQlzaF9jbXRfZGlzYWJsZShwKTsKKworCS8qIGFkanVzdCB0aGUgdGltZW91dCB0byBtYXhpbXVtIGlmIG9ubHkgY2xvY2tzb3VyY2UgbGVmdCAqLworCWlmICgoZmxhZyA9PSBGTEFHX0NMT0NLRVZFTlQpICYmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tTT1VSQ0UpKQorCQlzaF9jbXRfc2V0X25leHQocCwgcC0+bWF4X21hdGNoX3ZhbHVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF9jbXRfcHJpdiAqY2VkX3RvX3NoX2NtdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjZWQsIHN0cnVjdCBzaF9jbXRfcHJpdiwgY2VkKTsKK30KKworc3RhdGljIHZvaWQgc2hfY210X2Nsb2NrX2V2ZW50X3N0YXJ0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHBlcmlvZGljKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZwLT5jZWQ7CisKKwlzaF9jbXRfc3RhcnQocCwgRkxBR19DTE9DS0VWRU5UKTsKKworCS8qIFRPRE86IGNhbGN1bGF0ZSBnb29kIHNoaWZ0IGZyb20gcmF0ZSBhbmQgY291bnRlciBiaXQgd2lkdGggKi8KKworCWNlZC0+c2hpZnQgPSAzMjsKKwljZWQtPm11bHQgPSBkaXZfc2MocC0+cmF0ZSwgTlNFQ19QRVJfU0VDLCBjZWQtPnNoaWZ0KTsKKwljZWQtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMocC0+bWF4X21hdGNoX3ZhbHVlLCBjZWQpOworCWNlZC0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDFmLCBjZWQpOworCisJaWYgKHBlcmlvZGljKQorCQlzaF9jbXRfc2V0X25leHQocCwgKHAtPnJhdGUgKyBIWi8yKSAvIEhaKTsKKwllbHNlCisJCXNoX2NtdF9zZXRfbmV4dChwLCBwLT5tYXhfbWF0Y2hfdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGNlZF90b19zaF9jbXQoY2VkKTsKKworCS8qIGRlYWwgd2l0aCBvbGQgc2V0dGluZyBmaXJzdCAqLworCXN3aXRjaCAoY2VkLT5tb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCXNoX2NtdF9zdG9wKHAsIEZMQUdfQ0xPQ0tFVkVOVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBmb3IgcGVyaW9kaWMgY2xvY2sgZXZlbnRzXG4iLAorCQkJY2VkLT5uYW1lKTsKKwkJc2hfY210X2Nsb2NrX2V2ZW50X3N0YXJ0KHAsIDEpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBmb3Igb25lc2hvdCBjbG9jayBldmVudHNcbiIsCisJCQljZWQtPm5hbWUpOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQocCwgMCk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJCXNoX2NtdF9zdG9wKHAsIEZMQUdfQ0xPQ0tFVkVOVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBzaF9jbXRfY2xvY2tfZXZlbnRfbmV4dCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBjZWRfdG9fc2hfY210KGNlZCk7CisKKwlCVUdfT04oY2VkLT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOworCWlmIChsaWtlbHkocC0+ZmxhZ3MgJiBGTEFHX0lSUUNPTlRFWFQpKQorCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gZGVsdGE7CisJZWxzZQorCQlzaF9jbXRfc2V0X25leHQocCwgZGVsdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9yZWdpc3Rlcl9jbG9ja2V2ZW50KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwKKwkJCQkgICAgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyByYXRpbmcpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJnAtPmNlZDsKKworCW1lbXNldChjZWQsIDAsIHNpemVvZigqY2VkKSk7CisKKwljZWQtPm5hbWUgPSBuYW1lOworCWNlZC0+ZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQzsKKwljZWQtPmZlYXR1cmVzIHw9IENMT0NLX0VWVF9GRUFUX09ORVNIT1Q7CisJY2VkLT5yYXRpbmcgPSByYXRpbmc7CisJY2VkLT5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKwljZWQtPnNldF9uZXh0X2V2ZW50ID0gc2hfY210X2Nsb2NrX2V2ZW50X25leHQ7CisJY2VkLT5zZXRfbW9kZSA9IHNoX2NtdF9jbG9ja19ldmVudF9tb2RlOworCisJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7CisJY2VkLT5tdWx0ID0gMTsgLyogd29yayBhcm91bmQgbWlzcGxhY2VkIFdBUk5fT04oKSBpbiBjbG9ja2V2ZW50cy5jICovCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7Cit9CisKK2ludCBzaF9jbXRfcmVnaXN0ZXIoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBjaGFyICpuYW1lLAorCQkgICAgdW5zaWduZWQgbG9uZyBjbG9ja2V2ZW50X3JhdGluZywKKwkJICAgIHVuc2lnbmVkIGxvbmcgY2xvY2tzb3VyY2VfcmF0aW5nKQoreworCWlmIChwLT53aWR0aCA9PSAoc2l6ZW9mKHAtPm1heF9tYXRjaF92YWx1ZSkgKiA4KSkKKwkJcC0+bWF4X21hdGNoX3ZhbHVlID0gfjA7CisJZWxzZQorCQlwLT5tYXhfbWF0Y2hfdmFsdWUgPSAoMSA8PCBwLT53aWR0aCkgLSAxOworCisJcC0+bWF0Y2hfdmFsdWUgPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisJc3Bpbl9sb2NrX2luaXQoJnAtPmxvY2spOworCisJaWYgKGNsb2NrZXZlbnRfcmF0aW5nKQorCQlzaF9jbXRfcmVnaXN0ZXJfY2xvY2tldmVudChwLCBuYW1lLCBjbG9ja2V2ZW50X3JhdGluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9jbXRfc2V0dXAoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxLCByZXQ7CisJcmV0ID0gLUVOWElPOworCisJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCXAtPnBkZXYgPSBwZGV2OworCisJaWYgKCFjZmcpIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHApOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHAtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwLT5wZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGlycVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwkvKiBtYXAgbWVtb3J5LCBsZXQgbWFwYmFzZSBwb2ludCB0byBvdXIgY2hhbm5lbCAqLworCXAtPm1hcGJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAocC0+bWFwYmFzZSA9PSBOVUxMKSB7CisJCXByX2Vycigic2hfY210OiBmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwkvKiByZXF1ZXN0IGlycSB1c2luZyBzZXR1cF9pcnEoKSAodG9vIGVhcmx5IGZvciByZXF1ZXN0X2lycSgpKSAqLworCXAtPmlycWFjdGlvbi5uYW1lID0gY2ZnLT5uYW1lOworCXAtPmlycWFjdGlvbi5oYW5kbGVyID0gc2hfY210X2ludGVycnVwdDsKKwlwLT5pcnFhY3Rpb24uZGV2X2lkID0gcDsKKwlwLT5pcnFhY3Rpb24uZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTDsKKwlwLT5pcnFhY3Rpb24ubWFzayA9IENQVV9NQVNLX05PTkU7CisJcmV0ID0gc2V0dXBfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOworCQlnb3RvIGVycjE7CisJfQorCisJLyogZ2V0IGhvbGQgb2YgY2xvY2sgKi8KKwlwLT5jbGsgPSBjbGtfZ2V0KCZwLT5wZGV2LT5kZXYsIGNmZy0+Y2xrKTsKKwlpZiAoSVNfRVJSKHAtPmNsaykpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGNhbm5vdCBnZXQgY2xvY2sgXCIlc1wiXG4iLCBjZmctPmNsayk7CisJCXJldCA9IFBUUl9FUlIocC0+Y2xrKTsKKwkJZ290byBlcnIyOworCX0KKworCWlmIChyZXNvdXJjZV9zaXplKHJlcykgPT0gNikgeworCQlwLT53aWR0aCA9IDE2OworCQlwLT5vdmVyZmxvd19iaXQgPSAweDgwOworCQlwLT5jbGVhcl9iaXRzID0gfjB4YzA7CisJfSBlbHNlIHsKKwkJcC0+d2lkdGggPSAzMjsKKwkJcC0+b3ZlcmZsb3dfYml0ID0gMHg4MDAwOworCQlwLT5jbGVhcl9iaXRzID0gfjB4YzAwMDsKKwl9CisKKwlyZXR1cm4gc2hfY210X3JlZ2lzdGVyKHAsIGNmZy0+bmFtZSwKKwkJCSAgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAorCQkJICAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKKyBlcnIyOgorCWZyZWVfaXJxKGlycSwgcCk7CisgZXJyMToKKwlpb3VubWFwKHAtPm1hcGJhc2UpOworIGVycjA6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc2hfY210X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKKworCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCWlmIChwID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gc2hfY210X3NldHVwKHAsIHBkZXYpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUocCk7CisKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNoX2NtdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gLUVCVVNZOyAvKiBjYW5ub3QgdW5yZWdpc3RlciBjbG9ja2V2ZW50IGFuZCBjbG9ja3NvdXJjZSAqLworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9jbXRfZGV2aWNlX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc2hfY210X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfY210X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoX2NtdCIsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hfY210X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaF9jbXRfZGV2aWNlX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaF9jbXRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzaF9jbXRfZGV2aWNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNoX2NtdF9pbml0KTsKK21vZHVsZV9leGl0KHNoX2NtdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFnbnVzIERhbW0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIENNVCBUaW1lciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IGI1NWNiNjcuLmQyNzBlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTA0LDcgKzEwNCw4IEBACiAKIAogLyogaW50ZXJuYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBldmVudCk7CitzdGF0aWMgaW50IF9fY3B1ZnJlcV9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJdW5zaWduZWQgaW50IGV2ZW50KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KTsKIHN0YXRpYyB2b2lkIGhhbmRsZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIApAQCAtMTI4LDcgKzEyOSw3IEBACiBwdXJlX2luaXRjYWxsKGluaXRfY3B1ZnJlcV90cmFuc2l0aW9uX25vdGlmaWVyX2xpc3QpOwogCiBzdGF0aWMgTElTVF9IRUFEKGNwdWZyZXFfZ292ZXJub3JfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYIChjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CiAKIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9jcHVfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7CkBAIC0zNzEsNyArMzcyLDcgQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqdDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkKLQkJaWYgKCFzdHJuaWNtcChzdHJfZ292ZXJub3IsdC0+bmFtZSxDUFVGUkVRX05BTUVfTEVOKSkKKwkJaWYgKCFzdHJuaWNtcChzdHJfZ292ZXJub3IsIHQtPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pKQogCQkJcmV0dXJuIHQ7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTQyOSwxNSArNDMwLDExIEBACiAKIAkJbXV0ZXhfdW5sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAl9Ci0gIG91dDoKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiAKLS8qIGRyaXZlcnMvYmFzZS9jcHUuYyAqLwotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgY3B1X3N5c2Rldl9jbGFzczsKLQotCiAvKioKICAqIGNwdWZyZXFfcGVyX2NwdV9hdHRyX3JlYWQoKSAvIHNob3dfIyNmaWxlX25hbWUoKSAtCiAgKiBwcmludCBvdXQgY3B1ZnJlcSBpbmZvcm1hdGlvbgpAQCAtNDUwLDExICs0NDcsMTIgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNmaWxlX25hbWUJCQkJXAogKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCQlcCiB7CQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIHBvbGljeS0+b2JqZWN0KTsJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwb2xpY3ktPm9iamVjdCk7CVwKIH0KIAogc2hvd19vbmUoY3B1aW5mb19taW5fZnJlcSwgY3B1aW5mby5taW5fZnJlcSk7CiBzaG93X29uZShjcHVpbmZvX21heF9mcmVxLCBjcHVpbmZvLm1heF9mcmVxKTsKK3Nob3dfb25lKGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5LCBjcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSk7CiBzaG93X29uZShzY2FsaW5nX21pbl9mcmVxLCBtaW4pOwogc2hvd19vbmUoc2NhbGluZ19tYXhfZnJlcSwgbWF4KTsKIHNob3dfb25lKHNjYWxpbmdfY3VyX2ZyZXEsIGN1cik7CkBAIC00NzYsNyArNDc0LDcgQEAKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJm5ld19wb2xpY3kub2JqZWN0KTsJCQlcCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJm5ld19wb2xpY3kub2JqZWN0KTsJCQlcCiAJaWYgKHJldCAhPSAxKQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTQ4Niw4ICs0ODQsOCBAQAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsJCQkJCVwKIH0KIAotc3RvcmVfb25lKHNjYWxpbmdfbWluX2ZyZXEsbWluKTsKLXN0b3JlX29uZShzY2FsaW5nX21heF9mcmVxLG1heCk7CitzdG9yZV9vbmUoc2NhbGluZ19taW5fZnJlcSwgbWluKTsKK3N0b3JlX29uZShzY2FsaW5nX21heF9mcmVxLCBtYXgpOwogCiAvKioKICAqIHNob3dfY3B1aW5mb19jdXJfZnJlcSAtIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBhcyBkZXRlY3RlZCBieSBoYXJkd2FyZQpAQCAtNTA3LDEyICs1MDUsMTMgQEAKICAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zY2FsaW5nX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JaWYocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUE9XRVJTQVZFKQorCWlmIChwb2xpY3ktPnBvbGljeSA9PSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkUpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBvd2Vyc2F2ZVxuIik7CiAJZWxzZSBpZiAocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBlcmZvcm1hbmNlXG4iKTsKIAllbHNlIGlmIChwb2xpY3ktPmdvdmVybm9yKQotCQlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzXG4iLCBwb2xpY3ktPmdvdmVybm9yLT5uYW1lKTsKKwkJcmV0dXJuIHNjbnByaW50ZihidWYsIENQVUZSRVFfTkFNRV9MRU4sICIlc1xuIiwKKwkJCQlwb2xpY3ktPmdvdmVybm9yLT5uYW1lKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNTMxLDcgKzUzMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNzY2FuZiAoYnVmLCAiJTE1cyIsIHN0cl9nb3Zlcm5vcik7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiUxNXMiLCBzdHJfZ292ZXJub3IpOwogCWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU3NSw3ICs1NzQsOCBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkgewotCQlpZiAoaSA+PSAoc3NpemVfdCkgKChQQUdFX1NJWkUgLyBzaXplb2YoY2hhcikpIC0gKENQVUZSRVFfTkFNRV9MRU4gKyAyKSkpCisJCWlmIChpID49IChzc2l6ZV90KSAoKFBBR0VfU0laRSAvIHNpemVvZihjaGFyKSkKKwkJICAgIC0gKENQVUZSRVFfTkFNRV9MRU4gKyAyKSkpCiAJCQlnb3RvIG91dDsKIAkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzICIsIHQtPm5hbWUpOwogCX0KQEAgLTU5NCw3ICs1OTQsNyBAQAogCQkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgKFBBR0VfU0laRSAtIGkgLSAyKSwgIiAiKTsKIAkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgKFBBR0VfU0laRSAtIGkgLSAyKSwgIiV1IiwgY3B1KTsKIAkJaWYgKGkgPj0gKFBBR0VfU0laRSAtIDUpKQotCQkgICAgYnJlYWs7CisJCQlicmVhazsKIAl9CiAJaSArPSBzcHJpbnRmKCZidWZbaV0sICJcbiIpOwogCXJldHVybiBpOwpAQCAtNjYwLDYgKzY2MCw3IEBACiBkZWZpbmVfb25lX3JvMDQwMChjcHVpbmZvX2N1cl9mcmVxKTsKIGRlZmluZV9vbmVfcm8oY3B1aW5mb19taW5fZnJlcSk7CiBkZWZpbmVfb25lX3JvKGNwdWluZm9fbWF4X2ZyZXEpOworZGVmaW5lX29uZV9ybyhjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSk7CiBkZWZpbmVfb25lX3JvKHNjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycyk7CiBkZWZpbmVfb25lX3JvKHNjYWxpbmdfZHJpdmVyKTsKIGRlZmluZV9vbmVfcm8oc2NhbGluZ19jdXJfZnJlcSk7CkBAIC02NzMsNiArNjc0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJmNwdWluZm9fbWluX2ZyZXEuYXR0ciwKIAkmY3B1aW5mb19tYXhfZnJlcS5hdHRyLAorCSZjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeS5hdHRyLAogCSZzY2FsaW5nX21pbl9mcmVxLmF0dHIsCiAJJnNjYWxpbmdfbWF4X2ZyZXEuYXR0ciwKIAkmYWZmZWN0ZWRfY3B1cy5hdHRyLApAQCAtNjg0LDEwICs2ODYsMTAgQEAKIAlOVUxMCiB9OwogCi0jZGVmaW5lIHRvX3BvbGljeShrKSBjb250YWluZXJfb2YoayxzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3ksa29iaikKLSNkZWZpbmUgdG9fYXR0cihhKSBjb250YWluZXJfb2YoYSxzdHJ1Y3QgZnJlcV9hdHRyLGF0dHIpCisjZGVmaW5lIHRvX3BvbGljeShrKSBjb250YWluZXJfb2Yoaywgc3RydWN0IGNwdWZyZXFfcG9saWN5LCBrb2JqKQorI2RlZmluZSB0b19hdHRyKGEpIGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgZnJlcV9hdHRyLCBhdHRyKQogCi1zdGF0aWMgc3NpemVfdCBzaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyICxjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSB0b19wb2xpY3koa29iaik7CiAJc3RydWN0IGZyZXFfYXR0ciAqZmF0dHIgPSB0b19hdHRyKGF0dHIpOwpAQCAtNzU0LDExICs3NTYsNiBAQAogCS5yZWxlYXNlCT0gY3B1ZnJlcV9zeXNmc19yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUga3R5cGVfZW1wdHlfY3B1ZnJlcSA9IHsKLQkuc3lzZnNfb3BzCT0gJnN5c2ZzX29wcywKLQkucmVsZWFzZQk9IGNwdWZyZXFfc3lzZnNfcmVsZWFzZSwKLX07Ci0KIAogLyoqCiAgKiBjcHVmcmVxX2FkZF9kZXYgLSBhZGQgYSBDUFUgZGV2aWNlCkBAIC04NTgsMTAgKzg1NSwxMCBAQAogCQlpZiAoY3B1ID09IGopCiAJCQljb250aW51ZTsKIAotCQkvKiBjaGVjayBmb3IgZXhpc3RpbmcgYWZmZWN0ZWQgQ1BVcy4gIFRoZXkgbWF5IG5vdCBiZSBhd2FyZQotCQkgKiBvZiBpdCBkdWUgdG8gQ1BVIEhvdHBsdWcuCisJCS8qIENoZWNrIGZvciBleGlzdGluZyBhZmZlY3RlZCBDUFVzLgorCQkgKiBUaGV5IG1heSBub3QgYmUgYXdhcmUgb2YgaXQgZHVlIHRvIENQVSBIb3RwbHVnLgogCQkgKi8KLQkJbWFuYWdlZF9wb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoaik7CQkvLyBGSVhNRTogV2hlcmUgaXMgdGhpcyByZWxlYXNlZD8gIFdoYXQgYWJvdXQgZXJyb3IgcGF0aHM/CisJCW1hbmFnZWRfcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGopOwkJLyogRklYTUU6IFdoZXJlIGlzIHRoaXMgcmVsZWFzZWQ/ICBXaGF0IGFib3V0IGVycm9yIHBhdGhzPyAqLwogCQlpZiAodW5saWtlbHkobWFuYWdlZF9wb2xpY3kpKSB7CiAKIAkJCS8qIFNldCBwcm9wZXIgcG9saWN5X2NwdSAqLwpAQCAtODkyLDM2ICs4ODksMjYgQEAKIAltZW1jcHkoJm5ld19wb2xpY3ksIHBvbGljeSwgc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOwogCiAJLyogcHJlcGFyZSBpbnRlcmZhY2UgZGF0YSAqLwotCWlmICghY3B1ZnJlcV9kcml2ZXItPmhpZGVfaW50ZXJmYWNlKSB7Ci0JCXJldCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZwb2xpY3ktPmtvYmosICZrdHlwZV9jcHVmcmVxLAotCQkJCQkgICAmc3lzX2Rldi0+a29iaiwgImNwdWZyZXEiKTsKKwlyZXQgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmcG9saWN5LT5rb2JqLCAma3R5cGVfY3B1ZnJlcSwgJnN5c19kZXYtPmtvYmosCisJCQkJICAgImNwdWZyZXEiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vdXRfZHJpdmVyX2V4aXQ7CisKKwkvKiBzZXQgdXAgZmlsZXMgZm9yIHRoaXMgY3B1IGRldmljZSAqLworCWRydl9hdHRyID0gY3B1ZnJlcV9kcml2ZXItPmF0dHI7CisJd2hpbGUgKChkcnZfYXR0cikgJiYgKCpkcnZfYXR0cikpIHsKKwkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBvbGljeS0+a29iaiwgJigoKmRydl9hdHRyKS0+YXR0cikpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfb3V0X2RyaXZlcl9leGl0OwotCi0JCS8qIHNldCB1cCBmaWxlcyBmb3IgdGhpcyBjcHUgZGV2aWNlICovCi0JCWRydl9hdHRyID0gY3B1ZnJlcV9kcml2ZXItPmF0dHI7Ci0JCXdoaWxlICgoZHJ2X2F0dHIpICYmICgqZHJ2X2F0dHIpKSB7Ci0JCQlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmcG9saWN5LT5rb2JqLAotCQkJCQkJJigoKmRydl9hdHRyKS0+YXR0cikpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycl9vdXRfZHJpdmVyX2V4aXQ7Ci0JCQlkcnZfYXR0cisrOwotCQl9Ci0JCWlmIChjcHVmcmVxX2RyaXZlci0+Z2V0KSB7Ci0JCQlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmcG9saWN5LT5rb2JqLAotCQkJCQkJJmNwdWluZm9fY3VyX2ZyZXEuYXR0cik7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXJyX291dF9kcml2ZXJfZXhpdDsKLQkJfQotCQlpZiAoY3B1ZnJlcV9kcml2ZXItPnRhcmdldCkgewotCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBvbGljeS0+a29iaiwKLQkJCQkJCSZzY2FsaW5nX2N1cl9mcmVxLmF0dHIpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycl9vdXRfZHJpdmVyX2V4aXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlyZXQgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmcG9saWN5LT5rb2JqLCAma3R5cGVfZW1wdHlfY3B1ZnJlcSwKLQkJCQkJICAgJnN5c19kZXYtPmtvYmosICJjcHVmcmVxIik7CisJCWRydl9hdHRyKys7CisJfQorCWlmIChjcHVmcmVxX2RyaXZlci0+Z2V0KSB7CisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZwb2xpY3ktPmtvYmosICZjcHVpbmZvX2N1cl9mcmVxLmF0dHIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfb3V0X2RyaXZlcl9leGl0OworCX0KKwlpZiAoY3B1ZnJlcV9kcml2ZXItPnRhcmdldCkgeworCQlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmcG9saWN5LT5rb2JqLCAmc2NhbGluZ19jdXJfZnJlcS5hdHRyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX291dF9kcml2ZXJfZXhpdDsKIAl9CkBAIC0xMTQyLDggKzExMjksOCBAQAogICoJQG9sZF9mcmVxOiBDUFUgZnJlcXVlbmN5IHRoZSBrZXJuZWwgdGhpbmtzIHRoZSBDUFUgcnVucyBhdAogICoJQG5ld19mcmVxOiBDUFUgZnJlcXVlbmN5IHRoZSBDUFUgYWN0dWFsbHkgcnVucyBhdAogICoKLSAqCVdlIGFkanVzdCB0byBjdXJyZW50IGZyZXF1ZW5jeSBmaXJzdCwgYW5kIG5lZWQgdG8gY2xlYW4gdXAgbGF0ZXIuIFNvIGVpdGhlciBjYWxsCi0gKgl0byBjcHVmcmVxX3VwZGF0ZV9wb2xpY3koKSBvciBzY2hlZHVsZSBoYW5kbGVfdXBkYXRlKCkpLgorICoJV2UgYWRqdXN0IHRvIGN1cnJlbnQgZnJlcXVlbmN5IGZpcnN0LCBhbmQgbmVlZCB0byBjbGVhbiB1cCBsYXRlci4KKyAqCVNvIGVpdGhlciBjYWxsIHRvIGNwdWZyZXFfdXBkYXRlX3BvbGljeSgpIG9yIHNjaGVkdWxlIGhhbmRsZV91cGRhdGUoKSkuCiAgKi8KIHN0YXRpYyB2b2lkIGNwdWZyZXFfb3V0X29mX3N5bmModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IG9sZF9mcmVxLAogCQkJCXVuc2lnbmVkIGludCBuZXdfZnJlcSkKQEAgLTE2MjUsNyArMTYxMiw4IEBACiAKIC8qKgogICogY3B1ZnJlcV9nZXRfcG9saWN5IC0gZ2V0IHRoZSBjdXJyZW50IGNwdWZyZXFfcG9saWN5Ci0gKiBAcG9saWN5OiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgaW50byB3aGljaCB0aGUgY3VycmVudCBjcHVmcmVxX3BvbGljeSBpcyB3cml0dGVuCisgKiBAcG9saWN5OiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgaW50byB3aGljaCB0aGUgY3VycmVudCBjcHVmcmVxX3BvbGljeQorICoJaXMgd3JpdHRlbgogICoKICAqIFJlYWRzIHRoZSBjdXJyZW50IGNwdWZyZXEgcG9saWN5LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IDAzMjA5NjIuLjJlY2Q5NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoQykgIDIwMDEgUnVzc2VsbCBLaW5nCiAgKiAgICAgICAgICAgIChDKSAgMjAwMyBWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4uCiAgKiAgICAgICAgICAgICAgICAgICAgICBKdW4gTmFrYWppbWEgPGp1bi5uYWthamltYUBpbnRlbC5jb20+Ci0gKiAgICAgICAgICAgIChDKSAgMjAwNCBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleC1rZXJuZWxAZGlncml6Lm9yZy51az4KKyAqICAgICAgICAgICAgKEMpICAyMDA5IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMywyMiArMTMsMTcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwogLyoKICAqIGRicyBpcyB1c2VkIGluIHRoaXMgZmlsZSBhcyBhIHNob3J0Zm9ybSBmb3IgZGVtYW5kYmFzZWQgc3dpdGNoaW5nCiAgKiBJdCBoZWxwcyB0byBrZWVwIHZhcmlhYmxlIG5hbWVzIHNtYWxsZXIsIHNpbXBsZXIKQEAgLTQzLDE5ICszOCwzMSBAQAogICogbGF0ZW5jeSBvZiB0aGUgcHJvY2Vzc29yLiBUaGUgZ292ZXJub3Igd2lsbCB3b3JrIG9uIGFueSBwcm9jZXNzb3Igd2l0aAogICogdHJhbnNpdGlvbiBsYXRlbmN5IDw9IDEwbVMsIHVzaW5nIGFwcHJvcHJpYXRlIHNhbXBsaW5nCiAgKiByYXRlLgotICogRm9yIENQVXMgd2l0aCB0cmFuc2l0aW9uIGxhdGVuY3kgPiAxMG1TIChtb3N0bHkgZHJpdmVycwotICogd2l0aCBDUFVGUkVRX0VURVJOQUwpLCB0aGlzIGdvdmVybm9yIHdpbGwgbm90IHdvcmsuCisgKiBGb3IgQ1BVcyB3aXRoIHRyYW5zaXRpb24gbGF0ZW5jeSA+IDEwbVMgKG1vc3RseSBkcml2ZXJzIHdpdGggQ1BVRlJFUV9FVEVSTkFMKQorICogdGhpcyBnb3Zlcm5vciB3aWxsIG5vdCB3b3JrLgogICogQWxsIHRpbWVzIGhlcmUgYXJlIGluIHVTLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZl9zYW1wbGluZ19yYXRlOwogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURV9SQVRJTwkJCSgyKQogLyogZm9yIGNvcnJlY3Qgc3RhdGlzdGljcywgd2UgbmVlZCBhdCBsZWFzdCAxMCB0aWNrcyBiZXR3ZWVuIGVhY2ggbWVhc3VyZSAqLwotI2RlZmluZSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCQkJXAorI2RlZmluZSBNSU5fU1RBVF9TQU1QTElOR19SQVRFIAkJCVwKIAkJCShNSU5fU0FNUExJTkdfUkFURV9SQVRJTyAqIGppZmZpZXNfdG9fdXNlY3MoMTApKQogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURQkJCVwKIAkJCShkZWZfc2FtcGxpbmdfcmF0ZSAvIE1JTl9TQU1QTElOR19SQVRFX1JBVElPKQorLyogQWJvdmUgTUlOX1NBTVBMSU5HX1JBVEUgd2lsbCB2YW5pc2ggd2l0aCBpdHMgc3lzZnMgZmlsZSBzb29uCisgKiBEZWZpbmUgdGhlIG1pbmltYWwgc2V0dGFibGUgc2FtcGxpbmcgcmF0ZSB0byB0aGUgZ3JlYXRlciBvZjoKKyAqICAgLSAiSFcgdHJhbnNpdGlvbiBsYXRlbmN5IiAqIDEwMCAoc2FtZSBhcyBkZWZhdWx0IHNhbXBsaW5nIC8gMTApCisgKiAgIC0gTUlOX1NUQVRfU0FNUExJTkdfUkFURQorICogVG8gYXZvaWQgdGhhdCB1c2Vyc3BhY2Ugc2hvb3RzIGl0c2VsZi4KKyovCitzdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc2FtcGxpbmdfcmF0ZSh2b2lkKQoreworCXJldHVybiBtYXgoZGVmX3NhbXBsaW5nX3JhdGUgLyAxMCwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7Cit9CisKKy8qIFRoaXMgd2lsbCBhbHNvIHZhbmlzaCBzb29uIHdpdGggcmVtb3Zpbmcgc2FtcGxpbmdfcmF0ZV9tYXggKi8KICNkZWZpbmUgTUFYX1NBTVBMSU5HX1JBVEUJCQkoNTAwICogZGVmX3NhbXBsaW5nX3JhdGUpCi0jZGVmaW5lIERFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUgkoMTAwMCkKKyNkZWZpbmUgTEFURU5DWV9NVUxUSVBMSUVSCQkJKDEwMDApCiAjZGVmaW5lIERFRl9TQU1QTElOR19ET1dOX0ZBQ1RPUgkJKDEpCiAjZGVmaW5lIE1BWF9TQU1QTElOR19ET1dOX0ZBQ1RPUgkJKDEwKQogI2RlZmluZSBUUkFOU0lUSU9OX0xBVEVOQ1lfTElNSVQJCSgxMCAqIDEwMDAgKiAxMDAwKQpAQCAtNjMsMTIgKzcwLDE1IEBACiBzdGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RydWN0IGNwdV9kYnNfaW5mb19zIHsKKwljcHV0aW1lNjRfdCBwcmV2X2NwdV9pZGxlOworCWNwdXRpbWU2NF90IHByZXZfY3B1X3dhbGw7CisJY3B1dGltZTY0X3QgcHJldl9jcHVfbmljZTsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmN1cl9wb2xpY3k7Ci0JdW5zaWduZWQgaW50IHByZXZfY3B1X2lkbGVfdXA7Ci0JdW5zaWduZWQgaW50IHByZXZfY3B1X2lkbGVfZG93bjsKLQl1bnNpZ25lZCBpbnQgZW5hYmxlOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAl1bnNpZ25lZCBpbnQgZG93bl9za2lwOwogCXVuc2lnbmVkIGludCByZXF1ZXN0ZWRfZnJlcTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGludCBlbmFibGU6MTsKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9kYnNfaW5mb19zLCBjcHVfZGJzX2luZm8pOwogCkBAIC04MiwxOSArOTIsMTggQEAKICAqIGNwdV9ob3RwbHVnIGxvY2sgc2hvdWxkIGJlIHRha2VuIGJlZm9yZSB0aGF0LiBOb3RlIHRoYXQgY3B1X2hvdHBsdWcgbG9jawogICogaXMgcmVjdXJzaXZlIGZvciB0aGUgc2FtZSBwcm9jZXNzLiAtVmVua2kKICAqLwotc3RhdGljIERFRklORV9NVVRFWCAoZGJzX211dGV4KTsKLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhkYnNfd29yaywgZG9fZGJzX3RpbWVyKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZGJzX211dGV4KTsKIAotc3RydWN0IGRic190dW5lcnMgeworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSprY29uc2VydmF0aXZlX3dxOworCitzdGF0aWMgc3RydWN0IGRic190dW5lcnMgewogCXVuc2lnbmVkIGludCBzYW1wbGluZ19yYXRlOwogCXVuc2lnbmVkIGludCBzYW1wbGluZ19kb3duX2ZhY3RvcjsKIAl1bnNpZ25lZCBpbnQgdXBfdGhyZXNob2xkOwogCXVuc2lnbmVkIGludCBkb3duX3RocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgaWdub3JlX25pY2U7CiAJdW5zaWduZWQgaW50IGZyZXFfc3RlcDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGJzX3R1bmVycyBkYnNfdHVuZXJzX2lucyA9IHsKK30gZGJzX3R1bmVyc19pbnMgPSB7CiAJLnVwX3RocmVzaG9sZCA9IERFRl9GUkVRVUVOQ1lfVVBfVEhSRVNIT0xELAogCS5kb3duX3RocmVzaG9sZCA9IERFRl9GUkVRVUVOQ1lfRE9XTl9USFJFU0hPTEQsCiAJLnNhbXBsaW5nX2Rvd25fZmFjdG9yID0gREVGX1NBTVBMSU5HX0RPV05fRkFDVE9SLApAQCAtMTAyLDE4ICsxMTEsMzcgQEAKIAkuZnJlcV9zdGVwID0gNSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lX2ppZmZ5KHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQkJY3B1dGltZTY0X3QgKndhbGwpCiB7Ci0JdW5zaWduZWQgaW50IGFkZF9uaWNlID0gMCwgcmV0OworCWNwdXRpbWU2NF90IGlkbGVfdGltZTsKKwljcHV0aW1lNjRfdCBjdXJfd2FsbF90aW1lOworCWNwdXRpbWU2NF90IGJ1c3lfdGltZTsKIAotCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkKLQkJYWRkX25pY2UgPSBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lm5pY2U7CisJY3VyX3dhbGxfdGltZSA9IGppZmZpZXM2NF90b19jcHV0aW1lNjQoZ2V0X2ppZmZpZXNfNjQoKSk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnVzZXIsCisJCQlrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnN5c3RlbSk7CiAKLQlyZXQgPSBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LmlkbGUgKwotCQlrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lmlvd2FpdCArCi0JCWFkZF9uaWNlOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LmlycSk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuc29mdGlycSk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuc3RlYWwpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lm5pY2UpOwogCi0JcmV0dXJuIHJldDsKKwlpZGxlX3RpbWUgPSBjcHV0aW1lNjRfc3ViKGN1cl93YWxsX3RpbWUsIGJ1c3lfdGltZSk7CisJaWYgKHdhbGwpCisJCSp3YWxsID0gY3VyX3dhbGxfdGltZTsKKworCXJldHVybiBpZGxlX3RpbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpCit7CisJdTY0IGlkbGVfdGltZSA9IGdldF9jcHVfaWRsZV90aW1lX3VzKGNwdSwgd2FsbCk7CisKKwlpZiAoaWRsZV90aW1lID09IC0xVUxMKQorCQlyZXR1cm4gZ2V0X2NwdV9pZGxlX3RpbWVfamlmZnkoY3B1LCB3YWxsKTsKKworCXJldHVybiBpZGxlX3RpbWU7CiB9CiAKIC8qIGtlZXAgdHJhY2sgb2YgZnJlcXVlbmN5IHRyYW5zaXRpb25zICovCkBAIC0xMjUsMTAgKzE1MywyMSBAQAogCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywKIAkJCQkJCQlmcmVxLT5jcHUpOwogCisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisKIAlpZiAoIXRoaXNfZGJzX2luZm8tPmVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKLQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IGZyZXEtPm5ldzsKKwlwb2xpY3kgPSB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5OworCisJLyoKKwkgKiB3ZSBvbmx5IGNhcmUgaWYgb3VyIGludGVybmFsbHkgdHJhY2tlZCBmcmVxIG1vdmVzIG91dHNpZGUKKwkgKiB0aGUgJ3ZhbGlkJyByYW5nZXMgb2YgZnJlcWVuY3kgYXZhaWxhYmxlIHRvIHVzIG90aGVyd2lzZQorCSAqIHdlIGRvIG5vdCBjaGFuZ2UgaXQKKwkqLworCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA+IHBvbGljeS0+bWF4CisJCQl8fCB0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA8IHBvbGljeS0+bWluKQorCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IGZyZXEtPm5ldzsKIAogCXJldHVybiAwOwogfQpAQCAtMTQwLDE2ICsxNzksMzEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBzeXNmcyBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21heChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBjb25zZXJ2YXRpdmUgc2FtcGxpbmdfcmF0ZV9tYXggIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWluKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IGNvbnNlcnZhdGl2ZSBzYW1wbGluZ19yYXRlX21heCAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKIH0KIAotI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJCQlcCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciBfbmFtZSA9CQkJCVwKKyNkZWZpbmUgZGVmaW5lX29uZV9ybyhfbmFtZSkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyIF9uYW1lID0JCVwKIF9fQVRUUihfbmFtZSwgMDQ0NCwgc2hvd18jI19uYW1lLCBOVUxMKQogCiBkZWZpbmVfb25lX3JvKHNhbXBsaW5nX3JhdGVfbWF4KTsKQEAgLTE3NCw3ICsyMjgsOCBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CisKIAlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfRE9XTl9GQUNUT1IgfHwgaW5wdXQgPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTkwLDE1ICsyNDUsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOworCisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gTUFYX1NBTVBMSU5HX1JBVEUgfHwgaW5wdXQgPCBNSU5fU0FNUExJTkdfUkFURSkgewotCQltdXRleF91bmxvY2soJmRic19tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBpbnB1dDsKKwlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gbWF4KGlucHV0LCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUoKSk7CiAJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMjA5LDEwICsyNjIsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPD0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpIHsKKwlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwKKwkJCWlucHV0IDw9IGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjI4LDEwICsyODIsMTIgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPj0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CisJLyogY2Fubm90IGJlIGxvd2VyIHRoYW4gMTEgb3RoZXJ3aXNlIGZyZXEgd2lsbCBub3QgZmFsbCAqLworCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA8IDExIHx8IGlucHV0ID4gMTAwIHx8CisJCQlpbnB1dCA+PSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNjQsMTIgKzMyMCwxNCBAQAogCX0KIAlkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSA9IGlucHV0OwogCi0JLyogd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBwcmV2X2NwdV9pZGxlX3VwIGFuZCBwcmV2X2NwdV9pZGxlX2Rvd24gKi8KKwkvKiB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHByZXZfY3B1X2lkbGUgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKLQkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpqX2Ric19pbmZvOwotCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKLQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cCA9IGdldF9jcHVfaWRsZV90aW1lKGopOwotCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24gPSBqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOworCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvOworCQlkYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CisJCWRic19pbmZvLT5wcmV2X2NwdV9pZGxlID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwKKwkJCQkJCSZkYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7CisJCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkKKwkJCWRic19pbmZvLT5wcmV2X2NwdV9uaWNlID0ga3N0YXRfY3B1KGopLmNwdXN0YXQubmljZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCkBAIC0yODEsNyArMzM5LDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAlpZiAocmV0ICE9IDEpCkBAIC0zMTAsNyArMzY3LDcgQEAKIGRlZmluZV9vbmVfcncoaWdub3JlX25pY2VfbG9hZCk7CiBkZWZpbmVfb25lX3J3KGZyZXFfc3RlcCk7CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZGJzX2F0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYnNfYXR0cmlidXRlc1tdID0gewogCSZzYW1wbGluZ19yYXRlX21heC5hdHRyLAogCSZzYW1wbGluZ19yYXRlX21pbi5hdHRyLAogCSZzYW1wbGluZ19yYXRlLmF0dHIsCkBAIC0zMjksNTUgKzM4Niw3OCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogc3lzZnMgZW5kICoqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgZGJzX2NoZWNrX2NwdShpbnQgY3B1KQorc3RhdGljIHZvaWQgZGJzX2NoZWNrX2NwdShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8pCiB7Ci0JdW5zaWduZWQgaW50IGlkbGVfdGlja3MsIHVwX2lkbGVfdGlja3MsIGRvd25faWRsZV90aWNrczsKLQl1bnNpZ25lZCBpbnQgdG1wX2lkbGVfdGlja3MsIHRvdGFsX2lkbGVfdGlja3M7CisJdW5zaWduZWQgaW50IGxvYWQgPSAwOwogCXVuc2lnbmVkIGludCBmcmVxX3RhcmdldDsKLQl1bnNpZ25lZCBpbnQgZnJlcV9kb3duX3NhbXBsaW5nX3JhdGU7Ci0Jc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBjcHUpOwotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OwogCi0JaWYgKCF0aGlzX2Ric19pbmZvLT5lbmFibGUpCi0JCXJldHVybjsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwl1bnNpZ25lZCBpbnQgajsKIAogCXBvbGljeSA9IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3k7CiAKIAkvKgotCSAqIFRoZSBkZWZhdWx0IHNhZmUgcmFuZ2UgaXMgMjAlIHRvIDgwJQotCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUsIHdlIGNoZWNrCi0JICoJLSBJZiBjdXJyZW50IGlkbGUgdGltZSBpcyBsZXNzIHRoYW4gMjAlLCB0aGVuIHdlIHRyeSB0bwotCSAqCSAgaW5jcmVhc2UgZnJlcXVlbmN5Ci0JICogRXZlcnkgc2FtcGxpbmdfcmF0ZSpzYW1wbGluZ19kb3duX2ZhY3Rvciwgd2UgY2hlY2sKLQkgKgktIElmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIG1vcmUgdGhhbiA4MCUsIHRoZW4gd2UgdHJ5IHRvCi0JICoJICBkZWNyZWFzZSBmcmVxdWVuY3kKKwkgKiBFdmVyeSBzYW1wbGluZ19yYXRlLCB3ZSBjaGVjaywgaWYgY3VycmVudCBpZGxlIHRpbWUgaXMgbGVzcworCSAqIHRoYW4gMjAlIChkZWZhdWx0KSwgdGhlbiB3ZSB0cnkgdG8gaW5jcmVhc2UgZnJlcXVlbmN5CisJICogRXZlcnkgc2FtcGxpbmdfcmF0ZSpzYW1wbGluZ19kb3duX2ZhY3Rvciwgd2UgY2hlY2ssIGlmIGN1cnJlbnQKKwkgKiBpZGxlIHRpbWUgaXMgbW9yZSB0aGFuIDgwJSwgdGhlbiB3ZSB0cnkgdG8gZGVjcmVhc2UgZnJlcXVlbmN5CiAJICoKIAkgKiBBbnkgZnJlcXVlbmN5IGluY3JlYXNlIHRha2VzIGl0IHRvIHRoZSBtYXhpbXVtIGZyZXF1ZW5jeS4KIAkgKiBGcmVxdWVuY3kgcmVkdWN0aW9uIGhhcHBlbnMgYXQgbWluaW11bSBzdGVwcyBvZgotCSAqIDUlIChkZWZhdWx0KSBvZiBtYXhfZnJlcXVlbmN5CisJICogNSUgKGRlZmF1bHQpIG9mIG1heGltdW0gZnJlcXVlbmN5CiAJICovCiAKLQkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGluY3JlYXNlICovCi0JaWRsZV90aWNrcyA9IFVJTlRfTUFYOworCS8qIEdldCBBYnNvbHV0ZSBMb2FkICovCisJZm9yX2VhY2hfY3B1KGosIHBvbGljeS0+Y3B1cykgeworCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87CisJCWNwdXRpbWU2NF90IGN1cl93YWxsX3RpbWUsIGN1cl9pZGxlX3RpbWU7CisJCXVuc2lnbmVkIGludCBpZGxlX3RpbWUsIHdhbGxfdGltZTsKKworCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKKworCQljdXJfaWRsZV90aW1lID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwgJmN1cl93YWxsX3RpbWUpOworCisJCXdhbGxfdGltZSA9ICh1bnNpZ25lZCBpbnQpIGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwKKwkJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsKTsKKwkJal9kYnNfaW5mby0+cHJldl9jcHVfd2FsbCA9IGN1cl93YWxsX3RpbWU7CisKKwkJaWRsZV90aW1lID0gKHVuc2lnbmVkIGludCkgY3B1dGltZTY0X3N1YihjdXJfaWRsZV90aW1lLAorCQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUpOworCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlID0gY3VyX2lkbGVfdGltZTsKKworCQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpIHsKKwkJCWNwdXRpbWU2NF90IGN1cl9uaWNlOworCQkJdW5zaWduZWQgbG9uZyBjdXJfbmljZV9qaWZmaWVzOworCisJCQljdXJfbmljZSA9IGNwdXRpbWU2NF9zdWIoa3N0YXRfY3B1KGopLmNwdXN0YXQubmljZSwKKwkJCQkJIGpfZGJzX2luZm8tPnByZXZfY3B1X25pY2UpOworCQkJLyoKKwkJCSAqIEFzc3VtcHRpb246IG5pY2UgdGltZSBiZXR3ZWVuIHNhbXBsaW5nIHBlcmlvZHMgd2lsbAorCQkJICogYmUgbGVzcyB0aGFuIDJeMzIgamlmZmllcyBmb3IgMzIgYml0IHN5cworCQkJICovCisJCQljdXJfbmljZV9qaWZmaWVzID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJCWNwdXRpbWU2NF90b19qaWZmaWVzNjQoY3VyX25pY2UpOworCisJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlID0ga3N0YXRfY3B1KGopLmNwdXN0YXQubmljZTsKKwkJCWlkbGVfdGltZSArPSBqaWZmaWVzX3RvX3VzZWNzKGN1cl9uaWNlX2ppZmZpZXMpOworCQl9CisKKwkJaWYgKHVubGlrZWx5KCF3YWxsX3RpbWUgfHwgd2FsbF90aW1lIDwgaWRsZV90aW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWxvYWQgPSAxMDAgKiAod2FsbF90aW1lIC0gaWRsZV90aW1lKSAvIHdhbGxfdGltZTsKKwl9CisKKwkvKgorCSAqIGJyZWFrIG91dCBpZiB3ZSAnY2Fubm90JyByZWR1Y2UgdGhlIHNwZWVkIGFzIHRoZSB1c2VyIG1pZ2h0CisJICogd2FudCBmcmVxX3N0ZXAgdG8gYmUgemVybworCSAqLworCWlmIChkYnNfdHVuZXJzX2lucy5mcmVxX3N0ZXAgPT0gMCkKKwkJcmV0dXJuOwogCiAJLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBpbmNyZWFzZSAqLwotCXRvdGFsX2lkbGVfdGlja3MgPSBnZXRfY3B1X2lkbGVfdGltZShjcHUpOwotCXRtcF9pZGxlX3RpY2tzID0gdG90YWxfaWRsZV90aWNrcyAtCi0JCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7Ci0JdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cCA9IHRvdGFsX2lkbGVfdGlja3M7Ci0KLQlpZiAodG1wX2lkbGVfdGlja3MgPCBpZGxlX3RpY2tzKQotCQlpZGxlX3RpY2tzID0gdG1wX2lkbGVfdGlja3M7Ci0KLQkvKiBTY2FsZSBpZGxlIHRpY2tzIGJ5IDEwMCBhbmQgY29tcGFyZSB3aXRoIHVwIGFuZCBkb3duIHRpY2tzICovCi0JaWRsZV90aWNrcyAqPSAxMDA7Ci0JdXBfaWRsZV90aWNrcyA9ICgxMDAgLSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpICoKLQkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7Ci0KLQlpZiAoaWRsZV90aWNrcyA8IHVwX2lkbGVfdGlja3MpIHsKKwlpZiAobG9hZCA+IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgewogCQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPSAwOwotCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24gPQotCQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKIAogCQkvKiBpZiB3ZSBhcmUgYWxyZWFkeSBhdCBmdWxsIHNwZWVkIHRoZW4gYnJlYWsgb3V0IGVhcmx5ICovCiAJCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9PSBwb2xpY3ktPm1heCkKQEAgLTM5OCw0OSArNDc4LDI0IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGRlY3JlYXNlICovCi0JdGhpc19kYnNfaW5mby0+ZG93bl9za2lwKys7Ci0JaWYgKHRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA8IGRic190dW5lcnNfaW5zLnNhbXBsaW5nX2Rvd25fZmFjdG9yKQotCQlyZXR1cm47Ci0KLQkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGRlY3JlYXNlICovCi0JdG90YWxfaWRsZV90aWNrcyA9IHRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7Ci0JdG1wX2lkbGVfdGlja3MgPSB0b3RhbF9pZGxlX3RpY2tzIC0KLQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duOwotCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93biA9IHRvdGFsX2lkbGVfdGlja3M7Ci0KLQlpZiAodG1wX2lkbGVfdGlja3MgPCBpZGxlX3RpY2tzKQotCQlpZGxlX3RpY2tzID0gdG1wX2lkbGVfdGlja3M7Ci0KLQkvKiBTY2FsZSBpZGxlIHRpY2tzIGJ5IDEwMCBhbmQgY29tcGFyZSB3aXRoIHVwIGFuZCBkb3duIHRpY2tzICovCi0JaWRsZV90aWNrcyAqPSAxMDA7Ci0JdGhpc19kYnNfaW5mby0+ZG93bl9za2lwID0gMDsKLQotCWZyZXFfZG93bl9zYW1wbGluZ19yYXRlID0gZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSAqCi0JCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX2Rvd25fZmFjdG9yOwotCWRvd25faWRsZV90aWNrcyA9ICgxMDAgLSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgKgotCQl1c2Vjc190b19qaWZmaWVzKGZyZXFfZG93bl9zYW1wbGluZ19yYXRlKTsKLQotCWlmIChpZGxlX3RpY2tzID4gZG93bl9pZGxlX3RpY2tzKSB7Ci0JCS8qCi0JCSAqIGlmIHdlIGFyZSBhbHJlYWR5IGF0IHRoZSBsb3dlc3Qgc3BlZWQgdGhlbiBicmVhayBvdXQgZWFybHkKLQkJICogb3IgaWYgd2UgJ2Nhbm5vdCcgcmVkdWNlIHRoZSBzcGVlZCBhcyB0aGUgdXNlciBtaWdodCB3YW50Ci0JCSAqIGZyZXFfdGFyZ2V0IHRvIGJlIHplcm8KLQkJICovCi0JCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9PSBwb2xpY3ktPm1pbgotCQkJCXx8IGRic190dW5lcnNfaW5zLmZyZXFfc3RlcCA9PSAwKQotCQkJcmV0dXJuOwotCisJLyoKKwkgKiBUaGUgb3B0aW1hbCBmcmVxdWVuY3kgaXMgdGhlIGZyZXF1ZW5jeSB0aGF0IGlzIHRoZSBsb3dlc3QgdGhhdAorCSAqIGNhbiBzdXBwb3J0IHRoZSBjdXJyZW50IENQVSB1c2FnZSB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHVwCisJICogcG9saWN5LiBUbyBiZSBzYWZlLCB3ZSBmb2N1cyAxMCBwb2ludHMgdW5kZXIgdGhlIHRocmVzaG9sZC4KKwkgKi8KKwlpZiAobG9hZCA8IChkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCAtIDEwKSkgewogCQlmcmVxX3RhcmdldCA9IChkYnNfdHVuZXJzX2lucy5mcmVxX3N0ZXAgKiBwb2xpY3ktPm1heCkgLyAxMDA7CiAKLQkJLyogbWF4IGZyZXEgY2Fubm90IGJlIGxlc3MgdGhhbiAxMDAuIEJ1dCB3aG8ga25vd3MuLi4uICovCi0JCWlmICh1bmxpa2VseShmcmVxX3RhcmdldCA9PSAwKSkKLQkJCWZyZXFfdGFyZ2V0ID0gNTsKLQogCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSAtPSBmcmVxX3RhcmdldDsKIAkJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIDwgcG9saWN5LT5taW4pCiAJCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IHBvbGljeS0+bWluOwogCisJCS8qCisJCSAqIGlmIHdlIGNhbm5vdCByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBhbnltb3JlLCBicmVhayBvdXQgZWFybHkKKwkJICovCisJCWlmIChwb2xpY3ktPmN1ciA9PSBwb2xpY3ktPm1pbikKKwkJCXJldHVybjsKKwogCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxLAogCQkJCUNQVUZSRVFfUkVMQVRJT05fSCk7CiAJCXJldHVybjsKQEAgLTQ0OSwyNyArNTA0LDQ1IEBACiAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaW50IGk7Ci0JbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCi0JCWRic19jaGVja19jcHUoaSk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkYnNfd29yaywKLQkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOwotCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKKwlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcHVfZGJzX2luZm9fcywgd29yay53b3JrKTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGJzX2luZm8tPmNwdTsKKworCS8qIFdlIHdhbnQgYWxsIENQVXMgdG8gZG8gc2FtcGxpbmcgbmVhcmx5IG9uIHNhbWUgamlmZnkgKi8KKwlpbnQgZGVsYXkgPSB1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpOworCisJZGVsYXkgLT0gamlmZmllcyAlIGRlbGF5OworCisJaWYgKGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSkgPCAwKQorCQlyZXR1cm47CisKKwlpZiAoIWRic19pbmZvLT5lbmFibGUpIHsKKwkJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOworCQlyZXR1cm47CisJfQorCisJZGJzX2NoZWNrX2NwdShkYnNfaW5mbyk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmtfb24oY3B1LCBrY29uc2VydmF0aXZlX3dxLCAmZGJzX2luZm8tPndvcmssIGRlbGF5KTsKKwl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9pbml0KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8pCiB7Ci0JaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZkYnNfd29yay50aW1lcik7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkYnNfd29yaywKLQkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOwotCXJldHVybjsKKwkvKiBXZSB3YW50IGFsbCBDUFVzIHRvIGRvIHNhbXBsaW5nIG5lYXJseSBvbiBzYW1lIGppZmZ5ICovCisJaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKTsKKwlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CisKKwlkYnNfaW5mby0+ZW5hYmxlID0gMTsKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZkYnNfaW5mby0+d29yaywgZG9fZGJzX3RpbWVyKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmtfb24oZGJzX2luZm8tPmNwdSwga2NvbnNlcnZhdGl2ZV93cSwgJmRic19pbmZvLT53b3JrLAorCQkJCWRlbGF5KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9leGl0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZkYnNfd29yayk7Ci0JcmV0dXJuOworCWRic19pbmZvLT5lbmFibGUgPSAwOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRic19pbmZvLT53b3JrKTsKIH0KIAogc3RhdGljIGludCBjcHVmcmVxX2dvdmVybm9yX2RicyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKQEAgLTUwMywxMSArNTc2LDEzIEBACiAJCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKIAkJCWpfZGJzX2luZm8tPmN1cl9wb2xpY3kgPSBwb2xpY3k7CiAKLQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXAgPSBnZXRfY3B1X2lkbGVfdGltZShjcHUpOwotCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duCi0JCQkJPSBqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOworCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1lKGosCisJCQkJCQkmal9kYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7CisJCQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpIHsKKwkJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlID0KKwkJCQkJCWtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2U7CisJCQl9CiAJCX0KLQkJdGhpc19kYnNfaW5mby0+ZW5hYmxlID0gMTsKIAkJdGhpc19kYnNfaW5mby0+ZG93bl9za2lwID0gMDsKIAkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBwb2xpY3ktPmN1cjsKIApAQCAtNTIzLDM4ICs1OTgsMzYgQEAKIAkJCWlmIChsYXRlbmN5ID09IDApCiAJCQkJbGF0ZW5jeSA9IDE7CiAKLQkJCWRlZl9zYW1wbGluZ19yYXRlID0gMTAgKiBsYXRlbmN5ICoKLQkJCQkJREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSOwotCi0JCQlpZiAoZGVmX3NhbXBsaW5nX3JhdGUgPCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKQotCQkJCWRlZl9zYW1wbGluZ19yYXRlID0gTUlOX1NUQVRfU0FNUExJTkdfUkFURTsKKwkJCWRlZl9zYW1wbGluZ19yYXRlID0KKwkJCQltYXgobGF0ZW5jeSAqIExBVEVOQ1lfTVVMVElQTElFUiwKKwkJCQkgICAgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7CiAKIAkJCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBkZWZfc2FtcGxpbmdfcmF0ZTsKIAotCQkJZGJzX3RpbWVyX2luaXQoKTsKIAkJCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoCiAJCQkJCSZkYnNfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKIAkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKIAkJfQorCQlkYnNfdGltZXJfaW5pdCh0aGlzX2Ric19pbmZvKTsKIAogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CisKIAkJYnJlYWs7CiAKIAljYXNlIENQVUZSRVFfR09WX1NUT1A6CiAJCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JCXRoaXNfZGJzX2luZm8tPmVuYWJsZSA9IDA7CisJCWRic190aW1lcl9leGl0KHRoaXNfZGJzX2luZm8pOwogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJmRic19hdHRyX2dyb3VwKTsKIAkJZGJzX2VuYWJsZS0tOworCiAJCS8qCiAJCSAqIFN0b3AgdGhlIHRpbWVyc2NoZWR1bGUgd29yaywgd2hlbiB0aGlzIGdvdmVybm9yCiAJCSAqIGlzIHVzZWQgZm9yIGZpcnN0IHRpbWUKIAkJICovCi0JCWlmIChkYnNfZW5hYmxlID09IDApIHsKLQkJCWRic190aW1lcl9leGl0KCk7CisJCWlmIChkYnNfZW5hYmxlID09IDApCiAJCQljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoCiAJCQkJCSZkYnNfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKIAkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKLQkJfQogCiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIApAQCAtNTcxLDYgKzY0NCw3IEBACiAJCQkJCXRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ksCiAJCQkJCXBvbGljeS0+bWluLCBDUFVGUkVRX1JFTEFUSU9OX0wpOwogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CisKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtNTg4LDIzICs2NjIsMzMgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV9nb3ZfZGJzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfY29uc2VydmF0aXZlKTsKKwlpbnQgZXJyOworCisJa2NvbnNlcnZhdGl2ZV93cSA9IGNyZWF0ZV93b3JrcXVldWUoImtjb25zZXJ2YXRpdmUiKTsKKwlpZiAoIWtjb25zZXJ2YXRpdmVfd3EpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDcmVhdGlvbiBvZiBrY29uc2VydmF0aXZlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWVyciA9IGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292X2NvbnNlcnZhdGl2ZSk7CisJaWYgKGVycikKKwkJZGVzdHJveV93b3JrcXVldWUoa2NvbnNlcnZhdGl2ZV93cSk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9nb3ZfZGJzX2V4aXQodm9pZCkKIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2NoZWR1bGVkIHdvcmsgaXMgaW5kZWVkIG5vdCBydW5uaW5nICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWNwdWZyZXFfdW5yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfY29uc2VydmF0aXZlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShrY29uc2VydmF0aXZlX3dxKTsKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiQWxleGFuZGVyIENsb3V0ZXIgPGFsZXgta2VybmVsQGRpZ3Jpei5vcmcudWs+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCInY3B1ZnJlcV9jb25zZXJ2YXRpdmUnIC0gQSBkeW5hbWljIGNwdWZyZXEgZ292ZXJub3IgZm9yICIKK01PRFVMRV9BVVRIT1IoIkFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIidjcHVmcmVxX2NvbnNlcnZhdGl2ZScgLSBBIGR5bmFtaWMgY3B1ZnJlcSBnb3Zlcm5vciBmb3IgIgogCQkiTG93IExhdGVuY3kgRnJlcXVlbmN5IFRyYW5zaXRpb24gY2FwYWJsZSBwcm9jZXNzb3JzICIKIAkJIm9wdGltaXNlZCBmb3IgdXNlIGluIGEgYmF0dGVyeSBlbnZpcm9ubWVudCIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUKIGZzX2luaXRjYWxsKGNwdWZyZXFfZ292X2Ric19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCmluZGV4IDZmNDViMTYuLjMzOGY0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogZGJzIGlzIHVzZWQgaW4gdGhpcyBmaWxlIGFzIGEgc2hvcnRmb3JtIGZvciBkZW1hbmRiYXNlZCBzd2l0Y2hpbmcKQEAgLTUxLDggKzUyLDIwIEBACiAJCQkoTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8gKiBqaWZmaWVzX3RvX3VzZWNzKDEwKSkKICNkZWZpbmUgTUlOX1NBTVBMSU5HX1JBVEUJCQlcCiAJCQkoZGVmX3NhbXBsaW5nX3JhdGUgLyBNSU5fU0FNUExJTkdfUkFURV9SQVRJTykKKy8qIEFib3ZlIE1JTl9TQU1QTElOR19SQVRFIHdpbGwgdmFuaXNoIHdpdGggaXRzIHN5c2ZzIGZpbGUgc29vbgorICogRGVmaW5lIHRoZSBtaW5pbWFsIHNldHRhYmxlIHNhbXBsaW5nIHJhdGUgdG8gdGhlIGdyZWF0ZXIgb2Y6CisgKiAgIC0gIkhXIHRyYW5zaXRpb24gbGF0ZW5jeSIgKiAxMDAgKHNhbWUgYXMgZGVmYXVsdCBzYW1wbGluZyAvIDEwKQorICogICAtIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUKKyAqIFRvIGF2b2lkIHRoYXQgdXNlcnNwYWNlIHNob290cyBpdHNlbGYuCisqLworc3RhdGljIHVuc2lnbmVkIGludCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUodm9pZCkKK3sKKwlyZXR1cm4gbWF4KGRlZl9zYW1wbGluZ19yYXRlIC8gMTAsIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOworfQorCisvKiBUaGlzIHdpbGwgYWxzbyB2YW5pc2ggc29vbiB3aXRoIHJlbW92aW5nIHNhbXBsaW5nX3JhdGVfbWF4ICovCiAjZGVmaW5lIE1BWF9TQU1QTElOR19SQVRFCQkJKDUwMCAqIGRlZl9zYW1wbGluZ19yYXRlKQotI2RlZmluZSBERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVIJKDEwMDApCisjZGVmaW5lIExBVEVOQ1lfTVVMVElQTElFUgkJCSgxMDAwKQogI2RlZmluZSBUUkFOU0lUSU9OX0xBVEVOQ1lfTElNSVQJCSgxMCAqIDEwMDAgKiAxMDAwKQogCiBzdGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTY1LDE0ICs3OCwxNCBAQAogCWNwdXRpbWU2NF90IHByZXZfY3B1X3dhbGw7CiAJY3B1dGltZTY0X3QgcHJldl9jcHVfbmljZTsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmN1cl9wb2xpY3k7Ci0gCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOwogCXVuc2lnbmVkIGludCBmcmVxX2xvOwogCXVuc2lnbmVkIGludCBmcmVxX2xvX2ppZmZpZXM7CiAJdW5zaWduZWQgaW50IGZyZXFfaGlfamlmZmllczsKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGludCBlbmFibGU6MSwKLQkgICAgICAgICAgICAgc2FtcGxlX3R5cGU6MTsKKwkJc2FtcGxlX3R5cGU6MTsKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9kYnNfaW5mb19zLCBjcHVfZGJzX2luZm8pOwogCkBAIC0yMDMsMTIgKzIxNiwyOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWF4KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IG9uZGVtYW5kIHNhbXBsaW5nX3JhdGVfbWF4ICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21pbihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBvbmRlbWFuZCBzYW1wbGluZ19yYXRlX21pbiAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsCisJCSAgICAgICBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CiB9CiAKICNkZWZpbmUgZGVmaW5lX29uZV9ybyhfbmFtZSkJCVwKQEAgLTIzOCwxMyArMjY3LDExIEBACiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gTUFYX1NBTVBMSU5HX1JBVEUKLQkJICAgICB8fCBpbnB1dCA8IE1JTl9TQU1QTElOR19SQVRFKSB7CisJaWYgKHJldCAhPSAxKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGlucHV0OworCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBtYXgoaW5wdXQsIG1pbmltdW1fc2FtcGxpbmdfcmF0ZSgpKTsKIAltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0yNzksMTQgKzMwNiwxNCBAQAogCXVuc2lnbmVkIGludCBqOwogCiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKLQlpZiAoIHJldCAhPSAxICkKKwlpZiAocmV0ICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCBpbnB1dCA+IDEgKQorCWlmIChpbnB1dCA+IDEpCiAJCWlucHV0ID0gMTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKCBpbnB1dCA9PSBkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSApIHsgLyogbm90aGluZyB0byBkbyAqLworCWlmIChpbnB1dCA9PSBkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkgeyAvKiBub3RoaW5nIHRvIGRvICovCiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIGNvdW50OwogCX0KQEAgLTMzNyw3ICszNjQsNyBAQAogZGVmaW5lX29uZV9ydyhpZ25vcmVfbmljZV9sb2FkKTsKIGRlZmluZV9vbmVfcncocG93ZXJzYXZlX2JpYXMpOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRic19hdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGJzX2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2FtcGxpbmdfcmF0ZV9tYXguYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZV9taW4uYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZS5hdHRyLApAQCAtNTEyLDggKzUzOSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChkYnNfaW5mby0+Y3VyX3BvbGljeSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAJZGJzX2luZm8tPmZyZXFfbG8sCi0JICAgICAgICAgICAgICAgICAgICAgICAgCUNQVUZSRVFfUkVMQVRJT05fSCk7CisJCQlkYnNfaW5mby0+ZnJlcV9sbywgQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAl9CiAJcXVldWVfZGVsYXllZF93b3JrX29uKGNwdSwga29uZGVtYW5kX3dxLCAmZGJzX2luZm8tPndvcmssIGRlbGF5KTsKIAl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CkBAIC01MzAsNyArNTU2LDcgQEAKIAlkYnNfaW5mby0+c2FtcGxlX3R5cGUgPSBEQlNfTk9STUFMX1NBTVBMRTsKIAlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZkYnNfaW5mby0+d29yaywgZG9fZGJzX3RpbWVyKTsKIAlxdWV1ZV9kZWxheWVkX3dvcmtfb24oZGJzX2luZm8tPmNwdSwga29uZGVtYW5kX3dxLCAmZGJzX2luZm8tPndvcmssCi0JICAgICAgICAgICAgICAgICAgICAgIGRlbGF5KTsKKwkJZGVsYXkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKQEAgLTU5MSwxMSArNjE3LDkgQEAKIAkJCWlmIChsYXRlbmN5ID09IDApCiAJCQkJbGF0ZW5jeSA9IDE7CiAKLQkJCWRlZl9zYW1wbGluZ19yYXRlID0gbGF0ZW5jeSAqCi0JCQkJCURFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUjsKLQotCQkJaWYgKGRlZl9zYW1wbGluZ19yYXRlIDwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSkKLQkJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEU7CisJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9CisJCQkJbWF4KGxhdGVuY3kgKiBMQVRFTkNZX01VTFRJUExJRVIsCisJCQkJICAgIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOwogCiAJCQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gZGVmX3NhbXBsaW5nX3JhdGU7CiAJCX0KQEAgLTYxNywxMiArNjQxLDEwIEBACiAJCW11dGV4X2xvY2soJmRic19tdXRleCk7CiAJCWlmIChwb2xpY3ktPm1heCA8IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ktPmN1cikKIAkJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3ktPm1heCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIENQVUZSRVFfUkVMQVRJT05fSCk7CisJCQkJcG9saWN5LT5tYXgsIENQVUZSRVFfUkVMQVRJT05fSCk7CiAJCWVsc2UgaWYgKHBvbGljeS0+bWluID4gdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeS0+Y3VyKQogCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQodGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS0+bWluLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUV9SRUxBVElPTl9MKTsKKwkJCQlwb2xpY3ktPm1pbiwgQ1BVRlJFUV9SRUxBVElPTl9MKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlicmVhazsKIAl9CkBAIC02NzcsNyArNjk5LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPiIpOwogTU9EVUxFX0FVVEhPUigiQWxleGV5IFN0YXJpa292c2tpeSA8YWxleGV5Lnkuc3Rhcmlrb3Zza2l5QGludGVsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiJ2NwdWZyZXFfb25kZW1hbmQnIC0gQSBkeW5hbWljIGNwdWZyZXEgZ292ZXJub3IgZm9yICIKLSAgICAgICAgICAgICAgICAgICAiTG93IExhdGVuY3kgRnJlcXVlbmN5IFRyYW5zaXRpb24gY2FwYWJsZSBwcm9jZXNzb3JzIik7CisJIkxvdyBMYXRlbmN5IEZyZXF1ZW5jeSBUcmFuc2l0aW9uIGNhcGFibGUgcHJvY2Vzc29ycyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5ECmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwppbmRleCBjMGZmOTdkLi41YTYyZDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKQEAgLTIsNyArMiw3IEBACiAgKiAgZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4uCi0gKgkgICAgICAoQykgMjAwNCBab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+LgorICogIChDKSAyMDA0IFpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMyw3ICsyMyw3IEBACiAKIHN0YXRpYyBzcGlubG9ja190IGNwdWZyZXFfc3RhdHNfbG9jazsKIAotI2RlZmluZSBDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUihfbmFtZSxfbW9kZSxfc2hvdykgXAorI2RlZmluZSBDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93KSBcCiBzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciBfYXR0cl8jI19uYW1lID0ge1wKIAkuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSwgfSwgXAogCS5zaG93ID0gX3Nob3csXApAQCAtNTAsOCArNTAsNyBAQAogCXNzaXplX3QoKnNob3cpIChzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqLCBjaGFyICopOwogfTsKIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0c191cGRhdGUgKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdHNfdXBkYXRlKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIGN1cl90aW1lOwpAQCAtNjgsOCArNjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdAotc2hvd190b3RhbF90cmFucyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190b3RhbF90cmFucyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBwb2xpY3ktPmNwdSk7CiAJaWYgKCFzdGF0KQpAQCAtNzgsOCArNzYsNyBAQAogCQkJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBzdGF0LT5jcHUpLT50b3RhbF90cmFucyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3RpbWVfaW5fc3RhdGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGltZV9pbl9zdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXNzaXplX3QgbGVuID0gMDsKIAlpbnQgaTsKQEAgLTg5LDE0ICs4NiwxNCBAQAogCWNwdWZyZXFfc3RhdHNfdXBkYXRlKHN0YXQtPmNwdSk7CiAJZm9yIChpID0gMDsgaSA8IHN0YXQtPnN0YXRlX251bTsgaSsrKSB7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV1ICVsbHVcbiIsIHN0YXQtPmZyZXFfdGFibGVbaV0sCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KHN0YXQtPnRpbWVfaW5fc3RhdGVbaV0pKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQljcHV0aW1lNjRfdG9fY2xvY2tfdChzdGF0LT50aW1lX2luX3N0YXRlW2ldKSk7CiAJfQogCXJldHVybiBsZW47CiB9CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTCi1zdGF0aWMgc3NpemVfdAotc2hvd190cmFuc190YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190cmFuc190YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXNzaXplX3QgbGVuID0gMDsKIAlpbnQgaSwgajsKQEAgLTEzOSwxMSArMTM2LDExIEBACiAJCXJldHVybiBQQUdFX1NJWkU7CiAJcmV0dXJuIGxlbjsKIH0KLUNQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRyYW5zX3RhYmxlLDA0NDQsc2hvd190cmFuc190YWJsZSk7CitDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0cmFuc190YWJsZSwgMDQ0NCwgc2hvd190cmFuc190YWJsZSk7CiAjZW5kaWYKIAotQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodG90YWxfdHJhbnMsMDQ0NCxzaG93X3RvdGFsX3RyYW5zKTsKLUNQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRpbWVfaW5fc3RhdGUsMDQ0NCxzaG93X3RpbWVfaW5fc3RhdGUpOworQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodG90YWxfdHJhbnMsIDA0NDQsIHNob3dfdG90YWxfdHJhbnMpOworQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodGltZV9pbl9zdGF0ZSwgMDQ0NCwgc2hvd190aW1lX2luX3N0YXRlKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfYXR0cnNbXSA9IHsKIAkmX2F0dHJfdG90YWxfdHJhbnMuYXR0ciwKQEAgLTE1OCw4ICsxNTUsNyBAQAogCS5uYW1lID0gInN0YXRzIgogfTsKIAotc3RhdGljIGludAotZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQsIHVuc2lnbmVkIGludCBmcmVxKQorc3RhdGljIGludCBmcmVxX3RhYmxlX2dldF9pbmRleChzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCwgdW5zaWduZWQgaW50IGZyZXEpCiB7CiAJaW50IGluZGV4OwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXQtPm1heF9zdGF0ZTsgaW5kZXgrKykKQEAgLTE4Myw4ICsxNzksNyBAQAogCQljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKIH0KIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBjcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgY291bnQgPSAwLCByZXQgPSAwOwpAQCAtMTk0LDcgKzE4OSw4IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHBvbGljeS0+Y3B1OwogCWlmIChwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSkpCiAJCXJldHVybiAtRUJVU1k7Ci0JaWYgKChzdGF0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfc3RhdHMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlzdGF0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoKHN0YXQpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZGF0YSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwpAQCAtMjAzLDEzICsxOTksMTQgQEAKIAkJZ290byBlcnJvcl9nZXRfZmFpbDsKIAl9CiAKLQlpZiAoKHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGF0YS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApKSkKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRhdGEtPmtvYmosICZzdGF0c19hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQogCQlnb3RvIGVycm9yX291dDsKIAogCXN0YXQtPmNwdSA9IGNwdTsKIAlwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSkgPSBzdGF0OwogCi0JZm9yIChpPTA7IHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CisJZm9yIChpID0gMDsgdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwpAQCAtMjU1LDkgKzI1Miw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3BvbGljeSAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCXZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdF9ub3RpZmllcl9wb2xpY3koc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGRhdGE7CkBAIC0yNjgsMTQgKzI2NCwxNCBAQAogCXRhYmxlID0gY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKGNwdSk7CiAJaWYgKCF0YWJsZSkKIAkJcmV0dXJuIDA7Ci0JaWYgKChyZXQgPSBjcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZShwb2xpY3ksIHRhYmxlKSkpCisJcmV0ID0gY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUocG9saWN5LCB0YWJsZSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3RyYW5zIChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3RyYW5zKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdDsKQEAgLTM0MCwxOSArMzM2LDIwIEBACiAJLm5vdGlmaWVyX2NhbGwgPSBjcHVmcmVxX3N0YXRfbm90aWZpZXJfdHJhbnMKIH07CiAKLXN0YXRpYyBpbnQKLV9faW5pdCBjcHVmcmVxX3N0YXRzX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfc3RhdHNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGNwdTsKIAogCXNwaW5fbG9ja19pbml0KCZjcHVmcmVxX3N0YXRzX2xvY2spOwotCWlmICgocmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfcG9saWN5X2Jsb2NrLAotCQkJCUNQVUZSRVFfUE9MSUNZX05PVElGSUVSKSkpCisJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfcG9saWN5X2Jsb2NrLAorCQkJCUNQVUZSRVFfUE9MSUNZX05PVElGSUVSKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl90cmFuc19ibG9jaywKLQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpKSkgeworCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3RyYW5zX2Jsb2NrLAorCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CisJaWYgKHJldCkgewogCQljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3BvbGljeV9ibG9jaywKIAkJCQlDUFVGUkVRX1BPTElDWV9OT1RJRklFUik7CiAJCXJldHVybiByZXQ7CkBAIC0zNjQsOCArMzYxLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgdm9pZAotX19leGl0IGNwdWZyZXFfc3RhdHNfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNwdWZyZXFfc3RhdHNfZXhpdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHU7CiAKQEAgLTM3OSwxMCArMzc1LDEwIEBACiAJfQogfQogCi1NT0RVTEVfQVVUSE9SICgiWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiJ2NwdWZyZXFfc3RhdHMnIC0gQSBkcml2ZXIgdG8gZXhwb3J0IGNwdWZyZXEgc3RhdHMgIgorTU9EVUxFX0FVVEhPUigiWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCInY3B1ZnJlcV9zdGF0cycgLSBBIGRyaXZlciB0byBleHBvcnQgY3B1ZnJlcSBzdGF0cyAiCiAJCQkJInRocm91Z2ggc3lzZnMgZmlsZXN5c3RlbSIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoY3B1ZnJlcV9zdGF0c19pbml0KTsKIG1vZHVsZV9leGl0KGNwdWZyZXFfc3RhdHNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCmluZGV4IDE0NDJiYmEuLjY2ZDJkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCkBAIC0yNCw5ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotCiAvKioKICAqIEEgZmV3IHZhbHVlcyBuZWVkZWQgYnkgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vcgogICovCkBAIC0zNyw3ICszNCw3IEBACiAJCQkJCQkJdXNlcnNwYWNlICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBjcHVfaXNfbWFuYWdlZCk7CiAKLXN0YXRpYyBERUZJTkVfTVVURVgJKHVzZXJzcGFjZV9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHVzZXJzcGFjZV9tdXRleCk7CiBzdGF0aWMgaW50IGNwdXNfdXNpbmdfdXNlcnNwYWNlX2dvdmVybm9yOwogCiAjZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCkBAIC00Niw5ICs0Myw5IEBACiAvKiBrZWVwIHRyYWNrIG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLwogc3RhdGljIGludAogdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCisJdm9pZCAqZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKIAogCWlmICghcGVyX2NwdShjcHVfaXNfbWFuYWdlZCwgZnJlcS0+Y3B1KSkKIAkJcmV0dXJuIDA7CkBAIC01NywxMSArNTQsMTEgQEAKIAkJCWZyZXEtPmNwdSwgZnJlcS0+bmV3KTsKIAlwZXJfY3B1KGNwdV9jdXJfZnJlcSwgZnJlcS0+Y3B1KSA9IGZyZXEtPm5ldzsKIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcl9ibG9jayA9IHsKLSAgICAgICAgLm5vdGlmaWVyX2NhbGwgID0gdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXIKKwkubm90aWZpZXJfY2FsbCAgPSB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcgogfTsKIAogCkBAIC05Myw4ICs5MCwxMSBAQAogCSAqIFdlJ3JlIHNhZmUgZnJvbSBjb25jdXJyZW50IGNhbGxzIHRvIC0+dGFyZ2V0KCkgaGVyZQogCSAqIGFzIHdlIGhvbGQgdGhlIHVzZXJzcGFjZV9tdXRleCBsb2NrLiBJZiB3ZSB3ZXJlIGNhbGxpbmcKIAkgKiBjcHVmcmVxX2RyaXZlcl90YXJnZXQsIGEgZGVhZGxvY2sgc2l0dWF0aW9uIG1pZ2h0IG9jY3VyOgotCSAqIEE6IGNwdWZyZXFfc2V0IChsb2NrIHVzZXJzcGFjZV9tdXRleCkgLT4gY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGxvY2sgcG9saWN5LT5sb2NrKQotCSAqIEI6IGNwdWZyZXFfc2V0X3BvbGljeShsb2NrIHBvbGljeS0+bG9jaykgLT4gX19jcHVmcmVxX2dvdmVybm9yIC0+IGNwdWZyZXFfZ292ZXJub3JfdXNlcnNwYWNlIChsb2NrIHVzZXJzcGFjZV9tdXRleCkKKwkgKiBBOiBjcHVmcmVxX3NldCAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpIC0+CisJICogICAgICBjcHVmcmVxX2RyaXZlcl90YXJnZXQobG9jayBwb2xpY3ktPmxvY2spCisJICogQjogY3B1ZnJlcV9zZXRfcG9saWN5KGxvY2sgcG9saWN5LT5sb2NrKSAtPgorCSAqICAgICAgX19jcHVmcmVxX2dvdmVybm9yIC0+CisJICogICAgICAgICBjcHVmcmVxX2dvdmVybm9yX3VzZXJzcGFjZSAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpCiAJICovCiAJcmV0ID0gX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCBmcmVxLCBDUFVGUkVRX1JFTEFUSU9OX0wpOwogCkBAIC0yMTAsOSArMjEwLDEwIEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4sIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJDUFVmcmVxIHBvbGljeSBnb3Zlcm5vciAndXNlcnNwYWNlJyIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4sICIKKwkJIlJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQVWZyZXEgcG9saWN5IGdvdmVybm9yICd1c2Vyc3BhY2UnIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFCiBmc19pbml0Y2FsbChjcHVmcmVxX2dvdl91c2Vyc3BhY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwppbmRleCA5MDcxZDgwLi5hOWJkM2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWF4X2ZyZXEgPSAwOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpIHsKIAkJCWRwcmludGsoInRhYmxlIGVudHJ5ICV1IGlzIGludmFsaWQsIHNraXBwaW5nXG4iLCBpKTsKQEAgLTcwLDcgKzcwLDcgQEAKIAljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAogCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CkBAIC0xMjUsMTMgKzEyNSwxMyBAQAogCWlmICghY3B1X29ubGluZShwb2xpY3ktPmNwdSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKIAkJaWYgKChmcmVxIDwgcG9saWN5LT5taW4pIHx8IChmcmVxID4gcG9saWN5LT5tYXgpKQogCQkJY29udGludWU7Ci0JCXN3aXRjaChyZWxhdGlvbikgeworCQlzd2l0Y2ggKHJlbGF0aW9uKSB7CiAJCWNhc2UgQ1BVRlJFUV9SRUxBVElPTl9IOgogCQkJaWYgKGZyZXEgPD0gdGFyZ2V0X2ZyZXEpIHsKIAkJCQlpZiAoZnJlcSA+PSBvcHRpbWFsLmZyZXF1ZW5jeSkgewpAQCAtMTc4LDcgKzE3OCw3IEBACiAvKioKICAqIHNob3dfYXZhaWxhYmxlX2ZyZXFzIC0gc2hvdyBhdmFpbGFibGUgZnJlcXVlbmNpZXMgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfYXZhaWxhYmxlX2ZyZXFzIChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19hdmFpbGFibGVfZnJlcXMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAl1bnNpZ25lZCBpbnQgaSA9IDA7CiAJdW5zaWduZWQgaW50IGNwdSA9IHBvbGljeS0+Y3B1OwpAQCAtMTkwLDcgKzE5MCw3IEBACiAKIAl0YWJsZSA9IHBlcl9jcHUoc2hvd190YWJsZSwgY3B1KTsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQlpZiAodGFibGVbaV0uZnJlcXVlbmN5ID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCArPSBzcHJpbnRmKCZidWZbY291bnRdLCAiJWQgIiwgdGFibGVbaV0uZnJlcXVlbmN5KTsKQEAgLTIzNCw2ICsyMzQsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkNQVWZyZXEgZnJlcXVlbmN5IHRhYmxlIGhlbHBlcnMiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQVWZyZXEgZnJlcXVlbmN5IHRhYmxlIGhlbHBlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCmluZGV4IGU1MjIxNDQuLjAxYWZkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKKysrIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwpAQCAtODYsNyArODYsNyBAQAogY29uZmlnIENSWVBUT19TSEExX1MzOTAKIAl0cmlzdGF0ZSAiU0hBMSBkaWdlc3QgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gUzM5MAotCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19IQVNICiAJaGVscAogCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIFNIQS0xIHNlY3VyZSBoYXNoIHN0YW5kYXJkIChGSVBTIDE4MC0xL0RGSVBTIDE4MC0yKS4KQEAgLTk0LDcgKzk0LDcgQEAKIGNvbmZpZyBDUllQVE9fU0hBMjU2X1MzOTAKIAl0cmlzdGF0ZSAiU0hBMjU2IGRpZ2VzdCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBTMzkwCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBMjU2IHNlY3VyZSBoYXNoIHN0YW5kYXJkIChERklQUyAxODAtMikuCkBAIC0xMDUsNyArMTA1LDcgQEAKIGNvbmZpZyBDUllQVE9fU0hBNTEyX1MzOTAKIAl0cmlzdGF0ZSAiU0hBMzg0IGFuZCBTSEE1MTIgZGlnZXN0IGFsZ29yaXRobSIKIAlkZXBlbmRzIG9uIFMzOTAKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fSEFTSAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEE1MTIgc2VjdXJlIGhhc2ggc3RhbmRhcmQuCkBAIC0yMDAsNCArMjAwLDEzIEBACiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgSVhQNHh4IE5QRSBjcnlwdG8gZW5naW5lLgogCitjb25maWcgQ1JZUFRPX0RFVl9QUEM0WFgKKwl0cmlzdGF0ZSAiRHJpdmVyIEFNQ0MgUFBDNHh4IGNyeXB0byBhY2NlbGVyYXRvciIKKwlkZXBlbmRzIG9uIFBQQyAmJiA0eHgKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBoYXZlIHN1cHBvcnQgZm9yIEFNQ0MgY3J5cHRvIGFjY2VsZXJhdGlvbi4KKwogZW5kaWYgIyBDUllQVE9fSFcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKaW5kZXggNzM1NTdiMi4uOWJmNGEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVgpICs9IGhpZm5fNzk1eC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TKSArPSB0YWxpdG9zLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX0lYUDRYWCkgKz0gaXhwNHh4X2NyeXB0by5vCitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFgpICs9IGFtY2MvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL01ha2VmaWxlIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM3NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai0kKENPTkZJR19DUllQVE9fREVWX1BQQzRYWCkgKz0gY3J5cHRvNHh4Lm8KK2NyeXB0bzR4eC1vYmpzIDo9ICBjcnlwdG80eHhfY29yZS5vIGNyeXB0bzR4eF9hbGcubyBjcnlwdG80eHhfc2EubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9hbGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWI2ZTFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBMaW51eCBjcnlwdG8gYWxnb3JpdGhtcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CisjaW5jbHVkZSAiY3J5cHRvNHh4X3JlZ19kZWYuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfc2EuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfY29yZS5oIgorCit2b2lkIHNldF9keW5hbWljX3NhX2NvbW1hbmRfMChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhLCB1MzIgc2F2ZV9oLAorCQkJICAgICAgdTMyIHNhdmVfaXYsIHUzMiBsZF9oLCB1MzIgbGRfaXYsIHUzMiBoZHJfcHJvYywKKwkJCSAgICAgIHUzMiBoLCB1MzIgYywgdTMyIHBhZF90eXBlLCB1MzIgb3BfZ3JwLCB1MzIgb3AsCisJCQkgICAgICB1MzIgZGlyKQoreworCXNhLT5zYV9jb21tYW5kXzAudyA9IDA7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5zYXZlX2hhc2hfc3RhdGUgPSBzYXZlX2g7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5zYXZlX2l2ID0gc2F2ZV9pdjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmxvYWRfaGFzaF9zdGF0ZSA9IGxkX2g7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5sb2FkX2l2ID0gbGRfaXY7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5oZHJfcHJvYyA9IGhkcl9wcm9jOworCXNhLT5zYV9jb21tYW5kXzAuYmYuaGFzaF9hbGcgPSBoOworCXNhLT5zYV9jb21tYW5kXzAuYmYuY2lwaGVyX2FsZyA9IGM7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5wYWRfdHlwZSA9IHBhZF90eXBlICYgMzsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmV4dGVuZF9wYWQgPSBwYWRfdHlwZSA+PiAyOworCXNhLT5zYV9jb21tYW5kXzAuYmYub3BfZ3JvdXAgPSBvcF9ncnA7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5vcGNvZGUgPSBvcDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmRpciA9IGRpcjsKK30KKwordm9pZCBzZXRfZHluYW1pY19zYV9jb21tYW5kXzEoc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYSwgdTMyIGNtLCB1MzIgaG1hY19tYywKKwkJCSAgICAgIHUzMiBjZmIsIHUzMiBlc24sIHUzMiBzbl9tYXNrLCB1MzIgbXV0ZSwKKwkJCSAgICAgIHUzMiBjcF9wYWQsIHUzMiBjcF9wYXksIHUzMiBjcF9oZHIpCit7CisJc2EtPnNhX2NvbW1hbmRfMS53ID0gMDsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNyeXB0b19tb2RlMzEgPSAoY20gJiA0KSA+PiAyOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY3J5cHRvX21vZGU5XzggPSBjbSAmIDM7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5mZWVkYmFja19tb2RlID0gY2ZiLAorCXNhLT5zYV9jb21tYW5kXzEuYmYuc2FfcmV2ID0gMTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmV4dGVuZGVkX3NlcV9udW0gPSBlc247CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5zZXFfbnVtX21hc2sgPSBzbl9tYXNrOworCXNhLT5zYV9jb21tYW5kXzEuYmYubXV0YWJsZV9iaXRfcHJvYyA9IG11dGU7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jb3B5X3BhZCA9IGNwX3BhZDsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNvcHlfcGF5bG9hZCA9IGNwX3BheTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNvcHlfaGRyID0gY3BfaGRyOworfQorCitpbnQgY3J5cHRvNHh4X2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+ZGlyZWN0aW9uID0gRElSX09VVEJPVU5EOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisJY3R4LT5pc19oYXNoID0gMDsKKwljdHgtPnBkX2N0bCA9IDB4MTsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkJICByZXEtPm5ieXRlcywgcmVxLT5pbmZvLAorCQkJCSAgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShjdHgpKTsKK30KKworaW50IGNyeXB0bzR4eF9kZWNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisJY3R4LT5pc19oYXNoID0gMDsKKwljdHgtPnBkX2N0bCA9IDE7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsIHJlcS0+ZHN0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIHJlcS0+aW5mbywKKwkJCQkgIGdldF9keW5hbWljX3NhX2l2X3NpemUoY3R4KSk7Cit9CisKKy8qKgorICogQUVTIEZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IGNyeXB0bzR4eF9zZXRrZXlfYWVzKHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyLAorCQkJCWNvbnN0IHU4ICprZXksCisJCQkJdW5zaWduZWQgaW50IGtleWxlbiwKKwkJCQl1bnNpZ25lZCBjaGFyIGNtLAorCQkJCXU4IGZiKQoreworCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl90Zm0oY2lwaGVyKTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCWludCAgICByYzsKKworCWlmIChrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMjU2ICYmCisJCWtleWxlbiAhPSBBRVNfS0VZU0laRV8xOTIgJiYga2V5bGVuICE9IEFFU19LRVlTSVpFXzEyOCkgeworCQljcnlwdG9fYWJsa2NpcGhlcl9zZXRfZmxhZ3MoY2lwaGVyLAorCQkJCUNSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ3JlYXRlIFNBICovCisJaWYgKGN0eC0+c2FfaW5fZG1hX2FkZHIgfHwgY3R4LT5zYV9vdXRfZG1hX2FkZHIpCisJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisKKwlyYyA9IGNyeXB0bzR4eF9hbGxvY19zYShjdHgsIFNBX0FFUzEyOF9MRU4gKyAoa2V5bGVuLTE2KSAvIDQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyID09IDApIHsKKwkJcmMgPSBjcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKGN0eCk7CisJCWlmIChyYykgeworCQkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKwkvKiBTZXR1cCBTQSAqLworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzAoc2EsIFNBX05PVF9TQVZFX0hBU0gsIFNBX05PVF9TQVZFX0lWLAorCQkJCSBTQV9MT0FEX0hBU0hfRlJPTV9TQSwgU0FfTE9BRF9JVl9GUk9NX1NUQVRFLAorCQkJCSBTQV9OT19IRUFERVJfUFJPQywgU0FfSEFTSF9BTEdfTlVMTCwKKwkJCQkgU0FfQ0lQSEVSX0FMR19BRVMsIFNBX1BBRF9UWVBFX1pFUk8sCisJCQkJIFNBX09QX0dST1VQX0JBU0lDLCBTQV9PUENPREVfREVDUllQVCwKKwkJCQkgRElSX0lOQk9VTkQpOworCisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8xKHNhLCBjbSwgU0FfSEFTSF9NT0RFX0hBU0gsCisJCQkJIGZiLCBTQV9FWFRFTkRFRF9TTl9PRkYsCisJCQkJIFNBX1NFUV9NQVNLX09GRiwgU0FfTUNfRU5BQkxFLAorCQkJCSBTQV9OT1RfQ09QWV9QQUQsIFNBX05PVF9DT1BZX1BBWUxPQUQsCisJCQkJIFNBX05PVF9DT1BZX0hEUik7CisJY3J5cHRvNHh4X21lbWNweV9sZShjdHgtPnNhX2luICsgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2tleV9maWVsZChjdHgpLAorCQkJICAgIGtleSwga2V5bGVuKTsKKwlzYS0+c2FfY29udGVudHMgPSBTQV9BRVNfQ09OVEVOVFMgfCAoa2V5bGVuIDw8IDIpOworCXNhLT5zYV9jb21tYW5kXzEuYmYua2V5X2xlbiA9IGtleWxlbiA+PiAzOworCWN0eC0+aXNfaGFzaCA9IDA7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKwltZW1jcHkoY3R4LT5zYV9pbiArIGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoY3R4KSwKKwkJCSh2b2lkICopJmN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyLCA0KTsKKwljdHgtPm9mZnNldF90b19zcl9wdHIgPSBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKGN0eCk7CisKKwltZW1jcHkoY3R4LT5zYV9vdXQsIGN0eC0+c2FfaW4sIGN0eC0+c2FfbGVuICogNCk7CisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0OworCXNhLT5zYV9jb21tYW5kXzAuYmYuZGlyID0gRElSX09VVEJPVU5EOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfc2V0a2V5X2Flc19jYmMoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXIsCisJCQkgICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJcmV0dXJuIGNyeXB0bzR4eF9zZXRrZXlfYWVzKGNpcGhlciwga2V5LCBrZXlsZW4sIENSWVBUT19NT0RFX0NCQywKKwkJCQkgICAgQ1JZUFRPX0ZFRURCQUNLX01PREVfTk9fRkIpOworfQorCisvKioKKyAqIEhBU0ggU0hBMSBGdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBjcnlwdG80eHhfaGFzaF9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSAgIHVuc2lnbmVkIGludCBzYV9sZW4sCisJCQkJICAgdW5zaWduZWQgY2hhciBoYSwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIGhtKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSB0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqbXlfYWxnID0gY3J5cHRvX2FsZ190b19jcnlwdG80eHhfYWxnKGFsZyk7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwICpzYV9pbjsKKwlpbnQgcmM7CisKKwljdHgtPmRldiAgID0gbXlfYWxnLT5kZXY7CisJY3R4LT5pc19oYXNoID0gMTsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCisJLyogQ3JlYXRlIFNBICovCisJaWYgKGN0eC0+c2FfaW5fZG1hX2FkZHIgfHwgY3R4LT5zYV9vdXRfZG1hX2FkZHIpCisJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisKKwlyYyA9IGNyeXB0bzR4eF9hbGxvY19zYShjdHgsIHNhX2xlbik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIgPT0gMCkgeworCQljcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKGN0eCk7CisJCWlmICghY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIpIHsKKwkJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXRmbS0+Y3J0X2FoYXNoLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpOworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMChzYSwgU0FfU0FWRV9IQVNILCBTQV9OT1RfU0FWRV9JViwKKwkJCQkgU0FfTk9UX0xPQURfSEFTSCwgU0FfTE9BRF9JVl9GUk9NX1NBLAorCQkJCSBTQV9OT19IRUFERVJfUFJPQywgaGEsIFNBX0NJUEhFUl9BTEdfTlVMTCwKKwkJCQkgU0FfUEFEX1RZUEVfWkVSTywgU0FfT1BfR1JPVVBfQkFTSUMsCisJCQkJIFNBX09QQ09ERV9IQVNILCBESVJfSU5CT1VORCk7CisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8xKHNhLCAwLCBTQV9IQVNIX01PREVfSEFTSCwKKwkJCQkgQ1JZUFRPX0ZFRURCQUNLX01PREVfTk9fRkIsIFNBX0VYVEVOREVEX1NOX09GRiwKKwkJCQkgU0FfU0VRX01BU0tfT0ZGLCBTQV9NQ19FTkFCTEUsCisJCQkJIFNBX05PVF9DT1BZX1BBRCwgU0FfTk9UX0NPUFlfUEFZTE9BRCwKKwkJCQkgU0FfTk9UX0NPUFlfSERSKTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCXNhLT5zYV9jb250ZW50cyA9IFNBX0hBU0gxNjBfQ09OVEVOVFM7CisJc2FfaW4gPSAoc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCAqKSBjdHgtPnNhX2luOworCS8qIE5lZWQgdG8gemVybyBoYXNoIGRpZ2VzdCBpbiBTQSAqLworCW1lbXNldChzYV9pbi0+aW5uZXJfZGlnZXN0LCAwLCBzaXplb2Yoc2FfaW4tPmlubmVyX2RpZ2VzdCkpOworCW1lbXNldChzYV9pbi0+b3V0ZXJfZGlnZXN0LCAwLCBzaXplb2Yoc2FfaW4tPm91dGVyX2RpZ2VzdCkpOworCXNhX2luLT5zdGF0ZV9wdHIgPSBjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcjsKKwljdHgtPm9mZnNldF90b19zcl9wdHIgPSBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKGN0eCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisJaW50IGRzOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisKKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwlkcyA9IGNyeXB0b19haGFzaF9kaWdlc3RzaXplKAorCQkJX19jcnlwdG9fYWhhc2hfY2FzdChyZXEtPmJhc2UudGZtKSk7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5kaWdlc3RfbGVuID0gZHMgPj4gMjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmxvYWRfaGFzaF9zdGF0ZSA9IFNBX0xPQURfSEFTSF9GUk9NX1NBOworCWN0eC0+aXNfaGFzaCA9IDE7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfdXBkYXRlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5pc19oYXNoID0gMTsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCWN0eC0+cGRfY3RsID0gMHgxMTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLAorCQkJCSAgKHN0cnVjdCBzY2F0dGVybGlzdCAqKSByZXEtPnJlc3VsdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCBOVUxMLCAwKTsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmhhc2hfZmluYWwgPSAxOworCWN0eC0+cGRfY3RsID0gMHgxMTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLAorCQkJCSAgKHN0cnVjdCBzY2F0dGVybGlzdCAqKSByZXEtPnJlc3VsdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCBOVUxMLCAwKTsKK30KKworLyoqCisgKiBTSEExIEFsZ29yaXRobQorICovCitpbnQgY3J5cHRvNHh4X3NoYTFfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvNHh4X2hhc2hfYWxnX2luaXQodGZtLCBTQV9IQVNIMTYwX0xFTiwgU0FfSEFTSF9BTEdfU0hBMSwKKwkJCQkgICAgICAgU0FfSEFTSF9NT0RFX0hBU0gpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBkZmIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCkBAIC0wLDAgKzEsMTMxMCBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgQU1DQyBjcnlwdG8gb2ZmbG9hZCBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciB1c2Ugd2l0aAorICogTGludXggQ3J5cHRvQVBJLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vZGNyLmg+CisjaW5jbHVkZSA8YXNtL2Rjci1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorI2luY2x1ZGUgImNyeXB0bzR4eF9yZWdfZGVmLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X2NvcmUuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfc2EuaCIKKworI2RlZmluZSBQUEM0WFhfU0VDX1ZFUlNJT05fU1RSCQkJIjAuNSIKKworLyoqCisgKiBQUEM0eHggQ3J5cHRvIEVuZ2luZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKi8KK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9od19pbml0KHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdW5pb24gY2VfcmluZ19zaXplIHJpbmdfc2l6ZTsKKwl1bmlvbiBjZV9yaW5nX2NvbnRvbCByaW5nX2N0cmw7CisJdW5pb24gY2VfcGFydF9yaW5nX3NpemUgcGFydF9yaW5nX3NpemU7CisJdW5pb24gY2VfaW9fdGhyZXNob2xkIGlvX3RocmVzaG9sZDsKKwl1MzIgcmFuZF9udW07CisJdW5pb24gY2VfcGVfZG1hX2NmZyBwZV9kbWFfY2ZnOworCisJd3JpdGVsKFBQQzRYWF9CWVRFX09SREVSLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfQllURV9PUkRFUl9DRkcpOworCS8qIHNldHVwIHBlIGRtYSwgaW5jbHVkZSByZXNldCBzZywgcGRyIGFuZCBwZSwgdGhlbiByZWxlYXNlIHJlc2V0ICovCisJcGVfZG1hX2NmZy53ID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3NncGRfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYuYm9fZGF0YV9lbiA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib19zYV9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5ib19wZF9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5keW5hbWljX3NhX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3NnID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BkciA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZSA9IDE7CisJd3JpdGVsKHBlX2RtYV9jZmcudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BFX0RNQV9DRkcpOworCS8qIHVuIHJlc2V0IHBlLHNnIGFuZCBwZHIgKi8KKwlwZV9kbWFfY2ZnLmJmLnBlX21vZGUgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfc2cgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGRyID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BlID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3RkX2VuID0gMDsKKwl3cml0ZWwocGVfZG1hX2NmZy53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEVfRE1BX0NGRyk7CisJd3JpdGVsKGRldi0+cGRyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUERSX0JBU0UpOworCXdyaXRlbChkZXYtPnBkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JEUl9CQVNFKTsKKwl3cml0ZWwoUFBDNFhYX1BSTkdfQ1RSTF9BVVRPX0VOLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUFJOR19DVFJMKTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kX251bSwgc2l6ZW9mKHJhbmRfbnVtKSk7CisJd3JpdGVsKHJhbmRfbnVtLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUFJOR19TRUVEX0wpOworCWdldF9yYW5kb21fYnl0ZXMoJnJhbmRfbnVtLCBzaXplb2YocmFuZF9udW0pKTsKKwl3cml0ZWwocmFuZF9udW0sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QUk5HX1NFRURfSCk7CisJcmluZ19zaXplLncgPSAwOworCXJpbmdfc2l6ZS5iZi5yaW5nX29mZnNldCA9IFBQQzRYWF9QRF9TSVpFOworCXJpbmdfc2l6ZS5iZi5yaW5nX3NpemUgICA9IFBQQzRYWF9OVU1fUEQ7CisJd3JpdGVsKHJpbmdfc2l6ZS53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUklOR19TSVpFKTsKKwlyaW5nX2N0cmwudyA9IDA7CisJd3JpdGVsKHJpbmdfY3RybC53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUklOR19DVFJMKTsKKwl3cml0ZWwoUFBDNFhYX0RDXzNERVNfRU4sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9ERVZJQ0VfQ1RSTCk7CisJd3JpdGVsKGRldi0+Z2RyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0UpOworCXdyaXRlbChkZXYtPnNkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFKTsKKwlwYXJ0X3Jpbmdfc2l6ZS53ID0gMDsKKwlwYXJ0X3Jpbmdfc2l6ZS5iZi5zZHJfc2l6ZSA9IFBQQzRYWF9TRFJfU0laRTsKKwlwYXJ0X3Jpbmdfc2l6ZS5iZi5nZHJfc2l6ZSA9IFBQQzRYWF9HRFJfU0laRTsKKwl3cml0ZWwocGFydF9yaW5nX3NpemUudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BBUlRfUklOR19TSVpFKTsKKwl3cml0ZWwoUFBDNFhYX1NEX0JVRkZFUl9TSVpFLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEFSVF9SSU5HX0NGRyk7CisJaW9fdGhyZXNob2xkLncgPSAwOworCWlvX3RocmVzaG9sZC5iZi5vdXRwdXRfdGhyZXNob2xkID0gUFBDNFhYX09VVFBVVF9USFJFU0hPTEQ7CisJaW9fdGhyZXNob2xkLmJmLmlucHV0X3RocmVzaG9sZCAgPSBQUEM0WFhfSU5QVVRfVEhSRVNIT0xEOworCXdyaXRlbChpb190aHJlc2hvbGQudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lPX1RIUkVTSE9MRCk7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRFJfQkFTRV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SRFJfQkFTRV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QS1RfU1JDX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BLVF9ERVNUX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1NBX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFX1VBRERSKTsKKwkvKiB1biByZXNldCBwZSxzZyBhbmQgcGRyICovCisJcGVfZG1hX2NmZy5iZi5wZV9tb2RlID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3NnID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BkciA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZSA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib190ZF9lbiA9IDA7CisJd3JpdGVsKHBlX2RtYV9jZmcudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BFX0RNQV9DRkcpOworCS8qY2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0Ki8KKwl3cml0ZWwoUFBDNFhYX0lOVEVSUlVQVF9DTFIsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfQ0xSKTsKKwl3cml0ZWwoUFBDNFhYX0lOVF9ERVNDUl9DTlQsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfREVTQ1JfQ05UKTsKKwl3cml0ZWwoUFBDNFhYX0lOVF9ERVNDUl9DTlQsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfREVTQ1JfQ05UKTsKKwl3cml0ZWwoUFBDNFhYX0lOVF9DRkcsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfQ0ZHKTsKKwl3cml0ZWwoUFBDNFhYX1BEX0RPTkVfSU5ULCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0VOKTsKK30KKworaW50IGNyeXB0bzR4eF9hbGxvY19zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LCB1MzIgc2l6ZSkKK3sKKwljdHgtPnNhX2luID0gZG1hX2FsbG9jX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzaXplICogNCwKKwkJCQkJJmN0eC0+c2FfaW5fZG1hX2FkZHIsIEdGUF9BVE9NSUMpOworCWlmIChjdHgtPnNhX2luID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY3R4LT5zYV9vdXQgPSBkbWFfYWxsb2NfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNpemUgKiA0LAorCQkJCQkgJmN0eC0+c2Ffb3V0X2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoY3R4LT5zYV9vdXQgPT0gTlVMTCkgeworCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIGN0eC0+c2FfbGVuICogNCwKKwkJCQkgIGN0eC0+c2FfaW4sIGN0eC0+c2FfaW5fZG1hX2FkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY3R4LT5zYV9pbiwgMCwgc2l6ZSAqIDQpOworCW1lbXNldChjdHgtPnNhX291dCwgMCwgc2l6ZSAqIDQpOworCWN0eC0+c2FfbGVuID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCit2b2lkIGNyeXB0bzR4eF9mcmVlX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJaWYgKGN0eC0+c2FfaW4gIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIGN0eC0+c2FfbGVuICogNCwKKwkJCQkgIGN0eC0+c2FfaW4sIGN0eC0+c2FfaW5fZG1hX2FkZHIpOworCWlmIChjdHgtPnNhX291dCAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgY3R4LT5zYV9sZW4gKiA0LAorCQkJCSAgY3R4LT5zYV9vdXQsIGN0eC0+c2Ffb3V0X2RtYV9hZGRyKTsKKworCWN0eC0+c2FfaW5fZG1hX2FkZHIgPSAwOworCWN0eC0+c2Ffb3V0X2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX2xlbiA9IDA7Cit9CisKK3UzMiBjcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJY3R4LT5zdGF0ZV9yZWNvcmQgPSBkbWFfYWxsb2NfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpLAorCQkJCSZjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKCFjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGN0eC0+c3RhdGVfcmVjb3JkLCAwLCBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3J5cHRvNHh4X2ZyZWVfc3RhdGVfcmVjb3JkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJaWYgKGN0eC0+c3RhdGVfcmVjb3JkICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpLAorCQkJCSAgY3R4LT5zdGF0ZV9yZWNvcmQsCisJCQkJICBjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcik7CisJY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIgPSAwOworfQorCisvKioKKyAqIGFsbG9jIG1lbW9yeSBmb3IgdGhlIGdhdGhlciByaW5nCisgKiBubyBuZWVkIHRvIGFsbG9jIGJ1ZiBmb3IgdGhlIHJpbmcKKyAqIGdkcl90YWlsLCBnZHJfaGVhZCBhbmQgZ2RyX2NvdW50IGFyZSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2J1aWxkX3BkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisJZGV2LT5wZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCwKKwkJCQkgICAgICAmZGV2LT5wZHJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5wZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5wZHJfdWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogUFBDNFhYX05VTV9QRCwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cGRyX3VpbmZvKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCwKKwkJCQkgIGRldi0+cGRyLAorCQkJCSAgZGV2LT5wZHJfcGEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGRldi0+cGRyLCAwLCAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BEKTsKKwlkZXYtPnNoYWRvd19zYV9wb29sID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAyNTYgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgICZkZXYtPnNoYWRvd19zYV9wb29sX3BhLAorCQkJCSAgIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zaGFkb3dfc2FfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnNoYWRvd19zcl9wb29sID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCSBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJICZkZXYtPnNoYWRvd19zcl9wb29sX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2hhZG93X3NyX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCWZvciAoaSA9IDA7IGkgPCBQUEM0WFhfTlVNX1BEOyBpKyspIHsKKwkJcGRfdWluZm8gPSAoc3RydWN0IHBkX3VpbmZvICopIChkZXYtPnBkcl91aW5mbyArCisJCQkJCQlzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIGkpOworCisJCS8qIGFsbG9jIDI1NiBieXRlcyB3aGljaCBpcyBlbm91Z2ggZm9yIGFueSBraW5kIG9mIGR5bmFtaWMgc2EgKi8KKwkJcGRfdWluZm8tPnNhX3ZhID0gZGV2LT5zaGFkb3dfc2FfcG9vbCArIDI1NiAqIGk7CisJCXBkX3VpbmZvLT5zYV9wYSA9IGRldi0+c2hhZG93X3NhX3Bvb2xfcGEgKyAyNTYgKiBpOworCisJCS8qIGFsbG9jIHN0YXRlIHJlY29yZCAqLworCQlwZF91aW5mby0+c3JfdmEgPSBkZXYtPnNoYWRvd19zcl9wb29sICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIGk7CisJCXBkX3VpbmZvLT5zcl9wYSA9IGRldi0+c2hhZG93X3NyX3Bvb2xfcGEgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2Rlc3Ryb3lfcGRyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cGRyICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCwKKwkJCQkgIGRldi0+cGRyLCBkZXYtPnBkcl9wYSk7CisJaWYgKGRldi0+c2hhZG93X3NhX3Bvb2wpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwgMjU2ICogUFBDNFhYX05VTV9QRCwKKwkJCQkgIGRldi0+c2hhZG93X3NhX3Bvb2wsIGRldi0+c2hhZG93X3NhX3Bvb2xfcGEpOworCWlmIChkZXYtPnNoYWRvd19zcl9wb29sKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQlzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJZGV2LT5zaGFkb3dfc3JfcG9vbCwgZGV2LT5zaGFkb3dfc3JfcG9vbF9wYSk7CisKKwlrZnJlZShkZXYtPnBkcl91aW5mbyk7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2dldF9wZF9mcm9tX3Bkcl9ub2xvY2soc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1MzIgcmV0dmFsOworCXUzMiB0bXA7CisKKwlyZXR2YWwgPSBkZXYtPnBkcl9oZWFkOworCXRtcCA9IChkZXYtPnBkcl9oZWFkICsgMSkgJSBQUEM0WFhfTlVNX1BEOworCisJaWYgKHRtcCA9PSBkZXYtPnBkcl90YWlsKQorCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisKKwlkZXYtPnBkcl9oZWFkID0gdG1wOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcHV0X3BkX3RvX3BkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCB1MzIgaWR4KQoreworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBkX3VpbmZvID0gKHN0cnVjdCBwZF91aW5mbyAqKShkZXYtPnBkcl91aW5mbyArCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogaWR4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPnBkcl90YWlsICE9IFBQQzRYWF9MQVNUX1BEKQorCQlkZXYtPnBkcl90YWlsKys7CisJZWxzZQorCQlkZXYtPnBkcl90YWlsID0gMDsKKwlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9GUkVFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNlX3BkICpjcnlwdG80eHhfZ2V0X3BkcChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBkbWFfYWRkcl90ICpwZF9kbWEsIHUzMiBpZHgpCit7CisJKnBkX2RtYSA9IGRldi0+cGRyX3BhICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBpZHg7CisKKwlyZXR1cm4gZGV2LT5wZHIgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIGlkeDsKK30KKworLyoqCisgKiBhbGxvYyBtZW1vcnkgZm9yIHRoZSBnYXRoZXIgcmluZworICogbm8gbmVlZCB0byBhbGxvYyBidWYgZm9yIHRoZSByaW5nCisgKiBnZHJfdGFpbCwgZ2RyX2hlYWQgYW5kIGdkcl9jb3VudCBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9idWlsZF9nZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlkZXYtPmdkciA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBQUEM0WFhfTlVNX0dELAorCQkJCSAgICAgICZkZXYtPmdkcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPmdkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoZGV2LT5nZHIsIDAsIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogUFBDNFhYX05VTV9HRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0bzR4eF9kZXN0cm95X2dkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBQUEM0WFhfTlVNX0dELAorCQkJICBkZXYtPmdkciwgZGV2LT5nZHJfcGEpOworfQorCisvKgorICogd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqIHByZWVtcHRpb24gb3IgaW50ZXJydXB0IG11c3QgYmUgZGlzYWJsZWQKKyAqLwordTMyIGNyeXB0bzR4eF9nZXRfbl9nZChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCBpbnQgbikKK3sKKwl1MzIgcmV0dmFsOworCXUzMiB0bXA7CisJaWYgKG4gPj0gUFBDNFhYX05VTV9HRCkKKwkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCisJcmV0dmFsID0gZGV2LT5nZHJfaGVhZDsKKwl0bXAgPSAoZGV2LT5nZHJfaGVhZCArIG4pICUgUFBDNFhYX05VTV9HRDsKKwlpZiAoZGV2LT5nZHJfaGVhZCA+IGRldi0+Z2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+Z2RyX2hlYWQgJiYgdG1wID49IGRldi0+Z2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfSBlbHNlIGlmIChkZXYtPmdkcl9oZWFkIDwgZGV2LT5nZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5nZHJfaGVhZCB8fCB0bXAgPj0gZGV2LT5nZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9CisJZGV2LT5nZHJfaGVhZCA9IHRtcDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3B1dF9nZF90b19nZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5nZHJfdGFpbCA9PSBkZXYtPmdkcl9oZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRldi0+Z2RyX3RhaWwgIT0gUFBDNFhYX0xBU1RfR0QpCisJCWRldi0+Z2RyX3RhaWwrKzsKKwllbHNlCisJCWRldi0+Z2RyX3RhaWwgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNlX2dkICpjcnlwdG80eHhfZ2V0X2dkcChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCQkgICAgICBkbWFfYWRkcl90ICpnZF9kbWEsIHUzMiBpZHgpCit7CisJKmdkX2RtYSA9IGRldi0+Z2RyX3BhICsgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBpZHg7CisKKwlyZXR1cm4gKHN0cnVjdCBjZV9nZCAqKSAoZGV2LT5nZHIgKyBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIGlkeCk7Cit9CisKKy8qKgorICogYWxsb2MgbWVtb3J5IGZvciB0aGUgc2NhdHRlciByaW5nCisgKiBuZWVkIHRvIGFsbG9jIGJ1ZiBmb3IgdGhlIHJpbmcKKyAqIHNkcl90YWlsLCBzZHJfaGVhZCBhbmQgc2RyX2NvdW50IGFyZSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2J1aWxkX3NkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBjZV9zZCAqc2RfYXJyYXk7CisKKwkvKiBhbGxvYyBtZW1vcnkgZm9yIHNjYXR0ZXIgZGVzY3JpcHRvciByaW5nICovCisJZGV2LT5zZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogUFBDNFhYX05VTV9TRCwKKwkJCQkgICAgICAmZGV2LT5zZHJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplID0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgPQorCQlkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICogUFBDNFhYX05VTV9TRCwKKwkJCSZkZXYtPnNjYXR0ZXJfYnVmZmVyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2NhdHRlcl9idWZmZXJfdmEpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgZGV2LT5zZHIsIGRldi0+c2RyX3BhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2RfYXJyYXkgPSBkZXYtPnNkcjsKKworCWZvciAoaSA9IDA7IGkgPCBQUEM0WFhfTlVNX1NEOyBpKyspIHsKKwkJc2RfYXJyYXlbaV0ucHRyID0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9wYSArCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKiBpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfZGVzdHJveV9zZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5zZHIgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgZGV2LT5zZHIsIGRldi0+c2RyX3BhKTsKKworCWlmIChkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhLAorCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9wYSk7Cit9CisKKy8qCisgKiB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICogcHJlZW1wdGlvbiBvciBpbnRlcnJ1cHQgbXVzdCBiZSBkaXNhYmxlZAorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9nZXRfbl9zZChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCBpbnQgbikKK3sKKwl1MzIgcmV0dmFsOworCXUzMiB0bXA7CisKKwlpZiAobiA+PSBQUEM0WFhfTlVNX1NEKQorCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisKKwlyZXR2YWwgPSBkZXYtPnNkcl9oZWFkOworCXRtcCA9IChkZXYtPnNkcl9oZWFkICsgbikgJSBQUEM0WFhfTlVNX1NEOworCWlmIChkZXYtPnNkcl9oZWFkID4gZGV2LT5nZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5zZHJfaGVhZCAmJiB0bXAgPj0gZGV2LT5zZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9IGVsc2UgaWYgKGRldi0+c2RyX2hlYWQgPCBkZXYtPnNkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPnNkcl9oZWFkIHx8IHRtcCA+PSBkZXYtPnNkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0gLyogdGhlIGhlYWQgPSB0YWlsLCBvciBlbXB0eSBjYXNlIGlzIGFscmVhZHkgdGFrZSBjYXJlZCAqLworCWRldi0+c2RyX2hlYWQgPSB0bXA7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wdXRfc2RfdG9fc2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+c2RyX3RhaWwgPT0gZGV2LT5zZHJfaGVhZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoZGV2LT5zZHJfdGFpbCAhPSBQUEM0WFhfTEFTVF9TRCkKKwkJZGV2LT5zZHJfdGFpbCsrOworCWVsc2UKKwkJZGV2LT5zZHJfdGFpbCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNlX3NkICpjcnlwdG80eHhfZ2V0X3NkcChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCQkgICAgICBkbWFfYWRkcl90ICpzZF9kbWEsIHUzMiBpZHgpCit7CisJKnNkX2RtYSA9IGRldi0+c2RyX3BhICsgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBpZHg7CisKKwlyZXR1cm4gIChzdHJ1Y3QgY2Vfc2QgKikoZGV2LT5zZHIgKyBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIGlkeCk7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2Uoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICBkbWFfYWRkcl90ICphZGRyLCB1MzIgKmxlbmd0aCwKKwkJCQkgICB1MzIgKmlkeCwgdTMyICpvZmZzZXQsIHUzMiAqbmJ5dGVzKQoreworCXUzMiBsZW47CisKKwlpZiAoKmxlbmd0aCA+IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgeworCQltZW1jcHkocGh5c190b192aXJ0KCphZGRyKSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgKworCQkJKmlkeCAqIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSArICpvZmZzZXQsCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpOworCQkqb2Zmc2V0ID0gMDsKKwkJKmxlbmd0aCAtPSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCSpuYnl0ZXMgLT0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQlpZiAoKmlkeCA9PSBQUEM0WFhfTEFTVF9TRCkKKwkJCSppZHggPSAwOworCQllbHNlCisJCQkoKmlkeCkrKzsKKwkJKmFkZHIgPSAqYWRkciArICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoKmxlbmd0aCA8IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgeworCQltZW1jcHkocGh5c190b192aXJ0KCphZGRyKSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgKworCQkJKmlkeCAqIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSArICpvZmZzZXQsICpsZW5ndGgpOworCQlpZiAoKCpvZmZzZXQgKyAqbGVuZ3RoKSA9PSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpIHsKKwkJCWlmICgqaWR4ID09IFBQQzRYWF9MQVNUX1NEKQorCQkJCSppZHggPSAwOworCQkJZWxzZQorCQkJCSgqaWR4KSsrOworCQkJKm5ieXRlcyAtPSAqbGVuZ3RoOworCQkJKm9mZnNldCA9IDA7CisJCX0gZWxzZSB7CisJCQkqbmJ5dGVzIC09ICpsZW5ndGg7CisJCQkqb2Zmc2V0ICs9ICpsZW5ndGg7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlsZW4gPSAoKm5ieXRlcyA8PSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpID8KKwkJCQkoKm5ieXRlcykgOiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCW1lbWNweShwaHlzX3RvX3ZpcnQoKmFkZHIpLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSArCisJCQkqaWR4ICogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICsgKm9mZnNldCwKKwkJCWxlbik7CisJCSpvZmZzZXQgPSAwOworCQkqbmJ5dGVzIC09IGxlbjsKKworCQlpZiAoKmlkeCA9PSBQUEM0WFhfTEFTVF9TRCkKKwkJCSppZHggPSAwOworCQllbHNlCisJCQkoKmlkeCkrKzsKKworCQlyZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9jb3B5X3BrdF90b19kc3Qoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgY2VfcGQgKnBkLAorCQkJCSAgICAgIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8sCisJCQkJICAgICAgdTMyIG5ieXRlcywKKwkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCkKK3sKKwlkbWFfYWRkcl90IGFkZHI7CisJdTMyIHRoaXNfc2Q7CisJdTMyIG9mZnNldDsKKwl1MzIgbGVuOworCXUzMiBpOworCXUzMiBzZ19sZW47CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCXRoaXNfc2QgPSBwZF91aW5mby0+Zmlyc3Rfc2Q7CisJb2Zmc2V0ID0gMDsKKwlpID0gMDsKKworCXdoaWxlIChuYnl0ZXMpIHsKKwkJc2cgPSAmZHN0W2ldOworCQlzZ19sZW4gPSBzZy0+bGVuZ3RoOworCQlhZGRyID0gZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShzZyksCisJCQkJc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisKKwkJaWYgKG9mZnNldCA9PSAwKSB7CisJCQlsZW4gPSAobmJ5dGVzIDw9IHNnLT5sZW5ndGgpID8gbmJ5dGVzIDogc2ctPmxlbmd0aDsKKwkJCXdoaWxlIChjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShkZXYsICZhZGRyLCAmbGVuLAorCQkJCSZ0aGlzX3NkLCAmb2Zmc2V0LCAmbmJ5dGVzKSkKKwkJCQk7CisJCQlpZiAoIW5ieXRlcykKKwkJCQlyZXR1cm47CisJCQlpKys7CisJCX0gZWxzZSB7CisJCQlsZW4gPSAobmJ5dGVzIDw9IChkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgLSBvZmZzZXQpKSA/CisJCQkJbmJ5dGVzIDogKGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAtIG9mZnNldCk7CisJCQlsZW4gPSAoc2ctPmxlbmd0aCA8IGxlbikgPyBzZy0+bGVuZ3RoIDogbGVuOworCQkJd2hpbGUgKGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKGRldiwgJmFkZHIsICZsZW4sCisJCQkJCSAgICAgICAmdGhpc19zZCwgJm9mZnNldCwgJm5ieXRlcykpCisJCQkJOworCQkJaWYgKCFuYnl0ZXMpCisJCQkJcmV0dXJuOworCQkJc2dfbGVuIC09IGxlbjsKKwkJCWlmIChzZ19sZW4pIHsKKwkJCQlhZGRyICs9IGxlbjsKKwkJCQl3aGlsZSAoY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2UoZGV2LCAmYWRkciwKKwkJCQkJJnNnX2xlbiwgJnRoaXNfc2QsICZvZmZzZXQsICZuYnl0ZXMpKQorCQkJCQk7CisJCQl9CisJCQlpKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2NvcHlfZGlnZXN0X3RvX2RzdChzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvLAorCQkJCQlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJc3RydWN0IHNhX3N0YXRlX3JlY29yZCAqc3RhdGVfcmVjb3JkID0KKwkJCQkoc3RydWN0IHNhX3N0YXRlX3JlY29yZCAqKSBwZF91aW5mby0+c3JfdmE7CisKKwlpZiAoc2EtPnNhX2NvbW1hbmRfMC5iZi5oYXNoX2FsZyA9PSBTQV9IQVNIX0FMR19TSEExKSB7CisJCW1lbWNweSgodm9pZCAqKSBwZF91aW5mby0+ZGVzdF92YSwgc3RhdGVfcmVjb3JkLT5zYXZlX2RpZ2VzdCwKKwkJICAgICAgIFNBX0hBU0hfQUxHX1NIQTFfRElHRVNUX1NJWkUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfcmV0X3NnX2Rlc2Moc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8pCit7CisJaW50IGk7CisJaWYgKHBkX3VpbmZvLT5udW1fZ2QpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkX3VpbmZvLT5udW1fZ2Q7IGkrKykKKwkJCWNyeXB0bzR4eF9wdXRfZ2RfdG9fZ2RyKGRldik7CisJCXBkX3VpbmZvLT5maXJzdF9nZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fZ2QgPSAwOworCX0KKwlpZiAocGRfdWluZm8tPm51bV9zZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGRfdWluZm8tPm51bV9zZDsgaSsrKQorCQkJY3J5cHRvNHh4X3B1dF9zZF90b19zZHIoZGV2KTsKKworCQlwZF91aW5mby0+Zmlyc3Rfc2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX3NkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2FibGtjaXBoZXJfZG9uZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbywKKwkJCQkgICAgIHN0cnVjdCBjZV9wZCAqcGQpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eDsKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICphYmxrX3JlcTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdDsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlhYmxrX3JlcSA9IGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KHBkX3VpbmZvLT5hc3luY19yZXEpOworCWN0eCAgPSBjcnlwdG9fdGZtX2N0eChhYmxrX3JlcS0+YmFzZS50Zm0pOworCisJaWYgKHBkX3VpbmZvLT51c2luZ19zZCkgeworCQljcnlwdG80eHhfY29weV9wa3RfdG9fZHN0KGRldiwgcGQsIHBkX3VpbmZvLCBhYmxrX3JlcS0+bmJ5dGVzLAorCQkJCQkgIGFibGtfcmVxLT5kc3QpOworCX0gZWxzZSB7CisJCWRzdCA9IHBkX3VpbmZvLT5kZXN0X3ZhOworCQlhZGRyID0gZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShkc3QpLAorCQkJCSAgICBkc3QtPm9mZnNldCwgZHN0LT5sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CisJfQorCWNyeXB0bzR4eF9yZXRfc2dfZGVzYyhkZXYsIHBkX3VpbmZvKTsKKwlpZiAoYWJsa19yZXEtPmJhc2UuY29tcGxldGUgIT0gTlVMTCkKKwkJYWJsa19yZXEtPmJhc2UuY29tcGxldGUoJmFibGtfcmVxLT5iYXNlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9haGFzaF9kb25lKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbykKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4OworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphaGFzaF9yZXE7CisKKwlhaGFzaF9yZXEgPSBhaGFzaF9yZXF1ZXN0X2Nhc3QocGRfdWluZm8tPmFzeW5jX3JlcSk7CisJY3R4ICA9IGNyeXB0b190Zm1fY3R4KGFoYXNoX3JlcS0+YmFzZS50Zm0pOworCisJY3J5cHRvNHh4X2NvcHlfZGlnZXN0X3RvX2RzdChwZF91aW5mbywKKwkJCQkgICAgIGNyeXB0b190Zm1fY3R4KGFoYXNoX3JlcS0+YmFzZS50Zm0pKTsKKwljcnlwdG80eHhfcmV0X3NnX2Rlc2MoZGV2LCBwZF91aW5mbyk7CisJLyogY2FsbCB1c2VyIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHggKi8KKwlpZiAoYWhhc2hfcmVxLT5iYXNlLmNvbXBsZXRlICE9IE5VTEwpCisJCWFoYXNoX3JlcS0+YmFzZS5jb21wbGV0ZSgmYWhhc2hfcmVxLT5iYXNlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wZF9kb25lKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIHUzMiBpZHgpCit7CisJc3RydWN0IGNlX3BkICpwZDsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCisJcGQgPSAgZGV2LT5wZHIgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSppZHg7CisJcGRfdWluZm8gPSBkZXYtPnBkcl91aW5mbyArIHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pKmlkeDsKKwlpZiAoY3J5cHRvX3RmbV9hbGdfdHlwZShwZF91aW5mby0+YXN5bmNfcmVxLT50Zm0pID09CisJCQlDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUikKKwkJcmV0dXJuIGNyeXB0bzR4eF9hYmxrY2lwaGVyX2RvbmUoZGV2LCBwZF91aW5mbywgcGQpOworCWVsc2UKKwkJcmV0dXJuIGNyeXB0bzR4eF9haGFzaF9kb25lKGRldiwgcGRfdWluZm8pOworfQorCisvKioKKyAqIE5vdGU6IE9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY29weSBpdGVtcyB0aGF0IGlzIHdvcmQgYWxpZ25lZC4KKyAqLwordm9pZCBjcnlwdG80eHhfbWVtY3B5X2xlKHVuc2lnbmVkIGludCAqZHN0LAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSBpbnQgbGVuKQoreworCXU4ICp0bXA7CisJZm9yICg7IGxlbiA+PSA0OyBidWYgKz0gNCwgbGVuIC09IDQpCisJCSpkc3QrKyA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgaW50ICopIGJ1Zik7CisKKwl0bXAgPSAodTggKilkc3Q7CisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDM6CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9ICooYnVmKzIpOworCQkqdG1wKysgPSAqKGJ1ZisxKTsKKwkJKnRtcCsrID0gKmJ1ZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAqKGJ1ZisxKTsKKwkJKnRtcCsrID0gKmJ1ZjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAqYnVmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9zdG9wX2FsbChzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldikKK3sKKwljcnlwdG80eHhfZGVzdHJveV9wZHIoY29yZV9kZXYtPmRldik7CisJY3J5cHRvNHh4X2Rlc3Ryb3lfZ2RyKGNvcmVfZGV2LT5kZXYpOworCWNyeXB0bzR4eF9kZXN0cm95X3Nkcihjb3JlX2Rldi0+ZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoY29yZV9kZXYtPmRldmljZSwgTlVMTCk7CisJaW91bm1hcChjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlKTsKKwlrZnJlZShjb3JlX2Rldi0+ZGV2KTsKKwlrZnJlZShjb3JlX2Rldik7Cit9CisKK3ZvaWQgY3J5cHRvNHh4X3JldHVybl9wZChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJIHUzMiBwZF9lbnRyeSwgc3RydWN0IGNlX3BkICpwZCwKKwkJCSBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvKQoreworCS8qIGlycSBzaG91bGQgYmUgYWxyZWFkeSBkaXNhYmxlZCAqLworCWRldi0+cGRyX2hlYWQgPSBwZF9lbnRyeTsKKwlwZC0+cGRfY3RsLncgPSAwOworCXBkLT5wZF9jdGxfbGVuLncgPSAwOworCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0ZSRUU7Cit9CisKKy8qCisgKiBkZXJpdmUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHNjYXR0ZXJsaXN0CisgKiBTaGFtbGVzc2x5IGNvcHkgZnJvbSB0YWxpdG9zLmMKKyAqLworc3RhdGljIGludCBnZXRfc2dfY291bnQoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19saXN0LCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzZ19saXN0OworCWludCBzZ19uZW50cyA9IDA7CisKKwl3aGlsZSAobmJ5dGVzKSB7CisJCXNnX25lbnRzKys7CisJCWlmIChzZy0+bGVuZ3RoID4gbmJ5dGVzKQorCQkJYnJlYWs7CisJCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOworCQlzZyA9IHNnX25leHQoc2cpOworCX0KKworCXJldHVybiBzZ19uZW50czsKK30KKworc3RhdGljIHUzMiBnZXRfbmV4dF9nZCh1MzIgY3VycmVudCkKK3sKKwlpZiAoY3VycmVudCAhPSBQUEM0WFhfTEFTVF9HRCkKKwkJcmV0dXJuIGN1cnJlbnQgKyAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X25leHRfc2QodTMyIGN1cnJlbnQpCit7CisJaWYgKGN1cnJlbnQgIT0gUFBDNFhYX0xBU1RfU0QpCisJCXJldHVybiBjdXJyZW50ICsgMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCit1MzIgY3J5cHRvNHh4X2J1aWxkX3BkKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLAorCQkgICAgICAgc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJICAgICAgIHZvaWQgKml2LCB1MzIgaXZfbGVuKQoreworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKKwlkbWFfYWRkcl90IGFkZHIsIHBkX2RtYSwgc2RfZG1hLCBnZF9kbWE7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBjZV9nZCAqZ2Q7CisJc3RydWN0IGNlX3BkICpwZDsKKwl1MzIgbnVtX2dkLCBudW1fc2Q7CisJdTMyIGZzdF9nZCA9IDB4ZmZmZmZmZmY7CisJdTMyIGZzdF9zZCA9IDB4ZmZmZmZmZmY7CisJdTMyIHBkX2VudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbyA9IE5VTEw7CisJdW5zaWduZWQgaW50IG5ieXRlcyA9IGRhdGFsZW4sIGlkeDsKKwl1bnNpZ25lZCBpbnQgaXZsZW4gPSAwOworCXUzMiBnZF9pZHggPSAwOworCisJLyogZmlndXJlIGhvdyBtYW55IGdkIGlzIG5lZWRlZCAqLworCW51bV9nZCA9IGdldF9zZ19jb3VudChzcmMsIGRhdGFsZW4pOworCWlmIChudW1fZ2QgPT0gMSkKKwkJbnVtX2dkID0gMDsKKworCS8qIGZpZ3VyZSBob3cgbWFueSBzZCBpcyBuZWVkZWQgKi8KKwlpZiAoc2dfaXNfbGFzdChkc3QpIHx8IGN0eC0+aXNfaGFzaCkgeworCQludW1fc2QgPSAwOworCX0gZWxzZSB7CisJCWlmIChkYXRhbGVuID4gUFBDNFhYX1NEX0JVRkZFUl9TSVpFKSB7CisJCQludW1fc2QgPSBkYXRhbGVuIC8gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCQkJaWYgKGRhdGFsZW4gJSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpCisJCQkJbnVtX3NkKys7CisJCX0gZWxzZSB7CisJCQludW1fc2QgPSAxOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUgZm9sbG93IHNlY3Rpb24gb2YgY29kZSBuZWVkcyB0byBiZSBwcm90ZWN0ZWQKKwkgKiBUaGUgZ2F0aGVyIHJpbmcgYW5kIHNjYXR0ZXIgcmluZyBuZWVkcyB0byBiZSBjb25zZWN1dGl2ZQorCSAqIEluIGNhc2Ugb2YgcnVuIG91dCBvZiBhbnkga2luZCBvZiBkZXNjcmlwdG9yLCB0aGUgZGVzY3JpcHRvcgorCSAqIGFscmVhZHkgZ290IG11c3QgYmUgcmV0dXJuIHRoZSBvcmlnaW5hbCBwbGFjZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChudW1fZ2QpIHsKKwkJZnN0X2dkID0gY3J5cHRvNHh4X2dldF9uX2dkKGRldiwgbnVtX2dkKTsKKwkJaWYgKGZzdF9nZCA9PSBFUklOR19XQVNfRlVMTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisJaWYgKG51bV9zZCkgeworCQlmc3Rfc2QgPSBjcnlwdG80eHhfZ2V0X25fc2QoZGV2LCBudW1fc2QpOworCQlpZiAoZnN0X3NkID09IEVSSU5HX1dBU19GVUxMKSB7CisJCQlpZiAobnVtX2dkKQorCQkJCWRldi0+Z2RyX2hlYWQgPSBmc3RfZ2Q7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKwlwZF9lbnRyeSA9IGNyeXB0bzR4eF9nZXRfcGRfZnJvbV9wZHJfbm9sb2NrKGRldik7CisJaWYgKHBkX2VudHJ5ID09IEVSSU5HX1dBU19GVUxMKSB7CisJCWlmIChudW1fZ2QpCisJCQlkZXYtPmdkcl9oZWFkID0gZnN0X2dkOworCQlpZiAobnVtX3NkKQorCQkJZGV2LT5zZHJfaGVhZCA9IGZzdF9zZDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcGRfdWluZm8gPSAoc3RydWN0IHBkX3VpbmZvICopKGRldi0+cGRyX3VpbmZvICsKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBwZF9lbnRyeSk7CisJcGQgPSBjcnlwdG80eHhfZ2V0X3BkcChkZXYsICZwZF9kbWEsIHBkX2VudHJ5KTsKKwlwZF91aW5mby0+YXN5bmNfcmVxID0gcmVxOworCXBkX3VpbmZvLT5udW1fZ2QgPSBudW1fZ2Q7CisJcGRfdWluZm8tPm51bV9zZCA9IG51bV9zZDsKKworCWlmIChpdl9sZW4gfHwgY3R4LT5pc19oYXNoKSB7CisJCWl2bGVuID0gaXZfbGVuOworCQlwZC0+c2EgPSBwZF91aW5mby0+c2FfcGE7CisJCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBwZF91aW5mby0+c2FfdmE7CisJCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJCW1lbWNweShzYSwgY3R4LT5zYV9pbiwgY3R4LT5zYV9sZW4gKiA0KTsKKwkJZWxzZQorCQkJbWVtY3B5KHNhLCBjdHgtPnNhX291dCwgY3R4LT5zYV9sZW4gKiA0KTsKKworCQltZW1jcHkoKHZvaWQgKikgc2EgKyBjdHgtPm9mZnNldF90b19zcl9wdHIsCisJCQkmcGRfdWluZm8tPnNyX3BhLCA0KTsKKworCQlpZiAoaXZfbGVuKQorCQkJY3J5cHRvNHh4X21lbWNweV9sZShwZF91aW5mby0+c3JfdmEsIGl2LCBpdl9sZW4pOworCX0gZWxzZSB7CisJCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkgeworCQkJcGQtPnNhID0gY3R4LT5zYV9pbl9kbWFfYWRkcjsKKwkJCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCQl9IGVsc2UgeworCQkJcGQtPnNhID0gY3R4LT5zYV9vdXRfZG1hX2FkZHI7CisJCQlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQ7CisJCX0KKwl9CisJcGQtPnNhX2xlbiA9IGN0eC0+c2FfbGVuOworCWlmIChudW1fZ2QpIHsKKwkJLyogZ2V0IGZpcnN0IGdkIHdlIGFyZSBnb2luZyB0byB1c2UgKi8KKwkJZ2RfaWR4ID0gZnN0X2dkOworCQlwZF91aW5mby0+Zmlyc3RfZ2QgPSBmc3RfZ2Q7CisJCXBkX3VpbmZvLT5udW1fZ2QgPSBudW1fZ2Q7CisJCWdkID0gY3J5cHRvNHh4X2dldF9nZHAoZGV2LCAmZ2RfZG1hLCBnZF9pZHgpOworCQlwZC0+c3JjID0gZ2RfZG1hOworCQkvKiBlbmFibGUgZ2F0aGVyICovCisJCXNhLT5zYV9jb21tYW5kXzAuYmYuZ2F0aGVyID0gMTsKKwkJaWR4ID0gMDsKKwkJc3JjID0gJnNyY1swXTsKKwkJLyogd2FsayB0aGUgc2csIGFuZCBzZXR1cCBnYXRoZXIgYXJyYXkgKi8KKwkJd2hpbGUgKG5ieXRlcykgeworCQkJc2cgPSAmc3JjW2lkeF07CisJCQlhZGRyID0gZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShzZyksCisJCQkJICAgIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCQkJZ2QtPnB0ciA9IGFkZHI7CisJCQlnZC0+Y3RsX2xlbi5sZW4gPSBzZy0+bGVuZ3RoOworCQkJZ2QtPmN0bF9sZW4uZG9uZSA9IDA7CisJCQlnZC0+Y3RsX2xlbi5yZWFkeSA9IDE7CisJCQlpZiAoc2ctPmxlbmd0aCA+PSBuYnl0ZXMpCisJCQkJYnJlYWs7CisJCQluYnl0ZXMgLT0gc2ctPmxlbmd0aDsKKwkJCWdkX2lkeCA9IGdldF9uZXh0X2dkKGdkX2lkeCk7CisJCQlnZCA9IGNyeXB0bzR4eF9nZXRfZ2RwKGRldiwgJmdkX2RtYSwgZ2RfaWR4KTsKKwkJCWlkeCsrOworCQl9CisJfSBlbHNlIHsKKwkJcGQtPnNyYyA9ICh1MzIpZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShzcmMpLAorCQkJCXNyYy0+b2Zmc2V0LCBzcmMtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJCS8qCisJCSAqIERpc2FibGUgZ2F0aGVyIGluIHNhIGNvbW1hbmQKKwkJICovCisJCXNhLT5zYV9jb21tYW5kXzAuYmYuZ2F0aGVyID0gMDsKKwkJLyoKKwkJICogSW5kaWNhdGUgZ2F0aGVyIGFycmF5IGlzIG5vdCB1c2VkCisJCSAqLworCQlwZF91aW5mby0+Zmlyc3RfZ2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX2dkID0gMDsKKwl9CisJaWYgKGN0eC0+aXNfaGFzaCB8fCBzZ19pc19sYXN0KGRzdCkpIHsKKwkJLyoKKwkJICogd2Uga25vdyBhcHBsaWNhdGlvbiBnaXZlIHVzIGRzdCBhIHdob2xlIHBpZWNlIG9mIG1lbW9yeQorCQkgKiBubyBuZWVkIHRvIHVzZSBzY2F0dGVyIHJpbmcuCisJCSAqIEluIGNhc2Ugb2YgaXNfaGFzaCwgdGhlIGljdiBpcyBhbHdheXMgYXQgZW5kIG9mIHNyYyBkYXRhLgorCQkgKi8KKwkJcGRfdWluZm8tPnVzaW5nX3NkID0gMDsKKwkJcGRfdWluZm8tPmZpcnN0X3NkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9zZCA9IDA7CisJCXBkX3VpbmZvLT5kZXN0X3ZhID0gZHN0OworCQlzYS0+c2FfY29tbWFuZF8wLmJmLnNjYXR0ZXIgPSAwOworCQlpZiAoY3R4LT5pc19oYXNoKQorCQkJcGQtPmRlc3QgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilkc3QpOworCQllbHNlCisJCQlwZC0+ZGVzdCA9ICh1MzIpZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkJc2dfcGFnZShkc3QpLCBkc3QtPm9mZnNldCwKKwkJCQkJZHN0LT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjZV9zZCAqc2QgPSBOVUxMOworCQl1MzIgc2RfaWR4ID0gZnN0X3NkOworCQluYnl0ZXMgPSBkYXRhbGVuOworCQlzYS0+c2FfY29tbWFuZF8wLmJmLnNjYXR0ZXIgPSAxOworCQlwZF91aW5mby0+dXNpbmdfc2QgPSAxOworCQlwZF91aW5mby0+ZGVzdF92YSA9IGRzdDsKKwkJcGRfdWluZm8tPmZpcnN0X3NkID0gZnN0X3NkOworCQlwZF91aW5mby0+bnVtX3NkID0gbnVtX3NkOworCQlzZCA9IGNyeXB0bzR4eF9nZXRfc2RwKGRldiwgJnNkX2RtYSwgc2RfaWR4KTsKKwkJcGQtPmRlc3QgPSBzZF9kbWE7CisJCS8qIHNldHVwIHNjYXR0ZXIgZGVzY3JpcHRvciAqLworCQlzZC0+Y3RsLmRvbmUgPSAwOworCQlzZC0+Y3RsLnJkeSA9IDE7CisJCS8qIHNkLT5wdHIgc2hvdWxkIGJlIHNldHVwIGJ5IHNkX2luaXQgcm91dGluZSovCisJCWlkeCA9IDA7CisJCWlmIChuYnl0ZXMgPj0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFKQorCQkJbmJ5dGVzIC09IFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwkJZWxzZQorCQkJbmJ5dGVzID0gMDsKKwkJd2hpbGUgKG5ieXRlcykgeworCQkJc2RfaWR4ID0gZ2V0X25leHRfc2Qoc2RfaWR4KTsKKwkJCXNkID0gY3J5cHRvNHh4X2dldF9zZHAoZGV2LCAmc2RfZG1hLCBzZF9pZHgpOworCQkJLyogc2V0dXAgc2NhdHRlciBkZXNjcmlwdG9yICovCisJCQlzZC0+Y3RsLmRvbmUgPSAwOworCQkJc2QtPmN0bC5yZHkgPSAxOworCQkJaWYgKG5ieXRlcyA+PSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpCisJCQkJbmJ5dGVzIC09IFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwkJCWVsc2UKKwkJCQkvKgorCQkJCSAqIFNEIGVudHJ5IGNhbiBob2xkIFBQQzRYWF9TRF9CVUZGRVJfU0laRSwKKwkJCQkgKiB3aGljaCBpcyBtb3JlIHRoYW4gbmJ5dGVzLCBzbyBkb25lLgorCQkJCSAqLworCQkJCW5ieXRlcyA9IDA7CisJCX0KKwl9CisKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmhhc2hfY3J5cHRvX29mZnNldCA9IDA7CisJcGQtPnBkX2N0bC53ID0gY3R4LT5wZF9jdGw7CisJcGQtPnBkX2N0bF9sZW4udyA9IDB4MDA0MDAwMDAgfCAoY3R4LT5ieXBhc3MgPDwgMjQpIHwgZGF0YWxlbjsKKwlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9JTlVTRTsKKwl3bWIoKTsKKwkvKiB3cml0ZSBhbnkgdmFsdWUgdG8gcHVzaCBlbmdpbmUgdG8gcmVhZCBhIHBkICovCisJd3JpdGVsKDEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfREVTQ1JfUkQpOworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKKy8qKgorICogQWxnb3JpdGhtIFJlZ2lzdHJhdGlvbiBGdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBjcnlwdG80eHhfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnID0gdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKmFtY2NfYWxnID0gY3J5cHRvX2FsZ190b19jcnlwdG80eHhfYWxnKGFsZyk7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljdHgtPmRldiA9IGFtY2NfYWxnLT5kZXY7CisJY3R4LT5zYV9pbiA9IE5VTEw7CisJY3R4LT5zYV9vdXQgPSBOVUxMOworCWN0eC0+c2FfaW5fZG1hX2FkZHIgPSAwOworCWN0eC0+c2Ffb3V0X2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX2xlbiA9IDA7CisKKwlpZiAoYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSkKKwkJdGZtLT5jcnRfYWJsa2NpcGhlci5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KTsKKwllbHNlIGlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWhhc2hfdHlwZSkKKwkJdGZtLT5jcnRfYWhhc2gucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2FsZ19leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCWNyeXB0bzR4eF9mcmVlX3N0YXRlX3JlY29yZChjdHgpOworfQorCitpbnQgY3J5cHRvNHh4X3JlZ2lzdGVyX2FsZyhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqc2VjX2RldiwKKwkJCSAgIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnLCBpbnQgYXJyYXlfc2l6ZSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqYWxnOworCWludCBpOworCWludCByYyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXlfc2l6ZTsgaSsrKSB7CisJCWFsZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfYWxnKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWxnKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJYWxnLT5hbGcgPSBjcnlwdG9fYWxnW2ldOworCQlJTklUX0xJU1RfSEVBRCgmYWxnLT5hbGcuY3JhX2xpc3QpOworCQlpZiAoYWxnLT5hbGcuY3JhX2luaXQgPT0gTlVMTCkKKwkJCWFsZy0+YWxnLmNyYV9pbml0ID0gY3J5cHRvNHh4X2FsZ19pbml0OworCQlpZiAoYWxnLT5hbGcuY3JhX2V4aXQgPT0gTlVMTCkKKwkJCWFsZy0+YWxnLmNyYV9leGl0ID0gY3J5cHRvNHh4X2FsZ19leGl0OworCQlhbGctPmRldiA9IHNlY19kZXY7CisJCXJjID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnLT5hbGcpOworCQlpZiAocmMpIHsKKwkJCWxpc3RfZGVsKCZhbGctPmVudHJ5KTsKKwkJCWtmcmVlKGFsZyk7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZhbGctPmVudHJ5LCAmc2VjX2Rldi0+YWxnX2xpc3QpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF91bnJlZ2lzdGVyX2FsZyhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqc2VjX2RldikKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqYWxnLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFsZywgdG1wLCAmc2VjX2Rldi0+YWxnX2xpc3QsIGVudHJ5KSB7CisJCWxpc3RfZGVsKCZhbGctPmVudHJ5KTsKKwkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGctPmFsZyk7CisJCWtmcmVlKGFsZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfYmhfdGFza2xldF9jYih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKwlzdHJ1Y3QgY2VfcGQgKnBkOworCXUzMiB0YWlsOworCisJd2hpbGUgKGNvcmVfZGV2LT5kZXYtPnBkcl9oZWFkICE9IGNvcmVfZGV2LT5kZXYtPnBkcl90YWlsKSB7CisJCXRhaWwgPSBjb3JlX2Rldi0+ZGV2LT5wZHJfdGFpbDsKKwkJcGRfdWluZm8gPSBjb3JlX2Rldi0+ZGV2LT5wZHJfdWluZm8gKworCQkJc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykqdGFpbDsKKwkJcGQgPSAgY29yZV9kZXYtPmRldi0+cGRyICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiB0YWlsOworCQlpZiAoKHBkX3VpbmZvLT5zdGF0ZSA9PSBQRF9FTlRSWV9JTlVTRSkgJiYKKwkJCQkgICBwZC0+cGRfY3RsLmJmLnBlX2RvbmUgJiYKKwkJCQkgICAhcGQtPnBkX2N0bC5iZi5ob3N0X3JlYWR5KSB7CisJCQlwZC0+cGRfY3RsLmJmLnBlX2RvbmUgPSAwOworCQkJY3J5cHRvNHh4X3BkX2RvbmUoY29yZV9kZXYtPmRldiwgdGFpbCk7CisJCQljcnlwdG80eHhfcHV0X3BkX3RvX3Bkcihjb3JlX2Rldi0+ZGV2LCB0YWlsKTsKKwkJCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0ZSRUU7CisJCX0gZWxzZSB7CisJCQkvKiBpZiB0YWlsIG5vdCBkb25lLCBicmVhayAqLworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qKgorICogVG9wIEhhbGYgb2YgaXNyLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgY3J5cHRvNHh4X2NlX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoY29yZV9kZXYtPmRldi0+Y2VfYmFzZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdyaXRlbChQUEM0WFhfSU5URVJSVVBUX0NMUiwKKwkgICAgICAgY29yZV9kZXYtPmRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfQ0xSKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZjb3JlX2Rldi0+dGFza2xldCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogU3VwcG9ydGVkIENyeXB0byBBbGdvcml0aG1zCisgKi8KK3N0cnVjdCBjcnlwdG9fYWxnIGNyeXB0bzR4eF9hbGdbXSA9IHsKKwkvKiBDcnlwdG8gQUVTIG1vZGVzICovCisJeworCQkuY3JhX25hbWUgCT0gImNiYyhhZXMpIiwKKwkJLmNyYV9kcml2ZXJfbmFtZSA9ICJjYmMtYWVzLXBwYzR4eCIsCisJCS5jcmFfcHJpb3JpdHkgCT0gQ1JZUFRPNFhYX0NSWVBUT19QUklPUklUWSwKKwkJLmNyYV9mbGFncyAJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUiB8IENSWVBUT19BTEdfQVNZTkMsCisJCS5jcmFfYmxvY2tzaXplIAk9IEFFU19CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUgCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KSwKKwkJLmNyYV9hbGlnbm1hc2sgCT0gMCwKKwkJLmNyYV90eXBlIAk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCQkuY3JhX21vZHVsZSAJPSBUSElTX01PRFVMRSwKKwkJLmNyYV91IAkJPSB7CisJCQkuYWJsa2NpcGhlciA9IHsKKwkJCQkubWluX2tleXNpemUgCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCQkubWF4X2tleXNpemUgCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCQkuaXZzaXplCQk9IEFFU19JVl9TSVpFLAorCQkJCS5zZXRrZXkgCT0gY3J5cHRvNHh4X3NldGtleV9hZXNfY2JjLAorCQkJCS5lbmNyeXB0IAk9IGNyeXB0bzR4eF9lbmNyeXB0LAorCQkJCS5kZWNyeXB0IAk9IGNyeXB0bzR4eF9kZWNyeXB0LAorCQkJfQorCQl9CisJfSwKKwkvKiBIYXNoIFNIQTEgKi8KKwl7CisJCS5jcmFfbmFtZQk9ICJzaGExIiwKKwkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzaGExLXBwYzR4eCIsCisJCS5jcmFfcHJpb3JpdHkJPSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0gQ1JZUFRPX0FMR19UWVBFX0FIQVNIIHwgQ1JZUFRPX0FMR19BU1lOQywKKwkJLmNyYV9ibG9ja3NpemUJPSBTSEExX0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCksCisJCS5jcmFfYWxpZ25tYXNrCT0gMCwKKwkJLmNyYV90eXBlCT0gJmNyeXB0b19haGFzaF90eXBlLAorCQkuY3JhX2luaXQJPSBjcnlwdG80eHhfc2hhMV9hbGdfaW5pdCwKKwkJLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKwkJLmNyYV91CQk9IHsKKwkJCS5haGFzaCA9IHsKKwkJCQkuZGlnZXN0c2l6ZSAJPSBTSEExX0RJR0VTVF9TSVpFLAorCQkJCS5pbml0CQk9IGNyeXB0bzR4eF9oYXNoX2luaXQsCisJCQkJLnVwZGF0ZQkJPSBjcnlwdG80eHhfaGFzaF91cGRhdGUsCisJCQkJLmZpbmFsICAJPSBjcnlwdG80eHhfaGFzaF9maW5hbCwKKwkJCQkuZGlnZXN0IAk9IGNyeXB0bzR4eF9oYXNoX2RpZ2VzdCwKKwkJCX0KKwkJfQorCX0sCit9OworCisvKioKKyAqIE1vZHVsZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0bzR4eF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCWludCByYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2OworCisJcmMgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9mZGV2LT5ub2RlLCAwLCAmcmVzKTsKKwlpZiAocmMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhbWNjLHBwYzQ2MGV4LWNyeXB0byIpKSB7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNUKSB8IFBQQzQ2MEVYX0NFX1JFU0VUKTsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QpICYgflBQQzQ2MEVYX0NFX1JFU0VUKTsKKwl9IGVsc2UgaWYgKG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkiYW1jYyxwcGM0MDVleC1jcnlwdG8iKSkgeworCQltdGRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCkgfCBQUEM0MDVFWF9DRV9SRVNFVCk7CisJCW10ZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNUKSAmIH5QUEM0MDVFWF9DRV9SRVNFVCk7CisJfSBlbHNlIGlmIChvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJImFtY2MscHBjNDYwc3gtY3J5cHRvIikpIHsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QpIHwgUFBDNDYwU1hfQ0VfUkVTRVQpOworCQltdGRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCkgJiB+UFBDNDYwU1hfQ0VfUkVTRVQpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ3J5cHRvIEZ1bmN0aW9uIE5vdCBzdXBwb3J0ZWQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29yZV9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3JlX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBjb3JlX2Rldik7CisJY29yZV9kZXYtPm9mZGV2ID0gb2ZkZXY7CisJY29yZV9kZXYtPmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3JlX2Rldi0+ZGV2KQorCQlnb3RvIGVycl9hbGxvY19kZXY7CisKKwljb3JlX2Rldi0+ZGV2LT5jb3JlX2RldiA9IGNvcmVfZGV2OworCWNvcmVfZGV2LT5kZXZpY2UgPSBkZXY7CisJc3Bpbl9sb2NrX2luaXQoJmNvcmVfZGV2LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY29yZV9kZXYtPmRldi0+YWxnX2xpc3QpOworCXJjID0gY3J5cHRvNHh4X2J1aWxkX3Bkcihjb3JlX2Rldi0+ZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2J1aWxkX3BkcjsKKworCXJjID0gY3J5cHRvNHh4X2J1aWxkX2dkcihjb3JlX2Rldi0+ZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2J1aWxkX2dkcjsKKworCXJjID0gY3J5cHRvNHh4X2J1aWxkX3Nkcihjb3JlX2Rldi0+ZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2J1aWxkX3NkcjsKKworCS8qIEluaXQgdGFza2xldCBmb3IgYm90dG9tIGhhbGYgcHJvY2Vzc2luZyAqLworCXRhc2tsZXRfaW5pdCgmY29yZV9kZXYtPnRhc2tsZXQsIGNyeXB0bzR4eF9iaF90YXNrbGV0X2NiLAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOworCisJLyogUmVnaXN0ZXIgZm9yIENyeXB0byBpc3IsIENyeXB0byBFbmdpbmUgSVJRICovCisJY29yZV9kZXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5ub2RlLCAwKTsKKwlyYyA9IHJlcXVlc3RfaXJxKGNvcmVfZGV2LT5pcnEsIGNyeXB0bzR4eF9jZV9pbnRlcnJ1cHRfaGFuZGxlciwgMCwKKwkJCSBjb3JlX2Rldi0+ZGV2LT5uYW1lLCBkZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisKKwljb3JlX2Rldi0+ZGV2LT5jZV9iYXNlID0gb2ZfaW9tYXAob2ZkZXYtPm5vZGUsIDApOworCWlmICghY29yZV9kZXYtPmRldi0+Y2VfYmFzZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBvZl9pb21hcFxuIik7CisJCWdvdG8gZXJyX2lvbWFwOworCX0KKworCS8qIG5lZWQgdG8gc2V0dXAgcGRyLCByZHIsIGdkciBhbmQgc2RyIGJlZm9yZSB0aGlzICovCisJY3J5cHRvNHh4X2h3X2luaXQoY29yZV9kZXYtPmRldik7CisKKwkvKiBSZWdpc3RlciBzZWN1cml0eSBhbGdvcml0aG1zIHdpdGggTGludXggQ3J5cHRvQVBJICovCisJcmMgPSBjcnlwdG80eHhfcmVnaXN0ZXJfYWxnKGNvcmVfZGV2LT5kZXYsIGNyeXB0bzR4eF9hbGcsCisJCQkgICAgICAgQVJSQVlfU0laRShjcnlwdG80eHhfYWxnKSk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9zdGFydF9kZXY7CisKKwlyZXR1cm4gMDsKKworZXJyX3N0YXJ0X2RldjoKKwlpb3VubWFwKGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UpOworZXJyX2lvbWFwOgorCWZyZWVfaXJxKGNvcmVfZGV2LT5pcnEsIGRldik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhjb3JlX2Rldi0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJmNvcmVfZGV2LT50YXNrbGV0KTsKK2Vycl9yZXF1ZXN0X2lycToKKwljcnlwdG80eHhfZGVzdHJveV9zZHIoY29yZV9kZXYtPmRldik7CitlcnJfYnVpbGRfc2RyOgorCWNyeXB0bzR4eF9kZXN0cm95X2dkcihjb3JlX2Rldi0+ZGV2KTsKK2Vycl9idWlsZF9nZHI6CisJY3J5cHRvNHh4X2Rlc3Ryb3lfcGRyKGNvcmVfZGV2LT5kZXYpOworZXJyX2J1aWxkX3BkcjoKKwlrZnJlZShjb3JlX2Rldi0+ZGV2KTsKK2Vycl9hbGxvY19kZXY6CisJa2ZyZWUoY29yZV9kZXYpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBjcnlwdG80eHhfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlmcmVlX2lycShjb3JlX2Rldi0+aXJxLCBkZXYpOworCWlycV9kaXNwb3NlX21hcHBpbmcoY29yZV9kZXYtPmlycSk7CisKKwl0YXNrbGV0X2tpbGwoJmNvcmVfZGV2LT50YXNrbGV0KTsKKwkvKiBVbi1yZWdpc3RlciB3aXRoIExpbnV4IENyeXB0b0FQSSAqLworCWNyeXB0bzR4eF91bnJlZ2lzdGVyX2FsZyhjb3JlX2Rldi0+ZGV2KTsKKwkvKiBGcmVlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5ICovCisJY3J5cHRvNHh4X3N0b3BfYWxsKGNvcmVfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjcnlwdG80eHhfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlICAgICAgPSAiYW1jYyxwcGM0eHgtY3J5cHRvIix9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGNyeXB0bzR4eF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImNyeXB0bzR4eCIsCisJLm1hdGNoX3RhYmxlCT0gY3J5cHRvNHh4X21hdGNoLAorCS5wcm9iZQkJPSBjcnlwdG80eHhfcHJvYmUsCisJLnJlbW92ZQkJPSBjcnlwdG80eHhfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3J5cHRvNHh4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjcnlwdG80eHhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNyeXB0bzR4eF9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNyeXB0bzR4eF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjcnlwdG80eHhfaW5pdCk7Cittb2R1bGVfZXhpdChjcnlwdG80eHhfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQU1DQyBQUEM0eHggY3J5cHRvIGFjY2VsZXJhdG9yIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWYxMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5oCkBAIC0wLDAgKzEsMTc3IEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgQU1DQyBDcnlwdG8gb2ZmbG9hZCBMaW51eCBkZXZpY2UgZHJpdmVyIGZvcgorICogdXNlIHdpdGggTGludXggQ3J5cHRvQVBJLgorCisgKi8KKworI2lmbmRlZiBfX0NSWVBUTzRYWF9DT1JFX0hfXworI2RlZmluZSBfX0NSWVBUTzRYWF9DT1JFX0hfXworCisjZGVmaW5lIFBQQzQ2MFNYX1NEUjBfU1JTVCAgICAgICAgICAgICAgICAgICAgICAweDIwMQorI2RlZmluZSBQUEM0MDVFWF9TRFIwX1NSU1QgICAgICAgICAgICAgICAgICAgICAgMHgyMDAKKyNkZWZpbmUgUFBDNDYwRVhfU0RSMF9TUlNUICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCisjZGVmaW5lIFBQQzQ2MEVYX0NFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFBQQzQ2MFNYX0NFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFBQQzQwNUVYX0NFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0NSWVBUT19QUklPUklUWQkJMzAwCisjZGVmaW5lIFBQQzRYWF9MQVNUX1BECQkJCTYzCisjZGVmaW5lIFBQQzRYWF9OVU1fUEQJCQkJNjQKKyNkZWZpbmUgUFBDNFhYX0xBU1RfR0QJCQkJMTAyMworI2RlZmluZSBQUEM0WFhfTlVNX0dECQkJCTEwMjQKKyNkZWZpbmUgUFBDNFhYX0xBU1RfU0QJCQkJNjMKKyNkZWZpbmUgUFBDNFhYX05VTV9TRAkJCQk2NAorI2RlZmluZSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUJCQkyMDQ4CisKKyNkZWZpbmUgUERfRU5UUllfSU5VU0UJCQkJMQorI2RlZmluZSBQRF9FTlRSWV9GUkVFCQkJCTAKKyNkZWZpbmUgRVJJTkdfV0FTX0ZVTEwJCQkJMHhmZmZmZmZmZgorCitzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZTsKKworc3RydWN0IHBkX3VpbmZvIHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworCXUzMiAgIHN0YXRlOworCXUzMiB1c2luZ19zZDsKKwl1MzIgZmlyc3RfZ2Q7CQkvKiBmaXJzdCBnYXRoZXIgZGlzY3JpcHRvcgorCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl1MzIgbnVtX2dkOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZ2F0aGVyIGRpc2NyaXB0b3IKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdTMyIGZpcnN0X3NkOwkJLyogZmlyc3Qgc2NhdHRlciBkaXNjcmlwdG9yCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXUzMiBudW1fc2Q7CQkvKiBudW1iZXIgb2Ygc2NhdHRlciBkaXNjcmlwdG9ycworCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl2b2lkICpzYV92YTsJCS8qIHNoYWRvdyBzYSwgd2hlbiB1c2luZyBjcCBmcm9tIGN0eC0+c2EgKi8KKwl1MzIgc2FfcGE7CisJdm9pZCAqc3JfdmE7CQkvKiBzdGF0ZSByZWNvcmQgZm9yIHNoYWRvdyBzYSAqLworCXUzMiBzcl9wYTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRlc3RfdmE7CisJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphc3luY19yZXE7IAkvKiBiYXNlIGNyeXB0byByZXF1ZXN0CisJCQkJCQkJZm9yIHRoaXMgcGFja2V0ICovCit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSB7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXY7CisJY2hhciAqbmFtZTsKKwl1NjQgIGNlX3BoeV9hZGRyZXNzOworCXZvaWQgX19pb21lbSAqY2VfYmFzZTsKKworCXZvaWQgKnBkcjsJCQkvKiBiYXNlIGFkZHJlc3Mgb2YgcGFja2V0CisJCQkJCWRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3QgcGRyX3BhOwkJLyogcGh5c2ljYWwgYWRkcmVzcyB1c2VkIHRvCisJCQkJCXByb2dyYW0gY2UgcGRyX2Jhc2VfcmVnaXN0ZXIgKi8KKwl2b2lkICpnZHI7ICAgICAgICAgICAgICAgICAgICAgIC8qIGdhdGhlciBkZXNjcmlwdG9yIHJpbmcgKi8KKwlkbWFfYWRkcl90IGdkcl9wYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MgdXNlZCB0bworCQkJCQlwcm9ncmFtIGNlIGdkcl9iYXNlX3JlZ2lzdGVyICovCisJdm9pZCAqc2RyOwkJCS8qIHNjYXR0ZXIgZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBzZHJfcGE7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgdG8KKwkJCQkJcHJvZ3JhbSBjZSBzZHJfYmFzZV9yZWdpc3RlciAqLworCXZvaWQgKnNjYXR0ZXJfYnVmZmVyX3ZhOworCWRtYV9hZGRyX3Qgc2NhdHRlcl9idWZmZXJfcGE7CisJdTMyIHNjYXR0ZXJfYnVmZmVyX3NpemU7CisKKwl2b2lkICpzaGFkb3dfc2FfcG9vbDsJCS8qIHBvb2wgb2YgbWVtb3J5IGZvciBzYSBpbiBwZF91aW5mbyAqLworCWRtYV9hZGRyX3Qgc2hhZG93X3NhX3Bvb2xfcGE7CisJdm9pZCAqc2hhZG93X3NyX3Bvb2w7CQkvKiBwb29sIG9mIG1lbW9yeSBmb3Igc3IgaW4gcGRfdWluZm8gKi8KKwlkbWFfYWRkcl90IHNoYWRvd19zcl9wb29sX3BhOworCXUzMiBwZHJfdGFpbDsKKwl1MzIgcGRyX2hlYWQ7CisJdTMyIGdkcl90YWlsOworCXUzMiBnZHJfaGVhZDsKKwl1MzIgc2RyX3RhaWw7CisJdTMyIHNkcl9oZWFkOworCXZvaWQgKnBkcl91aW5mbzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFsZ19saXN0OwkvKiBMaXN0IG9mIGFsZ29yaXRobSBzdXBwb3J0ZWQKKwkJCQkJYnkgdGhpcyBkZXZpY2UgKi8KK307CisKK3N0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldjsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworCXUzMiBpbnRfc3RhdHVzOworCXUzMiBpcnE7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RydWN0IGNyeXB0bzR4eF9jdHggeworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CisJdm9pZCAqc2FfaW47CisJZG1hX2FkZHJfdCBzYV9pbl9kbWFfYWRkcjsKKwl2b2lkICpzYV9vdXQ7CisJZG1hX2FkZHJfdCBzYV9vdXRfZG1hX2FkZHI7CisJdm9pZCAqc3RhdGVfcmVjb3JkOworCWRtYV9hZGRyX3Qgc3RhdGVfcmVjb3JkX2RtYV9hZGRyOworCXUzMiBzYV9sZW47CisJdTMyIG9mZnNldF90b19zcl9wdHI7ICAgICAgICAgICAvKiBvZmZzZXQgdG8gc3RhdGUgcHRyLCBpbiBkeW5hbWljIHNhICovCisJdTMyIGRpcmVjdGlvbjsKKwl1MzIgbmV4dF9oZHI7CisJdTMyIHNhdmVfaXY7CisJdTMyIHBkX2N0bF9sZW47CisJdTMyIHBkX2N0bDsKKwl1MzIgYnlwYXNzOworCXUzMiBpc19oYXNoOworCXUzMiBoYXNoX2ZpbmFsOworfTsKKworc3RydWN0IGNyeXB0bzR4eF9yZXFfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OwkvKiBEZXZpY2UgaW4gd2hpY2gKKwkJCQkJb3BlcmF0aW9uIHRvIHNlbmQgdG8gKi8KKwl2b2lkICpzYTsKKwl1MzIgc2FfZG1hX2FkZHI7CisJdTE2IHNhX2xlbjsKK307CisKK3N0cnVjdCBjcnlwdG80eHhfYWxnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBlbnRyeTsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyBhbGc7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKK307CisKKyNkZWZpbmUgY3J5cHRvX2FsZ190b19jcnlwdG80eHhfYWxnKHgpIFwKKwkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBjcnlwdG80eHhfYWxnLCBhbGcpCisKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2FsbG9jX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsIHUzMiBzaXplKTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9mcmVlX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBjcnlwdG80eHhfYWxsb2Nfc2FfcmN0eChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LAorCQkJCSAgIHN0cnVjdCBjcnlwdG80eHhfY3R4ICpyY3R4KTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9mcmVlX3NhX3JjdHgoc3RydWN0IGNyeXB0bzR4eF9jdHggKnJjdHgpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X2ZyZWVfY3R4KHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBjcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfa2V5X2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBnZXRfZHluYW1pY19zYV9pdl9zaXplKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X21lbWNweV9sZSh1bnNpZ25lZCBpbnQgKmRzdCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOworZXh0ZXJuIHUzMiBjcnlwdG80eHhfYnVpbGRfcGQoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsCisJCQkgICAgICBzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LAorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJICAgICAgdm9pZCAqaXYsIHUzMiBpdl9sZW4pOworZXh0ZXJuIGludCBjcnlwdG80eHhfc2V0a2V5X2Flc19jYmMoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXIsCisJCQkJICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pOworZXh0ZXJuIGludCBjcnlwdG80eHhfZW5jcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfc2hhMV9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF9maW5hbChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfdXBkYXRlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9yZWdfZGVmLmggYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9yZWdfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0ZWRiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3JlZ19kZWYuaApAQCAtMCwwICsxLDI4NCBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxyIGRlZmluZXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgU2VjdXJpdHkgU3Vic3lzdGVtCisgKi8KKworI2lmbmRlZiBfX0NSWVBUTzRYWF9SRUdfREVGX0hfXworI2RlZmluZSBfX0NSWVBUTzRYWF9SRUdfREVGX0hfXworCisvKiBDUllQVE80WFggUmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIENSWVBUTzRYWF9ERVNDUklQVE9SCQkJMHgwMDAwMDAwMAorI2RlZmluZSBDUllQVE80WFhfQ1RSTF9TVEFUCQkJMHgwMDAwMDAwMAorI2RlZmluZSBDUllQVE80WFhfU09VUkNFCQkJMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE80WFhfREVTVAkJCQkweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUTzRYWF9TQQkJCQkweDAwMDAwMDBDCisjZGVmaW5lIENSWVBUTzRYWF9TQV9MRU5HVEgJCQkweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUTzRYWF9MRU5HVEgJCQkweDAwMDAwMDE0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BFX0RNQV9DRkcJCQkweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUTzRYWF9QRV9ETUFfU1RBVAkJCTB4MDAwMDAwNDQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BEUl9CQVNFCQkJMHgwMDAwMDA0OAorI2RlZmluZSBDUllQVE80WFhfUkRSX0JBU0UJCQkweDAwMDAwMDRjCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX1NJWkUJCQkweDAwMDAwMDUwCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX0NUUkwJCQkweDAwMDAwMDU0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUklOR19TVEFUCQkJMHgwMDAwMDA1OAorI2RlZmluZSBDUllQVE80WFhfRVhUX1JJTkdfU1RBVAkJCTB4MDAwMDAwNWMKKyNkZWZpbmUgQ1JZUFRPNFhYX0lPX1RIUkVTSE9MRAkJCTB4MDAwMDAwNjAKKyNkZWZpbmUgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFCQkweDAwMDAwMDY0CisjZGVmaW5lIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRQkJMHgwMDAwMDA2OAorI2RlZmluZSBDUllQVE80WFhfUEFSVF9SSU5HX1NJWkUJCTB4MDAwMDAwNmMKKyNkZWZpbmUgQ1JZUFRPNFhYX1BBUlRfUklOR19DRkcJCSAgICAgICAgMHgwMDAwMDA3MAorCisjZGVmaW5lIENSWVBUTzRYWF9QRFJfQkFTRV9VQUREUgkJMHgwMDAwMDA4MAorI2RlZmluZSBDUllQVE80WFhfUkRSX0JBU0VfVUFERFIJCTB4MDAwMDAwODQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BLVF9TUkNfVUFERFIJCQkweDAwMDAwMDg4CisjZGVmaW5lIENSWVBUTzRYWF9QS1RfREVTVF9VQUREUgkJMHgwMDAwMDA4YworI2RlZmluZSBDUllQVE80WFhfU0FfVUFERFIJCQkweDAwMDAwMDkwCisjZGVmaW5lIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRV9VQUREUgkJMHgwMDAwMDBBMAorI2RlZmluZSBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0VfVUFERFIJCTB4MDAwMDAwQTQKKworI2RlZmluZSBDUllQVE80WFhfU0VRX1JECQkJMHgwMDAwMDQwOAorI2RlZmluZSBDUllQVE80WFhfU0VRX01BU0tfUkQJCQkweDAwMDAwNDBDCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX0NNRF8wCQkJMHgwMDAxMDYwMAorI2RlZmluZSBDUllQVE80WFhfU0FfQ01EXzEJCQkweDAwMDEwNjA0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX1BUUgkJCTB4MDAwMTA2ZGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0lWCQkJMHgwMDAxMDcwMAorI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSEFTSF9CWVRFX0NOVF8wCQkweDAwMDEwNzEwCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9IQVNIX0JZVEVfQ05UXzEJCTB4MDAwMTA3MTQKKworI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSURJR0VTVF8wCQkweDAwMDEwNzE4CisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9JRElHRVNUXzEJCTB4MDAwMTA3MWMKKworI2RlZmluZSBDUllQVE80WFhfREFUQV9JTgkJCTB4MDAwMTgwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0RBVEFfT1VUCQkJMHgwMDAxYzAwMAorCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfVU5NQVNLX1NUQVQJCTB4MDAwNTAwYTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQVNLX1NUQVQJCQkweDAwMDUwMGE0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfQ0xSCQkJMHgwMDA1MDBhNAorI2RlZmluZSBDUllQVE80WFhfSU5UX0VOCQkJMHgwMDA1MDBhOAorCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUEtBCQkJMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE80WFhfSU5UX1BEUl9ET05FCQkJMHgwMDAwODAwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BX1dSX0VSUgkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQV9SRF9FUlIJCQkweDAwMDEwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUEVfRVJSCQkJMHgwMDAwMDIwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX1VTRVJfRE1BX0VSUgkJMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE80WFhfSU5UX1NMQVZFX0VSUgkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQVNURVJfRVJSCQkweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfRVJST1IJCQkweDAwMDMwMjU4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9DRkcJCQkweDAwMDUwMGFjCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfREVTQ1JfUkQJCQkweDAwMDUwMGIwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfREVTQ1JfQ05UCQkJMHgwMDA1MDBiNAorI2RlZmluZSBDUllQVE80WFhfSU5UX1RJTUVPVVRfQ05UCQkweDAwMDUwMGI4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFVklDRV9DVFJMCQkJMHgwMDA2MDA4MAorI2RlZmluZSBDUllQVE80WFhfREVWSUNFX0lECQkJMHgwMDA2MDA4NAorI2RlZmluZSBDUllQVE80WFhfREVWSUNFX0lORk8JCQkweDAwMDYwMDg4CisjZGVmaW5lIENSWVBUTzRYWF9ETUFfVVNFUl9TUkMJCQkweDAwMDYwMDk0CisjZGVmaW5lIENSWVBUTzRYWF9ETUFfVVNFUl9ERVNUCQkJMHgwMDA2MDA5OAorI2RlZmluZSBDUllQVE80WFhfRE1BX1VTRVJfQ01ECQkJMHgwMDA2MDA5QworCisjZGVmaW5lIENSWVBUTzRYWF9ETUFfQ0ZHCSAgICAgICAgCTB4MDAwNjAwZDQKKyNkZWZpbmUgQ1JZUFRPNFhYX0JZVEVfT1JERVJfQ0ZHIAkJMHgwMDA2MDBkOAorI2RlZmluZSBDUllQVE80WFhfRU5ESUFOX0NGRwkJCTB4MDAwNjAwZDgKKworI2RlZmluZSBDUllQVE80WFhfUFJOR19TVEFUCQkJMHgwMDA3MDAwMAorI2RlZmluZSBDUllQVE80WFhfUFJOR19DVFJMCQkJMHgwMDA3MDAwNAorI2RlZmluZSBDUllQVE80WFhfUFJOR19TRUVEX0wJCQkweDAwMDcwMDA4CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1NFRURfSAkJCTB4MDAwNzAwMGMKKworI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMAkJCTB4MDAwNzAwMjAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzEJCQkweDAwMDcwMDI0CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18yCQkJMHgwMDA3MDAyOAorI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMwkJCTB4MDAwNzAwMkMKKworI2RlZmluZSBDUllQVE80WFhfUFJOR19MRlNSX0wJCQkweDAwMDcwMDMwCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX0xGU1JfSAkJCTB4MDAwNzAwMzQKKworLyoqCisgKiBJbml0aWxpemUgQ1JZUFRPIEVOR0lORSByZWdpc3RlcnMsIGFuZCBtZW1vcnkgYmFzZXMuCisgKi8KKyNkZWZpbmUgUFBDNFhYX1BEUl9QT0xMCQkJCTB4M2ZmCisjZGVmaW5lIFBQQzRYWF9PVVRQVVRfVEhSRVNIT0xECQkJMgorI2RlZmluZSBQUEM0WFhfSU5QVVRfVEhSRVNIT0xECQkJMgorI2RlZmluZSBQUEM0WFhfUERfU0laRQkJCQk2CisjZGVmaW5lIFBQQzRYWF9DVFhfRE9ORV9JTlQJCQkweDIwMDAKKyNkZWZpbmUgUFBDNFhYX1BEX0RPTkVfSU5UCQkJMHg4MDAwCisjZGVmaW5lIFBQQzRYWF9CWVRFX09SREVSCQkJMHgyMjIyMgorI2RlZmluZSBQUEM0WFhfSU5URVJSVVBUX0NMUgkJCTB4M2ZmZmYKKyNkZWZpbmUgUFBDNFhYX1BSTkdfQ1RSTF9BVVRPX0VOCQkweDMKKyNkZWZpbmUgUFBDNFhYX0RDXzNERVNfRU4JCQkxCisjZGVmaW5lIFBQQzRYWF9JTlRfREVTQ1JfQ05UCQkJNAorI2RlZmluZSBQUEM0WFhfSU5UX1RJTUVPVVRfQ05UCQkJMAorI2RlZmluZSBQUEM0WFhfSU5UX0NGRwkJCQkxCisvKioKKyAqIGFsbCBmb2xsb3cgZGVmaW5lIGFyZSBhZCBob2MKKyAqLworI2RlZmluZSBQUEM0WFhfUklOR19SRVRSWQkJCTEwMAorI2RlZmluZSBQUEM0WFhfUklOR19QT0xMCQkJMTAwCisjZGVmaW5lIFBQQzRYWF9TRFJfU0laRQkJCQlQUEM0WFhfTlVNX1NECisjZGVmaW5lIFBQQzRYWF9HRFJfU0laRQkJCQlQUEM0WFhfTlVNX0dECisKKy8qKgorICAqIEdlbmVyaWMgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB3aXRoIGFsbCBwb3NzaWJsZSBmaWVsZHMuIFRoZXNlIHdpbGwKKyAqIG5ldmVyIGxpa2VseSB1c2VkIGV4Y2VwdCBmb3IgcmVmZXJlbmNlIHB1cnBvc2UuIFRoZXNlIHN0cnVjdHVyZSBmb3JtYXQKKyAqIGNhbiBiZSBub3QgY2hhbmdlZCBhcyB0aGUgaGFyZHdhcmUgZXhwZWN0cyB0aGVtIHRvIGJlIGxheW91dCBhcyBkZWZpbmVkLgorICogRmllbGQgY2FuIGJlIHJlbW92ZWQgb3IgcmVkdWNlZCBidXQgb3JkZXJpbmcgY2FuIG5vdCBiZSBjaGFuZ2VkLgorICovCisjZGVmaW5lIENSWVBUTzRYWF9ETUFfQ0ZHX09GRlNFVAkJMHg0MAordW5pb24gY2VfcGVfZG1hX2NmZyB7CisJc3RydWN0IHsKKwkJdTMyIHJzdjo3OworCQl1MzIgZGlyX2hvc3Q6MTsKKwkJdTMyIHJzdjE6MjsKKwkJdTMyIGJvX3RkX2VuOjE7CisJCXUzMiBkaXNfcGRyX3VwZDoxOworCQl1MzIgYm9fc2dwZF9lbjoxOworCQl1MzIgYm9fZGF0YV9lbjoxOworCQl1MzIgYm9fc2FfZW46MTsKKwkJdTMyIGJvX3BkX2VuOjE7CisJCXUzMiByc3YyOjQ7CisJCXUzMiBkeW5hbWljX3NhX2VuOjE7CisJCXUzMiBwZHJfbW9kZToyOworCQl1MzIgcGVfbW9kZToxOworCQl1MzIgcnN2Mzo1OworCQl1MzIgcmVzZXRfc2c6MTsKKwkJdTMyIHJlc2V0X3BkcjoxOworCQl1MzIgcmVzZXRfcGU6MTsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfUERSX0JBU0VfT0ZGU0VUCQkweDQ4CisjZGVmaW5lIENSWVBUTzRYWF9SRFJfQkFTRV9PRkZTRVQJCTB4NGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfU0laRV9PRkZTRVQJCTB4NTAKK3VuaW9uIGNlX3Jpbmdfc2l6ZSB7CisJc3RydWN0IHsKKwkJdTMyIHJpbmdfb2Zmc2V0OjE2OworCQl1MzIgcnN2OjY7CisJCXUzMiByaW5nX3NpemU6MTA7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfQ09OVFJPTF9PRkZTRVQJCTB4NTQKK3VuaW9uIGNlX3JpbmdfY29udG9sIHsKKwlzdHJ1Y3QgeworCQl1MzIgY29udGludW91czoxOworCQl1MzIgcnN2OjU7CisJCXUzMiByaW5nX3JldHJ5X2Rpdmlzb3I6MTA7CisJCXUzMiByc3YxOjQ7CisJCXUzMiByaW5nX3BvbGxfZGl2aXNvcjoxMDsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfSU9fVEhSRVNIT0xEX09GRlNFVAkJMHg2MAordW5pb24gY2VfaW9fdGhyZXNob2xkIHsKKwlzdHJ1Y3QgeworCQl1MzIgcnN2OjY7CisJCXUzMiBvdXRwdXRfdGhyZXNob2xkOjEwOworCQl1MzIgcnN2MTo2OworCQl1MzIgaW5wdXRfdGhyZXNob2xkOjEwOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9HQVRIRVJfUklOR19CQVNFX09GRlNFVAkweDY0CisjZGVmaW5lIENSWVBUTzRYWF9TQ0FUVEVSX1JJTkdfQkFTRV9PRkZTRVQJMHg2OAorCit1bmlvbiBjZV9wYXJ0X3Jpbmdfc2l6ZSAgeworCXN0cnVjdCB7CisJCXUzMiBzZHJfc2l6ZToxNjsKKwkJdTMyIGdkcl9zaXplOjE2OworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzMyCQkJMAorI2RlZmluZSBNQVhfQlVSU1RfU0laRV82NAkJCTEKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfMTI4CQkJMgorI2RlZmluZSBNQVhfQlVSU1RfU0laRV8yNTYJCQkzCisKKy8qIGdhdGhlciBkZXNjcmlwdG9yIGNvbnRyb2wgbGVuZ3RoICovCitzdHJ1Y3QgZ2RfY3RsX2xlbiB7CisJdTMyIGxlbjoxNjsKKwl1MzIgcnN2OjE0OworCXUzMiBkb25lOjE7CisJdTMyIHJlYWR5OjE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2VfZ2QgeworCXUzMiBwdHI7CisJc3RydWN0IGdkX2N0bF9sZW4gY3RsX2xlbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzZF9jdGwgeworCXUzMiBjdGw6MzA7CisJdTMyIGRvbmU6MTsKKwl1MzIgcmR5OjE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2Vfc2QgeworICAgIHUzMiBwdHI7CisJc3RydWN0IHNkX2N0bCBjdGw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFBEX1BBRF9DVExfMzIJMHgxMAorI2RlZmluZSBQRF9QQURfQ1RMXzY0CTB4MjAKKyNkZWZpbmUgUERfUEFEX0NUTF8xMjgJMHg0MAorI2RlZmluZSBQRF9QQURfQ1RMXzI1NgkweDgwCit1bmlvbiBjZV9wZF9jdGwgeworCXN0cnVjdCB7CisJCXUzMiBwZF9wYWRfY3RsOjg7CisJCXUzMiBzdGF0dXM6ODsKKwkJdTMyIG5leHRfaGRyOjg7CisJCXUzMiByc3Y6MjsKKwkJdTMyIGNhY2hlZF9zYToxOworCQl1MzIgaGFzaF9maW5hbDoxOworCQl1MzIgaW5pdF9hcmM0OjE7CisJCXUzMiByc3YxOjE7CisJCXUzMiBwZV9kb25lOjE7CisJCXUzMiBob3N0X3JlYWR5OjE7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGNlX3BkX2N0bF9sZW4geworCXN0cnVjdCB7CisJCXUzMiBieXBhc3M6ODsKKwkJdTMyIHBlX2RvbmU6MTsKKwkJdTMyIGhvc3RfcmVhZHk6MTsKKwkJdTMyIHJzdjoyOworCQl1MzIgcGt0X2xlbjoyMDsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNlX3BkIHsKKwl1bmlvbiBjZV9wZF9jdGwgICBwZF9jdGw7CisJdTMyIHNyYzsKKwl1MzIgZGVzdDsKKwl1MzIgc2E7ICAgICAgICAgICAgICAgICAvKiBnZXQgZnJvbSBjdHgtPnNhX2RtYV9hZGRyICovCisJdTMyIHNhX2xlbjsgICAgICAgICAgICAgLyogb25seSBpZiBkeW5hbWljIHNhIGlzIHVzZWQgKi8KKwl1bmlvbiBjZV9wZF9jdGxfbGVuIHBkX2N0bF9sZW47CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NmZkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBAZmlsZSBjcnlwdG80eHhfc2EuYworICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBzZWN1cml0eSBjb250ZXh0CisgKiBhc3NvaWNhdGUgZm9ybWF0LgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vZGVzLmg+CisjaW5jbHVkZSAiY3J5cHRvNHh4X3JlZ19kZWYuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfc2EuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfY29yZS5oIgorCit1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2l2X2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdTMyIG9mZnNldDsKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKShjdHgtPnNhX2luKSktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKShjdHgtPnNhX291dCkpLT5zYV9jb250ZW50czsKKwlvZmZzZXQgPSBjdHMuYmYua2V5X3NpemUKKwkJKyBjdHMuYmYuaW5uZXJfc2l6ZQorCQkrIGN0cy5iZi5vdXRlcl9zaXplCisJCSsgY3RzLmJmLnNwaQorCQkrIGN0cy5iZi5zZXFfbnVtMAorCQkrIGN0cy5iZi5zZXFfbnVtMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2swCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMgorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2szOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9jdGwpICsgb2Zmc2V0ICogNDsKK30KKwordTMyIGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1MzIgb2Zmc2V0OworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW4pLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQpLT5zYV9jb250ZW50czsKKwlvZmZzZXQgPSBjdHMuYmYua2V5X3NpemUKKwkJKyBjdHMuYmYuaW5uZXJfc2l6ZQorCQkrIGN0cy5iZi5vdXRlcl9zaXplCisJCSsgY3RzLmJmLnNwaQorCQkrIGN0cy5iZi5zZXFfbnVtMAorCQkrIGN0cy5iZi5zZXFfbnVtMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2swCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMgorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2szCisJCSsgY3RzLmJmLml2MAorCQkrIGN0cy5iZi5pdjEKKwkJKyBjdHMuYmYuaXYyCisJCSsgY3RzLmJmLml2MzsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfY3RsKSArIG9mZnNldCAqIDQ7Cit9CisKK3UzMiBnZXRfZHluYW1pY19zYV9pdl9zaXplKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbiktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dCktPnNhX2NvbnRlbnRzOworCXJldHVybiAoY3RzLmJmLml2MCArIGN0cy5iZi5pdjEgKyBjdHMuYmYuaXYyICsgY3RzLmJmLml2MykgKiA0OworfQorCit1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2tleV9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW4pLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQpLT5zYV9jb250ZW50czsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfY3RsKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmggYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiODNlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oCkBAIC0wLDAgKzEsMjQzIEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgc2VjdXJpdHkgY29udGV4dAorICogYXNzb2ljYXRlIGZvcm1hdC4KKyAqLworCisjaWZuZGVmIF9fQ1JZUFRPNFhYX1NBX0hfXworI2RlZmluZSBfX0NSWVBUTzRYWF9TQV9IX18KKworI2RlZmluZSBBRVNfSVZfU0laRQkJCQkxNgorCisvKioKKyAqIENvbnRlbnRzIG9mIER5bmFtaWMgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB3aXRoIGFsbCBwb3NzaWJsZSBmaWVsZHMKKyAqLwordW5pb24gZHluYW1pY19zYV9jb250ZW50cyB7CisJc3RydWN0IHsKKwkJdTMyIGFyYzRfc3RhdGVfcHRyOjE7CisJCXUzMiBhcmM0X2lqX3B0cjoxOworCQl1MzIgc3RhdGVfcHRyOjE7CisJCXUzMiBpdjM6MTsKKwkJdTMyIGl2MjoxOworCQl1MzIgaXYxOjE7CisJCXUzMiBpdjA6MTsKKwkJdTMyIHNlcV9udW1fbWFzazM6MTsKKwkJdTMyIHNlcV9udW1fbWFzazI6MTsKKwkJdTMyIHNlcV9udW1fbWFzazE6MTsKKwkJdTMyIHNlcV9udW1fbWFzazA6MTsKKwkJdTMyIHNlcV9udW0xOjE7CisJCXUzMiBzZXFfbnVtMDoxOworCQl1MzIgc3BpOjE7CisJCXUzMiBvdXRlcl9zaXplOjU7CisJCXUzMiBpbm5lcl9zaXplOjU7CisJCXUzMiBrZXlfc2l6ZTo0OworCQl1MzIgY21kX3NpemU6NDsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBESVJfT1VUQk9VTkQJCQkJMAorI2RlZmluZSBESVJfSU5CT1VORAkJCQkxCisjZGVmaW5lIFNBX09QX0dST1VQX0JBU0lDCQkJMAorI2RlZmluZSBTQV9PUENPREVfRU5DUllQVAkJCTAKKyNkZWZpbmUgU0FfT1BDT0RFX0RFQ1JZUFQJCQkwCisjZGVmaW5lIFNBX09QQ09ERV9IQVNICQkJCTMKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19ERVMJCQkwCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfM0RFUwkJCTEKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19BUkM0CQkJMgorI2RlZmluZSBTQV9DSVBIRVJfQUxHX0FFUwkJCTMKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19LQVNVTUkJCQk0CisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfTlVMTAkJCTE1CisKKyNkZWZpbmUgU0FfSEFTSF9BTEdfTUQ1CQkJCTAKKyNkZWZpbmUgU0FfSEFTSF9BTEdfU0hBMQkJCTEKKyNkZWZpbmUgU0FfSEFTSF9BTEdfTlVMTAkJCTE1CisjZGVmaW5lIFNBX0hBU0hfQUxHX1NIQTFfRElHRVNUX1NJWkUJCTIwCisKKyNkZWZpbmUgU0FfTE9BRF9IQVNIX0ZST01fU0EJCQkwCisjZGVmaW5lIFNBX0xPQURfSEFTSF9GUk9NX1NUQVRFCQkJMgorI2RlZmluZSBTQV9OT1RfTE9BRF9IQVNICQkJMworI2RlZmluZSBTQV9MT0FEX0lWX0ZST01fU0EJCQkwCisjZGVmaW5lIFNBX0xPQURfSVZfRlJPTV9JTlBVVAkJCTEKKyNkZWZpbmUgU0FfTE9BRF9JVl9GUk9NX1NUQVRFCQkJMgorI2RlZmluZSBTQV9MT0FEX0lWX0dFTl9JVgkJCTMKKworI2RlZmluZSBTQV9QQURfVFlQRV9DT05TVEFOVAkJCTIKKyNkZWZpbmUgU0FfUEFEX1RZUEVfWkVSTwkJCTMKKyNkZWZpbmUgU0FfUEFEX1RZUEVfVExTCQkJCTUKKyNkZWZpbmUgU0FfUEFEX1RZUEVfRFRMUwkJCTUKKyNkZWZpbmUgU0FfTk9UX1NBVkVfSEFTSAkJCTAKKyNkZWZpbmUgU0FfU0FWRV9IQVNICQkJCTEKKyNkZWZpbmUgU0FfTk9UX1NBVkVfSVYJCQkJMAorI2RlZmluZSBTQV9TQVZFX0lWCQkJCTEKKyNkZWZpbmUgU0FfSEVBREVSX1BST0MJCQkJMQorI2RlZmluZSBTQV9OT19IRUFERVJfUFJPQwkJCTAKKwordW5pb24gc2FfY29tbWFuZF8wIHsKKwlzdHJ1Y3QgeworCQl1MzIgc2NhdHRlcjoxOworCQl1MzIgZ2F0aGVyOjE7CisJCXUzMiBzYXZlX2hhc2hfc3RhdGU6MTsKKwkJdTMyIHNhdmVfaXY6MTsKKwkJdTMyIGxvYWRfaGFzaF9zdGF0ZToyOworCQl1MzIgbG9hZF9pdjoyOworCQl1MzIgZGlnZXN0X2xlbjo0OworCQl1MzIgaGRyX3Byb2M6MTsKKwkJdTMyIGV4dGVuZF9wYWQ6MTsKKwkJdTMyIHN0cmVhbV9jaXBoZXJfcGFkOjE7CisJCXUzMiByc3Y6MTsKKwkJdTMyIGhhc2hfYWxnOjQ7CisJCXUzMiBjaXBoZXJfYWxnOjQ7CisJCXUzMiBwYWRfdHlwZToyOworCQl1MzIgb3BfZ3JvdXA6MjsKKwkJdTMyIGRpcjoxOworCQl1MzIgb3Bjb2RlOjM7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPX01PREVfRUNCCQkJCTAKKyNkZWZpbmUgQ1JZUFRPX01PREVfQ0JDCQkJCTEKKworI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV9OT19GQgkJMAorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV82NEJJVF9PRkIJCTAKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfOEJJVF9DRkIJCTEKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfMUJJVF9DRkIJCTIKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfMTI4QklUX0NGQgkJMworCisjZGVmaW5lIFNBX0FFU19LRVlfTEVOXzEyOAkJCTIKKyNkZWZpbmUgU0FfQUVTX0tFWV9MRU5fMTkyCQkJMworI2RlZmluZSBTQV9BRVNfS0VZX0xFTl8yNTYJCQk0CisKKyNkZWZpbmUgU0FfUkVWMgkJCQkJMQorLyoqCisgKiBUaGUgZm9sbG93IGRlZmluZXMgYml0cyBzYV9jb21tYW5kXzEKKyAqIEluIEJhc2ljIGhhc2ggbW9kZSAgdGhpcyBiaXQgZGVmaW5lIHNpbXBsZSBoYXNoIG9yIGhtYWMuCisgKiBJbiBJUHNlYyBtb2RlLCB0aGlzIGJpdCBkZWZpbmUgbXV0aW5nIGNvbnRyb2wuCisgKi8KKyNkZWZpbmUgU0FfSEFTSF9NT0RFX0hBU0gJCQkwCisjZGVmaW5lIFNBX0hBU0hfTU9ERV9ITUFDCQkJMQorI2RlZmluZSBTQV9NQ19FTkFCTEUJCQkJMAorI2RlZmluZSBTQV9NQ19ESVNBQkxFCQkJCTEKKyNkZWZpbmUgU0FfTk9UX0NPUFlfSERSCQkJCTAKKyNkZWZpbmUgU0FfQ09QWV9IRFIJCQkJMQorI2RlZmluZSBTQV9OT1RfQ09QWV9QQUQJCQkJMAorI2RlZmluZSBTQV9DT1BZX1BBRAkJCQkxCisjZGVmaW5lIFNBX05PVF9DT1BZX1BBWUxPQUQJCQkwCisjZGVmaW5lIFNBX0NPUFlfUEFZTE9BRAkJCQkxCisjZGVmaW5lIFNBX0VYVEVOREVEX1NOX09GRgkJCTAKKyNkZWZpbmUgU0FfRVhURU5ERURfU05fT04JCQkxCisjZGVmaW5lIFNBX1NFUV9NQVNLX09GRgkJCQkwCisjZGVmaW5lIFNBX1NFUV9NQVNLX09OCQkJCTEKKwordW5pb24gc2FfY29tbWFuZF8xIHsKKwlzdHJ1Y3QgeworCQl1MzIgY3J5cHRvX21vZGUzMToxOworCQl1MzIgc2F2ZV9hcmM0X3N0YXRlOjE7CisJCXUzMiBhcmM0X3N0YXRlZnVsOjE7CisJCXUzMiBrZXlfbGVuOjU7CisJCXUzMiBoYXNoX2NyeXB0b19vZmZzZXQ6ODsKKwkJdTMyIHNhX3JldjoyOworCQl1MzIgYnl0ZV9vZmZzZXQ6MTsKKwkJdTMyIGhtYWNfbXV0aW5nOjE7CisJCXUzMiBmZWVkYmFja19tb2RlOjI7CisJCXUzMiBjcnlwdG9fbW9kZTlfODoyOworCQl1MzIgZXh0ZW5kZWRfc2VxX251bToxOworCQl1MzIgc2VxX251bV9tYXNrOjE7CisJCXUzMiBtdXRhYmxlX2JpdF9wcm9jOjE7CisJCXUzMiBpcF92ZXJzaW9uOjE7CisJCXUzMiBjb3B5X3BhZDoxOworCQl1MzIgY29weV9wYXlsb2FkOjE7CisJCXUzMiBjb3B5X2hkcjoxOworCQl1MzIgcnN2MToxOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZHluYW1pY19zYV9jdGwgeworCXUzMiBzYV9jb250ZW50czsKKwl1bmlvbiBzYV9jb21tYW5kXzAgc2FfY29tbWFuZF8wOworCXVuaW9uIHNhX2NvbW1hbmRfMSBzYV9jb21tYW5kXzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFN0YXRlIFJlY29yZCBmb3IgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKQorICovCitzdHJ1Y3QgIHNhX3N0YXRlX3JlY29yZCB7CisJdTMyIHNhdmVfaXZbNF07CisJdTMyIHNhdmVfaGFzaF9ieXRlX2NudFsyXTsKKwl1MzIgc2F2ZV9kaWdlc3RbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBBRVMxMjgKKyAqCisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2FlczEyOCB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsCWN0cmw7CisJdTMyIGtleVs0XTsKKwl1MzIgaXZbNF07IC8qIGZvciBDQkMsIE9GQywgYW5kIENGQiBtb2RlICovCisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNBX0FFUzEyOF9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfYWVzMTI4KS80KQorI2RlZmluZSBTQV9BRVMxMjhfQ09OVEVOVFMJMHgzZTAwMDA0MgorCisvKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgQUVTMTkyCisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2FlczE5MiB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsIGN0cmw7CisJdTMyIGtleVs2XTsKKwl1MzIgaXZbNF07IC8qIGZvciBDQkMsIE9GQywgYW5kIENGQiBtb2RlICovCisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNBX0FFUzE5Ml9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfYWVzMTkyKS80KQorI2RlZmluZSBTQV9BRVMxOTJfQ09OVEVOVFMJMHgzZTAwMDA2MgorCisvKioKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEFFUzI1NgorICovCitzdHJ1Y3QgZHluYW1pY19zYV9hZXMyNTYgeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCBjdHJsOworCXUzMiBrZXlbOF07CisJdTMyIGl2WzRdOyAvKiBmb3IgQ0JDLCBPRkMsIGFuZCBDRkIgbW9kZSAqLworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTQV9BRVMyNTZfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2FlczI1NikvNCkKKyNkZWZpbmUgU0FfQUVTMjU2X0NPTlRFTlRTCTB4M2UwMDAwODIKKyNkZWZpbmUgU0FfQUVTX0NPTlRFTlRTCQkweDNlMDAwMDAyCisKKy8qKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgSEFTSDE2MDogSE1BQy1TSEExCisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjAgeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCBjdHJsOworCXUzMiBpbm5lcl9kaWdlc3RbNV07CisJdTMyIG91dGVyX2RpZ2VzdFs1XTsKKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIFNBX0hBU0gxNjBfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjApLzQpCisjZGVmaW5lIFNBX0hBU0gxNjBfQ09OVEVOVFMgICAgIDB4MjAwMGE1MDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMgYi9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMKaW5kZXggMmQ2MzdlMC4uZDllNzUxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYwpAQCAtNDU3LDEwICs0NTcsMTIgQEAKIAlpZiAoIWN0eF9wb29sKSB7CiAJCWdvdG8gZXJyOwogCX0KLQlyZXQgPSBxbWdyX3JlcXVlc3RfcXVldWUoU0VORF9RSUQsIE5QRV9RTEVOX1RPVEFMLCAwLCAwKTsKKwlyZXQgPSBxbWdyX3JlcXVlc3RfcXVldWUoU0VORF9RSUQsIE5QRV9RTEVOX1RPVEFMLCAwLCAwLAorCQkJCSAiaXhwX2NyeXB0bzpvdXQiLCBOVUxMKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKLQlyZXQgPSBxbWdyX3JlcXVlc3RfcXVldWUoUkVDVl9RSUQsIE5QRV9RTEVOLCAwLCAwKTsKKwlyZXQgPSBxbWdyX3JlcXVlc3RfcXVldWUoUkVDVl9RSUQsIE5QRV9RTEVOLCAwLCAwLAorCQkJCSAiaXhwX2NyeXB0bzppbiIsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJcW1ncl9yZWxlYXNlX3F1ZXVlKFNFTkRfUUlEKTsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwppbmRleCA4NTZiM2NjLi4zZjBmZGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKQEAgLTQ4OSw0ICs0ODksNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTWljaGFsIEx1ZHZpZyIpOwogCi1NT0RVTEVfQUxJQVMoImFlcyIpOworTU9EVUxFX0FMSUFTKCJhZXMtYWxsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCBhN2ZiYWRlLi5hMmM4ZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTWljaGFsIEx1ZHZpZyIpOwogCi1NT0RVTEVfQUxJQVMoInNoYTEiKTsKLU1PRFVMRV9BTElBUygic2hhMjU2Iik7CitNT0RVTEVfQUxJQVMoInNoYTEtYWxsIik7CitNT0RVTEVfQUxJQVMoInNoYTI1Ni1hbGwiKTsKIE1PRFVMRV9BTElBUygic2hhMS1wYWRsb2NrIik7CiBNT0RVTEVfQUxJQVMoInNoYTI1Ni1wYWRsb2NrIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RjYS9kY2EtY29yZS5jIGIvZHJpdmVycy9kY2EvZGNhLWNvcmUuYwppbmRleCAzM2JkNzUzLi4yNWI3NDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RjYS9kY2EtY29yZS5jCisrKyBiL2RyaXZlcnMvZGNhL2RjYS1jb3JlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYyBiL2RyaXZlcnMvZGNhL2RjYS1zeXNmcy5jCmluZGV4IGJiNTM4YjkuLmVlOTE2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGNhL2RjYS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvZGNhL2RjYS1zeXNmcy5jCkBAIC0xLDMgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kaW8vZGlvLmMgYi9kcml2ZXJzL2Rpby9kaW8uYwppbmRleCAxMGMzYzQ5Li41NWRkODhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Rpby9kaW8uYworKysgYi9kcml2ZXJzL2Rpby9kaW8uYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAKIAkvKiBJbml0aWFsaXplIHRoZSBESU8gYnVzICovIAogCUlOSVRfTElTVF9IRUFEKCZkaW9fYnVzLmRldmljZXMpOwotCXN0cmNweShkaW9fYnVzLmRldi5idXNfaWQsICJkaW8iKTsKKwlkZXZfc2V0X25hbWUoJmRpb19idXMuZGV2LCAiZGlvIik7CiAJZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIoJmRpb19idXMuZGV2KTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJfZXJyKCJESU86IEVycm9yIHJlZ2lzdGVyaW5nIGRpb19idXNcbiIpOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJCWRldi0+c2NvZGUgPSBzY29kZTsKIAkJZGV2LT5yZXNvdXJjZS5zdGFydCA9IHBhOwogCQlkZXYtPnJlc291cmNlLmVuZCA9IHBhICsgRElPX1NJWkUoc2NvZGUsIHZhKTsKLQkJc3ByaW50ZihkZXYtPmRldi5idXNfaWQsIiUwMngiLCBzY29kZSk7CisJCWRldl9zZXRfbmFtZSgmZGV2LT5kZXYsICIlMDJ4Iiwgc2NvZGUpOwogCiAgICAgICAgICAgICAgICAgLyogcmVhZCB0aGUgSUQgYnl0ZShzKSBhbmQgZW5jb2RlIGlmIG5lY2Vzc2FyeS4gKi8KIAkJcHJpZCA9IERJT19JRCh2YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCmluZGV4IGE1ODk5MzAuLjI4MGE5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCkBAIC01MTgsNiArNTE4LDcgQEAKIAkJCQkgICAgICAgZG1hX2NoYW5fbmFtZShjaGFuKSwgZXJyKTsKIAkJCWVsc2UKIAkJCQlicmVhazsKKwkJCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCQkJY2hhbiA9IE5VTEw7CiAJCX0KIAl9CkBAIC01MzYsNiArNTM3LDcgQEAKIAlXQVJOX09OQ0UoY2hhbi0+Y2xpZW50X2NvdW50ICE9IDEsCiAJCSAgImNoYW4gcmVmZXJlbmNlIGNvdW50ICVkICE9IDFcbiIsIGNoYW4tPmNsaWVudF9jb3VudCk7CiAJZG1hX2NoYW5fcHV0KGNoYW4pOworCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1hX3JlbGVhc2VfY2hhbm5lbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKaW5kZXggNzMyZmExZS4uZTE5MGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwpAQCAtNDMwLDEzICs0MzAsMTUgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkbWF0ZXN0X2V4aXQodm9pZCkKIHsKIAlzdHJ1Y3QgZG1hdGVzdF9jaGFuICpkdGMsICpfZHRjOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkdGMsIF9kdGMsICZkbWF0ZXN0X2NoYW5uZWxzLCBub2RlKSB7CiAJCWxpc3RfZGVsKCZkdGMtPm5vZGUpOworCQljaGFuID0gZHRjLT5jaGFuOwogCQlkbWF0ZXN0X2NsZWFudXBfY2hhbm5lbChkdGMpOwogCQlwcl9kZWJ1ZygiZG1hdGVzdDogZHJvcHBlZCBjaGFubmVsICVzXG4iLAotCQkJIGRtYV9jaGFuX25hbWUoZHRjLT5jaGFuKSk7Ci0JCWRtYV9yZWxlYXNlX2NoYW5uZWwoZHRjLT5jaGFuKTsKKwkJCSBkbWFfY2hhbl9uYW1lKGNoYW4pKTsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKIAl9CiB9CiBtb2R1bGVfZXhpdChkbWF0ZXN0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHdfZG1hYy5jIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCmluZGV4IDZiNzAyY2MuLjIwYWQzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYworKysgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBkd19kbWFfY2hhbgkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7Ci0Jc3RydWN0IGR3X2RtYV9zbGF2ZQkqZHdzID0gZHdjLT5kd3M7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQkqZHdzID0gY2hhbi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHdfZGVzYwkJKnByZXY7CiAJc3RydWN0IGR3X2Rlc2MJCSpmaXJzdDsKIAl1MzIJCQljdGxsbzsKQEAgLTc5MCw3ICs3OTAsNyBAQAogCWNmZ2hpID0gRFdDX0NGR0hfRklGT19NT0RFOwogCWNmZ2xvID0gMDsKIAotCWR3cyA9IGR3Yy0+ZHdzOworCWR3cyA9IGNoYW4tPnByaXZhdGU7CiAJaWYgKGR3cykgewogCQkvKgogCQkgKiBXZSBuZWVkIGNvbnRyb2xsZXItc3BlY2lmaWMgZGF0YSB0byBzZXQgdXAgc2xhdmUKQEAgLTg2Niw3ICs4NjYsNiBAQAogCXNwaW5fbG9ja19iaCgmZHdjLT5sb2NrKTsKIAlsaXN0X3NwbGljZV9pbml0KCZkd2MtPmZyZWVfbGlzdCwgJmxpc3QpOwogCWR3Yy0+ZGVzY3NfYWxsb2NhdGVkID0gMDsKLQlkd2MtPmR3cyA9IE5VTEw7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5YRkVSLCBkd2MtPm1hc2spOwpAQCAtMTAxMiw3ICsxMDExLDcgQEAKIAlkbWFfd3JpdGVsKGR3LCBDRkcsIERXX0NGR19ETUFfRU4pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERlc2lnbldhcmUgRE1BIENvbnRyb2xsZXIsICVkIGNoYW5uZWxzXG4iLAotCQkJcGRldi0+ZGV2LmJ1c19pZCwgZHctPmRtYS5jaGFuY250KTsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCBkdy0+ZG1hLmNoYW5jbnQpOwogCiAJZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmZHctPmRtYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oIGIvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmgKaW5kZXggMDBmZGQxOC4uYjI1MmIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmgKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmgKQEAgLTEzOSw4ICsxMzksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CiAKLQlzdHJ1Y3QgZHdfZG1hX3NsYXZlCSpkd3M7Ci0KIAl1bnNpZ25lZCBpbnQJCWRlc2NzX2FsbG9jYXRlZDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKaW5kZXggNzAxMjZhNi4uODZkNmRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKQEAgLTE1OCw3ICsxNTgsOCBAQAogCiBzdGF0aWMgdm9pZCBkbWFfaGFsdChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKIHsKLQlpbnQgaSA9IDA7CisJaW50IGk7CisKIAlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKIAkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpIHwgRlNMX0RNQV9NUl9DQSwKIAkJMzIpOwpAQCAtMTY2LDggKzE2NywxMSBAQAogCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAzMikgJiB+KEZTTF9ETUFfTVJfQ1MKIAkJfCBGU0xfRE1BX01SX0VNU19FTiB8IEZTTF9ETUFfTVJfQ0EpLCAzMik7CiAKLQl3aGlsZSAoIWRtYV9pc19pZGxlKGZzbF9jaGFuKSAmJiAoaSsrIDwgMTAwKSkKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJaWYgKGRtYV9pc19pZGxlKGZzbF9jaGFuKSkKKwkJCWJyZWFrOwogCQl1ZGVsYXkoMTApOworCX0KIAlpZiAoaSA+PSAxMDAgJiYgIWRtYV9pc19pZGxlKGZzbF9jaGFuKSkKIAkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAiRE1BIGhhbHQgdGltZW91dCFcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC5jIGIvZHJpdmVycy9kbWEvaW9hdC5jCmluZGV4IDQxMDVkNjUuLmVkODNkZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogSW50ZWwgSS9PQVQgRE1BIExpbnV4IGRyaXZlcgotICogQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RjYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kY2EuYwppbmRleCA2Y2Y2MjJkLi5jMDEyYTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RjYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZGNhLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogSW50ZWwgSS9PQVQgRE1BIExpbnV4IGRyaXZlcgotICogQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00OSw2ICs0OSwyMyBAQAogCiAjZGVmaW5lIERDQV9UQUdfTUFQX01BU0sgMHhERgogCisvKiBleHBlY3RlZCB0YWcgbWFwIGJ5dGVzIGZvciBJL09BVCB2ZXIuMiAqLworI2RlZmluZSBEQ0EyX1RBR19NQVBfQllURTAgMHg4MAorI2RlZmluZSBEQ0EyX1RBR19NQVBfQllURTEgMHgwCisjZGVmaW5lIERDQTJfVEFHX01BUF9CWVRFMiAweDgxCisjZGVmaW5lIERDQTJfVEFHX01BUF9CWVRFMyAweDgyCisjZGVmaW5lIERDQTJfVEFHX01BUF9CWVRFNCAweDgyCisKKy8qIHZlcmlmeSBpZiB0YWcgbWFwIG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWVzICovCitzdGF0aWMgaW5saW5lIGludCBkY2EyX3RhZ19tYXBfdmFsaWQodTggKnRhZ19tYXApCit7CisJcmV0dXJuICgodGFnX21hcFswXSA9PSBEQ0EyX1RBR19NQVBfQllURTApICYmCisJCSh0YWdfbWFwWzFdID09IERDQTJfVEFHX01BUF9CWVRFMSkgJiYKKwkJKHRhZ19tYXBbMl0gPT0gRENBMl9UQUdfTUFQX0JZVEUyKSAmJgorCQkodGFnX21hcFszXSA9PSBEQ0EyX1RBR19NQVBfQllURTMpICYmCisJCSh0YWdfbWFwWzRdID09IERDQTJfVEFHX01BUF9CWVRFNCkpOworfQorCiAvKgogICogIkxlZ2FjeSIgRENBIHN5c3RlbXMgZG8gbm90IGltcGxlbWVudCB0aGUgRENBIHJlZ2lzdGVyIHNldCBpbiB0aGUKICAqIEkvT0FUIGRldmljZS4gIFNvZnR3YXJlIG5lZWRzIGRpcmVjdCBzdXBwb3J0IGZvciB0aGVpciB0YWcgbWFwcGluZ3MuCkBAIC00NTIsNiArNDY5LDEzIEBACiAJCQlpb2F0ZGNhLT50YWdfbWFwW2ldID0gMDsKIAl9CiAKKwlpZiAoIWRjYTJfdGFnX21hcF92YWxpZChpb2F0ZGNhLT50YWdfbWFwKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBUElDSURfVEFHX01BUCBzZXQgaW5jb3JyZWN0bHkgYnkgQklPUywgIgorCQkJImRpc2FibGluZyBEQ0FcbiIpOworCQlmcmVlX2RjYV9wcm92aWRlcihkY2EpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKIAllcnIgPSByZWdpc3Rlcl9kY2FfcHJvdmlkZXIoZGNhLCAmcGRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWZyZWVfZGNhX3Byb3ZpZGVyKGRjYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwppbmRleCBiMzc1OWM0Li41OTA1Y2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogSW50ZWwgSS9PQVQgRE1BIExpbnV4IGRyaXZlcgotICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMTg5LDExICsxODksMTMgQEAKIAkJaW9hdF9jaGFuLT54ZmVyY2FwID0geGZlcmNhcDsKIAkJaW9hdF9jaGFuLT5kZXNjY291bnQgPSAwOwogCQlJTklUX0RFTEFZRURfV09SSygmaW9hdF9jaGFuLT53b3JrLCBpb2F0X2RtYV9jaGFuX3Jlc2V0X3BhcnQyKTsKLQkJaWYgKGlvYXRfY2hhbi0+ZGV2aWNlLT52ZXJzaW9uICE9IElPQVRfVkVSXzFfMikgewotCQkJd3JpdGVsKElPQVRfRENBQ1RSTF9DTVBMX1dSSVRFX0VOQUJMRQotCQkJCQl8IElPQVRfRE1BX0RDQV9BTllfQ1BVLAotCQkJCWlvYXRfY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0RDQUNUUkxfT0ZGU0VUKTsKLQkJfQorCQlpZiAoaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24gPT0gSU9BVF9WRVJfMl8wKQorCQkJd3JpdGVsKElPQVRfRENBQ1RSTF9DTVBMX1dSSVRFX0VOQUJMRSB8CisJCQkgICAgICAgSU9BVF9ETUFfRENBX0FOWV9DUFUsCisJCQkgICAgICAgaW9hdF9jaGFuLT5yZWdfYmFzZSArIElPQVRfRENBQ1RSTF9PRkZTRVQpOworCQllbHNlIGlmIChpb2F0X2NoYW4tPmRldmljZS0+dmVyc2lvbiA9PSBJT0FUX1ZFUl8zXzApCisJCQl3cml0ZWwoSU9BVF9ETUFfRENBX0FOWV9DUFUsCisJCQkgICAgICAgaW9hdF9jaGFuLT5yZWdfYmFzZSArIElPQVRfRENBQ1RSTF9PRkZTRVQpOwogCQlzcGluX2xvY2tfaW5pdCgmaW9hdF9jaGFuLT5jbGVhbnVwX2xvY2spOwogCQlzcGluX2xvY2tfaW5pdCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmaW9hdF9jaGFuLT5mcmVlX2Rlc2MpOwpAQCAtMTE2OSw5ICsxMTcxLDggQEAKIAkJCQkgKiB1cCBpZiB0aGUgY2xpZW50IGlzIGRvbmUgd2l0aCB0aGUgZGVzY3JpcHRvcgogCQkJCSAqLwogCQkJCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+YXN5bmNfdHgpKSB7Ci0JCQkJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKLQkJCQkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwKLQkJCQkJCSAgICAgICZpb2F0X2NoYW4tPmZyZWVfZGVzYyk7CisJCQkJCWxpc3RfbW92ZV90YWlsKCZkZXNjLT5ub2RlLAorCQkJCQkJICAgICAgICZpb2F0X2NoYW4tPmZyZWVfZGVzYyk7CiAJCQkJfSBlbHNlCiAJCQkJCWRlc2MtPmFzeW5jX3R4LmNvb2tpZSA9IDA7CiAJCQl9IGVsc2UgewpAQCAtMTM2Miw2ICsxMzYzLDcgQEAKIAlkbWFfY29va2llX3QgY29va2llOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCBjb21wbGV0aW9uIGNtcDsKKwl1bnNpZ25lZCBsb25nIHRtbzsKIAogCXNyYyA9IGt6YWxsb2Moc2l6ZW9mKHU4KSAqIElPQVRfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNyYykKQEAgLTE0MTMsOSArMTQxNSwxMCBAQAogCX0KIAlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7CiAKLQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtcCwgbXNlY3NfdG9famlmZmllcygzMDAwKSk7CisJdG1vID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbXAsIG1zZWNzX3RvX2ppZmZpZXMoMzAwMCkpOwogCi0JaWYgKGRldmljZS0+Y29tbW9uLmRldmljZV9pc190eF9jb21wbGV0ZShkbWFfY2hhbiwgY29va2llLCBOVUxMLCBOVUxMKQorCWlmICh0bW8gPT0gMCB8fAorCSAgICBkZXZpY2UtPmNvbW1vbi5kZXZpY2VfaXNfdHhfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkKIAkJCQkJIT0gRE1BX1NVQ0NFU1MpIHsKIAkJZGV2X2VycigmZGV2aWNlLT5wZGV2LT5kZXYsCiAJCQkiU2VsZi10ZXN0IGNvcHkgdGltZWQgb3V0LCBkaXNhYmxpbmdcbiIpOwpAQCAtMTY1Nyw2ICsxNjYwLDEzIEBACiAJCSIgJWQgY2hhbm5lbHMsIGRldmljZSB2ZXJzaW9uIDB4JTAyeCwgZHJpdmVyIHZlcnNpb24gJXNcbiIsCiAJCWRldmljZS0+Y29tbW9uLmNoYW5jbnQsIGRldmljZS0+dmVyc2lvbiwgSU9BVF9ETUFfVkVSU0lPTik7CiAKKwlpZiAoIWRldmljZS0+Y29tbW9uLmNoYW5jbnQpIHsKKwkJZGV2X2VycigmZGV2aWNlLT5wZGV2LT5kZXYsCisJCQkiSW50ZWwoUikgSS9PQVQgRE1BIEVuZ2luZSBwcm9ibGVtIGZvdW5kOiAiCisJCQkiemVybyBjaGFubmVscyBkZXRlY3RlZFxuIik7CisJCWdvdG8gZXJyX3NldHVwX2ludGVycnVwdHM7CisJfQorCiAJZXJyID0gaW9hdF9kbWFfc2V0dXBfaW50ZXJydXB0cyhkZXZpY2UpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3NldHVwX2ludGVycnVwdHM7CkBAIC0xNjk2LDYgKzE3MDYsOSBAQAogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgKl9jaGFuOwogCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW47CiAKKwlpZiAoZGV2aWNlLT52ZXJzaW9uICE9IElPQVRfVkVSXzNfMCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrKTsKKwogCWlvYXRfZG1hX3JlbW92ZV9pbnRlcnJ1cHRzKGRldmljZSk7CiAKIAlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmRldmljZS0+Y29tbW9uKTsKQEAgLTE3MDcsMTAgKzE3MjAsNiBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2aWNlLT5wZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2aWNlLT5wZGV2KTsKIAotCWlmIChkZXZpY2UtPnZlcnNpb24gIT0gSU9BVF9WRVJfM18wKSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yayk7Ci0JfQotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYW4sIF9jaGFuLAogCQkJCSAmZGV2aWNlLT5jb21tb24uY2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CiAJCWlvYXRfY2hhbiA9IHRvX2lvYXRfY2hhbihjaGFuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRkbWEuaCBiL2RyaXZlcnMvZG1hL2lvYXRkbWEuaAppbmRleCBhMzMwNmQwLi5hNTJmZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0ZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogCi0jZGVmaW5lIElPQVRfRE1BX1ZFUlNJT04gICIzLjMwIgorI2RlZmluZSBJT0FUX0RNQV9WRVJTSU9OICAiMy42NCIKIAogZW51bSBpb2F0X2ludGVycnVwdCB7CiAJbm9uZSA9IDAsCkBAIC0xMzUsMTIgKzEzNSwxNCBAQAogCSNpZmRlZiBDT05GSUdfTkVUX0RNQQogCXN3aXRjaCAoZGV2LT52ZXJzaW9uKSB7CiAJY2FzZSBJT0FUX1ZFUl8xXzI6Ci0JY2FzZSBJT0FUX1ZFUl8zXzA6CiAJCXN5c2N0bF90Y3BfZG1hX2NvcHlicmVhayA9IDQwOTY7CiAJCWJyZWFrOwogCWNhc2UgSU9BVF9WRVJfMl8wOgogCQlzeXNjdGxfdGNwX2RtYV9jb3B5YnJlYWsgPSAyMDQ4OwogCQlicmVhazsKKwljYXNlIElPQVRfVkVSXzNfMDoKKwkJc3lzY3RsX3RjcF9kbWFfY29weWJyZWFrID0gMjYyMTQ0OworCQlicmVhazsKIAl9CiAJI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmggYi9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmgKaW5kZXggZjFhZTJjNy4uYWZhNTdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdGRtYV9ody5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQoYykgMjAwNCAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9yZWdpc3RlcnMuaAppbmRleCA4MjdjYjUwLi40OWJjMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfcmVnaXN0ZXJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYyBiL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMKaW5kZXggZWE1NDQwZC4uMTZhZGJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jCkBAIC05MjgsMTkgKzkyOCwxOSBAQAogCiAJZm9yIChzcmNfaWR4ID0gMDsgc3JjX2lkeCA8IElPUF9BRE1BX05VTV9TUkNfVEVTVDsgc3JjX2lkeCsrKSB7CiAJCXhvcl9zcmNzW3NyY19pZHhdID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCF4b3Jfc3Jjc1tzcmNfaWR4XSkKLQkJCXdoaWxlIChzcmNfaWR4LS0pIHsKKwkJaWYgKCF4b3Jfc3Jjc1tzcmNfaWR4XSkgeworCQkJd2hpbGUgKHNyY19pZHgtLSkKIAkJCQlfX2ZyZWVfcGFnZSh4b3Jfc3Jjc1tzcmNfaWR4XSk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAogCWRlc3QgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghZGVzdCkKLQkJd2hpbGUgKHNyY19pZHgtLSkgeworCWlmICghZGVzdCkgeworCQl3aGlsZSAoc3JjX2lkeC0tKQogCQkJX19mcmVlX3BhZ2UoeG9yX3NyY3Nbc3JjX2lkeF0pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogRmlsbCBpbiBzcmMgYnVmZmVycyAqLwogCWZvciAoc3JjX2lkeCA9IDA7IHNyY19pZHggPCBJT1BfQURNQV9OVU1fU1JDX1RFU1Q7IHNyY19pZHgrKykgewpAQCAtMTQwMSw3ICsxNDAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW9wX2FkbWFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpb3BfYWRtYV9wcm9iZSwKLQkucmVtb3ZlCQk9IGlvcF9hZG1hX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlvcF9hZG1hX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9ICJpb3AtYWRtYSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKaW5kZXggMWYxNTRkMC4uYWU1MGE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYwpAQCAtNzI5LDcgKzcyOSw3IEBACiAKIAlpY2hhbi0+c3RhdHVzID0gSVBVX0NIQU5ORUxfUkVBRFk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlwdS0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdS0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tdl94b3IuYyBiL2RyaXZlcnMvZG1hL212X3hvci5jCmluZGV4IGQzNWNiZDEuLmNiN2YyNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL212X3hvci5jCisrKyBiL2RyaXZlcnMvZG1hL212X3hvci5jCkBAIC0xMDE5LDE5ICsxMDE5LDE5IEBACiAKIAlmb3IgKHNyY19pZHggPSAwOyBzcmNfaWR4IDwgTVZfWE9SX05VTV9TUkNfVEVTVDsgc3JjX2lkeCsrKSB7CiAJCXhvcl9zcmNzW3NyY19pZHhdID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCF4b3Jfc3Jjc1tzcmNfaWR4XSkKLQkJCXdoaWxlIChzcmNfaWR4LS0pIHsKKwkJaWYgKCF4b3Jfc3Jjc1tzcmNfaWR4XSkgeworCQkJd2hpbGUgKHNyY19pZHgtLSkKIAkJCQlfX2ZyZWVfcGFnZSh4b3Jfc3Jjc1tzcmNfaWR4XSk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAogCWRlc3QgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghZGVzdCkKLQkJd2hpbGUgKHNyY19pZHgtLSkgeworCWlmICghZGVzdCkgeworCQl3aGlsZSAoc3JjX2lkeC0tKQogCQkJX19mcmVlX3BhZ2UoeG9yX3NyY3Nbc3JjX2lkeF0pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogRmlsbCBpbiBzcmMgYnVmZmVycyAqLwogCWZvciAoc3JjX2lkeCA9IDA7IHNyY19pZHggPCBNVl9YT1JfTlVNX1NSQ19URVNUOyBzcmNfaWR4KyspIHsKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12X3hvcl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG12X3hvcl9wcm9iZSwKLQkucmVtb3ZlCQk9IG12X3hvcl9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtdl94b3JfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gTVZfWE9SX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKaW5kZXggMjRmM2NhOC4uY2IwZjYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7CiAJbWNpLT5tb2RfbmFtZSA9ICJjZWxsX2VkYWMiOwogCW1jaS0+Y3RsX25hbWUgPSAiTUlDIjsKLQltY2ktPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwltY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJbWNpLT5lZGFjX2NoZWNrID0gY2VsbF9lZGFjX2NoZWNrOwogCWNlbGxfZWRhY19pbml0X2Nzcm93cyhtY2kpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggODUzZWYzNy4uNDYzN2E0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJcGNpLT5kZXYgPSAmb3AtPmRldjsKIAlwY2ktPm1vZF9uYW1lID0gRURBQ19NT0RfU1RSOwogCXBjaS0+Y3RsX25hbWUgPSBwZGF0YS0+bmFtZTsKLQlwY2ktPmRldl9uYW1lID0gb3AtPmRldi5idXNfaWQ7CisJcGNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZvcC0+ZGV2KTsKIAogCWlmIChlZGFjX29wX3N0YXRlID09IEVEQUNfT1BTVEFURV9QT0xMKQogCQlwY2ktPmVkYWNfY2hlY2sgPSBtcGM4NXh4X3BjaV9jaGVjazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYwppbmRleCAwODNjZThkLi41MTMxYWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlwZGF0YS0+aXJxID0gTk9fSVJROwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBjaSk7CiAJcGNpLT5kZXYgPSAmcGRldi0+ZGV2OwotCXBjaS0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCXBjaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAlwY2ktPm1vZF9uYW1lID0gRURBQ19NT0RfU1RSOwogCXBjaS0+Y3RsX25hbWUgPSBwZGF0YS0+bmFtZTsKIApAQCAtMjk0LDcgKzI5NCw3IEBACiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKIAllZGFjX2Rldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlZGFjX2Rldik7Ci0JZWRhY19kZXYtPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwllZGFjX2Rldi0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcikgewpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKIAllZGFjX2Rldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlZGFjX2Rldik7Ci0JZWRhY19kZXYtPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwllZGFjX2Rldi0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcikgewpAQCAtNzEzLDcgKzcxMyw3IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNpKTsKIAlwZGF0YS0+bmFtZSA9ICJtdjY0eDYwX21jX2VyciI7CiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKLQltY2ktPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwltY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJcGRhdGEtPmVkYWNfaWR4ID0gZWRhY19tY19pZHgrKzsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwppbmRleCBjOTUwYmY4Li42Njk1OGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYworKysgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJZWRldi0+ZGV2LmJ1cyA9ICZlaXNhX2J1c190eXBlOwogCWVkZXYtPmRldi5kbWFfbWFzayA9ICZlZGV2LT5kbWFfbWFzazsKIAllZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBlZGV2LT5kbWFfbWFzazsKLQlzcHJpbnRmIChlZGV2LT5kZXYuYnVzX2lkLCAiJTAyWDolMDJYIiwgcm9vdC0+YnVzX25yLCBzbG90KTsKKwlkZXZfc2V0X25hbWUoJmVkZXYtPmRldiwgIiUwMlg6JTAyWCIsIHJvb3QtPmJ1c19uciwgc2xvdCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRUlTQV9NQVhfUkVTT1VSQ0VTOyBpKyspIHsKICNpZmRlZiBDT05GSUdfRUlTQV9OQU1FUwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2OwogCiAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICJFSVNBOiBQcm9iaW5nIGJ1cyAlZCBhdCAlc1xuIiwKLQkJcm9vdC0+YnVzX25yLCByb290LT5kZXYtPmJ1c19pZCk7CisJCXJvb3QtPmJ1c19uciwgZGV2X25hbWUocm9vdC0+ZGV2KSk7CiAKIAkvKiBGaXJzdCB0cnkgdG8gZ2V0IGhvbGQgb2Ygc2xvdCAwLiBJZiB0aGVyZSBpcyBubyBkZXZpY2UKIAkgKiBoZXJlLCBzaW1wbHkgZmFpbCwgdW5sZXNzIHJvb3QtPmZvcmNlX3Byb2JlIGlzIHNldC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMgYi9kcml2ZXJzL2Zpcm13YXJlL21lbW1hcC5jCmluZGV4IDI2MWI5YWEuLjA1YWEyZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9tZW1tYXAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsaW51eC9kcml2ZXJzL2Zpcm13YXJlL21lbW1hcC5jCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFNVU0UgTElOVVggUHJvZHVjdHMgR21iSAotICogIGJ5IEJlcm5oYXJkIFdhbGxlIDxid2FsbGVAc3VzZS5kZT4KKyAqICBieSBCZXJuaGFyZCBXYWxsZSA8YmVybmhhcmQud2FsbGVAZ214LmRlPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyLjAgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMgYi9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKaW5kZXggN2ExMTY4Mi4uOTg0YjU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYwpAQCAtMTYwLDcgKzE2MCw3IEBACiB7CiAJc3RydWN0IGdwaW9fY2hpcCAqYyA9ICZiZy0+Z3BpbzsKIAotCWMtPmxhYmVsID0gYmctPnBkZXYtPmRldi5idXNfaWQ7CisJYy0+bGFiZWwgPSBkZXZfbmFtZSgmYmctPnBkZXYtPmRldik7CiAJYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljLT5kaXJlY3Rpb25faW5wdXQgPSBidDh4eGdwaW9fZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CiAJYy0+Z2V0ID0gYnQ4eHhncGlvX2dwaW9fZ2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA0YmUzYWNiLi4zYTIyZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtODAsMTggKzgwLDE3IEBACiAJICBYRnJlZTg2IDQuNCBhbmQgYWJvdmUuIElmIHVuc3VyZSwgYnVpbGQgdGhpcyBhbmQgaTgzMCBhcyBtb2R1bGVzIGFuZAogCSAgdGhlIFggc2VydmVyIHdpbGwgbG9hZCB0aGUgY29ycmVjdCBvbmUuCiAKLWVuZGNob2ljZQotCiBjb25maWcgRFJNX0k5MTVfS01TCiAJYm9vbCAiRW5hYmxlIG1vZGVzZXR0aW5nIG9uIGludGVsIGJ5IGRlZmF1bHQiCiAJZGVwZW5kcyBvbiBEUk1fSTkxNQogCWhlbHAKLQlDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQga2VybmVsIG1vZGVzZXR0aW5nIGVuYWJsZWQgYnkgZGVmYXVsdCwKLQlhbmQgeW91IGhhdmUgYSBuZXcgZW5vdWdoIHVzZXJzcGFjZSB0byBzdXBwb3J0IHRoaXMuIFJ1bm5pbmcgb2xkCi0JdXNlcnNwYWNlcyB3aXRoIHRoaXMgZW5hYmxlZCB3aWxsIGNhdXNlIHBhaW4uICBOb3RlIHRoYXQgdGhpcyBjYXVzZXMKLQl0aGUgZHJpdmVyIHRvIGJpbmQgdG8gUENJIGRldmljZXMsIHdoaWNoIHByZWNsdWRlcyBsb2FkaW5nIHRoaW5ncwotCWxpa2UgaW50ZWxmYi4KKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBrZXJuZWwgbW9kZXNldHRpbmcgZW5hYmxlZCBieSBkZWZhdWx0LAorCSAgYW5kIHlvdSBoYXZlIGEgbmV3IGVub3VnaCB1c2Vyc3BhY2UgdG8gc3VwcG9ydCB0aGlzLiBSdW5uaW5nIG9sZAorCSAgdXNlcnNwYWNlcyB3aXRoIHRoaXMgZW5hYmxlZCB3aWxsIGNhdXNlIHBhaW4uICBOb3RlIHRoYXQgdGhpcyBjYXVzZXMKKwkgIHRoZSBkcml2ZXIgdG8gYmluZCB0byBQQ0kgZGV2aWNlcywgd2hpY2ggcHJlY2x1ZGVzIGxvYWRpbmcgdGhpbmdzCisJICBsaWtlIGludGVsZmIuCiAKK2VuZGNob2ljZQogCiBjb25maWcgRFJNX01HQQogCXRyaXN0YXRlICJNYXRyb3ggZzIwMC9nNDAwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYwppbmRleCA3MmM2NjdmLi4xMjcxNWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJCQkJZGV2LT5zaWdkYXRhLmxvY2sgPSBOVUxMOwogCQkJbWFzdGVyLT5sb2NrLmh3X2xvY2sgPSBOVUxMOyAgIC8qIFNITSByZW1vdmVkICovCiAJCQltYXN0ZXItPmxvY2suZmlsZV9wcml2ID0gTlVMTDsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbWFzdGVyLT5sb2NrLmxvY2tfcXVldWUpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmbWFzdGVyLT5sb2NrLmxvY2tfcXVldWUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgX0RSTV9BR1A6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IGJmY2UwOTkuLjk0YTc2ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC0xNzQxLDkgKzE3NDEsOCBAQAogICogUkVUVVJOUzoKICAqIFplcm8gb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZS4KICAqLwotdm9pZCBkcm1fZmJfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCkKK3ZvaWQgZHJtX2ZiX3JlbGVhc2Uoc3RydWN0IGRybV9maWxlICpwcml2KQogewotCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgKnRmYjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDk2NGM1ZWIuLjFjM2E4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTQ1Miw2ICs0NTIsNTkgQEAKIAlrZnJlZShtb2Rlcyk7CiAJa2ZyZWUoZW5hYmxlZCk7CiB9CisKKy8qKgorICogZHJtX2VuY29kZXJfY3J0Y19vayAtIGNhbiBhIGdpdmVuIGNydGMgZHJpdmUgYSBnaXZlbiBlbmNvZGVyPworICogQGVuY29kZXI6IGVuY29kZXIgdG8gdGVzdAorICogQGNydGM6IGNydGMgdG8gdGVzdAorICoKKyAqIFJldHVybiBmYWxzZSBpZiBAZW5jb2RlciBjYW4ndCBiZSBkcml2ZW4gYnkgQGNydGMsIHRydWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCBkcm1fZW5jb2Rlcl9jcnRjX29rKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKnRtcDsKKwlpbnQgY3J0Y19tYXNrID0gMTsKKworCVdBUk4oIWNydGMsICJjaGVja2luZyBudWxsIGNydGM/Iik7CisKKwlkZXYgPSBjcnRjLT5kZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWlmICh0bXAgPT0gY3J0YykKKwkJCWJyZWFrOworCQljcnRjX21hc2sgPDw9IDE7CisJfQorCisJaWYgKGVuY29kZXItPnBvc3NpYmxlX2NydGNzICYgY3J0Y19tYXNrKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBDaGVjayB0aGUgQ1JUQyB3ZSdyZSBnb2luZyB0byBtYXAgZWFjaCBvdXRwdXQgdG8gdnMuIGl0cyBjdXJyZW50CisgKiBDUlRDLiAgSWYgdGhleSBkb24ndCBtYXRjaCwgd2UgaGF2ZSB0byBkaXNhYmxlIHRoZSBvdXRwdXQgYW5kIHRoZSBDUlRDCisgKiBzaW5jZSB0aGUgZHJpdmVyIHdpbGwgaGF2ZSB0byByZS1yb3V0ZSB0aGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkCitkcm1fY3J0Y19wcmVwYXJlX2VuY29kZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCS8qIERpc2FibGUgdW51c2VkIGVuY29kZXJzICovCisJCWlmIChlbmNvZGVyLT5jcnRjID09IE5VTEwpCisJCQkoKmVuY29kZXJfZnVuY3MtPmRwbXMpKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwkJLyogRGlzYWJsZSBlbmNvZGVycyB3aG9zZSBDUlRDIGlzIGFib3V0IHRvIGNoYW5nZSAqLworCQlpZiAoZW5jb2Rlcl9mdW5jcy0+Z2V0X2NydGMgJiYKKwkJICAgIGVuY29kZXItPmNydGMgIT0gKCplbmNvZGVyX2Z1bmNzLT5nZXRfY3J0YykoZW5jb2RlcikpCisJCQkoKmVuY29kZXJfZnVuY3MtPmRwbXMpKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwl9Cit9CisKIC8qKgogICogZHJtX2NydGNfc2V0X21vZGUgLSBzZXQgYSBtb2RlCiAgKiBAY3J0YzogQ1JUQyB0byBwcm9ncmFtCkBAIC01MTIsOCArNTY1LDggQEAKIAlpZiAoZHJtX21vZGVfZXF1YWwoJnNhdmVkX21vZGUsICZjcnRjLT5tb2RlKSkgewogCQlpZiAoc2F2ZWRfeCAhPSBjcnRjLT54IHx8IHNhdmVkX3kgIT0gY3J0Yy0+eSB8fAogCQkgICAgZGVwdGhfY2hhbmdlZCB8fCBicHBfY2hhbmdlZCkgewotCQkJY3J0Y19mdW5jcy0+bW9kZV9zZXRfYmFzZShjcnRjLCBjcnRjLT54LCBjcnRjLT55LAotCQkJCQkJICBvbGRfZmIpOworCQkJcmV0ID0gIWNydGNfZnVuY3MtPm1vZGVfc2V0X2Jhc2UoY3J0YywgY3J0Yy0+eCwgY3J0Yy0+eSwKKwkJCQkJCQkgb2xkX2ZiKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KQEAgLTU0NywxMiArNjAwLDE2IEBACiAJCWVuY29kZXJfZnVuY3MtPnByZXBhcmUoZW5jb2Rlcik7CiAJfQogCisJZHJtX2NydGNfcHJlcGFyZV9lbmNvZGVycyhkZXYpOworCiAJY3J0Y19mdW5jcy0+cHJlcGFyZShjcnRjKTsKIAogCS8qIFNldCB1cCB0aGUgRFBMTCBhbmQgYW55IGVuY29kZXJzIHN0YXRlIHRoYXQgbmVlZHMgdG8gYWRqdXN0IG9yIGRlcGVuZAogCSAqIG9uIHRoZSBEUExMLgogCSAqLwotCWNydGNfZnVuY3MtPm1vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUsIHgsIHksIG9sZF9mYik7CisJcmV0ID0gIWNydGNfZnVuY3MtPm1vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUsIHgsIHksIG9sZF9mYik7CisJaWYgKCFyZXQpCisJICAgIGdvdG8gZG9uZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CiAKQEAgLTYxNSw3ICs2NzIsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IGRybV9jcnRjICoqc2F2ZV9jcnRjcywgKm5ld19jcnRjOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqKnNhdmVfZW5jb2RlcnMsICpuZXdfZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiID0gTlVMTDsKIAlib29sIHNhdmVfZW5hYmxlZDsKIAlib29sIG1vZGVfY2hhbmdlZCA9IGZhbHNlOwogCWJvb2wgZmJfY2hhbmdlZCA9IGZhbHNlOwpAQCAtNjY2LDkgKzcyMywxMCBAQAogCSAqIGFuZCB0aGVuIGp1c3QgZmxpcF9vcl9tb3ZlIGl0ICovCiAJaWYgKHNldC0+Y3J0Yy0+ZmIgIT0gc2V0LT5mYikgewogCQkvKiBJZiB3ZSBoYXZlIG5vIGZiIHRoZW4gdHJlYXQgaXQgYXMgYSBmdWxsIG1vZGUgc2V0ICovCi0JCWlmIChzZXQtPmNydGMtPmZiID09IE5VTEwpCisJCWlmIChzZXQtPmNydGMtPmZiID09IE5VTEwpIHsKKwkJCURSTV9ERUJVRygiY3J0YyBoYXMgbm8gZmIsIGZ1bGwgbW9kZSBzZXRcbiIpOwogCQkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKLQkJZWxzZSBpZiAoKHNldC0+ZmItPmJpdHNfcGVyX3BpeGVsICE9CisJCX0gZWxzZSBpZiAoKHNldC0+ZmItPmJpdHNfcGVyX3BpeGVsICE9CiAJCQkgc2V0LT5jcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwpIHx8CiAJCQkgc2V0LT5mYi0+ZGVwdGggIT0gc2V0LT5jcnRjLT5mYi0+ZGVwdGgpCiAJCQlmYl9jaGFuZ2VkID0gdHJ1ZTsKQEAgLTY4MCw3ICs3MzgsNyBAQAogCQlmYl9jaGFuZ2VkID0gdHJ1ZTsKIAogCWlmIChzZXQtPm1vZGUgJiYgIWRybV9tb2RlX2VxdWFsKHNldC0+bW9kZSwgJnNldC0+Y3J0Yy0+bW9kZSkpIHsKLQkJRFJNX0RFQlVHKCJtb2RlcyBhcmUgZGlmZmVyZW50XG4iKTsKKwkJRFJNX0RFQlVHKCJtb2RlcyBhcmUgZGlmZmVyZW50LCBmdWxsIG1vZGUgc2V0XG4iKTsKIAkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZSgmc2V0LT5jcnRjLT5tb2RlKTsKIAkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShzZXQtPm1vZGUpOwogCQltb2RlX2NoYW5nZWQgPSB0cnVlOwpAQCAtNzA2LDYgKzc2NCw3IEBACiAJCX0KIAogCQlpZiAobmV3X2VuY29kZXIgIT0gY29ubmVjdG9yLT5lbmNvZGVyKSB7CisJCQlEUk1fREVCVUcoImVuY29kZXIgY2hhbmdlZCwgZnVsbCBtb2RlIHN3aXRjaFxuIik7CiAJCQltb2RlX2NoYW5nZWQgPSB0cnVlOwogCQkJY29ubmVjdG9yLT5lbmNvZGVyID0gbmV3X2VuY29kZXI7CiAJCX0KQEAgLTczMiwxMCArNzkxLDIwIEBACiAJCQlpZiAoc2V0LT5jb25uZWN0b3JzW3JvXSA9PSBjb25uZWN0b3IpCiAJCQkJbmV3X2NydGMgPSBzZXQtPmNydGM7CiAJCX0KKworCQkvKiBNYWtlIHN1cmUgdGhlIG5ldyBDUlRDIHdpbGwgd29yayB3aXRoIHRoZSBlbmNvZGVyICovCisJCWlmIChuZXdfY3J0YyAmJgorCQkgICAgIWRybV9lbmNvZGVyX2NydGNfb2soY29ubmVjdG9yLT5lbmNvZGVyLCBuZXdfY3J0YykpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWxfc2V0X21vZGU7CisJCX0KIAkJaWYgKG5ld19jcnRjICE9IGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YykgeworCQkJRFJNX0RFQlVHKCJjcnRjIGNoYW5nZWQsIGZ1bGwgbW9kZSBzd2l0Y2hcbiIpOwogCQkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKIAkJCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9IG5ld19jcnRjOwogCQl9CisJCURSTV9ERUJVRygic2V0dGluZyBjb25uZWN0b3IgJWQgY3J0YyB0byAlcFxuIiwKKwkJCSAgY29ubmVjdG9yLT5iYXNlLmlkLCBuZXdfY3J0Yyk7CiAJfQogCiAJLyogbW9kZV9zZXRfYmFzZSBpcyBub3QgYSByZXF1aXJlZCBmdW5jdGlvbiAqLwpAQCAtNzUyLDYgKzgyMSw4IEBACiAJCQlpZiAoIWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShzZXQtPmNydGMsIHNldC0+bW9kZSwKIAkJCQkJCSAgICAgIHNldC0+eCwgc2V0LT55LAogCQkJCQkJICAgICAgb2xkX2ZiKSkgeworCQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCBtb2RlIG9uIGNydGMgJXBcbiIsCisJCQkJCSAgc2V0LT5jcnRjKTsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gZmFpbF9zZXRfbW9kZTsKIAkJCX0KQEAgLTc2NSw3ICs4MzYsMTAgQEAKIAkJb2xkX2ZiID0gc2V0LT5jcnRjLT5mYjsKIAkJaWYgKHNldC0+Y3J0Yy0+ZmIgIT0gc2V0LT5mYikKIAkJCXNldC0+Y3J0Yy0+ZmIgPSBzZXQtPmZiOwotCQljcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNlKHNldC0+Y3J0Yywgc2V0LT54LCBzZXQtPnksIG9sZF9mYik7CisJCXJldCA9IGNydGNfZnVuY3MtPm1vZGVfc2V0X2Jhc2Uoc2V0LT5jcnRjLAorCQkJCQkJc2V0LT54LCBzZXQtPnksIG9sZF9mYik7CisJCWlmIChyZXQgIT0gMCkKKwkJICAgIGdvdG8gZmFpbF9zZXRfbW9kZTsKIAl9CiAKIAlrZnJlZShzYXZlX2VuY29kZXJzKTsKQEAgLTc3NCw5ICs4NDgsMTQgQEAKIAogZmFpbF9zZXRfbW9kZToKIAlzZXQtPmNydGMtPmVuYWJsZWQgPSBzYXZlX2VuYWJsZWQ7CisJc2V0LT5jcnRjLT5mYiA9IG9sZF9mYjsKIAljb3VudCA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKQorCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2RlcikKKwkJCWNvbnRpbnVlOworCiAJCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9IHNhdmVfY3J0Y3NbY291bnQrK107CisJfQogZmFpbF9ub19lbmNvZGVyOgogCWtmcmVlKHNhdmVfY3J0Y3MpOwogCWNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggNWE0ZDMyNC4uYTgzOWEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQlEUk1fRVJST1IoIkVESUQgaGFzIG1ham9yIHZlcnNpb24gJWQsIGluc3RlYWQgb2YgMVxuIiwgZWRpZC0+dmVyc2lvbik7CiAJCWdvdG8gYmFkOwogCX0KLQlpZiAoZWRpZC0+cmV2aXNpb24gPD0gMCB8fCBlZGlkLT5yZXZpc2lvbiA+IDMpIHsKKwlpZiAoZWRpZC0+cmV2aXNpb24gPiAzKSB7CiAJCURSTV9FUlJPUigiRURJRCBoYXMgbWlub3IgdmVyc2lvbiAlZCwgd2hpY2ggaXMgbm90IGJldHdlZW4gMC0zXG4iLCBlZGlkLT5yZXZpc2lvbik7CiAJCWdvdG8gYmFkOwogCX0KQEAgLTMyMCwxMCArMzIwLDEwIEBACiAJbW9kZS0+aHRvdGFsID0gbW9kZS0+aGRpc3BsYXkgKyAoKHB0LT5oYmxhbmtfaGkgPDwgOCkgfCBwdC0+aGJsYW5rX2xvKTsKIAogCW1vZGUtPnZkaXNwbGF5ID0gKHB0LT52YWN0aXZlX2hpIDw8IDgpIHwgcHQtPnZhY3RpdmVfbG87Ci0JbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArICgocHQtPnZzeW5jX29mZnNldF9oaSA8PCA4KSB8CisJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArICgocHQtPnZzeW5jX29mZnNldF9oaSA8PCA0KSB8CiAJCQkJCSAgICAgIHB0LT52c3luY19vZmZzZXRfbG8pOwogCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsKLQkJKChwdC0+dnN5bmNfcHVsc2Vfd2lkdGhfaGkgPDwgOCkgfAorCQkoKHB0LT52c3luY19wdWxzZV93aWR0aF9oaSA8PCA0KSB8CiAJCSBwdC0+dnN5bmNfcHVsc2Vfd2lkdGhfbG8pOwogCW1vZGUtPnZ0b3RhbCA9IG1vZGUtPnZkaXNwbGF5ICsgKChwdC0+dmJsYW5rX2hpIDw8IDgpIHwgcHQtPnZibGFua19sbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKaW5kZXggYjA2YTUzNy4uZTEzY2I2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKQEAgLTMzNywxNCArMzM3LDEwIEBACiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwotCWludCByZXRjb2RlOwogCiAJRFJNX0RFQlVHKCJmZCA9ICVkLCBkZXZpY2UgPSAweCVseFxuIiwgZmQsCiAJCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYocHJpdi0+bWlub3ItPmRldmljZSkpOwotCXJldGNvZGUgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKLQlpZiAocmV0Y29kZSA8IDApCi0JCXJldHVybiByZXRjb2RlOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2Zhc3luYyk7CiAKQEAgLTQ1Nyw2ICs0NTMsOSBAQAogCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKIAkJZHJtX2dlbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2KTsKIAorCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX01PREVTRVQpCisJCWRybV9mYl9yZWxlYXNlKGZpbGVfcHJpdik7CisKIAltdXRleF9sb2NrKCZkZXYtPmN0eGxpc3RfbXV0ZXgpOwogCWlmICghbGlzdF9lbXB0eSgmZGV2LT5jdHhsaXN0KSkgewogCQlzdHJ1Y3QgZHJtX2N0eF9saXN0ICpwb3MsICpuOwpAQCAtNDgxLDYgKzQ4MCw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaWYgKGZpbGVfcHJpdi0+aXNfbWFzdGVyKSB7CisJCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIgPSBmaWxlX3ByaXYtPm1hc3RlcjsKIAkJc3RydWN0IGRybV9maWxlICp0ZW1wOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXAsICZkZXYtPmZpbGVsaXN0LCBsaGVhZCkgewogCQkJaWYgKCh0ZW1wLT5tYXN0ZXIgPT0gZmlsZV9wcml2LT5tYXN0ZXIpICYmCkBAIC00ODgsNiArNDg4LDE5IEBACiAJCQkJdGVtcC0+YXV0aGVudGljYXRlZCA9IDA7CiAJCX0KIAorCQkvKioKKwkJICogU2luY2UgdGhlIG1hc3RlciBpcyBkaXNhcHBlYXJpbmcsIHNvIGlzIHRoZQorCQkgKiBwb3NzaWJpbGl0eSB0byBsb2NrLgorCQkgKi8KKworCQlpZiAobWFzdGVyLT5sb2NrLmh3X2xvY2spIHsKKwkJCWlmIChkZXYtPnNpZ2RhdGEubG9jayA9PSBtYXN0ZXItPmxvY2suaHdfbG9jaykKKwkJCQlkZXYtPnNpZ2RhdGEubG9jayA9IE5VTEw7CisJCQltYXN0ZXItPmxvY2suaHdfbG9jayA9IE5VTEw7CisJCQltYXN0ZXItPmxvY2suZmlsZV9wcml2ID0gTlVMTDsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJm1hc3Rlci0+bG9jay5sb2NrX3F1ZXVlKTsKKwkJfQorCiAJCWlmIChmaWxlX3ByaXYtPm1pbm9yLT5tYXN0ZXIgPT0gZmlsZV9wcml2LT5tYXN0ZXIpIHsKIAkJCS8qIGRyb3AgdGhlIHJlZmVyZW5jZSBoZWxkIG15IHRoZSBtaW5vciAqLwogCQkJZHJtX21hc3Rlcl9wdXQoJmZpbGVfcHJpdi0+bWlub3ItPm1hc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwppbmRleCA2OTE1ZmI4Li44OGQzMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKQEAgLTEwNCw4ICsxMDQsOCBAQAogCiAJaWYgKGRybV9tbV9pbml0KCZtbS0+b2Zmc2V0X21hbmFnZXIsIERSTV9GSUxFX1BBR0VfT0ZGU0VUX1NUQVJULAogCQkJRFJNX0ZJTEVfUEFHRV9PRkZTRVRfU0laRSkpIHsKLQkJZHJtX2ZyZWUobW0sIHNpemVvZihzdHJ1Y3QgZHJtX2dlbV9tbSksIERSTV9NRU1fTU0pOwogCQlkcm1faHRfcmVtb3ZlKCZtbS0+b2Zmc2V0X2hhc2gpOworCQlkcm1fZnJlZShtbSwgc2l6ZW9mKHN0cnVjdCBkcm1fZ2VtX21tKSwgRFJNX01FTV9NTSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjk1LDM1ICsyOTUsMzcgQEAKIAkJcmV0dXJuIC1FQkFERjsKIAogYWdhaW46Ci0JaWYgKGlkcl9wcmVfZ2V0KCZkZXYtPm9iamVjdF9uYW1lX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGlkcl9wcmVfZ2V0KCZkZXYtPm9iamVjdF9uYW1lX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CiAKIAlzcGluX2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7Ci0JaWYgKG9iai0+bmFtZSkgewotCQlhcmdzLT5uYW1lID0gb2JqLT5uYW1lOworCWlmICghb2JqLT5uYW1lKSB7CisJCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgb2JqLCAxLAorCQkJCQkmb2JqLT5uYW1lKTsKKwkJYXJncy0+bmFtZSA9ICh1aW50NjRfdCkgb2JqLT5uYW1lOwogCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgb2JqLCAxLAotCQkJCSAmb2JqLT5uYW1lKTsKLQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKLQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCWdvdG8gYWdhaW47CiAKLQlpZiAocmV0ICE9IDApIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA9PSAtRUFHQUlOKQorCQkJZ290byBhZ2FpbjsKKworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBBbGxvY2F0ZSBhIHJlZmVyZW5jZSBmb3IgdGhlIG5hbWUgdGFibGUuICAqLworCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwl9IGVsc2UgeworCQlhcmdzLT5uYW1lID0gKHVpbnQ2NF90KSBvYmotPm5hbWU7CisJCXNwaW5fdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCQlyZXQgPSAwOwogCX0KIAotCS8qCi0JICogTGVhdmUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBsb29rdXAgYXJvdW5kIGFzIHRoZQotCSAqIG5hbWUgdGFibGUgbm93IGhvbGRzIG9uZQotCSAqLwotCWFyZ3MtPm5hbWUgPSAodWludDY0X3QpIG9iai0+bmFtZTsKLQotCXJldHVybiAwOworZXJyOgorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNDQ4LDYgKzQ1MCw3IEBACiAJc3Bpbl9sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOwogCWlmIChvYmotPm5hbWUpIHsKIAkJaWRyX3JlbW92ZSgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIG9iai0+bmFtZSk7CisJCW9iai0+bmFtZSA9IDA7CiAJCXNwaW5fdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOwogCQkvKgogCQkgKiBUaGUgb2JqZWN0IG5hbWUgaGVsZCBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCwgZHJvcApAQCAtNDYwLDYgKzQ2MywyNiBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZSk7CiAKK3ZvaWQgZHJtX2dlbV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92bV9vcGVuKTsKKwordm9pZCBkcm1fZ2VtX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdm1fY2xvc2UpOworCisKIC8qKgogICogZHJtX2dlbV9tbWFwIC0gbWVtb3J5IG1hcCByb3V0aW5lIGZvciBHRU0gb2JqZWN0cwogICogQGZpbHA6IERSTSBmaWxlIHBvaW50ZXIKQEAgLTUyMSw2ICs1NDQsMTQgQEAKICNlbmRpZgogCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocHJvdCk7CiAKKwkvKiBUYWtlIGEgcmVmIGZvciB0aGlzIG1hcHBpbmcgb2YgdGhlIG9iamVjdCwgc28gdGhhdCB0aGUgZmF1bHQKKwkgKiBoYW5kbGVyIGNhbiBkZXJlZmVyZW5jZSB0aGUgbW1hcCBvZmZzZXQncyBwb2ludGVyIHRvIHRoZSBvYmplY3QuCisJICogVGhpcyByZWZlcmVuY2UgaXMgY2xlYW5lZCB1cCBieSB0aGUgY29ycmVzcG9uZGluZyB2bV9jbG9zZQorCSAqICh3aGljaCBzaG91bGQgaGFwcGVuIHdoZXRoZXIgdGhlIHZtYSB3YXMgY3JlYXRlZCBieSB0aGlzIGNhbGwsIG9yCisJICogYnkgYSB2bV9vcGVuIGR1ZSB0byBtcmVtYXAgb3IgcGFydGlhbCB1bm1hcCBvciB3aGF0ZXZlcikuCisJICovCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CisKIAl2bWEtPnZtX2ZpbGUgPSBmaWxwOwkvKiBOZWVkZWQgZm9yIGRybV92bV9vcGVuKCkgKi8KIAlkcm1fdm1fb3Blbl9sb2NrZWQodm1hKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggMzc5NWRiYy4uOTNlNjc3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC00MzUsNiArNDM1LDggQEAKICAqLwogdm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKKwlCVUdfT04gKGF0b21pY19yZWFkICgmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pID09IDApOworCiAJLyogTGFzdCB1c2VyIHNjaGVkdWxlcyBpbnRlcnJ1cHQgZGlzYWJsZSAqLwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkpCiAJCW1vZF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lciwgamlmZmllcyArIDUqRFJNX0haKTsKQEAgLTQ2MCw4ICs0NjIsOSBAQAogCSAqIHNvIHRoYXQgaW50ZXJydXB0cyByZW1haW4gZW5hYmxlZCBpbiB0aGUgaW50ZXJpbS4KIAkgKi8KIAlpZiAoIWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSkgewotCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gPSAxOwotCQlkcm1fdmJsYW5rX2dldChkZXYsIGNydGMpOworCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gPSAweDE7CisJCWlmIChkcm1fdmJsYW5rX2dldChkZXYsIGNydGMpID09IDApCisJCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gfD0gMHgyOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZHJtX3ZibGFua19wcmVfbW9kZXNldCk7CkBAIC00NzMsOSArNDc2LDEyIEBACiAJaWYgKGRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCQlkZXYtPnZibGFua19kaXNhYmxlX2FsbG93ZWQgPSAxOwotCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gPSAwOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Ci0JCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CisKKwkJaWYgKGRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSAmIDB4MikKKwkJCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CisKKwkJZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdID0gMDsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbG9jay5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9sb2NrLmMKaW5kZXggNDZlN2IyOC4uZTJmNzBhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9sb2NrLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9sb2NrLmMKQEAgLTgwLDYgKzgwLDcgQEAKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAoIW1hc3Rlci0+bG9jay5od19sb2NrKSB7CiAJCQkvKiBEZXZpY2UgaGFzIGJlZW4gdW5yZWdpc3RlcmVkICovCisJCQlzZW5kX3NpZyhTSUdURVJNLCBjdXJyZW50LCAwKTsKIAkJCXJldCA9IC1FSU5UUjsKIAkJCWJyZWFrOwogCQl9CkBAIC05Myw3ICs5NCw3IEBACiAJCS8qIENvbnRlbnRpb24gKi8KIAkJc2NoZWR1bGUoKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlyZXQgPSAtRUlOVFI7CiAJCQlicmVhazsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKaW5kZXggNDZiYjkyMy4uN2M4YjE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKQEAgLTE0NiwxNCArMTQ2LDYgQEAKIAogCWRybV9odF9yZW1vdmUoJm1hc3Rlci0+bWFnaWNsaXN0KTsKIAotCWlmIChtYXN0ZXItPmxvY2suaHdfbG9jaykgewotCQlpZiAoZGV2LT5zaWdkYXRhLmxvY2sgPT0gbWFzdGVyLT5sb2NrLmh3X2xvY2spCi0JCQlkZXYtPnNpZ2RhdGEubG9jayA9IE5VTEw7Ci0JCW1hc3Rlci0+bG9jay5od19sb2NrID0gTlVMTDsKLQkJbWFzdGVyLT5sb2NrLmZpbGVfcHJpdiA9IE5VTEw7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbWFzdGVyLT5sb2NrLmxvY2tfcXVldWUpOwotCX0KLQogCWRybV9mcmVlKG1hc3Rlciwgc2l6ZW9mKCptYXN0ZXIpLCBEUk1fTUVNX0RSSVZFUik7CiB9CiAKQEAgLTE3Niw3ICsxNjgsNyBAQAogCSAgICBmaWxlX3ByaXYtPm1pbm9yLT5tYXN0ZXIgIT0gZmlsZV9wcml2LT5tYXN0ZXIpIHsKIAkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlmaWxlX3ByaXYtPm1pbm9yLT5tYXN0ZXIgPSBkcm1fbWFzdGVyX2dldChmaWxlX3ByaXYtPm1hc3Rlcik7Ci0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggNWFhNjc4MC4uMTg2ZDA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMzU5LDggKzM1OSw4IEBACiAJRFJNX0RFQlVHKCJhZGRpbmcgXCIlc1wiIHRvIHN5c2ZzXG4iLAogCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAKLQlzbnByaW50Zihjb25uZWN0b3ItPmtkZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImNhcmQlZC0lcyIsCi0JCSBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCWRldl9zZXRfbmFtZSgmY29ubmVjdG9yLT5rZGV2LCAiY2FyZCVkLSVzIiwKKwkJICAgICBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmY29ubmVjdG9yLT5rZGV2KTsKIAogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDgxZjFjZmYuLjZkMjFiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CiAJCWRldl9wcml2LT5yaW5nLm1hcC5tdHJyID0gMDsKIAotCQlkcm1fY29yZV9pb3JlbWFwKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKIAogCQlpZiAoZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZSA9PSBOVUxMKSB7CiAJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CkBAIC04MTEsNyArODExLDcgQEAKIAlkZXZfcHJpdi0+aHdzX21hcC5mbGFncyA9IDA7CiAJZGV2X3ByaXYtPmh3c19tYXAubXRyciA9IDA7CiAKLQlkcm1fY29yZV9pb3JlbWFwKCZkZXZfcHJpdi0+aHdzX21hcCwgZGV2KTsKKwlkcm1fY29yZV9pb3JlbWFwX3djKCZkZXZfcHJpdi0+aHdzX21hcCwgZGV2KTsKIAlpZiAoZGV2X3ByaXYtPmh3c19tYXAuaGFuZGxlID09IE5VTEwpIHsKIAkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwogCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gMDsKQEAgLTEwOTAsNiArMTA5MCwxMSBAQAogICAgICAgICBkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcgPQogCQlpb19tYXBwaW5nX2NyZWF0ZV93YyhkZXYtPmFncC0+YmFzZSwKIAkJCQkgICAgIGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX3NpemUgKiAxMDI0KjEwMjQpOworCWlmIChkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcgPT0gTlVMTCkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9ybW1hcDsKKwl9CisKIAkvKiBTZXQgdXAgYSBXQyBNVFJSIGZvciBub24tUEFUIHN5c3RlbXMuICBUaGlzIGlzIG1vcmUgY29tbW9uIHRoYW4KIAkgKiBvbmUgd291bGQgdGhpbmssIGJlY2F1c2UgdGhlIGtlcm5lbCBkaXNhYmxlcyBQQVQgb24gZmlyc3QKIAkgKiBnZW5lcmF0aW9uIENvcmUgY2hpcHMgYmVjYXVzZSBXQyBQQVQgZ2V0cyBvdmVycmlkZGVuIGJ5IGEgVUMKQEAgLTExMDAsNyArMTEwNSw3IEBACiAJCQkJCSAxMDI0ICogMTAyNCwKIAkJCQkJIE1UUlJfVFlQRV9XUkNPTUIsIDEpOwogCWlmIChkZXZfcHJpdi0+bW0uZ3R0X210cnIgPCAwKSB7Ci0JCURSTV9JTkZPKCJNVFJSIGFsbG9jYXRpb24gZmFpbGVkXG4uICBHcmFwaGljcyAiCisJCURSTV9JTkZPKCJNVFJSIGFsbG9jYXRpb24gZmFpbGVkLiAgR3JhcGhpY3MgIgogCQkJICJwZXJmb3JtYW5jZSBtYXkgc3VmZmVyLlxuIik7CiAJfQogCkBAIC0xMTIyLDcgKzExMjcsNyBAQAogCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgewogCQlyZXQgPSBpOTE1X2luaXRfcGh5c19od3MoZGV2KTsKIAkJaWYgKHJldCAhPSAwKQotCQkJZ290byBvdXRfcm1tYXA7CisJCQlnb3RvIG91dF9pb21hcGZyZWU7CiAJfQogCiAJLyogT24gdGhlIDk0NUcvR00sIHRoZSBjaGlwc2V0IHJlcG9ydHMgdGhlIE1TSSBjYXBhYmlsaXR5IG9uIHRoZQpAQCAtMTE2MSw2ICsxMTY2LDggQEAKIAogCXJldHVybiAwOwogCitvdXRfaW9tYXBmcmVlOgorCWlvX21hcHBpbmdfZnJlZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcpOwogb3V0X3JtbWFwOgogCWlvdW5tYXAoZGV2X3ByaXYtPnJlZ3MpOwogZnJlZV9wcml2OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggYWFjMTJlZS4uYjI5M2VmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0yNyw2ICsyNyw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKQEAgLTY2LDYgKzY3LDE0IEBACiAKIAlpOTE1X3NhdmVfc3RhdGUoZGV2KTsKIAorCS8qIElmIEtNUyBpcyBhY3RpdmUsIHdlIGRvIHRoZSBsZWF2ZXZ0IHN0dWZmIGhlcmUgKi8KKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlpZiAoaTkxNV9nZW1faWRsZShkZXYpKQorCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsCisJCQkJIkdFTSBpZGxlIGZhaWxlZCwgcmVzdW1lIG1heSBmYWlsXG4iKTsKKwkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwl9CisKIAlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewpAQCAtNzksNiArODgsOSBAQAogCiBzdGF0aWMgaW50IGk5MTVfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0ID0gMDsKKwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGRldi0+cGRldik7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldi0+cGRldikpCkBAIC04OSwxMSArMTAxLDI2IEBACiAKIAlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7CiAKLQlyZXR1cm4gMDsKKwkvKiBLTVMgRW50ZXJWVCBlcXVpdmFsZW50ICovCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMDsKKworCQlyZXQgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0ID0gLTE7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJCWRybV9pcnFfaW5zdGFsbChkZXYpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaTkxNV9nZW1fdm1fb3BzID0gewogCS5mYXVsdCA9IGk5MTVfZ2VtX2ZhdWx0LAorCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNzMyNTM2My4uZDZjYzk4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xODQsNiArMTg0LDggQEAKIAl1bnNpZ25lZCBpbnQgbHZkc19kaXRoZXI6MTsKIAl1bnNpZ25lZCBpbnQgbHZkc192YnQ6MTsKIAl1bnNpZ25lZCBpbnQgaW50X2NydF9zdXBwb3J0OjE7CisJdW5zaWduZWQgaW50IGx2ZHNfdXNlX3NzYzoxOworCWludCBsdmRzX3NzY19mcmVxOwogCiAJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyBmZW5jZV9yZWdzWzE2XTsgLyogYXNzdW1lIDk2NSAqLwogCWludCBmZW5jZV9yZWdfc3RhcnQ7IC8qIDQgaWYgdXNlcmxhbmQgaGFzbid0IGlvY3RsJ2QgdXMgeWV0ICovCkBAIC0yNzcsNyArMjc5LDYgQEAKIAl1OCBzYXZlQVJfSU5ERVg7CiAJdTggc2F2ZUFSWzIxXTsKIAl1OCBzYXZlREFDTUFTSzsKLQl1OCBzYXZlREFDREFUQVsyNTYqM107IC8qIDI1NiAzLWJ5dGUgY29sb3JzICovCiAJdTggc2F2ZUNSWzM3XTsKIAogCXN0cnVjdCB7CkBAIC00NTUsNiArNDU2LDEyIEBACiAKIAkvKiogZm9yIHBoeSBhbGxvY2F0ZWQgb2JqZWN0cyAqLwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcGh5c19vYmplY3QgKnBoeXNfb2JqOworCisJLyoqCisJICogVXNlZCBmb3IgY2hlY2tpbmcgdGhlIG9iamVjdCBkb2Vzbid0IGFwcGVhciBtb3JlIHRoYW4gb25jZQorCSAqIGluIGFuIGV4ZWNidWZmZXIgb2JqZWN0IGxpc3QuCisJICovCisJaW50IGluX2V4ZWNidWZmZXI7CiB9OwogCiAvKioKQEAgLTYxNiw2ICs2MjMsNyBAQAogdm9pZCBpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQgaTkxNV9nZW1fZG9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2ludCBpOTE1X2dlbV9pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CiBpbnQgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCQkJCSAgICAgIGludCB3cml0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCA4MTg1NzY2Li4zNzQyN2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTM0LDEwICszNCw2IEBACiAKICNkZWZpbmUgSTkxNV9HRU1fR1BVX0RPTUFJTlMJKH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8IEk5MTVfR0VNX0RPTUFJTl9HVFQpKQogCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X3NldF90b19ncHVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgdWludDMyX3QgcmVhZF9kb21haW5zLAotCQkJCSAgdWludDMyX3Qgd3JpdGVfZG9tYWluKTsKIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKQEAgLTYwNyw4ICs2MDMsNiBAQAogCWNhc2UgLUVBR0FJTjoKIAkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAljYXNlIC1FRkFVTFQ6Ci0JY2FzZSAtRUJVU1k6Ci0JCURSTV9FUlJPUigiY2FuJ3QgaW5zZXJ0IHBmbj8/ICBmYXVsdCBvciBidXN5Li4uXG4iKTsKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAlkZWZhdWx0OgogCQlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwpAQCAtNjg0LDYgKzY3OCwzMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9mcmVlX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX21tICptbSA9IGRldi0+bW1fcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX21hcF9saXN0ICpsaXN0OworCisJbGlzdCA9ICZvYmotPm1hcF9saXN0OworCWRybV9odF9yZW1vdmVfaXRlbSgmbW0tPm9mZnNldF9oYXNoLCAmbGlzdC0+aGFzaCk7CisKKwlpZiAobGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSkgeworCQlkcm1fbW1fcHV0X2Jsb2NrKGxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpOworCQlsaXN0LT5maWxlX29mZnNldF9ub2RlID0gTlVMTDsKKwl9CisKKwlpZiAobGlzdC0+bWFwKSB7CisJCWRybV9mcmVlKGxpc3QtPm1hcCwgc2l6ZW9mKHN0cnVjdCBkcm1fbWFwKSwgRFJNX01FTV9EUklWRVIpOworCQlsaXN0LT5tYXAgPSBOVUxMOworCX0KKworCW9ial9wcml2LT5tbWFwX29mZnNldCA9IDA7Cit9CisKIC8qKgogICogaTkxNV9nZW1fZ2V0X2d0dF9hbGlnbm1lbnQgLSByZXR1cm4gcmVxdWlyZWQgR1RUIGFsaWdubWVudCBmb3IgYW4gb2JqZWN0CiAgKiBAb2JqOiBvYmplY3QgdG8gY2hlY2sKQEAgLTc1OCw4ICs3NzYsMTEgQEAKIAogCWlmICghb2JqX3ByaXYtPm1tYXBfb2Zmc2V0KSB7CiAJCXJldCA9IGk5MTVfZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCiAJYXJncy0+b2Zmc2V0ID0gb2JqX3ByaXYtPm1tYXBfb2Zmc2V0OwpAQCAtMTAzMCw2ICsxMDUxLDkgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBzZXFubzsKIAorCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKQorCQlyZXR1cm47CisKIAlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSkgewpAQCAtMTQ1Miw3ICsxNDc2LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCWludCByZWdudW0gPSBvYmpfcHJpdi0+ZmVuY2VfcmVnOwogCWludCB0aWxlX3dpZHRoOwotCXVpbnQzMl90IHZhbDsKKwl1aW50MzJfdCBmZW5jZV9yZWcsIHZhbDsKIAl1aW50MzJfdCBwaXRjaF92YWw7CiAKIAlpZiAoKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk5MTVfRkVOQ0VfU1RBUlRfTUFTSykgfHwKQEAgLTE0NzksNyArMTUwMywxMSBAQAogCXZhbCB8PSBwaXRjaF92YWwgPDwgSTgzMF9GRU5DRV9QSVRDSF9TSElGVDsKIAl2YWwgfD0gSTgzMF9GRU5DRV9SRUdfVkFMSUQ7CiAKLQlJOTE1X1dSSVRFKEZFTkNFX1JFR184MzBfMCArIChyZWdudW0gKiA0KSwgdmFsKTsKKwlpZiAocmVnbnVtIDwgOCkKKwkJZmVuY2VfcmVnID0gRkVOQ0VfUkVHXzgzMF8wICsgKHJlZ251bSAqIDQpOworCWVsc2UKKwkJZmVuY2VfcmVnID0gRkVOQ0VfUkVHXzk0NV84ICsgKChyZWdudW0gLSA4KSAqIDQpOworCUk5MTVfV1JJVEUoZmVuY2VfcmVnLCB2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBpODMwX3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWcpCkBAIC0xNTMzLDcgKzE1NjEsOCBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWcgPSBOVUxMOwotCWludCBpLCByZXQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZF9vYmpfcHJpdiA9IE5VTEw7CisJaW50IGksIHJldCwgYXZhaWw7CiAKIAlzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgewogCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKQEAgLTE1NTYsMjUgKzE1ODUsNDYgQEAKIAl9CiAKIAkvKiBGaXJzdCB0cnkgdG8gZmluZCBhIGZyZWUgcmVnICovCit0cnlfYWdhaW46CisJYXZhaWwgPSAwOwogCWZvciAoaSA9IGRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQ7IGkgPCBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3M7IGkrKykgewogCQlyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV07CiAJCWlmICghcmVnLT5vYmopCiAJCQlicmVhazsKKworCQlvbGRfb2JqX3ByaXYgPSByZWctPm9iai0+ZHJpdmVyX3ByaXZhdGU7CisJCWlmICghb2xkX29ial9wcml2LT5waW5fY291bnQpCisJCSAgICBhdmFpbCsrOwogCX0KIAogCS8qIE5vbmUgYXZhaWxhYmxlLCB0cnkgdG8gc3RlYWwgb25lIG9yIHdhaXQgZm9yIGEgdXNlciB0byBmaW5pc2ggKi8KIAlpZiAoaSA9PSBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3MpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZF9vYmpfcHJpdiA9IE5VTEw7CisJCXVpbnQzMl90IHNlcW5vID0gZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vOwogCQlsb2ZmX3Qgb2Zmc2V0OwogCi10cnlfYWdhaW46Ci0JCS8qIENvdWxkIHRyeSB0byB1c2UgTFJVIGhlcmUgaW5zdGVhZC4uLiAqLworCQlpZiAoYXZhaWwgPT0gMCkKKwkJCXJldHVybiAtRU5PTUVNOworCiAJCWZvciAoaSA9IGRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQ7CiAJCSAgICAgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7CisJCQl1aW50MzJfdCB0aGlzX3NlcW5vOworCiAJCQlyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV07CiAJCQlvbGRfb2JqX3ByaXYgPSByZWctPm9iai0+ZHJpdmVyX3ByaXZhdGU7Ci0JCQlpZiAoIW9sZF9vYmpfcHJpdi0+cGluX2NvdW50KQorCisJCQlpZiAob2xkX29ial9wcml2LT5waW5fY291bnQpCisJCQkJY29udGludWU7CisKKwkJCS8qIGk5MTUgdXNlcyBmZW5jZXMgZm9yIEdQVSBhY2Nlc3MgdG8gdGlsZWQgYnVmZmVycyAqLworCQkJaWYgKElTX0k5NjVHKGRldikgfHwgIW9sZF9vYmpfcHJpdi0+YWN0aXZlKQogCQkJCWJyZWFrOworCisJCQkvKiBmaW5kIHRoZSBzZXFubyBvZiB0aGUgZmlyc3QgYXZhaWxhYmxlIGZlbmNlICovCisJCQl0aGlzX3NlcW5vID0gb2xkX29ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubzsKKwkJCWlmICh0aGlzX3NlcW5vICE9IDAgJiYKKwkJCSAgICByZWctPm9iai0+d3JpdGVfZG9tYWluID09IDAgJiYKKwkJCSAgICBpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgdGhpc19zZXFubykpCisJCQkJc2Vxbm8gPSB0aGlzX3NlcW5vOwogCQl9CiAKIAkJLyoKQEAgLTE1ODIsMTUgKzE2MzIsMjUgQEAKIAkJICogb2JqZWN0cyB0byBmaW5pc2ggYmVmb3JlIHRyeWluZyBhZ2Fpbi4KIAkJICovCiAJCWlmIChpID09IGRldl9wcml2LT5udW1fZmVuY2VfcmVncykgewotCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHJlZy0+b2JqLCAwKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlXQVJOKHJldCAhPSAtRVJFU1RBUlRTWVMsCi0JCQkJICAgICAic3dpdGNoIHRvIEdUVCBkb21haW4gZmFpbGVkOiAlZFxuIiwgcmV0KTsKLQkJCQlyZXR1cm4gcmV0OworCQkJaWYgKHNlcW5vID09IGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubykgeworCQkJCWk5MTVfZ2VtX2ZsdXNoKGRldiwKKwkJCQkJICAgICAgIEk5MTVfR0VNX0dQVV9ET01BSU5TLAorCQkJCQkgICAgICAgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOworCQkJCXNlcW5vID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsCisJCQkJCQkJIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKKwkJCQlpZiAoc2Vxbm8gPT0gMCkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CisKKwkJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgc2Vxbm8pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQkJZ290byB0cnlfYWdhaW47CiAJCX0KIAorCQlCVUdfT04ob2xkX29ial9wcml2LT5hY3RpdmUgfHwKKwkJICAgICAgIChyZWctPm9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpKTsKKwogCQkvKgogCQkgKiBaYXAgdGhpcyB2aXJ0dWFsIG1hcHBpbmcgc28gd2UgY2FuIHNldCB1cCBhIGZlbmNlIGFnYWluCiAJCSAqIGZvciB0aGlzIG9iamVjdCBuZXh0IHRpbWUgd2UgbmVlZCBpdC4KQEAgLTE2MzEsOCArMTY5MSwxNyBAQAogCiAJaWYgKElTX0k5NjVHKGRldikpCiAJCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfOTY1XzAgKyAob2JqX3ByaXYtPmZlbmNlX3JlZyAqIDgpLCAwKTsKLQllbHNlCi0JCUk5MTVfV1JJVEUoRkVOQ0VfUkVHXzgzMF8wICsgKG9ial9wcml2LT5mZW5jZV9yZWcgKiA0KSwgMCk7CisJZWxzZSB7CisJCXVpbnQzMl90IGZlbmNlX3JlZzsKKworCQlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyA8IDgpCisJCQlmZW5jZV9yZWcgPSBGRU5DRV9SRUdfODMwXzAgKyBvYmpfcHJpdi0+ZmVuY2VfcmVnICogNDsKKwkJZWxzZQorCQkJZmVuY2VfcmVnID0gRkVOQ0VfUkVHXzk0NV84ICsgKG9ial9wcml2LT5mZW5jZV9yZWcgLQorCQkJCQkJICAgICAgIDgpICogNDsKKworCQlJOTE1X1dSSVRFKGZlbmNlX3JlZywgMCk7CisJfQogCiAJZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqX3ByaXYtPmZlbmNlX3JlZ10ub2JqID0gTlVMTDsKIAlvYmpfcHJpdi0+ZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKQEAgLTE5OTYsMzAgKzIwNjUsMjggQEAKICAqCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2gKICAqLwogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCQkgIHVpbnQzMl90IHJlYWRfZG9tYWlucywKLQkJCQkgIHVpbnQzMl90IHdyaXRlX2RvbWFpbikKK2k5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZQkJKmRldiA9IG9iai0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJdWludDMyX3QJCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSAwOwogCXVpbnQzMl90CQkJZmx1c2hfZG9tYWlucyA9IDA7CiAKLQlCVUdfT04ocmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Ci0JQlVHX09OKHdyaXRlX2RvbWFpbiA9PSBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwlCVUdfT04ob2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpOworCUJVR19PTihvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9DUFUpOwogCiAjaWYgV0FUQ0hfQlVGCiAJRFJNX0lORk8oIiVzOiBvYmplY3QgJXAgcmVhZCAlMDh4IC0+ICUwOHggd3JpdGUgJTA4eCAtPiAlMDh4XG4iLAogCQkgX19mdW5jX18sIG9iaiwKLQkJIG9iai0+cmVhZF9kb21haW5zLCByZWFkX2RvbWFpbnMsCi0JCSBvYmotPndyaXRlX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsKKwkJIG9iai0+cmVhZF9kb21haW5zLCBvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zLAorCQkgb2JqLT53cml0ZV9kb21haW4sIG9iai0+cGVuZGluZ193cml0ZV9kb21haW4pOwogI2VuZGlmCiAJLyoKIAkgKiBJZiB0aGUgb2JqZWN0IGlzbid0IG1vdmluZyB0byBhIG5ldyB3cml0ZSBkb21haW4sCiAJICogbGV0IHRoZSBvYmplY3Qgc3RheSBpbiBtdWx0aXBsZSByZWFkIGRvbWFpbnMKIAkgKi8KLQlpZiAod3JpdGVfZG9tYWluID09IDApCi0JCXJlYWRfZG9tYWlucyB8PSBvYmotPnJlYWRfZG9tYWluczsKKwlpZiAob2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9PSAwKQorCQlvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IG9iai0+cmVhZF9kb21haW5zOwogCWVsc2UKIAkJb2JqX3ByaXYtPmRpcnR5ID0gMTsKIApAQCAtMjAyOSwxNSArMjA5NiwxNyBAQAogCSAqIGFueSByZWFkIGRvbWFpbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIG9sZAogCSAqIHdyaXRlIGRvbWFpbgogCSAqLwotCWlmIChvYmotPndyaXRlX2RvbWFpbiAmJiBvYmotPndyaXRlX2RvbWFpbiAhPSByZWFkX2RvbWFpbnMpIHsKKwlpZiAob2JqLT53cml0ZV9kb21haW4gJiYKKwkgICAgb2JqLT53cml0ZV9kb21haW4gIT0gb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucykgewogCQlmbHVzaF9kb21haW5zIHw9IG9iai0+d3JpdGVfZG9tYWluOwotCQlpbnZhbGlkYXRlX2RvbWFpbnMgfD0gcmVhZF9kb21haW5zICYgfm9iai0+d3JpdGVfZG9tYWluOworCQlpbnZhbGlkYXRlX2RvbWFpbnMgfD0KKwkJCW9iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgJiB+b2JqLT53cml0ZV9kb21haW47CiAJfQogCS8qCiAJICogSW52YWxpZGF0ZSBhbnkgcmVhZCBjYWNoZXMgd2hpY2ggbWF5IGhhdmUKIAkgKiBzdGFsZSBkYXRhLiBUaGF0IGlzLCBhbnkgbmV3IHJlYWQgZG9tYWlucy4KIAkgKi8KLQlpbnZhbGlkYXRlX2RvbWFpbnMgfD0gcmVhZF9kb21haW5zICYgfm9iai0+cmVhZF9kb21haW5zOworCWludmFsaWRhdGVfZG9tYWlucyB8PSBvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zICYgfm9iai0+cmVhZF9kb21haW5zOwogCWlmICgoZmx1c2hfZG9tYWlucyB8IGludmFsaWRhdGVfZG9tYWlucykgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CiAjaWYgV0FUQ0hfQlVGCiAJCURSTV9JTkZPKCIlczogQ1BVIGRvbWFpbiBmbHVzaCAlMDh4IGludmFsaWRhdGUgJTA4eFxuIiwKQEAgLTIwNDYsOSArMjExNSwxNSBAQAogCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOwogCX0KIAotCWlmICgod3JpdGVfZG9tYWluIHwgZmx1c2hfZG9tYWlucykgIT0gMCkKLQkJb2JqLT53cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW47Ci0Jb2JqLT5yZWFkX2RvbWFpbnMgPSByZWFkX2RvbWFpbnM7CisJLyogVGhlIGFjdHVhbCBvYmotPndyaXRlX2RvbWFpbiB3aWxsIGJlIHVwZGF0ZWQgd2l0aAorCSAqIHBlbmRpbmdfd3JpdGVfZG9tYWluIGFmdGVyIHdlIGVtaXQgdGhlIGFjY3VtdWxhdGVkIGZsdXNoIGZvciBhbGwKKwkgKiBvZiBvdXIgZG9tYWluIGNoYW5nZXMgaW4gZXhlY2J1ZmZlcnMgKHdoaWNoIGNsZWFycyBvYmplY3RzJworCSAqIHdyaXRlX2RvbWFpbnMpLiAgU28gaWYgd2UgaGF2ZSBhIGN1cnJlbnQgd3JpdGUgZG9tYWluIHRoYXQgd2UKKwkgKiBhcmVuJ3QgY2hhbmdpbmcsIHNldCBwZW5kaW5nX3dyaXRlX2RvbWFpbiB0byB0aGF0LgorCSAqLworCWlmIChmbHVzaF9kb21haW5zID09IDAgJiYgb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9PSAwKQorCQlvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CisJb2JqLT5yZWFkX2RvbWFpbnMgPSBvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zOwogCiAJZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfD0gaW52YWxpZGF0ZV9kb21haW5zOwogCWRldi0+Zmx1c2hfZG9tYWlucyB8PSBmbHVzaF9kb21haW5zOwpAQCAtMjI1MSw2ICsyMzI2LDggQEAKIAkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCwKIAkJCQkgIHJlbG9jLnJlYWRfZG9tYWlucywKIAkJCQkgIHJlbG9jLndyaXRlX2RvbWFpbik7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMjQzNyw2ICsyNTE0LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QgPSBOVUxMOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhdGNoX29iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CiAJaW50IHJldCwgaSwgcGlubmVkID0gMDsKIAl1aW50NjRfdCBleGVjX29mZnNldDsKIAl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWluczsKQEAgLTI0ODAsMTMgKzI1NTgsMTUgQEAKIAlpZiAoZGV2X3ByaXYtPm1tLndlZGdlZCkgewogCQlEUk1fRVJST1IoIkV4ZWNidWYgd2hpbGUgd2VkZ2VkXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCXJldHVybiAtRUlPOworCQlyZXQgPSAtRUlPOworCQlnb3RvIHByZV9tdXRleF9lcnI7CiAJfQogCiAJaWYgKGRldl9wcml2LT5tbS5zdXNwZW5kZWQpIHsKIAkJRFJNX0VSUk9SKCJFeGVjYnVmIHdoaWxlIFZULXN3aXRjaGVkLlxuIik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcHJlX211dGV4X2VycjsKIAl9CiAKIAkvKiBMb29rIHVwIG9iamVjdCBoYW5kbGVzICovCkBAIC0yNDk5LDYgKzI1NzksMTUgQEAKIAkJCXJldCA9IC1FQkFERjsKIAkJCWdvdG8gZXJyOwogCQl9CisKKwkJb2JqX3ByaXYgPSBvYmplY3RfbGlzdFtpXS0+ZHJpdmVyX3ByaXZhdGU7CisJCWlmIChvYmpfcHJpdi0+aW5fZXhlY2J1ZmZlcikgeworCQkJRFJNX0VSUk9SKCJPYmplY3QgJXAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBvYmplY3QgbGlzdFxuIiwKKwkJCQkgICBvYmplY3RfbGlzdFtpXSk7CisJCQlyZXQgPSAtRUJBREY7CisJCQlnb3RvIGVycjsKKwkJfQorCQlvYmpfcHJpdi0+aW5fZXhlY2J1ZmZlciA9IHRydWU7CiAJfQogCiAJLyogUGluIGFuZCByZWxvY2F0ZSAqLwpAQCAtMjU1NCw5ICsyNjQzLDcgQEAKIAkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmplY3RfbGlzdFtpXTsKIAogCQkvKiBDb21wdXRlIG5ldyBncHUgZG9tYWlucyBhbmQgdXBkYXRlIGludmFsaWRhdGUvZmx1c2ggKi8KLQkJaTkxNV9nZW1fb2JqZWN0X3NldF90b19ncHVfZG9tYWluKG9iaiwKLQkJCQkJCSAgb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucywKLQkJCQkJCSAgb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CisJCWk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3B1X2RvbWFpbihvYmopOwogCX0KIAogCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKQEAgLTI1NzUsNiArMjY2MiwxMiBAQAogCQkJKHZvaWQpaTkxNV9hZGRfcmVxdWVzdChkZXYsIGRldi0+Zmx1c2hfZG9tYWlucyk7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07CisKKwkJb2JqLT53cml0ZV9kb21haW4gPSBvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluOworCX0KKwogCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKIAogI2lmIFdBVENIX0NPSEVSRU5DWQpAQCAtMjYzMiwyNCArMjcyNSwzMiBAQAogCiAJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOwogCi0JLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCi0JcmV0ID0gY29weV90b191c2VyKChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKLQkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAotCQkJICAgZXhlY19saXN0LAotCQkJICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKLQlpZiAocmV0KQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMgZW50cmllcyAiCi0JCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKLQkJCSAgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKIGVycjoKIAlmb3IgKGkgPSAwOyBpIDwgcGlubmVkOyBpKyspCiAJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmplY3RfbGlzdFtpXSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCWlmIChvYmplY3RfbGlzdFtpXSkgeworCQkJb2JqX3ByaXYgPSBvYmplY3RfbGlzdFtpXS0+ZHJpdmVyX3ByaXZhdGU7CisJCQlvYmpfcHJpdi0+aW5fZXhlY2J1ZmZlciA9IGZhbHNlOworCQl9CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iamVjdF9saXN0W2ldKTsKKwl9CiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAorCWlmICghcmV0KSB7CisJCS8qIENvcHkgdGhlIG5ldyBidWZmZXIgb2Zmc2V0cyBiYWNrIHRvIHRoZSB1c2VyJ3MgZXhlYyBsaXN0LiAqLworCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJCSAgIGV4ZWNfbGlzdCwKKwkJCQkgICBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOworCQlpZiAocmV0KQorCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY29weSAlZCBleGVjIGVudHJpZXMgIgorCQkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAorCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOworCX0KKwogcHJlX211dGV4X2VycjoKIAlkcm1fZnJlZShvYmplY3RfbGlzdCwgc2l6ZW9mKCpvYmplY3RfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQsCiAJCSBEUk1fTUVNX0RSSVZFUik7CkBAIC0yNjcxLDE3ICsyNzcyLDI0IEBACiAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChvYmosIGFsaWdubWVudCk7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJaWYgKHJldCAhPSAtRUJVU1kgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUykKLQkJCQlEUk1fRVJST1IoIkZhaWx1cmUgdG8gYmluZDogJWQiLCByZXQpOworCQkJCURSTV9FUlJPUigiRmFpbHVyZSB0byBiaW5kOiAlZFxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJLyoKLQkJICogUHJlLTk2NSBjaGlwcyBuZWVkIGEgZmVuY2UgcmVnaXN0ZXIgc2V0IHVwIGluIG9yZGVyIHRvCi0JCSAqIHByb3Blcmx5IGhhbmRsZSB0aWxlZCBzdXJmYWNlcy4KLQkJICovCi0JCWlmICghSVNfSTk2NUcoZGV2KSAmJgotCQkgICAgb2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FICYmCi0JCSAgICBvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkKLQkJCWk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2VfcmVnKG9iaiwgdHJ1ZSk7CisJfQorCS8qCisJICogUHJlLTk2NSBjaGlwcyBuZWVkIGEgZmVuY2UgcmVnaXN0ZXIgc2V0IHVwIGluIG9yZGVyIHRvCisJICogcHJvcGVybHkgaGFuZGxlIHRpbGVkIHN1cmZhY2VzLgorCSAqLworCWlmICghSVNfSTk2NUcoZGV2KSAmJgorCSAgICBvYmpfcHJpdi0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUgJiYKKwkgICAgb2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcob2JqLCB0cnVlKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlpZiAocmV0ICE9IC1FQlVTWSAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJCURSTV9FUlJPUigiRmFpbHVyZSB0byBpbnN0YWxsIGZlbmNlOiAlZFxuIiwKKwkJCQkJICByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQogCX0KIAlvYmpfcHJpdi0+cGluX2NvdW50Kys7CiAKQEAgLTI3NTMsNiArMjg2MSw3IEBACiAJaWYgKG9ial9wcml2LT5waW5fZmlscCAhPSBOVUxMICYmIG9ial9wcml2LT5waW5fZmlscCAhPSBmaWxlX3ByaXYpIHsKIAkJRFJNX0VSUk9SKCJBbHJlYWR5IHBpbm5lZCBpbiBpOTE1X2dlbV9waW5faW9jdGwoKTogJWRcbiIsCiAJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yODMzLDYgKzI5NDIsMTMgQEAKIAkJcmV0dXJuIC1FQkFERjsKIAl9CiAKKwkvKiBVcGRhdGUgdGhlIGFjdGl2ZSBsaXN0IGZvciB0aGUgaGFyZHdhcmUncyBjdXJyZW50IHBvc2l0aW9uLgorCSAqIE90aGVyd2lzZSB0aGlzIG9ubHkgdXBkYXRlcyBvbiBhIGRlbGF5ZWQgdGltZXIgb3Igd2hlbiBpcnFzIGFyZQorCSAqIGFjdHVhbGx5IHVubWFza2VkLCBhbmQgb3VyIHdvcmtpbmcgc2V0IGVuZHMgdXAgYmVpbmcgbGFyZ2VyIHRoYW4KKwkgKiByZXF1aXJlZC4KKwkgKi8KKwlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKKwogCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAkvKiBEb24ndCBjb3VudCBiZWluZyBvbiB0aGUgZmx1c2hpbmcgbGlzdCBhZ2FpbnN0IHRoZSBvYmplY3QgYmVpbmcKIAkgKiBkb25lLiAgT3RoZXJ3aXNlLCBhIGJ1ZmZlciBsZWZ0IG9uIHRoZSBmbHVzaGluZyBsaXN0IGJ1dCBub3QgZ2V0dGluZwpAQCAtMjg4NSw5ICszMDAxLDYgQEAKIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCXN0cnVjdCBkcm1fZ2VtX21tICptbSA9IGRldi0+bW1fcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX21hcF9saXN0ICpsaXN0OwotCXN0cnVjdCBkcm1fbWFwICptYXA7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAogCXdoaWxlIChvYmpfcHJpdi0+cGluX2NvdW50ID4gMCkKQEAgLTI4OTgsMTkgKzMwMTEsNyBAQAogCiAJaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOwogCi0JbGlzdCA9ICZvYmotPm1hcF9saXN0OwotCWRybV9odF9yZW1vdmVfaXRlbSgmbW0tPm9mZnNldF9oYXNoLCAmbGlzdC0+aGFzaCk7Ci0KLQlpZiAobGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSkgewotCQlkcm1fbW1fcHV0X2Jsb2NrKGxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpOwotCQlsaXN0LT5maWxlX29mZnNldF9ub2RlID0gTlVMTDsKLQl9Ci0KLQltYXAgPSBsaXN0LT5tYXA7Ci0JaWYgKG1hcCkgewotCQlkcm1fZnJlZShtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9EUklWRVIpOwotCQlsaXN0LT5tYXAgPSBOVUxMOwotCX0KKwlpOTE1X2dlbV9mcmVlX21tYXBfb2Zmc2V0KG9iaik7CiAKIAlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQsIDEsIERSTV9NRU1fRFJJVkVSKTsKIAlkcm1fZnJlZShvYmotPmRyaXZlcl9wcml2YXRlLCAxLCBEUk1fTUVNX0RSSVZFUik7CkBAIC0yOTQ5LDcgKzMwNTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50CitpbnQKIGk5MTVfZ2VtX2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTMwOTUsNiArMzE5Niw3IEBACiAJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9PSBOVUxMKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBzdGF0dXMgcGFnZS5cbiIpOwogCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTMxMDcsNiArMzIwOSwzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fY2xlYW51cF9od3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlpZiAoZGV2X3ByaXYtPmh3c19vYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJb2JqID0gZGV2X3ByaXYtPmh3c19vYmo7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJa3VubWFwKG9ial9wcml2LT5wYWdlX2xpc3RbMF0pOworCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJZGV2X3ByaXYtPmh3c19vYmogPSBOVUxMOworCisJbWVtc2V0KCZkZXZfcHJpdi0+aHdzX21hcCwgMCwgc2l6ZW9mKGRldl9wcml2LT5od3NfbWFwKSk7CisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gTlVMTDsKKworCS8qIFdyaXRlIGhpZ2ggYWRkcmVzcyBpbnRvIEhXU19QR0Egd2hlbiBkaXNhYmxpbmcuICovCisJSTkxNV9XUklURShIV1NfUEdBLCAweDFmZmZmMDAwKTsKK30KKwogaW50CiBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKQEAgLTMxMjQsNiArMzI1MSw3IEBACiAJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCAxMjggKiAxMDI0KTsKIAlpZiAob2JqID09IE5VTEwpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmluZ2J1ZmZlclxuIik7CisJCWk5MTVfZ2VtX2NsZWFudXBfaHdzKGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CkBAIC0zMTMxLDYgKzMyNTksNyBAQAogCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCA0MDk2KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJaTkxNV9nZW1fY2xlYW51cF9od3MoZGV2KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTMxNDgsNyArMzI3Nyw5IEBACiAJaWYgKHJpbmctPm1hcC5oYW5kbGUgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgcmluZ2J1ZmZlci5cbiIpOwogCQltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCWk5MTVfZ2VtX2NsZWFudXBfaHdzKGRldik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyaW5nLT5yaW5nX29iaiA9IG9iajsKQEAgLTMyMjgsMjAgKzMzNTksNyBAQAogCWRldl9wcml2LT5yaW5nLnJpbmdfb2JqID0gTlVMTDsKIAltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKIAotCWlmIChkZXZfcHJpdi0+aHdzX29iaiAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmh3c19vYmo7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7Ci0KLQkJa3VubWFwKG9ial9wcml2LT5wYWdlX2xpc3RbMF0pOwotCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQkJZGV2X3ByaXYtPmh3c19vYmogPSBOVUxMOwotCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKLQkJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gTlVMTDsKLQotCQkvKiBXcml0ZSBoaWdoIGFkZHJlc3MgaW50byBIV1NfUEdBIHdoZW4gZGlzYWJsaW5nLiAqLwotCQlJOTE1X1dSSVRFKEhXU19QR0EsIDB4MWZmZmYwMDApOwotCX0KKwlpOTE1X2dlbV9jbGVhbnVwX2h3cyhkZXYpOwogfQogCiBpbnQKQEAgLTM0OTcsNyArMzYxNSw3IEBACiAJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOwogCW9ial9hZGRyID0gb2JqX3ByaXYtPnBoeXNfb2JqLT5oYW5kbGUtPnZhZGRyICsgYXJncy0+b2Zmc2V0OwogCi0JRFJNX0VSUk9SKCJvYmpfYWRkciAlcCwgJWxsZFxuIiwgb2JqX2FkZHIsIGFyZ3MtPnNpemUpOworCURSTV9ERUJVRygib2JqX2FkZHIgJXAsICVsbGRcbiIsIG9ial9hZGRyLCBhcmdzLT5zaXplKTsKIAlyZXQgPSBjb3B5X2Zyb21fdXNlcihvYmpfYWRkciwgdXNlcl9kYXRhLCBhcmdzLT5zaXplKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKaW5kZXggZmExNjg1Yy4uN2ZiNDE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKQEAgLTI5OSw5ICsyOTksOCBAQAogCX0KIAlvYmpfcHJpdi0+c3RyaWRlID0gYXJncy0+c3RyaWRlOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNDAsOSArMzM5LDggQEAKIAkJRFJNX0VSUk9SKCJ1bmtub3duIHRpbGluZyBtb2RlXG4iKTsKIAl9CiAKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDU0OGZmMmMuLjg3YjZiNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMzgzLDEyICszODMsMTMgQEAKIAlkcm1faTkxNV9pcnFfZW1pdF90ICplbWl0ID0gZGF0YTsKIAlpbnQgcmVzdWx0OwogCi0JUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwotCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJlc3VsdCA9IGk5MTVfZW1pdF9pcnEoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDlkNjUzOWEuLjkwNjAwZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMTg0LDYgKzE4NCw3IEBACiAgKiBGZW5jZSByZWdpc3RlcnMKICAqLwogI2RlZmluZSBGRU5DRV9SRUdfODMwXzAJCQkweDIwMDAKKyNkZWZpbmUgRkVOQ0VfUkVHXzk0NV84CQkJMHgzMDAwCiAjZGVmaW5lICAgSTgzMF9GRU5DRV9TVEFSVF9NQVNLCQkweDA3ZjgwMDAwCiAjZGVmaW5lICAgSTgzMF9GRU5DRV9USUxJTkdfWV9TSElGVAkxMgogI2RlZmluZSAgIEk4MzBfRkVOQ0VfU0laRV9CSVRTKHNpemUpCSgoZmZzKChzaXplKSA+PiAxOSkgLSAxKSA8PCA4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwppbmRleCA1ZDg0MDI3Li5kNjY5Y2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwpAQCAtMTE5LDExICsxMTksNiBAQAogCiAJLyogVkdBIGNvbG9yIHBhbGV0dGUgcmVnaXN0ZXJzICovCiAJZGV2X3ByaXYtPnNhdmVEQUNNQVNLID0gSTkxNV9SRUFEOChWR0FfREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCUk5MTVfV1JJVEU4KFZHQV9EQUNSWCwgMCk7Ci0JLyogUmVhZCAzIGJ5dGVzIG9mIGNvbG9yIGRhdGEgZnJvbSBlYWNoIGluZGV4ICovCi0JZm9yIChpID0gMDsgaSA8IDI1NiAqIDM7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVEQUNEQVRBW2ldID0gSTkxNV9SRUFEOChWR0FfREFDREFUQSk7CiAKIAkvKiBNU1IgYml0cyAqLwogCWRldl9wcml2LT5zYXZlTVNSID0gSTkxNV9SRUFEOChWR0FfTVNSX1JFQUQpOwpAQCAtMjI1LDEyICsyMjAsNiBAQAogCiAJLyogVkdBIGNvbG9yIHBhbGV0dGUgcmVnaXN0ZXJzICovCiAJSTkxNV9XUklURTgoVkdBX0RBQ01BU0ssIGRldl9wcml2LT5zYXZlREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCUk5MTVfV1JJVEU4KFZHQV9EQUNXWCwgMCk7Ci0JLyogUmVhZCAzIGJ5dGVzIG9mIGNvbG9yIGRhdGEgZnJvbSBlYWNoIGluZGV4ICovCi0JZm9yIChpID0gMDsgaSA8IDI1NiAqIDM7IGkrKykKLQkJSTkxNV9XUklURTgoVkdBX0RBQ0RBVEEsIGRldl9wcml2LT5zYXZlREFDREFUQVtpXSk7Ci0KIH0KIAogaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCmluZGV4IDRjYTgyYTAuLmZjMjhlMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKQEAgLTExMSw2ICsxMTEsMTIgQEAKIAlwYW5lbF9maXhlZF9tb2RlLT5jbG9jayA9IGR2b190aW1pbmctPmNsb2NrICogMTA7CiAJcGFuZWxfZml4ZWRfbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwogCisJLyogU29tZSBWQlRzIGhhdmUgYm9ndXMgaC92dG90YWwgdmFsdWVzICovCisJaWYgKHBhbmVsX2ZpeGVkX21vZGUtPmhzeW5jX2VuZCA+IHBhbmVsX2ZpeGVkX21vZGUtPmh0b3RhbCkKKwkJcGFuZWxfZml4ZWRfbW9kZS0+aHRvdGFsID0gcGFuZWxfZml4ZWRfbW9kZS0+aHN5bmNfZW5kICsgMTsKKwlpZiAocGFuZWxfZml4ZWRfbW9kZS0+dnN5bmNfZW5kID4gcGFuZWxfZml4ZWRfbW9kZS0+dnRvdGFsKQorCQlwYW5lbF9maXhlZF9tb2RlLT52dG90YWwgPSBwYW5lbF9maXhlZF9tb2RlLT52c3luY19lbmQgKyAxOworCiAJZHJtX21vZGVfc2V0X25hbWUocGFuZWxfZml4ZWRfbW9kZSk7CiAKIAlkZXZfcHJpdi0+dmJ0X21vZGUgPSBwYW5lbF9maXhlZF9tb2RlOwpAQCAtMTM1LDYgKzE0MSwxNCBAQAogCWlmIChnZW5lcmFsKSB7CiAJCWRldl9wcml2LT5pbnRfdHZfc3VwcG9ydCA9IGdlbmVyYWwtPmludF90dl9zdXBwb3J0OwogCQlkZXZfcHJpdi0+aW50X2NydF9zdXBwb3J0ID0gZ2VuZXJhbC0+aW50X2NydF9zdXBwb3J0OworCQlkZXZfcHJpdi0+bHZkc191c2Vfc3NjID0gZ2VuZXJhbC0+ZW5hYmxlX3NzYzsKKworCQlpZiAoZGV2X3ByaXYtPmx2ZHNfdXNlX3NzYykgeworCQkgIGlmIChJU19JODU1KGRldl9wcml2LT5kZXYpKQorCQkgICAgZGV2X3ByaXYtPmx2ZHNfc3NjX2ZyZXEgPSBnZW5lcmFsLT5zc2NfZnJlcSA/IDY2IDogNDg7CisJCSAgZWxzZQorCQkgICAgZGV2X3ByaXYtPmx2ZHNfc3NjX2ZyZXEgPSBnZW5lcmFsLT5zc2NfZnJlcSA/IDEwMCA6IDk2OworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggYmJkZDcyOS4uYTI4MzQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTAsMTIgKzkwLDEyIEBACiAjZGVmaW5lIEk5WFhfRE9UX01BWAkJIDQwMDAwMAogI2RlZmluZSBJOVhYX1ZDT19NSU4JCTE0MDAwMDAKICNkZWZpbmUgSTlYWF9WQ09fTUFYCQkyODAwMDAwCi0jZGVmaW5lIEk5WFhfTl9NSU4JCSAgICAgIDMKLSNkZWZpbmUgSTlYWF9OX01BWAkJICAgICAgOAorI2RlZmluZSBJOVhYX05fTUlOCQkgICAgICAxCisjZGVmaW5lIEk5WFhfTl9NQVgJCSAgICAgIDYKICNkZWZpbmUgSTlYWF9NX01JTgkJICAgICA3MAogI2RlZmluZSBJOVhYX01fTUFYCQkgICAgMTIwCiAjZGVmaW5lIEk5WFhfTTFfTUlOCQkgICAgIDEwCi0jZGVmaW5lIEk5WFhfTTFfTUFYCQkgICAgIDIwCisjZGVmaW5lIEk5WFhfTTFfTUFYCQkgICAgIDIyCiAjZGVmaW5lIEk5WFhfTTJfTUlOCQkgICAgICA1CiAjZGVmaW5lIEk5WFhfTTJfTUFYCQkgICAgICA5CiAjZGVmaW5lIEk5WFhfUF9TRFZPX0RBQ19NSU4JICAgICAgNQpAQCAtMTg5LDkgKzE4OSw3IEBACiAJcmV0dXJuIGxpbWl0OwogfQogCi0vKiogRGVyaXZlIHRoZSBwaXhlbCBjbG9jayBmb3IgdGhlIGdpdmVuIHJlZmNsayBhbmQgZGl2aXNvcnMgZm9yIDh4eCBjaGlwcy4gKi8KLQotc3RhdGljIHZvaWQgaTh4eF9jbG9jayhpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykKK3N0YXRpYyB2b2lkIGludGVsX2Nsb2NrKGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmNsb2NrKQogewogCWNsb2NrLT5tID0gNSAqIChjbG9jay0+bTEgKyAyKSArIChjbG9jay0+bTIgKyAyKTsKIAljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKQEAgLTE5OSwyNSArMTk3LDYgQEAKIAljbG9jay0+ZG90ID0gY2xvY2stPnZjbyAvIGNsb2NrLT5wOwogfQogCi0vKiogRGVyaXZlIHRoZSBwaXhlbCBjbG9jayBmb3IgdGhlIGdpdmVuIHJlZmNsayBhbmQgZGl2aXNvcnMgZm9yIDl4eCBjaGlwcy4gKi8KLQotc3RhdGljIHZvaWQgaTl4eF9jbG9jayhpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykKLXsKLQljbG9jay0+bSA9IDUgKiAoY2xvY2stPm0xICsgMikgKyAoY2xvY2stPm0yICsgMik7Ci0JY2xvY2stPnAgPSBjbG9jay0+cDEgKiBjbG9jay0+cDI7Ci0JY2xvY2stPnZjbyA9IHJlZmNsayAqIGNsb2NrLT5tIC8gKGNsb2NrLT5uICsgMik7Ci0JY2xvY2stPmRvdCA9IGNsb2NrLT52Y28gLyBjbG9jay0+cDsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfY2xvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlZmNsaywKLQkJCWludGVsX2Nsb2NrX3QgKmNsb2NrKQotewotCWlmIChJU19JOVhYKGRldikpCi0JCWk5eHhfY2xvY2sgKHJlZmNsaywgY2xvY2spOwotCWVsc2UKLQkJaTh4eF9jbG9jayAocmVmY2xrLCBjbG9jayk7Ci19Ci0KIC8qKgogICogUmV0dXJucyB3aGV0aGVyIGFueSBvdXRwdXQgb24gdGhlIHNwZWNpZmllZCBwaXBlIGlzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZQogICovCkBAIC0yMzgsNyArMjE3LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNkZWZpbmUgSU5URUxQbGxJbnZhbGlkKHMpICAgeyAvKiBFcnJvckYgKHMpICovOyByZXR1cm4gZmFsc2U7IH0KKyNkZWZpbmUgSU5URUxQbGxJbnZhbGlkKHMpICAgZG8geyAvKiBEUk1fREVCVUcocyk7ICovIHJldHVybiBmYWxzZTsgfSB3aGlsZSAoMCkKIC8qKgogICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBzZXQgb2YgZGl2aXNvcnMgYXJlIHZhbGlkIGZvciBhIGdpdmVuIHJlZmNsayB3aXRoCiAgKiB0aGUgZ2l2ZW4gY29ubmVjdG9ycy4KQEAgLTMxOCw3ICsyOTcsNyBAQAogCQkJCSAgICAgY2xvY2sucDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgewogCQkJCQlpbnQgdGhpc19lcnI7CiAKLQkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7CisJCQkJCWludGVsX2Nsb2NrKHJlZmNsaywgJmNsb2NrKTsKIAogCQkJCQlpZiAoIWludGVsX1BMTF9pc192YWxpZChjcnRjLCAmY2xvY2spKQogCQkJCQkJY29udGludWU7CkBAIC0zNDMsNyArMzIyLDcgQEAKIAl1ZGVsYXkoMjAwMDApOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogaW50ZWxfcGlwZV9zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKIAkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKIHsKQEAgLTM2MSwxMSArMzQwLDIxIEBACiAJaW50IGRzcHN0cmlkZSA9IChwaXBlID09IDApID8gRFNQQVNUUklERSA6IERTUEJTVFJJREU7CiAJaW50IGRzcGNudHJfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBQ05UUiA6IERTUEJDTlRSOwogCXUzMiBkc3BjbnRyLCBhbGlnbm1lbnQ7CisJaW50IHJldDsKIAogCS8qIG5vIGZiIGJvdW5kICovCiAJaWYgKCFjcnRjLT5mYikgewogCQlEUk1fREVCVUcoIk5vIEZCIGJvdW5kXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHBpcGUpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIkNhbid0IHVwZGF0ZSBwaXBlICVkIGluIFNBUkVBXG4iLCBwaXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CkBAIC0zNzcsMjggKzM2NiwzMCBAQAogCQlhbGlnbm1lbnQgPSA2NCAqIDEwMjQ7CiAJCWJyZWFrOwogCWNhc2UgSTkxNV9USUxJTkdfWDoKLQkJaWYgKElTX0k5WFgoZGV2KSkKLQkJCWFsaWdubWVudCA9IDEwMjQgKiAxMDI0OwotCQllbHNlCi0JCQlhbGlnbm1lbnQgPSA1MTIgKiAxMDI0OworCQkvKiBwaW4oKSB3aWxsIGFsaWduIHRoZSBvYmplY3QgYXMgcmVxdWlyZWQgYnkgZmVuY2UgKi8KKwkJYWxpZ25tZW50ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJOTE1X1RJTElOR19ZOgogCQkvKiBGSVhNRTogSXMgdGhpcyB0cnVlPyAqLwogCQlEUk1fRVJST1IoIlkgdGlsZWQgbm90IGFsbG93ZWQgZm9yIHNjYW4gb3V0IGJ1ZmZlcnNcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KIAotCWlmIChpOTE1X2dlbV9vYmplY3RfcGluKGludGVsX2ZiLT5vYmosIGFsaWdubWVudCkpCi0JCXJldHVybjsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihpbnRlbF9mYi0+b2JqLCBhbGlnbm1lbnQpOworCWlmIChyZXQgIT0gMCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKLQlpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oaW50ZWxfZmItPm9iaiwgMSk7Ci0KLQlTdGFydCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwotCU9mZnNldCA9IHkgKiBjcnRjLT5mYi0+cGl0Y2ggKyB4ICogKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCAvIDgpOwotCi0JSTkxNV9XUklURShkc3BzdHJpZGUsIGNydGMtPmZiLT5waXRjaCk7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKGludGVsX2ZiLT5vYmosIDEpOworCWlmIChyZXQgIT0gMCkgeworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oaW50ZWxfZmItPm9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KIAogCWRzcGNudHIgPSBJOTE1X1JFQUQoZHNwY250cl9yZWcpOwogCS8qIE1hc2sgb3V0IHBpeGVsIGZvcm1hdCBiaXRzIGluIGNhc2Ugd2UgY2hhbmdlIGl0ICovCkBAIC00MTksMTEgKzQxMCwxNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVua25vd24gY29sb3IgZGVwdGhcbiIpOwotCQlyZXR1cm47CisJCWk5MTVfZ2VtX29iamVjdF91bnBpbihpbnRlbF9mYi0+b2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlJOTE1X1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyKTsKIAorCVN0YXJ0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJT2Zmc2V0ID0geSAqIGNydGMtPmZiLT5waXRjaCArIHggKiAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKIAlEUk1fREVCVUcoIldyaXRpbmcgYmFzZSAlMDhsWCAlMDhsWCAlZCAlZFxuIiwgU3RhcnQsIE9mZnNldCwgeCwgeSk7CisJSTkxNV9XUklURShkc3BzdHJpZGUsIGNydGMtPmZiLT5waXRjaCk7CiAJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJSTkxNV9XUklURShkc3BiYXNlLCBPZmZzZXQpOwogCQlJOTE1X1JFQUQoZHNwYmFzZSk7CkBAIC00NDAsMjcgKzQzNywyNCBAQAogCQlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKG9sZF9mYik7CiAJCWk5MTVfZ2VtX29iamVjdF91bnBpbihpbnRlbF9mYi0+b2JqKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpZiAoIWRldi0+cHJpbWFyeS0+bWFzdGVyKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CiAJaWYgKCFtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAocGlwZSkgewotCWNhc2UgMDoKLQkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBpcGVBX3ggPSB4OwotCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGlwZUFfeSA9IHk7Ci0JCWJyZWFrOwotCWNhc2UgMToKKwlpZiAocGlwZSkgewogCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGlwZUJfeCA9IHg7CiAJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5waXBlQl95ID0geTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJDYW4ndCB1cGRhdGUgcGlwZSAlZCBpbiBTQVJFQVxuIiwgcGlwZSk7Ci0JCWJyZWFrOworCX0gZWxzZSB7CisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5waXBlQV94ID0geDsKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBpcGVBX3kgPSB5OwogCX0KKworCXJldHVybiAwOwogfQogCiAKQEAgLTcwOCwxMSArNzAyLDExIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAotCQkJCWludCB4LCBpbnQgeSwKLQkJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCitzdGF0aWMgaW50IGludGVsX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAorCQkJICAgICAgIGludCB4LCBpbnQgeSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNzMyLDEzICs3MjYsMTQgQEAKIAlpbnQgZHNwc2l6ZV9yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFTSVpFIDogRFNQQlNJWkU7CiAJaW50IGRzcHBvc19yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFQT1MgOiBEU1BCUE9TOwogCWludCBwaXBlc3JjX3JlZyA9IChwaXBlID09IDApID8gUElQRUFTUkMgOiBQSVBFQlNSQzsKLQlpbnQgcmVmY2xrOworCWludCByZWZjbGssIG51bV9vdXRwdXRzID0gMDsKIAlpbnRlbF9jbG9ja190IGNsb2NrOwogCXUzMiBkcGxsID0gMCwgZnAgPSAwLCBkc3BjbnRyLCBwaXBlY29uZjsKIAlib29sIG9rLCBpc19zZHZvID0gZmFsc2UsIGlzX2R2byA9IGZhbHNlOwogCWJvb2wgaXNfY3J0ID0gZmFsc2UsIGlzX2x2ZHMgPSBmYWxzZSwgaXNfdHYgPSBmYWxzZTsKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldDsKIAogCWRybV92YmxhbmtfcHJlX21vZGVzZXQoZGV2LCBwaXBlKTsKIApAQCAtNzY4LDkgKzc2MywxNCBAQAogCQkJaXNfY3J0ID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CisKKwkJbnVtX291dHB1dHMrKzsKIAl9CiAKLQlpZiAoSVNfSTlYWChkZXYpKSB7CisJaWYgKGlzX2x2ZHMgJiYgZGV2X3ByaXYtPmx2ZHNfdXNlX3NzYyAmJiBudW1fb3V0cHV0cyA8IDIpIHsKKwkJcmVmY2xrID0gZGV2X3ByaXYtPmx2ZHNfc3NjX2ZyZXEgKiAxMDAwOworCQlEUk1fREVCVUcoInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQgTUh6XG4iLCByZWZjbGsgLyAxMDAwKTsKKwl9IGVsc2UgaWYgKElTX0k5WFgoZGV2KSkgewogCQlyZWZjbGsgPSA5NjAwMDsKIAl9IGVsc2UgewogCQlyZWZjbGsgPSA0ODAwMDsKQEAgLTc3OSw3ICs3NzksNyBAQAogCW9rID0gaW50ZWxfZmluZF9iZXN0X1BMTChjcnRjLCBhZGp1c3RlZF9tb2RlLT5jbG9jaywgcmVmY2xrLCAmY2xvY2spOwogCWlmICghb2spIHsKIAkJRFJNX0VSUk9SKCJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWZwID0gY2xvY2subiA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKQEAgLTgyOSwxMSArODI5LDE0IEBACiAJCX0KIAl9CiAKLQlpZiAoaXNfdHYpIHsKKwlpZiAoaXNfc2R2byAmJiBpc190dikKKwkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsKKwllbHNlIGlmIChpc190dikKIAkJLyogWFhYOiBqdXN0IG1hdGNoaW5nIEJJT1MgZm9yIG5vdyAqLwotLyoJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsgKi8KKwkJLyoJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsgKi8KIAkJZHBsbCB8PSAzOwotCX0KKwllbHNlIGlmIChpc19sdmRzICYmIGRldl9wcml2LT5sdmRzX3VzZV9zc2MgJiYgbnVtX291dHB1dHMgPCAyKQorCQlkcGxsIHw9IFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU47CiAJZWxzZQogCQlkcGxsIHw9IFBMTF9SRUZfSU5QVVRfRFJFRkNMSzsKIApAQCAtOTUwLDkgKzk1MywxMyBAQAogCUk5MTVfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOwogCiAJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KLQlpbnRlbF9waXBlX3NldF9iYXNlKGNydGMsIHgsIHksIG9sZF9mYik7CisJcmV0ID0gaW50ZWxfcGlwZV9zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOworCWlmIChyZXQgIT0gMCkKKwkgICAgcmV0dXJuIHJldDsKIAogCWRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KGRldiwgcGlwZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqIExvYWRzIHRoZSBwYWxldHRlL2dhbW1hIHVuaXQgZm9yIHRoZSBDUlRDIHdpdGggdGhlIHByZXBhcmVkIHZhbHVlcyAqLwpAQCAtMTAwMSw2ICsxMDA4LDcgQEAKIAkJdGVtcCA9IENVUlNPUl9NT0RFX0RJU0FCTEU7CiAJCWFkZHIgPSAwOwogCQlibyA9IE5VTEw7CisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZ290byBmaW5pc2g7CiAJfQogCkBAIC0xMDIzLDE4ICsxMDMxLDE5IEBACiAJfQogCiAJLyogd2Ugb25seSBuZWVkIHRvIHBpbiBpbnNpZGUgR1RUIGlmIGN1cnNvciBpcyBub24tcGh5ICovCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmICghZGV2X3ByaXYtPmN1cnNvcl9uZWVkc19waHlzaWNhbCkgewogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGJvLCBQQUdFX1NJWkUpOwogCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gY3Vyc29yIGJvXG4iKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbF9sb2NrZWQ7CiAJCX0KIAkJYWRkciA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwogCX0gZWxzZSB7CiAJCXJldCA9IGk5MTVfZ2VtX2F0dGFjaF9waHlzX29iamVjdChkZXYsIGJvLCAocGlwZSA9PSAwKSA/IEk5MTVfR0VNX1BIWVNfQ1VSU09SXzAgOiBJOTE1X0dFTV9QSFlTX0NVUlNPUl8xKTsKIAkJaWYgKHJldCkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIHBoeXMgb2JqZWN0XG4iKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbF9sb2NrZWQ7CiAJCX0KIAkJYWRkciA9IG9ial9wcml2LT5waHlzX29iai0+aGFuZGxlLT5idXNhZGRyOwogCX0KQEAgLTEwNTQsMTAgKzEwNjMsOSBAQAogCQkJCWk5MTVfZ2VtX2RldGFjaF9waHlzX29iamVjdChkZXYsIGludGVsX2NydGMtPmN1cnNvcl9ibyk7CiAJCX0gZWxzZQogCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGludGVsX2NydGMtPmN1cnNvcl9ibyk7Ci0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIgPSBhZGRyOwogCWludGVsX2NydGMtPmN1cnNvcl9ibyA9IGJvOwpAQCAtMTA2NSw2ICsxMDczLDcgQEAKIAlyZXR1cm4gMDsKIGZhaWw6CiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworZmFpbF9sb2NrZWQ6CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoYm8pOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMjkyLDcgKzEzMDEsNyBAQAogCQl9CiAKIAkJLyogWFhYOiBIYW5kbGUgdGhlIDEwME1oeiByZWZjbGsgKi8KLQkJaTl4eF9jbG9jayg5NjAwMCwgJmNsb2NrKTsKKwkJaW50ZWxfY2xvY2soOTYwMDAsICZjbG9jayk7CiAJfSBlbHNlIHsKIAkJYm9vbCBpc19sdmRzID0gKHBpcGUgPT0gMSkgJiYgKEk5MTVfUkVBRChMVkRTKSAmIExWRFNfUE9SVF9FTik7CiAKQEAgLTEzMDQsOSArMTMxMyw5IEBACiAJCQlpZiAoKGRwbGwgJiBQTExfUkVGX0lOUFVUX01BU0spID09CiAJCQkgICAgUExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTikgewogCQkJCS8qIFhYWDogbWlnaHQgbm90IGJlIDY2TUh6ICovCi0JCQkJaTh4eF9jbG9jayg2NjAwMCwgJmNsb2NrKTsKKwkJCQlpbnRlbF9jbG9jayg2NjAwMCwgJmNsb2NrKTsKIAkJCX0gZWxzZQotCQkJCWk4eHhfY2xvY2soNDgwMDAsICZjbG9jayk7CisJCQkJaW50ZWxfY2xvY2soNDgwMDAsICZjbG9jayk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoZHBsbCAmIFBMTF9QMV9ESVZJREVfQllfVFdPKQogCQkJCWNsb2NrLnAxID0gMjsKQEAgLTEzMTksNyArMTMyOCw3IEBACiAJCQllbHNlCiAJCQkJY2xvY2sucDIgPSAyOwogCi0JCQlpOHh4X2Nsb2NrKDQ4MDAwLCAmY2xvY2spOworCQkJaW50ZWxfY2xvY2soNDgwMDAsICZjbG9jayk7CiAJCX0KIAl9CiAKQEAgLTE1OTgsNyArMTYwNyw5IEBACiAKIAlyZXQgPSBpbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoZGV2LCBtb2RlX2NtZCwgJmZiLCBvYmopOwogCWlmIChyZXQpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCBhZmQxMjE3Li5iN2YwZWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCXJldCA9IGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShkZXYsICZtb2RlX2NtZCwgJmZiLCBmYm8pOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgZmIuXG4iKTsKLQkJZ290byBvdXRfdW5yZWY7CisJCWdvdG8gb3V0X3VucGluOwogCX0KIAogCWxpc3RfYWRkKCZmYi0+ZmlscF9oZWFkLCAmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCk7CkBAIC00ODQsNyArNDg0LDcgQEAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbGZiX3BhciksIGRldmljZSk7CiAJaWYgKCFpbmZvKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3VucmVmOworCQlnb3RvIG91dF91bnBpbjsKIAl9CiAKIAlwYXIgPSBpbmZvLT5wYXI7CkBAIC01MTMsNyArNTEzLDcgQEAKIAkJCQkgICAgICAgc2l6ZSk7CiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewogCQlyZXQgPSAtRU5PU1BDOwotCQlnb3RvIG91dF91bnJlZjsKKwkJZ290byBvdXRfdW5waW47CiAJfQogCWluZm8tPnNjcmVlbl9zaXplID0gc2l6ZTsKIApAQCAtNjA4LDYgKzYwOCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0dXJuIDA7CiAKK291dF91bnBpbjoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4oZmJvKTsKIG91dF91bnJlZjoKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShmYm8pOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDZkNGY5MTIuLjBkMjExYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTQ4MSw4ICs0ODEsNiBAQAogCQlpZiAoZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUpIHsKIAkJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT50eXBlIHw9CiAJCQkJRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7Ci0JCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwKLQkJCQkJICAgIGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCmluZGV4IGEzMDUwOGIuLmZiZTZmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiAjZGVmaW5lIFNEVk9fQ01EX05BTUVfRU5UUlkoY21kKSB7Y21kLCAjY21kfQogLyoqIE1hcHBpbmcgb2YgY29tbWFuZCBudW1iZXJzIHRvIG5hbWVzLCBmb3IgZGVidWcgb3V0cHV0ICovCi1jb25zdCBzdGF0aWMgc3RydWN0IF9zZHZvX2NtZF9uYW1lIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX3Nkdm9fY21kX25hbWUgewogCXU4IGNtZDsKIAljaGFyICpuYW1lOwogfSBzZHZvX2NtZF9uYW1lc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKaW5kZXggZmJiMzVkYy4uNTY0ODVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCkBAIC00MTEsNyArNDExLDcgQEAKICAqIFRoZXNlIHZhbHVlcyBhY2NvdW50IGZvciAtMXMgcmVxdWlyZWQuCiAgKi8KIAotY29uc3Qgc3RhdGljIHN0cnVjdCB0dl9tb2RlIHR2X21vZGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHR2X21vZGUgdHZfbW9kZXNbXSA9IHsKIAl7CiAJCS5uYW1lCQk9ICJOVFNDLU0iLAogCQkuY2xvY2sJCT0gMTA3NTIwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggZGY0Y2Y5Ny4uOTI5NjVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC01NTcsOCArNTU3LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9jcF9pbml0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgICAgICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQorCQkJCSAgICAgICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogeworCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsKIAl1MzIgcmluZ19zdGFydCwgY3VyX3JlYWRfcHRyOwogCXUzMiB0bXA7CiAKQEAgLTY3Nyw2ICs2NzksMTQgQEAKIAlkZXZfcHJpdi0+c2NyYXRjaFsyXSA9IDA7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0NMRUFSX1JFRywgMCk7CiAKKwkvKiByZXNldCBzYXJlYSBjb3BpZXMgb2YgdGhlc2UgKi8KKwltYXN0ZXJfcHJpdiA9IGZpbGVfcHJpdi0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKKwlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpIHsKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgPSAwOworCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IDA7CisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2NsZWFyID0gMDsKKwl9CisKIAlyYWRlb25fZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CiAKIAkvKiBTeW5jIGV2ZXJ5dGhpbmcgdXAgKi8KQEAgLTEyMTUsNyArMTIyNSw3IEBACiAJfQogCiAJcmFkZW9uX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKLQlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2KTsKKwlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2LCBmaWxlX3ByaXYpOwogCiAJZGV2X3ByaXYtPmxhc3RfYnVmID0gMDsKIApAQCAtMTI4MSw3ICsxMjkxLDcgQEAKICAqCiAgKiBDaGFybCBQLiBCb3RoYSA8aHR0cDovL2NwYm90aGEubmV0PgogICovCi1zdGF0aWMgaW50IHJhZGVvbl9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHJhZGVvbl9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtMTMwNCw3ICsxMzE0LDcgQEAKIAl9CiAKIAlyYWRlb25fY3BfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOwotCXJhZGVvbl9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYpOworCXJhZGVvbl9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYsIGZpbGVfcHJpdik7CiAKIAlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CiAJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CkBAIC0xNDc5LDggKzE0ODksNyBAQAogICovCiBpbnQgcmFkZW9uX2NwX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQotCXJldHVybiByYWRlb25fZG9fcmVzdW1lX2NwKGRldik7CisJcmV0dXJuIHJhZGVvbl9kb19yZXN1bWVfY3AoZGV2LCBmaWxlX3ByaXYpOwogfQogCiBpbnQgcmFkZW9uX2VuZ2luZV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDZjYWQ2OWUuLjFjYzk2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTMwMCw3ICsxMzAwLDEzIEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1ZBSU9fVkdYX01PVVNFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TVU5QTFVTLCBVU0JfREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1ApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwNCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGI2NTEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjU0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UT1BTRUVELCBVU0JfREVWSUNFX0lEX1RPUFNFRURfQ1lCRVJMSU5LKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDA1KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDMwKSB9LAogCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMGMpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfQlQpIH0sCkBAIC0xNjA1LDYgKzE2MTEsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BBTkpJVCwgMHgwMDA0KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QT1dFUkNPTSwgVVNCX0RFVklDRV9JRF9QT1dFUkNPTV9VUFMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSCwgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSCwgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMykgfSwKQEAgLTE2MTIsMTAgKzE2MTksNiBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBILCBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0Q1KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEVOWCwgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTIpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwNCkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGI2NTEpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjU0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfTEFCUFJPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfR09URU1QKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfU0tJUCkgfSwKQEAgLTE2MjYsOCArMTYyOSw2IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18yMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzhfOF80X0lGX0tJVCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfWUVBTElOSywgVVNCX0RFVklDRV9JRF9ZRUFMSU5LX1AxS19QNEtfQjJLKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDA1KSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDMwKSB9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IGU4OTlmNTEuLjg4NTExOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTM0OCw2ICszNDgsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BMQVlET1RDT00JMHgwYjQzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUExBWURPVENPTV9FTVNfVVNCSUkJMHgwMDAzCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QT1dFUkNPTQkJMHgwZDlmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUE9XRVJDT01fVVBTCTB4MDAwMgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FJVEVLCQkweDA2YTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFECTB4ZmYxNwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDczMjQ0OTYuLjAyYjE5ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0yNjcsOCArMjY3LDEwIEBACiAJCWRlZmF1bHQ6CiAJCQl7CiAJCQkJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+aGlkOwotCQkJCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnSCcgfHwgX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQpCi0JCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnSCcgfHwgX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQpIHsKKwkJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQogCiAJCQkJaWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKEhJRElPQ0dSQVdOQU1FKDApKSkgewogCQkJCQlpbnQgbGVuOwpAQCAtMjc3LDggKzI3OSw5IEBACiAJCQkJCWxlbiA9IHN0cmxlbihoaWQtPm5hbWUpICsgMTsKIAkJCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQogCQkJCQkJbGVuID0gX0lPQ19TSVpFKGNtZCk7Ci0JCQkJCXJldHVybiBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+bmFtZSwgbGVuKSA/CisJCQkJCXJldCA9IGNvcHlfdG9fdXNlcih1c2VyX2FyZywgaGlkLT5uYW1lLCBsZW4pID8KIAkJCQkJCS1FRkFVTFQgOiBsZW47CisJCQkJCWJyZWFrOwogCQkJCX0KIAogCQkJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NHUkFXUEhZUygwKSkpIHsKQEAgLTI4OCwxMiArMjkxLDEzIEBACiAJCQkJCWxlbiA9IHN0cmxlbihoaWQtPnBoeXMpICsgMTsKIAkJCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQogCQkJCQkJbGVuID0gX0lPQ19TSVpFKGNtZCk7Ci0JCQkJCXJldHVybiBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+cGh5cywgbGVuKSA/CisJCQkJCXJldCA9IGNvcHlfdG9fdXNlcih1c2VyX2FyZywgaGlkLT5waHlzLCBsZW4pID8KIAkJCQkJCS1FRkFVTFQgOiBsZW47CisJCQkJCWJyZWFrOwogCQkJCX0KICAgICAgICAgICAgICAgICB9CiAKLQkJCXJldCA9IC1FTk9UVFk7CisJCXJldCA9IC1FTk9UVFk7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDQ5NDBlNGQuLmFhMjE0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTIyNywxMiArMjI3LDkgQEAKICAqLwogc3RhdGljIGludCBoaWRkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwogfQogCiAKQEAgLTMwNiw3ICszMDMsNyBAQAogCXJldHVybiAwOwogYmFpbDoKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGxpc3QtPmhpZGRldik7CisJa2ZyZWUobGlzdCk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMzIzLDcgKzMyMCw3IEBACiAgKi8KIHN0YXRpYyBzc2l6ZV90IGhpZGRldl9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgZXZlbnRfc2l6ZTsKIAlpbnQgcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGI4NGJmMDYuLmI0ZWVhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTU0Myw4ICs1NDMsOCBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTAsCiAJICBMTTg2LCBMTTg5IGFuZCBMTTk5LCBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyIGFuZCBBRFQ3NDYxLCBhbmQgTWF4aW0KLQkgIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksIE1BWDY2ODAgYW5kCi0JICBNQVg2NjgxIHNlbnNvciBjaGlwcy4KKwkgIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDgsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksCisJICBNQVg2NjgwLCBNQVg2NjgxIGFuZCBNQVg2NjkyIHNlbnNvciBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG05MC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1My5jIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKaW5kZXggZTUyYjM4OC4uYWQyYjM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKKysrIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKQEAgLTc2MCw4ICs3NjAsMTEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBvZmZzZXRfY291bnQ7IGkrKykKIAkJaWYgKCh4ID0gYWJpdHVndXJ1M19yZWFkKGRhdGEsIGJhbmssIG9mZnNldCArIGksIGNvdW50LAotCQkJCWJ1ZiArIGkgKiBjb3VudCkpICE9IGNvdW50KQotCQkJcmV0dXJuIGkgKiBjb3VudCArIChpICYmICh4IDwgMCkpID8gMCA6IHg7CisJCQkJYnVmICsgaSAqIGNvdW50KSkgIT0gY291bnQpIHsKKwkJCWlmICh4IDwgMCkKKwkJCQlyZXR1cm4geDsKKwkJCXJldHVybiBpICogY291bnQgKyB4OworCQl9CiAKIAlyZXR1cm4gaSAqIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mNzE4ODJmZy5jIGIvZHJpdmVycy9od21vbi9mNzE4ODJmZy5jCmluZGV4IDYwOWNhZmYuLjVmODFkZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZjcxODgyZmcuYworKysgYi9kcml2ZXJzL2h3bW9uL2Y3MTg4MmZnLmMKQEAgLTE4NzIsNyArMTg3Miw3IEBACiAKIAlkZXZpZCA9IHN1cGVyaW9faW53KHNpb2FkZHIsIFNJT19SRUdfTUFOSUQpOwogCWlmIChkZXZpZCAhPSBTSU9fRklOVEVLX0lEKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRSAiOiBOb3QgYSBGaW50ZWsgZGV2aWNlXG4iKTsKKwkJcHJfZGVidWcoRFJWTkFNRSAiOiBOb3QgYSBGaW50ZWsgZGV2aWNlXG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTkzMiw3ICsxOTMyLDcgQEAKIAlyZXMubmFtZSA9IGY3MTg4MmZnX3BkZXYtPm5hbWU7CiAJZXJyID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmcmVzKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKGY3MTg4MmZnX3BkZXYsICZyZXMsIDEpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jIGIvZHJpdmVycy9od21vbi9mNzUzNzVzLmMKaW5kZXggMTY5MmRlMy4uMThhMWJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mNzUzNzVzLmMKKysrIGIvZHJpdmVycy9od21vbi9mNzUzNzVzLmMKQEAgLTYxNyw3ICs2MTcsNyBAQAogc3RhdGljIGludCBmNzUzNzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCBmNzUzNzVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBmNzUzNzVfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgZjc1Mzc1c19wbGF0Zm9ybV9kYXRhICpmNzUzNzVzX3BkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMgYi9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKaW5kZXggYWJmNGRmYy4uMjljODNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYwpAQCAtMTY2LDYgKzE2NiwxOCBAQAogCX0sCQkJCQkJXAogCS5kcml2ZXJfZGF0YSA9ICZsaXMzbHYwMmRfYXhpc18jI19heGlzCQlcCiB9CisKKyNkZWZpbmUgQVhJU19ETUlfTUFUQ0gyKF9pZGVudCwgX2NsYXNzMSwgX25hbWUxLAlcCisJCQkJX2NsYXNzMiwgX25hbWUyLAlcCisJCQkJX2F4aXMpIHsJCVwKKwkuaWRlbnQgPSBfaWRlbnQsCQkJCVwKKwkuY2FsbGJhY2sgPSBsaXMzbHYwMmRfZG1pX21hdGNoZWQsCQlcCisJLm1hdGNoZXMgPSB7CQkJCQlcCisJCURNSV9NQVRDSChETUlfIyNfY2xhc3MxLCBfbmFtZTEpLAlcCisJCURNSV9NQVRDSChETUlfIyNfY2xhc3MyLCBfbmFtZTIpLAlcCisJfSwJCQkJCQlcCisJLmRyaXZlcl9kYXRhID0gJmxpczNsdjAyZF9heGlzXyMjX2F4aXMJCVwKK30KIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBsaXMzbHYwMmRfZG1pX2lkc1tdID0gewogCS8qIHByb2R1Y3QgbmFtZXMgYXJlIHRydW5jYXRlZCB0byBtYXRjaCBhbGwga2luZHMgb2YgYSBzYW1lIG1vZGVsICovCiAJQVhJU19ETUlfTUFUQ0goIk5DNjR4MCIsICJIUCBDb21wYXEgbmM2NCIsIHhfaW52ZXJ0ZWQpLApAQCAtMTc5LDYgKzE5MSwxNiBAQAogCUFYSVNfRE1JX01BVENIKCJOQzY3M3giLCAiSFAgQ29tcGFxIDY3MyIsIHh5X3JvdGF0ZWRfbGVmdF91c2QpLAogCUFYSVNfRE1JX01BVENIKCJOQzY1MXh4IiwgIkhQIENvbXBhcSA2NTEiLCB4eV9yb3RhdGVkX3JpZ2h0KSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NzF4eCIsICJIUCBDb21wYXEgNjcxIiwgeHlfc3dhcF95el9pbnZlcnRlZCksCisJLyogSW50ZWwtYmFzZWQgSFAgUGF2aWxpb24gZHY1ICovCisJQVhJU19ETUlfTUFUQ0gyKCJIUERWNV9JIiwKKwkJCVBST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NSIsCisJCQlCT0FSRF9OQU1FLCAiMzYwMyIsCisJCQl4X2ludmVydGVkKSwKKwkvKiBBTUQtYmFzZWQgSFAgUGF2aWxpb24gZHY1ICovCisJQVhJU19ETUlfTUFUQ0gyKCJIUERWNV9BIiwKKwkJCVBST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NSIsCisJCQlCT0FSRF9OQU1FLCAiMzYwMCIsCisJCQl5X2ludmVydGVkKSwKIAl7IE5VTEwsIH0KIC8qIExhcHRvcCBtb2RlbHMgd2l0aG91dCBheGlzIGluZm8gKHlldCk6CiAgKiAiTkM2OTEwIiAiSFAgQ29tcGFxIDY5MTAiCkBAIC0yMTMsOSArMjM1LDQ5IEBACiAJLnNldF9icmlnaHRuZXNzID0gaHBsZWRfc2V0LAogfTsKIAorc3RhdGljIGFjcGlfc3RhdHVzCitsaXMzbHYwMmRfZ2V0X3Jlc291cmNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKK3sKKwlpZiAocmVzb3VyY2UtPnR5cGUgPT0gQUNQSV9SRVNPVVJDRV9UWVBFX0VYVEVOREVEX0lSUSkgeworCQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9leHRlbmRlZF9pcnEgKmlycTsKKwkJdTMyICpkZXZpY2VfaXJxID0gY29udGV4dDsKKworCQlpcnEgPSAmcmVzb3VyY2UtPmRhdGEuZXh0ZW5kZWRfaXJxOworCQkqZGV2aWNlX2lycSA9IGlycS0+aW50ZXJydXB0c1swXTsKKwl9CisKKwlyZXR1cm4gQUVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGxpczNsdjAyZF9lbnVtX3Jlc291cmNlcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX3dhbGtfcmVzb3VyY2VzKGRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLAorCQkJCQlsaXMzbHYwMmRfZ2V0X3Jlc291cmNlLCAmYWRldi5pcnEpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogRXJyb3IgZ2V0dGluZyByZXNvdXJjZXNcbiIpOworfQorCitzdGF0aWMgczE2IGxpczNsdjAyZF9yZWFkXzE2KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZykKK3sKKwl1OCBsbywgaGk7CisKKwlhZGV2LnJlYWQoaGFuZGxlLCByZWcgLSAxLCAmbG8pOworCWFkZXYucmVhZChoYW5kbGUsIHJlZywgJmhpKTsKKwkvKiBJbiAiMTIgYml0IHJpZ2h0IGp1c3RpZmllZCIgbW9kZSwgYml0IDYsIGJpdCA3LCBiaXQgOCA9IGJpdCA1ICovCisJcmV0dXJuIChzMTYpKChoaSA8PCA4KSB8IGxvKTsKK30KKworc3RhdGljIHMxNiBsaXMzbHYwMmRfcmVhZF84KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZykKK3sKKwlzOCBsbzsKKwlhZGV2LnJlYWQoaGFuZGxlLCByZWcsICZsbyk7CisJcmV0dXJuIGxvOworfQorCiBzdGF0aWMgaW50IGxpczNsdjAyZF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JdTggdmFsOwogCWludCByZXQ7CiAKIAlpZiAoIWRldmljZSkKQEAgLTIyOSwxMCArMjkxLDIyIEBACiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfTURQU19DTEFTUyk7CiAJZGV2aWNlLT5kcml2ZXJfZGF0YSA9ICZhZGV2OwogCi0JbGlzM2x2MDJkX2FjcGlfcmVhZChkZXZpY2UtPmhhbmRsZSwgV0hPX0FNX0ksICZ2YWwpOwotCWlmICgodmFsICE9IExJUzNMVjAyRExfSUQpICYmICh2YWwgIT0gTElTMzAyRExfSUQpKSB7CisJbGlzM2x2MDJkX2FjcGlfcmVhZChkZXZpY2UtPmhhbmRsZSwgV0hPX0FNX0ksICZhZGV2Lndob2FtaSk7CisJc3dpdGNoIChhZGV2Lndob2FtaSkgeworCWNhc2UgTElTX0RPVUJMRV9JRDoKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAyLWJ5dGUgc2Vuc29yIGZvdW5kXG4iKTsKKwkJYWRldi5yZWFkX2RhdGEgPSBsaXMzbHYwMmRfcmVhZF8xNjsKKwkJYWRldi5tZHBzX21heF92YWwgPSAyMDQ4OworCQlicmVhazsKKwljYXNlIExJU19TSU5HTEVfSUQ6CisJCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogMS1ieXRlIHNlbnNvciBmb3VuZFxuIik7CisJCWFkZXYucmVhZF9kYXRhID0gbGlzM2x2MDJkX3JlYWRfODsKKwkJYWRldi5tZHBzX21heF92YWwgPSAxMjg7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQotCQkJCSI6IEFjY2VsZXJvbWV0ZXIgY2hpcCBub3QgTElTM0xWMDJEe0wsUX1cbiIpOworCQkJIjogdW5rbm93biBzZW5zb3IgdHlwZSAweCVYXG4iLCBhZGV2Lndob2FtaSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIElmIHBvc3NpYmxlIHVzZSBhICJzdGFuZGFyZCIgYXhlcyBvcmRlciAqLwpAQCAtMjQ3LDYgKzMyMSw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIG9idGFpbiBJUlEgbnVtYmVyIG9mIG91ciBkZXZpY2UgZnJvbSBBQ1BJICovCisJbGlzM2x2MDJkX2VudW1fcmVzb3VyY2VzKGFkZXYuZGV2aWNlKTsKKwogCXJldCA9IGxpczNsdjAyZF9pbml0X2RldmljZSgmYWRldik7CiAJaWYgKHJldCkgewogCQlmbHVzaF93b3JrKCZocGxlZF9sZWQud29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IDk1YTk5YzUuLjkxNTcyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAogI2RlZmluZSBURU1QX1RPX1JFRyh2YWwpIChTRU5TT1JTX0xJTUlUKCgodmFsKTwwPygoKHZhbCktNTAwKS8xMDAwKTpcCiAJCQkJCSgodmFsKSs1MDApLzEwMDApLC0xMjgsMTI3KSkKLSNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWwpICgoKHZhbCk+MHg4MD8odmFsKS0weDEwMDoodmFsKSkqMTAwMCkKKyNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWwpICgodmFsKSAqIDEwMDApCiAKICNkZWZpbmUgUFdNX1RPX1JFRyh2YWwpICAgKCh2YWwpID4+IDEpCiAjZGVmaW5lIFBXTV9GUk9NX1JFRyh2YWwpICgoKHZhbCkmMHg3ZikgPDwgMSkKQEAgLTI2Nyw5ICsyNjcsOSBAQAogCXU4IGhhc19mYW47CQkvKiBCaXRmaWVsZCwgZmFucyBlbmFibGVkICovCiAJdTE2IGZhbls1XTsJCS8qIFJlZ2lzdGVyIHZhbHVlcywgcG9zc2libHkgY29tYmluZWQgKi8KIAl1MTYgZmFuX21pbls1XTsJCS8qIFJlZ2lzdGVyIHZhbHVlcywgcG9zc2libHkgY29tYmluZWQgKi8KLQl1OCB0ZW1wWzNdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCB0ZW1wX2hpZ2hbM107CS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggdGVtcF9sb3dbM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXM4IHRlbXBbM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXM4IHRlbXBfaGlnaFszXTsJLyogUmVnaXN0ZXIgdmFsdWUgKi8KKwlzOCB0ZW1wX2xvd1szXTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggc2Vuc29yOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBmYW5fZGl2WzNdOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIHNoaWZ0ZWQgcmlnaHQgKi8KIAl1OCB2aWQ7CQkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwppbmRleCAyMTlkMmQwLi44YmIyMTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFlhbiBCdXJtYW4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBQaWVsCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IFBhdmVsIE1hY2hlaworICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdmVsIE1hY2hlawogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgImxpczNsdjAyZC5oIgpAQCAtNTIsMjQgKzUzLDE0IEBACiAgKiBqb3lzdGljay4KICAqLwogCi0vKiBNYXhpbXVtIHZhbHVlIG91ciBheGlzIG1heSBnZXQgZm9yIHRoZSBpbnB1dCBkZXZpY2UgKHNpZ25lZCAxMiBiaXRzKSAqLwotI2RlZmluZSBNRFBTX01BWF9WQUwgMjA0OAorc3RydWN0IGFjcGlfbGlzM2x2MDJkIGFkZXYgPSB7CisJLm1pc2Nfd2FpdCAgID0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoYWRldi5taXNjX3dhaXQpLAorfTsKIAotc3RydWN0IGFjcGlfbGlzM2x2MDJkIGFkZXY7CiBFWFBPUlRfU1lNQk9MX0dQTChhZGV2KTsKIAogc3RhdGljIGludCBsaXMzbHYwMmRfYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIAotc3RhdGljIHMxNiBsaXMzbHYwMmRfcmVhZF8xNihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcpCi17Ci0JdTggbG8sIGhpOwotCi0JYWRldi5yZWFkKGhhbmRsZSwgcmVnLCAmbG8pOwotCWFkZXYucmVhZChoYW5kbGUsIHJlZyArIDEsICZoaSk7Ci0JLyogSW4gIjEyIGJpdCByaWdodCBqdXN0aWZpZWQiIG1vZGUsIGJpdCA2LCBiaXQgNywgYml0IDggPSBiaXQgNSAqLwotCXJldHVybiAoczE2KSgoaGkgPDwgOCkgfCBsbyk7Ci19Ci0KIC8qKgogICogbGlzM2x2MDJkX2dldF9heGlzIC0gRm9yIHRoZSBnaXZlbiBheGlzLCBnaXZlIHRoZSB2YWx1ZSBjb252ZXJ0ZWQKICAqIEBheGlzOiAgICAgIDEsMiwzIC0gY2FuIGFsc28gYmUgbmVnYXRpdmUKQEAgLTk4LDkgKzg5LDkgQEAKIHsKIAlpbnQgcG9zaXRpb25bM107CiAKLQlwb3NpdGlvblswXSA9IGxpczNsdjAyZF9yZWFkXzE2KGhhbmRsZSwgT1VUWF9MKTsKLQlwb3NpdGlvblsxXSA9IGxpczNsdjAyZF9yZWFkXzE2KGhhbmRsZSwgT1VUWV9MKTsKLQlwb3NpdGlvblsyXSA9IGxpczNsdjAyZF9yZWFkXzE2KGhhbmRsZSwgT1VUWl9MKTsKKwlwb3NpdGlvblswXSA9IGFkZXYucmVhZF9kYXRhKGhhbmRsZSwgT1VUWCk7CisJcG9zaXRpb25bMV0gPSBhZGV2LnJlYWRfZGF0YShoYW5kbGUsIE9VVFkpOworCXBvc2l0aW9uWzJdID0gYWRldi5yZWFkX2RhdGEoaGFuZGxlLCBPVVRaKTsKIAogCSp4ID0gbGlzM2x2MDJkX2dldF9heGlzKGFkZXYuYWMueCwgcG9zaXRpb24pOwogCSp5ID0gbGlzM2x2MDJkX2dldF9heGlzKGFkZXYuYWMueSwgcG9zaXRpb24pOwpAQCAtMTEwLDI2ICsxMDEsMTMgQEAKIHZvaWQgbGlzM2x2MDJkX3Bvd2Vyb2ZmKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlhZGV2LmlzX29uID0gMDsKLQkvKiBkaXNhYmxlIFgsWSxaIGF4aXMgYW5kIHBvd2VyIGRvd24gKi8KLQlhZGV2LndyaXRlKGhhbmRsZSwgQ1RSTF9SRUcxLCAweDAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxpczNsdjAyZF9wb3dlcm9mZik7CiAKIHZvaWQgbGlzM2x2MDJkX3Bvd2Vyb24oYWNwaV9oYW5kbGUgaGFuZGxlKQogewotCXU4IHZhbDsKLQogCWFkZXYuaXNfb24gPSAxOwogCWFkZXYuaW5pdChoYW5kbGUpOwotCWFkZXYud3JpdGUoaGFuZGxlLCBGRl9XVV9DRkcsIDApOwotCS8qCi0JICogQkRVOiBMU0IgYW5kIE1TQiB2YWx1ZXMgYXJlIG5vdCB1cGRhdGVkIHVudGlsIGJvdGggaGF2ZSBiZWVuIHJlYWQuCi0JICogICAgICBTbyB0aGUgdmFsdWUgcmVhZCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0LgotCSAqIElFTjogSW50ZXJydXB0IGZvciBmcmVlLWZhbGwgYW5kIERELCBub3QgZm9yIGRhdGEtcmVhZHkuCi0JICovCi0JYWRldi5yZWFkKGhhbmRsZSwgQ1RSTF9SRUcyLCAmdmFsKTsKLQl2YWwgfD0gQ1RSTDJfQkRVIHwgQ1RSTDJfSUVOOwotCWFkZXYud3JpdGUoaGFuZGxlLCBDVFJMX1JFRzIsIHZhbCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsaXMzbHYwMmRfcG93ZXJvbik7CiAKQEAgLTE2Miw2ICsxNDAsMTQwIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgbGlzMzAyZGxfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmR1bW15KQoreworCS8qCisJICogQmUgY2FyZWZ1bDogb24gc29tZSBIUCBsYXB0b3BzIHRoZSBiaW9zIGZvcmNlIEREIHdoZW4gb24gYmF0dGVyeSBhbmQKKwkgKiB0aGUgbGlkIGlzIGNsb3NlZC4gVGhpcyBsZWFkcyB0byBpbnRlcnJ1cHRzIGFzIHNvb24gYXMgYSBsaXR0bGUgbW92ZQorCSAqIGlzIGRvbmUuCisJICovCisJYXRvbWljX2luYygmYWRldi5jb3VudCk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFkZXYubWlzY193YWl0KTsKKwlraWxsX2Zhc3luYygmYWRldi5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBsaXMzbHYwMmRfbWlzY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQ7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmYWRldi5taXNjX29wZW5lZCkpCisJCXJldHVybiAtRUJVU1k7IC8qIGFscmVhZHkgb3BlbiAqLworCisJYXRvbWljX3NldCgmYWRldi5jb3VudCwgMCk7CisKKwkvKgorCSAqIFRoZSBzZW5zb3IgY2FuIGdlbmVyYXRlIGludGVycnVwdHMgZm9yIGZyZWUtZmFsbCBhbmQgZGlyZWN0aW9uCisJICogZGV0ZWN0aW9uIChkaXN0aW5ndWlzaGFibGUgd2l0aCBGRl9XVV9TUkMgYW5kIEREX1NSQykgYnV0IHRvIGtlZXAKKwkgKiB0aGUgdGhpbmdzIHNpbXBsZSBhbmQgX2Zhc3RfIHdlIGFjdGl2YXRlIGl0IG9ubHkgZm9yIGZyZWUtZmFsbCwgc28KKwkgKiBubyBuZWVkIHRvIHJlYWQgcmVnaXN0ZXIgKHZlcnkgc2xvdyB3aXRoIEFDUEkpLiBGb3IgdGhlIHNhbWUgcmVhc29uLAorCSAqIHdlIGZvcmJpZCBzaGFyZWQgaW50ZXJydXB0cy4KKwkgKgorCSAqIElSUUZfVFJJR0dFUl9SSVNJTkcgc2VlbXMgcG9pbnRsZXNzIG9uIEhQIGxhcHRvcHMgYmVjYXVzZSB0aGUKKwkgKiBpby1hcGljIGlzIG5vdCBjb25maWd1cmFibGUgKGFuZCBnZW5lcmF0ZXMgYSB3YXJuaW5nKSBidXQgSSBrZWVwIGl0CisJICogaW4gY2FzZSBvZiBzdXBwb3J0IGZvciBvdGhlciBoYXJkd2FyZS4KKwkgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShhZGV2LmlycSwgbGlzMzAyZGxfaW50ZXJydXB0LCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICBEUklWRVJfTkFNRSwgJmFkZXYpOworCisJaWYgKHJldCkgeworCQljbGVhcl9iaXQoMCwgJmFkZXYubWlzY19vcGVuZWQpOworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogSVJRJWQgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIGFkZXYuaXJxKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbGlzM2x2MDJkX2luY3JlYXNlX3VzZSgmYWRldik7CisJcHJpbnRrKCJsaXMzOiByZWdpc3RlcmVkIGludGVycnVwdCAlZFxuIiwgYWRldi5pcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpczNsdjAyZF9taXNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmFzeW5jX2hlbHBlcigtMSwgZmlsZSwgMCwgJmFkZXYuYXN5bmNfcXVldWUpOworCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmFkZXYpOworCWZyZWVfaXJxKGFkZXYuaXJxLCAmYWRldik7CisJY2xlYXJfYml0KDAsICZhZGV2Lm1pc2Nfb3BlbmVkKTsgLyogcmVsZWFzZSB0aGUgZGV2aWNlICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxpczNsdjAyZF9taXNjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwl1MzIgZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVfZGF0YTsKKwlzc2l6ZV90IHJldHZhbCA9IDE7CisKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFkZF93YWl0X3F1ZXVlKCZhZGV2Lm1pc2Nfd2FpdCwgJndhaXQpOworCXdoaWxlICh0cnVlKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWRhdGEgPSBhdG9taWNfeGNoZygmYWRldi5jb3VudCwgMCk7CisJCWlmIChkYXRhKQorCQkJYnJlYWs7CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJc2NoZWR1bGUoKTsKKwl9CisKKwlpZiAoZGF0YSA8IDI1NSkKKwkJYnl0ZV9kYXRhID0gZGF0YTsKKwllbHNlCisJCWJ5dGVfZGF0YSA9IDI1NTsKKworCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IGdvaW5nIGludG8gY29weV90b191c2VyKCkgd2l0aAorCSAqIFRBU0tfSU5URVJSVVBUSUJMRSBzdGF0ZSAqLworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsICZieXRlX2RhdGEsIHNpemVvZihieXRlX2RhdGEpKSkKKwkJcmV0dmFsID0gLUVGQVVMVDsKKworb3V0OgorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmYWRldi5taXNjX3dhaXQsICZ3YWl0KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGlzM2x2MDJkX21pc2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlwb2xsX3dhaXQoZmlsZSwgJmFkZXYubWlzY193YWl0LCB3YWl0KTsKKwlpZiAoYXRvbWljX3JlYWQoJmFkZXYuY291bnQpKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaXMzbHYwMmRfbWlzY19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQoreworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmFkZXYuYXN5bmNfcXVldWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXMzbHYwMmRfbWlzY19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayAgPSBub19sbHNlZWssCisJLnJlYWQgICAgPSBsaXMzbHYwMmRfbWlzY19yZWFkLAorCS5vcGVuICAgID0gbGlzM2x2MDJkX21pc2Nfb3BlbiwKKwkucmVsZWFzZSA9IGxpczNsdjAyZF9taXNjX3JlbGVhc2UsCisJLnBvbGwgICAgPSBsaXMzbHYwMmRfbWlzY19wb2xsLAorCS5mYXN5bmMgID0gbGlzM2x2MDJkX21pc2NfZmFzeW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGxpczNsdjAyZF9taXNjX2RldmljZSA9IHsKKwkubWlub3IgICA9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZSAgICA9ICJmcmVlZmFsbCIsCisJLmZvcHMgICAgPSAmbGlzM2x2MDJkX21pc2NfZm9wcywKK307CisKIC8qKgogICogbGlzM2x2MDJkX2pveXN0aWNrX2t0aHJlYWQgLSBLdGhyZWFkIHBvbGxpbmcgZnVuY3Rpb24KICAqIEBkYXRhOiB1bnVzZWQgLSBoZXJlIHRvIGNvbmZvcm0gdG8gdGhyZWFkZm4gcHJvdG90eXBlCkBAIC0yMDMsNyArMzE1LDYgQEAKIAlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZhZGV2KTsKIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzM2x2MDJkX2NhbGlicmF0ZV9qb3lzdGljayh2b2lkKQogewogCWxpczNsdjAyZF9nZXRfeHl6KGFkZXYuZGV2aWNlLT5oYW5kbGUsICZhZGV2LnhjYWxpYiwgJmFkZXYueWNhbGliLCAmYWRldi56Y2FsaWIpOwpAQCAtMjMxLDkgKzM0Miw5IEBACiAJYWRldi5pZGV2LT5jbG9zZSAgICAgID0gbGlzM2x2MDJkX2pveXN0aWNrX2Nsb3NlOwogCiAJc2V0X2JpdChFVl9BQlMsIGFkZXYuaWRldi0+ZXZiaXQpOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGFkZXYuaWRldiwgQUJTX1gsIC1NRFBTX01BWF9WQUwsIE1EUFNfTUFYX1ZBTCwgMywgMyk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoYWRldi5pZGV2LCBBQlNfWSwgLU1EUFNfTUFYX1ZBTCwgTURQU19NQVhfVkFMLCAzLCAzKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhZGV2LmlkZXYsIEFCU19aLCAtTURQU19NQVhfVkFMLCBNRFBTX01BWF9WQUwsIDMsIDMpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGFkZXYuaWRldiwgQUJTX1gsIC1hZGV2Lm1kcHNfbWF4X3ZhbCwgYWRldi5tZHBzX21heF92YWwsIDMsIDMpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGFkZXYuaWRldiwgQUJTX1ksIC1hZGV2Lm1kcHNfbWF4X3ZhbCwgYWRldi5tZHBzX21heF92YWwsIDMsIDMpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGFkZXYuaWRldiwgQUJTX1osIC1hZGV2Lm1kcHNfbWF4X3ZhbCwgYWRldi5tZHBzX21heF92YWwsIDMsIDMpOwogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFkZXYuaWRldik7CiAJaWYgKGVycikgewpAQCAtMjUwLDYgKzM2MSw3IEBACiAJaWYgKCFhZGV2LmlkZXYpCiAJCXJldHVybjsKIAorCW1pc2NfZGVyZWdpc3RlcigmbGlzM2x2MDJkX21pc2NfZGV2aWNlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShhZGV2LmlkZXYpOwogCWFkZXYuaWRldiA9IE5VTEw7CiB9CkBAIC0yNjgsNiArMzgwLDE5IEBACiAJaWYgKGxpczNsdjAyZF9qb3lzdGlja19lbmFibGUoKSkKIAkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IGpveXN0aWNrIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CiAKKwlwcmludGsoImxpczNfaW5pdF9kZXZpY2U6IGlycSAlZFxuIiwgZGV2LT5pcnEpOworCisJLyogaWYgd2UgZGlkIG5vdCBnZXQgYW4gSVJRIGZyb20gQUNQSSAtIHdlIGhhdmUgbm90aGluZyBtb3JlIHRvIGRvICovCisJaWYgKCFkZXYtPmlycSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJCSI6IE5vIElSUSBpbiBBQ1BJLiBEaXNhYmxpbmcgL2Rldi9mcmVlZmFsbFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXByaW50aygibGlzMzogcmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKKwlpZiAobWlzY19yZWdpc3RlcigmbGlzM2x2MDJkX21pc2NfZGV2aWNlKSkKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IG1pc2NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKK291dDoKIAlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKGRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNTEsNiArNDc2LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxpczNsdjAyZF9yZW1vdmVfZnMpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNUIExJUzNMVjAyRHggdGhyZWUtYXhpcyBkaWdpdGFsIGFjY2VsZXJvbWV0ZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJZYW4gQnVybWFuIGFuZCBFcmljIFBpZWwiKTsKK01PRFVMRV9BVVRIT1IoIllhbiBCdXJtYW4sIEVyaWMgUGllbCwgUGF2ZWwgTWFjaGVrIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmggYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oCmluZGV4IDIyM2YxYzAuLjc1OTcyYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmgKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuaApAQCAtMjIsMTIgKzIyLDE1IEBACiAvKgogICogVGhlIGFjdHVhbCBjaGlwIGlzIFNUTWljcm9lbGVjdHJvbmljcyBMSVMzTFYwMkRMIG9yIExJUzNMVjAyRFEgdGhhdCBzZWVtcyB0bwogICogYmUgY29ubmVjdGVkIHZpYSBTUEkuIFRoZXJlIGV4aXN0cyBhbHNvIHNldmVyYWwgc2ltaWxhciBjaGlwcyAoc3VjaCBhcyBMSVMzMDJETCBvcgotICogTElTM0wwMkRRKSBidXQgbm90IGluIHRoZSBIUCBsYXB0b3BzIGFuZCB0aGV5IGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHJlZ2lzdGVycy4KKyAqIExJUzNMMDJEUSkgYW5kIHRoZXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgcmVnaXN0ZXJzLCBidXQgd2UgY2FuIHByb3ZpZGUgYQorICogY29tbW9uIGludGVyZmFjZSBmb3IgYWxsIG9mIHRoZW0uCiAgKiBUaGV5IGNhbiBhbHNvIGJlIGNvbm5lY3RlZCB2aWEgScKyQy4KICAqLwogCi0jZGVmaW5lIExJUzNMVjAyRExfSUQJMHgzQSAvKiBBbHNvIHRoZSBMSVMzTFYwMkRRICovCi0jZGVmaW5lIExJUzMwMkRMX0lECTB4M0IgLyogQWxzbyB0aGUgTElTMjAyREwhICovCisvKiAyLWJ5dGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIExJU19ET1VCTEVfSUQJMHgzQSAvKiBMSVMzTFYwMkRbTFFdICovCisvKiAxLWJ5dGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIExJU19TSU5HTEVfSUQJMHgzQiAvKiBMSVNbMzJdMDJETCBhbmQgb3RoZXJzICovCiAKIGVudW0gbGlzM2x2MDJkX3JlZyB7CiAJV0hPX0FNX0kJPSAweDBGLApAQCAtNDQsMTAgKzQ3LDEzIEBACiAJU1RBVFVTX1JFRwk9IDB4MjcsCiAJT1VUWF9MCQk9IDB4MjgsCiAJT1VUWF9ICQk9IDB4MjksCisJT1VUWAkJPSAweDI5LAogCU9VVFlfTAkJPSAweDJBLAogCU9VVFlfSAkJPSAweDJCLAorCU9VVFkJCT0gMHgyQiwKIAlPVVRaX0wJCT0gMHgyQywKIAlPVVRaX0gJCT0gMHgyRCwKKwlPVVRaCQk9IDB4MkQsCiAJRkZfV1VfQ0ZHCT0gMHgzMCwKIAlGRl9XVV9TUkMJPSAweDMxLAogCUZGX1dVX0FDSwk9IDB4MzIsCkBAIC0xNTksNiArMTY1LDEwIEBACiAJYWNwaV9zdGF0dXMgKCp3cml0ZSkgKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZywgdTggdmFsKTsKIAlhY3BpX3N0YXR1cyAoKnJlYWQpIChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcsIHU4ICpyZXQpOwogCisJdTgJCQl3aG9hbWk7ICAgIC8qIDNBaDogMi1ieXRlIHJlZ2lzdHJpZXMsIDNCaDogMS1ieXRlIHJlZ2lzdHJpZXMgKi8KKwlzMTYgKCpyZWFkX2RhdGEpIChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcpOworCWludAkJCW1kcHNfbWF4X3ZhbDsKKwogCXN0cnVjdCBpbnB1dF9kZXYJKmlkZXY7ICAgICAvKiBpbnB1dCBkZXZpY2UgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKmt0aHJlYWQ7ICAvKiBrdGhyZWFkIGZvciBpbnB1dCAqLwogCXN0cnVjdCBtdXRleCAgICAgICAgICAgIGxvY2s7CkBAIC0xNzAsNiArMTgwLDExIEBACiAJdW5zaWduZWQgY2hhcgkJaXNfb247ICAgICAvKiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgb24gb3Igb2ZmICovCiAJdW5zaWduZWQgY2hhcgkJdXNhZ2U7ICAgICAvKiB1c2FnZSBjb3VudGVyICovCiAJc3RydWN0IGF4aXNfY29udmVyc2lvbglhYzsgICAgICAgIC8qIGh3IC0+IGxvZ2ljYWwgYXhpcyAqLworCisJdTMyCQkJaXJxOyAgICAgICAvKiBJUlEgbnVtYmVyICovCisJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmFzeW5jX3F1ZXVlOyAvKiBxdWV1ZSBmb3IgdGhlIG1pc2MgZGV2aWNlICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJbWlzY193YWl0OyAvKiBXYWl0IHF1ZXVlIGZvciB0aGUgbWlzYyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBsb25nCQltaXNjX29wZW5lZDsgLyogYml0MDogd2hldGhlciB0aGUgZGV2aWNlIGlzIG9wZW4gKi8KIH07CiAKIGludCBsaXMzbHYwMmRfaW5pdF9kZXZpY2Uoc3RydWN0IGFjcGlfbGlzM2x2MDJkICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg1LmMgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwppbmRleCBjZmMxZWU5Li5iMjUxZDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwpAQCAtNzIsNiArNzIsNyBAQAogI2RlZmluZQlMTTg1X0NPTVBBTllfU01TQwkJMHg1YwogI2RlZmluZQlMTTg1X1ZFUlNURVBfVk1BU0sgICAgICAgICAgICAgIDB4ZjAKICNkZWZpbmUJTE04NV9WRVJTVEVQX0dFTkVSSUMJCTB4NjAKKyNkZWZpbmUJTE04NV9WRVJTVEVQX0dFTkVSSUMyCQkweDcwCiAjZGVmaW5lCUxNODVfVkVSU1RFUF9MTTg1QwkJMHg2MAogI2RlZmluZQlMTTg1X1ZFUlNURVBfTE04NUIJCTB4NjIKICNkZWZpbmUJTE04NV9WRVJTVEVQX0FETTEwMjcJCTB4NjAKQEAgLTMzNCw2ICszMzUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtODVfaWRbXSA9IHsKIAl7ICJhZG0xMDI3IiwgYWRtMTAyNyB9LAogCXsgImFkdDc0NjMiLCBhZHQ3NDYzIH0sCisJeyAiYWR0NzQ2OCIsIGFkdDc0NjggfSwKIAl7ICJsbTg1IiwgYW55X2NoaXAgfSwKIAl7ICJsbTg1YiIsIGxtODViIH0sCiAJeyAibG04NWMiLCBsbTg1YyB9LApAQCAtNDA4LDcgKzQxMCw4IEBACiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGxtODVfdXBkYXRlX2RldmljZShkZXYpOwogCWludCB2aWQ7CiAKLQlpZiAoZGF0YS0+dHlwZSA9PSBhZHQ3NDYzICYmIChkYXRhLT52aWQgJiAweDgwKSkgeworCWlmICgoZGF0YS0+dHlwZSA9PSBhZHQ3NDYzIHx8IGRhdGEtPnR5cGUgPT0gYWR0NzQ2OCkgJiYKKwkgICAgKGRhdGEtPnZpZCAmIDB4ODApKSB7CiAJCS8qIDYtcGluIFZJRCAoVlJNIDEwKSAqLwogCQl2aWQgPSB2aWRfZnJvbV9yZWcoZGF0YS0+dmlkICYgMHgzZiwgZGF0YS0+dnJtKTsKIAl9IGVsc2UgewpAQCAtMTE1Myw3ICsxMTU2LDggQEAKIAkJCWFkZHJlc3MsIGNvbXBhbnksIHZlcnN0ZXApOwogCiAJCS8qIEFsbCBzdXBwb3J0ZWQgY2hpcHMgaGF2ZSB0aGUgdmVyc2lvbiBpbiBjb21tb24gKi8KLQkJaWYgKCh2ZXJzdGVwICYgTE04NV9WRVJTVEVQX1ZNQVNLKSAhPSBMTTg1X1ZFUlNURVBfR0VORVJJQykgeworCQlpZiAoKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spICE9IExNODVfVkVSU1RFUF9HRU5FUklDICYmCisJCSAgICAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgIT0gTE04NV9WRVJTVEVQX0dFTkVSSUMyKSB7CiAJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZDogIgogCQkJCSJ1bnN1cHBvcnRlZCB2ZXJzaW9uXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTkwLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwppbmRleCA5NmE3MDE4Li4xYWZmNzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtOTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwpAQCAtMzIsMTAgKzMyLDEwIEBACiAgKiBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuIFRoZXNlIGNoaXBzIGxhY2sgdGhlIHJlbW90ZSB0ZW1wZXJhdHVyZQogICogb2Zmc2V0IGZlYXR1cmUuCiAgKgotICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTUFYNjY0NiwgTUFYNjY0NyBhbmQgTUFYNjY0OSBjaGlwcwotICogbWFkZSBieSBNYXhpbS4gIFRoZXNlIGFyZSBhZ2FpbiBzaW1pbGFyIHRvIHRoZSBMTTg2LCBidXQgdGhleSB1c2UKLSAqIHVuc2lnbmVkIHRlbXBlcmF0dXJlIHZhbHVlcyBhbmQgY2FuIHJlcG9ydCB0ZW1wZXJhdHVyZXMgZnJvbSAwIHRvCi0gKiAxNDUgZGVncmVlcy4KKyAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDgsIE1BWDY2NDkgYW5kCisgKiBNQVg2NjkyIGNoaXBzIG1hZGUgYnkgTWF4aW0uICBUaGVzZSBhcmUgYWdhaW4gc2ltaWxhciB0byB0aGUgTE04NiwKKyAqIGJ1dCB0aGV5IHVzZSB1bnNpZ25lZCB0ZW1wZXJhdHVyZSB2YWx1ZXMgYW5kIGNhbiByZXBvcnQgdGVtcGVyYXR1cmVzCisgKiBmcm9tIDAgdG8gMTQ1IGRlZ3JlZXMuCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTUFYNjY4MCBhbmQgTUFYNjY4MSwgdHdvIG90aGVyIHNlbnNvcgogICogY2hpcHMgbWFkZSBieSBNYXhpbS4gVGhlc2UgYXJlIHF1aXRlIHNpbWlsYXIgdG8gdGhlIG90aGVyIE1heGltCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jIGIvZHJpdmVycy9od21vbi92dDEyMTEuYwppbmRleCBiMGNlMzc4Li43M2Y3N2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdnQxMjExLmMKQEAgLTEyNjIsNyArMTI2Miw3IEBACiAJcmVzLm5hbWUgPSBwZGV2LT5uYW1lOwogCWVyciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJnJlcyk7CiAJaWYgKGVycikKLQkJZ290byBFWElUOworCQlnb3RvIEVYSVRfREVWX1BVVDsKIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCmluZGV4IGNiODA4ZDAuLmZlYWU3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKIAogCWVyciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJnJlcyk7CiAJaWYgKGVycikKLQkJZ290byBleGl0OworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWNvcm4uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWNvcm4uYwppbmRleCA5ZmVlM2NhLi45YWVmYjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFjb3JuLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hY29ybi5jCkBAIC03OSwxMCArNzksMTEgQEAKIAkuZ2V0c2RhCQk9IGlvY19nZXRzZGEsCiAJLmdldHNjbAkJPSBpb2NfZ2V0c2NsLAogCS51ZGVsYXkJCT0gODAsCi0JLnRpbWVvdXQJPSAxMDAKKwkudGltZW91dAk9IEhaLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBpb2Nfb3BzID0geworCS5ucgkJCT0gMCwKIAkuYWxnb19kYXRhCQk9ICZpb2NfZGF0YSwKIH07CiAKQEAgLTkwLDcgKzkxLDcgQEAKIHsKIAlmb3JjZV9vbmVzID0gRk9SQ0VfT05FUyB8IFNDTCB8IFNEQTsKIAotCXJldHVybiBpMmNfYml0X2FkZF9idXMoJmlvY19vcHMpOworCXJldHVybiBpMmNfYml0X2FkZF9udW1iZXJlZF9idXMoJmlvY19vcHMpOwogfQogCiBtb2R1bGVfaW5pdChpMmNfaW9jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwppbmRleCBlZGFiNTE5Li5hN2M1OTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwpAQCAtNzIsNyArNzIsNyBAQAogewogCWludCB0aW1lb3V0ID0gNTAwOwogCi0Jd2hpbGUgKHRpbWVvdXQtLSAmJiAoaW5iKHNtYnVzLT5iYXNlICsgQU1EX0VDX1NDKSAmIEFNRF9FQ19TQ19JQkYpKQorCXdoaWxlICgoaW5iKHNtYnVzLT5iYXNlICsgQU1EX0VDX1NDKSAmIEFNRF9FQ19TQ19JQkYpICYmIC0tdGltZW91dCkKIAkJdWRlbGF5KDEpOwogCiAJaWYgKCF0aW1lb3V0KSB7CkBAIC04OCw3ICs4OCw3IEBACiB7CiAJaW50IHRpbWVvdXQgPSA1MDA7CiAKLQl3aGlsZSAodGltZW91dC0tICYmICh+aW5iKHNtYnVzLT5iYXNlICsgQU1EX0VDX1NDKSAmIEFNRF9FQ19TQ19PQkYpKQorCXdoaWxlICgofmluYihzbWJ1cy0+YmFzZSArIEFNRF9FQ19TQykgJiBBTURfRUNfU0NfT0JGKSAmJiAtLXRpbWVvdXQpCiAJCXVkZWxheSgxKTsKIAogCWlmICghdGltZW91dCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYwppbmRleCA4ZTg0Njc5Li5jMDE2ZjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJZHJ2X2RhdGEtPmFsZ29fZGF0YS5nZXRzZGEgPSBpeHAyMDAwX2JpdF9nZXRzZGE7CiAJZHJ2X2RhdGEtPmFsZ29fZGF0YS5nZXRzY2wgPSBpeHAyMDAwX2JpdF9nZXRzY2w7CiAJZHJ2X2RhdGEtPmFsZ29fZGF0YS51ZGVsYXkgPSA2OwotCWRydl9kYXRhLT5hbGdvX2RhdGEudGltZW91dCA9IDEwMDsKKwlkcnZfZGF0YS0+YWxnb19kYXRhLnRpbWVvdXQgPSBIWjsKIAogCXN0cmxjcHkoZHJ2X2RhdGEtPmFkYXB0ZXIubmFtZSwgcGxhdF9kZXYtPmRldi5kcml2ZXItPm5hbWUsCiAJCXNpemVvZihkcnZfZGF0YS0+YWRhcHRlci5uYW1lKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCmluZGV4IGVlZGEyNzZmLi43ZjE4NmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdAorc3RhdGljIHZvaWQKIG12NjR4eHhfaTJjX3VubWFwX3JlZ3Moc3RydWN0IG12NjR4eHhfaTJjX2RhdGEgKmRydl9kYXRhKQogewogCWlmIChkcnZfZGF0YS0+cmVnX2Jhc2UpIHsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdjY0eHh4X2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCT0gbXY2NHh4eF9pMmNfcHJvYmUsCi0JLnJlbW92ZQk9IG12NjR4eHhfaTJjX3JlbW92ZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobXY2NHh4eF9pMmNfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSBNVjY0WFhYX0kyQ19DVExSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwppbmRleCA2YWY2ODE0Li5iZGIxZjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC02NDQsNyArNjQ0LDcgQEAKIAogCWkyY19weGFfc3RhcnRfbWVzc2FnZShpMmMpOwogCi0Jd2hpbGUgKHRpbWVvdXQtLSAmJiBpMmMtPm1zZ19udW0gPiAwKSB7CisJd2hpbGUgKGkyYy0+bXNnX251bSA+IDAgJiYgLS10aW1lb3V0KSB7CiAJCWkyY19weGFfaGFuZGxlcigwLCBpMmMpOwogCQl1ZGVsYXkoMTApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfaTJjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2kyYy5jCmluZGV4IDE2MmI3NGEuLjQyZGYwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9pMmMuYwpAQCAtNzYsNyArNzYsNyBAQAogCS5nZXRzZGEJCT0gc2N4MjAwX2kyY19nZXRzZGEsCiAJLmdldHNjbAkJPSBzY3gyMDBfaTJjX2dldHNjbCwKIAkudWRlbGF5CQk9IDEwLAotCS50aW1lb3V0CT0gMTAwLAorCS50aW1lb3V0CT0gSFosCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHNjeDIwMF9pMmNfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggYjFjOWFiZS4uZmJiOTAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC04NDEsNyArODQxLDcgQEAKIAogCWlmIChjbGllbnQtPmRyaXZlciAmJiAhaXNfbmV3c3R5bGVfZHJpdmVyKGNsaWVudC0+ZHJpdmVyKSkgewogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9yZWxlYXNlOwotCQljbGllbnQtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmY2xpZW50LT5kZXYsIDEpOwogCX0gZWxzZQogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9kZXZfcmVsZWFzZTsKIApAQCAtMTgzMSw3ICsxODMxLDggQEAKIAljYXNlIEkyQ19TTUJVU19RVUlDSzoKIAkJbXNnWzBdLmxlbiA9IDA7CiAJCS8qIFNwZWNpYWwgY2FzZTogVGhlIHJlYWQvd3JpdGUgZmllbGQgaXMgdXNlZCBhcyBkYXRhICovCi0JCW1zZ1swXS5mbGFncyA9IGZsYWdzIHwgKHJlYWRfd3JpdGU9PUkyQ19TTUJVU19SRUFEKT9JMkNfTV9SRDowOworCQltc2dbMF0uZmxhZ3MgPSBmbGFncyB8IChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEID8KKwkJCQkJSTJDX01fUkQgOiAwKTsKIAkJbnVtID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBJMkNfU01CVVNfQllURToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1kZXYuYyBiL2RyaXZlcnMvaTJjL2kyYy1kZXYuYwppbmRleCBjMTcxOTg4Li43ZTEzZDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWRldi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNkZXZfZHJpdmVyOwpAQCAtNDIyLDcgKzQyMywxMCBAQAogCQljbGllbnQtPmFkYXB0ZXItPnJldHJpZXMgPSBhcmc7CiAJCWJyZWFrOwogCWNhc2UgSTJDX1RJTUVPVVQ6Ci0JCWNsaWVudC0+YWRhcHRlci0+dGltZW91dCA9IGFyZzsKKwkJLyogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdXNlci1zcGFjZSBzZXRzIHRoZSB0aW1lb3V0CisJCSAqIHZhbHVlIGluIHVuaXRzIG9mIDEwIG1zLgorCQkgKi8KKwkJY2xpZW50LT5hZGFwdGVyLT50aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhhcmcgKiAxMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIE5PVEU6ICByZXR1cm5pbmcgYSBmYXVsdCBjb2RlIGhlcmUgY291bGQgY2F1c2UgdHJvdWJsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggM2RhZDIyOS4uNjQwYzk5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiAJICBTTUFSVCBwYXJhbWV0ZXJzIGZyb20gZGlzayBkcml2ZXMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtY29yZS5rby4KIAogCSAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlL2lkZS50eHQ+LgogCkBAIC01Niw4ICs1NiwxMiBAQAogCiBjb21tZW50ICJQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzIgogCitjb25maWcgSURFX1hGRVJfTU9ERQorCWJvb2wKKwogY29uZmlnIElERV9USU1JTkdTCiAJYm9vbAorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAKIGNvbmZpZyBJREVfQVRBUEkKIAlib29sCkBAIC02OTgsNiArNzAyLDcgQEAKIGNvbmZpZyBCTEtfREVWX0lERV9BVTFYWFgKICAgICAgICBib29sICJJREUgZm9yIEFNRCBBbGNoZW15IEF1MTIwMCIKICAgICAgICBkZXBlbmRzIG9uIFNPQ19BVTEyMDAKKyAgICAgICBzZWxlY3QgSURFX1hGRVJfTU9ERQogY2hvaWNlCiAgICAgICAgcHJvbXB0ICJJREUgTW9kZSBmb3IgQU1EIEFsY2hlbXkgQXUxMjAwIgogICAgICAgIGRlZmF1bHQgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUEKQEAgLTcyMSw2ICs3MjYsMTEgQEAKIAlkZXBlbmRzIG9uIFNPQ19UWDQ5MzkKIAlzZWxlY3QgQkxLX0RFVl9JREVETUFfU0ZGCiAKK2NvbmZpZyBCTEtfREVWX0lERV9BVDkxCisJdHJpc3RhdGUgIkF0bWVsIEFUOTEgKFNBTTksIENBUDksIEFUNTcyRDk0MEhGKSBJREUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVJNOTIwMCAmJiAhQVJDSF9BVDkxWDQwCisJc2VsZWN0IElERV9USU1JTkdTCisKIGNvbmZpZyBJREVfQVJNCiAJdHJpc3RhdGUgIkFSTSBJREUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTSAmJiAoQVJDSF9SUEMgfHwgQVJDSF9TSEFSSykKQEAgLTg2Niw2ICs4NzYsNyBAQAogCiBjb25maWcgQkxLX0RFVl9EVEMyMjc4CiAJdHJpc3RhdGUgIkRUQy0yMjc4IHN1cHBvcnQiCisJc2VsZWN0IElERV9YRkVSX01PREUKIAlzZWxlY3QgSURFX0xFR0FDWQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgImR0YzIyNzgucHJvYmUiIGtlcm5lbApAQCAtODk3LDYgKzkwOCw3IEBACiAKIGNvbmZpZyBCTEtfREVWX1VNQzg2NzIKIAl0cmlzdGF0ZSAiVU1DLTg2NzIgc3VwcG9ydCIKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAidW1jODY3Mi5wcm9iZSIga2VybmVsCkBAIC05MTAsNSArOTIyLDYgQEAKIGNvbmZpZyBCTEtfREVWX0lERURNQQogCWRlZl9ib29sIEJMS19ERVZfSURFRE1BX1NGRiB8fCBcCiAJCSBCTEtfREVWX0lERURNQV9JQ1MgfHwgQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCisJc2VsZWN0IElERV9YRkVSX01PREUKIAogZW5kaWYgIyBJREUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggZDBlM2Q3ZC4uOWI0YmJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTUsOSArNSwxMSBAQAogRVhUUkFfQ0ZMQUdTCQkJCSs9IC1JZHJpdmVycy9pZGUKIAogaWRlLWNvcmUteSArPSBpZGUubyBpZGUtaW9jdGxzLm8gaWRlLWlvLm8gaWRlLWlvcHMubyBpZGUtbGliLm8gaWRlLXByb2JlLm8gXAotCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXBpby1ibGFja2xpc3QubyBpZGUtc3lzZnMubworCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXN5c2ZzLm8gaWRlLWRldnNldHMubyBcCisJICAgICAgaWRlLWlvLXN0ZC5vIGlkZS1laC5vCiAKICMgY29yZSBJREUgY29kZQoraWRlLWNvcmUtJChDT05GSUdfSURFX1hGRVJfTU9ERSkJKz0gaWRlLXBpby1ibGFja2xpc3QubyBpZGUteGZlci1tb2RlLm8KIGlkZS1jb3JlLSQoQ09ORklHX0lERV9USU1JTkdTKQkJKz0gaWRlLXRpbWluZ3MubwogaWRlLWNvcmUtJChDT05GSUdfSURFX0FUQVBJKQkJKz0gaWRlLWF0YXBpLm8KIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFUENJKQkrPSBzZXR1cC1wY2kubwpAQCAtMTE2LDMgKzExOCw0IEBACiAKIG9iai0kKENPTkZJR19CTEtfREVWX0lERV9UWDQ5MzgpCSs9IHR4NDkzOGlkZS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JREVfVFg0OTM5KQkrPSB0eDQ5MzlpZGUubworb2JqLSQoQ09ORklHX0JMS19ERVZfSURFX0FUOTEpCQkrPSBhdDkxX2lkZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKaW5kZXggNDQ4NWI5Yy4uODc4ZjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2FlYzYyeHguYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJZHJpdmUtPmh3aWYtPnBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIHBpbyArIFhGRVJfUElPXzApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9hZWM2Mnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9hZWM2Mnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJLyogVGhlc2UgYXJlIG5lY2Vzc2FyeSB0byBnZXQgQUVDNjI4MCBNYWNpbnRvc2ggY2FyZHMgdG8gd29yayAqLwogCWlmICgoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjUpIHx8CkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YSwgcmVnNGFoIHwgMHg4MCk7CiAJfQogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggYXRwODZ4X2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKaW5kZXggNjZmNDMwOC4uZDM1MTNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCkBAIC0yMTIsNyArMjEyLDcgQEAKICAqCWFwcHJvcHJpYXRlIGFsc28gc2V0cyB1cCB0aGUgMTUzMyBzb3V0aGJyaWRnZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9hbGkxNXgzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9hbGkxNXgzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCB0bXBieXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYW1kNzR4eC5jIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCmluZGV4IDY5NjYwYTQuLjYyOGNkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FtZDc0eHguYworKysgYi9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogICogVGhlIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrLiAgSW5pdGlhbGl6ZSBkcml2ZSBpbmRlcGVuZGVudCByZWdpc3RlcnMuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYW1kNzR4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYW1kNzR4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IHQgPSAwLCBvZmZzZXQgPSBhbWRfb2Zmc2V0KGRldik7CiAKQEAgLTE2NiwxMyArMTY2LDEzIEBACiAJICogQ2hlY2sgZm9yIGJyb2tlbiBGSUZPIHN1cHBvcnQuCiAJICovCiAJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EICYmCi0JICAgIGRldi0+dmVuZG9yID09IFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MTEpCisJICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MTEpCiAJCXQgJj0gMHgwZjsKIAllbHNlCiAJCXQgfD0gMHhmMDsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBBTURfSURFX0NPTkZJRyArIG9mZnNldCwgdCk7CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBhbWRfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCkBAIC0xODMsMTQgKzE4Myw2IEBACiAJCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9hbWQ3NHh4KGlkZV9od2lmX3QgKmh3aWYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQotCWlmIChod2lmLT5pcnEgPT0gMCkgLyogMCBpcyBib2d1cyBidXQgd2lsbCBkbyBmb3Igbm93ICovCi0JCWh3aWYtPmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoZGV2LCBod2lmLT5jaGFubmVsKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgYW1kX3BvcnRfb3BzID0gewogCS5zZXRfcGlvX21vZGUJCT0gYW1kX3NldF9waW9fbW9kZSwKIAkuc2V0X2RtYV9tb2RlCQk9IGFtZF9zZXRfZHJpdmUsCkBAIC0yMDcsNyArMTk5LDYgQEAKIAl7CQkJCQkJCQlcCiAJCS5uYW1lCQk9IERSVl9OQU1FLAkJCQlcCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYW1kNzR4eCwJCQlcCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfYW1kNzR4eCwJCQlcCiAJCS5lbmFibGViaXRzCT0ge3sweDQwLDB4MDIsMHgwMn0sIHsweDQwLDB4MDEsMHgwMX19LAlcCiAJCS5wb3J0X29wcwk9ICZhbWRfcG9ydF9vcHMsCQkJXAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfQU1ELAkJCVwKQEAgLTIyMSw3ICsyMTIsNiBAQAogCXsJCQkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQkJCVwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hbWQ3NHh4LAkJCVwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hbWQ3NHh4LAkJCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NTAsMHgwMiwweDAyfSwgezB4NTAsMHgwMSwweDAxfX0sCVwKIAkJLnBvcnRfb3BzCT0gJmFtZF9wb3J0X29wcywJCQlcCiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19BTUQsCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYyBiL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiNTBmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKQEAgLTAsMCArMSw0NjcgQEAKKy8qCisgKiBJREUgaG9zdCBkcml2ZXIgZm9yIEFUOTEgKFNBTTksIENBUDksIEFUNTcyRDk0MEhGKSBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIKKyAqIHdpdGggQ29tcGFjdCBGbGFzaCBUcnVlIElERSBsb2dpYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBLZWx2YXRlayBMdGQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjMuaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjNfbWF0cml4Lmg+CisKKyNkZWZpbmUgRFJWX05BTUUgImF0OTFfaWRlIgorCisjZGVmaW5lIHBlcnIoZm10LCBhcmdzLi4uKSBwcl9lcnIoRFJWX05BTUUgIjogIiBmbXQsICMjYXJncykKKyNkZWZpbmUgcGRiZyhmbXQsIGFyZ3MuLi4pIHByX2RlYnVnKCIlcyAiIGZtdCwgX19mdW5jX18sICMjYXJncykKKworLyoKKyAqIEFjY2VzcyB0byBJREUgZGV2aWNlIGlzIHBvc3NpYmxlIHRocm91Z2ggRUJJIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlcgorICogd2l0aCBDb21wYWN0IEZsYXNoIGxvZ2ljLiBGb3IgZGV0YWlscyBzZWUgRUJJIGFuZCBTTUMgZGF0YXNoZWV0IHNlY3Rpb25zCisgKiBvZiBhbnkgbWljcm9jb250cm9sbGVyIGZyb20gQVQ5MVNBTTkgZmFtaWx5LgorICoKKyAqIFdpdGhpbiBTTUMgY2hpcCBzZWxlY3QgYWRkcmVzcyBzcGFjZSwgbGluZXMgQVsyMzoyMV0gZGlzdGluZ3Vpc2ggQ29tcGFjdAorICogRmxhc2ggbW9kZXMgKEkvTywgY29tbW9uIG1lbW9yeSwgYXR0cmlidXRlIG1lbW9yeSwgVHJ1ZSBJREUpLiBJREUgbW9kZXMgYXJlOgorICogICAweDAwYzAwMDAgLSBUcnVlIElERQorICogICAweDAwZTAwMDAgLSBBbHRlcm5hdGUgVHJ1ZSBJREUgKEFsdCBTdGF0dXMgUmVnaXN0ZXIpCisgKgorICogT24gVHJ1ZSBJREUgbW9kZSBUYXNrIEZpbGUgYW5kIERhdGEgUmVnaXN0ZXIgYXJlIG1hcHBlZCBhdCB0aGUgc2FtZSBhZGRyZXNzLgorICogVG8gZGlzdGluZ3Vpc2ggYWNjZXNzIGJldHdlZW4gdGhlc2UgdHdvIGRpZmZlcmVudCBidXMgZGF0YSB3aWR0aCBpcyB1c2VkOgorICogOEJpdCBmb3IgVGFzayBGaWxlLCAxNkJpdCBmb3IgRGF0YSBJL08uCisgKgorICogQWZ0ZXIgaW5pdGlhbGl6YXRpb24gd2UgZG8gOC8xNiBiaXQgZmxpcHBpbmcgKGNoYW5nZXMgaW4gU01DIE1PREUgcmVnaXN0ZXIpCisgKiBvbmx5IGluc2lkZSBJREUgY2FsbGJhY2sgcm91dGluZXMgd2hpY2ggYXJlIHNlcmlhbGl6ZWQgYnkgSURFIGxheWVyLAorICogc28gbm8gYWRkaXRpb25hbCBsb2NraW5nIG5lZWRlZC4KKyAqLworCisjZGVmaW5lIFRBU0tfRklMRQkweDAwYzAwMDAwCisjZGVmaW5lIEFMVF9NT0RFCTB4MDBlMDAwMDAKKyNkZWZpbmUgUkVHU19TSVpFCTgKKworI2RlZmluZSBlbnRlcl8xNmJpdChjcywgbW9kZSkgZG8gewkJCQkJXAorCW1vZGUgPSBhdDkxX3N5c19yZWFkKEFUOTFfU01DX01PREUoY3MpKTsJCQlcCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERShjcyksIG1vZGUgfCBBVDkxX1NNQ19EQldfMTYpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGxlYXZlXzE2Yml0KGNzLCBtb2RlKSBhdDkxX3N5c193cml0ZShBVDkxX1NNQ19NT0RFKGNzKSwgbW9kZSk7CisKK3N0YXRpYyB2b2lkIHNldF9zbWNfdGltaW5ncyhjb25zdCB1OCBjaGlwc2VsZWN0LCBjb25zdCB1MTYgY3ljbGUsCisJCQkgICAgY29uc3QgdTE2IHNldHVwLCBjb25zdCB1MTYgcHVsc2UsCisJCQkgICAgY29uc3QgdTE2IGRhdGFfZmxvYXQsIGludCB1c2VfaW9yZHkpCit7CisJdW5zaWduZWQgbG9uZyBtb2RlID0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfAorCQkJICAgICBBVDkxX1NNQ19CQVRfU0VMRUNUOworCisJLyogZGlzYWJsZSBvciBlbmFibGUgd2FpdGluZyBmb3IgSU9SRFkgc2lnbmFsICovCisJaWYgKHVzZV9pb3JkeSkKKwkJbW9kZSB8PSBBVDkxX1NNQ19FWE5XTU9ERV9SRUFEWTsKKworCS8qIGFkZCBkYXRhIGZsb2F0IGN5Y2xlcyBpZiBuZWVkZWQgKi8KKwlpZiAoZGF0YV9mbG9hdCkKKwkJbW9kZSB8PSBBVDkxX1NNQ19UREZfKGRhdGFfZmxvYXQpOworCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERShjaGlwc2VsZWN0KSwgbW9kZSk7CisKKwkvKiBzZXR1cCB0aW1pbmdzIGluIFNNQyAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1NFVFVQKGNoaXBzZWxlY3QpLCBBVDkxX1NNQ19OV0VTRVRVUF8oc2V0dXApIHwKKwkJCQkJCSAgIEFUOTFfU01DX05DU19XUlNFVFVQXygwKSB8CisJCQkJCQkgICBBVDkxX1NNQ19OUkRTRVRVUF8oc2V0dXApIHwKKwkJCQkJCSAgIEFUOTFfU01DX05DU19SRFNFVFVQXygwKSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfUFVMU0UoY2hpcHNlbGVjdCksIEFUOTFfU01DX05XRVBVTFNFXyhwdWxzZSkgfAorCQkJCQkJICAgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKGN5Y2xlKSB8CisJCQkJCQkgICBBVDkxX1NNQ19OUkRQVUxTRV8ocHVsc2UpIHwKKwkJCQkJCSAgIEFUOTFfU01DX05DU19SRFBVTFNFXyhjeWNsZSkpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX0NZQ0xFKGNoaXBzZWxlY3QpLCBBVDkxX1NNQ19OV0VDWUNMRV8oY3ljbGUpIHwKKwkJCQkJCSAgIEFUOTFfU01DX05SRENZQ0xFXyhjeWNsZSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfbWNrX2N5Y2xlcyh1bnNpZ25lZCBpbnQgbnMsIHVuc2lnbmVkIGludCBtY2tfaHopCit7CisJdTY0IHRtcCA9IG5zOworCisJdG1wICo9IG1ja19oejsKKwl0bXAgKz0gMTAwMCoxMDAwKjEwMDAgLSAxOyAvKiByb3VuZCB1cCAqLworCWRvX2Rpdih0bXAsIDEwMDAqMTAwMCoxMDAwKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGludCkgdG1wOworfQorCitzdGF0aWMgdm9pZCBhcHBseV90aW1pbmdzKGNvbnN0IHU4IGNoaXBzZWxlY3QsIGNvbnN0IHU4IHBpbywKKwkJCSAgY29uc3Qgc3RydWN0IGlkZV90aW1pbmcgKnRpbWluZywgaW50IHVzZV9pb3JkeSkKK3sKKwl1bnNpZ25lZCBpbnQgdDAsIHQxLCB0MiwgdDZ6OworCXVuc2lnbmVkIGludCBjeWNsZSwgc2V0dXAsIHB1bHNlLCBkYXRhX2Zsb2F0OworCXVuc2lnbmVkIGludCBtY2tfaHo7CisJc3RydWN0IGNsayAqbWNrOworCisJLyogc2VlIHRhYmxlIDIyIG9mIENvbXBhY3QgRmxhc2ggc3RhbmRhcmQgNC4xIGZvciB0aGUgbWVhbmluZywKKwkgKiB3ZSBkbyBub3Qgc3RyZXRjaCBhY3RpdmUgKHQyKSB0aW1lLCBzbyBzZXR1cCAodDEpICsgaG9sZCB0aW1lICh0aCkKKwkgKiBhc3N1cmUgYXQgbGVhc3QgbWluaW1hbCByZWNvdmVyeSAodDJpKSB0aW1lICovCisJdDAgPSB0aW1pbmctPmN5YzhiOworCXQxID0gdGltaW5nLT5zZXR1cDsKKwl0MiA9IHRpbWluZy0+YWN0OGI7CisJdDZ6ID0gKHBpbyA8IDUpID8gMzAgOiAyMDsKKworCXBkYmcoInQwPSV1IHQxPSV1IHQyPSV1IHQ2ej0ldVxuIiwgdDAsIHQxLCB0MiwgdDZ6KTsKKworCW1jayA9IGNsa19nZXQoTlVMTCwgIm1jayIpOworCUJVR19PTihJU19FUlIobWNrKSk7CisJbWNrX2h6ID0gY2xrX2dldF9yYXRlKG1jayk7CisJcGRiZygibWNrX2h6PSV1XG4iLCBtY2tfaHopOworCisJY3ljbGUgPSBjYWxjX21ja19jeWNsZXModDAsIG1ja19oeik7CisJc2V0dXAgPSBjYWxjX21ja19jeWNsZXModDEsIG1ja19oeik7CisJcHVsc2UgPSBjYWxjX21ja19jeWNsZXModDIsIG1ja19oeik7CisJZGF0YV9mbG9hdCA9IGNhbGNfbWNrX2N5Y2xlcyh0NnosIG1ja19oeik7CisKKwlwZGJnKCJjeWNsZT0ldSBzZXR1cD0ldSBwdWxzZT0ldSBkYXRhX2Zsb2F0PSV1XG4iLAorCSAgICAgY3ljbGUsIHNldHVwLCBwdWxzZSwgZGF0YV9mbG9hdCk7CisKKwlzZXRfc21jX3RpbWluZ3MoY2hpcHNlbGVjdCwgY3ljbGUsIHNldHVwLCBwdWxzZSwgZGF0YV9mbG9hdCwgdXNlX2lvcmR5KTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9pZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXU4IGNoaXBzZWxlY3QgPSBod2lmLT5zZWxlY3RfZGF0YTsKKwl1bnNpZ25lZCBsb25nIG1vZGU7CisKKwlwZGJnKCJjcyAldSBidWYgJXAgbGVuICVkXG4iLCBjaGlwc2VsZWN0LCBidWYsIGxlbik7CisKKwlsZW4rKzsKKworCWVudGVyXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOworCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKSBpb19wb3J0cy0+ZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCWxlYXZlXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOworfQorCitzdGF0aWMgdm9pZCBhdDkxX2lkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwl1OCBjaGlwc2VsZWN0ID0gaHdpZi0+c2VsZWN0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBtb2RlOworCisJcGRiZygiY3MgJXUgYnVmICVwIGxlbiAlZFxuIiwgY2hpcHNlbGVjdCwgIGJ1ZiwgbGVuKTsKKworCWVudGVyXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOworCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKikgaW9fcG9ydHMtPmRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwlsZWF2ZV8xNmJpdChjaGlwc2VsZWN0LCBtb2RlKTsKK30KKworc3RhdGljIHU4IGlkZV9tbV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBpZGVfbW1fb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXdyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9pZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwkJSElISSA9IDB4RkY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpIHsKKwkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7CisKKwkJYXQ5MV9pZGVfb3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsICZkYXRhLCAyKTsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwkJaWRlX21tX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJCWlkZV9tbV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJCWlkZV9tbV9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCQlpZGVfbW1fb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJCWlkZV9tbV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJCWlkZV9tbV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJCWlkZV9tbV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCQlpZGVfbW1fb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9pZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwkJdTE2IGRhdGE7CisKKwkJYXQ5MV9pZGVfaW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgJmRhdGEsIDIpOworCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOworCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCisJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLworCWlkZV9tbV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwkJdGYtPmZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwkJdGYtPm5zZWN0ICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCQl0Zi0+bGJhbCAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwkJdGYtPmxiYW0gICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJCXRmLT5sYmFoICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJCXRmLT5kZXZpY2UgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwkJaWRlX21tX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJCXRmLT5ob2JfZmVhdHVyZSA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQkJdGYtPmhvYl9sYmFsICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQkJdGYtPmhvYl9sYmFtICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFfaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3sKKwlzdHJ1Y3QgaWRlX3RpbWluZyAqdGltaW5nOworCXU4IGNoaXBzZWxlY3QgPSBkcml2ZS0+aHdpZi0+c2VsZWN0X2RhdGE7CisJaW50IHVzZV9pb3JkeSA9IDA7CisKKwlwZGJnKCJjaGlwc2VsZWN0ICV1IHBpbyAldVxuIiwgY2hpcHNlbGVjdCwgcGlvKTsKKworCXRpbWluZyA9IGlkZV90aW1pbmdfZmluZF9tb2RlKFhGRVJfUElPXzAgKyBwaW8pOworCUJVR19PTighdGltaW5nKTsKKworCWlmICgocGlvID4gMiB8fCBhdGFfaWRfaGFzX2lvcmR5KGRyaXZlLT5pZCkpICYmCisJICAgICEoYXRhX2lkX2lzX2NmYShkcml2ZS0+aWQpICYmIHBpbyA+IDQpKQorCQl1c2VfaW9yZHkgPSAxOworCisJYXBwbHlfdGltaW5ncyhjaGlwc2VsZWN0LCBwaW8sIHRpbWluZywgdXNlX2lvcmR5KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGF0OTFfaWRlX3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS5zZXRfaXJxCT0gaWRlX3NldF9pcnEsCisKKwkudGZfbG9hZAk9IGF0OTFfaWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJPSBhdDkxX2lkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJPSBhdDkxX2lkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQk9IGF0OTFfaWRlX291dHB1dF9kYXRhLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgYXQ5MV9pZGVfcG9ydF9vcHMgPSB7CisJLnNldF9waW9fbW9kZQk9IGF0OTFfaWRlX3NldF9waW9fbW9kZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBhdDkxX2lkZV9wb3J0X2luZm8gX19pbml0ZGF0YSA9IHsKKwkucG9ydF9vcHMJPSAmYXQ5MV9pZGVfcG9ydF9vcHMsCisJLnRwX29wcwkJPSAmYXQ5MV9pZGVfdHBfb3BzLAorCS5ob3N0X2ZsYWdzIAk9IElERV9IRkxBR19NTUlPIHwgSURFX0hGTEFHX05PX0RNQSB8IElERV9IRkxBR19TSU5HTEUgfAorCQkJICBJREVfSEZMQUdfTk9fSU9fMzJCSVQgfCBJREVfSEZMQUdfVU5NQVNLX0lSUVMsCisJLnBpb19tYXNrIAk9IEFUQV9QSU81LAorfTsKKworLyoKKyAqIElmIGludGVycnVwdCBpcyBkZWxpdmVyZWQgdGhyb3VnaCBHUElPLCBJUlEgYXJlIHRyaWdnZXJlZCBvbiBmYWxsaW5nCisgKiBhbmQgcmlzaW5nIGVkZ2Ugb2Ygc2lnbmFsLiBXaGVyZWFzIElERSBkZXZpY2UgcmVxdWVzdCBpbnRlcnJ1cHQgb24gaGlnaAorICogbGV2ZWwgKHJpc2luZyBlZGdlIGluIG91ciBjYXNlKS4gVGhpcyBtZWFuIHdlIGhhdmUgZmFrZSBpbnRlcnJ1cHRzLCBzbworICogd2UgbmVlZCB0byBjaGVjayBpbnRlcnJ1cHQgcGluIGFuZCBleGl0IGluc3RhbnRseSBmcm9tIElTUiB3aGVuIGxpbmUKKyAqIGlzIG9uIGxvdyBsZXZlbC4KKyAqLworCitpcnFyZXR1cm5fdCBhdDkxX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgbnRyaWVzID0gODsKKwlpbnQgcGluX3ZhbDEsIHBpbl92YWwyOworCisJLyogYWRkaXRpb25hbCBkZWdsaXRjaCwgbGluZSBjYW4gYmUgbm9pc3kgaW4gYmFkbHkgZGVzaWduZWQgUENCICovCisJZG8geworCQlwaW5fdmFsMSA9IGF0OTFfZ2V0X2dwaW9fdmFsdWUoaXJxKTsKKwkJcGluX3ZhbDIgPSBhdDkxX2dldF9ncGlvX3ZhbHVlKGlycSk7CisJfSB3aGlsZSAocGluX3ZhbDEgIT0gcGluX3ZhbDIgJiYgLS1udHJpZXMgPiAwKTsKKworCWlmIChwaW5fdmFsMSA9PSAwIHx8IG50cmllcyA8PSAwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlyZXR1cm4gaWRlX2ludHIoaXJxLCBkZXZfaWQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX2lkZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJaHdfcmVnc190IGh3OworCWh3X3JlZ3NfdCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBsb25nIHRmX2Jhc2UgPSAwLCBjdGxfYmFzZSA9IDA7CisJc3RydWN0IGF0OTFfY2ZfZGF0YSAqYm9hcmQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghYm9hcmQpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGJvYXJkLT5kZXRfcGluICYmIGF0OTFfZ2V0X2dwaW9fdmFsdWUoYm9hcmQtPmRldF9waW4pICE9IDApIHsKKwkJcGVycigibm8gZGV2aWNlIGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlwZXJyKCJjYW4ndCBnZXQgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0ICsgVEFTS19GSUxFLAorCQkJCSAgICAgUkVHU19TSVpFLCAiaWRlIikgfHwKKwkgICAgIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQgKyBBTFRfTU9ERSwKKwkJCQkgICAgIFJFR1NfU0laRSwgImFsdCIpKSB7CisJCXBlcnIoIm1lbW9yeSByZXNvdXJjZXMgaW4gdXNlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwZGJnKCJjaGlwc2VsZWN0ICV1IGlycSAldSByZXMgJTA4bHhcbiIsIGJvYXJkLT5jaGlwc2VsZWN0LAorCSAgICAgYm9hcmQtPmlycV9waW4sICh1bnNpZ25lZCBsb25nKSByZXMtPnN0YXJ0KTsKKworCXRmX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQgKyBUQVNLX0ZJTEUsCisJCQkJCSAgICAgICBSRUdTX1NJWkUpOworCWN0bF9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0ICsgQUxUX01PREUsCisJCQkJCQlSRUdTX1NJWkUpOworCWlmICghdGZfYmFzZSB8fCAhY3RsX2Jhc2UpIHsKKwkJcGVycigiY2FuJ3QgbWFwIG1lbW9yeSByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKKworCWlmIChib2FyZC0+ZmxhZ3MgJiBBVDkxX0lERV9TV0FQX0EwX0EyKSB7CisJCS8qIHdvcmthcm91bmQgZm9yIHN0dXBpZCBoYXJkd2FyZSBidWcgKi8KKwkJaHcuaW9fcG9ydHMuZGF0YV9hZGRyCT0gdGZfYmFzZSArIDA7CisJCWh3LmlvX3BvcnRzLmVycm9yX2FkZHIJPSB0Zl9iYXNlICsgNDsKKwkJaHcuaW9fcG9ydHMubnNlY3RfYWRkcgk9IHRmX2Jhc2UgKyAyOworCQlody5pb19wb3J0cy5sYmFsX2FkZHIJPSB0Zl9iYXNlICsgNjsKKwkJaHcuaW9fcG9ydHMubGJhbV9hZGRyCT0gdGZfYmFzZSArIDE7CisJCWh3LmlvX3BvcnRzLmxiYWhfYWRkcgk9IHRmX2Jhc2UgKyA1OworCQlody5pb19wb3J0cy5kZXZpY2VfYWRkciA9IHRmX2Jhc2UgKyAzOworCQlody5pb19wb3J0cy5jb21tYW5kX2FkZHIgPSB0Zl9iYXNlICsgNzsKKwkJaHcuaW9fcG9ydHMuY3RsX2FkZHIJPSBjdGxfYmFzZSArIDM7CisJfSBlbHNlCisJCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIHRmX2Jhc2UsIGN0bF9iYXNlICsgNik7CisKKwlody5pcnEgPSBib2FyZC0+aXJxX3BpbjsKKwlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CisJaHcuZGV2ID0gJnBkZXYtPmRldjsKKworCWhvc3QgPSBpZGVfaG9zdF9hbGxvYygmYXQ5MV9pZGVfcG9ydF9pbmZvLCBod3MpOworCWlmICghaG9zdCkgeworCQlwZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgaWRlIGhvc3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzZXR1cCBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgLSBQSU8gMCBhcyBkZWZhdWx0ICovCisJYXBwbHlfdGltaW5ncyhib2FyZC0+Y2hpcHNlbGVjdCwgMCwgaWRlX3RpbWluZ19maW5kX21vZGUoWEZFUl9QSU9fMCksIDApOworCisJLyogd2l0aCBHUElPIGludGVycnVwdCB3ZSBoYXZlIHRvIGRvIHF1aXJrcyBpbiBoYW5kbGVyICovCisJaWYgKGJvYXJkLT5pcnFfcGluID49IFBJTl9CQVNFKQorCQlob3N0LT5pcnFfaGFuZGxlciA9IGF0OTFfaXJxX2hhbmRsZXI7CisKKwlob3N0LT5wb3J0c1swXS0+c2VsZWN0X2RhdGEgPSBib2FyZC0+Y2hpcHNlbGVjdDsKKworCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsICZhdDkxX2lkZV9wb3J0X2luZm8sIGh3cyk7CisJaWYgKHJldCkgeworCQlwZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgaWRlIGhvc3RcbiIpOworCQlnb3RvIGVycl9mcmVlX2hvc3Q7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCXJldHVybiAwOworCitlcnJfZnJlZV9ob3N0OgorCWlkZV9ob3N0X2ZyZWUoaG9zdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgYXQ5MV9pZGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0OTFfaWRlX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZSA9IERSVl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUJPSBfX2V4aXRfcChhdDkxX2lkZV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXQ5MV9pZGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0OTFfaWRlX2RyaXZlciwgYXQ5MV9pZGVfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXQ5MV9pZGVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdDkxX2lkZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhdDkxX2lkZV9pbml0KTsKK21vZHVsZV9leGl0KGF0OTFfaWRlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJTdGFuaXNsYXcgR3J1c3prYSA8c3RmX3hsQHdwLnBsPiIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCmluZGV4IGIyNzM1ZDIuLjkyM2NiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCkBAIC01Miw3ICs1Miw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoZHJpdmUtPmh3aWYtPmRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdGltaW5nX3NoaWZ0ID0gKGRyaXZlLT5kbiAmIDIpID8gMTYgOiAwICsgKGRyaXZlLT5kbiAmIDEpID8gMCA6IDg7CisJaW50IHRpbWluZ19zaGlmdCA9IChkcml2ZS0+ZG4gXiAxKSAqIDg7CiAJdTMyIHBpb190aW1pbmdfZGF0YTsKIAl1MTYgcGlvX21vZGVfZGF0YTsKIApAQCAtODUsNyArODUsNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHRpbWluZ19zaGlmdCA9IChkcml2ZS0+ZG4gJiAyKSA/IDE2IDogMCArIChkcml2ZS0+ZG4gJiAxKSA/IDAgOiA4OworCWludCB0aW1pbmdfc2hpZnQgPSAoZHJpdmUtPmRuIF4gMSkgKiA4OwogCXUzMiB0bXAzMjsKIAl1MTYgdG1wMTY7CiAJdTE2IHVkbWFfY3RsID0gMDsKQEAgLTE0Miw3ICsxNDIsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4NDgsMHgwOCwweDAwfX0sCiAJCS5wb3J0X29wcwk9ICZhdGlpeHBfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMTUxLDcgKzE1MCw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg0OCwweDAxLDB4MDB9LCB7MHgwMCwweDAwLDB4MDB9fSwKIAkJLnBvcnRfb3BzCT0gJmF0aWl4cF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFIHwgSURFX0hGTEFHX0xFR0FDWV9JUlFTLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKaW5kZXggNzlhMmRmZS4uMTU0ZWMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpAQCAtNTM2LDkgKzUzNiw4IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgYXVfaWRlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXVfaWRlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0OwpAQCAtNTUyLDIzICs1NTEsMjMgQEAKICNlbmRpZgogCiAJbWVtc2V0KCZhdWlkZV9od2lmLCAwLCBzaXplb2YoX2F1aWRlX2h3aWYpKTsKLQlhaHdpZi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlhaHdpZi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJcHJfZGVidWcoIiVzICVkOiBubyBiYXNlIGFkZHJlc3NcbiIsIERSVl9OQU1FLCBwZGV2LT5pZCk7CisJCXByX2RlYnVnKCIlcyAlZDogbm8gYmFzZSBhZGRyZXNzXG4iLCBEUlZfTkFNRSwgZGV2LT5pZCk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAoYWh3aWYtPmlycSA8IDApIHsKLQkJcHJfZGVidWcoIiVzICVkOiBubyBJUlFcbiIsIERSVl9OQU1FLCBwZGV2LT5pZCk7CisJCXByX2RlYnVnKCIlcyAlZDogbm8gSVJRXG4iLCBEUlZfTkFNRSwgZGV2LT5pZCk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkJcGRldi0+bmFtZSkpIHsKKwkJCQlkZXYtPm5hbWUpKSB7CiAJCXByX2RlYnVnKCIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIiwgRFJWX05BTUUpOwogCQlyZXQgPSAgLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTU4Myw3ICs1ODIsNyBAQAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCWF1aWRlX3NldHVwX3BvcnRzKCZodywgYWh3aWYpOwogCWh3LmlycSA9IGFod2lmLT5pcnE7Ci0JaHcuZGV2ID0gZGV2OworCWh3LmRldiA9ICZkZXYtPmRldjsKIAlody5jaGlwc2V0ID0gaWRlX2F1MXh4eDsKIAogCXJldCA9IGlkZV9ob3N0X2FkZCgmYXUxeHh4X3BvcnRfaW5mbywgaHdzLCAmaG9zdCk7CkBAIC01OTIsNyArNTkxLDcgQEAKIAogCWF1aWRlX2h3aWYuaHdpZiA9IGhvc3QtPnBvcnRzWzBdOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAogCXByaW50ayhLRVJOX0lORk8gIkF1MXh4eCBJREUoYnVpbHRpbikgY29uZmlndXJlZCBmb3IgJXNcbiIsIG1vZGUgKTsKIApAQCAtNjAwLDM4ICs1OTksMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF1X2lkZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdV9pZGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAogCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKIAogCWlvdW5tYXAoKHZvaWQgKilhaHdpZi0+cmVnYmFzZSk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF1MTIwMF9pZGVfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTIwMF9pZGVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlIAkJPSBhdV9pZGVfcHJvYmUsCiAJLnJlbW92ZQkJPSBhdV9pZGVfcmVtb3ZlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXVfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXVfaWRlX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKaW5kZXggMmY5Njg4ZC4uYWVlZTAzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY21kNjR4LmMKKysrIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9jbWQ2NHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2NtZDY0eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IG1yZG1vZGUgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MjAuYyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCmluZGV4IGQwMDNiZWMuLjU4ZmI5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCkBAIC0xMzMsNyArMTMzLDggQEAKIAkgKglkbyBhbGwgdGhlIGRldmljZSBzZXR1cCBmb3IgdXMKIAkgKi8KIAotCWlkZV9wY2lfc2V0dXBfcG9ydHMoZGV2LCBkLCAxNCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlod1swXS5pcnEgPSAxNDsKIAogCXJldHVybiBpZGVfaG9zdF9hZGQoZCwgaHdzLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jIGIvZHJpdmVycy9pZGUvY3M1NTMwLmMKaW5kZXggZDhlZGU4NS4uOGU4YjM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3M1NTMwLmMKKysrIGIvZHJpdmVycy9pZGUvY3M1NTMwLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogICoJSW5pdGlhbGl6ZSB0aGUgY3M1NTMwIGJyaWRnZSBmb3IgcmVsaWFibGUgSURFIERNQSBvcGVyYXRpb24uCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfY3M1NTMwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9jczU1MzAoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqbWFzdGVyXzAgPSBOVUxMLCAqY3M1NTMwXzAgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCmluZGV4IDhmMWIyZDkuLmJhY2IxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCisrKyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCkBAIC00Niw3ICs0Niw3IEBACiAJLnF1aXJrcHJvYwkJPSBpZGVfdW5kZWNvZGVkX3NsYXZlLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxraW5fY2JfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKaW5kZXggM2ViOWI1Yy4uZDNiM2U4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaHB0MzY2LmMKKysrIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKQEAgLTk5NSw3ICs5OTUsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciArIDEsIG5ld19tY3IpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2hwdDM2NihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZQk9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwogCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbygmZGV2LT5kZXYpOwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIAlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTApOwogCWhwdDN4eF9kaXNhYmxlX2Zhc3RfaXJxKGRldiwgMHg1NCk7CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBocHQzeHhfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCBlYzdkMDdmLi41YjcwNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTIwLDkgKzIwLDYgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAKICNkZWZpbmUgUkVHU19QRVJfR1RGCQk3Ci1zdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgewotCXU4CXRmYVtSRUdTX1BFUl9HVEZdOwkvKiByZWdzLiAweDFmMSAtIDB4MWY3ICovCi19OwogCiBzdHJ1Y3QgR1RNX2J1ZmZlciB7CiAJdTMyCVBJT19zcGVlZDA7CkBAIC04OSwxMiArODYsOCBAQAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIAotc3RhdGljIGludCBpZGVfYWNwaV9ibGFja2xpc3Qodm9pZCkKK2ludCBpZGVfYWNwaV9pbml0KHZvaWQpCiB7Ci0Jc3RhdGljIGludCBkb25lOwotCWlmIChkb25lKQotCQlyZXR1cm4gMDsKLQlkb25lID0gMTsKIAlkbWlfY2hlY2tfc3lzdGVtKGlkZV9hY3BpX2RtaV90YWJsZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDIsNDAgKzE5NSw2IEBACiB9CiAKIC8qKgotICogaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZSAtIEdldCBBQ1BJIG9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gZHJpdmUKLSAqIEBkcml2ZTogZGV2aWNlIHRvIGxvY2F0ZQotICoKLSAqIFJldHJpZXZlcyB0aGUgb2JqZWN0IGhhbmRsZSBvZiBhIGdpdmVuIGRyaXZlLiBBY2NvcmRpbmcgdG8gdGhlIEFDUEkKLSAqIHNwZWMgdGhlIGRyaXZlIGlzIGEgY2hpbGQgb2YgdGhlIGh3aWYuCi0gKgotICogUmV0dXJucyBoYW5kbGUgb24gc3VjY2VzcywgMCBvbiBlcnJvci4KLSAqLwotc3RhdGljIGFjcGlfaGFuZGxlIGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QJKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpbnQJCSBwb3J0OwotCWFjcGlfaGFuZGxlCSBkcml2ZV9oYW5kbGU7Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUpCi0JCXJldHVybiBOVUxMOwotCi0JcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyBkcml2ZS0+ZG4gLSAyOiBkcml2ZS0+ZG47Ci0KLQlERUJQUklOVCgiRU5URVI6ICVzIGF0IGNoYW5uZWwjOiAlZCBwb3J0IzogJWRcbiIsCi0JCSBkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgcG9ydCk7Ci0KLQotCS8qIFRCRDogY291bGQgYWxzbyBjaGVjayBBQ1BJIG9iamVjdCBWQUxJRCBiaXRzICovCi0JZHJpdmVfaGFuZGxlID0gYWNwaV9nZXRfY2hpbGQoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsIHBvcnQpOwotCURFQlBSSU5UKCJkcml2ZSAlcyBoYW5kbGUgMHglcFxuIiwgZHJpdmUtPm5hbWUsIGRyaXZlX2hhbmRsZSk7Ci0KLQlyZXR1cm4gZHJpdmVfaGFuZGxlOwotfQotCi0vKioKICAqIGRvX2RyaXZlX2dldF9HVEYgLSBnZXQgdGhlIGRyaXZlIGJvb3R1cCBkZWZhdWx0IHRhc2tmaWxlIHNldHRpbmdzCiAgKiBAZHJpdmU6IHRoZSBkcml2ZSBmb3Igd2hpY2ggdGhlIHRhc2tmaWxlIHNldHRpbmdzIHNob3VsZCBiZSByZXRyaWV2ZWQKICAqIEBndGZfbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiBkYXRhIHJldHVybmVkIGF0IEBndGZfYWRkcmVzcwpAQCAtMjU3LDQ3ICsyMTYsMTUgQEAKIAlhY3BpX3N0YXR1cwkJCXN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIJCW91dHB1dDsKIAl1bmlvbiBhY3BpX29iamVjdCAJCSpvdXRfb2JqOwotCWlkZV9od2lmX3QJCQkqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBkZXZpY2UJCQkqZGV2ID0gaHdpZi0+Z2VuZGV2LnBhcmVudDsKIAlpbnQJCQkJZXJyID0gLUVOT0RFVjsKLQlpbnQJCQkJcG9ydDsKIAogCSpndGZfbGVuZ3RoID0gMDsKIAkqZ3RmX2FkZHJlc3MgPSAwVUw7CiAJKm9ial9sb2MgPSAwVUw7CiAKLQlpZiAoaWRlX25vYWNwaSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWRldikgewotCQlERUJQUklOVCgibm8gUENJIGRldmljZSBmb3IgJXNcbiIsIGh3aWYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhKSB7Ci0JCURFQlBSSU5UKCJubyBBQ1BJIGRhdGEgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyBkcml2ZS0+ZG4gLSAyOiBkcml2ZS0+ZG47Ci0KLQlERUJQUklOVCgiRU5URVI6ICVzIGF0ICVzLCBwb3J0IzogJWQsIGhhcmRfcG9ydCM6ICVkXG4iLAotCQkgaHdpZi0+bmFtZSwgZGV2X25hbWUoZGV2KSwgcG9ydCwgaHdpZi0+Y2hhbm5lbCk7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkgewotCQlERUJQUklOVCgiJXMgZHJpdmUgJWQ6JWQgbm90IHByZXNlbnRcbiIsCi0JCQkgaHdpZi0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgcG9ydCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCB0aGlzIGRyaXZlJ3MgX0FEUiBpbmZvLiBpZiBub3QgYWxyZWFkeSBrbm93bi4gKi8KIAlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkgewotCQlkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgPSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGRyaXZlKTsKLQkJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpIHsKLQkJCURFQlBSSU5UKCJObyBBQ1BJIG9iamVjdCBmb3VuZCBmb3IgJXNcbiIsCi0JCQkJIGRyaXZlLT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9CisJCURFQlBSSU5UKCJObyBBQ1BJIG9iamVjdCBmb3VuZCBmb3IgJXNcbiIsIGRyaXZlLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogU2V0dGluZyB1cCBvdXRwdXQgYnVmZmVyICovCkBAIC0zNTUsNDMgKzI4Miw2IEBACiB9CiAKIC8qKgotICogdGFza2ZpbGVfbG9hZF9yYXcgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBkcml2ZQotICogQGRyaXZlOiBkcml2ZSB0byB3aGljaCBvdXRwdXQgaXMgc2VudAotICogQGd0ZjogcmF3IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgKDB4MWYxIC0gMHgxZjcpCi0gKgotICogT3V0cHV0cyBJREUgdGFza2ZpbGUgdG8gdGhlIGRyaXZlLgotICovCi1zdGF0aWMgaW50IHRhc2tmaWxlX2xvYWRfcmF3KGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0YXNrZmlsZV9hcnJheSAqZ3RmKQotewotCWlkZV90YXNrX3QgYXJnczsKLQlpbnQgZXJyID0gMDsKLQotCURFQlBSSU5UKCIoMHgxZjEtMWY3KTogaGV4OiAiCi0JICAgICAgICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCSAgICAgICBndGYtPnRmYVswXSwgZ3RmLT50ZmFbMV0sIGd0Zi0+dGZhWzJdLAotCSAgICAgICBndGYtPnRmYVszXSwgZ3RmLT50ZmFbNF0sIGd0Zi0+dGZhWzVdLCBndGYtPnRmYVs2XSk7Ci0KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0KLQkvKiBjb252ZXJ0IGd0ZiB0byBJREUgVGFza2ZpbGUgKi8KLQltZW1jcHkoJmFyZ3MudGZfYXJyYXlbN10sICZndGYtPnRmYSwgNyk7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0KLQlpZiAoIWlkZV9hY3BpZ3RmKSB7Ci0JCURFQlBSSU5UKCJfR1RGIGV4ZWN1dGlvbiBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZGVfbm9fZGF0YV90YXNrZmlsZSBmYWlsZWQ6ICV1XG4iLAotCQkgICAgICAgX19mdW5jX18sIGVycik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKioKICAqIGRvX2RyaXZlX3NldF90YXNrZmlsZXMgLSB3cml0ZSB0aGUgZHJpdmUgdGFza2ZpbGUgc2V0dGluZ3MgZnJvbSBfR1RGCiAgKiBAZHJpdmU6IHRoZSBkcml2ZSB0byB3aGljaCB0aGUgdGFza2ZpbGUgY29tbWFuZCBzaG91bGQgYmUgc2VudAogICogQGd0Zl9sZW5ndGg6IHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiBfR1RGIHRhc2tmaWxlcwpAQCAtNDA0LDQzICsyOTQsNDEgQEAKIAkJCQkgIHVuc2lnbmVkIGludCBndGZfbGVuZ3RoLAogCQkJCSAgdW5zaWduZWQgbG9uZyBndGZfYWRkcmVzcykKIHsKLQlpbnQJCQlyYyA9IC1FTk9ERVYsIGVycjsKKwlpbnQJCQlyYyA9IDAsIGVycjsKIAlpbnQJCQlndGZfY291bnQgPSBndGZfbGVuZ3RoIC8gUkVHU19QRVJfR1RGOwogCWludAkJCWl4OwotCXN0cnVjdCB0YXNrZmlsZV9hcnJheQkqZ3RmOwotCi0JaWYgKGlkZV9ub2FjcGkpCi0JCXJldHVybiAwOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcywgaGFyZF9wb3J0IzogJWRcbiIsIGRyaXZlLT5uYW1lLCBkcml2ZS0+ZG4pOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFndGZfY291bnQpCQkvKiBzaG91bGRuJ3QgYmUgaGVyZSAqLwotCQlnb3RvIG91dDsKIAogCURFQlBSSU5UKCJ0b3RhbCBHVEYgYnl0ZXM9JXUgKDB4JXgpLCBndGZfY291bnQ9JWQsIGFkZHI9MHglbHhcbiIsCiAJCSBndGZfbGVuZ3RoLCBndGZfbGVuZ3RoLCBndGZfY291bnQsIGd0Zl9hZGRyZXNzKTsKIAotCWlmIChndGZfbGVuZ3RoICUgUkVHU19QRVJfR1RGKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuZXhwZWN0ZWQgR1RGIGxlbmd0aCAoJWQpXG4iLAotCQkgICAgICAgX19mdW5jX18sIGd0Zl9sZW5ndGgpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyYyA9IDA7CisJLyogc2VuZCBhbGwgdGFza2ZpbGUgcmVnaXN0ZXJzICgweDFmMS0weDFmNykgKmluKnRoYXQqb3JkZXIqICovCiAJZm9yIChpeCA9IDA7IGl4IDwgZ3RmX2NvdW50OyBpeCsrKSB7Ci0JCWd0ZiA9IChzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgKikKLQkJCShndGZfYWRkcmVzcyArIGl4ICogUkVHU19QRVJfR1RGKTsKKwkJdTggKmd0ZiA9ICh1OCAqKShndGZfYWRkcmVzcyArIGl4ICogUkVHU19QRVJfR1RGKTsKKwkJaWRlX3Rhc2tfdCB0YXNrOwogCi0JCS8qIHNlbmQgYWxsIFRhc2tGaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwotCQllcnIgPSB0YXNrZmlsZV9sb2FkX3Jhdyhkcml2ZSwgZ3RmKTsKLQkJaWYgKGVycikKKwkJREVCUFJJTlQoIigweDFmMS0xZjcpOiAiCisJCQkgImhleDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCSBndGZbMF0sIGd0ZlsxXSwgZ3RmWzJdLAorCQkJIGd0ZlszXSwgZ3RmWzRdLCBndGZbNV0sIGd0Zls2XSk7CisKKwkJaWYgKCFpZGVfYWNwaWd0ZikgeworCQkJREVCUFJJTlQoIl9HVEYgZXhlY3V0aW9uIGRpc2FibGVkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY29udmVydCBHVEYgdG8gdGFza2ZpbGUgKi8KKwkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCQltZW1jcHkoJnRhc2sudGZfYXJyYXlbN10sIGd0ZiwgUkVHU19QRVJfR1RGKTsKKwkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwkJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKKwkJCQkJX19mdW5jX18sIGVycik7CiAJCQlyYyA9IGVycjsKKwkJfQogCX0KIAotb3V0OgogCXJldHVybiByYzsKIH0KIApAQCAtNjQ3LDI2ICs1MzUsMjMgQEAKIAkJREVCUFJJTlQoIm5vIEFDUEkgZGF0YSBmb3IgJXNcbiIsIGh3aWYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQorCiAJLyogY2hhbm5lbCBmaXJzdCBhbmQgdGhlbiBkcml2ZXMgZm9yIHBvd2VyIG9uIGFuZCB2ZXJzZSB2ZXJzYSBmb3IgcG93ZXIgb2ZmICovCiAJaWYgKG9uKQogCQlhY3BpX2J1c19zZXRfcG93ZXIoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsIEFDUElfU1RBVEVfRDApOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICghZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQotCQkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZShkcml2ZSk7Ci0KLQkJaWYgKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSAmJgotCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkpIHsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZiAoZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQogCQkJYWNwaV9idXNfc2V0X3Bvd2VyKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwKLQkJCQlvbj8gQUNQSV9TVEFURV9EMDogQUNQSV9TVEFURV9EMyk7Ci0JCX0KKwkJCQkJICAgb24gPyBBQ1BJX1NUQVRFX0QwIDogQUNQSV9TVEFURV9EMyk7CiAJfQorCiAJaWYgKCFvbikKIAkJYWNwaV9idXNfc2V0X3Bvd2VyKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBBQ1BJX1NUQVRFX0QzKTsKIH0KIAogLyoqCi0gKiBpZGVfYWNwaV9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgQUNQSSBsaW5rIGZvciBhbiBJREUgaW50ZXJmYWNlCisgKiBpZGVfYWNwaV9pbml0X3BvcnQgLSBpbml0aWFsaXplIHRoZSBBQ1BJIGxpbmsgZm9yIGFuIElERSBpbnRlcmZhY2UKICAqIEBod2lmOiB0YXJnZXQgSURFIGludGVyZmFjZSAoY2hhbm5lbCkKICAqCiAgKiBUaGUgQUNQSSBzcGVjIGlzIG5vdCBxdWl0ZSBjbGVhciB3aGVuIHRoZSBkcml2ZSBpZGVudGlmeSBidWZmZXIKQEAgLTY3NiwxMCArNTYxLDggQEAKICAqIFNvIHdlIGdldCB0aGUgaW5mb3JtYXRpb24gZHVyaW5nIHN0YXJ0dXA7IGJ1dCB0aGlzIG1lYW5zIHRoYXQKICAqIGFueSBjaGFuZ2VzIGR1cmluZyBydW4tdGltZSB3aWxsIGJlIGxvc3QgYWZ0ZXIgcmVzdW1lLgogICovCi12b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZikKK3ZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaWRlX2FjcGlfYmxhY2tsaXN0KCk7Ci0KIAlod2lmLT5hY3BpZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZGVfYWNwaV9od2lmX2xpbmspLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh3aWYtPmFjcGlkYXRhKQogCQlyZXR1cm47CkBAIC03MDgsMTUgKzU5MSwyNCBAQAogCWh3aWYtPmRldmljZXNbMF0tPmFjcGlkYXRhID0gJmh3aWYtPmFjcGlkYXRhLT5tYXN0ZXI7CiAJaHdpZi0+ZGV2aWNlc1sxXS0+YWNwaWRhdGEgPSAmaHdpZi0+YWNwaWRhdGEtPnNsYXZlOwogCi0JLyoKLQkgKiBTZW5kIElERU5USUZZIGZvciBlYWNoIGRyaXZlCi0JICovCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCW1lbXNldChkcml2ZS0+YWNwaWRhdGEsIDAsIHNpemVvZigqZHJpdmUtPmFjcGlkYXRhKSk7CisJLyogZ2V0IF9BRFIgaW5mbyBmb3IgZWFjaCBkZXZpY2UgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlhY3BpX2hhbmRsZSBkZXZfaGFuZGxlOwogCi0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7CisJCURFQlBSSU5UKCJFTlRFUjogJXMgYXQgY2hhbm5lbCM6ICVkIHBvcnQjOiAlZFxuIiwKKwkJCSBkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgZHJpdmUtPmRuICYgMSk7CiAKKwkJLyogVEJEOiBjb3VsZCBhbHNvIGNoZWNrIEFDUEkgb2JqZWN0IFZBTElEIGJpdHMgKi8KKwkJZGV2X2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLAorCQkJCQkgICAgZHJpdmUtPmRuICYgMSk7CisKKwkJREVCUFJJTlQoImRyaXZlICVzIGhhbmRsZSAweCVwXG4iLCBkcml2ZS0+bmFtZSwgZGV2X2hhbmRsZSk7CisKKwkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gZGV2X2hhbmRsZTsKKwl9CisKKwkvKiBzZW5kIElERU5USUZZIGZvciBlYWNoIGRldmljZSAqLworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CiAJCWVyciA9IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkoZHJpdmUsIGRyaXZlLT5hY3BpZGF0YS0+aWRidWZmKTsKIAkJaWYgKGVycikKIAkJCURFQlBSSU5UKCJpZGVudGlmeSBkZXZpY2UgJXMgZmFpbGVkICglZClcbiIsCkBAIC03MzYsOSArNjI4LDcgQEAKIAlpZGVfYWNwaV9nZXRfdGltaW5nKGh3aWYpOwogCWlkZV9hY3BpX3B1c2hfdGltaW5nKGh3aWYpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpCi0JCQkvKiBFeGVjdXRlIEFDUEkgc3RhcnR1cCBjb2RlICovCi0JCQlpZGVfYWNwaV9leGVjX3Rmcyhkcml2ZSk7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggZTk2YzAxMi4uNmFkYzViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTE0MCwxMCArMTQwLDE5IEBACiAJcnEtPmNtZF9mbGFncyB8PSBSRVFfUFJFRU1QVDsKIAlycS0+YnVmZmVyID0gKGNoYXIgKilwYzsKIAlycS0+cnFfZGlzayA9IGRpc2s7CisKKwlpZiAocGMtPnJlcV94ZmVyKSB7CisJCXJxLT5kYXRhID0gcGMtPmJ1ZjsKKwkJcnEtPmRhdGFfbGVuID0gcGMtPnJlcV94ZmVyOworCX0KKwogCW1lbWNweShycS0+Y21kLCBwYy0+YywgMTIpOwogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUpCiAJCXJxLT5jbWRbMTNdID0gUkVRX0lERVRBUEVfUEMxOwotCWlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxKTsKKworCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7CisKKwllbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKIH0KIAogLyoKQEAgLTE1OSw2ICsxNjgsMTIgQEAKIAlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CiAJcnEtPmJ1ZmZlciA9IChjaGFyICopcGM7CisKKwlpZiAocGMtPnJlcV94ZmVyKSB7CisJCXJxLT5kYXRhID0gcGMtPmJ1ZjsKKwkJcnEtPmRhdGFfbGVuID0gcGMtPnJlcV94ZmVyOworCX0KKwogCW1lbWNweShycS0+Y21kLCBwYy0+YywgMTIpOwogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUpCiAJCXJxLT5jbWRbMTNdID0gUkVRX0lERVRBUEVfUEMxOwpAQCAtMjg1LDYgKzMwMCwyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2NkX2dldF94ZmVybGVuKTsKIAordm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCB1MTYgKmJjb3VudCwgdTggKmlyZWFzb24pCit7CisJaWRlX3Rhc2tfdCB0YXNrOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKKwkJCUlERV9URkxBR19JTl9OU0VDVDsKKworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKworCSpiY291bnQgPSAodGFzay50Zi5sYmFoIDw8IDgpIHwgdGFzay50Zi5sYmFtOworCSppcmVhc29uID0gdGFzay50Zi5uc2VjdCAmIDM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24pOworCiAvKgogICogVGhpcyBpcyB0aGUgdXN1YWwgaW50ZXJydXB0IGhhbmRsZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGEgcGFja2V0CiAgKiBjb21tYW5kLiAgV2Ugd2lsbCB0cmFuc2ZlciBzb21lIG9mIHRoZSBkYXRhIChhcyByZXF1ZXN0ZWQgYnkgdGhlIGRyaXZlKQpAQCAtNDQ0LDYgKzQ3NCwyNSBAQAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KIAorc3RhdGljIHZvaWQgaWRlX3BrdGNtZF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTMyIHRmX2ZsYWdzLCB1MTYgYmNvdW50KQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfdGFza190IHRhc2s7CisJdTggZG1hID0gZHJpdmUtPmRtYTsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKKwkJCUlERV9URkxBR19PVVRfRkVBVFVSRSB8IHRmX2ZsYWdzOworCXRhc2sudGYuZmVhdHVyZSA9IGRtYTsJCS8qIFVzZSBQSU8vRE1BICovCisJdGFzay50Zi5sYmFtICAgID0gYmNvdW50ICYgMHhmZjsKKwl0YXNrLnRmLmxiYWggICAgPSAoYmNvdW50ID4+IDgpICYgMHhmZjsKKworCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCAmdGFzay50Zik7CisJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOworCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlod2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKK30KKwogc3RhdGljIHU4IGlkZV9yZWFkX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV90YXNrX3QgdGFzazsKQEAgLTYxNyw3ICs2NjYsNyBAQAogCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKIAl9CiAKLQlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQsIGRyaXZlLT5kbWEpOworCWlkZV9wa3RjbWRfdGZfbG9hZChkcml2ZSwgdGZfZmxhZ3MsIGJjb3VudCk7CiAKIAkvKiBJc3N1ZSB0aGUgcGFja2V0IGNvbW1hbmQgKi8KIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggMGJmZWIwYy4uMjE3N2NkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChpZGVjZF9yZWZfbXV0ZXgpOwogCi1zdGF0aWMgdm9pZCBpZGVfY2RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqKTsKK3N0YXRpYyB2b2lkIGlkZV9jZF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgY2Ryb21faW5mbyAqaWRlX2NkX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKQEAgLTY3LDcgKzY3LDcgQEAKIAkJaWYgKGlkZV9kZXZpY2VfZ2V0KGNkLT5kcml2ZSkpCiAJCQljZCA9IE5VTEw7CiAJCWVsc2UKLQkJCWtyZWZfZ2V0KCZjZC0+a3JlZik7CisJCQlnZXRfZGV2aWNlKCZjZC0+ZGV2KTsKIAogCX0KIAltdXRleF91bmxvY2soJmlkZWNkX3JlZl9tdXRleCk7CkBAIC03OSw3ICs3OSw3IEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gY2QtPmRyaXZlOwogCiAJbXV0ZXhfbG9jaygmaWRlY2RfcmVmX211dGV4KTsKLQlrcmVmX3B1dCgmY2QtPmtyZWYsIGlkZV9jZF9yZWxlYXNlKTsKKwlwdXRfZGV2aWNlKCZjZC0+ZGV2KTsKIAlpZGVfZGV2aWNlX3B1dChkcml2ZSk7CiAJbXV0ZXhfdW5sb2NrKCZpZGVjZF9yZWZfbXV0ZXgpOwogfQpAQCAtMTk0LDYgKzE5NCwxNCBAQAogCQkJYmlvX3NlY3RvcnMgPSBtYXgoYmlvX3NlY3RvcnMoZmFpbGVkX2NvbW1hbmQtPmJpbyksIDRVKTsKIAkJCXNlY3RvciAmPSB+KGJpb19zZWN0b3JzIC0gMSk7CiAKKwkJCS8qCisJCQkgKiBUaGUgU0NTSSBzcGVjaWZpY2F0aW9uIGFsbG93cyBmb3IgdGhlIHZhbHVlCisJCQkgKiByZXR1cm5lZCBieSBSRUFEIENBUEFDSVRZIHRvIGJlIHVwIHRvIDc1IDJLCisJCQkgKiBzZWN0b3JzIHBhc3QgdGhlIGxhc3QgcmVhZGFibGUgYmxvY2suCisJCQkgKiBUaGVyZWZvcmUsIGlmIHdlIGhpdCBhIG1lZGl1bSBlcnJvciB3aXRoaW4gdGhlCisJCQkgKiBsYXN0IDc1IDJLIHNlY3RvcnMsIHdlIGRlY3JlYXNlIHRoZSBzYXZlZCBzaXplCisJCQkgKiB2YWx1ZS4KKwkJCSAqLwogCQkJaWYgKHNlY3RvciA8IGdldF9jYXBhY2l0eShpbmZvLT5kaXNrKSAmJgogCQkJICAgIGRyaXZlLT5wcm9iZWRfY2FwYWNpdHkgLSBzZWN0b3IgPCA0ICogNzUpCiAJCQkJc2V0X2NhcGFjaXR5KGluZm8tPmRpc2ssIHNlY3Rvcik7CkBAIC0yMzQsNyArMjQyLDkgQEAKIAkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZmFpbGVkX2NtZDogMHgleFxuIiwKIAkJCSAgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCi0JaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOworCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7CisKKwllbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKIH0KIAogc3RhdGljIHZvaWQgY2Ryb21fZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUpCkBAIC0xNzkwLDE1ICsxODAwLDE3IEBACiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihkcml2ZSwgaW5mby0+ZHJpdmVyKTsKLQorCWRldmljZV9kZWwoJmluZm8tPmRldik7CiAJZGVsX2dlbmRpc2soaW5mby0+ZGlzayk7CiAKLQlpZGVfY2RfcHV0KGluZm8pOworCW11dGV4X2xvY2soJmlkZWNkX3JlZl9tdXRleCk7CisJcHV0X2RldmljZSgmaW5mby0+ZGV2KTsKKwltdXRleF91bmxvY2soJmlkZWNkX3JlZl9tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9jZF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgaWRlX2NkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gdG9faWRlX2RydihrcmVmLCBjZHJvbV9pbmZvKTsKKwlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IHRvX2lkZV9kcnYoZGV2LCBjZHJvbV9pbmZvKTsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmRldmluZm8gPSAmaW5mby0+ZGV2aW5mbzsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpbmZvLT5kcml2ZTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGluZm8tPmRpc2s7CkBAIC0xOTk3LDcgKzIwMDksMTIgQEAKIAogCWlkZV9pbml0X2Rpc2soZywgZHJpdmUpOwogCi0Ja3JlZl9pbml0KCZpbmZvLT5rcmVmKTsKKwlpbmZvLT5kZXYucGFyZW50ID0gJmRyaXZlLT5nZW5kZXY7CisJaW5mby0+ZGV2LnJlbGVhc2UgPSBpZGVfY2RfcmVsZWFzZTsKKwlkZXZfc2V0X25hbWUoJmluZm8tPmRldiwgZGV2X25hbWUoJmRyaXZlLT5nZW5kZXYpKTsKKworCWlmIChkZXZpY2VfcmVnaXN0ZXIoJmluZm8tPmRldikpCisJCWdvdG8gb3V0X2ZyZWVfZGlzazsKIAogCWluZm8tPmRyaXZlID0gZHJpdmU7CiAJaW5mby0+ZHJpdmVyID0gJmlkZV9jZHJvbV9kcml2ZXI7CkBAIC0yMDExLDcgKzIwMjgsNyBAQAogCWctPmRyaXZlcmZzX2RldiA9ICZkcml2ZS0+Z2VuZGV2OwogCWctPmZsYWdzID0gR0VOSERfRkxfQ0QgfCBHRU5IRF9GTF9SRU1PVkFCTEU7CiAJaWYgKGlkZV9jZHJvbV9zZXR1cChkcml2ZSkpIHsKLQkJaWRlX2NkX3JlbGVhc2UoJmluZm8tPmtyZWYpOworCQlwdXRfZGV2aWNlKCZpbmZvLT5kZXYpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTIwMjEsNiArMjAzOCw4IEBACiAJYWRkX2Rpc2soZyk7CiAJcmV0dXJuIDA7CiAKK291dF9mcmVlX2Rpc2s6CisJcHV0X2Rpc2soZyk7CiBvdXRfZnJlZV9jZDoKIAlrZnJlZShpbmZvKTsKIGZhaWxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5oIGIvZHJpdmVycy9pZGUvaWRlLWNkLmgKaW5kZXggYWM0MGQ2Yy4uYzg3OGJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmgKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmgKQEAgLTgwLDcgKzgwLDcgQEAKIAlpZGVfZHJpdmVfdAkJKmRyaXZlOwogCXN0cnVjdCBpZGVfZHJpdmVyCSpkcml2ZXI7CiAJc3RydWN0IGdlbmRpc2sJCSpkaXNrOwotCXN0cnVjdCBrcmVmCQlrcmVmOworCXN0cnVjdCBkZXZpY2UJCWRldjsKIAogCS8qIEJ1ZmZlciBmb3IgdGFibGUgb2YgY29udGVudHMuICBOVUxMIGlmIHdlIGhhdmVuJ3QgYWxsb2NhdGVkCiAJICAgYSBUT0MgYnVmZmVyIGZvciB0aGlzIGRldmljZSB5ZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM5NTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpAQCAtMCwwICsxLDE5MCBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisKK0RFRklORV9NVVRFWChpZGVfc2V0dGluZ19tdHgpOworCitpZGVfZGV2c2V0X2dldChpb18zMmJpdCwgaW9fMzJiaXQpOworCitzdGF0aWMgaW50IHNldF9pb18zMmJpdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJpdmUtPmlvXzMyYml0ID0gYXJnOworCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7CisKK3N0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOworCitzdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQorCWludCBlcnIgPSAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZXJyID0gMDsKKworCWlmIChhcmcpIHsKKwkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKKwkJCWVyciA9IC1FSU87CisJfSBlbHNlCisJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKKworb3V0OgorCXJldHVybiBlcnI7CisjZWxzZQorCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIC1FUEVSTTsKKyNlbmRpZgorfQorCisvKgorICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKKyAqLworc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKK3sKKwlzd2l0Y2ggKHJlcV9waW8pIHsKKwljYXNlIDIwMjoKKwljYXNlIDIwMToKKwljYXNlIDIwMDoKKwljYXNlIDEwMjoKKwljYXNlIDEwMToKKwljYXNlIDEwMDoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKKwljYXNlIDk6CisJY2FzZSA4OgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7CisJY2FzZSA3OgorCWNhc2UgNjoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgeworCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQl9IGVsc2UKKwkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7CisJfSBlbHNlIHsKKwkJaW50IGtlZXBfZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOworCisJCWlkZV9zZXRfcGlvKGRyaXZlLCBhcmcpOworCisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgeworCQkJaWYgKGtlZXBfZG1hKQorCQkJCWlkZV9kbWFfb24oZHJpdmUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKKworc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOworX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOworCitpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsCisJCSAgICAgICBpbnQgYXJnKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKHNldHRpbmctPmZsYWdzICYgRFNfU1lOQykpCisJCXJldHVybiBzZXR0aW5nLT5zZXQoZHJpdmUsIGFyZyk7CisKKwlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBfX0dGUF9XQUlUKTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOworCXJxLT5jbWRfbGVuID0gNTsKKwlycS0+Y21kWzBdID0gUkVRX0RFVlNFVF9FWEVDOworCSooaW50ICopJnJxLT5jbWRbMV0gPSBhcmc7CisJcnEtPnNwZWNpYWwgPSBzZXR0aW5nLT5zZXQ7CisKKwlpZiAoYmxrX2V4ZWN1dGVfcnEocSwgTlVMTCwgcnEsIDApKQorCQlyZXQgPSBycS0+ZXJyb3JzOworCWJsa19wdXRfcmVxdWVzdChycSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX2RldnNldChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpbnQgZXJyLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCkgPSBycS0+c3BlY2lhbDsKKworCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOworCWlmIChlcnIpCisJCXJxLT5lcnJvcnMgPSBlcnI7CisJZWxzZQorCQllcnIgPSAxOworCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKaW5kZXggMTE0NmY0Mi4uMWY4NmRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYwpAQCAtMTI1LDUgKzEyNSw1IEBACiAJSURFX1BST0NfREVWU0VUKG11bHRjb3VudCwJMCwgICAgMTYpLAogCUlERV9QUk9DX0RFVlNFVChub3dlcnIsCQkwLCAgICAgMSksCiAJSURFX1BST0NfREVWU0VUKHdjYWNoZSwJCTAsICAgICAxKSwKLQl7IDAgfSwKKwl7IE5VTEwgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggNzJlYmFiMC4uYTg3OGY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKKwlpbnQgaTsKIAogCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKIApAQCAtMTM2LDggKzEzNywxMyBAQAogCWVsc2UKIAkJaHdpZi0+c2dfZG1hX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAKLQlyZXR1cm4gZG1hX21hcF9zZyhod2lmLT5kZXYsIHNnLCBod2lmLT5zZ19uZW50cywKLQkJCSAgaHdpZi0+c2dfZG1hX2RpcmVjdGlvbik7CisJaSA9IGRtYV9tYXBfc2coaHdpZi0+ZGV2LCBzZywgaHdpZi0+c2dfbmVudHMsIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOworCWlmIChpKSB7CisJCWh3aWYtPm9yaWdfc2dfbmVudHMgPSBod2lmLT5zZ19uZW50czsKKwkJaHdpZi0+c2dfbmVudHMgPSBpOworCX0KKworCXJldHVybiBpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2J1aWxkX3NnbGlzdCk7CiAKQEAgLTE1Niw3ICsxNjIsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAotCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19uZW50cywKKwlkbWFfdW5tYXBfc2coaHdpZi0+ZGV2LCBod2lmLT5zZ190YWJsZSwgaHdpZi0+b3JpZ19zZ19uZW50cywKIAkJICAgICBod2lmLT5zZ19kbWFfZGlyZWN0aW9uKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXN0cm95X2RtYXRhYmxlKTsKQEAgLTQ2NCw2ICs0NzAsNjMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfdGltZW91dCk7CiAKKy8qCisgKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KKyAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKKyAqIGFsbCBhd2F5CisgKi8KK2lkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpZGVfc3RhcnRzdG9wX3QgcmV0ID0gaWRlX3N0b3BwZWQ7CisKKwkvKgorCSAqIGVuZCBjdXJyZW50IGRtYSB0cmFuc2FjdGlvbgorCSAqLworCisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgZXJyb3JcbiIsIGRyaXZlLT5uYW1lKTsKKwkJKHZvaWQpaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCXJldCA9IGlkZV9lcnJvcihkcml2ZSwgImRtYSB0aW1lb3V0IGVycm9yIiwKKwkJCQlod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgcmV0cnlcbiIsIGRyaXZlLT5uYW1lKTsKKwkJaHdpZi0+ZG1hX29wcy0+ZG1hX3RpbWVvdXQoZHJpdmUpOworCX0KKworCS8qCisJICogZGlzYWJsZSBkbWEgZm9yIG5vdywgYnV0IHJlbWVtYmVyIHRoYXQgd2UgZGlkIHNvIGJlY2F1c2Ugb2YKKwkgKiBhIHRpbWVvdXQgLS0gd2UnbGwgcmVlbmFibGUgYWZ0ZXIgd2UgZmluaXNoIHRoaXMgbmV4dCByZXF1ZXN0CisJICogKG9yIHJhdGhlciB0aGUgZmlyc3QgY2h1bmsgb2YgaXQpIGluIHBpby4KKwkgKi8KKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19ETUFfUElPX1JFVFJZOworCWRyaXZlLT5yZXRyeV9waW8rKzsKKwlpZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKworCS8qCisJICogdW4tYnVzeSBkcml2ZSBldGMgYW5kIG1ha2Ugc3VyZSByZXF1ZXN0IGlzIHNhbmUKKwkgKi8KKworCXJxID0gaHdpZi0+cnE7CisJaWYgKCFycSkKKwkJZ290byBvdXQ7CisKKwlod2lmLT5ycSA9IE5VTEw7CisKKwlycS0+ZXJyb3JzID0gMDsKKworCWlmICghcnEtPmJpbykKKwkJZ290byBvdXQ7CisKKwlycS0+c2VjdG9yID0gcnEtPmJpby0+Ymlfc2VjdG9yOworCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgPSBiaW9faW92ZWMocnEtPmJpbyktPmJ2X2xlbiA+PiA5OworCXJxLT5oYXJkX2N1cl9zZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwlycS0+YnVmZmVyID0gYmlvX2RhdGEocnEtPmJpbyk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaWYgKGh3aWYtPmRtYXRhYmxlX2NwdSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWVoLmMgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMxYjVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWVoLmMKQEAgLTAsMCArMSw0MjggQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2F0YV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKKwlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKKwkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7CisJCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisJfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgeworCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCisJCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKKwkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCisJCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLworCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCisJCQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7CisJCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCisJCQlkcml2ZS0+Y3JjX2NvdW50Kys7CisJCX0gZWxzZSBpZiAoZXJyICYgKEFUQV9CQksgfCBBVEFfVU5DKSkgeworCQkJLyogcmV0cmllcyB3b24ndCBoZWxwIHRoZXNlICovCisJCQlycS0+ZXJyb3JzID0gRVJST1JfTUFYOworCQl9IGVsc2UgaWYgKGVyciAmIEFUQV9UUkswTkYpIHsKKwkJCS8qIGhlbHAgaXQgZmluZCB0cmFjayB6ZXJvICovCisJCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFQ0FMOworCQl9CisJfQorCisJaWYgKChzdGF0ICYgQVRBX0RSUSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgJiYKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTykgPT0gMCkgeworCQlpbnQgbnNlY3QgPSBkcml2ZS0+bXVsdF9jb3VudCA/IGRyaXZlLT5tdWx0X2NvdW50IDogMTsKKworCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBSRUFELCBuc2VjdCAqIFNFQ1RPUl9TSVpFKTsKKwl9CisKKwlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKKwkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisKKwlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKKwkJKytycS0+ZXJyb3JzOworCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKKwl9CisKKwlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRUNBTCkgPT0gRVJST1JfUkVDQUwpCisJCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAxOworCisJKytycS0+ZXJyb3JzOworCisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFwaV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgICAgdTggc3RhdCwgdTggZXJyKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAorCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKKwkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KKwkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKKwl9IGVsc2UgeworCQkvKiBhZGQgZGVjb2RpbmcgZXJyb3Igc3R1ZmYgKi8KKwl9CisKKwlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQorCQkvKiBmb3JjZSBhbiBhYm9ydCAqLworCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lETEVJTU1FRElBVEUpOworCisJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7CisJCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7CisJfSBlbHNlIHsKKwkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7CisJCQkrK3JxLT5lcnJvcnM7CisJCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKKwkJfQorCQkrK3JxLT5lcnJvcnM7CisJfQorCisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IF9faWRlX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlyZXR1cm4gaWRlX2F0YV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7CisJcmV0dXJuIGlkZV9hdGFwaV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Cit9CisKKy8qKgorICoJaWRlX2Vycm9yCS0JaGFuZGxlIGFuIGVycm9yIG9uIHRoZSBJREUKKyAqCUBkcml2ZTogZHJpdmUgdGhlIGVycm9yIG9jY3VycmVkIG9uCisgKglAbXNnOiBtZXNzYWdlIHRvIHJlcG9ydAorICoJQHN0YXQ6IHN0YXR1cyBiaXRzCisgKgorICoJaWRlX2Vycm9yKCkgdGFrZXMgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1cm5lZCBieSB0aGUgZHJpdmUuCisgKglGb3Igbm9ybWFsIEkvTyB0aGF0IG1heSB3ZWxsIGluY2x1ZGUgcmV0cmllcy4gV2UgZGVhbCB3aXRoCisgKglib3RoIG5ldy1zdHlsZSAodGFza2ZpbGUpIGFuZCBvbGQgc3R5bGUgY29tbWFuZCBoYW5kbGluZyBoZXJlLgorICoJSW4gdGhlIGNhc2Ugb2YgdGFza2ZpbGUgY29tbWFuZCBoYW5kbGluZyB0aGVyZSBpcyB3b3JrIGxlZnQgdG8KKyAqCWRvCisgKi8KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm1zZywgdTggc3RhdCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJdTggZXJyOworCisJZXJyID0gaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCBtc2csIHN0YXQpOworCisJcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisJaWYgKHJxID09IE5VTEwpCisJCXJldHVybiBpZGVfc3RvcHBlZDsKKworCS8qIHJldHJ5IG9ubHkgIm5vcm1hbCIgSS9POiAqLworCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKSB7CisJCXJxLT5lcnJvcnMgPSAxOworCQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgc3RhdCwgZXJyKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCXJldHVybiBfX2lkZV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXJyb3IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisKKwlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCisJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7Cit9CisKKy8qIG5lZWRlZCBiZWxvdyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEoaWRlX2RyaXZlX3QgKiwgaW50KTsKKworLyoKKyAqIGF0YXBpX3Jlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbgorICogZXZlcnkgNTBtcyBkdXJpbmcgYW4gYXRhcGkgZHJpdmUgcmVzZXQgb3BlcmF0aW9uLiAgSWYgdGhlIGRyaXZlIGhhcyBub3QgeWV0CisgKiByZXNwb25kZWQsIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIKKyAqIGlzIHJlc3RhcnRlZCBmb3IgYW5vdGhlciA1MG1zLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGF0YXBpX3Jlc2V0X3BvbGxmdW5jKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggc3RhdDsKKworCVNFTEVDVF9EUklWRShkcml2ZSk7CisJdWRlbGF5KDEwKTsKKwlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmIChPS19TVEFUKHN0YXQsIDAsIEFUQV9CVVNZKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CisJZWxzZSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsCisJCQkJCU5VTEwpOworCQkJLyogY29udGludWUgcG9sbGluZyAqLworCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQl9CisJCS8qIGVuZCBvZiBwb2xsaW5nICovCisJCWh3aWYtPnBvbGxpbmcgPSAwOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBVEFQSSByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsCisJCQlkcml2ZS0+bmFtZSwgc3RhdCk7CisJCS8qIGRvIGl0IHRoZSBvbGQgZmFzaGlvbmVkIHdheSAqLworCQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAxKTsKKwl9CisJLyogZG9uZSBwb2xsaW5nICovCisJaHdpZi0+cG9sbGluZyA9IDA7CisJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAwKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaWRlX2h3aWZfdCAqaHdpZiwgdTggZXJyKQoreworCXN0YXRpYyBjb25zdCBjaGFyICplcnJfbWFzdGVyX3ZhbHNbXSA9CisJCXsgTlVMTCwgInBhc3NlZCIsICJmb3JtYXR0ZXIgZGV2aWNlIGVycm9yIiwKKwkJICAic2VjdG9yIGJ1ZmZlciBlcnJvciIsICJFQ0MgY2lyY3VpdHJ5IGVycm9yIiwKKwkJICAiY29udHJvbGxpbmcgTVBVIGVycm9yIiB9OworCisJdTggZXJyX21hc3RlciA9IGVyciAmIDB4N2Y7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNldDogbWFzdGVyOiAiLCBod2lmLT5uYW1lKTsKKwlpZiAoZXJyX21hc3RlciAmJiBlcnJfbWFzdGVyIDwgNikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBlcnJfbWFzdGVyX3ZhbHNbZXJyX21hc3Rlcl0pOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fQ09OVCAiZXJyb3IgKDB4JTAyeD8pIiwgZXJyKTsKKwlpZiAoZXJyICYgMHg4MCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiOyBzbGF2ZTogZmFpbGVkIik7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKworLyoKKyAqIHJlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbiBldmVyeSA1MG1zCisgKiBkdXJpbmcgYW4gaWRlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlcyBoYXZlIG5vdCB5ZXQgcmVzcG9uZGVkLAorICogYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKKyAqIGZvciBhbm90aGVyIDUwbXMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcmVzZXRfcG9sbGZ1bmMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCXU4IHRtcDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRfcG9sbCkgeworCQllcnIgPSBwb3J0X29wcy0+cmVzZXRfcG9sbChkcml2ZSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhvc3QgcmVzZXRfcG9sbCBmYWlsdXJlIGZvciAlcy5cbiIsCisJCQkJaHdpZi0+bmFtZSwgZHJpdmUtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwl0bXAgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCisJaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCQkJLyogY29udGludWUgcG9sbGluZyAqLworCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwKKwkJCWh3aWYtPm5hbWUsIHRtcCk7CisJCWRyaXZlLT5mYWlsdXJlcysrOworCQllcnIgPSAtRUlPOworCX0gZWxzZSAgeworCQl0bXAgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7CisKKwkJaWYgKHRtcCA9PSAxKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXQ6IHN1Y2Nlc3NcbiIsIGh3aWYtPm5hbWUpOworCQkJZHJpdmUtPmZhaWx1cmVzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaHdpZiwgdG1wKTsKKwkJCWRyaXZlLT5mYWlsdXJlcysrOworCQkJZXJyID0gLUVJTzsKKwkJfQorCX0KK291dDoKKwlod2lmLT5wb2xsaW5nID0gMDsJLyogZG9uZSBwb2xsaW5nICovCisJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCBlcnIpOworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpbnQgbGVnYWN5ID0gKGRyaXZlLT5pZFtBVEFfSURfQ0ZTX0VOQUJMRV8yXSAmIDB4MDQwMCkgPyAwIDogMTsKKworCWRyaXZlLT5zcGVjaWFsLmFsbCA9IDA7CisJZHJpdmUtPnNwZWNpYWwuYi5zZXRfZ2VvbWV0cnkgPSBsZWdhY3k7CisJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSAgPSBsZWdhY3k7CisKKwlkcml2ZS0+bXVsdF9jb3VudCA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BBUktFRDsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwICYmCisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkKKwkJZHJpdmUtPm11bHRfcmVxID0gMDsKKworCWlmIChkcml2ZS0+bXVsdF9yZXEgIT0gZHJpdmUtPm11bHRfY291bnQpCisJCWRyaXZlLT5zcGVjaWFsLmIuc2V0X211bHRtb2RlID0gMTsKK30KKworc3RhdGljIHZvaWQgcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGRyaXZlLT5od2lmLT5wb3J0X29wczsKKworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCWlkZV9kaXNrX3ByZV9yZXNldChkcml2ZSk7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QT1NUX1JFU0VUOworCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSB7CisJCWlmIChkcml2ZS0+Y3JjX2NvdW50KQorCQkJaWRlX2NoZWNrX2RtYV9jcmMoZHJpdmUpOworCQllbHNlCisJCQlpZGVfZG1hX29mZihkcml2ZSk7CisJfQorCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDApIHsKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkgeworCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKKwkJCWRyaXZlLT5pb18zMmJpdCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cHJlX3Jlc2V0KQorCQlwb3J0X29wcy0+cHJlX3Jlc2V0KGRyaXZlKTsKKworCWlmIChkcml2ZS0+Y3VycmVudF9zcGVlZCAhPSAweGZmKQorCQlkcml2ZS0+ZGVzaXJlZF9zcGVlZCA9IGRyaXZlLT5jdXJyZW50X3NwZWVkOworCWRyaXZlLT5jdXJyZW50X3NwZWVkID0gMHhmZjsKK30KKworLyoKKyAqIGRvX3Jlc2V0MSgpIGF0dGVtcHRzIHRvIHJlY292ZXIgYSBjb25mdXNlZCBkcml2ZSBieSByZXNldHRpbmcgaXQuCisgKiBVbmZvcnR1bmF0ZWx5LCByZXNldHRpbmcgYSBkaXNrIGRyaXZlIGFjdHVhbGx5IHJlc2V0cyBhbGwgZGV2aWNlcyBvbgorICogdGhlIHNhbWUgaW50ZXJmYWNlLCBzbyBpdCBjYW4gcmVhbGx5IGJlIHRob3VnaHQgb2YgYXMgcmVzZXR0aW5nIHRoZQorICogaW50ZXJmYWNlIHJhdGhlciB0aGFuIHJlc2V0dGluZyB0aGUgZHJpdmUuCisgKgorICogQVRBUEkgZGV2aWNlcyBoYXZlIHRoZWlyIG93biByZXNldCBtZWNoYW5pc20gd2hpY2ggYWxsb3dzIHRoZW0gdG8gYmUKKyAqIGluZGl2aWR1YWxseSByZXNldCB3aXRob3V0IGNsb2JiZXJpbmcgb3RoZXIgZGV2aWNlcyBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuCisgKgorICogVW5mb3J0dW5hdGVseSwgdGhlIElERSBpbnRlcmZhY2UgZG9lcyBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIGxldAorICogdXMga25vdyB3aGVuIHRoZSByZXNldCBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLCBzbyB3ZSBtdXN0IHBvbGwgZm9yIHRoaXMuCisgKiBFcXVhbGx5IHBvb3IsIHRob3VnaCwgaXMgdGhlIGZhY3QgdGhhdCB0aGlzIG1heSBhIHZlcnkgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLAorICogKHVwIHRvIDMwIHNlY29uZHMgd29yc3RjYXNlKS4gIFNvLCBpbnN0ZWFkIG9mIGJ1c3ktd2FpdGluZyBoZXJlIGZvciBpdCwKKyAqIHdlIHNldCBhIHRpbWVyIHRvIHBvbGwgYXQgNTBtcyBpbnRlcnZhbHMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRvX25vdF90cnlfYXRhcGkpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHM7CisJaWRlX2RyaXZlX3QgKnRkcml2ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OworCWludCBpOworCURFRklORV9XQUlUKHdhaXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKworCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLworCUJVR19PTihod2lmLT5oYW5kbGVyICE9IE5VTEwpOworCisJLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3QgdHJ5IGFuIEFUQVBJIFNSU1QuICovCisJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiAhZG9fbm90X3RyeV9hdGFwaSkgeworCQlwcmVfcmVzZXQoZHJpdmUpOworCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCQl1ZGVsYXkoMjApOworCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7CisJCW5kZWxheSg0MDApOworCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CisJCWh3aWYtPnBvbGxpbmcgPSAxOworCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIGlkZV9zdGFydGVkOworCX0KKworCS8qIFdlIG11c3Qgbm90IGRpc3R1cmIgZGV2aWNlcyBpbiB0aGUgSURFX0RGTEFHX1BBUktFRCBzdGF0ZS4gKi8KKwlkbyB7CisJCXVuc2lnbmVkIGxvbmcgbm93OworCisJCXByZXBhcmVfdG9fd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXRpbWVvdXQgPSBqaWZmaWVzOworCQlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCB0ZHJpdmUsIGh3aWYpIHsKKwkJCWlmICgodGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEKSAmJgorCQkJICAgIHRpbWVfYWZ0ZXIodGRyaXZlLT5zbGVlcCwgdGltZW91dCkpCisJCQkJdGltZW91dCA9IHRkcml2ZS0+c2xlZXA7CisJCX0KKworCQlub3cgPSBqaWZmaWVzOworCQlpZiAodGltZV9iZWZvcmVfZXEodGltZW91dCwgbm93KSkKKwkJCWJyZWFrOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHRpbWVvdXQgLSBub3cpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCX0gd2hpbGUgKHRpbWVvdXQpOworCWZpbmlzaF93YWl0KCZpZGVfcGFya193cSwgJndhaXQpOworCisJLyoKKwkgKiBGaXJzdCwgcmVzZXQgYW55IGRldmljZSBzdGF0ZSBkYXRhIHdlIHdlcmUgbWFpbnRhaW5pbmcKKwkgKiBmb3IgYW55IG9mIHRoZSBkcml2ZXMgb24gdGhpcyBpbnRlcmZhY2UuCisJICovCisJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikKKwkJcHJlX3Jlc2V0KHRkcml2ZSk7CisKKwlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIC1FTlhJTyk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBhbHNvIHNldCBuSUVOIHdoaWxlIHJlc2V0dGluZyB0aGUgZGV2aWNlLAorCSAqIHRvIG1hc2sgdW53YW50ZWQgaW50ZXJydXB0cyBmcm9tIHRoZSBpbnRlcmZhY2UgZHVyaW5nIHRoZSByZXNldC4KKwkgKiBIb3dldmVyLCBkdWUgdG8gdGhlIGRlc2lnbiBvZiBQQyBoYXJkd2FyZSwgdGhpcyB3aWxsIGNhdXNlIGFuCisJICogaW1tZWRpYXRlIGludGVycnVwdCBkdWUgdG8gdGhlIGVkZ2UgdHJhbnNpdGlvbiBpdCBwcm9kdWNlcy4KKwkgKiBUaGlzIHNpbmdsZSBpbnRlcnJ1cHQgZ2l2ZXMgdXMgYSAiZmFzdCBwb2xsIiBmb3IgZHJpdmVzIHRoYXQKKwkgKiByZWNvdmVyIGZyb20gcmVzZXQgdmVyeSBxdWlja2x5LCBzYXZpbmcgdXMgdGhlIGZpcnN0IDUwbXMgd2FpdCB0aW1lLgorCSAqCisJICogVE9ETzogYWRkIC0+c29mdHJlc2V0IG1ldGhvZCBhbmQgc3RvcCBhYnVzaW5nIC0+c2V0X2lycQorCSAqLworCS8qIHNldCBTUlNUIGFuZCBuSUVOICovCisJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDQpOworCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLworCXVkZWxheSgxMCk7CisJLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAodW5sZXNzIGRldmljZSBpcyBvbiB0aGUgcXVpcmsgbGlzdCkgKi8KKwl0cF9vcHMtPnNldF9pcnEoaHdpZiwgZHJpdmUtPnF1aXJrX2xpc3QgPT0gMik7CisJLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCisJdWRlbGF5KDEwKTsKKwlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CisJaHdpZi0+cG9sbGluZyA9IDE7CisJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCisJLyoKKwkgKiBTb21lIHdlaXJkIGNvbnRyb2xsZXIgbGlrZSByZXNldHRpbmcgdGhlbXNlbHZlcyB0byBhIHN0cmFuZ2UKKwkgKiBzdGF0ZSB3aGVuIHRoZSBkaXNrcyBhcmUgcmVzZXQgdGhpcyB3YXkuIEF0IGxlYXN0LCB0aGUgV2luYm9uZAorCSAqIDU1MyBkb2N1bWVudGF0aW9uIHNheXMgdGhhdAorCSAqLworCXBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldHByb2MpCisJCXBvcnRfb3BzLT5yZXNldHByb2MoZHJpdmUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBpZGVfc3RhcnRlZDsKK30KKworLyoKKyAqIGlkZV9kb19yZXNldCgpIGlzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgZHJpdmUvaW50ZXJmYWNlIHJlc2V0IGNvZGUuCisgKi8KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGlkZV9kb19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggM2VhYjFjNi4uMzE3ZWM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtMzI3LDggKzMyNywxMCBAQAogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCi0JaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCWlmIChibGtfZnNfcmVxdWVzdChycSkgfHwgcGMtPnJlcV94ZmVyKSB7CisJCWlkZV9pbml0X3NnX2NtZChkcml2ZSwgcnEpOworCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJfQogCiAJcGMtPnNnID0gaHdpZi0+c2dfdGFibGU7CiAJcGMtPnNnX2NudCA9IGh3aWYtPnNnX25lbnRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYwppbmRleCAzZWM3NjJjLi5mY2Q0ZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYwpAQCAtMjksNSArMjksNSBAQAogCUlERV9QUk9DX0RFVlNFVChiaW9zX2hlYWQsIDAsICAyNTUpLAogCUlERV9QUk9DX0RFVlNFVChiaW9zX3NlY3QsIDAsICAgNjMpLAogCUlERV9QUk9DX0RFVlNFVCh0aWNrcywJICAgMCwgIDI1NSksCi0JeyAwIH0sCisJeyBOVUxMIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWdkLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwppbmRleCA3ODU3YjIwLi4wNDcxMDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwpAQCAtMjUsNyArMjUsNyBAQAogCiBzdGF0aWMgREVGSU5FX01VVEVYKGlkZV9kaXNrX3JlZl9tdXRleCk7CiAKLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKik7CitzdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGVfZGlza19nZXQoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CkBAIC0zNyw3ICszNyw3IEBACiAJCWlmIChpZGVfZGV2aWNlX2dldChpZGtwLT5kcml2ZSkpCiAJCQlpZGtwID0gTlVMTDsKIAkJZWxzZQotCQkJa3JlZl9nZXQoJmlka3AtPmtyZWYpOworCQkJZ2V0X2RldmljZSgmaWRrcC0+ZGV2KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpZGVfZGlza19yZWZfbXV0ZXgpOwogCXJldHVybiBpZGtwOwpAQCAtNDgsNyArNDgsNyBAQAogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwogCiAJbXV0ZXhfbG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKLQlrcmVmX3B1dCgmaWRrcC0+a3JlZiwgaWRlX2Rpc2tfcmVsZWFzZSk7CisJcHV0X2RldmljZSgmaWRrcC0+ZGV2KTsKIAlpZGVfZGV2aWNlX3B1dChkcml2ZSk7CiAJbXV0ZXhfdW5sb2NrKCZpZGVfZGlza19yZWZfbXV0ZXgpOwogfQpAQCAtNjYsMTcgKzY2LDE4IEBACiAJc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOwogCiAJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGlka3AtPmRyaXZlcik7Ci0KKwlkZXZpY2VfZGVsKCZpZGtwLT5kZXYpOwogCWRlbF9nZW5kaXNrKGcpOwotCiAJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CiAKLQlpZGVfZGlza19wdXQoaWRrcCk7CisJbXV0ZXhfbG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlwdXRfZGV2aWNlKCZpZGtwLT5kZXYpOworCW11dGV4X3VubG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIGlkZV9kaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSB0b19pZGVfZHJ2KGtyZWYsIGlkZV9kaXNrX29iaik7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IHRvX2lkZV9kcnYoZGV2LCBpZGVfZGlza19vYmopOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwogCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKIApAQCAtMzQ4LDcgKzM0OSwxMiBAQAogCiAJaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7CiAKLQlrcmVmX2luaXQoJmlka3AtPmtyZWYpOworCWlka3AtPmRldi5wYXJlbnQgPSAmZHJpdmUtPmdlbmRldjsKKwlpZGtwLT5kZXYucmVsZWFzZSA9IGlkZV9kaXNrX3JlbGVhc2U7CisJZGV2X3NldF9uYW1lKCZpZGtwLT5kZXYsIGRldl9uYW1lKCZkcml2ZS0+Z2VuZGV2KSk7CisKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZpZGtwLT5kZXYpKQorCQlnb3RvIG91dF9mcmVlX2Rpc2s7CiAKIAlpZGtwLT5kcml2ZSA9IGRyaXZlOwogCWlka3AtPmRyaXZlciA9ICZpZGVfZ2RfZHJpdmVyOwpAQCAtMzczLDYgKzM3OSw4IEBACiAJYWRkX2Rpc2soZyk7CiAJcmV0dXJuIDA7CiAKK291dF9mcmVlX2Rpc2s6CisJcHV0X2Rpc2soZyk7CiBvdXRfZnJlZV9pZGtwOgogCWtmcmVlKGlka3ApOwogZmFpbGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWdkLmggYi9kcml2ZXJzL2lkZS9pZGUtZ2QuaAppbmRleCBhODY3NzlmLi5iNjA0YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZ2QuaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuaApAQCAtMTcsNyArMTcsNyBAQAogCWlkZV9kcml2ZV90CQkqZHJpdmU7CiAJc3RydWN0IGlkZV9kcml2ZXIJKmRyaXZlcjsKIAlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7Ci0Jc3RydWN0IGtyZWYJCWtyZWY7CisJc3RydWN0IGRldmljZQkJZGV2OwogCXVuc2lnbmVkIGludAkJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCiAKIAkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjQzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKQEAgLTAsMCArMSwzMTYgQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisvKgorICoJQ29udmVudGlvbmFsIFBJTyBvcGVyYXRpb25zIGZvciBBVEEgZGV2aWNlcworICovCisKK3N0YXRpYyB1OCBpZGVfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlyZXR1cm4gKHU4KSBpbmIocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9vdXRiKHU4IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCW91dGIodmFsLCBwb3J0KTsKK30KKworLyoKKyAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKKyAqLworCitzdGF0aWMgdTggaWRlX21tX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgaWRlX21tX291dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Cit9CisKK3ZvaWQgaWRlX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJd3JpdGViKGNtZCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7CisJZWxzZQorCQlvdXRiKGNtZCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjX2NvbW1hbmQpOworCit1OCBpZGVfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKKwllbHNlCisJCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfc3RhdHVzKTsKKwordTggaWRlX3JlYWRfYWx0c3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2FsdHN0YXR1cyk7CisKK3ZvaWQgaWRlX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQoreworCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOworCisJaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLworCQljdGwgfD0gNDsKKwkJb24gJj0gfjQ7CisJfQorCisJY3RsIHw9IG9uID8gMCA6IDI7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJb3V0YihjdGwsIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKKwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisKKwlpZiAobW1pbykKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCWVsc2UKKwkJdGZfb3V0YiA9IGlkZV9vdXRiOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJCUhJSEkgPSAweEZGOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOworCisJCWlmIChtbWlvKQorCQkJd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJb3V0dyhkYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJCXRmX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJCXRmX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwkJdGZfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCQl0Zl9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwkJdGZfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCQl0Zl9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCisJCQkgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9sb2FkKTsKKwordm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4ICgqdGZfaW5iKSh1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCisJaWYgKG1taW8pIHsKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCQl0Zl9pbmIgID0gaWRlX21tX2luYjsKKwl9IGVsc2UgeworCQl0Zl9vdXRiID0gaWRlX291dGI7CisJCXRmX2luYiAgPSBpZGVfaW5iOworCX0KKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJCXUxNiBkYXRhOworCisJCWlmIChtbWlvKQorCQkJZGF0YSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKworCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOworCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCisJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLworCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCQl0Zi0+ZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJCXRmLT5uc2VjdCAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCQl0Zi0+bGJhbCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCQl0Zi0+bGJhbSAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCQl0Zi0+bGJhaCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJCXRmLT5kZXZpY2UgPSB0Zl9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCQl0Zi0+aG9iX2ZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9yZWFkKTsKKworLyoKKyAqIFNvbWUgbG9jYWxidXMgRUlERSBpbnRlcmZhY2VzIHJlcXVpcmUgYSBzcGVjaWFsIGFjY2VzcyBzZXF1ZW5jZQorICogd2hlbiB1c2luZyAzMi1iaXQgSS9PIGluc3RydWN0aW9ucyB0byB0cmFuc2ZlciBkYXRhLiAgV2UgY2FsbCB0aGlzCisgKiB0aGUgInZsYl9zeW5jIiBzZXF1ZW5jZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgc3VjY2Vzc2l2ZSByZWFkcworICogb2YgdGhlIHNlY3RvciBjb3VudCByZWdpc3RlciBsb2NhdGlvbiwgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCisgKiB0byBlbnN1cmUgdGhhdCB0aGUgcmVhZHMgYWxsIGhhcHBlbiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQgYXRhX3ZsYl9zeW5jKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwkodm9pZClpbmIocG9ydCk7CisJKHZvaWQpaW5iKHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKmZyb20qIHRoZSBJREUgaW50ZXJmYWNlCisgKgorICogVGhlc2Ugcm91dGluZXMgd2lsbCByb3VuZCB1cCBhbnkgcmVxdWVzdCBmb3IgYW4gb2RkIG51bWJlciBvZiBieXRlcywKKyAqIHNvIGlmIGFuIG9kZCBsZW4gaXMgc3BlY2lmaWVkLCBiZSBzdXJlIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUKKyAqIGV4dHJhIGJ5dGUgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLgorICovCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCisJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisKKwlsZW4rKzsKKworCWlmIChpb18zMmJpdCkgeworCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCX0KKworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX2luc2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJaW5zbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWlmICgobGVuICYgMykgPj0gMikgeworCQkJaWYgKG1taW8pCisJCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAorCQkJCQkJKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJaW5zdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWVsc2UKKwkJCWluc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnB1dF9kYXRhKTsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKnRvKiB0aGUgSURFIGludGVyZmFjZQorICovCit2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAorCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKKwl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKworCWxlbisrOworCisJaWYgKGlvXzMyYml0KSB7CisJCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgeworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJfQorCisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJb3V0c2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKKwkJCWlmIChtbWlvKQorCQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCisJCQkJCQkgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJb3V0c3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwkJZWxzZQorCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9vdXRwdXRfZGF0YSk7CisKK2NvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IDllZTUxYWQuLjJlOTI0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWRlX2VuZF9kcml2ZV9jbWQpOwogCi1zdGF0aWMgdm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWYgKHJxLT5ycV9kaXNrKSB7CiAJCXN0cnVjdCBpZGVfZHJpdmVyICpkcnY7CkBAIC0yMDcsMTMzICsyMDcsNiBAQAogCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKLQkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7Ci0JCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0JfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgewotCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCi0JCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKLQkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCi0JCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLwotCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCi0JCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7Ci0JCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCi0JCQlkcml2ZS0+Y3JjX2NvdW50Kys7Ci0JCX0gZWxzZSBpZiAoZXJyICYgKEFUQV9CQksgfCBBVEFfVU5DKSkgewotCQkJLyogcmV0cmllcyB3b24ndCBoZWxwIHRoZXNlICovCi0JCQlycS0+ZXJyb3JzID0gRVJST1JfTUFYOwotCQl9IGVsc2UgaWYgKGVyciAmIEFUQV9UUkswTkYpIHsKLQkJCS8qIGhlbHAgaXQgZmluZCB0cmFjayB6ZXJvICovCi0JCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFQ0FMOwotCQl9Ci0JfQotCi0JaWYgKChzdGF0ICYgQVRBX0RSUSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgJiYKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTykgPT0gMCkgewotCQlpbnQgbnNlY3QgPSBkcml2ZS0+bXVsdF9jb3VudCA/IGRyaXZlLT5tdWx0X2NvdW50IDogMTsKLQotCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBSRUFELCBuc2VjdCAqIFNFQ1RPUl9TSVpFKTsKLQl9Ci0KLQlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKLQkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKLQkJKytycS0+ZXJyb3JzOwotCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQl9Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRUNBTCkgPT0gRVJST1JfUkVDQUwpCi0JCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAxOwotCi0JKytycS0+ZXJyb3JzOwotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFwaV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQotCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAotCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKLQkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KLQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKLQl9IGVsc2UgewotCQkvKiBhZGQgZGVjb2RpbmcgZXJyb3Igc3R1ZmYgKi8KLQl9Ci0KLQlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQotCQkvKiBmb3JjZSBhbiBhYm9ydCAqLwotCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lETEVJTU1FRElBVEUpOwotCi0JaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7Ci0JCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7Ci0JfSBlbHNlIHsKLQkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7Ci0JCQkrK3JxLT5lcnJvcnM7Ci0JCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQkJfQotCQkrK3JxLT5lcnJvcnM7Ci0JfQotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90Ci1fX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCXJldHVybiBpZGVfYXRhX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLQlyZXR1cm4gaWRlX2F0YXBpX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLX0KLQotLyoqCi0gKglpZGVfZXJyb3IJLQloYW5kbGUgYW4gZXJyb3Igb24gdGhlIElERQotICoJQGRyaXZlOiBkcml2ZSB0aGUgZXJyb3Igb2NjdXJyZWQgb24KLSAqCUBtc2c6IG1lc3NhZ2UgdG8gcmVwb3J0Ci0gKglAc3RhdDogc3RhdHVzIGJpdHMKLSAqCi0gKglpZGVfZXJyb3IoKSB0YWtlcyBhY3Rpb24gYmFzZWQgb24gdGhlIGVycm9yIHJldHVybmVkIGJ5IHRoZSBkcml2ZS4KLSAqCUZvciBub3JtYWwgSS9PIHRoYXQgbWF5IHdlbGwgaW5jbHVkZSByZXRyaWVzLiBXZSBkZWFsIHdpdGgKLSAqCWJvdGggbmV3LXN0eWxlICh0YXNrZmlsZSkgYW5kIG9sZCBzdHlsZSBjb21tYW5kIGhhbmRsaW5nIGhlcmUuCi0gKglJbiB0aGUgY2FzZSBvZiB0YXNrZmlsZSBjb21tYW5kIGhhbmRsaW5nIHRoZXJlIGlzIHdvcmsgbGVmdCB0bwotICoJZG8KLSAqLwotIAotaWRlX3N0YXJ0c3RvcF90IGlkZV9lcnJvciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0YXQpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCXU4IGVycjsKLQotCWVyciA9IGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgbXNnLCBzdGF0KTsKLQotCXJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlmIChycSA9PSBOVUxMKQotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0KLQkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KLQlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlycS0+ZXJyb3JzID0gMTsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQlyZXR1cm4gX19pZGVfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Vycm9yKTsKLQogc3RhdGljIHZvaWQgaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmKQogewogCXRmLT5uc2VjdCAgID0gZHJpdmUtPnNlY3Q7CkBAIC00OTAsNzEgKzM2MywxNiBAQAogIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKLWludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywKLQkJICAgICAgIGludCBhcmcpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWludCByZXQgPSAwOwotCi0JaWYgKCEoc2V0dGluZy0+ZmxhZ3MgJiBEU19TWU5DKSkKLQkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgYXJnKTsKLQotCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOwotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7Ci0JcnEtPmNtZF9sZW4gPSA1OwotCXJxLT5jbWRbMF0gPSBSRVFfREVWU0VUX0VYRUM7Ci0JKihpbnQgKikmcnEtPmNtZFsxXSA9IGFyZzsKLQlycS0+c3BlY2lhbCA9IHNldHRpbmctPnNldDsKLQotCWlmIChibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMCkpCi0JCXJldCA9IHJxLT5lcnJvcnM7Ci0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZGV2c2V0X2V4ZWN1dGUpOwotCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9zcGVjaWFsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXU4IGNtZCA9IHJxLT5jbWRbMF07CiAKLQlpZiAoY21kID09IFJFUV9QQVJLX0hFQURTIHx8IGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTKSB7Ci0JCWlkZV90YXNrX3QgdGFzazsKLQkJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay50ZjsKLQotCQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JCWlmIChjbWQgPT0gUkVRX1BBUktfSEVBRFMpIHsKLQkJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOwotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7Ci0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKLQkJCXRmLT5mZWF0dXJlID0gMHg0NDsKLQkJCXRmLT5sYmFsID0gMHg0YzsKLQkJCXRmLT5sYmFtID0gMHg0ZTsKLQkJCXRmLT5sYmFoID0gMHg1NTsKLQkJCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOwotCQl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCi0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOwotCi0JCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQkJdGFzay5ycSA9IHJxOwotCQlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7Ci0JCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOwotCX0KLQogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSRVFfUEFSS19IRUFEUzoKKwljYXNlIFJFUV9VTlBBUktfSEVBRFM6CisJCXJldHVybiBpZGVfZG9fcGFya191bnBhcmsoZHJpdmUsIHJxKTsKIAljYXNlIFJFUV9ERVZTRVRfRVhFQzoKLQl7Ci0JCWludCBlcnIsICgqc2V0ZnVuYykoaWRlX2RyaXZlX3QgKiwgaW50KSA9IHJxLT5zcGVjaWFsOwotCi0JCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOwotCQlpZiAoZXJyKQotCQkJcnEtPmVycm9ycyA9IGVycjsKLQkJZWxzZQotCQkJZXJyID0gMTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQorCQlyZXR1cm4gaWRlX2RvX2RldnNldChkcml2ZSwgcnEpOwogCWNhc2UgUkVRX0RSSVZFX1JFU0VUOgogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAlkZWZhdWx0OgpAQCAtODIwLDYzICs2MzgsNiBAQAogCQlibGtfcGx1Z19kZXZpY2UocSk7CiB9CiAKLS8qCi0gKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KLSAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKLSAqIGFsbCBhd2F5Ci0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaWRlX3N0YXJ0c3RvcF90IHJldCA9IGlkZV9zdG9wcGVkOwotCi0JLyoKLQkgKiBlbmQgY3VycmVudCBkbWEgdHJhbnNhY3Rpb24KLQkgKi8KLQotCWlmIChlcnJvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCSh2b2lkKWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwotCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCi0JCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKLQl9Ci0KLQkvKgotCSAqIGRpc2FibGUgZG1hIGZvciBub3csIGJ1dCByZW1lbWJlciB0aGF0IHdlIGRpZCBzbyBiZWNhdXNlIG9mCi0JICogYSB0aW1lb3V0IC0tIHdlJ2xsIHJlZW5hYmxlIGFmdGVyIHdlIGZpbmlzaCB0aGlzIG5leHQgcmVxdWVzdAotCSAqIChvciByYXRoZXIgdGhlIGZpcnN0IGNodW5rIG9mIGl0KSBpbiBwaW8uCi0JICovCi0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE1BX1BJT19SRVRSWTsKLQlkcml2ZS0+cmV0cnlfcGlvKys7Ci0JaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0KLQkvKgotCSAqIHVuLWJ1c3kgZHJpdmUgZXRjIGFuZCBtYWtlIHN1cmUgcmVxdWVzdCBpcyBzYW5lCi0JICovCi0KLQlycSA9IGh3aWYtPnJxOwotCWlmICghcnEpCi0JCWdvdG8gb3V0OwotCi0JaHdpZi0+cnEgPSBOVUxMOwotCi0JcnEtPmVycm9ycyA9IDA7Ci0KLQlpZiAoIXJxLT5iaW8pCi0JCWdvdG8gb3V0OwotCi0JcnEtPnNlY3RvciA9IHJxLT5iaW8tPmJpX3NlY3RvcjsKLQlycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2lvdmVjKHJxLT5iaW8pLT5idl9sZW4gPj4gOTsKLQlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7Ci0JcnEtPmJ1ZmZlciA9IGJpb19kYXRhKHJxLT5iaW8pOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGlkZV9wbHVnX2RldmljZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CkBAIC04ODgsNiArNjQ5LDI5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgZHJpdmVfaXNfcmVhZHkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzdGF0ID0gMDsKKworCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQorCQlyZXR1cm4gaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKTsKKworCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkciAmJgorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19CUk9LRU5fQUxUU1RBVFVTKSA9PSAwKQorCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKTsKKwllbHNlCisJCS8qIE5vdGU6IHRoaXMgbWF5IGNsZWFyIGEgcGVuZGluZyBJUlEhISAqLworCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmIChzdGF0ICYgQVRBX0JVU1kpCisJCS8qIGRyaXZlIGJ1c3k6IGRlZmluaXRlbHkgbm90IGludGVycnVwdGluZyAqLworCQlyZXR1cm4gMDsKKworCS8qIGRyaXZlIHJlYWR5OiAqbWlnaHQqIGJlIGludGVycnVwdGluZyAqLworCXJldHVybiAxOworfQorCiAvKioKICAqCWlkZV90aW1lcl9leHBpcnkJLQloYW5kbGUgbGFjayBvZiBhbiBJREUgaW50ZXJydXB0CiAgKglAZGF0YTogdGltZXIgY2FsbGJhY2sgbWFnaWMgKGh3aWYpCkBAIC05MDgsNyArNjkyLDcgQEAKIAlpZGVfZHJpdmVfdAkqdW5pbml0aWFsaXplZF92YXIoZHJpdmUpOwogCWlkZV9oYW5kbGVyX3QJKmhhbmRsZXI7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKLQl1bnNpZ25lZCBsb25nCXdhaXQgPSAtMTsKKwlpbnQJCXdhaXQgPSAtMTsKIAlpbnQJCXBsdWdfZGV2aWNlID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CkBAIC0xMTYyLDU0ICs5NDYsNyBAQAogCiAJcmV0dXJuIGlycV9yZXQ7CiB9Ci0KLS8qKgotICoJaWRlX2RvX2RyaXZlX2NtZAktCWlzc3VlIElERSBzcGVjaWFsIGNvbW1hbmQKLSAqCUBkcml2ZTogZGV2aWNlIHRvIGlzc3VlIGNvbW1hbmQKLSAqCUBycTogcmVxdWVzdCB0byBpc3N1ZQotICoKLSAqCVRoaXMgZnVuY3Rpb24gaXNzdWVzIGEgc3BlY2lhbCBJREUgZGV2aWNlIHJlcXVlc3QKLSAqCW9udG8gdGhlIHJlcXVlc3QgcXVldWUuCi0gKgotICoJdGhlIHJxIGlzIHF1ZXVlZCBhdCB0aGUgaGVhZCBvZiB0aGUgcmVxdWVzdCBxdWV1ZSwgZGlzcGxhY2luZwotICoJdGhlIGN1cnJlbnRseS1iZWluZy1wcm9jZXNzZWQgcmVxdWVzdCBhbmQgdGhpcyBmdW5jdGlvbgotICoJcmV0dXJucyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBuZXcgcnEgdG8gYmUKLSAqCWNvbXBsZXRlZC4gIFRoaXMgaXMgVkVSWSBEQU5HRVJPVVMsIGFuZCBpcyBpbnRlbmRlZCBmb3IKLSAqCWNhcmVmdWwgdXNlIGJ5IHRoZSBBVEFQSSB0YXBlL2Nkcm9tIGRyaXZlciBjb2RlLgotICovCi0KLXZvaWQgaWRlX2RvX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlfX2Vsdl9hZGRfcmVxdWVzdChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woaWRlX2RvX2RyaXZlX2NtZCk7Ci0KLXZvaWQgaWRlX3BrdGNtZF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTMyIHRmX2ZsYWdzLCB1MTYgYmNvdW50LCB1OCBkbWEpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWlkZV90YXNrX3QgdGFzazsKLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKLQkJCUlERV9URkxBR19PVVRfRkVBVFVSRSB8IHRmX2ZsYWdzOwotCXRhc2sudGYuZmVhdHVyZSA9IGRtYTsJCS8qIFVzZSBQSU8vRE1BICovCi0JdGFzay50Zi5sYmFtICAgID0gYmNvdW50ICYgMHhmZjsKLQl0YXNrLnRmLmxiYWggICAgPSAoYmNvdW50ID4+IDgpICYgMHhmZjsKLQotCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCAmdGFzay50Zik7Ci0JaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOwotCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQlod2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3BrdGNtZF90Zl9sb2FkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnRyKTsKIAogdm9pZCBpZGVfcGFkX3RyYW5zZmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHdyaXRlLCBpbnQgbGVuKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggNzUzYjkyZS4uMzE3YzVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC0yNywzNSArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLS8qCi0gKglDb252ZW50aW9uYWwgUElPIG9wZXJhdGlvbnMgZm9yIEFUQSBkZXZpY2VzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9pbmIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlyZXR1cm4gKHU4KSBpbmIocG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9vdXRiICh1OCB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlvdXRiKHZhbCwgcG9ydCk7Ci19Ci0KLS8qCi0gKglNTUlPIG9wZXJhdGlvbnMsIHR5cGljYWxseSB1c2VkIGZvciBTQVRBIGNvbnRyb2xsZXJzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9tbV9pbmIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlyZXR1cm4gKHU4KSByZWFkYigodm9pZCBfX2lvbWVtICopIHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfbW1fb3V0YiAodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci19Ci0KLXZvaWQgU0VMRUNUX0RSSVZFIChpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIFNFTEVDVF9EUklWRShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CkBAIC03OCwyNzUgKzUwLDYgQEAKIAkJcG9ydF9vcHMtPm1hc2twcm9jKGRyaXZlLCBtYXNrKTsKIH0KIAotdm9pZCBpZGVfZXhlY19jb21tYW5kKGlkZV9od2lmX3QgKmh3aWYsIHU4IGNtZCkKLXsKLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQl3cml0ZWIoY21kLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKLQllbHNlCi0JCW91dGIoY21kLCBod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2V4ZWNfY29tbWFuZCk7Ci0KLXU4IGlkZV9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOwotCWVsc2UKLQkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9zdGF0dXMpOwotCi11OCBpZGVfcmVhZF9hbHRzdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLQllbHNlCi0JCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYWx0c3RhdHVzKTsKLQotdm9pZCBpZGVfc2V0X2lycShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pCi17Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXdyaXRlYihjdGwsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci0JZWxzZQotCQlvdXRiKGN0bCwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9pcnEpOwotCi12b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0Jdm9pZCAoKnRmX291dGIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0JdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKLQotCWlmIChtbWlvKQotCQl0Zl9vdXRiID0gaWRlX21tX291dGI7Ci0JZWxzZQotCQl0Zl9vdXRiID0gaWRlX291dGI7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKLQkJSElISSA9IDB4RkY7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpIHsKLQkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7Ci0KLQkJaWYgKG1taW8pCi0JCQl3cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCQllbHNlCi0JCQlvdXR3KGRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCX0KLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCi0JCXRmX291dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKLQkJdGZfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKLQkJdGZfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCi0JCXRmX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQotCQl0Zl9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCi0JCXRmX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCi0JCXRmX291dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQotCQl0Zl9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCi0JCXRmX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKLQkJdGZfb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKLQkJdGZfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKLQkJCSBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX2xvYWQpOwotCi12b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0Jdm9pZCAoKnRmX291dGIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0JdTggKCp0Zl9pbmIpKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0KLQlpZiAobW1pbykgewotCQl0Zl9vdXRiID0gaWRlX21tX291dGI7Ci0JCXRmX2luYiAgPSBpZGVfbW1faW5iOwotCX0gZWxzZSB7Ci0JCXRmX291dGIgPSBpZGVfb3V0YjsKLQkJdGZfaW5iICA9IGlkZV9pbmI7Ci0JfQotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKLQkJdTE2IGRhdGE7Ci0KLQkJaWYgKG1taW8pCi0JCQlkYXRhID0gcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCQllbHNlCi0JCQlkYXRhID0gaW53KGlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCi0JCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7Ci0JCXRmLT5ob2JfZGF0YSA9IChkYXRhID4+IDgpICYgMHhmZjsKLQl9Ci0KLQkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCi0JdGZfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKLQkJdGYtPm5zZWN0ICA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCi0JCXRmLT5sYmFsICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCi0JCXRmLT5sYmFtICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCi0JCXRmLT5sYmFoICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKLQkJdGYtPmRldmljZSA9IHRmX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7Ci0JCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwotCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKLQkJCXRmLT5ob2JfZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKLQkJCXRmLT5ob2JfbnNlY3QgICA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKLQkJCXRmLT5ob2JfbGJhbCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQotCQkJdGYtPmhvYl9sYmFtICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCi0JCQl0Zi0+aG9iX2xiYWggICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX3JlYWQpOwotCi0vKgotICogU29tZSBsb2NhbGJ1cyBFSURFIGludGVyZmFjZXMgcmVxdWlyZSBhIHNwZWNpYWwgYWNjZXNzIHNlcXVlbmNlCi0gKiB3aGVuIHVzaW5nIDMyLWJpdCBJL08gaW5zdHJ1Y3Rpb25zIHRvIHRyYW5zZmVyIGRhdGEuICBXZSBjYWxsIHRoaXMKLSAqIHRoZSAidmxiX3N5bmMiIHNlcXVlbmNlLCB3aGljaCBjb25zaXN0cyBvZiB0aHJlZSBzdWNjZXNzaXZlIHJlYWRzCi0gKiBvZiB0aGUgc2VjdG9yIGNvdW50IHJlZ2lzdGVyIGxvY2F0aW9uLCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKLSAqIHRvIGVuc3VyZSB0aGF0IHRoZSByZWFkcyBhbGwgaGFwcGVuIHRvZ2V0aGVyLgotICovCi1zdGF0aWMgdm9pZCBhdGFfdmxiX3N5bmModW5zaWduZWQgbG9uZyBwb3J0KQotewotCSh2b2lkKWluYihwb3J0KTsKLQkodm9pZClpbmIocG9ydCk7Ci0JKHZvaWQpaW5iKHBvcnQpOwotfQotCi0vKgotICogVGhpcyBpcyB1c2VkIGZvciBtb3N0IFBJTyBkYXRhIHRyYW5zZmVycyAqZnJvbSogdGhlIElERSBpbnRlcmZhY2UKLSAqCi0gKiBUaGVzZSByb3V0aW5lcyB3aWxsIHJvdW5kIHVwIGFueSByZXF1ZXN0IGZvciBhbiBvZGQgbnVtYmVyIG9mIGJ5dGVzLAotICogc28gaWYgYW4gb2RkIGxlbiBpcyBzcGVjaWZpZWQsIGJlIHN1cmUgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IG9uZQotICogZXh0cmEgYnl0ZSBhbGxvY2F0ZWQgZm9yIHRoZSBidWZmZXIuCi0gKi8KLXZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKLQkJICAgIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKLQl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQotCWxlbisrOwotCi0JaWYgKGlvXzMyYml0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgewotCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJfQotCi0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1faW5zbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCQllbHNlCi0JCQlpbnNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCi0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJaWYgKChsZW4gJiAzKSA+PSAyKSB7Ci0JCQlpZiAobW1pbykKLQkJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCi0JCQkJCQkodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJCWVsc2UKLQkJCQlpbnN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQkJZWxzZQotCQkJaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lucHV0X2RhdGEpOwotCi0vKgotICogVGhpcyBpcyB1c2VkIGZvciBtb3N0IFBJTyBkYXRhIHRyYW5zZmVycyAqdG8qIHRoZSBJREUgaW50ZXJmYWNlCi0gKi8KLXZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCi0JCSAgICAgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOwotCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCi0JaWYgKGlvXzMyYml0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgewotCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJfQotCi0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQkJZWxzZQotCQkJb3V0c2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKLQkJCWlmIChtbWlvKQotCQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCi0JCQkJCQkgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCQllbHNlCi0JCQkJb3V0c3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQkJZWxzZQotCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9vdXRwdXRfZGF0YSk7Ci0KIHU4IGlkZV9yZWFkX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfdGFza190IHRhc2s7CkBAIC0zNjAsMzUgKzYzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Vycm9yKTsKIAotdm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCB1MTYgKmJjb3VudCwgdTggKmlyZWFzb24pCi17Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKLQkJCUlERV9URkxBR19JTl9OU0VDVDsKLQotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKLQotCSpiY291bnQgPSAodGFzay50Zi5sYmFoIDw8IDgpIHwgdGFzay50Zi5sYmFtOwotCSppcmVhc29uID0gdGFzay50Zi5uc2VjdCAmIDM7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24pOwotCi1jb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBkZWZhdWx0X3RwX29wcyA9IHsKLQkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCi0JLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKLQkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAotCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KLQkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKLQotCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAotCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCi19OwotCiB2b2lkIGlkZV9maXhfZHJpdmVpZCh1MTYgKmlkKQogewogI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU4KQEAgLTQxMCw3ICs4NCw3IEBACiAgKiByZXR1cm5lZCBieSB0aGUgQVRBX0NNRF9JRF9BVEFbUEldIGNvbW1hbmRzLgogICovCiAKLXZvaWQgaWRlX2ZpeHN0cmluZyAodTggKnMsIGNvbnN0IGludCBieXRlY291bnQsIGNvbnN0IGludCBieXRlc3dhcCkKK3ZvaWQgaWRlX2ZpeHN0cmluZyh1OCAqcywgY29uc3QgaW50IGJ5dGVjb3VudCwgY29uc3QgaW50IGJ5dGVzd2FwKQogewogCXU4ICpwLCAqZW5kID0gJnNbYnl0ZWNvdW50ICYgfjFdOyAvKiBieXRlY291bnQgbXVzdCBiZSBldmVuICovCiAKQEAgLTQzMyw0NCArMTA3LDkgQEAKIAl3aGlsZSAocCAhPSBlbmQpCiAJCSpwKysgPSAnXDAnOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV9maXhzdHJpbmcpOwogCiAvKgotICogTmVlZGVkIGZvciBQQ0kgaXJxIHNoYXJpbmcKLSAqLwotaW50IGRyaXZlX2lzX3JlYWR5IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwotCXU4IHN0YXQJCQk9IDA7Ci0KLQlpZiAoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkKLQkJcmV0dXJuIGh3aWYtPmRtYV9vcHMtPmRtYV90ZXN0X2lycShkcml2ZSk7Ci0KLQkvKgotCSAqIFdlIGRvIGEgcGFzc2l2ZSBzdGF0dXMgdGVzdCB1bmRlciBzaGFyZWQgUENJIGludGVycnVwdHMgb24KLQkgKiBjYXJkcyB0aGF0IHRydWx5IHNoYXJlIHRoZSBBVEEgc2lkZSBpbnRlcnJ1cHQsIGJ1dCBtYXkgYWxzbyBzaGFyZQotCSAqIGFuIGludGVycnVwdCB3aXRoIGFub3RoZXIgcGNpIGNhcmQvZGV2aWNlLiAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucwotCSAqIGFib3V0IHBvc3NpYmxlIGlzYS1wbnAgYW5kIHBjaS1wbnAgaXNzdWVzIHlldC4KLQkgKi8KLQlpZiAoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIgJiYKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQlJPS0VOX0FMVFNUQVRVUykgPT0gMCkKLQkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9hbHRzdGF0dXMoaHdpZik7Ci0JZWxzZQotCQkvKiBOb3RlOiB0aGlzIG1heSBjbGVhciBhIHBlbmRpbmcgSVJRISEgKi8KLQkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoc3RhdCAmIEFUQV9CVVNZKQotCQkvKiBkcml2ZSBidXN5OiAgZGVmaW5pdGVseSBub3QgaW50ZXJydXB0aW5nICovCi0JCXJldHVybiAwOwotCi0JLyogZHJpdmUgcmVhZHk6ICptaWdodCogYmUgaW50ZXJydXB0aW5nICovCi0JcmV0dXJuIDE7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZHJpdmVfaXNfcmVhZHkpOwotCi0vKgogICogVGhpcyByb3V0aW5lIGJ1c3ktd2FpdHMgZm9yIHRoZSBkcml2ZSBzdGF0dXMgdG8gYmUgbm90ICJidXN5Ii4KICAqIEl0IHRoZW4gY2hlY2tzIHRoZSBzdGF0dXMgZm9yIGFsbCBvZiB0aGUgImdvb2QiIGJpdHMgYW5kIG5vbmUKICAqIG9mIHRoZSAiYmFkIiBiaXRzLCBhbmQgaWYgYWxsIGlzIG9rYXkgaXQgcmV0dXJucyAwLiAgQWxsIG90aGVyCkBAIC00ODEsNyArMTIwLDggQEAKICAqIHNldHRpbmcgYSB0aW1lciB0byB3YWtlIHVwIGF0IGhhbGYgc2Vjb25kIGludGVydmFscyB0aGVyZWFmdGVyLAogICogdW50aWwgdGltZW91dCBpcyBhY2hpZXZlZCwgYmVmb3JlIHRpbWluZyBvdXQuCiAgKi8KLXN0YXRpYyBpbnQgX19pZGVfd2FpdF9zdGF0KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwgdTggYmFkLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHU4ICpyc3RhdCkKK3N0YXRpYyBpbnQgX19pZGVfd2FpdF9zdGF0KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwgdTggYmFkLAorCQkJICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1OCAqcnN0YXQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CkBAIC01MzksNyArMTc5LDggQEAKICAqIFRoZSBjYWxsZXIgc2hvdWxkIHJldHVybiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiAic3RhcnRzdG9wIiBpbiB0aGlzIGNhc2UsCiAgKiAic3RhcnRzdG9wIiBpcyB1bmNoYW5nZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgogICovCi1pbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKnN0YXJ0c3RvcCwgaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK2ludCBpZGVfd2FpdF9zdGF0KGlkZV9zdGFydHN0b3BfdCAqc3RhcnRzdG9wLCBpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsCisJCSAgdTggYmFkLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiB7CiAJaW50IGVycjsKIAl1OCBzdGF0OwpAQCAtNTU5LDcgKzIwMCw2IEBACiAKIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV93YWl0X3N0YXQpOwogCiAvKioKQEAgLTU4MCw3ICsyMjAsNiBAQAogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbl9kcml2ZV9saXN0KTsKIAogLyoKQEAgLTYwNSw3ICsyNDQsNyBAQAogICogIEFsbCBob3N0cyB0aGF0IHVzZSB0aGUgODBjIHJpYmJvbiBtdXN0IHVzZSEKICAqICBUaGUgbmFtZSBpcyBkZXJpdmVkIGZyb20gdXBwZXIgYnl0ZSBvZiB3b3JkIDkzIGFuZCB0aGUgODBjIHJpYmJvbi4KICAqLwotdTggZWlnaHR5X25pbnR5X3RocmVlIChpZGVfZHJpdmVfdCAqZHJpdmUpCit1OCBlaWdodHlfbmludHlfdGhyZWUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwpAQCAtNjUwLDQ3ICsyODksMTkgQEAKIAogaW50IGlkZV9kcml2ZWlkX3VwZGF0ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJdTE2ICppZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4IHN0YXQ7CisJaW50IHJjOwogCi0JLyoKLQkgKiBSZS1yZWFkIGRyaXZlLT5pZCBmb3IgcG9zc2libGUgRE1BIG1vZGUKLQkgKiBjaGFuZ2UgKGNvcGllZCBmcm9tIGlkZS1wcm9iZS5jKQotCSAqLworCWlkID0ga21hbGxvYyhTRUNUT1JfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKGlkID09IE5VTEwpCisJCXJldHVybiAwOwogCiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwotCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKLQltc2xlZXAoNTApOwotCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfSURfQVRBKTsKLQotCWlmIChpZGVfYnVzeV9zbGVlcChod2lmLCBXQUlUX1dPUlNUQ0FTRSwgMSkpIHsKLQkJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltc2xlZXAoNTApOwkvKiB3YWl0IGZvciBJUlEgYW5kIEFUQV9EUlEgKi8KLQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVChzdGF0LCBBVEFfRFJRLCBCQURfUl9TVEFUKSkgewotCQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JCXByaW50aygiJXM6IENIRUNLIGZvciBnb29kIFNUQVRVU1xuIiwgZHJpdmUtPm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBBVEFfQ01EX0lEX0FUQSwgaWQpOwogCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQlpZCA9IGttYWxsb2MoU0VDVE9SX1NJWkUsIEdGUF9BVE9NSUMpOwotCWlmICghaWQpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0JdHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLCBpZCwgU0VDVE9SX1NJWkUpOwotCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CS8qIGNsZWFyIGRyaXZlIElSUSAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JaWRlX2ZpeF9kcml2ZWlkKGlkKTsKKworCWlmIChyYykKKwkJZ290byBvdXRfZXJyOwogCiAJZHJpdmUtPmlkW0FUQV9JRF9VRE1BX01PREVTXSAgPSBpZFtBVEFfSURfVURNQV9NT0RFU107CiAJZHJpdmUtPmlkW0FUQV9JRF9NV0RNQV9NT0RFU10gPSBpZFtBVEFfSURfTVdETUFfTU9ERVNdOwpAQCAtNzAzLDYgKzMxNCwxMiBAQAogCQlpZGVfZG1hX29mZihkcml2ZSk7CiAKIAlyZXR1cm4gMTsKK291dF9lcnI6CisJU0VMRUNUX01BU0soZHJpdmUsIDApOworCWlmIChyYyA9PSAyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogYmFkIHN0YXR1c1xuIiwgZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKKwlrZnJlZShpZCk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCkBAIC03MjksMTggKzM0NiwxNSBAQAogCSAqIGJ1dCBmb3Igc29tZSByZWFzb24gdGhlc2UgZG9uJ3Qgd29yayBhdAogCSAqIHRoaXMgcG9pbnQgKGxvc3QgaW50ZXJydXB0KS4KIAkgKi8KLSAgICAgICAgLyoKLSAgICAgICAgICogU2VsZWN0IHRoZSBkcml2ZSwgYW5kIGlzc3VlIHRoZSBTRVRGRUFUVVJFUyBjb21tYW5kCi0gICAgICAgICAqLwotCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOwotCQorCiAJLyoKIAkgKglGSVhNRTogd2UgcmFjZSBhZ2FpbnN0IHRoZSBydW5uaW5nIElSUSBoZXJlIGlmCiAJICoJdGhpcyBpcyBjYWxsZWQgZnJvbSBub24gSVJRIGNvbnRleHQuIElmIHdlIHVzZQogCSAqCWRpc2FibGVfaXJxKCkgd2UgaGFuZyBvbiB0aGUgZXJyb3IgcGF0aC4gV29yawogCSAqCWlzIG5lZWRlZC4KIAkgKi8KLQkgCisJZGlzYWJsZV9pcnFfbm9zeW5jKGh3aWYtPmlycSk7CisKIAl1ZGVsYXkoMSk7CiAJU0VMRUNUX0RSSVZFKGRyaXZlKTsKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7CkBAIC04MTAsOCArNDI0LDggQEAKICAqCiAgKiBTZWUgYWxzbyBpZGVfZXhlY3V0ZV9jb21tYW5kCiAgKi8KLXN0YXRpYyB2b2lkIF9faWRlX3NldF9oYW5kbGVyIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCi0JCSAgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKK3ZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAorCQkgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIApAQCAtODMzLDkgKzQ0Nyw4IEBACiAJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQsIGV4cGlyeSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV9zZXRfaGFuZGxlcik7Ci0gCisKIC8qKgogICoJaWRlX2V4ZWN1dGVfY29tbWFuZAktCWV4ZWN1dGUgYW4gSURFIGNvbW1hbmQKICAqCUBkcml2ZTogSURFIGRyaXZlIHRvIGlzc3VlIHRoZSBjb21tYW5kIGFnYWluc3QKQEAgLTg0NSw3ICs0NTgsNyBAQAogICoJQGV4cGlyeTogIGhhbmRsZXIgdG8gcnVuIG9uIHRpbWVvdXQKICAqCiAgKglIZWxwZXIgZnVuY3Rpb24gdG8gaXNzdWUgYW4gSURFIGNvbW1hbmQuIFRoaXMgaGFuZGxlcyB0aGUKLSAqCWF0b21pY2l0eSByZXF1aXJlbWVudHMsIGNvbW1hbmQgdGltaW5nIGFuZCBlbnN1cmVzIHRoYXQgdGhlIAorICoJYXRvbWljaXR5IHJlcXVpcmVtZW50cywgY29tbWFuZCB0aW1pbmcgYW5kIGVuc3VyZXMgdGhhdCB0aGUKICAqCWhhbmRsZXIgYW5kIElSUSBzZXR1cCBkbyBub3QgcmFjZS4gQWxsIElERSBjb21tYW5kIGtpY2sgb2ZmCiAgKglzaG91bGQgZ28gdmlhIHRoaXMgZnVuY3Rpb24gb3IgZG8gZXF1aXZhbGVudCBsb2NraW5nLgogICovCkBAIC04ODIsMzAxICs0OTUsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2V4ZWN1dGVfcGt0X2NtZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyKQotewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQotCWlmIChycSAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+Y21kWzBdID09IFJFUV9EUklWRV9SRVNFVCkKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIgPyBlcnIgOiAxLCAwKTsKLX0KLQotLyogbmVlZGVkIGJlbG93ICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MSAoaWRlX2RyaXZlX3QgKiwgaW50KTsKLQotLyoKLSAqIGF0YXBpX3Jlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbiBldmVyeSA1MG1zCi0gKiBkdXJpbmcgYW4gYXRhcGkgZHJpdmUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmUgaGFzIG5vdCB5ZXQgcmVzcG9uZGVkLAotICogYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKLSAqIGZvciBhbm90aGVyIDUwbXMuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgYXRhcGlfcmVzZXRfcG9sbGZ1bmMgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggc3RhdDsKLQotCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JdWRlbGF5ICgxMCk7Ci0Jc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoT0tfU1RBVChzdGF0LCAwLCBBVEFfQlVTWSkpCi0JCXByaW50aygiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7Ci0JZWxzZSB7Ci0JCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQkJLyogY29udGludWUgcG9sbGluZyAqLwotCQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCQl9Ci0JCS8qIGVuZCBvZiBwb2xsaW5nICovCi0JCWh3aWYtPnBvbGxpbmcgPSAwOwotCQlwcmludGsoIiVzOiBBVEFQSSByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsCi0JCQkJZHJpdmUtPm5hbWUsIHN0YXQpOwotCQkvKiBkbyBpdCB0aGUgb2xkIGZhc2hpb25lZCB3YXkgKi8KLQkJcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMSk7Ci0JfQotCS8qIGRvbmUgcG9sbGluZyAqLwotCWh3aWYtPnBvbGxpbmcgPSAwOwotCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgMCk7Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGlkZV9od2lmX3QgKmh3aWYsIHU4IGVycikKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZXJyX21hc3Rlcl92YWxzW10gPQotCQl7IE5VTEwsICJwYXNzZWQiLCAiZm9ybWF0dGVyIGRldmljZSBlcnJvciIsCi0JCSAgInNlY3RvciBidWZmZXIgZXJyb3IiLCAiRUNDIGNpcmN1aXRyeSBlcnJvciIsCi0JCSAgImNvbnRyb2xsaW5nIE1QVSBlcnJvciIgfTsKLQotCXU4IGVycl9tYXN0ZXIgPSBlcnIgJiAweDdmOwotCi0JcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQ6IG1hc3RlcjogIiwgaHdpZi0+bmFtZSk7Ci0JaWYgKGVycl9tYXN0ZXIgJiYgZXJyX21hc3RlciA8IDYpCi0JCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgZXJyX21hc3Rlcl92YWxzW2Vycl9tYXN0ZXJdKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0NPTlQgImVycm9yICgweCUwMng/KSIsIGVycik7Ci0JaWYgKGVyciAmIDB4ODApCi0JCXByaW50ayhLRVJOX0NPTlQgIjsgc2xhdmU6IGZhaWxlZCIpOwotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci19Ci0KLS8qCi0gKiByZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcwotICogZHVyaW5nIGFuIGlkZSByZXNldCBvcGVyYXRpb24uIElmIHRoZSBkcml2ZXMgaGF2ZSBub3QgeWV0IHJlc3BvbmRlZCwKLSAqIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIgaXMgcmVzdGFydGVkCi0gKiBmb3IgYW5vdGhlciA1MG1zLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHJlc2V0X3BvbGxmdW5jIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0JdTggdG1wOwotCWludCBlcnIgPSAwOwotCi0JaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldF9wb2xsKSB7Ci0JCWVyciA9IHBvcnRfb3BzLT5yZXNldF9wb2xsKGRyaXZlKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaG9zdCByZXNldF9wb2xsIGZhaWx1cmUgZm9yICVzLlxuIiwKLQkJCQlod2lmLT5uYW1lLCBkcml2ZS0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXRtcCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQodG1wLCAwLCBBVEFfQlVTWSkpIHsKLQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0JCQkvKiBjb250aW51ZSBwb2xsaW5nICovCi0JCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JCX0KLQkJcHJpbnRrKCIlczogcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLCBod2lmLT5uYW1lLCB0bXApOwotCQlkcml2ZS0+ZmFpbHVyZXMrKzsKLQkJZXJyID0gLUVJTzsKLQl9IGVsc2UgIHsKLQkJdG1wID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOwotCi0JCWlmICh0bXAgPT0gMSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc2V0OiBzdWNjZXNzXG4iLCBod2lmLT5uYW1lKTsKLQkJCWRyaXZlLT5mYWlsdXJlcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGh3aWYsIHRtcCk7Ci0JCQlkcml2ZS0+ZmFpbHVyZXMrKzsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQl9Ci1vdXQ6Ci0JaHdpZi0+cG9sbGluZyA9IDA7CS8qIGRvbmUgcG9sbGluZyAqLwotCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgZXJyKTsKLQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3ByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaW50IGxlZ2FjeSA9IChkcml2ZS0+aWRbQVRBX0lEX0NGU19FTkFCTEVfMl0gJiAweDA0MDApID8gMCA6IDE7Ci0KLQlkcml2ZS0+c3BlY2lhbC5hbGwgPSAwOwotCWRyaXZlLT5zcGVjaWFsLmIuc2V0X2dlb21ldHJ5ID0gbGVnYWN5OwotCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgID0gbGVnYWN5OwotCi0JZHJpdmUtPm11bHRfY291bnQgPSAwOwotCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QQVJLRUQ7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCAmJgotCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApCi0JCWRyaXZlLT5tdWx0X3JlcSA9IDA7Ci0KLQlpZiAoZHJpdmUtPm11bHRfcmVxICE9IGRyaXZlLT5tdWx0X2NvdW50KQotCQlkcml2ZS0+c3BlY2lhbC5iLnNldF9tdWx0bW9kZSA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBkcml2ZS0+aHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQlpZGVfZGlza19wcmVfcmVzZXQoZHJpdmUpOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUE9TVF9SRVNFVDsKLQotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgewotCQlpZiAoZHJpdmUtPmNyY19jb3VudCkKLQkJCWlkZV9jaGVja19kbWFfY3JjKGRyaXZlKTsKLQkJZWxzZQotCQkJaWRlX2RtYV9vZmYoZHJpdmUpOwotCX0KLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApIHsKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7Ci0JCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnByZV9yZXNldCkKLQkJcG9ydF9vcHMtPnByZV9yZXNldChkcml2ZSk7Ci0KLQlpZiAoZHJpdmUtPmN1cnJlbnRfc3BlZWQgIT0gMHhmZikKLQkJZHJpdmUtPmRlc2lyZWRfc3BlZWQgPSBkcml2ZS0+Y3VycmVudF9zcGVlZDsKLQlkcml2ZS0+Y3VycmVudF9zcGVlZCA9IDB4ZmY7Ci19Ci0KLS8qCi0gKiBkb19yZXNldDEoKSBhdHRlbXB0cyB0byByZWNvdmVyIGEgY29uZnVzZWQgZHJpdmUgYnkgcmVzZXR0aW5nIGl0LgotICogVW5mb3J0dW5hdGVseSwgcmVzZXR0aW5nIGEgZGlzayBkcml2ZSBhY3R1YWxseSByZXNldHMgYWxsIGRldmljZXMgb24KLSAqIHRoZSBzYW1lIGludGVyZmFjZSwgc28gaXQgY2FuIHJlYWxseSBiZSB0aG91Z2h0IG9mIGFzIHJlc2V0dGluZyB0aGUKLSAqIGludGVyZmFjZSByYXRoZXIgdGhhbiByZXNldHRpbmcgdGhlIGRyaXZlLgotICoKLSAqIEFUQVBJIGRldmljZXMgaGF2ZSB0aGVpciBvd24gcmVzZXQgbWVjaGFuaXNtIHdoaWNoIGFsbG93cyB0aGVtIHRvIGJlCi0gKiBpbmRpdmlkdWFsbHkgcmVzZXQgd2l0aG91dCBjbG9iYmVyaW5nIG90aGVyIGRldmljZXMgb24gdGhlIHNhbWUgaW50ZXJmYWNlLgotICoKLSAqIFVuZm9ydHVuYXRlbHksIHRoZSBJREUgaW50ZXJmYWNlIGRvZXMgbm90IGdlbmVyYXRlIGFuIGludGVycnVwdCB0byBsZXQKLSAqIHVzIGtub3cgd2hlbiB0aGUgcmVzZXQgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCwgc28gd2UgbXVzdCBwb2xsIGZvciB0aGlzLgotICogRXF1YWxseSBwb29yLCB0aG91Z2gsIGlzIHRoZSBmYWN0IHRoYXQgdGhpcyBtYXkgYSB2ZXJ5IGxvbmcgdGltZSB0byBjb21wbGV0ZSwKLSAqICh1cCB0byAzMCBzZWNvbmRzIHdvcnN0Y2FzZSkuICBTbywgaW5zdGVhZCBvZiBidXN5LXdhaXRpbmcgaGVyZSBmb3IgaXQsCi0gKiB3ZSBzZXQgYSB0aW1lciB0byBwb2xsIGF0IDUwbXMgaW50ZXJ2YWxzLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZG9fbm90X3RyeV9hdGFwaSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wczsKLQlpZGVfZHJpdmVfdCAqdGRyaXZlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRpbWVvdXQ7Ci0JaW50IGk7Ci0JREVGSU5FX1dBSVQod2FpdCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCi0JLyogV2UgbXVzdCBub3QgcmVzZXQgd2l0aCBydW5uaW5nIGhhbmRsZXJzICovCi0JQlVHX09OKGh3aWYtPmhhbmRsZXIgIT0gTlVMTCk7Ci0KLQkvKiBGb3IgYW4gQVRBUEkgZGV2aWNlLCBmaXJzdCB0cnkgYW4gQVRBUEkgU1JTVC4gKi8KLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmICFkb19ub3RfdHJ5X2F0YXBpKSB7Ci0JCXByZV9yZXNldChkcml2ZSk7Ci0JCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JCXVkZWxheSAoMjApOwotCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7Ci0JCW5kZWxheSg0MDApOwotCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7Ci0JCWh3aWYtPnBvbGxpbmcgPSAxOwotCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCX0KLQotCS8qIFdlIG11c3Qgbm90IGRpc3R1cmIgZGV2aWNlcyBpbiB0aGUgSURFX0RGTEFHX1BBUktFRCBzdGF0ZS4gKi8KLQlkbyB7Ci0JCXVuc2lnbmVkIGxvbmcgbm93OwotCi0JCXByZXBhcmVfdG9fd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCXRpbWVvdXQgPSBqaWZmaWVzOwotCQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgdGRyaXZlLCBod2lmKSB7Ci0JCQlpZiAodGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCAmJgotCQkJICAgIHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCAmJgotCQkJICAgIHRpbWVfYWZ0ZXIodGRyaXZlLT5zbGVlcCwgdGltZW91dCkpCi0JCQkJdGltZW91dCA9IHRkcml2ZS0+c2xlZXA7Ci0JCX0KLQotCQlub3cgPSBqaWZmaWVzOwotCQlpZiAodGltZV9iZWZvcmVfZXEodGltZW91dCwgbm93KSkKLQkJCWJyZWFrOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHRpbWVvdXQgLSBub3cpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCX0gd2hpbGUgKHRpbWVvdXQpOwotCWZpbmlzaF93YWl0KCZpZGVfcGFya193cSwgJndhaXQpOwotCi0JLyoKLQkgKiBGaXJzdCwgcmVzZXQgYW55IGRldmljZSBzdGF0ZSBkYXRhIHdlIHdlcmUgbWFpbnRhaW5pbmcKLQkgKiBmb3IgYW55IG9mIHRoZSBkcml2ZXMgb24gdGhpcyBpbnRlcmZhY2UuCi0JICovCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikKLQkJcHJlX3Jlc2V0KHRkcml2ZSk7Ci0KLQlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyID09IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIC1FTlhJTyk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCB3ZSBhbHNvIHNldCBuSUVOIHdoaWxlIHJlc2V0dGluZyB0aGUgZGV2aWNlLAotCSAqIHRvIG1hc2sgdW53YW50ZWQgaW50ZXJydXB0cyBmcm9tIHRoZSBpbnRlcmZhY2UgZHVyaW5nIHRoZSByZXNldC4KLQkgKiBIb3dldmVyLCBkdWUgdG8gdGhlIGRlc2lnbiBvZiBQQyBoYXJkd2FyZSwgdGhpcyB3aWxsIGNhdXNlIGFuCi0JICogaW1tZWRpYXRlIGludGVycnVwdCBkdWUgdG8gdGhlIGVkZ2UgdHJhbnNpdGlvbiBpdCBwcm9kdWNlcy4KLQkgKiBUaGlzIHNpbmdsZSBpbnRlcnJ1cHQgZ2l2ZXMgdXMgYSAiZmFzdCBwb2xsIiBmb3IgZHJpdmVzIHRoYXQKLQkgKiByZWNvdmVyIGZyb20gcmVzZXQgdmVyeSBxdWlja2x5LCBzYXZpbmcgdXMgdGhlIGZpcnN0IDUwbXMgd2FpdCB0aW1lLgotCSAqCi0JICogVE9ETzogYWRkIC0+c29mdHJlc2V0IG1ldGhvZCBhbmQgc3RvcCBhYnVzaW5nIC0+c2V0X2lycQotCSAqLwotCS8qIHNldCBTUlNUIGFuZCBuSUVOICovCi0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDQpOwotCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwotCXVkZWxheSgxMCk7Ci0JLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAodW5sZXNzIGRldmljZSBpcyBvbiB0aGUgcXVpcmsgbGlzdCkgKi8KLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgZHJpdmUtPnF1aXJrX2xpc3QgPT0gMik7Ci0JLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCi0JdWRlbGF5KDEwKTsKLQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7Ci0JaHdpZi0+cG9sbGluZyA9IDE7Ci0JX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCi0JLyoKLQkgKiBTb21lIHdlaXJkIGNvbnRyb2xsZXIgbGlrZSByZXNldHRpbmcgdGhlbXNlbHZlcyB0byBhIHN0cmFuZ2UKLQkgKiBzdGF0ZSB3aGVuIHRoZSBkaXNrcyBhcmUgcmVzZXQgdGhpcyB3YXkuIEF0IGxlYXN0LCB0aGUgV2luYm9uZAotCSAqIDU1MyBkb2N1bWVudGF0aW9uIHNheXMgdGhhdAotCSAqLwotCXBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0JaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldHByb2MpCi0JCXBvcnRfb3BzLT5yZXNldHByb2MoZHJpdmUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBpZGVfc3RhcnRlZDsKLX0KLQotLyoKLSAqIGlkZV9kb19yZXNldCgpIGlzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgZHJpdmUvaW50ZXJmYWNlIHJlc2V0IGNvZGUuCi0gKi8KLQotaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldCAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDApOwotfQotCi1FWFBPUlRfU1lNQk9MKGlkZV9kb19yZXNldCk7Ci0KIC8qCiAgKiBpZGVfd2FpdF9ub3RfYnVzeSgpIHdhaXRzIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRldmljZSBvbiB0aGUgaHdpZgogICogdG8gcmVwb3J0IGEgbm9uLWJ1c3kgc3RhdHVzLCBzZWUgY29tbWVudHMgaW4gaWRlX3Byb2JlX3BvcnQoKS4KQEAgLTExODUsNyArNTAzLDcgQEAKIHsKIAl1OCBzdGF0ID0gMDsKIAotCXdoaWxlKHRpbWVvdXQtLSkgeworCXdoaWxlICh0aW1lb3V0LS0pIHsKIAkJLyoKIAkJICogVHVybiB0aGlzIGludG8gYSBzY2hlZHVsZSgpIHNsZWVwIG9uY2UgSSdtIHN1cmUKIAkJICogYWJvdXQgbG9ja2luZyBpc3N1ZXMgKDIuNSB3b3JrID8pLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IDA5NTI2YTAuLmY2YzY4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKQEAgLTUsMTYzICs1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotc3RhdGljIGNvbnN0IGNoYXIgKnVkbWFfc3RyW10gPQotCSB7ICJVRE1BLzE2IiwgIlVETUEvMjUiLCAgIlVETUEvMzMiLCAgIlVETUEvNDQiLAotCSAgICJVRE1BLzY2IiwgIlVETUEvMTAwIiwgIlVETUEvMTMzIiwgIlVETUE3IiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKm13ZG1hX3N0cltdID0KLQl7ICJNV0RNQTAiLCAiTVdETUExIiwgIk1XRE1BMiIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICpzd2RtYV9zdHJbXSA9Ci0JeyAiU1dETUEwIiwgIlNXRE1BMSIsICJTV0RNQTIiIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqcGlvX3N0cltdID0KLQl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIgfTsKLQotLyoqCi0gKglpZGVfeGZlcl92ZXJib3NlCS0JcmV0dXJuIElERSBtb2RlIG5hbWVzCi0gKglAbW9kZTogdHJhbnNmZXIgbW9kZQotICoKLSAqCVJldHVybnMgYSBjb25zdGFudCBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2RlCi0gKglyZXF1ZXN0ZWQuCi0gKi8KLQotY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKQotewotCWNvbnN0IGNoYXIgKnM7Ci0JdTggaSA9IG1vZGUgJiAweGY7Ci0KLQlpZiAobW9kZSA+PSBYRkVSX1VETUFfMCAmJiBtb2RlIDw9IFhGRVJfVURNQV83KQotCQlzID0gdWRtYV9zdHJbaV07Ci0JZWxzZSBpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9NV19ETUFfMikKLQkJcyA9IG13ZG1hX3N0cltpXTsKLQllbHNlIGlmIChtb2RlID49IFhGRVJfU1dfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1NXX0RNQV8yKQotCQlzID0gc3dkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9QSU9fMCAmJiBtb2RlIDw9IFhGRVJfUElPXzUpCi0JCXMgPSBwaW9fc3RyW2kgJiAweDddOwotCWVsc2UgaWYgKG1vZGUgPT0gWEZFUl9QSU9fU0xPVykKLQkJcyA9ICJQSU8gU0xPVyI7Ci0JZWxzZQotCQlzID0gIlhGRVIgRVJST1IiOwotCi0JcmV0dXJuIHM7Ci19Ci1FWFBPUlRfU1lNQk9MKGlkZV94ZmVyX3ZlcmJvc2UpOwotCi0vKioKLSAqCWlkZV9yYXRlX2ZpbHRlcgkJLQlmaWx0ZXIgdHJhbnNmZXIgbW9kZQotICoJQGRyaXZlOiBJREUgZGV2aWNlCi0gKglAc3BlZWQ6IGRlc2lyZWQgc3BlZWQKLSAqCi0gKglHaXZlbiB0aGUgYXZhaWxhYmxlIHRyYW5zZmVyIG1vZGVzIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICoJdGhlIGJlc3QgYXZhaWxhYmxlIHNwZWVkIGF0IG9yIGJlbG93IHRoZSBzcGVlZCByZXF1ZXN0ZWQuCi0gKgotICoJVE9ETzogY2hlY2sgZGV2aWNlIFBJTyBjYXBhYmlsaXRpZXMKLSAqLwotCi1zdGF0aWMgdTggaWRlX3JhdGVfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IG1vZGUgPSBpZGVfZmluZF9kbWFfbW9kZShkcml2ZSwgc3BlZWQpOwotCi0JaWYgKG1vZGUgPT0gMCkgewotCQlpZiAoaHdpZi0+cGlvX21hc2spCi0JCQltb2RlID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDEgKyBYRkVSX1BJT18wOwotCQllbHNlCi0JCQltb2RlID0gWEZFUl9QSU9fNDsKLQl9Ci0KLS8qCXByaW50aygiJXM6IG1vZGUgMHglMDJ4LCBzcGVlZCAweCUwMnhcbiIsIF9fZnVuY19fLCBtb2RlLCBzcGVlZCk7ICovCi0KLQlyZXR1cm4gbWluKHNwZWVkLCBtb2RlKTsKLX0KLQotLyoqCi0gKglpZGVfZ2V0X2Jlc3RfcGlvX21vZGUJLQlnZXQgUElPIG1vZGUgZnJvbSBkcml2ZQotICoJQGRyaXZlOiBkcml2ZSB0byBjb25zaWRlcgotICoJQG1vZGVfd2FudGVkOiBwcmVmZXJyZWQgbW9kZQotICoJQG1heF9tb2RlOiBoaWdoZXN0IGFsbG93ZWQgbW9kZQotICoKLSAqCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSByZWNvbW1lbmRlZCBQSU8gc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gZHJpdmUsCi0gKgliYXNlZCBvbiB0aGUgZHJpdmUtPmlkIGluZm9ybWF0aW9uIGFuZCB0aGUgaWRlX3Bpb19ibGFja2xpc3RbXS4KLSAqCi0gKglEcml2ZSBQSU8gbW9kZSBpcyBhdXRvLXNlbGVjdGVkIGlmIDI1NSBpcyBwYXNzZWQgYXMgbW9kZV93YW50ZWQuCi0gKglUaGlzIGlzIHVzZWQgYnkgbW9zdCBjaGlwc2V0IHN1cHBvcnQgbW9kdWxlcyB3aGVuICJhdXRvLXR1bmluZyIuCi0gKi8KLQotdTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZV93YW50ZWQsIHU4IG1heF9tb2RlKQotewotCXUxNiAqaWQgPSBkcml2ZS0+aWQ7Ci0JaW50IHBpb19tb2RlID0gLTEsIG92ZXJyaWRkZW4gPSAwOwotCi0JaWYgKG1vZGVfd2FudGVkICE9IDI1NSkKLQkJcmV0dXJuIG1pbl90KHU4LCBtb2RlX3dhbnRlZCwgbWF4X21vZGUpOwotCi0JaWYgKChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QSU9fTk9fQkxBQ0tMSVNUKSA9PSAwKQotCQlwaW9fbW9kZSA9IGlkZV9zY2FuX3Bpb19ibGFja2xpc3QoKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdKTsKLQotCWlmIChwaW9fbW9kZSAhPSAtMSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaXMgb24gUElPIGJsYWNrbGlzdFxuIiwgZHJpdmUtPm5hbWUpOwotCX0gZWxzZSB7Ci0JCXBpb19tb2RlID0gaWRbQVRBX0lEX09MRF9QSU9fTU9ERVNdID4+IDg7Ci0JCWlmIChwaW9fbW9kZSA+IDIpIHsJLyogMiBpcyBtYXhpbXVtIGFsbG93ZWQgdFBJTyB2YWx1ZSAqLwotCQkJcGlvX21vZGUgPSAyOwotCQkJb3ZlcnJpZGRlbiA9IDE7Ci0JCX0KLQotCQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJICAgICAgLyogQVRBMj8gKi8KLQkJCWlmIChhdGFfaWRfaGFzX2lvcmR5KGlkKSkgewotCQkJCWlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDcpIHsKLQkJCQkJb3ZlcnJpZGRlbiA9IDA7Ci0JCQkJCWlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDQpCi0JCQkJCQlwaW9fbW9kZSA9IDU7Ci0JCQkJCWVsc2UgaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgMikKLQkJCQkJCXBpb19tb2RlID0gNDsKLQkJCQkJZWxzZQotCQkJCQkJcGlvX21vZGUgPSAzOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChvdmVycmlkZGVuKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRQSU8gPiAyLCBhc3N1bWluZyB0UElPID0gMlxuIiwKLQkJCQkJIGRyaXZlLT5uYW1lKTsKLQl9Ci0KLQlpZiAocGlvX21vZGUgPiBtYXhfbW9kZSkKLQkJcGlvX21vZGUgPSBtYXhfbW9kZTsKLQotCXJldHVybiBwaW9fbW9kZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9nZXRfYmVzdF9waW9fbW9kZSk7Ci0KLS8qIHJlcV9waW8gPT0gIjI1NSIgZm9yIGF1dG8tdHVuZSAqLwotdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJlcV9waW8pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0JdTggaG9zdF9waW8sIHBpbzsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCi0JCXJldHVybjsKLQotCUJVR19PTihod2lmLT5waW9fbWFzayA9PSAweDAwKTsKLQotCWhvc3RfcGlvID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDE7Ci0KLQlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8sIGhvc3RfcGlvKTsKLQotCS8qCi0JICogVE9ETzoKLQkgKiAtIHJlcG9ydCBkZXZpY2UgbWF4IFBJTyBtb2RlCi0JICogLSBjaGVjayByZXFfcGlvICE9IDI1NSBhZ2FpbnN0IGRldmljZSBtYXggUElPIG1vZGUKLQkgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3QgbWF4IFBJTyVkIHdhbnRlZCBQSU8lZCVzIHNlbGVjdGVkIFBJTyVkXG4iLAotCQkJICBkcml2ZS0+bmFtZSwgaG9zdF9waW8sIHJlcV9waW8sCi0JCQkgIHJlcV9waW8gPT0gMjU1ID8gIihhdXRvLXR1bmUpIiA6ICIiLCBwaW8pOwotCi0JKHZvaWQpaWRlX3NldF9waW9fbW9kZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X3Bpbyk7Ci0KIC8qKgogICoJaWRlX3RvZ2dsZV9ib3VuY2UJLQloYW5kbGUgYm91bmNlIGJ1ZmZlcmluZwogICoJQGRyaXZlOiBkcml2ZSB0byB1cGRhdGUKQEAgLTE4OCw4OSArMzEsNiBAQAogCQlibGtfcXVldWVfYm91bmNlX2xpbWl0KGRyaXZlLT5xdWV1ZSwgYWRkcik7CiB9CiAKLWludCBpZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQotCQlyZXR1cm4gMDsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBUT0RPOiB0ZW1wb3JhcnkgaGFjayBmb3Igc29tZSBsZWdhY3kgaG9zdCBkcml2ZXJzIHRoYXQgZGlkbid0Ci0JICogc2V0IHRyYW5zZmVyIG1vZGUgb24gdGhlIGRldmljZSBpbiAtPnNldF9waW9fbW9kZSBtZXRob2QuLi4KLQkgKi8KLQlpZiAocG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKSB7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgewotCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCi0JCQlyZXR1cm4gLTE7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOwotCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7Ci0JfQotfQotCi1pbnQgaWRlX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKLQkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQotCQkJcmV0dXJuIC0xOwotCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7Ci0JCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2RtYV9tb2RlKTsKLQotLyoqCi0gKglpZGVfc2V0X3hmZXJfcmF0ZQktCXNldCB0cmFuc2ZlciByYXRlCi0gKglAZHJpdmU6IGRyaXZlIHRvIHNldAotICoJQHJhdGU6IHNwZWVkIHRvIGF0dGVtcHQgdG8gc2V0Ci0gKgotICoJR2VuZXJhbCBoZWxwZXIgZm9yIHNldHRpbmcgdGhlIHNwZWVkIG9mIGFuIElERSBkZXZpY2UuIFRoaXMKLSAqCWZ1bmN0aW9uIGtub3dzIGFib3V0IHVzZXIgZW5mb3JjZWQgbGltaXRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KLSAqCXdoaWNoIC0+c2V0X3Bpb19tb2RlLy0+c2V0X2RtYV9tb2RlIGRvZXMgbm90LgotICovCi0KLWludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwgfHwKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQotCQlyZXR1cm4gLTE7Ci0KLQlyYXRlID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCByYXRlKTsKLQotCUJVR19PTihyYXRlIDwgWEZFUl9QSU9fMCk7Ci0KLQlpZiAocmF0ZSA+PSBYRkVSX1BJT18wICYmIHJhdGUgPD0gWEZFUl9QSU9fNSkKLQkJcmV0dXJuIGlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIHJhdGUpOwotCi0JcmV0dXJuIGlkZV9zZXRfZG1hX21vZGUoZHJpdmUsIHJhdGUpOwotfQotCiBzdGF0aWMgdm9pZCBpZGVfZHVtcF9vcGNvZGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCmluZGV4IGM4NzVhOTUuLmYzMGU1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIApAQCAtNjAsNiArNjEsMzAgQEAKIAlyZXR1cm47CiB9CiAKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJaWYgKHJxLT5jbWRbMF0gPT0gUkVRX1BBUktfSEVBRFMpIHsKKwkJZHJpdmUtPnNsZWVwID0gKih1bnNpZ25lZCBsb25nICopcnEtPnNwZWNpYWw7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1NMRUVQSU5HOworCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKKwkJdGYtPmZlYXR1cmUgPSAweDQ0OworCQl0Zi0+bGJhbCA9IDB4NGM7CisJCXRmLT5sYmFtID0gMHg0ZTsKKwkJdGYtPmxiYWggPSAweDU1OworCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKKwl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCisJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9DSEtfUE9XRVI7CisKKwl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJdGFzay5ycSA9IHJxOworCWRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKKwlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKK30KKwogc3NpemVfdCBpZGVfcGFya19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jIGIvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMKaW5kZXggYmRkYWUyYi4uNjExMTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMKQEAgLTMzLDggKzMzLDYgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChhbGxfZ2VuZXJpY19pZGUsIGlkZV9nZW5lcmljX2FsbCwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFsbF9nZW5lcmljX2lkZSwgIklERSBnZW5lcmljIHdpbGwgY2xhaW0gYWxsIHVua25vd24gUENJIElERSBzdG9yYWdlIGNvbnRyb2xsZXJzLiIpOwogCi0jZGVmaW5lIElERV9IRkxBR1NfVU1DIChJREVfSEZMQUdfTk9fRE1BIHwgSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTKQotCiAjZGVmaW5lIERFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKGV4dHJhX2ZsYWdzKSBcCiAJeyBcCiAJCS5uYW1lCQk9IERSVl9OQU1FLCBcCkBAIC02MSw3ICs1OSw3IEBACiAJLyogIDI6IFNBTVVSQUkgLyBIVDY1NjUgLyBISU5UX0lERSAqLwogCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKDApLAogCS8qICAzOiBVTTg2NzNGIC8gVU04ODg2QSAvIFVNODg4NkJGICovCi0JREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoSURFX0hGTEFHU19VTUMpLAorCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKElERV9IRkxBR19OT19ETUEpLAogCS8qICA0OiBWSUFfSURFIC8gT1BUSTYyMVYgLyBQaWNjb2xvMDEwezIsMyw1fSAqLwogCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKElERV9IRkxBR19OT19BVVRPRE1BKSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCBjZTA4MThhLi45NzQwNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMTgxLDE2ICsxODEsMTYgQEAKICAqCWRvX2lkZW50aWZ5CS0JaWRlbnRpZnkgYSBkcml2ZQogICoJQGRyaXZlOiBkcml2ZSB0byBpZGVudGlmeSAKICAqCUBjbWQ6IGNvbW1hbmQgdXNlZAorICoJQGlkOiBidWZmZXIgZm9yIElERU5USUZZIGRhdGEKICAqCiAgKglDYWxsZWQgd2hlbiB3ZSBoYXZlIGlzc3VlZCBhIGRyaXZlIGlkZW50aWZ5IGNvbW1hbmQgdG8KICAqCXJlYWQgYW5kIHBhcnNlIHRoZSByZXN1bHRzLiBUaGlzIGZ1bmN0aW9uIGlzIHJ1biB3aXRoCiAgKglpbnRlcnJ1cHRzIGRpc2FibGVkLiAKICAqLwogCi1zdGF0aWMgdm9pZCBkb19pZGVudGlmeShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKK3N0YXRpYyB2b2lkIGRvX2lkZW50aWZ5KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kLCB1MTYgKmlkKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1MTYgKmlkID0gZHJpdmUtPmlkOwogCWNoYXIgKm0gPSAoY2hhciAqKSZpZFtBVEFfSURfUFJPRF07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYnN3YXAgPSAxOwpAQCAtMjMzLDE2ICsyMzMsNiBAQAogCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BSRVNFTlQ7CiAJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RFQUQ7CiAKLQkvKgotCSAqIENoZWNrIGZvciBhbiBBVEFQSSBkZXZpY2UKLQkgKi8KLQlpZiAoY21kID09IEFUQV9DTURfSURfQVRBUEkpCi0JCWlkZV9jbGFzc2lmeV9hdGFwaV9kZXYoZHJpdmUpOwotCWVsc2UKLQkvKgotCSAqIE5vdCBhbiBBVEFQSSBkZXZpY2U6IGxvb2tzIGxpa2UgYSAicmVndWxhciIgaGFyZCBkaXNrCi0JICovCi0JCWlkZV9jbGFzc2lmeV9hdGFfZGV2KGRyaXZlKTsKIAlyZXR1cm47CiBlcnJfbWlzYzoKIAlrZnJlZShpZCk7CkBAIC0yNTAsMjEgKzI0MCwxOSBAQAogfQogCiAvKioKLSAqCWFjdHVhbF90cnlfdG9faWRlbnRpZnkJLQlzZW5kIGF0YS9hdGFwaSBpZGVudGlmeQorICoJaWRlX2Rldl9yZWFkX2lkCS0Jc2VuZCBBVEEvQVRBUEkgSURFTlRJRlkgY29tbWFuZAogICoJQGRyaXZlOiBkcml2ZSB0byBpZGVudGlmeQogICoJQGNtZDogY29tbWFuZCB0byB1c2UKKyAqCUBpZDogYnVmZmVyIGZvciBJREVOVElGWSBkYXRhCiAgKgotICoJdHJ5X3RvX2lkZW50aWZ5KCkgc2VuZHMgYW4gQVRBKFBJKSBJREVOVElGWSByZXF1ZXN0IHRvIGEgZHJpdmUKLSAqCWFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gIEl0IGFsc28gbW9uaXRvcnMgaXJxcyB3aGlsZSB0aGlzIGlzCi0gKgloYXBwZW5pbmcsIGluIGhvcGUgb2YgYXV0b21hdGljYWxseSBkZXRlcm1pbmluZyB3aGljaCBvbmUgaXMKLSAqCWJlaW5nIHVzZWQgYnkgdGhlIGludGVyZmFjZS4KKyAqCVNlbmRzIGFuIEFUQShQSSkgSURFTlRJRlkgcmVxdWVzdCB0byBhIGRyaXZlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4KICAqCiAgKglSZXR1cm5zOgkwICBkZXZpY2Ugd2FzIGlkZW50aWZpZWQKICAqCQkJMSAgZGV2aWNlIHRpbWVkLW91dCAobm8gcmVzcG9uc2UgdG8gaWRlbnRpZnkgcmVxdWVzdCkKICAqCQkJMiAgZGV2aWNlIGFib3J0ZWQgdGhlIGNvbW1hbmQgKHJlZnVzZWQgdG8gaWRlbnRpZnkgaXRzZWxmKQogICovCiAKLXN0YXRpYyBpbnQgYWN0dWFsX3RyeV90b19pZGVudGlmeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCitpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kLCB1MTYgKmlkKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKQEAgLTI3Myw2ICsyNjEsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTggcyA9IDAsIGEgPSAwOwogCisJLyoKKwkgKiBEaXNhYmxlIGRldmljZSBJUlEuICBPdGhlcndpc2Ugd2UnbGwgZ2V0IHNwdXJpb3VzIGludGVycnVwdHMKKwkgKiBkdXJpbmcgdGhlIGlkZW50aWZ5IHBoYXNlIHRoYXQgdGhlIElSUSBoYW5kbGVyIGlzbid0IGV4cGVjdGluZy4KKwkgKi8KKwlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyKQorCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7CisKIAkvKiB0YWtlIGEgZGVlcCBicmVhdGggKi8KIAltc2xlZXAoNTApOwogCkBAIC0zMTcsNyArMzEyLDcgQEAKIAogCWlmIChPS19TVEFUKHMsIEFUQV9EUlEsIEJBRF9SX1NUQVQpKSB7CiAJCS8qIGRyaXZlIHJldHVybmVkIElEICovCi0JCWRvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOworCQlkb19pZGVudGlmeShkcml2ZSwgY21kLCBpZCk7CiAJCS8qIGRyaXZlIHJlc3BvbmRlZCB3aXRoIElEICovCiAJCXJjID0gMDsKIAkJLyogY2xlYXIgZHJpdmUgSVJRICovCkBAIC0zMjksNjMgKzMyNCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKioKLSAqCXRyeV90b19pZGVudGlmeQktCXRyeSB0byBpZGVudGlmeSBhIGRyaXZlCi0gKglAZHJpdmU6IGRyaXZlIHRvIHByb2JlCi0gKglAY21kOiBjb21tYW5kIHRvIHVzZQotICoKLSAqCUlzc3VlIHRoZSBpZGVudGlmeSBjb21tYW5kIGFuZCB0aGVuIGRvIElSUSBwcm9iaW5nIHRvCi0gKgljb21wbGV0ZSB0aGUgaWRlbnRpZmljYXRpb24gd2hlbiBuZWVkZWQgYnkgZmluZGluZyB0aGUKLSAqCUlSUSB0aGUgZHJpdmUgaXMgYXR0YWNoZWQgdG8KLSAqLwotIAotc3RhdGljIGludCB0cnlfdG9faWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwotCWludCByZXR2YWw7Ci0JaW50IGF1dG9wcm9iZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjb29raWUgPSAwOwotCi0JLyoKLQkgKiBEaXNhYmxlIGRldmljZSBpcnEgdW5sZXNzIHdlIG5lZWQgdG8KLQkgKiBwcm9iZSBmb3IgaXQuIE90aGVyd2lzZSB3ZSdsbCBnZXQgc3B1cmlvdXMKLQkgKiBpbnRlcnJ1cHRzIGR1cmluZyB0aGUgaWRlbnRpZnktcGhhc2UgdGhhdAotCSAqIHRoZSBpcnEgaGFuZGxlciBpc24ndCBleHBlY3RpbmcuCi0JICovCi0JaWYgKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKSB7Ci0JCWlmICghaHdpZi0+aXJxKSB7Ci0JCQlhdXRvcHJvYmUgPSAxOwotCQkJY29va2llID0gcHJvYmVfaXJxX29uKCk7Ci0JCX0KLQkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGF1dG9wcm9iZSk7Ci0JfQotCi0JcmV0dmFsID0gYWN0dWFsX3RyeV90b19pZGVudGlmeShkcml2ZSwgY21kKTsKLQotCWlmIChhdXRvcHJvYmUpIHsKLQkJaW50IGlycTsKLQotCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7Ci0JCS8qIGNsZWFyIGRyaXZlIElSUSAqLwotCQkodm9pZCl0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCQl1ZGVsYXkoNSk7Ci0JCWlycSA9IHByb2JlX2lycV9vZmYoY29va2llKTsKLQkJaWYgKCFod2lmLT5pcnEpIHsKLQkJCWlmIChpcnEgPiAwKSB7Ci0JCQkJaHdpZi0+aXJxID0gaXJxOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBNbW1tLi4gbXVsdGlwbGUgSVJRcy4uCi0JCQkJICogZG9uJ3Qga25vdyB3aGljaCB3YXMgb3VycwotCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IElSUSBwcm9iZSBmYWlsZWQgKDB4JWx4KVxuIiwKLQkJCQkJZHJpdmUtPm5hbWUsIGNvb2tpZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IGlkZV9idXN5X3NsZWVwKGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGFsdHN0YXR1cykKIHsKIAl1OCBzdGF0OwpAQCAtNDQwLDYgKzM3OCw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CisJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAlpbnQgcmM7CiAJdTggcHJlc2VudCA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCksIHN0YXQ7CiAKQEAgLTQ3NSwxMSArNDE0LDEwIEBACiAKIAlpZiAoT0tfU1RBVChzdGF0LCBBVEFfRFJEWSwgQVRBX0JVU1kpIHx8CiAJICAgIHByZXNlbnQgfHwgY21kID09IEFUQV9DTURfSURfQVRBUEkpIHsKLQkJLyogc2VuZCBjbWQgYW5kIHdhaXQgKi8KLQkJaWYgKChyYyA9IHRyeV90b19pZGVudGlmeShkcml2ZSwgY21kKSkpIHsKKwkJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIGNtZCwgaWQpOworCQlpZiAocmMpCiAJCQkvKiBmYWlsZWQ6IHRyeSBhZ2FpbiAqLwotCQkJcmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsY21kKTsKLQkJfQorCQkJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIGNtZCwgaWQpOwogCiAJCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCkBAIC00OTQsNyArNDMyLDcgQEAKIAkJCW1zbGVlcCg1MCk7CiAJCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7CiAJCQkodm9pZClpZGVfYnVzeV9zbGVlcChod2lmLCBXQUlUX1dPUlNUQ0FTRSwgMCk7Ci0JCQlyYyA9IHRyeV90b19pZGVudGlmeShkcml2ZSwgY21kKTsKKwkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKIAkJfQogCiAJCS8qIGVuc3VyZSBkcml2ZSBJUlEgaXMgY2xlYXIgKi8KQEAgLTUxNywzNyArNDU1LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qCi0gKgotICovCi1zdGF0aWMgdm9pZCBlbmFibGVfbmVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwotCXU4IHN0YXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogZW5hYmxpbmcgJXMgLS0gIiwKLQkJaHdpZi0+bmFtZSwgKGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXSk7Ci0KLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCW1zbGVlcCg1MCk7Ci0JdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0VYQUJZVEVfRU5BQkxFX05FU1QpOwotCi0JaWYgKGlkZV9idXN5X3NsZWVwKGh3aWYsIFdBSVRfV09SU1RDQVNFLCAwKSkgewotCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWQgKHRpbWVvdXQpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1zbGVlcCg1MCk7Ci0KLQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVChzdGF0LCAwLCBCQURfU1RBVCkpCi0JCXByaW50ayhLRVJOX0NPTlQgImZhaWxlZCAoc3RhdHVzID0gMHglMDJ4KVxuIiwgc3RhdCk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9DT05UICJzdWNjZXNzXG4iKTsKLX0KLQogLyoqCiAgKglwcm9iZV9mb3JfZHJpdmVzCS0JdXBwZXIgbGV2ZWwgZHJpdmUgcHJvYmUKICAqCUBkcml2ZTogZHJpdmUgdG8gcHJvYmUgZm9yCkBAIC01NjMsNiArNDcwLDggQEAKIHN0YXRpYyB1OCBwcm9iZV9mb3JfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWNoYXIgKm07CisJaW50IHJjOworCXU4IGNtZDsKIAogCS8qCiAJICoJSW4gb3JkZXIgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlIHdlIGhhdmUgYW4gaWQKQEAgLTU4NiwyMSArNDk1LDE5IEBACiAKIAkvKiBza2lwIHByb2Jpbmc/ICovCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PUFJPQkUpID09IDApIHsKLXJldHJ5OgogCQkvKiBpZiAhKHN1Y2Nlc3N8fHRpbWVkLW91dCkgKi8KLQkJaWYgKGRvX3Byb2JlKGRyaXZlLCBBVEFfQ01EX0lEX0FUQSkgPj0gMikKKwkJY21kID0gQVRBX0NNRF9JRF9BVEE7CisJCXJjID0gZG9fcHJvYmUoZHJpdmUsIGNtZCk7CisJCWlmIChyYyA+PSAyKSB7CiAJCQkvKiBsb29rIGZvciBBVEFQSSBkZXZpY2UgKi8KLQkJCSh2b2lkKWRvX3Byb2JlKGRyaXZlLCBBVEFfQ01EX0lEX0FUQVBJKTsKKwkJCWNtZCA9IEFUQV9DTURfSURfQVRBUEk7CisJCQlyYyA9IGRvX3Byb2JlKGRyaXZlLCBjbWQpOworCQl9CiAKIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCQkvKiBkcml2ZSBub3QgZm91bmQgKi8KIAkJCXJldHVybiAwOwogCi0JCWlmIChzdHJzdHIobSwgIkUgWCBBIEIgWSBUIEUgTiBFIFMgVCIpKSB7Ci0JCQllbmFibGVfbmVzdChkcml2ZSk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0KIAkJLyogaWRlbnRpZmljYXRpb24gZmFpbGVkPyAqLwogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewogCQkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgewpAQCAtNjE0LDggKzUyMSwxMiBAQAogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIGRldmljZSBvbiBidXMgcmVmdXNlZCBpZGVudGlmaWNhdGlvbi4gSWdub3JpbmcuXG4iLCBkcml2ZS0+bmFtZSk7CiAJCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7CiAJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY21kID09IEFUQV9DTURfSURfQVRBUEkpCisJCQkJaWRlX2NsYXNzaWZ5X2F0YXBpX2Rldihkcml2ZSk7CisJCQllbHNlCisJCQkJaWRlX2NsYXNzaWZ5X2F0YV9kZXYoZHJpdmUpOwogCQl9Ci0JCS8qIGRyaXZlIHdhcyBmb3VuZCAqLwogCX0KIAogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQpAQCAtNzc5LDcgKzY5MCw2IEBACiBzdGF0aWMgaW50IGlkZV9wcm9iZV9wb3J0KGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGlycWQ7CiAJaW50IGksIHJjID0gLUVOT0RFVjsKIApAQCAtNzk3LDkgKzcwNyw2IEBACiAJaWYgKGlycWQpCiAJCWRpc2FibGVfaXJxKGh3aWYtPmlycSk7CiAKLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKLQogCWlmIChpZGVfcG9ydF93YWl0X3JlYWR5KGh3aWYpID09IC1FQlVTWSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXYWl0IGZvciByZWFkeSBmYWlsZWQgYmVmb3JlIHByb2JlICFcbiIsIGh3aWYtPm5hbWUpOwogCkBAIC04MTMsOCArNzIwLDYgQEAKIAkJCXJjID0gMDsKIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KIAkvKgogCSAqIFVzZSBjYWNoZWQgSVJRIG51bWJlci4gSXQgbWlnaHQgYmUgKGFuZCBpcy4uLikgY2hhbmdlZCBieSBwcm9iZQogCSAqIGNvZGUgYWJvdmUKQEAgLTgzMSwyOSArNzM2LDE4IEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCWludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cXVpcmtwcm9jKQotCQkJCXBvcnRfb3BzLT5xdWlya3Byb2MoZHJpdmUpOwotCQl9CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5xdWlya3Byb2MpCisJCQlwb3J0X29wcy0+cXVpcmtwcm9jKGRyaXZlKTsKIAl9CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewotCQkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOwogCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OSUNFMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTklDRTE7CiAKLQkJCWlmIChod2lmLT5kbWFfb3BzKQotCQkJCWlkZV9zZXRfZG1hKGRyaXZlKTsKLQkJfQotCX0KLQotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19JT18zMkJJVCkKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX0lPXzMyQklUOwotCQllbHNlCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9fSU9fMzJCSVQ7CisJCWlmIChod2lmLT5kbWFfb3BzKQorCQkJaWRlX3NldF9kbWEoZHJpdmUpOwogCX0KIH0KIApAQCAtOTI0LDEwICs4MTgsNyBAQAogCWludCBpLCBqID0gMDsKIAogCW11dGV4X2xvY2soJmlkZV9jZmdfbXR4KTsKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCQljb250aW51ZTsKLQorCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CiAJCWlmIChpZGVfaW5pdF9xdWV1ZShkcml2ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaWRlOiBmYWlsZWQgdG8gaW5pdCAlc1xuIiwKIAkJCQkJZHJpdmUtPm5hbWUpOwpAQCAtOTUwLDE0ICs4NDEsMTIgQEAKIHN0YXRpYyBpbnQgaW5pdF9pcnEgKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcjsKIAlpbnQgc2EgPSAwOwogCi0JbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwotCXNwaW5fbG9ja19pbml0KCZod2lmLT5sb2NrKTsKLQotCWluaXRfdGltZXIoJmh3aWYtPnRpbWVyKTsKLQlod2lmLT50aW1lci5mdW5jdGlvbiA9ICZpZGVfdGltZXJfZXhwaXJ5OwotCWh3aWYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylod2lmOworCWlycV9oYW5kbGVyID0gaHdpZi0+aG9zdC0+aXJxX2hhbmRsZXI7CisJaWYgKGlycV9oYW5kbGVyID09IE5VTEwpCisJCWlycV9oYW5kbGVyID0gaWRlX2ludHI7CiAKICNpZiBkZWZpbmVkKF9fbWM2ODAwMF9fKQogCXNhID0gSVJRRl9TSEFSRUQ7CkBAIC05NjksNyArODU4LDcgQEAKIAlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyKQogCQlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CiAKLQlpZiAocmVxdWVzdF9pcnEoaHdpZi0+aXJxLCAmaWRlX2ludHIsIHNhLCBod2lmLT5uYW1lLCBod2lmKSkKKwlpZiAocmVxdWVzdF9pcnEoaHdpZi0+aXJxLCBpcnFfaGFuZGxlciwgc2EsIGh3aWYtPm5hbWUsIGh3aWYpKQogCQlnb3RvIG91dF91cDsKIAogCWlmICghaHdpZi0+cnFzaXplKSB7CkBAIC05OTIsMTAgKzg4MSw4IEBACiAJCXByaW50ayhLRVJOX0NPTlQgIiAoc2VyaWFsaXplZCkiKTsKIAlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCi0JbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CiAJcmV0dXJuIDA7CiBvdXRfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwOTQsMTQgKzk4MSw5IEBACiAKIHN0YXRpYyBpbnQgaHdpZl9pbml0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaW50IG9sZF9pcnE7Ci0KIAlpZiAoIWh3aWYtPmlycSkgewotCQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCQlpZiAoIWh3aWYtPmlycSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIG5vIElSUVxuIiwgaHdpZi0+bmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgbm8gSVJRXG4iLCBod2lmLT5uYW1lKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2Jsa2Rldihod2lmLT5tYWpvciwgaHdpZi0+bmFtZSkpCkBAIC0xMTE5LDI5ICsxMDAxLDEyIEBACiAKIAlzZ19pbml0X3RhYmxlKGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19tYXhfbmVudHMpOwogCQotCWlmIChpbml0X2lycShod2lmKSA9PSAwKQotCQlnb3RvIGRvbmU7Ci0KLQlvbGRfaXJxID0gaHdpZi0+aXJxOwotCS8qCi0JICoJSXQgZmFpbGVkIHRvIGluaXRpYWxpc2UuIEZpbmQgdGhlIGRlZmF1bHQgSVJRIGZvciAKLQkgKgl0aGlzIHBvcnQgYW5kIHRyeSB0aGF0LgotCSAqLwotCWh3aWYtPmlycSA9IF9faWRlX2RlZmF1bHRfaXJxKGh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcik7Ci0JaWYgKCFod2lmLT5pcnEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAotCQkJaHdpZi0+bmFtZSwgb2xkX2lycSk7Ci0JCWdvdG8gb3V0OwotCX0KIAlpZiAoaW5pdF9pcnEoaHdpZikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcHJvYmVkIElSUSAlZCBhbmQgZGVmYXVsdCBJUlEgJWQgZmFpbGVkXG4iLAotCQkJaHdpZi0+bmFtZSwgb2xkX2lycSwgaHdpZi0+aXJxKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAorCQkJaHdpZi0+bmFtZSwgaHdpZi0+aXJxKTsKIAkJZ290byBvdXQ7CiAJfQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBwcm9iZWQgSVJRICVkIGZhaWxlZCwgdXNpbmcgZGVmYXVsdFxuIiwKLQkJaHdpZi0+bmFtZSwgaHdpZi0+aXJxKTsKIAotZG9uZToKIAlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKGh3aWYtPm1ham9yLCAwKSwgTUFYX0RSSVZFUyA8PCBQQVJUTl9CSVRTLAogCQkJICAgIFRISVNfTU9EVUxFLCBhdGFfcHJvYmUsIGF0YV9sb2NrLCBod2lmKTsKIAlyZXR1cm4gMTsKQEAgLTExNTYsMTMgKzEwMjEsMTAgQEAKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHJpdmUtPmdlbmRldjsKIAkJaW50IHJldDsKIAotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCiAJCWRldl9zZXRfbmFtZShkZXYsICIldS4ldSIsIGh3aWYtPmluZGV4LCBpKTsKIAkJZGV2LT5wYXJlbnQgPSAmaHdpZi0+Z2VuZGV2OwogCQlkZXYtPmJ1cyA9ICZpZGVfYnVzX3R5cGU7CkBAIC0xMTg3LDYgKzEwNDksOCBAQAogCiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0lPXzMyQklUKQogCQkJZHJpdmUtPmlvXzMyYml0ID0gMTsKKwkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fSU9fMzJCSVQpCisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19JT18zMkJJVDsKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfVU5NQVNLX0lSUVMpCiAJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19VTk1BU0s7CiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1VOTUFTS19JUlFTKQpAQCAtMTIwOCwxMCArMTA3Miw2IEBACiAJaWYgKGQtPmluaXRfaW9wcykKIAkJZC0+aW5pdF9pb3BzKGh3aWYpOwogCi0JaWYgKCghaHdpZi0+aXJxICYmIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0xFR0FDWV9JUlFTKSkgfHwKLQkgICAgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVMpKQotCQlod2lmLT5pcnEgPSBwb3J0ID8gMTUgOiAxNDsKLQogCS8qIC0+aG9zdF9mbGFncyBtYXkgYmUgc2V0IGJ5IC0+aW5pdF9pb3BzIChvciBldmVuIGVhcmxpZXIuLi4pICovCiAJaHdpZi0+aG9zdF9mbGFncyB8PSBkLT5ob3N0X2ZsYWdzOwogCWh3aWYtPnBpb19tYXNrID0gZC0+cGlvX21hc2s7CkBAIC0xMzEyLDYgKzExNzIsMTIgQEAKIAlod2lmLT5uYW1lWzJdCT0gJ2UnOwogCWh3aWYtPm5hbWVbM10JPSAnMCcgKyBpbmRleDsKIAorCXNwaW5fbG9ja19pbml0KCZod2lmLT5sb2NrKTsKKworCWluaXRfdGltZXIoJmh3aWYtPnRpbWVyKTsKKwlod2lmLT50aW1lci5mdW5jdGlvbiA9ICZpZGVfdGltZXJfZXhwaXJ5OworCWh3aWYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylod2lmOworCiAJaW5pdF9jb21wbGV0aW9uKCZod2lmLT5nZW5kZXZfcmVsX2NvbXApOwogCiAJaHdpZi0+dHBfb3BzID0gJmRlZmF1bHRfdHBfb3BzOwpAQCAtMTU2Miw3ICsxNDI4LDcgQEAKIAogCQlqKys7CiAKLQkJaWRlX2FjcGlfaW5pdChod2lmKTsKKwkJaWRlX2FjcGlfaW5pdF9wb3J0KGh3aWYpOwogCiAJCWlmIChod2lmLT5wcmVzZW50KQogCQkJaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaHdpZik7CkBAIC0xNjE5LDExICsxNDg1LDkgQEAKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaW50IGk7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewotCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmRyaXZlLT5nZW5kZXYpOwotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmZHJpdmUtPmdlbmRldl9yZWxfY29tcCk7Ci0JCX0KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggMWQ4OTc4Yi4uNDE3Y2RlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlJREVfUFJPQ19ERVZTRVQocGlvX21vZGUsIDAsIDI1NSksCiAJSURFX1BST0NfREVWU0VUKHVubWFza2lycSwgMCwgMSksCiAJSURFX1BST0NfREVWU0VUKHVzaW5nX2RtYSwgMCwgMSksCi0JeyAwIH0sCisJeyBOVUxMIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBwcm9jX2lkZV9zZXR0aW5nc193YXJuKHZvaWQpCkBAIC02MDAsNyArNjAwLDcgQEAKIAlpbnQgaTsKIAogCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCB8fCBkcml2ZS0+cHJvYykKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCQljb250aW51ZTsKIAogCQlkcml2ZS0+cHJvYyA9IHByb2NfbWtkaXIoZHJpdmUtPm5hbWUsIHBhcmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCBkN2VjZDNjLi40ZTYxODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCWlkZV9kcml2ZV90CQkqZHJpdmU7CiAJc3RydWN0IGlkZV9kcml2ZXIJKmRyaXZlcjsKIAlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7Ci0Jc3RydWN0IGtyZWYJCWtyZWY7CisJc3RydWN0IGRldmljZQkJZGV2OwogCiAJLyoKIAkgKglmYWlsZWRfcGMgcG9pbnRzIHRvIHRoZSBsYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCwgb3IgY29udGFpbnMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsYXNzICppZGV0YXBlX3N5c2ZzX2NsYXNzOwogCi1zdGF0aWMgdm9pZCBpZGVfdGFwZV9yZWxlYXNlKHN0cnVjdCBrcmVmICopOworc3RhdGljIHZvaWQgaWRlX3RhcGVfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICopOwogCiBzdGF0aWMgc3RydWN0IGlkZV90YXBlX29iaiAqaWRlX3RhcGVfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewpAQCAtMjc5LDcgKzI3OSw3IEBACiAJCWlmIChpZGVfZGV2aWNlX2dldCh0YXBlLT5kcml2ZSkpCiAJCQl0YXBlID0gTlVMTDsKIAkJZWxzZQotCQkJa3JlZl9nZXQoJnRhcGUtPmtyZWYpOworCQkJZ2V0X2RldmljZSgmdGFwZS0+ZGV2KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpZGV0YXBlX3JlZl9tdXRleCk7CiAJcmV0dXJuIHRhcGU7CkBAIC0yOTAsNyArMjkwLDcgQEAKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0YXBlLT5kcml2ZTsKIAogCW11dGV4X2xvY2soJmlkZXRhcGVfcmVmX211dGV4KTsKLQlrcmVmX3B1dCgmdGFwZS0+a3JlZiwgaWRlX3RhcGVfcmVsZWFzZSk7CisJcHV0X2RldmljZSgmdGFwZS0+ZGV2KTsKIAlpZGVfZGV2aWNlX3B1dChkcml2ZSk7CiAJbXV0ZXhfdW5sb2NrKCZpZGV0YXBlX3JlZl9tdXRleCk7CiB9CkBAIC0zMDgsNyArMzA4LDcgQEAKIAltdXRleF9sb2NrKCZpZGV0YXBlX3JlZl9tdXRleCk7CiAJdGFwZSA9IGlkZXRhcGVfZGV2c1tpXTsKIAlpZiAodGFwZSkKLQkJa3JlZl9nZXQoJnRhcGUtPmtyZWYpOworCQlnZXRfZGV2aWNlKCZ0YXBlLT5kZXYpOwogCW11dGV4X3VubG9jaygmaWRldGFwZV9yZWZfbXV0ZXgpOwogCXJldHVybiB0YXBlOwogfQpAQCAtMjE2Niw3ICsyMTY2LDcgQEAKIAlfX0lERV9QUk9DX0RFVlNFVChzcGVlZCwJMCwgMHhmZmZmLCBOVUxMLCBOVUxMKSwKIAlfX0lERV9QUk9DX0RFVlNFVCh0ZHNjLAkJSURFVEFQRV9EU0NfUldfTUlOLCBJREVUQVBFX0RTQ19SV19NQVgsCiAJCQkJCW11bGZfdGRzYywgZGl2Zl90ZHNjKSwKLQl7IDAgfSwKKwl7IE5VTEwgfSwKIH07CiAjZW5kaWYKIApAQCAtMjI1NiwxNSArMjI1NiwxNyBAQAogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCiAJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIHRhcGUtPmRyaXZlcik7Ci0KKwlkZXZpY2VfZGVsKCZ0YXBlLT5kZXYpOwogCWlkZV91bnJlZ2lzdGVyX3JlZ2lvbih0YXBlLT5kaXNrKTsKIAotCWlkZV90YXBlX3B1dCh0YXBlKTsKKwltdXRleF9sb2NrKCZpZGV0YXBlX3JlZl9tdXRleCk7CisJcHV0X2RldmljZSgmdGFwZS0+ZGV2KTsKKwltdXRleF91bmxvY2soJmlkZXRhcGVfcmVmX211dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX3RhcGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIGlkZV90YXBlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSB0b19pZGVfZHJ2KGtyZWYsIGlkZV90YXBlX29iaik7CisJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IHRvX2lkZV9kcnYoZGV2LCBpZGVfdGFwZV9vYmopOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IHRhcGUtPmRyaXZlOwogCXN0cnVjdCBnZW5kaXNrICpnID0gdGFwZS0+ZGlzazsKIApAQCAtMjQwNyw3ICsyNDA5LDEyIEBACiAKIAlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKIAotCWtyZWZfaW5pdCgmdGFwZS0+a3JlZik7CisJdGFwZS0+ZGV2LnBhcmVudCA9ICZkcml2ZS0+Z2VuZGV2OworCXRhcGUtPmRldi5yZWxlYXNlID0gaWRlX3RhcGVfcmVsZWFzZTsKKwlkZXZfc2V0X25hbWUoJnRhcGUtPmRldiwgZGV2X25hbWUoJmRyaXZlLT5nZW5kZXYpKTsKKworCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnRhcGUtPmRldikpCisJCWdvdG8gb3V0X2ZyZWVfZGlzazsKIAogCXRhcGUtPmRyaXZlID0gZHJpdmU7CiAJdGFwZS0+ZHJpdmVyID0gJmlkZXRhcGVfZHJpdmVyOwpAQCAtMjQzNiw2ICsyNDQzLDggQEAKIAogCXJldHVybiAwOwogCitvdXRfZnJlZV9kaXNrOgorCXB1dF9kaXNrKGcpOwogb3V0X2ZyZWVfdGFwZToKIAlrZnJlZSh0YXBlKTsKIGZhaWxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTEwZjZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCkBAIC0wLDAgKzEsMjQ2IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKnVkbWFfc3RyW10gPQorCSB7ICJVRE1BLzE2IiwgIlVETUEvMjUiLCAgIlVETUEvMzMiLCAgIlVETUEvNDQiLAorCSAgICJVRE1BLzY2IiwgIlVETUEvMTAwIiwgIlVETUEvMTMzIiwgIlVETUE3IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm13ZG1hX3N0cltdID0KKwl7ICJNV0RNQTAiLCAiTVdETUExIiwgIk1XRE1BMiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzd2RtYV9zdHJbXSA9CisJeyAiU1dETUEwIiwgIlNXRE1BMSIsICJTV0RNQTIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGlvX3N0cltdID0KKwl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIgfTsKKworLyoqCisgKglpZGVfeGZlcl92ZXJib3NlCS0JcmV0dXJuIElERSBtb2RlIG5hbWVzCisgKglAbW9kZTogdHJhbnNmZXIgbW9kZQorICoKKyAqCVJldHVybnMgYSBjb25zdGFudCBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2RlCisgKglyZXF1ZXN0ZWQuCisgKi8KKworY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKQoreworCWNvbnN0IGNoYXIgKnM7CisJdTggaSA9IG1vZGUgJiAweGY7CisKKwlpZiAobW9kZSA+PSBYRkVSX1VETUFfMCAmJiBtb2RlIDw9IFhGRVJfVURNQV83KQorCQlzID0gdWRtYV9zdHJbaV07CisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9NV19ETUFfMikKKwkJcyA9IG13ZG1hX3N0cltpXTsKKwllbHNlIGlmIChtb2RlID49IFhGRVJfU1dfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1NXX0RNQV8yKQorCQlzID0gc3dkbWFfc3RyW2ldOworCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9QSU9fMCAmJiBtb2RlIDw9IFhGRVJfUElPXzUpCisJCXMgPSBwaW9fc3RyW2kgJiAweDddOworCWVsc2UgaWYgKG1vZGUgPT0gWEZFUl9QSU9fU0xPVykKKwkJcyA9ICJQSU8gU0xPVyI7CisJZWxzZQorCQlzID0gIlhGRVIgRVJST1IiOworCisJcmV0dXJuIHM7Cit9CitFWFBPUlRfU1lNQk9MKGlkZV94ZmVyX3ZlcmJvc2UpOworCisvKioKKyAqCWlkZV9nZXRfYmVzdF9waW9fbW9kZQktCWdldCBQSU8gbW9kZSBmcm9tIGRyaXZlCisgKglAZHJpdmU6IGRyaXZlIHRvIGNvbnNpZGVyCisgKglAbW9kZV93YW50ZWQ6IHByZWZlcnJlZCBtb2RlCisgKglAbWF4X21vZGU6IGhpZ2hlc3QgYWxsb3dlZCBtb2RlCisgKgorICoJVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIFBJTyBzZXR0aW5ncyBmb3IgYSBnaXZlbiBkcml2ZSwKKyAqCWJhc2VkIG9uIHRoZSBkcml2ZS0+aWQgaW5mb3JtYXRpb24gYW5kIHRoZSBpZGVfcGlvX2JsYWNrbGlzdFtdLgorICoKKyAqCURyaXZlIFBJTyBtb2RlIGlzIGF1dG8tc2VsZWN0ZWQgaWYgMjU1IGlzIHBhc3NlZCBhcyBtb2RlX3dhbnRlZC4KKyAqCVRoaXMgaXMgdXNlZCBieSBtb3N0IGNoaXBzZXQgc3VwcG9ydCBtb2R1bGVzIHdoZW4gImF1dG8tdHVuaW5nIi4KKyAqLworCit1OCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlX3dhbnRlZCwgdTggbWF4X21vZGUpCit7CisJdTE2ICppZCA9IGRyaXZlLT5pZDsKKwlpbnQgcGlvX21vZGUgPSAtMSwgb3ZlcnJpZGRlbiA9IDA7CisKKwlpZiAobW9kZV93YW50ZWQgIT0gMjU1KQorCQlyZXR1cm4gbWluX3QodTgsIG1vZGVfd2FudGVkLCBtYXhfbW9kZSk7CisKKwlpZiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BJT19OT19CTEFDS0xJU1QpID09IDApCisJCXBpb19tb2RlID0gaWRlX3NjYW5fcGlvX2JsYWNrbGlzdCgoY2hhciAqKSZpZFtBVEFfSURfUFJPRF0pOworCisJaWYgKHBpb19tb2RlICE9IC0xKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpcyBvbiBQSU8gYmxhY2tsaXN0XG4iLCBkcml2ZS0+bmFtZSk7CisJfSBlbHNlIHsKKwkJcGlvX21vZGUgPSBpZFtBVEFfSURfT0xEX1BJT19NT0RFU10gPj4gODsKKwkJaWYgKHBpb19tb2RlID4gMikgewkvKiAyIGlzIG1heGltdW0gYWxsb3dlZCB0UElPIHZhbHVlICovCisJCQlwaW9fbW9kZSA9IDI7CisJCQlvdmVycmlkZGVuID0gMTsKKwkJfQorCisJCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewkgICAgICAvKiBBVEEyPyAqLworCQkJaWYgKGF0YV9pZF9oYXNfaW9yZHkoaWQpKSB7CisJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNykgeworCQkJCQlvdmVycmlkZGVuID0gMDsKKwkJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNCkKKwkJCQkJCXBpb19tb2RlID0gNTsKKwkJCQkJZWxzZSBpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiAyKQorCQkJCQkJcGlvX21vZGUgPSA0OworCQkJCQllbHNlCisJCQkJCQlwaW9fbW9kZSA9IDM7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG92ZXJyaWRkZW4pCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogdFBJTyA+IDIsIGFzc3VtaW5nIHRQSU8gPSAyXG4iLAorCQkJCQkgZHJpdmUtPm5hbWUpOworCX0KKworCWlmIChwaW9fbW9kZSA+IG1heF9tb2RlKQorCQlwaW9fbW9kZSA9IG1heF9tb2RlOworCisJcmV0dXJuIHBpb19tb2RlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2dldF9iZXN0X3Bpb19tb2RlKTsKKworaW50IGlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCisJCXJldHVybiAwOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFRPRE86IHRlbXBvcmFyeSBoYWNrIGZvciBzb21lIGxlZ2FjeSBob3N0IGRyaXZlcnMgdGhhdCBkaWRuJ3QKKwkgKiBzZXQgdHJhbnNmZXIgbW9kZSBvbiB0aGUgZGV2aWNlIGluIC0+c2V0X3Bpb19tb2RlIG1ldGhvZC4uLgorCSAqLworCWlmIChwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpIHsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7CisJCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKKwkJCXJldHVybiAtMTsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKKwl9Cit9CisKK2ludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQorCQlyZXR1cm4gMDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgeworCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCisJCQlyZXR1cm4gLTE7CisJCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKKwkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfZG1hX21vZGUpOworCisvKiByZXFfcGlvID09ICIyNTUiIGZvciBhdXRvLXR1bmUgKi8KK3ZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByZXFfcGlvKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCXU4IGhvc3RfcGlvLCBwaW87CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQorCQlyZXR1cm47CisKKwlCVUdfT04oaHdpZi0+cGlvX21hc2sgPT0gMHgwMCk7CisKKwlob3N0X3BpbyA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxOworCisJcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCByZXFfcGlvLCBob3N0X3Bpbyk7CisKKwkvKgorCSAqIFRPRE86CisJICogLSByZXBvcnQgZGV2aWNlIG1heCBQSU8gbW9kZQorCSAqIC0gY2hlY2sgcmVxX3BpbyAhPSAyNTUgYWdhaW5zdCBkZXZpY2UgbWF4IFBJTyBtb2RlCisJICovCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0IG1heCBQSU8lZCB3YW50ZWQgUElPJWQlcyBzZWxlY3RlZCBQSU8lZFxuIiwKKwkJCSAgZHJpdmUtPm5hbWUsIGhvc3RfcGlvLCByZXFfcGlvLAorCQkJICByZXFfcGlvID09IDI1NSA/ICIoYXV0by10dW5lKSIgOiAiIiwgcGlvKTsKKworCSh2b2lkKWlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9waW8pOworCisvKioKKyAqCWlkZV9yYXRlX2ZpbHRlcgkJLQlmaWx0ZXIgdHJhbnNmZXIgbW9kZQorICoJQGRyaXZlOiBJREUgZGV2aWNlCisgKglAc3BlZWQ6IGRlc2lyZWQgc3BlZWQKKyAqCisgKglHaXZlbiB0aGUgYXZhaWxhYmxlIHRyYW5zZmVyIG1vZGVzIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICoJdGhlIGJlc3QgYXZhaWxhYmxlIHNwZWVkIGF0IG9yIGJlbG93IHRoZSBzcGVlZCByZXF1ZXN0ZWQuCisgKgorICoJVE9ETzogY2hlY2sgZGV2aWNlIFBJTyBjYXBhYmlsaXRpZXMKKyAqLworCitzdGF0aWMgdTggaWRlX3JhdGVfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IG1vZGUgPSBpZGVfZmluZF9kbWFfbW9kZShkcml2ZSwgc3BlZWQpOworCisJaWYgKG1vZGUgPT0gMCkgeworCQlpZiAoaHdpZi0+cGlvX21hc2spCisJCQltb2RlID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDEgKyBYRkVSX1BJT18wOworCQllbHNlCisJCQltb2RlID0gWEZFUl9QSU9fNDsKKwl9CisKKy8qCXByaW50aygiJXM6IG1vZGUgMHglMDJ4LCBzcGVlZCAweCUwMnhcbiIsIF9fZnVuY19fLCBtb2RlLCBzcGVlZCk7ICovCisKKwlyZXR1cm4gbWluKHNwZWVkLCBtb2RlKTsKK30KKworLyoqCisgKglpZGVfc2V0X3hmZXJfcmF0ZQktCXNldCB0cmFuc2ZlciByYXRlCisgKglAZHJpdmU6IGRyaXZlIHRvIHNldAorICoJQHJhdGU6IHNwZWVkIHRvIGF0dGVtcHQgdG8gc2V0CisgKgorICoJR2VuZXJhbCBoZWxwZXIgZm9yIHNldHRpbmcgdGhlIHNwZWVkIG9mIGFuIElERSBkZXZpY2UuIFRoaXMKKyAqCWZ1bmN0aW9uIGtub3dzIGFib3V0IHVzZXIgZW5mb3JjZWQgbGltaXRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKyAqCXdoaWNoIC0+c2V0X3Bpb19tb2RlLy0+c2V0X2RtYV9tb2RlIGRvZXMgbm90LgorICovCisKK2ludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwgfHwKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQorCQlyZXR1cm4gLTE7CisKKwlyYXRlID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCByYXRlKTsKKworCUJVR19PTihyYXRlIDwgWEZFUl9QSU9fMCk7CisKKwlpZiAocmF0ZSA+PSBYRkVSX1BJT18wICYmIHJhdGUgPD0gWEZFUl9QSU9fNSkKKwkJcmV0dXJuIGlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIHJhdGUpOworCisJcmV0dXJuIGlkZV9zZXRfZG1hX21vZGUoZHJpdmUsIHJhdGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCAyNTg4MDVkLi45MmM5YjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtNjIsMTYwICs2Miw2IEBACiAKIHN0cnVjdCBjbGFzcyAqaWRlX3BvcnRfY2xhc3M7CiAKLS8qCi0gKglMb2NrcyBmb3IgSURFIHNldHRpbmcgZnVuY3Rpb25hbGl0eQotICovCi0KLURFRklORV9NVVRFWChpZGVfc2V0dGluZ19tdHgpOwotCi1pZGVfZGV2c2V0X2dldChpb18zMmJpdCwgaW9fMzJiaXQpOwotCi1zdGF0aWMgaW50IHNldF9pb18zMmJpdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHJpdmUtPmlvXzMyYml0ID0gYXJnOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7Ci0KLXN0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYXJnKQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOwotCi1zdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQotCWludCBlcnIgPSAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gMDsKLQotCWlmIChhcmcpIHsKLQkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKLQkJCWVyciA9IC1FSU87Ci0JfSBlbHNlCi0JCWlkZV9kbWFfb2ZmKGRyaXZlKTsKLQotb3V0OgotCXJldHVybiBlcnI7Ci0jZWxzZQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIC1FUEVSTTsKLSNlbmRpZgotfQotCi0vKgotICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKLSAqLwotc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKLXsKLQlzd2l0Y2ggKHJlcV9waW8pIHsKLQljYXNlIDIwMjoKLQljYXNlIDIwMToKLQljYXNlIDIwMDoKLQljYXNlIDEwMjoKLQljYXNlIDEwMToKLQljYXNlIDEwMDoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKLQljYXNlIDk6Ci0JY2FzZSA4OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7Ci0JY2FzZSA3OgotCWNhc2UgNjoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCi0JCXJldHVybiAtRU5PU1lTOwotCi0JaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgewotCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQl9IGVsc2UKLQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7Ci0JfSBlbHNlIHsKLQkJaW50IGtlZXBfZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOwotCi0JCWlkZV9zZXRfcGlvKGRyaXZlLCBhcmcpOwotCi0JCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgewotCQkJaWYgKGtlZXBfZG1hKQotCQkJCWlkZV9kbWFfb24oZHJpdmUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKLQotc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmcpCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOwotaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7Ci1pZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKLWlkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOwotX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOwotCiAvKioKICAqIGlkZV9kZXZpY2VfZ2V0CS0JZ2V0IGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIGEgaWRlX2RyaXZlX3QKICAqIEBkcml2ZToJZGV2aWNlIHRvIGdldCBhIHJlZmVyZW5jZSB0bwpAQCAtMzM3LDYgKzE4Myw3IEBACiAJaW50IGEsIGIsIGksIGogPSAxOwogCXVuc2lnbmVkIGludCAqZGV2X3BhcmFtX21hc2sgPSAodW5zaWduZWQgaW50ICopa3AtPmFyZzsKIAorCS8qIGNvbnRyb2xsZXIgLiBkZXZpY2UgKDAgb3IgMSkgWyA6IDEgKHNldCkgfCAwIChjbGVhcikgXSAqLwogCWlmIChzc2NhbmYocywgIiVkLiVkOiVkIiwgJmEsICZiLCAmaikgIT0gMyAmJgogCSAgICBzc2NhbmYocywgIiVkLiVkIiwgJmEsICZiKSAhPSAyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM0OSw3ICsxOTYsNyBAQAogCWlmIChqKQogCQkqZGV2X3BhcmFtX21hc2sgfD0gKDEgPDwgaSk7CiAJZWxzZQotCQkqZGV2X3BhcmFtX21hc2sgJj0gKDEgPDwgaSk7CisJCSpkZXZfcGFyYW1fbWFzayAmPSB+KDEgPDwgaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5Miw2ICsyMzksOCBAQAogewogCWludCBhLCBiLCBjID0gMCwgaCA9IDAsIHMgPSAwLCBpLCBqID0gMTsKIAorCS8qIGNvbnRyb2xsZXIgLiBkZXZpY2UgKDAgb3IgMSkgOiBDeWxpbmRlcnMgLCBIZWFkcyAsIFNlY3RvcnMgKi8KKwkvKiBjb250cm9sbGVyIC4gZGV2aWNlICgwIG9yIDEpIDogMSAodXNlIENIUykgfCAwIChpZ25vcmUgQ0hTKSAqLwogCWlmIChzc2NhbmYoc3RyLCAiJWQuJWQ6JWQsJWQsJWQiLCAmYSwgJmIsICZjLCAmaCwgJnMpICE9IDUgJiYKIAkgICAgc3NjYW5mKHN0ciwgIiVkLiVkOiVkIiwgJmEsICZiLCAmaikgIT0gMykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MDcsNyArMjU2LDcgQEAKIAlpZiAoaikKIAkJaWRlX2Rpc2tzIHw9ICgxIDw8IGkpOwogCWVsc2UKLQkJaWRlX2Rpc2tzICY9ICgxIDw8IGkpOworCQlpZGVfZGlza3MgJj0gfigxIDw8IGkpOwogCiAJaWRlX2Rpc2tzX2Noc1tpXS5jeWwgID0gYzsKIAlpZGVfZGlza3NfY2hzW2ldLmhlYWQgPSBoOwpAQCAtNDY5LDYgKzMxOCw4IEBACiB7CiAJaW50IGksIGogPSAxOwogCisJLyogY29udHJvbGxlciAoaWdub3JlKSAqLworCS8qIGNvbnRyb2xsZXIgOiAxIChpZ25vcmUpIHwgMCAodXNlKSAqLwogCWlmIChzc2NhbmYocywgIiVkOiVkIiwgJmksICZqKSAhPSAyICYmIHNzY2FuZihzLCAiJWQiLCAmaSkgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTQ3OCw3ICszMjksNyBAQAogCWlmIChqKQogCQlpZGVfaWdub3JlX2NhYmxlIHw9ICgxIDw8IGkpOwogCWVsc2UKLQkJaWRlX2lnbm9yZV9jYWJsZSAmPSAoMSA8PCBpKTsKKwkJaWRlX2lnbm9yZV9jYWJsZSAmPSB+KDEgPDwgaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMiw2ICszNzMsOCBAQAogCQlnb3RvIG91dF9wb3J0X2NsYXNzOwogCX0KIAorCWlkZV9hY3BpX2luaXQoKTsKKwogCXByb2NfaWRlX2NyZWF0ZSgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pdDgyMXguYyBiL2RyaXZlcnMvaWRlL2l0ODIxeC5jCmluZGV4IGUxYzRmNTQuLjZiOWZjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvaWRlL2l0ODIxeC5jCkBAIC01LDkgKzUsOCBAQAogICogIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIEJhc2VkIGluIHBhcnQgb24gdGhlIElURSB2ZW5kb3IgcHJvdmlkZWQgU0NTSSBkcml2ZXIuCiAgKgotICogIERvY3VtZW50YXRpb24gYXZhaWxhYmxlIGZyb20KLSAqIAlodHRwOi8vd3d3Lml0ZS5jb20udHcvcGMvSVQ4MjEyRl9WMDQucGRmCi0gKiAgU29tZSBvdGhlciBkb2N1bWVudHMgYXJlIE5EQS4KKyAqICBEb2N1bWVudGF0aW9uOgorICoJRGF0YXNoZWV0IGlzIGZyZWVseSBhdmFpbGFibGUsIHNvbWUgb3RoZXIgZG9jdW1lbnRzIHVuZGVyIE5EQS4KICAqCiAgKiAgVGhlIElURTgyMTIgaXNuJ3QgZXhhY3RseSBhIHN0YW5kYXJkIElERSBjb250cm9sbGVyLiBJdCBoYXMgdHdvCiAgKiAgbW9kZXMuIEluIHBhc3MgdGhyb3VnaCBtb2RlIHRoZW4gaXQgaXMgYW4gSURFIGNvbnRyb2xsZXIuIEluIGl0cyBzbWFydApAQCAtNjA0LDcgKzYwMyw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4MjApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pdDgyMXgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2l0ODIxeChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IGNvbmY7CiAJc3RhdGljIGNoYXIgKm1vZGVbMl0gPSB7ICJwYXNzIHRocm91Z2giLCAic21hcnQiIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKaW5kZXggODM2NDNlZC4uZWE0OGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvaWRlL25zODc0MTUuYwpAQCAtMjg2LDkgKzI4Niw3IEBACiAJfQogCiAJaWYgKCF1c2luZ19pbnRhKQotCQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCWVsc2UgaWYgKCFod2lmLT5pcnEgJiYgaHdpZi0+bWF0ZSAmJiBod2lmLT5tYXRlLT5pcnEpCi0JCWh3aWYtPmlycSA9IGh3aWYtPm1hdGUtPmlycTsJLyogc2hhcmUgSVJRIHdpdGggbWF0ZSAqLworCQlod2lmLT5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgaHdpZi0+Y2hhbm5lbCk7CiAKIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCmluZGV4IGYyMTI5MGMuLmI2ODkwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCisrKyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjbmV3KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9wZGNuZXcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAljb25zdCBjaGFyICpuYW1lID0gRFJWX05BTUU7CiAJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAjZW5kaWYKIAogIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqIF9fZGV2aW5pdCBwZGMyMDI3MF9nZXRfZGV2MihzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwppbmRleCA5NzE5MzMyLi5jYmE2NmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWRlX2RtYV90aW1lb3V0KGRyaXZlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjMjAyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBkbWFiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7CiAJdTggdWRtYV9zcGVlZF9mbGFnID0gMCwgcHJpbWFyeV9tb2RlID0gMCwgc2Vjb25kYXJ5X21vZGUgPSAwOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCXByaW50aygiJXNBQ1RJVkVcbiIsIChpbmIoZG1hYmFzZSB8IDB4MWYpICYgMSkgPyAiIiA6ICJJTiIpOwogCX0KIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwZGMyMDJhdGE0X2ZpeHVwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGlpeC5jIGIvZHJpdmVycy9pZGUvcGlpeC5jCmluZGV4IGYxZTJlNGUuLjJhYTY5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9waWl4LmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogICoJb3V0IHRvIGJlIG5pY2UgYW5kIHNpbXBsZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pY2goc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2ljaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiBleHRyYSA9IDA7CiAKQEAgLTMxOCwxOSArMzE4LDEyIEBACiAJLmNhYmxlX2RldGVjdAkJPSBwaWl4X2NhYmxlX2RldGVjdCwKIH07CiAKLSNpZm5kZWYgQ09ORklHX0lBNjQKLSAjZGVmaW5lIElERV9IRkxBR1NfUElJWCBJREVfSEZMQUdfTEVHQUNZX0lSUVMKLSNlbHNlCi0gI2RlZmluZSBJREVfSEZMQUdTX1BJSVggMAotI2VuZGlmCi0KICNkZWZpbmUgREVDTEFSRV9QSUlYX0RFVih1ZG1hKSBcCiAJewkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQlcCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGlpeCwJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAogCQkucG9ydF9vcHMJPSAmcGlpeF9wb3J0X29wcywJXAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUElJWCwJXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwJCVwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksCVwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAlcCkBAIC0zNDQsNyArMzM3LDYgQEAKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9waWl4LCBcCiAJCS5lbmFibGViaXRzCT0ge3sweDQxLDB4ODAsMHg4MH0sIHsweDQzLDB4ODAsMHg4MH19LCBcCiAJCS5wb3J0X29wcwk9ICZpY2hfcG9ydF9vcHMsIFwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsIFwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksIFwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCBcCkBAIC0zNjAsOCArMzUyLDcgQEAKIAkJICovCiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg2ZCwweGMwLDB4ODB9LCB7MHg2ZCwweGMwLDB4YzB9fSwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTIHwgSURFX0hGTEFHX05PX0RNQSB8Ci0JCQkJICBJREVfSEZMQUdTX1BJSVgsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0lTQV9QT1JUUyB8IElERV9IRkxBR19OT19ETUEsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkvKiBUaGlzIGlzIGEgcGFpbmZ1bCBzeXN0ZW0gYmVzdCB0byBsZXQgaXQgc2VsZiB0dW5lIGZvciBub3cgKi8KIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKaW5kZXggMzgyMTAyYi4uYjY1NTRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCB1bHRyYV9lbmFibGUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zdndrcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfc3Z3a3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCXU4IGJ0cjsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVBLCBidHIpOwogCX0KIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGF0YTY2X3N2d2tzX3N2d2tzKGlkZV9od2lmX3QgKmh3aWYpCkBAIC0zNTMsMTQgKzM1MywxMSBAQAogCS5jYWJsZV9kZXRlY3QJCT0gc3Z3a3NfY2FibGVfZGV0ZWN0LAogfTsKIAotI2RlZmluZSBJREVfSEZMQUdTX1NWV0tTIElERV9IRkxBR19MRUdBQ1lfSVJRUwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2VydmVyd29ya3NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMDogT1NCNCAqLwogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJm9zYjRfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IDB4MDAsIC8qIFVETUEgaXMgcHJvYmxlbWF0aWMgb24gT1NCNCAqLwpAQCAtMzY5LDcgKzM2Niw2IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTM3OCw3ICszNzQsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0zODcsNyArMzgyLDcgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTIHwgSURFX0hGTEFHX1NJTkdMRSwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMzk2LDcgKzM5MSw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUyB8IElERV9IRkxBR19TSU5HTEUsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggZTg1ZDFlZC4uMjRiYzg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTMwNSw3ICszMDUsNiBAQAogICoJQGRldjogUENJIGRldmljZSBob2xkaW5nIGludGVyZmFjZQogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCUBwb3J0OiBwb3J0IG51bWJlcgotICoJQGlycTogUENJIElSUQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQKICAqCiAgKglQZXJmb3JtIHRoZSBpbml0aWFsIHNldCB1cCBmb3IgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBzdHJ1Y3R1cmUuIFRoaXMKQEAgLTMxNiw3ICszMTUsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaWRlX2h3X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaW50IGlycSwgaHdfcmVnc190ICpodykKKwkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaHdfcmVnc190ICpodykKIHsKIAl1bnNpZ25lZCBsb25nIGN0bCA9IDAsIGJhc2UgPSAwOwogCkBAIC0zNDQsNyArMzQzLDYgQEAKIAl9CiAKIAltZW1zZXQoaHcsIDAsIHNpemVvZigqaHcpKTsKLQlody0+aXJxID0gaXJxOwogCWh3LT5kZXYgPSAmZGV2LT5kZXY7CiAJaHctPmNoaXBzZXQgPSBkLT5jaGlwc2V0ID8gZC0+Y2hpcHNldCA6IGlkZV9wY2k7CiAJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBiYXNlLCBjdGwgfCAyKTsKQEAgLTQ0OCw3ICs0NDYsNiBAQAogICoJaWRlX3BjaV9zZXR1cF9wb3J0cwktCWNvbmZpZ3VyZSBwb3J0cy9kZXZpY2VzIG9uIFBDSSBJREUKICAqCUBkZXY6IFBDSSBkZXZpY2UKICAqCUBkOiBJREUgcG9ydCBpbmZvCi0gKglAcGNpaXJxOiBJUlEgbGluZQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQQ0kgSURFIGRldmljZQogICoJQGh3czogaHdfcmVnc190IHBvaW50ZXJzIHRhYmxlIHRvIHVwZGF0ZQogICoKQEAgLTQ2Miw3ICs0NTksNyBAQAogICovCiAKIHZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSBpbnQgcGNpaXJxLCBod19yZWdzX3QgKmh3LCBod19yZWdzX3QgKipod3MpCisJCQkgaHdfcmVnc190ICpodywgaHdfcmVnc190ICoqaHdzKQogewogCWludCBjaGFubmVscyA9IChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NJTkdMRSkgPyAxIDogMiwgcG9ydDsKIAl1OCB0bXA7CkBAIC00ODEsNyArNDc4LDcgQEAKIAkJCWNvbnRpbnVlOwkvKiBwb3J0IG5vdCBlbmFibGVkICovCiAJCX0KIAotCQlpZiAoaWRlX2h3X2NvbmZpZ3VyZShkZXYsIGQsIHBvcnQsIHBjaWlycSwgaHcgKyBwb3J0KSkKKwkJaWYgKGlkZV9od19jb25maWd1cmUoZGV2LCBkLCBwb3J0LCBodyArIHBvcnQpKQogCQkJY29udGludWU7CiAKIAkJKihod3MgKyBwb3J0KSA9IGh3ICsgcG9ydDsKQEAgLTUyNCw3ICs1MjEsNyBAQAogCQlpZiAobm9pc3kpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogbm90IDEwMCUlIG5hdGl2ZSBtb2RlOiB3aWxsICIKIAkJCQkicHJvYmUgaXJxcyBsYXRlclxuIiwgZC0+bmFtZSwgcGNpX25hbWUoZGV2KSk7Ci0JCXBjaWlycSA9IHJldDsKKwkJcGNpaXJxID0gMDsKIAl9IGVsc2UgaWYgKCFwY2lpcnEgJiYgbm9pc3kpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXM6IGJhZCBpcnEgKCVkKTogd2lsbCBwcm9iZSBsYXRlclxuIiwKIAkJCWQtPm5hbWUsIHBjaV9uYW1lKGRldiksIHBjaWlycSk7CkBAIC01NDksNyArNTQ2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgJmh3WzBdLCAmaHdzWzBdKTsKIAogCWhvc3QgPSBpZGVfaG9zdF9hbGxvYyhkLCBod3MpOwogCWlmIChob3N0ID09IE5VTEwpIHsKQEAgLTU2OCw3ICs1NjUsMTEgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBmaXh1cCBJUlEgKi8KLQlod1sxXS5pcnEgPSBod1swXS5pcnEgPSByZXQ7CisJaWYgKGlkZV9wY2lfaXNfaW5fY29tcGF0aWJpbGl0eV9tb2RlKGRldikpIHsKKwkJaHdbMF0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIDApOworCQlod1sxXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgMSk7CisJfSBlbHNlCisJCWh3WzFdLmlycSA9IGh3WzBdLmlycSA9IHJldDsKIAogCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIGQsIGh3cyk7CiAJaWYgKHJldCkKQEAgLTU5MSw3ICs1OTIsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCi0JCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgMCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CisJCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CiAJfQogCiAJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKGQsIGh3cyk7CkBAIC02MTksNyArNjIwLDExIEBACiAJCQlnb3RvIG91dDsKIAogCQkvKiBmaXh1cCBJUlEgKi8KLQkJaHdbaSoyICsgMV0uaXJxID0gaHdbaSoyXS5pcnEgPSByZXQ7CisJCWlmIChpZGVfcGNpX2lzX2luX2NvbXBhdGliaWxpdHlfbW9kZShwZGV2W2ldKSkgeworCQkJaHdbaSoyXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHBkZXZbaV0sIDApOworCQkJaHdbaSoyICsgMV0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShwZGV2W2ldLCAxKTsKKwkJfSBlbHNlCisJCQlod1tpKjIgKyAxXS5pcnEgPSBod1tpKjJdLmlycSA9IHJldDsKIAl9CiAKIAlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBkLCBod3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCmluZGV4IGNiMmIzNTIuLjE4MTFhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICoJdG8gMTMzIE1IeiBjbG9ja2luZyBpZiB0aGUgc3lzdGVtIGlzbid0IGFscmVhZHkgc2V0IHVwIHRvIGRvIGl0LgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGhvc3QtPmhvc3RfcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCA5ZWMxYTRhLi5hZmNhMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC00NDcsNyArNDQ3LDcgQEAKIAlyZXR1cm4gY2hpcHNldF9mYW1pbHk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAkvKiBNYWtlIGdlbmVyYWwgY29uZmlnIG9wcyBoZXJlCiAJICAgMS8gdGVsbCBJREUgY2hhbm5lbHMgdG8gb3BlcmF0ZSBpbiBDb21wYXRpYmlsaXR5IG1vZGUgb25seQpAQCAtNTYzLDcgKzU2Myw3IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zaXM1NTEzLAogCS5lbmFibGViaXRzCT0geyB7MHg0YSwgMHgwMiwgMHgwMn0sIHsweDRhLCAweDA0LCAweDA0fSB9LAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTIHwgSURFX0hGTEFHX05PX0FVVE9ETUEsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVVUT0RNQSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKaW5kZXggNjI5Nzk1Ni4uZGJhMjEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCkBAIC0yNzEsNyArMjcxLDcgQEAKICAqIGNoYW5uZWwgMCBoZXJlIGF0IGxlYXN0LCBidXQgY2hhbm5lbCAxIGhhcyB0byBiZSBlbmFibGVkIGJ5CiAgKiBmaXJtd2FyZSBvciBhcmNoIGNvZGUuIFdlIHN0aWxsIHNldCBib3RoIHRvIDE2IGJpdHMgbW9kZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc2w4MmMxMDUoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NsODJjMTA1KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIHZhbDsKIApAQCAtMjgxLDcgKzI4MSw3IEBACiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzbDgyYzEwNV9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMgYi9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCmluZGV4IDQwYjRiOTQuLmY1NWQ3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKKysrIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwpAQCAtMTM2LDcgKzEzNiw2IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmVuYWJsZWJpdHMJPSB7IHsweDQxLCAweDgwLCAweDgwfSwgezB4NDMsIDB4ODAsIDB4ODB9IH0sCiAJLnBvcnRfb3BzCT0gJnNsYzkwZTY2X3BvcnRfb3BzLAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTLAogCS5waW9fbWFzawk9IEFUQV9QSU80LAogCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLAogCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKaW5kZXggYjZhMTI4NS4uMWMwOWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKQEAgLTI3Nyw5ICsyNzcsNiBAQAogCWlmIChyZWcgJiAweDEwKQogCQkvKiBsZWdhY3kgbW9kZSAqLwogCQlod2lmLT5pcnEgPSBod2lmLT5jaGFubmVsID8gMTUgOiAxNDsKLQllbHNlIGlmICghaHdpZi0+aXJxICYmIGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+aXJxKQotCQkvKiBzaGFyaW5nIElSUSB3aXRoIG1hdGUgKi8KLQkJaHdpZi0+aXJxID0gaHdpZi0+bWF0ZS0+aXJxOwogCiAjaWYgMQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKaW5kZXggNjA5MmZlMy4uM2ZmNzIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKKysrIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICoJYW5kIGluaXRpYWxpemUgaXRzIGRyaXZlIGluZGVwZW5kZW50IHJlZ2lzdGVycy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF92aWE4MmN4eHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3ZpYTgyY3h4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gaG9zdC0+aG9zdF9wcml2OwpAQCAtNDQzLDE2ICs0NDMsNiBAQAogCWlmICgodmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKSA9PSAwKQogCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX1VOTUFTS19JUlFTOwogCi0jaWZkZWYgQ09ORklHX1BQQ19DSFJQCi0JaWYgKG1hY2hpbmVfaXMoY2hycCkgJiYgX2NocnBfdHlwZSA9PSBfQ0hSUF9QZWdhc29zKQotCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQU1JR0FPTkUKLQlpZiAobWFjaGluZV9pcyhhbWlnYW9uZSkpCi0JCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVM7Ci0jZW5kaWYKLQogCWQudWRtYV9tYXNrID0gdmlhX2NvbmZpZy0+dWRtYV9tYXNrOwogCiAJdmRldiA9IGt6YWxsb2Moc2l6ZW9mKCp2ZGV2KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5oIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuaAppbmRleCAyNzI3YmNkLi40NjczNzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCitzdHJ1Y3QgZmlsZTsKIHN0cnVjdCBwY2lfZGV2Owogc3RydWN0IHNjYXR0ZXJsaXN0Owogc3RydWN0IHZtX2FyZWFfc3RydWN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKaW5kZXggMzgzOGJjNC4uY2IxNWJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCkBAIC0xMzI1LDExICsxMzI1LDcgQEAKIAogCXN0cnVjdCB2aWRlb19jYXJkICp2aWRlbyA9IGZpbGVfdG9fdmlkZW9fY2FyZChmaWxlKTsKIAotCWludCByZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBkdjEzOTRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmMgYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuYwppbmRleCAyYmViOGQ5Li44NzIzMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuYwpAQCAtMTI3NSw3ICsxMjc1LDcgQEAKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oSUVFRTEzOTRfQ09SRV9ERVYsIDI1Nik7CiB9CiAKLW1vZHVsZV9pbml0KGllZWUxMzk0X2luaXQpOworZnNfaW5pdGNhbGwoaWVlZTEzOTRfaW5pdCk7CiBtb2R1bGVfZXhpdChpZWVlMTM5NF9jbGVhbnVwKTsKIAogLyogRXhwb3J0ZWQgc3ltYm9scyAqLwpAQCAtMTMxNCw2ICsxMzE0LDcgQEAKIEVYUE9SVF9TWU1CT0woaHBzYl9tYWtlX3BoeXBhY2tldCk7CiBFWFBPUlRfU1lNQk9MKGhwc2JfcmVhZCk7CiBFWFBPUlRfU1lNQk9MKGhwc2Jfd3JpdGUpOworRVhQT1JUX1NZTUJPTChocHNiX2xvY2spOwogRVhQT1JUX1NZTUJPTChocHNiX3BhY2tldF9zdWNjZXNzKTsKIAogLyoqIGhpZ2hsZXZlbC5jICoqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF90cmFuc2FjdGlvbnMuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfdHJhbnNhY3Rpb25zLmMKaW5kZXggMTBjM2Q5Zi4uNjc1YjMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF90cmFuc2FjdGlvbnMuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X3RyYW5zYWN0aW9ucy5jCkBAIC01MDEsOCArNTAxLDYgQEAKIAlpZiAobGVuZ3RoID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JQlVHX09OKGluX2ludGVycnVwdCgpKTsJLy8gV2UgY2FuJ3QgYmUgY2FsbGVkIGluIGFuIGludGVycnVwdCwgeWV0Ci0KIAlwYWNrZXQgPSBocHNiX21ha2VfcmVhZHBhY2tldChob3N0LCBub2RlLCBhZGRyLCBsZW5ndGgpOwogCiAJaWYgKCFwYWNrZXQpIHsKQEAgLTU1MCw4ICs1NDgsNiBAQAogCWlmIChsZW5ndGggPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlCVUdfT04oaW5faW50ZXJydXB0KCkpOwkvLyBXZSBjYW4ndCBiZSBjYWxsZWQgaW4gYW4gaW50ZXJydXB0LCB5ZXQKLQogCXBhY2tldCA9IGhwc2JfbWFrZV93cml0ZXBhY2tldChob3N0LCBub2RlLCBhZGRyLCBidWZmZXIsIGxlbmd0aCk7CiAKIAlpZiAoIXBhY2tldCkKQEAgLTU3MCwzICs1NjYsMzAgQEAKIAogCXJldHVybiByZXR2YWw7CiB9CisKK2ludCBocHNiX2xvY2soc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgbm9kZWlkX3Qgbm9kZSwgdW5zaWduZWQgaW50IGdlbmVyYXRpb24sCisJICAgICAgdTY0IGFkZHIsIGludCBleHRjb2RlLCBxdWFkbGV0X3QgKmRhdGEsIHF1YWRsZXRfdCBhcmcpCit7CisJc3RydWN0IGhwc2JfcGFja2V0ICpwYWNrZXQ7CisJaW50IHJldHZhbCA9IDA7CisKKwlwYWNrZXQgPSBocHNiX21ha2VfbG9ja3BhY2tldChob3N0LCBub2RlLCBhZGRyLCBleHRjb2RlLCBkYXRhLCBhcmcpOworCWlmICghcGFja2V0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhY2tldC0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisJcmV0dmFsID0gaHBzYl9zZW5kX3BhY2tldF9hbmRfd2FpdChwYWNrZXQpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGhwc2JfbG9ja19mYWlsOworCisJcmV0dmFsID0gaHBzYl9wYWNrZXRfc3VjY2VzcyhwYWNrZXQpOworCisJaWYgKHJldHZhbCA9PSAwKQorCQkqZGF0YSA9IHBhY2tldC0+ZGF0YVswXTsKKworaHBzYl9sb2NrX2ZhaWw6CisJaHBzYl9mcmVlX3RsYWJlbChwYWNrZXQpOworCWhwc2JfZnJlZV9wYWNrZXQocGFja2V0KTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X3RyYW5zYWN0aW9ucy5oIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF90cmFuc2FjdGlvbnMuaAppbmRleCBkMmQ1YmMzLi4yMGI2OTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X3RyYW5zYWN0aW9ucy5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfdHJhbnNhY3Rpb25zLmgKQEAgLTMwLDYgKzMwLDggQEAKIAkgICAgICB1NjQgYWRkciwgcXVhZGxldF90ICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOwogaW50IGhwc2Jfd3JpdGUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgbm9kZWlkX3Qgbm9kZSwgdW5zaWduZWQgaW50IGdlbmVyYXRpb24sCiAJICAgICAgIHU2NCBhZGRyLCBxdWFkbGV0X3QgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CitpbnQgaHBzYl9sb2NrKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIG5vZGVpZF90IG5vZGUsIHVuc2lnbmVkIGludCBnZW5lcmF0aW9uLAorCSAgICAgIHU2NCBhZGRyLCBpbnQgZXh0Y29kZSwgcXVhZGxldF90ICpkYXRhLCBxdWFkbGV0X3QgYXJnKTsKIAogI2lmZGVmIEhQU0JfREVCVUdfVExBQkVMUwogZXh0ZXJuIHNwaW5sb2NrX3QgaHBzYl90bGFiZWxfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaXNvLmggYi9kcml2ZXJzL2llZWUxMzk0L2lzby5oCmluZGV4IGI1ZGU1ZjIuLmMyMDg5YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaXNvLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9pc28uaApAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBJRUVFMTM5NF9JU09fSAogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCmluZGV4IDkwNmM1YTkuLjUzYWFkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCkBAIC05NzEsNiArOTcxLDkgQEAKIAl1ZC0+dWRfa3YgPSB1ZF9rdjsKIAl1ZC0+aWQgPSAoKmlkKSsrOwogCisJLyogaW5oZXJpdCB2ZW5kb3JfaWQgZnJvbSByb290IGRpcmVjdG9yeSBpZiBub25lIGV4aXN0cyBpbiB1bml0IGRpciAqLworCXVkLT52ZW5kb3JfaWQgPSBuZS0+dmVuZG9yX2lkOworCiAJY3NyMTIxMl9mb3JfZWFjaF9kaXJfZW50cnkobmUtPmNzciwga3YsIHVkX2t2LCBkZW50cnkpIHsKIAkJc3dpdGNoIChrdi0+a2V5LmlkKSB7CiAJCWNhc2UgQ1NSMTIxMl9LVl9JRF9WRU5ET1I6CkBAIC0xMjY1LDcgKzEyNjgsOCBAQAogCQljc3IxMjEyX2Rlc3Ryb3lfY3NyKGNzcik7CiAJfQogCi0JLyogTWFyayB0aGUgbm9kZSBjdXJyZW50ICovCisJLyogRmluYWxseSwgbWFyayB0aGUgbm9kZSBjdXJyZW50ICovCisJc21wX3dtYigpOwogCW5lLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKIAogCWlmIChuZS0+aW5fbGltYm8pIHsKQEAgLTE3OTgsNyArMTgwMiw3IEBACiB7CiAJcGFja2V0LT5ob3N0ID0gbmUtPmhvc3Q7CiAJcGFja2V0LT5nZW5lcmF0aW9uID0gbmUtPmdlbmVyYXRpb247Ci0JYmFycmllcigpOworCXNtcF9ybWIoKTsKIAlwYWNrZXQtPm5vZGVfaWQgPSBuZS0+bm9kZWlkOwogfQogCkBAIC0xODA3LDcgKzE4MTEsNyBAQAogewogCXVuc2lnbmVkIGludCBnZW5lcmF0aW9uID0gbmUtPmdlbmVyYXRpb247CiAKLQliYXJyaWVyKCk7CisJc21wX3JtYigpOwogCXJldHVybiBocHNiX3dyaXRlKG5lLT5ob3N0LCBuZS0+bm9kZWlkLCBnZW5lcmF0aW9uLAogCQkJICBhZGRyLCBidWZmZXIsIGxlbmd0aCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaCBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCmluZGV4IDE1ZWEwOTcuLmVlNWFjZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCkBAIC0yMSw5ICsyMSwxMSBAQAogI2RlZmluZSBfSUVFRTEzOTRfTk9ERU1HUl9ICiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKICNpbmNsdWRlICJpZWVlMTM5NF9jb3JlLmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfdHJhbnNhY3Rpb25zLmgiCiAjaW5jbHVkZSAiaWVlZTEzOTRfdHlwZXMuaCIKIAogc3RydWN0IGNzcjEyMTJfY3NyOwpAQCAtMTU0LDYgKzE1NiwyMiBAQAogdm9pZCBocHNiX25vZGVfZmlsbF9wYWNrZXQoc3RydWN0IG5vZGVfZW50cnkgKm5lLCBzdHJ1Y3QgaHBzYl9wYWNrZXQgKnBhY2tldCk7CiBpbnQgaHBzYl9ub2RlX3dyaXRlKHN0cnVjdCBub2RlX2VudHJ5ICpuZSwgdTY0IGFkZHIsCiAJCSAgICBxdWFkbGV0X3QgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CitzdGF0aWMgaW5saW5lIGludCBocHNiX25vZGVfcmVhZChzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUsIHU2NCBhZGRyLAorCQkJCSBxdWFkbGV0X3QgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQgZyA9IG5lLT5nZW5lcmF0aW9uOworCisJc21wX3JtYigpOworCXJldHVybiBocHNiX3JlYWQobmUtPmhvc3QsIG5lLT5ub2RlaWQsIGcsIGFkZHIsIGJ1ZmZlciwgbGVuZ3RoKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGhwc2Jfbm9kZV9sb2NrKHN0cnVjdCBub2RlX2VudHJ5ICpuZSwgdTY0IGFkZHIsIGludCBleHRjb2RlLAorCQkJCSBxdWFkbGV0X3QgKmJ1ZmZlciwgcXVhZGxldF90IGFyZykKK3sKKwl1bnNpZ25lZCBpbnQgZyA9IG5lLT5nZW5lcmF0aW9uOworCisJc21wX3JtYigpOworCXJldHVybiBocHNiX2xvY2sobmUtPmhvc3QsIG5lLT5ub2RlaWQsIGcsIGFkZHIsIGV4dGNvZGUsIGJ1ZmZlciwgYXJnKTsKK30KIGludCBub2RlbWdyX2Zvcl9lYWNoX2hvc3Qodm9pZCAqZGF0YSwgaW50ICgqY2IpKHN0cnVjdCBocHNiX2hvc3QgKiwgdm9pZCAqKSk7CiAKIGludCBpbml0X2llZWUxMzk0X25vZGVtZ3Iodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwppbmRleCBmMWU4MmE5Li41MTMwZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKQEAgLTkyNyw4ICs5MjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlzZXJ2aWNlX21hc2sgPSBzZXJ2aWNlX21hc2sgPyBzZXJ2aWNlX21hc2sgOgotCQkgICAgICAgX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJc2VydmljZV9tYXNrID0gc2VydmljZV9tYXNrID8gc2VydmljZV9tYXNrIDogfmNwdV90b19iZTY0KDApOwogCXNlcnZpY2VfaWQgJj0gc2VydmljZV9tYXNrOwogCWlmICgoc2VydmljZV9pZCAmIElCX1NFUlZJQ0VfSURfQUdOX01BU0spID09IElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEICYmCiAJICAgIChzZXJ2aWNlX2lkICE9IElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKSkKQEAgLTk1NCw3ICs5NTMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbS5sb2NrLCBmbGFncyk7CiAJaWYgKHNlcnZpY2VfaWQgPT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpIHsKIAkJY21faWQtPnNlcnZpY2VfaWQgPSBjcHVfdG9fYmU2NChjbS5saXN0ZW5fc2VydmljZV9pZCsrKTsKLQkJY21faWQtPnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCQljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCX0gZWxzZSB7CiAJCWNtX2lkLT5zZXJ2aWNlX2lkID0gc2VydmljZV9pZDsKIAkJY21faWQtPnNlcnZpY2VfbWFzayA9IHNlcnZpY2VfbWFzazsKQEAgLTExMzQsNyArMTEzMyw3IEBACiAJCQlnb3RvIGVycm9yMTsKIAl9CiAJY21faWQtPnNlcnZpY2VfaWQgPSBwYXJhbS0+c2VydmljZV9pZDsKLQljbV9pZC0+c2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWQtPnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAljbV9pZF9wcml2LT50aW1lb3V0X21zID0gY21fY29udmVydF90b19tcygKIAkJCQkgICAgcGFyYW0tPnByaW1hcnlfcGF0aC0+cGFja2V0X2xpZmVfdGltZSkgKiAyICsKIAkJCQkgY21fY29udmVydF90b19tcygKQEAgLTE1NDUsNyArMTU0NCw3IEBACiAJY21faWRfcHJpdi0+aWQuY21faGFuZGxlciA9IGxpc3Rlbl9jbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyOwogCWNtX2lkX3ByaXYtPmlkLmNvbnRleHQgPSBsaXN0ZW5fY21faWRfcHJpdi0+aWQuY29udGV4dDsKIAljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkID0gcmVxX21zZy0+c2VydmljZV9pZDsKLQljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAKIAljbV9wcm9jZXNzX3JvdXRlZF9yZXEocmVxX21zZywgd29yay0+bWFkX3JlY3Zfd2MtPndjKTsKIAljbV9mb3JtYXRfcGF0aHNfZnJvbV9yZXEocmVxX21zZywgJndvcmstPnBhdGhbMF0sICZ3b3JrLT5wYXRoWzFdKTsKQEAgLTI4OTgsNyArMjg5Nyw3IEBACiAJCWdvdG8gb3V0OwogCiAJY21faWQtPnNlcnZpY2VfaWQgPSBwYXJhbS0+c2VydmljZV9pZDsKLQljbV9pZC0+c2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWQtPnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAljbV9pZF9wcml2LT50aW1lb3V0X21zID0gcGFyYW0tPnRpbWVvdXRfbXM7CiAJY21faWRfcHJpdi0+bWF4X2NtX3JldHJpZXMgPSBwYXJhbS0+bWF4X2NtX3JldHJpZXM7CiAJcmV0ID0gY21fYWxsb2NfbXNnKGNtX2lkX3ByaXYsICZtc2cpOwpAQCAtMjk5Miw3ICsyOTkxLDcgQEAKIAljbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyID0gY3VyX2NtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXI7CiAJY21faWRfcHJpdi0+aWQuY29udGV4dCA9IGN1cl9jbV9pZF9wcml2LT5pZC5jb250ZXh0OwogCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQgPSBzaWRyX3JlcV9tc2ctPnNlcnZpY2VfaWQ7Ci0JY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCiAJY21fZm9ybWF0X3NpZHJfcmVxX2V2ZW50KHdvcmssICZjdXJfY21faWRfcHJpdi0+aWQpOwogCWNtX3Byb2Nlc3Nfd29yayhjbV9pZF9wcml2LCB3b3JrKTsKQEAgLTM3ODksNyArMzc4OCw3IEBACiAJcndsb2NrX2luaXQoJmNtLmRldmljZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY20ubG9jayk7CiAJY20ubGlzdGVuX3NlcnZpY2VfdGFibGUgPSBSQl9ST09UOwotCWNtLmxpc3Rlbl9zZXJ2aWNlX2lkID0gX19jb25zdGFudF9iZTY0X3RvX2NwdShJQl9DTV9BU1NJR05fU0VSVklDRV9JRCk7CisJY20ubGlzdGVuX3NlcnZpY2VfaWQgPSBiZTY0X3RvX2NwdShJQl9DTV9BU1NJR05fU0VSVklDRV9JRCk7CiAJY20ucmVtb3RlX2lkX3RhYmxlID0gUkJfUk9PVDsKIAljbS5yZW1vdGVfcXBfdGFibGUgPSBSQl9ST09UOwogCWNtLnJlbW90ZV9zaWRyX3RhYmxlID0gUkJfUk9PVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaAppbmRleCBhZWM5YzdhLi43ZTYzYzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oCkBAIC00NCwxNyArNDQsMTcgQEAKIAogI2RlZmluZSBJQl9DTV9DTEFTU19WRVJTSU9OCTIgLyogSUIgc3BlY2lmaWNhdGlvbiAxLjIgKi8KIAotI2RlZmluZSBDTV9SRVFfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIENNX01SQV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMSkKLSNkZWZpbmUgQ01fUkVKX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDEyKQotI2RlZmluZSBDTV9SRVBfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTMpCi0jZGVmaW5lIENNX1JUVV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxNCkKLSNkZWZpbmUgQ01fRFJFUV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxNSkKLSNkZWZpbmUgQ01fRFJFUF9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxNikKLSNkZWZpbmUgQ01fU0lEUl9SRVFfQVRUUl9JRCBfX2NvbnN0YW50X2h0b25zKDB4MDAxNykKLSNkZWZpbmUgQ01fU0lEUl9SRVBfQVRUUl9JRCBfX2NvbnN0YW50X2h0b25zKDB4MDAxOCkKLSNkZWZpbmUgQ01fTEFQX0FUVFJfSUQgICAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxOSkKLSNkZWZpbmUgQ01fQVBSX0FUVFJfSUQgICAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxQSkKKyNkZWZpbmUgQ01fUkVRX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgQ01fTVJBX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMSkKKyNkZWZpbmUgQ01fUkVKX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMikKKyNkZWZpbmUgQ01fUkVQX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxMykKKyNkZWZpbmUgQ01fUlRVX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxNCkKKyNkZWZpbmUgQ01fRFJFUV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTUpCisjZGVmaW5lIENNX0RSRVBfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE2KQorI2RlZmluZSBDTV9TSURSX1JFUV9BVFRSX0lECWNwdV90b19iZTE2KDB4MDAxNykKKyNkZWZpbmUgQ01fU0lEUl9SRVBfQVRUUl9JRAljcHVfdG9fYmUxNigweDAwMTgpCisjZGVmaW5lIENNX0xBUF9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTkpCisjZGVmaW5lIENNX0FQUl9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMUEpCiAKIGVudW0gY21fbXNnX3NlcXVlbmNlIHsKIAlDTV9NU0dfU0VRVUVOQ0VfUkVRLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYwppbmRleCA3OTEzYjgwLi5kMWZiYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAKIAlCVUdfT04oZGV2aWNlLT5yZWdfc3RhdGUgIT0gSUJfREVWX1VOUkVHSVNURVJFRCk7CiAKLQlpYl9kZXZpY2VfdW5yZWdpc3Rlcl9zeXNmcyhkZXZpY2UpOworCWtvYmplY3RfcHV0KCZkZXZpY2UtPmRldi5rb2JqKTsKIH0KIEVYUE9SVF9TWU1CT0woaWJfZGVhbGxvY19kZXZpY2UpOwogCkBAIC0zNDgsNiArMzQ4LDggQEAKIAogCW11dGV4X3VubG9jaygmZGV2aWNlX211dGV4KTsKIAorCWliX2RldmljZV91bnJlZ2lzdGVyX3N5c2ZzKGRldmljZSk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlLT5jbGllbnRfZGF0YV9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbnRleHQsIHRtcCwgJmRldmljZS0+Y2xpZW50X2RhdGFfbGlzdCwgbGlzdCkKIAkJa2ZyZWUoY29udGV4dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDVjNTRmYzIuLmRlOTIyYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0zMDEsNiArMzAxLDE2IEBACiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LmNvbnRleHQgPSBjb250ZXh0OwogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5xcCA9IHBvcnRfcHJpdi0+cXBfaW5mb1txcG5dLnFwOwogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5wb3J0X251bSA9IHBvcnRfbnVtOworCXNwaW5fbG9ja19pbml0KCZtYWRfYWdlbnRfcHJpdi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5zZW5kX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+d2FpdF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmRvbmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5ybXBwX2xpc3QpOworCUlOSVRfREVMQVlFRF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+dGltZWRfd29yaywgdGltZW91dF9zZW5kcyk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF9saXN0KTsKKwlJTklUX1dPUksoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF93b3JrLCBsb2NhbF9jb21wbGV0aW9ucyk7CisJYXRvbWljX3NldCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50LCAxKTsKKwlpbml0X2NvbXBsZXRpb24oJm1hZF9hZ2VudF9wcml2LT5jb21wKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0X3ByaXYtPnJlZ19sb2NrLCBmbGFncyk7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LmhpX3RpZCA9ICsraWJfbWFkX2NsaWVudF9pZDsKQEAgLTM1MCwxNyArMzYwLDYgQEAKIAlsaXN0X2FkZF90YWlsKCZtYWRfYWdlbnRfcHJpdi0+YWdlbnRfbGlzdCwgJnBvcnRfcHJpdi0+YWdlbnRfbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydF9wcml2LT5yZWdfbG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJm1hZF9hZ2VudF9wcml2LT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT53YWl0X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+ZG9uZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnJtcHBfbGlzdCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJm1hZF9hZ2VudF9wcml2LT50aW1lZF93b3JrLCB0aW1lb3V0X3NlbmRzKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmxvY2FsX2xpc3QpOwotCUlOSVRfV09SSygmbWFkX2FnZW50X3ByaXYtPmxvY2FsX3dvcmssIGxvY2FsX2NvbXBsZXRpb25zKTsKLQlhdG9taWNfc2V0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQsIDEpOwotCWluaXRfY29tcGxldGlvbigmbWFkX2FnZW50X3ByaXYtPmNvbXApOwotCiAJcmV0dXJuICZtYWRfYWdlbnRfcHJpdi0+YWdlbnQ7CiAKIGVycm9yNDoKQEAgLTc0Myw5ICs3NDIsNyBAQAogCQlicmVhazsKIAljYXNlIElCX01BRF9SRVNVTFRfU1VDQ0VTUyB8IElCX01BRF9SRVNVTFRfQ09OU1VNRUQ6CiAJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIG1hZF9wcml2KTsKLQkJa2ZyZWUobG9jYWwpOwotCQlyZXQgPSAxOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJY2FzZSBJQl9NQURfUkVTVUxUX1NVQ0NFU1M6CiAJCS8qIFRyZWF0IGxpa2UgYW4gaW5jb21pbmcgcmVjZWl2ZSBNQUQgKi8KIAkJcG9ydF9wcml2ID0gaWJfZ2V0X21hZF9wb3J0KG1hZF9hZ2VudF9wcml2LT5hZ2VudC5kZXZpY2UsCkBAIC03NTYsMTAgKzc1MywxMiBAQAogCQkJCQkJICAgICAgICAmbWFkX3ByaXYtPm1hZC5tYWQpOwogCQl9CiAJCWlmICghcG9ydF9wcml2IHx8ICFyZWN2X21hZF9hZ2VudCkgeworCQkJLyoKKwkJCSAqIE5vIHJlY2VpdmluZyBhZ2VudCBzbyBkcm9wIHBhY2tldCBhbmQKKwkJCSAqIGdlbmVyYXRlIHNlbmQgY29tcGxldGlvbi4KKwkJCSAqLwogCQkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbWFkX3ByaXYpOwotCQkJa2ZyZWUobG9jYWwpOwotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KIAkJbG9jYWwtPm1hZF9wcml2ID0gbWFkX3ByaXY7CiAJCWxvY2FsLT5yZWN2X21hZF9hZ2VudCA9IHJlY3ZfbWFkX2FnZW50OwpAQCAtMjM1Niw3ICsyMzU1LDcgQEAKIAlzdHJ1Y3QgaWJfbWFkX2xvY2FsX3ByaXZhdGUgKmxvY2FsOwogCXN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqcmVjdl9tYWRfYWdlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVjdiA9IDA7CisJaW50IGZyZWVfbWFkOwogCXN0cnVjdCBpYl93YyB3YzsKIAlzdHJ1Y3QgaWJfbWFkX3NlbmRfd2MgbWFkX3NlbmRfd2M7CiAKQEAgLTIzNzAsMTQgKzIzNjksMTUgQEAKIAkJCQkgICBjb21wbGV0aW9uX2xpc3QpOwogCQlsaXN0X2RlbCgmbG9jYWwtPmNvbXBsZXRpb25fbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CisJCWZyZWVfbWFkID0gMDsKIAkJaWYgKGxvY2FsLT5tYWRfcHJpdikgewogCQkJcmVjdl9tYWRfYWdlbnQgPSBsb2NhbC0+cmVjdl9tYWRfYWdlbnQ7CiAJCQlpZiAoIXJlY3ZfbWFkX2FnZW50KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gcmVjZWl2ZSBNQUQgYWdlbnQgZm9yIGxvY2FsIGNvbXBsZXRpb25cbiIpOworCQkJCWZyZWVfbWFkID0gMTsKIAkJCQlnb3RvIGxvY2FsX3NlbmRfY29tcGxldGlvbjsKIAkJCX0KIAotCQkJcmVjdiA9IDE7CiAJCQkvKgogCQkJICogRGVmaW5lZCBiZWhhdmlvciBpcyB0byBjb21wbGV0ZSByZXNwb25zZQogCQkJICogYmVmb3JlIHJlcXVlc3QKQEAgLTI0MjIsNyArMjQyMiw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWF0b21pY19kZWMoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCk7Ci0JCWlmICghcmVjdikKKwkJaWYgKGZyZWVfbWFkKQogCQkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbG9jYWwtPm1hZF9wcml2KTsKIAkJa2ZyZWUobG9jYWwpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IDNhZjJiODQuLjU3YTNjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtNzM1LDcgKzczNSw3IEBACiAJCWdvdG8gYmFkOwogCX0KIAotCWlmIChybXBwX2hkci0+c2VnX251bSA9PSBfX2NvbnN0YW50X2h0b25sKDEpKSB7CisJaWYgKHJtcHBfaGRyLT5zZWdfbnVtID09IGNwdV90b19iZTMyKDEpKSB7CiAJCWlmICghKGliX2dldF9ybXBwX2ZsYWdzKHJtcHBfaGRyKSAmIElCX01HTVRfUk1QUF9GTEFHX0ZJUlNUKSkgewogCQkJcm1wcF9zdGF0dXMgPSBJQl9NR01UX1JNUFBfU1RBVFVTX0JBRF9TRUc7CiAJCQlnb3RvIGJhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCmluZGV4IDc4NjNhNTAuLjE4NjUwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwpAQCAtMzk1LDYgKzM5NSw4IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmcG9ydC0+YWhfbG9jayk7CisJaWYgKHBvcnQtPnNtX2FoKQorCQlrcmVmX3B1dCgmcG9ydC0+c21fYWgtPnJlZiwgZnJlZV9zbV9haCk7CiAJcG9ydC0+c21fYWggPSBuZXdfYWg7CiAJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5haF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKaW5kZXggYjQzZjdkMzY4Li41YzA0Y2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKQEAgLTY2LDExICs2Niw2IEBACiAJaW50CQkJaW5kZXg7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBpYmRldl9pc19hbGl2ZShjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRldi0+cmVnX3N0YXRlID09IElCX0RFVl9SRUdJU1RFUkVEOwotfQotCiBzdGF0aWMgc3NpemVfdCBwb3J0X2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTgwLDggKzc1LDYgQEAKIAogCWlmICghcG9ydF9hdHRyLT5zaG93KQogCQlyZXR1cm4gLUVJTzsKLQlpZiAoIWliZGV2X2lzX2FsaXZlKHAtPmliZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gcG9ydF9hdHRyLT5zaG93KHAsIHBvcnRfYXR0ciwgYnVmKTsKIH0KQEAgLTU2Miw5ICs1NTUsNiBAQAogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpYl9kZXZpY2UsIGRldik7CiAKLQlpZiAoIWliZGV2X2lzX2FsaXZlKGRldikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJc3dpdGNoIChkZXYtPm5vZGVfdHlwZSkgewogCWNhc2UgUkRNQV9OT0RFX0lCX0NBOgkgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBDQVxuIiwgZGV2LT5ub2RlX3R5cGUpOwogCWNhc2UgUkRNQV9OT0RFX1JOSUM6CSAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6IFJOSUNcbiIsIGRldi0+bm9kZV90eXBlKTsKQEAgLTU4MSw5ICs1NzEsNiBAQAogCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciBhdHRyOwogCXNzaXplX3QgcmV0OwogCi0JaWYgKCFpYmRldl9pc19hbGl2ZShkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldCA9IGliX3F1ZXJ5X2RldmljZShkZXYsICZhdHRyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNjAwLDkgKzU4Nyw2IEBACiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAotCWlmICghaWJkZXZfaXNfYWxpdmUoZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAogCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgJmRldi0+bm9kZV9ndWlkKVswXSksCiAJCSAgICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSAmZGV2LT5ub2RlX2d1aWQpWzFdKSwKQEAgLTg0OCw2ICs4MzIsOSBAQAogCXN0cnVjdCBrb2JqZWN0ICpwLCAqdDsKIAlzdHJ1Y3QgaWJfcG9ydCAqcG9ydDsKIAorCS8qIEhvbGQga29iamVjdCB1bnRpbCBpYl9kZWFsbG9jX2RldmljZSgpICovCisJa29iamVjdF9nZXQoJmRldmljZS0+ZGV2LmtvYmopOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHQsICZkZXZpY2UtPnBvcnRfbGlzdCwgZW50cnkpIHsKIAkJbGlzdF9kZWwoJnAtPmVudHJ5KTsKIAkJcG9ydCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgaWJfcG9ydCwga29iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCmluZGV4IDExM2YzYzAuLjdkNzlhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCkBAIC03Niw3ICs3Niw2IEBACiBzdGF0aWMgdm9pZCBjMl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIGludCBjMl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKIHN0YXRpYyB2b2lkIGMyX3Jlc2V0KHN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYzJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYzJfcGNpX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFKDB4MThiOCwgMHhiMDAxKSB9LApAQCAtMzQ5LDcgKzM0OCw3IEBACiAJCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9BRERSKTsKIAkJCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9ET05FKSwKIAkJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKLQkJCQljMl9wb3J0LT5uZXRzdGF0cy50eF9kcm9wcGVkKys7CisJCQkJYzJfcG9ydC0+bmV0ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCV9fcmF3X3dyaXRldygwLApAQCAtNDU3LDcgKzQ1Niw3IEBACiAJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9GTEFHUyk7CiAKIAlwcl9kZWJ1ZygicGFja2V0IGRyb3BwZWRcbiIpOwotCWMyX3BvcnQtPm5ldHN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwljMl9wb3J0LT5uZXRkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIH0KIAogc3RhdGljIHZvaWQgYzJfcnhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC01MzIsOCArNTMxLDggQEAKIAkJbmV0aWZfcngoc2tiKTsKIAogCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQljMl9wb3J0LT5uZXRzdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWMyX3BvcnQtPm5ldHN0YXRzLnJ4X2J5dGVzICs9IGJ1ZmxlbjsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gYnVmbGVuOwogCX0KIAogCS8qIFNhdmUgd2hlcmUgd2UgbGVmdCBvZmYgKi8KQEAgLTc5Nyw4ICs3OTYsOCBAQAogCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFRYUF9IVFhEX1JFQURZKSwKIAkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKIAotCWMyX3BvcnQtPm5ldHN0YXRzLnR4X3BhY2tldHMrKzsKLQljMl9wb3J0LT5uZXRzdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CisJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CiAKIAkvKiBMb29wIHRocnUgYWRkaXRpb25hbCBkYXRhIGZyYWdtZW50cyBhbmQgcXVldWUgdGhlbSAqLwogCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CkBAIC04MjMsOCArODIyLDggQEAKIAkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFRYUF9IVFhEX1JFQURZKSwKIAkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwogCi0JCQljMl9wb3J0LT5uZXRzdGF0cy50eF9wYWNrZXRzKys7Ci0JCQljMl9wb3J0LT5uZXRzdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CisJCQluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOwogCQl9CiAJfQogCkBAIC04NDUsMTMgKzg0NCw2IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlyZXR1cm4gJmMyX3BvcnQtPm5ldHN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBjMl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtODgwLDYgKzg3MiwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzJfbmV0ZGV2ID0geworCS5uZG9fb3BlbiAJCT0gYzJfdXAsCisJLm5kb19zdG9wIAkJPSBjMl9kb3duLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjMl94bWl0X2ZyYW1lLAorCS5uZG9fdHhfdGltZW91dAkJPSBjMl90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBjMl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIEluaXRpYWxpemUgbmV0d29yayBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYzJfZGV2aW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwKIAkJCQkgICAgIHZvaWQgX19pb21lbSAqIG1taW9fYWRkcikKQEAgLTg5NCwxMiArODk2LDcgQEAKIAogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmMyZGV2LT5wY2lkZXYtPmRldik7CiAKLQluZXRkZXYtPm9wZW4gPSBjMl91cDsKLQluZXRkZXYtPnN0b3AgPSBjMl9kb3duOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYzJfeG1pdF9mcmFtZTsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGMyX2dldF9zdGF0czsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBjMl90eF90aW1lb3V0OwotCW5ldGRldi0+Y2hhbmdlX210dSA9IGMyX2NoYW5nZV9tdHU7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmMyX25ldGRldjsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gQzJfVFhfVElNRU9VVDsKIAluZXRkZXYtPmlycSA9IGMyZGV2LT5wY2lkZXYtPmlycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaAppbmRleCBkMTJhMjRhLi5mN2ZmNjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaApAQCAtMzY5LDggKzM2OSw2IEBACiAJdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKIAogCXUzMiByeF9idWZfc2l6ZTsKLQotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldHN0YXRzOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKaW5kZXggNTExOWQ2NS4uZjE5NDhmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKQEAgLTcwOCwyNiArNzA4LDI3IEBACiAKIHN0YXRpYyBpbnQgYzJfcHNldWRvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCiB7Ci0JaW50IHJldCA9IDA7Ci0KIAlpZiAobmV3X210dSA8IEVUSF9aTEVOIHx8IG5ld19tdHUgPiBFVEhfSlVNQk9fTVRVKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIAogCS8qIFRPRE86IFRlbGwgcm5pYyBhYm91dCBuZXcgcm1kYSBpbnRlcmZhY2UgbXR1ICovCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjMl9wc2V1ZG9fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGMyX3BzZXVkb191cCwKKwkubmRvX3N0b3AgCQk9IGMyX3BzZXVkb19kb3duLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBjMl9wc2V1ZG9feG1pdF9mcmFtZSwKKwkubmRvX2NoYW5nZV9tdHUgCT0gYzJfcHNldWRvX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgdm9pZCBzZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCW5ldGRldi0+b3BlbiA9IGMyX3BzZXVkb191cDsKLQluZXRkZXYtPnN0b3AgPSBjMl9wc2V1ZG9fZG93bjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGMyX3BzZXVkb194bWl0X2ZyYW1lOwotCW5ldGRldi0+Z2V0X3N0YXRzID0gTlVMTDsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBOVUxMOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gTlVMTDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBjMl9wc2V1ZG9fY2hhbmdlX210dTsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYzJfcHNldWRvX25ldGRldl9vcHM7CisKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gMDsKIAluZXRkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CiAJbmV0ZGV2LT5tdHUgPSAxNTAwOwpAQCAtNzM1LDcgKzczNiw2IEBACiAJbmV0ZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwogCW5ldGRldi0+dHhfcXVldWVfbGVuID0gMDsKIAluZXRkZXYtPmZsYWdzIHw9IElGRl9OT0FSUDsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYzJfcHNldWRvX25ldGRldl9pbml0KHN0cnVjdCBjMl9kZXYgKmMyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwppbmRleCAxMWVmZDM1Li5hNGE4MmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJaWYgKChDUUVfT1BDT0RFKCpjcWUpID09IFQzX1JFQURfUkVTUCkgJiYgU1FfVFlQRSgqY3FlKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKENRRV9PUENPREUoKmNxZSkgPT0gVDNfU0VORCkgJiYgUlFfVFlQRSgqY3FlKSAmJgorCWlmIChDUUVfU0VORF9PUENPREUoKmNxZSkgJiYgUlFfVFlQRSgqY3FlKSAmJgogCSAgICBRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpCiAJCXJldHVybiAwOwogCkBAIC05NDEsNiArOTQxLDIzIEBACiAJaWYgKCFyZGV2X3AtPnQzY2Rldl9wKQogCQlyZGV2X3AtPnQzY2Rldl9wID0gZGV2MnQzY2RldihuZXRkZXZfcCk7CiAJcmRldl9wLT50M2NkZXZfcC0+dWxwID0gKHZvaWQgKikgcmRldl9wOworCisJZXJyID0gcmRldl9wLT50M2NkZXZfcC0+Y3RsKHJkZXZfcC0+dDNjZGV2X3AsIEdFVF9FTUJFRERFRF9JTkZPLAorCQkJCQkgJihyZGV2X3AtPmZ3X2luZm8pKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgdDNjZGV2X3AoJXApLT5jdGwgcmV0dXJuZWQgZXJyb3IgJWQuXG4iLAorCQkgICAgIF9fZnVuY19fLCByZGV2X3AtPnQzY2Rldl9wLCBlcnIpOworCQlnb3RvIGVycjE7CisJfQorCWlmIChHX0ZXX1ZFUlNJT05fTUFKT1IocmRldl9wLT5md19pbmZvLmZ3X3ZlcnMpICE9IENYSU9fRldfTUFKKSB7CisJCXByaW50ayhLRVJOX0VSUiBNT0QgImZhdGFsIGZpcm13YXJlIHZlcnNpb24gbWlzbWF0Y2g6ICIKKwkJICAgICAgICJuZWVkIHZlcnNpb24gJXUgYnV0IGFkYXB0ZXIgaGFzIHZlcnNpb24gJXVcbiIsCisJCSAgICAgICBDWElPX0ZXX01BSiwKKwkJICAgICAgIEdfRldfVkVSU0lPTl9NQUpPUihyZGV2X3AtPmZ3X2luZm8uZndfdmVycykpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjE7CisJfQorCiAJZXJyID0gcmRldl9wLT50M2NkZXZfcC0+Y3RsKHJkZXZfcC0+dDNjZGV2X3AsIFJETUFfR0VUX1BBUkFNUywKIAkJCQkJICYocmRldl9wLT5ybmljX2luZm8pKTsKIAlpZiAoZXJyKSB7CkBAIC0xMjA3LDExICsxMjI0LDEyIEBACiAJCX0KIAogCQkvKiBpbmNvbWluZyBTRU5EIHdpdGggbm8gcmVjZWl2ZSBwb3N0ZWQgZmFpbHVyZXMgKi8KLQkJaWYgKChDUUVfT1BDT0RFKCpod19jcWUpID09IFQzX1NFTkQpICYmIFJRX1RZUEUoKmh3X2NxZSkgJiYKKwkJaWYgKENRRV9TRU5EX09QQ09ERSgqaHdfY3FlKSAmJiBSUV9UWVBFKCpod19jcWUpICYmCiAJCSAgICBRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpIHsKIAkJCXJldCA9IC0xOwogCQkJZ290byBza2lwX2NxZTsKIAkJfQorCQlCVUdfT04oKCpjcWVfZmx1c2hlZCA9PSAwKSAmJiAhU1dfQ1FFKCpod19jcWUpKTsKIAkJZ290byBwcm9jX2NxZTsKIAl9CiAKQEAgLTEyMjYsNiArMTI0NCwxMyBAQAogCQkgKiB0aGVuIHdlIGNvbXBsZXRlIHRoaXMgd2l0aCBUUFRfRVJSX01TTiBhbmQgbWFyayB0aGUgd3EgaW4KIAkJICogZXJyb3IuCiAJCSAqLworCisJCWlmIChRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpIHsKKwkJCXdxLT5lcnJvciA9IDE7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gc2tpcF9jcWU7CisJCX0KKwogCQlpZiAodW5saWtlbHkoKENRRV9XUklEX01TTigqaHdfY3FlKSAhPSAod3EtPnJxX3JwdHIgKyAxKSkpKSB7CiAJCQl3cS0+ZXJyb3IgPSAxOwogCQkJaHdfY3FlLT5oZWFkZXIgfD0gaHRvbmwoVl9DUUVfU1RBVFVTKFRQVF9FUlJfTVNOKSk7CkBAIC0xMjgwLDYgKzEzMDUsNyBAQAogCQkJY3hpb19oYWxfcGJscG9vbF9mcmVlKHdxLT5yZGV2LAogCQkJCXdxLT5ycVtRX1BUUjJJRFgod3EtPnJxX3JwdHIsCiAJCQkJd3EtPnJxX3NpemVfbG9nMildLnBibF9hZGRyLCBUM19TVEFHMF9QQkxfU0laRSk7CisJCUJVR19PTihRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpOwogCQl3cS0+cnFfcnB0cisrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAppbmRleCA5ZWQ2NWIwLi4wOTRhNjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaApAQCAtNjEsNiArNjEsOCBAQAogCiAjZGVmaW5lIFQzX01BWF9ERVZfTkFNRV9MRU4gMzIKIAorI2RlZmluZSBDWElPX0ZXX01BSiA3CisKIHN0cnVjdCBjeGlvX2hhbF9jdHJsX3FwIHsKIAl1MzIgd3B0cjsKIAl1MzIgcnB0cjsKQEAgLTEwOCw2ICsxMTAsNyBAQAogCXN0cnVjdCBnZW5fcG9vbCAqcGJsX3Bvb2w7CiAJc3RydWN0IGdlbl9wb29sICpycXRfcG9vbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCBjaF9lbWJlZGRlZF9pbmZvIGZ3X2luZm87CiAJdTMyCWZsYWdzOwogI2RlZmluZQlDWElPX0VSUk9SX0ZBVEFMCTEKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaAppbmRleCAwNDYxOGY3Li5mZjliZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKQEAgLTYwNCw2ICs2MDQsMTIgQEAKICNkZWZpbmUgQ1FFX1NUQVRVUyh4KSAgICAgKEdfQ1FFX1NUQVRVUyhiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkpCiAjZGVmaW5lIENRRV9PUENPREUoeCkgICAgIChHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpKQogCisjZGVmaW5lIENRRV9TRU5EX09QQ09ERSh4KSggXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkQpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfU0UpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfSU5WKSB8fCBcCisJKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkgPT0gVDNfU0VORF9XSVRIX1NFX0lOVikpCisKICNkZWZpbmUgQ1FFX0xFTih4KSAgICAgICAgKGJlMzJfdG9fY3B1KCh4KS5sZW4pKQogCiAvKiB1c2VkIGZvciBSUSBjb21wbGV0aW9uIHByb2Nlc3NpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCmluZGV4IDQ0ZTkzNmUuLjg2OTk5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwpAQCAtMTY3OCw2ICsxNjc4LDkgQEAKIHsKIAlzdHJ1Y3QgaXdjaF9lcCAqZXAgPSBjdHg7CiAKKwlpZiAoc3RhdGVfcmVhZCgmZXAtPmNvbSkgIT0gRlBEVV9NT0RFKQorCQlyZXR1cm4gQ1BMX1JFVF9CVUZfRE9ORTsKKwogCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBjcGxfcmRtYV90ZXJtaW5hdGUpKTsKIAlQREJHKCIlcyBzYXZpbmcgJWQgYnl0ZXMgb2YgdGVybSBtc2dcbiIsIF9fZnVuY19fLCBza2ItPmxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYwppbmRleCA3YjY3YTY3Li43NDNjNWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKQEAgLTE3OSwxMSArMTc5LDYgQEAKIAljYXNlIFRQVF9FUlJfQk9VTkQ6CiAJY2FzZSBUUFRfRVJSX0lOVkFMSURBVEVfU0hBUkVEX01SOgogCWNhc2UgVFBUX0VSUl9JTlZBTElEQVRFX01SX1dJVEhfTVdfQk9VTkQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgLSBDUUUgRXJyIHFwaWQgMHgleCBvcGNvZGUgJWQgc3RhdHVzIDB4JXggIgotCQkgICAgICAgInR5cGUgJWQgd3JpZC5oaSAweCV4IHdyaWQubG8gMHgleCBcbiIsIF9fZnVuY19fLAotCQkgICAgICAgQ1FFX1FQSUQocnNwX21zZy0+Y3FlKSwgQ1FFX09QQ09ERShyc3BfbXNnLT5jcWUpLAotCQkgICAgICAgQ1FFX1NUQVRVUyhyc3BfbXNnLT5jcWUpLCBDUUVfVFlQRShyc3BfbXNnLT5jcWUpLAotCQkgICAgICAgQ1FFX1dSSURfSEkocnNwX21zZy0+Y3FlKSwgQ1FFX1dSSURfTE9XKHJzcF9tc2ctPmNxZSkpOwogCQkoKmNocC0+aWJjcS5jb21wX2hhbmRsZXIpKCZjaHAtPmliY3EsIGNocC0+aWJjcS5jcV9jb250ZXh0KTsKIAkJcG9zdF9xcF9ldmVudChybmljcCwgY2hwLCByc3BfbXNnLCBJQl9FVkVOVF9RUF9BQ0NFU1NfRVJSLCAxKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCAxOTY2MWIyLi5jNzU4ZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTk5LDggKzk5LDggQEAKIAlpZiAod3ItPm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NKSB7CiAJCXBsZW4gPSA0OwogCQl3cWUtPndyaXRlLnNnbFswXS5zdGFnID0gd3ItPmV4LmltbV9kYXRhOwotCQl3cWUtPndyaXRlLnNnbFswXS5sZW4gPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOwotCQl3cWUtPndyaXRlLm51bV9zZ2xlID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKKwkJd3FlLT53cml0ZS5zZ2xbMF0ubGVuID0gY3B1X3RvX2JlMzIoMCk7CisJCXdxZS0+d3JpdGUubnVtX3NnbGUgPSBjcHVfdG9fYmUzMigwKTsKIAkJKmZsaXRfY250ID0gNjsKIAl9IGVsc2UgewogCQlwbGVuID0gMDsKQEAgLTE5NSwxNSArMTk1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUQkQ6IHRoaXMgaXMgZ29pbmcgdG8gYmUgbW92ZWQgdG8gZmlybXdhcmUuIE1pc3NpbmcgcGRpZC9xcGlkIGNoZWNrIGZvciBub3cuCi0gKi8KIHN0YXRpYyBpbnQgaXdjaF9zZ2wycGJsX21hcChzdHJ1Y3QgaXdjaF9kZXYgKnJocCwgc3RydWN0IGliX3NnZSAqc2dfbGlzdCwKIAkJCSAgICB1MzIgbnVtX3NnbGUsIHUzMiAqIHBibF9hZGRyLCB1OCAqIHBhZ2Vfc2l6ZSkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaXdjaF9tciAqbWhwOwotCXUzMiBvZmZzZXQ7CisJdTY0IG9mZnNldDsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3NnbGU7IGkrKykgewogCiAJCW1ocCA9IGdldF9taHAocmhwLCAoc2dfbGlzdFtpXS5sa2V5KSA+PiA4KTsKQEAgLTIzNSw4ICsyMzIsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJb2Zmc2V0ID0gc2dfbGlzdFtpXS5hZGRyIC0gbWhwLT5hdHRyLnZhX2ZibzsKLQkJb2Zmc2V0ICs9ICgodTMyKSBtaHAtPmF0dHIudmFfZmJvKSAlCi0JCSAgICAgICAgICAoMVVMIDw8ICgxMiArIG1ocC0+YXR0ci5wYWdlX3NpemUpKTsKKwkJb2Zmc2V0ICs9IG1ocC0+YXR0ci52YV9mYm8gJgorCQkJICAoKDFVTCA8PCAoMTIgKyBtaHAtPmF0dHIucGFnZV9zaXplKSkgLSAxKTsKIAkJcGJsX2FkZHJbaV0gPSAoKG1ocC0+YXR0ci5wYmxfYWRkciAtCiAJCQkgICAgICAgIHJocC0+cmRldi5ybmljX2luZm8ucGJsX2Jhc2UpID4+IDMpICsKIAkJCSAgICAgIChvZmZzZXQgPj4gKDEyICsgbWhwLT5hdHRyLnBhZ2Vfc2l6ZSkpOwpAQCAtMjY2LDggKzI2Myw4IEBACiAJCXdxZS0+cmVjdi5zZ2xbaV0ubGVuID0gY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKIAogCQkvKiB0byBpbiB0aGUgV1FFID09IHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSAqLwotCQl3cWUtPnJlY3Yuc2dsW2ldLnRvID0gY3B1X3RvX2JlNjQoKCh1MzIpIHdyLT5zZ19saXN0W2ldLmFkZHIpICUKLQkJCQkoMVVMIDw8ICgxMiArIHBhZ2Vfc2l6ZVtpXSkpKTsKKwkJd3FlLT5yZWN2LnNnbFtpXS50byA9IGNwdV90b19iZTY0KCgodTMyKXdyLT5zZ19saXN0W2ldLmFkZHIpICYKKwkJCQkoKDFVTCA8PCAoMTIgKyBwYWdlX3NpemVbaV0pKSAtIDEpKTsKIAogCQkvKiBwYmxfYWRkciBpcyB0aGUgYWRhcHRlcnMgYWRkcmVzcyBpbiB0aGUgUEJMICovCiAJCXdxZS0+cmVjdi5wYmxfYWRkcltpXSA9IGNwdV90b19iZTMyKHBibF9hZGRyW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCmluZGV4IDQ0NDQ3YWEuLmM1NjhiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwpAQCAtNDYsMTEgKzQ2LDExIEBACiAjaW5jbHVkZSAiZWhjYV9pdmVyYnMuaCIKICNpbmNsdWRlICJoY3BfaWYuaCIKIAotI2RlZmluZSBJQl9NQURfU1RBVFVTX1JFRElSRUNUCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX01FVEhPRAlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKKyNkZWZpbmUgSUJfTUFEX1NUQVRVU19SRURJUkVDVAkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX1ZFUlNJT04JY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX01FVEhPRAljcHVfdG9fYmUxNigweDAwMDgpCiAKLSNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJX19jb25zdGFudF9odG9ucygweDAwMDEpCisjZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCWNwdV90b19iZTE2KDB4MDAwMSkKIAogLyoqCiAgKiBlaGNhX2RlZmluZV9zcXAgLSBEZWZpbmVzIHNwZWNpYWwgcXVldWUgcGFpciAxIChHU0kgUVApLiBXaGVuIHNwZWNpYWwgcXVldWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCA2OWMwY2UzLi5jYjlkYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0yNzE1LDcgKzI3MTUsNyBAQAogICogdG8gcHJldmVudCBIb0wgYmxvY2tpbmcsIHRoZW4gc3RhcnQgdGhlIEhvTCB0aW1lciB0aGF0CiAgKiBwZXJpb2RpY2FsbHkgY29udGludWVzLCB0aGVuIHN0b3AgcHJvY3MsIHNvIHRoZXkgY2FuIGRldGVjdAogICogbGluayBkb3duIGlmIHRoZXkgd2FudCwgYW5kIGRvIHNvbWV0aGluZyBhYm91dCBpdC4KLSAqIFRpbWVyIG1heSBhbHJlYWR5IGJlIHJ1bm5pbmcsIHNvIHVzZSBfX21vZF90aW1lciwgbm90IGFkZF90aW1lci4KKyAqIFRpbWVyIG1heSBhbHJlYWR5IGJlIHJ1bm5pbmcsIHNvIHVzZSBtb2RfdGltZXIsIG5vdCBhZGRfdGltZXIuCiAgKi8KIHZvaWQgaXBhdGhfaG9sX2Rvd24oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewpAQCAtMjcyNCw3ICsyNzI0LDcgQEAKIAlkZC0+aXBhdGhfaG9sX25leHQgPSBJUEFUSF9IT0xfRE9XTkNPTlQ7CiAJZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzID0gamlmZmllcyArCiAJCW1zZWNzX3RvX2ppZmZpZXMoaXBhdGhfaG9sX3RpbWVvdXRfbXMpOwotCV9fbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLCBkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOworCW1vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwgZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzKTsKIH0KIAogLyoKQEAgLTI3NjMsNyArMjc2Myw3IEBACiAJZWxzZSB7CiAJCWRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhpcGF0aF9ob2xfdGltZW91dF9tcyk7Ci0JCV9fbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLAorCQltb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsCiAJCQlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwppbmRleCBkYzM3Mjc3Li5mYzcxODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCkBAIC03NzIsOCArNzcyLDggQEAKIAkJCSAiMHgleCwgbm90IDB4JXhcbiIsIGNzdW0sIGlmcC0+aWZfY3N1bSk7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSAwVUxMIHx8Ci0JICAgICooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSBfX2NvbnN0YW50X2NwdV90b19iZTY0KC0xTEwpKSB7CisJaWYgKCooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSBjcHVfdG9fYmU2NCgwKSB8fAorCSAgICAqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gfmNwdV90b19iZTY0KDApKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJJbnZhbGlkIEdVSUQgJWxseCBmcm9tIGZsYXNoOyAiCiAJCQkgICAgICAiaWdub3JpbmdcbiIsCiAJCQkgICAgICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBpZnAtPmlmX2d1aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCmluZGV4IDY0YWVlZmIuLjA3Nzg3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWlmICghYWRkcnMpIHsKIAkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBzaGFkb3cgZG1hIGhhbmRsZSAiCiAJCQkgICAgICAiYXJyYXksIG5vIGV4cGVjdGVkIHNlbmRzIVxuIik7Ci0JCXZmcmVlKGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKKwkJdmZyZWUocGFnZXMpOwogCQlkZC0+aXBhdGhfcGFnZXNoYWRvdyA9IE5VTEw7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKaW5kZXggMTdhMTIzMS4uMTZhNzAyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwpAQCAtMzcsMTAgKzM3LDEwIEBACiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAotI2RlZmluZSBJQl9TTVBfVU5TVVBfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhPRAlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKLSNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhfQVRUUglfX2NvbnN0YW50X2h0b25zKDB4MDAwQykKLSNkZWZpbmUgSUJfU01QX0lOVkFMSURfRklFTEQJX19jb25zdGFudF9odG9ucygweDAwMUMpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9WRVJTSU9OCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhPRAljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIX0FUVFIJY3B1X3RvX2JlMTYoMHgwMDBDKQorI2RlZmluZSBJQl9TTVBfSU5WQUxJRF9GSUVMRAljcHVfdG9fYmUxNigweDAwMUMpCiAKIHN0YXRpYyBpbnQgcmVwbHkoc3RydWN0IGliX3NtcCAqc21wKQogewpAQCAtNzg5LDEyICs3ODksMTIgQEAKIAlyZXR1cm4gcmVjdl9zdWJuX2dldF9wa2V5dGFibGUoc21wLCBpYmRldik7CiB9CiAKLSNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfQ09OVFJPTAlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFQJX19jb25zdGFudF9odG9ucygweDAwMTEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxMikKLSNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlNfRVhUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFEKQotI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVF9FWFQJX19jb25zdGFudF9odG9ucygweDAwMUUpCisjZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19DT05UUk9MCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFQJY3B1X3RvX2JlMTYoMHgwMDExKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSUwkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSU19FWFQJY3B1X3RvX2JlMTYoMHgwMDFEKQorI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVF9FWFQJY3B1X3RvX2JlMTYoMHgwMDFFKQogCiBzdHJ1Y3QgaWJfcGVyZiB7CiAJdTggYmFzZV92ZXJzaW9uOwpAQCAtODg0LDE5ICs4ODQsMTkgQEAKIAlfX2JlMzIgcG9ydF9yY3ZfcGFja2V0czsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElCX1BNQV9TRUxfU1lNQk9MX0VSUk9SCQkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9TRUxfTElOS19FUlJPUl9SRUNPVkVSWQkJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1BNQV9TRUxfTElOS19ET1dORUQJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9FUlJPUlMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1JFTVBIWVNfRVJST1JTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9ESVNDQVJEUwkJX19jb25zdGFudF9odG9ucygweDAwNDApCi0jZGVmaW5lIElCX1BNQV9TRUxfTE9DQUxfTElOS19JTlRFR1JJVFlfRVJST1JTCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAwKQotI2RlZmluZSBJQl9QTUFfU0VMX0VYQ0VTU0lWRV9CVUZGRVJfT1ZFUlJVTlMJX19jb25zdGFudF9odG9ucygweDA0MDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9WTDE1X0RST1BQRUQJCV9fY29uc3RhbnRfaHRvbnMoMHgwODAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MTAwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MjAwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDQwMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDgwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfU1lNQk9MX0VSUk9SCQkJY3B1X3RvX2JlMTYoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRVJST1JfUkVDT1ZFUlkJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0RPV05FRAkJCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9FUlJPUlMJCWNwdV90b19iZTE2KDB4MDAwOCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUwljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RJU0NBUkRTCQljcHVfdG9fYmUxNigweDAwNDApCisjZGVmaW5lIElCX1BNQV9TRUxfTE9DQUxfTElOS19JTlRFR1JJVFlfRVJST1JTCWNwdV90b19iZTE2KDB4MDIwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9FWENFU1NJVkVfQlVGRkVSX09WRVJSVU5TCWNwdV90b19iZTE2KDB4MDQwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1ZMMTVfRFJPUFBFRAkJY3B1X3RvX2JlMTYoMHgwODAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBCQljcHVfdG9fYmUxNigweDEwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQQkJY3B1X3RvX2JlMTYoMHgyMDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9QQUNLRVRTCQljcHVfdG9fYmUxNigweDQwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHg4MDAwKQogCiBzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVyc19leHQgewogCXU4IHJlc2VydmVkOwpAQCAtOTEzLDE0ICs5MTMsMTQgQEAKIAlfX2JlNjQgcG9ydF9tdWx0aWNhc3RfcmN2X3BhY2tldHM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfREFUQQkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9YTUlUX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1JDVl9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDIwKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1hNSVRfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDA0MCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9SQ1ZfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDA4MCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEJCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfREFUQQkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9QQUNLRVRTCQljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1hNSVRfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1JDVl9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDAyMCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9YTUlUX1BBQ0tFVFMJY3B1X3RvX2JlMTYoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1JDVl9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDA4MCkKIAogc3RhdGljIGludCByZWN2X3BtYV9nZXRfY2xhc3Nwb3J0aW5mbyhzdHJ1Y3QgaWJfcGVyZiAqcG1wKQogewpAQCAtOTMzLDcgKzkzMyw3IEBACiAJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOwogCiAJLyogSW5kaWNhdGUgQWxsUG9ydFNlbGVjdCBpcyB2YWxpZCAob25seSBvbmUgcG9ydCBhbnl3YXkpICovCi0JcC0+Y2FwX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDEgPDwgOCk7CisJcC0+Y2FwX21hc2sgPSBjcHVfdG9fYmUxNigxIDw8IDgpOwogCXAtPmJhc2VfdmVyc2lvbiA9IDE7CiAJcC0+Y2xhc3NfdmVyc2lvbiA9IDE7CiAJLyoKQEAgLTk1MSwxMiArOTUxLDExIEBACiAgKiBXZSBzdXBwb3J0IDUgY291bnRlcnMgd2hpY2ggb25seSBjb3VudCB0aGUgbWFuZGF0b3J5IHF1YW50aXRpZXMuCiAgKi8KICNkZWZpbmUgQ09VTlRFUl9NQVNLKHEsIG4pIChxIDw8ICgoOSAtIG4pICogMykpCi0jZGVmaW5lIENPVU5URVJfTUFTSzBfOSBcCi0JX19jb25zdGFudF9jcHVfdG9fYmUzMihDT1VOVEVSX01BU0soMSwgMCkgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDEpIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAyKSB8IFwKLQkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMykgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDQpKQorI2RlZmluZSBDT1VOVEVSX01BU0swXzkgY3B1X3RvX2JlMzIoQ09VTlRFUl9NQVNLKDEsIDApIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgMSkgfCBcCisJCQkJICAgIENPVU5URVJfTUFTSygxLCAyKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDMpIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgNCkpCiAKIHN0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzY29udHJvbChzdHJ1Y3QgaWJfcGVyZiAqcG1wLAogCQkJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKQEAgLTExMzcsNyArMTEzNiw3IEBACiAJCXN0YXR1cyA9IGRldi0+cG1hX3NhbXBsZV9zdGF0dXM7CiAJcC0+c2FtcGxlX3N0YXR1cyA9IGNwdV90b19iZTE2KHN0YXR1cyk7CiAJLyogNjQgYml0cyAqLwotCXAtPmV4dGVuZGVkX3dpZHRoID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKKwlwLT5leHRlbmRlZF93aWR0aCA9IGNwdV90b19iZTMyKDB4ODAwMDAwMDApOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0KTsgaSsrKQogCQlwLT5jb3VudGVyW2ldID0gKHN0YXR1cyAhPSBJQl9QTUFfU0FNUExFX1NUQVRVU19ET05FKSA/IDAgOgogCQkgICAgY3B1X3RvX2JlNjQoCkBAIC0xMTg1LDcgKzExODQsNyBAQAogCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAogCWlmIChjbnRycy5zeW1ib2xfZXJyb3JfY291bnRlciA+IDB4RkZGRlVMKQotCQlwLT5zeW1ib2xfZXJyb3JfY291bnRlciA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPQogCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcik7CkBAIC0xMTk5LDE3ICsxMTk4LDE3IEBACiAJZWxzZQogCQlwLT5saW5rX2Rvd25lZF9jb3VudGVyID0gKHU4KWNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXI7CiAJaWYgKGNudHJzLnBvcnRfcmN2X2Vycm9ycyA+IDB4RkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnBvcnRfcmN2X2Vycm9ycyA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPQogCQkJY3B1X3RvX2JlMTYoKHUxNikgY250cnMucG9ydF9yY3ZfZXJyb3JzKTsKIAlpZiAoY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMpOwogCWlmIChjbnRycy5wb3J0X3htaXRfZGlzY2FyZHMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF94bWl0X2Rpc2NhcmRzKTsKQEAgLTEyMjAsMjQgKzEyMTksMjQgQEAKIAlwLT5sbGlfZWJvcl9lcnJvcnMgPSAoY250cnMubG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzIDw8IDQpIHwKIAkJY250cnMuZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9yczsKIAlpZiAoY250cnMudmwxNV9kcm9wcGVkID4gMHhGRkZGVUwpCi0JCXAtPnZsMTVfZHJvcHBlZCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+dmwxNV9kcm9wcGVkID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnZsMTVfZHJvcHBlZCA9IGNwdV90b19iZTE2KCh1MTYpY250cnMudmwxNV9kcm9wcGVkKTsKIAlpZiAoY250cnMucG9ydF94bWl0X2RhdGEgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9kYXRhID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF94bWl0X2RhdGEgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3htaXRfZGF0YSk7CiAJaWYgKGNudHJzLnBvcnRfcmN2X2RhdGEgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfcmN2X2RhdGEgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCQlwLT5wb3J0X3Jjdl9kYXRhID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3Jjdl9kYXRhKTsKIAlpZiAoY250cnMucG9ydF94bWl0X3BhY2tldHMgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF94bWl0X3BhY2tldHMgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0KIAkJCWNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF94bWl0X3BhY2tldHMpOwogCWlmIChjbnRycy5wb3J0X3Jjdl9wYWNrZXRzID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9IGNwdV90b19iZTMyKDB4RkZGRkZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9CiAJCQljcHVfdG9fYmUzMigodTMyKSBjbnRycy5wb3J0X3Jjdl9wYWNrZXRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKaW5kZXggOTE3MDcxMC4uNzliM2RiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKQEAgLTE3NDQsNyArMTc0NCw3IEBACiAJCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KIAkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCiAJCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCi0JCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCQkJY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOwogCQlicmVhazsKIAogCWNhc2UgT1AoUkRNQV9XUklURV9GSVJTVCk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYwppbmRleCA4ZTI1NWFkLi40YjA2OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZG1hLmMKQEAgLTc4MSwxMCArNzgxLDEwIEBACiAJCWRlc2NxcCA9ICZkZC0+aXBhdGhfc2RtYV9kZXNjcVtkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnRdLnF3WzBdOwogCWRlc2NxcCAtPSAyOwogCS8qIFNEbWFMYXN0RGVzYyAqLwotCWRlc2NxcFswXSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTEpOworCWRlc2NxcFswXSB8PSBjcHVfdG9fbGU2NCgxVUxMIDw8IDExKTsKIAlpZiAodHgtPnR4cmVxLmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX0lOVFJFUSkgewogCQkvKiBTRG1hSW50UmVxICovCi0JCWRlc2NxcFswXSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTUpOworCQlkZXNjcXBbMF0gfD0gY3B1X3RvX2xlNjQoMVVMTCA8PCAxNSk7CiAJfQogCiAJLyogQ29tbWl0IHdyaXRlcyB0byBtZW1vcnkgYW5kIGFkdmFuY2UgdGhlIHRhaWwgb24gdGhlIGNoaXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKaW5kZXggODJjYzU4OC4uMjJlNjA5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCQkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCiAJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkJICAgICAgIChvaGRyLT5idGhbMF0gJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCQkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCA5MWM3NGNjLi42MDc2Y2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJICovCiAJb2hkci0+YnRoWzFdID0gYWhfYXR0ci0+ZGxpZCA+PSBJUEFUSF9NVUxUSUNBU1RfTElEX0JBU0UgJiYKIAkJYWhfYXR0ci0+ZGxpZCAhPSBJUEFUSF9QRVJNSVNTSVZFX0xJRCA/Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoSVBBVEhfTVVMVElDQVNUX1FQTikgOgorCQljcHVfdG9fYmUzMihJUEFUSF9NVUxUSUNBU1RfUVBOKSA6CiAJCWNwdV90b19iZTMyKHdxZS0+d3Iud3IudWQucmVtb3RlX3Fwbik7CiAJb2hkci0+YnRoWzJdID0gY3B1X3RvX2JlMzIocXAtPnNfbmV4dF9wc24rKyAmIElQQVRIX1BTTl9NQVNLKTsKIAkvKgpAQCAtNTczLDcgKzU3Myw3IEBACiAJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLwogCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCi0JCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKwkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAogYmFpbDo7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwppbmRleCAwMTkwZWRjLi44NTU5MTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKQEAgLTIwOSwyMCArMjA5LDIwIEBACiAKIAltbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOwogCWlmICghbW0pCi0JCWdvdG8gYmFpbDsKKwkJcmV0dXJuOwogCiAJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3b3JrKQogCQlnb3RvIGJhaWxfbW07CiAKLQlnb3RvIGJhaWw7Ci0KIAlJTklUX1dPUksoJndvcmstPndvcmssIHVzZXJfcGFnZXNfYWNjb3VudCk7CiAJd29yay0+bW0gPSBtbTsKIAl3b3JrLT5udW1fcGFnZXMgPSBudW1fcGFnZXM7CiAKKwlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKKwlyZXR1cm47CisKIGJhaWxfbW06CiAJbW1wdXQobW0pOwotYmFpbDoKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKaW5kZXggODJkOWEwYi4uN2JmZjRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwpAQCAtNjY3LDEzICs2NjcsMTMgQEAKIAogc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2ZpcnN0X2Rlc2MwKF9fbGU2NCBkZXNjcSkKIHsKLQlyZXR1cm4gZGVzY3EgfCBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTIpOworCXJldHVybiBkZXNjcSB8IGNwdV90b19sZTY0KDFVTEwgPDwgMTIpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfbGFzdF9kZXNjMChfX2xlNjQgZGVzY3EpCiB7CiAJCQkJCSAgICAgIC8qIGxhc3QgKi8gIC8qIGRtYSBoZWFkICovCi0JcmV0dXJuIGRlc2NxIHwgX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDExIHwgMVVMTCA8PCAxMyk7CisJcmV0dXJuIGRlc2NxIHwgY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSB8IDFVTEwgPDwgMTMpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfZGVzYzEodTY0IGFkZHIpCkBAIC03NjMsNyArNzYzLDcgQEAKIAkJaWYgKG9mcyA+PSBJUEFUSF9TTUFMTEJVRl9EV09SRFMpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBwa3QtPm5hZGRyOyBpKyspIHsKIAkJCQlkZC0+aXBhdGhfc2RtYV9kZXNjcVtkdGFpbF0ucXdbMF0gfD0KLQkJCQkJX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDE0KTsKKwkJCQkJY3B1X3RvX2xlNjQoMVVMTCA8PCAxNCk7CiAJCQkJaWYgKCsrZHRhaWwgPT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250KQogCQkJCQlkdGFpbCA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCmluZGV4IGNkZjBlNmEuLjkyODlhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCkBAIC0xNTg1LDcgKzE1ODUsNyBAQAogCXU2NCBpYmNzdGF0OwogCiAJbWVtc2V0KHByb3BzLCAwLCBzaXplb2YoKnByb3BzKSk7Ci0JcHJvcHMtPmxpZCA9IGxpZCA/IGxpZCA6IF9fY29uc3RhbnRfYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOworCXByb3BzLT5saWQgPSBsaWQgPyBsaWQgOiBiZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CiAJcHJvcHMtPmxtYyA9IGRkLT5pcGF0aF9sbWM7CiAJcHJvcHMtPnNtX2xpZCA9IGRldi0+c21fbGlkOwogCXByb3BzLT5zbV9zbCA9IGRldi0+c21fc2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCmluZGV4IDExZTNmNjEuLmFlNmNmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC04NiwxMSArODYsMTEgQEAKICNkZWZpbmUgSUJfUE1BX1NBTVBMRV9TVEFUVVNfUlVOTklORwkweDAyCiAKIC8qIE1hbmRhdG9yeSBJQiBwZXJmb3JtYW5jZSBjb3VudGVyIHNlbGVjdCB2YWx1ZXMuICovCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfREFUQQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX0RBVEEJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfUEtUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAwMykKLSNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX1BLVFMJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfV0FJVAlfX2NvbnN0YW50X2h0b25zKDB4MDAwNSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9EQVRBCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX0RBVEEJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1BLVFMJY3B1X3RvX2JlMTYoMHgwMDAzKQorI2RlZmluZSBJQl9QTUFfUE9SVF9SQ1ZfUEtUUwljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfV0FJVAljcHVfdG9fYmUxNigweDAwMDUpCiAKIHN0cnVjdCBpYl9yZXRoIHsKIAlfX2JlNjQgdmFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCmluZGV4IDYwNmYxZTIuLjE5ZTY4YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCkBAIC0xNDcsNyArMTQ3LDggQEAKICAqIFNub29wIFNNIE1BRHMgZm9yIHBvcnQgaW5mbyBhbmQgUF9LZXkgdGFibGUgc2V0cywgc28gd2UgY2FuCiAgKiBzeW50aGVzaXplIExJRCBjaGFuZ2UgYW5kIFBfS2V5IGNoYW5nZSBldmVudHMuCiAgKi8KLXN0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKm1hZCkKK3N0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKm1hZCwKKwkJCQl1MTYgcHJldl9saWQpCiB7CiAJc3RydWN0IGliX2V2ZW50IGV2ZW50OwogCkBAIC0xNTcsNiArMTU4LDcgQEAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTykgewogCQkJc3RydWN0IGliX3BvcnRfaW5mbyAqcGluZm8gPQogCQkJCShzdHJ1Y3QgaWJfcG9ydF9pbmZvICopICgoc3RydWN0IGliX3NtcCAqKSBtYWQpLT5kYXRhOworCQkJdTE2IGxpZCA9IGJlMTZfdG9fY3B1KHBpbmZvLT5saWQpOwogCiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLAogCQkJCSAgICAgYmUxNl90b19jcHUocGluZm8tPnNtX2xpZCksCkBAIC0xNjUsMTIgKzE2NywxNSBAQAogCQkJZXZlbnQuZGV2aWNlCSAgICAgICA9IGliZGV2OwogCQkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnRfbnVtOwogCi0JCQlpZiAocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKQorCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkgewogCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVI7Ci0JCQllbHNlCi0JCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAKLQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQlpZiAocHJldl9saWQgIT0gbGlkKSB7CisJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAJCX0KIAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUEtFWV9UQUJMRSkgewpAQCAtMjI4LDggKzIzMyw5IEBACiAJCQlzdHJ1Y3QgaWJfd2MgKmluX3djLCBzdHJ1Y3QgaWJfZ3JoICppbl9ncmgsCiAJCQlzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCiB7Ci0JdTE2IHNsaWQ7CisJdTE2IHNsaWQsIHByZXZfbGlkID0gMDsKIAlpbnQgZXJyOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgcGF0dHI7CiAKIAlzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKIApAQCAtMjYzLDYgKzI2OSwxMyBAQAogCX0gZWxzZQogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOwogCisJaWYgKChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8gJiYKKwkgICAgIWliX3F1ZXJ5X3BvcnQoaWJkZXYsIHBvcnRfbnVtLCAmcGF0dHIpKQorCQlwcmV2X2xpZCA9IHBhdHRyLmxpZDsKKwogCWVyciA9IG1seDRfTUFEX0lGQyh0b19tZGV2KGliZGV2KSwKIAkJCSAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfTUtFWSwKIAkJCSAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfQktFWSwKQEAgLTI3MSw3ICsyODQsNyBAQAogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9GQUlMVVJFOwogCiAJaWYgKCFvdXRfbWFkLT5tYWRfaGRyLnN0YXR1cykgewotCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQpOworCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIHByZXZfbGlkKTsKIAkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwppbmRleCA2MTU4OGJkLi4yY2NiOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCkBAIC02OTksMTEgKzY5OSwxMiBAQAogCXN0cnVjdCBtbHg0X2liX2RldiAqaWJkZXYgPSBpYmRldl9wdHI7CiAJaW50IHA7CiAKKwltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKKwlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CisKIAlmb3IgKHAgPSAxOyBwIDw9IGliZGV2LT5udW1fcG9ydHM7ICsrcCkKIAkJbWx4NF9DTE9TRV9QT1JUKGRldiwgcCk7CiAKLQltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKLQlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CiAJaW91bm1hcChpYmRldi0+dWFyX21hcCk7CiAJbWx4NF91YXJfZnJlZShkZXYsICZpYmRldi0+cHJpdl91YXIpOwogCW1seDRfcGRfZnJlZShkZXYsIGliZGV2LT5wcml2X3Bkbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCBhOTFjYjRjLi5mMzg1YTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTcxLDE3ICs3MSwxNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IF9fYmUzMiBtbHg0X2liX29wY29kZVtdID0gewotCVtJQl9XUl9TRU5EXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSwKLQlbSUJfV1JfTFNPXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAotCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU1NKSwKLQlbSUJfV1JfUkRNQV9XUklURV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKLQlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKLQlbSUJfV1JfUkRNQV9SRUFEXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfUkVBRCksCi0JW0lCX1dSX0FUT01JQ19DTVBfQU5EX1NXUF0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19DUyksCi0JW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKLQlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lOVkFMKSwKLQlbSUJfV1JfTE9DQUxfSU5WXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xPQ0FMX0lOVkFMKSwKLQlbSUJfV1JfRkFTVF9SRUdfTVJdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKKwlbSUJfV1JfU0VORF0JCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkQpLAorCVtJQl9XUl9MU09dCQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAorCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lNTSksCisJW0lCX1dSX1JETUFfV1JJVEVdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEUpLAorCVtJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKKwlbSUJfV1JfUkRNQV9SRUFEXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1JFQUQpLAorCVtJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1BdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0NTKSwKKwlbSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BRERdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKKwlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTlZBTCksCisJW0lCX1dSX0xPQ0FMX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTE9DQUxfSU5WQUwpLAorCVtJQl9XUl9GQVNUX1JFR19NUl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWx4NF9pYl9zcXAgKnRvX21zcXAoc3RydWN0IG1seDRfaWJfcXAgKm1xcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwppbmRleCA2NDA0NDk1Li41NjQ4NjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCkBAIC0xMDQsNyArMTA0LDggQEAKICAqLwogc3RhdGljIHZvaWQgc21wX3Nub29wKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAogCQkgICAgICB1OCBwb3J0X251bSwKLQkJICAgICAgc3RydWN0IGliX21hZCAqbWFkKQorCQkgICAgICBzdHJ1Y3QgaWJfbWFkICptYWQsCisJCSAgICAgIHUxNiBwcmV2X2xpZCkKIHsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CiAKQEAgLTExNCw2ICsxMTUsNyBAQAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPKSB7CiAJCQlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaW5mbyA9CiAJCQkJKHN0cnVjdCBpYl9wb3J0X2luZm8gKikgKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGE7CisJCQl1MTYgbGlkID0gYmUxNl90b19jcHUocGluZm8tPmxpZCk7CiAKIAkJCW10aGNhX3VwZGF0ZV9yYXRlKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSk7CiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLApAQCAtMTIzLDEyICsxMjUsMTUgQEAKIAkJCWV2ZW50LmRldmljZSAgICAgICAgICAgPSBpYmRldjsKIAkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAotCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOwotCQkJZWxzZQotCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCi0JCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJaWYgKHByZXZfbGlkICE9IGxpZCkgeworCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCQl9CiAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BLRVlfVEFCTEUpIHsKQEAgLTE5Niw2ICsyMDEsOCBAQAogCWludCBlcnI7CiAJdTggc3RhdHVzOwogCXUxNiBzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKwl1MTYgcHJldl9saWQgPSAwOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgcGF0dHI7CiAKIAkvKiBGb3J3YXJkIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYXBzIHRvIHRoZSBTTSAqLwogCWlmIChpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1RSQVAgJiYKQEAgLTIzMyw2ICsyNDAsMTIgQEAKIAkJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CiAJfSBlbHNlCiAJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CisJaWYgKChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8gJiYKKwkgICAgIWliX3F1ZXJ5X3BvcnQoaWJkZXYsIHBvcnRfbnVtLCAmcGF0dHIpKQorCQlwcmV2X2xpZCA9IHBhdHRyLmxpZDsKIAogCWVyciA9IG10aGNhX01BRF9JRkModG9fbWRldihpYmRldiksCiAJCQkgICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZLApAQCAtMjUyLDcgKzI2NSw3IEBACiAJfQogCiAJaWYgKCFvdXRfbWFkLT5tYWRfaGRyLnN0YXR1cykgewotCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQpOworCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIHByZXZfbGlkKTsKIAkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCmluZGV4IGI5NjExYWQuLmNhNTk5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCmluZGV4IDEzYTViYjEuLjA0YjEyYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IGEwMWI0NDguLjUyNDI1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMTAzLDYgKzEwMyw3IEBACiBzdGF0aWMgdm9pZCBuZXNfZGlzY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKIHN0YXRpYyBpbnQgc2VuZF9zeW4oc3RydWN0IG5lc19jbV9ub2RlICosIHUzMiwgc3RydWN0IHNrX2J1ZmYgKik7CiBzdGF0aWMgaW50IHNlbmRfcmVzZXQoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIGludCBzZW5kX2FjayhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTEzLDggKzExNCw3IEBACiBzdGF0aWMgdm9pZCBhY3RpdmVfb3Blbl9lcnIoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBzdGF0aWMgdm9pZCBwYXNzaXZlX29wZW5fZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogc3RhdGljIHZvaWQgY2xlYW51cF9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKLXN0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAotCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUpOworc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIHZvaWQgZnJlZV9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSk7CiBzdGF0aWMgaW50IGhhbmRsZV90Y3Bfb3B0aW9ucyhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdGlvbnNpemUsIGludCBwYXNzaXZlKTsKQEAgLTEyNCw2ICsxMjQsOCBAQAogc3RhdGljIHZvaWQgY21fZXZlbnRfY29ubmVjdF9lcnJvcihzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOwogc3RhdGljIHZvaWQgY21fZXZlbnRfcmVzZXQoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZXEoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZWplY3Qoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWN2X2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTMyIHJlbV9ub2RlKTsKIAogc3RhdGljIHZvaWQgcHJpbnRfY29yZShzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNvcmUpOwogCkBAIC0xOTYsNyArMTk4LDYgQEAKICAqLwogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmV0OwogCWlmICghc2tiKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAic2tiIHNldCB0byBOVUxMXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjA2LDExICsyMDcsMjcgQEAKIAlmb3JtX2NtX2ZyYW1lKHNrYiwgY21fbm9kZSwgTlVMTCwgMCwgJmNtX25vZGUtPm1wYV9mcmFtZSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCBTRVRfQUNLKTsKIAotCXJldCA9IHNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBza2IsIE5FU19USU1FUl9UWVBFX1NFTkQsIDEsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKK30KIAotCXJldHVybiAwOworCisKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYiA9IE5VTEw7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9DTV9CVUZGRVIpOworCWlmICghc2tiKSB7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiRmFpbGVkIHRvIGdldCBhIEZyZWUgcGt0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc2VuZCBhbiBNUEEgcmVqZWN0IGZyYW1lICovCisJZm9ybV9jbV9mcmFtZShza2IsIGNtX25vZGUsIE5VTEwsIDAsICZjbV9ub2RlLT5tcGFfZnJhbWUsCisJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgU0VUX0FDSyB8IFNFVF9GSU4pOworCisJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKIH0KIAogCkBAIC0yMTgsMTQgKzIzNSwxNyBAQAogICogcmVjdl9tcGEgLSBwcm9jZXNzIGEgcmVjZWl2ZWQgVENQIHBrdCwgd2UgYXJlIGV4cGVjdGluZyBhbgogICogSUVURiBNUEEgZnJhbWUKICAqLwotc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgbGVuKQorc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgKnR5cGUsCisJCXUzMiBsZW4pCiB7CiAJc3RydWN0IGlldGZfbXBhX2ZyYW1lICptcGFfZnJhbWU7CiAKKwkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9BQ0NFUFQ7CisKIAkvKiBhc3N1bWUgcmVxIGZyYW1lIGlzIGluIHRjcCBkYXRhIHBheWxvYWQgKi8KIAlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBzbWFsbCAoJXgpXG4iLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW1wYV9mcmFtZSA9IChzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKilidWZmZXI7CkBAIC0yMzQsMTQgKzI1NCwyNSBAQAogCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSArIHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICE9IGxlbikgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlRoZSByZWNlaXZlZCBpZXRmIGJ1ZmZlciB3YXMgbm90IHJpZ2h0IgogCQkJCSIgY29tcGxldGUgKCV4ICsgJXggIT0gJXgpXG4iLAotCQkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCAodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsCisJCQkJKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgdGhlIG1heCBzaXplICovCisJaWYgKGxlbiA+IE1BWF9DTV9CVUZGRVIpIHsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBsYXJnZSIKKwkJCQkiICgleCArICV4ICE9ICV4KVxuIiwKKwkJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwKKwkJCQkodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBjb3B5IGVudGlyZSBNUEEgZnJhbWUgdG8gb3VyIGNtX25vZGUncyBmcmFtZSAqLwogCW1lbWNweShjbV9ub2RlLT5tcGFfZnJhbWVfYnVmLCBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplKTsKIAorCWlmIChtcGFfZnJhbWUtPmZsYWdzICYgSUVURl9NUEFfRkxBR1NfUkVKRUNUKQorCQkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1Q7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4MCw3ICs0MTEsNyBAQAogCiAJbmV3X3NlbmQgPSBremFsbG9jKHNpemVvZigqbmV3X3NlbmQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19zZW5kKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogbmV3X3NlbmQtPnRpbWV0b3NlbmQgPSBjdXJyZW50dGltZSAqLwogCW5ld19zZW5kLT5yZXRyeWNvdW50ID0gTkVTX0RFRkFVTFRfUkVUUllTOwpAQCAtMzk0LDkgKzQyNSwxMSBAQAogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfQ0xPU0UpIHsKIAkJbmV3X3NlbmQtPnRpbWV0b3NlbmQgKz0gKEhaLzEwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJm5ld19zZW5kLT5saXN0LCAmY21fbm9kZS0+cmVjdl9saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKGNtX25vZGUtPnJlY3ZfZW50cnkpIHsKKwkJCVdBUk5fT04oMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljbV9ub2RlLT5yZWN2X2VudHJ5ID0gbmV3X3NlbmQ7CiAJfQogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfU0VORCkgewpAQCAtNDM1LDI0ICs0NjgsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBuZXNfcmV0cmFuc19leHBpcmVkKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CisJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ6CisJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CisJCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNyZWF0ZV9ldmVudChjbV9ub2RlLCBORVNfQ01fRVZFTlRfQUJPUlRFRCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVjdl9lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHUzMiByZW1fbm9kZSkKK3sKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICpyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19xcCAqbmVzcXA7CisJdW5zaWduZWQgbG9uZyBxcGxvY2tmbGFnczsKKworCWlmICghcmVjdl9lbnRyeSkKKwkJcmV0dXJuOworCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7CisJaWYgKG5lc3FwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQlpZiAobmVzcXAtPmNtX2lkKSB7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKKwkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgorCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7CisJCQluZXNxcC0+bGFzdF9hZXEgPSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQ7CisJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgorCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCisJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggbm90aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQl9CisJfSBlbHNlIGlmIChyZW1fbm9kZSkgeworCQkvKiBUSU1FX1dBSVQgc3RhdGUgKi8KKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCX0KKwlpZiAoY21fbm9kZS0+Y21faWQpCisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwlrZnJlZShyZWN2X2VudHJ5KTsKKwljbV9ub2RlLT5yZWN2X2VudHJ5ID0gTlVMTDsKK30KIAogLyoqCiAgKiBuZXNfY21fdGltZXJfdGljawogICovCiBzdGF0aWMgdm9pZCBuZXNfY21fdGltZXJfdGljayh1bnNpZ25lZCBsb25nIHBhc3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG5leHR0aW1lb3V0ID0gamlmZmllcyArIE5FU19MT05HX1RJTUU7Ci0Jc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7CiAJc3RydWN0IG5lc190aW1lcl9lbnRyeSAqc2VuZF9lbnRyeSwgKnJlY3ZfZW50cnk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlLCAqbGlzdF9jb3JlX3RlbXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlLCAqbGlzdF9ub2RlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlOwogCXN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSA9IGdfY21fY29yZTsKLQlzdHJ1Y3QgbmVzX3FwICpuZXNxcDsKIAl1MzIgc2V0dGltZXIgPSAwOwogCWludCByZXQgPSBORVRERVZfVFhfT0s7Ci0JZW51bSBuZXNfY21fbm9kZV9zdGF0ZSBsYXN0X3N0YXRlOwogCiAJc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9saXN0OwogCUlOSVRfTElTVF9IRUFEKCZ0aW1lcl9saXN0KTsKQEAgLTQ2MSw3ICs1NDgsNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLAogCQkJCSZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXMpIHsKIAkJY21fbm9kZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBuZXNfY21fbm9kZSwgbGlzdCk7Ci0JCWlmICghbGlzdF9lbXB0eSgmY21fbm9kZS0+cmVjdl9saXN0KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKKwkJaWYgKChjbV9ub2RlLT5yZWN2X2VudHJ5KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKIAkJCWFkZF9yZWZfY21fbm9kZShjbV9ub2RlKTsKIAkJCWxpc3RfYWRkKCZjbV9ub2RlLT50aW1lcl9lbnRyeSwgJnRpbWVyX2xpc3QpOwogCQl9CkBAIC00NzEsNTQgKzU1OCwxOCBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLCAmdGltZXJfbGlzdCkgewogCQljbV9ub2RlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5lc19jbV9ub2RlLAogCQkJCQl0aW1lcl9lbnRyeSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9jb3JlLCBsaXN0X25vZGVfdGVtcCwKLQkJCSZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJCXJlY3ZfZW50cnkgPSBjb250YWluZXJfb2YobGlzdF9jb3JlLAotCQkJCXN0cnVjdCBuZXNfdGltZXJfZW50cnksIGxpc3QpOwotCQkJaWYgKCFyZWN2X2VudHJ5KQotCQkJCWJyZWFrOworCQlyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKworCQlpZiAocmVjdl9lbnRyeSkgewogCQkJaWYgKHRpbWVfYWZ0ZXIocmVjdl9lbnRyeS0+dGltZXRvc2VuZCwgamlmZmllcykpIHsKIAkJCQlpZiAobmV4dHRpbWVvdXQgPiByZWN2X2VudHJ5LT50aW1ldG9zZW5kIHx8Ci0JCQkJCSFzZXR0aW1lcikgeworCQkJCQkJIXNldHRpbWVyKSB7CiAJCQkJCW5leHR0aW1lb3V0ID0gcmVjdl9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJc2V0dGltZXIgPSAxOwogCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQkJaWYgKG5lc3FwLT5jbV9pZCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgotCQkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgotCQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJCW5lc3FwLT5sYXN0X2FlcSA9IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDsKLQkJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssCi0JCQkJCXFwbG9ja2ZsYWdzKTsKLQkJCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQl9IGVsc2UgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLAotCQkJCQlxcGxvY2tmbGFncyk7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCi0JCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCi0JCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIG5vdGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJfQotCQkJaWYgKGNtX2lkKQotCQkJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQkJa2ZyZWUocmVjdl9lbnRyeSk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCX0gZWxzZQorCQkJCWhhbmRsZV9yZWN2X2VudHJ5KGNtX25vZGUsIDEpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrLCBmbGFncyk7CiAJCWRvIHsKQEAgLTUzMywxMiArNTg0LDExIEBACiAJCQkJCQluZXh0dGltZW91dCA9CiAJCQkJCQkJc2VuZF9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJCXNldHRpbWVyID0gMTsKLQkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJZnJlZV9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwotCQkJCQlicmVhazsKIAkJCQl9CisJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWlmICgoY21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkgfHwKQEAgLTU1MCwxNiArNjAwLDEyIEBACiAJCQlpZiAoIXNlbmRfZW50cnktPnJldHJhbnNjb3VudCB8fAogCQkJCSFzZW5kX2VudHJ5LT5yZXRyeWNvdW50KSB7CiAJCQkJY21fcGFja2V0c19kcm9wcGVkKys7Ci0JCQkJbGFzdF9zdGF0ZSA9IGNtX25vZGUtPnN0YXRlOwotCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQlmcmVlX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAogCQkJCQkmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAobGFzdF9zdGF0ZSA9PSBORVNfQ01fU1RBVEVfU1lOX1JDVkQpCi0JCQkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKLQkJCQllbHNlCi0JCQkJCWNyZWF0ZV9ldmVudChjbV9ub2RlLAotCQkJCQkJTkVTX0NNX0VWRU5UX0FCT1JURUQpOworCQkJCW5lc19yZXRyYW5zX2V4cGlyZWQoY21fbm9kZSk7CisJCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywKIAkJCQkJZmxhZ3MpOwogCQkJCWJyZWFrOwpAQCAtNzE0LDcgKzc2MCw3IEBACiAJCXNrYiA9IGRldl9hbGxvY19za2IoTUFYX0NNX0JVRkZFUik7CiAJaWYgKCFza2IpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJGYWlsZWQgdG8gZ2V0IGEgRnJlZSBwa3RcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvcm1fY21fZnJhbWUoc2tiLCBjbV9ub2RlLCBOVUxMLCAwLCBOVUxMLCAwLCBmbGFncyk7CkBAIC03NzgsMTQgKzgyNCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqaHRlOwogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKLQlfX2JlMzIgdG1wX2FkZHIgPSBjcHVfdG9fYmUzMihsb2NfYWRkcik7CiAKIAkvKiBnZXQgYSBoYW5kbGUgb24gdGhlIGh0ZSAqLwogCWh0ZSA9ICZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXM7CiAKLQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlNlYXJjaGluZyBmb3IgYW4gb3duZXIgbm9kZTogJXBJNDoleCBmcm9tIGNvcmUgJXAtPiVwXG4iLAotCQkgICZ0bXBfYWRkciwgbG9jX3BvcnQsIGNtX2NvcmUsIGh0ZSk7Ci0KIAkvKiB3YWxrIGxpc3QgYW5kIGZpbmQgY21fbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uIElEICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmh0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtX25vZGUsIGh0ZSwgbGlzdCkgewpAQCAtODc1LDcgKzkxNyw4IEBACiBzdGF0aWMgaW50IG1pbmlfY21fZGVjX3JlZmNudF9saXN0ZW4oc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlLAogCXN0cnVjdCBuZXNfY21fbGlzdGVuZXIgKmxpc3RlbmVyLCBpbnQgZnJlZV9oYW5naW5nX25vZGVzKQogewotCWludCByZXQgPSAxOworCWludCByZXQgPSAtRUlOVkFMOworCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfdGVtcCA9IE5VTEw7CkBAIC05MDQsMTAgKzk0Nyw2MCBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3RlbXAsICZyZXNldF9saXN0KSB7CiAJCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9wb3MsIHN0cnVjdCBuZXNfY21fbm9kZSwKLQkJCQkJcmVzZXRfZW50cnkpOwotCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7Ci0JCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7Ci0JCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCQlyZXNldF9lbnRyeSk7CisJCXsKKwkJCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CisJCQlpZiAoTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMSA8PSBjbV9ub2RlLT5zdGF0ZSkgeworCQkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFsb29wYmFjaykgeworCQkJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCQkJCWlmIChlcnIpIHsKKwkJCQkJCWNtX25vZGUtPnN0YXRlID0KKwkJCQkJCQkgTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCVdBUk5fT04oMSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljbV9ub2RlLT5zdGF0ZSA9CisJCQkJCQkJTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCXJlbV9yZWZfY21fbm9kZSgKKwkJCQkJCQljbV9ub2RlLT5jbV9jb3JlLAorCQkJCQkJCWNtX25vZGUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPQorCQkJCQkJCWxvb3BiYWNrLT5yZW1fYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9CisJCQkJCQkJbG9vcGJhY2stPmxvY19hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0KKwkJCQkJCQlsb29wYmFjay0+cmVtX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPQorCQkJCQkJCSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X2Nvbm5lY3RfZXJyb3IoJmV2ZW50KTsKKwkJCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gY21fbm9kZTsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9CisJCQkJCQkJIGNtX25vZGUtPnJlbV9hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0KKwkJCQkJCQkgY21fbm9kZS0+bG9jX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPQorCQkJCQkJCSBjbV9ub2RlLT5yZW1fcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9CisJCQkJCQkJIGNtX25vZGUtPmxvY19wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X3Jlc2V0KCZldmVudCk7CisKKwkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsCisJCQkJCQkJIGNtX25vZGUpOworCisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmxpc3Rlbl9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTk2OCw2ICsxMDYxLDcgQEAKIAlpZiAoY21fbm9kZS0+YWNjZXB0X3BlbmQpIHsKIAkJQlVHX09OKCFjbV9ub2RlLT5saXN0ZW5lcik7CiAJCWF0b21pY19kZWMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAwOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KIApAQCAtOTk0LDcgKzEwODgsNyBAQAogCW1lbXNldCgmZmwsIDAsIHNpemVvZiBmbCk7CiAJZmwubmxfdS5pcDRfdS5kYWRkciA9IGh0b25sKGRzdF9pcCk7CiAJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKLQkJcHJpbnRrKCIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKIAkJCQlfX2Z1bmNfXywgZHN0X2lwKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTEwNTcsOCArMTE1MSw2IEBACiAJCQljbV9ub2RlLT5jbV9pZCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZjbV9ub2RlLT5yZWN2X2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jayk7CiAKIAljbV9ub2RlLT5sb29wYmFja3BhcnRuZXIgPSBOVUxMOwogCWF0b21pY19zZXQoJmNtX25vZGUtPnJlZl9jb3VudCwgMSk7CkBAIC0xMTI2LDEwICsxMjE4LDcgQEAKIHN0YXRpYyBpbnQgcmVtX3JlZl9jbV9ub2RlKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7Ci0Jc3RydWN0IG5lc190aW1lcl9lbnRyeSAqcmVjdl9lbnRyeTsKLQlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZSwgKmxpc3Rfbm9kZV90ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG5lc19xcCAqbmVzcXA7CiAKIAlpZiAoIWNtX25vZGUpCkBAIC0xMTUwLDM4ICsxMjM5LDkgQEAKIAkJYXRvbWljX2RlYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KLQlCVUdfT04oY21fbm9kZS0+c2VuZF9lbnRyeSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfY29yZSwgbGlzdF9ub2RlX3RlbXAsICZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJcmVjdl9lbnRyeSA9IGNvbnRhaW5lcl9vZihsaXN0X2NvcmUsIHN0cnVjdCBuZXNfdGltZXJfZW50cnksCi0JCQkJbGlzdCk7Ci0JCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCWlmIChuZXNxcC0+Y21faWQpIHsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcDogSElUIEEgIgotCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyB0byBkbyFcbiIsCi0JCQkJbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkKTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJbmVzcXAtPmxhc3RfYWVxID0gTkVTX0FFUUVfQUVJRF9SRVNFVF9TRU5UOwotCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXA6IEhJVCBBICIKLQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBub3RoaW5nIHRvIGRvIVxuIiwKLQkJCQluZXNxcC0+aHdxcC5xcF9pZCwgY21faWQpOwotCQl9Ci0JCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQlrZnJlZShyZWN2X2VudHJ5KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0KKwlXQVJOX09OKGNtX25vZGUtPnNlbmRfZW50cnkpOworCWlmIChjbV9ub2RlLT5yZWN2X2VudHJ5KQorCQloYW5kbGVfcmVjdl9lbnRyeShjbV9ub2RlLCAwKTsKIAlpZiAoY21fbm9kZS0+bGlzdGVuZXIpIHsKIAkJbWluaV9jbV9kZWNfcmVmY250X2xpc3RlbihjbV9jb3JlLCBjbV9ub2RlLT5saXN0ZW5lciwgMCk7CiAJfSBlbHNlIHsKQEAgLTEyNjYsOCArMTMyNiw3IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX2Zpbl9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXN0cnVjdCB0Y3BoZHIgKnRjcGgpCitzdGF0aWMgdm9pZCBoYW5kbGVfZmluX3BrdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJSZWNlaXZlZCBGSU4sIGNtX25vZGUgPSAlcCwgc3RhdGUgPSAldS4gIgogCQkicmVmY250PSVkXG4iLCBjbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSwKQEAgLTEyNzksMjMgKzEzMzgsMzAgQEAKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKIAljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVDoKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s7Ci0JCXNlbmRfZmluKGNtX25vZGUsIHNrYik7CisJCXNlbmRfZmluKGNtX25vZGUsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7Ci0JCXNlbmRfYWNrKGNtX25vZGUsIHNrYik7CisJCXNlbmRfYWNrKGNtX25vZGUsIE5VTEwpOworCQkvKiBXYWl0IGZvciBBQ0sgYXMgdGhpcyBpcyBzaW11bHRhbm91cyBjbG9zZS4uCisJCSogQWZ0ZXIgd2UgcmVjZWl2ZSBBQ0ssIGRvIG5vdCBzZW5kIGFueXRoaW5nLi4KKwkJKiBKdXN0IHJtIHRoZSBub2RlLi4gRG9uZS4uICovCiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVElNRV9XQUlUOwotCQlzZW5kX2FjayhjbV9ub2RlLCBza2IpOworCQlzZW5kX2FjayhjbV9ub2RlLCBOVUxMKTsKKwkJc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIE5VTEwsICBORVNfVElNRVJfVFlQRV9DTE9TRSwgMSwgMCk7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX1RJTUVfV0FJVDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAlkZWZhdWx0OgogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkVycm9yIFJjdmQgRklOIGZvciBub2RlLSVwIHN0YXRlID0gJWRcbiIsCiAJCQljbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSk7Ci0JCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTEzNDEsMjMgKzE0MDcsMzUgQEAKIAkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9USU1FX1dBSVQ6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkJhZCBzdGF0ZSAlc1sldV1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IsCi0JZW51bSBuZXNfY21fZXZlbnRfdHlwZSB0eXBlKQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAKLQlpbnQJcmV0OworCWludAlyZXQgPSAwOwogCWludCBkYXRhc2l6ZSA9IHNrYi0+bGVuOwogCXU4ICpkYXRhbG9jID0gc2tiLT5kYXRhOwotCXJldCA9IHBhcnNlX21wYShjbV9ub2RlLCBkYXRhbG9jLCBkYXRhc2l6ZSk7Ci0JaWYgKHJldCA8IDApIHsKKworCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUgdHlwZSA9IE5FU19DTV9FVkVOVF9VTktOT1dOOworCXUzMiAgICAgcmVzX3R5cGU7CisJcmV0ID0gcGFyc2VfbXBhKGNtX25vZGUsIGRhdGFsb2MsICZyZXNfdHlwZSwgZGF0YXNpemUpOworCWlmIChyZXQpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJkaWRuJ3QgbGlrZSBNUEEgUmVxdWVzdFxuIik7Ci0JCWlmICh0eXBlID09IE5FU19DTV9FVkVOVF9DT05ORUNURUQpIHsKKwkJaWYgKGNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVCkgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICIlc1sldV0gY3JlYXRlIGFib3J0IGZvciAiCiAJCQkJImNtX25vZGU9JXAgbGlzdGVuZXI9JXAgc3RhdGU9JWRcbiIsIF9fZnVuY19fLAogCQkJCV9fTElORV9fLCBjbV9ub2RlLCBjbV9ub2RlLT5saXN0ZW5lciwKQEAgLTEzNjYsMTggKzE0NDQsMzggQEAKIAkJfSBlbHNlIHsKIAkJCXBhc3NpdmVfb3Blbl9lcnIoY21fbm9kZSwgc2tiLCAxKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaWYgKHR5cGUgPT0gTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRCkKLQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RTQTsKLQkJZWxzZQotCQkJYXRvbWljX3NldCgmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSwKLQkJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKLQkJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwotCisJCXJldHVybjsKIAl9Ci0JcmV0dXJuIDsKKworCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKKwljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKKwkJaWYgKHJlc190eXBlID09IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QpIHsKKwkJCS8qQklHIHByb2JsZW0gYXMgd2UgYXJlIHJlY2VpdmluZyB0aGUgTVBBLi4gU28gc2hvdWxkCisJCQkqIG5vdCBiZSBSRUpFQ1QuLiBUaGlzIGlzIFBhc3NpdmUgT3Blbi4uIFdlIGNhbgorCQkJKiBvbmx5IHJlY2VpdmUgaXQgUmVqZWN0IGZvciBBY3RpdmUgT3Blbi4uLiovCisJCQlXQVJOX09OKDEpOworCQl9CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOworCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRVE7CisJCWF0b21pY19zZXQoJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUsCisJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJCWlmIChyZXNfdHlwZSA9PSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUKSB7CisJCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1Q7CisJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDsKKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSBORVNfQ01fRVZFTlRfQ09OTkVDVEVEOworCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVFNBOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwogfQogCiBzdGF0aWMgdm9pZCBpbmRpY2F0ZV9wa3RfZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjUsOCArMTU2Myw2IEBACiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0xJU1RFTklORzoKIAkJLyogUGFzc2l2ZSBPUEVOICovCi0JCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMTsKLQkJYXRvbWljX2luYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlpZiAoYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA+CiAJCQkJY21fbm9kZS0+bGlzdGVuZXItPmJhY2tsb2cpIHsKIAkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiZHJvcCBzeW4gZHVlIHRvIGJhY2tsb2cgIgpAQCAtMTQ4NCw2ICsxNTgwLDkgQEAKIAkJfQogCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIDE7CiAJCUJVR19PTihjbV9ub2RlLT5zZW5kX2VudHJ5KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAxOworCQlhdG9taWNfaW5jKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CisKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ7CiAJCXNlbmRfc3luKGNtX25vZGUsIDEsIHNrYik7CiAJCWJyZWFrOwpAQCAtMTUxOCw2ICsxNjE3LDcgQEAKIAlpbmNfc2VxdWVuY2UgPSBudG9obCh0Y3BoLT5zZXEpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQkvKiBhY3RpdmUgb3BlbiAqLwogCQlpZiAoY2hlY2tfc3luKGNtX25vZGUsIHRjcGgsIHNrYikpCiAJCQlyZXR1cm47CkBAIC0xNTY3LDEwICsxNjY3LDcgQEAKIAl1MzIgcmVtX3NlcTsKIAlpbnQgcmV0OwogCWludCBvcHRpb25zaXplOwotCXUzMiB0ZW1wX3NlcSA9IGNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bTsKLQogCW9wdGlvbnNpemUgPSAodGNwaC0+ZG9mZiA8PCAyKSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKLQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAogCWlmIChjaGVja19zZXEoY21fbm9kZSwgdGNwaCwgc2tiKSkKIAkJcmV0dXJuOwpAQCAtMTU4MCw3ICsxNjc3LDcgQEAKIAlyZW1fc2VxID0gbnRvaGwodGNwaC0+c2VxKTsKIAlyZW1fc2VxX2FjayA9ICBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAlkYXRhc2l6ZSA9IHNrYi0+bGVuOwotCisJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fUkNWRDoKIAkJLyogUGFzc2l2ZSBPUEVOICovCkBAIC0xNTg4LDcgKzE2ODUsNiBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwotCQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSB0ZW1wX3NlcTsKIAkJaWYgKGNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSAhPQogCQkgICAgY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtKSB7CiAJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgInJlbV9hY2tfbnVtICE9IGxvY19zZXFfbnVtXG4iKTsKQEAgLTE1OTcsMzEgKzE2OTMsMzAgQEAKIAkJCXJldHVybjsKIAkJfQogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDsKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwgTkVTX0NNX0VWRU5UX01QQV9SRVEpOwotCQkgfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKKwkJfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJIH0KIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwotCQkvKiBXZSBleHBlY3QgbXBhIGZyYW1lIHRvIGJlIHJlY2VpdmVkIG9ubHkgKi8KKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwKLQkJCQlORVNfQ01fRVZFTlRfTVBBX1JFUSk7CisJCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IpOwogCQl9IGVsc2UKIAkJCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsIE5FU19DTV9FVkVOVF9DT05ORUNURUQpOworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKIAkJfSBlbHNlIHsgLyogQ291bGQgYmUganVzdCBhbiBhY2sgcGt0Li4gKi8KIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0xNjMyLDEzICsxNzI3LDI0IEBACiAJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCWNtX25vZGUtPmNtX2lkLT5yZW1fcmVmKGNtX25vZGUtPmNtX2lkKTsKKwljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQyOgogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDoKLQljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKLQljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgogCWNhc2UgTkVTX0NNX1NUQVRFX1VOS05PV046CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKQEAgLTE3NDgsNiArMTg1NCw3IEBACiB7CiAJZW51bSBuZXNfdGNwaXBfcGt0X3R5cGUJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfVU5LTk9XTjsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXUzMiAgICAgZmluX3NldCA9IDA7CiAJc2tiX3B1bGwoc2tiLCBpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJwcm9jZXNzX3BhY2tldDogY21fbm9kZT0lcCBzdGF0ZSA9JWQgc3luPSVkICIKQEAgLTE3NjAsMTAgKzE4NjcsMTAgQEAKIAkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOOwogCQlpZiAodGNwaC0+YWNrKQogCQkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOQUNLOwotCX0gZWxzZSBpZiAodGNwaC0+ZmluKQotCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9GSU47Ci0JZWxzZSBpZiAodGNwaC0+YWNrKQorCX0gZWxzZSBpZiAodGNwaC0+YWNrKQogCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9BQ0s7CisJaWYgKHRjcGgtPmZpbikKKwkJZmluX3NldCA9IDE7CiAKIAlzd2l0Y2ggKHBrdF90eXBlKSB7CiAJY2FzZSBORVNfUEtUX1RZUEVfU1lOOgpAQCAtMTc3NCwxNSArMTg4MSwxNiBAQAogCQlicmVhazsKIAljYXNlIE5FU19QS1RfVFlQRV9BQ0s6CiAJCWhhbmRsZV9hY2tfcGt0KGNtX25vZGUsIHNrYiwgdGNwaCk7CisJCWlmIChmaW5fc2V0KQorCQkJaGFuZGxlX2Zpbl9wa3QoY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX1BLVF9UWVBFX1JTVDoKIAkJaGFuZGxlX3JzdF9wa3QoY21fbm9kZSwgc2tiLCB0Y3BoKTsKIAkJYnJlYWs7Ci0JY2FzZSBORVNfUEtUX1RZUEVfRklOOgotCQloYW5kbGVfZmluX3BrdChjbV9ub2RlLCBza2IsIHRjcGgpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcm9wX3BhY2tldChza2IpOworCQlpZiAoZmluX3NldCkKKwkJCWhhbmRsZV9maW5fcGt0KGNtX25vZGUpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xOTI1LDcgKzIwMzMsNyBAQAogCQkJCWxvb3BiYWNrcmVtb3Rlbm9kZS0+dGNwX2NudHh0LnJjdl93c2NhbGU7CiAJCQlsb29wYmFja3JlbW90ZW5vZGUtPnRjcF9jbnR4dC5zbmRfd3NjYWxlID0KIAkJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X3dzY2FsZTsKLQorCQkJbG9vcGJhY2tyZW1vdGVub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKIAkJCWNyZWF0ZV9ldmVudChsb29wYmFja3JlbW90ZW5vZGUsIE5FU19DTV9FVkVOVF9NUEFfUkVRKTsKIAkJfQogCQlyZXR1cm4gY21fbm9kZTsKQEAgLTE5ODAsNyArMjA4OCwxMSBAQAogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqbXBhX2ZyYW1lLCBzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CiAJaW50IHBhc3NpdmVfc3RhdGU7CisJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19jbV9ub2RlICpsb29wYmFjayA9IGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcjsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiJXMgY21fbm9kZT0lcCB0eXBlPSVkIHN0YXRlPSVkXG4iLAogCQlfX2Z1bmNfXywgY21fbm9kZSwgY21fbm9kZS0+dGNwX2NudHh0LmNsaWVudCwgY21fbm9kZS0+c3RhdGUpOwpAQCAtMTk4OSwxMiArMjEwMSwzOCBAQAogCQlyZXR1cm4gcmV0OwogCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAotCXBhc3NpdmVfc3RhdGUgPSBhdG9taWNfYWRkX3JldHVybigxLCAmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSk7Ci0JY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwotCWlmIChwYXNzaXZlX3N0YXRlID09IE5FU19TRU5EX1JFU0VUX0VWRU5UKQorCWlmICghbG9vcGJhY2spIHsKKwkJcGFzc2l2ZV9zdGF0ZSA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlKTsKKwkJaWYgKHBhc3NpdmVfc3RhdGUgPT0gTkVTX1NFTkRfUkVTRVRfRVZFTlQpIHsKKwkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNlbmRfbXBhX3JlamVjdChjbV9ub2RlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJZXJyID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlXQVJOX09OKDEpOworCQkJfSBlbHNlCisJCQkJY21faWQtPmFkZF9yZWYoY21faWQpOworCQl9CisJfSBlbHNlIHsKKwkJY21fbm9kZS0+Y21faWQgPSBOVUxMOworCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPSBsb29wYmFjay0+cmVtX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ubG9jX2FkZHIgPSBsb29wYmFjay0+bG9jX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPSBsb29wYmFjay0+cmVtX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCWNtX2V2ZW50X21wYV9yZWplY3QoJmV2ZW50KTsKIAkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOwotCWVsc2UKLQkJcmV0ID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7CisKKwkJY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBsb29wYmFjayk7CisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDMxLDYgKzIxNjksNyBAQAogCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CiAJCXJldCA9IC0xOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAljYXNlIE5FU19DTV9TVEFURV9MSVNURU5JTkc6CiAJY2FzZSBORVNfQ01fU1RBVEVfVU5LTk9XTjoKIAljYXNlIE5FU19DTV9TVEFURV9JTklURUQ6CkBAIC0yMjI3LDE1ICsyMzY2LDE1IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgotCQkJY21fY29yZS0+bXR1ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKLQkJCWNtX2NvcmUtPmZyZWVfdHhfcGt0X21heCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiB1bmtub3duIHNldCBvcHRpb24gKi8KLQkJCXJldCA9IC1FSU5WQUw7CisJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgorCQljbV9jb3JlLT5tdHUgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKKwkJY21fY29yZS0+ZnJlZV90eF9wa3RfbWF4ID0gdmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHVua25vd24gc2V0IG9wdGlvbiAqLworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yNDkwLDEyICsyNjI5LDE0IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG5lc192bmljICpuZXN2bmljOwogCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXY7CisJc3RydWN0IG5lc19pYl9kZXZpY2UgKm5lc2liZGV2OwogCiAJbmVzdm5pYyA9IHRvX25lc3ZuaWMobmVzcXAtPmlicXAuZGV2aWNlKTsKIAlpZiAoIW5lc3ZuaWMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OworCW5lc2liZGV2ID0gbmVzdm5pYy0+bmVzaWJkZXY7CiAKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgIm5ldGRldiByZWZjbnQgPSAldS5cbiIsCiAJCQlhdG9taWNfcmVhZCgmbmVzdm5pYy0+bmV0ZGV2LT5yZWZjbnQpKTsKQEAgLTI1MDcsNiArMjY0OCw4IEBACiAJfSBlbHNlIHsKIAkJLyogTmVlZCB0byBmcmVlIHRoZSBMYXN0IFN0cmVhbWluZyBNb2RlIE1lc3NhZ2UgKi8KIAkJaWYgKG5lc3FwLT5pZXRmX2ZyYW1lKSB7CisJCQlpZiAobmVzcXAtPmxzbW1fbXIpCisJCQkJbmVzaWJkZXYtPmliZGV2LmRlcmVnX21yKG5lc3FwLT5sc21tX21yKTsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsCiAJCQkJCW5lc3FwLT5wcml2YXRlX2RhdGFfbGVuK3NpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLAogCQkJCQluZXNxcC0+aWV0Zl9mcmFtZSwgbmVzcXAtPmlldGZfZnJhbWVfcGJhc2UpOwpAQCAtMjU0Myw2ICsyNjg2LDEyIEBACiAJdTMyIGNyY192YWx1ZTsKIAlpbnQgcmV0OwogCWludCBwYXNzaXZlX3N0YXRlOworCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldjsKKwlzdHJ1Y3QgaWJfbXIgKmlibXIgPSBOVUxMOworCXN0cnVjdCBpYl9waHlzX2J1ZiBpYnBoeXNidWY7CisJc3RydWN0IG5lc19wZCAqbmVzcGQ7CisKKwogCiAJaWJxcCA9IG5lc19nZXRfcXAoY21faWQtPmRldmljZSwgY29ubl9wYXJhbS0+cXBuKTsKIAlpZiAoIWlicXApCkBAIC0yNjAxLDYgKzI3NTAsMjYgQEAKIAlpZiAoY21faWQtPnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkciAhPQogCQkJY21faWQtPmxvY2FsX2FkZHIuc2luX2FkZHIuc19hZGRyKSB7CiAJCXU2NHRlbXAgPSAodW5zaWduZWQgbG9uZyluZXNxcDsKKwkJbmVzaWJkZXYgPSBuZXN2bmljLT5uZXNpYmRldjsKKwkJbmVzcGQgPSBuZXNxcC0+bmVzcGQ7CisJCWlicGh5c2J1Zi5hZGRyID0gbmVzcXAtPmlldGZfZnJhbWVfcGJhc2U7CisJCWlicGh5c2J1Zi5zaXplID0gY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiArCisJCQkJCXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpOworCQlpYm1yID0gbmVzaWJkZXYtPmliZGV2LnJlZ19waHlzX21yKChzdHJ1Y3QgaWJfcGQgKiluZXNwZCwKKwkJCQkJCSZpYnBoeXNidWYsIDEsCisJCQkJCQlJQl9BQ0NFU1NfTE9DQUxfV1JJVEUsCisJCQkJCQkodTY0ICopJm5lc3FwLT5pZXRmX2ZyYW1lKTsKKwkJaWYgKCFpYm1yKSB7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlVuYWJsZSB0byByZWdpc3RlciBtZW1vcnkgcmVnaW9uIgorCQkJCQkiZm9yIGxTTU0gZm9yIGNtX25vZGUgPSAlcCBcbiIsCisJCQkJCWNtX25vZGUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlpYm1yLT5wZCA9ICZuZXNwZC0+aWJwZDsKKwkJaWJtci0+ZGV2aWNlID0gbmVzcGQtPmlicGQuZGV2aWNlOworCQluZXNxcC0+bHNtbV9tciA9IGlibXI7CisKIAkJdTY0dGVtcCB8PSBORVNfU1dfQ09OVEVYVF9BTElHTj4+MTsKIAkJc2V0X3dxZV82NGJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywKIAkJCU5FU19JV0FSUF9TUV9XUUVfQ09NUF9DVFhfTE9XX0lEWCwKQEAgLTI2MTEsMjMgKzI3ODAsMjAgQEAKIAkJd3FlLT53cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9UT1RBTF9QQVlMT0FEX0lEWF0gPQogCQkJY3B1X3RvX2xlMzIoY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiArCiAJCQlzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSk7Ci0JCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfRlJBRzBfTE9XX0lEWF0gPQotCQkJY3B1X3RvX2xlMzIoKHUzMiluZXNxcC0+aWV0Zl9mcmFtZV9wYmFzZSk7Ci0JCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfRlJBRzBfSElHSF9JRFhdID0KLQkJCWNwdV90b19sZTMyKCh1MzIpKCh1NjQpbmVzcXAtPmlldGZfZnJhbWVfcGJhc2UgPj4gMzIpKTsKKwkJc2V0X3dxZV82NGJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywKKwkJCQkJTkVTX0lXQVJQX1NRX1dRRV9GUkFHMF9MT1dfSURYLAorCQkJCQkodTY0KW5lc3FwLT5pZXRmX2ZyYW1lKTsKIAkJd3FlLT53cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9MRU5HVEgwX0lEWF0gPQogCQkJY3B1X3RvX2xlMzIoY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiArCiAJCQlzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSk7Ci0JCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfU1RBRzBfSURYXSA9IDA7CisJCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfU1RBRzBfSURYXSA9IGlibXItPmxrZXk7CiAKIAkJbmVzcXAtPm5lc3FwX2NvbnRleHQtPmlyZF9vcmRfc2l6ZXMgfD0KIAkJCWNwdV90b19sZTMyKE5FU19RUENPTlRFWFRfT1JESVJEX0xTTU1fUFJFU0VOVCB8CiAJCQlORVNfUVBDT05URVhUX09SRElSRF9XUlBEVSk7CiAJfSBlbHNlIHsKIAkJbmVzcXAtPm5lc3FwX2NvbnRleHQtPmlyZF9vcmRfc2l6ZXMgfD0KLQkJCWNwdV90b19sZTMyKChORVNfUVBDT05URVhUX09SRElSRF9MU01NX1BSRVNFTlQgfAotCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfV1JQRFUgfAotCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfQUxTTU0pKTsKKwkJCWNwdV90b19sZTMyKE5FU19RUENPTlRFWFRfT1JESVJEX1dSUERVKTsKIAl9CiAJbmVzcXAtPnNraXBfbHNtbSA9IDE7CiAKQEAgLTI3NDksMjMgKzI5MTUsMzUgQEAKIGludCBuZXNfcmVqZWN0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsIGNvbnN0IHZvaWQgKnBkYXRhLCB1OCBwZGF0YV9sZW4pCiB7CiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOworCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2s7CisKIAlzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmU7CiAKIAlhdG9taWNfaW5jKCZjbV9yZWplY3RzKTsKIAljbV9ub2RlID0gKHN0cnVjdCBuZXNfY21fbm9kZSAqKSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKwlsb29wYmFjayA9IGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcjsKIAljbV9jb3JlID0gY21fbm9kZS0+Y21fY29yZTsKKwljbV9ub2RlLT5jbV9pZCA9IGNtX2lkOwogCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkgKyBwZGF0YV9sZW47CiAKLQlzdHJjcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5rZXlbMF0sIElFRlRfTVBBX0tFWV9SRVApOwotCW1lbWNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YSwgcGRhdGEsIHBkYXRhX2xlbik7CisJaWYgKGNtX25vZGUtPm1wYV9mcmFtZV9zaXplID4gTUFYX0NNX0JVRkZFUikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQljbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhX2xlbiA9IGNwdV90b19iZTE2KHBkYXRhX2xlbik7CisJc3RyY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUua2V5WzBdLCBJRUZUX01QQV9LRVlfUkVQKTsKKwlpZiAobG9vcGJhY2spIHsKKwkJbWVtY3B5KCZsb29wYmFjay0+bXBhX2ZyYW1lLnByaXZfZGF0YSwgcGRhdGEsIHBkYXRhX2xlbik7CisJCWxvb3BiYWNrLT5tcGFfZnJhbWUucHJpdl9kYXRhX2xlbiA9IHBkYXRhX2xlbjsKKwkJbG9vcGJhY2stPm1wYV9mcmFtZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkgKworCQkJCXBkYXRhX2xlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCQljbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhX2xlbiA9IGNwdV90b19iZTE2KHBkYXRhX2xlbik7CisJfQorCiAJY21fbm9kZS0+bXBhX2ZyYW1lLnJldiA9IG1wYV92ZXJzaW9uOwogCWNtX25vZGUtPm1wYV9mcmFtZS5mbGFncyA9IElFVEZfTVBBX0ZMQUdTX0NSQyB8IElFVEZfTVBBX0ZMQUdTX1JFSkVDVDsKIAotCWNtX2NvcmUtPmFwaS0+cmVqZWN0KGNtX2NvcmUsICZjbV9ub2RlLT5tcGFfZnJhbWUsIGNtX25vZGUpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNtX2NvcmUtPmFwaS0+cmVqZWN0KGNtX2NvcmUsICZjbV9ub2RlLT5tcGFfZnJhbWUsIGNtX25vZGUpOwogfQogCiAKQEAgLTMyNzQsMTMgKzM0NTIsNTYgQEAKIAljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fcG9ydCA9IGh0b25zKGV2ZW50LT5jbV9pbmZvLnJlbV9wb3J0KTsKIAljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChldmVudC0+Y21faW5mby5yZW1fYWRkcik7Ci0KLQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhICAgICAgICAgICAgICAgID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKLQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiAgICAgICAgICAgID0gKHU4KSBjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZTsKKwljbV9ldmVudC5wcml2YXRlX2RhdGEgPSBjbV9ub2RlLT5tcGFfZnJhbWVfYnVmOworCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gID0gKHU4KSBjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZTsKIAogCXJldCA9IGNtX2lkLT5ldmVudF9oYW5kbGVyKGNtX2lkLCAmY21fZXZlbnQpOwogCWlmIChyZXQpCi0JCXByaW50aygiJXNbJXVdIE9GQSBDTSBldmVudF9oYW5kbGVyIHJldHVybmVkLCByZXQ9JWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXNbJXVdIE9GQSBDTSBldmVudF9oYW5kbGVyIHJldHVybmVkLCByZXQ9JWRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBjbV9ldmVudF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBpd19jbV9pZCAgICpjbV9pZDsKKwlzdHJ1Y3QgaXdfY21fZXZlbnQgY21fZXZlbnQ7CisJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOworCWludCByZXQ7CisKKwljbV9ub2RlID0gZXZlbnQtPmNtX25vZGU7CisJaWYgKCFjbV9ub2RlKQorCQlyZXR1cm47CisJY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKKworCWF0b21pY19pbmMoJmNtX2Nvbm5lY3RfcmVxcyk7CisJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJjbV9ub2RlID0gJXAgLSBjbV9pZCA9ICVwLCBqaWZmaWVzID0gJWx1XG4iLAorCQkJY21fbm9kZSwgY21faWQsIGppZmZpZXMpOworCisJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZOworCWNtX2V2ZW50LnN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7CisJY21fZXZlbnQucHJvdmlkZXJfZGF0YSA9IGNtX2lkLT5wcm92aWRlcl9kYXRhOworCisJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoZXZlbnQtPmNtX2luZm8ubG9jX3BvcnQpOworCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ubG9jX2FkZHIpOworCisJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPSBodG9ucyhldmVudC0+Y21faW5mby5yZW1fcG9ydCk7CisJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ucmVtX2FkZHIpOworCisJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKKwljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuID0gKHU4KSBjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZTsKKworCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiY2FsbCBDTV9FVkVOVF9NUEFfUkVKRUNURUQsIGxvY2FsX2FkZHI9JTA4eCwgIgorCQkJInJlbW92ZV9hZGRyPSUwOHhcbiIsCisJCQljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkciwKKwkJCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkcik7CisKKwlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAogCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKIAogCXJldHVybjsKQEAgLTMzNDUsNiArMzU2NiwxNCBAQAogCQljbV9ldmVudF9jb25uZWN0ZWQoZXZlbnQpOwogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkNNIEV2ZW50OiBDT05ORUNURURcbiIpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9FVkVOVF9NUEFfUkVKRUNUOgorCQlpZiAoKCFldmVudC0+Y21fbm9kZS0+Y21faWQpIHx8CisJCQkJKGV2ZW50LT5jbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfVFNBKSkKKwkJCWJyZWFrOworCQljbV9ldmVudF9tcGFfcmVqZWN0KGV2ZW50KTsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJDTSBFdmVudDogUkVKRUNUXG4iKTsKKwkJYnJlYWs7CisKIAljYXNlIE5FU19DTV9FVkVOVF9BQk9SVEVEOgogCQlpZiAoKCFldmVudC0+Y21fbm9kZS0+Y21faWQpIHx8CiAJCQkoZXZlbnQtPmNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9UU0EpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKaW5kZXggZmFmYTM1MC4uZDVmNzc4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0zOSw2ICszOSw5IEBACiAjZGVmaW5lIE5FU19NQU5BR0VfQVBCVlRfREVMIDAKICNkZWZpbmUgTkVTX01BTkFHRV9BUEJWVF9BREQgMQogCisjZGVmaW5lIE5FU19NUEFfUkVRVUVTVF9BQ0NFUFQgIDEKKyNkZWZpbmUgTkVTX01QQV9SRVFVRVNUX1JFSkVDVCAgMgorCiAvKiBJRVRGIE1QQSAtLSBkZWZpbmVzLCBlbnVtcywgc3RydWN0cyAqLwogI2RlZmluZSBJRUZUX01QQV9LRVlfUkVRICAiTVBBIElEIFJlcSBGcmFtZSIKICNkZWZpbmUgSUVGVF9NUEFfS0VZX1JFUCAgIk1QQSBJRCBSZXAgRnJhbWUiCkBAIC0xODYsNiArMTg5LDcgQEAKIAlORVNfQ01fU1RBVEVfQUNDRVBUSU5HLAogCU5FU19DTV9TVEFURV9NUEFSRVFfU0VOVCwKIAlORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQsCisJTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZELAogCU5FU19DTV9TVEFURV9UU0EsCiAJTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMSwKIAlORVNfQ01fU1RBVEVfRklOX1dBSVQyLApAQCAtMjc4LDEzICsyODIsMTIgQEAKIAlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5CSpzZW5kX2VudHJ5OwogCiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICByZXRyYW5zX2xpc3RfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgIHJlY3ZfbGlzdDsKLQlzcGlubG9ja190ICAgICAgICAgICAgICAgIHJlY3ZfbGlzdF9sb2NrOworCXN0cnVjdCBuZXNfdGltZXJfZW50cnkgICpyZWN2X2VudHJ5OwogCiAJaW50ICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3dyaXRlMDsKIAl1bmlvbiB7CiAJCXN0cnVjdCBpZXRmX21wYV9mcmFtZSBtcGFfZnJhbWU7Ci0JCXU4ICAgICAgICAgICAgICAgICAgICBtcGFfZnJhbWVfYnVmW05FU19DTV9ERUZBVUxUX01UVV07CisJCXU4ICAgICAgICAgICAgICAgICAgICBtcGFfZnJhbWVfYnVmW01BWF9DTV9CVUZGRVJdOwogCX07CiAJdTE2ICAgICAgICAgICAgICAgICAgICAgICBtcGFfZnJhbWVfc2l6ZTsKIAlzdHJ1Y3QgaXdfY21faWQgICAgICAgICAgICpjbV9pZDsKQEAgLTMyNiw2ICszMjksNyBAQAogCU5FU19DTV9FVkVOVF9NUEFfUkVRLAogCU5FU19DTV9FVkVOVF9NUEFfQ09OTkVDVCwKIAlORVNfQ01fRVZFTlRfTVBBX0FDQ0VQVCwKKwlORVNfQ01fRVZFTlRfTVBBX1JFSkVDVCwKIAlORVNfQ01fRVZFTlRfTVBBX0VTVEFCTElTSEVELAogCU5FU19DTV9FVkVOVF9DT05ORUNURUQsCiAJTkVTX0NNX0VWRU5UX0NMT1NFRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaAppbmRleCBkYTlkYWJhLi4wZmI4ZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwppbmRleCA1M2RmOWRlLi41MmU3MzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTI1NCw2ICsyNTQsNyBAQAogCXUzMiBhZGFwdGVyX3NpemU7CiAJdTMyIGFycF90YWJsZV9zaXplOwogCXUxNiB2ZW5kb3JfaWQ7CisJdTE2IGRldmljZV9pZDsKIAl1OCAgT25lR19Nb2RlOwogCXU4ICBmdW5jX2luZGV4OwogCkBAIC0zNTYsNiArMzU3LDEzIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCW5lc2FkYXB0ZXItPnZlbmRvcl9pZCA9ICgoKHUzMikgbmVzYWRhcHRlci0+bWFjX2FkZHJfaGlnaCkgPDwgOCkgfAorCQkJCShuZXNhZGFwdGVyLT5tYWNfYWRkcl9sb3cgPj4gMjQpOworCisJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKG5lc2Rldi0+cGNpZGV2LT5idXMsIG5lc2Rldi0+cGNpZGV2LT5kZXZmbiwKKwkJCQkgUENJX0RFVklDRV9JRCwgJmRldmljZV9pZCk7CisJbmVzYWRhcHRlci0+dmVuZG9yX3BhcnRfaWQgPSBkZXZpY2VfaWQ7CisKIAlpZiAobmVzX2luaXRfc2VyZGVzKG5lc2RldiwgaHdfcmV2LCBwb3J0X2NvdW50LCBuZXNhZGFwdGVyLAogCQkJCQkJCU9uZUdfTW9kZSkpIHsKIAkJa2ZyZWUobmVzYWRhcHRlcik7CkBAIC0xNjM2LDcgKzE2NDQsNiBAQAogCW5lc3ZuaWMtPnBvc3RfY3FwX3JlcXVlc3QgPSBuZXNfcG9zdF9jcXBfcmVxdWVzdDsKIAluZXN2bmljLT5tY3JxX21jYXN0X2ZpbHRlciA9IE5VTEw7CiAKLQlzcGluX2xvY2tfaW5pdCgmbmVzdm5pYy0+bmljLnNxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZuZXN2bmljLT5uaWMucnFfbG9jayk7CiAKIAkvKiBzZXR1cCB0aGUgUlEgKi8KQEAgLTIyNjEsNiArMjI2OCw4IEBACiAKIAkJaWYgKCsraGVhZCA+PSBhZXFfc2l6ZSkKIAkJCWhlYWQgPSAwOworCisJCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncyArIE5FU19BRVFfQUxMT0MsIDEgPDwgMTYpOwogCX0KIAl3aGlsZSAoMSk7CiAJYWVxLT5hZXFfaGVhZCA9IGhlYWQ7CkBAIC0yNjIyLDkgKzI2MzEsOSBAQAogCQkJCQkJfSBlbHNlCiAJCQkJCQkJYnJlYWs7CiAJCQkJCX0KLQkJCQkJaWYgKHNrYikKLQkJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfQorCQkJCWlmIChza2IpCisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJbmVzbmljLT5zcV90YWlsKys7CiAJCQkJbmVzbmljLT5zcV90YWlsICY9IG5lc25pYy0+c3Ffc2l6ZS0xOwogCQkJCWlmIChzcV9jcWVzID4gMTI4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCBiYzBiNGRlLi5mNDFhODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC02MSw2ICs2MSw3IEBACiAJTkVTX0NRX0FDSyA9IDB4MDAzNCwKIAlORVNfV1FFX0FMTE9DID0gMHgwMDQwLAogCU5FU19DUUVfQUxMT0MgPSAweDAwNDQsCisJTkVTX0FFUV9BTExPQyA9IDB4MDA0OAogfTsKIAogZW51bSBpbmRleGVkX3JlZ3MgewpAQCAtODc1LDcgKzg3Niw2IEBACiAJdTggcmVwbGVuaXNoaW5nX3JxOwogCXU4IHJlc2VydmVkOwogCi0Jc3BpbmxvY2tfdCBzcV9sb2NrOwogCXNwaW5sb2NrX3QgcnFfbG9jazsKIH07CiAKQEAgLTExNDcsNyArMTE0Nyw2IEBACiBzdHJ1Y3QgbmVzX3ZuaWMgewogCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldjsKIAl1NjQgc3FfZnVsbDsKLQl1NjQgc3FfbG9ja2VkOwogCXU2NCB0c29fcmVxdWVzdHM7CiAJdTY0IHNlZ21lbnRlZF90c29fcmVxdWVzdHM7CiAJdTY0IGxpbmVhcml6ZWRfc2ticzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggZjU0ODRhZC4uOGQzZTRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTQwMCw4ICs0MDAsNyBAQAogCWlmIChza2JfaGVhZGxlbihza2IpID09IHNrYi0+bGVuKSB7CiAJCWlmIChza2JfaGVhZGxlbihza2IpIDw9IE5FU19GSVJTVF9GUkFHX1NJWkUpIHsKIAkJCW5pY19zcWUtPndxZV93b3Jkc1tORVNfTklDX1NRX1dRRV9MRU5HVEhfMl8xX0lEWF0gPSAwOwotCQkJbmVzbmljLT50eF9za2JbbmVzbmljLT5zcV9oZWFkXSA9IE5VTEw7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQluZXNuaWMtPnR4X3NrYltuZXNuaWMtPnNxX2hlYWRdID0gc2tiOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRGVhbCB3aXRoIEZyYWdtZW50cyAqLwpAQCAtNDUzLDcgKzQ1Miw2IEBACiAJdTMyIHdxZV9jb3VudD0xOwogCXUzMiBzZW5kX3JjOwogCXN0cnVjdCBpcGhkciAqaXBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2ICp3cWVfZnJhZ21lbnRfbGVuZ3RoOwogCXUzMiBucl9mcmFnczsKIAl1MzIgb3JpZ2luYWxfZmlyc3RfbGVuZ3RoOwpAQCAtNDgwLDEzICs0NzgsNiBAQAogCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoIXNwaW5fdHJ5bG9jaygmbmVzbmljLT5zcV9sb2NrKSkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCW5lc3ZuaWMtPnNxX2xvY2tlZCsrOwotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9Ci0KIAkvKiBDaGVjayBpZiBTUSBpcyBmdWxsICovCiAJaWYgKCgoKG5lc25pYy0+c3FfdGFpbCsobmVzbmljLT5zcV9zaXplKjIpKS1uZXNuaWMtPnNxX2hlYWQpICYgKG5lc25pYy0+c3Ffc2l6ZSAtIDEpKSA9PSAxKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSB7CkBAIC00OTgsNyArNDg5LDYgQEAKIAkJCX0KIAkJfQogCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC01MzEsNyArNTIxLDYgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAJCQkJbmVzX2RlYnVnKE5FU19EQkdfTklDX1RYLCAiJXM6IEhOSUMgU1EgZnVsbC0gVFNPIHJlcXVlc3QgaGFzIHRvbyBtYW55IGZyYWdzIVxuIiwKIAkJCQkJCW5ldGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwpAQCAtNjU2LDE3ICs2NDUsMTMgQEAKIAkJCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGhvZmZzZXQpOwogCQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG5ob2Zmc2V0KTsKIAkJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CisJCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOworCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQl9CiAJfQogCiAJYmFycmllcigpOwpAQCAtNjc2LDcgKzY2MSw2IEBACiAJCQkJKHdxZV9jb3VudCA8PCAyNCkgfCAoMSA8PCAyMykgfCBuZXN2bmljLT5uaWMucXBfaWQpOwogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTAxMiw3ICs5OTYsNiBAQAogCSJQYXVzZSBGcmFtZXMgUmVjZWl2ZWQiLAogCSJJbnRlcm5hbCBSb3V0aW5nIEVycm9ycyIsCiAJIlNRIFNXIERyb3BwZWQgU0tCcyIsCi0JIlNRIExvY2tlZCIsCiAJIlNRIEZ1bGwiLAogCSJTZWdtZW50ZWQgVFNPIFJlcXVlc3RzIiwKIAkiUnggU3ltYm9sIEVycm9ycyIsCkBAIC0xMTI5LDE2ICsxMTEyLDE3IEBACiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAl1MzIgbmljX2NvdW50OwogCXUzMiB1MzJ0ZW1wOworCXUzMiBpbmRleCA9IDA7CiAKIAl0YXJnZXRfZXRodG9vbF9zdGF0cy0+bl9zdGF0cyA9IE5FU19FVEhUT09MX1NUQVRfQ09VTlQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzBdID0gbmVzdm5pYy0+bmVzZGV2LT5saW5rX3N0YXR1c19pbnRlcnJ1cHRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxXSA9IG5lc3ZuaWMtPmxpbmVhcml6ZWRfc2ticzsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMl0gPSBuZXN2bmljLT50c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzW2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bGlua19zdGF0dXNfaW50ZXJydXB0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5saW5lYXJpemVkX3NrYnM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHNvX3JlcXVlc3RzOwogCiAJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAogCQkJTkVTX0lEWF9NQUNfVFhfUEFVU0VfRlJBTUVTICsgKG5lc3ZuaWMtPm5lc2Rldi0+bWFjX2luZGV4KjB4MjAwKSk7CiAJbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3NlbnQgKz0gdTMydGVtcDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbM10gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKIAogCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwKIAkJCU5FU19JRFhfTUFDX1JYX1BBVVNFX0ZSQU1FUyArIChuZXN2bmljLT5uZXNkZXYtPm1hY19pbmRleCoweDIwMCkpOwpAQCAtMTIwOSw2MCArMTE5Myw1OSBAQAogCQluZXN2bmljLT5lbmRub2RlX2lwdjRfdGNwX3JldHJhbnNtaXRzICs9IHUzMnRlbXA7CiAJfQogCi0JdGFyZ2V0X3N0YXRfdmFsdWVzWzRdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzZdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbN10gPSBuZXN2bmljLT5zcV9sb2NrZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzhdID0gbmVzdm5pYy0+c3FfZnVsbDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbOV0gPSBuZXN2bmljLT5zZWdtZW50ZWRfdHNvX3JlcXVlc3RzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxMF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zeW1ib2xfZXJyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTFdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTJdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfb3ZlcnNpemVkX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTNdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc2hvcnRfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE1XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfb2N0ZXRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNl0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTddID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxOV0gPSBtaF9kZXRlY3RlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjBdID0gbWhfcGF1c2VzX3NlbnQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIxXSA9IG5lc3ZuaWMtPmVuZG5vZGVfaXB2NF90Y3BfcmV0cmFuc21pdHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIyXSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIzXSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjRdID0gYXRvbWljX3JlYWQoJmNtX2Rpc2Nvbm5lY3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjVdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RlZHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syNl0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjddID0gYXRvbWljX3JlYWQoJmNtX3JlamVjdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOF0gPSBhdG9taWNfcmVhZCgmbW9kX3FwX3RpbW91dHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOV0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szMF0gPSBhdG9taWNfcmVhZCgmc3dfcXBzX2Rlc3Ryb3llZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMxXSA9IGF0b21pY19yZWFkKCZxcHNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzJdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMzXSA9IGNtX3BhY2tldHNfc2VudDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzRdID0gY21fcGFja2V0c19ib3VuY2VkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szNV0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM2XSA9IGNtX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM3XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzhdID0gY21fcGFja2V0c19yZXRyYW5zOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szOV0gPSBjbV9saXN0ZW5zX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQwXSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0MV0gPSBjbV9iYWNrbG9nX2Ryb3BzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0Ml0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDNdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0NF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDVdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VsX2Ryb3BwZWRfcGt0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ2XSA9IGF0b21pY19yZWFkKCZjbV9yZXNldHNfcmVjdmQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0N10gPSBpbnRfbW9kX3RpbWVyX2luaXQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ4XSA9IGludF9tb2RfY3FfZGVwdGhfMTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDldID0gaW50X21vZF9jcV9kZXB0aF80OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MV0gPSBpbnRfbW9kX2NxX2RlcHRoXzI0OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1Ml0gPSBpbnRfbW9kX2NxX2RlcHRoXzMyOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1M10gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTRdID0gaW50X21vZF9jcV9kZXB0aF8yNTY7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU1XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTZdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1N10gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5zcV9mdWxsOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnNlZ21lbnRlZF90c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc3ltYm9sX2Vycl9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9vdmVyc2l6ZWRfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3Nob3J0X2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfZGV0ZWN0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfcGF1c2VzX3NlbnQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9pcHY0X3RjcF9yZXRyYW5zbWl0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fZGlzY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0ZWRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVqZWN0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJm1vZF9xcF90aW1vdXRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZzd19xcHNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2Rlc3Ryb3llZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19zZW50OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfYm91bmNlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZWNlaXZlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2Ryb3BwZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZXRyYW5zOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfY3JlYXRlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9iYWNrbG9nX2Ryb3BzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9sb29wYmFja3MpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19jcmVhdGVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fYWNjZWxfZHJvcHBlZF9wa3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVzZXRzX3JlY3ZkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX3RpbWVyX2luaXQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8xOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfNDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMjQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8zMjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogfQogCkBAIC0xNTY4LDYgKzE1NTEsMTkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5lc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbmVzX25ldGRldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXNfbmV0ZGV2X3N0b3AsCisJLm5kb19zdGFydF94bWl0IAk9IG5lc19uZXRkZXZfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXNfbmV0ZGV2X2dldF9zdGF0cywKKwkubmRvX3R4X3RpbWVvdXQgCT0gbmVzX25ldGRldl90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbmVzX25ldGRldl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgCT0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyLAorfTsKIAogLyoqCiAgKiBuZXNfbmV0ZGV2X2luaXQgLSBpbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlCkBAIC0xNTc2LDcgKzE1NzIsNyBAQAogCQl2b2lkIF9faW9tZW0gKm1taW9fYWRkcikKIHsKIAl1NjQgdTY0dGVtcDsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBOVUxMOworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBuaWNfcXBfbWFwICpjdXJyX3FwX21hcDsKIAl1MzIgdTMydGVtcDsKQEAgLTE1ODgsMjIgKzE1ODQsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibmVzdm5pYyBldGhlcmRldiBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCW5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm5ldGRldiA9ICVwLCAlc1xuIiwgbmV0ZGV2LCBuZXRkZXYtPm5hbWUpOwogCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmbmVzZGV2LT5wY2lkZXYtPmRldik7CiAKLQluZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQltZW1zZXQobmVzdm5pYywgMCwgc2l6ZW9mKCpuZXN2bmljKSk7Ci0KLQluZXRkZXYtPm9wZW4gPSBuZXNfbmV0ZGV2X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gbmVzX25ldGRldl9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gbmVzX25ldGRldl9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gbmVzX25ldGRldl9nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gbmVzX25ldGRldl90eF90aW1lb3V0OwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBuZXNfbmV0ZGV2X2NoYW5nZV9tdHU7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IE5FU19UWF9USU1FT1VUOwogCW5ldGRldi0+aXJxID0gbmVzZGV2LT5wY2lkZXYtPmlycTsKIAluZXRkZXYtPm10dSA9IEVUSF9EQVRBX0xFTjsKQEAgLTE2MTEsNiArMTU5Nyw3IEBACiAJbmV0ZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwogCW5ldGRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9ISUdIRE1BOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZuZXNfbmV0ZGV2X29wczsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJm5lc19ldGh0b29sX29wczsKIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZuZXN2bmljLT5uYXBpLCBuZXNfbmV0ZGV2X3BvbGwsIDEyOCk7CiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIkVuYWJsaW5nIFZMQU4gSW5zZXJ0L0RlbGV0ZS5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCmluZGV4IGU2NDMwNmIuLmNjOTBjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwppbmRleCA2ZjNiYzFiLi5hMjgyMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCmluZGV4IDRmZGI3MjQ1Li43ZTViNWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTU1MSw2ICs1NTEsNyBAQAogCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7CiAJc3RydWN0IG5lc19hZGFwdGVyICpuZXNhZGFwdGVyID0gbmVzZGV2LT5uZXNhZGFwdGVyOwogCWludCBpID0gMDsKKwlpbnQgcmM7CiAKIAkvKiBmcmVlIHRoZSByZXNvdXJjZXMgKi8KIAlpZiAobmVzZm1yLT5sZWFmX3BibF9jbnQgPT0gMCkgewpAQCAtNTcyLDcgKzU3Myw5IEBACiAJbmVzbXItPmlibXcucmtleSA9IGliZm1yLT5ya2V5OwogCW5lc21yLT5pYm13LnVvYmplY3QgPSBOVUxMOwogCi0JaWYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkICE9IDApIHsKKwlyYyA9IG5lc19kZWFsbG9jX213KCZuZXNtci0+aWJtdyk7CisKKwlpZiAoKHJjID09IDApICYmIChuZXNmbXItPm5lc21yLnBibHNfdXNlZCAhPSAwKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAkJaWYgKG5lc2Ztci0+bmVzbXIucGJsXzRrKSB7CiAJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IG5lc2Ztci0+bmVzbXIucGJsc191c2VkOwpAQCAtNTg0LDcgKzU4Nyw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIG5lc19kZWFsbG9jX213KCZuZXNtci0+aWJtdyk7CisJcmV0dXJuIHJjOwogfQogCiAKQEAgLTEzNjAsOCArMTM2MywxMCBAQAogCQkJCQlORVNfUVBDT05URVhUX01JU0NfUlFfU0laRV9TSElGVCk7CiAJCQluZXNxcC0+bmVzcXBfY29udGV4dC0+bWlzYyB8PSBjcHVfdG9fbGUzMigodTMyKW5lc3FwLT5od3FwLnNxX2VuY29kZWRfc2l6ZSA8PAogCQkJCQlORVNfUVBDT05URVhUX01JU0NfU1FfU0laRV9TSElGVCk7CisJCQlpZiAoIXVkYXRhKSB7CiAJCQkJbmVzcXAtPm5lc3FwX2NvbnRleHQtPm1pc2MgfD0gY3B1X3RvX2xlMzIoTkVTX1FQQ09OVEVYVF9NSVNDX1BSSVZfRU4pOwogCQkJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5taXNjIHw9IGNwdV90b19sZTMyKE5FU19RUENPTlRFWFRfTUlTQ19GQVNUX1JFR0lTVEVSX0VOKTsKKwkJCX0KIAkJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5jcXMgPSBjcHVfdG9fbGUzMihuZXNxcC0+bmVzc2NxLT5od19jcS5jcV9udW1iZXIgKwogCQkJCQkoKHUzMiluZXNxcC0+bmVzcmNxLT5od19jcS5jcV9udW1iZXIgPDwgMTYpKTsKIAkJCXU2NHRlbXAgPSAodTY0KW5lc3FwLT5od3FwLnNxX3BiYXNlOwpAQCAtMTg4NCwyMSArMTg4OSw3NSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogcm9vdF8yNTYKKyAqLworc3RhdGljIHUzMiByb290XzI1NihzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LAorCQkgICAgc3RydWN0IG5lc19yb290X3ZwYmwgKnJvb3RfdnBibCwKKwkJICAgIHN0cnVjdCBuZXNfcm9vdF92cGJsICpuZXdfcm9vdCwKKwkJICAgIHUxNiBwYmxfY291bnRfNGssCisJCSAgICB1MTYgcGJsX2NvdW50XzI1NikKK3sKKwl1NjQgbGVhZl9wYmw7CisJaW50IGksIGosIGs7CisKKwlpZiAocGJsX2NvdW50XzRrID09IDEpIHsKKwkJbmV3X3Jvb3QtPnBibF92YmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LAorCQkJCQkJNTEyLCAmbmV3X3Jvb3QtPnBibF9wYmFzZSk7CisKKwkJaWYgKG5ld19yb290LT5wYmxfdmJhc2UgPT0gTlVMTCkKKwkJCXJldHVybiAwOworCisJCWxlYWZfcGJsID0gKHU2NClyb290X3ZwYmwtPnBibF9wYmFzZTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCW5ld19yb290LT5wYmxfdmJhc2VbaV0ucGFfbG93ID0KKwkJCQljcHVfdG9fbGUzMigodTMyKWxlYWZfcGJsKTsKKwkJCW5ld19yb290LT5wYmxfdmJhc2VbaV0ucGFfaGlnaCA9CisJCQkJY3B1X3RvX2xlMzIoKHUzMikoKCgodTY0KWxlYWZfcGJsKSA+PiAzMikpKTsKKwkJCWxlYWZfcGJsICs9IDI1NjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCQlqID0gaSAqIDE2OworCQkJcm9vdF92cGJsLT5wYmxfdmJhc2Vbal0gPSByb290X3ZwYmwtPnBibF92YmFzZVtpXTsKKwkJCWxlYWZfcGJsID0gbGUzMl90b19jcHUocm9vdF92cGJsLT5wYmxfdmJhc2Vbal0ucGFfbG93KSArCisJCQkgICAgKCgodTY0KWxlMzJfdG9fY3B1KHJvb3RfdnBibC0+cGJsX3ZiYXNlW2pdLnBhX2hpZ2gpKQorCQkJCTw8IDMyKTsKKwkJCWZvciAoayA9IDE7IGsgPCAxNjsgaysrKSB7CisJCQkJbGVhZl9wYmwgKz0gMjU2OworCQkJCXJvb3RfdnBibC0+cGJsX3ZiYXNlW2ogKyBrXS5wYV9sb3cgPQorCQkJCQkJY3B1X3RvX2xlMzIoKHUzMilsZWFmX3BibCk7CisJCQkJcm9vdF92cGJsLT5wYmxfdmJhc2VbaiArIGtdLnBhX2hpZ2ggPQorCQkJCSAgICBjcHVfdG9fbGUzMigodTMyKSgoKCh1NjQpbGVhZl9wYmwpID4+IDMyKSkpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKIAogLyoqCiAgKiBuZXNfcmVnX21yCiAgKi8KIHN0YXRpYyBpbnQgbmVzX3JlZ19tcihzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCBzdHJ1Y3QgbmVzX3BkICpuZXNwZCwKIAkJdTMyIHN0YWcsIHU2NCByZWdpb25fbGVuZ3RoLCBzdHJ1Y3QgbmVzX3Jvb3RfdnBibCAqcm9vdF92cGJsLAotCQlkbWFfYWRkcl90IHNpbmdsZV9idWZmZXIsIHUxNiBwYmxfY291bnQsIHUxNiByZXNpZHVhbF9wYWdlX2NvdW50LAotCQlpbnQgYWNjLCB1NjQgKmlvdmFfc3RhcnQpCisJCWRtYV9hZGRyX3Qgc2luZ2xlX2J1ZmZlciwgdTE2IHBibF9jb3VudF80aywKKwkJdTE2IHJlc2lkdWFsX3BhZ2VfY291bnRfNGssIGludCBhY2MsIHU2NCAqaW92YV9zdGFydCwKKwkJdTE2ICphY3R1YWxfcGJsX2NudCwgdTggKnVzZWRfNGtfcGJscykKIHsKIAlzdHJ1Y3QgbmVzX2h3X2NxcF93cWUgKmNxcF93cWU7CiAJc3RydWN0IG5lc19jcXBfcmVxdWVzdCAqY3FwX3JlcXVlc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKLQkvKiBpbnQgY291bnQ7ICovCisJdWludCBwZ19jbnQgPSAwOworCXUxNiBwYmxfY291bnRfMjU2OworCXUxNiBwYmxfY291bnQgPSAwOworCXU4ICB1c2VfMjU2X3BibHMgPSAwOworCXU4ICB1c2VfNGtfcGJscyA9IDA7CisJdTE2IHVzZV90d29fbGV2ZWwgPSAocGJsX2NvdW50XzRrID4gMSkgPyAxIDogMDsKKwlzdHJ1Y3QgbmVzX3Jvb3RfdnBibCBuZXdfcm9vdCA9IHswLCAwLCAwfTsKIAl1MzIgb3Bjb2RlID0gMDsKIAl1MTYgbWFqb3JfY29kZTsKIApAQCAtMTkxMSw0MSArMTk3MCw3MCBAQAogCWNxcF9yZXF1ZXN0LT53YWl0aW5nID0gMTsKIAljcXBfd3FlID0gJmNxcF9yZXF1ZXN0LT5jcXBfd3FlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JLyogdHJhY2sgUEJMIHJlc291cmNlcyAqLwotCWlmIChwYmxfY291bnQgIT0gMCkgewotCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJLyogVHdvIGxldmVsIFBCTCAqLwotCQkJaWYgKChwYmxfY291bnQrMSkgPiBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgNEtCIFBibHMgZm9yIHR3byBsZXZlbCByZXF1ZXN0LlxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQrMTsKLQkJCX0KLQkJfSBlbHNlIGlmIChyZXNpZHVhbF9wYWdlX2NvdW50ID4gMzIpIHsKLQkJCWlmIChwYmxfY291bnQgPiBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgNEtCIFBibHMuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudDsKKwlpZiAocGJsX2NvdW50XzRrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCisJCXBnX2NudCA9ICgocGJsX2NvdW50XzRrIC0gMSkgKiA1MTIpICsgcmVzaWR1YWxfcGFnZV9jb3VudF80azsKKwkJcGJsX2NvdW50XzI1NiA9IChwZ19jbnQgKyAzMSkgLyAzMjsKKwkJaWYgKHBnX2NudCA8PSAzMikgeworCQkJaWYgKHBibF9jb3VudF8yNTYgPD0gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpCisJCQkJdXNlXzI1Nl9wYmxzID0gMTsKKwkJCWVsc2UgaWYgKHBibF9jb3VudF80ayA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKQorCQkJCXVzZV80a19wYmxzID0gMTsKKwkJfSBlbHNlIGlmIChwZ19jbnQgPD0gMjA0OCkgeworCQkJaWYgKCgocGJsX2NvdW50XzRrICsgdXNlX3R3b19sZXZlbCkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgJiYKKwkJCSAgICAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IChuZXNhZGFwdGVyLT5tYXhfNGtwYmwgPj4gMSkpKSB7CisJCQkJdXNlXzRrX3BibHMgPSAxOworCQkJfSBlbHNlIGlmICgocGJsX2NvdW50XzI1NiArIDEpIDw9IG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsKSB7CisJCQkJdXNlXzI1Nl9wYmxzID0gMTsKKwkJCQl1c2VfdHdvX2xldmVsID0gMTsKKwkJCX0gZWxzZSBpZiAoKHBibF9jb3VudF80ayArIHVzZV90d29fbGV2ZWwpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKKwkJCQl1c2VfNGtfcGJscyA9IDE7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGJsX2NvdW50ID4gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiAyNTZCIFBibHMuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCAtPSBwYmxfY291bnQ7Ci0JCQl9CisJCQlpZiAoKHBibF9jb3VudF80ayArIDEpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpCisJCQkJdXNlXzRrX3BibHMgPSAxOwogCQl9CisKKwkJaWYgKHVzZV8yNTZfcGJscykgeworCQkJcGJsX2NvdW50ID0gcGJsX2NvdW50XzI1NjsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCX0gZWxzZSBpZiAodXNlXzRrX3BibHMpIHsKKwkJCXBibF9jb3VudCA9ICBwYmxfY291bnRfNGs7CisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgUGJsc1xuIik7CisJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCWlmICh1c2VfMjU2X3BibHMgJiYgdXNlX3R3b19sZXZlbCkgeworCQlpZiAocm9vdF8yNTYobmVzZGV2LCByb290X3ZwYmwsICZuZXdfcm9vdCwgcGJsX2NvdW50XzRrLCBwYmxfY291bnRfMjU2KSA9PSAxKSB7CisJCQlpZiAobmV3X3Jvb3QucGJsX3BiYXNlICE9IDApCisJCQkJcm9vdF92cGJsID0gJm5ld19yb290OworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBwYmxfY291bnRfMjU2ICsgdXNlX3R3b19sZXZlbDsKKwkJCXVzZV8yNTZfcGJscyA9IDA7CisKKwkJCWlmIChwYmxfY291bnRfNGsgPT0gMSkKKwkJCQl1c2VfdHdvX2xldmVsID0gMDsKKwkJCXBibF9jb3VudCA9IHBibF9jb3VudF80azsKKworCQkJaWYgKChwYmxfY291bnRfNGsgKyB1c2VfdHdvX2xldmVsKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7CisJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQkJCXVzZV80a19wYmxzID0gMTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisKKwkJCWlmICh1c2VfNGtfcGJscyA9PSAwKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQogCiAJb3Bjb2RlID0gTkVTX0NRUF9SRUdJU1RFUl9TVEFHIHwgTkVTX0NRUF9TVEFHX1JJR0hUU19MT0NBTF9SRUFEIHwKIAkJCQkJTkVTX0NRUF9TVEFHX1ZBX1RPIHwgTkVTX0NRUF9TVEFHX01SOwpAQCAtMTk3NCwxMCArMjA2Miw5IEBACiAJfSBlbHNlIHsKIAkJc2V0X3dxZV82NGJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEFfTE9XX0lEWCwgcm9vdF92cGJsLT5wYmxfcGJhc2UpOwogCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfQkxLX0NPVU5UX0lEWCwgcGJsX2NvdW50KTsKLQkJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0xFTl9JRFgsCi0JCQkJKCgocGJsX2NvdW50IC0gMSkgKiA0MDk2KSArIChyZXNpZHVhbF9wYWdlX2NvdW50KjgpKSk7CisJCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BCTF9MRU5fSURYLCAocGdfY250ICogOCkpOwogCi0JCWlmICgocGJsX2NvdW50ID4gMSkgfHwgKHJlc2lkdWFsX3BhZ2VfY291bnQgPiAzMikpCisJCWlmICh1c2VfNGtfcGJscykKIAkJCWNxcF93cWUtPndxZV93b3Jkc1tORVNfQ1FQX1dRRV9PUENPREVfSURYXSB8PSBjcHVfdG9fbGUzMihORVNfQ1FQX1NUQUdfUEJMX0JMS19TSVpFKTsKIAl9CiAJYmFycmllcigpOwpAQCAtMTk5NCwxMyArMjA4MSwyNSBAQAogCW1ham9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZTsKIAluZXNfcHV0X2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwogCisJaWYgKCghcmV0IHx8IG1ham9yX2NvZGUpICYmIHBibF9jb3VudCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQlpZiAodXNlXzI1Nl9wYmxzKQorCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJZWxzZSBpZiAodXNlXzRrX3BibHMpCisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJfQorCWlmIChuZXdfcm9vdC5wYmxfcGJhc2UpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsIDUxMiwgbmV3X3Jvb3QucGJsX3ZiYXNlLAorCQkJCSAgICBuZXdfcm9vdC5wYmxfcGJhc2UpOworCiAJaWYgKCFyZXQpCiAJCXJldHVybiAtRVRJTUU7CiAJZWxzZSBpZiAobWFqb3JfY29kZSkKIAkJcmV0dXJuIC1FSU87Ci0JZWxzZQotCQlyZXR1cm4gMDsKIAorCSphY3R1YWxfcGJsX2NudCA9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJKnVzZWRfNGtfcGJscyA9IHVzZV80a19wYmxzOwogCXJldHVybiAwOwogfQogCkBAIC0yMTY1LDE4ICsyMjY0LDE0IEBACiAJCXBibF9jb3VudCA9IHJvb3RfcGJsX2luZGV4OwogCX0KIAlyZXQgPSBuZXNfcmVnX21yKG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbl9sZW5ndGgsICZyb290X3ZwYmwsCi0JCQlidWZmZXJfbGlzdFswXS5hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCBpb3ZhX3N0YXJ0KTsKKwkJCWJ1ZmZlcl9saXN0WzBdLmFkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsIGlvdmFfc3RhcnQsCisJCQkmbmVzbXItPnBibHNfdXNlZCwgJm5lc21yLT5wYmxfNGspOwogCiAJaWYgKHJldCA9PSAwKSB7CiAJCW5lc21yLT5pYm1yLnJrZXkgPSBzdGFnOwogCQluZXNtci0+aWJtci5sa2V5ID0gc3RhZzsKIAkJbmVzbXItPm1vZGUgPSBJV05FU19NRU1SRUdfVFlQRV9NRU07CiAJCWlibXIgPSAmbmVzbXItPmlibXI7Ci0JCW5lc21yLT5wYmxfNGsgPSAoKHBibF9jb3VudCA+IDEpIHx8IChjdXJfcGJsX2luZGV4ID4gMzIpKSA/IDEgOiAwOwotCQluZXNtci0+cGJsc191c2VkID0gcGJsX2NvdW50OwotCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJbmVzbXItPnBibHNfdXNlZCsrOwotCQl9CiAJfSBlbHNlIHsKIAkJa2ZyZWUobmVzbXIpOwogCQlpYm1yID0gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTI0NTQsOCArMjU0OSw5IEBACiAJCQkJCXN0YWcsICh1bnNpZ25lZCBpbnQpaW92YV9zdGFydCwKIAkJCQkJKHVuc2lnbmVkIGludClyZWdpb25fbGVuZ3RoLCBzdGFnX2luZGV4LAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi0+bGVuZ3RoLCBwYmxfY291bnQpOwotCQkJcmV0ID0gbmVzX3JlZ19tciggbmVzZGV2LCBuZXNwZCwgc3RhZywgcmVnaW9uLT5sZW5ndGgsICZyb290X3ZwYmwsCi0JCQkJCWZpcnN0X2RtYV9hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCAmaW92YV9zdGFydCk7CisJCQlyZXQgPSBuZXNfcmVnX21yKG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbi0+bGVuZ3RoLCAmcm9vdF92cGJsLAorCQkJCQkgZmlyc3RfZG1hX2FkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsCisJCQkJCSAmaW92YV9zdGFydCwgJm5lc21yLT5wYmxzX3VzZWQsICZuZXNtci0+cGJsXzRrKTsKIAogCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJyZXQ9JWRcbiIsIHJldCk7CiAKQEAgLTI0NjQsMTEgKzI1NjAsNiBAQAogCQkJCW5lc21yLT5pYm1yLmxrZXkgPSBzdGFnOwogCQkJCW5lc21yLT5tb2RlID0gSVdORVNfTUVNUkVHX1RZUEVfTUVNOwogCQkJCWlibXIgPSAmbmVzbXItPmlibXI7Ci0JCQkJbmVzbXItPnBibF80ayA9ICgocGJsX2NvdW50ID4gMSkgfHwgKGN1cl9wYmxfaW5kZXggPiAzMikpID8gMSA6IDA7Ci0JCQkJbmVzbXItPnBibHNfdXNlZCA9IHBibF9jb3VudDsKLQkJCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJCQluZXNtci0+cGJsc191c2VkKys7Ci0JCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlpYl91bWVtX3JlbGVhc2UocmVnaW9uKTsKIAkJCQlrZnJlZShuZXNtcik7CkBAIC0yNjA3LDI0ICsyNjk4LDYgQEAKIAljcXBfcmVxdWVzdC0+d2FpdGluZyA9IDE7CiAJY3FwX3dxZSA9ICZjcXBfcmVxdWVzdC0+Y3FwX3dxZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCWlmIChuZXNtci0+cGJsc191c2VkICE9IDApIHsKLQkJaWYgKG5lc21yLT5wYmxfNGspIHsKLQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKLQkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gbmVzYWRhcHRlci0+bWF4XzRrcGJsKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSA0S0IgUEJMcygldSkgaGFzIGV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAotCQkJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCwgbmVzYWRhcHRlci0+bWF4XzRrcGJsKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7Ci0JCQlpZiAobmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgPiBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSAyNTZCIFBCTHMoJXUpIGhhcyBleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKLQkJCQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsLCBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKTsKLQkJCX0KLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJbmVzX2ZpbGxfaW5pdF9jcXBfd3FlKGNxcF93cWUsIG5lc2Rldik7CiAJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfV1FFX09QQ09ERV9JRFgsCiAJCQlORVNfQ1FQX0RFQUxMT0NBVEVfU1RBRyB8IE5FU19DUVBfU1RBR19WQV9UTyB8CkBAIC0yNjQyLDExICsyNzE1LDYgQEAKIAkJCSIgQ1FQIE1ham9yOk1pbm9yIGNvZGVzID0gMHglMDRYOjB4JTA0WFxuIiwKIAkJCWliX21yLT5ya2V5LCByZXQsIGNxcF9yZXF1ZXN0LT5tYWpvcl9jb2RlLCBjcXBfcmVxdWVzdC0+bWlub3JfY29kZSk7CiAKLQluZXNfZnJlZV9yZXNvdXJjZShuZXNhZGFwdGVyLCBuZXNhZGFwdGVyLT5hbGxvY2F0ZWRfbXJzLAotCQkJKGliX21yLT5ya2V5ICYgMHgwZmZmZmYwMCkgPj4gOCk7Ci0KLQlrZnJlZShuZXNtcik7Ci0KIAltYWpvcl9jb2RlID0gY3FwX3JlcXVlc3QtPm1ham9yX2NvZGU7CiAJbWlub3JfY29kZSA9IGNxcF9yZXF1ZXN0LT5taW5vcl9jb2RlOwogCkBAIC0yNjYyLDggKzI3MzAsMzMgQEAKIAkJCQkiIHRvIGRlc3Ryb3kgU1RhZywgaWJfbXI9JXAsIHJrZXkgPSAweCUwOFhcbiIsCiAJCQkJbWFqb3JfY29kZSwgbWlub3JfY29kZSwgaWJfbXIsIGliX21yLT5ya2V5KTsKIAkJcmV0dXJuIC1FSU87Ci0JfSBlbHNlCi0JCXJldHVybiAwOworCX0KKworCWlmIChuZXNtci0+cGJsc191c2VkICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCWlmIChuZXNtci0+cGJsXzRrKSB7CisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7CisJCQlpZiAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IG5lc2FkYXB0ZXItPm1heF80a3BibCkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDRLQiBQQkxzKCV1KSBoYXMgIgorCQkJCQkiZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCisJCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwsCisJCQkJCW5lc2FkYXB0ZXItPm1heF80a3BibCk7CisJCX0gZWxzZSB7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBuZXNtci0+cGJsc191c2VkOworCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsID4gbmVzYWRhcHRlci0+bWF4XzI1NnBibCkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDI1NkIgUEJMcygldSkgaGFzICIKKwkJCQkJImV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAorCQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCwKKwkJCQkJbmVzYWRhcHRlci0+bWF4XzI1NnBibCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwl9CisJbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycywKKwkJCShpYl9tci0+cmtleSAmIDB4MGZmZmZmMDApID4+IDgpOworCisJa2ZyZWUobmVzbXIpOworCisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKaW5kZXggNmM2YjRkYS4uNWU0OGY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMTM0LDYgKzEzNCw3IEBACiAJc3RydWN0IGlldGZfbXBhX2ZyYW1lICppZXRmX2ZyYW1lOwogCWRtYV9hZGRyX3QgICAgICAgICAgICBpZXRmX2ZyYW1lX3BiYXNlOwogCXdhaXRfcXVldWVfaGVhZF90ICAgICBzdGF0ZV93YWl0cTsKKwlzdHJ1Y3QgaWJfbXIgICAgICAgICAgKmxzbW1fbXI7CiAJdW5zaWduZWQgbG9uZyAgICAgICAgIHNvY2tldDsKIAlzdHJ1Y3QgbmVzX2h3X3FwICAgICAgaHdxcDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgd29yazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggMGJkMmE0Zi4uNDIxYTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTY2MCw4ICs2NjAsMTIgQEAKIAogCXBhdGggPSBfX3BhdGhfZmluZChkZXYsIHBoZHItPmh3YWRkciArIDQpOwogCWlmICghcGF0aCB8fCAhcGF0aC0+dmFsaWQpIHsKLQkJaWYgKCFwYXRoKQorCQlpbnQgbmV3X3BhdGggPSAwOworCisJCWlmICghcGF0aCkgewogCQkJcGF0aCA9IHBhdGhfcmVjX2NyZWF0ZShkZXYsIHBoZHItPmh3YWRkciArIDQpOworCQkJbmV3X3BhdGggPSAxOworCQl9CiAJCWlmIChwYXRoKSB7CiAJCQkvKiBwdXQgcHNldWRvaGVhZGVyIGJhY2sgb24gZm9yIG5leHQgdGltZSAqLwogCQkJc2tiX3B1c2goc2tiLCBzaXplb2YgKnBoZHIpOwpAQCAtNjY5LDcgKzY3Myw4IEBACiAKIAkJCWlmICghcGF0aC0+cXVlcnkgJiYgcGF0aF9yZWNfc3RhcnQoZGV2LCBwYXRoKSkgewogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCQlwYXRoX2ZyZWUoZGV2LCBwYXRoKTsKKwkJCQlpZiAobmV3X3BhdGgpCisJCQkJCXBhdGhfZnJlZShkZXYsIHBhdGgpOwogCQkJCXJldHVybjsKIAkJCX0gZWxzZQogCQkJCV9fcGF0aF9hZGQoZGV2LCBwYXRoKTsKQEAgLTEwMTYsMTggKzEwMjEsMjIgQEAKIAlwcml2LT5scm8ubHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQkgPSBpcG9pYl9vcGVuLAorCS5uZG9fc3RvcAkJID0gaXBvaWJfc3RvcCwKKwkubmRvX2NoYW5nZV9tdHUJCSA9IGlwb2liX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CSAJID0gaXBvaWJfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCSA9IGlwb2liX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3QsCisJLm5kb19uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXYsCit9OworCiBzdGF0aWMgdm9pZCBpcG9pYl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXYtPm9wZW4JCSA9IGlwb2liX29wZW47Ci0JZGV2LT5zdG9wCQkgPSBpcG9pYl9zdG9wOwotCWRldi0+Y2hhbmdlX210dQkJID0gaXBvaWJfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAkgPSBpcG9pYl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dAkJID0gaXBvaWJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCSA9ICZpcG9pYl9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJID0gJmlwb2liX2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3Q7Ci0JZGV2LT5uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXY7CiAKIAlpcG9pYl9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKaW5kZXggMzE5YjE4OC4uZWE5ZTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCkBAIC00MDEsMTMgKzQwMSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsdXJlOwogCi0JaXNlcl9kYmcoInBhdGgubXR1IGlzICVkIHNldHRpbmcgaXQgdG8gJWRcbiIsCi0JCSBjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUsIElCX01UVV8xMDI0KTsKLQotCS8qIHdlIG11c3Qgc2V0IHRoZSBNVFUgdG8gMTAyNCBhcyB0aGlzIGlzIHdoYXQgdGhlIHRhcmdldCBpcyBhc3N1bWluZyAqLwotCWlmIChjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUgPiBJQl9NVFVfMTAyNCkKLQkJY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1ID0gSUJfTVRVXzEwMjQ7Ci0KIAltZW1zZXQoJmNvbm5fcGFyYW0sIDAsIHNpemVvZiBjb25uX3BhcmFtKTsKIAljb25uX3BhcmFtLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSA0OwogCWNvbm5fcGFyYW0uaW5pdGlhdG9yX2RlcHRoICAgICA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggZWQ4YmFhMC4uN2E3YTAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtOTQsMTEgKzk0LDggQEAKIHN0YXRpYyBpbnQgZXZkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIGludCBldmRldl9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDZmMjM2NjIuLjQyMjRmMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMTU5LDEyICsxNTksOSBAQAogCiBzdGF0aWMgaW50IGpveWRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCWludCByZXR2YWw7CiAJc3RydWN0IGpveWRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHZvaWQgam95ZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMKaW5kZXggZTUwMDQ3Yi4uNzdjZmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jCkBAIC0zLDcgKzMsNyBAQAogICoJQmFzZWQgb24gZHJpdmVycy91c2IvaWZvcmNlLmMKICAqCiAgKglDb3B5cmlnaHQgWWFlZ2FzaGkgVGFrZXNoaSwgMjAwMQotICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOAorICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOCAtIDIwMDkKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOSw3ICsyOSw3IEBACiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19wYWQgKnBhZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwYWQtPmRldjsKLQl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1Zi0+YnVmOwogCiAJYnV0dG9ucyA9IH5sZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShyZXMgKyA4KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCBjM2M4YjliLi40NTQ3MGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC04MzksNyArODM5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgYXRrYmRfZGVsbF9sYXB0b3Bfa2V5bWFwX2ZpeHVwKHN0cnVjdCBhdGtiZCAqYXRrYmQpCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IGZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKIAkJMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4ZiwgMHg5MywKIAl9OwogCWludCBpOwpAQCAtODU2LDcgKzg1Niw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGF0a2JkX2hwX2tleW1hcF9maXh1cChzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewotCWNvbnN0IHVuc2lnbmVkIGludCBmb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CiAJCTB4OTQsCiAJfTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYmY1NHgta2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKaW5kZXggMTkyODQwMS4uZWU4NTVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKQEAgLTIwOSw4ICsyMDksOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIXBkYXRhLT5kZWJvdW5jZV90aW1lIHx8ICFwZGF0YS0+ZGVib3VuY2VfdGltZSA+IE1BWF9NVUxUIHx8Ci0JICAgICFwZGF0YS0+Y29sZHJpdmVfdGltZSB8fCAhcGRhdGEtPmNvbGRyaXZlX3RpbWUgPiBNQVhfTVVMVCkgeworCWlmICghcGRhdGEtPmRlYm91bmNlX3RpbWUgfHwgcGRhdGEtPmRlYm91bmNlX3RpbWUgPiBNQVhfTVVMVCB8fAorCSAgICAhcGRhdGEtPmNvbGRyaXZlX3RpbWUgfHwgcGRhdGEtPmNvbGRyaXZlX3RpbWUgPiBNQVhfTVVMVCkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKIAkJCSI6IEludmFsaWQgRGVib3VuY2UvQ29sdW1kcml2ZSBUaW1lIGZyb20gcGRhdGFcbiIpOwogCQliZmluX3dyaXRlX0tQQURfTVNFTCgweEZGMCk7CS8qIERlZmF1bHQgTVNFTAkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCmluZGV4IGM4ZWQwNjUuLmFiYjA0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogI2RlZmluZSBjb3JnaWtiZF9yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBjb3JnaWtiZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgY29yZ2lrYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKQEAgLTM2OCw3ICszNjgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lrYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBjb3JnaWtiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CkBAIC0zODgsNyArMzg4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZ2lrYmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaWtiZF9wcm9iZSwKLQkucmVtb3ZlCQk9IGNvcmdpa2JkX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGNvcmdpa2JkX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBjb3JnaWtiZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gY29yZ2lrYmRfcmVzdW1lLAogCS5kcml2ZXIJCT0gewpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGNvcmdpa2JkX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNvcmdpa2JkX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXBsZV9rZXliLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwppbmRleCAyMmYxN2E1Li41YWEyMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBTRUdBIERyZWFtY2FzdCBrZXlib2FyZCBkcml2ZXIKICAqIEJhc2VkIG9uIGRyaXZlcnMvdXNiL3VzYmtiZC5jCi0gKiBDb3B5cmlnaHQgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQotICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IEFkcmlhbiBNY01lbmFtaW4sIDIwMDcsIDIwMDgKKyAqIENvcHlyaWdodCAoYykgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQorICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IChjKSBBZHJpYW4gTWNNZW5hbWluLCAyMDA3IC0gMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIE5SX1NDQU5DT0RFUyAyNTYKIAotTU9EVUxFX0FVVEhPUigiWUFFR0FTSEkgVGFrZXNoaSwgQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiA8YWRyaWFuQG1jbWVuLmRlbW9uLmNvLnVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNFR0EgRHJlYW1jYXN0IGtleWJvYXJkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAwKTsKIAkJCX0gZWxzZQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJtYXBsZV9rZXliOiAiCisJCQkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5Y29kZSwgMSk7CiAJCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAibWFwbGVfa2V5YjogIgorCQkJCWRldl9kYmcoJmRldi0+ZGV2LAogCQkJCQkiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcHJlc3NlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTQwLDcgKzE0MCw3IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19rYmQgKmtiZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKLQl1bnNpZ25lZCBsb25nICpidWYgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKShtcS0+cmVjdmJ1Zi0+YnVmKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkIGFsd2F5cyBnZXQgdGhlIGxvY2sgYmVjYXVzZSB0aGUgb25seQpAQCAtMTU5LDIyICsxNTksMjcgQEAKIAogc3RhdGljIGludCBwcm9iZV9tYXBsZV9rYmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKLQlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnY7CiAJaW50IGksIGVycm9yOwogCXN0cnVjdCBkY19rYmQgKmtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCi0JaWYgKCEobWRldi0+ZnVuY3Rpb24gJiBNQVBMRV9GVU5DX0tFWUJPQVJEKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCW1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCiAJa2JkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRjX2tiZCksIEdGUF9LRVJORUwpOwotCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWtiZCB8fCAhaWRldikgeworCWlmICgha2JkKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KIAorCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlkZXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfaWRldl9hbGxvYzsKKwl9CisKIAlrYmQtPmRldiA9IGlkZXY7CiAJbWVtY3B5KGtiZC0+a2V5Y29kZSwgZGNfa2JkX2tleWNvZGUsIHNpemVvZihrYmQtPmtleWNvZGUpKTsKIApAQCAtMTk1LDcgKzIwMCw3IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpZGV2KTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX3JlZ2lzdGVyOwogCiAJLyogTWFwbGUgcG9sbGluZyBpcyBsb2NrZWQgdG8gVkJMQU5LIC0gd2hpY2ggbWF5IGJlIGp1c3QgNTAvcyAqLwogCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgZGNfa2JkX2NhbGxiYWNrLCBIWi81MCwKQEAgLTIwNywxMCArMjEyLDEyIEBACiAKIAlyZXR1cm4gZXJyb3I7CiAKLWZhaWw6Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7Ci0Ja2ZyZWUoa2JkKTsKK2ZhaWxfcmVnaXN0ZXI6CiAJbWFwbGVfc2V0X2RydmRhdGEobWRldiwgTlVMTCk7CisJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CitmYWlsX2lkZXZfYWxsb2M6CisJa2ZyZWUoa2JkKTsKK2ZhaWw6CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKaW5kZXggM2YzZDExOS4uMDU4ZmE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAjZGVmaW5lIG9tYXBfa3BfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2twX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwX2twX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9tYXBfa3AgKm9tYXBfa3A7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtNDIyLDcgKzQyMiw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9rcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXBfa3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9tYXBfa3AgKm9tYXBfa3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtNDU0LDcgKzQ1NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfa3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvbWFwX2twX3Byb2JlLAotCS5yZW1vdmUJCT0gb21hcF9rcF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvbWFwX2twX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBvbWFwX2twX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvbWFwX2twX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwX2twX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfa3BfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIk9NQVAgS2V5cGFkIERyaXZlclxuIik7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9rcF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCmluZGV4IDVjOGExYmMuLmUxNDgwZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKQEAgLTIxOSw2ICsyMTksOCBAQAogCQkgIHBkYXRhLT5zY2FuX3RpbWluZywgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOwogCWlvd3JpdGUxNigwLCBwcml2LT5pb21lbV9iYXNlICsgS1lPVVREUl9PRkZTKTsKIAlpb3dyaXRlMTYoS1lDUjJfSVJRX0xFVkVMLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUyk7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAJcmV0dXJuIDA7CiAgZXJyNToKIAlmcmVlX2lycShpcnEsIHBkZXYpOwpAQCAtMjUzLDE3ICsyNTUsMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9rZXlzY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHNoX2tleXNjX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKIAotI2RlZmluZSBzaF9rZXlzY19zdXNwZW5kIE5VTEwKLSNkZWZpbmUgc2hfa2V5c2NfcmVzdW1lIE5VTEwKKwl2YWx1ZSA9IGlvcmVhZDE2KHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQl2YWx1ZSB8PSAweDgwOworCWVsc2UKKwkJdmFsdWUgJj0gfjB4ODA7CisKKwlpb3dyaXRlMTYodmFsdWUsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX2tleXNjX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBzaF9rZXlzY19zdXNwZW5kLAorfTsKIAogc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9rZXlzY19kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzaF9rZXlzY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNoX2tleXNjX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBzaF9rZXlzY19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2hfa2V5c2NfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzaF9rZXlzYyIsCisJCS5wbQk9ICZzaF9rZXlzY19kZXZfcG1fb3BzLAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwppbmRleCBjNDhiNzZhLi45ZDE3ODFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCkBAIC0zNDMsNyArMzQzLDcgQEAKICNkZWZpbmUgc3BpdHprYmRfcmVzdW1lCQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgc3BpdHprYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc3BpdHprYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzcGl0emtiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc3BpdHprYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGl0emtiZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNwaXR6a2JkX3Byb2JlLAotCS5yZW1vdmUJCT0gc3BpdHprYmRfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3BpdHprYmRfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHNwaXR6a2JkX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzcGl0emtiZF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CkBAIC00NzksNyArNDc5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgc3BpdHprYmRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc3BpdHprYmRfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKaW5kZXggMDkzYzhjMS4uOTcwNWYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwpAQCAtNzAsNyArNzAsNyBAQAogY29uZmlnIE1PVVNFX1BTMl9MSUZFQk9PSwogCWJvb2wgIkZ1aml0c3UgTGlmZWJvb2sgUFMvMiBtb3VzZSBwcm90b2NvbCBleHRlbnNpb24iIGlmIEVNQkVEREVECiAJZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBNT1VTRV9QUzIKKwlkZXBlbmRzIG9uIE1PVVNFX1BTMiAmJiBYODYKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgRnVqaXRzdSBCLXNlcmllcyBMaWZlYm9vayBQUy8yCiAJICBUb3VjaFNjcmVlbiBjb25uZWN0ZWQgdG8geW91ciBzeXN0ZW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKaW5kZXggYjlhMjVkNS4uNmFiMGViMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogCSAgICBwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTExKSB8fAogCSAgICBwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTExKSB8fAogCSAgICBwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9HRVRJTkZPKSkgewotCQlwcl9lcnIoImVsYW50ZWNoLmM6IHNlbmRpbmcgRWxhbnRlY2ggbWFnaWMga25vY2sgZmFpbGVkLlxuIik7CisJCXByX2RlYnVnKCJlbGFudGVjaC5jOiBzZW5kaW5nIEVsYW50ZWNoIG1hZ2ljIGtub2NrIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC01NTEsOCArNTUxLDI3IEBACiAJICogc2V0IG9mIG1hZ2ljIG51bWJlcnMKIAkgKi8KIAlpZiAocGFyYW1bMF0gIT0gMHgzYyB8fCBwYXJhbVsxXSAhPSAweDAzIHx8IHBhcmFtWzJdICE9IDB4YzgpIHsKLQkJcHJfaW5mbygiZWxhbnRlY2guYzogdW5leHBlY3RlZCBtYWdpYyBrbm9jayByZXN1bHQgMHglMDJ4LCAweCUwMngsIDB4JTAyeC5cbiIsCi0JCQlwYXJhbVswXSwgcGFyYW1bMV0sIHBhcmFtWzJdKTsKKwkJcHJfZGVidWcoImVsYW50ZWNoLmM6ICIKKwkJCSAidW5leHBlY3RlZCBtYWdpYyBrbm9jayByZXN1bHQgMHglMDJ4LCAweCUwMngsIDB4JTAyeC5cbiIsCisJCQkgcGFyYW1bMF0sIHBhcmFtWzFdLCBwYXJhbVsyXSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFF1ZXJ5IHRvdWNocGFkJ3MgZmlybXdhcmUgdmVyc2lvbiBhbmQgc2VlIGlmIGl0IHJlcG9ydHMga25vd24KKwkgKiB2YWx1ZSB0byBhdm9pZCBtaXMtZGV0ZWN0aW9uLiBMb2dpdGVjaCBtaWNlIGFyZSBrbm93biB0byByZXNwb25kCisJICogdG8gRWxhbnRlY2ggbWFnaWMga25vY2sgYW5kIHRoZXJlIG1pZ2h0IGJlIG1vcmUuCisJICovCisJaWYgKHN5bmFwdGljc19zZW5kX2NtZChwc21vdXNlLCBFVFBfRldfVkVSU0lPTl9RVUVSWSwgcGFyYW0pKSB7CisJCXByX2RlYnVnKCJlbGFudGVjaC5jOiBmYWlsZWQgdG8gcXVlcnkgZmlybXdhcmUgdmVyc2lvbi5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJfZGVidWcoImVsYW50ZWNoLmM6IEVsYW50ZWNoIHZlcnNpb24gcXVlcnkgcmVzdWx0IDB4JTAyeCwgMHglMDJ4LCAweCUwMnguXG4iLAorCQkgcGFyYW1bMF0sIHBhcmFtWzFdLCBwYXJhbVsyXSk7CisKKwlpZiAocGFyYW1bMF0gPT0gMCB8fCBwYXJhbVsxXSAhPSAwKSB7CisJCXByX2RlYnVnKCJlbGFudGVjaC5jOiBQcm9iYWJseSBub3QgYSByZWFsIEVsYW50ZWNoIHRvdWNocGFkLiBBYm9ydGluZy5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC02MDAsOCArNjE5LDcgQEAKIAlpbnQgaSwgZXJyb3I7CiAJdW5zaWduZWQgY2hhciBwYXJhbVszXTsKIAotCWV0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlbGFudGVjaF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JcHNtb3VzZS0+cHJpdmF0ZSA9IGV0ZDsKKwlwc21vdXNlLT5wcml2YXRlID0gZXRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVsYW50ZWNoX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWV0ZCkKIAkJcmV0dXJuIC0xOwogCkBAIC02MTAsMTQgKzYyOCwxMiBAQAogCQlldGQtPnBhcml0eVtpXSA9IGV0ZC0+cGFyaXR5W2kgJiAoaSAtIDEpXSBeIDE7CiAKIAkvKgotCSAqIEZpbmQgb3V0IHdoYXQgdmVyc2lvbiBoYXJkd2FyZSB0aGlzIGlzCisJICogRG8gdGhlIHZlcnNpb24gcXVlcnkgYWdhaW4gc28gd2UgY2FuIHN0b3JlIHRoZSByZXN1bHQKIAkgKi8KIAlpZiAoc3luYXB0aWNzX3NlbmRfY21kKHBzbW91c2UsIEVUUF9GV19WRVJTSU9OX1FVRVJZLCBwYXJhbSkpIHsKIAkJcHJfZXJyKCJlbGFudGVjaC5jOiBmYWlsZWQgdG8gcXVlcnkgZmlybXdhcmUgdmVyc2lvbi5cbiIpOwogCQlnb3RvIGluaXRfZmFpbDsKIAl9Ci0JcHJfaW5mbygiZWxhbnRlY2guYzogRWxhbnRlY2ggdmVyc2lvbiBxdWVyeSByZXN1bHQgMHglMDJ4LCAweCUwMngsIDB4JTAyeC5cbiIsCi0JCXBhcmFtWzBdLCBwYXJhbVsxXSwgcGFyYW1bMl0pOwogCWV0ZC0+ZndfdmVyc2lvbl9tYWogPSBwYXJhbVswXTsKIAlldGQtPmZ3X3ZlcnNpb25fbWluID0gcGFyYW1bMl07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHhhOTMwX3Rya2JhbGwuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHhhOTMwX3Rya2JhbGwuYwppbmRleCBkMjk3YWNjLi4xZTgyN2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3B4YTkzMF90cmtiYWxsLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9weGE5MzBfdHJrYmFsbC5jCkBAIC04Myw3ICs4Myw3IEBACiAKIAlfX3Jhd193cml0ZWwodiwgdHJrYmFsbC0+bW1pb19iYXNlICsgVEJDUik7CiAKLQl3aGlsZSAoaS0tKSB7CisJd2hpbGUgKC0taSkgewogCQlpZiAoX19yYXdfcmVhZGwodHJrYmFsbC0+bW1pb19iYXNlICsgVEJDUikgPT0gdikKIAkJCWJyZWFrOwogCQltc2xlZXAoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCA4NjVmYzY5Li5mM2U0ZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTE4MiwxMSArMTgyLDYgQEAKIAogc3RhdGljIGludCBzeW5hcHRpY3NfcXVlcnlfaGFyZHdhcmUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCiB7Ci0JaW50IHJldHJpZXMgPSAwOwotCi0Jd2hpbGUgKChyZXRyaWVzKysgPCAzKSAmJiBwc21vdXNlX3Jlc2V0KHBzbW91c2UpKQotCQkvKiBlbXB0eSAqLzsKLQogCWlmIChzeW5hcHRpY3NfaWRlbnRpZnkocHNtb3VzZSkpCiAJCXJldHVybiAtMTsKIAlpZiAoc3luYXB0aWNzX21vZGVsX2lkKHBzbW91c2UpKQpAQCAtNTgyLDYgKzU3Nyw4IEBACiAJc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgb2xkX3ByaXYgPSAqcHJpdjsKIAorCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisKIAlpZiAoc3luYXB0aWNzX2RldGVjdChwc21vdXNlLCAwKSkKIAkJcmV0dXJuIC0xOwogCkBAIC02NDAsNiArNjM3LDggQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtMTsKIAorCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisKIAlpZiAoc3luYXB0aWNzX3F1ZXJ5X2hhcmR3YXJlKHBzbW91c2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHF1ZXJ5IFN5bmFwdGljcyBoYXJkd2FyZS5cbiIpOwogCQlnb3RvIGluaXRfZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCBlZjk5YTdlLi4xN2ZkNmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC00MDMsMTIgKzQwMyw5IEBACiAKIHN0YXRpYyBpbnQgbW91c2VkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBtb3VzZWRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHZvaWQgbW91c2VkZXZfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2FtYmFrbWkuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYW1iYWttaS5jCmluZGV4IGIxMGZmYWUuLmUyOWNkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vYW1iYWttaS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYW1iYWttaS5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJc3RydWN0IGFtYmFfa21pX3BvcnQgKmttaSA9IGlvLT5wb3J0X2RhdGE7CiAJdW5zaWduZWQgaW50IHRpbWVsZWZ0ID0gMTAwMDA7IC8qIHRpbWVvdXQgaW4gMTAwbXMgKi8KIAotCXdoaWxlICgocmVhZGIoS01JU1RBVCkgJiBLTUlTVEFUX1RYRU1QVFkpID09IDAgJiYgdGltZWxlZnQtLSkKKwl3aGlsZSAoKHJlYWRiKEtNSVNUQVQpICYgS01JU1RBVF9UWEVNUFRZKSA9PSAwICYmIC0tdGltZWxlZnQpCiAJCXVkZWxheSgxMCk7CiAKIAlpZiAodGltZWxlZnQpCkBAIC0xMjksOCArMTI5LDggQEAKIAlpby0+d3JpdGUJPSBhbWJhX2ttaV93cml0ZTsKIAlpby0+b3Blbgk9IGFtYmFfa21pX29wZW47CiAJaW8tPmNsb3NlCT0gYW1iYV9rbWlfY2xvc2U7Ci0Jc3RybGNweShpby0+bmFtZSwgZGV2LT5kZXYuYnVzX2lkLCBzaXplb2YoaW8tPm5hbWUpKTsKLQlzdHJsY3B5KGlvLT5waHlzLCBkZXYtPmRldi5idXNfaWQsIHNpemVvZihpby0+cGh5cykpOworCXN0cmxjcHkoaW8tPm5hbWUsIGRldl9uYW1lKCZkZXYtPmRldiksIHNpemVvZihpby0+bmFtZSkpOworCXN0cmxjcHkoaW8tPnBoeXMsIGRldl9uYW1lKCZkZXYtPmRldiksIHNpemVvZihpby0+cGh5cykpOwogCWlvLT5wb3J0X2RhdGEJPSBrbWk7CiAJaW8tPmRldi5wYXJlbnQJPSAmZGV2LT5kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vZ3NjcHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2dzY3BzMi5jCmluZGV4IGFkYzNiZDYuLmJkMGY5MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vZ3NjcHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9nc2NwczIuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAKIAlzbnByaW50ZihzZXJpby0+bmFtZSwgc2l6ZW9mKHNlcmlvLT5uYW1lKSwgIkdTQyBQUy8yICVzIiwKIAkJIChwczJwb3J0LT5pZCA9PSBHU0NfSURfS0VZQk9BUkQpID8gImtleWJvYXJkIiA6ICJtb3VzZSIpOwotCXN0cmxjcHkoc2VyaW8tPnBoeXMsIGRldi0+ZGV2LmJ1c19pZCwgc2l6ZW9mKHNlcmlvLT5waHlzKSk7CisJc3RybGNweShzZXJpby0+cGh5cywgZGV2X25hbWUoJmRldi0+ZGV2KSwgc2l6ZW9mKHNlcmlvLT5waHlzKSk7CiAJc2VyaW8tPmlkLnR5cGUJCT0gU0VSSU9fODA0MjsKIAlzZXJpby0+d3JpdGUJCT0gZ3NjcHMyX3dyaXRlOwogCXNlcmlvLT5vcGVuCQk9IGdzY3BzMl9vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zYTExMTFwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2ExMTExcHMyLmMKaW5kZXggMmFkODg3OC4uNTc5NTNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zYTExMTFwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NhMTExMXBzMi5jCkBAIC0yNDYsOCArMjQ2LDggQEAKIAlzZXJpby0+d3JpdGUJCT0gcHMyX3dyaXRlOwogCXNlcmlvLT5vcGVuCQk9IHBzMl9vcGVuOwogCXNlcmlvLT5jbG9zZQkJPSBwczJfY2xvc2U7Ci0Jc3RybGNweShzZXJpby0+bmFtZSwgZGV2LT5kZXYuYnVzX2lkLCBzaXplb2Yoc2VyaW8tPm5hbWUpKTsKLQlzdHJsY3B5KHNlcmlvLT5waHlzLCBkZXYtPmRldi5idXNfaWQsIHNpemVvZihzZXJpby0+cGh5cykpOworCXN0cmxjcHkoc2VyaW8tPm5hbWUsIGRldl9uYW1lKCZkZXYtPmRldiksIHNpemVvZihzZXJpby0+bmFtZSkpOworCXN0cmxjcHkoc2VyaW8tPnBoeXMsIGRldl9uYW1lKCZkZXYtPmRldiksIHNpemVvZihzZXJpby0+cGh5cykpOwogCXNlcmlvLT5wb3J0X2RhdGEJPSBwczJpZjsKIAlzZXJpby0+ZGV2LnBhcmVudAk9ICZkZXYtPmRldjsKIAlwczJpZi0+aW8JCT0gc2VyaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwppbmRleCAwNmJiZDBlLi5iMDMwMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKQEAgLTU4LDEwICs1OCw4IEBACiBzdGF0aWMgaW50IHNlcmlvX3Jhd19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzZXJpb19yYXdfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNlcmlvX3JhdyAqc2VyaW9fcmF3X2xvY2F0ZShpbnQgbWlub3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYwppbmRleCBhODlhNmE4Li4wNTU5NjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCXRzX2Rldi0+YnVmZmVyZWRtZWFzdXJlID0gMDsKIAogCXNucHJpbnRmKHRzX2Rldi0+cGh5cywgc2l6ZW9mKHRzX2Rldi0+cGh5cyksCi0JCSAiJXMvaW5wdXQwIiwgcGRldi0+ZGV2LmJ1c19pZCk7CisJCSAiJXMvaW5wdXQwIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOwogCiAJaW5wdXRfZGV2LT5uYW1lID0gImF0bWVsIHRvdWNoIHNjcmVlbiBjb250cm9sbGVyIjsKIAlpbnB1dF9kZXYtPnBoeXMgPSB0c19kZXYtPnBoeXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKaW5kZXggNjUyMDJjOS4uM2ZiNTFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAjZGVmaW5lIGNvcmdpdHNfcmVzdW1lCQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgY29yZ2l0c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgY29yZ2l0c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHM7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBjb3JnaXRzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgY29yZ2l0c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKQEAgLTM1MiwxMiArMzUyLDEzIEBACiAJY29yZ2lfdHMtPm1hY2hpbmZvLT5wdXRfaHN5bmMoKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShjb3JnaV90cy0+aW5wdXQpOwogCWtmcmVlKGNvcmdpX3RzKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb3JnaXRzX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gY29yZ2l0c19wcm9iZSwKLQkucmVtb3ZlCQk9IGNvcmdpdHNfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoY29yZ2l0c19yZW1vdmUpLAogCS5zdXNwZW5kCT0gY29yZ2l0c19zdXNwZW5kLAogCS5yZXN1bWUJCT0gY29yZ2l0c19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CkBAIC0zNjYsNyArMzY3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgY29yZ2l0c19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaXRzX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXRzX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCmluZGV4IGI3NWRjMjkuLjRhYjA3MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCkBAIC0yODksNyArMjg5LDggQEAKIAogCXBkYXRhLT5pbml0X3BsYXRmb3JtX2h3KCk7CiAKLQlzbnByaW50Zih0cy0+cGh5cywgc2l6ZW9mKHRzLT5waHlzKSwgIiVzL2lucHV0MCIsIGNsaWVudC0+ZGV2LmJ1c19pZCk7CisJc25wcmludGYodHMtPnBoeXMsIHNpemVvZih0cy0+cGh5cyksCisJCSAiJXMvaW5wdXQwIiwgZGV2X25hbWUoJmNsaWVudC0+ZGV2KSk7CiAKIAlpbnB1dF9kZXYtPm5hbWUgPSAiVFNDMjAwNyBUb3VjaHNjcmVlbiI7CiAJaW5wdXRfZGV2LT5waHlzID0gdHMtPnBoeXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKaW5kZXggNTA4MGIyNi4uZmI3Y2I5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYwpAQCAtNjAsNiArNjAsMTAgQEAKIG1vZHVsZV9wYXJhbShzd2FwX3h5LCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc3dhcF94eSwgIklmIHNldCBYIGFuZCBZIGF4ZXMgYXJlIHN3YXBwZWQuIik7CiAKK3N0YXRpYyBpbnQgaHdjYWxpYl94eTsKK21vZHVsZV9wYXJhbShod2NhbGliX3h5LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaHdjYWxpYl94eSwgIklmIHNldCBody1jYWxpYnJhdGVkIFgvWSBhcmUgdXNlZCBpZiBhdmFpbGFibGUiKTsKKwogLyogZGV2aWNlIHNwZWNpZmMgZGF0YS9mdW5jdGlvbnMgKi8KIHN0cnVjdCB1c2J0b3VjaF91c2I7CiBzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gewpAQCAtMTE4LDYgKzEyMiw3IEBACiAKICNkZWZpbmUgVVNCX0RFVklDRV9ISURfQ0xBU1ModmVuZCwgcHJvZCkgXAogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIFwKKwkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9QUk9UT0NPTCBcCiAJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIFwKIAkuaWRWZW5kb3IgPSAodmVuZCksIFwKIAkuaWRQcm9kdWN0ID0gKHByb2QpLCBcCkBAIC0yNjAsOCArMjY1LDEzIEBACiAKIHN0YXRpYyBpbnQgbXRvdWNoX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICpkZXYsIHVuc2lnbmVkIGNoYXIgKnBrdCkKIHsKLQlkZXYtPnggPSAocGt0WzhdIDw8IDgpIHwgcGt0WzddOwotCWRldi0+eSA9IChwa3RbMTBdIDw8IDgpIHwgcGt0WzldOworCWlmIChod2NhbGliX3h5KSB7CisJCWRldi0+eCA9IChwa3RbNF0gPDwgOCkgfCBwa3RbM107CisJCWRldi0+eSA9IDB4ZmZmZiAtICgocGt0WzZdIDw8IDgpIHwgcGt0WzVdKTsKKwl9IGVsc2UgeworCQlkZXYtPnggPSAocGt0WzhdIDw8IDgpIHwgcGt0WzddOworCQlkZXYtPnkgPSAocGt0WzEwXSA8PCA4KSB8IHBrdFs5XTsKKwl9CiAJZGV2LT50b3VjaCA9IChwa3RbMl0gJiAweDQwKSA/IDEgOiAwOwogCiAJcmV0dXJuIDE7CkBAIC0yOTQsNiArMzA0LDEyIEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIERlZmF1bHQgbWluL21heCB4eSBhcmUgdGhlIHJhdyB2YWx1ZXMsIG92ZXJyaWRlIGlmIHVzaW5nIGh3LWNhbGliICovCisJaWYgKGh3Y2FsaWJfeHkpIHsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXModXNidG91Y2gtPmlucHV0LCBBQlNfWCwgMCwgMHhmZmZmLCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXModXNidG91Y2gtPmlucHV0LCBBQlNfWSwgMCwgMHhmZmZmLCAwLCAwKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYyBiL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKaW5kZXggMWJkODk2MC4uZmVhNWI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYworKysgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCkBAIC0yNTcsOSArMjU3LDkgQEAKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkgICAgICAgImFjdDIwMDBfaXNhX3JlY2VpdmU6IEludmFsaWQgQ0FQSSBtc2dcbiIpOwogCQkJCQl7Ci0JCQkJCQlpbnQgaTsgX191OCAqcDsgX191OCAqYzsgX191OCB0bXBbMzBdOwotCQkJCQkJZm9yIChpID0gMCwgcCA9IChfX3U4ICopJmNhcmQtPmlkYXQuaXNhLnJjdmhkciwgYyA9IHRtcDsgaSA8IDg7IGkrKykKLQkJCQkJCQljICs9IHNwcmludGYoYywgIiUwMnggIiwgKihwKyspKTsKKwkJCQkJCWludCBpOyBfX3U4ICpwOyBfX3U4ICp0OyBfX3U4IHRtcFszMF07CisJCQkJCQlmb3IgKGkgPSAwLCBwID0gKF9fdTggKikmY2FyZC0+aWRhdC5pc2EucmN2aGRyLCB0ID0gdG1wOyBpIDwgODsgaSsrKQorCQkJCQkJCXQgKz0gc3ByaW50Zih0LCAiJTAyeCAiLCAqKHArKykpOwogCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWN0MjAwMF9pc2FfcmVjZWl2ZTogJXNcbiIsIHRtcCk7CiAJCQkJCX0KIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggMWI1YmY4Ny4uM2U0NjhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJbGlzdF9kZWwoJm1wLT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaW1pbm9yX2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JaWYgKG1wLT50dHlza2IpIGtmcmVlX3NrYihtcC0+dHR5c2tiKTsKKwlrZnJlZV9za2IobXAtPnR0eXNrYik7CiAJbXAtPnR0eXNrYiA9IE5VTEw7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+aW5xdWV1ZSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+b3V0cXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCmluZGV4IGMyOTIwOGIuLjUwZWQ3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKQEAgLTIzOSw2ICsyMzksNyBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkICpjYXBpX2RyaXZlcl9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaykKIHsKIAlyZWFkX2xvY2soJmNhcGlfZHJpdmVyc19saXN0X2xvY2spOwogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmY2FwaV9kcml2ZXJzLCAqcG9zKTsKQEAgLTI1MCw2ICsyNTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBjYXBpX2RyaXZlcl9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmNhcGlfZHJpdmVyc19saXN0X2xvY2spCiB7CiAJcmVhZF91bmxvY2soJmNhcGlfZHJpdmVyc19saXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKaW5kZXggMDAxN2U1MC4uOWNhODg5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogbWVudWNvbmZpZyBJU0ROX0RSVl9HSUdBU0VUCi0JdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IChpc2RuKSIKKwl0cmlzdGF0ZSAiU2llbWVucyBHaWdhc2V0IHN1cHBvcnQiCiAJc2VsZWN0IENSQ19DQ0lUVAogCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscApAQCAtMTEsMTEgKzExLDExIEBACiAJICBvbmUgb2YgdGhlIGNvbm5lY3Rpb24gc3BlY2lmaWMgcGFydHMgdGhhdCBmb2xsb3cuCiAJICBUaGlzIHdpbGwgYnVpbGQgYSBtb2R1bGUgY2FsbGVkICJnaWdhc2V0Ii4KIAotaWYgSVNETl9EUlZfR0lHQVNFVCE9bgoraWYgSVNETl9EUlZfR0lHQVNFVAogCiBjb25maWcgR0lHQVNFVF9CQVNFCiAJdHJpc3RhdGUgIkdpZ2FzZXQgYmFzZSBzdGF0aW9uIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiBpbnRlcmZhY2Ugb2YgdGhlIEdpZ2FzZXQKIAkgIGJhc2UgZm9yIGNvbm5lY3Rpb24gdG8geW91ciBzeXN0ZW0uCkBAIC0yMyw3ICsyMyw3IEBACiAKIGNvbmZpZyBHSUdBU0VUX00xMDUKIAl0cmlzdGF0ZSAiR2lnYXNldCBNMTA1IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHRoZSBHaWdhc2V0IGJhc2UgdmlhIERFQ1QKIAkgIHVzaW5nIGEgR2lnYXNldCBNMTA1IChTaW51cyA0NSBEYXRhIDIpIFVTQiBERUNUIGRldmljZS4KQEAgLTMxLDcgKzMxLDYgQEAKIAogY29uZmlnIEdJR0FTRVRfTTEwMQogCXRyaXN0YXRlICJHaWdhc2V0IE0xMDEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTRE5fRFJWX0dJR0FTRVQKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gdGhlIEdpZ2FzZXQgYmFzZSB2aWEgREVDVAogCSAgdXNpbmcgYSBHaWdhc2V0IE0xMDEgKFNpbnVzIDQ1IERhdGEgMSkgUlMyMzIgREVDVCBkZXZpY2UuCkBAIC00OCw3ICs0Nyw2IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFVTQiByZXF1ZXN0cyB3ZSBvbmx5IGtub3cgZnJvbQogCSAgcmV2ZXJzZSBlbmdpbmVlcmluZyAoY3VycmVudGx5IE0xMDUgb25seSkuIElmIHlvdSBuZWVkCi0JICBmZWF0dXJlcyBsaWtlIGNvbmZpZ3VyYXRpb24gbW9kZSBvZiBNMTA1LCBzYXkgeWVzLiBJZiB5b3UKLQkgIGNhcmUgYWJvdXQgeW91ciBkZXZpY2UsIHNheSBuby4KKwkgIGZlYXR1cmVzIGxpa2UgY29uZmlndXJhdGlvbiBtb2RlIG9mIE0xMDUsIHNheSB5ZXMuCiAKLWVuZGlmICMgSVNETl9EUlZfR0lHQVNFVCAhPSBuCitlbmRpZiAjIElTRE5fRFJWX0dJR0FTRVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDE4ZGQ4YWEuLjgzMWRkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtNDYsNiArNDYsOSBAQAogLyogbGVuZ3RoIGxpbWl0IGFjY29yZGluZyB0byBTaWVtZW5zIDMwNzB1c2ItcHJvdG9rb2xsLmRvYyBjaC4gMi4xICovCiAjZGVmaW5lIElGX1dSSVRFQlVGIDI2NAogCisvKiBpbnRlcnJ1cHQgcGlwZSBtZXNzYWdlIHNpemUgYWNjb3JkaW5nIHRvIGliaWQuIGNoLiAyLjIgKi8KKyNkZWZpbmUgSVBfTVNHU0laRSAzCisKIC8qIFZhbHVlcyBmb3IgdGhlIEdpZ2FzZXQgMzA3eCAqLwogI2RlZmluZSBVU0JfR0lHQV9WRU5ET1JfSUQgICAgICAweDA2ODEKICNkZWZpbmUgVVNCXzMwNzBfUFJPRFVDVF9JRCAgICAgMHgwMDAxCkBAIC0xMTAsNyArMTEzLDcgQEAKIAl1bnNpZ25lZCBjaGFyCQkqcmN2YnVmOwkvKiBBVCByZXBseSByZWNlaXZlIGJ1ZmZlciAqLwogCiAJc3RydWN0IHVyYgkJKnVyYl9pbnRfaW47CS8qIFVSQiBmb3IgaW50ZXJydXB0IHBpcGUgKi8KLQl1bnNpZ25lZCBjaGFyCQlpbnRfaW5fYnVmWzNdOworCXVuc2lnbmVkIGNoYXIJCSppbnRfaW5fYnVmOwogCiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIGxvY2tzIGFsbCBmb2xsb3dpbmcgKi8KIAlpbnQJCQliYXNzdGF0ZTsJLyogYml0bWFwIChCU18qKSAqLwpAQCAtNjU3LDcgKzY2MCw3IEBACiAJfQogCiAJLyogZHJvcCBpbmNvbXBsZXRlIHBhY2tldHMgZXZlbiBpZiB0aGUgbWlzc2luZyBieXRlcyB3b3VsZG4ndCBtYXR0ZXIgKi8KLQlpZiAodW5saWtlbHkodXJiLT5hY3R1YWxfbGVuZ3RoIDwgMykpIHsKKwlpZiAodW5saWtlbHkodXJiLT5hY3R1YWxfbGVuZ3RoIDwgSVBfTVNHU0laRSkpIHsKIAkJZGV2X3dhcm4oY3MtPmRldiwgImluY29tcGxldGUgaW50ZXJydXB0IHBhY2tldCAoJWQgYnl0ZXMpXG4iLAogCQkJIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCWdvdG8gcmVzdWJtaXQ7CkBAIC0yMTI3LDYgKzIxMzAsNyBAQAogc3RhdGljIHZvaWQgZ2lnYXNldF9mcmVlY3NodyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKIAkvKiB0aW1lcnMsIFVSQnMgYW5kIHJjdmJ1ZiBhcmUgZGlzcG9zZWQgb2YgaW4gZGlzY29ubmVjdCAqLworCWtmcmVlKGNzLT5ody5iYXMtPmludF9pbl9idWYpOwogCWtmcmVlKGNzLT5ody5iYXMpOwogCWNzLT5ody5iYXMgPSBOVUxMOwogfQpAQCAtMjE0MCw2ICsyMTQ0LDEyIEBACiAJCXByX2Vycigib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAwOwogCX0KKwl1Y3MtPmludF9pbl9idWYgPSBrbWFsbG9jKElQX01TR1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghdWNzLT5pbnRfaW5fYnVmKSB7CisJCWtmcmVlKHVjcyk7CisJCXByX2Vycigib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KIAogCXVjcy0+dXJiX2NtZF9pbiA9IE5VTEw7CiAJdWNzLT51cmJfY21kX291dCA9IE5VTEw7CkBAIC0yMjkyLDcgKzIzMDIsNyBAQAogCXVzYl9maWxsX2ludF91cmIodWNzLT51cmJfaW50X2luLCB1ZGV2LAogCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCiAJCQkJCShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgJiAweDBmKSwKLQkJCSB1Y3MtPmludF9pbl9idWYsIDMsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKKwkJCSB1Y3MtPmludF9pbl9idWYsIElQX01TR1NJWkUsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKIAkJCSBlbmRwb2ludC0+YkludGVydmFsKTsKIAlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfaW50X2luLCBHRlBfS0VSTkVMKSkgIT0gMCkgewogCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IGludGVycnVwdCBVUkI6ICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKaW5kZXggYWMyNDVlNy4uMzA3MWE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCkBAIC0zODksOCArMzg5LDcgQEAKIAogc3RhdGljIHZvaWQgZ2lnYXNldF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9Ci0JCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCiAJLyogYWRhcHRlZCBmcm9tIHBsYXRmb3JtX2RldmljZV9yZWxlYXNlKCkgaW4gZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgKi8KIAkvL0ZJWE1FIGlzIHRoaXMgYWN0dWFsbHkgbmVjZXNzYXJ5PwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKaW5kZXggZmJhNjFmNi4uZDc4Mzg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCkBAIC0yNzgsMTcgKzI3OCwxNyBAQAogc3RhdGljIGludCBnaWdhc2V0X3NldF9tb2RlbV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCiAJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbGluZV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KIAogc3RhdGljIGludCBnaWdhc2V0X2JhdWRfcmF0ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAjZW5kaWYKIApAQCAtNTc3LDcgKzU3Nyw3IEBACiAJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MTksIDB4NDEsCiAJCQkgICAgICAgMCwgMCwgJmJ1ZiwgNiwgMjAwMCk7CiAjZWxzZQotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKaW5kZXggODQzMThlYy4uMzNjZTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKQEAgLTExOTgsNyArMTE5OCw3IEBACiAgICAgICAgIHBDLT54YnVmZmVyWzVdID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAgOCk7CiAgICAgICAgIHBDLT54YnVmZmVyWzZdID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAxNik7CiAgICAgICAgIHBDLT54YnVmZmVyWzddID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAyNCk7Ci0gICAgICAgIHBDLT54YnVmZmVyWzhdID0gKGJ5dGUpRElWQV9NQVhfTUFOQUdFTUVOVF9UUkFOU0ZFUl9TSVpFOworCXBDLT54YnVmZmVyWzhdID0gKGJ5dGUpKERJVkFfTUFYX01BTkFHRU1FTlRfVFJBTlNGRVJfU0laRSAmIDB4RkYpOwogICAgICAgICBwQy0+eGJ1ZmZlcls5XSA9IChieXRlKShESVZBX01BWF9NQU5BR0VNRU5UX1RSQU5TRkVSX1NJWkUgPj4gOCk7CiAgICAgICAgIHBDLT54YnVmZmVyWzEwXSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCmluZGV4IDRjYzk0ZjIuLjMxZjkxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwpAQCAtMTE5NCw3ICsxMTk0LDggQEAKIC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIGZvciBlYWNoIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotYnl0ZSBjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIGNoOwogICB3b3JkIGk7CkBAIC0xNDExLDcgKzE0MTIsOCBAQAogICByZXR1cm4gMjsKIH0KIAotYnl0ZSBjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIGksIEluZm87CiAgIHdvcmQgUmVqZWN0OwpAQCAtMTU2NywxMyArMTU2OSwxNSBAQAogICByZXR1cm4gMTsKIH0KIAotYnl0ZSBjb25uZWN0X2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJjb25uZWN0X2FfcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm87CiAgIHdvcmQgaTsKQEAgLTE2MjgsNyArMTYzMiw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJkaXNjb25uZWN0X3JlcyIpKTsKICAgaWYocGxjaSkKQEAgLTE2NTUsNyArMTY2MCw4IEBACiAgIHJldHVybiAwOwogfQogCi1ieXRlIGxpc3Rlbl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBsaXN0ZW5fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm87CiAgIGJ5dGUgaTsKQEAgLTE3MDQsNyArMTcxMCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBpbmZvX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBpbmZvX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIGk7CiAgIEFQSV9QQVJTRSAqIGFpOwpAQCAtMTgxMywxMyArMTgyMCwxNSBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgaW5mb19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgaW5mb19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImluZm9fcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgYWxlcnRfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGFsZXJ0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvOwogICBieXRlIHJldDsKQEAgLTE4NDksNyArMTg1OCw4IEBACiAgIHJldHVybiByZXQ7CiB9CiAKLWJ5dGUgZmFjaWxpdHlfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGZhY2lsaXR5X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm8gPSAwOwogICB3b3JkIGkgICAgPSAwOwpAQCAtMjU5OSwxMyArMjYwOSwxNSBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZmFjaWxpdHlfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGZhY2lsaXR5X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiZmFjaWxpdHlfcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvID0gMDsKICAgYnl0ZSByZXE7CkBAIC0yODM5LDcgKzI4NTEsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICBBUElfUEFSU0UgKiBuY3BpOwpAQCAtMjk1NCw3ICsyOTY3LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKIApAQCAtMjk3NCw3ICsyOTg4LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBuY2NpOwpAQCAtMzAzMCw3ICszMDQ1LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKICAgd29yZCBpOwpAQCAtMzA4Niw3ICszMTAyLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRhdGFfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGF0YV9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIE5DQ0kgICAqbmNjaV9wdHI7CiAgIERBVEFfQjNfREVTQyAgICpkYXRhOwpAQCAtMzE2Myw3ICszMTgwLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRhdGFfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGF0YV9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbjsKICAgd29yZCBuY2NpOwpAQCAtMzE5Niw3ICszMjE0LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIHJlc2V0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIHJlc2V0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBuY2NpOwpAQCAtMzIzNyw3ICszMjU2LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIHJlc2V0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIHJlc2V0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKIApAQCAtMzI2MSw3ICszMjgxLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfdDkwX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM190OTBfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICBBUElfUEFSU0UgKiBuY3BpOwpAQCAtMzI5NSw3ICszMzE2LDggQEAKIH0KIAogCi1ieXRlIHNlbGVjdF9iX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBzZWxlY3RfYl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvPTA7CiAgIHdvcmQgaTsKQEAgLTg2ODksNyArODcxMSw3IEBACiAvKiBzZW5kIGEgcmVxdWVzdCBmb3IgdGhlIHNpZ25hbGluZyBlbnRpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgc2lnX3JlcShQTENJICAgKiBwbGNpLCBieXRlIHJlcSwgYnl0ZSBJZCkKK3N0YXRpYyB2b2lkIHNpZ19yZXEoUExDSSAqcGxjaSwgYnl0ZSByZXEsIGJ5dGUgSWQpCiB7CiAgIGlmKCFwbGNpKSByZXR1cm47CiAgIGlmKHBsY2ktPmFkYXB0ZXItPmFkYXB0ZXJfZGlzYWJsZWQpIHJldHVybjsKQEAgLTg3ODksNyArODgxMSw3IEBACiAgIGRidWcoMSxkcHJpbnRmKCJzZW5kX29rIikpOwogfQogCi12b2lkIHNlbmRfZGF0YShQTENJICAgKiBwbGNpKQorc3RhdGljIHZvaWQgc2VuZF9kYXRhKFBMQ0kgKnBsY2kpCiB7CiAgIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhOwogICBEQVRBX0IzX0RFU0MgICAqIGRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCmluZGV4IDdjNTZjNDQuLjAyNWEyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCkBAIC0yNCw3ICsyNCw2IEBACiBjb25zdCBjaGFyICpsbGlfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjU5LjIuNCAkIjsKIAogZXh0ZXJuIHN0cnVjdCBJc2RuQ2FyZCBjYXJkc1tdOwotZXh0ZXJuIGludCBucmNhcmRzOwogCiBzdGF0aWMgaW50IGluaXRfYl9zdChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbnAsIGludCBpbmNvbWluZyk7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2Jfc3Qoc3RydWN0IENoYW5uZWwgKmNoYW5wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwppbmRleCBkZWQ5ZDBiLi40ZmFiMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCkBAIC0zNjEsMTIgKzM2MSw2IEBACiAKIGludCBucmNhcmRzOwogCi1leHRlcm4gY29uc3QgY2hhciAqbDFfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbDJfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbDNfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbGxpX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnRlaV9yZXZpc2lvbjsKLQogY2hhciAqSGlTYXhfZ2V0cmV2KGNvbnN0IGNoYXIgKnJldmlzaW9uKQogewogCWNoYXIgKnJldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKaW5kZXggY2YwODI2Ni4uMjBkNzY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKQEAgLTE2LDggKzE2LDYgQEAKICNpbmNsdWRlICJoZmNfMmJkczAuaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpoZmNzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xMC4yLjQgJCI7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAppbmRleCBlOGQ0MjlmLi5mODUyNzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaApAQCAtMTIxLDYgKzEyMSwxNSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCitleHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKK2V4dGVybiBpbnQgbnJjYXJkczsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmwxX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmwyX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmwzX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmxsaV9yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICp0ZWlfcmV2aXNpb247CisKIC8qIGluY2x1ZGUgbDNkc3MxICYgbmkxIHNwZWNpZmljIHByb2Nlc3Mgc3RydWN0dXJlcywgYnV0IG5vIG90aGVyIGRlZmluZXMgKi8KICNpZmRlZiBDT05GSUdfSElTQVhfRVVSTwogICAjZGVmaW5lIGwzZHNzMV9wcm9jZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKaW5kZXggYTE0MjA0ZS4uMzE3ZjE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYwpAQCAtMTgsMTIgKzE4LDEyIEBACiAgKgogICovCiAKLWNvbnN0IGNoYXIgKmwxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi40Ni4yLjUgJCI7Ci0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAorY29uc3QgY2hhciAqbDFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjQ2LjIuNSAkIjsKKwogI2RlZmluZSBUSU1FUjNfVkFMVUUgNzAwMAogCiBzdGF0aWMgc3RydWN0IEZzbSBsMWZzbV9iOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCmluZGV4IGExMGRmYTguLjU1NjlhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKQEAgLTQ4LDggKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpTZWRsYmF1ZXJfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjM0LjIuNiAkIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgKlNlZGxiYXVlcl9UeXBlc1tdID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYwppbmRleCA0ODU4MTMzLi4zY2EwYmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSAiaXNhYy5oIgogI2luY2x1ZGUgImhzY3guaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICp0ZWxlczBfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE1LjIuNCAkIjsKIAogI2RlZmluZSBURUxFU19JT01FTV9TSVpFCTB4NDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKaW5kZXggNWRjOWYxYS4uZTlmNWJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImhzY3guaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiBzdGF0aWMgY29uc3QgY2hhciAqdGVsZXMzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xOS4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jIGIvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKaW5kZXggZjJiMzIxOC4uYmJkOTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKQEAgLTE1Miw4ICsxNTIsNyBAQAogCXVfbG9uZwkJCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmdGltZXItPmxpc3QpOwotCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5saXN0LCAmdGltZXItPmRldi0+ZXhwaXJlZCk7CisJbGlzdF9tb3ZlX3RhaWwoJnRpbWVyLT5saXN0LCAmdGltZXItPmRldi0+ZXhwaXJlZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXItPmRldi0+bG9jaywgZmxhZ3MpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdGltZXItPmRldi0+d2FpdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKaW5kZXggNWJhMmE4Ny4uZTA3NWU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwpAQCAtMzQ3LDggKzM0Nyw3IEBACiAJCWlmIChkZXYtPnJlYWRfZnJhbWUpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJwY2JpdF9yZWNlaXZlOiBUeXBlIDAgZnJhbWUgYW5kIHJlYWRfZnJhbWUgIT0gTlVMTFxuIik7CiAJCQkvKiBkaXNjYXJkIHByZXZpb3VzIHF1ZXVlZCBmcmFtZSAqLwotCQkJaWYgKGRldi0+cmVhZF9mcmFtZS0+c2tiKQotCQkJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CisJCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOwogCQkJa2ZyZWUoZGV2LT5yZWFkX2ZyYW1lKTsKIAkJCWRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CiAJCX0KQEAgLTYwMSw4ICs2MDAsNyBAQAogCWRldi0+d19idXN5ID0gZGV2LT5yX2J1c3kgPSAxOwogCiAJaWYgKGRldi0+cmVhZF9mcmFtZSkgewotCQlpZiAoZGV2LT5yZWFkX2ZyYW1lLT5za2IpCi0JCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOworCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOwogCQlrZnJlZShkZXYtPnJlYWRfZnJhbWUpOwogCQlkZXYtPnJlYWRfZnJhbWUgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9zaG1lbS5jIGIvZHJpdmVycy9pc2RuL3NjL3NobWVtLmMKaW5kZXggNzEyMjIwYy4uN2YxNmQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL3NobWVtLmMKKysrIGIvZHJpdmVycy9pc2RuL3NjL3NobWVtLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY19hZGFwdGVyW2NhcmRdLT5sb2NrLCBmbGFncyk7CiAJcHJfZGVidWcoIiVzOiBzZXQgcGFnZSB0byAlI3hcbiIsc2NfYWRhcHRlcltjYXJkXS0+ZGV2aWNlbmFtZSwKIAkJKChzY19hZGFwdGVyW2NhcmRdLT5zaG1lbV9tYWdpYyArIGNoICogU1JBTV9QQUdFU0laRSk+PjE0KXwweDgwKTsKLQlwcl9kZWJ1ZygiJXM6IGNvcHlpbmcgJWQgYnl0ZXMgZnJvbSAlI2x4IHRvICUjbHhcbiIsCisJcHJfZGVidWcoIiVzOiBjb3B5aW5nICV6dSBieXRlcyBmcm9tICUjbHggdG8gJSNseFxuIiwKIAkJc2NfYWRhcHRlcltjYXJkXS0+ZGV2aWNlbmFtZSwgbiwKIAkJKHVuc2lnbmVkIGxvbmcpIHNyYywKIAkJc2NfYWRhcHRlcltjYXJkXS0+cmFtYmFzZSArICgodW5zaWduZWQgbG9uZykgZGVzdCAlMHg0MDAwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfZGV2aWNlLmMgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfZGV2aWNlLmMKaW5kZXggYjRkNDRlNS4uODEzMjUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF9kZXZpY2UuYwpAQCAtMjEyLDYgKzIxMiw5IEBACiAJaGNhbGwoTEhDQUxMX05PVElGWSwgbHZxLT5jb25maWcucGZuIDw8IFBBR0VfU0hJRlQsIDAsIDApOwogfQogCisvKiBBbiBleHRlcm4gZGVjbGFyYXRpb24gaW5zaWRlIGEgQyBmaWxlIGlzIGJhZCBmb3JtLiAgRG9uJ3QgZG8gaXQuICovCitleHRlcm4gdm9pZCBsZ3Vlc3Rfc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCiAvKiBUaGlzIHJvdXRpbmUgZmluZHMgdGhlIGZpcnN0IHZpcnRxdWV1ZSBkZXNjcmliZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YKICAqIHRoaXMgZGV2aWNlIGFuZCBzZXRzIGl0IHVwLgogICoKQEAgLTI2Niw2ICsyNjksOSBAQAogCQlnb3RvIHVubWFwOwogCX0KIAorCS8qIE1ha2Ugc3VyZSB0aGUgaW50ZXJydXB0IGlzIGFsbG9jYXRlZC4gKi8KKwlsZ3Vlc3Rfc2V0dXBfaXJxKGx2cS0+Y29uZmlnLmlycSk7CisKIAkvKiBUZWxsIHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgdmlydHF1ZXVlIHRvIGdvIHRvIHRoZSB2aXJ0aW9fcmluZwogCSAqIGludGVycnVwdCBoYW5kbGVyLiAqLwogCS8qIEZJWE1FOiBXZSB1c2VkIHRvIGhhdmUgYSBmbGFnIGZvciB0aGUgSG9zdCB0byB0ZWxsIHVzIHdlIGNvdWxkIHVzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2EvbWNhLWJ1cy5jIGIvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCmluZGV4IGVmMmRiZmUuLmFkYTVlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWNhL21jYS1idXMuYworKysgYi9kcml2ZXJzL21jYS9tY2EtYnVzLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAJbWNhX2Rldi0+ZGV2LnBhcmVudCA9ICZtY2FfYnVzLT5kZXY7CiAJbWNhX2Rldi0+ZGV2LmJ1cyA9ICZtY2FfYnVzX3R5cGU7Ci0Jc3ByaW50ZiAobWNhX2Rldi0+ZGV2LmJ1c19pZCwgIiUwMmQ6JTAyWCIsIGJ1cywgbWNhX2Rldi0+c2xvdCk7CisJZGV2X3NldF9uYW1lKCZtY2FfZGV2LT5kZXYsICIlMDJkOiUwMlgiLCBidXMsIG1jYV9kZXYtPnNsb3QpOwogCW1jYV9kZXYtPmRtYV9tYXNrID0gbWNhX2J1cy0+ZGVmYXVsdF9kbWFfbWFzazsKIAltY2FfZGV2LT5kZXYuZG1hX21hc2sgPSAmbWNhX2Rldi0+ZG1hX21hc2s7CiAJbWNhX2Rldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gbWNhX2Rldi0+ZG1hX21hc2s7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAlpZiAoIW1jYV9idXMpCiAJCXJldHVybiBOVUxMOwogCi0Jc3ByaW50ZihtY2FfYnVzLT5kZXYuYnVzX2lkLCJtY2ElZCIsYnVzKTsKKwlkZXZfc2V0X25hbWUoJm1jYV9idXMtPmRldiwgIm1jYSVkIiwgYnVzKTsKIAlzcHJpbnRmKG1jYV9idXMtPm5hbWUsIkhvc3QgJXMgTUNBIEJyaWRnZSIsIGJ1cyA/ICJTZWNvbmRhcnkiIDogIlByaW1hcnkiKTsKIAlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZtY2FfYnVzLT5kZXYpKSB7CiAJCWtmcmVlKG1jYV9idXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCmluZGV4IDM1YmRhNDkuLmJmZWZkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYworKysgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKQEAgLTYwLDYgKzYwLDcgQEAKIH07CiAKIHN0cnVjdCBkbV9jcnlwdF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgY29udmVydF9jb250ZXh0ICpjdHg7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX2luOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19vdXQ7CiB9OwpAQCAtMzM1LDYgKzMzNiwxOCBAQAogCWluaXRfY29tcGxldGlvbigmY3R4LT5yZXN0YXJ0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBkbV9jcnlwdF9yZXF1ZXN0ICpkbXJlcV9vZl9yZXEoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsCisJCQkJCSAgICAgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiAoc3RydWN0IGRtX2NyeXB0X3JlcXVlc3QgKikoKGNoYXIgKilyZXEgKyBjYy0+ZG1yZXFfc3RhcnQpOworfQorCitzdGF0aWMgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxX29mX2RtcmVxKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLAorCQkJCQkgICAgICAgc3RydWN0IGRtX2NyeXB0X3JlcXVlc3QgKmRtcmVxKQoreworCXJldHVybiAoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqKSgoY2hhciAqKWRtcmVxIC0gY2MtPmRtcmVxX3N0YXJ0KTsKK30KKwogc3RhdGljIGludCBjcnlwdF9jb252ZXJ0X2Jsb2NrKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLAogCQkJICAgICAgIHN0cnVjdCBjb252ZXJ0X2NvbnRleHQgKmN0eCwKIAkJCSAgICAgICBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCkBAIC0zNDUsMTAgKzM1OCwxMSBAQAogCXU4ICppdjsKIAlpbnQgciA9IDA7CiAKLQlkbXJlcSA9IChzdHJ1Y3QgZG1fY3J5cHRfcmVxdWVzdCAqKSgoY2hhciAqKXJlcSArIGNjLT5kbXJlcV9zdGFydCk7CisJZG1yZXEgPSBkbXJlcV9vZl9yZXEoY2MsIHJlcSk7CiAJaXYgPSAodTggKilBTElHTigodW5zaWduZWQgbG9uZykoZG1yZXEgKyAxKSwKIAkJCSBjcnlwdG9fYWJsa2NpcGhlcl9hbGlnbm1hc2soY2MtPnRmbSkgKyAxKTsKIAorCWRtcmVxLT5jdHggPSBjdHg7CiAJc2dfaW5pdF90YWJsZSgmZG1yZXEtPnNnX2luLCAxKTsKIAlzZ19zZXRfcGFnZSgmZG1yZXEtPnNnX2luLCBidl9pbi0+YnZfcGFnZSwgMSA8PCBTRUNUT1JfU0hJRlQsCiAJCSAgICBidl9pbi0+YnZfb2Zmc2V0ICsgY3R4LT5vZmZzZXRfaW4pOwpAQCAtMzk1LDggKzQwOSw5IEBACiAJCWNjLT5yZXEgPSBtZW1wb29sX2FsbG9jKGNjLT5yZXFfcG9vbCwgR0ZQX05PSU8pOwogCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKGNjLT5yZXEsIGNjLT50Zm0pOwogCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2soY2MtPnJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0cgfAotCQkJCQkgICAgIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKLQkJCQkJICAgICBrY3J5cHRkX2FzeW5jX2RvbmUsIGN0eCk7CisJCQkJCUNSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKKwkJCQkJa2NyeXB0ZF9hc3luY19kb25lLAorCQkJCQlkbXJlcV9vZl9yZXEoY2MsIGNjLT5yZXEpKTsKIH0KIAogLyoKQEAgLTU1MywxOSArNTY4LDIyIEBACiBzdGF0aWMgdm9pZCBjcnlwdF9kZWNfcGVuZGluZyhzdHJ1Y3QgZG1fY3J5cHRfaW8gKmlvKQogewogCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gaW8tPnRhcmdldC0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYmlvICpiYXNlX2JpbyA9IGlvLT5iYXNlX2JpbzsKKwlzdHJ1Y3QgZG1fY3J5cHRfaW8gKmJhc2VfaW8gPSBpby0+YmFzZV9pbzsKKwlpbnQgZXJyb3IgPSBpby0+ZXJyb3I7CiAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmlvLT5wZW5kaW5nKSkKIAkJcmV0dXJuOwogCi0JaWYgKGxpa2VseSghaW8tPmJhc2VfaW8pKQotCQliaW9fZW5kaW8oaW8tPmJhc2VfYmlvLCBpby0+ZXJyb3IpOwotCWVsc2UgewotCQlpZiAoaW8tPmVycm9yICYmICFpby0+YmFzZV9pby0+ZXJyb3IpCi0JCQlpby0+YmFzZV9pby0+ZXJyb3IgPSBpby0+ZXJyb3I7Ci0JCWNyeXB0X2RlY19wZW5kaW5nKGlvLT5iYXNlX2lvKTsKLQl9Ci0KIAltZW1wb29sX2ZyZWUoaW8sIGNjLT5pb19wb29sKTsKKworCWlmIChsaWtlbHkoIWJhc2VfaW8pKQorCQliaW9fZW5kaW8oYmFzZV9iaW8sIGVycm9yKTsKKwllbHNlIHsKKwkJaWYgKGVycm9yICYmICFiYXNlX2lvLT5lcnJvcikKKwkJCWJhc2VfaW8tPmVycm9yID0gZXJyb3I7CisJCWNyeXB0X2RlY19wZW5kaW5nKGJhc2VfaW8pOworCX0KIH0KIAogLyoKQEAgLTgyMSw3ICs4MzksOCBAQAogc3RhdGljIHZvaWQga2NyeXB0ZF9hc3luY19kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXN5bmNfcmVxLAogCQkJICAgICAgIGludCBlcnJvcikKIHsKLQlzdHJ1Y3QgY29udmVydF9jb250ZXh0ICpjdHggPSBhc3luY19yZXEtPmRhdGE7CisJc3RydWN0IGRtX2NyeXB0X3JlcXVlc3QgKmRtcmVxID0gYXN5bmNfcmVxLT5kYXRhOworCXN0cnVjdCBjb252ZXJ0X2NvbnRleHQgKmN0eCA9IGRtcmVxLT5jdHg7CiAJc3RydWN0IGRtX2NyeXB0X2lvICppbyA9IGNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBkbV9jcnlwdF9pbywgY3R4KTsKIAlzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyA9IGlvLT50YXJnZXQtPnByaXZhdGU7CiAKQEAgLTgzMCw3ICs4NDksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JbWVtcG9vbF9mcmVlKGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KGFzeW5jX3JlcSksIGNjLT5yZXFfcG9vbCk7CisJbWVtcG9vbF9mcmVlKHJlcV9vZl9kbXJlcShjYywgZG1yZXEpLCBjYy0+cmVxX3Bvb2wpOwogCiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZjdHgtPnBlbmRpbmcpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvLmMgYi9kcml2ZXJzL21kL2RtLWlvLmMKaW5kZXggYTM0MzM4NS4uMzZlMmI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pby5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW8uYwpAQCAtMjkyLDYgKzI5Miw4IEBACiAJCQkJCSAgICAgKFBBR0VfU0laRSA+PiBTRUNUT1JfU0hJRlQpKTsKIAkJbnVtX2J2ZWNzID0gMSArIG1pbl90KGludCwgYmlvX2dldF9ucl92ZWNzKHdoZXJlLT5iZGV2KSwKIAkJCQkgICAgICBudW1fYnZlY3MpOworCQlpZiAodW5saWtlbHkobnVtX2J2ZWNzID4gQklPX01BWF9QQUdFUykpCisJCQludW1fYnZlY3MgPSBCSU9fTUFYX1BBR0VTOwogCQliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KEdGUF9OT0lPLCBudW1fYnZlY3MsIGlvLT5jbGllbnQtPmJpb3MpOwogCQliaW8tPmJpX3NlY3RvciA9IHdoZXJlLT5zZWN0b3IgKyAod2hlcmUtPmNvdW50IC0gcmVtYWluaW5nKTsKIAkJYmlvLT5iaV9iZGV2ID0gd2hlcmUtPmJkZXY7CkBAIC0zMjgsNyArMzMwLDcgQEAKIAlzdHJ1Y3QgZHBhZ2VzIG9sZF9wYWdlcyA9ICpkcDsKIAogCWlmIChzeW5jKQotCQlydyB8PSAoMSA8PCBCSU9fUldfU1lOQyk7CisJCXJ3IHw9ICgxIDw8IEJJT19SV19TWU5DSU8pIHwgKDEgPDwgQklPX1JXX1VOUExVRyk7CiAKIAkvKgogCSAqIEZvciBtdWx0aXBsZSByZWdpb25zIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byByZXdpbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwppbmRleCA1NGQwNTg4Li5mMDEwOTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCkBAIC03MDQsNyArNzA0LDggQEAKIAljaGFyICpuZXdfbmFtZSA9IChjaGFyICopIHBhcmFtICsgcGFyYW0tPmRhdGFfc3RhcnQ7CiAKIAlpZiAobmV3X25hbWUgPCBwYXJhbS0+ZGF0YSB8fAotCSAgICBpbnZhbGlkX3N0cihuZXdfbmFtZSwgKHZvaWQgKikgcGFyYW0gKyBwYXJhbV9zaXplKSkgeworCSAgICBpbnZhbGlkX3N0cihuZXdfbmFtZSwgKHZvaWQgKikgcGFyYW0gKyBwYXJhbV9zaXplKSB8fAorCSAgICBzdHJsZW4obmV3X25hbWUpID4gRE1fTkFNRV9MRU4gLSAxKSB7CiAJCURNV0FSTigiSW52YWxpZCBuZXcgbG9naWNhbCB2b2x1bWUgbmFtZSBzdXBwbGllZC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTA2Myw3ICsxMDY0LDcgQEAKIAogCXIgPSBwb3B1bGF0ZV90YWJsZSh0LCBwYXJhbSwgcGFyYW1fc2l6ZSk7CiAJaWYgKHIpIHsKLQkJZG1fdGFibGVfcHV0KHQpOworCQlkbV90YWJsZV9kZXN0cm95KHQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwNzEsNyArMTA3Miw3IEBACiAJaGMgPSBkbV9nZXRfbWRwdHIobWQpOwogCWlmICghaGMgfHwgaGMtPm1kICE9IG1kKSB7CiAJCURNV0FSTigiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZGV2IGhhc2ggdGFibGUuIik7Ci0JCWRtX3RhYmxlX3B1dCh0KTsKKwkJZG1fdGFibGVfZGVzdHJveSh0KTsKIAkJdXBfd3JpdGUoJl9oYXNoX2xvY2spOwogCQlyID0gLUVOWElPOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMgYi9kcml2ZXJzL21kL2RtLWtjb3B5ZC5jCmluZGV4IDMwNzM2MTguLjBhMjI1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMKKysrIGIvZHJpdmVycy9tZC9kbS1rY29weWQuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiB7CiAJaW50IHI7CiAJc3RydWN0IGRtX2lvX3JlcXVlc3QgaW9fcmVxID0gewotCQkuYmlfcncgPSBqb2ItPnJ3IHwgKDEgPDwgQklPX1JXX1NZTkMpLAorCQkuYmlfcncgPSBqb2ItPnJ3IHwgKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfVU5QTFVHKSwKIAkJLm1lbS50eXBlID0gRE1fSU9fUEFHRV9MSVNULAogCQkubWVtLnB0ci5wbCA9IGpvYi0+cGFnZXMsCiAJCS5tZW0ub2Zmc2V0ID0gam9iLT5vZmZzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggNTFiYTFkYi4uOGQ0MGYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtNTI1LDkgKzUyNSwxMiBAQAogc3RhdGljIHZvaWQgZGVjX3BlbmRpbmcoc3RydWN0IGRtX2lvICppbywgaW50IGVycm9yKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGlvX2Vycm9yOworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBpby0+bWQ7CiAKIAkvKiBQdXNoLWJhY2sgc3VwZXJzZWRlcyBhbnkgSS9PIGVycm9ycyAqLwotCWlmIChlcnJvciAmJiAhKGlvLT5lcnJvciA+IDAgJiYgX19ub2ZsdXNoX3N1c3BlbmRpbmcoaW8tPm1kKSkpCisJaWYgKGVycm9yICYmICEoaW8tPmVycm9yID4gMCAmJiBfX25vZmx1c2hfc3VzcGVuZGluZyhtZCkpKQogCQlpby0+ZXJyb3IgPSBlcnJvcjsKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+aW9fY291bnQpKSB7CkBAIC01MzcsMjQgKzU0MCwyNyBAQAogCQkJICogVGhpcyBtdXN0IGJlIGhhbmRsZWQgYmVmb3JlIHRoZSBzbGVlcGVyIG9uCiAJCQkgKiBzdXNwZW5kIHF1ZXVlIG1lcmdlcyB0aGUgcHVzaGJhY2sgbGlzdC4KIAkJCSAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvLT5tZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOwotCQkJaWYgKF9fbm9mbHVzaF9zdXNwZW5kaW5nKGlvLT5tZCkpCi0JCQkJYmlvX2xpc3RfYWRkKCZpby0+bWQtPnB1c2hiYWNrLCBpby0+YmlvKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOworCQkJaWYgKF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkKKwkJCQliaW9fbGlzdF9hZGQoJm1kLT5wdXNoYmFjaywgaW8tPmJpbyk7CiAJCQllbHNlCiAJCQkJLyogbm9mbHVzaCBzdXNwZW5kIHdhcyBpbnRlcnJ1cHRlZC4gKi8KIAkJCQlpby0+ZXJyb3IgPSAtRUlPOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW8tPm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOwogCQl9CiAKIAkJZW5kX2lvX2FjY3QoaW8pOwogCi0JCWlmIChpby0+ZXJyb3IgIT0gRE1fRU5ESU9fUkVRVUVVRSkgewotCQkJdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGlvLT5tZC0+cXVldWUsIGlvLT5iaW8pOworCQlpb19lcnJvciA9IGlvLT5lcnJvcjsKKwkJYmlvID0gaW8tPmJpbzsKIAotCQkJYmlvX2VuZGlvKGlvLT5iaW8sIGlvLT5lcnJvcik7CisJCWZyZWVfaW8obWQsIGlvKTsKKworCQlpZiAoaW9fZXJyb3IgIT0gRE1fRU5ESU9fUkVRVUVVRSkgeworCQkJdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKG1kLT5xdWV1ZSwgYmlvKTsKKworCQkJYmlvX2VuZGlvKGJpbywgaW9fZXJyb3IpOwogCQl9Ci0KLQkJZnJlZV9pbyhpby0+bWQsIGlvKTsKIAl9CiB9CiAKQEAgLTU2Miw2ICs1NjgsNyBAQAogewogCWludCByID0gMDsKIAlzdHJ1Y3QgZG1fdGFyZ2V0X2lvICp0aW8gPSBiaW8tPmJpX3ByaXZhdGU7CisJc3RydWN0IGRtX2lvICppbyA9IHRpby0+aW87CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gdGlvLT5pby0+bWQ7CiAJZG1fZW5kaW9fZm4gZW5kaW8gPSB0aW8tPnRpLT50eXBlLT5lbmRfaW87CiAKQEAgLTU4NSwxNSArNTkyLDE0IEBACiAJCX0KIAl9CiAKLQlkZWNfcGVuZGluZyh0aW8tPmlvLCBlcnJvcik7Ci0KIAkvKgogCSAqIFN0b3JlIG1kIGZvciBjbGVhbnVwIGluc3RlYWQgb2YgdGlvIHdoaWNoIGlzIGFib3V0IHRvIGdldCBmcmVlZC4KIAkgKi8KIAliaW8tPmJpX3ByaXZhdGUgPSBtZC0+YnM7CiAKLQliaW9fcHV0KGJpbyk7CiAJZnJlZV90aW8obWQsIHRpbyk7CisJYmlvX3B1dChiaW8pOworCWRlY19wZW5kaW5nKGlvLCBlcnJvcik7CiB9CiAKIHN0YXRpYyBzZWN0b3JfdCBtYXhfaW9fbGVuKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCA0NDk1MTA0Li5hMzA3Zjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0yMTQsMTIgKzIxNCw3IEBACiAJcmV0dXJuIG1kZGV2OwogfQogCi1zdGF0aWMgdm9pZCBtZGRldl9kZWxheWVkX2RlbGV0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQotewotCW1kZGV2X3QgKm1kZGV2ID0gY29udGFpbmVyX29mKHdzLCBtZGRldl90LCBkZWxfd29yayk7Ci0Ja29iamVjdF9kZWwoJm1kZGV2LT5rb2JqKTsKLQlrb2JqZWN0X3B1dCgmbWRkZXYtPmtvYmopOwotfQorc3RhdGljIHZvaWQgbWRkZXZfZGVsYXllZF9kZWxldGUoc3RydWN0IHdvcmtfc3RydWN0ICp3cyk7CiAKIHN0YXRpYyB2b2lkIG1kZGV2X3B1dChtZGRldl90ICptZGRldikKIHsKQEAgLTQ3NCw3ICs0NjksNyBAQAogCSAqIGNhdXNlcyBFTk9UU1VQUCwgd2UgYWxsb2NhdGUgYSBzcGFyZSBiaW8uLi4KIAkgKi8KIAlzdHJ1Y3QgYmlvICpiaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU8sIDEpOwotCWludCBydyA9ICgxPDxCSU9fUlcpIHwgKDE8PEJJT19SV19TWU5DKTsKKwlpbnQgcncgPSAoMTw8QklPX1JXKSB8ICgxPDxCSU9fUldfU1lOQ0lPKSB8ICgxPDxCSU9fUldfVU5QTFVHKTsKIAogCWJpby0+YmlfYmRldiA9IHJkZXYtPmJkZXY7CiAJYmlvLT5iaV9zZWN0b3IgPSBzZWN0b3I7CkBAIC01MzEsNyArNTI2LDcgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKIAlpbnQgcmV0OwogCi0JcncgfD0gKDEgPDwgQklPX1JXX1NZTkMpOworCXJ3IHw9ICgxIDw8IEJJT19SV19TWU5DSU8pIHwgKDEgPDwgQklPX1JXX1VOUExVRyk7CiAKIAliaW8tPmJpX2JkZXYgPSBiZGV2OwogCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOwpAQCAtMzU0Miw2ICszNTM3LDIxIEBACiAKIGludCBtZHBfbWFqb3IgPSAwOwogCitzdGF0aWMgdm9pZCBtZGRldl9kZWxheWVkX2RlbGV0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCW1kZGV2X3QgKm1kZGV2ID0gY29udGFpbmVyX29mKHdzLCBtZGRldl90LCBkZWxfd29yayk7CisKKwlpZiAobWRkZXYtPnByaXZhdGUgPT0gJm1kX3JlZHVuZGFuY3lfZ3JvdXApIHsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtZGRldi0+a29iaiwgJm1kX3JlZHVuZGFuY3lfZ3JvdXApOworCQlpZiAobWRkZXYtPnN5c2ZzX2FjdGlvbikKKwkJCXN5c2ZzX3B1dChtZGRldi0+c3lzZnNfYWN0aW9uKTsKKwkJbWRkZXYtPnN5c2ZzX2FjdGlvbiA9IE5VTEw7CisJCW1kZGV2LT5wcml2YXRlID0gTlVMTDsKKwl9CisJa29iamVjdF9kZWwoJm1kZGV2LT5rb2JqKTsKKwlrb2JqZWN0X3B1dCgmbWRkZXYtPmtvYmopOworfQorCiBzdGF0aWMgaW50IG1kX2FsbG9jKGRldl90IGRldiwgY2hhciAqbmFtZSkKIHsKIAlzdGF0aWMgREVGSU5FX01VVEVYKGRpc2tzX211dGV4KTsKQEAgLTQwMzMsMTMgKzQwNDMsOSBAQAogCQkJbWRkZXYtPnF1ZXVlLT5tZXJnZV9idmVjX2ZuID0gTlVMTDsKIAkJCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gTlVMTDsKIAkJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSBOVUxMOwotCQkJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKLQkJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmbWRfcmVkdW5kYW5jeV9ncm91cCk7Ci0JCQkJaWYgKG1kZGV2LT5zeXNmc19hY3Rpb24pCi0JCQkJCXN5c2ZzX3B1dChtZGRldi0+c3lzZnNfYWN0aW9uKTsKLQkJCQltZGRldi0+c3lzZnNfYWN0aW9uID0gTlVMTDsKLQkJCX0KIAkJCW1vZHVsZV9wdXQobWRkZXYtPnBlcnMtPm93bmVyKTsKKwkJCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KQorCQkJCW1kZGV2LT5wcml2YXRlID0gJm1kX3JlZHVuZGFuY3lfZ3JvdXA7CiAJCQltZGRldi0+cGVycyA9IE5VTEw7CiAJCQkvKiB0ZWxsIHVzZXJzcGFjZSB0byBoYW5kbGUgJ2luYWN0aXZlJyAqLwogCQkJc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDAxZTNjZmYuLmUyNDY2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTEyMzcsOCArMTIzNyw5IEBACiAJdXBkYXRlX2hlYWRfcG9zKG1pcnJvciwgcjFfYmlvKTsKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyMV9iaW8tPnJlbWFpbmluZykpIHsKLQkJbWRfZG9uZV9zeW5jKG1kZGV2LCByMV9iaW8tPnNlY3RvcnMsIHVwdG9kYXRlKTsKKwkJc2VjdG9yX3QgcyA9IHIxX2Jpby0+c2VjdG9yczsKIAkJcHV0X2J1ZihyMV9iaW8pOworCQltZF9kb25lX3N5bmMobWRkZXYsIHMsIHVwdG9kYXRlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDY3MzZkNmQuLjczMDE2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMTIzNiw2ICsxMjM2LDcgQEAKIAkvKiBmb3IgcmVjb25zdHJ1Y3QsIHdlIGFsd2F5cyByZXNjaGVkdWxlIGFmdGVyIGEgcmVhZC4KIAkgKiBmb3IgcmVzeW5jLCBvbmx5IGFmdGVyIGFsbCByZWFkcwogCSAqLworCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1tkXS5yZGV2LCBjb25mLT5tZGRldik7CiAJaWYgKHRlc3RfYml0KFIxMEJJT19Jc1JlY292ZXIsICZyMTBfYmlvLT5zdGF0ZSkgfHwKIAkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcjEwX2Jpby0+cmVtYWluaW5nKSkgewogCQkvKiB3ZSBoYXZlIHJlYWQgYWxsIHRoZSBibG9ja3MsCkBAIC0xMjQzLDcgKzEyNDQsNiBAQAogCQkgKi8KIAkJcmVzY2hlZHVsZV9yZXRyeShyMTBfYmlvKTsKIAl9Ci0JcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW2RdLnJkZXYsIGNvbmYtPm1kZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgZW5kX3N5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpCkBAIC0xMjY0LDExICsxMjY0LDEzIEBACiAKIAl1cGRhdGVfaGVhZF9wb3MoaSwgcjEwX2Jpbyk7CiAKKwlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbZF0ucmRldiwgbWRkZXYpOwogCXdoaWxlIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyMTBfYmlvLT5yZW1haW5pbmcpKSB7CiAJCWlmIChyMTBfYmlvLT5tYXN0ZXJfYmlvID09IE5VTEwpIHsKIAkJCS8qIHRoZSBwcmltYXJ5IG9mIHNldmVyYWwgcmVjb3ZlcnkgYmlvcyAqLwotCQkJbWRfZG9uZV9zeW5jKG1kZGV2LCByMTBfYmlvLT5zZWN0b3JzLCAxKTsKKwkJCXNlY3Rvcl90IHMgPSByMTBfYmlvLT5zZWN0b3JzOwogCQkJcHV0X2J1ZihyMTBfYmlvKTsKKwkJCW1kX2RvbmVfc3luYyhtZGRldiwgcywgMSk7CiAJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCXIxMGJpb190ICpyMTBfYmlvMiA9IChyMTBiaW9fdCAqKXIxMF9iaW8tPm1hc3Rlcl9iaW87CkBAIC0xMjc2LDcgKzEyNzgsNiBAQAogCQkJcjEwX2JpbyA9IHIxMF9iaW8yOwogCQl9CiAJfQotCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1tkXS5yZGV2LCBtZGRldik7CiB9CiAKIC8qCkBAIC0xNzQ5LDggKzE3NTAsNiBAQAogCWlmICghZ29fZmFzdGVyICYmIGNvbmYtPm5yX3dhaXRpbmcpCiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOwogCi0JYml0bWFwX2NvbmRfZW5kX3N5bmMobWRkZXYtPmJpdG1hcCwgc2VjdG9yX25yKTsKLQogCS8qIEFnYWluLCB2ZXJ5IGRpZmZlcmVudCBjb2RlIGZvciByZXN5bmMgYW5kIHJlY292ZXJ5LgogCSAqIEJvdGggbXVzdCByZXN1bHQgaW4gYW4gcjEwYmlvIHdpdGggYSBsaXN0IG9mIGJpb3MgdGhhdAogCSAqIGhhdmUgYmlfZW5kX2lvLCBiaV9zZWN0b3IsIGJpX2JkZXYgc2V0LApAQCAtMTg4Niw2ICsxODg1LDggQEAKIAkJLyogcmVzeW5jLiBTY2hlZHVsZSBhIHJlYWQgZm9yIGV2ZXJ5IGJsb2NrIGF0IHRoaXMgdmlydCBvZmZzZXQgKi8KIAkJaW50IGNvdW50ID0gMDsKIAorCQliaXRtYXBfY29uZF9lbmRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0b3JfbnIpOworCiAJCWlmICghYml0bWFwX3N0YXJ0X3N5bmMobWRkZXYtPmJpdG1hcCwgc2VjdG9yX25yLAogCQkJCSAgICAgICAmc3luY19ibG9ja3MsIG1kZGV2LT5kZWdyYWRlZCkgJiYKIAkJICAgICFjb25mLT5mdWxsc3luYyAmJiAhdGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkgewpAQCAtMjAxMCwxMyArMjAxMSwxMyBAQAogCS8qIFRoZXJlIGlzIG5vd2hlcmUgdG8gd3JpdGUsIHNvIGFsbCBub24tc3luYwogCSAqIGRyaXZlcyBtdXN0IGJlIGZhaWxlZCwgc28gdHJ5IHRoZSBuZXh0IGNodW5rLi4uCiAJICovCi0JewotCXNlY3Rvcl90IHNlYyA9IG1heF9zZWN0b3IgLSBzZWN0b3JfbnI7Ci0Jc2VjdG9yc19za2lwcGVkICs9IHNlYzsKKwlpZiAoc2VjdG9yX25yICsgbWF4X3N5bmMgPCBtYXhfc2VjdG9yKQorCQltYXhfc2VjdG9yID0gc2VjdG9yX25yICsgbWF4X3N5bmM7CisKKwlzZWN0b3JzX3NraXBwZWQgKz0gKG1heF9zZWN0b3IgLSBzZWN0b3JfbnIpOwogCWNodW5rc19za2lwcGVkICsrOwogCXNlY3Rvcl9uciA9IG1heF9zZWN0b3I7CiAJZ290byBza2lwcGVkOwotCX0KIH0KIAogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKaW5kZXggZGU3YWRhZi4uNzg0MTJjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYwpAQCAtMzE4LDcgKzMxOCw2IEBACiAJCQkgICAgdTggKmNvbmZpZywgdTggKmNiKQogewogCXN0cnVjdCB0dW5lcl9zaW1wbGVfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwotCXU4IHR1bmVyYWRkcjsKIAlpbnQgcmM7CiAKIAkvKiB0diBub3JtIHNwZWNpZmljIHN0dWZmIGZvciBtdWx0aS1ub3JtIHR1bmVycyAqLwpAQCAtMzg3LDYgKzM4Niw3IEBACiAKIAljYXNlIFRVTkVSX1BISUxJUFNfVFVWMTIzNkQ6CiAJeworCQlzdHJ1Y3QgdHVuZXJfaTJjX3Byb3BzIGkyYyA9IHByaXYtPmkyY19wcm9wczsKIAkJLyogMHg0MCAtPiBBVFNDIGFudGVubmEgaW5wdXQgMSAqLwogCQkvKiAweDQ4IC0+IEFUU0MgYW50ZW5uYSBpbnB1dCAyICovCiAJCS8qIDB4MDAgLT4gTlRTQyBhbnRlbm5hIGlucHV0IDEgKi8KQEAgLTM5OCwxNyArMzk4LDE1IEBACiAJCQlidWZmZXJbMV0gPSAweDA0OwogCQl9CiAJCS8qIHNldCB0byB0aGUgY29ycmVjdCBtb2RlIChhbmFsb2cgb3IgZGlnaXRhbCkgKi8KLQkJdHVuZXJhZGRyID0gcHJpdi0+aTJjX3Byb3BzLmFkZHI7Ci0JCXByaXYtPmkyY19wcm9wcy5hZGRyID0gMHgwYTsKLQkJcmMgPSB0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZidWZmZXJbMF0sIDIpOworCQlpMmMuYWRkciA9IDB4MGE7CisJCXJjID0gdHVuZXJfaTJjX3hmZXJfc2VuZCgmaTJjLCAmYnVmZmVyWzBdLCAyKTsKIAkJaWYgKDIgIT0gcmMpCiAJCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAiCiAJCQkJICAgIihzaG91bGQgYmUgMilcbiIsIHJjKTsKLQkJcmMgPSB0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZidWZmZXJbMl0sIDIpOworCQlyYyA9IHR1bmVyX2kyY194ZmVyX3NlbmQoJmkyYywgJmJ1ZmZlclsyXSwgMik7CiAJCWlmICgyICE9IHJjKQogCQkJdHVuZXJfd2FybigiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgIgogCQkJCSAgICIoc2hvdWxkIGJlIDIpXG4iLCByYyk7Ci0JCXByaXYtPmkyY19wcm9wcy5hZGRyID0gdHVuZXJhZGRyOwogCQlicmVhazsKIAl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggNDBlYmRlNS4uYjAxOTg2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC01MSw2ICs1MSwxMCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZyIKIAorY29tbWVudCAiU3VwcG9ydGVkIEZpcmVXaXJlIChJRUVFIDEzOTQpIEFkYXB0ZXJzIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSUVFRTEzOTQKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvS2NvbmZpZyIKKwogY29tbWVudCAiU3VwcG9ydGVkIERWQiBGcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKaW5kZXggZjkxZTllYi4uNjA5MmE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKQEAgLTMsMyArMyw1IEBACiAjCiAKIG9iai15ICAgICAgICA6PSBkdmItY29yZS8gZnJvbnRlbmRzLyB0dHBjaS8gdHR1c2ItZGVjLyB0dHVzYi1idWRnZXQvIGIyYzIvIGJ0OHh4LyBkdmItdXNiLyBwbHV0bzIvIHNpYW5vLyBkbTExMDUvCisKK29iai0kKENPTkZJR19EVkJfRklSRURUVikJKz0gZmlyZXdpcmUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMKaW5kZXggYjM4NmNjNi4uNDUxOTc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWh3LWZpbHRlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwpAQCAtMTkyLDYgKzE5Miw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZmxleGNvcF9waWRfZmVlZF9jb250cm9sKTsKIAogdm9pZCBmbGV4Y29wX2h3X2ZpbHRlcl9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKaW5kZXggNWIzMGRmYy4uNzZlMzdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwpAQCAtMTMsOSArMTMsOSBAQAogbW9kdWxlX3BhcmFtKGVuYWJsZV9waWRfZmlsdGVyaW5nLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfcGlkX2ZpbHRlcmluZywgImVuYWJsZSBoYXJkd2FyZSBwaWQgZmlsdGVyaW5nOiBzdXBwb3J0ZWQgdmFsdWVzOiAwIChmdWxsdHMpLCAxIik7CiAKLXN0YXRpYyBpbnQgaXJxX2Noa19pbnR2Oworc3RhdGljIGludCBpcnFfY2hrX2ludHYgPSAxMDA7CiBtb2R1bGVfcGFyYW0oaXJxX2Noa19pbnR2LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpcnFfY2hrX2ludHYsICJzZXQgdGhlIGludGVydmFsIGZvciBJUlEgd2F0Y2hkb2cgKGN1cnJlbnRseSBqdXN0IGRlYnVnZ2luZykuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9jaGtfaW50diwgInNldCB0aGUgaW50ZXJ2YWwgZm9yIElSUSBzdHJlYW1pbmcgd2F0Y2hkb2cuIik7CiAKICNpZmRlZiBDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9ERUJVRwogI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pIFwKQEAgLTM0LDcgKzM0LDkgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKDE9aW5mbywyPXJlZ3MsND1UUyw4PWlycWRtYSAofC1hYmxlKSkuIiBERUJTVEFUVVMpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKwkic2V0IGRlYnVnIGxldmVsICgxPWluZm8sMj1yZWdzLDQ9VFMsOD1pcnFkbWEsMTY9Y2hlY2sgKHwtYWJsZSkpLiIKKwkgREVCU1RBVFVTKTsKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xIgogI2RlZmluZSBEUklWRVJfTkFNRSAiVGVjaG5pc2F0L0IyQzIgRmxleENvcCBJSS9JSWIvSUlJIERpZ2l0YWwgVFYgUENJIERyaXZlciIKQEAgLTU4LDYgKzYwLDggQEAKIAlpbnQgYWN0aXZlX2RtYTFfYWRkcjsgLyogMCA9IGFkZHIwIG9mIGRtYTE7IDEgPSBhZGRyMSBvZiBkbWExICovCiAJdTMyIGxhc3RfZG1hMV9jdXJfcG9zOyAvKiBwb3NpdGlvbiBvZiB0aGUgcG9pbnRlciBsYXN0IHRpbWUgdGhlIHRpbWVyL3BhY2tldCBpcnEgb2NjdXJlZCAqLwogCWludCBjb3VudDsKKwlpbnQgY291bnRfcHJldjsKKwlpbnQgc3RyZWFtX3Byb2JsZW07CiAKIAlzcGlubG9ja190IGlycV9sb2NrOwogCkBAIC0xMDMsMTggKzEwNywzMiBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZsZXhjb3BfcGNpLCBpcnFfY2hlY2tfd29yay53b3JrKTsKIAlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0gZmNfcGNpLT5mY19kZXY7CiAKLQlmbGV4Y29wX2liaV92YWx1ZSB2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxzcmFtX2Rlc3RfcmVnXzcxNCk7CisJaWYgKGZjLT5mZWVkY291bnQpIHsKIAotCWZsZXhjb3BfZHVtcF9yZWcoZmNfcGNpLT5mY19kZXYsZG1hMV8wMDAsNCk7CisJCWlmIChmY19wY2ktPmNvdW50ID09IGZjX3BjaS0+Y291bnRfcHJldikgeworCQkJZGViX2Noaygibm8gSVJRIHNpbmNlIHRoZSBsYXN0IGNoZWNrXG4iKTsKKwkJCWlmIChmY19wY2ktPnN0cmVhbV9wcm9ibGVtKysgPT0gMykgeworCQkJCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZDsKIAotCWlmICh2LnNyYW1fZGVzdF9yZWdfNzE0Lm5ldF9vdmZsb3dfZXJyb3IpCi0JCWRlYl9jaGsoInNyYW0gbmV0X292Zmxvd19lcnJvclxuIik7Ci0JaWYgKHYuc3JhbV9kZXN0X3JlZ183MTQubWVkaWFfb3ZmbG93X2Vycm9yKQotCQlkZWJfY2hrKCJzcmFtIG1lZGlhX292Zmxvd19lcnJvclxuIik7Ci0JaWYgKHYuc3JhbV9kZXN0X3JlZ183MTQuY2FpX292Zmxvd19lcnJvcikKLQkJZGViX2Noaygic3JhbSBjYWlfb3ZmbG93X2Vycm9yXG4iKTsKLQlpZiAodi5zcmFtX2Rlc3RfcmVnXzcxNC5jYWlfb3ZmbG93X2Vycm9yKQotCQlkZWJfY2hrKCJzcmFtIGNhaV9vdmZsb3dfZXJyb3JcbiIpOworCQkJCXNwaW5fbG9ja19pcnEoJmZjLT5kZW11eC5sb2NrKTsKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlZWQsICZmYy0+ZGVtdXguZmVlZF9saXN0LAorCQkJCQlsaXN0X2hlYWQpIHsKKwkJCQkJZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBmZWVkLCAwKTsKKwkJCQl9CisKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlZWQsICZmYy0+ZGVtdXguZmVlZF9saXN0LAorCQkJCQlsaXN0X2hlYWQpIHsKKwkJCQkJZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBmZWVkLCAxKTsKKwkJCQl9CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZmYy0+ZGVtdXgubG9jayk7CisKKwkJCQlmY19wY2ktPnN0cmVhbV9wcm9ibGVtID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZjX3BjaS0+c3RyZWFtX3Byb2JsZW0gPSAwOworCQkJZmNfcGNpLT5jb3VudF9wcmV2ID0gZmNfcGNpLT5jb3VudDsKKwkJfQorCX0KIAogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZmNfcGNpLT5pcnFfY2hlY2tfd29yaywKIAkJCW1zZWNzX3RvX2ppZmZpZXMoaXJxX2Noa19pbnR2IDwgMTAwID8gMTAwIDogaXJxX2Noa19pbnR2KSk7CkBAIC0yMTYsMTYgKzIzNCwxMiBAQAogCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYyxGQ19ETUFfMSwxKTsKIAkJZGViX2lycSgiSVJRIGVuYWJsZWRcbiIpOwogCisJCWZjX3BjaS0+Y291bnRfcHJldiA9IGZjX3BjaS0+Y291bnQ7CisKIC8vCQlmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIgPSAwOwogLy8JCWZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoZmMsRkNfRE1BXzEsMSk7CiAKLQkJaWYgKGlycV9jaGtfaW50diA+IDApCi0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmZjX3BjaS0+aXJxX2NoZWNrX3dvcmssCi0JCQkJCW1zZWNzX3RvX2ppZmZpZXMoaXJxX2Noa19pbnR2IDwgMTAwID8gMTAwIDogaXJxX2Noa19pbnR2KSk7CiAJfSBlbHNlIHsKLQkJaWYgKGlycV9jaGtfaW50diA+IDApCi0JCQljYW5jZWxfZGVsYXllZF93b3JrKCZmY19wY2ktPmlycV9jaGVja193b3JrKTsKLQogCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYyxGQ19ETUFfMSwwKTsKIAkJZGViX2lycSgiSVJRIGRpc2FibGVkXG4iKTsKIApAQCAtMjk5LDggKzMxMyw2IEBACiAJCQkJCUlSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgZmNfcGNpKSkgIT0gMCkKIAkJZ290byBlcnJfcGNpX2lvdW5tYXA7CiAKLQotCiAJZmNfcGNpLT5pbml0X3N0YXRlIHw9IEZDX1BDSV9JTklUOwogCXJldHVybiByZXQ7CiAKQEAgLTM3NSw2ICszODcsMTAgQEAKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZmY19wY2ktPmlycV9jaGVja193b3JrLCBmbGV4Y29wX3BjaV9pcnFfY2hlY2tfd29yayk7CiAKKwkJaWYgKGlycV9jaGtfaW50diA+IDApCisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmZjX3BjaS0+aXJxX2NoZWNrX3dvcmssCisJCW1zZWNzX3RvX2ppZmZpZXMoaXJxX2Noa19pbnR2IDwgMTAwID8gMTAwIDogaXJxX2Noa19pbnR2KSk7CisKIAlyZXR1cm4gcmV0OwogCiBlcnJfZmNfZXhpdDoKQEAgLTM5Myw2ICs0MDksOSBAQAogewogCXN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCisJaWYgKGlycV9jaGtfaW50diA+IDApCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmZjX3BjaS0+aXJxX2NoZWNrX3dvcmspOworCiAJZmxleGNvcF9wY2lfZG1hX2V4aXQoZmNfcGNpKTsKIAlmbGV4Y29wX2RldmljZV9leGl0KGZjX3BjaS0+ZmNfZGV2KTsKIAlmbGV4Y29wX3BjaV9leGl0KGZjX3BjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCmluZGV4IDY3NjQxM2EuLjkxMDY4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCkBAIC0yMTIsOCArMjEyLDcgQEAKIAl2MjEwLnN3X3Jlc2V0XzIxMC5CbG9ja19yZXNldF9lbmFibGUgPSAweGIyOwogCiAJZmMtPndyaXRlX2liaV9yZWcoZmMsc3dfcmVzZXRfMjEwLHYyMTApOwotCW1zbGVlcCgxKTsKLQorCXVkZWxheSgxMDAwKTsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCx2MjA4X3NhdmUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCmluZGV4IDI5ZThmMTUuLmZlYzFkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCkBAIC0xNjgzLDcgKzE2ODMsNyBAQAogCiBzdGF0aWMgaW50IGRzdF9nZXRfdHVuaW5nX2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JcmV0dXJuIGRzdF9hbGdvOworCXJldHVybiBkc3RfYWxnbyA/IERWQkZFX0FMR09fSFcgOiBEVkJGRV9BTEdPX1NXOwogfQogCiBzdGF0aWMgaW50IGRzdF9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKaW5kZXggMGM3MzNjNi4uMDY5ZDg0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKQEAgLTM2NCwxNiArMzY0LDE1IEBACiAJCQkJICAgICAgIGVudW0gZG14X3N1Y2Nlc3Mgc3VjY2VzcykKIHsKIAlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyID0gZmlsdGVyLT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmIChkbXhkZXZmaWx0ZXItPmJ1ZmZlci5lcnJvcikgewogCQl3YWtlX3VwKCZkbXhkZXZmaWx0ZXItPmJ1ZmZlci5xdWV1ZSk7CiAJCXJldHVybiAwOwogCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrKTsKIAlpZiAoZG14ZGV2ZmlsdGVyLT5zdGF0ZSAhPSBETVhERVZfU1RBVEVfR08pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWRlbF90aW1lcigmZG14ZGV2ZmlsdGVyLT50aW1lcik7CkBAIC0zOTIsNyArMzkxLDcgQEAKIAl9CiAJaWYgKGRteGRldmZpbHRlci0+cGFyYW1zLnNlYy5mbGFncyAmIERNWF9PTkVTSE9UKQogCQlkbXhkZXZmaWx0ZXItPnN0YXRlID0gRE1YREVWX1NUQVRFX0RPTkU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2spOwogCXdha2VfdXAoJmRteGRldmZpbHRlci0+YnVmZmVyLnF1ZXVlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQwNCwxMiArNDAzLDExIEBACiB7CiAJc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciA9IGZlZWQtPnByaXY7CiAJc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpidWZmZXI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7CiAJaWYgKGRteGRldmZpbHRlci0+cGFyYW1zLnBlcy5vdXRwdXQgPT0gRE1YX09VVF9ERUNPREVSKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDE5LDcgKzQxNyw3IEBACiAJZWxzZQogCQlidWZmZXIgPSAmZG14ZGV2ZmlsdGVyLT5kZXYtPmR2cl9idWZmZXI7CiAJaWYgKGJ1ZmZlci0+ZXJyb3IpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrKTsKIAkJd2FrZV91cCgmYnVmZmVyLT5xdWV1ZSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTQzMCw3ICs0MjgsNyBAQAogCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaChidWZmZXIpOwogCQlidWZmZXItPmVycm9yID0gcmV0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7CiAJd2FrZV91cCgmYnVmZmVyLT5xdWV1ZSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCmluZGV4IGEyYzFmZDUuLmUyZWNhMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCkBAIC0zOTksOSArMzk5LDcgQEAKIHZvaWQgZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKHN0cnVjdCBkdmJfZGVtdXggKmRlbXV4LCBjb25zdCB1OCAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVtdXgtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmRlbXV4LT5sb2NrKTsKIAogCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChidWZbMF0gPT0gMHg0NykKQEAgLTQwOSwxNyArNDA3LDE2IEBACiAJCWJ1ZiArPSAxODg7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVtdXgtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmZGVtdXgtPmxvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKGR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cyk7CiAKIHZvaWQgZHZiX2RteF9zd2ZpbHRlcihzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHAgPSAwLCBpLCBqOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlbXV4LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZkZW11eC0+bG9jayk7CiAKIAlpZiAoZGVtdXgtPnRzYnVmcCkgewogCQlpID0gZGVtdXgtPnRzYnVmcDsKQEAgLTQ1MiwxOCArNDQ5LDE3IEBACiAJfQogCiBiYWlsb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlbXV4LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJmRlbXV4LT5sb2NrKTsKIH0KIAogRVhQT1JUX1NZTUJPTChkdmJfZG14X3N3ZmlsdGVyKTsKIAogdm9pZCBkdmJfZG14X3N3ZmlsdGVyXzIwNChzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHAgPSAwLCBpLCBqOwogCXU4IHRtcHBhY2tbMTg4XTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZW11eC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmZGVtdXgtPmxvY2spOwogCiAJaWYgKGRlbXV4LT50c2J1ZnApIHsKIAkJaSA9IGRlbXV4LT50c2J1ZnA7CkBAIC01MDQsNyArNTAwLDcgQEAKIAl9CiAKIGJhaWxvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVtdXgtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmZGVtdXgtPmxvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKGR2Yl9kbXhfc3dmaWx0ZXJfMjA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggODQzNDA3Ny4uOGRjYjNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTEyOTAsOSArMTI5MCw2IEBACiAJCWRwcmludGsoIiVzKCkgRmluYWxpc2VkIHByb3BlcnR5IGNhY2hlXG4iLCBfX2Z1bmNfXyk7CiAJCWR0dl9wcm9wZXJ0eV9jYWNoZV9zdWJtaXQoZmUpOwogCi0JCS8qIFJlcXVlc3QgdGhlIHNlYXJjaCBhbGdvcml0aG0gdG8gc2VhcmNoICovCi0JCWZlcHJpdi0+YWxnb19zdGF0dXMgfD0gRFZCRkVfQUxHT19TRUFSQ0hfQUdBSU47Ci0KIAkJciB8PSBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KGlub2RlLCBmaWxlLCBGRV9TRVRfRlJPTlRFTkQsCiAJCQkmZmVwcml2LT5wYXJhbWV0ZXJzKTsKIAkJYnJlYWs7CkBAIC0xNzE3LDYgKzE3MTQsMTAgQEAKIAkJCWZlcHJpdi0+bWluX2RlbGF5ID0gKGR2Yl9vdmVycmlkZV90dW5lX2RlbGF5ICogSFopIC8gMTAwMDsKIAogCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9SRVRVTkU7CisKKwkJLyogUmVxdWVzdCB0aGUgc2VhcmNoIGFsZ29yaXRobSB0byBzZWFyY2ggKi8KKwkJZmVwcml2LT5hbGdvX3N0YXR1cyB8PSBEVkJGRV9BTEdPX1NFQVJDSF9BR0FJTjsKKwogCQlkdmJfZnJvbnRlbmRfd2FrZXVwKGZlKTsKIAkJZHZiX2Zyb250ZW5kX2FkZF9ldmVudChmZSwgMCk7CiAJCWZlcHJpdi0+c3RhdHVzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MDI4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9LY29uZmlnCkBAIC0wLDAgKzEsMjIgQEAKK2NvbmZpZyBEVkJfRklSRURUVgorCXRyaXN0YXRlICJGaXJlRFRWIGFuZCBGbG9wcHlEVFYiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJRUVFMTM5NAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIERWQiByZWNlaXZlcnMgZnJvbSBEaWdpdGFsIEV2ZXJ5d2hlcmUKKwkgIHdoaWNoIGFyZSBjb25uZWN0ZWQgdmlhIElFRUUgMTM5NCAoRmlyZVdpcmUpLgorCisJICBUaGVzZSBkZXZpY2VzIGRvbid0IGhhdmUgYW4gTVBFRyBkZWNvZGVyIGJ1aWx0IGluLAorCSAgc28geW91IG5lZWQgYW4gZXh0ZXJuYWwgc29mdHdhcmUgZGVjb2RlciB0byB3YXRjaCBUVi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZmlyZWR0di4KKworaWYgRFZCX0ZJUkVEVFYKKworY29uZmlnIERWQl9GSVJFRFRWX0lFRUUxMzk0CisJZGVmX2Jvb2wgSUVFRTEzOTQKKworY29uZmlnIERWQl9GSVJFRFRWX0lOUFVUCisJZGVmX2Jvb2wgSU5QVVQgPSB5IHx8IChJTlBVVCA9IG0gJiYgRFZCX0ZJUkVEVFYgPSBtKQorCitlbmRpZiAjIERWQl9GSVJFRFRWCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMzQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKK29iai0kKENPTkZJR19EVkJfRklSRURUVikgKz0gZmlyZWR0di5vCisKK2ZpcmVkdHYteSA6PSBmaXJlZHR2LWF2Yy5vIGZpcmVkdHYtY2kubyBmaXJlZHR2LWR2Yi5vIGZpcmVkdHYtZmUubworZmlyZWR0di0kKENPTkZJR19EVkJfRklSRURUVl9JRUVFMTM5NCkgKz0gZmlyZWR0di0xMzk0Lm8KK2ZpcmVkdHYtJChDT05GSUdfRFZCX0ZJUkVEVFZfSU5QVVQpICAgICs9IGZpcmVkdHYtcmMubworCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorY2NmbGFncy0kKENPTkZJR19EVkJfRklSRURUVl9JRUVFMTM5NCkgKz0gLUlkcml2ZXJzL2llZWUxMzk0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtMTM5NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjA3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYwpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIEZpcmVEVFYgZHJpdmVyIChmb3JtZXJseSBrbm93biBhcyBGaXJlU0FUKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBBbmRyZWFzIE1vbml0emVyIDxhbmR5QG1vbml0emVyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEJlbiBCYWNreCA8YmVuQGJiYWNreC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSGVucmlrIEt1cmVsaWQgPGhlbnJpa0BrdXJlbGlkLnNlPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGRtYS5oPgorI2luY2x1ZGUgPGNzcjEyMTIuaD4KKyNpbmNsdWRlIDxoaWdobGV2ZWwuaD4KKyNpbmNsdWRlIDxob3N0cy5oPgorI2luY2x1ZGUgPGllZWUxMzk0Lmg+CisjaW5jbHVkZSA8aXNvLmg+CisjaW5jbHVkZSA8bm9kZW1nci5oPgorCisjaW5jbHVkZSAiZmlyZWR0di5oIgorCitzdGF0aWMgTElTVF9IRUFEKG5vZGVfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5vZGVfbGlzdF9sb2NrKTsKKworI2RlZmluZSBGSVJFV0lSRV9IRUFERVJfU0laRQk0CisjZGVmaW5lIENJUF9IRUFERVJfU0laRQkJOAorCitzdGF0aWMgdm9pZCByYXdpc29fYWN0aXZpdHlfY2Ioc3RydWN0IGhwc2JfaXNvICppc28pCit7CisJc3RydWN0IGZpcmVkdHYgKmYsICpmZHR2ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaSwgbnVtLCBwYWNrZXQ7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5vZGVfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmbm9kZV9saXN0LCBsaXN0KQorCQlpZiAoZi0+YmFja2VuZF9kYXRhID09IGlzbykgeworCQkJZmR0diA9IGY7CisJCQlicmVhazsKKwkJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5vZGVfbGlzdF9sb2NrLCBmbGFncyk7CisKKwlwYWNrZXQgPSBpc28tPmZpcnN0X3BhY2tldDsKKwludW0gPSBocHNiX2lzb19uX3JlYWR5KGlzbyk7CisKKwlpZiAoIWZkdHYpIHsKKwkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJyZWNlaXZlZCBhdCB1bmtub3duIGlzbyBjaGFubmVsXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrLCBwYWNrZXQgPSAocGFja2V0ICsgMSkgJSBpc28tPmJ1Zl9wYWNrZXRzKSB7CisJCWJ1ZiA9IGRtYV9yZWdpb25faSgmaXNvLT5kYXRhX2J1ZiwgdW5zaWduZWQgY2hhciwKKwkJCWlzby0+aW5mb3NbcGFja2V0XS5vZmZzZXQgKyBDSVBfSEVBREVSX1NJWkUpOworCQljb3VudCA9IChpc28tPmluZm9zW3BhY2tldF0ubGVuIC0gQ0lQX0hFQURFUl9TSVpFKSAvCisJCQkoMTg4ICsgRklSRVdJUkVfSEVBREVSX1NJWkUpOworCisJCS8qIGlnbm9yZSBlbXB0eSBwYWNrZXQgKi8KKwkJaWYgKGlzby0+aW5mb3NbcGFja2V0XS5sZW4gPD0gQ0lQX0hFQURFUl9TSVpFKQorCQkJY29udGludWU7CisKKwkJd2hpbGUgKGNvdW50LS0pIHsKKwkJCWlmIChidWZbRklSRVdJUkVfSEVBREVSX1NJWkVdID09IDB4NDcpCisJCQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZmZHR2LT5kZW11eCwKKwkJCQkJCSZidWZbRklSRVdJUkVfSEVBREVSX1NJWkVdLCAxKTsKKwkJCWVsc2UKKwkJCQlkZXZfZXJyKGZkdHYtPmRldmljZSwKKwkJCQkJInNraXBwaW5nIGludmFsaWQgcGFja2V0XG4iKTsKKwkJCWJ1ZiArPSAxODggKyBGSVJFV0lSRV9IRUFERVJfU0laRTsKKwkJfQorCX0KK291dDoKKwlocHNiX2lzb19yZWN2X3JlbGVhc2VfcGFja2V0cyhpc28sIG51bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5vZGVfZW50cnkgKm5vZGVfb2Yoc3RydWN0IGZpcmVkdHYgKmZkdHYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZHR2LT5kZXZpY2UsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgZGV2aWNlKS0+bmU7Cit9CisKK3N0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSwgX19iZTMyIGFyZykKK3sKKwlyZXR1cm4gaHBzYl9ub2RlX2xvY2sobm9kZV9vZihmZHR2KSwgYWRkciwgRVhUQ09ERV9DT01QQVJFX1NXQVAsIGRhdGEsCisJCQkgICAgICAoX19mb3JjZSBxdWFkbGV0X3QpYXJnKTsKK30KKworc3RhdGljIGludCBub2RlX3JlYWQoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXJldHVybiBocHNiX25vZGVfcmVhZChub2RlX29mKGZkdHYpLCBhZGRyLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgaW50IG5vZGVfd3JpdGUoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXJldHVybiBocHNiX25vZGVfd3JpdGUobm9kZV9vZihmZHR2KSwgYWRkciwgZGF0YSwgbGVuKTsKK30KKworI2RlZmluZSBGRFRWX0lTT19CVUZGRVJfUEFDS0VUUyAyNTYKKyNkZWZpbmUgRkRUVl9JU09fQlVGRkVSX1NJWkUgKEZEVFZfSVNPX0JVRkZFUl9QQUNLRVRTICogMjAwKQorCitzdGF0aWMgaW50IHN0YXJ0X2lzbyhzdHJ1Y3QgZmlyZWR0diAqZmR0dikKK3sKKwlzdHJ1Y3QgaHBzYl9pc28gKmlzb19oYW5kbGU7CisJaW50IHJldDsKKworCWlzb19oYW5kbGUgPSBocHNiX2lzb19yZWN2X2luaXQobm9kZV9vZihmZHR2KS0+aG9zdCwKKwkJCQlGRFRWX0lTT19CVUZGRVJfU0laRSwgRkRUVl9JU09fQlVGRkVSX1BBQ0tFVFMsCisJCQkJZmR0di0+aXNvY2hhbm5lbCwgSFBTQl9JU09fRE1BX0RFRkFVTFQsCisJCQkJLTEsIC8qIHN0YXQuY29uZmlnLmlycV9pbnRlcnZhbCAqLworCQkJCXJhd2lzb19hY3Rpdml0eV9jYik7CisJaWYgKGlzb19oYW5kbGUgPT0gTlVMTCkgeworCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImNhbm5vdCBpbml0aWFsaXplIGlzbyByZWNlaXZlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZkdHYtPmJhY2tlbmRfZGF0YSA9IGlzb19oYW5kbGU7CisKKwlyZXQgPSBocHNiX2lzb19yZWN2X3N0YXJ0KGlzb19oYW5kbGUsIC0xLCAtMSwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiY2Fubm90IHN0YXJ0IGlzbyByZWNlaXZlXG4iKTsKKwkJaHBzYl9pc29fc2h1dGRvd24oaXNvX2hhbmRsZSk7CisJCWZkdHYtPmJhY2tlbmRfZGF0YSA9IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BfaXNvKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQoreworCXN0cnVjdCBocHNiX2lzbyAqaXNvX2hhbmRsZSA9IGZkdHYtPmJhY2tlbmRfZGF0YTsKKworCWlmIChpc29faGFuZGxlICE9IE5VTEwpIHsKKwkJaHBzYl9pc29fc3RvcChpc29faGFuZGxlKTsKKwkJaHBzYl9pc29fc2h1dGRvd24oaXNvX2hhbmRsZSk7CisJfQorCWZkdHYtPmJhY2tlbmRfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlyZWR0dl9iYWNrZW5kIGZkdHZfMTM5NF9iYWNrZW5kID0geworCS5sb2NrCQk9IG5vZGVfbG9jaywKKwkucmVhZAkJPSBub2RlX3JlYWQsCisJLndyaXRlCQk9IG5vZGVfd3JpdGUsCisJLnN0YXJ0X2lzbwk9IHN0YXJ0X2lzbywKKwkuc3RvcF9pc28JPSBzdG9wX2lzbywKK307CisKK3N0YXRpYyB2b2lkIGZjcF9yZXF1ZXN0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIGludCBkaXJlY3Rpb24sCisJCQlpbnQgY3RzLCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZmlyZWR0diAqZiwgKmZkdHYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN1OworCisJaWYgKGxlbmd0aCA9PSAwIHx8IChkYXRhWzBdICYgMHhmMCkgIT0gMCkKKwkJcmV0dXJuOworCisJc3UgPSBkYXRhWzFdICYgMHg3OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5vZGVfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmbm9kZV9saXN0LCBsaXN0KQorCQlpZiAobm9kZV9vZihmKS0+aG9zdCA9PSBob3N0ICYmCisJCSAgICBub2RlX29mKGYpLT5ub2RlaWQgPT0gbm9kZWlkICYmCisJCSAgICAoZi0+c3VidW5pdCA9PSBzdSB8fCAoZi0+c3VidW5pdCA9PSAwICYmIHN1ID09IDB4NykpKSB7CisJCQlmZHR2ID0gZjsKKwkJCWJyZWFrOworCQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm9kZV9saXN0X2xvY2ssIGZsYWdzKTsKKworCWlmIChmZHR2KQorCQlhdmNfcmVjdihmZHR2LCBkYXRhLCBsZW5ndGgpOworfQorCitzdGF0aWMgaW50IG5vZGVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQgPQorCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCBkZXZpY2UpOworCXN0cnVjdCBmaXJlZHR2ICpmZHR2OworCWludCBrdl9sZW4sIGVycjsKKwl2b2lkICprdl9zdHI7CisKKwlrdl9sZW4gPSAodWQtPm1vZGVsX25hbWVfa3YtPnZhbHVlLmxlYWYubGVuIC0gMikgKiBzaXplb2YocXVhZGxldF90KTsKKwlrdl9zdHIgPSBDU1IxMjEyX1RFWFRVQUxfREVTQ1JJUFRPUl9MRUFGX0RBVEEodWQtPm1vZGVsX25hbWVfa3YpOworCisJZmR0diA9IGZkdHZfYWxsb2MoZGV2LCAmZmR0dl8xMzk0X2JhY2tlbmQsIGt2X3N0ciwga3ZfbGVuKTsKKwlpZiAoIWZkdHYpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiB1ZGV2J3MgcGF0aF9pZCBzY3JpcHQ6ICBVc2UgdGhlIGZ3LWhvc3QncyBkZXYKKwkgKiBpbnN0ZWFkIG9mIHRoZSB1bml0IGRpcmVjdG9yeSdzIGRldiBhcyBwYXJlbnQgb2YgdGhlIGlucHV0IGRldmljZS4KKwkgKi8KKwllcnIgPSBmZHR2X3JlZ2lzdGVyX3JjKGZkdHYsIGRldi0+cGFyZW50LT5wYXJlbnQpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9mcmVlOworCisJc3Bpbl9sb2NrX2lycSgmbm9kZV9saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmZkdHYtPmxpc3QsICZub2RlX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmbm9kZV9saXN0X2xvY2spOworCisJZXJyID0gYXZjX2lkZW50aWZ5X3N1YnVuaXQoZmR0dik7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJZXJyID0gZmR0dl9kdmJfcmVnaXN0ZXIoZmR0dik7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJYXZjX3JlZ2lzdGVyX3JlbW90ZV9jb250cm9sKGZkdHYpOworCXJldHVybiAwOworZmFpbDoKKwlzcGluX2xvY2tfaXJxKCZub2RlX2xpc3RfbG9jayk7CisJbGlzdF9kZWwoJmZkdHYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmbm9kZV9saXN0X2xvY2spOworCWZkdHZfdW5yZWdpc3Rlcl9yYyhmZHR2KTsKK2ZhaWxfZnJlZToKKwlrZnJlZShmZHR2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5vZGVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmlyZWR0diAqZmR0diA9IGRldi0+ZHJpdmVyX2RhdGE7CisKKwlmZHR2X2R2Yl91bnJlZ2lzdGVyKGZkdHYpOworCisJc3Bpbl9sb2NrX2lycSgmbm9kZV9saXN0X2xvY2spOworCWxpc3RfZGVsKCZmZHR2LT5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJm5vZGVfbGlzdF9sb2NrKTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmZkdHYtPnJlbW90ZV9jdHJsX3dvcmspOworCWZkdHZfdW5yZWdpc3Rlcl9yYyhmZHR2KTsKKworCWtmcmVlKGZkdHYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vZGVfdXBkYXRlKHN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQpCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHYgPSB1ZC0+ZGV2aWNlLmRyaXZlcl9kYXRhOworCisJaWYgKGZkdHYtPmlzb2NoYW5uZWwgPj0gMCkKKwkJY21wX2VzdGFibGlzaF9wcF9jb25uZWN0aW9uKGZkdHYsIGZkdHYtPnN1YnVuaXQsCisJCQkJCSAgICBmZHR2LT5pc29jaGFubmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBocHNiX3Byb3RvY29sX2RyaXZlciBmZHR2X2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZmlyZWR0diIsCisJLnVwZGF0ZQkJPSBub2RlX3VwZGF0ZSwKKwkuZHJpdmVyICAgICAgICAgPSB7CisJCS5wcm9iZSAgPSBub2RlX3Byb2JlLAorCQkucmVtb3ZlID0gbm9kZV9yZW1vdmUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaHBzYl9oaWdobGV2ZWwgZmR0dl9oaWdobGV2ZWwgPSB7CisJLm5hbWUJCT0gImZpcmVkdHYiLAorCS5mY3BfcmVxdWVzdAk9IGZjcF9yZXF1ZXN0LAorfTsKKworaW50IF9faW5pdCBmZHR2XzEzOTRfaW5pdChzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIGlkX3RhYmxlW10pCit7CisJaW50IHJldDsKKworCWhwc2JfcmVnaXN0ZXJfaGlnaGxldmVsKCZmZHR2X2hpZ2hsZXZlbCk7CisJZmR0dl9kcml2ZXIuaWRfdGFibGUgPSBpZF90YWJsZTsKKwlyZXQgPSBocHNiX3JlZ2lzdGVyX3Byb3RvY29sKCZmZHR2X2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImZpcmVkdHY6IGZhaWxlZCB0byByZWdpc3RlciBwcm90b2NvbFxuIik7CisJCWhwc2JfdW5yZWdpc3Rlcl9oaWdobGV2ZWwoJmZkdHZfaGlnaGxldmVsKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2V4aXQgZmR0dl8xMzk0X2V4aXQodm9pZCkKK3sKKwlocHNiX3VucmVnaXN0ZXJfcHJvdG9jb2woJmZkdHZfZHJpdmVyKTsKKwlocHNiX3VucmVnaXN0ZXJfaGlnaGxldmVsKCZmZHR2X2hpZ2hsZXZlbCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTVkOWNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtMCwwICsxLDEzMTUgQEAKKy8qCisgKiBGaXJlRFRWIGRyaXZlciAoZm9ybWVybHkga25vd24gYXMgRmlyZVNBVCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQW5kcmVhcyBNb25pdHplciA8YW5keUBtb25pdHplci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQmVuIEJhY2t4IDxiZW5AYmJhY2t4LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIZW5yaWsgS3VyZWxpZCA8aGVucmlrQGt1cmVsaWQuc2U+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSAiZmlyZWR0di5oIgorCisjZGVmaW5lIEZDUF9DT01NQU5EX1JFR0lTVEVSCQkweGZmZmZmMDAwMGIwMFVMTAorCisjZGVmaW5lIEFWQ19DVFlQRV9DT05UUk9MCQkweDAKKyNkZWZpbmUgQVZDX0NUWVBFX1NUQVRVUwkJMHgxCisjZGVmaW5lIEFWQ19DVFlQRV9OT1RJRlkJCTB4MworCisjZGVmaW5lIEFWQ19SRVNQT05TRV9BQ0NFUFRFRAkJMHg5CisjZGVmaW5lIEFWQ19SRVNQT05TRV9TVEFCTEUJCTB4YworI2RlZmluZSBBVkNfUkVTUE9OU0VfQ0hBTkdFRAkJMHhkCisjZGVmaW5lIEFWQ19SRVNQT05TRV9JTlRFUklNCQkweGYKKworI2RlZmluZSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSCQkoMHgwNSA8PCAzKQorI2RlZmluZSBBVkNfU1VCVU5JVF9UWVBFX1VOSVQJCSgweDFmIDw8IDMpCisKKyNkZWZpbmUgQVZDX09QQ09ERV9WRU5ET1IJCTB4MDAKKyNkZWZpbmUgQVZDX09QQ09ERV9SRUFEX0RFU0NSSVBUT1IJMHgwOQorI2RlZmluZSBBVkNfT1BDT0RFX0RTSVQJCQkweGM4CisjZGVmaW5lIEFWQ19PUENPREVfRFNECQkJMHhjYgorCisjZGVmaW5lIERFU0NSSVBUT1JfVFVORVJfU1RBVFVTIAkweDgwCisjZGVmaW5lIERFU0NSSVBUT1JfU1VCVU5JVF9JREVOVElGSUVSCTB4MDAKKworI2RlZmluZSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wCTB4MDAgLyogT1VJIG9mIERpZ2l0YWwgRXZlcnl3aGVyZSAqLworI2RlZmluZSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xCTB4MTIKKyNkZWZpbmUgU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMgkweDg3CisKKyNkZWZpbmUgU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0wgMHgwYQorI2RlZmluZSBTRkVfVkVORE9SX09QQ09ERV9MTkJfQ09OVFJPTAkJMHg1MgorI2RlZmluZSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0sJCTB4NTggLyogZm9yIERWQi1TICovCisKKyNkZWZpbmUgU0ZFX1ZFTkRPUl9PUENPREVfR0VUX0ZJUk1XQVJFX1ZFUlNJT04JMHgwMAorI2RlZmluZSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBCQkweDU2CisjZGVmaW5lIFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1QJCTB4NTcKKyNkZWZpbmUgU0ZFX1ZFTkRPUl9PUENPREVfQ0lTVEFUVVMJCTB4NTkKKyNkZWZpbmUgU0ZFX1ZFTkRPUl9PUENPREVfVFVORV9RUFNLMgkJMHg2MCAvKiBmb3IgRFZCLVMyICovCisKKyNkZWZpbmUgU0ZFX1ZFTkRPUl9UQUdfQ0FfUkVTRVQJCQkweDAwCisjZGVmaW5lIFNGRV9WRU5ET1JfVEFHX0NBX0FQUExJQ0FUSU9OX0lORk8JMHgwMQorI2RlZmluZSBTRkVfVkVORE9SX1RBR19DQV9QTVQJCQkweDAyCisjZGVmaW5lIFNGRV9WRU5ET1JfVEFHX0NBX0RBVEVfVElNRQkJMHgwNAorI2RlZmluZSBTRkVfVkVORE9SX1RBR19DQV9NTUkJCQkweDA1CisjZGVmaW5lIFNGRV9WRU5ET1JfVEFHX0NBX0VOVEVSX01FTlUJCTB4MDcKKworI2RlZmluZSBFTjUwMjIxX0xJU1RfTUFOQUdFTUVOVF9PTkxZCTB4MDMKKyNkZWZpbmUgRU41MDIyMV9UQUdfQVBQX0lORk8JCTB4OWY4MDIxCisjZGVmaW5lIEVONTAyMjFfVEFHX0NBX0lORk8JCTB4OWY4MDMxCisKK3N0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSB7CisJaW50IGxlbmd0aDsKKwl1OCBjdHlwZTsKKwl1OCBzdWJ1bml0OworCXU4IG9wY29kZTsKKwl1OCBvcGVyYW5kWzUwOV07Cit9OworCitzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lIHsKKwlpbnQgbGVuZ3RoOworCXU4IHJlc3BvbnNlOworCXU4IHN1YnVuaXQ7CisJdTggb3Bjb2RlOworCXU4IG9wZXJhbmRbNTA5XTsKK307CisKKyNkZWZpbmUgQVZDX0RFQlVHX0ZDUF9TVUJBQ1RJT05TCTEKKyNkZWZpbmUgQVZDX0RFQlVHX0ZDUF9QQVlMT0FEUwkJMgorCitzdGF0aWMgaW50IGF2Y19kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXZjX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlZlcmJvc2UgbG9nZ2luZyAoZGVmYXVsdCA9IDAiCisJIiwgRkNQIHN1YmFjdGlvbnMgPSAiCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19GQ1BfU1VCQUNUSU9OUykKKwkiLCBGQ1AgcGF5bG9hZHMgPSAiCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19GQ1BfUEFZTE9BRFMpCisJIiwgb3IgYWxsID0gLTEpIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19mY3BfY3R5cGUodW5zaWduZWQgaW50IGN0eXBlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjdHlwZXNbXSA9IHsKKwkJWzB4MF0gPSAiQ09OVFJPTCIsCQlbMHgxXSA9ICJTVEFUVVMiLAorCQlbMHgyXSA9ICJTUEVDSUZJQyBJTlFVSVJZIiwJWzB4M10gPSAiTk9USUZZIiwKKwkJWzB4NF0gPSAiR0VORVJBTCBJTlFVSVJZIiwJWzB4OF0gPSAiTk9UIElNUExFTUVOVEVEIiwKKwkJWzB4OV0gPSAiQUNDRVBURUQiLAkJWzB4YV0gPSAiUkVKRUNURUQiLAorCQlbMHhiXSA9ICJJTiBUUkFOU0lUSU9OIiwJWzB4Y10gPSAiSU1QTEVNRU5URUQvU1RBQkxFIiwKKwkJWzB4ZF0gPSAiQ0hBTkdFRCIsCQlbMHhmXSA9ICJJTlRFUklNIiwKKwl9OworCWNvbnN0IGNoYXIgKnJldCA9IGN0eXBlIDwgQVJSQVlfU0laRShjdHlwZXMpID8gY3R5cGVzW2N0eXBlXSA6IE5VTEw7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogIj8iOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfZmNwX29wY29kZSh1bnNpZ25lZCBpbnQgb3Bjb2RlLAorCQkJCSAgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgQVZDX09QQ09ERV9WRU5ET1I6CQkJYnJlYWs7CisJY2FzZSBBVkNfT1BDT0RFX1JFQURfREVTQ1JJUFRPUjoJcmV0dXJuICJSZWFkRGVzY3JpcHRvciI7CisJY2FzZSBBVkNfT1BDT0RFX0RTSVQ6CQkJcmV0dXJuICJEaXJlY3RTZWxlY3RJbmZvLlR5cGUiOworCWNhc2UgQVZDX09QQ09ERV9EU0Q6CQkJcmV0dXJuICJEaXJlY3RTZWxlY3REYXRhIjsKKwlkZWZhdWx0OgkJCQlyZXR1cm4gIj8iOworCX0KKworCWlmIChsZW5ndGggPCA3IHx8CisJICAgIGRhdGFbM10gIT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMCB8fAorCSAgICBkYXRhWzRdICE9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzEgfHwKKwkgICAgZGF0YVs1XSAhPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yKQorCQlyZXR1cm4gIlZlbmRvciI7CisKKwlzd2l0Y2ggKGRhdGFbNl0pIHsKKwljYXNlIFNGRV9WRU5ET1JfT1BDT0RFX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MOglyZXR1cm4gIlJlZ2lzdGVyUkMiOworCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfTE5CX0NPTlRST0w6CQlyZXR1cm4gIkxOQkNvbnRyb2wiOworCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfVFVORV9RUFNLOgkJcmV0dXJuICJUdW5lUVBTSyI7CisJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOgkJCXJldHVybiAiSG9zdDJDQSI7CisJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOgkJCXJldHVybiAiQ0EySG9zdCI7CisJfQorCXJldHVybiAiVmVuZG9yIjsKK30KKworc3RhdGljIHZvaWQgZGVidWdfZmNwKGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworCXVuc2lnbmVkIGludCBzdWJ1bml0X3R5cGUsIHN1YnVuaXRfaWQsIG9wOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IGRhdGFbMF0gPiA3ID8gIkZDUCA8LSAiIDogIkZDUCAtPiAiOworCisJaWYgKGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19GQ1BfU1VCQUNUSU9OUykgeworCQlzdWJ1bml0X3R5cGUgPSBkYXRhWzFdID4+IDM7CisJCXN1YnVuaXRfaWQgPSBkYXRhWzFdICYgNzsKKwkJb3AgPSBzdWJ1bml0X3R5cGUgPT0gMHgxZSB8fCBzdWJ1bml0X2lkID09IDUgPyB+MCA6IGRhdGFbMl07CisJCXByaW50ayhLRVJOX0lORk8gIiVzc3U9JXguJXggbD0lZDogJS04cyAtICVzXG4iLAorCQkgICAgICAgcHJlZml4LCBzdWJ1bml0X3R5cGUsIHN1YnVuaXRfaWQsIGxlbmd0aCwKKwkJICAgICAgIGRlYnVnX2ZjcF9jdHlwZShkYXRhWzBdKSwKKwkJICAgICAgIGRlYnVnX2ZjcF9vcGNvZGUob3AsIGRhdGEsIGxlbmd0aCkpOworCX0KKworCWlmIChhdmNfZGVidWcgJiBBVkNfREVCVUdfRkNQX1BBWUxPQURTKQorCQlwcmludF9oZXhfZHVtcChLRVJOX0lORk8sIHByZWZpeCwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsCisJCQkgICAgICAgZGF0YSwgbGVuZ3RoLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgX19hdmNfd3JpdGUoc3RydWN0IGZpcmVkdHYgKmZkdHYsCisJCWNvbnN0IHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYywgc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqcikKK3sKKwlpbnQgZXJyLCByZXRyeTsKKworCWlmIChyKQorCQlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSBmYWxzZTsKKworCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDY7IHJldHJ5KyspIHsKKwkJaWYgKHVubGlrZWx5KGF2Y19kZWJ1ZykpCisJCQlkZWJ1Z19mY3AoJmMtPmN0eXBlLCBjLT5sZW5ndGgpOworCisJCWVyciA9IGZkdHYtPmJhY2tlbmQtPndyaXRlKGZkdHYsIEZDUF9DT01NQU5EX1JFR0lTVEVSLAorCQkJCQkgICAodm9pZCAqKSZjLT5jdHlwZSwgYy0+bGVuZ3RoKTsKKwkJaWYgKGVycikgeworCQkJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gdHJ1ZTsKKwkJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiRkNQIGNvbW1hbmQgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpZiAoIXIpCisJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBBVi9DIHNwZWNzIHNheSB0aGF0IGFuc3dlcnMgc2hvdWxkIGJlIHNlbnQgd2l0aGluIDE1MCBtcy4KKwkJICogVGltZSBvdXQgYWZ0ZXIgMjAwIG1zLgorCQkgKi8KKwkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChmZHR2LT5hdmNfd2FpdCwKKwkJCQkgICAgICAgZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkLAorCQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKDIwMCkpICE9IDApIHsKKwkJCXItPmxlbmd0aCA9IGZkdHYtPnJlc3BvbnNlX2xlbmd0aDsKKwkJCW1lbWNweSgmci0+cmVzcG9uc2UsIGZkdHYtPnJlc3BvbnNlLCByLT5sZW5ndGgpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkZDUCByZXNwb25zZSB0aW1lZCBvdXRcbiIpOworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IGF2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJY29uc3Qgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyKQoreworCWludCByZXQ7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5hdmNfbXV0ZXgpKQorCQlyZXR1cm4gLUVJTlRSOworCisJcmV0ID0gX19hdmNfd3JpdGUoZmR0diwgYywgcik7CisKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGF2Y19yZWN2KHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPQorCQkJZGF0YSAtIG9mZnNldG9mKHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUsIHJlc3BvbnNlKTsKKworCWlmICh1bmxpa2VseShhdmNfZGVidWcpKQorCQlkZWJ1Z19mY3AoZGF0YSwgbGVuZ3RoKTsKKworCWlmIChsZW5ndGggPj0gOCAmJgorCSAgICByLT5vcGVyYW5kWzBdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzAgJiYKKwkgICAgci0+b3BlcmFuZFsxXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xICYmCisJICAgIHItPm9wZXJhbmRbMl0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMiAmJgorCSAgICByLT5vcGVyYW5kWzNdID09IFNGRV9WRU5ET1JfT1BDT0RFX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MKSB7CisJCWlmIChyLT5yZXNwb25zZSA9PSBBVkNfUkVTUE9OU0VfQ0hBTkdFRCkgeworCQkJZmR0dl9oYW5kbGVfcmMoZmR0diwKKwkJCSAgICByLT5vcGVyYW5kWzRdIDw8IDggfCByLT5vcGVyYW5kWzVdKTsKKwkJCXNjaGVkdWxlX3dvcmsoJmZkdHYtPnJlbW90ZV9jdHJsX3dvcmspOworCQl9IGVsc2UgaWYgKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9JTlRFUklNKSB7CisJCQlkZXZfaW5mbyhmZHR2LT5kZXZpY2UsCisJCQkJICJyZW1vdGUgY29udHJvbCByZXN1bHQgPSAlZFxuIiwgci0+cmVzcG9uc2UpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQpIHsKKwkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJvdXQtb2Ytb3JkZXIgQVZDIHJlc3BvbnNlLCBpZ25vcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbWVtY3B5KGZkdHYtPnJlc3BvbnNlLCBkYXRhLCBsZW5ndGgpOworCWZkdHYtPnJlc3BvbnNlX2xlbmd0aCA9IGxlbmd0aDsKKworCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CisJd2FrZV91cCgmZmR0di0+YXZjX3dhaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0dW5pbmcgY29tbWFuZCBmb3Igc2V0dGluZyB0aGUgcmVsYXRpdmUgTE5CIGZyZXF1ZW5jeQorICogKG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEFWQyBzdGFuZGFyZCkKKyAqLworc3RhdGljIHZvaWQgYXZjX3R1bmVyX3R1bmVxcHNrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAorCQkJICAgICAgIHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYykKK3sKKwljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKKworCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOworCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOworCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOworCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0s7CisKKwljLT5vcGVyYW5kWzRdID0gKHBhcmFtcy0+ZnJlcXVlbmN5ID4+IDI0KSAmIDB4ZmY7CisJYy0+b3BlcmFuZFs1XSA9IChwYXJhbXMtPmZyZXF1ZW5jeSA+PiAxNikgJiAweGZmOworCWMtPm9wZXJhbmRbNl0gPSAocGFyYW1zLT5mcmVxdWVuY3kgPj4gOCkgJiAweGZmOworCWMtPm9wZXJhbmRbN10gPSBwYXJhbXMtPmZyZXF1ZW5jeSAmIDB4ZmY7CisKKwljLT5vcGVyYW5kWzhdID0gKChwYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZSAvIDEwMDApID4+IDgpICYgMHhmZjsKKwljLT5vcGVyYW5kWzldID0gKHBhcmFtcy0+dS5xcHNrLnN5bWJvbF9yYXRlIC8gMTAwMCkgJiAweGZmOworCisJc3dpdGNoIChwYXJhbXMtPnUucXBzay5mZWNfaW5uZXIpIHsKKwljYXNlIEZFQ18xXzI6CWMtPm9wZXJhbmRbMTBdID0gMHgxOyBicmVhazsKKwljYXNlIEZFQ18yXzM6CWMtPm9wZXJhbmRbMTBdID0gMHgyOyBicmVhazsKKwljYXNlIEZFQ18zXzQ6CWMtPm9wZXJhbmRbMTBdID0gMHgzOyBicmVhazsKKwljYXNlIEZFQ181XzY6CWMtPm9wZXJhbmRbMTBdID0gMHg0OyBicmVhazsKKwljYXNlIEZFQ183Xzg6CWMtPm9wZXJhbmRbMTBdID0gMHg1OyBicmVhazsKKwljYXNlIEZFQ180XzU6CisJY2FzZSBGRUNfOF85OgorCWNhc2UgRkVDX0FVVE86CisJZGVmYXVsdDoJYy0+b3BlcmFuZFsxMF0gPSAweDA7CisJfQorCisJaWYgKGZkdHYtPnZvbHRhZ2UgPT0gMHhmZikKKwkJYy0+b3BlcmFuZFsxMV0gPSAweGZmOworCWVsc2UgaWYgKGZkdHYtPnZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTgpIC8qIHBvbGFyaXNhdGlvbiAqLworCQljLT5vcGVyYW5kWzExXSA9IDA7CisJZWxzZQorCQljLT5vcGVyYW5kWzExXSA9IDE7CisKKwlpZiAoZmR0di0+dG9uZSA9PSAweGZmKQorCQljLT5vcGVyYW5kWzEyXSA9IDB4ZmY7CisJZWxzZSBpZiAoZmR0di0+dG9uZSA9PSBTRUNfVE9ORV9PTikgLyogYmFuZCAqLworCQljLT5vcGVyYW5kWzEyXSA9IDE7CisJZWxzZQorCQljLT5vcGVyYW5kWzEyXSA9IDA7CisKKwlpZiAoZmR0di0+dHlwZSA9PSBGSVJFRFRWX0RWQl9TMikgeworCQljLT5vcGVyYW5kWzEzXSA9IDB4MTsKKwkJYy0+b3BlcmFuZFsxNF0gPSAweGZmOworCQljLT5vcGVyYW5kWzE1XSA9IDB4ZmY7CisJCWMtPmxlbmd0aCA9IDIwOworCX0gZWxzZSB7CisJCWMtPmxlbmd0aCA9IDE2OworCX0KK30KKworc3RhdGljIHZvaWQgYXZjX3R1bmVyX2RzZF9kdmJfYyhzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKKwkJCQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCit7CisJYy0+b3Bjb2RlID0gQVZDX09QQ09ERV9EU0Q7CisKKwljLT5vcGVyYW5kWzBdID0gMDsgICAgLyogc291cmNlIHBsdWcgKi8KKwljLT5vcGVyYW5kWzFdID0gMHhkMjsgLyogc3ViZnVuY3Rpb24gcmVwbGFjZSAqLworCWMtPm9wZXJhbmRbMl0gPSAweDIwOyAvKiBzeXN0ZW0gaWQgPSBEVkIgKi8KKwljLT5vcGVyYW5kWzNdID0gMHgwMDsgLyogYW50ZW5uYSBudW1iZXIgKi8KKwljLT5vcGVyYW5kWzRdID0gMHgxMTsgLyogc3lzdGVtX3NwZWNpZmljX211bHRpcGxleCBzZWxlY3Rpb25fbGVuZ3RoICovCisKKwkvKiBtdWx0aXBsZXhfdmFsaWRfZmxhZ3MsIGhpZ2ggYnl0ZSAqLworCWMtPm9wZXJhbmRbNV0gPSAgIDAgPDwgNyAvKiByZXNlcnZlZCAqLworCQkJfCAwIDw8IDYgLyogUG9sYXJpc2F0aW9uICovCisJCQl8IDAgPDwgNSAvKiBPcmJpdGFsX1BvcyAqLworCQkJfCAxIDw8IDQgLyogRnJlcXVlbmN5ICovCisJCQl8IDEgPDwgMyAvKiBTeW1ib2xfUmF0ZSAqLworCQkJfCAwIDw8IDIgLyogRkVDX291dGVyICovCisJCQl8IChwYXJhbXMtPnUucWFtLmZlY19pbm5lciAgIT0gRkVDX0FVVE8gPyAxIDw8IDEgOiAwKQorCQkJfCAocGFyYW1zLT51LnFhbS5tb2R1bGF0aW9uICE9IFFBTV9BVVRPID8gMSA8PCAwIDogMCk7CisKKwkvKiBtdWx0aXBsZXhfdmFsaWRfZmxhZ3MsIGxvdyBieXRlICovCisJYy0+b3BlcmFuZFs2XSA9ICAgMCA8PCA3IC8qIE5ldHdvcmtJRCAqLworCQkJfCAwIDw8IDAgLyogcmVzZXJ2ZWQgKi8gOworCisJYy0+b3BlcmFuZFs3XSAgPSAweDAwOworCWMtPm9wZXJhbmRbOF0gID0gMHgwMDsKKwljLT5vcGVyYW5kWzldICA9IDB4MDA7CisJYy0+b3BlcmFuZFsxMF0gPSAweDAwOworCisJYy0+b3BlcmFuZFsxMV0gPSAoKChwYXJhbXMtPmZyZXF1ZW5jeSAvIDQwMDApID4+IDE2KSAmIDB4ZmYpIHwgKDIgPDwgNik7CisJYy0+b3BlcmFuZFsxMl0gPSAoKHBhcmFtcy0+ZnJlcXVlbmN5IC8gNDAwMCkgPj4gOCkgJiAweGZmOworCWMtPm9wZXJhbmRbMTNdID0gKHBhcmFtcy0+ZnJlcXVlbmN5IC8gNDAwMCkgJiAweGZmOworCWMtPm9wZXJhbmRbMTRdID0gKChwYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZSAvIDEwMDApID4+IDEyKSAmIDB4ZmY7CisJYy0+b3BlcmFuZFsxNV0gPSAoKHBhcmFtcy0+dS5xcHNrLnN5bWJvbF9yYXRlIC8gMTAwMCkgPj4gNCkgJiAweGZmOworCWMtPm9wZXJhbmRbMTZdID0gKChwYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZSAvIDEwMDApIDw8IDQpICYgMHhmMDsKKwljLT5vcGVyYW5kWzE3XSA9IDB4MDA7CisKKwlzd2l0Y2ggKHBhcmFtcy0+dS5xcHNrLmZlY19pbm5lcikgeworCWNhc2UgRkVDXzFfMjoJYy0+b3BlcmFuZFsxOF0gPSAweDE7IGJyZWFrOworCWNhc2UgRkVDXzJfMzoJYy0+b3BlcmFuZFsxOF0gPSAweDI7IGJyZWFrOworCWNhc2UgRkVDXzNfNDoJYy0+b3BlcmFuZFsxOF0gPSAweDM7IGJyZWFrOworCWNhc2UgRkVDXzVfNjoJYy0+b3BlcmFuZFsxOF0gPSAweDQ7IGJyZWFrOworCWNhc2UgRkVDXzdfODoJYy0+b3BlcmFuZFsxOF0gPSAweDU7IGJyZWFrOworCWNhc2UgRkVDXzhfOToJYy0+b3BlcmFuZFsxOF0gPSAweDY7IGJyZWFrOworCWNhc2UgRkVDXzRfNToJYy0+b3BlcmFuZFsxOF0gPSAweDg7IGJyZWFrOworCWNhc2UgRkVDX0FVVE86CisJZGVmYXVsdDoJYy0+b3BlcmFuZFsxOF0gPSAweDA7CisJfQorCisJc3dpdGNoIChwYXJhbXMtPnUucWFtLm1vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8xNjoJYy0+b3BlcmFuZFsxOV0gPSAweDA4OyBicmVhazsKKwljYXNlIFFBTV8zMjoJYy0+b3BlcmFuZFsxOV0gPSAweDEwOyBicmVhazsKKwljYXNlIFFBTV82NDoJYy0+b3BlcmFuZFsxOV0gPSAweDE4OyBicmVhazsKKwljYXNlIFFBTV8xMjg6CWMtPm9wZXJhbmRbMTldID0gMHgyMDsgYnJlYWs7CisJY2FzZSBRQU1fMjU2OgljLT5vcGVyYW5kWzE5XSA9IDB4Mjg7IGJyZWFrOworCWNhc2UgUUFNX0FVVE86CisJZGVmYXVsdDoJYy0+b3BlcmFuZFsxOV0gPSAweDAwOworCX0KKworCWMtPm9wZXJhbmRbMjBdID0gMHgwMDsKKwljLT5vcGVyYW5kWzIxXSA9IDB4MDA7CisJLyogTnJfb2ZfZHNkX3NlbF9zcGVjcyA9IDAgLT4gbm8gUElEcyBhcmUgdHJhbnNtaXR0ZWQgKi8KKwljLT5vcGVyYW5kWzIyXSA9IDB4MDA7CisKKwljLT5sZW5ndGggPSAyODsKK30KKworc3RhdGljIHZvaWQgYXZjX3R1bmVyX2RzZF9kdmJfdChzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKKwkJCQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCit7CisJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9mZG0gPSAmcGFyYW1zLT51Lm9mZG07CisKKwljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX0RTRDsKKworCWMtPm9wZXJhbmRbMF0gPSAwOyAgICAvKiBzb3VyY2UgcGx1ZyAqLworCWMtPm9wZXJhbmRbMV0gPSAweGQyOyAvKiBzdWJmdW5jdGlvbiByZXBsYWNlICovCisJYy0+b3BlcmFuZFsyXSA9IDB4MjA7IC8qIHN5c3RlbSBpZCA9IERWQiAqLworCWMtPm9wZXJhbmRbM10gPSAweDAwOyAvKiBhbnRlbm5hIG51bWJlciAqLworCWMtPm9wZXJhbmRbNF0gPSAweDBjOyAvKiBzeXN0ZW1fc3BlY2lmaWNfbXVsdGlwbGV4IHNlbGVjdGlvbl9sZW5ndGggKi8KKworCS8qIG11bHRpcGxleF92YWxpZF9mbGFncywgaGlnaCBieXRlICovCisJYy0+b3BlcmFuZFs1XSA9CisJICAgICAgMCA8PCA3IC8qIHJlc2VydmVkICovCisJICAgIHwgMSA8PCA2IC8qIENlbnRlckZyZXF1ZW5jeSAqLworCSAgICB8IChvZmRtLT5iYW5kd2lkdGggICAgICAhPSBCQU5EV0lEVEhfQVVUTyAgICAgICAgPyAxIDw8IDUgOiAwKQorCSAgICB8IChvZmRtLT5jb25zdGVsbGF0aW9uICAhPSBRQU1fQVVUTyAgICAgICAgICAgICAgPyAxIDw8IDQgOiAwKQorCSAgICB8IChvZmRtLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gIT0gSElFUkFSQ0hZX0FVVE8gPyAxIDw8IDMgOiAwKQorCSAgICB8IChvZmRtLT5jb2RlX3JhdGVfSFAgICAhPSBGRUNfQVVUTyAgICAgICAgICAgICAgPyAxIDw8IDIgOiAwKQorCSAgICB8IChvZmRtLT5jb2RlX3JhdGVfTFAgICAhPSBGRUNfQVVUTyAgICAgICAgICAgICAgPyAxIDw8IDEgOiAwKQorCSAgICB8IChvZmRtLT5ndWFyZF9pbnRlcnZhbCAhPSBHVUFSRF9JTlRFUlZBTF9BVVRPICAgPyAxIDw8IDAgOiAwKTsKKworCS8qIG11bHRpcGxleF92YWxpZF9mbGFncywgbG93IGJ5dGUgKi8KKwljLT5vcGVyYW5kWzZdID0KKwkgICAgICAwIDw8IDcgLyogTmV0d29ya0lEICovCisJICAgIHwgKG9mZG0tPnRyYW5zbWlzc2lvbl9tb2RlICE9IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8gPyAxIDw8IDYgOiAwKQorCSAgICB8IDAgPDwgNSAvKiBPdGhlckZyZXF1ZW5jeUZsYWcgKi8KKwkgICAgfCAwIDw8IDAgLyogcmVzZXJ2ZWQgKi8gOworCisJYy0+b3BlcmFuZFs3XSAgPSAweDA7CisJYy0+b3BlcmFuZFs4XSAgPSAocGFyYW1zLT5mcmVxdWVuY3kgLyAxMCkgPj4gMjQ7CisJYy0+b3BlcmFuZFs5XSAgPSAoKHBhcmFtcy0+ZnJlcXVlbmN5IC8gMTApID4+IDE2KSAmIDB4ZmY7CisJYy0+b3BlcmFuZFsxMF0gPSAoKHBhcmFtcy0+ZnJlcXVlbmN5IC8gMTApID4+ICA4KSAmIDB4ZmY7CisJYy0+b3BlcmFuZFsxMV0gPSAocGFyYW1zLT5mcmVxdWVuY3kgLyAxMCkgJiAweGZmOworCisJc3dpdGNoIChvZmRtLT5iYW5kd2lkdGgpIHsKKwljYXNlIEJBTkRXSURUSF83X01IWjoJYy0+b3BlcmFuZFsxMl0gPSAweDIwOyBicmVhazsKKwljYXNlIEJBTkRXSURUSF84X01IWjoKKwljYXNlIEJBTkRXSURUSF82X01IWjoJLyogbm90IGRlZmluZWQgYnkgQVZDIHNwZWMgKi8KKwljYXNlIEJBTkRXSURUSF9BVVRPOgorCWRlZmF1bHQ6CQljLT5vcGVyYW5kWzEyXSA9IDB4MDA7CisJfQorCisJc3dpdGNoIChvZmRtLT5jb25zdGVsbGF0aW9uKSB7CisJY2FzZSBRQU1fMTY6CWMtPm9wZXJhbmRbMTNdID0gMSA8PCA2OyBicmVhazsKKwljYXNlIFFBTV82NDoJYy0+b3BlcmFuZFsxM10gPSAyIDw8IDY7IGJyZWFrOworCWNhc2UgUVBTSzoKKwlkZWZhdWx0OgljLT5vcGVyYW5kWzEzXSA9IDB4MDA7CisJfQorCisJc3dpdGNoIChvZmRtLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24pIHsKKwljYXNlIEhJRVJBUkNIWV8xOgljLT5vcGVyYW5kWzEzXSB8PSAxIDw8IDM7IGJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzI6CWMtPm9wZXJhbmRbMTNdIHw9IDIgPDwgMzsgYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfNDoJYy0+b3BlcmFuZFsxM10gfD0gMyA8PCAzOyBicmVhazsKKwljYXNlIEhJRVJBUkNIWV9BVVRPOgorCWNhc2UgSElFUkFSQ0hZX05PTkU6CisJZGVmYXVsdDoJCWJyZWFrOworCX0KKworCXN3aXRjaCAob2ZkbS0+Y29kZV9yYXRlX0hQKSB7CisJY2FzZSBGRUNfMl8zOgljLT5vcGVyYW5kWzEzXSB8PSAxOyBicmVhazsKKwljYXNlIEZFQ18zXzQ6CWMtPm9wZXJhbmRbMTNdIHw9IDI7IGJyZWFrOworCWNhc2UgRkVDXzVfNjoJYy0+b3BlcmFuZFsxM10gfD0gMzsgYnJlYWs7CisJY2FzZSBGRUNfN184OgljLT5vcGVyYW5kWzEzXSB8PSA0OyBicmVhazsKKwljYXNlIEZFQ18xXzI6CisJZGVmYXVsdDoJYnJlYWs7CisJfQorCisJc3dpdGNoIChvZmRtLT5jb2RlX3JhdGVfTFApIHsKKwljYXNlIEZFQ18yXzM6CWMtPm9wZXJhbmRbMTRdID0gMSA8PCA1OyBicmVhazsKKwljYXNlIEZFQ18zXzQ6CWMtPm9wZXJhbmRbMTRdID0gMiA8PCA1OyBicmVhazsKKwljYXNlIEZFQ181XzY6CWMtPm9wZXJhbmRbMTRdID0gMyA8PCA1OyBicmVhazsKKwljYXNlIEZFQ183Xzg6CWMtPm9wZXJhbmRbMTRdID0gNCA8PCA1OyBicmVhazsKKwljYXNlIEZFQ18xXzI6CisJZGVmYXVsdDoJYy0+b3BlcmFuZFsxNF0gPSAweDAwOyBicmVhazsKKwl9CisKKwlzd2l0Y2ggKG9mZG0tPmd1YXJkX2ludGVydmFsKSB7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OgljLT5vcGVyYW5kWzE0XSB8PSAxIDw8IDM7IGJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgljLT5vcGVyYW5kWzE0XSB8PSAyIDw8IDM7IGJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV80OgljLT5vcGVyYW5kWzE0XSB8PSAzIDw8IDM7IGJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjoKKwljYXNlIEdVQVJEX0lOVEVSVkFMX0FVVE86CisJZGVmYXVsdDoJCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKG9mZG0tPnRyYW5zbWlzc2lvbl9tb2RlKSB7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzoJYy0+b3BlcmFuZFsxNF0gfD0gMSA8PCAxOyBicmVhazsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgorCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfQVVUTzoKKwlkZWZhdWx0OgkJCWJyZWFrOworCX0KKworCWMtPm9wZXJhbmRbMTVdID0gMHgwMDsgLyogbmV0d29ya19JRFswXSAqLworCWMtPm9wZXJhbmRbMTZdID0gMHgwMDsgLyogbmV0d29ya19JRFsxXSAqLworCS8qIE5yX29mX2RzZF9zZWxfc3BlY3MgPSAwIC0+IG5vIFBJRHMgYXJlIHRyYW5zbWl0dGVkICovCisJYy0+b3BlcmFuZFsxN10gPSAweDAwOworCisJYy0+bGVuZ3RoID0gMjQ7Cit9CisKK2ludCBhdmNfdHVuZXJfZHNkKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKKwljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CisKKwlzd2l0Y2ggKGZkdHYtPnR5cGUpIHsKKwljYXNlIEZJUkVEVFZfRFZCX1M6CisJY2FzZSBGSVJFRFRWX0RWQl9TMjogYXZjX3R1bmVyX3R1bmVxcHNrKGZkdHYsIHBhcmFtcywgYyk7IGJyZWFrOworCWNhc2UgRklSRURUVl9EVkJfQzogYXZjX3R1bmVyX2RzZF9kdmJfYyhwYXJhbXMsIGMpOyBicmVhazsKKwljYXNlIEZJUkVEVFZfRFZCX1Q6IGF2Y190dW5lcl9kc2RfZHZiX3QocGFyYW1zLCBjKTsgYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCisJCXJldHVybiAtRUlPOworCisJbXNsZWVwKDUwMCk7CisjaWYgMAorCS8qIEZJWE1FOiAqLworCS8qIHU4ICpzdGF0dXMgd2FzIGFuIG91dC1wYXJhbWV0ZXIgb2YgYXZjX3R1bmVyX2RzZCwgdW51c2VkIGJ5IGNhbGxlciAqLworCWlmIChzdGF0dXMpCisJCSpzdGF0dXMgPSByLT5vcGVyYW5kWzJdOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdmNfdHVuZXJfc2V0X3BpZHMoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHVuc2lnbmVkIGNoYXIgcGlkYywgdTE2IHBpZFtdKQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlpbnQgcG9zLCBrOworCisJaWYgKHBpZGMgPiAxNiAmJiBwaWRjICE9IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCisJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOworCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKKwljLT5vcGNvZGUgID0gQVZDX09QQ09ERV9EU0Q7CisKKwljLT5vcGVyYW5kWzBdID0gMDsJLyogc291cmNlIHBsdWcgKi8KKwljLT5vcGVyYW5kWzFdID0gMHhkMjsJLyogc3ViZnVuY3Rpb24gcmVwbGFjZSAqLworCWMtPm9wZXJhbmRbMl0gPSAweDIwOwkvKiBzeXN0ZW0gaWQgPSBEVkIgKi8KKwljLT5vcGVyYW5kWzNdID0gMHgwMDsJLyogYW50ZW5uYSBudW1iZXIgKi8KKwljLT5vcGVyYW5kWzRdID0gMHgwMDsJLyogc3lzdGVtX3NwZWNpZmljX211bHRpcGxleCBzZWxlY3Rpb25fbGVuZ3RoICovCisJYy0+b3BlcmFuZFs1XSA9IHBpZGM7CS8qIE5yX29mX2RzZF9zZWxfc3BlY3MgKi8KKworCXBvcyA9IDY7CisJaWYgKHBpZGMgIT0gMHhmZikKKwkJZm9yIChrID0gMDsgayA8IHBpZGM7IGsrKykgeworCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAweDEzOyAvKiBmbG93ZnVuY3Rpb24gcmVsYXkgKi8KKwkJCWMtPm9wZXJhbmRbcG9zKytdID0gMHg4MDsgLyogZHNkX3NlbF9zcGVjX3ZhbGlkX2ZsYWdzIC0+IFBJRCAqLworCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAocGlkW2tdID4+IDgpICYgMHgxZjsKKwkJCWMtPm9wZXJhbmRbcG9zKytdID0gcGlkW2tdICYgMHhmZjsKKwkJCWMtPm9wZXJhbmRbcG9zKytdID0gMHgwMDsgLyogdGFibGVJRCAqLworCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAweDAwOyAvKiBmaWx0ZXJfbGVuZ3RoICovCisJCX0KKworCWMtPmxlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCisJaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCisJCXJldHVybiAtRUlPOworCisJbXNsZWVwKDUwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGF2Y190dW5lcl9nZXRfdHMoc3RydWN0IGZpcmVkdHYgKmZkdHYpCit7CisJY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCWludCBzbDsKKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKKwljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CisJYy0+b3Bjb2RlICA9IEFWQ19PUENPREVfRFNJVDsKKworCXNsID0gZmR0di0+dHlwZSA9PSBGSVJFRFRWX0RWQl9UID8gMHgwYyA6IDB4MTE7CisKKwljLT5vcGVyYW5kWzBdID0gMDsJLyogc291cmNlIHBsdWcgKi8KKwljLT5vcGVyYW5kWzFdID0gMHhkMjsJLyogc3ViZnVuY3Rpb24gcmVwbGFjZSAqLworCWMtPm9wZXJhbmRbMl0gPSAweGZmOwkvKiBzdGF0dXMgKi8KKwljLT5vcGVyYW5kWzNdID0gMHgyMDsJLyogc3lzdGVtIGlkID0gRFZCICovCisJYy0+b3BlcmFuZFs0XSA9IDB4MDA7CS8qIGFudGVubmEgbnVtYmVyICovCisJYy0+b3BlcmFuZFs1XSA9IDB4MDsgCS8qIHN5c3RlbV9zcGVjaWZpY19zZWFyY2hfZmxhZ3MgKi8KKwljLT5vcGVyYW5kWzZdID0gc2w7CS8qIHN5c3RlbV9zcGVjaWZpY19tdWx0aXBsZXggc2VsZWN0aW9uX2xlbmd0aCAqLworCWMtPm9wZXJhbmRbN10gPSAweDAwOwkvKiB2YWxpZF9mbGFncyBbMF0gKi8KKwljLT5vcGVyYW5kWzhdID0gMHgwMDsJLyogdmFsaWRfZmxhZ3MgWzFdICovCisJYy0+b3BlcmFuZFs3ICsgc2xdID0gMHgwMDsgLyogbnJfb2ZfZHNpdF9zZWxfc3BlY3MgKGFsd2F5cyAwKSAqLworCisJYy0+bGVuZ3RoID0gZmR0di0+dHlwZSA9PSBGSVJFRFRWX0RWQl9UID8gMjQgOiAyODsKKworCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCW1zbGVlcCgyNTApOworCXJldHVybiAwOworfQorCitpbnQgYXZjX2lkZW50aWZ5X3N1YnVuaXQoc3RydWN0IGZpcmVkdHYgKmZkdHYpCit7CisJY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKKwljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CisJYy0+b3Bjb2RlICA9IEFWQ19PUENPREVfUkVBRF9ERVNDUklQVE9SOworCisJYy0+b3BlcmFuZFswXSA9IERFU0NSSVBUT1JfU1VCVU5JVF9JREVOVElGSUVSOworCWMtPm9wZXJhbmRbMV0gPSAweGZmOworCWMtPm9wZXJhbmRbMl0gPSAweDAwOworCWMtPm9wZXJhbmRbM10gPSAweDAwOyAvKiBsZW5ndGggaGlnaGJ5dGUgKi8KKwljLT5vcGVyYW5kWzRdID0gMHgwODsgLyogbGVuZ3RoIGxvd2J5dGUgICovCisJYy0+b3BlcmFuZFs1XSA9IDB4MDA7IC8qIG9mZnNldCBoaWdoYnl0ZSAqLworCWMtPm9wZXJhbmRbNl0gPSAweDBkOyAvKiBvZmZzZXQgbG93Ynl0ZSAgKi8KKworCWMtPmxlbmd0aCA9IDEyOworCisJaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfU1RBQkxFICYmCisJICAgICByLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHx8CisJICAgIChyLT5vcGVyYW5kWzNdIDw8IDgpICsgci0+b3BlcmFuZFs0XSAhPSA4KSB7CisJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiY2Fubm90IHJlYWQgc3VidW5pdCBpZGVudGlmaWVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gMjIKKworaW50IGF2Y190dW5lcl9zdGF0dXMoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHN0cnVjdCBmaXJlZHR2X3R1bmVyX3N0YXR1cyAqc3RhdCkKK3sKKwljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCWludCBsZW5ndGg7CisKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisKKwljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CisJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OworCWMtPm9wY29kZSAgPSBBVkNfT1BDT0RFX1JFQURfREVTQ1JJUFRPUjsKKworCWMtPm9wZXJhbmRbMF0gPSBERVNDUklQVE9SX1RVTkVSX1NUQVRVUzsKKwljLT5vcGVyYW5kWzFdID0gMHhmZjsJLyogcmVhZF9yZXN1bHRfc3RhdHVzICovCisJYy0+b3BlcmFuZFsyXSA9IDB4MDA7CS8qIHJlc2VydmVkICovCisJYy0+b3BlcmFuZFszXSA9IDA7CS8qIFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gPj4gODsgKi8KKwljLT5vcGVyYW5kWzRdID0gMDsJLyogU0laRU9GX0FOVEVOTkFfSU5QVVRfSU5GTyAmIDB4ZmY7ICovCisJYy0+b3BlcmFuZFs1XSA9IDB4MDA7CisJYy0+b3BlcmFuZFs2XSA9IDB4MDA7CisKKwljLT5sZW5ndGggPSAxMjsKKworCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfU1RBQkxFICYmCisJICAgIHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgeworCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImNhbm5vdCByZWFkIHR1bmVyIHN0YXR1c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxlbmd0aCA9IHItPm9wZXJhbmRbOV07CisJaWYgKHItPm9wZXJhbmRbMV0gIT0gMHgxMCB8fCBsZW5ndGggIT0gU0laRU9GX0FOVEVOTkFfSU5QVVRfSU5GTykgeworCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImdvdCBpbnZhbGlkIHR1bmVyIHN0YXR1c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN0YXQtPmFjdGl2ZV9zeXN0ZW0JCT0gci0+b3BlcmFuZFsxMF07CisJc3RhdC0+c2VhcmNoaW5nCQkJPSByLT5vcGVyYW5kWzExXSA+PiA3ICYgMTsKKwlzdGF0LT5tb3ZpbmcJCQk9IHItPm9wZXJhbmRbMTFdID4+IDYgJiAxOworCXN0YXQtPm5vX3JmCQkJPSByLT5vcGVyYW5kWzExXSA+PiA1ICYgMTsKKwlzdGF0LT5pbnB1dAkJCT0gci0+b3BlcmFuZFsxMl0gPj4gNyAmIDE7CisJc3RhdC0+c2VsZWN0ZWRfYW50ZW5uYQkJPSByLT5vcGVyYW5kWzEyXSAmIDB4N2Y7CisJc3RhdC0+YmVyCQkJPSByLT5vcGVyYW5kWzEzXSA8PCAyNCB8CisJCQkJCSAgci0+b3BlcmFuZFsxNF0gPDwgMTYgfAorCQkJCQkgIHItPm9wZXJhbmRbMTVdIDw8IDggfAorCQkJCQkgIHItPm9wZXJhbmRbMTZdOworCXN0YXQtPnNpZ25hbF9zdHJlbmd0aAkJPSByLT5vcGVyYW5kWzE3XTsKKwlzdGF0LT5yYXN0ZXJfZnJlcXVlbmN5CQk9IHItPm9wZXJhbmRbMThdID4+IDYgJiAyOworCXN0YXQtPnJmX2ZyZXF1ZW5jeQkJPSAoci0+b3BlcmFuZFsxOF0gJiAweDNmKSA8PCAxNiB8CisJCQkJCSAgci0+b3BlcmFuZFsxOV0gPDwgOCB8CisJCQkJCSAgci0+b3BlcmFuZFsyMF07CisJc3RhdC0+bWFuX2RlcF9pbmZvX2xlbmd0aAk9IHItPm9wZXJhbmRbMjFdOworCXN0YXQtPmZyb250X2VuZF9lcnJvcgkJPSByLT5vcGVyYW5kWzIyXSA+PiA0ICYgMTsKKwlzdGF0LT5hbnRlbm5hX2Vycm9yCQk9IHItPm9wZXJhbmRbMjJdID4+IDMgJiAxOworCXN0YXQtPmZyb250X2VuZF9wb3dlcl9zdGF0dXMJPSByLT5vcGVyYW5kWzIyXSA+PiAxICYgMTsKKwlzdGF0LT5wb3dlcl9zdXBwbHkJCT0gci0+b3BlcmFuZFsyMl0gJiAxOworCXN0YXQtPmNhcnJpZXJfbm9pc2VfcmF0aW8JPSByLT5vcGVyYW5kWzIzXSA8PCA4IHwKKwkJCQkJICByLT5vcGVyYW5kWzI0XTsKKwlzdGF0LT5wb3dlcl9zdXBwbHlfdm9sdGFnZQk9IHItPm9wZXJhbmRbMjddOworCXN0YXQtPmFudGVubmFfdm9sdGFnZQkJPSByLT5vcGVyYW5kWzI4XTsKKwlzdGF0LT5maXJld2lyZV9idXNfdm9sdGFnZQk9IHItPm9wZXJhbmRbMjldOworCXN0YXQtPmNhX21taQkJCT0gci0+b3BlcmFuZFszMF0gJiAxOworCXN0YXQtPmNhX3BtdF9yZXBseQkJPSByLT5vcGVyYW5kWzMxXSA+PiA3ICYgMTsKKwlzdGF0LT5jYV9kYXRlX3RpbWVfcmVxdWVzdAk9IHItPm9wZXJhbmRbMzFdID4+IDYgJiAxOworCXN0YXQtPmNhX2FwcGxpY2F0aW9uX2luZm8JPSByLT5vcGVyYW5kWzMxXSA+PiA1ICYgMTsKKwlzdGF0LT5jYV9tb2R1bGVfcHJlc2VudF9zdGF0dXMJPSByLT5vcGVyYW5kWzMxXSA+PiA0ICYgMTsKKwlzdGF0LT5jYV9kdmJfZmxhZwkJPSByLT5vcGVyYW5kWzMxXSA+PiAzICYgMTsKKwlzdGF0LT5jYV9lcnJvcl9mbGFnCQk9IHItPm9wZXJhbmRbMzFdID4+IDIgJiAxOworCXN0YXQtPmNhX2luaXRpYWxpemF0aW9uX3N0YXR1cwk9IHItPm9wZXJhbmRbMzFdID4+IDEgJiAxOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdmNfbG5iX2NvbnRyb2woc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgdm9sdGFnZSwgY2hhciBidXJzdCwKKwkJICAgIGNoYXIgY29udHRvbmUsIGNoYXIgbnJkaXNlcSwKKwkJICAgIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmRpc2VxY21kKQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJaW50IGksIGosIGs7CisKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisKKwljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CisJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OworCWMtPm9wY29kZSAgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKKworCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOworCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOworCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOworCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9MTkJfQ09OVFJPTDsKKworCWMtPm9wZXJhbmRbNF0gPSB2b2x0YWdlOworCWMtPm9wZXJhbmRbNV0gPSBucmRpc2VxOworCisJaSA9IDY7CisKKwlmb3IgKGogPSAwOyBqIDwgbnJkaXNlcTsgaisrKSB7CisJCWMtPm9wZXJhbmRbaSsrXSA9IGRpc2VxY21kW2pdLm1zZ19sZW47CisKKwkJZm9yIChrID0gMDsgayA8IGRpc2VxY21kW2pdLm1zZ19sZW47IGsrKykKKwkJCWMtPm9wZXJhbmRbaSsrXSA9IGRpc2VxY21kW2pdLm1zZ1trXTsKKwl9CisKKwljLT5vcGVyYW5kW2krK10gPSBidXJzdDsKKwljLT5vcGVyYW5kW2krK10gPSBjb250dG9uZTsKKworCWMtPmxlbmd0aCA9IEFMSUdOKDMgKyBpLCA0KTsKKworCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHsKKwkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJMTkIgY29udHJvbCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF2Y19yZWdpc3Rlcl9yZW1vdGVfY29udHJvbChzdHJ1Y3QgZmlyZWR0diAqZmR0dikKK3sKKwljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7CisKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisKKwljLT5jdHlwZSAgID0gQVZDX0NUWVBFX05PVElGWTsKKwljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9VTklUIHwgNzsKKwljLT5vcGNvZGUgID0gQVZDX09QQ09ERV9WRU5ET1I7CisKKwljLT5vcGVyYW5kWzBdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMDsKKwljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKKwljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKKwljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w7CisKKwljLT5sZW5ndGggPSA4OworCisJcmV0dXJuIGF2Y193cml0ZShmZHR2LCBjLCBOVUxMKTsKK30KKwordm9pZCBhdmNfcmVtb3RlX2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHYgPQorCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmaXJlZHR2LCByZW1vdGVfY3RybF93b3JrKTsKKworCS8qIFNob3VsZCBpdCBiZSByZXNjaGVkdWxlZCBpbiBmYWlsdXJlIGNhc2VzPyAqLworCWF2Y19yZWdpc3Rlcl9yZW1vdGVfY29udHJvbChmZHR2KTsKK30KKworI2lmIDAgLyogRklYTUU6IHVudXNlZCAqLworaW50IGF2Y190dW5lcl9ob3N0MmNhKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKKwljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CisJYy0+b3Bjb2RlICA9IEFWQ19PUENPREVfVkVORE9SOworCisJYy0+b3BlcmFuZFswXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzA7CisJYy0+b3BlcmFuZFsxXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzE7CisJYy0+b3BlcmFuZFsyXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzI7CisJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CisJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KKwljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCisJYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLworCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKworCWMtPmxlbmd0aCA9IDEyOworCisJaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBnZXRfY2Ffb2JqZWN0X3BvcyhzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyKQoreworCWludCBsZW5ndGggPSAxOworCisJLyogQ2hlY2sgbGVuZ3RoIG9mIGxlbmd0aCBmaWVsZCAqLworCWlmIChyLT5vcGVyYW5kWzddICYgMHg4MCkKKwkJbGVuZ3RoID0gKHItPm9wZXJhbmRbN10gJiAweDdmKSArIDE7CisJcmV0dXJuIGxlbmd0aCArIDc7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NhX29iamVjdF9sZW5ndGgoc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqcikKK3sKKyNpZiAwIC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlpbnQgc2l6ZSA9IDA7CisJaW50IGk7CisKKwlpZiAoci0+b3BlcmFuZFs3XSAmIDB4ODApCisJCWZvciAoaSA9IDA7IGkgPCAoci0+b3BlcmFuZFs3XSAmIDB4N2YpOyBpKyspIHsKKwkJCXNpemUgPDw9IDg7CisJCQlzaXplICs9IHItPm9wZXJhbmRbOCArIGldOworCQl9CisjZW5kaWYKKwlyZXR1cm4gci0+b3BlcmFuZFs3XTsKK30KKworaW50IGF2Y19jYV9hcHBfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJaW50IHBvczsKKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOworCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKKwljLT5vcGNvZGUgID0gQVZDX09QQ09ERV9WRU5ET1I7CisKKwljLT5vcGVyYW5kWzBdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMDsKKwljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKKwljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKKwljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKKwljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLworCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKworCWMtPmxlbmd0aCA9IDEyOworCisJaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KKworCXBvcyA9IGdldF9jYV9vYmplY3RfcG9zKHIpOworCWFwcF9pbmZvWzBdID0gKEVONTAyMjFfVEFHX0FQUF9JTkZPID4+IDE2KSAmIDB4ZmY7CisJYXBwX2luZm9bMV0gPSAoRU41MDIyMV9UQUdfQVBQX0lORk8gPj4gIDgpICYgMHhmZjsKKwlhcHBfaW5mb1syXSA9IChFTjUwMjIxX1RBR19BUFBfSU5GTyA+PiAgMCkgJiAweGZmOworCWFwcF9pbmZvWzNdID0gNiArIHItPm9wZXJhbmRbcG9zICsgNF07CisJYXBwX2luZm9bNF0gPSAweDAxOworCW1lbWNweSgmYXBwX2luZm9bNV0sICZyLT5vcGVyYW5kW3Bvc10sIDUgKyByLT5vcGVyYW5kW3BvcyArIDRdKTsKKwkqbGVuID0gYXBwX2luZm9bM10gKyA0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdmNfY2FfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJaW50IHBvczsKKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOworCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKKwljLT5vcGNvZGUgID0gQVZDX09QQ09ERV9WRU5ET1I7CisKKwljLT5vcGVyYW5kWzBdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMDsKKwljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKKwljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKKwljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKKwljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLworCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKworCWMtPmxlbmd0aCA9IDEyOworCisJaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcG9zID0gZ2V0X2NhX29iamVjdF9wb3Mocik7CisJYXBwX2luZm9bMF0gPSAoRU41MDIyMV9UQUdfQ0FfSU5GTyA+PiAxNikgJiAweGZmOworCWFwcF9pbmZvWzFdID0gKEVONTAyMjFfVEFHX0NBX0lORk8gPj4gIDgpICYgMHhmZjsKKwlhcHBfaW5mb1syXSA9IChFTjUwMjIxX1RBR19DQV9JTkZPID4+ICAwKSAmIDB4ZmY7CisJYXBwX2luZm9bM10gPSAyOworCWFwcF9pbmZvWzRdID0gci0+b3BlcmFuZFtwb3MgKyAwXTsKKwlhcHBfaW5mb1s1XSA9IHItPm9wZXJhbmRbcG9zICsgMV07CisJKmxlbiA9IGFwcF9pbmZvWzNdICsgNDsKKworCXJldHVybiAwOworfQorCitpbnQgYXZjX2NhX3Jlc2V0KHN0cnVjdCBmaXJlZHR2ICpmZHR2KQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKKwljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CisJYy0+b3Bjb2RlICA9IEFWQ19PUENPREVfVkVORE9SOworCisJYy0+b3BlcmFuZFswXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzA7CisJYy0+b3BlcmFuZFsxXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzE7CisJYy0+b3BlcmFuZFsyXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzI7CisJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CisJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KKwljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfUkVTRVQ7IC8qIGNhIHRhZyAqLworCWMtPm9wZXJhbmRbNl0gPSAwOyAvKiBtb3JlL2xhc3QgKi8KKwljLT5vcGVyYW5kWzddID0gMTsgLyogbGVuZ3RoICovCisJYy0+b3BlcmFuZFs4XSA9IDA7IC8qIGZvcmNlIGhhcmR3YXJlIHJlc2V0ICovCisKKwljLT5sZW5ndGggPSAxMjsKKworCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitpbnQgYXZjX2NhX3BtdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqbXNnLCBpbnQgbGVuZ3RoKQoreworCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJaW50IGxpc3RfbWFuYWdlbWVudDsKKwlpbnQgcHJvZ3JhbV9pbmZvX2xlbmd0aDsKKwlpbnQgcG10X2NtZF9pZDsKKwlpbnQgcmVhZF9wb3M7CisJaW50IHdyaXRlX3BvczsKKwlpbnQgZXNfaW5mb19sZW5ndGg7CisJaW50IGNyYzMyX2NzdW07CisKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisKKwljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CisJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OworCWMtPm9wY29kZSAgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKKworCWlmIChtc2dbMF0gIT0gRU41MDIyMV9MSVNUX01BTkFHRU1FTlRfT05MWSkgeworCQlkZXZfaW5mbyhmZHR2LT5kZXZpY2UsICJmb3JjaW5nIGxpc3RfbWFuYWdlbWVudCB0byBPTkxZXG4iKTsKKwkJbXNnWzBdID0gRU41MDIyMV9MSVNUX01BTkFHRU1FTlRfT05MWTsKKwl9CisJLyogV2UgdGFrZSB0aGUgY21kX2lkIGZyb20gdGhlIHByb2dyYW1tZSBsZXZlbCBvbmx5ISAqLworCWxpc3RfbWFuYWdlbWVudCA9IG1zZ1swXTsKKwlwcm9ncmFtX2luZm9fbGVuZ3RoID0gKChtc2dbNF0gJiAweDBmKSA8PCA4KSArIG1zZ1s1XTsKKwlpZiAocHJvZ3JhbV9pbmZvX2xlbmd0aCA+IDApCisJCXByb2dyYW1faW5mb19sZW5ndGgtLTsgLyogUmVtb3ZlIHBtdF9jbWRfaWQgKi8KKwlwbXRfY21kX2lkID0gbXNnWzZdOworCisJYy0+b3BlcmFuZFswXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzA7CisJYy0+b3BlcmFuZFsxXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzE7CisJYy0+b3BlcmFuZFsyXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzI7CisJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CisJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KKwljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfUE1UOyAvKiBjYSB0YWcgKi8KKwljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCisJLyogYy0+b3BlcmFuZFs3XSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxNzsgKi8gLyogbGVuZ3RoICovCisJYy0+b3BlcmFuZFs4XSA9IGxpc3RfbWFuYWdlbWVudDsKKwljLT5vcGVyYW5kWzldID0gMHgwMTsgLyogcG10X2NtZD1PS19kZXNjcmFtYmxlICovCisKKwkvKiBUUyBwcm9ncmFtIG1hcCB0YWJsZSAqLworCisJYy0+b3BlcmFuZFsxMF0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCisJYy0+b3BlcmFuZFsxMV0gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLworCS8qIGMtPm9wZXJhbmRbMTJdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLworCWMtPm9wZXJhbmRbMTNdID0gbXNnWzFdOyAvKiBQcm9ncmFtIG51bWJlciAqLworCWMtPm9wZXJhbmRbMTRdID0gbXNnWzJdOworCWMtPm9wZXJhbmRbMTVdID0gMHgwMTsgLyogVmVyc2lvbiBudW1iZXI9MCArIGN1cnJlbnQvbmV4dD0xICovCisJYy0+b3BlcmFuZFsxNl0gPSAweDAwOyAvKiBTZWN0aW9uIG51bWJlcj0wICovCisJYy0+b3BlcmFuZFsxN10gPSAweDAwOyAvKiBMYXN0IHNlY3Rpb24gbnVtYmVyPTAgKi8KKwljLT5vcGVyYW5kWzE4XSA9IDB4MWY7IC8qIFBDUl9QSUQ9MUZGRiAqLworCWMtPm9wZXJhbmRbMTldID0gMHhmZjsKKwljLT5vcGVyYW5kWzIwXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoID4+IDgpOyAvKiBQcm9ncmFtIGluZm8gbGVuZ3RoICovCisJYy0+b3BlcmFuZFsyMV0gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCAmIDB4ZmYpOworCisJLyogQ0EgZGVzY3JpcHRvcnMgYXQgcHJvZ3JhbW1lIGxldmVsICovCisJcmVhZF9wb3MgPSA2OworCXdyaXRlX3BvcyA9IDIyOworCWlmIChwcm9ncmFtX2luZm9fbGVuZ3RoID4gMCkgeworCQlwbXRfY21kX2lkID0gbXNnW3JlYWRfcG9zKytdOworCQlpZiAocG10X2NtZF9pZCAhPSAxICYmIHBtdF9jbWRfaWQgIT0gNCkKKwkJCWRldl9lcnIoZmR0di0+ZGV2aWNlLAorCQkJCSJpbnZhbGlkIHBtdF9jbWRfaWQgJWRcbiIsIHBtdF9jbWRfaWQpOworCisJCW1lbWNweSgmYy0+b3BlcmFuZFt3cml0ZV9wb3NdLCAmbXNnW3JlYWRfcG9zXSwKKwkJICAgICAgIHByb2dyYW1faW5mb19sZW5ndGgpOworCQlyZWFkX3BvcyArPSBwcm9ncmFtX2luZm9fbGVuZ3RoOworCQl3cml0ZV9wb3MgKz0gcHJvZ3JhbV9pbmZvX2xlbmd0aDsKKwl9CisJd2hpbGUgKHJlYWRfcG9zIDwgbGVuZ3RoKSB7CisJCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gbXNnW3JlYWRfcG9zKytdOworCQljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IG1zZ1tyZWFkX3BvcysrXTsKKwkJYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSBtc2dbcmVhZF9wb3MrK107CisJCWVzX2luZm9fbGVuZ3RoID0KKwkJCSgobXNnW3JlYWRfcG9zXSAmIDB4MGYpIDw8IDgpICsgbXNnW3JlYWRfcG9zICsgMV07CisJCXJlYWRfcG9zICs9IDI7CisJCWlmIChlc19pbmZvX2xlbmd0aCA+IDApCisJCQllc19pbmZvX2xlbmd0aC0tOyAvKiBSZW1vdmUgcG10X2NtZF9pZCAqLworCQljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IGVzX2luZm9fbGVuZ3RoID4+IDg7CisJCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gZXNfaW5mb19sZW5ndGggJiAweGZmOworCQlpZiAoZXNfaW5mb19sZW5ndGggPiAwKSB7CisJCQlwbXRfY21kX2lkID0gbXNnW3JlYWRfcG9zKytdOworCQkJaWYgKHBtdF9jbWRfaWQgIT0gMSAmJiBwbXRfY21kX2lkICE9IDQpCisJCQkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJpbnZhbGlkIHBtdF9jbWRfaWQgJWQgIgorCQkJCQkiYXQgc3RyZWFtIGxldmVsXG4iLCBwbXRfY21kX2lkKTsKKworCQkJbWVtY3B5KCZjLT5vcGVyYW5kW3dyaXRlX3Bvc10sICZtc2dbcmVhZF9wb3NdLAorCQkJICAgICAgIGVzX2luZm9fbGVuZ3RoKTsKKwkJCXJlYWRfcG9zICs9IGVzX2luZm9fbGVuZ3RoOworCQkJd3JpdGVfcG9zICs9IGVzX2luZm9fbGVuZ3RoOworCQl9CisJfQorCisJLyogQ1JDICovCisJYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOworCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKKwljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7CisJYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOworCisJYy0+b3BlcmFuZFs3XSA9IHdyaXRlX3BvcyAtIDg7CisJYy0+b3BlcmFuZFsxMl0gPSB3cml0ZV9wb3MgLSAxMzsKKworCWNyYzMyX2NzdW0gPSBjcmMzMl9iZSgwLCAmYy0+b3BlcmFuZFsxMF0sIGMtPm9wZXJhbmRbMTJdIC0gMSk7CisJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSA0XSA9IChjcmMzMl9jc3VtID4+IDI0KSAmIDB4ZmY7CisJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAzXSA9IChjcmMzMl9jc3VtID4+IDE2KSAmIDB4ZmY7CisJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAyXSA9IChjcmMzMl9jc3VtID4+ICA4KSAmIDB4ZmY7CisJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAxXSA9IChjcmMzMl9jc3VtID4+ICAwKSAmIDB4ZmY7CisKKwljLT5sZW5ndGggPSBBTElHTigzICsgd3JpdGVfcG9zLCA0KTsKKworCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHsKKwkJZGV2X2VycihmZHR2LT5kZXZpY2UsCisJCQkiQ0EgUE1UIGZhaWxlZCB3aXRoIHJlc3BvbnNlIDB4JXhcbiIsIHItPnJlc3BvbnNlKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdmNfY2FfZ2V0X3RpbWVfZGF0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgaW50ICppbnRlcnZhbCkKK3sKKwljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCisJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CisJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OworCWMtPm9wY29kZSAgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKKworCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOworCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOworCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOworCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOworCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCisJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX0RBVEVfVElNRTsgLyogY2EgdGFnICovCisJYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLworCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKworCWMtPmxlbmd0aCA9IDEyOworCisJaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KKworCSppbnRlcnZhbCA9IHItPm9wZXJhbmRbZ2V0X2NhX29iamVjdF9wb3MocildOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdmNfY2FfZW50ZXJfbWVudShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKK3sKKwljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOyAvKiBGSVhNRTogdW51c2VkICovCisKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisKKwljLT5jdHlwZSAgID0gQVZDX0NUWVBFX1NUQVRVUzsKKwljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CisJYy0+b3Bjb2RlICA9IEFWQ19PUENPREVfVkVORE9SOworCisJYy0+b3BlcmFuZFswXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzA7CisJYy0+b3BlcmFuZFsxXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzE7CisJYy0+b3BlcmFuZFsyXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzI7CisJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CisJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KKwljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfRU5URVJfTUVOVTsKKwljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCisJYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCisJYy0+bGVuZ3RoID0gMTI7CisKKwlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF2Y19jYV9nZXRfbW1pKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyICptbWlfb2JqZWN0LCB1bnNpZ25lZCBpbnQgKmxlbikKK3sKKwljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCisJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CisJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OworCWMtPm9wY29kZSAgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKKworCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOworCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOworCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOworCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOworCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCisJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX01NSTsKKwljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCisJYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCisJYy0+bGVuZ3RoID0gMTI7CisKKwlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZSBhbmQgdmFsaWRhdGUgcmVzcG9uc2UgZGF0YSAqLworCisJKmxlbiA9IGdldF9jYV9vYmplY3RfbGVuZ3RoKHIpOworCW1lbWNweShtbWlfb2JqZWN0LCAmci0+b3BlcmFuZFtnZXRfY2Ffb2JqZWN0X3BvcyhyKV0sICpsZW4pOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQ01QX09VVFBVVF9QTFVHX0NPTlRST0xfUkVHXzAJMHhmZmZmZjAwMDA5MDRVTEwKKworc3RhdGljIGludCBjbXBfcmVhZChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdm9pZCAqYnVmLCB1NjQgYWRkciwgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmR0di0+YXZjX211dGV4KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCXJldCA9IGZkdHYtPmJhY2tlbmQtPnJlYWQoZmR0diwgYWRkciwgYnVmLCBsZW4pOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkNNUDogcmVhZCBJL08gZXJyb3JcbiIpOworCisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21wX2xvY2soc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmRhdGEsIHU2NCBhZGRyLCBfX2JlMzIgYXJnKQoreworCWludCByZXQ7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5hdmNfbXV0ZXgpKQorCQlyZXR1cm4gLUVJTlRSOworCisJcmV0ID0gZmR0di0+YmFja2VuZC0+bG9jayhmZHR2LCBhZGRyLCBkYXRhLCBhcmcpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkNNUDogbG9jayBJL08gZXJyb3JcbiIpOworCisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGdldF9vcGNyKF9fYmUzMiBvcGNyLCB1MzIgbWFzaywgdTMyIHNoaWZ0KQoreworCXJldHVybiAoYmUzMl90b19jcHUob3BjcikgPj4gc2hpZnQpICYgbWFzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9vcGNyKF9fYmUzMiAqb3BjciwgdTMyIHZhbHVlLCB1MzIgbWFzaywgdTMyIHNoaWZ0KQoreworCSpvcGNyICY9IH5jcHVfdG9fYmUzMihtYXNrIDw8IHNoaWZ0KTsKKwkqb3BjciB8PSBjcHVfdG9fYmUzMigodmFsdWUgJiBtYXNrKSA8PCBzaGlmdCk7Cit9CisKKyNkZWZpbmUgZ2V0X29wY3Jfb25saW5lKHYpCQlnZXRfb3BjcigodiksIDB4MSwgMzEpCisjZGVmaW5lIGdldF9vcGNyX3AycF9jb25uZWN0aW9ucyh2KQlnZXRfb3BjcigodiksIDB4M2YsIDI0KQorI2RlZmluZSBnZXRfb3Bjcl9jaGFubmVsKHYpCQlnZXRfb3BjcigodiksIDB4M2YsIDE2KQorCisjZGVmaW5lIHNldF9vcGNyX3AycF9jb25uZWN0aW9ucyhwLCB2KQlzZXRfb3BjcigocCksICh2KSwgMHgzZiwgMjQpCisjZGVmaW5lIHNldF9vcGNyX2NoYW5uZWwocCwgdikJCXNldF9vcGNyKChwKSwgKHYpLCAweDNmLCAxNikKKyNkZWZpbmUgc2V0X29wY3JfZGF0YV9yYXRlKHAsIHYpCXNldF9vcGNyKChwKSwgKHYpLCAweDMsIDE0KQorI2RlZmluZSBzZXRfb3Bjcl9vdmVyaGVhZF9pZChwLCB2KQlzZXRfb3BjcigocCksICh2KSwgMHhmLCAxMCkKKworaW50IGNtcF9lc3RhYmxpc2hfcHBfY29ubmVjdGlvbihzdHJ1Y3QgZmlyZWR0diAqZmR0diwgaW50IHBsdWcsIGludCBjaGFubmVsKQoreworCV9fYmUzMiBvbGRfb3Bjciwgb3BjcjsKKwl1NjQgb3Bjcl9hZGRyZXNzID0gQ01QX09VVFBVVF9QTFVHX0NPTlRST0xfUkVHXzAgKyAocGx1ZyA8PCAyKTsKKwlpbnQgYXR0ZW1wdHMgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBjbXBfcmVhZChmZHR2LCAmb3Bjciwgb3Bjcl9hZGRyZXNzLCA0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworcmVwZWF0OgorCWlmICghZ2V0X29wY3Jfb25saW5lKG9wY3IpKSB7CisJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiQ01QOiBvdXRwdXQgb2ZmbGluZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJb2xkX29wY3IgPSBvcGNyOworCisJaWYgKGdldF9vcGNyX3AycF9jb25uZWN0aW9ucyhvcGNyKSkgeworCQlpZiAoZ2V0X29wY3JfY2hhbm5lbChvcGNyKSAhPSBjaGFubmVsKSB7CisJCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkNNUDogY2Fubm90IGNoYW5nZSBjaGFubmVsXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJZGV2X2luZm8oZmR0di0+ZGV2aWNlLCAiQ01QOiBvdmVybGF5aW5nIGNvbm5lY3Rpb25cbiIpOworCisJCS8qIFdlIGRvbid0IGFsbG9jYXRlIGlzb2Nocm9ub3VzIHJlc291cmNlcy4gKi8KKwl9IGVsc2UgeworCQlzZXRfb3Bjcl9jaGFubmVsKCZvcGNyLCBjaGFubmVsKTsKKwkJc2V0X29wY3JfZGF0YV9yYXRlKCZvcGNyLCAyKTsgLyogUzQwMCAqLworCisJCS8qIEZJWE1FOiB0aGlzIGlzIGZvciB0aGUgd29yc3QgY2FzZSAtIG9wdGltaXplICovCisJCXNldF9vcGNyX292ZXJoZWFkX2lkKCZvcGNyLCAwKTsKKworCQkvKgorCQkgKiBGSVhNRTogYWxsb2NhdGUgaXNvY2hyb25vdXMgY2hhbm5lbCBhbmQgYmFuZHdpZHRoIGF0IElSTQorCQkgKiBmZHR2LT5iYWNrZW5kLT5hbGxvY19yZXNvdXJjZXMoZmR0diwgY2hhbm5lbHNfbWFzaywgYncpOworCQkgKi8KKwl9CisKKwlzZXRfb3Bjcl9wMnBfY29ubmVjdGlvbnMoJm9wY3IsIGdldF9vcGNyX3AycF9jb25uZWN0aW9ucyhvcGNyKSArIDEpOworCisJcmV0ID0gY21wX2xvY2soZmR0diwgJm9wY3IsIG9wY3JfYWRkcmVzcywgb2xkX29wY3IpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKG9sZF9vcGNyICE9IG9wY3IpIHsKKwkJLyoKKwkJICogRklYTUU6IGlmIG9sZF9vcGNyLlAyUF9Db25uZWN0aW9ucyA+IDAsCisJCSAqIGRlYWxsb2NhdGUgaXNvY2hyb25vdXMgY2hhbm5lbCBhbmQgYmFuZHdpZHRoIGF0IElSTQorCQkgKiBpZiAoLi4uKQorCQkgKglmZHR2LT5iYWNrZW5kLT5kZWFsbG9jX3Jlc291cmNlcyhmZHR2LCBjaGFubmVsLCBidyk7CisJCSAqLworCisJCWlmICgrK2F0dGVtcHRzIDwgNikgLyogYXJiaXRyYXJ5IGxpbWl0ICovCisJCQlnb3RvIHJlcGVhdDsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbXBfYnJlYWtfcHBfY29ubmVjdGlvbihzdHJ1Y3QgZmlyZWR0diAqZmR0diwgaW50IHBsdWcsIGludCBjaGFubmVsKQoreworCV9fYmUzMiBvbGRfb3Bjciwgb3BjcjsKKwl1NjQgb3Bjcl9hZGRyZXNzID0gQ01QX09VVFBVVF9QTFVHX0NPTlRST0xfUkVHXzAgKyAocGx1ZyA8PCAyKTsKKwlpbnQgYXR0ZW1wdHMgPSAwOworCisJaWYgKGNtcF9yZWFkKGZkdHYsICZvcGNyLCBvcGNyX2FkZHJlc3MsIDQpIDwgMCkKKwkJcmV0dXJuOworCityZXBlYXQ6CisJaWYgKCFnZXRfb3Bjcl9vbmxpbmUob3BjcikgfHwgIWdldF9vcGNyX3AycF9jb25uZWN0aW9ucyhvcGNyKSB8fAorCSAgICBnZXRfb3Bjcl9jaGFubmVsKG9wY3IpICE9IGNoYW5uZWwpIHsKKwkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IG5vIGNvbm5lY3Rpb24gdG8gYnJlYWtcbiIpOworCQlyZXR1cm47CisJfQorCisJb2xkX29wY3IgPSBvcGNyOworCXNldF9vcGNyX3AycF9jb25uZWN0aW9ucygmb3BjciwgZ2V0X29wY3JfcDJwX2Nvbm5lY3Rpb25zKG9wY3IpIC0gMSk7CisKKwlpZiAoY21wX2xvY2soZmR0diwgJm9wY3IsIG9wY3JfYWRkcmVzcywgb2xkX29wY3IpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKG9sZF9vcGNyICE9IG9wY3IpIHsKKwkJLyoKKwkJICogRklYTUU6IGlmIG9sZF9vcGNyLlAyUF9Db25uZWN0aW9ucyA9PSAxLCBpLmUuIHdlIHdlcmUgbGFzdAorCQkgKiBvd25lciwgZGVhbGxvY2F0ZSBpc29jaHJvbm91cyBjaGFubmVsIGFuZCBiYW5kd2lkdGggYXQgSVJNCisJCSAqIGlmICguLi4pCisJCSAqCWZkdHYtPmJhY2tlbmQtPmRlYWxsb2NfcmVzb3VyY2VzKGZkdHYsIGNoYW5uZWwsIGJ3KTsKKwkJICovCisKKwkJaWYgKCsrYXR0ZW1wdHMgPCA2KSAvKiBhcmJpdHJhcnkgbGltaXQgKi8KKwkJCWdvdG8gcmVwZWF0OworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI4MGQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogRmlyZURUViBkcml2ZXIgKGZvcm1lcmx5IGtub3duIGFzIEZpcmVTQVQpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFuZHJlYXMgTW9uaXR6ZXIgPGFuZHlAbW9uaXR6ZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhlbnJpayBLdXJlbGlkIDxoZW5yaWtAa3VyZWxpZC5zZT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvY2EuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8ZHZiZGV2Lmg+CisKKyNpbmNsdWRlICJmaXJlZHR2LmgiCisKKyNkZWZpbmUgRU41MDIyMV9UQUdfQVBQX0lORk9fRU5RVUlSWQkweDlmODAyMAorI2RlZmluZSBFTjUwMjIxX1RBR19DQV9JTkZPX0VOUVVJUlkJMHg5ZjgwMzAKKyNkZWZpbmUgRU41MDIyMV9UQUdfQ0FfUE1UCQkweDlmODAzMgorI2RlZmluZSBFTjUwMjIxX1RBR19FTlRFUl9NRU5VCQkweDlmODAyMgorCitzdGF0aWMgaW50IGZkdHZfY2FfcmVhZHkoc3RydWN0IGZpcmVkdHZfdHVuZXJfc3RhdHVzICpzdGF0KQoreworCXJldHVybiBzdGF0LT5jYV9pbml0aWFsaXphdGlvbl9zdGF0dXMJPT0gMSAmJgorCSAgICAgICBzdGF0LT5jYV9lcnJvcl9mbGFnCQk9PSAwICYmCisJICAgICAgIHN0YXQtPmNhX2R2Yl9mbGFnCQk9PSAxICYmCisJICAgICAgIHN0YXQtPmNhX21vZHVsZV9wcmVzZW50X3N0YXR1cwk9PSAxOworfQorCitzdGF0aWMgaW50IGZkdHZfZ2V0X2NhX2ZsYWdzKHN0cnVjdCBmaXJlZHR2X3R1bmVyX3N0YXR1cyAqc3RhdCkKK3sKKwlpbnQgZmxhZ3MgPSAwOworCisJaWYgKHN0YXQtPmNhX21vZHVsZV9wcmVzZW50X3N0YXR1cyA9PSAxKQorCQlmbGFncyB8PSBDQV9DSV9NT0RVTEVfUFJFU0VOVDsKKwlpZiAoc3RhdC0+Y2FfaW5pdGlhbGl6YXRpb25fc3RhdHVzID09IDEgJiYKKwkgICAgc3RhdC0+Y2FfZXJyb3JfZmxhZyAgICAgICAgICAgID09IDAgJiYKKwkgICAgc3RhdC0+Y2FfZHZiX2ZsYWcgICAgICAgICAgICAgID09IDEpCisJCWZsYWdzIHw9IENBX0NJX01PRFVMRV9SRUFEWTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9jYV9yZXNldChzdHJ1Y3QgZmlyZWR0diAqZmR0dikKK3sKKwlyZXR1cm4gYXZjX2NhX3Jlc2V0KGZkdHYpID8gLUVGQVVMVCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9jYV9nZXRfY2Fwcyh2b2lkICphcmcpCit7CisJc3RydWN0IGNhX2NhcHMgKmNhcCA9IGFyZzsKKworCWNhcC0+c2xvdF9udW0gPSAxOworCWNhcC0+c2xvdF90eXBlID0gQ0FfQ0k7CisJY2FwLT5kZXNjcl9udW0gPSAxOworCWNhcC0+ZGVzY3JfdHlwZSA9IENBX0VDRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmZHR2X2NhX2dldF9zbG90X2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgc3RhdDsKKwlzdHJ1Y3QgY2Ffc2xvdF9pbmZvICpzbG90ID0gYXJnOworCisJaWYgKGF2Y190dW5lcl9zdGF0dXMoZmR0diwgJnN0YXQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzbG90LT5udW0gIT0gMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzbG90LT50eXBlID0gQ0FfQ0k7CisJc2xvdC0+ZmxhZ3MgPSBmZHR2X2dldF9jYV9mbGFncygmc3RhdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9jYV9hcHBfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjYV9tc2cgKnJlcGx5ID0gYXJnOworCisJcmV0dXJuIGF2Y19jYV9hcHBfaW5mbyhmZHR2LCByZXBseS0+bXNnLCAmcmVwbHktPmxlbmd0aCkgPyAtRUZBVUxUIDogMDsKK30KKworc3RhdGljIGludCBmZHR2X2NhX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2FfbXNnICpyZXBseSA9IGFyZzsKKworCXJldHVybiBhdmNfY2FfaW5mbyhmZHR2LCByZXBseS0+bXNnLCAmcmVwbHktPmxlbmd0aCkgPyAtRUZBVUxUIDogMDsKK30KKworc3RhdGljIGludCBmZHR2X2NhX2dldF9tbWkoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2FfbXNnICpyZXBseSA9IGFyZzsKKworCXJldHVybiBhdmNfY2FfZ2V0X21taShmZHR2LCByZXBseS0+bXNnLCAmcmVwbHktPmxlbmd0aCkgPyAtRUZBVUxUIDogMDsKK30KKworc3RhdGljIGludCBmZHR2X2NhX2dldF9tc2coc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgc3RhdDsKKwlpbnQgZXJyOworCisJc3dpdGNoIChmZHR2LT5jYV9sYXN0X2NvbW1hbmQpIHsKKwljYXNlIEVONTAyMjFfVEFHX0FQUF9JTkZPX0VOUVVJUlk6CisJCWVyciA9IGZkdHZfY2FfYXBwX2luZm8oZmR0diwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBFTjUwMjIxX1RBR19DQV9JTkZPX0VOUVVJUlk6CisJCWVyciA9IGZkdHZfY2FfaW5mbyhmZHR2LCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoYXZjX3R1bmVyX3N0YXR1cyhmZHR2LCAmc3RhdCkpCisJCQllcnIgPSAtRUZBVUxUOworCQllbHNlIGlmIChzdGF0LmNhX21taSA9PSAxKQorCQkJZXJyID0gZmR0dl9jYV9nZXRfbW1pKGZkdHYsIGFyZyk7CisJCWVsc2UgeworCQkJZGV2X2luZm8oZmR0di0+ZGV2aWNlLCAidW5oYW5kbGVkIENBIG1lc3NhZ2UgMHglMDh4XG4iLAorCQkJCSBmZHR2LT5jYV9sYXN0X2NvbW1hbmQpOworCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCX0KKwlmZHR2LT5jYV9sYXN0X2NvbW1hbmQgPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9jYV9wbXQoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2FfbXNnICptc2cgPSBhcmc7CisJaW50IGRhdGFfcG9zOworCWludCBkYXRhX2xlbmd0aDsKKwlpbnQgaTsKKworCWRhdGFfcG9zID0gNDsKKwlpZiAobXNnLT5tc2dbM10gJiAweDgwKSB7CisJCWRhdGFfbGVuZ3RoID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IChtc2ctPm1zZ1szXSAmIDB4N2YpOyBpKyspCisJCQlkYXRhX2xlbmd0aCA9IChkYXRhX2xlbmd0aCA8PCA4KSArIG1zZy0+bXNnW2RhdGFfcG9zKytdOworCX0gZWxzZSB7CisJCWRhdGFfbGVuZ3RoID0gbXNnLT5tc2dbM107CisJfQorCisJcmV0dXJuIGF2Y19jYV9wbXQoZmR0diwgJm1zZy0+bXNnW2RhdGFfcG9zXSwgZGF0YV9sZW5ndGgpID8gLUVGQVVMVCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9jYV9zZW5kX21zZyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjYV9tc2cgKm1zZyA9IGFyZzsKKwlpbnQgZXJyOworCisJLyogRG8gd2UgbmVlZCBhIHNlbWFwaG9yZSBmb3IgdGhpcz8gKi8KKwlmZHR2LT5jYV9sYXN0X2NvbW1hbmQgPQorCQkobXNnLT5tc2dbMF0gPDwgMTYpICsgKG1zZy0+bXNnWzFdIDw8IDgpICsgbXNnLT5tc2dbMl07CisJc3dpdGNoIChmZHR2LT5jYV9sYXN0X2NvbW1hbmQpIHsKKwljYXNlIEVONTAyMjFfVEFHX0NBX1BNVDoKKwkJZXJyID0gZmR0dl9jYV9wbXQoZmR0diwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBFTjUwMjIxX1RBR19BUFBfSU5GT19FTlFVSVJZOgorCQkvKiBoYW5kbGVkIGluIGNhX2dldF9tc2cgKi8KKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFTjUwMjIxX1RBR19DQV9JTkZPX0VOUVVJUlk6CisJCS8qIGhhbmRsZWQgaW4gY2FfZ2V0X21zZyAqLworCQllcnIgPSAwOworCQlicmVhazsKKwljYXNlIEVONTAyMjFfVEFHX0VOVEVSX01FTlU6CisJCWVyciA9IGF2Y19jYV9lbnRlcl9tZW51KGZkdHYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgInVuaGFuZGxlZCBDQSBtZXNzYWdlIDB4JTA4eFxuIiwKKwkJCWZkdHYtPmNhX2xhc3RfY29tbWFuZCk7CisJCWVyciA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9jYV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmlyZWR0diAqZmR0diA9IGR2YmRldi0+cHJpdjsKKwlzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgc3RhdDsKKwlpbnQgZXJyOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENBX1JFU0VUOgorCQllcnIgPSBmZHR2X2NhX3Jlc2V0KGZkdHYpOworCQlicmVhazsKKwljYXNlIENBX0dFVF9DQVA6CisJCWVyciA9IGZkdHZfY2FfZ2V0X2NhcHMoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBDQV9HRVRfU0xPVF9JTkZPOgorCQllcnIgPSBmZHR2X2NhX2dldF9zbG90X2luZm8oZmR0diwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBDQV9HRVRfTVNHOgorCQllcnIgPSBmZHR2X2NhX2dldF9tc2coZmR0diwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBDQV9TRU5EX01TRzoKKwkJZXJyID0gZmR0dl9jYV9zZW5kX21zZyhmZHR2LCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfaW5mbyhmZHR2LT5kZXZpY2UsICJ1bmhhbmRsZWQgQ0EgaW9jdGwgJXVcbiIsIGNtZCk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCX0KKworCS8qIEZJWE1FIElzIHRoaXMgbmVjZXNzYXJ5PyAqLworCWF2Y190dW5lcl9zdGF0dXMoZmR0diwgJnN0YXQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmZHR2X2NhX2lvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJcmV0dXJuIFBPTExJTjsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmR0dl9jYV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuaW9jdGwJCT0gZHZiX2dlbmVyaWNfaW9jdGwsCisJLm9wZW4JCT0gZHZiX2dlbmVyaWNfb3BlbiwKKwkucmVsZWFzZQk9IGR2Yl9nZW5lcmljX3JlbGVhc2UsCisJLnBvbGwJCT0gZmR0dl9jYV9pb19wb2xsLAorfTsKKworc3RhdGljIHN0cnVjdCBkdmJfZGV2aWNlIGZkdHZfY2EgPSB7CisJLnVzZXJzCQk9IDEsCisJLnJlYWRlcnMJPSAxLAorCS53cml0ZXJzCT0gMSwKKwkuZm9wcwkJPSAmZmR0dl9jYV9mb3BzLAorCS5rZXJuZWxfaW9jdGwJPSBmZHR2X2NhX2lvY3RsLAorfTsKKworaW50IGZkdHZfY2FfcmVnaXN0ZXIoc3RydWN0IGZpcmVkdHYgKmZkdHYpCit7CisJc3RydWN0IGZpcmVkdHZfdHVuZXJfc3RhdHVzIHN0YXQ7CisJaW50IGVycjsKKworCWlmIChhdmNfdHVuZXJfc3RhdHVzKGZkdHYsICZzdGF0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWZkdHZfY2FfcmVhZHkoJnN0YXQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IGR2Yl9yZWdpc3Rlcl9kZXZpY2UoJmZkdHYtPmFkYXB0ZXIsICZmZHR2LT5jYWRldiwKKwkJCQkgICZmZHR2X2NhLCBmZHR2LCBEVkJfREVWSUNFX0NBKTsKKworCWlmIChzdGF0LmNhX2FwcGxpY2F0aW9uX2luZm8gPT0gMCkKKwkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDYUFwcGxpY2F0aW9uSW5mbyBpcyBub3Qgc2V0XG4iKTsKKwlpZiAoc3RhdC5jYV9kYXRlX3RpbWVfcmVxdWVzdCA9PSAxKQorCQlhdmNfY2FfZ2V0X3RpbWVfZGF0ZShmZHR2LCAmZmR0di0+Y2FfdGltZV9pbnRlcnZhbCk7CisKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGZkdHZfY2FfcmVsZWFzZShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKK3sKKwlpZiAoZmR0di0+Y2FkZXYpCisJCWR2Yl91bnJlZ2lzdGVyX2RldmljZShmZHR2LT5jYWRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDMwOGRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYwpAQCAtMCwwICsxLDM2NCBAQAorLyoKKyAqIEZpcmVEVFYgZHJpdmVyIChmb3JtZXJseSBrbm93biBhcyBGaXJlU0FUKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBBbmRyZWFzIE1vbml0emVyIDxhbmR5QG1vbml0emVyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIZW5yaWsgS3VyZWxpZCA8aGVucmlrQGt1cmVsaWQuc2U+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGRteGRldi5oPgorI2luY2x1ZGUgPGR2Yl9kZW11eC5oPgorI2luY2x1ZGUgPGR2YmRldi5oPgorI2luY2x1ZGUgPGR2Yl9mcm9udGVuZC5oPgorCisjaW5jbHVkZSAiZmlyZWR0di5oIgorCitzdGF0aWMgaW50IGFsbG9jX2NoYW5uZWwoc3RydWN0IGZpcmVkdHYgKmZkdHYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJaWYgKCFfX3Rlc3RfYW5kX3NldF9iaXQoaSwgJmZkdHYtPmNoYW5uZWxfYWN0aXZlKSkKKwkJCWJyZWFrOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0X2NoYW5uZWxzKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBpbnQgKnBpZGMsIHUxNiBwaWRbXSkKK3sKKwlpbnQgaSwgbjsKKworCWZvciAoaSA9IDAsIG4gPSAwOyBpIDwgMTY7IGkrKykKKwkJaWYgKHRlc3RfYml0KGksICZmZHR2LT5jaGFubmVsX2FjdGl2ZSkpCisJCQlwaWRbbisrXSA9IGZkdHYtPmNoYW5uZWxfcGlkW2ldOworCSpwaWRjID0gbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYWxsb2NfY2hhbm5lbChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgaW50IGkpCit7CisJX19jbGVhcl9iaXQoaSwgJmZkdHYtPmNoYW5uZWxfYWN0aXZlKTsKK30KKworaW50IGZkdHZfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHYgPSBkdmJkbXhmZWVkLT5kZW11eC0+cHJpdjsKKwlpbnQgcGlkYywgYywgcmV0OworCXUxNiBwaWRzWzE2XTsKKworCXN3aXRjaCAoZHZiZG14ZmVlZC0+dHlwZSkgeworCWNhc2UgRE1YX1RZUEVfVFM6CisJY2FzZSBETVhfVFlQRV9TRUM6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiY2FuJ3Qgc3RhcnQgZG14IGZlZWQ6IGludmFsaWQgdHlwZSAldVxuIiwKKwkJCWR2YmRteGZlZWQtPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5kZW11eF9tdXRleCkpCisJCXJldHVybiAtRUlOVFI7CisKKwlpZiAoZHZiZG14ZmVlZC0+dHlwZSA9PSBETVhfVFlQRV9UUykgeworCQlzd2l0Y2ggKGR2YmRteGZlZWQtPnBlc190eXBlKSB7CisJCWNhc2UgRE1YX1RTX1BFU19WSURFTzoKKwkJY2FzZSBETVhfVFNfUEVTX0FVRElPOgorCQljYXNlIERNWF9UU19QRVNfVEVMRVRFWFQ6CisJCWNhc2UgRE1YX1RTX1BFU19QQ1I6CisJCWNhc2UgRE1YX1RTX1BFU19PVEhFUjoKKwkJCWMgPSBhbGxvY19jaGFubmVsKGZkdHYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGZkdHYtPmRldmljZSwKKwkJCQkiY2FuJ3Qgc3RhcnQgZG14IGZlZWQ6IGludmFsaWQgcGVzIHR5cGUgJXVcbiIsCisJCQkJZHZiZG14ZmVlZC0+cGVzX3R5cGUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJYyA9IGFsbG9jX2NoYW5uZWwoZmR0dik7CisJfQorCisJaWYgKGMgPiAxNSkgeworCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImNhbid0IHN0YXJ0IGRteCBmZWVkOiBidXN5XG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlkdmJkbXhmZWVkLT5wcml2ID0gKHR5cGVvZihkdmJkbXhmZWVkLT5wcml2KSkodW5zaWduZWQgbG9uZyljOworCWZkdHYtPmNoYW5uZWxfcGlkW2NdID0gZHZiZG14ZmVlZC0+cGlkOworCWNvbGxlY3RfY2hhbm5lbHMoZmR0diwgJnBpZGMsIHBpZHMpOworCisJaWYgKGR2YmRteGZlZWQtPnBpZCA9PSA4MTkyKSB7CisJCXJldCA9IGF2Y190dW5lcl9nZXRfdHMoZmR0dik7CisJCWlmIChyZXQpIHsKKwkJCWRlYWxsb2NfY2hhbm5lbChmZHR2LCBjKTsKKwkJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiY2FuJ3QgZ2V0IFRTXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gYXZjX3R1bmVyX3NldF9waWRzKGZkdHYsIHBpZGMsIHBpZHMpOworCQlpZiAocmV0KSB7CisJCQlkZWFsbG9jX2NoYW5uZWwoZmR0diwgYyk7CisJCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImNhbid0IHNldCBQSURzXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+ZGVtdXhfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGZkdHZfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKK3sKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGR2YmRteGZlZWQtPmRlbXV4OworCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZGVtdXgtPnByaXY7CisJaW50IHBpZGMsIGMsIHJldDsKKwl1MTYgcGlkc1sxNl07CisKKwlpZiAoZHZiZG14ZmVlZC0+dHlwZSA9PSBETVhfVFlQRV9UUyAmJgorCSAgICAhKChkdmJkbXhmZWVkLT50c190eXBlICYgVFNfUEFDS0VUKSAmJgorCSAgICAgIChkZW11eC0+ZG14LmZyb250ZW5kLT5zb3VyY2UgIT0gRE1YX01FTU9SWV9GRSkpKSB7CisKKwkJaWYgKGR2YmRteGZlZWQtPnRzX3R5cGUgJiBUU19ERUNPREVSKSB7CisJCQlpZiAoZHZiZG14ZmVlZC0+cGVzX3R5cGUgPj0gRE1YX1RTX1BFU19PVEhFUiB8fAorCQkJICAgICFkZW11eC0+cGVzZmlsdGVyW2R2YmRteGZlZWQtPnBlc190eXBlXSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJZGVtdXgtPnBpZHNbZHZiZG14ZmVlZC0+cGVzX3R5cGVdIHw9IDB4ODAwMDsKKwkJCWRlbXV4LT5wZXNmaWx0ZXJbZHZiZG14ZmVlZC0+cGVzX3R5cGVdID0gTlVMTDsKKwkJfQorCisJCWlmICghKGR2YmRteGZlZWQtPnRzX3R5cGUgJiBUU19ERUNPREVSICYmCisJCSAgICAgIGR2YmRteGZlZWQtPnBlc190eXBlIDwgRE1YX1RTX1BFU19PVEhFUikpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5kZW11eF9tdXRleCkpCisJCXJldHVybiAtRUlOVFI7CisKKwljID0gKHVuc2lnbmVkIGxvbmcpZHZiZG14ZmVlZC0+cHJpdjsKKwlkZWFsbG9jX2NoYW5uZWwoZmR0diwgYyk7CisJY29sbGVjdF9jaGFubmVscyhmZHR2LCAmcGlkYywgcGlkcyk7CisKKwlyZXQgPSBhdmNfdHVuZXJfc2V0X3BpZHMoZmR0diwgcGlkYywgcGlkcyk7CisKKwltdXRleF91bmxvY2soJmZkdHYtPmRlbXV4X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCitpbnQgZmR0dl9kdmJfcmVnaXN0ZXIoc3RydWN0IGZpcmVkdHYgKmZkdHYpCit7CisJaW50IGVycjsKKworCWVyciA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZmZHR2LT5hZGFwdGVyLCBmZHR2X21vZGVsX25hbWVzW2ZkdHYtPnR5cGVdLAorCQkJCSAgIFRISVNfTU9EVUxFLCBmZHR2LT5kZXZpY2UsIGFkYXB0ZXJfbnIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfbG9nOworCisJLypETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HKi8KKwlmZHR2LT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0gMDsKKworCWZkdHYtPmRlbXV4LnByaXYJPSBmZHR2OworCWZkdHYtPmRlbXV4LmZpbHRlcm51bQk9IDE2OworCWZkdHYtPmRlbXV4LmZlZWRudW0JPSAxNjsKKwlmZHR2LT5kZW11eC5zdGFydF9mZWVkCT0gZmR0dl9zdGFydF9mZWVkOworCWZkdHYtPmRlbXV4LnN0b3BfZmVlZAk9IGZkdHZfc3RvcF9mZWVkOworCWZkdHYtPmRlbXV4LndyaXRlX3RvX2RlY29kZXIgPSBOVUxMOworCisJZXJyID0gZHZiX2RteF9pbml0KCZmZHR2LT5kZW11eCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsX3VucmVnX2FkYXB0ZXI7CisKKwlmZHR2LT5kbXhkZXYuZmlsdGVybnVtICAgID0gMTY7CisJZmR0di0+ZG14ZGV2LmRlbXV4ICAgICAgICA9ICZmZHR2LT5kZW11eC5kbXg7CisJZmR0di0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CisKKwllcnIgPSBkdmJfZG14ZGV2X2luaXQoJmZkdHYtPmRteGRldiwgJmZkdHYtPmFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9kbXhfcmVsZWFzZTsKKworCWZkdHYtPmZyb250ZW5kLnNvdXJjZSA9IERNWF9GUk9OVEVORF8wOworCisJZXJyID0gZmR0di0+ZGVtdXguZG14LmFkZF9mcm9udGVuZCgmZmR0di0+ZGVtdXguZG14LCAmZmR0di0+ZnJvbnRlbmQpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9kbXhkZXZfcmVsZWFzZTsKKworCWVyciA9IGZkdHYtPmRlbXV4LmRteC5jb25uZWN0X2Zyb250ZW5kKCZmZHR2LT5kZW11eC5kbXgsCisJCQkJCSAgICAgICAmZmR0di0+ZnJvbnRlbmQpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9yZW1fZnJvbnRlbmQ7CisKKwlkdmJfbmV0X2luaXQoJmZkdHYtPmFkYXB0ZXIsICZmZHR2LT5kdmJuZXQsICZmZHR2LT5kZW11eC5kbXgpOworCisJZmR0dl9mcm9udGVuZF9pbml0KGZkdHYpOworCWVyciA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZmR0di0+YWRhcHRlciwgJmZkdHYtPmZlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfbmV0X3JlbGVhc2U7CisKKwllcnIgPSBmZHR2X2NhX3JlZ2lzdGVyKGZkdHYpOworCWlmIChlcnIpCisJCWRldl9pbmZvKGZkdHYtPmRldmljZSwKKwkJCSAiQ29uZGl0aW9uYWwgQWNjZXNzIE1vZHVsZSBub3QgZW5hYmxlZFxuIik7CisJcmV0dXJuIDA7CisKK2ZhaWxfbmV0X3JlbGVhc2U6CisJZHZiX25ldF9yZWxlYXNlKCZmZHR2LT5kdmJuZXQpOworCWZkdHYtPmRlbXV4LmRteC5jbG9zZSgmZmR0di0+ZGVtdXguZG14KTsKK2ZhaWxfcmVtX2Zyb250ZW5kOgorCWZkdHYtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZkdHYtPmRlbXV4LmRteCwgJmZkdHYtPmZyb250ZW5kKTsKK2ZhaWxfZG14ZGV2X3JlbGVhc2U6CisJZHZiX2RteGRldl9yZWxlYXNlKCZmZHR2LT5kbXhkZXYpOworZmFpbF9kbXhfcmVsZWFzZToKKwlkdmJfZG14X3JlbGVhc2UoJmZkdHYtPmRlbXV4KTsKK2ZhaWxfdW5yZWdfYWRhcHRlcjoKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZmZHR2LT5hZGFwdGVyKTsKK2ZhaWxfbG9nOgorCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiRFZCIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBmZHR2X2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQoreworCWZkdHZfY2FfcmVsZWFzZShmZHR2KTsKKwlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZCgmZmR0di0+ZmUpOworCWR2Yl9uZXRfcmVsZWFzZSgmZmR0di0+ZHZibmV0KTsKKwlmZHR2LT5kZW11eC5kbXguY2xvc2UoJmZkdHYtPmRlbXV4LmRteCk7CisJZmR0di0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmR0di0+ZGVtdXguZG14LCAmZmR0di0+ZnJvbnRlbmQpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZmR0di0+ZG14ZGV2KTsKKwlkdmJfZG14X3JlbGVhc2UoJmZkdHYtPmRlbXV4KTsKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZmZHR2LT5hZGFwdGVyKTsKK30KKworY29uc3QgY2hhciAqZmR0dl9tb2RlbF9uYW1lc1tdID0geworCVtGSVJFRFRWX1VOS05PV05dID0gInVua25vd24gdHlwZSIsCisJW0ZJUkVEVFZfRFZCX1NdICAgPSAiRmlyZURUViBTL0NJIiwKKwlbRklSRURUVl9EVkJfQ10gICA9ICJGaXJlRFRWIEMvQ0kiLAorCVtGSVJFRFRWX0RWQl9UXSAgID0gIkZpcmVEVFYgVC9DSSIsCisJW0ZJUkVEVFZfRFZCX1MyXSAgPSAiRmlyZURUViBTMiAgIiwKK307CisKK3N0cnVjdCBmaXJlZHR2ICpmZHR2X2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBmaXJlZHR2X2JhY2tlbmQgKmJhY2tlbmQsCisJCQkgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHY7CisJaW50IGk7CisKKwlmZHR2ID0ga3phbGxvYyhzaXplb2YoKmZkdHYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZkdHYpCisJCXJldHVybiBOVUxMOworCisJZGV2LT5kcml2ZXJfZGF0YQk9IGZkdHY7CisJZmR0di0+ZGV2aWNlCQk9IGRldjsKKwlmZHR2LT5pc29jaGFubmVsCT0gLTE7CisJZmR0di0+dm9sdGFnZQkJPSAweGZmOworCWZkdHYtPnRvbmUJCT0gMHhmZjsKKwlmZHR2LT5iYWNrZW5kCQk9IGJhY2tlbmQ7CisKKwltdXRleF9pbml0KCZmZHR2LT5hdmNfbXV0ZXgpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZkdHYtPmF2Y193YWl0KTsKKwlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSB0cnVlOworCW11dGV4X2luaXQoJmZkdHYtPmRlbXV4X211dGV4KTsKKwlJTklUX1dPUksoJmZkdHYtPnJlbW90ZV9jdHJsX3dvcmssIGF2Y19yZW1vdGVfY3RybF93b3JrKTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUoZmR0dl9tb2RlbF9uYW1lcyk7IC0taTsgKQorCQlpZiAoc3RybGVuKGZkdHZfbW9kZWxfbmFtZXNbaV0pIDw9IG5hbWVfbGVuICYmCisJCSAgICBzdHJuY21wKG5hbWUsIGZkdHZfbW9kZWxfbmFtZXNbaV0sIG5hbWVfbGVuKSA9PSAwKQorCQkJYnJlYWs7CisJZmR0di0+dHlwZSA9IGk7CisKKwlyZXR1cm4gZmR0djsKK30KKworI2RlZmluZSBNQVRDSF9GTEFHUyAoSUVFRTEzOTRfTUFUQ0hfVkVORE9SX0lEIHwgSUVFRTEzOTRfTUFUQ0hfTU9ERUxfSUQgfCBcCisJCSAgICAgSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIHwgSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTikKKworI2RlZmluZSBESUdJVEFMX0VWRVJZV0hFUkVfT1VJCTB4MDAxMjg3CisjZGVmaW5lIEFWQ19VTklUX1NQRUNfSURfRU5UUlkJMHgwMGEwMmQKKyNkZWZpbmUgQVZDX1NXX1ZFUlNJT05fRU5UUlkJMHgwMTAwMDEKKworc3RhdGljIHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgZmR0dl9pZF90YWJsZVtdID0geworCXsKKwkJLyogRmxvcHB5RFRWIFMvQ0kgYW5kIEZsb3BweURUViBTMiAqLworCQkubWF0Y2hfZmxhZ3MJPSBNQVRDSF9GTEFHUywKKwkJLnZlbmRvcl9pZAk9IERJR0lUQUxfRVZFUllXSEVSRV9PVUksCisJCS5tb2RlbF9pZAk9IDB4MDAwMDI0LAorCQkuc3BlY2lmaWVyX2lkCT0gQVZDX1VOSVRfU1BFQ19JRF9FTlRSWSwKKwkJLnZlcnNpb24JPSBBVkNfU1dfVkVSU0lPTl9FTlRSWSwKKwl9LCB7CisJCS8qIEZsb3BweURUViBUL0NJICovCisJCS5tYXRjaF9mbGFncwk9IE1BVENIX0ZMQUdTLAorCQkudmVuZG9yX2lkCT0gRElHSVRBTF9FVkVSWVdIRVJFX09VSSwKKwkJLm1vZGVsX2lkCT0gMHgwMDAwMjUsCisJCS5zcGVjaWZpZXJfaWQJPSBBVkNfVU5JVF9TUEVDX0lEX0VOVFJZLAorCQkudmVyc2lvbgk9IEFWQ19TV19WRVJTSU9OX0VOVFJZLAorCX0sIHsKKwkJLyogRmxvcHB5RFRWIEMvQ0kgKi8KKwkJLm1hdGNoX2ZsYWdzCT0gTUFUQ0hfRkxBR1MsCisJCS52ZW5kb3JfaWQJPSBESUdJVEFMX0VWRVJZV0hFUkVfT1VJLAorCQkubW9kZWxfaWQJPSAweDAwMDAyNiwKKwkJLnNwZWNpZmllcl9pZAk9IEFWQ19VTklUX1NQRUNfSURfRU5UUlksCisJCS52ZXJzaW9uCT0gQVZDX1NXX1ZFUlNJT05fRU5UUlksCisJfSwgeworCQkvKiBGaXJlRFRWIFMvQ0kgYW5kIEZsb3BweURUViBTMiAqLworCQkubWF0Y2hfZmxhZ3MJPSBNQVRDSF9GTEFHUywKKwkJLnZlbmRvcl9pZAk9IERJR0lUQUxfRVZFUllXSEVSRV9PVUksCisJCS5tb2RlbF9pZAk9IDB4MDAwMDM0LAorCQkuc3BlY2lmaWVyX2lkCT0gQVZDX1VOSVRfU1BFQ19JRF9FTlRSWSwKKwkJLnZlcnNpb24JPSBBVkNfU1dfVkVSU0lPTl9FTlRSWSwKKwl9LCB7CisJCS8qIEZpcmVEVFYgVC9DSSAqLworCQkubWF0Y2hfZmxhZ3MJPSBNQVRDSF9GTEFHUywKKwkJLnZlbmRvcl9pZAk9IERJR0lUQUxfRVZFUllXSEVSRV9PVUksCisJCS5tb2RlbF9pZAk9IDB4MDAwMDM1LAorCQkuc3BlY2lmaWVyX2lkCT0gQVZDX1VOSVRfU1BFQ19JRF9FTlRSWSwKKwkJLnZlcnNpb24JPSBBVkNfU1dfVkVSU0lPTl9FTlRSWSwKKwl9LCB7CisJCS8qIEZpcmVEVFYgQy9DSSAqLworCQkubWF0Y2hfZmxhZ3MJPSBNQVRDSF9GTEFHUywKKwkJLnZlbmRvcl9pZAk9IERJR0lUQUxfRVZFUllXSEVSRV9PVUksCisJCS5tb2RlbF9pZAk9IDB4MDAwMDM2LAorCQkuc3BlY2lmaWVyX2lkCT0gQVZDX1VOSVRfU1BFQ19JRF9FTlRSWSwKKwkJLnZlcnNpb24JPSBBVkNfU1dfVkVSU0lPTl9FTlRSWSwKKwl9LCB7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaWVlZTEzOTQsIGZkdHZfaWRfdGFibGUpOworCitzdGF0aWMgaW50IF9faW5pdCBmZHR2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZmR0dl8xMzk0X2luaXQoZmR0dl9pZF90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmZHR2X2V4aXQodm9pZCkKK3sKKwlmZHR2XzEzOTRfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChmZHR2X2luaXQpOworbW9kdWxlX2V4aXQoZmR0dl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW5kcmVhcyBNb25pdHplciA8YW5keUBtb25pdHplci5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJCZW4gQmFja3ggPGJlbkBiYmFja3guY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGaXJlRFRWIERWQiBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJGaXJlRFRWIERWQiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTQzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBGaXJlRFRWIGRyaXZlciAoZm9ybWVybHkga25vd24gYXMgRmlyZVNBVCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQW5kcmVhcyBNb25pdHplciA8YW5keUBtb25pdHplci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSGVucmlrIEt1cmVsaWQgPGhlbnJpa0BrdXJlbGlkLnNlPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGR2Yl9mcm9udGVuZC5oPgorCisjaW5jbHVkZSAiZmlyZWR0di5oIgorCitzdGF0aWMgaW50IGZkdHZfZHZiX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHYgPSBmZS0+c2VjX3ByaXY7CisJaW50IGVycjsKKworCS8qIEZJWE1FIC0gYWxsb2NhdGUgZnJlZSBjaGFubmVsIGF0IElSTSAqLworCWZkdHYtPmlzb2NoYW5uZWwgPSBmZHR2LT5hZGFwdGVyLm51bTsKKworCWVyciA9IGNtcF9lc3RhYmxpc2hfcHBfY29ubmVjdGlvbihmZHR2LCBmZHR2LT5zdWJ1bml0LAorCQkJCQkgIGZkdHYtPmlzb2NoYW5uZWwpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihmZHR2LT5kZXZpY2UsCisJCQkiY291bGQgbm90IGVzdGFibGlzaCBwb2ludCB0byBwb2ludCBjb25uZWN0aW9uXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZmR0di0+YmFja2VuZC0+c3RhcnRfaXNvKGZkdHYpOworfQorCitzdGF0aWMgaW50IGZkdHZfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHYgPSBmZS0+c2VjX3ByaXY7CisKKwlmZHR2LT5iYWNrZW5kLT5zdG9wX2lzbyhmZHR2KTsKKwljbXBfYnJlYWtfcHBfY29ubmVjdGlvbihmZHR2LCBmZHR2LT5zdWJ1bml0LCBmZHR2LT5pc29jaGFubmVsKTsKKwlmZHR2LT5pc29jaGFubmVsID0gLTE7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTE5CQ09OVFJPTF9ET05UQ0FSRSAweGZmCisKK3N0YXRpYyBpbnQgZmR0dl9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpjbWQpCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHYgPSBmZS0+c2VjX3ByaXY7CisKKwlyZXR1cm4gYXZjX2xuYl9jb250cm9sKGZkdHYsIExOQkNPTlRST0xfRE9OVENBUkUsIExOQkNPTlRST0xfRE9OVENBUkUsCisJCQkgICAgICAgTE5CQ09OVFJPTF9ET05UQ0FSRSwgMSwgY21kKTsKK30KKworc3RhdGljIGludCBmZHR2X2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgZmVfc2VjX21pbmlfY21kX3QgbWluaWNtZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmZHR2X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgZmlyZWR0diAqZmR0diA9IGZlLT5zZWNfcHJpdjsKKworCWZkdHYtPnRvbmUgPSB0b25lOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZkdHZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OworCisJZmR0di0+dm9sdGFnZSA9IHZvbHRhZ2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgZmlyZWR0diAqZmR0diA9IGZlLT5zZWNfcHJpdjsKKwlzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgc3RhdDsKKworCWlmIChhdmNfdHVuZXJfc3RhdHVzKGZkdHYsICZzdGF0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RhdC5ub19yZikKKwkJKnN0YXR1cyA9IDA7CisJZWxzZQorCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19WSVRFUkJJIHwgRkVfSEFTX1NZTkMgfAorCQkJICBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19MT0NLOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZkdHZfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OworCXN0cnVjdCBmaXJlZHR2X3R1bmVyX3N0YXR1cyBzdGF0OworCisJaWYgKGF2Y190dW5lcl9zdGF0dXMoZmR0diwgJnN0YXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpiZXIgPSBzdGF0LmJlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmZHR2X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OworCXN0cnVjdCBmaXJlZHR2X3R1bmVyX3N0YXR1cyBzdGF0OworCisJaWYgKGF2Y190dW5lcl9zdGF0dXMoZmR0diwgJnN0YXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpzdHJlbmd0aCA9IHN0YXQuc2lnbmFsX3N0cmVuZ3RoIDw8IDg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJc3RydWN0IGZpcmVkdHYgKmZkdHYgPSBmZS0+c2VjX3ByaXY7CisJc3RydWN0IGZpcmVkdHZfdHVuZXJfc3RhdHVzIHN0YXQ7CisKKwlpZiAoYXZjX3R1bmVyX3N0YXR1cyhmZHR2LCAmc3RhdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQy9OW2RCXSA9IC0xMCAqIGxvZzEwKHNuciAvIDY1NTM1KSAqLworCSpzbnIgPSBzdGF0LmNhcnJpZXJfbm9pc2VfcmF0aW8gKiAyNTc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmR0dl9yZWFkX3VuY29ycmVjdGVkX2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKyNkZWZpbmUgQUNDRVBURUQgMHg5CisKK3N0YXRpYyBpbnQgZmR0dl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OworCisJLyogRklYTUU6IGF2Y190dW5lcl9kc2QgbmV2ZXIgcmV0dXJucyBBQ0NFUFRFRC4gQ2hlY2sgc3RhdHVzPyAqLworCWlmIChhdmNfdHVuZXJfZHNkKGZkdHYsIHBhcmFtcykgIT0gQUNDRVBURUQpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UKKwkJcmV0dXJuIDA7IC8qIG5vdCBzdXJlIG9mIHRoaXMuLi4gKi8KK30KKworc3RhdGljIGludCBmZHR2X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCit2b2lkIGZkdHZfZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZmlyZWR0diAqZmR0dikKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyAqb3BzID0gJmZkdHYtPmZlLm9wczsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8gKmZpID0gJm9wcy0+aW5mbzsKKworCW9wcy0+aW5pdAkJCT0gZmR0dl9kdmJfaW5pdDsKKwlvcHMtPnNsZWVwCQkJPSBmZHR2X3NsZWVwOworCisJb3BzLT5zZXRfZnJvbnRlbmQJCT0gZmR0dl9zZXRfZnJvbnRlbmQ7CisJb3BzLT5nZXRfZnJvbnRlbmQJCT0gZmR0dl9nZXRfZnJvbnRlbmQ7CisKKwlvcHMtPnJlYWRfc3RhdHVzCQk9IGZkdHZfcmVhZF9zdGF0dXM7CisJb3BzLT5yZWFkX2JlcgkJCT0gZmR0dl9yZWFkX2JlcjsKKwlvcHMtPnJlYWRfc2lnbmFsX3N0cmVuZ3RoCT0gZmR0dl9yZWFkX3NpZ25hbF9zdHJlbmd0aDsKKwlvcHMtPnJlYWRfc25yCQkJPSBmZHR2X3JlYWRfc25yOworCW9wcy0+cmVhZF91Y2Jsb2NrcwkJPSBmZHR2X3JlYWRfdW5jb3JyZWN0ZWRfYmxvY2tzOworCisJb3BzLT5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kIAk9IGZkdHZfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKKwlvcHMtPmRpc2VxY19zZW5kX2J1cnN0CQk9IGZkdHZfZGlzZXFjX3NlbmRfYnVyc3Q7CisJb3BzLT5zZXRfdG9uZQkJCT0gZmR0dl9zZXRfdG9uZTsKKwlvcHMtPnNldF92b2x0YWdlCQk9IGZkdHZfc2V0X3ZvbHRhZ2U7CisKKwlzd2l0Y2ggKGZkdHYtPnR5cGUpIHsKKwljYXNlIEZJUkVEVFZfRFZCX1M6CisJY2FzZSBGSVJFRFRWX0RWQl9TMjoKKwkJZmktPnR5cGUJCT0gRkVfUVBTSzsKKworCQlmaS0+ZnJlcXVlbmN5X21pbgk9IDk1MDAwMDsKKwkJZmktPmZyZXF1ZW5jeV9tYXgJPSAyMTUwMDAwOworCQlmaS0+ZnJlcXVlbmN5X3N0ZXBzaXplCT0gMTI1OworCQlmaS0+c3ltYm9sX3JhdGVfbWluCT0gMTAwMDAwMDsKKwkJZmktPnN5bWJvbF9yYXRlX21heAk9IDQwMDAwMDAwOworCisJCWZpLT5jYXBzIAkJPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8JfAorCQkJCQkgIEZFX0NBTl9GRUNfMV8yCXwKKwkJCQkJICBGRV9DQU5fRkVDXzJfMwl8CisJCQkJCSAgRkVfQ0FOX0ZFQ18zXzQJfAorCQkJCQkgIEZFX0NBTl9GRUNfNV82CXwKKwkJCQkJICBGRV9DQU5fRkVDXzdfOAl8CisJCQkJCSAgRkVfQ0FOX0ZFQ19BVVRPCXwKKwkJCQkJICBGRV9DQU5fUVBTSzsKKwkJYnJlYWs7CisKKwljYXNlIEZJUkVEVFZfRFZCX0M6CisJCWZpLT50eXBlCQk9IEZFX1FBTTsKKworCQlmaS0+ZnJlcXVlbmN5X21pbgk9IDQ3MDAwMDAwOworCQlmaS0+ZnJlcXVlbmN5X21heAk9IDg2NjAwMDAwMDsKKwkJZmktPmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDYyNTAwOworCQlmaS0+c3ltYm9sX3JhdGVfbWluCT0gODcwMDAwOworCQlmaS0+c3ltYm9sX3JhdGVfbWF4CT0gNjkwMDAwMDsKKworCQlmaS0+Y2FwcyAJCT0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKKwkJCQkJICBGRV9DQU5fUUFNXzE2CQl8CisJCQkJCSAgRkVfQ0FOX1FBTV8zMgkJfAorCQkJCQkgIEZFX0NBTl9RQU1fNjQJCXwKKwkJCQkJICBGRV9DQU5fUUFNXzEyOAl8CisJCQkJCSAgRkVfQ0FOX1FBTV8yNTYJfAorCQkJCQkgIEZFX0NBTl9RQU1fQVVUTzsKKwkJYnJlYWs7CisKKwljYXNlIEZJUkVEVFZfRFZCX1Q6CisJCWZpLT50eXBlCQk9IEZFX09GRE07CisKKwkJZmktPmZyZXF1ZW5jeV9taW4JPSA0OTAwMDAwMDsKKwkJZmktPmZyZXF1ZW5jeV9tYXgJPSA4NjEwMDAwMDA7CisJCWZpLT5mcmVxdWVuY3lfc3RlcHNpemUJPSA2MjUwMDsKKworCQlmaS0+Y2FwcyAJCT0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPCQl8CisJCQkJCSAgRkVfQ0FOX0ZFQ18yXzMJCXwKKwkJCQkJICBGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8CisJCQkJCSAgRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8JfAorCQkJCQkgIEZFX0NBTl9ISUVSQVJDSFlfQVVUTzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIm5vIGZyb250ZW5kIGZvciBtb2RlbCB0eXBlICVkXG4iLAorCQkJZmR0di0+dHlwZSk7CisJfQorCXN0cmNweShmaS0+bmFtZSwgZmR0dl9tb2RlbF9uYW1lc1tmZHR2LT50eXBlXSk7CisKKwlmZHR2LT5mZS5kdmIgPSAmZmR0di0+YWRhcHRlcjsKKwlmZHR2LT5mZS5zZWNfcHJpdiA9IGZkdHY7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LXJjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LXJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhNjMyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtcmMuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIEZpcmVEVFYgZHJpdmVyIChmb3JtZXJseSBrbm93biBhcyBGaXJlU0FUKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBBbmRyZWFzIE1vbml0emVyIDxhbmR5QG1vbml0emVyLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJmaXJlZHR2LmgiCisKKy8qIGZpeGVkIHRhYmxlIHdpdGggb2xkZXIga2V5Y29kZXMsIGdlYXJlZCB0b3dhcmRzIE15dGhUViAqLworY29uc3Qgc3RhdGljIHUxNiBvbGR0YWJsZVtdID0geworCisJLyogY29kZSBmcm9tIGRldmljZTogMHg0NTAxLi4uMHg0NTFmICovCisKKwlLRVlfRVNDLAorCUtFWV9GOSwKKwlLRVlfMSwKKwlLRVlfMiwKKwlLRVlfMywKKwlLRVlfNCwKKwlLRVlfNSwKKwlLRVlfNiwKKwlLRVlfNywKKwlLRVlfOCwKKwlLRVlfOSwKKwlLRVlfSSwKKwlLRVlfMCwKKwlLRVlfRU5URVIsCisJS0VZX1JFRCwKKwlLRVlfVVAsCisJS0VZX0dSRUVOLAorCUtFWV9GMTAsCisJS0VZX1NQQUNFLAorCUtFWV9GMTEsCisJS0VZX1lFTExPVywKKwlLRVlfRE9XTiwKKwlLRVlfQkxVRSwKKwlLRVlfWiwKKwlLRVlfUCwKKwlLRVlfUEFHRURPV04sCisJS0VZX0xFRlQsCisJS0VZX1csCisJS0VZX1JJR0hULAorCUtFWV9QLAorCUtFWV9NLAorCisJLyogY29kZSBmcm9tIGRldmljZTogMHg0NTQwLi4uMHg0NTQyICovCisKKwlLRVlfUiwKKwlLRVlfViwKKwlLRVlfQywKK307CisKKy8qIHVzZXItbW9kaWZpYWJsZSB0YWJsZSBmb3IgYSByZW1vdGUgYXMgc29sZCBpbiAyMDA4ICovCitjb25zdCBzdGF0aWMgdTE2IGtleXRhYmxlW10gPSB7CisKKwkvKiBjb2RlIGZyb20gZGV2aWNlOiAweDAzMDAuLi4weDAzMWYgKi8KKworCVsweDAwXSA9IEtFWV9QT1dFUiwKKwlbMHgwMV0gPSBLRVlfU0xFRVAsCisJWzB4MDJdID0gS0VZX1NUT1AsCisJWzB4MDNdID0gS0VZX09LLAorCVsweDA0XSA9IEtFWV9SSUdIVCwKKwlbMHgwNV0gPSBLRVlfMSwKKwlbMHgwNl0gPSBLRVlfMiwKKwlbMHgwN10gPSBLRVlfMywKKwlbMHgwOF0gPSBLRVlfTEVGVCwKKwlbMHgwOV0gPSBLRVlfNCwKKwlbMHgwYV0gPSBLRVlfNSwKKwlbMHgwYl0gPSBLRVlfNiwKKwlbMHgwY10gPSBLRVlfVVAsCisJWzB4MGRdID0gS0VZXzcsCisJWzB4MGVdID0gS0VZXzgsCisJWzB4MGZdID0gS0VZXzksCisJWzB4MTBdID0gS0VZX0RPV04sCisJWzB4MTFdID0gS0VZX1RJVExFLAkvKiAiT1NEIiAtIGZpeG1lICovCisJWzB4MTJdID0gS0VZXzAsCisJWzB4MTNdID0gS0VZX0YyMCwJLyogIjE2OjkiIC0gZml4bWUgKi8KKwlbMHgxNF0gPSBLRVlfU0NSRUVOLAkvKiAiRlVMTCIgLSBmaXhtZSAqLworCVsweDE1XSA9IEtFWV9NVVRFLAorCVsweDE2XSA9IEtFWV9TVUJUSVRMRSwKKwlbMHgxN10gPSBLRVlfUkVDT1JELAorCVsweDE4XSA9IEtFWV9URVhULAorCVsweDE5XSA9IEtFWV9BVURJTywKKwlbMHgxYV0gPSBLRVlfUkVELAorCVsweDFiXSA9IEtFWV9QUkVWSU9VUywKKwlbMHgxY10gPSBLRVlfUkVXSU5ELAorCVsweDFkXSA9IEtFWV9QTEFZUEFVU0UsCisJWzB4MWVdID0gS0VZX05FWFQsCisJWzB4MWZdID0gS0VZX1ZPTFVNRVVQLAorCisJLyogY29kZSBmcm9tIGRldmljZTogMHgwMzQwLi4uMHgwMzU0ICovCisKKwlbMHgyMF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsweDIxXSA9IEtFWV9GMjEsCS8qICI0OjMiIC0gZml4bWUgKi8KKwlbMHgyMl0gPSBLRVlfVFYsCisJWzB4MjNdID0gS0VZX0RWRCwKKwlbMHgyNF0gPSBLRVlfVkNSLAorCVsweDI1XSA9IEtFWV9BVVgsCisJWzB4MjZdID0gS0VZX0dSRUVOLAorCVsweDI3XSA9IEtFWV9ZRUxMT1csCisJWzB4MjhdID0gS0VZX0JMVUUsCisJWzB4MjldID0gS0VZX0NIQU5ORUwsCS8qICJDSC5MSVNUIiAqLworCVsweDJhXSA9IEtFWV9WRU5ET1IsCS8qICJDSSIgLSBmaXhtZSAqLworCVsweDJiXSA9IEtFWV9WT0xVTUVET1dOLAorCVsweDJjXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbMHgyZF0gPSBLRVlfTEFTVCwKKwlbMHgyZV0gPSBLRVlfSU5GTywKKwlbMHgyZl0gPSBLRVlfRk9SV0FSRCwKKwlbMHgzMF0gPSBLRVlfTElTVCwKKwlbMHgzMV0gPSBLRVlfRkFWT1JJVEVTLAorCVsweDMyXSA9IEtFWV9NRU5VLAorCVsweDMzXSA9IEtFWV9FUEcsCisJWzB4MzRdID0gS0VZX0VYSVQsCit9OworCitpbnQgZmR0dl9yZWdpc3Rlcl9yYyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisJaW50IGksIGVycjsKKworCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZmR0di0+cmVtb3RlX2N0cmxfZGV2ID0gaWRldjsKKwlpZGV2LT5uYW1lID0gIkZpcmVEVFYgcmVtb3RlIGNvbnRyb2wiOworCWlkZXYtPmRldi5wYXJlbnQgPSBkZXY7CisJaWRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCWlkZXYtPmtleWNvZGUgPSBrbWVtZHVwKGtleXRhYmxlLCBzaXplb2Yoa2V5dGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkZXYtPmtleWNvZGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlpZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrZXl0YWJsZVswXSk7CisJaWRldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2V5dGFibGUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2V5dGFibGUpOyBpKyspCisJCXNldF9iaXQoa2V5dGFibGVbaV0sIGlkZXYtPmtleWJpdCk7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaWRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsX2ZyZWVfa2V5bWFwOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZnJlZV9rZXltYXA6CisJa2ZyZWUoaWRldi0+a2V5Y29kZSk7CitmYWlsOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgZmR0dl91bnJlZ2lzdGVyX3JjKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQoreworCWtmcmVlKGZkdHYtPnJlbW90ZV9jdHJsX2Rldi0+a2V5Y29kZSk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZmR0di0+cmVtb3RlX2N0cmxfZGV2KTsKK30KKwordm9pZCBmZHR2X2hhbmRsZV9yYyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdW5zaWduZWQgaW50IGNvZGUpCit7CisJdTE2ICprZXljb2RlID0gZmR0di0+cmVtb3RlX2N0cmxfZGV2LT5rZXljb2RlOworCisJaWYgKGNvZGUgPj0gMHgwMzAwICYmIGNvZGUgPD0gMHgwMzFmKQorCQljb2RlID0ga2V5Y29kZVtjb2RlIC0gMHgwMzAwXTsKKwllbHNlIGlmIChjb2RlID49IDB4MDM0MCAmJiBjb2RlIDw9IDB4MDM1NCkKKwkJY29kZSA9IGtleWNvZGVbY29kZSAtIDB4MDMyMF07CisJZWxzZSBpZiAoY29kZSA+PSAweDQ1MDEgJiYgY29kZSA8PSAweDQ1MWYpCisJCWNvZGUgPSBvbGR0YWJsZVtjb2RlIC0gMHg0NTAxXTsKKwllbHNlIGlmIChjb2RlID49IDB4NDU0MCAmJiBjb2RlIDw9IDB4NDU0MikKKwkJY29kZSA9IG9sZHRhYmxlW2NvZGUgLSAweDQ1MjFdOworCWVsc2UgeworCQlwcmludGsoS0VSTl9ERUJVRyAiZmlyZWR0djogaW52YWxpZCBrZXkgY29kZSAweCUwNHggIgorCQkgICAgICAgImZyb20gcmVtb3RlIGNvbnRyb2xcbiIsIGNvZGUpOworCQlyZXR1cm47CisJfQorCisJaW5wdXRfcmVwb3J0X2tleShmZHR2LT5yZW1vdGVfY3RybF9kZXYsIGNvZGUsIDEpOworCWlucHV0X3JlcG9ydF9rZXkoZmR0di0+cmVtb3RlX2N0cmxfZGV2LCBjb2RlLCAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDg1MzBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogRmlyZURUViBkcml2ZXIgKGZvcm1lcmx5IGtub3duIGFzIEZpcmVTQVQpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFuZHJlYXMgTW9uaXR6ZXIgPGFuZHlAbW9uaXR6ZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhlbnJpayBLdXJlbGlkIDxoZW5yaWtAa3VyZWxpZC5zZT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0ZJUkVEVFZfSAorI2RlZmluZSBfRklSRURUVl9ICisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZG14Lmg+CisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGRlbXV4Lmg+CisjaW5jbHVkZSA8ZG14ZGV2Lmg+CisjaW5jbHVkZSA8ZHZiX2RlbXV4Lmg+CisjaW5jbHVkZSA8ZHZiX2Zyb250ZW5kLmg+CisjaW5jbHVkZSA8ZHZiX25ldC5oPgorI2luY2x1ZGUgPGR2YmRldi5oPgorCitzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgeworCXVuc2lnbmVkIGFjdGl2ZV9zeXN0ZW06ODsKKwl1bnNpZ25lZCBzZWFyY2hpbmc6MTsKKwl1bnNpZ25lZCBtb3Zpbmc6MTsKKwl1bnNpZ25lZCBub19yZjoxOworCXVuc2lnbmVkIGlucHV0OjE7CisJdW5zaWduZWQgc2VsZWN0ZWRfYW50ZW5uYTo3OworCXVuc2lnbmVkIGJlcjozMjsKKwl1bnNpZ25lZCBzaWduYWxfc3RyZW5ndGg6ODsKKwl1bnNpZ25lZCByYXN0ZXJfZnJlcXVlbmN5OjI7CisJdW5zaWduZWQgcmZfZnJlcXVlbmN5OjIyOworCXVuc2lnbmVkIG1hbl9kZXBfaW5mb19sZW5ndGg6ODsKKwl1bnNpZ25lZCBmcm9udF9lbmRfZXJyb3I6MTsKKwl1bnNpZ25lZCBhbnRlbm5hX2Vycm9yOjE7CisJdW5zaWduZWQgZnJvbnRfZW5kX3Bvd2VyX3N0YXR1czoxOworCXVuc2lnbmVkIHBvd2VyX3N1cHBseToxOworCXVuc2lnbmVkIGNhcnJpZXJfbm9pc2VfcmF0aW86MTY7CisJdW5zaWduZWQgcG93ZXJfc3VwcGx5X3ZvbHRhZ2U6ODsKKwl1bnNpZ25lZCBhbnRlbm5hX3ZvbHRhZ2U6ODsKKwl1bnNpZ25lZCBmaXJld2lyZV9idXNfdm9sdGFnZTo4OworCXVuc2lnbmVkIGNhX21taToxOworCXVuc2lnbmVkIGNhX3BtdF9yZXBseToxOworCXVuc2lnbmVkIGNhX2RhdGVfdGltZV9yZXF1ZXN0OjE7CisJdW5zaWduZWQgY2FfYXBwbGljYXRpb25faW5mbzoxOworCXVuc2lnbmVkIGNhX21vZHVsZV9wcmVzZW50X3N0YXR1czoxOworCXVuc2lnbmVkIGNhX2R2Yl9mbGFnOjE7CisJdW5zaWduZWQgY2FfZXJyb3JfZmxhZzoxOworCXVuc2lnbmVkIGNhX2luaXRpYWxpemF0aW9uX3N0YXR1czoxOworfTsKKworZW51bSBtb2RlbF90eXBlIHsKKwlGSVJFRFRWX1VOS05PV04gPSAwLAorCUZJUkVEVFZfRFZCX1MgICA9IDEsCisJRklSRURUVl9EVkJfQyAgID0gMiwKKwlGSVJFRFRWX0RWQl9UICAgPSAzLAorCUZJUkVEVFZfRFZCX1MyICA9IDQsCit9OworCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGlucHV0X2RldjsKK3N0cnVjdCBmaXJlZHR2OworCitzdHJ1Y3QgZmlyZWR0dl9iYWNrZW5kIHsKKwlpbnQgKCpsb2NrKShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEsIF9fYmUzMiBhcmcpOworCWludCAoKnJlYWQpKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisJaW50ICgqc3RhcnRfaXNvKShzdHJ1Y3QgZmlyZWR0diAqZmR0dik7CisJdm9pZCAoKnN0b3BfaXNvKShzdHJ1Y3QgZmlyZWR0diAqZmR0dik7Cit9OworCitzdHJ1Y3QgZmlyZWR0diB7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXN0cnVjdCBkdmJfYWRhcHRlcglhZGFwdGVyOworCXN0cnVjdCBkbXhkZXYJCWRteGRldjsKKwlzdHJ1Y3QgZHZiX2RlbXV4CWRlbXV4OworCXN0cnVjdCBkbXhfZnJvbnRlbmQJZnJvbnRlbmQ7CisJc3RydWN0IGR2Yl9uZXQJCWR2Ym5ldDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kCWZlOworCisJc3RydWN0IGR2Yl9kZXZpY2UJKmNhZGV2OworCWludAkJCWNhX2xhc3RfY29tbWFuZDsKKwlpbnQJCQljYV90aW1lX2ludGVydmFsOworCisJc3RydWN0IG11dGV4CQlhdmNfbXV0ZXg7CisJd2FpdF9xdWV1ZV9oZWFkX3QJYXZjX3dhaXQ7CisJYm9vbAkJCWF2Y19yZXBseV9yZWNlaXZlZDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVtb3RlX2N0cmxfd29yazsKKwlzdHJ1Y3QgaW5wdXRfZGV2CSpyZW1vdGVfY3RybF9kZXY7CisKKwllbnVtIG1vZGVsX3R5cGUJCXR5cGU7CisJY2hhcgkJCXN1YnVuaXQ7CisJY2hhcgkJCWlzb2NoYW5uZWw7CisJZmVfc2VjX3ZvbHRhZ2VfdAl2b2x0YWdlOworCWZlX3NlY190b25lX21vZGVfdAl0b25lOworCisJY29uc3Qgc3RydWN0IGZpcmVkdHZfYmFja2VuZCAqYmFja2VuZDsKKwl2b2lkCQkJKmJhY2tlbmRfZGF0YTsKKworCXN0cnVjdCBtdXRleAkJZGVtdXhfbXV0ZXg7CisJdW5zaWduZWQgbG9uZwkJY2hhbm5lbF9hY3RpdmU7CisJdTE2CQkJY2hhbm5lbF9waWRbMTZdOworCisJc2l6ZV90CQkJcmVzcG9uc2VfbGVuZ3RoOworCXU4CQkJcmVzcG9uc2VbNTEyXTsKK307CisKKy8qIGZpcmVkdHYtMTM5NC5jICovCisjaWZkZWYgQ09ORklHX0RWQl9GSVJFRFRWX0lFRUUxMzk0CitpbnQgZmR0dl8xMzk0X2luaXQoc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBpZF90YWJsZVtdKTsKK3ZvaWQgZmR0dl8xMzk0X2V4aXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZmR0dl8xMzk0X2luaXQoc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBpdFtdKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmR0dl8xMzk0X2V4aXQodm9pZCkge30KKyNlbmRpZgorCisvKiBmaXJlZHR2LWF2Yy5jICovCitpbnQgYXZjX3JlY3Yoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpOworaW50IGF2Y190dW5lcl9zdGF0dXMoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHN0cnVjdCBmaXJlZHR2X3R1bmVyX3N0YXR1cyAqc3RhdCk7CitzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnM7CitpbnQgYXZjX3R1bmVyX2RzZChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpOworaW50IGF2Y190dW5lcl9zZXRfcGlkcyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdW5zaWduZWQgY2hhciBwaWRjLCB1MTYgcGlkW10pOworaW50IGF2Y190dW5lcl9nZXRfdHMoc3RydWN0IGZpcmVkdHYgKmZkdHYpOworaW50IGF2Y19pZGVudGlmeV9zdWJ1bml0KHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKK3N0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQ7CitpbnQgYXZjX2xuYl9jb250cm9sKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyIHZvbHRhZ2UsIGNoYXIgYnVyc3QsCisJCSAgICBjaGFyIGNvbnR0b25lLCBjaGFyIG5yZGlzZXEsCisJCSAgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpkaXNlcWNtZCk7Cit2b2lkIGF2Y19yZW1vdGVfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgYXZjX3JlZ2lzdGVyX3JlbW90ZV9jb250cm9sKHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKK2ludCBhdmNfY2FfYXBwX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKmFwcF9pbmZvLCB1bnNpZ25lZCBpbnQgKmxlbik7CitpbnQgYXZjX2NhX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKmFwcF9pbmZvLCB1bnNpZ25lZCBpbnQgKmxlbik7CitpbnQgYXZjX2NhX3Jlc2V0KHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKK2ludCBhdmNfY2FfcG10KHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyICphcHBfaW5mbywgaW50IGxlbmd0aCk7CitpbnQgYXZjX2NhX2dldF90aW1lX2RhdGUoc3RydWN0IGZpcmVkdHYgKmZkdHYsIGludCAqaW50ZXJ2YWwpOworaW50IGF2Y19jYV9lbnRlcl9tZW51KHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKK2ludCBhdmNfY2FfZ2V0X21taShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqbW1pX29iamVjdCwgdW5zaWduZWQgaW50ICpsZW4pOworaW50IGNtcF9lc3RhYmxpc2hfcHBfY29ubmVjdGlvbihzdHJ1Y3QgZmlyZWR0diAqZmR0diwgaW50IHBsdWcsIGludCBjaGFubmVsKTsKK3ZvaWQgY21wX2JyZWFrX3BwX2Nvbm5lY3Rpb24oc3RydWN0IGZpcmVkdHYgKmZkdHYsIGludCBwbHVnLCBpbnQgY2hhbm5lbCk7CisKKy8qIGZpcmVkdHYtY2kuYyAqLworaW50IGZkdHZfY2FfcmVnaXN0ZXIoc3RydWN0IGZpcmVkdHYgKmZkdHYpOwordm9pZCBmZHR2X2NhX3JlbGVhc2Uoc3RydWN0IGZpcmVkdHYgKmZkdHYpOworCisvKiBmaXJlZHR2LWR2Yi5jICovCitpbnQgZmR0dl9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCk7CitpbnQgZmR0dl9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKTsKK2ludCBmZHR2X2R2Yl9yZWdpc3RlcihzdHJ1Y3QgZmlyZWR0diAqZmR0dik7Cit2b2lkIGZkdHZfZHZiX3VucmVnaXN0ZXIoc3RydWN0IGZpcmVkdHYgKmZkdHYpOworc3RydWN0IGZpcmVkdHYgKmZkdHZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IGZpcmVkdHZfYmFja2VuZCAqYmFja2VuZCwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbik7CitleHRlcm4gY29uc3QgY2hhciAqZmR0dl9tb2RlbF9uYW1lc1tdOworCisvKiBmaXJlZHR2LWZlLmMgKi8KK3ZvaWQgZmR0dl9mcm9udGVuZF9pbml0KHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKKworLyogZmlyZWR0di1yYy5jICovCisjaWZkZWYgQ09ORklHX0RWQl9GSVJFRFRWX0lOUFVUCitpbnQgZmR0dl9yZWdpc3Rlcl9yYyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgc3RydWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgZmR0dl91bnJlZ2lzdGVyX3JjKHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKK3ZvaWQgZmR0dl9oYW5kbGVfcmMoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHVuc2lnbmVkIGludCBjb2RlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBmZHR2X3JlZ2lzdGVyX3JjKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGZkdHZfdW5yZWdpc3Rlcl9yYyhzdHJ1Y3QgZmlyZWR0diAqZmR0dikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmZHR2X2hhbmRsZV9yYyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdW5zaWduZWQgaW50IGNvZGUpIHt9CisjZW5kaWYKKworI2VuZGlmIC8qIF9GSVJFRFRWX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2FsZ28uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2FsZ28uYwppbmRleCBhNjdkMTc3Li4yZGE1NWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9hbGdvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfYWxnby5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAl9CiAKIAlpZiAocmFuZ2UgPiAwKQotCQlpbnRlcm5hbC0+c3ViX3JhbmdlID0gTUlOKGludGVybmFsLT5zcmNoX3JhbmdlLCByYW5nZSk7CisJCWludGVybmFsLT5zdWJfcmFuZ2UgPSBtaW4oaW50ZXJuYWwtPnNyY2hfcmFuZ2UsIHJhbmdlKTsKIAllbHNlCiAJCWludGVybmFsLT5zdWJfcmFuZ2UgPSAwOwogCkBAIC0xODUsNyArMTg1LDcgQEAKIAl0aW1pbmcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1JURik7CiAKIAlpZiAobG9jayA+PSA0MikgewotCQlpZiAoKGxvY2sgPiA0OCkgJiYgKEFCUyh0aW1pbmcpID49IDExMCkpIHsKKwkJaWYgKChsb2NrID4gNDgpICYmIChhYnModGltaW5nKSA+PSAxMTApKSB7CiAJCQlpbnRlcm5hbC0+c3RhdHVzID0gQU5BTE9HQ0FSUklFUjsKIAkJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0+QU5BTE9HIENhcnJpZXIgISIpOwogCQl9IGVsc2UgewpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCWluZGV4Kys7CiAJCWRlcm90X2ZyZXEgKz0gaW5kZXggKiBpbnRlcm5hbC0+ZGlyZWN0aW9uICogZGVyb3Rfc3RlcDsJLyogbmV4dCBkZXJvdCB6aWcgemFnIHBvc2l0aW9uCSovCiAKLQkJaWYgKEFCUyhkZXJvdF9mcmVxKSA+IGRlcm90X2xpbWl0KQorCQlpZiAoYWJzKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCiAJCQluZXh0X2xvb3AtLTsKIAogCQlpZiAobmV4dF9sb29wKSB7CkBAIC0yOTgsNyArMjk4LDcgQEAKIAkJCWxhc3RfZGVyb3RfZnJlcSA9IGRlcm90X2ZyZXE7CiAJCQlkZXJvdF9mcmVxICs9IGluZGV4ICogaW50ZXJuYWwtPmRpcmVjdGlvbiAqIGludGVybmFsLT5kZXJvdF9zdGVwOyAvKiBuZXh0IHppZyB6YWcgZGVyb3RhdG9yIHBvc2l0aW9uICovCiAKLQkJCWlmKEFCUyhkZXJvdF9mcmVxKSA+IGRlcm90X2xpbWl0KQorCQkJaWYoYWJzKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCiAJCQkJbmV4dF9sb29wLS07CiAKIAkJCWlmIChuZXh0X2xvb3ApIHsKQEAgLTQwMCw3ICs0MDAsNyBAQAogCQlpZiAoKGludGVybmFsLT5zdGF0dXMgIT0gQ0FSUklFUk9LKSB8fCAoc3RiMDg5OV9jaGVja19kYXRhKHN0YXRlKSAhPSBEQVRBT0spKSB7CiAKIAkJCWRlcm90X2ZyZXEgKz0gaW5kZXggKiBpbnRlcm5hbC0+ZGlyZWN0aW9uICogZGVyb3Rfc3RlcDsJLyogbmV4dCB6aWcgemFnIGRlcm90YXRvciBwb3NpdGlvbiAqLwotCQkJaWYgKEFCUyhkZXJvdF9mcmVxKSA+IGRlcm90X2xpbWl0KQorCQkJaWYgKGFicyhkZXJvdF9mcmVxKSA+IGRlcm90X2xpbWl0KQogCQkJCW5leHRfbG9vcC0tOwogCiAJCQlpZiAobmV4dF9sb29wKSB7CkBAIC00NjcsNyArNDY3LDcgQEAKIAogCWlmIChpbnRlcm5hbC0+c3ViX2RpciA+IDApIHsKIAkJb2xkX3N1Yl9yYW5nZSA9IGludGVybmFsLT5zdWJfcmFuZ2U7Ci0JCWludGVybmFsLT5zdWJfcmFuZ2UgPSBNSU4oKGludGVybmFsLT5zcmNoX3JhbmdlIC8gMikgLQorCQlpbnRlcm5hbC0+c3ViX3JhbmdlID0gbWluKChpbnRlcm5hbC0+c3JjaF9yYW5nZSAvIDIpIC0KIAkJCQkJICAoaW50ZXJuYWwtPnR1bmVyX29mZnN0ICsgaW50ZXJuYWwtPnN1Yl9yYW5nZSAvIDIpLAogCQkJCQkgICBpbnRlcm5hbC0+c3ViX3JhbmdlKTsKIApAQCAtNzcxLDcgKzc3MSw3IEBACiAJaW50IGk7CiAKIAlpID0gMDsKLQl3aGlsZSAoKDEgPDwgaSkgPD0gQUJTKG51bWJlcikpCisJd2hpbGUgKCgxIDw8IGkpIDw9IGFicyhudW1iZXIpKQogCQlpKys7CiAKIAlpZiAobnVtYmVyID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9kcnYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2Rydi5jCmluZGV4IDEwNjEzYWMuLmEwNGM3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2Rydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2Rydi5jCkBAIC03OTQsNyArNzk0LDcgQEAKIAlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSk7CiAJb2xkX3N0YXRlID0gcmVnOwogCS8qIHNldCB0byBidXJzdCBtb2RlCSovCi0JU1RCMDg5OV9TRVRGSUVMRF9WQUwoRElTRVFDTU9ERSwgcmVnLCAweDAyKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChESVNFUUNNT0RFLCByZWcsIDB4MDMpOwogCVNUQjA4OTlfU0VURklFTERfVkFMKERJU1BSRUNIQVJHRSwgcmVnLCAweDAxKTsKIAlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNDTlRSTDEsIHJlZyk7CiAJc3dpdGNoIChidXJzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfcHJpdi5oCmluZGV4IDI0NjE5ZTMuLjgyMzk1YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9wcml2LmgKQEAgLTU5LDEwICs1OSw2IEBACiAjZGVmaW5lIE1BS0VXT1JEMzIoYSwgYiwgYywgZCkJCQkoKChhKSA8PCAyNCkgfCAoKGIpIDw8IDE2KSB8ICgoYykgPDwgOCkgfCAoZCkpCiAjZGVmaW5lIE1BS0VXT1JEMTYoYSwgYikJCQkoKChhKSA8PCA4KSB8IChiKSkKIAotI2RlZmluZSBNSU4oeCwgeSkJCQkJKCh4KSA8PSAoeSkgPyAoeCkgOiAoeSkpCi0jZGVmaW5lIE1BWCh4LCB5KQkJCQkoKHgpID49ICh5KSA/ICh4KSA6ICh5KSkKLSNkZWZpbmUgQUJTKHgpCQkJCQkoKHgpID49IDAgPyAoeCkgOiAtKHgpKQotCiAjZGVmaW5lIExTQih4KQkJCQkJKCh4ICYgMHhmZikpCiAjZGVmaW5lIE1TQih5KQkJCQkJKCh5ID4+IDgpICYgMHhmZikKIApAQCAtMTY4LDEwICsxNjQsMTAgQEAKIAl1MzIJCQlmcmVxOwkJCS8qIERlbW9kIGludGVybmFsIEZyZXF1ZW5jeQkJKi8KIAl1MzIJCQlzcmF0ZTsJCQkvKiBEZW1vZCBpbnRlcm5hbCBTeW1ib2wgcmF0ZQkJKi8KIAllbnVtIHN0YjA4OTlfZmVjCWZlY3JhdGU7CQkvKiBEZW1vZCBpbnRlcm5hbCBGRUMgcmF0ZQkJKi8KLQl1MzIJCQlzcmNoX3JhbmdlOwkJLyogRGVtb2QgaW50ZXJuYWwgU2VhcmNoIFJhbmdlCQkqLwotCXUzMgkJCXN1Yl9yYW5nZTsJCS8qIERlbW9kIGN1cnJlbnQgc3ViIHJhbmdlIChIeikJCSovCi0JdTMyCQkJdHVuZXJfc3RlcDsJCS8qIFR1bmVyIHN0ZXAgKEh6KQkJCSovCi0JdTMyCQkJdHVuZXJfb2Zmc3Q7CQkvKiBSZWxhdGl2ZSBvZmZzZXQgdG8gY2FycmllciAoSHopCSovCisJczMyCQkJc3JjaF9yYW5nZTsJCS8qIERlbW9kIGludGVybmFsIFNlYXJjaCBSYW5nZQkJKi8KKwlzMzIJCQlzdWJfcmFuZ2U7CQkvKiBEZW1vZCBjdXJyZW50IHN1YiByYW5nZSAoSHopCQkqLworCXMzMgkJCXR1bmVyX3N0ZXA7CQkvKiBUdW5lciBzdGVwIChIeikJCQkqLworCXMzMgkJCXR1bmVyX29mZnN0OwkJLyogUmVsYXRpdmUgb2Zmc2V0IHRvIGNhcnJpZXIgKEh6KQkqLwogCXUzMgkJCXR1bmVyX2J3OwkJLyogQ3VycmVudCBiYW5kd2lkdGggb2YgdGhlIHR1bmVyIChIeikJKi8KIAogCXMzMgkJCW1jbGs7CQkJLyogTWFzdGVyY2xvY2sgRGl2aWRlciBmYWN0b3IgKGJpbmFyeSkJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCmluZGV4IGZmMzkyNzUuLjFlZDVhN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYwpAQCAtNDI3LDExICs0MjcsMTEgQEAKIAlzdGF0dXMtPnJlZmNsb2NrCT0gMjcwMDAwMDA7CS8qIEh6CSovCiAJc3RhdHVzLT5pcXNlbnNlCQk9IDE7CiAJc3RhdHVzLT5iYW5kd2lkdGgJPSAzNjAwMDsJLyoga0h6CSovCi0Jc3RhdGUtPmJhbmR3aWR0aAk9IHN0YXR1cy0+YmFuZHdpZHRoICogMTAwMDsJLyogTUh6CSovCisJc3RhdGUtPmJhbmR3aWR0aAk9IHN0YXR1cy0+YmFuZHdpZHRoICogMTAwMDsJLyogSHoJKi8KIAlzdGF0ZS0+cmVmZXJlbmNlCT0gc3RhdHVzLT5yZWZjbG9jayAvIDEwMDA7CS8qIGtIegkqLwogCiAJLyogU2V0IGRlZmF1bHQgYmFuZHdpZHRoLgkqLwotCXJldHVybiBzdGI2MTAwX3NldF9iYW5kd2lkdGgoZmUsIHN0YXR1cy0+YmFuZHdpZHRoKTsKKwlyZXR1cm4gc3RiNjEwMF9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+YmFuZHdpZHRoKTsKIH0KIAogc3RhdGljIGludCBzdGI2MTAwX2dldF9zdGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCmluZGV4IDE3MDcyMGIuLmIxNTBlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwpAQCAtNTkwLDcgKzU5MCw3IEBACiAJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggdmFsID0gMHgwYTsKIAotCWlmIChzdGF0ZS0+Y29uZmlnLm5vX3R1bmVyKSB7CisJaWYgKHN0YXRlLT5jb25maWcuZGlzYWJsZV9pMmNfZ2F0ZV9jdHJsKSB7CiAJCS8qIE5vIHR1bmVyIGF0dGFjaGVkIHRvIHRoZSBpbnRlcm5hbCBJMkMgYnVzICovCiAJCS8qIElmIHNldCBlbmFibGUgSTJDIGJyaWRnZSwgdGhlIG1haW4gSTJDIGJ1cyBzdG9wcGVkIGhhcmRseSAqLwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCmluZGV4IGZkYmI4OGYuLjIyODdiYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaApAQCAtMzgsNiArMzgsOSBAQAogCiAJLyogc2V0IGlmIHBhcmFsbGVsIHRzIG91dHB1dCBpcyByZXF1aXJlZCAqLwogCWludCBwYXJhbGxlbF90czsKKworCS8qIHNldCBpZiBpMmNfZ2F0ZV9jdHJsIGRpc2FibGUgaXMgcmVxdWlyZWQgKi8KKwl1OCBkaXNhYmxlX2kyY19nYXRlX2N0cmw6MTsKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfWkwxMDM1MykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMzUzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKaW5kZXggNjdjYmNlOC4uNGRmZWQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCkBAIC05OCwxMSArOTgsMTYgQEAKICAqIAkJLSBibGFja2xpc3RlZCBLV29ybGQgcmFkaW8gaW4gaGlkLWNvcmUuYyBhbmQgaGlkLWlkcy5oCiAgKiAyMDA4LTEyLTAzCU1hcmsgTG9yZCA8bWxvcmRAcG9ib3guY29tPgogICoJCS0gYWRkIHN1cHBvcnQgZm9yIERlYWxFeHRyZW1lIFVTQiBSYWRpbworICogMjAwOS0wMS0zMQlCb2IgUm9zcyA8cGlnaXJvbkBnbXguY29tPgorICoJCS0gY29ycmVjdGlvbiBvZiBzdGVyZW8gZGV0ZWN0aW9uL3NldHRpbmcKKyAqCQktIGNvcnJlY3Rpb24gb2Ygc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRvciBzY2FsaW5nCisgKiAyMDA5LTAxLTMxCVJpY2sgQnJvbnNvbiA8cmlja0BlZm4ub3JnPgorICoJCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqCQktIGFkZCBMRUQgc3RhdHVzIG91dHB1dAogICoKICAqIFRvRG86CiAgKiAtIGFkZCBmaXJtd2FyZSBkb3dubG9hZC91cGRhdGUgc3VwcG9ydAogICogLSBSRFMgc3VwcG9ydDogaW50ZXJydXB0IG1vZGUsIGluc3RlYWQgb2YgcG9sbGluZwotICogLSBhZGQgTEVEIHN0YXR1cyBvdXRwdXQgKGNoZWNrIGlmIHRoYXQncyBub3QgYWxyZWFkeSBkb25lIGluIGZpcm13YXJlKQogICovCiAKIApAQCAtODgyLDYgKzg4NywzMCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gTEVEX1JFUE9SVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X3NldF9sZWRfc3RhdGUgLSBzZXRzIHRoZSBsZWQgc3RhdGUKKyAqLworc3RhdGljIGludCBzaTQ3MHhfc2V0X2xlZF9zdGF0ZShzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sCisJCXVuc2lnbmVkIGNoYXIgbGVkX3N0YXRlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW0xFRF9SRVBPUlRfU0laRV07CisJaW50IHJldHZhbDsKKworCWJ1ZlswXSA9IExFRF9SRVBPUlQ7CisJYnVmWzFdID0gTEVEX0NPTU1BTkQ7CisJYnVmWzJdID0gbGVkX3N0YXRlOworCisJcmV0dmFsID0gc2k0NzB4X3NldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUkRTIERyaXZlciBGdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTM4NSwyMCArMTQxNCwyMiBAQAogCX07CiAKIAkvKiBzdGVyZW8gaW5kaWNhdG9yID09IHN0ZXJlbyAoaW5zdGVhZCBvZiBtb25vKSAqLwotCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1QpID09IDEpCi0JCXR1bmVyLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQllbHNlCisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVCkgPT0gMCkKIAkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCWVsc2UKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCiAJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KLQlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICYgUE9XRVJDRkdfTU9OTykgPT0gMSkKLQkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQllbHNlCisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmIFBPV0VSQ0ZHX01PTk8pID09IDApCiAJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwllbHNlCisJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKIAkvKiBtaW4gaXMgd29yc3QsIG1heCBpcyBiZXN0OyBzaWduYWw6MC4uMHhmZmZmOyByc3NpOiAwLi4weGZmICovCi0JdHVuZXItPnNpZ25hbCA9IChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9SU1NJKQotCQkJCSogMHgwMTAxOworCS8qIG1lYXN1cmVkIGluIHVuaXRzIG9mIGRiwrVWIGluIDEgZGIgaW5jcmVtZW50cyAobWF4IGF0IH43NSBkYsK1VikgKi8KKwl0dW5lci0+c2lnbmFsID0gKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1JTU0kpOworCS8qIHRoZSBpZGVhbCBmYWN0b3IgaXMgMHhmZmZmLzc1ID0gODczLDggKi8KKwl0dW5lci0+c2lnbmFsID0gKHR1bmVyLT5zaWduYWwgKiA4NzMpICsgKDggKiB0dW5lci0+c2lnbmFsIC8gMTApOwogCiAJLyogYXV0b21hdGljIGZyZXF1ZW5jeSBjb250cm9sOiAtMTogZnJlcSB0byBsb3csIDEgZnJlcSB0byBoaWdoICovCiAJLyogQUZDUkwgZG9lcyBvbmx5IGluZGljYXRlIHRoYXQgZnJlcS4gZGlmZmVycywgbm90IGlmIHRvbyBsb3cvaGlnaCAqLwpAQCAtMTYzMiw2ICsxNjYzLDkgQEAKIAkvKiBzZXQgaW5pdGlhbCBmcmVxdWVuY3kgKi8KIAlzaTQ3MHhfc2V0X2ZyZXEocmFkaW8sIDg3LjUgKiBGUkVRX01VTCk7IC8qIGF2YWlsYWJsZSBpbiBhbGwgcmVnaW9ucyAqLwogCisJLyogc2V0IGxlZCB0byBjb25uZWN0IHN0YXRlICovCisJc2k0NzB4X3NldF9sZWRfc3RhdGUocmFkaW8sIEJMSU5LX0dSRUVOX0xFRCk7CisKIAkvKiByZHMgYnVmZmVyIGFsbG9jYXRpb24gKi8KIAlyYWRpby0+YnVmX3NpemUgPSByZHNfYnVmICogMzsKIAlyYWRpby0+YnVmZmVyID0ga21hbGxvYyhyYWRpby0+YnVmX3NpemUsIEdGUF9LRVJORUwpOwpAQCAtMTcxNSw2ICsxNzQ5LDkgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJhZGlvLT53b3JrKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCWlmIChyYWRpby0+dXNlcnMgPT0gMCkgeworCQkvKiBzZXQgbGVkIHRvIGRpc2Nvbm5lY3Qgc3RhdGUgKi8KKwkJc2k0NzB4X3NldF9sZWRfc3RhdGUocmFkaW8sIEJMSU5LX09SQU5HRV9MRUQpOworCiAJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CiAJCWtmcmVlKHJhZGlvLT5idWZmZXIpOwogCQlrZnJlZShyYWRpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCmluZGV4IDRkMzUzMDguLjM5MzYyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCkBAIC0yOTgsNyArMjk4LDggQEAKIAogCXN0cmxjcHkodi0+ZHJpdmVyLCBkZXYtPmRldi5kcml2ZXItPm5hbWUsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsIGRldi0+bmFtZSwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIkkyQzolcyIsIGRldi0+ZGV2LmJ1c19pZCk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksCisJCSAiSTJDOiVzIiwgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA2NmM3NTVjLi5jZTk4ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC04MDMsOSArODAzLDEwIEBACiAJCXJldHVybiAoLUVOT0VOVCk7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAoLUVOT01FTSk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3g4OF9kZXZfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwppbmRleCA1ZDg4MmE0Li5mMTMyZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwpAQCAtNDQ4LDkgKzQ0OCwxMCBAQAogCXByaW50ayhLRVJOX0lORk8gImVtMjh4eC1hdWRpby5jOiBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzICIKIAkJCSAiUmVjaGJlcmdlclxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5yXSwgIkVtMjh4eCBBdWRpbyIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnJdLCAiRW0yOHh4IEF1ZGlvIiwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRldi0+c2xvY2spOwogCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJFbTI4eHggQXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKQEAgLTQ2Myw2ICs0NjQsOCBAQAogCXBjbS0+aW5mb19mbGFncyA9IDA7CiAJcGNtLT5wcml2YXRlX2RhdGEgPSBkZXY7CiAJc3RyY3B5KHBjbS0+bmFtZSwgIkVtcGlhIDI4eHggQ2FwdHVyZSIpOworCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2LT51ZGV2LT5kZXYpOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJFbXBpYSBFbTI4eHggQXVkaW8iKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiRW0yOHh4IEF1ZGlvIik7CiAJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAiRW1waWEgRW0yOHh4IEF1ZGlvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggMmVkMjQ1Mi4uNjVlNDkwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtNDIyLDYgKzQyMiw3IEBACiAJCWlmICh1cmIgPT0gTlVMTCkKIAkJCWJyZWFrOwogCisJCUJVR19PTighZ3NwY2FfZGV2LT5kZXYpOwogCQlnc3BjYV9kZXYtPnVyYltpXSA9IE5VTEw7CiAJCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQogCQkJdXNiX2tpbGxfdXJiKHVyYik7CkBAIC0xOTUwLDggKzE5NTEsMTIgQEAKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJZ3NwY2FfZGV2LT5wcmVzZW50ID0gMDsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCisJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJZ3NwY2FfZGV2LT5kZXYgPSBOVUxMOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKIAkvKiByZWxlYXNlIHRoZSBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCmluZGV4IGU1NjRhNjEuLjQ4ODkyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMTAyLDcgKzEwMiwxMSBAQAogCX0KIAogCS8qIFRlc3Qgc29tZSByZWdpc3RlcnMsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZWlyIGV4YWN0IG1lYW5pbmcgeWV0ICovCi0JaWYgKG01NjAyX3JlYWRfc2Vuc29yKHNkLCAweDAwLCBwcm9kX2lkLCBzaXplb2YocHJvZF9pZCkpKQorCWlmIChtNTYwMl9yZWFkX3NlbnNvcihzZCwgMHgwMCwgcHJvZF9pZCwgMikpCisJCXJldHVybiAtRU5PREVWOworCWlmIChtNTYwMl9yZWFkX3NlbnNvcihzZCwgMHgwMiwgcHJvZF9pZCsyLCAyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG01NjAyX3JlYWRfc2Vuc29yKHNkLCAweDA0LCBwcm9kX2lkKzQsIDIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChtZW1jbXAocHJvZF9pZCwgZXhwZWN0ZWRfcHJvZF9pZCwgc2l6ZW9mKHByb2RfaWQpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IGY2YjNlZjYuLmMxM2JkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfZm10LCBmbXQpOworCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIGdfZm10LCBmbXQpOwogCXZiaWZtdC0+c2VydmljZV9zZXQgPSBpdnR2X2dldF9zZXJ2aWNlX3NldCh2YmlmbXQpOwogCXJldHVybiAwOwogfQpAQCAtMTc0OCw2ICsxNzQ4LDE4IEBACiAJCWJyZWFrOwogCX0KIAorCWNhc2UgSVZUVl9JT0NfRE1BX0ZSQU1FOgorCWNhc2UgVklERU9fR0VUX1BUUzoKKwljYXNlIFZJREVPX0dFVF9GUkFNRV9DT1VOVDoKKwljYXNlIFZJREVPX0dFVF9FVkVOVDoKKwljYXNlIFZJREVPX1BMQVk6CisJY2FzZSBWSURFT19TVE9QOgorCWNhc2UgVklERU9fRlJFRVpFOgorCWNhc2UgVklERU9fQ09OVElOVUU6CisJY2FzZSBWSURFT19DT01NQU5EOgorCWNhc2UgVklERU9fVFJZX0NPTU1BTkQ6CisJCXJldHVybiBpdnR2X2RlY29kZXJfaW9jdGxzKGZpbGUsIGNtZCwgKHZvaWQgKilhcmcpOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTc5MCwxOCArMTgwMiw2IEBACiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1NFVF9BVURJT19NT0RFLCAyLCBpdHYtPmF1ZGlvX2JpbGluZ3VhbF9tb2RlLCBpdHYtPmF1ZGlvX3N0ZXJlb19tb2RlKTsKIAkJcmV0dXJuIDA7CiAKLQljYXNlIElWVFZfSU9DX0RNQV9GUkFNRToKLQljYXNlIFZJREVPX0dFVF9QVFM6Ci0JY2FzZSBWSURFT19HRVRfRlJBTUVfQ09VTlQ6Ci0JY2FzZSBWSURFT19HRVRfRVZFTlQ6Ci0JY2FzZSBWSURFT19QTEFZOgotCWNhc2UgVklERU9fU1RPUDoKLQljYXNlIFZJREVPX0ZSRUVaRToKLQljYXNlIFZJREVPX0NPTlRJTlVFOgotCWNhc2UgVklERU9fQ09NTUFORDoKLQljYXNlIFZJREVPX1RSWV9DT01NQU5EOgotCQlyZXR1cm4gaXZ0dl9kZWNvZGVyX2lvY3RscyhmaWxwLCBjbWQsICh2b2lkICopYXJnKTsKLQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggYTFkNjAwOC4uMDdjMzM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTExNTUsMjQgKzExNTUsMjQgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpob3N0X2ZtdCwgKmNhbV9mbXQgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbV9mbXQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUgPSBOVUxMOwogCXN0cnVjdCBzb2NfY2FtZXJhX3NlbnNlIHNlbnNlID0gewogCQkubWFzdGVyX2Nsb2NrID0gcGNkZXYtPm1jbGssCiAJCS5waXhlbF9jbG9ja19tYXggPSBwY2Rldi0+Y2ljbGsgLyA0LAogCX07Ci0JaW50IHJldCwgYnVzd2lkdGg7CisJaW50IHJldDsKIAotCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwotCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBpeGZtdCkgeworCQl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKKwkJaWYgKCF4bGF0ZSkgeworCQkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJY2FtX2ZtdCA9IHhsYXRlLT5jYW1fZm10OwogCX0KIAotCWJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOwotCWhvc3RfZm10ID0geGxhdGUtPmhvc3RfZm10OwotCWNhbV9mbXQgPSB4bGF0ZS0+Y2FtX2ZtdDsKLQogCS8qIElmIFBDTEsgaXMgdXNlZCB0byBsYXRjaCBkYXRhIGZyb20gdGhlIHNlbnNvciwgY2hlY2sgc2Vuc2UgKi8KIAlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9QQ0xLX0VOKQogCQlpY2QtPnNlbnNlID0gJnNlbnNlOwpAQCAtMTIwMSw4ICsxMjAxLDggQEAKIAl9CiAKIAlpZiAocGl4Zm10ICYmICFyZXQpIHsKLQkJaWNkLT5idXN3aWR0aCA9IGJ1c3dpZHRoOwotCQlpY2QtPmN1cnJlbnRfZm10ID0gaG9zdF9mbXQ7CisJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CisJCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwppbmRleCBjNzUwZDNkLi44YjBiNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCkBAIC05OTAsMTAgKzk5MCwxMCBAQAogCWlmICghZW5hYmxlW2Rldm51bV0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCkpOwotCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTQUE3MTM0Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggMDc3NmVjZi4uYjUzNzBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTg2MCw2ICs4NjAsNyBAQAogCS5kZW1vZF9hZGRyZXNzID0gMHgxZT4+MSwKIAkubm9fdHVuZXIgICAgICA9IDEsCiAJLnBhcmFsbGVsX3RzICAgPSAxLAorCS5kaXNhYmxlX2kyY19nYXRlX2N0cmwgPSAxLAogfTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggOWEyNTg2Yi4uZGRjYjgxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtNjAzLDIxICs2MDMsMTggQEAKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwogCWludCByZXQ7CiAKKwlpZiAoIXBpeGZtdCkKKwkJcmV0dXJuIGljZC0+b3BzLT5zZXRfZm10KGljZCwgcGl4Zm10LCByZWN0KTsKKwogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwogCWlmICgheGxhdGUpIHsKIAkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoIChwaXhmbXQpIHsKLQljYXNlIDA6CQkJCS8qIE9ubHkgZ2VvbWV0cnkgY2hhbmdlICovCi0JCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgcGl4Zm10LCByZWN0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjLCByZWN0KTsKLQl9CisJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjLCByZWN0KTsKIAotCWlmIChwaXhmbXQgJiYgIXJldCkgeworCWlmICghcmV0KSB7CiAJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CiAJCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7CiAJCXBjZGV2LT5jYW1lcmFfZm10ID0geGxhdGUtPmNhbV9mbXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCmluZGV4IDVhZWNjYjMuLjA3NmVkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCkBAIC01NCw3ICs1NCw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBvdXIgc3RydWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSNkZWZpbmUgTUFYUkVHUyA2NAorI2RlZmluZSBNQVhSRUdTIDI1NgogCiBzdHJ1Y3QgQ0hJUFNUQVRFOwogdHlwZWRlZiBpbnQgICgqZ2V0dmFsdWUpKGludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKaW5kZXggYzFlNGFlMi4uYzcwNWYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYwpAQCAtNDYsOCArNDYsOCBAQAogCXVzYl90b19pbnB1dF9pZCh1ZGV2LCAmaW5wdXQtPmlkKTsKIAlpbnB1dC0+ZGV2LnBhcmVudCA9ICZkZXYtPmludGYtPmRldjsKIAotCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwotCXNldF9iaXQoQlROXzAsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CisJX19zZXRfYml0KEtFWV9DQU1FUkEsIGlucHV0LT5rZXliaXQpOwogCiAJaWYgKChyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpKSA8IDApCiAJCWdvdG8gZXJyb3I7CkBAIC03MCw4ICs3MCwxMCBAQAogc3RhdGljIHZvaWQgdXZjX2lucHV0X3JlcG9ydF9rZXkoc3RydWN0IHV2Y19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNvZGUsCiAJaW50IHZhbHVlKQogewotCWlmIChkZXYtPmlucHV0KQorCWlmIChkZXYtPmlucHV0KSB7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LT5pbnB1dCwgY29kZSwgdmFsdWUpOworCQlpbnB1dF9zeW5jKGRldi0+aW5wdXQpOworCX0KIH0KIAogI2Vsc2UKQEAgLTk2LDcgKzk4LDcgQEAKIAkJCXJldHVybjsKIAkJdXZjX3RyYWNlKFVWQ19UUkFDRV9TVEFUVVMsICJCdXR0b24gKGludGYgJXUpICVzIGxlbiAlZFxuIiwKIAkJCWRhdGFbMV0sIGRhdGFbM10gPyAicHJlc3NlZCIgOiAicmVsZWFzZWQiLCBsZW4pOwotCQl1dmNfaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8wLCBkYXRhWzNdKTsKKwkJdXZjX2lucHV0X3JlcG9ydF9rZXkoZGV2LCBLRVlfQ0FNRVJBLCBkYXRhWzNdKTsKIAl9IGVsc2UgewogCQl1dmNfdHJhY2UoVVZDX1RSQUNFX1NUQVRVUywgIlN0cmVhbSAldSBlcnJvciBldmVudCAlMDJ4ICUwMnggIgogCQkJImxlbiAlZC5cbiIsIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sIGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKaW5kZXggY2Y5ZDRjNy4uOGE0Yjc0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwpAQCAtMzQsNyArMzQsNyBAQAogCXNwaW5fbG9ja19pbml0KCZ2NGwyX2Rldi0+bG9jayk7CiAJdjRsMl9kZXYtPmRldiA9IGRldjsKIAlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwgIiVzICVzIiwKLQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXYtPmJ1c19pZCk7CisJCQlkZXYtPmRyaXZlci0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CiAJZGV2X3NldF9kcnZkYXRhKGRldiwgdjRsMl9kZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnCmluZGV4IDRlYTVmYTcuLjg2NjZlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKQEAgLTY4LDYgKzY4LDcgQEAKIAl0cmlzdGF0ZSAiQXZlck1lZGlhIDYgRXllcyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19CVDg1NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19CVDg2NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19LUzAxMjcgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgQXZlck1lZGlhIDYgRXllcyB2aWRlbyBzdXJ2ZWlsbGFuY2UgY2FyZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggOTZhYzg4My4uZWEzYWFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTkxLDkgKzkxLDkgQEAKIAkJY29udHJvbGxlcnMgKGRlZmF1bHQ9MCkiKTsKIAogc3RhdGljIGludCBtcHRfbXNpX2VuYWJsZV9zYXM7Ci1tb2R1bGVfcGFyYW0obXB0X21zaV9lbmFibGVfc2FzLCBpbnQsIDEpOworbW9kdWxlX3BhcmFtKG1wdF9tc2lfZW5hYmxlX3NhcywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobXB0X21zaV9lbmFibGVfc2FzLCAiIEVuYWJsZSBNU0kgU3VwcG9ydCBmb3IgU0FTIFwKLQkJY29udHJvbGxlcnMgKGRlZmF1bHQ9MSkiKTsKKwkJY29udHJvbGxlcnMgKGRlZmF1bHQ9MCkiKTsKIAogCiBzdGF0aWMgaW50IG1wdF9jaGFubmVsX21hcHBpbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9odGMtZWdwaW8uYyBiL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCmluZGV4IDFhNGQwNDYuLmFhMjY2ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCkBAIC0yODYsNyArMjg2LDcgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKQogCQlnb3RvIGZhaWw7Ci0JZWktPmJhc2VfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworCWVpLT5iYXNlX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWVpLT5iYXNlX2FkZHIpCiAJCWdvdG8gZmFpbDsKIAlwcl9kZWJ1ZygiRUdQSU8gcGh5cz0lMDh4IHZpcnQ9JXBcbiIsICh1MzIpcmVzLT5zdGFydCwgZWktPmJhc2VfYWRkcik7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAogCWVpLT5uY2hpcHMgPSBwZGF0YS0+bnVtX2NoaXBzOwogCWVpLT5jaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVncGlvX2NoaXApICogZWktPm5jaGlwcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlaSkgeworCWlmICghZWktPmNoaXApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tY3AtY29yZS5jCmluZGV4IDYwNjNkYzIuLjU3MjcxY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWNwLWNvcmUuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIGludCBtY3BfaG9zdF9yZWdpc3RlcihzdHJ1Y3QgbWNwICptY3ApCiB7Ci0Jc3RyY3B5KG1jcC0+YXR0YWNoZWRfZGV2aWNlLmJ1c19pZCwgIm1jcDAiKTsKKwlkZXZfc2V0X25hbWUoJm1jcC0+YXR0YWNoZWRfZGV2aWNlLCAibWNwMCIpOwogCXJldHVybiBkZXZpY2VfcmVnaXN0ZXIoJm1jcC0+YXR0YWNoZWRfZGV2aWNlKTsKIH0KIEVYUE9SVF9TWU1CT0wobWNwX2hvc3RfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jIGIvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jCmluZGV4IGVhOTQ4OGUuLjJlMzYwNTc2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYwpAQCAtNjc4LDYgKzY3OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwY2Y1MDYzM19pZF90YWJsZVtdID0gewogCXsicGNmNTA2MzMiLCAweDczfSwKKwl7LyogZW5kIG9mIGxpc3QgKi99CiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcGNmNTA2MzNfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc201MDEuYyBiL2RyaXZlcnMvbWZkL3NtNTAxLmMKaW5kZXggMGU1NzYxZi4uNGM3Yjc5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvc201MDEuYworKysgYi9kcml2ZXJzL21mZC9zbTUwMS5jCkBAIC0xMDUwLDcgKzEwNTAsNyBAQAogCXJldHVybiBncGlvY2hpcF9hZGQoZ2NoaXApOwogfQogCi1zdGF0aWMgaW50IHNtNTAxX3JlZ2lzdGVyX2dwaW8oc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtKQorc3RhdGljIGludCBfX2RldmluaXQgc201MDFfcmVnaXN0ZXJfZ3BpbyhzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20pCiB7CiAJc3RydWN0IHNtNTAxX2dwaW8gKmdwaW8gPSAmc20tPmdwaW87CiAJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZSA9IHNtLT5pb19yZXMtPnN0YXJ0ICsgU001MDFfR1BJTzsKQEAgLTEzMjEsNyArMTMyMSw3IEBACiAgKiBDb21tb24gaW5pdCBjb2RlIGZvciBhbiBTTTUwMQogKi8KIAotc3RhdGljIGludCBzbTUwMV9pbml0X2RldihzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbTUwMV9pbml0X2RldihzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20pCiB7CiAJc3RydWN0IHNtNTAxX2luaXRkYXRhICppZGF0YTsKIAlzdHJ1Y3Qgc201MDFfcGxhdGRhdGEgKnBkYXRhOwpAQCAtMTM5Nyw3ICsxMzk3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbTUwMV9wbGF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtNTAxX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbTsKIAlpbnQgcmV0OwpAQCAtMTU4Niw4ICsxNTg2LDggQEAKIAkuZ3Bpb19iYXNlCT0gLTEsCiB9OwogCi1zdGF0aWMgaW50IHNtNTAxX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAotCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBfX2RldmluaXQgc201MDFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtOwogCWludCBlcnI7CkBAIC0xNjkzLDcgKzE2OTMsNyBAQAogCXNtNTAxX2dwaW9fcmVtb3ZlKHNtKTsKIH0KIAotc3RhdGljIHZvaWQgc201MDFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHNtNTAxX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIApAQCAtMTcyNywxNiArMTcyNywxNiBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc201MDFfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzbTUwMV9wY2lfZHJ2ID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNtNTAxX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInNtNTAxIiwKIAkuaWRfdGFibGUJPSBzbTUwMV9wY2lfdGJsLAogCS5wcm9iZQkJPSBzbTUwMV9wY2lfcHJvYmUsCi0JLnJlbW92ZQkJPSBzbTUwMV9wY2lfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc201MDFfcGNpX3JlbW92ZSksCiB9OwogCiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNtNTAxIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtNTAxX3BsYXRfZHJ2ID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc201MDFfcGxhdF9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInNtNTAxIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCkBAIC0xNzQ5LDE0ICsxNzQ5LDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNtNTAxX2Jhc2VfaW5pdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc201MDFfcGxhdF9kcnYpOwotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbTUwMV9wY2lfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNtNTAxX3BsYXRfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc201MDFfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbTUwMV9iYXNlX2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc201MDFfcGxhdF9kcnYpOwotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc201MDFfcGNpX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtNTAxX3BsYXRfZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNtNTAxX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzbTUwMV9iYXNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwppbmRleCBlN2FiMDAzLi42ODgyNmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CiAKLSNpZmRlZiBDT05GSUdfQVJNCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKaW5kZXggNjg2MGM5Mi4uZmVhOTA4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCiAJdWNiLT5kZXYuY2xhc3MgPSAmdWNiMXgwMF9jbGFzczsKIAl1Y2ItPmRldi5wYXJlbnQgPSAmbWNwLT5hdHRhY2hlZF9kZXZpY2U7Ci0Jc3RybGNweSh1Y2ItPmRldi5idXNfaWQsICJ1Y2IxeDAwIiwgc2l6ZW9mKHVjYi0+ZGV2LmJ1c19pZCkpOworCWRldl9zZXRfbmFtZSgmdWNiLT5kZXYsICJ1Y2IxeDAwIik7CiAKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5pb19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCmluZGV4IGY5MjU5NWMuLmI0NTdhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwpAQCAtMTExMSw3ICsxMTExLDcgQEAKIAlkbyB7CiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKIAkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RJR0lUSVNFUl9DT05UUk9MXzEpOwotCX0gd2hpbGUgKHRyaWVzLS0gJiYgKHJlZyAmIFdNODM1MF9BVVhBRENfUE9MTCkpOworCX0gd2hpbGUgKC0tdHJpZXMgJiYgKHJlZyAmIFdNODM1MF9BVVhBRENfUE9MTCkpOwogCiAJaWYgKCF0cmllcykKIAkJZGV2X2Vycih3bTgzNTAtPmRldiwgImFkYyBjaG4gJWQgcmVhZCB0aW1lb3V0XG4iLCBjaGFubmVsKTsKQEAgLTEyOTcsMTQgKzEyOTcsMjkgQEAKIGludCB3bTgzNTBfZGV2aWNlX2luaXQoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLAogCQkgICAgICAgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgcmV0OwogCXUxNiBpZDEsIGlkMiwgbWFza19yZXY7CiAJdTE2IGN1c3RfaWQsIG1vZGUsIGNoaXBfcmV2OwogCiAJLyogZ2V0IFdNODM1MCByZXZpc2lvbiBhbmQgY29uZmlnIG1vZGUgKi8KLQl3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgV004MzUwX1JFU0VUX0lELCBzaXplb2YoaWQxKSwgJmlkMSk7Ci0Jd204MzUwLT5yZWFkX2Rldih3bTgzNTAsIFdNODM1MF9JRCwgc2l6ZW9mKGlkMiksICZpZDIpOwotCXdtODM1MC0+cmVhZF9kZXYod204MzUwLCBXTTgzNTBfUkVWSVNJT04sIHNpemVvZihtYXNrX3JldiksICZtYXNrX3Jldik7CisJcmV0ID0gd204MzUwLT5yZWFkX2Rldih3bTgzNTAsIFdNODM1MF9SRVNFVF9JRCwgc2l6ZW9mKGlkMSksICZpZDEpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgSUQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSB3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgV004MzUwX0lELCBzaXplb2YoaWQyKSwgJmlkMik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJRDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHdtODM1MC0+cmVhZF9kZXYod204MzUwLCBXTTgzNTBfUkVWSVNJT04sIHNpemVvZihtYXNrX3JldiksCisJCQkgICAgICAgJm1hc2tfcmV2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZWFkIHJldmlzaW9uOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQogCiAJaWQxID0gYmUxNl90b19jcHUoaWQxKTsKIAlpZDIgPSBiZTE2X3RvX2NwdShpZDIpOwpAQCAtMTM2OCw2ICsxMzgzLDExIEBACiAJCQl3bTgzNTAtPnBvd2VyLnJldl9nX2NvZWZmID0gMTsKIAkJCWJyZWFrOwogCisJCWNhc2UgMToKKwkJCWRldl9pbmZvKHdtODM1MC0+ZGV2LCAiV004MzUxIFJldiBCXG4iKTsKKwkJCXdtODM1MC0+cG93ZXIucmV2X2dfY29lZmYgPSAxOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWRldl9lcnIod204MzUwLT5kZXYsICJVbmtub3duIFdNODM1MSBDSElQX1JFVlxuIik7CiAJCQlyZXQgPSAtRU5PREVWOwpAQCAtMTQwNCwxNCArMTQyNCwxMiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgewotCQlyZXQgPSBwZGF0YS0+aW5pdCh3bTgzNTApOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCWRldl9lcnIod204MzUwLT5kZXYsICJQbGF0Zm9ybSBpbml0KCkgZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9TWVNURU1fSU5URVJSVVBUU19NQVNLLCAweEZGRkYpOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssIDB4RkZGRik7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywgMHhGRkZGKTsKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLCAweEZGRkYpOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssIDB4RkZGRik7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywgMHhGRkZGKTsKIAogCW11dGV4X2luaXQoJndtODM1MC0+YXV4YWRjX211dGV4KTsKIAltdXRleF9pbml0KCZ3bTgzNTAtPmlycV9tdXRleCk7CkBAIC0xNDMwLDYgKzE0NDgsMTUgQEAKIAl9CiAJd204MzUwLT5jaGlwX2lycSA9IGlycTsKIAorCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgeworCQlyZXQgPSBwZGF0YS0+aW5pdCh3bTgzNTApOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIod204MzUwLT5kZXYsICJQbGF0Zm9ybSBpbml0KCkgZmFpbGVkOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKIAl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDB4MCk7CiAKIAl3bTgzNTBfY2xpZW50X2Rldl9yZWdpc3Rlcih3bTgzNTAsICJ3bTgzNTAtY29kZWMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLXJlZ21hcC5jIGIvZHJpdmVycy9tZmQvd204MzUwLXJlZ21hcC5jCmluZGV4IDY4ODg3YjguLjlhNGNjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODM1MC1yZWdtYXAuYworKysgYi9kcml2ZXJzL21mZC93bTgzNTAtcmVnbWFwLmMKQEAgLTMxODgsNyArMzE4OCw3IEBACiAJeyAweDdDRkYsIDB4MEMwMCwgMHg3RkZGIH0sIC8qIFIxICAgLSBJRCAqLwogCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMiAqLwogCXsgMHhCRTNCLCAweEJFM0IsIDB4ODAwMCB9LCAvKiBSMyAgIC0gU3lzdGVtIENvbnRyb2wgMSAqLwotCXsgMHhGQ0Y3LCAweEZDRjcsIDB4RjgwMCB9LCAvKiBSNCAgIC0gU3lzdGVtIENvbnRyb2wgMiAqLworCXsgMHhGRUY3LCAweEZFRjcsIDB4RjgwMCB9LCAvKiBSNCAgIC0gU3lzdGVtIENvbnRyb2wgMiAqLwogCXsgMHg4MEZGLCAweDgwRkYsIDB4ODAwMCB9LCAvKiBSNSAgIC0gU3lzdGVtIEhpYmVybmF0ZSAqLwogCXsgMHhGQjBFLCAweEZCMEUsIDB4MDAwMCB9LCAvKiBSNiAgIC0gSW50ZXJmYWNlIENvbnRyb2wgKi8KIAl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocGlsby5jIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKaW5kZXggZjI2NjY3YS4uY2Y5OTE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hwaWxvLmMKKysrIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKQEAgLTcxMCw2ICs3MTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWxvX2RldmljZXNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DT01QQVEsIDB4QjIwNCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMzA3KSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpbG9fZGV2aWNlcyk7CkBAIC03NTgsNyArNzU5LDcgQEAKIAljbGFzc19kZXN0cm95KGlsb19jbGFzcyk7CiB9CiAKLU1PRFVMRV9WRVJTSU9OKCIwLjA2Iik7CitNT0RVTEVfVkVSU0lPTigiMS4wIik7CiBNT0RVTEVfQUxJQVMoSUxPX05BTUUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKElMT19OQU1FKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIEFsdG9iZWxsaSA8ZGF2aWQuYWx0b2JlbGxpQGhwLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwppbmRleCA0NWIxZjQzLi41MTNlYjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCkBAIC01ODQsNyArNTg0LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCXN0cmluZ19nZXRfc2l6ZShnZXRfY2FwYWNpdHkobWQtPmRpc2spIDw8IDksIFNUUklOR19VTklUU18yLAorCXN0cmluZ19nZXRfc2l6ZSgodTY0KWdldF9jYXBhY2l0eShtZC0+ZGlzaykgPDwgOSwgU1RSSU5HX1VOSVRTXzIsCiAJCQljYXBfc3RyLCBzaXplb2YoY2FwX3N0cikpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyAlcyAlcyAlc1xuIiwKIAkJbWQtPmRpc2stPmRpc2tfbmFtZSwgbW1jX2NhcmRfaWQoY2FyZCksIG1tY19jYXJkX25hbWUoY2FyZCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKaW5kZXggYjkyYjE3Mi4uYjlmMWU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAKIAlzZ19pbml0X29uZSgmc2csIHRlc3QtPmJ1ZmZlciwgNTEyKTsKIAotCXJldCA9IG1tY190ZXN0X3NpbXBsZV90cmFuc2Zlcih0ZXN0LCAmc2csIDEsIDAsIDEsIDUxMiwgMSk7CisJcmV0ID0gbW1jX3Rlc3Rfc2ltcGxlX3RyYW5zZmVyKHRlc3QsICZzZywgMSwgMCwgMSwgNTEyLCAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCmluZGV4IDljNTBlNmYuLjM0Y2UyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCkBAIC0yNDgsMTIgKzI0OCwxNSBAQAogCiAJc2dfaW5pdF9vbmUoJnNnLCBkYXRhX2J1ZiwgbGVuKTsKIAotCS8qCi0JICogVGhlIHNwZWMgc3RhdGVzIHRoYXQgQ1NSIGFuZCBDSUQgYWNjZXNzZXMgaGF2ZSBhIHRpbWVvdXQKLQkgKiBvZiA2NCBjbG9jayBjeWNsZXMuCi0JICovCi0JZGF0YS50aW1lb3V0X25zID0gMDsKLQlkYXRhLnRpbWVvdXRfY2xrcyA9IDY0OworCWlmIChvcGNvZGUgPT0gTU1DX1NFTkRfQ1NEIHx8IG9wY29kZSA9PSBNTUNfU0VORF9DSUQpIHsKKwkJLyoKKwkJICogVGhlIHNwZWMgc3RhdGVzIHRoYXQgQ1NSIGFuZCBDSUQgYWNjZXNzZXMgaGF2ZSBhIHRpbWVvdXQKKwkJICogb2YgNjQgY2xvY2sgY3ljbGVzLgorCQkgKi8KKwkJZGF0YS50aW1lb3V0X25zID0gMDsKKwkJZGF0YS50aW1lb3V0X2Nsa3MgPSA2NDsKKwl9IGVsc2UKKwkJbW1jX3NldF9kYXRhX3RpbWVvdXQoJmRhdGEsIGNhcmQpOwogCiAJbW1jX3dhaXRfZm9yX3JlcShob3N0LCAmbXJxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKaW5kZXggNzZiZmUxNi4uZTk0ZTkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCkBAIC0xNTQ4LDkgKzE1NDgsMTAgQEAKIHsKIAlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSBzbGF2ZTsKIAotCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpCisJaWYgKGR3cy0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldikgeworCQljaGFuLT5wcml2YXRlID0gZHdzOwogCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCisJfSBlbHNlCiAJCXJldHVybiBmYWxzZTsKIH0KICNlbmRpZgpAQCAtMTYwMiw3ICsxNjAzLDcgQEAKIAogCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGFza2xldCwgYXRtY2lfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtY2lfaW50ZXJydXB0LCAwLCBwZGV2LT5kZXYuYnVzX2lkLCBob3N0KTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWNpX2ludGVycnVwdCwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCmluZGV4IGZiMjkyMWYuLjBjNDRkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJaWYgKCFncGlvX2lzX3ZhbGlkKG9tcy0+Z3Bpb3NbaV0pKQogCQkJY29udGludWU7CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldi0+YnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldl9uYW1lKGRldikpOwogCQlpZiAocmV0IDwgMCkgewogCQkJb21zLT5ncGlvc1tpXSA9IC1FSU5WQUw7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggZGIzNzQ5MC4uYTYzMWM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNkZWZpbmUgVlMzMAkJCSgxIDw8IDI1KQogI2RlZmluZSBTRFZTMTgJCQkoMHg1IDw8IDkpCiAjZGVmaW5lIFNEVlMzMAkJCSgweDYgPDwgOSkKKyNkZWZpbmUgU0RWUzMzCQkJKDB4NyA8PCA5KQogI2RlZmluZSBTRFZTQ0xSCQkJMHhGRkZGRjFGRgogI2RlZmluZSBTRFZTREVUCQkJMHgwMDAwMDQwMAogI2RlZmluZSBBVVRPSURMRQkJMHgxCkBAIC0zNzUsNiArMzc2LDMyIEBACiB9CiAjZW5kaWYgIC8qIENPTkZJR19NTUNfREVCVUcgKi8KIAorLyoKKyAqIE1NQyBjb250cm9sbGVyIGludGVybmFsIHN0YXRlIG1hY2hpbmVzIHJlc2V0CisgKgorICogVXNlZCB0byByZXNldCBjb21tYW5kIG9yIGRhdGEgaW50ZXJuYWwgc3RhdGUgbWFjaGluZXMsIHVzaW5nIHJlc3BlY3RpdmVseQorICogIFNSQyBvciBTUkQgYml0IG9mIFNZU0NUTCByZWdpc3RlcgorICogQ2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfb21hcF9yZXNldF9jb250cm9sbGVyX2ZzbShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwKKwkJdW5zaWduZWQgbG9uZyBiaXQpCit7CisJdW5zaWduZWQgbG9uZyBpID0gMDsKKwl1bnNpZ25lZCBsb25nIGxpbWl0ID0gKGxvb3BzX3Blcl9qaWZmeSAqCisJCQkJbXNlY3NfdG9famlmZmllcyhNTUNfVElNRU9VVF9NUykpOworCisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDVEwsCisJCQkgT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgfCBiaXQpOworCisJd2hpbGUgKChPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ1RMKSAmIGJpdCkgJiYKKwkJKGkrKyA8IGxpbWl0KSkKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgJiBiaXQpCisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAorCQkJIlRpbWVvdXQgd2FpdGluZyBvbiBjb250cm9sbGVyIHJlc2V0IGluICVzXG4iLAorCQkJX19mdW5jX18pOworfQogCiAvKgogICogTU1DIGNvbnRyb2xsZXIgSVJRIGhhbmRsZXIKQEAgLTQwMywyMSArNDMwLDE3IEBACiAJCQkoc3RhdHVzICYgQ01EX0NSQykpIHsKIAkJCWlmIChob3N0LT5jbWQpIHsKIAkJCQlpZiAoc3RhdHVzICYgQ01EX1RJTUVPVVQpIHsKLQkJCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDVEwsCi0JCQkJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwKLQkJCQkJCQkJU1lTQ1RMKSB8IFNSQyk7Ci0JCQkJCXdoaWxlIChPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwKLQkJCQkJCQlTWVNDVEwpICYgU1JDKQotCQkJCQkJOwotCisJCQkJCW1tY19vbWFwX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSQyk7CiAJCQkJCWhvc3QtPmNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOwogCQkJCX0gZWxzZSB7CiAJCQkJCWhvc3QtPmNtZC0+ZXJyb3IgPSAtRUlMU0VROwogCQkJCX0KIAkJCQllbmRfY21kID0gMTsKIAkJCX0KLQkJCWlmIChob3N0LT5kYXRhKQorCQkJaWYgKGhvc3QtPmRhdGEpIHsKIAkJCQltbWNfZG1hX2NsZWFudXAoaG9zdCk7CisJCQkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKKwkJCX0KIAkJfQogCQlpZiAoKHN0YXR1cyAmIERBVEFfVElNRU9VVCkgfHwKIAkJCShzdGF0dXMgJiBEQVRBX0NSQykpIHsKQEAgLTQyNiwxMiArNDQ5LDcgQEAKIAkJCQkJbW1jX2RtYV9jbGVhbnVwKGhvc3QpOwogCQkJCWVsc2UKIAkJCQkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSAtRUlMU0VROwotCQkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ1RMLAotCQkJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwKLQkJCQkJCQlTWVNDVEwpIHwgU1JEKTsKLQkJCQl3aGlsZSAoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsCi0JCQkJCQlTWVNDVEwpICYgU1JEKQotCQkJCQk7CisJCQkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKIAkJCQllbmRfdHJhbnMgPSAxOwogCQkJfQogCQl9CkBAIC00NTYsMTMgKzQ3NCwyMCBAQAogfQogCiAvKgotICogU3dpdGNoIE1NQyBvcGVyYXRpbmcgdm9sdGFnZQorICogU3dpdGNoIE1NQyBpbnRlcmZhY2Ugdm9sdGFnZSAuLi4gb25seSByZWxldmFudCBmb3IgTU1DMS4KKyAqCisgKiBNTUMyIGFuZCBNTUMzIHVzZSBmaXhlZCAxLjhWIGxldmVscywgYW5kIG1heWJlIGEgdHJhbnNjZWl2ZXIuCisgKiBUaGUgTU1DMiB0cmFuc2NlaXZlciBjb250cm9scyBhcmUgdXNlZCBpbnN0ZWFkIG9mIERBVDQuLkRBVDcuCisgKiBTb21lIGNoaXBzLCBsaWtlIGVNTUMgb25lcywgdXNlIGludGVybmFsIHRyYW5zY2VpdmVycy4KICAqLwogc3RhdGljIGludCBvbWFwX21tY19zd2l0Y2hfb3Bjb25kKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBpbnQgdmRkKQogewogCXUzMiByZWdfdmFsID0gMDsKIAlpbnQgcmV0OwogCisJaWYgKGhvc3QtPmlkICE9IE9NQVBfTU1DMV9ERVZJRCkKKwkJcmV0dXJuIDA7CisKIAkvKiBEaXNhYmxlIHRoZSBjbG9ja3MgKi8KIAljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKIAljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKQEAgLTQ4NSwxOSArNTEwLDI2IEBACiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAogCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiBTRFZTQ0xSKTsKIAlyZWdfdmFsID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpOworCiAJLyoKIAkgKiBJZiBhIE1NQyBkdWFsIHZvbHRhZ2UgY2FyZCBpcyBkZXRlY3RlZCwgdGhlIHNldF9pb3MgZm4gY2FsbHMKIAkgKiB0aGlzIGZuIHdpdGggVkREIGJpdCBzZXQgZm9yIDEuOFYuIFVwb24gY2FyZCByZW1vdmFsIGZyb20gdGhlCiAJICogc2xvdCwgb21hcF9tbWNfc2V0X2lvcyBzZXRzIHRoZSBWREQgYmFjayB0byAzViBvbiBNTUNfUE9XRVJfT0ZGLgogCSAqCi0JICogT25seSBNTUMxIHN1cHBvcnRzIDMuMFYuICBNTUMyIHdpbGwgbm90IGZ1bmN0aW9uIGlmIFNEVlMzMCBpcwotCSAqIHNldCBpbiBIQ1RMLgorCSAqIENvcGUgd2l0aCBhIGJpdCBvZiBzbG9wIGluIHRoZSByYW5nZSAuLi4gcGVyIGRhdGEgc2hlZXRzOgorCSAqICAtICIxLjhWIiBmb3IgdmRkc19tbWMxL3ZkZHNfbW1jMWEgY2FuIGJlIHVwIHRvIDIuNDVWIG1heCwKKwkgKiAgICBidXQgcmVjb21tZW5kZWQgdmFsdWVzIGFyZSAxLjcxViB0byAxLjg5VgorCSAqICAtICIzLjBWIiBmb3IgdmRkc19tbWMxL3ZkZHNfbW1jMWEgY2FuIGJlIHVwIHRvIDMuNVYgbWF4LAorCSAqICAgIGJ1dCByZWNvbW1lbmRlZCB2YWx1ZXMgYXJlIDIuN1YgdG8gMy4zVgorCSAqCisJICogQm9hcmQgc2V0dXAgY29kZSBzaG91bGRuJ3QgcGVybWl0IGFueXRoaW5nIHZlcnkgb3V0LW9mLXJhbmdlLgorCSAqIFRXTDQwMzAtZmFtaWx5IFZNTUMxIGFuZCBWU0lNIHJlZ3VsYXRvcnMgYXJlIGZpbmUgKGF2b2lkaW5nIHRoZQorCSAqIG1pZGRsZSByYW5nZSkgYnV0IFZTSU0gY2FuJ3QgcG93ZXIgREFUNC4uREFUNyBhdCBtb3JlIHRoYW4gM1YuCiAJICovCi0JaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCAmJiAoKCgxIDw8IHZkZCkgPT0gTU1DX1ZERF8zMl8zMykgfHwKLQkJCQkoKDEgPDwgdmRkKSA9PSBNTUNfVkREXzMzXzM0KSkpCi0JCXJlZ192YWwgfD0gU0RWUzMwOwotCWlmICgoMSA8PCB2ZGQpID09IE1NQ19WRERfMTY1XzE5NSkKKwlpZiAoKDEgPDwgdmRkKSA8PSBNTUNfVkREXzIzXzI0KQogCQlyZWdfdmFsIHw9IFNEVlMxODsKKwllbHNlCisJCXJlZ192YWwgfD0gU0RWUzMwOwogCiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLCByZWdfdmFsKTsKIApAQCAtNTE3LDE2ICs1NDksMTUgQEAKIHsKIAlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbW1jX29tYXBfaG9zdCwKIAkJCQkJCW1tY19jYXJkZGV0ZWN0X3dvcmspOworCXN0cnVjdCBvbWFwX21tY19zbG90X2RhdGEgKnNsb3QgPSAmbW1jX3Nsb3QoaG9zdCk7CisKKwlob3N0LT5jYXJkZGV0ZWN0ID0gc2xvdC0+Y2FyZF9kZXRlY3Qoc2xvdC0+Y2FyZF9kZXRlY3RfaXJxKTsKIAogCXN5c2ZzX25vdGlmeSgmaG9zdC0+bW1jLT5jbGFzc19kZXYua29iaiwgTlVMTCwgImNvdmVyX3N3aXRjaCIpOwogCWlmIChob3N0LT5jYXJkZGV0ZWN0KSB7CiAJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgKEhaICogMjAwKSAvIDEwMDApOwogCX0gZWxzZSB7Ci0JCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ1RMLAotCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgfCBTUkQpOwotCQl3aGlsZSAoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgJiBTUkQpCi0JCQk7Ci0KKwkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKIAkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCAoSFogKiA1MCkgLyAxMDAwKTsKIAl9CiB9CkBAIC01MzgsNyArNTY5LDYgQEAKIHsKIAlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqKWRldl9pZDsKIAotCWhvc3QtPmNhcmRkZXRlY3QgPSBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdChpcnEpOwogCXNjaGVkdWxlX3dvcmsoJmhvc3QtPm1tY19jYXJkZGV0ZWN0X3dvcmspOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNzU3LDEwICs3ODcsMTQgQEAKIAljYXNlIE1NQ19QT1dFUl9PRkY6CiAJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsIDApOwogCQkvKgotCQkgKiBSZXNldCBidXMgdm9sdGFnZSB0byAzViBpZiBpdCBnb3Qgc2V0IHRvIDEuOFYgZWFybGllci4KKwkJICogUmVzZXQgaW50ZXJmYWNlIHZvbHRhZ2UgdG8gM1YgaWYgaXQncyAxLjhWIG5vdzsKKwkJICogb25seSByZWxldmFudCBvbiBNTUMtMSwgdGhlIG90aGVycyBhbHdheXMgdXNlIDEuOFYuCisJCSAqCiAJCSAqIFJFVklTSVQ6IElmIHdlIGFyZSBhYmxlIHRvIGRldGVjdCBjYXJkcyBhZnRlciB1bnBsdWdnaW5nCiAJCSAqIGEgMS44ViBjYXJkLCB0aGlzIGNvZGUgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCiAJCSAqLworCQlpZiAoaG9zdC0+aWQgIT0gT01BUF9NTUMxX0RFVklEKQorCQkJYnJlYWs7CiAJCWlmICghKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIFNEVlNERVQpKSB7CiAJCQlpbnQgdmRkID0gZmxzKGhvc3QtPm1tYy0+b2NyX2F2YWlsKSAtIDE7CiAJCQlpZiAob21hcF9tbWNfc3dpdGNoX29wY29uZChob3N0LCB2ZGQpICE9IDApCkBAIC03ODQsNyArODE4LDkgQEAKIAl9CiAKIAlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklEKSB7Ci0JCS8qIE9ubHkgTU1DMSBjYW4gb3BlcmF0ZSBhdCAzVi8xLjhWICovCisJCS8qIE9ubHkgTU1DMSBjYW4gaW50ZXJmYWNlIGF0IDNWIHdpdGhvdXQgc29tZSBmbGF2b3IKKwkJICogb2YgZXh0ZXJuYWwgdHJhbnNjZWl2ZXI7IGJ1dCB0aGV5IGFsbCBoYW5kbGUgMS44Vi4KKwkJICovCiAJCWlmICgoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgU0RWU0RFVCkgJiYKIAkJCShpb3MtPnZkZCA9PSBEVUFMX1ZPTFRfT0NSX0JJVCkpIHsKIAkJCQkvKgpAQCAtMTEzNyw3ICsxMTczLDkgQEAKIAkJCQkJCSIgbGV2ZWwgc3VzcGVuZFxuIik7CiAJCQl9CiAKLQkJCWlmICghKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIFNEVlNERVQpKSB7CisJCQlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklECisJCQkJCSYmICEoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpCisJCQkJCQkJJiBTRFZTREVUKSkgewogCQkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKIAkJCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpCiAJCQkJCSYgU0RWU0NMUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwppbmRleCAzNWE5OGVlLi4yZGIxNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKQEAgLTMyOSw3ICszMjksNyBAQAogCiAJdG9fcHRyID0gaG9zdC0+YmFzZSArIGhvc3QtPnNkaWRhdGE7CiAKLQl3aGlsZSAoKGZpZm8gPSBmaWZvX2ZyZWUoaG9zdCkpKSB7CisJd2hpbGUgKChmaWZvID0gZmlmb19mcmVlKGhvc3QpKSA+IDMpIHsKIAkJaWYgKCFob3N0LT5waW9fYnl0ZXMpIHsKIAkJCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX2J5dGVzLAogCQkJCQkJCSZob3N0LT5waW9fcHRyKTsKQEAgLTc5Myw4ICs3OTMsNyBAQAogCQkJICAgICAgaG9zdC0+bWVtLT5zdGFydCArIGhvc3QtPnNkaWRhdGEpOwogCiAJaWYgKCFzZXR1cF9vaykgewotCQlzM2MyNDEwX2RtYV9jb25maWcoaG9zdC0+ZG1hLCA0LAotCQkJKFMzQzI0MTBfRENPTl9IV1RSSUcgfCBTM0MyNDEwX0RDT05fQ0gwX1NESSkpOworCQlzM2MyNDEwX2RtYV9jb25maWcoaG9zdC0+ZG1hLCA0LCAwKTsKIAkJczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKGhvc3QtPmRtYSwKIAkJCQkJICAgIHMzY21jaV9kbWFfZG9uZV9jYWxsYmFjayk7CiAJCXMzYzI0MTBfZG1hX3NldGZsYWdzKGhvc3QtPmRtYSwgUzNDMjQxMF9ETUFGX0FVVE9TVEFSVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwppbmRleCBmMDcyNTVjLi40MDZkYTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9jYWZlID0gewogCS5xdWlya3MJCT0gU0RIQ0lfUVVJUktfTk9fU0lNVUxUX1ZERF9BTkRfUE9XRVIgfAorCQkJICBTREhDSV9RVUlSS19OT19CVVNZX0lSUSB8CiAJCQkgIFNESENJX1FVSVJLX0JST0tFTl9USU1FT1VUX1ZBTCwKIH07CiAKQEAgLTE0NCw4ICsxNDUsNyBAQAogCQkJICBTREhDSV9RVUlSS18zMkJJVF9ETUFfU0laRSB8CiAJCQkgIFNESENJX1FVSVJLXzMyQklUX0FETUFfU0laRSB8CiAJCQkgIFNESENJX1FVSVJLX1JFU0VUX0FGVEVSX1JFUVVFU1QgfAotCQkJICBTREhDSV9RVUlSS19CUk9LRU5fU01BTExfUElPIHwKLQkJCSAgU0RIQ0lfUVVJUktfRk9SQ0VfSElHSFNQRUVEOworCQkJICBTREhDSV9RVUlSS19CUk9LRU5fU01BTExfUElPOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggNmIyZDFmOS4uYWNjYjU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtMTI5MSw4ICsxMjkxLDExIEBACiAJCWlmIChob3N0LT5jbWQtPmRhdGEpCiAJCQlEQkcoIkNhbm5vdCB3YWl0IGZvciBidXN5IHNpZ25hbCB3aGVuIGFsc28gIgogCQkJCSJkb2luZyBhIGRhdGEgdHJhbnNmZXIiKTsKLQkJZWxzZQorCQllbHNlIGlmICghKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX05PX0JVU1lfSVJRKSkKIAkJCXJldHVybjsKKworCQkvKiBUaGUgY29udHJvbGxlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBlbmQtb2YtYnVzeSBJUlEsCisJCSAqIGZhbGwgdGhyb3VnaCBhbmQgdGFrZSB0aGUgU0RIQ0lfSU5UX1JFU1BPTlNFICovCiAJfQogCiAJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfUkVTUE9OU0UpCkBAIC0xNjM2LDggKzE2MzksNyBAQAogCW1tYy0+Zl9tYXggPSBob3N0LT5tYXhfY2xrOwogCW1tYy0+Y2FwcyA9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfU0RJT19JUlE7CiAKLQlpZiAoKGNhcHMgJiBTREhDSV9DQU5fRE9fSElTUEQpIHx8Ci0JCShob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19GT1JDRV9ISUdIU1BFRUQpKQorCWlmIChjYXBzICYgU0RIQ0lfQ0FOX0RPX0hJU1BEKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9TRF9ISUdIU1BFRUQ7CiAKIAltbWMtPm9jcl9hdmFpbCA9IDA7CkBAIC0xNzIzLDcgKzE3MjUsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBTREhDSV9VU0VfTEVEU19DTEFTUwotCWhvc3QtPmxlZC5uYW1lID0gbW1jX2hvc3RuYW1lKG1tYyk7CisJc25wcmludGYoaG9zdC0+bGVkX25hbWUsIHNpemVvZihob3N0LT5sZWRfbmFtZSksCisJCSIlczo6IiwgbW1jX2hvc3RuYW1lKG1tYykpOworCWhvc3QtPmxlZC5uYW1lID0gaG9zdC0+bGVkX25hbWU7CiAJaG9zdC0+bGVkLmJyaWdodG5lc3MgPSBMRURfT0ZGOwogCWhvc3QtPmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBtbWNfaG9zdG5hbWUobW1jKTsKIAlob3N0LT5sZWQuYnJpZ2h0bmVzc19zZXQgPSBzZGhjaV9sZWRfY29udHJvbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCAzZWZiYTIzLi40M2MzN2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC0yMDgsOCArMjA4LDggQEAKICNkZWZpbmUgU0RIQ0lfUVVJUktfQlJPS0VOX1RJTUVPVVRfVkFMCQkJKDE8PDEyKQogLyogQ29udHJvbGxlciBoYXMgYW4gaXNzdWUgd2l0aCBidWZmZXIgYml0cyBmb3Igc21hbGwgdHJhbnNmZXJzICovCiAjZGVmaW5lIFNESENJX1FVSVJLX0JST0tFTl9TTUFMTF9QSU8JCQkoMTw8MTMpCi0vKiBDb250cm9sbGVyIHN1cHBvcnRzIGhpZ2ggc3BlZWQgYnV0IGRvZXNuJ3QgaGF2ZSB0aGUgY2FwcyBiaXQgc2V0ICovCi0jZGVmaW5lIFNESENJX1FVSVJLX0ZPUkNFX0hJR0hTUEVFRAkJCSgxPDwxNCkKKy8qIENvbnRyb2xsZXIgZG9lcyBub3QgcHJvdmlkZSB0cmFuc2Zlci1jb21wbGV0ZSBpbnRlcnJ1cHQgd2hlbiBub3QgYnVzeSAqLworI2RlZmluZSBTREhDSV9RVUlSS19OT19CVVNZX0lSUQkJCQkoMTw8MTQpCiAKIAlpbnQJCQlpcnE7CQkvKiBEZXZpY2UgSVJRICovCiAJdm9pZCBfX2lvbWVtICoJCWlvYWRkcjsJCS8qIE1hcHBlZCBhZGRyZXNzICovCkBAIC0yMjIsNiArMjIyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1MpIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1NfTU9EVUxFKQogCXN0cnVjdCBsZWRfY2xhc3NkZXYJbGVkOwkJLyogTEVEIGNvbnRyb2wgKi8KKwljaGFyICAgbGVkX25hbWVbMzJdOwogI2VuZGlmCiAKIAlzcGlubG9ja190CQlsb2NrOwkJLyogTXV0ZXggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYwppbmRleCA4MjFkMGVkLi5jNzZkNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcm9tLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JvbS5jCkBAIC0xOSw2ICsxOSw3IEBACiBzdGF0aWMgaW50IG1hcHJvbV93cml0ZSAoc3RydWN0IG10ZF9pbmZvICosIGxvZmZfdCwgc2l6ZV90LCBzaXplX3QgKiwgY29uc3QgdV9jaGFyICopOwogc3RhdGljIHZvaWQgbWFwcm9tX25vcCAoc3RydWN0IG10ZF9pbmZvICopOwogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbWFwX3JvbV9wcm9iZShzdHJ1Y3QgbWFwX2luZm8gKm1hcCk7CitzdGF0aWMgaW50IG1hcHJvbV9lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbmZvKTsKIAogc3RhdGljIHN0cnVjdCBtdGRfY2hpcF9kcml2ZXIgbWFwcm9tX2NoaXBkcnYgPSB7CiAJLnByb2JlCT0gbWFwX3JvbV9wcm9iZSwKQEAgLTQyLDYgKzQzLDcgQEAKIAltdGQtPnJlYWQgPSBtYXByb21fcmVhZDsKIAltdGQtPndyaXRlID0gbWFwcm9tX3dyaXRlOwogCW10ZC0+c3luYyA9IG1hcHJvbV9ub3A7CisJbXRkLT5lcmFzZSA9IG1hcHJvbV9lcmFzZTsKIAltdGQtPmZsYWdzID0gTVREX0NBUF9ST007CiAJbXRkLT5lcmFzZXNpemUgPSBtYXAtPnNpemU7CiAJbXRkLT53cml0ZXNpemUgPSAxOwpAQCAtNzEsNiArNzMsMTIgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAorc3RhdGljIGludCBtYXByb21fZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5mbykKK3sKKwkvKiBXZSBkbyBvdXIgYmVzdCA4KSAqLworCXJldHVybiAtRVJPRlM7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IG1hcF9yb21faW5pdCh2b2lkKQogewogCXJlZ2lzdGVyX210ZF9jaGlwX2RyaXZlcigmbWFwcm9tX2NoaXBkcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCmluZGV4IGJjMzMyMDAuLjZmZGUwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKQEAgLTEyMCwxMyArMTIwLDYgQEAKIAkgIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8sIG1lbW9yeSBiZXlvbmQgdGhlIG1lbT14eHggbGltaXQsIG52cmFtLAogCSAgbWVtb3J5IG9uIHRoZSB2aWRlbyBjYXJkLCBldGMuLi4KIAotY29uZmlnIE1URF9QUzNWUkFNCi0JdHJpc3RhdGUgIlBTMyB2aWRlbyBSQU0iCi0JZGVwZW5kcyBvbiBGQl9QUzMKLQloZWxwCi0JICBUaGlzIGRyaXZlciBhbGxvd3MgeW91IHRvIHVzZSBleGNlc3MgUFMzIHZpZGVvIFJBTSBhcyB2b2xhdGlsZQotCSAgc3RvcmFnZSBvciBzeXN0ZW0gc3dhcC4KLQogY29uZmlnIE1URF9MQVJUCiAJdHJpc3RhdGUgIjI4RjE2MHh4IGZsYXNoIGRyaXZlciBmb3IgTEFSVCIKIAlkZXBlbmRzIG9uIFNBMTEwMF9MQVJUCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQppbmRleCBlNTE1MjFkLi4wOTkzZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKQEAgLTE2LDQgKzE2LDMgQEAKIG9iai0kKENPTkZJR19NVERfQkxPQ0syTVREKQkrPSBibG9jazJtdGQubwogb2JqLSQoQ09ORklHX01URF9EQVRBRkxBU0gpCSs9IG10ZF9kYXRhZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9NMjVQODApCSs9IG0yNXA4MC5vCi1vYmotJChDT05GSUdfTVREX1BTM1ZSQU0pCSs9IHBzM3ZyYW0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwppbmRleCBkNDRmNzQxLi42ZDlmODEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwpAQCAtODIxLDcgKzgyMSw4IEBACiAJCQkJCWlmICghKGluZm8tPmZsYWdzICYgSVNfUE9XMlBTKSkKIAkJCQkJCXJldHVybiBpbmZvOwogCQkJCX0KLQkJCX0KKwkJCX0gZWxzZQorCQkJCXJldHVybiBpbmZvOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BzM3ZyYW0uYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcHMzdnJhbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjFlOWJlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvcHMzdnJhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzY4ICswLDAgQEAKLS8qKgotICogcHMzdnJhbSAtIFVzZSBleHRyYSBQUzMgdmlkZW8gcmFtIGFzIE1URCBibG9jayBkZXZpY2UuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmltIFBhcmlzIDxqaW1AanRhbi5jb20+Ci0gKiBBZGRlZCBzdXBwb3J0IFJTWCBETUEgVml2aWVuIENoYXBwZWxpZXIgPHZpdmllbi5jaGFwcGVsaWVyQGZyZWUuZnI+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9nZnAuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLQotI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+Ci0jaW5jbHVkZSA8YXNtL3BzMy5oPgotCi0jZGVmaW5lIERFVklDRV9OQU1FCQkicHMzdnJhbSIKLQotI2RlZmluZSBYRFJfQlVGX1NJWkUgKDIgKiAxMDI0ICogMTAyNCkgLyogWERSIGJ1ZmZlciAobXVzdCBiZSAxTWlCIGFsaWduZWQpICovCi0jZGVmaW5lIFhEUl9JT0lGIDB4MGMwMDAwMDAKLQotI2RlZmluZSBGSUZPX0JBU0UgWERSX0lPSUYKLSNkZWZpbmUgRklGT19TSVpFICg2NCAqIDEwMjQpCi0KLSNkZWZpbmUgRE1BX1BBR0VfU0laRSAoNCAqIDEwMjQpCi0KLSNkZWZpbmUgQ0FDSEVfUEFHRV9TSVpFICgyNTYgKiAxMDI0KQotI2RlZmluZSBDQUNIRV9QQUdFX0NPVU5UICgoWERSX0JVRl9TSVpFIC0gRklGT19TSVpFKSAvIENBQ0hFX1BBR0VfU0laRSkKLQotI2RlZmluZSBDQUNIRV9PRkZTRVQgQ0FDSEVfUEFHRV9TSVpFCi0jZGVmaW5lIEZJRk9fT0ZGU0VUIDAKLQotI2RlZmluZSBDVFJMX1BVVCAweDEwCi0jZGVmaW5lIENUUkxfR0VUIDB4MTEKLSNkZWZpbmUgQ1RSTF9UT1AgMHgxNQotCi0jZGVmaW5lIFVQTE9BRF9TVUJDSAkxCi0jZGVmaW5lIERPV05MT0FEX1NVQkNICTIKLQotI2RlZmluZSBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9PRkZTRVRfSU4JMHgwMDAwMDMwYwotI2RlZmluZSBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9OT1RJRlkJMHgwMDAwMDEwNAotCi0jZGVmaW5lIEwxR1BVX0NPTlRFWFRfQVRUUklCVVRFX0ZCX0JMSVQgMHg2MDEKLQotc3RydWN0IG10ZF9pbmZvIHBzM3ZyYW1fbXRkOwotCi0jZGVmaW5lIENBQ0hFX1BBR0VfUFJFU0VOVCAxCi0jZGVmaW5lIENBQ0hFX1BBR0VfRElSVFkgICAyCi0KLXN0cnVjdCBwczN2cmFtX3RhZyB7Ci0JdW5zaWduZWQgaW50IGFkZHJlc3M7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotfTsKLQotc3RydWN0IHBzM3ZyYW1fY2FjaGUgewotCXVuc2lnbmVkIGludCBwYWdlX2NvdW50OwotCXVuc2lnbmVkIGludCBwYWdlX3NpemU7Ci0Jc3RydWN0IHBzM3ZyYW1fdGFnICp0YWdzOwotfTsKLQotc3RydWN0IHBzM3ZyYW1fcHJpdiB7Ci0JdTY0IG1lbW9yeV9oYW5kbGU7Ci0JdTY0IGNvbnRleHRfaGFuZGxlOwotCXUzMiAqY3RybDsKLQl1MzIgKnJlcG9ydHM7Ci0JdTggX19pb21lbSAqZGRyX2Jhc2U7Ci0JdTggKnhkcl9idWY7Ci0KLQl1MzIgKmZpZm9fYmFzZTsKLQl1MzIgKmZpZm9fcHRyOwotCi0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBwczN2cmFtX2NhY2hlIGNhY2hlOwotCi0JLyogVXNlZCB0byBzZXJpYWxpemUgY2FjaGUvRE1BIG9wZXJhdGlvbnMgKi8KLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLX07Ci0KLSNkZWZpbmUgRE1BX05PVElGSUVSX0hBTkRMRV9CQVNFIDB4NjY2MDQyMDAgLyogZmlyc3QgRE1BIG5vdGlmaWVyIGhhbmRsZSAqLwotI2RlZmluZSBETUFfTk9USUZJRVJfT0ZGU0VUX0JBU0UgMHgxMDAwICAgICAvKiBmaXJzdCBETUEgbm90aWZpZXIgb2Zmc2V0ICovCi0jZGVmaW5lIERNQV9OT1RJRklFUl9TSVpFICAgICAgICAweDQwCi0jZGVmaW5lIE5PVElGSUVSIDcJLyogbm90aWZpZXIgdXNlZCBmb3IgY29tcGxldGlvbiByZXBvcnQgKi8KLQotLyogQSB0cmFpbGluZyAnLScgbWVhbnMgdG8gc3VidHJhY3Qgb2ZmIHBzM2ZiX3ZpZGVvbWVtb3J5LnNpemUgKi8KLWNoYXIgKnNpemUgPSAiMjU2TS0iOwotbW9kdWxlX3BhcmFtKHNpemUsIGNoYXJwLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Moc2l6ZSwgIm1lbW9yeSBzaXplIik7Ci0KLXN0YXRpYyB1MzIgKnBzM3ZyYW1fZ2V0X25vdGlmaWVyKHUzMiAqcmVwb3J0cywgaW50IG5vdGlmaWVyKQotewotCXJldHVybiAodm9pZCAqKSByZXBvcnRzICsKLQkJRE1BX05PVElGSUVSX09GRlNFVF9CQVNFICsKLQkJRE1BX05PVElGSUVSX1NJWkUgKiBub3RpZmllcjsKLX0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9ub3RpZmllcl9yZXNldChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlpbnQgaTsKLQotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0JdTMyICpub3RpZnkgPSBwczN2cmFtX2dldF9ub3RpZmllcihwcml2LT5yZXBvcnRzLCBOT1RJRklFUik7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJbm90aWZ5W2ldID0gMHhmZmZmZmZmZjsKLX0KLQotc3RhdGljIGludCBwczN2cmFtX25vdGlmaWVyX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCB0aW1lb3V0X21zKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0JdTMyICpub3RpZnkgPSBwczN2cmFtX2dldF9ub3RpZmllcihwcml2LT5yZXBvcnRzLCBOT1RJRklFUik7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7Ci0KLQlkbyB7Ci0JCWlmICghbm90aWZ5WzNdKQotCQkJcmV0dXJuIDA7Ci0JCW1zbGVlcCgxKTsKLQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7Ci0KLQlyZXR1cm4gLUVUSU1FRE9VVDsKLX0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9pbml0X3Jpbmcoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQotCXByaXYtPmN0cmxbQ1RSTF9QVVRdID0gRklGT19CQVNFICsgRklGT19PRkZTRVQ7Ci0JcHJpdi0+Y3RybFtDVFJMX0dFVF0gPSBGSUZPX0JBU0UgKyBGSUZPX09GRlNFVDsKLX0KLQotc3RhdGljIGludCBwczN2cmFtX3dhaXRfcmluZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTsKLQotCWRvIHsKLQkJaWYgKHByaXYtPmN0cmxbQ1RSTF9QVVRdID09IHByaXYtPmN0cmxbQ1RSTF9HRVRdKQotCQkJcmV0dXJuIDA7Ci0JCW1zbGVlcCgxKTsKLQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7Ci0KLQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBGSUZPIHRpbWVvdXQgKCUwOHgvJTA4eC8lMDh4KVxuIiwgX19mdW5jX18sCi0JCV9fTElORV9fLCBwcml2LT5jdHJsW0NUUkxfUFVUXSwgcHJpdi0+Y3RybFtDVFJMX0dFVF0sCi0JCXByaXYtPmN0cmxbQ1RSTF9UT1BdKTsKLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX291dF9yaW5nKHN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYsIHUzMiBkYXRhKQotewotCSoocHJpdi0+Zmlmb19wdHIpKysgPSBkYXRhOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2JlZ2luX3Jpbmcoc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiwgdTMyIGNoYW4sCi0JCQkJICAgICAgdTMyIHRhZywgdTMyIHNpemUpCi17Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAoc2l6ZSA8PCAxOCkgfCAoY2hhbiA8PCAxMykgfCB0YWcpOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX3Jld2luZF9yaW5nKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0JdTY0IHN0YXR1czsKLQotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHgyMDAwMDAwMCB8IChGSUZPX0JBU0UgKyBGSUZPX09GRlNFVCkpOwotCi0JcHJpdi0+Y3RybFtDVFJMX1BVVF0gPSBGSUZPX0JBU0UgKyBGSUZPX09GRlNFVDsKLQotCS8qIGFza2luZyB0aGUgSFYgZm9yIGEgYmxpdCB3aWxsIGtpY2sgdGhlIGZpZm8gKi8KLQlzdGF0dXMgPSBsdjFfZ3B1X2NvbnRleHRfYXR0cmlidXRlKHByaXYtPmNvbnRleHRfaGFuZGxlLAotCQkJCQkgICBMMUdQVV9DT05URVhUX0FUVFJJQlVURV9GQl9CTElULAotCQkJCQkgICAwLCAwLCAwLCAwKTsKLQlpZiAoc3RhdHVzKQotCQlkZXZfZXJyKHByaXYtPmRldiwgIiVzOiVkOiBsdjFfZ3B1X2NvbnRleHRfYXR0cmlidXRlIGZhaWxlZFxuIiwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0KLQlwcml2LT5maWZvX3B0ciA9IHByaXYtPmZpZm9fYmFzZTsKLX0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9maXJlX3Jpbmcoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQl1NjQgc3RhdHVzOwotCi0JbXV0ZXhfbG9jaygmcHMzX2dwdV9tdXRleCk7Ci0KLQlwcml2LT5jdHJsW0NUUkxfUFVUXSA9IEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUICsKLQkJKHByaXYtPmZpZm9fcHRyIC0gcHJpdi0+Zmlmb19iYXNlKSAqIHNpemVvZih1MzIpOwotCi0JLyogYXNraW5nIHRoZSBIViBmb3IgYSBibGl0IHdpbGwga2ljayB0aGUgZmlmbyAqLwotCXN0YXR1cyA9IGx2MV9ncHVfY29udGV4dF9hdHRyaWJ1dGUocHJpdi0+Y29udGV4dF9oYW5kbGUsCi0JCQkJCSAgIEwxR1BVX0NPTlRFWFRfQVRUUklCVVRFX0ZCX0JMSVQsCi0JCQkJCSAgIDAsIDAsIDAsIDApOwotCWlmIChzdGF0dXMpCi0JCWRldl9lcnIocHJpdi0+ZGV2LCAiJXM6JWQ6IGx2MV9ncHVfY29udGV4dF9hdHRyaWJ1dGUgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fKTsKLQotCWlmICgocHJpdi0+Zmlmb19wdHIgLSBwcml2LT5maWZvX2Jhc2UpICogc2l6ZW9mKHUzMikgPgotCQlGSUZPX1NJWkUgLSAxMDI0KSB7Ci0JCWRldl9kYmcocHJpdi0+ZGV2LCAiJXM6JWQ6IGZpZm8gZnVsbCwgcmV3aW5kaW5nXG4iLCBfX2Z1bmNfXywKLQkJCV9fTElORV9fKTsKLQkJcHMzdnJhbV93YWl0X3JpbmcobXRkLCAyMDApOwotCQlwczN2cmFtX3Jld2luZF9yaW5nKG10ZCk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZwczNfZ3B1X211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9iaW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0KLQlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgVVBMT0FEX1NVQkNILCAwLCAxKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIDB4MzEzMzczMDMpOwotCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBVUExPQURfU1VCQ0gsIDB4MTgwLCAzKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIERNQV9OT1RJRklFUl9IQU5ETEVfQkFTRSArIE5PVElGSUVSKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIDB4ZmVlZDAwMDEpOwkvKiBETUEgc3lzdGVtIFJBTSBpbnN0YW5jZSAqLwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHhmZWVkMDAwMCk7ICAgICAvKiBETUEgdmlkZW8gUkFNIGluc3RhbmNlICovCi0KLQlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgRE9XTkxPQURfU1VCQ0gsIDAsIDEpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHgzMTM3YzBkZSk7Ci0JcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIERPV05MT0FEX1NVQkNILCAweDE4MCwgMyk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBETUFfTk9USUZJRVJfSEFORExFX0JBU0UgKyBOT1RJRklFUik7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweGZlZWQwMDAwKTsJLyogRE1BIHZpZGVvIFJBTSBpbnN0YW5jZSAqLwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHhmZWVkMDAwMSk7CS8qIERNQSBzeXN0ZW0gUkFNIGluc3RhbmNlICovCi0KLQlwczN2cmFtX2ZpcmVfcmluZyhtdGQpOwotfQotCi1zdGF0aWMgaW50IHBzM3ZyYW1fdXBsb2FkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgc3JjX29mZnNldCwKLQkJCSAgdW5zaWduZWQgaW50IGRzdF9vZmZzZXQsIGludCBsZW4sIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCi0JcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIFVQTE9BRF9TVUJDSCwKLQkJCSAgIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX09GRlNFVF9JTiwgOCk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBYRFJfSU9JRiArIHNyY19vZmZzZXQpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgZHN0X29mZnNldCk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBjb3VudCk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAoMSA8PCA4KSB8IDEpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7Ci0KLQlwczN2cmFtX25vdGlmaWVyX3Jlc2V0KG10ZCk7Ci0JcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIFVQTE9BRF9TVUJDSCwKLQkJCSAgIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX05PVElGWSwgMSk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKLQlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgVVBMT0FEX1NVQkNILCAweDEwMCwgMSk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKLQlwczN2cmFtX2ZpcmVfcmluZyhtdGQpOwotCWlmIChwczN2cmFtX25vdGlmaWVyX3dhaXQobXRkLCAyMDApIDwgMCkgewotCQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBub3RpZmllciB0aW1lb3V0XG4iLCBfX2Z1bmNfXywKLQkJCV9fTElORV9fKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBzM3ZyYW1fZG93bmxvYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCBzcmNfb2Zmc2V0LAotCQkJICAgIHVuc2lnbmVkIGludCBkc3Rfb2Zmc2V0LCBpbnQgbGVuLCBpbnQgY291bnQpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQotCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBET1dOTE9BRF9TVUJDSCwKLQkJCSAgIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX09GRlNFVF9JTiwgOCk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBzcmNfb2Zmc2V0KTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIFhEUl9JT0lGICsgZHN0X29mZnNldCk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBjb3VudCk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAoMSA8PCA4KSB8IDEpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7Ci0KLQlwczN2cmFtX25vdGlmaWVyX3Jlc2V0KG10ZCk7Ci0JcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIERPV05MT0FEX1NVQkNILAotCQkJICAgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfTk9USUZZLCAxKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIDApOwotCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBET1dOTE9BRF9TVUJDSCwgMHgxMDAsIDEpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7Ci0JcHMzdnJhbV9maXJlX3JpbmcobXRkKTsKLQlpZiAocHMzdnJhbV9ub3RpZmllcl93YWl0KG10ZCwgMjAwKSA8IDApIHsKLQkJZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogbm90aWZpZXIgdGltZW91dFxuIiwgX19mdW5jX18sCi0JCQlfX0xJTkVfXyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9jYWNoZV9ldmljdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGVudHJ5KQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IHBzM3ZyYW1fY2FjaGUgKmNhY2hlID0gJnByaXYtPmNhY2hlOwotCi0JaWYgKGNhY2hlLT50YWdzW2VudHJ5XS5mbGFncyAmIENBQ0hFX1BBR0VfRElSVFkpIHsKLQkJZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogZmx1c2hpbmcgJWQgOiAweCUwOHhcbiIsIF9fZnVuY19fLAotCQkJX19MSU5FX18sIGVudHJ5LCBjYWNoZS0+dGFnc1tlbnRyeV0uYWRkcmVzcyk7Ci0JCWlmIChwczN2cmFtX3VwbG9hZChtdGQsCi0JCQkJICAgQ0FDSEVfT0ZGU0VUICsgZW50cnkgKiBjYWNoZS0+cGFnZV9zaXplLAotCQkJCSAgIGNhY2hlLT50YWdzW2VudHJ5XS5hZGRyZXNzLAotCQkJCSAgIERNQV9QQUdFX1NJWkUsCi0JCQkJICAgY2FjaGUtPnBhZ2Vfc2l6ZSAvIERNQV9QQUdFX1NJWkUpIDwgMCkgewotCQkJZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogZmFpbGVkIHRvIHVwbG9hZCBmcm9tICIKLQkJCQkiMHgleCB0byAweCV4IHNpemUgMHgleFxuIiwgX19mdW5jX18sIF9fTElORV9fLAotCQkJCWVudHJ5ICogY2FjaGUtPnBhZ2Vfc2l6ZSwKLQkJCQljYWNoZS0+dGFnc1tlbnRyeV0uYWRkcmVzcywgY2FjaGUtPnBhZ2Vfc2l6ZSk7Ci0JCX0KLQkJY2FjaGUtPnRhZ3NbZW50cnldLmZsYWdzICY9IH5DQUNIRV9QQUdFX0RJUlRZOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9jYWNoZV9sb2FkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgZW50cnksCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGFkZHJlc3MpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgcHMzdnJhbV9jYWNoZSAqY2FjaGUgPSAmcHJpdi0+Y2FjaGU7Ci0KLQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBmZXRjaGluZyAlZCA6IDB4JTA4eFxuIiwgX19mdW5jX18sIF9fTElORV9fLAotCQllbnRyeSwgYWRkcmVzcyk7Ci0JaWYgKHBzM3ZyYW1fZG93bmxvYWQobXRkLAotCQkJICAgICBhZGRyZXNzLAotCQkJICAgICBDQUNIRV9PRkZTRVQgKyBlbnRyeSAqIGNhY2hlLT5wYWdlX3NpemUsCi0JCQkgICAgIERNQV9QQUdFX1NJWkUsCi0JCQkgICAgIGNhY2hlLT5wYWdlX3NpemUgLyBETUFfUEFHRV9TSVpFKSA8IDApIHsKLQkJZGV2X2Vycihwcml2LT5kZXYsICIlczolZDogZmFpbGVkIHRvIGRvd25sb2FkIGZyb20gIgotCQkJIjB4JXggdG8gMHgleCBzaXplIDB4JXhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgYWRkcmVzcywKLQkJCWVudHJ5ICogY2FjaGUtPnBhZ2Vfc2l6ZSwgY2FjaGUtPnBhZ2Vfc2l6ZSk7Ci0JfQotCi0JY2FjaGUtPnRhZ3NbZW50cnldLmFkZHJlc3MgPSBhZGRyZXNzOwotCWNhY2hlLT50YWdzW2VudHJ5XS5mbGFncyB8PSBDQUNIRV9QQUdFX1BSRVNFTlQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9jYWNoZV9mbHVzaChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCXN0cnVjdCBwczN2cmFtX2NhY2hlICpjYWNoZSA9ICZwcml2LT5jYWNoZTsKLQlpbnQgaTsKLQotCWRldl9kYmcocHJpdi0+ZGV2LCAiJXM6JWQ6IEZMVVNIXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCWZvciAoaSA9IDA7IGkgPCBjYWNoZS0+cGFnZV9jb3VudDsgaSsrKSB7Ci0JCXBzM3ZyYW1fY2FjaGVfZXZpY3QobXRkLCBpKTsKLQkJY2FjaGUtPnRhZ3NbaV0uZmxhZ3MgPSAwOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwczN2cmFtX2NhY2hlX21hdGNoKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCXN0cnVjdCBwczN2cmFtX2NhY2hlICpjYWNoZSA9ICZwcml2LT5jYWNoZTsKLQl1bnNpZ25lZCBpbnQgYmFzZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCBpOwotCXN0YXRpYyBpbnQgY291bnRlcjsKLQotCW9mZnNldCA9ICh1bnNpZ25lZCBpbnQpIChhZGRyZXNzICYgKGNhY2hlLT5wYWdlX3NpemUgLSAxKSk7Ci0JYmFzZSA9ICh1bnNpZ25lZCBpbnQpIChhZGRyZXNzIC0gb2Zmc2V0KTsKLQotCS8qIGZ1bGx5IGFzc29jaWF0aXZlIGNoZWNrICovCi0JZm9yIChpID0gMDsgaSA8IGNhY2hlLT5wYWdlX2NvdW50OyBpKyspIHsKLQkJaWYgKChjYWNoZS0+dGFnc1tpXS5mbGFncyAmIENBQ0hFX1BBR0VfUFJFU0VOVCkgJiYKLQkJICAgIGNhY2hlLT50YWdzW2ldLmFkZHJlc3MgPT0gYmFzZSkgewotCQkJZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogZm91bmQgZW50cnkgJWQgOiAweCUwOHhcbiIsCi0JCQkJX19mdW5jX18sIF9fTElORV9fLCBpLCBjYWNoZS0+dGFnc1tpXS5hZGRyZXNzKTsKLQkJCXJldHVybiBpOwotCQl9Ci0JfQotCi0JLyogY2hvb3NlIGEgcmFuZG9tIGVudHJ5ICovCi0JaSA9IChqaWZmaWVzICsgKGNvdW50ZXIrKykpICUgY2FjaGUtPnBhZ2VfY291bnQ7Ci0JZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogdXNpbmcgZW50cnkgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgaSk7Ci0KLQlwczN2cmFtX2NhY2hlX2V2aWN0KG10ZCwgaSk7Ci0JcHMzdnJhbV9jYWNoZV9sb2FkKG10ZCwgaSwgYmFzZSk7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGludCBwczN2cmFtX2NhY2hlX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQotCXByaXYtPmNhY2hlLnBhZ2VfY291bnQgPSBDQUNIRV9QQUdFX0NPVU5UOwotCXByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSA9IENBQ0hFX1BBR0VfU0laRTsKLQlwcml2LT5jYWNoZS50YWdzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzM3ZyYW1fdGFnKSAqCi0JCQkJICAgQ0FDSEVfUEFHRV9DT1VOVCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHByaXYtPmNhY2hlLnRhZ3MgPT0gTlVMTCkgewotCQlkZXZfZXJyKHByaXYtPmRldiwgIiVzOiVkOiBjb3VsZCBub3QgYWxsb2NhdGUgY2FjaGUgdGFnc1xuIiwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRldl9pbmZvKHByaXYtPmRldiwgImNyZWF0ZWQgcmFtIGNhY2hlOiAlZCBlbnRyaWVzLCAlZCBLaUIgZWFjaFxuIiwKLQkJQ0FDSEVfUEFHRV9DT1VOVCwgQ0FDSEVfUEFHRV9TSVpFIC8gMTAyNCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHMzdnJhbV9jYWNoZV9jbGVhbnVwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0KLQlwczN2cmFtX2NhY2hlX2ZsdXNoKG10ZCk7Ci0Ja2ZyZWUocHJpdi0+Y2FjaGUudGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgcHMzdnJhbV9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0KLQlpZiAoaW5zdHItPmFkZHIgKyBpbnN0ci0+bGVuID4gbXRkLT5zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCi0JcHMzdnJhbV9jYWNoZV9mbHVzaChtdGQpOwotCi0JLyogU2V0IGJ5dGVzIHRvIDB4RkYgKi8KLQltZW1zZXRfaW8ocHJpdi0+ZGRyX2Jhc2UgKyBpbnN0ci0+YWRkciwgMHhGRiwgaW5zdHItPmxlbik7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCi0JaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0RPTkU7Ci0JbXRkX2VyYXNlX2NhbGxiYWNrKGluc3RyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBzM3ZyYW1fcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQl1bnNpZ25lZCBpbnQgY2FjaGVkLCBjb3VudDsKLQotCWRldl9kYmcocHJpdi0+ZGV2LCAiJXM6JWQ6IGZyb209MHglMDh4IGxlbj0weCV6eFxuIiwgX19mdW5jX18sIF9fTElORV9fLAotCQkodW5zaWduZWQgaW50KWZyb20sIGxlbik7Ci0KLQlpZiAoZnJvbSA+PSBtdGQtPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGxlbiA+IG10ZC0+c2l6ZSAtIGZyb20pCi0JCWxlbiA9IG10ZC0+c2l6ZSAtIGZyb207Ci0KLQkvKiBDb3B5IGZyb20gdnJhbSB0byBidWYgKi8KLQljb3VudCA9IGxlbjsKLQl3aGlsZSAoY291bnQpIHsKLQkJdW5zaWduZWQgaW50IG9mZnNldCwgYXZhaWw7Ci0JCXVuc2lnbmVkIGludCBlbnRyeTsKLQotCQlvZmZzZXQgPSAodW5zaWduZWQgaW50KSAoZnJvbSAmIChwcml2LT5jYWNoZS5wYWdlX3NpemUgLSAxKSk7Ci0JCWF2YWlsICA9IHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSAtIG9mZnNldDsKLQotCQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQotCQllbnRyeSA9IHBzM3ZyYW1fY2FjaGVfbWF0Y2gobXRkLCBmcm9tKTsKLQkJY2FjaGVkID0gQ0FDSEVfT0ZGU0VUICsgZW50cnkgKiBwcml2LT5jYWNoZS5wYWdlX3NpemUgKyBvZmZzZXQ7Ci0KLQkJZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogZnJvbT0lMDh4IGNhY2hlZD0lMDh4IG9mZnNldD0lMDh4ICIKLQkJCSJhdmFpbD0lMDh4IGNvdW50PSUwOHhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKLQkJCSh1bnNpZ25lZCBpbnQpZnJvbSwgY2FjaGVkLCBvZmZzZXQsIGF2YWlsLCBjb3VudCk7Ci0KLQkJaWYgKGF2YWlsID4gY291bnQpCi0JCQlhdmFpbCA9IGNvdW50OwotCQltZW1jcHkoYnVmLCBwcml2LT54ZHJfYnVmICsgY2FjaGVkLCBhdmFpbCk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotCQlidWYgKz0gYXZhaWw7Ci0JCWNvdW50IC09IGF2YWlsOwotCQlmcm9tICs9IGF2YWlsOwotCX0KLQotCSpyZXRsZW4gPSBsZW47Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHMzdnJhbV93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCXVuc2lnbmVkIGludCBjYWNoZWQsIGNvdW50OwotCi0JaWYgKHRvID49IG10ZC0+c2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobGVuID4gbXRkLT5zaXplIC0gdG8pCi0JCWxlbiA9IG10ZC0+c2l6ZSAtIHRvOwotCi0JLyogQ29weSBmcm9tIGJ1ZiB0byB2cmFtICovCi0JY291bnQgPSBsZW47Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXVuc2lnbmVkIGludCBvZmZzZXQsIGF2YWlsOwotCQl1bnNpZ25lZCBpbnQgZW50cnk7Ci0KLQkJb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgKHRvICYgKHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSAtIDEpKTsKLQkJYXZhaWwgID0gcHJpdi0+Y2FjaGUucGFnZV9zaXplIC0gb2Zmc2V0OwotCi0JCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCi0JCWVudHJ5ID0gcHMzdnJhbV9jYWNoZV9tYXRjaChtdGQsIHRvKTsKLQkJY2FjaGVkID0gQ0FDSEVfT0ZGU0VUICsgZW50cnkgKiBwcml2LT5jYWNoZS5wYWdlX3NpemUgKyBvZmZzZXQ7Ci0KLQkJZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogdG89JTA4eCBjYWNoZWQ9JTA4eCBvZmZzZXQ9JTA4eCAiCi0JCQkiYXZhaWw9JTA4eCBjb3VudD0lMDh4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCi0JCQkodW5zaWduZWQgaW50KXRvLCBjYWNoZWQsIG9mZnNldCwgYXZhaWwsIGNvdW50KTsKLQotCQlpZiAoYXZhaWwgPiBjb3VudCkKLQkJCWF2YWlsID0gY291bnQ7Ci0JCW1lbWNweShwcml2LT54ZHJfYnVmICsgY2FjaGVkLCBidWYsIGF2YWlsKTsKLQotCQlwcml2LT5jYWNoZS50YWdzW2VudHJ5XS5mbGFncyB8PSBDQUNIRV9QQUdFX0RJUlRZOwotCi0JCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQkJYnVmICs9IGF2YWlsOwotCQljb3VudCAtPSBhdmFpbDsKLQkJdG8gKz0gYXZhaWw7Ci0JfQotCi0JKnJldGxlbiA9IGxlbjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgcHMzdnJhbV9wcm9iZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdjsKLQlpbnQgc3RhdHVzOwotCXU2NCBkZHJfbHBhcjsKLQl1NjQgY3RybF9scGFyOwotCXU2NCBpbmZvX2xwYXI7Ci0JdTY0IHJlcG9ydHNfbHBhcjsKLQl1NjQgZGRyX3NpemU7Ci0JdTY0IHJlcG9ydHNfc2l6ZTsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQljaGFyICpyZXN0OwotCi0JcmV0ID0gLUVJTzsKLQlwczN2cmFtX210ZC5wcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzM3ZyYW1fcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICghcHMzdnJhbV9tdGQucHJpdikKLQkJZ290byBvdXQ7Ci0JcHJpdiA9IHBzM3ZyYW1fbXRkLnByaXY7Ci0KLQltdXRleF9pbml0KCZwcml2LT5sb2NrKTsKLQlwcml2LT5kZXYgPSAmZGV2LT5jb3JlOwotCi0JLyogQWxsb2NhdGUgWERSIGJ1ZmZlciAoMU1pQiBhbGlnbmVkKSAqLwotCXByaXYtPnhkcl9idWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKLQkJZ2V0X29yZGVyKFhEUl9CVUZfU0laRSkpOwotCWlmIChwcml2LT54ZHJfYnVmID09IE5VTEwpIHsKLQkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSBYRFIgYnVmZmVyXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV9wcml2OwotCX0KLQotCS8qIFB1dCBGSUZPIGF0IGJlZ2dpbm5pbmcgb2YgWERSIGJ1ZmZlciAqLwotCXByaXYtPmZpZm9fYmFzZSA9ICh1MzIgKikgKHByaXYtPnhkcl9idWYgKyBGSUZPX09GRlNFVCk7Ci0JcHJpdi0+Zmlmb19wdHIgPSBwcml2LT5maWZvX2Jhc2U7Ci0KLQkvKiBYWFg6IE5lZWQgdG8gb3BlbiBHUFUsIGluIGNhc2UgcHMzZmIgb3Igc25kX3BzMyBhcmVuJ3QgbG9hZGVkICovCi0JaWYgKHBzM19vcGVuX2h2X2RldmljZShkZXYpKSB7Ci0JCWRldl9lcnIoJmRldi0+Y29yZSwgIiVzOiVkOiBwczNfb3Blbl9odl9kZXZpY2UgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fKTsKLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBvdXRfY2xvc2VfZ3B1OwotCX0KLQotCS8qIFJlcXVlc3QgbWVtb3J5ICovCi0Jc3RhdHVzID0gLTE7Ci0JZGRyX3NpemUgPSBtZW1wYXJzZShzaXplLCAmcmVzdCk7Ci0JaWYgKCpyZXN0ID09ICctJykKLQkJZGRyX3NpemUgLT0gcHMzZmJfdmlkZW9tZW1vcnkuc2l6ZTsKLQlkZHJfc2l6ZSA9IEFMSUdOKGRkcl9zaXplLCAxMDI0KjEwMjQpOwotCWlmIChkZHJfc2l6ZSA8PSAwKSB7Ci0JCWRldl9lcnIoJmRldi0+Y29yZSwgIiVzOiVkOiBzcGVjaWZpZWQgc2l6ZSBpcyB0b28gc21hbGxcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9jbG9zZV9ncHU7Ci0JfQotCi0Jd2hpbGUgKGRkcl9zaXplID4gMCkgewotCQlzdGF0dXMgPSBsdjFfZ3B1X21lbW9yeV9hbGxvY2F0ZShkZHJfc2l6ZSwgMCwgMCwgMCwgMCwKLQkJCQkJCSAmcHJpdi0+bWVtb3J5X2hhbmRsZSwKLQkJCQkJCSAmZGRyX2xwYXIpOwotCQlpZiAoIXN0YXR1cykKLQkJCWJyZWFrOwotCQlkZHJfc2l6ZSAtPSAxMDI0KjEwMjQ7Ci0JfQotCWlmIChzdGF0dXMgfHwgZGRyX3NpemUgPD0gMCkgewotCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlczolZDogbHYxX2dwdV9tZW1vcnlfYWxsb2NhdGUgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV94ZHJfYnVmOwotCX0KLQotCS8qIFJlcXVlc3QgY29udGV4dCAqLwotCXN0YXR1cyA9IGx2MV9ncHVfY29udGV4dF9hbGxvY2F0ZShwcml2LT5tZW1vcnlfaGFuZGxlLAotCQkJCQkgIDAsCi0JCQkJCSAgJnByaXYtPmNvbnRleHRfaGFuZGxlLAotCQkJCQkgICZjdHJsX2xwYXIsCi0JCQkJCSAgJmluZm9fbHBhciwKLQkJCQkJICAmcmVwb3J0c19scGFyLAotCQkJCQkgICZyZXBvcnRzX3NpemUpOwotCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmZGV2LT5jb3JlLCAiJXM6JWQ6IGx2MV9ncHVfY29udGV4dF9hbGxvY2F0ZSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX21lbW9yeTsKLQl9Ci0KLQkvKiBNYXAgWERSIGJ1ZmZlciB0byBSU1ggKi8KLQlzdGF0dXMgPSBsdjFfZ3B1X2NvbnRleHRfaW9tYXAocHJpdi0+Y29udGV4dF9oYW5kbGUsIFhEUl9JT0lGLAotCQkJCSAgICAgICBwczNfbW1fcGh5c190b19scGFyKF9fcGEocHJpdi0+eGRyX2J1ZikpLAotCQkJCSAgICAgICBYRFJfQlVGX1NJWkUsIDApOwotCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmZGV2LT5jb3JlLCAiJXM6JWQ6IGx2MV9ncHVfY29udGV4dF9pb21hcCBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2NvbnRleHQ7Ci0JfQotCi0JcHJpdi0+ZGRyX2Jhc2UgPSBpb3JlbWFwX2ZsYWdzKGRkcl9scGFyLCBkZHJfc2l6ZSwgX1BBR0VfTk9fQ0FDSEUpOwotCi0JaWYgKCFwcml2LT5kZHJfYmFzZSkgewotCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlczolZDogaW9yZW1hcCBmYWlsZWRcbiIsIF9fZnVuY19fLAotCQkJX19MSU5FX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2NvbnRleHQ7Ci0JfQotCi0JcHJpdi0+Y3RybCA9IGlvcmVtYXAoY3RybF9scGFyLCA2NCAqIDEwMjQpOwotCWlmICghcHJpdi0+Y3RybCkgewotCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlczolZDogaW9yZW1hcCBmYWlsZWRcbiIsIF9fZnVuY19fLAotCQkJX19MSU5FX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF91bm1hcF92cmFtOwotCX0KLQotCXByaXYtPnJlcG9ydHMgPSBpb3JlbWFwKHJlcG9ydHNfbHBhciwgcmVwb3J0c19zaXplKTsKLQlpZiAoIXByaXYtPnJlcG9ydHMpIHsKLQkJZGV2X2VycigmZGV2LT5jb3JlLCAiJXM6JWQ6IGlvcmVtYXAgZmFpbGVkXG4iLCBfX2Z1bmNfXywKLQkJCV9fTElORV9fKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfdW5tYXBfY3RybDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwczNfZ3B1X211dGV4KTsKLQlwczN2cmFtX2luaXRfcmluZygmcHMzdnJhbV9tdGQpOwotCW11dGV4X3VubG9jaygmcHMzX2dwdV9tdXRleCk7Ci0KLQlwczN2cmFtX210ZC5uYW1lID0gInBzM3ZyYW0iOwotCXBzM3ZyYW1fbXRkLnNpemUgPSBkZHJfc2l6ZTsKLQlwczN2cmFtX210ZC5mbGFncyA9IE1URF9DQVBfUkFNOwotCXBzM3ZyYW1fbXRkLmVyYXNlID0gcHMzdnJhbV9lcmFzZTsKLQlwczN2cmFtX210ZC5wb2ludCA9IE5VTEw7Ci0JcHMzdnJhbV9tdGQudW5wb2ludCA9IE5VTEw7Ci0JcHMzdnJhbV9tdGQucmVhZCA9IHBzM3ZyYW1fcmVhZDsKLQlwczN2cmFtX210ZC53cml0ZSA9IHBzM3ZyYW1fd3JpdGU7Ci0JcHMzdnJhbV9tdGQub3duZXIgPSBUSElTX01PRFVMRTsKLQlwczN2cmFtX210ZC50eXBlID0gTVREX1JBTTsKLQlwczN2cmFtX210ZC5lcmFzZXNpemUgPSBDQUNIRV9QQUdFX1NJWkU7Ci0JcHMzdnJhbV9tdGQud3JpdGVzaXplID0gMTsKLQotCXBzM3ZyYW1fYmluZCgmcHMzdnJhbV9tdGQpOwotCi0JbXV0ZXhfbG9jaygmcHMzX2dwdV9tdXRleCk7Ci0JcmV0ID0gcHMzdnJhbV93YWl0X3JpbmcoJnBzM3ZyYW1fbXRkLCAxMDApOwotCW11dGV4X3VubG9jaygmcHMzX2dwdV9tdXRleCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmZGV2LT5jb3JlLCAiJXM6JWQ6IGZhaWxlZCB0byBpbml0aWFsaXplIGNoYW5uZWxzXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fKTsKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZ290byBvdXRfdW5tYXBfcmVwb3J0czsKLQl9Ci0KLQlwczN2cmFtX2NhY2hlX2luaXQoJnBzM3ZyYW1fbXRkKTsKLQotCWlmIChhZGRfbXRkX2RldmljZSgmcHMzdnJhbV9tdGQpKSB7Ci0JCWRldl9lcnIoJmRldi0+Y29yZSwgIiVzOiVkOiBhZGRfbXRkX2RldmljZSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIG91dF9jYWNoZV9jbGVhbnVwOwotCX0KLQotCWRldl9pbmZvKCZkZXYtPmNvcmUsICJyZXNlcnZlZCAldSBNaUIgb2YgZ3B1IG1lbW9yeVxuIiwKLQkJKHVuc2lnbmVkIGludCkoZGRyX3NpemUgLyAxMDI0IC8gMTAyNCkpOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9jYWNoZV9jbGVhbnVwOgotCXBzM3ZyYW1fY2FjaGVfY2xlYW51cCgmcHMzdnJhbV9tdGQpOwotb3V0X3VubWFwX3JlcG9ydHM6Ci0JaW91bm1hcChwcml2LT5yZXBvcnRzKTsKLW91dF91bm1hcF9jdHJsOgotCWlvdW5tYXAocHJpdi0+Y3RybCk7Ci1vdXRfdW5tYXBfdnJhbToKLQlpb3VubWFwKHByaXYtPmRkcl9iYXNlKTsKLW91dF9mcmVlX2NvbnRleHQ6Ci0JbHYxX2dwdV9jb250ZXh0X2ZyZWUocHJpdi0+Y29udGV4dF9oYW5kbGUpOwotb3V0X2ZyZWVfbWVtb3J5OgotCWx2MV9ncHVfbWVtb3J5X2ZyZWUocHJpdi0+bWVtb3J5X2hhbmRsZSk7Ci1vdXRfY2xvc2VfZ3B1OgotCXBzM19jbG9zZV9odl9kZXZpY2UoZGV2KTsKLW91dF9mcmVlX3hkcl9idWY6Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcHJpdi0+eGRyX2J1ZiwgZ2V0X29yZGVyKFhEUl9CVUZfU0laRSkpOwotb3V0X2ZyZWVfcHJpdjoKLQlrZnJlZShwczN2cmFtX210ZC5wcml2KTsKLQlwczN2cmFtX210ZC5wcml2ID0gTlVMTDsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBzM3ZyYW1fc2h1dGRvd24oc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXY7Ci0KLQlwcml2ID0gcHMzdnJhbV9tdGQucHJpdjsKLQotCWRlbF9tdGRfZGV2aWNlKCZwczN2cmFtX210ZCk7Ci0JcHMzdnJhbV9jYWNoZV9jbGVhbnVwKCZwczN2cmFtX210ZCk7Ci0JaW91bm1hcChwcml2LT5yZXBvcnRzKTsKLQlpb3VubWFwKHByaXYtPmN0cmwpOwotCWlvdW5tYXAocHJpdi0+ZGRyX2Jhc2UpOwotCWx2MV9ncHVfY29udGV4dF9mcmVlKHByaXYtPmNvbnRleHRfaGFuZGxlKTsKLQlsdjFfZ3B1X21lbW9yeV9mcmVlKHByaXYtPm1lbW9yeV9oYW5kbGUpOwotCXBzM19jbG9zZV9odl9kZXZpY2UoZGV2KTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwcml2LT54ZHJfYnVmLCBnZXRfb3JkZXIoWERSX0JVRl9TSVpFKSk7Ci0Ja2ZyZWUocHJpdik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyIHBzM3ZyYW1fZHJpdmVyID0gewotCS5tYXRjaF9pZAk9IFBTM19NQVRDSF9JRF9HUFUsCi0JLm1hdGNoX3N1Yl9pZAk9IFBTM19NQVRDSF9TVUJfSURfR1BVX1JBTURJU0ssCi0JLmNvcmUubmFtZQk9IERFVklDRV9OQU1FLAotCS5jb3JlLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQk9IHBzM3ZyYW1fcHJvYmUsCi0JLnJlbW92ZQkJPSBwczN2cmFtX3NodXRkb3duLAotCS5zaHV0ZG93bgk9IHBzM3ZyYW1fc2h1dGRvd24sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwczN2cmFtX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcHMzX3N5c3RlbV9idXNfZHJpdmVyX3JlZ2lzdGVyKCZwczN2cmFtX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwczN2cmFtX2V4aXQodm9pZCkKLXsKLQlwczNfc3lzdGVtX2J1c19kcml2ZXJfdW5yZWdpc3RlcigmcHMzdnJhbV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChwczN2cmFtX2luaXQpOwotbW9kdWxlX2V4aXQocHMzdnJhbV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmltIFBhcmlzIDxqaW1AanRhbi5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBkcml2ZXIgZm9yIFBTMyB2aWRlbyBSQU0iKTsKLU1PRFVMRV9BTElBUyhQUzNfTU9EVUxFX0FMSUFTX0dQVV9SQU1ESVNLKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYwppbmRleCBhNDI1ZDA5Li4wMDI0OGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jCkBAIC0yNjcsMjIgKzI2NywyOCBAQAogCWlmICgqKHN6bGVuZ3RoKSAhPSAnKycpIHsKIAkJZGV2bGVuZ3RoID0gc2ltcGxlX3N0cnRvdWwoc3psZW5ndGgsICZidWZmZXIsIDApOwogCQlkZXZsZW5ndGggPSBoYW5kbGVfdW5pdChkZXZsZW5ndGgsIGJ1ZmZlcikgLSBkZXZzdGFydDsKKwkJaWYgKGRldmxlbmd0aCA8IGRldnN0YXJ0KQorCQkJZ290byBlcnJfb3V0OworCisJCWRldmxlbmd0aCAtPSBkZXZzdGFydDsKIAl9IGVsc2UgewogCQlkZXZsZW5ndGggPSBzaW1wbGVfc3RydG91bChzemxlbmd0aCArIDEsICZidWZmZXIsIDApOwogCQlkZXZsZW5ndGggPSBoYW5kbGVfdW5pdChkZXZsZW5ndGgsIGJ1ZmZlcik7CiAJfQogCVQoInNscmFtOiBkZXZuYW1lPSVzLCBkZXZzdGFydD0weCVseCwgZGV2bGVuZ3RoPTB4JWx4XG4iLAogCQkJZGV2bmFtZSwgZGV2c3RhcnQsIGRldmxlbmd0aCk7Ci0JaWYgKChkZXZzdGFydCA8IDApIHx8IChkZXZsZW5ndGggPCAwKSB8fCAoZGV2bGVuZ3RoICUgU0xSQU1fQkxLX1NaICE9IDApKSB7Ci0JCUUoInNscmFtOiBJbGxlZ2FsIHN0YXJ0IC8gbGVuZ3RoIHBhcmFtZXRlci5cbiIpOwotCQlyZXR1cm4oLUVJTlZBTCk7Ci0JfQorCWlmIChkZXZsZW5ndGggJSBTTFJBTV9CTEtfU1ogIT0gMCkKKwkJZ290byBlcnJfb3V0OwogCiAJaWYgKChkZXZzdGFydCA9IHJlZ2lzdGVyX2RldmljZShkZXZuYW1lLCBkZXZzdGFydCwgZGV2bGVuZ3RoKSkpewogCQl1bnJlZ2lzdGVyX2RldmljZXMoKTsKIAkJcmV0dXJuKChpbnQpZGV2c3RhcnQpOwogCX0KIAlyZXR1cm4oMCk7CisKK2Vycl9vdXQ6CisJRSgic2xyYW06IElsbGVnYWwgbGVuZ3RoIHBhcmFtZXRlci5cbiIpOworCXJldHVybigtRUlOVkFMKTsKIH0KIAogI2lmbmRlZiBNT0RVTEUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2xwZGRyL0tjb25maWcgYi9kcml2ZXJzL210ZC9scGRkci9LY29uZmlnCmluZGV4IGFjZDRlYTkuLjVhNDAxZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2xwZGRyL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbHBkZHIvS2NvbmZpZwpAQCAtMTIsNiArMTIsNyBAQAogCSAgRERSIG1lbW9yaWVzLCBpbnRlbmRlZCBmb3IgYmF0dGVyeS1vcGVyYXRlZCBzeXN0ZW1zLgogCiBjb25maWcgTVREX1FJTkZPX1BST0JFCisJZGVwZW5kcyBvbiBNVERfTFBERFIKIAl0cmlzdGF0ZSAiRGV0ZWN0IGZsYXNoIGNoaXBzIGJ5IFFJTkZPIHByb2JlIgogCWhlbHAKIAkgICAgRGV2aWNlIEluZm9ybWF0aW9uIGZvciBMUEREUiBjaGlwcyBpcyBvZmZlcmVkIHRocm91Z2ggdGhlIE92ZXJsYXkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAwMjI1Y2JiLi43MjlmODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC00OTEsNyArNDkxLDcgQEAKIAogY29uZmlnIE1URF9CRklOX0FTWU5DCiAJdHJpc3RhdGUgIkJsYWNrZmluIEJGNTMzLVNUQU1QIEZsYXNoIENoaXAgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIEJGSU41MzNfU1RBTVAgJiYgTVREX0NGSQorCWRlcGVuZHMgb24gQkZJTjUzM19TVEFNUCAmJiBNVERfQ0ZJICYmIE1URF9DT01QTEVYX01BUFBJTkdTCiAJc2VsZWN0IE1URF9QQVJUSVRJT05TCiAJZGVmYXVsdCB5CiAJaGVscApAQCAtNTUxLDUgKzU1MSwxNSBAQAogCiAJICBUaGlzIHNlbGVjdGlvbiBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIG1hcF9yYW0gZHJpdmVyLgogCi1lbmRtZW51Citjb25maWcgTVREX1ZNVQorCXRyaXN0YXRlICJNYXAgZHJpdmVyIGZvciBEcmVhbWNhc3QgVk1VIgorCWRlcGVuZHMgb24gTUFQTEUKKwloZWxwCisJICBUaGlzIGRyaXZlciBlbmFibGVzIGFjY2VzcyB0byB0aGUgRHJlYW1jYXN0IFZpc3VhbCBNZW1vcnkgVW5pdCAoVk1VKS4KIAorCSAgTW9zdCBEcmVhbWNhc3QgdXNlcnMgd2lsbCB3YW50IHRvIHNheSBZIGhlcmUuCisKKwkgIFRvIGJ1aWxkIHRoaXMgYXMgYSBtb2R1bGUgc2VsZWN0IE0gaGVyZSwgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZAorCSAgdm11LWZsYXNoLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCA2ZDliYTM1Li4yNmIyOGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTYxLDMgKzYxLDQgQEAKIG9iai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19NVERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9CRklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfVk1VKQkJKz0gdm11LWZsYXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYmZpbi1hc3luYy1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9iZmluLWFzeW5jLWZsYXNoLmMKaW5kZXggNmZlYzg2YS4uNTc2NjExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9iZmluLWFzeW5jLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9iZmluLWFzeW5jLWZsYXNoLmMKQEAgLTE1MiwxNCArMTUyLDE4IEBACiAKIAlpZiAoZ3Bpb19yZXF1ZXN0KHN0YXRlLT5lbmV0X2ZsYXNoX3BpbiwgRFJJVkVSX05BTUUpKSB7CiAJCXByX2RldmluaXQoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogRmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyAlZFxuIiwgc3RhdGUtPmVuZXRfZmxhc2hfcGluKTsKKwkJa2ZyZWUoc3RhdGUpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RhdGUtPmVuZXRfZmxhc2hfcGluLCAxKTsKIAogCXByX2RldmluaXQoS0VSTl9OT1RJQ0UgRFJJVkVSX05BTUUgIjogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzXG4iLCBzdGF0ZS0+bWFwLmJhbmt3aWR0aCAqIDgpOwogCXN0YXRlLT5tdGQgPSBkb19tYXBfcHJvYmUobWVtb3J5LT5uYW1lLCAmc3RhdGUtPm1hcCk7Ci0JaWYgKCFzdGF0ZS0+bXRkKQorCWlmICghc3RhdGUtPm10ZCkgeworCQlncGlvX2ZyZWUoc3RhdGUtPmVuZXRfZmxhc2hfcGluKTsKKwkJa2ZyZWUoc3RhdGUpOwogCQlyZXR1cm4gLUVOWElPOworCX0KIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXJldCA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKHN0YXRlLT5tdGQsIHBhcnRfcHJvYmVfdHlwZXMsICZwZGF0YS0+cGFydHMsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9jazgwNHhyb20uYyBiL2RyaXZlcnMvbXRkL21hcHMvY2s4MDR4cm9tLmMKaW5kZXggNWY3YTI0NS4uNDI0ZjE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jazgwNHhyb20uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2NrODA0eHJvbS5jCkBAIC0zNDIsOSArMzQyLDkgQEAKIAl7IDAsIH0KIH07CiAKKyNpZiAwCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2s4MDR4cm9tX3BjaV90YmwpOwogCi0jaWYgMAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNrODA0eHJvbV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJTU9EX05BTUUsCiAJLmlkX3RhYmxlID0JY2s4MDR4cm9tX3BjaV90YmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCmluZGV4IDg3NzQzNjYuLjIyOTcxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCkBAIC0yOSw2ICsyOSw3IEBACiAJc3RydWN0IG1hcF9pbmZvCQltYXBbTUFYX1JFU09VUkNFU107CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaW50CQkJbnJfcGFydHM7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOwogI2VuZGlmCiB9OwogCkBAIC00NSwyNSArNDYsMjkgQEAKIAogCXBoeXNtYXBfZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLSNpZmRlZiBDT05GSUdfTVREX0NPTkNBVAotCWlmIChpbmZvLT5jbXRkICE9IGluZm8tPm10ZFswXSkgeworCWlmIChpbmZvLT5jbXRkKSB7CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJCWlmIChpbmZvLT5ucl9wYXJ0cyB8fCBwaHlzbWFwX2RhdGEtPm5yX3BhcnRzKQorCQkJZGVsX210ZF9wYXJ0aXRpb25zKGluZm8tPmNtdGQpOworCQllbHNlCisJCQlkZWxfbXRkX2RldmljZShpbmZvLT5jbXRkKTsKKyNlbHNlCiAJCWRlbF9tdGRfZGV2aWNlKGluZm8tPmNtdGQpOwotCQltdGRfY29uY2F0X2Rlc3Ryb3koaW5mby0+Y210ZCk7CisjZW5kaWYKIAl9CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJaWYgKGluZm8tPm5yX3BhcnRzKQorCQlrZnJlZShpbmZvLT5wYXJ0cyk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVERfQ09OQ0FUCisJaWYgKGluZm8tPmNtdGQgIT0gaW5mby0+bXRkWzBdKQorCQltdGRfY29uY2F0X2Rlc3Ryb3koaW5mby0+Y210ZCk7CiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVTT1VSQ0VTOyBpKyspIHsKLQkJaWYgKGluZm8tPm10ZFtpXSAhPSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JCQlpZiAoaW5mby0+bnJfcGFydHMgfHwgcGh5c21hcF9kYXRhLT5ucl9wYXJ0cykKLQkJCQlkZWxfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkW2ldKTsKLQkJCWVsc2UKLQkJCQlkZWxfbXRkX2RldmljZShpbmZvLT5tdGRbaV0pOwotI2Vsc2UKLQkJCWRlbF9tdGRfZGV2aWNlKGluZm8tPm10ZFtpXSk7Ci0jZW5kaWYKKwkJaWYgKGluZm8tPm10ZFtpXSAhPSBOVUxMKQogCQkJbWFwX2Rlc3Ryb3koaW5mby0+bXRkW2ldKTsKLQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTg2LDkgKzkxLDYgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAlpbnQgZGV2aWNlc19mb3VuZCA9IDA7Ci0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotI2VuZGlmCiAKIAlwaHlzbWFwX2RhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmIChwaHlzbWFwX2RhdGEgPT0gTlVMTCkKQEAgLTE2NywxMCArMTY5LDExIEBACiAJCWdvdG8gZXJyX291dDsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotCWVyciA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGluZm8tPmNtdGQsIHBhcnRfcHJvYmVfdHlwZXMsICZwYXJ0cywgMCk7CisJZXJyID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoaW5mby0+Y210ZCwgcGFydF9wcm9iZV90eXBlcywKKwkJCQkmaW5mby0+cGFydHMsIDApOwogCWlmIChlcnIgPiAwKSB7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhpbmZvLT5jbXRkLCBwYXJ0cywgZXJyKTsKLQkJa2ZyZWUocGFydHMpOworCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+Y210ZCwgaW5mby0+cGFydHMsIGVycik7CisJCWluZm8tPm5yX3BhcnRzID0gZXJyOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCmluZGV4IDc3MTEzOWMuLmU5MDI2Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwpAQCAtNDEsOSArNDEsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAogCi1zdGF0aWMgaW50IF9faW5pdCBweGEyeHhfZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpmbGFzaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CkBAIC0xMTQsMTUgKzExMywxNSBAQAogCQlhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaWYgKGluZm8tPm5yX3BhcnRzKQpAQCAtMTQxLDkgKzE0MCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoaW5mby0+bXRkICYmIGluZm8tPm10ZC0+c3VzcGVuZCkKQEAgLTE1MSwxNyArMTUwLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZmxhc2hfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvLT5tdGQgJiYgaW5mby0+bXRkLT5yZXN1bWUpCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgdm9pZCBweGEyeHhfZmxhc2hfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcHhhMnh4X2ZsYXNoX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8gJiYgaW5mby0+bXRkLT5zdXNwZW5kKGluZm8tPm10ZCkgPT0gMCkKIAkJaW5mby0+bXRkLT5yZXN1bWUoaW5mby0+bXRkKTsKQEAgLTE3MiwxMSArMTcxLDEzIEBACiAjZGVmaW5lIHB4YTJ4eF9mbGFzaF9zaHV0ZG93biBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YTJ4eF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1mbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfZmxhc2hfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJweGEyeHgtZmxhc2giLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gcHhhMnh4X2ZsYXNoX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3AocHhhMnh4X2ZsYXNoX3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChweGEyeHhfZmxhc2hfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHB4YTJ4eF9mbGFzaF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X2ZsYXNoX3Jlc3VtZSwKIAkuc2h1dGRvd24JPSBweGEyeHhfZmxhc2hfc2h1dGRvd24sCkBAIC0xODQsMTIgKzE4NSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3B4YTJ4eF9mbGFzaCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9weGEyeHhfZmxhc2godm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpbml0X3B4YTJ4eF9mbGFzaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjczMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYwpAQCAtMCwwICsxLDgzMiBAQAorLyogdm11LWZsYXNoLmMKKyAqIERyaXZlciBmb3IgU0VHQSBEcmVhbWNhc3QgVmlzdWFsIE1lbW9yeSBVbml0CisgKgorICogQ29weXJpZ2h0IChjKSBBZHJpYW4gTWNNZW5hbWluIDIwMDIgLSAyMDA5CisgKiBDb3B5cmlnaHQgKGMpIFBhdWwgTXVuZHQgMjAwMQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21hcGxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKworc3RydWN0IHZtdV9jYWNoZSB7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOwkJLyogQ2FjaGUgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2s7CQkvKiBXaGljaCBibG9jayB3YXMgY2FjaGVkICovCisJdW5zaWduZWQgbG9uZyBqaWZmaWVzX2F0YzsJLyogV2hlbiB3YXMgaXQgY2FjaGVkPyAqLworCWludCB2YWxpZDsKK307CisKK3N0cnVjdCBtZGV2X3BhcnQgeworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJaW50IHBhcnRpdGlvbjsKK307CisKK3N0cnVjdCB2bXVwYXJ0IHsKKwl1MTYgdXNlcl9ibG9ja3M7CisJdTE2IHJvb3RfYmxvY2s7CisJdTE2IG51bWJsb2NrczsKKwljaGFyICpuYW1lOworCXN0cnVjdCB2bXVfY2FjaGUgKnBjYWNoZTsKK307CisKK3N0cnVjdCBtZW1jYXJkIHsKKwl1MTYgdGVtcEE7CisJdTE2IHRlbXBCOworCXUzMiBwYXJ0aXRpb25zOworCXUzMiBibG9ja2xlbjsKKwl1MzIgd3JpdGVjbnQ7CisJdTMyIHJlYWRjbnQ7CisJdTMyIHJlbW92ZWFibGU7CisJaW50IHBhcnRpdGlvbjsKKwlpbnQgcmVhZDsKKwl1bnNpZ25lZCBjaGFyICpibG9ja3JlYWQ7CisJc3RydWN0IHZtdXBhcnQgKnBhcnRzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworfTsKKworc3RydWN0IHZtdV9ibG9jayB7CisJdW5zaWduZWQgaW50IG51bTsgLyogYmxvY2sgbnVtYmVyICovCisJdW5zaWduZWQgaW50IG9mczsgLyogYmxvY2sgb2Zmc2V0ICovCit9OworCitzdGF0aWMgc3RydWN0IHZtdV9ibG9jayAqb2ZzX3RvX2Jsb2NrKHVuc2lnbmVkIGxvbmcgc3JjX29mcywKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhcnRpdGlvbikKK3sKKwlzdHJ1Y3Qgdm11X2Jsb2NrICp2YmxvY2s7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlpbnQgbnVtOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKworCWlmIChzcmNfb2ZzID49IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ubnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4pCisJCWdvdG8gZmFpbGVkOworCisJbnVtID0gc3JjX29mcyAvIGNhcmQtPmJsb2NrbGVuOworCWlmIChudW0gPiBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrcykKKwkJZ290byBmYWlsZWQ7CisKKwl2YmxvY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm11X2Jsb2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YmxvY2spCisJCWdvdG8gZmFpbGVkOworCisJdmJsb2NrLT5udW0gPSBudW07CisJdmJsb2NrLT5vZnMgPSBzcmNfb2ZzICUgY2FyZC0+YmxvY2tsZW47CisJcmV0dXJuIHZibG9jazsKKworZmFpbGVkOgorCXJldHVybiBOVUxMOworfQorCisvKiBNYXBsZSBidXMgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHJlYWRzICovCitzdGF0aWMgdm9pZCB2bXVfYmxvY2tyZWFkKHN0cnVjdCBtYXBsZXEgKm1xKQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisKKwltZGV2ID0gbXEtPmRldjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJLyogY29weSB0aGUgcmVhZCBpbiBkYXRhICovCisKKwlpZiAodW5saWtlbHkoIWNhcmQtPmJsb2NrcmVhZCkpCisJCXJldHVybjsKKworCW1lbWNweShjYXJkLT5ibG9ja3JlYWQsIG1xLT5yZWN2YnVmLT5idWYgKyAxMiwKKwkJY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCk7CisKK30KKworLyogSW50ZXJmYWNlIHdpdGggbWFwbGUgYnVzIHRvIHJlYWQgYmxvY2tzCisgKiBjYWNoaW5nIHRoZSByZXN1bHRzIHNvIHRoYXQgb3RoZXIgcGFydHMKKyAqIG9mIHRoZSBkcml2ZXIgY2FuIGFjY2VzcyBibG9jayByZWFkcyAqLworc3RhdGljIGludCBtYXBsZV92bXVfcmVhZF9ibG9jayh1bnNpZ25lZCBpbnQgbnVtLCB1bnNpZ25lZCBjaGFyICpidWYsCisJc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlpbnQgcGFydGl0aW9uLCBlcnJvciA9IDAsIHgsIHdhaXQ7CisJdW5zaWduZWQgY2hhciAqYmxvY2tyZWFkID0gTlVMTDsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7CisJX19iZTMyIHNlbmRidWY7CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJcGNhY2hlID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5wY2FjaGU7CisJcGNhY2hlLT52YWxpZCA9IDA7CisKKwkvKiBwcmVwYXJlIHRoZSBjYWNoZSBmb3IgdGhpcyBibG9jayAqLworCWlmICghcGNhY2hlLT5idWZmZXIpIHsKKwkJcGNhY2hlLT5idWZmZXIgPSBrbWFsbG9jKGNhcmQtPmJsb2NrbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwY2FjaGUtPmJ1ZmZlcikgeworCQkJZGV2X2VycigmbWRldi0+ZGV2LCAiVk1VIGF0ICglZCwgJWQpIC0gcmVhZCBmYWlscyBkdWUiCisJCQkJIiB0byBsYWNrIG9mIG1lbW9yeVxuIiwgbWRldi0+cG9ydCwKKwkJCQltZGV2LT51bml0KTsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0QjsKKwkJfQorCX0KKworCS8qCisJKiBSZWFkcyBtYXkgYmUgcGhhc2VkIC0gYWdhaW4gdGhlIGhhcmR3YXJlIHNwZWMKKwkqIHN1cHBvcnRzIHRoaXMgLSB0aG91Z2ggbWF5IG5vdCBiZSBhbnkgZGV2aWNlcyBpbgorCSogdGhlIHdpbGQgdGhhdCBpbXBsZW1lbnQgaXQsIGJ1dCB3ZSB3aWxsIGhlcmUKKwkqLworCWZvciAoeCA9IDA7IHggPCBjYXJkLT5yZWFkY250OyB4KyspIHsKKwkJc2VuZGJ1ZiA9IGNwdV90b19iZTMyKHBhcnRpdGlvbiA8PCAyNCB8IHggPDwgMTYgfCBudW0pOworCisJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCwgSFopOworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiVk1VIGF0ICglZCwgJWQpIgorCQkJCQkiIGlzIGJ1c3lcbiIsIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQkJCWVycm9yID0gLUVBR0FJTjsKKwkJCQlnb3RvIG91dEI7CisJCQl9CisJCX0KKworCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKwkJYmxvY2tyZWFkID0ga21hbGxvYyhjYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFibG9ja3JlYWQpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJZ290byBvdXRCOworCQl9CisJCWNhcmQtPmJsb2NrcmVhZCA9IGJsb2NrcmVhZDsKKworCQltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIHZtdV9ibG9ja3JlYWQsIDAsCisJCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCQllcnJvciA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgTUFQTEVfRlVOQ19NRU1DQVJELAorCQkJCU1BUExFX0NPTU1BTkRfQlJFQUQsIDIsICZzZW5kYnVmKTsKKwkJLyogVmVyeSBsb25nIHRpbWVvdXRzIHNlZW0gdG8gYmUgbmVlZGVkIHdoZW4gYm94IGlzIHN0cmVzc2VkICovCisJCXdhaXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwIHx8CisJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMiksIEhaICogMyk7CisJCS8qCisJCSogTVREIGxheWVyIGRvZXMgbm90IGhhbmRsZSBob3RwbHVnZ2luZyB3ZWxsCisJCSogc28gaGF2ZSB0byByZXR1cm4gZXJyb3JzIHdoZW4gVk1VIGlzIHVucGx1Z2dlZAorCQkqIGluIHRoZSBtaWRkbGUgb2YgYSByZWFkIChidXN5ID09IDIpCisJCSovCisJCWlmIChlcnJvciB8fCBhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMikgeworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAyKQorCQkJCWVycm9yID0gLUVOWElPOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQljYXJkLT5ibG9ja3JlYWQgPSBOVUxMOworCQkJZ290byBvdXRBOworCQl9CisJCWlmICh3YWl0ID09IDAgfHwgd2FpdCA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJCWNhcmQtPmJsb2NrcmVhZCA9IE5VTEw7CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWVycm9yID0gLUVJTzsKKwkJCWxpc3RfZGVsX2luaXQoJihtZGV2LT5tcS0+bGlzdCkpOworCQkJa2ZyZWUobWRldi0+bXEtPnNlbmRidWYpOworCQkJbWRldi0+bXEtPnNlbmRidWYgPSBOVUxMOworCQkJaWYgKHdhaXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCQkJZGV2X3dhcm4oJm1kZXYtPmRldiwgIlZNVSByZWFkIG9uICglZCwgJWQpIgorCQkJCQkiIGludGVycnVwdGVkIG9uIGJsb2NrIDB4JVhcbiIsCisJCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIG51bSk7CisJCQl9IGVsc2UKKwkJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJWTVUgcmVhZCBvbiAoJWQsICVkKSIKKwkJCQkJIiB0aW1lZCBvdXQgb24gYmxvY2sgMHglWFxuIiwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgbnVtKTsKKwkJCWdvdG8gb3V0QTsKKwkJfQorCisJCW1lbWNweShidWYgKyAoY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCkgKiB4LCBibG9ja3JlYWQsCisJCQljYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250KTsKKworCQltZW1jcHkocGNhY2hlLT5idWZmZXIgKyAoY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCkgKiB4LAorCQkJY2FyZC0+YmxvY2tyZWFkLCBjYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250KTsKKwkJY2FyZC0+YmxvY2tyZWFkID0gTlVMTDsKKwkJcGNhY2hlLT5ibG9jayA9IG51bTsKKwkJcGNhY2hlLT5qaWZmaWVzX2F0YyA9IGppZmZpZXM7CisJCXBjYWNoZS0+dmFsaWQgPSAxOworCQlrZnJlZShibG9ja3JlYWQpOworCX0KKworCXJldHVybiBlcnJvcjsKKworb3V0QToKKwlrZnJlZShibG9ja3JlYWQpOworb3V0QjoKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIGNvbW11bmljYXRlIHdpdGggbWFwbGUgYnVzIGZvciBwaGFzZWQgd3JpdGluZyAqLworc3RhdGljIGludCBtYXBsZV92bXVfd3JpdGVfYmxvY2sodW5zaWduZWQgaW50IG51bSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCXN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJaW50IHBhcnRpdGlvbiwgZXJyb3IsIGxvY2tpbmcsIHgsIHBoYXNlbGVuLCB3YWl0OworCV9fYmUzMiAqc2VuZGJ1ZjsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwlwYXJ0aXRpb24gPSBtcGFydC0+cGFydGl0aW9uOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKworCXBoYXNlbGVuID0gY2FyZC0+YmxvY2tsZW4vY2FyZC0+d3JpdGVjbnQ7CisKKwlzZW5kYnVmID0ga21hbGxvYyhwaGFzZWxlbiArIDQsIEdGUF9LRVJORUwpOworCWlmICghc2VuZGJ1ZikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9ub3NlbmRidWY7CisJfQorCWZvciAoeCA9IDA7IHggPCBjYXJkLT53cml0ZWNudDsgeCsrKSB7CisJCXNlbmRidWZbMF0gPSBjcHVfdG9fYmUzMihwYXJ0aXRpb24gPDwgMjQgfCB4IDw8IDE2IHwgbnVtKTsKKwkJbWVtY3B5KCZzZW5kYnVmWzFdLCBidWYgKyBwaGFzZWxlbiAqIHgsIHBoYXNlbGVuKTsKKwkJLyogd2FpdCB1bnRpbCB0aGUgZGV2aWNlIGlzIG5vdCBidXN5IGRvaW5nIHNvbWV0aGluZyBlbHNlCisJCSogb3IgMSBzZWNvbmQgLSB3aGljaCBldmVyIGlzIGxvbmdlciAqLworCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaKTsKKwkJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJCWVycm9yID0gLUVCVVNZOworCQkJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgIlZNVSB3cml0ZSBhdCAoJWQsICVkKSIKKwkJCQkJImZhaWxlZCAtIGRldmljZSBpcyBidXN5XG4iLAorCQkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCQlnb3RvIGZhaWxfbm9sb2NrOworCQkJfQorCQl9CisJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDEpOworCisJCWxvY2tpbmcgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsIE1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkJCU1BUExFX0NPTU1BTkRfQldSSVRFLCBwaGFzZWxlbiAvIDQgKyAyLCBzZW5kYnVmKTsKKwkJd2FpdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCwgSFovMTApOworCQlpZiAobG9ja2luZykgeworCQkJZXJyb3IgPSAtRUlPOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQlnb3RvIGZhaWxfbm9sb2NrOworCQl9CisJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMikgeworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCX0gZWxzZSBpZiAod2FpdCA9PSAwIHx8IHdhaXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCQllcnJvciA9IC1FSU87CisJCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiV3JpdGUgYXQgKCVkLCAlZCkgb2YgYmxvY2siCisJCQkJIiAweCVYIGF0IHBoYXNlICVkIGZhaWxlZDogY291bGQgbm90IgorCQkJCSIgY29tbXVuaWNhdGUgd2l0aCBWTVUiLCBtZGV2LT5wb3J0LAorCQkJCW1kZXYtPnVuaXQsIG51bSwgeCk7CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWtmcmVlKG1kZXYtPm1xLT5zZW5kYnVmKTsKKwkJCW1kZXYtPm1xLT5zZW5kYnVmID0gTlVMTDsKKwkJCWxpc3RfZGVsX2luaXQoJihtZGV2LT5tcS0+bGlzdCkpOworCQkJZ290byBmYWlsX25vbG9jazsKKwkJfQorCX0KKwlrZnJlZShzZW5kYnVmKTsKKworCXJldHVybiBjYXJkLT5ibG9ja2xlbjsKKworZmFpbF9ub2xvY2s6CisJa2ZyZWUoc2VuZGJ1Zik7CitmYWlsX25vc2VuZGJ1ZjoKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJWTVUgKCVkLCAlZCk6IHdyaXRlIGZhaWxlZFxuIiwgbWRldi0+cG9ydCwKKwkJbWRldi0+dW5pdCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKiBtdGQgZnVuY3Rpb24gdG8gc2ltdWxhdGUgcmVhZGluZyBieXRlIGJ5IGJ5dGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHZtdV9mbGFzaF9yZWFkX2NoYXIodW5zaWduZWQgbG9uZyBvZnMsIGludCAqcmV0dmFsLAorCXN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCB2bXVfYmxvY2sgKnZibG9jazsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgcmV0OworCWludCBwYXJ0aXRpb24sIGVycm9yOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCSpyZXR2YWwgPSAgMDsKKworCWJ1ZiA9IGttYWxsb2MoY2FyZC0+YmxvY2tsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCSpyZXR2YWwgPSAxOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwl2YmxvY2sgPSBvZnNfdG9fYmxvY2sob2ZzLCBtdGQsIHBhcnRpdGlvbik7CisJaWYgKCF2YmxvY2spIHsKKwkJKnJldHZhbCA9IDM7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2J1ZjsKKwl9CisKKwllcnJvciA9IG1hcGxlX3ZtdV9yZWFkX2Jsb2NrKHZibG9jay0+bnVtLCBidWYsIG10ZCk7CisJaWYgKGVycm9yKSB7CisJCXJldCA9IGVycm9yOworCQkqcmV0dmFsID0gMjsKKwkJZ290byBvdXRfdmJsb2NrOworCX0KKworCXJldCA9IGJ1Zlt2YmxvY2stPm9mc107CisKK291dF92YmxvY2s6CisJa2ZyZWUodmJsb2NrKTsKK291dF9idWY6CisJa2ZyZWUoYnVmKTsKK2ZpbmlzaDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBtdGQgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIHJlYWQgZmxhc2ggKi8KK3N0YXRpYyBpbnQgdm11X2ZsYXNoX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCXNpemVfdCAqcmV0bGVuLCAgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7CisJc3RydWN0IHZtdV9ibG9jayAqdmJsb2NrOworCWludCBpbmRleCA9IDAsIHJldHZhbCwgcGFydGl0aW9uLCBsZWZ0b3ZlciwgbnVtYmxvY2tzOworCXVuc2lnbmVkIGNoYXIgY3g7CisKKwlpZiAobGVuIDwgMSkKKwkJcmV0dXJuIC1FSU87CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwludW1ibG9ja3MgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrczsKKwlpZiAoZnJvbSArIGxlbiA+IG51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuKQorCQlsZW4gPSBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbiAtIGZyb207CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTzsKKwkvKiBIYXZlIHdlIGNhY2hlZCB0aGlzIGJpdCBhbHJlYWR5PyAqLworCXBjYWNoZSA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ucGNhY2hlOworCWRvIHsKKwkJdmJsb2NrID0gIG9mc190b19ibG9jayhmcm9tICsgaW5kZXgsIG10ZCwgcGFydGl0aW9uKTsKKwkJaWYgKCF2YmxvY2spCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogSGF2ZSB3ZSBjYWNoZWQgdGhpcyBhbmQgaXMgdGhlIGNhY2hlIHZhbGlkIGFuZCB0aW1lbHk/ICovCisJCWlmIChwY2FjaGUtPnZhbGlkICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCBwY2FjaGUtPmppZmZpZXNfYXRjICsgSFopICYmCisJCQkocGNhY2hlLT5ibG9jayA9PSB2YmxvY2stPm51bSkpIHsKKwkJCS8qIHdlIGhhdmUgY2FjaGVkIGl0LCBzbyBkbyBuZWNlc3NhcnkgY29weWluZyAqLworCQkJbGVmdG92ZXIgPSBjYXJkLT5ibG9ja2xlbiAtIHZibG9jay0+b2ZzOworCQkJaWYgKHZibG9jay0+b2ZzICsgbGVuIC0gaW5kZXggPCBjYXJkLT5ibG9ja2xlbikgeworCQkJCS8qIG9ubHkgYSBiaXQgb2YgdGhpcyBibG9jayB0byBjb3B5ICovCisJCQkJbWVtY3B5KGJ1ZiArIGluZGV4LAorCQkJCQlwY2FjaGUtPmJ1ZmZlciArIHZibG9jay0+b2ZzLAorCQkJCQlsZW4gLSBpbmRleCk7CisJCQkJaW5kZXggPSBsZW47CisJCQl9IGVsc2UgeworCQkJCS8qIG90aGVyd2lzZSBjb3B5IHJlbWFpbmRlciBvZiB3aG9sZSBibG9jayAqLworCQkJCW1lbWNweShidWYgKyBpbmRleCwgcGNhY2hlLT5idWZmZXIgKworCQkJCQl2YmxvY2stPm9mcywgbGVmdG92ZXIpOworCQkJCWluZGV4ICs9IGxlZnRvdmVyOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSogTm90IGNhY2hlZCBzbyByZWFkIG9uZSBieXRlIC0KKwkJCSogYnV0IGNhY2hlIHRoZSByZXN0IG9mIHRoZSBibG9jaworCQkJKi8KKwkJCWN4ID0gdm11X2ZsYXNoX3JlYWRfY2hhcihmcm9tICsgaW5kZXgsICZyZXR2YWwsIG10ZCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJKnJldGxlbiA9IGluZGV4OworCQkJCWtmcmVlKHZibG9jayk7CisJCQkJcmV0dXJuIGN4OworCQkJfQorCQkJbWVtc2V0KGJ1ZiArIGluZGV4LCBjeCwgMSk7CisJCQlpbmRleCsrOworCQl9CisJCWtmcmVlKHZibG9jayk7CisJfSB3aGlsZSAobGVuID4gaW5kZXgpOworCSpyZXRsZW4gPSBpbmRleDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtdV9mbGFzaF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAorCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCWludCBpbmRleCA9IDAsIHBhcnRpdGlvbiwgZXJyb3IgPSAwLCBudW1ibG9ja3M7CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCXN0cnVjdCB2bXVfYmxvY2sgKnZibG9jazsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwkvKiBzaW1wbGUgc2FuaXR5IGNoZWNrcyAqLworCWlmIChsZW4gPCAxKSB7CisJCWVycm9yID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCW51bWJsb2NrcyA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ubnVtYmxvY2tzOworCWlmICh0byArIGxlbiA+IG51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuKQorCQlsZW4gPSBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbiAtIHRvOworCWlmIChsZW4gPT0gMCkgeworCQllcnJvciA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKworCXZibG9jayA9IG9mc190b19ibG9jayh0bywgbXRkLCBwYXJ0aXRpb24pOworCWlmICghdmJsb2NrKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJYnVmZmVyID0ga21hbGxvYyhjYXJkLT5ibG9ja2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfYnVmZmVyOworCX0KKworCWRvIHsKKwkJLyogUmVhZCBpbiB0aGUgYmxvY2sgd2UgYXJlIHRvIHdyaXRlIHRvICovCisJCWVycm9yID0gbWFwbGVfdm11X3JlYWRfYmxvY2sodmJsb2NrLT5udW0sIGJ1ZmZlciwgbXRkKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBmYWlsX2lvOworCisJCWRvIHsKKwkJCWJ1ZmZlclt2YmxvY2stPm9mc10gPSBidWZbaW5kZXhdOworCQkJdmJsb2NrLT5vZnMrKzsKKwkJCWluZGV4Kys7CisJCQlpZiAoaW5kZXggPj0gbGVuKQorCQkJCWJyZWFrOworCQl9IHdoaWxlICh2YmxvY2stPm9mcyA8IGNhcmQtPmJsb2NrbGVuKTsKKworCQkvKiB3cml0ZSBvdXQgbmV3IGJ1ZmZlciAqLworCQllcnJvciA9IG1hcGxlX3ZtdV93cml0ZV9ibG9jayh2YmxvY2stPm51bSwgYnVmZmVyLCBtdGQpOworCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZSAqLworCQlwY2FjaGUgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLnBjYWNoZTsKKwkJcGNhY2hlLT52YWxpZCA9IDA7CisKKwkJaWYgKGVycm9yICE9IGNhcmQtPmJsb2NrbGVuKQorCQkJZ290byBmYWlsX2lvOworCisJCXZibG9jay0+bnVtKys7CisJCXZibG9jay0+b2ZzID0gMDsKKwl9IHdoaWxlIChsZW4gPiBpbmRleCk7CisKKwlrZnJlZShidWZmZXIpOworCSpyZXRsZW4gPSBpbmRleDsKKwlrZnJlZSh2YmxvY2spOworCXJldHVybiAwOworCitmYWlsX2lvOgorCWtmcmVlKGJ1ZmZlcik7CitmYWlsX2J1ZmZlcjoKKwlrZnJlZSh2YmxvY2spOworZmFpbGVkOgorCWRldl9lcnIoJm1kZXYtPmRldiwgIlZNVSB3cml0ZSBmYWlsaW5nIHdpdGggZXJyb3IgJWRcbiIsIGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIHZtdV9mbGFzaF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCS8qIERvIG5vdGhpbmcgaGVyZSAqLworfQorCisvKiBNYXBsZSBidXMgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVjdXJzaXZlbHkgcXVlcnkgaGFyZHdhcmUgZGV0YWlscyAqLworc3RhdGljIHZvaWQgdm11X3F1ZXJ5YmxvY2tzKHN0cnVjdCBtYXBsZXEgKm1xKQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJdW5zaWduZWQgc2hvcnQgKnJlczsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlfX2JlMzIgcGFydG51bTsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IG10ZF9pbmZvICptdGRfY3VyOworCXN0cnVjdCB2bXVwYXJ0ICpwYXJ0X2N1cjsKKwlpbnQgZXJyb3I7CisKKwltZGV2ID0gbXEtPmRldjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJcmVzID0gKHVuc2lnbmVkIHNob3J0ICopIChtcS0+cmVjdmJ1Zi0+YnVmKTsKKwljYXJkLT50ZW1wQSA9IHJlc1sxMl07CisJY2FyZC0+dGVtcEIgPSByZXNbNl07CisKKwlkZXZfaW5mbygmbWRldi0+ZGV2LCAiVk1VIGRldmljZSBhdCBwYXJ0aXRpb24gJWQgaGFzICVkIHVzZXIgIgorCQkiYmxvY2tzIHdpdGggYSByb290IGJsb2NrIGF0ICVkXG4iLCBjYXJkLT5wYXJ0aXRpb24sCisJCWNhcmQtPnRlbXBBLCBjYXJkLT50ZW1wQik7CisKKwlwYXJ0X2N1ciA9ICZjYXJkLT5wYXJ0c1tjYXJkLT5wYXJ0aXRpb25dOworCXBhcnRfY3VyLT51c2VyX2Jsb2NrcyA9IGNhcmQtPnRlbXBBOworCXBhcnRfY3VyLT5yb290X2Jsb2NrID0gY2FyZC0+dGVtcEI7CisJcGFydF9jdXItPm51bWJsb2NrcyA9IGNhcmQtPnRlbXBCICsgMTsKKwlwYXJ0X2N1ci0+bmFtZSA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOworCWlmICghcGFydF9jdXItPm5hbWUpCisJCWdvdG8gZmFpbF9uYW1lOworCisJc3ByaW50ZihwYXJ0X2N1ci0+bmFtZSwgInZtdSVkLiVkLiVkIiwKKwkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgY2FyZC0+cGFydGl0aW9uKTsKKwltdGRfY3VyID0gJmNhcmQtPm10ZFtjYXJkLT5wYXJ0aXRpb25dOworCW10ZF9jdXItPm5hbWUgPSBwYXJ0X2N1ci0+bmFtZTsKKwltdGRfY3VyLT50eXBlID0gODsKKwltdGRfY3VyLT5mbGFncyA9IE1URF9XUklURUFCTEV8TVREX05PX0VSQVNFOworCW10ZF9jdXItPnNpemUgPSBwYXJ0X2N1ci0+bnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW47CisJbXRkX2N1ci0+ZXJhc2VzaXplID0gY2FyZC0+YmxvY2tsZW47CisJbXRkX2N1ci0+d3JpdGUgPSB2bXVfZmxhc2hfd3JpdGU7CisJbXRkX2N1ci0+cmVhZCA9IHZtdV9mbGFzaF9yZWFkOworCW10ZF9jdXItPnN5bmMgPSB2bXVfZmxhc2hfc3luYzsKKwltdGRfY3VyLT53cml0ZXNpemUgPSBjYXJkLT5ibG9ja2xlbjsKKworCW1wYXJ0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1kZXZfcGFydCksIEdGUF9LRVJORUwpOworCWlmICghbXBhcnQpCisJCWdvdG8gZmFpbF9tcGFydDsKKworCW1wYXJ0LT5tZGV2ID0gbWRldjsKKwltcGFydC0+cGFydGl0aW9uID0gY2FyZC0+cGFydGl0aW9uOworCW10ZF9jdXItPnByaXYgPSBtcGFydDsKKwltdGRfY3VyLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJcGNhY2hlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtdV9jYWNoZSksIEdGUF9LRVJORUwpOworCWlmICghcGNhY2hlKQorCQlnb3RvIGZhaWxfY2FjaGVfY3JlYXRlOworCXBhcnRfY3VyLT5wY2FjaGUgPSBwY2FjaGU7CisKKwllcnJvciA9IGFkZF9tdGRfZGV2aWNlKG10ZF9jdXIpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX210ZF9yZWdpc3RlcjsKKworCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgTlVMTCwgMCwKKwkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKworCS8qCisJKiBTZXQgdXAgYSByZWN1cnNpdmUgY2FsbCB0byB0aGUgKHByb2JhYmx5IHRoZW9yZXRpY2FsKQorCSogc2Vjb25kIG9yIG1vcmUgcGFydGl0aW9uCisJKi8KKwlpZiAoKytjYXJkLT5wYXJ0aXRpb24gPCBjYXJkLT5wYXJ0aXRpb25zKSB7CisJCXBhcnRudW0gPSBjcHVfdG9fYmUzMihjYXJkLT5wYXJ0aXRpb24gPDwgMjQpOworCQltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIHZtdV9xdWVyeWJsb2NrcywgMCwKKwkJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisJCW1hcGxlX2FkZF9wYWNrZXQobWRldiwgTUFQTEVfRlVOQ19NRU1DQVJELAorCQkJTUFQTEVfQ09NTUFORF9HRVRNSU5GTywgMiwgJnBhcnRudW0pOworCX0KKwlyZXR1cm47CisKK2ZhaWxfbXRkX3JlZ2lzdGVyOgorCWRldl9lcnIoJm1kZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBtYXBsZSBkZXZpY2UgYXQgKCVkLCAlZCkiCisJCSJlcnJvciBpcyAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LCBlcnJvcik7CisJZm9yIChlcnJvciA9IDA7IGVycm9yIDw9IGNhcmQtPnBhcnRpdGlvbjsgZXJyb3IrKykgeworCQlrZnJlZSgoKGNhcmQtPnBhcnRzKVtlcnJvcl0pLnBjYWNoZSk7CisJCSgoY2FyZC0+cGFydHMpW2Vycm9yXSkucGNhY2hlID0gTlVMTDsKKwl9CitmYWlsX2NhY2hlX2NyZWF0ZToKK2ZhaWxfbXBhcnQ6CisJZm9yIChlcnJvciA9IDA7IGVycm9yIDw9IGNhcmQtPnBhcnRpdGlvbjsgZXJyb3IrKykgeworCQlrZnJlZSgoKGNhcmQtPm10ZClbZXJyb3JdKS5wcml2KTsKKwkJKChjYXJkLT5tdGQpW2Vycm9yXSkucHJpdiA9IE5VTEw7CisJfQorCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgTlVMTCwgMCwKKwkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKwlrZnJlZShwYXJ0X2N1ci0+bmFtZSk7CitmYWlsX25hbWU6CisJcmV0dXJuOworfQorCisvKiBIYW5kbGVzIHZlcnkgYmFzaWMgaW5mbyBhYm91dCB0aGUgZmxhc2gsIHF1ZXJpZXMgZm9yIGRldGFpbHMgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHZtdV9jb25uZWN0KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCit7CisJdW5zaWduZWQgbG9uZyB0ZXN0X2ZsYXNoX2RhdGEsIGJhc2ljX2ZsYXNoX2RhdGE7CisJaW50IGMsIGVycm9yOworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXUzMiBwYXJ0bnVtID0gMDsKKworCXRlc3RfZmxhc2hfZGF0YSA9IGJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pOworCS8qIE5lZWQgdG8gY291bnQgaG93IG1hbnkgYml0cyBhcmUgc2V0IC0gdG8gZmluZCBvdXQgd2hpY2gKKwkgKiBmdW5jdGlvbl9kYXRhIGVsZW1lbnQgaGFzIGRldGFpbHMgb2YgdGhlIG1lbW9yeSBjYXJkOgorCSAqIHVzaW5nIEJyaWFuIEtlcm5pZ2hhbidzL1BldGVyIFdlZ25lcidzIG1ldGhvZCAqLworCWZvciAoYyA9IDA7IHRlc3RfZmxhc2hfZGF0YTsgYysrKQorCQl0ZXN0X2ZsYXNoX2RhdGEgJj0gdGVzdF9mbGFzaF9kYXRhIC0gMTsKKworCWJhc2ljX2ZsYXNoX2RhdGEgPSBiZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uX2RhdGFbYyAtIDFdKTsKKworCWNhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQllcnJvciA9IEVOT01FTTsKKwkJZ290byBmYWlsX25vbWVtOworCX0KKworCWNhcmQtPnBhcnRpdGlvbnMgPSAoYmFzaWNfZmxhc2hfZGF0YSA+PiAyNCAmIDB4RkYpICsgMTsKKwljYXJkLT5ibG9ja2xlbiA9ICgoYmFzaWNfZmxhc2hfZGF0YSA+PiAxNiAmIDB4RkYpICsgMSkgPDwgNTsKKwljYXJkLT53cml0ZWNudCA9IGJhc2ljX2ZsYXNoX2RhdGEgPj4gMTIgJiAweEY7CisJY2FyZC0+cmVhZGNudCA9IGJhc2ljX2ZsYXNoX2RhdGEgPj4gOCAmIDB4RjsKKwljYXJkLT5yZW1vdmVhYmxlID0gYmFzaWNfZmxhc2hfZGF0YSA+PiA3ICYgMTsKKworCWNhcmQtPnBhcnRpdGlvbiA9IDA7CisKKwkvKgorCSogTm90IHN1cmUgdGhlcmUgYXJlIGFjdHVhbGx5IGFueSBtdWx0aS1wYXJ0aXRpb24gZGV2aWNlcyBpbiB0aGUKKwkqIHJlYWwgd29ybGQsIGJ1dCB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgdGhlbSwgc28sIHNvIHdpbGwgd2UKKwkqLworCWNhcmQtPnBhcnRzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtdXBhcnQpICogY2FyZC0+cGFydGl0aW9ucywKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5wYXJ0cykgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9wYXJ0aXRpb25zOworCX0KKworCWNhcmQtPm10ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKiBjYXJkLT5wYXJ0aXRpb25zLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPm10ZCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tdGRfaW5mbzsKKwl9CisKKwltYXBsZV9zZXRfZHJ2ZGF0YShtZGV2LCBjYXJkKTsKKworCS8qCisJKiBXZSB3YW50IHRvIHRyYXAgbWVtaW5mbyBub3QgZ2V0IGNvbmQKKwkqIHNvIHNldCBpbnRlcnZhbCB0byB6ZXJvLCBidXQgcmVseSBvbiBtYXBsZSBidXMKKwkqIGRyaXZlciB0byBwYXNzIGJhY2sgdGhlIHJlc3VsdHMgb2YgdGhlIG1lbWluZm8KKwkqLworCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgdm11X3F1ZXJ5YmxvY2tzLCAwLAorCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSBjbGVhciB0byBnbyAqLworCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaKTsKKwkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJWTVUgYXQgKCVkLCAlZCkgaXMgYnVzeVxuIiwKKwkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCWVycm9yID0gLUVBR0FJTjsKKwkJCWdvdG8gZmFpbF9kZXZpY2VfYnVzeTsKKwkJfQorCX0KKworCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDEpOworCisJLyoKKwkqIFNldCB1cCB0aGUgbWluZm8gY2FsbDogdm11X3F1ZXJ5YmxvY2tzIHdpbGwgaGFuZGxlCisJKiB0aGUgaW5mb3JtYXRpb24gcGFzc2VkIGJhY2sKKwkqLworCWVycm9yID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LCBNQVBMRV9GVU5DX01FTUNBUkQsCisJCU1BUExFX0NPTU1BTkRfR0VUTUlORk8sIDIsICZwYXJ0bnVtKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmbWRldi0+ZGV2LCAiQ291bGQgbm90IGxvY2sgVk1VIGF0ICglZCwgJWQpIgorCQkJIiBlcnJvciBpcyAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LCBlcnJvcik7CisJCWdvdG8gZmFpbF9tdGRfaW5mbzsKKwl9CisJcmV0dXJuIDA7CisKK2ZhaWxfZGV2aWNlX2J1c3k6CisJa2ZyZWUoY2FyZC0+bXRkKTsKK2ZhaWxfbXRkX2luZm86CisJa2ZyZWUoY2FyZC0+cGFydHMpOworZmFpbF9wYXJ0aXRpb25zOgorCWtmcmVlKGNhcmQpOworZmFpbF9ub21lbToKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2bXVfZGlzY29ubmVjdChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQoreworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCWludCB4OworCisJbWRldi0+Y2FsbGJhY2sgPSBOVUxMOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+cGFydGl0aW9uczsgeCsrKSB7CisJCW1wYXJ0ID0gKChjYXJkLT5tdGQpW3hdKS5wcml2OworCQltcGFydC0+bWRldiA9IE5VTEw7CisJCWRlbF9tdGRfZGV2aWNlKCYoKGNhcmQtPm10ZClbeF0pKTsKKwkJa2ZyZWUoKChjYXJkLT5wYXJ0cylbeF0pLm5hbWUpOworCX0KKwlrZnJlZShjYXJkLT5wYXJ0cyk7CisJa2ZyZWUoY2FyZC0+bXRkKTsKKwlrZnJlZShjYXJkKTsKK30KKworLyogQ2FsbGJhY2sgdG8gaGFuZGxlIGVjY2VudHJpY2l0aWVzIG9mIGJvdGggbXRkIHN1YnN5c3RlbQorICogYW5kIGdlbmVyYWwgZmxha3luZXNzIG9mIERyZWFtY2FzdCBWTVVzCisgKi8KK3N0YXRpYyBpbnQgdm11X2Nhbl91bmxvYWQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKK3sKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlpbnQgeDsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+cGFydGl0aW9uczsgeCsrKSB7CisJCW10ZCA9ICYoKGNhcmQtPm10ZClbeF0pOworCQlpZiAobXRkLT51c2Vjb3VudCA+IDApCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgRVJSU1RSICJWTVUgYXQgKCVkLCAlZCkgZmlsZSBlcnJvciAtIgorCitzdGF0aWMgdm9pZCB2bXVfZmlsZV9lcnJvcihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB2b2lkICpyZWN2YnVmKQoreworCWVudW0gbWFwbGVfZmlsZV9lcnJvcnMgZXJyb3IgPSAoKGludCAqKXJlY3ZidWYpWzFdOworCisJc3dpdGNoIChlcnJvcikgeworCisJY2FzZSBNQVBMRV9GSUxFRVJSX0lOVkFMSURfUEFSVElUSU9OOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGludmFsaWQgcGFydGl0aW9uIG51bWJlclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9QSEFTRV9FUlJPUjoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBwaGFzZSBlcnJvclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9JTlZBTElEX0JMT0NLOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGludmFsaWQgYmxvY2sgbnVtYmVyXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX1dSSVRFX0VSUk9SOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIHdyaXRlIGVycm9yXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX0lOVkFMSURfV1JJVEVfTEVOR1RIOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGludmFsaWQgd3JpdGUgbGVuZ3RoXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX0JBRF9DUkM6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgYmFkIENSQ1xuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgMHglWFxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGVycm9yKTsKKwl9Cit9CisKKworc3RhdGljIGludCBfX2RldmluaXQgcHJvYmVfbWFwbGVfdm11KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCisJbWRldi0+Y2FuX3VubG9hZCA9IHZtdV9jYW5fdW5sb2FkOworCW1kZXYtPmZpbGVlcnJfaGFuZGxlciA9IHZtdV9maWxlX2Vycm9yOworCW1kZXYtPmRyaXZlciA9IG1kcnY7CisKKwllcnJvciA9IHZtdV9jb25uZWN0KG1kZXYpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJlbW92ZV9tYXBsZV92bXUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKKworCXZtdV9kaXNjb25uZWN0KG1kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciB2bXVfZmxhc2hfZHJpdmVyID0geworCS5mdW5jdGlvbiA9CU1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkuZHJ2ID0geworCQkubmFtZSA9CQkiRHJlYW1jYXN0X3Zpc3VhbF9tZW1vcnkiLAorCQkucHJvYmUgPQlwcm9iZV9tYXBsZV92bXUsCisJCS5yZW1vdmUgPSAJX19kZXZleGl0X3AocmVtb3ZlX21hcGxlX3ZtdSksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZtdV9mbGFzaF9tYXBfaW5pdCh2b2lkKQoreworCXJldHVybiBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIoJnZtdV9mbGFzaF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdm11X2ZsYXNoX21hcF9leGl0KHZvaWQpCit7CisJbWFwbGVfZHJpdmVyX3VucmVnaXN0ZXIoJnZtdV9mbGFzaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2bXVfZmxhc2hfbWFwX2luaXQpOworbW9kdWxlX2V4aXQodm11X2ZsYXNoX21hcF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGbGFzaCBtYXBwaW5nIGZvciBTZWdhIERyZWFtY2FzdCB2aXN1YWwgbWVtb3J5Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCmluZGV4IGM5OGMxNTcuLjQ3YTMzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCkBAIC0xMzksNyArMTM5LDggQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CiAJc3RydWN0IGF0bWVsX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKIAotCXJldHVybiBncGlvX2dldF92YWx1ZShob3N0LT5ib2FyZC0+cmR5X3Bpbik7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKGhvc3QtPmJvYXJkLT5yZHlfcGluKSBeCisgICAgICAgICAgICAgICAgISFob3N0LT5ib2FyZC0+cmR5X3Bpbl9hY3RpdmVfbG93OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwppbmRleCBjZWQxNGI1Li43MjQ0NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwpAQCAtMTI4LDExICsxMjgsMTEgQEAKICAqIFRoZSBiaW5kaW5nIHRvIHRoZSBtdGQgYW5kIGFsbCBhbGxvY2F0ZWQKICAqIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBleGNpdGVfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKHVubGlrZWx5KCF0aGlzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYWxsZWQgJXMgd2l0aG91dCBwcml2YXRlIGRhdGEhISIsCkBAIC0xNTksOSArMTU5LDggQEAKICAqIGl0IGNhbiBhbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyB0aGVuIGNhbGxzIHRoZQogICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzLgogKi8KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqZHJ2ZGF0YTsJLyogcHJpdmF0ZSBkcml2ZXIgZGF0YSAqLwogCXN0cnVjdCBuYW5kX2NoaXAgKmJvYXJkX2NoaXA7CS8qIHByaXZhdGUgZmxhc2ggY2hpcCBkYXRhICovCiAJc3RydWN0IG10ZF9pbmZvICpib2FyZF9tdGQ7CS8qIG10ZCBpbmZvIGZvciB0aGlzIGJvYXJkICovCkBAIC0xNzUsNyArMTc0LDcgQEAKIAl9CiAKIAkvKiBiaW5kIHByaXZhdGUgZGF0YSBpbnRvIGRyaXZlciAqLwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydmRhdGEpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydmRhdGEpOwogCiAJLyogYWxsb2NhdGUgYW5kIG1hcCB0aGUgcmVzb3VyY2UgKi8KIAlkcnZkYXRhLT5yZWdzID0KQEAgLTIxOSwyMyArMjE4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZXhjaXRlX25hbmQiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZXhjaXRlX25hbmQiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUgPSBleGNpdGVfbmFuZF9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AoZXhjaXRlX25hbmRfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChleGNpdGVfbmFuZF9yZW1vdmUpCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9pbml0KHZvaWQpCiB7CiAJcHJfaW5mbygiQmFzbGVyIGVYY2l0ZSBuYW5kIGZsYXNoIGRyaXZlciBWZXJzaW9uICIKIAkJRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OICJcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4Y2l0ZV9uYW5kX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZXhjaXRlX25hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCmluZGV4IDU4MmNmODAuLjg5YmY4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAluZGZjLT5tdGQubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMuJXMiLAotCQkJCSAgIG5kZmMtPm9mZGV2LT5kZXYuYnVzX2lkLCBmbGFzaF9ucC0+bmFtZSk7CisJCQlkZXZfbmFtZSgmbmRmYy0+b2ZkZXYtPmRldiksIGZsYXNoX25wLT5uYW1lKTsKIAlpZiAoIW5kZmMtPm10ZC5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9vcmlvbl9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL29yaW9uX25hbmQuYwppbmRleCA5MTdjZjhkLi5jMmRmZDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL29yaW9uX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL29yaW9uX25hbmQuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9yaW9uX25hbmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvcmlvbl9uYW5kX3Byb2JlLAotCS5yZW1vdmUJCT0gb3Jpb25fbmFuZF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvcmlvbl9uYW5kX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm9yaW9uX25hbmQiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMKaW5kZXggNWI2OWU3Ny4uM2E0OTZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMKQEAgLTM2LDEwICszNiw5IEBACiAJc3RydWN0IG9uZW5hbmRfY2hpcAlvbmVuYW5kOwogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19vbmVuYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdlbmVyaWNfb25lbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm87Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKQEAgLTQ5LDcgKzQ4LDcgQEAKIAlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgZGV2LT5kcml2ZXItPm5hbWUpKSB7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+ZGV2LmRyaXZlci0+bmFtZSkpIHsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIG91dF9mcmVlX2luZm87CiAJfQpAQCAtODIsNyArODEsNyBAQAogI2VuZGlmCiAJCWVyciA9IGFkZF9tdGRfZGV2aWNlKCZpbmZvLT5tdGQpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk2LDE0ICs5NSwxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGdlbmVyaWNfb25lbmFuZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgZ2VuZXJpY19vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgb25lbmFuZF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAoaW5mbykgewogCQlpZiAoaW5mby0+cGFydHMpCkBAIC0xMjAsOSArMTE4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnZW5lcmljX29uZW5hbmRfZHJpdmVyID0gewotCS5uYW1lCQk9IERSSVZFUl9OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2VuZXJpY19vbmVuYW5kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGdlbmVyaWNfb25lbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGdlbmVyaWNfb25lbmFuZF9yZW1vdmUpLAogfTsKQEAgLTEzMSwxMiArMTMxLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfb25lbmFuZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnZW5lcmljX29uZW5hbmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGdlbmVyaWNfb25lbmFuZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IGIyNTYzZDMuLmM1NjY5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMTAyLDggKzEwMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1EUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlEUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIDNjNTl4LzNjOXh4IGV0aGVybmV0IGRyaXZlciAiKTsKQEAgLTI5MDgsNyArMjkwOCw3IEBACiAJCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoVk9SVEVYX1BDSSh2cCkpKTsKIAl9IGVsc2UgewogCQlpZiAoVk9SVEVYX0VJU0EodnApKQotCQkJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgZGV2X25hbWUodnAtPmdlbmRldikpOworCQkJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSh2cC0+Z2VuZGV2KSk7CiAJCWVsc2UKIAkJCXNwcmludGYoaW5mby0+YnVzX2luZm8sICJFSVNBIDB4JWx4ICVkIiwKIAkJCQkJZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggMzU1MTdiMC4uYTA5ZTNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTE2MDIsNiArMTYwMiwyOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjcF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJmNwLT5sb2NrKTsKKworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJY3B3MzJfZihNQUMwICsgMCwgbGUzMl90b19jcHUgKCooX19sZTMyICopIChkZXYtPmRldl9hZGRyICsgMCkpKTsKKwljcHczMl9mKE1BQzAgKyA0LCBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCisJc3Bpbl91bmxvY2tfaXJxKCZjcC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogU2VyaWFsIEVFUFJPTSBzZWN0aW9uLiAqLwogCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KQEAgLTE4MjEsNyArMTg0Myw3IEBACiAJLm5kb19vcGVuCQk9IGNwX29wZW4sCiAJLm5kb19zdG9wCQk9IGNwX2Nsb3NlLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBjcF9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBjcF9zZXRfcnhfbW9kZSwKIAkubmRvX2dldF9zdGF0cwkJPSBjcF9nZXRfc3RhdHMsCiAJLm5kb19kb19pb2N0bAkJPSBjcF9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwppbmRleCA1MzQxZGE2Li4yOWRmMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5dG9vLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCkBAIC02NDAsNiArNjQwLDcgQEAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7CiBzdGF0aWMgaW50IHJ0bDgxMzlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogc3RhdGljIGlycXJldHVybl90IHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIGludCBydGw4MTM5X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTkxNyw3ICs5MTgsNyBAQAogCS5uZG9fc3RvcAkJPSBydGw4MTM5X2Nsb3NlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IHJ0bDgxMzlfZ2V0X3N0YXRzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3N0YXJ0X3htaXQJCT0gcnRsODEzOV9zdGFydF94bWl0LAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcnRsODEzOV9zZXRfcnhfbW9kZSwKIAkubmRvX2RvX2lvY3RsCQk9IG5ldGRldl9pb2N0bCwKQEAgLTIyMTUsNiArMjIxNiwyOSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKKworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSk7CisJUlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisKKwlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggM2ZlZDMzNC4uZTVmZmMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0yNiw2ICsyNiwxNSBAQAogIyB0aGF0IGZvciBlYWNoIG9mIHRoZSBzeW1ib2xzLgogaWYgTkVUREVWSUNFUwogCitjb25maWcgQ09NUEFUX05FVF9ERVZfT1BTCisgICAgICAgZGVmYXVsdCB5CisgICAgICAgYm9vbCAiRW5hYmxlIG9sZGVyIG5ldHdvcmsgZGV2aWNlIEFQSSBjb21wYXRpYWJsaXR5IgorICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBUaGlzIG9wdGlvbiBlbmFibGVzIGtlcm5lbCBjb21wYXRpYWJpbGl0eSB3aXRoIG9sZGVyIG5ldHdvcmsgZGV2aWNlcworICAgICAgICAgIHRoYXQgZG8gbm90IHVzZSBuZXRfZGV2aWNlX29wcyBpbnRlcmZhY2UuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBJRkIKIAl0cmlzdGF0ZSAiSW50ZXJtZWRpYXRlIEZ1bmN0aW9uYWwgQmxvY2sgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5FVF9DTFNfQUNUCkBAIC0xMDQwLDYgKzEwNDksMTcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG5pNjUuCiAKK2NvbmZpZyBETkVUCisJdHJpc3RhdGUgIkRhdmUgZXRoZXJuZXQgc3VwcG9ydCAoRE5FVCkiCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSEFTX0lPTUVNCisJc2VsZWN0IFBIWUxJQgorCWhlbHAKKwkgIFRoZSBEYXZlIGV0aGVybmV0IGludGVyZmFjZSAoRE5FVCkgaXMgZm91bmQgb24gUW9uZyBCb2FyZCBGUEdBLgorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgRE5FVCBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBkbmV0LgorCiBzb3VyY2UgImRyaXZlcnMvbmV0L3R1bGlwL0tjb25maWciCiAKIGNvbmZpZyBBVDE3MDAKQEAgLTIwMTksMTQgKzIwMzksNiBAQAogICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogICAgICAgICAgd2lsbCBiZSBjYWxsZWQgaWdiLgogCi1jb25maWcgSUdCX0xSTyAKLQlib29sICJVc2Ugc29mdHdhcmUgTFJPIgotCWRlcGVuZHMgb24gSUdCICYmIElORVQKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBsYXJnZSByZWNlaXZlIG9mZmxvYWQuIAotCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KIGNvbmZpZyBJR0JfRENBCiAJYm9vbCAiRGlyZWN0IENhY2hlIEFjY2VzcyAoRENBKSBTdXBwb3J0IgogCWRlZmF1bHQgeQpAQCAtMjMwOSw2ICsyMzIxLDcgQEAKIGNvbmZpZyBNVjY0M1hYX0VUSAogCXRyaXN0YXRlICJNYXJ2ZWxsIERpc2NvdmVyeSAoNjQzWFgpIGFuZCBPcmlvbiBldGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gTVY2NDM2MCB8fCBNVjY0WDYwIHx8IChQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMikgfHwgUExBVF9PUklPTgorCXNlbGVjdCBJTkVUX0xSTwogCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZQpAQCAtMjMxOCwxNiArMjMzMSw2IEBACiAJICBTb21lIGJvYXJkcyB0aGF0IHVzZSB0aGUgRGlzY292ZXJ5IGNoaXBzZXQgYXJlIHRoZSBNb21lbmNvCiAJICBPY2Vsb3QgQyBhbmQgSmFndWFyIEFUWCBhbmQgUGVnYXNvcyBJSS4KIAotY29uZmlnIE1WNjQzWFhfRVRIX0xSTwotCXRyaXN0YXRlICJNYXJ2ZWxsIDY0M1hYIGV0aGVybmV0IGRyaXZlciBMUk8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1WNjQzWFhfRVRICi0Jc2VsZWN0IElORVRfTFJPCi0JaGVscAotCSAgU2F5IHkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgTGFyZ2UgUmVjZWl2ZSBPZmZsb2FkIGZvciB0aGUKLQkgIG12NjQzeHhfZXRoIGRyaXZlci4KLQotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCiBjb25maWcgUUxBM1hYWAogCXRyaXN0YXRlICJRTG9naWMgUUxBM1hYWCBOZXR3b3JrIERyaXZlciBTdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC0yMzYwLDYgKzIzNjMsMTcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhdGwxZS4KIAorY29uZmlnIEFUTDFDCisJdHJpc3RhdGUgIkF0aGVyb3MgTDFDIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFBDSSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1JDMzIKKwlzZWxlY3QgTUlJCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEF0aGVyb3MgTDFDIGdpZ2FiaXQgZXRoZXJuZXQgYWRhcHRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGF0bDFjLgorCiBjb25maWcgSk1FCiAJdHJpc3RhdGUgIkpNaWNyb24oUikgUENJLUV4cHJlc3MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC0yNjI0LDYgKzI2MzgsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbmV0L3NmYy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbmV0L2JlbmV0L0tjb25maWciCisKIGVuZGlmICMgTkVUREVWXzEwMDAwCiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvdG9rZW5yaW5nL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGFkODdiYTcuLjc1OGVjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xNywxMCArMTcsMTIgQEAKIG9iai0kKENPTkZJR19BVEwxKSArPSBhdGx4Lwogb2JqLSQoQ09ORklHX0FUTDIpICs9IGF0bHgvCiBvYmotJChDT05GSUdfQVRMMUUpICs9IGF0bDFlLworb2JqLSQoQ09ORklHX0FUTDFDKSArPSBhdGwxYy8KIG9iai0kKENPTkZJR19HSUFORkFSKSArPSBnaWFuZmFyX2RyaXZlci5vCiBvYmotJChDT05GSUdfVEVIVVRJKSArPSB0ZWh1dGkubwogb2JqLSQoQ09ORklHX0VOSUMpICs9IGVuaWMvCiBvYmotJChDT05GSUdfSk1FKSArPSBqbWUubworb2JqLSQoQ09ORklHX0JFMk5FVCkgKz0gYmVuZXQvCiAKIGdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFwKIAkJZ2lhbmZhcl9ldGh0b29sLm8gXApAQCAtMjMxLDYgKzIzMyw3IEBACiAKIG9iai0kKENPTkZJR19YVEVOU0FfWFQyMDAwX1NPTklDKSArPSB4dHNvbmljLm8KIAorb2JqLSQoQ09ORklHX0RORVQpICs9IGRuZXQubwogb2JqLSQoQ09ORklHX01BQ0IpICs9IG1hY2IubwogCiBvYmotJChDT05GSUdfQVJNKSArPSBhcm0vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hMjA2NS5jIGIvZHJpdmVycy9uZXQvYTIwNjUuYwppbmRleCA3YTYwYmRkLi5kMGQwYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hMjA2NS5jCisrKyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKQEAgLTU1MiwxOCArNTUyLDEzIEBACiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfcmVncyAqbGwgPSBscC0+bGw7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7Ci0JaW50IGVudHJ5LCBza2JsZW4sIGxlbjsKKwlpbnQgZW50cnksIHNrYmxlbjsKIAlpbnQgc3RhdHVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2tibGVuID0gc2tiLT5sZW47Ci0JbGVuID0gc2tibGVuOwotCi0JaWYgKGxlbiA8IEVUSF9aTEVOKSB7Ci0JCWxlbiA9IEVUSF9aTEVOOwotCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7Ci0JfQorCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCXJldHVybiAwOworCXNrYmxlbiA9IG1heF90KHVuc2lnbmVkLCBza2ItPmxlbiwgRVRIX1pMRU4pOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC01ODYsMTUgKzU4MSwxMSBAQAogCX0KICNlbmRpZgogCWVudHJ5ID0gbHAtPnR4X25ldyAmIGxwLT50eF9yaW5nX21vZF9tYXNrOwotCWliLT5idHhfcmluZyBbZW50cnldLmxlbmd0aCA9ICgtbGVuKSB8IDB4ZjAwMDsKKwlpYi0+YnR4X3JpbmcgW2VudHJ5XS5sZW5ndGggPSAoLXNrYmxlbikgfCAweGYwMDA7CiAJaWItPmJ0eF9yaW5nIFtlbnRyeV0ubWlzYyA9IDA7CiAKIAlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgKHZvaWQgKikmaWItPnR4X2J1ZiBbZW50cnldWzBdLCBza2JsZW4pOwogCi0JLyogQ2xlYXIgdGhlIHNsYWNrIG9mIHRoZSBwYWNrZXQsIGRvIEkgbmVlZCB0aGlzPyAqLwotCWlmIChsZW4gIT0gc2tibGVuKQotCQltZW1zZXQgKCh2b2lkICopICZpYi0+dHhfYnVmIFtlbnRyeV1bc2tibGVuXSwgMCwgbGVuIC0gc2tibGVuKTsKLQogCS8qIE5vdywgZ2l2ZSB0aGUgcGFja2V0IHRvIHRoZSBsYW5jZSAqLwogCWliLT5idHhfcmluZyBbZW50cnldLnRtZDFfYml0cyA9IChMRV9UMV9QT0t8TEVfVDFfT1dOKTsKIAlscC0+dHhfbmV3ID0gKGxwLT50eF9uZXcrMSkgJiBscC0+dHhfcmluZ19tb2RfbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggOTU4OWQ2MjAuLjA2YTlmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC00MzcsNyArNDM3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHhfcmF0aW8sICJBY2VOSUMvM0M5ODUvR0E2MjAgcmF0aW8gb2YgTklDIG1lbW9yeSB1c2VkIGZvciBUWC9SWCBkZXNjcmlwdG9ycyAocmFuZ2UgMC02MykiKTsKIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogICAiYWNlbmljLmM6IHYwLjkyIDA4LzA1LzIwMDIgIEplcyBTb3JlbnNlbiwgbGludXgtYWNlbmljQFN1blNJVEUuZGtcbiIKICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vaG9tZS5jZXJuLmNoL35qZXMvZ2lnZS9hY2VuaWMuaHRtbFxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvYXJtL01ha2VmaWxlCmluZGV4IGM2OWMwY2QuLjgxMWEzY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjCiAKIG9iai0kKENPTkZJR19BUk1fQU03OUM5NjFBKQkrPSBhbTc5Yzk2MWEubwotb2JqLSQoQ09ORklHX0FSTV9FVEhFUkgpCSs9IGV0aGVyaC5vIC4uLzgzOTAubworb2JqLSQoQ09ORklHX0FSTV9FVEhFUkgpCSs9IGV0aGVyaC5vCiBvYmotJChDT05GSUdfQVJNX0VUSEVSMykJKz0gZXRoZXIzLm8KIG9iai0kKENPTkZJR19BUk1fRVRIRVIxKQkrPSBldGhlcjEubwogb2JqLSQoQ09ORklHX0FSTV9BVDkxX0VUSEVSKQkrPSBhdDkxX2V0aGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwppbmRleCA1NGI1MmU1Li5mNTJmNjY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwpAQCAtNjQxLDE1ICs2NDEsMTUgQEAKIAkubmRvX29wZW4JCT0gZXRoZXJoX29wZW4sCiAJLm5kb19zdG9wCQk9IGV0aGVyaF9jbG9zZSwKIAkubmRvX3NldF9jb25maWcJCT0gZXRoZXJoX3NldF9jb25maWcsCi0JLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCi0JLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBfX2VpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IF9fZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBfX2VpX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IF9fZWlfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWlfcG9sbCwKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IF9fZWlfcG9sbCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCmluZGV4IGIzOTIxMGMuLjM1Y2QyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQltc2xlZXAoMSk7CiAJfQogCi0JaWYgKHJlc2V0X3RpbWVvdXQgPT0gMCkgeworCWlmIChyZXNldF90aW1lb3V0IDwgMCkgewogCQlkZXZfY3JpdChrc3AtPmRldiwKIAkJCSAiVGltZW91dCB3YWl0aW5nIGZvciBETUEgZW5naW5lcyB0byByZXNldFxuIik7CiAJCS8qIEFuZCBibGl0aGVseSBjYXJyeSBvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9hdGwxYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdkOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfQVRMMUMpICs9IGF0bDFjLm8KK2F0bDFjLW9ianMgOj0gYXRsMWNfbWFpbi5vIGF0bDFjX2h3Lm8gYXRsMWNfZXRodG9vbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY1OGVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaApAQCAtMCwwICsxLDYwNSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBBdGhlcm9zIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERlcml2ZWQgZnJvbSBJbnRlbCBlMTAwMCBkcml2ZXIKKyAqIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9BVEwxQ19IXworI2RlZmluZSBfQVRMMUNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisKKyNpbmNsdWRlICJhdGwxY19ody5oIgorCisvKiBXYWtlIFVwIEZpbHRlciBDb250cm9sICovCisjZGVmaW5lIEFUX1dVRkNfTE5LQyAweDAwMDAwMDAxIC8qIExpbmsgU3RhdHVzIENoYW5nZSBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEFUX1dVRkNfTUFHICAweDAwMDAwMDAyIC8qIE1hZ2ljIFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEFUX1dVRkNfRVggICAweDAwMDAwMDA0IC8qIERpcmVjdGVkIEV4YWN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgQVRfV1VGQ19NQyAgIDB4MDAwMDAwMDggLyogTXVsdGljYXN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgQVRfV1VGQ19CQyAgIDB4MDAwMDAwMTAgLyogQnJvYWRjYXN0IFdha2V1cCBFbmFibGUgKi8KKworI2RlZmluZSBBVF9WTEFOX1RPX1RBRyhfdmxhbiwgX3RhZykJICAgXAorCV90YWcgPSAgKCgoKF92bGFuKSA+PiA4KSAmIDB4RkYpICB8XAorCQkgKCgoX3ZsYW4pICYgMHhGRikgPDwgOCkpCisKKyNkZWZpbmUgQVRfVEFHX1RPX1ZMQU4oX3RhZywgX3ZsYW4pIAkgXAorCV92bGFuID0gKCgoKF90YWcpID4+IDgpICYgMHhGRikgfFwKKwkJKCgoX3RhZykgJiAweEZGKSA8PCA4KSkKKworI2RlZmluZSBTUEVFRF8wCQkgICAweGZmZmYKKyNkZWZpbmUgSEFMRl9EVVBMRVggICAgICAgIDEKKyNkZWZpbmUgRlVMTF9EVVBMRVggICAgICAgIDIKKworI2RlZmluZSBBVF9SWF9CVUZfU0laRQkJKEVUSF9GUkFNRV9MRU4gKyBWTEFOX0hMRU4gKyBFVEhfRkNTX0xFTikKKyNkZWZpbmUgTUFYX0pVTUJPX0ZSQU1FX1NJWkUgCSg5KjEwMjQpCisjZGVmaW5lIE1BWF9UWF9PRkZMT0FEX1RIUkVTSAkoOSoxMDI0KQorCisjZGVmaW5lIEFUX01BWF9SRUNFSVZFX1FVRVVFICAgIDQKKyNkZWZpbmUgQVRfREVGX1JFQ0VJVkVfUVVFVUUJMQorI2RlZmluZSBBVF9NQVhfVFJBTlNNSVRfUVVFVUUJMgorCisjZGVmaW5lIEFUX0RNQV9ISV9BRERSX01BU0sgICAgIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTAorI2RlZmluZSBBVF9ETUFfTE9fQUREUl9NQVNLICAgICAweDAwMDAwMDAwZmZmZmZmZmZVTEwKKworI2RlZmluZSBBVF9UWF9XQVRDSERPRyAgKDUgKiBIWikKKyNkZWZpbmUgQVRfTUFYX0lOVF9XT1JLCQk1CisjZGVmaW5lIEFUX1RXU0lfRUVQUk9NX1RJTUVPVVQgCTEwMAorI2RlZmluZSBBVF9IV19NQVhfSURMRV9ERUxBWSAJMTAKKyNkZWZpbmUgQVRfU1VTUEVORF9MSU5LX1RJTUVPVVQgMjgKKworI2RlZmluZSBBVF9BU1BNX0wwU19USU1FUgk2CisjZGVmaW5lIEFUX0FTUE1fTDFfVElNRVIJMTIKKworI2RlZmluZSBBVEwxQ19QQ0lFX0wwU19MMV9ESVNBQkxFIAkweDAxCisjZGVmaW5lIEFUTDFDX1BDSUVfUEhZX1JFU0VUCQkweDAyCisKKyNkZWZpbmUgQVRMMUNfQVNQTV9MMHNfRU5BQkxFCQkweDAwMDEKKyNkZWZpbmUgQVRMMUNfQVNQTV9MMV9FTkFCTEUJCTB4MDAwMgorCisjZGVmaW5lIEFUX1JFR1NfTEVOCSg3NSAqIHNpemVvZih1MzIpKQorI2RlZmluZSBBVF9FRVBST01fTEVOIAk1MTIKKworI2RlZmluZSBBVEwxQ19HRVRfREVTQyhSLCBpLCB0eXBlKQkoJigoKHR5cGUgKikoKFIpLT5kZXNjKSlbaV0pKQorI2RlZmluZSBBVEwxQ19SRkRfREVTQyhSLCBpKQlBVEwxQ19HRVRfREVTQyhSLCBpLCBzdHJ1Y3QgYXRsMWNfcnhfZnJlZV9kZXNjKQorI2RlZmluZSBBVEwxQ19UUERfREVTQyhSLCBpKQlBVEwxQ19HRVRfREVTQyhSLCBpLCBzdHJ1Y3QgYXRsMWNfdHBkX2Rlc2MpCisjZGVmaW5lIEFUTDFDX1JSRF9ERVNDKFIsIGkpCUFUTDFDX0dFVF9ERVNDKFIsIGksIHN0cnVjdCBhdGwxY19yZWN2X3JldF9zdGF0dXMpCisKKy8qIHRwZCB3b3JkIDEgYml0IDA6NyBHZW5lcmFsIENoZWNrc3VtIHRhc2sgb2ZmbG9hZCAqLworI2RlZmluZSBUUERfTDRIRFJfT0ZGU0VUX01BU0sJMHgwMEZGCisjZGVmaW5lIFRQRF9MNEhEUl9PRkZTRVRfU0hJRlQJMAorCisvKiB0cGQgd29yZCAxIGJpdCAwOjcgTGFyZ2UgU2VuZCB0YXNrIG9mZmxvYWQgKElQdjQvSVBWNikgKi8KKyNkZWZpbmUgVFBEX1RDUEhEUl9PRkZTRVRfTUFTSwkweDAwRkYKKyNkZWZpbmUgVFBEX1RDUEhEUl9PRkZTRVRfU0hJRlQJMAorCisvKiB0cGQgd29yZCAxIGJpdCAwOjcgQ3VzdG9tIENoZWNrc3VtIHRhc2sgb2ZmbG9hZCAqLworI2RlZmluZSBUUERfUExPQURPRkZTRVRfTUFTSwkweDAwRkYKKyNkZWZpbmUgVFBEX1BMT0FET0ZGU0VUX1NISUZUCTAKKworLyogdHBkIHdvcmQgMSBiaXQgODoxNyAqLworI2RlZmluZSBUUERfQ0NTVU1fRU5fTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0NDU1VNX0VOX1NISUZUCTgKKyNkZWZpbmUgVFBEX0lQX0NTVU1fTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0lQX0NTVU1fU0hJRlQJOQorI2RlZmluZSBUUERfVENQX0NTVU1fTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX1RDUF9DU1VNX1NISUZUCTEwCisjZGVmaW5lIFRQRF9VRFBfQ1NVTV9NQVNLCTB4MDAwMQorI2RlZmluZSBUUERfVURQX0NTVU1fU0hJRlQJMTEKKyNkZWZpbmUgVFBEX0xTT19FTl9NQVNLCQkweDAwMDEJLyogVENQIExhcmdlIFNlbmQgT2ZmbG9hZCAqLworI2RlZmluZSBUUERfTFNPX0VOX1NISUZUCTEyCisjZGVmaW5lIFRQRF9MU09fVkVSX01BU0sJMHgwMDAxCisjZGVmaW5lIFRQRF9MU09fVkVSX1NISUZUCTEzIAkvKiAwIDogaXB2NDsgMSA6IGlwdjQvaXB2NiAqLworI2RlZmluZSBUUERfQ09OX1ZUQUdfTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0NPTl9WVEFHX1NISUZUCTE0CisjZGVmaW5lIFRQRF9JTlNfVlRBR19NQVNLCTB4MDAwMQorI2RlZmluZSBUUERfSU5TX1ZUQUdfU0hJRlQJMTUKKyNkZWZpbmUgVFBEX0lQVjRfUEFDS0VUX01BU0sJMHgwMDAxICAvKiB2YWxpZCB3aGVuIExTTyBWRVIgIGlzIDEgKi8KKyNkZWZpbmUgVFBEX0lQVjRfUEFDS0VUX1NISUZUCTE2CisjZGVmaW5lIFRQRF9FVEhfVFlQRV9NQVNLCTB4MDAwMQorI2RlZmluZSBUUERfRVRIX1RZUEVfU0hJRlQJMTcJLyogMCA6IDgwMi4zIGZyYW1lOyAxIDogRXRoZXJuZXQgKi8KKworLyogdHBkIHdvcmQgMTg6MjUgQ3VzdG9tIENoZWNrc3VtIHRhc2sgb2ZmbG9hZCAqLworI2RlZmluZSBUUERfQ0NTVU1fT0ZGU0VUX01BU0sJMHgwMEZGCisjZGVmaW5lIFRQRF9DQ1NVTV9PRkZTRVRfU0hJRlQJMTgKKyNkZWZpbmUgVFBEX0NDU1VNX0VQQURfTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0NDU1VNX0VQQURfU0hJRlQJMzAKKworLyogdHBkIHdvcmQgMTg6MzAgTGFyZ2UgU2VuZCB0YXNrIG9mZmxvYWQgKElQdjQvSVBWNikgKi8KKyNkZWZpbmUgVFBEX01TU19NQVNLICAgICAgICAgICAgMHgxRkZGCisjZGVmaW5lIFRQRF9NU1NfU0hJRlQJCTE4CisKKyNkZWZpbmUgVFBEX0VPUF9NQVNLCQkweDAwMDEKKyNkZWZpbmUgVFBEX0VPUF9TSElGVAkJMzEKKworc3RydWN0IGF0bDFjX3RwZF9kZXNjIHsKKwlfX2xlMTYJYnVmZmVyX2xlbjsgLyogaW5jbHVkZSA0LWJ5dGUgQ1JDICovCisJX19sZTE2CXZsYW5fdGFnOworCV9fbGUzMgl3b3JkMTsKKwlfX2xlNjQJYnVmZmVyX2FkZHI7Cit9OworCitzdHJ1Y3QgYXRsMWNfdHBkX2V4dF9kZXNjIHsKKwl1MzIgcmVzZXJ2ZF8wOworCV9fbGUzMiB3b3JkMTsKKwlfX2xlMzIgcGt0X2xlbjsKKwl1MzIgcmVzZXJ2ZF8xOworfTsKKy8qIHJycyB3b3JkIDAgYml0IDA6MzEgKi8KKyNkZWZpbmUgUlJTX1JYX0NTVU1fTUFTSwkweEZGRkYKKyNkZWZpbmUgUlJTX1JYX0NTVU1fU0hJRlQJMAorI2RlZmluZSBSUlNfUlhfUkZEX0NOVF9NQVNLCTB4MDAwRgorI2RlZmluZSBSUlNfUlhfUkZEX0NOVF9TSElGVAkxNgorI2RlZmluZSBSUlNfUlhfUkZEX0lOREVYX01BU0sJMHgwRkZGCisjZGVmaW5lIFJSU19SWF9SRkRfSU5ERVhfU0hJRlQJMjAKKworLyogcnJzIGZsYWcgYml0IDA6MTYgKi8KKyNkZWZpbmUgUlJTX0hFQURfTEVOX01BU0sJMHgwMEZGCisjZGVmaW5lIFJSU19IRUFEX0xFTl9TSElGVAkwCisjZGVmaW5lIFJSU19IRFNfVFlQRV9NQVNLCTB4MDAwMworI2RlZmluZSBSUlNfSERTX1RZUEVfU0hJRlQJOAorI2RlZmluZSBSUlNfQ1BVX05VTV9NQVNLCTB4MDAwMworI2RlZmluZQlSUlNfQ1BVX05VTV9TSElGVAkxMAorI2RlZmluZSBSUlNfSEFTSF9GTEdfTUFTSwkweDAwMEYKKyNkZWZpbmUgUlJTX0hBU0hfRkxHX1NISUZUCTEyCisKKyNkZWZpbmUgUlJTX0hEU19UWVBFX0hFQUQJMQorI2RlZmluZSBSUlNfSERTX1RZUEVfREFUQQkyCisKKyNkZWZpbmUgUlJTX0lTX05PX0hEU19UWVBFKGZsYWcpIFwKKwkoKChmbGFnKSA+PiAoUlJTX0hEU19UWVBFX1NISUZUKSkgJiBSUlNfSERTX1RZUEVfTUFTSyA9PSAwKQorCisjZGVmaW5lIFJSU19JU19IRFNfSEVBRChmbGFnKSBcCisJKCgoZmxhZykgPj4gKFJSU19IRFNfVFlQRV9TSElGVCkpICYgUlJTX0hEU19UWVBFX01BU0sgPT0gXAorCQkJUlJTX0hEU19UWVBFX0hFQUQpCisKKyNkZWZpbmUgUlJTX0lTX0hEU19EQVRBKGZsYWcpIFwKKwkoKChmbGFnKSA+PiAoUlJTX0hEU19UWVBFX1NISUZUKSkgJiBSUlNfSERTX1RZUEVfTUFTSyA9PSBcCisJCQlSUlNfSERTX1RZUEVfREFUQSkKKworLyogcnJzIHdvcmQgMyBiaXQgMDozMSAqLworI2RlZmluZSBSUlNfUEtUX1NJWkVfTUFTSwkweDNGRkYKKyNkZWZpbmUgUlJTX1BLVF9TSVpFX1NISUZUCTAKKyNkZWZpbmUgUlJTX0VSUl9MNF9DU1VNX01BU0sJMHgwMDAxCisjZGVmaW5lIFJSU19FUlJfTDRfQ1NVTV9TSElGVAkxNAorI2RlZmluZSBSUlNfRVJSX0lQX0NTVU1fTUFTSwkweDAwMDEKKyNkZWZpbmUgUlJTX0VSUl9JUF9DU1VNX1NISUZUCTE1CisjZGVmaW5lIFJSU19WTEFOX0lOU19NQVNLCTB4MDAwMQorI2RlZmluZSBSUlNfVkxBTl9JTlNfU0hJRlQJMTYKKyNkZWZpbmUgUlJTX1BST1RfSURfTUFTSwkweDAwMDcKKyNkZWZpbmUgUlJTX1BST1RfSURfU0hJRlQJMTcKKyNkZWZpbmUgUlJTX1JYX0VSUl9TVU1fTUFTSwkweDAwMDEKKyNkZWZpbmUgUlJTX1JYX0VSUl9TVU1fU0hJRlQJMjAKKyNkZWZpbmUgUlJTX1JYX0VSUl9DUkNfTUFTSwkweDAwMDEKKyNkZWZpbmUgUlJTX1JYX0VSUl9DUkNfU0hJRlQJMjEKKyNkZWZpbmUgUlJTX1JYX0VSUl9GQUVfTUFTSwkweDAwMDEKKyNkZWZpbmUgUlJTX1JYX0VSUl9GQUVfU0hJRlQJMjIKKyNkZWZpbmUgUlJTX1JYX0VSUl9UUlVOQ19NQVNLCTB4MDAwMQorI2RlZmluZSBSUlNfUlhfRVJSX1RSVU5DX1NISUZUCTIzCisjZGVmaW5lIFJSU19SWF9FUlJfUlVOQ19NQVNLCTB4MDAwMQorI2RlZmluZSBSUlNfUlhfRVJSX1JVTkNfU0hJRlQJMjQKKyNkZWZpbmUgUlJTX1JYX0VSUl9JQ01QX01BU0sJMHgwMDAxCisjZGVmaW5lIFJSU19SWF9FUlJfSUNNUF9TSElGVAkyNQorI2RlZmluZSBSUlNfUEFDS0VUX0JDQVNUX01BU0sJMHgwMDAxCisjZGVmaW5lIFJSU19QQUNLRVRfQkNBU1RfU0hJRlQJMjYKKyNkZWZpbmUgUlJTX1BBQ0tFVF9NQ0FTVF9NQVNLCTB4MDAwMQorI2RlZmluZSBSUlNfUEFDS0VUX01DQVNUX1NISUZUCTI3CisjZGVmaW5lIFJSU19QQUNLRVRfVFlQRV9NQVNLCTB4MDAwMQorI2RlZmluZSBSUlNfUEFDS0VUX1RZUEVfU0hJRlQJMjgKKyNkZWZpbmUgUlJTX0ZJRk9fRlVMTF9NQVNLCTB4MDAwMQorI2RlZmluZSBSUlNfRklGT19GVUxMX1NISUZUCTI5CisjZGVmaW5lIFJSU184MDJfM19MRU5fRVJSX01BU0sgCTB4MDAwMQorI2RlZmluZSBSUlNfODAyXzNfTEVOX0VSUl9TSElGVCAzMAorI2RlZmluZSBSUlNfUlhEX1VQREFURURfTUFTSwkweDAwMDEKKyNkZWZpbmUgUlJTX1JYRF9VUERBVEVEX1NISUZUCTMxCisKKyNkZWZpbmUgUlJTX0VSUl9MNF9DU1VNICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSUlNfRVJSX0lQX0NTVU0gICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJSU19WTEFOX0lOUyAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUlJTX1JYX0VSUl9TVU0gICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBSUlNfUlhfRVJSX0NSQyAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFJSU184MDJfM19MRU5fRVJSCTB4NDAwMDAwMDAKKyNkZWZpbmUgUlJTX1JYRF9VUERBVEVECQkweDgwMDAwMDAwCisKKyNkZWZpbmUgUlJTX1BBQ0tFVF9UWVBFXzgwMl8zICAJMQorI2RlZmluZSBSUlNfUEFDS0VUX1RZUEVfRVRICTAKKyNkZWZpbmUgUlJTX1BBQ0tFVF9JU19FVEgod29yZCkgXAorCSgoKHdvcmQpID4+IFJSU19QQUNLRVRfVFlQRV9TSElGVCkgJiBSUlNfUEFDS0VUX1RZUEVfTUFTSyA9PSBcCisJCQlSUlNfUEFDS0VUX1RZUEVfRVRIKQorI2RlZmluZSBSUlNfUlhEX0lTX1ZBTElEKHdvcmQpIFwKKwkoKCgod29yZCkgPj4gUlJTX1JYRF9VUERBVEVEX1NISUZUKSAmIFJSU19SWERfVVBEQVRFRF9NQVNLKSA9PSAxKQorCisjZGVmaW5lIFJSU19QQUNLRVRfUFJPVF9JU19JUFY0X09OTFkod29yZCkgXAorCSgoKCh3b3JkKSA+PiBSUlNfUFJPVF9JRF9TSElGVCkgJiBSUlNfUFJPVF9JRF9NQVNLKSA9PSAxKQorI2RlZmluZSBSUlNfUEFDS0VUX1BST1RfSVNfSVBWNl9PTkxZKHdvcmQpIFwKKwkoKCgod29yZCkgPj4gUlJTX1BST1RfSURfU0hJRlQpICYgUlJTX1BST1RfSURfTUFTSykgPT0gNikKKworc3RydWN0IGF0bDFjX3JlY3ZfcmV0X3N0YXR1cyB7CisJX19sZTMyICB3b3JkMDsKKwlfX2xlMzIJcnNzX2hhc2g7CisJX19sZTE2CXZsYW5fdGFnOworCV9fbGUxNglmbGFnOworCV9fbGUzMgl3b3JkMzsKK307CisKKy8qIFJGRCBkZXNjaXB0b3IgKi8KK3N0cnVjdCBhdGwxY19yeF9mcmVlX2Rlc2MgeworCV9fbGU2NAlidWZmZXJfYWRkcjsKK307CisKKy8qIERNQSBPcmRlciBTZXR0aW5ncyAqLworZW51bSBhdGwxY19kbWFfb3JkZXIgeworCWF0bDFjX2RtYV9vcmRfaW4gPSAxLAorCWF0bDFjX2RtYV9vcmRfZW5oID0gMiwKKwlhdGwxY19kbWFfb3JkX291dCA9IDQKK307CisKK2VudW0gYXRsMWNfZG1hX3JjYiB7CisJYXRsMWNfcmNiXzY0ID0gMCwKKwlhdGwxY19yY2JfMTI4ID0gMQorfTsKKworZW51bSBhdGwxY19tYWNfc3BlZWQgeworCWF0bDFjX21hY19zcGVlZF8wID0gMCwKKwlhdGwxY19tYWNfc3BlZWRfMTBfMTAwID0gMSwKKwlhdGwxY19tYWNfc3BlZWRfMTAwMCA9IDIKK307CisKK2VudW0gYXRsMWNfZG1hX3JlcV9ibG9jayB7CisJYXRsMWNfZG1hX3JlcV8xMjggPSAwLAorCWF0bDFjX2RtYV9yZXFfMjU2ID0gMSwKKwlhdGwxY19kbWFfcmVxXzUxMiA9IDIsCisJYXRsMWNfZG1hX3JlcV8xMDI0ID0gMywKKwlhdGwxY19kbWFfcmVxXzIwNDggPSA0LAorCWF0bDFjX2RtYV9yZXFfNDA5NiA9IDUKK307CisKK2VudW0gYXRsMWNfcnNzX21vZGUgeworCWF0bDFjX3Jzc19tb2RlX2Rpc2FibGUgPSAwLAorCWF0bDFjX3Jzc19zaWdfcXVlID0gMSwKKwlhdGwxY19yc3NfbXVsX3F1ZV9zaWdfaW50ID0gMiwKKwlhdGwxY19yc3NfbXVsX3F1ZV9tdWxfaW50ID0gNCwKK307CisKK2VudW0gYXRsMWNfcnNzX3R5cGUgeworCWF0bDFjX3Jzc19kaXNhYmxlID0gMCwKKwlhdGwxY19yc3NfaXB2NCA9IDEsCisJYXRsMWNfcnNzX2lwdjRfdGNwID0gMiwKKwlhdGwxY19yc3NfaXB2NiA9IDQsCisJYXRsMWNfcnNzX2lwdjZfdGNwID0gOAorfTsKKworZW51bSBhdGwxY19uaWNfdHlwZSB7CisJYXRocl9sMWMgPSAwLAorCWF0aHJfbDJjID0gMSwKK307CisKK2VudW0gYXRsMWNfdHJhbnNfcXVldWUgeworCWF0bDFjX3RyYW5zX25vcm1hbCA9IDAsCisJYXRsMWNfdHJhbnNfaGlnaCA9IDEKK307CisKK3N0cnVjdCBhdGwxY19od19zdGF0cyB7CisJLyogcnggKi8KKwl1bnNpZ25lZCBsb25nIHJ4X29rOwkJLyogVGhlIG51bWJlciBvZiBnb29kIHBhY2tldCByZWNlaXZlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2JjYXN0OwkJLyogVGhlIG51bWJlciBvZiBnb29kIGJyb2FkY2FzdCBwYWNrZXQgcmVjZWl2ZWQuICovCisJdW5zaWduZWQgbG9uZyByeF9tY2FzdDsJCS8qIFRoZSBudW1iZXIgb2YgZ29vZCBtdWx0aWNhc3QgcGFja2V0IHJlY2VpdmVkLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfcGF1c2U7CQkvKiBUaGUgbnVtYmVyIG9mIFBhdXNlIHBhY2tldCByZWNlaXZlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2N0cmw7CQkvKiBUaGUgbnVtYmVyIG9mIENvbnRyb2wgcGFja2V0IHJlY2VpdmVkIG90aGVyIHRoYW4gUGF1c2UgZnJhbWUuICovCisJdW5zaWduZWQgbG9uZyByeF9mY3NfZXJyOwkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgd2l0aCBiYWQgRkNTLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfbGVuX2VycjsJLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHdpdGggbWlzbWF0Y2ggb2YgbGVuZ3RoIGZpZWxkIGFuZCBhY3R1YWwgc2l6ZS4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2J5dGVfY250OwkvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGdvb2QgcGFja2V0IHJlY2VpdmVkLiBGQ1MgaXMgTk9UIGluY2x1ZGVkLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfcnVudDsJCS8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBsZXNzIHRoYW4gNjQgYnl0ZSBsb25nIGFuZCB3aXRoIGdvb2QgRkNTLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfZnJhZzsJCS8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBsZXNzIHRoYW4gNjQgYnl0ZSBsb25nIGFuZCB3aXRoIGJhZCBGQ1MuICovCisJdW5zaWduZWQgbG9uZyByeF9zel82NDsJCS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBhcmUgNjQgYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfc3pfNjVfMTI3OwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gNjUgYW5kIDEyNy1ieXRlIGxvbmcuICovCisJdW5zaWduZWQgbG9uZyByeF9zel8xMjhfMjU1OwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gMTI4IGFuZCAyNTUtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfc3pfMjU2XzUxMTsJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBiZXR3ZWVuIDI1NiBhbmQgNTExLWJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3N6XzUxMl8xMDIzOwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gNTEyIGFuZCAxMDIzLWJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3N6XzEwMjRfMTUxODsJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBiZXR3ZWVuIDEwMjQgYW5kIDE1MTgtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfc3pfMTUxOV9tYXg7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBhcmUgYmV0d2VlbiAxNTE5LWJ5dGUgYW5kIE1UVS4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3N6X292OwkJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBtb3JlIHRoYW4gTVRVIHNpemUgdHJ1bmNhdGVkIGJ5IFNlbGVuZS4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3J4Zl9vdjsJLyogVGhlIG51bWJlciBvZiBmcmFtZSBkcm9wcGVkIGR1ZSB0byBvY2N1cnJlbmNlIG9mIFJYIEZJRk8gb3ZlcmZsb3cuICovCisJdW5zaWduZWQgbG9uZyByeF9ycmRfb3Y7CS8qIFRoZSBudW1iZXIgb2YgZnJhbWUgZHJvcHBlZCBkdWUgdG8gb2NjdXJyZW5jZSBvZiBSUkQgb3ZlcmZsb3cuICovCisJdW5zaWduZWQgbG9uZyByeF9hbGlnbl9lcnI7CS8qIEFsaWdubWVudCBFcnJvciAqLworCXVuc2lnbmVkIGxvbmcgcnhfYmNhc3RfYnl0ZV9jbnQ7IC8qIFRoZSBieXRlIGNvdW50IG9mIGJyb2FkY2FzdCBwYWNrZXQgcmVjZWl2ZWQsIGV4Y2x1ZGluZyBGQ1MuICovCisJdW5zaWduZWQgbG9uZyByeF9tY2FzdF9ieXRlX2NudDsgLyogVGhlIGJ5dGUgY291bnQgb2YgbXVsdGljYXN0IHBhY2tldCByZWNlaXZlZCwgZXhjbHVkaW5nIEZDUy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2Vycl9hZGRyOwkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgZHJvcHBlZCBkdWUgdG8gYWRkcmVzcyBmaWx0ZXJpbmcuICovCisKKwkvKiB0eCAqLworCXVuc2lnbmVkIGxvbmcgdHhfb2s7CQkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgcGFja2V0IHRyYW5zbWl0dGVkLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfYmNhc3Q7CQkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYnJvYWRjYXN0IHBhY2tldCB0cmFuc21pdHRlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X21jYXN0OwkJLyogVGhlIG51bWJlciBvZiBnb29kIG11bHRpY2FzdCBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCisJdW5zaWduZWQgbG9uZyB0eF9wYXVzZTsJCS8qIFRoZSBudW1iZXIgb2YgUGF1c2UgcGFja2V0IHRyYW5zbWl0dGVkLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfZXhjX2RlZmVyOwkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgd2l0aCBleGNlc3NpdmUgZGVmZXJyYWwuICovCisJdW5zaWduZWQgbG9uZyB0eF9jdHJsOwkJLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkIGlzIGEgY29udHJvbCBmcmFtZSwgZXhjbHVkaW5nIFBhdXNlIGZyYW1lLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfZGVmZXI7CQkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBpcyBkZWZlcnJlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X2J5dGVfY250OwkvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgdHJhbnNtaXR0ZWQuIEZDUyBpcyBOT1QgaW5jbHVkZWQuICovCisJdW5zaWduZWQgbG9uZyB0eF9zel82NDsJCS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgNjQgYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfc3pfNjVfMTI3OwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHRyYW5zbWl0dGVkIHRoYXQgYXJlIGJldHdlZW4gNjUgYW5kIDEyNy1ieXRlIGxvbmcuICovCisJdW5zaWduZWQgbG9uZyB0eF9zel8xMjhfMjU1OwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHRyYW5zbWl0dGVkIHRoYXQgYXJlIGJldHdlZW4gMTI4IGFuZCAyNTUtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfc3pfMjU2XzUxMTsJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGFyZSBiZXR3ZWVuIDI1NiBhbmQgNTExLWJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3N6XzUxMl8xMDIzOwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHRyYW5zbWl0dGVkIHRoYXQgYXJlIGJldHdlZW4gNTEyIGFuZCAxMDIzLWJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3N6XzEwMjRfMTUxODsJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGFyZSBiZXR3ZWVuIDEwMjQgYW5kIDE1MTgtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfc3pfMTUxOV9tYXg7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgYmV0d2VlbiAxNTE5LWJ5dGUgYW5kIE1UVS4gKi8KKwl1bnNpZ25lZCBsb25nIHR4XzFfY29sOwkJLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHN1YnNlcXVlbnRseSB0cmFuc21pdHRlZCBzdWNjZXNzZnVsbHkgd2l0aCBhIHNpbmdsZSBwcmlvciBjb2xsaXNpb24uICovCisJdW5zaWduZWQgbG9uZyB0eF8yX2NvbDsJCS8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyBzdWJzZXF1ZW50bHkgdHJhbnNtaXR0ZWQgc3VjY2Vzc2Z1bGx5IHdpdGggbXVsdGlwbGUgcHJpb3IgY29sbGlzaW9ucy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X2xhdGVfY29sOwkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgd2l0aCBsYXRlIGNvbGxpc2lvbnMuICovCisJdW5zaWduZWQgbG9uZyB0eF9hYm9ydF9jb2w7CS8qIFRoZSBudW1iZXIgb2YgdHJhbnNtaXQgcGFja2V0cyBhYm9ydGVkIGR1ZSB0byBleGNlc3NpdmUgY29sbGlzaW9ucy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3VuZGVycnVuOwkvKiBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0IHBhY2tldHMgYWJvcnRlZCBkdWUgdG8gdHJhbnNtaXQgRklGTyB1bmRlcnJ1biwgb3IgVFJEIEZJRk8gdW5kZXJydW4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3JkX2VvcDsJLyogVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHJlYWQgYmV5b25kIHRoZSBFT1AgaW50byB0aGUgbmV4dCBmcmFtZSBhcmVhIHdoZW4gVFJEIHdhcyBub3Qgd3JpdHRlbiB0aW1lbHkgKi8KKwl1bnNpZ25lZCBsb25nIHR4X2xlbl9lcnI7CS8qIFRoZSBudW1iZXIgb2YgdHJhbnNtaXQgcGFja2V0cyB3aXRoIGxlbmd0aCBmaWVsZCBkb2VzIE5PVCBtYXRjaCB0aGUgYWN0dWFsIGZyYW1lIHNpemUuICovCisJdW5zaWduZWQgbG9uZyB0eF90cnVuYzsJCS8qIFRoZSBudW1iZXIgb2YgdHJhbnNtaXQgcGFja2V0cyB0cnVuY2F0ZWQgZHVlIHRvIHNpemUgZXhjZWVkaW5nIE1UVS4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X2JjYXN0X2J5dGU7CS8qIFRoZSBieXRlIGNvdW50IG9mIGJyb2FkY2FzdCBwYWNrZXQgdHJhbnNtaXR0ZWQsIGV4Y2x1ZGluZyBGQ1MuICovCisJdW5zaWduZWQgbG9uZyB0eF9tY2FzdF9ieXRlOwkvKiBUaGUgYnl0ZSBjb3VudCBvZiBtdWx0aWNhc3QgcGFja2V0IHRyYW5zbWl0dGVkLCBleGNsdWRpbmcgRkNTLiAqLworfTsKKworc3RydWN0IGF0bDFjX2h3IHsKKwl1OCBfX2lvbWVtICAgICAgKmh3X2FkZHI7ICAgICAgICAgICAgLyogaW5uZXIgcmVnaXN0ZXIgYWRkcmVzcyAqLworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyOworCWVudW0gYXRsMWNfbmljX3R5cGUgIG5pY190eXBlOworCWVudW0gYXRsMWNfZG1hX29yZGVyIGRtYV9vcmRlcjsKKwllbnVtIGF0bDFjX2RtYV9yY2IgICByY2JfdmFsdWU7CisJZW51bSBhdGwxY19kbWFfcmVxX2Jsb2NrIGRtYXJfYmxvY2s7CisJZW51bSBhdGwxY19kbWFfcmVxX2Jsb2NrIGRtYXdfYmxvY2s7CisKKwl1MTYgZGV2aWNlX2lkOworCXUxNiB2ZW5kb3JfaWQ7CisJdTE2IHN1YnN5c3RlbV9pZDsKKwl1MTYgc3Vic3lzdGVtX3ZlbmRvcl9pZDsKKwl1OCByZXZpc2lvbl9pZDsKKworCXUzMiBpbnRyX21hc2s7CisJdTggZG1hd19kbHlfY250OworCXU4IGRtYXJfZGx5X2NudDsKKworCXU4IHByZWFtYmxlX2xlbjsKKwl1MTYgbWF4X2ZyYW1lX3NpemU7CisJdTE2IG1pbl9mcmFtZV9zaXplOworCisJZW51bSBhdGwxY19tYWNfc3BlZWQgbWFjX3NwZWVkOworCWJvb2wgbWFjX2R1cGxleDsKKwlib29sIGhpYmVybmF0ZTsKKwl1MTYgbWVkaWFfdHlwZTsKKyNkZWZpbmUgTUVESUFfVFlQRV9BVVRPX1NFTlNPUiAgMAorI2RlZmluZSBNRURJQV9UWVBFXzEwME1fRlVMTCAgICAxCisjZGVmaW5lIE1FRElBX1RZUEVfMTAwTV9IQUxGICAgIDIKKyNkZWZpbmUgTUVESUFfVFlQRV8xME1fRlVMTCAgICAgMworI2RlZmluZSBNRURJQV9UWVBFXzEwTV9IQUxGICAgICA0CisKKwl1MTYgYXV0b25lZ19hZHZlcnRpc2VkOworCXUxNiBtaWlfYXV0b25lZ19hZHZfcmVnOworCXUxNiBtaWlfMTAwMHRfY3RybF9yZWc7CisKKwl1MTYgdHhfaW10OwkvKiBUWCBJbnRlcnJ1cHQgTW9kZXJhdG9yIHRpbWVyICggMnVzIHJlc29sdXRpb24pICovCisJdTE2IHJ4X2ltdDsJLyogUlggSW50ZXJydXB0IE1vZGVyYXRvciB0aW1lciAoIDJ1cyByZXNvbHV0aW9uKSAqLworCXUxNiBpY3Q7ICAgICAgICAvKiBJbnRlcnJ1cHQgQ2xlYXIgdGltZXIgKDJ1cyByZXNvbHV0aW9uKSAqLworCXUxNiBjdHJsX2ZsYWdzOworI2RlZmluZSBBVEwxQ19JTlRSX0NMRUFSX09OX1JFQUQJMHgwMDAxCisjZGVmaW5lIEFUTDFDX0lOVFJfTU9EUlRfRU5BQkxFCSAJMHgwMDAyCisjZGVmaW5lIEFUTDFDX0NNQl9FTkFCTEUJCTB4MDAwNAorI2RlZmluZSBBVEwxQ19TTUJfRU5BQkxFCQkweDAwMTAKKyNkZWZpbmUgQVRMMUNfVFhRX01PREVfRU5IQU5DRQkJMHgwMDIwCisjZGVmaW5lIEFUTDFDX1JYX0lQVjZfQ0hLU1VNCQkweDAwNDAKKyNkZWZpbmUgQVRMMUNfQVNQTV9MMFNfU1VQUE9SVAkJMHgwMDgwCisjZGVmaW5lIEFUTDFDX0FTUE1fTDFfU1VQUE9SVAkJMHgwMTAwCisjZGVmaW5lIEFUTDFDX0FTUE1fQ1RSTF9NT04JCTB4MDIwMAorI2RlZmluZSBBVEwxQ19ISUJfRElTQUJMRQkJMHgwNDAwCisjZGVmaW5lIEFUTDFDX0xJTktfQ0FQXzEwMDBNCQkweDA4MDAKKyNkZWZpbmUgQVRMMUNfRlBHQV9WRVJTSU9OCQkweDgwMDAKKwl1MTYgY21iX3RwZDsKKwl1MTYgY21iX3JyZDsKKwl1MTYgY21iX3J4X3RpbWVyOyAvKiAydXMgcmVzb2x1dGlvbiAqLworCXUxNiBjbWJfdHhfdGltZXI7CisJdTMyIHNtYl90aW1lcjsKKworCXUxNiBycmRfdGhyZXNoOyAvKiBUaHJlc2hvbGQgb2YgbnVtYmVyIG9mIFJSRCBwcm9kdWNlZCB0byB0cmlnZ2VyCisJCQkgIGludGVycnVwdCByZXF1ZXN0ICovCisJdTE2IHRwZF90aHJlc2g7CisJdTggdHBkX2J1cnN0OyAgIC8qIE51bWJlciBvZiBUUEQgdG8gcHJlZmV0Y2ggaW4gY2FjaGUtYWxpZ25lZCBidXJzdC4gKi8KKwl1OCByZmRfYnVyc3Q7CisJZW51bSBhdGwxY19yc3NfdHlwZSByc3NfdHlwZTsKKwllbnVtIGF0bDFjX3Jzc19tb2RlIHJzc19tb2RlOworCXU4IHJzc19oYXNoX2JpdHM7CisJdTMyIGJhc2VfY3B1OworCXUzMiBpbmRpcmVjdF90YWI7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHBlcm1fbWFjX2FkZHJbRVRIX0FMRU5dOworCisJYm9vbCBwaHlfY29uZmlndXJlZDsKKwlib29sIHJlX2F1dG9uZWc7CisJYm9vbCBlbWlfY2E7Cit9OworCisvKgorICogYXRsMWNfcmluZ19oZWFkZXIgcmVwcmVzZW50cyBhIHNpbmdsZSwgY29udGlndW91cyBibG9jayBvZiBETUEgc3BhY2UKKyAqIG1hcHBlZCBmb3IgdGhlIHRocmVlIGRlc2NyaXB0b3IgcmluZ3MgKHRwZCwgcmZkLCBycmQpIGFuZCB0aGUgdHdvCisgKiBtZXNzYWdlIGJsb2NrcyAoY21iLCBzbWIpIGRlc2NyaWJlZCBiZWxvdworICovCitzdHJ1Y3QgYXRsMWNfcmluZ19oZWFkZXIgeworCXZvaWQgKmRlc2M7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlkbWFfYWRkcl90IGRtYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MqLworCXVuc2lnbmVkIGludCBzaXplOwkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KK307CisKKy8qCisgKiBhdGwxY19idWZmZXIgaXMgd3JhcHBlciBhcm91bmQgYSBwb2ludGVyIHRvIGEgc29ja2V0IGJ1ZmZlcgorICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgc2tiCisgKi8KK3N0cnVjdCBhdGwxY19idWZmZXIgeworCXN0cnVjdCBza19idWZmICpza2I7CS8qIHNvY2tldCBidWZmZXIgKi8KKwl1MTYgbGVuZ3RoOwkJLyogcnggYnVmZmVyIGxlbmd0aCAqLworCXUxNiBzdGF0ZTsJCS8qIHN0YXRlIG9mIGJ1ZmZlciAqLworI2RlZmluZSBBVEwxX0JVRkZFUl9GUkVFCTAKKyNkZWZpbmUgQVRMMV9CVUZGRVJfQlVTWQkxCisJZG1hX2FkZHJfdCBkbWE7Cit9OworCisvKiB0cmFuc2ltaXQgcGFja2V0IGRlc2NyaXB0b3IgKHRwZCkgcmluZyAqLworc3RydWN0IGF0bDFjX3RwZF9yaW5nIHsKKwl2b2lkICpkZXNjOwkJLyogZGVzY3JpcHRvciByaW5nIHZpcnR1YWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QgZG1hOwkJLyogZGVzY3JpcHRvciByaW5nIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MTYgc2l6ZTsJCS8qIGRlc2NyaXB0b3IgcmluZyBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1MTYgY291bnQ7CQkvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KKwl1MTYgbmV4dF90b191c2U7IAkvKiB0aGlzIGlzIHByb3RlY3RkIGJ5IGFkYXB0ZXItPnR4X2xvY2sgKi8KKwlhdG9taWNfdCBuZXh0X3RvX2NsZWFuOworCXN0cnVjdCBhdGwxY19idWZmZXIgKmJ1ZmZlcl9pbmZvOworfTsKKworLyogcmVjZWl2ZSBmcmVlIGRlc2NyaXB0b3IgKHJmZCkgcmluZyAqLworc3RydWN0IGF0bDFjX3JmZF9yaW5nIHsKKwl2b2lkICpkZXNjOwkJLyogZGVzY3JpcHRvciByaW5nIHZpcnR1YWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QgZG1hOwkJLyogZGVzY3JpcHRvciByaW5nIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MTYgc2l6ZTsJCS8qIGRlc2NyaXB0b3IgcmluZyBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1MTYgY291bnQ7CQkvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KKwl1MTYgbmV4dF90b191c2U7CisJdTE2IG5leHRfdG9fY2xlYW47CisJc3RydWN0IGF0bDFjX2J1ZmZlciAqYnVmZmVyX2luZm87Cit9OworCisvKiByZWNlaXZlIHJldHVybiBkZXNjaXB0b3IgKHJyZCkgcmluZyAqLworc3RydWN0IGF0bDFjX3JyZF9yaW5nIHsKKwl2b2lkICpkZXNjOwkJLyogZGVzY3JpcHRvciByaW5nIHZpcnR1YWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QgZG1hOwkJLyogZGVzY3JpcHRvciByaW5nIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MTYgc2l6ZTsJCS8qIGRlc2NyaXB0b3IgcmluZyBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1MTYgY291bnQ7CQkvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KKwl1MTYgbmV4dF90b191c2U7CisJdTE2IG5leHRfdG9fY2xlYW47Cit9OworCitzdHJ1Y3QgYXRsMWNfY21iIHsKKwl2b2lkICpjbWI7CisJZG1hX2FkZHJfdCBkbWE7Cit9OworCitzdHJ1Y3QgYXRsMWNfc21iIHsKKwl2b2lkICpzbWI7CisJZG1hX2FkZHJfdCBkbWE7Cit9OworCisvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgYXRsMWNfYWRhcHRlciB7CisJc3RydWN0IG5ldF9kZXZpY2UgICAqbmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICAgICAgKnBkZXY7CisJc3RydWN0IHZsYW5fZ3JvdXAgICAqdmxncnA7CisJc3RydWN0IG5hcGlfc3RydWN0ICBuYXBpOworCXN0cnVjdCBhdGwxY19odyAgICAgICAgaHc7CisJc3RydWN0IGF0bDFjX2h3X3N0YXRzICBod19zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CisJc3RydWN0IG1paV9pZl9pbmZvICBtaWk7ICAgIC8qIE1JSSBpbnRlcmZhY2UgaW5mbyAqLworCXUxNiByeF9idWZmZXJfbGVuOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgX19BVF9URVNUSU5HICAgICAgICAweDAwMDEKKyNkZWZpbmUgX19BVF9SRVNFVFRJTkcgICAgICAweDAwMDIKKyNkZWZpbmUgX19BVF9ET1dOICAgICAgICAgICAweDAwMDMKKwl1MzIgbXNnX2VuYWJsZTsKKworCWJvb2wgaGF2ZV9tc2k7CisJdTMyIHdvbDsKKwl1MTYgbGlua19zcGVlZDsKKwl1MTYgbGlua19kdXBsZXg7CisKKwlzcGlubG9ja190IG1kaW9fbG9jazsKKwlzcGlubG9ja190IHR4X2xvY2s7CisJYXRvbWljX3QgaXJxX3NlbTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX2NoZ190YXNrOworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHBoeV9jb25maWdfdGltZXI7CisKKwkvKiBBbGwgRGVzY3JpcHRvciBtZW1vcnkgKi8KKwlzdHJ1Y3QgYXRsMWNfcmluZ19oZWFkZXIgcmluZ19oZWFkZXI7CisJc3RydWN0IGF0bDFjX3RwZF9yaW5nIHRwZF9yaW5nW0FUX01BWF9UUkFOU01JVF9RVUVVRV07CisJc3RydWN0IGF0bDFjX3JmZF9yaW5nIHJmZF9yaW5nW0FUX01BWF9SRUNFSVZFX1FVRVVFXTsKKwlzdHJ1Y3QgYXRsMWNfcnJkX3JpbmcgcnJkX3JpbmdbQVRfTUFYX1JFQ0VJVkVfUVVFVUVdOworCXN0cnVjdCBhdGwxY19jbWIgY21iOworCXN0cnVjdCBhdGwxY19zbWIgc21iOworCWludCBudW1fcnhfcXVldWVzOworCXUzMiBiZF9udW1iZXI7ICAgICAvKiBib2FyZCBudW1iZXI7Ki8KK307CisKKyNkZWZpbmUgQVRfV1JJVEVfUkVHKGEsIHJlZywgdmFsdWUpICggXAorCQl3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIHJlZykpKQorCisjZGVmaW5lIEFUX1dSSVRFX0ZMVVNIKGEpIChcCisJCXJlYWRsKChhKS0+aHdfYWRkcikpCisKKyNkZWZpbmUgQVRfUkVBRF9SRUcoYSwgcmVnLCBwZGF0YSkgZG8gewkJCQkJXAorCQlpZiAodW5saWtlbHkoKGEpLT5oaWJlcm5hdGUpKSB7CQkJCVwKKwkJCXJlYWRsKChhKS0+aHdfYWRkciArIHJlZyk7CQkJXAorCQkJKih1MzIgKilwZGF0YSA9IHJlYWRsKChhKS0+aHdfYWRkciArIHJlZyk7CVwKKwkJfSBlbHNlIHsJCQkJCQlcCisJCQkqKHUzMiAqKXBkYXRhID0gcmVhZGwoKGEpLT5od19hZGRyICsgcmVnKTsJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEFUX1dSSVRFX1JFR0IoYSwgcmVnLCB2YWx1ZSkgKFwKKwkJd3JpdGViKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyByZWcpKSkKKworI2RlZmluZSBBVF9SRUFEX1JFR0IoYSwgcmVnKSAoXAorCQlyZWFkYigoYSktPmh3X2FkZHIgKyByZWcpKQorCisjZGVmaW5lIEFUX1dSSVRFX1JFR1coYSwgcmVnLCB2YWx1ZSkgKFwKKwkJd3JpdGV3KCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyByZWcpKSkKKworI2RlZmluZSBBVF9SRUFEX1JFR1coYSwgcmVnKSAoXAorCQlyZWFkdygoYSktPmh3X2FkZHIgKyByZWcpKQorCisjZGVmaW5lIEFUX1dSSVRFX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCwgdmFsdWUpICggXAorCQl3cml0ZWwoKHZhbHVlKSwgKCgoYSktPmh3X2FkZHIgKyByZWcpICsgKChvZmZzZXQpIDw8IDIpKSkpCisKKyNkZWZpbmUgQVRfUkVBRF9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQpICggXAorCQlyZWFkbCgoKGEpLT5od19hZGRyICsgcmVnKSArICgob2Zmc2V0KSA8PCAyKSkpCisKK2V4dGVybiBjaGFyIGF0bDFjX2RyaXZlcl9uYW1lW107CitleHRlcm4gY2hhciBhdGwxY19kcml2ZXJfdmVyc2lvbltdOworCitleHRlcm4gaW50IGF0bDFjX3VwKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGF0bDFjX2Rvd24oc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgYXRsMWNfcmVpbml0X2xvY2tlZChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gczMyIGF0bDFjX3Jlc2V0X2h3KHN0cnVjdCBhdGwxY19odyAqaHcpOworZXh0ZXJuIHZvaWQgYXRsMWNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworI2VuZGlmIC8qIF9BVEwxQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzViNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMDkgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCisgKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKyNpbmNsdWRlICJhdGwxYy5oIgorCitzdGF0aWMgaW50IGF0bDFjX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgIHwKKwkJCSAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgIHwKKwkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCSAgIFNVUFBPUlRFRF9BdXRvbmVnICAgICAgIHwKKwkJCSAgIFNVUFBPUlRFRF9UUCk7CisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfTElOS19DQVBfMTAwME0pCisJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisKKwllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfVFA7CisKKwllY21kLT5hZHZlcnRpc2luZyB8PSBody0+YXV0b25lZ19hZHZlcnRpc2VkOworCisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+cGh5X2FkZHJlc3MgPSAwOworCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKworCWlmIChhZGFwdGVyLT5saW5rX3NwZWVkICE9IFNQRUVEXzApIHsKKwkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlpZiAoYWRhcHRlci0+bGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVgpCisJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJZWxzZQorCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJfSBlbHNlIHsKKwkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZWNtZC0+ZHVwbGV4ID0gLTE7CisJfQorCisJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bDFjX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUxNiAgYXV0b25lZ19hZHZlcnRpc2VkOworCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncykpCisJCW1zbGVlcCgxKTsKKworCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfQXV0b25lZzsKKwl9IGVsc2UgeworCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJaWYgKGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgeworCQkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKKwkJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJCSIxMDAwTSBoYWxmIGlzIGludmFsaWRcbiIpOworCQkJCWNsZWFyX2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisJCX0gZWxzZSBpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKSB7CisJCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwkJCWVsc2UKKwkJCQlhdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGY7CisJCX0gZWxzZSB7CisJCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOworCQkJZWxzZQorCQkJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOworCQl9CisJfQorCisJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgIT0gYXV0b25lZ19hZHZlcnRpc2VkKSB7CisJCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSBhdXRvbmVnX2FkdmVydGlzZWQ7CisJCWlmIChhdGwxY19yZXN0YXJ0X2F1dG9uZWcoaHcpICE9IDApIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKKwkJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZXRodG9vbCBzcGVlZC9kdXBsZXggc2V0dGluZyBmYWlsZWRcbiIpOworCQkJY2xlYXJfYml0KF9fQVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJY2xlYXJfYml0KF9fQVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGF0bDFjX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19DU1VNKSAhPSAwOworfQorCitzdGF0aWMgdTMyIGF0bDFjX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gYWRhcHRlci0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5tc2dfZW5hYmxlID0gZGF0YTsKK30KKworc3RhdGljIGludCBhdGwxY19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gQVRfUkVHU19MRU47Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpwKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiAqcmVnc19idWZmID0gcDsKKwl1MTYgcGh5X2RhdGE7CisKKwltZW1zZXQocCwgMCwgQVRfUkVHU19MRU4pOworCisJcmVncy0+dmVyc2lvbiA9IDA7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19WUERfQ0FQLCAJCSAgcCsrKTsKKwlBVF9SRUFEX1JFRyhodywgUkVHX1BNX0NUUkwsIAkJICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX0hBTEZfRFVQTFhfQ1RSTCwgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19UV1NJX0NUUkwsIAkJICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfUENJRV9ERVZfTUlTQ19DVFJMLCAgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19NQVNURVJfQ1RSTCwgCSAgcCsrKTsKKwlBVF9SRUFEX1JFRyhodywgUkVHX01BTlVBTF9USU1FUl9JTklULCAgICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfSVJRX01PRFJUX1RJTUVSX0lOSVQsIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19HUEhZX0NUUkwsIAkJICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfTElOS19DVFJMLCAJCSAgcCsrKTsKKwlBVF9SRUFEX1JFRyhodywgUkVHX0lETEVfU1RBVFVTLCAJICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfTURJT19DVFJMLCAJCSAgcCsrKTsKKwlBVF9SRUFEX1JFRyhodywgUkVHX1NFUkRFU19MT0NLLCAJICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIAkJICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX0lQR19JRkcsIAkgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19NQUNfU1RBX0FERFIsIAkgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19NQUNfU1RBX0FERFIrNCwgCSAgcCsrKTsKKwlBVF9SRUFEX1JFRyhodywgUkVHX1JYX0hBU0hfVEFCTEUsIAkgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19SWF9IQVNIX1RBQkxFKzQsIAkgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19SWFFfQ1RSTCwgCQkgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19UWFFfQ1RSTCwgCQkgIHArKyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19NVFUsIAkJICBwKyspOworCUFUX1JFQURfUkVHKGh3LCBSRUdfV09MX0NUUkwsIAkJICBwKyspOworCisJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1DUiwgJnBoeV9kYXRhKTsKKwlyZWdzX2J1ZmZbNzNdID0JKHUzMikgcGh5X2RhdGE7CisJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwlyZWdzX2J1ZmZbNzRdID0gKHUzMikgcGh5X2RhdGE7Cit9CisKK3N0YXRpYyBpbnQgYXRsMWNfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoYXRsMWNfY2hlY2tfZWVwcm9tX2V4aXN0KCZhZGFwdGVyLT5odykpCisJCXJldHVybiBBVF9FRVBST01fTEVOOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRsMWNfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ5dGVzKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiAqZWVwcm9tX2J1ZmY7CisJaW50IGZpcnN0X2R3b3JkLCBsYXN0X2R3b3JkOworCWludCByZXRfdmFsID0gMDsKKwlpbnQgaTsKKworCWlmIChlZXByb20tPmxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghYXRsMWNfY2hlY2tfZWVwcm9tX2V4aXN0KGh3KSkgLyogbm90IGV4aXN0ICovCisJCXJldHVybiAtRUlOVkFMOworCisJZWVwcm9tLT5tYWdpYyA9IGFkYXB0ZXItPnBkZXYtPnZlbmRvciB8CisJCQkoYWRhcHRlci0+cGRldi0+ZGV2aWNlIDw8IDE2KTsKKworCWZpcnN0X2R3b3JkID0gZWVwcm9tLT5vZmZzZXQgPj4gMjsKKwlsYXN0X2R3b3JkID0gKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gLSAxKSA+PiAyOworCisJZWVwcm9tX2J1ZmYgPSBrbWFsbG9jKHNpemVvZih1MzIpICoKKwkJCShsYXN0X2R3b3JkIC0gZmlyc3RfZHdvcmQgKyAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVlcHJvbV9idWZmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gZmlyc3RfZHdvcmQ7IGkgPCBsYXN0X2R3b3JkOyBpKyspIHsKKwkJaWYgKCFhdGwxY19yZWFkX2VlcHJvbShodywgaSAqIDQsICYoZWVwcm9tX2J1ZmZbaS1maXJzdF9kd29yZF0pKSkgeworCQkJa2ZyZWUoZWVwcm9tX2J1ZmYpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwltZW1jcHkoYnl0ZXMsICh1OCAqKWVlcHJvbV9idWZmICsgKGVlcHJvbS0+b2Zmc2V0ICYgMyksCisJCQllZXByb20tPmxlbik7CisJa2ZyZWUoZWVwcm9tX2J1ZmYpOworCisJcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsICBhdGwxY19kcml2ZXJfbmFtZSwgc2l6ZW9mKGRydmluZm8tPmRyaXZlcikpOworCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgYXRsMWNfZHJpdmVyX3ZlcnNpb24sCisJCXNpemVvZihkcnZpbmZvLT52ZXJzaW9uKSk7CisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgc2l6ZW9mKGRydmluZm8tPmZ3X3ZlcnNpb24pKTsKKwlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwKKwkJc2l6ZW9mKGRydmluZm8tPmJ1c19pbmZvKSk7CisJZHJ2aW5mby0+bl9zdGF0cyA9IDA7CisJZHJ2aW5mby0+dGVzdGluZm9fbGVuID0gMDsKKwlkcnZpbmZvLT5yZWdkdW1wX2xlbiA9IGF0bDFjX2dldF9yZWdzX2xlbihuZXRkZXYpOworCWRydmluZm8tPmVlZHVtcF9sZW4gPSBhdGwxY19nZXRfZWVwcm9tX2xlbihuZXRkZXYpOworfQorCitzdGF0aWMgdm9pZCBhdGwxY19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUMgfCBXQUtFX1BIWTsKKwl3b2wtPndvbG9wdHMgPSAwOworCisJaWYgKGFkYXB0ZXItPndvbCAmIEFUX1dVRkNfRVgpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1VDQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBBVF9XVUZDX01DKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgQVRfV1VGQ19CQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfQkNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIEFUX1dVRkNfTUFHKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKKwlpZiAoYWRhcHRlci0+d29sICYgQVRfV1VGQ19MTktDKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9QSFk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYXRsMWNfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHdvbC0+d29sb3B0cyAmIChXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUgfAorCQkJICAgIFdBS0VfTUNBU1QgfCBXQUtFX0JDQVNUIHwgV0FLRV9NQ0FTVCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkvKiB0aGVzZSBzZXR0aW5ncyB3aWxsIGFsd2F5cyBvdmVycmlkZSB3aGF0IHdlIGN1cnJlbnRseSBoYXZlICovCisJYWRhcHRlci0+d29sID0gMDsKKworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQorCQlhZGFwdGVyLT53b2wgfD0gQVRfV1VGQ19NQUc7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfUEhZKQorCQlhZGFwdGVyLT53b2wgfD0gQVRfV1VGQ19MTktDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRsMWNfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlhdGwxY19yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDFjX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MgICAgICAgICAgID0gYXRsMWNfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MgICAgICAgICAgID0gYXRsMWNfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gYXRsMWNfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiAgICAgICAgICAgPSBhdGwxY19nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzICAgICAgICAgICAgICAgPSBhdGwxY19nZXRfcmVncywKKwkuZ2V0X3dvbCAgICAgICAgICAgICAgICA9IGF0bDFjX2dldF93b2wsCisJLnNldF93b2wgICAgICAgICAgICAgICAgPSBhdGwxY19zZXRfd29sLAorCS5nZXRfbXNnbGV2ZWwgICAgICAgICAgID0gYXRsMWNfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgICAgICAgICAgID0gYXRsMWNfc2V0X21zZ2xldmVsLAorCS5ud2F5X3Jlc2V0ICAgICAgICAgICAgID0gYXRsMWNfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9lZXByb21fbGVuICAgICAgICAgPSBhdGwxY19nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbSAgICAgICAgICAgICA9IGF0bDFjX2dldF9lZXByb20sCisJLmdldF90eF9jc3VtICAgICAgICAgICAgPSBhdGwxY19nZXRfdHhfY3N1bSwKKwkuZ2V0X3NnICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfc2csCit9OworCit2b2lkIGF0bDFjX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZhdGwxY19ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY5Yjk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuYwpAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA3IEF0aGVyb3MgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGVyaXZlZCBmcm9tIEludGVsIGUxMDAwIGRyaXZlcgorICogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisjaW5jbHVkZSAiYXRsMWMuaCIKKworLyoKKyAqIGNoZWNrX2VlcHJvbV9leGlzdAorICogcmV0dXJuIDEgaWYgZWVwcm9tIGV4aXN0CisgKi8KK2ludCBhdGwxY19jaGVja19lZXByb21fZXhpc3Qoc3RydWN0IGF0bDFjX2h3ICpodykKK3sKKwl1MzIgZGF0YTsKKworCUFUX1JFQURfUkVHKGh3LCBSRUdfVFdTSV9ERUJVRywgJmRhdGEpOworCWlmIChkYXRhICYgVFdTSV9ERUJVR19ERVZfRVhJU1QpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRsMWNfaHdfc2V0X21hY19hZGRyKHN0cnVjdCBhdGwxY19odyAqaHcpCit7CisJdTMyIHZhbHVlOworCS8qCisJICogMDAtMEItNkEtRjYtMDAtREMKKwkgKiAwOiAgNkFGNjAwREMgMTogMDAwQgorCSAqIGxvdyBkd29yZAorCSAqLworCXZhbHVlID0gKCgodTMyKWh3LT5tYWNfYWRkclsyXSkgPDwgMjQpIHwKKwkJKCgodTMyKWh3LT5tYWNfYWRkclszXSkgPDwgMTYpIHwKKwkJKCgodTMyKWh3LT5tYWNfYWRkcls0XSkgPDwgOCkgIHwKKwkJKCgodTMyKWh3LT5tYWNfYWRkcls1XSkpIDsKKwlBVF9XUklURV9SRUdfQVJSQVkoaHcsIFJFR19NQUNfU1RBX0FERFIsIDAsIHZhbHVlKTsKKwkvKiBoaWdodCBkd29yZCAqLworCXZhbHVlID0gKCgodTMyKWh3LT5tYWNfYWRkclswXSkgPDwgOCkgfAorCQkoKCh1MzIpaHctPm1hY19hZGRyWzFdKSkgOworCUFUX1dSSVRFX1JFR19BUlJBWShodywgUkVHX01BQ19TVEFfQUREUiwgMSwgdmFsdWUpOworfQorCisvKgorICogYXRsMWNfZ2V0X3Blcm1hbmVudF9hZGRyZXNzCisgKiByZXR1cm4gMCBpZiBnZXQgdmFsaWQgbWFjIGFkZHJlc3MsCisgKi8KK3N0YXRpYyBpbnQgYXRsMWNfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKHN0cnVjdCBhdGwxY19odyAqaHcpCit7CisJdTMyIGFkZHJbMl07CisJdTMyIGk7CisJdTMyIG90cF9jdHJsX2RhdGE7CisJdTMyIHR3c2lfY3RybF9kYXRhOworCXU4ICBldGhfYWRkcltFVEhfQUxFTl07CisKKwkvKiBpbml0ICovCisJYWRkclswXSA9IGFkZHJbMV0gPSAwOworCUFUX1JFQURfUkVHKGh3LCBSRUdfT1RQX0NUUkwsICZvdHBfY3RybF9kYXRhKTsKKwlpZiAoYXRsMWNfY2hlY2tfZWVwcm9tX2V4aXN0KGh3KSkgeworCQkvKiBFbmFibGUgT1RQIENMSyAqLworCQlpZiAoIShvdHBfY3RybF9kYXRhICYgT1RQX0NUUkxfQ0xLX0VOKSkgeworCQkJb3RwX2N0cmxfZGF0YSB8PSBPVFBfQ1RSTF9DTEtfRU47CisJCQlBVF9XUklURV9SRUcoaHcsIFJFR19PVFBfQ1RSTCwgb3RwX2N0cmxfZGF0YSk7CisJCQlBVF9XUklURV9GTFVTSChodyk7CisJCQltc2xlZXAoMSk7CisJCX0KKworCQlBVF9SRUFEX1JFRyhodywgUkVHX1RXU0lfQ1RSTCwgJnR3c2lfY3RybF9kYXRhKTsKKwkJdHdzaV9jdHJsX2RhdGEgfD0gVFdTSV9DVFJMX1NXX0xEU1RBUlQ7CisJCUFUX1dSSVRFX1JFRyhodywgUkVHX1RXU0lfQ1RSTCwgdHdzaV9jdHJsX2RhdGEpOworCQlmb3IgKGkgPSAwOyBpIDwgQVRfVFdTSV9FRVBST01fVElNRU9VVDsgaSsrKSB7CisJCQltc2xlZXAoMTApOworCQkJQVRfUkVBRF9SRUcoaHcsIFJFR19UV1NJX0NUUkwsICZ0d3NpX2N0cmxfZGF0YSk7CisJCQlpZiAoKHR3c2lfY3RybF9kYXRhICYgVFdTSV9DVFJMX1NXX0xEU1RBUlQpID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPj0gQVRfVFdTSV9FRVBST01fVElNRU9VVCkKKwkJCXJldHVybiAtMTsKKwl9CisJLyogRGlzYWJsZSBPVFBfQ0xLICovCisJaWYgKG90cF9jdHJsX2RhdGEgJiBPVFBfQ1RSTF9DTEtfRU4pIHsKKwkJb3RwX2N0cmxfZGF0YSAmPSB+T1RQX0NUUkxfQ0xLX0VOOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19PVFBfQ1RSTCwgb3RwX2N0cmxfZGF0YSk7CisJCUFUX1dSSVRFX0ZMVVNIKGh3KTsKKwkJbXNsZWVwKDEpOworCX0KKworCS8qIG1heWJlIE1BQy1hZGRyZXNzIGlzIGZyb20gQklPUyAqLworCUFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX1NUQV9BRERSLCAmYWRkclswXSk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19NQUNfU1RBX0FERFIgKyA0LCAmYWRkclsxXSk7CisJKih1MzIgKikgJmV0aF9hZGRyWzJdID0gc3dhYjMyKGFkZHJbMF0pOworCSoodTE2ICopICZldGhfYWRkclswXSA9IHN3YWIxNigqKHUxNiAqKSZhZGRyWzFdKTsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGV0aF9hZGRyKSkgeworCQltZW1jcHkoaHctPnBlcm1fbWFjX2FkZHIsIGV0aF9hZGRyLCBFVEhfQUxFTik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworYm9vbCBhdGwxY19yZWFkX2VlcHJvbShzdHJ1Y3QgYXRsMWNfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKnBfdmFsdWUpCit7CisJaW50IGk7CisJaW50IHJldCA9IGZhbHNlOworCXUzMiBvdHBfY3RybF9kYXRhOworCXUzMiBjb250cm9sOworCXUzMiBkYXRhOworCisJaWYgKG9mZnNldCAmIDMpCisJCXJldHVybiByZXQ7IC8qIGFkZHJlc3MgZG8gbm90IGFsaWduICovCisKKwlBVF9SRUFEX1JFRyhodywgUkVHX09UUF9DVFJMLCAmb3RwX2N0cmxfZGF0YSk7CisJaWYgKCEob3RwX2N0cmxfZGF0YSAmIE9UUF9DVFJMX0NMS19FTikpCisJCUFUX1dSSVRFX1JFRyhodywgUkVHX09UUF9DVFJMLAorCQkJCShvdHBfY3RybF9kYXRhIHwgT1RQX0NUUkxfQ0xLX0VOKSk7CisKKwlBVF9XUklURV9SRUcoaHcsIFJFR19FRVBST01fREFUQV9MTywgMCk7CisJY29udHJvbCA9IChvZmZzZXQgJiBFRVBST01fQ1RSTF9BRERSX01BU0spIDw8IEVFUFJPTV9DVFJMX0FERFJfU0hJRlQ7CisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfRUVQUk9NX0NUUkwsIGNvbnRyb2wpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJdWRlbGF5KDEwMCk7CisJCUFUX1JFQURfUkVHKGh3LCBSRUdfRUVQUk9NX0NUUkwsICZjb250cm9sKTsKKwkJaWYgKGNvbnRyb2wgJiBFRVBST01fQ1RSTF9SVykKKwkJCWJyZWFrOworCX0KKwlpZiAoY29udHJvbCAmIEVFUFJPTV9DVFJMX1JXKSB7CisJCUFUX1JFQURfUkVHKGh3LCBSRUdfRUVQUk9NX0NUUkwsICZkYXRhKTsKKwkJQVRfUkVBRF9SRUcoaHcsIFJFR19FRVBST01fREFUQV9MTywgcF92YWx1ZSk7CisJCWRhdGEgPSBkYXRhICYgMHhGRkZGOworCQkqcF92YWx1ZSA9IHN3YWIzMigoZGF0YSA8PCAxNikgfCAoKnBfdmFsdWUgPj4gMTYpKTsKKwkJcmV0ID0gdHJ1ZTsKKwl9CisJaWYgKCEob3RwX2N0cmxfZGF0YSAmIE9UUF9DVFJMX0NMS19FTikpCisJCUFUX1dSSVRFX1JFRyhodywgUkVHX09UUF9DVFJMLCBvdHBfY3RybF9kYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisvKgorICogUmVhZHMgdGhlIGFkYXB0ZXIncyBNQUMgYWRkcmVzcyBmcm9tIHRoZSBFRVBST00KKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICovCitpbnQgYXRsMWNfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgYXRsMWNfaHcgKmh3KQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gYXRsMWNfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKGh3KTsKKwlpZiAoZXJyKQorCQlyYW5kb21fZXRoZXJfYWRkcihody0+cGVybV9tYWNfYWRkcik7CisKKwltZW1jcHkoaHctPm1hY19hZGRyLCBody0+cGVybV9tYWNfYWRkciwgc2l6ZW9mKGh3LT5wZXJtX21hY19hZGRyKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdGwxY19oYXNoX21jX2FkZHIKKyAqICBwdXJwb3NlCisgKiAgICAgIHNldCBoYXNoIHZhbHVlIGZvciBhIG11bHRpY2FzdCBhZGRyZXNzCisgKiAgICAgIGhhc2ggY2FsY3UgcHJvY2Vzc2luZyA6CisgKiAgICAgICAgICAxLiBjYWxjdSAzMmJpdCBDUkMgZm9yIG11bHRpY2FzdCBhZGRyZXNzCisgKiAgICAgICAgICAyLiByZXZlcnNlIGNyYyB3aXRoIE1TQiB0byBMU0IKKyAqLwordTMyIGF0bDFjX2hhc2hfbWNfYWRkcihzdHJ1Y3QgYXRsMWNfaHcgKmh3LCB1OCAqbWNfYWRkcikKK3sKKwl1MzIgY3JjMzI7CisJdTMyIHZhbHVlID0gMDsKKwlpbnQgaTsKKworCWNyYzMyID0gZXRoZXJfY3JjX2xlKDYsIG1jX2FkZHIpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQl2YWx1ZSB8PSAoKChjcmMzMiA+PiBpKSAmIDEpIDw8ICgzMSAtIGkpKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIFNldHMgdGhlIGJpdCBpbiB0aGUgbXVsdGljYXN0IHRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGhhc2ggdmFsdWUuCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogaGFzaF92YWx1ZSAtIE11bHRpY2FzdCBhZGRyZXNzIGhhc2ggdmFsdWUKKyAqLwordm9pZCBhdGwxY19oYXNoX3NldChzdHJ1Y3QgYXRsMWNfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSkKK3sKKwl1MzIgaGFzaF9iaXQsIGhhc2hfcmVnOworCXUzMiBtdGE7CisKKwkvKgorCSAqIFRoZSBIQVNIIFRhYmxlICBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDIgMzItYml0IHJlZ2lzdGVycy4KKwkgKiBJdCBpcyB0cmVhdGVkIGxpa2UgYW4gYXJyYXkgb2YgNjQgYml0cy4gIFdlIHdhbnQgdG8gc2V0CisJICogYml0IEJpdEFycmF5W2hhc2hfdmFsdWVdLiBTbyB3ZSBmaWd1cmUgb3V0IHdoYXQgcmVnaXN0ZXIKKwkgKiB0aGUgYml0IGlzIGluLCByZWFkIGl0LCBPUiBpbiB0aGUgbmV3IGJpdCwgdGhlbiB3cml0ZQorCSAqIGJhY2sgdGhlIG5ldyB2YWx1ZS4gIFRoZSByZWdpc3RlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorCSAqIHVwcGVyIGJpdCBvZiB0aGUgaGFzaCB2YWx1ZSBhbmQgdGhlIGJpdCB3aXRoaW4gdGhhdAorCSAqIHJlZ2lzdGVyIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlciA1IGJpdHMgb2YgdGhlIHZhbHVlLgorCSAqLworCWhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gMzEpICYgMHgxOworCWhhc2hfYml0ID0gKGhhc2hfdmFsdWUgPj4gMjYpICYgMHgxRjsKKworCW10YSA9IEFUX1JFQURfUkVHX0FSUkFZKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgaGFzaF9yZWcpOworCisJbXRhIHw9ICgxIDw8IGhhc2hfYml0KTsKKworCUFUX1dSSVRFX1JFR19BUlJBWShodywgUkVHX1JYX0hBU0hfVEFCTEUsIGhhc2hfcmVnLCBtdGEpOworfQorCisvKgorICogUmVhZHMgdGhlIHZhbHVlIGZyb20gYSBQSFkgcmVnaXN0ZXIKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiByZWdfYWRkciAtIGFkZHJlc3Mgb2YgdGhlIFBIWSByZWdpc3RlciB0byByZWFkCisgKi8KK2ludCBhdGwxY19yZWFkX3BoeV9yZWcoc3RydWN0IGF0bDFjX2h3ICpodywgdTE2IHJlZ19hZGRyLCB1MTYgKnBoeV9kYXRhKQoreworCXUzMiB2YWw7CisJaW50IGk7CisKKwl2YWwgPSAoKHUzMikocmVnX2FkZHIgJiBNRElPX1JFR19BRERSX01BU0spKSA8PCBNRElPX1JFR19BRERSX1NISUZUIHwKKwkJTURJT19TVEFSVCB8IE1ESU9fU1VQX1BSRUFNQkxFIHwgTURJT19SVyB8CisJCU1ESU9fQ0xLXzI1XzQgPDwgTURJT19DTEtfU0VMX1NISUZUOworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTURJT19DVFJMLCB2YWwpOworCisJZm9yIChpID0gMDsgaSA8IE1ESU9fV0FJVF9USU1FUzsgaSsrKSB7CisJCXVkZWxheSgyKTsKKwkJQVRfUkVBRF9SRUcoaHcsIFJFR19NRElPX0NUUkwsICZ2YWwpOworCQlpZiAoISh2YWwgJiAoTURJT19TVEFSVCB8IE1ESU9fQlVTWSkpKQorCQkJYnJlYWs7CisJfQorCWlmICghKHZhbCAmIChNRElPX1NUQVJUIHwgTURJT19CVVNZKSkpIHsKKwkJKnBoeV9kYXRhID0gKHUxNil2YWw7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFdyaXRlcyBhIHZhbHVlIHRvIGEgUEhZIHJlZ2lzdGVyCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogcmVnX2FkZHIgLSBhZGRyZXNzIG9mIHRoZSBQSFkgcmVnaXN0ZXIgdG8gd3JpdGUKKyAqIGRhdGEgLSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBQSFkKKyAqLworaW50IGF0bDFjX3dyaXRlX3BoeV9yZWcoc3RydWN0IGF0bDFjX2h3ICpodywgdTMyIHJlZ19hZGRyLCB1MTYgcGh5X2RhdGEpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKworCXZhbCA9ICgodTMyKShwaHlfZGF0YSAmIE1ESU9fREFUQV9NQVNLKSkgPDwgTURJT19EQVRBX1NISUZUICAgfAorCSAgICAgICAocmVnX2FkZHIgJiBNRElPX1JFR19BRERSX01BU0spIDw8IE1ESU9fUkVHX0FERFJfU0hJRlQgfAorCSAgICAgICBNRElPX1NVUF9QUkVBTUJMRSB8IE1ESU9fU1RBUlQgfAorCSAgICAgICBNRElPX0NMS18yNV80IDw8IE1ESU9fQ0xLX1NFTF9TSElGVDsKKworCUFUX1dSSVRFX1JFRyhodywgUkVHX01ESU9fQ1RSTCwgdmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBNRElPX1dBSVRfVElNRVM7IGkrKykgeworCQl1ZGVsYXkoMik7CisJCUFUX1JFQURfUkVHKGh3LCBSRUdfTURJT19DVFJMLCAmdmFsKTsKKwkJaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkKKwkJCWJyZWFrOworCX0KKworCWlmICghKHZhbCAmIChNRElPX1NUQVJUIHwgTURJT19CVVNZKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogQ29uZmlndXJlcyBQSFkgYXV0b25lZyBhbmQgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQgc2V0dGluZ3MKKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICovCitzdGF0aWMgaW50IGF0bDFjX3BoeV9zZXR1cF9hZHYoc3RydWN0IGF0bDFjX2h3ICpodykKK3sKKwl1MTYgbWlpX2Fkdl9kYXRhID0gQURWRVJUSVNFX0RFRkFVTFRfQ0FQICYgfkFEVkVSVElTRV9TUEVFRF9NQVNLOworCXUxNiBtaWlfZ2lnYV9jdHJsX2RhdGEgPSBHSUdBX0NSXzEwMDBUX0RFRkFVTFRfQ0FQICYKKwkJCQl+R0lHQV9DUl8xMDAwVF9TUEVFRF9NQVNLOworCisJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikKKwkJbWlpX2Fkdl9kYXRhIHw9IEFEVkVSVElTRV8xMEhBTEY7CisJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkKKwkJbWlpX2Fkdl9kYXRhIHw9IEFEVkVSVElTRV8xMEZVTEw7CisJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpCisJCW1paV9hZHZfZGF0YSB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKKwlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKKwkJbWlpX2Fkdl9kYXRhIHw9IEFEVkVSVElTRV8xMDBGVUxMOworCisJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VEX0F1dG9uZWcpCisJCW1paV9hZHZfZGF0YSB8PSBBRFZFUlRJU0VfMTBIQUxGICB8IEFEVkVSVElTRV8xMEZVTEwgfAorCQkJCUFEVkVSVElTRV8xMDBIQUxGIHwgQURWRVJUSVNFXzEwMEZVTEw7CisKKwlpZiAoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19MSU5LX0NBUF8xMDAwTSkgeworCQlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCisJCQltaWlfZ2lnYV9jdHJsX2RhdGEgfD0gQURWRVJUSVNFXzEwMDBIQUxGOworCQlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCisJCQltaWlfZ2lnYV9jdHJsX2RhdGEgfD0gQURWRVJUSVNFXzEwMDBGVUxMOworCQlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRURfQXV0b25lZykKKwkJCW1paV9naWdhX2N0cmxfZGF0YSB8PSBBRFZFUlRJU0VfMTAwMEhBTEYgfAorCQkJCQlBRFZFUlRJU0VfMTAwMEZVTEw7CisJfQorCisJaWYgKGF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9BRFZFUlRJU0UsIG1paV9hZHZfZGF0YSkgIT0gMCB8fAorCSAgICBhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfR0lHQV9DUiwgbWlpX2dpZ2FfY3RybF9kYXRhKSAhPSAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRsMWNfcGh5X2Rpc2FibGUoc3RydWN0IGF0bDFjX2h3ICpodykKK3sKKwlBVF9XUklURV9SRUdXKGh3LCBSRUdfR1BIWV9DVFJMLAorCQkJR1BIWV9DVFJMX1BXX1dPTF9ESVMgfCBHUEhZX0NUUkxfRVhUX1JFU0VUKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfcGh5X21hZ2ljX2RhdGEoc3RydWN0IGF0bDFjX2h3ICpodykKK3sKKwl1MTYgZGF0YTsKKworCWRhdGEgPSBBTkFfTE9PUF9TRUxfMTBCVCB8IEFOQV9FTl9NQVNLX1RCIHwgQU5BX0VOXzEwQlRfSURMRSB8CisJCSgoMSAmIEFOQV9JTlRFUlZBTF9TRUxfVElNRVJfTUFTSykgPDwKKwkJQU5BX0lOVEVSVkFMX1NFTF9USU1FUl9TSElGVCk7CisKKwlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIE1JSV9BTkFfQ1RSTF8xOCk7CisJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCBkYXRhKTsKKworCWRhdGEgPSAoMiAmIEFOQV9TRVJERVNfQ0RSX0JXX01BU0spIHwgQU5BX01TX1BBRF9EQkcgfAorCQlBTkFfU0VSREVTX0VOX0RFRU0gfCBBTkFfU0VSREVTX1NFTF9IU1AgfCBBTkFfU0VSREVTX0VOX1BMTCB8CisJCUFOQV9TRVJERVNfRU5fTENLRFQ7CisKKwlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIE1JSV9BTkFfQ1RSTF81KTsKKwlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIGRhdGEpOworCisJZGF0YSA9ICg0NCAmIEFOQV9MT05HX0NBQkxFX1RIXzEwMF9NQVNLKSB8CisJCSgoMzMgJiBBTkFfU0hPUlRfQ0FCTEVfVEhfMTAwX01BU0spIDw8CisJCUFOQV9TSE9SVF9DQUJMRV9USF8xMDBfU0hJRlQpIHwgQU5BX0JQX0JBRF9MSU5LX0FDQ1VNIHwKKwkJQU5BX0JQX1NNQUxMX0JXOworCisJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCBNSUlfQU5BX0NUUkxfNTQpOworCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgZGF0YSk7CisKKwlkYXRhID0gKDExICYgQU5BX0lFQ0hPX0FESl9NQVNLKSB8ICgoMTEgJiBBTkFfSUVDSE9fQURKX01BU0spIDw8CisJCUFOQV9JRUNIT19BREpfMl9TSElGVCkgfCAoKDggJiBBTkFfSUVDSE9fQURKX01BU0spIDw8CisJCUFOQV9JRUNIT19BREpfMV9TSElGVCkgfCAoKDggJiBBTkFfSUVDSE9fQURKX01BU0spIDw8CisJCUFOQV9JRUNIT19BREpfMF9TSElGVCk7CisKKwlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIE1JSV9BTkFfQ1RSTF80KTsKKwlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIGRhdGEpOworCisJZGF0YSA9IEFOQV9SRVNUQVJUX0NBTCB8ICgoNyAmIEFOQV9NQU5VTF9TV0lDSF9PTl9NQVNLKSA8PAorCQlBTkFfTUFOVUxfU1dJQ0hfT05fU0hJRlQpIHwgQU5BX01BTl9FTkFCTEUgfAorCQlBTkFfU0VMX0hTUCB8IEFOQV9FTl9IQiB8IEFOQV9PRU5fMTI1TTsKKworCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfQUREUiwgTUlJX0FOQV9DVFJMXzApOworCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgZGF0YSk7CisKKwlpZiAoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19ISUJfRElTQUJMRSkgeworCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIE1JSV9BTkFfQ1RSTF80MSk7CisJCWlmIChhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgJmRhdGEpICE9IDApCisJCQlyZXR1cm47CisJCWRhdGEgJj0gfkFOQV9UT1BfUFNfRU47CisJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgZGF0YSk7CisKKwkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCBNSUlfQU5BX0NUUkxfMTEpOworCQlpZiAoYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsICZkYXRhKSAhPSAwKQorCQkJcmV0dXJuOworCQlkYXRhICY9IH5BTkFfUFNfSElCX0VOOworCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIGRhdGEpOworCX0KK30KKworaW50IGF0bDFjX3BoeV9yZXNldChzdHJ1Y3QgYXRsMWNfaHcgKmh3KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gaHctPmFkYXB0ZXI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXUzMiBwaHlfY3RybF9kYXRhID0gR1BIWV9DVFJMX0RFRkFVTFQ7CisJdTMyIG1paV9pZXJfZGF0YSA9IElFUl9MSU5LX1VQIHwgSUVSX0xJTktfRE9XTjsKKwlpbnQgZXJyOworCisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfSElCX0RJU0FCTEUpCisJCXBoeV9jdHJsX2RhdGEgJj0gfkdQSFlfQ1RSTF9ISUJfRU47CisKKwlBVF9XUklURV9SRUcoaHcsIFJFR19HUEhZX0NUUkwsIHBoeV9jdHJsX2RhdGEpOworCUFUX1dSSVRFX0ZMVVNIKGh3KTsKKwltc2xlZXAoNDApOworCXBoeV9jdHJsX2RhdGEgfD0gR1BIWV9DVFJMX0VYVF9SRVNFVDsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19HUEhZX0NUUkwsIHBoeV9jdHJsX2RhdGEpOworCUFUX1dSSVRFX0ZMVVNIKGh3KTsKKwltc2xlZXAoMTApOworCisJLypFbmFibGUgUEhZIExpbmtDaGFuZ2UgSW50ZXJydXB0ICovCisJZXJyID0gYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0lFUiwgbWlpX2llcl9kYXRhKTsKKwlpZiAoZXJyKSB7CisJCWlmIChuZXRpZl9tc2dfaHcoYWRhcHRlcikpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkVycm9yIGVuYWJsZSBQSFkgbGlua0NoYW5nZSBJbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoIShody0+Y3RybF9mbGFncyAmIEFUTDFDX0ZQR0FfVkVSU0lPTikpCisJCWF0bDFjX3BoeV9tYWdpY19kYXRhKGh3KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGF0bDFjX3BoeV9pbml0KHN0cnVjdCBhdGwxY19odyAqaHcpCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKilody0+YWRhcHRlcjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHJldF92YWw7CisJdTE2IG1paV9ibWNyX2RhdGEgPSBCTUNSX1JFU0VUOworCXUxNiBwaHlfaWQxLCBwaHlfaWQyOworCisJaWYgKChhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9QSFlTSUQxLCAmcGh5X2lkMSkgIT0gMCkgfHwKKwkJKGF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX1BIWVNJRDIsICZwaHlfaWQyKSAhPSAwKSkgeworCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGdldCBwaHkgSURcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKKwljYXNlIE1FRElBX1RZUEVfQVVUT19TRU5TT1I6CisJCXJldF92YWwgPSBhdGwxY19waHlfc2V0dXBfYWR2KGh3KTsKKwkJaWYgKHJldF92YWwpIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJFcnJvciBTZXR0aW5nIHVwIEF1dG8tTmVnb3RpYXRpb25cbiIpOworCQkJcmV0dXJuIHJldF92YWw7CisJCX0KKwkJbWlpX2JtY3JfZGF0YSB8PSBCTUNSX0FVVE9fTkVHX0VOIHwgQk1DUl9SRVNUQVJUX0FVVE9fTkVHOworCQlicmVhazsKKwljYXNlIE1FRElBX1RZUEVfMTAwTV9GVUxMOgorCQltaWlfYm1jcl9kYXRhIHw9IEJNQ1JfU1BFRURfMTAwIHwgQk1DUl9GVUxMX0RVUExFWDsKKwkJYnJlYWs7CisJY2FzZSBNRURJQV9UWVBFXzEwME1fSEFMRjoKKwkJbWlpX2JtY3JfZGF0YSB8PSBCTUNSX1NQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBNRURJQV9UWVBFXzEwTV9GVUxMOgorCQltaWlfYm1jcl9kYXRhIHw9IEJNQ1JfU1BFRURfMTAgfCBCTUNSX0ZVTExfRFVQTEVYOworCQlicmVhazsKKwljYXNlIE1FRElBX1RZUEVfMTBNX0hBTEY6CisJCW1paV9ibWNyX2RhdGEgfD0gQk1DUl9TUEVFRF8xMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiV3JvbmcgTWVkaWEgdHlwZSAlZFxuIiwKKwkJCQlody0+bWVkaWFfdHlwZSk7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCisJcmV0X3ZhbCA9IGF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9CTUNSLCBtaWlfYm1jcl9kYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisJaHctPnBoeV9jb25maWd1cmVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCisvKgorICogRGV0ZWN0cyB0aGUgY3VycmVudCBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIG9mIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogc3BlZWQgLSBTcGVlZCBvZiB0aGUgY29ubmVjdGlvbgorICogZHVwbGV4IC0gRHVwbGV4IHNldHRpbmcgb2YgdGhlIGNvbm5lY3Rpb24KKyAqLworaW50IGF0bDFjX2dldF9zcGVlZF9hbmRfZHVwbGV4KHN0cnVjdCBhdGwxY19odyAqaHcsIHUxNiAqc3BlZWQsIHUxNiAqZHVwbGV4KQoreworCWludCBlcnI7CisJdTE2IHBoeV9kYXRhOworCisJLyogUmVhZCAgIFBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnaXN0ZXIgKDE3KSAqLworCWVyciA9IGF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0dJR0FfUFNTUiwgJnBoeV9kYXRhKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCEocGh5X2RhdGEgJiBHSUdBX1BTU1JfU1BEX0RQTFhfUkVTT0xWRUQpKQorCQlyZXR1cm4gLTE7CisKKwlzd2l0Y2ggKHBoeV9kYXRhICYgR0lHQV9QU1NSX1NQRUVEKSB7CisJY2FzZSBHSUdBX1BTU1JfMTAwME1CUzoKKwkJKnNwZWVkID0gU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBHSUdBX1BTU1JfMTAwTUJTOgorCQkqc3BlZWQgPSBTUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2UgIEdJR0FfUFNTUl8xME1CUzoKKwkJKnNwZWVkID0gU1BFRURfMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBoeV9kYXRhICYgR0lHQV9QU1NSX0RQTFgpCisJCSpkdXBsZXggPSBGVUxMX0RVUExFWDsKKwllbHNlCisJCSpkdXBsZXggPSBIQUxGX0RVUExFWDsKKworCXJldHVybiAwOworfQorCitpbnQgYXRsMWNfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBhdGwxY19odyAqaHcpCit7CisJaW50IGVyciA9IDA7CisJdTE2IG1paV9ibWNyX2RhdGEgPSBCTUNSX1JFU0VUOworCisJZXJyID0gYXRsMWNfcGh5X3NldHVwX2Fkdihodyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwltaWlfYm1jcl9kYXRhIHw9IEJNQ1JfQVVUT19ORUdfRU4gfCBCTUNSX1JFU1RBUlRfQVVUT19ORUc7CisKKwlyZXR1cm4gYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0JNQ1IsIG1paV9ibWNyX2RhdGEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuaCBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjNzM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmgKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCisgKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfQVRMMUNfSFdfSF8KKyNkZWZpbmUgX0FUTDFDX0hXX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorCitzdHJ1Y3QgYXRsMWNfYWRhcHRlcjsKK3N0cnVjdCBhdGwxY19odzsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlICovCit2b2lkIGF0bDFjX3BoeV9kaXNhYmxlKHN0cnVjdCBhdGwxY19odyAqaHcpOwordm9pZCBhdGwxY19od19zZXRfbWFjX2FkZHIoc3RydWN0IGF0bDFjX2h3ICpodyk7CitpbnQgYXRsMWNfcGh5X3Jlc2V0KHN0cnVjdCBhdGwxY19odyAqaHcpOworaW50IGF0bDFjX3JlYWRfbWFjX2FkZHIoc3RydWN0IGF0bDFjX2h3ICpodyk7CitpbnQgYXRsMWNfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGF0bDFjX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpOwordTMyIGF0bDFjX2hhc2hfbWNfYWRkcihzdHJ1Y3QgYXRsMWNfaHcgKmh3LCB1OCAqbWNfYWRkcik7Cit2b2lkIGF0bDFjX2hhc2hfc2V0KHN0cnVjdCBhdGwxY19odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKTsKK2ludCBhdGwxY19yZWFkX3BoeV9yZWcoc3RydWN0IGF0bDFjX2h3ICpodywgdTE2IHJlZ19hZGRyLCB1MTYgKnBoeV9kYXRhKTsKK2ludCBhdGwxY193cml0ZV9waHlfcmVnKHN0cnVjdCBhdGwxY19odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2IHBoeV9kYXRhKTsKK2Jvb2wgYXRsMWNfcmVhZF9lZXByb20oc3RydWN0IGF0bDFjX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpwX3ZhbHVlKTsKK2ludCBhdGwxY19waHlfaW5pdChzdHJ1Y3QgYXRsMWNfaHcgKmh3KTsKK2ludCBhdGwxY19jaGVja19lZXByb21fZXhpc3Qoc3RydWN0IGF0bDFjX2h3ICpodyk7CitpbnQgYXRsMWNfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBhdGwxY19odyAqaHcpOworCisvKiByZWdpc3RlciBkZWZpbml0aW9uICovCisjZGVmaW5lIFJFR19ERVZJQ0VfQ0FQICAgICAgICAgICAgICAJMHg1QworI2RlZmluZSBERVZJQ0VfQ0FQX01BWF9QQVlMT0FEX01BU0sgICAgIDB4NworI2RlZmluZSBERVZJQ0VfQ0FQX01BWF9QQVlMT0FEX1NISUZUICAgIDAKKworI2RlZmluZSBSRUdfREVWSUNFX0NUUkwJCQkweDYwCisjZGVmaW5lIERFVklDRV9DVFJMX01BWF9QQVlMT0FEX01BU0sgICAgMHg3CisjZGVmaW5lIERFVklDRV9DVFJMX01BWF9QQVlMT0FEX1NISUZUICAgNQorI2RlZmluZSBERVZJQ0VfQ1RSTF9NQVhfUlJFUV9TWl9NQVNLICAgIDB4NworI2RlZmluZSBERVZJQ0VfQ1RSTF9NQVhfUlJFUV9TWl9TSElGVCAgIDEyCisKKyNkZWZpbmUgUkVHX0xJTktfQ1RSTAkJCTB4NjgKKyNkZWZpbmUgTElOS19DVFJMX0wwU19FTgkJMHgwMQorI2RlZmluZSBMSU5LX0NUUkxfTDFfRU4JCQkweDAyCisKKyNkZWZpbmUgUkVHX1ZQRF9DQVAJCQkweDZDCisjZGVmaW5lIFZQRF9DQVBfSURfTUFTSyAgICAgICAgICAgICAgICAgMHhmZgorI2RlZmluZSBWUERfQ0FQX0lEX1NISUZUICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVlBEX0NBUF9ORVhUX1BUUl9NQVNLICAgICAgICAgICAweEZGCisjZGVmaW5lIFZQRF9DQVBfTkVYVF9QVFJfU0hJRlQgICAgICAgICAgOAorI2RlZmluZSBWUERfQ0FQX1ZQRF9BRERSX01BU0sgICAgICAgICAgIDB4N0ZGRgorI2RlZmluZSBWUERfQ0FQX1ZQRF9BRERSX1NISUZUICAgICAgICAgIDE2CisjZGVmaW5lIFZQRF9DQVBfVlBEX0ZMQUcgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIFJFR19WUERfREFUQSAgICAgICAgICAgICAgICAJMHg3MAorCisjZGVmaW5lIFJFR19QQ0lFX1VDX1NFVkVSSVRZCQkweDEwQworI2RlZmluZSBQQ0lFX1VDX1NFUlZSSVRZX1RSTgkJMHgwMDAwMDAwMQorI2RlZmluZSBQQ0lFX1VDX1NFUlZSSVRZX0RMUAkJMHgwMDAwMDAxMAorI2RlZmluZSBQQ0lFX1VDX1NFUlZSSVRZX1BTTl9UTFAJMHgwMDAwMTAwMAorI2RlZmluZSBQQ0lFX1VDX1NFUlZSSVRZX0ZDUAkJMHgwMDAwMjAwMAorI2RlZmluZSBQQ0lFX1VDX1NFUlZSSVRZX0NQTF9UTwkJMHgwMDAwNDAwMAorI2RlZmluZSBQQ0lFX1VDX1NFUlZSSVRZX0NBCQkweDAwMDA4MDAwCisjZGVmaW5lIFBDSUVfVUNfU0VSVlJJVFlfVUMJCTB4MDAwMTAwMDAKKyNkZWZpbmUgUENJRV9VQ19TRVJWUklUWV9ST1YJCTB4MDAwMjAwMDAKKyNkZWZpbmUgUENJRV9VQ19TRVJWUklUWV9NTEZQCQkweDAwMDQwMDAwCisjZGVmaW5lIFBDSUVfVUNfU0VSVlJJVFlfRUNSQwkJMHgwMDA4MDAwMAorI2RlZmluZSBQQ0lFX1VDX1NFUlZSSVRZX1VSCQkweDAwMTAwMDAwCisKKyNkZWZpbmUgUkVHX0RFVl9TRVJJQUxOVU1fQ1RSTAkJMHgyMDAKKyNkZWZpbmUgUkVHX0RFVl9NQUNfU0VMX01BU0sJCTB4MCAvKiAwOkVVSTsgMTpNQUMgKi8KKyNkZWZpbmUgUkVHX0RFVl9NQUNfU0VMX1NISUZUCQkwCisjZGVmaW5lIFJFR19ERVZfU0VSSUFMX05VTV9FTl9NQVNLCTB4MQorI2RlZmluZSBSRUdfREVWX1NFUklBTF9OVU1fRU5fU0hJRlQJMQorCisjZGVmaW5lIFJFR19UV1NJX0NUUkwgICAgICAgICAgICAgICAJMHgyMTgKKyNkZWZpbmUgVFdTSV9DVFJMX0xEX09GRlNFVF9NQVNLICAgICAgICAweEZGCisjZGVmaW5lIFRXU0lfQ1RSTF9MRF9PRkZTRVRfU0hJRlQgICAgICAgMAorI2RlZmluZSBUV1NJX0NUUkxfTERfU0xWX0FERFJfTUFTSyAgICAgIDB4NworI2RlZmluZSBUV1NJX0NUUkxfTERfU0xWX0FERFJfU0hJRlQgICAgIDgKKyNkZWZpbmUgVFdTSV9DVFJMX1NXX0xEU1RBUlQgICAgICAgICAgICAweDgwMAorI2RlZmluZSBUV1NJX0NUUkxfSFdfTERTVEFSVCAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBUV1NJX0NUUkxfU01CX1NMVl9BRERSX01BU0sgICAgIDB4N0YKKyNkZWZpbmUgVFdTSV9DVFJMX1NNQl9TTFZfQUREUl9TSElGVCAgICAxNQorI2RlZmluZSBUV1NJX0NUUkxfTERfRVhJU1QgICAgICAgICAgICAgIDB4NDAwMDAwCisjZGVmaW5lIFRXU0lfQ1RSTF9SRUFEX0ZSRVFfU0VMX01BU0sgICAgMHgzCisjZGVmaW5lIFRXU0lfQ1RSTF9SRUFEX0ZSRVFfU0VMX1NISUZUICAgMjMKKyNkZWZpbmUgVFdTSV9DVFJMX0ZSRVFfU0VMXzEwMEsgICAgICAgICAwCisjZGVmaW5lIFRXU0lfQ1RSTF9GUkVRX1NFTF8yMDBLICAgICAgICAgMQorI2RlZmluZSBUV1NJX0NUUkxfRlJFUV9TRUxfMzAwSyAgICAgICAgIDIKKyNkZWZpbmUgVFdTSV9DVFJMX0ZSRVFfU0VMXzQwMEsgICAgICAgICAzCisjZGVmaW5lIFRXU0lfQ1RSTF9TTUJfU0xWX0FERFIKKyNkZWZpbmUgVFdTSV9DVFJMX1dSSVRFX0ZSRVFfU0VMX01BU0sgICAweDMKKyNkZWZpbmUgVFdTSV9DVFJMX1dSSVRFX0ZSRVFfU0VMX1NISUZUICAyNAorCisKKyNkZWZpbmUgUkVHX1BDSUVfREVWX01JU0NfQ1RSTCAgICAgIAkweDIxQworI2RlZmluZSBQQ0lFX0RFVl9NSVNDX0VYVF9QSVBFICAgICAJMHgyCisjZGVmaW5lIFBDSUVfREVWX01JU0NfUkVUUllfQlVGRElTIAkweDEKKyNkZWZpbmUgUENJRV9ERVZfTUlTQ19TUElST01fRVhJU1QgCTB4NAorI2RlZmluZSBQQ0lFX0RFVl9NSVNDX1NFUkRFU19FTkRJQU4gICAgCTB4OAorI2RlZmluZSBQQ0lFX0RFVl9NSVNDX1NFUkRFU19TRUxfRElOICAgCTB4MTAKKworI2RlZmluZSBSRUdfUENJRV9QSFlNSVNDCSAgICAJMHgxMDAwCisjZGVmaW5lIFBDSUVfUEhZTUlTQ19GT1JDRV9SQ1ZfREVUCTB4NAorCisjZGVmaW5lIFJFR19UV1NJX0RFQlVHCQkJMHgxMTA4CisjZGVmaW5lIFRXU0lfREVCVUdfREVWX0VYSVNUCQkweDIwMDAwMDAwCisKKyNkZWZpbmUgUkVHX0VFUFJPTV9DVFJMCQkJMHgxMkMwCisjZGVmaW5lIEVFUFJPTV9DVFJMX0RBVEFfSElfTUFTSwkweEZGRkYKKyNkZWZpbmUgRUVQUk9NX0NUUkxfREFUQV9ISV9TSElGVAkwCisjZGVmaW5lIEVFUFJPTV9DVFJMX0FERFJfTUFTSwkJMHgzRkYKKyNkZWZpbmUgRUVQUk9NX0NUUkxfQUREUl9TSElGVAkJMTYKKyNkZWZpbmUgRUVQUk9NX0NUUkxfQUNLCQkJMHg0MDAwMDAwMAorI2RlZmluZSBFRVBST01fQ1RSTF9SVwkJCTB4ODAwMDAwMDAKKworI2RlZmluZSBSRUdfRUVQUk9NX0RBVEFfTE8JCTB4MTJDNAorCisjZGVmaW5lIFJFR19PVFBfQ1RSTAkJCTB4MTJGMAorI2RlZmluZSBPVFBfQ1RSTF9DTEtfRU4JCQkweDAwMDIKKworI2RlZmluZSBSRUdfUE1fQ1RSTAkJCTB4MTJGOAorI2RlZmluZSBQTV9DVFJMX1NERVNfRU4JCQkweDAwMDAwMDAxCisjZGVmaW5lIFBNX0NUUkxfUkJFUl9FTgkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUE1fQ1RSTF9DTEtfUkVRX0VOCQkweDAwMDAwMDA0CisjZGVmaW5lIFBNX0NUUkxfQVNQTV9MMV9FTgkJMHgwMDAwMDAwOAorI2RlZmluZSBQTV9DVFJMX1NFUkRFU19MMV9FTgkJMHgwMDAwMDAxMAorI2RlZmluZSBQTV9DVFJMX1NFUkRFU19QTExfTDFfRU4JMHgwMDAwMDAyMAorI2RlZmluZSBQTV9DVFJMX1NFUkRFU19QRF9FWF9MMQkJMHgwMDAwMDA0MAorI2RlZmluZSBQTV9DVFJMX1NFUkRFU19CVURTX1JYX0wxX0VOCTB4MDAwMDAwODAKKyNkZWZpbmUgUE1fQ1RSTF9MMFNfRU5UUllfVElNRVJfTUFTSwkweEYKKyNkZWZpbmUgUE1fQ1RSTF9MMFNfRU5UUllfVElNRVJfU0hJRlQJOAorI2RlZmluZSBQTV9DVFJMX0FTUE1fTDBTX0VOCQkweDAwMDAxMDAwCisjZGVmaW5lIFBNX0NUUkxfQ0xLX1NXSF9MMQkJMHgwMDAwMjAwMAorI2RlZmluZSBQTV9DVFJMX0NMS19QV01fVkVSMV8xCQkweDAwMDA0MDAwCisjZGVmaW5lIFBNX0NUUkxfUENJRV9SRUNWCQkweDAwMDA4MDAwCisjZGVmaW5lIFBNX0NUUkxfTDFfRU5UUllfVElNRVJfTUFTSwkweEYKKyNkZWZpbmUgUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVAkxNgorI2RlZmluZSBQTV9DVFJMX1BNX1JFUV9USU1FUl9NQVNLCTB4RgorI2RlZmluZSBQTV9DVFJMX1BNX1JFUV9USU1FUl9TSElGVAkyMAorI2RlZmluZSBQTV9DVFJMX0xDS0RFVF9USU1FUl9NQVNLCTB4M0YKKyNkZWZpbmUgUE1fQ1RSTF9MQ0tERVRfVElNRVJfU0hJRlQJMjQKKyNkZWZpbmUgUE1fQ1RSTF9NQUNfQVNQTV9DSEsJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUE1fQ1RSTF9IT1RSU1QJCQkweDgwMDAwMDAwCisKKy8qIFNlbGVuZSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTUFTVEVSX0NUUkwJCQkweDE0MDAKKyNkZWZpbmUgTUFTVEVSX0NUUkxfU09GVF9SU1QgICAgICAgICAgICAweDEKKyNkZWZpbmUgTUFTVEVSX0NUUkxfVEVTVF9NT0RFX01BU0sJMHgzCisjZGVmaW5lIE1BU1RFUl9DVFJMX1RFU1RfTU9ERV9TSElGVAkyCisjZGVmaW5lIE1BU1RFUl9DVFJMX0JFUlRfU1RBUlQJCTB4MTAKKyNkZWZpbmUgTUFTVEVSX0NUUkxfTVRJTUVSX0VOICAgICAgICAgICAweDEwMAorI2RlZmluZSBNQVNURVJfQ1RSTF9NQU5VQUxfSU5UICAgICAgICAgIDB4MjAwCisjZGVmaW5lIE1BU1RFUl9DVFJMX1RYX0lUSU1FUl9FTgkweDQwMAorI2RlZmluZSBNQVNURVJfQ1RSTF9SWF9JVElNRVJfRU4JMHg4MDAKKyNkZWZpbmUgTUFTVEVSX0NUUkxfQ0xLX1NFTF9ESVMJCTB4MTAwMAorI2RlZmluZSBNQVNURVJfQ1RSTF9DTEtfU1dIX01PREUJMHgyMDAwCisjZGVmaW5lIE1BU1RFUl9DVFJMX0lOVF9SRENMUgkJMHg0MDAwCisjZGVmaW5lIE1BU1RFUl9DVFJMX1JFVl9OVU1fU0hJRlQJMTYKKyNkZWZpbmUgTUFTVEVSX0NUUkxfUkVWX05VTV9NQVNLCTB4ZmYKKyNkZWZpbmUgTUFTVEVSX0NUUkxfREVWX0lEX1NISUZUCTI0CisjZGVmaW5lIE1BU1RFUl9DVFJMX0RFVl9JRF9NQVNLCQkweDdmCisjZGVmaW5lIE1BU1RFUl9DVFJMX09UUF9TRUwJCTB4ODAwMDAwMDAKKworLyogVGltZXIgSW5pdGlhbCBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTUFOVUFMX1RJTUVSX0lOSVQgICAgICAgCTB4MTQwNAorCisvKiBJUlEgTW9kZXJhdG9yVGltZXIgSW5pdGlhbCBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfSVJRX01PRFJUX1RJTUVSX0lOSVQgICAgIAkweDE0MDgKKyNkZWZpbmUgSVJRX01PRFJUX1RJTUVSX01BU0sJCTB4ZmZmZgorI2RlZmluZSBJUlFfTU9EUlRfVFhfVElNRVJfU0hJRlQgICAgCTAKKyNkZWZpbmUgSVJRX01PRFJUX1JYX1RJTUVSX1NISUZUCTE2CisKKyNkZWZpbmUgUkVHX0dQSFlfQ1RSTCAgICAgICAgICAgICAgIAkweDE0MEMKKyNkZWZpbmUgR1BIWV9DVFJMX0VYVF9SRVNFVCAgICAgICAgIAkweDEKKyNkZWZpbmUgR1BIWV9DVFJMX1JUTF9NT0RFCQkweDIKKyNkZWZpbmUgR1BIWV9DVFJMX0xFRF9NT0RFCQkweDQKKyNkZWZpbmUgR1BIWV9DVFJMX0FORUdfTk9XCQkweDgKKyNkZWZpbmUgR1BIWV9DVFJMX1JFVl9BTkVHCQkweDEwCisjZGVmaW5lIEdQSFlfQ1RSTF9HQVRFXzI1TV9FTiAgICAgICAJMHgyMAorI2RlZmluZSBHUEhZX0NUUkxfTFBXX0VYSVQgICAgICAgICAgCTB4NDAKKyNkZWZpbmUgR1BIWV9DVFJMX1BIWV9JRERRICAgICAgICAgIAkweDgwCisjZGVmaW5lIEdQSFlfQ1RSTF9QSFlfSUREUV9ESVMgICAgICAJMHgxMDAKKyNkZWZpbmUgR1BIWV9DVFJMX0dJR0FfRElTCQkweDIwMAorI2RlZmluZSBHUEhZX0NUUkxfSElCX0VOICAgICAgICAgICAgCTB4NDAwCisjZGVmaW5lIEdQSFlfQ1RSTF9ISUJfUFVMU0UgICAgICAgICAJMHg4MDAKKyNkZWZpbmUgR1BIWV9DVFJMX1NFTF9BTkFfUlNUICAgICAgIAkweDEwMDAKKyNkZWZpbmUgR1BIWV9DVFJMX1BIWV9QTExfT04gICAgICAgIAkweDIwMDAKKyNkZWZpbmUgR1BIWV9DVFJMX1BXRE9XTl9IVwkJMHg0MDAwCisjZGVmaW5lIEdQSFlfQ1RSTF9QSFlfUExMX0JZUEFTUwkweDgwMDAKKworI2RlZmluZSBHUEhZX0NUUkxfREVGQVVMVCAoCQkgXAorCQlHUEhZX0NUUkxfU0VMX0FOQV9SU1QJfFwKKwkJR1BIWV9DVFJMX0hJQl9QVUxTRQl8XAorCQlHUEhZX0NUUkxfSElCX0VOKQorCisjZGVmaW5lIEdQSFlfQ1RSTF9QV19XT0xfRElTICgJCSBcCisJCUdQSFlfQ1RSTF9TRUxfQU5BX1JTVAl8XAorCQlHUEhZX0NUUkxfSElCX1BVTFNFCXxcCisJCUdQSFlfQ1RSTF9ISUJfRU4JfFwKKwkJR1BIWV9DVFJMX1BXRE9XTl9IVwl8XAorCQlHUEhZX0NUUkxfUEhZX0lERFEpCisKKy8qIEJsb2NrIElETEUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19JRExFX1NUQVRVUyAgCQkweDE0MTAKKyNkZWZpbmUgSURMRV9TVEFUVVNfTUFTSwkJMHgwMEZGCisjZGVmaW5lIElETEVfU1RBVFVTX1JYTUFDX05PX0lETEUgICAgICAJMHgxCisjZGVmaW5lIElETEVfU1RBVFVTX1RYTUFDX05PX0lETEUgICAgICAJMHgyCisjZGVmaW5lIElETEVfU1RBVFVTX1JYUV9OT19JRExFICAgICAgICAJMHg0CisjZGVmaW5lIElETEVfU1RBVFVTX1RYUV9OT19JRExFICAgICAgICAJMHg4CisjZGVmaW5lIElETEVfU1RBVFVTX0RNQVJfTk9fSURMRSAgICAgICAJMHgxMAorI2RlZmluZSBJRExFX1NUQVRVU19ETUFXX05PX0lETEUgICAgICAgCTB4MjAKKyNkZWZpbmUgSURMRV9TVEFUVVNfU01CX05PX0lETEUgICAgICAgIAkweDQwCisjZGVmaW5lIElETEVfU1RBVFVTX0NNQl9OT19JRExFICAgICAgICAJMHg4MAorCisvKiBNRElPIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX01ESU9fQ1RSTCAgICAgICAgICAgCTB4MTQxNAorI2RlZmluZSBNRElPX0RBVEFfTUFTSyAgICAgICAgICAJMHhmZmZmICAvKiBPbiBNRElPIHdyaXRlLCB0aGUgMTYtYml0CisJCQkJCQkgKiBjb250cm9sIGRhdGEgdG8gd3JpdGUgdG8gUEhZCisJCQkJCQkgKiBNSUkgbWFuYWdlbWVudCByZWdpc3RlciAqLworI2RlZmluZSBNRElPX0RBVEFfU0hJRlQgICAgICAgICAJMCAgICAgICAvKiBPbiBNRElPIHJlYWQsIHRoZSAxNi1iaXQKKwkJCQkJCSAqIHN0YXR1cyBkYXRhIHRoYXQgd2FzIHJlYWQKKwkJCQkJCSAqIGZyb20gdGhlIFBIWSBNSUkgbWFuYWdlbWVudCByZWdpc3RlciAqLworI2RlZmluZSBNRElPX1JFR19BRERSX01BU0sgICAgICAJMHgxZiAgICAvKiBNRElPIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgTURJT19SRUdfQUREUl9TSElGVCAgICAgCTE2CisjZGVmaW5lIE1ESU9fUlcgICAgICAgICAgICAgICAgIAkweDIwMDAwMCAgLyogMTogcmVhZCwgMDogd3JpdGUgKi8KKyNkZWZpbmUgTURJT19TVVBfUFJFQU1CTEUgICAgICAgCTB4NDAwMDAwICAvKiBTdXBwcmVzcyBwcmVhbWJsZSAqLworI2RlZmluZSBNRElPX1NUQVJUICAgICAgICAgICAgICAJMHg4MDAwMDAgIC8qIFdyaXRlIDEgdG8gaW5pdGlhdGUgdGhlIE1ESU8KKwkJCQkJCSAgICogbWFzdGVyLiBBbmQgdGhpcyBiaXQgaXMgc2VsZgorCQkJCQkJICAgKiBjbGVhcmVkIGFmdGVyIG9uZSBjeWNsZSAqLworI2RlZmluZSBNRElPX0NMS19TRUxfU0hJRlQgICAgICAJMjQKKyNkZWZpbmUgTURJT19DTEtfMjVfNCAgICAgICAgICAgCTAKKyNkZWZpbmUgTURJT19DTEtfMjVfNiAgICAgICAgICAgCTIKKyNkZWZpbmUgTURJT19DTEtfMjVfOCAgICAgICAgICAgCTMKKyNkZWZpbmUgTURJT19DTEtfMjVfMTAgICAgICAgICAgCTQKKyNkZWZpbmUgTURJT19DTEtfMjVfMTQgICAgICAgICAgCTUKKyNkZWZpbmUgTURJT19DTEtfMjVfMjAgICAgICAgICAgCTYKKyNkZWZpbmUgTURJT19DTEtfMjVfMjggICAgICAgICAgCTcKKyNkZWZpbmUgTURJT19CVVNZICAgICAgICAgICAgICAgCTB4ODAwMDAwMAorI2RlZmluZSBNRElPX0FQX0VOICAgICAgICAgICAgICAJMHgxMDAwMDAwMAorI2RlZmluZSBNRElPX1dBSVRfVElNRVMgICAgICAgICAJMTAKKworLyogTUlJIFBIWSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1BIWV9TVEFUVVMgICAgICAgICAgIAkweDE0MTgKKyNkZWZpbmUgUEhZX0dFTkVSQUxfU1RBVFVTX01BU0sJCTB4RkZGRgorI2RlZmluZSBQSFlfU1RBVFVTX1JFQ1ZfRU5BQkxFCQkweDAwMDEKKyNkZWZpbmUgUEhZX09FX1BXU1BfU1RBVFVTX01BU0sJCTB4MDdGRgorI2RlZmluZSBQSFlfT0VfUFdTUF9TVEFUVVNfU0hJRlQJMTYKKyNkZWZpbmUgUEhZX1NUQVRVU19MUFdfU1RBVEUJCTB4ODAwMDAwMDAKKy8qIEJJU1QgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyMCAoZm9yIHRoZSBQYWNrZXQgTWVtb3J5KSAqLworI2RlZmluZSBSRUdfQklTVDBfQ1RSTCAgICAgICAgICAgICAgCTB4MTQxYworI2RlZmluZSBCSVNUMF9OT1cgICAgICAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBCSVNUMF9TUkFNX0ZBSUwgICAgICAgICAgICAgCTB4MiAvKiAxOiBUaGUgU1JBTSBmYWlsdXJlIGlzCisJCQkJCSAgICAgKiB1bi1yZXBhaXJhYmxlICBiZWNhdXNlCisJCQkJCSAgICAgKiBpdCBoYXMgYWRkcmVzcyBkZWNvZGVyCisJCQkJCSAgICAgKiBmYWlsdXJlIG9yIG1vcmUgdGhhbiAxIGNlbGwKKwkJCQkJICAgICAqIHN0dWNrLXRvLXggZmFpbHVyZSAqLworI2RlZmluZSBCSVNUMF9GVVNFX0ZMQUcgICAgICAgICAgICAgCTB4NAorCisvKiBCSVNUIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcjEoZm9yIHRoZSByZXRyeSBidWZmZXIgb2YgUENJIEV4cHJlc3MpICovCisjZGVmaW5lIFJFR19CSVNUMV9DVFJMCQkJMHgxNDIwCisjZGVmaW5lIEJJU1QxX05PVyAgICAgICAgICAgICAgICAgICAJMHgxCisjZGVmaW5lIEJJU1QxX1NSQU1fRkFJTCAgICAgICAgICAgICAJMHgyCisjZGVmaW5lIEJJU1QxX0ZVU0VfRkxBRyAgICAgICAgICAgICAJMHg0CisKKy8qIFNlckRlcyBMb2NrIERldGVjdCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1NFUkRFU19MT0NLICAgICAgICAgICAgCTB4MTQyNAorI2RlZmluZSBTRVJERVNfTE9DS19ERVRFQ1QgICAgICAgICAgCTB4MSAgLyogU2VyRGVzIGxvY2sgZGV0ZWN0ZWQuIFRoaXMgc2lnbmFsCisJCQkJCSAgICAgICogY29tZXMgZnJvbSBBbmFsb2cgU2VyRGVzICovCisjZGVmaW5lIFNFUkRFU19MT0NLX0RFVEVDVF9FTiAgICAgICAJMHgyICAvKiAxOiBFbmFibGUgU2VyRGVzIExvY2sgZGV0ZWN0IGZ1bmN0aW9uICovCisKKy8qIE1BQyBDb250cm9sIFJlZ2lzdGVyICAqLworI2RlZmluZSBSRUdfTUFDX0NUUkwgICAgICAgICAJCTB4MTQ4MAorI2RlZmluZSBNQUNfQ1RSTF9UWF9FTgkJCTB4MQorI2RlZmluZSBNQUNfQ1RSTF9SWF9FTgkJCTB4MgorI2RlZmluZSBNQUNfQ1RSTF9UWF9GTE9XCQkweDQKKyNkZWZpbmUgTUFDX0NUUkxfUlhfRkxPVyAgICAgICAgICAgIAkweDgKKyNkZWZpbmUgTUFDX0NUUkxfTE9PUEJBQ0sgICAgICAgICAgCTB4MTAKKyNkZWZpbmUgTUFDX0NUUkxfRFVQTFggICAgICAgICAgICAgIAkweDIwCisjZGVmaW5lIE1BQ19DVFJMX0FERF9DUkMgICAgICAgICAgICAJMHg0MAorI2RlZmluZSBNQUNfQ1RSTF9QQUQgICAgICAgICAgICAgICAgCTB4ODAKKyNkZWZpbmUgTUFDX0NUUkxfTEVOQ0hLICAgICAgICAgICAgIAkweDEwMAorI2RlZmluZSBNQUNfQ1RSTF9IVUdFX0VOICAgICAgICAgICAgCTB4MjAwCisjZGVmaW5lIE1BQ19DVFJMX1BSTUxFTl9TSElGVCAgICAgICAJMTAKKyNkZWZpbmUgTUFDX0NUUkxfUFJNTEVOX01BU0sgICAgICAgIAkweGYKKyNkZWZpbmUgTUFDX0NUUkxfUk1WX1ZMQU4gICAgICAgICAgIAkweDQwMDAKKyNkZWZpbmUgTUFDX0NUUkxfUFJPTUlTX0VOICAgICAgICAgIAkweDgwMDAKKyNkZWZpbmUgTUFDX0NUUkxfVFhfUEFVU0UgICAgICAgICAgIAkweDEwMDAwCisjZGVmaW5lIE1BQ19DVFJMX1NDTlQgICAgICAgICAgICAgICAJMHgyMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9TUlNUX1RYICAgICAgICAgICAgCTB4NDAwMDAKKyNkZWZpbmUgTUFDX0NUUkxfVFhfU0lNVVJTVCAgICAgICAgIAkweDgwMDAwCisjZGVmaW5lIE1BQ19DVFJMX1NQRUVEX1NISUZUICAgICAgICAJMjAKKyNkZWZpbmUgTUFDX0NUUkxfU1BFRURfTUFTSyAgICAgICAgIAkweDMKKyNkZWZpbmUgTUFDX0NUUkxfREJHX1RYX0JLUFJFU1VSRSAgIAkweDQwMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9UWF9IVUdFICAgICAgICAgICAgCTB4ODAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX1JYX0NIS1NVTV9FTiAgICAgICAJMHgxMDAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX01DX0FMTF9FTiAgICAgICAgICAJMHgyMDAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX0JDX0VOICAgICAgICAgICAgICAJMHg0MDAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX0RCRyAgICAgICAgICAgICAgICAJMHg4MDAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX1NJTkdMRV9QQVVTRV9FTgkweDEwMDAwMDAwCisKKy8qIE1BQyBJUEcvSUZHIENvbnRyb2wgUmVnaXN0ZXIgICovCisjZGVmaW5lIFJFR19NQUNfSVBHX0lGRyAgICAgICAgICAgICAJMHgxNDg0CisjZGVmaW5lIE1BQ19JUEdfSUZHX0lQR1RfU0hJRlQgICAgICAJMCAJLyogRGVzaXJlZCBiYWNrIHRvIGJhY2sKKwkJCQkJCSAqIGludGVyLXBhY2tldCBnYXAuIFRoZQorCQkJCQkJICogZGVmYXVsdCBpcyA5Ni1iaXQgdGltZSAqLworI2RlZmluZSBNQUNfSVBHX0lGR19JUEdUX01BU0sgICAgICAgCTB4N2YKKyNkZWZpbmUgTUFDX0lQR19JRkdfTUlGR19TSElGVCAgICAgIAk4ICAgICAgIC8qIE1pbmltdW0gbnVtYmVyIG9mIElGRyB0bworCQkJCQkJICogZW5mb3JjZSBpbiBiZXR3ZWVuIFJYIGZyYW1lcyAqLworI2RlZmluZSBNQUNfSVBHX0lGR19NSUZHX01BU0sgICAgICAgCTB4ZmYgIAkvKiBGcmFtZSBnYXAgYmVsb3cgc3VjaCBJRlAgaXMgZHJvcHBlZCAqLworI2RlZmluZSBNQUNfSVBHX0lGR19JUEdSMV9TSElGVCAgICAgCTE2ICAgCS8qIDY0Yml0IENhcnJpZXItU2Vuc2Ugd2luZG93ICovCisjZGVmaW5lIE1BQ19JUEdfSUZHX0lQR1IxX01BU0sgICAgICAJMHg3ZgorI2RlZmluZSBNQUNfSVBHX0lGR19JUEdSMl9TSElGVCAgICAgCTI0ICAgIAkvKiA5Ni1iaXQgSVBHIHdpbmRvdyAqLworI2RlZmluZSBNQUNfSVBHX0lGR19JUEdSMl9NQVNLICAgICAgCTB4N2YKKworLyogTUFDIFNUQVRJT04gQUREUkVTUyAgKi8KKyNkZWZpbmUgUkVHX01BQ19TVEFfQUREUgkJMHgxNDg4CisKKy8qIEhhc2ggdGFibGUgZm9yIG11bHRpY2FzdCBhZGRyZXNzICovCisjZGVmaW5lIFJFR19SWF9IQVNIX1RBQkxFCQkweDE0OTAKKworLyogTUFDIEhhbGYtRHVwbGV4IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX01BQ19IQUxGX0RVUExYX0NUUkwgICAgIAkweDE0OTgKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9MQ09MX1NISUZUICAwICAgICAgLyogQ29sbGlzaW9uIFdpbmRvdyAqLworI2RlZmluZSBNQUNfSEFMRl9EVVBMWF9DVFJMX0xDT0xfTUFTSyAgIDB4M2ZmCisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfUkVUUllfU0hJRlQgMTIKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9NQVNLICAweGYKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9FWENfREVGX0VOICAweDEwMDAwCisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfTk9fQkFDS19DICAgMHgyMDAwMAorI2RlZmluZSBNQUNfSEFMRl9EVVBMWF9DVFJMX05PX0JBQ0tfUCAgIDB4NDAwMDAgLyogTm8gYmFjay1vZmYgb24gYmFja3ByZXNzdXJlLAorCQkJCQkJICogaW1tZWRpYXRlbHkgc3RhcnQgdGhlCisJCQkJCQkgKiB0cmFuc21pc3Npb24gYWZ0ZXIgYmFjayBwcmVzc3VyZSAqLworI2RlZmluZSBNQUNfSEFMRl9EVVBMWF9DVFJMX0FCRUJFICAgICAgICAweDgwMDAwIC8qIDE6IEFsdGVybmF0aXZlIEJpbmFyeSBFeHBvbmVudGlhbCBCYWNrLW9mZiBFbmFibGVkICovCisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfQUJFQlRfU0hJRlQgIDIwICAgICAgLyogTWF4aW11bSBiaW5hcnkgZXhwb25lbnRpYWwgbnVtYmVyICovCisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfQUJFQlRfTUFTSyAgIDB4ZgorI2RlZmluZSBNQUNfSEFMRl9EVVBMWF9DVFJMX0pBTUlQR19TSElGVCAyNCAgICAgIC8qIElQRyB0byBzdGFydCBKQU0gZm9yIGNvbGxpc2lvbiBiYXNlZCBmbG93IGNvbnRyb2wgaW4gaGFsZi1kdXBsZXggKi8KKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfTUFTSyAgMHhmICAgICAvKiBtb2RlLiBJbiB1bml0IG9mIDgtYml0IHRpbWUgKi8KKworLyogTWF4aW11bSBGcmFtZSBMZW5ndGggQ29udHJvbCBSZWdpc3RlciAgICovCisjZGVmaW5lIFJFR19NVFUgICAgICAgICAgICAgICAgICAgICAJMHgxNDljCisKKy8qIFdha2UtT24tTGFuIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1dPTF9DVFJMICAgICAgICAgICAgICAgIAkweDE0YTAKKyNkZWZpbmUgV09MX1BBVFRFUk5fRU4gICAgICAgICAgICAgIAkweDAwMDAwMDAxCisjZGVmaW5lIFdPTF9QQVRURVJOX1BNRV9FTiAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBXT0xfTUFHSUNfRU4gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgV09MX01BR0lDX1BNRV9FTiAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFdPTF9MSU5LX0NIR19FTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBXT0xfTElOS19DSEdfUE1FX0VOICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgV09MX1BBVFRFUk5fU1QgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFdPTF9NQUdJQ19TVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBXT0xfTElOS0NIR19TVCAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgV09MX0NMS19TV0lUQ0hfRU4gICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFdPTF9QVDBfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBXT0xfUFQxX0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgV09MX1BUMl9FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFdPTF9QVDNfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBXT0xfUFQ0X0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgV09MX1BUNV9FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFdPTF9QVDZfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorCisvKiBXT0wgTGVuZ3RoICggMiBEV09SRCApICovCisjZGVmaW5lIFJFR19XT0xfUEFUVEVSTl9MRU4gICAgICAgICAJMHgxNGE0CisjZGVmaW5lIFdPTF9QVF9MRU5fTUFTSyAgICAgICAgICAgICAgICAgMHg3ZgorI2RlZmluZSBXT0xfUFQwX0xFTl9TSElGVCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV09MX1BUMV9MRU5fU0hJRlQgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdPTF9QVDJfTEVOX1NISUZUICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgV09MX1BUM19MRU5fU0hJRlQgICAgICAgICAgICAgICAyNAorI2RlZmluZSBXT0xfUFQ0X0xFTl9TSElGVCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV09MX1BUNV9MRU5fU0hJRlQgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdPTF9QVDZfTEVOX1NISUZUICAgICAgICAgICAgICAgMTYKKworLyogSW50ZXJuYWwgU1JBTSBQYXJ0aXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkZEWF9IRUFEX0FERFJfTUFTSwkJMHgwM0ZGCisjZGVmaW5lIFJGRFhfSEFSRF9BRERSX1NISUZUCQkwCisjZGVmaW5lIFJGRFhfVEFJTF9BRERSX01BU0sJCTB4MDNGRgorI2RlZmluZSBSRkRYX1RBSUxfQUREUl9TSElGVCAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgUkVHX1NSQU1fUkZEMF9JTkZPCQkweDE1MDAKKyNkZWZpbmUgUkVHX1NSQU1fUkZEMV9JTkZPCQkweDE1MDQKKyNkZWZpbmUgUkVHX1NSQU1fUkZEMl9JTkZPCQkweDE1MDgKKyNkZWZpbmUJUkVHX1NSQU1fUkZEM19JTkZPCQkweDE1MEMKKworI2RlZmluZSBSRUdfUkZEX05JQ19MRU4JCQkweDE1MTAgLyogSW4gOC1ieXRlcyAqLworI2RlZmluZSBSRkRfTklDX0xFTl9NQVNLCQkweDAzRkYKKworI2RlZmluZSBSRUdfU1JBTV9UUkRfQUREUiAgICAgICAgICAgCTB4MTUxOAorI2RlZmluZSBUUERfSEVBRF9BRERSX01BU0sJCTB4MDNGRgorI2RlZmluZSBUUERfSEVBRF9BRERSX1NISUZUCQkwCisjZGVmaW5lIFRQRF9UQUlMX0FERFJfTUFTSwkJMHgwM0ZGCisjZGVmaW5lIFRQRF9UQUlMX0FERFJfU0hJRlQJCTE2CisKKyNkZWZpbmUgUkVHX1NSQU1fVFJEX0xFTiAgICAgICAgICAgIAkweDE1MUMgLyogSW4gOC1ieXRlcyAqLworI2RlZmluZSBUUERfTklDX0xFTl9NQVNLCQkweDAzRkYKKworI2RlZmluZSBSRUdfU1JBTV9SWEZfQUREUiAgICAgICAgICAJMHgxNTIwCisjZGVmaW5lIFJFR19TUkFNX1JYRl9MRU4gICAgICAgICAgICAJMHgxNTI0CisjZGVmaW5lIFJFR19TUkFNX1RYRl9BRERSICAgICAgICAgICAJMHgxNTI4CisjZGVmaW5lIFJFR19TUkFNX1RYRl9MRU4gICAgICAgICAgICAJMHgxNTJDCisjZGVmaW5lIFJFR19TUkFNX1RDUEhfQUREUiAgICAgICAgICAJMHgxNTMwCisjZGVmaW5lIFJFR19TUkFNX1BLVEhfQUREUiAgICAgICAgICAJMHgxNTMyCisKKy8qCisgKiBMb2FkIFB0ciBSZWdpc3RlcgorICogU29mdHdhcmUgc2V0cyB0aGlzIGJpdCBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhlYWQgYW5kIHRhaWwgKi8KKyNkZWZpbmUgUkVHX0xPQURfUFRSICAgICAgICAgICAgICAgIAkweDE1MzQKKworLyoKKyAqIGFkZHJlc3NlcyBvZiBhbGwgZGVzY3JpcHRvcnMsIGFzIHdlbGwgYXMgdGhlIGZvbGxvd2luZyBkZXNjcmlwdG9yCisgKiBjb250cm9sIHJlZ2lzdGVyLCB3aGljaCB0cmlnZ2VycyBlYWNoIGZ1bmN0aW9uIGJsb2NrIHRvIGxvYWQgdGhlIGhlYWQKKyAqIHBvaW50ZXIgdG8gcHJlcGFyZSBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBiaXQgaXMgdGhlbiBzZWxmLWNsZWFyZWQKKyAqIGFmdGVyIG9uZSBjeWNsZS4KKyAqLworI2RlZmluZSBSRUdfUlhfQkFTRV9BRERSX0hJCQkweDE1NDAKKyNkZWZpbmUgUkVHX1RYX0JBU0VfQUREUl9ISQkJMHgxNTQ0CisjZGVmaW5lIFJFR19TTUJfQkFTRV9BRERSX0hJCQkweDE1NDgKKyNkZWZpbmUgUkVHX1NNQl9CQVNFX0FERFJfTE8JCTB4MTU0QworI2RlZmluZSBSRUdfUkZEMF9IRUFEX0FERFJfTE8JCTB4MTU1MAorI2RlZmluZSBSRUdfUkZEMV9IRUFEX0FERFJfTE8JCTB4MTU1NAorI2RlZmluZSBSRUdfUkZEMl9IRUFEX0FERFJfTE8JCTB4MTU1OAorI2RlZmluZSBSRUdfUkZEM19IRUFEX0FERFJfTE8JCTB4MTU1QworI2RlZmluZSBSRUdfUkZEX1JJTkdfU0laRQkJMHgxNTYwCisjZGVmaW5lIFJGRF9SSU5HX1NJWkVfTUFTSwkJMHgwRkZGCisjZGVmaW5lIFJFR19SWF9CVUZfU0laRQkJCTB4MTU2NAorI2RlZmluZSBSWF9CVUZfU0laRV9NQVNLCQkweEZGRkYKKyNkZWZpbmUgUkVHX1JSRDBfSEVBRF9BRERSX0xPCQkweDE1NjgKKyNkZWZpbmUgUkVHX1JSRDFfSEVBRF9BRERSX0xPCQkweDE1NkMKKyNkZWZpbmUgUkVHX1JSRDJfSEVBRF9BRERSX0xPCQkweDE1NzAKKyNkZWZpbmUgUkVHX1JSRDNfSEVBRF9BRERSX0xPCQkweDE1NzQKKyNkZWZpbmUgUkVHX1JSRF9SSU5HX1NJWkUJCTB4MTU3OAorI2RlZmluZSBSUkRfUklOR19TSVpFX01BU0sJCTB4MEZGRgorI2RlZmluZSBSRUdfSFRQRF9IRUFEX0FERFJfTE8JCTB4MTU3QworI2RlZmluZSBSRUdfTlRQRF9IRUFEX0FERFJfTE8JCTB4MTU4MAorI2RlZmluZSBSRUdfVFBEX1JJTkdfU0laRQkJMHgxNTg0CisjZGVmaW5lIFRQRF9SSU5HX1NJWkVfTUFTSwkJMHhGRkZGCisjZGVmaW5lIFJFR19DTUJfQkFTRV9BRERSX0xPCQkweDE1ODgKKworLyogUlNTIGFib3V0ICovCisjZGVmaW5lIFJFR19SU1NfS0VZMCAgICAgICAgICAgICAgICAgICAgMHgxNEIwCisjZGVmaW5lIFJFR19SU1NfS0VZMSAgICAgICAgICAgICAgICAgICAgMHgxNEI0CisjZGVmaW5lIFJFR19SU1NfS0VZMiAgICAgICAgICAgICAgICAgICAgMHgxNEI4CisjZGVmaW5lIFJFR19SU1NfS0VZMyAgICAgICAgICAgICAgICAgICAgMHgxNEJDCisjZGVmaW5lIFJFR19SU1NfS0VZNCAgICAgICAgICAgICAgICAgICAgMHgxNEMwCisjZGVmaW5lIFJFR19SU1NfS0VZNSAgICAgICAgICAgICAgICAgICAgMHgxNEM0CisjZGVmaW5lIFJFR19SU1NfS0VZNiAgICAgICAgICAgICAgICAgICAgMHgxNEM4CisjZGVmaW5lIFJFR19SU1NfS0VZNyAgICAgICAgICAgICAgICAgICAgMHgxNENDCisjZGVmaW5lIFJFR19SU1NfS0VZOCAgICAgICAgICAgICAgICAgICAgMHgxNEQwCisjZGVmaW5lIFJFR19SU1NfS0VZOSAgICAgICAgICAgICAgICAgICAgMHgxNEQ0CisjZGVmaW5lIFJFR19JRFRfVEFCTEUwICAgICAgICAgICAgICAgIAkweDE0RTAKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRTEgICAgICAgICAgICAgICAgICAweDE0RTQKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRTIgICAgICAgICAgICAgICAgICAweDE0RTgKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRTMgICAgICAgICAgICAgICAgICAweDE0RUMKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRTQgICAgICAgICAgICAgICAgICAweDE0RjAKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRTUgICAgICAgICAgICAgICAgICAweDE0RjQKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRTYgICAgICAgICAgICAgICAgICAweDE0RjgKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRTcgICAgICAgICAgICAgICAgICAweDE0RkMKKyNkZWZpbmUgUkVHX0lEVF9UQUJMRSAgICAgICAgICAgICAgICAgICBSRUdfSURUX1RBQkxFMAorI2RlZmluZSBSRUdfUlNTX0hBU0hfVkFMVUUgICAgICAgICAgICAgIDB4MTVCMAorI2RlZmluZSBSRUdfUlNTX0hBU0hfRkxBRyAgICAgICAgICAgICAgIDB4MTVCNAorI2RlZmluZSBSRUdfQkFTRV9DUFVfTlVNQkVSICAgICAgICAgICAgIDB4MTVCOAorCisvKiBUWFEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfVFhRX0NUUkwgICAgICAgICAgICAgICAgCTB4MTU5MAorI2RlZmluZQlUWFFfTlVNX1RQRF9CVVJTVF9NQVNLICAgICAJMHhGCisjZGVmaW5lIFRYUV9OVU1fVFBEX0JVUlNUX1NISUZUICAgIAkwCisjZGVmaW5lIFRYUV9DVFJMX0lQX09QVElPTl9FTgkJMHgxMAorI2RlZmluZSBUWFFfQ1RSTF9FTiAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVFhRX0NUUkxfRU5IX01PREUgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIFRYUV9DVFJMX0xTXzgwMjNfRU4JCTB4ODAKKyNkZWZpbmUgVFhRX1RYRl9CVVJTVF9OVU1fU0hJRlQgICAgCTE2CisjZGVmaW5lIFRYUV9UWEZfQlVSU1RfTlVNX01BU0sgICAgIAkweEZGRkYKKworLyogSnVtYm8gcGFja2V0IFRocmVzaG9sZCBmb3IgdGFzayBvZmZsb2FkICovCisjZGVmaW5lIFJFR19UWF9UU09fT0ZGTE9BRF9USFJFU0gJMHgxNTk0IC8qIEluIDgtYnl0ZXMgKi8KKyNkZWZpbmUgVFhfVFNPX09GRkxPQURfVEhSRVNIX01BU0sJMHgwN0ZGCisKKyNkZWZpbmUJUkVHX1RYRl9XQVRFUl9NQVJLCQkweDE1OTggLyogSW4gOC1ieXRlcyAqLworI2RlZmluZSBUWEZfV0FURVJfTUFSS19NQVNLCQkweDBGRkYKKyNkZWZpbmUgVFhGX0xPV19XQVRFUl9NQVJLX1NISUZUCTAKKyNkZWZpbmUgVFhGX0hJR0hfV0FURVJfTUFSS19TSElGVCAJMTYKKyNkZWZpbmUgVFhRX0NUUkxfQlVSU1RfTU9ERV9FTgkJMHg4MDAwMDAwMAorCisjZGVmaW5lIFJFR19USFJVUFVUX01PTl9DVFJMCQkweDE1OUMKKyNkZWZpbmUgVEhSVVBVVF9NT05fUkFURV9NQVNLCQkweDMKKyNkZWZpbmUgVEhSVVBVVF9NT05fUkFURV9TSElGVAkJMAorI2RlZmluZSBUSFJVUFVUX01PTl9FTgkJCTB4ODAKKworLyogUlhRIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1JYUV9DVFJMICAgICAgICAgICAgICAgIAkweDE1QTAKKyNkZWZpbmUgQVNQTV9USFJVUFVUX0xJTUlUX01BU0sJCTB4MworI2RlZmluZSBBU1BNX1RIUlVQVVRfTElNSVRfU0hJRlQJMAorI2RlZmluZSBBU1BNX1RIUlVQVVRfTElNSVRfTk8JCTB4MDAKKyNkZWZpbmUgQVNQTV9USFJVUFVUX0xJTUlUXzFNCQkweDAxCisjZGVmaW5lIEFTUE1fVEhSVVBVVF9MSU1JVF8xME0JCTB4MDIKKyNkZWZpbmUgQVNQTV9USFJVUFVUX0xJTUlUXzEwME0JCTB4MDQKKyNkZWZpbmUgUlhRMV9DVFJMX0VOCQkJMHgxMAorI2RlZmluZSBSWFEyX0NUUkxfRU4JCQkweDIwCisjZGVmaW5lIFJYUTNfQ1RSTF9FTgkJCTB4NDAKKyNkZWZpbmUgSVBWNl9DSEtTVU1fQ1RSTF9FTgkJMHg4MAorI2RlZmluZSBSU1NfSEFTSF9CSVRTX01BU0sJCTB4MDBGRgorI2RlZmluZSBSU1NfSEFTSF9CSVRTX1NISUZUCQk4CisjZGVmaW5lIFJTU19IQVNIX0lQVjQJCQkweDEwMDAwCisjZGVmaW5lIFJTU19IQVNIX0lQVjRfVENQCQkweDIwMDAwCisjZGVmaW5lIFJTU19IQVNIX0lQVjYJCQkweDQwMDAwCisjZGVmaW5lIFJTU19IQVNIX0lQVjZfVENQCQkweDgwMDAwCisjZGVmaW5lIFJYUV9SRkRfQlVSU1RfTlVNX01BU0sJCTB4MDAzRgorI2RlZmluZSBSWFFfUkZEX0JVUlNUX05VTV9TSElGVAkJMjAKKyNkZWZpbmUgUlNTX01PREVfTUFTSwkJCTB4MDAwMworI2RlZmluZSBSU1NfTU9ERV9TSElGVAkJCTI2CisjZGVmaW5lIFJTU19OSVBfUVVFVUVfU0VMX01BU0sJCTB4MQorI2RlZmluZSBSU1NfTklQX1FVRVVFX1NFTF9TSElGVAkJMjgKKyNkZWZpbmUgUlJTX0hBU0hfQ1RSTF9FTgkJMHgyMDAwMDAwMAorI2RlZmluZSBSWF9DVVRfVEhSVV9FTgkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUlhRX0NUUkxfRU4JCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgUkVHX1JGRF9GUkVFX1RIUkVTSAkJMHgxNUE0CisjZGVmaW5lIFJGRF9GUkVFX1RIUkVTSF9NQVNLCQkweDAwM0YKKyNkZWZpbmUgUkZEX0ZSRUVfSElfVEhSRVNIX1NISUZUCTAKKyNkZWZpbmUgUkZEX0ZSRUVfTE9fVEhSRVNIX1NISUZUCTYKKworLyogUlhGIGZsb3cgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSRUdfUlhRX1JYRl9QQVVTRV9USFJFU0ggICAgCTB4MTVBOAorI2RlZmluZSBSWFFfUlhGX1BBVVNFX1RIX0hJX1NISUZUICAgICAgIDAKKyNkZWZpbmUgUlhRX1JYRl9QQVVTRV9USF9ISV9NQVNLICAgICAgICAweDBGRkYKKyNkZWZpbmUgUlhRX1JYRl9QQVVTRV9USF9MT19TSElGVCAgICAgICAxNgorI2RlZmluZSBSWFFfUlhGX1BBVVNFX1RIX0xPX01BU0sgICAgICAgIDB4MEZGRgorCisjZGVmaW5lIFJFR19SWERfRE1BX0NUUkwJCTB4MTVBQworI2RlZmluZSBSWERfRE1BX1RIUkVTSF9NQVNLCQkweDBGRkYJLyogSW4gOC1ieXRlcyAqLworI2RlZmluZSBSWERfRE1BX1RIUkVTSF9TSElGVAkJMAorI2RlZmluZSBSWERfRE1BX0RPV05fVElNRVJfTUFTSwkJMHhGRkZGCisjZGVmaW5lIFJYRF9ETUFfRE9XTl9USU1FUl9TSElGVAkxNgorCisvKiBETUEgRW5naW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0RNQV9DVFJMICAgICAgICAgICAgICAgIAkweDE1QzAKKyNkZWZpbmUgRE1BX0NUUkxfRE1BUl9JTl9PUkRFUiAgICAgICAgICAweDEKKyNkZWZpbmUgRE1BX0NUUkxfRE1BUl9FTkhfT1JERVIgICAgICAgICAweDIKKyNkZWZpbmUgRE1BX0NUUkxfRE1BUl9PVVRfT1JERVIgICAgICAgICAweDQKKyNkZWZpbmUgRE1BX0NUUkxfUkNCX1ZBTFVFICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fTUFTSyAgICAweDAwMDcKKyNkZWZpbmUgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fU0hJRlQgICA0CisjZGVmaW5lIERNQV9DVFJMX0RNQVdfQlVSU1RfTEVOX01BU0sgICAgMHgwMDA3CisjZGVmaW5lIERNQV9DVFJMX0RNQVdfQlVSU1RfTEVOX1NISUZUICAgNworI2RlZmluZSBETUFfQ1RSTF9ETUFSX1JFUV9QUkkgICAgICAgICAgIDB4NDAwCisjZGVmaW5lIERNQV9DVFJMX0RNQVJfRExZX0NOVF9NQVNLICAgICAgMHgwMDFGCisjZGVmaW5lIERNQV9DVFJMX0RNQVJfRExZX0NOVF9TSElGVCAgICAgMTEKKyNkZWZpbmUgRE1BX0NUUkxfRE1BV19ETFlfQ05UX01BU0sgICAgICAweDAwMEYKKyNkZWZpbmUgRE1BX0NUUkxfRE1BV19ETFlfQ05UX1NISUZUICAgICAxNgorI2RlZmluZSBETUFfQ1RSTF9DTUJfRU4gICAgICAgICAgICAgICAJMHgxMDAwMDAKKyNkZWZpbmUgRE1BX0NUUkxfU01CX0VOCQkJMHgyMDAwMDAKKyNkZWZpbmUgRE1BX0NUUkxfQ01CX05PVwkJMHg0MDAwMDAKKyNkZWZpbmUgTUFDX0NUUkxfU01CX0RJUwkJMHgxMDAwMDAwCisjZGVmaW5lIERNQV9DVFJMX1NNQl9OT1cJCTB4ODAwMDAwMDAKKworLyogQ01CL1NNQiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19TTUJfU1RBVF9USU1FUgkJMHgxNUM0CS8qIDJ1cyByZXNvbHV0aW9uICovCisjZGVmaW5lIFNNQl9TVEFUX1RJTUVSX01BU0sJCTB4RkZGRkZGCisjZGVmaW5lIFJFR19DTUJfVFBEX1RIUkVTSAkJMHgxNUM4CisjZGVmaW5lIENNQl9UUERfVEhSRVNIX01BU0sJCTB4RkZGRgorI2RlZmluZSBSRUdfQ01CX1RYX1RJTUVSCQkweDE1Q0MJLyogMnVzIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgQ01CX1RYX1RJTUVSX01BU0sJCTB4RkZGRgorCisvKiBNYWlsIGJveCAqLworI2RlZmluZSBNQl9SRkRYX1BST0RfSURYX01BU0sJCTB4RkZGRgorI2RlZmluZSBSRUdfTUJfUkZEMF9QUk9EX0lEWAkJMHgxNUUwCisjZGVmaW5lIFJFR19NQl9SRkQxX1BST0RfSURYCQkweDE1RTQKKyNkZWZpbmUgUkVHX01CX1JGRDJfUFJPRF9JRFgJCTB4MTVFOAorI2RlZmluZSBSRUdfTUJfUkZEM19QUk9EX0lEWAkJMHgxNUVDCisKKyNkZWZpbmUgTUJfUFJJT19QUk9EX0lEWF9NQVNLCQkweEZGRkYKKyNkZWZpbmUgUkVHX01CX1BSSU9fUFJPRF9JRFgJCTB4MTVGMAorI2RlZmluZSBNQl9IVFBEX1BST0RfSURYX1NISUZUCQkwCisjZGVmaW5lIE1CX05UUERfUFJPRF9JRFhfU0hJRlQJCTE2CisKKyNkZWZpbmUgTUJfUFJJT19DT05TX0lEWF9NQVNLCQkweEZGRkYKKyNkZWZpbmUgUkVHX01CX1BSSU9fQ09OU19JRFgJCTB4MTVGNAorI2RlZmluZSBNQl9IVFBEX0NPTlNfSURYX1NISUZUCQkwCisjZGVmaW5lIE1CX05UUERfQ09OU19JRFhfU0hJRlQJCTE2CisKKyNkZWZpbmUgUkVHX01CX1JGRDAxX0NPTlNfSURYCQkweDE1RjgKKyNkZWZpbmUgTUJfUkZEMF9DT05TX0lEWF9NQVNLCQkweDAwMDBGRkZGCisjZGVmaW5lIE1CX1JGRDFfQ09OU19JRFhfTUFTSwkJMHhGRkZGMDAwMAorI2RlZmluZSBSRUdfTUJfUkZEMjNfQ09OU19JRFgJCTB4MTVGQworI2RlZmluZSBNQl9SRkQyX0NPTlNfSURYX01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgTUJfUkZEM19DT05TX0lEWF9NQVNLCQkweEZGRkYwMDAwCisKKy8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0lTUiAgICAJCQkweDE2MDAKKyNkZWZpbmUgSVNSX1NNQgkJCQkweDAwMDAwMDAxCisjZGVmaW5lIElTUl9USU1FUgkJCTB4MDAwMDAwMDIKKy8qCisgKiBTb2Z0d2FyZSBtYW51YWwgaW50ZXJydXB0LCBmb3IgZGVidWcuIFNldCB3aGVuIFNXX01BTl9JTlRfRU4gaXMgc2V0CisgKiBpbiBUYWJsZSA1MSBTZWxlbmUgTWFzdGVyIENvbnRyb2wgUmVnaXN0ZXIgKE9mZnNldCAweDE0MDApLgorICovCisjZGVmaW5lIElTUl9NQU5VQUwgICAgICAgICAJCTB4MDAwMDAwMDQKKyNkZWZpbmUgSVNSX0hXX1JYRl9PViAgICAgICAgICAJCTB4MDAwMDAwMDggLyogUlhGIG92ZXJmbG93IGludGVycnVwdCAqLworI2RlZmluZSBJU1JfUkZEMF9VUgkJCTB4MDAwMDAwMTAgLyogUkZEMCB1bmRlciBydW4gKi8KKyNkZWZpbmUgSVNSX1JGRDFfVVIJCQkweDAwMDAwMDIwCisjZGVmaW5lIElTUl9SRkQyX1VSCQkJMHgwMDAwMDA0MAorI2RlZmluZSBJU1JfUkZEM19VUgkJCTB4MDAwMDAwODAKKyNkZWZpbmUgSVNSX1RYRl9VUgkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgSVNSX0RNQVJfVE9fUlNUCQkJMHgwMDAwMDIwMAorI2RlZmluZSBJU1JfRE1BV19UT19SU1QJCQkweDAwMDAwNDAwCisjZGVmaW5lIElTUl9UWF9DUkVESVQJCQkweDAwMDAwODAwCisjZGVmaW5lIElTUl9HUEhZCQkJMHgwMDAwMTAwMAorLyogR1BIWSBsb3cgcG93ZXIgc3RhdGUgaW50ZXJydXB0ICovCisjZGVmaW5lIElTUl9HUEhZX0xQVyAgICAgICAgICAgCQkweDAwMDAyMDAwCisjZGVmaW5lIElTUl9UWFFfVE9fUlNUCQkJMHgwMDAwNDAwMAorI2RlZmluZSBJU1JfVFhfUEtUCQkJMHgwMDAwODAwMAorI2RlZmluZSBJU1JfUlhfUEtUXzAJCQkweDAwMDEwMDAwCisjZGVmaW5lIElTUl9SWF9QS1RfMQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgSVNSX1JYX1BLVF8yCQkJMHgwMDA0MDAwMAorI2RlZmluZSBJU1JfUlhfUEtUXzMJCQkweDAwMDgwMDAwCisjZGVmaW5lIElTUl9NQUNfUlgJCQkweDAwMTAwMDAwCisjZGVmaW5lIElTUl9NQUNfVFgJCQkweDAwMjAwMDAwCisjZGVmaW5lIElTUl9VUl9ERVRFQ1RFRAkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgSVNSX0ZFUlJfREVURUNURUQJCTB4MDA4MDAwMDAKKyNkZWZpbmUgSVNSX05GRVJSX0RFVEVDVEVECQkweDAxMDAwMDAwCisjZGVmaW5lIElTUl9DRVJSX0RFVEVDVEVECQkweDAyMDAwMDAwCisjZGVmaW5lIElTUl9QSFlfTElOS0RPV04JCTB4MDQwMDAwMDAKKyNkZWZpbmUgSVNSX0RJU19JTlQJCQkweDgwMDAwMDAwCisKKy8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19JTVIJCQkJMHgxNjA0CisKKyNkZWZpbmUgSU1SX05PUk1BTF9NQVNLCQkoXAorCQlJU1JfTUFOVUFMCXxcCisJCUlTUl9IV19SWEZfT1YJfFwKKwkJSVNSX1JGRDBfVVIJfFwKKwkJSVNSX1RYRl9VUgl8XAorCQlJU1JfRE1BUl9UT19SU1QJfFwKKwkJSVNSX1RYUV9UT19SU1QgIHxcCisJCUlTUl9ETUFXX1RPX1JTVAl8XAorCQlJU1JfR1BIWQl8XAorCQlJU1JfVFhfUEtUCXxcCisJCUlTUl9SWF9QS1RfMAl8XAorCQlJU1JfR1BIWV9MUFcgICAgfFwKKwkJSVNSX1BIWV9MSU5LRE9XTikKKworI2RlZmluZSBJU1JfUlhfUEtUIAkoXAorCUlTUl9SWF9QS1RfMCAgICB8XAorCUlTUl9SWF9QS1RfMSAgICB8XAorCUlTUl9SWF9QS1RfMiAgICB8XAorCUlTUl9SWF9QS1RfMykKKworI2RlZmluZSBJU1JfT1ZFUgkoXAorCUlTUl9SRkQwX1VSIAl8XAorCUlTUl9SRkQxX1VSCXxcCisJSVNSX1JGRDJfVVIJfFwKKwlJU1JfUkZEM19VUgl8XAorCUlTUl9IV19SWEZfT1YJfFwKKwlJU1JfVFhGX1VSKQorCisjZGVmaW5lIElTUl9FUlJPUgkoXAorCUlTUl9ETUFSX1RPX1JTVAl8XAorCUlTUl9UWFFfVE9fUlNUICB8XAorCUlTUl9ETUFXX1RPX1JTVAl8XAorCUlTUl9QSFlfTElOS0RPV04pCisKKyNkZWZpbmUgUkVHX0lOVF9SRVRSSUdfVElNRVIJCTB4MTYwOAorI2RlZmluZSBJTlRfUkVUUklHX1RJTUVSX01BU0sJCTB4RkZGRgorCisjZGVmaW5lIFJFR19IRFNfQ1RSTAkJCTB4MTYwQworI2RlZmluZSBIRFNfQ1RSTF9FTgkJCTB4MDAwMQorI2RlZmluZSBIRFNfQ1RSTF9CQUNLRklMTFNJWkVfU0hJRlQJOAorI2RlZmluZSBIRFNfQ1RSTF9CQUNLRklMTFNJWkVfTUFTSwkweDBGRkYKKyNkZWZpbmUgSERTX0NUUkxfTUFYX0hEUlNJWkVfU0hJRlQJMjAKKyNkZWZpbmUgSERTX0NUUkxfTUFDX0hEUlNJWkVfTUFTSwkweDBGRkYKKworI2RlZmluZSBSRUdfTUFDX1JYX1NUQVRVU19CSU4gCQkweDE3MDAKKyNkZWZpbmUgUkVHX01BQ19SWF9TVEFUVVNfRU5EIAkJMHgxNzVjCisjZGVmaW5lIFJFR19NQUNfVFhfU1RBVFVTX0JJTiAJCTB4MTc2MAorI2RlZmluZSBSRUdfTUFDX1RYX1NUQVRVU19FTkQgCQkweDE3YzAKKworLyogREVCVUcgQUREUiAqLworI2RlZmluZSBSRUdfREVCVUdfREFUQTAgCQkweDE5MDAKKyNkZWZpbmUgUkVHX0RFQlVHX0RBVEExIAkJMHgxOTA0CisKKy8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9CTUNSCQkJMHgwMAorI2RlZmluZSBCTUNSX1NQRUVEX1NFTEVDVF9NU0IJCTB4MDA0MCAgLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCisjZGVmaW5lIEJNQ1JfQ09MTF9URVNUX0VOQUJMRQkJMHgwMDgwICAvKiBDb2xsaXNpb24gdGVzdCBlbmFibGUgKi8KKyNkZWZpbmUgQk1DUl9GVUxMX0RVUExFWAkJMHgwMTAwICAvKiBGRFggPTEsIGhhbGYgZHVwbGV4ID0wICovCisjZGVmaW5lIEJNQ1JfUkVTVEFSVF9BVVRPX05FRwkJMHgwMjAwICAvKiBSZXN0YXJ0IGF1dG8gbmVnb3RpYXRpb24gKi8KKyNkZWZpbmUgQk1DUl9JU09MQVRFCQkJMHgwNDAwICAvKiBJc29sYXRlIFBIWSBmcm9tIE1JSSAqLworI2RlZmluZSBCTUNSX1BPV0VSX0RPV04JCQkweDA4MDAgIC8qIFBvd2VyIGRvd24gKi8KKyNkZWZpbmUgQk1DUl9BVVRPX05FR19FTgkJMHgxMDAwICAvKiBBdXRvIE5lZyBFbmFibGUgKi8KKyNkZWZpbmUgQk1DUl9TUEVFRF9TRUxFQ1RfTFNCCQkweDIwMDAgIC8qIGJpdHMgNiwxMzogMTA9MTAwMCwgMDE9MTAwLCAwMD0xMCAqLworI2RlZmluZSBCTUNSX0xPT1BCQUNLCQkJMHg0MDAwICAvKiAwID0gbm9ybWFsLCAxID0gbG9vcGJhY2sgKi8KKyNkZWZpbmUgQk1DUl9SRVNFVAkJCTB4ODAwMCAgLyogMCA9IG5vcm1hbCwgMSA9IFBIWSByZXNldCAqLworI2RlZmluZSBCTUNSX1NQRUVEX01BU0sJCQkweDIwNDAKKyNkZWZpbmUgQk1DUl9TUEVFRF8xMDAwCQkJMHgwMDQwCisjZGVmaW5lIEJNQ1JfU1BFRURfMTAwCQkJMHgyMDAwCisjZGVmaW5lIEJNQ1JfU1BFRURfMTAJCQkweDAwMDAKKworLyogUEhZIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQk1TUgkJCTB4MDEKKyNkZWZpbmUgQk1NU1JfRVhURU5ERURfQ0FQUwkJMHgwMDAxICAvKiBFeHRlbmRlZCByZWdpc3RlciBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgQk1TUl9KQUJCRVJfREVURUNUCQkweDAwMDIgIC8qIEphYmJlciBEZXRlY3RlZCAqLworI2RlZmluZSBCTVNSX0xJTktfU1RBVFVTCQkweDAwMDQgIC8qIExpbmsgU3RhdHVzIDEgPSBsaW5rICovCisjZGVmaW5lIEJNU1JfQVVUT05FR19DQVBTCQkweDAwMDggIC8qIEF1dG8gTmVnIENhcGFibGUgKi8KKyNkZWZpbmUgQk1TUl9SRU1PVEVfRkFVTFQJCTB4MDAxMCAgLyogUmVtb3RlIEZhdWx0IERldGVjdCAqLworI2RlZmluZSBCTVNSX0FVVE9ORUdfQ09NUExFVEUJCTB4MDAyMCAgLyogQXV0byBOZWcgQ29tcGxldGUgKi8KKyNkZWZpbmUgQk1TUl9QUkVBTUJMRV9TVVBQUkVTUwkJMHgwMDQwICAvKiBQcmVhbWJsZSBtYXkgYmUgc3VwcHJlc3NlZCAqLworI2RlZmluZSBCTVNSX0VYVEVOREVEX1NUQVRVUwkJMHgwMTAwICAvKiBFeHQuIHN0YXR1cyBpbmZvIGluIFJlZyAweDBGICovCisjZGVmaW5lIEJNU1JfMTAwVDJfSERfQ0FQUwkJMHgwMjAwICAvKiAxMDBUMiBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIEJNU1JfMTAwVDJfRkRfQ0FQUwkJMHgwNDAwICAvKiAxMDBUMiBGdWxsIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIEJNU1JfMTBUX0hEX0NBUFMJCTB4MDgwMCAgLyogMTBUICAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBCTVNSXzEwVF9GRF9DQVBTCQkweDEwMDAgIC8qIDEwVCAgIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgQk1TUl8xMDBYX0hEX0NBUFMJCTB4MjAwMCAgLyogMTAwWCAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBCTU1JSV9TUl8xMDBYX0ZEX0NBUFMJCTB4NDAwMCAgLyogMTAwWCAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBCTU1JSV9TUl8xMDBUNF9DQVBTCQkweDgwMDAgIC8qIDEwMFQ0IENhcGFibGUgKi8KKworI2RlZmluZSBNSUlfUEhZU0lEMQkJCTB4MDIKKyNkZWZpbmUgTUlJX1BIWVNJRDIJCQkweDAzCisKKy8qIEF1dG9uZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQURWRVJUSVNFCQkJMHgwNAorI2RlZmluZSBBRFZFUlRJU0VfU1BFRURfTUFTSwkJMHgwMUUwCisjZGVmaW5lIEFEVkVSVElTRV9ERUZBVUxUX0NBUAkJMHgwREUwCisKKy8qIDEwMDBCQVNFLVQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfR0lHQV9DUgkJCTB4MDkKKyNkZWZpbmUgR0lHQV9DUl8xMDAwVF9SRVBFQVRFUl9EVEUJMHgwNDAwICAvKiAxPVJlcGVhdGVyL3N3aXRjaCBkZXZpY2UgcG9ydCAwPURURSBkZXZpY2UgKi8KKworI2RlZmluZSBHSUdBX0NSXzEwMDBUX01TX1ZBTFVFCQkweDA4MDAgIC8qIDE9Q29uZmlndXJlIFBIWSBhcyBNYXN0ZXIgMD1Db25maWd1cmUgUEhZIGFzIFNsYXZlICovCisjZGVmaW5lIEdJR0FfQ1JfMTAwMFRfTVNfRU5BQkxFCQkweDEwMDAgIC8qIDE9TWFzdGVyL1NsYXZlIG1hbnVhbCBjb25maWcgdmFsdWUgMD1BdXRvbWF0aWMgTWFzdGVyL1NsYXZlIGNvbmZpZyAqLworI2RlZmluZSBHSUdBX0NSXzEwMDBUX1RFU1RfTU9ERV9OT1JNQUwJMHgwMDAwICAvKiBOb3JtYWwgT3BlcmF0aW9uICovCisjZGVmaW5lIEdJR0FfQ1JfMTAwMFRfVEVTVF9NT0RFXzEJMHgyMDAwICAvKiBUcmFuc21pdCBXYXZlZm9ybSB0ZXN0ICovCisjZGVmaW5lIEdJR0FfQ1JfMTAwMFRfVEVTVF9NT0RFXzIJMHg0MDAwICAvKiBNYXN0ZXIgVHJhbnNtaXQgSml0dGVyIHRlc3QgKi8KKyNkZWZpbmUgR0lHQV9DUl8xMDAwVF9URVNUX01PREVfMwkweDYwMDAgIC8qIFNsYXZlIFRyYW5zbWl0IEppdHRlciB0ZXN0ICovCisjZGVmaW5lIEdJR0FfQ1JfMTAwMFRfVEVTVF9NT0RFXzQJMHg4MDAwCS8qIFRyYW5zbWl0dGVyIERpc3RvcnRpb24gdGVzdCAqLworI2RlZmluZSBHSUdBX0NSXzEwMDBUX1NQRUVEX01BU0sJMHgwMzAwCisjZGVmaW5lIEdJR0FfQ1JfMTAwMFRfREVGQVVMVF9DQVAJMHgwMzAwCisKKy8qIFBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0dJR0FfUFNTUgkJCTB4MTEKKyNkZWZpbmUgR0lHQV9QU1NSX1NQRF9EUExYX1JFU09MVkVECTB4MDgwMCAgLyogMT1TcGVlZCAmIER1cGxleCByZXNvbHZlZCAqLworI2RlZmluZSBHSUdBX1BTU1JfRFBMWAkJCTB4MjAwMCAgLyogMT1EdXBsZXggMD1IYWxmIER1cGxleCAqLworI2RlZmluZSBHSUdBX1BTU1JfU1BFRUQJCQkweEMwMDAgIC8qIFNwZWVkLCBiaXRzIDE0OjE1ICovCisjZGVmaW5lIEdJR0FfUFNTUl8xME1CUwkJCTB4MDAwMCAgLyogMDA9MTBNYnMgKi8KKyNkZWZpbmUgR0lHQV9QU1NSXzEwME1CUwkJMHg0MDAwICAvKiAwMT0xMDBNYnMgKi8KKyNkZWZpbmUgR0lHQV9QU1NSXzEwMDBNQlMJCTB4ODAwMCAgLyogMTA9MTAwME1icyAqLworCisvKiBQSFkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfSUVSCQkJCTB4MTIKKyNkZWZpbmUgSUVSX0xJTktfVVAJCQkweDA0MDAKKyNkZWZpbmUgSUVSX0xJTktfRE9XTgkJCTB4MDgwMAorCisvKiBQSFkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfSVNSCQkJCTB4MTMKKyNkZWZpbmUgSVNSX0xJTktfVVAJCQkweDA0MDAKKyNkZWZpbmUgSVNSX0xJTktfRE9XTgkJCTB4MDgwMAorCisvKiBDYWJsZS1EZXRlY3QtVGVzdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9DRFRDCQkJMHgxNgorI2RlZmluZSBDRFRDX0VOX09GRgkJCTAgICAvKiBzYyAqLworI2RlZmluZSBDRFRDX0VOX0JJVFMJCQkxCisjZGVmaW5lIENEVENfUEFJUl9PRkYJCQk4CisjZGVmaW5lIENEVENfUEFJUl9CSVQJCQkyCisKKy8qIENhYmxlLURldGVjdC1UZXN0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQ0RUUwkJCTB4MUMKKyNkZWZpbmUgQ0RUU19TVEFUVVNfT0ZGCQkJOAorI2RlZmluZSBDRFRTX1NUQVRVU19CSVRTCQkyCisjZGVmaW5lIENEVFNfU1RBVFVTX05PUk1BTAkJMAorI2RlZmluZSBDRFRTX1NUQVRVU19TSE9SVAkJMQorI2RlZmluZSBDRFRTX1NUQVRVU19PUEVOCQkyCisjZGVmaW5lIENEVFNfU1RBVFVTX0lOVkFMSUQJCTMKKworI2RlZmluZSBNSUlfREJHX0FERFIJCQkweDFECisjZGVmaW5lIE1JSV9EQkdfREFUQQkJCTB4MUUKKworI2RlZmluZSBNSUlfQU5BX0NUUkxfMAkJCTB4MAorI2RlZmluZSBBTkFfUkVTVEFSVF9DQUwJCQkweDAwMDEKKyNkZWZpbmUgQU5BX01BTlVMX1NXSUNIX09OX1NISUZUCTB4MQorI2RlZmluZSBBTkFfTUFOVUxfU1dJQ0hfT05fTUFTSwkJMHhGCisjZGVmaW5lIEFOQV9NQU5fRU5BQkxFCQkJMHgwMDIwCisjZGVmaW5lIEFOQV9TRUxfSFNQCQkJMHgwMDQwCisjZGVmaW5lIEFOQV9FTl9IQgkJCTB4MDA4MAorI2RlZmluZSBBTkFfRU5fSEJJQVMJCQkweDAxMDAKKyNkZWZpbmUgQU5BX09FTl8xMjVNCQkJMHgwMjAwCisjZGVmaW5lIEFOQV9FTl9MQ0tEVAkJCTB4MDQwMAorI2RlZmluZSBBTkFfTENLRFRfUEhZCQkJMHgwODAwCisjZGVmaW5lIEFOQV9BRkVfTU9ERQkJCTB4MTAwMAorI2RlZmluZSBBTkFfVkNPX1NMT1cJCQkweDIwMDAKKyNkZWZpbmUgQU5BX1ZDT19GQVNUCQkJMHg0MDAwCisjZGVmaW5lIEFOQV9TRUxfQ0xLMTI1TV9EU1AJCTB4ODAwMAorCisjZGVmaW5lIE1JSV9BTkFfQ1RSTF80CQkJMHg0CisjZGVmaW5lIEFOQV9JRUNIT19BREpfTUFTSwkJMHhGCisjZGVmaW5lIEFOQV9JRUNIT19BREpfM19TSElGVAkJMAorI2RlZmluZSBBTkFfSUVDSE9fQURKXzJfU0hJRlQJCTQKKyNkZWZpbmUgQU5BX0lFQ0hPX0FESl8xX1NISUZUCQk4CisjZGVmaW5lIEFOQV9JRUNIT19BREpfMF9TSElGVAkJMTIKKworI2RlZmluZSBNSUlfQU5BX0NUUkxfNQkJCTB4NQorI2RlZmluZSBBTkFfU0VSREVTX0NEUl9CV19TSElGVAkJMAorI2RlZmluZSBBTkFfU0VSREVTX0NEUl9CV19NQVNLCQkweDMKKyNkZWZpbmUgQU5BX01TX1BBRF9EQkcJCQkweDAwMDQKKyNkZWZpbmUgQU5BX1NQRUVEVVBfREJHCQkJMHgwMDA4CisjZGVmaW5lIEFOQV9TRVJERVNfVEhfTE9TX1NISUZUCQk0CisjZGVmaW5lIEFOQV9TRVJERVNfVEhfTE9TX01BU0sJCTB4MworI2RlZmluZSBBTkFfU0VSREVTX0VOX0RFRU0JCTB4MDA0MAorI2RlZmluZSBBTkFfU0VSREVTX1RYRUxFQ0lETEUJCTB4MDA4MAorI2RlZmluZSBBTkFfU0VSREVTX0JFQUNPTgkJMHgwMTAwCisjZGVmaW5lIEFOQV9TRVJERVNfSEFMRlRYRFIJCTB4MDIwMAorI2RlZmluZSBBTkFfU0VSREVTX1NFTF9IU1AJCTB4MDQwMAorI2RlZmluZSBBTkFfU0VSREVTX0VOX1BMTAkJMHgwODAwCisjZGVmaW5lIEFOQV9TRVJERVNfRU4JCQkweDEwMDAKKyNkZWZpbmUgQU5BX1NFUkRFU19FTl9MQ0tEVAkJMHgyMDAwCisKKyNkZWZpbmUgTUlJX0FOQV9DVFJMXzExCQkJMHhCCisjZGVmaW5lIEFOQV9QU19ISUJfRU4JCQkweDgwMDAKKworI2RlZmluZSBNSUlfQU5BX0NUUkxfMTgJCQkweDEyCisjZGVmaW5lIEFOQV9URVNUX01PREVfMTBCVF8wMVNISUZUCTAKKyNkZWZpbmUgQU5BX1RFU1RfTU9ERV8xMEJUXzAxTUFTSwkweDMKKyNkZWZpbmUgQU5BX0xPT1BfU0VMXzEwQlQJCTB4MDAwNAorI2RlZmluZSBBTkFfUkdNSUlfTU9ERV9TVwkJMHgwMDA4CisjZGVmaW5lIEFOQV9FTl9MT05HRUNBQkxFCQkweDAwMTAKKyNkZWZpbmUgQU5BX1RFU1RfTU9ERV8xMEJUXzIJCTB4MDAyMAorI2RlZmluZSBBTkFfRU5fMTBCVF9JRExFCQkweDA0MDAKKyNkZWZpbmUgQU5BX0VOX01BU0tfVEIJCQkweDA4MDAKKyNkZWZpbmUgQU5BX1RSSUdHRVJfU0VMX1RJTUVSX1NISUZUCTEyCisjZGVmaW5lIEFOQV9UUklHR0VSX1NFTF9USU1FUl9NQVNLCTB4MworI2RlZmluZSBBTkFfSU5URVJWQUxfU0VMX1RJTUVSX1NISUZUCTE0CisjZGVmaW5lIEFOQV9JTlRFUlZBTF9TRUxfVElNRVJfTUFTSwkweDMKKworI2RlZmluZSBNSUlfQU5BX0NUUkxfNDEJCQkweDI5CisjZGVmaW5lIEFOQV9UT1BfUFNfRU4JCQkweDgwMDAKKworI2RlZmluZSBNSUlfQU5BX0NUUkxfNTQJCQkweDM2CisjZGVmaW5lIEFOQV9MT05HX0NBQkxFX1RIXzEwMF9TSElGVAkwCisjZGVmaW5lIEFOQV9MT05HX0NBQkxFX1RIXzEwMF9NQVNLCTB4M0YKKyNkZWZpbmUgQU5BX0RFU0VSVkVECQkJMHgwMDQwCisjZGVmaW5lIEFOQV9FTl9MSVRfQ0gJCQkweDAwODAKKyNkZWZpbmUgQU5BX1NIT1JUX0NBQkxFX1RIXzEwMF9TSElGVAk4CisjZGVmaW5lIEFOQV9TSE9SVF9DQUJMRV9USF8xMDBfTUFTSwkweDNGCisjZGVmaW5lIEFOQV9CUF9CQURfTElOS19BQ0NVTQkJMHg0MDAwCisjZGVmaW5lIEFOQV9CUF9TTUFMTF9CVwkJCTB4ODAwMAorCisjZW5kaWYgLypfQVRMMUNfSFdfSF8qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjdiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKQEAgLTAsMCArMSwyNzk3IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEF0aGVyb3MgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGVyaXZlZCBmcm9tIEludGVsIGUxMDAwIGRyaXZlcgorICogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJhdGwxYy5oIgorCisjZGVmaW5lIEFUTDFDX0RSVl9WRVJTSU9OICIxLjAuMC4xLU5BUEkiCitjaGFyIGF0bDFjX2RyaXZlcl9uYW1lW10gPSAiYXRsMWMiOworY2hhciBhdGwxY19kcml2ZXJfdmVyc2lvbltdID0gQVRMMUNfRFJWX1ZFUlNJT047CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDJDICAgICAgMHgxMDYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDFDICAgICAgMHgxMDYzCisvKgorICogYXRsMWNfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKKyAqCisgKiBXaWxkY2FyZCBlbnRyaWVzIChQQ0lfQU5ZX0lEKSBzaG91bGQgY29tZSBsYXN0CisgKiBMYXN0IGVudHJ5IG11c3QgYmUgYWxsIDBzCisgKgorICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCisgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGwxY19wY2lfdGJsW10gPSB7CisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMUMpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wyQyl9LAorCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KKwl7IDAgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGwxY19wY2lfdGJsKTsKKworTU9EVUxFX0FVVEhPUigiSmllIFlhbmcgPGppZS55YW5nQGF0aGVyb3MuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdGhlcm9zIDEwMDBNIEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihBVEwxQ19EUlZfVkVSU0lPTik7CisKK3N0YXRpYyBpbnQgYXRsMWNfc3RvcF9tYWMoc3RydWN0IGF0bDFjX2h3ICpodyk7CitzdGF0aWMgdm9pZCBhdGwxY19lbmFibGVfcnhfY3RybChzdHJ1Y3QgYXRsMWNfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGF0bDFjX2VuYWJsZV90eF9jdHJsKHN0cnVjdCBhdGwxY19odyAqaHcpOworc3RhdGljIHZvaWQgYXRsMWNfZGlzYWJsZV9sMHNfbDEoc3RydWN0IGF0bDFjX2h3ICpodyk7CitzdGF0aWMgdm9pZCBhdGwxY19zZXRfYXNwbShzdHJ1Y3QgYXRsMWNfaHcgKmh3LCBib29sIGxpbmt1cCk7CitzdGF0aWMgdm9pZCBhdGwxY19zZXR1cF9tYWNfY3RybChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBhdGwxY19jbGVhbl9yeF9pcnEoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHF1ZSwKKwkJICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKKworc3RhdGljIGNvbnN0IHUxNiBhdGwxY19wYXlfbG9hZF9zaXplW10gPSB7CisJMTI4LCAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgYXRsMWNfcmZkX3Byb2RfaWR4X3JlZ3NbQVRfTUFYX1JFQ0VJVkVfUVVFVUVdID0KK3sKKwlSRUdfTUJfUkZEMF9QUk9EX0lEWCwKKwlSRUdfTUJfUkZEMV9QUk9EX0lEWCwKKwlSRUdfTUJfUkZEMl9QUk9EX0lEWCwKKwlSRUdfTUJfUkZEM19QUk9EX0lEWAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBhdGwxY19yZmRfYWRkcl9sb19yZWdzW0FUX01BWF9SRUNFSVZFX1FVRVVFXSA9Cit7CisJUkVHX1JGRDBfSEVBRF9BRERSX0xPLAorCVJFR19SRkQxX0hFQURfQUREUl9MTywKKwlSRUdfUkZEMl9IRUFEX0FERFJfTE8sCisJUkVHX1JGRDNfSEVBRF9BRERSX0xPCit9OworCitzdGF0aWMgY29uc3QgdTE2IGF0bDFjX3JyZF9hZGRyX2xvX3JlZ3NbQVRfTUFYX1JFQ0VJVkVfUVVFVUVdID0KK3sKKwlSRUdfUlJEMF9IRUFEX0FERFJfTE8sCisJUkVHX1JSRDFfSEVBRF9BRERSX0xPLAorCVJFR19SUkQyX0hFQURfQUREUl9MTywKKwlSRUdfUlJEM19IRUFEX0FERFJfTE8KK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXRsMWNfZGVmYXVsdF9tc2cgPSBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwKKwlORVRJRl9NU0dfTElOSyB8IE5FVElGX01TR19USU1FUiB8IE5FVElGX01TR19JRkRPV04gfCBORVRJRl9NU0dfSUZVUDsKKworLyoKKyAqIGF0bDFjX2luaXRfcGNpZSAtIGluaXQgUENJRSBtb2R1bGUKKyAqLworc3RhdGljIHZvaWQgYXRsMWNfcmVzZXRfcGNpZShzdHJ1Y3QgYXRsMWNfaHcgKmh3LCB1MzIgZmxhZykKK3sKKwl1MzIgZGF0YTsKKwl1MzIgcGNpX2NtZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3LT5hZGFwdGVyLT5wZGV2OworCisJQVRfUkVBRF9SRUcoaHcsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CisJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOworCXBjaV9jbWQgfD0gKFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8CisJCVBDSV9DT01NQU5EX0lPKTsKKwlBVF9XUklURV9SRUcoaHcsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKKworCS8qCisJICogQ2xlYXIgYW55IFBvd2VyU2F2ZWluZyBTZXR0aW5ncworCSAqLworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKworCS8qCisJICogTWFzayBzb21lIHBjaWUgZXJyb3IgYml0cworCSAqLworCUFUX1JFQURfUkVHKGh3LCBSRUdfUENJRV9VQ19TRVZFUklUWSwgJmRhdGEpOworCWRhdGEgJj0gflBDSUVfVUNfU0VSVlJJVFlfRExQOworCWRhdGEgJj0gflBDSUVfVUNfU0VSVlJJVFlfRkNQOworCUFUX1dSSVRFX1JFRyhodywgUkVHX1BDSUVfVUNfU0VWRVJJVFksIGRhdGEpOworCisJaWYgKGZsYWcgJiBBVEwxQ19QQ0lFX0wwU19MMV9ESVNBQkxFKQorCQlhdGwxY19kaXNhYmxlX2wwc19sMShodyk7CisJaWYgKGZsYWcgJiBBVEwxQ19QQ0lFX1BIWV9SRVNFVCkKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfR1BIWV9DVFJMLCBHUEhZX0NUUkxfREVGQVVMVCk7CisJZWxzZQorCQlBVF9XUklURV9SRUcoaHcsIFJFR19HUEhZX0NUUkwsCisJCQlHUEhZX0NUUkxfREVGQVVMVCB8IEdQSFlfQ1RSTF9FWFRfUkVTRVQpOworCisJbXNsZWVwKDEpOworfQorCisvKgorICogYXRsMWNfaXJxX2VuYWJsZSAtIEVuYWJsZSBkZWZhdWx0IGludGVycnVwdCBnZW5lcmF0aW9uIHNldHRpbmdzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0bDFjX2lycV9lbmFibGUoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGxpa2VseShhdG9taWNfZGVjX2FuZF90ZXN0KCZhZGFwdGVyLT5pcnFfc2VtKSkpIHsKKwkJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lTUiwgMHg3RkZGRkZGRik7CisJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIsIGFkYXB0ZXItPmh3LmludHJfbWFzayk7CisJCUFUX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CisJfQorfQorCisvKgorICogYXRsMWNfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0bDFjX2lycV9kaXNhYmxlKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKQoreworCWF0b21pY19pbmMoJmFkYXB0ZXItPmlycV9zZW0pOworCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIsIDApOworCUFUX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CisJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSk7Cit9CisKKy8qCisgKiBhdGwxY19pcnFfcmVzZXQgLSByZXNldCBpbnRlcnJ1cHQgY29uZml1cmUgb24gdGhlIE5JQworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGwxY19pcnFfcmVzZXQoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYXRvbWljX3NldCgmYWRhcHRlci0+aXJxX3NlbSwgMSk7CisJYXRsMWNfaXJxX2VuYWJsZShhZGFwdGVyKTsKK30KKworLyoKKyAqIGF0bDFjX3BoeV9jb25maWcgLSBUaW1lciBDYWxsLWJhY2sKKyAqIEBkYXRhOiBwb2ludGVyIHRvIG5ldGRldiBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZworICovCitzdGF0aWMgdm9pZCBhdGwxY19waHlfY29uZmlnKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqKSBkYXRhOworCXN0cnVjdCBhdGwxY19odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5tZGlvX2xvY2ssIGZsYWdzKTsKKwlhdGwxY19yZXN0YXJ0X2F1dG9uZWcoaHcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm1kaW9fbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGF0bDFjX3JlaW5pdF9sb2NrZWQoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisKKwlXQVJOX09OKGluX2ludGVycnVwdCgpKTsKKwlhdGwxY19kb3duKGFkYXB0ZXIpOworCWF0bDFjX3VwKGFkYXB0ZXIpOworCWNsZWFyX2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKworCWFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0bDFjX2FkYXB0ZXIsIHJlc2V0X3Rhc2spOworCW5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwlhdGwxY19kb3duKGFkYXB0ZXIpOworCWF0bDFjX3VwKGFkYXB0ZXIpOworCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfY2hlY2tfbGlua19zdGF0dXMoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFjX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICAgICpwZGV2ICAgPSBhZGFwdGVyLT5wZGV2OworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgc3BlZWQsIGR1cGxleCwgcGh5X2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bWRpb19sb2NrLCBmbGFncyk7CisJLyogTUlJX0JNU1IgbXVzdCByZWFkIHR3aXNlICovCisJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwlhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm1kaW9fbG9jaywgZmxhZ3MpOworCisJaWYgKChwaHlfZGF0YSAmIEJNU1JfTFNUQVRVUykgPT0gMCkgeworCQkvKiBsaW5rIGRvd24gKi8KKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJaHctPmhpYmVybmF0ZSA9IHRydWU7CisJCQlhdGwxY19zZXRfYXNwbShodywgZmFsc2UpOworCQkJaWYgKGF0bDFjX3N0b3BfbWFjKGh3KSAhPSAwKQorCQkJCWlmIChuZXRpZl9tc2dfaHcoYWRhcHRlcikpCisJCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJCQkic3RvcCBtYWMgZmFpbGVkXG4iKTsKKwkJfQorCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCX0gZWxzZSB7CisJCS8qIExpbmsgVXAgKi8KKwkJaHctPmhpYmVybmF0ZSA9IGZhbHNlOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bWRpb19sb2NrLCBmbGFncyk7CisJCWVyciA9IGF0bDFjX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmc3BlZWQsICZkdXBsZXgpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5tZGlvX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlyZXR1cm47CisJCS8qIGxpbmsgcmVzdWx0IGlzIG91ciBzZXR0aW5nICovCisJCWlmIChhZGFwdGVyLT5saW5rX3NwZWVkICE9IHNwZWVkIHx8CisJCSAgICBhZGFwdGVyLT5saW5rX2R1cGxleCAhPSBkdXBsZXgpIHsKKwkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgID0gc3BlZWQ7CisJCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IGR1cGxleDsKKwkJCWF0bDFjX2VuYWJsZV90eF9jdHJsKGh3KTsKKwkJCWF0bDFjX2VuYWJsZV9yeF9jdHJsKGh3KTsKKwkJCWF0bDFjX3NldHVwX21hY19jdHJsKGFkYXB0ZXIpOworCQkJYXRsMWNfc2V0X2FzcG0oaHcsIHRydWUpOworCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkJCSIlczogJXMgTklDIExpbmsgaXMgVXA8JWQgTWJwcyAlcz5cbiIsCisJCQkJCWF0bDFjX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUsCisJCQkJCWFkYXB0ZXItPmxpbmtfc3BlZWQsCisJCQkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYID8KKwkJCQkJIkZ1bGwgRHVwbGV4IiA6ICJIYWxmIER1cGxleCIpOworCQl9CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCX0KK30KKworLyoKKyAqIGF0bDFjX2xpbmtfY2hnX3Rhc2sgLSBkZWFsIHdpdGggbGluayBjaGFuZ2UgZXZlbnQgT3V0IG9mIGludGVycnVwdCBjb250ZXh0CisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFjX2xpbmtfY2hnX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyOworCisJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMWNfYWRhcHRlciwgbGlua19jaGdfdGFzayk7CisJYXRsMWNfY2hlY2tfbGlua19zdGF0dXMoYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2xpbmtfY2hnX2V2ZW50KHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgICAgKnBkZXYgICA9IGFkYXB0ZXItPnBkZXY7CisJdTE2IHBoeV9kYXRhOworCXUxNiBsaW5rX3VwOworCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tZGlvX2xvY2spOworCWF0bDFjX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOworCWF0bDFjX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tZGlvX2xvY2spOworCWxpbmtfdXAgPSBwaHlfZGF0YSAmIEJNU1JfTFNUQVRVUzsKKwkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgbGluayBkb3duIEFTQVAgKi8KKwlpZiAoIWxpbmtfdXApIHsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJLyogb2xkIGxpbmsgc3RhdGU6IFVwICovCisJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkJCSIlczogJXMgTklDIExpbmsgaXMgRG93blxuIiwKKwkJCQkJYXRsMWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gU1BFRURfMDsKKwkJfQorCX0KKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5saW5rX2NoZ190YXNrKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfZGVsX3RpbWVyKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKQoreworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5waHlfY29uZmlnX3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfY2FuY2VsX3dvcmsoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bGlua19jaGdfdGFzayk7Cit9CisKKy8qCisgKiBhdGwxY190eF90aW1lb3V0IC0gUmVzcG9uZCB0byBhIFR4IEhhbmcKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgYXRsMWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7Cit9CisKKy8qCisgKiBhdGwxY19zZXRfbXVsdGkgLSBNdWx0aWNhc3QgYW5kIFByb21pc2N1b3VzIG1vZGUgc2V0CisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVGhlIHNldF9tdWx0aSBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzCisgKiBsaXN0IG9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmbGFncyBhcmUgdXBkYXRlZC4gIFRoaXMgcm91dGluZSBpcworICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIG11bHRpY2FzdCwKKyAqIHByb21pc2N1b3VzIG1vZGUsIGFuZCBhbGwtbXVsdGkgYmVoYXZpb3IuCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFjX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOworCXUzMiBtYWNfY3RybF9kYXRhOworCXUzMiBoYXNoX3ZhbHVlOworCisJLyogQ2hlY2sgZm9yIFByb21pc2N1b3VzIGFuZCBBbGwgTXVsdGljYXN0IG1vZGVzICovCisJQVRfUkVBRF9SRUcoaHcsIFJFR19NQUNfQ1RSTCwgJm1hY19jdHJsX2RhdGEpOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX1BST01JU19FTjsKKwl9IGVsc2UgaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9NQ19BTExfRU47CisJCW1hY19jdHJsX2RhdGEgJj0gfk1BQ19DVFJMX1BST01JU19FTjsKKwl9IGVsc2UgeworCQltYWNfY3RybF9kYXRhICY9IH4oTUFDX0NUUkxfUFJPTUlTX0VOIHwgTUFDX0NUUkxfTUNfQUxMX0VOKTsKKwl9CisKKwlBVF9XUklURV9SRUcoaHcsIFJFR19NQUNfQ1RSTCwgbWFjX2N0cmxfZGF0YSk7CisKKwkvKiBjbGVhciB0aGUgb2xkIHNldHRpbmdzIGZyb20gdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgMCk7CisJQVRfV1JJVEVfUkVHX0FSUkFZKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgMSwgMCk7CisKKwkvKiBjb21vdXRlIG1jIGFkZHJlc3NlcycgaGFzaCB2YWx1ZSAsYW5kIHB1dCBpdCBpbnRvIGhhc2ggdGFibGUgKi8KKwlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwkJaGFzaF92YWx1ZSA9IGF0bDFjX2hhc2hfbWNfYWRkcihodywgbWNfcHRyLT5kbWlfYWRkcik7CisJCWF0bDFjX2hhc2hfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdTMyIG1hY19jdHJsX2RhdGEgPSAwOworCisJaWYgKG5ldGlmX21zZ19wa3RkYXRhKGFkYXB0ZXIpKQorCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJhdGwxY192bGFuX3J4X3JlZ2lzdGVyXG4iKTsKKworCWF0bDFjX2lycV9kaXNhYmxlKGFkYXB0ZXIpOworCisJYWRhcHRlci0+dmxncnAgPSBncnA7CisJQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUFDX0NUUkwsICZtYWNfY3RybF9kYXRhKTsKKworCWlmIChncnApIHsKKwkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLworCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX1JNVl9WTEFOOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCW1hY19jdHJsX2RhdGEgJj0gfk1BQ19DVFJMX1JNVl9WTEFOOworCX0KKworCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19NQUNfQ1RSTCwgbWFjX2N0cmxfZGF0YSk7CisJYXRsMWNfaXJxX2VuYWJsZShhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfcmVzdG9yZV92bGFuKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWlmIChuZXRpZl9tc2dfcGt0ZGF0YShhZGFwdGVyKSkKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYXRsMWNfcmVzdG9yZV92bGFuICEiKTsKKwlhdGwxY192bGFuX3J4X3JlZ2lzdGVyKGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlci0+dmxncnApOworfQorLyoKKyAqIGF0bDFjX3NldF9tYWMgLSBDaGFuZ2UgdGhlIEV0aGVybmV0IEFkZHJlc3Mgb2YgdGhlIE5JQworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQHA6IHBvaW50ZXIgdG8gYW4gYWRkcmVzcyBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IGF0bDFjX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5ody5tYWNfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisKKwlhdGwxY19od19zZXRfbWFjX2FkZHIoJmFkYXB0ZXItPmh3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGwxY19zZXRfcnhidWZzaXplKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IG10dSA9IGRldi0+bXR1OworCisJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IG10dSA+IEFUX1JYX0JVRl9TSVpFID8KKwkJcm91bmR1cChtdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOICsgVkxBTl9ITEVOLCA4KSA6IEFUX1JYX0JVRl9TSVpFOworfQorLyoKKyAqIGF0bDFjX2NoYW5nZV9tdHUgLSBDaGFuZ2UgdGhlIE1heGltdW0gVHJhbnNmZXIgVW5pdAorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQG5ld19tdHU6IG5ldyB2YWx1ZSBmb3IgbWF4aW11bSBmcmFtZSBzaXplCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBhdGwxY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgb2xkX210dSAgID0gbmV0ZGV2LT5tdHU7CisJaW50IG1heF9mcmFtZSA9IG5ld19tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOICsgVkxBTl9ITEVOOworCisJaWYgKChtYXhfZnJhbWUgPCBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSB8fAorCQkJKG1heF9mcmFtZSA+IE1BWF9KVU1CT19GUkFNRV9TSVpFKSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCisJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiaW52YWxpZCBNVFUgc2V0dGluZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBzZXQgTVRVICovCisJaWYgKG9sZF9tdHUgIT0gbmV3X210dSAmJiBuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncykpCisJCQltc2xlZXAoMSk7CisJCW5ldGRldi0+bXR1ID0gbmV3X210dTsKKwkJYWRhcHRlci0+aHcubWF4X2ZyYW1lX3NpemUgPSBuZXdfbXR1OworCQlhdGwxY19zZXRfcnhidWZzaXplKGFkYXB0ZXIsIG5ldGRldik7CisJCWF0bDFjX2Rvd24oYWRhcHRlcik7CisJCWF0bDFjX3VwKGFkYXB0ZXIpOworCQljbGVhcl9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncyk7CisJCWlmIChhZGFwdGVyLT5ody5jdHJsX2ZsYWdzICYgQVRMMUNfRlBHQV9WRVJTSU9OKSB7CisJCQl1MzIgcGh5X2RhdGE7CisKKwkJCUFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgMHgxNDE0LCAmcGh5X2RhdGEpOworCQkJcGh5X2RhdGEgfD0gMHgxMDAwMDAwMDsKKwkJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIDB4MTQxNCwgcGh5X2RhdGEpOworCQl9CisKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgY2FsbGVyIHNob3VsZCBob2xkIG1kaW9fbG9jaworICovCitzdGF0aWMgaW50IGF0bDFjX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnX251bSkKK3sKKwlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2IHJlc3VsdDsKKworCWF0bDFjX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIHJlZ19udW0gJiBNRElPX1JFR19BRERSX01BU0ssICZyZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwKKwkJCSAgICAgaW50IHJlZ19udW0sIGludCB2YWwpCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXRsMWNfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIHJlZ19udW0gJiBNRElPX1JFR19BRERSX01BU0ssIHZhbCk7Cit9CisKKy8qCisgKiBhdGwxY19taWlfaW9jdGwgLQorICogQG5ldGRldjoKKyAqIEBpZnJlcToKKyAqIEBjbWQ6CisgKi8KK3N0YXRpYyBpbnQgYXRsMWNfbWlpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bWRpb19sb2NrLCBmbGFncyk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCQlkYXRhLT5waHlfaWQgPSAwOworCQlicmVhazsKKworCWNhc2UgU0lPQ0dNSUlSRUc6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJcmV0dmFsID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGF0bDFjX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIGRhdGEtPnJlZ19udW0gJiAweDFGLAorCQkJCSAgICAmZGF0YS0+dmFsX291dCkpIHsKKwkJCXJldHZhbCA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU0lPQ1NNSUlSRUc6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJcmV0dmFsID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGRhdGEtPnJlZ19udW0gJiB+KDB4MUYpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICI8YXRsMWNfbWlpX2lvY3RsPiB3cml0ZSAleCAleCIsCisJCQkJZGF0YS0+cmVnX251bSwgZGF0YS0+dmFsX2luKTsKKwkJaWYgKGF0bDFjX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LAorCQkJCSAgICAgZGF0YS0+cmVnX251bSwgZGF0YS0+dmFsX2luKSkgeworCQkJcmV0dmFsID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5tZGlvX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogYXRsMWNfaW9jdGwgLQorICogQG5ldGRldjoKKyAqIEBpZnJlcToKKyAqIEBjbWQ6CisgKi8KK3N0YXRpYyBpbnQgYXRsMWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCWNhc2UgU0lPQ0dNSUlSRUc6CisJY2FzZSBTSU9DU01JSVJFRzoKKwkJcmV0dXJuIGF0bDFjX21paV9pb2N0bChuZXRkZXYsIGlmciwgY21kKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCisvKgorICogYXRsMWNfYWxsb2NfcXVldWVzIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBhbGwgcmluZ3MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxY19hbGxvY19xdWV1ZXMoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX3NldF9tYWNfdHlwZShzdHJ1Y3QgYXRsMWNfaHcgKmh3KQoreworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMkM6CisJCWh3LT5uaWNfdHlwZSA9IGF0aHJfbDJjOworCQlicmVhazsKKworCWNhc2UgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMUM6CisJCWh3LT5uaWNfdHlwZSA9IGF0aHJfbDFjOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBhdGwxY19zZXR1cF9tYWNfZnVuY3Moc3RydWN0IGF0bDFjX2h3ICpodykKK3sKKwl1MzIgcGh5X3N0YXR1c19kYXRhOworCXUzMiBsaW5rX2N0cmxfZGF0YTsKKworCWF0bDFjX3NldF9tYWNfdHlwZShodyk7CisJQVRfUkVBRF9SRUcoaHcsIFJFR19QSFlfU1RBVFVTLCAmcGh5X3N0YXR1c19kYXRhKTsKKwlBVF9SRUFEX1JFRyhodywgUkVHX0xJTktfQ1RSTCwgJmxpbmtfY3RybF9kYXRhKTsKKworCWh3LT5jdHJsX2ZsYWdzID0gQVRMMUNfSU5UUl9DTEVBUl9PTl9SRUFEIHwKKwkJCSBBVEwxQ19JTlRSX01PRFJUX0VOQUJMRSAgfAorCQkJIEFUTDFDX1JYX0lQVjZfQ0hLU1VNCSAgfAorCQkJIEFUTDFDX1RYUV9NT0RFX0VOSEFOQ0U7CisJaWYgKGxpbmtfY3RybF9kYXRhICYgTElOS19DVFJMX0wwU19FTikKKwkJaHctPmN0cmxfZmxhZ3MgfD0gQVRMMUNfQVNQTV9MMFNfU1VQUE9SVDsKKwlpZiAobGlua19jdHJsX2RhdGEgJiBMSU5LX0NUUkxfTDFfRU4pCisJCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0FTUE1fTDFfU1VQUE9SVDsKKworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWMpIHsKKwkJaHctPmN0cmxfZmxhZ3MgfD0gQVRMMUNfQVNQTV9DVFJMX01PTjsKKwkJaHctPmN0cmxfZmxhZ3MgfD0gQVRMMUNfTElOS19DQVBfMTAwME07CisJfQorCXJldHVybiAwOworfQorLyoKKyAqIGF0bDFjX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlcyAoc3RydWN0IGF0bDFjX2FkYXB0ZXIpCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIGF0bDFjX3N3X2luaXQgaW5pdGlhbGl6ZXMgdGhlIEFkYXB0ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4KKyAqIEZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24gUENJIGRldmljZSBpbmZvcm1hdGlvbiBhbmQKKyAqIE9TIG5ldHdvcmsgZGV2aWNlIHNldHRpbmdzIChNVFUgc2l6ZSkuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bDFjX3N3X2luaXQoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFjX2h3ICpodyAgID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBwY2lfZGV2CSpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWFkYXB0ZXItPndvbCA9IDA7CisJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7CisJYWRhcHRlci0+bGlua19kdXBsZXggPSBGVUxMX0RVUExFWDsKKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gQVRfREVGX1JFQ0VJVkVfUVVFVUU7CisJYWRhcHRlci0+dHBkX3JpbmdbMF0uY291bnQgPSAxMDI0OworCWFkYXB0ZXItPnJmZF9yaW5nWzBdLmNvdW50ID0gNTEyOworCisJaHctPnZlbmRvcl9pZCA9IHBkZXYtPnZlbmRvcjsKKwlody0+ZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWh3LT5zdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlody0+c3Vic3lzdGVtX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKworCS8qIGJlZm9yZSBsaW5rIHVwLCB3ZSBhc3N1bWUgaGliZXJuYXRlIGlzIHRydWUgKi8KKwlody0+aGliZXJuYXRlID0gdHJ1ZTsKKwlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfQVVUT19TRU5TT1I7CisJaWYgKGF0bDFjX3NldHVwX21hY19mdW5jcyhodykgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzZXQgbWFjIGZ1bmN0aW9uIHBvaW50ZXJzIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJaHctPmludHJfbWFzayA9IElNUl9OT1JNQUxfTUFTSzsKKwlody0+cGh5X2NvbmZpZ3VyZWQgPSBmYWxzZTsKKwlody0+cHJlYW1ibGVfbGVuID0gNzsKKwlody0+bWF4X2ZyYW1lX3NpemUgPSBhZGFwdGVyLT5uZXRkZXYtPm10dTsKKwlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA8IDIpIHsKKwkJaHctPnJzc190eXBlID0gYXRsMWNfcnNzX2Rpc2FibGU7CisJCWh3LT5yc3NfbW9kZSA9IGF0bDFjX3Jzc19tb2RlX2Rpc2FibGU7CisJfSBlbHNlIHsKKwkJaHctPnJzc190eXBlID0gYXRsMWNfcnNzX2lwdjQ7CisJCWh3LT5yc3NfbW9kZSA9IGF0bDFjX3Jzc19tdWxfcXVlX211bF9pbnQ7CisJCWh3LT5yc3NfaGFzaF9iaXRzID0gMTY7CisJfQorCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEX0F1dG9uZWc7CisJaHctPmluZGlyZWN0X3RhYiA9IDB4RTRFNEU0RTQ7CisJaHctPmJhc2VfY3B1ID0gMDsKKworCWh3LT5pY3QgPSA1MDAwMDsJCS8qIDEwMG1zICovCisJaHctPnNtYl90aW1lciA9IDIwMDAwMDsJICAJLyogNDAwbXMgKi8KKwlody0+Y21iX3RwZCA9IDQ7CisJaHctPmNtYl90eF90aW1lciA9IDE7CQkvKiAyIHVzICAqLworCWh3LT5yeF9pbXQgPSAyMDA7CisJaHctPnR4X2ltdCA9IDEwMDA7CisKKwlody0+dHBkX2J1cnN0ID0gNTsKKwlody0+cmZkX2J1cnN0ID0gODsKKwlody0+ZG1hX29yZGVyID0gYXRsMWNfZG1hX29yZF9vdXQ7CisJaHctPmRtYXJfYmxvY2sgPSBhdGwxY19kbWFfcmVxXzEwMjQ7CisJaHctPmRtYXdfYmxvY2sgPSBhdGwxY19kbWFfcmVxXzEwMjQ7CisJaHctPmRtYXJfZGx5X2NudCA9IDE1OworCWh3LT5kbWF3X2RseV9jbnQgPSA0OworCisJaWYgKGF0bDFjX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogVE9ETyAqLworCWF0bDFjX3NldF9yeGJ1ZnNpemUoYWRhcHRlciwgYWRhcHRlci0+bmV0ZGV2KTsKKwlhdG9taWNfc2V0KCZhZGFwdGVyLT5pcnFfc2VtLCAxKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWRpb19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfbG9jayk7CisJc2V0X2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGF0bDFjX2NsZWFuX3R4X3JpbmcgLSBGcmVlIFR4LXNrYgorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFjX2NsZWFuX3R4X3Jpbmcoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJZW51bSBhdGwxY190cmFuc19xdWV1ZSB0eXBlKQoreworCXN0cnVjdCBhdGwxY190cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3JpbmdbdHlwZV07CisJc3RydWN0IGF0bDFjX2J1ZmZlciAqYnVmZmVyX2luZm87CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXUxNiBpbmRleCwgcmluZ19jb3VudDsKKworCXJpbmdfY291bnQgPSB0cGRfcmluZy0+Y291bnQ7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcmluZ19jb3VudDsgaW5kZXgrKykgeworCQlidWZmZXJfaW5mbyA9ICZ0cGRfcmluZy0+YnVmZmVyX2luZm9baW5kZXhdOworCQlpZiAoYnVmZmVyX2luZm8tPnN0YXRlID09IEFUTDFfQlVGRkVSX0ZSRUUpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpCisJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGgsCisJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQlpZiAoYnVmZmVyX2luZm8tPnNrYikKKwkJCWRldl9rZnJlZV9za2IoYnVmZmVyX2luZm8tPnNrYik7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJYnVmZmVyX2luZm8tPnN0YXRlID0gQVRMMV9CVUZGRVJfRlJFRTsKKwl9CisKKwkvKiBaZXJvIG91dCBUeC1idWZmZXJzICovCisJbWVtc2V0KHRwZF9yaW5nLT5kZXNjLCAwLCBzaXplb2Yoc3RydWN0IGF0bDFjX3RwZF9kZXNjKSAqCisJCQkJcmluZ19jb3VudCk7CisJYXRvbWljX3NldCgmdHBkX3JpbmctPm5leHRfdG9fY2xlYW4sIDApOworCXRwZF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7Cit9CisKKy8qCisgKiBhdGwxY19jbGVhbl9yeF9yaW5nIC0gRnJlZSByeC1yZXNlcnZhdGlvbiBza2JzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgYXRsMWNfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWNfcmZkX3JpbmcgKnJmZF9yaW5nID0gYWRhcHRlci0+cmZkX3Jpbmc7CisJc3RydWN0IGF0bDFjX3JyZF9yaW5nICpycmRfcmluZyA9IGFkYXB0ZXItPnJyZF9yaW5nOworCXN0cnVjdCBhdGwxY19idWZmZXIgKmJ1ZmZlcl9pbmZvOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHJmZF9yaW5nW2ldLmNvdW50OyBqKyspIHsKKwkJCWJ1ZmZlcl9pbmZvID0gJnJmZF9yaW5nW2ldLmJ1ZmZlcl9pbmZvW2pdOworCQkJaWYgKGJ1ZmZlcl9pbmZvLT5zdGF0ZSA9PSBBVEwxX0JVRkZFUl9GUkVFKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpCisJCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlpZiAoYnVmZmVyX2luZm8tPnNrYikKKwkJCQlkZXZfa2ZyZWVfc2tiKGJ1ZmZlcl9pbmZvLT5za2IpOworCQkJYnVmZmVyX2luZm8tPnN0YXRlID0gQVRMMV9CVUZGRVJfRlJFRTsKKwkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCQl9CisJCS8qIHplcm8gb3V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwkJbWVtc2V0KHJmZF9yaW5nW2ldLmRlc2MsIDAsIHJmZF9yaW5nW2ldLnNpemUpOworCQlyZmRfcmluZ1tpXS5uZXh0X3RvX2NsZWFuID0gMDsKKwkJcmZkX3JpbmdbaV0ubmV4dF90b191c2UgPSAwOworCQlycmRfcmluZ1tpXS5uZXh0X3RvX3VzZSA9IDA7CisJCXJyZF9yaW5nW2ldLm5leHRfdG9fY2xlYW4gPSAwOworCX0KK30KKworLyoKKyAqIFJlYWQgLyBXcml0ZSBQdHIgSW5pdGlhbGl6ZToKKyAqLworc3RhdGljIHZvaWQgYXRsMWNfaW5pdF9yaW5nX3B0cnMoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFjX3RwZF9yaW5nICp0cGRfcmluZyA9IGFkYXB0ZXItPnRwZF9yaW5nOworCXN0cnVjdCBhdGwxY19yZmRfcmluZyAqcmZkX3JpbmcgPSBhZGFwdGVyLT5yZmRfcmluZzsKKwlzdHJ1Y3QgYXRsMWNfcnJkX3JpbmcgKnJyZF9yaW5nID0gYWRhcHRlci0+cnJkX3Jpbmc7CisJc3RydWN0IGF0bDFjX2J1ZmZlciAqYnVmZmVyX2luZm87CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRfTUFYX1RSQU5TTUlUX1FVRVVFOyBpKyspIHsKKwkJdHBkX3JpbmdbaV0ubmV4dF90b191c2UgPSAwOworCQlhdG9taWNfc2V0KCZ0cGRfcmluZ1tpXS5uZXh0X3RvX2NsZWFuLCAwKTsKKwkJYnVmZmVyX2luZm8gPSB0cGRfcmluZ1tpXS5idWZmZXJfaW5mbzsKKwkJZm9yIChqID0gMDsgaiA8IHRwZF9yaW5nLT5jb3VudDsgaisrKQorCQkJYnVmZmVyX2luZm9baV0uc3RhdGUgPSBBVEwxX0JVRkZFUl9GUkVFOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXJmZF9yaW5nW2ldLm5leHRfdG9fdXNlID0gMDsKKwkJcmZkX3JpbmdbaV0ubmV4dF90b19jbGVhbiA9IDA7CisJCXJyZF9yaW5nW2ldLm5leHRfdG9fdXNlID0gMDsKKwkJcnJkX3JpbmdbaV0ubmV4dF90b19jbGVhbiA9IDA7CisJCWZvciAoaiA9IDA7IGogPCByZmRfcmluZ1tpXS5jb3VudDsgaisrKSB7CisJCQlidWZmZXJfaW5mbyA9ICZyZmRfcmluZ1tpXS5idWZmZXJfaW5mb1tqXTsKKwkJCWJ1ZmZlcl9pbmZvLT5zdGF0ZSA9IEFUTDFfQlVGRkVSX0ZSRUU7CisJCX0KKwl9Cit9CisKKy8qCisgKiBhdGwxY19mcmVlX3JpbmdfcmVzb3VyY2VzIC0gRnJlZSBUeCAvIFJYIGRlc2NyaXB0b3IgUmVzb3VyY2VzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBGcmVlIGFsbCB0cmFuc21pdCBzb2Z0d2FyZSByZXNvdXJjZXMKKyAqLworc3RhdGljIHZvaWQgYXRsMWNfZnJlZV9yaW5nX3Jlc291cmNlcyhzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGFkYXB0ZXItPnJpbmdfaGVhZGVyLnNpemUsCisJCQkJCWFkYXB0ZXItPnJpbmdfaGVhZGVyLmRlc2MsCisJCQkJCWFkYXB0ZXItPnJpbmdfaGVhZGVyLmRtYSk7CisJYWRhcHRlci0+cmluZ19oZWFkZXIuZGVzYyA9IE5VTEw7CisKKwkvKiBOb3RlOiBqdXN0IGZyZWUgdGRwX3JpbmcuYnVmZmVyX2luZm8sCisJKiAgaXQgY29udGFpbiByZmRfcmluZy5idWZmZXJfaW5mbywgZG8gbm90IGRvdWJsZSBmcmVlICovCisJaWYgKGFkYXB0ZXItPnRwZF9yaW5nWzBdLmJ1ZmZlcl9pbmZvKSB7CisJCWtmcmVlKGFkYXB0ZXItPnRwZF9yaW5nWzBdLmJ1ZmZlcl9pbmZvKTsKKwkJYWRhcHRlci0+dHBkX3JpbmdbMF0uYnVmZmVyX2luZm8gPSBOVUxMOworCX0KK30KKworLyoKKyAqIGF0bDFjX3NldHVwX21lbV9yZXNvdXJjZXMgLSBhbGxvY2F0ZSBUeCAvIFJYIGRlc2NyaXB0b3IgcmVzb3VyY2VzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgYXRsMWNfc2V0dXBfcmluZ19yZXNvdXJjZXMoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBhdGwxY190cGRfcmluZyAqdHBkX3JpbmcgPSBhZGFwdGVyLT50cGRfcmluZzsKKwlzdHJ1Y3QgYXRsMWNfcmZkX3JpbmcgKnJmZF9yaW5nID0gYWRhcHRlci0+cmZkX3Jpbmc7CisJc3RydWN0IGF0bDFjX3JyZF9yaW5nICpycmRfcmluZyA9IGFkYXB0ZXItPnJyZF9yaW5nOworCXN0cnVjdCBhdGwxY19yaW5nX2hlYWRlciAqcmluZ19oZWFkZXIgPSAmYWRhcHRlci0+cmluZ19oZWFkZXI7CisJaW50IG51bV9yeF9xdWV1ZXMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWludCBzaXplOworCWludCBpOworCWludCBjb3VudCA9IDA7CisJaW50IHJ4X2Rlc2NfY291bnQgPSAwOworCXUzMiBvZmZzZXQgPSAwOworCisJcnJkX3JpbmdbMF0uY291bnQgPSByZmRfcmluZ1swXS5jb3VudDsKKwlmb3IgKGkgPSAxOyBpIDwgQVRfTUFYX1RSQU5TTUlUX1FVRVVFOyBpKyspCisJCXRwZF9yaW5nW2ldLmNvdW50ID0gdHBkX3JpbmdbMF0uY291bnQ7CisKKwlmb3IgKGkgPSAxOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlyZmRfcmluZ1tpXS5jb3VudCA9IHJyZF9yaW5nW2ldLmNvdW50ID0gcmZkX3JpbmdbMF0uY291bnQ7CisKKwkvKiAyIHRwZCBxdWV1ZSwgb25lIGhpZ2ggcHJpb3JpdHkgcXVldWUsCisJICogYW5vdGhlciBub3JtYWwgcHJpb3JpdHkgcXVldWUgKi8KKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGwxY19idWZmZXIpICogKHRwZF9yaW5nLT5jb3VudCAqIDIgKworCQlyZmRfcmluZy0+Y291bnQgKiBudW1fcnhfcXVldWVzKTsKKwl0cGRfcmluZy0+YnVmZmVyX2luZm8gPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghdHBkX3JpbmctPmJ1ZmZlcl9pbmZvKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGZhaWxlZCwgc2l6ZSA9ICVkXG4iLAorCQkJc2l6ZSk7CisJCWdvdG8gZXJyX25vbWVtOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVRfTUFYX1RSQU5TTUlUX1FVRVVFOyBpKyspIHsKKwkJdHBkX3JpbmdbaV0uYnVmZmVyX2luZm8gPQorCQkJKHN0cnVjdCBhdGwxY19idWZmZXIgKikgKHRwZF9yaW5nLT5idWZmZXJfaW5mbyArIGNvdW50KTsKKwkJY291bnQgKz0gdHBkX3JpbmdbaV0uY291bnQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlyZmRfcmluZ1tpXS5idWZmZXJfaW5mbyA9CisJCQkoc3RydWN0IGF0bDFjX2J1ZmZlciAqKSAodHBkX3JpbmctPmJ1ZmZlcl9pbmZvICsgY291bnQpOworCQljb3VudCArPSByZmRfcmluZ1tpXS5jb3VudDsKKwkJcnhfZGVzY19jb3VudCArPSByZmRfcmluZ1tpXS5jb3VudDsKKwl9CisJLyoKKwkgKiByZWFsIHJpbmcgRE1BIGJ1ZmZlcgorCSAqIGVhY2ggcmluZy9ibG9jayBtYXkgbmVlZCB1cCB0byA4IGJ5dGVzIGZvciBhbGlnbm1lbnQsIGhlbmNlIHRoZQorCSAqIGFkZGl0aW9uYWwgYnl0ZXMgdGFja2VkIG9udG8gdGhlIGVuZC4KKwkgKi8KKwlyaW5nX2hlYWRlci0+c2l6ZSA9IHNpemUgPQorCQlzaXplb2Yoc3RydWN0IGF0bDFjX3RwZF9kZXNjKSAqIHRwZF9yaW5nLT5jb3VudCAqIDIgKworCQlzaXplb2Yoc3RydWN0IGF0bDFjX3J4X2ZyZWVfZGVzYykgKiByeF9kZXNjX2NvdW50ICsKKwkJc2l6ZW9mKHN0cnVjdCBhdGwxY19yZWN2X3JldF9zdGF0dXMpICogcnhfZGVzY19jb3VudCArCisJCXNpemVvZihzdHJ1Y3QgYXRsMWNfaHdfc3RhdHMpICsKKwkJOCAqIDQgKyA4ICogMiAqIG51bV9yeF9xdWV1ZXM7CisKKwlyaW5nX2hlYWRlci0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHJpbmdfaGVhZGVyLT5zaXplLAorCQkJCSZyaW5nX2hlYWRlci0+ZG1hKTsKKwlpZiAodW5saWtlbHkoIXJpbmdfaGVhZGVyLT5kZXNjKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfYWxsb2NfY29uc2lzdGVuZCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9ub21lbTsKKwl9CisJbWVtc2V0KHJpbmdfaGVhZGVyLT5kZXNjLCAwLCByaW5nX2hlYWRlci0+c2l6ZSk7CisJLyogaW5pdCBUUEQgcmluZyAqLworCisJdHBkX3JpbmdbMF0uZG1hID0gcm91bmR1cChyaW5nX2hlYWRlci0+ZG1hLCA4KTsKKwlvZmZzZXQgPSB0cGRfcmluZ1swXS5kbWEgLSByaW5nX2hlYWRlci0+ZG1hOworCWZvciAoaSA9IDA7IGkgPCBBVF9NQVhfVFJBTlNNSVRfUVVFVUU7IGkrKykgeworCQl0cGRfcmluZ1tpXS5kbWEgPSByaW5nX2hlYWRlci0+ZG1hICsgb2Zmc2V0OworCQl0cGRfcmluZ1tpXS5kZXNjID0gKHU4ICopIHJpbmdfaGVhZGVyLT5kZXNjICsgb2Zmc2V0OworCQl0cGRfcmluZ1tpXS5zaXplID0KKwkJCXNpemVvZihzdHJ1Y3QgYXRsMWNfdHBkX2Rlc2MpICogdHBkX3JpbmdbaV0uY291bnQ7CisJCW9mZnNldCArPSByb3VuZHVwKHRwZF9yaW5nW2ldLnNpemUsIDgpOworCX0KKwkvKiBpbml0IFJGRCByaW5nICovCisJZm9yIChpID0gMDsgaSA8IG51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlyZmRfcmluZ1tpXS5kbWEgPSByaW5nX2hlYWRlci0+ZG1hICsgb2Zmc2V0OworCQlyZmRfcmluZ1tpXS5kZXNjID0gKHU4ICopIHJpbmdfaGVhZGVyLT5kZXNjICsgb2Zmc2V0OworCQlyZmRfcmluZ1tpXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGwxY19yeF9mcmVlX2Rlc2MpICoKKwkJCQlyZmRfcmluZ1tpXS5jb3VudDsKKwkJb2Zmc2V0ICs9IHJvdW5kdXAocmZkX3JpbmdbaV0uc2l6ZSwgOCk7CisJfQorCisJLyogaW5pdCBSUkQgcmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcnhfcXVldWVzOyBpKyspIHsKKwkJcnJkX3JpbmdbaV0uZG1hID0gcmluZ19oZWFkZXItPmRtYSArIG9mZnNldDsKKwkJcnJkX3JpbmdbaV0uZGVzYyA9ICh1OCAqKSByaW5nX2hlYWRlci0+ZGVzYyArIG9mZnNldDsKKwkJcnJkX3JpbmdbaV0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRsMWNfcmVjdl9yZXRfc3RhdHVzKSAqCisJCQkJcnJkX3JpbmdbaV0uY291bnQ7CisJCW9mZnNldCArPSByb3VuZHVwKHJyZF9yaW5nW2ldLnNpemUsIDgpOworCX0KKworCWFkYXB0ZXItPnNtYi5kbWEgPSByaW5nX2hlYWRlci0+ZG1hICsgb2Zmc2V0OworCWFkYXB0ZXItPnNtYi5zbWIgPSAodTggKilyaW5nX2hlYWRlci0+ZGVzYyArIG9mZnNldDsKKwlyZXR1cm4gMDsKKworZXJyX25vbWVtOgorCWtmcmVlKHRwZF9yaW5nLT5idWZmZXJfaW5mbyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2NvbmZpZ3VyZV9kZXNfcmluZyhzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBhdGwxY19yZmRfcmluZyAqcmZkX3JpbmcgPSAoc3RydWN0IGF0bDFjX3JmZF9yaW5nICopCisJCQkJYWRhcHRlci0+cmZkX3Jpbmc7CisJc3RydWN0IGF0bDFjX3JyZF9yaW5nICpycmRfcmluZyA9IChzdHJ1Y3QgYXRsMWNfcnJkX3JpbmcgKikKKwkJCQlhZGFwdGVyLT5ycmRfcmluZzsKKwlzdHJ1Y3QgYXRsMWNfdHBkX3JpbmcgKnRwZF9yaW5nID0gKHN0cnVjdCBhdGwxY190cGRfcmluZyAqKQorCQkJCWFkYXB0ZXItPnRwZF9yaW5nOworCXN0cnVjdCBhdGwxY19jbWIgKmNtYiA9IChzdHJ1Y3QgYXRsMWNfY21iICopICZhZGFwdGVyLT5jbWI7CisJc3RydWN0IGF0bDFjX3NtYiAqc21iID0gKHN0cnVjdCBhdGwxY19zbWIgKikgJmFkYXB0ZXItPnNtYjsKKwlpbnQgaTsKKworCS8qIFRQRCAqLworCUFUX1dSSVRFX1JFRyhodywgUkVHX1RYX0JBU0VfQUREUl9ISSwKKwkJCSh1MzIpKCh0cGRfcmluZ1thdGwxY190cmFuc19ub3JtYWxdLmRtYSAmCisJCQkJQVRfRE1BX0hJX0FERFJfTUFTSykgPj4gMzIpKTsKKwkvKiBqdXN0IGVuYWJsZSBub3JtYWwgcHJpb3JpdHkgVFggcXVldWUgKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19OVFBEX0hFQURfQUREUl9MTywKKwkJCSh1MzIpKHRwZF9yaW5nW2F0bDFjX3RyYW5zX25vcm1hbF0uZG1hICYKKwkJCQlBVF9ETUFfTE9fQUREUl9NQVNLKSk7CisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSFRQRF9IRUFEX0FERFJfTE8sCisJCQkodTMyKSh0cGRfcmluZ1thdGwxY190cmFuc19oaWdoXS5kbWEgJgorCQkJCUFUX0RNQV9MT19BRERSX01BU0spKTsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19UUERfUklOR19TSVpFLAorCQkJKHUzMikodHBkX3JpbmdbMF0uY291bnQgJiBUUERfUklOR19TSVpFX01BU0spKTsKKworCisJLyogUkZEICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUlhfQkFTRV9BRERSX0hJLAorCQkJKHUzMikoKHJmZF9yaW5nWzBdLmRtYSAmIEFUX0RNQV9ISV9BRERSX01BU0spID4+IDMyKSk7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJQVRfV1JJVEVfUkVHKGh3LCBhdGwxY19yZmRfYWRkcl9sb19yZWdzW2ldLAorCQkJKHUzMikocmZkX3JpbmdbaV0uZG1hICYgQVRfRE1BX0xPX0FERFJfTUFTSykpOworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUkZEX1JJTkdfU0laRSwKKwkJCXJmZF9yaW5nWzBdLmNvdW50ICYgUkZEX1JJTkdfU0laRV9NQVNLKTsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19SWF9CVUZfU0laRSwKKwkJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gJiBSWF9CVUZfU0laRV9NQVNLKTsKKworCS8qIFJSRCAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCUFUX1dSSVRFX1JFRyhodywgYXRsMWNfcnJkX2FkZHJfbG9fcmVnc1tpXSwKKwkJCSh1MzIpKHJyZF9yaW5nW2ldLmRtYSAmIEFUX0RNQV9MT19BRERSX01BU0spKTsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19SUkRfUklOR19TSVpFLAorCQkJKHJyZF9yaW5nWzBdLmNvdW50ICYgUlJEX1JJTkdfU0laRV9NQVNLKSk7CisKKwkvKiBDTUIgKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19DTUJfQkFTRV9BRERSX0xPLCBjbWItPmRtYSAmIEFUX0RNQV9MT19BRERSX01BU0spOworCisJLyogU01CICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfU01CX0JBU0VfQUREUl9ISSwKKwkJCSh1MzIpKChzbWItPmRtYSAmIEFUX0RNQV9ISV9BRERSX01BU0spID4+IDMyKSk7CisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfU01CX0JBU0VfQUREUl9MTywKKwkJCSh1MzIpKHNtYi0+ZG1hICYgQVRfRE1BX0xPX0FERFJfTUFTSykpOworCS8qIExvYWQgYWxsIG9mIGJhc2UgYWRkcmVzcyBhYm92ZSAqLworCUFUX1dSSVRFX1JFRyhodywgUkVHX0xPQURfUFRSLCAxKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfY29uZmlndXJlX3R4KHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxY19odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGRldl9jdHJsX2RhdGE7CisJdTMyIG1heF9wYXlfbG9hZDsKKwl1MTYgdHhfb2ZmbG9hZF90aHJlc2g7CisJdTMyIHR4cV9jdHJsX2RhdGE7CisJdTMyIGV4dHJhX3NpemUgPSAwOyAgICAgLyogSnVtYm8gZnJhbWUgdGhyZXNob2xkIGluIFFXT1JEIHVuaXQgKi8KKworCWV4dHJhX3NpemUgPSBFVEhfSExFTiArIFZMQU5fSExFTiArIEVUSF9GQ1NfTEVOOworCXR4X29mZmxvYWRfdGhyZXNoID0gTUFYX1RYX09GRkxPQURfVEhSRVNIOworCUFUX1dSSVRFX1JFRyhodywgUkVHX1RYX1RTT19PRkZMT0FEX1RIUkVTSCwKKwkJKHR4X29mZmxvYWRfdGhyZXNoID4+IDMpICYgVFhfVFNPX09GRkxPQURfVEhSRVNIX01BU0spOworCUFUX1JFQURfUkVHKGh3LCBSRUdfREVWSUNFX0NUUkwsICZkZXZfY3RybF9kYXRhKTsKKwltYXhfcGF5X2xvYWQgID0gKGRldl9jdHJsX2RhdGEgPj4gREVWSUNFX0NUUkxfTUFYX1BBWUxPQURfU0hJRlQpICYKKwkJCURFVklDRV9DVFJMX01BWF9QQVlMT0FEX01BU0s7CisJaHctPmRtYXdfYmxvY2sgPSBtaW4obWF4X3BheV9sb2FkLCBody0+ZG1hd19ibG9jayk7CisJbWF4X3BheV9sb2FkICA9IChkZXZfY3RybF9kYXRhID4+IERFVklDRV9DVFJMX01BWF9SUkVRX1NaX1NISUZUKSAmCisJCQlERVZJQ0VfQ1RSTF9NQVhfUlJFUV9TWl9NQVNLOworCWh3LT5kbWFyX2Jsb2NrID0gbWluKG1heF9wYXlfbG9hZCwgaHctPmRtYXJfYmxvY2spOworCisJdHhxX2N0cmxfZGF0YSA9IChody0+dHBkX2J1cnN0ICYgVFhRX05VTV9UUERfQlVSU1RfTUFTSykgPDwKKwkJCVRYUV9OVU1fVFBEX0JVUlNUX1NISUZUOworCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX1RYUV9NT0RFX0VOSEFOQ0UpCisJCXR4cV9jdHJsX2RhdGEgfD0gVFhRX0NUUkxfRU5IX01PREU7CisJdHhxX2N0cmxfZGF0YSB8PSAoYXRsMWNfcGF5X2xvYWRfc2l6ZVtody0+ZG1hcl9ibG9ja10gJgorCQkJVFhRX1RYRl9CVVJTVF9OVU1fTUFTSykgPDwgVFhRX1RYRl9CVVJTVF9OVU1fU0hJRlQ7CisKKwlBVF9XUklURV9SRUcoaHcsIFJFR19UWFFfQ1RSTCwgdHhxX2N0cmxfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2NvbmZpZ3VyZV9yeChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiByeHFfY3RybF9kYXRhOworCisJcnhxX2N0cmxfZGF0YSA9IChody0+cmZkX2J1cnN0ICYgUlhRX1JGRF9CVVJTVF9OVU1fTUFTSykgPDwKKwkJCVJYUV9SRkRfQlVSU1RfTlVNX1NISUZUOworCisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfUlhfSVBWNl9DSEtTVU0pCisJCXJ4cV9jdHJsX2RhdGEgfD0gSVBWNl9DSEtTVU1fQ1RSTF9FTjsKKwlpZiAoaHctPnJzc190eXBlID09IGF0bDFjX3Jzc19pcHY0KQorCQlyeHFfY3RybF9kYXRhIHw9IFJTU19IQVNIX0lQVjQ7CisJaWYgKGh3LT5yc3NfdHlwZSA9PSBhdGwxY19yc3NfaXB2NF90Y3ApCisJCXJ4cV9jdHJsX2RhdGEgfD0gUlNTX0hBU0hfSVBWNF9UQ1A7CisJaWYgKGh3LT5yc3NfdHlwZSA9PSBhdGwxY19yc3NfaXB2NikKKwkJcnhxX2N0cmxfZGF0YSB8PSBSU1NfSEFTSF9JUFY2OworCWlmIChody0+cnNzX3R5cGUgPT0gYXRsMWNfcnNzX2lwdjZfdGNwKQorCQlyeHFfY3RybF9kYXRhIHw9IFJTU19IQVNIX0lQVjZfVENQOworCWlmIChody0+cnNzX3R5cGUgIT0gYXRsMWNfcnNzX2Rpc2FibGUpCisJCXJ4cV9jdHJsX2RhdGEgfD0gUlJTX0hBU0hfQ1RSTF9FTjsKKworCXJ4cV9jdHJsX2RhdGEgfD0gKGh3LT5yc3NfbW9kZSAmIFJTU19NT0RFX01BU0spIDw8CisJCQlSU1NfTU9ERV9TSElGVDsKKwlyeHFfY3RybF9kYXRhIHw9IChody0+cnNzX2hhc2hfYml0cyAmIFJTU19IQVNIX0JJVFNfTUFTSykgPDwKKwkJCVJTU19IQVNIX0JJVFNfU0hJRlQ7CisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVNQTV9DVFJMX01PTikKKwkJcnhxX2N0cmxfZGF0YSB8PSAoQVNQTV9USFJVUFVUX0xJTUlUXzEwME0gJgorCQkJQVNQTV9USFJVUFVUX0xJTUlUX01BU0spIDw8IEFTUE1fVEhSVVBVVF9MSU1JVF9TSElGVDsKKworCUFUX1dSSVRFX1JFRyhodywgUkVHX1JYUV9DVFJMLCByeHFfY3RybF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfY29uZmlndXJlX3JzcyhzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSURUX1RBQkxFLCBody0+aW5kaXJlY3RfdGFiKTsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19CQVNFX0NQVV9OVU1CRVIsIGh3LT5iYXNlX2NwdSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2NvbmZpZ3VyZV9kbWEoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFjX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgZG1hX2N0cmxfZGF0YTsKKworCWRtYV9jdHJsX2RhdGEgPSBETUFfQ1RSTF9ETUFSX1JFUV9QUkk7CisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQ01CX0VOQUJMRSkKKwkJZG1hX2N0cmxfZGF0YSB8PSBETUFfQ1RSTF9DTUJfRU47CisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfU01CX0VOQUJMRSkKKwkJZG1hX2N0cmxfZGF0YSB8PSBETUFfQ1RSTF9TTUJfRU47CisJZWxzZQorCQlkbWFfY3RybF9kYXRhIHw9IE1BQ19DVFJMX1NNQl9ESVM7CisKKwlzd2l0Y2ggKGh3LT5kbWFfb3JkZXIpIHsKKwljYXNlIGF0bDFjX2RtYV9vcmRfaW46CisJCWRtYV9jdHJsX2RhdGEgfD0gRE1BX0NUUkxfRE1BUl9JTl9PUkRFUjsKKwkJYnJlYWs7CisJY2FzZSBhdGwxY19kbWFfb3JkX2VuaDoKKwkJZG1hX2N0cmxfZGF0YSB8PSBETUFfQ1RSTF9ETUFSX0VOSF9PUkRFUjsKKwkJYnJlYWs7CisJY2FzZSBhdGwxY19kbWFfb3JkX291dDoKKwkJZG1hX2N0cmxfZGF0YSB8PSBETUFfQ1RSTF9ETUFSX09VVF9PUkRFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZG1hX2N0cmxfZGF0YSB8PSAoKCh1MzIpaHctPmRtYXJfYmxvY2spICYgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fTUFTSykKKwkJPDwgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fU0hJRlQ7CisJZG1hX2N0cmxfZGF0YSB8PSAoKCh1MzIpaHctPmRtYXdfYmxvY2spICYgRE1BX0NUUkxfRE1BV19CVVJTVF9MRU5fTUFTSykKKwkJPDwgRE1BX0NUUkxfRE1BV19CVVJTVF9MRU5fU0hJRlQ7CisJZG1hX2N0cmxfZGF0YSB8PSAoKCh1MzIpaHctPmRtYXJfZGx5X2NudCkgJiBETUFfQ1RSTF9ETUFSX0RMWV9DTlRfTUFTSykKKwkJPDwgRE1BX0NUUkxfRE1BUl9ETFlfQ05UX1NISUZUOworCWRtYV9jdHJsX2RhdGEgfD0gKCgodTMyKWh3LT5kbWF3X2RseV9jbnQpICYgRE1BX0NUUkxfRE1BV19ETFlfQ05UX01BU0spCisJCTw8IERNQV9DVFJMX0RNQVdfRExZX0NOVF9TSElGVDsKKworCUFUX1dSSVRFX1JFRyhodywgUkVHX0RNQV9DVFJMLCBkbWFfY3RybF9kYXRhKTsKK30KKworLyoKKyAqIFN0b3AgdGhlIG1hYywgdHJhbnNtaXQgYW5kIHJlY2VpdmUgdW5pdHMKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiByZXR1cm4gOiAwICBvciAgaWRsZSBzdGF0dXMgKGlmIGVycm9yKQorICovCitzdGF0aWMgaW50IGF0bDFjX3N0b3BfbWFjKHN0cnVjdCBhdGwxY19odyAqaHcpCit7CisJdTMyIGRhdGE7CisJaW50IHRpbWVvdXQ7CisKKwlBVF9SRUFEX1JFRyhodywgUkVHX1JYUV9DVFJMLCAmZGF0YSk7CisJZGF0YSAmPSB+KFJYUTFfQ1RSTF9FTiB8IFJYUTJfQ1RSTF9FTiB8CisJCSAgUlhRM19DVFJMX0VOIHwgUlhRX0NUUkxfRU4pOworCUFUX1dSSVRFX1JFRyhodywgUkVHX1JYUV9DVFJMLCBkYXRhKTsKKworCUFUX1JFQURfUkVHKGh3LCBSRUdfVFhRX0NUUkwsICZkYXRhKTsKKwlkYXRhICY9IH5UWFFfQ1RSTF9FTjsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19UV1NJX0NUUkwsIGRhdGEpOworCisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IEFUX0hXX01BWF9JRExFX0RFTEFZOyB0aW1lb3V0KyspIHsKKwkJQVRfUkVBRF9SRUcoaHcsIFJFR19JRExFX1NUQVRVUywgJmRhdGEpOworCQlpZiAoKGRhdGEgJiAoSURMRV9TVEFUVVNfUlhRX05PX0lETEUgfAorCQkJSURMRV9TVEFUVVNfVFhRX05PX0lETEUpKSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlBVF9SRUFEX1JFRyhodywgUkVHX01BQ19DVFJMLCAmZGF0YSk7CisJZGF0YSAmPSB+KE1BQ19DVFJMX1RYX0VOIHwgTUFDX0NUUkxfUlhfRU4pOworCUFUX1dSSVRFX1JFRyhodywgUkVHX01BQ19DVFJMLCBkYXRhKTsKKworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCBBVF9IV19NQVhfSURMRV9ERUxBWTsgdGltZW91dCsrKSB7CisJCUFUX1JFQURfUkVHKGh3LCBSRUdfSURMRV9TVEFUVVMsICZkYXRhKTsKKwkJaWYgKChkYXRhICYgSURMRV9TVEFUVVNfTUFTSykgPT0gMCkKKwkJCXJldHVybiAwOworCQltc2xlZXAoMSk7CisJfQorCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCBhdGwxY19lbmFibGVfcnhfY3RybChzdHJ1Y3QgYXRsMWNfaHcgKmh3KQoreworCXUzMiBkYXRhOworCisJQVRfUkVBRF9SRUcoaHcsIFJFR19SWFFfQ1RSTCwgJmRhdGEpOworCXN3aXRjaCAoaHctPmFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpIHsKKwljYXNlIDQ6CisJCWRhdGEgfD0gKFJYUTNfQ1RSTF9FTiB8IFJYUTJfQ1RSTF9FTiB8IFJYUTFfQ1RSTF9FTik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZGF0YSB8PSAoUlhRMl9DVFJMX0VOIHwgUlhRMV9DVFJMX0VOKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkYXRhIHw9IFJYUTFfQ1RSTF9FTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWRhdGEgfD0gUlhRX0NUUkxfRU47CisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUlhRX0NUUkwsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBhdGwxY19lbmFibGVfdHhfY3RybChzdHJ1Y3QgYXRsMWNfaHcgKmh3KQoreworCXUzMiBkYXRhOworCisJQVRfUkVBRF9SRUcoaHcsIFJFR19UWFFfQ1RSTCwgJmRhdGEpOworCWRhdGEgfD0gVFhRX0NUUkxfRU47CisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfVFhRX0NUUkwsIGRhdGEpOworfQorCisvKgorICogUmVzZXQgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzOyBtYXNrIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cy4KKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiByZXR1cm4gOiAwICBvciAgaWRsZSBzdGF0dXMgKGlmIGVycm9yKQorICovCitzdGF0aWMgaW50IGF0bDFjX3Jlc2V0X21hYyhzdHJ1Y3QgYXRsMWNfaHcgKmh3KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhdGwxY19hZGFwdGVyICopaHctPmFkYXB0ZXI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXUzMiBpZGxlX3N0YXR1c19kYXRhID0gMDsKKwlpbnQgdGltZW91dCA9IDA7CisJaW50IHJldDsKKworCUFUX1dSSVRFX1JFRyhodywgUkVHX0lNUiwgMCk7CisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSVNSLCBJU1JfRElTX0lOVCk7CisKKwlyZXQgPSBhdGwxY19zdG9wX21hYyhodyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIElzc3VlIFNvZnQgUmVzZXQgdG8gdGhlIE1BQy4gIFRoaXMgd2lsbCByZXNldCB0aGUgY2hpcCdzCisJICogdHJhbnNtaXQsIHJlY2VpdmUsIERNQS4gIEl0IHdpbGwgbm90IGVmZmVjdAorCSAqIHRoZSBjdXJyZW50IFBDSSBjb25maWd1cmF0aW9uLiAgVGhlIGdsb2JhbCByZXNldCBiaXQgaXMgc2VsZi0KKwkgKiBjbGVhcmluZywgYW5kIHNob3VsZCBjbGVhciB3aXRoaW4gYSBtaWNyb3NlY29uZC4KKwkgKi8KKwlBVF9XUklURV9SRUdXKGh3LCBSRUdfTUFTVEVSX0NUUkwsIE1BU1RFUl9DVFJMX1NPRlRfUlNUKTsKKwlBVF9XUklURV9GTFVTSChodyk7CisJbXNsZWVwKDEwKTsKKwkvKiBXYWl0IGF0IGxlYXN0IDEwbXMgZm9yIEFsbCBtb2R1bGUgdG8gYmUgSWRsZSAqLworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCBBVF9IV19NQVhfSURMRV9ERUxBWTsgdGltZW91dCsrKSB7CisJCUFUX1JFQURfUkVHKGh3LCBSRUdfSURMRV9TVEFUVVMsICZpZGxlX3N0YXR1c19kYXRhKTsKKwkJaWYgKChpZGxlX3N0YXR1c19kYXRhICYgSURMRV9TVEFUVVNfTUFTSykgPT0gMCkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCWlmICh0aW1lb3V0ID49IEFUX0hXX01BWF9JRExFX0RFTEFZKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJNQUMgc3RhdGUgbWFjaGluZSBjYW5uJ3QgYmUgaWRsZSBzaW5jZSIKKwkJCSIgZGlzYWJsZWQgZm9yIDEwbXMgc2Vjb25kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfZGlzYWJsZV9sMHNfbDEoc3RydWN0IGF0bDFjX2h3ICpodykKK3sKKwl1MzIgcG1fY3RybF9kYXRhOworCisJQVRfUkVBRF9SRUcoaHcsIFJFR19QTV9DVFJMLCAmcG1fY3RybF9kYXRhKTsKKwlwbV9jdHJsX2RhdGEgJj0gfihQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX01BU0sgPDwKKwkJCVBNX0NUUkxfTDFfRU5UUllfVElNRVJfU0hJRlQpOworCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9DTEtfU1dIX0wxOworCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wwU19FTjsKKwlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQVNQTV9MMV9FTjsKKwlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfTUFDX0FTUE1fQ0hLOworCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfUERfRVhfTDE7CisKKwlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfQlVEU19SWF9MMV9FTjsKKwlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfUExMX0wxX0VOOworCXBtX2N0cmxfZGF0YSB8PQlQTV9DVFJMX1NFUkRFU19MMV9FTjsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19QTV9DVFJMLCBwbV9jdHJsX2RhdGEpOworfQorCisvKgorICogU2V0IEFTUE0gc3RhdGUuCisgKiBFbmFibGUvZGlzYWJsZSBMMHMvTDEgZGVwZW5kIG9uIGxpbmsgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFjX3NldF9hc3BtKHN0cnVjdCBhdGwxY19odyAqaHcsIGJvb2wgbGlua3VwKQoreworCXUzMiBwbV9jdHJsX2RhdGE7CisKKwlBVF9SRUFEX1JFRyhodywgUkVHX1BNX0NUUkwsICZwbV9jdHJsX2RhdGEpOworCisJcG1fY3RybF9kYXRhICY9IFBNX0NUUkxfU0VSREVTX1BEX0VYX0wxOworCXBtX2N0cmxfZGF0YSB8PSB+UE1fQ1RSTF9TRVJERVNfQlVEU19SWF9MMV9FTjsKKwlwbV9jdHJsX2RhdGEgfD0gflBNX0NUUkxfU0VSREVTX0wxX0VOOworCXBtX2N0cmxfZGF0YSAmPSAgfihQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX01BU0sgPDwKKwkJCVBNX0NUUkxfTDFfRU5UUllfVElNRVJfU0hJRlQpOworCisJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfTUFDX0FTUE1fQ0hLOworCisJaWYgKGxpbmt1cCkgeworCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfUExMX0wxX0VOOworCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQ0xLX1NXSF9MMTsKKworCQlpZiAoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19BU1BNX0wxX1NVUFBPUlQpIHsKKwkJCXBtX2N0cmxfZGF0YSB8PSBBVF9BU1BNX0wxX1RJTUVSIDw8CisJCQkJUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVDsKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX0FTUE1fTDFfRU47CisJCX0gZWxzZQorCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDFfRU47CisKKwkJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVNQTV9MMFNfU1VQUE9SVCkKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX0FTUE1fTDBTX0VOOworCQllbHNlCisJCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQVNQTV9MMFNfRU47CisKKwl9IGVsc2UgeworCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQVNQTV9MMFNfRU47CisJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfUExMX0wxX0VOOworCisJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX0NMS19TV0hfTDE7CisKKwkJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVNQTV9MMV9TVVBQT1JUKQorCQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfQVNQTV9MMV9FTjsKKwkJZWxzZQorCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDFfRU47CisJfQorCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUE1fQ1RSTCwgcG1fY3RybF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWNfc2V0dXBfbWFjX2N0cmwoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFjX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiBtYWNfY3RybF9kYXRhOworCisJbWFjX2N0cmxfZGF0YSA9IE1BQ19DVFJMX1RYX0VOIHwgTUFDX0NUUkxfUlhfRU47CisJbWFjX2N0cmxfZGF0YSB8PSAoTUFDX0NUUkxfVFhfRkxPVyB8IE1BQ19DVFJMX1JYX0ZMT1cpOworCisJaWYgKGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYKSB7CisJCWh3LT5tYWNfZHVwbGV4ID0gdHJ1ZTsKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9EVVBMWDsKKwl9CisKKwlpZiAoYWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMDAwKQorCQlody0+bWFjX3NwZWVkID0gYXRsMWNfbWFjX3NwZWVkXzEwMDA7CisJZWxzZQorCQlody0+bWFjX3NwZWVkID0gYXRsMWNfbWFjX3NwZWVkXzEwXzEwMDsKKworCW1hY19jdHJsX2RhdGEgfD0gKGh3LT5tYWNfc3BlZWQgJiBNQUNfQ1RSTF9TUEVFRF9NQVNLKSA8PAorCQkJTUFDX0NUUkxfU1BFRURfU0hJRlQ7CisKKwltYWNfY3RybF9kYXRhIHw9IChNQUNfQ1RSTF9BRERfQ1JDIHwgTUFDX0NUUkxfUEFEKTsKKwltYWNfY3RybF9kYXRhIHw9ICgoaHctPnByZWFtYmxlX2xlbiAmIE1BQ19DVFJMX1BSTUxFTl9NQVNLKSA8PAorCQkJTUFDX0NUUkxfUFJNTEVOX1NISUZUKTsKKworCWlmIChhZGFwdGVyLT52bGdycCkKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9STVZfVkxBTjsKKworCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfQkNfRU47CisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9QUk9NSVNfRU47CisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfTUNfQUxMX0VOOworCisJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9TSU5HTEVfUEFVU0VfRU47CisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOworfQorCisvKgorICogYXRsMWNfY29uZmlndXJlIC0gQ29uZmlndXJlIFRyYW5zbWl0JlJlY2VpdmUgVW5pdCBhZnRlciBSZXNldAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHRoZSBUeCAvUnggdW5pdCBvZiB0aGUgTUFDIGFmdGVyIGEgcmVzZXQuCisgKi8KK3N0YXRpYyBpbnQgYXRsMWNfY29uZmlndXJlKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxY19odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIG1hc3Rlcl9jdHJsX2RhdGEgPSAwOworCXUzMiBpbnRyX21vZHJ0X2RhdGE7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSVNSLCAweEZGRkZGRkZGKTsKKwkvKiAgQ2xlYXIgYW55IFdPTCBzdGF0dXMgKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19XT0xfQ1RSTCwgMCk7CisJLyogc2V0IEludGVycnVwdCBDbGVhciBUaW1lcgorCSAqIEhXIHdpbGwgZW5hYmxlIHNlbGYgdG8gYXNzZXJ0IGludGVycnVwdCBldmVudCB0byBzeXN0ZW0gYWZ0ZXIKKwkgKiB3YWl0aW5nIHgtdGltZSBmb3Igc29mdHdhcmUgdG8gbm90aWZ5IGl0IGFjY2VwdCBpbnRlcnJ1cHQuCisJICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSU5UX1JFVFJJR19USU1FUiwKKwkJaHctPmljdCAmIElOVF9SRVRSSUdfVElNRVJfTUFTSyk7CisKKwlhdGwxY19jb25maWd1cmVfZGVzX3JpbmcoYWRhcHRlcik7CisKKwlpZiAoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19JTlRSX01PRFJUX0VOQUJMRSkgeworCQlpbnRyX21vZHJ0X2RhdGEgPSAoaHctPnR4X2ltdCAmIElSUV9NT0RSVF9USU1FUl9NQVNLKSA8PAorCQkJCQlJUlFfTU9EUlRfVFhfVElNRVJfU0hJRlQ7CisJCWludHJfbW9kcnRfZGF0YSB8PSAoaHctPnJ4X2ltdCAmIElSUV9NT0RSVF9USU1FUl9NQVNLKSA8PAorCQkJCQlJUlFfTU9EUlRfUlhfVElNRVJfU0hJRlQ7CisJCUFUX1dSSVRFX1JFRyhodywgUkVHX0lSUV9NT0RSVF9USU1FUl9JTklULCBpbnRyX21vZHJ0X2RhdGEpOworCQltYXN0ZXJfY3RybF9kYXRhIHw9CisJCQlNQVNURVJfQ1RSTF9UWF9JVElNRVJfRU4gfCBNQVNURVJfQ1RSTF9SWF9JVElNRVJfRU47CisJfQorCisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfSU5UUl9DTEVBUl9PTl9SRUFEKQorCQltYXN0ZXJfY3RybF9kYXRhIHw9IE1BU1RFUl9DVFJMX0lOVF9SRENMUjsKKworCUFUX1dSSVRFX1JFRyhodywgUkVHX01BU1RFUl9DVFJMLCBtYXN0ZXJfY3RybF9kYXRhKTsKKworCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX0NNQl9FTkFCTEUpIHsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfQ01CX1RQRF9USFJFU0gsCisJCQlody0+Y21iX3RwZCAmIENNQl9UUERfVEhSRVNIX01BU0spOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19DTUJfVFhfVElNRVIsCisJCQlody0+Y21iX3R4X3RpbWVyICYgQ01CX1RYX1RJTUVSX01BU0spOworCX0KKworCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX1NNQl9FTkFCTEUpCisJCUFUX1dSSVRFX1JFRyhodywgUkVHX1NNQl9TVEFUX1RJTUVSLAorCQkJaHctPnNtYl90aW1lciAmIFNNQl9TVEFUX1RJTUVSX01BU0spOworCS8qIHNldCBNVFUgKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19NVFUsIGh3LT5tYXhfZnJhbWVfc2l6ZSArIEVUSF9ITEVOICsKKwkJCVZMQU5fSExFTiArIEVUSF9GQ1NfTEVOKTsKKwkvKiBIRFMsIGRpc2FibGUgKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19IRFNfQ1RSTCwgMCk7CisKKwlhdGwxY19jb25maWd1cmVfdHgoYWRhcHRlcik7CisJYXRsMWNfY29uZmlndXJlX3J4KGFkYXB0ZXIpOworCWF0bDFjX2NvbmZpZ3VyZV9yc3MoYWRhcHRlcik7CisJYXRsMWNfY29uZmlndXJlX2RtYShhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGwxY191cGRhdGVfaHdfc3RhdHMoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTE2IGh3X3JlZ19hZGRyID0gMDsKKwl1bnNpZ25lZCBsb25nICpzdGF0c19pdGVtID0gTlVMTDsKKwl1MzIgZGF0YTsKKworCS8qIHVwZGF0ZSByeCBzdGF0dXMgKi8KKwlod19yZWdfYWRkciA9IFJFR19NQUNfUlhfU1RBVFVTX0JJTjsKKwlzdGF0c19pdGVtICA9ICZhZGFwdGVyLT5od19zdGF0cy5yeF9vazsKKwl3aGlsZSAoaHdfcmVnX2FkZHIgPD0gUkVHX01BQ19SWF9TVEFUVVNfRU5EKSB7CisJCUFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgaHdfcmVnX2FkZHIsICZkYXRhKTsKKwkJKnN0YXRzX2l0ZW0gKz0gZGF0YTsKKwkJc3RhdHNfaXRlbSsrOworCQlod19yZWdfYWRkciArPSA0OworCX0KKy8qIHVwZGF0ZSB0eCBzdGF0dXMgKi8KKwlod19yZWdfYWRkciA9IFJFR19NQUNfVFhfU1RBVFVTX0JJTjsKKwlzdGF0c19pdGVtICA9ICZhZGFwdGVyLT5od19zdGF0cy50eF9vazsKKwl3aGlsZSAoaHdfcmVnX2FkZHIgPD0gUkVHX01BQ19UWF9TVEFUVVNfRU5EKSB7CisJCUFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgaHdfcmVnX2FkZHIsICZkYXRhKTsKKwkJKnN0YXRzX2l0ZW0gKz0gZGF0YTsKKwkJc3RhdHNfaXRlbSsrOworCQlod19yZWdfYWRkciArPSA0OworCX0KK30KKworLyoKKyAqIGF0bDFjX2dldF9zdGF0cyAtIEdldCBTeXN0ZW0gTmV0d29yayBTdGF0aXN0aWNzCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLgorICogVGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IHVwZGF0ZWQgZnJvbSB0aGUgdGltZXIgY2FsbGJhY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXRsMWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBhdGwxY19od19zdGF0cyAgKmh3X3N0YXRzID0gJmFkYXB0ZXItPmh3X3N0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfc3RhdHMgPSAmYWRhcHRlci0+bmV0X3N0YXRzOworCisJYXRsMWNfdXBkYXRlX2h3X3N0YXRzKGFkYXB0ZXIpOworCW5ldF9zdGF0cy0+cnhfcGFja2V0cyA9IGh3X3N0YXRzLT5yeF9vazsKKwluZXRfc3RhdHMtPnR4X3BhY2tldHMgPSBod19zdGF0cy0+dHhfb2s7CisJbmV0X3N0YXRzLT5yeF9ieXRlcyAgID0gaHdfc3RhdHMtPnJ4X2J5dGVfY250OworCW5ldF9zdGF0cy0+dHhfYnl0ZXMgICA9IGh3X3N0YXRzLT50eF9ieXRlX2NudDsKKwluZXRfc3RhdHMtPm11bHRpY2FzdCAgPSBod19zdGF0cy0+cnhfbWNhc3Q7CisJbmV0X3N0YXRzLT5jb2xsaXNpb25zID0gaHdfc3RhdHMtPnR4XzFfY29sICsKKwkJCQlod19zdGF0cy0+dHhfMl9jb2wgKiAyICsKKwkJCQlod19zdGF0cy0+dHhfbGF0ZV9jb2wgKyBod19zdGF0cy0+dHhfYWJvcnRfY29sOworCW5ldF9zdGF0cy0+cnhfZXJyb3JzICA9IGh3X3N0YXRzLT5yeF9mcmFnICsgaHdfc3RhdHMtPnJ4X2Zjc19lcnIgKworCQkJCWh3X3N0YXRzLT5yeF9sZW5fZXJyICsgaHdfc3RhdHMtPnJ4X3N6X292ICsKKwkJCQlod19zdGF0cy0+cnhfcnJkX292ICsgaHdfc3RhdHMtPnJ4X2FsaWduX2VycjsKKwluZXRfc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzICAgPSBod19zdGF0cy0+cnhfcnhmX292OworCW5ldF9zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IGh3X3N0YXRzLT5yeF9sZW5fZXJyOworCW5ldF9zdGF0cy0+cnhfY3JjX2Vycm9ycyAgICA9IGh3X3N0YXRzLT5yeF9mY3NfZXJyOworCW5ldF9zdGF0cy0+cnhfZnJhbWVfZXJyb3JzICA9IGh3X3N0YXRzLT5yeF9hbGlnbl9lcnI7CisJbmV0X3N0YXRzLT5yeF9vdmVyX2Vycm9ycyAgID0gaHdfc3RhdHMtPnJ4X3JyZF9vdiArIGh3X3N0YXRzLT5yeF9yeGZfb3Y7CisKKwluZXRfc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBod19zdGF0cy0+cnhfcnJkX292ICsgaHdfc3RhdHMtPnJ4X3J4Zl9vdjsKKworCW5ldF9zdGF0cy0+dHhfZXJyb3JzID0gaHdfc3RhdHMtPnR4X2xhdGVfY29sICsgaHdfc3RhdHMtPnR4X2Fib3J0X2NvbCArCisJCQkJaHdfc3RhdHMtPnR4X3VuZGVycnVuICsgaHdfc3RhdHMtPnR4X3RydW5jOworCW5ldF9zdGF0cy0+dHhfZmlmb19lcnJvcnMgICAgPSBod19zdGF0cy0+dHhfdW5kZXJydW47CisJbmV0X3N0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyA9IGh3X3N0YXRzLT50eF9hYm9ydF9jb2w7CisJbmV0X3N0YXRzLT50eF93aW5kb3dfZXJyb3JzICA9IGh3X3N0YXRzLT50eF9sYXRlX2NvbDsKKworCXJldHVybiAmYWRhcHRlci0+bmV0X3N0YXRzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRsMWNfY2xlYXJfcGh5X2ludChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MTYgcGh5X2RhdGE7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1kaW9fbG9jayk7CisJYXRsMWNfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgTUlJX0lTUiwgJnBoeV9kYXRhKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWRpb19sb2NrKTsKK30KKworc3RhdGljIGJvb2wgYXRsMWNfY2xlYW5fdHhfaXJxKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyLAorCQkJCWVudW0gYXRsMWNfdHJhbnNfcXVldWUgdHlwZSkKK3sKKwlzdHJ1Y3QgYXRsMWNfdHBkX3JpbmcgKnRwZF9yaW5nID0gKHN0cnVjdCBhdGwxY190cGRfcmluZyAqKQorCQkJCSZhZGFwdGVyLT50cGRfcmluZ1t0eXBlXTsKKwlzdHJ1Y3QgYXRsMWNfYnVmZmVyICpidWZmZXJfaW5mbzsKKwl1MTYgbmV4dF90b19jbGVhbiA9IGF0b21pY19yZWFkKCZ0cGRfcmluZy0+bmV4dF90b19jbGVhbik7CisJdTE2IGh3X25leHRfdG9fY2xlYW47CisJdTE2IHNoaWZ0OworCXUzMiBkYXRhOworCisJaWYgKHR5cGUgPT0gYXRsMWNfdHJhbnNfaGlnaCkKKwkJc2hpZnQgPSBNQl9IVFBEX0NPTlNfSURYX1NISUZUOworCWVsc2UKKwkJc2hpZnQgPSBNQl9OVFBEX0NPTlNfSURYX1NISUZUOworCisJQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUJfUFJJT19DT05TX0lEWCwgJmRhdGEpOworCWh3X25leHRfdG9fY2xlYW4gPSAoZGF0YSA+PiBzaGlmdCkgJiBNQl9QUklPX1BST0RfSURYX01BU0s7CisKKwl3aGlsZSAobmV4dF90b19jbGVhbiAhPSBod19uZXh0X3RvX2NsZWFuKSB7CisJCWJ1ZmZlcl9pbmZvID0gJnRwZF9yaW5nLT5idWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXTsKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5zdGF0ZSA9PSBBVEwxX0JVRkZFUl9CVVNZKSB7CisJCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCQkJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJCQlkZXZfa2ZyZWVfc2tiX2lycShidWZmZXJfaW5mby0+c2tiKTsKKwkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCX0KKwkJCWJ1ZmZlcl9pbmZvLT5zdGF0ZSA9IEFUTDFfQlVGRkVSX0ZSRUU7CisJCX0KKwkJaWYgKCsrbmV4dF90b19jbGVhbiA9PSB0cGRfcmluZy0+Y291bnQpCisJCQluZXh0X3RvX2NsZWFuID0gMDsKKwkJYXRvbWljX3NldCgmdHBkX3JpbmctPm5leHRfdG9fY2xlYW4sIG5leHRfdG9fY2xlYW4pOworCX0KKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGFkYXB0ZXItPm5ldGRldikgJiYKKwkJCW5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkgeworCQluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBhdGwxY19pbnRyIC0gSW50ZXJydXB0IEhhbmRsZXIKKyAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQHB0X3JlZ3M6IENQVSByZWdpc3RlcnMgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBhdGwxY19pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiAgPSBkYXRhOworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGF0bDFjX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgbWF4X2ludHMgPSBBVF9NQVhfSU5UX1dPUks7CisJaW50IGhhbmRsZWQgPSBJUlFfTk9ORTsKKwl1MzIgc3RhdHVzOworCXUzMiByZWdfZGF0YTsKKworCWRvIHsKKwkJQVRfUkVBRF9SRUcoaHcsIFJFR19JU1IsICZyZWdfZGF0YSk7CisJCXN0YXR1cyA9IHJlZ19kYXRhICYgaHctPmludHJfbWFzazsKKworCQlpZiAoc3RhdHVzID09IDAgfHwgKHN0YXR1cyAmIElTUl9ESVNfSU5UKSAhPSAwKSB7CisJCQlpZiAobWF4X2ludHMgIT0gQVRfTUFYX0lOVF9XT1JLKQorCQkJCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKKwkJCWJyZWFrOworCQl9CisJCS8qIGxpbmsgZXZlbnQgKi8KKwkJaWYgKHN0YXR1cyAmIElTUl9HUEhZKQorCQkJYXRsMWNfY2xlYXJfcGh5X2ludChhZGFwdGVyKTsKKwkJLyogQWNrIElTUiAqLworCQlBVF9XUklURV9SRUcoaHcsIFJFR19JU1IsIHN0YXR1cyB8IElTUl9ESVNfSU5UKTsKKwkJaWYgKHN0YXR1cyAmIElTUl9SWF9QS1QpIHsKKwkJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKKwkJCQlody0+aW50cl9tYXNrICY9IH5JU1JfUlhfUEtUOworCQkJCUFUX1dSSVRFX1JFRyhodywgUkVHX0lNUiwgaHctPmludHJfbWFzayk7CisJCQkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJCX0KKwkJfQorCQlpZiAoc3RhdHVzICYgSVNSX1RYX1BLVCkKKwkJCWF0bDFjX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhdGwxY190cmFuc19ub3JtYWwpOworCisJCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKKwkJLyogY2hlY2sgaWYgUENJRSBQSFkgTGluayBkb3duICovCisJCWlmIChzdGF0dXMgJiBJU1JfRVJST1IpIHsKKwkJCWlmIChuZXRpZl9tc2dfaHcoYWRhcHRlcikpCisJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkiYXRsMWMgaGFyZHdhcmUgZXJyb3IgKHN0YXR1cyA9IDB4JXgpXG4iLAorCQkJCQlzdGF0dXMgJiBJU1JfRVJST1IpOworCQkJLyogcmVzZXQgTUFDICovCisJCQlody0+aW50cl9tYXNrICY9IH5JU1JfRVJST1I7CisJCQlBVF9XUklURV9SRUcoaHcsIFJFR19JTVIsIGh3LT5pbnRyX21hc2spOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBJU1JfT1ZFUikKKwkJCWlmIChuZXRpZl9tc2dfaW50cihhZGFwdGVyKSkKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCQkiVFgvUlggb3ZlciBmbG93IChzdGF0dXMgPSAweCV4KVxuIiwKKwkJCQkJc3RhdHVzICYgSVNSX09WRVIpOworCisJCS8qIGxpbmsgZXZlbnQgKi8KKwkJaWYgKHN0YXR1cyAmIChJU1JfR1BIWSB8IElTUl9NQU5VQUwpKSB7CisJCQlhZGFwdGVyLT5uZXRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWF0bDFjX2xpbmtfY2hnX2V2ZW50KGFkYXB0ZXIpOworCQkJYnJlYWs7CisJCX0KKworCX0gd2hpbGUgKC0tbWF4X2ludHMgPiAwKTsKKwkvKiByZS1lbmFibGUgSW50ZXJydXB0Ki8KKwlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSVNSLCAwKTsKKwlyZXR1cm4gaGFuZGxlZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0bDFjX3J4X2NoZWNrc3VtKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyLAorCQkgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBhdGwxY19yZWN2X3JldF9zdGF0dXMgKnBycnMpCit7CisJLyoKKwkgKiBUaGUgcGlkIGZpZWxkIGluIFJSUyBpbiBub3QgY29ycmVjdCBzb21ldGltZXMsIHNvIHdlCisJICogY2Fubm90IGZpZ3VyZSBvdXQgaWYgdGhlIHBhY2tldCBpcyBmcmFnbWVudGVkIG9yIG5vdCwKKwkgKiBzbyB3ZSB0ZWxsIHRoZSBLRVJORUwgQ0hFQ0tTVU1fTk9ORQorCSAqLworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKK30KKworc3RhdGljIGludCBhdGwxY19hbGxvY19yeF9idWZmZXIoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGludCByaW5naWQpCit7CisJc3RydWN0IGF0bDFjX3JmZF9yaW5nICpyZmRfcmluZyA9ICZhZGFwdGVyLT5yZmRfcmluZ1tyaW5naWRdOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgYXRsMWNfYnVmZmVyICpidWZmZXJfaW5mbywgKm5leHRfaW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKnZpcl9hZGRyID0gTlVMTDsKKwl1MTYgbnVtX2FsbG9jID0gMDsKKwl1MTYgcmZkX25leHRfdG9fdXNlLCBuZXh0X25leHQ7CisJc3RydWN0IGF0bDFjX3J4X2ZyZWVfZGVzYyAqcmZkX2Rlc2M7CisKKwluZXh0X25leHQgPSByZmRfbmV4dF90b191c2UgPSByZmRfcmluZy0+bmV4dF90b191c2U7CisJaWYgKCsrbmV4dF9uZXh0ID09IHJmZF9yaW5nLT5jb3VudCkKKwkJbmV4dF9uZXh0ID0gMDsKKwlidWZmZXJfaW5mbyA9ICZyZmRfcmluZy0+YnVmZmVyX2luZm9bcmZkX25leHRfdG9fdXNlXTsKKwluZXh0X2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW25leHRfbmV4dF07CisKKwl3aGlsZSAobmV4dF9pbmZvLT5zdGF0ZSA9PSBBVEwxX0JVRkZFUl9GUkVFKSB7CisJCXJmZF9kZXNjID0gQVRMMUNfUkZEX0RFU0MocmZkX3JpbmcsIHJmZF9uZXh0X3RvX3VzZSk7CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5yeF9idWZmZXJfbGVuKTsKKwkJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCQlpZiAobmV0aWZfbXNnX3J4X2VycihhZGFwdGVyKSkKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiYWxsb2MgcnggYnVmZmVyIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIE1ha2UgYnVmZmVyIGFsaWdubWVudCAyIGJleW9uZCBhIDE2IGJ5dGUgYm91bmRhcnkKKwkJICogdGhpcyB3aWxsIHJlc3VsdCBpbiBhIDE2IGJ5dGUgYWxpZ25lZCBJUCBoZWFkZXIgYWZ0ZXIKKwkJICogdGhlIDE0IGJ5dGUgTUFDIGhlYWRlciBpcyByZW1vdmVkCisJCSAqLworCQl2aXJfYWRkciA9IHNrYi0+ZGF0YTsKKwkJYnVmZmVyX2luZm8tPnN0YXRlID0gQVRMMV9CVUZGRVJfQlVTWTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKKwkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW47CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCB2aXJfYWRkciwKKwkJCQkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGgsCisJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyZmRfZGVzYy0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKKwkJcmZkX25leHRfdG9fdXNlID0gbmV4dF9uZXh0OworCQlpZiAoKytuZXh0X25leHQgPT0gcmZkX3JpbmctPmNvdW50KQorCQkJbmV4dF9uZXh0ID0gMDsKKwkJYnVmZmVyX2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW3JmZF9uZXh0X3RvX3VzZV07CisJCW5leHRfaW5mbyA9ICZyZmRfcmluZy0+YnVmZmVyX2luZm9bbmV4dF9uZXh0XTsKKwkJbnVtX2FsbG9jKys7CisJfQorCisJaWYgKG51bV9hbGxvYykgeworCQkvKiBUT0RPOiB1cGRhdGUgbWFpbGJveCBoZXJlICovCisJCXdtYigpOworCQlyZmRfcmluZy0+bmV4dF90b191c2UgPSByZmRfbmV4dF90b191c2U7CisJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIGF0bDFjX3JmZF9wcm9kX2lkeF9yZWdzW3JpbmdpZF0sCisJCQlyZmRfcmluZy0+bmV4dF90b191c2UgJiBNQl9SRkRYX1BST0RfSURYX01BU0spOworCX0KKworCXJldHVybiBudW1fYWxsb2M7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2NsZWFuX3JyZChzdHJ1Y3QgYXRsMWNfcnJkX3JpbmcgKnJyZF9yaW5nLAorCQkJc3RydWN0CWF0bDFjX3JlY3ZfcmV0X3N0YXR1cyAqcnJzLCB1MTYgbnVtKQoreworCXUxNiBpOworCS8qIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBycmQgYW5kIHJmZCBpcyBvbmUgbWFwIG9uZSAqLworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgcnJzID0gQVRMMUNfUlJEX0RFU0MocnJkX3JpbmcsCisJCQkJCXJyZF9yaW5nLT5uZXh0X3RvX2NsZWFuKSkgeworCQlycnMtPndvcmQzICY9IH5SUlNfUlhEX1VQREFURUQ7CisJCWlmICgrK3JyZF9yaW5nLT5uZXh0X3RvX2NsZWFuID09IHJyZF9yaW5nLT5jb3VudCkKKwkJCXJyZF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2NsZWFuX3JmZChzdHJ1Y3QgYXRsMWNfcmZkX3JpbmcgKnJmZF9yaW5nLAorCXN0cnVjdCBhdGwxY19yZWN2X3JldF9zdGF0dXMgKnJycywgdTE2IG51bSkKK3sKKwl1MTYgaTsKKwl1MTYgcmZkX2luZGV4OworCXN0cnVjdCBhdGwxY19idWZmZXIgKmJ1ZmZlcl9pbmZvID0gcmZkX3JpbmctPmJ1ZmZlcl9pbmZvOworCisJcmZkX2luZGV4ID0gKHJycy0+d29yZDAgPj4gUlJTX1JYX1JGRF9JTkRFWF9TSElGVCkgJgorCQkJUlJTX1JYX1JGRF9JTkRFWF9NQVNLOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlidWZmZXJfaW5mb1tyZmRfaW5kZXhdLnNrYiA9IE5VTEw7CisJCWJ1ZmZlcl9pbmZvW3JmZF9pbmRleF0uc3RhdGUgPSBBVEwxX0JVRkZFUl9GUkVFOworCQlpZiAoKytyZmRfaW5kZXggPT0gcmZkX3JpbmctPmNvdW50KQorCQkJcmZkX2luZGV4ID0gMDsKKwl9CisJcmZkX3JpbmctPm5leHRfdG9fY2xlYW4gPSByZmRfaW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX2NsZWFuX3J4X2lycShzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciwgdTggcXVlLAorCQkgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCit7CisJdTE2IHJmZF9udW0sIHJmZF9pbmRleDsKKwl1MTYgY291bnQgPSAwOworCXUxNiBsZW5ndGg7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBhdGwxY19yZmRfcmluZyAqcmZkX3JpbmcgPSAmYWRhcHRlci0+cmZkX3JpbmdbcXVlXTsKKwlzdHJ1Y3QgYXRsMWNfcnJkX3JpbmcgKnJyZF9yaW5nID0gJmFkYXB0ZXItPnJyZF9yaW5nW3F1ZV07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgYXRsMWNfcmVjdl9yZXRfc3RhdHVzICpycnM7CisJc3RydWN0IGF0bDFjX2J1ZmZlciAqYnVmZmVyX2luZm87CisKKwl3aGlsZSAoMSkgeworCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQorCQkJYnJlYWs7CisJCXJycyA9IEFUTDFDX1JSRF9ERVNDKHJyZF9yaW5nLCBycmRfcmluZy0+bmV4dF90b19jbGVhbik7CisJCWlmIChsaWtlbHkoUlJTX1JYRF9JU19WQUxJRChycnMtPndvcmQzKSkpIHsKKwkJCXJmZF9udW0gPSAocnJzLT53b3JkMCA+PiBSUlNfUlhfUkZEX0NOVF9TSElGVCkgJgorCQkJCVJSU19SWF9SRkRfQ05UX01BU0s7CisJCQlpZiAodW5saWtlbHkocmZkX251bSkgIT0gMSkKKwkJCQkvKiBUT0RPIHN1cHBvcnQgbXVsIHJmZCovCisJCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoYWRhcHRlcikpCisJCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJCQkiTXVsdGkgcmZkIG5vdCBzdXBwb3J0IHlldCFcbiIpOworCQkJZ290byBycnNfY2hlY2tlZDsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CitycnNfY2hlY2tlZDoKKwkJYXRsMWNfY2xlYW5fcnJkKHJyZF9yaW5nLCBycnMsIHJmZF9udW0pOworCQlpZiAocnJzLT53b3JkMyAmIChSUlNfUlhfRVJSX1NVTSB8IFJSU184MDJfM19MRU5fRVJSKSkgeworCQkJYXRsMWNfY2xlYW5fcmZkKHJmZF9yaW5nLCBycnMsIHJmZF9udW0pOworCQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGFkYXB0ZXIpKQorCQkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCQkJIndyb25nIHBhY2tldCEgcnJzIHdvcmQzIGlzICV4XG4iLAorCQkJCQkJcnJzLT53b3JkMyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KChycnMtPndvcmQzID4+IFJSU19QS1RfU0laRV9TSElGVCkgJgorCQkJCVJSU19QS1RfU0laRV9NQVNLKTsKKwkJLyogR29vZCBSZWNlaXZlICovCisJCWlmIChsaWtlbHkocmZkX251bSA9PSAxKSkgeworCQkJcmZkX2luZGV4ID0gKHJycy0+d29yZDAgPj4gUlJTX1JYX1JGRF9JTkRFWF9TSElGVCkgJgorCQkJCQlSUlNfUlhfUkZEX0lOREVYX01BU0s7CisJCQlidWZmZXJfaW5mbyA9ICZyZmRfcmluZy0+YnVmZmVyX2luZm9bcmZkX2luZGV4XTsKKwkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKKwkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKKwkJfSBlbHNlIHsKKwkJCS8qIFRPRE8gKi8KKwkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGFkYXB0ZXIpKQorCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJCSJNdWx0aSByZmQgbm90IHN1cHBvcnQgeWV0IVxuIik7CisJCQlicmVhazsKKwkJfQorCQlhdGwxY19jbGVhbl9yZmQocmZkX3JpbmcsIHJycywgcmZkX251bSk7CisJCXNrYl9wdXQoc2tiLCBsZW5ndGggLSBFVEhfRkNTX0xFTik7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisJCXNrYi0+ZGV2ID0gbmV0ZGV2OworCQlhdGwxY19yeF9jaGVja3N1bShhZGFwdGVyLCBza2IsIHJycyk7CisJCWlmICh1bmxpa2VseShhZGFwdGVyLT52bGdycCkgJiYgcnJzLT53b3JkMyAmIFJSU19WTEFOX0lOUykgeworCQkJdTE2IHZsYW47CisKKwkJCUFUX1RBR19UT19WTEFOKHJycy0+dmxhbl90YWcsIHZsYW4pOworCQkJdmxhbiA9IGxlMTZfdG9fY3B1KHZsYW4pOworCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxncnAsIHZsYW4pOworCQl9IGVsc2UKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisKKwkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJKCp3b3JrX2RvbmUpKys7CisJCWNvdW50Kys7CisJfQorCWlmIChjb3VudCkKKwkJYXRsMWNfYWxsb2NfcnhfYnVmZmVyKGFkYXB0ZXIsIHF1ZSk7Cit9CisKKy8qCisgKiBhdGwxY19jbGVhbiAtIE5BUEkgUnggcG9sbGluZyBjYWxsYmFjaworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgYXRsMWNfY2xlYW4oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0KKwkJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYXRsMWNfYWRhcHRlciwgbmFwaSk7CisJaW50IHdvcmtfZG9uZSA9IDA7CisKKwkvKiBLZWVwIGxpbmsgc3RhdGUgaW5mb3JtYXRpb24gd2l0aCBvcmlnaW5hbCBuZXRkZXYgKi8KKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkKKwkJZ290byBxdWl0X3BvbGxpbmc7CisJLyoganVzdCBlbmFibGUgb25lIFJYUSAqLworCWF0bDFjX2NsZWFuX3J4X2lycShhZGFwdGVyLCAwLCAmd29ya19kb25lLCBidWRnZXQpOworCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworcXVpdF9wb2xsaW5nOgorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlhZGFwdGVyLT5ody5pbnRyX21hc2sgfD0gSVNSX1JYX1BLVDsKKwkJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lNUiwgYWRhcHRlci0+aHcuaW50cl9tYXNrKTsKKwl9CisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisKKy8qCisgKiBQb2xsaW5nICdpbnRlcnJ1cHQnIC0gdXNlZCBieSB0aGluZ3MgbGlrZSBuZXRjb25zb2xlIHRvIHNlbmQgc2ticworICogd2l0aG91dCBoYXZpbmcgdG8gcmUtZW5hYmxlIGludGVycnVwdHMuIEl0J3Mgbm90IGNhbGxlZCB3aGlsZQorICogdGhlIGludGVycnVwdCByb3V0aW5lIGlzIGV4ZWN1dGluZy4KKyAqLworc3RhdGljIHZvaWQgYXRsMWNfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWRpc2FibGVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSk7CisJYXRsMWNfaW50cihhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7CisJZW5hYmxlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdTE2IGF0bDFjX3RwZF9hdmFpbChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciwgZW51bSBhdGwxY190cmFuc19xdWV1ZSB0eXBlKQoreworCXN0cnVjdCBhdGwxY190cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3JpbmdbdHlwZV07CisJdTE2IG5leHRfdG9fdXNlID0gMDsKKwl1MTYgbmV4dF90b19jbGVhbiA9IDA7CisKKwluZXh0X3RvX2NsZWFuID0gYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX2NsZWFuKTsKKwluZXh0X3RvX3VzZSAgID0gdHBkX3JpbmctPm5leHRfdG9fdXNlOworCisJcmV0dXJuICh1MTYpKG5leHRfdG9fY2xlYW4gPiBuZXh0X3RvX3VzZSkgPworCQkobmV4dF90b19jbGVhbiAtIG5leHRfdG9fdXNlIC0gMSkgOgorCQkodHBkX3JpbmctPmNvdW50ICsgbmV4dF90b19jbGVhbiAtIG5leHRfdG9fdXNlIC0gMSk7Cit9CisKKy8qCisgKiBnZXQgbmV4dCB1c2FibGUgdHBkCisgKiBOb3RlOiBzaG91bGQgY2FsbCBhdGwxY190ZHBfYXZhaWwgdG8gbWFrZSBzdXJlCisgKiB0aGVyZSBpcyBlbm91Z2ggdHBkIHRvIHVzZQorICovCitzdGF0aWMgc3RydWN0IGF0bDFjX3RwZF9kZXNjICphdGwxY19nZXRfdHBkKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyLAorCWVudW0gYXRsMWNfdHJhbnNfcXVldWUgdHlwZSkKK3sKKwlzdHJ1Y3QgYXRsMWNfdHBkX3JpbmcgKnRwZF9yaW5nID0gJmFkYXB0ZXItPnRwZF9yaW5nW3R5cGVdOworCXN0cnVjdCBhdGwxY190cGRfZGVzYyAqdHBkX2Rlc2M7CisJdTE2IG5leHRfdG9fdXNlID0gMDsKKworCW5leHRfdG9fdXNlID0gdHBkX3JpbmctPm5leHRfdG9fdXNlOworCWlmICgrK3RwZF9yaW5nLT5uZXh0X3RvX3VzZSA9PSB0cGRfcmluZy0+Y291bnQpCisJCXRwZF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CisJdHBkX2Rlc2MgPSBBVEwxQ19UUERfREVTQyh0cGRfcmluZywgbmV4dF90b191c2UpOworCW1lbXNldCh0cGRfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBhdGwxY190cGRfZGVzYykpOworCXJldHVybgl0cGRfZGVzYzsKK30KKworc3RhdGljIHN0cnVjdCBhdGwxY19idWZmZXIgKgorYXRsMWNfZ2V0X3R4X2J1ZmZlcihzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGF0bDFjX3RwZF9kZXNjICp0cGQpCit7CisJc3RydWN0IGF0bDFjX3RwZF9yaW5nICp0cGRfcmluZyA9IGFkYXB0ZXItPnRwZF9yaW5nOworCisJcmV0dXJuICZ0cGRfcmluZy0+YnVmZmVyX2luZm9bdHBkIC0KKwkJCShzdHJ1Y3QgYXRsMWNfdHBkX2Rlc2MgKil0cGRfcmluZy0+ZGVzY107Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgdHJhbnNtaXQgcGFja2V0IGRlc2NyaXB0IG5lZWRlZCovCitzdGF0aWMgdTE2IGF0bDFjX2NhbF90cGRfcmVxKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTE2IHRwZF9yZXE7CisJdTE2IHByb3RvX2hkcl9sZW4gPSAwOworCisJdHBkX3JlcSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCisJaWYgKHNrYl9pc19nc28oc2tiKSkgeworCQlwcm90b19oZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKKwkJaWYgKHByb3RvX2hkcl9sZW4gPCBza2JfaGVhZGxlbihza2IpKQorCQkJdHBkX3JlcSsrOworCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpCisJCQl0cGRfcmVxKys7CisJfQorCXJldHVybiB0cGRfcmVxOworfQorCitzdGF0aWMgaW50IGF0bDFjX3Rzb19jc3VtKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICBzdHJ1Y3QgYXRsMWNfdHBkX2Rlc2MgKip0cGQsCisJCQkgIGVudW0gYXRsMWNfdHJhbnNfcXVldWUgdHlwZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdTggaGRyX2xlbjsKKwl1MzIgcmVhbF9sZW47CisJdW5zaWduZWQgc2hvcnQgb2ZmbG9hZF90eXBlOworCWludCBlcnI7CisKKwlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CisJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7CisJCQllcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7CisJCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwkJb2ZmbG9hZF90eXBlID0gc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZTsKKworCQlpZiAob2ZmbG9hZF90eXBlICYgU0tCX0dTT19UQ1BWNCkgeworCQkJcmVhbF9sZW4gPSAoKCh1bnNpZ25lZCBjaGFyICopaXBfaGRyKHNrYikgLSBza2ItPmRhdGEpCisJCQkJCSsgbnRvaHMoaXBfaGRyKHNrYiktPnRvdF9sZW4pKTsKKworCQkJaWYgKHJlYWxfbGVuIDwgc2tiLT5sZW4pCisJCQkJcHNrYl90cmltKHNrYiwgcmVhbF9sZW4pOworCisJCQloZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOworCQkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IGhkcl9sZW4pKSB7CisJCQkJLyogb25seSB4c3VtIG5lZWQgKi8KKwkJCQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChhZGFwdGVyKSkKKwkJCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkJCSJJUFY0IHRzbyB3aXRoIHplcm8gZGF0YT8/XG4iKTsKKwkJCQlnb3RvIGNoZWNrX3N1bTsKKwkJCX0gZWxzZSB7CisJCQkJaXBfaGRyKHNrYiktPmNoZWNrID0gMDsKKwkJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKAorCQkJCQkJCWlwX2hkcihza2IpLT5zYWRkciwKKwkJCQkJCQlpcF9oZHIoc2tiKS0+ZGFkZHIsCisJCQkJCQkJMCwgSVBQUk9UT19UQ1AsIDApOworCQkJCSgqdHBkKS0+d29yZDEgfD0gMSA8PCBUUERfSVBWNF9QQUNLRVRfU0hJRlQ7CisJCQl9CisJCX0KKworCQlpZiAob2ZmbG9hZF90eXBlICYgU0tCX0dTT19UQ1BWNikgeworCQkJc3RydWN0IGF0bDFjX3RwZF9leHRfZGVzYyAqZXRwZCA9CisJCQkJKihzdHJ1Y3QgYXRsMWNfdHBkX2V4dF9kZXNjICoqKSh0cGQpOworCisJCQltZW1zZXQoZXRwZCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGwxY190cGRfZXh0X2Rlc2MpKTsKKwkJCSp0cGQgPSBhdGwxY19nZXRfdHBkKGFkYXB0ZXIsIHR5cGUpOworCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4gPSAwOworCQkJLyogY2hlY2sgcGF5bG9hZCA9PSAwIGJ5dGUgPyAqLworCQkJaGRyX2xlbiA9IChza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpKTsKKwkJCWlmICh1bmxpa2VseShza2ItPmxlbiA9PSBoZHJfbGVuKSkgeworCQkJCS8qIG9ubHkgeHN1bSBuZWVkICovCisJCQkJaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQoYWRhcHRlcikpCisJCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJCQkiSVBWNiB0c28gd2l0aCB6ZXJvIGRhdGE/P1xuIik7CisJCQkJZ290byBjaGVja19zdW07CisJCQl9IGVsc2UKKwkJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygKKwkJCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwKKwkJCQkJCSZpcHY2X2hkcihza2IpLT5kYWRkciwKKwkJCQkJCTAsIElQUFJPVE9fVENQLCAwKTsKKwkJCWV0cGQtPndvcmQxIHw9IDEgPDwgVFBEX0xTT19FTl9TSElGVDsKKwkJCWV0cGQtPndvcmQxIHw9IDEgPDwgVFBEX0xTT19WRVJfU0hJRlQ7CisJCQlldHBkLT5wa3RfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOworCQkJKCp0cGQpLT53b3JkMSB8PSAxIDw8IFRQRF9MU09fVkVSX1NISUZUOworCQl9CisKKwkJKCp0cGQpLT53b3JkMSB8PSAxIDw8IFRQRF9MU09fRU5fU0hJRlQ7CisJCSgqdHBkKS0+d29yZDEgfD0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiBUUERfVENQSERSX09GRlNFVF9NQVNLKSA8PAorCQkJCVRQRF9UQ1BIRFJfT0ZGU0VUX1NISUZUOworCQkoKnRwZCktPndvcmQxIHw9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICYgVFBEX01TU19NQVNLKSA8PAorCQkJCVRQRF9NU1NfU0hJRlQ7CisJCXJldHVybiAwOworCX0KKworY2hlY2tfc3VtOgorCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKKwkJdTggY3NzLCBjc287CisJCWNzbyA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisKKwkJaWYgKHVubGlrZWx5KGNzbyAmIDB4MSkpIHsKKwkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGFkYXB0ZXIpKQorCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJInBheWxvYWQgb2Zmc2V0IHNob3VsZCBub3QgYW4gZXZlbnQgbnVtYmVyXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCWNzcyA9IGNzbyArIHNrYi0+Y3N1bV9vZmZzZXQ7CisKKwkJCSgqdHBkKS0+d29yZDEgfD0gKChjc28gPj4gMSkgJiBUUERfUExPQURPRkZTRVRfTUFTSykgPDwKKwkJCQkJVFBEX1BMT0FET0ZGU0VUX1NISUZUOworCQkJKCp0cGQpLT53b3JkMSB8PSAoKGNzcyA+PiAxKSAmIFRQRF9DQ1NVTV9PRkZTRVRfTUFTSykgPDwKKwkJCQkJVFBEX0NDU1VNX09GRlNFVF9TSElGVDsKKwkJCSgqdHBkKS0+d29yZDEgfD0gMSA8PCBUUERfQ0NTVU1fRU5fU0hJRlQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX3R4X21hcChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGF0bDFjX3RwZF9kZXNjICp0cGQsCisJCQllbnVtIGF0bDFjX3RyYW5zX3F1ZXVlIHR5cGUpCit7CisJc3RydWN0IGF0bDFjX3RwZF9kZXNjICp1c2VfdHBkID0gTlVMTDsKKwlzdHJ1Y3QgYXRsMWNfYnVmZmVyICpidWZmZXJfaW5mbyA9IE5VTEw7CisJdTE2IGJ1Zl9sZW4gPSBza2JfaGVhZGxlbihza2IpOworCXUxNiBtYXBfbGVuID0gMDsKKwl1MTYgbWFwcGVkX2xlbiA9IDA7CisJdTE2IGhkcl9sZW4gPSAwOworCXUxNiBucl9mcmFnczsKKwl1MTYgZjsKKwlpbnQgdHNvOworCisJbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXRzbyA9ICh0cGQtPndvcmQxID4+IFRQRF9MU09fRU5fU0hJRlQpICYgVFBEX0xTT19FTl9NQVNLOworCWlmICh0c28pIHsKKwkJLyogVFNPICovCisJCW1hcF9sZW4gPSBoZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKKwkJdXNlX3RwZCA9IHRwZDsKKworCQlidWZmZXJfaW5mbyA9IGF0bDFjX2dldF90eF9idWZmZXIoYWRhcHRlciwgdXNlX3RwZCk7CisJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBtYXBfbGVuOworCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQkJc2tiLT5kYXRhLCBoZHJfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPnN0YXRlID0gQVRMMV9CVUZGRVJfQlVTWTsKKwkJbWFwcGVkX2xlbiArPSBtYXBfbGVuOworCQl1c2VfdHBkLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOworCQl1c2VfdHBkLT5idWZmZXJfbGVuID0gY3B1X3RvX2xlMTYoYnVmZmVyX2luZm8tPmxlbmd0aCk7CisJfQorCisJaWYgKG1hcHBlZF9sZW4gPCBidWZfbGVuKSB7CisJCS8qIG1hcHBlZF9sZW4gPT0gMCwgbWVhbnMgd2Ugc2hvdWxkIHVzZSB0aGUgZmlyc3QgdHBkLAorCQkgICB3aGljaCBpcyBnaXZlbiBieSBjYWxsZXIgICovCisJCWlmIChtYXBwZWRfbGVuID09IDApCisJCQl1c2VfdHBkID0gdHBkOworCQllbHNlIHsKKwkJCXVzZV90cGQgPSBhdGwxY19nZXRfdHBkKGFkYXB0ZXIsIHR5cGUpOworCQkJbWVtY3B5KHVzZV90cGQsIHRwZCwgc2l6ZW9mKHN0cnVjdCBhdGwxY190cGRfZGVzYykpOworCQkJdXNlX3RwZCA9IGF0bDFjX2dldF90cGQoYWRhcHRlciwgdHlwZSk7CisJCQltZW1jcHkodXNlX3RwZCwgdHBkLCBzaXplb2Yoc3RydWN0IGF0bDFjX3RwZF9kZXNjKSk7CisJCX0KKwkJYnVmZmVyX2luZm8gPSBhdGwxY19nZXRfdHhfYnVmZmVyKGFkYXB0ZXIsIHVzZV90cGQpOworCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gYnVmX2xlbiAtIG1hcHBlZF9sZW47CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPQorCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgc2tiLT5kYXRhICsgbWFwcGVkX2xlbiwKKwkJCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJCWJ1ZmZlcl9pbmZvLT5zdGF0ZSA9IEFUTDFfQlVGRkVSX0JVU1k7CisKKwkJdXNlX3RwZC0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKKwkJdXNlX3RwZC0+YnVmZmVyX2xlbiAgPSBjcHVfdG9fbGUxNihidWZmZXJfaW5mby0+bGVuZ3RoKTsKKwl9CisKKwlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgeworCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOworCisJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKKworCQl1c2VfdHBkID0gYXRsMWNfZ2V0X3RwZChhZGFwdGVyLCB0eXBlKTsKKwkJbWVtY3B5KHVzZV90cGQsIHRwZCwgc2l6ZW9mKHN0cnVjdCBhdGwxY190cGRfZGVzYykpOworCisJCWJ1ZmZlcl9pbmZvID0gYXRsMWNfZ2V0X3R4X2J1ZmZlcihhZGFwdGVyLCB1c2VfdHBkKTsKKwkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGZyYWctPnNpemU7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPQorCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIGZyYWctPnBhZ2UsCisJCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLAorCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPnN0YXRlID0gQVRMMV9CVUZGRVJfQlVTWTsKKworCQl1c2VfdHBkLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOworCQl1c2VfdHBkLT5idWZmZXJfbGVuICA9IGNwdV90b19sZTE2KGJ1ZmZlcl9pbmZvLT5sZW5ndGgpOworCX0KKworCS8qIFRoZSBsYXN0IHRwZCAqLworCXVzZV90cGQtPndvcmQxIHw9IDEgPDwgVFBEX0VPUF9TSElGVDsKKwkvKiBUaGUgbGFzdCBidWZmZXIgaW5mbyBjb250YWluIHRoZSBza2IgYWRkcmVzcywKKwkgICBzbyBpdCB3aWxsIGJlIGZyZWUgYWZ0ZXIgdW5tYXAgKi8KKwlidWZmZXJfaW5mby0+c2tiID0gc2tiOworfQorCitzdGF0aWMgdm9pZCBhdGwxY190eF9xdWV1ZShzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIHN0cnVjdCBhdGwxY190cGRfZGVzYyAqdHBkLCBlbnVtIGF0bDFjX3RyYW5zX3F1ZXVlIHR5cGUpCit7CisJc3RydWN0IGF0bDFjX3RwZF9yaW5nICp0cGRfcmluZyA9ICZhZGFwdGVyLT50cGRfcmluZ1t0eXBlXTsKKwl1MzIgcHJvZF9kYXRhOworCisJQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUJfUFJJT19QUk9EX0lEWCwgJnByb2RfZGF0YSk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBhdGwxY190cmFuc19oaWdoOgorCQlwcm9kX2RhdGEgJj0gMHhGRkZGMDAwMDsKKwkJcHJvZF9kYXRhIHw9IHRwZF9yaW5nLT5uZXh0X3RvX3VzZSAmIDB4RkZGRjsKKwkJYnJlYWs7CisJY2FzZSBhdGwxY190cmFuc19ub3JtYWw6CisJCXByb2RfZGF0YSAmPSAweDAwMDBGRkZGOworCQlwcm9kX2RhdGEgfD0gKHRwZF9yaW5nLT5uZXh0X3RvX3VzZSAmIDB4RkZGRikgPDwgMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwl3bWIoKTsKKwlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUJfUFJJT19QUk9EX0lEWCwgcHJvZF9kYXRhKTsKK30KKworc3RhdGljIGludCBhdGwxY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHRwZF9yZXEgPSAxOworCXN0cnVjdCBhdGwxY190cGRfZGVzYyAqdHBkOworCWVudW0gYXRsMWNfdHJhbnNfcXVldWUgdHlwZSA9IGF0bDFjX3RyYW5zX25vcm1hbDsKKworCWlmICh0ZXN0X2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncykpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwl0cGRfcmVxID0gYXRsMWNfY2FsX3RwZF9yZXEoc2tiKTsKKwlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncykpIHsKKwkJaWYgKG5ldGlmX21zZ19wa3RkYXRhKGFkYXB0ZXIpKQorCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgInR4IGxvY2tlZFxuIik7CisJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOworCX0KKwlpZiAoc2tiLT5tYXJrID09IDB4MDEpCisJCXR5cGUgPSBhdGwxY190cmFuc19oaWdoOworCWVsc2UKKwkJdHlwZSA9IGF0bDFjX3RyYW5zX25vcm1hbDsKKworCWlmIChhdGwxY190cGRfYXZhaWwoYWRhcHRlciwgdHlwZSkgPCB0cGRfcmVxKSB7CisJCS8qIG5vIGVub3VnaCBkZXNjcmlwdG9yLCBqdXN0IHN0b3AgcXVldWUgKi8KKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwl0cGQgPSBhdGwxY19nZXRfdHBkKGFkYXB0ZXIsIHR5cGUpOworCisJLyogZG8gVFNPIGFuZCBjaGVjayBzdW0gKi8KKwlpZiAoYXRsMWNfdHNvX2NzdW0oYWRhcHRlciwgc2tiLCAmdHBkLCB0eXBlKSAhPSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X2xvY2ssIGZsYWdzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSkgeworCQl1MTYgdmxhbiA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQlfX2xlMTYgdGFnOworCisJCXZsYW4gPSBjcHVfdG9fbGUxNih2bGFuKTsKKwkJQVRfVkxBTl9UT19UQUcodmxhbiwgdGFnKTsKKwkJdHBkLT53b3JkMSB8PSAxIDw8IFRQRF9JTlNfVlRBR19TSElGVDsKKwkJdHBkLT52bGFuX3RhZyA9IHRhZzsKKwl9CisKKwlpZiAoc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgIT0gRVRIX0hMRU4pCisJCXRwZC0+d29yZDEgfD0gMSA8PCBUUERfRVRIX1RZUEVfU0hJRlQ7IC8qIEV0aGVybmV0IGZyYW1lICovCisKKwlhdGwxY190eF9tYXAoYWRhcHRlciwgc2tiLCB0cGQsIHR5cGUpOworCWF0bDFjX3R4X3F1ZXVlKGFkYXB0ZXIsIHNrYiwgdHBkLCB0eXBlKTsKKworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBhdGwxY19mcmVlX2lycShzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJZnJlZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQorCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7Cit9CisKK3N0YXRpYyBpbnQgYXRsMWNfcmVxdWVzdF9pcnEoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgICAgKnBkZXYgICA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgZmxhZ3MgPSAwOworCWludCBlcnIgPSAwOworCisJYWRhcHRlci0+aGF2ZV9tc2kgPSB0cnVlOworCWVyciA9IHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCWlmIChlcnIpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKGFkYXB0ZXIpKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdCBFcnJvcjogJWRcbiIsCisJCQkJZXJyKTsKKwkJYWRhcHRlci0+aGF2ZV9tc2kgPSBmYWxzZTsKKwl9IGVsc2UKKwkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisKKwlpZiAoIWFkYXB0ZXItPmhhdmVfbXNpKQorCQlmbGFncyB8PSBJUlFGX1NIQVJFRDsKKwllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsICZhdGwxY19pbnRyLCBmbGFncywKKwkJCW5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cChhZGFwdGVyKSkKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsCisJCQkJZXJyKTsKKwkJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQorCQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCQlyZXR1cm4gZXJyOworCX0KKwlpZiAobmV0aWZfbXNnX2lmdXAoYWRhcHRlcikpCisJCWRldl9kYmcoJnBkZXYtPmRldiwgImF0bDFjX3JlcXVlc3RfaXJxIE9LXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYXRsMWNfdXAoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgbnVtOworCWludCBlcnI7CisJaW50IGk7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCWF0bDFjX2luaXRfcmluZ19wdHJzKGFkYXB0ZXIpOworCWF0bDFjX3NldF9tdWx0aShuZXRkZXYpOworCWF0bDFjX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJbnVtID0gYXRsMWNfYWxsb2NfcnhfYnVmZmVyKGFkYXB0ZXIsIGkpOworCQlpZiAodW5saWtlbHkobnVtID09IDApKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfYWxsb2Nfcng7CisJCX0KKwl9CisKKwlpZiAoYXRsMWNfY29uZmlndXJlKGFkYXB0ZXIpKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX3VwOworCX0KKworCWVyciA9IGF0bDFjX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIGVycl91cDsKKworCWNsZWFyX2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOworCWF0bDFjX2lycV9lbmFibGUoYWRhcHRlcik7CisJYXRsMWNfY2hlY2tfbGlua19zdGF0dXMoYWRhcHRlcik7CisJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKwlyZXR1cm4gZXJyOworCitlcnJfdXA6CitlcnJfYWxsb2Nfcng6CisJYXRsMWNfY2xlYW5fcnhfcmluZyhhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGF0bDFjX2Rvd24oc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWF0bDFjX2RlbF90aW1lcihhZGFwdGVyKTsKKwlhdGwxY19jYW5jZWxfd29yayhhZGFwdGVyKTsKKworCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGRvd24gc28gdGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90CisJICogcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGltZXIgKi8KKwlzZXRfYml0KF9fQVRfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJYXRsMWNfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisJYXRsMWNfZnJlZV9pcnEoYWRhcHRlcik7CisJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lTUiwgSVNSX0RJU19JTlQpOworCS8qIHJlc2V0IE1BQyB0byBkaXNhYmxlIGFsbCBSWC9UWCAqLworCWF0bDFjX3Jlc2V0X21hYygmYWRhcHRlci0+aHcpOworCW1zbGVlcCgxKTsKKworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBTUEVFRF8wOworCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gLTE7CisJYXRsMWNfY2xlYW5fdHhfcmluZyhhZGFwdGVyLCBhdGwxY190cmFuc19ub3JtYWwpOworCWF0bDFjX2NsZWFuX3R4X3JpbmcoYWRhcHRlciwgYXRsMWNfdHJhbnNfaGlnaCk7CisJYXRsMWNfY2xlYW5fcnhfcmluZyhhZGFwdGVyKTsKK30KKworLyoKKyAqIGF0bDFjX29wZW4gLSBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKKyAqCisgKiBUaGUgb3BlbiBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUKKyAqIGFjdGl2ZSBieSB0aGUgc3lzdGVtIChJRkZfVVApLiAgQXQgdGhpcyBwb2ludCBhbGwgcmVzb3VyY2VzIG5lZWRlZAorICogZm9yIHRyYW5zbWl0IGFuZCByZWNlaXZlIG9wZXJhdGlvbnMgYXJlIGFsbG9jYXRlZCwgdGhlIGludGVycnVwdAorICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIE9TLCB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgc3RhcnRlZCwKKyAqIGFuZCB0aGUgc3RhY2sgaXMgbm90aWZpZWQgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5LgorICovCitzdGF0aWMgaW50IGF0bDFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVycjsKKworCS8qIGRpc2FsbG93IG9wZW4gZHVyaW5nIHRlc3QgKi8KKwlpZiAodGVzdF9iaXQoX19BVF9URVNUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogYWxsb2NhdGUgcngvdHggZG1hIGJ1ZmZlciAmIGRlc2NyaXB0b3JzICovCisJZXJyID0gYXRsMWNfc2V0dXBfcmluZ19yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKHVubGlrZWx5KGVycikpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBhdGwxY191cChhZGFwdGVyKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290byBlcnJfdXA7CisKKwlpZiAoYWRhcHRlci0+aHcuY3RybF9mbGFncyAmIEFUTDFDX0ZQR0FfVkVSU0lPTikgeworCQl1MzIgcGh5X2RhdGE7CisKKwkJQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTURJT19DVFJMLCAmcGh5X2RhdGEpOworCQlwaHlfZGF0YSB8PSBNRElPX0FQX0VOOworCQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTURJT19DVFJMLCBwaHlfZGF0YSk7CisJfQorCXJldHVybiAwOworCitlcnJfdXA6CisJYXRsMWNfZnJlZV9pcnEoYWRhcHRlcik7CisJYXRsMWNfZnJlZV9yaW5nX3Jlc291cmNlcyhhZGFwdGVyKTsKKwlhdGwxY19yZXNldF9tYWMoJmFkYXB0ZXItPmh3KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogYXRsMWNfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwLCB0aGlzIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwKKyAqCisgKiBUaGUgY2xvc2UgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGRlLWFjdGl2YXRlZAorICogYnkgdGhlIE9TLiAgVGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVuZGVyIHRoZSBkcml2ZXJzIGNvbnRyb2wsIGJ1dAorICogbmVlZHMgdG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhlCisgKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgorICovCitzdGF0aWMgaW50IGF0bDFjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJV0FSTl9PTih0ZXN0X2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKSk7CisJYXRsMWNfZG93bihhZGFwdGVyKTsKKwlhdGwxY19mcmVlX3JpbmdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bDFjX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWNfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsOworCXUzMiBtYWNfY3RybF9kYXRhOworCXUzMiBtYXN0ZXJfY3RybF9kYXRhOworCXUzMiB3b2xfY3RybF9kYXRhOworCXUxNiBtaWlfYm1zcl9kYXRhOworCXUxNiBzYXZlX2F1dG9uZWdfYWR2ZXJ0aXNlZDsKKwl1MTYgbWlpX2ludHJfc3RhdHVzX2RhdGE7CisJdTMyIHd1ZmMgPSBhZGFwdGVyLT53b2w7CisJdTMyIGk7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCVdBUk5fT04odGVzdF9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncykpOworCQlhdGwxY19kb3duKGFkYXB0ZXIpOworCX0KKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisJYXRsMWNfZGlzYWJsZV9sMHNfbDEoaHcpOworCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKHd1ZmMpIHsKKwkJQVRfUkVBRF9SRUcoaHcsIFJFR19NQVNURVJfQ1RSTCwgJm1hc3Rlcl9jdHJsX2RhdGEpOworCQltYXN0ZXJfY3RybF9kYXRhICY9IH5NQVNURVJfQ1RSTF9DTEtfU0VMX0RJUzsKKworCQkvKiBnZXQgbGluayBzdGF0dXMgKi8KKwkJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgKHUxNiAqKSZtaWlfYm1zcl9kYXRhKTsKKwkJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgKHUxNiAqKSZtaWlfYm1zcl9kYXRhKTsKKwkJc2F2ZV9hdXRvbmVnX2FkdmVydGlzZWQgPSBody0+YXV0b25lZ19hZHZlcnRpc2VkOworCQlody0+YXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7CisJCWlmIChhdGwxY19yZXN0YXJ0X2F1dG9uZWcoaHcpICE9IDApCisJCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCisJCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInBoeSBhdXRvbmVnIGZhaWxlZFxuIik7CisJCWh3LT5waHlfY29uZmlndXJlZCA9IGZhbHNlOyAvKiByZS1pbml0IFBIWSB3aGVuIHJlc3VtZSAqLworCQlody0+YXV0b25lZ19hZHZlcnRpc2VkID0gc2F2ZV9hdXRvbmVnX2FkdmVydGlzZWQ7CisJCS8qIHR1cm4gb24gbWFnaWMgcGFja2V0IHdvbCAqLworCQlpZiAod3VmYyAmIEFUX1dVRkNfTUFHKQorCQkJd29sX2N0cmxfZGF0YSA9IFdPTF9NQUdJQ19FTiB8IFdPTF9NQUdJQ19QTUVfRU47CisKKwkJaWYgKHd1ZmMgJiBBVF9XVUZDX0xOS0MpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBBVF9TVVNQRU5EX0xJTktfVElNRU9VVDsgaSsrKSB7CisJCQkJbXNsZWVwKDEwMCk7CisJCQkJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwKKwkJCQkJKHUxNiAqKSZtaWlfYm1zcl9kYXRhKTsKKwkJCQlpZiAobWlpX2Jtc3JfZGF0YSAmIEJNU1JfTFNUQVRVUykKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKG1paV9ibXNyX2RhdGEgJiBCTVNSX0xTVEFUVVMpID09IDApCisJCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCQkJIiVzOiBMaW5rIG1heSBjaGFuZ2UiCisJCQkJCQkid2hlbiBzdXNwZW5kXG4iLAorCQkJCQkJYXRsMWNfZHJpdmVyX25hbWUpOworCQkJd29sX2N0cmxfZGF0YSB8PSAgV09MX0xJTktfQ0hHX0VOIHwgV09MX0xJTktfQ0hHX1BNRV9FTjsKKwkJCS8qIG9ubHkgbGluayB1cCBjYW4gd2FrZSB1cCAqLworCQkJaWYgKGF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9JRVIsIElFUl9MSU5LX1VQKSAhPSAwKSB7CisJCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCQkiJXM6IHJlYWQgd3JpdGUgcGh5ICIKKwkJCQkJCSJyZWdpc3RlciBmYWlsZWQuXG4iLAorCQkJCQkJYXRsMWNfZHJpdmVyX25hbWUpOworCQkJCWdvdG8gd29sX2RpczsKKwkJCX0KKwkJfQorCQkvKiBjbGVhciBwaHkgaW50ZXJydXB0ICovCisJCWF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0lTUiwgJm1paV9pbnRyX3N0YXR1c19kYXRhKTsKKwkJLyogQ29uZmlnIE1BQyBDdHJsIHJlZ2lzdGVyICovCisJCW1hY19jdHJsX2RhdGEgPSBNQUNfQ1RSTF9SWF9FTjsKKwkJLyogc2V0IHRvIDEwLzEwME0gaGFsdCBkdXBsZXggKi8KKwkJbWFjX2N0cmxfZGF0YSB8PSBhdGwxY19tYWNfc3BlZWRfMTBfMTAwIDw8IE1BQ19DVFJMX1NQRUVEX1NISUZUOworCQltYWNfY3RybF9kYXRhIHw9ICgoKHUzMilhZGFwdGVyLT5ody5wcmVhbWJsZV9sZW4gJgorCQkJCSBNQUNfQ1RSTF9QUk1MRU5fTUFTSykgPDwKKwkJCQkgTUFDX0NUUkxfUFJNTEVOX1NISUZUKTsKKworCQlpZiAoYWRhcHRlci0+dmxncnApCisJCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX1JNVl9WTEFOOworCisJCS8qIG1hZ2ljIHBhY2tldCBtYXliZSBCcm9hZGNhc3QmbXVsdGljYXN0JlVuaWNhc3QgZnJhbWUgKi8KKwkJaWYgKHd1ZmMgJiBBVF9XVUZDX01BRykKKwkJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfQkNfRU47CisKKwkJaWYgKG5ldGlmX21zZ19odyhhZGFwdGVyKSkKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCQkiJXM6IHN1c3BlbmQgTUFDPTB4JXhcbiIsCisJCQkJYXRsMWNfZHJpdmVyX25hbWUsIG1hY19jdHJsX2RhdGEpOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19NQVNURVJfQ1RSTCwgbWFzdGVyX2N0cmxfZGF0YSk7CisJCUFUX1dSSVRFX1JFRyhodywgUkVHX1dPTF9DVFJMLCB3b2xfY3RybF9kYXRhKTsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOworCisJCS8qIHBjaWUgcGF0Y2ggKi8KKwkJQVRfUkVBRF9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MsICZjdHJsKTsKKwkJY3RybCB8PSBQQ0lFX1BIWU1JU0NfRk9SQ0VfUkNWX0RFVDsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUENJRV9QSFlNSVNDLCBjdHJsKTsKKworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIDEpOworCQlnb3RvIHN1c3BlbmRfZXhpdDsKKwl9Cit3b2xfZGlzOgorCisJLyogV09MIGRpc2FibGVkICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfV09MX0NUUkwsIDApOworCisJLyogcGNpZSBwYXRjaCAqLworCUFUX1JFQURfUkVHKGh3LCBSRUdfUENJRV9QSFlNSVNDLCAmY3RybCk7CisJY3RybCB8PSBQQ0lFX1BIWU1JU0NfRk9SQ0VfUkNWX0RFVDsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MsIGN0cmwpOworCisJYXRsMWNfcGh5X2Rpc2FibGUoaHcpOworCWh3LT5waHlfY29uZmlndXJlZCA9IGZhbHNlOyAvKiByZS1pbml0IFBIWSB3aGVuIHJlc3VtZSAqLworCisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCAwKTsKK3N1c3BlbmRfZXhpdDoKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bDFjX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CisKKwlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfV09MX0NUUkwsIDApOworCisJYXRsMWNfcGh5X3Jlc2V0KCZhZGFwdGVyLT5odyk7CisJYXRsMWNfcmVzZXRfbWFjKCZhZGFwdGVyLT5odyk7CisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWF0bDFjX3VwKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFjX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWF0bDFjX3N1c3BlbmQocGRldiwgUE1TR19TVVNQRU5EKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhdGwxY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhdGwxY19vcGVuLAorCS5uZG9fc3RvcAkJPSBhdGwxY19jbG9zZSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYXRsMWNfeG1pdF9mcmFtZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBhdGwxY19zZXRfbWFjX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhdGwxY19zZXRfbXVsdGksCisJLm5kb19jaGFuZ2VfbXR1CQk9IGF0bDFjX2NoYW5nZV9tdHUsCisJLm5kb19kb19pb2N0bAkJPSBhdGwxY19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gYXRsMWNfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBhdGwxY19nZXRfc3RhdHMsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gYXRsMWNfdmxhbl9yeF9yZWdpc3RlciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gYXRsMWNfbmV0cG9sbCwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBhdGwxY19pbml0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXRkZXYpOworCisJbmV0ZGV2LT5pcnEgID0gcGRldi0+aXJxOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZhdGwxY19uZXRkZXZfb3BzOworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBBVF9UWF9XQVRDSERPRzsKKwlhdGwxY19zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKKworCS8qIFRPRE86IGFkZCB3aGVuIHJlYWR5ICovCisJbmV0ZGV2LT5mZWF0dXJlcyA9CU5FVElGX0ZfU0cJICAgfAorCQkJCU5FVElGX0ZfSFdfQ1NVTQkgICB8CisJCQkJTkVUSUZfRl9IV19WTEFOX1RYIHwKKwkJCQlORVRJRl9GX0hXX1ZMQU5fUlggfAorCQkJCU5FVElGX0ZfVFNPCSAgIHwKKwkJCQlORVRJRl9GX1RTTzY7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdGwxY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqIEBlbnQ6IGVudHJ5IGluIGF0bDFjX3BjaV90YmwKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoKKyAqIGF0bDFjX3Byb2JlIGluaXRpYWxpemVzIGFuIGFkYXB0ZXIgaWRlbnRpZmllZCBieSBhIHBjaV9kZXYgc3RydWN0dXJlLgorICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSwKKyAqIGFuZCBhIGhhcmR3YXJlIHJlc2V0IG9jY3VyLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyOworCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CisKKwlpbnQgZXJyID0gMDsKKworCS8qIGVuYWJsZSBkZXZpY2UgKGluY2wuIFBDSSBQTSB3YWtldXAgYW5kIGhvdHBsdWcgc2V0dXApICovCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKgorCSAqIFRoZSBhdGwxYyBjaGlwIGNhbiBETUEgdG8gNjQtYml0IGFkZHJlc3NlcywgYnV0IGl0IHVzZXMgYSBzaW5nbGUKKwkgKiBzaGFyZWQgcmVnaXN0ZXIgZm9yIHRoZSBoaWdoIDMyIGJpdHMsIHNvIG9ubHkgYSBzaW5nbGUsIGFsaWduZWQsCisJICogNCBHQiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGNhbiBiZSB1c2VkIGF0IGEgdGltZS4KKwkgKgorCSAqIFN1cHBvcnRpbmcgNjQtYml0IERNQSBvbiB0aGlzIGhhcmR3YXJlIGlzIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3MKKwkgKiB3b3J0aC4gIEl0IGlzIGZhciBlYXNpZXIgdG8gbGltaXQgdG8gMzItYml0IERNQSB0aGFuIHVwZGF0ZQorCSAqIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMgdG8gc3VwcG9ydCB0aGUgbWVjaGFuaWNzIHJlcXVpcmVkIGJ5IGEKKwkgKiBmaXhlZC1oaWdoLTMyLWJpdCBzeXN0ZW0uCisJICovCisJaWYgKChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSAhPSAwKSB8fAorCSAgICAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSAhPSAwKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sYWJvcnRpbmdcbiIpOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBhdGwxY19kcml2ZXJfbmFtZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycl9wY2lfcmVnOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhdGwxY19hZGFwdGVyKSk7CisJaWYgKG5ldGRldiA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImV0aGVyZGV2IGFsbG9jIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OworCX0KKworCWVyciA9IGF0bDFjX2luaXRfbmV0ZGV2KG5ldGRldiwgcGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0IG5ldGRldmljZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9pbml0X25ldGRldjsKKwl9CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+YmRfbnVtYmVyID0gY2FyZHNfZm91bmQ7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgPSBwZGV2OworCWFkYXB0ZXItPmh3LmFkYXB0ZXIgPSBhZGFwdGVyOworCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdCgtMSwgYXRsMWNfZGVmYXVsdF9tc2cpOworCWFkYXB0ZXItPmh3Lmh3X2FkZHIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKCFhZGFwdGVyLT5ody5od19hZGRyKSB7CisJCWVyciA9IC1FSU87CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCW5ldGRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlci0+aHcuaHdfYWRkcjsKKworCS8qIGluaXQgbWlpIGRhdGEgKi8KKwlhZGFwdGVyLT5taWkuZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPm1paS5tZGlvX3JlYWQgID0gYXRsMWNfbWRpb19yZWFkOworCWFkYXB0ZXItPm1paS5tZGlvX3dyaXRlID0gYXRsMWNfbWRpb193cml0ZTsKKwlhZGFwdGVyLT5taWkucGh5X2lkX21hc2sgPSAweDFmOworCWFkYXB0ZXItPm1paS5yZWdfbnVtX21hc2sgPSBNRElPX1JFR19BRERSX01BU0s7CisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwgYXRsMWNfY2xlYW4sIDY0KTsKKwlzZXR1cF90aW1lcigmYWRhcHRlci0+cGh5X2NvbmZpZ190aW1lciwgYXRsMWNfcGh5X2NvbmZpZywKKwkJCSh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOworCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLworCWVyciA9IGF0bDFjX3N3X2luaXQoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJuZXQgZGV2aWNlIHByaXZhdGUgZGF0YSBpbml0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3N3X2luaXQ7CisJfQorCWF0bDFjX3Jlc2V0X3BjaWUoJmFkYXB0ZXItPmh3LCBBVEwxQ19QQ0lFX0wwU19MMV9ESVNBQkxFIHwKKwkJCUFUTDFDX1BDSUVfUEhZX1JFU0VUKTsKKworCS8qIEluaXQgR1BIWSBhcyBlYXJseSBhcyBwb3NzaWJsZSBkdWUgdG8gcG93ZXIgc2F2aW5nIGlzc3VlICAqLworCWF0bDFjX3BoeV9yZXNldCgmYWRhcHRlci0+aHcpOworCisJZXJyID0gYXRsMWNfcmVzZXRfbWFjKCZhZGFwdGVyLT5odyk7CisJaWYgKGVycikgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9yZXNldDsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgdG8KKwkgKiBwdXQgdGhlIGRldmljZSBpbiBhIGtub3duIGdvb2Qgc3RhcnRpbmcgc3RhdGUgKi8KKwllcnIgPSBhdGwxY19waHlfaW5pdCgmYWRhcHRlci0+aHcpOworCWlmIChlcnIpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfcmVzZXQ7CisJfQorCWlmIChhdGwxY19yZWFkX21hY19hZGRyKCZhZGFwdGVyLT5odykgIT0gMCkgeworCQllcnIgPSAtRUlPOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJnZXQgbWFjIGFkZHJlc3MgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZWVwcm9tOworCX0KKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCWlmIChuZXRpZl9tc2dfcHJvYmUoYWRhcHRlcikpCisJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCSJtYWMgYWRkcmVzcyA6ICUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4XG4iLAorCQkJYWRhcHRlci0+aHcubWFjX2FkZHJbMF0sIGFkYXB0ZXItPmh3Lm1hY19hZGRyWzFdLAorCQkJYWRhcHRlci0+aHcubWFjX2FkZHJbMl0sIGFkYXB0ZXItPmh3Lm1hY19hZGRyWzNdLAorCQkJYWRhcHRlci0+aHcubWFjX2FkZHJbNF0sIGFkYXB0ZXItPmh3Lm1hY19hZGRyWzVdKTsKKworCWF0bDFjX2h3X3NldF9tYWNfYWRkcigmYWRhcHRlci0+aHcpOworCUlOSVRfV09SSygmYWRhcHRlci0+cmVzZXRfdGFzaywgYXRsMWNfcmVzZXRfdGFzayk7CisJSU5JVF9XT1JLKCZhZGFwdGVyLT5saW5rX2NoZ190YXNrLCBhdGwxY19saW5rX2NoZ190YXNrKTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lzdGVyIG5ldGRldmljZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9yZWdpc3RlcjsKKwl9CisKKwlpZiAobmV0aWZfbXNnX3Byb2JlKGFkYXB0ZXIpKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmVyc2lvbiAlc1xuIiwgQVRMMUNfRFJWX1ZFUlNJT04pOworCWNhcmRzX2ZvdW5kKys7CisJcmV0dXJuIDA7CisKK2Vycl9yZXNldDoKK2Vycl9yZWdpc3RlcjoKK2Vycl9zd19pbml0OgorZXJyX2VlcHJvbToKKwlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOworZXJyX2luaXRfbmV0ZGV2OgorZXJyX2lvcmVtYXA6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK2Vycl9hbGxvY19ldGhlcmRldjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX3BjaV9yZWc6CitlcnJfZG1hOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogYXRsMWNfcmVtb3ZlIC0gRGV2aWNlIFJlbW92YWwgUm91dGluZQorICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKgorICogYXRsMWNfcmVtb3ZlIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSB0byBhbGVydCB0aGUgZHJpdmVyCisgKiB0aGF0IGl0IHNob3VsZCByZWxlYXNlIGEgUENJIGRldmljZS4gIFRoZSBjb3VsZCBiZSBjYXVzZWQgYnkgYQorICogSG90LVBsdWcgZXZlbnQsIG9yIGJlY2F1c2UgdGhlIGRyaXZlciBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20KKyAqIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGF0bDFjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJYXRsMWNfcGh5X2Rpc2FibGUoJmFkYXB0ZXItPmh3KTsKKworCWlvdW5tYXAoYWRhcHRlci0+aHcuaHdfYWRkcik7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlmcmVlX25ldGRldihuZXRkZXYpOworfQorCisvKgorICogYXRsMWNfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYXRsMWNfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCQlwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJYXRsMWNfZG93bihhZGFwdGVyKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCS8qIFJlcXVlc3QgYSBzbG90IHNsb3QgcmVzZXQuICovCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7Cit9CisKKy8qCisgKiBhdGwxY19pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LiBJbXBsZW1lbnRhdGlvbgorICogcmVzZW1ibGVzIHRoZSBmaXJzdC1oYWxmIG9mIHRoZSBlMTAwMF9yZXN1bWUgcm91dGluZS4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYXRsMWNfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlpZiAobmV0aWZfbXNnX2h3KGFkYXB0ZXIpKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXRcbiIpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CisKKwlhdGwxY19yZXNldF9tYWMoJmFkYXB0ZXItPmh3KTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7Cit9CisKKy8qCisgKiBhdGwxY19pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0CisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uIEltcGxlbWVudGF0aW9uIHJlc2VtYmxlcyB0aGUKKyAqIHNlY29uZC1oYWxmIG9mIHRoZSBhdGwxY19yZXN1bWUgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgYXRsMWNfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlpZiAoYXRsMWNfdXAoYWRhcHRlcikpIHsKKwkJCWlmIChuZXRpZl9tc2dfaHcoYWRhcHRlcikpCisJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkiQ2Fubm90IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgYXRsMWNfZXJyX2hhbmRsZXIgPSB7CisJLmVycm9yX2RldGVjdGVkID0gYXRsMWNfaW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBhdGwxY19pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgPSBhdGwxY19pb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRsMWNfZHJpdmVyID0geworCS5uYW1lICAgICA9IGF0bDFjX2RyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9IGF0bDFjX3BjaV90YmwsCisJLnByb2JlICAgID0gYXRsMWNfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYXRsMWNfcmVtb3ZlKSwKKwkvKiBQb3dlciBNYW5hZ21lbnQgSG9va3MgKi8KKwkuc3VzcGVuZCAgPSBhdGwxY19zdXNwZW5kLAorCS5yZXN1bWUgICA9IGF0bDFjX3Jlc3VtZSwKKwkuc2h1dGRvd24gPSBhdGwxY19zaHV0ZG93biwKKwkuZXJyX2hhbmRsZXIgPSAmYXRsMWNfZXJyX2hhbmRsZXIKK307CisKKy8qCisgKiBhdGwxY19pbml0X21vZHVsZSAtIERyaXZlciBSZWdpc3RyYXRpb24gUm91dGluZQorICoKKyAqIGF0bDFjX2luaXRfbW9kdWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKKyAqIGxvYWRlZC4gQWxsIGl0IGRvZXMgaXMgcmVnaXN0ZXIgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KKyAqLworc3RhdGljIGludCBfX2luaXQgYXRsMWNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXRsMWNfZHJpdmVyKTsKK30KKworLyoKKyAqIGF0bDFjX2V4aXRfbW9kdWxlIC0gRHJpdmVyIEV4aXQgQ2xlYW51cCBSb3V0aW5lCisgKgorICogYXRsMWNfZXhpdF9tb2R1bGUgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBkcml2ZXIgaXMgcmVtb3ZlZAorICogZnJvbSBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBhdGwxY19leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYXRsMWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYXRsMWNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoYXRsMWNfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXg4ODc5Ni5jIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCmluZGV4IGE0ZWI2YzQuLjYyZDljOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYworKysgYi9kcml2ZXJzL25ldC9heDg4Nzk2LmMKQEAgLTkzLDYgKzkzLDcgQEAKIAogCXVuc2lnbmVkIGNoYXIJCSBydW5uaW5nOwogCXVuc2lnbmVkIGNoYXIJCSByZXN1bWVfb3BlbjsKKwl1bnNpZ25lZCBpbnQJCSBpcnFmbGFnczsKIAogCXUzMgkJCSByZWdfb2Zmc2V0c1sweDIwXTsKIH07CkBAIC00NzQsNyArNDc1LDggQEAKIAogCWRldl9kYmcoJmF4LT5kZXYtPmRldiwgIiVzOiBvcGVuXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGF4X2VpX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBheF9laV9pbnRlcnJ1cHQsIGF4LT5pcnFmbGFncywKKwkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTczMSwxMiArNzMzLDE5IEBACiAJLyogbG9hZCB0aGUgbWFjLWFkZHJlc3MgZnJvbSB0aGUgZGV2aWNlIGlmIHRoaXMgaXMgdGhlCiAJICogZmlyc3QgdGltZSB3ZSd2ZSBpbml0aWFsaXNlZCAqLwogCi0JaWYgKGZpcnN0X2luaXQgJiYgYXgtPnBsYXQtPmZsYWdzICYgQVhGTEdfTUFDX0ZST01ERVYpIHsKLQkJZWlfb3V0YihFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UxICsgRTgzOTBfU1RPUCwKLQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJaWYgKGZpcnN0X2luaXQpIHsKKwkJaWYgKGF4LT5wbGF0LT5mbGFncyAmIEFYRkxHX01BQ19GUk9NREVWKSB7CisJCQllaV9vdXRiKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEgKyBFODM5MF9TVE9QLAorCQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKKwkJCQlkZXYtPmRldl9hZGRyW2ldID0KKwkJCQkJZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJfQogCi0JCWZvciAoaSA9IDAgOyBpIDwgRVRIRVJfQUREUl9MRU4gOyBpKyspCi0JCQlkZXYtPmRldl9hZGRyW2ldID0gZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJaWYgKChheC0+cGxhdC0+ZmxhZ3MgJiBBWEZMR19NQUNfRlJPTVBMQVRGT1JNKSAmJgorCQkgICAgIGF4LT5wbGF0LT5tYWNfYWRkcikKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBheC0+cGxhdC0+bWFjX2FkZHIsCisJCQkJRVRIRVJfQUREUl9MRU4pOwogCX0KIAogCWF4X3Jlc2V0XzgzOTAoZGV2KTsKQEAgLTgyOSw3ICs4MzgsNyBAQAogCXN0cnVjdCBheF9kZXZpY2UgICpheDsKIAlzdHJ1Y3QgcmVzb3VyY2UgICAqcmVzOwogCXNpemVfdCBzaXplOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBheF9fYWxsb2NfZWlfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgYXhfZGV2aWNlKSk7CiAJaWYgKGRldiA9PSBOVUxMKQpAQCAtODUwLDEyICs4NTksMTQgQEAKIAogCS8qIGZpbmQgdGhlIHBsYXRmb3JtIHJlc291cmNlcyAqLwogCi0JcmV0ICA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHJldCA8IDApIHsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJUlEgc3BlY2lmaWVkXG4iKTsKIAkJZ290byBleGl0X21lbTsKIAl9Ci0JZGV2LT5pcnEgPSByZXQ7CisKKwlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CisJYXgtPmlycWZsYWdzID0gcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggMmE1MWM3NS4uNWM4NDU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTEyNjQsOCArMTI2NCwxNCBAQAogc3RhdGljIHZvaWQgYjQ0X2NoaXBfcmVzZXQoc3RydWN0IGI0NCAqYnAsIGludCByZXNldF9raW5kKQogewogCXN0cnVjdCBzc2JfZGV2aWNlICpzZGV2ID0gYnAtPnNkZXY7CisJYm9vbCB3YXNfZW5hYmxlZDsKIAotCWlmIChzc2JfZGV2aWNlX2lzX2VuYWJsZWQoYnAtPnNkZXYpKSB7CisJd2FzX2VuYWJsZWQgPSBzc2JfZGV2aWNlX2lzX2VuYWJsZWQoYnAtPnNkZXYpOworCisJc3NiX2RldmljZV9lbmFibGUoYnAtPnNkZXYsIDApOworCXNzYl9wY2ljb3JlX2Rldl9pcnF2ZWNzX2VuYWJsZSgmc2Rldi0+YnVzLT5wY2ljb3JlLCBzZGV2KTsKKworCWlmICh3YXNfZW5hYmxlZCkgewogCQlidzMyKGJwLCBCNDRfUkNWX0xBWlksIDApOwogCQlidzMyKGJwLCBCNDRfRU5FVF9DVFJMLCBFTkVUX0NUUkxfRElTQUJMRSk7CiAJCWI0NF93YWl0X2JpdChicCwgQjQ0X0VORVRfQ1RSTCwgRU5FVF9DVFJMX0RJU0FCTEUsIDIwMCwgMSk7CkBAIC0xMjc3LDEwICsxMjgzLDggQEAKIAkJfQogCQlidzMyKGJwLCBCNDRfRE1BUlhfQ1RSTCwgMCk7CiAJCWJwLT5yeF9wcm9kID0gYnAtPnJ4X2NvbnMgPSAwOwotCX0gZWxzZQotCQlzc2JfcGNpY29yZV9kZXZfaXJxdmVjc19lbmFibGUoJnNkZXYtPmJ1cy0+cGNpY29yZSwgc2Rldik7CisJfQogCi0Jc3NiX2RldmljZV9lbmFibGUoYnAtPnNkZXYsIDApOwogCWI0NF9jbGVhcl9zdGF0cyhicCk7CiAKIAkvKgpAQCAtMjIzNiw2ICsyMjQwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3NiX2dldF9kcnZkYXRhKHNkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlzc2JfZGV2aWNlX2Rpc2FibGUoc2RldiwgMCk7CiAJc3NiX2J1c19tYXlfcG93ZXJkb3duKHNkZXYtPmJ1cyk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlzc2JfcGNpaG9zdF9zZXRfcG93ZXJfc3RhdGUoc2RldiwgUENJX0QzaG90KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OTM0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnCkBAIC0wLDAgKzEsNyBAQAorY29uZmlnIEJFMk5FVAorCXRyaXN0YXRlICJTZXJ2ZXJFbmdpbmVzJyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiIKKwlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCisJc2VsZWN0IElORVRfTFJPCisJaGVscAorCVRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIE5JQyBmdW5jdGlvbmFsaXR5IGZvciBTZXJ2ZXJFbmdpbmVzJworCTEwR2JwcyBuZXR3b3JrIGFkYXB0ZXIgLSBCbGFkZUVuZ2luZSAyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9iZW5ldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjBjZDgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBuZXR3b3JrIGRyaXZlciBmb3IgU2VydmVyRW5naW5lJ3MgQmxhZGVFbmdpbmUuCisjCisKK29iai0kKENPTkZJR19CRTJORVQpICs9IGJlMm5ldC5vCisKK2JlMm5ldC15IDo9ICBiZV9tYWluLm8gYmVfY21kcy5vIGJlX2V0aHRvb2wubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5ZGRkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworI2lmbmRlZiBCRV9ICisjZGVmaW5lIEJFX0gKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CisKKyNpbmNsdWRlICJiZV9ody5oIgorCisjZGVmaW5lIERSVl9WRVIJCQkiMi4wLjM0OCIKKyNkZWZpbmUgRFJWX05BTUUJCSJiZTJuZXQiCisjZGVmaW5lIEJFX05BTUUJCQkiU2VydmVyRW5naW5lcyBCbGFkZUVuZ2luZTIgMTBHYnBzIE5JQyIKKyNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIkRyaXZlciIKKworLyogTnVtYmVyIG9mIGJ5dGVzIG9mIGFuIFJYIGZyYW1lIHRoYXQgYXJlIGNvcGllZCB0byBza2ItPmRhdGEgKi8KKyNkZWZpbmUgQkVfSERSX0xFTiAJCTY0CisjZGVmaW5lIEJFX01BWF9KVU1CT19GUkFNRV9TSVpFCTkwMTgKKyNkZWZpbmUgQkVfTUlOX01UVQkJMjU2CisKKyNkZWZpbmUgQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRAk2NAorI2RlZmluZSBCRV9NQVhfRVFECQk5NgorI2RlZmluZQlCRV9NQVhfVFhfRlJBR19DT1VOVAkzMAorCisjZGVmaW5lIEVWTlRfUV9MRU4JCTEwMjQKKyNkZWZpbmUgVFhfUV9MRU4JCTIwNDgKKyNkZWZpbmUgVFhfQ1FfTEVOCQkxMDI0CisjZGVmaW5lIFJYX1FfTEVOCQkxMDI0CS8qIERvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIHZhbHVlICovCisjZGVmaW5lIFJYX0NRX0xFTgkJMTAyNAorI2RlZmluZSBNQ0NfUV9MRU4JCTY0CS8qIHRvdGFsIHNpemUgbm90IHRvIGV4Y2VlZCA4IHBhZ2VzICovCisjZGVmaW5lIE1DQ19DUV9MRU4JCTI1NgorCisjZGVmaW5lIEJFX05BUElfV0VJR0hUCQk2NAorI2RlZmluZSBNQVhfUlhfUE9TVCAJCUJFX05BUElfV0VJR0hUIC8qIEZyYWdzIHBvc3RlZCBhdCBhIHRpbWUgKi8KKyNkZWZpbmUgUlhfRlJBR1NfUkVGSUxMX1dNCShSWF9RX0xFTiAtIE1BWF9SWF9QT1NUKQorCisjZGVmaW5lIEJFX01BWF9MUk9fREVTQ1JJUFRPUlMgIDE2CisjZGVmaW5lIEJFX01BWF9GUkFHU19QRVJfRlJBTUUgIDE2CisKK3N0cnVjdCBiZV9kbWFfbWVtIHsKKwl2b2lkICp2YTsKKwlkbWFfYWRkcl90IGRtYTsKKwl1MzIgc2l6ZTsKK307CisKK3N0cnVjdCBiZV9xdWV1ZV9pbmZvIHsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBkbWFfbWVtOworCXUxNiBsZW47CisJdTE2IGVudHJ5X3NpemU7CS8qIFNpemUgb2YgYW4gZWxlbWVudCBpbiB0aGUgcXVldWUgKi8KKwl1MTYgaWQ7CisJdTE2IHRhaWwsIGhlYWQ7CisJYm9vbCBjcmVhdGVkOworCWF0b21pY190IHVzZWQ7CS8qIE51bWJlciBvZiB2YWxpZCBlbGVtZW50cyBpbiB0aGUgcXVldWUgKi8KK307CisKK3N0cnVjdCBiZV9jdHJsX2luZm8geworCXU4IF9faW9tZW0gKmNzcjsKKwl1OCBfX2lvbWVtICpkYjsJCS8qIERvb3IgQmVsbCAqLworCXU4IF9faW9tZW0gKnBjaWNmZzsJLyogUENJIGNvbmZpZyBzcGFjZSAqLworCWludCBwY2lfZnVuYzsKKworCS8qIE1ib3ggdXNlZCBmb3IgY21kIHJlcXVlc3QvcmVzcG9uc2UgKi8KKwlzcGlubG9ja190IGNtZF9sb2NrOwkvKiBGb3Igc2VyaWFsaXppbmcgY21kcyB0byBCRSBjYXJkICovCisJc3RydWN0IGJlX2RtYV9tZW0gbWJveF9tZW07CisJLyogTWJveCBtZW0gaXMgYWRqdXN0ZWQgdG8gYWxpZ24gdG8gMTYgYnl0ZXMuIFRoZSBhbGxvY2F0ZWQgYWRkcgorCSAqIGlzIHN0b3JlZCBmb3IgZnJlZWluZyBwdXJwb3NlICovCisJc3RydWN0IGJlX2RtYV9tZW0gbWJveF9tZW1fYWxsb2NlZDsKK307CisKKyNpbmNsdWRlICJiZV9jbWRzLmgiCisKK3N0cnVjdCBiZV9kcnZyX3N0YXRzIHsKKwl1MzIgYmVfdHhfcmVxczsJCS8qIG51bWJlciBvZiBUWCByZXF1ZXN0cyBpbml0aWF0ZWQgKi8KKwl1MzIgYmVfdHhfc3RvcHM7CS8qIG51bWJlciBvZiB0aW1lcyBUWCBRIHdhcyBzdG9wcGVkICovCisJdTMyIGJlX2Z3ZF9yZXFzOwkvKiBudW1iZXIgb2Ygc2VuZCByZXFzIHRocm91Z2ggZm9yd2FyZGluZyBpL2YgKi8KKwl1MzIgYmVfdHhfd3JiczsJCS8qIG51bWJlciBvZiB0eCBXUkJzIHVzZWQgKi8KKwl1MzIgYmVfdHhfZXZlbnRzOwkvKiBudW1iZXIgb2YgdHggY29tcGxldGlvbiBldmVudHMgICovCisJdTMyIGJlX3R4X2NvbXBsOwkvKiBudW1iZXIgb2YgdHggY29tcGxldGlvbiBlbnRyaWVzIHByb2Nlc3NlZCAqLworCXVsb25nIGJlX3R4X2ppZmZpZXM7CisJdTY0IGJlX3R4X2J5dGVzOworCXU2NCBiZV90eF9ieXRlc19wcmV2OworCXUzMiBiZV90eF9yYXRlOworCisJdTMyIGNhY2hlX2JhcnJpZXJbMTZdOworCisJdTMyIGJlX2V0aHJ4X3Bvc3RfZmFpbDsvKiBudW1iZXIgb2YgZXRocnggYnVmZmVyIGFsbG9jIGZhaWx1cmVzICovCisJdTMyIGJlX3BvbGxzOwkJLyogbnVtYmVyIG9mIHRpbWVzIE5BUEkgY2FsbGVkIHBvbGwgZnVuY3Rpb24gKi8KKwl1MzIgYmVfcnhfZXZlbnRzOwkvKiBudW1iZXIgb2YgdWNhc3QgcnggY29tcGxldGlvbiBldmVudHMgICovCisJdTMyIGJlX3J4X2NvbXBsOwkvKiBudW1iZXIgb2YgcnggY29tcGxldGlvbiBlbnRyaWVzIHByb2Nlc3NlZCAqLworCXUzMiBiZV9scm9faGdyYW1fZGF0YVs4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBkYXRhIHBhY2tldHMgKi8KKwl1MzIgYmVfbHJvX2hncmFtX2Fja1s4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBBQ0tzICovCisJdWxvbmcgYmVfcnhfamlmZmllczsKKwl1NjQgYmVfcnhfYnl0ZXM7CisJdTY0IGJlX3J4X2J5dGVzX3ByZXY7CisJdTMyIGJlX3J4X3JhdGU7CisJLyogbnVtYmVyIG9mIG5vbiBldGhlciB0eXBlIElJIGZyYW1lcyBkcm9wcGVkIHdoZXJlCisJICogZnJhbWUgbGVuID4gbGVuZ3RoIGZpZWxkIG9mIE1hYyBIZHIgKi8KKwl1MzIgYmVfODAyXzNfZHJvcHBlZF9mcmFtZXM7CisJLyogbnVtYmVyIG9mIG5vbiBldGhlciB0eXBlIElJIGZyYW1lcyBtYWxmb3JtZWQgd2hlcmUKKwkgKiBpbiBmcmFtZSBsZW4gPCBsZW5ndGggZmllbGQgb2YgTWFjIEhkciAqLworCXUzMiBiZV84MDJfM19tYWxmb3JtZWRfZnJhbWVzOworCXUzMiBiZV9yeGNwX2VycjsJLyogTnVtIHJ4IGNvbXBsZXRpb24gZW50cmllcyB3LyBlcnIgc2V0LiAqLworCXVsb25nIHJ4X2Zwc19qaWZmaWVzOwkvKiBqaWZmaWVzIGF0IGxhc3QgRlBTIGNhbGMgKi8KKwl1MzIgYmVfcnhfZnJhZ3M7CisJdTMyIGJlX3ByZXZfcnhfZnJhZ3M7CisJdTMyIGJlX3J4X2ZwczsJCS8qIFJ4IGZyYWdzIHBlciBzZWNvbmQgKi8KK307CisKK3N0cnVjdCBiZV9zdGF0c19vYmogeworCXN0cnVjdCBiZV9kcnZyX3N0YXRzIGRydnJfc3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOworCXN0cnVjdCBiZV9kbWFfbWVtIGNtZDsKK307CisKK3N0cnVjdCBiZV9lcV9vYmogeworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CisJY2hhciBkZXNjWzMyXTsKKworCS8qIEFkYXB0aXZlIGludGVycnVwdCBjb2FsZXNjaW5nIChBSUMpIGluZm8gKi8KKwlib29sIGVuYWJsZV9haWM7CisJdTE2IG1pbl9lcWQ7CQkvKiBpbiB1c2VjcyAqLworCXUxNiBtYXhfZXFkOwkJLyogaW4gdXNlY3MgKi8KKwl1MTYgY3VyX2VxZDsJCS8qIGluIHVzZWNzICovCisKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKK307CisKK3N0cnVjdCBiZV90eF9vYmogeworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gY3E7CisJLyogUmVtZW1iZXIgdGhlIHNrYnMgdGhhdCB3ZXJlIHRyYW5zbWl0dGVkICovCisJc3RydWN0IHNrX2J1ZmYgKnNlbnRfc2tiX2xpc3RbVFhfUV9MRU5dOworfTsKKworLyogU3RydWN0IHRvIHJlbWVtYmVyIHRoZSBwYWdlcyBwb3N0ZWQgZm9yIHJ4IGZyYWdzICovCitzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlkbWFfYWRkcl90IGJ1czsKKwl1MTYgcGFnZV9vZmZzZXQ7CisJYm9vbCBsYXN0X3BhZ2VfdXNlcjsKK307CisKK3N0cnVjdCBiZV9yeF9vYmogeworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gY3E7CisJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyBwYWdlX2luZm9fdGJsW1JYX1FfTEVOXTsKKwlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKKwlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW0JFX01BWF9MUk9fREVTQ1JJUFRPUlNdOworfTsKKworI2RlZmluZSBCRV9OVU1fTVNJWF9WRUNUT1JTCQkyCS8qIDEgZWFjaCBmb3IgVHggYW5kIFJ4ICovCitzdHJ1Y3QgYmVfYWRhcHRlciB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKworCS8qIE1ib3gsIHBjaSBjb25maWcsIGNzciBhZGRyZXNzIGluZm9ybWF0aW9uICovCisJc3RydWN0IGJlX2N0cmxfaW5mbyBjdHJsOworCisJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW0JFX05VTV9NU0lYX1ZFQ1RPUlNdOworCWJvb2wgbXNpeF9lbmFibGVkOworCWJvb2wgaXNyX3JlZ2lzdGVyZWQ7CisKKwkvKiBUWCBSaW5ncyAqLworCXN0cnVjdCBiZV9lcV9vYmogdHhfZXE7CisJc3RydWN0IGJlX3R4X29iaiB0eF9vYmo7CisKKwl1MzIgY2FjaGVfbGluZV9icmVha1s4XTsKKworCS8qIFJ4IHJpbmdzICovCisJc3RydWN0IGJlX2VxX29iaiByeF9lcTsKKwlzdHJ1Y3QgYmVfcnhfb2JqIHJ4X29iajsKKwl1MzIgYmlnX3BhZ2Vfc2l6ZTsJLyogQ29tcG91bmRlZCBwYWdlIHNpemUgc2hhcmVkIGJ5IHJ4IHdyYnMgKi8KKwlib29sIHJ4X3Bvc3Rfc3RhcnZlZDsJLyogWmVybyByeCBmcmFncyBoYXZlIGJlZW4gcG9zdGVkIHRvIEJFICovCisKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbl9ncnA7CisJdTE2IG51bV92bGFuczsKKwl1OCB2bGFuX3RhZ1tWTEFOX0dST1VQX0FSUkFZX0xFTl07CisKKwlzdHJ1Y3QgYmVfc3RhdHNfb2JqIHN0YXRzOworCS8qIFdvcmsgcXVldWUgdXNlZCB0byBwZXJmb3JtIHBlcmlvZGljIHRhc2tzIGxpa2UgZ2V0dGluZyBzdGF0aXN0aWNzICovCisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCisJLyogRXRodG9vbCBrbm9icyBhbmQgaW5mbyAqLworCWJvb2wgcnhfY3N1bTsgCQkvKiBCRSBjYXJkIG11c3QgcGVyZm9ybSByeC1jaGVja3N1bW1pbmcgKi8KKwl1MzIgbWF4X3J4X2NvYWw7CisJY2hhciBmd192ZXJbRldfVkVSX0xFTl07CisJdTMyIGlmX2hhbmRsZTsJCS8qIFVzZWQgdG8gY29uZmlndXJlIGZpbHRlcmluZyAqLworCXUzMiBwbWFjX2lkOwkJLyogTUFDIGFkZHIgaGFuZGxlIHVzZWQgYnkgQkUgY2FyZCAqLworCisJc3RydWN0IGJlX2xpbmtfaW5mbyBsaW5rOworCXUzMiBwb3J0X251bTsKK307CisKK2V4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHM7CisKKyNkZWZpbmUgZHJ2cl9zdGF0cyhhZGFwdGVyKQkJKCZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzKQorCisjZGVmaW5lIEJFX1NFVF9ORVRERVZfT1BTKG5ldGRldiwgb3BzKQkobmV0ZGV2LT5uZXRkZXZfb3BzID0gb3BzKQorCitzdGF0aWMgaW5saW5lIHUzMiBNT0RVTE8odTE2IHZhbCwgdTE2IGxpbWl0KQoreworCUJVR19PTihsaW1pdCAmIChsaW1pdCAtIDEpKTsKKwlyZXR1cm4gdmFsICYgKGxpbWl0IC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmRleF9hZHYodTE2ICppbmRleCwgdTE2IHZhbCwgdTE2IGxpbWl0KQoreworCSppbmRleCA9IE1PRFVMTygoKmluZGV4ICsgdmFsKSwgbGltaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5kZXhfaW5jKHUxNiAqaW5kZXgsIHUxNiBsaW1pdCkKK3sKKwkqaW5kZXggPSBNT0RVTE8oKCppbmRleCArIDEpLCBsaW1pdCk7Cit9CisKKyNkZWZpbmUgUEFHRV9TSElGVF80SwkJMTIKKyNkZWZpbmUgUEFHRV9TSVpFXzRLCQkoMSA8PCBQQUdFX1NISUZUXzRLKQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSBkYXRhIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyICovCisjZGVmaW5lIFBBR0VTXzRLX1NQQU5ORUQoX2FkZHJlc3MsIHNpemUpIAkJCQlcCisJCSgodTMyKSgoKChzaXplX3QpKF9hZGRyZXNzKSAmIChQQUdFX1NJWkVfNEsgLSAxKSkgKyAJXAorCQkJKHNpemUpICsgKFBBR0VfU0laRV80SyAtIDEpKSA+PiBQQUdFX1NISUZUXzRLKSkKKworLyogQnl0ZSBvZmZzZXQgaW50byB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGFkZHJlc3MgKi8KKyNkZWZpbmUgT0ZGU0VUX0lOX1BBR0UoYWRkcikJCQkJCQlcCisJCSAoKHNpemVfdCkoYWRkcikgJiAoUEFHRV9TSVpFXzRLLTEpKQorCisvKiBSZXR1cm5zIGJpdCBvZmZzZXQgd2l0aGluIGEgRFdPUkQgb2YgYSBiaXRmaWVsZCAqLworI2RlZmluZSBBTUFQX0JJVF9PRkZTRVQoX3N0cnVjdCwgZmllbGQpICAJCQkJXAorCQkoKChzaXplX3QpJigoKF9zdHJ1Y3QgKikwKS0+ZmllbGQpKSUzMikKKworLyogUmV0dXJucyB0aGUgYml0IG1hc2sgb2YgdGhlIGZpZWxkIHRoYXQgaXMgTk9UIHNoaWZ0ZWQgaW50byBsb2NhdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGFtYXBfbWFzayh1MzIgYml0c2l6ZSkKK3sKKwlyZXR1cm4gKGJpdHNpemUgPT0gMzIgPyAweEZGRkZGRkZGIDogKDEgPDwgYml0c2l6ZSkgLSAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithbWFwX3NldCh2b2lkICpwdHIsIHUzMiBkd19vZmZzZXQsIHUzMiBtYXNrLCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJdTMyICpkdyA9ICh1MzIgKikgcHRyICsgZHdfb2Zmc2V0OworCSpkdyAmPSB+KG1hc2sgPDwgb2Zmc2V0KTsKKwkqZHcgfD0gKG1hc2sgJiB2YWx1ZSkgPDwgb2Zmc2V0OworfQorCisjZGVmaW5lIEFNQVBfU0VUX0JJVFMoX3N0cnVjdCwgZmllbGQsIHB0ciwgdmFsKQkJCQlcCisJCWFtYXBfc2V0KHB0ciwJCQkJCQlcCisJCQlvZmZzZXRvZihfc3RydWN0LCBmaWVsZCkvMzIsCQkJXAorCQkJYW1hcF9tYXNrKHNpemVvZigoKF9zdHJ1Y3QgKikwKS0+ZmllbGQpKSwJXAorCQkJQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3QsIGZpZWxkKSwJCVwKKwkJCXZhbCkKKworc3RhdGljIGlubGluZSB1MzIgYW1hcF9nZXQodm9pZCAqcHRyLCB1MzIgZHdfb2Zmc2V0LCB1MzIgbWFzaywgdTMyIG9mZnNldCkKK3sKKwl1MzIgKmR3ID0gKHUzMiAqKSBwdHI7CisJcmV0dXJuIG1hc2sgJiAoKihkdyArIGR3X29mZnNldCkgPj4gb2Zmc2V0KTsKK30KKworI2RlZmluZSBBTUFQX0dFVF9CSVRTKF9zdHJ1Y3QsIGZpZWxkLCBwdHIpCQkJCVwKKwkJYW1hcF9nZXQocHRyLAkJCQkJCVwKKwkJCW9mZnNldG9mKF9zdHJ1Y3QsIGZpZWxkKS8zMiwJCQlcCisJCQlhbWFwX21hc2soc2l6ZW9mKCgoX3N0cnVjdCAqKTApLT5maWVsZCkpLAlcCisJCQlBTUFQX0JJVF9PRkZTRVQoX3N0cnVjdCwgZmllbGQpKQorCisjZGVmaW5lIGJlX2R3c19jcHVfdG9fbGUod3JiLCBsZW4pCXN3YXBfZHdzKHdyYiwgbGVuKQorI2RlZmluZSBiZV9kd3NfbGVfdG9fY3B1KHdyYiwgbGVuKQlzd2FwX2R3cyh3cmIsIGxlbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2R3cyh2b2lkICp3cmIsIGludCBsZW4pCit7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTMyICpkdyA9IHdyYjsKKwlCVUdfT04obGVuICUgNCk7CisJZG8geworCQkqZHcgPSBjcHVfdG9fbGUzMigqZHcpOworCQlkdysrOworCQlsZW4gLT0gNDsKKwl9IHdoaWxlIChsZW4pOworI2VuZGlmCQkJCS8qIF9fQklHX0VORElBTiAqLworfQorCitzdGF0aWMgaW5saW5lIHU4IGlzX3RjcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1OCB2YWwgPSAwOworCisJaWYgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDQpCisJCXZhbCA9IChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApOworCWVsc2UgaWYgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDYpCisJCXZhbCA9IChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IE5FWFRIRFJfVENQKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggaXNfdWRwX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXU4IHZhbCA9IDA7CisKKwlpZiAoaXBfaGRyKHNrYiktPnZlcnNpb24gPT0gNCkKKwkJdmFsID0gKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCk7CisJZWxzZSBpZiAoaXBfaGRyKHNrYiktPnZlcnNpb24gPT0gNikKKwkJdmFsID0gKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gTkVYVEhEUl9VRFApOworCisJcmV0dXJuIHZhbDsKK30KKworI2VuZGlmCQkJCS8qIEJFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ0YWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC0wLDAgKzEsODYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpbmNsdWRlICJiZS5oIgorCitzdGF0aWMgaW50IGJlX21ib3hfZGJfcmVhZHlfd2FpdCh2b2lkIF9faW9tZW0gKmRiKQoreworCWludCBjbnQgPSAwLCB3YWl0ID0gNTsKKwl1MzIgcmVhZHk7CisKKwlkbyB7CisJCXJlYWR5ID0gaW9yZWFkMzIoZGIpICYgTVBVX01BSUxCT1hfREJfUkRZX01BU0s7CisJCWlmIChyZWFkeSkKKwkJCWJyZWFrOworCisJCWlmIChjbnQgPiAyMDAwMDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKKwkJCQkiOiBtYm94X2RiIHBvbGwgdGltZWQgb3V0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChjbnQgPiA1MCkKKwkJCXdhaXQgPSAyMDA7CisJCWNudCArPSB3YWl0OworCQl1ZGVsYXkod2FpdCk7CisJfSB3aGlsZSAodHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluc2VydCB0aGUgbWFpbGJveCBhZGRyZXNzIGludG8gdGhlIGRvb3JiZWxsIGluIHR3byBzdGVwcworICovCitzdGF0aWMgaW50IGJlX21ib3hfZGJfcmluZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoreworCWludCBzdGF0dXM7CisJdTE2IGNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXM7CisJdTMyIHZhbCA9IDA7CisJdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSA9ICZjdHJsLT5tYm94X21lbTsKKwlzdHJ1Y3QgYmVfbWNjX21haWxib3ggKm1ib3ggPSBtYm94X21lbS0+dmE7CisJc3RydWN0IGJlX21jY19jcV9lbnRyeSAqY3FlID0gJm1ib3gtPmNxZTsKKworCW1lbXNldChjcWUsIDAsIHNpemVvZigqY3FlKSk7CisKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCXZhbCB8PSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLOworCS8qIGF0IGJpdHMgMiAtIDMxIHBsYWNlIG1ib3ggZG1hIGFkZHIgbXNiIGJpdHMgMzQgLSA2MyAqLworCXZhbCB8PSAodXBwZXJfMzJfYml0cyhtYm94X21lbS0+ZG1hKSA+PiAyKSA8PCAyOworCWlvd3JpdGUzMih2YWwsIGRiKTsKKworCS8qIHdhaXQgZm9yIHJlYWR5IHRvIGJlIHNldCAqLworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChkYik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJdmFsID0gMDsKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCXZhbCAmPSB+TVBVX01BSUxCT1hfREJfSElfTUFTSzsKKwkvKiBhdCBiaXRzIDIgLSAzMSBwbGFjZSBtYm94IGRtYSBhZGRyIGxzYiBiaXRzIDQgLSAzMyAqLworCXZhbCB8PSAodTMyKShtYm94X21lbS0+ZG1hID4+IDQpIDw8IDI7CisJaW93cml0ZTMyKHZhbCwgZGIpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGRiKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBjb21wbCBlbnRyeSBoYXMgYmVlbiBtYWRlIG5vdyAqLworCWJlX2R3c19sZV90b19jcHUoY3FlLCBzaXplb2YoKmNxZSkpOworCWlmICghKGNxZS0+ZmxhZ3MgJiBDUUVfRkxBR1NfVkFMSURfTUFTSykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBFUlJPUiBpbnZhbGlkIG1ib3ggY29tcGxcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJY29tcGxfc3RhdHVzID0gKGNxZS0+c3RhdHVzID4+IENRRV9TVEFUVVNfQ09NUExfU0hJRlQpICYKKwkJCQlDUUVfU1RBVFVTX0NPTVBMX01BU0s7CisJaWYgKGNvbXBsX3N0YXR1cyAhPSBNQ0NfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZXh0ZF9zdGF0dXMgPSAoY3FlLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19FWFREX1NISUZUKSAmCisJCQkJQ1FFX1NUQVRVU19FWFREX01BU0s7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKKwkJCSI6IEVSUk9SIGluIGNtZCBjb21wbC4gc3RhdHVzKGNvbXBsL2V4dGQpPSVkLyVkXG4iLAorCQkJY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1cyk7CisJfQorCisJcmV0dXJuIGNvbXBsX3N0YXR1czsKK30KKworc3RhdGljIGludCBiZV9QT1NUX3N0YWdlX2dldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgKnN0YWdlKQoreworCXUzMiBzZW0gPSBpb3JlYWQzMihjdHJsLT5jc3IgKyBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCk7CisKKwkqc3RhZ2UgPSBzZW0gJiBFUF9TRU1BUEhPUkVfUE9TVF9TVEFHRV9NQVNLOworCWlmICgoc2VtID4+IEVQX1NFTUFQSE9SRV9QT1NUX0VSUl9TSElGVCkgJiBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfTUFTSykKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVfUE9TVF9zdGFnZV9wb2xsKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBwb2xsX3N0YWdlKQoreworCXUxNiBzdGFnZSwgY250LCBlcnJvcjsKKwlmb3IgKGNudCA9IDA7IGNudCA8IDUwMDA7IGNudCsrKSB7CisJCWVycm9yID0gYmVfUE9TVF9zdGFnZV9nZXQoY3RybCwgJnN0YWdlKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChzdGFnZSA9PSBwb2xsX3N0YWdlKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMDAwKTsKKwl9CisJaWYgKHN0YWdlICE9IHBvbGxfc3RhZ2UpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgYmVfY21kX1BPU1Qoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKwl1MTYgc3RhZ2UsIGVycm9yOworCisJZXJyb3IgPSBiZV9QT1NUX3N0YWdlX2dldChjdHJsLCAmc3RhZ2UpOworCWlmIChlcnJvcikKKwkJZ290byBlcnI7CisKKwlpZiAoc3RhZ2UgPT0gUE9TVF9TVEFHRV9BUk1GV19SRFkpCisJCXJldHVybiAwOworCisJaWYgKHN0YWdlICE9IFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkpCisJCWdvdG8gZXJyOworCisJLyogT24gYXdhaXRpbmcgaG9zdCByZHksIHJlc2V0IGFuZCBhZ2FpbiBwb2xsIG9uIGF3YWl0aW5nIGhvc3QgcmR5ICovCisJaW93cml0ZTMyKFBPU1RfU1RBR0VfQkVfUkVTRVQsIGN0cmwtPmNzciArIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUKTsKKwllcnJvciA9IGJlX1BPU1Rfc3RhZ2VfcG9sbChjdHJsLCBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyOworCisJLyogTm93IGtpY2tvZmYgUE9TVCBhbmQgcG9sbCBvbiBhcm1mdyByZWFkeSAqLworCWlvd3JpdGUzMihQT1NUX1NUQUdFX0hPU1RfUkRZLCBjdHJsLT5jc3IgKyBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCk7CisJZXJyb3IgPSBiZV9QT1NUX3N0YWdlX3BvbGwoY3RybCwgUE9TVF9TVEFHRV9BUk1GV19SRFkpOworCWlmIChlcnJvcikKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IEVSUk9SLCBzdGFnZT0lZFxuIiwgc3RhZ2UpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICplbWJlZGRlZF9wYXlsb2FkKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIpCit7CisJcmV0dXJuIHdyYi0+cGF5bG9hZC5lbWJlZGRlZF9wYXlsb2FkOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZV9zZ2UgKm5vbmVtYmVkZGVkX3NnbChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQoreworCXJldHVybiAmd3JiLT5wYXlsb2FkLnNnbFswXTsKK30KKworLyogRG9uJ3QgdG91Y2ggdGhlIGhkciBhZnRlciBpdCdzIHByZXBhcmVkICovCitzdGF0aWMgdm9pZCBiZV93cmJfaGRyX3ByZXBhcmUoc3RydWN0IGJlX21jY193cmIgKndyYiwgaW50IHBheWxvYWRfbGVuLAorCQkJCWJvb2wgZW1iZWRkZWQsIHU4IHNnZV9jbnQpCit7CisJaWYgKGVtYmVkZGVkKQorCQl3cmItPmVtYmVkZGVkIHw9IE1DQ19XUkJfRU1CRURERURfTUFTSzsKKwllbHNlCisJCXdyYi0+ZW1iZWRkZWQgfD0gKHNnZV9jbnQgJiBNQ0NfV1JCX1NHRV9DTlRfTUFTSykgPDwKKwkJCQlNQ0NfV1JCX1NHRV9DTlRfU0hJRlQ7CisJd3JiLT5wYXlsb2FkX2xlbmd0aCA9IHBheWxvYWRfbGVuOworCWJlX2R3c19jcHVfdG9fbGUod3JiLCAyMCk7Cit9CisKKy8qIERvbid0IHRvdWNoIHRoZSBoZHIgYWZ0ZXIgaXQncyBwcmVwYXJlZCAqLworc3RhdGljIHZvaWQgYmVfY21kX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9jbWRfcmVxX2hkciAqcmVxX2hkciwKKwkJCQl1OCBzdWJzeXN0ZW0sIHU4IG9wY29kZSwgaW50IGNtZF9sZW4pCit7CisJcmVxX2hkci0+b3Bjb2RlID0gb3Bjb2RlOworCXJlcV9oZHItPnN1YnN5c3RlbSA9IHN1YnN5c3RlbTsKKwlyZXFfaGRyLT5yZXF1ZXN0X2xlbmd0aCA9IGNwdV90b19sZTMyKGNtZF9sZW4gLSBzaXplb2YoKnJlcV9oZHIpKTsKK30KKworc3RhdGljIHZvaWQgYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShzdHJ1Y3QgcGh5c19hZGRyICpwYWdlcywgdTMyIG1heF9wYWdlcywKKwkJCXN0cnVjdCBiZV9kbWFfbWVtICptZW0pCit7CisJaW50IGksIGJ1Zl9wYWdlcyA9IG1pbihQQUdFU180S19TUEFOTkVEKG1lbS0+dmEsIG1lbS0+c2l6ZSksIG1heF9wYWdlcyk7CisJdTY0IGRtYSA9ICh1NjQpbWVtLT5kbWE7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX3BhZ2VzOyBpKyspIHsKKwkJcGFnZXNbaV0ubG8gPSBjcHVfdG9fbGUzMihkbWEgJiAweEZGRkZGRkZGKTsKKwkJcGFnZXNbaV0uaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGRtYSkpOworCQlkbWEgKz0gUEFHRV9TSVpFXzRLOworCX0KK30KKworLyogQ29udmVydHMgaW50ZXJydXB0IGRlbGF5IGluIG1pY3Jvc2Vjb25kcyB0byBtdWx0aXBsaWVyIHZhbHVlICovCitzdGF0aWMgdTMyIGVxX2RlbGF5X3RvX211bHQodTMyIHVzZWNfZGVsYXkpCit7CisjZGVmaW5lIE1BWF9JTlRSX1JBVEUJCQk2NTEwNDIKKwljb25zdCB1MzIgcm91bmQgPSAxMDsKKwl1MzIgbXVsdGlwbGllcjsKKworCWlmICh1c2VjX2RlbGF5ID09IDApCisJCW11bHRpcGxpZXIgPSAwOworCWVsc2UgeworCQl1MzIgaW50ZXJydXB0X3JhdGUgPSAxMDAwMDAwIC8gdXNlY19kZWxheTsKKwkJLyogTWF4IGRlbGF5LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb3dlc3QgaW50ZXJydXB0IHJhdGUgKi8KKwkJaWYgKGludGVycnVwdF9yYXRlID09IDApCisJCQltdWx0aXBsaWVyID0gMTAyMzsKKwkJZWxzZSB7CisJCQltdWx0aXBsaWVyID0gKE1BWF9JTlRSX1JBVEUgLSBpbnRlcnJ1cHRfcmF0ZSkgKiByb3VuZDsKKwkJCW11bHRpcGxpZXIgLz0gaW50ZXJydXB0X3JhdGU7CisJCQkvKiBSb3VuZCB0aGUgbXVsdGlwbGllciB0byB0aGUgY2xvc2VzdCB2YWx1ZS4qLworCQkJbXVsdGlwbGllciA9IChtdWx0aXBsaWVyICsgcm91bmQvMikgLyByb3VuZDsKKwkJCW11bHRpcGxpZXIgPSBtaW4obXVsdGlwbGllciwgKHUzMikxMDIzKTsKKwkJfQorCX0KKwlyZXR1cm4gbXVsdGlwbGllcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiX2Zyb21fbWJveChzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0pCit7CisJcmV0dXJuICYoKHN0cnVjdCBiZV9tY2NfbWFpbGJveCAqKShtYm94X21lbS0+dmEpKS0+d3JiOworfQorCitpbnQgYmVfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2VxX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9jbWRfcmVzcF9lcV9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmVxLT5kbWFfbWVtOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX0VRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gIGNwdV90b19sZTE2KFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSkpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBmdW5jLCByZXEtPmNvbnRleHQsCisJCQljdHJsLT5wY2lfZnVuYyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCB2YWxpZCwgcmVxLT5jb250ZXh0LCAxKTsKKwkvKiA0Ynl0ZSBlcWUqLworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgc2l6ZSwgcmVxLT5jb250ZXh0LCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGNvdW50LCByZXEtPmNvbnRleHQsCisJCQlfX2lsb2cyX3UzMihlcS0+bGVuLzI1NikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgZGVsYXltdWx0LCByZXEtPmNvbnRleHQsCisJCQllcV9kZWxheV90b19tdWx0KGVxX2RlbGF5KSk7CisJYmVfZHdzX2NwdV90b19sZShyZXEtPmNvbnRleHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWVxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmVxX2lkKTsKKwkJZXEtPmNyZWF0ZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfbWFjX2FkZHJfcXVlcnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggKm1hY19hZGRyLAorCQkJdTggdHlwZSwgYm9vbCBwZXJtYW5lbnQsIHUzMiBpZl9oYW5kbGUpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9tYWNfcXVlcnkgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfbWFjX3F1ZXJ5ICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX05UV0tfTUFDX1FVRVJZLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT50eXBlID0gdHlwZTsKKwlpZiAocGVybWFuZW50KSB7CisJCXJlcS0+cGVybWFuZW50ID0gMTsKKwl9IGVsc2UgeworCQlyZXEtPmlmX2lkID0gY3B1X3RvX2xlMTYoKHUxNilpZl9oYW5kbGUpOworCQlyZXEtPnBlcm1hbmVudCA9IDA7CisJfQorCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKQorCQltZW1jcHkobWFjX2FkZHIsIHJlc3AtPm1hYy5hZGRyLCBFVEhfQUxFTik7CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfcG1hY19hZGQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggKm1hY19hZGRyLAorCQl1MzIgaWZfaWQsIHUzMiAqcG1hY19pZCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3BtYWNfYWRkICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fTlRXS19QTUFDX0FERCwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+aWZfaWQgPSBjcHVfdG9fbGUzMihpZl9pZCk7CisJbWVtY3B5KHJlcS0+bWFjX2FkZHJlc3MsIG1hY19hZGRyLCBFVEhfQUxFTik7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX3BtYWNfYWRkICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQkqcG1hY19pZCA9IGxlMzJfdG9fY3B1KHJlc3AtPnBtYWNfaWQpOworCX0KKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9wbWFjX2RlbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsIHUzMiBwbWFjX2lkKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfcG1hY19kZWwgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9OVFdLX1BNQUNfREVMLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5pZl9pZCA9IGNwdV90b19sZTMyKGlmX2lkKTsKKwlyZXEtPnBtYWNfaWQgPSBjcHVfdG9fbGUzMihwbWFjX2lkKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCWJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksIGludCBjb2FsZXNjZV93bSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9jbWRfcmVzcF9jcV9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmNxLT5kbWFfbWVtOworCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX0NRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gIGNwdV90b19sZTE2KFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSkpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBjb2FsZXNjd20sIGN0eHQsIGNvYWxlc2NlX3dtKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIG5vZGVsYXksIGN0eHQsIG5vX2RlbGF5KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGNvdW50LCBjdHh0LAorCQkJX19pbG9nMl91MzIoY3EtPmxlbi8yNTYpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHZhbGlkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHNvbGV2ZW50LCBjdHh0LCBzb2xfZXZ0cyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBldmVudGFibGUsIGN0eHQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXFpZCwgY3R4dCwgZXEtPmlkKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGFybWVkLCBjdHh0LCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGZ1bmMsIGN0eHQsIGN0cmwtPnBjaV9mdW5jKTsKKwliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWNxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNxX2lkKTsKKwkJY3EtPmNyZWF0ZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF90eHFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxLAorCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfZXRoX3R4X2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZ0eHEtPmRtYV9tZW07CisJdm9pZCAqY3R4dCA9ICZyZXEtPmNvbnRleHQ7CisJaW50IHN0YXR1czsKKwl1MzIgbGVuX2VuY29kZWQ7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fRVRILCBPUENPREVfRVRIX1RYX0NSRUFURSwKKwkJc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKTsKKwlyZXEtPnVscF9udW0gPSBCRV9VTFAxX05VTTsKKwlyZXEtPnR5cGUgPSBCRV9FVEhfVFhfUklOR19UWVBFX1NUQU5EQVJEOworCisJbGVuX2VuY29kZWQgPSBmbHModHhxLT5sZW4pOyAvKiBsb2cyKGxlbikgKyAxICovCisJaWYgKGxlbl9lbmNvZGVkID09IDE2KQorCQlsZW5fZW5jb2RlZCA9IDA7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF90eF9jb250ZXh0LCB0eF9yaW5nX3NpemUsIGN0eHQsIGxlbl9lbmNvZGVkKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3R4X2NvbnRleHQsIHBjaV9mdW5jX2lkLCBjdHh0LAorCQkJY3RybC0+cGNpX2Z1bmMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfdHhfY29udGV4dCwgY3R4X3ZhbGlkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3R4X2NvbnRleHQsIGNxX2lkX3NlbmQsIGN0eHQsIGNxLT5pZCk7CisKKwliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9ldGhfdHhfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQl0eHEtPmlkID0gbGUxNl90b19jcHUocmVzcC0+Y2lkKTsKKwkJdHhxLT5jcmVhdGVkID0gdHJ1ZTsKKwl9CisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfcnhxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxLCB1MTYgY3FfaWQsIHUxNiBmcmFnX3NpemUsCisJCXUxNiBtYXhfZnJhbWVfc2l6ZSwgdTMyIGlmX2lkLCB1MzIgcnNzKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfZXRoX3J4X2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZyeHEtPmRtYV9tZW07CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9FVEgsIE9QQ09ERV9FVEhfUlhfQ1JFQVRFLAorCQlzaXplb2YoKnJlcSkpOworCisJcmVxLT5jcV9pZCA9IGNwdV90b19sZTE2KGNxX2lkKTsKKwlyZXEtPmZyYWdfc2l6ZSA9IGZscyhmcmFnX3NpemUpIC0gMTsKKwlyZXEtPm51bV9wYWdlcyA9IDI7CisJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CisJcmVxLT5pbnRlcmZhY2VfaWQgPSBjcHVfdG9fbGUzMihpZl9pZCk7CisJcmVxLT5tYXhfZnJhbWVfc2l6ZSA9IGNwdV90b19sZTE2KG1heF9mcmFtZV9zaXplKTsKKwlyZXEtPnJzc19xdWV1ZSA9IGNwdV90b19sZTMyKHJzcyk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2V0aF9yeF9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJCXJ4cS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5pZCk7CisJCXJ4cS0+Y3JlYXRlZCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZW5lcmljIGRlc3Ryb3llciBmdW5jdGlvbiBmb3IgYWxsIHR5cGVzIG9mIHF1ZXVlcyAqLworaW50IGJlX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCisJCWludCBxdWV1ZV90eXBlKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfcV9kZXN0cm95ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJdTggc3Vic3lzID0gMCwgb3Bjb2RlID0gMDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwlzd2l0Y2ggKHF1ZXVlX3R5cGUpIHsKKwljYXNlIFFUWVBFX0VROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9FUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX0NROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX1RYUToKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9FVEg7CisJCW9wY29kZSA9IE9QQ09ERV9FVEhfVFhfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9SWFE6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fRVRIOworCQlvcGNvZGUgPSBPUENPREVfRVRIX1JYX0RFU1RST1k7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjpiYWQgUSB0eXBlIGluIFEgZGVzdHJveSBjbWRcbiIpOworCQlzdGF0dXMgPSAtMTsKKwkJZ290byBlcnI7CisJfQorCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIHN1YnN5cywgb3Bjb2RlLCBzaXplb2YoKnJlcSkpOworCXJlcS0+aWQgPSBjcHVfdG9fbGUxNihxLT5pZCk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CitlcnI6CisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIENyZWF0ZSBhbiByeCBmaWx0ZXJpbmcgcG9saWN5IGNvbmZpZ3VyYXRpb24gb24gYW4gaS9mICovCitpbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgZmxhZ3MsIHU4ICptYWMsCisJCWJvb2wgcG1hY19pbnZhbGlkLCB1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfaWZfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fTlRXS19JTlRFUkZBQ0VfQ1JFQVRFLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5jYXBhYmlsaXR5X2ZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOworCXJlcS0+ZW5hYmxlX2ZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOworCWlmICghcG1hY19pbnZhbGlkKQorCQltZW1jcHkocmVxLT5tYWNfYWRkciwgbWFjLCBFVEhfQUxFTik7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2lmX2NyZWF0ZSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJKmlmX2hhbmRsZSA9IGxlMzJfdG9fY3B1KHJlc3AtPmludGVyZmFjZV9pZCk7CisJCWlmICghcG1hY19pbnZhbGlkKQorCQkJKnBtYWNfaWQgPSBsZTMyX3RvX2NwdShyZXNwLT5wbWFjX2lkKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfaWZfZGVzdHJveShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaW50ZXJmYWNlX2lkKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfaWZfZGVzdHJveSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX05UV0tfSU5URVJGQUNFX0RFU1RST1ksIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPmludGVyZmFjZV9pZCA9IGNwdV90b19sZTMyKGludGVyZmFjZV9pZCk7CisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEdldCBzdGF0cyBpcyBhIG5vbiBlbWJlZGRlZCBjb21tYW5kOiB0aGUgcmVxdWVzdCBpcyBub3QgZW1iZWRkZWQgaW5zaWRlCisgKiBXUkIgYnV0IGlzIGEgc2VwYXJhdGUgZG1hIG1lbW9yeSBibG9jaworICovCitpbnQgYmVfY21kX2dldF9zdGF0cyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9zdGF0cyAqcmVxID0gbm9uZW1iX2NtZC0+dmE7CisJc3RydWN0IGJlX3NnZSAqc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0VUSCwKKwkJT1BDT0RFX0VUSF9HRVRfU1RBVElTVElDUywgc2l6ZW9mKCpyZXEpKTsKKwlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLT5kbWEpKTsKKwlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+ZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5zaXplKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzICpyZXNwID0gbm9uZW1iX2NtZC0+dmE7CisJCWJlX2R3c19sZV90b19jcHUoJnJlc3AtPmh3X3N0YXRzLCBzaXplb2YocmVzcC0+aHdfc3RhdHMpKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCXN0cnVjdCBiZV9saW5rX2luZm8gKmxpbmspCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9saW5rX3N0YXR1cyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlksIHNpemVvZigqcmVxKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2xpbmtfc3RhdHVzICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQlsaW5rLT5zcGVlZCA9IHJlc3AtPm1hY19zcGVlZDsKKwkJbGluay0+ZHVwbGV4ID0gcmVzcC0+bWFjX2R1cGxleDsKKwkJbGluay0+ZmF1bHQgPSByZXNwLT5tYWNfZmF1bHQ7CisJfSBlbHNlIHsKKwkJbGluay0+c3BlZWQgPSBQSFlfTElOS19TUEVFRF9aRVJPOworCX0KKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9nZXRfZndfdmVyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIGNoYXIgKmZ3X3ZlcikKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9md192ZXJzaW9uICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fR0VUX0ZXX1ZFUlNJT04sIHNpemVvZigqcmVxKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9md192ZXJzaW9uICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQlzdHJuY3B5KGZ3X3ZlciwgcmVzcC0+ZmlybXdhcmVfdmVyc2lvbl9zdHJpbmcsIEZXX1ZFUl9MRU4pOworCX0KKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogc2V0IHRoZSBFUSBkZWxheSBpbnRlcnZhbCBvZiBhbiBFUSB0byBzcGVjaWZpZWQgdmFsdWUgKi8KK2ludCBiZV9jbWRfbW9kaWZ5X2VxZChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgZXFfaWQsIHUzMiBlcWQpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9tb2RpZnlfZXFfZGVsYXkgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9NT0RJRllfRVFfREVMQVksIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9lcSA9IGNwdV90b19sZTMyKDEpOworCXJlcS0+ZGVsYXlbMF0uZXFfaWQgPSBjcHVfdG9fbGUzMihlcV9pZCk7CisJcmVxLT5kZWxheVswXS5waGFzZSA9IDA7CisJcmVxLT5kZWxheVswXS5kZWxheV9tdWx0aXBsaWVyID0gY3B1X3RvX2xlMzIoZXFkKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF92bGFuX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsIHUxNiAqdnRhZ19hcnJheSwKKwkJCXUzMiBudW0sIGJvb2wgdW50YWdnZWQsIGJvb2wgcHJvbWlzY3VvdXMpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV92bGFuX2NvbmZpZyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX05UV0tfVkxBTl9DT05GSUcsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPmludGVyZmFjZV9pZCA9IGlmX2lkOworCXJlcS0+cHJvbWlzY3VvdXMgPSBwcm9taXNjdW91czsKKwlyZXEtPnVudGFnZ2VkID0gdW50YWdnZWQ7CisJcmVxLT5udW1fdmxhbiA9IG51bTsKKwlpZiAoIXByb21pc2N1b3VzKSB7CisJCW1lbWNweShyZXEtPm5vcm1hbF92bGFuLCB2dGFnX2FycmF5LAorCQkJcmVxLT5udW1fdmxhbiAqIHNpemVvZih2dGFnX2FycmF5WzBdKSk7CisJfQorCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCBwb3J0X251bSwgYm9vbCBlbikKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3Byb21pc2N1b3VzX2NvbmZpZyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fRVRILAorCQlPUENPREVfRVRIX1BST01JU0NVT1VTLCBzaXplb2YoKnJlcSkpOworCisJaWYgKHBvcnRfbnVtKQorCQlyZXEtPnBvcnQxX3Byb21pc2N1b3VzID0gZW47CisJZWxzZQorCQlyZXEtPnBvcnQwX3Byb21pc2N1b3VzID0gZW47CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfbWNhc3RfbWFjX3NldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsIHU4ICptYWNfdGFibGUsCisJCQl1MzIgbnVtLCBib29sIHByb21pc2N1b3VzKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfbWNhc3RfbWFjX2NvbmZpZyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVCwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+aW50ZXJmYWNlX2lkID0gaWZfaWQ7CisJcmVxLT5wcm9taXNjdW91cyA9IHByb21pc2N1b3VzOworCWlmICghcHJvbWlzY3VvdXMpIHsKKwkJcmVxLT5udW1fbWFjID0gY3B1X3RvX2xlMTYobnVtKTsKKwkJaWYgKG51bSkKKwkJCW1lbWNweShyZXEtPm1hYywgbWFjX3RhYmxlLCBFVEhfQUxFTiAqIG51bSk7CisJfQorCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIHR4X2ZjLCB1MzIgcnhfZmMpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9zZXRfZmxvd19jb250cm9sICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9TRVRfRkxPV19DT05UUk9MLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT50eF9mbG93X2NvbnRyb2wgPSBjcHVfdG9fbGUxNigodTE2KXR4X2ZjKTsKKwlyZXEtPnJ4X2Zsb3dfY29udHJvbCA9IGNwdV90b19sZTE2KCh1MTYpcnhfZmMpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2dldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyICp0eF9mYywgdTMyICpyeF9mYykKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9mbG93X2NvbnRyb2wgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX0dFVF9GTE9XX0NPTlRST0wsIHNpemVvZigqcmVxKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9mbG93X2NvbnRyb2wgKnJlc3AgPQorCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQkqdHhfZmMgPSBsZTE2X3RvX2NwdShyZXNwLT50eF9mbG93X2NvbnRyb2wpOworCQkqcnhfZmMgPSBsZTE2X3RvX2NwdShyZXNwLT5yeF9mbG93X2NvbnRyb2wpOworCX0KKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9xdWVyeV9md19jZmcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyICpwb3J0X251bSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3F1ZXJ5X2Z3X2NmZyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fUVVFUllfRklSTVdBUkVfQ09ORklHLCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9xdWVyeV9md19jZmcgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJCSpwb3J0X251bSA9IGxlMzJfdG9fY3B1KHJlc3AtPnBoeXNfcG9ydCk7CisJfQorCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTllMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTAsMCArMSw2ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworLyoKKyAqIFRoZSBkcml2ZXIgc2VuZHMgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudHMgY29tbWFuZCByZXF1ZXN0cyB0byB0aGUKKyAqIGZpcm13YXJlIGluIHRoZSBCRS4gVGhlc2UgcmVxdWVzdHMgYXJlIGNvbW11bmljYXRlZCB0byB0aGUgcHJvY2Vzc29yCisgKiB1c2luZyBXb3JrIFJlcXVlc3QgQmxvY2tzIChXUkJzKSBzdWJtaXR0ZWQgdG8gdGhlIE1DQy1XUkIgcmluZyBvciB2aWEgb25lCisgKiBXUkIgaW5zaWRlIGEgTUFJTEJPWC4KKyAqIFRoZSBjb21tYW5kcyBhcmUgc2VydmljZWQgYnkgdGhlIEFSTSBwcm9jZXNzb3IgaW4gdGhlIEJsYWRlRW5naW5lJ3MgTVBVLgorICovCisKK3N0cnVjdCBiZV9zZ2UgeworCXUzMiBwYV9sbzsKKwl1MzIgcGFfaGk7CisJdTMyIGxlbjsKK307CisKKyNkZWZpbmUgTUNDX1dSQl9FTUJFRERFRF9NQVNLCTEgCS8qIGJpdCAwIG9mIGR3b3JkIDAqLworI2RlZmluZSBNQ0NfV1JCX1NHRV9DTlRfU0hJRlQJMwkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KKyNkZWZpbmUgTUNDX1dSQl9TR0VfQ05UX01BU0sJMHgxRgkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KK3N0cnVjdCBiZV9tY2Nfd3JiIHsKKwl1MzIgZW1iZWRkZWQ7CQkvKiBkd29yZCAwICovCisJdTMyIHBheWxvYWRfbGVuZ3RoOwkvKiBkd29yZCAxICovCisJdTMyIHRhZzA7CQkvKiBkd29yZCAyICovCisJdTMyIHRhZzE7CQkvKiBkd29yZCAzICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCA0ICovCisJdW5pb24geworCQl1OCBlbWJlZGRlZF9wYXlsb2FkWzIzNl07IC8qIHVzZWQgYnkgZW1iZWRkZWQgY21kcyAqLworCQlzdHJ1Y3QgYmVfc2dlIHNnbFsxOV07ICAgIC8qIHVzZWQgYnkgbm9uLWVtYmVkZGVkIGNtZHMgKi8KKwl9IHBheWxvYWQ7Cit9OworCisjZGVmaW5lIENRRV9GTEFHU19WQUxJRF9NQVNLIAkJKDEgPDwgMzEpCisjZGVmaW5lIENRRV9GTEFHU19BU1lOQ19NQVNLIAkJKDEgPDwgMzApCisjZGVmaW5lIENRRV9GTEFHU19DT01QTEVURURfTUFTSyAJKDEgPDwgMjgpCisjZGVmaW5lIENRRV9GTEFHU19DT05TVU1FRF9NQVNLIAkoMSA8PCAyNykKKworLyogQ29tcGxldGlvbiBTdGF0dXMgKi8KK2VudW0geworCU1DQ19TVEFUVVNfU1VDQ0VTUyA9IDB4MCwKKy8qIFRoZSBjbGllbnQgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHByaXZpbGVnZXMgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworCU1DQ19TVEFUVVNfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRVMgPSAweDEsCisvKiBBIHBhcmFtZXRlciBpbiB0aGUgY29tbWFuZCB3YXMgaW52YWxpZC4gKi8KKwlNQ0NfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSID0gMHgyLAorLyogVGhlcmUgYXJlIGluc3VmZmljaWVudCBjaGlwIHJlc291cmNlcyB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisJTUNDX1NUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTID0gMHgzLAorLyogVGhlIGNvbW1hbmQgaXMgY29tcGxldGluZyBiZWNhdXNlIHRoZSBxdWV1ZSB3YXMgZ2V0dGluZyBmbHVzaGVkICovCisJTUNDX1NUQVRVU19RVUVVRV9GTFVTSElORyA9IDB4NCwKKy8qIFRoZSBjb21tYW5kIGlzIGNvbXBsZXRpbmcgd2l0aCBhIERNQSBlcnJvciAqLworCU1DQ19TVEFUVVNfRE1BX0ZBSUxFRCA9IDB4NQorfTsKKworI2RlZmluZSBDUUVfU1RBVFVTX0NPTVBMX01BU0sJCTB4RkZGRgorI2RlZmluZSBDUUVfU1RBVFVTX0NPTVBMX1NISUZUCQkwCS8qIGJpdHMgMCAtIDE1ICovCisjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9NQVNLCQkweEZGRkYKKyNkZWZpbmUgQ1FFX1NUQVRVU19FWFREX1NISUZUCQkwCS8qIGJpdHMgMCAtIDE1ICovCisKK3N0cnVjdCBiZV9tY2NfY3FfZW50cnkgeworCXUzMiBzdGF0dXM7CQkvKiBkd29yZCAwICovCisJdTMyIHRhZzA7CQkvKiBkd29yZCAxICovCisJdTMyIHRhZzE7CQkvKiBkd29yZCAyICovCisJdTMyIGZsYWdzOwkJLyogZHdvcmQgMyAqLworfTsKKworc3RydWN0IGJlX21jY19tYWlsYm94IHsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiB3cmI7CisJc3RydWN0IGJlX21jY19jcV9lbnRyeSBjcWU7Cit9OworCisjZGVmaW5lIENNRF9TVUJTWVNURU1fQ09NTU9OCTB4MQorI2RlZmluZSBDTURfU1VCU1lTVEVNX0VUSCAJMHgzCisKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX01BQ19RVUVSWQkJCTEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX01BQ19TRVQJCQkyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19NVUxUSUNBU1RfU0VUCQkzCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19WTEFOX0NPTkZJRyAgCQk0CisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWQkJNQorI2RlZmluZSBPUENPREVfQ09NTU9OX0NRX0NSRUFURQkJCQkxMgorI2RlZmluZSBPUENPREVfQ09NTU9OX0VRX0NSRUFURQkJCQkxMworI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19DUkVBVEUgICAgICAgIAkJMjEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUiAgICAJCTM0CisjZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0ZXX1ZFUlNJT04JCQkzNQorI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9GTE9XX0NPTlRST0wJCQkzNgorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GTE9XX0NPTlRST0wJCQkzNworI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9GUkFNRV9TSVpFCQkJMzkKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NT0RJRllfRVFfREVMQVkJCQk0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRwkJCTQyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19JTlRFUkZBQ0VfQ1JFQVRFIAkJNTAKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX0lOVEVSRkFDRV9ERVNUUk9ZIAkJNTEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZICAgICAgICAJCTU0CisjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfREVTVFJPWSAgICAgICAgCQk1NQorI2RlZmluZSBPUENPREVfQ09NTU9OX1FVRVJZX0ZJUk1XQVJFX0NPTkZJRwkJNTgKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1BNQUNfQURECQkJNTkKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1BNQUNfREVMCQkJNjAKKworI2RlZmluZSBPUENPREVfRVRIX0FDUElfQ09ORklHCQkJCTIKKyNkZWZpbmUgT1BDT0RFX0VUSF9QUk9NSVNDVU9VUwkJCQkzCisjZGVmaW5lIE9QQ09ERV9FVEhfR0VUX1NUQVRJU1RJQ1MJCQk0CisjZGVmaW5lIE9QQ09ERV9FVEhfVFhfQ1JFQVRFCQkJCTcKKyNkZWZpbmUgT1BDT0RFX0VUSF9SWF9DUkVBVEUgICAgICAgICAgICAJCTgKKyNkZWZpbmUgT1BDT0RFX0VUSF9UWF9ERVNUUk9ZICAgICAgICAgICAJCTkKKyNkZWZpbmUgT1BDT0RFX0VUSF9SWF9ERVNUUk9ZICAgICAgICAgICAJCTEwCisKK3N0cnVjdCBiZV9jbWRfcmVxX2hkciB7CisJdTggb3Bjb2RlOwkJLyogZHdvcmQgMCAqLworCXU4IHN1YnN5c3RlbTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwb3J0X251bWJlcjsJCS8qIGR3b3JkIDAgKi8KKwl1OCBkb21haW47CQkvKiBkd29yZCAwICovCisJdTMyIHRpbWVvdXQ7CQkvKiBkd29yZCAxICovCisJdTMyIHJlcXVlc3RfbGVuZ3RoOwkvKiBkd29yZCAyICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCAzICovCit9OworCisjZGVmaW5lIFJFU1BfSERSX0lORk9fT1BDT0RFX1NISUZUCTAJLyogYml0cyAwIC0gNyAqLworI2RlZmluZSBSRVNQX0hEUl9JTkZPX1NVQlNZU19TSElGVAk4IAkvKiBiaXRzIDggLSAxNSAqLworc3RydWN0IGJlX2NtZF9yZXNwX2hkciB7CisJdTMyIGluZm87CQkvKiBkd29yZCAwICovCisJdTMyIHN0YXR1czsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgcmVzcG9uc2VfbGVuZ3RoOwkvKiBkd29yZCAyICovCisJdTMyIGFjdHVhbF9yZXNwX2xlbjsJLyogZHdvcmQgMyAqLworfTsKKworc3RydWN0IHBoeXNfYWRkciB7CisJdTMyIGxvOworCXUzMiBoaTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkUgQ29tbWFuZCBkZWZpbml0aW9ucyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkICovCitzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0IHsKKwl1OCBjaWR4WzEzXTsJCS8qIGR3b3JkIDAqLworCXU4IHJzdmQwWzNdOwkJLyogZHdvcmQgMCovCisJdTggZXBpZHhbMTNdOwkJLyogZHdvcmQgMCovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAwKi8KKwl1OCByc3ZkMTsJCS8qIGR3b3JkIDAqLworCXU4IHNpemU7CQkvKiBkd29yZCAwKi8KKwl1OCBwaWR4WzEzXTsJCS8qIGR3b3JkIDEqLworCXU4IHJzdmQyWzNdOwkJLyogZHdvcmQgMSovCisJdTggcGRbMTBdOwkJLyogZHdvcmQgMSovCisJdTggY291bnRbM107CQkvKiBkd29yZCAxKi8KKwl1OCBzb2xldmVudDsJCS8qIGR3b3JkIDEqLworCXU4IHN0YWxsZWQ7CQkvKiBkd29yZCAxKi8KKwl1OCBhcm1lZDsJCS8qIGR3b3JkIDEqLworCXU4IHJzdmQzWzRdOwkJLyogZHdvcmQgMiovCisJdTggZnVuY1s4XTsJCS8qIGR3b3JkIDIqLworCXU4IHJzdmQ0OwkJLyogZHdvcmQgMiovCisJdTggZGVsYXltdWx0WzEwXTsJLyogZHdvcmQgMiovCisJdTggcnN2ZDVbMl07CQkvKiBkd29yZCAyKi8KKwl1OCBwaGFzZVsyXTsJCS8qIGR3b3JkIDIqLworCXU4IG5vZGVsYXk7CQkvKiBkd29yZCAyKi8KKwl1OCByc3ZkNls0XTsJCS8qIGR3b3JkIDIqLworCXU4IHJzdmQ3WzMyXTsJCS8qIGR3b3JkIDMqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfZXFfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fcGFnZXM7CQkvKiBzd29yZCAqLworCXUxNiByc3ZkMDsJCS8qIHN3b3JkICovCisJdTggY29udGV4dFtzaXplb2Yoc3RydWN0IGFtYXBfZXFfY29udGV4dCkgLyA4XTsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX2VxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciByZXNwX2hkcjsKKwl1MTYgZXFfaWQ7CQkvKiBzd29yZCAqLworCXUxNiByc3ZkMDsJCS8qIHN3b3JkICovCit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogTWFjIHF1ZXJ5ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0geworCU1BQ19BRERSRVNTX1RZUEVfU1RPUkFHRSA9IDB4MCwKKwlNQUNfQUREUkVTU19UWVBFX05FVFdPUksgPSAweDEsCisJTUFDX0FERFJFU1NfVFlQRV9QRCA9IDB4MiwKKwlNQUNfQUREUkVTU19UWVBFX01BTkFHRU1FTlQgPSAweDMKK307CisKK3N0cnVjdCBtYWNfYWRkciB7CisJdTE2IHNpemVfb2Zfc3RydWN0OworCXU4IGFkZHJbRVRIX0FMRU5dOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfbWFjX3F1ZXJ5IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHR5cGU7CisJdTggcGVybWFuZW50OworCXUxNiBpZl9pZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9tYWNfcXVlcnkgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXN0cnVjdCBtYWNfYWRkciBtYWM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKiogUE1hYyBBZGQgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfcG1hY19hZGQgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIGlmX2lkOworCXU4IG1hY19hZGRyZXNzW0VUSF9BTEVOXTsKKwl1OCByc3ZkMFsyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9wbWFjX2FkZCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIHBtYWNfaWQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKiogUE1hYyBEZWwgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfcG1hY19kZWwgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIGlmX2lkOworCXUzMiBwbWFjX2lkOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqIENyZWF0ZSBDUSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZCAqLworc3RydWN0IGFtYXBfY3FfY29udGV4dCB7CisJdTggY2lkeFsxMV07CQkvKiBkd29yZCAwKi8KKwl1OCByc3ZkMDsJCS8qIGR3b3JkIDAqLworCXU4IGNvYWxlc2N3bVsyXTsJLyogZHdvcmQgMCovCisJdTggbm9kZWxheTsJCS8qIGR3b3JkIDAqLworCXU4IGVwaWR4WzExXTsJCS8qIGR3b3JkIDAqLworCXU4IHJzdmQxOwkJLyogZHdvcmQgMCovCisJdTggY291bnRbMl07CQkvKiBkd29yZCAwKi8KKwl1OCB2YWxpZDsJCS8qIGR3b3JkIDAqLworCXU4IHNvbGV2ZW50OwkJLyogZHdvcmQgMCovCisJdTggZXZlbnRhYmxlOwkJLyogZHdvcmQgMCovCisJdTggcGlkeFsxMV07CQkvKiBkd29yZCAxKi8KKwl1OCByc3ZkMjsJCS8qIGR3b3JkIDEqLworCXU4IHBkWzEwXTsJCS8qIGR3b3JkIDEqLworCXU4IGVxaWRbOF07CQkvKiBkd29yZCAxKi8KKwl1OCBzdGFsbGVkOwkJLyogZHdvcmQgMSovCisJdTggYXJtZWQ7CQkvKiBkd29yZCAxKi8KKwl1OCByc3ZkM1s0XTsJCS8qIGR3b3JkIDIqLworCXU4IGZ1bmNbOF07CQkvKiBkd29yZCAyKi8KKwl1OCByc3ZkNFsyMF07CQkvKiBkd29yZCAyKi8KKwl1OCByc3ZkNVszMl07CQkvKiBkd29yZCAzKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0KSAvIDhdOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfY3FfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgY3FfaWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIENyZWF0ZSBUeFEgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBCRV9FVEhfVFhfUklOR19UWVBFX1NUQU5EQVJEICAgIAkyCisjZGVmaW5lIEJFX1VMUDFfTlVNCQkJCTEKKworLyogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQgKi8KK3N0cnVjdCBhbWFwX3R4X2NvbnRleHQgeworCXU4IHJzdmQwWzE2XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCB0eF9yaW5nX3NpemVbNF07CS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMVsyNl07CQkvKiBkd29yZCAwICovCisJdTggcGNpX2Z1bmNfaWRbOF07CS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkMls5XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBjdHhfdmFsaWQ7CQkvKiBkd29yZCAxICovCisJdTggY3FfaWRfc2VuZFsxNl07CS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkM1sxNl07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDRbMzJdOwkJLyogZHdvcmQgMyAqLworCXU4IHJzdmQ1WzMyXTsJCS8qIGR3b3JkIDQgKi8KKwl1OCByc3ZkNlszMl07CQkvKiBkd29yZCA1ICovCisJdTggcnN2ZDdbMzJdOwkJLyogZHdvcmQgNiAqLworCXU4IHJzdmQ4WzMyXTsJCS8qIGR3b3JkIDcgKi8KKwl1OCByc3ZkOVszMl07CQkvKiBkd29yZCA4ICovCisJdTggcnN2ZDEwWzMyXTsJCS8qIGR3b3JkIDkgKi8KKwl1OCByc3ZkMTFbMzJdOwkJLyogZHdvcmQgMTAgKi8KKwl1OCByc3ZkMTJbMzJdOwkJLyogZHdvcmQgMTEgKi8KKwl1OCByc3ZkMTNbMzJdOwkJLyogZHdvcmQgMTIgKi8KKwl1OCByc3ZkMTRbMzJdOwkJLyogZHdvcmQgMTMgKi8KKwl1OCByc3ZkMTVbMzJdOwkJLyogZHdvcmQgMTQgKi8KKwl1OCByc3ZkMTZbMzJdOwkJLyogZHdvcmQgMTUgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX2V0aF90eF9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggbnVtX3BhZ2VzOworCXU4IHVscF9udW07CisJdTggdHlwZTsKKwl1OCBib3VuZF9wb3J0OworCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX3R4X2NvbnRleHQpIC8gOF07CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1s4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9ldGhfdHhfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgY2lkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBDcmVhdGUgUnhRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX2V0aF9yeF9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGNxX2lkOworCXU4IGZyYWdfc2l6ZTsKKwl1OCBudW1fcGFnZXM7CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1syXTsKKwl1MzIgaW50ZXJmYWNlX2lkOworCXUxNiBtYXhfZnJhbWVfc2l6ZTsKKwl1MTYgcnN2ZDA7CisJdTMyIHJzc19xdWV1ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9ldGhfcnhfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgaWQ7CisJdTggY3B1X2lkOworCXU4IHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIFEgRGVzdHJveSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVHlwZSBvZiBRdWV1ZSB0byBiZSBkZXN0cm95ZWQgKi8KK2VudW0geworCVFUWVBFX0VRID0gMSwKKwlRVFlQRV9DUSwKKwlRVFlQRV9UWFEsCisJUVRZUEVfUlhRCit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9xX2Rlc3Ryb3kgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGlkOworCXUxNiBieXBhc3NfZmx1c2g7CS8qIHZhbGlkIG9ubHkgZm9yIHJ4IHEgZGVzdHJveSAqLworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKiBJL2YgQ3JlYXRlIChpdCdzIGFjdHVhbGx5IEkvZiBDb25maWcgQ3JlYXRlKSoqKioqKioqKiovCisKKy8qIENhcGFiaWxpdHkgZmxhZ3MgZm9yIHRoZSBpL2YgKi8KK2VudW0gYmVfaWZfZmxhZ3MgeworCUJFX0lGX0ZMQUdTX1JTUyA9IDB4NCwKKwlCRV9JRl9GTEFHU19QUk9NSVNDVU9VUyA9IDB4OCwKKwlCRV9JRl9GTEFHU19CUk9BRENBU1QgPSAweDEwLAorCUJFX0lGX0ZMQUdTX1VOVEFHR0VEID0gMHgyMCwKKwlCRV9JRl9GTEFHU19VTFAgPSAweDQwLAorCUJFX0lGX0ZMQUdTX1ZMQU5fUFJPTUlTQ1VPVVMgPSAweDgwLAorCUJFX0lGX0ZMQUdTX1ZMQU4gPSAweDEwMCwKKwlCRV9JRl9GTEFHU19NQ0FTVF9QUk9NSVNDVU9VUyA9IDB4MjAwLAorCUJFX0lGX0ZMQUdTX1BBU1NfTDJfRVJST1JTID0gMHg0MDAsCisJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUyA9IDB4ODAwCit9OworCisvKiBBbiBSWCBpbnRlcmZhY2UgaXMgYW4gb2JqZWN0IHdpdGggb25lIG9yIG1vcmUgTUFDIGFkZHJlc3NlcyBhbmQKKyAqIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuICovCitzdHJ1Y3QgYmVfY21kX3JlcV9pZl9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIHZlcnNpb247CQkvKiBpZ25vcmUgY3Vycm50bHkgKi8KKwl1MzIgY2FwYWJpbGl0eV9mbGFnczsKKwl1MzIgZW5hYmxlX2ZsYWdzOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByc3ZkMDsKKwl1OCBwbWFjX2ludmFsaWQ7IC8qIGlmIHNldCwgZG9uJ3QgYXR0YWNoIHRoZSBtYWMgYWRkciB0byB0aGUgaS9mICovCisJdTMyIHZsYW5fdGFnOwkgLyogbm90IHVzZWQgY3VycmVudGx5ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfaWZfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MzIgaW50ZXJmYWNlX2lkOworCXUzMiBwbWFjX2lkOworfTsKKworLyoqKioqKiBJL2YgRGVzdHJveShpdCdzIGFjdHVhbGx5IEkvZiBDb25maWcgRGVzdHJveSApKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX2lmX2Rlc3Ryb3kgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIGludGVyZmFjZV9pZDsKK307CisKKy8qKioqKioqKioqKioqKiogSFcgU3RhdHMgR2V0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHMgeworCXUzMiByeF9ieXRlc19sc2Q7CS8qIGR3b3JkIDAqLworCXUzMiByeF9ieXRlc19tc2Q7CS8qIGR3b3JkIDEqLworCXUzMiByeF90b3RhbF9mcmFtZXM7CS8qIGR3b3JkIDIqLworCXUzMiByeF91bmljYXN0X2ZyYW1lczsJLyogZHdvcmQgMyovCisJdTMyIHJ4X211bHRpY2FzdF9mcmFtZXM7CS8qIGR3b3JkIDQqLworCXUzMiByeF9icm9hZGNhc3RfZnJhbWVzOwkvKiBkd29yZCA1Ki8KKwl1MzIgcnhfY3JjX2Vycm9yczsJLyogZHdvcmQgNiovCisJdTMyIHJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzOwkvKiBkd29yZCA3Ki8KKwl1MzIgcnhfcGF1c2VfZnJhbWVzOwkvKiBkd29yZCA4Ki8KKwl1MzIgcnhfY29udHJvbF9mcmFtZXM7CS8qIGR3b3JkIDkqLworCXUzMiByeF9pbl9yYW5nZV9lcnJvcnM7CS8qIGR3b3JkIDEwKi8KKwl1MzIgcnhfb3V0X3JhbmdlX2Vycm9yczsJLyogZHdvcmQgMTEqLworCXUzMiByeF9mcmFtZV90b29fbG9uZzsJLyogZHdvcmQgMTIqLworCXUzMiByeF9hZGRyZXNzX21hdGNoX2Vycm9yczsJLyogZHdvcmQgMTMqLworCXUzMiByeF92bGFuX21pc21hdGNoOwkvKiBkd29yZCAxNCovCisJdTMyIHJ4X2Ryb3BwZWRfdG9vX3NtYWxsOwkvKiBkd29yZCAxNSovCisJdTMyIHJ4X2Ryb3BwZWRfdG9vX3Nob3J0OwkvKiBkd29yZCAxNiovCisJdTMyIHJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbDsJLyogZHdvcmQgMTcqLworCXUzMiByeF9kcm9wcGVkX3RjcF9sZW5ndGg7CS8qIGR3b3JkIDE4Ki8KKwl1MzIgcnhfZHJvcHBlZF9ydW50OwkvKiBkd29yZCAxOSovCisJdTMyIHJ4XzY0X2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjAqLworCXUzMiByeF82NV8xMjdfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCAyMSovCisJdTMyIHJ4XzEyOF8yNTZfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCAyMiovCisJdTMyIHJ4XzI1Nl81MTFfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCAyMyovCisJdTMyIHJ4XzUxMl8xMDIzX2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjQqLworCXUzMiByeF8xMDI0XzE1MThfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCAyNSovCisJdTMyIHJ4XzE1MTlfMjA0N19ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDI2Ki8KKwl1MzIgcnhfMjA0OF80MDk1X2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjcqLworCXUzMiByeF80MDk2XzgxOTFfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCAyOCovCisJdTMyIHJ4XzgxOTJfOTIxNl9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDI5Ki8KKwl1MzIgcnhfaXBfY2hlY2tzdW1fZXJyczsJLyogZHdvcmQgMzAqLworCXUzMiByeF90Y3BfY2hlY2tzdW1fZXJyczsJLyogZHdvcmQgMzEqLworCXUzMiByeF91ZHBfY2hlY2tzdW1fZXJyczsJLyogZHdvcmQgMzIqLworCXUzMiByeF9ub25fcnNzX3BhY2tldHM7CS8qIGR3b3JkIDMzKi8KKwl1MzIgcnhfaXB2NF9wYWNrZXRzOwkvKiBkd29yZCAzNCovCisJdTMyIHJ4X2lwdjZfcGFja2V0czsJLyogZHdvcmQgMzUqLworCXUzMiByeF9pcHY0X2J5dGVzX2xzZDsJLyogZHdvcmQgMzYqLworCXUzMiByeF9pcHY0X2J5dGVzX21zZDsJLyogZHdvcmQgMzcqLworCXUzMiByeF9pcHY2X2J5dGVzX2xzZDsJLyogZHdvcmQgMzgqLworCXUzMiByeF9pcHY2X2J5dGVzX21zZDsJLyogZHdvcmQgMzkqLworCXUzMiByeF9jaHV0ZTFfcGFja2V0czsJLyogZHdvcmQgNDAqLworCXUzMiByeF9jaHV0ZTJfcGFja2V0czsJLyogZHdvcmQgNDEqLworCXUzMiByeF9jaHV0ZTNfcGFja2V0czsJLyogZHdvcmQgNDIqLworCXUzMiByeF9tYW5hZ2VtZW50X3BhY2tldHM7CS8qIGR3b3JkIDQzKi8KKwl1MzIgcnhfc3dpdGNoZWRfdW5pY2FzdF9wYWNrZXRzOwkvKiBkd29yZCA0NCovCisJdTMyIHJ4X3N3aXRjaGVkX211bHRpY2FzdF9wYWNrZXRzOwkvKiBkd29yZCA0NSovCisJdTMyIHJ4X3N3aXRjaGVkX2Jyb2FkY2FzdF9wYWNrZXRzOwkvKiBkd29yZCA0NiovCisJdTMyIHR4X2J5dGVzX2xzZDsJLyogZHdvcmQgNDcqLworCXUzMiB0eF9ieXRlc19tc2Q7CS8qIGR3b3JkIDQ4Ki8KKwl1MzIgdHhfdW5pY2FzdGZyYW1lczsJLyogZHdvcmQgNDkqLworCXUzMiB0eF9tdWx0aWNhc3RmcmFtZXM7CS8qIGR3b3JkIDUwKi8KKwl1MzIgdHhfYnJvYWRjYXN0ZnJhbWVzOwkvKiBkd29yZCA1MSovCisJdTMyIHR4X3BhdXNlZnJhbWVzOwkvKiBkd29yZCA1MiovCisJdTMyIHR4X2NvbnRyb2xmcmFtZXM7CS8qIGR3b3JkIDUzKi8KKwl1MzIgdHhfNjRfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA1NCovCisJdTMyIHR4XzY1XzEyN19ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDU1Ki8KKwl1MzIgdHhfMTI4XzI1Nl9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDU2Ki8KKwl1MzIgdHhfMjU2XzUxMV9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDU3Ki8KKwl1MzIgdHhfNTEyXzEwMjNfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA1OCovCisJdTMyIHR4XzEwMjRfMTUxOF9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDU5Ki8KKwl1MzIgdHhfMTUxOV8yMDQ3X2J5dGVfcGFja2V0czsJLyogZHdvcmQgNjAqLworCXUzMiB0eF8yMDQ4XzQwOTVfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA2MSovCisJdTMyIHR4XzQwOTZfODE5MV9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDYyKi8KKwl1MzIgdHhfODE5Ml85MjE2X2J5dGVfcGFja2V0czsJLyogZHdvcmQgNjMqLworCXUzMiByeF9maWZvX292ZXJmbG93OwkvKiBkd29yZCA2NCovCisJdTMyIHJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3c7CS8qIGR3b3JkIDY1Ki8KK307CisKK3N0cnVjdCBiZV9yeGZfc3RhdHMgeworCXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0cyBwb3J0WzJdOworCXUzMiByeF9kcm9wc19ub19wYnVmOwkvKiBkd29yZCAxMzIqLworCXUzMiByeF9kcm9wc19ub190eHBiOwkvKiBkd29yZCAxMzMqLworCXUzMiByeF9kcm9wc19ub19lcnhfZGVzY3I7CS8qIGR3b3JkIDEzNCovCisJdTMyIHJ4X2Ryb3BzX25vX3RwcmVfZGVzY3I7CS8qIGR3b3JkIDEzNSovCisJdTMyIG1hbmFnZW1lbnRfcnhfcG9ydF9wYWNrZXRzOwkvKiBkd29yZCAxMzYqLworCXUzMiBtYW5hZ2VtZW50X3J4X3BvcnRfYnl0ZXM7CS8qIGR3b3JkIDEzNyovCisJdTMyIG1hbmFnZW1lbnRfcnhfcG9ydF9wYXVzZV9mcmFtZXM7CS8qIGR3b3JkIDEzOCovCisJdTMyIG1hbmFnZW1lbnRfcnhfcG9ydF9lcnJvcnM7CS8qIGR3b3JkIDEzOSovCisJdTMyIG1hbmFnZW1lbnRfdHhfcG9ydF9wYWNrZXRzOwkvKiBkd29yZCAxNDAqLworCXUzMiBtYW5hZ2VtZW50X3R4X3BvcnRfYnl0ZXM7CS8qIGR3b3JkIDE0MSovCisJdTMyIG1hbmFnZW1lbnRfdHhfcG9ydF9wYXVzZTsJLyogZHdvcmQgMTQyKi8KKwl1MzIgbWFuYWdlbWVudF9yeF9wb3J0X3J4Zmlmb19vdmVyZmxvdzsJLyogZHdvcmQgMTQzKi8KKwl1MzIgcnhfZHJvcHNfdG9vX21hbnlfZnJhZ3M7CS8qIGR3b3JkIDE0NCovCisJdTMyIHJ4X2Ryb3BzX2ludmFsaWRfcmluZzsJLyogZHdvcmQgMTQ1Ki8KKwl1MzIgZm9yd2FyZGVkX3BhY2tldHM7CS8qIGR3b3JkIDE0NiovCisJdTMyIHJ4X2Ryb3BzX210dTsJLyogZHdvcmQgMTQ3Ki8KKwl1MzIgcnN2ZDBbMTVdOworfTsKKworc3RydWN0IGJlX2VyeF9zdGF0cyB7CisJdTMyIHJ4X2Ryb3BzX25vX2ZyYWdtZW50c1s0NF07ICAgICAvKiBkd29yZFMgMCB0byA0MyovCisJdTMyIGRlYnVnX3dkbWFfc2VudF9ob2xkOyAgICAgICAgICAvKiBkd29yZCA0NCovCisJdTMyIGRlYnVnX3dkbWFfcGJmcmVlX3NlbnRfaG9sZDsgICAvKiBkd29yZCA0NSovCisJdTMyIGRlYnVnX3dkbWFfemVyb2J5dGVfcGJmcmVlX3NlbnRfaG9sZDsgLyogZHdvcmQgNDYqLworCXUzMiBkZWJ1Z19wbWVtX3BidWZfZGVhbGxvYzsgICAgICAgLyogZHdvcmQgNDcqLworfTsKKworc3RydWN0IGJlX2h3X3N0YXRzIHsKKwlzdHJ1Y3QgYmVfcnhmX3N0YXRzIHJ4ZjsKKwl1MzIgcnN2ZFs0OF07CisJc3RydWN0IGJlX2VyeF9zdGF0cyBlcng7Cit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHMgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggcnN2ZFtzaXplb2Yoc3RydWN0IGJlX2h3X3N0YXRzKV07Cit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwlzdHJ1Y3QgYmVfaHdfc3RhdHMgaHdfc3RhdHM7Cit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV92bGFuX2NvbmZpZyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCBpbnRlcmZhY2VfaWQ7CisJdTggcHJvbWlzY3VvdXM7CisJdTggdW50YWdnZWQ7CisJdTggbnVtX3ZsYW47CisJdTE2IG5vcm1hbF92bGFuWzY0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX3Byb21pc2N1b3VzX2NvbmZpZyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCBwb3J0MF9wcm9taXNjdW91czsKKwl1OCBwb3J0MV9wcm9taXNjdW91czsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWFjYWRkciB7CisJdTggYnl0ZVtFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9tY2FzdF9tYWNfY29uZmlnIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fbWFjOworCXU4IHByb21pc2N1b3VzOworCXU4IGludGVyZmFjZV9pZDsKKwlzdHJ1Y3QgbWFjYWRkciBtYWNbMzJdOworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmVfaHdfc3RhdHMgKgoraHdfc3RhdHNfZnJvbV9jbWQoc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0cyAqY21kKQoreworCXJldHVybiAmY21kLT5od19zdGF0czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqIExpbmsgU3RhdHVzIFF1ZXJ5ICoqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgYmVfY21kX3JlcV9saW5rX3N0YXR1cyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgcnN2ZDsKK307CisKK3N0cnVjdCBiZV9saW5rX2luZm8geworCXU4IGR1cGxleDsKKwl1OCBzcGVlZDsKKwl1OCBmYXVsdDsKK307CisKK2VudW0geworCVBIWV9MSU5LX0RVUExFWF9OT05FID0gMHgwLAorCVBIWV9MSU5LX0RVUExFWF9IQUxGID0gMHgxLAorCVBIWV9MSU5LX0RVUExFWF9GVUxMID0gMHgyCit9OworCitlbnVtIHsKKwlQSFlfTElOS19TUEVFRF9aRVJPID0gMHgwLCAJLyogPT4gTm8gbGluayAqLworCVBIWV9MSU5LX1NQRUVEXzEwTUJQUyA9IDB4MSwKKwlQSFlfTElOS19TUEVFRF8xMDBNQlBTID0gMHgyLAorCVBIWV9MSU5LX1NQRUVEXzFHQlBTID0gMHgzLAorCVBIWV9MSU5LX1NQRUVEXzEwR0JQUyA9IDB4NAorfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2xpbmtfc3RhdHVzIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1OCBwaHlzaWNhbF9wb3J0OworCXU4IG1hY19kdXBsZXg7CisJdTggbWFjX3NwZWVkOworCXU4IG1hY19mYXVsdDsKKwl1OCBtZ210X21hY19kdXBsZXg7CisJdTggbWdtdF9tYWNfc3BlZWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIEdldCBGVyBWZXJzaW9uICoqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEZXX1ZFUl9MRU4JCQkzMgorc3RydWN0IGJlX2NtZF9yZXFfZ2V0X2Z3X3ZlcnNpb24geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggcnN2ZDBbRldfVkVSX0xFTl07CisJdTggcnN2ZDFbRldfVkVSX0xFTl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X2Z3X3ZlcnNpb24geworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXU4IGZpcm13YXJlX3ZlcnNpb25fc3RyaW5nW0ZXX1ZFUl9MRU5dOworCXU4IGZ3X29uX2ZsYXNoX3ZlcnNpb25fc3RyaW5nW0ZXX1ZFUl9MRU5dOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIFNldCBGbG93IENvbnRybCAqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfc2V0X2Zsb3dfY29udHJvbCB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgdHhfZmxvd19jb250cm9sOworCXUxNiByeF9mbG93X2NvbnRyb2w7Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogR2V0IEZsb3cgQ29udHJsICoqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmxvd19jb250cm9sIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiByc3ZkOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9mbG93X2NvbnRyb2wgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUxNiB0eF9mbG93X2NvbnRyb2w7CisJdTE2IHJ4X2Zsb3dfY29udHJvbDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBNb2RpZnkgRVEgRGVsYXkgKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX21vZGlmeV9lcV9kZWxheSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2VxOworCXN0cnVjdCB7CisJCXUzMiBlcV9pZDsKKwkJdTMyIHBoYXNlOworCQl1MzIgZGVsYXlfbXVsdGlwbGllcjsKKwl9IGRlbGF5WzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX21vZGlmeV9lcV9kZWxheSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIEdldCBGVyBDb25maWcgKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX3F1ZXJ5X2Z3X2NmZyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgcnN2ZFszMF07Cit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfcXVlcnlfZndfY2ZnIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MzIgYmVfY29uZmlnX251bWJlcjsKKwl1MzIgYXNpY19yZXZpc2lvbjsKKwl1MzIgcGh5c19wb3J0OworCXUzMiBmdW5jdGlvbl9tb2RlOworCXUzMiByc3ZkWzI2XTsKK307CisKK2V4dGVybiBpbnQgYmVfcGNpX2ZudW1fZ2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOworZXh0ZXJuIGludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK2V4dGVybiBpbnQgYmVfY21kX21hY19hZGRyX3F1ZXJ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkciwKKwkJCXU4IHR5cGUsIGJvb2wgcGVybWFuZW50LCB1MzIgaWZfaGFuZGxlKTsKK2V4dGVybiBpbnQgYmVfY21kX3BtYWNfYWRkKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkciwKKwkJCXUzMiBpZl9pZCwgdTMyICpwbWFjX2lkKTsKK2V4dGVybiBpbnQgYmVfY21kX3BtYWNfZGVsKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9pZCwgdTMyIHBtYWNfaWQpOworZXh0ZXJuIGludCBiZV9jbWRfaWZfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9mbGFncywgdTggKm1hYywKKwkJCWJvb2wgcG1hY19pbnZhbGlkLCB1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKTsKK2V4dGVybiBpbnQgYmVfY21kX2lmX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGlmX2hhbmRsZSk7CitleHRlcm4gaW50IGJlX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwgaW50IGVxX2RlbGF5KTsKK2V4dGVybiBpbnQgYmVfY21kX2NxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCQlib29sIHNvbF9ldnRzLCBib29sIG5vX2RlbGF5LAorCQkJaW50IG51bV9jcWVfZG1hX2NvYWxlc2NlKTsKK2V4dGVybiBpbnQgYmVfY21kX3R4cV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEsCisJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EpOworZXh0ZXJuIGludCBiZV9jbWRfcnhxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSwgdTE2IGNxX2lkLAorCQkJdTE2IGZyYWdfc2l6ZSwgdTE2IG1heF9mcmFtZV9zaXplLCB1MzIgaWZfaWQsCisJCQl1MzIgcnNzKTsKK2V4dGVybiBpbnQgYmVfY21kX3FfZGVzdHJveShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKKwkJCWludCB0eXBlKTsKK2V4dGVybiBpbnQgYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQlzdHJ1Y3QgYmVfbGlua19pbmZvICpsaW5rKTsKK2V4dGVybiBpbnQgYmVfY21kX3Jlc2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X3N0YXRzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCk7CitleHRlcm4gaW50IGJlX2NtZF9nZXRfZndfdmVyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIGNoYXIgKmZ3X3Zlcik7CisKK2V4dGVybiBpbnQgYmVfY21kX21vZGlmeV9lcWQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGVxX2lkLCB1MzIgZXFkKTsKK2V4dGVybiBpbnQgYmVfY21kX3ZsYW5fY29uZmlnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9pZCwKKwkJCXUxNiAqdnRhZ19hcnJheSwgdTMyIG51bSwgYm9vbCB1bnRhZ2dlZCwKKwkJCWJvb2wgcHJvbWlzY3VvdXMpOworZXh0ZXJuIGludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQl1OCBwb3J0X251bSwgYm9vbCBlbik7CitleHRlcm4gaW50IGJlX2NtZF9tY2FzdF9tYWNfc2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9pZCwKKwkJCXU4ICptYWNfdGFibGUsIHUzMiBudW0sIGJvb2wgcHJvbWlzY3VvdXMpOworZXh0ZXJuIGludCBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJdTMyIHR4X2ZjLCB1MzIgcnhfZmMpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJdTMyICp0eF9mYywgdTMyICpyeF9mYyk7CitleHRlcm4gaW50IGJlX2NtZF9xdWVyeV9md19jZmcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyICpwb3J0X251bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmNGI3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqLworCisjaW5jbHVkZSAiYmUuaCIKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKK3N0cnVjdCBiZV9ldGh0b29sX3N0YXQgeworCWNoYXIgZGVzY1tFVEhfR1NUUklOR19MRU5dOworCWludCB0eXBlOworCWludCBzaXplOworCWludCBvZmZzZXQ7Cit9OworCitlbnVtIHtORVRTVEFULCBQT1JUU1RBVCwgTUlTQ1NUQVQsIERSVlNUQVQsIEVSWFNUQVR9OworI2RlZmluZSBGSUVMRElORk8oX3N0cnVjdCwgZmllbGQpIEZJRUxEX1NJWkVPRihfc3RydWN0LCBmaWVsZCksIFwKKwkJCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpCisjZGVmaW5lIE5FVFNUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgTkVUU1RBVCxcCisJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyxcCisJCQkJCQlmaWVsZCkKKyNkZWZpbmUgRFJWU1RBVF9JTkZPKGZpZWxkKSAJI2ZpZWxkLCBEUlZTVEFULFwKKwkJCQkJRklFTERJTkZPKHN0cnVjdCBiZV9kcnZyX3N0YXRzLCBmaWVsZCkKKyNkZWZpbmUgTUlTQ1NUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgTUlTQ1NUQVQsXAorCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX3J4Zl9zdGF0cywgZmllbGQpCisjZGVmaW5lIFBPUlRTVEFUX0lORk8oZmllbGQpIAkjZmllbGQsIFBPUlRTVEFULFwKKwkJCQkJRklFTERJTkZPKHN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0cywgXAorCQkJCQkJZmllbGQpCisjZGVmaW5lIEVSWFNUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgRVJYU1RBVCxcCisJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfZXJ4X3N0YXRzLCBmaWVsZCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiZV9ldGh0b29sX3N0YXQgZXRfc3RhdHNbXSA9IHsKKwl7TkVUU1RBVF9JTkZPKHJ4X3BhY2tldHMpfSwKKwl7TkVUU1RBVF9JTkZPKHR4X3BhY2tldHMpfSwKKwl7TkVUU1RBVF9JTkZPKHJ4X2J5dGVzKX0sCisJe05FVFNUQVRfSU5GTyh0eF9ieXRlcyl9LAorCXtORVRTVEFUX0lORk8ocnhfZXJyb3JzKX0sCisJe05FVFNUQVRfSU5GTyh0eF9lcnJvcnMpfSwKKwl7TkVUU1RBVF9JTkZPKHJ4X2Ryb3BwZWQpfSwKKwl7TkVUU1RBVF9JTkZPKHR4X2Ryb3BwZWQpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3R4X3JlcXMpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3R4X3N0b3BzKX0sCisJe0RSVlNUQVRfSU5GTyhiZV9md2RfcmVxcyl9LAorCXtEUlZTVEFUX0lORk8oYmVfdHhfd3Jicyl9LAorCXtEUlZTVEFUX0lORk8oYmVfcG9sbHMpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3R4X2V2ZW50cyl9LAorCXtEUlZTVEFUX0lORk8oYmVfcnhfZXZlbnRzKX0sCisJe0RSVlNUQVRfSU5GTyhiZV90eF9jb21wbCl9LAorCXtEUlZTVEFUX0lORk8oYmVfcnhfY29tcGwpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX2V0aHJ4X3Bvc3RfZmFpbCl9LAorCXtEUlZTVEFUX0lORk8oYmVfODAyXzNfZHJvcHBlZF9mcmFtZXMpfSwKKwl7RFJWU1RBVF9JTkZPKGJlXzgwMl8zX21hbGZvcm1lZF9mcmFtZXMpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3R4X3JhdGUpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3J4X3JhdGUpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF91bmljYXN0X2ZyYW1lcyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X211bHRpY2FzdF9mcmFtZXMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9icm9hZGNhc3RfZnJhbWVzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfY3JjX2Vycm9ycyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfcGF1c2VfZnJhbWVzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfY29udHJvbF9mcmFtZXMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9pbl9yYW5nZV9lcnJvcnMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9vdXRfcmFuZ2VfZXJyb3JzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfZnJhbWVfdG9vX2xvbmcpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9hZGRyZXNzX21hdGNoX2Vycm9ycyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X3ZsYW5fbWlzbWF0Y2gpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9kcm9wcGVkX3Rvb19zbWFsbCl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfdG9vX3Nob3J0KX0sCisJe1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF90Y3BfbGVuZ3RoKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF9ydW50KX0sCisJe1BPUlRTVEFUX0lORk8ocnhfZmlmb19vdmVyZmxvdyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3cpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9pcF9jaGVja3N1bV9lcnJzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfdGNwX2NoZWNrc3VtX2VycnMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF91ZHBfY2hlY2tzdW1fZXJycyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X25vbl9yc3NfcGFja2V0cyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2lwdjRfcGFja2V0cyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2lwdjZfcGFja2V0cyl9LAorCXtQT1JUU1RBVF9JTkZPKHR4X3VuaWNhc3RmcmFtZXMpfSwKKwl7UE9SVFNUQVRfSU5GTyh0eF9tdWx0aWNhc3RmcmFtZXMpfSwKKwl7UE9SVFNUQVRfSU5GTyh0eF9icm9hZGNhc3RmcmFtZXMpfSwKKwl7UE9SVFNUQVRfSU5GTyh0eF9wYXVzZWZyYW1lcyl9LAorCXtQT1JUU1RBVF9JTkZPKHR4X2NvbnRyb2xmcmFtZXMpfSwKKwl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19ub19wYnVmKX0sCisJe01JU0NTVEFUX0lORk8ocnhfZHJvcHNfbm9fdHhwYil9LAorCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX25vX2VyeF9kZXNjcil9LAorCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX25vX3RwcmVfZGVzY3IpfSwKKwl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc190b29fbWFueV9mcmFncyl9LAorCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX2ludmFsaWRfcmluZyl9LAorCXtNSVNDU1RBVF9JTkZPKGZvcndhcmRlZF9wYWNrZXRzKX0sCisJe01JU0NTVEFUX0lORk8ocnhfZHJvcHNfbXR1KX0sCisJe0VSWFNUQVRfSU5GTyhyeF9kcm9wc19ub19mcmFnbWVudHMpfSwKK307CisjZGVmaW5lIEVUSFRPT0xfU1RBVFNfTlVNIEFSUkFZX1NJWkUoZXRfc3RhdHMpCisKK3N0YXRpYyB2b2lkCitiZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXN0cmNweShkcnZpbmZvLT5kcml2ZXIsIERSVl9OQU1FKTsKKwlzdHJjcHkoZHJ2aW5mby0+dmVyc2lvbiwgRFJWX1ZFUik7CisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCBhZGFwdGVyLT5md192ZXIsIEZXX1ZFUl9MRU4pOworCXN0cmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldikpOworCWRydmluZm8tPnRlc3RpbmZvX2xlbiA9IDA7CisJZHJ2aW5mby0+cmVnZHVtcF9sZW4gPSAwOworCWRydmluZm8tPmVlZHVtcF9sZW4gPSAwOworfQorCitzdGF0aWMgaW50CitiZV9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWxlc2NlKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKKwlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKKworCWNvYWxlc2NlLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGFkYXB0ZXItPm1heF9yeF9jb2FsOworCisJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzID0gcnhfZXEtPmN1cl9lcWQ7CisJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2ggPSByeF9lcS0+bWF4X2VxZDsKKwljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfbG93ID0gcnhfZXEtPm1pbl9lcWQ7CisKKwljb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3MgPSB0eF9lcS0+Y3VyX2VxZDsKKwljb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfaGlnaCA9IHR4X2VxLT5tYXhfZXFkOworCWNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2Vjc19sb3cgPSB0eF9lcS0+bWluX2VxZDsKKworCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSByeF9lcS0+ZW5hYmxlX2FpYzsKKwljb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlID0gdHhfZXEtPmVuYWJsZV9haWM7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNldCBpbnRlcnJ1cCBjb2FsZXNjaW5nIGRlbGF5ICphcyB3ZWxsIGFzKgorICogdGhlIG51bWJlciBvZiBwa3RzIHRvIGNvYWxlc2NlIGZvciBMUk8uCisgKi8KK3N0YXRpYyBpbnQKK2JlX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbGVzY2UpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKKwlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKKwlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKKwl1MzIgdHhfbWF4LCB0eF9taW4sIHR4X2N1cjsKKwl1MzIgcnhfbWF4LCByeF9taW4sIHJ4X2N1cjsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmIChjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlID09IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBjb2FsZXNjZS0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisJaWYgKGFkYXB0ZXItPm1heF9yeF9jb2FsID4gTUFYX1NLQl9GUkFHUykKKwkJYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBNQVhfU0tCX0ZSQUdTIC0gMTsKKworCS8qIGlmIEFJQyBpcyBiZWluZyB0dXJuZWQgb24gbm93LCBzdGFydCB3aXRoIGFuIEVRRCBvZiAwICovCisJaWYgKHJ4X2VxLT5lbmFibGVfYWljID09IDAgJiYKKwkJY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9PSAxKSB7CisJCXJ4X2VxLT5jdXJfZXFkID0gMDsKKwl9CisJcnhfZXEtPmVuYWJsZV9haWMgPSBjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlOworCisJcnhfbWF4ID0gY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7CisJcnhfbWluID0gY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2xvdzsKKwlyeF9jdXIgPSBjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3M7CisKKwl0eF9tYXggPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfaGlnaDsKKwl0eF9taW4gPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfbG93OworCXR4X2N1ciA9IGNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2VjczsKKworCWlmICh0eF9jdXIgPiBCRV9NQVhfRVFEKQorCQl0eF9jdXIgPSBCRV9NQVhfRVFEOworCWlmICh0eF9lcS0+Y3VyX2VxZCAhPSB0eF9jdXIpIHsKKwkJc3RhdHVzID0gYmVfY21kX21vZGlmeV9lcWQoY3RybCwgdHhfZXEtPnEuaWQsIHR4X2N1cik7CisJCWlmICghc3RhdHVzKQorCQkJdHhfZXEtPmN1cl9lcWQgPSB0eF9jdXI7CisJfQorCisJaWYgKHJ4X2VxLT5lbmFibGVfYWljKSB7CisJCWlmIChyeF9tYXggPiBCRV9NQVhfRVFEKQorCQkJcnhfbWF4ID0gQkVfTUFYX0VRRDsKKwkJaWYgKHJ4X21pbiA+IHJ4X21heCkKKwkJCXJ4X21pbiA9IHJ4X21heDsKKwkJcnhfZXEtPm1heF9lcWQgPSByeF9tYXg7CisJCXJ4X2VxLT5taW5fZXFkID0gcnhfbWluOworCQlpZiAocnhfZXEtPmN1cl9lcWQgPiByeF9tYXgpCisJCQlyeF9lcS0+Y3VyX2VxZCA9IHJ4X21heDsKKwkJaWYgKHJ4X2VxLT5jdXJfZXFkIDwgcnhfbWluKQorCQkJcnhfZXEtPmN1cl9lcWQgPSByeF9taW47CisJfSBlbHNlIHsKKwkJaWYgKHJ4X2N1ciA+IEJFX01BWF9FUUQpCisJCQlyeF9jdXIgPSBCRV9NQVhfRVFEOworCQlpZiAocnhfZXEtPmN1cl9lcWQgIT0gcnhfY3VyKSB7CisJCQlzdGF0dXMgPSBiZV9jbWRfbW9kaWZ5X2VxZChjdHJsLCByeF9lcS0+cS5pZCwgcnhfY3VyKTsKKwkJCWlmICghc3RhdHVzKQorCQkJCXJ4X2VxLT5jdXJfZXFkID0gcnhfY3VyOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGJlX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcmV0dXJuIGFkYXB0ZXItPnJ4X2NzdW07Cit9CisKK3N0YXRpYyBpbnQgYmVfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoZGF0YSkKKwkJYWRhcHRlci0+cnhfY3N1bSA9IHRydWU7CisJZWxzZQorCQlhZGFwdGVyLT5yeF9jc3VtID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCXN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdWludDY0X3QgKmRhdGEpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpkcnZyX3N0YXRzID0gJmFkYXB0ZXItPnN0YXRzLmRydnJfc3RhdHM7CisJc3RydWN0IGJlX2h3X3N0YXRzICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXItPnN0YXRzLmNtZC52YSk7CisJc3RydWN0IGJlX3J4Zl9zdGF0cyAqcnhmX3N0YXRzID0gJmh3X3N0YXRzLT5yeGY7CisJc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzICpwb3J0X3N0YXRzID0KKwkJCSZyeGZfc3RhdHMtPnBvcnRbYWRhcHRlci0+cG9ydF9udW1dOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfc3RhdHMgPSAmYWRhcHRlci0+c3RhdHMubmV0X3N0YXRzOworCXN0cnVjdCBiZV9lcnhfc3RhdHMgKmVyeF9zdGF0cyA9ICZod19zdGF0cy0+ZXJ4OworCXZvaWQgKnAgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEVUSFRPT0xfU1RBVFNfTlVNOyBpKyspIHsKKwkJc3dpdGNoIChldF9zdGF0c1tpXS50eXBlKSB7CisJCWNhc2UgTkVUU1RBVDoKKwkJCXAgPSBuZXRfc3RhdHM7CisJCQlicmVhazsKKwkJY2FzZSBEUlZTVEFUOgorCQkJcCA9IGRydnJfc3RhdHM7CisJCQlicmVhazsKKwkJY2FzZSBQT1JUU1RBVDoKKwkJCXAgPSBwb3J0X3N0YXRzOworCQkJYnJlYWs7CisJCWNhc2UgTUlTQ1NUQVQ6CisJCQlwID0gcnhmX3N0YXRzOworCQkJYnJlYWs7CisJCWNhc2UgRVJYU1RBVDogLyogQ3VycmVudGx5IG9ubHkgb25lIEVSWCBzdGF0IGlzIHByb3ZpZGVkICovCisJCQlwID0gKHUzMiAqKWVyeF9zdGF0cyArIGFkYXB0ZXItPnJ4X29iai5xLmlkOworCQkJYnJlYWs7CisJCX0KKworCQlwID0gKHU4ICopcCArIGV0X3N0YXRzW2ldLm9mZnNldDsKKwkJZGF0YVtpXSA9IChldF9zdGF0c1tpXS5zaXplID09IHNpemVvZih1NjQpKSA/CisJCQkJKih1NjQgKilwOiAqKHUzMiAqKXA7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorYmVfZ2V0X3N0YXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBzdHJpbmdzZXQsCisJCXVpbnQ4X3QgKmRhdGEpCit7CisJaW50IGk7CisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpID0gMDsgaSA8IEVUSFRPT0xfU1RBVFNfTlVNOyBpKyspIHsKKwkJCW1lbWNweShkYXRhLCBldF9zdGF0c1tpXS5kZXNjLCBFVEhfR1NUUklOR19MRU4pOworCQkJZGF0YSArPSBFVEhfR1NUUklOR19MRU47CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGJlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJldHVybiBFVEhUT09MX1NUQVRTX05VTTsKK30KKworc3RhdGljIGludCBiZV9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JlX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXJpbmctPnJ4X21heF9wZW5kaW5nID0gYWRhcHRlci0+cnhfb2JqLnEubGVuOworCXJpbmctPnR4X21heF9wZW5kaW5nID0gYWRhcHRlci0+dHhfb2JqLnEubGVuOworCisJcmluZy0+cnhfcGVuZGluZyA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5yeF9vYmoucS51c2VkKTsKKwlyaW5nLT50eF9wZW5kaW5nID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnR4X29iai5xLnVzZWQpOworfQorCitzdGF0aWMgdm9pZAorYmVfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZWNtZCkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwliZV9jbWRfZ2V0X2Zsb3dfY29udHJvbCgmYWRhcHRlci0+Y3RybCwgJmVjbWQtPnR4X3BhdXNlLAorCQkmZWNtZC0+cnhfcGF1c2UpOworCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKK30KKworc3RhdGljIGludAorYmVfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZWNtZCkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHN0YXR1czsKKworCWlmIChlY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKCZhZGFwdGVyLT5jdHJsLCBlY21kLT50eF9wYXVzZSwKKwkJCWVjbWQtPnJ4X3BhdXNlKTsKKwlpZiAoIXN0YXR1cykKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBhdXNlIHBhcmFtIHNldCBmYWlsZWQuXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0cnVjdCBldGh0b29sX29wcyBiZV9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzID0gYmVfZ2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyA9IGJlX2dldF9kcnZpbmZvLAorCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9jb2FsZXNjZSA9IGJlX2dldF9jb2FsZXNjZSwKKwkuc2V0X2NvYWxlc2NlID0gYmVfc2V0X2NvYWxlc2NlLAorCS5nZXRfcmluZ3BhcmFtID0gYmVfZ2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3BhdXNlcGFyYW0gPSBiZV9nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0gPSBiZV9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3J4X2NzdW0gPSBiZV9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gPSBiZV9zZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCisJLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKKwkuZ2V0X3N0cmluZ3MgPSBiZV9nZXRfc3RhdF9zdHJpbmdzLAorCS5nZXRfc3RhdHNfY291bnQgPSBiZV9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzID0gYmVfZ2V0X2V0aHRvb2xfc3RhdHMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzMmFhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworLyoqKioqKioqKiBNYWlsYm94IGRvb3IgYmVsbCAqKioqKioqKioqKioqLworLyogVXNlZCBmb3IgZHJpdmVyIGNvbW11bmljYXRpb24gd2l0aCB0aGUgRlcuCisgKiBUaGUgc29mdHdhcmUgbXVzdCB3cml0ZSB0aGlzIHJlZ2lzdGVyIHR3aWNlIHRvIHBvc3QgYW55IGNvbW1hbmQuIEZpcnN0LAorICogaXQgd3JpdGVzIHRoZSByZWdpc3RlciB3aXRoIGhpPTEgYW5kIHRoZSB1cHBlciBiaXRzIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiBmb3IgdGhlIE1BSUxCT1ggc3RydWN0dXJlLiBTb2Z0d2FyZSBtdXN0IHBvbGwgdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGlzCisgKiBpcyBhY2tub3dsZWRnZWQuIFRoZW4sIHNvdHdhcmUgd3JpdGVzIHRoZSByZWdpc3RlciB3aXRoIGhpPTAgd2l0aCB0aGUgbG93ZXIKKyAqIGJpdHMgaW4gdGhlIGFkZHJlc3MuIEl0IG11c3QgcG9sbCB0aGUgcmVhZHkgYml0IHVudGlsIHRoZSBjb21tYW5kIGlzCisgKiBjb21wbGV0ZS4gVXBvbiBjb21wbGV0aW9uLCB0aGUgTUFJTEJPWCB3aWxsIGNvbnRhaW4gYSB2YWxpZCBjb21wbGV0aW9uCisgKiBxdWV1ZSBlbnRyeS4KKyAqLworI2RlZmluZSBNUFVfTUFJTEJPWF9EQl9PRkZTRVQJMHgxNjAKKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfUkRZX01BU0sJMHgxIAkvKiBiaXQgMCAqLworI2RlZmluZSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLCTB4MgkvKiBiaXQgMSAqLworCisjZGVmaW5lIE1QVV9FUF9DT05UUk9MIAkJMAorCisvKioqKioqKioqKiBNUFUgc2VtcGhvcmUgKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCAJMHhhYworI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9TVEFHRV9NQVNLCTB4MDAwMEZGRkYKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX01BU0sJMHgxCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX0VSUl9TSElGVAkzMQorLyogTVBVIHNlbXBob3JlIFBPU1Qgc3RhZ2UgdmFsdWVzICovCisjZGVmaW5lIFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkgCTB4MSAvKiBGVyBhd2FpdGluZyBnb2FoZWFkIGZyb20gaG9zdCAqLworI2RlZmluZSBQT1NUX1NUQUdFX0hPU1RfUkRZIAkJMHgyIC8qIEhvc3QgaGFzIGdpdmVuIGdvLWFoZWQgdG8gRlcgKi8KKyNkZWZpbmUgUE9TVF9TVEFHRV9CRV9SRVNFVAkJMHgzIC8qIEhvc3Qgd2FudHMgdG8gcmVzZXQgY2hpcCAqLworI2RlZmluZSBQT1NUX1NUQUdFX0FSTUZXX1JEWQkJMHhjMDAwCS8qIEZXIGlzIGRvbmUgd2l0aCBQT1NUICovCisKKy8qKioqKioqKiogTWVtb3J5IEJBUiByZWdpc3RlciAqKioqKioqKioqKiovCisjZGVmaW5lIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQgCTB4ZmMKKy8qIEhvc3QgSW50ZXJydXB0IEVuYWJsZSwgaWYgc2V0IGludGVycnVwdHMgYXJlIGVuYWJsZWQgYWx0aG91Z2ggIlBDSSBJbnRlcnJ1cHQKKyAqIERpc2FibGUiIG1heSBzdGlsbCBnbG9iYWxseSBibG9jayBpbnRlcnJ1cHRzIGluIGFkZGl0aW9uIHRvIGluZGl2aWR1YWwKKyAqIGludGVycnVwdCBtYXNrczsgYSBtZWNoYW5pc20gZm9yIHRoZSBkZXZpY2UgZHJpdmVyIHRvIGJsb2NrIGFsbCBpbnRlcnJ1cHRzCisgKiBhdG9taWNhbGx5IHdpdGhvdXQgaGF2aW5nIHRvIGFyYml0cmF0ZSBmb3IgdGhlIFBDSSBJbnRlcnJ1cHQgRGlzYWJsZSBiaXQKKyAqIHdpdGggdGhlIE9TLgorICovCisjZGVmaW5lIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0sJKDEgPDwgMjkpIC8qIGJpdCAyOSAqLworLyogUENJIHBoeXNpY2FsIGZ1bmN0aW9uIG51bWJlciAqLworI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9QRlVOQ19NQVNLICAJMHg3IAkvKiBiaXRzIDI2IC0gMjggKi8KKyNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfUEZVTkNfU0hJRlQJMjYKKworLyoqKioqKioqKiBFdmVudCBRIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9FUV9PRkZTRVQJCQlEQl9DUV9PRkZTRVQKKyNkZWZpbmUgREJfRVFfUklOR19JRF9NQVNLCQkweDFGRgkvKiBiaXRzIDAgLSA4ICovCisvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZvciB0aGlzIGVxICovCisjZGVmaW5lIERCX0VRX0NMUl9TSElGVAkJCSg5KQkvKiBiaXQgOSAqLworLyogTXVzdCBiZSAxICovCisjZGVmaW5lIERCX0VRX0VWTlRfU0hJRlQJCQkoMTApCS8qIGJpdCAxMCAqLworLyogTnVtYmVyIG9mIGV2ZW50IGVudHJpZXMgcHJvY2Vzc2VkICovCisjZGVmaW5lIERCX0VRX05VTV9QT1BQRURfU0hJRlQJCSgxNikJLyogYml0cyAxNiAtIDI4ICovCisvKiBSZWFybSBiaXQgKi8KKyNkZWZpbmUgREJfRVFfUkVBUk1fU0hJRlQJCSgyOSkJLyogYml0IDI5ICovCisKKy8qKioqKioqKiogQ29tcGwgUSBkb29yIGJlbGwgKioqKioqKioqKioqKi8KKyNkZWZpbmUgREJfQ1FfT0ZGU0VUIAkJCTB4MTIwCisjZGVmaW5lIERCX0NRX1JJTkdfSURfTUFTSwkJMHgzRkYJLyogYml0cyAwIC0gOSAqLworLyogTnVtYmVyIG9mIGV2ZW50IGVudHJpZXMgcHJvY2Vzc2VkICovCisjZGVmaW5lIERCX0NRX05VTV9QT1BQRURfU0hJRlQJCSgxNikgCS8qIGJpdHMgMTYgLSAyOCAqLworLyogUmVhcm0gYml0ICovCisjZGVmaW5lIERCX0NRX1JFQVJNX1NISUZUCQkoMjkpIAkvKiBiaXQgMjkgKi8KKworLyoqKioqKioqKiogVFggVUxQIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9UWFVMUDFfT0ZGU0VUCQkweDYwCisjZGVmaW5lIERCX1RYVUxQX1JJTkdfSURfTUFTSwkJMHg3RkYJLyogYml0cyAwIC0gMTAgKi8KKy8qIE51bWJlciBvZiB0eCBlbnRyaWVzIHBvc3RlZCAqLworI2RlZmluZSBEQl9UWFVMUF9OVU1fUE9TVEVEX1NISUZUCSgxNikJLyogYml0cyAxNiAtIDI5ICovCisjZGVmaW5lIERCX1RYVUxQX05VTV9QT1NURURfTUFTSwkweDNGRkYJLyogYml0cyAxNiAtIDI5ICovCisKKy8qKioqKioqKioqIFJRKGVyeCkgZG9vciBiZWxsICoqKioqKioqKioqKi8KKyNkZWZpbmUgREJfUlFfT0ZGU0VUIAkJCTB4MTAwCisjZGVmaW5lIERCX1JRX1JJTkdfSURfTUFTSwkJMHgzRkYJLyogYml0cyAwIC0gOSAqLworLyogTnVtYmVyIG9mIHJ4IGZyYWdzIHBvc3RlZCAqLworI2RlZmluZSBEQl9SUV9OVU1fUE9TVEVEX1NISUZUCQkoMjQpCS8qIGJpdHMgMjQgLSAzMSAqLworCisvKgorICogQkUgZGVzY3JpcHRvcnM6IGhvc3QgbWVtb3J5IGRhdGEgc3RydWN0dXJlcyB3aG9zZSBmb3JtYXRzCisgKiBhcmUgaGFyZHdpcmVkIGluIEJFIHNpbGljb24uCisgKi8KKy8qIEV2ZW50IFF1ZXVlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRVFfRU5UUllfVkFMSURfTUFTSyAJCTB4MQkvKiBiaXQgMCAqLworI2RlZmluZSBFUV9FTlRSWV9SRVNfSURfTUFTSyAJCTB4RkZGRgkvKiBiaXRzIDE2IC0gMzEgKi8KKyNkZWZpbmUgRVFfRU5UUllfUkVTX0lEX1NISUZUIAkJMTYKK3N0cnVjdCBiZV9lcV9lbnRyeSB7CisJdTMyIGV2dDsKK307CisKKy8qIFRYIFF1ZXVlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRVRIX1dSQl9GUkFHX0xFTl9NQVNLCQkweEZGRkYKK3N0cnVjdCBiZV9ldGhfd3JiIHsKKwl1MzIgZnJhZ19wYV9oaTsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgZnJhZ19wYV9sbzsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgcnN2ZDA7CQkvKiBkd29yZCAyICovCisJdTMyIGZyYWdfbGVuOwkJLyogZHdvcmQgMzogYml0cyAwIC0gMTUgKi8KK30gX19wYWNrZWQ7CisKKy8qIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gZm9yIGV0aF9oZHJfd3JiIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZQorICogYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGEgYnl0ZSA6IHVzZWQgdG8gY2FsY3VsYXRlCisgKiBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkICovCitzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiB7CisJdTggcnN2ZDBbMzJdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxWzMyXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBjb21wbGV0ZTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBldmVudDsKKwl1OCBjcmM7CisJdTggZm9yd2FyZDsKKwl1OCBpcHNlYzsKKwl1OCBtZ210OworCXU4IGlwY3M7CisJdTggdWRwY3M7CisJdTggdGNwY3M7CisJdTggbHNvOworCXU4IHZsYW47CisJdTggZ3NvWzJdOworCXU4IG51bV93cmJbNV07CisJdTggbHNvX21zc1sxNF07CisJdTggbGVuWzE2XTsJCS8qIGR3b3JkIDMgKi8KKwl1OCB2bGFuX3RhZ1sxNl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfZXRoX2hkcl93cmIgeworCXUzMiBkd1s0XTsKK307CisKKy8qIFRYIENvbXBsIFF1ZXVlIERlc2NyaXB0b3IgKi8KKworLyogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBmb3IgZXRoX3R4X2NvbXBsIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZQorICogYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUKKyAqIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQgKi8KK3N0cnVjdCBhbWFwX2V0aF90eF9jb21wbCB7CisJdTggd3JiX2luZGV4WzE2XTsJLyogZHdvcmQgMCAqLworCXU4IGN0WzJdOyAJCS8qIGR3b3JkIDAgKi8KKwl1OCBwb3J0WzJdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQwWzhdOwkJLyogZHdvcmQgMCAqLworCXU4IHN0YXR1c1s0XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCB1c2VyX2J5dGVzWzE2XTsJLyogZHdvcmQgMSAqLworCXU4IG53aF9ieXRlc1s4XTsJLyogZHdvcmQgMSAqLworCXU4IGxzbzsJCQkvKiBkd29yZCAxICovCisJdTggY2FzdF9lbmNbMl07CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDFbNV07CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDJbMzJdOwkJLyogZHdvcmQgMiAqLworCXU4IHBrdHNbMTZdOwkJLyogZHdvcmQgMyAqLworCXU4IHJpbmdpZFsxMV07CQkvKiBkd29yZCAzICovCisJdTggaGFzaF92YWxbNF07CQkvKiBkd29yZCAzICovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfZXRoX3R4X2NvbXBsIHsKKwl1MzIgZHdbNF07Cit9OworCisvKiBSWCBRdWV1ZSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgYmVfZXRoX3J4X2QgeworCXUzMiBmcmFncGFfaGk7CisJdTMyIGZyYWdwYV9sbzsKK307CisKKy8qIFJYIENvbXBsIFF1ZXVlIERlc2NyaXB0b3IgKi8KKworLyogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBmb3IgZXRoX3J4X2NvbXBsIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZQorICogYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUKKyAqIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQgKi8KK3N0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCB7CisJdTggdmxhbl90YWdbMTZdOwkvKiBkd29yZCAwICovCisJdTggcGt0c2l6ZVsxNF07CQkvKiBkd29yZCAwICovCisJdTggcG9ydDsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpcF9vcHQ7CQkvKiBkd29yZCAwICovCisJdTggZXJyOwkJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3NocDsJCS8qIGR3b3JkIDEgKi8KKwl1OCBpcGY7CQkJLyogZHdvcmQgMSAqLworCXU4IHRjcGY7CQkvKiBkd29yZCAxICovCisJdTggdWRwZjsJCS8qIGR3b3JkIDEgKi8KKwl1OCBpcGNrc207CQkvKiBkd29yZCAxICovCisJdTggbDRfY2tzbTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBpcF92ZXJzaW9uOwkJLyogZHdvcmQgMSAqLworCXU4IG1hY2RzdFs2XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCB2dHA7CQkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQwOwkJLyogZHdvcmQgMSAqLworCXU4IGZyYWduZHhbMTBdOwkJLyogZHdvcmQgMSAqLworCXU4IGN0WzJdOwkJLyogZHdvcmQgMSAqLworCXU4IHN3OwkJCS8qIGR3b3JkIDEgKi8KKwl1OCBudW1mcmFnc1szXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3NfZmx1c2g7CQkvKiBkd29yZCAyICovCisJdTggY2FzdF9lbmNbMl07CQkvKiBkd29yZCAyICovCisJdTggcW5xOwkJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3NfYmFuazsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkMVsyM107CQkvKiBkd29yZCAyICovCisJdTggbHJvX3BrdDsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkMlsyXTsJCS8qIGR3b3JkIDIgKi8KKwl1OCB2YWxpZDsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3NoYXNoWzMyXTsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9ldGhfcnhfY29tcGwgeworCXUzMiBkd1s0XTsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwMWZlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtMCwwICsxLDE5NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworI2luY2x1ZGUgImJlLmgiCisKK01PRFVMRV9WRVJTSU9OKERSVl9WRVIpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlX2Rldl9pZHMpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDICIgIiBEUlZfVkVSKTsKK01PRFVMRV9BVVRIT1IoIlNlcnZlckVuZ2luZXMgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCByeF9mcmFnX3NpemUgPSAyMDQ4OworbW9kdWxlX3BhcmFtKHJ4X2ZyYWdfc2l6ZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X2ZyYWdfc2l6ZSwgIlNpemUgb2YgYSBmcmFnbWVudCB0aGF0IGhvbGRzIHJjdmQgZGF0YS4iKTsKKworI2RlZmluZSBCRV9WRU5ET1JfSUQgCQkweDE5YTIKKyNkZWZpbmUgQkUyX0RFVklDRV9JRF8xIAkweDAyMTEKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShiZV9kZXZfaWRzKSA9IHsKKwl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBCRTJfREVWSUNFX0lEXzEpIH0sCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVfZGV2X2lkcyk7CisKK3N0YXRpYyB2b2lkIGJlX3F1ZXVlX2ZyZWUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCXN0cnVjdCBiZV9kbWFfbWVtICptZW0gPSAmcS0+ZG1hX21lbTsKKwlpZiAobWVtLT52YSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBtZW0tPnNpemUsCisJCQltZW0tPnZhLCBtZW0tPmRtYSk7Cit9CisKK3N0YXRpYyBpbnQgYmVfcXVldWVfYWxsb2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAorCQl1MTYgbGVuLCB1MTYgZW50cnlfc2l6ZSkKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtID0gJnEtPmRtYV9tZW07CisKKwltZW1zZXQocSwgMCwgc2l6ZW9mKCpxKSk7CisJcS0+bGVuID0gbGVuOworCXEtPmVudHJ5X3NpemUgPSBlbnRyeV9zaXplOworCW1lbS0+c2l6ZSA9IGxlbiAqIGVudHJ5X3NpemU7CisJbWVtLT52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIG1lbS0+c2l6ZSwgJm1lbS0+ZG1hKTsKKwlpZiAoIW1lbS0+dmEpCisJCXJldHVybiAtMTsKKwltZW1zZXQobWVtLT52YSwgMCwgbWVtLT5zaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpxdWV1ZV9oZWFkX25vZGUoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyBxLT5oZWFkICogcS0+ZW50cnlfc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpxdWV1ZV90YWlsX25vZGUoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyBxLT50YWlsICogcS0+ZW50cnlfc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX2hlYWRfaW5jKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCWluZGV4X2luYygmcS0+aGVhZCwgcS0+bGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX3RhaWxfaW5jKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCWluZGV4X2luYygmcS0+dGFpbCwgcS0+bGVuKTsKK30KKworc3RhdGljIHZvaWQgYmVfaW50cl9zZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgYm9vbCBlbmFibGUpCit7CisJdTggX19pb21lbSAqYWRkciA9IGN0cmwtPnBjaWNmZyArIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQ7CisJdTMyIHJlZyA9IGlvcmVhZDMyKGFkZHIpOworCXUzMiBlbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwlpZiAoIWVuYWJsZWQgJiYgZW5hYmxlKSB7CisJCXJlZyB8PSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOworCX0gZWxzZSBpZiAoZW5hYmxlZCAmJiAhZW5hYmxlKSB7CisJCXJlZyAmPSB+TUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkiOiBiYWQgdmFsdWUgaW4gbWVtYmFyX2ludF9jdHJsIHJlZz0weCV4XG4iLCByZWcpOworCQlyZXR1cm47CisJfQorCWlvd3JpdGUzMihyZWcsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBiZV9yeHFfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIHUxNiBwb3N0ZWQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IHFpZCAmIERCX1JRX1JJTkdfSURfTUFTSzsKKwl2YWwgfD0gcG9zdGVkIDw8IERCX1JRX05VTV9QT1NURURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgY3RybC0+ZGIgKyBEQl9SUV9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBiZV90eHFfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIHUxNiBwb3N0ZWQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IHFpZCAmIERCX1RYVUxQX1JJTkdfSURfTUFTSzsKKwl2YWwgfD0gKHBvc3RlZCAmIERCX1RYVUxQX05VTV9QT1NURURfTUFTSykgPDwgREJfVFhVTFBfTlVNX1BPU1RFRF9TSElGVDsKKwlpb3dyaXRlMzIodmFsLCBjdHJsLT5kYiArIERCX1RYVUxQMV9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBiZV9lcV9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHFpZCwKKwkJYm9vbCBhcm0sIGJvb2wgY2xlYXJfaW50LCB1MTYgbnVtX3BvcHBlZCkKK3sKKwl1MzIgdmFsID0gMDsKKwl2YWwgfD0gcWlkICYgREJfRVFfUklOR19JRF9NQVNLOworCWlmIChhcm0pCisJCXZhbCB8PSAxIDw8IERCX0VRX1JFQVJNX1NISUZUOworCWlmIChjbGVhcl9pbnQpCisJCXZhbCB8PSAxIDw8IERCX0VRX0NMUl9TSElGVDsKKwl2YWwgfD0gMSA8PCBEQl9FUV9FVk5UX1NISUZUOworCXZhbCB8PSBudW1fcG9wcGVkIDw8IERCX0VRX05VTV9QT1BQRURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgY3RybC0+ZGIgKyBEQl9FUV9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBiZV9jcV9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHFpZCwKKwkJYm9vbCBhcm0sIHUxNiBudW1fcG9wcGVkKQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBxaWQgJiBEQl9DUV9SSU5HX0lEX01BU0s7CisJaWYgKGFybSkKKwkJdmFsIHw9IDEgPDwgREJfQ1FfUkVBUk1fU0hJRlQ7CisJdmFsIHw9IG51bV9wb3BwZWQgPDwgREJfQ1FfTlVNX1BPUFBFRF9TSElGVDsKKwlpb3dyaXRlMzIodmFsLCBjdHJsLT5kYiArIERCX0NRX09GRlNFVCk7Cit9CisKKworc3RhdGljIGludCBiZV9tYWNfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJc3RhdHVzID0gYmVfY21kX3BtYWNfZGVsKCZhZGFwdGVyLT5jdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUsCisJCQkJYWRhcHRlci0+cG1hY19pZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCisJCXN0YXR1cyA9IGJlX2NtZF9wbWFjX2FkZCgmYWRhcHRlci0+Y3RybCwgKHU4ICopYWRkci0+c2FfZGF0YSwKKwkJCQlhZGFwdGVyLT5pZl9oYW5kbGUsICZhZGFwdGVyLT5wbWFjX2lkKTsKKwl9CisKKwlpZiAoIXN0YXR1cykKKwkJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgbmV0ZGV2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfaHdfc3RhdHMgKmh3X3N0YXRzID0gaHdfc3RhdHNfZnJvbV9jbWQoYWRhcHRlci0+c3RhdHMuY21kLnZhKTsKKwlzdHJ1Y3QgYmVfcnhmX3N0YXRzICpyeGZfc3RhdHMgPSAmaHdfc3RhdHMtPnJ4ZjsKKwlzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHMgKnBvcnRfc3RhdHMgPQorCQkJJnJ4Zl9zdGF0cy0+cG9ydFthZGFwdGVyLT5wb3J0X251bV07CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRldl9zdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5uZXRfc3RhdHM7CisKKwlkZXZfc3RhdHMtPnJ4X3BhY2tldHMgPSBwb3J0X3N0YXRzLT5yeF90b3RhbF9mcmFtZXM7CisJZGV2X3N0YXRzLT50eF9wYWNrZXRzID0gcG9ydF9zdGF0cy0+dHhfdW5pY2FzdGZyYW1lcyArCisJCXBvcnRfc3RhdHMtPnR4X211bHRpY2FzdGZyYW1lcyArIHBvcnRfc3RhdHMtPnR4X2Jyb2FkY2FzdGZyYW1lczsKKwlkZXZfc3RhdHMtPnJ4X2J5dGVzID0gKHU2NCkgcG9ydF9zdGF0cy0+cnhfYnl0ZXNfbXNkIDw8IDMyIHwKKwkJCQkodTY0KSBwb3J0X3N0YXRzLT5yeF9ieXRlc19sc2Q7CisJZGV2X3N0YXRzLT50eF9ieXRlcyA9ICh1NjQpIHBvcnRfc3RhdHMtPnR4X2J5dGVzX21zZCA8PCAzMiB8CisJCQkJKHU2NCkgcG9ydF9zdGF0cy0+dHhfYnl0ZXNfbHNkOworCisJLyogYmFkIHBrdHMgcmVjZWl2ZWQgKi8KKwlkZXZfc3RhdHMtPnJ4X2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2NyY19lcnJvcnMgKworCQlwb3J0X3N0YXRzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9ycyArCisJCXBvcnRfc3RhdHMtPnJ4X2luX3JhbmdlX2Vycm9ycyArCisJCXBvcnRfc3RhdHMtPnJ4X291dF9yYW5nZV9lcnJvcnMgKyBwb3J0X3N0YXRzLT5yeF9mcmFtZV90b29fbG9uZzsKKworCS8qICBwYWNrZXQgdHJhbnNtaXQgcHJvYmxlbXMgKi8KKwlkZXZfc3RhdHMtPnR4X2Vycm9ycyA9IDA7CisKKwkvKiAgbm8gc3BhY2UgaW4gbGludXggYnVmZmVycyAqLworCWRldl9zdGF0cy0+cnhfZHJvcHBlZCA9IDA7CisKKwkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXggKi8KKwlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOworCisJZGV2X3N0YXRzLT5tdWx0aWNhc3QgPSBwb3J0X3N0YXRzLT50eF9tdWx0aWNhc3RmcmFtZXM7CisJZGV2X3N0YXRzLT5jb2xsaXNpb25zID0gMDsKKworCS8qIGRldGFpbGVkIHJ4IGVycm9ycyAqLworCWRldl9zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2luX3JhbmdlX2Vycm9ycyArCisJCXBvcnRfc3RhdHMtPnJ4X291dF9yYW5nZV9lcnJvcnMgKyBwb3J0X3N0YXRzLT5yeF9mcmFtZV90b29fbG9uZzsKKwkvKiByZWNlaXZlIHJpbmcgYnVmZmVyIG92ZXJmbG93ICovCisJZGV2X3N0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IDA7CisJZGV2X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfY3JjX2Vycm9yczsKKworCS8qIGZyYW1lIGFsaWdubWVudCBlcnJvcnMgKi8KKwlkZXZfc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzOworCS8qIHJlY2VpdmVyIGZpZm8gb3ZlcnJ1biAqLworCS8qIGRyb3BzX25vX3BidWYgaXMgbm8gcGVyIGkvZiwgaXQncyBwZXIgQkUgY2FyZCAqLworCWRldl9zdGF0cy0+cnhfZmlmb19lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9maWZvX292ZXJmbG93ICsKKwkJCQkJcG9ydF9zdGF0cy0+cnhfaW5wdXRfZmlmb19vdmVyZmxvdyArCisJCQkJCXJ4Zl9zdGF0cy0+cnhfZHJvcHNfbm9fcGJ1ZjsKKwkvKiByZWNlaXZlciBtaXNzZWQgcGFja2V0ZCAqLworCWRldl9zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IDA7CisJLyogZGV0YWlsZWQgdHhfZXJyb3JzICovCisJZGV2X3N0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyA9IDA7CisJZGV2X3N0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyA9IDA7CisJZGV2X3N0YXRzLT50eF9maWZvX2Vycm9ycyA9IDA7CisJZGV2X3N0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzID0gMDsKKwlkZXZfc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgPSAwOworfQorCitzdGF0aWMgdm9pZCBiZV9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2xpbmtfaW5mbyAqcHJldiA9ICZhZGFwdGVyLT5saW5rOworCXN0cnVjdCBiZV9saW5rX2luZm8gbm93ID0geyAwIH07CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWJlX2NtZF9saW5rX3N0YXR1c19xdWVyeSgmYWRhcHRlci0+Y3RybCwgJm5vdyk7CisKKwkvKiBJZiBsaW5rIGNhbWUgdXAgb3Igd2VudCBkb3duICovCisJaWYgKG5vdy5zcGVlZCAhPSBwcmV2LT5zcGVlZCAmJiAobm93LnNwZWVkID09IFBIWV9MSU5LX1NQRUVEX1pFUk8gfHwKKwkJCXByZXYtPnNwZWVkID09IFBIWV9MSU5LX1NQRUVEX1pFUk8pKSB7CisJCWlmIChub3cuc3BlZWQgPT0gUEhZX0xJTktfU1BFRURfWkVSTykgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIGRvd25cbiIsIG5ldGRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgdXBcbiIsIG5ldGRldi0+bmFtZSk7CisJCX0KKwl9CisJKnByZXYgPSBub3c7Cit9CisKKy8qIFVwZGF0ZSB0aGUgRVEgZGVsYXkgbiBCRSBiYXNlZCBvbiB0aGUgUlggZnJhZ3MgY29uc3VtZWQgLyBzZWMgKi8KK3N0YXRpYyB2b2lkIGJlX3J4X2VxZF91cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOworCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisJdTMyIGVxZDsKKworCWlmICghcnhfZXEtPmVuYWJsZV9haWMpCisJCXJldHVybjsKKworCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPnJ4X2Zwc19qaWZmaWVzKSkgeworCQlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CisKKwkvKiBVcGRhdGUgb25jZSBhIHNlY29uZCAqLworCWlmICgobm93IC0gc3RhdHMtPnJ4X2Zwc19qaWZmaWVzKSA8IEhaKQorCQlyZXR1cm47CisKKwlzdGF0cy0+YmVfcnhfZnBzID0gKHN0YXRzLT5iZV9yeF9mcmFncyAtIHN0YXRzLT5iZV9wcmV2X3J4X2ZyYWdzKSAvCisJCQkoKG5vdyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgLyBIWik7CisKKwlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBub3c7CisJc3RhdHMtPmJlX3ByZXZfcnhfZnJhZ3MgPSBzdGF0cy0+YmVfcnhfZnJhZ3M7CisJZXFkID0gc3RhdHMtPmJlX3J4X2ZwcyAvIDExMDAwMDsKKwllcWQgPSBlcWQgPDwgMzsKKwlpZiAoZXFkID4gcnhfZXEtPm1heF9lcWQpCisJCWVxZCA9IHJ4X2VxLT5tYXhfZXFkOworCWlmIChlcWQgPCByeF9lcS0+bWluX2VxZCkKKwkJZXFkID0gcnhfZXEtPm1pbl9lcWQ7CisJaWYgKGVxZCA8IDEwKQorCQllcWQgPSAwOworCWlmIChlcWQgIT0gcnhfZXEtPmN1cl9lcWQpCisJCWJlX2NtZF9tb2RpZnlfZXFkKGN0cmwsIHJ4X2VxLT5xLmlkLCBlcWQpOworCisJcnhfZXEtPmN1cl9lcWQgPSBlcWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuICZhZGFwdGVyLT5zdGF0cy5uZXRfc3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3R4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CisJdWxvbmcgbm93ID0gamlmZmllczsKKworCS8qIFdyYXBwZWQgYXJvdW5kPyAqLworCWlmICh0aW1lX2JlZm9yZShub3csIHN0YXRzLT5iZV90eF9qaWZmaWVzKSkgeworCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IG5vdzsKKwkJcmV0dXJuOworCX0KKworCS8qIFVwZGF0ZSB0eCByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KKwlpZiAoKG5vdyAtIHN0YXRzLT5iZV90eF9qaWZmaWVzKSA+IDIgKiBIWikgeworCQl1MzIgcjsKKwkJciA9IChzdGF0cy0+YmVfdHhfYnl0ZXMgLSBzdGF0cy0+YmVfdHhfYnl0ZXNfcHJldikgLworCQkJKChub3cgLSBzdGF0cy0+YmVfdHhfamlmZmllcykgLyBIWik7CisJCXIgPSByIC8gMTAwMDAwMDsJCQkvKiBNIGJ5dGVzL3MgKi8KKwkJc3RhdHMtPmJlX3R4X3JhdGUgPSByICogODsJLyogTSBiaXRzL3MgKi8KKwkJc3RhdHMtPmJlX3R4X2ppZmZpZXMgPSBub3c7CisJCXN0YXRzLT5iZV90eF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3R4X2J5dGVzOworCX0KK30KKworc3RhdGljIHZvaWQgYmVfdHhfc3RhdHNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJdTMyIHdyYl9jbnQsIHUzMiBjb3BpZWQsIGJvb2wgc3RvcHBlZCkKK3sKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpOworCXN0YXRzLT5iZV90eF9yZXFzKys7CisJc3RhdHMtPmJlX3R4X3dyYnMgKz0gd3JiX2NudDsKKwlzdGF0cy0+YmVfdHhfYnl0ZXMgKz0gY29waWVkOworCWlmIChzdG9wcGVkKQorCQlzdGF0cy0+YmVfdHhfc3RvcHMrKzsKK30KKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiBXUkIgZW50cmllcyBuZWVkZWQgdG8geG1pdCBkYXRhIGluIGFuIHNrYiAqLworc3RhdGljIHUzMiB3cmJfY250X2Zvcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCAqZHVtbXkpCit7CisJaW50IGNudCA9IDA7CisJd2hpbGUgKHNrYikgeworCQlpZiAoc2tiLT5sZW4gPiBza2ItPmRhdGFfbGVuKQorCQkJY250Kys7CisJCWNudCArPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCQlza2IgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKKwl9CisJLyogdG8gYWNjb3VudCBmb3IgaGRyIHdyYiAqLworCWNudCsrOworCWlmIChjbnQgJiAxKSB7CisJCS8qIGFkZCBhIGR1bW15IHRvIG1ha2UgaXQgYW4gZXZlbiBudW0gKi8KKwkJY250Kys7CisJCSpkdW1teSA9IHRydWU7CisJfSBlbHNlCisJCSpkdW1teSA9IGZhbHNlOworCUJVR19PTihjbnQgPiBCRV9NQVhfVFhfRlJBR19DT1VOVCk7CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyYl9maWxsKHN0cnVjdCBiZV9ldGhfd3JiICp3cmIsIHU2NCBhZGRyLCBpbnQgbGVuKQoreworCXdyYi0+ZnJhZ19wYV9oaSA9IHVwcGVyXzMyX2JpdHMoYWRkcik7CisJd3JiLT5mcmFnX3BhX2xvID0gYWRkciAmIDB4RkZGRkZGRkY7CisJd3JiLT5mcmFnX2xlbiA9IGxlbiAmIEVUSF9XUkJfRlJBR19MRU5fTUFTSzsKK30KKworc3RhdGljIHZvaWQgd3JiX2ZpbGxfaGRyKHN0cnVjdCBiZV9ldGhfaGRyX3dyYiAqaGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQlib29sIHZsYW4sIHUzMiB3cmJfY250LCB1MzIgbGVuKQoreworCW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCBjcmMsIGhkciwgMSk7CisKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA+IDEgJiYgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCBsc28sIGhkciwgMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGxzb19tc3MsCisJCQloZHIsIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOworCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQlpZiAoaXNfdGNwX3BrdChza2IpKQorCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgdGNwY3MsIGhkciwgMSk7CisJCWVsc2UgaWYgKGlzX3VkcF9wa3Qoc2tiKSkKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIHVkcGNzLCBoZHIsIDEpOworCX0KKworCWlmICh2bGFuICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCB2bGFuLCBoZHIsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCB2bGFuX3RhZywKKwkJCWhkciwgdmxhbl90eF90YWdfZ2V0KHNrYikpOworCX0KKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGV2ZW50LCBoZHIsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGNvbXBsZXRlLCBoZHIsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIG51bV93cmIsIGhkciwgd3JiX2NudCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgbGVuLCBoZHIsIGxlbik7Cit9CisKKworc3RhdGljIGludCBtYWtlX3R4X3dyYnMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBza19idWZmICpza2IsIHUzMiB3cmJfY250LCBib29sIGR1bW15X3dyYikKK3sKKwl1NjQgYnVzYWRkcjsKKwl1MzIgaSwgY29waWVkID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IHNrX2J1ZmYgKmZpcnN0X3NrYiA9IHNrYjsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJmFkYXB0ZXItPnR4X29iai5xOworCXN0cnVjdCBiZV9ldGhfd3JiICp3cmI7CisJc3RydWN0IGJlX2V0aF9oZHJfd3JiICpoZHI7CisKKwlhdG9taWNfYWRkKHdyYl9jbnQsICZ0eHEtPnVzZWQpOworCWhkciA9IHF1ZXVlX2hlYWRfbm9kZSh0eHEpOworCXF1ZXVlX2hlYWRfaW5jKHR4cSk7CisKKwl3aGlsZSAoc2tiKSB7CisJCWlmIChza2ItPmxlbiA+IHNrYi0+ZGF0YV9sZW4pIHsKKwkJCWludCBsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJCQlidXNhZGRyID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBsZW4sCisJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJd3JiID0gcXVldWVfaGVhZF9ub2RlKHR4cSk7CisJCQl3cmJfZmlsbCh3cmIsIGJ1c2FkZHIsIGxlbik7CisJCQliZV9kd3NfY3B1X3RvX2xlKHdyYiwgc2l6ZW9mKCp3cmIpKTsKKwkJCXF1ZXVlX2hlYWRfaW5jKHR4cSk7CisJCQljb3BpZWQgKz0gbGVuOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZyA9CisJCQkJJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQlidXNhZGRyID0gcGNpX21hcF9wYWdlKHBkZXYsIGZyYWctPnBhZ2UsCisJCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCQlmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXdyYiA9IHF1ZXVlX2hlYWRfbm9kZSh0eHEpOworCQkJd3JiX2ZpbGwod3JiLCBidXNhZGRyLCBmcmFnLT5zaXplKTsKKwkJCWJlX2R3c19jcHVfdG9fbGUod3JiLCBzaXplb2YoKndyYikpOworCQkJcXVldWVfaGVhZF9pbmModHhxKTsKKwkJCWNvcGllZCArPSBmcmFnLT5zaXplOworCQl9CisJCXNrYiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OworCX0KKworCWlmIChkdW1teV93cmIpIHsKKwkJd3JiID0gcXVldWVfaGVhZF9ub2RlKHR4cSk7CisJCXdyYl9maWxsKHdyYiwgMCwgMCk7CisJCWJlX2R3c19jcHVfdG9fbGUod3JiLCBzaXplb2YoKndyYikpOworCQlxdWV1ZV9oZWFkX2luYyh0eHEpOworCX0KKworCXdyYl9maWxsX2hkcihoZHIsIGZpcnN0X3NrYiwgYWRhcHRlci0+dmxhbl9ncnAgPyB0cnVlIDogZmFsc2UsCisJCXdyYl9jbnQsIGNvcGllZCk7CisJYmVfZHdzX2NwdV90b19sZShoZHIsIHNpemVvZigqaGRyKSk7CisKKwlyZXR1cm4gY29waWVkOworfQorCitzdGF0aWMgaW50IGJlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGJlX3R4X29iaiAqdHhfb2JqID0gJmFkYXB0ZXItPnR4X29iajsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJnR4X29iai0+cTsKKwl1MzIgd3JiX2NudCA9IDAsIGNvcGllZCA9IDA7CisJdTMyIHN0YXJ0ID0gdHhxLT5oZWFkOworCWJvb2wgZHVtbXlfd3JiLCBzdG9wcGVkID0gZmFsc2U7CisKKwl3cmJfY250ID0gd3JiX2NudF9mb3Jfc2tiKHNrYiwgJmR1bW15X3dyYik7CisKKwljb3BpZWQgPSBtYWtlX3R4X3dyYnMoYWRhcHRlciwgc2tiLCB3cmJfY250LCBkdW1teV93cmIpOworCisJLyogcmVjb3JkIHRoZSBzZW50IHNrYiBpbiB0aGUgc2VudF9za2IgdGFibGUgKi8KKwlCVUdfT04odHhfb2JqLT5zZW50X3NrYl9saXN0W3N0YXJ0XSk7CisJdHhfb2JqLT5zZW50X3NrYl9saXN0W3N0YXJ0XSA9IHNrYjsKKworCS8qIEVuc3VyZSB0aGF0IHR4cSBoYXMgc3BhY2UgZm9yIHRoZSBuZXh0IHNrYjsgRWxzZSBzdG9wIHRoZSBxdWV1ZQorCSAqICpCRUZPUkUqIHJpbmdpbmcgdGhlIHR4IGRvb3JiZWxsLCBzbyB0aGF0IHdlIHNlcmlhbHplIHRoZQorCSAqIHR4IGNvbXBscyBvZiB0aGUgY3VycmVudCB0cmFuc21pdCB3aGljaCdsbCB3YWtlIHVwIHRoZSBxdWV1ZQorCSAqLworCWlmICgoQkVfTUFYX1RYX0ZSQUdfQ09VTlQgKyBhdG9taWNfcmVhZCgmdHhxLT51c2VkKSkgPj0gdHhxLT5sZW4pIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlzdG9wcGVkID0gdHJ1ZTsKKwl9CisKKwliZV90eHFfbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCB0eHEtPmlkLCB3cmJfY250KTsKKworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJYmVfdHhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHdyYl9jbnQsIGNvcGllZCwgc3RvcHBlZCk7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCBiZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAobmV3X210dSA8IEJFX01JTl9NVFUgfHwKKwkJCW5ld19tdHUgPiBCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSkgeworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIk1UVSBtdXN0IGJlIGJldHdlZW4gJWQgYW5kICVkIGJ5dGVzXG4iLAorCQkJQkVfTUlOX01UVSwgQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIk1UVSBjaGFuZ2VkIGZyb20gJWQgdG8gJWQgYnl0ZXNcbiIsCisJCQluZXRkZXYtPm10dSwgbmV3X210dSk7CisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCisvKgorICogaWYgdGhlcmUgYXJlIEJFX05VTV9WTEFOU19TVVBQT1JURUQgb3IgbGVzc2VyIG51bWJlciBvZiBWTEFOUyBjb25maWd1cmVkLAorICogcHJvZ3JhbSB0aGVtIGluIEJFLiAgSWYgbW9yZSB0aGFuIEJFX05VTV9WTEFOU19TVVBQT1JURUQgYXJlIGNvbmZpZ3VyZWQsCisgKiBzZXQgdGhlIEJFIGluIHByb21pc2N1b3VzIFZMQU4gbW9kZS4KKyAqLworc3RhdGljIHZvaWQgYmVfdmlkX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MTYgdnRhZ1tCRV9OVU1fVkxBTlNfU1VQUE9SVEVEXTsKKwl1MTYgbnRhZ3MgPSAwLCBpOworCisJaWYgKGFkYXB0ZXItPm51bV92bGFucyA8PSBCRV9OVU1fVkxBTlNfU1VQUE9SVEVEKSAgeworCQkvKiBDb25zdHJ1Y3QgVkxBTiBUYWJsZSB0byBnaXZlIHRvIEhXICovCisJCWZvciAoaSA9IDA7IGkgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgaSsrKSB7CisJCQlpZiAoYWRhcHRlci0+dmxhbl90YWdbaV0pIHsKKwkJCQl2dGFnW250YWdzXSA9IGNwdV90b19sZTE2KGkpOworCQkJCW50YWdzKys7CisJCQl9CisJCX0KKwkJYmVfY21kX3ZsYW5fY29uZmlnKCZhZGFwdGVyLT5jdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUsCisJCQl2dGFnLCBudGFncywgMSwgMCk7CisJfSBlbHNlIHsKKwkJYmVfY21kX3ZsYW5fY29uZmlnKCZhZGFwdGVyLT5jdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUsCisJCQlOVUxMLCAwLCAxLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJlX3ZsYW5fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CisJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOworCisJYmVfZXFfbm90aWZ5KGN0cmwsIHJ4X2VxLT5xLmlkLCBmYWxzZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShjdHJsLCB0eF9lcS0+cS5pZCwgZmFsc2UsIGZhbHNlLCAwKTsKKwlhZGFwdGVyLT52bGFuX2dycCA9IGdycDsKKwliZV9lcV9ub3RpZnkoY3RybCwgcnhfZXEtPnEuaWQsIHRydWUsIGZhbHNlLCAwKTsKKwliZV9lcV9ub3RpZnkoY3RybCwgdHhfZXEtPnEuaWQsIHRydWUsIGZhbHNlLCAwKTsKK30KKworc3RhdGljIHZvaWQgYmVfdmxhbl9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYWRhcHRlci0+bnVtX3ZsYW5zKys7CisJYWRhcHRlci0+dmxhbl90YWdbdmlkXSA9IDE7CisKKwliZV92aWRfY29uZmlnKG5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3ZsYW5fcmVtX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWFkYXB0ZXItPm51bV92bGFucy0tOworCWFkYXB0ZXItPnZsYW5fdGFnW3ZpZF0gPSAwOworCisJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQsIE5VTEwpOworCWJlX3ZpZF9jb25maWcobmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgYmVfc2V0X211bHRpY2FzdF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7CisJdTggbWFjX2FkZHJbMzJdW0VUSF9BTEVOXTsKKwlpbnQgaSA9IDA7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkvKiBzZXQgQkUgaW4gTXVsdGljYXN0IHByb21pc2N1b3VzICovCisJCWJlX2NtZF9tY2FzdF9tYWNfc2V0KCZhZGFwdGVyLT5jdHJsLAorCQkJCQlhZGFwdGVyLT5pZl9oYW5kbGUsIE5VTEwsIDAsIHRydWUpOworCQlyZXR1cm47CisJfQorCisJZm9yIChtY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jX3B0cjsgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7CisJCW1lbWNweSgmbWFjX2FkZHJbaV1bMF0sIG1jX3B0ci0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJaWYgKCsraSA+PSAzMikgeworCQkJYmVfY21kX21jYXN0X21hY19zZXQoJmFkYXB0ZXItPmN0cmwsCisJCQkJYWRhcHRlci0+aWZfaGFuZGxlLCAmbWFjX2FkZHJbMF1bMF0sIGksIGZhbHNlKTsKKwkJCWkgPSAwOworCQl9CisKKwl9CisKKwlpZiAoaSkgeworCQkvKiByZXNldCB0aGUgcHJvbWlzY3VvdXMgbW9kZSBhbHNvLiAqLworCQliZV9jbWRfbWNhc3RfbWFjX3NldCgmYWRhcHRlci0+Y3RybCwKKwkJCWFkYXB0ZXItPmlmX2hhbmRsZSwgJm1hY19hZGRyWzBdWzBdLCBpLCBmYWxzZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoJmFkYXB0ZXItPmN0cmwsIGFkYXB0ZXItPnBvcnRfbnVtLCAxKTsKKwl9IGVsc2UgeworCQliZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKCZhZGFwdGVyLT5jdHJsLCBhZGFwdGVyLT5wb3J0X251bSwgMCk7CisJCWJlX3NldF9tdWx0aWNhc3RfZmlsdGVyKG5ldGRldik7CisJfQorfQorCitzdGF0aWMgdm9pZCBiZV9yeF9yYXRlX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisJdTMyIHJhdGU7CisKKwkvKiBXcmFwcGVkIGFyb3VuZCAqLworCWlmICh0aW1lX2JlZm9yZShub3csIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSkgeworCQlzdGF0cy0+YmVfcnhfamlmZmllcyA9IG5vdzsKKwkJcmV0dXJuOworCX0KKworCS8qIFVwZGF0ZSB0aGUgcmF0ZSBvbmNlIGluIHR3byBzZWNvbmRzICovCisJaWYgKChub3cgLSBzdGF0cy0+YmVfcnhfamlmZmllcykgPCAyICogSFopCisJCXJldHVybjsKKworCXJhdGUgPSAoc3RhdHMtPmJlX3J4X2J5dGVzIC0gc3RhdHMtPmJlX3J4X2J5dGVzX3ByZXYpIC8KKwkJKChub3cgLSBzdGF0cy0+YmVfcnhfamlmZmllcykgLyBIWik7CisJcmF0ZSA9IHJhdGUgLyAxMDAwMDAwOwkvKiBNQi9TZWMgKi8KKwlzdGF0cy0+YmVfcnhfcmF0ZSA9IHJhdGUgKiA4OyAJLyogTWVnYSBCaXRzL1NlYyAqLworCXN0YXRzLT5iZV9yeF9qaWZmaWVzID0gbm93OworCXN0YXRzLT5iZV9yeF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3J4X2J5dGVzOworfQorCitzdGF0aWMgdm9pZCBiZV9yeF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXUzMiBwa3RzaXplLCB1MTYgbnVtZnJhZ3MpCit7CisJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKTsKKworCXN0YXRzLT5iZV9yeF9jb21wbCsrOworCXN0YXRzLT5iZV9yeF9mcmFncyArPSBudW1mcmFnczsKKwlzdGF0cy0+YmVfcnhfYnl0ZXMgKz0gcGt0c2l6ZTsKK30KKworc3RhdGljIHN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKgorZ2V0X3J4X3BhZ2VfaW5mbyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IGZyYWdfaWR4KQoreworCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnJ4X3BhZ2VfaW5mbzsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxID0gJmFkYXB0ZXItPnJ4X29iai5xOworCisJcnhfcGFnZV9pbmZvID0gJmFkYXB0ZXItPnJ4X29iai5wYWdlX2luZm9fdGJsW2ZyYWdfaWR4XTsKKwlCVUdfT04oIXJ4X3BhZ2VfaW5mby0+cGFnZSk7CisKKwlpZiAocnhfcGFnZV9pbmZvLT5sYXN0X3BhZ2VfdXNlcikKKwkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcGNpX3VubWFwX2FkZHIocnhfcGFnZV9pbmZvLCBidXMpLAorCQkJYWRhcHRlci0+YmlnX3BhZ2Vfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWF0b21pY19kZWMoJnJ4cS0+dXNlZCk7CisJcmV0dXJuIHJ4X3BhZ2VfaW5mbzsKK30KKworLyogVGhyb3dhd2F5IHRoZSBkYXRhIGluIHRoZSBSeCBjb21wbGV0aW9uICovCitzdGF0aWMgdm9pZCBiZV9yeF9jb21wbF9kaXNjYXJkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCkKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxID0gJmFkYXB0ZXItPnJ4X29iai5xOworCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnBhZ2VfaW5mbzsKKwl1MTYgcnhxX2lkeCwgaSwgbnVtX3JjdmQ7CisKKwlyeHFfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsIHJ4Y3ApOworCW51bV9yY3ZkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIG51bWZyYWdzLCByeGNwKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcmN2ZDsgaSsrKSB7CisJCXBhZ2VfaW5mbyA9IGdldF9yeF9wYWdlX2luZm8oYWRhcHRlciwgcnhxX2lkeCk7CisJCXB1dF9wYWdlKHBhZ2VfaW5mby0+cGFnZSk7CisJCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CisJCWluZGV4X2luYygmcnhxX2lkeCwgcnhxLT5sZW4pOworCX0KK30KKworLyoKKyAqIHNrYl9maWxsX3J4X2RhdGEgZm9ybXMgYSBjb21wbGV0ZSBza2IgZm9yIGFuIGV0aGVyIGZyYW1lCisgKiBpbmRpY2F0ZWQgYnkgcnhjcC4KKyAqLworc3RhdGljIHZvaWQgc2tiX2ZpbGxfcnhfZGF0YShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKKwlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpwYWdlX2luZm87CisJdTE2IHJ4cV9pZHgsIGksIG51bV9yY3ZkOworCXUzMiBwa3RzaXplLCBoZHJfbGVuLCBjdXJyX2ZyYWdfbGVuOworCXU4ICpzdGFydDsKKworCXJ4cV9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgZnJhZ25keCwgcnhjcCk7CisJcGt0c2l6ZSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBwa3RzaXplLCByeGNwKTsKKwludW1fcmN2ZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBudW1mcmFncywgcnhjcCk7CisKKwlwYWdlX2luZm8gPSBnZXRfcnhfcGFnZV9pbmZvKGFkYXB0ZXIsIHJ4cV9pZHgpOworCisJc3RhcnQgPSBwYWdlX2FkZHJlc3MocGFnZV9pbmZvLT5wYWdlKSArIHBhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7CisJcHJlZmV0Y2goc3RhcnQpOworCisJLyogQ29weSBkYXRhIGluIHRoZSBmaXJzdCBkZXNjcmlwdG9yIG9mIHRoaXMgY29tcGxldGlvbiAqLworCWN1cnJfZnJhZ19sZW4gPSBtaW4ocGt0c2l6ZSwgcnhfZnJhZ19zaXplKTsKKworCS8qIENvcHkgdGhlIGhlYWRlciBwb3J0aW9uIGludG8gc2tiX2RhdGEgKi8KKwloZHJfbGVuID0gbWluKCh1MzIpQkVfSERSX0xFTiwgY3Vycl9mcmFnX2xlbik7CisJbWVtY3B5KHNrYi0+ZGF0YSwgc3RhcnQsIGhkcl9sZW4pOworCXNrYi0+bGVuID0gY3Vycl9mcmFnX2xlbjsKKwlpZiAoY3Vycl9mcmFnX2xlbiA8PSBCRV9IRFJfTEVOKSB7IC8qIHRpbnkgcGFja2V0ICovCisJCS8qIENvbXBsZXRlIHBhY2tldCBoYXMgbm93IGJlZW4gbW92ZWQgdG8gZGF0YSAqLworCQlwdXRfcGFnZShwYWdlX2luZm8tPnBhZ2UpOworCQlza2ItPmRhdGFfbGVuID0gMDsKKwkJc2tiLT50YWlsICs9IGN1cnJfZnJhZ19sZW47CisJfSBlbHNlIHsKKwkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDE7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSA9IHBhZ2VfaW5mby0+cGFnZTsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCA9CisJCQkJCXBhZ2VfaW5mby0+cGFnZV9vZmZzZXQgKyBoZHJfbGVuOworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnNpemUgPSBjdXJyX2ZyYWdfbGVuIC0gaGRyX2xlbjsKKwkJc2tiLT5kYXRhX2xlbiA9IGN1cnJfZnJhZ19sZW4gLSBoZHJfbGVuOworCQlza2ItPnRhaWwgKz0gaGRyX2xlbjsKKwl9CisJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKKworCWlmIChwa3RzaXplIDw9IHJ4X2ZyYWdfc2l6ZSkgeworCQlCVUdfT04obnVtX3JjdmQgIT0gMSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBNb3JlIGZyYWdzIHByZXNlbnQgZm9yIHRoaXMgY29tcGxldGlvbiAqLworCXBrdHNpemUgLT0gY3Vycl9mcmFnX2xlbjsgLyogYWNjb3VudCBmb3IgYWJvdmUgY29waWVkIGZyYWcgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbnVtX3JjdmQ7IGkrKykgeworCQlpbmRleF9pbmMoJnJ4cV9pZHgsIHJ4cS0+bGVuKTsKKwkJcGFnZV9pbmZvID0gZ2V0X3J4X3BhZ2VfaW5mbyhhZGFwdGVyLCByeHFfaWR4KTsKKworCQljdXJyX2ZyYWdfbGVuID0gbWluKHBrdHNpemUsIHJ4X2ZyYWdfc2l6ZSk7CisKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlID0gcGFnZV9pbmZvLT5wYWdlOworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ID0gcGFnZV9pbmZvLT5wYWdlX29mZnNldDsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplID0gY3Vycl9mcmFnX2xlbjsKKwkJc2tiLT5sZW4gKz0gY3Vycl9mcmFnX2xlbjsKKwkJc2tiLT5kYXRhX2xlbiArPSBjdXJyX2ZyYWdfbGVuOworCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7CisJCXBrdHNpemUgLT0gY3Vycl9mcmFnX2xlbjsKKworCQltZW1zZXQocGFnZV9pbmZvLCAwLCBzaXplb2YoKnBhZ2VfaW5mbykpOworCX0KKworCWJlX3J4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCBwa3RzaXplLCBudW1fcmN2ZCk7CisJcmV0dXJuOworfQorCisvKiBQcm9jZXNzIHRoZSBSWCBjb21wbGV0aW9uIGluZGljYXRlZCBieSByeGNwIHdoZW4gTFJPIGlzIGRpc2FibGVkICovCitzdGF0aWMgdm9pZCBiZV9yeF9jb21wbF9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiB2dHAsIHZpZDsKKwlpbnQgbDRfY2tzbTsKKworCWw0X2Nrc20gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgbDRfY2tzbSwgcnhjcCk7CisJdnRwID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZ0cCwgcnhjcCk7CisKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwgQkVfSERSX0xFTiArIE5FVF9JUF9BTElHTik7CisJaWYgKCFza2IpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJza2IgYWxsb2MgZmFpbGVkXG4iKTsKKwkJYmVfcnhfY29tcGxfZGlzY2FyZChhZGFwdGVyLCByeGNwKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKKworCXNrYl9maWxsX3J4X2RhdGEoYWRhcHRlciwgc2tiLCByeGNwKTsKKworCWlmIChsNF9ja3NtICYmIGFkYXB0ZXItPnJ4X2NzdW0pCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJZWxzZQorCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwlza2ItPnRydWVzaXplID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXB0ZXItPm5ldGRldik7CisJc2tiLT5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlpZiAodnRwKSB7CisJCWlmICghYWRhcHRlci0+dmxhbl9ncnAgfHwgYWRhcHRlci0+bnVtX3ZsYW5zID09IDApIHsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcmV0dXJuOworCQl9CisJCXZpZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2bGFuX3RhZywgcnhjcCk7CisJCXZpZCA9IGJlMTZfdG9fY3B1KHZpZCk7CisJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQpOworCX0gZWxzZSB7CisJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJfQorCisJYWRhcHRlci0+bmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCXJldHVybjsKK30KKworLyogUHJvY2VzcyB0aGUgUlggY29tcGxldGlvbiBpbmRpY2F0ZWQgYnkgcnhjcCB3aGVuIExSTyBpcyBlbmFibGVkICovCitzdGF0aWMgdm9pZCBiZV9yeF9jb21wbF9wcm9jZXNzX2xybyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCit7CisJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcGFnZV9pbmZvOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgcnhfZnJhZ3NbQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRV07CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKKwl1MzIgbnVtX3JjdmQsIHBrdF9zaXplLCByZW1haW5pbmcsIHZsYW5mLCBjdXJyX2ZyYWdfbGVuOworCXUxNiBpLCByeHFfaWR4ID0gMCwgdmlkOworCisJbnVtX3JjdmQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgbnVtZnJhZ3MsIHJ4Y3ApOworCXBrdF9zaXplID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHBrdHNpemUsIHJ4Y3ApOworCXZsYW5mID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZ0cCwgcnhjcCk7CisJcnhxX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBmcmFnbmR4LCByeGNwKTsKKworCXJlbWFpbmluZyA9IHBrdF9zaXplOworCWZvciAoaSA9IDA7IGkgPCBudW1fcmN2ZDsgaSsrKSB7CisJCXBhZ2VfaW5mbyA9IGdldF9yeF9wYWdlX2luZm8oYWRhcHRlciwgcnhxX2lkeCk7CisKKwkJY3Vycl9mcmFnX2xlbiA9IG1pbihyZW1haW5pbmcsIHJ4X2ZyYWdfc2l6ZSk7CisKKwkJcnhfZnJhZ3NbaV0ucGFnZSA9IHBhZ2VfaW5mby0+cGFnZTsKKwkJcnhfZnJhZ3NbaV0ucGFnZV9vZmZzZXQgPSBwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0OworCQlyeF9mcmFnc1tpXS5zaXplID0gY3Vycl9mcmFnX2xlbjsKKwkJcmVtYWluaW5nIC09IGN1cnJfZnJhZ19sZW47CisKKwkJaW5kZXhfaW5jKCZyeHFfaWR4LCByeHEtPmxlbik7CisKKwkJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKKwl9CisKKwlpZiAobGlrZWx5KCF2bGFuZikpIHsKKwkJbHJvX3JlY2VpdmVfZnJhZ3MoJmFkYXB0ZXItPnJ4X29iai5scm9fbWdyLCByeF9mcmFncywgcGt0X3NpemUsCisJCQkJcGt0X3NpemUsIE5VTEwsIDApOworCX0gZWxzZSB7CisJCXZpZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2bGFuX3RhZywgcnhjcCk7CisJCXZpZCA9IGJlMTZfdG9fY3B1KHZpZCk7CisKKwkJaWYgKCFhZGFwdGVyLT52bGFuX2dycCB8fCBhZGFwdGVyLT5udW1fdmxhbnMgPT0gMCkKKwkJCXJldHVybjsKKworCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfZnJhZ3MoJmFkYXB0ZXItPnJ4X29iai5scm9fbWdyLAorCQkJcnhfZnJhZ3MsIHBrdF9zaXplLCBwa3Rfc2l6ZSwgYWRhcHRlci0+dmxhbl9ncnAsCisJCQl2aWQsIE5VTEwsIDApOworCX0KKworCWJlX3J4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCBwa3Rfc2l6ZSwgbnVtX3JjdmQpOworCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKmJlX3J4X2NvbXBsX2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwID0gcXVldWVfdGFpbF9ub2RlKCZhZGFwdGVyLT5yeF9vYmouY3EpOworCisJaWYgKHJ4Y3AtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdmFsaWQpIC8gMzJdID09IDApCisJCXJldHVybiBOVUxMOworCisJYmVfZHdzX2xlX3RvX2NwdShyeGNwLCBzaXplb2YoKnJ4Y3ApKTsKKworCXJ4Y3AtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdmFsaWQpIC8gMzJdID0gMDsKKworCXF1ZXVlX3RhaWxfaW5jKCZhZGFwdGVyLT5yeF9vYmouY3EpOworCXJldHVybiByeGNwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpiZV9hbGxvY19wYWdlcyh1MzIgc2l6ZSkKK3sKKwlnZnBfdCBhbGxvY19mbGFncyA9IEdGUF9BVE9NSUM7CisJdTMyIG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCWlmIChvcmRlciA+IDApCisJCWFsbG9jX2ZsYWdzIHw9IF9fR0ZQX0NPTVA7CisJcmV0dXJuICBhbGxvY19wYWdlcyhhbGxvY19mbGFncywgb3JkZXIpOworfQorCisvKgorICogQWxsb2NhdGUgYSBwYWdlLCBzcGxpdCBpdCB0byBmcmFnbWVudHMgb2Ygc2l6ZSByeF9mcmFnX3NpemUgYW5kIHBvc3QgYXMKKyAqIHJlY2VpdmUgYnVmZmVycyB0byBCRQorICovCitzdGF0aWMgdm9pZCBiZV9wb3N0X3J4X2ZyYWdzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnBhZ2VfaW5mb190YmwgPSBhZGFwdGVyLT5yeF9vYmoucGFnZV9pbmZvX3RibDsKKwlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpwYWdlX2luZm8gPSBOVUxMOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEgPSAmYWRhcHRlci0+cnhfb2JqLnE7CisJc3RydWN0IHBhZ2UgKnBhZ2VwID0gTlVMTDsKKwlzdHJ1Y3QgYmVfZXRoX3J4X2QgKnJ4ZDsKKwl1NjQgcGFnZV9kbWFhZGRyID0gMCwgZnJhZ19kbWFhZGRyOworCXUzMiBwb3N0ZWQsIHBhZ2Vfb2Zmc2V0ID0gMDsKKworCXBhZ2VfaW5mbyA9ICZwYWdlX2luZm9fdGJsW3J4cS0+aGVhZF07CisJZm9yIChwb3N0ZWQgPSAwOyBwb3N0ZWQgPCBNQVhfUlhfUE9TVCAmJiAhcGFnZV9pbmZvLT5wYWdlOyBwb3N0ZWQrKykgeworCQlpZiAoIXBhZ2VwKSB7CisJCQlwYWdlcCA9IGJlX2FsbG9jX3BhZ2VzKGFkYXB0ZXItPmJpZ19wYWdlX3NpemUpOworCQkJaWYgKHVubGlrZWx5KCFwYWdlcCkpIHsKKwkJCQlkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV9ldGhyeF9wb3N0X2ZhaWwrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBhZ2VfZG1hYWRkciA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBwYWdlcCwgMCwKKwkJCQkJCWFkYXB0ZXItPmJpZ19wYWdlX3NpemUsCisJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGFnZV9pbmZvLT5wYWdlX29mZnNldCA9IDA7CisJCX0gZWxzZSB7CisJCQlnZXRfcGFnZShwYWdlcCk7CisJCQlwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0ID0gcGFnZV9vZmZzZXQgKyByeF9mcmFnX3NpemU7CisJCX0KKwkJcGFnZV9vZmZzZXQgPSBwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0OworCQlwYWdlX2luZm8tPnBhZ2UgPSBwYWdlcDsKKwkJcGNpX3VubWFwX2FkZHJfc2V0KHBhZ2VfaW5mbywgYnVzLCBwYWdlX2RtYWFkZHIpOworCQlmcmFnX2RtYWFkZHIgPSBwYWdlX2RtYWFkZHIgKyBwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0OworCisJCXJ4ZCA9IHF1ZXVlX2hlYWRfbm9kZShyeHEpOworCQlyeGQtPmZyYWdwYV9sbyA9IGNwdV90b19sZTMyKGZyYWdfZG1hYWRkciAmIDB4RkZGRkZGRkYpOworCQlyeGQtPmZyYWdwYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMoZnJhZ19kbWFhZGRyKSk7CisJCXF1ZXVlX2hlYWRfaW5jKHJ4cSk7CisKKwkJLyogQW55IHNwYWNlIGxlZnQgaW4gdGhlIGN1cnJlbnQgYmlnIHBhZ2UgZm9yIGFub3RoZXIgZnJhZz8gKi8KKwkJaWYgKChwYWdlX29mZnNldCArIHJ4X2ZyYWdfc2l6ZSArIHJ4X2ZyYWdfc2l6ZSkgPgorCQkJCQlhZGFwdGVyLT5iaWdfcGFnZV9zaXplKSB7CisJCQlwYWdlcCA9IE5VTEw7CisJCQlwYWdlX2luZm8tPmxhc3RfcGFnZV91c2VyID0gdHJ1ZTsKKwkJfQorCQlwYWdlX2luZm8gPSAmcGFnZV9pbmZvX3RibFtyeHEtPmhlYWRdOworCX0KKwlpZiAocGFnZXApCisJCXBhZ2VfaW5mby0+bGFzdF9wYWdlX3VzZXIgPSB0cnVlOworCisJaWYgKHBvc3RlZCkgeworCQlhdG9taWNfYWRkKHBvc3RlZCwgJnJ4cS0+dXNlZCk7CisJCWJlX3J4cV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHJ4cS0+aWQsIHBvc3RlZCk7CisJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmcnhxLT51c2VkKSA9PSAwKSB7CisJCS8qIExldCBiZV93b3JrZXIgcmVwbGVuaXNoIHdoZW4gbWVtb3J5IGlzIGF2YWlsYWJsZSAqLworCQlhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQgPSB0cnVlOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBiZV9ldGhfdHhfY29tcGwgKgorYmVfdHhfY29tcGxfZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eF9jcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CisJc3RydWN0IGJlX2V0aF90eF9jb21wbCAqdHhjcCA9IHF1ZXVlX3RhaWxfbm9kZSh0eF9jcSk7CisKKwlpZiAodHhjcC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXRoX3R4X2NvbXBsLCB2YWxpZCkgLyAzMl0gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwliZV9kd3NfbGVfdG9fY3B1KHR4Y3AsIHNpemVvZigqdHhjcCkpOworCisJdHhjcC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXRoX3R4X2NvbXBsLCB2YWxpZCkgLyAzMl0gPSAwOworCisJcXVldWVfdGFpbF9pbmModHhfY3EpOworCXJldHVybiB0eGNwOworfQorCitzdGF0aWMgdm9pZCBiZV90eF9jb21wbF9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgbGFzdF9pbmRleCkKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJmFkYXB0ZXItPnR4X29iai5xOworCXN0cnVjdCBiZV9ldGhfd3JiICp3cmI7CisJc3RydWN0IHNrX2J1ZmYgKipzZW50X3NrYnMgPSBhZGFwdGVyLT50eF9vYmouc2VudF9za2JfbGlzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2VudF9za2I7CisJdTY0IGJ1c2FkZHI7CisJdTE2IGN1cl9pbmRleCwgbnVtX3dyYnMgPSAwOworCisJY3VyX2luZGV4ID0gdHhxLT50YWlsOworCXNlbnRfc2tiID0gc2VudF9za2JzW2N1cl9pbmRleF07CisJQlVHX09OKCFzZW50X3NrYik7CisJc2VudF9za2JzW2N1cl9pbmRleF0gPSBOVUxMOworCisJZG8geworCQljdXJfaW5kZXggPSB0eHEtPnRhaWw7CisJCXdyYiA9IHF1ZXVlX3RhaWxfbm9kZSh0eHEpOworCQliZV9kd3NfbGVfdG9fY3B1KHdyYiwgc2l6ZW9mKCp3cmIpKTsKKwkJYnVzYWRkciA9ICgodTY0KXdyYi0+ZnJhZ19wYV9oaSA8PCAzMikgfCAodTY0KXdyYi0+ZnJhZ19wYV9sbzsKKwkJaWYgKGJ1c2FkZHIgIT0gMCkgeworCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCBidXNhZGRyLAorCQkJCXdyYi0+ZnJhZ19sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl9CisJCW51bV93cmJzKys7CisJCXF1ZXVlX3RhaWxfaW5jKHR4cSk7CisJfSB3aGlsZSAoY3VyX2luZGV4ICE9IGxhc3RfaW5kZXgpOworCisJYXRvbWljX3N1YihudW1fd3JicywgJnR4cS0+dXNlZCk7CisKKwlrZnJlZV9za2Ioc2VudF9za2IpOworfQorCitzdGF0aWMgdm9pZCBiZV9yeF9xX2NsZWFuKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnBhZ2VfaW5mbzsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxID0gJmFkYXB0ZXItPnJ4X29iai5xOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeF9jcSA9ICZhZGFwdGVyLT5yeF9vYmouY3E7CisJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcDsKKwl1MTYgdGFpbDsKKworCS8qIEZpcnN0IGNsZWFudXAgcGVuZGluZyByeCBjb21wbGV0aW9ucyAqLworCXdoaWxlICgocnhjcCA9IGJlX3J4X2NvbXBsX2dldChhZGFwdGVyKSkgIT0gTlVMTCkgeworCQliZV9yeF9jb21wbF9kaXNjYXJkKGFkYXB0ZXIsIHJ4Y3ApOworCQliZV9jcV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHJ4X2NxLT5pZCwgdHJ1ZSwgMSk7CisJfQorCisJLyogVGhlbiBmcmVlIHBvc3RlZCByeCBidWZmZXIgdGhhdCB3ZXJlIG5vdCB1c2VkICovCisJdGFpbCA9IChyeHEtPmhlYWQgKyByeHEtPmxlbiAtIGF0b21pY19yZWFkKCZyeHEtPnVzZWQpKSAlIHJ4cS0+bGVuOworCWZvciAoOyB0YWlsICE9IHJ4cS0+aGVhZDsgaW5kZXhfaW5jKCZ0YWlsLCByeHEtPmxlbikpIHsKKwkJcGFnZV9pbmZvID0gZ2V0X3J4X3BhZ2VfaW5mbyhhZGFwdGVyLCB0YWlsKTsKKwkJcHV0X3BhZ2UocGFnZV9pbmZvLT5wYWdlKTsKKwkJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKKwl9CisJQlVHX09OKGF0b21pY19yZWFkKCZyeHEtPnVzZWQpKTsKK30KKworc3RhdGljIHZvaWQgYmVfdHhfcV9jbGVhbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnNlbnRfc2ticyA9IGFkYXB0ZXItPnR4X29iai5zZW50X3NrYl9saXN0OworCXN0cnVjdCBza19idWZmICpzZW50X3NrYjsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJmFkYXB0ZXItPnR4X29iai5xOworCXUxNiBsYXN0X2luZGV4OworCWJvb2wgZHVtbXlfd3JiOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKSB7CisJCXNlbnRfc2tiID0gc2VudF9za2JzW3R4cS0+dGFpbF07CisJCWxhc3RfaW5kZXggPSB0eHEtPnRhaWw7CisJCWluZGV4X2FkdigmbGFzdF9pbmRleCwKKwkJCXdyYl9jbnRfZm9yX3NrYihzZW50X3NrYiwgJmR1bW15X3dyYikgLSAxLCB0eHEtPmxlbik7CisJCWJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgbGFzdF9pbmRleCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiZV90eF9xdWV1ZXNfZGVzdHJveShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcTsKKworCXEgPSAmYWRhcHRlci0+dHhfb2JqLnE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX1RYUSk7CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKKworCXEgPSAmYWRhcHRlci0+dHhfb2JqLmNxOworCWlmIChxLT5jcmVhdGVkKQorCQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBxLCBRVFlQRV9DUSk7CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKKworCS8qIE5vIG1vcmUgdHggY29tcGxldGlvbnMgY2FuIGJlIHJjdmQgbm93OyBjbGVhbiB1cCBpZiB0aGVyZSBhcmUKKwkgKiBhbnkgcGVuZGluZyBjb21wbGV0aW9ucyBvciBwZW5kaW5nIHR4IHJlcXVlc3RzICovCisJYmVfdHhfcV9jbGVhbihhZGFwdGVyKTsKKworCXEgPSAmYWRhcHRlci0+dHhfZXEucTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfRVEpOworCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7Cit9CisKK3N0YXRpYyBpbnQgYmVfdHhfcXVldWVzX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsICpxLCAqY3E7CisKKwlhZGFwdGVyLT50eF9lcS5tYXhfZXFkID0gMDsKKwlhZGFwdGVyLT50eF9lcS5taW5fZXFkID0gMDsKKwlhZGFwdGVyLT50eF9lcS5jdXJfZXFkID0gOTY7CisJYWRhcHRlci0+dHhfZXEuZW5hYmxlX2FpYyA9IGZhbHNlOworCS8qIEFsbG9jIFR4IEV2ZW50IHF1ZXVlICovCisJZXEgPSAmYWRhcHRlci0+dHhfZXEucTsKKwlpZiAoYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgZXEsIEVWTlRfUV9MRU4sIHNpemVvZihzdHJ1Y3QgYmVfZXFfZW50cnkpKSkKKwkJcmV0dXJuIC0xOworCisJLyogQXNrIEJFIHRvIGNyZWF0ZSBUeCBFdmVudCBxdWV1ZSAqLworCWlmIChiZV9jbWRfZXFfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBlcSwgYWRhcHRlci0+dHhfZXEuY3VyX2VxZCkpCisJCWdvdG8gdHhfZXFfZnJlZTsKKwkvKiBBbGxvYyBUWCBldGggY29tcGwgcXVldWUgKi8KKwljcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CisJaWYgKGJlX3F1ZXVlX2FsbG9jKGFkYXB0ZXIsIGNxLCBUWF9DUV9MRU4sCisJCQlzaXplb2Yoc3RydWN0IGJlX2V0aF90eF9jb21wbCkpKQorCQlnb3RvIHR4X2VxX2Rlc3Ryb3k7CisKKwkvKiBBc2sgQkUgdG8gY3JlYXRlIFR4IGV0aCBjb21wbCBxdWV1ZSAqLworCWlmIChiZV9jbWRfY3FfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMykpCisJCWdvdG8gdHhfY3FfZnJlZTsKKworCS8qIEFsbG9jIFRYIGV0aCBxdWV1ZSAqLworCXEgPSAmYWRhcHRlci0+dHhfb2JqLnE7CisJaWYgKGJlX3F1ZXVlX2FsbG9jKGFkYXB0ZXIsIHEsIFRYX1FfTEVOLCBzaXplb2Yoc3RydWN0IGJlX2V0aF93cmIpKSkKKwkJZ290byB0eF9jcV9kZXN0cm95OworCisJLyogQXNrIEJFIHRvIGNyZWF0ZSBUeCBldGggcXVldWUgKi8KKwlpZiAoYmVfY21kX3R4cV9jcmVhdGUoJmFkYXB0ZXItPmN0cmwsIHEsIGNxKSkKKwkJZ290byB0eF9xX2ZyZWU7CisJcmV0dXJuIDA7CisKK3R4X3FfZnJlZToKKwliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwordHhfY3FfZGVzdHJveToKKwliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBjcSwgUVRZUEVfQ1EpOwordHhfY3FfZnJlZToKKwliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIGNxKTsKK3R4X2VxX2Rlc3Ryb3k6CisJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgZXEsIFFUWVBFX0VRKTsKK3R4X2VxX2ZyZWU6CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBlcSk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBiZV9yeF9xdWV1ZXNfZGVzdHJveShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcTsKKworCXEgPSAmYWRhcHRlci0+cnhfb2JqLnE7CisJaWYgKHEtPmNyZWF0ZWQpIHsKKwkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfUlhRKTsKKwkJYmVfcnhfcV9jbGVhbihhZGFwdGVyKTsKKwl9CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKKworCXEgPSAmYWRhcHRlci0+cnhfb2JqLmNxOworCWlmIChxLT5jcmVhdGVkKQorCQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBxLCBRVFlQRV9DUSk7CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKKworCXEgPSAmYWRhcHRlci0+cnhfZXEucTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfRVEpOworCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7Cit9CisKK3N0YXRpYyBpbnQgYmVfcnhfcXVldWVzX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsICpxLCAqY3E7CisJaW50IHJjOworCisJYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FOworCWFkYXB0ZXItPmJpZ19wYWdlX3NpemUgPSAoMSA8PCBnZXRfb3JkZXIocnhfZnJhZ19zaXplKSkgKiBQQUdFX1NJWkU7CisJYWRhcHRlci0+cnhfZXEubWF4X2VxZCA9IEJFX01BWF9FUUQ7CisJYWRhcHRlci0+cnhfZXEubWluX2VxZCA9IDA7CisJYWRhcHRlci0+cnhfZXEuY3VyX2VxZCA9IDA7CisJYWRhcHRlci0+cnhfZXEuZW5hYmxlX2FpYyA9IHRydWU7CisKKwkvKiBBbGxvYyBSeCBFdmVudCBxdWV1ZSAqLworCWVxID0gJmFkYXB0ZXItPnJ4X2VxLnE7CisJcmMgPSBiZV9xdWV1ZV9hbGxvYyhhZGFwdGVyLCBlcSwgRVZOVF9RX0xFTiwKKwkJCQlzaXplb2Yoc3RydWN0IGJlX2VxX2VudHJ5KSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBBc2sgQkUgdG8gY3JlYXRlIFJ4IEV2ZW50IHF1ZXVlICovCisJcmMgPSBiZV9jbWRfZXFfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBlcSwgYWRhcHRlci0+cnhfZXEuY3VyX2VxZCk7CisJaWYgKHJjKQorCQlnb3RvIHJ4X2VxX2ZyZWU7CisKKwkvKiBBbGxvYyBSWCBldGggY29tcGwgcXVldWUgKi8KKwljcSA9ICZhZGFwdGVyLT5yeF9vYmouY3E7CisJcmMgPSBiZV9xdWV1ZV9hbGxvYyhhZGFwdGVyLCBjcSwgUlhfQ1FfTEVOLAorCQkJc2l6ZW9mKHN0cnVjdCBiZV9ldGhfcnhfY29tcGwpKTsKKwlpZiAocmMpCisJCWdvdG8gcnhfZXFfZGVzdHJveTsKKworCS8qIEFzayBCRSB0byBjcmVhdGUgUnggZXRoIGNvbXBsIHF1ZXVlICovCisJcmMgPSBiZV9jbWRfY3FfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMyk7CisJaWYgKHJjKQorCQlnb3RvIHJ4X2NxX2ZyZWU7CisKKwkvKiBBbGxvYyBSWCBldGggcXVldWUgKi8KKwlxID0gJmFkYXB0ZXItPnJ4X29iai5xOworCXJjID0gYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgcSwgUlhfUV9MRU4sIHNpemVvZihzdHJ1Y3QgYmVfZXRoX3J4X2QpKTsKKwlpZiAocmMpCisJCWdvdG8gcnhfY3FfZGVzdHJveTsKKworCS8qIEFzayBCRSB0byBjcmVhdGUgUnggZXRoIHF1ZXVlICovCisJcmMgPSBiZV9jbWRfcnhxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgcSwgY3EtPmlkLCByeF9mcmFnX3NpemUsCisJCUJFX01BWF9KVU1CT19GUkFNRV9TSVpFLCBhZGFwdGVyLT5pZl9oYW5kbGUsIGZhbHNlKTsKKwlpZiAocmMpCisJCWdvdG8gcnhfcV9mcmVlOworCisJcmV0dXJuIDA7CityeF9xX2ZyZWU6CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKK3J4X2NxX2Rlc3Ryb3k6CisJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgY3EsIFFUWVBFX0NRKTsKK3J4X2NxX2ZyZWU6CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBjcSk7CityeF9lcV9kZXN0cm95OgorCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIGVxLCBRVFlQRV9FUSk7CityeF9lcV9mcmVlOgorCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgZXEpOworCXJldHVybiByYzsKK30KK3N0YXRpYyBib29sIGV2ZW50X2dldChzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmosIHUxNiAqcmlkKQoreworCXN0cnVjdCBiZV9lcV9lbnRyeSAqZW50cnkgPSBxdWV1ZV90YWlsX25vZGUoJmVxX29iai0+cSk7CisJdTMyIGV2dCA9IGVudHJ5LT5ldnQ7CisKKwlpZiAoIWV2dCkKKwkJcmV0dXJuIGZhbHNlOworCisJZXZ0ID0gbGUzMl90b19jcHUoZXZ0KTsKKwkqcmlkID0gKGV2dCA+PiBFUV9FTlRSWV9SRVNfSURfU0hJRlQpICYgRVFfRU5UUllfUkVTX0lEX01BU0s7CisJZW50cnktPmV2dCA9IDA7CisJcXVldWVfdGFpbF9pbmMoJmVxX29iai0+cSk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgZXZlbnRfaGFuZGxlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQlzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCit7CisJdTE2IHJpZCA9IDAsIG51bSA9IDA7CisKKwl3aGlsZSAoZXZlbnRfZ2V0KGVxX29iaiwgJnJpZCkpCisJCW51bSsrOworCisJLyogV2UgY2FuIHNlZSBhbiBpbnRlcnJ1cHQgYW5kIG5vIGV2ZW50ICovCisJYmVfZXFfbm90aWZ5KGN0cmwsIGVxX29iai0+cS5pZCwgdHJ1ZSwgdHJ1ZSwgbnVtKTsKKwlpZiAobnVtKQorCQluYXBpX3NjaGVkdWxlKCZlcV9vYmotPm5hcGkpOworCisJcmV0dXJuIG51bTsKK30KKworc3RhdGljIGlycXJldHVybl90IGJlX2ludHgoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gZGV2OworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKKwlpbnQgcngsIHR4OworCisJdHggPSBldmVudF9oYW5kbGUoY3RybCwgJmFkYXB0ZXItPnR4X2VxKTsKKwlyeCA9IGV2ZW50X2hhbmRsZShjdHJsLCAmYWRhcHRlci0+cnhfZXEpOworCisJaWYgKHJ4IHx8IHR4KQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJZWxzZQorCQlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiZV9tc2l4X3J4KGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGRldjsKKworCWV2ZW50X2hhbmRsZSgmYWRhcHRlci0+Y3RybCwgJmFkYXB0ZXItPnJ4X2VxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGJlX21zaXhfdHgoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gZGV2OworCisJZXZlbnRfaGFuZGxlKCZhZGFwdGVyLT5jdHJsLCAmYWRhcHRlci0+dHhfZXEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZG9fbHJvKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCkKK3sKKwlpbnQgZXJyID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGVyciwgcnhjcCk7CisJaW50IHRjcF9mcmFtZSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB0Y3BmLCByeGNwKTsKKworCWlmIChlcnIpCisJCWRydnJfc3RhdHMoYWRhcHRlciktPmJlX3J4Y3BfZXJyKys7CisKKwlyZXR1cm4gKCF0Y3BfZnJhbWUgfHwgZXJyIHx8IChhZGFwdGVyLT5tYXhfcnhfY29hbCA8PSAxKSkgPworCQlmYWxzZSA6IHRydWU7Cit9CisKK2ludCBiZV9wb2xsX3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYmVfZXFfb2JqLCBuYXBpKTsKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZihyeF9lcSwgc3RydWN0IGJlX2FkYXB0ZXIsIHJ4X2VxKTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhfY3EgPSAmYWRhcHRlci0+cnhfb2JqLmNxOworCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3A7CisJdTMyIHdvcmtfZG9uZTsKKworCWZvciAod29ya19kb25lID0gMDsgd29ya19kb25lIDwgYnVkZ2V0OyB3b3JrX2RvbmUrKykgeworCQlyeGNwID0gYmVfcnhfY29tcGxfZ2V0KGFkYXB0ZXIpOworCQlpZiAoIXJ4Y3ApCisJCQlicmVhazsKKworCQlpZiAoZG9fbHJvKGFkYXB0ZXIsIHJ4Y3ApKQorCQkJYmVfcnhfY29tcGxfcHJvY2Vzc19scm8oYWRhcHRlciwgcnhjcCk7CisJCWVsc2UKKwkJCWJlX3J4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgcnhjcCk7CisJfQorCisJbHJvX2ZsdXNoX2FsbCgmYWRhcHRlci0+cnhfb2JqLmxyb19tZ3IpOworCisJLyogUmVmaWxsIHRoZSBxdWV1ZSAqLworCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+cnhfb2JqLnEudXNlZCkgPCBSWF9GUkFHU19SRUZJTExfV00pCisJCWJlX3Bvc3RfcnhfZnJhZ3MoYWRhcHRlcik7CisKKwkvKiBBbGwgY29uc3VtZWQgKi8KKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWJlX2NxX25vdGlmeSgmYWRhcHRlci0+Y3RybCwgcnhfY3EtPmlkLCB0cnVlLCB3b3JrX2RvbmUpOworCX0gZWxzZSB7CisJCS8qIE1vcmUgdG8gYmUgY29uc3VtZWQ7IGNvbnRpbnVlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLworCQliZV9jcV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHJ4X2NxLT5pZCwgZmFsc2UsIHdvcmtfZG9uZSk7CisJfQorCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKy8qIEZvciBUWCB3ZSBkb24ndCBob25vdXIgYnVkZ2V0OyBjb25zdW1lIGV2ZXJ5dGhpbmcgKi8KK2ludCBiZV9wb2xsX3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYmVfZXFfb2JqLCBuYXBpKTsKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih0eF9lcSwgc3RydWN0IGJlX2FkYXB0ZXIsIHR4X2VxKTsKKwlzdHJ1Y3QgYmVfdHhfb2JqICp0eF9vYmogPSAmYWRhcHRlci0+dHhfb2JqOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eF9jcSA9ICZ0eF9vYmotPmNxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmdHhfb2JqLT5xOworCXN0cnVjdCBiZV9ldGhfdHhfY29tcGwgKnR4Y3A7CisJdTMyIG51bV9jbXBsID0gMDsKKwl1MTYgZW5kX2lkeDsKKworCXdoaWxlICgodHhjcCA9IGJlX3R4X2NvbXBsX2dldChhZGFwdGVyKSkpIHsKKwkJZW5kX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3R4X2NvbXBsLAorCQkJCQl3cmJfaW5kZXgsIHR4Y3ApOworCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOworCQludW1fY21wbCsrOworCX0KKworCS8qIEFzIFR4IHdyYnMgaGF2ZSBiZWVuIGZyZWVkIHVwLCB3YWtlIHVwIG5ldGRldiBxdWV1ZSBpZgorCSAqIGl0IHdhcyBzdG9wcGVkIGR1ZSB0byBsYWNrIG9mIHR4IHdyYnMuCisJICovCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoYWRhcHRlci0+bmV0ZGV2KSAmJgorCQkJYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkgPCB0eHEtPmxlbiAvIDIpIHsKKwkJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCX0KKworCW5hcGlfY29tcGxldGUobmFwaSk7CisKKwliZV9jcV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHR4X2NxLT5pZCwgdHJ1ZSwgbnVtX2NtcGwpOworCisJZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfdHhfZXZlbnRzKys7CisJZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfdHhfY29tcGwgKz0gbnVtX2NtcGw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgYmVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmVfYWRhcHRlciwgd29yay53b3JrKTsKKwlpbnQgc3RhdHVzOworCisJLyogQ2hlY2sgbGluayAqLworCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyKTsKKworCS8qIEdldCBTdGF0cyAqLworCXN0YXR1cyA9IGJlX2NtZF9nZXRfc3RhdHMoJmFkYXB0ZXItPmN0cmwsICZhZGFwdGVyLT5zdGF0cy5jbWQpOworCWlmICghc3RhdHVzKQorCQluZXRkZXZfc3RhdHNfdXBkYXRlKGFkYXB0ZXIpOworCisJLyogU2V0IEVRIGRlbGF5ICovCisJYmVfcnhfZXFkX3VwZGF0ZShhZGFwdGVyKTsKKworCWJlX3R4X3JhdGVfdXBkYXRlKGFkYXB0ZXIpOworCWJlX3J4X3JhdGVfdXBkYXRlKGFkYXB0ZXIpOworCisJaWYgKGFkYXB0ZXItPnJ4X3Bvc3Rfc3RhcnZlZCkgeworCQlhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQgPSBmYWxzZTsKKwkJYmVfcG9zdF9yeF9mcmFncyhhZGFwdGVyKTsKKwl9CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworfQorCitzdGF0aWMgdm9pZCBiZV9tc2l4X2VuYWJsZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgc3RhdHVzOworCisJZm9yIChpID0gMDsgaSA8IEJFX05VTV9NU0lYX1ZFQ1RPUlM7IGkrKykKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKKworCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCisJCUJFX05VTV9NU0lYX1ZFQ1RPUlMpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJYWRhcHRlci0+bXNpeF9lbmFibGVkID0gdHJ1ZTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJlX21zaXhfdmVjX2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVxX2lkKQoreworCXJldHVybiBhZGFwdGVyLT5tc2l4X2VudHJpZXNbZXFfaWQgLQorCQkJOCAqIGFkYXB0ZXItPmN0cmwucGNpX2Z1bmNdLnZlY3RvcjsKK30KKworc3RhdGljIGludCBiZV9tc2l4X3JlZ2lzdGVyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CisJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CisJaW50IHN0YXR1cywgdmVjOworCisJc3ByaW50Zih0eF9lcS0+ZGVzYywgIiVzLXR4IiwgbmV0ZGV2LT5uYW1lKTsKKwl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEtPnEuaWQpOworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHZlYywgYmVfbXNpeF90eCwgMCwgdHhfZXEtPmRlc2MsIGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJc3ByaW50ZihyeF9lcS0+ZGVzYywgIiVzLXJ4IiwgbmV0ZGV2LT5uYW1lKTsKKwl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgcnhfZXEtPnEuaWQpOworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHZlYywgYmVfbXNpeF9yeCwgMCwgcnhfZXEtPmRlc2MsIGFkYXB0ZXIpOworCWlmIChzdGF0dXMpIHsgLyogRnJlZSBUWCBJUlEgKi8KKwkJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHR4X2VxLT5xLmlkKTsKKwkJZnJlZV9pcnEodmVjLCBhZGFwdGVyKTsKKwkJZ290byBlcnI7CisJfQorCXJldHVybiAwOworZXJyOgorCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCSJNU0lYIFJlcXVlc3QgSVJRIGZhaWxlZCAtIGVyciAlZFxuIiwgc3RhdHVzKTsKKwlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOworCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IGZhbHNlOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYmVfaXJxX3JlZ2lzdGVyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IHN0YXR1czsKKworCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwkJc3RhdHVzID0gYmVfbXNpeF9yZWdpc3RlcihhZGFwdGVyKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJZ290byBkb25lOworCX0KKworCS8qIElOVHggKi8KKwluZXRkZXYtPmlycSA9IGFkYXB0ZXItPnBkZXYtPmlycTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShuZXRkZXYtPmlycSwgYmVfaW50eCwgSVJRRl9TSEFSRUQsIG5ldGRldi0+bmFtZSwKKwkJCWFkYXB0ZXIpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIklOVHggcmVxdWVzdCBJUlEgZmFpbGVkIC0gZXJyICVkXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KK2RvbmU6CisJYWRhcHRlci0+aXNyX3JlZ2lzdGVyZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiZV9pcnFfdW5yZWdpc3RlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCB2ZWM7CisKKwlpZiAoIWFkYXB0ZXItPmlzcl9yZWdpc3RlcmVkKQorCQlyZXR1cm47CisKKwkvKiBJTlR4ICovCisJaWYgKCFhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwkJZnJlZV9pcnEobmV0ZGV2LT5pcnEsIGFkYXB0ZXIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogTVNJeCAqLworCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBhZGFwdGVyLT50eF9lcS5xLmlkKTsKKwlmcmVlX2lycSh2ZWMsIGFkYXB0ZXIpOworCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBhZGFwdGVyLT5yeF9lcS5xLmlkKTsKKwlmcmVlX2lycSh2ZWMsIGFkYXB0ZXIpOworZG9uZToKKwlhZGFwdGVyLT5pc3JfcmVnaXN0ZXJlZCA9IGZhbHNlOworCXJldHVybjsKK30KKworc3RhdGljIGludCBiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKKwlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKKwlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKKwl1MzIgaWZfZmxhZ3M7CisJaW50IHN0YXR1czsKKworCWlmX2ZsYWdzID0gQkVfSUZfRkxBR1NfQlJPQURDQVNUIHwgQkVfSUZfRkxBR1NfUFJPTUlTQ1VPVVMgfAorCQlCRV9JRl9GTEFHU19NQ0FTVF9QUk9NSVNDVU9VUyB8IEJFX0lGX0ZMQUdTX1VOVEFHR0VEIHwKKwkJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKKwlzdGF0dXMgPSBiZV9jbWRfaWZfY3JlYXRlKGN0cmwsIGlmX2ZsYWdzLCBuZXRkZXYtPmRldl9hZGRyLAorCQkJZmFsc2UvKiBwbWFjX2ludmFsaWQgKi8sICZhZGFwdGVyLT5pZl9oYW5kbGUsCisJCQkmYWRhcHRlci0+cG1hY19pZCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGRvX25vbmU7CisKKwliZV92aWRfY29uZmlnKG5ldGRldik7CisKKwlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChjdHJsLCB0cnVlLCB0cnVlKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gaWZfZGVzdHJveTsKKworCXN0YXR1cyA9IGJlX3R4X3F1ZXVlc19jcmVhdGUoYWRhcHRlcik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGlmX2Rlc3Ryb3k7CisKKwlzdGF0dXMgPSBiZV9yeF9xdWV1ZXNfY3JlYXRlKGFkYXB0ZXIpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byB0eF9xc19kZXN0cm95OworCisJLyogRmlyc3QgdGltZSBwb3N0aW5nICovCisJYmVfcG9zdF9yeF9mcmFncyhhZGFwdGVyKTsKKworCW5hcGlfZW5hYmxlKCZyeF9lcS0+bmFwaSk7CisJbmFwaV9lbmFibGUoJnR4X2VxLT5uYXBpKTsKKworCWJlX2lycV9yZWdpc3RlcihhZGFwdGVyKTsKKworCWJlX2ludHJfc2V0KGN0cmwsIHRydWUpOworCisJLyogVGhlIGV2dCBxdWV1ZXMgYXJlIGNyZWF0ZWQgaW4gdGhlIHVuYXJtZWQgc3RhdGU7IGFybSB0aGVtICovCisJYmVfZXFfbm90aWZ5KGN0cmwsIHJ4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CisJYmVfZXFfbm90aWZ5KGN0cmwsIHR4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CisKKwkvKiBUaGUgY29tcGwgcXVldWVzIGFyZSBjcmVhdGVkIGluIHRoZSB1bmFybWVkIHN0YXRlOyBhcm0gdGhlbSAqLworCWJlX2NxX25vdGlmeShjdHJsLCBhZGFwdGVyLT5yeF9vYmouY3EuaWQsIHRydWUsIDApOworCWJlX2NxX25vdGlmeShjdHJsLCBhZGFwdGVyLT50eF9vYmouY3EuaWQsIHRydWUsIDApOworCisJYmVfbGlua19zdGF0dXNfdXBkYXRlKGFkYXB0ZXIpOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCXJldHVybiAwOworCit0eF9xc19kZXN0cm95OgorCWJlX3R4X3F1ZXVlc19kZXN0cm95KGFkYXB0ZXIpOworaWZfZGVzdHJveToKKwliZV9jbWRfaWZfZGVzdHJveShjdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUpOworZG9fbm9uZToKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGJlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKKwlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKKwlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKKwlpbnQgdmVjOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+d29yayk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwlhZGFwdGVyLT5saW5rLnNwZWVkID0gUEhZX0xJTktfU1BFRURfWkVSTzsKKworCWJlX2ludHJfc2V0KGN0cmwsIGZhbHNlKTsKKworCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwkJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHR4X2VxLT5xLmlkKTsKKwkJc3luY2hyb25pemVfaXJxKHZlYyk7CisJCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCByeF9lcS0+cS5pZCk7CisJCXN5bmNocm9uaXplX2lycSh2ZWMpOworCX0gZWxzZSB7CisJCXN5bmNocm9uaXplX2lycShuZXRkZXYtPmlycSk7CisJfQorCWJlX2lycV91bnJlZ2lzdGVyKGFkYXB0ZXIpOworCisJbmFwaV9kaXNhYmxlKCZyeF9lcS0+bmFwaSk7CisJbmFwaV9kaXNhYmxlKCZ0eF9lcS0+bmFwaSk7CisKKwliZV9yeF9xdWV1ZXNfZGVzdHJveShhZGFwdGVyKTsKKwliZV90eF9xdWV1ZXNfZGVzdHJveShhZGFwdGVyKTsKKworCWJlX2NtZF9pZl9kZXN0cm95KGN0cmwsIGFkYXB0ZXItPmlmX2hhbmRsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVfZ2V0X2ZyYWdfaGVhZGVyKHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWcsIHZvaWQgKiptYWNfaGRyLAorCQkJCXZvaWQgKippcF9oZHIsIHZvaWQgKip0Y3B1ZHBfaGRyLAorCQkJCXU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBldGhoZHIgKmVoOworCXN0cnVjdCB2bGFuX2V0aGhkciAqdmVoOworCXN0cnVjdCBpcGhkciAqaXBoOworCXU4ICp2YSA9IHBhZ2VfYWRkcmVzcyhmcmFnLT5wYWdlKSArIGZyYWctPnBhZ2Vfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbGxfaGxlbjsKKworCXByZWZldGNoKHZhKTsKKwllaCA9IChzdHJ1Y3QgZXRoaGRyICopdmE7CisJKm1hY19oZHIgPSBlaDsKKwlsbF9obGVuID0gRVRIX0hMRU47CisJaWYgKGVoLT5oX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkgeworCQlpZiAoZWgtPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJCQl2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopdmE7CisJCQlpZiAodmVoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWxsX2hsZW4gKz0gVkxBTl9ITEVOOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNDsKKwlpcGggPSAoc3RydWN0IGlwaGRyICopKHZhICsgbGxfaGxlbik7CisJKmlwX2hkciA9IGlwaDsKKwlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKKwkJcmV0dXJuIC0xOworCSpoZHJfZmxhZ3MgfD0gTFJPX1RDUDsKKwkqdGNwdWRwX2hkciA9ICh1OCAqKSAoKmlwX2hkcikgKyAoaXBoLT5paGwgPDwgMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmVfbHJvX2luaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyOworCisJbHJvX21nciA9ICZhZGFwdGVyLT5yeF9vYmoubHJvX21ncjsKKwlscm9fbWdyLT5kZXYgPSBuZXRkZXY7CisJbHJvX21nci0+ZmVhdHVyZXMgPSBMUk9fRl9OQVBJOworCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWxyb19tZ3ItPmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJbHJvX21nci0+bWF4X2Rlc2MgPSBCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOworCWxyb19tZ3ItPmxyb19hcnIgPSBhZGFwdGVyLT5yeF9vYmoubHJvX2Rlc2M7CisJbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gYmVfZ2V0X2ZyYWdfaGVhZGVyOworCWxyb19tZ3ItPm1heF9hZ2dyID0gQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBiZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBiZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYmVfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBiZV9nZXRfc3RhdHMsCisJLm5kb19zZXRfcnhfbW9kZQk9IGJlX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGJlX21hY19hZGRyX3NldCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYmVfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBiZV92bGFuX3JlZ2lzdGVyLAorCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gYmVfdmxhbl9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IGJlX3ZsYW5fcmVtX3ZpZCwKK307CisKK3N0YXRpYyB2b2lkIGJlX25ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9UU08gfAorCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwgTkVUSUZfRl9JUF9DU1VNIHwKKwkJTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzY7CisKKwluZXRkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CisKKwlCRV9TRVRfTkVUREVWX09QUyhuZXRkZXYsICZiZV9uZXRkZXZfb3BzKTsKKworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZiZV9ldGh0b29sX29wcyk7CisKKwliZV9scm9faW5pdChhZGFwdGVyLCBuZXRkZXYpOworCisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+cnhfZXEubmFwaSwgYmVfcG9sbF9yeCwKKwkJQkVfTkFQSV9XRUlHSFQpOworCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPnR4X2VxLm5hcGksIGJlX3BvbGxfdHgsCisJCUJFX05BUElfV0VJR0hUKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworfQorCitzdGF0aWMgdm9pZCBiZV91bm1hcF9wY2lfYmFycyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJaWYgKGN0cmwtPmNzcikKKwkJaW91bm1hcChjdHJsLT5jc3IpOworCWlmIChjdHJsLT5kYikKKwkJaW91bm1hcChjdHJsLT5kYik7CisJaWYgKGN0cmwtPnBjaWNmZykKKwkJaW91bm1hcChjdHJsLT5wY2ljZmcpOworfQorCitzdGF0aWMgaW50IGJlX21hcF9wY2lfYmFycyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1OCBfX2lvbWVtICphZGRyOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMiksCisJCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIDIpKTsKKwlpZiAoYWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhZGFwdGVyLT5jdHJsLmNzciA9IGFkZHI7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCA0KSwKKwkJCTEyOCAqIDEwMjQpOworCWlmIChhZGRyID09IE5VTEwpCisJCWdvdG8gcGNpX21hcF9lcnI7CisJYWRhcHRlci0+Y3RybC5kYiA9IGFkZHI7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCAxKSwKKwkJCXBjaV9yZXNvdXJjZV9sZW4oYWRhcHRlci0+cGRldiwgMSkpOworCWlmIChhZGRyID09IE5VTEwpCisJCWdvdG8gcGNpX21hcF9lcnI7CisJYWRhcHRlci0+Y3RybC5wY2ljZmcgPSBhZGRyOworCisJcmV0dXJuIDA7CitwY2lfbWFwX2VycjoKKwliZV91bm1hcF9wY2lfYmFycyhhZGFwdGVyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCitzdGF0aWMgdm9pZCBiZV9jdHJsX2NsZWFudXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1lbSA9ICZhZGFwdGVyLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQ7CisKKwliZV91bm1hcF9wY2lfYmFycyhhZGFwdGVyKTsKKworCWlmIChtZW0tPnZhKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIG1lbS0+c2l6ZSwKKwkJCW1lbS0+dmEsIG1lbS0+ZG1hKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgbWJveCByZXF1aXJlZCB0byBzZW5kIGNtZHMgdG8gQkUgKi8KK3N0YXRpYyBpbnQgYmVfY3RybF9pbml0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW1fYWxsb2MgPSAmY3RybC0+bWJveF9tZW1fYWxsb2NlZDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW1fYWxpZ24gPSAmY3RybC0+bWJveF9tZW07CisJaW50IHN0YXR1czsKKwl1MzIgdmFsOworCisJc3RhdHVzID0gYmVfbWFwX3BjaV9iYXJzKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwltYm94X21lbV9hbGxvYy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpICsgMTY7CisJbWJveF9tZW1fYWxsb2MtPnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQltYm94X21lbV9hbGxvYy0+c2l6ZSwgJm1ib3hfbWVtX2FsbG9jLT5kbWEpOworCWlmICghbWJveF9tZW1fYWxsb2MtPnZhKSB7CisJCWJlX3VubWFwX3BjaV9iYXJzKGFkYXB0ZXIpOworCQlyZXR1cm4gLTE7CisJfQorCW1ib3hfbWVtX2FsaWduLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCk7CisJbWJveF9tZW1fYWxpZ24tPnZhID0gUFRSX0FMSUdOKG1ib3hfbWVtX2FsbG9jLT52YSwgMTYpOworCW1ib3hfbWVtX2FsaWduLT5kbWEgPSBQVFJfQUxJR04obWJveF9tZW1fYWxsb2MtPmRtYSwgMTYpOworCW1lbXNldChtYm94X21lbV9hbGlnbi0+dmEsIDAsIHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpKTsKKwlzcGluX2xvY2tfaW5pdCgmY3RybC0+Y21kX2xvY2spOworCisJdmFsID0gaW9yZWFkMzIoY3RybC0+cGNpY2ZnICsgUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVCk7CisJY3RybC0+cGNpX2Z1bmMgPSAodmFsID4+IE1FTUJBUl9DVFJMX0lOVF9DVFJMX1BGVU5DX1NISUZUKSAmCisJCQkJCU1FTUJBUl9DVFJMX0lOVF9DVFJMX1BGVU5DX01BU0s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3N0YXRzX2NsZWFudXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX3N0YXRzX29iaiAqc3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7CisJc3RydWN0IGJlX2RtYV9tZW0gKmNtZCA9ICZzdGF0cy0+Y21kOworCisJaWYgKGNtZC0+dmEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgY21kLT5zaXplLAorCQkJY21kLT52YSwgY21kLT5kbWEpOworfQorCitzdGF0aWMgaW50IGJlX3N0YXRzX2luaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX3N0YXRzX29iaiAqc3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7CisJc3RydWN0IGJlX2RtYV9tZW0gKmNtZCA9ICZzdGF0cy0+Y21kOworCisJY21kLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfcmVxX2dldF9zdGF0cyk7CisJY21kLT52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGNtZC0+c2l6ZSwgJmNtZC0+ZG1hKTsKKwlpZiAoY21kLT52YSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFhZGFwdGVyKQorCQlyZXR1cm47CisKKwl1bnJlZ2lzdGVyX25ldGRldihhZGFwdGVyLT5uZXRkZXYpOworCisJYmVfc3RhdHNfY2xlYW51cChhZGFwdGVyKTsKKworCWJlX2N0cmxfY2xlYW51cChhZGFwdGVyKTsKKworCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwkJYWRhcHRlci0+bXNpeF9lbmFibGVkID0gZmFsc2U7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJZnJlZV9uZXRkZXYoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworc3RhdGljIGludCBiZV9od191cChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGJlX2NtZF9QT1NUKGN0cmwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlzdGF0dXMgPSBiZV9jbWRfZ2V0X2Z3X3ZlcihjdHJsLCBhZGFwdGVyLT5md192ZXIpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlzdGF0dXMgPSBiZV9jbWRfcXVlcnlfZndfY2ZnKGN0cmwsICZhZGFwdGVyLT5wb3J0X251bSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGRldl9pZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmw7CisJdTggbWFjW0VUSF9BTEVOXTsKKworCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZG9fbm9uZTsKKworCXN0YXR1cyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZGlzYWJsZV9kZXY7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGJlX2FkYXB0ZXIpKTsKKwlpZiAobmV0ZGV2ID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byByZWxfcmVnOworCX0KKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5wZGV2ID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCisJYmVfbXNpeF9lbmFibGUoYWRhcHRlcik7CisKKwlzdGF0dXMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKKwlpZiAoIXN0YXR1cykgeworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHNldCBQQ0kgRE1BIE1hc2tcbiIpOworCQkJZ290byBmcmVlX25ldGRldjsKKwkJfQorCX0KKworCWN0cmwgPSAmYWRhcHRlci0+Y3RybDsKKwlzdGF0dXMgPSBiZV9jdHJsX2luaXQoYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBmcmVlX25ldGRldjsKKworCXN0YXR1cyA9IGJlX3N0YXRzX2luaXQoYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBjdHJsX2NsZWFuOworCisJc3RhdHVzID0gYmVfaHdfdXAoYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBzdGF0c19jbGVhbjsKKworCXN0YXR1cyA9IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShjdHJsLCBtYWMsIE1BQ19BRERSRVNTX1RZUEVfTkVUV09SSywKKwkJCXRydWUgLyogcGVybWFuZW50ICovLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHN0YXRzX2NsZWFuOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBtYWMsIEVUSF9BTEVOKTsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT53b3JrLCBiZV93b3JrZXIpOworCWJlX25ldGRldl9pbml0KG5ldGRldik7CisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmYWRhcHRlci0+cGRldi0+ZGV2KTsKKworCXN0YXR1cyA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBzdGF0c19jbGVhbjsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsIEJFX05BTUUgIiBwb3J0ICVkXG4iLCBhZGFwdGVyLT5wb3J0X251bSk7CisJcmV0dXJuIDA7CisKK3N0YXRzX2NsZWFuOgorCWJlX3N0YXRzX2NsZWFudXAoYWRhcHRlcik7CitjdHJsX2NsZWFuOgorCWJlX2N0cmxfY2xlYW51cChhZGFwdGVyKTsKK2ZyZWVfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KGFkYXB0ZXItPm5ldGRldik7CityZWxfcmVnOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitkaXNhYmxlX2RldjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Citkb19ub25lOgorCWRldl93YXJuKCZwZGV2LT5kZXYsIEJFX05BTUUgIiBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSAgYWRhcHRlci0+bmV0ZGV2OworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJcnRubF9sb2NrKCk7CisJCWJlX2Nsb3NlKG5ldGRldik7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gIGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlydG5sX2xvY2soKTsKKwkJYmVfb3BlbihuZXRkZXYpOworCQlydG5sX3VubG9jaygpOworCX0KKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiZV9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBiZV9kZXZfaWRzLAorCS5wcm9iZSA9IGJlX3Byb2JlLAorCS5yZW1vdmUgPSBiZV9yZW1vdmUsCisJLnN1c3BlbmQgPSBiZV9zdXNwZW5kLAorCS5yZXN1bWUgPSBiZV9yZXN1bWUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJlX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaWYgKHJ4X2ZyYWdfc2l6ZSAhPSA4MTkyICYmIHJ4X2ZyYWdfc2l6ZSAhPSA0MDk2CisJCSYmIHJ4X2ZyYWdfc2l6ZSAhPSAyMDQ4KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKKwkJCSIgOiBNb2R1bGUgcGFyYW0gcnhfZnJhZ19zaXplIG11c3QgYmUgMjA0OC80MDk2LzgxOTIuIgorCQkJIiBVc2luZyAyMDQ4XG4iKTsKKwkJcnhfZnJhZ19zaXplID0gMjA0ODsKKwl9CisJLyogRW5zdXJlIHJ4X2ZyYWdfc2l6ZSBpcyBhbGlnbmVkIHRvIGNoYWNoZSBsaW5lICovCisJaWYgKFNLQl9EQVRBX0FMSUdOKHJ4X2ZyYWdfc2l6ZSkgIT0gcnhfZnJhZ19zaXplKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKKwkJCSIgOiBCYWQgbW9kdWxlIHBhcmFtIHJ4X2ZyYWdfc2l6ZS4gVXNpbmcgMjA0OFxuIik7CisJCXJ4X2ZyYWdfc2l6ZSA9IDIwNDg7CisJfQorCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJlX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChiZV9pbml0X21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZV9leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmVfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGJlX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JtYWMuYyBiL2RyaXZlcnMvbmV0L2JtYWMuYwppbmRleCAxYWI1ODM3Li40NGQwMTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYm1hYy5jCkBAIC0xMDYyLDcgKzEwNjIsNiBAQAogc3RhdGljIGlycXJldHVybl90IGJtYWNfbWlzY19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKLQlzdHJ1Y3QgYm1hY19kYXRhICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IGJtcmVhZChkZXYsIFNUQVRVUyk7CiAJaWYgKG1pc2NpbnRjb3VudCsrIDwgMTApIHsKIAkJWFhERUJVRygoImJtYWNfbWlzY19pbnRyXG4iKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggODQ2NmQzNS4uYWQ0NDZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTcsOCArNTcsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuOS4yIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYiAxMSwgMjAwOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjkuMyIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXJjaCAxNywgMjAwOSIKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKQEAgLTU4NTUsOSArNTg1NSw2IEBACiAJZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspIHsKIAkJbXNpeF9lbnRbaV0uZW50cnkgPSBpOwogCQltc2l4X2VudFtpXS52ZWN0b3IgPSAwOwotCi0JCXNucHJpbnRmKGJwLT5pcnFfdGJsW2ldLm5hbWUsIGxlbiwgIiVzLSVkIiwgZGV2LT5uYW1lLCBpKTsKLQkJYnAtPmlycV90YmxbaV0uaGFuZGxlciA9IGJueDJfbXNpXzFzaG90OwogCX0KIAogCXJjID0gcGNpX2VuYWJsZV9tc2l4KGJwLT5wZGV2LCBtc2l4X2VudCwgQk5YMl9NQVhfTVNJWF9WRUMpOwpAQCAtNTg2Niw4ICs1ODYzLDExIEBACiAKIAlicC0+aXJxX252ZWNzID0gbXNpeF92ZWNzOwogCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfVVNJTkdfTVNJWCB8IEJOWDJfRkxBR19PTkVfU0hPVF9NU0k7Ci0JZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspIHsKIAkJYnAtPmlycV90YmxbaV0udmVjdG9yID0gbXNpeF9lbnRbaV0udmVjdG9yOworCQlzbnByaW50ZihicC0+aXJxX3RibFtpXS5uYW1lLCBsZW4sICIlcy0lZCIsIGRldi0+bmFtZSwgaSk7CisJCWJwLT5pcnFfdGJsW2ldLmhhbmRsZXIgPSBibngyX21zaV8xc2hvdDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC5oIGIvZHJpdmVycy9uZXQvYm54MnguaAppbmRleCA0MDhlYWU3Li5hMzI5YmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKQEAgLTE2MCw3ICsxNjAsNyBAQAogI2RlZmluZSBQQUdFU19QRVJfU0dFCQkJKDEgPDwgUEFHRVNfUEVSX1NHRV9TSElGVCkKICNkZWZpbmUgU0dFX1BBR0VfU0laRQkJCVBBR0VfU0laRQogI2RlZmluZSBTR0VfUEFHRV9TSElGVAkJCVBBR0VfU0hJRlQKLSNkZWZpbmUgU0dFX1BBR0VfQUxJR04oYWRkcikJCVBBR0VfQUxJR04oYWRkcikKKyNkZWZpbmUgU0dFX1BBR0VfQUxJR04oYWRkcikJCVBBR0VfQUxJR04oKHR5cGVvZihQQUdFX1NJWkUpKWFkZHIpCiAKIC8qIFNHRSByaW5nIHJlbGF0ZWQgbWFjcm9zICovCiAjZGVmaW5lIE5VTV9SWF9TR0VfUEFHRVMJCTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGM2YjAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfZHVtcC5oCkBAIC0wLDAgKzEsNTI2IEBACisvKiBibngyeF9kdW1wLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKworLyogVGhpcyBzdHJ1Y3QgaG9sZHMgYSBzaWduYXR1cmUgdG8gZW5zdXJlIHRoZSBkdW1wIHJldHVybmVkIGZyb20gdGhlIGRyaXZlcgorICogbWF0Y2ggdGhlIG1ldGEgZGF0YSBmaWxlIGluc2VydGVkIHRvIGdyY19kdW1wLnRjbAorICogVGhlIHNpZ25hdHVyZSBpcyB0aW1lIHN0YW1wLCBkaWFnIHZlcnNpb24gYW5kIGdyY19kdW1wIHZlcnNpb24KKyAqLworCitzdHJ1Y3QgZHVtcF9zaWduIHsKKwl1MzIgdGltZV9zdGFtcDsKKwl1MzIgZGlhZ192ZXI7CisJdTMyIGdyY19kdW1wX3ZlcjsKK307CisKKyNkZWZpbmUgVFNUT1JNX1dBSVRQX0FERFIJMHgxYjhhODAKKyNkZWZpbmUgQ1NUT1JNX1dBSVRQX0FERFIJMHgyMzhhODAKKyNkZWZpbmUgWFNUT1JNX1dBSVRQX0FERFIJMHgyYjhhODAKKyNkZWZpbmUgVVNUT1JNX1dBSVRQX0FERFIJMHgzMzhhODAKKyNkZWZpbmUgVFNUT1JNX0NBTV9NT0RFCQkweDFiMTQ0MAorCisjZGVmaW5lIFJJX0UxCQkJMHgxCisjZGVmaW5lIFJJX0UxSAkJCTB4MgorI2RlZmluZSBSSV9PTkxJTkUJCTB4MTAwCisKKyNkZWZpbmUgUklfRTFfT0ZGTElORQkJKFJJX0UxKQorI2RlZmluZSBSSV9FMV9PTkxJTkUJCShSSV9FMSB8IFJJX09OTElORSkKKyNkZWZpbmUgUklfRTFIX09GRkxJTkUJCShSSV9FMUgpCisjZGVmaW5lIFJJX0UxSF9PTkxJTkUJCShSSV9FMUggfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0FMTF9PRkZMSU5FCQkoUklfRTEgfCBSSV9FMUgpCisjZGVmaW5lIFJJX0FMTF9PTkxJTkUJCShSSV9FMSB8IFJJX0UxSCB8IFJJX09OTElORSkKKworI2RlZmluZSBNQVhfVElNRVJfUEVORElORwkyMDAKKyNkZWZpbmUgVElNRVJfU0NBTl9ET05UX0NBUkUJMHhGRgorCisKK3N0cnVjdCBkdW1wX2hkciB7CisJdTMyCQkgaGRyX3NpemU7CS8qIGluIGR3b3JkcywgZXhjbHVkaW5nIHRoaXMgZmllbGQgKi8KKwlzdHJ1Y3QgZHVtcF9zaWduIGR1bXBfc2lnbjsKKwl1MzIJCSB4c3Rvcm1fd2FpdHA7CisJdTMyCQkgdHN0b3JtX3dhaXRwOworCXUzMgkJIHVzdG9ybV93YWl0cDsKKwl1MzIJCSBjc3Rvcm1fd2FpdHA7CisJdTE2CQkgaW5mbzsKKwl1OAkJIGlkbGVfY2hrOworCXU4CQkgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgcmVnX2FkZHIgeworCXUzMiBhZGRyOworCXUzMiBzaXplOworCXUxNiBpbmZvOworfTsKKworc3RydWN0IHdyZWdfYWRkciB7CisJdTMyIGFkZHI7CisJdTMyIHNpemU7CisJdTMyIHJlYWRfcmVnc19jb3VudDsKKwljb25zdCB1MzIgKnJlYWRfcmVnczsKKwl1MTYgaW5mbzsKK307CisKKworI2RlZmluZSBSRUdTX0NPVU5UCQk1NTgKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgcmVnX2FkZHJzW1JFR1NfQ09VTlRdID0geworCXsgMHgyMDAwLCAzNDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMCwgMTAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMCwgMjg3LCBSSV9BTExfT05MSU5FfSwgeyAweDM4MDAsIDMzMSwgUklfQUxMX09OTElORX0sCisJeyAweDg4MDAsIDYsIFJJX0UxX09OTElORX0sIHsgMHhhMDAwLCAyMjMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhMzg4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGEzOTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhMzljLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweGEzYzAsIDMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhM2QwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZDgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhM2UwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZTgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhM2YwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZjgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhNDAwLCA2OSwgUklfQUxMX09OTElORX0sIHsgMHhhNTE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTUyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTI4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTUzMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU2MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTY4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU3MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNWEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTVjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNWUwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTVlOCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhNWYwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTVmOCwgMTAsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTAwMDAsIDIzNiwgUklfQUxMX09OTElORX0sCisJeyAweDEwM2JjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2NjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzZGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDAsIDU3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0ZTgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0ZjQsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMCwgMTQ2LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzUwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3NjAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3NzAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDc4MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc5MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwN2EwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwN2IwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3YzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3ZDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDdlMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDg4MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwOTAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYwMDAsIDI2LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYwNzAsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MGMwLCAyNywgUklfRTFIX09OTElORX0sCisJeyAweDE2MTQwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MTYwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYxODAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxYzAsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNjIwNCwgNSwgUklfRTFIX09OTElORX0sIHsgMHgxODAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDE4MDA4LCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDIwMDAwLCAyNCwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDYwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDgwLCAxMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDJiNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDJjNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDBjLCA4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjA0MmMsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweDIwNDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjA1MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAwNCwgMTYzODMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4NDAwMDAsIDk4LCBSSV9BTExfT05MSU5FfSwgeyAweDQwMTk0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDAxYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDAxYTgsIDExLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4NDAyMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0MDAsIDQzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0YjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0YzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDRjYywgMywgUklfRTFIX09OTElORX0sIHsgMHg0MDUwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQwNTEwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNTIwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA1MzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA1NDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweDQyMjljLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyYWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDIyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjJkNCwgNSwgUklfRTFIX09OTElORX0sIHsgMHg0MjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjgwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDAwMCwgMjAsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDA1MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg1MDA3MCwgODgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDFkYywgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDFlYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMWYwLCA0LCBSSV9FMUhfT05MSU5FfSwgeyAweDUwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAyMGMsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMjgsIDYsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHg1MDI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDU0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTQwMDQsIDMzMjcsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDU4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDYwMDAwLCA3MSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYwMTM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjAxM2MsIDI0LCBSSV9FMUhfT05MSU5FfSwgeyAweDYwMjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NjEwMDQsIDUxMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHg3MDAwMCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg3MDAyMCwgMjE0OTYsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUwMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwMGMsIDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUwMWMsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwMzgsIDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUwNDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwNGMsIDEwOSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHg4NTIwMCwgMzIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUyODAsIDExMTA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweGEwMDAwLCAxNjM4NCwgUklfQUxMX09OTElORX0sIHsgMHhiMDAwMCwgMTYzODQsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhjMTAwMCwgNywgUklfQUxMX09OTElORX0sIHsgMHhjMTAyOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMxMDM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMxODAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzIwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHhjMjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyMmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyMmJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwgeyAweGMyNGM4LCAzOCwgUklfQUxMX09OTElORX0sCisJeyAweGMyNTY4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGMyNjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQwMDAsIDE2NSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0MmMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQyZTAsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YzQ0MDAsIDUxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ0ZDAsIDM4LCBSSV9BTExfT05MSU5FfSwgeyAweGM0NTcwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAwMDAsIDE5LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAwNGMsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAwNmMsIDkxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxZjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDIwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHhkMDIwYywgNywgUklfQUxMX09OTElORX0sCisJeyAweGQwMjI4LCAxOCwgUklfRTFIX09OTElORX0sIHsgMHhkMDI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMzAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDQwMDQsIDI1NTksIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ZDgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ZTAwMDAsIDIxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMDU0LCA4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAwNzQsIDg1LCBSSV9BTExfT05MSU5FfSwgeyAweGUwMWQ0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDIwYywgOCwgUklfQUxMX09OTElORX0sIHsgMHhlMDIyYywgMTgsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhlMDI4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDMwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTIwMDQsIDIwNDcsIFJJX0FMTF9PRkZMSU5FfSwgeyAweGYwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZjAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDEwMDAsIDEyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDNjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMTA0YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTA1MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxMDExMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDE4MDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDAwLCAxOCwgUklfQUxMX09OTElORX0sCisJeyAweDEwMjA1NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwNjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwODAsIDE3LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjBjOCwgOCwgUklfRTFIX09OTElORX0sCisJeyAweDEwMjQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwMDAsIDI2LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzMDc0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA4NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA5NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwOTgsIDUsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMDM4MDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDAwLCA2MywgUklfQUxMX09OTElORX0sCisJeyAweDEwNDEwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQxMTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQyMDAsIDE3LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQ1MDAsIDE5MiwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA0ODAwLCA2NCwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDkwMCwgMTkyLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTExMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTExYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MThjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2NjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2YwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2ZjLCA3NjksIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwODAwMCwgMzMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgwOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4MGEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4MGFjLCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweDEwODEwMCwgNSwgUklfQUxMX09OTElORX0sCisJeyAweDEwODEyMCwgNSwgUklfQUxMX09OTElORX0sIHsgMHgxMDgyMDAsIDc0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4NDAwLCA3NCwgUklfQUxMX09OTElORX0sIHsgMHgxMDg4MDAsIDE1MiwgUklfQUxMX09OTElORX0sCisJeyAweDEwOTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjAwMDAsIDM0NywgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU3OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA1ODgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1OTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTljLCAyMywgUklfRTFIX09OTElORX0sCisJeyAweDEyMDYxNCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxMjA2MWMsIDMwLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTIwODBjLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgxMjBhMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjIwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTI4MDAwLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTQwMDAwLCAxMTQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMWQ0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDIwMCwgNiwgUklfQUxMX09OTElORX0sCisJeyAweDE0NDAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNDgwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNGMwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTUwMDAwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTU0MDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE1ODAwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE1YzAwMCwgNywgUklfRTFIX09OTElORX0sIHsgMHgxNjEwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjEwMjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYxMDM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxODAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDAwMCwgNjAsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQwZmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MTBjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MTEwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2NDIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyNDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI2MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDI3MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyODAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQ4MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY1MDAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MjljLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjJiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2NGM4LCAzOCwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjU2OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjY4MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMDAsIDI3MCwgUklfQUxMX09OTElORX0sIHsgMHgxNjg0NDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjg0NTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4ODAwLCAxOSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODkwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORX0sCisJeyAweDE2YTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNmEwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MTZjMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2YzAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxNmUwMDAsIDE2LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTEwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDE2ZTIwMCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNmU0MDAsIDE4MywgUklfRTFIX09OTElORX0sCisJeyAweDE3MDAwMCwgOTMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMTgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMTkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDIwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDIxNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAwMDAsIDYxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDExMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTNjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTgwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgxODAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MTgxMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE4MTAxMCwgMTAyMCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYTgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhODEwMCwgMTk4NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MWFhMDA0LCA2NjU1LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MWIyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFiODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYjgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFjMDAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDEzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIyMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjU4MDAsIDE1MzYsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIyNzAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDIyNzAwNCwgMTAyMywgUklfRTFIX09GRkxJTkV9LCB7IDB4MjI4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjgxMDAsIDg2NDAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgyMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MjM4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzODI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjQwMDAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMDAwLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDE0YywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDI4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDI4MjAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgyODIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmEwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmExMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTgxMDAsIDk2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MmE5MDA0LCA3Njc5LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MmIyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJiODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYjgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJjMDAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDEzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgzMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMjU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzI4MTAwLCA1MzYsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMyODk2MCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDMyODk2NCwgODEwMywgUklfRTFIX09GRkxJTkV9LCB7IDB4MzMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzMxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDMzMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMzI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMzgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzM4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzNDAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9Cit9OworCisKKyNkZWZpbmUgSURMRVJFR1NfQ09VTlQJCTI3Nworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYWRkciBpZGxlX2FkZHJzW0lETEVSRUdTX0NPVU5UXSA9IHsKKwl7IDB4MjExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMTIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjEyYywgNCwgUklfQUxMX09OTElORX0sIHsgMHgyODE0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgxYywgMiwgUklfQUxMX09OTElORX0sIHsgMHhhMzhjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTQwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNDJjLCAxMiwgUklfQUxMX09OTElORX0sCisJeyAweGE2MDAsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTYxOCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGMwOWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzYjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDNjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDNkMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDIwMjFjLCAxMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDJhOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMmI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjA0MGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA0MWMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDE1NCwgMTQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDAxOTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDRhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MDRiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMjkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyMmEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMTYwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDUwMWQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAxZTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDIwYywgMiwgUklfQUxMX09OTElORX0sIHsgMHg1MDIxYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMDkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYwMTFjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjAxMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzEwMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMTAyYywgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjI5MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyMmIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzI1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjU1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDI5NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MmE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0MmI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQ1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDU2MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDE2YywgOCwgUklfQUxMX09OTElORX0sCisJeyAweGQwMWQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMWU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAyMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAyMGMsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDE1NCwgOCwgUklfQUxMX09OTElORX0sIHsgMHhlMDFjOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMWQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAyMGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMWMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDEwMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAxMDMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjA1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMjA4MCwgMTYsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDA0LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzMDY4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA3OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwOWMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMDQwMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0MDIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAzYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDBmYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQxMGMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDgwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTAzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTIxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTMzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2UwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwODA5NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjAxYjAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjAzMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMzZjLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNDA4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDQxNCwgMTUsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA0NzgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNTY0LCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDU3YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU4YywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA2MDgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMjA4MDgsIDEsIFJJX0UxX09OTElORX0sIHsgMHgxMjA4MGMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4MTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDgzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDgzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg2MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg2OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODg4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg5MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg5OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4YTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhjMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhjOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4ZDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhmMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhmOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA5MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA5MDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMDVjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQwMGQwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDBlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDFjOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjEwMWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYxMDJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MDE0LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDBmMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjI5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjYyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjYyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2NTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2NTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwMDgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDI4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODA1OCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODA3MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjgyMzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgyZDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MmUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MzAwLCA2NywgUklfQUxMX09OTElORX0sIHsgMHgxNjg0MTAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjg0MzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4YTAwLCAxMjgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTZlMjAwLCAxMjgsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNmU0MDQsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTZlNTg0LCA3MCwgUklfRTFIX09OTElORX0sCisJeyAweDE3MDBhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzAwYWMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNzAwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMTc0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMTg0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDBmNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDEwNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFhMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFhYTAwMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDEwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxMzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIyMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIyNzAwMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgyMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjM4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDEwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxMzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJhOTAwMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgyYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDEwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxMzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMyMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMyODk2MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgzMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzM4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MGMwLCAxLCBSSV9BTExfT05MSU5FfQorfTsKKworc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMV8wW10gPSB7IDB4MWIxMDAwIH07CisKKyNkZWZpbmUgV1JFR1NfQ09VTlRfRTEJCTEKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd3JlZ19hZGRyIHdyZWdfYWRkcnNfZTFbV1JFR1NfQ09VTlRfRTFdID0geworCXsgMHgxYjBjMDAsIDE5MiwgMSwgcmVhZF9yZWdfZTFfMCwgUklfRTFfT0ZGTElORSB9Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHJlYWRfcmVnX2UxaF8wW10gPSB7IDB4MWIxMDQwLCAweDFiMTAwMCB9OworCisjZGVmaW5lIFdSRUdTX0NPVU5UX0UxSAkJMQorc3RhdGljIGNvbnN0IHN0cnVjdCB3cmVnX2FkZHIgd3JlZ19hZGRyc19lMWhbV1JFR1NfQ09VTlRfRTFIXSA9IHsKKwl7IDB4MWIwYzAwLCAyNTYsIDIsIHJlYWRfcmVnX2UxaF8wLCBSSV9FMUhfT0ZGTElORSB9Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHVtcF9zaWduIGR1bXBfc2lnbl9hbGwgPSB7IDB4NDlhYTkzZWUsIDB4NDA4MzUsIDB4MjIgfTsKKworCisjZGVmaW5lIFRJTUVSX1JFR1NfQ09VTlRfRTEJMgorc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zdGF0dXNfcmVnc19lMVtUSU1FUl9SRUdTX0NPVU5UX0UxXSA9CisJeyAweDE2NDAxNCwgMHgxNjQwMTggfTsKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxW1RJTUVSX1JFR1NfQ09VTlRfRTFdID0KKwl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OworCisjZGVmaW5lIFRJTUVSX1JFR1NfQ09VTlRfRTFICTIKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc3RhdHVzX3JlZ3NfZTFoW1RJTUVSX1JFR1NfQ09VTlRfRTFIXSA9CisJeyAweDE2NDAxNCwgMHgxNjQwMTggfTsKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPQorCXsgMHgxNjQwZDAsIDB4MTY0MGQ0IH07CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaAppbmRleCA4YWYyNzU3Li4zOWJhMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCkBAIC0yMiwxMiArMjIsMTUgQEAKICNkZWZpbmUgSU5JVF9BU0lDCQkJMHg0CiAjZGVmaW5lIElOSVRfSEFSRFdBUkUJCQkweDcKIAotI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMQkJKDB4NTgwMCAvIDQpCi0jZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxSAkJKDB4MTAwMDAgLyA0KQotI2RlZmluZSBUU1RPUk1fSU5UTUVNX0FERFIJCTB4MWEwMDAwCi0jZGVmaW5lIENTVE9STV9JTlRNRU1fQUREUgkJMHgyMjAwMDAKLSNkZWZpbmUgWFNUT1JNX0lOVE1FTV9BRERSCQkweDJhMDAwMAotI2RlZmluZSBVU1RPUk1fSU5UTUVNX0FERFIJCTB4MzIwMDAwCisjZGVmaW5lIFRTVE9STV9JTlRNRU1fQUREUgkJVFNFTV9SRUdfRkFTVF9NRU1PUlkKKyNkZWZpbmUgQ1NUT1JNX0lOVE1FTV9BRERSCQlDU0VNX1JFR19GQVNUX01FTU9SWQorI2RlZmluZSBYU1RPUk1fSU5UTUVNX0FERFIJCVhTRU1fUkVHX0ZBU1RfTUVNT1JZCisjZGVmaW5lIFVTVE9STV9JTlRNRU1fQUREUgkJVVNFTV9SRUdfRkFTVF9NRU1PUlkKKy8qIFJBTTAgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMQkJMHg1ODAwCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxSAkJMHgxMDAwMAorI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRShicCkJKChDSElQX0lTX0UxSChicCkgPyBTVE9STV9JTlRNRU1fU0laRV9FMUggOiBcCisJCQkJCQkgICAgU1RPUk1fSU5UTUVNX1NJWkVfRTEpIC8gNCkKIAogCiAvKiBJbml0IG9wZXJhdGlvbiB0eXBlcyBhbmQgc3RydWN0dXJlcyAqLwpAQCAtMTUwLDcgKzE1Myw2IEBACiAKIHN0YXRpYyB2b2lkIGJueDJ4X3dyaXRlX2JpZ19idWYoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIHUzMiBsZW4pCiB7Ci0jaWZkZWYgVVNFX0RNQUUKIAlpbnQgb2Zmc2V0ID0gMDsKIAogCWlmIChicC0+ZG1hZV9yZWFkeSkgewpAQCAtMTY0LDI4ICsxNjYsMjggQEAKIAkJCQkgYWRkciArIG9mZnNldCwgbGVuKTsKIAl9IGVsc2UKIAkJYm54MnhfaW5pdF9zdHJfd3IoYnAsIGFkZHIsIGJwLT5ndW56aXBfYnVmLCBsZW4pOwotI2Vsc2UKLQlibngyeF9pbml0X3N0cl93cihicCwgYWRkciwgYnAtPmd1bnppcF9idWYsIGxlbik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9maWxsKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBpbnQgZmlsbCwgdTMyIGxlbikKIHsKLQlpZiAoKGxlbiAqIDQpID4gRldfQlVGX1NJWkUpIHsKLQkJQk5YMlhfRVJSKCJMQVJHRSBETUFFIE9QRVJBVElPTiAhIGFkZHIgMHgleCAgbGVuIDB4JXhcbiIsCi0JCQkgIGFkZHIsIGxlbio0KTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYnAtPmd1bnppcF9idWYsIGZpbGwsIGxlbiAqIDQpOworCXUzMiBidWZfbGVuID0gKCgobGVuICogNCkgPiBGV19CVUZfU0laRSkgPyBGV19CVUZfU0laRSA6IChsZW4gKiA0KSk7CisJdTMyIGJ1Zl9sZW4zMiA9IGJ1Zl9sZW4gLyA0OworCWludCBpOwogCi0JYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciwgbGVuKTsKKwltZW1zZXQoYnAtPmd1bnppcF9idWYsIGZpbGwsIGJ1Zl9sZW4pOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBidWZfbGVuMzIpIHsKKwkJdTMyIGN1cl9sZW4gPSBtaW4oYnVmX2xlbjMyLCBsZW4gLSBpKTsKKworCQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyICsgaSAqIDQsIGN1cl9sZW4pOworCX0KIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF93cl82NChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgY29uc3QgdTMyICpkYXRhLAogCQkJICAgICB1MzIgbGVuNjQpCiB7Ci0JdTMyIGJ1Zl9sZW4zMiA9IEZXX0JVRl9TSVpFLzQ7Ci0JdTMyIGxlbiA9IGxlbjY0KjI7CisJdTMyIGJ1Zl9sZW4zMiA9IEZXX0JVRl9TSVpFIC8gNDsKKwl1MzIgbGVuID0gbGVuNjQgKiAyOwogCXU2NCBkYXRhNjQgPSAwOwogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaAppbmRleCA2ZTE4YTU1Li4xZjIyYzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmgKQEAgLTEsNyArMSwyMyBAQAogI2lmbmRlZiBfX0JOWDJYX0lOSVRfVkFMVUVTX0hfXwogI2RlZmluZSBfX0JOWDJYX0lOSVRfVkFMVUVTX0hfXwogCi0vKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGluaXRpYWxpemUgdGhlIGNoaXAuCisvKiBibngyeF9pbml0X3ZhbHVlcy5oOiBCcm9hZGNvbSBOWDIgMTBHIG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBleGNlcHQgYXMgbm90ZWQgYmVsb3cuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqCisgKgorICogVGhpcyBhcnJheSBjb250YWlucyB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIG5lZWRlZCB0byBpbml0aWFsaXplIHRoZSBjaGlwLgogICoKICAqIEZvciBlYWNoIGJsb2NrIGluIHRoZSBjaGlwIHRoZXJlIGFyZSB0aHJlZSBpbml0IHN0YWdlczoKICAqIGNvbW1vbiAtIEhXIHVzZWQgYnkgYm90aCBwb3J0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYwppbmRleCA3M2I1MmYxLi5lZDY0OGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCkBAIC0yMjU4LDYgKzIyNTgsMTEgQEAKIAkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQpOwogCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTDIsCisJCSAgICAgICAweDczQTApOworCiAJLyogQ2xlYXIgc29mdCByZXNldC4KIAlXaWxsIGF1dG9tYXRpY2FsbHkgcmVzZXQgbWljcm8tY29udHJvbGxlciByZS1ib290ICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCkBAIC0yMjY1LDggKzIyNzAsOCBAQAogCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAogCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9SRVNFVF9JTlRFUk5BTF9NUCk7CiAKLQkvKiB3YWl0IGZvciAxMDBtcyBmb3IgbWljcm9jb2RlIGxvYWQgKi8KLQltc2xlZXAoMTAwKTsKKwkvKiB3YWl0IGZvciAxNTBtcyBmb3IgbWljcm9jb2RlIGxvYWQgKi8KKwltc2xlZXAoMTUwKTsKIAogCS8qIERpc2FibGUgc2VyaWFsIGJvb3QgY29udHJvbCwgdHJpc3RhdGVzIHBpbnMgU1NfTiwgU0NLLCBNT1NJLCBNSVNPICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCkBAIC0yNTI0LDcgKzI1MjksNyBAQAogCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCiAJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KIAkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKLQorCXUxNiBjdXJfbGltaXRpbmdfbW9kZTsKIAlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCiAJCQkJICAgICAgIFNGUF9FRVBST01fT1BUSU9OU19BRERSLAogCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfU0laRSwKQEAgLTI1MzUsNiArMjU0MCwxNiBAQAogCX0KIAlsaW1pdGluZ19tb2RlID0gIShvcHRpb25zWzBdICYKIAkJCSAgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSyk7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJICAgICAgJmN1cl9saW1pdGluZ19tb2RlKTsKKwlEUChORVRJRl9NU0dfTElOSywgIkN1cnJlbnQgTGltaXRpbmcgbW9kZSBpcyAweCV4XG4iLAorCQkgY3VyX2xpbWl0aW5nX21vZGUpOworCiAJaWYgKGxpbWl0aW5nX21vZGUgJiYKIAkgICAgKG1vZHVsZV90eXBlICE9IFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRSkpIHsKIAkJRFAoTkVUSUZfTVNHX0xJTkssCkBAIC0yNTQ3LDE3ICsyNTYyLDEwIEBACiAJCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAogCQkJICAgICAgIFNGUF9MSU1JVElOR19NT0RFX1ZBTFVFKTsKIAl9IGVsc2UgeyAvKiBMUk0gbW9kZSAoIGRlZmF1bHQgKSovCi0JCXUxNiBjdXJfbGltaXRpbmdfbW9kZTsKKwogCQlEUChORVRJRl9NU0dfTElOSywgIk1vZHVsZSBvcHRpb25zID0gMHgleC5TZXR0aW5nIExSTSBNT0RFXG4iLAogCQkJIG9wdGlvbnNbMF0pOwogCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCi0JCQkgICAgICAgJmN1cl9saW1pdGluZ19tb2RlKTsKLQogCQkvKiBDaGFuZ2luZyB0byBMUk0gbW9kZSB0YWtlcyBxdWl0ZSBmZXcgc2Vjb25kcy4KIAkJU28gZG8gaXQgb25seSBpZiBjdXJyZW50IG1vZGUgaXMgbGltaXRpbmcKIAkJKCBkZWZhdWx0IGlzIExSTSApKi8KQEAgLTI2NjAsMTEgKzI2NjgsNyBAQAogCQkJICBwYXJhbXMtPnBvcnQpOwogCiAJLyogQ2hlY2sgYW5kIHNldCBsaW1pdGluZyBtb2RlIC8gTFJNIG1vZGUgKi8KLQlpZiAoYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShwYXJhbXMsIG1vZHVsZV90eXBlKQotCSAgICAgIT0gMCkgewotCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgbGltaXRpbmcgbW9kZSBmYWlsZWQhIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlibngyeF9iY204NzI2X3NldF9saW1pdGluZ19tb2RlKHBhcmFtcywgbW9kdWxlX3R5cGUpOwogCiAJLyogRW5hYmxlIHRyYW5zbWl0IGZvciB0aGlzIG1vZHVsZSAqLwogCWJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0zMDI5LDEwICszMDMzLDkgQEAKIAkJCQkgICAgICAgTURJT19XSVNfREVWQUQsCiAJCQkJICAgICAgIE1ESU9fV0lTX1JFR19MQVNJX0NOVEwsIDB4MSk7CiAKLQkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCWV4dF9waHlfdHlwZSwKLQkJCQkJCWV4dF9waHlfYWRkciwKLQkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CisJCQkvKiBCQ004NzA1IGRvZXNuJ3QgaGF2ZSBtaWNyb2NvZGUsIGhlbmNlIHRoZSAwICovCisJCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQlwYXJhbXMtPnNobWVtX2Jhc2UsIDApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgpAQCAtNDI0MSw2ICs0MjQ0LDcgQEAKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CiAJCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIoc3Bpcm9tX3ZlciwgdmVyc2lvbiwgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CkBAIC00NjIwLDEzICs0NjI0LDEzIEBACiAKIAkvKiBpbml0IGV4dCBwaHkgYW5kIGVuYWJsZSBsaW5rIHN0YXRlIGludCAqLwogCW5vbl9leHRfcGh5ID0gKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB8fAotCQkgICAgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19YR1hTXzEwKSB8fAotCQkgICAgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFRfUEhZKSk7CisJCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApKTsKIAogCWlmIChub25fZXh0X3BoeSB8fAogCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8CiAJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSkgeworCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpIHx8CisJICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUX1BIWSkpIHsKIAkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCiAJCQlibngyeF9zZXRfcGFyYWxsZWxfZGV0ZWN0aW9uKHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKIAkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwppbmRleCA5NDI3MTc1Li4wMGE3OGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCkBAIC01Myw5ICs1MywxMCBAQAogCiAjaW5jbHVkZSAiYm54MnguaCIKICNpbmNsdWRlICJibngyeF9pbml0LmgiCisjaW5jbHVkZSAiYm54MnhfZHVtcC5oIgogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40OC4xMDIiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMjAwOS8wMi8xMiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjQ4LjEwNSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDA5LzAzLzAyIgogI2RlZmluZSBCTlgyWF9CQ19WRVIJCTB4MDQwMjAwCiAKIC8qIFRpbWUgaW4gamlmZmllcyBiZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZyAqLwpAQCAtNzIsNiArNzMsNyBAQAogCiBzdGF0aWMgaW50IG11bHRpX21vZGUgPSAxOwogbW9kdWxlX3BhcmFtKG11bHRpX21vZGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG11bHRpX21vZGUsICIgVXNlIHBlci1DUFUgcXVldWVzIik7CiAKIHN0YXRpYyBpbnQgZGlzYWJsZV90cGE7CiBtb2R1bGVfcGFyYW0oZGlzYWJsZV90cGEsIGludCwgMCk7CkBAIC0yMTUsNyArMjE3LDcgQEAKIAlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwogCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKIAotCURQKEJOWDJYX01TR19PRkYsICJkbWFlOiBvcGNvZGUgMHglMDh4XG4iCisJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKIAkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKIAkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCiAJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKQEAgLTIzNiw3ICsyMzgsNyBAQAogCQlEUChCTlgyWF9NU0dfT0ZGLCAid2JfY29tcCAweCUwOHhcbiIsICp3Yl9jb21wKTsKIAogCQlpZiAoIWNudCkgewotCQkJQk5YMlhfRVJSKCJkbWFlIHRpbWVvdXQhXG4iKTsKKwkJCUJOWDJYX0VSUigiRE1BRSB0aW1lb3V0IVxuIik7CiAJCQlicmVhazsKIAkJfQogCQljbnQtLTsKQEAgLTI5MSw3ICsyOTMsNyBAQAogCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CiAJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOwogCi0JRFAoQk5YMlhfTVNHX09GRiwgImRtYWU6IG9wY29kZSAweCUwOHhcbiIKKwlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRTogb3Bjb2RlIDB4JTA4eFxuIgogCSAgIERQX0xFVkVMICJzcmNfYWRkciAgWyV4OiUwOHhdICBsZW4gWyVkICo0XSAgIgogCQkgICAgImRzdF9hZGRyIFsleDolMDh4ICglMDh4KV1cbiIKIAkgICBEUF9MRVZFTCAiY29tcF9hZGRyIFsleDolMDh4XSAgY29tcF92YWwgMHglMDh4XG4iLApAQCAtMzA4LDcgKzMxMCw3IEBACiAJd2hpbGUgKCp3Yl9jb21wICE9IERNQUVfQ09NUF9WQUwpIHsKIAogCQlpZiAoIWNudCkgewotCQkJQk5YMlhfRVJSKCJkbWFlIHRpbWVvdXQhXG4iKTsKKwkJCUJOWDJYX0VSUigiRE1BRSB0aW1lb3V0IVxuIik7CiAJCQlicmVhazsKIAkJfQogCQljbnQtLTsKQEAgLTUxNiwxMyArNTE4LDEzIEBACiAJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKLQkJQk5YMlhfRVJSKCJxdWV1ZVslZF06IHJ4X2JkX3Byb2QoJXgpICByeF9iZF9jb25zKCV4KSIKKwkJQk5YMlhfRVJSKCJmcCVkOiByeF9iZF9wcm9kKCV4KSAgcnhfYmRfY29ucygleCkiCiAJCQkgICIgICpyeF9iZF9jb25zX3NiKCV4KSAgcnhfY29tcF9wcm9kKCV4KSIKIAkJCSAgIiAgcnhfY29tcF9jb25zKCV4KSAgKnJ4X2NvbnNfc2IoJXgpXG4iLAogCQkJICBpLCBmcC0+cnhfYmRfcHJvZCwgZnAtPnJ4X2JkX2NvbnMsCiAJCQkgIGxlMTZfdG9fY3B1KCpmcC0+cnhfYmRfY29uc19zYiksIGZwLT5yeF9jb21wX3Byb2QsCiAJCQkgIGZwLT5yeF9jb21wX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikpOwotCQlCTlgyWF9FUlIoIiAgICAgICAgICByeF9zZ2VfcHJvZCgleCkgIGxhc3RfbWF4X3NnZSgleCkiCisJCUJOWDJYX0VSUigiICAgICAgcnhfc2dlX3Byb2QoJXgpICBsYXN0X21heF9zZ2UoJXgpIgogCQkJICAiICBmcF91X2lkeCgleCkgKnNiX3VfaWR4KCV4KVxuIiwKIAkJCSAgZnAtPnJ4X3NnZV9wcm9kLCBmcC0+bGFzdF9tYXhfc2dlLAogCQkJICBsZTE2X3RvX2NwdShmcC0+ZnBfdV9pZHgpLApAQCAtNTM0LDExICs1MzYsMTEgQEAKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAJCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7CiAKLQkJQk5YMlhfRVJSKCJxdWV1ZVslZF06IHR4X3BrdF9wcm9kKCV4KSAgdHhfcGt0X2NvbnMoJXgpIgorCQlCTlgyWF9FUlIoImZwJWQ6IHR4X3BrdF9wcm9kKCV4KSAgdHhfcGt0X2NvbnMoJXgpIgogCQkJICAiICB0eF9iZF9wcm9kKCV4KSAgdHhfYmRfY29ucygleCkgICp0eF9jb25zX3NiKCV4KVxuIiwKIAkJCSAgaSwgZnAtPnR4X3BrdF9wcm9kLCBmcC0+dHhfcGt0X2NvbnMsIGZwLT50eF9iZF9wcm9kLAogCQkJICBmcC0+dHhfYmRfY29ucywgbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICAgICAgIGZwX2NfaWR4KCV4KSAgKnNiX2NfaWR4KCV4KSIKKwkJQk5YMlhfRVJSKCIgICAgICBmcF9jX2lkeCgleCkgICpzYl9jX2lkeCgleCkiCiAJCQkgICIgIGJkIGRhdGEoJXgsJXgpXG4iLCBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLAogCQkJICBmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4LAogCQkJICBod19wcm9kcy0+cGFja2V0c19wcm9kLCBod19wcm9kcy0+YmRzX3Byb2QpOwpAQCAtNTU1LDggKzU1Nyw4IEBACiAJCQl1MzIgKnJ4X2JkID0gKHUzMiAqKSZmcC0+cnhfZGVzY19yaW5nW2pdOwogCQkJc3RydWN0IHN3X3J4X2JkICpzd19iZCA9ICZmcC0+cnhfYnVmX3Jpbmdbal07CiAKLQkJCUJOWDJYX0VSUigicnhfYmRbJXhdPVsleDoleF0gIHN3X2JkPVslcF1cbiIsCi0JCQkJICBqLCByeF9iZFsxXSwgcnhfYmRbMF0sIHN3X2JkLT5za2IpOworCQkJQk5YMlhfRVJSKCJmcCVkOiByeF9iZFsleF09WyV4OiV4XSAgc3dfYmQ9WyVwXVxuIiwKKwkJCQkgIGksIGosIHJ4X2JkWzFdLCByeF9iZFswXSwgc3dfYmQtPnNrYik7CiAJCX0KIAogCQlzdGFydCA9IFJYX1NHRShmcC0+cnhfc2dlX3Byb2QpOwpAQCAtNTY1LDggKzU2Nyw4IEBACiAJCQl1MzIgKnJ4X3NnZSA9ICh1MzIgKikmZnAtPnJ4X3NnZV9yaW5nW2pdOwogCQkJc3RydWN0IHN3X3J4X3BhZ2UgKnN3X3BhZ2UgPSAmZnAtPnJ4X3BhZ2VfcmluZ1tqXTsKIAotCQkJQk5YMlhfRVJSKCJyeF9zZ2VbJXhdPVsleDoleF0gIHN3X3BhZ2U9WyVwXVxuIiwKLQkJCQkgIGosIHJ4X3NnZVsxXSwgcnhfc2dlWzBdLCBzd19wYWdlLT5wYWdlKTsKKwkJCUJOWDJYX0VSUigiZnAlZDogcnhfc2dlWyV4XT1bJXg6JXhdICBzd19wYWdlPVslcF1cbiIsCisJCQkJICBpLCBqLCByeF9zZ2VbMV0sIHJ4X3NnZVswXSwgc3dfcGFnZS0+cGFnZSk7CiAJCX0KIAogCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOwpAQCAtNTc0LDggKzU3Niw4IEBACiAJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJDUV9CRChqICsgMSkpIHsKIAkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOwogCi0JCQlCTlgyWF9FUlIoImNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKLQkJCQkgIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7CisJCQlCTlgyWF9FUlIoImZwJWQ6IGNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGksIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7CiAJCX0KIAl9CiAKQEAgLTU4OCw4ICs1OTAsOCBAQAogCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBUWF9CRChqICsgMSkpIHsKIAkJCXN0cnVjdCBzd190eF9iZCAqc3dfYmQgPSAmZnAtPnR4X2J1Zl9yaW5nW2pdOwogCi0JCQlCTlgyWF9FUlIoInBhY2tldFsleF09WyVwLCV4XVxuIiwgaiwKLQkJCQkgIHN3X2JkLT5za2IsIHN3X2JkLT5maXJzdF9iZCk7CisJCQlCTlgyWF9FUlIoImZwJWQ6IHBhY2tldFsleF09WyVwLCV4XVxuIiwKKwkJCQkgIGksIGosIHN3X2JkLT5za2IsIHN3X2JkLT5maXJzdF9iZCk7CiAJCX0KIAogCQlzdGFydCA9IFRYX0JEKGZwLT50eF9iZF9jb25zIC0gMTApOwpAQCAtNTk3LDggKzU5OSw4IEBACiAJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFRYX0JEKGogKyAxKSkgewogCQkJdTMyICp0eF9iZCA9ICh1MzIgKikmZnAtPnR4X2Rlc2NfcmluZ1tqXTsKIAotCQkJQk5YMlhfRVJSKCJ0eF9iZFsleF09WyV4OiV4OiV4OiV4XVxuIiwKLQkJCQkgIGosIHR4X2JkWzBdLCB0eF9iZFsxXSwgdHhfYmRbMl0sIHR4X2JkWzNdKTsKKwkJCUJOWDJYX0VSUigiZnAlZDogdHhfYmRbJXhdPVsleDoleDoleDoleF1cbiIsCisJCQkJICBpLCBqLCB0eF9iZFswXSwgdHhfYmRbMV0sIHR4X2JkWzJdLCB0eF9iZFszXSk7CiAJCX0KIAl9CiAKQEAgLTg3NCw3ICs4NzYsNyBAQAogCXJldHVybiAoczE2KShmcC0+YnAtPnR4X3Jpbmdfc2l6ZSkgLSB1c2VkOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF90eF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IHdvcmspCitzdGF0aWMgdm9pZCBibngyeF90eF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKQEAgLTkwOCwyNiArOTEwLDI0IEBACiAJCWJkX2NvbnMgPSBibngyeF9mcmVlX3R4X3BrdChicCwgZnAsIHBrdF9jb25zKTsKIAkJc3dfY29ucysrOwogCQlkb25lKys7Ci0KLQkJaWYgKGRvbmUgPT0gd29yaykKLQkJCWJyZWFrOwogCX0KIAogCWZwLT50eF9wa3RfY29ucyA9IHN3X2NvbnM7CiAJZnAtPnR4X2JkX2NvbnMgPSBiZF9jb25zOwogCi0JLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQotCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKLQkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0IHN0YXJ0X3htaXQoKQotCSAqIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQgZm9yZXZlci4KLQkgKi8KLQlzbXBfbWIoKTsKLQogCS8qIFRCRCBuZWVkIGEgdGhyZXNoPyAqLwogCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpKSB7CiAKIAkJX19uZXRpZl90eF9sb2NrKHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAorCQkvKiBOZWVkIHRvIG1ha2UgdGhlIHR4X2JkX2NvbnMgdXBkYXRlIHZpc2libGUgdG8gc3RhcnRfeG1pdCgpCisJCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKKwkJICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdAorCQkgKiBzdGFydF94bWl0KCkgd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZAorCQkgKiBmb3JldmVyLgorCQkgKi8KKwkJc21wX21iKCk7CisKIAkJaWYgKChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpICYmCiAJCSAgICAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pICYmCiAJCSAgICAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKSkKQEAgLTM2NjgsNyArMzY2OCw3IEBACiAJCWJueDJ4X2VtYWNfc3RhdHNfdXBkYXRlKGJwKTsKIAogCWVsc2UgeyAvKiB1bnJlYWNoZWQgKi8KLQkJQk5YMlhfRVJSKCJzdGF0cyB1cGRhdGVkIGJ5IGRtYWUgYnV0IG5vIE1BQyBhY3RpdmVcbiIpOworCQlCTlgyWF9FUlIoInN0YXRzIHVwZGF0ZWQgYnkgRE1BRSBidXQgbm8gTUFDIGFjdGl2ZVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQxNzYsNyArNDE3Niw3IEBACiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOwogCQlpbnQgcmM7CiAKLQkJYm54MnhfdHhfaW50KGZwLCAxMDAwKTsKKwkJYm54MnhfdHhfaW50KGZwKTsKIAkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOwogCX0KIApAQCAtNDIyNCwxMCArNDIyNCwxMCBAQAogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAKLQlibngyeF9pbml0X2ZpbGwoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIgKwogCQkJVVNUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCiAJCQlzaXplb2Yoc3RydWN0IHVzdG9ybV9zdGF0dXNfYmxvY2spLzQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiArCiAJCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9jaykvNCk7CiB9CkBAIC00MjgxLDE4ICs0MjgxLDE4IEBACiB7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKIAotCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCVVTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCi0JCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCQlYU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiArCiAJCQlUU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgdHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOworCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSICsKKwkJCVVTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIgKworCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCisJCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiArCisJCQlYU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2RlZl9zYihzdHJ1Y3QgYm54MnggKmJwLApAQCAtNTE1Myw2ICs1MTUzLDEwIEBACiAJCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CiAJfQogCisJLyogZW5zdXJlIHN0YXR1cyBibG9jayBpbmRpY2VzIHdlcmUgcmVhZCAqLworCXJtYigpOworCisKIAlibngyeF9pbml0X2RlZl9zYihicCwgYnAtPmRlZl9zdGF0dXNfYmxrLCBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKIAkJCSAgREVGX1NCX0lEKTsKIAlibngyeF91cGRhdGVfZHNiX2lkeChicCk7CkBAIC01NjEyLDM3ICs1NjE2LDEwIEBACiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNETV9DT01NT05fU1RBUlQsIFVTRE1fQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgWFNETV9DT01NT05fU1RBUlQsIFhTRE1fQ09NTU9OX0VORCk7CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVRTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJQ1NUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwKLQkJCQlYU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKLQkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVVTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQl9IGVsc2UgeyAvKiBFMSAqLwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JfQorCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgWFNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9DT01NT05fU1RBUlQsIFRTRU1fQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9DT01NT05fU1RBUlQsIFVTRU1fQ09NTU9OX0VORCk7CkBAIC02NTk3LDEwICs2NTc0LDggQEAKIHsKIAlibngyeF9pbnRfZGlzYWJsZV9zeW5jKGJwLCBkaXNhYmxlX2h3KTsKIAlibngyeF9uYXBpX2Rpc2FibGUoYnApOwotCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7Ci0JCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7Ci0JCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JfQorCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7CisJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KIH0KIAogLyoKQEAgLTcyMTAsMTAgKzcxODUsOSBAQAogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQljbnQgPSAxMDAwOwotCQlzbXBfbWIoKTsKIAkJd2hpbGUgKGJueDJ4X2hhc190eF93b3JrX3VubG9hZChmcCkpIHsKIAotCQkJYm54MnhfdHhfaW50KGZwLCAxMDAwKTsKKwkJCWJueDJ4X3R4X2ludChmcCk7CiAJCQlpZiAoIWNudCkgewogCQkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBxdWV1ZVslZF1cbiIsCiAJCQkJCSAgaSk7CkBAIC03MjI2LDcgKzcyMDAsNiBAQAogCQkJfQogCQkJY250LS07CiAJCQltc2xlZXAoMSk7Ci0JCQlzbXBfbWIoKTsKIAkJfQogCX0KIAkvKiBHaXZlIEhXIHRpbWUgdG8gZGlzY2FyZCBvbGQgdHggbWVzc2FnZXMgKi8KQEAgLTg0OTksNiArODQ3Miw4NCBAQAogCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsKIH0KIAorI2RlZmluZSBJU19FMV9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMV9PTkxJTkUpID09IFJJX0UxX09OTElORSkKKyNkZWZpbmUgSVNfRTFIX09OTElORShpbmZvKQkoKChpbmZvKSAmIFJJX0UxSF9PTkxJTkUpID09IFJJX0UxSF9PTkxJTkUpCisKK3N0YXRpYyBpbnQgYm54MnhfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RhdGljIHUzMiByZWdkdW1wX2xlbjsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWlmIChyZWdkdW1wX2xlbikKKwkJcmV0dXJuIHJlZ2R1bXBfbGVuOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSByZWdfYWRkcnNbaV0uc2l6ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgV1JFR1NfQ09VTlRfRTE7IGkrKykKKwkJCWlmIChJU19FMV9PTkxJTkUod3JlZ19hZGRyc19lMVtpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSB3cmVnX2FkZHJzX2UxW2ldLnNpemUgKgorCQkJCQkoMSArIHdyZWdfYWRkcnNfZTFbaV0ucmVhZF9yZWdzX2NvdW50KTsKKworCX0gZWxzZSB7IC8qIEUxSCAqLworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxSF9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHJlZ19hZGRyc1tpXS5zaXplOworCisJCWZvciAoaSA9IDA7IGkgPCBXUkVHU19DT1VOVF9FMUg7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHdyZWdfYWRkcnNfZTFoW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHdyZWdfYWRkcnNfZTFoW2ldLnNpemUgKgorCQkJCQkoMSArIHdyZWdfYWRkcnNfZTFoW2ldLnJlYWRfcmVnc19jb3VudCk7CisJfQorCXJlZ2R1bXBfbGVuICo9IDQ7CisJcmVnZHVtcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcik7CisKKwlyZXR1cm4gcmVnZHVtcF9sZW47Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpfcCkKK3sKKwl1MzIgKnAgPSBfcCwgaSwgajsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZHVtcF9oZHIgZHVtcF9oZHIgPSB7MH07CisKKwlyZWdzLT52ZXJzaW9uID0gMDsKKwltZW1zZXQocCwgMCwgcmVncy0+bGVuKTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuOworCisJZHVtcF9oZHIuaGRyX3NpemUgPSAoc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcikgLyA0KSAtIDE7CisJZHVtcF9oZHIuZHVtcF9zaWduID0gZHVtcF9zaWduX2FsbDsKKwlkdW1wX2hkci54c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFhTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci50c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFRTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci51c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFVTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci5jc3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIENTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci5pbmZvID0gQ0hJUF9JU19FMShicCkgPyBSSV9FMV9PTkxJTkUgOiBSSV9FMUhfT05MSU5FOworCisJbWVtY3B5KHAsICZkdW1wX2hkciwgc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcikpOworCXAgKz0gZHVtcF9oZHIuaGRyX3NpemUgKyAxOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlmb3IgKGogPSAwOyBqIDwgcmVnX2FkZHJzW2ldLnNpemU7IGorKykKKwkJCQkJKnArKyA9IFJFR19SRChicCwKKwkJCQkJCSAgICAgIHJlZ19hZGRyc1tpXS5hZGRyICsgaio0KTsKKworCX0gZWxzZSB7IC8qIEUxSCAqLworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxSF9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCWZvciAoaiA9IDA7IGogPCByZWdfYWRkcnNbaV0uc2l6ZTsgaisrKQorCQkJCQkqcCsrID0gUkVHX1JEKGJwLAorCQkJCQkJICAgICAgcmVnX2FkZHJzW2ldLmFkZHIgKyBqKjQpOworCX0KK30KKwogc3RhdGljIHZvaWQgYm54MnhfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05OTU0LDYgKzEwMDA1LDggQEAKIAkuZ2V0X3NldHRpbmdzCQk9IGJueDJ4X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGJueDJ4X3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gYm54MnhfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbgkJPSBibngyeF9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IGJueDJ4X2dldF9yZWdzLAogCS5nZXRfd29sCQk9IGJueDJ4X2dldF93b2wsCiAJLnNldF93b2wJCT0gYm54Mnhfc2V0X3dvbCwKIAkuZ2V0X21zZ2xldmVsCQk9IGJueDJ4X2dldF9tc2dsZXZlbCwKQEAgLTEwMDY2LDE2ICsxMDExOSwyOSBAQAogCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CiAKIAlpZiAoYm54MnhfaGFzX3R4X3dvcmsoZnApKQotCQlibngyeF90eF9pbnQoZnAsIGJ1ZGdldCk7CisJCWJueDJ4X3R4X2ludChmcCk7CiAKLQlpZiAoYm54MnhfaGFzX3J4X3dvcmsoZnApKQorCWlmIChibngyeF9oYXNfcnhfd29yayhmcCkpIHsKIAkJd29ya19kb25lID0gYm54MnhfcnhfaW50KGZwLCBidWRnZXQpOwogCi0Jcm1iKCk7IC8qIEJOWDJYX0hBU19XT1JLKCkgcmVhZHMgdGhlIHN0YXR1cyBibG9jayAqLworCQkvKiBtdXN0IG5vdCBjb21wbGV0ZSBpZiB3ZSBjb25zdW1lZCBmdWxsIGJ1ZGdldCAqLworCQlpZiAod29ya19kb25lID49IGJ1ZGdldCkKKwkJCWdvdG8gcG9sbF9hZ2FpbjsKKwl9CiAKLQkvKiBtdXN0IG5vdCBjb21wbGV0ZSBpZiB3ZSBjb25zdW1lZCBmdWxsIGJ1ZGdldCAqLwotCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiAhQk5YMlhfSEFTX1dPUksoZnApKSB7CisJLyogQk5YMlhfSEFTX1dPUksoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrLCB0aHVzIHdlIG5lZWQgdG8KKwkgKiBlbnN1cmUgdGhhdCBzdGF0dXMgYmxvY2sgaW5kaWNlcyBoYXZlIGJlZW4gYWN0dWFsbHkgcmVhZAorCSAqIChibngyeF91cGRhdGVfZnBzYl9pZHgpIHByaW9yIHRvIHRoaXMgY2hlY2sgKEJOWDJYX0hBU19XT1JLKQorCSAqIHNvIHRoYXQgd2Ugd29uJ3Qgd3JpdGUgdGhlICJuZXdlciIgdmFsdWUgb2YgdGhlIHN0YXR1cyBibG9jayB0byBJR1UKKwkgKiAoaWYgdGhlcmUgd2FzIGEgRE1BIHJpZ2h0IGFmdGVyIEJOWDJYX0hBU19XT1JLIGFuZAorCSAqIGlmIHRoZXJlIGlzIG5vIHJtYiwgdGhlIG1lbW9yeSByZWFkaW5nIChibngyeF91cGRhdGVfZnBzYl9pZHgpCisJICogbWF5IGJlIHBvc3Rwb25lZCB0byByaWdodCBiZWZvcmUgYm54MnhfYWNrX3NiKS4gSW4gdGhpcyBjYXNlCisJICogdGhlcmUgd2lsbCBuZXZlciBiZSBhbm90aGVyIGludGVycnVwdCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIHVwZGF0ZQorCSAqIG9mIHRoZSBzdGF0dXMgYmxvY2ssIHdoaWxlIHRoZXJlIGlzIHN0aWxsIHVuaGFuZGxlZCB3b3JrLgorCSAqLworCXJtYigpOwogCisJaWYgKCFCTlgyWF9IQVNfV09SSyhmcCkpIHsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiBwb2xsX3BhbmljOgogI2VuZGlmCkBAIC0xMDA4Nyw2ICsxMDE1Myw3IEBACiAJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksIElHVV9JTlRfRU5BQkxFLCAxKTsKIAl9CiAKK3BvbGxfYWdhaW46CiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIApAQCAtMTEwNjIsNiArMTExMjksNyBAQAogCSAgICAgICAoYm54MnhfZ2V0X3BjaWVfc3BlZWQoYnApID09IDIpID8gIjVHSHogKEdlbjIpIiA6ICIyLjVHSHoiLAogCSAgICAgICBkZXYtPmJhc2VfYWRkciwgYnAtPnBkZXYtPmlycSk7CiAJcHJpbnRrKEtFUk5fQ09OVCAibm9kZSBhZGRyICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CisKIAlyZXR1cm4gMDsKIAogaW5pdF9vbmVfZXhpdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKaW5kZXggMzYwYTI1Ni4uYjhjZTZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKQEAgLTU0MTAsNyArNTQxMCw3IEBACiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX0lOVF9ESVNBQkxFCQkoMTw8MTApCiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX1JFU0VSVkVEIAkJKDB4MWY8PDExKQogI2RlZmluZSBQQ0lDRkdfU1RBVFVTX09GRlNFVAkJCQkweDA2Ci0jZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRAkJCQkweDA4CisjZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRF9PRkZTRVQJCQkweDA4CiAjZGVmaW5lIFBDSUNGR19DQUNIRV9MSU5FX1NJWkUJCQkJMHgwYwogI2RlZmluZSBQQ0lDRkdfTEFURU5DWV9USU1FUgkJCQkweDBkCiAjZGVmaW5lIFBDSUNGR19CQVJfMV9MT1cJCQkJMHgxMApAQCAtNTQzOCw3ICs1NDM4LDcgQEAKICNkZWZpbmUgUENJQ0ZHX1BNX0NTUl9TVEFURQkJCSgweDM8PDApCiAjZGVmaW5lIFBDSUNGR19QTV9DU1JfUE1FX0VOQUJMRQkJKDE8PDgpCiAjZGVmaW5lIFBDSUNGR19QTV9DU1JfUE1FX1NUQVRVUwkJKDE8PDE1KQotI2RlZmluZSBQQ0lDRkdfTVNJX0NBUF9JRAkJCQkweDU4CisjZGVmaW5lIFBDSUNGR19NU0lfQ0FQX0lEX09GRlNFVAkJCTB4NTgKICNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX0VOQUJMRQkJKDB4MTw8MTYpCiAjZGVmaW5lIFBDSUNGR19NU0lfQ09OVFJPTF9NQ0FQIAkJKDB4Nzw8MTcpCiAjZGVmaW5lIFBDSUNGR19NU0lfQ09OVFJPTF9NRU5BIAkJKDB4Nzw8MjApCkBAIC01NDQ2LDcgKzU0NDYsNyBAQAogI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfTVNJX1BWTUFTS19DQVBBQkxFCSgweDE8PDI0KQogI2RlZmluZSBQQ0lDRkdfR1JDX0FERFJFU1MJCQkJMHg3OAogI2RlZmluZSBQQ0lDRkdfR1JDX0RBVEEgCQkJCTB4ODAKLSNkZWZpbmUgUENJQ0ZHX01TSVhfQ0FQX0lECQkJCTB4YTAKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ0FQX0lEX09GRlNFVAkJCTB4YTAKICNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9UQUJMRV9TSVpFCQkoMHg3ZmY8PDE2KQogI2RlZmluZSBQQ0lDRkdfTVNJWF9DT05UUk9MX1JFU0VSVkVECQkoMHg3PDwyNykKICNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9GVU5DX01BU0sJCSgweDE8PDMwKQpAQCAtNTg0Myw2ICs1ODQzLDcgQEAKICNkZWZpbmUgTURJT19QTUFfUkVHX1JPTV9WRVIyCQkweGNhMWEKICNkZWZpbmUgTURJT19QTUFfUkVHX0VEQ19GRkVfTUFJTgkweGNhMWIKICNkZWZpbmUgTURJT19QTUFfUkVHX1BMTF9CQU5EV0lEVEgJMHhjYTFkCisjZGVmaW5lIE1ESU9fUE1BX1JFR19HRU5fQ1RSTDIJCTB4Y2ExZQogI2RlZmluZSBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMCAJMHhjYTIzCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19MUk1fTU9ERQkJMHhjYTNmCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19DRFJfQkFORFdJRFRICTB4Y2E0NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggMmM5NmI5My4uOWMzMjZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0xNzE0LDYgKzE3MTQsNyBAQAogCWNhc2UgQk9ORF9NT0RFX0FMQjoKIAkJbmV3X3NsYXZlLT5zdGF0ZSA9IEJPTkRfU1RBVEVfQUNUSVZFOwogCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhuZXdfc2xhdmUpOworCQlib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoYm9uZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2RlYnVnKCJUaGlzIHNsYXZlIGlzIGFsd2F5cyBhY3RpdmUgaW4gdHJ1bmsgbW9kZVxuIik7CkBAIC0zNTQ1LDExICszNTQ2LDI2IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFOgotCQkvKgotCQkgKiBUT0RPOiBpcyB0aGlzIHdoYXQgd2UgZ2V0IGlmIHNvbWVib2R5Ci0JCSAqIHNldHMgdXAgYSBoaWVyYXJjaGljYWwgYm9uZCwgdGhlbiBybW1vZCdzCi0JCSAqIG9uZSBvZiB0aGUgc2xhdmUgYm9uZGluZyBkZXZpY2VzPwotCQkgKi8KKwkJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQgfHwgYm9uZF9pc19sYihib25kKSkgeworCQkJc3RydWN0IHNsYXZlICpzbGF2ZTsKKworCQkJc2xhdmUgPSBib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgc2xhdmVfZGV2KTsKKwkJCWlmIChzbGF2ZSkgeworCQkJCXUxNiBvbGRfc3BlZWQgPSBzbGF2ZS0+c3BlZWQ7CisJCQkJdTE2IG9sZF9kdXBsZXggPSBzbGF2ZS0+ZHVwbGV4OworCisJCQkJYm9uZF91cGRhdGVfc3BlZWRfZHVwbGV4KHNsYXZlKTsKKworCQkJCWlmIChib25kX2lzX2xiKGJvbmQpKQorCQkJCQlicmVhazsKKworCQkJCWlmIChvbGRfc3BlZWQgIT0gc2xhdmUtPnNwZWVkKQorCQkJCQlib25kXzNhZF9hZGFwdGVyX3NwZWVkX2NoYW5nZWQoc2xhdmUpOworCQkJCWlmIChvbGRfZHVwbGV4ICE9IHNsYXZlLT5kdXBsZXgpCisJCQkJCWJvbmRfM2FkX2FkYXB0ZXJfZHVwbGV4X2NoYW5nZWQoc2xhdmUpOworCQkJfQorCQl9CisKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfRE9XTjoKIAkJLyoKQEAgLTQxMjEsNyArNDEzNyw3IEBACiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqc2xhdmVfb3BzCiAJCQk9IHNsYXZlLT5kZXYtPm5ldGRldl9vcHM7CiAJCWlmIChzbGF2ZV9vcHMtPm5kb19uZWlnaF9zZXR1cCkKLQkJCXJldHVybiBzbGF2ZV9vcHMtPm5kb19uZWlnaF9zZXR1cChkZXYsIHBhcm1zKTsKKwkJCXJldHVybiBzbGF2ZV9vcHMtPm5kb19uZWlnaF9zZXR1cChzbGF2ZS0+ZGV2LCBwYXJtcyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKaW5kZXggODQwZGE4My4uNThmNmZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCkBAIC0xOTY3LDggKzE5NjcsNyBAQAogCQl0eF9zY2hlZF9zdG9wKHNnZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05QT1JUUzsgaSsrKQotCQlpZiAoc2dlLT5lc3BpYnVnX3NrYltpXSkKLQkJCWtmcmVlX3NrYihzZ2UtPmVzcGlidWdfc2tiW2ldKTsKKwkJa2ZyZWVfc2tiKHNnZS0+ZXNwaWJ1Z19za2JbaV0pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCmluZGV4IGZiZTE1NjkuLjcxZWFhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKQEAgLTY4LDYgKzY4LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRzdGF0czsKIAlpbnQgYWN0aXZpdHk7CiAJX19iZTMyIGlzY3NpX2lwdjRhZGRyOworCisJaW50IGxpbmtfZmF1bHQ7IC8qIGxpbmsgZmF1bHQgd2FzIGRldGVjdGVkICovCiB9OwogCiBlbnVtIHsJCQkJLyogYWRhcHRlciBmbGFncyAqLwpAQCAtOTEsNiArOTMsNyBAQAogc3RydWN0IHNnZV9mbCB7ICAgICAgICAgICAgICAgICAgICAgLyogU0dFIHBlciBmcmVlLWJ1ZmZlciBsaXN0IHN0YXRlICovCiAJdW5zaWduZWQgaW50IGJ1Zl9zaXplOyAgICAgIC8qIHNpemUgb2YgZWFjaCBSeCBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgY3JlZGl0czsgICAgICAgLyogIyBvZiBhdmFpbGFibGUgUnggYnVmZmVycyAqLworCXVuc2lnbmVkIGludCBwZW5kX2NyZWQ7ICAgICAvKiBuZXcgYnVmZmVycyBzaW5jZSBsYXN0IEZMIERCIHJpbmcgKi8KIAl1bnNpZ25lZCBpbnQgc2l6ZTsgICAgICAgICAgLyogY2FwYWNpdHkgb2YgZnJlZSBsaXN0ICovCiAJdW5zaWduZWQgaW50IGNpZHg7ICAgICAgICAgIC8qIGNvbnN1bWVyIGluZGV4ICovCiAJdW5zaWduZWQgaW50IHBpZHg7ICAgICAgICAgIC8qIHByb2R1Y2VyIGluZGV4ICovCkBAIC0xOTYsNiArMTk5LDcgQEAKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eF9xOwkvKiBhc3NvY2lhdGVkIG5ldGRldiBUWCBxdWV1ZSAqLwogCXVuc2lnbmVkIGxvbmcgdHhxX3N0b3BwZWQ7CS8qIHdoaWNoIFR4IHF1ZXVlcyBhcmUgc3RvcHBlZCAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHR4X3JlY2xhaW1fdGltZXI7CS8qIHJlY2xhaW1zIFRYIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWNsYWltX3RpbWVyOwkvKiByZWNsYWltcyBSWCBidWZmZXJzICovCiAJdW5zaWduZWQgbG9uZyBwb3J0X3N0YXRzW1NHRV9QU1RBVF9NQVhdOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKQEAgLTIzOSw2ICsyNDMsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgYWRhcF9jaGVja190YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBleHRfaW50cl9oYW5kbGVyX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGZhdGFsX2Vycm9yX2hhbmRsZXJfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua19mYXVsdF9oYW5kbGVyX3Rhc2s7CiAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CiAKQEAgLTI4MSw2ICsyODYsOCBAQAogdm9pZCB0M19vc19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0dXMsCiAJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsIGludCBmYyk7CiB2b2lkIHQzX29zX3BoeW1vZF9jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCk7Cit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpOwordm9pZCB0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKIAogdm9pZCB0M19zZ2Vfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2Vfc3RvcChzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCmluZGV4IGRiNGY0ZjUuLjllZTAyMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCkBAIC0yODAsNiArMjgwLDcgQEAKIAl1bnNpZ25lZCBsb25nIG51bV90b2dnbGVkOyAvKiAjIHRpbWVzIHRvZ2dsZWQgVHhFbiBkdWUgdG8gc3R1Y2sgVFggKi8KIAl1bnNpZ25lZCBsb25nIG51bV9yZXNldHM7ICAvKiAjIHRpbWVzIHJlc2V0IGR1ZSB0byBzdHVjayBUWCAqLwogCisJdW5zaWduZWQgbG9uZyBsaW5rX2ZhdWx0czsgIC8qICMgZGV0ZWN0ZWQgbGluayBmYXVsdHMgKi8KIH07CiAKIHN0cnVjdCB0cF9taWJfc3RhdHMgewpAQCAtNzAxLDYgKzcwMiw4IEBACiB2b2lkIHQzX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgdDNfaW50cl9kaXNhYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgdDNfaW50cl9jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIHQzX3hnbV9pbnRyX2VuYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7Cit2b2lkIHQzX3hnbV9pbnRyX2Rpc2FibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwogdm9pZCB0M19wb3J0X2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKIHZvaWQgdDNfcG9ydF9pbnRyX2Rpc2FibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwogdm9pZCB0M19wb3J0X2ludHJfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwpAQCAtNzA4LDYgKzcxMSw3IEBACiBpbnQgdDNfcGh5X2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CiAKIHZvaWQgdDNfbGlua19jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCk7Cit2b2lkIHQzX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKIGludCB0M19saW5rX3N0YXJ0KHN0cnVjdCBjcGh5ICpwaHksIHN0cnVjdCBjbWFjICptYWMsIHN0cnVjdCBsaW5rX2NvbmZpZyAqbGMpOwogY29uc3Qgc3RydWN0IGFkYXB0ZXJfaW5mbyAqdDNfZ2V0X2FkYXB0ZXJfaW5mbyh1bnNpZ25lZCBpbnQgYm9hcmRfaWQpOwogaW50IHQzX3NlZXByb21fcmVhZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIF9fbGUzMiAqZGF0YSk7CkBAIC03NDQsNiArNzQ4LDggQEAKIAogaW50IHQzX21hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKTsKIHZvaWQgdDNiX3Bjc19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKTsKK3ZvaWQgdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKTsKK3ZvaWQgdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpOwogaW50IHQzX21hY19lbmFibGUoc3RydWN0IGNtYWMgKm1hYywgaW50IHdoaWNoKTsKIGludCB0M19tYWNfZGlzYWJsZShzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgd2hpY2gpOwogaW50IHQzX21hY19zZXRfbXR1KHN0cnVjdCBjbWFjICptYWMsIHVuc2lnbmVkIGludCBtdHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCmluZGV4IDBmNjA2MmEuLmQ4YmU4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKQEAgLTkwLDYgKzkwLDcgQEAKIAlDSF9ERVZJQ0UoMHgzMCwgMiksCS8qIFQzQjEwICovCiAJQ0hfREVWSUNFKDB4MzEsIDMpLAkvKiBUM0IyMCAqLwogCUNIX0RFVklDRSgweDMyLCAxKSwJLyogVDNCMDIgKi8KKwlDSF9ERVZJQ0UoMHgzNSwgNiksCS8qIFQzQzIwLWRlcml2ZWQgVDNDMTAgKi8KIAl7MCx9CiB9OwogCkBAIC0xNjksNiArMTcwLDQwIEBACiAJfQogfQogCit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXAtPnBvcnRbcG9ydF9pZF07CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHN0YXRlID09IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKHN0YXRlKSB7CisJCXN0cnVjdCBjbWFjICptYWMgPSAmcGktPm1hYzsKKworCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisKKwkJLyogQ2xlYXIgbG9jYWwgZmF1bHRzICovCisJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcCwgcGktPnBvcnRfaWQpOworCQl0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9JTlRfU1RBVFVTICsKKwkJCQkgICAgcGktPm1hYy5vZmZzZXQpOworCQl0M193cml0ZV9yZWcoYWRhcCwKKwkJCSAgICAgQV9YR01fSU5UX0NBVVNFICsgcGktPm1hYy5vZmZzZXQsCisJCQkgICAgIEZfWEdNX0lOVCk7CisKKwkJdDNfc2V0X3JlZ19maWVsZChhZGFwLAorCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsKKwkJCQkgcGktPm1hYy5vZmZzZXQsCisJCQkJIEZfWEdNX0lOVCwgRl9YR01fSU5UKTsKKwkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKKworCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9UWCk7CisJfSBlbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlsaW5rX3JlcG9ydChkZXYpOworfQorCiAvKioKICAqCXQzX29zX2xpbmtfY2hhbmdlZCAtIGhhbmRsZSBsaW5rIHN0YXR1cyBjaGFuZ2VzCiAgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rIGNoYW5nZQpAQCAtMTk2LDEwICsyMzEsMzQgQEAKIAlpZiAobGlua19zdGF0ICE9IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlpZiAobGlua19zdGF0KSB7CiAJCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwkJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLworCQkJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsKKwkJCQkgICAgcGktPm1hYy5vZmZzZXQpOworCQkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsCisJCQkJICAgICBBX1hHTV9JTlRfQ0FVU0UgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkgICAgIEZfWEdNX0lOVCk7CisKKwkJCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwKKwkJCQkJIEFfWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkJIEZfWEdNX0lOVCwgRl9YR01fSU5UKTsKKwkJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJfSBlbHNlIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQlwaS0+cGh5Lm9wcy0+cG93ZXJfZG93bigmcGktPnBoeSwgMSk7CisKKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKKwkJCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwKKwkJCQkJIEFfWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkJIEZfWEdNX0lOVCwgMCk7CisKKwkJCWlmIChpc18xMEcoYWRhcHRlcikpCisJCQkJcGktPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnBpLT5waHksIDEpOworCisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcGktPm1hYy5vZmZzZXQpOwogCQkJdDNfbWFjX2Rpc2FibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKIAkJCXQzX2xpbmtfc3RhcnQoJnBpLT5waHksIG1hYywgJnBpLT5saW5rX2NvbmZpZyk7CiAJCX0KQEAgLTExNzIsNiArMTIzMSwxMCBAQAogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOwogCisJLyogU3RvcCBsaW5rIGZhdWx0IGludGVycnVwdHMgKi8KKwl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKKwl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcGktPm1hYy5vZmZzZXQpOworCiAJdDNfcG9ydF9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOwogCXBpLT5waHkub3BzLT5wb3dlcl9kb3duKCZwaS0+cGh5LCAxKTsKQEAgLTEyOTgsNiArMTM2MSw3IEBACiAJIkNoZWNrVFhFblRvZ2dsZWQgICAiLAogCSJDaGVja1Jlc2V0cyAgICAgICAgIiwKIAorCSJMaW5rRmF1bHRzICAgICAgICAgIiwKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCkBAIC0xNDMwLDYgKzE0OTQsOCBAQAogCiAJKmRhdGErKyA9IHMtPm51bV90b2dnbGVkOwogCSpkYXRhKysgPSBzLT5udW1fcmVzZXRzOworCisJKmRhdGErKyA9IHMtPmxpbmtfZmF1bHRzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnX2Jsb2NrX2R1bXAoc3RydWN0IGFkYXB0ZXIgKmFwLCB2b2lkICpidWYsCkBAIC0yNDI0LDggKzI0OTAsMjAgQEAKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBvcnRbaV07CiAJCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkgJiYgbmV0aWZfcnVubmluZyhkZXYpKQorCQlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOworCQlpZiAocC0+bGlua19mYXVsdCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOworCQkJY29udGludWU7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOworCisJCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkgJiYgbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIGkpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHAtPm1hYy5vZmZzZXQpOworCiAJCQl0M19saW5rX2NoYW5nZWQoYWRhcHRlciwgaSk7CisJCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgaSk7CisJCX0KIAl9CiB9CiAKQEAgLTI0NzAsNiArMjU0OCw4IEBACiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCiAJCQkJCSAgICAgICBhZGFwX2NoZWNrX3Rhc2sud29yayk7CiAJY29uc3Qgc3RydWN0IGFkYXB0ZXJfcGFyYW1zICpwID0gJmFkYXB0ZXItPnBhcmFtczsKKwlpbnQgcG9ydDsKKwl1bnNpZ25lZCBpbnQgdiwgc3RhdHVzLCByZXNldDsKIAogCWFkYXB0ZXItPmNoZWNrX3Rhc2tfY250Kys7CiAKQEAgLTI0ODgsNiArMjU2OCw1NCBAQAogCWlmIChwLT5yZXYgPT0gVDNfUkVWX0IyKQogCQljaGVja190M2IyX21hYyhhZGFwdGVyKTsKIAorCS8qCisJICogU2NhbiB0aGUgWEdNQUMncyB0byBjaGVjayBmb3IgdmFyaW91cyBjb25kaXRpb25zIHdoaWNoIHdlIHdhbnQgdG8KKwkgKiBtb25pdG9yIGluIGEgcGVyaW9kaWMgcG9sbGluZyBtYW5uZXIgcmF0aGVyIHRoYW4gdmlhIGFuIGludGVycnVwdAorCSAqIGNvbmRpdGlvbi4gIFRoaXMgaXMgdXNlZCBmb3IgY29uZGl0aW9ucyB3aGljaCB3b3VsZCBvdGhlcndpc2UgZmxvb2QKKwkgKiB0aGUgc3lzdGVtIHdpdGggaW50ZXJydXB0cyBhbmQgd2Ugb25seSByZWFsbHkgbmVlZCB0byBrbm93IHRoYXQgdGhlCisJICogY29uZGl0aW9ucyBhcmUgImhhcHBlbmluZyIgLi4uICBGb3IgZWFjaCBjb25kaXRpb24gd2UgY291bnQgdGhlCisJICogZGV0ZWN0aW9uIG9mIHRoZSBjb25kaXRpb24gYW5kIHJlc2V0IGl0IGZvciB0aGUgbmV4dCBwb2xsaW5nIGxvb3AuCisJICovCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwb3J0KSB7CisJCXN0cnVjdCBjbWFjICptYWMgPSAgJmFkYXAycGluZm8oYWRhcHRlciwgcG9ydCktPm1hYzsKKwkJdTMyIGNhdXNlOworCisJCWNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpOworCQlyZXNldCA9IDA7CisJCWlmIChjYXVzZSAmIEZfUlhGSUZPX09WRVJGTE9XKSB7CisJCQltYWMtPnN0YXRzLnJ4X2ZpZm9fb3ZmbCsrOworCQkJcmVzZXQgfD0gRl9SWEZJRk9fT1ZFUkZMT1c7CisJCX0KKworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQsIHJlc2V0KTsKKwl9CisKKwkvKgorCSAqIFdlIGRvIHRoZSBzYW1lIGFzIGFib3ZlIGZvciBGTF9FTVBUWSBpbnRlcnJ1cHRzLgorCSAqLworCXN0YXR1cyA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfU0dfSU5UX0NBVVNFKTsKKwlyZXNldCA9IDA7CisKKwlpZiAoc3RhdHVzICYgRl9GTEVNUFRZKSB7CisJCXN0cnVjdCBzZ2VfcXNldCAqcXMgPSAmYWRhcHRlci0+c2dlLnFzWzBdOworCQlpbnQgaSA9IDA7CisKKwkJcmVzZXQgfD0gRl9GTEVNUFRZOworCisJCXYgPSAodDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19SU1BRX0ZMX1NUQVRVUykgPj4gU19GTDBFTVBUWSkgJgorCQkgICAgMHhmZmZmOworCisJCXdoaWxlICh2KSB7CisJCQlxcy0+ZmxbaV0uZW1wdHkgKz0gKHYgJiAxKTsKKwkJCWlmIChpKQorCQkJCXFzKys7CisJCQlpIF49IDE7CisJCQl2ID4+PSAxOworCQl9CisJfQorCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfSU5UX0NBVVNFLCByZXNldCk7CisKIAkvKiBTY2hlZHVsZSB0aGUgbmV4dCBjaGVjayB1cGRhdGUgaWYgYW55IHBvcnQgaXMgYWN0aXZlLiAqLwogCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CiAJaWYgKGFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCAmIFBPUlRfTUFTSykKQEAgLTI1MDIsOSArMjYzMCwyMyBAQAogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAogCQkJCQkgICAgICAgZXh0X2ludHJfaGFuZGxlcl90YXNrKTsKKwlpbnQgaTsKIAorCS8qIERpc2FibGUgbGluayBmYXVsdCBpbnRlcnJ1cHRzICovCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIGkpOworCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcC0+bWFjLm9mZnNldCk7CisJfQorCisJLyogUmUtZW5hYmxlIGxpbmsgZmF1bHQgaW50ZXJydXB0cyAqLwogCXQzX3BoeV9pbnRyX2hhbmRsZXIoYWRhcHRlcik7CiAKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpCisJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBpKTsKKwogCS8qIE5vdyByZWVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKIAlpZiAoYWRhcHRlci0+c2xvd19pbnRyX21hc2spIHsKQEAgLTI1MzcsNiArMjY3OSwzMiBAQAogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT53b3JrX2xvY2spOwogfQogCitzdGF0aWMgdm9pZCBsaW5rX2ZhdWx0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAorCQkJCQkgICAgICAgbGlua19mYXVsdF9oYW5kbGVyX3Rhc2spOworCWludCBpOworCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkJaWYgKHBpLT5saW5rX2ZhdWx0KQorCQkJdDNfbGlua19mYXVsdChhZGFwdGVyLCBpKTsKKwl9Cit9CisKK3ZvaWQgdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtwb3J0X2lkXTsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7CisJcGktPmxpbmtfZmF1bHQgPSAxOworCXF1ZXVlX3dvcmsoY3hnYjNfd3EsICZhZGFwdGVyLT5saW5rX2ZhdWx0X2hhbmRsZXJfdGFzayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7Cit9CisKIHN0YXRpYyBpbnQgdDNfYWRhcHRlcl9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHJlc2V0KQogewogCWludCBpLCByZXQgPSAwOwpAQCAtMjY1Myw3ICsyODIxLDYgQEAKIAkJQ0hfQUxFUlQoYWRhcHRlciwgIkZXIHN0YXR1czogMHgleCwgMHgleCwgMHgleCwgMHgleFxuIiwKIAkJCSBmd19zdGF0dXNbMF0sIGZ3X3N0YXR1c1sxXSwKIAkJCSBmd19zdGF0dXNbMl0sIGZ3X3N0YXR1c1szXSk7Ci0KIH0KIAogLyoqCkBAIC0yOTExLDYgKzMwNzgsNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmFkYXB0ZXJfbGlzdCk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5leHRfaW50cl9oYW5kbGVyX3Rhc2ssIGV4dF9pbnRyX3Rhc2spOworCUlOSVRfV09SSygmYWRhcHRlci0+bGlua19mYXVsdF9oYW5kbGVyX3Rhc2ssIGxpbmtfZmF1bHRfdGFzayk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5mYXRhbF9lcnJvcl9oYW5kbGVyX3Rhc2ssIGZhdGFsX2Vycm9yX3Rhc2spOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT5hZGFwX2NoZWNrX3Rhc2ssIHQzX2FkYXBfY2hlY2tfdGFzayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaAppbmRleCBhMDM1ZDVjMi4uMWI1MzI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaApAQCAtMTcwLDYgKzE3MCwxMCBAQAogCiAjZGVmaW5lIFNfUlNQUTBESVNBQkxFRCAgICA4CiAKKyNkZWZpbmUgU19GTDBFTVBUWSAgICAxNgorI2RlZmluZSBWX0ZMMEVNUFRZKHgpICgoeCkgPDwgU19GTDBFTVBUWSkKKyNkZWZpbmUgRl9GTDBFTVBUWSAgICBWX0ZMMEVNUFRZKDFVKQorCiAjZGVmaW5lIEFfU0dfRUdSX1JDUV9EUkJfVEhSU0ggMHg1NAogCiAjZGVmaW5lIFNfSElSQ1FEUkJUSFJTSCAgICAxNgpAQCAtMjU4LDYgKzI2MiwxMCBAQAogI2RlZmluZSBWX1JTUFFDUkVESVRPVkVSRk9XKHgpICgoeCkgPDwgU19SU1BRQ1JFRElUT1ZFUkZPVykKICNkZWZpbmUgRl9SU1BRQ1JFRElUT1ZFUkZPVyAgICBWX1JTUFFDUkVESVRPVkVSRk9XKDFVKQogCisjZGVmaW5lIFNfRkxFTVBUWSAgICAxCisjZGVmaW5lIFZfRkxFTVBUWSh4KSAoKHgpIDw8IFNfRkxFTVBUWSkKKyNkZWZpbmUgRl9GTEVNUFRZICAgIFZfRkxFTVBUWSgxVSkKKwogI2RlZmluZSBBX1NHX0lOVF9FTkFCTEUgMHg2MAogCiAjZGVmaW5lIEFfU0dfQ01EUV9DUkVESVRfVEggMHg2NApAQCAtMjIwNyw2ICsyMjE1LDE1IEBACiAKICNkZWZpbmUgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfTE9XXzggMHg4NTQKIAorI2RlZmluZSBBX1hHTV9JTlRfU1RBVFVTIDB4ODZjCisKKyNkZWZpbmUgU19MSU5LRkFVTFRDSEFOR0UgICAgOQorI2RlZmluZSBWX0xJTktGQVVMVENIQU5HRSh4KSAoKHgpIDw8IFNfTElOS0ZBVUxUQ0hBTkdFKQorI2RlZmluZSBGX0xJTktGQVVMVENIQU5HRSAgICBWX0xJTktGQVVMVENIQU5HRSgxVSkKKworI2RlZmluZSBBX1hHTV9YR01fSU5UX0VOQUJMRSAweDg3NAorI2RlZmluZSBBX1hHTV9YR01fSU5UX0RJU0FCTEUgMHg4NzgKKwogI2RlZmluZSBBX1hHTV9TVEFUX0NUUkwgMHg4ODAKIAogI2RlZmluZSBTX0NMUlNUQVRTICAgIDIKQEAgLTI0MDUsNiArMjQyMiwxMCBAQAogI2RlZmluZSBWX1hBVUlQQ1NBTElHTkNIQU5HRSh4KSAoKHgpIDw8IFNfWEFVSVBDU0FMSUdOQ0hBTkdFKQogI2RlZmluZSBGX1hBVUlQQ1NBTElHTkNIQU5HRSAgICBWX1hBVUlQQ1NBTElHTkNIQU5HRSgxVSkKIAorI2RlZmluZSBTX1hHTV9JTlQgICAgMAorI2RlZmluZSBWX1hHTV9JTlQoeCkgKCh4KSA8PCBTX1hHTV9JTlQpCisjZGVmaW5lIEZfWEdNX0lOVCAgICBWX1hHTV9JTlQoMVUpCisKICNkZWZpbmUgQV9YR01fSU5UX0NBVVNFIDB4OGQ4CiAKICNkZWZpbmUgQV9YR01fWEFVSV9BQ1RfQ1RSTCAweDhkYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCA4MjA1YWE0Li5hNzU1NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtNjEsMTIgKzYxLDE5IEBACiAjZGVmaW5lIEZMMV9QR19PUkRFUiAoUEFHRV9TSVpFID4gODE5MiA/IDAgOiAxKQogCiAjZGVmaW5lIFNHRV9SWF9EUk9QX1RIUkVTIDE2CisjZGVmaW5lIFJYX1JFQ0xBSU1fUEVSSU9EIChIWi80KQogCiAvKgorICogTWF4IG51bWJlciBvZiBSeCBidWZmZXJzIHdlIHJlcGxlbmlzaCBhdCBhIHRpbWUuCisgKi8KKyNkZWZpbmUgTUFYX1JYX1JFRklMTCAxNlUKKy8qCiAgKiBQZXJpb2Qgb2YgdGhlIFR4IGJ1ZmZlciByZWNsYWltIHRpbWVyLiAgVGhpcyB0aW1lciBkb2VzIG5vdCBuZWVkIHRvIHJ1bgogICogZnJlcXVlbnRseSBhcyBUeCBidWZmZXJzIGFyZSB1c3VhbGx5IHJlY2xhaW1lZCBieSBuZXcgVHggcGFja2V0cy4KICAqLwogI2RlZmluZSBUWF9SRUNMQUlNX1BFUklPRCAoSFogLyA0KQorI2RlZmluZSBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LIDY0VQorI2RlZmluZSBUWF9SRUNMQUlNX0NIVU5LIDE2VQogCiAvKiBXUiBzaXplIGluIGJ5dGVzICovCiAjZGVmaW5lIFdSX0xFTiAoV1JfRkxJVFMgKiA4KQpAQCAtMzA0LDIxICszMTEsMjUgQEAKICAqCXJlY2xhaW1fY29tcGxldGVkX3R4IC0gcmVjbGFpbXMgY29tcGxldGVkIFR4IGRlc2NyaXB0b3JzCiAgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKICAqCUBxOiB0aGUgVHggcXVldWUgdG8gcmVjbGFpbSBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgZnJvbQorICoJQGNodW5rOiBtYXhpbXVtIG51bWJlciBvZiBkZXNjcmlwdG9ycyB0byByZWNsYWltCiAgKgogICoJUmVjbGFpbXMgVHggZGVzY3JpcHRvcnMgdGhhdCB0aGUgU0dFIGhhcyBpbmRpY2F0ZWQgaXQgaGFzIHByb2Nlc3NlZCwKICAqCWFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZCBidWZmZXJzIGlmIHBvc3NpYmxlLiAgQ2FsbGVkIHdpdGggdGhlIFR4CiAgKglxdWV1ZSdzIGxvY2sgaGVsZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHJlY2xhaW1fY29tcGxldGVkX3R4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJCQlzdHJ1Y3Qgc2dlX3R4cSAqcSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlY2xhaW1fY29tcGxldGVkX3R4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQkJc3RydWN0IHNnZV90eHEgKnEsCisJCQkJCQl1bnNpZ25lZCBpbnQgY2h1bmspCiB7CiAJdW5zaWduZWQgaW50IHJlY2xhaW0gPSBxLT5wcm9jZXNzZWQgLSBxLT5jbGVhbmVkOwogCisJcmVjbGFpbSA9IG1pbihjaHVuaywgcmVjbGFpbSk7CiAJaWYgKHJlY2xhaW0pIHsKIAkJZnJlZV90eF9kZXNjKGFkYXB0ZXIsIHEsIHJlY2xhaW0pOwogCQlxLT5jbGVhbmVkICs9IHJlY2xhaW07CiAJCXEtPmluX3VzZSAtPSByZWNsYWltOwogCX0KKwlyZXR1cm4gcS0+cHJvY2Vzc2VkIC0gcS0+Y2xlYW5lZDsKIH0KIAogLyoqCkBAIC0zMzQsNiArMzQ1LDE4IEBACiAJcmV0dXJuIHEtPmluX3VzZSAtIHIgPCAocS0+c2l6ZSA+PiAxKTsKIH0KIAorc3RhdGljIHZvaWQgY2xlYXJfcnhfZGVzYyhjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpxLCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqZCkKK3sKKwlpZiAocS0+dXNlX3BhZ2VzKSB7CisJCWlmIChkLT5wZ19jaHVuay5wYWdlKQorCQkJcHV0X3BhZ2UoZC0+cGdfY2h1bmsucGFnZSk7CisJCWQtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOworCX0gZWxzZSB7CisJCWtmcmVlX3NrYihkLT5za2IpOworCQlkLT5za2IgPSBOVUxMOworCX0KK30KKwogLyoqCiAgKglmcmVlX3J4X2J1ZnMgLSBmcmVlIHRoZSBSeCBidWZmZXJzIG9uIGFuIFNHRSBmcmVlIGxpc3QKICAqCUBwZGV2OiB0aGUgUENJIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFkYXB0ZXIKQEAgLTM1MSwxNCArMzc0LDcgQEAKIAogCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGQsIGRtYV9hZGRyKSwKIAkJCQkgcS0+YnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChxLT51c2VfcGFnZXMpIHsKLQkJCWlmIChkLT5wZ19jaHVuay5wYWdlKQotCQkJCXB1dF9wYWdlKGQtPnBnX2NodW5rLnBhZ2UpOwotCQkJZC0+cGdfY2h1bmsucGFnZSA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlrZnJlZV9za2IoZC0+c2tiKTsKLQkJCWQtPnNrYiA9IE5VTEw7Ci0JCX0KKwkJY2xlYXJfcnhfZGVzYyhxLCBkKTsKIAkJaWYgKCsrY2lkeCA9PSBxLT5zaXplKQogCQkJY2lkeCA9IDA7CiAJfQpAQCAtNDIzLDYgKzQzOSwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmluZ19mbF9kYihzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSkKK3sKKwlpZiAocS0+cGVuZF9jcmVkID49IHEtPmNyZWRpdHMgLyA0KSB7CisJCXEtPnBlbmRfY3JlZCA9IDA7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisJfQorfQorCiAvKioKICAqCXJlZmlsbF9mbCAtIHJlZmlsbCBhbiBTR0UgZnJlZS1idWZmZXIgbGlzdAogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCkBAIC00NjMsMTAgKzQ4Nyw3IEBACiAJCWVyciA9IGFkZF9vbmVfcnhfYnVmKGJ1Zl9zdGFydCwgcS0+YnVmX3NpemUsIGQsIHNkLCBxLT5nZW4sCiAJCQkJICAgICBhZGFwLT5wZGV2KTsKIAkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCWlmICghcS0+dXNlX3BhZ2VzKSB7Ci0JCQkJa2ZyZWVfc2tiKHNkLT5za2IpOwotCQkJCXNkLT5za2IgPSBOVUxMOwotCQkJfQorCQkJY2xlYXJfcnhfZGVzYyhxLCBzZCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC00NzgsMTkgKzQ5OSwxOSBAQAogCQkJc2QgPSBxLT5zZGVzYzsKIAkJCWQgPSBxLT5kZXNjOwogCQl9Ci0JCXEtPmNyZWRpdHMrKzsKIAkJY291bnQrKzsKIAl9Ci0Jd21iKCk7Ci0JaWYgKGxpa2VseShjb3VudCkpCi0JCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisKKwlxLT5jcmVkaXRzICs9IGNvdW50OworCXEtPnBlbmRfY3JlZCArPSBjb3VudDsKKwlyaW5nX2ZsX2RiKGFkYXAsIHEpOwogCiAJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZWZpbGxfZmwoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKmZsKQogewotCXJlZmlsbF9mbChhZGFwLCBmbCwgbWluKDE2VSwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksCisJcmVmaWxsX2ZsKGFkYXAsIGZsLCBtaW4oTUFYX1JYX1JFRklMTCwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksCiAJCSAgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVApOwogfQogCkBAIC01MTUsMTMgKzUzNiwxNSBAQAogCXdtYigpOwogCXRvLT5sZW5fZ2VuID0gY3B1X3RvX2JlMzIoVl9GTERfR0VOMShxLT5nZW4pKTsKIAl0by0+Z2VuMiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjIocS0+Z2VuKSk7Ci0JcS0+Y3JlZGl0cysrOwogCiAJaWYgKCsrcS0+cGlkeCA9PSBxLT5zaXplKSB7CiAJCXEtPnBpZHggPSAwOwogCQlxLT5nZW4gXj0gMTsKIAl9Ci0JdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfS0RPT1JCRUxMLCBWX0VHUkNOVFgocS0+Y250eHRfaWQpKTsKKworCXEtPmNyZWRpdHMrKzsKKwlxLT5wZW5kX2NyZWQrKzsKKwlyaW5nX2ZsX2RiKGFkYXAsIHEpOwogfQogCiAvKioKQEAgLTU4NSw2ICs2MDgsNyBAQAogCW1lbXNldChxLT50eHEsIDAsIHNpemVvZihzdHJ1Y3Qgc2dlX3R4cSkgKiBTR0VfVFhRX1BFUl9TRVQpOwogCXEtPnR4cV9zdG9wcGVkID0gMDsKIAlxLT50eF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uID0gTlVMTDsgLyogZm9yIHQzX3N0b3Bfc2dlX3RpbWVycygpICovCisJcS0+cnhfcmVjbGFpbV90aW1lci5mdW5jdGlvbiA9IE5VTEw7CiAJcS0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzID0gcS0+bHJvX2ZyYWdfdGJsLmxlbiA9IDA7CiB9CiAKQEAgLTczMiw3ICs3NTYsOSBAQAogCQlyZXR1cm4gc2tiOwogCX0KIAotCWlmICh1bmxpa2VseShmbC0+Y3JlZGl0cyA8IGRyb3BfdGhyZXMpKQorCWlmICh1bmxpa2VseShmbC0+Y3JlZGl0cyA8IGRyb3BfdGhyZXMpICYmCisJICAgIHJlZmlsbF9mbChhZGFwLCBmbCwgbWluKE1BWF9SWF9SRUZJTEwsIGZsLT5zaXplIC0gZmwtPmNyZWRpdHMgLSAxKSwKKwkJICAgICAgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVApID09IDApCiAJCWdvdG8gcmVjeWNsZTsKIAogdXNlX29yaWdfYnVmOgpAQCAtODEyLDE0ICs4MzgsMTUgQEAKIAkJCQkgICBsZW4gLSBTR0VfUlhfUFVMTF9MRU4pOwogCQluZXdza2ItPmxlbiA9IGxlbjsKIAkJbmV3c2tiLT5kYXRhX2xlbiA9IGxlbiAtIFNHRV9SWF9QVUxMX0xFTjsKKwkJbmV3c2tiLT50cnVlc2l6ZSArPSBuZXdza2ItPmRhdGFfbGVuOwogCX0gZWxzZSB7CiAJCXNrYl9maWxsX3BhZ2VfZGVzYyhuZXdza2IsIHNrYl9zaGluZm8obmV3c2tiKS0+bnJfZnJhZ3MsCiAJCQkJICAgc2QtPnBnX2NodW5rLnBhZ2UsCiAJCQkJICAgc2QtPnBnX2NodW5rLm9mZnNldCwgbGVuKTsKIAkJbmV3c2tiLT5sZW4gKz0gbGVuOwogCQluZXdza2ItPmRhdGFfbGVuICs9IGxlbjsKKwkJbmV3c2tiLT50cnVlc2l6ZSArPSBsZW47CiAJfQotCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbmV3c2tiLT5kYXRhX2xlbjsKIAogCWZsLT5jcmVkaXRzLS07CiAJLyoKQEAgLTExNjAsNyArMTE4Nyw3IEBACiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHFpZHgpOwogCiAJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKLQlyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxKTsKKwlyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxLCBUWF9SRUNMQUlNX0NIVU5LKTsKIAogCWNyZWRpdHMgPSBxLT5zaXplIC0gcS0+aW5fdXNlOwogCW5kZXNjID0gY2FsY190eF9kZXNjcyhza2IpOwpAQCAtMTU2OSw3ICsxNTk2LDcgQEAKIAl1bnNpZ25lZCBpbnQgbmRlc2MgPSBjYWxjX3R4X2Rlc2NzX29mbGQoc2tiKSwgcGlkeCwgZ2VuOwogCiAJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKLSAgICAgIGFnYWluOnJlY2xhaW1fY29tcGxldGVkX3R4KGFkYXAsIHEpOworYWdhaW46CXJlY2xhaW1fY29tcGxldGVkX3R4KGFkYXAsIHEsIFRYX1JFQ0xBSU1fQ0hVTkspOwogCiAJcmV0ID0gY2hlY2tfZGVzY19hdmFpbChhZGFwLCBxLCBza2IsIG5kZXNjLCBUWFFfT0ZMRCk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKQEAgLTE2MTEsNyArMTYzOCw3IEBACiAJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaS0+YWRhcHRlcjsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0gICAgICBhZ2FpbjpyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxKTsKK2FnYWluOglyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxLCBUWF9SRUNMQUlNX0NIVU5LKTsKIAogCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJnEtPnNlbmRxKSkgIT0gTlVMTCkgewogCQl1bnNpZ25lZCBpbnQgZ2VuLCBwaWR4OwpAQCAtMjAxMCw2ICsyMDM3LDggQEAKIAlwY2lfdW5tYXBfc2luZ2xlKGFkYXAtPnBkZXYsIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksCiAJCQkgZmwtPmJ1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCisJcHJlZmV0Y2goJnFzLT5scm9fZnJhZ190YmwpOworCiAJcnhfZnJhZyArPSBucl9mcmFnczsKIAlyeF9mcmFnLT5wYWdlID0gc2QtPnBnX2NodW5rLnBhZ2U7CiAJcnhfZnJhZy0+cGFnZV9vZmZzZXQgPSBzZC0+cGdfY2h1bmsub2Zmc2V0ICsgb2Zmc2V0OwpAQCAtMjY5Niw3ICsyNzI1LDggQEAKICAqLwogdm9pZCB0M19zZ2VfZXJyX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1bnNpZ25lZCBpbnQgdiwgc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UpOworCXVuc2lnbmVkIGludCB2LCBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSkgJgorCQkJCSB+Rl9GTEVNUFRZOwogCiAJaWYgKHN0YXR1cyAmIFNHRV9QQVJFUlIpCiAJCUNIX0FMRVJUKGFkYXB0ZXIsICJTR0UgcGFyaXR5IGVycm9yICgweCV4KVxuIiwKQEAgLTI3MjYsMTMgKzI3NTYsMTMgQEAKIH0KIAogLyoqCi0gKglzZ2VfdGltZXJfY2IgLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglzZ2VfdGltZXJfdHggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CiAgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KICAqCiAgKglSdW5zIHBlcmlvZGljYWxseSBmcm9tIGEgdGltZXIgdG8gcGVyZm9ybSBtYWludGVuYW5jZSBvZiBhbiBTR0UgcXVldWUKICAqCXNldC4gIEl0IHBlcmZvcm1zIHR3byB0YXNrczoKICAqCi0gKglhKSBDbGVhbnMgdXAgYW55IGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycyB0aGF0IG1heSBzdGlsbCBiZSBwZW5kaW5nLgorICoJQ2xlYW5zIHVwIGFueSBjb21wbGV0ZWQgVHggZGVzY3JpcHRvcnMgdGhhdCBtYXkgc3RpbGwgYmUgcGVuZGluZy4KICAqCU5vcm1hbCBkZXNjcmlwdG9yIGNsZWFudXAgaGFwcGVucyB3aGVuIG5ldyBwYWNrZXRzIGFyZSBhZGRlZCB0byBhIFR4CiAgKglxdWV1ZSBzbyB0aGlzIHRpbWVyIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudCBhbmQgZG9lcyBhbnkgY2xlYW51cCBvbmx5CiAgKglpZiB0aGUgVHggcXVldWUgaGFzIG5vdCBzZWVuIGFueSBuZXcgcGFja2V0cyBpbiBhIHdoaWxlLiAgV2UgbWFrZSBhCkBAIC0yNzQyLDUxICsyNzcyLDg3IEBACiAgKgl1cCkuICBTaW5jZSBjb250cm9sIHF1ZXVlcyB1c2UgaW1tZWRpYXRlIGRhdGEgZXhjbHVzaXZlbHkgd2UgZG9uJ3QKICAqCWJvdGhlciBjbGVhbmluZyB0aGVtIHVwIGhlcmUuCiAgKgotICoJYikgUmVwbGVuaXNoZXMgUnggcXVldWVzIHRoYXQgaGF2ZSBydW4gb3V0IGR1ZSB0byBtZW1vcnkgc2hvcnRhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHNnZV90aW1lcl90eCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNnZV9xc2V0ICpxcyA9IChzdHJ1Y3Qgc2dlX3FzZXQgKilkYXRhOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYocXMtPm5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaS0+YWRhcHRlcjsKKwl1bnNpZ25lZCBpbnQgdGJkW1NHRV9UWFFfUEVSX1NFVF0gPSB7MCwgMH07CisJdW5zaWduZWQgbG9uZyBuZXh0X3BlcmlvZDsKKworCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKKwkJdGJkW1RYUV9FVEhdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0sCisJCQkJCQkgICAgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyk7CisJCXNwaW5fdW5sb2NrKCZxcy0+dHhxW1RYUV9FVEhdLmxvY2spOworCX0KKwlpZiAoc3Bpbl90cnlsb2NrKCZxcy0+dHhxW1RYUV9PRkxEXS5sb2NrKSkgeworCQl0YmRbVFhRX09GTERdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdLAorCQkJCQkJICAgICBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LKTsKKwkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOworCX0KKworCW5leHRfcGVyaW9kID0gVFhfUkVDTEFJTV9QRVJJT0QgPj4KKwkJICAgICAgKG1heCh0YmRbVFhRX0VUSF0sIHRiZFtUWFFfT0ZMRF0pIC8KKwkJICAgICAgIFRYX1JFQ0xBSU1fVElNRVJfQ0hVTkspOworCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBuZXh0X3BlcmlvZCk7Cit9CisKKy8qCisgKglzZ2VfdGltZXJfcnggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KKyAqCisgKglhKSBSZXBsZW5pc2hlcyBSeCBxdWV1ZXMgdGhhdCBoYXZlIHJ1biBvdXQgZHVlIHRvIG1lbW9yeSBzaG9ydGFnZS4KICAqCU5vcm1hbGx5IG5ldyBSeCBidWZmZXJzIGFyZSBhZGRlZCB3aGVuIGV4aXN0aW5nIG9uZXMgYXJlIGNvbnN1bWVkIGJ1dAogICoJd2hlbiBvdXQgb2YgbWVtb3J5IGEgcXVldWUgY2FuIGJlY29tZSBlbXB0eS4gIFdlIHRyeSB0byBhZGQgb25seSBhIGZldwogICoJYnVmZmVycyBoZXJlLCB0aGUgcXVldWUgd2lsbCBiZSByZXBsZW5pc2hlZCBmdWxseSBhcyB0aGVzZSBuZXcgYnVmZmVycwogICoJYXJlIHVzZWQgdXAgaWYgbWVtb3J5IHNob3J0YWdlIGhhcyBzdWJzaWRlZC4KKyAqCisgKgliKSBSZXR1cm4gY29hbGVzY2VkIHJlc3BvbnNlIHF1ZXVlIGNyZWRpdHMgaW4gY2FzZSBhIHJlc3BvbnNlIHF1ZXVlIGlzCisgKglzdGFydmVkLgorICoKICAqLwotc3RhdGljIHZvaWQgc2dlX3RpbWVyX2NiKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHNnZV90aW1lcl9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3BpbmxvY2tfdCAqbG9jazsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gKHN0cnVjdCBzZ2VfcXNldCAqKWRhdGE7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBxcy0+YWRhcDsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KHFzLT5uZXRkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CisJdTMyIHN0YXR1czsKIAotCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0pOwotCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKTsKLQl9Ci0JaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdKTsKLQkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOwotCX0KLQlsb2NrID0gKGFkYXAtPmZsYWdzICYgVVNJTkdfTVNJWCkgPyAmcXMtPnJzcHEubG9jayA6Ci0JCQkJCSAgICAmYWRhcC0+c2dlLnFzWzBdLnJzcHEubG9jazsKLQlpZiAoc3Bpbl90cnlsb2NrX2lycShsb2NrKSkgewotCQlpZiAoIW5hcGlfaXNfc2NoZWR1bGVkKCZxcy0+bmFwaSkpIHsKLQkJCXUzMiBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTKTsKKwlsb2NrID0gYWRhcC0+cGFyYW1zLnJldiA+IDAgPworCSAgICAgICAmcXMtPnJzcHEubG9jayA6ICZhZGFwLT5zZ2UucXNbMF0ucnNwcS5sb2NrOwogCi0JCQlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKLQkJCQlfX3JlZmlsbF9mbChhZGFwLCAmcXMtPmZsWzBdKTsKLQkJCWlmIChxcy0+ZmxbMV0uY3JlZGl0cyA8IHFzLT5mbFsxXS5zaXplKQotCQkJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCWlmICghc3Bpbl90cnlsb2NrX2lycShsb2NrKSkKKwkJZ290byBvdXQ7CiAKLQkJCWlmIChzdGF0dXMgJiAoMSA8PCBxcy0+cnNwcS5jbnR4dF9pZCkpIHsKLQkJCQlxcy0+cnNwcS5zdGFydmVkKys7Ci0JCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKLQkJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKLQkJCQkJcXMtPnJzcHEuY3JlZGl0cy0tOwotCQkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKLQkJCQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfUlNQUV9GTF9TVEFUVVMsCi0JCQkJCQkgICAgIDEgPDwgcXMtPnJzcHEuY250eHRfaWQpOwotCQkJCX0KKwlpZiAobmFwaV9pc19zY2hlZHVsZWQoJnFzLT5uYXBpKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoYWRhcC0+cGFyYW1zLnJldiA8IDQpIHsKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUyk7CisKKwkJaWYgKHN0YXR1cyAmICgxIDw8IHFzLT5yc3BxLmNudHh0X2lkKSkgeworCQkJcXMtPnJzcHEuc3RhcnZlZCsrOworCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKKwkJCQlxcy0+cnNwcS5jcmVkaXRzLS07CisJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKKwkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKKwkJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUywKKwkJCQkJICAgICAxIDw8IHFzLT5yc3BxLmNudHh0X2lkKTsKIAkJCX0KIAkJfQotCQlzcGluX3VubG9ja19pcnEobG9jayk7CiAJfQotCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBUWF9SRUNMQUlNX1BFUklPRCk7CisKKwlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKKwkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFswXSk7CisJaWYgKHFzLT5mbFsxXS5jcmVkaXRzIDwgcXMtPmZsWzFdLnNpemUpCisJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworb3V0OgorCW1vZF90aW1lcigmcXMtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CiB9CiAKIC8qKgpAQCAtMjgyOSw3ICsyODk1LDggQEAKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnEgPSAmYWRhcHRlci0+c2dlLnFzW2lkXTsKIAogCWluaXRfcXNldF9jbnR4dChxLCBpZCk7Ci0Jc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9jYiwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl90eCwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9yeCwgKHVuc2lnbmVkIGxvbmcpcSk7CiAKIAlxLT5mbFswXS5kZXNjID0gYWxsb2NfcmluZyhhZGFwdGVyLT5wZGV2LCBwLT5mbF9zaXplLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyksCkBAIC0yOTc4LDYgKzMwNDUsOCBAQAogCQkgICAgIFZfTkVXVElNRVIocS0+cnNwcS5ob2xkb2ZmX3RtcikpOwogCiAJbW9kX3RpbWVyKCZxLT50eF9yZWNsYWltX3RpbWVyLCBqaWZmaWVzICsgVFhfUkVDTEFJTV9QRVJJT0QpOworCW1vZF90aW1lcigmcS0+cnhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFJYX1JFQ0xBSU1fUEVSSU9EKTsKKwogCXJldHVybiAwOwogCiBlcnJfdW5sb2NrOgpAQCAtMzAwMiw2ICszMDcxLDggQEAKIAogCQlpZiAocS0+dHhfcmVjbGFpbV90aW1lci5mdW5jdGlvbikKIAkJCWRlbF90aW1lcl9zeW5jKCZxLT50eF9yZWNsYWltX3RpbWVyKTsKKwkJaWYgKHEtPnJ4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24pCisJCQlkZWxfdGltZXJfc3luYygmcS0+cnhfcmVjbGFpbV90aW1lcik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwppbmRleCAyZDE0MzMwLi5mZjI2MmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKQEAgLTUxMiw2ICs1MTIsMTMgQEAKIAkgRl9HUElPNV9PVVRfVkFMIHwgRl9HUElPNl9PVVRfVkFMIHwgRl9HUElPMTBfT1VUX1ZBTCwKIAkgeyBTX0dQSU85LCBTX0dQSU8zIH0sIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfQVVJLAogCSAmbWkxX21kaW9fZXh0X29wcywgIkNoZWxzaW8gVDMyMCJ9LAorCXt9LAorCXt9LAorCXsxLCAwLAorCSBGX0dQSU8xX09FTiB8IEZfR1BJTzJfT0VOIHwgRl9HUElPNF9PRU4gfCBGX0dQSU82X09FTiB8IEZfR1BJTzdfT0VOIHwKKwkgRl9HUElPMTBfT0VOIHwgRl9HUElPMV9PVVRfVkFMIHwgRl9HUElPNl9PVVRfVkFMIHwgRl9HUElPMTBfT1VUX1ZBTCwKKwkgeyBTX0dQSU85IH0sIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfQVVJLAorCSAmbWkxX21kaW9fZXh0X29wcywgIkNoZWxzaW8gVDMxMCIgfSwKIH07CiAKIC8qCkBAIC0xMTQ2LDYgKzExNTMsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB0M19nYXRlX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyICpyeF9jZmcsCisJCQkgICAgICAgdTMyICpyeF9oYXNoX2hpZ2gsIHUzMiAqcnhfaGFzaF9sb3cpCit7CisJLyogc3RvcCBSeCB1bmljYXN0IHRyYWZmaWMgKi8KKwl0M19tYWNfZGlzYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisKKwkvKiBzdG9wIGJyb2FkY2FzdCwgbXVsdGljYXN0LCBwcm9taXNjdW91cyBtb2RlIHRyYWZmaWMgKi8KKwkqcnhfY2ZnID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcpOworCXQzX3NldF9yZWdfZmllbGQobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcsCisJCQkgRl9FTkhBU0hNQ0FTVCB8IEZfRElTQkNBU1QgfCBGX0NPUFlBTExGUkFNRVMsCisJCQkgRl9ESVNCQ0FTVCk7CisKKwkqcnhfaGFzaF9oaWdoID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0hJR0gpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgMCk7CisKKwkqcnhfaGFzaF9sb3cgPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgMCk7CisKKwkvKiBMZWF2ZSB0aW1lIHRvIGRyYWluIG1heCBSWCBmaWZvICovCisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCB0M19vcGVuX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyIHJ4X2NmZywKKwkJCSAgICAgICB1MzIgcnhfaGFzaF9oaWdoLCB1MzIgcnhfaGFzaF9sb3cpCit7CisJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisJdDNfc2V0X3JlZ19maWVsZChtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRywKKwkJCSBGX0VOSEFTSE1DQVNUIHwgRl9ESVNCQ0FTVCB8IEZfQ09QWUFMTEZSQU1FUywKKwkJCSByeF9jZmcpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgcnhfaGFzaF9oaWdoKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgcnhfaGFzaF9sb3cpOworfQogCiAvKioKICAqCXQzX2xpbmtfY2hhbmdlZCAtIGhhbmRsZSBpbnRlcmZhY2UgbGluayBjaGFuZ2VzCkBAIC0xMTYzLDkgKzEyMDIsMzIgQEAKIAlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CiAJc3RydWN0IGNtYWMgKm1hYyA9ICZwaS0+bWFjOwogCXN0cnVjdCBsaW5rX2NvbmZpZyAqbGMgPSAmcGktPmxpbmtfY29uZmlnOworCWludCBmb3JjZV9saW5rX2Rvd24gPSAwOwogCiAJcGh5LT5vcHMtPmdldF9saW5rX3N0YXR1cyhwaHksICZsaW5rX29rLCAmc3BlZWQsICZkdXBsZXgsICZmYyk7CiAKKwlpZiAoIWxjLT5saW5rX29rICYmIGxpbmtfb2spIHsKKwkJdTMyIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdzsKKwkJdTMyIHN0YXR1czsKKworCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgcG9ydF9pZCk7CisJCXQzX2dhdGVfcnhfdHJhZmZpYyhtYWMsICZyeF9jZmcsICZyeF9oYXNoX2hpZ2gsICZyeF9oYXNoX2xvdyk7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOworCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIG1hYy0+b2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAmIEZfTElOS0ZBVUxUQ0hBTkdFKSB7CisJCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisJCQlmb3JjZV9saW5rX2Rvd24gPSAxOworCQl9CisJCXQzX29wZW5fcnhfdHJhZmZpYyhtYWMsIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdyk7CisKKwkJaWYgKGZvcmNlX2xpbmtfZG93bikgeworCQkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJaWYgKGxjLT5yZXF1ZXN0ZWRfZmMgJiBQQVVTRV9BVVRPTkVHKQogCQlmYyAmPSBsYy0+cmVxdWVzdGVkX2ZjOwogCWVsc2UKQEAgLTExOTUsNiArMTI1Nyw1NyBAQAogCXQzX29zX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBwb3J0X2lkLCBsaW5rX29rLCBzcGVlZCwgZHVwbGV4LCBmYyk7CiB9CiAKK3ZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIHBvcnRfaWQpOworCXN0cnVjdCBjbWFjICptYWMgPSAmcGktPm1hYzsKKwlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CisJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwaS0+bGlua19jb25maWc7CisJaW50IGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjLCBsaW5rX2ZhdWx0OworCXUzMiByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3c7CisKKwl0M19nYXRlX3J4X3RyYWZmaWMobWFjLCAmcnhfY2ZnLCAmcnhfaGFzaF9oaWdoLCAmcnhfaGFzaF9sb3cpOworCisJaWYgKGFkYXB0ZXItPnBhcmFtcy5yZXYgPiAwICYmIHVzZXNfeGF1aShhZGFwdGVyKSkKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwgMCk7CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fUlhfQ1RSTCArIG1hYy0+b2Zmc2V0LCAwKTsKKwl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwl0M19vcGVuX3J4X3RyYWZmaWMobWFjLCByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3cpOworCisJbGlua19mYXVsdCA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsCisJCQkJIEFfWEdNX0lOVF9TVEFUVVMgKyBtYWMtPm9mZnNldCk7CisJbGlua19mYXVsdCAmPSBGX0xJTktGQVVMVENIQU5HRTsKKworCXBoeS0+b3BzLT5nZXRfbGlua19zdGF0dXMocGh5LCAmbGlua19vaywgJnNwZWVkLCAmZHVwbGV4LCAmZmMpOworCisJaWYgKGxpbmtfZmF1bHQpIHsKKwkJbGMtPmxpbmtfb2sgPSAwOworCQlsYy0+c3BlZWQgPSBTUEVFRF9JTlZBTElEOworCQlsYy0+ZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisKKwkJdDNfb3NfbGlua19mYXVsdChhZGFwdGVyLCBwb3J0X2lkLCAwKTsKKworCQkvKiBBY2NvdW50IGxpbmsgZmF1bHRzIG9ubHkgd2hlbiB0aGUgcGh5IHJlcG9ydHMgYSBsaW5rIHVwICovCisJCWlmIChsaW5rX29rKQorCQkJbWFjLT5zdGF0cy5saW5rX2ZhdWx0cysrOworCisJCW1zbGVlcCgxMDAwKTsKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCX0gZWxzZSB7CisJCWlmIChsaW5rX29rKQorCQkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwKKwkJCQkgICAgIEZfVFhBQ1RFTkFCTEUgfCBGX1JYRU4pOworCisJCXBpLT5saW5rX2ZhdWx0ID0gMDsKKwkJbGMtPmxpbmtfb2sgPSAodW5zaWduZWQgY2hhcilsaW5rX29rOworCQlsYy0+c3BlZWQgPSBzcGVlZCA8IDAgPyBTUEVFRF9JTlZBTElEIDogc3BlZWQ7CisJCWxjLT5kdXBsZXggPSBkdXBsZXggPCAwID8gRFVQTEVYX0lOVkFMSUQgOiBkdXBsZXg7CisJCXQzX29zX2xpbmtfZmF1bHQoYWRhcHRlciwgcG9ydF9pZCwgbGlua19vayk7CisJfQorfQorCiAvKioKICAqCXQzX2xpbmtfc3RhcnQgLSBhcHBseSBsaW5rIGNvbmZpZ3VyYXRpb24gdG8gTUFDL1BIWQogICoJQHBoeTogdGhlIFBIWSB0byBzZXR1cApAQCAtMTMxNiw3ICsxNDI5LDcgQEAKICNkZWZpbmUgTUM3X0lOVFJfTUFTSyAoRl9BRSB8IEZfVUUgfCBGX0NFIHwgVl9QRShNX1BFKSkKICNkZWZpbmUgWEdNX0lOVFJfTUFTSyAoVl9UWEZJRk9fUFJUWV9FUlIoTV9UWEZJRk9fUFJUWV9FUlIpIHwgXAogCQkgICAgICAgVl9SWEZJRk9fUFJUWV9FUlIoTV9SWEZJRk9fUFJUWV9FUlIpIHwgXAotCQkgICAgICAgRl9UWEZJRk9fVU5ERVJSVU4gfCBGX1JYRklGT19PVkVSRkxPVykKKwkJICAgICAgIEZfVFhGSUZPX1VOREVSUlVOKQogI2RlZmluZSBQQ0lYX0lOVFJfTUFTSyAoRl9NU1RERVRQQVJFUlIgfCBGX1NJR1RBUkFCVCB8IEZfUkNWVEFSQUJUIHwgXAogCQkJRl9SQ1ZNU1RBQlQgfCBGX1NJR1NZU0VSUiB8IEZfREVUUEFSRVJSIHwgXAogCQkJRl9TUExDTVBESVMgfCBGX1VOWFNQTENNUCB8IEZfUkNWU1BMQ01QRVJSIHwgXApAQCAtMTM1MywxMSArMTQ2NiwxMSBAQAogCQkgICAgICAgVl9UWDFUUFBBUkVSUkVOQihNX1RYMVRQUEFSRVJSRU5CKSB8IFwKIAkJICAgICAgIFZfUlhUUFBBUkVSUkVOQihNX1JYVFBQQVJFUlJFTkIpIHwgXAogCQkgICAgICAgVl9NQ0FQQVJFUlJFTkIoTV9NQ0FQQVJFUlJFTkIpKQorI2RlZmluZSBYR01fRVhUUkFfSU5UUl9NQVNLIChGX0xJTktGQVVMVENIQU5HRSkKICNkZWZpbmUgUExfSU5UUl9NQVNLIChGX1QzREJHIHwgRl9YR01BQzBfMCB8IEZfWEdNQUMwXzEgfCBGX01DNUEgfCBGX1BNMV9UWCB8IFwKIAkJICAgICAgRl9QTTFfUlggfCBGX1VMUDJfVFggfCBGX1VMUDJfUlggfCBGX1RQMSB8IEZfQ0lNIHwgXAogCQkgICAgICBGX01DN19DTSB8IEZfTUM3X1BNVFggfCBGX01DN19QTVJYIHwgRl9TR0UzIHwgRl9QQ0lNMCB8IFwKIAkJICAgICAgRl9NUFMwIHwgRl9DUExfU1dJVENIKQotCiAvKgogICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBQQ0lYMSBtb2R1bGUuCiAgKi8KQEAgLTE2ODgsNyArMTgwMSwxNCBAQAogc3RhdGljIGludCBtYWNfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1bnNpZ25lZCBpbnQgaWR4KQogewogCXN0cnVjdCBjbWFjICptYWMgPSAmYWRhcDJwaW5mbyhhZGFwLCBpZHgpLT5tYWM7Ci0JdTMyIGNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpOworCS8qCisJICogV2UgbWFzayBvdXQgaW50ZXJydXB0IGNhdXNlcyBmb3Igd2hpY2ggd2UncmUgbm90IHRha2luZyBpbnRlcnJ1cHRzLgorCSAqIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSBwb2xsaW5nIGxvZ2ljIHRvIG1vbml0b3Igc29tZSBvZiB0aGUgb3RoZXIKKwkgKiBjb25kaXRpb25zIHdoZW4gdGFraW5nIGludGVycnVwdHMgd291bGQgaW1wb3NlIHRvbyBtdWNoIGxvYWQgb24gdGhlCisJICogc3lzdGVtLgorCSAqLworCXUzMiBjYXVzZSA9IHQzX3JlYWRfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0KSAmCisJCSAgICB+Rl9SWEZJRk9fT1ZFUkZMT1c7CiAKIAlpZiAoY2F1c2UgJiBWX1RYRklGT19QUlRZX0VSUihNX1RYRklGT19QUlRZX0VSUikpIHsKIAkJbWFjLT5zdGF0cy50eF9maWZvX3Bhcml0eV9lcnIrKzsKQEAgLTE3MDgsMTAgKzE4MjgsMjAgQEAKIAkJbWFjLT5zdGF0cy54YXVpX3Bjc19jdGNfZXJyKys7CiAJaWYgKGNhdXNlICYgRl9YQVVJUENTQUxJR05DSEFOR0UpCiAJCW1hYy0+c3RhdHMueGF1aV9wY3NfYWxpZ25fY2hhbmdlKys7CisJaWYgKGNhdXNlICYgRl9YR01fSU5UKSB7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwKKwkJCQkgQV9YR01fSU5UX0VOQUJMRSArIG1hYy0+b2Zmc2V0LAorCQkJCSBGX1hHTV9JTlQsIDApOworCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXAsIGlkeCk7CisJfQogCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0LCBjYXVzZSk7CisKIAlpZiAoY2F1c2UgJiBYR01fSU5UUl9GQVRBTCkKIAkJdDNfZmF0YWxfZXJyKGFkYXApOworCiAJcmV0dXJuIGNhdXNlICE9IDA7CiB9CiAKQEAgLTE5MTcsNiArMjA0NywyMiBAQAogCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfSU5UX0NBVVNFMCk7CS8qIGZsdXNoICovCiB9CiAKK3ZvaWQgdDNfeGdtX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpZHgpOworCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCSAgICAgWEdNX0VYVFJBX0lOVFJfTUFTSyk7Cit9CisKK3ZvaWQgdDNfeGdtX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgaWR4KTsKKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9YR01fSU5UX0RJU0FCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJICAgICAweDdmZik7Cit9CisKIC8qKgogICoJdDNfcG9ydF9pbnRyX2VuYWJsZSAtIGVuYWJsZSBwb3J0LXNwZWNpZmljIGludGVycnVwdHMKICAqCUBhZGFwdGVyOiBhc3NvY2lhdGVkIGFkYXB0ZXIKQEAgLTM2MTAsNyArMzc1NiwxNSBAQAogCWFkYXB0ZXItPnBhcmFtcy5pbmZvID0gYWk7CiAJYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9IGFpLT5ucG9ydHM7CiAJYWRhcHRlci0+cGFyYW1zLnJldiA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfUkVWKTsKLQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMDsKKwkvKgorCSAqIFdlIHVzZWQgdG8gb25seSBydW4gdGhlICJhZGFwdGVyIGNoZWNrIHRhc2siIG9uY2UgYSBzZWNvbmQgaWYKKwkgKiB3ZSBoYWQgUEhZcyB3aGljaCBkaWRuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHRzICh3ZSB3b3VsZCBjaGVjaworCSAqIHRoZWlyIGxpbmsgc3RhdHVzIG9uY2UgYSBzZWNvbmQpLiAgTm93IHdlIGNoZWNrIG90aGVyIGNvbmRpdGlvbnMKKwkgKiBpbiB0aGF0IHJvdXRpbmUgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW1wb3NlIGEgdmVyeSBoaWdoCisJICogaW50ZXJydXB0IGxvYWQgb24gdGhlIHN5c3RlbS4gIEFzIHN1Y2gsIHdlIG5vdyBhbHdheXMgc2NhbiB0aGUKKwkgKiBhZGFwdGVyIHN0YXRlIG9uY2UgYSBzZWNvbmQgLi4uCisJICovCisJYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA9IDEwOwogCWFkYXB0ZXItPnBhcmFtcy5zdGF0c191cGRhdGVfcGVyaW9kID0gaXNfMTBHKGFkYXB0ZXIpID8KIAkgICAgTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgOiAoTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgKiAxMCk7CiAJYWRhcHRlci0+cGFyYW1zLnBjaS52cGRfY2FwX2FkZHIgPQpAQCAtMzcwMCw3ICszODU0LDE0IEBACiAJCSAgICAgICBFVEhfQUxFTik7CiAJCWluaXRfbGlua19jb25maWcoJnAtPmxpbmtfY29uZmlnLCBwLT5waHkuY2Fwcyk7CiAJCXAtPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnAtPnBoeSwgMSk7Ci0JCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkpCisKKwkJLyoKKwkJICogSWYgdGhlIFBIWSBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0cyBmb3IgbGluayBzdGF0dXMKKwkJICogY2hhbmdlcywgc2NoZWR1bGUgYSBzY2FuIG9mIHRoZSBhZGFwdGVyIGxpbmtzIGF0IGxlYXN0CisJCSAqIG9uY2UgYSBzZWNvbmQuCisJCSAqLworCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmCisJCSAgICBhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID4gMTApCiAJCQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMTA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmggYi9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKaW5kZXggYjFiMjVjMy4uN2JmOTYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaApAQCAtMzUsMTAgKzM1LDEwIEBACiAjZGVmaW5lIERSVl9ERVNDICJDaGVsc2lvIFQzIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfTkFNRSAiY3hnYjMiCiAvKiBEcml2ZXIgdmVyc2lvbiAqLwotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xLjEta28iCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEuMi1rbyIKIAogLyogRmlybXdhcmUgdmVyc2lvbiAqLwogI2RlZmluZSBGV19WRVJTSU9OX01BSk9SIDcKLSNkZWZpbmUgRldfVkVSU0lPTl9NSU5PUiAwCisjZGVmaW5lIEZXX1ZFUlNJT05fTUlOT1IgMQogI2RlZmluZSBGV19WRVJTSU9OX01JQ1JPIDAKICNlbmRpZgkJCQkvKiBfX0NIRUxTSU9fVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwppbmRleCA5ZDc3ODY5Li5mODdmOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogc3RhdGljIGludCB0M2IyX21hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwotCXVuc2lnbmVkIGludCBvZnQgPSBtYWMtPm9mZnNldDsKKwl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQsIHN0b3JlOworCWludCBpZHggPSBtYWNpZHgobWFjKTsKIAl1MzIgdmFsOwogCiAJaWYgKCFtYWNpZHgobWFjKSkKQEAgLTE1OCwxNCArMTU5LDI4IEBACiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9QT1JUMUFDVElWRSwgMCk7CiAKKwkvKiBTdG9wIE5JQyB0cmFmZmljIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFRYVE9HR0xFUyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDApOworCS8qIEVuc3VyZSBUWCBkcmFpbnMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1RYX0NGRyArIG9mdCwgRl9UWFBBVVNFRU4sIDApOworCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX1JFU0VUX0NUUkwgKyBvZnQsIEZfTUFDX1JFU0VUXyk7CiAJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUkVTRVRfQ1RSTCArIG9mdCk7ICAgIC8qIGZsdXNoICovCiAKKwkvKiBTdG9yZSBBX1RQX1RYX0RST1BfQ0ZHX0NIMCAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJc3RvcmUgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisKIAltc2xlZXAoMTApOwogCisJLyogQ2hhbmdlIERST1BfQ0ZHIHRvIDB4YzAwMDAwMTEgKi8KKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLCAweGMwMDAwMDExKTsKKwogCS8qIENoZWNrIGZvciB4Z20gUnggZmlmbyBlbXB0eSAqLworCS8qIEluY3JlYXNlZCBsb29wIGNvdW50IHRvIDEwMDAgZnJvbSA1IGNvdmVyIDFHIGFuZCAxMDBNYnBzIGNhc2UgKi8KIAlpZiAodDNfd2FpdF9vcF9kb25lKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRV9FUlJfQ05UICsgb2Z0LAotCQkJICAgIDB4ODAwMDAwMDAsIDEsIDUsIDIpKSB7CisJCQkgICAgMHg4MDAwMDAwMCwgMSwgMTAwMCwgMikpIHsKIAkJQ0hfRVJSKGFkYXAsICJNQUMgJWQgUnggZmlmbyBkcmFpbiBmYWlsZWRcbiIsCiAJCSAgICAgICBtYWNpZHgobWFjKSk7CiAJCXJldHVybiAtMTsKQEAgLTE5MSwxMSArMjA2LDIxIEBACiAJCSAgICAgRl9ESVNQQVVTRUZSQU1FUyB8IEZfRU4xNTM2QkZSQU1FUyB8CiAJCSAgICAgRl9STUZDUyB8IEZfRU5KVU1CTyB8IEZfRU5IQVNITUNBU1QpOwogCi0JaWYgKCFtYWNpZHgobWFjKSkKKwkvKiBSZXN0b3JlIHRoZSBEUk9QX0NGRyAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0RBVEEsIHN0b3JlKTsKKworCWlmICghaWR4KQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMEFDVElWRSk7CiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMUFDVElWRSk7CiAKKwkvKiByZS1lbmFibGUgbmljIHRyYWZmaWMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9FTkZPUkNFUEtULCAxKTsKKworCS8qICBTZXQ6IHJlLWVuYWJsZSBOSUMgdHJhZmZpYyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNiw3ICsyNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKQogewogCXVuc2lnbmVkIGludCBpLCByZWcgPSBtYWMtPm9mZnNldCArIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xOwogCkBAIC0yNDcsNyArMjcyLDcgQEAKIAl0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xKTsJLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlZyA9IG1hYy0+b2Zmc2V0ICsgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfSElHSF8xOwogCkBAIC0zMzIsMTggKzM1Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwgbXR1KTsKIAotCS8qCi0JICogQWRqdXN0IHRoZSBQQVVTRSBmcmFtZSB3YXRlcm1hcmtzLiAgV2UgYWx3YXlzIHNldCB0aGUgTFdNLCBhbmQgdGhlCi0JICogSFdNIG9ubHkgaWYgZmxvdy1jb250cm9sIGlzIGVuYWJsZWQuCi0JICovCi0JaHdtID0gbWF4X3QodW5zaWduZWQgaW50LCBNQUNfUlhGSUZPX1NJWkUgLSAzICogbXR1LAotCQkgICAgTUFDX1JYRklGT19TSVpFICogMzggLyAxMDApOwotCWh3bSA9IG1pbihod20sIE1BQ19SWEZJRk9fU0laRSAtIDgxOTIpOwotCWx3bSA9IG1pbigzICogKGludCltdHUsIE1BQ19SWEZJRk9fU0laRSAvIDQpOwotCiAJaWYgKGFkYXAtPnBhcmFtcy5yZXYgPj0gVDNfUkVWX0IyICYmCiAJICAgICh0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQpICYgRl9SWEVOKSkgewotCQlkaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwkJdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhtYWMpOwogCQl2ID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQpOwogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX0NGRyArIG1hYy0+b2Zmc2V0LAogCQkJCSBGX0VOSEFTSE1DQVNUIHwgRl9DT1BZQUxMRlJBTUVTLCBGX0RJU0JDQVNUKTsKQEAgLTM1NSwxNCArMzcxLDE0IEBACiAJCWlmICh0M193YWl0X29wX2RvbmUoYWRhcCwgcmVnICsgbWFjLT5vZmZzZXQsCiAJCQkJICAgIEZfUlhGSUZPX0VNUFRZLCAxLCAyMCwgNSkpIHsKIAkJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBtYWMtPm9mZnNldCwgdik7Ci0JCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQkJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRSArIG1hYy0+b2Zmc2V0LAogCQkJCSBWX1JYTUFYUEtUU0laRShNX1JYTUFYUEtUU0laRSksCiAJCQkJIFZfUlhNQVhQS1RTSVpFKG10dSkpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQsIHYpOwotCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQl0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKIAl9IGVsc2UKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwKIAkJCQkgVl9SWE1BWFBLVFNJWkUoTV9SWE1BWFBLVFNJWkUpLApAQCAtNDUyLDkgKzQ2OCwxMiBAQAogCiAJaWYgKHdoaWNoICYgTUFDX0RJUkVDVElPTl9UWCkgewogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOwotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fREFUQSwgMHhjMGVkZTQwMSk7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLAorCQkJICAgICBhZGFwLT5wYXJhbXMucmV2ID09IFQzX1JFVl9DID8KKwkJCSAgICAgMHhjNGZmZmYwMSA6IDB4YzBlZGU0MDEpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX01PREUpOwotCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVFBfUElPX0RBVEEsIDEgPDwgaWR4LCAxIDw8IGlkeCk7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9UUF9QSU9fREFUQSwgMSA8PCBpZHgsCisJCQkJIGFkYXAtPnBhcmFtcy5yZXYgPT0gVDNfUkVWX0MgPyAwIDogMSA8PCBpZHgpOwogCiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgb2Z0LCBGX1RYRU4pOwogCkBAIC01MTAsMTUgKzUyOSwxMiBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwogCXN0cnVjdCBtYWNfc3RhdHMgKnMgPSAmbWFjLT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgdHhfdGNudCwgdHhfeGNudDsKLQl1bnNpZ25lZCBpbnQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfeGNudDsKKwl1NjQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gMDsKIAl0eF94Y250ID0gMTsJCS8qIEJ5IGRlZmF1bHQgdHhfeGNudCBpcyBtYWtpbmcgcHJvZ3Jlc3MgKi8KIAl0eF90Y250ID0gbWFjLT50eF90Y250OwkvKiBJZiB0eF9tY250IGlzIHByb2dyZXNzaW5nIGlnbm9yZSB0eF90Y250ICovCi0JcnhfeGNudCA9IDE7CQkvKiBCeSBkZWZhdWx0IHJ4X3hjbnQgaXMgbWFraW5nIHByb2dyZXNzICovCiAJaWYgKHR4X21jbnQgPT0gbWFjLT50eF9tY250ICYmIG1hYy0+cnhfcGF1c2UgPT0gcy0+cnhfcGF1c2UpIHsKIAkJdHhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAogCQkJCQkJQV9YR01fVFhfU1BJNF9TT1BfRU9QX0NOVCArCkBAIC01MjksMTEgKzU0NSwxMSBAQAogCQkJdHhfdGNudCA9IChHX1RYRFJPUENOVENIMFJDVkQodDNfcmVhZF9yZWcoYWRhcCwKIAkJCQkJCSAgICAgIEFfVFBfUElPX0RBVEEpKSk7CiAJCX0gZWxzZSB7Ci0JCQlnb3RvIHJ4Y2hlY2s7CisJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7CiAJCW1hYy0+dG9nZ2xlX2NudCA9IDA7Ci0JCWdvdG8gcnhjaGVjazsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCh0eF90Y250ICE9IG1hYy0+dHhfdGNudCkgJiYgKG1hYy0+dHhfeGNudCA9PSAwKSkgewpAQCAtNTQ2LDIzICs1NjIsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJbWFjLT50b2dnbGVfY250ID0gMDsKLQkJZ290byByeGNoZWNrOwotCX0KLQotcnhjaGVjazoKLQlpZiAocnhfbWNudCAhPSBtYWMtPnJ4X21jbnQpIHsKLQkJcnhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAotCQkJCQkJQV9YR01fUlhfU1BJNF9TT1BfRU9QX0NOVCArCi0JCQkJCQltYWMtPm9mZnNldCkpKSArCi0JCQkJCQkocy0+cnhfZmlmb19vdmZsIC0KLQkJCQkJCSBtYWMtPnJ4X29jbnQpOwotCQltYWMtPnJ4X29jbnQgPSBzLT5yeF9maWZvX292Zmw7Ci0JfSBlbHNlCi0JCWdvdG8gb3V0OwotCi0JaWYgKG1hYy0+cnhfbWNudCAhPSBzLT5yeF9mcmFtZXMgJiYgcnhfeGNudCA9PSAwICYmCi0JICAgIG1hYy0+cnhfeGNudCA9PSAwKSB7Ci0JCXN0YXR1cyA9IDI7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTcwLDggKzU2OSw2IEBACiAJbWFjLT50eF90Y250ID0gdHhfdGNudDsKIAltYWMtPnR4X3hjbnQgPSB0eF94Y250OwogCW1hYy0+dHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQltYWMtPnJ4X3hjbnQgPSByeF94Y250OwotCW1hYy0+cnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKIAltYWMtPnJ4X3BhdXNlID0gcy0+cnhfcGF1c2U7CiAJaWYgKHN0YXR1cyA9PSAxKSB7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBiY2Y5MjkxLi4yNTRlYzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtOTMwLDEzICs5MzAsMTUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwogCWJvYXJkX2luZm9fdCAqZGIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpbnRfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggcmVnX3NhdmU7CiAKIAlkbTkwMDBfZGJnKGRiLCAzLCAiZW50ZXJpbmcgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIEEgcmVhbCBpbnRlcnJ1cHQgY29taW5nICovCiAKLQlzcGluX2xvY2soJmRiLT5sb2NrKTsKKwkvKiBob2xkZXJzIG9mIGRiLT5sb2NrIG11c3QgYWx3YXlzIGJsb2NrIElSUXMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKIAogCS8qIFNhdmUgcHJldmlvdXMgcmVnaXN0ZXIgYWRkcmVzcyAqLwogCXJlZ19zYXZlID0gcmVhZGIoZGItPmlvX2FkZHIpOwpAQCAtOTcyLDcgKzk3NCw3IEBACiAJLyogUmVzdG9yZSBwcmV2aW91cyByZWdpc3RlciBhZGRyZXNzICovCiAJd3JpdGViKHJlZ19zYXZlLCBkYi0+aW9fYWRkcik7CiAKLQlzcGluX3VubG9jaygmZGItPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9kbmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxZTMxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2RuZXQuYwpAQCAtMCwwICsxLDk5NCBAQAorLyoKKyAqIERhdmUgRE5FVCBFdGhlcm5ldCBDb250cm9sbGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZlIFMuci5sLiA8d3d3LmRhdmUuZXU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zIEx0ZCwgPHlhbm9rQGVtY3JhZnQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgImRuZXQuaCIKKworI3VuZGVmIERFQlVHCisKKy8qIGZ1bmN0aW9uIGZvciByZWFkaW5nIGludGVybmFsIE1BQyByZWdpc3RlciAqLwordTE2IGRuZXRfcmVhZHdfbWFjKHN0cnVjdCBkbmV0ICpicCwgdTE2IHJlZykKK3sKKwl1MTYgZGF0YV9yZWFkOworCisJLyogaXNzdWUgYSByZWFkICovCisJZG5ldF93cml0ZWwoYnAsIHJlZywgTUFDUkVHX0FERFIpOworCisJLyogc2luY2UgYSByZWFkL3dyaXRlIG9wIHRvIHRoZSBNQUMgaXMgdmVyeSBzbG93LAorCSAqIHdlIG11c3Qgd2FpdCBiZWZvcmUgcmVhZGluZyB0aGUgZGF0YSAqLworCW5kZWxheSg1MDApOworCisJLyogcmVhZCBkYXRhIHJlYWQgZnJvbSB0aGUgTUFDIHJlZ2lzdGVyICovCisJZGF0YV9yZWFkID0gZG5ldF9yZWFkbChicCwgTUFDUkVHX0RBVEEpOworCisJLyogYWxsIGRvbmUgKi8KKwlyZXR1cm4gZGF0YV9yZWFkOworfQorCisvKiBmdW5jdGlvbiBmb3Igd3JpdGluZyBpbnRlcm5hbCBNQUMgcmVnaXN0ZXIgKi8KK3ZvaWQgZG5ldF93cml0ZXdfbWFjKHN0cnVjdCBkbmV0ICpicCwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwkvKiBsb2FkIGRhdGEgdG8gd3JpdGUgKi8KKwlkbmV0X3dyaXRlbChicCwgdmFsLCBNQUNSRUdfREFUQSk7CisKKwkvKiBpc3N1ZSBhIHdyaXRlICovCisJZG5ldF93cml0ZWwoYnAsIHJlZyB8IERORVRfSU5URVJOQUxfV1JJVEUsIE1BQ1JFR19BRERSKTsKKworCS8qIHNpbmNlIGEgcmVhZC93cml0ZSBvcCB0byB0aGUgTUFDIGlzIHZlcnkgc2xvdywKKwkgKiB3ZSBtdXN0IHdhaXQgYmVmb3JlIGV4aXRpbmcgKi8KKwluZGVsYXkoNTAwKTsKK30KKworc3RhdGljIHZvaWQgX19kbmV0X3NldF9od2FkZHIoc3RydWN0IGRuZXQgKmJwKQoreworCXUxNiB0bXA7CisKKwl0bXAgPSBjcHVfdG9fYmUxNigqKCh1MTYgKikgYnAtPmRldi0+ZGV2X2FkZHIpKTsKKwlkbmV0X3dyaXRld19tYWMoYnAsIERORVRfSU5URVJOQUxfTUFDX0FERFJfMF9SRUcsIHRtcCk7CisJdG1wID0gY3B1X3RvX2JlMTYoKigodTE2ICopIChicC0+ZGV2LT5kZXZfYWRkciArIDIpKSk7CisJZG5ldF93cml0ZXdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX01BQ19BRERSXzFfUkVHLCB0bXApOworCXRtcCA9IGNwdV90b19iZTE2KCooKHUxNiAqKSAoYnAtPmRldi0+ZGV2X2FkZHIgKyA0KSkpOworCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9NQUNfQUREUl8yX1JFRywgdG1wKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGRuZXRfZ2V0X2h3YWRkcihzdHJ1Y3QgZG5ldCAqYnApCit7CisJdTE2IHRtcDsKKwl1OCBhZGRyWzZdOworCisJLyoKKwkgKiBmcm9tIE1BQyBkb2NzOgorCSAqICJOb3RlIHRoYXQgdGhlIE1BQyBhZGRyZXNzIGlzIHN0b3JlZCBpbiB0aGUgcmVnaXN0ZXJzIGluIEhleGFkZWNpbWFsCisJICogZm9ybS4gRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgTUFDIEFkZHJlc3MgdG86IEFDLURFLTQ4LTAwLTAwLTgwCisJICogd291bGQgcmVxdWlyZSB3cml0aW5nIDB4QUMgKG9jdGV0IDApIHRvIGFkZHJlc3MgMHgwQiAoaGlnaCBieXRlIG9mCisJICogTWFjX2FkZHJbMTU6MF0pLCAweERFIChvY3RldCAxKSB0byBhZGRyZXNzIDB4MEEgKExvdyBieXRlIG9mCisJICogTWFjX2FkZHJbMTU6MF0pLCAweDQ4IChvY3RldCAyKSB0byBhZGRyZXNzIDB4MEQgKGhpZ2ggYnl0ZSBvZgorCSAqIE1hY19hZGRyWzE1OjBdKSwgMHgwMCAob2N0ZXQgMykgdG8gYWRkcmVzcyAweDBDIChMb3cgYnl0ZSBvZgorCSAqIE1hY19hZGRyWzE1OjBdKSwgMHgwMCAob2N0ZXQgNCkgdG8gYWRkcmVzcyAweDBGIChoaWdoIGJ5dGUgb2YKKwkgKiBNYWNfYWRkclsxNTowXSksIGFuZCAweDgwIChvY3RldCA1KSB0byBhZGRyZXNzICogMHgwRSAoTG93IGJ5dGUgb2YKKwkgKiBNYWNfYWRkclsxNTowXSkuCisJICovCisJdG1wID0gZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfTUFDX0FERFJfMF9SRUcpOworCSooKHUxNiAqKSBhZGRyKSA9IGJlMTZfdG9fY3B1KHRtcCk7CisJdG1wID0gZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfTUFDX0FERFJfMV9SRUcpOworCSooKHUxNiAqKSAoYWRkciArIDIpKSA9IGJlMTZfdG9fY3B1KHRtcCk7CisJdG1wID0gZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfTUFDX0FERFJfMl9SRUcpOworCSooKHUxNiAqKSAoYWRkciArIDQpKSA9IGJlMTZfdG9fY3B1KHRtcCk7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJbWVtY3B5KGJwLT5kZXYtPmRldl9hZGRyLCBhZGRyLCBzaXplb2YoYWRkcikpOworfQorCitzdGF0aWMgaW50IGRuZXRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCit7CisJc3RydWN0IGRuZXQgKmJwID0gYnVzLT5wcml2OworCXUxNiB2YWx1ZTsKKworCXdoaWxlICghKGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0NUTF9SRUcpCisJCQkJJiBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0NNRF9GSU4pKQorCQljcHVfcmVsYXgoKTsKKworCS8qIG9ubHkgNSBiaXRzIGFsbG93ZWQgZm9yIHBoeS1hZGRyIGFuZCByZWdfb2Zmc2V0ICovCisJbWlpX2lkICY9IDB4MWY7CisJcmVnbnVtICY9IDB4MWY7CisKKwkvKiBwcmVwYXJlIHJlZ192YWx1ZSBmb3IgYSByZWFkICovCisJdmFsdWUgPSAobWlpX2lkIDw8IDgpOworCXZhbHVlIHw9IHJlZ251bTsKKworCS8qIHdyaXRlIGNvbnRyb2wgd29yZCAqLworCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DVExfUkVHLCB2YWx1ZSk7CisKKwkvKiB3YWl0IGZvciBlbmQgb2YgdHJhbnNmZXIgKi8KKwl3aGlsZSAoIShkbmV0X3JlYWR3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DVExfUkVHKQorCQkJCSYgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DTURfRklOKSkKKwkJY3B1X3JlbGF4KCk7CisKKwl2YWx1ZSA9IGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0RBVF9SRUcpOworCisJcHJfZGVidWcoIm1kaW9fcmVhZCAlMDJ4OiUwMnggPC0gJTA0eFxuIiwgbWlpX2lkLCByZWdudW0sIHZhbHVlKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBkbmV0X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwKKwkJCSAgIHUxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZG5ldCAqYnAgPSBidXMtPnByaXY7CisJdTE2IHRtcDsKKworCXByX2RlYnVnKCJtZGlvX3dyaXRlICUwMng6JTAyeCA8LSAlMDR4XG4iLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpOworCisJd2hpbGUgKCEoZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ1RMX1JFRykKKwkJCQkmIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ01EX0ZJTikpCisJCWNwdV9yZWxheCgpOworCisJLyogcHJlcGFyZSBmb3IgYSB3cml0ZSBvcGVyYXRpb24gKi8KKwl0bXAgPSAoMSA8PCAxMyk7CisKKwkvKiBvbmx5IDUgYml0cyBhbGxvd2VkIGZvciBwaHktYWRkciBhbmQgcmVnX29mZnNldCAqLworCW1paV9pZCAmPSAweDFmOworCXJlZ251bSAmPSAweDFmOworCisJLyogb25seSAxNiBiaXRzIG9uIGRhdGEgKi8KKwl2YWx1ZSAmPSAweGZmZmY7CisKKwkvKiBwcmVwYXJlIHJlZ192YWx1ZSBmb3IgYSB3cml0ZSAqLworCXRtcCB8PSAobWlpX2lkIDw8IDgpOworCXRtcCB8PSByZWdudW07CisKKwkvKiB3cml0ZSBkYXRhIHRvIHdyaXRlIGZpcnN0ICovCisJZG5ldF93cml0ZXdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0RBVF9SRUcsIHZhbHVlKTsKKworCS8qIHdyaXRlIGNvbnRyb2wgd29yZCAqLworCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DVExfUkVHLCB0bXApOworCisJd2hpbGUgKCEoZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ1RMX1JFRykKKwkJCQkmIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ01EX0ZJTikpCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRuZXRfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYnAtPnBoeV9kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbW9kZV9yZWcsIGN0bF9yZWc7CisKKwlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKKworCW1vZGVfcmVnID0gZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfTU9ERV9SRUcpOworCWN0bF9yZWcgPSBkbmV0X3JlYWR3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUkVHKTsKKworCWlmIChwaHlkZXYtPmxpbmspIHsKKwkJaWYgKGJwLT5kdXBsZXggIT0gcGh5ZGV2LT5kdXBsZXgpIHsKKwkJCWlmIChwaHlkZXYtPmR1cGxleCkKKwkJCQljdGxfcmVnICY9CisJCQkJICAgIH4oRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfRU5BQkxFSEFMRkRVUCk7CisJCQllbHNlCisJCQkJY3RsX3JlZyB8PQorCQkJCSAgICBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9FTkFCTEVIQUxGRFVQOworCisJCQlicC0+ZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisJCQlzdGF0dXNfY2hhbmdlID0gMTsKKwkJfQorCisJCWlmIChicC0+c3BlZWQgIT0gcGh5ZGV2LT5zcGVlZCkgeworCQkJc3RhdHVzX2NoYW5nZSA9IDE7CisJCQlzd2l0Y2ggKHBoeWRldi0+c3BlZWQpIHsKKwkJCWNhc2UgMTAwMDoKKwkJCQltb2RlX3JlZyB8PSBETkVUX0lOVEVSTkFMX01PREVfR0JJVEVOOworCQkJCWJyZWFrOworCQkJY2FzZSAxMDA6CisJCQljYXNlIDEwOgorCQkJCW1vZGVfcmVnICY9IH5ETkVUX0lOVEVSTkFMX01PREVfR0JJVEVOOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICIlczogQWNrISAgU3BlZWQgKCVkKSBpcyBub3QgIgorCQkJCSAgICAgICAiMTAvMTAwLzEwMDAhXG4iLCBkZXYtPm5hbWUsCisJCQkJICAgICAgIHBoeWRldi0+c3BlZWQpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnAtPnNwZWVkID0gcGh5ZGV2LT5zcGVlZDsKKwkJfQorCX0KKworCWlmIChwaHlkZXYtPmxpbmsgIT0gYnAtPmxpbmspIHsKKwkJaWYgKHBoeWRldi0+bGluaykgeworCQkJbW9kZV9yZWcgfD0KKwkJCSAgICAoRE5FVF9JTlRFUk5BTF9NT0RFX1JYRU4gfCBETkVUX0lOVEVSTkFMX01PREVfVFhFTik7CisJCX0gZWxzZSB7CisJCQltb2RlX3JlZyAmPQorCQkJICAgIH4oRE5FVF9JTlRFUk5BTF9NT0RFX1JYRU4gfAorCQkJICAgICAgRE5FVF9JTlRFUk5BTF9NT0RFX1RYRU4pOworCQkJYnAtPnNwZWVkID0gMDsKKwkJCWJwLT5kdXBsZXggPSAtMTsKKwkJfQorCQlicC0+bGluayA9IHBoeWRldi0+bGluazsKKworCQlzdGF0dXNfY2hhbmdlID0gMTsKKwl9CisKKwlpZiAoc3RhdHVzX2NoYW5nZSkgeworCQlkbmV0X3dyaXRld19tYWMoYnAsIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX1JFRywgY3RsX3JlZyk7CisJCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9NT0RFX1JFRywgbW9kZV9yZWcpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3RhdHVzX2NoYW5nZSkgeworCQlpZiAocGh5ZGV2LT5saW5rKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdXAgKCVkLyVzKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQsCisJCQkgICAgICAgRFVQTEVYX0ZVTEwgPT0gcGh5ZGV2LT5kdXBsZXggPyAiRnVsbCIgOiAiSGFsZiIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBkb3duXG4iLCBkZXYtPm5hbWUpOworCX0KK30KKworc3RhdGljIGludCBkbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CisJaW50IHBoeV9hZGRyOworCisJLyogZmluZCB0aGUgZmlyc3QgcGh5ICovCisJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7CisJCWlmIChicC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKKwkJCXBoeWRldiA9IGJwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFwaHlkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gUEhZIGZvdW5kXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBUT0RPIDogYWRkIHBpbl9pcnEgKi8KKworCS8qIGF0dGFjaCB0aGUgbWFjIHRvIHRoZSBwaHkgKi8KKwlpZiAoYnAtPmNhcGFiaWxpdGllcyAmIERORVRfSEFTX1JNSUkpIHsKKwkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAorCQkJCSAgICAgJmRuZXRfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLAorCQkJCSAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOworCX0gZWxzZSB7CisJCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKKwkJCQkgICAgICZkbmV0X2hhbmRsZV9saW5rX2NoYW5nZSwgMCwKKwkJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCX0KKworCWlmIChJU19FUlIocGh5ZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5ZGV2KTsKKwl9CisKKwkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLworCWlmIChicC0+Y2FwYWJpbGl0aWVzICYgRE5FVF9IQVNfR0lHQUJJVCkKKwkJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gUEhZX0dCSVRfRkVBVFVSRVM7CisJZWxzZQorCQlwaHlkZXYtPnN1cHBvcnRlZCAmPSBQSFlfQkFTSUNfRkVBVFVSRVM7CisKKwlwaHlkZXYtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfQXN5bV9QYXVzZSB8IFNVUFBPUlRFRF9QYXVzZTsKKworCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPnN1cHBvcnRlZDsKKworCWJwLT5saW5rID0gMDsKKwlicC0+c3BlZWQgPSAwOworCWJwLT5kdXBsZXggPSAtMTsKKwlicC0+cGh5X2RldiA9IHBoeWRldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRuZXRfbWlpX2luaXQoc3RydWN0IGRuZXQgKmJwKQoreworCWludCBlcnIsIGk7CisKKwlicC0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAoYnAtPm1paV9idXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlicC0+bWlpX2J1cy0+bmFtZSA9ICJkbmV0X21paV9idXMiOworCWJwLT5taWlfYnVzLT5yZWFkID0gJmRuZXRfbWRpb19yZWFkOworCWJwLT5taWlfYnVzLT53cml0ZSA9ICZkbmV0X21kaW9fd3JpdGU7CisJYnAtPm1paV9idXMtPnJlc2V0ID0gJmRuZXRfbWRpb19yZXNldDsKKworCXNucHJpbnRmKGJwLT5taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCAwKTsKKworCWJwLT5taWlfYnVzLT5wcml2ID0gYnA7CisKKwlicC0+bWlpX2J1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFicC0+bWlpX2J1cy0+aXJxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCWJwLT5taWlfYnVzLT5pcnFbaV0gPSBQSFlfUE9MTDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGJwLT5kZXYsIGJwLT5taWlfYnVzKTsKKworCWlmIChtZGlvYnVzX3JlZ2lzdGVyKGJwLT5taWlfYnVzKSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dF9mcmVlX21kaW9faXJxOworCX0KKworCWlmIChkbmV0X21paV9wcm9iZShicC0+ZGV2KSAhPSAwKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOgorCW1kaW9idXNfdW5yZWdpc3RlcihicC0+bWlpX2J1cyk7CitlcnJfb3V0X2ZyZWVfbWRpb19pcnE6CisJa2ZyZWUoYnAtPm1paV9idXMtPmlycSk7CitlcnJfb3V0OgorCW1kaW9idXNfZnJlZShicC0+bWlpX2J1cyk7CisJcmV0dXJuIGVycjsKK30KKworLyogRm9yIE5lcHR1bmUgYm9hcmQ6IExJTksxMDAwIGFzIExpbmsgTEVEIGFuZCBUWCBhcyBhY3Rpdml0eSBMRUQgKi8KK2ludCBkbmV0X3BoeV9tYXJ2ZWxsX2ZpeHVwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJcmV0dXJuIHBoeV93cml0ZShwaHlkZXYsIDB4MTgsIDB4NDE0OCk7Cit9CisKK3N0YXRpYyB2b2lkIGRuZXRfdXBkYXRlX3N0YXRzKHN0cnVjdCBkbmV0ICpicCkKK3sKKwl1MzIgX19pb21lbSAqcmVnID0gYnAtPnJlZ3MgKyBETkVUX1JYX1BLVF9JR05SX0NOVDsKKwl1MzIgKnAgPSAmYnAtPmh3X3N0YXRzLnJ4X3BrdF9pZ25yOworCXUzMiAqZW5kID0gJmJwLT5od19zdGF0cy5yeF9ieXRlICsgMTsKKworCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpKGVuZCAtIHAgLSAxKSAhPQorCQkoRE5FVF9SWF9CWVRFX0NOVCAtIERORVRfUlhfUEtUX0lHTlJfQ05UKSAvIDQpOworCisJZm9yICg7IHAgPCBlbmQ7IHArKywgcmVnKyspCisJCSpwICs9IHJlYWRsKHJlZyk7CisKKwlyZWcgPSBicC0+cmVncyArIERORVRfVFhfVU5JQ0FTVF9DTlQ7CisJcCA9ICZicC0+aHdfc3RhdHMudHhfdW5pY2FzdDsKKwllbmQgPSAmYnAtPmh3X3N0YXRzLnR4X2J5dGUgKyAxOworCisJV0FSTl9PTigodW5zaWduZWQgbG9uZykoZW5kIC0gcCAtIDEpICE9CisJCShETkVUX1RYX0JZVEVfQ05UIC0gRE5FVF9UWF9VTklDQVNUX0NOVCkgLyA0KTsKKworCWZvciAoOyBwIDwgZW5kOyBwKyssIHJlZysrKQorCQkqcCArPSByZWFkbChyZWcpOworfQorCitzdGF0aWMgaW50IGRuZXRfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGRuZXQgKmJwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBkbmV0LCBuYXBpKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnAtPmRldjsKKwlpbnQgbnBhY2tldHMgPSAwOworCXVuc2lnbmVkIGludCBwa3RfbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50ICpkYXRhX3B0cjsKKwl1MzIgaW50X2VuYWJsZTsKKwl1MzIgY21kX3dvcmQ7CisJaW50IGk7CisKKwl3aGlsZSAobnBhY2tldHMgPCBidWRnZXQpIHsKKwkJLyoKKwkJICogYnJlYWsgb3V0IG9mIHdoaWxlIGxvb3AgaWYgdGhlcmUgYXJlIG5vIG1vcmUKKwkJICogcGFja2V0cyB3YWl0aW5nCisJCSAqLworCQlpZiAoIShkbmV0X3JlYWRsKGJwLCBSWF9GSUZPX1dDTlQpID4+IDE2KSkgeworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJCWludF9lbmFibGUgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX0VOQik7CisJCQlpbnRfZW5hYmxlIHw9IERORVRfSU5UUl9TUkNfUlhfQ01ERklGT0FGOworCQkJZG5ldF93cml0ZWwoYnAsIGludF9lbmFibGUsIElOVFJfRU5CKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJY21kX3dvcmQgPSBkbmV0X3JlYWRsKGJwLCBSWF9MRU5fRklGTyk7CisJCXBrdF9sZW4gPSBjbWRfd29yZCAmIDB4RkZGRjsKKworCQlpZiAoY21kX3dvcmQgJiAweERGMTgwMDAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBwYWNrZXQgcmVjZWl2ZSBlcnJvciAleFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgY21kX3dvcmQpOworCisJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbiArIDUpOworCQlpZiAoc2tiICE9IE5VTEwpIHsKKwkJCS8qIEFsaWduIElQIG9uIDE2IGJ5dGUgYm91bmRhcmllcyAqLworCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJCS8qCisJCQkgKiAnc2tiX3B1dCgpJyBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHNrX2J1ZmYKKwkJCSAqIGRhdGEgYXJlYS4KKwkJCSAqLworCQkJZGF0YV9wdHIgPSAodW5zaWduZWQgaW50ICopc2tiX3B1dChza2IsIHBrdF9sZW4pOworCQkJZm9yIChpID0gMDsgaSA8IChwa3RfbGVuICsgMykgPj4gMjsgaSsrKQorCQkJCSpkYXRhX3B0cisrID0gZG5ldF9yZWFkbChicCwgUlhfREFUQV9GSUZPKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJbnBhY2tldHMrKzsKKwkJfSBlbHNlCisJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSAgICAgICAiJXM6IE5vIG1lbW9yeSB0byBhbGxvY2F0ZSBhIHNrX2J1ZmYgb2YgIgorCQkJICAgICAgICJzaXplICV1LlxuIiwgZGV2LT5uYW1lLCBwa3RfbGVuKTsKKwl9CisKKwlidWRnZXQgLT0gbnBhY2tldHM7CisKKwlpZiAobnBhY2tldHMgPCBidWRnZXQpIHsKKwkJLyogV2UgcHJvY2Vzc2VkIGFsbCBwYWNrZXRzIGF2YWlsYWJsZS4gIFRlbGwgTkFQSSBpdCBjYW4KKwkJICogc3RvcCBwb2xsaW5nIHRoZW4gcmUtZW5hYmxlIHJ4IGludGVycnVwdHMgKi8KKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaW50X2VuYWJsZSA9IGRuZXRfcmVhZGwoYnAsIElOVFJfRU5CKTsKKwkJaW50X2VuYWJsZSB8PSBETkVUX0lOVFJfU1JDX1JYX0NNREZJRk9BRjsKKwkJZG5ldF93cml0ZWwoYnAsIGludF9lbmFibGUsIElOVFJfRU5CKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVGhlcmUgYXJlIHN0aWxsIHBhY2tldHMgd2FpdGluZyAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaW50X3NyYywgaW50X2VuYWJsZSwgaW50X2N1cnJlbnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKKworCS8qIHJlYWQgYW5kIGNsZWFyIHRoZSBETkVUIGlycSAoY2xlYXIgb24gcmVhZCkgKi8KKwlpbnRfc3JjID0gZG5ldF9yZWFkbChicCwgSU5UUl9TUkMpOworCWludF9lbmFibGUgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX0VOQik7CisJaW50X2N1cnJlbnQgPSBpbnRfc3JjICYgaW50X2VuYWJsZTsKKworCS8qIHJlc3RhcnQgdGhlIHF1ZXVlIGlmIHdlIGhhZCBzdG9wcGVkIGl0IGZvciBUWCBmaWZvIGFsbW9zdCBmdWxsICovCisJaWYgKGludF9jdXJyZW50ICYgRE5FVF9JTlRSX1NSQ19UWF9GSUZPQUUpIHsKKwkJaW50X2VuYWJsZSA9IGRuZXRfcmVhZGwoYnAsIElOVFJfRU5CKTsKKwkJaW50X2VuYWJsZSAmPSB+RE5FVF9JTlRSX0VOQl9UWF9GSUZPQUU7CisJCWRuZXRfd3JpdGVsKGJwLCBpbnRfZW5hYmxlLCBJTlRSX0VOQik7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJaGFuZGxlZCA9IDE7CisJfQorCisJLyogUlggRklGTyBlcnJvciBjaGVja2luZyAqLworCWlmIChpbnRfY3VycmVudCAmCisJICAgIChETkVUX0lOVFJfU1JDX1JYX0NNREZJRk9GRiB8IERORVRfSU5UUl9TUkNfUlhfREFUQUZJRk9GRikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUlggZmlmbyBlcnJvciAleCwgaXJxICV4XG4iLCBfX2Z1bmNfXywKKwkJICAgICAgIGRuZXRfcmVhZGwoYnAsIFJYX1NUQVRVUyksIGludF9jdXJyZW50KTsKKwkJLyogd2UgY2FuIG9ubHkgZmx1c2ggdGhlIFJYIEZJRk9zICovCisJCWRuZXRfd3JpdGVsKGJwLCBETkVUX1NZU19DVExfUlhGSUZPRkxVU0gsIFNZU19DVEwpOworCQluZGVsYXkoNTAwKTsKKwkJZG5ldF93cml0ZWwoYnAsIDAsIFNZU19DVEwpOworCQloYW5kbGVkID0gMTsKKwl9CisKKwkvKiBUWCBGSUZPIGVycm9yIGNoZWNraW5nICovCisJaWYgKGludF9jdXJyZW50ICYKKwkgICAgKERORVRfSU5UUl9TUkNfVFhfRklGT0ZVTEwgfCBETkVUX0lOVFJfU1JDX1RYX0RJU0NGUk0pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRYIGZpZm8gZXJyb3IgJXgsIGlycSAleFxuIiwgX19mdW5jX18sCisJCSAgICAgICBkbmV0X3JlYWRsKGJwLCBUWF9TVEFUVVMpLCBpbnRfY3VycmVudCk7CisJCS8qIHdlIGNhbiBvbmx5IGZsdXNoIHRoZSBUWCBGSUZPcyAqLworCQlkbmV0X3dyaXRlbChicCwgRE5FVF9TWVNfQ1RMX1RYRklGT0ZMVVNILCBTWVNfQ1RMKTsKKwkJbmRlbGF5KDUwMCk7CisJCWRuZXRfd3JpdGVsKGJwLCAwLCBTWVNfQ1RMKTsKKwkJaGFuZGxlZCA9IDE7CisJfQorCisJaWYgKGludF9jdXJyZW50ICYgRE5FVF9JTlRSX1NSQ19SWF9DTURGSUZPQUYpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYnAtPm5hcGkpKSB7CisJCQkvKgorCQkJICogVGhlcmUncyBubyBwb2ludCB0YWtpbmcgYW55IG1vcmUgaW50ZXJydXB0cworCQkJICogdW50aWwgd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIGJ1ZmZlcnMKKwkJCSAqLworCQkJLyogRGlzYWJsZSBSeCBpbnRlcnJ1cHRzIGFuZCBzY2hlZHVsZSBOQVBJIHBvbGwgKi8KKwkJCWludF9lbmFibGUgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX0VOQik7CisJCQlpbnRfZW5hYmxlICY9IH5ETkVUX0lOVFJfU1JDX1JYX0NNREZJRk9BRjsKKwkJCWRuZXRfd3JpdGVsKGJwLCBpbnRfZW5hYmxlLCBJTlRSX0VOQik7CisJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKKwkJfQorCQloYW5kbGVkID0gMTsKKwl9CisKKwlpZiAoIWhhbmRsZWQpCisJCXByX2RlYnVnKCIlczogaXJxICV4IHJlbWFpbnNcbiIsIF9fZnVuY19fLCBpbnRfY3VycmVudCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIGlubGluZSB2b2lkIGRuZXRfcHJpbnRfc2tiKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGs7CisJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJkYXRhOiIpOworCWZvciAoayA9IDA7IGsgPCBza2ItPmxlbjsgaysrKQorCQlwcmludGsoIiAlMDJ4IiwgKHVuc2lnbmVkIGludClza2ItPmRhdGFba10pOworCXByaW50aygiXG4iKTsKK30KKyNlbHNlCisjZGVmaW5lIGRuZXRfcHJpbnRfc2tiKHNrYikJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGludCBkbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKworCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHR4X3N0YXR1cywgaXJxX2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9jbWQsIHdyc3o7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgKmJ1ZnA7CisKKwl0eF9zdGF0dXMgPSBkbmV0X3JlYWRsKGJwLCBUWF9TVEFUVVMpOworCisJcHJfZGVidWcoInN0YXJ0X3htaXQ6IGxlbiAldSBoZWFkICVwIGRhdGEgJXBcbiIsCisJICAgICAgIHNrYi0+bGVuLCBza2ItPmhlYWQsIHNrYi0+ZGF0YSk7CisJZG5ldF9wcmludF9za2Ioc2tiKTsKKworCS8qIGZyYW1lIHNpemUgKHdvcmRzKSAqLworCWxlbiA9IChza2ItPmxlbiArIDMpID4+IDI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKKworCXR4X3N0YXR1cyA9IGRuZXRfcmVhZGwoYnAsIFRYX1NUQVRVUyk7CisKKwlidWZwID0gKHVuc2lnbmVkIGludCAqKSgoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJiB+MHgzVUwpOworCXdyc3ogPSAodTMyKSBza2ItPmxlbiArIDM7CisJd3JzeiArPSAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJiAweDM7CisJd3JzeiA+Pj0gMjsKKwl0eF9jbWQgPSAoKCgodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhKSkgJiAweDAzKSA8PCAxNikgfCAodTMyKSBza2ItPmxlbjsKKworCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGUgY3VycmVudCBmcmFtZSAqLworCWlmICh3cnN6IDwgKERORVRfRklGT19TSVpFIC0gZG5ldF9yZWFkbChicCwgVFhfRklGT19XQ05UKSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IHdyc3o7IGkrKykKKwkJCWRuZXRfd3JpdGVsKGJwLCAqYnVmcCsrLCBUWF9EQVRBX0ZJRk8pOworCisJCS8qCisJCSAqIGluZm9ybSBNQUMgdGhhdCBhIHBhY2tldCdzIHdyaXR0ZW4gYW5kIHJlYWR5IHRvIGJlCisJCSAqIHNoaXBwZWQgb3V0CisJCSAqLworCQlkbmV0X3dyaXRlbChicCwgdHhfY21kLCBUWF9MRU5fRklGTyk7CisJfQorCisJaWYgKGRuZXRfcmVhZGwoYnAsIFRYX0ZJRk9fV0NOVCkgPiBETkVUX0ZJRk9fVFhfREFUQV9BRl9USCkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXR4X3N0YXR1cyA9IGRuZXRfcmVhZGwoYnAsIElOVFJfU1JDKTsKKwkJaXJxX2VuYWJsZSA9IGRuZXRfcmVhZGwoYnAsIElOVFJfRU5CKTsKKwkJaXJxX2VuYWJsZSB8PSBETkVUX0lOVFJfRU5CX1RYX0ZJRk9BRTsKKwkJZG5ldF93cml0ZWwoYnAsIGlycV9lbmFibGUsIElOVFJfRU5CKTsKKwl9CisKKwkvKiBmcmVlIHRoZSBidWZmZXIgKi8KKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOworCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG5ldF9yZXNldF9odyhzdHJ1Y3QgZG5ldCAqYnApCit7CisJLyogcHV0IHRzX21hYyBpbiBJRExFIHN0YXRlIGkuZS4gZGlzYWJsZSByeC90eCAqLworCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9NT0RFX1JFRywgRE5FVF9JTlRFUk5BTF9NT0RFX0ZDRU4pOworCisJLyoKKwkgKiBSWCBGSUZPIGFsbW9zdCBmdWxsIHRocmVzaG9sZDogb25seSBjbWQgRklGTyBhbG1vc3QgZnVsbCBpcworCSAqIGltcGxlbWVudGVkIGZvciBSWCBzaWRlCisJICovCisJZG5ldF93cml0ZWwoYnAsIERORVRfRklGT19SWF9DTURfQUZfVEgsIFJYX0ZJRk9fVEgpOworCS8qCisJICogVFggRklGTyBhbG1vc3QgZW1wdHkgdGhyZXNob2xkOiBvbmx5IGRhdGEgRklGTyBhbG1vc3QgZW1wdHkKKwkgKiBpcyBpbXBsZW1lbnRlZCBmb3IgVFggc2lkZQorCSAqLworCWRuZXRfd3JpdGVsKGJwLCBETkVUX0ZJRk9fVFhfREFUQV9BRV9USCwgVFhfRklGT19USCk7CisKKwkvKiBmbHVzaCByeC90eCBmaWZvcyAqLworCWRuZXRfd3JpdGVsKGJwLCBETkVUX1NZU19DVExfUlhGSUZPRkxVU0ggfCBETkVUX1NZU19DVExfVFhGSUZPRkxVU0gsCisJCQlTWVNfQ1RMKTsKKwltc2xlZXAoMSk7CisJZG5ldF93cml0ZWwoYnAsIDAsIFNZU19DVEwpOworfQorCitzdGF0aWMgdm9pZCBkbmV0X2luaXRfaHcoc3RydWN0IGRuZXQgKmJwKQoreworCXUzMiBjb25maWc7CisKKwlkbmV0X3Jlc2V0X2h3KGJwKTsKKwlfX2RuZXRfc2V0X2h3YWRkcihicCk7CisKKwljb25maWcgPSBkbmV0X3JlYWR3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUkVHKTsKKworCWlmIChicC0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQkvKiBDb3B5IEFsbCBGcmFtZXMgKi8KKwkJY29uZmlnIHw9IERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0VOUFJPTUlTQzsKKwlpZiAoIShicC0+ZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpKQorCQkvKiBObyBCcm9hZENhc3QgKi8KKwkJY29uZmlnIHw9IERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX1JYTVVMVElDQVNUOworCisJY29uZmlnIHw9IERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX1JYUEFVU0UgfAorCSAgICBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SWEJST0FEQ0FTVCB8CisJICAgIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0RST1BDT05UUk9MIHwKKwkgICAgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfRElTQ0ZYRkNTOworCisJZG5ldF93cml0ZXdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SRUcsIGNvbmZpZyk7CisKKwkvKiBjbGVhciBpcnEgYmVmb3JlIGVuYWJsaW5nIHRoZW0gKi8KKwljb25maWcgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX1NSQyk7CisKKwkvKiBlbmFibGUgUlgvVFggaW50ZXJydXB0LCByZWN2IHBhY2tldCByZWFkeSBpbnRlcnJ1cHQgKi8KKwlkbmV0X3dyaXRlbChicCwgRE5FVF9JTlRSX0VOQl9HTE9CQUxfRU5BQkxFIHwgRE5FVF9JTlRSX0VOQl9SWF9TVU1NQVJZIHwKKwkJCURORVRfSU5UUl9FTkJfVFhfU1VNTUFSWSB8IERORVRfSU5UUl9FTkJfUlhfRklGT0VSUiB8CisJCQlETkVUX0lOVFJfRU5CX1JYX0VSUk9SIHwgRE5FVF9JTlRSX0VOQl9SWF9GSUZPRlVMTCB8CisJCQlETkVUX0lOVFJfRU5CX1RYX0ZJRk9GVUxMIHwgRE5FVF9JTlRSX0VOQl9UWF9ESVNDRlJNIHwKKwkJCURORVRfSU5UUl9FTkJfUlhfUEtUUkRZLCBJTlRSX0VOQik7Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIGlmIHRoZSBwaHkgaXMgbm90IHlldCByZWdpc3RlciwgcmV0cnkgbGF0ZXIgKi8KKwlpZiAoIWJwLT5waHlfZGV2KQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbmFwaV9lbmFibGUoJmJwLT5uYXBpKTsKKwlkbmV0X2luaXRfaHcoYnApOworCisJcGh5X3N0YXJ0X2FuZWcoYnAtPnBoeV9kZXYpOworCisJLyogc2NoZWR1bGUgYSBsaW5rIHN0YXRlIGNoZWNrICovCisJcGh5X3N0YXJ0KGJwLT5waHlfZGV2KTsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluYXBpX2Rpc2FibGUoJmJwLT5uYXBpKTsKKworCWlmIChicC0+cGh5X2RldikKKwkJcGh5X3N0b3AoYnAtPnBoeV9kZXYpOworCisJZG5ldF9yZXNldF9odyhicCk7CisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG5ldF9wcmludF9wcmV0dHlfaHdzdGF0cyhzdHJ1Y3QgZG5ldF9zdGF0cyAqaHdzdGF0KQoreworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSWCBzdGF0aXN0aWNzICIKKwkJICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcl9kZWJ1ZygiUlhfUEtUX0lHTlJfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfcGt0X2lnbnIpOworCXByX2RlYnVnKCJSWF9MRU5fQ0hLX0VSUl9DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9sZW5fY2hrX2Vycik7CisJcHJfZGVidWcoIlJYX0xOR19GUk1fQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfbG5nX2ZybSk7CisJcHJfZGVidWcoIlJYX1NIUlRfRlJNX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X3NocnRfZnJtKTsKKwlwcl9kZWJ1ZygiUlhfSVBHX1ZJT0xfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfaXBnX3Zpb2wpOworCXByX2RlYnVnKCJSWF9DUkNfRVJSX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X2NyY19lcnIpOworCXByX2RlYnVnKCJSWF9PS19QS1RfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfb2tfcGt0KTsKKwlwcl9kZWJ1ZygiUlhfQ1RMX0ZSTV9DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9jdGxfZnJtKTsKKwlwcl9kZWJ1ZygiUlhfUEFVU0VfRlJNX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X3BhdXNlX2ZybSk7CisJcHJfZGVidWcoIlJYX01VTFRJQ0FTVF9DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9tdWx0aWNhc3QpOworCXByX2RlYnVnKCJSWF9CUk9BRENBU1RfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfYnJvYWRjYXN0KTsKKwlwcl9kZWJ1ZygiUlhfVkxBTl9UQUdfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfdmxhbl90YWcpOworCXByX2RlYnVnKCJSWF9QUkVfU0hSSU5LX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X3ByZV9zaHJpbmspOworCXByX2RlYnVnKCJSWF9EUklCX05JQl9DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9kcmliX25pYik7CisJcHJfZGVidWcoIlJYX1VOU1VQX09QQ0RfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfdW5zdXBfb3BjZCk7CisJcHJfZGVidWcoIlJYX0JZVEVfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfYnl0ZSk7CisJcHJfZGVidWcoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRYIHN0YXRpc3RpY3MgIgorCQkgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByX2RlYnVnKCJUWF9VTklDQVNUX0NOVCAlLTh4XG4iLCBod3N0YXQtPnR4X3VuaWNhc3QpOworCXByX2RlYnVnKCJUWF9QQVVTRV9GUk1fQ05UICUtOHhcbiIsIGh3c3RhdC0+dHhfcGF1c2VfZnJtKTsKKwlwcl9kZWJ1ZygiVFhfTVVMVElDQVNUX0NOVCAlLTh4XG4iLCBod3N0YXQtPnR4X211bHRpY2FzdCk7CisJcHJfZGVidWcoIlRYX0JSRENBU1RfQ05UICUtOHhcbiIsIGh3c3RhdC0+dHhfYnJkY2FzdCk7CisJcHJfZGVidWcoIlRYX1ZMQU5fVEFHX0NOVCAlLTh4XG4iLCBod3N0YXQtPnR4X3ZsYW5fdGFnKTsKKwlwcl9kZWJ1ZygiVFhfQkFEX0ZDU19DTlQgJS04eFxuIiwgaHdzdGF0LT50eF9iYWRfZmNzKTsKKwlwcl9kZWJ1ZygiVFhfSlVNQk9fQ05UICUtOHhcbiIsIGh3c3RhdC0+dHhfanVtYm8pOworCXByX2RlYnVnKCJUWF9CWVRFX0NOVCAlLTh4XG4iLCBod3N0YXQtPnR4X2J5dGUpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKwlzdHJ1Y3QgZG5ldCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuc3RhdCA9ICZkZXYtPnN0YXRzOworCXN0cnVjdCBkbmV0X3N0YXRzICpod3N0YXQgPSAmYnAtPmh3X3N0YXRzOworCisJLyogcmVhZCBzdGF0cyBmcm9tIGhhcmR3YXJlICovCisJZG5ldF91cGRhdGVfc3RhdHMoYnApOworCisJLyogQ29udmVydCBIVyBzdGF0cyBpbnRvIG5ldGRldmljZSBzdGF0cyAqLworCW5zdGF0LT5yeF9lcnJvcnMgPSAoaHdzdGF0LT5yeF9sZW5fY2hrX2VyciArCisJCQkgICAgaHdzdGF0LT5yeF9sbmdfZnJtICsgaHdzdGF0LT5yeF9zaHJ0X2ZybSArCisJCQkgICAgLyogaWdub3JlIElHUCB2aW9sYXRpb24gZXJyb3IKKwkJCSAgICBod3N0YXQtPnJ4X2lwZ192aW9sICsgKi8KKwkJCSAgICBod3N0YXQtPnJ4X2NyY19lcnIgKworCQkJICAgIGh3c3RhdC0+cnhfcHJlX3NocmluayArCisJCQkgICAgaHdzdGF0LT5yeF9kcmliX25pYiArIGh3c3RhdC0+cnhfdW5zdXBfb3BjZCk7CisJbnN0YXQtPnR4X2Vycm9ycyA9IGh3c3RhdC0+dHhfYmFkX2ZjczsKKwluc3RhdC0+cnhfbGVuZ3RoX2Vycm9ycyA9IChod3N0YXQtPnJ4X2xlbl9jaGtfZXJyICsKKwkJCQkgICBod3N0YXQtPnJ4X2xuZ19mcm0gKworCQkJCSAgIGh3c3RhdC0+cnhfc2hydF9mcm0gKyBod3N0YXQtPnJ4X3ByZV9zaHJpbmspOworCW5zdGF0LT5yeF9jcmNfZXJyb3JzID0gaHdzdGF0LT5yeF9jcmNfZXJyOworCW5zdGF0LT5yeF9mcmFtZV9lcnJvcnMgPSBod3N0YXQtPnJ4X3ByZV9zaHJpbmsgKyBod3N0YXQtPnJ4X2RyaWJfbmliOworCW5zdGF0LT5yeF9wYWNrZXRzID0gaHdzdGF0LT5yeF9va19wa3Q7CisJbnN0YXQtPnR4X3BhY2tldHMgPSAoaHdzdGF0LT50eF91bmljYXN0ICsKKwkJCSAgICAgaHdzdGF0LT50eF9tdWx0aWNhc3QgKyBod3N0YXQtPnR4X2JyZGNhc3QpOworCW5zdGF0LT5yeF9ieXRlcyA9IGh3c3RhdC0+cnhfYnl0ZTsKKwluc3RhdC0+dHhfYnl0ZXMgPSBod3N0YXQtPnR4X2J5dGU7CisJbnN0YXQtPm11bHRpY2FzdCA9IGh3c3RhdC0+cnhfbXVsdGljYXN0OworCW5zdGF0LT5yeF9taXNzZWRfZXJyb3JzID0gaHdzdGF0LT5yeF9wa3RfaWducjsKKworCWRuZXRfcHJpbnRfcHJldHR5X2h3c3RhdHMoaHdzdGF0KTsKKworCXJldHVybiBuc3RhdDsKK30KKworc3RhdGljIGludCBkbmV0X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgZG5ldCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBicC0+cGh5X2RldjsKKworCWlmICghcGh5ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwaHlfZXRodG9vbF9nc2V0KHBoeWRldiwgY21kKTsKK30KKworc3RhdGljIGludCBkbmV0X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgZG5ldCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBicC0+cGh5X2RldjsKKworCWlmICghcGh5ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KHBoeWRldiwgY21kKTsKK30KKworc3RhdGljIGludCBkbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYnAtPnBoeV9kZXY7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwaHlkZXYsIGlmX21paShycSksIGNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRuZXRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sICIwIik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZG5ldF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzCQk9IGRuZXRfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gZG5ldF9zZXRfc2V0dGluZ3MsCisJLmdldF9kcnZpbmZvCQk9IGRuZXRfZ2V0X2RydmluZm8sCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZG5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBkbmV0X2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGRuZXRfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBkbmV0X3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bAkJPSBkbmV0X2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBkbmV0ICpicDsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCWludCBlcnIgPSAtRU5YSU87CisJdW5zaWduZWQgaW50IG1lbV9iYXNlLCBtZW1fc2l6ZSwgaXJxOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtbWlvIHJlc291cmNlIGRlZmluZWRcbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW1lbV9iYXNlID0gcmVzLT5zdGFydDsKKwltZW1fc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obWVtX2Jhc2UsIG1lbV9zaXplLCBEUlZfTkFNRSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlZ2lvbiBhdmFpbGFibGVcbiIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwllcnIgPSAtRU5PTUVNOworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqYnApKTsKKwlpZiAoIWRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJldGhlcmRldiBhbGxvYyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKiBUT0RPOiBBY3R1YWxseSwgd2UgaGF2ZSBzb21lIGludGVyZXN0aW5nIGZlYXR1cmVzLi4uICovCisJZGV2LT5mZWF0dXJlcyB8PSAwOworCisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWJwLT5kZXYgPSBkZXY7CisKKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCisJc3Bpbl9sb2NrX2luaXQoJmJwLT5sb2NrKTsKKworCWJwLT5yZWdzID0gaW9yZW1hcChtZW1fYmFzZSwgbWVtX3NpemUpOworCWlmICghYnAtPnJlZ3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnMsIGFib3J0aW5nLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9mcmVlX2RldjsKKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZG5ldF9pbnRlcnJ1cHQsIDAsIERSVl9OQU1FLCBkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkIChlcnJvciAlZClcbiIsCisJCSAgICAgICBpcnEsIGVycik7CisJCWdvdG8gZXJyX291dF9pb3VubWFwOworCX0KKworCWRldi0+bmV0ZGV2X29wcyA9ICZkbmV0X25ldGRldl9vcHM7CisJbmV0aWZfbmFwaV9hZGQoZGV2LCAmYnAtPm5hcGksIGRuZXRfcG9sbCwgNjQpOworCWRldi0+ZXRodG9vbF9vcHMgPSAmZG5ldF9ldGh0b29sX29wczsKKworCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYnAtPnJlZ3M7CisKKwlicC0+Y2FwYWJpbGl0aWVzID0gZG5ldF9yZWFkbChicCwgVkVSQ0FQUykgJiBETkVUX0NBUFNfTUFTSzsKKworCWRuZXRfZ2V0X2h3YWRkcihicCk7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJLyogY2hvb3NlIGEgcmFuZG9tIGV0aGVybmV0IGFkZHJlc3MgKi8KKwkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CisJCV9fZG5ldF9zZXRfaHdhZGRyKGJwKTsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIFBIWSBib2FyZCBmaXh1cCAoZm9yIE1hcnZlbGwgODhFMTExMSkgKi8KKwllcnIgPSBwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZCgweDAxNDEwY2MwLCAweGZmZmZmZmYwLAorCQkJCQkgZG5ldF9waHlfbWFydmVsbF9maXh1cCk7CisJLyogd2UgY2FuIGxpdmUgd2l0aG91dCBpdCwgc28ganVzdCBpc3N1ZSBhIHdhcm5pbmcgKi8KKwlpZiAoZXJyKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIFBIWSBib2FyZCBmaXh1cC5cbiIpOworCisJaWYgKGRuZXRfbWlpX2luaXQoYnApICE9IDApCisJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX25ldGRldjsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEYXZlIERORVQgYXQgMHglcCAoMHglMDh4KSBpcnEgJWQgJXBNXG4iLAorCSAgICAgICBicC0+cmVncywgbWVtX2Jhc2UsIGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaGFzICVzbWRpbywgJXNpcnEsICVzZ2lnYWJpdCwgJXNkbWEgXG4iLAorCSAgICAgICAoYnAtPmNhcGFiaWxpdGllcyAmIERORVRfSEFTX01ESU8pID8gIiIgOiAibm8gIiwKKwkgICAgICAgKGJwLT5jYXBhYmlsaXRpZXMgJiBETkVUX0hBU19JUlEpID8gIiIgOiAibm8gIiwKKwkgICAgICAgKGJwLT5jYXBhYmlsaXRpZXMgJiBETkVUX0hBU19HSUdBQklUKSA/ICIiIDogIm5vICIsCisJICAgICAgIChicC0+Y2FwYWJpbGl0aWVzICYgRE5FVF9IQVNfRE1BKSA/ICIiIDogIm5vICIpOworCXBoeWRldiA9IGJwLT5waHlfZGV2OworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgorCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCisJICAgICAgIHBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF91bnJlZ2lzdGVyX25ldGRldjoKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworZXJyX291dF9mcmVlX2lycToKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKK2Vycl9vdXRfaW91bm1hcDoKKwlpb3VubWFwKGJwLT5yZWdzKTsKK2Vycl9vdXRfZnJlZV9kZXY6CisJZnJlZV9uZXRkZXYoZGV2KTsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZG5ldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGRuZXQgKmJwOworCisJZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoZGV2KSB7CisJCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaWYgKGJwLT5waHlfZGV2KQorCQkJcGh5X2Rpc2Nvbm5lY3QoYnAtPnBoeV9kZXYpOworCQltZGlvYnVzX3VucmVnaXN0ZXIoYnAtPm1paV9idXMpOworCQlrZnJlZShicC0+bWlpX2J1cy0+aXJxKTsKKwkJbWRpb2J1c19mcmVlKGJwLT5taWlfYnVzKTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJCWlvdW5tYXAoYnAtPnJlZ3MpOworCQlmcmVlX25ldGRldihkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbmV0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZG5ldF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGRuZXRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gImRuZXQiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkbmV0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbmV0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkbmV0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZG5ldF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkbmV0X2luaXQpOworbW9kdWxlX2V4aXQoZG5ldF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEYXZlIERORVQgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJJbHlhIFlhbm9rIDx5YW5va0BlbWNyYWZ0LmNvbT4sICIKKwkgICAgICAiTWF0dGVvIFZpdCA8bWF0dGVvLnZpdEBkYXZlLmV1PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG5ldC5oIGIvZHJpdmVycy9uZXQvZG5ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjViMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9kbmV0LmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBEYXZlIERORVQgRXRoZXJuZXQgQ29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2ZSBTLnIubC4gPHd3dy5kYXZlLmV1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0RORVRfSAorI2RlZmluZSBfRE5FVF9ICisKKyNkZWZpbmUgRFJWX05BTUUJCSJkbmV0IgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuOS4xIgorI2RlZmluZSBQRlgJCQkJRFJWX05BTUUgIjogIgorCisvKiBSZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCisjZGVmaW5lIGRuZXRfd3JpdGVsKHBvcnQsIHZhbHVlLCByZWcpCVwKKwl3cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgRE5FVF8jI3JlZykKKyNkZWZpbmUgZG5ldF9yZWFkbChwb3J0LCByZWcpCXJlYWRsKChwb3J0KS0+cmVncyArIERORVRfIyNyZWcpCisKKy8qIEFMTCBETkVUIEZJRk8gUkVHSVNURVJTICovCisjZGVmaW5lIERORVRfUlhfTEVOX0ZJRk8JCTB4MDAwCS8qIFJYX0xFTl9GSUZPICovCisjZGVmaW5lIERORVRfUlhfREFUQV9GSUZPCQkweDAwNAkvKiBSWF9EQVRBX0ZJRk8gKi8KKyNkZWZpbmUgRE5FVF9UWF9MRU5fRklGTwkJMHgwMDgJLyogVFhfTEVOX0ZJRk8gKi8KKyNkZWZpbmUgRE5FVF9UWF9EQVRBX0ZJRk8JCTB4MDBDCS8qIFRYX0RBVEFfRklGTyAqLworCisvKiBBTEwgRE5FVCBDT05UUk9ML1NUQVRVUyBSRUdJU1RFUlMgT0ZGU0VUUyAqLworI2RlZmluZSBETkVUX1ZFUkNBUFMJCQkweDEwMAkvKiBWRVJDQVBTICovCisjZGVmaW5lIERORVRfSU5UUl9TUkMJCQkweDEwNAkvKiBJTlRSX1NSQyAqLworI2RlZmluZSBETkVUX0lOVFJfRU5CCQkJMHgxMDgJLyogSU5UUl9FTkIgKi8KKyNkZWZpbmUgRE5FVF9SWF9TVEFUVVMJCQkweDEwQwkvKiBSWF9TVEFUVVMgKi8KKyNkZWZpbmUgRE5FVF9UWF9TVEFUVVMJCQkweDExMAkvKiBUWF9TVEFUVVMgKi8KKyNkZWZpbmUgRE5FVF9SWF9GUkFNRVNfQ05UCQkweDExNAkvKiBSWF9GUkFNRVNfQ05UICovCisjZGVmaW5lIERORVRfVFhfRlJBTUVTX0NOVAkJMHgxMTgJLyogVFhfRlJBTUVTX0NOVCAqLworI2RlZmluZSBETkVUX1JYX0ZJRk9fVEgJCQkweDExQwkvKiBSWF9GSUZPX1RIICovCisjZGVmaW5lIERORVRfVFhfRklGT19USAkJCTB4MTIwCS8qIFRYX0ZJRk9fVEggKi8KKyNkZWZpbmUgRE5FVF9TWVNfQ1RMCQkJMHgxMjQJLyogU1lTX0NUTCAqLworI2RlZmluZSBETkVUX1BBVVNFX1RNUgkJCTB4MTI4CS8qIFBBVVNFX1RNUiAqLworI2RlZmluZSBETkVUX1JYX0ZJRk9fV0NOVAkJMHgxMkMJLyogUlhfRklGT19XQ05UICovCisjZGVmaW5lIERORVRfVFhfRklGT19XQ05UCQkweDEzMAkvKiBUWF9GSUZPX1dDTlQgKi8KKworLyogQUxMIERORVQgTUFDIFJFR0lTVEVSUyAqLworI2RlZmluZSBETkVUX01BQ1JFR19EQVRBCQkweDIwMAkvKiBNYWMtUmVnIERhdGEgKi8KKyNkZWZpbmUgRE5FVF9NQUNSRUdfQUREUgkJMHgyMDQJLyogTWFjLVJlZyBBZGRyICAqLworCisvKiBBTEwgRE5FVCBSWCBTVEFUSVNUSUNTIENPVU5URVJTICAqLworI2RlZmluZSBETkVUX1JYX1BLVF9JR05SX0NOVAkJMHgzMDAKKyNkZWZpbmUgRE5FVF9SWF9MRU5fQ0hLX0VSUl9DTlQJCTB4MzA0CisjZGVmaW5lIERORVRfUlhfTE5HX0ZSTV9DTlQJCTB4MzA4CisjZGVmaW5lIERORVRfUlhfU0hSVF9GUk1fQ05UCQkweDMwQworI2RlZmluZSBETkVUX1JYX0lQR19WSU9MX0NOVAkJMHgzMTAKKyNkZWZpbmUgRE5FVF9SWF9DUkNfRVJSX0NOVAkJMHgzMTQKKyNkZWZpbmUgRE5FVF9SWF9PS19QS1RfQ05UCQkweDMxOAorI2RlZmluZSBETkVUX1JYX0NUTF9GUk1fQ05UCQkweDMxQworI2RlZmluZSBETkVUX1JYX1BBVVNFX0ZSTV9DTlQJCTB4MzIwCisjZGVmaW5lIERORVRfUlhfTVVMVElDQVNUX0NOVAkJMHgzMjQKKyNkZWZpbmUgRE5FVF9SWF9CUk9BRENBU1RfQ05UCQkweDMyOAorI2RlZmluZSBETkVUX1JYX1ZMQU5fVEFHX0NOVAkJMHgzMkMKKyNkZWZpbmUgRE5FVF9SWF9QUkVfU0hSSU5LX0NOVAkJMHgzMzAKKyNkZWZpbmUgRE5FVF9SWF9EUklCX05JQl9DTlQJCTB4MzM0CisjZGVmaW5lIERORVRfUlhfVU5TVVBfT1BDRF9DTlQJCTB4MzM4CisjZGVmaW5lIERORVRfUlhfQllURV9DTlQJCTB4MzNDCisKKy8qIERORVQgVFggU1RBVElTVElDUyBDT1VOVEVSUyAqLworI2RlZmluZSBETkVUX1RYX1VOSUNBU1RfQ05UCQkweDQwMAorI2RlZmluZSBETkVUX1RYX1BBVVNFX0ZSTV9DTlQJCTB4NDA0CisjZGVmaW5lIERORVRfVFhfTVVMVElDQVNUX0NOVAkJMHg0MDgKKyNkZWZpbmUgRE5FVF9UWF9CUkRDQVNUX0NOVAkJMHg0MEMKKyNkZWZpbmUgRE5FVF9UWF9WTEFOX1RBR19DTlQJCTB4NDEwCisjZGVmaW5lIERORVRfVFhfQkFEX0ZDU19DTlQJCTB4NDE0CisjZGVmaW5lIERORVRfVFhfSlVNQk9fQ05UCQkweDQxOAorI2RlZmluZSBETkVUX1RYX0JZVEVfQ05UCQkweDQxQworCisvKiBTT01FIElOVEVSTkFMIE1BQy1DT1JFIFJFR0lTVEVSICovCisjZGVmaW5lIERORVRfSU5URVJOQUxfTU9ERV9SRUcJCTB4MAorI2RlZmluZSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SRUcJMHgyCisjZGVmaW5lIERORVRfSU5URVJOQUxfTUFYX1BLVF9TSVpFX1JFRwkweDQKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9JR1BfUkVHCQkweDgKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9NQUNfQUREUl8wX1JFRwkweGEKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9NQUNfQUREUl8xX1JFRwkweGMKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9NQUNfQUREUl8yX1JFRwkweGUKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9UWF9SWF9TVFNfUkVHCTB4MTIKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DVExfUkVHCTB4MTQKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19EQVRfUkVHCTB4MTYKKworI2RlZmluZSBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0NNRF9GSU4JKDEgPDwgMTQpCisKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9XUklURQkJKDEgPDwgMzEpCisKKy8qIE1BQy1DT1JFIFJFR0lTVEVSIEZJRUxEUyAqLworCisvKiBNQUMtQ09SRSBNT0RFIFJFR0lTVEVSIEZJRUxEUyAqLworI2RlZmluZSBETkVUX0lOVEVSTkFMX01PREVfR0JJVEVOCQkJKDEgPDwgMCkKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9NT0RFX0ZDRU4JCQkJKDEgPDwgMSkKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9NT0RFX1JYRU4JCQkJKDEgPDwgMikKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9NT0RFX1RYRU4JCQkJKDEgPDwgMykKKworLyogTUFDLUNPUkUgUlhUWCBDT05UUk9MIFJFR0lTVEVSIEZJRUxEUyAqLworI2RlZmluZSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SWFNIT1JURlJBTUUJCSgxIDw8IDgpCisjZGVmaW5lIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX1JYQlJPQURDQVNUCQkoMSA8PCA3KQorI2RlZmluZSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SWE1VTFRJQ0FTVAkJKDEgPDwgNCkKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUlhQQVVTRQkJKDEgPDwgMykKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfRElTVFhGQ1MJCSgxIDw8IDIpCisjZGVmaW5lIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0RJU0NGWEZDUwkJKDEgPDwgMSkKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfRU5QUk9NSVNDCQkoMSA8PCAwKQorI2RlZmluZSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9EUk9QQ09OVFJPTAkJKDEgPDwgNikKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfRU5BQkxFSEFMRkRVUAkoMSA8PCA1KQorCisvKiBTWVNURU0gQ09OVFJPTCBSRUdJU1RFUiBGSUVMRFMgKi8KKyNkZWZpbmUgRE5FVF9TWVNfQ1RMX0lHTk9SRU5FWFRQS1QJCQkoMSA8PCAwKQorI2RlZmluZSBETkVUX1NZU19DVExfU0VORFBBVVNFCQkJCSgxIDw8IDIpCisjZGVmaW5lIERORVRfU1lTX0NUTF9SWEZJRk9GTFVTSAkJCSgxIDw8IDMpCisjZGVmaW5lIERORVRfU1lTX0NUTF9UWEZJRk9GTFVTSAkJCSgxIDw8IDQpCisKKy8qIFRYIFNUQVRVUyBSRUdJU1RFUiBGSUVMRFMgKi8KKyNkZWZpbmUgRE5FVF9UWF9TVEFUVVNfRklGT19BTE1PU1RfRU1QVFkJCSgxIDw8IDIpCisjZGVmaW5lIERORVRfVFhfU1RBVFVTX0ZJRk9fQUxNT1NUX0ZVTEwJCQkoMSA8PCAxKQorCisvKiBJTlRFUlJVUFQgU09VUkNFIFJFR0lTVEVSIEZJRUxEUyAqLworI2RlZmluZSBETkVUX0lOVFJfU1JDX1RYX1BLVFNFTlQJCQkoMSA8PCAwKQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1RYX0ZJRk9BRgkJCQkoMSA8PCAxKQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1RYX0ZJRk9BRQkJCQkoMSA8PCAyKQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1RYX0RJU0NGUk0JCQkoMSA8PCAzKQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1RYX0ZJRk9GVUxMCQkJKDEgPDwgNCkKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19SWF9DTURGSUZPQUYJCQkoMSA8PCA4KQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1JYX0NNREZJRk9GRgkJCSgxIDw8IDkpCisjZGVmaW5lIERORVRfSU5UUl9TUkNfUlhfREFUQUZJRk9GRgkJCSgxIDw8IDEwKQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1RYX1NVTU1BUlkJCQkoMSA8PCAxNikKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19SWF9TVU1NQVJZCQkJKDEgPDwgMTcpCisjZGVmaW5lIERORVRfSU5UUl9TUkNfUEhZCQkJCSgxIDw8IDE5KQorCisvKiBJTlRFUlJVUFQgRU5BQkxFIFJFR0lTVEVSIEZJRUxEUyAqLworI2RlZmluZSBETkVUX0lOVFJfRU5CX1RYX1BLVFNFTlQJCQkoMSA8PCAwKQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1RYX0ZJRk9BRgkJCQkoMSA8PCAxKQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1RYX0ZJRk9BRQkJCQkoMSA8PCAyKQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1RYX0RJU0NGUk0JCQkoMSA8PCAzKQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1RYX0ZJRk9GVUxMCQkJKDEgPDwgNCkKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9SWF9QS1RSRFkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9SWF9GSUZPQUYJCQkJKDEgPDwgOSkKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9SWF9GSUZPRVJSCQkJKDEgPDwgMTApCisjZGVmaW5lIERORVRfSU5UUl9FTkJfUlhfRVJST1IJCQkJKDEgPDwgMTEpCisjZGVmaW5lIERORVRfSU5UUl9FTkJfUlhfRklGT0ZVTEwJCQkoMSA8PCAxMikKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9SWF9GSUZPQUUJCQkJKDEgPDwgMTMpCisjZGVmaW5lIERORVRfSU5UUl9FTkJfVFhfU1VNTUFSWQkJCSgxIDw8IDE2KQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1JYX1NVTU1BUlkJCQkoMSA8PCAxNykKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9HTE9CQUxfRU5BQkxFCQkJKDEgPDwgMTgpCisKKy8qIGRlZmF1bHQgdmFsdWVzOgorICogYWxtb3N0IGVtcHR5ID0gbGVzcyB0aGFuIG9uZSBmdWxsIHNpemVkIGV0aGVybmV0IGZyYW1lIChubyBqdW1ibykgaW5zaWRlCisgKiB0aGUgZmlmbyBhbG1vc3QgZnVsbCA9IGNhbiB3cml0ZSBsZXNzIHRoYW4gb25lIGZ1bGwgc2l6ZWQgZXRoZXJuZXQgZnJhbWUKKyAqIChubyBqdW1ibykgaW5zaWRlIHRoZSBmaWZvCisgKi8KKyNkZWZpbmUgRE5FVF9DRkdfVFhfRklGT19GVUxMX1RIUkVTCTI1CisjZGVmaW5lIERORVRfQ0ZHX1JYX0ZJRk9fRlVMTF9USFJFUwkyMAorCisvKgorICogQ2FwYWJpbGl0aWVzLiBVc2VkIGJ5IHRoZSBkcml2ZXIgdG8ga25vdyB0aGUgY2FwYWJpbGl0aWVzIHRoYXQgdGhlIGV0aGVybmV0CisgKiBjb250cm9sbGVyIGluc2lkZSB0aGUgRlBHQSBoYXZlLgorICovCisKKyNkZWZpbmUgRE5FVF9IQVNfTURJTwkJKDEgPDwgMCkKKyNkZWZpbmUgRE5FVF9IQVNfSVJRCQkoMSA8PCAxKQorI2RlZmluZSBETkVUX0hBU19HSUdBQklUCSgxIDw8IDIpCisjZGVmaW5lIERORVRfSEFTX0RNQQkJKDEgPDwgMykKKworI2RlZmluZSBETkVUX0hBU19NSUkJCSgxIDw8IDQpIC8qIG9yIEdNSUkgKi8KKyNkZWZpbmUgRE5FVF9IQVNfUk1JSQkJKDEgPDwgNSkgLyogb3IgUkdNSUkgKi8KKworI2RlZmluZSBETkVUX0NBUFNfTUFTSwkJMHhGRkZGCisKKyNkZWZpbmUgRE5FVF9GSUZPX1NJWkUJCTEwMjQgLyogMUsgeCAzMiBiaXQgKi8KKyNkZWZpbmUgRE5FVF9GSUZPX1RYX0RBVEFfQUZfVEgJKERORVRfRklGT19TSVpFIC0gMzg0KSAvKiAzODQgPSAxNTM2IC8gNCAqLworI2RlZmluZSBETkVUX0ZJRk9fVFhfREFUQV9BRV9USAkzODQKKworI2RlZmluZSBETkVUX0ZJRk9fUlhfQ01EX0FGX1RICSgxIDw8IDE2KSAvKiBqdXN0IG9uZSBmcmFtZSBpbnNpZGUgdGhlIEZJRk8gKi8KKworLyoKKyAqIEhhcmR3YXJlLWNvbGxlY3RlZCBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgZG5ldF9zdGF0cyB7CisJdTMyIHJ4X3BrdF9pZ25yOworCXUzMiByeF9sZW5fY2hrX2VycjsKKwl1MzIgcnhfbG5nX2ZybTsKKwl1MzIgcnhfc2hydF9mcm07CisJdTMyIHJ4X2lwZ192aW9sOworCXUzMiByeF9jcmNfZXJyOworCXUzMiByeF9va19wa3Q7CisJdTMyIHJ4X2N0bF9mcm07CisJdTMyIHJ4X3BhdXNlX2ZybTsKKwl1MzIgcnhfbXVsdGljYXN0OworCXUzMiByeF9icm9hZGNhc3Q7CisJdTMyIHJ4X3ZsYW5fdGFnOworCXUzMiByeF9wcmVfc2hyaW5rOworCXUzMiByeF9kcmliX25pYjsKKwl1MzIgcnhfdW5zdXBfb3BjZDsKKwl1MzIgcnhfYnl0ZTsKKwl1MzIgdHhfdW5pY2FzdDsKKwl1MzIgdHhfcGF1c2VfZnJtOworCXUzMiB0eF9tdWx0aWNhc3Q7CisJdTMyIHR4X2JyZGNhc3Q7CisJdTMyIHR4X3ZsYW5fdGFnOworCXUzMiB0eF9iYWRfZmNzOworCXUzMiB0eF9qdW1ibzsKKwl1MzIgdHhfYnl0ZTsKK307CisKK3N0cnVjdCBkbmV0IHsKKwl2b2lkIF9faW9tZW0JCQkqcmVnczsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKKwlzdHJ1Y3QgZG5ldF9zdGF0cwkJaHdfc3RhdHM7CisJdW5zaWduZWQgaW50CQkJY2FwYWJpbGl0aWVzOyAvKiByZWFkIGZyb20gRlBHQSAqLworCXN0cnVjdCBuYXBpX3N0cnVjdAkJbmFwaTsKKworCS8qIFBIWSBzdHVmZiAqLworCXN0cnVjdCBtaWlfYnVzCQkJKm1paV9idXM7CisJc3RydWN0IHBoeV9kZXZpY2UJCSpwaHlfZGV2OworCXVuc2lnbmVkIGludAkJCWxpbms7CisJdW5zaWduZWQgaW50CQkJc3BlZWQ7CisJdW5zaWduZWQgaW50CQkJZHVwbGV4OworfTsKKworI2VuZGlmIC8qIF9ETkVUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCA4NjFkMmVlLi4wNTA0ZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImUxMDAiCiAjZGVmaW5lIERSVl9FWFQJCQkiLU5BUEkiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMy41LjIzLWs2IkRSVl9FWFQKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIzLjUuMjQtazIiRFJWX0VYVAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJJbnRlbChSKSBQUk8vMTAwIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0KGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgpAQCAtMjQwLDYgKzI0MCw3IEBACiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTA5MywgNyksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTA5NCwgNyksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTA5NSwgNyksCisJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTBmZSwgNyksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTIwOSwgMCksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTIyOSwgMCksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MjQ0OSwgMiksCkBAIC0yNzUsNiArMjc2LDcgQEAKIAlwaHlfODI1NjJfZW0gPSAweDAzMjAwMkE4LAogCXBoeV84MjU2Ml9layA9IDB4MDMxMDAyQTgsCiAJcGh5XzgyNTYyX2VoID0gMHgwMTcwMDJBOCwKKwlwaHlfODI1NTJfdiAgPSAweGQwNjEwMDRkLAogCXBoeV91bmtub3duICA9IDB4RkZGRkZGRkYsCiB9OwogCkBAIC05NDMsNiArOTQ1LDIyIEBACiAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGFkZHIsIGludCByZWcsIGludCBkYXRhKQogeworCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAgKChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgJiYgKHJlZyA9PSBNSUlfQk1DUikgJiYKKwkgICAgIChkYXRhICYgKEJNQ1JfQU5SRVNUQVJUIHwgQk1DUl9BTkVOQUJMRSkpKSB7CisJCXUxNiBhZHZlcnQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOworCisJCS8qCisJCSAqIFdvcmthcm91bmQgU2kgaXNzdWUgd2hlcmUgc29tZXRpbWVzIHRoZSBwYXJ0IHdpbGwgbm90CisJCSAqIGF1dG9uZWcgdG8gMTAwTWJwcyBldmVuIHdoZW4gYWR2ZXJ0aXNlZC4KKwkJICovCisJCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwRlVMTCkKKwkJCWRhdGEgfD0gQk1DUl9TUEVFRDEwMCB8IEJNQ1JfRlVMTERQTFg7CisJCWVsc2UgaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMDBIQUxGKQorCQkJZGF0YSB8PSBCTUNSX1NQRUVEMTAwOworCX0KKwogCW1kaW9fY3RybChuZXRkZXZfcHJpdihuZXRkZXYpLCBhZGRyLCBtZGlfd3JpdGUsIHJlZywgZGF0YSk7CiB9CiAKQEAgLTEyNzYsMTYgKzEyOTQsMTIgQEAKIAlpZiAoYWRkciA9PSAzMikKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQkvKiBTZWxlY3RlZCB0aGUgcGh5IGFuZCBpc29sYXRlIHRoZSByZXN0ICovCi0JZm9yIChhZGRyID0gMDsgYWRkciA8IDMyOyBhZGRyKyspIHsKLQkJaWYgKGFkZHIgIT0gbmljLT5taWkucGh5X2lkKSB7Ci0JCQltZGlvX3dyaXRlKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSk7Ci0JCX0gZWxzZSB7Ci0JCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IpOwotCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLAotCQkJCWJtY3IgJiB+Qk1DUl9JU09MQVRFKTsKLQkJfQotCX0KKwkvKiBJc29sYXRlIGFsbCB0aGUgUEhZIGlkcyAqLworCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKQorCQltZGlvX3dyaXRlKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSk7CisJLyogU2VsZWN0IHRoZSBkaXNjb3ZlcmVkIFBIWSAqLworCWJtY3IgJj0gfkJNQ1JfSVNPTEFURTsKKwltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUiwgYm1jcik7CiAKIAkvKiBHZXQgcGh5IElEICovCiAJaWRfbG8gPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9QSFlTSUQxKTsKQEAgLTEzMDMsNyArMTMxNywxOCBAQAogCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTlNDX0NPTkcsIGNvbmcpOwogCX0KIAotCWlmICgobmljLT5tYWMgPj0gbWFjXzgyNTUwX0QxMDIpIHx8ICgobmljLT5mbGFncyAmIGljaCkgJiYKKwlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJdTE2IGFkdmVydCA9IG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CisKKwkJLyogV29ya2Fyb3VuZCBTaSBub3QgYWR2ZXJ0aXNpbmcgZmxvdy1jb250cm9sIGR1cmluZyBhdXRvbmVnICovCisJCWFkdmVydCB8PSBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU07CisJCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIGFkdmVydCk7CisKKwkJLyogUmVzZXQgZm9yIHRoZSBhYm92ZSBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0ICovCisJCWJtY3IgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9CTUNSKTsKKwkJYm1jciB8PSBCTUNSX1JFU0VUOworCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUiwgYm1jcik7CisJfSBlbHNlIGlmICgobmljLT5tYWMgPj0gbWFjXzgyNTUwX0QxMDIpIHx8ICgobmljLT5mbGFncyAmIGljaCkgJiYKIAkgICAobWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfVFBJU1RBVFVTKSAmIDB4ODAwMCkgJiYKIAkJIShuaWMtPmVlcHJvbVtlZXByb21fY25mZ19tZGl4XSAmIGVlcHJvbV9tZGl4X2VuYWJsZWQpKSkgewogCQkvKiBlbmFibGUvZGlzYWJsZSBNREkvTURJLVggYXV0by1zd2l0Y2hpbmcuICovCkBAIC0yMTM0LDYgKzIxNTksOSBAQAogfQogCiAjZGVmaW5lIE1JSV9MRURfQ09OVFJPTAkweDFCCisjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09WRVJSSURFIDB4MTkKKyNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT04gICAgICAgMHgwMDBGIC8qIExFRFRYIGFuZCBMRURfUlggYm90aCBvbiAqLworI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PRkYgICAgICAweDAwMEEgLyogTEVEVFggYW5kIExFRF9SWCBib3RoIG9mZiAqLwogc3RhdGljIHZvaWQgZTEwMF9ibGlua19sZWQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBuaWMgKm5pYyA9IChzdHJ1Y3QgbmljICopZGF0YTsKQEAgLTIxNDMsMTAgKzIxNzEsMTkgQEAKIAkJbGVkX29uXzU1OSA9IDB4MDUsCiAJCWxlZF9vbl81NTcgPSAweDA3LAogCX07CisJdTE2IGxlZF9yZWcgPSBNSUlfTEVEX0NPTlRST0w7CiAKLQluaWMtPmxlZHMgPSAobmljLT5sZWRzICYgbGVkX29uKSA/IGxlZF9vZmYgOgotCQkobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6IGxlZF9vbl81NTk7Ci0JbWRpb193cml0ZShuaWMtPm5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTEVEX0NPTlRST0wsIG5pYy0+bGVkcyk7CisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCWxlZF9yZWcgPSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERTsKKworCQluaWMtPmxlZHMgPSAobmljLT5sZWRzID09IEUxMDBfODI1NTJfTEVEX09OKSA/CisJCSAgICAgICAgICAgIEUxMDBfODI1NTJfTEVEX09GRiA6IEUxMDBfODI1NTJfTEVEX09OOworCX0gZWxzZSB7CisJCW5pYy0+bGVkcyA9IChuaWMtPmxlZHMgJiBsZWRfb24pID8gbGVkX29mZiA6CisJCSAgICAgICAgICAgIChuaWMtPm1hYyA8IG1hY184MjU1OV9EMTAxTSkgPyBsZWRfb25fNTU3IDoKKwkJICAgICAgICAgICAgbGVkX29uXzU1OTsKKwl9CisJbWRpb193cml0ZShuaWMtPm5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCBuaWMtPmxlZHMpOwogCW1vZF90aW1lcigmbmljLT5ibGlua190aW1lciwgamlmZmllcyArIEhaIC8gNCk7CiB9CiAKQEAgLTIzNzUsMTMgKzI0MTIsMTUgQEAKIHN0YXRpYyBpbnQgZTEwMF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2IGxlZF9yZWcgPSAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpID8gRTEwMF84MjU1Ml9MRURfT1ZFUlJJREUgOgorCSAgICAgICAgICAgICAgTUlJX0xFRF9DT05UUk9MOwogCiAJaWYgKCFkYXRhIHx8IGRhdGEgPiAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKSkKIAkJZGF0YSA9ICh1MzIpKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopOwogCW1vZF90aW1lcigmbmljLT5ibGlua190aW1lciwgamlmZmllcyk7CiAJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwogCWRlbF90aW1lcl9zeW5jKCZuaWMtPmJsaW5rX3RpbWVyKTsKLQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTEVEX0NPTlRST0wsIDApOworCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIGxlZF9yZWcsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjg2LDYgKzI3MjUsOSBAQAogCX0KIH0KIAorI2RlZmluZSBFMTAwXzgyNTUyX1NNQVJUU1BFRUQgICAweDE0ICAgLyogU21hcnRTcGVlZCBDdHJsIHJlZ2lzdGVyICovCisjZGVmaW5lIEUxMDBfODI1NTJfUkVWX0FORUcgICAgIDB4MDIwMCAvKiBSZXZlcnNlIGF1dG8tbmVnb3RpYXRpb24gKi8KKyNkZWZpbmUgRTEwMF84MjU1Ml9BTkVHX05PVyAgICAgMHgwNDAwIC8qIEF1dG8tbmVnb3RpYXRlIG5vdyAqLwogc3RhdGljIGludCBlMTAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtMjY5OCw2ICsyNzQwLDE1IEBACiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlpZiAoKG5pYy0+ZmxhZ3MgJiB3b2xfbWFnaWMpIHwgZTEwMF9hc2YobmljKSkgeworCQkvKiBlbmFibGUgcmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisJCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgeworCQkJdTE2IHNtYXJ0c3BlZWQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQpOworCisJCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkJICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQsIHNtYXJ0c3BlZWQgfAorCQkJICAgICAgICAgICBFMTAwXzgyNTUyX1JFVl9BTkVHIHwgRTEwMF84MjU1Ml9BTkVHX05PVyk7CisJCX0KIAkJaWYgKHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCB0cnVlKSkKIAkJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIHRydWUpOwogCX0gZWxzZSB7CkBAIC0yNzIxLDYgKzI3NzIsMTYgQEAKIAkvKiBhY2sgYW55IHBlbmRpbmcgd2FrZSBldmVudHMsIGRpc2FibGUgUE1FICovCiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIDAsIDApOwogCisJLyogZGlzYmFsZSByZXZlcnNlIGF1dG8tbmVnb3RpYXRpb24gKi8KKwlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJdTE2IHNtYXJ0c3BlZWQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDBfODI1NTJfU01BUlRTUEVFRCk7CisKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwKKwkJICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQsCisJCSAgICAgICAgICAgc21hcnRzcGVlZCAmIH4oRTEwMF84MjU1Ml9SRVZfQU5FRykpOworCX0KKwogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQllMTAwX3VwKG5pYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggY2E3Y2Q3ZS4uOTNiODYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtNTc3LDEyICs1NzcsMzAgQEAKIAogdm9pZCBlMTAwMF9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwl1MzIgcmN0bCwgdGN0bDsKIAogCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGRvd24gc28gdGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90CiAJICogcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGltZXIgKi8KIAlzZXRfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKIAorCS8qIGRpc2FibGUgcmVjZWl2ZXMgaW4gdGhlIGhhcmR3YXJlICovCisJcmN0bCA9IGVyMzIoUkNUTCk7CisJZXczMihSQ1RMLCByY3RsICYgfkUxMDAwX1JDVExfRU4pOworCS8qIGZsdXNoIGFuZCBzbGVlcCBiZWxvdyAqLworCisJLyogY2FuIGJlIG5ldGlmX3R4X2Rpc2FibGUgd2hlbiBORVRJRl9GX0xMVFggaXMgcmVtb3ZlZCAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSAqLworCXRjdGwgPSBlcjMyKFRDVEwpOworCXRjdGwgJj0gfkUxMDAwX1RDVExfRU47CisJZXczMihUQ1RMLCB0Y3RsKTsKKwkvKiBmbHVzaCBib3RoIGRpc2FibGVzIGFuZCB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaCAqLworCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CisJbXNsZWVwKDEwKTsKKwogCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CiAKIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKQEAgLTU5NSw3ICs2MTMsNiBAQAogCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOwogCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gMDsKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAogCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOwogCWUxMDAwX2NsZWFuX2FsbF90eF9yaW5ncyhhZGFwdGVyKTsKQEAgLTE4NzcsOCArMTg5NCw2IEBACiAgKiBlMTAwMF9zZXR1cF9yY3RsIC0gY29uZmlndXJlIHRoZSByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiBAYWRhcHRlcjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KLSNkZWZpbmUgUEFHRV9VU0VfQ09VTlQoUykgKCgoUykgPj4gUEFHRV9TSElGVCkgKyBcCi0JCQkoKChTKSAmIChQQUdFX1NJWkUgLSAxKSkgPyAxIDogMCkpCiBzdGF0aWMgdm9pZCBlMTAwMF9zZXR1cF9yY3RsKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yMDUxLDE3ICsyMDY2LDE0IEBACiBzdGF0aWMgdm9pZCBlMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICBzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCWJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLwogfQogCkBAIC0yOTEwLDEzICsyOTIyLDIxIEBACiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIHNpemUsIGNvdW50ID0gMCwgaTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplLCBjb3VudCA9IDAsIGk7CiAJdW5zaWduZWQgaW50IGY7Ci0JbGVuIC09IHNrYi0+ZGF0YV9sZW47CisJZG1hX2FkZHJfdCAqbWFwOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCisJaWYgKHNrYl9kbWFfbWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCW9mZnNldCA9IDA7CisKIAl3aGlsZSAobGVuKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwpAQCAtMjk1MSwxOCArMjk3MSwxOCBAQAogCQkJc2l6ZSAtPSA0OwogCiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCi0JCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkJCXNpemUsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CiAJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOwogCiAJCWxlbiAtPSBzaXplOwogCQlvZmZzZXQgKz0gc2l6ZTsKIAkJY291bnQrKzsKLQkJaWYgKHVubGlrZWx5KCsraSA9PSB0eF9yaW5nLT5jb3VudCkpIGkgPSAwOworCQlpZiAobGVuKSB7CisJCQlpKys7CisJCQlpZiAodW5saWtlbHkoaSA9PSB0eF9yaW5nLT5jb3VudCkpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMjk3MCw5ICsyOTkwLDEzIEBACiAKIAkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZdOwogCQlsZW4gPSBmcmFnLT5zaXplOwotCQlvZmZzZXQgPSBmcmFnLT5wYWdlX29mZnNldDsKKwkJb2Zmc2V0ID0gMDsKIAogCQl3aGlsZSAobGVuKSB7CisJCQlpKys7CisJCQlpZiAodW5saWtlbHkoaSA9PSB0eF9yaW5nLT5jb3VudCkpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKIAkJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCkBAIC0yOTg4LDIzICszMDEyLDE2IEBACiAJCQkJc2l6ZSAtPSA0OwogCiAJCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKLQkJCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJCXBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCQlmcmFnLT5wYWdlLAotCQkJCQlvZmZzZXQsCi0JCQkJCXNpemUsCi0JCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCQkJaWYgKHVubGlrZWx5KCsraSA9PSB0eF9yaW5nLT5jb3VudCkpIGkgPSAwOwogCQl9CiAJfQogCi0JaSA9IChpID09IDApID8gdHhfcmluZy0+Y291bnQgLSAxIDogaSAtIDE7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIApAQCAtMzMyMiwxNCArMzMzOSwyMCBAQAogCWlmIChsaWtlbHkoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpKQogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19JUFY0OwogCi0JZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCi0JICAgICAgICAgICAgICAgZTEwMDBfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wZXJfdHhkLCBucl9mcmFncywgbXNzKSk7CisJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsCisJICAgICAgICAgICAgICAgICAgICAgbnJfZnJhZ3MsIG1zcyk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoY291bnQpIHsKKwkJZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsIGNvdW50KTsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwkJZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyAyKTsKIAotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KLQllMTAwMF9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDIpOworCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBmaXJzdDsKKwl9CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMzczOCwxMCArMzc2MSwxMiBAQAogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwogCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCS8qIHRoaXMgcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuISBpZiBpdCBkb2VzIGl0IGlzIGJhc2ljYWxseSBhCiAJCSAqIGJ1ZywgYnV0IG5vdCBhIGhhcmQgZXJyb3IsIHNvIGVuYWJsZSBpbnRzIGFuZCBjb250aW51ZSAqLwotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKKwkJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzc2Myw3ICszNzg4LDcgQEAKIAlhZGFwdGVyLT5jbGVhbl9yeChhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1swXSwKIAkgICAgICAgICAgICAgICAgICAmd29ya19kb25lLCBidWRnZXQpOwogCi0JaWYgKHR4X2NsZWFuZWQpCisJaWYgKCF0eF9jbGVhbmVkKQogCQl3b3JrX2RvbmUgPSBidWRnZXQ7CiAKIAkvKiBJZiBidWRnZXQgbm90IGZ1bGx5IGNvbnN1bWVkLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KQEAgLTM3NzEsNyArMzc5Niw4IEBACiAJCWlmIChsaWtlbHkoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSkKIAkJCWUxMDAwX3NldF9pdHIoYWRhcHRlcik7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7Ci0JCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzc5MCwxNSArMzgxNiwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwlib29sIGNsZWFuZWQ7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzPTAsIHRvdGFsX3R4X3BhY2tldHM9MDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgKSB7CisJd2hpbGUgKChlb3BfZGVzYy0+dXBwZXIuZGF0YSAmIGNwdV90b19sZTMyKEUxMDAwX1RYRF9TVEFUX0REKSkgJiYKKwkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+Y291bnQpKSB7CisJCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKQEAgLTM4MjEsMTAgKzM4NDgsNiBAQAogCiAJCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJCWVvcF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgZW9wKTsKLSNkZWZpbmUgRTEwMDBfVFhfV0VJR0hUIDY0Ci0JCS8qIHdlaWdodCBvZiBhIHNvcnQgZm9yIHR4LCB0byBhdm9pZCBlbmRsZXNzIHRyYW5zbWl0IGNsZWFudXAgKi8KLQkJaWYgKGNvdW50KysgPT0gRTEwMDBfVFhfV0VJR0hUKQotCQkJYnJlYWs7CiAJfQogCiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CkBAIC0zODQ2LDggKzM4NjksOCBAQAogCQkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAgKwogCQkgICAgICAgICAgICAgICAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIApAQCAtMzg2OSw3ICszODkyLDcgQEAKIAkJCQlyZWFkbChody0+aHdfYWRkciArIHR4X3JpbmctPnRkdCksCiAJCQkJdHhfcmluZy0+bmV4dF90b191c2UsCiAJCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKLQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCwKIAkJCQllb3AsCiAJCQkJamlmZmllcywKIAkJCQllb3BfZGVzYy0+dXBwZXIuZmllbGRzLnN0YXR1cyk7CkBAIC0zODgwLDcgKzM5MDMsNyBAQAogCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYnl0ZXMgKz0gdG90YWxfdHhfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKLQlyZXR1cm4gY2xlYW5lZDsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKaW5kZXggNTFmOGU4NC4uNmMwMWEyMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC00MCw2ICs0MCw3IEBACiAgKiA4MjU3M0UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIChDb3BwZXIpCiAgKiA4MjU3M0wgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyCiAgKiA4MjU3NEwgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAqIDgyNTgzViBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTEwMCw2ICsxMDEsNyBAQAogCQlwaHktPnR5cGUJCSA9IGUxMDAwX3BoeV9tODg7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcGh5LT50eXBlCQkgPSBlMTAwMF9waHlfYm07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMjIsNiArMTI0LDcgQEAKIAkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlpZiAocGh5LT5pZCAhPSBCTUUxMDAwX0VfUEhZX0lEX1IyKQogCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogCQlicmVhazsKQEAgLTE2NSw2ICsxNjgsNyBAQAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MzoKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWlmICgoKGVlY2QgPj4gMTUpICYgMHgzKSA9PSAweDMpIHsKIAkJCW52bS0+dHlwZSA9IGUxMDAwX252bV9mbGFzaF9odzsKIAkJCW52bS0+d29yZF9zaXplID0gMjA0ODsKQEAgLTI2Miw2ICsyNjYsNyBAQAogCiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWZ1bmMtPmNoZWNrX21uZ19tb2RlID0gZTEwMDBfY2hlY2tfbW5nX21vZGVfODI1NzQ7CiAJCWZ1bmMtPmxlZF9vbiA9IGUxMDAwX2xlZF9vbl84MjU3NDsKIAkJYnJlYWs7CkBAIC0zNzUsNiArMzgwLDcgQEAKIAkJcmV0dXJuIGUxMDAwZV9nZXRfcGh5X2lkKGh3KTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIFBIWV9JRDEsICZwaHlfaWQpOwogCQlpZiAocmV0X3ZhbCkKIAkJCXJldHVybiByZXRfdmFsOwpAQCAtNDY0LDggKzQ3MCwxNSBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzMgJiYgaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc0KQorCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldF92YWwgPSBlMTAwMGVfYWNxdWlyZV9udm0oaHcpOworCQlicmVhazsKKwl9CiAKIAlpZiAocmV0X3ZhbCkKIAkJZTEwMDBfcHV0X2h3X3NlbWFwaG9yZV84MjU3MShodyk7CkBAIC01MDUsNiArNTE4LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZXRfdmFsID0gZTEwMDBfd3JpdGVfbnZtX2Vld3JfODI1NzEoaHcsIG9mZnNldCwgd29yZHMsIGRhdGEpOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTcxOgpAQCAtNzc5LDcgKzc5MywxMCBAQAogCSAqIE11c3QgYWNxdWlyZSB0aGUgTURJTyBvd25lcnNoaXAgYmVmb3JlIE1BQyByZXNldC4KIAkgKiBPd25lcnNoaXAgZGVmYXVsdHMgdG8gZmlybXdhcmUgYWZ0ZXIgYSByZXNldC4KIAkgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CiAJCWV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQOwogCkBAIC03OTUsNiArODEyLDkgQEAKIAkJCW1zbGVlcCgyKTsKIAkJCWkrKzsKIAkJfSB3aGlsZSAoaSA8IE1ESU9fT1dORVJTSElQX1RJTUVPVVQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAljdHJsID0gZXIzMihDVFJMKTsKQEAgLTgyMCw4ICs4NDAsMTYgQEAKIAkgKiBOZWVkIHRvIHdhaXQgZm9yIFBoeSBjb25maWd1cmF0aW9uIGNvbXBsZXRpb24gYmVmb3JlIGFjY2Vzc2luZwogCSAqIE5WTSBhbmQgUGh5LgogCSAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzMgfHwgaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KQorCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJbXNsZWVwKDI1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gKi8KIAlldzMyKElNQywgMHhmZmZmZmZmZik7CkBAIC04OTEsMTcgKzkxOSwyMiBAQAogCWV3MzIoVFhEQ1RMKDApLCByZWdfZGF0YSk7CiAKIAkvKiAuLi5mb3IgYm90aCBxdWV1ZXMuICovCi0JaWYgKG1hYy0+dHlwZSAhPSBlMTAwMF84MjU3MyAmJiBtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKG1hYy0+dHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQllMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOworCQlyZWdfZGF0YSA9IGVyMzIoR0NSKTsKKwkJcmVnX2RhdGEgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKKwkJZXczMihHQ1IsIHJlZ19kYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmVnX2RhdGEgPSBlcjMyKFRYRENUTCgxKSk7CiAJCXJlZ19kYXRhID0gKHJlZ19kYXRhICYgfkUxMDAwX1RYRENUTF9XVEhSRVNIKSB8CiAJCQkgICBFMTAwMF9UWERDVExfRlVMTF9UWF9ERVNDX1dCIHwKIAkJCSAgIEUxMDAwX1RYRENUTF9DT1VOVF9ERVNDOwogCQlldzMyKFRYRENUTCgxKSwgcmVnX2RhdGEpOwotCX0gZWxzZSB7Ci0JCWUxMDAwZV9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZyhodyk7Ci0JCXJlZ19kYXRhID0gZXIzMihHQ1IpOwotCQlyZWdfZGF0YSB8PSBFMTAwMF9HQ1JfTDFfQUNUX1dJVEhPVVRfTDBTX1JYOwotCQlldzMyKEdDUiwgcmVnX2RhdGEpOworCQlicmVhazsKIAl9CiAKIAkvKgpAQCAtOTY2LDE4ICs5OTksMzAgQEAKIAl9CiAKIAkvKiBEZXZpY2UgQ29udHJvbCAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzMgfHwgaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmVnID0gZXIzMihDVFJMKTsKIAkJcmVnICY9IH4oMSA8PCAyOSk7CiAJCWV3MzIoQ1RSTCwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJLyogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoQ1RSTF9FWFQpOwogCQlyZWcgJj0gfigxIDw8IDIzKTsKIAkJcmVnIHw9ICgxIDw8IDIyKTsKIAkJZXczMihDVFJMX0VYVCwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MSkgewpAQCAtOTk5LDcgKzEwNDQsOSBAQAogCiAKIAkvKiBQQ0ktRXggQ29udHJvbCBSZWdpc3RlcnMgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoR0NSKTsKIAkJcmVnIHw9ICgxIDw8IDIyKTsKIAkJZXczMihHQ1IsIHJlZyk7CkBAIC0xMDA3LDYgKzEwNTQsOSBAQAogCQlyZWcgPSBlcjMyKEdDUjIpOwogCQlyZWcgfD0gMTsKIAkJZXczMihHQ1IyLCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlyZXR1cm47CkBAIC0xMDI2LDcgKzEwNzYsMTAgQEAKIAl1MzIgdmZ0YV9vZmZzZXQgPSAwOwogCXUzMiB2ZnRhX2JpdF9pbl9yZWcgPSAwOwogCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlpZiAoaHctPm1uZ19jb29raWUudmxhbl9pZCAhPSAwKSB7CiAJCQkvKgogCQkJICogVGhlIFZGVEEgaXMgYSA0MDk2YiBiaXQtZmllbGQsIGVhY2ggaWRlbnRpZnlpbmcKQEAgLTEwNDEsNiArMTA5NCw5IEBACiAJCQl2ZnRhX2JpdF9pbl9yZWcgPSAxIDw8IChody0+bW5nX2Nvb2tpZS52bGFuX2lkICYKIAkJCQkJICAgICAgIEUxMDAwX1ZGVEFfRU5UUllfQklUX1NISUZUX01BU0spOwogCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEUxMDAwX1ZMQU5fRklMVEVSX1RCTF9TSVpFOyBvZmZzZXQrKykgewogCQkvKgpAQCAtMTEzOSw5ICsxMTk1LDE2IEBACiAJICogdGhlIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmcsIHNvIHdlIGV4cGxpY2l0bHkKIAkgKiBzZXQgaXQgdG8gZnVsbC4KIAkgKi8KLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpICYmCi0JICAgIGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19kZWZhdWx0KQotCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19mdWxsOworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCWlmIChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gZTEwMDBfZmNfZGVmYXVsdCkKKwkJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2Z1bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiBlMTAwMGVfc2V0dXBfbGluayhodyk7CiB9CkBAIC0xMzYyLDExICsxNDI1LDE5IEBACiAJCXJldHVybiByZXRfdmFsOwogCX0KIAotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgJiYKLQkgICAgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0Y3NDYpCi0JCSpkYXRhID0gSURfTEVEX0RFRkFVTFRfODI1NzM7Ci0JZWxzZSBpZiAoKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEXzAwMDAgfHwgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpCi0JCSpkYXRhID0gSURfTEVEX0RFRkFVTFQ7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GNzQ2KQorCQkJKmRhdGEgPSBJRF9MRURfREVGQVVMVF84MjU3MzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF8wMDAwIHx8CisJCSAgICAqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRkZGRikKKwkJCSpkYXRhID0gSURfTEVEX0RFRkFVTFQ7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTY1OSwzICsxNzMwLDE5IEBACiAJLm52bV9vcHMJCT0gJmU4MjU3MV9udm1fb3BzLAogfTsKIAorc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1ODNfaW5mbyA9IHsKKwkubWFjCQkJPSBlMTAwMF84MjU4MywKKwkuZmxhZ3MJCQk9IEZMQUdfSEFTX0hXX1ZMQU5fRklMVEVSCisJCQkJICB8IEZMQUdfSEFTX1dPTAorCQkJCSAgfCBGTEFHX0FQTUVfSU5fQ1RSTDMKKwkJCQkgIHwgRkxBR19SWF9DU1VNX0VOQUJMRUQKKwkJCQkgIHwgRkxBR19IQVNfU01BUlRfUE9XRVJfRE9XTgorCQkJCSAgfCBGTEFHX0hBU19BTVQKKwkJCQkgIHwgRkxBR19IQVNfQ1RSTEVYVF9PTl9MT0FELAorCS5wYmEJCQk9IDIwLAorCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzXzgyNTcxLAorCS5tYWNfb3BzCQk9ICZlODI1NzFfbWFjX29wcywKKwkucGh5X29wcwkJPSAmZTgyX3BoeV9vcHNfYm0sCisJLm52bV9vcHMJCT0gJmU4MjU3MV9udm1fb3BzLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAppbmRleCAyOGJmOWE1Li5mMzczNjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaApAQCAtMTAxLDYgKzEwMSw3IEBACiAJYm9hcmRfODI1NzIsCiAJYm9hcmRfODI1NzMsCiAJYm9hcmRfODI1NzQsCisJYm9hcmRfODI1ODMsCiAJYm9hcmRfODAwMDNlczJsYW4sCiAJYm9hcmRfaWNoOGxhbiwKIAlib2FyZF9pY2g5bGFuLApAQCAtMzk5LDYgKzQwMCw3IEBACiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzJfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU3M19pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc0X2luZm87CitleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1ODNfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9pY2g4X2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoOV9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2ljaDEwX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCAyNTU3YWVlLi40ZDI1ZWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTc5MCw2ICs3OTAsNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAljYXNlIGUxMDAwX2ljaDhsYW46CiAJY2FzZSBlMTAwMF9pY2g5bGFuOgogCWNhc2UgZTEwMDBfaWNoMTBsYW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCmluZGV4IDVjYjQyOGMuLmQ4YjgyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCkBAIC0zMzksNiArMzM5LDggQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTczRV9JQU1UCQkweDEwOEMKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTczTAkJCTB4MTA5QQogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzRMCQkJMHgxMEQzCisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NExBCQkJMHgxMEY2CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU4M1YgICAgICAgICAgICAgICAgICAgICAweDE1MEMKIAogI2RlZmluZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVAkweDEwOTYKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX1NFUkRFU19EUFQJMHgxMDk4CkBAIC0zNzYsNiArMzc4LDcgQEAKIAllMTAwMF84MjU3MiwKIAllMTAwMF84MjU3MywKIAllMTAwMF84MjU3NCwKKwllMTAwMF84MjU4MywKIAllMTAwMF84MDAwM2VzMmxhbiwKIAllMTAwMF9pY2g4bGFuLAogCWUxMDAwX2ljaDlsYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKaW5kZXggYWMyZjM0ZS4uMThhNGY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwpAQCAtMTU5LDQxICsxNTksNiBAQAogfQogCiAvKioKLSAqICBlMTAwMF9tdGFfc2V0IC0gU2V0IG11bHRpY2FzdCBmaWx0ZXIgdGFibGUgYWRkcmVzcwotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKiAgQGhhc2hfdmFsdWU6IGRldGVybWluZXMgdGhlIE1UQSByZWdpc3RlciBhbmQgYml0IHRvIHNldAotICoKLSAqICBUaGUgbXVsdGljYXN0IHRhYmxlIGFkZHJlc3MgaXMgYSByZWdpc3RlciBhcnJheSBvZiAzMi1iaXQgcmVnaXN0ZXJzLgotICogIFRoZSBoYXNoX3ZhbHVlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgcmVnaXN0ZXIgdGhlIGJpdCBpcyBpbiwgdGhlCi0gKiAgY3VycmVudCB2YWx1ZSBpcyByZWFkLCB0aGUgbmV3IGJpdCBpcyBPUidkIGluIGFuZCB0aGUgbmV3IHZhbHVlIGlzCi0gKiAgd3JpdHRlbiBiYWNrIGludG8gdGhlIHJlZ2lzdGVyLgotICoqLwotc3RhdGljIHZvaWQgZTEwMDBfbXRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSkKLXsKLQl1MzIgaGFzaF9iaXQsIGhhc2hfcmVnLCBtdGE7Ci0KLQkvKgotCSAqIFRoZSBNVEEgaXMgYSByZWdpc3RlciBhcnJheSBvZiAzMi1iaXQgcmVnaXN0ZXJzLiBJdCBpcwotCSAqIHRyZWF0ZWQgbGlrZSBhbiBhcnJheSBvZiAoMzIqbXRhX3JlZ19jb3VudCkgYml0cy4gIFdlIHdhbnQgdG8KLQkgKiBzZXQgYml0IEJpdEFycmF5W2hhc2hfdmFsdWVdLiBTbyB3ZSBmaWd1cmUgb3V0IHdoYXQgcmVnaXN0ZXIKLQkgKiB0aGUgYml0IGlzIGluLCByZWFkIGl0LCBPUiBpbiB0aGUgbmV3IGJpdCwgdGhlbiB3cml0ZQotCSAqIGJhY2sgdGhlIG5ldyB2YWx1ZS4gIFRoZSAoaHctPm1hYy5tdGFfcmVnX2NvdW50IC0gMSkgc2VydmVzIGFzIGEKLQkgKiBtYXNrIHRvIGJpdHMgMzE6NSBvZiB0aGUgaGFzaCB2YWx1ZSB3aGljaCBnaXZlcyB1cyB0aGUKLQkgKiByZWdpc3RlciB3ZSdyZSBtb2RpZnlpbmcuICBUaGUgaGFzaCBiaXQgd2l0aGluIHRoYXQgcmVnaXN0ZXIKLQkgKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlciA1IGJpdHMgb2YgdGhlIGhhc2ggdmFsdWUuCi0JICovCi0JaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKTsKLQloYXNoX2JpdCA9IGhhc2hfdmFsdWUgJiAweDFGOwotCi0JbXRhID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaGFzaF9yZWcpOwotCi0JbXRhIHw9ICgxIDw8IGhhc2hfYml0KTsKLQotCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBoYXNoX3JlZywgbXRhKTsKLQllMWVfZmx1c2goKTsKLX0KLQotLyoqCiAgKiAgZTEwMDBfaGFzaF9tY19hZGRyIC0gR2VuZXJhdGUgYSBtdWx0aWNhc3QgaGFzaCB2YWx1ZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG1jX2FkZHI6IHBvaW50ZXIgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcwpAQCAtMjgxLDggKzI0NiwxMyBAQAogCQkJCQl1OCAqbWNfYWRkcl9saXN0LCB1MzIgbWNfYWRkcl9jb3VudCwKIAkJCQkJdTMyIHJhcl91c2VkX2NvdW50LCB1MzIgcmFyX2NvdW50KQogewotCXUzMiBoYXNoX3ZhbHVlOwogCXUzMiBpOworCXUzMiAqbWNhcnJheSA9IGt6YWxsb2MoaHctPm1hYy5tdGFfcmVnX2NvdW50ICogc2l6ZW9mKHUzMiksIEdGUF9BVE9NSUMpOworCisJaWYgKCFtY2FycmF5KSB7CisJCXByaW50ayhLRVJOX0VSUiAibXVsdGljYXN0IGFycmF5IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIExvYWQgdGhlIGZpcnN0IHNldCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGV4YWN0CkBAIC0zMDIsMjAgKzI3MiwyNCBAQAogCQl9CiAJfQogCi0JLyogQ2xlYXIgdGhlIG9sZCBzZXR0aW5ncyBmcm9tIHRoZSBNVEEgKi8KLQlod19kYmcoaHcsICJDbGVhcmluZyBNVEFcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm10YV9yZWdfY291bnQ7IGkrKykgewotCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaSwgMCk7Ci0JCWUxZV9mbHVzaCgpOwotCX0KLQogCS8qIExvYWQgYW55IHJlbWFpbmluZyBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGhhc2ggdGFibGUuICovCiAJZm9yICg7IG1jX2FkZHJfY291bnQgPiAwOyBtY19hZGRyX2NvdW50LS0pIHsKKwkJdTMyIGhhc2hfdmFsdWUsIGhhc2hfcmVnLCBoYXNoX2JpdCwgbXRhOwogCQloYXNoX3ZhbHVlID0gZTEwMDBfaGFzaF9tY19hZGRyKGh3LCBtY19hZGRyX2xpc3QpOwogCQlod19kYmcoaHcsICJIYXNoIHZhbHVlID0gMHglMDNYXG4iLCBoYXNoX3ZhbHVlKTsKLQkJZTEwMDBfbXRhX3NldChodywgaGFzaF92YWx1ZSk7CisJCWhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gNSkgJiAoaHctPm1hYy5tdGFfcmVnX2NvdW50IC0gMSk7CisJCWhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7CisJCW10YSA9ICgxIDw8IGhhc2hfYml0KTsKKwkJbWNhcnJheVtoYXNoX3JlZ10gfD0gbXRhOwogCQltY19hZGRyX2xpc3QgKz0gRVRIX0FMRU47CiAJfQorCisJLyogd3JpdGUgdGhlIGhhc2ggdGFibGUgY29tcGxldGVseSAqLworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm10YV9yZWdfY291bnQ7IGkrKykKKwkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGksIG1jYXJyYXlbaV0pOworCisJZTFlX2ZsdXNoKCk7CisJa2ZyZWUobWNhcnJheSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDA0ZTAwN2QuLmJmYjJkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogI2luY2x1ZGUgImUxMDAwLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4zLjQtazIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMy40LWs0IgogY2hhciBlMTAwMGVfZHJpdmVyX25hbWVbXSA9ICJlMTAwMGUiOwogY29uc3QgY2hhciBlMTAwMGVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogCkBAIC01Nyw2ICs1Nyw3IEBACiAJW2JvYXJkXzgyNTcyXQkJPSAmZTEwMDBfODI1NzJfaW5mbywKIAlbYm9hcmRfODI1NzNdCQk9ICZlMTAwMF84MjU3M19pbmZvLAogCVtib2FyZF84MjU3NF0JCT0gJmUxMDAwXzgyNTc0X2luZm8sCisJW2JvYXJkXzgyNTgzXQkJPSAmZTEwMDBfODI1ODNfaW5mbywKIAlbYm9hcmRfODAwMDNlczJsYW5dCT0gJmUxMDAwX2VzMl9pbmZvLAogCVtib2FyZF9pY2g4bGFuXQkJPSAmZTEwMDBfaWNoOF9pbmZvLAogCVtib2FyZF9pY2g5bGFuXQkJPSAmZTEwMDBfaWNoOV9pbmZvLApAQCAtNTY2LDE1ICs1NjcsMTQgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3B1dF90eGJ1ZihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3ByaW50X3R4X2hhbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MjEsMTUgKzYyMSwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSAwOworCWJvb2wgY2xlYW5lZDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXMgPSAwLCB0b3RhbF90eF9wYWNrZXRzID0gMDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IDA7ICFjbGVhbmVkOyApIHsKKwl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKKwkJZm9yIChjbGVhbmVkID0gMDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CkBAIC02NTUsMTAgKzY1Niw2IEBACiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwotI2RlZmluZSBFMTAwMF9UWF9XRUlHSFQgNjQKLQkJLyogd2VpZ2h0IG9mIGEgc29ydCBmb3IgdHgsIHRvIGF2b2lkIGVuZGxlc3MgdHJhbnNtaXQgY2xlYW51cCAqLwotCQlpZiAoY291bnQrKyA9PSBFMTAwMF9UWF9XRUlHSFQpCi0JCQlicmVhazsKIAl9CiAKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKQEAgLTY3OSwxMyArNjc2LDExIEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmRldGVjdF90eF9odW5nKSB7Ci0JCS8qCi0JCSAqIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKLQkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaQotCQkgKi8KKwkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQorCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCiAJCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gMDsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcAorCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wCiAJCQkgICAgICAgKyAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIAkJCWUxMDAwX3ByaW50X3R4X2hhbmcoYWRhcHRlcik7CkBAIC02OTYsNyArNjkxLDcgQEAKIAlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX3R4X2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7Ci0JcmV0dXJuIGNsZWFuZWQ7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPmNvdW50KTsKIH0KIAogLyoqCkBAIC0xMjY2LDcgKzEyNjEsOCBAQAogCXUzMiBpY3IgPSBlcjMyKElDUik7CiAKIAlpZiAoIShpY3IgJiBFMTAwMF9JQ1JfSU5UX0FTU0VSVEVEKSkgewotCQlldzMyKElNUywgRTEwMDBfSU1TX09USEVSKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlldzMyKElNUywgRTEwMDBfSU1TX09USEVSKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIApAQCAtMTI4Myw3ICsxMjc5LDggQEAKIAl9CiAKIG5vX2xpbmtfaW50ZXJydXB0OgotCWV3MzIoSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX09USEVSKTsKKwlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJZXczMihJTVMsIEUxMDAwX0lNU19MU0MgfCBFMTAwMF9JTVNfT1RIRVIpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjAxMiw3ICsyMDA5LDcgQEAKIGNsZWFuX3J4OgogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwpAQCAtMjAyMCwxMCArMjAxNywxMiBAQAogCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQogCQkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKLQkJCWV3MzIoSU1TLCBhZGFwdGVyLT5yeF9yaW5nLT5pbXNfdmFsKTsKLQkJZWxzZQotCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCisJCQkJZXczMihJTVMsIGFkYXB0ZXItPnJ4X3JpbmctPmltc192YWwpOworCQkJZWxzZQorCQkJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCX0KIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzMwOSw3ICszMzA4LDcgQEAKIAogCWFkYXB0ZXItPnN0YXRzLmFsZ25lcnJjICs9IGVyMzIoQUxHTkVSUkMpOwogCWFkYXB0ZXItPnN0YXRzLnJ4ZXJyYyArPSBlcjMyKFJYRVJSQyk7Ci0JaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkKKwlpZiAoKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkgJiYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU4MykpCiAJCWFkYXB0ZXItPnN0YXRzLnRuY3JzICs9IGVyMzIoVE5DUlMpOwogCWFkYXB0ZXItPnN0YXRzLmNleHRlcnIgKz0gZXIzMihDRVhURVJSKTsKIAlhZGFwdGVyLT5zdGF0cy50c2N0YyArPSBlcjMyKFRTQ1RDKTsKQEAgLTM3NjYsMTEgKzM3NjUsMTcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCBjc3M7CiAJdTMyIGNtZF9sZW4gPSBFMTAwMF9UWERfQ01EX0RFWFQ7CisJX19iZTE2IHByb3RvY29sOwogCiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpCiAJCXJldHVybiAwOwogCi0Jc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKQorCQlwcm90b2NvbCA9IHZsYW5fZXRoX2hkcihza2IpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCWVsc2UKKwkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCisJc3dpdGNoIChwcm90b2NvbCkgewogCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKQEAgLTM3ODIsNyArMzc4Nyw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKQotCQkJZV93YXJuKCJjaGVja3N1bV9wYXJ0aWFsIHByb3RvPSV4IVxuIiwgc2tiLT5wcm90b2NvbCk7CisJCQllX3dhcm4oImNoZWNrc3VtX3BhcnRpYWwgcHJvdG89JXghXG4iLAorCQkJICAgICAgIGJlMTZfdG9fY3B1KHByb3RvY29sKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzgyMSw0MiArMzgyNyw0MCBAQAogewogCXN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCW9mZnNldCA9IDA7CisKIAl3aGlsZSAobGVuKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCi0JCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCSAqIGluIFRTTyBtb2RlLiAgQXBwZW5kIDQtYnl0ZSBzZW50aW5lbCBkZXNjICovCi0JCWlmIChtc3MgJiYgIW5yX2ZyYWdzICYmIHNpemUgPT0gbGVuICYmIHNpemUgPiA4KQotCQkJc2l6ZSAtPSA0OwotCiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkvKiBzZXQgdGltZV9zdGFtcCAqYmVmb3JlKiBkbWEgdG8gaGVscCBhdm9pZCBhIHBvc3NpYmxlIHJhY2UgKi8KIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCi0JCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkJCXNpemUsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSkpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKLQkJCWFkYXB0ZXItPnR4X2RtYV9mYWlsZWQrKzsKLQkJCXJldHVybiAtMTsKLQkJfQogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CisJCWNvdW50Kys7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwotCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CisKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMzg2NCw0OSArMzg2OCwyNyBAQAogCiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKLQkJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCQkgKiBpbiBUU08gbW9kZS4gIEFwcGVuZCA0LWJ5dGUgc2VudGluZWwgZGVzYyAqLwotCQkJaWYgKG1zcyAmJiBmID09IChucl9mcmFncy0xKSAmJiBzaXplID09IGxlbiAmJiBzaXplID4gOCkKLQkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGFkYXB0ZXItPnBkZXYsCi0JCQkJCQkgIGJ1ZmZlcl9pbmZvLT5kbWEpKSB7Ci0JCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCQkiVFggRE1BIHBhZ2UgbWFwIGZhaWxlZFxuIik7Ci0JCQkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCi0JCQlpKys7Ci0JCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlpID0gMDsKIAkJfQogCX0KIAotCWlmIChpID09IDApCi0JCWkgPSB0eF9yaW5nLT5jb3VudCAtIDE7Ci0JZWxzZQotCQlpLS07Ci0KIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC00MTU5LDIwICs0MTQxLDIwIEBACiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19JUFY0OwogCisJLyogaWYgY291bnQgaXMgMCB0aGVuIG1hcHBpbmcgZXJyb3IgaGFzIG9jY3VyZWQgKi8KIAljb3VudCA9IGUxMDAwX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0LCBtYXhfcGVyX3R4ZCwgbnJfZnJhZ3MsIG1zcyk7Ci0JaWYgKGNvdW50IDwgMCkgewotCQkvKiBoYW5kbGUgcGNpX21hcF9zaW5nbGUoKSBlcnJvciBpbiBlMTAwMF90eF9tYXAgKi8KKwlpZiAoY291bnQpIHsKKwkJZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfZmxhZ3MsIGNvdW50KTsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwkJZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIE1BWF9TS0JfRlJBR1MgKyAyKTsKKworCX0gZWxzZSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7CisJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBmaXJzdDsKIAl9CiAKLQllMTAwMF90eF9xdWV1ZShhZGFwdGVyLCB0eF9mbGFncywgY291bnQpOwotCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIE1BWF9TS0JfRlJBR1MgKyAyKTsKLQogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTUxNDksNiArNTEzMSw4IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTczTCksIGJvYXJkXzgyNTczIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMKSwgYm9hcmRfODI1NzQgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMQSksIGJvYXJkXzgyNTc0IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgzViksIGJvYXJkXzgyNTgzIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVCksCiAJICBib2FyZF84MDAwM2VzMmxhbiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAppbmRleCA2NTZjZjFiLi42ZTMxN2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaApAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJlaGVhIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiRUhFQV8wMDk4IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiRUhFQV8wMTAwIgogCiAvKiBlSEVBIGNhcGFiaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgRExQQVJfUE9SVF9BRERfUkVNIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCmluZGV4IDk1OGRhY2IuLmFjMGM1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtMTU1LDYgKzE1NSw4IEBACiAJaW50IG51bV9md19oYW5kbGVzLCBrLCBsOwogCiAJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBoYW5kbGVzICovCisJbXV0ZXhfbG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KSB7CiAJCW51bV9hZGFwdGVycysrOwogCkBAIC0xNzYsMTUgKzE3OCwxOSBAQAogCWlmIChudW1fZndfaGFuZGxlcykgewogCQlhcnIgPSBremFsbG9jKG51bV9md19oYW5kbGVzICogc2l6ZW9mKCphcnIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFhcnIpCi0JCQlyZXR1cm47ICAvKiBLZWVwIHRoZSBleGlzdGluZyBhcnJheSAqLworCQkJZ290byBvdXQ7ICAvKiBLZWVwIHRoZSBleGlzdGluZyBhcnJheSAqLwogCX0gZWxzZQogCQlnb3RvIG91dF91cGRhdGU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG51bV9hZGFwdGVycyA9PSAwKQorCQkJYnJlYWs7CisKIAkJZm9yIChrID0gMDsgayA8IEVIRUFfTUFYX1BPUlRTOyBrKyspIHsKIAkJCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBhZGFwdGVyLT5wb3J0W2tdOwogCi0JCQlpZiAoIXBvcnQgfHwgKHBvcnQtPnN0YXRlICE9IEVIRUFfUE9SVF9VUCkpCisJCQlpZiAoIXBvcnQgfHwgKHBvcnQtPnN0YXRlICE9IEVIRUFfUE9SVF9VUCkKKwkJCQl8fCAobnVtX3BvcnRzID09IDApKQogCQkJCWNvbnRpbnVlOwogCiAJCQlmb3IgKGwgPSAwOwpAQCAtMjA3LDYgKzIxMyw3IEBACiAJCQl9CiAJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJYXJyW2krK10uZndoID0gcG9ydC0+cXBfZXEtPmZ3X2hhbmRsZTsKKwkJCW51bV9wb3J0cy0tOwogCQl9CiAKIAkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKQEAgLTIxNiwxNiArMjIzLDIwIEBACiAJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJYXJyW2krK10uZndoID0gYWRhcHRlci0+bXIuaGFuZGxlOwogCQl9CisJCW51bV9hZGFwdGVycy0tOwogCX0KIAogb3V0X3VwZGF0ZToKIAlrZnJlZShlaGVhX2Z3X2hhbmRsZXMuYXJyKTsKIAllaGVhX2Z3X2hhbmRsZXMuYXJyID0gYXJyOwogCWVoZWFfZndfaGFuZGxlcy5udW1fZW50cmllcyA9IGk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucyh2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVoZWFfYmNtY19yZWdfZW50cnkgKmFyciA9IE5VTEw7CiAJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgZWhlYV9tY19saXN0ICptY19lbnRyeTsKQEAgLTIzMyw2ICsyNDQsOCBAQAogCWludCBpID0gMDsKIAlpbnQgazsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZlaGVhX2JjbWNfcmVncy5sb2NrLCBmbGFncyk7CisKIAkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIHJlZ2lzdHJhdGlvbnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpCiAJCWZvciAoayA9IDA7IGsgPCBFSEVBX01BWF9QT1JUUzsgaysrKSB7CkBAIC0yNTAsNyArMjYzLDcgQEAKIAlpZiAobnVtX3JlZ2lzdHJhdGlvbnMpIHsKIAkJYXJyID0ga3phbGxvYyhudW1fcmVnaXN0cmF0aW9ucyAqIHNpemVvZigqYXJyKSwgR0ZQX0FUT01JQyk7CiAJCWlmICghYXJyKQotCQkJcmV0dXJuOyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KKwkJCWdvdG8gb3V0OyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KIAl9IGVsc2UKIAkJZ290byBvdXRfdXBkYXRlOwogCkBAIC0yNjEsNiArMjc0LDkgQEAKIAkJCWlmICghcG9ydCB8fCAocG9ydC0+c3RhdGUgIT0gRUhFQV9QT1JUX1VQKSkKIAkJCQljb250aW51ZTsKIAorCQkJaWYgKG51bV9yZWdpc3RyYXRpb25zID09IDApCisJCQkJZ290byBvdXRfdXBkYXRlOworCiAJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJYXJyW2ldLnBvcnRfaWQgPSBwb3J0LT5sb2dpY2FsX3BvcnRfaWQ7CiAJCQlhcnJbaV0ucmVnX3R5cGUgPSBFSEVBX0JDTUNfQlJPQURDQVNUIHwKQEAgLTI3Miw5ICsyODgsMTMgQEAKIAkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19CUk9BRENBU1QgfAogCQkJCQkgIEVIRUFfQkNNQ19WTEFOSURfQUxMOwogCQkJYXJyW2krK10ubWFjYWRkciA9IHBvcnQtPm1hY19hZGRyOworCQkJbnVtX3JlZ2lzdHJhdGlvbnMgLT0gMjsKIAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtY19lbnRyeSwKIAkJCQkJICAgICZwb3J0LT5tY19saXN0LT5saXN0LCBsaXN0KSB7CisJCQkJaWYgKG51bV9yZWdpc3RyYXRpb25zID09IDApCisJCQkJCWdvdG8gb3V0X3VwZGF0ZTsKKwogCQkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CiAJCQkJYXJyW2ldLnBvcnRfaWQgPSBwb3J0LT5sb2dpY2FsX3BvcnRfaWQ7CiAJCQkJYXJyW2ldLnJlZ190eXBlID0gRUhFQV9CQ01DX1NDT1BFX0FMTCB8CkBAIC0yODgsNiArMzA4LDcgQEAKIAkJCQkJCSAgRUhFQV9CQ01DX01VTFRJQ0FTVCB8CiAJCQkJCQkgIEVIRUFfQkNNQ19WTEFOSURfQUxMOwogCQkJCWFycltpKytdLm1hY2FkZHIgPSBtY19lbnRyeS0+bWFjYWRkcjsKKwkJCQludW1fcmVnaXN0cmF0aW9ucyAtPSAyOwogCQkJfQogCQl9CiAJfQpAQCAtMjk2LDYgKzMxNyw4IEBACiAJa2ZyZWUoZWhlYV9iY21jX3JlZ3MuYXJyKTsKIAllaGVhX2JjbWNfcmVncy5hcnIgPSBhcnI7CiAJZWhlYV9iY21jX3JlZ3MubnVtX2VudHJpZXMgPSBpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoZWFfYmNtY19yZWdzLmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplaGVhX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTc2Miw4ICsxNzg1LDYgQEAKIAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJLyogRGVyZWdpc3RlciBvbGQgTUFDIGluIHBIWVAgKi8KIAlpZiAocG9ydC0+c3RhdGUgPT0gRUhFQV9QT1JUX1VQKSB7CiAJCXJldCA9IGVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKQEAgLTE3ODQsNyArMTgwNSw2IEBACiAKIG91dF91cHJlZ3M6CiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogb3V0X2ZyZWU6CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CkBAIC0xOTQ2LDggKzE5NjYsNiBAQAogCX0KIAllaGVhX3Byb21pc2N1b3VzKGRldiwgMCk7CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJZWhlYV9hbGxtdWx0aShkZXYsIDEpOwogCQlnb3RvIG91dDsKQEAgLTE5NzcsNyArMTk5NSw2IEBACiAJfQogb3V0OgogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIAlyZXR1cm47CiB9CiAKQEAgLTI0NTgsOCArMjQ3NSw2IEBACiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KIAlyZXQgPSBlaGVhX3BvcnRfcmVzX3NldHVwKHBvcnQsIHBvcnQtPm51bV9kZWZfcXBzLAogCQkJCSAgcG9ydC0+bnVtX2FkZF90eF9xcHMpOwogCWlmIChyZXQpIHsKQEAgLTI0OTYsOCArMjUxMSw2IEBACiAJCX0KIAl9CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX1JFR19CQ01DKTsKIAlpZiAocmV0KSB7CiAJCXJldCA9IC1FSU87CkBAIC0yNTE5LDEwICsyNTMyLDcgQEAKIAkJZWhlYV9pbmZvKCJGYWlsZWQgc3RhcnRpbmcgJXMuIHJldD0laSIsIGRldi0+bmFtZSwgcmV0KTsKIAogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTcyLDkgKzI1ODIsNiBAQAogCWlmIChwb3J0LT5zdGF0ZSA9PSBFSEVBX1BPUlRfRE9XTikKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCWVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOwogCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKIApAQCAtMjU4Myw3ICsyNTkwLDYgQEAKIAlwb3J0LT5zdGF0ZSA9IEVIRUFfUE9SVF9ET1dOOwogCiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCiAJcmV0ID0gZWhlYV9jbGVhbl9hbGxfcG9ydHJlcyhwb3J0KTsKIAlpZiAocmV0KQpAQCAtMjU5MSw3ICsyNTk3LDYgQEAKIAkJCSAgZGV2LT5uYW1lLCByZXQpOwogCiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMzNjgsNyArMzM3Myw2IEBACiAJCWVoZWFfZXJyb3IoIkludmFsaWQgaWJtZWJ1cyBkZXZpY2UgcHJvYmVkIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAKIAlhZGFwdGVyID0ga3phbGxvYyhzaXplb2YoKmFkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXIpIHsKQEAgLTM0NTMsNyArMzQ1Nyw3IEBACiAKIG91dDoKIAllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7Ci0JbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDcyLDggKzM0NzYsNiBAQAogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKLQogCWlibWVidXNfZnJlZV9pcnEoYWRhcHRlci0+bmVxLT5hdHRyLmlzdDEsIGFkYXB0ZXIpOwogCXRhc2tsZXRfa2lsbCgmYWRhcHRlci0+bmVxX3Rhc2tsZXQpOwogCkBAIC0zNDgzLDcgKzM0ODUsNiBAQAogCWtmcmVlKGFkYXB0ZXIpOwogCiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTE3LDEyICszNTE4LDE0IEBACiAJCS8qIFJlYWRkIGNhbmNlbGVkIG1lbW9yeSBibG9jayAqLwogCWNhc2UgTUVNX09OTElORToKIAkJZWhlYV9pbmZvKCJtZW1vcnkgaXMgZ29pbmcgb25saW5lIik7CisJCXNldF9iaXQoX19FSEVBX1NUT1BfWEZFUiwgJmVoZWFfZHJpdmVyX2ZsYWdzKTsKIAkJaWYgKGVoZWFfYWRkX3NlY3RfYm1hcChhcmctPnN0YXJ0X3BmbiwgYXJnLT5ucl9wYWdlcykpCiAJCQlyZXR1cm4gTk9USUZZX0JBRDsKIAkJZWhlYV9yZXJlZ19tcnMoTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgTUVNX0dPSU5HX09GRkxJTkU6CiAJCWVoZWFfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9mZmxpbmUiKTsKKwkJc2V0X2JpdChfX0VIRUFfU1RPUF9YRkVSLCAmZWhlYV9kcml2ZXJfZmxhZ3MpOwogCQlpZiAoZWhlYV9yZW1fc2VjdF9ibWFwKGFyZy0+c3RhcnRfcGZuLCBhcmctPm5yX3BhZ2VzKSkKIAkJCXJldHVybiBOT1RJRllfQkFEOwogCQllaGVhX3JlcmVnX21ycyhOVUxMKTsKQEAgLTM1MzAsNiArMzUzMyw5IEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCisJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOworCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXFsLmMgYi9kcml2ZXJzL25ldC9lcWwuYwppbmRleCA0MDEyNTY5Li41MWVhZDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcWwuYworKysgYi9kcml2ZXJzL25ldC9lcWwuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJYWRkX3RpbWVyKCZlcWwtPnRpbWVyKTsKIH0KIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGNvbnN0ID0KIAkiRXF1YWxpemVyMjAwMjogU2ltb24gSmFuZXMgKHNpbW9uQG5jbS5jb20pIGFuZCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pXG4iOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVxbF9uZXRkZXZfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVhbG54LmMgYi9kcml2ZXJzL25ldC9mZWFsbnguYwppbmRleCBkYWY3MjcyYy4uODkxYmUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVhbG54LmMKKysrIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKQEAgLTkzLDggKzkzLDggQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIlxuIjsKIAogCiAvKiBUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byB1c2UgUENJIG1lbW9yeSBzcGFjZSwgaG93ZXZlciBzb21lIHg4NiBzeXN0ZW1zCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuYyBiL2RyaXZlcnMvbmV0L2ZlYy5jCmluZGV4IGZlMjY1MDIuLmE1MTVhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5jCkBAIC01NywzNiArNTcsMTEgQEAKICNkZWZpbmUgRkVDX0FMSUdOTUVOVAkweDMKICNlbmRpZgogCi0jaWYgZGVmaW5lZCBDT05GSUdfTTUyNzIgfHwgZGVmaW5lZCBDT05GSUdfTTUyN3ggfHwgZGVmaW5lZCBDT05GSUdfTTUyM3ggXAotCXx8IGRlZmluZWQgQ09ORklHX001Mjh4IHx8IGRlZmluZWQgQ09ORklHX001MzJ4IHx8IGRlZmluZWQgQ09ORklHX001MjB4Ci0jZGVmaW5lIEZFQ19MRUdBQ1kKIC8qCiAgKiBEZWZpbmUgdGhlIGZpeGVkIGFkZHJlc3Mgb2YgdGhlIEZFQyBoYXJkd2FyZS4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQogI2RlZmluZSBIQVZFX21paV9saW5rX2ludGVycnVwdAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GRUMyKQotI2RlZmluZQlGRUNfTUFYX1BPUlRTCTIKLSNlbHNlCi0jZGVmaW5lCUZFQ19NQVhfUE9SVFMJMQotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmVjX2h3W10gPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfTTUyNzIpCi0JKE1DRl9NQkFSICsgMHg4NDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyN3gpCi0JKE1DRl9NQkFSICsgMHgxMDAwKSwKLQkoTUNGX01CQVIgKyAweDE4MDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KQotCShNQ0ZfTUJBUiArIDB4MTAwMCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIweCkKLQkoTUNGX01CQVIrMHgzMDAwMCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTMyeCkKLQkoTUNGX01CQVIrMHhmYzAzMDAwMCksCi0jZW5kaWYKLX07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyCWZlY19tYWNfZGVmYXVsdFtdID0gewogCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0xMDksOCArODQsNyBAQAogI2Vsc2UKICNkZWZpbmUJRkVDX0ZMQVNITUFDCTAKICNlbmRpZgotCi0jZW5kaWYgLyogRkVDX0xFR0FDWSAqLworI2VuZGlmIC8qIENPTkZJR19NNTI3MiAqLwogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBzb21lIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBkaWZmZXJlbnQgUEhZcwogKi8KQEAgLTEyNDIsNTggKzEyMTYsMzIgQEAKICNpZmRlZiBIQVZFX21paV9saW5rX2ludGVycnVwdAogc3RhdGljIGlycXJldHVybl90CiBtaWlfbGlua19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqIGRldl9pZCk7Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQogLyoKLSAqCUNvZGUgc3BlY2lmaWMgdG8gQ29sZGZpcmUgNTI3MiBzZXR1cC4KKyAqCVRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIE1JSSBpbnRlcnJ1cHQgc2V0dXAgb2YgdGhlIE01MjcyRVZCLgogICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X21paV9pbnRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKHJlcXVlc3RfaXJxKDY2LCBtaWlfbGlua19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJmZWMoTUlJKSIsIGRldikgIT0gMCkKKwkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSBmZWMoTUlJKSBJUlEoNjYpIVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppY3JwOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlc2MgewotCQljaGFyICpuYW1lOwotCQl1bnNpZ25lZCBzaG9ydCBpcnE7Ci0JCWlycV9oYW5kbGVyX3QgaGFuZGxlcjsKLQl9ICppZHAsIGlkW10gPSB7Ci0JCXsgImZlYyhSWCkiLCA4NiwgZmVjX2VuZXRfaW50ZXJydXB0IH0sCi0JCXsgImZlYyhUWCkiLCA4NywgZmVjX2VuZXRfaW50ZXJydXB0IH0sCi0JCXsgImZlYyhPVEhFUikiLCA4OCwgZmVjX2VuZXRfaW50ZXJydXB0IH0sCi0JCXsgImZlYyhNSUkpIiwgNjYsIG1paV9saW5rX2ludGVycnVwdCB9LAotCQl7IE5VTEwgfSwKLQl9OworCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7CisJKmljcnAgPSAweDA4MDAwMDAwOworfQogCi0JLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwotCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGlkcC0+aXJxLCBpZHAtPmhhbmRsZXIsIElSUUZfRElTQUJMRUQsIGlkcC0+bmFtZSwgZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBpZHAtPmlycSk7Ci0JfQotCi0JLyogVW5tYXNrIGludGVycnVwdCBhdCBDb2xkRmlyZSA1MjcyIFNJTSAqLwotCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMyk7Ci0JKmljcnAgPSAweDAwMDAwZGRkOworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaWNycDsKKwkvKiBBY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCiAJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKIAkqaWNycCA9IDB4MGQwMDAwMDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqIFNlZSA1MjcyIG1hbnVhbCBzZWN0aW9uIDExLjUuODogTVNDUgotCSAqLwotCWZlcC0+cGh5X3NwZWVkID0gKCgoKE1DRl9DTEsgLyA0KSAvICgyNTAwMDAwIC8gMTApKSArIDUpIC8gMTApICogMjsKLQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7Ci0KLQlmZWNfcmVzdGFydChkZXYsIDApOwotfQotCisjaWZkZWYgQ09ORklHX001MjcyCiBzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMzI2LDQwMiArMTI3NCw2IEBACiAJaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCiAJCSBkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKIH0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0JaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKLQkqaWNycCA9IDB4MDgwMDAwMDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0JLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCAqLwotCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7Ci0JKmljcnAgPSAweDBkMDAwMDAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpCi0KLS8qCi0gKglDb2RlIHNwZWNpZmljIHRvIENvbGRmaXJlIDUyMzAvNTIzMS81MjMyLzUyMzQvNTIzNSwKLSAqCXRoZSA1MjcwLzUyNzEvNTI3NC81Mjc1IGFuZCA1MjgwLzUyODIgc2V0dXBzLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlpbnQgYjsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkJeyAiZmVjKFRYRikiLCAyMyB9LAotCQl7ICJmZWMoUlhGKSIsIDI3IH0sCi0JCXsgImZlYyhNSUkpIiwgMjkgfSwKLQkJeyBOVUxMIH0sCi0JfTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JYiA9IChmZXAtPmluZGV4KSA/IDEyOCA6IDY0OwotCi0JLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwotCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGIraWRwLT5pcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLCBkZXYpICE9IDApCi0JCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLCBpZHAtPm5hbWUsIGIraWRwLT5pcnEpOwotCX0KLQotCS8qIFVubWFzayBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIDUyODAvNTI4MiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCXsKLQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKmljcnA7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICppbXJwOwotCQlpbnQgaSwgaWxpcDsKLQotCQliID0gKGZlcC0+aW5kZXgpID8gTUNGSUNNX0lOVEMxIDogTUNGSUNNX0lOVEMwOwotCQlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKE1DRl9JUFNCQVIgKyBiICsKLQkJCU1DRklOVENfSUNSMCk7Ci0JCWZvciAoaSA9IDIzLCBpbGlwID0gMHgyODsgKGkgPCAzNik7IGkrKykKLQkJCWljcnBbaV0gPSBpbGlwLS07Ci0KLQkJaW1ycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgYiArCi0JCQlNQ0ZJTlRDX0lNUkgpOwotCQkqaW1ycCAmPSB+MHgwMDAwMDAwZjsKLQkJaW1ycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgYiArCi0JCQlNQ0ZJTlRDX0lNUkwpOwotCQkqaW1ycCAmPSB+MHhmZjgwMDAwMTsKLQl9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NNTI4eCkKLQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBNSUkgbGluZXMgKi8KLQl7Ci0JCXZvbGF0aWxlIHUxNiAqZ3Bpb19wYXNwYXI7Ci0JCXZvbGF0aWxlIHU4ICpncGlvX3BlaGxwYXI7Ci0KLQkJZ3Bpb19wYXNwYXIgPSAodm9sYXRpbGUgdTE2ICopIChNQ0ZfSVBTQkFSICsgMHgxMDAwNTYpOwotCQlncGlvX3BlaGxwYXIgPSAodm9sYXRpbGUgdTE2ICopIChNQ0ZfSVBTQkFSICsgMHgxMDAwNTgpOwotCQkqZ3Bpb19wYXNwYXIgfD0gMHgwZjAwOwotCQkqZ3Bpb19wZWhscGFyID0gMHhjMDsKLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX001Mjd4KQotCS8qIFNldCB1cCBncGlvIG91dHB1dHMgZm9yIE1JSSBsaW5lcyAqLwotCXsKLQkJdm9sYXRpbGUgdTggKmdwaW9fcGFyX2ZlYzsKLQkJdm9sYXRpbGUgdTE2ICpncGlvX3Bhcl9mZWNpMmM7Ci0KLQkJZ3Bpb19wYXJfZmVjaTJjID0gKHZvbGF0aWxlIHUxNiAqKShNQ0ZfSVBTQkFSICsgMHgxMDAwODIpOwotCQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBGRUMwIE1JSSBsaW5lcyAqLwotCQlncGlvX3Bhcl9mZWMgPSAodm9sYXRpbGUgdTggKikoTUNGX0lQU0JBUiArIDB4MTAwMDc4KTsKLQotCQkqZ3Bpb19wYXJfZmVjaTJjIHw9IDB4MGYwMDsKLQkJKmdwaW9fcGFyX2ZlYyB8PSAweGMwOwotCi0jaWYgZGVmaW5lZChDT05GSUdfRkVDMikKLQkJLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgRkVDMSBNSUkgbGluZXMgKi8KLQkJZ3Bpb19wYXJfZmVjID0gKHZvbGF0aWxlIHU4ICopKE1DRl9JUFNCQVIgKyAweDEwMDA3OSk7Ci0KLQkJKmdwaW9fcGFyX2ZlY2kyYyB8PSAweDAwYTA7Ci0JCSpncGlvX3Bhcl9mZWMgfD0gMHhjMDsKLSNlbmRpZiAvKiBDT05GSUdfRkVDMiAqLwotCX0KLSNlbmRpZiAvKiBDT05GSUdfTTUyN3ggKi8KLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwotCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKLQotCS8qCi0JICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICogU2VlIDUyODIgbWFudWFsIHNlY3Rpb24gMTcuNS40Ljc6IE1TQ1IKLQkgKi8KLQlmZXAtPnBoeV9zcGVlZCA9ICgoKChNQ0ZfQ0xLIC8gMikgLyAoMjUwMDAwMCAvIDEwKSkgKyA1KSAvIDEwKSAqIDI7Ci0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOwotCi0JZmVjX3Jlc3RhcnQoZGV2LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCXVuc2lnbmVkIGNoYXIgKmlhcCwgdG1wYWRkcltFVEhfQUxFTl07Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0KLQlpZiAoRkVDX0ZMQVNITUFDKSB7Ci0JCS8qCi0JCSAqIEdldCBNQUMgYWRkcmVzcyBmcm9tIEZMQVNILgotCQkgKiBJZiBpdCBpcyBhbGwgMSdzIG9yIDAncywgdXNlIHRoZSBkZWZhdWx0LgotCQkgKi8KLQkJaWFwID0gRkVDX0ZMQVNITUFDOwotCQlpZiAoKGlhcFswXSA9PSAwKSAmJiAoaWFwWzFdID09IDApICYmIChpYXBbMl0gPT0gMCkgJiYKLQkJICAgIChpYXBbM10gPT0gMCkgJiYgKGlhcFs0XSA9PSAwKSAmJiAoaWFwWzVdID09IDApKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCQlpZiAoKGlhcFswXSA9PSAweGZmKSAmJiAoaWFwWzFdID09IDB4ZmYpICYmIChpYXBbMl0gPT0gMHhmZikgJiYKLQkJICAgIChpYXBbM10gPT0gMHhmZikgJiYgKGlhcFs0XSA9PSAweGZmKSAmJiAoaWFwWzVdID09IDB4ZmYpKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCX0gZWxzZSB7Ci0JCSooKHVuc2lnbmVkIGxvbmcgKikgJnRtcGFkZHJbMF0pID0gZmVjcC0+ZmVjX2FkZHJfbG93OwotCQkqKCh1bnNpZ25lZCBzaG9ydCAqKSAmdG1wYWRkcls0XSkgPSAoZmVjcC0+ZmVjX2FkZHJfaGlnaCA+PiAxNik7Ci0JCWlhcCA9ICZ0bXBhZGRyWzBdOwotCX0KLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBpYXAsIEVUSF9BTEVOKTsKLQotCS8qIEFkanVzdCBNQUMgaWYgdXNpbmcgZGVmYXVsdCBNQUMgYWRkcmVzcyAqLwotCWlmIChpYXAgPT0gZmVjX21hY19kZWZhdWx0KQotCQlkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIweCkKLQotLyoKLSAqCUNvZGUgc3BlY2lmaWMgdG8gQ29sZGZpcmUgNTIweAotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlpbnQgYjsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkJeyAiZmVjKFRYRikiLCAyMyB9LAotCQl7ICJmZWMoUlhGKSIsIDI3IH0sCi0JCXsgImZlYyhNSUkpIiwgMjkgfSwKLQkJeyBOVUxMIH0sCi0JfTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JYiA9IDY0ICsgMTM7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCXsKLQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKmljcnA7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICppbXJwOwotCi0JCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArCi0JCQlNQ0ZJTlRDX0lDUjApOwotCQlmb3IgKGIgPSAzNjsgKGIgPCA0OSk7IGIrKykKLQkJCWljcnBbYl0gPSAweDA0OwotCQlpbXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKwotCQkJTUNGSU5UQ19JTVJIKTsKLQkJKmltcnAgJj0gfjB4MDAwMUZGRjA7Ci0JfQotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQykgfD0gMHhmMDsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpIHw9IDB4MGY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqIFNlZSA1MjgyIG1hbnVhbCBzZWN0aW9uIDE3LjUuNC43OiBNU0NSCi0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoKCgoTUNGX0NMSyAvIDIpIC8gKDI1MDAwMDAgLyAxMCkpICsgNSkgLyAxMCkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQl1bnNpZ25lZCBjaGFyICppYXAsIHRtcGFkZHJbRVRIX0FMRU5dOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JaWYgKEZFQ19GTEFTSE1BQykgewotCQkvKgotCQkgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBGTEFTSC4KLQkJICogSWYgaXQgaXMgYWxsIDEncyBvciAwJ3MsIHVzZSB0aGUgZGVmYXVsdC4KLQkJICovCi0JCWlhcCA9IEZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgIChpYXBbM10gPT0gMCkgJiYgKGlhcFs0XSA9PSAwKSAmJiAoaWFwWzVdID09IDApKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCQlpZiAoKGlhcFswXSA9PSAweGZmKSAmJiAoaWFwWzFdID09IDB4ZmYpICYmIChpYXBbMl0gPT0gMHhmZikgJiYKLQkJICAgKGlhcFszXSA9PSAweGZmKSAmJiAoaWFwWzRdID09IDB4ZmYpICYmIChpYXBbNV0gPT0gMHhmZikpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JfSBlbHNlIHsKLQkJKigodW5zaWduZWQgbG9uZyAqKSAmdG1wYWRkclswXSkgPSBmZWNwLT5mZWNfYWRkcl9sb3c7Ci0JCSooKHVuc2lnbmVkIHNob3J0ICopICZ0bXBhZGRyWzRdKSA9IChmZWNwLT5mZWNfYWRkcl9oaWdoID4+IDE2KTsKLQkJaWFwID0gJnRtcGFkZHJbMF07Ci0JfQotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGlhcCwgRVRIX0FMRU4pOwotCi0JLyogQWRqdXN0IE1BQyBpZiB1c2luZyBkZWZhdWx0IE1BQyBhZGRyZXNzICovCi0JaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCi0JCWRldi0+ZGV2X2FkZHJbRVRIX0FMRU4tMV0gPSBmZWNfbWFjX2RlZmF1bHRbRVRIX0FMRU4tMV0gKyBmZXAtPmluZGV4OwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX001MzJ4KQotLyoKLSAqIENvZGUgc3BlY2lmaWMgZm9yIE01MzJ4Ci0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfaW50cnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOwotCWludCBiOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlc2MgewotCQljaGFyICpuYW1lOwotCQl1bnNpZ25lZCBzaG9ydCBpcnE7Ci0JfSAqaWRwLCBpZFtdID0gewotCSAgICB7ICJmZWMoVFhGKSIsIDM2IH0sCi0JICAgIHsgImZlYyhSWEYpIiwgNDAgfSwKLQkgICAgeyAiZmVjKE1JSSkiLCA0MiB9LAotCSAgICB7IE5VTEwgfSwKLQl9OwotCi0JZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQliID0gKGZlcC0+aW5kZXgpID8gMTI4IDogNjQ7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwKLQkJCQlpZHAtPm5hbWUsIGIraWRwLT5pcnEpOwotCX0KLQotCS8qIFVubWFzayBpbnRlcnJ1cHRzICovCi0JTUNGX0lOVEMwX0lDUjM2ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1IzNyA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSMzggPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjM5ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0MCA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDEgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQyID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0MyA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDQgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ1ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0NiA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDcgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ4ID0gMHgyOwotCi0JTUNGX0lOVEMwX0lNUkggJj0gfigKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM2IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM3IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM4IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM5IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQwIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQxIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQyIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQzIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ0IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ1IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ2IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ3IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ4ICk7Ci0KLQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBNSUkgbGluZXMgKi8KLQlNQ0ZfR1BJT19QQVJfRkVDSTJDIHw9ICgwIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURDX0VNREMgfAotCQlNQ0ZfR1BJT19QQVJfRkVDSTJDX1BBUl9NRElPX0VNRElPKTsKLQlNQ0ZfR1BJT19QQVJfRkVDID0gKDAgfAotCQlNQ0ZfR1BJT19QQVJfRkVDX1BBUl9GRUNfN1dfRkVDIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDX01JSV9GRUMpOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19zZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCi17Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0JZmVjcC0+ZmVjX3JfY250cmwgPSBPUFRfRlJBTUVfU0laRSB8IDB4MDQ7Ci0JZmVjcC0+ZmVjX3hfY250cmwgPSAweDAwOwotCi0JLyoKLQkgKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKLQkgKi8KLQlmZXAtPnBoeV9zcGVlZCA9IChNQ0ZfQ0xLIC8gMykgLyAoMjUwMDAwMCAqIDIgKSAqIDI7Ci0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOwotCi0JZmVjX3Jlc3RhcnQoZGV2LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCXVuc2lnbmVkIGNoYXIgKmlhcCwgdG1wYWRkcltFVEhfQUxFTl07Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0KLQlpZiAoRkVDX0ZMQVNITUFDKSB7Ci0JCS8qCi0JCSAqIEdldCBNQUMgYWRkcmVzcyBmcm9tIEZMQVNILgotCQkgKiBJZiBpdCBpcyBhbGwgMSdzIG9yIDAncywgdXNlIHRoZSBkZWZhdWx0LgotCQkgKi8KLQkJaWFwID0gRkVDX0ZMQVNITUFDOwotCQlpZiAoKGlhcFswXSA9PSAwKSAmJiAoaWFwWzFdID09IDApICYmIChpYXBbMl0gPT0gMCkgJiYKLQkJICAgIChpYXBbM10gPT0gMCkgJiYgKGlhcFs0XSA9PSAwKSAmJiAoaWFwWzVdID09IDApKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCQlpZiAoKGlhcFswXSA9PSAweGZmKSAmJiAoaWFwWzFdID09IDB4ZmYpICYmIChpYXBbMl0gPT0gMHhmZikgJiYKLQkJICAgIChpYXBbM10gPT0gMHhmZikgJiYgKGlhcFs0XSA9PSAweGZmKSAmJiAoaWFwWzVdID09IDB4ZmYpKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCX0gZWxzZSB7Ci0JCSooKHVuc2lnbmVkIGxvbmcgKikgJnRtcGFkZHJbMF0pID0gZmVjcC0+ZmVjX2FkZHJfbG93OwotCQkqKCh1bnNpZ25lZCBzaG9ydCAqKSAmdG1wYWRkcls0XSkgPSAoZmVjcC0+ZmVjX2FkZHJfaGlnaCA+PiAxNik7Ci0JCWlhcCA9ICZ0bXBhZGRyWzBdOwotCX0KLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBpYXAsIEVUSF9BTEVOKTsKLQotCS8qIEFkanVzdCBNQUMgaWYgdXNpbmcgZGVmYXVsdCBNQUMgYWRkcmVzcyAqLwotCWlmIChpYXAgPT0gZmVjX21hY19kZWZhdWx0KQotCQlkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLX0KLQogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE5MjcsNyArMTQ3OSw3IEBACiAJCXByaW50aygiRkVDOiBObyBQSFkgZGV2aWNlIGZvdW5kLlxuIik7CiAJCS8qIERpc2FibGUgZXh0ZXJuYWwgTUlJIGludGVyZmFjZSAqLwogCQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQgPSAwOwotI2lmZGVmIEZSRUNfTEVHQUNZCisjaWZkZWYgSEFWRV9taWlfbGlua19pbnRlcnJ1cHQKIAkJZmVjX2Rpc2FibGVfcGh5X2ludHIoKTsKICNlbmRpZgogCX0KQEAgLTIxNTEsNyArMTcwMyw3IEBACiAJdWRlbGF5KDEwKTsKIAogCS8qIFNldCB0aGUgRXRoZXJuZXQgYWRkcmVzcyAqLwotI2lmZGVmIEZFQ19MRUdBQ1kKKyNpZmRlZiBDT05GSUdfTTUyNzIKIAlmZWNfZ2V0X21hYyhkZXYpOwogI2Vsc2UKIAl7CkBAIC0yMjM1LDExICsxNzg3LDggQEAKIAlmZWNwLT5mZWNfeF9kZXNfc3RhcnQgPSAodW5zaWduZWQgbG9uZylmZXAtPmJkX2RtYSArIHNpemVvZihjYmRfdCkKIAkJCQkqIFJYX1JJTkdfU0laRTsKIAotI2lmZGVmIEZFQ19MRUdBQ1kKLQkvKiBJbnN0YWxsIG91ciBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgdmFyaWVzIGRlcGVuZGluZyBvbgotCSAqIHRoZSBhcmNoaXRlY3R1cmUuCi0JKi8KLQlmZWNfcmVxdWVzdF9pbnRycyhkZXYpOworI2lmZGVmIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CisJZmVjX3JlcXVlc3RfbWlpX2ludHIoZGV2KTsKICNlbmRpZgogCiAJZmVjcC0+ZmVjX2dycF9oYXNoX3RhYmxlX2hpZ2ggPSAwOwpAQCAtMjI2NSw5ICsxODE0LDYgQEAKIAltaWlfZnJlZSA9IG1paV9jbWRzOwogCiAJLyogc2V0dXAgTUlJIGludGVyZmFjZSAqLwotI2lmZGVmIEZFQ19MRUdBQ1kKLQlmZWNfc2V0X21paShkZXYsIGZlcCk7Ci0jZWxzZQogCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwogCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKIApAQCAtMjI3OCw3ICsxODI0LDYgQEAKIAkJCQkJLyAyNTAwMDAwKSAvIDIpICYgMHgzRikgPDwgMTsKIAlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7CiAJZmVjX3Jlc3RhcnQoZGV2LCAwKTsKLSNlbmRpZgogCiAJLyogQ2xlYXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJZmVjcC0+ZmVjX2lldmVudCA9IDB4ZmZjMDAwMDA7CkBAIC0yNDQyLDM2ICsxOTg3LDYgQEAKIAlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7CiB9CiAKLSNpZmRlZiBGRUNfTEVHQUNZCi1zdGF0aWMgaW50IF9faW5pdCBmZWNfZW5ldF9tb2R1bGVfaW5pdCh2b2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JaW50IGksIGVycjsKLQotCXByaW50aygiRkVDIEVORVQgVmVyc2lvbiAwLjJcbiIpOwotCi0JZm9yIChpID0gMDsgKGkgPCBGRUNfTUFYX1BPUlRTKTsgaSsrKSB7Ci0JCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSkpOwotCQlpZiAoIWRldikKLQkJCXJldHVybiAtRU5PTUVNOwotCQlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWZlY19od1tpXTsKLQkJZXJyID0gZmVjX2VuZXRfaW5pdChkZXYsIGkpOwotCQlpZiAoZXJyKSB7Ci0JCQlmcmVlX25ldGRldihkZXYpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKLQkJCS8qIFhYWDogbWlzc2luZyBjbGVhbnVwIGhlcmUgKi8KLQkJCWZyZWVfbmV0ZGV2KGRldik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCXByaW50aygiJXM6IGV0aGVybmV0ICVwTVxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0yNjMyLDkgKzIxNDcsNiBAQAogfQogCiBtb2R1bGVfZXhpdChmZWNfZW5ldF9jbGVhbnVwKTsKLQotI2VuZGlmIC8qIEZFQ19MRUdBQ1kgKi8KLQogbW9kdWxlX2luaXQoZmVjX2VuZXRfbW9kdWxlX2luaXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDAyMTMwOGYuLmE4NThjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC42MyIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjY0IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTg3LDggKzg3LDggQEAKICNkZWZpbmUgREVWX0hBU19NU0lfWCAgICAgICAgICAgICAgMHgwMDAwODAgIC8qIGRldmljZSBzdXBwb3J0cyBNU0ktWCAqLwogI2RlZmluZSBERVZfSEFTX1BPV0VSX0NOVFJMICAgICAgICAweDAwMDEwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHBvd2VyIHNhdmluZ3MgKi8KICNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YxICAgICAgMHgwMDAyMDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMSAqLwotI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjIgICAgICAweDAwMDQwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAyICovCi0jZGVmaW5lIERFVl9IQVNfU1RBVElTVElDU19WMyAgICAgIDB4MDAwODAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgaHcgc3RhdGlzdGljcyB2ZXJzaW9uIDMgKi8KKyNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YyICAgICAgMHgwMDA2MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMiAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjMgICAgICAweDAwMGUwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAzICovCiAjZGVmaW5lIERFVl9IQVNfVEVTVF9FWFRFTkRFRCAgICAgIDB4MDAxMDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgZXh0ZW5kZWQgZGlhZ25vc3RpYyB0ZXN0ICovCiAjZGVmaW5lIERFVl9IQVNfTUdNVF9VTklUICAgICAgICAgIDB4MDAyMDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgbWFuYWdlbWVudCB1bml0ICovCiAjZGVmaW5lIERFVl9IQVNfQ09SUkVDVF9NQUNBRERSICAgIDB4MDA0MDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgY29ycmVjdCBtYWMgYWRkcmVzcyBvcmRlciAqLwpAQCAtMTIwLDEwICsxMjAsNiBAQAogI2RlZmluZSBOVlJFR19JUlFfUlhfQUxMCQkoTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1JYX0ZPUkNFRCkKICNkZWZpbmUgTlZSRUdfSVJRX09USEVSCQkJKE5WUkVHX0lSUV9USU1FUnxOVlJFR19JUlFfTElOS3xOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikKIAotI2RlZmluZSBOVlJFR19JUlFfVU5LTk9XTgkofihOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRnxOVlJFR19JUlFfVFhfRVJSfCBcCi0JCQkJCU5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1JYX0ZPUkNFRHwgXAotCQkJCQlOVlJFR19JUlFfVFhfRk9SQ0VEfE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkKLQogCU52UmVnVW5rbm93blNldHVwUmVnNiA9IDB4MDA4LAogI2RlZmluZSBOVlJFR19VTktTRVRVUDZfVkFMCQkzCiAKQEAgLTEzMiw3ICsxMjgsNyBAQAogICogTlZSRUdfUE9MTF9ERUZBVUxUPTk3IHdvdWxkIHJlc3VsdCBpbiBhbiBpbnRlcnZhbCBsZW5ndGggb2YgMSBtcwogICovCiAJTnZSZWdQb2xsaW5nSW50ZXJ2YWwgPSAweDAwYywKLSNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJOTcwIC8qIGJhY2t1cCB0eCBjbGVhbnVwIGlmIGxvb3AgbWF4IHJlYWNoZWQgKi8KKyNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJNjU1MzUgLyogYmFja3VwIHR4IGNsZWFudXAgaWYgbG9vcCBtYXggcmVhY2hlZCAqLwogI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfQ1BVCTEzCiAJTnZSZWdNU0lNYXAwID0gMHgwMjAsCiAJTnZSZWdNU0lNYXAxID0gMHgwMjQsCkBAIC00NjcsNyArNDYzLDcgQEAKIC8qIEdlbmVyYWwgZHJpdmVyIGRlZmF1bHRzICovCiAjZGVmaW5lIE5WX1dBVENIRE9HX1RJTUVPCSg1KkhaKQogCi0jZGVmaW5lIFJYX1JJTkdfREVGQVVMVAkJMTI4CisjZGVmaW5lIFJYX1JJTkdfREVGQVVMVAkJNTEyCiAjZGVmaW5lIFRYX1JJTkdfREVGQVVMVAkJMjU2CiAjZGVmaW5lIFJYX1JJTkdfTUlOCQkxMjgKICNkZWZpbmUgVFhfUklOR19NSU4JCTY0CkBAIC01OTcsNiArNTkzLDkgQEAKIAogI2RlZmluZSBOVl9UWF9MSU1JVF9DT1VOVCAgICAgMTYKIAorI2RlZmluZSBOVl9EWU5BTUlDX1RIUkVTSE9MRCAgICAgICAgNAorI2RlZmluZSBOVl9EWU5BTUlDX01BWF9RVUlFVF9DT1VOVCAgMjA0OAorCiAvKiBzdGF0aXN0aWNzICovCiBzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgewogCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOwpAQCAtNzU0LDExICs3NTMsMTMgQEAKIAl1MTYgZ2lnYWJpdDsKIAlpbnQgaW50cl90ZXN0OwogCWludCByZWNvdmVyX2Vycm9yOworCWludCBxdWlldF9jb3VudDsKIAogCS8qIEdlbmVyYWwgZGF0YTogUk8gZmllbGRzICovCiAJZG1hX2FkZHJfdCByaW5nX2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJdTMyIG9yaWdfbWFjWzJdOworCXUzMiBldmVudHM7CiAJdTMyIGlycW1hc2s7CiAJdTMyIGRlc2NfdmVyOwogCXUzMiB0eHJ4Y3RsX2JpdHM7CkBAIC04MzUsNyArODM2LDcgQEAKICAqIE1heGltdW0gbnVtYmVyIG9mIGxvb3BzIHVudGlsIHdlIGFzc3VtZSB0aGF0IGEgYml0IGluIHRoZSBpcnEgbWFzawogICogaXMgc3R1Y2suIE92ZXJyaWRhYmxlIHdpdGggbW9kdWxlIHBhcmFtLgogICovCi1zdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDE1Oworc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSA0OwogCiAvKgogICogT3B0aW1pemF0aW9uIGNhbiBiZSBlaXRoZXIgdGhyb3VwdXQgbW9kZSBvciBjcHUgbW9kZQpAQCAtODQ1LDkgKzg0NiwxMCBAQAogICovCiBlbnVtIHsKIAlOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVULAotCU5WX09QVElNSVpBVElPTl9NT0RFX0NQVQorCU5WX09QVElNSVpBVElPTl9NT0RFX0NQVSwKKwlOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDCiB9Owotc3RhdGljIGludCBvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQ7CitzdGF0aWMgaW50IG9wdGltaXphdGlvbl9tb2RlID0gTlZfT1BUSU1JWkFUSU9OX01PREVfRFlOQU1JQzsKIAogLyoKICAqIFBvbGwgaW50ZXJ2YWwgZm9yIHRpbWVyIGlycQpAQCAtOTQwLDcgKzk0Miw3IEBACiAJCWRlbGF5bWF4IC09IGRlbGF5OwogCQlpZiAoZGVsYXltYXggPCAwKSB7CiAJCQlpZiAobXNnKQotCQkJCXByaW50ayhtc2cpOworCQkJCXByaW50aygiJXMiLCBtc2cpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IHdoaWxlICgocmVhZGwoYmFzZSArIG9mZnNldCkgJiBtYXNrKSAhPSB0YXJnZXQpOwpAQCAtMTA2OSw2ICsxMDcxLDI0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBudl9uYXBpX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKworCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbnZfbmFwaV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCisJbmFwaV9kaXNhYmxlKCZucC0+bmFwaSk7CisjZW5kaWYKK30KKwogI2RlZmluZSBNSUlfUkVBRAkoLTEpCiAvKiBtaWlfcnc6IHJlYWQvd3JpdGUgYSByZWdpc3RlciBvbiB0aGUgUEhZLgogICoKQEAgLTIzODIsMTQgKzI0MDIsMTYgQEAKICAqCiAgKiBDYWxsZXIgbXVzdCBvd24gbnAtPmxvY2suCiAgKi8KLXN0YXRpYyB2b2lkIG52X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbnZfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgZmxhZ3M7CisJaW50IHR4X3dvcmsgPSAwOwogCXN0cnVjdCByaW5nX2Rlc2MqIG9yaWdfZ2V0X3R4ID0gbnAtPmdldF90eC5vcmlnOwogCiAJd2hpbGUgKChucC0+Z2V0X3R4Lm9yaWcgIT0gbnAtPnB1dF90eC5vcmlnKSAmJgotCSAgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHgub3JpZy0+ZmxhZ2xlbikpICYgTlZfVFhfVkFMSUQpKSB7CisJICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5vcmlnLT5mbGFnbGVuKSkgJiBOVl9UWF9WQUxJRCkgJiYKKwkgICAgICAgKHR4X3dvcmsgPCBsaW1pdCkpIHsKIAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lOiBmbGFncyAweCV4LlxuIiwKIAkJCQkJZGV2LT5uYW1lLCBmbGFncyk7CkBAIC0yNDE1LDYgKzI0MzcsNyBAQAogCQkJCX0KIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKIAkJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJCQl0eF93b3JrKys7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoZmxhZ3MgJiBOVl9UWDJfTEFTVFBBQ0tFVCkgewpAQCAtMjQzMiw2ICsyNDU1LDcgQEAKIAkJCQl9CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQkJbnAtPmdldF90eF9jdHgtPnNrYiA9IE5VTEw7CisJCQkJdHhfd29yaysrOwogCQkJfQogCQl9CiAJCWlmICh1bmxpa2VseShucC0+Z2V0X3R4Lm9yaWcrKyA9PSBucC0+bGFzdF90eC5vcmlnKSkKQEAgLTI0NDMsMTcgKzI0NjcsMTkgQEAKIAkJbnAtPnR4X3N0b3AgPSAwOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQorCXJldHVybiB0eF93b3JrOwogfQogCi1zdGF0aWMgdm9pZCBudl90eF9kb25lX29wdGltaXplZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCitzdGF0aWMgaW50IG52X3R4X2RvbmVfb3B0aW1pemVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBmbGFnczsKKwlpbnQgdHhfd29yayA9IDA7CiAJc3RydWN0IHJpbmdfZGVzY19leCogb3JpZ19nZXRfdHggPSBucC0+Z2V0X3R4LmV4OwogCiAJd2hpbGUgKChucC0+Z2V0X3R4LmV4ICE9IG5wLT5wdXRfdHguZXgpICYmCiAJICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5leC0+ZmxhZ2xlbikpICYgTlZfVFhfVkFMSUQpICYmCi0JICAgICAgIChsaW1pdC0tID4gMCkpIHsKKwkgICAgICAgKHR4X3dvcmsgPCBsaW1pdCkpIHsKIAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lX29wdGltaXplZDogZmxhZ3MgMHgleC5cbiIsCiAJCQkJCWRldi0+bmFtZSwgZmxhZ3MpOwpAQCAtMjQ3Nyw2ICsyNTAzLDcgQEAKIAogCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJCXR4X3dvcmsrKzsKIAogCQkJaWYgKG5wLT50eF9saW1pdCkgewogCQkJCW52X3R4X2ZsaXBfb3duZXJzaGlwKGRldik7CkBAIC0yNDkxLDYgKzI1MTgsNyBAQAogCQlucC0+dHhfc3RvcCA9IDA7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CisJcmV0dXJuIHR4X3dvcms7CiB9CiAKIC8qCkBAIC0yNTYzLDcgKzI1OTEsNyBAQAogCiAJLyogMikgY2hlY2sgdGhhdCB0aGUgcGFja2V0cyB3ZXJlIG5vdCBzZW50IGFscmVhZHk6ICovCiAJaWYgKCFudl9vcHRpbWl6ZWQobnApKQotCQludl90eF9kb25lKGRldik7CisJCW52X3R4X2RvbmUoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKIAllbHNlCiAJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CiAKQEAgLTI5MjQsNiArMjk1Miw3IEBACiAJCSAqIENoYW5naW5nIHRoZSBNVFUgaXMgYSByYXJlIGV2ZW50LCBpdCBzaG91bGRuJ3QgbWF0dGVyLgogCQkgKi8KIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtMjk1Miw2ICsyOTgxLDcgQEAKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzkyLDUwICszNDIyLDcxIEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIGludCBudl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRvdGFsX3dvcmspCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDKSB7CisJCWlmICh0b3RhbF93b3JrID4gTlZfRFlOQU1JQ19USFJFU0hPTEQpIHsKKwkJCS8qIHRyYW5zaXRpb24gdG8gcG9sbCBiYXNlZCBpbnRlcnJ1cHRzICovCisJCQlucC0+cXVpZXRfY291bnQgPSAwOworCQkJaWYgKG5wLT5pcnFtYXNrICE9IE5WUkVHX0lSUU1BU0tfQ1BVKSB7CisJCQkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX0NQVTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChucC0+cXVpZXRfY291bnQgPCBOVl9EWU5BTUlDX01BWF9RVUlFVF9DT1VOVCkgeworCQkJCW5wLT5xdWlldF9jb3VudCsrOworCQkJfSBlbHNlIHsKKwkJCQkvKiByZWFjaGVkIGEgcGVyaW9kIG9mIGxvdyBhY3Rpdml0eSwgc3dpdGNoCisJCQkJICAgdG8gcGVyIHR4L3J4IHBhY2tldCBpbnRlcnJ1cHRzICovCisJCQkJaWYgKG5wLT5pcnFtYXNrICE9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVCkgeworCQkJCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycShpbnQgZm9vLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JdTMyIGV2ZW50czsKLQlpbnQgaTsKKyNpZm5kZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJaW50IHRvdGFsX3dvcmsgPSAwOworCWludCBsb29wX2NvdW50ID0gMDsKKyNlbmRpZgogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycVxuIiwgZGV2LT5uYW1lKTsKIAotCWZvciAoaT0wOyA7IGkrKykgewotCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKLQkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOwotCQl9IGVsc2UgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKLQkJfQotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKLQkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQotCQkJYnJlYWs7CisJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwl9IGVsc2UgeworCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwl9CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIG5wLT5ldmVudHMpOworCWlmICghKG5wLT5ldmVudHMgJiBucC0+aXJxbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKIAotCQludl9tc2lfd29ya2Fyb3VuZChucCk7Ci0KLQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCW52X3R4X2RvbmUoZGV2KTsKLQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwludl9tc2lfd29ya2Fyb3VuZChucCk7CiAKICNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAotCQkJLyogRGlzYWJsZSBmdXJ0aHVyIHJlY2VpdmUgaXJxJ3MgKi8KLQkJCW5wLT5pcnFtYXNrICY9IH5OVlJFR19JUlFfUlhfQUxMOworCS8qIERpc2FibGUgZnVydGh1ciBpcnEncworCSAgIChtc2l4IG5vdCBlbmFibGVkIHdpdGggbmFwaSkgKi8KKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CiAKLQkJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKLQkJCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KICNlbHNlCi0JCWlmIChudl9yeF9wcm9jZXNzKGRldiwgUlhfV09SS19QRVJfTE9PUCkpIHsKKwlkbworCXsKKwkJaW50IHdvcmsgPSAwOworCQlpZiAoKHdvcmsgPSBudl9yeF9wcm9jZXNzKGRldiwgUlhfV09SS19QRVJfTE9PUCkpKSB7CiAJCQlpZiAodW5saWtlbHkobnZfYWxsb2NfcngoZGV2KSkpIHsKIAkJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKQEAgLTM0NDMsNjUgKzM0OTQsNTYgQEAKIAkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQkJfQogCQl9Ci0jZW5kaWYKLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl9saW5rX2lycShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJfQotCQlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSkgewotCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2JhYmx5IFRYIGZhaWwuXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAweCV4LiBQbGVhc2UgcmVwb3J0XG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXBjaV9wdXNoKGJhc2UpOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7Ci0JCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCXdvcmsgKz0gbnZfdHhfZG9uZShkZXYsIFRYX1dPUktfUEVSX0xPT1ApOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCisJCWlmICghd29yaykKIAkJCWJyZWFrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpID4gbWF4X2ludGVycnVwdF93b3JrKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJcGNpX3B1c2goYmFzZSk7CiAKLQkJCWlmICghbnAtPmluX3NodXRkb3duKSB7Ci0JCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOwotCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBtYW55IGl0ZXJhdGlvbnMgKCVkKSBpbiBudl9uaWNfaXJxLlxuIiwgZGV2LT5uYW1lLCBpKTsKLQkJCWJyZWFrOwotCQl9CisJCXRvdGFsX3dvcmsgKz0gd29yazsKIAorCQlsb29wX2NvdW50Kys7CiAJfQorCXdoaWxlIChsb29wX2NvdW50IDwgbWF4X2ludGVycnVwdF93b3JrKTsKKworCWlmIChudl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoZGV2LCB0b3RhbF93b3JrKSkgeworCQkvKiBzZXR1cCBuZXcgaXJxIG1hc2sgKi8KKwkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9CisKKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua19pcnEoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua2NoYW5nZShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCisJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJZWxzZQorCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJcGNpX3B1c2goYmFzZSk7CisKKwkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKKwkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKKwkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJfQorCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCX0KKyNlbmRpZgogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnEgY29tcGxldGVkXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0dXJuIElSUV9SRVRWQUwoaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiAvKioKQEAgLTM1MTQsNDUgKzM1NTYsMzggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCXUzMiBldmVudHM7Ci0JaW50IGk7CisjaWZuZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCWludCB0b3RhbF93b3JrID0gMDsKKwlpbnQgbG9vcF9jb3VudCA9IDA7CisjZW5kaWYKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfb3B0aW1pemVkXG4iLCBkZXYtPm5hbWUpOwogCi0JZm9yIChpPTA7IDsgaSsrKSB7Ci0JCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKLQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKLQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQl9Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOwotCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCi0JCQlicmVhazsKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKKwkJbnAtPmV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCX0gZWxzZSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwkJd3JpdGVsKG5wLT5ldmVudHMsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCX0KKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgbnAtPmV2ZW50cyk7CisJaWYgKCEobnAtPmV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKKwkJcmV0dXJuIElSUV9OT05FOwogCi0JCW52X21zaV93b3JrYXJvdW5kKG5wKTsKLQotCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKLQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwludl9tc2lfd29ya2Fyb3VuZChucCk7CiAKICNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAotCQkJLyogRGlzYWJsZSBmdXJ0aHVyIHJlY2VpdmUgaXJxJ3MgKi8KLQkJCW5wLT5pcnFtYXNrICY9IH5OVlJFR19JUlFfUlhfQUxMOworCS8qIERpc2FibGUgZnVydGh1ciBpcnEncworCSAgIChtc2l4IG5vdCBlbmFibGVkIHdpdGggbmFwaSkgKi8KKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CiAKLQkJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKLQkJCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KICNlbHNlCi0JCWlmIChudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSB7CisJZG8KKwl7CisJCWludCB3b3JrID0gMDsKKwkJaWYgKCh3b3JrID0gbnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQoZGV2LCBSWF9XT1JLX1BFUl9MT09QKSkpIHsKIAkJCWlmICh1bmxpa2VseShudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KSkpIHsKIAkJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKQEAgLTM1NjAsNjYgKzM1OTUsNTcgQEAKIAkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQkJfQogCQl9Ci0jZW5kaWYKLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl9saW5rX2lycShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJfQotCQlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSkgewotCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2JhYmx5IFRYIGZhaWwuXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAweCV4LiBQbGVhc2UgcmVwb3J0XG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXBjaV9wdXNoKGJhc2UpOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7Ci0JCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCXdvcmsgKz0gbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKworCQlpZiAoIXdvcmspCiAJCQlicmVhazsKLQkJfQogCi0JCWlmICh1bmxpa2VseShpID4gbWF4X2ludGVycnVwdF93b3JrKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJcGNpX3B1c2goYmFzZSk7CisJCXRvdGFsX3dvcmsgKz0gd29yazsKIAotCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKLQkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7Ci0JCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnEuXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQorCQlsb29wX2NvdW50Kys7CiAJfQorCXdoaWxlIChsb29wX2NvdW50IDwgbWF4X2ludGVycnVwdF93b3JrKTsKKworCWlmIChudl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoZGV2LCB0b3RhbF93b3JrKSkgeworCQkvKiBzZXR1cCBuZXcgaXJxIG1hc2sgKi8KKwkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9CisKKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua19pcnEoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua2NoYW5nZShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCisJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJZWxzZQorCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJcGNpX3B1c2goYmFzZSk7CisKKwkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKKwkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKKwkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJfQorCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCX0KKworI2VuZGlmCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9vcHRpbWl6ZWQgY29tcGxldGVkXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0dXJuIElSUV9SRVRWQUwoaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV90eChpbnQgZm9vLCB2b2lkICpkYXRhKQpAQCAtMzY0NCwxMCArMzY3MCw2IEBACiAJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgVFhfV09SS19QRVJfTE9PUCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVFhfRVJSKSkpIHsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQogCQlpZiAodW5saWtlbHkoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwogCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KQEAgLTM2NzYsMTMgKzM2OTgsMjIgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbnAtPmRldjsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHBrdHMsIHJldGNvZGU7CisJaW50IHJldGNvZGU7CisJaW50IHR4X3dvcmssIHJ4X3dvcms7CiAKIAlpZiAoIW52X29wdGltaXplZChucCkpIHsKLQkJcGt0cyA9IG52X3J4X3Byb2Nlc3MoZGV2LCBidWRnZXQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJdHhfd29yayA9IG52X3R4X2RvbmUoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCQlyeF93b3JrID0gbnZfcnhfcHJvY2VzcyhkZXYsIGJ1ZGdldCk7CiAJCXJldGNvZGUgPSBudl9hbGxvY19yeChkZXYpOwogCX0gZWxzZSB7Ci0JCXBrdHMgPSBudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIGJ1ZGdldCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOworCQl0eF93b3JrID0gbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCQlyeF93b3JrID0gbnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQoZGV2LCBidWRnZXQpOwogCQlyZXRjb2RlID0gbnZfYWxsb2Nfcnhfb3B0aW1pemVkKGRldik7CiAJfQogCkBAIC0zNjkzLDQ0ICszNzI0LDQyIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKHBrdHMgPCBidWRnZXQpIHsKLQkJLyogcmUtZW5hYmxlIHJlY2VpdmUgaW50ZXJydXB0cyAqLworCW52X2NoYW5nZV9pbnRlcnJ1cHRfbW9kZShkZXYsIHR4X3dvcmsgKyByeF93b3JrKTsKKworCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKLQotCQlucC0+aXJxbWFzayB8PSBOVlJFR19JUlFfUlhfQUxMOwotCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCi0JCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCWVsc2UKLQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0KKwkJbnZfbGlua19pcnEoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JcmV0dXJuIHBrdHM7CisJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJbnZfbGlua2NoYW5nZShkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7CisJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOworCQlyZXR1cm4gcnhfd29yazsKKwl9CisKKwlpZiAocnhfd29yayA8IGJ1ZGdldCkgeworCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cworCQkgICAobXNpeCBub3QgZW5hYmxlZCBpbiBuYXBpKSAqLworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CisKKwkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9CisJcmV0dXJuIHJ4X3dvcms7CiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfcngoaW50IGZvbywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCXUzMiBldmVudHM7Ci0KLQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUV9SWF9BTEw7Ci0KLQlpZiAoZXZlbnRzKSB7Ci0JCS8qIGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQlwY2lfcHVzaChiYXNlKTsKLQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLSNlbHNlCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9yeChpbnQgZm9vLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKQEAgLTM3NzcsNyArMzgwNiw2IEBACiAKIAlyZXR1cm4gSVJRX1JFVFZBTChpKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vdGhlcihpbnQgZm9vLCB2b2lkICpkYXRhKQogewpAQCAtMzgyNywxMCArMzg1NSw2IEBACiAJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIHVua25vd24gZXZlbnRzIDB4JXguIFBsZWFzZSByZXBvcnRcbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KIAkJaWYgKHVubGlrZWx5KGkgPiBtYXhfaW50ZXJydXB0X3dvcmspKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCkBAIC00NTkyLDYgKzQ2MTYsNyBAQAogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQludl9kaXNhYmxlX2lycShkZXYpOworCQludl9uYXBpX2Rpc2FibGUoZGV2KTsKIAkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC00NjQ0LDYgKzQ2NjksNyBAQAogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQluZXRpZl9hZGRyX3VubG9jayhkZXYpOwogCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwkJbnZfbmFwaV9lbmFibGUoZGV2KTsKIAkJbnZfZW5hYmxlX2lycShkZXYpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ3OTYsMTIgKzQ4MjIsMTIgQEAKIAkJZWxzZQogCQkJcmV0dXJuIE5WX1RFU1RfQ09VTlRfQkFTRTsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMSkKLQkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WMV9DT1VOVDsKKwkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMykKKwkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WM19DT1VOVDsKIAkJZWxzZSBpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTX1YyKQogCQkJcmV0dXJuIE5WX0RFVl9TVEFUSVNUSUNTX1YyX0NPVU5UOwotCQllbHNlIGlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1NfVjMpCi0JCQlyZXR1cm4gTlZfREVWX1NUQVRJU1RJQ1NfVjNfQ09VTlQ7CisJCWVsc2UgaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMSkKKwkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WMV9DT1VOVDsKIAkJZWxzZQogCQkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKQEAgLTUwNzAsOSArNTA5Niw3IEBACiAJaWYgKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgewogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0jaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JCQluYXBpX2Rpc2FibGUoJm5wLT5uYXBpKTsKLSNlbmRpZgorCQkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTUxMzAsOSArNTE1NCw3IEBACiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwogCQkJbnZfc3RhcnRfcnh0eChkZXYpOwogCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwkJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCQludl9lbmFibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKIAkJfQogCX0KQEAgLTU0MjQsOSArNTQ0Niw3IEBACiAJcmV0ID0gbnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpOwogCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwludl9uYXBpX2VuYWJsZShkZXYpOwogCiAJaWYgKHJldCkgewogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC01NDU4LDkgKzU0NzgsNyBAQAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAlucC0+aW5fc2h1dGRvd24gPSAxOwogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCW5hcGlfZGlzYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCisJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJc3luY2hyb25pemVfaXJxKG5wLT5wY2lfZGV2LT5pcnEpOwogCiAJZGVsX3RpbWVyX3N5bmMoJm5wLT5vb21fa2ljayk7CkBAIC01NjUxLDE0ICs1NjY5LDYgQEAKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fVFg7CiAJfQogCi0JbnAtPm1zaV9mbGFncyA9IDA7Ci0JaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSSkgJiYgbXNpKSB7Ci0JCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0NBUEFCTEU7Ci0JfQotCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0lfWCkgJiYgbXNpeCkgewotCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0NBUEFCTEU7Ci0JfQotCiAJbnAtPnBhdXNlX2ZsYWdzID0gTlZfUEFVU0VGUkFNRV9SWF9DQVBBQkxFIHwgTlZfUEFVU0VGUkFNRV9SWF9SRVEgfCBOVl9QQVVTRUZSQU1FX0FVVE9ORUc7CiAJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjEpIHx8CiAJICAgIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjIpIHx8CkBAIC01ODAzLDE0ICs1ODEzLDM1IEBACiAJfSBlbHNlIHsKIAkJbnAtPnR4X2ZsYWdzID0gTlZfVFgyX1ZBTElEOwogCX0KLQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkgewotCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSAvKiBzZXQgbnVtYmVyIG9mIHZlY3RvcnMgKi8KLQkJCW5wLT5tc2lfZmxhZ3MgfD0gMHgwMDAzOwotCX0gZWxzZSB7CisKKwlucC0+bXNpX2ZsYWdzID0gMDsKKwlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiBtc2kpIHsKKwkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfQ0FQQUJMRTsKKwl9CisJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSV9YKSAmJiBtc2l4KSB7CisJCS8qIG1zaXggaGFzIGhhZCByZXBvcnRlZCBpc3N1ZXMgd2hlbiBtb2RpZnlpbmcgaXJxbWFzaworCQkgICBhcyBpbiB0aGUgY2FzZSBvZiBuYXBpLCB0aGVyZWZvcmUsIGRpc2FibGUgZm9yIG5vdworCQkqLworI2lmbmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9DQVBBQkxFOworI2VuZGlmCisJfQorCisJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX0NQVSkgewogCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfQ1BVOwogCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLwogCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDE7CisJfSBlbHNlIGlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDICYmCisJCSAgICEoaWQtPmRyaXZlcl9kYXRhICYgREVWX05FRURfVElNRVJJUlEpKSB7CisJCS8qIHN0YXJ0IG9mZiBpbiB0aHJvdWdocHV0IG1vZGUgKi8KKwkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7CisJCS8qIHJlbW92ZSBzdXBwb3J0IGZvciBtc2l4IG1vZGUgKi8KKwkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfQ0FQQUJMRTsKKwl9IGVsc2UgeworCQlvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQ7CisJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLworCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDM7CiAJfQogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRKQpAQCAtNjEwMiw5ICs2MTMzLDIwIEBACiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbnZfY2xvc2UoZGV2KTsKIAotCW52X3Jlc3RvcmVfbWFjX2FkZHIocGRldik7CisJLyoKKwkgKiBSZXN0b3JlIHRoZSBNQUMgc28gYSBrZXJuZWwgc3RhcnRlZCBieSBrZXhlYyB3b24ndCBnZXQgY29uZnVzZWQuCisJICogSWYgd2UgcmVhbGx5IGdvIGZvciBwb3dlcm9mZiwgd2UgbXVzdCBub3QgcmVzdG9yZSB0aGUgTUFDLAorCSAqIG90aGVyd2lzZSB0aGUgTUFDIGZvciBXT0wgd2lsbCBiZSByZXZlcnNlZCBhdCBsZWFzdCBvbiBzb21lIGJvYXJkcy4KKwkgKi8KKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9QT1dFUl9PRkYpIHsKKwkJbnZfcmVzdG9yZV9tYWNfYWRkcihwZGV2KTsKKwl9CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJLyoKKwkgKiBBcHBhcmVudGx5IGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWluaXRpYWxpc2UgZnJvbSBEMyBob3QsCisJICogb25seSBwdXQgdGhlIGRldmljZSBpbnRvIEQzIGlmIHdlIHJlYWxseSBnbyBmb3IgcG93ZXJvZmYuCisJICovCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKSB7CiAJCWlmIChwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgbnAtPndvbGVuYWJsZWQpKQogCQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgbnAtPndvbGVuYWJsZWQpOwpAQCAtNjE1NiwxOSArNjE5OCwxOSBAQAogCX0sCiAJewkvKiBNQ1AwNCBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQMDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDUxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAogCX0sCiAJewkvKiBNQ1A1MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTQpLApAQCAtNjE4MCw4MyArNjIyMiw4MyBAQAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjkpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzIpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzUpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNiksCkBAIC02MjY0LDE1ICs2MzA2LDE1IEBACiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM3KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7MCx9LAogfTsKQEAgLTYzMDAsNyArNjM0Miw3IEBACiBtb2R1bGVfcGFyYW0obWF4X2ludGVycnVwdF93b3JrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfaW50ZXJydXB0X3dvcmssICJmb3JjZWRldGggbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7CiBtb2R1bGVfcGFyYW0ob3B0aW1pemF0aW9uX21vZGUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhvcHRpbWl6YXRpb25fbW9kZSwgIkluIHRocm91Z2hwdXQgbW9kZSAoMCksIGV2ZXJ5IHR4ICYgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LiBJbiBDUFUgbW9kZSAoMSksIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4gSW4gZHluYW1pYyBtb2RlICgyKSwgdGhlIG1vZGUgdG9nZ2xlcyBiZXR3ZWVuIHRocm91Z2hwdXQgYW5kIENQVSBtb2RlIGJhc2VkIG9uIG5ldHdvcmsgbG9hZC4iKTsKIG1vZHVsZV9wYXJhbShwb2xsX2ludGVydmFsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwb2xsX2ludGVydmFsLCAiSW50ZXJ2YWwgZGV0ZXJtaW5lcyBob3cgZnJlcXVlbnQgdGltZXIgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSBbKHRpbWVfaW5fbWljcm9fc2VjcyAqIDEwMCkgLyAoMl4xMCldLiBNaW4gaXMgMCBhbmQgTWF4IGlzIDY1NTM1LiIpOwogbW9kdWxlX3BhcmFtKG1zaSwgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCmluZGV4IGM0MzRhMTUuLmIzMDc5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtMTI5LDcgKzEyOSw3IEBACiBzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCiB7CiAJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gUEhZX0lOSVRfVElNRU9VVDsKKwlpbnQgdGltZW91dCA9IFBIWV9JTklUX1RJTUVPVVQ7CiAKIAltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7CiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7CiAKLQlpZih0aW1lb3V0ID09IDApIHsKKwlpZiAodGltZW91dCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLAogCQkJCWJ1cy0+bmFtZSk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0xOTQsMTEgKzE5NCwxNSBAQAogCiB2b2lkIGZzbF9wcV9tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0JY29uc3QgdTMyICpyZWc7CisJY29uc3QgdTMyICphZGRyOworCXU2NCB0YWRkciA9IE9GX0JBRF9BRERSOwogCi0JcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CisJYWRkciA9IG9mX2dldF9hZGRyZXNzKG5wLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoYWRkcikKKwkJdGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgYWRkcik7CiAKLQlzbnByaW50ZihuYW1lLCBNSUlfQlVTX0lEX1NJWkUsICIlc0AleCIsIG5wLT5uYW1lLCByZWcgPyAqcmVnIDogMCk7CisJc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJWxseCIsIG5wLT5uYW1lLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXRhZGRyKTsKIH0KIAogLyogU2NhbiB0aGUgYnVzIGluIHJldmVyc2UsIGxvb2tpbmcgZm9yIGFuIGVtcHR5IHNwb3QgKi8KQEAgLTMyMSw2ICszMjUsNyBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbmV3X2J1cyk7CiAKIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItdGJpIikgfHwKIAkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZ2lhbmZhciIpKSB7CiAjaWZkZWYgQ09ORklHX0dJQU5GQVIKIAkJdGJpcGEgPSBnZXRfZ2Zhcl90YmlwYShyZWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCBhNjRhNDM4Li45ZDgxZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0xNDAsMTEgKzE0MCwyNiBAQAogdm9pZCBnZmFyX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9jbGVhcl9leGFjdF9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcik7CitzdGF0aWMgaW50IGdmYXJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiAKIE1PRFVMRV9BVVRIT1IoIkZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZmFyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gZ2Zhcl9lbmV0X29wZW4sCisJLm5kb19zdGFydF94bWl0ID0gZ2Zhcl9zdGFydF94bWl0LAorCS5uZG9fc3RvcCA9IGdmYXJfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2Zhcl9zZXRfbXVsdGksCisJLm5kb190eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0LAorCS5uZG9fZG9faW9jdGwgPSBnZmFyX2lvY3RsLAorCS5uZG9fdmxhbl9yeF9yZWdpc3RlciA9IGdmYXJfdmxhbl9yeF9yZWdpc3RlciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2Zhcl9uZXRwb2xsLAorI2VuZGlmCit9OworCiAvKiBSZXR1cm5zIDEgaWYgaW5jb21pbmcgZnJhbWVzIHVzZSBhbiBGQ0IgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdmYXJfdXNlc19mY2Ioc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTM1MCw4ICszNjUsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcml2LT5kZXYgPSBkZXY7CisJcHJpdi0+bmRldiA9IGRldjsKKwlwcml2LT5vZmRldiA9IG9mZGV2OwogCXByaXYtPm5vZGUgPSBvZmRldi0+bm9kZTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZvZmRldi0+ZGV2KTsKIAogCWVyciA9IGdmYXJfb2ZfaW5pdChkZXYpOwogCkBAIC0zOTAsMjEgKzQwNywxMiBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwotCWRldi0+b3BlbiA9IGdmYXJfZW5ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZ2Zhcl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IGdmYXJfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBnZmFyX3BvbGwsIEdGQVJfREVWX1dFSUdIVCk7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGdmYXJfbmV0cG9sbDsKLSNlbmRpZgotCWRldi0+c3RvcCA9IGdmYXJfY2xvc2U7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1OwogCWRldi0+bXR1ID0gMTUwMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJmdmYXJfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmdmYXJfZXRodG9vbF9vcHM7Ci0JZGV2LT5kb19pb2N0bCA9IGdmYXJfaW9jdGw7CiAKIAlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSB7CiAJCXByaXYtPnJ4X2NzdW1fZW5hYmxlID0gMTsKQEAgLTQxNCwxMSArNDIyLDggQEAKIAogCXByaXYtPnZsZ3JwID0gTlVMTDsKIAotCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4pIHsKLQkJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyOwotCisJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JfQogCiAJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCkgewogCQlwcml2LT5leHRlbmRlZF9oYXNoID0gMTsKQEAgLTUzNSw3ICs1NDAsNyBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgTlVMTCk7CiAKIAlpb3VubWFwKHByaXYtPnJlZ3MpOwotCWZyZWVfbmV0ZGV2KHByaXYtPmRldik7CisJZnJlZV9uZXRkZXYocHJpdi0+bmRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0NCw3ICs1NDksNyBAQAogc3RhdGljIGludCBnZmFyX3N1c3BlbmQoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXB2YWw7CiAKQEAgLTU5Myw3ICs1OTgsNyBAQAogc3RhdGljIGludCBnZmFyX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXB2YWw7CiAJaW50IG1hZ2ljX3BhY2tldCA9IHByaXYtPndvbF9lbiAmJgpAQCAtODY3LDcgKzg3Miw3IEBACiAKIAlmcmVlX3NrYl9yZXNvdXJjZXMocHJpdik7CiAKLQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYsCisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2Yoc3RydWN0IHR4YmQ4KSpwcml2LT50eF9yaW5nX3NpemUKIAkJCSsgc2l6ZW9mKHN0cnVjdCByeGJkOCkqcHJpdi0+cnhfcmluZ19zaXplLAogCQkJcHJpdi0+dHhfYmRfYmFzZSwKQEAgLTg4OSwxMiArODk0LDEyIEBACiAJCWlmICghcHJpdi0+dHhfc2tidWZmW2ldKQogCQkJY29udGludWU7CiAKLQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCiAJCQkJdHhiZHAtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCXR4YmRwLT5sc3RhdHVzID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IHNrYl9zaGluZm8ocHJpdi0+dHhfc2tidWZmW2ldKS0+bnJfZnJhZ3M7IGorKykgewogCQkJdHhiZHArKzsKLQkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5kZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKKwkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5vZmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAogCQkJCQl0eGJkcC0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAkJfQogCQl0eGJkcCsrOwpAQCAtOTExLDcgKzkxNiw3IEBACiAJaWYocHJpdi0+cnhfc2tidWZmICE9IE5VTEwpIHsKIAkJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCQlpZiAocHJpdi0+cnhfc2tidWZmW2ldKSB7Ci0JCQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIHJ4YmRwLT5idWZQdHIsCisJCQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgcnhiZHAtPmJ1ZlB0ciwKIAkJCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLAogCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIApAQCAtOTc3LDcgKzk4Miw3IEBACiAJZ2Zhcl93cml0ZSgmcmVncy0+aW1hc2ssIElNQVNLX0lOSVRfQ0xFQVIpOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0JdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPmRldiwKKwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBkbWFfYWxsb2NfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2YgKHN0cnVjdCB0eGJkOCkgKiBwcml2LT50eF9yaW5nX3NpemUgKwogCQkJc2l6ZW9mIChzdHJ1Y3QgcnhiZDgpICogcHJpdi0+cnhfcmluZ19zaXplLAogCQkJJmFkZHIsIEdGUF9LRVJORUwpOwpAQCAtMTE4OSw3ICsxMTk0LDcgQEAKIHJ4X3NrYl9mYWlsOgogCWZyZWVfc2tiX3Jlc291cmNlcyhwcml2KTsKIHR4X3NrYl9mYWlsOgotCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCXNpemVvZihzdHJ1Y3QgdHhiZDgpKnByaXYtPnR4X3Jpbmdfc2l6ZQogCQkJKyBzaXplb2Yoc3RydWN0IHJ4YmQ4KSpwcml2LT5yeF9yaW5nX3NpemUsCiAJCQlwcml2LT50eF9iZF9iYXNlLApAQCAtMTIzNCwxMCArMTIzOSwxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwKQogewotCXN0cnVjdCB0eGZjYiAqZmNiID0gKHN0cnVjdCB0eGZjYiAqKXNrYl9wdXNoIChza2IsIEdNQUNfRkNCX0xFTik7CisJc3RydWN0IHR4ZmNiICpmY2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwOwogCisJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgR01BQ19GQ0JfTEVOKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYiA9IHNrYjsKKwkJc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20ob2xkX3NrYiwgR01BQ19GQ0JfTEVOKTsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gTlVMTDsKKwkJZGV2X2tmcmVlX3NrYl9hbnkob2xkX3NrYik7CisJfQorCWZjYiA9IChzdHJ1Y3QgdHhmY2IgKilza2JfcHVzaChza2IsIEdNQUNfRkNCX0xFTik7CiAJY2FjaGVhYmxlX21lbXplcm8oZmNiLCBHTUFDX0ZDQl9MRU4pOwogCiAJcmV0dXJuIGZjYjsKQEAgLTEzMTIsNyArMTMyNiw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgdG8gcXVldWUgdGhpcyBwYWNrZXQgKi8KLQlpZiAobnJfZnJhZ3MgPiBwcml2LT5udW1fdHhiZGZyZWUpIHsKKwlpZiAoKG5yX2ZyYWdzKzEpID4gcHJpdi0+bnVtX3R4YmRmcmVlKSB7CiAJCS8qIG5vIHNwYWNlLCBzdG9wIHRoZSBxdWV1ZSAqLwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKQEAgLTEzNDIsNyArMTM1Niw3IEBACiAJCQlpZiAoaSA9PSBucl9mcmFncyAtIDEpCiAJCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0xBU1QgfCBUWEJEX0lOVEVSUlVQVCk7CiAKLQkJCWJ1ZmFkZHIgPSBkbWFfbWFwX3BhZ2UoJmRldi0+ZGV2LAorCQkJYnVmYWRkciA9IGRtYV9tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlLAogCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAogCQkJCQlsZW5ndGgsCkBAIC0xMzU4LDIzICsxMzcyLDI1IEBACiAKIAkvKiBTZXQgdXAgY2hlY2tzdW1taW5nICovCiAJaWYgKENIRUNLU1VNX1BBUlRJQUwgPT0gc2tiLT5pcF9zdW1tZWQpIHsKLQkJZmNiID0gZ2Zhcl9hZGRfZmNiKHNrYik7Ci0JCWxzdGF0dXMgfD0gQkRfTEZMQUcoVFhCRF9UT0UpOwotCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJZmNiID0gZ2Zhcl9hZGRfZmNiKCZza2IpOworCQlpZiAobGlrZWx5KGZjYiAhPSBOVUxMKSkgeworCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX1RPRSk7CisJCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJfQogCX0KIAogCWlmIChwcml2LT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJaWYgKHVubGlrZWx5KE5VTEwgPT0gZmNiKSkgewotCQkJZmNiID0gZ2Zhcl9hZGRfZmNiKHNrYik7CisJCWlmICh1bmxpa2VseShOVUxMID09IGZjYikpCisJCQlmY2IgPSBnZmFyX2FkZF9mY2IoJnNrYik7CisJCWlmIChsaWtlbHkoZmNiICE9IE5VTEwpKSB7CiAJCQlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfVE9FKTsKKwkJCWdmYXJfdHhfdmxhbihza2IsIGZjYik7CiAJCX0KLQotCQlnZmFyX3R4X3ZsYW4oc2tiLCBmY2IpOwogCX0KIAogCS8qIHNldHVwIHRoZSBUeEJEIGxlbmd0aCBhbmQgYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBCRCAqLwogCXByaXYtPnR4X3NrYnVmZltwcml2LT5za2JfY3VydHhdID0gc2tiOwotCXR4YmRwX3N0YXJ0LT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwl0eGJkcF9zdGFydC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSwKIAkJCXNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOwogCiAJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0NSQyB8IFRYQkRfUkVBRFkpIHwgc2tiX2hlYWRsZW4oc2tiKTsKQEAgLTE1NjAsNyArMTU3Niw3IEBACiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlLAogCQkJcmVzZXRfdGFzayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCXN0b3BfZ2ZhcihkZXYpOwpAQCAtMTYwNyw3ICsxNjIzLDcgQEAKIAkJCQkobHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSkKIAkJCWJyZWFrOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+ZGV2LAorCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LAogCQkJCWJkcC0+YnVmUHRyLAogCQkJCWJkcC0+bGVuZ3RoLAogCQkJCURNQV9UT19ERVZJQ0UpOwpAQCAtMTYxNiw3ICsxNjMyLDcgQEAKIAkJYmRwID0gbmV4dF90eGJkKGJkcCwgYmFzZSwgdHhfcmluZ19zaXplKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgZnJhZ3M7IGkrKykgewotCQkJZG1hX3VubWFwX3BhZ2UoJmRldi0+ZGV2LAorCQkJZG1hX3VubWFwX3BhZ2UoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQkJCWJkcC0+YnVmUHRyLAogCQkJCQliZHAtPmxlbmd0aCwKIAkJCQkJRE1BX1RPX0RFVklDRSk7CkBAIC0xNjkzLDcgKzE3MDksNyBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBsc3RhdHVzOwogCi0JYmRwLT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwliZHAtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCBza2ItPmRhdGEsCiAJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAogCWxzdGF0dXMgPSBCRF9MRkxBRyhSWEJEX0VNUFRZIHwgUlhCRF9JTlRFUlJVUFQpOwpAQCAtMTg1Myw3ICsxODY5LDcgQEAKIAogCQlza2IgPSBwcml2LT5yeF9za2J1ZmZbcHJpdi0+c2tiX2N1cnJ4XTsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5kZXYtPmRldiwgYmRwLT5idWZQdHIsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIGJkcC0+YnVmUHRyLAogCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCS8qIFdlIGRyb3AgdGhlIGZyYW1lIGlmIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgKi8KQEAgLTE5MTMsNyArMTkyOSw3IEBACiBzdGF0aWMgaW50IGdmYXJfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCWludCB0eF9jbGVhbmVkID0gMDsKIAlpbnQgcnhfY2xlYW5lZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCA1NDMzMmIwLi5kZDQ5OWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC03MzgsNyArNzM4LDggQEAKIAlzcGlubG9ja190IHJ4bG9jazsKIAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCiAJLyogc2tiIGFycmF5IGFuZCBpbmRleCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZTQ2NzkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYworKysgL2Rldi9udWxsCkBAIC0xLDM3OSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwotICoKLSAqIEdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyIC0tIE1JSU0gYnVzIGltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUlNIHJlZ3MKLSAqCi0gKiBBdXRob3I6IEFuZHkgRmxlbWluZwotICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGh5Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJnaWFuZmFyLmgiCi0jaW5jbHVkZSAiZ2lhbmZhcl9taWkuaCIKLQotLyoKLSAqIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKLSAqIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZQotICogZ2VuZXJpYyBtZGlvIGJ1cyAodGllZCB0byBhIHNpbmdsZSBpbnRlcmZhY2UpLCB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcwotICogZG9uZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGlzIGhlbHBmdWwgaW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBsaWtlCi0gKiB0aGUgVEJJIHdoaWNoIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMgYW5kIGFyZSBhbHdheXMgdGllZCB0bwotICogdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBzeXN0ZW0gbWRpbyBidXMsIHVzZWQgZm9yCi0gKiBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGV4YW1wbGUuCi0gKi8KLWludCBnZmFyX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCi0JCQkgIGludCByZWdudW0sIHUxNiB2YWx1ZSkKLXsKLQkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHdyaXRlICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7Ci0KLQkvKiBXcml0ZSBvdXQgdGhlIHZhbHVlIHdlIHdhbnQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCi0Jd2hpbGUgKGdmYXJfcmVhZCgmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpCi0JCWNwdV9yZWxheCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZWFkIHRoZSBidXMgZm9yIFBIWSBhdCBhZGRyIG1paV9pZCwgcmVnaXN0ZXIgcmVnbnVtLCBhbmQKLSAqIHJldHVybiB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkgb3BlcmF0aW9uCi0gKiBkb25lIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwKLSAqIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZ2VuZXJpYyBtZGlvIGJ1cwotICogVGhpcyBpcyBoZWxwZnVsIGluIHByb2dyYW1taW5nIGludGVyZmFjZXMgbGlrZQotICogdGhlIFRCSSB3aGljaCwgaW50dXJuLCBjb250cm9sIGludGVyZmFjZXMgbGlrZSBvbmNoaXAgU0VSREVTCi0gKiBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvIHRoZSBsb2NhbCBtZGlvIHBpbnMsIHdoaWNoIG1heSBub3QgYmUgdGhlCi0gKiBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGV4dGVybmFsIFBIWXMsIGZvciBlZy4KLSAqLwotaW50IGdmYXJfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQotewotCXUxNiB2YWx1ZTsKLQotCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gcmVhZCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1hZGQsIChtaWlfaWQgPDwgOCkgfCByZWdudW0pOwotCi0JLyogQ2xlYXIgbWlpbWNvbSwgYW5kIHRoZW4gaW5pdGlhdGUgYSByZWFkICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNvbSwgMCk7Ci0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNvbSwgTUlJX1JFQURfQ09NTUFORCk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCi0Jd2hpbGUgKGdmYXJfcmVhZCgmcmVncy0+bWlpbWluZCkgJiAoTUlJTUlORF9OT1RWQUxJRCB8IE1JSU1JTkRfQlVTWSkpCi0JCWNwdV9yZWxheCgpOwotCi0JLyogR3JhYiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGZyb20gbWlpbXN0YXQgKi8KLQl2YWx1ZSA9IGdmYXJfcmVhZCgmcmVncy0+bWlpbXN0YXQpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGF0IG1paV9pZCBhdCByZWdpc3RlciByZWdudW0sCi0gKiBvbiB0aGUgYnVzLCB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJlZm9yZSByZXR1cm5pbmcuCi0gKiBBbGwgUEhZIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB0aHJvdWdoIHRoZSBUU0VDMSBNSUlNIHJlZ3MgKi8KLWludCBnZmFyX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19mb3JjZSBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogV3JpdGUgdG8gdGhlIGxvY2FsIE1JSSByZWdzICovCi0JcmV0dXJuKGdmYXJfbG9jYWxfbWRpb193cml0ZShyZWdzLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpKTsKLX0KLQotLyogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCi0gKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZCi0gKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IGdmYXJfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKilidXMtPnByaXY7Ci0KLQkvKiBSZWFkIHRoZSBsb2NhbCBNSUkgcmVncyAqLwotCXJldHVybihnZmFyX2xvY2FsX21kaW9fcmVhZChyZWdzLCBtaWlfaWQsIHJlZ251bSkpOwotfQotCi0vKiBSZXNldCB0aGUgTUlJTSByZWdpc3RlcnMsIGFuZCB3YWl0IGZvciB0aGUgYnVzIHRvIGZyZWUgKi8KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKilidXMtPnByaXY7Ci0JdW5zaWduZWQgaW50IHRpbWVvdXQgPSBQSFlfSU5JVF9USU1FT1VUOwotCi0JbXV0ZXhfbG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JLyogUmVzZXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNmZywgTUlJTUNGR19SRVNFVCk7Ci0KLQkvKiBTZXR1cCB0aGUgTUlJIE1nbXQgY2xvY2sgc3BlZWQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX0lOSVRfVkFMVUUpOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KLQl3aGlsZSAoKGdmYXJfcmVhZCgmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpICYmCi0JCQktLXRpbWVvdXQpCi0JCWNwdV9yZWxheCgpOwotCi0JbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQlpZih0aW1lb3V0ID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLAotCQkJCWJ1cy0+bmFtZSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEFsbG9jYXRlIGFuIGFycmF5IHdoaWNoIHByb3ZpZGVzIGlycSAjcyBmb3IgZWFjaCBQSFkgb24gdGhlIGdpdmVuIGJ1cyAqLwotc3RhdGljIGludCAqY3JlYXRlX2lycV9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlpbnQgKmlycXM7Ci0JaW50IGk7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7Ci0KLQlpcnFzID0ga2NhbGxvYyhQSFlfTUFYX0FERFIsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghaXJxcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCi0JCWlycXNbaV0gPSBQSFlfUE9MTDsKLQotCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7Ci0JCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7Ci0JCWNvbnN0IHUzMiAqaWQ7Ci0KLQkJaWYgKGlycSA9PSBOT19JUlEpCi0JCQljb250aW51ZTsKLQotCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOwotCi0JCWlmICghaWQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKmlkIDwgUEhZX01BWF9BRERSICYmICppZCA+PSAwKQotCQkJaXJxc1sqaWRdID0gaXJxOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIgotCQkJCQkiJWQgaXMgbm90IGEgdmFsaWQgUEhZIGFkZHJlc3NcbiIsCi0JCQkJCW5wLT5mdWxsX25hbWUsICppZCk7Ci0JfQotCi0JcmV0dXJuIGlycXM7Ci19Ci0KLQotdm9pZCBnZmFyX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQljb25zdCB1MzIgKnJlZzsKLQotCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCi0Jc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJXgiLCBucC0+bmFtZSwgcmVnID8gKnJlZyA6IDApOwotfQotCi0vKiBTY2FuIHRoZSBidXMgaW4gcmV2ZXJzZSwgbG9va2luZyBmb3IgYW4gZW1wdHkgc3BvdCAqLwotc3RhdGljIGludCBnZmFyX21kaW9fZmluZF9mcmVlKHN0cnVjdCBtaWlfYnVzICpuZXdfYnVzKQotewotCWludCBpOwotCi0JZm9yIChpID0gUEhZX01BWF9BRERSOyBpID4gMDsgaS0tKSB7Ci0JCXUzMiBwaHlfaWQ7Ci0KLQkJaWYgKGdldF9waHlfaWQobmV3X2J1cywgaSwgJnBoeV9pZCkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJaWYgKHBoeV9pZCA9PSAweGZmZmZmZmZmKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAotCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVnczsKLQlzdHJ1Y3QgZ2ZhciBfX2lvbWVtICplbmV0X3JlZ3M7Ci0Jc3RydWN0IG1paV9idXMgKm5ld19idXM7Ci0JaW50IGVyciA9IDA7Ci0JdTY0IGFkZHIsIHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGJpOwotCWludCB0YmlhZGRyID0gLTE7Ci0KLQluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwotCWlmIChOVUxMID09IG5ld19idXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2aWNlX2luaXRfd2FrZXVwKCZvZmRldi0+ZGV2LCAxKTsKLQotCW5ld19idXMtPm5hbWUgPSAiR2lhbmZhciBNSUkgQnVzIiwKLQluZXdfYnVzLT5yZWFkID0gJmdmYXJfbWRpb19yZWFkLAotCW5ld19idXMtPndyaXRlID0gJmdmYXJfbWRpb193cml0ZSwKLQluZXdfYnVzLT5yZXNldCA9ICZnZmFyX21kaW9fcmVzZXQsCi0JZ2Zhcl9tZGlvX2J1c19uYW1lKG5ld19idXMtPmlkLCBucCk7Ci0KLQkvKiBTZXQgdGhlIFBIWSBiYXNlIGFkZHJlc3MgKi8KLQlhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIG9mX2dldF9hZGRyZXNzKG5wLCAwLCAmc2l6ZSwgTlVMTCkpOwotCXJlZ3MgPSBpb3JlbWFwKGFkZHIsIHNpemUpOwotCi0JaWYgKE5VTEwgPT0gcmVncykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9mcmVlX2J1czsKLQl9Ci0KLQluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7Ci0KLQluZXdfYnVzLT5pcnEgPSBjcmVhdGVfaXJxX21hcChucCk7Ci0KLQlpZiAobmV3X2J1cy0+aXJxID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfdW5tYXBfcmVnczsKLQl9Ci0KLQluZXdfYnVzLT5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKLQlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIG5ld19idXMpOwotCi0JLyoKLQkgKiBUaGlzIGlzIG1pbGRseSBldmlsLCBidXQgc28gaXMgb3VyIGhhcmR3YXJlIGZvciBkb2luZyB0aGlzLgotCSAqIEFsc28sIHdlIGhhdmUgdG8gY2FzdCBiYWNrIHRvIHN0cnVjdCBnZmFyX21paSBiZWNhdXNlIG9mCi0JICogZGVmaW5pdGlvbiB3ZWlyZG5lc3MgZG9uZSBpbiBnaWFuZmFyLmguCi0JICovCi0JZW5ldF9yZWdzID0gKHN0cnVjdCBnZmFyIF9fZm9yY2UgX19pb21lbSAqKQotCQkoKGNoYXIgX19mb3JjZSAqKXJlZ3MgLSBvZmZzZXRvZihzdHJ1Y3QgZ2ZhciwgZ2Zhcl9taWlfcmVncykpOwotCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgdGJpKSB7Ci0JCWlmICghc3RybmNtcCh0YmktPnR5cGUsICJ0YmktcGh5IiwgOCkpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAodGJpKSB7Ci0JCWNvbnN0IHUzMiAqcHJvcCA9IG9mX2dldF9wcm9wZXJ0eSh0YmksICJyZWciLCBOVUxMKTsKLQotCQlpZiAocHJvcCkKLQkJCXRiaWFkZHIgPSAqcHJvcDsKLQl9Ci0KLQlpZiAodGJpYWRkciA9PSAtMSkgewotCQlnZmFyX3dyaXRlKCZlbmV0X3JlZ3MtPnRiaXBhLCAwKTsKLQotCQl0YmlhZGRyID0gZ2Zhcl9tZGlvX2ZpbmRfZnJlZShuZXdfYnVzKTsKLQl9Ci0KLQkvKgotCSAqIFdlIGRlZmluZSBUQklQQSBhdCAwIHRvIGJlIGlsbGVnYWwsIG9wdGluZyB0byBmYWlsIGZvciBib2FyZHMgdGhhdAotCSAqIGhhdmUgUEhZcyBhdCAxLTMxLCByYXRoZXIgdGhhbiBjaGFuZ2UgdGJpcGEgYW5kIHJlc2Nhbi4KLQkgKi8KLQlpZiAodGJpYWRkciA9PSAwKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQotCQlnb3RvIGVycl9mcmVlX2lycXM7Ci0JfQotCi0JZ2Zhcl93cml0ZSgmZW5ldF9yZWdzLT50YmlwYSwgdGJpYWRkcik7Ci0KLQkvKgotCSAqIFRoZSBUQklQSFktb25seSBidXNlcyB3aWxsIGZpbmQgUEhZcyBhdCBldmVyeSBhZGRyZXNzLAotCSAqIHNvIHdlIG1hc2sgdGhlbSBhbGwgYnV0IHRoZSBUQkkKLQkgKi8KLQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItbWRpbyIpKQotCQluZXdfYnVzLT5waHlfbWFzayA9IH4oMSA8PCB0YmlhZGRyKTsKLQotCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7Ci0KLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKLQkJCQluZXdfYnVzLT5uYW1lKTsKLQkJZ290byBlcnJfZnJlZV9pcnFzOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZnJlZV9pcnFzOgotCWtmcmVlKG5ld19idXMtPmlycSk7Ci1lcnJfdW5tYXBfcmVnczoKLQlpb3VubWFwKHJlZ3MpOwotZXJyX2ZyZWVfYnVzOgotCW1kaW9idXNfZnJlZShuZXdfYnVzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIGludCBnZmFyX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQotewotCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwotCi0JbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7Ci0KLQlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIE5VTEwpOwotCi0JaW91bm1hcCgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKilidXMtPnByaXYpOwotCWJ1cy0+cHJpdiA9IE5VTEw7Ci0Ja2ZyZWUoYnVzLT5pcnEpOwotCW1kaW9idXNfZnJlZShidXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdmYXJfbWRpb19tYXRjaFtdID0KLXsKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iLAotCX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiLAotCX0sCi0JewotCQkudHlwZSA9ICJtZGlvIiwKLQkJLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsCi0JfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGdpYW5mYXJfbWRpb19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZnNsLWdpYW5mYXJfbWRpbyIsCi0JLm1hdGNoX3RhYmxlID0gZ2Zhcl9tZGlvX21hdGNoLAotCi0JLnByb2JlID0gZ2Zhcl9tZGlvX3Byb2JlLAotCS5yZW1vdmUgPSBnZmFyX21kaW9fcmVtb3ZlLAotfTsKLQotaW50IF9faW5pdCBnZmFyX21kaW9faW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdpYW5mYXJfbWRpb19kcml2ZXIpOwotfQotCi12b2lkIGdmYXJfbWRpb19leGl0KHZvaWQpCi17Ci0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdpYW5mYXJfbWRpb19kcml2ZXIpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IDQ1NTY0MWYuLjMxMGVlMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIEtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIgogS0VSTl9JTkZPICIgICBTb21lIG1vZGlmaWNhdGlvbnMgYnkgRXJpYyBrYXN0ZW4gPGthc3RlbkBuc2NsLm1zdS5lZHU+XG4iCiBLRVJOX0lORk8gIiAgIEZ1cnRoZXIgbW9kaWZpY2F0aW9ucyBieSBLZWl0aCBVbmRlcndvb2QgPGtlaXRodUBwYXJsLmNsZW1zb24uZWR1PlxuIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCmluZGV4IDQ0YjE4M2IuLmQ1MDliMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwpAQCAtOTcsNyArOTcsNyBAQAogc3RhdGljIGludCBicHFfcmN2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYnBxX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBicHFfcGFja2V0X3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJwcV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfQlBRKSwKIAkuZnVuYwk9IGJwcV9yY3YsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAtcGx1cy5jIGIvZHJpdmVycy9uZXQvaHAtcGx1cy5jCmluZGV4IDVlMDcwZjQuLjA0ODZjYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwLXBsdXMuYworKysgYi9kcml2ZXJzL25ldC9ocC1wbHVzLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCQkJaWYgKHRoaXNfZGV2ICE9IDApIGJyZWFrOyAvKiBvbmx5IGF1dG9wcm9iZSAxc3Qgb25lICovCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgImhwLXBsdXMuYzogUHJlc2VudGx5IGF1dG9wcm9iaW5nIChub3QgcmVjb21tZW5kZWQpIGZvciBhIHNpbmdsZSBjYXJkLlxuIik7CiAJCX0KLQkJZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJCWRldiA9IGFsbG9jX2VpcF9uZXRkZXYoKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKIAkJZGV2LT5pcnEgPSBpcnFbdGhpc19kZXZdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IDg3YTcwNjYuLmE4MTVlMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkJCSAgRU1BQ19GVFJfNDQwRVBfUEhZX0NMS19GSVgpKQogCQlEQkcoZGV2LCAiJXMiIE5MLCBlcnJvcik7CiAJZWxzZSBpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlc1xuIiwgZGV2LT5uZGV2LT5uYW1lLCBlcnJvcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkZXYtPm9mZGV2LT5ub2RlLT5mdWxsX25hbWUsIGVycm9yKTsKIH0KIAogLyogRU1BQyBQSFkgY2xvY2sgd29ya2Fyb3VuZDoKQEAgLTI1OTQsNiArMjU5NCw5IEBACiAJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxlbWFjLTQ2MGV4IikgfHwKIAkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGVtYWMtNDYwZ3QiKSkKIAkJCWRldi0+ZmVhdHVyZXMgfD0gRU1BQ19GVFJfNDYwRVhfUEhZX0NMS19GSVg7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxlbWFjLTQwNWV4IikgfHwKKwkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGVtYWMtNDA1ZXhyIikpCisJCQlkZXYtPmZlYXR1cmVzIHw9IEVNQUNfRlRSXzQ0MEVQX1BIWV9DTEtfRklYOwogCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYzQiKSkgewogCQlkZXYtPmZlYXR1cmVzIHw9IEVNQUNfRlRSX0VNQUM0OwogCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00NDBneCIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlCmluZGV4IGNkYTNhZDUuLjgzNzJjYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9pZ2IvTWFrZWZpbGUKQEAgLTMzLDUgKzMzLDUgQEAKIG9iai0kKENPTkZJR19JR0IpICs9IGlnYi5vCiAKIGlnYi1vYmpzIDo9IGlnYl9tYWluLm8gaWdiX2V0aHRvb2wubyBlMTAwMF84MjU3NS5vIFwKLQkgICAgZTEwMDBfbWFjLm8gZTEwMDBfbnZtLm8gZTEwMDBfcGh5Lm8KKwkgICAgZTEwMDBfbWFjLm8gZTEwMDBfbnZtLm8gZTEwMDBfcGh5Lm8gZTEwMDBfbWJ4Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCA3ZjQzZTI1Li5lZmQ5YmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtODAsOCArODAsMTAgQEAKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1NzU7CiAJCWJyZWFrOwogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2OgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X05TOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUjoKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1NzY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMTMsNiArMjE1LDEwIEBACiAJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAl9CiAKKwkvKiBpZiA4MjU3NiB0aGVuIGluaXRpYWxpemUgbWFpbGJveCBwYXJhbWV0ZXJzICovCisJaWYgKG1hYy0+dHlwZSA9PSBlMTAwMF84MjU3NikKKwkJaWdiX2luaXRfbWJ4X3BhcmFtc19wZihodyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQxMyw2ICsxNDE5LDQ0IEBACiAJcmQzMihFMTAwMF9NUEMpOwogfQogCisvKioKKyAqICBpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYgLSBlbmFibGUgb3IgZGlzYWJsZSB2bWRxIGxvb3BiYWNrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3QKKyAqICBAZW5hYmxlOiBzdGF0ZSB0byBlbnRlciwgZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAqCisgKiAgZW5hYmxlcy9kaXNhYmxlcyBMMiBzd2l0Y2ggbG9vcGJhY2sgZnVuY3Rpb25hbGl0eS4KKyAqKi8KK3ZvaWQgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXUzMiBkdHhzd2MgPSByZDMyKEUxMDAwX0RUWFNXQyk7CisKKwlpZiAoZW5hYmxlKQorCQlkdHhzd2MgfD0gRTEwMDBfRFRYU1dDX1ZNRFFfTE9PUEJBQ0tfRU47CisJZWxzZQorCQlkdHhzd2MgJj0gfkUxMDAwX0RUWFNXQ19WTURRX0xPT1BCQUNLX0VOOworCisJd3IzMihFMTAwMF9EVFhTV0MsIGR0eHN3Yyk7Cit9CisKKy8qKgorICogIGlnYl92bWRxX3NldF9yZXBsaWNhdGlvbl9wZiAtIGVuYWJsZSBvciBkaXNhYmxlIHZtZHEgcmVwbGljYXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdAorICogIEBlbmFibGU6IHN0YXRlIHRvIGVudGVyLCBlaXRoZXIgZW5hYmxlZCBvciBkaXNhYmxlZAorICoKKyAqICBlbmFibGVzL2Rpc2FibGVzIHJlcGxpY2F0aW9uIG9mIHBhY2tldHMgYWNyb3NzIG11bHRpcGxlIHBvb2xzLgorICoqLwordm9pZCBpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJdTMyIHZ0X2N0bCA9IHJkMzIoRTEwMDBfVlRfQ1RMKTsKKworCWlmIChlbmFibGUpCisJCXZ0X2N0bCB8PSBFMTAwMF9WVF9DVExfVk1fUkVQTF9FTjsKKwllbHNlCisJCXZ0X2N0bCAmPSB+RTEwMDBfVlRfQ1RMX1ZNX1JFUExfRU47CisKKwl3cjMyKEUxMDAwX1ZUX0NUTCwgdnRfY3RsKTsKK30KKwogc3RhdGljIHN0cnVjdCBlMTAwMF9tYWNfb3BlcmF0aW9ucyBlMTAwMF9tYWNfb3BzXzgyNTc1ID0gewogCS5yZXNldF9odyAgICAgICAgICAgICA9IGlnYl9yZXNldF9od184MjU3NSwKIAkuaW5pdF9odyAgICAgICAgICAgICAgPSBpZ2JfaW5pdF9od184MjU3NSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKaW5kZXggNDliNDFjOS4uZWFmOTc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTQwLDggKzQwLDExIEBACiAjZGVmaW5lIEUxMDAwX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIFNoaWZ0IF9sZWZ0XyAqLwogI2RlZmluZSBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRiAgICAgICAgICAgICAgICAweDAyMDAwMDAwCiAjZGVmaW5lIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTICAgICAgICAgIDB4MEEwMDAwMDAKKyNkZWZpbmUgRTEwMDBfU1JSQ1RMX0RST1BfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAogCiAjZGVmaW5lIEUxMDAwX01SUUNfRU5BQkxFX1JTU180USAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRTEwMDBfTVJRQ19FTkFCTEVfVk1EUSAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBFMTAwMF9NUlFDX0VOQUJMRV9WTURRX1JTU18yUSAgICAgICAweDAwMDAwMDA1CiAjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQICAgICAgIDB4MDA0MDAwMDAKICNkZWZpbmUgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9VRFAgICAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUF9FWCAgICAweDAxMDAwMDAwCkBAIC0xNTksNCArMTYyLDQ0IEBACiAjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkxfQ1BVSURfU0hJRlQgMjQgLyogVHggQ1BVSUQgbm93IGluIHRoZSBsYXN0IGJ5dGUgKi8KICNkZWZpbmUgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9TSElGVCAyNCAvKiBSeCBDUFVJRCBub3cgaW4gdGhlIGxhc3QgYnl0ZSAqLwogCisjZGVmaW5lIE1BWF9OVU1fVkZTICAgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBFMTAwMF9EVFhTV0NfVk1EUV9MT09QQkFDS19FTiAoMSA8PCAzMSkgIC8qIGdsb2JhbCBWRiBMQiBlbmFibGUgKi8KKworLyogRWFzeSBkZWZpbmVzIGZvciBzZXR0aW5nIGRlZmF1bHQgcG9vbCwgd291bGQgbm9ybWFsbHkgYmUgbGVmdCBhIHplcm8gKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9TSElGVCA3CisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9ERUZBVUxUX1BPT0xfTUFTSyAgKDB4NyA8PCBFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX1NISUZUKQorCisvKiBPdGhlciB1c2VmdWwgVk1EX0NUTCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9JR05PUkVfTUFDICAgICAgICAgKDEgPDwgMjgpCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9ESVNBQkxFX0RFRl9QT09MICAgKDEgPDwgMjkpCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9WTV9SRVBMX0VOICAgICAgICAgKDEgPDwgMzApCisKKy8qIFBlciBWTSBPZmZsb2FkIHJlZ2lzdGVyIHNldHVwICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JMUE1MX01BU0sgMHgwMDAwM0ZGRiAvKiBMb25nIFBhY2tldCBNYXhpbXVtIExlbmd0aCBtYXNrICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX0xQRSAgICAgICAgMHgwMDAxMDAwMCAvKiBBY2NlcHQgTG9uZyBwYWNrZXQgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUlNTRSAgICAgICAweDAwMDIwMDAwIC8qIEVuYWJsZSBSU1MgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfQVVQRSAgICAgICAweDAxMDAwMDAwIC8qIEFjY2VwdCB1bnRhZ2dlZCBwYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JPTVBFICAgICAgMHgwMjAwMDAwMCAvKiBBY2NlcHQgb3ZlcmZsb3cgbXVsdGljYXN0ICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JPUEUgICAgICAgMHgwNDAwMDAwMCAvKiBBY2NlcHQgb3ZlcmZsb3cgdW5pY2FzdCAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9CQU0gICAgICAgIDB4MDgwMDAwMDAgLyogQWNjZXB0IEJyb2FkY2FzdCBwYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX01QTUUgICAgICAgMHgxMDAwMDAwMCAvKiBNdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9TVFJWTEFOICAgIDB4NDAwMDAwMDAgLyogVmxhbiBzdHJpcHBpbmcgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1NUUkNSQyAgICAgMHg4MDAwMDAwMCAvKiBDUkMgc3RyaXBwaW5nIGVuYWJsZSAqLworCisjZGVmaW5lIEUxMDAwX1ZMVkZfQVJSQVlfU0laRSAgICAgMzIKKyNkZWZpbmUgRTEwMDBfVkxWRl9WTEFOSURfTUFTSyAgICAweDAwMDAwRkZGCisjZGVmaW5lIEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCAgMTIKKyNkZWZpbmUgRTEwMDBfVkxWRl9QT09MU0VMX01BU0sgICAoMHhGRiA8PCBFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQpCisjZGVmaW5lIEUxMDAwX1ZMVkZfTFZMQU4gICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUgIDB4ODAwMDAwMDAKKworI2RlZmluZSBFMTAwMF9JT1ZDVEwgMHgwNUJCQworI2RlZmluZSBFMTAwMF9JT1ZDVExfUkVVU0VfVkZRIDB4MDAwMDAwMDEKKworI2RlZmluZSBBTExfUVVFVUVTICAgMHhGRkZGCisKK3ZvaWQgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKK3ZvaWQgaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaAppbmRleCA1YTMyYTcwLi5hZDJkMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTQ1LDYgKzQ1LDggQEAKIAogLyogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBIDB4MDAwMDAwODAgLyogVmFsdWUgb2YgU1cgRGVmaW5lYWJsZSBQaW4gNyAqLworLyogUGh5c2ljYWwgRnVuYyBSZXNldCBEb25lIEluZGljYXRpb24gKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfUEZSU1REICAgIDB4MDAwMDQwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0sgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfUENJRV9TRVJERVMgIDB4MDBDMDAwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1NHTUlJICAgMHgwMDgwMDAwMApAQCAtMzI1LDYgKzMyNyw3IEBACiAjZGVmaW5lIEUxMDAwX0lDUl9SWFNFUSAgICAgICAgIDB4MDAwMDAwMDggLyogcnggc2VxdWVuY2UgZXJyb3IgKi8KICNkZWZpbmUgRTEwMDBfSUNSX1JYRE1UMCAgICAgICAgMHgwMDAwMDAxMCAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICgwKSAqLwogI2RlZmluZSBFMTAwMF9JQ1JfUlhUMCAgICAgICAgICAweDAwMDAwMDgwIC8qIHJ4IHRpbWVyIGludHIgKHJpbmcgMCkgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1ZNTUIgICAgICAgICAgMHgwMDAwMDEwMCAvKiBWTSBNQiBldmVudCAqLwogLyogSWYgdGhpcyBiaXQgYXNzZXJ0ZWQsIHRoZSBkcml2ZXIgc2hvdWxkIGNsYWltIHRoZSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCAgMHg4MDAwMDAwMAogLyogTEFOIGNvbm5lY3RlZCBkZXZpY2UgZ2VuZXJhdGVzIGFuIGludGVycnVwdCAqLwpAQCAtMzYyLDYgKzM2NSw3IEBACiAvKiBJbnRlcnJ1cHQgTWFzayBTZXQgKi8KICNkZWZpbmUgRTEwMDBfSU1TX1RYRFcgICAgICBFMTAwMF9JQ1JfVFhEVyAgICAgIC8qIFRyYW5zbWl0IGRlc2Mgd3JpdHRlbiBiYWNrICovCiAjZGVmaW5lIEUxMDAwX0lNU19MU0MgICAgICAgRTEwMDBfSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1ZNTUIgICAgICBFMTAwMF9JQ1JfVk1NQiAgICAgIC8qIE1haWwgYm94IGFjdGl2aXR5ICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWFNFUSAgICAgRTEwMDBfSUNSX1JYU0VRICAgICAvKiByeCBzZXF1ZW5jZSBlcnJvciAqLwogI2RlZmluZSBFMTAwMF9JTVNfUlhETVQwICAgIEUxMDAwX0lDUl9SWERNVDAgICAgLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAqLwogI2RlZmluZSBFMTAwMF9JTVNfUlhUMCAgICAgIEUxMDAwX0lDUl9SWFQwICAgICAgLyogcnggdGltZXIgaW50ciAqLwpAQCAtMzk5LDYgKzQwMyw4IEBACiAjZGVmaW5lIEUxMDAwX1JBSF9BViAgMHg4MDAwMDAwMCAgICAgICAgLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHZhbGlkICovCiAjZGVmaW5lIEUxMDAwX1JBTF9NQUNfQUREUl9MRU4gNAogI2RlZmluZSBFMTAwMF9SQUhfTUFDX0FERFJfTEVOIDIKKyNkZWZpbmUgRTEwMDBfUkFIX1BPT0xfTUFTSyAweDAzRkMwMDAwCisjZGVmaW5lIEUxMDAwX1JBSF9QT09MXzEgMHgwMDA0MDAwMAogCiAvKiBFcnJvciBDb2RlcyAqLwogI2RlZmluZSBFMTAwMF9FUlJfTlZNICAgICAgMQpAQCAtNDExLDYgKzQxNyw3IEBACiAjZGVmaW5lIEUxMDAwX0JMS19QSFlfUkVTRVQgICAxMgogI2RlZmluZSBFMTAwMF9FUlJfU1dGV19TWU5DIDEzCiAjZGVmaW5lIEUxMDAwX05PVF9JTVBMRU1FTlRFRCAxNAorI2RlZmluZSBFMTAwMF9FUlJfTUJYICAgICAgMTUKIAogLyogTG9vcCBsaW1pdCBvbiBob3cgbG9uZyB3ZSB3YWl0IGZvciBhdXRvLW5lZ290aWF0aW9uIHRvIGNvbXBsZXRlICovCiAjZGVmaW5lIENPUFBFUl9MSU5LX1VQX0xJTUlUICAgICAgICAgICAgICAxMApAQCAtNTA1LDYgKzUxMiw3IEBACiAjZGVmaW5lIE5WTV9JRF9MRURfU0VUVElOR1MgICAgICAgIDB4MDAwNAogLyogRm9yIFNFUkRFUyBvdXRwdXQgYW1wbGl0dWRlIGFkanVzdG1lbnQuICovCiAjZGVmaW5lIE5WTV9JTklUX0NPTlRST0wyX1JFRyAgICAgIDB4MDAwRgorI2RlZmluZSBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0IgICAweDAwMTQKICNkZWZpbmUgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9BICAgMHgwMDI0CiAjZGVmaW5lIE5WTV9BTFRfTUFDX0FERFJfUFRSICAgICAgIDB4MDAzNwogI2RlZmluZSBOVk1fQ0hFQ0tTVU1fUkVHICAgICAgICAgICAweDAwM0YKQEAgLTY1Nyw0ICs2NjUsOCBAQAogI2RlZmluZSBFMTAwMF9HRU5fQ1RMX0FERFJFU1NfU0hJRlQgICAgIDgKICNkZWZpbmUgRTEwMDBfR0VOX1BPTExfVElNRU9VVCAgICAgICAgICA2NDAKIAorI2RlZmluZSBFMTAwMF9WRlRBX0VOVFJZX1NISUZUICAgICAgICAgICAgICAgNQorI2RlZmluZSBFMTAwMF9WRlRBX0VOVFJZX01BU0sgICAgICAgICAgICAgICAgMHg3RgorI2RlZmluZSBFMTAwMF9WRlRBX0VOVFJZX0JJVF9TSElGVF9NQVNLICAgICAgMHgxRgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKaW5kZXggMTBiODcyZC4uNjhhYWMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF9yZWdzLmgiCiAjaW5jbHVkZSAiZTEwMDBfZGVmaW5lcy5oIgogCkBAIC00MSw2ICs0MCw4IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NiAgICAgICAgICAgICAgICAgICAgMHgxMEM5CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUiAgICAgICAgICAgICAgMHgxMEU2CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVMgICAgICAgICAgICAgMHgxMEU3CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUiAgICAgICAgMHgxMEU4CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9OUyAgICAgICAgICAgICAgICAgMHgxNTBBCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUiAgICAgICAgICAgMHgxMEE3CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUyAgICAgMHgxMEE5CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSICAgICAgMHgxMEQ2CkBAIC0yNzIsNiArMjczLDcgQEAKICNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF9waHkuaCIKICNpbmNsdWRlICJlMTAwMF9udm0uaCIKKyNpbmNsdWRlICJlMTAwMF9tYnguaCIKIAogc3RydWN0IGUxMDAwX21hY19vcGVyYXRpb25zIHsKIAlzMzIgICgqY2hlY2tfZm9yX2xpbmspKHN0cnVjdCBlMTAwMF9odyAqKTsKQEAgLTQyNyw2ICs0MjksMzQgQEAKIAllbnVtIGUxMDAwX2ZjX3R5cGUgb3JpZ2luYWxfdHlwZTsKIH07CiAKK3N0cnVjdCBlMTAwMF9tYnhfb3BlcmF0aW9ucyB7CisJczMyICgqaW5pdF9wYXJhbXMpKHN0cnVjdCBlMTAwMF9odyAqaHcpOworCXMzMiAoKnJlYWQpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCAgdTE2KTsKKwlzMzIgKCp3cml0ZSkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CisJczMyICgqcmVhZF9wb3N0ZWQpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCAgdTE2KTsKKwlzMzIgKCp3cml0ZV9wb3N0ZWQpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworCXMzMiAoKmNoZWNrX2Zvcl9tc2cpKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYpOworCXMzMiAoKmNoZWNrX2Zvcl9hY2spKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYpOworCXMzMiAoKmNoZWNrX2Zvcl9yc3QpKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYpOworfTsKKworc3RydWN0IGUxMDAwX21ieF9zdGF0cyB7CisJdTMyIG1zZ3NfdHg7CisJdTMyIG1zZ3Nfcng7CisKKwl1MzIgYWNrczsKKwl1MzIgcmVxczsKKwl1MzIgcnN0czsKK307CisKK3N0cnVjdCBlMTAwMF9tYnhfaW5mbyB7CisJc3RydWN0IGUxMDAwX21ieF9vcGVyYXRpb25zIG9wczsKKwlzdHJ1Y3QgZTEwMDBfbWJ4X3N0YXRzIHN0YXRzOworCXUzMiB0aW1lb3V0OworCXUzMiB1c2VjX2RlbGF5OworCXUxNiBzaXplOworfTsKKwogc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1IHsKIAlib29sIHNnbWlpX2FjdGl2ZTsKIH07CkBAIC00NDMsNiArNDczLDcgQEAKIAlzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gIHBoeTsKIAlzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gIG52bTsKIAlzdHJ1Y3QgZTEwMDBfYnVzX2luZm8gIGJ1czsKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gbWJ4OwogCXN0cnVjdCBlMTAwMF9ob3N0X21uZ19kaGNwX2Nvb2tpZSBtbmdfY29va2llOwogCiAJdW5pb24gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCmluZGV4IDVjMjQ5ZTIuLmY0YzMxNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKQEAgLTExOCw2ICsxMTgsMzcgQEAKIH0KIAogLyoqCisgKiAgaWdiX3ZmdGFfc2V0IC0gZW5hYmxlIG9yIGRpc2FibGUgdmxhbiBpbiBWTEFOIGZpbHRlciB0YWJsZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZpZDogVkxBTiBpZCB0byBhZGQgb3IgcmVtb3ZlCisgKiAgQGFkZDogaWYgdHJ1ZSBhZGQgZmlsdGVyLCBpZiBmYWxzZSByZW1vdmUKKyAqCisgKiAgU2V0cyBvciBjbGVhcnMgYSBiaXQgaW4gdGhlIFZMQU4gZmlsdGVyIHRhYmxlIGFycmF5IGJhc2VkIG9uIFZMQU4gaWQKKyAqICBhbmQgaWYgd2UgYXJlIGFkZGluZyBvciByZW1vdmluZyB0aGUgZmlsdGVyCisgKiovCitzMzIgaWdiX3ZmdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiB2aWQsIGJvb2wgYWRkKQoreworCXUzMiBpbmRleCA9ICh2aWQgPj4gRTEwMDBfVkZUQV9FTlRSWV9TSElGVCkgJiBFMTAwMF9WRlRBX0VOVFJZX01BU0s7CisJdTMyIG1hc2sgPSAxIDw8ICh2aWQgJiBFMTAwMF9WRlRBX0VOVFJZX0JJVF9TSElGVF9NQVNLKTsKKwl1MzIgdmZ0YSA9IGFycmF5X3JkMzIoRTEwMDBfVkZUQSwgaW5kZXgpOworCXMzMiByZXRfdmFsID0gMDsKKworCS8qIGJpdCB3YXMgc2V0L2NsZWFyZWQgYmVmb3JlIHdlIHN0YXJ0ZWQgKi8KKwlpZiAoKCEhKHZmdGEgJiBtYXNrKSkgPT0gYWRkKSB7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKKwl9IGVsc2UgeworCQlpZiAoYWRkKQorCQkJdmZ0YSB8PSBtYXNrOworCQllbHNlCisJCQl2ZnRhICY9IH5tYXNrOworCX0KKworCWlnYl93cml0ZV92ZnRhKGh3LCBpbmRleCwgdmZ0YSk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgaWdiX2NoZWNrX2FsdF9tYWNfYWRkciAtIENoZWNrIGZvciBhbHRlcm5hdGUgTUFDIGFkZHIKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAppbmRleCBlNTIwMGRlLi5hMzRkZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCkBAIC01OCw2ICs1OCw3IEBACiAKIHZvaWQgaWdiX2NsZWFyX2h3X2NudHJzX2Jhc2Uoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9jbGVhcl92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyICBpZ2JfdmZ0YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHZpZCwgYm9vbCBhZGQpOwogdm9pZCBpZ2JfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfbXRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSk7CiB2b2lkIGlnYl9wdXRfaHdfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNzFjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmMKQEAgLTAsMCArMSw0NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZTEwMDBfbWJ4LmgiCisKKy8qKgorICogIGlnYl9yZWFkX21ieCAtIFJlYWRzIGEgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gcmVhZAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bHkgcmVhZCBtZXNzYWdlIGZyb20gYnVmZmVyCisgKiovCitzMzIgaWdiX3JlYWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwkvKiBsaW1pdCByZWFkIHRvIHNpemUgb2YgbWFpbGJveCAqLworCWlmIChzaXplID4gbWJ4LT5zaXplKQorCQlzaXplID0gbWJ4LT5zaXplOworCisJaWYgKG1ieC0+b3BzLnJlYWQpCisJCXJldF92YWwgPSBtYngtPm9wcy5yZWFkKGh3LCBtc2csIHNpemUsIG1ieF9pZCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3dyaXRlX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzMzIgaWdiX3dyaXRlX21ieChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwlpZiAoc2l6ZSA+IG1ieC0+c2l6ZSkKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJZWxzZSBpZiAobWJ4LT5vcHMud3JpdGUpCisJCXJldF92YWwgPSBtYngtPm9wcy53cml0ZShodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfbXNnIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgbWFpbAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGlnYl9jaGVja19mb3JfbXNnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2cpCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfbXNnKGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfYWNrIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgQUNLCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaWdiX2NoZWNrX2Zvcl9hY2soc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAobWJ4LT5vcHMuY2hlY2tfZm9yX2FjaykKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2soaHcsIG1ieF9pZCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9yc3QgLSBjaGVja3MgdG8gc2VlIGlmIG90aGVyIHNpZGUgaGFzIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaWdiX2NoZWNrX2Zvcl9yc3Qoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAobWJ4LT5vcHMuY2hlY2tfZm9yX3JzdCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QoaHcsIG1ieF9pZCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3BvbGxfZm9yX21zZyAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICoqLworc3RhdGljIHMzMiBpZ2JfcG9sbF9mb3JfbXNnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlpbnQgY291bnRkb3duID0gbWJ4LT50aW1lb3V0OworCisJaWYgKCFtYngtPm9wcy5jaGVja19mb3JfbXNnKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChtYngtPm9wcy5jaGVja19mb3JfbXNnKGh3LCBtYnhfaWQpKSB7CisJCWlmICghY291bnRkb3duKQorCQkJYnJlYWs7CisJCWNvdW50ZG93bi0tOworCQl1ZGVsYXkobWJ4LT51c2VjX2RlbGF5KTsKKwl9CitvdXQ6CisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiAtRTEwMDBfRVJSX01CWDsKK30KKworLyoqCisgKiAgaWdiX3BvbGxfZm9yX2FjayAtIFdhaXQgZm9yIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIGFja25vd2xlZGdlbWVudAorICoqLworc3RhdGljIHMzMiBpZ2JfcG9sbF9mb3JfYWNrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlpbnQgY291bnRkb3duID0gbWJ4LT50aW1lb3V0OworCisJaWYgKCFtYngtPm9wcy5jaGVja19mb3JfYWNrKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3LCBtYnhfaWQpKSB7CisJCWlmICghY291bnRkb3duKQorCQkJYnJlYWs7CisJCWNvdW50ZG93bi0tOworCQl1ZGVsYXkobWJ4LT51c2VjX2RlbGF5KTsKKwl9CitvdXQ6CisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiAtRTEwMDBfRVJSX01CWDsKK30KKworLyoqCisgKiAgaWdiX3JlYWRfcG9zdGVkX21ieCAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZCByZWNlaXZlIG1lc3NhZ2UKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBub3RpZmljYXRpb24gYW5kCisgKiAgY29waWVkIGl0IGludG8gdGhlIHJlY2VpdmUgYnVmZmVyLgorICoqLworczMyIGlnYl9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmICghbWJ4LT5vcHMucmVhZCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaWdiX3BvbGxfZm9yX21zZyhodywgbWJ4X2lkKTsKKworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWQoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3dyaXRlX3Bvc3RlZF9tYnggLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gsIHdhaXQgZm9yIGFjaworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyIGFuZAorICogIHJlY2VpdmVkIGFuIGFjayB0byB0aGF0IG1lc3NhZ2Ugd2l0aGluIGRlbGF5ICogdGltZW91dCBwZXJpb2QKKyAqKi8KK3MzMiBpZ2Jfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwlpZiAoIW1ieC0+b3BzLndyaXRlKQorCQlnb3RvIG91dDsKKworCS8qIHNlbmQgbXNnKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCS8qIGlmIG1zZyBzZW50IHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhbiBhY2sgKi8KKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBpZ2JfcG9sbF9mb3JfYWNrKGh3LCBtYnhfaWQpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBlMTAwMF9pbml0X21ieF9vcHNfZ2VuZXJpYyAtIEluaXRpYWxpemUgTlZNIGZ1bmN0aW9uIHBvaW50ZXJzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0dXBzIHVwIHRoZSBmdW5jdGlvbiBwb2ludGVycyB0byBuby1vcCBmdW5jdGlvbnMKKyAqKi8KK3ZvaWQgZTEwMDBfaW5pdF9tYnhfb3BzX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCW1ieC0+b3BzLnJlYWRfcG9zdGVkID0gaWdiX3JlYWRfcG9zdGVkX21ieDsKKwltYngtPm9wcy53cml0ZV9wb3N0ZWQgPSBpZ2Jfd3JpdGVfcG9zdGVkX21ieDsKK30KKworc3RhdGljIHMzMiBpZ2JfY2hlY2tfZm9yX2JpdF9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgbWFzaykKK3sKKwl1MzIgbWJ2ZmljciA9IHJkMzIoRTEwMDBfTUJWRklDUik7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmIChtYnZmaWNyICYgbWFzaykgeworCQlyZXRfdmFsID0gMDsKKwkJd3IzMihFMTAwMF9NQlZGSUNSLCBtYXNrKTsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9tc2dfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgc2VudCBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpZ2JfY2hlY2tfZm9yX21zZ19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAoIWlnYl9jaGVja19mb3JfYml0X3BmKGh3LCBFMTAwMF9NQlZGSUNSX1ZGUkVRX1ZGMSA8PCB2Zl9udW1iZXIpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLnJlcXMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9hY2tfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgQUNLZWQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGlnYl9jaGVja19mb3JfYWNrX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmICghaWdiX2NoZWNrX2Zvcl9iaXRfcGYoaHcsIEUxMDAwX01CVkZJQ1JfVkZBQ0tfVkYxIDw8IHZmX251bWJlcikpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCWh3LT5tYnguc3RhdHMuYWNrcysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX3JzdF9wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyByZXNldAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2NoZWNrX2Zvcl9yc3RfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgdmZscmUgPSByZDMyKEUxMDAwX1ZGTFJFKTsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKHZmbHJlICYgKDEgPDwgdmZfbnVtYmVyKSkgeworCQlyZXRfdmFsID0gMDsKKwkJd3IzMihFMTAwMF9WRkxSRSwgKDEgPDwgdmZfbnVtYmVyKSk7CisJCWh3LT5tYnguc3RhdHMucnN0cysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2Jfd3JpdGVfbWJ4X3BmIC0gUGxhY2VzIGEgbWVzc2FnZSBpbiB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3dyaXRlX21ieF9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdmZfbnVtYmVyKQoreworCXUzMiBwMnZfbWFpbGJveDsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IGk7CisKKwkvKiBUYWtlIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyICovCisJd3IzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlciksIEUxMDAwX1AyVk1BSUxCT1hfUEZVKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG93bmVyc2hpcCBub3cuLi4gKi8KKwlwMnZfbWFpbGJveCA9IHJkMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpKTsKKwlpZiAoIShwMnZfbWFpbGJveCAmIEUxMDAwX1AyVk1BSUxCT1hfUEZVKSkgeworCQkvKiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgKi8KKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCQlnb3RvIG91dF9ub193cml0ZTsKKwl9CisKKwkvKgorCSAqIGZsdXNoIGFueSBhY2sgb3IgbXNnIHdoaWNoIG1heSBhbHJlYWR5IGJlIGluIHRoZSBxdWV1ZQorCSAqIGFzIHRoZXkgYXJlIGxpa2VseSB0aGUgcmVzdWx0IG9mIGFuIGVycm9yCisJICovCisJaWdiX2NoZWNrX2Zvcl9hY2tfcGYoaHcsIHZmX251bWJlcik7CisJaWdiX2NoZWNrX2Zvcl9tc2dfcGYoaHcsIHZmX251bWJlcik7CisKKwkvKiBjb3B5IHRoZSBjYWxsZXIgc3BlY2lmaWVkIG1lc3NhZ2UgdG8gdGhlIG1haWxib3ggbWVtb3J5IGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWFycmF5X3dyMzIoRTEwMDBfVk1CTUVNKHZmX251bWJlciksIGksIG1zZ1tpXSk7CisKKwkvKiBJbnRlcnJ1cHQgVkYgdG8gdGVsbCBpdCBhIG1lc3NhZ2UgaGFzIGJlZW4gc2VudCBhbmQgcmVsZWFzZSBidWZmZXIqLworCXdyMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpLCBFMTAwMF9QMlZNQUlMQk9YX1NUUyk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfdHgrKzsKKworb3V0X25vX3dyaXRlOgorCXJldHVybiByZXRfdmFsOworCit9CisKKy8qKgorICogIGlnYl9yZWFkX21ieF9wZiAtIFJlYWQgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIFRoaXMgZnVuY3Rpb24gY29waWVzIGEgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94IGJ1ZmZlciB0byB0aGUgY2FsbGVyJ3MKKyAqICBtZW1vcnkgYnVmZmVyLiAgVGhlIHByZXN1bXB0aW9uIGlzIHRoYXQgdGhlIGNhbGxlciBrbm93cyB0aGF0IHRoZXJlIHdhcworICogIGEgbWVzc2FnZSBkdWUgdG8gYSBWRiByZXF1ZXN0IHNvIG5vIHBvbGxpbmcgZm9yIG1lc3NhZ2UgaXMgbmVlZGVkLgorICoqLworc3RhdGljIHMzMiBpZ2JfcmVhZF9tYnhfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdmZfbnVtYmVyKQoreworCXUzMiBwMnZfbWFpbGJveDsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IGk7CisKKwkvKiBUYWtlIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyICovCisJd3IzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlciksIEUxMDAwX1AyVk1BSUxCT1hfUEZVKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG93bmVyc2hpcCBub3cuLi4gKi8KKwlwMnZfbWFpbGJveCA9IHJkMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpKTsKKwlpZiAoIShwMnZfbWFpbGJveCAmIEUxMDAwX1AyVk1BSUxCT1hfUEZVKSkgeworCQkvKiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgKi8KKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCQlnb3RvIG91dF9ub19yZWFkOworCX0KKworCS8qIGNvcHkgdGhlIG1lc3NhZ2UgdG8gdGhlIG1haWxib3ggbWVtb3J5IGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCW1zZ1tpXSA9IGFycmF5X3JkMzIoRTEwMDBfVk1CTUVNKHZmX251bWJlciksIGkpOworCisJLyogQWNrbm93bGVkZ2UgdGhlIG1lc3NhZ2UgYW5kIHJlbGVhc2UgYnVmZmVyICovCisJd3IzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlciksIEUxMDAwX1AyVk1BSUxCT1hfQUNLKTsKKworCS8qIHVwZGF0ZSBzdGF0cyAqLworCWh3LT5tYnguc3RhdHMubXNnc19yeCsrOworCisJcmV0X3ZhbCA9IDA7CisKK291dF9ub19yZWFkOgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBlMTAwMF9pbml0X21ieF9wYXJhbXNfcGYgLSBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBJbml0aWFsaXplcyB0aGUgaHctPm1ieCBzdHJ1Y3QgdG8gY29ycmVjdCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqLworczMyIGlnYl9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgeworCQltYngtPnRpbWVvdXQgPSAwOworCQltYngtPnVzZWNfZGVsYXkgPSAwOworCisJCW1ieC0+c2l6ZSA9IEUxMDAwX1ZGTUFJTEJPWF9TSVpFOworCisJCW1ieC0+b3BzLnJlYWQgPSBpZ2JfcmVhZF9tYnhfcGY7CisJCW1ieC0+b3BzLndyaXRlID0gaWdiX3dyaXRlX21ieF9wZjsKKwkJbWJ4LT5vcHMucmVhZF9wb3N0ZWQgPSBpZ2JfcmVhZF9wb3N0ZWRfbWJ4OworCQltYngtPm9wcy53cml0ZV9wb3N0ZWQgPSBpZ2Jfd3JpdGVfcG9zdGVkX21ieDsKKwkJbWJ4LT5vcHMuY2hlY2tfZm9yX21zZyA9IGlnYl9jaGVja19mb3JfbXNnX3BmOworCQltYngtPm9wcy5jaGVja19mb3JfYWNrID0gaWdiX2NoZWNrX2Zvcl9hY2tfcGY7CisJCW1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QgPSBpZ2JfY2hlY2tfZm9yX3JzdF9wZjsKKworCQltYngtPnN0YXRzLm1zZ3NfdHggPSAwOworCQltYngtPnN0YXRzLm1zZ3NfcnggPSAwOworCQltYngtPnN0YXRzLnJlcXMgPSAwOworCQltYngtPnN0YXRzLmFja3MgPSAwOworCQltYngtPnN0YXRzLnJzdHMgPSAwOworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjOTg5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguaApAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfRTEwMDBfTUJYX0hfCisjZGVmaW5lIF9FMTAwMF9NQlhfSF8KKworI2luY2x1ZGUgImUxMDAwX2h3LmgiCisKKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9TVFMgICAweDAwMDAwMDAxIC8qIEluaXRpYXRlIG1lc3NhZ2Ugc2VuZCB0byBWRiAqLworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX0FDSyAgIDB4MDAwMDAwMDIgLyogQWNrIG1lc3NhZ2UgcmVjdidkIGZyb20gVkYgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9WRlUgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfUEZVICAgMHgwMDAwMDAwOCAvKiBQRiBvd25zIHRoZSBtYWlsYm94IGJ1ZmZlciAqLworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX1JWRlUgIDB4MDAwMDAwMTAgLyogUmVzZXQgVkZVIC0gdXNlZCB3aGVuIFZGIHN0dWNrICovCisKKyNkZWZpbmUgRTEwMDBfTUJWRklDUl9WRlJFUV9NQVNLIDB4MDAwMDAwRkYgLyogYml0cyBmb3IgVkYgbWVzc2FnZXMgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklDUl9WRlJFUV9WRjEgIDB4MDAwMDAwMDEgLyogYml0IGZvciBWRiAxIG1lc3NhZ2UgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklDUl9WRkFDS19NQVNLIDB4MDBGRjAwMDAgLyogYml0cyBmb3IgVkYgYWNrcyAqLworI2RlZmluZSBFMTAwMF9NQlZGSUNSX1ZGQUNLX1ZGMSAgMHgwMDAxMDAwMCAvKiBiaXQgZm9yIFZGIDEgYWNrICovCisKKyNkZWZpbmUgRTEwMDBfVkZNQUlMQk9YX1NJWkUgICAxNiAvKiAxNiAzMiBiaXQgd29yZHMgLSA2NCBieXRlcyAqLworCisvKiBJZiBpdCdzIGEgRTEwMDBfVkZfKiBtc2cgdGhlbiBpdCBvcmlnaW5hdGVzIGluIHRoZSBWRiBhbmQgaXMgc2VudCB0byB0aGUKKyAqIFBGLiAgVGhlIHJldmVyc2UgaXMgdHJ1ZSBpZiBpdCBpcyBFMTAwMF9QRl8qLgorICogTWVzc2FnZSBBQ0sncyBhcmUgdGhlIHZhbHVlIG9yJ2Qgd2l0aCAweEYwMDAwMDAwCisgKi8KKyNkZWZpbmUgRTEwMDBfVlRfTVNHVFlQRV9BQ0sgICAgICAweDgwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGlzIGFyZSB0aGUgQUNLICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR1RZUEVfTkFDSyAgICAgMHg0MDAwMDAwMCAgLyogTWVzc2FnZXMgYmVsb3cgb3InZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBhcmUgdGhlIE5BQ0sgKi8KKyNkZWZpbmUgRTEwMDBfVlRfTVNHVFlQRV9DVFMgICAgICAweDIwMDAwMDAwICAvKiBJbmRpY2F0ZXMgdGhhdCBWRiBpcyBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyIHRvIHNlbmQgcmVxdWVzdHMgKi8KKyNkZWZpbmUgRTEwMDBfVlRfTVNHSU5GT19TSElGVCAgICAxNgorLyogYml0cyAyMzoxNiBhcmUgdXNlZCBmb3IgZXhyYSBpbmZvIGZvciBjZXJ0YWluIG1lc3NhZ2VzICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR0lORk9fTUFTSyAgICAgKDB4RkYgPDwgRTEwMDBfVlRfTVNHSU5GT19TSElGVCkKKworI2RlZmluZSBFMTAwMF9WRl9SRVNFVCAgICAgICAgICAgIDB4MDEgLyogVkYgcmVxdWVzdHMgcmVzZXQgKi8KKyNkZWZpbmUgRTEwMDBfVkZfU0VUX01BQ19BRERSICAgICAweDAyIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQUMgYWRkciAqLworI2RlZmluZSBFMTAwMF9WRl9TRVRfTVVMVElDQVNUICAgIDB4MDMgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1DIGFkZHIgKi8KKyNkZWZpbmUgRTEwMDBfVkZfU0VUX1ZMQU4gICAgICAgICAweDA0IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTEFOICovCisjZGVmaW5lIEUxMDAwX1ZGX1NFVF9MUEUgICAgICAgICAgMHgwNSAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVk1PTFIuTFBFICovCisKKyNkZWZpbmUgRTEwMDBfUEZfQ09OVFJPTF9NU0cgICAgICAweDAxMDAgLyogUEYgY29udHJvbCBtZXNzYWdlICovCisKK3MzMiBpZ2JfcmVhZF9tYngoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaWdiX3dyaXRlX21ieChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpZ2JfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGlnYl93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGlnYl9jaGVja19mb3JfbXNnKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYpOworczMyIGlnYl9jaGVja19mb3JfYWNrKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYpOworczMyIGlnYl9jaGVja19mb3JfcnN0KHN0cnVjdCBlMTAwMF9odyAqLCB1MTYpOworczMyIGlnYl9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGUxMDAwX2h3ICopOworCisjZW5kaWYgLyogX0UxMDAwX01CWF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKaW5kZXggOTVlZDhlYy4uMGJkNzcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCkBAIC0yOTIsNyArMjkyLDcgQEAKICNkZWZpbmUgRTEwMDBfUkFIKF9pKSAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDA0ICsgKChfaSkgKiA4KSkgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNTRFNCArICgoX2kgLSAxNikgKiA4KSkpCiAjZGVmaW5lIEUxMDAwX1ZGVEEgICAgIDB4MDU2MDAgIC8qIFZMQU4gRmlsdGVyIFRhYmxlIEFycmF5IC0gUlcgQXJyYXkgKi8KLSNkZWZpbmUgRTEwMDBfVk1EX0NUTCAgMHgwNTgxQyAgLyogVk1EcSBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMICAgMHgwNTgxQyAgLyogVk1EcSBDb250cm9sIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfV1VDICAgICAgMHgwNTgwMCAgLyogV2FrZXVwIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVUZDICAgICAweDA1ODA4ICAvKiBXYWtldXAgRmlsdGVyIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVVMgICAgICAweDA1ODEwICAvKiBXYWtldXAgU3RhdHVzIC0gUk8gKi8KQEAgLTMyMCw2ICszMjAsMjMgQEAKICNkZWZpbmUgRTEwMDBfUkVUQShfaSkgICgweDA1QzAwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgRTEwMDBfUlNTUksoX2kpICgweDA1QzgwICsgKChfaSkgKiA0KSkgLyogUlNTIFJhbmRvbSBLZXkgLSBSVyBBcnJheSAqLwogCisvKiBWVCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklDUiAgIDB4MDBDODAgLyogTWFpbGJveCBWRiBDYXVzZSAtIFJXQyAqLworI2RlZmluZSBFMTAwMF9NQlZGSU1SICAgMHgwMEM4NCAvKiBNYWlsYm94IFZGIGludCBNYXNrIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVkZMUkUgICAgIDB4MDBDODggLyogVkYgUmVnaXN0ZXIgRXZlbnRzIC0gUldDICovCisjZGVmaW5lIEUxMDAwX1ZGUkUgICAgICAweDAwQzhDIC8qIFZGIFJlY2VpdmUgRW5hYmxlcyAqLworI2RlZmluZSBFMTAwMF9WRlRFICAgICAgMHgwMEM5MCAvKiBWRiBUcmFuc21pdCBFbmFibGVzICovCisjZGVmaW5lIEUxMDAwX1FERSAgICAgICAweDAyNDA4IC8qIFF1ZXVlIERyb3AgRW5hYmxlIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRFRYU1dDICAgIDB4MDM1MDAgLyogRE1BIFR4IFN3aXRjaCBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUlBMT0xSICAgIDB4MDVBRjAgLyogUmVwbGljYXRpb24gT2ZmbG9hZCAtIFJXICovCisjZGVmaW5lIEUxMDAwX0lPVlRDTCAgICAweDA1QkJDIC8qIElPViBDb250cm9sIFJlZ2lzdGVyICovCisvKiBUaGVzZSBhY3QgcGVyIFZGIHNvIGFuIGFycmF5IGZyaWVuZGx5IG1hY3JvIGlzIHVzZWQgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWChfbikgICAoMHgwMEMwMCArICg0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZNQk1FTShfbikgICAgICAgKDB4MDA4MDAgKyAoNjQgKiAoX24pKSkKKyNkZWZpbmUgRTEwMDBfVk1PTFIoX24pICAgICAgICAoMHgwNUFEMCArICg0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZMVkYoX24pICAgICAgICAgKDB4MDVEMDAgKyAoNCAqIChfbikpKSAvKiBWTEFOIFZpcnR1YWwgTWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRmlsdGVyIC0gUlcgKi8KKwogI2RlZmluZSB3cjMyKHJlZywgdmFsdWUpICh3cml0ZWwodmFsdWUsIGh3LT5od19hZGRyICsgcmVnKSkKICNkZWZpbmUgcmQzMihyZWcpIChyZWFkbChody0+aHdfYWRkciArIHJlZykpCiAjZGVmaW5lIHdyZmwoKSAoKHZvaWQpcmQzMihFMTAwMF9TVEFUVVMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCmluZGV4IDQ5ZmMwZGEuLjRlODQ2NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKQEAgLTU3LDggKzU3LDIxIEBACiAjZGVmaW5lIElHQl9NSU5fSVRSX1VTRUNTICAgICAgICAgICAgICAgICAxMAogCiAvKiBUcmFuc21pdCBhbmQgcmVjZWl2ZSBxdWV1ZXMgKi8KLSNkZWZpbmUgSUdCX01BWF9SWF9RVUVVRVMgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIElHQl9NQVhfVFhfUVVFVUVTICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJR0JfTUFYX1JYX1FVRVVFUyAgICAgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPiA2ID8gMSA6IDIpIDogNCkKKyNkZWZpbmUgSUdCX01BWF9UWF9RVUVVRVMgICAgIElHQl9NQVhfUlhfUVVFVUVTCisjZGVmaW5lIElHQl9BQlNfTUFYX1RYX1FVRVVFUyAgICAgNAorCisjZGVmaW5lIElHQl9NQVhfVkZfTUNfRU5UUklFUyAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSUdCX01BWF9WRl9GVU5DVElPTlMgICAgICAgICAgICAgICA4CisjZGVmaW5lIElHQl9NQVhfVkZUQV9FTlRSSUVTICAgICAgICAgICAgICAgMTI4CisKK3N0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgeworCXVuc2lnbmVkIGNoYXIgdmZfbWFjX2FkZHJlc3Nlc1tFVEhfQUxFTl07CisJdTE2IHZmX21jX2hhc2hlc1tJR0JfTUFYX1ZGX01DX0VOVFJJRVNdOworCXUxNiBudW1fdmZfbWNfaGFzaGVzOworCWJvb2wgY2xlYXJfdG9fc2VuZDsKK307CiAKIC8qIFJYIGRlc2NyaXB0b3IgY29udHJvbCB0aHJlc2hvbGRzLgogICogUFRIUkVTSCAtIE1BQyB3aWxsIGNvbnNpZGVyIHByZWZldGNoIGlmIGl0IGhhcyBmZXdlciB0aGFuIHRoaXMgbnVtYmVyIG9mCkBAIC04Niw4ICs5OSw3IEBACiAjZGVmaW5lIElHQl9SWEJVRkZFUl8yMDQ4ICAyMDQ4CiAjZGVmaW5lIElHQl9SWEJVRkZFUl8xNjM4NCAxNjM4NAogCi0vKiBQYWNrZXQgQnVmZmVyIGFsbG9jYXRpb25zICovCi0KKyNkZWZpbmUgTUFYX1NURF9KVU1CT19GUkFNRV9TSVpFIDkyMzQKIAogLyogSG93IG1hbnkgVHggRGVzY3JpcHRvcnMgZG8gd2UgbmVlZCB0byBjYWxsIG5ldGlmX3dha2VfcXVldWUgPyAqLwogI2RlZmluZSBJR0JfVFhfUVVFVUVfV0FLRQkxNgpAQCAtMTcwLDEwICsxODIsNiBAQAogCWNoYXIgbmFtZVtJRk5BTVNJWiArIDVdOwogfTsKIAotI2RlZmluZSBJR0JfREVTQ19VTlVTRUQoUikgXAotCSgoKChSKS0+bmV4dF90b19jbGVhbiA+IChSKS0+bmV4dF90b191c2UpID8gMCA6IChSKS0+Y291bnQpICsgXAotCShSKS0+bmV4dF90b19jbGVhbiAtIChSKS0+bmV4dF90b191c2UgLSAxKQotCiAjZGVmaW5lIEUxMDAwX1JYX0RFU0NfQURWKFIsIGkpCSAgICBcCiAJKCYoKCh1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKICNkZWZpbmUgRTEwMDBfVFhfREVTQ19BRFYoUiwgaSkJICAgIFwKQEAgLTI2Nyw5ICsyNzUsMTEgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdTMyIGVlcHJvbV93b2w7CiAKLQlzdHJ1Y3QgaWdiX3JpbmcgKm11bHRpX3R4X3RhYmxlW0lHQl9NQVhfVFhfUVVFVUVTXTsKKwlzdHJ1Y3QgaWdiX3JpbmcgKm11bHRpX3R4X3RhYmxlW0lHQl9BQlNfTUFYX1RYX1FVRVVFU107CiAJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CisJdW5zaWduZWQgaW50IHZmc19hbGxvY2F0ZWRfY291bnQ7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZfZGF0YTsKIH07CiAKICNkZWZpbmUgSUdCX0ZMQUdfSEFTX01TSSAgICAgICAgICAgKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKaW5kZXggMzFmOWE2NC4uZmIwOWM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKQEAgLTM5OCw3ICszOTgsNyBAQAogCXJlZ3NfYnVmZlszNF0gPSByZDMyKEUxMDAwX1JMUE1MKTsKIAlyZWdzX2J1ZmZbMzVdID0gcmQzMihFMTAwMF9SRkNUTCk7CiAJcmVnc19idWZmWzM2XSA9IHJkMzIoRTEwMDBfTVJRQyk7Ci0JcmVnc19idWZmWzM3XSA9IHJkMzIoRTEwMDBfVk1EX0NUTCk7CisJcmVnc19idWZmWzM3XSA9IHJkMzIoRTEwMDBfVlRfQ1RMKTsKIAogCS8qIFRyYW5zbWl0ICovCiAJcmVnc19idWZmWzM4XSA9IHJkMzIoRTEwMDBfVENUTCk7CkBAIC0xNzc5LDYgKzE3NzksMTUgQEAKIAkJLyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSOgorCQkvKiBxdWFkIHBvcnQgYWRhcHRlcnMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgKi8KKwkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19RVUFEX1BPUlRfQSkpIHsKKwkJCXdvbC0+c3VwcG9ydGVkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCS8qIHJldHVybiBzdWNjZXNzIGZvciBub24gZXhjbHVkZWQgYWRhcHRlciBwb3J0cyAqLworCQlyZXR2YWwgPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBkdWFsIHBvcnQgY2FyZHMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgZnJvbSBub3cgb24KIAkJICogdW5sZXNzIGl0IHdhcyBlbmFibGVkIGluIHRoZSBlZXByb20gZm9yIHBvcnQgQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCA0M2Y0ODlhLi5jYTg0MjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtNjIsOCArNjIsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlnYl9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2KSwgYm9hcmRfODI1NzUgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfTlMpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVFQl9DT1BQRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3NSB9LApAQCAtMTA2LDcgKzEwOCw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfb3RoZXIoaW50IGlycSwgdm9pZCAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF9yeChpbnQgaXJxLCB2b2lkICopOwogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X3R4KGludCBpcnEsIHZvaWQgKik7Ci1zdGF0aWMgaW50IGlnYl9jbGVhbl9yeF9yaW5nX21zaXgoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CiAjaWZkZWYgQ09ORklHX0lHQl9EQ0EKIHN0YXRpYyB2b2lkIGlnYl91cGRhdGVfcnhfZGNhKHN0cnVjdCBpZ2JfcmluZyAqKTsKIHN0YXRpYyB2b2lkIGlnYl91cGRhdGVfdHhfZGNhKHN0cnVjdCBpZ2JfcmluZyAqKTsKQEAgLTEyMyw2ICsxMjQsMTYgQEAKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2KTsKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyBpbnQgaWdiX3Jjdl9tc2dfZnJvbV92ZihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgdTMyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3JhaF9wb29sKHN0cnVjdCBlMTAwMF9odyAqLCBpbnQgLCBpbnQpOworc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIHUxNik7CitzdGF0aWMgdm9pZCBpZ2Jfdm1tX2NvbnRyb2woc3RydWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfdm1vbHIoc3RydWN0IGUxMDAwX2h3ICosIGludCk7CitzdGF0aWMgaW5saW5lIGludCBpZ2Jfc2V0X3ZmX3JscG1sKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIGludCk7CitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50LCB1bnNpZ25lZCBjaGFyICopOworc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICosIHBtX21lc3NhZ2VfdCk7CiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xMzcsMTIgKzE0OCwxOCBAQAogCS5wcmlvcml0eQk9IDAKIH07CiAjZW5kaWYKLQogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAvKiBmb3IgbmV0ZHVtcCAvIG5ldCBjb25zb2xlICovCiBzdGF0aWMgdm9pZCBpZ2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKK3N0YXRpYyBzc2l6ZV90IGlnYl9zZXRfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBzaXplX3QpOworc3RhdGljIHNzaXplX3QgaWdiX3Nob3dfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKTsKK0RFVklDRV9BVFRSKG51bV92ZnMsIFNfSVJVR08gfCBTX0lXVVNSLCBpZ2Jfc2hvd19udW1fdmZzLCBpZ2Jfc2V0X251bV92ZnMpOworI2VuZGlmCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpZ2JfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKiwKIAkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90KTsKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGlnYl9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICopOwpAQCAtMjYxLDYgKzI3OCwxNyBAQAogI2VuZGlmCiAKIC8qKgorICogaWdiX2Rlc2NfdW51c2VkIC0gY2FsY3VsYXRlIGlmIHdlIGhhdmUgdW51c2VkIGRlc2NyaXB0b3JzCisgKiovCitzdGF0aWMgaW50IGlnYl9kZXNjX3VudXNlZChzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcpCit7CisJaWYgKHJpbmctPm5leHRfdG9fY2xlYW4gPiByaW5nLT5uZXh0X3RvX3VzZSkKKwkJcmV0dXJuIHJpbmctPm5leHRfdG9fY2xlYW4gLSByaW5nLT5uZXh0X3RvX3VzZSAtIDE7CisKKwlyZXR1cm4gcmluZy0+Y291bnQgKyByaW5nLT5uZXh0X3RvX2NsZWFuIC0gcmluZy0+bmV4dF90b191c2UgLSAxOworfQorCisvKioKICAqIGlnYl9pbml0X21vZHVsZSAtIERyaXZlciBSZWdpc3RyYXRpb24gUm91dGluZQogICoKICAqIGlnYl9pbml0X21vZHVsZSBpcyB0aGUgZmlyc3Qgcm91dGluZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzCkBAIC0zMTMsNiArMzQxLDcgQEAKIHN0YXRpYyB2b2lkIGlnYl9jYWNoZV9yaW5nX3JlZ2lzdGVyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmJhc2Vfb2Zmc2V0ID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAogCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTc2OgpAQCAtMzIyLDkgKzM1MSwxMSBAQAogCQkgKiBhbmQgY29udGludWUgY29uc3VtaW5nIHF1ZXVlcyBpbiB0aGUgc2FtZSBzZXF1ZW5jZQogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IFFfSURYXzgyNTc2KGkpOworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGkpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gUV9JRFhfODI1NzYoaSk7CisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKworCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUV9JRFhfODI1NzYoaSk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzU6CiAJZGVmYXVsdDoKQEAgLTQyNCw3ICs0NTUsNyBAQAogCQkgICBhIHZlY3RvciBudW1iZXIgYWxvbmcgd2l0aCBhICJ2YWxpZCIgYml0LiAgU2FkbHksIHRoZSBsYXlvdXQKIAkJICAgb2YgdGhlIHRhYmxlIGlzIHNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmUuICovCiAJCWlmIChyeF9xdWV1ZSA+IElHQl9OMF9RVUVVRSkgewotCQkJaW5kZXggPSAocnhfcXVldWUgPj4gMSk7CisJCQlpbmRleCA9IChyeF9xdWV1ZSA+PiAxKSArIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAJCQlpdmFyID0gYXJyYXlfcmQzMihFMTAwMF9JVkFSMCwgaW5kZXgpOwogCQkJaWYgKHJ4X3F1ZXVlICYgMHgxKSB7CiAJCQkJLyogdmVjdG9yIGdvZXMgaW50byB0aGlyZCBieXRlIG9mIHJlZ2lzdGVyICovCkBAIC00MzksNyArNDcwLDcgQEAKIAkJCWFycmF5X3dyMzIoRTEwMDBfSVZBUjAsIGluZGV4LCBpdmFyKTsKIAkJfQogCQlpZiAodHhfcXVldWUgPiBJR0JfTjBfUVVFVUUpIHsKLQkJCWluZGV4ID0gKHR4X3F1ZXVlID4+IDEpOworCQkJaW5kZXggPSAodHhfcXVldWUgPj4gMSkgKyBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OwogCQkJaXZhciA9IGFycmF5X3JkMzIoRTEwMDBfSVZBUjAsIGluZGV4KTsKIAkJCWlmICh0eF9xdWV1ZSAmIDB4MSkgewogCQkJCS8qIHZlY3RvciBnb2VzIGludG8gaGlnaCBieXRlIG9mIHJlZ2lzdGVyICovCkBAIC01NzYsOSArNjA3LDYgQEAKIAkJCWdvdG8gb3V0OwogCQlyaW5nLT5pdHJfcmVnaXN0ZXIgPSBFMTAwMF9FSVRSKDApICsgKHZlY3RvciA8PCAyKTsKIAkJcmluZy0+aXRyX3ZhbCA9IGFkYXB0ZXItPml0cjsKLQkJLyogb3ZlcndyaXRlIHRoZSBwb2xsIHJvdXRpbmUgZm9yIE1TSVgsIHdlJ3ZlIGFscmVhZHkgZG9uZQotCQkgKiBuZXRpZl9uYXBpX2FkZCAqLwotCQlyaW5nLT5uYXBpLnBvbGwgPSAmaWdiX2NsZWFuX3J4X3JpbmdfbXNpeDsKIAkJdmVjdG9yKys7CiAJfQogCkBAIC03NjIsNyArNzkwLDEwIEBACiAJCXdyMzIoRTEwMDBfRUlBQywgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7CiAJCXdyMzIoRTEwMDBfRUlBTSwgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7CiAJCXdyMzIoRTEwMDBfRUlNUywgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7Ci0JCXdyMzIoRTEwMDBfSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX0RPVVRTWU5DKTsKKwkJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCQl3cjMyKEUxMDAwX01CVkZJTVIsIDB4RkYpOworCQl3cjMyKEUxMDAwX0lNUywgKEUxMDAwX0lNU19MU0MgfCBFMTAwMF9JTVNfVk1NQiB8CisJCSAgICAgICAgICAgICAgICAgRTEwMDBfSU1TX0RPVVRTWU5DKSk7CiAJfSBlbHNlIHsKIAkJd3IzMihFMTAwMF9JTVMsIElNU19FTkFCTEVfTUFTSyk7CiAJCXdyMzIoRTEwMDBfSUFNLCBJTVNfRU5BQkxFX01BU0spOwpAQCAtODUzLDEyICs4ODQsMTIgQEAKIAogCWlnYl9yeF9maWZvX2ZsdXNoXzgyNTc1KCZhZGFwdGVyLT5odyk7CiAKLQkvKiBjYWxsIElHQl9ERVNDX1VOVVNFRCB3aGljaCBhbHdheXMgbGVhdmVzCisJLyogY2FsbCBpZ2JfZGVzY191bnVzZWQgd2hpY2ggYWx3YXlzIGxlYXZlcwogCSAqIGF0IGxlYXN0IDEgZGVzY3JpcHRvciB1bnVzZWQgdG8gbWFrZSBzdXJlCiAJICogbmV4dF90b191c2UgIT0gbmV4dF90b19jbGVhbiAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKIAkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbaV07Ci0JCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyaW5nLCBJR0JfREVTQ19VTlVTRUQocmluZykpOworCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYocmluZywgaWdiX2Rlc2NfdW51c2VkKHJpbmcpKTsKIAl9CiAKIApAQCAtODg2LDYgKzkxNywxMCBAQAogCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCiAJCWlnYl9jb25maWd1cmVfbXNpeChhZGFwdGVyKTsKIAorCWlnYl92bW1fY29udHJvbChhZGFwdGVyKTsKKwlpZ2Jfc2V0X3JhaF9wb29sKGh3LCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50LCAwKTsKKwlpZ2Jfc2V0X3Ztb2xyKGh3LCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KTsKKwogCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMuICovCiAJcmQzMihFMTAwMF9JQ1IpOwogCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwpAQCAtMTAzOCw2ICsxMDczLDIwIEBACiAJZmMtPnNlbmRfeG9uID0gMTsKIAlmYy0+dHlwZSA9IGZjLT5vcmlnaW5hbF90eXBlOwogCisJLyogZGlzYWJsZSByZWNlaXZlIGZvciBhbGwgVkZzIGFuZCB3YWl0IG9uZSBzZWNvbmQgKi8KKwlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMCA7IGkgPCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OyBpKyspCisJCQlhZGFwdGVyLT52Zl9kYXRhW2ldLmNsZWFyX3RvX3NlbmQgPSBmYWxzZTsKKworCQkvKiBwaW5nIGFsbCB0aGUgYWN0aXZlIHZmcyB0byBsZXQgdGhlbSBrbm93IHdlIGFyZSBnb2luZyBkb3duICovCisJCQlpZ2JfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOworCisJCS8qIGRpc2FibGUgdHJhbnNtaXRzIGFuZCByZWNlaXZlcyAqLworCQl3cjMyKEUxMDAwX1ZGUkUsIDApOworCQl3cjMyKEUxMDAwX1ZGVEUsIDApOworCX0KKwogCS8qIEFsbG93IHRpbWUgZm9yIHBlbmRpbmcgbWFzdGVyIHJlcXVlc3RzIHRvIHJ1biAqLwogCWFkYXB0ZXItPmh3Lm1hYy5vcHMucmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKIAl3cjMyKEUxMDAwX1dVQywgMCk7CkBAIC0xMDkwLDExICsxMTM5LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IGUxMDAwX2h3ICpodzsKLQlzdHJ1Y3QgcGNpX2RldiAqdXNfZGV2OwogCWNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvICplaSA9IGlnYl9pbmZvX3RibFtlbnQtPmRyaXZlcl9kYXRhXTsKIAl1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQsIG1taW9fbGVuOwotCWludCBlcnIsIHBjaV91c2luZ19kYWMsIHBvczsKLQl1MTYgZWVwcm9tX2RhdGEgPSAwLCBzdGF0ZSA9IDA7CisJaW50IGVyciwgcGNpX3VzaW5nX2RhYzsKKwl1MTYgZWVwcm9tX2RhdGEgPSAwOwogCXUxNiBlZXByb21fYXBtZV9tYXNrID0gSUdCX0VFUFJPTV9BUE1FOwogCXUzMiBwYXJ0X251bTsKIApAQCAtMTEyMCwyNyArMTE2OCw2IEBACiAJCX0KIAl9CiAKLQkvKiA4MjU3NSByZXF1aXJlcyB0aGF0IHRoZSBwY2ktZSBsaW5rIHBhcnRuZXIgZGlzYWJsZSB0aGUgTDBzIHN0YXRlICovCi0Jc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUjoKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUzoKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSOgotCQl1c19kZXYgPSBwZGV2LT5idXMtPnNlbGY7Ci0JCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkodXNfZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7Ci0JCWlmIChwb3MpIHsKLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHVzX2RldiwgcG9zICsgUENJX0VYUF9MTktDVEwsCi0JCQkgICAgICAgICAgICAgICAgICAgICAmc3RhdGUpOwotCQkJc3RhdGUgJj0gflBDSUVfTElOS19TVEFURV9MMFM7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodXNfZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSk7Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LAotCQkJCSAiRGlzYWJsaW5nIEFTUE0gTDBzIHVwc3RyZWFtIHN3aXRjaCBwb3J0ICVzXG4iLAotCQkJCSBwY2lfbmFtZSh1c19kZXYpKTsKLQkJfQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQogCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgcGNpX3NlbGVjdF9iYXJzKHBkZXYsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1JFU09VUkNFX01FTSksCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ2JfZHJpdmVyX25hbWUpOwpAQCAtMTE1OCw3ICsxMTg1LDggQEAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IC1FTk9NRU07Ci0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpZ2JfYWRhcHRlciksIElHQl9NQVhfVFhfUVVFVUVTKTsKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IGlnYl9hZGFwdGVyKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBJR0JfQUJTX01BWF9UWF9RVUVVRVMpOwogCWlmICghbmV0ZGV2KQogCQlnb3RvIGVycl9hbGxvY19ldGhlcmRldjsKIApAQCAtMTI0OCw5ICsxMjc2LDcgQEAKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwotI2VuZGlmCiAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKQEAgLTEyODYsMTMgKzEzMTIsMTAgQEAKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIAotCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICZpZ2Jfd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOwotCi0JaW5pdF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIpOwotCWFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLmZ1bmN0aW9uID0gJmlnYl91cGRhdGVfcGh5X2luZm87Ci0JYWRhcHRlci0+cGh5X2luZm9fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgJmlnYl93YXRjaGRvZywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CisJc2V0dXBfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLCAmaWdiX3VwZGF0ZV9waHlfaW5mbywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGlnYl9yZXNldF90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIGlnYl93YXRjaGRvZ190YXNrKTsKQEAgLTEzMTYsOSArMTMzOSwxMCBAQAogCSAqIGVuYWJsZSB0aGUgQUNQSSBNYWdpYyBQYWNrZXQgZmlsdGVyCiAJICovCiAKLQlpZiAoaHctPmJ1cy5mdW5jID09IDAgfHwKLQkgICAgaHctPmRldmljZV9pZCA9PSBFMTAwMF9ERVZfSURfODI1NzVFQl9DT1BQRVIpCisJaWYgKGh3LT5idXMuZnVuYyA9PSAwKQogCQlody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EsIDEsICZlZXByb21fZGF0YSk7CisJZWxzZSBpZiAoaHctPmJ1cy5mdW5jID09IDEpCisJCWh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQiwgMSwgJmVlcHJvbV9kYXRhKTsKIAogCWlmIChlZXByb21fZGF0YSAmIGVlcHJvbV9hcG1lX21hc2spCiAJCWFkYXB0ZXItPmVlcHJvbV93b2wgfD0gRTEwMDBfV1VGQ19NQUc7CkBAIC0xMzM4LDYgKzEzNjIsMTYgQEAKIAkJaWYgKHJkMzIoRTEwMDBfU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCiAJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKIAkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJCS8qIGlmIHF1YWQgcG9ydCBhZGFwdGVyLCBkaXNhYmxlIFdvTCBvbiBhbGwgYnV0IHBvcnQgQSAqLworCQlpZiAoZ2xvYmFsX3F1YWRfcG9ydF9hICE9IDApCisJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKKwkJZWxzZQorCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfUVVBRF9QT1JUX0E7CisJCS8qIFJlc2V0IGZvciBtdWx0aXBsZSBxdWFkIHBvcnQgYWRhcHRlcnMgKi8KKwkJaWYgKCsrZ2xvYmFsX3F1YWRfcG9ydF9hID09IDQpCisJCQlnbG9iYWxfcXVhZF9wb3J0X2EgPSAwOworCQlicmVhazsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3b2wgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGVlcHJvbSBzZXR0aW5ncyAqLwpAQCAtMTM2MCw2ICsxMzk0LDE5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKKyNpZmRlZiBDT05GSUdfUENJX0lPVgorCS8qIHNpbmNlIGlvdiBmdW5jdGlvbmFsaXR5IGlzbid0IGNyaXRpY2FsIHRvIGJhc2UgZGV2aWNlIGZ1bmN0aW9uIHdlCisJICogY2FuIGFjY2VwdCBmYWlsdXJlLiAgSWYgaXQgZmFpbHMgd2UgZG9uJ3QgYWxsb3cgaW92IHRvIGJlIGVuYWJsZWQgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CisJCWVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgMCk7CisJCWlmICghZXJyKQorCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXRkZXYtPmRldiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAmZGV2X2F0dHJfbnVtX3Zmcyk7CisJCWlmIChlcnIpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBJT1ZcbiIpOworCX0KKworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lHQl9EQ0EKIAlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoJnBkZXYtPmRldikgPT0gMCkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBJR0JfRkxBR19EQ0FfRU5BQkxFRDsKQEAgLTE1MTUsNiArMTU2MiwyMCBAQAogCiAJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOwogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiByZWNsYWltIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gVkZzICovCisJaWYgKGFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJLyogZGlzYWJsZSBpb3YgYW5kIGFsbG93IHRpbWUgZm9yIHRyYW5zYWN0aW9ucyB0byBjbGVhciAqLworCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwkJbXNsZWVwKDUwMCk7CisKKwkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOworCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCW1zbGVlcCgxMDApOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSU9WIERpc2FibGVkXG4iKTsKKwl9CisjZW5kaWYKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIAlpZiAoaHctPmZsYXNoX2FkZHJlc3MpCiAJCWlvdW5tYXAoaHctPmZsYXNoX2FkZHJlc3MpOwpAQCAtMTYxNiw2ICsxNjc3LDEwIEBACiAJICogY2xlYW5fcnggaGFuZGxlciBiZWZvcmUgd2UgZG8gc28uICAqLwogCWlnYl9jb25maWd1cmUoYWRhcHRlcik7CiAKKwlpZ2Jfdm1tX2NvbnRyb2woYWRhcHRlcik7CisJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgMCk7CisJaWdiX3NldF92bW9scihodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7CisKIAllcnIgPSBpZ2JfcmVxdWVzdF9pcnEoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVxX2lycTsKQEAgLTE3OTYsMTAgKzE4NjEsMTEgQEAKIAkJd3IzMihFMTAwMF9EQ0FfVFhDVFJMKGopLCB0eGN0cmwpOwogCX0KIAotCS8qIFVzZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBUeCBJbnRlciBQYWNrZXQgR2FwIChJUEcpIHRpbWVyICovCisJLyogZGlzYWJsZSBxdWV1ZSAwIHRvIHByZXZlbnQgdGFpbCBidW1wIHcvbyByZS1jb25maWd1cmF0aW9uICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCXdyMzIoRTEwMDBfVFhEQ1RMKDApLCAwKTsKIAogCS8qIFByb2dyYW0gdGhlIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KLQogCXRjdGwgPSByZDMyKEUxMDAwX1RDVEwpOwogCXRjdGwgJj0gfkUxMDAwX1RDVExfQ1Q7CiAJdGN0bCB8PSBFMTAwMF9UQ1RMX1BTUCB8IEUxMDAwX1RDVExfUlRMQyB8CkBAIC0xOTUzLDYgKzIwMTksMzAgQEAKIAkJc3JyY3RsIHw9IEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGOwogCX0KIAorCS8qIEF0dGVudGlvbiEhISAgRm9yIFNSLUlPViBQRiBkcml2ZXIgb3BlcmF0aW9ucyB5b3UgbXVzdCBlbmFibGUKKwkgKiBxdWV1ZSBkcm9wIGZvciBhbGwgVkYgYW5kIFBGIHF1ZXVlcyB0byBwcmV2ZW50IGhlYWQgb2YgbGluZSBibG9ja2luZworCSAqIGlmIGFuIHVuLXRydXN0ZWQgVkYgZG9lcyBub3QgcHJvdmlkZSBkZXNjcmlwdG9ycyB0byBoYXJkd2FyZS4KKwkgKi8KKwlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkgeworCQl1MzIgdm1vbHI7CisKKwkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0ucmVnX2lkeDsKKworCQkvKiBzZXQgYWxsIHF1ZXVlIGRyb3AgZW5hYmxlIGJpdHMgKi8KKwkJd3IzMihFMTAwMF9RREUsIEFMTF9RVUVVRVMpOworCQlzcnJjdGwgfD0gRTEwMDBfU1JSQ1RMX0RST1BfRU47CisKKwkJLyogZGlzYWJsZSBxdWV1ZSAwIHRvIHByZXZlbnQgdGFpbCB3cml0ZSB3L28gcmUtY29uZmlnICovCisJCXdyMzIoRTEwMDBfUlhEQ1RMKDApLCAwKTsKKworCQl2bW9sciA9IHJkMzIoRTEwMDBfVk1PTFIoaikpOworCQlpZiAocmN0bCAmIEUxMDAwX1JDVExfTFBFKQorCQkJdm1vbHIgfD0gRTEwMDBfVk1PTFJfTFBFOworCQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA+IDApCisJCQl2bW9sciB8PSBFMTAwMF9WTU9MUl9SU1NFOworCQl3cjMyKEUxMDAwX1ZNT0xSKGopLCB2bW9scik7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OwogCQl3cjMyKEUxMDAwX1NSUkNUTChqKSwgc3JyY3RsKTsKQEAgLTE5NjIsNiArMjA1Miw1NCBAQAogfQogCiAvKioKKyAqIGlnYl9ybHBtbF9zZXQgLSBzZXQgbWF4aW11bSByZWNlaXZlIHBhY2tldCBzaXplCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgbWF4aW11bSByZWNlaXZhYmxlIHBhY2tldCBzaXplLgorICoqLworc3RhdGljIHZvaWQgaWdiX3JscG1sX3NldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIG1heF9mcmFtZV9zaXplID0gYWRhcHRlci0+bWF4X2ZyYW1lX3NpemU7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MTYgcGZfaWQgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OworCisJaWYgKGFkYXB0ZXItPnZsZ3JwKQorCQltYXhfZnJhbWVfc2l6ZSArPSBWTEFOX1RBR19TSVpFOworCisJLyogaWYgdmZzIGFyZSBlbmFibGVkIHdlIHNldCBSTFBNTCB0byB0aGUgbGFyZ2VzdCBwb3NzaWJsZSByZXF1ZXN0CisJICogc2l6ZSBhbmQgc2V0IHRoZSBWTU9MUiBSTFBNTCB0byB0aGUgc2l6ZSB3ZSBuZWVkICovCisJaWYgKHBmX2lkKSB7CisJCWlnYl9zZXRfdmZfcmxwbWwoYWRhcHRlciwgbWF4X2ZyYW1lX3NpemUsIHBmX2lkKTsKKwkJbWF4X2ZyYW1lX3NpemUgPSBNQVhfU1REX0pVTUJPX0ZSQU1FX1NJWkUgKyBWTEFOX1RBR19TSVpFOworCX0KKworCXdyMzIoRTEwMDBfUkxQTUwsIG1heF9mcmFtZV9zaXplKTsKK30KKworLyoqCisgKiBpZ2JfY29uZmlndXJlX3Z0X2RlZmF1bHRfcG9vbCAtIENvbmZpZ3VyZSBWVCBkZWZhdWx0IHBvb2wKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBwb29sCisgKiovCitzdGF0aWMgdm9pZCBpZ2JfY29uZmlndXJlX3Z0X2RlZmF1bHRfcG9vbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MTYgcGZfaWQgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OworCXUzMiB2dGN0bDsKKworCS8qIG5vdCBpbiBzci1pb3YgbW9kZSAtIGRvIG5vdGhpbmcgKi8KKwlpZiAoIXBmX2lkKQorCQlyZXR1cm47CisKKwl2dGN0bCA9IHJkMzIoRTEwMDBfVlRfQ1RMKTsKKwl2dGN0bCAmPSB+KEUxMDAwX1ZUX0NUTF9ERUZBVUxUX1BPT0xfTUFTSyB8CisJCSAgIEUxMDAwX1ZUX0NUTF9ESVNBQkxFX0RFRl9QT09MKTsKKwl2dGN0bCB8PSBwZl9pZCA8PCBFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX1NISUZUOworCXdyMzIoRTEwMDBfVlRfQ1RMLCB2dGN0bCk7Cit9CisKKy8qKgogICogaWdiX2NvbmZpZ3VyZV9yeCAtIENvbmZpZ3VyZSByZWNlaXZlIFVuaXQgYWZ0ZXIgUmVzZXQKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKQEAgLTE5NzMsNyArMjExMSw3IEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcmN0bCwgcnhjc3VtOwogCXUzMiByeGRjdGw7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKIAkvKiBkaXNhYmxlIHJlY2VpdmVzIHdoaWxlIHNldHRpbmcgdXAgdGhlIGRlc2NyaXB0b3JzICovCiAJcmN0bCA9IHJkMzIoRTEwMDBfUkNUTCk7CkBAIC0xOTg4LDcgKzIxMjYsNyBAQAogCSAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKIAkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbaV07Ci0JCWogPSByaW5nLT5yZWdfaWR4OworCQlpbnQgaiA9IHJpbmctPnJlZ19pZHg7CiAJCXJkYmEgPSByaW5nLT5kbWE7CiAJCXdyMzIoRTEwMDBfUkRCQUwoaiksCiAJCSAgICAgcmRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CkBAIC0yMDMyLDcgKzIxNzAsMTAgQEAKIAkJCQl3cml0ZWwocmV0YS5kd29yZCwKIAkJCQkgICAgICAgaHctPmh3X2FkZHIgKyBFMTAwMF9SRVRBKDApICsgKGogJiB+MykpOwogCQl9Ci0JCW1ycWMgPSBFMTAwMF9NUlFDX0VOQUJMRV9SU1NfNFE7CisJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJbXJxYyA9IEUxMDAwX01SUUNfRU5BQkxFX1ZNRFFfUlNTXzJROworCQllbHNlCisJCQltcnFjID0gRTEwMDBfTVJRQ19FTkFCTEVfUlNTXzRROwogCiAJCS8qIEZpbGwgb3V0IGhhc2ggZnVuY3Rpb24gc2VlZHMgKi8KIAkJZm9yIChqID0gMDsgaiA8IDEwOyBqKyspCkBAIC0yMDU3LDYgKzIxOTgsOSBAQAogCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1BDU0Q7CiAJCXdyMzIoRTEwMDBfUlhDU1VNLCByeGNzdW0pOwogCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBtdWx0aS1xdWV1ZSBmb3Igc3ItaW92ICovCisJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJd3IzMihFMTAwMF9NUlFDLCBFMTAwMF9NUlFDX0VOQUJMRV9WTURRKTsKIAkJLyogRW5hYmxlIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KIAkJcnhjc3VtID0gcmQzMihFMTAwMF9SWENTVU0pOwogCQlpZiAoYWRhcHRlci0+cnhfY3N1bSkKQEAgLTIwNjcsMTEgKzIyMTEsMTAgQEAKIAkJd3IzMihFMTAwMF9SWENTVU0sIHJ4Y3N1bSk7CiAJfQogCi0JaWYgKGFkYXB0ZXItPnZsZ3JwKQotCQl3cjMyKEUxMDAwX1JMUE1MLAotCQkJCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplICsgVkxBTl9UQUdfU0laRSk7Ci0JZWxzZQotCQl3cjMyKEUxMDAwX1JMUE1MLCBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSk7CisJLyogU2V0IHRoZSBkZWZhdWx0IHBvb2wgZm9yIHRoZSBQRidzIGZpcnN0IHF1ZXVlICovCisJaWdiX2NvbmZpZ3VyZV92dF9kZWZhdWx0X3Bvb2woYWRhcHRlcik7CisKKwlpZ2JfcmxwbWxfc2V0KGFkYXB0ZXIpOwogCiAJLyogRW5hYmxlIFJlY2VpdmVzICovCiAJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKQEAgLTIxMTQsMTkgKzIyNTcsMTQgQEAKIHN0YXRpYyB2b2lkIGlnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCSAgIHN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCWJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KIAlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7Ci0JYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSAwOwogCS8qIGJ1ZmZlcl9pbmZvIG11c3QgYmUgY29tcGxldGVseSBzZXQgdXAgaW4gdGhlIHRyYW5zbWl0IHBhdGggKi8KIH0KIApAQCAtMjMwMSw2ICsyNDM5LDggQEAKIAogCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7CiAKKwlpZ2Jfc2V0X3JhaF9wb29sKGh3LCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50LCAwKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMzE5LDcgKzI0NTksNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKLQl1OCAgKm10YV9saXN0OworCXU4ICAqbXRhX2xpc3QgPSBOVUxMOwogCXUzMiByY3RsOwogCWludCBpOwogCkBAIC0yMzQwLDE3ICsyNDgwLDE1IEBACiAJfQogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAKLQlpZiAoIW5ldGRldi0+bWNfY291bnQpIHsKLQkJLyogbm90aGluZyB0byBwcm9ncmFtLCBzbyBjbGVhciBtYyBsaXN0ICovCi0JCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBOVUxMLCAwLCAxLAotCQkJCQltYWMtPnJhcl9lbnRyeV9jb3VudCk7Ci0JCXJldHVybjsKKwlpZiAobmV0ZGV2LT5tY19jb3VudCkgeworCQltdGFfbGlzdCA9IGt6YWxsb2MobmV0ZGV2LT5tY19jb3VudCAqIDYsIEdGUF9BVE9NSUMpOworCQlpZiAoIW10YV9saXN0KSB7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgbXVsdGljYXN0IGZpbHRlciBsaXN0XG4iKTsKKwkJCXJldHVybjsKKwkJfQogCX0KIAotCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFtdGFfbGlzdCkKLQkJcmV0dXJuOwotCiAJLyogVGhlIHNoYXJlZCBmdW5jdGlvbiBleHBlY3RzIGEgcGFja2VkIGFycmF5IG9mIG9ubHkgYWRkcmVzc2VzLiAqLwogCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKIApAQCAtMjM2MCw3ICsyNDk4LDEzIEBACiAJCW1lbWNweShtdGFfbGlzdCArIChpKkVUSF9BTEVOKSwgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCQltY19wdHIgPSBtY19wdHItPm5leHQ7CiAJfQotCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtdGFfbGlzdCwgaSwgMSwgbWFjLT5yYXJfZW50cnlfY291bnQpOworCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtdGFfbGlzdCwgaSwKKwkgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ICsgMSwKKwkgICAgICAgICAgICAgICAgICAgICAgICBtYWMtPnJhcl9lbnRyeV9jb3VudCk7CisKKwlpZ2Jfc2V0X21jX2xpc3RfcG9vbHMoYWRhcHRlciwgaSwgbWFjLT5yYXJfZW50cnlfY291bnQpOworCWlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoYWRhcHRlcik7CisKIAlrZnJlZShtdGFfbGlzdCk7CiB9CiAKQEAgLTI0NzYsNiArMjYyMCw4IEBACiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAorCQkJaWdiX3BpbmdfYWxsX3ZmcyhhZGFwdGVyKTsKKwogCQkJLyogbGluayBzdGF0ZSBoYXMgY2hhbmdlZCwgc2NoZWR1bGUgcGh5IGluZm8gdXBkYXRlICovCiAJCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT5waHlfaW5mb190aW1lciwKQEAgLTI0OTEsNiArMjYzNyw4IEBACiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAKKwkJCWlnYl9waW5nX2FsbF92ZnMoYWRhcHRlcik7CisKIAkJCS8qIGxpbmsgc3RhdGUgaGFzIGNoYW5nZWQsIHNjaGVkdWxlIHBoeSBpbmZvIHVwZGF0ZSAqLwogCQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIsCkBAIC0yNTE0LDcgKzI2NjIsNyBAQAogCWlnYl91cGRhdGVfYWRhcHRpdmUoJmFkYXB0ZXItPmh3KTsKIAogCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCWlmIChJR0JfREVTQ19VTlVTRUQodHhfcmluZykgKyAxIDwgdHhfcmluZy0+Y291bnQpIHsKKwkJaWYgKGlnYl9kZXNjX3VudXNlZCh0eF9yaW5nKSArIDEgPCB0eF9yaW5nLT5jb3VudCkgewogCQkJLyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsCiAJCQkgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZwogCQkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCkBAIC0yODYxLDcgKzMwMDksMTggQEAKIAkJdHVfY21kIHw9IChFMTAwMF9UWERfQ01EX0RFWFQgfCBFMTAwMF9BRFZUWERfRFRZUF9DVFhUKTsKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJCQlfX2JlMTYgcHJvdG9jb2w7CisKKwkJCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgeworCQkJCWNvbnN0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmhkciA9CisJCQkJICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIqKXNrYi0+ZGF0YTsKKworCQkJCXByb3RvY29sID0gdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwkJCX0gZWxzZSB7CisJCQkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCQkJfQorCisJCQlzd2l0Y2ggKHByb3RvY29sKSB7CiAJCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJCQl0dV9jbWQgfD0gRTEwMDBfQURWVFhEX1RVQ01EX0lQVjQ7CiAJCQkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKQEAgLTI5MTQsMjUgKzMwNzMsMzMgQEAKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwogCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCUJVR19PTihsZW4gPj0gSUdCX01BWF9EQVRBX1BFUl9UWEQpOwogCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBsZW47CiAJLyogc2V0IHRpbWVfc3RhbXAgKmJlZm9yZSogZG1hIHRvIGhlbHAgYXZvaWQgYSBwb3NzaWJsZSByYWNlICovCiAJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKLQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgc2tiLT5kYXRhLCBsZW4sCi0JCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7CisJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtjb3VudF07CiAJY291bnQrKzsKLQlpKys7Ci0JaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCi0JCWkgPSAwOwogCiAJZm9yIChmID0gMDsgZiA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGYrKykgewogCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwogCisJCWkrKzsKKwkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7CiAKQEAgLTI5NDEsMTkgKzMxMDgsMTAgQEAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGxlbjsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJCWZyYWctPnBhZ2UsCi0JCQkJCQlmcmFnLT5wYWdlX29mZnNldCwKLQkJCQkJCWxlbiwKLQkJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbY291bnRdOwogCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CiAJfQogCi0JaSA9ICgoaSA9PSAwKSA/IHR4X3JpbmctPmNvdW50IC0gMSA6IGkgLSAxKTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0zMDQxLDcgKzMxOTksNyBAQAogCiAJLyogV2UgbmVlZCB0byBjaGVjayBhZ2FpbiBpbiBhIGNhc2UgYW5vdGhlciBDUFUgaGFzIGp1c3QKIAkgKiBtYWRlIHJvb20gYXZhaWxhYmxlLiAqLwotCWlmIChJR0JfREVTQ19VTlVTRUQodHhfcmluZykgPCBzaXplKQorCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgPCBzaXplKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQSByZXByaWV2ZSEgKi8KQEAgLTMwNTMsNyArMzIxMSw3IEBACiBzdGF0aWMgaW50IGlnYl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZywgaW50IHNpemUpCiB7Ci0JaWYgKElHQl9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBzaXplKQorCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgPj0gc2l6ZSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIF9faWdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBzaXplKTsKIH0KQEAgLTMwNjYsNiArMzIyNCw3IEBACiAJdW5zaWduZWQgaW50IGZpcnN0OwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdTggaGRyX2xlbiA9IDA7CisJaW50IGNvdW50ID0gMDsKIAlpbnQgdHNvID0gMDsKIAl1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4OwogCkBAIC0zMTAyLDE0ICszMjYxLDYgQEAKIAlpZiAodW5saWtlbHkoc2h0eC0+aGFyZHdhcmUpKSB7CiAJCXNodHgtPmluX3Byb2dyZXNzID0gMTsKIAkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX1RTVEFNUDsKLQl9IGVsc2UgaWYgKGxpa2VseSghc2h0eC0+c29mdHdhcmUpKSB7Ci0JCS8qCi0JCSAqIFRPRE86IGNhbiB0aGlzIGJlIHNvbHZlZCBpbiBkZXYuYzpkZXZfaGFyZF9zdGFydF94bWl0KCk/Ci0JCSAqIFRoZXJlIGFyZSBwcm9iYWJseSB1bm1vZGlmaWVkIGRyaXZlciB3aGljaCBkbyBzb21ldGhpbmcKLQkJICogbGlrZSB0aGlzIGFuZCB0aHVzIGRvbid0IHdvcmsgaW4gY29tYmluYXRpb24gd2l0aAotCQkgKiBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFLgotCQkgKi8KLQkJc2tiX29ycGhhbihza2IpOwogCX0KIAogCWlmIChhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKQEAgLTMxMzUsMTQgKzMyODYsMjMgQEAKIAkgICAgICAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19DU1VNOwogCi0JaWdiX3R4X3F1ZXVlX2FkdihhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywKLQkJCSBpZ2JfdHhfbWFwX2FkdihhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0KSwKLQkJCSBza2ItPmxlbiwgaGRyX2xlbik7CisJLyoKKwkgKiBjb3VudCByZWZsZWN0cyBkZXNjcmlwdG9ycyBtYXBwZWQsIGlmIDAgdGhlbiBtYXBwaW5nIGVycm9yCisJICogaGFzIG9jY3VyZWQgYW5kIHdlIG5lZWQgdG8gcmV3aW5kIHRoZSBkZXNjcmlwdG9yIHF1ZXVlCisJICovCisJY291bnQgPSBpZ2JfdHhfbWFwX2FkdihhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0KTsKIAotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLwotCWlnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDQpOworCWlmIChjb3VudCkgeworCQlpZ2JfdHhfcXVldWVfYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLCBjb3VudCwKKwkJCSAgICAgICAgIHNrYi0+bGVuLCBoZHJfbGVuKTsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwkJaWdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBNQVhfU0tCX0ZSQUdTICsgNCk7CisJfSBlbHNlIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLnRpbWVfc3RhbXAgPSAwOworCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGZpcnN0OworCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0zMTUzLDcgKzMzMTMsNyBAQAogCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZzsKIAogCWludCByX2lkeCA9IDA7Ci0Jcl9pZHggPSBza2ItPnF1ZXVlX21hcHBpbmcgJiAoSUdCX01BWF9UWF9RVUVVRVMgLSAxKTsKKwlyX2lkeCA9IHNrYi0+cXVldWVfbWFwcGluZyAmIChJR0JfQUJTX01BWF9UWF9RVUVVRVMgLSAxKTsKIAl0eF9yaW5nID0gYWRhcHRlci0+bXVsdGlfdHhfdGFibGVbcl9pZHhdOwogCiAJLyogVGhpcyBnb2VzIGJhY2sgdG8gdGhlIHF1ZXN0aW9uIG9mIGhvdyB0byBsb2dpY2FsbHkgbWFwIGEgdHggcXVldWUKQEAgLTMyMjAsNyArMzM4MCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotI2RlZmluZSBNQVhfU1REX0pVTUJPX0ZSQU1FX1NJWkUgOTIzNAogCWlmIChtYXhfZnJhbWUgPiBNQVhfU1REX0pVTUJPX0ZSQU1FX1NJWkUpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiTVRVID4gOTIxNiBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzI1NCw2ICszNDEzLDEyIEBACiAjZWxzZQogCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gUEFHRV9TSVpFIC8gMjsKICNlbmRpZgorCisJLyogaWYgc3ItaW92IGlzIGVuYWJsZWQgd2UgbmVlZCB0byBmb3JjZSBidWZmZXIgc2l6ZSB0byAxSyBvciBsYXJnZXIgKi8KKwlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCAmJgorCSAgICAoYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA8IElHQl9SWEJVRkZFUl8xMDI0KSkKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IElHQl9SWEJVRkZFUl8xMDI0OworCiAJLyogYWRqdXN0IGFsbG9jYXRpb24gaWYgTFBFIHByb3RlY3RzIHVzLCBhbmQgd2UgYXJlbid0IHVzaW5nIFNCUCAqLwogCWlmICgobWF4X2ZyYW1lID09IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikgfHwKIAkgICAgIChtYXhfZnJhbWUgPT0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpKQpAQCAtMzQyMywxNSArMzU4OCwxOSBAQAogCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCiAJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKIAl9Ci0JaWYgKCEoaWNyICYgRTEwMDBfSUNSX0xTQykpCi0JCWdvdG8gbm9fbGlua19pbnRlcnJ1cHQ7Ci0JaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwotCS8qIGd1YXJkIGFnYWluc3QgaW50ZXJydXB0IHdoZW4gd2UncmUgZ29pbmcgZG93biAqLwotCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwogCi1ub19saW5rX2ludGVycnVwdDoKLQl3cjMyKEUxMDAwX0lNUywgRTEwMDBfSU1TX0xTQyB8IEUxMDAwX0lNU19ET1VUU1lOQyk7CisJLyogQ2hlY2sgZm9yIGEgbWFpbGJveCBldmVudCAqLworCWlmIChpY3IgJiBFMTAwMF9JQ1JfVk1NQikKKwkJaWdiX21zZ190YXNrKGFkYXB0ZXIpOworCisJaWYgKGljciAmIEUxMDAwX0lDUl9MU0MpIHsKKwkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOworCQkvKiBndWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KKwkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOworCX0KKworCXdyMzIoRTEwMDBfSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX0RPVVRTWU5DIHwgRTEwMDBfSU1TX1ZNTUIpOwogCXdyMzIoRTEwMDBfRUlNUywgYWRhcHRlci0+ZWltc19vdGhlcik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zNTEzLDExICszNjgyLDExIEBACiAJCWRjYV9yeGN0cmwgPSByZDMyKEUxMDAwX0RDQV9SWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfcnhjdHJsICY9IH5FMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfcnhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV9yeGN0cmwgJj0gfkUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV9yeGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3J4Y3RybCB8PSBFMTAwMF9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCQlkY2FfcnhjdHJsIHw9IEUxMDAwX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CkBAIC0zNTQwLDExICszNzA5LDExIEBACiAJCWRjYV90eGN0cmwgPSByZDMyKEUxMDAwX0RDQV9UWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfdHhjdHJsICY9IH5FMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfdHhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV90eGN0cmwgJj0gfkUxMDAwX0RDQV9UWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV90eGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3R4Y3RybCB8PSBFMTAwMF9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwogCQl3cjMyKEUxMDAwX0RDQV9UWENUUkwocSksIGRjYV90eGN0cmwpOwpAQCAtMzYxOSw2ICszNzg4LDMyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19JR0JfRENBICovCiAKK3N0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQlwaW5nID0gRTEwMDBfUEZfQ09OVFJPTF9NU0c7CisJCWlmIChhZGFwdGVyLT52Zl9kYXRhW2ldLmNsZWFyX3RvX3NlbmQpCisJCQlwaW5nIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmcGluZywgMSwgaSk7CisJfQorfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICB1MzIgKm1zZ2J1ZiwgdTMyIHZmKQoreworCWludCBuID0gKG1zZ2J1ZlswXSAmIEUxMDAwX1ZUX01TR0lORk9fTUFTSykgPj4gRTEwMDBfVlRfTVNHSU5GT19TSElGVDsKKwl1MTYgKmhhc2hfbGlzdCA9ICh1MTYgKikmbXNnYnVmWzFdOworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmX2RhdGEgPSAmYWRhcHRlci0+dmZfZGF0YVt2Zl07CisJaW50IGk7CisKKwkvKiBvbmx5IHVwIHRvIDMwIGhhc2ggdmFsdWVzIHN1cHBvcnRlZCAqLworCWlmIChuID4gMzApCisJCW4gPSAzMDsKKworCS8qIHNhbHQgYXdheSB0aGUgbnVtYmVyIG9mIG11bHRpIGNhc3QgYWRkcmVzc2VzIGFzc2lnbmVkCisJICogdG8gdGhpcyBWRiBmb3IgbGF0ZXIgdXNlIHRvIHJlc3RvcmUgd2hlbiB0aGUgUEYgbXVsdGkgY2FzdAorCSAqIGxpc3QgY2hhbmdlcworCSAqLworCXZmX2RhdGEtPm51bV92Zl9tY19oYXNoZXMgPSBuOworCisJLyogVkZzIGFyZSBsaW1pdGVkIHRvIHVzaW5nIHRoZSBNVEEgaGFzaCB0YWJsZSBmb3IgdGhlaXIgbXVsdGljYXN0CisJICogYWRkcmVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2ldID0gaGFzaF9saXN0W2ldOzsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpZ2Jfc2V0X211bHRpKGFkYXB0ZXItPm5ldGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlICp2Zl9kYXRhOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQl2Zl9kYXRhID0gJmFkYXB0ZXItPnZmX2RhdGFbaV07CisJCWZvciAoaiA9IDA7IGogPCB2Zl9kYXRhLT5udW1fdmZfbWNfaGFzaGVzOyBqKyspCisJCQlpZ2JfbXRhX3NldChodywgdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2pdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9jbGVhcl92Zl92ZnRhKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBvb2xfbWFzaywgcmVnLCB2aWQ7CisJaW50IGk7CisKKwlwb29sX21hc2sgPSAxIDw8IChFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQgKyB2Zik7CisKKwkvKiBGaW5kIHRoZSB2bGFuIGZpbHRlciBmb3IgdGhpcyBpZCAqLworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9WTFZGX0FSUkFZX1NJWkU7IGkrKykgeworCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCisJCS8qIHJlbW92ZSB0aGUgdmYgZnJvbSB0aGUgcG9vbCAqLworCQlyZWcgJj0gfnBvb2xfbWFzazsKKworCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1BPT0xTRUxfTUFTSykgJiYKKwkJICAgIChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQlyZWcgPSAwOworCQkJdmlkID0gcmVnICYgRTEwMDBfVkxWRl9WTEFOSURfTUFTSzsKKwkJCWlnYl92ZnRhX3NldChodywgdmlkLCBmYWxzZSk7CisJCX0KKworCQl3cjMyKEUxMDAwX1ZMVkYoaSksIHJlZyk7CisJfQorfQorCitzdGF0aWMgczMyIGlnYl92bHZmX3NldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2aWQsIGJvb2wgYWRkLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmVnLCBpOworCisJLyogSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gVkZzIGFyZSBub3QgZW5hYmxlZCAqLworCWlmICghYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJcmV0dXJuIC0xOworCisJLyogRmluZCB0aGUgdmxhbiBmaWx0ZXIgZm9yIHRoaXMgaWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJcmVnID0gcmQzMihFMTAwMF9WTFZGKGkpKTsKKwkJaWYgKChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpICYmCisJCSAgICB2aWQgPT0gKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX01BU0spKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFkZCkgeworCQlpZiAoaSA9PSBFMTAwMF9WTFZGX0FSUkFZX1NJWkUpIHsKKwkJCS8qIERpZCBub3QgZmluZCBhIG1hdGNoaW5nIFZMQU4gSUQgZW50cnkgdGhhdCB3YXMKKwkJCSAqIGVuYWJsZWQuICBTZWFyY2ggZm9yIGEgZnJlZSBmaWx0ZXIgZW50cnksIGkuZS4KKwkJCSAqIG9uZSB3aXRob3V0IHRoZSBlbmFibGUgYml0IHNldAorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCQkJCWlmICghKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFKSB7CisJCQkvKiBGb3VuZCBhbiBlbmFibGVkL2F2YWlsYWJsZSBlbnRyeSAqLworCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKTsKKworCQkJLyogaWYgIWVuYWJsZWQgd2UgbmVlZCB0byBzZXQgdGhpcyB1cCBpbiB2ZnRhICovCisJCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQkJLyogYWRkIFZJRCB0byBmaWx0ZXIgdGFibGUsIGlmIGJpdCBhbHJlYWR5IHNldAorCQkJCSAqIFBGIG11c3QgaGF2ZSBhZGRlZCBpdCBvdXRzaWRlIG9mIHRhYmxlICovCisJCQkJaWYgKGlnYl92ZnRhX3NldChodywgdmlkLCB0cnVlKSkKKwkJCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArCisJCQkJCQlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KTsKKwkJCQlyZWcgfD0gRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFOworCQkJfQorCQkJcmVnICY9IH5FMTAwMF9WTFZGX1ZMQU5JRF9NQVNLOworCQkJcmVnIHw9IHZpZDsKKworCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaSA8IEUxMDAwX1ZMVkZfQVJSQVlfU0laRSkgeworCQkJLyogcmVtb3ZlIHZmIGZyb20gdGhlIHBvb2wgKi8KKwkJCXJlZyAmPSB+KDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKSk7CisJCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQkJaWYgKCEocmVnICYgRTEwMDBfVkxWRl9QT09MU0VMX01BU0spKSB7CisJCQkJcmVnID0gMDsKKwkJCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOworCQkJfQorCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnYnVmLCB1MzIgdmYpCit7CisJaW50IGFkZCA9IChtc2didWZbMF0gJiBFMTAwMF9WVF9NU0dJTkZPX01BU0spID4+IEUxMDAwX1ZUX01TR0lORk9fU0hJRlQ7CisJaW50IHZpZCA9IChtc2didWZbMV0gJiBFMTAwMF9WTFZGX1ZMQU5JRF9NQVNLKTsKKworCXJldHVybiBpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCBhZGQsIHZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9ldmVudChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogZGlzYWJsZSBtYWlsYm94IGZ1bmN0aW9uYWxpdHkgZm9yIHZmICovCisJYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOworCisJLyogcmVzZXQgb2ZmbG9hZHMgdG8gZGVmYXVsdHMgKi8KKwlpZ2Jfc2V0X3Ztb2xyKGh3LCB2Zik7CisKKwkvKiByZXNldCB2bGFucyBmb3IgZGV2aWNlICovCisJaWdiX2NsZWFyX3ZmX3ZmdGEoYWRhcHRlciwgdmYpOworCisJLyogcmVzZXQgbXVsdGljYXN0IHRhYmxlIGFycmF5IGZvciB2ZiAqLworCWFkYXB0ZXItPnZmX2RhdGFbdmZdLm51bV92Zl9tY19oYXNoZXMgPSAwOworCisJLyogRmx1c2ggYW5kIHJlc2V0IHRoZSBtdGEgd2l0aCB0aGUgbmV3IHZhbHVlcyAqLworCWlnYl9zZXRfbXVsdGkoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9tc2coc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1bnNpZ25lZCBjaGFyICp2Zl9tYWMgPSBhZGFwdGVyLT52Zl9kYXRhW3ZmXS52Zl9tYWNfYWRkcmVzc2VzOworCXUzMiByZWcsIG1zZ2J1ZlszXTsKKwl1OCAqYWRkciA9ICh1OCAqKSgmbXNnYnVmWzFdKTsKKworCS8qIHByb2Nlc3MgYWxsIHRoZSBzYW1lIGl0ZW1zIGNsZWFyZWQgaW4gYSBmdW5jdGlvbiBsZXZlbCByZXNldCAqLworCWlnYl92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7CisKKwkvKiBzZXQgdmYgbWFjIGFkZHJlc3MgKi8KKwlpZ2JfcmFyX3NldChodywgdmZfbWFjLCB2ZiArIDEpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCB2ZiArIDEpOworCisJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLworCXJlZyA9IHJkMzIoRTEwMDBfVkZURSk7CisJd3IzMihFMTAwMF9WRlRFLCByZWcgfCAoMSA8PCB2ZikpOworCXJlZyA9IHJkMzIoRTEwMDBfVkZSRSk7CisJd3IzMihFMTAwMF9WRlJFLCByZWcgfCAoMSA8PCB2ZikpOworCisJLyogZW5hYmxlIG1haWxib3ggZnVuY3Rpb25hbGl0eSBmb3IgdmYgKi8KKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gdHJ1ZTsKKworCS8qIHJlcGx5IHRvIHJlc2V0IHdpdGggYWNrIGFuZCB2ZiBtYWMgYWRkcmVzcyAqLworCW1zZ2J1ZlswXSA9IEUxMDAwX1ZGX1JFU0VUIHwgRTEwMDBfVlRfTVNHVFlQRV9BQ0s7CisJbWVtY3B5KGFkZHIsIHZmX21hYywgNik7CisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAzLCB2Zik7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWNfYWRkcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnLCBpbnQgdmYpCit7CisJCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSAoY2hhciAqKSZtc2dbMV07CisJCWludCBlcnIgPSAtMTsKKworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJCWVyciA9IGlnYl9zZXRfdmZfbWFjKGFkYXB0ZXIsIHZmLCBhZGRyKTsKKworCQlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyB2b2lkIGlnYl9yY3ZfYWNrX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbXNnID0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCisJLyogaWYgZGV2aWNlIGlzbid0IGNsZWFyIHRvIHNlbmQgaXQgc2hvdWxkbid0IGJlIHJlYWRpbmcgZWl0aGVyICovCisJaWYgKCFhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kKQorCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmbXNnLCAxLCB2Zik7Cit9CisKKworc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2ZjsKKworCWZvciAodmYgPSAwOyB2ZiA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IHZmKyspIHsKKwkJLyogcHJvY2VzcyBhbnkgcmVzZXQgcmVxdWVzdHMgKi8KKwkJaWYgKCFpZ2JfY2hlY2tfZm9yX3JzdChodywgdmYpKSB7CisJCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gZmFsc2U7CisJCQlpZ2JfdmZfcmVzZXRfZXZlbnQoYWRhcHRlciwgdmYpOworCQl9CisKKwkJLyogcHJvY2VzcyBhbnkgbWVzc2FnZXMgcGVuZGluZyAqLworCQlpZiAoIWlnYl9jaGVja19mb3JfbXNnKGh3LCB2ZikpCisJCQlpZ2JfcmN2X21zZ19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBhY2tzICovCisJCWlmICghaWdiX2NoZWNrX2Zvcl9hY2soaHcsIHZmKSkKKwkJCWlnYl9yY3ZfYWNrX2Zyb21fdmYoYWRhcHRlciwgdmYpOworCisJfQorfQorCitzdGF0aWMgaW50IGlnYl9yY3ZfbXNnX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJdTMyIG1ieF9zaXplID0gRTEwMDBfVkZNQUlMQk9YX1NJWkU7CisJdTMyIG1zZ2J1ZlttYnhfc2l6ZV07CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgcmV0dmFsOworCisJcmV0dmFsID0gaWdiX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CisKKwlpZiAocmV0dmFsKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCSAgICAgICAgIkVycm9yIHJlY2VpdmluZyBtZXNzYWdlIGZyb20gVkZcbiIpOworCisJLyogdGhpcyBpcyBhIG1lc3NhZ2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQsIGRvIG5vdGhpbmcgKi8KKwlpZiAobXNnYnVmWzBdICYgKEUxMDAwX1ZUX01TR1RZUEVfQUNLIHwgRTEwMDBfVlRfTVNHVFlQRV9OQUNLKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogdW50aWwgdGhlIHZmIGNvbXBsZXRlcyBhIHJlc2V0IGl0IHNob3VsZCBub3QgYmUKKwkgKiBhbGxvd2VkIHRvIHN0YXJ0IGFueSBjb25maWd1cmF0aW9uLgorCSAqLworCisJaWYgKG1zZ2J1ZlswXSA9PSBFMTAwMF9WRl9SRVNFVCkgeworCQlpZ2JfdmZfcmVzZXRfbXNnKGFkYXB0ZXIsIHZmKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCkgeworCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDEsIHZmKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzd2l0Y2ggKChtc2didWZbMF0gJiAweEZGRkYpKSB7CisJY2FzZSBFMTAwMF9WRl9TRVRfTUFDX0FERFI6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfbWFjX2FkZHIoYWRhcHRlciwgbXNnYnVmLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX01VTFRJQ0FTVDoKKwkJcmV0dmFsID0gaWdiX3NldF92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOworCQlicmVhazsKKwljYXNlIEUxMDAwX1ZGX1NFVF9MUEU6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfcmxwbWwoYWRhcHRlciwgbXNnYnVmWzFdLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX1ZMQU46CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfdmxhbihhZGFwdGVyLCBtc2didWYsIHZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVW5oYW5kbGVkIE1zZyAlMDh4XG4iLCBtc2didWZbMF0pOworCQlyZXR2YWwgPSAtMTsKKwkJYnJlYWs7CisJfQorCisJLyogbm90aWZ5IHRoZSBWRiBvZiB0aGUgcmVzdWx0cyBvZiB3aGF0IGl0IHNlbnQgdXMgKi8KKwlpZiAocmV0dmFsKQorCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCWVsc2UKKwkJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQUNLOworCisJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKioKICAqIGlnYl9pbnRyX21zaSAtIEludGVycnVwdCBIYW5kbGVyCiAgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCkBAIC0zNjkwLDYgKzQxNzUsMjYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2JfcnhfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcnhfcmluZy0+YWRhcHRlcjsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykgeworCQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9PSAxKQorCQkJaWdiX3NldF9pdHIoYWRhcHRlcik7CisJCWVsc2UKKwkJCWlnYl91cGRhdGVfcmluZ19pdHIocnhfcmluZyk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCisJCQl3cjMyKEUxMDAwX0VJTVMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOworCQllbHNlCisJCQlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwl9Cit9CisKIC8qKgogICogaWdiX3BvbGwgLSBOQVBJIFJ4IHBvbGxpbmcgY2FsbGJhY2sKICAqIEBuYXBpOiBuYXBpIHBvbGxpbmcgc3RydWN0dXJlCkBAIC0zNjk4LDY4ICs0MjAzLDMwIEBACiBzdGF0aWMgaW50IGlnYl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGlnYl9yaW5nLCBuYXBpKTsKLQlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JaW50IHR4X2NsZWFuX2NvbXBsZXRlLCB3b3JrX2RvbmUgPSAwOwotCi0JLyogdGhpcyBwb2xsIHJvdXRpbmUgb25seSBzdXBwb3J0cyBvbmUgdHggYW5kIG9uZSByeCBxdWV1ZSAqLwotI2lmZGVmIENPTkZJR19JR0JfRENBCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCi0JCWlnYl91cGRhdGVfdHhfZGNhKCZhZGFwdGVyLT50eF9yaW5nWzBdKTsKLSNlbmRpZgotCXR4X2NsZWFuX2NvbXBsZXRlID0gaWdiX2NsZWFuX3R4X2lycSgmYWRhcHRlci0+dHhfcmluZ1swXSk7Ci0KLSNpZmRlZiBDT05GSUdfSUdCX0RDQQotCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQotCQlpZ2JfdXBkYXRlX3J4X2RjYSgmYWRhcHRlci0+cnhfcmluZ1swXSk7Ci0jZW5kaWYKLQlpZ2JfY2xlYW5fcnhfaXJxX2FkdigmYWRhcHRlci0+cnhfcmluZ1swXSwgJndvcmtfZG9uZSwgYnVkZ2V0KTsKLQotCS8qIElmIG5vIFR4IGFuZCBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCi0JaWYgKCh0eF9jbGVhbl9jb21wbGV0ZSAmJiAod29ya19kb25lIDwgYnVkZ2V0KSkgfHwKLQkgICAgIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQotCQkJaWdiX3NldF9pdHIoYWRhcHRlcik7Ci0JCW5hcGlfY29tcGxldGUobmFwaSk7Ci0JCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBpZ2JfY2xlYW5fcnhfcmluZ19tc2l4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKLXsKLQlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGlnYl9yaW5nLCBuYXBpKTsKLQlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwotCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlpbnQgd29ya19kb25lID0gMDsKIAogI2lmZGVmIENPTkZJR19JR0JfRENBCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCisJaWYgKHJ4X3JpbmctPmFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWlnYl91cGRhdGVfcnhfZGNhKHJ4X3JpbmcpOwogI2VuZGlmCiAJaWdiX2NsZWFuX3J4X2lycV9hZHYocnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAotCS8qIElmIG5vdCBlbm91Z2ggUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KLQlpZiAoKHdvcmtfZG9uZSA9PSAwKSB8fCAhbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCW5hcGlfY29tcGxldGUobmFwaSk7Ci0KLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykgewotCQkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPT0gMSkKLQkJCQlpZ2Jfc2V0X2l0cihhZGFwdGVyKTsKLQkJCWVsc2UKLQkJCQlpZ2JfdXBkYXRlX3JpbmdfaXRyKHJ4X3JpbmcpOwotCQl9Ci0JCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJCXdyMzIoRTEwMDBfRUlNUywgcnhfcmluZy0+ZWltc192YWx1ZSk7Ci0KLQkJcmV0dXJuIDA7CisJaWYgKHJ4X3JpbmctPmJ1ZGR5KSB7CisjaWZkZWYgQ09ORklHX0lHQl9EQ0EKKwkJaWYgKHJ4X3JpbmctPmFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCisJCQlpZ2JfdXBkYXRlX3R4X2RjYShyeF9yaW5nLT5idWRkeSk7CisjZW5kaWYKKwkJaWYgKCFpZ2JfY2xlYW5fdHhfaXJxKHJ4X3JpbmctPmJ1ZGR5KSkKKwkJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAl9CiAKLQlyZXR1cm4gMTsKKwkvKiBJZiBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZ2JfcnhfaXJxX2VuYWJsZShyeF9yaW5nKTsKKwl9CisKKwlyZXR1cm4gd29ya19kb25lOwogfQogCiAvKioKQEAgLTM3OTMsOSArNDI2MCw2IEBACiAJCQkJdGltZWNvbXBhcmVfdHJhbnNmb3JtKCZhZGFwdGVyLT5jb21wYXJlLCBucyk7CiAJCQlza2JfdHN0YW1wX3R4KHNrYiwgJnNoaHd0c3RhbXBzKTsKIAkJfQotCi0JCS8qIGRlbGF5ZWQgb3JwaGFuaW5nOiBza2JfdHN0YW1wX3R4KCkgbmVlZHMgdGhlIHNvY2tldCAqLwotCQlza2Jfb3JwaGFuKHNrYik7CiAJfQogfQogCkBAIC0zODU2LDcgKzQzMjAsNyBAQAogCiAJaWYgKHVubGlrZWx5KGNvdW50ICYmCiAJCSAgICAgbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpICYmCi0JCSAgICAgSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IElHQl9UWF9RVUVVRV9XQUtFKSkgeworCQkgICAgIGlnYl9kZXNjX3VudXNlZCh0eF9yaW5nKSA+PSBJR0JfVFhfUVVFVUVfV0FLRSkpIHsKIAkJLyogTWFrZSBzdXJlIHRoYXQgYW55Ym9keSBzdG9wcGluZyB0aGUgcXVldWUgYWZ0ZXIgdGhpcwogCQkgKiBzZWVzIHRoZSBuZXcgbmV4dF90b19jbGVhbi4KIAkJICovCkBAIC00MTMzLDcgKzQ1OTcsNyBAQAogCX0KIAogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwotCWNsZWFuZWRfY291bnQgPSBJR0JfREVTQ19VTlVTRUQocnhfcmluZyk7CisJY2xlYW5lZF9jb3VudCA9IGlnYl9kZXNjX3VudXNlZChyeF9yaW5nKTsKIAogCWlmIChjbGVhbmVkX2NvdW50KQogCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYocnhfcmluZywgY2xlYW5lZF9jb3VudCk7CkBAIC00NDc2LDggKzQ5NDAsNiBAQAogCQlyY3RsICY9IH5FMTAwMF9SQ1RMX0NGSUVOOwogCQl3cjMyKEUxMDAwX1JDVEwsIHJjdGwpOwogCQlpZ2JfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwotCQl3cjMyKEUxMDAwX1JMUE1MLAotCQkJCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplICsgVkxBTl9UQUdfU0laRSk7CiAJfSBlbHNlIHsKIAkJLyogZGlzYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KIAkJY3RybCA9IHJkMzIoRTEwMDBfQ1RSTCk7CkBAIC00NDg4LDEwICs0OTUwLDEwIEBACiAJCQlpZ2Jfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsIGFkYXB0ZXItPm1uZ192bGFuX2lkKTsKIAkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gSUdCX01OR19WTEFOX05PTkU7CiAJCX0KLQkJd3IzMihFMTAwMF9STFBNTCwKLQkJCQlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSk7CiAJfQogCisJaWdiX3JscG1sX3NldChhZGFwdGVyKTsKKwogCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CiB9CkBAIC00NTAwLDI0ICs0OTYyLDI1IEBACiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiB2ZnRhLCBpbmRleDsKKwlpbnQgcGZfaWQgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OwogCiAJaWYgKChody0+bW5nX2Nvb2tpZS5zdGF0dXMgJgogCSAgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKSAmJgogCSAgICAodmlkID09IGFkYXB0ZXItPm1uZ192bGFuX2lkKSkKIAkJcmV0dXJuOwotCS8qIGFkZCBWSUQgdG8gZmlsdGVyIHRhYmxlICovCi0JaW5kZXggPSAodmlkID4+IDUpICYgMHg3RjsKLQl2ZnRhID0gYXJyYXlfcmQzMihFMTAwMF9WRlRBLCBpbmRleCk7Ci0JdmZ0YSB8PSAoMSA8PCAodmlkICYgMHgxRikpOwotCWlnYl93cml0ZV92ZnRhKCZhZGFwdGVyLT5odywgaW5kZXgsIHZmdGEpOworCisJLyogYWRkIHZpZCB0byB2bHZmIGlmIHNyLWlvdiBpcyBlbmFibGVkLAorCSAqIGlmIHRoYXQgZmFpbHMgYWRkIGRpcmVjdGx5IHRvIGZpbHRlciB0YWJsZSAqLworCWlmIChpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCB0cnVlLCBwZl9pZCkpCisJCWlnYl92ZnRhX3NldChodywgdmlkLCB0cnVlKTsKKwogfQogCiBzdGF0aWMgdm9pZCBpZ2Jfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgdmZ0YSwgaW5kZXg7CisJaW50IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAogCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCwgTlVMTCk7CkBAIC00NTMzLDExICs0OTk2LDEwIEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiByZW1vdmUgVklEIGZyb20gZmlsdGVyIHRhYmxlICovCi0JaW5kZXggPSAodmlkID4+IDUpICYgMHg3RjsKLQl2ZnRhID0gYXJyYXlfcmQzMihFMTAwMF9WRlRBLCBpbmRleCk7Ci0JdmZ0YSAmPSB+KDEgPDwgKHZpZCAmIDB4MUYpKTsKLQlpZ2Jfd3JpdGVfdmZ0YSgmYWRhcHRlci0+aHcsIGluZGV4LCB2ZnRhKTsKKwkvKiByZW1vdmUgdmlkIGZyb20gdmx2ZiBpZiBzci1pb3YgaXMgZW5hYmxlZCwKKwkgKiBpZiBub3QgaW4gdmx2ZiByZW1vdmUgZnJvbSB2ZnRhICovCisJaWYgKGlnYl92bHZmX3NldChhZGFwdGVyLCB2aWQsIGZhbHNlLCBwZl9pZCkpCisJCWlnYl92ZnRhX3NldChodywgdmlkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlnYl9yZXN0b3JlX3ZsYW4oc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQpAQCAtNDg1NSw0ICs1MzE3LDE3MiBAQAogCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfdm1vbHIoc3RydWN0IGUxMDAwX2h3ICpodywgaW50IHZmbikKK3sKKwl1MzIgcmVnX2RhdGE7CisKKwlyZWdfZGF0YSA9IHJkMzIoRTEwMDBfVk1PTFIodmZuKSk7CisJcmVnX2RhdGEgfD0gRTEwMDBfVk1PTFJfQkFNIHwJIC8qIEFjY2VwdCBicm9hZGNhc3QgKi8KKwkgICAgICAgICAgICBFMTAwMF9WTU9MUl9ST1BFIHwgICAvKiBBY2NlcHQgcGFja2V0cyBtYXRjaGVkIGluIFVUQSAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1JPTVBFIHwgIC8qIEFjY2VwdCBwYWNrZXRzIG1hdGNoZWQgaW4gTVRBICovCisJICAgICAgICAgICAgRTEwMDBfVk1PTFJfQVVQRSB8ICAgLyogQWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKwkgICAgICAgICAgICBFMTAwMF9WTU9MUl9TVFJWTEFOOyAvKiBTdHJpcCB2bGFuIHRhZ3MgKi8KKwl3cjMyKEUxMDAwX1ZNT0xSKHZmbiksIHJlZ19kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWdiX3NldF92Zl9ybHBtbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZmbikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2bW9scjsKKworCXZtb2xyID0gcmQzMihFMTAwMF9WTU9MUih2Zm4pKTsKKwl2bW9sciAmPSB+RTEwMDBfVk1PTFJfUkxQTUxfTUFTSzsKKwl2bW9sciB8PSBzaXplIHwgRTEwMDBfVk1PTFJfTFBFOworCXdyMzIoRTEwMDBfVk1PTFIodmZuKSwgdm1vbHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3JhaF9wb29sKHN0cnVjdCBlMTAwMF9odyAqaHcsIGludCBwb29sLCBpbnQgZW50cnkpCit7CisJdTMyIHJlZ19kYXRhOworCisJcmVnX2RhdGEgPSByZDMyKEUxMDAwX1JBSChlbnRyeSkpOworCXJlZ19kYXRhICY9IH5FMTAwMF9SQUhfUE9PTF9NQVNLOworCXJlZ19kYXRhIHw9IEUxMDAwX1JBSF9QT09MXzEgPDwgcG9vbDs7CisJd3IzMihFMTAwMF9SQUgoZW50cnkpLCByZWdfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9zZXRfbWNfbGlzdF9wb29scyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBpbnQgZW50cnlfY291bnQsIHUxNiB0b3RhbF9yYXJfZmlsdGVycykKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBpID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDE7CisKKwlpZiAoKGkgKyBlbnRyeV9jb3VudCkgPCB0b3RhbF9yYXJfZmlsdGVycykKKwkJdG90YWxfcmFyX2ZpbHRlcnMgPSBpICsgZW50cnlfY291bnQ7CisKKwlmb3IgKDsgaSA8IHRvdGFsX3Jhcl9maWx0ZXJzOyBpKyspCisJCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIGkpOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZmLCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCByYXJfZW50cnkgPSB2ZiArIDE7IC8qIFZGIE1BQyBhZGRyZXNzZXMgc3RhcnQgYXQgZW50cnkgMSAqLworCisJaWdiX3Jhcl9zZXQoaHcsIG1hY19hZGRyLCByYXJfZW50cnkpOworCisJbWVtY3B5KGFkYXB0ZXItPnZmX2RhdGFbdmZdLnZmX21hY19hZGRyZXNzZXMsIG1hY19hZGRyLCBFVEhfQUxFTik7CisKKwlpZ2Jfc2V0X3JhaF9wb29sKGh3LCB2ZiwgcmFyX2VudHJ5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZ2Jfdm1tX2NvbnRyb2woc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHJlZ19kYXRhOworCisJaWYgKCFhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQlyZXR1cm47CisKKwkvKiBWRidzIG5lZWQgUEYgcmVzZXQgaW5kaWNhdGlvbiBiZWZvcmUgdGhleQorCSAqIGNhbiBzZW5kL3JlY2VpdmUgbWFpbCAqLworCXJlZ19kYXRhID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJcmVnX2RhdGEgfD0gRTEwMDBfQ1RSTF9FWFRfUEZSU1REOworCXdyMzIoRTEwMDBfQ1RSTF9FWFQsIHJlZ19kYXRhKTsKKworCWlnYl92bWRxX3NldF9sb29wYmFja19wZihodywgdHJ1ZSk7CisJaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKGh3LCB0cnVlKTsKK30KKworI2lmZGVmIENPTkZJR19QQ0lfSU9WCitzdGF0aWMgc3NpemVfdCBpZ2Jfc2hvd19udW1fdmZzKHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpOworfQorCitzdGF0aWMgc3NpemVfdCBpZ2Jfc2V0X251bV92ZnMoc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bnNpZ25lZCBpbnQgbnVtX3ZmcywgaTsKKwl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsKKwlpbnQgZXJyOworCisJc3NjYW5mKGJ1ZiwgIiV1IiwgJm51bV92ZnMpOworCisJaWYgKG51bV92ZnMgPiA3KQorCQludW1fdmZzID0gNzsKKworCS8qIHZhbHVlIHVuY2hhbmdlZCBkbyBub3RoaW5nICovCisJaWYgKG51bV92ZnMgPT0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJcmV0dXJuIGNvdW50OworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCWlnYl9jbG9zZShuZXRkZXYpOworCisJaWdiX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlnYl9mcmVlX3F1ZXVlcyhhZGFwdGVyKTsKKwlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKKwlhZGFwdGVyLT5yeF9yaW5nID0gTlVMTDsKKwlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID0gMDsKKworCS8qIHJlY2xhaW0gcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBWRnMgc2luY2Ugd2UgYXJlIGNoYW5naW5nIGNvdW50ICovCisJaWYgKGFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJLyogZGlzYWJsZSBpb3YgYW5kIGFsbG93IHRpbWUgZm9yIHRyYW5zYWN0aW9ucyB0byBjbGVhciAqLworCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwkJbXNsZWVwKDUwMCk7CisKKwkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOworCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCW1zbGVlcCgxMDApOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSU9WIERpc2FibGVkXG4iKTsKKwl9CisKKwlpZiAobnVtX3ZmcykgeworCQlhZGFwdGVyLT52Zl9kYXRhID0ga2NhbGxvYyhudW1fdmZzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZmX2RhdGFfc3RvcmFnZSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBWRiBwcml2YXRlICIKKwkJCQkiZGF0YSAtIElPViBlbmFibGUgZmFpbGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7CisJCQlpZiAoIWVycikgeworCQkJCWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPSBudW1fdmZzOworCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZCB2ZnMgYWxsb2NhdGVkXG4iLCBudW1fdmZzKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsgaSsrKSB7CisJCQkJCXJhbmRvbV9ldGhlcl9hZGRyKG1hY19hZGRyKTsKKwkJCQkJaWdiX3NldF92Zl9tYWMoYWRhcHRlciwgaSwgbWFjX2FkZHIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCQkJYWRhcHRlci0+dmZfZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisKKwlpZ2Jfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlnYl9hbGxvY19xdWV1ZXMoYWRhcHRlcik7CisJaWdiX3Jlc2V0KGFkYXB0ZXIpOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCWlnYl9vcGVuKG5ldGRldik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisjZW5kaWYgLyogQ09ORklHX1BDSV9JT1YgKi8KIC8qIGlnYl9tYWluLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYwppbmRleCAxNzc3OWY5Li5hZDE3OTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCkBAIC0yNTksNiArMjU5LDIwIEBACiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX2Z1bmNfXyk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWxpX2lyY2Nfc2lyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBhbGlfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBhbGlfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBhbGlfaXJjY19uZXRfaW9jdGwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFsaV9pcmNjX2Zpcl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gYWxpX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gYWxpX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gYWxpX2lyY2NfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIGFsaV9pcmNjX29wZW4gKGludCBpLCBjaGlwaW9fdCAqaW5mKQogICoKQEAgLTM2MSwxMCArMzc1LDcgQEAKIAlzZWxmLT50eF9maWZvLnRhaWwgPSBzZWxmLT50eF9idWZmLmhlYWQ7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX3Npcl9oYXJkX3htaXQ7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgPSBhbGlfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IGFsaV9pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IGFsaV9pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYWxpX2lyY2Nfc2lyX29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKQEAgLTk3NCw3ICs5ODUsNyBAQAogCQlhbGlfaXJjY19maXJfY2hhbmdlX3NwZWVkKHNlbGYsIGJhdWQpOwkJCQogCQkKIAkJLyogSW5zdGFsbCBGSVIgeG1pdCBoYW5kbGVyKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhbGlfaXJjY19maXJfaGFyZF94bWl0OwkJCisJCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19maXJfb3BzOwogCQkJCQogCQkvKiBFbmFibGUgSW50ZXJ1dXB0ICovCiAJCXNlbGYtPmllciA9IElFUl9FT007IC8vIGJlbmphbWluIDIwMDAvMTEvMjAgMDc6MjRQTQkJCQkJCkBAIC05ODgsNyArOTk5LDcgQEAKIAkJYWxpX2lyY2Nfc2lyX2NoYW5nZV9zcGVlZChzZWxmLCBiYXVkKTsKIAkJCQkKIAkJLyogSW5zdGFsbCBTSVIgeG1pdCBoYW5kbGVyKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhbGlfaXJjY19zaXJfaGFyZF94bWl0OworCQlkZXYtPm5ldGRldl9vcHMgPSAmYWxpX2lyY2Nfc2lyX29wczsKIAl9CiAJCiAJCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IDNhMjJkYzQuLjAwNmJhMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTE0MDEsNiArMTQwMSwxNCBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlyZGFfdXNiX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaXJkYV91c2JfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaXJkYV91c2JfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgICA9IGlyZGFfdXNiX25ldF9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQgPSBpcmRhX3VzYl9oYXJkX3htaXQsCisJLm5kb190eF90aW1lb3V0CT0gaXJkYV91c2JfbmV0X3RpbWVvdXQsCit9OworCiAvKgogICogSW5pdGlhbGlzZSB0aGUgbmV0d29yayBzaWRlIG9mIHRoZSBpcmRhLXVzYiBpbnN0YW5jZQogICogQ2FsbGVkIHdoZW4gYSBuZXcgVVNCIGluc3RhbmNlIGlzIHJlZ2lzdGVyZWQgaW4gaXJkYV91c2JfcHJvYmUoKQpAQCAtMTQxMSwxNSArMTQxOSw5IEBACiAKIAlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpcmRhX3VzYl9pbml0X3FvcyhzZWxmKTsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmaXJkYV91c2JfbmV0ZGV2X29wczsKIAotCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gaXJkYV91c2JfaGFyZF94bWl0OwotCW5ldGRldi0+dHhfdGltZW91dAk9IGlyZGFfdXNiX25ldF90aW1lb3V0OwotCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gID0gMjUwKkhaLzEwMDA7CS8qIDI1MCBtcyA+IFVTQiB0aW1lb3V0ICovCi0JbmV0ZGV2LT5vcGVuICAgICAgICAgICAgPSBpcmRhX3VzYl9uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgICAgICAgICAgICA9IGlyZGFfdXNiX25ldF9jbG9zZTsKLQluZXRkZXYtPmRvX2lvY3RsICAgICAgICA9IGlyZGFfdXNiX25ldF9pb2N0bDsKKwlpcmRhX3VzYl9pbml0X3FvcyhzZWxmKTsKIAogCXJldHVybiByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwppbmRleCBiNGE2MTcxLi45ZDgxM2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCkBAIC00MTgsNiArNDE4LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBraW5nc3VuX29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgPSBraW5nc3VuX2hhcmRfeG1pdCwKKwkubmRvX29wZW4gICAgICAgICAgICA9IGtpbmdzdW5fbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgICAgICAgPSBraW5nc3VuX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsICAgICAgICA9IGtpbmdzdW5fbmV0X2lvY3RsLAorfTsKIAogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQpAQCAtNTIwLDEwICs1MjYsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJmtpbmdzdW4tPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGtpbmdzdW5faGFyZF94bWl0OwotCW5ldC0+b3BlbiAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfb3BlbjsKLQluZXQtPnN0b3AgICAgICAgICAgICA9IGtpbmdzdW5fbmV0X2Nsb3NlOwotCW5ldC0+ZG9faW9jdGwgICAgICAgID0ga2luZ3N1bl9uZXRfaW9jdGw7CisJbmV0LT5uZXRkZXZfb3BzID0gJmtpbmdzdW5fb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKaW5kZXggNTUzMjJmYi4uYjZmZmU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCkBAIC02NjgsNiArNjY4LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBrczk1OV9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CT0ga3M5NTlfaGFyZF94bWl0LAorCS5uZG9fb3Blbgk9IGtzOTU5X25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGtzOTU5X25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0ga3M5NTlfbmV0X2lvY3RsLAorfTsKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UKICAqIGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBvdXJzLCBhbmQgaW4KQEAgLTc4MCwxMCArNzg2LDcgQEAKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZraW5nc3VuLT5xb3MpOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBrczk1OV9oYXJkX3htaXQ7Ci0JbmV0LT5vcGVuID0ga3M5NTlfbmV0X29wZW47Ci0JbmV0LT5zdG9wID0ga3M5NTlfbmV0X2Nsb3NlOwotCW5ldC0+ZG9faW9jdGwgPSBrczk1OV9uZXRfaW9jdGw7CisJbmV0LT5uZXRkZXZfb3BzID0gJmtzOTU5X29wczsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOwogCWlmIChyZXQgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCmluZGV4IDViMzI3YjAuLjY0ZGYyN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwpAQCAtNTYyLDYgKzU2MiwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMga3NkYXp6bGVfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdAk9IGtzZGF6emxlX2hhcmRfeG1pdCwKKwkubmRvX29wZW4JPSBrc2RhenpsZV9uZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBrc2RhenpsZV9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGtzZGF6emxlX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UKICAqIGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBvdXJzLCBhbmQgaW4KQEAgLTY4NCwxMCArNjkxLDcgQEAKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZraW5nc3VuLT5xb3MpOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBrc2RhenpsZV9oYXJkX3htaXQ7Ci0JbmV0LT5vcGVuID0ga3NkYXp6bGVfbmV0X29wZW47Ci0JbmV0LT5zdG9wID0ga3NkYXp6bGVfbmV0X2Nsb3NlOwotCW5ldC0+ZG9faW9jdGwgPSBrc2RhenpsZV9uZXRfaW9jdGw7CisJbmV0LT5uZXRkZXZfb3BzID0gJmtzZGF6emxlX29wczsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOwogCWlmIChyZXQgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKaW5kZXggODVlODhkYS4uZmFjNTA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKQEAgLTg3Myw2ICs4NzMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IG1jc19uZXRfb3BlbiwKKwkubmRvX3N0b3AgPSBtY3NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG1jc19oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bCA9IG1jc19uZXRfaW9jdGwsCit9OworCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZSBpbiB0aGUKICAqIHN5c3RlbS4gIE5lZWQgdG8gdmVyaWZ5IHRoZSBkZXZpY2UgYW5kIGlmIGl0IGlzLCB0aGVuIHN0YXJ0IGhhbmRsaW5nIGl0LgpAQCAtOTE5LDExICs5MjYsNyBAQAogCS8qIFNwZWVkIGNoYW5nZSB3b3JrIGluaXRpYWxpc2F0aW9uKi8KIAlJTklUX1dPUksoJm1jcy0+d29yaywgbWNzX3NwZWVkX3dvcmspOwogCi0JLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmRldi0+aGFyZF9zdGFydF94bWl0ID0gbWNzX2hhcmRfeG1pdDsKLQluZGV2LT5vcGVuID0gbWNzX25ldF9vcGVuOwotCW5kZXYtPnN0b3AgPSBtY3NfbmV0X2Nsb3NlOwotCW5kZXYtPmRvX2lvY3RsID0gbWNzX25ldF9pb2N0bDsKKwluZGV2LT5uZXRkZXZfb3BzID0gJm1jc19uZXRkZXZfb3BzOwogCiAJaWYgKCFpbnRmLT5jdXJfYWx0c2V0dGluZykKIAkJZ290byBlcnJvcjI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKaW5kZXggNjFlNTA5Yy4uNDVmZDljMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwpAQCAtMzMxLDYgKzMzMSwyMCBAQAogCXBucF9yZWdpc3RlcmVkID0gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2NfaXJjY19zaXJfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IG5zY19pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG5zY19pcmNjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfc2lyLAorCS5uZG9fZG9faW9jdGwgICA9IG5zY19pcmNjX25ldF9pb2N0bCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNjX2lyY2NfZmlyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBuc2NfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBuc2NfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbnNjX2lyY2NfaGFyZF94bWl0X2ZpciwKKwkubmRvX2RvX2lvY3RsICAgPSBuc2NfaXJjY19uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gbnNjX2lyY2Nfb3BlbiAoaW9iYXNlLCBpcnEpCiAgKgpAQCAtNDQxLDEwICs0NTUsNyBAQAogCXNlbGYtPnR4X2ZpZm8udGFpbCA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnNjX2lyY2NfaGFyZF94bWl0X3NpcjsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IG5zY19pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gbnNjX2lyY2NfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gbnNjX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZuc2NfaXJjY19zaXJfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpAQCAtMTMyMCwxMiArMTMzMSwxMiBAQAogCXN3aXRjaF9iYW5rKGlvYmFzZSwgQkFOSzApOyAKIAlpZiAoc3BlZWQgPiAxMTUyMDApIHsKIAkJLyogSW5zdGFsbCBGSVIgeG1pdCBoYW5kbGVyICovCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnNjX2lyY2NfaGFyZF94bWl0X2ZpcjsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm5zY19pcmNjX2Zpcl9vcHM7CiAJCWllciA9IElFUl9TRklGX0lFOwogCQluc2NfaXJjY19kbWFfcmVjZWl2ZShzZWxmKTsKIAl9IGVsc2UgewogCQkvKiBJbnN0YWxsIFNJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfc2lyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbnNjX2lyY2Nfc2lyX29wczsKIAkJaWVyID0gSUVSX1JYSERMX0lFOwogCX0KIAkvKiBTZXQgb3VyIGN1cnJlbnQgaW50ZXJydXB0IG1hc2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMKaW5kZXggYzIzZDIxMS4uZDk0MDgwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMKQEAgLTc4MCw4ICs3ODAsNyBAQAogCiBzdGF0aWMgdm9pZCBzaXJkZXZfZnJlZV9idWZmZXJzKHN0cnVjdCBzaXJfZGV2ICpkZXYpCiB7Ci0JaWYgKGRldi0+cnhfYnVmZi5za2IpCi0JCWtmcmVlX3NrYihkZXYtPnJ4X2J1ZmYuc2tiKTsKKwlrZnJlZV9za2IoZGV2LT5yeF9idWZmLnNrYik7CiAJa2ZyZWUoZGV2LT50eF9idWZmLmhlYWQpOwogCWRldi0+cnhfYnVmZi5oZWFkID0gZGV2LT50eF9idWZmLmhlYWQgPSBOVUxMOwogCWRldi0+cnhfYnVmZi5za2IgPSBOVUxMOwpAQCAtODY2LDYgKzg2NSwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNpcmRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CT0gc2lyZGV2X2hhcmRfeG1pdCwKKwkubmRvX29wZW4JPSBzaXJkZXZfb3BlbiwKKwkubmRvX3N0b3AJPSBzaXJkZXZfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IHNpcmRldl9pb2N0bCwKK307CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3Qgc2lyX2RldiAqIHNpcmRldl9nZXRfaW5zdGFuY2UoY29uc3Qgc3RydWN0IHNpcl9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqbmFtZSkKQEAgLTkwOSwxMCArOTE0LDcgQEAKIAlkZXYtPm5ldGRldiA9IG5kZXY7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzaXJkZXZfaGFyZF94bWl0OwotCW5kZXYtPm9wZW4gPSBzaXJkZXZfb3BlbjsKLQluZGV2LT5zdG9wID0gc2lyZGV2X2Nsb3NlOwotCW5kZXYtPmRvX2lvY3RsID0gc2lyZGV2X2lvY3RsOworCW5kZXYtPm5ldGRldl9vcHMgPSAmc2lyZGV2X29wczsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYobmRldikpIHsKIAkJSVJEQV9FUlJPUigiJXMoKSwgcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkIVxuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCBkZDczY2NlLi41OWQ3OTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtNDg2LDYgKzQ4NiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc21zY19pcmNjX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoc2VsZi0+aW8uc3BlZWQgPiAxMTUyMDApCisJCXJldHVybiAJc21zY19pcmNjX2hhcmRfeG1pdF9maXIoc2tiLCBkZXYpOworCWVsc2UKKwkJcmV0dXJuIAlzbXNjX2lyY2NfaGFyZF94bWl0X3Npcihza2IsIGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21zY19pcmNjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gc21zY19pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHNtc2NfaXJjY19uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgID0gc21zY19pcmNjX25ldF9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQgPSBzbXNjX2lyY2NfbmV0X3htaXQsCisjaWYgU01TQ19JUkNDMl9DX05FVF9USU1FT1VUCisJLm5kb190eF90aW1lb3V0CT0gc21zY19pcmNjX3RpbWVvdXQsCisjZW5kaWYKK307CisKIC8qCiAgKiBGdW5jdGlvbiBzbXNjX2lyY2Nfb3BlbiAoZmlyYmFzZSwgc2lyYmFzZSwgZG1hLCBpcnEpCiAgKgpAQCAtNTE5LDE0ICs1MzksMTAgQEAKIAkJZ290byBlcnJfb3V0MTsKIAl9CiAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19oYXJkX3htaXRfc2lyOwogI2lmIFNNU0NfSVJDQzJfQ19ORVRfVElNRU9VVAotCWRldi0+dHhfdGltZW91dAkgICAgID0gc21zY19pcmNjX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyAgPSBIWiAqIDI7ICAvKiBBbGxvdyBlbm91Z2ggdGltZSBmb3Igc3BlZWQgY2hhbmdlICovCiAjZW5kaWYKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IHNtc2NfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IHNtc2NfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBzbXNjX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzbXNjX2lyY2NfbmV0ZGV2X29wczsKIAogCXNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXNlbGYtPm5ldGRldiA9IGRldjsKQEAgLTk5NSw5ICsxMDExLDYgQEAKIAogCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgKi8KIAotCS8qIEluc3RhbGwgRklSIHRyYW5zbWl0IGhhbmRsZXIgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19oYXJkX3htaXRfZmlyOwotCiAJLyogQ2xlYXIgRklGTyAqLwogCW91dGIoaW5iKGZpcl9iYXNlICsgSVJDQ19MQ1JfQSkgfCBJUkNDX0xDUl9BX0ZJRk9fUkVTRVQsIGZpcl9iYXNlICsgSVJDQ19MQ1JfQSk7CiAKQEAgLTE4OTQsNyArMTkwNyw2IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlkZXYgPSBzZWxmLT5uZXRkZXY7CiAJSVJEQV9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybjspOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnNtc2NfaXJjY19oYXJkX3htaXRfc2lyOwogCiAJZmlyX2Jhc2UgPSBzZWxmLT5pby5maXJfYmFzZTsKIAlzaXJfYmFzZSA9IHNlbGYtPmlvLnNpcl9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDhiMTY1OGMuLjhlNWU0NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTEwMDcsNiArMTAwNywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3Rpcl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHN0aXJfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc3Rpcl9uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gc3Rpcl9oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gc3Rpcl9uZXRfaW9jdGwsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCiAgKiBpbiB0aGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb3VycywgYW5kIGluCkBAIC0xMDU0LDEwICsxMDYxLDcgQEAKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZzdGlyLT5xb3MpOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGlyX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gICAgICAgICAgICA9IHN0aXJfbmV0X29wZW47Ci0JbmV0LT5zdG9wICAgICAgICAgICAgPSBzdGlyX25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsICAgICAgICA9IHN0aXJfbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZzdGlyX25ldGRldl9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKaW5kZXggOGIzZTU0NS4uODY0Nzk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwpAQCAtMzEwLDYgKzMxMCwxOSBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJnZpYV9kcml2ZXIpOyAKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2aWFfaXJjY19zaXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXIsCisJLm5kb19vcGVuID0gdmlhX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gdmlhX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgPSB2aWFfaXJjY19uZXRfaW9jdGwsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2aWFfaXJjY19maXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9maXIsCisJLm5kb19vcGVuID0gdmlhX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gdmlhX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgPSB2aWFfaXJjY19uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gdmlhX2lyY2Nfb3BlbiAoaW9iYXNlLCBpcnEpCiAgKgpAQCAtNDI4LDEwICs0NDEsNyBAQAogCXNlbGYtPnR4X2ZpZm8udGFpbCA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X3NpcjsKLQlkZXYtPm9wZW4gPSB2aWFfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB2aWFfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHZpYV9pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdmlhX2lyY2Nfc2lyX29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpCkBAIC03OTgsMTEgKzgwOCwxMSBAQAogCiAJaWYgKHNwZWVkID4gMTE1MjAwKSB7CiAJCS8qIEluc3RhbGwgRklSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9maXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZ2aWFfaXJjY19maXJfb3BzOwogCQl2aWFfaXJjY19kbWFfcmVjZWl2ZShzZWxmKTsKIAl9IGVsc2UgewogCQkvKiBJbnN0YWxsIFNJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfc2lyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmdmlhX2lyY2Nfc2lyX29wczsKIAl9CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCA3MjNjNDU4Li4xMjQzYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtMTU3Myw2ICsxNTczLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxzaV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHZsc2lfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSB2bHNpX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHZsc2lfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHZsc2lfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gdmxzaV90eF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCB2bHNpX2lyZGFfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAl2bHNpX2lyZGFfZGV2X3QgKmlkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTE2MDgsMTEgKzE2MTYsNyBAQAogCW5kZXYtPmZsYWdzIHw9IElGRl9QT1JUU0VMIHwgSUZGX0FVVE9NRURJQTsKIAluZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOwogIAotCW5kZXYtPm9wZW4JICAgICAgPSB2bHNpX29wZW47Ci0JbmRldi0+c3RvcAkgICAgICA9IHZsc2lfY2xvc2U7Ci0JbmRldi0+aGFyZF9zdGFydF94bWl0ID0gdmxzaV9oYXJkX3N0YXJ0X3htaXQ7Ci0JbmRldi0+ZG9faW9jdGwJICAgICAgPSB2bHNpX2lvY3RsOwotCW5kZXYtPnR4X3RpbWVvdXQgICAgICA9IHZsc2lfdHhfdGltZW91dDsKKwluZGV2LT5uZXRkZXZfb3BzID0gJnZsc2lfbmV0ZGV2X29wczsKIAluZGV2LT53YXRjaGRvZ190aW1lbyAgPSA1MDAqSFovMTAwMDsJLyogbWF4LiBhbGxvd2VkIHR1cm4gdGltZSBmb3IgSXJMQVAgKi8KIAogCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCmluZGV4IGRjMGEyZTQuLmQwODgzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKQEAgLTE0MCw2ICsxNDAsMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdzgzOTc3X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gdzgzOTc3YWZfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gdzgzOTc3YWZfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHc4Mzk3N2FmX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSB3ODM5NzdhZl9uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gdzgzOTc3YWZfb3BlbiAoaW9iYXNlLCBpcnEpCiAgKgpAQCAtMjMxLDExICsyMzgsNyBAQAogCXNlbGYtPnJ4X2J1ZmYuZGF0YSA9IHNlbGYtPnJ4X2J1ZmYuaGVhZDsKIAlzZWxmLT5uZXRkZXYgPSBkZXY7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHc4Mzk3N2FmX2hhcmRfeG1pdDsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IHc4Mzk3N2FmX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gdzgzOTc3YWZfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gdzgzOTc3YWZfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcwk9ICZ3ODM5NzdfbmV0ZGV2X29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCmluZGV4IGUyZWYxNmIuLjRiMGVhNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtODg3LDE5ICs4ODcsMTMgQEAKIGl4Z2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkKLQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwgYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkvKiBva2F5IHRvIGNhbGwga2ZyZWVfc2tiIGhlcmUgaW5zdGVhZCBvZiBrZnJlZV9za2JfYW55IGJlY2F1c2UKLQkgKiB0aGlzIGlzIG5ldmVyIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLwotCWlmIChidWZmZXJfaW5mby0+c2tiKQotCQlkZXZfa2ZyZWVfc2tiKGJ1ZmZlcl9pbmZvLT5za2IpOwotCi0JYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJc2tiX2RtYV91bm1hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBidWZmZXJfaW5mby0+c2tiLAorCQkgICAgICAgICAgICAgIERNQV9UT19ERVZJQ0UpOworCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJfQogCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKIAkvKiB0aGVzZSBmaWVsZHMgbXVzdCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgaW4gdHgKIAkgKiBidWZmZXJfaW5mby0+bGVuZ3RoID0gMDsKQEAgLTEyNzUsMTcgKzEyNjksMjMgQEAKIHsKIAlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCWludCBsZW4gPSBza2ItPmxlbjsKKwlpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBtc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwogCiAJdW5zaWduZWQgaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgZjsKLQotCWxlbiAtPSBza2ItPmRhdGFfbGVuOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBJWEdCX01BWF9EQVRBX1BFUl9UWEQpOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCVdBUk5fT04oYnVmZmVyX2luZm8tPmRtYSAhPSAwKTsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKIAkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCiAJCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAogCQkJCXNpemUsCkBAIC0xMzA3LDcgKzEzMDcsMTEgQEAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwogCQljb3VudCsrOwotCQlpZiAoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMTMxOCw2ICsxMzIyLDEwIEBACiAJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIElYR0JfTUFYX0RBVEFfUEVSX1RYRCk7CiAKQEAgLTEzMjksMjEgKzEzMzcsMTQgQEAKIAogCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCQlwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJZnJhZy0+cGFnZSwKLQkJCQkJZnJhZy0+cGFnZV9vZmZzZXQgKyBvZmZzZXQsCi0JCQkJCXNpemUsCi0JCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAJCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IDA7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCQkJaWYgKCsraSA9PSB0eF9yaW5nLT5jb3VudCkgaSA9IDA7CiAJCX0KIAl9Ci0JaSA9IChpID09IDApID8gdHhfcmluZy0+Y291bnQgLSAxIDogaSAtIDE7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIApAQCAtMTQ0NSw2ICsxNDQ2LDcgQEAKIAl1bnNpZ25lZCBpbnQgZmlyc3Q7CiAJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKIAlpbnQgdmxhbl9pZCA9IDA7CisJaW50IGNvdW50ID0gMDsKIAlpbnQgdHNvOwogCiAJaWYgKHRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKSB7CkBAIC0xNDc5LDEzICsxNDgxLDE5IEBACiAJZWxzZSBpZiAoaXhnYl90eF9jc3VtKGFkYXB0ZXIsIHNrYikpCiAJCXR4X2ZsYWdzIHw9IElYR0JfVFhfRkxBR1NfQ1NVTTsKIAotCWl4Z2JfdHhfcXVldWUoYWRhcHRlciwgaXhnYl90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCksIHZsYW5faWQsCi0JCQl0eF9mbGFncyk7CisJY291bnQgPSBpeGdiX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0KTsKIAotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWlmIChjb3VudCkgeworCQlpeGdiX3R4X3F1ZXVlKGFkYXB0ZXIsIGNvdW50LCB2bGFuX2lkLCB0eF9mbGFncyk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWl4Z2JfbWF5YmVfc3RvcF90eChuZXRkZXYsICZhZGFwdGVyLT50eF9yaW5nLCBERVNDX05FRURFRCk7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsIERFU0NfTkVFREVEKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlhZGFwdGVyLT50eF9yaW5nLmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJYWRhcHRlci0+dHhfcmluZy5uZXh0X3RvX3VzZSA9IGZpcnN0OworCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xODE4LDcgKzE4MjYsNyBAQAogCQkvKiBkZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgJiYKIAkJICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgKyBIWikKIAkJICAgJiYgIShJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmCiAJCSAgICAgICAgSVhHQl9TVEFUVVNfVFhPRkYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCmluZGV4IGY2MDYxOTUuLmIzZjgyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCkBAIC0zMyw2ICszMyw3IEBACiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLm8KIAogaXhnYmUtb2JqcyA6PSBpeGdiZV9tYWluLm8gaXhnYmVfY29tbW9uLm8gaXhnYmVfZXRodG9vbC5vIFwKLSAgICAgICAgICAgICAgaXhnYmVfODI1OTgubyBpeGdiZV9waHkubworICAgICAgICAgICAgICBpeGdiZV84MjU5OS5vIGl4Z2JlXzgyNTk4Lm8gaXhnYmVfcGh5Lm8KIAotaXhnYmUtJChDT05GSUdfSVhHQkVfRENCKSArPSAgaXhnYmVfZGNiLm8gaXhnYmVfZGNiXzgyNTk4Lm8gaXhnYmVfZGNiX25sLm8KK2l4Z2JlLSQoQ09ORklHX0lYR0JFX0RDQikgKz0gIGl4Z2JlX2RjYi5vIGl4Z2JlX2RjYl84MjU5OC5vIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2RjYl84MjU5OS5vIGl4Z2JlX2RjYl9ubC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAppbmRleCBlOThhY2U4Li5jMjY0MzNkMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaApAQCAtNzEsNiArNzEsNyBAQAogI2RlZmluZSBJWEdCRV9SWEJVRkZFUl8xMjggICAxMjggICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCiAjZGVmaW5lIElYR0JFX1JYQlVGRkVSXzI1NiAgIDI1NiAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KICNkZWZpbmUgSVhHQkVfUlhCVUZGRVJfMjA0OCAgMjA0OAorI2RlZmluZSBJWEdCRV9NQVhfUlhCVUZGRVIgICAxNjM4NCAgLyogbGFyZ2VzdCBzaXplIGZvciBhIHNpbmdsZSBkZXNjcmlwdG9yICovCiAKICNkZWZpbmUgSVhHQkVfUlhfSERSX1NJWkUgSVhHQkVfUlhCVUZGRVJfMjU2CiAKQEAgLTEzOSwxOCArMTQwLDI0IEBACiAJaW50IGNwdTsKICNlbmRpZgogCXN0cnVjdCBpeGdiZV9xdWV1ZV9zdGF0cyBzdGF0czsKLQl1MTYgdl9pZHg7IC8qIG1hcHMgZGlyZWN0bHkgdG8gdGhlIGluZGV4IGZvciB0aGlzIHJpbmcgaW4gdGhlIGhhcmR3YXJlCi0JICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKLQkgICAgICAgICAgICogYW5kIGZyaWVuZHMgdGhhdCByZXByZXNlbnRzIHRoZSB2ZWN0b3IgZm9yIHRoaXMgcmluZyAqLworCXU2NCB2X2lkeDsgLyogbWFwcyBkaXJlY3RseSB0byB0aGUgaW5kZXggZm9yIHRoaXMgcmluZyBpbiB0aGUgaGFyZHdhcmUKKwkgICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKKwkgICAgICAgICAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KIAogCiAJdTE2IHdvcmtfbGltaXQ7ICAgICAgICAgICAgICAgIC8qIG1heCB3b3JrIHBlciBpbnRlcnJ1cHQgKi8KIAl1MTYgcnhfYnVmX2xlbjsKIH07CiAKLSNkZWZpbmUgUklOR19GX0RDQiAgMAotI2RlZmluZSBSSU5HX0ZfVk1EUSAxCi0jZGVmaW5lIFJJTkdfRl9SU1MgIDIKK2VudW0gaXhnYmVfcmluZ19mX2VudW0geworCVJJTkdfRl9OT05FID0gMCwKKwlSSU5HX0ZfRENCLAorCVJJTkdfRl9WTURRLAorCVJJTkdfRl9SU1MsCisKKwlSSU5HX0ZfQVJSQVlfU0laRSAgICAgIC8qIG11c3QgYmUgbGFzdCBpbiBlbnVtIHNldCAqLworfTsKKwogI2RlZmluZSBJWEdCRV9NQVhfRENCX0lORElDRVMgICA4CiAjZGVmaW5lIElYR0JFX01BWF9SU1NfSU5ESUNFUyAgMTYKICNkZWZpbmUgSVhHQkVfTUFYX1ZNRFFfSU5ESUNFUyAxNgpAQCAtMTU5LDggKzE2Niw4IEBACiAJaW50IG1hc2s7CiB9OwogCi0jZGVmaW5lIE1BWF9SWF9RVUVVRVMgNjQKLSNkZWZpbmUgTUFYX1RYX1FVRVVFUyAzMgorI2RlZmluZSBNQVhfUlhfUVVFVUVTIDEyOAorI2RlZmluZSBNQVhfVFhfUVVFVUVTIDEyOAogCiAjZGVmaW5lIE1BWF9SWF9QQUNLRVRfQlVGRkVSUyAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4IDogMSkKQEAgLTE4MiwxMCArMTg5LDExIEBACiB9OwogCiAvKiBIZWxwZXIgbWFjcm9zIHRvIHN3aXRjaCBiZXR3ZWVuIGludHMvc2VjIGFuZCB3aGF0IHRoZSByZWdpc3RlciB1c2VzLgotICogQW5kIHllcywgaXQncyB0aGUgc2FtZSBtYXRoIGdvaW5nIGJvdGggd2F5cy4KKyAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuICBUaGUgbG93ZXN0IHZhbHVlCisgKiBzdXBwb3J0ZWQgYnkgYWxsIG9mIHRoZSBpeGdiZSBoYXJkd2FyZSBpcyA4LgogICovCiAjZGVmaW5lIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhfZWl0cikgXAotCSgoX2VpdHIpID8gKDEwMDAwMDAwMDAgLyAoKF9laXRyKSAqIDI1NikpIDogMCkKKwkoKF9laXRyKSA/ICgxMDAwMDAwMDAwIC8gKChfZWl0cikgKiAyNTYpKSA6IDgpCiAjZGVmaW5lIEVJVFJfUkVHX1RPX0lOVFNfUEVSX1NFQyBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcKIAogI2RlZmluZSBJWEdCRV9ERVNDX1VOVVNFRChSKSBcCkBAIC0yMDQsMTEgKzIxMiwxMyBAQAogI2RlZmluZSBPVEhFUl9WRUNUT1IgMQogI2RlZmluZSBOT05fUV9WRUNUT1JTIChPVEhFUl9WRUNUT1IpCiAKKyNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OSA2NAorI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTkgNjQKICNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OCAxOAogI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTggMTYKIAotI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlMgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk4Ci0jZGVmaW5lIE1BWF9NU0lYX0NPVU5UIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTgKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTIE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OQorI2RlZmluZSBNQVhfTVNJWF9DT1VOVCBNQVhfTVNJWF9WRUNUT1JTXzgyNTk5CiAKICNkZWZpbmUgTUlOX01TSVhfUV9WRUNUT1JTIDIKICNkZWZpbmUgTUlOX01TSVhfQ09VTlQgKE1JTl9NU0lYX1FfVkVDVE9SUyArIE5PTl9RX1ZFQ1RPUlMpCkBAIC0yMjAsNyArMjMwLDcgQEAKIAl1MTYgYmRfbnVtYmVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciBxX3ZlY3RvcltNQVhfTVNJWF9RX1ZFQ1RPUlNdOwotCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA1XTsKKwljaGFyIG5hbWVbTUFYX01TSVhfQ09VTlRdW0lGTkFNU0laICsgOV07CiAJc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgZGNiX2NmZzsKIAlzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyB0ZW1wX2RjYl9jZmc7CiAJdTggZGNiX3NldF9iaXRtYXA7CkBAIC0yNDUsMTEgKzI1NSwxMiBAQAogCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nOwkvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLwogCWludCBudW1fcnhfcXVldWVzOwogCXU2NCBod19jc3VtX3J4X2Vycm9yOworCXU2NCBod19yeF9ub19kbWFfcmVzb3VyY2VzOwogCXU2NCBod19jc3VtX3J4X2dvb2Q7CiAJdTY0IG5vbl9lb3BfZGVzY3M7CiAJaW50IG51bV9tc2l4X3ZlY3RvcnM7CiAJaW50IG1heF9tc2l4X3FfdmVjdG9yczsgICAgICAgICAvKiB0cnVlIGNvdW50IG9mIHFfdmVjdG9ycyBmb3IgZGV2aWNlICovCi0Jc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbM107CisJc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbUklOR19GX0FSUkFZX1NJWkVdOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAKIAl1NjQgcnhfaGRyX3NwbGl0OwpAQCAtMjczLDYgKzI4NCw3IEBACiAjZGVmaW5lIElYR0JFX0ZMQUdfRENBX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDExKQogI2RlZmluZSBJWEdCRV9GTEFHX0lNSVJfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMikKICNkZWZpbmUgSVhHQkVfRkxBR19NUV9DQVBBQkxFICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTMpCisjZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE0KQogI2RlZmluZSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNikKICNkZWZpbmUgSVhHQkVfRkxBR19SU1NfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTcpCiAjZGVmaW5lIElYR0JFX0ZMQUdfVk1EUV9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE4KQpAQCAtMjgwLDcgKzI5Miw4IEBACiAjZGVmaW5lIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSAgICAgICAgICAgICAodTMyKSgxIDw8IDIwKQogI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUgICAgICAgICAgICAgKHUzMikoMSA8PCAyMikKICNkZWZpbmUgSVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgMjMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0sgICAgICAgICAgICAgKHUzMikoMSA8PCAyNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0sgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjUpCiAKIC8qIGRlZmF1bHQgdG8gdHJ5aW5nIGZvciBmb3VyIHNlY29uZHMgKi8KICNkZWZpbmUgSVhHQkVfVFJZX0xJTktfVElNRU9VVCAoNCAqIEhaKQpAQCAtMzEwLDcgKzMyMyw5IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNmcF90YXNrOwogCXN0cnVjdCB0aW1lcl9saXN0IHNmcF90aW1lcjsKLQorCXN0cnVjdCB3b3JrX3N0cnVjdCBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHNmcF9jb25maWdfbW9kdWxlX3Rhc2s7CisJdTMyIHdvbDsKIAl1MTYgZWVwcm9tX3ZlcnNpb247CiB9OwogCkBAIC0zMjMsOSArMzM4LDExIEBACiAKIGVudW0gaXhnYmVfYm9hcmRzIHsKIAlib2FyZF84MjU5OCwKKwlib2FyZF84MjU5OSwKIH07CiAKIGV4dGVybiBzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV84MjU5OF9pbmZvOworZXh0ZXJuIHN0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlXzgyNTk5X2luZm87CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogZXh0ZXJuIHN0cnVjdCBkY2JubF9ydG5sX29wcyBkY2JubF9vcHM7CiBleHRlcm4gaW50IGl4Z2JlX2NvcHlfZGNiX2NmZyhzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqc3JjX2RjYl9jZmcsCkBAIC0zNTAsNSArMzY3LDYgQEAKIGV4dGVybiBpbnQgaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaXhnYmVfbmFwaV9hZGRfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaXhnYmVfbmFwaV9kZWxfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JlX3dyaXRlX2VpdHIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKiwgaW50LCB1MzIpOwogCiAjZW5kaWYgLyogX0lYR0JFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwppbmRleCA1MWRiYTFjLi5lZDI2NWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKQEAgLTc5LDYgKzc5LDkgQEAKIAlzMzIgcmV0X3ZhbCA9IDA7CiAJdTE2IGxpc3Rfb2Zmc2V0LCBkYXRhX29mZnNldDsKIAorCS8qIFNldCB0aGUgYnVzIGluZm9ybWF0aW9uIHByaW9yIHRvIFBIWSBpZGVudGlmaWNhdGlvbiAqLworCW1hYy0+b3BzLmdldF9idXNfaW5mbyhodyk7CisKIAkvKiBDYWxsIFBIWSBpZGVudGlmeSByb3V0aW5lIHRvIGdldCB0aGUgcGh5IHR5cGUgKi8KIAlpeGdiZV9pZGVudGlmeV9waHlfZ2VuZXJpYyhodyk7CiAKQEAgLTEwNDYsOSArMTA0OSw5IEBACiAgKgogICogIERldGVybWluZXMgcGh5c2ljYWwgbGF5ZXIgY2FwYWJpbGl0aWVzIG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCiAgKiovCi1zdGF0aWMgczMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyB1MzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewotCXMzMiBwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJdTMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKIAogCXN3aXRjaCAoaHctPmRldmljZV9pZCkgewogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgpAQCAtMTExMSw4ICsxMTE0LDExIEBACiAJLmNsZWFyX2h3X2NudHJzCQk9ICZpeGdiZV9jbGVhcl9od19jbnRyc19nZW5lcmljLAogCS5nZXRfbWVkaWFfdHlwZQkJPSAmaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTgsCiAJLmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIgPSAmaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OCwKKwkuZW5hYmxlX3J4X2RtYSAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMsCiAJLmdldF9tYWNfYWRkcgkJPSAmaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMsCiAJLnN0b3BfYWRhcHRlcgkJPSAmaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMsCisJLmdldF9idXNfaW5mbyAgICAgICAgICAgPSAmaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMsCisJLnNldF9sYW5faWQgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCiAJLnJlYWRfYW5hbG9nX3JlZzgJPSAmaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OCwKIAkud3JpdGVfYW5hbG9nX3JlZzgJPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTgsCiAJLnNldHVwX2xpbmsJCT0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhZTdlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKQEAgLTAsMCArMSwxMjkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSAiaXhnYmUuaCIKKyNpbmNsdWRlICJpeGdiZV9waHkuaCIKKworI2RlZmluZSBJWEdCRV84MjU5OV9NQVhfVFhfUVVFVUVTIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9NQVhfUlhfUVVFVUVTIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9SQVJfRU5UUklFUyAgIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9NQ19UQkxfU0laRSAgIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9WRlRfVEJMX1NJWkUgIDEyOAorCitzMzIgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKTsKK2VudW0gaXhnYmVfbWVkaWFfdHlwZSBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfcmVzZXRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfc2V0X3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOworczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOworczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2aW5kLCBib29sIHZsYW5fb24pOworczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKK3MzMiBpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKK3MzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKTsKK3MzMiBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCB2YWwpOworczMyIGl4Z2JlX3N0YXJ0X2h3X3Jldl8wXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zdGFydF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3UzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworCit2b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCS8qIFNldCB1cCBkdWFsIHNwZWVkIFNGUCsgc3VwcG9ydCAqLworCQltYWMtPm9wcy5zZXR1cF9saW5rID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyOworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyOworCX0gZWxzZSB7CisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5OworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OTsKKwl9Cit9CisKK3MzMiBpeGdiZV9zZXR1cF9zZnBfbW9kdWxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgbGlzdF9vZmZzZXQsIGRhdGFfb2Zmc2V0LCBkYXRhX3ZhbHVlOworCisJaWYgKGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bikgeworCQlpeGdiZV9pbml0X21hY19saW5rX29wc184MjU5OShodyk7CisJCXJldF92YWwgPSBpeGdiZV9nZXRfc2ZwX2luaXRfc2VxdWVuY2Vfb2Zmc2V0cyhodywgJmxpc3Rfb2Zmc2V0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KTsKKworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJZ290byBzZXR1cF9zZnBfb3V0OworCisJCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsICsrZGF0YV9vZmZzZXQsICZkYXRhX3ZhbHVlKTsKKwkJd2hpbGUgKGRhdGFfdmFsdWUgIT0gMHhmZmZmKSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIGRhdGFfdmFsdWUpOworCQkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCQkJaHctPmVlcHJvbS5vcHMucmVhZChodywgKytkYXRhX29mZnNldCwgJmRhdGFfdmFsdWUpOworCQl9CisJCS8qIE5vdyByZXN0YXJ0IERTUCAqLworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIDB4MDAwMDAxMDIpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIDB4MDAwMDBiMWQpOworCQlJWEdCRV9XUklURV9GTFVTSChodyk7CisJfQorCitzZXR1cF9zZnBfb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5IC0gR2V0cyBNU0ktWCB2ZWN0b3IgY291bnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlYWQgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZ2V0IHRoZSBNU0ktWCB2ZWN0b3IgY291bnQgZnJvbQorICogIHRoZSBjYXBhYmlsaXRpZXMgdGFibGUuCisgKiovCit1MzIgaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IG1zaXhfY291bnQ7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJRV9NU0lYXzgyNTk5X0NBUFMsCisJICAgICAgICAgICAgICAgICAgICAgJm1zaXhfY291bnQpOworCW1zaXhfY291bnQgJj0gSVhHQkVfUENJRV9NU0lYX1RCTF9TWl9NQVNLOworCisJLyogTVNJLVggY291bnQgaXMgemVyby1iYXNlZCBpbiBIVywgc28gaW5jcmVtZW50IHRvIGdpdmUgcHJvcGVyIHZhbHVlICovCisJbXNpeF9jb3VudCsrOworCisJcmV0dXJuIG1zaXhfY291bnQ7Cit9CisKK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2ludmFyaWFudHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXN0cnVjdCBpeGdiZV9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJczMyIHJldF92YWw7CisKKwkvKiBTZXQgdGhlIGJ1cyBpbmZvcm1hdGlvbiBwcmlvciB0byBQSFkgaWRlbnRpZmljYXRpb24gKi8KKwltYWMtPm9wcy5nZXRfYnVzX2luZm8oaHcpOworCisJLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIEN1IG9yIFNGSSBwaHkgdHlwZSAqLworCXJldF92YWwgPSBwaHktPm9wcy5pZGVudGlmeShodyk7CisKKwlpZiAocmV0X3ZhbCA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpCisJCWdvdG8gZ2V0X2ludmFyaWFudHNfb3V0OworCisJaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoaHcpOworCisJLyogU2V0dXAgU0ZQIG1vZHVsZSBpZiB0aGVyZSBpcyBvbmUgcHJlc2VudC4gKi8KKwlyZXRfdmFsID0gbWFjLT5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCS8qIElmIGNvcHBlciBtZWRpYSwgb3ZlcndyaXRlIHdpdGggY29wcGVyIGZ1bmN0aW9uIHBvaW50ZXJzICovCisJaWYgKG1hYy0+b3BzLmdldF9tZWRpYV90eXBlKGh3KSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgeworCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5OworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICAgICAgICAgJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5OworCQltYWMtPm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMgPQorCQkgICAgICAgICAgICAgICAgICAmaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OTsKKwl9CisKKwkvKiBQSFkgSW5pdCAqLworCXN3aXRjaCAoaHctPnBoeS50eXBlKSB7CisJY2FzZSBpeGdiZV9waHlfdG46CisJCXBoeS0+b3BzLmNoZWNrX2xpbmsgPSAmaXhnYmVfY2hlY2tfcGh5X2xpbmtfdG54OworCQlwaHktPm9wcy5nZXRfZmlybXdhcmVfdmVyc2lvbiA9CisJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfcGh5X2Zpcm13YXJlX3ZlcnNpb25fdG54OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwltYWMtPm1jZnRfc2l6ZSA9IElYR0JFXzgyNTk5X01DX1RCTF9TSVpFOworCW1hYy0+dmZ0X3NpemUgPSBJWEdCRV84MjU5OV9WRlRfVEJMX1NJWkU7CisJbWFjLT5udW1fcmFyX2VudHJpZXMgPSBJWEdCRV84MjU5OV9SQVJfRU5UUklFUzsKKwltYWMtPm1heF9yeF9xdWV1ZXMgPSBJWEdCRV84MjU5OV9NQVhfUlhfUVVFVUVTOworCW1hYy0+bWF4X3R4X3F1ZXVlcyA9IElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVM7CisJbWFjLT5tYXhfbXNpeF92ZWN0b3JzID0gaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OShodyk7CisKK2dldF9pbnZhcmlhbnRzX291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5IC0gRGV0ZXJtaW5lcyBsaW5rIGNhcGFiaWxpdGllcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAorICogIEBuZWdvdGlhdGlvbjogdHJ1ZSB3aGVuIGF1dG9uZWcgb3IgYXV0b3RyeSBpcyBlbmFibGVkCisgKgorICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgorICoqLworczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmVnb3RpYXRpb24pCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwlzd2l0Y2ggKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU46CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xR19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSOgorCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl8xR19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSToKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tSX1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYX1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU19TR01JSV8xR18xMDBNOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCB8CisJCSAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCX0KKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTkgLSBEZXRlcm1pbmVzIGxpbmsgY2FwYWJpbGl0aWVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogcG9pbnRlciB0byBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IGJvb2xlYW4gYXV0by1uZWdvdGlhdGlvbiB2YWx1ZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBsaW5rIGNhcGFiaWxpdGllcyBieSByZWFkaW5nIHRoZSBBVVRPQyByZWdpc3Rlci4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpCit7CisJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCXUxNiBzcGVlZF9hYmlsaXR5OworCisJKnNwZWVkID0gMDsKKwkqYXV0b25lZyA9IHRydWU7CisKKwlzdGF0dXMgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSVhHQkVfTURJT19QSFlfU1BFRURfQUJJTElUWSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9NRElPX1BNQV9QTURfREVWX1RZUEUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwZWVkX2FiaWxpdHkpOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgSVhHQkVfTURJT19QSFlfU1BFRURfMTBHKQorCQkgICAgKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoc3BlZWRfYWJpbGl0eSAmIElYR0JFX01ESU9fUEhZX1NQRUVEXzFHKQorCQkgICAgKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkgLSBHZXQgbWVkaWEgdHlwZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmV0dXJucyB0aGUgbWVkaWEgdHlwZSAoZmliZXIsIGNvcHBlciwgYmFja3BsYW5lKQorICoqLworZW51bSBpeGdiZV9tZWRpYV90eXBlIGl4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJZW51bSBpeGdiZV9tZWRpYV90eXBlIG1lZGlhX3R5cGU7CisKKwkvKiBEZXRlY3QgaWYgdGhlcmUgaXMgYSBjb3BwZXIgUEhZIGF0dGFjaGVkLiAqLworCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X2N1X3Vua25vd24gfHwKKwkgICAgaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV90bikgeworCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXI7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKwkJLyogRGVmYXVsdCBkZXZpY2UgSUQgaXMgbWV6emFuaW5lIGNhcmQgS1gvS1g0ICovCisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2JhY2twbGFuZTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiBtZWRpYV90eXBlOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OSAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCisgKiAgUmVzdGFydHMgdGhlIGxpbmsuICBQZXJmb3JtcyBhdXRvbmVnb3RpYXRpb24gaWYgbmVlZGVkLgorICoqLworczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGF1dG9jX3JlZzsKKwl1MzIgbGlua3NfcmVnOworCXUzMiBpOworCXMzMiBzdGF0dXMgPSAwOworCisJLyogUmVzdGFydCBsaW5rICovCisJYXV0b2NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOworCisJLyogT25seSBwb2xsIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIGlmIHNwZWNpZmllZCB0byBkbyBzbyAqLworCWlmIChody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgeworCQlpZiAoKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJCSAgICAoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkJbGlua3NfcmVnID0gMDsgLyogSnVzdCBpbiBjYXNlIEF1dG9uZWcgdGltZSA9IDAgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9BVVRPX05FR19USU1FOyBpKyspIHsKKwkJCQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCQkJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19LWF9BTl9DT01QKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCX0KKwkJCWlmICghKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApKSB7CisJCQkJc3RhdHVzID0gSVhHQkVfRVJSX0FVVE9ORUdfTk9UX0NPTVBMRVRFOworCQkJCWh3X2RiZyhodywgIkF1dG9uZWcgZGlkIG5vdCBjb21wbGV0ZS5cbiIpOworCQkJfQorCQl9CisJfQorCisJLyogU2V0IHVwIGZsb3cgY29udHJvbCAqLworCXN0YXR1cyA9IGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMoaHcsIDApOworCisJLyogQWRkIGRlbGF5IHRvIGZpbHRlciBvdXQgbm9pc2VzIGR1cmluZyBpbml0aWFsIGxpbmsgc2V0dXAgKi8KKwltc2xlZXAoNTApOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlciAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCisgKiAgUmVzdGFydHMgdGhlIGxpbmsgZm9yIG11bHRpLXNwZWVkIGZpYmVyIGF0IDFHIHNwZWVkLCBpZiBsaW5rCisgKiAgZmFpbHMgYXQgMTBHLgorICogIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXMgPSAwOworCWl4Z2JlX2xpbmtfc3BlZWQgbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfODI1OTlfQVVUT05FRzsKKwlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LCBsaW5rX3NwZWVkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlciAtIFNldCBNQUMgbGluayBzcGVlZAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1cyA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBwaHlfbGlua19zcGVlZDsKKwlpeGdiZV9saW5rX3NwZWVkIGhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKwl1MzIgc3BlZWRjbnQgPSAwOworCXUzMiBlc2RwX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FU0RQKTsKKwlib29sIGxpbmtfdXAgPSBmYWxzZTsKKwlib29sIG5lZ290aWF0aW9uOworCisJLyogTWFzayBvZmYgcmVxdWVzdGVkIGJ1dCBub24tc3VwcG9ydGVkIHNwZWVkcyAqLworCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJnBoeV9saW5rX3NwZWVkLCAmbmVnb3RpYXRpb24pOworCXNwZWVkICY9IHBoeV9saW5rX3NwZWVkOworCisJLyoKKwkgKiBUcnkgZWFjaCBzcGVlZCBvbmUgYnkgb25lLCBoaWdoZXN0IHByaW9yaXR5IGZpcnN0LiAgV2UgZG8gdGhpcyBpbgorCSAqIHNvZnR3YXJlIGJlY2F1c2UgMTBnYiBmaWJlciBkb2Vzbid0IHN1cHBvcnQgc3BlZWQgYXV0b25lZ290aWF0aW9uLgorCSAqLworCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSB7CisJCXNwZWVkY250Kys7CisJCWhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCisJCS8qIFNldCBoYXJkd2FyZSBTRFAncyAqLworCQllc2RwX3JlZyB8PSAoSVhHQkVfRVNEUF9TRFA1X0RJUiB8IElYR0JFX0VTRFBfU0RQNSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRVNEUCwgZXNkcF9yZWcpOworCisJCWl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KGh3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKworCQltc2xlZXAoNTApOworCisJCS8qIElmIHdlIGhhdmUgbGluaywganVzdCBqdW1wIG91dCAqLworCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmcGh5X2xpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJCWlmIChsaW5rX3VwKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgeworCQlzcGVlZGNudCsrOworCQlpZiAoaGlnaGVzdF9saW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTikKKwkJCWhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisKKwkJLyogU2V0IGhhcmR3YXJlIFNEUCdzICovCisJCWVzZHBfcmVnICY9IH5JWEdCRV9FU0RQX1NEUDU7CisJCWVzZHBfcmVnIHw9IElYR0JFX0VTRFBfU0RQNV9ESVI7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRVNEUCwgZXNkcF9yZWcpOworCisJCWl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KAorCQkJaHcsIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwsIGF1dG9uZWcsCisJCQlhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCisJCW1zbGVlcCg1MCk7CisKKwkJLyogSWYgd2UgaGF2ZSBsaW5rLCBqdXN0IGp1bXAgb3V0ICovCisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZwaHlfbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwkJaWYgKGxpbmtfdXApCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFdlIGRpZG4ndCBnZXQgbGluay4gIENvbmZpZ3VyZSBiYWNrIHRvIHRoZSBoaWdoZXN0IHNwZWVkIHdlIHRyaWVkLAorCSAqIChpZiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSkuICBXZSBjYWxsIG91cnNlbHZlcyBiYWNrIHdpdGgganVzdCB0aGUKKwkgKiBzaW5nbGUgaGlnaGVzdCBzcGVlZCB0aGF0IHRoZSB1c2VyIHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAoc3BlZWRjbnQgPiAxKQorCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdF9saW5rX3NwZWVkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19tYWNfbGlua184MjU5OSAtIERldGVybWluZSBsaW5rIGFuZCBzcGVlZCBzdGF0dXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAbGlua191cDogdHJ1ZSB3aGVuIGxpbmsgaXMgdXAKKyAqICBAbGlua191cF93YWl0X3RvX2NvbXBsZXRlOiBib29sIHVzZWQgdG8gd2FpdCBmb3IgbGluayB1cCBvciBub3QKKyAqCisgKiAgUmVhZHMgdGhlIGxpbmtzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiBsaW5rIGlzIHVwIGFuZCB0aGUgY3VycmVudCBzcGVlZAorICoqLworczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmxpbmtfdXAsIGJvb2wgbGlua191cF93YWl0X3RvX2NvbXBsZXRlKQoreworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisKKwlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCWlmIChsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IElYR0JFX0xJTktfVVBfVElNRTsgaSsrKSB7CisJCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApIHsKKwkJCQkqbGlua191cCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCSpsaW5rX3VwID0gZmFsc2U7CisJCQl9CisJCQltc2xlZXAoMTAwKTsKKwkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApCisJCQkqbGlua191cCA9IHRydWU7CisJCWVsc2UKKwkJCSpsaW5rX3VwID0gZmFsc2U7CisJfQorCisJaWYgKChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19TUEVFRF84MjU5OSkgPT0KKwkgICAgSVhHQkVfTElOS1NfU1BFRURfMTBHXzgyNTk5KQorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwllbHNlIGlmICgobGlua3NfcmVnICYgSVhHQkVfTElOS1NfU1BFRURfODI1OTkpID09CisJICAgICAgICAgSVhHQkVfTElOS1NfU1BFRURfMUdfODI1OTkpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJZWxzZQorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgTUFDIGxpbmsgc3BlZWQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAorICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdHJ1ZSB3aGVuIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaXMgbmVlZGVkCisgKgorICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIGF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwl1MzIgYXV0b2MyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DMik7CisJdTMyIGxpbmtfbW9kZSA9IGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0s7CisJdTMyIHBtYV9wbWRfMWcgPSBhdXRvYyAmIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfTUFTSzsKKwl1MzIgcG1hX3BtZF8xMGdfc2VyaWFsID0gYXV0b2MyICYgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9NQVNLOworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX2NhcGFiaWxpdGllcyA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBzcGVlZCBwYXNzZWQgaW4gaXMgc3VwcG9ydGVkLiAqLworCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmxpbmtfY2FwYWJpbGl0aWVzLCAmYXV0b25lZyk7CisJc3BlZWQgJj0gbGlua19jYXBhYmlsaXRpZXM7CisKKwlpZiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCX0gZWxzZSBpZiAobGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgfHwKKwkgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJICAgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkvKiBTZXQgS1g0L0tYL0tSIHN1cHBvcnQgYWNjb3JkaW5nIHRvIHNwZWVkIHJlcXVlc3RlZCAqLworCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0tYNF9LWF9TVVBQX01BU0sgfCBJWEdCRV9BVVRPQ19LUl9TVVBQKTsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisJCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCisJCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1g0X1NVUFA7CisJCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LUl9TVVBQOworCQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKQorCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1hfU1VQUDsKKwl9IGVsc2UgaWYgKChwbWFfcG1kXzFnID09IElYR0JFX0FVVE9DXzFHX1NGSSkgJiYKKwkgICAgICAgICAgIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU4gfHwKKwkgICAgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzFHX0FOKSkgeworCQkvKiBTd2l0Y2ggZnJvbSAxRyBTRkkgdG8gMTBHIFNGSSBpZiByZXF1ZXN0ZWQgKi8KKwkJaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkgJiYKKwkJICAgIChwbWFfcG1kXzEwZ19zZXJpYWwgPT0gSVhHQkVfQVVUT0MyXzEwR19TRkkpKSB7CisJCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7CisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMTBHX1NFUklBTDsKKwkJfQorCX0gZWxzZSBpZiAoKHBtYV9wbWRfMTBnX3NlcmlhbCA9PSBJWEdCRV9BVVRPQzJfMTBHX1NGSSkgJiYKKwkgICAgICAgICAgIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUwpKSB7CisJCS8qIFN3aXRjaCBmcm9tIDEwRyBTRkkgdG8gMUcgU0ZJIGlmIHJlcXVlc3RlZCAqLworCQlpZiAoKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpICYmCisJCSAgICAocG1hX3BtZF8xZyA9PSBJWEdCRV9BVVRPQ18xR19TRkkpKSB7CisJCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7CisJCQlpZiAoYXV0b25lZykKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMUdfQU47CisJCQllbHNlCisJCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU47CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLyogUmVzdGFydCBsaW5rICovCisJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0FOX1JFU1RBUlQ7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jKTsKKworCQkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCisJCWlmIChhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKKwkJCWlmIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCQkJICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJCQkgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfU0dNSUkpIHsKKwkJCQlsaW5rc19yZWcgPSAwOyAvKkp1c3QgaW4gY2FzZSBBdXRvbmVnIHRpbWU9MCovCisJCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgeworCQkJCQlsaW5rc19yZWcgPQorCQkJCQkgICAgICAgSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKKwkJCQkJaWYgKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApCisJCQkJCQlicmVhazsKKwkJCQkJbXNsZWVwKDEwMCk7CisJCQkJfQorCQkJCWlmICghKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApKSB7CisJCQkJCXN0YXR1cyA9CisJCQkJCSAgICAgICAgSVhHQkVfRVJSX0FVVE9ORUdfTk9UX0NPTVBMRVRFOworCQkJCQlod19kYmcoaHcsICJBdXRvbmVnIGRpZCBub3QgIgorCQkJCQkgICAgICAgImNvbXBsZXRlLlxuIik7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogU2V0IHVwIGZsb3cgY29udHJvbCAqLworCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9mY19nZW5lcmljKGh3LCAwKTsKKworCQkvKiBBZGQgZGVsYXkgdG8gZmlsdGVyIG91dCBub2lzZXMgZHVyaW5nIGluaXRpYWwgbGluayBzZXR1cCAqLworCQltc2xlZXAoNTApOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5IC0gU2V0dXAgY29wcGVyIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlc3RhcnRzIHRoZSBsaW5rIG9uIFBIWSBhbmQgdGhlbiBNQUMuIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1czsKKworCS8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uIG9uIFBIWSAqLworCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmsoaHcpOworCisJLyogU2V0IHVwIE1BQyAqLworCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5IC0gU2V0IHRoZSBQSFkgYXV0b25lZyBhZHZlcnRpc2VkIGZpZWxkCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZAorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgaWYgd2FpdGluZyBpcyBuZWVkZWQgdG8gY29tcGxldGUKKyAqCisgKiAgUmVzdGFydHMgbGluayBvbiBQSFkgYW5kIE1BQyBiYXNlZCBvbiBzZXR0aW5ncyBwYXNzZWQgaW4uCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1czsKKworCS8qIFNldHVwIHRoZSBQSFkgYWNjb3JkaW5nIHRvIGlucHV0IHNwZWVkICovCisJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGlua19zcGVlZChodywgc3BlZWQsIGF1dG9uZWcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCS8qIFNldCB1cCBNQUMgKi8KKwlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OShodyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9yZXNldF9od184MjU5OSAtIFBlcmZvcm0gaGFyZHdhcmUgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlc2V0cyB0aGUgaGFyZHdhcmUgYnkgcmVzZXR0aW5nIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cywgbWFza3MKKyAqICBhbmQgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLCBwZXJmb3JtIGEgUEhZIHJlc2V0LCBhbmQgcGVyZm9ybSBhIGxpbmsgKE1BQykKKyAqICByZXNldC4KKyAqKi8KK3MzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBjdHJsLCBjdHJsX2V4dDsKKwl1MzIgaTsKKwl1MzIgYXV0b2M7CisJdTMyIGF1dG9jMjsKKworCS8qIENhbGwgYWRhcHRlciBzdG9wIHRvIGRpc2FibGUgdHgvcnggYW5kIGNsZWFyIGludGVycnVwdHMgKi8KKwlody0+bWFjLm9wcy5zdG9wX2FkYXB0ZXIoaHcpOworCisJLyogUmVzZXQgUEhZICovCisJaHctPnBoeS5vcHMucmVzZXQoaHcpOworCisJLyoKKwkgKiBQcmV2ZW50IHRoZSBQQ0ktRSBidXMgZnJvbSBmcm9tIGhhbmdpbmcgYnkgZGlzYWJsaW5nIFBDSS1FIG1hc3RlcgorCSAqIGFjY2VzcyBhbmQgdmVyaWZ5IG5vIHBlbmRpbmcgcmVxdWVzdHMgYmVmb3JlIHJlc2V0CisJICovCisJaWYgKGl4Z2JlX2Rpc2FibGVfcGNpZV9tYXN0ZXIoaHcpICE9IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOworCQlod19kYmcoaHcsICJQQ0ktRSBNYXN0ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKKwl9CisKKwkvKgorCSAqIElzc3VlIGdsb2JhbCByZXNldCB0byB0aGUgTUFDLiAgVGhpcyBuZWVkcyB0byBiZSBhIFNXIHJlc2V0LgorCSAqIElmIGxpbmsgcmVzZXQgaXMgdXNlZCwgaXQgbWlnaHQgcmVzZXQgdGhlIE1BQyB3aGVuIG1uZyBpcyB1c2luZyBpdAorCSAqLworCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IElYR0JFX0NUUkxfUlNUKSk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJLyogUG9sbCBmb3IgcmVzZXQgYml0IHRvIHNlbGYtY2xlYXIgaW5kaWNhdGluZyByZXNldCBpcyBjb21wbGV0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXVkZWxheSgxKTsKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJaWYgKCEoY3RybCAmIElYR0JFX0NUUkxfUlNUKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoY3RybCAmIElYR0JFX0NUUkxfUlNUKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CisJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CisJfQorCS8qIENsZWFyIFBGIFJlc2V0IERvbmUgYml0IHNvIFBGL1ZGIE1haWwgT3BzIGNhbiB3b3JrICovCisJY3RybF9leHQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQpOworCWN0cmxfZXh0IHw9IElYR0JFX0NUUkxfRVhUX1BGUlNURDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkxfRVhULCBjdHJsX2V4dCk7CisKKwltc2xlZXAoNTApOworCisKKworCS8qCisJICogU3RvcmUgdGhlIG9yaWdpbmFsIEFVVE9DL0FVVE9DMiB2YWx1ZXMgaWYgdGhleSBoYXZlIG5vdCBiZWVuCisJICogc3RvcmVkIG9mZiB5ZXQuICBPdGhlcndpc2UgcmVzdG9yZSB0aGUgc3RvcmVkIG9yaWdpbmFsCisJICogdmFsdWVzIHNpbmNlIHRoZSByZXNldCBvcGVyYXRpb24gc2V0cyBiYWNrIHRvIGRlZmF1bHRzLgorCSAqLworCWF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwlhdXRvYzIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MyKTsKKwlpZiAoaHctPm1hYy5vcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkID09IGZhbHNlKSB7CisJCWh3LT5tYWMub3JpZ19hdXRvYyA9IGF1dG9jOworCQlody0+bWFjLm9yaWdfYXV0b2MyID0gYXV0b2MyOworCQlody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCWlmIChhdXRvYyAhPSBody0+bWFjLm9yaWdfYXV0b2MpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCAoaHctPm1hYy5vcmlnX2F1dG9jIHwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUKSk7CisKKwkJaWYgKChhdXRvYzIgJiBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSykgIT0KKwkJICAgIChody0+bWFjLm9yaWdfYXV0b2MyICYgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0spKSB7CisJCQlhdXRvYzIgJj0gfklYR0JFX0FVVE9DMl9VUFBFUl9NQVNLOworCQkJYXV0b2MyIHw9IChody0+bWFjLm9yaWdfYXV0b2MyICYKKwkJCSAgICAgICAgICAgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0spOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQzIsIGF1dG9jMik7CisJCX0KKwl9CisKKwkvKiBTdG9yZSB0aGUgcGVybWFuZW50IG1hYyBhZGRyZXNzICovCisJaHctPm1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody0+bWFjLnBlcm1fYWRkcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbGVhcl92bWRxXzgyNTk5IC0gRGlzYXNzb2NpYXRlIGEgVk1EcSBwb29sIGluZGV4IGZyb20gYSByeCBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdAorICogIEByYXI6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlciBpbmRleCB0byBkaXNhc3NvY2lhdGUKKyAqICBAdm1kcTogVk1EcSBwb29sIGluZGV4IHRvIHJlbW92ZSBmcm9tIHRoZSByYXIKKyAqKi8KK3MzMiBpeGdiZV9jbGVhcl92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQoreworCXUzMiBtcHNhcl9sbywgbXBzYXJfaGk7CisJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CisKKwlpZiAocmFyIDwgcmFyX2VudHJpZXMpIHsKKwkJbXBzYXJfbG8gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSk7CisJCW1wc2FyX2hpID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhcikpOworCisJCWlmICghbXBzYXJfbG8gJiYgIW1wc2FyX2hpKQorCQkJZ290byBkb25lOworCisJCWlmICh2bWRxID09IElYR0JFX0NMRUFSX1ZNRFFfQUxMKSB7CisJCQlpZiAobXBzYXJfbG8pIHsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIDApOworCQkJCW1wc2FyX2xvID0gMDsKKwkJCX0KKwkJCWlmIChtcHNhcl9oaSkgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSwgMCk7CisJCQkJbXBzYXJfaGkgPSAwOworCQkJfQorCQl9IGVsc2UgaWYgKHZtZHEgPCAzMikgeworCQkJbXBzYXJfbG8gJj0gfigxIDw8IHZtZHEpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpLCBtcHNhcl9sbyk7CisJCX0gZWxzZSB7CisJCQltcHNhcl9oaSAmPSB+KDEgPDwgKHZtZHEgLSAzMikpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCBtcHNhcl9oaSk7CisJCX0KKworCQkvKiB3YXMgdGhhdCB0aGUgbGFzdCBwb29sIHVzaW5nIHRoaXMgcmFyPyAqLworCQlpZiAobXBzYXJfbG8gPT0gMCAmJiBtcHNhcl9oaSA9PSAwICYmIHJhciAhPSAwKQorCQkJaHctPm1hYy5vcHMuY2xlYXJfcmFyKGh3LCByYXIpOworCX0gZWxzZSB7CisJCWh3X2RiZyhodywgIlJBUiBpbmRleCAlZCBpcyBvdXQgb2YgcmFuZ2UuXG4iLCByYXIpOworCX0KKworZG9uZToKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X3ZtZHFfODI1OTkgLSBBc3NvY2lhdGUgYSBWTURxIHBvb2wgaW5kZXggd2l0aCBhIHJ4IGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0CisgKiAgQHJhcjogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4IHRvIGFzc29jaWF0ZSB3aXRoIGEgVk1EcSBpbmRleAorICogIEB2bWRxOiBWTURxIHBvb2wgaW5kZXgKKyAqKi8KK3MzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSkKK3sKKwl1MzIgbXBzYXI7CisJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CisKKwlpZiAocmFyIDwgcmFyX2VudHJpZXMpIHsKKwkJaWYgKHZtZHEgPCAzMikgeworCQkJbXBzYXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSk7CisJCQltcHNhciB8PSAxIDw8IHZtZHE7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIG1wc2FyKTsKKwkJfSBlbHNlIHsKKwkJCW1wc2FyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhcikpOworCQkJbXBzYXIgfD0gMSA8PCAodm1kcSAtIDMyKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSwgbXBzYXIpOworCQl9CisJfSBlbHNlIHsKKwkJaHdfZGJnKGh3LCAiUkFSIGluZGV4ICVkIGlzIG91dCBvZiByYW5nZS5cbiIsIHJhcik7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfdmZ0YV84MjU5OSAtIFNldCBWTEFOIGZpbHRlciB0YWJsZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAdmxhbjogVkxBTiBpZCB0byB3cml0ZSB0byBWTEFOIGZpbHRlcgorICogIEB2aW5kOiBWTURxIG91dHB1dCBpbmRleCB0aGF0IG1hcHMgcXVldWUgdG8gVkxBTiBpZCBpbiBWRlZGQgorICogIEB2bGFuX29uOiBib29sZWFuIGZsYWcgdG8gdHVybiBvbi9vZmYgVkxBTiBpbiBWRlZGCisgKgorICogIFR1cm4gb24vb2ZmIHNwZWNpZmllZCBWTEFOIGluIHRoZSBWTEFOIGZpbHRlciB0YWJsZS4KKyAqKi8KK3MzMiBpeGdiZV9zZXRfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgdmxhbiwgdTMyIHZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2bGFuX29uKQoreworCXUzMiByZWdpbmRleDsKKwl1MzIgYml0aW5kZXg7CisJdTMyIGJpdHM7CisJdTMyIGZpcnN0X2VtcHR5X3Nsb3Q7CisKKwlpZiAodmxhbiA+IDQwOTUpCisJCXJldHVybiBJWEdCRV9FUlJfUEFSQU07CisKKwkvKgorCSAqIHRoaXMgaXMgYSAyIHBhcnQgb3BlcmF0aW9uIC0gZmlyc3QgdGhlIFZGVEEsIHRoZW4gdGhlCisJICogVkxWRiBhbmQgVkxWRkIgaWYgdmluZCBpcyBzZXQKKwkgKi8KKworCS8qIFBhcnQgMQorCSAqIFRoZSBWRlRBIGlzIGEgYml0c3RyaW5nIG1hZGUgdXAgb2YgMTI4IDMyLWJpdCByZWdpc3RlcnMKKwkgKiB0aGF0IGVuYWJsZSB0aGUgcGFydGljdWxhciBWTEFOIGlkLCBtdWNoIGxpa2UgdGhlIE1UQToKKwkgKiAgICBiaXRzWzExLTVdOiB3aGljaCByZWdpc3RlcgorCSAqICAgIGJpdHNbNC0wXTogIHdoaWNoIGJpdCBpbiB0aGUgcmVnaXN0ZXIKKwkgKi8KKwlyZWdpbmRleCA9ICh2bGFuID4+IDUpICYgMHg3RjsKKwliaXRpbmRleCA9IHZsYW4gJiAweDFGOworCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUQShyZWdpbmRleCkpOworCWlmICh2bGFuX29uKQorCQliaXRzIHw9ICgxIDw8IGJpdGluZGV4KTsKKwllbHNlCisJCWJpdHMgJj0gfigxIDw8IGJpdGluZGV4KTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEocmVnaW5kZXgpLCBiaXRzKTsKKworCisJLyogUGFydCAyCisJICogSWYgdGhlIHZpbmQgaXMgc2V0CisJICogICBFaXRoZXIgdmxhbl9vbgorCSAqICAgICBtYWtlIHN1cmUgdGhlIHZsYW4gaXMgaW4gVkxWRgorCSAqICAgICBzZXQgdGhlIHZpbmQgYml0IGluIHRoZSBtYXRjaGluZyBWTFZGQgorCSAqICAgT3IgIXZsYW5fb24KKwkgKiAgICAgY2xlYXIgdGhlIHBvb2wgYml0IGFuZCBwb3NzaWJseSB0aGUgdmluZAorCSAqLworCWlmICh2aW5kKSB7CisJCS8qIGZpbmQgdGhlIHZsYW5pZCBvciB0aGUgZmlyc3QgZW1wdHkgc2xvdCAqLworCQlmaXJzdF9lbXB0eV9zbG90ID0gMDsKKworCQlmb3IgKHJlZ2luZGV4ID0gMTsgcmVnaW5kZXggPCBJWEdCRV9WTFZGX0VOVFJJRVM7IHJlZ2luZGV4KyspIHsKKwkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCkpOworCQkJaWYgKCFiaXRzICYmICFmaXJzdF9lbXB0eV9zbG90KQorCQkJCWZpcnN0X2VtcHR5X3Nsb3QgPSByZWdpbmRleDsKKwkJCWVsc2UgaWYgKChiaXRzICYgMHgwRkZGKSA9PSB2bGFuKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlZ2luZGV4ID49IElYR0JFX1ZMVkZfRU5UUklFUykgeworCQkJaWYgKGZpcnN0X2VtcHR5X3Nsb3QpCisJCQkJcmVnaW5kZXggPSBmaXJzdF9lbXB0eV9zbG90OworCQkJZWxzZSB7CisJCQkJaHdfZGJnKGh3LCAiTm8gc3BhY2UgaW4gVkxWRi5cbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJaWYgKHZsYW5fb24pIHsKKwkJCS8qIHNldCB0aGUgcG9vbCBiaXQgKi8KKwkJCWlmICh2aW5kIDwgMzIpIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOworCQkJfSBlbHNlIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKKwkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogY2xlYXIgdGhlIHBvb2wgYml0ICovCisJCQlpZiAodmluZCA8IDMyKSB7CisJCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSk7CisJCQliaXRzICY9IH4oMSA8PCB2aW5kKTsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpLCBiaXRzKTsKKwkJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOworCQkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOworCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCX0KKwkJfQorCisJCWlmIChiaXRzKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSwKKwkJCSAgICAgICAgICAgICAgICAoSVhHQkVfVkxWRl9WSUVOIHwgdmxhbikpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLCAwKTsKKwl9CisKK291dDoKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OSAtIENsZWFyIFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDbGVhcnMgdGhlIFZMQU4gZmlsZXIgdGFibGUsIGFuZCB0aGUgVk1EcSBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlcgorICoqLworczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBody0+bWFjLnZmdF9zaXplOyBvZmZzZXQrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRBKG9mZnNldCksIDApOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBJWEdCRV9WTFZGX0VOVFJJRVM7IG9mZnNldCsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRihvZmZzZXQpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGQihvZmZzZXQgKiAyKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRkIoKG9mZnNldCAqIDIpICsgMSksIDApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTkgLSBCbGluayBMRUQgYmFzZWQgb24gaW5kZXguCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpbmRleDogbGVkIG51bWJlciB0byBibGluaworICoqLworczMyIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIGxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9NT0RFX01BU0soaW5kZXgpOworCWxlZF9yZWcgfD0gSVhHQkVfTEVEX0JMSU5LKGluZGV4KTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0xFRENUTCwgbGVkX3JlZyk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX2JsaW5rX2xlZF9zdG9wXzgyNTk5IC0gU3RvcCBibGlua2luZyBMRUQgYmFzZWQgb24gaW5kZXguCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpbmRleDogbGVkIG51bWJlciB0byBzdG9wIGJsaW5raW5nCisgKiovCitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KQoreworCXUzMiBsZWRfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xFRENUTCk7CisKKwlsZWRfcmVnICY9IH5JWEdCRV9MRURfTU9ERV9NQVNLKGluZGV4KTsKKwlsZWRfcmVnICY9IH5JWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRfcmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5IC0gSW5pdGlhbGl6ZSB0aGUgVW5pY2FzdCBUYWJsZSBBcnJheQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqKi8KK3MzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlpbnQgaTsKKwlod19kYmcoaHcsICIgQ2xlYXJpbmcgVVRBXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9VVEEoaSksIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkgLSBSZWFkcyA4IGJpdCBPbWVyIGFuYWxvZyByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVnOiBhbmFsb2cgcmVnaXN0ZXIgdG8gcmVhZAorICogIEB2YWw6IHJlYWQgdmFsdWUKKyAqCisgKiAgUGVyZm9ybXMgcmVhZCBvcGVyYXRpb24gdG8gT21lciBhbmFsb2cgcmVnaXN0ZXIgc3BlY2lmaWVkLgorICoqLworczMyIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggKnZhbCkKK3sKKwl1MzIgIGNvcmVfY3RsOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DT1JFQ1RMLCBJWEdCRV9DT1JFQ1RMX1dSSVRFX0NNRCB8CisJICAgICAgICAgICAgICAgIChyZWcgPDwgOCkpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoMTApOworCWNvcmVfY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NPUkVDVEwpOworCSp2YWwgPSAodTgpY29yZV9jdGw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkgLSBXcml0ZXMgOCBiaXQgT21lciBhbmFsb2cgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHJlZzogYXRsYXMgcmVnaXN0ZXIgdG8gd3JpdGUKKyAqICBAdmFsOiB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBQZXJmb3JtcyB3cml0ZSBvcGVyYXRpb24gdG8gT21lciBhbmFsb2cgcmVnaXN0ZXIgc3BlY2lmaWVkLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCkKK3sKKwl1MzIgIGNvcmVfY3RsOworCisJY29yZV9jdGwgPSAocmVnIDw8IDgpIHwgdmFsOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgY29yZV9jdGwpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoMTApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5IC0gUHJlcGFyZSBoYXJkd2FyZSBmb3IgVHgvUngKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFN0YXJ0cyB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIGdlbmVyaWMgc3RhcnRfaHcgZnVuY3Rpb24uCisgKiAgVGhlbiBwZXJmb3JtcyBkZXZpY2Utc3BlY2lmaWM6CisgKiAgQ2xlYXJzIHRoZSByYXRlIGxpbWl0ZXIgcmVnaXN0ZXJzLgorICoqLworczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHFfbnVtOworCisJaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyhodyk7CisKKwkvKiBDbGVhciB0aGUgcmF0ZSBsaW1pdGVycyAqLworCWZvciAocV9udW0gPSAwOyBxX251bSA8IGh3LT5tYWMubWF4X3R4X3F1ZXVlczsgcV9udW0rKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBxX251bSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUQkNOUkMsIDApOworCX0KKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5IC0gR2V0IHBoeXNpY2FsIGxheWVyIG1vZHVsZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyB0aGUgcGh5c2ljYWwgbGF5ZXIgbW9kdWxlIGZvdW5kIG9uIHRoZSBjdXJyZW50IGFkYXB0ZXIuCisgKiovCitzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9QSFlfQUREUl9JTlZBTElEOworCXN0YXR1cyA9IGl4Z2JlX2lkZW50aWZ5X3BoeV9nZW5lcmljKGh3KTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXN0YXR1cyA9IGl4Z2JlX2lkZW50aWZ5X3NmcF9tb2R1bGVfZ2VuZXJpYyhodyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OSAtIFJldHVybnMgcGh5c2ljYWwgbGF5ZXIgdHlwZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAqKi8KK3UzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKKwl1OCBjb21wX2NvZGVzXzEwZyA9IDA7CisKKwlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OToKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9LWDQ6CisJCS8qIERlZmF1bHQgZGV2aWNlIElEIGlzIG1lenphbmluZSBjYXJkIEtYL0tYNCAqLworCQlwaHlzaWNhbF9sYXllciA9IChJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX0tYNCB8CisJCSAgICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0tYKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgorCQlody0+cGh5Lm9wcy5pZGVudGlmeV9zZnAoaHcpOworCisJCXN3aXRjaCAoaHctPnBoeS5zZnBfdHlwZSkgeworCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1OgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUwOgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUxOgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9TRlBfUExVU19DVTsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NyOgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX1NSOworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfbHI6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfTFI7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwOgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE6CisJCQlody0+cGh5Lm9wcy5yZWFkX2kyY19lZXByb20oaHcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfU0ZGXzEwR0JFX0NPTVBfQ09ERVMsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBfY29kZXNfMTBnKTsKKwkJCWlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKKwkJCQlwaHlzaWNhbF9sYXllciA9CisJCQkJICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfU1I7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKKwkJCQlwaHlzaWNhbF9sYXllciA9CisJCQkJICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfTFI7CisJCQllbHNlCisJCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQlkZWZhdWx0OgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcGh5c2ljYWxfbGF5ZXI7Cit9CisKKy8qKgorICogIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkgLSBFbmFibGUgdGhlIFJ4IERNQSB1bml0IG9uIDgyNTk5CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWd2YWw6IHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlIHRvIFJYQ1RSTAorICoKKyAqICBFbmFibGVzIHRoZSBSeCBETUEgdW5pdCBmb3IgODI1OTkKKyAqKi8KK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWd2YWwpCit7CisjZGVmaW5lIElYR0JFX01BWF9TRUNSWF9QT0xMIDMwCisJaW50IGk7CisJaW50IHNlY3J4cmVnOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciA4MjU5OSBzaWxpY29uIGVycmF0YSB3aGVuIGVuYWJsaW5nIHRoZSBSeCBkYXRhcGF0aC4KKwkgKiBJZiB0cmFmZmljIGlzIGluY29taW5nIGJlZm9yZSB3ZSBlbmFibGUgdGhlIFJ4IHVuaXQsIGl0IGNvdWxkIGhhbmcKKwkgKiB0aGUgUnggRE1BIHVuaXQuICBUaGVyZWZvcmUsIG1ha2Ugc3VyZSB0aGUgc2VjdXJpdHkgZW5naW5lIGlzCisJICogY29tcGxldGVseSBkaXNhYmxlZCBwcmlvciB0byBlbmFibGluZyB0aGUgUnggdW5pdC4KKwkgKi8KKwlzZWNyeHJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwpOworCXNlY3J4cmVnIHw9IElYR0JFX1NFQ1JYQ1RSTF9SWF9ESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwsIHNlY3J4cmVnKTsKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfTUFYX1NFQ1JYX1BPTEw7IGkrKykgeworCQlzZWNyeHJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TRUNSWFNUQVQpOworCQlpZiAoc2VjcnhyZWcgJiBJWEdCRV9TRUNSWFNUQVRfU0VDUlhfUkRZKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXVkZWxheSgxMCk7CisJfQorCisJLyogRm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSAqLworCWlmIChpID49IElYR0JFX01BWF9TRUNSWF9QT0xMKQorCQlod19kYmcoaHcsICJSeCB1bml0IGJlaW5nIGVuYWJsZWQgYmVmb3JlIHNlY3VyaXR5ICIKKwkJICAgICAgICJwYXRoIGZ1bGx5IGRpc2FibGVkLiAgQ29udGludWluZyB3aXRoIGluaXQuXG4iKTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWd2YWwpOworCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCk7CisJc2VjcnhyZWcgJj0gfklYR0JFX1NFQ1JYQ1RSTF9SWF9ESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwsIHNlY3J4cmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBtYWNfb3BzXzgyNTk5ID0geworCS5pbml0X2h3ICAgICAgICAgICAgICAgID0gJml4Z2JlX2luaXRfaHdfZ2VuZXJpYywKKwkucmVzZXRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9od184MjU5OSwKKwkuc3RhcnRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9zdGFydF9od184MjU5OSwKKwkuY2xlYXJfaHdfY250cnMgICAgICAgICA9ICZpeGdiZV9jbGVhcl9od19jbnRyc19nZW5lcmljLAorCS5nZXRfbWVkaWFfdHlwZSAgICAgICAgID0gJml4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5LAorCS5nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyID0gJml4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTksCisJLmVuYWJsZV9yeF9kbWEgICAgICAgICAgPSAmaXhnYmVfZW5hYmxlX3J4X2RtYV84MjU5OSwKKwkuZ2V0X21hY19hZGRyICAgICAgICAgICA9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKKwkuc3RvcF9hZGFwdGVyICAgICAgICAgICA9ICZpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYywKKwkuZ2V0X2J1c19pbmZvICAgICAgICAgICA9ICZpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYywKKwkuc2V0X2xhbl9pZCAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSwKKwkucmVhZF9hbmFsb2dfcmVnOCAgICAgICA9ICZpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5LAorCS53cml0ZV9hbmFsb2dfcmVnOCAgICAgID0gJml4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5LAorCS5zZXR1cF9saW5rICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5LAorCS5zZXR1cF9saW5rX3NwZWVkICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5LAorCS5jaGVja19saW5rICAgICAgICAgICAgID0gJml4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5LAorCS5nZXRfbGlua19jYXBhYmlsaXRpZXMgID0gJml4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OSwKKwkubGVkX29uICAgICAgICAgICAgICAgICA9ICZpeGdiZV9sZWRfb25fZ2VuZXJpYywKKwkubGVkX29mZiAgICAgICAgICAgICAgICA9ICZpeGdiZV9sZWRfb2ZmX2dlbmVyaWMsCisJLmJsaW5rX2xlZF9zdGFydCAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0YXJ0XzgyNTk5LAorCS5ibGlua19sZWRfc3RvcCAgICAgICAgID0gJml4Z2JlX2JsaW5rX2xlZF9zdG9wXzgyNTk5LAorCS5zZXRfcmFyICAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF9yYXJfZ2VuZXJpYywKKwkuY2xlYXJfcmFyICAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl9yYXJfZ2VuZXJpYywKKwkuc2V0X3ZtZHEgICAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfdm1kcV84MjU5OSwKKwkuY2xlYXJfdm1kcSAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl92bWRxXzgyNTk5LAorCS5pbml0X3J4X2FkZHJzICAgICAgICAgID0gJml4Z2JlX2luaXRfcnhfYWRkcnNfZ2VuZXJpYywKKwkudXBkYXRlX3VjX2FkZHJfbGlzdCAgICA9ICZpeGdiZV91cGRhdGVfdWNfYWRkcl9saXN0X2dlbmVyaWMsCisJLnVwZGF0ZV9tY19hZGRyX2xpc3QgICAgPSAmaXhnYmVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLAorCS5lbmFibGVfbWMgICAgICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9tY19nZW5lcmljLAorCS5kaXNhYmxlX21jICAgICAgICAgICAgID0gJml4Z2JlX2Rpc2FibGVfbWNfZ2VuZXJpYywKKwkuY2xlYXJfdmZ0YSAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl92ZnRhXzgyNTk5LAorCS5zZXRfdmZ0YSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92ZnRhXzgyNTk5LAorCS5zZXR1cF9mYyAgICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX2ZjX2dlbmVyaWMsCisJLmluaXRfdXRhX3RhYmxlcyAgICAgICAgPSAmaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5LAorCS5zZXR1cF9zZnAgICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5LAorfTsKKworc3RhdGljIHN0cnVjdCBpeGdiZV9lZXByb21fb3BlcmF0aW9ucyBlZXByb21fb3BzXzgyNTk5ID0geworCS5pbml0X3BhcmFtcyAgICAgICAgICAgID0gJml4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljLAorCS5yZWFkICAgICAgICAgICAgICAgICAgID0gJml4Z2JlX3JlYWRfZWVwcm9tX2dlbmVyaWMsCisJLndyaXRlICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMsCisJLnZhbGlkYXRlX2NoZWNrc3VtICAgICAgPSAmaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCisJLnVwZGF0ZV9jaGVja3N1bSAgICAgICAgPSAmaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAorfTsKKworc3RhdGljIHN0cnVjdCBpeGdiZV9waHlfb3BlcmF0aW9ucyBwaHlfb3BzXzgyNTk5ID0geworCS5pZGVudGlmeSAgICAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OSwKKwkuaWRlbnRpZnlfc2ZwICAgICAgICAgICA9ICZpeGdiZV9pZGVudGlmeV9zZnBfbW9kdWxlX2dlbmVyaWMsCisJLnJlc2V0ICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVzZXRfcGh5X2dlbmVyaWMsCisJLnJlYWRfcmVnICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVhZF9waHlfcmVnX2dlbmVyaWMsCisJLndyaXRlX3JlZyAgICAgICAgICAgICAgPSAmaXhnYmVfd3JpdGVfcGh5X3JlZ19nZW5lcmljLAorCS5zZXR1cF9saW5rICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX3BoeV9saW5rX2dlbmVyaWMsCisJLnNldHVwX2xpbmtfc3BlZWQgICAgICAgPSAmaXhnYmVfc2V0dXBfcGh5X2xpbmtfc3BlZWRfZ2VuZXJpYywKKwkucmVhZF9pMmNfYnl0ZSAgICAgICAgICA9ICZpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMsCisJLndyaXRlX2kyY19ieXRlICAgICAgICAgPSAmaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYywKKwkucmVhZF9pMmNfZWVwcm9tICAgICAgICA9ICZpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYywKKwkud3JpdGVfaTJjX2VlcHJvbSAgICAgICA9ICZpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMsCit9OworCitzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV84MjU5OV9pbmZvID0geworCS5tYWMgICAgICAgICAgICAgICAgICAgID0gaXhnYmVfbWFjXzgyNTk5RUIsCisJLmdldF9pbnZhcmlhbnRzICAgICAgICAgPSAmaXhnYmVfZ2V0X2ludmFyaWFudHNfODI1OTksCisJLm1hY19vcHMgICAgICAgICAgICAgICAgPSAmbWFjX29wc184MjU5OSwKKwkuZWVwcm9tX29wcyAgICAgICAgICAgICA9ICZlZXByb21fb3BzXzgyNTk5LAorCS5waHlfb3BzICAgICAgICAgICAgICAgID0gJnBoeV9vcHNfODI1OTksCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCA1YWU5Mzk4Li44Y2ZkM2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAorI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCiAKQEAgLTI1MSw2ICsyNTIsODEgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMgLSBHZW5lcmljIHNldCBQQ0kgYnVzIGluZm8KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgdGhlIFBDSSBidXMgaW5mbyAoc3BlZWQsIHdpZHRoLCB0eXBlKSB3aXRoaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdHVyZQorICoqLworczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXUxNiBsaW5rX3N0YXR1czsKKworCWh3LT5idXMudHlwZSA9IGl4Z2JlX2J1c190eXBlX3BjaV9leHByZXNzOworCisJLyogR2V0IHRoZSBuZWdvdGlhdGVkIGxpbmsgd2lkdGggYW5kIHNwZWVkIGZyb20gUENJIGNvbmZpZyBzcGFjZSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIElYR0JFX1BDSV9MSU5LX1NUQVRVUywKKwkgICAgICAgICAgICAgICAgICAgICAmbGlua19zdGF0dXMpOworCisJc3dpdGNoIChsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1dJRFRIKSB7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF8xOgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDE7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfV0lEVEhfMjoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF9wY2llX3gyOworCQlicmVhazsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzQ6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NDsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF84OgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1NQRUVEKSB7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19TUEVFRF8yNTAwOgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkXzI1MDA7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMDoKKwkJaHctPmJ1cy5zcGVlZCA9IGl4Z2JlX2J1c19zcGVlZF81MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkX3Vua25vd247CisJCWJyZWFrOworCX0KKworCW1hYy0+b3BzLnNldF9sYW5faWQoaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llIC0gU2V0IExBTiBpZCBmb3IgUENJZSBtdWx0aXBsZSBwb3J0IGRldmljZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBMQU4gZnVuY3Rpb24gaWQgYnkgcmVhZGluZyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycworICogIGFuZCBzd2FwcyB0aGUgcG9ydCB2YWx1ZSBpZiByZXF1ZXN0ZWQuCisgKiovCit2b2lkIGl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2J1c19pbmZvICpidXMgPSAmaHctPmJ1czsKKwl1MzIgcmVnOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NUQVRVUyk7CisJYnVzLT5mdW5jID0gKHJlZyAmIElYR0JFX1NUQVRVU19MQU5fSUQpID4+IElYR0JFX1NUQVRVU19MQU5fSURfU0hJRlQ7CisJYnVzLT5sYW5faWQgPSBidXMtPmZ1bmM7CisKKwkvKiBjaGVjayBmb3IgYSBwb3J0IHN3YXAgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkFDVFBTKTsKKwlpZiAocmVnICYgSVhHQkVfRkFDVFBTX0xGUykKKwkJYnVzLT5mdW5jIF49IDB4MTsKK30KKworLyoqCiAgKiAgaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMgLSBHZW5lcmljIHN0b3AgVHgvUnggdW5pdHMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMzkwLDYgKzQ2Niw3MyBAQAogfQogCiAvKioKKyAqICBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyAtIFdyaXRlcyAxNiBiaXQgdmFsdWUgdG8gRUVQUk9NCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB3cml0dGVuIHRvCisgKiAgQGRhdGE6IDE2IGJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQorICoKKyAqICBJZiBpeGdiZV9lZXByb21fdXBkYXRlX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCisgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXMzMiBzdGF0dXM7CisJdTggd3JpdGVfb3Bjb2RlID0gSVhHQkVfRUVQUk9NX1dSSVRFX09QQ09ERV9TUEk7CisKKwlody0+ZWVwcm9tLm9wcy5pbml0X3BhcmFtcyhodyk7CisKKwlpZiAob2Zmc2V0ID49IGh3LT5lZXByb20ud29yZF9zaXplKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9FRVBST007CisJCWdvdG8gb3V0OworCX0KKworCS8qIFByZXBhcmUgdGhlIEVFUFJPTSBmb3Igd3JpdGluZyAgKi8KKwlzdGF0dXMgPSBpeGdiZV9hY3F1aXJlX2VlcHJvbShodyk7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaWYgKGl4Z2JlX3JlYWR5X2VlcHJvbShodykgIT0gMCkgeworCQkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOworCQkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJLyogIFNlbmQgdGhlIFdSSVRFIEVOQUJMRSBjb21tYW5kICg4IGJpdCBvcGNvZGUgKSAgKi8KKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBJWEdCRV9FRVBST01fV1JFTl9PUENPREVfU1BJLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfRUVQUk9NX09QQ09ERV9CSVRTKTsKKworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJLyoKKwkJICogU29tZSBTUEkgZWVwcm9tcyB1c2UgdGhlIDh0aCBhZGRyZXNzIGJpdCBlbWJlZGRlZCBpbiB0aGUKKwkJICogb3Bjb2RlCisJCSAqLworCQlpZiAoKGh3LT5lZXByb20uYWRkcmVzc19iaXRzID09IDgpICYmIChvZmZzZXQgPj0gMTI4KSkKKwkJCXdyaXRlX29wY29kZSB8PSBJWEdCRV9FRVBST01fQThfT1BDT0RFX1NQSTsKKworCQkvKiBTZW5kIHRoZSBXcml0ZSBjb21tYW5kICg4LWJpdCBvcGNvZGUgKyBhZGRyKSAqLworCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIHdyaXRlX29wY29kZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyk7CisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgKHUxNikob2Zmc2V0KjIpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMpOworCisJCS8qIFNlbmQgdGhlIGRhdGEgKi8KKwkJZGF0YSA9IChkYXRhID4+IDgpIHwgKGRhdGEgPDwgOCk7CisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgZGF0YSwgMTYpOworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJbXNsZWVwKGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5KTsKKwkJLyogRG9uZSB3aXRoIHdyaXRpbmcgLSByZWxlYXNlIHRoZSBFRVBST00gKi8KKwkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOworCX0KKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMgLSBSZWFkIEVFUFJPTSB3b3JkIHVzaW5nIGJpdC1iYW5nCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSByZWFkCkBAIC01MTgsNyArNjYxLDcgQEAKIHN0YXRpYyBzMzIgaXhnYmVfYWNxdWlyZV9lZXByb20oc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzID0gMDsKLQl1MzIgZWVjOworCXUzMiBlZWMgPSAwOwogCXUzMiBpOwogCiAJaWYgKGl4Z2JlX2FjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgIT0gMCkKQEAgLTE0ODcsNiArMTYzMCwxMDcgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZmNfZW5hYmxlIC0gRW5hYmxlIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKKyAqCisgKiAgRW5hYmxlIGZsb3cgY29udHJvbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2V0dGluZ3MuCisgKiovCitzMzIgaXhnYmVfZmNfZW5hYmxlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgbWZsY25fcmVnOworCXUzMiBmY2NmZ19yZWc7CisJdTMyIHJlZzsKKworCW1mbGNuX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CisJbWZsY25fcmVnICY9IH4oSVhHQkVfTUZMQ05fUkZDRSB8IElYR0JFX01GTENOX1JQRkNFKTsKKworCWZjY2ZnX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7CisJZmNjZmdfcmVnICY9IH4oSVhHQkVfRkNDRkdfVEZDRV84MDJfM1ggfCBJWEdCRV9GQ0NGR19URkNFX1BSSU9SSVRZKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6IEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICogMTogUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dAorCSAqICAgIHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqIDM6IEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiA0OiBQcmlvcml0eSBGbG93IENvbnRyb2wgaXMgZW5hYmxlZC4KKwkgKiBvdGhlcjogSW52YWxpZC4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKKwljYXNlIGl4Z2JlX2ZjX25vbmU6CisJCS8qIEZsb3cgY29udHJvbCBjb21wbGV0ZWx5IGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiAqLworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgorCQkvKgorCQkgKiBSeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgVHggRmxvdyBjb250cm9sIGlzCisJCSAqIGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiBTaW5jZSB0aGVyZSByZWFsbHkKKwkJICogaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUlgKKwkJICogUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZSBzdXBwb3J0IGJvdGgKKwkJICogc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJ4IFBBVVNFLiAgTGF0ZXIsIHdlIHdpbGwKKwkJICogZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCisJCSAqLworCQltZmxjbl9yZWcgfD0gSVhHQkVfTUZMQ05fUkZDRTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY190eF9wYXVzZToKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuCisJCSAqLworCQlmY2NmZ19yZWcgfD0gSVhHQkVfRkNDRkdfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJbWZsY25fcmVnIHw9IElYR0JFX01GTENOX1JGQ0U7CisJCWZjY2ZnX3JlZyB8PSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0RDQgorCWNhc2UgaXhnYmVfZmNfcGZjOgorCQlnb3RvIG91dDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlod19kYmcoaHcsICJGbG93IGNvbnRyb2wgcGFyYW0gc2V0IGluY29ycmVjdGx5XG4iKTsKKwkJcmV0X3ZhbCA9IC1JWEdCRV9FUlJfQ09ORklHOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCisJLyogRW5hYmxlIDgwMi4zeCBiYXNlZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NRkxDTiwgbWZsY25fcmVnKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDQ0ZHLCBmY2NmZ19yZWcpOworCisJLyogU2V0IHVwIGFuZCBlbmFibGUgUnggaGlnaC9sb3cgd2F0ZXIgbWFyayB0aHJlc2hvbGRzLCBlbmFibGUgWE9OLiAqLworCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgaXhnYmVfZmNfdHhfcGF1c2UpIHsKKwkJaWYgKGh3LT5mYy5zZW5kX3hvbikKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgaHctPmZjLmxvd193YXRlcik7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJICAgICAgICAgICAgICAgIChody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU4pKTsKKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtKSk7CisJaWYgKChwYWNrZXRidWZfbnVtICYgMSkgPT0gMCkKKwkJcmVnID0gKHJlZyAmIDB4RkZGRjAwMDApIHwgaHctPmZjLnBhdXNlX3RpbWU7CisJZWxzZQorCQlyZWcgPSAocmVnICYgMHgwMDAwRkZGRikgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYocGFja2V0YnVmX251bSAvIDIpLCByZWcpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUViwgKGh3LT5mYy5wYXVzZV90aW1lID4+IDEpKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpeGdiZV9mY19hdXRvbmVnIC0gQ29uZmlndXJlIGZsb3cgY29udHJvbAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0xNTA4LDYgKzE3NTIsNyBAQAogCSAqIDI6ICBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dAogCSAqICAgICB3ZSBkbyBub3Qgc3VwcG9ydCByZWNlaXZpbmcgcGF1c2UgZnJhbWVzKS4KIAkgKiAzOiAgQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqIDQ6ICBQcmlvcml0eSBGbG93IENvbnRyb2wgaXMgZW5hYmxlZC4KIAkgKiBvdGhlcjogSW52YWxpZC4KIAkgKi8KIAlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKQEAgLTE1MzgsNiArMTc4MywxMSBAQAogCQkvKiBGbG93IGNvbnRyb2wgKGJvdGggUnggYW5kIFR4KSBpcyBlbmFibGVkIGJ5IFNXIG92ZXJyaWRlLiAqLwogCQlyZWcgfD0gKElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSB8IElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CiAJCWJyZWFrOworI2lmZGVmIENPTkZJR19EQ0IKKwljYXNlIGl4Z2JlX2ZjX3BmYzoKKwkJZ290byBvdXQ7CisJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CiAJCXJldF92YWwgPSAtSVhHQkVfRVJSX0NPTkZJRzsKQEAgLTE2MjUsNiArMTg3NSw4MSBAQAogfQogCiAvKioKKyAqICBpeGdiZV9zZXR1cF9mY19nZW5lcmljIC0gU2V0IHVwIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyB1cCBmbG93IGNvbnRyb2wuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBzcGVlZDsKKwlib29sIGxpbmtfdXA7CisKKyNpZmRlZiBDT05GSUdfRENCCisJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19wZmMpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKwkJZ290byBvdXQ7CisJfQorCisjZW5kaWYKKwkvKiBWYWxpZGF0ZSB0aGUgcGFja2V0YnVmIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAocGFja2V0YnVmX251bSA8IDAgfHwgcGFja2V0YnVmX251bSA+IDcpIHsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCBwYWNrZXQgYnVmZmVyIG51bWJlciBbJWRdLCBleHBlY3RlZCByYW5nZSAiCisJCSAgICAgICAiaXMgMC03XG4iLCBwYWNrZXRidWZfbnVtKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVmFsaWRhdGUgdGhlIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvbi4gIFplcm8gd2F0ZXIgbWFya3MgYXJlIGludmFsaWQKKwkgKiBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgY29udHJvbGxlciB0byBqdXN0IGJsYXN0IG91dCBmYyBwYWNrZXRzLgorCSAqLworCWlmICghaHctPmZjLmxvd193YXRlciB8fCAhaHctPmZjLmhpZ2hfd2F0ZXIgfHwgIWh3LT5mYy5wYXVzZV90aW1lKSB7CisJCWh3X2RiZyhodywgIkludmFsaWQgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVmFsaWRhdGUgdGhlIHJlcXVlc3RlZCBtb2RlLiAgU3RyaWN0IElFRUUgbW9kZSBkb2VzIG5vdCBhbGxvdworCSAqIGl4Z2JlX2ZjX3J4X3BhdXNlIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSB0ZXN0aW5nIGFub21hbGllcy4KKwkgKi8KKwlpZiAoaHctPmZjLnN0cmljdF9pZWVlICYmIGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCQlod19kYmcoaHcsICJpeGdiZV9mY19yeF9wYXVzZSBub3QgdmFsaWQgaW4gc3RyaWN0ICIKKwkJICAgICAgICJJRUVFIG1vZGVcbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAxMGdpZyBwYXJ0cyBkbyBub3QgaGF2ZSBhIHdvcmQgaW4gdGhlIEVFUFJPTSB0byBkZXRlcm1pbmUgdGhlCisJICogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gZnVsbC4KKwkgKi8KKwlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX2RlZmF1bHQpCisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CisKKwkvKgorCSAqIFNhdmUgb2ZmIHRoZSByZXF1ZXN0ZWQgZmxvdyBjb250cm9sIG1vZGUgZm9yIHVzZSBsYXRlci4gIERlcGVuZGluZworCSAqIG9uIHRoZSBsaW5rIHBhcnRuZXIncyBjYXBhYmlsaXRpZXMsIHdlIG1heSBvciBtYXkgbm90IHVzZSB0aGlzIG1vZGUuCisJICovCisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBhdXRvbmVnIG9yIG5vdC4gKi8KKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlciAmJiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkpCisJCXJldF92YWwgPSBpeGdiZV9mY19hdXRvbmVnKGh3KTsKKworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9mY19lbmFibGUoaHcsIHBhY2tldGJ1Zl9udW0pOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGl4Z2JlX2Rpc2FibGVfcGNpZV9tYXN0ZXIgLSBEaXNhYmxlIFBDSS1leHByZXNzIG1hc3RlciBhY2Nlc3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMTczMiwzICsyMDU3LDE2IEBACiAJaXhnYmVfcmVsZWFzZV9lZXByb21fc2VtYXBob3JlKGh3KTsKIH0KIAorLyoqCisgKiAgaXhnYmVfZW5hYmxlX3J4X2RtYV9nZW5lcmljIC0gRW5hYmxlIHRoZSBSeCBETUEgdW5pdAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVndmFsOiByZWdpc3RlciB2YWx1ZSB0byB3cml0ZSB0byBSWENUUkwKKyAqCisgKiAgRW5hYmxlcyB0aGUgUnggRE1BIHVuaXQKKyAqKi8KK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKK3sKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1RSTCwgcmVndmFsKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAppbmRleCBjNjMwMjEyLi43ZTk0ZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaApAQCAtMzcsMTIgKzM3LDE0IEBACiBzMzIgaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICpwYmFfbnVtKTsKIHMzMiBpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWFjX2FkZHIpOwogczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwordm9pZCBpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIAogczMyIGl4Z2JlX2xlZF9vbl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiBzMzIgaXhnYmVfbGVkX29mZl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiAKIHMzMiBpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSk7CiBzMzIgaXhnYmVfcmVhZF9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CkBAIC02MSw2ICs2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBhZGRyX2NvdW50LCBpeGdiZV9tY19hZGRyX2l0ciBmdW5jKTsKIHMzMiBpeGdiZV9lbmFibGVfbWNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9kaXNhYmxlX21jX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfZW5hYmxlX3J4X2RtYV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWd2YWwpOwogczMyIGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pOwogczMyIGl4Z2JlX2ZjX2VuYWJsZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja3RldGJ1Zl9udW0pOwogczMyIGl4Z2JlX2ZjX2F1dG9uZWcoc3RydWN0IGl4Z2JlX2h3ICpodyk7CkBAIC03NSw2ICs3OCwxMyBAQAogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFRyhhLCByZWcsIHZhbHVlKSB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKIAorI2lmbmRlZiB3cml0ZXEKKyNkZWZpbmUgd3JpdGVxKHZhbCwgYWRkcikgd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsgXAorICAgIHdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7CisjZW5kaWYKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUc2NChhLCByZWcsIHZhbHVlKSB3cml0ZXEoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKKwogI2RlZmluZSBJWEdCRV9SRUFEX1JFRyhhLCByZWcpIHJlYWRsKChhKS0+aHdfYWRkciArIChyZWcpKQogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCwgdmFsdWUpIChcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCmluZGV4IDJhNjBjODkuLmExNTYyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgogI2luY2x1ZGUgIml4Z2JlX2RjYi5oIgogI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OC5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgogCiAvKioKICAqIGl4Z2JlX2RjYl9jb25maWcgLSBTdHJ1Y3QgY29udGFpbmluZyBEQ0Igc2V0dGluZ3MuCkBAIC0yMTUsNiArMjE2LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk4KGh3LCBzdGF0cywgdGNfY291bnQpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2dldF90Y19zdGF0c184MjU5OShodywgc3RhdHMsIHRjX2NvdW50KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzIsNiArMjM1LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OChodywgc3RhdHMsIHRjX2NvdW50KTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9nZXRfcGZjX3N0YXRzXzgyNTk5KGh3LCBzdGF0cywgdGNfY291bnQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0OCw2ICsyNTMsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI2NCw2ICsyNzEsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODAsNiArMjg5LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2RhdGFfYXJiaXRlcl84MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2RhdGFfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjk2LDYgKzMwNyw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxMSw2ICszMjQsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTgoaHcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OShodyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzI3LDYgKzM0Miw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5oCmluZGV4IDBkYTVjNmQuLjY0YTlmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5oCkBAIC03NSw2ICs3NSwyNiBAQAogCXByaW9fbGluawogfTsKIAorLyogRENCIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfRENCX1BHX1NVUFBPUlQgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfRENCX1BGQ19TVVBQT1JUICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfRENCX0JDTl9TVVBQT1JUICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfRENCX1VQMlRDX1NVUFBPUlQgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSVhHQkVfRENCX0dTUF9TVVBQT1JUICAgICAgIDB4MDAwMDAwMTAKKworI2RlZmluZSBJWEdCRV9EQ0JfOF9UQ19TVVBQT1JUICAgICAgMHg4MAorCitzdHJ1Y3QgZGNiX3N1cHBvcnQgeworCS8qIERDQiBjYXBhYmlsaXRpZXMgKi8KKwl1MzIgY2FwYWJpbGl0aWVzOworCisJLyogRWFjaCBiaXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBUQ3MgY29uZmlndXJhYmxlIGluIHRoZSBody4KKwkgKiBJZiA4IHRyYWZmaWMgY2xhc3NlcyBjYW4gYmUgY29uZmlndXJlZCwgdGhlIHZhbHVlIGlzIDB4ODAuCisJICovCisJdTggIHRyYWZmaWNfY2xhc3NlczsKKwl1OCAgcGZjX3RyYWZmaWNfY2xhc3NlczsKK307CisKIC8qIFRyYWZmaWMgY2xhc3MgYmFuZHdpZHRoIGFsbG9jYXRpb24gcGVyIGRpcmVjdGlvbiAqLwogc3RydWN0IHRjX2J3X2FsbG9jIHsKIAl1OCBid2dfaWQ7CQkgIC8qIEJhbmR3aWR0aCBHcm91cCAoQldHKSBJRCAqLwpAQCAtMTA4LDM4ICsxMjgsMTggQEAKIAlwYmFfODBfNDggICAgICAvKiBQQkFbMC0zXSBlYWNoIHVzZSA4MEtCLCBQQkFbNC03XSBlYWNoIHVzZSA0OEtCICovCiB9OwogCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgbWFueSB2YWx1ZXMgZW5jb2RlZCBhcyBmaXhlZC1wb2ludAotICogbnVtYmVycywgbWVhbmluZyB0aGF0IHNvbWUgb2YgYml0cyBhcmUgZGVkaWNhdGVkIHRvIHRoZQotICogbWFnbml0dWRlIGFuZCBvdGhlcnMgdG8gdGhlIGZyYWN0aW9uIHBhcnQuIEluIHRoZSBjb21tZW50cwotICogdGhpcyBpcyBzaG93biBhcyBmPW4sIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBiaXRzLgotICogVGhlc2UgZnJhY3Rpb24gYml0cyBhcmUgYWx3YXlzIHRoZSBsb3ctb3JkZXIgYml0cy4gVGhlIHNpemUKLSAqIG9mIHRoZSBtYWduaXR1ZGUgaXMgbm90IHNwZWNpZmllZC4KLSAqLwotc3RydWN0IGJjbl9jb25maWcgewotCXUzMiBycF9hZG1pbl9tb2RlW01BWF9UUkFGRklDX0NMQVNTXTsgLyogQkNOIGVuYWJsZWQsIHBlciBUQyAqLwotCXUzMiBiY25hX29wdGlvblsyXTsgLyogQkNOQSBQb3J0ICsgTUFDIEFkZHIgKi8KLQl1MzIgcnBfdzsgICAgICAgIC8qIERlcml2YXRpdmUgV2VpZ2h0LCBmPTMgKi8KLQl1MzIgcnBfZ2k7ICAgICAgIC8qIEluY3JlYXNlIEdhaW4sIGY9MTIgKi8KLQl1MzIgcnBfZ2Q7ICAgICAgIC8qIERlY3JlYXNlIEdhaW4sIGY9MTIgKi8KLQl1MzIgcnBfcnU7ICAgICAgIC8qIFJhdGUgVW5pdCAqLwotCXUzMiBycF9hbHBoYTsgICAgLyogTWF4IERlY3JlYXNlIEZhY3RvciwgZj0xMiAqLwotCXUzMiBycF9iZXRhOyAgICAgLyogTWF4IEluY3JlYXNlIEZhY3RvciwgZj0xMiAqLwotCXUzMiBycF9yaTsgICAgICAgLyogSW5pdGlhbCBSYXRlICovCi0JdTMyIHJwX3RkOyAgICAgICAvKiBEcmlmdCBJbnRlcnZhbCBUaW1lciAqLwotCXUzMiBycF9yZDsgICAgICAgLyogRHJpZnQgSW5jcmVhc2UgKi8KLQl1MzIgcnBfdG1heDsgICAgIC8qIFNldmVyZSBDb25nZXN0aW9uIEJhY2tvZmYgVGltZXIgUmFuZ2UgKi8KLQl1MzIgcnBfcm1pbjsgICAgIC8qIFNldmVyZSBDb25nZXN0aW9uIFJlc3RhcnQgUmF0ZSAqLwotCXUzMiBycF93cnR0OyAgICAgLyogUlRUIE1vdmluZyBBdmVyYWdlIFdlaWdodCAqLworc3RydWN0IGRjYl9udW1fdGNzIHsKKwl1OCBwZ190Y3M7CisJdTggcGZjX3RjczsKIH07CiAKIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnIHsKLQlzdHJ1Y3QgYmNuX2NvbmZpZyBiY247Ci0KKwlzdHJ1Y3QgZGNiX3N1cHBvcnQgc3VwcG9ydDsKKwlzdHJ1Y3QgZGNiX251bV90Y3MgbnVtX3RjczsKIAlzdHJ1Y3QgdGNfY29uZmlndXJhdGlvbiB0Y19jb25maWdbTUFYX1RSQUZGSUNfQ0xBU1NdOwogCXU4ICAgICBid19wZXJjZW50YWdlWzJdW01BWF9CV19HUk9VUF07IC8qIE9uZSBlYWNoIGZvciBUeC9SeCAqLwotCi0JYm9vbCAgcm91bmRfcm9iaW5fZW5hYmxlOworCWJvb2wgICBwZmNfbW9kZV9lbmFibGU7CisJYm9vbCAgIHJvdW5kX3JvYmluX2VuYWJsZTsKIAogCWVudW0gZGNiX3J4X3BiYV9jZmcgcnhfcGJhX2NmZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYwppbmRleCBkZjM1OTU1Li42MjIwNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYwpAQCAtMjk4LDcgKzI5OCw2IEBACiAJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwogCXJlZyAmPSB+SVhHQkVfUk1DU19URkNFXzgwMl8zWDsKIAkvKiBjb3JyZWN0IHRoZSByZXBvcnRpbmcgb2Ygb3VyIGZsb3cgY29udHJvbCBzdGF0dXMgKi8KLQlody0+ZmMuY3VycmVudF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKIAlyZWcgfD0gSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUk1DUywgcmVnKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBiNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMKQEAgLTAsMCArMSw0NjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKKyNpbmNsdWRlICJpeGdiZV9kY2IuaCIKKyNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTkuaCIKKworLyoqCisgKiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5IC0gUmV0dXJucyBzdGF0dXMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcworICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQHN0YXRzOiBwb2ludGVyIHRvIHN0YXRpc3RpY3Mgc3RydWN0dXJlCisgKiBAdGNfY291bnQ6ICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYndnX2FycmF5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RhdHVzIGRhdGEgZm9yIGVhY2ggb2YgdGhlIFRyYWZmaWMgQ2xhc3NlcyBpbiB1c2UuCisgKi8KK3MzMiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpCit7CisJaW50IHRjOworCisJaWYgKHRjX2NvdW50ID4gTUFYX1RSQUZGSUNfQ0xBU1MpCisJCXJldHVybiBEQ0JfRVJSX1BBUkFNOworCS8qIFN0YXRpc3RpY3MgcGVydGFpbmluZyB0byBlYWNoIHRyYWZmaWMgY2xhc3MgKi8KKwlmb3IgKHRjID0gMDsgdGMgPCB0Y19jb3VudDsgdGMrKykgeworCQkvKiBUcmFuc21pdHRlZCBQYWNrZXRzICovCisJCXN0YXRzLT5xcHRjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBUQyh0YykpOworCQkvKiBUcmFuc21pdHRlZCBCeXRlcyAqLworCQlzdGF0cy0+cWJ0Y1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCVEModGMpKTsKKwkJLyogUmVjZWl2ZWQgUGFja2V0cyAqLworCQlzdGF0cy0+cXByY1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkModGMpKTsKKwkJLyogUmVjZWl2ZWQgQnl0ZXMgKi8KKwkJc3RhdHMtPnFicmNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlJDKHRjKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkgLSBSZXR1cm4gQ0JGQyBzdGF0dXMgZGF0YQorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQHN0YXRzOiBwb2ludGVyIHRvIHN0YXRpc3RpY3Mgc3RydWN0dXJlCisgKiBAdGNfY291bnQ6ICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYndnX2FycmF5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQ0JGQyBzdGF0dXMgZGF0YSBmb3IgZWFjaCBvZiB0aGUgVHJhZmZpYyBDbGFzc2VzLgorICovCitzMzIgaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHRjX2NvdW50KQoreworCWludCB0YzsKKworCWlmICh0Y19jb3VudCA+IE1BWF9UUkFGRklDX0NMQVNTKQorCQlyZXR1cm4gRENCX0VSUl9QQVJBTTsKKwlmb3IgKHRjID0gMDsgdGMgPCB0Y19jb3VudDsgdGMrKykgeworCQkvKiBQcmlvcml0eSBYT0ZGIFRyYW5zbWl0dGVkICovCisJCXN0YXRzLT5weG9mZnR4Y1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BYT0ZGVFhDKHRjKSk7CisJCS8qIFByaW9yaXR5IFhPRkYgUmVjZWl2ZWQgKi8KKwkJc3RhdHMtPnB4b2ZmcnhjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPRkZSWENOVCh0YykpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkgLSBDb25maWd1cmUgRENCIHBhY2tldCBidWZmZXJzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBwYWNrZXQgYnVmZmVycyBmb3IgRENCIG1vZGUuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIHZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNjRLQjsKKwl1OCAgaSA9IDA7CisKKwkvKiBTZXR1cCBSeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCisJc3dpdGNoIChkY2JfY29uZmlnLT5yeF9wYmFfY2ZnKSB7CisJY2FzZSBwYmFfODBfNDg6CisJCS8qIFNldHVwIHRoZSBmaXJzdCBmb3VyIGF0IDgwS0IgKi8KKwkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV84MEtCOworCQlmb3IgKDsgaSA8IDQ7IGkrKykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKKwkJLyogU2V0dXAgdGhlIGxhc3QgZm91ciBhdCA0OEtCLi4uZG9uJ3QgcmUtaW5pdCBpICovCisJCXZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNDhLQjsKKwkJLyogRmFsbCBUaHJvdWdoICovCisJY2FzZSBwYmFfZXF1YWw6CisJZGVmYXVsdDoKKwkJZm9yICg7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKKworCQkvKiBTZXR1cCBUeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCisJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCU0laRShpKSwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCU0laRV8yMEtCKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlRIUkVTSChpKSwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCVEhSRVNIX0RDQik7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5IC0gQ29uZmlnIFJ4IERhdGEgYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgUnggUGFja2V0IEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzdHJ1Y3QgdGNfYndfYWxsb2MgICAgKnA7CisJdTMyICAgIHJlZyAgICAgICAgICAgPSAwOworCXUzMiAgICBjcmVkaXRfcmVmaWxsID0gMDsKKwl1MzIgICAgY3JlZGl0X21heCAgICA9IDA7CisJdTggICAgIGkgICAgICAgICAgICAgPSAwOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCBJWEdCRV9SVFJQQ1NfQVJCRElTKTsKKworCS8qIE1hcCBhbGwgdHJhZmZpYyBjbGFzc2VzIHRvIHRoZWlyIFVQLCAxIHRvIDEgKi8KKwlyZWcgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKQorCQlyZWcgfD0gKGkgPDwgKGkgKiBJWEdCRV9SVFJVUDJUQ19VUF9TSElGVCkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSVVAyVEMsIHJlZyk7CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1JYX0NPTkZJR107CisKKwkJY3JlZGl0X3JlZmlsbCA9IHAtPmRhdGFfY3JlZGl0c19yZWZpbGw7CisJCWNyZWRpdF9tYXggICAgPSBwLT5kYXRhX2NyZWRpdHNfbWF4OworCQlyZWcgPSBjcmVkaXRfcmVmaWxsIHwgKGNyZWRpdF9tYXggPDwgSVhHQkVfUlRSUFQ0Q19NQ0xfU0hJRlQpOworCisJCXJlZyB8PSAodTMyKShwLT5id2dfaWQpIDw8IElYR0JFX1JUUlBUNENfQldHX1NISUZUOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUUlBUNENfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUFQ0QyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBSeCBwYWNrZXQgcGxhbmUgKHJlY3ljbGUgbW9kZTsgV1NQKSBhbmQKKwkgKiBlbmFibGUgYXJiaXRlcgorCSAqLworCXJlZyA9IElYR0JFX1JUUlBDU19SUk0gfCBJWEdCRV9SVFJQQ1NfUkFDOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkgLSBDb25maWcgVHggRGVzYy4gYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgVHggRGVzY3JpcHRvciBBcmJpdGVyIGFuZCBjcmVkaXRzIGZvciBlYWNoIHRyYWZmaWMgY2xhc3MuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXN0cnVjdCB0Y19id19hbGxvYyAqcDsKKwl1MzIgICAgcmVnLCBtYXhfY3JlZGl0czsKKwl1OCAgICAgaTsKKworCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgSVhHQkVfUlRURENTX0FSQkRJUyk7CisKKwkvKiBDbGVhciB0aGUgcGVyLVR4IHF1ZXVlIGNyZWRpdHM7IHdlIHVzZSBwZXItVEMgaW5zdGVhZCAqLworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREVDFDLCAwKTsKKwl9CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1RYX0NPTkZJR107CisJCW1heF9jcmVkaXRzID0gZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLmRlc2NfY3JlZGl0c19tYXg7CisJCXJlZyA9IG1heF9jcmVkaXRzIDw8IElYR0JFX1JUVERUMkNfTUNMX1NISUZUOworCQlyZWcgfD0gcC0+ZGF0YV9jcmVkaXRzX3JlZmlsbDsKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRURFQyQ19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2dyb3VwKQorCQkJcmVnIHw9IElYR0JFX1JUVERUMkNfR1NQOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUVERUMkNfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFQyQyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBUeCBkZXNjcmlwdG9yIHBsYW5lIChyZWN5Y2xlIG1vZGU7IFdTUCkgYW5kCisJICogZW5hYmxlIGFyYml0ZXIKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFREQ1NfVERQQUMgfCBJWEdCRV9SVFREQ1NfVERSTTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcmVnKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5IC0gQ29uZmlnIFR4IERhdGEgYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgVHggUGFja2V0IEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJc3RydWN0IHRjX2J3X2FsbG9jICpwOworCXUzMiByZWc7CisJdTggaTsKKworCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBDUywgSVhHQkVfUlRUUENTX0FSQkRJUyk7CisKKwkvKiBNYXAgYWxsIHRyYWZmaWMgY2xhc3NlcyB0byB0aGVpciBVUCwgMSB0byAxICovCisJcmVnID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKKwkJcmVnIHw9IChpIDw8IChpICogSVhHQkVfUlRUVVAyVENfVVBfU0hJRlQpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFVQMlRDLCByZWcpOworCisJLyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3MgY3JlZGl0cyBhbmQgcHJpb3JpdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgeworCQlwID0gJmRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5wYXRoW0RDQl9UWF9DT05GSUddOworCQlyZWcgPSBwLT5kYXRhX2NyZWRpdHNfcmVmaWxsOworCQlyZWcgfD0gKHUzMikocC0+ZGF0YV9jcmVkaXRzX21heCkgPDwgSVhHQkVfUlRUUFQyQ19NQ0xfU0hJRlQ7CisJCXJlZyB8PSAodTMyKShwLT5id2dfaWQpIDw8IElYR0JFX1JUVFBUMkNfQldHX1NISUZUOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19ncm91cCkKKwkJCXJlZyB8PSBJWEdCRV9SVFRQVDJDX0dTUDsKKworCQlpZiAocC0+cHJpb190eXBlID09IHByaW9fbGluaykKKwkJCXJlZyB8PSBJWEdCRV9SVFRQVDJDX0xTUDsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBUMkMoaSksIHJlZyk7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgVHggcGFja2V0IHBsYW5lIChyZWN5Y2xlIG1vZGU7IFNQOyBhcmIgZGVsYXkpIGFuZAorCSAqIGVuYWJsZSBhcmJpdGVyCisJICovCisJcmVnID0gSVhHQkVfUlRUUENTX1RQUEFDIHwgSVhHQkVfUlRUUENTX1RQUk0gfAorCSAgICAgIChJWEdCRV9SVFRQQ1NfQVJCRF9EQ0IgPDwgSVhHQkVfUlRUUENTX0FSQkRfU0hJRlQpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkgLSBDb25maWd1cmUgcHJpb3JpdHkgZmxvdyBjb250cm9sCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBQcmlvcml0eSBGbG93IENvbnRyb2wgKFBGQykgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJdTMyIGksIHJlZzsKKworCS8qIElmIFBGQyBpcyBkaXNhYmxlZCBnbG9iYWxseSB0aGVuIGZhbGwgYmFjayB0byBMRkMuICovCisJaWYgKCFkY2JfY29uZmlnLT5wZmNfbW9kZV9lbmFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspCisJCQlody0+bWFjLm9wcy5zZXR1cF9mYyhodywgaSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIENvbmZpZ3VyZSBQRkMgVHggdGhyZXNob2xkcyBwZXIgVEMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgeworCQkvKiBDb25maWcgYW5kIHJlbWVtYmVyIFR4ICovCisJCWlmIChkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF9mdWxsIHx8CisJCSAgICBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF90eCkgeworCQkJcmVnID0gaHctPmZjLmhpZ2hfd2F0ZXIgfCBJWEdCRV9GQ1JUSF9GQ0VOOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShpKSwgcmVnKTsKKwkJCXJlZyA9IGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShpKSwgcmVnKTsKKwkJfSBlbHNlIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEhfODI1OTkoaSksIDApOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShpKSwgMCk7CisJCX0KKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IGh3LT5mYy5wYXVzZV90aW1lIHwgKGh3LT5mYy5wYXVzZV90aW1lIDw8IDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgKE1BWF9UUkFGRklDX0NMQVNTIC8gMik7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihpKSwgcmVnKTsKKworCS8qIENvbmZpZ3VyZSBmbG93IGNvbnRyb2wgcmVmcmVzaCB0aHJlc2hvbGQgdmFsdWUgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCBody0+ZmMucGF1c2VfdGltZSAvIDIpOworCisJLyogRW5hYmxlIFRyYW5zbWl0IFBGQyAqLworCXJlZyA9IElYR0JFX0ZDQ0ZHX1RGQ0VfUFJJT1JJVFk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ0NGRywgcmVnKTsKKworCS8qCisJICogRW5hYmxlIFJlY2VpdmUgUEZDCisJICogV2Ugd2lsbCBhbHdheXMgaG9ub3IgWE9GRiBmcmFtZXMgd2UgcmVjZWl2ZSB3aGVuCisJICogd2UgYXJlIGluIFBGQyBtb2RlLgorCSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CisJcmVnICY9IH5JWEdCRV9NRkxDTl9SRkNFOworCXJlZyB8PSBJWEdCRV9NRkxDTl9SUEZDRTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01GTENOLCByZWcpOworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkgLSBDb25maWcgdHJhZmZpYyBjbGFzcyBzdGF0aXN0aWNzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHF1ZXVlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLCBhbGwgcXVldWVzIGJlbG9uZ2luZyB0byBzYW1lIHRyYWZmaWMKKyAqIGNsYXNzIHVzZXMgYSBzaW5nbGUgc2V0IG9mIHF1ZXVlIHN0YXRpc3RpY3MgY291bnRlcnMuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHJlZyA9IDA7CisJdTggIGkgICA9IDA7CisKKwkvKgorCSAqIFJlY2VpdmUgUXVldWVzIHN0YXRzIHNldHRpbmcKKwkgKiAzMiBSUVNNUiByZWdpc3RlcnMsIGVhY2ggY29uZmlndXJpbmcgNCBxdWV1ZXMuCisJICogU2V0IGFsbCAxNiBxdWV1ZXMgb2YgZWFjaCBUQyB0byB0aGUgc2FtZSBzdGF0CisJICogd2l0aCBUQyAnbicgZ29pbmcgdG8gc3RhdCAnbicuCisJICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJcmVnID0gMHgwMTAxMDEwMSAqIChpIC8gNCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlFTTVIoaSksIHJlZyk7CisJfQorCS8qCisJICogVHJhbnNtaXQgUXVldWVzIHN0YXRzIHNldHRpbmcKKwkgKiAzMiBUUVNNIHJlZ2lzdGVycywgZWFjaCBjb250cm9sbGluZyA0IHF1ZXVlcy4KKwkgKiBTZXQgYWxsIHF1ZXVlcyBvZiBlYWNoIFRDIHRvIHRoZSBzYW1lIHN0YXQKKwkgKiB3aXRoIFRDICduJyBnb2luZyB0byBzdGF0ICduJy4KKwkgKiBUeCBxdWV1ZXMgYXJlIGFsbG9jYXRlZCBub24tdW5pZm9ybWx5IHRvIFRDczoKKwkgKiAzMiwgMzIsIDE2LCAxNiwgOCwgOCwgOCwgOC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoaSA8IDgpCisJCQlyZWcgPSAweDAwMDAwMDAwOworCQllbHNlIGlmIChpIDwgMTYpCisJCQlyZWcgPSAweDAxMDEwMTAxOworCQllbHNlIGlmIChpIDwgMjApCisJCQlyZWcgPSAweDAyMDIwMjAyOworCQllbHNlIGlmIChpIDwgMjQpCisJCQlyZWcgPSAweDAzMDMwMzAzOworCQllbHNlIGlmIChpIDwgMjYpCisJCQlyZWcgPSAweDA0MDQwNDA0OworCQllbHNlIGlmIChpIDwgMjgpCisJCQlyZWcgPSAweDA1MDUwNTA1OworCQllbHNlIGlmIChpIDwgMzApCisJCQlyZWcgPSAweDA2MDYwNjA2OworCQllbHNlCisJCQlyZWcgPSAweDA3MDcwNzA3OworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RRU00oaSksIHJlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ184MjU5OSAtIENvbmZpZ3VyZSBnZW5lcmFsIERDQiBwYXJhbWV0ZXJzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBnZW5lcmFsIERDQiBwYXJhbWV0ZXJzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiByZWc7CisJdTMyIHE7CisKKwkvKiBEaXNhYmxlIHRoZSBUeCBkZXNjIGFyYml0ZXIgc28gdGhhdCBNVFFDIGNhbiBiZSBjaGFuZ2VkICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JUVERDUyk7CisJcmVnIHw9IElYR0JFX1JUVERDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJlZyk7CisKKwkvKiBFbmFibGUgRENCIGZvciBSeCB3aXRoIDggVENzICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01SUUMpOworCXN3aXRjaCAocmVnICYgSVhHQkVfTVJRQ19NUlFFX01BU0spIHsKKwljYXNlIDA6CisJY2FzZSBJWEdCRV9NUlFDX1JUNFRDRU46CisJCS8qIFJTUyBkaXNhYmxlZCBjYXNlcyAqLworCQlyZWcgPSAocmVnICYgfklYR0JFX01SUUNfTVJRRV9NQVNLKSB8IElYR0JFX01SUUNfUlQ4VENFTjsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9NUlFDX1JTU0VOOgorCWNhc2UgSVhHQkVfTVJRQ19SVFJTUzRUQ0VOOgorCQkvKiBSU1MgZW5hYmxlZCBjYXNlcyAqLworCQlyZWcgPSAocmVnICYgfklYR0JFX01SUUNfTVJRRV9NQVNLKSB8IElYR0JFX01SUUNfUlRSU1M4VENFTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5zdXBwb3J0ZWQgdmFsdWUsIGFzc3VtZSBzdGFsZSBkYXRhLCBvdmVyd3JpdGUgbm8gUlNTICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVDhUQ0VOOworCX0KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIHJlZyk7CisKKwkvKiBFbmFibGUgRENCIGZvciBUeCB3aXRoIDggVENzICovCisJcmVnID0gSVhHQkVfTVRRQ19SVF9FTkEgfCBJWEdCRV9NVFFDXzhUQ184VFE7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCByZWcpOworCisJLyogRGlzYWJsZSBkcm9wIGZvciBhbGwgcXVldWVzICovCisJZm9yIChxID0gMDsgcSA8IDEyODsgcSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1FERSwgcSA8PCBJWEdCRV9RREVfSURYX1NISUZUKTsKKworCS8qIEVuYWJsZSB0aGUgVHggZGVzYyBhcmJpdGVyICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JUVERDUyk7CisJcmVnICY9IH5JWEdCRV9SVFREQ1NfQVJCRElTOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OSAtIENvbmZpZ3VyZSBhbmQgZW5hYmxlIERDQgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgZGNiIHNldHRpbmdzIGFuZCBlbmFibGUgZGNiIG1vZGUuCisgKi8KK3MzMiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnXzgyNTk5KGh3KTsKKwlpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnX3R4X2RhdGFfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoaHcpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1ZTI4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5oCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9EQ0JfODI1OTlfQ09ORklHX0hfCisjZGVmaW5lIF9EQ0JfODI1OTlfQ09ORklHX0hfCisKKy8qIERDQiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVERQQUMgICAgICAweDAwMDAwMDAxIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBXU1AgLSBXZWlnaHRlZCBTdHJpY3QgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1ZNUEFDICAgICAgMHgwMDAwMDAwMiAvKiAwIFJvdW5kIFJvYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgV1JSIC0gV2VpZ2h0ZWQgUm91bmQgUm9iaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1REUk0gICAgICAgMHgwMDAwMDAxMCAvKiBUcmFuc21pdCBSZWN5Y2xlIE1vZGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBEQ0IgYXJiaXRlciBkaXNhYmxlICovCisjZGVmaW5lIElYR0JFX1JUVERDU19CRFBNICAgICAgIDB4MDA0MDAwMDAgLyogQnlwYXNzIERhdGEgUGlwZSAtIG11c3QgY2xlYXIhICovCisjZGVmaW5lIElYR0JFX1JUVERDU19CUEJGU00gICAgIDB4MDA4MDAwMDAgLyogQnlwYXNzIFBCIEZyZWUgU3BhY2UgLSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsZWFyIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1NQRUVEX0NIRyAgMHg4MDAwMDAwMCAvKiBMaW5rIHNwZWVkIGNoYW5nZSAqLworCisvKiBSZWNlaXZlIFVQMlRDIG1hcHBpbmcgKi8KKyNkZWZpbmUgSVhHQkVfUlRSVVAyVENfVVBfU0hJRlQgMworLyogVHJhbnNtaXQgVVAyVEMgbWFwcGluZyAqLworI2RlZmluZSBJWEdCRV9SVFRVUDJUQ19VUF9TSElGVCAzCisKKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19NQ0xfU0hJRlQgMTIgLyogT2Zmc2V0IHRvIE1heCBDcmVkaXQgTGltaXQgc2V0dGluZyAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRDX0JXR19TSElGVCA5ICAvKiBPZmZzZXQgdG8gQldHIGluZGV4ICovCisjZGVmaW5lIElYR0JFX1JUUlBUNENfR1NQICAgICAgIDB4NDAwMDAwMDAgLyogR1NQIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19MU1AgICAgICAgMHg4MDAwMDAwMCAvKiBMU1AgZW5hYmxlIGJpdCAqLworCisjZGVmaW5lIElYR0JFX1JEUlhDVExfTVBCRU4gICAgIDB4MDAwMDAwMTAgLyogRE1BIGNvbmZpZyBmb3IgbXVsdGlwbGUgcGFja2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnVmZmVycyBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9NQ0VOICAgICAgMHgwMDAwMDA0MCAvKiBETUEgY29uZmlnIGZvciBtdWx0aXBsZSBjb3JlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChSU1MpIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBSVFJQQ1MgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JUUlBDU19SUk0gICAgICAgIDB4MDAwMDAwMDIgLyogUmVjZWl2ZSBSZWN5Y2xlIE1vZGUgZW5hYmxlICovCisvKiBSZWNlaXZlIEFyYml0cmF0aW9uIENvbnRyb2w6IDAgUm91bmQgUm9iaW4sIDEgREZQICovCisjZGVmaW5lIElYR0JFX1JUUlBDU19SQUMgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfUlRSUENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBBcmJpdHJhdGlvbiBkaXNhYmxlIGJpdCAqLworCisvKiBSVFREVDJDIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9SVFREVDJDX01DTF9TSElGVCAxMgorI2RlZmluZSBJWEdCRV9SVFREVDJDX0JXR19TSElGVCA5CisjZGVmaW5lIElYR0JFX1JUVERUMkNfR1NQICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlRURFQyQ19MU1AgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfTUNMX1NISUZUIDEyCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfQldHX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19HU1AgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9SVFRQVDJDX0xTUCAgICAgICAweDgwMDAwMDAwCisKKy8qIFJUVFBDUyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX1RQUEFDICAgICAgMHgwMDAwMDAyMCAvKiAwIFJvdW5kIFJvYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgU1AgLSBTdHJpY3QgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBBcmJpdGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX1RQUk0gICAgICAgMHgwMDAwMDEwMCAvKiBUcmFuc21pdCBSZWN5Y2xlIE1vZGUgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX1JUVFBDU19BUkJEX1NISUZUIDIyCisjZGVmaW5lIElYR0JFX1JUVFBDU19BUkJEX0RDQiAgIDB4NCAgICAgICAgLyogQXJiaXRyYXRpb24gZGVsYXkgaW4gRENCIG1vZGUgKi8KKworI2RlZmluZSBJWEdCRV9UWFBCU0laRV8yMEtCICAgICAweDAwMDA1MDAwIC8qIDIwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9UWFBCU0laRV80MEtCICAgICAweDAwMDBBMDAwIC8qIDQwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV80OEtCICAgICAweDAwMDBDMDAwIC8qIDQ4S0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV82NEtCICAgICAweDAwMDEwMDAwIC8qIDY0S0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV84MEtCICAgICAweDAwMDE0MDAwIC8qIDgwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV8xMjhLQiAgICAweDAwMDIwMDAwIC8qIDEyOEtCIFBhY2tldCBCdWZmZXIgKi8KKworI2RlZmluZSBJWEdCRV9UWFBCVEhSRVNIX0RDQiAgICAweEEgICAgICAgIC8qIFRIUkVTSCB2YWx1ZSBmb3IgRENCIG1vZGUgKi8KKworCisvKiBEQ0IgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIEFQSXMgKi8KKworLyogRENCIFBGQyBmdW5jdGlvbnMgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKTsKK3MzMiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpOworCisvKiBEQ0IgdHJhZmZpYyBjbGFzcyBzdGF0cyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfZGNiX2dldF90Y19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2h3X3N0YXRzICpzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHRjX2NvdW50KTsKKworLyogRENCIGNvbmZpZyBhcmJpdGVycyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CisKKworLyogRENCIGh3IGluaXRpYWxpemF0aW9uICovCitzMzIgaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmNvbmZpZyk7CisKKyNlbmRpZiAvKiBfRENCXzgyNTk5X0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCmluZGV4IGRkOWQxZDYuLjBhODczMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIEJJVF9QR19SWAkweDA0CiAjZGVmaW5lIEJJVF9QR19UWAkweDA4CiAjZGVmaW5lIEJJVF9CQ04gICAgICAgICAweDEwCisjZGVmaW5lIEJJVF9MSU5LU1BFRUQgICAweDgwCiAKIGludCBpeGdiZV9jb3B5X2RjYl9jZmcoc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKnNyY19kY2JfY2ZnLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZHN0X2RjYl9jZmcsIGludCB0Y19tYXgpCkBAIC04OSwyNSArOTAsNiBAQAogCQkJc3JjX2RjYl9jZmctPnRjX2NvbmZpZ1tpIC0gRENCX1BGQ19VUF9BVFRSXzBdLmRjYl9wZmM7CiAJfQogCi0JZm9yIChpID0gRENCX0JDTl9BVFRSX1JQXzA7IGkgPCBEQ0JfQkNOX0FUVFJfUlBfQUxMOyBpKyspIHsKLQkJZHN0X2RjYl9jZmctPmJjbi5ycF9hZG1pbl9tb2RlW2kgLSBEQ0JfQkNOX0FUVFJfUlBfMF0gPQotCQkJc3JjX2RjYl9jZmctPmJjbi5ycF9hZG1pbl9tb2RlW2kgLSBEQ0JfQkNOX0FUVFJfUlBfMF07Ci0JfQotCWRzdF9kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMF0gPSBzcmNfZGNiX2NmZy0+YmNuLmJjbmFfb3B0aW9uWzBdOwotCWRzdF9kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMV0gPSBzcmNfZGNiX2NmZy0+YmNuLmJjbmFfb3B0aW9uWzFdOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfYWxwaGEgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2FscGhhOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfYmV0YSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfYmV0YTsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX2dkID0gc3JjX2RjYl9jZmctPmJjbi5ycF9nZDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX2dpID0gc3JjX2RjYl9jZmctPmJjbi5ycF9naTsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3RtYXggPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3RtYXg7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF90ZCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfdGQ7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9ybWluID0gc3JjX2RjYl9jZmctPmJjbi5ycF9ybWluOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfdyA9IHNyY19kY2JfY2ZnLT5iY24ucnBfdzsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3JkID0gc3JjX2RjYl9jZmctPmJjbi5ycF9yZDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3J1ID0gc3JjX2RjYl9jZmctPmJjbi5ycF9ydTsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3dydHQgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3dydHQ7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9yaSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfcmk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIwLDEyICsxMDIsNiBAQAogCXJldHVybiAhIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOwogfQogCi1zdGF0aWMgdTE2IGl4Z2JlX2RjYl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKiBBbGwgdHJhZmZpYyBzaG91bGQgZGVmYXVsdCB0byBjbGFzcyAwICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1OCBpeGdiZV9kY2JubF9zZXRfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggc3RhdGUpCiB7CiAJdTggZXJyID0gMDsKQEAgLTE1Myw4ICsxMjksOCBAQAogCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKIAkJYWRhcHRlci0+dHhfcmluZyA9IE5VTEw7CiAJCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOwotCQluZXRkZXYtPnNlbGVjdF9xdWV1ZSA9ICZpeGdiZV9kY2Jfc2VsZWN0X3F1ZXVlOwogCisJCWFkYXB0ZXItPmh3LmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfcGZjOwogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKIAkJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwpAQCAtMTYzLDYgKzEzOSw3IEBACiAJfSBlbHNlIHsKIAkJLyogVHVybiBvZmYgRENCICovCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKKwkJCWFkYXB0ZXItPmh3LmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZGVmYXVsdDsKIAkJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChuZXRkZXYpOwogCQkJaXhnYmVfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CkBAIC0xNzIsNyArMTQ5LDYgQEAKIAkJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwogCQkJYWRhcHRlci0+dHhfcmluZyA9IE5VTEw7CiAJCQlhZGFwdGVyLT5yeF9yaW5nID0gTlVMTDsKLQkJCW5ldGRldi0+c2VsZWN0X3F1ZXVlID0gTlVMTDsKIAogCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7CiAJCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOwpAQCAtNDQ0LDE3NSArNDIwLDYgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldGJjbnJwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSwKLQkJCQkgIHU4ICpzZXR0aW5nKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYWRtaW5fbW9kZVtwcmlvcml0eV07Ci19Ci0KLQotc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZ2V0YmNuY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBlbnVtX2luZGV4LAotCQkJCSAgdTMyICpzZXR0aW5nKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXN3aXRjaCAoZW51bV9pbmRleCkgewotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8xOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9BTFBIQToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9hbHBoYTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkVUQToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9iZXRhOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9HRDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9nZDsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0k6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2k7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1RNQVg6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdG1heDsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVEQ6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdGQ7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JNSU46Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcm1pbjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVzoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SRDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9yZDsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUlU6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcnU7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1dSVFQ6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfd3J0dDsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkk6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSpzZXR0aW5nID0gLTE7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9zZXRiY25ycChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpb3JpdHksCi0JCQkJIHU4IHNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9hZG1pbl9tb2RlW3ByaW9yaXR5XSA9IHNldHRpbmc7Ci0KLQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9hZG1pbl9tb2RlW3ByaW9yaXR5XSAhPQotCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9hZG1pbl9tb2RlW3ByaW9yaXR5XSkKLQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLX0KLQotc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfc2V0YmNuY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBlbnVtX2luZGV4LAotCQkJCSB1MzIgc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlzd2l0Y2ggKGVudW1faW5kZXgpIHsKLQljYXNlIERDQl9CQ05fQVRUUl9CQ05BXzA6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMF0gPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXSAhPQotCQkJYWRhcHRlci0+ZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMF0pCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CQ05BXzE6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMV0gPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXSAhPQotCQkJYWRhcHRlci0+ZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMV0pCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9BTFBIQToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9hbHBoYSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FscGhhICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9hbHBoYSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JFVEE6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYmV0YSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2JldGEgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2JldGEpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9HRDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9nZCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2dkICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9nZCkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dJOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2dpID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2kgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dpKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVE1BWDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90bWF4ID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdG1heCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdG1heCkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1REOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RkID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdGQgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3RkKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUk1JTjoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ybWluID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcm1pbiAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcm1pbikKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1c6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdyA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3cgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3cpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SRDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yZCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JkICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9yZCkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JVOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3J1ID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcnUgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3J1KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfV1JUVDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93cnR0ID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfd3J0dCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfd3J0dCkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JJOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JpID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmkgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JpKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCiBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgZGNibmxfb3BzID0gewogCS5nZXRzdGF0ZQk9IGl4Z2JlX2RjYm5sX2dldF9zdGF0ZSwKIAkuc2V0c3RhdGUJPSBpeGdiZV9kY2JubF9zZXRfc3RhdGUsCkBAIC02MzMsOSArNDQwLDUgQEAKIAkuc2V0bnVtdGNzCT0gaXhnYmVfZGNibmxfc2V0bnVtdGNzLAogCS5nZXRwZmNzdGF0ZQk9IGl4Z2JlX2RjYm5sX2dldHBmY3N0YXRlLAogCS5zZXRwZmNzdGF0ZQk9IGl4Z2JlX2RjYm5sX3NldHBmY3N0YXRlLAotCS5nZXRiY25jZmcgICAgICA9IGl4Z2JlX2RjYm5sX2dldGJjbmNmZywKLQkuZ2V0YmNucnAgICAgICAgPSBpeGdiZV9kY2JubF9nZXRiY25ycCwKLQkuc2V0YmNuY2ZnICAgICAgPSBpeGdiZV9kY2JubF9zZXRiY25jZmcsCi0JLnNldGJjbnJwICAgICAgID0gaXhnYmVfZGNibmxfc2V0YmNucnAKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwppbmRleCBjZWMyZjRlLi4xOGVjYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCkBAIC04OSw2ICs4OSw3IEBACiAJeyJyeF9oZWFkZXJfc3BsaXQiLCBJWEdCRV9TVEFUKHJ4X2hkcl9zcGxpdCl9LAogCXsiYWxsb2NfcnhfcGFnZV9mYWlsZWQiLCBJWEdCRV9TVEFUKGFsbG9jX3J4X3BhZ2VfZmFpbGVkKX0sCiAJeyJhbGxvY19yeF9idWZmX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpfSwKKwl7InJ4X25vX2RtYV9yZXNvdXJjZXMiLCBJWEdCRV9TVEFUKGh3X3J4X25vX2RtYV9yZXNvdXJjZXMpfSwKIH07CiAKICNkZWZpbmUgSVhHQkVfUVVFVUVfU1RBVFNfTEVOIFwKQEAgLTQ2OSw3ICs0NzAsNyBAQAogCXJlZ3NfYnVmZls4MjVdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lQNkFUKTsKIAlyZWdzX2J1ZmZbODI2XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9XVVBMKTsKIAlyZWdzX2J1ZmZbODI3XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9XVVBNKTsKLQlyZWdzX2J1ZmZbODI4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GSEZUKTsKKwlyZWdzX2J1ZmZbODI4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GSEZUKDApKTsKIAogCXJlZ3NfYnVmZls4MjldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwogCXJlZ3NfYnVmZls4MzBdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RQTUNTKTsKQEAgLTkwOCwxMiArOTA5LDUwIEBACiBzdGF0aWMgdm9pZCBpeGdiZV9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKLQl3b2wtPnN1cHBvcnRlZCA9IDA7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX1VDQVNUIHwgV0FLRV9NQ0FTVCB8CisJICAgICAgICAgICAgICAgICBXQUtFX0JDQVNUIHwgV0FLRV9NQUdJQzsKIAl3b2wtPndvbG9wdHMgPSAwOwogCisJaWYgKCFkZXZpY2VfY2FuX3dha2V1cCgmYWRhcHRlci0+cGRldi0+ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGFkYXB0ZXItPndvbCAmIElYR0JFX1dVRkNfRVgpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1VDQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX01DKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19CQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfQkNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIElYR0JFX1dVRkNfTUFHKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKKwogCXJldHVybjsKIH0KIAorc3RhdGljIGludCBpeGdiZV9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAod29sLT53b2xvcHRzICYgKFdBS0VfUEhZIHwgV0FLRV9BUlAgfCBXQUtFX01BR0lDU0VDVVJFKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJYWRhcHRlci0+d29sID0gMDsKKworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1VDQVNUKQorCQlhZGFwdGVyLT53b2wgfD0gSVhHQkVfV1VGQ19FWDsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQ0FTVCkKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfTUM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfQkNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX0JDOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQorCQlhZGFwdGVyLT53b2wgfD0gSVhHQkVfV1VGQ19NQUc7CisKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmFkYXB0ZXItPnBkZXYtPmRldiwgYWRhcHRlci0+d29sKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGl4Z2JlX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC05NzYsNDAgKzEwMTUsNDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgaTsKIAogCWlmIChlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxKQogCQlhZGFwdGVyLT50eF9yaW5nWzBdLndvcmtfbGltaXQgPSBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOwogCiAJaWYgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA+IDEpIHsKKwkJLyogY2hlY2sgdGhlIGxpbWl0cyAqLworCQlpZiAoKDEwMDAwMDAvZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gSVhHQkVfTUFYX0lOVF9SQVRFKSB8fAorCQkgICAgKDEwMDAwMDAvZWMtPnJ4X2NvYWxlc2NlX3VzZWNzIDwgSVhHQkVfTUlOX0lOVF9SQVRFKSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCS8qIHN0b3JlIHRoZSB2YWx1ZSBpbiBpbnRzL3NlY29uZCAqLwogCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3M7CiAKIAkJLyogc3RhdGljIHZhbHVlIG9mIGludGVycnVwdCByYXRlICovCiAJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gYWRhcHRlci0+ZWl0cl9wYXJhbTsKLQkJLyogY2xlYXIgdGhlIGxvd2VyIGJpdCAqLworCQkvKiBjbGVhciB0aGUgbG93ZXIgYml0IGFzIGl0cyB1c2VkIGZvciBkeW5hbWljIHN0YXRlICovCiAJCWFkYXB0ZXItPml0cl9zZXR0aW5nICY9IH4xOwogCX0gZWxzZSBpZiAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID09IDEpIHsKIAkJLyogMSBtZWFucyBkeW5hbWljIG1vZGUgKi8KIAkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDIwMDAwOwogCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDE7CiAJfSBlbHNlIHsKLQkJLyogYW55IG90aGVyIHZhbHVlIG1lYW5zIGRpc2FibGUgZWl0ciwgd2hpY2ggaXMgYmVzdAotCQkgKiBzZXJ2ZWQgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IHJhdGUgdmVyeSBoaWdoICovCi0JCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAzMDAwMDAwOworCQkvKgorCQkgKiBhbnkgb3RoZXIgdmFsdWUgbWVhbnMgZGlzYWJsZSBlaXRyLCB3aGljaCBpcyBiZXN0CisJCSAqIHNlcnZlZCBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgcmF0ZSB2ZXJ5IGhpZ2gKKwkJICovCisJCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSBJWEdCRV9NQVhfSU5UX1JBVEU7CiAJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7IGkrKykgewogCQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gJmFkYXB0ZXItPnFfdmVjdG9yW2ldOwogCQlpZiAocV92ZWN0b3ItPnR4cl9jb3VudCAmJiAhcV92ZWN0b3ItPnJ4cl9jb3VudCkKKwkJCS8qIHR4IHZlY3RvciBnZXRzIGhhbGYgdGhlIHJhdGUgKi8KIAkJCXFfdmVjdG9yLT5laXRyID0gKGFkYXB0ZXItPmVpdHJfcGFyYW0gPj4gMSk7CiAJCWVsc2UKIAkJCS8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi8KIAkJCXFfdmVjdG9yLT5laXRyID0gYWRhcHRlci0+ZWl0cl9wYXJhbTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKGkpLAotCQkgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKHFfdmVjdG9yLT5laXRyKSk7CisJCWl4Z2JlX3dyaXRlX2VpdHIoYWRhcHRlciwgaSwKKwkJICAgICAgICAgICAgICAgICBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcocV92ZWN0b3ItPmVpdHIpKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEwMjMsNiArMTA2OSw3IEBACiAJLmdldF9yZWdzX2xlbiAgICAgICAgICAgPSBpeGdiZV9nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzICAgICAgICAgICAgICAgPSBpeGdiZV9nZXRfcmVncywKIAkuZ2V0X3dvbCAgICAgICAgICAgICAgICA9IGl4Z2JlX2dldF93b2wsCisJLnNldF93b2wgICAgICAgICAgICAgICAgPSBpeGdiZV9zZXRfd29sLAogCS5ud2F5X3Jlc2V0ICAgICAgICAgICAgID0gaXhnYmVfbndheV9yZXNldCwKIAkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9lZXByb21fbGVuICAgICAgICAgPSBpeGdiZV9nZXRfZWVwcm9tX2xlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCA4YzMyYzE4Zi4uNzlhYTgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNDcsMTIgKzQ3LDEzIEBACiBzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfc3RyaW5nW10gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVsKFIpIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTmV0d29yayBEcml2ZXIiOwogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIxLjMuNTYtazIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuOC1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppeGdiZV9pbmZvX3RibFtdID0gewogCVtib2FyZF84MjU5OF0gPSAmaXhnYmVfODI1OThfaW5mbywKKwlbYm9hcmRfODI1OTldID0gJml4Z2JlXzgyNTk5X2luZm8sCiB9OwogCiAvKiBpeGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQpAQCAtODYsNiArODcsMTAgQEAKIAkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OF9CWCksCiAJIGJvYXJkXzgyNTk4IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfS1g0KSwKKwkgYm9hcmRfODI1OTkgfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OV9TRlApLAorCSBib2FyZF84MjU5OSB9LAogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLCB9CkBAIC0xMjksMTcgKzEzNCw1MyBAQAogCSAgICAgICAgICAgICAgICBjdHJsX2V4dCB8IElYR0JFX0NUUkxfRVhUX0RSVl9MT0FEKTsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfc2V0X2l2YXIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBpbnRfYWxsb2NfZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBtc2l4X3ZlY3RvcikKKy8qCisgKiBpeGdiZV9zZXRfaXZhciAtIHNldCB0aGUgSVZBUiByZWdpc3RlcnMsIG1hcHBpbmcgaW50ZXJydXB0IGNhdXNlcyB0byB2ZWN0b3JzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIHN0cnVjdAorICogQGRpcmVjdGlvbjogMCBmb3IgUngsIDEgZm9yIFR4LCAtMSBmb3Igb3RoZXIgY2F1c2VzCisgKiBAcXVldWU6IHF1ZXVlIHRvIG1hcCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgdG8KKyAqIEBtc2l4X3ZlY3RvcjogdGhlIHZlY3RvciB0byBtYXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcXVldWUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdmFyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBzOCBkaXJlY3Rpb24sCisJICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlLCB1OCBtc2l4X3ZlY3RvcikKIHsKIAl1MzIgaXZhciwgaW5kZXg7Ci0KLQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKLQlpbmRleCA9IChpbnRfYWxsb2NfZW50cnkgPj4gMikgJiAweDFGOwotCWl2YXIgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVIoaW5kZXgpKTsKLQlpdmFyICY9IH4oMHhGRiA8PCAoOCAqIChpbnRfYWxsb2NfZW50cnkgJiAweDMpKSk7Ci0JaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgKDggKiAoaW50X2FsbG9jX2VudHJ5ICYgMHgzKSkpOwotCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVIoaW5kZXgpLCBpdmFyKTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKKwkJbXNpeF92ZWN0b3IgfD0gSVhHQkVfSVZBUl9BTExPQ19WQUw7CisJCWlmIChkaXJlY3Rpb24gPT0gLTEpCisJCQlkaXJlY3Rpb24gPSAwOworCQlpbmRleCA9ICgoKGRpcmVjdGlvbiAqIDY0KSArIHF1ZXVlKSA+PiAyKSAmIDB4MUY7CisJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSVZBUihpbmRleCkpOworCQlpdmFyICY9IH4oMHhGRiA8PCAoOCAqIChxdWV1ZSAmIDB4MykpKTsKKwkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgKDggKiAocXVldWUgJiAweDMpKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSVZBUihpbmRleCksIGl2YXIpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCQlpZiAoZGlyZWN0aW9uID09IC0xKSB7CisJCQkvKiBvdGhlciBjYXVzZXMgKi8KKwkJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQkJaW5kZXggPSAoKHF1ZXVlICYgMSkgKiA4KTsKKwkJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVJfTUlTQyk7CisJCQlpdmFyICY9IH4oMHhGRiA8PCBpbmRleCk7CisJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciA8PCBpbmRleCk7CisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSX01JU0MsIGl2YXIpOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQkvKiB0eCBvciByeCBjYXVzZXMgKi8KKwkJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQkJaW5kZXggPSAoKDE2ICogKHF1ZXVlICYgMSkpICsgKDggKiBkaXJlY3Rpb24pKTsKKwkJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSVZBUihxdWV1ZSA+PiAxKSk7CisJCQlpdmFyICY9IH4oMHhGRiA8PCBpbmRleCk7CisJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciA8PCBpbmRleCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0lWQVIocXVldWUgPj4gMSksIGl2YXIpOworCQkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMjEwLDYgKzI1MSw4IEBACiAgKiBpeGdiZV9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHR4X3Jpbmc6IHR4IHJpbmcgdG8gY2xlYW4KKyAqCisgKiByZXR1cm5zIHRydWUgaWYgdHJhbnNtaXQgd29yayBpcyBkb25lCiAgKiovCiBzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl90eF9pcnEoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcpCkBAIC0yMjUsNyArMjY4LDcgQEAKIAllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOwogCiAJd2hpbGUgKChlb3BfZGVzYy0+d2Iuc3RhdHVzICYgY3B1X3RvX2xlMzIoSVhHQkVfVFhEX1NUQVRfREQpKSAmJgotCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKKwkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdCkpIHsKIAkJYm9vbCBjbGVhbmVkID0gZmFsc2U7CiAJCWZvciAoIDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yODcsOCArMzMwLDcgQEAKIAl9CiAKIAkvKiByZS1hcm0gdGhlIGludGVycnVwdCAqLwotCWlmICgodG90YWxfcGFja2V0cyA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KSB8fAotCSAgICAoY291bnQgPT0gdHhfcmluZy0+Y291bnQpKQorCWlmIChjb3VudCA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KQogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCB0eF9yaW5nLT52X2lkeCk7CiAKIAl0eF9yaW5nLT50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKQEAgLTI5Nyw3ICszMzksNyBAQAogCXR4X3JpbmctPnN0YXRzLmJ5dGVzICs9IHRvdGFsX2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwotCXJldHVybiAodG90YWxfcGFja2V0cyA/IHRydWUgOiBmYWxzZSk7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPndvcmtfbGltaXQpOwogfQogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQpAQCAtMzEwLDEzICszNTIsMTkgQEAKIAogCWlmIChyeF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSk7Ci0JCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLOwotCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0s7CisJCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJcnhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJcnhjdHJsIHw9IElYR0JFX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CiAJCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19SUk9fRU4pOwogCQlyeGN0cmwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfV1JPX0VOIHwKLQkJCSAgICBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7CisJCSAgICAgICAgICAgIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOKTsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSwgcnhjdHJsKTsKIAkJcnhfcmluZy0+Y3B1ID0gY3B1OwogCX0KQEAgLTMzMiw4ICszODAsMTQgQEAKIAogCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSk7Ci0JCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwotCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7CisJCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQl0eGN0cmwgfD0gSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSwgdHhjdHJsKTsKIAkJdHhfcmluZy0+Y3B1ID0gY3B1OwpAQCAtNDY0LDYgKzUxOCwxOSBAQAogCWFkYXB0ZXItPmh3X2NzdW1fcnhfZ29vZCsrOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcmVsZWFzZV9yeF9kZXNjKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nLCB1MzIgdmFsKQoreworCS8qCisJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuCisJICovCisJd21iKCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFQocnhfcmluZy0+cmVnX2lkeCksIHZhbCk7Cit9CisKIC8qKgogICogaXhnYmVfYWxsb2NfcnhfYnVmZmVycyAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnM7IHBhY2tldCBzcGxpdAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTQ3Niw2ICs1NDMsNyBAQAogCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjOwogCXN0cnVjdCBpeGdiZV9yeF9idWZmZXIgKmJpOwogCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBidWZzeiA9IHJ4X3JpbmctPnJ4X2J1Zl9sZW4gKyBORVRfSVBfQUxJR047CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b191c2U7CiAJYmkgPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CkBAIC01MDUsOSArNTczLDcgQEAKIAogCQlpZiAoIWJpLT5za2IpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgKHJ4X3JpbmctPnJ4X2J1Zl9sZW4gKwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgTkVUX0lQX0FMSUdOKSk7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwgYnVmc3opOwogCiAJCQlpZiAoIXNrYikgewogCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CkBAIC01MjIsOCArNTg4LDcgQEAKIAkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKIAogCQkJYmktPnNrYiA9IHNrYjsKLQkJCWJpLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCWJpLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIGJ1ZnN6LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRuJ3QgY2hhbmdlIGJlY2F1c2UKQEAgLTU0NywxNCArNjEyLDcgQEAKIAkJaWYgKGktLSA9PSAwKQogCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOwogCi0JCS8qCi0JCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93Ci0JCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5Ci0JCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCi0JCSAqIHN1Y2ggYXMgSUEtNjQpLgotCQkgKi8KLQkJd21iKCk7Ci0JCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CisJCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsIHJ4X3JpbmcsIGkpOwogCX0KIH0KIApAQCAtNzIxLDcgKzc3OSw4IEBACiAKIAlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAotCS8qIFBvcHVsYXRlIHRoZSBJVkFSIHRhYmxlIGFuZCBzZXQgdGhlIElUUiB2YWx1ZXMgdG8gdGhlCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgSVZBUiB0YWJsZSBhbmQgc2V0IHRoZSBJVFIgdmFsdWVzIHRvIHRoZQogCSAqIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIuCiAJICovCiAJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CkBAIC03MzIsNyArNzkxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NDIsNyArODAxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NTEsMTUgKzgxMCwyMyBAQAogCQkvKiBpZiB0aGlzIGlzIGEgdHggb25seSB2ZWN0b3IgaGFsdmUgdGhlIGludGVycnVwdCByYXRlICovCiAJCWlmIChxX3ZlY3Rvci0+dHhyX2NvdW50ICYmICFxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJcV92ZWN0b3ItPmVpdHIgPSAoYWRhcHRlci0+ZWl0cl9wYXJhbSA+PiAxKTsKLQkJZWxzZQorCQllbHNlIGlmIChxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJLyogcnggb25seSAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwogCisJCS8qCisJCSAqIHNpbmNlIHRoaXMgaXMgaW5pdGlhbCBzZXQgdXAgZG9uJ3QgbmVlZCB0byBjYWxsCisJCSAqIGl4Z2JlX3dyaXRlX2VpdHIgaGVscGVyCisJCSAqLwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwKIAkJICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOwogCX0KIAotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfT1RIRVJfQ0FVU0VTX0lOREVYLCB2X2lkeCk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAtMSwgSVhHQkVfSVZBUl9PVEhFUl9DQVVTRVNfSU5ERVgsCisJCSAgICAgICAgICAgICAgIHZfaWR4KTsKKwllbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgLTEsIDEsIHZfaWR4KTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgMTk1MCk7CiAKIAkvKiBzZXQgdXAgdG8gYXV0b2NsZWFyIHRpbWVyLCBhbmQgdGhlIHZlY3RvcnMgKi8KQEAgLTgzNSwxMCArOTAyLDM1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBpeGdiZV93cml0ZV9laXRyIC0gd3JpdGUgRUlUUiByZWdpc3RlciBpbiBoYXJkd2FyZSBzcGVjaWZpYyB3YXkKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0CisgKiBAdl9pZHg6IHZlY3RvciBpbmRleCBpbnRvIHFfdmVjdG9yIGFycmF5CisgKiBAaXRyX3JlZzogbmV3IHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gKnJlZ2lzdGVyKiBmb3JtYXQsIG5vdCBpbnRzL3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1hZGUgdG8gYmUgY2FsbGVkIGJ5IGV0aHRvb2wgYW5kIGJ5IHRoZSBkcml2ZXIKKyAqIHdoZW4gaXQgbmVlZHMgdG8gdXBkYXRlIEVJVFIgcmVnaXN0ZXJzIGF0IHJ1bnRpbWUuICBIYXJkd2FyZQorICogc3BlY2lmaWMgcXVpcmtzL2RpZmZlcmVuY2VzIGFyZSB0YWtlbiBjYXJlIG9mIGhlcmUuCisgKi8KK3ZvaWQgaXhnYmVfd3JpdGVfZWl0cihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LCB1MzIgaXRyX3JlZykKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KKwkJaXRyX3JlZyB8PSAoaXRyX3JlZyA8PCAxNik7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKgorCQkgKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW4KKwkJICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0CisJCSAqLworCQlpdHJfcmVnIHw9IElYR0JFX0VJVFJfQ05UX1dESVM7CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcpOworfQorCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyX21zaXgoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIG5ld19pdHI7CiAJdTggY3VycmVudF9pdHIsIHJldF9pdHI7CiAJaW50IGksIHJfaWR4LCB2X2lkeCA9ICgodm9pZCAqKXFfdmVjdG9yIC0gKHZvaWQgKikoYWRhcHRlci0+cV92ZWN0b3IpKSAvCkBAIC04OTMsMTQgKzk4NSwxMyBAQAogCiAJaWYgKG5ld19pdHIgIT0gcV92ZWN0b3ItPmVpdHIpIHsKIAkJdTMyIGl0cl9yZWc7CisKKwkJLyogc2F2ZSB0aGUgYWxnb3JpdGhtIHZhbHVlIGhlcmUsIG5vdCB0aGUgc21vb3RoZWQgb25lICovCisJCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKIAkJLyogZG8gYW4gZXhwb25lbnRpYWwgc21vb3RoaW5nICovCiAJCW5ld19pdHIgPSAoKHFfdmVjdG9yLT5laXRyICogOTApLzEwMCkgKyAoKG5ld19pdHIgKiAxMCkvMTAwKTsKLQkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQlpdHJfcmVnID0gRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKG5ld19pdHIpOwotCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KLQkJRFBSSU5USyhUWF9FUlIsIERFQlVHLCAid3JpdGluZyBlaXRyKCVkKTogJTA4WFxuIiwgdl9pZHgsCi0JCSAgICAgICAgaXRyX3JlZyk7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgaXRyX3JlZyk7CiAJfQogCiAJcmV0dXJuOwpAQCAtOTE4LDYgKzEwMDksMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGl4Z2JlX2NoZWNrX3NmcF9ldmVudChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVpY3IpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMSkgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMSk7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJfSBlbHNlIGlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMikgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMik7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCX0gZWxzZSB7CisJCS8qIEludGVycnVwdCBpc24ndCBmb3IgdXMuLi4gKi8KKwkJcmV0dXJuOworCX0KK30KKwogc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfbHNjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC05MzYsMTMgKzEwNDUsMjUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKKwl1MzIgZWljcjsKKworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgU2lsaWNvbiBlcnJhdGEuICBVc2UgY2xlYXItYnktd3JpdGUgaW5zdGVhZAorCSAqIG9mIGNsZWFyLWJ5LXJlYWQuICBSZWFkaW5nIHdpdGggRUlDUyB3aWxsIHJldHVybiB0aGUKKwkgKiBpbnRlcnJ1cHQgY2F1c2VzIHdpdGhvdXQgY2xlYXJpbmcsIHdoaWNoIGxhdGVyIGJlIGRvbmUKKwkgKiB3aXRoIHRoZSB3cml0ZSB0byBFSUNSLgorCSAqLworCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUlDUyk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBlaWNyKTsKIAogCWlmIChlaWNyICYgSVhHQkVfRUlDUl9MU0MpCiAJCWl4Z2JlX2NoZWNrX2xzYyhhZGFwdGVyKTsKIAotCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTVMsIElYR0JFX0VJTVNfT1RIRVIpOwogCkBAIC0xMDQ3LDcgKzExNjgsNyBAQAogCS8qIElmIGFsbCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHJfbXNpeChxX3ZlY3Rvcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgcnhfcmluZy0+dl9pZHgpOwpAQCAtMTA5Niw3ICsxMjE3LDcgQEAKIAkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7Ci0JCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpCisJCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDEpCiAJCQlpeGdiZV9zZXRfaXRyX21zaXgocV92ZWN0b3IpOwogCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIGVuYWJsZV9tYXNrKTsKQEAgLTEyNjYsNyArMTM4Nyw2IEBACiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdHIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3I7CiAJdTggY3VycmVudF9pdHI7CiAJdTMyIG5ld19pdHIgPSBxX3ZlY3Rvci0+ZWl0cjsKQEAgLTEzMDEsMzUgKzE0MjEsMTkgQEAKIAogCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CiAJCXUzMiBpdHJfcmVnOworCisJCS8qIHNhdmUgdGhlIGFsZ29yaXRobSB2YWx1ZSBoZXJlLCBub3QgdGhlIHNtb290aGVkIG9uZSAqLworCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCS8qIGRvIGFuIGV4cG9uZW50aWFsIHNtb290aGluZyAqLwogCQluZXdfaXRyID0gKChxX3ZlY3Rvci0+ZWl0ciAqIDkwKS8xMDApICsgKChuZXdfaXRyICogMTApLzEwMCk7Ci0JCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKIAkJaXRyX3JlZyA9IEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhuZXdfaXRyKTsKLQkJLyogbXVzdCB3cml0ZSBoaWdoIGFuZCBsb3cgMTYgYml0cyB0byByZXNldCBjb3VudGVyICovCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUigwKSwgaXRyX3JlZyB8IChpdHJfcmVnKTw8MTYpOworCQlpeGdiZV93cml0ZV9laXRyKGFkYXB0ZXIsIDAsIGl0cl9yZWcpOwogCX0KIAogCXJldHVybjsKIH0KIAogLyoqCi0gKiBpeGdiZV9pcnFfZGlzYWJsZSAtIE1hc2sgb2ZmIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHRoZSBOSUMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoqLwotc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2lycV9kaXNhYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQotewotCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIH4wKTsKLQlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQotCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOwotCX0gZWxzZSB7Ci0JCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOwotCX0KLX0KLQotLyoqCiAgKiBpeGdiZV9pcnFfZW5hYmxlIC0gRW5hYmxlIGRlZmF1bHQgaW50ZXJydXB0IGdlbmVyYXRpb24gc2V0dGluZ3MKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwpAQCAtMTMzOSw3ICsxNDQzLDIxIEBACiAJbWFzayA9IElYR0JFX0VJTVNfRU5BQkxFX01BU0s7CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFKQogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19FQ0M7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMTsKKwkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAyOworCX0KKwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKiBlbmFibGUgdGhlIHJlc3Qgb2YgdGhlIHF1ZXVlIHZlY3RvcnMgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgxKSwKKwkJICAgICAgICAgICAgICAgIChJWEdCRV9FSU1TX1JUWF9RVUVVRSA8PCAxNikpOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDIpLAorCQkgICAgICAgICAgICAgICAgKChJWEdCRV9FSU1TX1JUWF9RVUVVRSA8PCAxNikgfAorCQkgICAgICAgICAgICAgICAgICBJWEdCRV9FSU1TX1JUWF9RVUVVRSkpOworCX0KIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogfQogCkBAIC0xMzU1LDYgKzE0NzMsMTIgQEAKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBlaWNyOwogCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBzaWxpY29uIGVycmF0YS4gIE1hc2sgdGhlIGludGVycnVwdHMKKwkgKiBiZWZvcmUgdGhlIHJlYWQgb2YgRUlDUi4KKwkgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTUMsIElYR0JFX0lSUV9DTEVBUl9NQVNLKTsKKwogCS8qIGZvciBOQVBJLCB1c2luZyBFSUFNIHRvIGF1dG8tbWFzayB0eC9yeCBpbnRlcnJ1cHQgYml0cyBvbiByZWFkCiAJICogdGhlcmVmb3JlIG5vIGV4cGxpY3QgaW50ZXJydXB0IGRpc2FibGUgaXMgbmVjZXNzYXJ5ICovCiAJZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKQEAgLTEzNjksNiArMTQ5Myw5IEBACiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykKIAkJaXhnYmVfY2hlY2tfbHNjKGFkYXB0ZXIpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOworCiAJaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CiAKIAlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5xX3ZlY3RvclswXS5uYXBpKSkgewpAQCAtMTQ0OSw2ICsxNTc2LDM5IEBACiB9CiAKIC8qKgorICogaXhnYmVfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCB+MCk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMSksIH4wKTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQ19FWCgyKSwgfjApOworCX0KKwlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworCX0gZWxzZSB7CisJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2lycV9lbmFibGVfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBtYXNrID0gSVhHQkVfRUlNU19SVFhfUVVFVUU7CisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgbWFzayk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVNfRVgoMSksIG1hc2sgPDwgMTYpOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDIpLAorCQkgICAgICAgICAgICAgICAgKG1hc2sgPDwgMTYgfCBtYXNrKSk7CisJfQorCS8qIHNraXAgdGhlIGZsdXNoICovCit9CisKKy8qKgogICogaXhnYmVfY29uZmlndXJlX21zaV9hbmRfbGVnYWN5IC0gSW5pdGlhbGl6ZSBQSU4gKElOVEEuLi4pIGFuZCBNU0kgaW50ZXJydXB0cwogICoKICAqKi8KQEAgLTE0NTksOCArMTYxOSw4IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKDApLAogCSAgICAgICAgICAgICAgICBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoYWRhcHRlci0+ZWl0cl9wYXJhbSkpOwogCi0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9SWF9RVUVVRSgwKSwgMCk7Ci0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9UWF9RVUVVRSgwKSwgMCk7CisJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMCwgMCwgMCk7CisJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMSwgMCwgMCk7CiAKIAltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCAwLCAwKTsKIAltYXBfdmVjdG9yX3RvX3R4cShhZGFwdGVyLCAwLCAwKTsKQEAgLTE1MDEsMjYgKzE2NjEsMjUgQEAKIAkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX1RYX1dCX1JPX0VOOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RDQV9UWENUUkwoaiksIHR4Y3RybCk7CiAJfQorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJLyogV2UgZW5hYmxlIDggdHJhZmZpYyBjbGFzc2VzLCBEQ0Igb25seSAqLworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCAoSVhHQkVfTVRRQ19SVF9FTkEgfAorCQkJICAgICAgICAgICAgICAgIElYR0JFX01UUUNfOFRDXzhUUSkpOworCX0KIH0KIAotI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUCTIKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVCAyCiAKIHN0YXRpYyB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9zcnJjdGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZzsKIAl1MzIgc3JyY3RsOwotCWludCBxdWV1ZTA7CisJaW50IHF1ZXVlMCA9IDA7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCi0JLyogcHJvZ3JhbSBvbmUgc3JyY3RsIHJlZ2lzdGVyIHBlciBWTURxIGluZGV4ICovCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpIHsKLQkJbG9uZyBzaGlmdCwgbGVuOwotCQltYXNrID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5tYXNrOwotCQlsZW4gPSBzaXplb2YoYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXS5tYXNrKSAqIDg7Ci0JCXNoaWZ0ID0gZmluZF9maXJzdF9iaXQoJm1hc2ssIGxlbik7Ci0JCXF1ZXVlMCA9IGluZGV4ICYgbWFzazsKLQkJaW5kZXggPSAoaW5kZXggJiBtYXNrKSA+PiBzaGlmdDsKLQkvKiBwcm9ncmFtIG9uZSBzcnJjdGwgcGVyIFJTUyBxdWV1ZSBzaW5jZSBSRFJYQ1RMLk1WTUVOIGlzIGVuYWJsZWQgKi8KKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJcXVldWUwID0gaW5kZXg7CiAJfSBlbHNlIHsKIAkJbWFzayA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzazsKIAkJcXVldWUwID0gaW5kZXggJiBtYXNrOwpAQCAtMTUzNSw3ICsxNjk0LDE0IEBACiAJc3JyY3RsICY9IH5JWEdCRV9TUlJDVExfQlNJWkVQS1RfTUFTSzsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgewotCQlzcnJjdGwgfD0gSVhHQkVfUlhCVUZGRVJfMjA0OCA+PiBJWEdCRV9TUlJDVExfQlNJWkVQS1RfU0hJRlQ7CisJCXUxNiBidWZzeiA9IElYR0JFX1JYQlVGRkVSXzIwNDg7CisJCS8qIGdyb3cgdGhlIGFtb3VudCB3ZSBjYW4gcmVjZWl2ZSBvbiBsYXJnZSBwYWdlIG1hY2hpbmVzICovCisJCWlmIChidWZzeiA8IChQQUdFX1NJWkUgLyAyKSkKKwkJCWJ1ZnN6ID0gKFBBR0VfU0laRSAvIDIpOworCQkvKiBjYXAgdGhlIGJ1ZnN6IGF0IG91ciBsYXJnZXN0IGRlc2NyaXB0b3Igc2l6ZSAqLworCQlidWZzeiA9IG1pbigodTE2KUlYR0JFX01BWF9SWEJVRkZFUiwgYnVmc3opOworCisJCXNycmN0bCB8PSBidWZzeiA+PiBJWEdCRV9TUlJDVExfQlNJWkVQS1RfU0hJRlQ7CiAJCXNycmN0bCB8PSBJWEdCRV9TUlJDVExfREVTQ1RZUEVfSERSX1NQTElUX0FMV0FZUzsKIAkJc3JyY3RsIHw9ICgoSVhHQkVfUlhfSERSX1NJWkUgPDwKIAkJICAgICAgICAgICAgSVhHQkVfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVCkgJgpAQCAtMTU1MCw2ICsxNzE2LDcgQEAKIAkJCXNycmN0bCB8PSByeF9yaW5nLT5yeF9idWZfbGVuID4+CiAJCQkgICAgICAgICAgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOwogCX0KKwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1NSUkNUTChpbmRleCksIHNycmN0bCk7CiB9CiAKQEAgLTE1NzEsNyArMTczOCw3IEBACiAJICAgICAgICAgICAgICAgICAgMHhBNTRGMkJFQywgMHhFQTQ5QUY3QywgMHhFMjE0QUQzRCwgMHhCODU1QUFCRSwKIAkgICAgICAgICAgICAgICAgICAweDZBM0U2N0VBLCAweDE0MzY0RDE3LCAweDNCRUQyMDBEfTsKIAl1MzIgZmN0cmwsIGhscmVnMDsKLQl1MzIgcmV0YSA9IDAsIG1ycWM7CisJdTMyIHJldGEgPSAwLCBtcnFjID0gMDsKIAl1MzIgcmRyeGN0bDsKIAlpbnQgcnhfYnVmX2xlbjsKIApAQCAtMTU4MSw2ICsxNzQ4LDE0IEBACiAJLyogU2V0IHRoZSBSWCBidWZmZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgbW9kZSAqLwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgewogCQlyeF9idWZfbGVuID0gSVhHQkVfUlhfSERSX1NJWkU7CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCS8qIFBTUlRZUEUgbXVzdCBiZSBpbml0aWFsaXplZCBpbiA4MjU5OSAqLworCQkJdTMyIHBzcnR5cGUgPSBJWEdCRV9QU1JUWVBFX1RDUEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfVURQSERSIHwKKwkJCSAgICAgICAgICAgICAgSVhHQkVfUFNSVFlQRV9JUFY0SERSIHwKKwkJCSAgICAgICAgICAgICAgSVhHQkVfUFNSVFlQRV9JUFY2SERSOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QU1JUWVBFKDApLCBwc3J0eXBlKTsKKwkJfQogCX0gZWxzZSB7CiAJCWlmIChuZXRkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCiAJCQlyeF9idWZfbGVuID0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkU7CkBAIC0xNTkxLDYgKzE3NjYsNyBAQAogCWZjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ1RSTCk7CiAJZmN0cmwgfD0gSVhHQkVfRkNUUkxfQkFNOwogCWZjdHJsIHw9IElYR0JFX0ZDVFJMX0RQRjsgLyogZGlzY2FyZCBwYXVzZSBmcmFtZXMgd2hlbiBGQyBlbmFibGVkICovCisJZmN0cmwgfD0gSVhHQkVfRkNUUkxfUE1DRjsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOwogCiAJaGxyZWcwID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0hMUkVHMCk7CkBAIC0xNjIyLDIzICsxNzk4LDQwIEBACiAJCWl4Z2JlX2NvbmZpZ3VyZV9zcnJjdGwoYWRhcHRlciwgaik7CiAJfQogCi0JLyoKLQkgKiBGb3IgVk1EcSBzdXBwb3J0IG9mIGRpZmZlcmVudCBkZXNjcmlwdG9yIHR5cGVzIG9yCi0JICogYnVmZmVyIHNpemVzIHRocm91Z2ggdGhlIHVzZSBvZiBtdWx0aXBsZSBTUlJDVEwKLQkgKiByZWdpc3RlcnMsIFJEUlhDVEwuTVZNRU4gbXVzdCBiZSBzZXQgdG8gMQotCSAqCi0JICogYWxzbywgdGhlIG1hbnVhbCBkb2Vzbid0IG1lbnRpb24gaXQgY2xlYXJseSBidXQgRENBIGhpbnRzCi0JICogd2lsbCBvbmx5IHVzZSBxdWV1ZSAwJ3MgdGFncyB1bmxlc3MgdGhpcyBiaXQgaXMgc2V0LiAgU2lkZQotCSAqIGVmZmVjdHMgb2Ygc2V0dGluZyB0aGlzIGJpdCBhcmUgb25seSB0aGF0IFNSUkNUTCBtdXN0IGJlCi0JICogZnVsbHkgcHJvZ3JhbW1lZCBbMC4uMTVdCi0JICovCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYKLQkgICAgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgfCBJWEdCRV9GTEFHX1ZNRFFfRU5BQkxFRCkpIHsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCS8qCisJCSAqIEZvciBWTURxIHN1cHBvcnQgb2YgZGlmZmVyZW50IGRlc2NyaXB0b3IgdHlwZXMgb3IKKwkJICogYnVmZmVyIHNpemVzIHRocm91Z2ggdGhlIHVzZSBvZiBtdWx0aXBsZSBTUlJDVEwKKwkJICogcmVnaXN0ZXJzLCBSRFJYQ1RMLk1WTUVOIG11c3QgYmUgc2V0IHRvIDEKKwkJICoKKwkJICogYWxzbywgdGhlIG1hbnVhbCBkb2Vzbid0IG1lbnRpb24gaXQgY2xlYXJseSBidXQgRENBIGhpbnRzCisJCSAqIHdpbGwgb25seSB1c2UgcXVldWUgMCdzIHRhZ3MgdW5sZXNzIHRoaXMgYml0IGlzIHNldC4gIFNpZGUKKwkJICogZWZmZWN0cyBvZiBzZXR0aW5nIHRoaXMgYml0IGFyZSBvbmx5IHRoYXQgU1JSQ1RMIG11c3QgYmUKKwkJICogZnVsbHkgcHJvZ3JhbW1lZCBbMC4uMTVdCisJCSAqLwogCQlyZHJ4Y3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JEUlhDVEwpOwogCQlyZHJ4Y3RsIHw9IElYR0JFX1JEUlhDVExfTVZNRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRSWENUTCwgcmRyeGN0bCk7CiAJfQogCisJLyogUHJvZ3JhbSBNUlFDIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHF1ZXVlcyAqLworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJaW50IG1hc2sgPSBhZGFwdGVyLT5mbGFncyAmICgKKwkJCQlJWEdCRV9GTEFHX1JTU19FTkFCTEVECisJCQkJfCBJWEdCRV9GTEFHX0RDQl9FTkFCTEVECisJCQkJKTsKKworCQlzd2l0Y2ggKG1hc2spIHsKKwkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCk6CisJCQltcnFjID0gSVhHQkVfTVJRQ19SU1NFTjsKKwkJCWJyZWFrOworCQljYXNlIChJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKToKKwkJCW1ycWMgPSBJWEdCRV9NUlFDX1JUOFRDRU47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpIHsKIAkJLyogRmlsbCBvdXQgcmVkaXJlY3Rpb24gdGFibGUgKi8KIAkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCAxMjg7IGkrKywgaisrKSB7CkBAIC0xNjU1LDE5ICsxODQ4LDE3IEBACiAJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQogCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SU1NSSyhpKSwgc2VlZFtpXSk7CiAKLQkJbXJxYyA9IElYR0JFX01SUUNfUlNTRU4KKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJCW1ycWMgfD0gSVhHQkVfTVJRQ19SU1NFTjsKIAkJICAgIC8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi8KLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X0VYX1RDUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X0VYCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjYKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9UQ1AKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9VRFAKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9FWF9VRFA7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVJRQywgbXJxYyk7CisJCW1ycWMgfD0gSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQCisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2CisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9UQ1AKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUDsKIAl9CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCBtcnFjKTsKIAogCXJ4Y3N1bSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENTVU0pOwogCkBAIC0xNjg0LDYgKzE4NzUsMTIgQEAKIAl9CiAKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1NVTSwgcnhjc3VtKTsKKworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJcmRyeGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMKTsKKwkJcmRyeGN0bCB8PSBJWEdCRV9SRFJYQ1RMX0NSQ1NUUklQOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEUlhDVEwsIHJkcnhjdGwpOworCX0KIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCkBAIC0xNzE3LDYgKzE5MTQsNyBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MzIgY3RybDsKKwlpbnQgaSwgajsKIAogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlpeGdiZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKQEAgLTE3MjgsMTggKzE5MjYsMjQgQEAKIAkgKiBub3QgaW4gRENCIG1vZGUuCiAJICovCiAJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCk7Ci0JY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRTsKLQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOwotCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwsIGN0cmwpOwotCWl4Z2JlX3ZsYW5fcnhfYWRkX3ZpZChuZXRkZXYsIDApOwotCi0JaWYgKGdycCkgewotCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCi0JCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOwotCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FIHwgSVhHQkVfVkxOQ1RSTF9WRkU7CiAJCWN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwsIGN0cmwpOworCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZGRTsKKwkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMKTsKKwkJY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SWERDVEwoaikpOworCQkJY3RybCB8PSBJWEdCRV9SWERDVExfVk1FOworCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfUlhEQ1RMKGopLCBjdHJsKTsKKwkJfQogCX0KKwlpeGdiZV92bGFuX3J4X2FkZF92aWQobmV0ZGV2LCAwKTsKIAogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlpeGdiZV9pcnFfZW5hYmxlKGFkYXB0ZXIpOwpAQCAtMTkwMiw5ICsyMTA2LDIxIEBACiAJfQogCS8qIEVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KIAl2bG5jdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZMTkNUUkwpOwotCXZsbmN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKLQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxOQ1RSTCwgdmxuY3RybCk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQl2bG5jdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FIHwgSVhHQkVfVkxOQ1RSTF9WRkU7CisJCXZsbmN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxOQ1RSTCwgdmxuY3RybCk7CisJfSBlbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJdmxuY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZGRTsKKwkJdmxuY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJCXZsbmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopKTsKKwkJCXZsbmN0cmwgfD0gSVhHQkVfUlhEQ1RMX1ZNRTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopLCB2bG5jdHJsKTsKKwkJfQorCX0KIAlody0+bWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIDAsIDAsIHRydWUpOwogfQogCkBAIC0xOTM1LDEzICsyMTUxLDYwIEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgLSAxKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9pc19zZnAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzd2l0Y2ggKGh3LT5waHkudHlwZSkgeworCWNhc2UgaXhnYmVfcGh5X3NmcF9hdmFnbzoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfZnRsOgorCWNhc2UgaXhnYmVfcGh5X3NmcF9pbnRlbDoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfdW5rbm93bjoKKwljYXNlIGl4Z2JlX3BoeV90d190eWNvOgorCWNhc2UgaXhnYmVfcGh5X3R3X3Vua25vd246CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKIC8qKgotICogaXhnYmVfbGlua19jb25maWcgLSBzZXQgdXAgaW5pdGlhbCBsaW5rIHdpdGggZGVmYXVsdCBzcGVlZCBhbmQgZHVwbGV4CisgKiBpeGdiZV9zZnBfbGlua19jb25maWcgLSBzZXQgdXAgU0ZQKyBsaW5rCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBwcml2YXRlIGFkYXB0ZXIgc3RydWN0CisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCQlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCQkvKgorCQkJICogSW4gbXVsdGlzcGVlZCBmaWJlciBzZXR1cHMsIHRoZSBkZXZpY2UgbWF5IG5vdCBoYXZlCisJCQkgKiBoYWQgYSBwaHlzaWNhbCBjb25uZWN0aW9uIHdoZW4gdGhlIGRyaXZlciBsb2FkZWQuCisJCQkgKiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSBpbml0aWFsIGxpbmsgY29uZmlndXJhdGlvbgorCQkJICogY291bGRuJ3QgZ2V0IHRoZSBNQUMgaW50byAxMEcgb3IgMUcgbW9kZSwgc28gd2UnbGwKKwkJCSAqIG5ldmVyIGhhdmUgYSBsaW5rIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IGZpcmUuCisJCQkgKiBXZSBuZWVkIHRvIHRyeSBhbmQgZm9yY2UgYW4gYXV0b25lZ290aWF0aW9uCisJCQkgKiBzZXNzaW9uLCB0aGVuIGJyaW5nIHVwIGxpbmsuCisJCQkgKi8KKwkJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7CisJCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCisJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEaXJlY3QgQXR0YWNoIEN1IGFuZCBub24tbXVsdGlzcGVlZCBmaWJlciBtb2R1bGVzCisJCQkgKiBzdGlsbCBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgcHJpb3IgdG8KKwkJCSAqIGF0dGVtcHRpbmcgbGluay4KKwkJCSAqLworCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSykpCisJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJCX0KK30KKworLyoqCisgKiBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnIC0gc2V0IHVwIG5vbi1TRlArIGxpbmsKICAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCiAgKiovCi1zdGF0aWMgaW50IGl4Z2JlX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgaW50IGl4Z2JlX25vbl9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAl1MzIgYXV0b25lZzsKIAlib29sIGxpbmtfdXAgPSBmYWxzZTsKQEAgLTE5NjEsMTkgKzIyMjQsNDIgQEAKIAogCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKQogCQlyZXQgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCBsaW5rX3VwKTsKLQogbGlua19jZmdfb3V0OgogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTCAxMAorc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX3J4X2Rlc2NfcXVldWVfZW5hYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJ4cikKK3sKKwlpbnQgaiA9IGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS5yZWdfaWR4OworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IElYR0JFX01BWF9SWF9ERVNDX1BPTEw7IGsrKykgeworCQlpZiAoSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgICAgICAgICAgICAgSVhHQkVfUlhEQ1RMKGopKSAmIElYR0JFX1JYRENUTF9FTkFCTEUpCisJCQlicmVhazsKKwkJZWxzZQorCQkJbXNsZWVwKDEpOworCX0KKwlpZiAoayA+PSBJWEdCRV9NQVhfUlhfREVTQ19QT0xMKSB7CisJCURQUklOVEsoRFJWLCBFUlIsICJSWERDVEwuRU5BQkxFIG9uIFJ4IHF1ZXVlICVkICIKKwkJICAgICAgICAibm90IHNldCB3aXRoaW4gdGhlIHBvbGxpbmcgcGVyaW9kXG4iLCByeHIpOworCX0KKwlpeGdiZV9yZWxlYXNlX3J4X2Rlc2MoJmFkYXB0ZXItPmh3LCAmYWRhcHRlci0+cnhfcmluZ1tyeHJdLAorCSAgICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+cnhfcmluZ1tyeHJdLmNvdW50IC0gMSkpOworfQorCiBzdGF0aWMgaW50IGl4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgaSwgaiA9IDA7CisJaW50IG51bV9yeF9yaW5ncyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CiAJaW50IGVycjsKIAlpbnQgbWF4X2ZyYW1lID0gbmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOOwogCXUzMiB0eGRjdGwsIHJ4ZGN0bCwgbWhhZGQ7CisJdTMyIGRtYXR4Y3RsOwogCXUzMiBncGllOwogCiAJaXhnYmVfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CkBAIC0yMDA1LDYgKzIyOTEsMTMgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HUElFLCBncGllKTsKIAl9CiAKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWdwaWUgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR1BJRSk7CisJCWdwaWUgfD0gSVhHQkVfU0RQMV9HUElFTjsKKwkJZ3BpZSB8PSBJWEdCRV9TRFAyX0dQSUVOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dQSUUsIGdwaWUpOworCX0KKwogCW1oYWRkID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01IQUREKTsKIAlpZiAobWF4X2ZyYW1lICE9IChtaGFkZCA+PiBJWEdCRV9NSEFERF9NRlNfU0hJRlQpKSB7CiAJCW1oYWRkICY9IH5JWEdCRV9NSEFERF9NRlNfTUFTSzsKQEAgLTIwMTgsMTEgKzIzMTEsMjMgQEAKIAkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCS8qIGVuYWJsZSBXVEhSRVNIPTggZGVzY3JpcHRvcnMsIHRvIGVuY291cmFnZSBidXJzdCB3cml0ZWJhY2sgKi8KIAkJdHhkY3RsIHw9ICg4IDw8IDE2KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwoaiksIHR4ZGN0bCk7CisJfQorCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKiBETUFUWENUTC5FTiBtdXN0IGJlIHNldCBhZnRlciBhbGwgVHggcXVldWUgY29uZmlnIGlzIGRvbmUgKi8KKwkJZG1hdHhjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRE1BVFhDVEwpOworCQlkbWF0eGN0bCB8PSBJWEdCRV9ETUFUWENUTF9URTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCwgZG1hdHhjdGwpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHg7CisJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwoaikpOwogCQl0eGRjdGwgfD0gSVhHQkVfVFhEQ1RMX0VOQUJMRTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwoaiksIHR4ZGN0bCk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1fcnhfcmluZ3M7IGkrKykgewogCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OwogCQlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopKTsKIAkJLyogZW5hYmxlIFBUSFJFU0g9MzIgZGVzY3JpcHRvcnMgKGhhbGYgdGhlIGludGVybmFsIGNhY2hlKQpAQCAtMjAzMSwxOSArMjMzNiwyMiBAQAogCQlyeGRjdGwgfD0gMHgwMDIwOwogCQlyeGRjdGwgfD0gSVhHQkVfUlhEQ1RMX0VOQUJMRTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwoaiksIHJ4ZGN0bCk7CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCQlpeGdiZV9yeF9kZXNjX3F1ZXVlX2VuYWJsZShhZGFwdGVyLCBpKTsKIAl9CiAJLyogZW5hYmxlIGFsbCByZWNlaXZlcyAqLwogCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwotCXJ4ZGN0bCB8PSAoSVhHQkVfUlhDVFJMX0RNQllQUyB8IElYR0JFX1JYQ1RSTF9SWEVOKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1RSTCwgcnhkY3RsKTsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlyeGRjdGwgfD0gKElYR0JFX1JYQ1RSTF9ETUJZUFMgfCBJWEdCRV9SWENUUkxfUlhFTik7CisJZWxzZQorCQlyeGRjdGwgfD0gSVhHQkVfUlhDVFJMX1JYRU47CisJaHctPm1hYy5vcHMuZW5hYmxlX3J4X2RtYShodywgcnhkY3RsKTsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKQogCQlpeGdiZV9jb25maWd1cmVfbXNpeChhZGFwdGVyKTsKIAllbHNlCiAJCWl4Z2JlX2NvbmZpZ3VyZV9tc2lfYW5kX2xlZ2FjeShhZGFwdGVyKTsKIAotCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKLQogCWNsZWFyX2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAJaXhnYmVfbmFwaV9lbmFibGVfYWxsKGFkYXB0ZXIpOwogCkBAIC0yMDUyLDkgKzIzNjAsMjcgQEAKIAogCWl4Z2JlX2lycV9lbmFibGUoYWRhcHRlcik7CiAKLQllcnIgPSBpeGdiZV9saW5rX2NvbmZpZyhodyk7Ci0JaWYgKGVycikKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAibGlua19jb25maWcgRkFJTEVEICVkXG4iLCBlcnIpOworCS8qCisJICogRm9yIGhvdC1wbHVnZ2FibGUgU0ZQKyBkZXZpY2VzLCBhIG5ldyBTRlArIG1vZHVsZSBtYXkgaGF2ZQorCSAqIGFycml2ZWQgYmVmb3JlIGludGVycnVwdHMgd2VyZSBlbmFibGVkLiAgV2UgbmVlZCB0byBraWNrIG9mZgorCSAqIHRoZSBTRlArIG1vZHVsZSBzZXR1cCBmaXJzdCwgdGhlbiB0cnkgdG8gYnJpbmcgdXAgbGluay4KKwkgKiBJZiB3ZSdyZSBub3QgaG90LXBsdWdnYWJsZSBTRlArLCB3ZSBqdXN0IG5lZWQgdG8gY29uZmlndXJlIGxpbmsKKwkgKiBhbmQgYnJpbmcgaXQgdXAuCisJICovCisJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnkoaHcpOworCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIlBIWSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgTklDICVkXG4iLCBlcnIpOworCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChpeGdiZV9pc19zZnAoaHcpKSB7CisJCWl4Z2JlX3NmcF9saW5rX2NvbmZpZyhhZGFwdGVyKTsKKwl9IGVsc2UgeworCQllcnIgPSBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKGh3KTsKKwkJaWYgKGVycikKKwkJCURQUklOVEsoUFJPQkUsIEVSUiwgImxpbmtfY29uZmlnIEZBSUxFRCAlZFxuIiwgZXJyKTsKKwl9CiAKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwpAQCAtMjA4Miw2ICsyNDA4LDggQEAKIAkvKiBoYXJkd2FyZSBoYXMgYmVlbiByZXNldCwgd2UgbmVlZCB0byByZWxvYWQgc29tZSB0aGluZ3MgKi8KIAlpeGdiZV9jb25maWd1cmUoYWRhcHRlcik7CiAKKwlpeGdiZV9uYXBpX2FkZF9hbGwoYWRhcHRlcik7CisKIAlyZXR1cm4gaXhnYmVfdXBfY29tcGxldGUoYWRhcHRlcik7CiB9CiAKQEAgLTIxNDMsOCArMjQ3MSwxMCBAQAogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOwogCXJ4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKIAotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+aGVhZCk7Ci0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT50YWlsKTsKKwlpZiAocnhfcmluZy0+aGVhZCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5oZWFkKTsKKwlpZiAocnhfcmluZy0+dGFpbCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT50YWlsKTsKIH0KIAogLyoqCkBAIC0yMTc1LDggKzI1MDUsMTAgQEAKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPmhlYWQpOwotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGFpbCk7CisJaWYgKHR4X3JpbmctPmhlYWQpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7CisJaWYgKHR4X3JpbmctPnRhaWwpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGFpbCk7CiB9CiAKIC8qKgpAQCAtMjIzOSw2ICsyNTcxLDExIEBACiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLAogCQkgICAgICAgICAgICAgICAgKHR4ZGN0bCAmIH5JWEdCRV9UWERDVExfRU5BQkxFKSk7CiAJfQorCS8qIERpc2FibGUgdGhlIFR4IERNQSBlbmdpbmUgb24gODI1OTkgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMLAorCQkgICAgICAgICAgICAgICAgKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCkgJgorCQkgICAgICAgICAgICAgICAgIH5JWEdCRV9ETUFUWENUTF9URSkpOwogCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIApAQCAtMjI3NSwxMCArMjYxMiwxMCBAQAogICoqLwogc3RhdGljIGludCBpeGdiZV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gY29udGFpbmVyX29mKG5hcGksCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3FfdmVjdG9yLCBuYXBpKTsKKwlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0KKwkgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGl4Z2JlX3FfdmVjdG9yLCBuYXBpKTsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwotCWludCB0eF9jbGVhbmVkLCB3b3JrX2RvbmUgPSAwOworCWludCB0eF9jbGVhbl9jb21wbGV0ZSwgd29ya19kb25lID0gMDsKIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CkBAIC0yMjg3LDE5ICsyNjI0LDE5IEBACiAJfQogI2VuZGlmCiAKLQl0eF9jbGVhbmVkID0gaXhnYmVfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmcpOworCXR4X2NsZWFuX2NvbXBsZXRlID0gaXhnYmVfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmcpOwogCWl4Z2JlX2NsZWFuX3J4X2lycShxX3ZlY3RvciwgYWRhcHRlci0+cnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAotCWlmICh0eF9jbGVhbmVkKQorCWlmICghdHhfY2xlYW5fY29tcGxldGUpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHIoYWRhcHRlcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJCWl4Z2JlX2lycV9lbmFibGVfcXVldWVzKGFkYXB0ZXIpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwogfQpAQCAtMjM1MSw2ICsyNjg4LDE0IEBACiB9CiAjZW5kaWYKIAorLyoqCisgKiBpeGdiZV9zZXRfcnNzX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBSU1MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogVGhpcyBpcyBvdXIgImJhc2UiIG11bHRpcXVldWUgbW9kZS4gIFJTUyAoUmVjZWl2ZSBTaWRlIFNjYWxpbmcpIHdpbGwgdHJ5CisgKiB0byBhbGxvY2F0ZSBvbmUgUnggcXVldWUgcGVyIENQVSwgYW5kIGlmIGF2YWlsYWJsZSwgb25lIFR4IHF1ZXVlIHBlciBDUFUuCisgKgorICoqLwogc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3NldF9yc3NfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWJvb2wgcmV0ID0gZmFsc2U7CkBAIC0yMzY5LDYgKzI3MTQsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogaXhnYmVfc2V0X251bV9xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgZGV2aWNlLCBmZWF0dXJlIGRlcGVuZGFudAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgcXVldWUgYWxsb2NhdGlvbiByb3V0aW5lLiAgVGhlIG9yZGVyIGhlcmUgaXMgdmVyeQorICogaW1wb3J0YW50LCBzdGFydGluZyB3aXRoIHRoZSAibW9zdCIgbnVtYmVyIG9mIGZlYXR1cmVzIHR1cm5lZCBvbiBhdCBvbmNlLAorICogYW5kIGVuZGluZyB3aXRoIHRoZSBzbWFsbGVzdCBzZXQgb2YgZmVhdHVyZXMuICBUaGlzIHdheSBsYXJnZSBjb21iaW5hdGlvbnMKKyAqIGNhbiBiZSBhbGxvY2F0ZWQgaWYgdGhleSdyZSB0dXJuZWQgb24sIGFuZCBzbWFsbGVyIGNvbWJpbmF0aW9ucyBhcmUgdGhlCisgKiBmYWxsdGhyb3VnaCBjb25kaXRpb25zLgorICoKKyAqKi8KIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCS8qIFN0YXJ0IHdpdGggYmFzZSBjYXNlICovCkBAIC0yNDg0LDYgKzI4NDAsMTIgQEAKIAkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDI7CiAJCQl9CiAJCQlyZXQgPSB0cnVlOworCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGNiX2k7IGkrKykgeworCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgNDsKKwkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDQ7CisJCQl9CisJCQlyZXQgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJcmV0ID0gZmFsc2U7CiAJCX0KQEAgLTI1MjYsNyArMjg4OCw4IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKICAqIFdlIGFsbG9jYXRlIG9uZSByaW5nIHBlciBxdWV1ZSBhdCBydW4tdGltZSBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZQotICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuCisgKiBudW1iZXIgb2YgcXVldWVzIGF0IGNvbXBpbGUtdGltZS4gIFRoZSBwb2xsaW5nX25ldGRldiBhcnJheSBpcworICogaW50ZW5kZWQgZm9yIE11bHRpcXVldWUsIGJ1dCBzaG91bGQgd29yayBmaW5lIHdpdGggYSBzaW5nbGUgcXVldWUuCiAgKiovCiBzdGF0aWMgaW50IGl4Z2JlX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTI3MDUsNyArMzA2OCw4IEBACiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKilkYXRhOwogCi0JLyogRG8gdGhlIHNmcF90aW1lciBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0IGR1ZSB0byB0aGUKKwkvKgorCSAqIERvIHRoZSBzZnBfdGltZXIgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlCiAJICogZGVsYXlzIHRoYXQgc2ZwKyBkZXRlY3Rpb24gcmVxdWlyZXMKIAkgKi8KIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfdGFzayk7CkBAIC0yNzc5LDcgKzMxNDMsMTAgQEAKIAlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlcyA9IHJzczsKIAlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOwogCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzID0gSVhHQkVfTUFYX0RDQl9JTkRJQ0VTOwotCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5ODsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTg7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJLyogQ29uZmlndXJlIERDQiB0cmFmZmljIGNsYXNzZXMgKi8KQEAgLTI4MDAsOSArMzE2Nyw2IEBACiAJICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzKTsKIAogI2VuZGlmCi0JaWYgKGh3LT5tYWMub3BzLmdldF9tZWRpYV90eXBlICYmCi0JICAgIChody0+bWFjLm9wcy5nZXRfbWVkaWFfdHlwZShodykgPT0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXIpKQotCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZBTl9GQUlMX0NBUEFCTEU7CiAKIAkvKiBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwogCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7CkBAIC0zMDA2LDcgKzMzNzAsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTMwNDIsNyArMzQwNyw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlmIChhZGFwdGVyLT5yeF9yaW5nW2ldLmRlc2MpCisJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMzEwNSw2ICszNDcxLDggQEAKIAogCWl4Z2JlX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKKwogCWVyciA9IGl4Z2JlX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlcV9pcnE7CkBAIC0zMTU5LDYgKzM1MjcsNyBAQAogLyoqCiAgKiBpeGdiZV9uYXBpX2FkZF9hbGwgLSBwcmVwIG5hcGkgc3RydWN0cyBmb3IgdXNlCiAgKiBAYWRhcHRlcjogcHJpdmF0ZSBzdHJ1Y3QKKyAqCiAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gbmFwaV9hZGQgZWFjaCBwb3NzaWJsZSBxX3ZlY3Rvci0+bmFwaQogICovCiB2b2lkIGl4Z2JlX25hcGlfYWRkX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTMyMzEsNyArMzYwMCw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOwogCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtMzI1MCw2ICszNjE4LDkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsLCBmY3RybDsKKwl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgcmV0dmFsID0gMDsKICNlbmRpZgpAQCAtMzI3MiwxMCArMzY0MywzNSBAQAogCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0jZW5kaWYKIAotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKyNlbmRpZgorCWlmICh3dWZjKSB7CisJCWl4Z2JlX3NldF9yeF9tb2RlKG5ldGRldik7CisKKwkJLyogdHVybiBvbiBhbGwtbXVsdGkgbW9kZSBpZiB3YWtlIG9uIG11bHRpY2FzdCBpcyBlbmFibGVkICovCisJCWlmICh3dWZjICYgSVhHQkVfV1VGQ19NQykgeworCQkJZmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJZmN0cmwgfD0gSVhHQkVfRkNUUkxfTVBFOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOworCQl9CisKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJY3RybCB8PSBJWEdCRV9DVFJMX0dJT19ESVM7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTCwgY3RybCk7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9XVUZDLCB3dWZjKTsKKwl9IGVsc2UgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1dVQywgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfV1VGQywgMCk7CisJfQorCisJaWYgKHd1ZmMgJiYgaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJfSBlbHNlIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKwl9CiAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAKQEAgLTMzMDEsNiArMzY5NywxMiBAQAogCXU2NCB0b3RhbF9tcGMgPSAwOwogCXUzMiBpLCBtaXNzZWRfcnggPSAwLCBtcGMsIGJwcmMsIGx4b24sIGx4b2ZmLCB4b25fb2ZmX3RvdDsKIAorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlhZGFwdGVyLT5od19yeF9ub19kbWFfcmVzb3VyY2VzICs9CisJCQkgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCX0KKwogCWFkYXB0ZXItPnN0YXRzLmNyY2VycnMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NSQ0VSUlMpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJLyogZm9yIHBhY2tldCBidWZmZXJzIG5vdCB1c2VkLCB0aGUgcmVnaXN0ZXIgc2hvdWxkIHJlYWQgMCAqLwpAQCAtMzMwOCwzMiArMzcxMCw1NSBAQAogCQltaXNzZWRfcnggKz0gbXBjOwogCQlhZGFwdGVyLT5zdGF0cy5tcGNbaV0gKz0gbXBjOwogCQl0b3RhbF9tcGMgKz0gYWRhcHRlci0+c3RhdHMubXBjW2ldOwotCQlhZGFwdGVyLT5zdGF0cy5ybmJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STkJDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJCWFkYXB0ZXItPnN0YXRzLnJuYmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JOQkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xcHRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFRDKGkpKTsKIAkJYWRhcHRlci0+c3RhdHMucWJ0Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJUQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFwcmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xYnJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlJDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OUlhDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05SWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5xcHJkY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPTlJYQyhpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQyhpKSk7CisJCX0KIAkJYWRhcHRlci0+c3RhdHMucHhvbnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OVFhDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvZmZyeGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWEMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5weG9mZnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlRYQyhpKSk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGVFhDKGkpKTsKIAl9CiAJYWRhcHRlci0+c3RhdHMuZ3ByYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR1BSQyk7CiAJLyogd29yayBhcm91bmQgaGFyZHdhcmUgY291bnRpbmcgaXNzdWUgKi8KIAlhZGFwdGVyLT5zdGF0cy5ncHJjIC09IG1pc3NlZF9yeDsKIAogCS8qIDgyNTk4IGhhcmR3YXJlIG9ubHkgaGFzIGEgMzIgYml0IGNvdW50ZXIgaW4gdGhlIGhpZ2ggcmVnaXN0ZXIgKi8KLQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7Ci0JYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOwotCWFkYXB0ZXItPnN0YXRzLnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDTCk7CisJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7IC8qIHRvIGNsZWFyICovCisJCWFkYXB0ZXItPnN0YXRzLmdvdGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENIKTsgLyogdG8gY2xlYXIgKi8KKwkJYWRhcHRlci0+c3RhdHMudG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOyAvKiB0byBjbGVhciAqLworCQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDTlQpOworCQlhZGFwdGVyLT5zdGF0cy5seG9mZnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPRkZSWENOVCk7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmx4b2ZmcnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsKKwkJYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOworCQlhZGFwdGVyLT5zdGF0cy50b3IgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOworCX0KIAlicHJjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0JQUkMpOwogCWFkYXB0ZXItPnN0YXRzLmJwcmMgKz0gYnByYzsKIAlhZGFwdGVyLT5zdGF0cy5tcHJjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFJDKTsKLQlhZGFwdGVyLT5zdGF0cy5tcHJjIC09IGJwcmM7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJYWRhcHRlci0+c3RhdHMubXByYyAtPSBicHJjOwogCWFkYXB0ZXItPnN0YXRzLnJvYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk9DKTsKIAlhZGFwdGVyLT5zdGF0cy5wcmM2NCArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDNjQpOwogCWFkYXB0ZXItPnN0YXRzLnByYzEyNyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTI3KTsKQEAgLTMzNDIsOCArMzc2Nyw2IEBACiAJYWRhcHRlci0+c3RhdHMucHJjMTAyMyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTAyMyk7CiAJYWRhcHRlci0+c3RhdHMucHJjMTUyMiArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTUyMik7CiAJYWRhcHRlci0+c3RhdHMucmxlYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkxFQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvZmZyeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDKTsKIAlseG9uID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05UWEMpOwogCWFkYXB0ZXItPnN0YXRzLmx4b250eGMgKz0gbHhvbjsKIAlseG9mZiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlRYQyk7CkBAIC0zMzk1LDE3ICszODE4LDU0IEBACiAJLyogRG8gdGhlIHdhdGNoZG9nIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZSBsb3ZlbHkKIAkgKiBkZWxheXMgdGhhdCBzb21lIG9mIHRoZSBuZXdlciBoYXJkd2FyZSByZXF1aXJlcyAqLwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCXU2NCBlaWNzID0gMDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOyBpKyspCisJCQllaWNzIHw9ICgxIDw8IGkpOworCiAJCS8qIENhdXNlIHNvZnR3YXJlIGludGVycnVwdCB0byBlbnN1cmUgcnggcmluZ3MgYXJlIGNsZWFuZWQgKi8KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKLQkJCXUzMiBlaWNzID0KLQkJCSAoMSA8PCAoYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlMpKSAtIDE7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsIGVpY3MpOwotCQl9IGVsc2UgewotCQkJLyogRm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueSBiaXRzIHRoYXQKLQkJCSAqIGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMgb3BlcmF0aW9uIHdvdWxkCi0JCQkgKiBzZXQgKmJvdGgqIEVJTVMgYW5kIEVJQ1MgZm9yIGFueSBiaXQgaW4gRUlBTSAqLwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElYR0JFX0VJQ1NfVENQX1RJTUVSIHwgSVhHQkVfRUlDU19PVEhFUikpOworCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCQljYXNlIGl4Z2JlX21hY184MjU5OEVCOgorCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsICh1MzIpZWljcyk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogZm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueQorCQkJCSAqIGJpdHMgdGhhdCBhcmUgZW5hYmxlZCBmb3IgRUlBTSwgYmVjYXVzZSB0aGlzCisJCQkJICogb3BlcmF0aW9uIHdvdWxkIHNldCAqYm90aCogRUlNUyBhbmQgRUlDUyBmb3IKKwkJCQkgKiBhbnkgYml0IGluIEVJQU0KKwkJCQkgKi8KKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsCisJCQkJICAgICAoSVhHQkVfRUlDU19UQ1BfVElNRVIgfCBJWEdCRV9FSUNTX09USEVSKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCQkJLyoKKwkJCQkgKiBFSUNTKDAuLjE1KSBmaXJzdCAwLTE1IHEgdmVjdG9ycworCQkJCSAqIEVJQ1NbMV0gKDE2Li4zMSkgcSB2ZWN0b3JzIDE2LTMxCisJCQkJICogRUlDU1syXSAoMC4uMzEpIHEgdmVjdG9ycyAzMi02MworCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRikpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDU19FWCgxKSwKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRjAwMDApKTsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1NfRVgoMiksCisJCQkJICAgICAgICAgICAgICAgICh1MzIpKGVpY3MgPj4gMzIpKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBmb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55CisJCQkJICogYml0cyB0aGF0IGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMKKwkJCQkgKiBvcGVyYXRpb24gd291bGQgc2V0ICpib3RoKiBFSU1TIGFuZCBFSUNTIGZvcgorCQkJCSAqIGFueSBiaXQgaW4gRUlBTQorCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgIChJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJLyogUmVzZXQgdGhlIHRpbWVyICovCiAJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsCkBAIC0zNDE2LDYgKzM4NzYsNTUgQEAKIH0KIAogLyoqCisgKiBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGNvbmZpZ3VyZSBtdWx0aXNwZWVkIGZpYmVyCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBhdXRvbmVnOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOworCWlmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpCisJCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKKwkJaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0s7Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIGEgbmV3IFNGUCsgbW9kdWxlCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGVycjsKKworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLOworCWVyciA9IGh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiUEhZIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBOSUMgJWRcbiIsIGVycik7CisJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCXJldHVybjsKKwl9CisJaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCWlmICghYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spCisJCS8qIFRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIERBIFR3aW5heCBjb25uZWN0aW9ucyAqLworCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSzsKK30KKworLyoqCiAgKiBpeGdiZV93YXRjaGRvZ190YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCiAgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCiAgKiovCkBAIC0zNDQ1LDEwICszOTU0LDIwIEBACiAKIAlpZiAobGlua191cCkgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJdTMyIGZyY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKLQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotI2RlZmluZSBGTE9XX1JYIChmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpCi0jZGVmaW5lIEZMT1dfVFggKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKQorCQkJYm9vbCBmbG93X3J4LCBmbG93X3R4OworCisJCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQkJdTMyIG1mbGNuID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwkJCQl1MzIgZmNjZmcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNDRkcpOworCQkJCWZsb3dfcnggPSAobWZsY24gJiBJWEdCRV9NRkxDTl9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOworCQkJfSBlbHNlIHsKKwkJCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOworCQkJCWZsb3dfcnggPSAoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKwkJCX0KKwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXhnYmU6ICVzIE5JQyBMaW5rIGlzIFVwICVzLCAiCiAJCQkgICAgICAgIkZsb3cgQ29udHJvbDogJXNcbiIsCiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lLApAQCAtMzQ1Niw5ICszOTc1LDkgQEAKIAkJCSAgICAgICAgIjEwIEdicHMiIDoKIAkJCSAgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCA/CiAJCQkgICAgICAgICAiMSBHYnBzIiA6ICJ1bmtub3duIHNwZWVkIikpLAotCQkJICAgICAgICgoRkxPV19SWCAmJiBGTE9XX1RYKSA/ICJSWC9UWCIgOgotCQkJICAgICAgICAoRkxPV19SWCA/ICJSWCIgOgotCQkJICAgICAgICAoRkxPV19UWCA/ICJUWCIgOiAiTm9uZSIpKSkpOworCQkJICAgICAgICgoZmxvd19yeCAmJiBmbG93X3R4KSA/ICJSWC9UWCIgOgorCQkJICAgICAgICAoZmxvd19yeCA/ICJSWCIgOgorCQkJICAgICAgICAoZmxvd190eCA/ICJUWCIgOiAiTm9uZSIpKSkpOwogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCX0gZWxzZSB7CkBAIC0zODAyLDYgKzQzMjEsMTYgQEAKIAlyZXR1cm4gX19peGdiZV9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgc2l6ZSk7CiB9CiAKK3N0YXRpYyB1MTYgaXhnYmVfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKKwkJcmV0dXJuIDA7ICAvKiBBbGwgdHJhZmZpYyBzaG91bGQgZGVmYXVsdCB0byBjbGFzcyAwICovCisKKwlyZXR1cm4gc2tiX3R4X2hhc2goZGV2LCBza2IpOworfQorCiBzdGF0aWMgaW50IGl4Z2JlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0zOTMxLDcgKzQ0NjAsOSBAQAogCS5uZG9fb3BlbiAJCT0gaXhnYmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gaXhnYmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGl4Z2JlX3htaXRfZnJhbWUsCisJLm5kb19zZWxlY3RfcXVldWUJPSBpeGdiZV9zZWxlY3RfcXVldWUsCiAJLm5kb19nZXRfc3RhdHMJCT0gaXhnYmVfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gaXhnYmVfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpeGdiZV9zZXRfcnhfbW9kZSwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGl4Z2JlX3NldF9tYWMsCkBAIC0zOTY1LDcgKzQ0OTYsNyBAQAogCWNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppaSA9IGl4Z2JlX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKLQl1MTYgbGlua19zdGF0dXMsIGxpbmtfc3BlZWQsIGxpbmtfd2lkdGg7CisJdTE2IHBtX3ZhbHVlID0gMDsKIAl1MzIgcGFydF9udW0sIGVlYzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDA2NCw2ICs0NTk1LDEzIEBACiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF90YXNrLCBpeGdiZV9zZnBfdGFzayk7CiAKKwkvKiBtdWx0aXNwZWVkIGZpYmVyIGhhcyBpdHMgb3duIHRhc2tsZXQsIGNhbGxlZCBmcm9tIEdQSSBTRFAxIGNvbnRleHQgKi8KKwlJTklUX1dPUksoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzaywgaXhnYmVfbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKworCS8qIGEgbmV3IFNGUCsgbW9kdWxlIGFycml2YWwsIGNhbGxlZCBmcm9tIEdQSSBTRFAyIGNvbnRleHQgKi8KKwlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2ssCisJICAgICAgICAgIGl4Z2JlX3NmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCiAJZXJyID0gaWktPmdldF9pbnZhcmlhbnRzKGh3KTsKIAlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQpIHsKIAkJLyogc3RhcnQgYSBrZXJuZWwgdGhyZWFkIHRvIHdhdGNoIGZvciBhIG1vZHVsZSB0byBhcnJpdmUgKi8KQEAgLTQxNDQsMjYgKzQ2ODIsNDEgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zd19pbml0OwogCisJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9LWDQ6CisjZGVmaW5lIElYR0JFX1BDSUVfUE1DU1IgMHg0NAorCQlhZGFwdGVyLT53b2wgPSBJWEdCRV9XVUZDX01BRzsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSVhHQkVfUENJRV9QTUNTUiwgJnBtX3ZhbHVlKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIElYR0JFX1BDSUVfUE1DU1IsCisJCSAgICAgICAgICAgICAgICAgICAgICAocG1fdmFsdWUgfCAoMSA8PCA4KSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhZGFwdGVyLT53b2wgPSAwOworCQlicmVhazsKKwl9CisJZGV2aWNlX2luaXRfd2FrZXVwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHRydWUpOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOworCiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIElYR0JFX1BDSV9MSU5LX1NUQVRVUywgJmxpbmtfc3RhdHVzKTsKLQlsaW5rX3NwZWVkID0gbGlua19zdGF0dXMgJiBJWEdCRV9QQ0lfTElOS19TUEVFRDsKLQlsaW5rX3dpZHRoID0gbGlua19zdGF0dXMgJiBJWEdCRV9QQ0lfTElOS19XSURUSDsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiKFBDSSBFeHByZXNzOiVzOiVzKSAlcE1cbiIsCi0JICAgICAgICAoKGxpbmtfc3BlZWQgPT0gSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMCkgPyAiNS4wR2IvcyIgOgotCSAgICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX1BDSV9MSU5LX1NQRUVEXzI1MDApID8gIjIuNUdiL3MiIDoKLQkgICAgICAgICAiVW5rbm93biIpLAotCSAgICAgICAgKChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzgpID8gIldpZHRoIHg4IiA6Ci0JICAgICAgICAgKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfNCkgPyAiV2lkdGggeDQiIDoKLQkgICAgICAgICAobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF8yKSA/ICJXaWR0aCB4MiIgOgotCSAgICAgICAgIChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzEpID8gIldpZHRoIHgxIiA6CisJICAgICAgICAoKGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzUwMDApID8gIjUuMEdiL3MiOgorCSAgICAgICAgIChody0+YnVzLnNwZWVkID09IGl4Z2JlX2J1c19zcGVlZF8yNTAwKSA/ICIyLjVHYi9zIjoiVW5rbm93biIpLAorCSAgICAgICAgKChody0+YnVzLndpZHRoID09IGl4Z2JlX2J1c193aWR0aF9wY2llX3g4KSA/ICJXaWR0aCB4OCIgOgorCSAgICAgICAgIChody0+YnVzLndpZHRoID09IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0KSA/ICJXaWR0aCB4NCIgOgorCSAgICAgICAgIChody0+YnVzLndpZHRoID09IGl4Z2JlX2J1c193aWR0aF9wY2llX3gxKSA/ICJXaWR0aCB4MSIgOgogCSAgICAgICAgICJVbmtub3duIiksCiAJICAgICAgICBuZXRkZXYtPmRldl9hZGRyKTsKIAlpeGdiZV9yZWFkX3BiYV9udW1fZ2VuZXJpYyhodywgJnBhcnRfbnVtKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZCwgUEhZOiAlZCwgUEJBIE5vOiAlMDZ4LSUwM3hcbiIsCi0JICAgICAgICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsCi0JICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CisJaWYgKGl4Z2JlX2lzX3NmcChodykgJiYgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9ub3RfcHJlc2VudCkKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQzogJWQsIFBIWTogJWQsIFNGUCs6ICVkLCBQQkEgTm86ICUwNngtJTAzeFxuIiwKKwkJICAgICAgICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsIGh3LT5waHkuc2ZwX3R5cGUsCisJCSAgICAgICAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOworCWVsc2UKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAorCQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwKKwkJICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CiAKLQlpZiAobGlua193aWR0aCA8PSBJWEdCRV9QQ0lfTElOS19XSURUSF80KSB7CisJaWYgKGh3LT5idXMud2lkdGggPD0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlBDSS1FeHByZXNzIGJhbmR3aWR0aCBhdmFpbGFibGUgZm9yICIKIAkJICAgICAgICAgInRoaXMgY2FyZCBpcyBub3Qgc3VmZmljaWVudCBmb3Igb3B0aW1hbCAiCiAJCSAgICAgICAgICJwZXJmb3JtYW5jZS5cbiIpOwpAQCAtNDIwNyw2ICs0NzYwLDggQEAKIAljbGVhcl9iaXQoX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CkBAIC00MjQzLDYgKzQ3OTgsOCBAQAogCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZnBfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCkBAIC00MzI2LDcgKzQ4ODMsNyBAQAogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CiAKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7Ci0KKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfV1VTLCB+MCk7CiAJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKaW5kZXggNzdlYzI2Zi4uMTRlOTYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKQEAgLTMyLDYgKzMyLDE4IEBACiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCiAKK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdGFydChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdG9wKHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2kyY19hY2soc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX3JhaXNlX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpOworc3RhdGljIHZvaWQgaXhnYmVfbG93ZXJfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCk7CitzdGF0aWMgczMyIGl4Z2JlX3NldF9pMmNfZGF0YShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCwgYm9vbCBkYXRhKTsKK3N0YXRpYyBib29sIGl4Z2JlX2dldF9pMmNfZGF0YSh1MzIgKmkyY2N0bCk7CitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfYnVzX2NsZWFyKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogc3RhdGljIGJvb2wgaXhnYmVfdmFsaWRhdGVfcGh5X2FkZHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHBoeV9hZGRyKTsKIHN0YXRpYyBlbnVtIGl4Z2JlX3BoeV90eXBlIGl4Z2JlX2dldF9waHlfdHlwZV9mcm9tX2lkKHUzMiBwaHlfaWQpOwogc3RhdGljIHMzMiBpeGdiZV9nZXRfcGh5X2lkKHN0cnVjdCBpeGdiZV9odyAqaHcpOwpAQCAtNTQzLDggKzU1NSw5IEBACiAJdTggaWRlbnRpZmllciA9IDA7CiAJdTggY29tcF9jb2Rlc18xZyA9IDA7CiAJdTggY29tcF9jb2Rlc18xMGcgPSAwOwotCXU4IG91aV9ieXRlc1s0XSA9IHswLCAwLCAwLCAwfTsKKwl1OCBvdWlfYnl0ZXNbM10gPSB7MCwgMCwgMH07CiAJdTggdHJhbnNtaXNzaW9uX21lZGlhID0gMDsKKwl1MTYgZW5mb3JjZV9zZnAgPSAwOwogCiAJc3RhdHVzID0gaHctPnBoeS5vcHMucmVhZF9pMmNfZWVwcm9tKGh3LCBJWEdCRV9TRkZfSURFTlRJRklFUiwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlkZW50aWZpZXIpOwpAQCAtNTY0LDE4ICs1NzcsNDggQEAKIAogCQkvKiBJRCBNb2R1bGUKIAkJICogPT09PT09PT09Ci0JCSAqIDAJU0ZQX0RBX0NVCi0JCSAqIDEJU0ZQX1NSCi0JCSAqIDIJU0ZQX0xSCisJCSAqIDAgICAgU0ZQX0RBX0NVCisJCSAqIDEgICAgU0ZQX1NSCisJCSAqIDIgICAgU0ZQX0xSCisJCSAqIDMgICAgU0ZQX0RBX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKwkJICogNCAgICBTRlBfREFfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYworCQkgKiA1ICAgIFNGUF9TUi9MUl9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisJCSAqIDYgICAgU0ZQX1NSL0xSX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKIAkJICovCi0JCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJiBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2RhX2N1OwotCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9zcjsKLQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRUxSX0NBUEFCTEUpCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfbHI7Ci0JCWVsc2UKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV91bmtub3duOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfZGFfY3U7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfc3I7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfbHI7CisJCQllbHNlCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3Vua25vd247CisJCX0gZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKKwkJCQlpZiAoaHctPmJ1cy5sYW5faWQgPT0gMCkKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMDsKKwkJCQllbHNlCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTE7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKKwkJCQlpZiAoaHctPmJ1cy5sYW5faWQgPT0gMCkKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMDsKKwkJCQllbHNlCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKKwkJCQlpZiAoaHctPmJ1cy5sYW5faWQgPT0gMCkKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMDsKKwkJCQllbHNlCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE7CisJCQllbHNlCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3Vua25vd247CisJCX0KIAogCQkvKiBEZXRlcm1pbmUgUEhZIHZlbmRvciAqLwogCQlpZiAoaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV91bmtub3duKSB7CkBAIC02MDcsNiArNjUwLDkgQEAKIAkJCWNhc2UgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQVZBR086CiAJCQkJaHctPnBoeS50eXBlID0gaXhnYmVfcGh5X3NmcF9hdmFnbzsKIAkJCQlicmVhazsKKwkJCWNhc2UgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfSU5URUw6CisJCQkJaHctPnBoeS50eXBlID0gaXhnYmVfcGh5X3NmcF9pbnRlbDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmCiAJCQkJICAgIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCkBAIC02MTYsNyArNjYyLDI4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJc3RhdHVzID0gMDsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQiB8fAorCQkgICAgKGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfc3IgJiYKKwkJICAgICBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX2xyICYmCisJCSAgICAgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwICYmCisJCSAgICAgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxKSkgeworCQkJc3RhdHVzID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfUEhZX0VORk9SQ0VfSU5URUxfU0ZQX09GRlNFVCwKKwkJICAgICAgICAgICAgICAgICAgICAmZW5mb3JjZV9zZnApOworCQlpZiAoIShlbmZvcmNlX3NmcCAmIElYR0JFX1BIWV9BTExPV19BTllfU0ZQKSkgeworCQkJLyogTWFrZSBzdXJlIHdlJ3JlIGEgc3VwcG9ydGVkIFBIWSB0eXBlICovCisJCQlpZiAoaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV9zZnBfaW50ZWwpIHsKKwkJCQlzdGF0dXMgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlod19kYmcoaHcsICJTRlArIG1vZHVsZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlzdGF0dXMgPSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAwOworCQl9CiAJfQogCiBvdXQ6CkBAIC02NTEsNyArNzE4LDcgQEAKIAlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9QSFlfSU5JVF9PRkZTRVRfTkwsIGxpc3Rfb2Zmc2V0KTsKIAogCWlmICgoISpsaXN0X29mZnNldCkgfHwgKCpsaXN0X29mZnNldCA9PSAweEZGRkYpKQotCQlyZXR1cm4gSVhHQkVfRVJSX1BIWTsKKwkJcmV0dXJuIElYR0JFX0VSUl9TRlBfTk9fSU5JVF9TRVFfUFJFU0VOVDsKIAogCS8qIFNoaWZ0IG9mZnNldCB0byBmaXJzdCBJRCB3b3JkICovCiAJKCpsaXN0X29mZnNldCkrKzsKQEAgLTY4OCw2ICs3NTUsNTAxIEBACiB9CiAKIC8qKgorICogIGl4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljIC0gUmVhZHMgOCBiaXQgRUVQUk9NIHdvcmQgb3ZlciBJMkMgaW50ZXJmYWNlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogRUVQUk9NIGJ5dGUgb2Zmc2V0IHRvIHJlYWQKKyAqICBAZWVwcm9tX2RhdGE6IHZhbHVlIHJlYWQKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSByZWFkIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZS4KKyAqKi8KK3MzMiBpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqZWVwcm9tX2RhdGEpCit7CisJcmV0dXJuIGh3LT5waHkub3BzLnJlYWRfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0kyQ19FRVBST01fREVWX0FERFIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tX2RhdGEpOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMgLSBXcml0ZXMgOCBiaXQgRUVQUk9NIHdvcmQgb3ZlciBJMkMgaW50ZXJmYWNlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogRUVQUk9NIGJ5dGUgb2Zmc2V0IHRvIHdyaXRlCisgKiAgQGVlcHJvbV9kYXRhOiB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBQZXJmb3JtcyBieXRlIHdyaXRlIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZS4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGVlcHJvbV9kYXRhKQoreworCXJldHVybiBody0+cGh5Lm9wcy53cml0ZV9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0kyQ19FRVBST01fREVWX0FERFIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbV9kYXRhKTsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljIC0gUmVhZHMgOCBiaXQgd29yZCBvdmVyIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IGJ5dGUgb2Zmc2V0IHRvIHJlYWQKKyAqICBAZGF0YTogdmFsdWUgcmVhZAorICoKKyAqICBQZXJmb3JtcyBieXRlIHJlYWQgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlIGF0CisgKiAgYSBzcGVjaWZpZWQgZGVpdmNlIGFkZHJlc3MuCisgKiovCitzMzIgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggKmRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIG1heF9yZXRyeSA9IDE7CisJdTMyIHJldHJ5ID0gMDsKKwlib29sIG5hY2sgPSAxOworCisJZG8geworCQlpeGdiZV9pMmNfc3RhcnQoaHcpOworCisJCS8qIERldmljZSBBZGRyZXNzIGFuZCB3cml0ZSBpbmRpY2F0aW9uICovCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgZGV2X2FkZHIpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBieXRlX29mZnNldCk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlpeGdiZV9pMmNfc3RhcnQoaHcpOworCisJCS8qIERldmljZSBBZGRyZXNzIGFuZCByZWFkIGluZGljYXRpb24gKi8KKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCAoZGV2X2FkZHIgfCAweDEpKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlKGh3LCBkYXRhKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KGh3LCBuYWNrKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWl4Z2JlX2kyY19zdG9wKGh3KTsKKwkJYnJlYWs7CisKK2ZhaWw6CisJCWl4Z2JlX2kyY19idXNfY2xlYXIoaHcpOworCQlyZXRyeSsrOworCQlpZiAocmV0cnkgPCBtYXhfcmV0cnkpCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSByZWFkIGVycm9yIC0gUmV0cnlpbmcuXG4iKTsKKwkJZWxzZQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgcmVhZCBlcnJvci5cbiIpOworCisJfSB3aGlsZSAocmV0cnkgPCBtYXhfcmV0cnkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYyAtIFdyaXRlcyA4IGJpdCB3b3JkIG92ZXIgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogYnl0ZSBvZmZzZXQgdG8gd3JpdGUKKyAqICBAZGF0YTogdmFsdWUgdG8gd3JpdGUKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSB3cml0ZSBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UgYXQKKyAqICBhIHNwZWNpZmllZCBkZXZpY2UgYWRkcmVzcy4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4IGRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIG1heF9yZXRyeSA9IDE7CisJdTMyIHJldHJ5ID0gMDsKKworCWRvIHsKKwkJaXhnYmVfaTJjX3N0YXJ0KGh3KTsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGRldl9hZGRyKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBkYXRhKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWl4Z2JlX2kyY19zdG9wKGh3KTsKKwkJYnJlYWs7CisKK2ZhaWw6CisJCWl4Z2JlX2kyY19idXNfY2xlYXIoaHcpOworCQlyZXRyeSsrOworCQlpZiAocmV0cnkgPCBtYXhfcmV0cnkpCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSB3cml0ZSBlcnJvciAtIFJldHJ5aW5nLlxuIik7CisJCWVsc2UKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHdyaXRlIGVycm9yLlxuIik7CisJfSB3aGlsZSAocmV0cnkgPCBtYXhfcmV0cnkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfaTJjX3N0YXJ0IC0gU2V0cyBJMkMgc3RhcnQgY29uZGl0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIEkyQyBzdGFydCBjb25kaXRpb24gKEhpZ2ggLT4gTG93IG9uIFNEQSB3aGlsZSBTQ0wgaXMgSGlnaCkKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdGFydChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCS8qIFN0YXJ0IGNvbmRpdGlvbiBtdXN0IGJlZ2luIHdpdGggZGF0YSBhbmQgY2xvY2sgaGlnaCAqLworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMSk7CisJaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBTZXR1cCB0aW1lIGZvciBzdGFydCBjb25kaXRpb24gKDQuN3VzKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9TVV9TVEEpOworCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAwKTsKKworCS8qIEhvbGQgdGltZSBmb3Igc3RhcnQgY29uZGl0aW9uICg0dXMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0hEX1NUQSk7CisKKwlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKworfQorCisvKioKKyAqICBpeGdiZV9pMmNfc3RvcCAtIFNldHMgSTJDIHN0b3AgY29uZGl0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIEkyQyBzdG9wIGNvbmRpdGlvbiAoTG93IC0+IEhpZ2ggb24gU0RBIHdoaWxlIFNDTCBpcyBIaWdoKQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0b3Aoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwkvKiBTdG9wIGNvbmRpdGlvbiBtdXN0IGJlZ2luIHdpdGggZGF0YSBsb3cgYW5kIGNsb2NrIGhpZ2ggKi8KKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDApOworCWl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogU2V0dXAgdGltZSBmb3Igc3RvcCBjb25kaXRpb24gKDR1cykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfU1VfU1RPKTsKKworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMSk7CisKKwkvKiBidXMgZnJlZSB0aW1lIGJldHdlZW4gc3RvcCBhbmQgc3RhcnQgKDQuN3VzKSovCisJdWRlbGF5KElYR0JFX0kyQ19UX0JVRik7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlIC0gQ2xvY2tzIGluIG9uZSBieXRlIHZpYSBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IGRhdGEgYnl0ZSB0byBjbG9jayBpbgorICoKKyAqICBDbG9ja3MgaW4gb25lIGJ5dGUgZGF0YSB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKmRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJczMyIGk7CisJYm9vbCBiaXQgPSAwOworCisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfaW5faTJjX2JpdChodywgJmJpdCk7CisJCSpkYXRhIHw9IGJpdCA8PCBpOworCisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZSAtIENsb2NrcyBvdXQgb25lIGJ5dGUgdmlhIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogZGF0YSBieXRlIGNsb2NrZWQgb3V0CisgKgorICogIENsb2NrcyBvdXQgb25lIGJ5dGUgZGF0YSB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJczMyIGk7CisJdTMyIGkyY2N0bDsKKwlib29sIGJpdCA9IDA7CisKKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQliaXQgPSAoZGF0YSA+PiBpKSAmIDB4MTsKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoaHcsIGJpdCk7CisKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJYnJlYWs7CisJfQorCisJLyogUmVsZWFzZSBTREEgbGluZSAoc2V0IGhpZ2gpICovCisJaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJaTJjY3RsIHw9IElYR0JFX0kyQ19EQVRBX09VVDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgaTJjY3RsKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9pMmNfYWNrIC0gUG9sbHMgZm9yIEkyQyBBQ0sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENsb2NrcyBpbi9vdXQgb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2kyY19hY2soc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzOworCXUzMiBpID0gMDsKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJdTMyIHRpbWVvdXQgPSAxMDsKKwlib29sIGFjayA9IDE7CisKKwlzdGF0dXMgPSBpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBNaW5pbXVtIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCS8qIFBvbGwgZm9yIEFDSy4gIE5vdGUgdGhhdCBBQ0sgaW4gSTJDIHNwZWMgaXMKKwkgKiB0cmFuc2l0aW9uIGZyb20gMSB0byAwICovCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQlpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwkJYWNrID0gaXhnYmVfZ2V0X2kyY19kYXRhKCZpMmNjdGwpOworCisJCXVkZWxheSgxKTsKKwkJaWYgKGFjayA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFjayA9PSAxKSB7CisJCWh3X2RiZyhodywgIkkyQyBhY2sgd2FzIG5vdCByZWNlaXZlZC5cbiIpOworCQlzdGF0dXMgPSBJWEdCRV9FUlJfSTJDOworCX0KKworCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfaW5faTJjX2JpdCAtIENsb2NrcyBpbiBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogcmVhZCBkYXRhIHZhbHVlCisgKgorICogIENsb2NrcyBpbiBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgKmRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwlzdGF0dXMgPSBpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJKmRhdGEgPSBpeGdiZV9nZXRfaTJjX2RhdGEoJmkyY2N0bCk7CisKKwlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0IC0gQ2xvY2tzIGluL291dCBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogZGF0YSB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBDbG9ja3Mgb3V0IG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgZGF0YSkKK3sKKwlzMzIgc3RhdHVzOworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCXN0YXR1cyA9IGl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgZGF0YSk7CisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXN0YXR1cyA9IGl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbmltdW0gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCQlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzLgorCQkgKiBUaGlzIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgZGF0YSBob2xkIHRpbWUuCisJCSAqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfSTJDOworCQlod19kYmcoaHcsICJJMkMgZGF0YSB3YXMgbm90IHNldCB0byAlWFxuIiwgZGF0YSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKy8qKgorICogIGl4Z2JlX3JhaXNlX2kyY19jbGsgLSBSYWlzZXMgdGhlIEkyQyBTQ0wgY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqCisgKiAgUmFpc2VzIHRoZSBJMkMgY2xvY2sgbGluZSAnMCctPicxJworICoqLworc3RhdGljIHMzMiBpeGdiZV9yYWlzZV9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKQoreworCXMzMiBzdGF0dXMgPSAwOworCisJKmkyY2N0bCB8PSBJWEdCRV9JMkNfQ0xLX09VVDsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCAqaTJjY3RsKTsKKworCS8qIFNDTCByaXNlIHRpbWUgKDEwMDBucykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfUklTRSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9sb3dlcl9pMmNfY2xrIC0gTG93ZXJzIHRoZSBJMkMgU0NMIGNsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKgorICogIExvd2VycyB0aGUgSTJDIGNsb2NrIGxpbmUgJzEnLT4nMCcKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2xvd2VyX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpCit7CisKKwkqaTJjY3RsICY9IH5JWEdCRV9JMkNfQ0xLX09VVDsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCAqaTJjY3RsKTsKKworCS8qIFNDTCBmYWxsIHRpbWUgKDMwMG5zKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9GQUxMKTsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X2kyY19kYXRhIC0gU2V0cyB0aGUgSTJDIGRhdGEgYml0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKiAgQGRhdGE6IEkyQyBkYXRhIHZhbHVlICgwIG9yIDEpIHRvIHNldAorICoKKyAqICBTZXRzIHRoZSBJMkMgZGF0YSBiaXQKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0X2kyY19kYXRhKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsLCBib29sIGRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwlpZiAoZGF0YSkKKwkJKmkyY2N0bCB8PSBJWEdCRV9JMkNfREFUQV9PVVQ7CisJZWxzZQorCQkqaTJjY3RsICY9IH5JWEdCRV9JMkNfREFUQV9PVVQ7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgKmkyY2N0bCk7CisKKwkvKiBEYXRhIHJpc2UvZmFsbCAoMTAwMG5zLzMwMG5zKSBhbmQgc2V0LXVwIHRpbWUgKDI1MG5zKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9SSVNFICsgSVhHQkVfSTJDX1RfRkFMTCArIElYR0JFX0kyQ19UX1NVX0RBVEEpOworCisJLyogVmVyaWZ5IGRhdGEgd2FzIHNldCBjb3JyZWN0bHkgKi8KKwkqaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJaWYgKGRhdGEgIT0gaXhnYmVfZ2V0X2kyY19kYXRhKGkyY2N0bCkpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0kyQzsKKwkJaHdfZGJnKGh3LCAiRXJyb3IgLSBJMkMgZGF0YSB3YXMgbm90IHNldCB0byAlWC5cbiIsIGRhdGEpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9pMmNfZGF0YSAtIFJlYWRzIHRoZSBJMkMgU0RBIGRhdGEgYml0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKgorICogIFJldHVybnMgdGhlIEkyQyBkYXRhIGJpdCB2YWx1ZQorICoqLworc3RhdGljIGJvb2wgaXhnYmVfZ2V0X2kyY19kYXRhKHUzMiAqaTJjY3RsKQoreworCWJvb2wgZGF0YTsKKworCWlmICgqaTJjY3RsICYgSVhHQkVfSTJDX0RBVEFfSU4pCisJCWRhdGEgPSAxOworCWVsc2UKKwkJZGF0YSA9IDA7CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiAgaXhnYmVfaTJjX2J1c19jbGVhciAtIENsZWFycyB0aGUgSTJDIGJ1cworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2xlYXJzIHRoZSBJMkMgYnVzIGJ5IHNlbmRpbmcgbmluZSBjbG9jayBwdWxzZXMuCisgKiAgVXNlZCB3aGVuIGRhdGEgbGluZSBpcyBzdHVjayBsb3cuCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfYnVzX2NsZWFyKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCXUzMiBpOworCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwkJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43dXMqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKwl9CisKKwkvKiBQdXQgdGhlIGkyYyBidXMgYmFjayB0byBkZWZhdWx0IHN0YXRlICovCisJaXhnYmVfaTJjX3N0b3AoaHcpOworfQorCisvKioKICAqICBpeGdiZV9jaGVja19waHlfbGlua190bnggLSBEZXRlcm1pbmUgbGluayBhbmQgc3BlZWQgc3RhdHVzCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmgKaW5kZXggNTM5YTMwNi4uY2M1ZjFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmgKQEAgLTU0LDE0ICs1NCwxNSBAQAogI2RlZmluZSBJWEdCRV9JMkNfRUVQUk9NX1NUQVRVU19JTl9QUk9HUkVTUyAgMHgzCiAKIC8qIEJpdC1zaGlmdCBtYWNyb3MgKi8KLSNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTBfU0hJRlQgICAgMTIKLSNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTFfU0hJRlQgICAgOAotI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMl9TSElGVCAgICA0CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUwX1NISUZUICAgIDI0CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUxX1NISUZUICAgIDE2CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUyX1NISUZUICAgIDgKIAogLyogVmVuZG9yIE9VSXM6IGZvcm1hdCBvZiBPVUkgaXMgMHhbYnl0ZTBdW2J5dGUxXVtieXRlMl1bMDBdICovCiAjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX1RZQ08gICAgIDB4MDA0MDc2MDAKICNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfRlRMICAgICAgMHgwMDkwNjUwMAogI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9BVkFHTyAgICAweDAwMTc2QTAwCisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0lOVEVMICAgIDB4MDAxQjIxMDAKIAogLyogSTJDIFNEQSBhbmQgU0NMIHRpbWluZyBwYXJhbWV0ZXJzIGZvciBzdGFuZGFyZCBtb2RlICovCiAjZGVmaW5lIElYR0JFX0kyQ19UX0hEX1NUQSAgNApAQCAtMTAxLDUgKzEwMiwxMiBAQAogczMyIGl4Z2JlX2dldF9zZnBfaW5pdF9zZXF1ZW5jZV9vZmZzZXRzKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpsaXN0X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGFfb2Zmc2V0KTsKLQorczMyIGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4ICpkYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4IGRhdGEpOworczMyIGl4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSk7CitzMzIgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBlZXByb21fZGF0YSk7CiAjZW5kaWYgLyogX0lYR0JFX1BIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCmluZGV4IDIzN2M2ODguLjJiMmVjYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKQEAgLTQ1LDYgKzQ1LDkgQEAKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X0RBX0RVQUxfUE9SVCAgMHgxMEYxCiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OF9TUl9EVUFMX1BPUlRfRU0gICAgICAweDEwRTEKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4RUJfWEZfTFIgICAgICAgMHgxMEY0CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OSAgICAgICAgICAgICAgIDB4MTBEOAorI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0ICAgICAgICAgICAweDEwRjcKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1NGUCAgICAgICAgICAgMHgxMEZCCiAKIC8qIEdlbmVyYWwgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0NUUkwgICAgICAweDAwMDAwCkBAIC01Miw5ICs1NSwxMiBAQAogI2RlZmluZSBJWEdCRV9DVFJMX0VYVCAgMHgwMDAxOAogI2RlZmluZSBJWEdCRV9FU0RQICAgICAgMHgwMDAyMAogI2RlZmluZSBJWEdCRV9FT0RTRFAgICAgMHgwMDAyOAorI2RlZmluZSBJWEdCRV9JMkNDVEwgICAgMHgwMDAyOAogI2RlZmluZSBJWEdCRV9MRURDVEwgICAgMHgwMDIwMAogI2RlZmluZSBJWEdCRV9GUlRJTUVSICAgMHgwMDA0OAogI2RlZmluZSBJWEdCRV9UQ1BUSU1FUiAgMHgwMDA0QworI2RlZmluZSBJWEdCRV9DT1JFU1BBUkUgMHgwMDYwMAorI2RlZmluZSBJWEdCRV9FWFZFVCAgICAgMHgwNTA3OAogCiAvKiBOVk0gUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0VFQyAgICAgICAweDEwMDEwCkBAIC02OCw2ICs3NCwxOSBAQAogI2RlZmluZSBJWEdCRV9GTE9QICAgICAgMHgxMDEzQwogI2RlZmluZSBJWEdCRV9HUkMgICAgICAgMHgxMDIwMAogCisvKiBHZW5lcmFsIFJlY2VpdmUgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9HUkNfTU5HICAweDAwMDAwMDAxIC8qIE1hbmFnZWFiaWxpdHkgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX0dSQ19BUE1FIDB4MDAwMDAwMDIgLyogQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9WUERESUFHMCAgMHgxMDIwNAorI2RlZmluZSBJWEdCRV9WUERESUFHMSAgMHgxMDIwOAorCisvKiBJMkNDVEwgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX0kyQ19DTEtfSU4gICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9JMkNfQ0xLX09VVCAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfSTJDX0RBVEFfSU4gICAweDAwMDAwMDA0CisjZGVmaW5lIElYR0JFX0kyQ19EQVRBX09VVCAgMHgwMDAwMDAwOAorCiAvKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0VJQ1IgICAgICAweDAwODAwCiAjZGVmaW5lIElYR0JFX0VJQ1MgICAgICAweDAwODA4CkBAIC03NSwyOCArOTQsNjMgQEAKICNkZWZpbmUgSVhHQkVfRUlNQyAgICAgIDB4MDA4ODgKICNkZWZpbmUgSVhHQkVfRUlBQyAgICAgIDB4MDA4MTAKICNkZWZpbmUgSVhHQkVfRUlBTSAgICAgIDB4MDA4OTAKLSNkZWZpbmUgSVhHQkVfRUlUUihfaSkgICgoKF9pKSA8PSAyMykgPyAoMHgwMDgyMCArICgoX2kpICogNCkpIDogKDB4MDEyMzAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX0VJQ1NfRVgoX2kpICAgKDB4MDBBOTAgKyAoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfRUlNU19FWChfaSkgICAoMHgwMEFBMCArIChfaSkgKiA0KQorI2RlZmluZSBJWEdCRV9FSU1DX0VYKF9pKSAgICgweDAwQUIwICsgKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX0VJQU1fRVgoX2kpICAgKDB4MDBBRDAgKyAoX2kpICogNCkKKy8qCisgKiA4MjU5OCBFSVRSIGlzIDE2IGJpdHMgYnV0IHNldCB0aGUgbGltaXRzIGJhc2VkIG9uIHRoZSBtYXgKKyAqIHN1cHBvcnRlZCBieSBhbGwgaXhnYmUgaGFyZHdhcmUuICA4MjU5OSBFSVRSIGlzIG9ubHkgMTIgYml0cywKKyAqIHdpdGggdGhlIGxvd2VyIDMgYWx3YXlzIHplcm8uCisgKi8KKyNkZWZpbmUgSVhHQkVfTUFYX0lOVF9SQVRFIDQ4ODI4MQorI2RlZmluZSBJWEdCRV9NSU5fSU5UX1JBVEUgOTU2CisjZGVmaW5lIElYR0JFX01BWF9FSVRSICAgICAweDAwMDAwRkY4CisjZGVmaW5lIElYR0JFX01JTl9FSVRSICAgICA4CisjZGVmaW5lIElYR0JFX0VJVFIoX2kpICAoKChfaSkgPD0gMjMpID8gKDB4MDA4MjAgKyAoKF9pKSAqIDQpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTIzMDAgKyAoKChfaSkgLSAyNCkgKiA0KSkpCisjZGVmaW5lIElYR0JFX0VJVFJfSVRSX0lOVF9NQVNLIDB4MDAwMDBGRjgKKyNkZWZpbmUgSVhHQkVfRUlUUl9MTElfTU9EICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBJWEdCRV9FSVRSX0NOVF9XRElTICAgICAweDgwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0lWQVIoX2kpICAoMHgwMDkwMCArICgoX2kpICogNCkpIC8qIDI0IGF0IDB4OTAwLTB4OTYwICovCisjZGVmaW5lIElYR0JFX0lWQVJfTUlTQyAweDAwQTAwIC8qIG1pc2MgTVNJLVggaW50ZXJydXB0IGNhdXNlcyAqLworI2RlZmluZSBJWEdCRV9FSVRSU0VMICAgMHgwMDg5NAogI2RlZmluZSBJWEdCRV9NU0lYVCAgICAgMHgwMDAwMCAvKiBNU0ktWCBUYWJsZS4gMHgwMDAwIC0gMHgwMUMgKi8KICNkZWZpbmUgSVhHQkVfTVNJWFBCQSAgIDB4MDIwMDAgLyogTVNJLVggUGVuZGluZyBiaXQgYXJyYXkgKi8KICNkZWZpbmUgSVhHQkVfUEJBQ0woX2kpICgoKF9pKSA9PSAwKSA/ICgweDExMDY4KSA6ICgweDExMEMwICsgKChfaSkgKiA0KSkpCiAjZGVmaW5lIElYR0JFX0dQSUUgICAgICAweDAwODk4CiAKIC8qIEZsb3cgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfRkNBREJVTCAgIDB4MDMyMTAKKyNkZWZpbmUgSVhHQkVfRkNBREJVSCAgIDB4MDMyMTQKKyNkZWZpbmUgSVhHQkVfRkNBTUFDTCAgIDB4MDQzMjgKKyNkZWZpbmUgSVhHQkVfRkNBTUFDSCAgIDB4MDQzMkMKKyNkZWZpbmUgSVhHQkVfRkNSVEhfODI1OTkoX2kpICgweDAzMjYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9GQ1JUTF84MjU5OShfaSkgKDB4MDMyMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX1BGQ1RPUCAgICAweDAzMDA4CiAjZGVmaW5lIElYR0JFX0ZDVFRWKF9pKSAoMHgwMzIwMCArICgoX2kpICogNCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfRkNSVEwoX2kpICgweDAzMjIwICsgKChfaSkgKiA4KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9GQ1JUSChfaSkgKDB4MDMyNjAgKyAoKF9pKSAqIDgpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0ZDUlRWICAgICAweDAzMkEwCisjZGVmaW5lIElYR0JFX0ZDQ0ZHICAgICAweDAzRDAwCiAjZGVmaW5lIElYR0JFX1RGQ1MgICAgICAweDBDRTAwCiAKIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqLwotI2RlZmluZSBJWEdCRV9SREJBTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDAwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRCQUgoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAwNCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JETEVOKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwOCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMDggKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SREgoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTAgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDEwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRUKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDE4ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAxOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JYRENUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMjggKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDI4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRCQUwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDAwICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMDAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SREJBSChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAwNCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JETEVOKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwOCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDA4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRIKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDEwICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMTAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SRFQoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTggKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAxOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JYRENUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMjggKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMjggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SRERDQyAgICAgIDB4MDJGMjAKKyNkZWZpbmUgSVhHQkVfUlhNRU1XUkFQICAweDAzMTkwCisjZGVmaW5lIElYR0JFX1NUQVJDVFJMICAgMHgwMzAyNAogLyoKICAqIFNwbGl0IGFuZCBSZXBsaWNhdGlvbiBSZWNlaXZlIENvbnRyb2wgUmVnaXN0ZXJzCiAgKiAwMC0xNSA6IDB4MDIxMDAgKyBuKjQKQEAgLTEyOSwxMCArMTgzLDE1IEBACiAjZGVmaW5lIElYR0JFX0RSRUNDQ1RMX0RJU0FCTEUgMAogLyogTXVsdGljYXN0IFRhYmxlIEFycmF5IC0gMTI4IGVudHJpZXMgKi8KICNkZWZpbmUgSVhHQkVfTVRBKF9pKSAgICgweDA1MjAwICsgKChfaSkgKiA0KSkKLSNkZWZpbmUgSVhHQkVfUkFMKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwMCArICgoX2kpICogOCkpIDogKDB4MEEyMDAgKyAoKF9pKSAqIDgpKSkKLSNkZWZpbmUgSVhHQkVfUkFIKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwNCArICgoX2kpICogOCkpIDogKDB4MEEyMDQgKyAoKF9pKSAqIDgpKSkKKyNkZWZpbmUgSVhHQkVfUkFMKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwMCArICgoX2kpICogOCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBMjAwICsgKChfaSkgKiA4KSkpCisjZGVmaW5lIElYR0JFX1JBSChfaSkgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDQgKyAoKF9pKSAqIDgpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQTIwNCArICgoX2kpICogOCkpKQorI2RlZmluZSBJWEdCRV9NUFNBUl9MTyhfaSkgKDB4MEE2MDAgKyAoKF9pKSAqIDgpKQorI2RlZmluZSBJWEdCRV9NUFNBUl9ISShfaSkgKDB4MEE2MDQgKyAoKF9pKSAqIDgpKQogLyogUGFja2V0IHNwbGl0IHJlY2VpdmUgdHlwZSAqLwotI2RlZmluZSBJWEdCRV9QU1JUWVBFKF9pKSAgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0ODAgKyAoKF9pKSAqIDQpKSA6ICgweDBFQTAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX1BTUlRZUEUoX2kpICAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQ4MCArICgoX2kpICogNCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEVBMDAgKyAoKF9pKSAqIDQpKSkKIC8qIGFycmF5IG9mIDQwOTYgMS1iaXQgdmxhbiBmaWx0ZXJzICovCiAjZGVmaW5lIElYR0JFX1ZGVEEoX2kpICAoMHgwQTAwMCArICgoX2kpICogNCkpCiAvKmFycmF5IG9mIDQwOTYgNC1iaXQgdmxhbiB2bWRxIGluZGljZXMgKi8KQEAgLTE0MSw2ICsyMDAsMjggQEAKICNkZWZpbmUgSVhHQkVfVkxOQ1RSTCAgIDB4MDUwODgKICNkZWZpbmUgSVhHQkVfTUNTVENUUkwgIDB4MDUwOTAKICNkZWZpbmUgSVhHQkVfTVJRQyAgICAgIDB4MDU4MTgKKyNkZWZpbmUgSVhHQkVfU0FRRihfaSkgICgweDBFMDAwICsgKChfaSkgKiA0KSkgLyogU291cmNlIEFkZHJlc3MgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0RBUUYoX2kpICAoMHgwRTIwMCArICgoX2kpICogNCkpIC8qIERlc3QuIEFkZHJlc3MgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX1NEUFFGKF9pKSAoMHgwRTQwMCArICgoX2kpICogNCkpIC8qIFNyYyBEZXN0LiBBZGRyIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9GVFFGKF9pKSAgKDB4MEU2MDAgKyAoKF9pKSAqIDQpKSAvKiBGaXZlIFR1cGxlIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9FVFFGKF9pKSAgKDB4MDUxMjggKyAoKF9pKSAqIDQpKSAvKiBFVHlwZSBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfRVRRUyhfaSkgICgweDBFQzAwICsgKChfaSkgKiA0KSkgLyogRVR5cGUgUXVldWUgU2VsZWN0ICovCisjZGVmaW5lIElYR0JFX1NZTlFGICAgICAweDBFQzMwIC8qIFNZTiBQYWNrZXQgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX1JRVEMgICAgICAweDBFQzcwCisjZGVmaW5lIElYR0JFX01UUUMgICAgICAweDA4MTIwCisjZGVmaW5lIElYR0JFX1ZMVkYoX2kpICAoMHgwRjEwMCArICgoX2kpICogNCkpICAvKiA2NCBvZiB0aGVzZSAoMC02MykgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRkIoX2kpICgweDBGMjAwICsgKChfaSkgKiA0KSkgIC8qIDEyOCBvZiB0aGVzZSAoMC0xMjcpICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTCAgICAweDA1MUIwCisjZGVmaW5lIElYR0JFX1ZGUkUoX2kpICAoMHgwNTFFMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZGVEUoX2kpICAoMHgwODExMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1FERSAgICAgICAweDJGMDQKKyNkZWZpbmUgSVhHQkVfVk1PTFIoX2kpICgweDBGMDAwICsgKChfaSkgKiA0KSkgLyogNjQgdG90YWwgKi8KKyNkZWZpbmUgSVhHQkVfVVRBKF9pKSAgICgweDBGNDAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1SQ1RMKF9pKSAgICAgICAgKDB4MEY2MDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTVJWTEFOKF9pKSAgICAgICAoMHgwRjYxMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUlZNKF9pKSAgICAgICAgICgweDBGNjMwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfTDM0VF9JTUlSKF9pKSAgICAgICgweDBFODAwICsgKChfaSkgKiA0KSkgLyoxMjggb2YgdGhlc2UgKDAtMTI3KSovCisjZGVmaW5lIElYR0JFX0xMSVRIUkVTSCAweDBFQzkwCiAjZGVmaW5lIElYR0JFX0lNSVIoX2kpICAoMHgwNUE4MCArICgoX2kpICogNCkpICAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0lNSVJFWFQoX2kpICAgICAgICgweDA1QUEwICsgKChfaSkgKiA0KSkgIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfSU1JUlZQICAgIDB4MDVBQzAKQEAgLTE0OCw3ICsyMjksNiBAQAogI2RlZmluZSBJWEdCRV9SRVRBKF9pKSAgKDB4MDVDMDAgKyAoKF9pKSAqIDQpKSAgLyogMzIgb2YgdGhlc2UgKDAtMzEpICovCiAjZGVmaW5lIElYR0JFX1JTU1JLKF9pKSAoMHgwNUM4MCArICgoX2kpICogNCkpICAvKiAxMCBvZiB0aGVzZSAoMC05KSAqLwogCi0KIC8qIFRyYW5zbWl0IERNQSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfVERCQUwoX2kpICgweDA2MDAwICsgKChfaSkgKiAweDQwKSkgLyogMzIgb2YgdGhlc2UgKDAtMzEpKi8KICNkZWZpbmUgSVhHQkVfVERCQUgoX2kpICgweDA2MDA0ICsgKChfaSkgKiAweDQwKSkKQEAgLTE2MCw3ICsyNDAsMjAgQEAKICNkZWZpbmUgSVhHQkVfVERXQkFIKF9pKSAoMHgwNjAzQyArICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIElYR0JFX0RUWENUTCAgICAweDA3RTAwCiAKKyNkZWZpbmUgSVhHQkVfRE1BVFhDVEwgIDB4MDRBODAKKyNkZWZpbmUgSVhHQkVfRFRYTVhTWlJRICAgICAweDA4MTAwCisjZGVmaW5lIElYR0JFX0RUWFRDUEZMR0wgICAgMHgwNEE4OAorI2RlZmluZSBJWEdCRV9EVFhUQ1BGTEdIICAgIDB4MDRBOEMKKyNkZWZpbmUgSVhHQkVfTEJEUlBFTiAgICAgICAweDBDQTAwCisjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0goX2kpICgweDA0OTUwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAwIC0gNyAqLworCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX1RFICAgICAgIDB4MSAvKiBUcmFuc21pdCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfTlMgICAgICAgMHgyIC8qIE5vIFNub29wIExTTyBoZHIgYnVmZmVyICovCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX0dEViAgICAgIDB4OCAvKiBHbG9iYWwgRG91YmxlIFZMQU4gKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfVlRfU0hJRlQgMTYgIC8qIFZMQU4gRXRoZXJUeXBlICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkwoX2kpICAgICgweDA3MjAwICsgKChfaSkgKiA0KSkgLyogMTYgb2YgdGhlc2UgKDAtMTUpICovCisvKiBUeCBEQ0EgQ29udHJvbCByZWdpc3RlciA6IDEyOCBvZiB0aGVzZSAoMC0xMjcpICovCisjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfODI1OTkoX2kpICAoMHgwNjAwQyArICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIElYR0JFX1RJUEcgICAgICAweDBDQjAwCiAjZGVmaW5lIElYR0JFX1RYUEJTSVpFKF9pKSAgICAgICgweDBDQzAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9NTkdUWE1BUCAgMHgwQ0QxMApAQCAtMTc3LDkgKzI3MCw2OSBAQAogCiAjZGVmaW5lIElYR0JFX1dVUEwgICAgICAweDA1OTAwCiAjZGVmaW5lIElYR0JFX1dVUE0gICAgICAweDA1QTAwIC8qIHdha2UgdXAgcGt0IG1lbW9yeSAweDVBMDAtMHg1QTdDICovCi0jZGVmaW5lIElYR0JFX0ZIRlQgICAgICAweDA5MDAwIC8qIEZsZXggaG9zdCBmaWx0ZXIgdGFibGUgOTAwMC05M0ZDICovCisjZGVmaW5lIElYR0JFX0ZIRlQoX24pICAgICAoMHgwOTAwMCArIChfbiAqIDB4MTAwKSkgLyogRmxleCBob3N0IGZpbHRlciB0YWJsZSAqLworI2RlZmluZSBJWEdCRV9GSEZUX0VYVChfbikgKDB4MDk4MDAgKyAoX24gKiAweDEwMCkpIC8qIEV4dCBGbGV4aWJsZSBIb3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRmlsdGVyIFRhYmxlICovCiAKLS8qIE11c2ljIHJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9GTEVYSUJMRV9GSUxURVJfQ09VTlRfTUFYICAgICAgICAgNAorI2RlZmluZSBJWEdCRV9FWFRfRkxFWElCTEVfRklMVEVSX0NPVU5UX01BWCAgICAgMgorCisvKiBFYWNoIEZsZXhpYmxlIEZpbHRlciBpcyBhdCBtb3N0IDEyOCAoMHg4MCkgYnl0ZXMgaW4gbGVuZ3RoICovCisjZGVmaW5lIElYR0JFX0ZMRVhJQkxFX0ZJTFRFUl9TSVpFX01BWCAgMTI4CisjZGVmaW5lIElYR0JFX0ZIRlRfTEVOR1RIX09GRlNFVCAgICAgICAgMHhGQyAgLyogTGVuZ3RoIGJ5dGUgaW4gRkhGVCAqLworI2RlZmluZSBJWEdCRV9GSEZUX0xFTkdUSF9NQVNLICAgICAgICAgIDB4MEZGIC8qIExlbmd0aCBpbiBsb3dlciBieXRlICovCisKKy8qIERlZmluaXRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50IGFuZCB3YWtldXAgcmVnaXN0ZXJzICovCisvKiBXYWtlIFVwIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfV1VDX1BNRV9FTiAgICAgMHgwMDAwMDAwMiAvKiBQTUUgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVQ19QTUVfU1RBVFVTIDB4MDAwMDAwMDQgLyogUE1FIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9XVUNfQURWRDNXVUMgICAweDAwMDAwMDEwIC8qIEQzQ29sZCB3YWtlIHVwIGNhcC4gZW5hYmxlKi8KKworLyogV2FrZSBVcCBGaWx0ZXIgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9XVUZDX0xOS0MgMHgwMDAwMDAwMSAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX01BRyAgMHgwMDAwMDAwMiAvKiBNYWdpYyBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0VYICAgMHgwMDAwMDAwNCAvKiBEaXJlY3RlZCBFeGFjdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfTUMgICAweDAwMDAwMDA4IC8qIERpcmVjdGVkIE11bHRpY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfQkMgICAweDAwMDAwMDEwIC8qIEJyb2FkY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfQVJQICAweDAwMDAwMDIwIC8qIEFSUCBSZXF1ZXN0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfSVBWNCAweDAwMDAwMDQwIC8qIERpcmVjdGVkIElQdjQgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19JUFY2IDB4MDAwMDAwODAgLyogRGlyZWN0ZWQgSVB2NiBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX01ORyAgMHgwMDAwMDEwMCAvKiBEaXJlY3RlZCBNZ210IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisKKyNkZWZpbmUgSVhHQkVfV1VGQ19JR05PUkVfVENPICAgMHgwMDAwODAwMCAvKiBJZ25vcmUgV2FrZU9uIFRDTyBwYWNrZXRzICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMCAweDAwMDEwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDEgMHgwMDAyMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgyIDB4MDAwNDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDIgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMyAweDAwMDgwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAzIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDQgMHgwMDEwMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgNCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFg1IDB4MDAyMDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDUgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYX0ZJTFRFUlMgICAgIDB4MDAwRjAwMDAgLyogTWFzayBmb3IgNCBmbGV4IGZpbHRlcnMgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19FWFRfRkxYX0ZJTFRFUlMgMHgwMDMwMDAwMCAvKiBNYXNrIGZvciBFeHQuIGZsZXggZmlsdGVycyAqLworI2RlZmluZSBJWEdCRV9XVUZDX0FMTF9GSUxURVJTICAgICAweDAwM0YwMEZGIC8qIE1hc2sgZm9yIGFsbCA2IHdha2V1cCBmaWx0ZXJzKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFhfT0ZGU0VUICAgICAgMTYgLyogT2Zmc2V0IHRvIHRoZSBGbGV4aWJsZSBGaWx0ZXJzIGJpdHMgKi8KKworLyogV2FrZSBVcCBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfV1VTX0xOS0MgIElYR0JFX1dVRkNfTE5LQworI2RlZmluZSBJWEdCRV9XVVNfTUFHICAgSVhHQkVfV1VGQ19NQUcKKyNkZWZpbmUgSVhHQkVfV1VTX0VYICAgIElYR0JFX1dVRkNfRVgKKyNkZWZpbmUgSVhHQkVfV1VTX01DICAgIElYR0JFX1dVRkNfTUMKKyNkZWZpbmUgSVhHQkVfV1VTX0JDICAgIElYR0JFX1dVRkNfQkMKKyNkZWZpbmUgSVhHQkVfV1VTX0FSUCAgIElYR0JFX1dVRkNfQVJQCisjZGVmaW5lIElYR0JFX1dVU19JUFY0ICBJWEdCRV9XVUZDX0lQVjQKKyNkZWZpbmUgSVhHQkVfV1VTX0lQVjYgIElYR0JFX1dVRkNfSVBWNgorI2RlZmluZSBJWEdCRV9XVVNfTU5HICAgSVhHQkVfV1VGQ19NTkcKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDAgIElYR0JFX1dVRkNfRkxYMAorI2RlZmluZSBJWEdCRV9XVVNfRkxYMSAgSVhHQkVfV1VGQ19GTFgxCisjZGVmaW5lIElYR0JFX1dVU19GTFgyICBJWEdCRV9XVUZDX0ZMWDIKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDMgIElYR0JFX1dVRkNfRkxYMworI2RlZmluZSBJWEdCRV9XVVNfRkxYNCAgSVhHQkVfV1VGQ19GTFg0CisjZGVmaW5lIElYR0JFX1dVU19GTFg1ICBJWEdCRV9XVUZDX0ZMWDUKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWF9GSUxURVJTICBJWEdCRV9XVUZDX0ZMWF9GSUxURVJTCisKKy8qIFdha2UgVXAgUGFja2V0IExlbmd0aCAqLworI2RlZmluZSBJWEdCRV9XVVBMX0xFTkdUSF9NQVNLIDB4RkZGRgorCisvKiBEQ0IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JNQ1MgICAgICAweDAzRDAwCiAjZGVmaW5lIElYR0JFX0RQTUNTICAgICAweDA3RjQwCiAjZGVmaW5lIElYR0JFX1BEUE1DUyAgICAweDBDRDAwCkBAIC0xOTIsNiArMzQ1LDEyMiBAQAogI2RlZmluZSBJWEdCRV9URFBUMlRDU1IoX2kpICAgICAoMHgwQ0Q0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KIAogCisvKiBTZWN1cml0eSBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9TRUNUWENUUkwgICAgICAgICAweDA4ODAwCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVCAgICAgICAgIDB4MDg4MDQKKyNkZWZpbmUgSVhHQkVfU0VDVFhCVUZGQUYgICAgICAgMHgwODgwOAorI2RlZmluZSBJWEdCRV9TRUNUWE1JTklGRyAgICAgICAweDA4ODEwCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVCAgICAgICAgIDB4MDg4MDQKKyNkZWZpbmUgSVhHQkVfU0VDUlhDVFJMICAgICAgICAgMHgwOEQwMAorI2RlZmluZSBJWEdCRV9TRUNSWFNUQVQgICAgICAgICAweDA4RDA0CisKKy8qIFNlY3VyaXR5IEJpdCBGaWVsZHMgYW5kIE1hc2tzICovCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9TRUNUWF9ESVMgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfVFhfRElTICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NUT1JFX0ZPUldBUkQgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUX1NFQ1RYX1JEWSAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVF9FQ0NfVFhFUlIgICAgICAgMHgwMDAwMDAwMgorCisjZGVmaW5lIElYR0JFX1NFQ1JYQ1RSTF9TRUNSWF9ESVMgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNSWENUUkxfUlhfRElTICAgICAgICAgIDB4MDAwMDAwMDIKKworI2RlZmluZSBJWEdCRV9TRUNSWFNUQVRfU0VDUlhfUkRZICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfU0VDUlhTVEFUX0VDQ19SWEVSUiAgICAgICAweDAwMDAwMDAyCisKKy8qIExpbmtTZWMgKE1hY1NlYykgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0xTRUNUWENBUCAgICAgICAgIDB4MDhBMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQICAgICAgICAgMHgwOEYwMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMICAgICAgICAweDA4QTA0CisjZGVmaW5lIElYR0JFX0xTRUNUWFNDTCAgICAgICAgIDB4MDhBMDggLyogU0NJIExvdyAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhTQ0ggICAgICAgICAweDA4QTBDIC8qIFNDSSBIaWdoICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFNBICAgICAgICAgIDB4MDhBMTAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYUE4wICAgICAgICAgMHgwOEExNAorI2RlZmluZSBJWEdCRV9MU0VDVFhQTjEgICAgICAgICAweDA4QTE4CisjZGVmaW5lIElYR0JFX0xTRUNUWEtFWTAoX24pICAgICgweDA4QTFDICsgKDQgKiAoX24pKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhLRVkxKF9uKSAgICAoMHgwOEEyQyArICg0ICogKF9uKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTCAgICAgICAgMHgwOEYwNAorI2RlZmluZSBJWEdCRV9MU0VDUlhTQ0wgICAgICAgICAweDA4RjA4CisjZGVmaW5lIElYR0JFX0xTRUNSWFNDSCAgICAgICAgIDB4MDhGMEMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYU0EoX2kpICAgICAgKDB4MDhGMTAgKyAoNCAqIChfaSkpKSAvKiAyIG9mIHRoZXNlICgwLTEpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFBOKF9pKSAgICAgICgweDA4RjE4ICsgKDQgKiAoX2kpKSkgLyogMiBvZiB0aGVzZSAoMC0xKSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhLRVkoX24sIF9tKSAoMHgwOEYyMCArICgoMHgxMCAqIChfbikpICsgKDQgKiAoX20pKSkpCisjZGVmaW5lIElYR0JFX0xTRUNUWFVUICAgICAgICAgIDB4MDhBM0MgLyogT3V0UGt0c1VudGFnZ2VkICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFBLVEUgICAgICAgIDB4MDhBNDAgLyogT3V0UGt0c0VuY3J5cHRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhQS1RQICAgICAgICAweDA4QTQ0IC8qIE91dFBrdHNQcm90ZWN0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYT0NURSAgICAgICAgMHgwOEE0OCAvKiBPdXRPY3RldHNFbmNyeXB0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYT0NUUCAgICAgICAgMHgwOEE0QyAvKiBPdXRPY3RldHNQcm90ZWN0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVVQgICAgICAgICAgMHgwOEY0MCAvKiBJblBrdHNVbnRhZ2dlZC9JblBrdHNOb1RhZyAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhPQ1REICAgICAgICAweDA4RjQ0IC8qIEluT2N0ZXRzRGVjcnlwdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE9DVFYgICAgICAgIDB4MDhGNDggLyogSW5PY3RldHNWYWxpZGF0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQkFEICAgICAgICAgMHgwOEY0QyAvKiBJblBrdHNCYWRUYWcgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTk9TQ0kgICAgICAgMHgwOEY1MCAvKiBJblBrdHNOb1NjaSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVTlNDSSAgICAgICAweDA4RjU0IC8qIEluUGt0c1Vua25vd25TY2kgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVU5DSCAgICAgICAgMHgwOEY1OCAvKiBJblBrdHNVbmNoZWNrZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYREVMQVkgICAgICAgMHgwOEY1QyAvKiBJblBrdHNEZWxheWVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWExBVEUgICAgICAgIDB4MDhGNjAgLyogSW5Qa3RzTGF0ZSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhPSyhfbikgICAgICAoMHgwOEY2NCArICgweDA0ICogKF9uKSkpIC8qIEluUGt0c09rICovCisjZGVmaW5lIElYR0JFX0xTRUNSWElOVihfbikgICAgICgweDA4RjZDICsgKDB4MDQgKiAoX24pKSkgLyogSW5Qa3RzSW52YWxpZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhOVihfbikgICAgICAoMHgwOEY3NCArICgweDA0ICogKF9uKSkpIC8qIEluUGt0c05vdFZhbGlkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFVOU0EgICAgICAgIDB4MDhGN0MgLyogSW5Qa3RzVW51c2VkU2EgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTlVTQSAgICAgICAgMHgwOEY4MCAvKiBJblBrdHNOb3RVc2luZ1NhICovCisKKy8qIExpbmtTZWMgKE1hY1NlYykgQml0IEZpZWxkcyBhbmQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ0FQX1NVTV9NQVNLICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIElYR0JFX0xTRUNUWENBUF9TVU1fU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQX1NVTV9NQVNLICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIElYR0JFX0xTRUNSWENBUF9TVU1fU0hJRlQgICAgICAgMTYKKworI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0VOX01BU0sgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9ESVNBQkxFICAgICAgICAweDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BVVRIICAgICAgICAgICAweDEKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BVVRIX0VOQ1JZUFQgICAweDIKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BSVNDSSAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfUE5USFJTSF9NQVNLICAgMHhGRkZGRkYwMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX1JTVl9NQVNLICAgICAgIDB4MDAwMDAwRDgKKworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0VOX01BU0sgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9FTl9TSElGVCAgICAgICAyCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRElTQUJMRSAgICAgICAgMHgwCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfQ0hFQ0sgICAgICAgICAgMHgxCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfU1RSSUNUICAgICAgICAgMHgyCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRFJPUCAgICAgICAgICAgMHgzCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfUExTSCAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX1JQICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9SU1ZfTUFTSyAgICAgICAweEZGRkZGRjMzCisKKy8qIElwU2VjIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9JUFNUWElEWCAgICAgICAgICAweDA4OTAwCisjZGVmaW5lIElYR0JFX0lQU1RYU0FMVCAgICAgICAgIDB4MDg5MDQKKyNkZWZpbmUgSVhHQkVfSVBTVFhLRVkoX2kpICAgICAgKDB4MDg5MDggKyAoNCAqIChfaSkpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0lQU1JYSURYICAgICAgICAgIDB4MDhFMDAKKyNkZWZpbmUgSVhHQkVfSVBTUlhJUEFERFIoX2kpICAgKDB4MDhFMDQgKyAoNCAqIChfaSkpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0lQU1JYU1BJICAgICAgICAgIDB4MDhFMTQKKyNkZWZpbmUgSVhHQkVfSVBTUlhJUElEWCAgICAgICAgMHgwOEUxOAorI2RlZmluZSBJWEdCRV9JUFNSWEtFWShfaSkgICAgICAoMHgwOEUxQyArICg0ICogKF9pKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfSVBTUlhTQUxUICAgICAgICAgMHgwOEUyQworI2RlZmluZSBJWEdCRV9JUFNSWE1PRCAgICAgICAgICAweDA4RTMwCisKKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NUT1JFX0ZPUldBUkRfRU5BQkxFICAgIDB4NAorCisvKiBEQ0IgcmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1JUUlBDUyAgICAgIDB4MDI0MzAKKyNkZWZpbmUgSVhHQkVfUlRURENTICAgICAgMHgwNDkwMAorI2RlZmluZSBJWEdCRV9SVFRQQ1MgICAgICAweDBDRDAwCisjZGVmaW5lIElYR0JFX1JUUlVQMlRDICAgIDB4MDMwMjAKKyNkZWZpbmUgSVhHQkVfUlRUVVAyVEMgICAgMHgwQzgwMAorI2RlZmluZSBJWEdCRV9SVFJQVDRDKF9pKSAoMHgwMjE0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0UyhfaSkgKDB4MDIxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVERUMkMoX2kpICgweDA0OTEwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFREVDJTKF9pKSAoMHgwNDkzMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUFQyQyhfaSkgKDB4MENEMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVFBUMlMoX2kpICgweDBDRDQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFREUVNFTCAgICAweDA0OTA0CisjZGVmaW5lIElYR0JFX1JUVERUMUMgICAgIDB4MDQ5MDgKKyNkZWZpbmUgSVhHQkVfUlRURFQxUyAgICAgMHgwNDkwQworI2RlZmluZSBJWEdCRV9SVFREVEVDQyAgICAweDA0OTkwCisjZGVmaW5lIElYR0JFX1JUVERURUNDX05PX0JDTiAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVhHQkVfUlRUQkNOUkMgICAgMHgwNDk4NAogCiAvKiBTdGF0cyByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfQ1JDRVJSUyAgIDB4MDQwMDAKQEAgLTIwNiw2ICs0NzUsMTEgQEAKICNkZWZpbmUgSVhHQkVfTFhPTlJYQyAgIDB4MENGNjAKICNkZWZpbmUgSVhHQkVfTFhPRkZUWEMgIDB4MDNGNjgKICNkZWZpbmUgSVhHQkVfTFhPRkZSWEMgIDB4MENGNjgKKyNkZWZpbmUgSVhHQkVfTFhPTlJYQ05UIDB4MDQxQTQKKyNkZWZpbmUgSVhHQkVfTFhPRkZSWENOVCAweDA0MUE4CisjZGVmaW5lIElYR0JFX1BYT05SWENOVChfaSkgICAgICgweDA0MTQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9QWE9GRlJYQ05UKF9pKSAgICAoMHgwNDE2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUFhPTjJPRkZDTlQoX2kpICAgKDB4MDMyNDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1BYT05UWEMoX2kpICAgICAgICgweDAzRjAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAzRjAwLTNGMUMqLwogI2RlZmluZSBJWEdCRV9QWE9OUlhDKF9pKSAgICAgICAoMHgwQ0YwMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQ0YwMC1DRjFDKi8KICNkZWZpbmUgSVhHQkVfUFhPRkZUWEMoX2kpICAgICAgKDB4MDNGMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDNGMjAtM0YzQyovCkBAIC0yNDUsMTQgKzUxOSwyMCBAQAogI2RlZmluZSBJWEdCRV9NUFRDICAgICAgMHgwNDBGMAogI2RlZmluZSBJWEdCRV9CUFRDICAgICAgMHgwNDBGNAogI2RlZmluZSBJWEdCRV9YRUMgICAgICAgMHgwNDEyMAorI2RlZmluZSBJWEdCRV9TU1ZQQyAgICAgMHgwODc4MAogCi0jZGVmaW5lIElYR0JFX1JRU01SKF9pKSAoMHgwMjMwMCArICgoX2kpICogNCkpIC8qIDE2IG9mIHRoZXNlICovCi0jZGVmaW5lIElYR0JFX1RRU01SKF9pKSAoKChfaSkgPD0gNykgPyAoMHgwNzMwMCArICgoX2kpICogNCkpIDogKDB4MDg2MDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfUlFTTVIoX2kpICgweDAyMzAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVFFTTVIoX2kpICgoKF9pKSA8PSA3KSA/ICgweDA3MzAwICsgKChfaSkgKiA0KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDg2MDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfVFFTTShfaSkgICgweDA4NjAwICsgKChfaSkgKiA0KSkKIAogI2RlZmluZSBJWEdCRV9RUFJDKF9pKSAoMHgwMTAzMCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1FQVEMoX2kpICgweDA2MDMwICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUUJSQyhfaSkgKDB4MDEwMzQgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9RQlRDKF9pKSAoMHgwNjAzNCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FQUkRDKF9pKSAoMHgwMTQzMCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FCVENfTChfaSkgKDB4MDg3MDAgKyAoKF9pKSAqIDB4OCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FCVENfSChfaSkgKDB4MDg3MDQgKyAoKF9pKSAqIDB4OCkpIC8qIDE2IG9mIHRoZXNlICovCiAKIC8qIE1hbmFnZW1lbnQgKi8KICNkZWZpbmUgSVhHQkVfTUFWVFYoX2kpICgweDA1MDEwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwpAQCAtMjY1LDYgKzU0NSw5IEBACiAjZGVmaW5lIElYR0JFX01NQUwoX2kpICAoMHgwNTkxMCArICgoX2kpICogOCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfTU1BSChfaSkgICgweDA1OTE0ICsgKChfaSkgKiA4KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLwogI2RlZmluZSBJWEdCRV9GVEZUICAgICAgMHgwOTQwMCAvKiAweDk0MDAtMHg5N0ZDICovCisjZGVmaW5lIElYR0JFX01FVEYoX2kpICAoMHgwNTE5MCArICgoX2kpICogNCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfTURFRl9FWFQoX2kpICgweDA1MTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9MU1dGVyAgICAgMHgxNTAxNAogCiAvKiBBUkMgU3Vic3lzdGVtIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9ISUNSICAgICAgMHgxNUYwMApAQCAtMjk3LDE2ICs1ODAsNjUgQEAKICNkZWZpbmUgSVhHQkVfRENBX0lEICAgIDB4MTEwNzAKICNkZWZpbmUgSVhHQkVfRENBX0NUUkwgIDB4MTEwNzQKIAorLyogUENJZSByZWdpc3RlcnMgODI1OTktc3BlY2lmaWMgKi8KKyNkZWZpbmUgSVhHQkVfR0NSX0VYVCAgICAgICAgICAgMHgxMTA1MAorI2RlZmluZSBJWEdCRV9HU0NMXzVfODI1OTkgICAgICAweDExMDMwCisjZGVmaW5lIElYR0JFX0dTQ0xfNl84MjU5OSAgICAgIDB4MTEwMzQKKyNkZWZpbmUgSVhHQkVfR1NDTF83XzgyNTk5ICAgICAgMHgxMTAzOAorI2RlZmluZSBJWEdCRV9HU0NMXzhfODI1OTkgICAgICAweDExMDNDCisjZGVmaW5lIElYR0JFX1BIWUFEUl84MjU5OSAgICAgIDB4MTEwNDAKKyNkZWZpbmUgSVhHQkVfUEhZREFUXzgyNTk5ICAgICAgMHgxMTA0NAorI2RlZmluZSBJWEdCRV9QSFlDVExfODI1OTkgICAgICAweDExMDQ4CisjZGVmaW5lIElYR0JFX1BCQUNMUl84MjU5OSAgICAgIDB4MTEwNjgKKyNkZWZpbmUgSVhHQkVfQ0lBQV84MjU5OSAgICAgICAgMHgxMTA4OAorI2RlZmluZSBJWEdCRV9DSUFEXzgyNTk5ICAgICAgICAweDExMDhDCisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18wXzgyNTk5IDB4MTEwOTAKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzFfODI1OTkgMHgxMTA5NAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMl84MjU5OSAweDExMDk4CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18zXzgyNTk5IDB4MTEwOUMKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzRfODI1OTkgMHgxMTBBMAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNV84MjU5OSAweDExMEE0CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR182XzgyNTk5IDB4MTEwQTgKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzdfODI1OTkgMHgxMTBDMAorI2RlZmluZSBJWEdCRV9JTlRSUFRfQ1NSXzgyNTk5ICAweDExMEIwCisjZGVmaW5lIElYR0JFX0lOVFJQVF9NQVNLXzgyNTk5IDB4MTEwQjgKKyNkZWZpbmUgSVhHQkVfQ0RRX01CUl84MjU5OSAgICAgMHgxMTBCNAorI2RlZmluZSBJWEdCRV9NSVNDX1JFR184MjU5OSAgICAweDExMEYwCisjZGVmaW5lIElYR0JFX0VDQ19DVFJMXzBfODI1OTkgIDB4MTExMDAKKyNkZWZpbmUgSVhHQkVfRUNDX0NUUkxfMV84MjU5OSAgMHgxMTEwNAorI2RlZmluZSBJWEdCRV9FQ0NfU1RBVFVTXzgyNTk5ICAweDExMEUwCisjZGVmaW5lIElYR0JFX0JBUl9DVFJMXzgyNTk5ICAgIDB4MTEwRjQKKworLyogVGltZSBTeW5jIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9UU1lOQ1JYQ1RMIDB4MDUxODggLyogUnggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9UU1lOQ1RYQ1RMIDB4MDhDMDAgLyogVHggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9SWFNUTVBMICAgIDB4MDUxRTggLyogUnggdGltZXN0YW1wIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU1RNUEggICAgMHgwNTFBNCAvKiBSeCB0aW1lc3RhbXAgSGlnaCAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU0FUUkwgICAgMHgwNTFBMCAvKiBSeCB0aW1lc3RhbXAgYXR0cmlidXRlIGxvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU0FUUkggICAgMHgwNTFBOCAvKiBSeCB0aW1lc3RhbXAgYXR0cmlidXRlIGhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9SWE1UUkwgICAgIDB4MDUxMjAgLyogUlggbWVzc2FnZSB0eXBlIHJlZ2lzdGVyIGxvdyAtIFJXICovCisjZGVmaW5lIElYR0JFX1RYU1RNUEwgICAgMHgwOEMwNCAvKiBUeCB0aW1lc3RhbXAgdmFsdWUgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfVFhTVE1QSCAgICAweDA4QzA4IC8qIFR4IHRpbWVzdGFtcCB2YWx1ZSBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfU1lTVElNTCAgICAweDA4QzBDIC8qIFN5c3RlbSB0aW1lIHJlZ2lzdGVyIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1NZU1RJTUggICAgMHgwOEMxMCAvKiBTeXN0ZW0gdGltZSByZWdpc3RlciBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfVElNSU5DQSAgICAweDA4QzE0IC8qIEluY3JlbWVudCBhdHRyaWJ1dGVzIHJlZ2lzdGVyIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfUlhVRFAgICAgICAweDA4QzFDIC8qIFRpbWUgU3luYyBSeCBVRFAgUG9ydCAtIFJXICovCisKIC8qIERpYWdub3N0aWMgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JEU1RBVENUTCAgIDB4MDJDMjAKICNkZWZpbmUgSVhHQkVfUkRTVEFUKF9pKSAgKDB4MDJDMDAgKyAoKF9pKSAqIDQpKSAvKiAweDAyQzAwLTB4MDJDMUMgKi8KICNkZWZpbmUgSVhHQkVfUkRITVBOICAgICAgMHgwMkYwOAogI2RlZmluZSBJWEdCRV9SSUNfRFcoX2kpICAoMHgwMkYxMCArICgoX2kpICogNCkpCiAjZGVmaW5lIElYR0JFX1JEUFJPQkUgICAgIDB4MDJGMjAKKyNkZWZpbmUgSVhHQkVfUkRNQU0gICAgICAgMHgwMkYzMAorI2RlZmluZSBJWEdCRV9SRE1BRCAgICAgICAweDAyRjM0CiAjZGVmaW5lIElYR0JFX1REU1RBVENUTCAgIDB4MDdDMjAKICNkZWZpbmUgSVhHQkVfVERTVEFUKF9pKSAgKDB4MDdDMDAgKyAoKF9pKSAqIDQpKSAvKiAweDA3QzAwIC0gMHgwN0MxQyAqLwogI2RlZmluZSBJWEdCRV9UREhNUE4gICAgICAweDA3RjA4CisjZGVmaW5lIElYR0JFX1RESE1QTjIgICAgIDB4MDgyRkMKKyNkZWZpbmUgSVhHQkVfVFhERVNDSUMgICAgMHgwODJDQwogI2RlZmluZSBJWEdCRV9USUNfRFcoX2kpICAoMHgwN0YxMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1RJQ19EVzIoX2kpICgweDA4MkIwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgSVhHQkVfVERQUk9CRSAgICAgMHgwN0YyMAogI2RlZmluZSBJWEdCRV9UWEJVRkNUUkwgICAweDBDNjAwCiAjZGVmaW5lIElYR0JFX1RYQlVGREFUQTAgIDB4MEM2MTAKQEAgLTMzNCw2ICs2NjYsOCBAQAogI2RlZmluZSBJWEdCRV9UWERBVEFSRFBUUihfaSkgICAoMHgwQzcyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzcyMC1DNzJDKi8KICNkZWZpbmUgSVhHQkVfVFhERVNDUkRQVFIoX2kpICAgKDB4MEM3MzAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEM3MzAtQzczQyovCiAjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwgMHgxMTA2QworI2RlZmluZSBJWEdCRV9QQ0lFRUNDQ1RMMCAweDExMTAwCisjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwxIDB4MTExMDQKICNkZWZpbmUgSVhHQkVfUEJUWEVDQyAgIDB4MEMzMDAKICNkZWZpbmUgSVhHQkVfUEJSWEVDQyAgIDB4MDMzMDAKICNkZWZpbmUgSVhHQkVfR0hFQ0NSICAgIDB4MTEwQjAKQEAgLTM1OSwyNCArNjkzLDYxIEBACiAjZGVmaW5lIElYR0JFX01TUldEICAgICAweDA0MjYwCiAjZGVmaW5lIElYR0JFX01MQUREICAgICAweDA0MjY0CiAjZGVmaW5lIElYR0JFX01IQUREICAgICAweDA0MjY4CisjZGVmaW5lIElYR0JFX01BWEZSUyAgICAweDA0MjY4CiAjZGVmaW5lIElYR0JFX1RSRUcgICAgICAweDA0MjZDCiAjZGVmaW5lIElYR0JFX1BDU1MxICAgICAweDA0Mjg4CiAjZGVmaW5lIElYR0JFX1BDU1MyICAgICAweDA0MjhDCiAjZGVmaW5lIElYR0JFX1hQQ1NTICAgICAweDA0MjkwCisjZGVmaW5lIElYR0JFX01GTENOICAgICAweDA0Mjk0CiAjZGVmaW5lIElYR0JFX1NFUkRFU0MgICAweDA0Mjk4CiAjZGVmaW5lIElYR0JFX01BQ1MgICAgICAweDA0MjlDCiAjZGVmaW5lIElYR0JFX0FVVE9DICAgICAweDA0MkEwCiAjZGVmaW5lIElYR0JFX0xJTktTICAgICAweDA0MkE0CisjZGVmaW5lIElYR0JFX0xJTktTMiAgICAweDA0MzI0CiAjZGVmaW5lIElYR0JFX0FVVE9DMiAgICAweDA0MkE4CiAjZGVmaW5lIElYR0JFX0FVVE9DMyAgICAweDA0MkFDCiAjZGVmaW5lIElYR0JFX0FOTFAxICAgICAweDA0MkIwCiAjZGVmaW5lIElYR0JFX0FOTFAyICAgICAweDA0MkI0CiAjZGVmaW5lIElYR0JFX0FUTEFTQ1RMICAweDA0ODAwCisjZGVmaW5lIElYR0JFX01NTkdDICAgICAweDA0MkQwCisjZGVmaW5lIElYR0JFX0FOTFBOUDEgICAweDA0MkQ0CisjZGVmaW5lIElYR0JFX0FOTFBOUDIgICAweDA0MkQ4CisjZGVmaW5lIElYR0JFX0tSUENTRkMgICAweDA0MkUwCisjZGVmaW5lIElYR0JFX0tSUENTUyAgICAweDA0MkU0CisjZGVmaW5lIElYR0JFX0ZFQ1MxICAgICAweDA0MkU4CisjZGVmaW5lIElYR0JFX0ZFQ1MyICAgICAweDA0MkVDCisjZGVmaW5lIElYR0JFX1NNQURBUkNUTCAweDE0RjEwCisjZGVmaW5lIElYR0JFX01QVkMgICAgICAweDA0MzE4CisjZGVmaW5lIElYR0JFX1NHTUlJQyAgICAweDA0MzE0CisKKy8qIE9tZXIgQ09SRUNUTCAqLworI2RlZmluZSBJWEdCRV9DT1JFQ1RMICAgICAgICAgICAweDAxNEYwMAorLyogQkFSQ1RSTCAqLworI2RlZmluZSBJWEdCRV9CQVJDVFJMICAgICAgICAgICAweDExMEY0CisjZGVmaW5lIElYR0JFX0JBUkNUUkxfRkxTSVpFICAgIDB4MDcwMAorI2RlZmluZSBJWEdCRV9CQVJDVFJMX0NTUlNJWkUgICAweDIwMDAKIAogLyogUkRSWENUTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9SRE1UU18xXzIgICAgIDB4MDAwMDAwMDAgLyogUnggRGVzYyBNaW4gVGhyZXNob2xkIFNpemUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9DUkNTVFJJUCAgICAgIDB4MDAwMDAwMDIgLyogQ1JDIFN0cmlwICovCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfTVZNRU4gICAgICAgICAweDAwMDAwMDIwCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfRE1BSURPTkUgICAgICAweDAwMDAwMDA4IC8qIERNQSBpbml0IGN5Y2xlIGRvbmUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9BR0dESVMgICAgICAgIDB4MDAwMTAwMDAgLyogQWdncmVnYXRpb24gZGlzYWJsZSAqLworCisvKiBSUVRDIEJpdCBNYXNrcyBhbmQgU2hpZnRzICovCisjZGVmaW5lIElYR0JFX1JRVENfU0hJRlRfVEMoX2kpICAgICAoKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX1JRVENfVEMwX01BU0sgICAgICAgICAoMHg3IDw8IDApCisjZGVmaW5lIElYR0JFX1JRVENfVEMxX01BU0sgICAgICAgICAoMHg3IDw8IDQpCisjZGVmaW5lIElYR0JFX1JRVENfVEMyX01BU0sgICAgICAgICAoMHg3IDw8IDgpCisjZGVmaW5lIElYR0JFX1JRVENfVEMzX01BU0sgICAgICAgICAoMHg3IDw8IDEyKQorI2RlZmluZSBJWEdCRV9SUVRDX1RDNF9NQVNLICAgICAgICAgKDB4NyA8PCAxNikKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzVfTUFTSyAgICAgICAgICgweDcgPDwgMjApCisjZGVmaW5lIElYR0JFX1JRVENfVEM2X01BU0sgICAgICAgICAoMHg3IDw8IDI0KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDN19NQVNLICAgICAgICAgKDB4NyA8PCAyOCkKKworLyogUFNSVFlQRS5SUVBMIEJpdCBtYXNrcyBhbmQgc2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9SUVBMX01BU0sgICAgIDB4NworI2RlZmluZSBJWEdCRV9QU1JUWVBFX1JRUExfU0hJRlQgICAgMjkKIAogLyogQ1RSTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTF9HSU9fRElTICAgICAgMHgwMDAwMDAwNCAvKiBHbG9iYWwgSU8gTWFzdGVyIERpc2FibGUgYml0ICovCkBAIC0zOTEsNiArNzYyLDcgQEAKICNkZWZpbmUgSVhHQkVfTUhBRERfTUZTX1NISUZUICAgMTYKIAogLyogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfQ1RSTF9FWFRfUEZSU1REICAgMHgwMDAwNDAwMCAvKiBQaHlzaWNhbCBGdW5jdGlvbiBSZXNldCBEb25lICovCiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUX05TX0RJUyAgIDB4MDAwMTAwMDAgLyogTm8gU25vb3AgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9ST19ESVMgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9EUlZfTE9BRCAweDEwMDAwMDAwIC8qIERyaXZlciBsb2FkZWQgYml0IGZvciBGVyAqLwpAQCAtNDAzLDYgKzc3NSw4IEBACiAjZGVmaW5lIElYR0JFX0RDQV9DVFJMX0RDQV9NT0RFX0NCMiAweDAyIC8qIERDQSBNb2RlIENCMiAqLwogCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTSyAweDAwMDAwMDFGIC8qIFJ4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5ICAweEZGMDAwMDAwIC8qIFJ4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9TSElGVF84MjU5OSAyNCAvKiBSeCBDUFVJRCBTaGlmdCAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOICgxIDw8IDUpIC8qIERDQSBSeCBEZXNjIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0hFQURfRENBX0VOICgxIDw8IDYpIC8qIERDQSBSeCBEZXNjIGhlYWRlciBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9EQVRBX0RDQV9FTiAoMSA8PCA3KSAvKiBEQ0EgUnggRGVzYyBwYXlsb2FkIGVuYWJsZSAqLwpAQCAtNDExLDYgKzc4NSw4IEBACiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOICgxIDw8IDE1KSAvKiBEQ0EgUnggU3BsaXQgSGVhZGVyIFJPICovCiAKICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLIDB4MDAwMDAwMUYgLyogVHggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1OTkgIDB4RkYwMDAwMDAgLyogVHggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5IDI0IC8qIFR4IENQVUlEIFNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFR4IERlc2MgZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU4gKDEgPDwgMTEpIC8qIFR4IERlc2Mgd3JpdGViYWNrIFJPIGJpdCAqLwogI2RlZmluZSBJWEdCRV9EQ0FfTUFYX1FVRVVFU184MjU5OCAgIDE2IC8qIERDQSByZWdzIG9ubHkgb24gMTYgcXVldWVzICovCkBAIC00NTQsNiArODMwLDggQEAKICNkZWZpbmUgSVhHQkVfQVRMQVNfUEROX1RYXzFHX1FMX0FMTCAgICAweEYwCiAjZGVmaW5lIElYR0JFX0FUTEFTX1BETl9UWF9BTl9RTF9BTEwgICAgMHhGMAogCisvKiBPbWVyIGJpdCBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9DT1JFQ1RMX1dSSVRFX0NNRCAgICAgICAgIDB4MDAwMTAwMDAKIAogLyogRGV2aWNlIFR5cGUgZGVmaW5pdGlvbnMgZm9yIG5ldyBwcm90b2NvbCBNRElPIGNvbW1hbmRzICovCiAjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9ERVZfVFlQRSAgICAgICAgICAgICAgIDB4MQpAQCAtNDgxLDggKzg1OSwxMSBAQAogI2RlZmluZSBJWEdCRV9NRElPX1BIWV9TUEVFRF9BQklMSVRZICAgMHg0IC8qIFNwZWVkIEFiaWxpdHkgUmVnICovCiAjZGVmaW5lIElYR0JFX01ESU9fUEhZX1NQRUVEXzEwRyAgICAgICAweDAwMDEgLyogMTBHIGNhcGFibGUgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QSFlfU1BFRURfMUcgICAgICAgIDB4MDAxMCAvKiAxRyBjYXBhYmxlICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZX0VYVF9BQklMSVRZICAgICAgICAweEIgLyogRXh0IEFiaWxpdHkgUmVnICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZXzEwR0JBU0VUX0FCSUxJVFkgICAweDAwMDQgLyogMTBHQmFzZVQgY2FwYWJsZSAqLworI2RlZmluZSBJWEdCRV9NRElPX1BIWV8xMDAwQkFTRVRfQUJJTElUWSAgMHgwMDIwIC8qIDEwMDBCYXNlVCBjYXBhYmxlICovCiAKLSNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfQUREUiAgICAgMHhDMzBBIC8qIFBIWV9YUyBTREEvU0NMIEFkZHJlc3MgUmVnICovCisjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9TREFfU0NMX0FERFIgICAgIDB4QzMwQSAvKiBQSFlfWFMgU0RBL1NDTCBBZGRyIFJlZyAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9EQVRBICAgICAweEMzMEIgLyogUEhZX1hTIFNEQS9TQ0wgRGF0YSBSZWcgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfU1RBVCAgICAgMHhDMzBDIC8qIFBIWV9YUyBTREEvU0NMIFN0YXR1cyBSZWcgKi8KIApAQCAtNDk3LDcgKzg3OCw3IEBACiAjZGVmaW5lIElYR0JFX1BIWV9SRVZJU0lPTl9NQVNLICAgICAgICAweEZGRkZGRkYwCiAjZGVmaW5lIElYR0JFX01BWF9QSFlfQUREUiAgICAgICAgICAgICAzMgogCi0vKiBQSFkgSURzICovCisvKiBQSFkgSURzKi8KICNkZWZpbmUgVE4xMDEwX1BIWV9JRCAgICAweDAwQTE5NDEwCiAjZGVmaW5lIFROWF9GV19SRVYgICAgICAgMHhCCiAjZGVmaW5lIFFUMjAyMl9QSFlfSUQgICAgMHgwMDQzQTQwMApAQCAtNTE3LDE1ICs4OTgsMjIgQEAKICNkZWZpbmUgSVhHQkVfQ09OVFJPTF9OTCAgICAgICAgIDB4MDAwRgogI2RlZmluZSBJWEdCRV9DT05UUk9MX0VPTF9OTCAgICAgMHgwRkZGCiAjZGVmaW5lIElYR0JFX0NPTlRST0xfU09MX05MICAgICAweDAwMDAKKyNkZWZpbmUgSVhHQkVfUEhZX0VORk9SQ0VfSU5URUxfU0ZQX09GRlNFVCAweDAwMkMKKyNkZWZpbmUgSVhHQkVfUEhZX0FMTE9XX0FOWV9TRlAgICAgICAgICAgICAweDEKIAogLyogR2VuZXJhbCBwdXJwb3NlIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfU0RQMF9HUElFTiAgICAgICAgIDB4MDAwMDAwMDEgLyogU0RQMCAqLwogI2RlZmluZSBJWEdCRV9TRFAxX0dQSUVOICAgICAgICAgMHgwMDAwMDAwMiAvKiBTRFAxICovCisjZGVmaW5lIElYR0JFX1NEUDJfR1BJRU4gICAgICAgICAweDAwMDAwMDA0IC8qIFNEUDIgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9NU0lYX01PREUgICAgIDB4MDAwMDAwMTAgLyogTVNJLVggbW9kZSAqLwogI2RlZmluZSBJWEdCRV9HUElFX09DRCAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBPdGhlciBDbGVhciBEaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfRUlNRU4gICAgICAgICAweDAwMDAwMDQwIC8qIEltbWVkaWF0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfRUlBTUUgICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0dQSUVfUEJBX1NVUFBPUlQgICAweDgwMDAwMDAwCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFX01BU0sgICAweDAwMDBDMDAwIC8qIFZUIE1vZGUgTWFzayAqLworI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV8xNiAgICAgMHgwMDAwNDAwMCAvKiAxNiBWRnMgOCBxdWV1ZXMgcGVyIFZGICovCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFXzMyICAgICAweDAwMDA4MDAwIC8qIDMyIFZGcyA0IHF1ZXVlcyBwZXIgVkYgKi8KKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfNjQgICAgIDB4MDAwMEMwMDAgLyogNjQgVkZzIDIgcXVldWVzIHBlciBWRiAqLwogCiAvKiBUcmFuc21pdCBGbG93IENvbnRyb2wgc3RhdHVzICovCiAjZGVmaW5lIElYR0JFX1RGQ1NfVFhPRkYgICAgICAgICAweDAwMDAwMDAxCkBAIC01NjYsNiArOTU0LDIxIEBACiAjZGVmaW5lIElYR0JFX1ZNRF9DVExfVk1EUV9FTiAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBJWEdCRV9WTURfQ1RMX1ZNRFFfRklMVEVSIDB4MDAwMDAwMDIKIAorLyogVlRfQ1RMIGJpdG1hc2tzICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTF9ESVNfREVGUEwgIDB4MjAwMDAwMDAgLyogZGlzYWJsZSBkZWZhdWx0IHBvb2wgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMX1JFUExFTiAgICAgMHg0MDAwMDAwMCAvKiByZXBsaWNhdGlvbiBlbmFibGVkICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTF9WVF9FTkFCTEUgIDB4MDAwMDAwMDEgIC8qIEVuYWJsZSBWVCBNb2RlICovCisKKy8qIFZNT0xSIGJpdG1hc2tzICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX0FVUEUgICAgICAgIDB4MDEwMDAwMDAgLyogYWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfUk9NUEUgICAgICAgMHgwMjAwMDAwMCAvKiBhY2NlcHQgcGFja2V0cyBpbiBNVEEgdGJsICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX1JPUEUgICAgICAgIDB4MDQwMDAwMDAgLyogYWNjZXB0IHBhY2tldHMgaW4gVUMgdGJsICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX0JBTSAgICAgICAgIDB4MDgwMDAwMDAgLyogYWNjZXB0IGJyb2FkY2FzdCBwYWNrZXRzICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX01QRSAgICAgICAgIDB4MTAwMDAwMDAgLyogbXVsdGljYXN0IHByb21pc2N1b3VzICovCisKKy8qIFZGUkUgYml0bWFzayAqLworI2RlZmluZSBJWEdCRV9WRlJFX0VOQUJMRV9BTEwgICAweEZGRkZGRkZGCisKIC8qIFJESE1QTiBhbmQgVERITVBOIGJpdG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDQUREUiAgICAgICAweDAwN0ZGODAwCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDUkRSRVEgICAgICAweDAwODAwMDAwCkBAIC01NzQsMTMgKzk3NywzOSBAQAogI2RlZmluZSBJWEdCRV9UREhNUE5fVERJQ1JEUkVRICAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBJWEdCRV9UREhNUE5fVERJQ0FERFJfU0hJRlQgMTEKIAorI2RlZmluZSBJWEdCRV9SRE1BTV9NRU1fU0VMX1NISUZUICAgMTMKKyNkZWZpbmUgSVhHQkVfUkRNQU1fRFdPUkRfU0hJRlQgICAgIDkKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREVTQ19DT01QX0ZJRk8gIDEKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREZDX0NNRF9GSUZPICAgIDIKKyNkZWZpbmUgSVhHQkVfUkRNQU1fVENOX1NUQVRVU19SQU0gIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPICAgIDUKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX0NOVF9SQU0gICAgIDYKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX0NOVCAgIDgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTSAgIDB4QQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERVNDX0NPTV9GSUZPX1JBTkdFICAgICAxMzUKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREVTQ19DT01fRklGT19DT1VOVCAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk9fUkFOR0UgICAgICA0OAorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk9fQ09VTlQgICAgICA3CisjZGVmaW5lIElYR0JFX1JETUFNX1RDTl9TVEFUVVNfUkFNX1JBTkdFICAgIDI1NgorI2RlZmluZSBJWEdCRV9SRE1BTV9UQ05fU1RBVFVTX1JBTV9DT1VOVCAgICA5CisjZGVmaW5lIElYR0JFX1JETUFNX1dCX0NPTExfRklGT19SQU5HRSAgICAgIDgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPX0NPVU5UICAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTV9SQU5HRSAgICAgICA2NAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTV9DT1VOVCAgICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9DTlRfUkFOR0UgICAgIDMyCisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9DTlRfQ09VTlQgICAgIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTV9SQU5HRSAgICAgMTI4CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9SQU1fQ09VTlQgICAgIDgKKworI2RlZmluZSBJWEdCRV9UWERFU0NJQ19SRUFEWSAgICAgICAgMHg4MDAwMDAwMAorCiAvKiBSZWNlaXZlIENoZWNrc3VtIENvbnRyb2wgKi8KICNkZWZpbmUgSVhHQkVfUlhDU1VNX0lQUENTRSAgICAgMHgwMDAwMTAwMCAgIC8qIElQIHBheWxvYWQgY2hlY2tzdW0gZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX1JYQ1NVTV9QQ1NEICAgICAgIDB4MDAwMDIwMDAgICAvKiBwYWNrZXQgY2hlY2tzdW0gZGlzYWJsZWQgKi8KIAogLyogRkNSVEwgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX0ZDUlRMX1hPTkUgICAgICAgIDB4ODAwMDAwMDAgIC8qIGJpdCAzMSwgWE9OIGVuYWJsZSAqLwotI2RlZmluZSBJWEdCRV9GQ1JUSF9GQ0VOICAgICAgICAweDgwMDAwMDAwICAvKiBSeCBGbG93IGNvbnRyb2wgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0ZDUlRMX1hPTkUgICAgICAgIDB4ODAwMDAwMDAgIC8qIFhPTiBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNSVEhfRkNFTiAgICAgICAgMHg4MDAwMDAwMCAgLyogUGFja2V0IGJ1ZmZlciBmYyBlbmFibGUgKi8KIAogLyogUEFQIGJpdCBtYXNrcyovCiAjZGVmaW5lIElYR0JFX1BBUF9UWFBBVVNFQ05UX01BU0sgICAweDAwMDBGRkZGIC8qIFBhdXNlIGNvdW50ZXIgbWFzayAqLwpAQCAtNTkwLDE5ICsxMDE5LDI5IEBACiAvKiBSZWNlaXZlIEFyYml0cmF0aW9uIENvbnRyb2w6IDAgUm91bmQgUm9iaW4sIDEgREZQICovCiAjZGVmaW5lIElYR0JFX1JNQ1NfUkFDICAgICAgICAgIDB4MDAwMDAwMDQKICNkZWZpbmUgSVhHQkVfUk1DU19ERlAgICAgICAgICAgSVhHQkVfUk1DU19SQUMgLyogRGVmaWNpdCBGaXhlZCBQcmlvcml0eSBlbmEgKi8KLSNkZWZpbmUgSVhHQkVfUk1DU19URkNFXzgwMl8zWCAgMHgwMDAwMDAwOCAvKiBUeCBQcmlvcml0eSBmbG93IGNvbnRyb2wgZW5hICovCi0jZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSAweDAwMDAwMDEwIC8qIFR4IFByaW9yaXR5IGZsb3cgY29udHJvbCBlbmEgKi8KKyNkZWZpbmUgSVhHQkVfUk1DU19URkNFXzgwMl8zWCAgICAgICAgIDB4MDAwMDAwMDggLyogVHggUHJpb3JpdHkgRkMgZW5hICovCisjZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSAgICAgICAweDAwMDAwMDEwIC8qIFR4IFByaW9yaXR5IEZDIGVuYSAqLwogI2RlZmluZSBJWEdCRV9STUNTX0FSQkRJUyAgICAgICAweDAwMDAwMDQwIC8qIEFyYml0cmF0aW9uIGRpc2FibGUgYml0ICovCiAKKy8qIEZDQ0ZHIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCAgICAgICAgIDB4MDAwMDAwMDggLyogVHggbGluayBGQyBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNDRkdfVEZDRV9QUklPUklUWSAgICAgICAweDAwMDAwMDEwIC8qIFR4IHByaW9yaXR5IEZDIGVuYWJsZSAqLwogCiAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgYml0bWFza3MgKi8KIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFJlYWQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9SVFhfUVVFVUUgICAgMHgwMDAwRkZGRiAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1JfRkxPV19ESVIgICAgIDB4MDAwMTAwMDAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9SWF9NSVNTICAgICAgMHgwMDAyMDAwMCAvKiBQYWNrZXQgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9QQ0kgICAgICAgICAgMHgwMDA0MDAwMCAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1JfTUFJTEJPWCAgICAgIDB4MDAwODAwMDAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9MU0MgICAgICAgICAgMHgwMDEwMDAwMCAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9MSU5LU0VDICAgICAgMHgwMDIwMDAwMCAvKiBQTiBUaHJlc2hvbGQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9NTkcgICAgICAgICAgMHgwMDQwMDAwMCAvKiBNYW5hZ2VhYmlsaXR5IEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0dQSV9TRFAwICAgICAweDAxMDAwMDAwIC8qIEdlbiBQdXJwb3NlIEludGVycnVwdCBvbiBTRFAwICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfR1BJX1NEUDEgICAgIDB4MDIwMDAwMDAgLyogR2VuIFB1cnBvc2UgSW50ZXJydXB0IG9uIFNEUDEgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9HUElfU0RQMiAgICAgMHgwNDAwMDAwMCAvKiBHZW4gUHVycG9zZSBJbnRlcnJ1cHQgb24gU0RQMiAqLworI2RlZmluZSBJWEdCRV9FSUNSX0VDQyAgICAgICAgICAweDEwMDAwMDAwIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1BCVVIgICAgICAgICAweDEwMDAwMDAwIC8qIFBhY2tldCBCdWZmZXIgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0RIRVIgICAgICAgICAweDIwMDAwMDAwIC8qIERlc2NyaXB0b3IgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1RDUF9USU1FUiAgICAweDQwMDAwMDAwIC8qIFRDUCBUaW1lciAqLwpAQCAtNjEwLDEwICsxMDQ5LDE2IEBACiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBTZXQgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0ZMT1dfRElSICAgICBJWEdCRV9FSUNSX0ZMT1dfRElSICAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNTX1JYX01JU1MgICAgICBJWEdCRV9FSUNSX1JYX01JU1MgICAvKiBQa3QgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19QQ0kgICAgICAgICAgSVhHQkVfRUlDUl9QQ0kgICAgICAgLyogUENJIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNTX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0xTQyAgICAgICAgICBJWEdCRV9FSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19NTkcgICAgICAgICAgSVhHQkVfRUlDUl9NTkcgICAgICAgLyogTU5HIEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAwICAgICBJWEdCRV9FSUNSX0dQSV9TRFAwICAvKiBTRFAwIEdlbiBQdXJwb3NlIEludCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAxICAgICBJWEdCRV9FSUNSX0dQSV9TRFAxICAvKiBTRFAxIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAyICAgICBJWEdCRV9FSUNSX0dQSV9TRFAyICAvKiBTRFAyIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0VDQyAgICAgICAgICBJWEdCRV9FSUNSX0VDQyAgICAgICAvKiBFQ0MgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19QQlVSICAgICAgICAgSVhHQkVfRUlDUl9QQlVSICAgICAgLyogUGt0IEJ1ZiBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0RIRVIgICAgICAgICBJWEdCRV9FSUNSX0RIRVIgICAgICAvKiBEZXNjIEhhbmRsZXIgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19UQ1BfVElNRVIgICAgSVhHQkVfRUlDUl9UQ1BfVElNRVIgLyogVENQIFRpbWVyICovCkBAIC02MjEsMTAgKzEwNjYsMTYgQEAKIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgU2V0ICovCiAjZGVmaW5lIElYR0JFX0VJTVNfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19GTE9XX0RJUiAgICAgSVhHQkVfRUlDUl9GTE9XX0RJUiAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19SWF9NSVNTICAgICAgSVhHQkVfRUlDUl9SWF9NSVNTICAgLyogUGFja2V0IEJ1ZmZlciBPdmVycnVuICovCisjZGVmaW5lIElYR0JFX0VJTVNfUENJICAgICAgICAgIElYR0JFX0VJQ1JfUENJICAgICAgIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19MU0MgICAgICAgICAgSVhHQkVfRUlDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIElYR0JFX0VJTVNfTU5HICAgICAgICAgIElYR0JFX0VJQ1JfTU5HICAgICAgIC8qIE1ORyBFdmVudCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMCAgICAgSVhHQkVfRUlDUl9HUElfU0RQMCAgLyogU0RQMCBHZW4gUHVycG9zZSBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMSAgICAgSVhHQkVfRUlDUl9HUElfU0RQMSAgLyogU0RQMSBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMiAgICAgSVhHQkVfRUlDUl9HUElfU0RQMiAgLyogU0RQMiBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19FQ0MgICAgICAgICAgSVhHQkVfRUlDUl9FQ0MgICAgICAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJTVNfUEJVUiAgICAgICAgIElYR0JFX0VJQ1JfUEJVUiAgICAgIC8qIFBrdCBCdWYgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19ESEVSICAgICAgICAgSVhHQkVfRUlDUl9ESEVSICAgICAgLyogRGVzY3IgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSU1TX1RDUF9USU1FUiAgICBJWEdCRV9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KQEAgLTYzMiwxMCArMTA4MywxNiBAQAogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgTWFzayBDbGVhciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJTUNfRkxPV19ESVIgICAgIElYR0JFX0VJQ1JfRkxPV19ESVIgIC8qIEZEaXIgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTUNfUlhfTUlTUyAgICAgIElYR0JFX0VJQ1JfUlhfTUlTUyAgIC8qIFBhY2tldCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSU1DX1BDSSAgICAgICAgICBJWEdCRV9FSUNSX1BDSSAgICAgICAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTUNfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfTFNDICAgICAgICAgIElYR0JFX0VJQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBJWEdCRV9FSU1DX01ORyAgICAgICAgICBJWEdCRV9FSUNSX01ORyAgICAgICAvKiBNTkcgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDAgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDAgIC8qIFNEUDAgR2VuIFB1cnBvc2UgSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDEgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDEgIC8qIFNEUDEgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDIgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDIgIC8qIFNEUDIgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTUNfRUNDICAgICAgICAgIElYR0JFX0VJQ1JfRUNDICAgICAgIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1BCVVIgICAgICAgICBJWEdCRV9FSUNSX1BCVVIgICAgICAvKiBQa3QgQnVmIEhhbmRsZXIgRXJyICovCiAjZGVmaW5lIElYR0JFX0VJTUNfREhFUiAgICAgICAgIElYR0JFX0VJQ1JfREhFUiAgICAgIC8qIERlc2MgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19UQ1BfVElNRVIgICAgSVhHQkVfRUlDUl9UQ1BfVElNRVIgLyogVENQIFRpbWVyICovCkBAIC02NTgsNiArMTExNSwzMyBAQAogI2RlZmluZSBJWEdCRV9JTUlSRVhUX0NUUkxfU1lOICAgIDB4MDAwMjAwMDAgIC8qIENoZWNrIFNZTiBiaXQgaW4gaGVhZGVyICovCiAjZGVmaW5lIElYR0JFX0lNSVJFWFRfQ1RSTF9GSU4gICAgMHgwMDA0MDAwMCAgLyogQ2hlY2sgRklOIGJpdCBpbiBoZWFkZXIgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVF9DVFJMX0JQICAgICAweDAwMDgwMDAwICAvKiBCeXBhc3MgY2hlY2sgb2YgY29udHJvbCBiaXRzICovCisjZGVmaW5lIElYR0JFX0lNSVJfU0laRV9CUF84MjU5OSAgMHgwMDAwMTAwMCAvKiBQYWNrZXQgc2l6ZSBieXBhc3MgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1VSR184MjU5OSAweDAwMDAyMDAwIC8qIENoZWNrIFVSRyBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9BQ0tfODI1OTkgMHgwMDAwNDAwMCAvKiBDaGVjayBBQ0sgYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfUFNIXzgyNTk5IDB4MDAwMDgwMDAgLyogQ2hlY2sgUFNIIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1JTVF84MjU5OSAweDAwMDEwMDAwIC8qIENoZWNrIFJTVCBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9TWU5fODI1OTkgMHgwMDAyMDAwMCAvKiBDaGVjayBTWU4gYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfRklOXzgyNTk5IDB4MDAwNDAwMDAgLyogQ2hlY2sgRklOIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX0JQXzgyNTk5ICAweDAwMDgwMDAwIC8qIEJ5cGFzcyBjaGVjayBvZiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9MTElfRU5fODI1OTkgICAweDAwMTAwMDAwIC8qIEVuYWJsZXMgbG93IGxhdGVuY3kgSW50ICovCisjZGVmaW5lIElYR0JFX0lNSVJfUlhfUVVFVUVfTUFTS184MjU5OSAgMHgwMDAwMDA3RiAvKiBSeCBRdWV1ZSBNYXNrICovCisjZGVmaW5lIElYR0JFX0lNSVJfUlhfUVVFVUVfU0hJRlRfODI1OTkgMjEgLyogUnggUXVldWUgU2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUlZQX1BSSU9SSVRZX01BU0sgICAgICAweDAwMDAwMDA3IC8qIFZMQU4gcHJpb3JpdHkgbWFzayAqLworI2RlZmluZSBJWEdCRV9JTUlSVlBfUFJJT1JJVFlfRU4gICAgICAgIDB4MDAwMDAwMDggLyogVkxBTiBwcmlvcml0eSBlbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9NQVhfRlRRRl9GSUxURVJTICAgICAgICAgIDEyOAorI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX01BU0sgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9UQ1AgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfVURQICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX1NDVFAgICAgICAgIDIKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUklPUklUWV9NQVNLICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElYR0JFX0ZUUUZfUFJJT1JJVFlfU0hJRlQgICAgICAgMgorI2RlZmluZSBJWEdCRV9GVFFGX1BPT0xfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX1NISUZUICAgICAgICAgICA4CisjZGVmaW5lIElYR0JFX0ZUUUZfNVRVUExFX01BU0tfTUFTSyAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBJWEdCRV9GVFFGXzVUVVBMRV9NQVNLX1NISUZUICAgIDI1CisjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9NQVNLX0VOICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9GVFFGX1FVRVVFX0VOQUJMRSAgICAgICAgIDB4ODAwMDAwMDAKIAogLyogSW50ZXJydXB0IGNsZWFyIG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfSVJRX0NMRUFSX01BU0sgICAgMHhGRkZGRkZGRgpAQCAtNjc3LDYgKzExNjEsMzEgQEAKIAogI2RlZmluZSBJWEdCRV9JVkFSX0FMTE9DX1ZBTCAgICAweDgwIC8qIEludGVycnVwdCBBbGxvY2F0aW9uIHZhbGlkICovCiAKKy8qIEVUWVBFIFF1ZXVlIEZpbHRlci9TZWxlY3QgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX01BWF9FVFFGX0ZJTFRFUlMgIDgKKyNkZWZpbmUgSVhHQkVfRVRRRl9CQ04gICAgICAgICAgMHgxMDAwMDAwMCAvKiBiaXQgMjggKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl8xNTg4ICAgICAgICAgMHg0MDAwMDAwMCAvKiBiaXQgMzAgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRU4gICAgMHg4MDAwMDAwMCAvKiBiaXQgMzEgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9QT09MX0VOQUJMRSAgICgxIDw8IDI2KSAvKiBiaXQgMjYgKi8KKworI2RlZmluZSBJWEdCRV9FVFFTX1JYX1FVRVVFICAgICAweDAwN0YwMDAwIC8qIGJpdHMgMjI6MTYgKi8KKyNkZWZpbmUgSVhHQkVfRVRRU19SWF9RVUVVRV9TSElGVCAgICAgICAxNgorI2RlZmluZSBJWEdCRV9FVFFTX0xMSSAgICAgICAgICAweDIwMDAwMDAwIC8qIGJpdCAyOSAqLworI2RlZmluZSBJWEdCRV9FVFFTX1FVRVVFX0VOICAgICAweDgwMDAwMDAwIC8qIGJpdCAzMSAqLworCisvKgorICogRVRRRiBmaWx0ZXIgbGlzdDogb25lIHN0YXRpYyBmaWx0ZXIgcGVyIGZpbHRlciBjb25zdW1lci4gVGhpcyBpcworICogICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgZmlsdGVyIGNvbGxpc2lvbnMgbGF0ZXIuIEFkZCBuZXcgZmlsdGVycworICogICAgICAgICAgICAgICAgICAgaGVyZSEhCisgKgorICogQ3VycmVudCBmaWx0ZXJzOgorICogICAgRUFQT0wgODAyLjF4ICgweDg4OGUpOiBGaWx0ZXIgMAorICogICAgQkNOICgweDg5MDQpOiAgICAgICAgICBGaWx0ZXIgMQorICogICAgMTU4OCAoMHg4OGY3KTogICAgICAgICBGaWx0ZXIgMworICovCisjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0VBUE9MICAgICAgICAgIDAKKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfQkNOICAgICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl8xNTg4ICAgICAgICAgICAzCiAvKiBWTEFOIENvbnRyb2wgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfVkVUICAgICAgIDB4MDAwMEZGRkYgIC8qIGJpdHMgMC0xNSAqLwogI2RlZmluZSBJWEdCRV9WTE5DVFJMX0NGSSAgICAgICAweDEwMDAwMDAwICAvKiBiaXQgMjggKi8KQEAgLTY4NCwyMSArMTE5MywyOCBAQAogI2RlZmluZSBJWEdCRV9WTE5DVFJMX1ZGRSAgICAgICAweDQwMDAwMDAwICAvKiBiaXQgMzAgKi8KICNkZWZpbmUgSVhHQkVfVkxOQ1RSTF9WTUUgICAgICAgMHg4MDAwMDAwMCAgLyogYml0IDMxICovCiAKKy8qIFZMQU4gcG9vbCBmaWx0ZXJpbmcgbWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRl9WSUVOICAgICAgICAgMHg4MDAwMDAwMCAgLyogZmlsdGVyIGlzIHZhbGlkICovCisjZGVmaW5lIElYR0JFX1ZMVkZfRU5UUklFUyAgICAgIDY0CiAKICNkZWZpbmUgSVhHQkVfRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUgMHg4MTAwICAvKiA4MDIuMXEgcHJvdG9jb2wgKi8KIAogLyogU1RBVFVTIEJpdCBNYXNrcyAqLwotI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEICAgICAweDAwMDAwMDBDIC8qIExBTiBJRCAqLwotI2RlZmluZSBJWEdCRV9TVEFUVVNfR0lPICAgICAgICAweDAwMDgwMDAwIC8qIEdJTyBNYXN0ZXIgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEICAgICAgICAgMHgwMDAwMDAwQyAvKiBMQU4gSUQgKi8KKyNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRF9TSElGVCAgIDIgICAgICAgICAgLyogTEFOIElEIFNoaWZ0Ki8KKyNkZWZpbmUgSVhHQkVfU1RBVFVTX0dJTyAgICAgICAgICAgIDB4MDAwODAwMDAgLyogR0lPIE1hc3RlciBFbmFibGUgU3RhdHVzICovCiAKICNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRF8wICAgMHgwMDAwMDAwMCAvKiBMQU4gSUQgMCAqLwogI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEXzEgICAweDAwMDAwMDA0IC8qIExBTiBJRCAxICovCiAKIC8qIEVTRFAgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX0VTRFBfU0RQNCAweDAwMDAwMDAxIC8qIFNEUDQgRGF0YSBWYWx1ZSAqLwotI2RlZmluZSBJWEdCRV9FU0RQX1NEUDUgMHgwMDAwMDAwMiAvKiBTRFA1IERhdGEgVmFsdWUgKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFAwIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFAxIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0IDB4MDAwMDAwMTAgLyogU0RQNCBEYXRhIFZhbHVlICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNSAweDAwMDAwMDIwIC8qIFNEUDUgRGF0YSBWYWx1ZSAqLworI2RlZmluZSBJWEdCRV9FU0RQX1NEUDYgMHgwMDAwMDA0MCAvKiBTRFA2IERhdGEgVmFsdWUgKi8KICNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0X0RJUiAgICAgMHgwMDAwMDAwNCAvKiBTRFA0IElPIGRpcmVjdGlvbiAqLwotI2RlZmluZSBJWEdCRV9FU0RQX1NEUDVfRElSICAgICAweDAwMDAwMDA4IC8qIFNEUDUgSU8gZGlyZWN0aW9uICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNV9ESVIgICAgIDB4MDAwMDIwMDAgLyogU0RQNSBJTyBkaXJlY3Rpb24gKi8KIAogLyogTEVEQ1RMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9MRURfSVZSVF9CQVNFICAgICAgMHgwMDAwMDA0MApAQCAtNzMwLDkgKzEyNDYsMTcgQEAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUlhfTE9PU0UgMHgwMTAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SWF9EUklGVCAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0FOX1JYX0FMSUdOIDB4MDA3QzAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfRkVDQSAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQ19GRUNSICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DX0tSX1NVUFAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUkVTVEFSVCAgMHgwMDAwMTAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19GTFUgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19TSElGVCAgIDEzCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMICAgICAgKDB4MyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgICAgICAgKDB4NCA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19TR01JSV8xR18xMDBNICAgKDB4NSA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gKDB4NiA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfU0dNSUkgKDB4NyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19NQVNLICAgICAgICAgICAgKDB4NyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOICAgKDB4MCA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTiAgKDB4MSA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCkBAIC03NDEsMTUgKzEyNjUsMjQgQEAKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTiAgICAoMHg2IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0FUVEFDSF9UWVBFICAgICAoMHg3IDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogCi0jZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTUQgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EICAgICAgICAweDAwMDAwMTgwCi0jZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUIDcKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCA5CisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfTUFTSyAgICAweDAwMDAwMjAwCisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQgICA5CisjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX01BU0sgICAweDAwMDAwMTgwCisjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUICA3CiAjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19YQVVJICAgKDB4MCA8PCBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX0tYNCAgICAoMHgxIDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfQ1g0ICAgICgweDIgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0JYICAgICAgKDB4MCA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xR19LWCAgICAgICgweDEgPDwgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfU0ZJICAgICAoMHgwIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0tYX0JYICAgKDB4MSA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQorCisjZGVmaW5lIElYR0JFX0FVVE9DMl9VUFBFUl9NQVNLICAweEZGRkYwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfTUFTSyAgMHgwMDAzMDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUIDE2CisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfS1IgICgweDAgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19YRkkgKDB4MSA8PCBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1NGSSAoMHgyIDw8IElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQpCiAKIC8qIExJTktTIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9MSU5LU19LWF9BTl9DT01QICAweDgwMDAwMDAwCkBAIC03NTksNiArMTI5Miw3IEBACiAjZGVmaW5lIElYR0JFX0xJTktTX1JYX01PREUgICAgIDB4MDYwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfVFhfTU9ERSAgICAgMHgwMTgwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19YR1hTX0VOICAgICAweDAwNDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NHTUlJX0VOICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfUENTXzFHX0VOICAgMHgwMDIwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU18xR19BTl9FTiAgICAweDAwMTAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX0tYX0FOX0lETEUgIDB4MDAwODAwMDAKQEAgLTc2OCw2ICsxMzAyLDEwIEBACiAjZGVmaW5lIElYR0JFX0xJTktTX1RMX0ZBVUxUICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfU0lHTkFMICAgICAgMHgwMDAwMEYwMAogCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzgyNTk5ICAgICAweDMwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzEwR184MjU5OSAweDMwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzFHXzgyNTk5ICAweDIwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzEwMF84MjU5OSAweDEwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktfVVBfVElNRSAgICAgIDkwIC8qIDkuMCBTZWNvbmRzICovCiAjZGVmaW5lIElYR0JFX0FVVE9fTkVHX1RJTUUgICAgIDQ1IC8qIDQuNSBTZWNvbmRzICovCiAKQEAgLTg0NCw2ICsxMzgyLDcgQEAKICNkZWZpbmUgSVhHQkVfRldfUFRSICAgICAgICAgICAgMHgwRgogI2RlZmluZSBJWEdCRV9QQkFOVU0wX1BUUiAgICAgICAweDE1CiAjZGVmaW5lIElYR0JFX1BCQU5VTTFfUFRSICAgICAgIDB4MTYKKyNkZWZpbmUgSVhHQkVfUENJRV9NU0lYXzgyNTk5X0NBUFMgIDB4NzIKICNkZWZpbmUgSVhHQkVfUENJRV9NU0lYXzgyNTk4X0NBUFMgIDB4NjIKIAogLyogTVNJLVggY2FwYWJpbGl0eSBmaWVsZHMgbWFza3MgKi8KQEAgLTg5Niw2ICsxNDM1LDggQEAKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRUQgICAgICAweEYKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRURfMjUwMCAweDEKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMCAweDIKKyNkZWZpbmUgSVhHQkVfUENJX0hFQURFUl9UWVBFX1JFR0lTVEVSICAweDBFCisjZGVmaW5lIElYR0JFX1BDSV9IRUFERVJfVFlQRV9NVUxUSUZVTkMgMHg4MAogCiAvKiBOdW1iZXIgb2YgMTAwIG1pY3Jvc2Vjb25kcyB3ZSB3YWl0IGZvciBQQ0kgRXhwcmVzcyBtYXN0ZXIgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9QQ0lfTUFTVEVSX0RJU0FCTEVfVElNRU9VVCA4MDAKQEAgLTk0OCw2ICsxNDg5LDcgQEAKICNkZWZpbmUgSVhHQkVfUlhDVFJMX1JYRU4gICAgICAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIFJlY2VpdmVyICovCiAjZGVmaW5lIElYR0JFX1JYQ1RSTF9ETUJZUFMgICAgIDB4MDAwMDAwMDIgIC8qIERlc2NyaXB0b3IgTW9uaXRvciBCeXBhc3MgKi8KICNkZWZpbmUgSVhHQkVfUlhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCisjZGVmaW5lIElYR0JFX1JYRENUTF9WTUUgICAgICAgIDB4NDAwMDAwMDAgIC8qIFZMQU4gbW9kZSBlbmFibGUgKi8KIAogI2RlZmluZSBJWEdCRV9GQ1RSTF9TQlAgMHgwMDAwMDAwMiAvKiBTdG9yZSBCYWQgUGFja2V0ICovCiAjZGVmaW5lIElYR0JFX0ZDVFJMX01QRSAweDAwMDAwMTAwIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyBFbmEqLwpAQCAtOTU4LDkgKzE1MDAsMjMgQEAKIC8qIFJlY2VpdmUgUHJpb3JpdHkgRmxvdyBDb250cm9sIEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9GQ1RSTF9SUEZDRSAweDAwMDA0MDAwCiAjZGVmaW5lIElYR0JFX0ZDVFJMX1JGQ0UgMHgwMDAwODAwMCAvKiBSZWNlaXZlIEZsb3cgQ29udHJvbCBFbmEgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUE1DRiAgICAgICAgMHgwMDAwMDAwMSAvKiBQYXNzIE1BQyBDb250cm9sIEZyYW1lcyAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9EUEYgICAgICAgICAweDAwMDAwMDAyIC8qIERpc2NhcmQgUGF1c2UgRnJhbWUgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUlBGQ0UgICAgICAgMHgwMDAwMDAwNCAvKiBSZWNlaXZlIFByaW9yaXR5IEZDIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9SRkNFICAgICAgICAweDAwMDAwMDA4IC8qIFJlY2VpdmUgRkMgRW5hYmxlICovCiAKIC8qIE11bHRpcGxlIFJlY2VpdmUgUXVldWUgQ29udHJvbCAqLwogI2RlZmluZSBJWEdCRV9NUlFDX1JTU0VOICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvKiBSU1MgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01SUUNfTVJRRV9NQVNLICAgICAgICAgICAgICAgICAgICAweEYgLyogQml0cyAzOjAgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVDhUQ0VOICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiA4IFRDIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1JUNFRDRU4gICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIDQgVEMgbm8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfUlRSU1M4VENFTiAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogOCBUQyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVFJTUzRUQ0VOICAgICAgICAgICAgMHgwMDAwMDAwNSAvKiA0IFRDIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFFTiAgICAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIFZNRHEyIDY0IHBvb2xzIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSU1MzMkVOICAgICAgICAgICAweDAwMDAwMDBBIC8qIFZNRHEyIDMyIHBvb2xzIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSU1M2NEVOICAgICAgICAgICAweDAwMDAwMDBCIC8qIFZNRHEyIDY0IHBvb2xzIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSVDhUQ0VOICAgICAgICAgICAweDAwMDAwMDBDIC8qIFZNRHEyL1JUIDE2IHBvb2wgOCBUQyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSVDRUQ0VOICAgICAgICAgICAweDAwMDAwMDBEIC8qIFZNRHEyL1JUIDMyIHBvb2wgNCBUQyAqLwogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9NQVNLICAgICAgICAweEZGRkYwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNCAgICAgICAgMHgwMDAyMDAwMApAQCAtOTcxLDYgKzE1MjcsMTIgQEAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAgICAgMHgwMDQwMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUCAgICAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVURQIDB4MDEwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTVJRQ19MM0w0VFhTV0VOICAgICAgICAgICAgMHgwMDAwODAwMAorCisvKiBRdWV1ZSBEcm9wIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9RREVfRU5BQkxFICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1FERV9JRFhfTUFTSyAgIDB4MDAwMDdGMDAKKyNkZWZpbmUgSVhHQkVfUURFX0lEWF9TSElGVCAgICAgICAgICAgOAogCiAjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19JWFNNIDB4MDEgICAgICAgLyogSW5zZXJ0IElQIGNoZWNrc3VtICovCiAjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19UWFNNIDB4MDIgICAgICAgLyogSW5zZXJ0IFRDUC9VRFAgY2hlY2tzdW0gKi8KQEAgLTk4MiwxMCArMTU0NCwyNSBAQAogI2RlZmluZSBJWEdCRV9UWERfQ01EX1ZMRSAgICAweDQwMDAwMDAwIC8qIEFkZCBWTEFOIHRhZyAqLwogI2RlZmluZSBJWEdCRV9UWERfU1RBVF9ERCAgICAweDAwMDAwMDAxIC8qIERlc2NyaXB0b3IgRG9uZSAqLwogCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19TVEFUVVNfU0VDUCAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0lOVkFMSURfUFJPVE9DT0wgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfRVJST1JfSU5WQUxJRF9MRU5HVEggICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9BVVRIX0ZBSUxFRCAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0JJVF9NQVNLICAgICAgICAgICAgICAgMHgxODAwMDAwMAorLyogTXVsdGlwbGUgVHJhbnNtaXQgUXVldWUgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBJWEdCRV9NVFFDX1JUX0VOQSAgICAgICAweDEgLyogRENCIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NVFFDX1ZUX0VOQSAgICAgICAweDIgLyogVk1EUTIgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01UUUNfNjRRXzFQQiAgICAgIDB4MCAvKiA2NCBxdWV1ZXMgMSBwYWNrIGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9NVFFDXzY0VkYgICAgICAgICAweDggLyogMiBUWCBRdWV1ZXMgcGVyIHBvb2wgdy82NFZGJ3MgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ184VENfOFRRICAgICAgMHhDIC8qIDggVEMgaWYgUlRfRU5BIG9yIDggVFEgaWYgVlRfRU5BICovCisKIC8qIFJlY2VpdmUgRGVzY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfREQgICAgICAgMHgwMSAgICAvKiBEZXNjcmlwdG9yIERvbmUgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRU9QICAgICAgMHgwMiAgICAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0ZMTSAgICAgIDB4MDQgICAgLyogRkRpciBNYXRjaCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WUCAgICAgICAweDA4ICAgIC8qIElFRUUgVkxBTiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX05FWFRQX01BU0sgICAweDAwMEZGRkYwIC8qIE5leHQgRGVzY3JpcHRvciBJbmRleCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTkVYVFBfU0hJRlQgIDB4MDAwMDAwMDQKICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVURQQ1MgICAgMHgxMCAgICAvKiBVRFAgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0w0Q1MgICAgIDB4MjAgICAgLyogTDQgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0lQQ1MgICAgIDB4NDAgICAgLyogSVAgeHN1bSBjYWxjdWxhdGVkICovCkBAIC05OTQsNiArMTU3MSwxMCBAQAogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WRVhUICAgICAweDIwMCAgIC8qIDFzdCBWTEFOIGZvdW5kICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1VEUFYgICAgIDB4NDAwICAgLyogVmFsaWQgVURQIGNoZWNrc3VtICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0RZTklOVCAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MTElOVCAgICAweDgwMCAgIC8qIFBrdCBjYXVzZWQgTG93IExhdGVuY3kgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1RTICAgICAgIDB4MTAwMDAgLyogVGltZSBTdGFtcCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9TRUNQICAgICAweDIwMDAwIC8qIFNlY3VyaXR5IFByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTEIgICAgICAgMHg0MDAwMCAvKiBMb29wYmFjayBTdGF0dXMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfQUNLICAgICAgMHg4MDAwICAvKiBBQ0sgUGFja2V0IGluZGljYXRpb24gKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9DRSAgICAgICAgMHgwMSAgICAvKiBDUkMgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9MRSAgICAgICAgMHgwMiAgICAvKiBMZW5ndGggRXJyb3IgKi8KQEAgLTEwMDIsNiArMTU4Myw4IEBACiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfVVNFICAgICAgIDB4MjAgICAgLyogVW5kZXJzaXplIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfVENQRSAgICAgIDB4NDAgICAgLyogVENQL1VEUCBDaGVja3N1bSBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX0lQRSAgICAgICAweDgwICAgIC8qIElQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTUFTSyAgICAgICAgICAgMHhmZmYwMDAwMCAvKiBSREVTQy5FUlJPUlMgbWFzayAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX1NISUZUICAgICAgICAgIDIwICAgICAgICAgLyogUkRFU0MuRVJST1JTIHNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfSEJPICAgIDB4MDA4MDAwMDAgLypIZWFkZXIgQnVmZmVyIE92ZXJmbG93ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfQ0UgICAgIDB4MDEwMDAwMDAgLyogQ1JDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTEUgICAgIDB4MDIwMDAwMDAgLyogTGVuZ3RoIEVycm9yICovCkBAIC0xMDE2LDkgKzE1OTksMjMgQEAKICNkZWZpbmUgSVhHQkVfUlhEX0NGSV9NQVNLICAgICAgMHgxMDAwICAvKiBDRkkgaXMgYml0IDEyICovCiAjZGVmaW5lIElYR0JFX1JYRF9DRklfU0hJRlQgICAgIDEyCiAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfREQgICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9ERCAgLyogRG9uZSAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9FT1AgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0VPUCAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZMTSAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfRkxNIC8qIEZEaXIgTWF0Y2ggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfVlAgICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9WUCAgLyogSUVFRSBWTEFOIFBrdCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9NQVNLICAgICAgICAgIDB4MDAwZmZmZmYgLyogU3RhdC9ORVhUUDogYml0IDAtMTkgKi8KKworLyogUFNSVFlQRSBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9UQ1BIRFIgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX1VEUEhEUiAgICAweDAwMDAwMDIwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfSVBWNEhEUiAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9JUFY2SERSICAgMHgwMDAwMDIwMAogCiAvKiBTUlJDVEwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVCAgICAgMTAgICAgIC8qIHNvIG1hbnkgS0JzICovCisjZGVmaW5lIElYR0JFX1NSUkNUTF9SRE1UU19TSElGVCAgICAgICAgMjIKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX1JETVRTX01BU0sgICAgICAgICAweDAxQzAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9EUk9QX0VOICAgICAgICAgICAgMHgxMDAwMDAwMAogI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVQS1RfTUFTSyAgICAgIDB4MDAwMDAwN0YKICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFSERSX01BU0sgICAgICAweDAwMDAzRjAwCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9MRUdBQ1kgICAgMHgwMDAwMDAwMApAQCAtMTAzMyw2ICsxNjMwLDcgQEAKIAogI2RlZmluZSBJWEdCRV9SWERBRFZfUlNTVFlQRV9NQVNLICAgICAgIDB4MDAwMDAwMEYKICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTUFTSyAgICAgICAweDAwMDBGRkYwCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX01BU0tfRVggICAgMHgwMDAxRkZGMAogI2RlZmluZSBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0sgICAgIDB4MDAwMDdGRTAKICNkZWZpbmUgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9TSElGVCAgICA1CiAjZGVmaW5lIElYR0JFX1JYREFEVl9TUExJVEhFQURFUl9FTiAgICAgMHgwMDAwMTAwMApAQCAtMTA2MCw2ICsxNjU4LDIwIEBACiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX1VEUCAgICAgICAgMHgwMDAwMDIwMCAvKiBVRFAgaGRyIHByZXNlbnQgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfU0NUUCAgICAgICAweDAwMDAwNDAwIC8qIFNDVFAgaGRyIHByZXNlbnQgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTkZTICAgICAgICAweDAwMDAwODAwIC8qIE5GUyBoZHIgcHJlc2VudCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFNFQ19FU1AgIDB4MDAwMDEwMDAgLyogSVBTZWMgRVNQICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0lQU0VDX0FIICAgMHgwMDAwMjAwMCAvKiBJUFNlYyBBSCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9MSU5LU0VDICAgIDB4MDAwMDQwMDAgLyogTGlua1NlYyBFbmNhcCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9FVFFGICAgICAgIDB4MDAwMDgwMDAgLyogUEtUVFlQRSBpcyBFVFFGIGluZGV4ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0VUUUZfTUFTSyAgMHgwMDAwMDA3MCAvKiBFVFFGIGhhcyA4IGluZGljZXMgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfRVRRRl9TSElGVCA0ICAgICAgICAgIC8qIFJpZ2h0LXNoaWZ0IDQgYml0cyAqLworCisvKiBTZWN1cml0eSBQcm9jZXNzaW5nIGJpdCBJbmRpY2F0aW9uICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfU1RBVFVTX1NFQ1AgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfTk9fU0FfTUFUQ0ggICAweDA4MDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfUkVQTEFZX0VSUk9SICAweDEwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfQklUX01BU0sgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfQkFEX1NJRyAgICAgICAweDE4MDAwMDAwCisKIC8qIE1hc2tzIHRvIGRldGVybWluZSBpZiBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkIGR1ZSB0byBmcmFtZSBlcnJvcnMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSyAoIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUlhEX0VSUl9DRSB8IFwKQEAgLTEwODksNiArMTcwMSwxNCBAQAogI2RlZmluZSBJWEdCRV9SWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUICAweDAwMEQgLyogUHJpb3JpdHkgaW4gdXBwZXIgMyBvZiAxNiAqLwogI2RlZmluZSBJWEdCRV9UWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUICBJWEdCRV9SWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUCiAKKy8qIExpdHRsZSBFbmRpYW4gZGVmaW5lcyAqLworI2lmbmRlZiBfX2xlMzIKKyNkZWZpbmUgX19sZTMyICB1MzIKKyNlbmRpZgorI2lmbmRlZiBfX2xlNjQKKyNkZWZpbmUgX19sZTY0ICB1NjQKKworI2VuZGlmCiAKIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgLSBMZWdhY3kgKi8KIHN0cnVjdCBpeGdiZV9sZWdhY3lfdHhfZGVzYyB7CkBAIC0xMTc2LDYgKzE3OTYsOSBAQAogCiAvKiBBZHYgVHJhbnNtaXQgRGVzY3JpcHRvciBDb25maWcgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUQUxFTl9NQVNLICAgICAgMHgwMDAwRkZGRiAvKiBEYXRhIGJ1ZiBsZW5ndGgoYnl0ZXMpICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9NQUNfTElOS1NFQyAgICAgIDB4MDAwNDAwMDAgLyogSW5zZXJ0IExpbmtTZWMgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0lQU0VDX1NBX0lOREVYX01BU0sgICAweDAwMDAwM0ZGIC8qIElQU2VjIFNBIGluZGV4ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9JUFNFQ19FU1BfTEVOX01BU0sgICAgMHgwMDAwMDFGRiAvKiBJUFNlYyBFU1AgbGVuZ3RoICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVFlQX01BU0sgIDB4MDBGMDAwMDAgLyogRFRZUCBtYXNrICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVFlQX0NUWFQgIDB4MDAyMDAwMDAgLyogQWR2YW5jZWQgQ29udGV4dCBEZXNjICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVFlQX0RBVEEgIDB4MDAzMDAwMDAgLyogQWR2YW5jZWQgRGF0YSBEZXNjcmlwdG9yICovCkBAIC0xMjEwLDYgKzE4MzMsOSBAQAogI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1RDUCAgIDB4MDAwMDA4MDAgIC8qIEw0IFBhY2tldCBUWVBFIG9mIFRDUCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1NDVFAgIDB4MDAwMDEwMDAgIC8qIEw0IFBhY2tldCBUWVBFIG9mIFNDVFAgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX01LUlJFUSAgICAweDAwMDAyMDAwIC8qUmVxIHJlcXVpcmVzIE1hcmtlcnMgYW5kIENSQyovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9QT1BUU19JUFNFQyAgICAgIDB4MDAwMDA0MDAgLyogSVBTZWMgb2ZmbG9hZCByZXF1ZXN0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9JUFNFQ19UWVBFX0VTUCAweDAwMDAyMDAwIC8qIElQU2VjIFR5cGUgRVNQICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9JUFNFQ19FTkNSWVBUX0VOIDB4MDAwMDQwMDAvKiBFU1AgRW5jcnlwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0w0TEVOX1NISUZUICAgICA4ICAvKiBBZHYgY3R4dCBMNExFTiBzaGlmdCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfTVNTX1NISUZUICAgICAgIDE2ICAvKiBBZHYgY3R4dCBNU1Mgc2hpZnQgKi8KIApAQCAtMTIyMyw2ICsxODQ5LDEyIEBACiAjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMIDB4MDA4MAogI2RlZmluZSBJWEdCRV9MSU5LX1NQRUVEXzgyNTk4X0FVVE9ORUcgKElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfODI1OTlfQVVUT05FRyAoSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQorCisjZGVmaW5lIElYR0JFX1BDSUVfREVWX0NUUkxfMiAweEM4CisjZGVmaW5lIFBDSUVfQ09NUExfVE9fVkFMVUUgMHgwNQogCiAvKiBQaHlzaWNhbCBsYXllciB0eXBlICovCiB0eXBlZGVmIHUzMiBpeGdiZV9waHlzaWNhbF9sYXllcjsKQEAgLTEyMzksNyArMTg3MSw2IEBACiAjZGVmaW5lIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0tYICAweDAyMDAKICNkZWZpbmUgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfQlggIDB4MDQwMAogCi0KIGVudW0gaXhnYmVfZWVwcm9tX3R5cGUgewogCWl4Z2JlX2VlcHJvbV91bmluaXRpYWxpemVkID0gMCwKIAlpeGdiZV9lZXByb21fc3BpLApAQCAtMTI0OSwxMiArMTg4MCwxNCBAQAogZW51bSBpeGdiZV9tYWNfdHlwZSB7CiAJaXhnYmVfbWFjX3Vua25vd24gPSAwLAogCWl4Z2JlX21hY184MjU5OEVCLAorCWl4Z2JlX21hY184MjU5OUVCLAogCWl4Z2JlX251bV9tYWNzCiB9OwogCiBlbnVtIGl4Z2JlX3BoeV90eXBlIHsKIAlpeGdiZV9waHlfdW5rbm93biA9IDAsCiAJaXhnYmVfcGh5X3RuLAorCWl4Z2JlX3BoeV9jdV91bmtub3duLAogCWl4Z2JlX3BoeV9xdCwKIAlpeGdiZV9waHlfeGF1aSwKIAlpeGdiZV9waHlfbmwsCkBAIC0xMjYzLDIyICsxODk2LDMxIEBACiAJaXhnYmVfcGh5X3NmcF9hdmFnbywKIAlpeGdiZV9waHlfc2ZwX2Z0bCwKIAlpeGdiZV9waHlfc2ZwX3Vua25vd24sCisJaXhnYmVfcGh5X3NmcF9pbnRlbCwKIAlpeGdiZV9waHlfZ2VuZXJpYwogfTsKIAogLyoKICAqIFNGUCsgbW9kdWxlIHR5cGUgSURzOgogICoKLSAqIElECU1vZHVsZSBUeXBlCisgKiBJRCAgIE1vZHVsZSBUeXBlCiAgKiA9PT09PT09PT09PT09Ci0gKiAwCVNGUF9EQV9DVQotICogMQlTRlBfU1IKLSAqIDIJU0ZQX0xSCisgKiAwICAgIFNGUF9EQV9DVQorICogMSAgICBTRlBfU1IKKyAqIDIgICAgU0ZQX0xSCisgKiAzICAgIFNGUF9EQV9DVV9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisgKiA0ICAgIFNGUF9EQV9DVV9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCisgKiA1ICAgIFNGUF9TUi9MUl9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisgKiA2ICAgIFNGUF9TUi9MUl9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCiAgKi8KIGVudW0gaXhnYmVfc2ZwX3R5cGUgewogCWl4Z2JlX3NmcF90eXBlX2RhX2N1ID0gMCwKIAlpeGdiZV9zZnBfdHlwZV9zciA9IDEsCiAJaXhnYmVfc2ZwX3R5cGVfbHIgPSAyLAorCWl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUwID0gMywKKwlpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMSA9IDQsCisJaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMCA9IDUsCisJaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMSA9IDYsCiAJaXhnYmVfc2ZwX3R5cGVfbm90X3ByZXNlbnQgPSAweEZGRkUsCiAJaXhnYmVfc2ZwX3R5cGVfdW5rbm93biA9IDB4RkZGRgogfTsKQEAgLTEyOTcsOSArMTkzOSw0NiBAQAogCWl4Z2JlX2ZjX3J4X3BhdXNlLAogCWl4Z2JlX2ZjX3R4X3BhdXNlLAogCWl4Z2JlX2ZjX2Z1bGwsCisjaWZkZWYgQ09ORklHX0RDQgorCWl4Z2JlX2ZjX3BmYywKKyNlbmRpZgogCWl4Z2JlX2ZjX2RlZmF1bHQKIH07CiAKKy8qIFBDSSBidXMgdHlwZXMgKi8KK2VudW0gaXhnYmVfYnVzX3R5cGUgeworCWl4Z2JlX2J1c190eXBlX3Vua25vd24gPSAwLAorCWl4Z2JlX2J1c190eXBlX3BjaSwKKwlpeGdiZV9idXNfdHlwZV9wY2l4LAorCWl4Z2JlX2J1c190eXBlX3BjaV9leHByZXNzLAorCWl4Z2JlX2J1c190eXBlX3Jlc2VydmVkCit9OworCisvKiBQQ0kgYnVzIHNwZWVkcyAqLworZW51bSBpeGdiZV9idXNfc3BlZWQgeworCWl4Z2JlX2J1c19zcGVlZF91bmtub3duID0gMCwKKwlpeGdiZV9idXNfc3BlZWRfMzMsCisJaXhnYmVfYnVzX3NwZWVkXzY2LAorCWl4Z2JlX2J1c19zcGVlZF8xMDAsCisJaXhnYmVfYnVzX3NwZWVkXzEyMCwKKwlpeGdiZV9idXNfc3BlZWRfMTMzLAorCWl4Z2JlX2J1c19zcGVlZF8yNTAwLAorCWl4Z2JlX2J1c19zcGVlZF81MDAwLAorCWl4Z2JlX2J1c19zcGVlZF9yZXNlcnZlZAorfTsKKworLyogUENJIGJ1cyB3aWR0aHMgKi8KK2VudW0gaXhnYmVfYnVzX3dpZHRoIHsKKwlpeGdiZV9idXNfd2lkdGhfdW5rbm93biA9IDAsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDEsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDIsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQgPSA0LAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3g4ID0gOCwKKwlpeGdiZV9idXNfd2lkdGhfMzIsCisJaXhnYmVfYnVzX3dpZHRoXzY0LAorCWl4Z2JlX2J1c193aWR0aF9yZXNlcnZlZAorfTsKKwogc3RydWN0IGl4Z2JlX2FkZHJfZmlsdGVyX2luZm8gewogCXUzMiBudW1fbWNfYWRkcnM7CiAJdTMyIHJhcl91c2VkX2NvdW50OwpAQCAtMTMwOSw2ICsxOTg4LDE2IEBACiAJYm9vbCB1c2VyX3NldF9wcm9taXNjOwogfTsKIAorLyogQnVzIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBpeGdiZV9idXNfaW5mbyB7CisJZW51bSBpeGdiZV9idXNfc3BlZWQgc3BlZWQ7CisJZW51bSBpeGdiZV9idXNfd2lkdGggd2lkdGg7CisJZW51bSBpeGdiZV9idXNfdHlwZSB0eXBlOworCisJdTE2IGZ1bmM7CisJdTE2IGxhbl9pZDsKK307CisKIC8qIEZsb3cgY29udHJvbCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgaXhnYmVfZmNfaW5mbyB7CiAJdTMyIGhpZ2hfd2F0ZXI7IC8qIEZsb3cgQ29udHJvbCBIaWdoLXdhdGVyICovCkBAIC0xMzc3LDYgKzIwNjYsMTQgQEAKIAl1NjQgcXB0Y1sxNl07CiAJdTY0IHFicmNbMTZdOwogCXU2NCBxYnRjWzE2XTsKKwl1NjQgcXByZGNbMTZdOworCXU2NCBweG9uMm9mZmNbOF07CisJdTY0IGZkaXJ1c3RhdF9hZGQ7CisJdTY0IGZkaXJ1c3RhdF9yZW1vdmU7CisJdTY0IGZkaXJmc3RhdF9mYWRkOworCXU2NCBmZGlyZnN0YXRfZnJlbW92ZTsKKwl1NjQgZmRpcm1hdGNoOworCXU2NCBmZGlybWlzczsKIH07CiAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KQEAgLTE0MDEsMTIgKzIwOTgsMTUgQEAKIAlzMzIgKCpzdGFydF9odykoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKmNsZWFyX2h3X2NudHJzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJZW51bSBpeGdiZV9tZWRpYV90eXBlICgqZ2V0X21lZGlhX3R5cGUpKHN0cnVjdCBpeGdiZV9odyAqKTsKLQlzMzIgKCpnZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJdTMyICgqZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcikoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKmdldF9tYWNfYWRkcikoc3RydWN0IGl4Z2JlX2h3ICosIHU4ICopOwogCXMzMiAoKnN0b3BfYWRhcHRlcikoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKmdldF9idXNfaW5mbykoc3RydWN0IGl4Z2JlX2h3ICopOworCXZvaWQgKCpzZXRfbGFuX2lkKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqcmVhZF9hbmFsb2dfcmVnOCkoc3RydWN0IGl4Z2JlX2h3KiwgdTMyLCB1OCopOwogCXMzMiAoKndyaXRlX2FuYWxvZ19yZWc4KShzdHJ1Y3QgaXhnYmVfaHcqLCB1MzIsIHU4KTsKKwlzMzIgKCpzZXR1cF9zZnApKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCplbmFibGVfcnhfZG1hKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyKTsKIAogCS8qIExpbmsgKi8KIAlzMzIgKCpzZXR1cF9saW5rKShzdHJ1Y3QgaXhnYmVfaHcgKik7CkBAIC0xNDYyLDcgKzIxNjIsNyBAQAogc3RydWN0IGl4Z2JlX2VlcHJvbV9pbmZvIHsKIAlzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMgIG9wczsKIAllbnVtIGl4Z2JlX2VlcHJvbV90eXBlICAgICAgICAgIHR5cGU7Ci0JdTMyCQkJCXNlbWFwaG9yZV9kZWxheTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZV9kZWxheTsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfc2l6ZTsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYml0czsKIH07CkBAIC0xNTA4LDYgKzIyMDgsNyBAQAogCXN0cnVjdCBpeGdiZV9mY19pbmZvCQlmYzsKIAlzdHJ1Y3QgaXhnYmVfcGh5X2luZm8JCXBoeTsKIAlzdHJ1Y3QgaXhnYmVfZWVwcm9tX2luZm8JZWVwcm9tOworCXN0cnVjdCBpeGdiZV9idXNfaW5mbwkJYnVzOwogCXUxNgkJCQlkZXZpY2VfaWQ7CiAJdTE2CQkJCXZlbmRvcl9pZDsKIAl1MTYJCQkJc3Vic3lzdGVtX2RldmljZV9pZDsKQEAgLTE1NDYsNiArMjI0Nyw3IEBACiAjZGVmaW5lIElYR0JFX0VSUl9JMkMgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTgKICNkZWZpbmUgSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEICAgICAgICAgICAgIC0xOQogI2RlZmluZSBJWEdCRV9FUlJfU0ZQX05PVF9QUkVTRU5UICAgICAgICAgICAgICAgLTIwCisjZGVmaW5lIElYR0JFX0VSUl9TRlBfTk9fSU5JVF9TRVFfUFJFU0VOVCAgICAgICAtMjEKICNkZWZpbmUgSVhHQkVfTk9UX0lNUExFTUVOVEVEICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKIAogI2VuZGlmIC8qIF9JWEdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuYyBiL2RyaXZlcnMvbmV0L2ptZS5jCmluZGV4IDA4YjM0MDUuLjg2MGRjZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5jCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5jCkBAIC00MjksMTAgKzQyOSw5IEBACiAKIAkJam1lLT5waHlsaW5rID0gcGh5bGluazsKIAotCQlnaGMgPSBqbWUtPnJlZ19naGMgJiB+KEdIQ19TUEVFRF8xME0gfAotCQkJCQlHSENfU1BFRURfMTAwTSB8Ci0JCQkJCUdIQ19TUEVFRF8xMDAwTSB8Ci0JCQkJCUdIQ19EUFgpOworCQlnaGMgPSBqbWUtPnJlZ19naGMgJiB+KEdIQ19TUEVFRCB8IEdIQ19EUFggfAorCQkJCUdIQ19UT19DTEtfUENJRSB8IEdIQ19UWE1BQ19DTEtfUENJRSB8CisJCQkJR0hDX1RPX0NMS19HUEhZIHwgR0hDX1RYTUFDX0NMS19HUEhZKTsKIAkJc3dpdGNoIChwaHlsaW5rICYgUEhZX0xJTktfU1BFRURfTUFTSykgewogCQljYXNlIFBIWV9MSU5LX1NQRUVEXzEwTToKIAkJCWdoYyB8PSBHSENfU1BFRURfMTBNIHwKQEAgLTk1NywxMyArOTU2LDE0IEBACiAJCWdvdG8gb3V0X2luYzsKIAogCWkgPSBhdG9taWNfcmVhZCgmcnhyaW5nLT5uZXh0X3RvX2NsZWFuKTsKLQl3aGlsZSAobGltaXQtLSA+IDApIHsKKwl3aGlsZSAobGltaXQgPiAwKSB7CiAJCXJ4ZGVzYyA9IHJ4cmluZy0+ZGVzYzsKIAkJcnhkZXNjICs9IGk7CiAKIAkJaWYgKChyeGRlc2MtPmRlc2N3Yi5mbGFncyAmIGNwdV90b19sZTE2KFJYV0JGTEFHX09XTikpIHx8CiAJCSEocnhkZXNjLT5kZXNjd2IuZGVzY2NudCAmIFJYV0JEQ05UX1dCQ1BMKSkKIAkJCWdvdG8gb3V0OworCQktLWxpbWl0OwogCiAJCWRlc2NjbnQgPSByeGRlc2MtPmRlc2N3Yi5kZXNjY250ICYgUlhXQkRDTlRfRENOVDsKIApAQCAtMTgzMyw3ICsxODMzLDcgQEAKIH0KIAogc3RhdGljIGludAotam1lX2ZpbGxfZmlyc3RfdHhfZGVzYyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkeCkKK2ptZV9maWxsX3R4X2Rlc2Moc3RydWN0IGptZV9hZGFwdGVyICpqbWUsIHN0cnVjdCBza19idWZmICpza2IsIGludCBpZHgpCiB7CiAJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSBqbWUtPnR4cmluZzsKIAlzdHJ1Y3QgdHhkZXNjICp0eGRlc2M7CkBAIC0xODYzLDYgKzE4NjMsNyBAQAogCWlmIChqbWVfdHhfdHNvKHNrYiwgJnR4ZGVzYy0+ZGVzYzEubXNzLCAmZmxhZ3MpKQogCQlqbWVfdHhfY3N1bShqbWUsIHNrYiwgJmZsYWdzKTsKIAlqbWVfdHhfdmxhbihza2IsICZ0eGRlc2MtPmRlc2MxLnZsYW4sICZmbGFncyk7CisJam1lX21hcF90eF9za2Ioam1lLCBza2IsIGlkeCk7CiAJdHhkZXNjLT5kZXNjMS5mbGFncyA9IGZsYWdzOwogCS8qCiAJICogU2V0IHR4IGJ1ZmZlciBpbmZvIGFmdGVyIHRlbGxpbmcgTklDIHRvIHNlbmQKQEAgLTE5MzIsOCArMTkzMyw3IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQlqbWVfbWFwX3R4X3NrYihqbWUsIHNrYiwgaWR4KTsKLQlqbWVfZmlsbF9maXJzdF90eF9kZXNjKGptZSwgc2tiLCBpZHgpOworCWptZV9maWxsX3R4X2Rlc2Moam1lLCBza2IsIGlkeCk7CiAKIAlqd3JpdGUzMihqbWUsIEpNRV9UWENTLCBqbWUtPnJlZ190eGNzIHwKIAkJCQlUWENTX1NFTEVDVF9RVUVVRTAgfApAQCAtMjU5MCw2ICsyNTkwLDE2IEBACiBzdGF0aWMgaW50CiBqbWVfcGNpX2RtYTY0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCAmJgorCSAgICAhcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpCisJCWlmICghcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKKwkJCXJldHVybiAxOworCisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwICYmCisJICAgICFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV80MEJJVF9NQVNLKSkKKwkJaWYgKCFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzQwQklUX01BU0spKQorCQkJcmV0dXJuIDE7CisKIAlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQogCQlpZiAoIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpCiAJCQlyZXR1cm4gMDsKQEAgLTI4NTYsNyArMjg2NiwxMSBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9zaGFkb3c7CiAJfQogCi0JbXNnX3Byb2JlKGptZSwgIkpNQzI1MCBnaWdhYml0JXMgdmVyOiV4IHJldjoleCBtYWNhZGRyOiVwTVxuIiwKKwltc2dfcHJvYmUoam1lLCAiJXMlcyB2ZXI6JXggcmV2OiV4IG1hY2FkZHI6JXBNXG4iLAorCQkoam1lLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCkgPworCQkJIkpNQzI1MCBHaWdhYml0IEV0aGVybmV0IiA6CisJCQkoam1lLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI2MCkgPworCQkJCSJKTUMyNjAgRmFzdCBFdGhlcm5ldCIgOiAiVW5rbm93biIsCiAJCShqbWUtPmZwZ2F2ZXIgIT0gMCkgPyAiIChGUEdBKSIgOiAiIiwKIAkJKGptZS0+ZnBnYXZlciAhPSAwKSA/IGptZS0+ZnBnYXZlciA6IGptZS0+Y2hpcHJldiwKIAkJam1lLT5yZXYsIG5ldGRldi0+ZGV2X2FkZHIpOwpAQCAtMzAwMiw3ICszMDE2LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBqbWVfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSk1pY3JvbiBKTUMyNTAgZ2lnYWJpdCBldGhlcm5ldCAiCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkpNaWNyb24gSk1DMlhYIGV0aGVybmV0ICIKIAkgICAgICAgImRyaXZlciB2ZXJzaW9uICVzXG4iLCBEUlZfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmptZV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmggYi9kcml2ZXJzL25ldC9qbWUuaAppbmRleCBlMzIxYzY3Li4wOTk2YTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuaAorKysgYi9kcml2ZXJzL25ldC9qbWUuaApAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBfX0pNRV9IX0lOQ0xVREVEX18KIAogI2RlZmluZSBEUlZfTkFNRQkiam1lIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuNCIKICNkZWZpbmUgUEZYCQlEUlZfTkFNRSAiOiAiCiAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MAkweDAyNTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCA4NzJjMWJkLi5mNTA1MDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC01MTMsNyArNTEzLDYgQEAKIHN0YXRpYyBpbnQgbWFjYl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgbWFjYiAqYnAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG1hY2IsIG5hcGkpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBicC0+ZGV2OwogCWludCB3b3JrX2RvbmU7CiAJdTMyIHN0YXR1czsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCmluZGV4IDdlMjRiNTAuLjcwZDNlZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC02MCw2ICs2MCw0NyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfYWRkKHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbikKK3sKKwlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0ID0gdmxhbi0+cG9ydDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdmxhbi0+ZGV2LT5kZXZfYWRkcjsKKworCWhsaXN0X2FkZF9oZWFkX3JjdSgmdmxhbi0+aGxpc3QsICZwb3J0LT52bGFuX2hhc2hbYWRkcls1XV0pOworfQorCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfZGVsKHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbikKK3sKKwlobGlzdF9kZWxfcmN1KCZ2bGFuLT5obGlzdCk7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hY3ZsYW5faGFzaF9jaGFuZ2VfYWRkcihzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJbWFjdmxhbl9oYXNoX2RlbCh2bGFuKTsKKwkvKiBOb3cgdGhhdCB3ZSBhcmUgdW5oYXNoZWQgaXQgaXMgc2FmZSB0byBjaGFuZ2UgdGhlIGRldmljZQorCSAqIGFkZHJlc3Mgd2l0aG91dCBjb25mdXNpbmcgcGFja2V0IGRlbGl2ZXJ5LgorCSAqLworCW1lbWNweSh2bGFuLT5kZXYtPmRldl9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisJbWFjdmxhbl9oYXNoX2FkZCh2bGFuKTsKK30KKworc3RhdGljIGludCBtYWN2bGFuX2FkZHJfYnVzeShjb25zdCBzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJLyogVGVzdCB0byBzZWUgaWYgdGhlIHNwZWNpZmllZCBtdWx0aWNhc3QgYWRkcmVzcyBpcworCSAqIGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yCisJICogYW5vdGhlciBtYWN2bGFuLgorCSAqLworCWlmIChtZW1jbXAocG9ydC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCisJCXJldHVybiAxOworCisJaWYgKG1hY3ZsYW5faGFzaF9sb29rdXAocG9ydCwgYWRkcikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG1hY3ZsYW5fYnJvYWRjYXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KQogewpAQCAtMTg0LDEwICsyMjUsMTMgQEAKIHN0YXRpYyBpbnQgbWFjdmxhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0ID0gdmxhbi0+cG9ydDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJkZXYgPSB2bGFuLT5sb3dlcmRldjsKIAlpbnQgZXJyOwogCisJZXJyID0gLUVCVVNZOworCWlmIChtYWN2bGFuX2FkZHJfYnVzeSh2bGFuLT5wb3J0LCBkZXYtPmRldl9hZGRyKSkKKwkJZ290byBvdXQ7CisKIAllcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0xOTYsOCArMjQwLDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGRlbF91bmljYXN0OwogCX0KLQotCWhsaXN0X2FkZF9oZWFkX3JjdSgmdmxhbi0+aGxpc3QsICZwb3J0LT52bGFuX2hhc2hbZGV2LT5kZXZfYWRkcls1XV0pOworCW1hY3ZsYW5faGFzaF9hZGQodmxhbik7CiAJcmV0dXJuIDA7CiAKIGRlbF91bmljYXN0OgpAQCAtMjE3LDggKzI2MCw3IEBACiAKIAlkZXZfdW5pY2FzdF9kZWxldGUobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAotCWhsaXN0X2RlbF9yY3UoJnZsYW4tPmhsaXN0KTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKKwltYWN2bGFuX2hhc2hfZGVsKHZsYW4pOwogCXJldHVybiAwOwogfQogCkBAIC0yMzIsMTYgKzI3NCwyMSBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCWdvdG8gb3V0OworCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCS8qIEp1c3QgY29weSBpbiB0aGUgbmV3IGFkZHJlc3MgKi8KKwkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQkvKiBSZWhhc2ggYW5kIHVwZGF0ZSB0aGUgZGV2aWNlIGZpbHRlcnMgKi8KKwkJaWYgKG1hY3ZsYW5fYWRkcl9idXN5KHZsYW4tPnBvcnQsIGFkZHItPnNhX2RhdGEpKQorCQkJcmV0dXJuIC1FQlVTWTsKIAotCWVyciA9IGRldl91bmljYXN0X2FkZChsb3dlcmRldiwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWRldl91bmljYXN0X2RlbGV0ZShsb3dlcmRldiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQlpZiAoKGVyciA9IGRldl91bmljYXN0X2FkZChsb3dlcmRldiwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pKSkKKwkJCXJldHVybiBlcnI7CiAKLW91dDoKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCQlkZXZfdW5pY2FzdF9kZWxldGUobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCQltYWN2bGFuX2hhc2hfY2hhbmdlX2FkZHIodmxhbiwgYWRkci0+c2FfZGF0YSk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC00NjEsMTIgKzUwOCwxMyBAQAogCWlmIChsb3dlcmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIERvbid0IGFsbG93IG1hY3ZsYW5zIG9uIHRvcCBvZiBvdGhlciBtYWN2bGFucyAtIGl0cyBub3QgcmVhbGx5Ci0JICogd3JvbmcsIGJ1dCBsb2NrZGVwIGNhbid0IGhhbmRsZSBpdCBhbmQgaXRzIG5vdCB1c2VmdWwgZm9yIGFueXRoaW5nCi0JICogeW91IGNvdWxkbid0IGRvIGRpcmVjdGx5IG9uIHRvcCBvZiB0aGUgcmVhbCBkZXZpY2UuCisJLyogV2hlbiBjcmVhdGluZyBtYWN2bGFucyBvbiB0b3Agb2Ygb3RoZXIgbWFjdmxhbnMgLSB1c2UKKwkgKiB0aGUgcmVhbCBkZXZpY2UgYXMgdGhlIGxvd2VyZGV2LgogCSAqLwotCWlmIChsb3dlcmRldi0+cnRubF9saW5rX29wcyA9PSBkZXYtPnJ0bmxfbGlua19vcHMpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChsb3dlcmRldi0+cnRubF9saW5rX29wcyA9PSBkZXYtPnJ0bmxfbGlua19vcHMpIHsKKwkJc3RydWN0IG1hY3ZsYW5fZGV2ICpsb3dlcnZsYW4gPSBuZXRkZXZfcHJpdihsb3dlcmRldik7CisJCWxvd2VyZGV2ID0gbG93ZXJ2bGFuLT5sb3dlcmRldjsKKwl9CiAKIAlpZiAoIXRiW0lGTEFfTVRVXSkKIAkJZGV2LT5tdHUgPSBsb3dlcmRldi0+bXR1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWlwc25ldC5jIGIvZHJpdmVycy9uZXQvbWlwc25ldC5jCmluZGV4IDRlN2E1ZmEuLjY2NDgzNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21pcHNuZXQuYworKysgYi9kcml2ZXJzL25ldC9taXBzbmV0LmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogewogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IG1pcHNuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJaW50IGVycjsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZXRkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgbmV0ZGV2KTsKIAogCW5ldGRldi0+b3BlbgkJCT0gbWlwc25ldF9vcGVuOwogCW5ldGRldi0+c3RvcAkJCT0gbWlwc25ldF9jbG9zZTsKQEAgLTI5MywyMyArMjkzLDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgbWlwc25ldF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1pcHNuZXRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgc2l6ZW9mKHN0cnVjdCBtaXBzbmV0X3JlZ3MpKTsKIAlmcmVlX25ldGRldihkZXYpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1pcHNuZXRfZHJpdmVyID0gewotCS5uYW1lCT0gbWlwc25ldF9zdHJpbmcsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBtaXBzbmV0X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChtaXBzbmV0X2RldmljZV9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWlwc25ldF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gbWlwc25ldF9zdHJpbmcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtaXBzbmV0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWlwc25ldF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pcHNuZXRfaW5pdF9tb2R1bGUodm9pZCkKQEAgLTMxOSw3ICszMjEsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIk1JUFNOZXQgRXRoZXJuZXQgZHJpdmVyLiBWZXJzaW9uOiAlcy4gIgogCSAgICAgICAiKGMpMjAwNSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLlxuIiwgTUlQU05FVF9WRVJTSU9OKTsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCkBAIC0zMjgsNyArMzMwLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG1pcHNuZXRfZXhpdF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtaXBzbmV0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG1pcHNuZXRfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKaW5kZXggYTdhOTdiZi4uMjEwNDBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9tbHg0L01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogb2JqLSQoQ09ORklHX01MWDRfQ09SRSkJCSs9IG1seDRfY29yZS5vCiAKIG1seDRfY29yZS15IDo9CWFsbG9jLm8gY2F0YXMubyBjbWQubyBjcS5vIGVxLm8gZncubyBpY20ubyBpbnRmLm8gbWFpbi5vIG1jZy5vIFwKLQkJbXIubyBwZC5vIHBvcnQubyBwcm9maWxlLm8gcXAubyByZXNldC5vIHNycS5vCisJCW1yLm8gcGQubyBwb3J0Lm8gcHJvZmlsZS5vIHFwLm8gcmVzZXQubyBzZW5zZS5vIHNycS5vCiAKIG9iai0kKENPTkZJR19NTFg0X0VOKSAgICAgICAgICAgICAgICs9IG1seDRfZW4ubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMgYi9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKaW5kZXggZjA5NGVlMC4uYWE5Njc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYwpAQCAtNDIsNyArNDIsNiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhjYXRhc19sb2NrKTsKIAogc3RhdGljIExJU1RfSEVBRChjYXRhc19saXN0KTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2F0YXNfd3E7CiBzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGNhdGFzX3dvcms7CiAKIHN0YXRpYyBpbnQgaW50ZXJuYWxfZXJyX3Jlc2V0ID0gMTsKQEAgLTc3LDcgKzc2LDcgQEAKIAkJCWxpc3RfYWRkKCZwcml2LT5jYXRhc19lcnIubGlzdCwgJmNhdGFzX2xpc3QpOwogCQkJc3Bpbl91bmxvY2soJmNhdGFzX2xvY2spOwogCi0JCQlxdWV1ZV93b3JrKGNhdGFzX3dxLCAmY2F0YXNfd29yayk7CisJCQlxdWV1ZV93b3JrKG1seDRfd3EsICZjYXRhc193b3JrKTsKIAkJfQogCX0gZWxzZQogCQltb2RfdGltZXIoJnByaXYtPmNhdGFzX2Vyci50aW1lciwKQEAgLTE0NiwxOCArMTQ1LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmNhdGFzX2xvY2spOwogfQogCi1pbnQgX19pbml0IG1seDRfY2F0YXNfaW5pdCh2b2lkKQordm9pZCAgX19pbml0IG1seDRfY2F0YXNfaW5pdCh2b2lkKQogewogCUlOSVRfV09SSygmY2F0YXNfd29yaywgY2F0YXNfcmVzZXQpOwotCi0JY2F0YXNfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibWx4NF9lcnIiKTsKLQlpZiAoIWNhdGFzX3dxKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIG1seDRfY2F0YXNfY2xlYW51cCh2b2lkKQotewotCWRlc3Ryb3lfd29ya3F1ZXVlKGNhdGFzX3dxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZXEuYyBiL2RyaXZlcnMvbmV0L21seDQvZXEuYwppbmRleCAyYzE5YmZmN2MuLjg4MzBkY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZXEuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCWludCBjcW47CiAJaW50IGVxZXNfZm91bmQgPSAwOwogCWludCBzZXRfY2kgPSAwOworCWludCBwb3J0OwogCiAJd2hpbGUgKChlcWUgPSBuZXh0X2VxZV9zdyhlcSkpKSB7CiAJCS8qCkBAIC0yMDMsMTEgKzIwNCwxNiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfUE9SVF9DSEFOR0U6Ci0JCQltbHg0X2Rpc3BhdGNoX2V2ZW50KGRldiwKLQkJCQkJICAgIGVxZS0+c3VidHlwZSA9PSBNTFg0X1BPUlRfQ0hBTkdFX1NVQlRZUEVfQUNUSVZFID8KLQkJCQkJICAgIE1MWDRfREVWX0VWRU5UX1BPUlRfVVAgOgotCQkJCQkgICAgTUxYNF9ERVZfRVZFTlRfUE9SVF9ET1dOLAotCQkJCQkgICAgYmUzMl90b19jcHUoZXFlLT5ldmVudC5wb3J0X2NoYW5nZS5wb3J0KSA+PiAyOCk7CisJCQlwb3J0ID0gYmUzMl90b19jcHUoZXFlLT5ldmVudC5wb3J0X2NoYW5nZS5wb3J0KSA+PiAyODsKKwkJCWlmIChlcWUtPnN1YnR5cGUgPT0gTUxYNF9QT1JUX0NIQU5HRV9TVUJUWVBFX0RPV04pIHsKKwkJCQltbHg0X2Rpc3BhdGNoX2V2ZW50KGRldiwgTUxYNF9ERVZfRVZFTlRfUE9SVF9ET1dOLAorCQkJCQkJICAgIHBvcnQpOworCQkJCW1seDRfcHJpdihkZXYpLT5zZW5zZS5kb19zZW5zZV9wb3J0W3BvcnRdID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsIE1MWDRfREVWX0VWRU5UX1BPUlRfVVAsCisJCQkJCQkgICAgcG9ydCk7CisJCQkJbWx4NF9wcml2KGRldiktPnNlbnNlLmRvX3NlbnNlX3BvcnRbcG9ydF0gPSAwOworCQkJfQogCQkJYnJlYWs7CiAKIAkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfQ1FfRVJST1I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDZlZjI0OTAuLmE2NmY1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC01MSw2ICs1MSw4IEBACiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptbHg0X3dxOworCiAjaWZkZWYgQ09ORklHX01MWDRfREVCVUcKIAogaW50IG1seDRfZGVidWdfbGV2ZWwgPSAwOwpAQCAtOTgsMjQgKzEwMCwyMyBAQAogTU9EVUxFX1BBUk1fREVTQyh1c2VfcHJpbywgIkVuYWJsZSBzdGVlcmluZyBieSBWTEFOIHByaW9yaXR5IG9uIEVUSCBwb3J0cyAiCiAJCSAgIigwLzEsIGRlZmF1bHQgMCkiKTsKIAotc3RhdGljIGludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAotCQkJCSAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKQoraW50IG1seDRfY2hlY2tfcG9ydF9wYXJhbXMoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgICBlbnVtIG1seDRfcG9ydF90eXBlICpwb3J0X3R5cGUpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0cyAtIDE7IGkrKykgewotCQlpZiAocG9ydF90eXBlW2ldICE9IHBvcnRfdHlwZVtpKzFdICYmCi0JCSAgICAhKGRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX0RQRFApKSB7Ci0JCQltbHg0X2VycihkZXYsICJPbmx5IHNhbWUgcG9ydCB0eXBlcyBzdXBwb3J0ZWQgIgotCQkJCSAib24gdGhpcyBIQ0EsIGFib3J0aW5nLlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBvcnRfdHlwZVtpXSAhPSBwb3J0X3R5cGVbaSArIDFdKSB7CisJCQlpZiAoIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgeworCQkJCW1seDRfZXJyKGRldiwgIk9ubHkgc2FtZSBwb3J0IHR5cGVzIHN1cHBvcnRlZCAiCisJCQkJCSAib24gdGhpcyBIQ0EsIGFib3J0aW5nLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAocG9ydF90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0VUSCAmJgorCQkJICAgIHBvcnRfdHlwZVtpICsgMV0gPT0gTUxYNF9QT1JUX1RZUEVfSUIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9Ci0JaWYgKChwb3J0X3R5cGVbMF0gPT0gTUxYNF9QT1JUX1RZUEVfRVRIKSAmJgotCSAgICAocG9ydF90eXBlWzFdID09IE1MWDRfUE9SVF9UWVBFX0lCKSkgewotCQltbHg0X2VycihkZXYsICJldGgtaWIgY29uZmlndXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKIAkJaWYgKCEocG9ydF90eXBlW2ldICYgZGV2LT5jYXBzLnN1cHBvcnRlZF90eXBlW2krMV0pKSB7CkBAIC0yMjUsNiArMjI2LDkgQEAKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbaV0gPSBNTFg0X1BPUlRfVFlQRV9JQjsKIAkJZWxzZQogCQkJZGV2LT5jYXBzLnBvcnRfdHlwZVtpXSA9IE1MWDRfUE9SVF9UWVBFX0VUSDsKKwkJZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaV0gPSBkZXYtPmNhcHMucG9ydF90eXBlW2ldOworCQltbHg0X3ByaXYoZGV2KS0+c2Vuc2Uuc2Vuc2VfYWxsb3dlZFtpXSA9CisJCQlkZXYtPmNhcHMuc3VwcG9ydGVkX3R5cGVbaV0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTzsKIAogCQlpZiAoZGV2LT5jYXBzLmxvZ19udW1fbWFjcyA+IGRldl9jYXAtPmxvZ19tYXhfbWFjc1tpXSkgewogCQkJZGV2LT5jYXBzLmxvZ19udW1fbWFjcyA9IGRldl9jYXAtPmxvZ19tYXhfbWFjc1tpXTsKQEAgLTI2MywxNCArMjY3LDE2IEBACiAgKiBDaGFuZ2UgdGhlIHBvcnQgY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlLgogICogRXZlcnkgdXNlciBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgaG9sZCB0aGUgcG9ydCBtdXRleC4KICAqLwotc3RhdGljIGludCBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAotCQkJCSAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlcykKK2ludCBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlcykKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgY2hhbmdlID0gMDsKIAlpbnQgcG9ydDsKIAogCWZvciAocG9ydCA9IDA7IHBvcnQgPCAgZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKSB7CisJCS8qIENoYW5nZSB0aGUgcG9ydCB0eXBlIG9ubHkgaWYgdGhlIG5ldyB0eXBlIGlzIGRpZmZlcmVudAorCQkgKiBmcm9tIHRoZSBjdXJyZW50LCBhbmQgbm90IHNldCB0byBBdXRvICovCiAJCWlmIChwb3J0X3R5cGVzW3BvcnRdICE9IGRldi0+Y2Fwcy5wb3J0X3R5cGVbcG9ydCArIDFdKSB7CiAJCQljaGFuZ2UgPSAxOwogCQkJZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0ICsgMV0gPSBwb3J0X3R5cGVzW3BvcnRdOwpAQCAtMzAyLDEwICszMDgsMTcgQEAKIAlzdHJ1Y3QgbWx4NF9wb3J0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IG1seDRfcG9ydF9pbmZvLAogCQkJCQkJICAgcG9ydF9hdHRyKTsKIAlzdHJ1Y3QgbWx4NF9kZXYgKm1kZXYgPSBpbmZvLT5kZXY7CisJY2hhciB0eXBlWzhdOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCi0JCSAgICAgICBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9JQiA/Ci0JCSAgICAgICAiaWIiIDogImV0aCIpOworCXNwcmludGYodHlwZSwgIiVzIiwKKwkJKG1kZXYtPmNhcHMucG9ydF90eXBlW2luZm8tPnBvcnRdID09IE1MWDRfUE9SVF9UWVBFX0lCKSA/CisJCSJpYiIgOiAiZXRoIik7CisJaWYgKG1kZXYtPmNhcHMucG9zc2libGVfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9BVVRPKQorCQlzcHJpbnRmKGJ1ZiwgImF1dG8gKCVzKVxuIiwgdHlwZSk7CisJZWxzZQorCQlzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB0eXBlKTsKKworCXJldHVybiBzdHJsZW4oYnVmKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3BvcnRfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0zMTcsNiArMzMwLDcgQEAKIAlzdHJ1Y3QgbWx4NF9kZXYgKm1kZXYgPSBpbmZvLT5kZXY7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihtZGV2KTsKIAllbnVtIG1seDRfcG9ydF90eXBlIHR5cGVzW01MWDRfTUFYX1BPUlRTXTsKKwllbnVtIG1seDRfcG9ydF90eXBlIG5ld190eXBlc1tNTFg0X01BWF9QT1JUU107CiAJaW50IGk7CiAJaW50IGVyciA9IDA7CiAKQEAgLTMyNCwyNiArMzM4LDU2IEBACiAJCWluZm8tPnRtcF90eXBlID0gTUxYNF9QT1JUX1RZUEVfSUI7CiAJZWxzZSBpZiAoIXN0cmNtcChidWYsICJldGhcbiIpKQogCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0VUSDsKKwllbHNlIGlmICghc3RyY21wKGJ1ZiwgImF1dG9cbiIpKQorCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0FVVE87CiAJZWxzZSB7CiAJCW1seDRfZXJyKG1kZXYsICIlcyBpcyBub3Qgc3VwcG9ydGVkIHBvcnQgdHlwZVxuIiwgYnVmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJbWx4NF9zdG9wX3NlbnNlKG1kZXYpOwogCW11dGV4X2xvY2soJnByaXYtPnBvcnRfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKQotCQl0eXBlc1tpXSA9IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA/IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA6Ci0JCQkJCW1kZXYtPmNhcHMucG9ydF90eXBlW2krMV07CisJLyogUG9zc2libGUgdHlwZSBpcyBhbHdheXMgdGhlIG9uZSB0aGF0IHdhcyBkZWxpdmVyZWQgKi8KKwltZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaW5mby0+cG9ydF0gPSBpbmZvLT50bXBfdHlwZTsKIAotCWVyciA9IG1seDRfY2hlY2tfcG9ydF9wYXJhbXMobWRldiwgdHlwZXMpOworCWZvciAoaSA9IDA7IGkgPCBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CisJCXR5cGVzW2ldID0gcHJpdi0+cG9ydFtpKzFdLnRtcF90eXBlID8gcHJpdi0+cG9ydFtpKzFdLnRtcF90eXBlIDoKKwkJCQkJbWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2krMV07CisJCWlmICh0eXBlc1tpXSA9PSBNTFg0X1BPUlRfVFlQRV9BVVRPKQorCQkJdHlwZXNbaV0gPSBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpKzFdOworCX0KKworCWlmICghKG1kZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgeworCQlmb3IgKGkgPSAxOyBpIDw9IG1kZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKKwkJCWlmIChtZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaV0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykgeworCQkJCW1kZXYtPmNhcHMucG9zc2libGVfdHlwZVtpXSA9IG1kZXYtPmNhcHMucG9ydF90eXBlW2ldOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisJaWYgKGVycikgeworCQltbHg0X2VycihtZGV2LCAiQXV0byBzZW5zaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBIQ0EuICIKKwkJCSAgICAgICAiU2V0IG9ubHkgJ2V0aCcgb3IgJ2liJyBmb3IgYm90aCBwb3J0cyAiCisJCQkgICAgICAgIihzaG91bGQgYmUgdGhlIHNhbWUpXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWx4NF9kb19zZW5zZV9wb3J0cyhtZGV2LCBuZXdfdHlwZXMsIHR5cGVzKTsKKworCWVyciA9IG1seDRfY2hlY2tfcG9ydF9wYXJhbXMobWRldiwgbmV3X3R5cGVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWZvciAoaSA9IDE7IGkgPD0gbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKLQkJcHJpdi0+cG9ydFtpXS50bXBfdHlwZSA9IDA7CisJLyogV2UgYXJlIGFib3V0IHRvIGFwcGx5IHRoZSBjaGFuZ2VzIGFmdGVyIHRoZSBjb25maWd1cmF0aW9uCisJICogd2FzIHZlcmlmaWVkLCBubyBuZWVkIHRvIHJlbWVtYmVyIHRoZSB0ZW1wb3JhcnkgdHlwZXMKKwkgKiBhbnkgbW9yZSAqLworCWZvciAoaSA9IDA7IGkgPCBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKQorCQlwcml2LT5wb3J0W2kgKyAxXS50bXBfdHlwZSA9IDA7CiAKLQllcnIgPSBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKG1kZXYsIHR5cGVzKTsKKwllcnIgPSBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKG1kZXYsIG5ld190eXBlcyk7CiAKIG91dDoKKwltbHg0X3N0YXJ0X3NlbnNlKG1kZXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+cG9ydF9tdXRleCk7CiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQpAQCAtMTExNyw2ICsxMTYxLDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wb3J0OwogCisJbWx4NF9zZW5zZV9pbml0KGRldik7CisJbWx4NF9zdGFydF9zZW5zZShkZXYpOworCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTExODIsNiArMTIyOSw3IEBACiAJaW50IHA7CiAKIAlpZiAoZGV2KSB7CisJCW1seDRfc3RvcF9zZW5zZShkZXYpOwogCQltbHg0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiAKIAkJZm9yIChwID0gMTsgcCA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyBwKyspIHsKQEAgLTEyMzAsNiArMTI3OCw4IEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzNjKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIFFEUiBQQ0llIGdlbjIgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNjgpIH0sIC8qIE1UMjU0MDggIkhlcm1vbiIgRU4gMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzUwKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIEVOIDEwR2lnRSBQQ0llIGdlbjIgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNzIpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UIDEwR2lnRSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc1YSkgfSwgLyogTVQyNTQ1OCBDb25uZWN0WCBFTiAxMEdCQVNFLVQrR2VuMiAxMEdpZ0UgKi8KIAl7IDAsIH0KIH07CiAKQEAgLTEyNjQsOSArMTMxNCwxMSBAQAogCWlmIChtbHg0X3ZlcmlmeV9wYXJhbXMoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBtbHg0X2NhdGFzX2luaXQoKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCW1seDRfY2F0YXNfaW5pdCgpOworCisJbWx4NF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJtbHg0Iik7CisJaWYgKCFtbHg0X3dxKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1seDRfZHJpdmVyKTsKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CkBAIC0xMjc1LDcgKzEzMjcsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IG1seDRfY2xlYW51cCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWx4NF9kcml2ZXIpOwotCW1seDRfY2F0YXNfY2xlYW51cCgpOworCWRlc3Ryb3lfd29ya3F1ZXVlKG1seDRfd3EpOwogfQogCiBtb2R1bGVfaW5pdChtbHg0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmggYi9kcml2ZXJzL25ldC9tbHg0L21seDQuaAppbmRleCBlMDIxM2JhZC4uNWJkNzljMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbWx4NC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbHg0L2RyaXZlci5oPgpAQCAtMjc2LDYgKzI3NywxMyBAQAogCXN0cnVjdCBtbHg0X3ZsYW5fdGFibGUJdmxhbl90YWJsZTsKIH07CiAKK3N0cnVjdCBtbHg0X3NlbnNlIHsKKwlzdHJ1Y3QgbWx4NF9kZXYJCSpkZXY7CisJdTgJCQlkb19zZW5zZV9wb3J0W01MWDRfTUFYX1BPUlRTICsgMV07CisJdTgJCQlzZW5zZV9hbGxvd2VkW01MWDRfTUFYX1BPUlRTICsgMV07CisJc3RydWN0IGRlbGF5ZWRfd29yawlzZW5zZV9wb2xsOworfTsKKwogc3RydWN0IG1seDRfcHJpdiB7CiAJc3RydWN0IG1seDRfZGV2CQlkZXY7CiAKQEAgLTMwNSw2ICszMTMsNyBAQAogCXN0cnVjdCBtbHg0X3VhcgkJZHJpdmVyX3VhcjsKIAl2b2lkIF9faW9tZW0JICAgICAgICprYXI7CiAJc3RydWN0IG1seDRfcG9ydF9pbmZvCXBvcnRbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAgICAgICBzZW5zZTsKIAlzdHJ1Y3QgbXV0ZXgJCXBvcnRfbXV0ZXg7CiB9OwogCkBAIC0zMTMsNiArMzIyLDEwIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtbHg0X3ByaXYsIGRldik7CiB9CiAKKyNkZWZpbmUgTUxYNF9TRU5TRV9SQU5HRQkoSFogKiAzKQorCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1seDRfd3E7CisKIHUzMiBtbHg0X2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCk7CiB2b2lkIG1seDRfYml0bWFwX2ZyZWUoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXAsIHUzMiBvYmopOwogdTMyIG1seDRfYml0bWFwX2FsbG9jX3JhbmdlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCBpbnQgY250LCBpbnQgYWxpZ24pOwpAQCAtMzQ2LDggKzM1OSw3IEBACiAKIHZvaWQgbWx4NF9zdGFydF9jYXRhc19wb2xsKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF9zdG9wX2NhdGFzX3BvbGwoc3RydWN0IG1seDRfZGV2ICpkZXYpOwotaW50IG1seDRfY2F0YXNfaW5pdCh2b2lkKTsKLXZvaWQgbWx4NF9jYXRhc19jbGVhbnVwKHZvaWQpOwordm9pZCBtbHg0X2NhdGFzX2luaXQodm9pZCk7CiBpbnQgbWx4NF9yZXN0YXJ0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgbWx4NF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogdm9pZCBtbHg0X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKQEAgLTM3OSw2ICszOTEsMTcgQEAKIAogdm9pZCBtbHg0X2hhbmRsZV9jYXRhc19lcnIoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogCit2b2lkIG1seDRfZG9fc2Vuc2VfcG9ydHMoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqc3R5cGUsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqZGVmYXVsdHMpOwordm9pZCBtbHg0X3N0YXJ0X3NlbnNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9zdG9wX3NlbnNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9zZW5zZV9pbml0KHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKTsKK2ludCBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlcyk7CisKIHZvaWQgbWx4NF9pbml0X21hY190YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbWFjX3RhYmxlICp0YWJsZSk7CiB2b2lkIG1seDRfaW5pdF92bGFuX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF92bGFuX3RhYmxlICp0YWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jIGIvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKaW5kZXggMGEwNTdlNS4uN2NjZTMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKQEAgLTI5OCwyMCArMjk4LDE3IEBACiB7CiAJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CiAJaW50IGVycjsKLQl1OCBpc19ldGggPSBkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID09IE1MWDRfUE9SVF9UWVBFX0VUSDsKIAogCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CiAJaWYgKElTX0VSUihtYWlsYm94KSkKIAkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CiAKIAltZW1zZXQobWFpbGJveC0+YnVmLCAwLCAyNTYpOwotCWlmIChpc19ldGgpIHsKLQkJKCh1OCAqKSBtYWlsYm94LT5idWYpWzNdID0gNjsKLQkJKChfX2JlMTYgKikgbWFpbGJveC0+YnVmKVs0XSA9IGNwdV90b19iZTE2KDEgPDwgMTUpOwotCQkoKF9fYmUxNiAqKSBtYWlsYm94LT5idWYpWzZdID0gY3B1X3RvX2JlMTYoMSA8PCAxNSk7Ci0JfSBlbHNlCi0JCSgoX19iZTMyICopIG1haWxib3gtPmJ1ZilbMV0gPSBkZXYtPmNhcHMuaWJfcG9ydF9kZWZfY2FwW3BvcnRdOwotCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCBwb3J0LCBpc19ldGgsIE1MWDRfQ01EX1NFVF9QT1JULAorCWlmIChkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID09IE1MWDRfUE9SVF9UWVBFX0VUSCkKKwkJcmV0dXJuIDA7CisKKwkoKF9fYmUzMiAqKSBtYWlsYm94LT5idWYpWzFdID0gZGV2LT5jYXBzLmliX3BvcnRfZGVmX2NhcFtwb3J0XTsKKwllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgcG9ydCwgMCwgTUxYNF9DTURfU0VUX1BPUlQsCiAJCSAgICAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0IpOwogCiAJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1MDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisKKyNpbmNsdWRlICJtbHg0LmgiCisKK3N0YXRpYyBpbnQgbWx4NF9TRU5TRV9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnR5cGUpCit7CisJdTY0IG91dF9wYXJhbTsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IG1seDRfY21kX2ltbShkZXYsIDAsICZvdXRfcGFyYW0sIHBvcnQsIDAsCisJCQkgICBNTFg0X0NNRF9TRU5TRV9QT1JULCBNTFg0X0NNRF9USU1FX0NMQVNTX0IpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiU2Vuc2UgY29tbWFuZCBmYWlsZWQgZm9yIHBvcnQ6ICVkXG4iLCBwb3J0KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAob3V0X3BhcmFtID4gMikgeworCQltbHg0X2VycihkZXYsICJTZW5zZSByZXR1cm5lZCBpbGxlZ2FsIHZhbHVlOiAweCVsbHhcbiIsIG91dF9wYXJhbSk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJKnR5cGUgPSBvdXRfcGFyYW07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWx4NF9kb19zZW5zZV9wb3J0cyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSBlbnVtIG1seDRfcG9ydF90eXBlICpzdHlwZSwKKwkJCSBlbnVtIG1seDRfcG9ydF90eXBlICpkZWZhdWx0cykKK3sKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSAmbWx4NF9wcml2KGRldiktPnNlbnNlOworCWludCBlcnI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykgeworCQlzdHlwZVtpIC0gMV0gPSAwOworCQlpZiAoc2Vuc2UtPmRvX3NlbnNlX3BvcnRbaV0gJiYgc2Vuc2UtPnNlbnNlX2FsbG93ZWRbaV0gJiYKKwkJICAgIGRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE8pIHsKKwkJCWVyciA9IG1seDRfU0VOU0VfUE9SVChkZXYsIGksICZzdHlwZVtpIC0gMV0pOworCQkJaWYgKGVycikKKwkJCQlzdHlwZVtpIC0gMV0gPSBkZWZhdWx0c1tpIC0gMV07CisJCX0gZWxzZQorCQkJc3R5cGVbaSAtIDFdID0gZGVmYXVsdHNbaSAtIDFdOworCX0KKworCS8qCisJICogQWRqdXN0IHBvcnQgY29uZmlndXJhdGlvbjoKKwkgKiBJZiBwb3J0IDEgc2Vuc2VkIG5vdGhpbmcgYW5kIHBvcnQgMiBpcyBJQiwgc2V0IGJvdGggYXMgSUIKKwkgKiBJZiBwb3J0IDIgc2Vuc2VkIG5vdGhpbmcgYW5kIHBvcnQgMSBpcyBFdGgsIHNldCBib3RoIGFzIEV0aAorCSAqLworCWlmIChzdHlwZVswXSA9PSBNTFg0X1BPUlRfVFlQRV9FVEgpIHsKKwkJZm9yIChpID0gMTsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKKwkJCXN0eXBlW2ldID0gc3R5cGVbaV0gPyBzdHlwZVtpXSA6IE1MWDRfUE9SVF9UWVBFX0VUSDsKKwl9CisJaWYgKHN0eXBlW2Rldi0+Y2Fwcy5udW1fcG9ydHMgLSAxXSA9PSBNTFg0X1BPUlRfVFlQRV9JQikgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0cyAtIDE7IGkrKykKKwkJCXN0eXBlW2ldID0gc3R5cGVbaV0gPyBzdHlwZVtpXSA6IE1MWDRfUE9SVF9UWVBFX0lCOworCX0KKworCS8qCisJICogSWYgc2Vuc2VkIG5vdGhpbmcsIHJlbWFpbiBpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisJICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKKwkJc3R5cGVbaV0gPSBzdHlwZVtpXSA/IHN0eXBlW2ldIDogZGVmYXVsdHNbaV07CisKK30KKworc3RhdGljIHZvaWQgbWx4NF9zZW5zZV9wb3J0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSBjb250YWluZXJfb2YoZGVsYXksIHN0cnVjdCBtbHg0X3NlbnNlLAorCQkJCQkJc2Vuc2VfcG9sbCk7CisJc3RydWN0IG1seDRfZGV2ICpkZXYgPSBzZW5zZS0+ZGV2OworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwllbnVtIG1seDRfcG9ydF90eXBlIHN0eXBlW01MWDRfTUFYX1BPUlRTXTsKKworCW11dGV4X2xvY2soJnByaXYtPnBvcnRfbXV0ZXgpOworCW1seDRfZG9fc2Vuc2VfcG9ydHMoZGV2LCBzdHlwZSwgJmRldi0+Y2Fwcy5wb3J0X3R5cGVbMV0pOworCisJaWYgKG1seDRfY2hlY2tfcG9ydF9wYXJhbXMoZGV2LCBzdHlwZSkpCisJCWdvdG8gc2Vuc2VfYWdhaW47CisKKwlpZiAobWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhkZXYsIHN0eXBlKSkKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGNoYW5nZSBwb3J0X3R5cGVzXG4iKTsKKworc2Vuc2VfYWdhaW46CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsobWx4NF93cSAsICZzZW5zZS0+c2Vuc2VfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoTUxYNF9TRU5TRV9SQU5HRSkpOworfQorCit2b2lkIG1seDRfc3RhcnRfc2Vuc2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X3NlbnNlICpzZW5zZSA9ICZwcml2LT5zZW5zZTsKKworCWlmICghKGRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX0RQRFApKQorCQlyZXR1cm47CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsobWx4NF93cSAsICZzZW5zZS0+c2Vuc2VfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoTUxYNF9TRU5TRV9SQU5HRSkpOworfQorCit2b2lkIG1seDRfc3RvcF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm1seDRfcHJpdihkZXYpLT5zZW5zZS5zZW5zZV9wb2xsKTsKK30KKwordm9pZCAgbWx4NF9zZW5zZV9pbml0KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSAmcHJpdi0+c2Vuc2U7CisJaW50IHBvcnQ7CisKKwlzZW5zZS0+ZGV2ID0gZGV2OworCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKQorCQlzZW5zZS0+ZG9fc2Vuc2VfcG9ydFtwb3J0XSA9IDE7CisKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZzZW5zZS0+c2Vuc2VfcG9sbCwgbWx4NF9zZW5zZV9wb3J0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IGJiOTY5MzEuLmE1NmQ5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMzUxLDEwICszNTEsOCBAQAogCWludCByeF9kZXNjX2FyZWFfc2l6ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKIAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF9MUk8KIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKIAlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19hcnJbOF07Ci0jZW5kaWYKIH07CiAKIHN0cnVjdCB0eF9xdWV1ZSB7CkBAIC01MTYsNyArNTE0LDYgQEAKIAogCiAvKiByeCBuYXBpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfTFJPCiBzdGF0aWMgaW50CiBtdjY0M3h4X2dldF9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwgdm9pZCAqKnRjcGgsCiAJCSAgICAgICB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKQEAgLTU0Miw3ICs1MzksNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCByeHFfcHJvY2VzcyhzdHJ1Y3QgcnhfcXVldWUgKnJ4cSwgaW50IGJ1ZGdldCkKIHsKQEAgLTYxMiwxMyArNjA4LDExIEBACiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBtcC0+ZGV2KTsKIAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF9MUk8KIAkJaWYgKHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPICYmCiAJCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewogCQkJbHJvX3JlY2VpdmVfc2tiKCZyeHEtPmxyb19tZ3IsIHNrYiwgKHZvaWQgKiljbWRfc3RzKTsKIAkJCWxyb19mbHVzaF9uZWVkZWQgPSAxOwogCQl9IGVsc2UKLSNlbmRpZgogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAogCQljb250aW51ZTsKQEAgLTY0MCwxMCArNjM0LDggQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF9MUk8KIAlpZiAobHJvX2ZsdXNoX25lZWRlZCkKIAkJbHJvX2ZsdXNoX2FsbCgmcnhxLT5scm9fbWdyKTsKLSNlbmRpZgogCiAJaWYgKHJ4IDwgYnVkZ2V0KQogCQltcC0+d29ya19yeCAmPSB+KDEgPDwgcnhxLT5pbmRleCk7CkBAIC0xMjMxLDcgKzEyMjMsNiBAQAogCXUzMiBscm9fbm9fZGVzYyA9IDA7CiAJaW50IGk7CiAKLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfTFJPCiAJZm9yIChpID0gMDsgaSA8IG1wLT5yeHFfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgcnhfcXVldWUgKnJ4cSA9IG1wLT5yeHEgKyBpOwogCkBAIC0xMjM5LDcgKzEyMzAsNiBAQAogCQlscm9fZmx1c2hlZCArPSByeHEtPmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKIAkJbHJvX25vX2Rlc2MgKz0gcnhxLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CiAJfQotI2VuZGlmCiAKIAltcC0+bHJvX2NvdW50ZXJzLmxyb19hZ2dyZWdhdGVkID0gbHJvX2FnZ3JlZ2F0ZWQ7CiAJbXAtPmxyb19jb3VudGVycy5scm9fZmx1c2hlZCA9IGxyb19mbHVzaGVkOwpAQCAtMTI2Myw3ICsxMjUzLDcgQEAKIHsKIAlzdHJ1Y3QgbWliX2NvdW50ZXJzICpwID0gJm1wLT5taWJfY291bnRlcnM7CiAKLQlzcGluX2xvY2soJm1wLT5taWJfY291bnRlcnNfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZtcC0+bWliX2NvdW50ZXJzX2xvY2spOwogCXAtPmdvb2Rfb2N0ZXRzX3JlY2VpdmVkICs9IG1pYl9yZWFkKG1wLCAweDAwKTsKIAlwLT5nb29kX29jdGV0c19yZWNlaXZlZCArPSAodTY0KW1pYl9yZWFkKG1wLCAweDA0KSA8PCAzMjsKIAlwLT5iYWRfb2N0ZXRzX3JlY2VpdmVkICs9IG1pYl9yZWFkKG1wLCAweDA4KTsKQEAgLTEyOTYsNyArMTI4Niw3IEBACiAJcC0+YmFkX2NyY19ldmVudCArPSBtaWJfcmVhZChtcCwgMHg3NCk7CiAJcC0+Y29sbGlzaW9uICs9IG1pYl9yZWFkKG1wLCAweDc4KTsKIAlwLT5sYXRlX2NvbGxpc2lvbiArPSBtaWJfcmVhZChtcCwgMHg3Yyk7Ci0Jc3Bpbl91bmxvY2soJm1wLT5taWJfY291bnRlcnNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1wLT5taWJfY291bnRlcnNfbG9jayk7CiAKIAltb2RfdGltZXIoJm1wLT5taWJfY291bnRlcnNfdGltZXIsIGppZmZpZXMgKyAzMCAqIEhaKTsKIH0KQEAgLTE4MzEsNyArMTgyMSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQltY19zcGVjID0ga21hbGxvYygweDIwMCwgR0ZQX0tFUk5FTCk7CisJbWNfc3BlYyA9IGttYWxsb2MoMHgyMDAsIEdGUF9BVE9NSUMpOwogCWlmIChtY19zcGVjID09IE5VTEwpCiAJCWdvdG8gb29tOwogCW1jX290aGVyID0gbWNfc3BlYyArICgweDEwMCA+PiAyKTsKQEAgLTE5MzksNyArMTkyOSw2IEBACiAJCQkJCW5leHRpICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfTFJPCiAJcnhxLT5scm9fbWdyLmRldiA9IG1wLT5kZXY7CiAJbWVtc2V0KCZyeHEtPmxyb19tZ3Iuc3RhdHMsIDAsIHNpemVvZihyeHEtPmxyb19tZ3Iuc3RhdHMpKTsKIAlyeHEtPmxyb19tZ3IuZmVhdHVyZXMgPSBMUk9fRl9OQVBJOwpAQCAtMTk1Miw3ICsxOTQxLDYgQEAKIAlyeHEtPmxyb19tZ3IuZ2V0X3NrYl9oZWFkZXIgPSBtdjY0M3h4X2dldF9za2JfaGVhZGVyOwogCiAJbWVtc2V0KCZyeHEtPmxyb19hcnIsIDAsIHNpemVvZihyeHEtPmxyb19hcnIpKTsKLSNlbmRpZgogCiAJcmV0dXJuIDA7CiAKQEAgLTIzMDEsMTEgKzIyODksNiBAQAogCX0KIAogCS8qCi0JICogQWRkIGNvbmZpZ3VyZWQgdW5pY2FzdCBhZGRyZXNzIHRvIGFkZHJlc3MgZmlsdGVyIHRhYmxlLgotCSAqLwotCW12NjQzeHhfZXRoX3Byb2dyYW1fdW5pY2FzdF9maWx0ZXIobXAtPmRldik7Ci0KLQkvKgogCSAqIFJlY2VpdmUgYWxsIHVubWF0Y2hlZCB1bmljYXN0LCBUQ1AsIFVEUCwgQlBEVSBhbmQgYnJvYWRjYXN0CiAJICogZnJhbWVzIHRvIFJYIHF1ZXVlICMwLCBhbmQgaW5jbHVkZSB0aGUgcHNldWRvLWhlYWRlciB3aGVuCiAJICogY2FsY3VsYXRpbmcgcmVjZWl2ZSBjaGVja3N1bXMuCkBAIC0yMzE4LDYgKzIzMDEsMTEgQEAKIAl3cmxwKG1wLCBQT1JUX0NPTkZJR19FWFQsIDB4MDAwMDAwMDApOwogCiAJLyoKKwkgKiBBZGQgY29uZmlndXJlZCB1bmljYXN0IGFkZHJlc3NlcyB0byBhZGRyZXNzIGZpbHRlciB0YWJsZS4KKwkgKi8KKwltdjY0M3h4X2V0aF9wcm9ncmFtX3VuaWNhc3RfZmlsdGVyKG1wLT5kZXYpOworCisJLyoKIAkgKiBFbmFibGUgdGhlIHJlY2VpdmUgcXVldWVzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBtcC0+cnhxX2NvdW50OyBpKyspIHsKQEAgLTI0MDAsMTMgKzIzODgsOCBAQAogCQl9CiAJfQogCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQogCXBvcnRfc3RhcnQobXApOwogCi0Jc2V0X3J4X2NvYWwobXAsIDApOwotCXNldF90eF9jb2FsKG1wLCAwKTsKLQogCXdybHAobXAsIElOVF9NQVNLX0VYVCwgSU5UX0VYVF9MSU5LX1BIWSB8IElOVF9FWFRfVFgpOwogCXdybHAobXAsIElOVF9NQVNLLCBJTlRfVFhfRU5EIHwgSU5UX1JYIHwgSU5UX0VYVCk7CiAKQEAgLTI0NTcsOCArMjQ0MCw2IEBACiAJd3JscChtcCwgSU5UX01BU0ssIDB4MDAwMDAwMDApOwogCXJkbHAobXAsIElOVF9NQVNLKTsKIAotCWRlbF90aW1lcl9zeW5jKCZtcC0+bWliX2NvdW50ZXJzX3RpbWVyKTsKLQogCW5hcGlfZGlzYWJsZSgmbXAtPm5hcGkpOwogCiAJZGVsX3RpbWVyX3N5bmMoJm1wLT5yeF9vb20pOwpAQCAtMjQ3MCw2ICsyNDUxLDcgQEAKIAlwb3J0X3Jlc2V0KG1wKTsKIAltdjY0M3h4X2V0aF9nZXRfc3RhdHMoZGV2KTsKIAltaWJfY291bnRlcnNfdXBkYXRlKG1wKTsKKwlkZWxfdGltZXJfc3luYygmbXAtPm1pYl9jb3VudGVyc190aW1lcik7CiAKIAlza2JfcXVldWVfcHVyZ2UoJm1wLT5yeF9yZWN5Y2xlKTsKIApAQCAtMjg3NCw2ICsyODU2LDIxIEBACiAJd3JscChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTCwgcHNjcik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXY2NDN4eF9ldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbXY2NDN4eF9ldGhfb3BlbiwKKwkubmRvX3N0b3AJCT0gbXY2NDN4eF9ldGhfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXY2NDN4eF9ldGhfeG1pdCwKKwkubmRvX3NldF9yeF9tb2RlCT0gbXY2NDN4eF9ldGhfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBtdjY0M3h4X2V0aF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBtdjY0M3h4X2V0aF9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbXY2NDN4eF9ldGhfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbXY2NDN4eF9ldGhfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RhdHMsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IG12NjQzeHhfZXRoX25ldHBvbGwsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqcGQ7CkBAIC0yOTQ1LDE4ICsyOTQyLDggQEAKIAlCVUdfT04oIXJlcyk7CiAJZGV2LT5pcnEgPSByZXMtPnN0YXJ0OwogCi0JZGV2LT5nZXRfc3RhdHMgPSBtdjY0M3h4X2V0aF9nZXRfc3RhdHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtdjY0M3h4X2V0aF94bWl0OwotCWRldi0+b3BlbiA9IG12NjQzeHhfZXRoX29wZW47Ci0JZGV2LT5zdG9wID0gbXY2NDN4eF9ldGhfc3RvcDsKLQlkZXYtPnNldF9yeF9tb2RlID0gbXY2NDN4eF9ldGhfc2V0X3J4X21vZGU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBtdjY0M3h4X2V0aF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5kb19pb2N0bCA9IG12NjQzeHhfZXRoX2lvY3RsOwotCWRldi0+Y2hhbmdlX210dSA9IG12NjQzeHhfZXRoX2NoYW5nZV9tdHU7Ci0JZGV2LT50eF90aW1lb3V0ID0gbXY2NDN4eF9ldGhfdHhfdGltZW91dDsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gbXY2NDN4eF9ldGhfbmV0cG9sbDsKLSNlbmRpZgorCWRldi0+bmV0ZGV2X29wcyA9ICZtdjY0M3h4X2V0aF9uZXRkZXZfb3BzOworCiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKIAlkZXYtPmJhc2VfYWRkciA9IDA7CiAKQEAgLTI5NjgsNiArMjk1NSwxMSBAQAogCWlmIChtcC0+c2hhcmVkLT53aW5fcHJvdGVjdCkKIAkJd3JsKG1wLCBXSU5ET1dfUFJPVEVDVChtcC0+cG9ydF9udW0pLCBtcC0+c2hhcmVkLT53aW5fcHJvdGVjdCk7CiAKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJc2V0X3J4X2NvYWwobXAsIDI1MCk7CisJc2V0X3R4X2NvYWwobXAsIDApOworCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaAppbmRleCBjYWE2Y2JiLi42MmExY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcF9nZW5faGVhZGVyLmgKQEAgLTksNiArOSw3IEBACiAjZGVmaW5lIE1DUF9UWVBFX0VUSCAweDQ1NTQ0ODIwCS8qICJFVEggIiAqLwogI2RlZmluZSBNQ1BfVFlQRV9NQ1AwIDB4NGQ0MzUwMzAJLyogIk1DUDAiICovCiAjZGVmaW5lIE1DUF9UWVBFX0RGTFQgMHgyMDIwMjAyMAkvKiAiICAgICIgKi8KKyNkZWZpbmUgTUNQX1RZUEVfRVRIWiAweDQ1NTQ0ODVhCS8qICJFVEhaIiAqLwogCiBzdHJ1Y3QgbWNwX2dlbl9oZWFkZXIgewogCS8qIHRoZSBmaXJzdCA0IGZpZWxkcyBhcmUgZmlsbGVkIGF0IGNvbXBpbGUgdGltZSAqLwpAQCAtNDMsNyArNDQsMTUgQEAKIAl1bnNpZ25lZCBtc2l4X3RhYmxlX2FkZHI7CS8qIHN0YXJ0IGFkZHJlc3Mgb2YgbXNpeCB0YWJsZSBpbiBmaXJtd2FyZSAqLwogCXVuc2lnbmVkIGJzc19hZGRyOwkvKiBzdGFydCBvZiBic3MgKi8KIAl1bnNpZ25lZCBmZWF0dXJlczsKKwl1bnNpZ25lZCBlZV9oZHJfYWRkcjsKIAkvKiA4ICovCiB9OwogCitzdHJ1Y3Qgem1jcF9pbmZvIHsKKwl1bnNpZ25lZCBpbmZvX2xlbjsKKwl1bnNpZ25lZCB6bWNwX2FkZHI7CisJdW5zaWduZWQgem1jcF9sZW47CisJdW5zaWduZWQgbWNwX2VkYXRhOworfTsKKwogI2VuZGlmCQkJCS8qIF9fTVlSSTEwR0VfTUNQX0dFTl9IRUFERVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCmluZGV4IDg4YjUyODguLjA4NTM0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCkBAIC04OTYsNiArODk2LDE3IEBACiAJLmNhY2hlX3VwZGF0ZQk9IG15cmlfaGVhZGVyX2NhY2hlX3VwZGF0ZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXlyaV9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG15cmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gbXlyaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXlyaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbXlyaV9zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBteXJpX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG15cmlfc2J1c19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5ub2RlOwpAQCAtMTA0OCwxMyArMTA1OSw5IEBACiAJc2J1c193cml0ZWwoKDEgPDwgaSksIG1wLT5jcmVncyArIE1ZUklDVFJMX0lSUUxWTCk7CiAKIAltcC0+ZGV2ID0gZGV2OwotCWRldi0+b3BlbiA9ICZteXJpX29wZW47Ci0JZGV2LT5zdG9wID0gJm15cmlfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXlyaV9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZteXJpX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbXlyaV9zZXRfbXVsdGljYXN0OwogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CisJZGV2LT5uZXRkZXZfb3BzID0gJm15cmlfb3BzOwogCiAJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgbm93LiAqLwogCURFVCgoIlJlcXVlc3RpbmcgTVlSSWNvbSBJUlEgbGluZS5cbiIpKTsKQEAgLTEwNjUsNyArMTA3Miw2IEBACiAJfQogCiAJZGV2LT5tdHUJCT0gTVlSSU5FVF9NVFU7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dTsKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJm15cmlfaGVhZGVyX29wczsKIAogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gKEVUSF9ITEVOICsgTVlSSV9QQURfTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCBjMjNhNTg2Mi4uYzliZmU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAjZGVmaW5lIE5BVFNFTUlfUlhfTElNSVQJMjA0NgkvKiBtYXhpbXVtIHN1cHBvcnRlZCBieSBoYXJkd2FyZSAqLwogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KICAgS0VSTl9JTkZPIERSVl9OQU1FICIgZHA4MzgxeCBkcml2ZXIsIHZlcnNpb24gIgogICAgICAgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiXG4iCiAgIEtFUk5fSU5GTyAiICBvcmlnaW5hbGx5IGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBmMDkwZDNiLi5lYjY2ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTYyLDggKzYyLDkgQEAKICNpbmNsdWRlICI4MzkwLmgiCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiIEQuIEJlY2tlci9QLiBHb3J0bWFrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBELiBCZWNrZXIvUC4gR29ydG1ha2VyXG4iOwogCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKICNkZWZpbmUgaW5sX2xlKGFkZHIpICBsZTMyX3RvX2NwdShpbmwoYWRkcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKaW5kZXggOGU3YzRjOS4uY2YwMWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDExICsyMSwxMCBAQAogIyAKICMgQ29udGFjdCBJbmZvcm1hdGlvbjoKICMgICAgaW5mb0BuZXR4ZW4uY29tCi0jIE5ldFhlbiwKLSMgMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotIyBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyMgTmV0WGVuIEluYywKKyMgMTg5MjIgRm9yZ2UgRHJpdmUKKyMgQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAjCi0jIE1ha2VmaWxlIGZvciB0aGUgTmV0WGVuIE5JQyBEcml2ZXIKICMKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCBmNGRkOWFjLi5jNDA4MTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9ORVRYRU5fTklDX0hfCkBAIC02NSw4ICs2Niw4IEBACiAKICNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUFKT1IgNAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiAwCi0jZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMTEKLSNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMTEiCisjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMzAKKyNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMzAiCiAKICNkZWZpbmUgTkVUWEVOX1ZFUlNJT05fQ09ERShhLCBiLCBjKQkoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQogCkBAIC03NywxOSArNzgsMTkgQEAKIAogI2RlZmluZSBQSEFOX1ZFTkRPUl9JRCAweDQwNDAKIAotI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFCVwKLQkoc2l6ZW9mKHN0cnVjdCBzdGF0dXNfZGVzYykqIGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KQotI2RlZmluZSBMUk9fREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihyY3ZEZXNjX3QpICogYWRhcHRlci0+bWF4X2xyb19yeF9kZXNjX2NvdW50KQotI2RlZmluZSBUWF9SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIpICogYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFJDVl9CVUZGU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpCisjZGVmaW5lIFJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogKHJkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bnVtX2Rlc2MpCisjZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3Qgc3RhdHVzX2Rlc2MpICogKHNkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyKSAqIGFkYXB0ZXItPm51bV90eGQpCisjZGVmaW5lIFRYX0RFU0NfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqIGFkYXB0ZXItPm51bV90eGQpCisKICNkZWZpbmUgZmluZF9kaWZmX2Ftb25nKGEsYixyYW5nZSkgKChhKTwoYik/KChiKS0oYSkpOigoYikrKHJhbmdlKS0oYSkpKQogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfU1RBVFVTCQkweDEKICNkZWZpbmUgTkVUWEVOX1JDVl9QUk9EVUNFUl9PRkZTRVQJMAogI2RlZmluZSBORVRYRU5fUkNWX1BFR19EQl9JRAkJMgogI2RlZmluZSBORVRYRU5fSE9TVF9EVU1NWV9ETUFfU0laRSAxMDI0CkBAIC0xODgsMjIgKzE4OSwxMiBAQAogLyogSG9zdCB3cml0ZXMgdGhlIGZvbGxvd2luZyB0byBub3RpZnkgdGhhdCBpdCBoYXMgZG9uZSB0aGUgaW5pdC1oYW5kc2hha2UgKi8KICNkZWZpbmUgUEhBTl9JTklUSUFMSVpFX0FDSwkweGYwMGYKIAotI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMwkvKiBObyBvZiBSY3YgRGVzY3JpcHRvciBjb250ZXh0cyAqLworI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMworI2RlZmluZSBOVU1fU1RTX0RFU0NfUklOR1MJNAogCi0vKiBkZXNjcmlwdG9yIHR5cGVzICovCi0jZGVmaW5lIFJDVl9ERVNDX05PUk1BTAkJMHgwMQotI2RlZmluZSBSQ1ZfREVTQ19KVU1CTwkJMHgwMgotI2RlZmluZSBSQ1ZfREVTQ19MUk8JCTB4MDQKLSNkZWZpbmUgUkNWX0RFU0NfTk9STUFMX0NUWElECTAKLSNkZWZpbmUgUkNWX0RFU0NfSlVNQk9fQ1RYSUQJMQotI2RlZmluZSBSQ1ZfREVTQ19MUk9fQ1RYSUQJMgotCi0jZGVmaW5lIFJDVl9ERVNDX1RZUEUoSUQpIFwKLQkoKElEID09IFJDVl9ERVNDX0pVTUJPX0NUWElEKQlcCi0JCT8gUkNWX0RFU0NfSlVNQk8JXAotCQk6ICgoSUQgPT0gUkNWX0RFU0NfTFJPX0NUWElEKQlcCi0JCQk/IFJDVl9ERVNDX0xSTyA6CVwKLQkJCShSQ1ZfREVTQ19OT1JNQUwpKSkKKyNkZWZpbmUgUkNWX1JJTkdfTk9STUFMCTAKKyNkZWZpbmUgUkNWX1JJTkdfSlVNQk8JMQorI2RlZmluZSBSQ1ZfUklOR19MUk8JMgogCiAjZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlMJCTQwOTYKICNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SUwkJMTYzODQKQEAgLTM1NywxMCArMzQ4LDcgQEAKIAkJX19sZTY0IGFkZHJfYnVmZmVyMTsKIAl9OwogCi0JX19sZTE2IGJ1ZmZlcjFfbGVuZ3RoOwotCV9fbGUxNiBidWZmZXIyX2xlbmd0aDsKLQlfX2xlMTYgYnVmZmVyM19sZW5ndGg7Ci0JX19sZTE2IGJ1ZmZlcjRfbGVuZ3RoOworCV9fbGUxNiBidWZmZXJfbGVuZ3RoWzRdOwogCiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtMzkxLDExICszNzksOCBAQAogI2RlZmluZSBTVEFUVVNfQ0tTVU1fT0sJCSgyKQogCiAvKiBvd25lciBiaXRzIG9mIHN0YXR1c19kZXNjICovCi0jZGVmaW5lIFNUQVRVU19PV05FUl9IT1NUCSgweDEpCi0jZGVmaW5lIFNUQVRVU19PV05FUl9QSEFOVE9NCSgweDIpCi0KLSNkZWZpbmUgTkVUWEVOX1BST1RfSVAJCSgxKQotI2RlZmluZSBORVRYRU5fUFJPVF9VTktOT1dOCSgwKQorI2RlZmluZSBTVEFUVVNfT1dORVJfSE9TVAkoMHgxVUxMIDw8IDU2KQorI2RlZmluZSBTVEFUVVNfT1dORVJfUEhBTlRPTQkoMHgyVUxMIDw8IDU2KQogCiAvKiBOb3RlOiBzaXplb2Yoc3RhdHVzX2Rlc2MpIHNob3VsZCBhbHdheXMgYmUgYSBtdXRsaXBsZSBvZiAyICovCiAKQEAgLTQyMSwxNSArNDA2LDYgQEAKICNkZWZpbmUgbmV0eGVuX2dldF9zdHNfb3Bjb2RlKHN0c19kYXRhKQlcCiAJKCgoc3RzX2RhdGEpID4+IDU4KSAmIDB4MDNGKQogCi0jZGVmaW5lIG5ldHhlbl9nZXRfc3RzX293bmVyKHN0YXR1c19kZXNjKQlcCi0JKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiA1NikgJiAweDAzKQotI2RlZmluZSBuZXR4ZW5fc2V0X3N0c19vd25lcihzdGF0dXNfZGVzYywgdmFsKQl7IFwKLQkoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhID0gXAotCQkoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSAmIFwKLQkJfmNwdV90b19sZTY0KDB4M1VMTCA8PCA1NikpIHwgXAotCQljcHVfdG9fbGU2NCgodTY0KSgodmFsKSAmIDB4MykgPDwgNTYpOyBcCi19Ci0KIHN0cnVjdCBzdGF0dXNfZGVzYyB7CiAJLyogQml0IHBhdHRlcm46IDAtMyBwb3J0LCA0LTcgc3RhdHVzLCA4LTExIHR5cGUsIDEyLTI3IHRvdGFsX2xlbmd0aAogCSAgIDI4LTQzIHJlZmVyZW5jZV9oYW5kbGUsIDQ0LTQ3IHByb3RvY29sLCA0OC01MiBwa3Rfb2Zmc2V0CkBAIC03MTIsNiArNjg4LDE1IEBACiAJTkVUWEVOX0ZJWEVEX1NUQVJUID0gMHgzRjAwMDAJLyogYmFja3VwIG9mIGNyYmluaXQgKi8KIH0gbmV0eGVuX2ZsYXNoX21hcF90OwogCisjZGVmaW5lIE5YX0ZXX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDQwOCkKKyNkZWZpbmUgTlhfRldfU0laRV9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4NDBjKQorI2RlZmluZSBOWF9CSU9TX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDgzYykKKyNkZWZpbmUgTlhfRldfTUFHSUNfT0ZGU0VUCShORVRYRU5fQlJEQ0ZHX1NUQVJUKzB4MTI4KQorI2RlZmluZSBOWF9GV19NSU5fU0laRQkJKDB4M2ZmZmZmKQorI2RlZmluZSBOWF9QMl9NTl9ST01JTUFHRQkwCisjZGVmaW5lIE5YX1AzX0NUX1JPTUlNQUdFCTEKKyNkZWZpbmUgTlhfUDNfTU5fUk9NSU1BR0UJMgorCiAjZGVmaW5lIE5FVFhFTl9VU0VSX1NUQVJUX09MRCBORVRYRU5fUFhFX1NUQVJUCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAKICNkZWZpbmUgTkVUWEVOX0ZMQVNIX1NUQVJUCQkoTkVUWEVOX0NSQklOSVRfU1RBUlQpCkBAIC03MzksNyArNzI0LDcgQEAKICNlbmRpZgogCiAvKiBOdW1iZXIgb2Ygc3RhdHVzIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBwZXIgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSgxMjgpCisjZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSg2NCkKIAogLyoKICAqIG5ldHhlbl9za2JfZnJhZ3t9IGlzIHRvIGNvbnRhaW4gbWFwcGluZyBpbmZvIGZvciBlYWNoIFNHIGxpc3QuIFRoaXMKQEAgLTc4Myw5ICs3NjgsNiBAQAogCXU2NCBkbWE7CiAJdTE2IHJlZl9oYW5kbGU7CiAJdTE2IHN0YXRlOwotCXUzMiBscm9fZXhwZWN0ZWRfZnJhZ3M7Ci0JdTMyIGxyb19jdXJyZW50X2ZyYWdzOwotCXUzMiBscm9fbGVuZ3RoOwogfTsKIAogLyogQm9hcmQgdHlwZXMgKi8KQEAgLTgwMCwyMSArNzgyLDE5IEBACiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTA7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTE7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTI7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9wYWdlX2dyb3VwX2VuZDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQ7CiAJdm9pZCBfX2lvbWVtICpkYl9iYXNlOwogCXVuc2lnbmVkIGxvbmcgZGJfbGVuOwogCXVuc2lnbmVkIGxvbmcgcGNpX2xlbjA7CiAKLQl1OCBjdXRfdGhyb3VnaDsKIAlpbnQgcWRyX3NuX3dpbmRvdzsKIAlpbnQgZGRyX21uX3dpbmRvdzsKIAl1bnNpZ25lZCBsb25nIG1uX3dpbl9jcmI7CiAJdW5zaWduZWQgbG9uZyBtc193aW5fY3JiOwogCisJdTggY3V0X3Rocm91Z2g7CiAJdTggcmV2aXNpb25faWQ7Ci0JdTE2IGJvYXJkX3R5cGU7Ci0Jc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvIGJvYXJkY2ZnOworCXUxNiBwb3J0X3R5cGU7CisJaW50IGJvYXJkX3R5cGU7CiAJdTMyIGxpbmt1cDsKIAkvKiBBZGRyZXNzIG9mIGNtZCByaW5nIGluIFBoYW50b20gKi8KIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmNtZF9kZXNjX2hlYWQ7CkBAIC04MjMsOCArODAzLDYgQEAKIAlpbnQgcGNpX2Z1bmM7CiB9OwogCi0jZGVmaW5lIFJDVl9SSU5HX0xSTwlSQ1ZfREVTQ19MUk8KLQogI2RlZmluZSBNSU5JTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUJNjQJLyogV2l0aCBGQ1MgKi8KICNkZWZpbmUgRVRIRVJORVRfRkNTX1NJWkUJCTQKIApAQCAtODUwLDE2ICs4MjgsMzYgQEAKICAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCiAgKi8KIHN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHsKLQl1MzIgZmxhZ3M7CiAJdTMyIHByb2R1Y2VyOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOwkvKiByZWcgb2Zmc2V0ICovCi0Jc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CS8qIGFkZHJlc3Mgb2YgcnggcmluZyBpbiBQaGFudG9tICovCi0JdTMyIG1heF9yeF9kZXNjX2NvdW50OworCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOworCXUzMiBudW1fZGVzYzsKIAl1MzIgZG1hX3NpemU7CiAJdTMyIHNrYl9zaXplOwotCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWZfYXJyOwkvKiByeCBidWZmZXJzIGZvciByZWNlaXZlICAgKi8KKwl1MzIgZmxhZ3M7CisJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworfTsKKworc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgeworCXUzMiBjb25zdW1lcjsKKwl1MzIgY3JiX3N0c19jb25zdW1lcjsKKwl1MzIgY3JiX2ludHJfbWFzazsKKwl1MzIgbnVtX2Rlc2M7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3RbTlVNX1JDVl9ERVNDX1JJTkdTXTsKKworCXUxNiBjbGVhbl90eDsKKwl1MTYgcG9zdF9yeGQ7CisJaW50IGlycTsKKworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWNoYXIgbmFtZVtJRk5BTVNJWis0XTsKIH07CiAKIC8qCkBAIC04NzQsMTAgKzg3Miw3IEBACiAJdTE2IHZpcnRfcG9ydDsKIAogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHJkc19yaW5nc1tOVU1fUkNWX0RFU0NfUklOR1NdOwotCXUzMiBzdGF0dXNfcnhfY29uc3VtZXI7Ci0JdTMyIGNyYl9zdHNfY29uc3VtZXI7CS8qIHJlZyBvZmZzZXQgKi8KLQlkbWFfYWRkcl90IHJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHI7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpyY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyBzZHNfcmluZ3NbTlVNX1NUU19ERVNDX1JJTkdTXTsKIH07CiAKIC8qIE5ldyBIVyBjb250ZXh0IGNyZWF0aW9uICovCkBAIC0xMjAzLDEzICsxMTk4LDEzIEBACiAjZGVmaW5lIE5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpIFwKIAkoKGFkYXB0ZXIpLT5mbGFncyAmIChORVRYRU5fTklDX01TSV9FTkFCTEVEIHwgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpKQogCi0jZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUgkxCisjZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUglOVU1fU1RTX0RFU0NfUklOR1MKICNkZWZpbmUgTkVUWEVOX01TSVhfVEJMX1NQQUNFCQk4MTkyCiAjZGVmaW5lIE5FVFhFTl9QQ0lfUkVHX01TSVhfVEJMCQkweDQ0CiAKICNkZWZpbmUgTkVUWEVOX0RCX01BUFNJWkVfQllURVMgICAgCTB4MTAwMAogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfV0VJR0hUIDEyMAorI2RlZmluZSBORVRYRU5fTkVUREVWX1dFSUdIVCAxMjgKICNkZWZpbmUgTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMgNzc3CiAjZGVmaW5lIE5FVFhFTl9OSUNfUEVHX1RVTkUgMAogCkBAIC0xMjI0LDcgKzEyMTksNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IHBjaV91c2luZ19kYWM7Ci0Jc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOwogCWludCBtdHU7CiAJaW50IHBvcnRudW07CkBAIC0xMjM2LDcgKzEyMzAsNiBAQAogCW54X21hY19saXN0X3QJKm1hY19saXN0OwogCiAJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHI7Ci0JdTMyCWNyYl9pbnRyX21hc2s7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKQEAgLTEyNDYsMjAgKzEyMzksMjAgQEAKIAl1MzIgY3JiX3dpbjsKIAlyd2xvY2tfdCBhZGFwdGVyX2xvY2s7CiAKLQl1aW50NjRfdCBkbWFfbWFzazsKLQogCXUzMiBjbWRfcHJvZHVjZXI7CiAJX19sZTMyICpjbWRfY29uc3VtZXI7CiAJdTMyIGxhc3RfY21kX2NvbnN1bWVyOwogCXUzMiBjcmJfYWRkcl9jbWRfcHJvZHVjZXI7CiAJdTMyIGNyYl9hZGRyX2NtZF9jb25zdW1lcjsKKwlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7CiAKLQl1MzIgbWF4X3R4X2Rlc2NfY291bnQ7Ci0JdTMyIG1heF9yeF9kZXNjX2NvdW50OwotCXUzMiBtYXhfanVtYm9fcnhfZGVzY19jb3VudDsKLQl1MzIgbWF4X2xyb19yeF9kZXNjX2NvdW50OworCXUzMiBudW1fdHhkOworCXUzMiBudW1fcnhkOworCXUzMiBudW1fanVtYm9fcnhkOworCXUzMiBudW1fbHJvX3J4ZDsKIAogCWludCBtYXhfcmRzX3JpbmdzOworCWludCBtYXhfc2RzX3JpbmdzOwogCiAJdTMyIGZsYWdzOwogCXUzMiBpcnE7CkBAIC0xMjY3LDkgKzEyNjAsOSBAQAogCXUzMiB0ZW1wOwogCiAJdTMyIGZ3X21ham9yOworCXUzMiBmd192ZXJzaW9uOwogCi0JdTggbXNpeF9zdXBwb3J0ZWQ7Ci0JdTggbWF4X3Bvc3NpYmxlX3Jzc19yaW5nczsKKwlpbnQgbXNpeF9zdXBwb3J0ZWQ7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW01TSVhfRU5UUklFU19QRVJfQURBUFRFUl07CiAKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CkBAIC0xMjc5LDcgKzEyNzIsNiBAQAogCXUxNiBzdGF0ZTsKIAl1MTYgbGlua19hdXRvbmVnOwogCWludCByeF9jc3VtOwotCWludCBzdGF0dXM7CiAKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOwkvKiBDb21tYW5kIGJ1ZmZlcnMgZm9yIHhtaXQgKi8KIApAQCAtMTI4Nyw3ICsxMjc5LDcgQEAKIAkgKiBSZWNlaXZlIGluc3RhbmNlcy4gVGhlc2UgY2FuIGJlIGVpdGhlciBvbmUgcGVyIHBvcnQsCiAJICogb3Igb25lIHBlciBwZWcsIGV0Yy4KIAkgKi8KLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eFtNQVhfUkNWX0NUWF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgcmVjdl9jdHg7CiAKIAlpbnQgaXNfdXA7CiAJc3RydWN0IG5ldHhlbl9kdW1teV9kbWEgZHVtbXlfZG1hOwpAQCAtMTM5OCw2ICsxMzkwLDggQEAKIHZvaWQgbmV0eGVuX25pY19yZWFkX3cxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKnZhbHVlKTsKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBpbnQgbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pOwpAQCAtMTQ3MSwxNSArMTQ2NSwxNiBAQAogaW50IG5ldHhlbl9pbml0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjdHgsCi0JCQkgICAgdTMyIHJpbmdpZCk7Cit2b2lkIG5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogaW50IG5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci11MzIgbmV0eGVuX3Byb2Nlc3NfcmN2X3Jpbmcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgY3R4LCBpbnQgbWF4KTsKK2ludCBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpOwogdm9pZCBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmV0eGVuX3AzX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIG5ldHhlbl9wM19mcmVlX21hY19saXN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX3AzX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMik7CiBpbnQgbmV0eGVuX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX2NvbmZpZ19yc3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKIAogaW50IG54X2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSk7CiBpbnQgbmV0eGVuX25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKQEAgLTE1OTUsNyArMTU5MCw2IEBACiB9CiAKIAotaW50IG5ldHhlbl9pc19mbGFzaF9zdXBwb3J0ZWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBuZXR4ZW5fZ2V0X2ZsYXNoX21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgX19sZTY0ICptYWMpOwogaW50IG5ldHhlbl9wM19nZXRfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBfX2xlNjQgKm1hYyk7CiBleHRlcm4gdm9pZCBuZXR4ZW5fY2hhbmdlX3JpbmdwYXJhbShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYwppbmRleCA3NDZiZGI0Li45MjM0NDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA4IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsOSArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtMTQxLDcgKzE0MSw3IEBACiBueF9md19jbWRfc2V0X210dShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtdHUpCiB7CiAJdTMyIHJjb2RlID0gTlhfUkNPREVfU1VDQ0VTUzsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbMF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKHJlY3ZfY3R4LT5zdGF0ZSA9PSBOWF9IT1NUX0NUWF9TVEFURV9BQ1RJVkUpCiAJCXJjb2RlID0gbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLApAQCAtMTY5LDYgKzE2OSw3IEBACiAJbnhfY2FyZHJzcF9yZHNfcmluZ190ICpwcnNwX3JkczsKIAlueF9jYXJkcnNwX3Nkc19yaW5nX3QgKnByc3Bfc2RzOwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CiAKIAlkbWFfYWRkcl90IGhvc3RycV9waHlzX2FkZHIsIGNhcmRyc3BfcGh5c19hZGRyOwogCXU2NCBwaHlzX2FkZHI7CkBAIC0xNzksMTEgKzE4MCwxMCBAQAogCiAJaW50IGVycjsKIAotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFswXTsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKLQkvKiBvbmx5IG9uZSBzZHMgcmluZyBmb3Igbm93ICovCiAJbnJkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7Ci0JbnNkc19yaW5ncyA9IDE7CisJbnNkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CiAKIAlycV9zaXplID0KIAkJU0laRU9GX0hPU1RSUV9SWChueF9ob3N0cnFfcnhfY3R4X3QsIG5yZHNfcmluZ3MsIG5zZHNfcmluZ3MpOwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CiAKIAkJcHJxX3Jkc1tpXS5ob3N0X3BoeXNfYWRkciA9IGNwdV90b19sZTY0KHJkc19yaW5nLT5waHlzX2FkZHIpOwotCQlwcnFfcmRzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCXBycV9yZHNbaV0ucmluZ19zaXplID0gY3B1X3RvX2xlMzIocmRzX3JpbmctPm51bV9kZXNjKTsKIAkJcHJxX3Jkc1tpXS5yaW5nX2tpbmQgPSBjcHVfdG9fbGUzMihpKTsKIAkJcHJxX3Jkc1tpXS5idWZmX3NpemUgPSBjcHVfdG9fbGU2NChyZHNfcmluZy0+ZG1hX3NpemUpOwogCX0KQEAgLTIzOSwxMSArMjM5LDE0IEBACiAJcHJxX3NkcyA9IChueF9ob3N0cnFfc2RzX3JpbmdfdCAqKShwcnEtPmRhdGEgKwogCQkJbGUzMl90b19jcHUocHJxLT5zZHNfcmluZ19vZmZzZXQpKTsKIAotCXBycV9zZHNbMF0uaG9zdF9waHlzX2FkZHIgPQotCQljcHVfdG9fbGU2NChyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcik7Ci0JcHJxX3Nkc1swXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCk7Ci0JLyogb25seSBvbmUgbXNpeCB2ZWN0b3IgZm9yIG5vdyAqLwotCXBycV9zZHNbMF0ubXNpX2luZGV4ID0gY3B1X3RvX2xlMTYoMCk7CisJZm9yIChpID0gMDsgaSA8IG5zZHNfcmluZ3M7IGkrKykgeworCisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbaV07CisKKwkJcHJxX3Nkc1tpXS5ob3N0X3BoeXNfYWRkciA9IGNwdV90b19sZTY0KHNkc19yaW5nLT5waHlzX2FkZHIpOworCQlwcnFfc2RzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHNkc19yaW5nLT5udW1fZGVzYyk7CisJCXBycV9zZHNbaV0ubXNpX2luZGV4ID0gY3B1X3RvX2xlMTYoaSk7CisJfQogCiAJcGh5c19hZGRyID0gaG9zdHJxX3BoeXNfYWRkcjsKIAllcnIgPSBuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCkBAIC0yNzIsMTEgKzI3NSwxNiBAQAogCiAJcHJzcF9zZHMgPSAoKG54X2NhcmRyc3Bfc2RzX3JpbmdfdCAqKQogCQkJJnByc3AtPmRhdGFbbGUzMl90b19jcHUocHJzcC0+c2RzX3Jpbmdfb2Zmc2V0KV0pOwotCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzWzBdLmhvc3RfY29uc3VtZXJfY3JiKTsKLQlyZWN2X2N0eC0+Y3JiX3N0c19jb25zdW1lciA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKIAotCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzWzBdLmludGVycnVwdF9jcmIpOwotCWFkYXB0ZXItPmNyYl9pbnRyX21hc2sgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHByc3AtPm51bV9zZHNfcmluZ3MpOyBpKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tpXTsKKworCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5ob3N0X2NvbnN1bWVyX2NyYik7CisJCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCisJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmludGVycnVwdF9jcmIpOworCQlzZHNfcmluZy0+Y3JiX2ludHJfbWFzayA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKwl9CiAKIAlyZWN2X2N0eC0+c3RhdGUgPSBsZTMyX3RvX2NwdShwcnNwLT5ob3N0X2N0eF9zdGF0ZSk7CiAJcmVjdl9jdHgtPmNvbnRleHRfaWQgPSBsZTE2X3RvX2NwdShwcnNwLT5jb250ZXh0X2lkKTsKQEAgLTI5Miw3ICszMDAsNyBAQAogc3RhdGljIHZvaWQKIG54X2Z3X2NtZF9kZXN0cm95X3J4X2N0eChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4WzBdOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCiAJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCkBAIC0zNjIsNyArMzcwLDcgQEAKIAlwcnFfY2RzLT5ob3N0X3BoeXNfYWRkciA9CiAJCWNwdV90b19sZTY0KGFkYXB0ZXItPmFody5jbWRfZGVzY19waHlzX2FkZHIpOwogCi0JcHJxX2Nkcy0+cmluZ19zaXplID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCXBycV9jZHMtPnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKGFkYXB0ZXItPm51bV90eGQpOwogCiAJcGh5c19hZGRyID0gcnFfcGh5c19hZGRyOwogCWVyciA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKQEAgLTQ4OCwzMCArNDk2LDI4IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKLQlpbnQgY3R4LCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlpbnQgcmluZzsKIAlpbnQgZnVuY19pZCA9IGFkYXB0ZXItPnBvcnRudW07CiAKIAlhZGFwdGVyLT5jdHhfZGVzYy0+Y21kX3JpbmdfYWRkciA9CiAJCWNwdV90b19sZTY0KGFkYXB0ZXItPmFody5jbWRfZGVzY19waHlzX2FkZHIpOwogCWFkYXB0ZXItPmN0eF9kZXNjLT5jbWRfcmluZ19zaXplID0KLQkJY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCQljcHVfdG9fbGUzMihhZGFwdGVyLT5udW1fdHhkKTsKIAotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eF07CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CiAKLQkJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX2FkZHIgPQotCQkJCWNwdV90b19sZTY0KHJkc19yaW5nLT5waHlzX2FkZHIpOwotCQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnJjdl9jdHhbcmluZ10ucmN2X3Jpbmdfc2l6ZSA9Ci0JCQkJY3B1X3RvX2xlMzIocmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKLQkJfQotCQlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3JpbmdfYWRkciA9Ci0JCQljcHVfdG9fbGU2NChyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcik7Ci0JCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19zaXplID0KLQkJCWNwdV90b19sZTMyKGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJYWRhcHRlci0+Y3R4X2Rlc2MtPnJjdl9jdHhbcmluZ10ucmN2X3JpbmdfYWRkciA9CisJCQljcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJYWRhcHRlci0+Y3R4X2Rlc2MtPnJjdl9jdHhbcmluZ10ucmN2X3Jpbmdfc2l6ZSA9CisJCQljcHVfdG9fbGUzMihyZHNfcmluZy0+bnVtX2Rlc2MpOwogCX0KKwlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzWzBdOworCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19hZGRyID0gY3B1X3RvX2xlNjQoc2RzX3JpbmctPnBoeXNfYWRkcik7CisJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihzZHNfcmluZy0+bnVtX2Rlc2MpOwogCiAJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfQ1RYX0FERFJfUkVHX0xPKGZ1bmNfaWQpLAogCQkJbG93ZXIzMihhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIpKTsKQEAgLTUzMyw5ICs1MzksMTMgQEAKIAl1MzIgc3RhdGUgPSAwOwogCXZvaWQgKmFkZHI7CiAJaW50IGVyciA9IDA7Ci0JaW50IGN0eCwgcmluZzsKKwlpbnQgcmluZzsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJZXJyID0gbmV0eGVuX3JlY2VpdmVfcGVnX3JlYWR5KGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKQEAgLTU0NCwxMiArNTU0LDEyIEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsCiAJCQlzaXplb2Yoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCkgKyBzaXplb2YodWludDMyX3QpLAogCQkJJmFkYXB0ZXItPmN0eF9kZXNjX3BoeXNfYWRkcik7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCURQUklOVEsoRVJSLCAiZmFpbGVkIHRvIGFsbG9jYXRlIGh3IGNvbnRleHRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgaHcgY29udGV4dFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQoYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKQEAgLTU2Miw2MSArNTcyLDU3IEBACiAJCShfX2xlMzIgKikoKChjaGFyICopYWRkcikgKyBzaXplb2Yoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCkpOwogCiAJLyogY21kIGRlc2MgcmluZyAqLwotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgKgotCQkJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQsCisJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsCisJCQlUWF9ERVNDX1JJTkdTSVpFKGFkYXB0ZXIpLAogCQkJJmh3LT5jbWRfZGVzY19waHlzX2FkZHIpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCB0byBhbGxvY2F0ZSB0eCBkZXNjIHJpbmdcbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzYyByaW5nXG4iLAorCQkJCW5ldGRldi0+bmFtZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWh3LT5jbWRfZGVzY19oZWFkID0gKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKWFkZHI7CiAKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCi0JCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJCS8qIHJ4IGRlc2MgcmluZyAqLwotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQlSQ1ZfREVTQ19SSU5HU0laRSwKLQkJCQkJJnJkc19yaW5nLT5waHlzX2FkZHIpOwotCQkJaWYgKGFkZHIgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkIHRvIGFsbG9jYXRlIHJ4ICIKLQkJCQkJImRlc2MgcmluZ1slZF1cbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHJpbmcpOwotCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JCQl9Ci0JCQlyZHNfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCByY3ZfZGVzYyAqKWFkZHI7Ci0KLQkJCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpCi0JCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIgPQotCQkJCQlyZWN2X2NyYl9yZWdpc3RlcnNbYWRhcHRlci0+cG9ydG51bV0uCi0JCQkJCWNyYl9yY3ZfcHJvZHVjZXJbcmluZ107Ci0JCX0KLQotCQkvKiBzdGF0dXMgZGVzYyByaW5nICovCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQlTVEFUVVNfREVTQ19SSU5HU0laRSwKLQkJCQkmcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOworCQkJCVJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKSwKKwkJCQkmcmRzX3JpbmctPnBoeXNfYWRkcik7CiAJCWlmIChhZGRyID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkIHRvIGFsbG9jYXRlIHN0cyBkZXNjIHJpbmdcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHJkcyByaW5nIFslZF1cbiIsCisJCQkJbmV0ZGV2LT5uYW1lLCByaW5nKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9vdXRfZnJlZTsKIAkJfQotCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgPSAoc3RydWN0IHN0YXR1c19kZXNjICopYWRkcjsKKwkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3QgcmN2X2Rlc2MgKilhZGRyOwogCiAJCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpCi0JCQlyZWN2X2N0eC0+Y3JiX3N0c19jb25zdW1lciA9CisJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9CiAJCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW2FkYXB0ZXItPnBvcnRudW1dLgotCQkJCWNyYl9zdHNfY29uc3VtZXI7CisJCQkJY3JiX3Jjdl9wcm9kdWNlcltyaW5nXTsKIAl9CiAKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisKKwkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUoc2RzX3JpbmcpLAorCQkJCSZzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJaWYgKGFkZHIgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHNkcyByaW5nIFslZF1cbiIsCisJCQkJbmV0ZGV2LT5uYW1lLCByaW5nKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJfQorCQlzZHNfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7CisJfQorCisKIAlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPj0gNCkgewogCQlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IElOVFJfU0NIRU1FX1BFUlBPUlQ7CiAJCWFkYXB0ZXItPm1zaV9tb2RlID0gTVNJX01PREVfTVVMVElGVU5DOwpAQCAtNjI4LDEyICs2MzQsMTYgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dF9mcmVlOwogCX0gZWxzZSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbMF07CisJCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0KKwkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS5jcmJfc3RzX2NvbnN1bWVyOwogCiAJCWFkYXB0ZXItPmludHJfc2NoZW1lID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJQ1JCX05JQ19DQVBBQklMSVRJRVNfRlcpOwogCQlhZGFwdGVyLT5tc2lfbW9kZSA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAogCQkJCUNSQl9OSUNfTVNJX01PREVfRlcpOwotCQlhZGFwdGVyLT5jcmJfaW50cl9tYXNrID0gc3dfaW50X21hc2tbYWRhcHRlci0+cG9ydG51bV07CisJCXJlY3ZfY3R4LT5zZHNfcmluZ3NbMF0uY3JiX2ludHJfbWFzayA9CisJCQkJc3dfaW50X21hc2tbYWRhcHRlci0+cG9ydG51bV07CiAKIAkJZXJyID0gbmV0eGVuX2luaXRfb2xkX2N0eChhZGFwdGVyKTsKIAkJaWYgKGVycikgewpAQCAtNjU0LDcgKzY2NCw4IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKLQlpbnQgY3R4LCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlpbnQgcmluZzsKIAogCWlmIChhZGFwdGVyLT5md19tYWpvciA+PSA0KSB7CiAJCW54X2Z3X2NtZF9kZXN0cm95X3R4X2N0eChhZGFwdGVyKTsKQEAgLTY3MywzMiArNjg0LDM0IEBACiAJaWYgKGFkYXB0ZXItPmFody5jbWRfZGVzY19oZWFkICE9IE5VTEwpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAogCQkJCXNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICoKLQkJCQlhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCwKKwkJCQlhZGFwdGVyLT5udW1fdHhkLAogCQkJCWFkYXB0ZXItPmFody5jbWRfZGVzY19oZWFkLAogCQkJCWFkYXB0ZXItPmFody5jbWRfZGVzY19waHlzX2FkZHIpOwogCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCA9IE5VTEw7CiAJfQogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CiAKLQkJCWlmIChyZHNfcmluZy0+ZGVzY19oZWFkICE9IE5VTEwpIHsKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJCQlSQ1ZfREVTQ19SSU5HU0laRSwKLQkJCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQsCi0JCQkJCQlyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJCQlyZHNfcmluZy0+ZGVzY19oZWFkID0gTlVMTDsKLQkJCX0KLQkJfQotCi0JCWlmIChyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgIT0gTlVMTCkgeworCQlpZiAocmRzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFLAotCQkJCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQsCi0JCQkJCXJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKLQkJCXJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCA9IE5VTEw7CisJCQkJCVJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKSwKKwkJCQkJcmRzX3JpbmctPmRlc2NfaGVhZCwKKwkJCQkJcmRzX3JpbmctPnBoeXNfYWRkcik7CisJCQlyZHNfcmluZy0+ZGVzY19oZWFkID0gTlVMTDsKKwkJfQorCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKworCQlpZiAoc2RzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUoc2RzX3JpbmcpLAorCQkJCXNkc19yaW5nLT5kZXNjX2hlYWQsCisJCQkJc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCQlzZHNfcmluZy0+ZGVzY19oZWFkID0gTlVMTDsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwppbmRleCAwODk0YTdiLi5hNjc3ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiBldGh0b29sIHN1cHBvcnQgZm9yIG5ldHhlbiBuaWMKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTExOCwxMCArMTE1LDkgQEAKIG5ldHhlbl9uaWNfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbyAqYm9hcmRpbmZvID0gJmFkYXB0ZXItPmFody5ib2FyZGNmZzsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKIAkJCQkgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKIAkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CkBAIC0xNDAsNyArMTM2LDcgQEAKIAkJZWNtZC0+ZHVwbGV4ID0gYWRhcHRlci0+bGlua19kdXBsZXg7CiAJCWVjbWQtPmF1dG9uZWcgPSBhZGFwdGVyLT5saW5rX2F1dG9uZWc7CiAKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJdTMyIHZhbDsKIAogCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9QT1JUX01PREVfQUREUiwgJnZhbCwgNCk7CkBAIC0xNzIsNyArMTY4LDcgQEAKIAllY21kLT5waHlfYWRkcmVzcyA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwogCi0Jc3dpdGNoICgobmV0eGVuX2JyZHR5cGVfdCkgYm9hcmRpbmZvLT5ib2FyZF90eXBlKSB7CisJc3dpdGNoICgobmV0eGVuX2JyZHR5cGVfdClhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMkc6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM19SRUZfUUc6CkBAIC0xODgsNyArMTg0LDcgQEAKIAkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9UUDsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9UUDsKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7Ci0JCWVjbWQtPmF1dG9uZWcgPSAoYm9hcmRpbmZvLT5ib2FyZF90eXBlID09CisJCWVjbWQtPmF1dG9uZWcgPSAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0KIAkJCQkgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfQ1g0KSA/CiAJCSAgICAoQVVUT05FR19ESVNBQkxFKSA6IChhZGFwdGVyLT5saW5rX2F1dG9uZWcpOwogCQlicmVhazsKQEAgLTIxNSw3ICsyMTEsNyBAQAogCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQlicmVhazsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19UUDoKLQkJaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAJCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF9GSUJSRSB8IFNVUFBPUlRFRF9UUCk7CiAJCQllY21kLT5hZHZlcnRpc2luZyB8PQpAQCAtMjMxLDcgKzIyNyw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAibmV0eGVuLW5pYzogVW5zdXBwb3J0ZWQgYm9hcmQgbW9kZWwgJWRcbiIsCi0JCSAgICAgICAobmV0eGVuX2JyZHR5cGVfdCkgYm9hcmRpbmZvLT5ib2FyZF90eXBlKTsKKwkJICAgICAgIChuZXR4ZW5fYnJkdHlwZV90KWFkYXB0ZXItPmFody5ib2FyZF90eXBlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNDUsNyArMjQxLDcgQEAKIAlfX3UzMiBzdGF0dXM7CiAKIAkvKiByZWFkIHdoaWNoIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQkvKiBhdXRvbmVnb3RpYXRpb24gKi8KIAkJaWYgKGFkYXB0ZXItPnBoeV93cml0ZQogCQkgICAgJiYgYWRhcHRlci0+cGh5X3dyaXRlKGFkYXB0ZXIsCkBAIC00MzMsNyArNDI5LDcgQEAKIAlpbnQgdmFsOwogCiAJLyogcmVhZCB3aGljaCBtb2RlICovCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJaWYgKGFkYXB0ZXItPnBoeV9yZWFkCiAJCSAgICAmJiBhZGFwdGVyLT5waHlfcmVhZChhZGFwdGVyLAogCQkJCQkgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9TVEFUVVMsCkBAIC00NDMsNyArNDM5LDcgQEAKIAkJCXZhbCA9IG5ldHhlbl9nZXRfcGh5X2xpbmsoc3RhdHVzKTsKIAkJCXJldHVybiAhdmFsOwogCQl9Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCXZhbCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOwogCQlyZXR1cm4gKHZhbCA9PSBYR19MSU5LX1VQKSA/IDAgOiAxOwogCX0KQEAgLTQ3Myw5NSArNDY5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50Ci1uZXR4ZW5fbmljX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCi0JCQl1OCAqIGJ5dGVzKQotewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IG9mZnNldCA9IGVlcHJvbS0+b2Zmc2V0OwotCXN0YXRpYyBpbnQgZmxhc2hfc3RhcnQ7Ci0Jc3RhdGljIGludCByZWFkeV90b19mbGFzaDsKLQlpbnQgcmV0OwotCi0JaWYgKGZsYXNoX3N0YXJ0ID09IDApIHsKLQkJbmV0eGVuX2hhbHRfcGVncyhhZGFwdGVyKTsKLQkJcmV0ID0gbmV0eGVuX2ZsYXNoX3VubG9jayhhZGFwdGVyKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZsYXNoIHVubG9jayBmYWlsZWQuXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZmxhc2ggdW5sb2NrZWQuIFxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQlyZXQgPSBuZXR4ZW5fZmxhc2hfZXJhc2Vfc2Vjb25kYXJ5KGFkYXB0ZXIpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZsYXNoIGVyYXNlIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZWNvbmRhcnkgZmxhc2ggZXJhc2VkIHN1Y2Nlc3NmdWxseS5cbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJZmxhc2hfc3RhcnQgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAob2Zmc2V0ID09IE5FVFhFTl9CT09UTERfU1RBUlQpIHsKLQkJcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3ByaW1hcnkoYWRhcHRlcik7Ci0JCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmxhc2ggZXJhc2UgZmFpbGVkLlxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBuZXR4ZW5fcm9tX3NlKGFkYXB0ZXIsIE5FVFhFTl9VU0VSX1NUQVJUKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQkJcmV0dXJuIHJldDsKLQkJcmV0ID0gbmV0eGVuX3JvbV9zZShhZGFwdGVyLCBORVRYRU5fRklYRURfU1RBUlQpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBwcmltYXJ5IGZsYXNoIGVyYXNlZCBzdWNjZXNzZnVsbHlcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQotCQlyZXQgPSBuZXR4ZW5fYmFja3VwX2NyYmluaXQoYWRhcHRlcik7Ci0JCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ1JCaW5pdCBiYWNrdXAgZmFpbGVkLlxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENSQmluaXQgYmFja3VwIGRvbmUuXG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCXJlYWR5X3RvX2ZsYXNoID0gMTsKLQl9Ci0KLQlpZiAoIXJlYWR5X3RvX2ZsYXNoKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgd3JpdGUgc2VxdWVuY2UsIHJldHVybmluZy4uLlxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gbmV0eGVuX3JvbV9mYXN0X3dyaXRlX3dvcmRzKGFkYXB0ZXIsIG9mZnNldCwgYnl0ZXMsIGVlcHJvbS0+bGVuKTsKLX0KLSNlbmRpZiAvKiAwICovCi0KIHN0YXRpYyB2b2lkCiBuZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7CiAKIAlyaW5nLT5yeF9wZW5kaW5nID0gMDsKIAlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JDVl9DVFg7ICsraSkgewotCQlyaW5nLT5yeF9wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4W2ldLgotCQkgICAgcmRzX3JpbmdzW1JDVl9ERVNDX05PUk1BTF9DVFhJRF0ubWF4X3J4X2Rlc2NfY291bnQ7Ci0JCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHhbaV0uCi0JCSAgICByZHNfcmluZ3NbUkNWX0RFU0NfSlVNQk9fQ1RYSURdLm1heF9yeF9kZXNjX2NvdW50OwotCX0KLQlyaW5nLT50eF9wZW5kaW5nID0gYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQ7CisJcmluZy0+cnhfcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eC4KKwkJcmRzX3JpbmdzW1JDVl9SSU5HX05PUk1BTF0ubnVtX2Rlc2M7CisJcmluZy0+cnhfanVtYm9fcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eC4KKwkJcmRzX3JpbmdzW1JDVl9SSU5HX0pVTUJPXS5udW1fZGVzYzsKKwlyaW5nLT50eF9wZW5kaW5nID0gYWRhcHRlci0+bnVtX3R4ZDsKIAotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkKIAkJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOwogCWVsc2UKIAkJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKQEAgLTU3OSw3ICs1MDAsNyBAQAogCV9fdTMyIHZhbDsKIAlpbnQgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CiAKLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCiAJCQlyZXR1cm47CiAJCS8qIGdldCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KQEAgLTYwMiw3ICs1MjMsNyBAQAogCQkJCXBhdXNlLT50eF9wYXVzZSA9ICEobmV0eGVuX2diX2dldF9nYjNfbWFzayh2YWwpKTsKIAkJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgewogCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKSkKIAkJCXJldHVybjsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKQEAgLTYxMyw3ICs1MzQsNyBAQAogCQkJcGF1c2UtPnR4X3BhdXNlID0gIShuZXR4ZW5feGdfZ2V0X3hnMV9tYXNrKHZhbCkpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiIlczogVW5rbm93biBib2FyZCB0eXBlOiAleFxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSk7CisJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgYWRhcHRlci0+YWh3LnBvcnRfdHlwZSk7CiAJfQogfQogCkBAIC02MjUsNyArNTQ2LDcgQEAKIAlfX3UzMiB2YWw7CiAJaW50IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCS8qIHJlYWQgbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKSkKIAkJCXJldHVybiAtRUlPOwogCQkvKiBzZXQgZmxvdyBjb250cm9sICovCkBAIC02NjksNyArNTkwLDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQluZXR4ZW5fbmljX3dyaXRlX3cwKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfUEFVU0VfQ1RMLCB2YWwpOwotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgewogCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKSkKIAkJCXJldHVybiAtRUlPOwogCQluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwgTkVUWEVOX05JVV9YR19QQVVTRV9DVEwsICZ2YWwpOwpAQCAtNjg4LDcgKzYwOSw3IEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5rbm93biBib2FyZCB0eXBlOiAleFxuIiwKIAkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAotCQkJCWFkYXB0ZXItPmFody5ib2FyZF90eXBlKTsKKwkJCQlhZGFwdGVyLT5haHcucG9ydF90eXBlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04MTAsNiArNzMxLDUzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHdvbF9jZmcgPSAwOworCisJd29sLT5zdXBwb3J0ZWQgPSAwOworCXdvbC0+d29sb3B0cyA9IDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuOworCisJd29sX2NmZyA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUdfTlYpOworCWlmICh3b2xfY2ZnICYgKDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkKKwkJd29sLT5zdXBwb3J0ZWQgfD0gV0FLRV9NQUdJQzsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHKTsKKwlpZiAod29sX2NmZyAmICgxVUwgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHdvbF9jZmcgPSAwOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+V0FLRV9NQUdJQykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJd29sX2NmZyA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUdfTlYpOworCWlmICghKHdvbF9jZmcgJiAoMSA8PCBhZGFwdGVyLT5wb3J0bnVtKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHKTsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykKKwkJd29sX2NmZyB8PSAxVUwgPDwgYWRhcHRlci0+cG9ydG51bTsKKwllbHNlCisJCXdvbF9jZmcgJj0gfigxVUwgPDwgYWRhcHRlci0+cG9ydG51bSk7CisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUcsIHdvbF9jZmcpOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBTZXQgdGhlIGNvYWxlc2NpbmcgcGFyYW1ldGVycy4gQ3VycmVudGx5IG9ubHkgbm9ybWFsIGlzIHN1cHBvcnRlZC4KICAqIElmIHJ4X2NvYWxlc2NlX3VzZWNzID09IDAgb3IgcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPT0gMCB0aGVuIHNldCB0aGUKQEAgLTkwNiw5ICs4NzQsNiBAQAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9lZXByb21fbGVuID0gbmV0eGVuX25pY19nZXRfZWVwcm9tX2xlbiwKIAkuZ2V0X2VlcHJvbSA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbSwKLSNpZiAwCi0JLnNldF9lZXByb20gPSBuZXR4ZW5fbmljX3NldF9lZXByb20sCi0jZW5kaWYKIAkuZ2V0X3JpbmdwYXJhbSA9IG5ldHhlbl9uaWNfZ2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBuZXR4ZW5fbmljX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IG5ldHhlbl9uaWNfc2V0X3BhdXNlcGFyYW0sCkBAIC05MTYsNiArODgxLDggQEAKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF90c28gPSBuZXR4ZW5fbmljX2dldF90c28sCiAJLnNldF90c28gPSBuZXR4ZW5fbmljX3NldF90c28sCisJLmdldF93b2wgPSBuZXR4ZW5fbmljX2dldF93b2wsCisJLnNldF93b2wgPSBuZXR4ZW5fbmljX3NldF93b2wsCiAJLnNlbGZfdGVzdCA9IG5ldHhlbl9uaWNfZGlhZ190ZXN0LAogCS5nZXRfc3RyaW5ncyA9IG5ldHhlbl9uaWNfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gbmV0eGVuX25pY19nZXRfZXRodG9vbF9zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKaW5kZXggZTgwZjllMy4uMDE2YzYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9fTkVUWEVOX05JQ19IRFJfSF8KQEAgLTM2MiwxMiArMzYzLDYgQEAKICNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9MUEMJXAogCSgoTkVUWEVOX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfTFBDX0NSQl9BR1RfQURSKQogCi0vKgotICogTUFYX1JDVl9DVFggOiBUaGUgbnVtYmVyIG9mIHJlY2VpdmUgY29udGV4dHMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uCi0gKiB0aGUgcGhhbnRvbS4KLSAqLwotI2RlZmluZSBNQVhfUkNWX0NUWAkJCTEKLQogI2RlZmluZSBORVRYRU5fU1JFX0lOVF9TVEFUVVMJCShORVRYRU5fQ1JCX1NSRSArIDB4MDAwMzQpCiAjZGVmaW5lIE5FVFhFTl9TUkVfUEJJX0FDVElWRV9TVEFUVVMJKE5FVFhFTl9DUkJfU1JFICsgMHgwMTAxNCkKICNkZWZpbmUgTkVUWEVOX1NSRV9MMVJFX0NUTAkJKE5FVFhFTl9DUkJfU1JFICsgMHgwMzAwMCkKQEAgLTg1OCw2ICs4NTMsMTIgQEAKICNkZWZpbmUgTkVUWEVOX1BPUlRfTU9ERV9BRERSCQkoTkVUWEVOX0NBTV9SQU0oMHgyNCkpCiAjZGVmaW5lIE5FVFhFTl9XT0xfUE9SVF9NT0RFCQkoTkVUWEVOX0NBTV9SQU0oMHgxOTgpKQogCisjZGVmaW5lIE5FVFhFTl9XT0xfQ09ORklHX05WCQkoTkVUWEVOX0NBTV9SQU0oMHgxODQpKQorI2RlZmluZSBORVRYRU5fV09MX0NPTkZJRwkJKE5FVFhFTl9DQU1fUkFNKDB4MTg4KSkKKworI2RlZmluZSBOWF9QRUdfVFVORV9NTl9QUkVTRU5UCQkweDEKKyNkZWZpbmUgTlhfUEVHX1RVTkVfQ0FQQUJJTElUWQkJKE5FVFhFTl9DQU1fUkFNKDB4MDJjKSkKKwogI2RlZmluZSBORVRYRU5fQ0FNX1JBTV9ETUFfV0FUQ0hET0dfQ1RSTAkJKDB4MTQpCiAKICNkZWZpbmUJSVNSX01TSV9JTlRfVFJJR0dFUihGVU5DKSAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfTVNJX0YoRlVOQykpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKaW5kZXggODIxY2ZmNi4uNTAyNjgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiBTb3VyY2UgZmlsZSBmb3IgTklDIHJvdXRpbmVzIHRvIGFjY2VzcyB0aGUgUGhhbnRvbSBoYXJkd2FyZQorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtMzUsNyArMzIsNyBAQAogI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKICNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCiAKLQorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAKICNkZWZpbmUgTUFTSyhuKSAoKDFVTEw8PChuKSktMSkKQEAgLTUxOCw3ICs1MTUsNyBAQAogCQkJJmNtZF9kZXNjX2FycltpXSwgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkpOwogCiAJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsCi0JCQkJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCQkJCWFkYXB0ZXItPm51bV90eGQpOwogCQlpKys7CiAKIAl9IHdoaWxlIChpICE9IG5yX2VsZW1lbnRzKTsKQEAgLTY3Myw2ICs2NzAsNTMgQEAKIAlyZXR1cm4gcnY7CiB9CiAKKyNkZWZpbmUgUlNTX0hBU0hUWVBFX0lQX1RDUAkweDMKKworaW50IG5ldHhlbl9jb25maWdfcnNzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSkKK3sKKwlueF9uaWNfcmVxX3QgcmVxOworCXU2NCB3b3JkOworCWludCBpLCBydjsKKworCXU2NCBrZXlbXSA9IHsgMHhiZWFjMDFmYTZhNDJiNzNiVUxMLCAweDgwMzBmMjBjNzdjYjJkYTNVTEwsCisJCQkweGFlN2IzMGI0ZDBjYTJiY2JVTEwsIDB4NDNhMzhmYjA0MTY3MjUzZFVMTCwKKwkJCTB4MjU1YjBlYzI2ZDVhNTZkYVVMTCB9OworCisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoTlhfSE9TVF9SRVFVRVNUIDw8IDIzKTsKKworCXdvcmQgPSBOWF9OSUNfSDJDX09QQ09ERV9DT05GSUdfUlNTIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CisJcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkKTsKKworCS8qCisJICogUlNTIHJlcXVlc3Q6CisJICogYml0cyAzLTA6IGhhc2hfbWV0aG9kCisJICogICAgICA1LTQ6IGhhc2hfdHlwZV9pcHY0CisJICoJNy02OiBoYXNoX3R5cGVfaXB2NgorCSAqCSAgODogZW5hYmxlCisJICogICAgICAgIDk6IHVzZSBpbmRpcmVjdGlvbiB0YWJsZQorCSAqICAgIDQ3LTEwOiByZXNlcnZlZAorCSAqICAgIDYzLTQ4OiBpbmRpcmVjdGlvbiB0YWJsZSBtYXNrCisJICovCisJd29yZCA9ICAoKHU2NCkoUlNTX0hBU0hUWVBFX0lQX1RDUCAmIDB4MykgPDwgNCkgfAorCQkoKHU2NCkoUlNTX0hBU0hUWVBFX0lQX1RDUCAmIDB4MykgPDwgNikgfAorCQkoKHU2NCkoZW5hYmxlICYgMHgxKSA8PCA4KSB8CisJCSgoMHg3VUxMKSA8PCA0OCk7CisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQod29yZCk7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcmVxLndvcmRzW2krMV0gPSBjcHVfdG9fbGU2NChrZXlbaV0pOworCisKKwlydiA9IG5ldHhlbl9zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGNvbmZpZ3VyZSBSU1NcbiIsCisJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gcnY7Cit9CisKIC8qCiAgKiBuZXR4ZW5fbmljX2NoYW5nZV9tdHUgLSBDaGFuZ2UgdGhlIE1heGltdW0gVHJhbnNmZXIgVW5pdAogICogQHJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCkBAIC03MDYsMzQgKzc1MCwxMSBAQAogCXJldHVybiByYzsKIH0KIAotaW50IG5ldHhlbl9pc19mbGFzaF9zdXBwb3J0ZWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWNvbnN0IGludCBsb2NzW10gPSB7IDAsIDB4NCwgMHgxMDAsIDB4NDAwMCwgMHg0MTI4IH07Ci0JaW50IGFkZHIsIHZhbDAxLCB2YWwwMiwgaSwgajsKLQotCS8qIGlmIHRoZSBmbGFzaCBzaXplIGxlc3MgdGhhbiA0TWIsIG1ha2UgaHVnZSB3YXIgY3J5IGFuZCBkaWUgKi8KLQlmb3IgKGogPSAxOyBqIDwgNDsgaisrKSB7Ci0JCWFkZHIgPSBqICogTkVUWEVOX05JQ19XSU5ET1dfTUFSR0lOOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb2NzKTsgaSsrKSB7Ci0JCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgbG9jc1tpXSwgJnZhbDAxKSA9PSAwCi0JCQkgICAgJiYgbmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgKGFkZHIgKyBsb2NzW2ldKSwKLQkJCQkJCSAgICAmdmFsMDIpID09IDApIHsKLQkJCQlpZiAodmFsMDEgPT0gdmFsMDIpCi0JCQkJCXJldHVybiAtMTsKLQkJCX0gZWxzZQotCQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG5ldHhlbl9nZXRfZmxhc2hfYmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYmFzZSwKIAkJCQkgIGludCBzaXplLCBfX2xlMzIgKiBidWYpCiB7Ci0JaW50IGksIGFkZHI7CisJaW50IGksIHYsIGFkZHI7CiAJX19sZTMyICpwdHIzMjsKLQl1MzIgdjsKIAogCWFkZHIgPSBiYXNlOwogCXB0cjMyID0gYnVmOwpAQCAtOTM2LDEzICs5NTcsMTIgQEAKIAl1MzIgd2luX3JlYWQ7CiAKIAlhZGFwdGVyLT5jcmJfd2luID0gQ1JCX0hJKCpvZmYpOwotCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAodm9pZCAqKShDUkJfV0lORE9XXzJNICsKLQkJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCkpOworCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIENSQl9XSU5ET1dfMk0pKTsKIAkvKgogCSAqIFJlYWQgYmFjayB2YWx1ZSB0byBtYWtlIHN1cmUgd3JpdGUgaGFzIGdvbmUgdGhyb3VnaCBiZWZvcmUgdHJ5aW5nCiAJICogdG8gdXNlIGl0LgogCSAqLwotCXdpbl9yZWFkID0gcmVhZGwoKHZvaWQgKikoQ1JCX1dJTkRPV18yTSArIGFkYXB0ZXItPmFody5wY2lfYmFzZTApKTsKKwl3aW5fcmVhZCA9IHJlYWRsKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfV0lORE9XXzJNKTsKIAlpZiAod2luX3JlYWQgIT0gYWRhcHRlci0+Y3JiX3dpbikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0dGVuIGNyYndpbiAoMHgleCkgIT0gIgogCQkJCSJSZWFkIGNyYndpbiAoMHgleCksIG9mZj0weCVseFxuIiwKQEAgLTk1MiwyNCArOTcyLDY5IEBACiAJCSh1bG9uZylhZGFwdGVyLT5haHcucGNpX2Jhc2UwOwogfQogCi1pbnQgbmV0eGVuX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludAorbmV0eGVuX2RvX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICpmd25hbWUsCisJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0JaW50IGk7Ci0JdTMyIGRhdGEsIHNpemUgPSAwOwotCXUzMiBmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCXU2NCAqcHRyNjQ7CisJdTMyIGksIGZsYXNoYWRkciwgc2l6ZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpLzQ7CisJaWYgKGZ3KQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZpbGUgJXNcbiIsIGZ3bmFtZSk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZsYXNoXG4iKTsKIAogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJTkVUWEVOX1JPTVVTQl9HTEJfQ0FTX1JTVCwgMSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBmbGFzaGFkZHIsIChpbnQgKikmZGF0YSkgIT0gMCkKLQkJCXJldHVybiAtRUlPOworCWlmIChmdykgeworCQlfX2xlNjQgZGF0YTsKIAotCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDQpOwotCQlmbGFzaGFkZHIgKz0gNDsKKwkJc2l6ZSA9IChORVRYRU5fSU1BR0VfU1RBUlQgLSBORVRYRU5fQk9PVExEX1NUQVJUKSAvIDg7CisKKwkJcHRyNjQgPSAodTY0ICopJmZ3LT5kYXRhW05FVFhFTl9CT09UTERfU1RBUlRdOworCQlmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisJCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDgpOworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKworCQlzaXplID0gKih1MzIgKikmZnctPmRhdGFbTlhfRldfU0laRV9PRkZTRVRdOworCQlzaXplID0gKF9fZm9yY2UgdTMyKWNwdV90b19sZTMyKHNpemUpIC8gODsKKworCQlwdHI2NCA9ICh1NjQgKikmZnctPmRhdGFbTkVUWEVOX0lNQUdFX1NUQVJUXTsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0lNQUdFX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA4KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKwl9IGVsc2UgeworCQl1MzIgZGF0YTsKKworCQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpIC8gNDsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0JPT1RMRF9TVEFSVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCQkJZmxhc2hhZGRyLCAoaW50ICopJmRhdGEpICE9IDApCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA0KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDQ7CisJCX0KIAl9CiAJbXNsZWVwKDEpOwogCkBAIC05ODYsMTIgKzEwNTEsMTM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKmZ3bmFtZSwKKwkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlfX2xlMzIgdmFsOworCXUzMiBtYWpvciwgbWlub3IsIGJ1aWxkLCB2ZXIsIG1pbl92ZXIsIGJpb3M7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaWYgKGZ3LT5zaXplIDwgTlhfRldfTUlOX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfRldfTUFHSUNfT0ZGU0VUXSk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gTkVUWEVOX0JESU5GT19NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSZmdy0+ZGF0YVtOWF9GV19WRVJTSU9OX09GRlNFVF0pOworCW1ham9yID0gKF9fZm9yY2UgdTMyKXZhbCAmIDB4ZmY7CisJbWlub3IgPSAoKF9fZm9yY2UgdTMyKXZhbCA+PiA4KSAmIDB4ZmY7CisJYnVpbGQgPSAoX19mb3JjZSB1MzIpdmFsID4+IDE2OworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCW1pbl92ZXIgPSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIxNik7CisJZWxzZQorCQltaW5fdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpOworCisJdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERShtYWpvciwgbWlub3IsIGJ1aWxkKTsKKworCWlmICgobWFqb3IgPiBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUikgfHwgKHZlciA8IG1pbl92ZXIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCisJCQkJZnduYW1lLCBtYWpvciwgbWlub3IsIGJ1aWxkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfQklPU19WRVJTSU9OX09GRlNFVF0pOworCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIE5YX0JJT1NfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmYmlvcyk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gYmlvcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmlybXdhcmUgYmlvcyBpcyBpbmNvbXBhdGlibGVcbiIsCisJCQkJZnduYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgZmxhc2hlZCBmaXJtd2FyZSBpcyBuZXdlciAqLworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmdmFsKSkKKwkJcmV0dXJuIC1FSU87CisJbWFqb3IgPSAoX19mb3JjZSB1MzIpdmFsICYgMHhmZjsKKwltaW5vciA9ICgoX19mb3JjZSB1MzIpdmFsID4+IDgpICYgMHhmZjsKKwlidWlsZCA9IChfX2ZvcmNlIHUzMil2YWwgPj4gMTY7CisJaWYgKE5FVFhFTl9WRVJTSU9OX0NPREUobWFqb3IsIG1pbm9yLCBidWlsZCkgPiB2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX0NBTV9SQU0oMHgxZmMpLAorCQkJTkVUWEVOX0JESU5GT19NQUdJQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpmd19uYW1lW10gPSB7ICJueHJvbWltZy5iaW4iLCAibngzZndjdC5iaW4iLCAibngzZndtbi5iaW4iIH07CisKK2ludCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGNhcGFiaWxpdHksIGZsYXNoZWRfdmVyOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGZ3X3R5cGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCByYyA9IDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlmd190eXBlID0gTlhfUDJfTU5fUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9IGVsc2UgeworCQlmd190eXBlID0gTlhfUDNfQ1RfUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9CisKK3JlcXVlc3RfbW46CisJY2FwYWJpbGl0eSA9IDA7CisKKwluZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmZmxhc2hlZF92ZXIpOworCWlmIChmbGFzaGVkX3ZlciA+PSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIyMCkpIHsKKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCU5YX1BFR19UVU5FX0NBUEFCSUxJVFksICZjYXBhYmlsaXR5LCA0KTsKKwkJaWYgKGNhcGFiaWxpdHkgJiBOWF9QRUdfVFVORV9NTl9QUkVTRU5UKSB7CisJCQlmd190eXBlID0gTlhfUDNfTU5fUk9NSU1BR0U7CisJCQlnb3RvIHJlcXVlc3RfZnc7CisJCX0KKwl9CisKK3JlcXVlc3RfZnc6CisJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZVtmd190eXBlXSwgJnBkZXYtPmRldik7CisJaWYgKHJjICE9IDApIHsKKwkJaWYgKGZ3X3R5cGUgPT0gTlhfUDNfQ1RfUk9NSU1BR0UpIHsKKwkJCW1zbGVlcCgxKTsKKwkJCWdvdG8gcmVxdWVzdF9tbjsKKwkJfQorCisJCWZ3ID0gTlVMTDsKKwkJZ290byBsb2FkX2Z3OworCX0KKworCXJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKwlpZiAocmMgIT0gMCkgeworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCQlpZiAoZndfdHlwZSA9PSBOWF9QM19DVF9ST01JTUFHRSkgeworCQkJbXNsZWVwKDEpOworCQkJZ290byByZXF1ZXN0X21uOworCQl9CisKKwkJZncgPSBOVUxMOworCX0KKworbG9hZF9mdzoKKwlyYyA9IG5ldHhlbl9kb19sb2FkX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKworCWlmIChmdykKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJjOworfQorCiBpbnQKIG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXVsb25nIG9mZiwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJaWYgKEFERFJfSU5fV0lORE9XMShvZmYpKSB7CiAJCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOwogCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLwpAQCAtOTk5LDM3ICsxMTg3LDEzIEBACiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKIAl9CiAKLQlEUFJJTlRLKElORk8sICJ3cml0aW5nIHRvIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXAiCi0JCSIgZGF0YSAlbGx4IGxlbiAlZFxuIiwKLQkJcGNpX2Jhc2UoYWRhcHRlciwgb2ZmKSwgb2ZmLCBhZGRyLAotCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEsIGxlbik7CiAJaWYgKCFhZGRyKSB7CiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCXdyaXRlYigqKHU4ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHUxNiAqKSBkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJd3JpdGVxKCoodTY0ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuID4+IDMpKTsKKwl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7CiAKLQkJbmV0eGVuX25pY19od19ibG9ja193cml0ZTY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAgKGxlbiA+PiAzKSk7Ci0JCWJyZWFrOwotCX0KIAlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAKQEAgLTEwNDIsNiArMTIwNiw4IEBACiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCisJQlVHX09OKGxlbiAhPSA0KTsKKwogCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewkvKiBXaW5kb3cgMSAqLwogCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKIAl9IGVsc2UgewkJLyogV2luZG93IDAgKi8KQEAgLTEwNDksMzEgKzEyMTUsMTIgQEAKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCX0KIAotCURQUklOVEsoSU5GTywgInJlYWRpbmcgZnJvbSBiYXNlICVseCBvZmZzZXQgJWxseCBhZGRyICVwXG4iLAotCQlwY2lfYmFzZShhZGFwdGVyLCBvZmYpLCBvZmYsIGFkZHIpOwogCWlmICghYWRkcikgewogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAJCXJldHVybiAxOwogCX0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1OCAqKSBkYXRhID0gcmVhZGIoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJKih1MTYgKikgZGF0YSA9IHJlYWR3KGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSoodTMyICopIGRhdGEgPSByZWFkbChhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHU2NCAqKSBkYXRhID0gcmVhZHEoYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5ldHhlbl9uaWNfaHdfYmxvY2tfcmVhZDY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAobGVuID4+IDMpKTsKLQkJYnJlYWs7Ci0JfQotCURQUklOVEsoSU5GTywgInJlYWQgJWx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgKilkYXRhKTsKKworCSoodTMyICopZGF0YSA9IHJlYWRsKGFkZHIpOwogCiAJaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwpAQCAtMTA4OCw2ICsxMjM1LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgcnY7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJcnYgPSBuZXR4ZW5fbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgJm9mZiwgbGVuKTsKIAogCWlmIChydiA9PSAtMSkgewpAQCAtMTEwMSwzNCArMTI1MCwxMiBAQAogCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCQljcmJfd2luX2xvY2soYWRhcHRlcik7CiAJCW5ldHhlbl9uaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgJm9mZik7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAid3JpdGUgZGF0YSAlbHggdG8gb2Zmc2V0ICVsbHgsIGxlbj0lZFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyAqKWRhdGEsIG9mZiwgbGVuKTsKLQotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQl3cml0ZWIoKih1aW50OF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHVpbnQxNl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHVpbnQzMl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCXdyaXRlcSgqKHVpbnQ2NF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKDEsIElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuPj4zKSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAocnYgPT0gMSkgeworCQl3cml0ZWwoKih1aW50MzJfdCAqKWRhdGEsICh2b2lkIF9faW9tZW0gKilvZmYpOwogCQljcmJfd2luX3VubG9jayhhZGFwdGVyKTsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCX0KKwl9IGVsc2UKKwkJd3JpdGVsKCoodWludDMyX3QgKilkYXRhLCAodm9pZCBfX2lvbWVtICopb2ZmKTsKKwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQwLDYgKzEyNjcsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCBydjsKIAorCUJVR19PTihsZW4gIT0gNCk7CisKIAlydiA9IG5ldHhlbl9uaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCAmb2ZmLCBsZW4pOwogCiAJaWYgKHJ2ID09IC0xKSB7CkBAIC0xMTUzLDMzICsxMjgyLDExIEBACiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKIAkJbmV0eGVuX25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCAmb2ZmKTsKLQl9Ci0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkIGZyb20gb2Zmc2V0ICVseCwgbGVuPSVkXG4iLCBvZmYsIGxlbik7Ci0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1aW50OF90ICopZGF0YSA9IHJlYWRiKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHVpbnQxNl90ICopZGF0YSA9IHJlYWR3KCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqKHVpbnQzMl90ICopZGF0YSA9IHJlYWRsKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHVpbnQ2NF90ICopZGF0YSA9IHJlYWRxKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOwotCi0JaWYgKHJ2ID09IDEpIHsKKwkJKih1aW50MzJfdCAqKWRhdGEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopb2ZmKTsKIAkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQl9CisJfSBlbHNlCisJCSoodWludDMyX3QgKilkYXRhID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW9mZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NDEsMTAgKzE1NDgsOSBAQAogCQkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkICphZGRyOworCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOwogCWludCByZXQgPSAwOwogCXU2NCBzdGFydDsKLQl1aW50OF90ICptZW1fcHRyID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7CiAKQEAgLTE0NjQsNyArMTU3MCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlhZGRyID0gKHZvaWQgKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KSk7CisJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCk7CiAJaWYgKCFhZGRyKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCk7CkBAIC0xNTAzLDcgKzE2MDksNiBAQAogCQlicmVhazsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCURQUklOVEsoMSwgSU5GTywgInJlYWQgJWxseFxuIiwgKih1bnNpZ25lZCBsb25nIGxvbmcgKilkYXRhKTsKIAogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwpAQCAtMTUxNSwxMCArMTYyMCw5IEBACiAJCXZvaWQgKmRhdGEsIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKKwl2b2lkIF9faW9tZW0gKmFkZHIsICptZW1fcHRyID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAl1NjQgc3RhcnQ7Ci0JdWludDhfdCAqbWVtX3B0ciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKIAl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwogCkBAIC0xNTM4LDcgKzE2NDIsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JYWRkciA9ICh2b2lkICopKHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCkpOworCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgc3RhcnQpOwogCWlmICghYWRkcikgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDApOwpAQCAtMTU3NSw4ICsxNjc5LDYgQEAKIAkJYnJlYWs7CiAJfQogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQlEUFJJTlRLKDEsIElORk8sICJ3cml0aW5nIGRhdGEgJWxseCB0byBvZmZzZXQgJWxseFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSwgc3RhcnQpOwogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwogCXJldHVybiByZXQ7CkBAIC0xNTg4LDEwICsxNjkwLDExIEBACiBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiwgcmV0ID0gMCwgbG9vcCwgc3pbMl0sIG9mZjA7CiAJdWludDMyX3QgICAgICB0ZW1wOwogCXVpbnQ2NF90ICAgICAgb2ZmOCwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAkvKgogCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCkBAIC0xNjA1LDcgKzE3MDgsNyBAQAogCXN6WzBdID0gKHNpemUgPCAoOCAtIG9mZjApKSA/IHNpemUgOiAoOCAtIG9mZjApOwogCXN6WzFdID0gc2l6ZSAtIHN6WzBdOwogCWxvb3AgPSAoKG9mZjAgKyBzaXplIC0gMSkgPj4gMykgKyAxOwotCW1lbV9jcmIgPSAodW5zaWduZWQgbG9uZylwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKKwltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CiAKIAlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZjAgIT0gMCkpICB7CiAJCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKQEAgLTE2NDMsMjggKzE3NDYsMjkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKIAkJd3JpdGVsKCh1aW50MzJfdCkob2ZmOCArIChpIDw8IDMpKSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPKSk7CiAJCXdyaXRlbCgwLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKIAkJd3JpdGVsKHdvcmRbaV0gJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CiAJCXdyaXRlbCgod29yZFtpXSA+PiAzMikgJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CiAJCXdyaXRlbChNSVVfVEFfQ1RMX0VOQUJMRXxNSVVfVEFfQ1RMX1dSSVRFLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJd3JpdGVsKE1JVV9UQV9DVExfU1RBUlR8TUlVX1RBX0NUTF9FTkFCTEV8TUlVX1RBX0NUTF9XUklURSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkgICAgIChtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoIiVzOiAlcyBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCV9fZnVuY19fLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJcmV0ID0gLTE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY3OSwxMCArMTc4MywxMSBAQAogbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiA9IDAsIGssIHN0YXJ0LCBlbmQsIGxvb3AsIHN6WzJdLCBvZmYwWzJdOwogCXVpbnQzMl90ICAgICAgdGVtcDsKIAl1aW50NjRfdCAgICAgIG9mZjgsIHZhbCwgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAogCS8qCkBAIC0xNjk3LDMxICsxODAyLDMyIEBACiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMFswXSkpID8gc2l6ZSA6ICg4IC0gb2ZmMFswXSk7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAJbG9vcCA9ICgob2ZmMFswXSArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0JbWVtX2NyYiA9ICh1bnNpZ25lZCBsb25nKXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewogCQl3cml0ZWwoKHVpbnQzMl90KShvZmY4ICsgKGkgPDwgMykpLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9MTykpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKIAkJd3JpdGVsKDAsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9FTkFCTEUsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9TVEFSVHxNSVVfVEFfQ1RMX0VOQUJMRSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAgKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJICAgICAgKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKIAkJCQlicmVhazsKIAkJfQogCiAJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIEZhaWwgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iLAotCQkJCQlfX2Z1bmNfXywgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTcyOSw3ICsxODM1LDcgQEAKIAkJZW5kICAgPSAob2ZmMFtpXSArIHN6W2ldIC0gMSkgPj4gMjsKIAkJZm9yIChrID0gc3RhcnQ7IGsgPD0gZW5kOyBrKyspIHsKIAkJCXdvcmRbaV0gfD0gKCh1aW50NjRfdCkgcmVhZGwoCi0JCQkJICAgICh2b2lkICopKG1lbV9jcmIgKworCQkJCSAgICAobWVtX2NyYiArCiAJCQkJICAgIE1JVV9URVNUX0FHVF9SRERBVEEoaykpKSA8PCAoMzIqaykpOwogCQl9CiAJfQpAQCAtMTc2MSw3ICsxODY3LDYgQEAKIAkJKih1aW50NjRfdCAqKWRhdGEgPSB2YWw7CiAJCWJyZWFrOwogCX0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkICVsbHhcbiIsICoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NTcsOCArMTk2Miw5IEBACiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gd3JpdGUgdGhyb3VnaCBhZ2VudFxuIik7CiAJCQlyZXQgPSAtMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xOTI3LDggKzIwMzMsOSBAQAogCQl9CiAKIAkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE5NzAsNyArMjA3Nyw2IEBACiAJCSoodWludDY0X3QgKilkYXRhID0gdmFsOwogCQlicmVhazsKIAl9Ci0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDA1LDYyICsyMTExLDQ2IEBACiAJcmV0dXJuIHRlbXA7CiB9CiAKLSNpZiAwCi1pbnQKLW5ldHhlbl9uaWNfZXJhc2VfcHhlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAobmV0eGVuX3JvbV9mYXN0X3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9QWEVfU1RBUlQsIDApID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVyYXNlIHB4ZSBmYWlsZWRcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgcnYgPSAwOwotCWludCBhZGRyID0gTkVUWEVOX0JSRENGR19TVEFSVDsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbzsKLQlpbnQgaW5kZXg7Ci0JdTMyICpwdHIzMjsKKwlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYywgaGVhZGVyX3ZlcnNpb247CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYm9hcmRpbmZvID0gJmFkYXB0ZXItPmFody5ib2FyZGNmZzsKLQlwdHIzMiA9ICh1MzIgKikgYm9hcmRpbmZvOworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIG1hZ2ljKTsKKwlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgb2Zmc2V0LCAmbWFnaWMpKQorCQlyZXR1cm4gLUVJTzsKIAotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpemVvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8pIC8gc2l6ZW9mKHUzMik7Ci0JICAgICBpbmRleCsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCBwdHIzMikgPT0gLTEpIHsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCXB0cjMyKys7Ci0JCWFkZHIgKz0gc2l6ZW9mKHUzMik7Ci0JfQotCWlmIChib2FyZGluZm8tPm1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMpIHsKLQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCBjb25maWcuIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPm1hZ2ljLCBORVRYRU5fQkRJTkZPX01BR0lDKTsKLQkJcnYgPSAtMTsKLQl9Ci0JaWYgKGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7Ci0JCXByaW50aygiJXM6IFVua25vd24gYm9hcmQgY29uZmlnIHZlcnNpb24uIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24sIE5FVFhFTl9CRElORk9fVkVSU0lPTik7Ci0JCXJ2ID0gLTE7CisJb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCisJCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgaGVhZGVyX3ZlcnNpb24pOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZoZWFkZXJfdmVyc2lvbikpCisJCXJldHVybiAtRUlPOworCisJaWYgKG1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMgfHwKKwkJCWhlYWRlcl92ZXJzaW9uICE9IE5FVFhFTl9CRElORk9fVkVSU0lPTikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiaW52YWxpZCBib2FyZCBjb25maWcsIG1hZ2ljPSUwOHgsIHZlcnNpb249JTA4eFxuIiwKKwkJCW1hZ2ljLCBoZWFkZXJfdmVyc2lvbik7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChib2FyZGluZm8tPmJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTSkgeworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIGJvYXJkX3R5cGUpOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisKKwlpZiAoYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NKSB7CiAJCXUzMiBncGlvID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLAogCQkJCU5FVFhFTl9ST01VU0JfR0xCX1BBRF9HUElPX0kpOwogCQlpZiAoKGdwaW8gJiAweDgwMDApID09IDApCi0JCQlib2FyZGluZm8tPmJvYXJkX3R5cGUgPSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA7CisJCQlib2FyZF90eXBlID0gTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOwogCX0KIAotCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX0dCRTsKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOwogCQlicmVhazsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKQEAgLTIwNzYsNyArMjE2Niw3IEBACiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfU0ZQX1FUOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1hGUDoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDFfQkQ6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMV9TQjoKQEAgLTIwODUsMjAgKzIxNzUsMTkgQEAKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRzoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0I6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gTkVUWEVOX05JQ19HQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gKGFkYXB0ZXItPnBvcnRudW0gPCAyKSA/CiAJCQlORVRYRU5fTklDX1hHQkUgOiBORVRYRU5fTklDX0dCRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVW5rbm93bigleClcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPmJvYXJkX3R5cGUpOwotCQlydiA9IC1FTk9ERVY7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVua25vd24gYm9hcmQgdHlwZSAleFxuIiwgYm9hcmRfdHlwZSk7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBydjsKKwlyZXR1cm4gMDsKIH0KIAogLyogTklVIGFjY2VzcyBzZWN0aW9ucyAqLwpAQCAtMjE0NCw3ICsyMjMzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKIAkJCQlORVRYRU5fUE9SVF9NT0RFX0FERFIsICZwb3J0X21vZGUsIDQpOwogCQlpZiAocG9ydF9tb2RlID09IE5FVFhFTl9QT1JUX01PREVfODAyXzNfQVApIHsKQEAgLTIxOTksMzIgKzIyODgsMjcgQEAKIAl9CiB9CiAKLXZvaWQgbmV0eGVuX25pY19mbGFzaF9wcmludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIG5ldHhlbl9uaWNfZ2V0X2Zpcm13YXJlX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBmd19tYWpvciA9IDA7Ci0JdTMyIGZ3X21pbm9yID0gMDsKLQl1MzIgZndfYnVpbGQgPSAwOworCXUzMiBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkOwogCWNoYXIgYnJkX25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKIAljaGFyIHNlcmlhbF9udW1bMzJdOwotCWludCBpLCBhZGRyOwotCV9fbGUzMiAqcHRyMzI7Ci0KLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmKGFkYXB0ZXItPmFody5ib2FyZGNmZyk7CisJaW50IGksIGFkZHIsIHZhbDsKKwlpbnQgKnB0cjMyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAogCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDA7CiAKLQlwdHIzMiA9ICh1MzIgKikmc2VyaWFsX251bTsKKwlwdHIzMiA9IChpbnQgKikmc2VyaWFsX251bTsKIAlhZGRyID0gTkVUWEVOX1VTRVJfU1RBUlQgKwogCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX25ld191c2VyX2luZm8sIHNlcmlhbF9udW0pOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHB0cjMyKSA9PSAtMSkgewotCQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCB1c2VyYXJlYS5cbiIsCi0JCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ2YWwpID09IC0xKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciByZWFkaW5nIGJvYXJkIGluZm9cbiIpOwogCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKIAkJCXJldHVybjsKIAkJfQotCQlwdHIzMisrOworCQlwdHIzMltpXSA9IGNwdV90b19sZTMyKHZhbCk7CiAJCWFkZHIgKz0gc2l6ZW9mKHUzMik7CiAJfQogCkBAIC0yMjMzLDIzICsyMzE3LDQ4IEBACiAJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9TVUIsICZmd19idWlsZCwgNCk7CiAKIAlhZGFwdGVyLT5md19tYWpvciA9IGZ3X21ham9yOworCWFkYXB0ZXItPmZ3X3ZlcnNpb24gPSBORVRYRU5fVkVSU0lPTl9DT0RFKGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwogCiAJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgewotCQlnZXRfYnJkX25hbWVfYnlfdHlwZShib2FyZF9pbmZvLT5ib2FyZF90eXBlLCBicmRfbmFtZSk7CisJCWdldF9icmRfbmFtZV9ieV90eXBlKGFkYXB0ZXItPmFody5ib2FyZF90eXBlLCBicmRfbmFtZSk7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0WGVuICVzIEJvYXJkIFMvTiAlcyAgQ2hpcCByZXYgMHgleFxuIiwKIAkJCQlicmRfbmFtZSwgc2VyaWFsX251bSwgYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0WGVuIEZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWRcbiIsCi0JCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CiAJfQogCi0JaWYgKE5FVFhFTl9WRVJTSU9OX0NPREUoZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCkgPAotCQkJTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpKSB7CisJaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPCBORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKIAkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKIAkJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKIAkJcmV0dXJuOwogCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkXG4iLAorCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmaSwgNCk7CisJCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA9IChpICYgMHg0KSA/IDEgOiAwOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgcnVubmluZyBpbiAlcyBtb2RlXG4iLAorCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPyAiY3V0LXRocm91Z2giIDogImxlZ2FjeSIpOworCX0KIH0KIAoraW50CituZXR4ZW5fbmljX3dvbF9zdXBwb3J0ZWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB3b2xfY2ZnOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAwOworCisJd29sX2NmZyA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUdfTlYpOworCWlmICh3b2xfY2ZnICYgKDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkgeworCQl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJCWlmICh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCmluZGV4IGFhZTczN2QuLjA0YjQ3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogU3RydWN0dXJlcywgZW51bXMsIGFuZCBtYWNyb3MgZm9yIHRoZSBNQUMKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTU0LDM3ICs1MSwxMiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2h3X2Jsb2NrX3dyaXRlNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKLQkJCQkJICAgICAgIHU2NCBfX2lvbWVtICogYWRkciwKLQkJCQkJICAgICAgIGludCBudW1fd29yZHMpCi17Ci0JaW50IG51bTsKLQlmb3IgKG51bSA9IDA7IG51bSA8IG51bV93b3JkczsgbnVtKyspIHsKLQkJd3JpdGVxKHJlYWRxKCh2b2lkIF9faW9tZW0gKilkYXRhX3B0ciksIGFkZHIpOwotCQlhZGRyKys7Ci0JCWRhdGFfcHRyKys7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKLQkJCQkJICAgICAgdTY0IF9faW9tZW0gKiBhZGRyLCBpbnQgbnVtX3dvcmRzKQotewotCWludCBudW07Ci0JZm9yIChudW0gPSAwOyBudW0gPCBudW1fd29yZHM7IG51bSsrKSB7Ci0JCXdyaXRlcShyZWFkcSgodm9pZCBfX2lvbWVtICopYWRkciksIGRhdGFfcHRyKTsKLQkJYWRkcisrOwotCQlkYXRhX3B0cisrOwotCX0KLQotfQotCiBzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXI7CiAKICNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFX0JZVEVTICAoTkVUWEVOX1BDSV9NQVBTSVpFIDw8IDIwKQogCiBzdHJ1Y3QgbmV0eGVuX3BvcnQ7CiB2b2lkIG5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBuZXR4ZW5fbmljX2ZsYXNoX3ByaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKIHR5cGVkZWYgdTggbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdFs2XTsKIApAQCAtMTQ4LDMzICsxMjAsNiBAQAogI2RlZmluZSBuZXR4ZW5fZ2JfZ2V0X3NvZnRfcmVzZXQoY29uZmlnX3dvcmQpCVwKIAkJX25ldHhlbl9jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAzMSkKIAotLyoKLSAqIE5JVSBHQiBNQUMgQ29uZmlnIFJlZ2lzdGVyIDEgKGFwcGxpZXMgdG8gR0IwLCBHQjEsIEdCMiwgR0IzKQotICoKLSAqCUJpdCAwCSAgICA6IGR1cGxleCA9PiAxOmZ1bGwgZHVwbGV4IG1vZGUsIDA6aGFsZiBkdXBsZXgKLSAqCUJpdCAxCSAgICA6IGNyY19lbmFibGUgPT4gMTphcHBlbmQgQ1JDIHRvIHhtaXQgZnJhbWVzLCAwOmRvbnQgYXBwZW5kCi0gKglCaXQgMgkgICAgOiBwYWRzaG9ydCA9PiAxOnBhZCBzaG9ydCBmcmFtZXMgYW5kIGFkZCBDUkMsIDA6ZG9udCBwYWQKLSAqCUJpdCA0CSAgICA6IGNoZWNrbGVuZ3RoID0+IDE6Y2hlY2sgZnJhbWVsZW4gd2l0aCBhY3R1YWwsMDpkb250IGNoZWNrCi0gKglCaXQgNQkgICAgOiBodWdlZnJhbWVzID0+IDE6YWxsb3cgb3ZlcnNpemUgeG1pdCBmcmFtZXMsIDA6ZG9udCBhbGxvdwotICoJQml0cyA4LTkgICAgOiBpbnRmbW9kZSA9PiAwMTpuaWJibGUgKDEwLzEwMCksIDEwOmJ5dGUgKDEwMDApCi0gKglCaXRzIDEyLTE1ICA6IHByZWFtYmxlbGVuID0+IHByZWFtYmxlIGZpZWxkIGxlbmd0aCBpbiBieXRlcywgZGVmYXVsdCA3Ci0gKi8KLQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2R1cGxleChjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfY3JjX2VuYWJsZShjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEpCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfcGFkc2hvcnQoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCAyKQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2NoZWNrbGVuZ3RoKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNCkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9odWdlZnJhbWVzKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNSkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9wcmVhbWJsZWxlbihjb25maWdfd29yZCwgdmFsKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9ICgodmFsKSA8PCAxMikgJiAweEYwMDApCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfaW50Zm1vZGUoY29uZmlnX3dvcmQsIHZhbCkJCVwKLQkJKChjb25maWdfd29yZCkgfD0gKCh2YWwpIDw8IDgpICYgMHgzMDApCi0KICNkZWZpbmUgbmV0eGVuX2diX2dldF9zdGF0aW9uYWRkcmVzc19sb3coY29uZmlnX3dvcmQpICgoY29uZmlnX3dvcmQpID4+IDE2KQogCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfbWlpX21nbXRfY2xvY2tzZWxlY3QoY29uZmlnX3dvcmQsIHZhbCkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IGZmZDM3YmUuLjA3NTljMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDEyICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0Ci0gKgotICoKLSAqIFNvdXJjZSBmaWxlIGZvciBOSUMgcm91dGluZXMgdG8gaW5pdGlhbGl6ZSB0aGUgUGhhbnRvbSBIYXJkd2FyZQorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtNTIsMTcgKzQ5LDkgQEAKIAogI2RlZmluZSBORVRYRU5fTklDX1hETUFfUkVTRVQgMHg4MDAwZmYKIAotc3RhdGljIHZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdWludDMyX3QgY3R4LCB1aW50MzJfdCByaW5naWQpOwotCi0jaWYgMAotc3RhdGljIHZvaWQgbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdW5zaWduZWQgbG9uZyBvZmYsIGludCAqZGF0YSkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKLQl3cml0ZWwoKmRhdGEsIGFkZHIpOwotfQotI2VuZGlmICAvKiAgMCAgKi8KK3N0YXRpYyB2b2lkCituZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogCiBzdGF0aWMgdm9pZCBjcmJfYWRkcl90cmFuc2Zvcm1fc2V0dXAodm9pZCkKIHsKQEAgLTE2MCwyMyArMTQ5LDIxIEBACiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmOwotCWludCBpLCBjdHhpZCwgcmluZzsKKwlpbnQgaSwgcmluZzsKIAotCWZvciAoY3R4aWQgPSAwOyBjdHhpZCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eGlkKSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCWZvciAoaSA9IDA7IGkgPCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQ7ICsraSkgewotCQkJCXJ4X2J1ZiA9ICYocmRzX3JpbmctPnJ4X2J1Zl9hcnJbaV0pOwotCQkJCWlmIChyeF9idWYtPnN0YXRlID09IE5FVFhFTl9CVUZGRVJfRlJFRSkKLQkJCQkJY29udGludWU7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAotCQkJCQkJcnhfYnVmLT5kbWEsCi0JCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsCi0JCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCWlmIChyeF9idWYtPnNrYiAhPSBOVUxMKQotCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7Ci0JCQl9CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlmb3IgKGkgPSAwOyBpIDwgcmRzX3JpbmctPm51bV9kZXNjOyArK2kpIHsKKwkJCXJ4X2J1ZiA9ICYocmRzX3JpbmctPnJ4X2J1Zl9hcnJbaV0pOworCQkJaWYgKHJ4X2J1Zi0+c3RhdGUgPT0gTkVUWEVOX0JVRkZFUl9GUkVFKQorCQkJCWNvbnRpbnVlOworCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAorCQkJCQlyeF9idWYtPmRtYSwKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplLAorCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJaWYgKHJ4X2J1Zi0+c2tiICE9IE5VTEwpCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkocnhfYnVmLT5za2IpOwogCQl9CiAJfQogfQpAQCAtMTg4LDcgKzE3NSw3IEBACiAJaW50IGksIGo7CiAKIAljbWRfYnVmID0gYWRhcHRlci0+Y21kX2J1Zl9hcnI7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4ZDsgaSsrKSB7CiAJCWJ1ZmZyYWcgPSBjbWRfYnVmLT5mcmFnX2FycmF5OwogCQlpZiAoYnVmZnJhZy0+ZG1hKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZyYWctPmRtYSwKQEAgLTIwNCw3ICsxOTEsNiBAQAogCQkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7CiAJCQl9CiAJCX0KLQkJLyogRnJlZSB0aGUgc2tiIHdlIHJlY2VpdmVkIGluIG5ldHhlbl9uaWNfeG1pdF9mcmFtZSAqLwogCQlpZiAoY21kX2J1Zi0+c2tiKSB7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShjbWRfYnVmLT5za2IpOwogCQkJY21kX2J1Zi0+c2tiID0gTlVMTDsKQEAgLTIxNywxOCArMjAzLDE3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKLQlpbnQgY3R4LCByaW5nOworCWludCByaW5nOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FycikgewotCQkJCXZmcmVlKHJkc19yaW5nLT5yeF9idWZfYXJyKTsKLQkJCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IE5VTEw7Ci0JCQl9CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlpZiAocmRzX3JpbmctPnJ4X2J1Zl9hcnIpIHsKKwkJCXZmcmVlKHJkc19yaW5nLT5yeF9idWZfYXJyKTsKKwkJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gTlVMTDsKIAkJfQogCX0KKwogCWlmIChhZGFwdGVyLT5jbWRfYnVmX2FycikKIAkJdmZyZWUoYWRhcHRlci0+Y21kX2J1Zl9hcnIpOwogCXJldHVybjsKQEAgLTIzOCw5MCArMjIzLDk3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1ZjsKLQlpbnQgY3R4LCByaW5nLCBpLCBudW1fcnhfYnVmczsKKwlpbnQgcmluZywgaSwgbnVtX3J4X2J1ZnM7CiAKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKLQljbWRfYnVmX2FyciA9IChzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKil2bWFsbG9jKFRYX1JJTkdTSVpFKTsKKwljbWRfYnVmX2FyciA9CisJCShzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKil2bWFsbG9jKFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikpOwogCWlmIChjbWRfYnVmX2FyciA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBjbWQgYnVmZmVyIHJpbmdcbiIsCiAJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9SSU5HU0laRSk7CisJbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9CVUZGX1JJTkdTSVpFKGFkYXB0ZXIpKTsKIAlhZGFwdGVyLT5jbWRfYnVmX2FyciA9IGNtZF9idWZfYXJyOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCXN3aXRjaCAoUkNWX0RFU0NfVFlQRShyaW5nKSkgewotCQkJY2FzZSBSQ1ZfREVTQ19OT1JNQUw6Ci0JCQkJcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50ID0KLQkJCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQ7Ci0JCQkJcmRzX3JpbmctPmZsYWdzID0gUkNWX0RFU0NfTk9STUFMOwotCQkJCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpIHsKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKLQkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKLQkJCQl9IGVsc2UgewotCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9ETUFfTUFQX0xFTjsKLQkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBSQ1ZfREVTQ19KVU1CTzoKLQkJCQlyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQgPQotCQkJCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhfZGVzY19jb3VudDsKLQkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19KVU1CTzsKLQkJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX1AzX1JYX0pVTUJPX0JVRl9NQVhfTEVOOwotCQkJCWVsc2UKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX1AyX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwkJc3dpdGNoIChyaW5nKSB7CisJCWNhc2UgUkNWX1JJTkdfTk9STUFMOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX3J4ZDsKKwkJCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpIHsKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU47CiAJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOwotCQkJCWJyZWFrOworCQkJCQlOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU47CisJCQl9IGVsc2UgeworCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFJYX0RNQV9NQVBfTEVOOworCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOworCQkJfQorCQkJYnJlYWs7CiAKLQkJCWNhc2UgUkNWX1JJTkdfTFJPOgotCQkJCXJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCA9Ci0JCQkJCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudDsKLQkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19MUk87Ci0JCQkJcmRzX3JpbmctPmRtYV9zaXplID0gUlhfTFJPX0RNQV9NQVBfTEVOOwotCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9IE1BWF9SWF9MUk9fQlVGRkVSX0xFTkdUSDsKLQkJCQlicmVhazsKKwkJY2FzZSBSQ1ZfUklOR19KVU1CTzoKKwkJCXJkc19yaW5nLT5udW1fZGVzYyA9IGFkYXB0ZXItPm51bV9qdW1ib19yeGQ7CisJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9QM19SWF9KVU1CT19CVUZfTUFYX0xFTjsKKwkJCWVsc2UKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9QMl9SWF9KVU1CT19CVUZfTUFYX0xFTjsKKwkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOworCQkJYnJlYWs7CiAKLQkJCX0KLQkJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCi0JCQkJdm1hbGxvYyhSQ1ZfQlVGRlNJWkUpOwotCQkJaWYgKHJkc19yaW5nLT5yeF9idWZfYXJyID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgotCQkJCQkicnggYnVmZmVyIHJpbmcgJWRcbiIsCi0JCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7Ci0JCQkJLyogZnJlZSB3aGF0ZXZlciB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KLQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQl9Ci0JCQltZW1zZXQocmRzX3JpbmctPnJ4X2J1Zl9hcnIsIDAsIFJDVl9CVUZGU0laRSk7Ci0JCQlJTklUX0xJU1RfSEVBRCgmcmRzX3JpbmctPmZyZWVfbGlzdCk7Ci0JCQkvKgotCQkJICogTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZW0sIHNldCByZWZlcmVuY2UgaGFuZGxlcwotCQkJICogYW5kIHB1dCB0aGVtIGluIHRoZSBxdWV1ZXMuCi0JCQkgKi8KLQkJCW51bV9yeF9idWZzID0gcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50OwotCQkJcnhfYnVmID0gcmRzX3JpbmctPnJ4X2J1Zl9hcnI7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X2J1ZnM7IGkrKykgewotCQkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKLQkJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKLQkJCQlyeF9idWYtPnJlZl9oYW5kbGUgPSBpOwotCQkJCXJ4X2J1Zi0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7Ci0JCQkJcnhfYnVmKys7Ci0JCQl9CisJCWNhc2UgUkNWX1JJTkdfTFJPOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX2xyb19yeGQ7CisJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9MUk9fRE1BX01BUF9MRU47CisJCQlyZHNfcmluZy0+c2tiX3NpemUgPSBNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEg7CisJCQlicmVhazsKKwogCQl9CisJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCisJCQl2bWFsbG9jKFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FyciA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJCSJyeCBidWZmZXIgcmluZyAlZFxuIiwKKwkJCQluZXRkZXYtPm5hbWUsIHJpbmcpOworCQkJLyogZnJlZSB3aGF0ZXZlciB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQltZW1zZXQocmRzX3JpbmctPnJ4X2J1Zl9hcnIsIDAsIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCUlOSVRfTElTVF9IRUFEKCZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJLyoKKwkJICogTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZW0sIHNldCByZWZlcmVuY2UgaGFuZGxlcworCQkgKiBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlcy4KKwkJICovCisJCW51bV9yeF9idWZzID0gcmRzX3JpbmctPm51bV9kZXNjOworCQlyeF9idWYgPSByZHNfcmluZy0+cnhfYnVmX2FycjsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9yeF9idWZzOyBpKyspIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKKwkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkJcnhfYnVmLT5yZWZfaGFuZGxlID0gaTsKKwkJCXJ4X2J1Zi0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7CisJCQlyeF9idWYrKzsKKwkJfQorCQlzcGluX2xvY2tfaW5pdCgmcmRzX3JpbmctPmxvY2spOworCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJc2RzX3JpbmctPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1tyaW5nXS52ZWN0b3I7CisJCXNkc19yaW5nLT5jbGVhbl90eCA9IChyaW5nID09IDApOworCQlzZHNfcmluZy0+cG9zdF9yeGQgPSAocmluZyA9PSAwKTsKKwkJc2RzX3JpbmctPmFkYXB0ZXIgPSBhZGFwdGVyOworCQlzZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fcnhkOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUkNWX0RFU0NfUklOR1M7IGkrKykKKwkJCUlOSVRfTElTVF9IRUFEKCZzZHNfcmluZy0+ZnJlZV9saXN0W2ldKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMzMyw3ICszMjUsNyBAQAogCiB2b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CiAJY2FzZSBORVRYRU5fTklDX0dCRToKIAkJYWRhcHRlci0+ZW5hYmxlX3BoeV9pbnRlcnJ1cHRzID0KIAkJICAgIG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0czsKQEAgLTM5OSw5ICszOTEsNiBAQAogCiBzdGF0aWMgbG9uZyByb21fbWF4X3RpbWVvdXQgPSAxMDA7CiBzdGF0aWMgbG9uZyByb21fbG9ja190aW1lb3V0ID0gMTAwMDA7Ci0jaWYgMAotc3RhdGljIGxvbmcgcm9tX3dyaXRlX3RpbWVvdXQgPSA3MDA7Ci0jZW5kaWYKIAogc3RhdGljIGludCByb21fbG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC00NTIsMzggKzQ0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fd3JlbihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JLyogU2V0IHdyaXRlIGVuYWJsZSBsYXRjaCBpbiBST00gc3RhdHVzIHJlZ2lzdGVyICovCi0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCi0JCQkgICAgIE0yNVBfSU5TVFJfV1JFTik7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0eGVuX3JkY3JicmVnKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgdW5zaWduZWQgaW50IGFkZHIpCi17Ci0JdW5zaWduZWQgaW50IGRhdGEgPSAweGRlYWRkZWFkOwotCWRhdGEgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIGFkZHIpOwotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9kb19yb21fcmRzcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLAotCQkJICAgICBNMjVQX0lOU1RSX1JEU1IpOwotCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBuZXR4ZW5fcmRjcmJyZWcoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fUkRBVEEpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIG5ldHhlbl9yb21fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgdmFsOwpAQCAtNDkzLDQ0ICs0NTAsNiBAQAogCiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fd2lwX3BvbGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWxvbmcgdGltZW91dCA9IDA7Ci0JbG9uZyB3aXAgPSAxOwotCWludCB2YWw7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKLQl3aGlsZSAod2lwICE9IDApIHsKLQkJdmFsID0gbmV0eGVuX2RvX3JvbV9yZHNyKGFkYXB0ZXIpOwotCQl3aXAgPSB2YWwgJiAxOwotCQl0aW1lb3V0Kys7Ci0JCWlmICh0aW1lb3V0ID4gcm9tX21heF90aW1lb3V0KSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fcm9tX2Zhc3Rfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKLQkJCSAgICAgaW50IGRhdGEpCi17Ci0JaWYgKG5ldHhlbl9yb21fd3JlbihhZGFwdGVyKSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX1dEQVRBLCBkYXRhKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDMpOwotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKLQkJCSAgICAgTTI1UF9JTlNUUl9QUCk7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0FCWVRFX0NOVCwgMCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IGRvX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgIGludCBhZGRyLCBpbnQgKnZhbHApCiB7CkBAIC01OTcsMjg0ICs1MTYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiAwCi1pbnQgbmV0eGVuX3JvbV9mYXN0X3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBkYXRhKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKHJvbV9sb2NrKGFkYXB0ZXIpICE9IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXQgPSBkb19yb21fZmFzdF93cml0ZShhZGFwdGVyLCBhZGRyLCBkYXRhKTsKLQluZXR4ZW5fcm9tX3VubG9jayhhZGFwdGVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRvX3JvbV9mYXN0X3dyaXRlX3dvcmRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICBpbnQgYWRkciwgdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgYWRkcmlkeCA9IGFkZHI7Ci0JaW50IHJldCA9IDA7Ci0KLQl3aGlsZSAoYWRkcmlkeCA8IChhZGRyICsgc2l6ZSkpIHsKLQkJaW50IGxhc3RfYXR0ZW1wdCA9IDA7Ci0JCWludCB0aW1lb3V0ID0gMDsKLQkJaW50IGRhdGE7Ci0KLQkJZGF0YSA9IGxlMzJfdG9fY3B1KCgqKF9fbGUzMiopYnl0ZXMpKTsKLQkJcmV0ID0gZG9fcm9tX2Zhc3Rfd3JpdGUoYWRhcHRlciwgYWRkcmlkeCwgZGF0YSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQl3aGlsZSgxKSB7Ci0JCQlpbnQgZGF0YTE7Ci0KLQkJCXJldCA9IGRvX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkcmlkeCwgJmRhdGExKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0KLQkJCWlmIChkYXRhMSA9PSBkYXRhKQotCQkJCWJyZWFrOwotCi0JCQlpZiAodGltZW91dCsrID49IHJvbV93cml0ZV90aW1lb3V0KSB7Ci0JCQkJaWYgKGxhc3RfYXR0ZW1wdCsrIDwgNCkgewotCQkJCQlyZXQgPSBkb19yb21fZmFzdF93cml0ZShhZGFwdGVyLAotCQkJCQkJCQlhZGRyaWR4LCBkYXRhKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiRGF0YSB3cml0ZSBkaWQgbm90ICIKLQkJCQkJICAgInN1Y2NlZWQgYXQgYWRkcmVzcyAweCV4XG4iLCBhZGRyaWR4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJYnl0ZXMgKz0gNDsKLQkJYWRkcmlkeCArPSA0OwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKLQkJCQkJdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IHJvbV9sb2NrKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZG9fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoYWRhcHRlciwgYWRkciwgYnl0ZXMsIHNpemUpOwotCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fcm9tX3dyc3Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZGF0YSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbmV0eGVuX3JvbV93cmVuKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX1dEQVRBLCBkYXRhKTsKLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKLQkJCQkJTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLCAweDEpOwotCi0JcmV0ID0gbmV0eGVuX3dhaXRfcm9tX2RvbmUoYWRhcHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fcm9tX3Jkc3Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByb21fbG9jayhhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5ldHhlbl9kb19yb21fcmRzcihhZGFwdGVyKTsKLQluZXR4ZW5fcm9tX3VubG9jayhhZGFwdGVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgbmV0eGVuX2JhY2t1cF9jcmJpbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgdmFsOwotCWNoYXIgKmJ1ZmZlciA9IGttYWxsb2MoTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFLCBHRlBfS0VSTkVMKTsKLQotCWlmICghYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQkvKiB1bmxvY2sgc2VjdG9yIDYzICovCi0JdmFsID0gbmV0eGVuX3JvbV9yZHNyKGFkYXB0ZXIpOwotCXZhbCA9IHZhbCAmIDB4ZTM7Ci0JcmV0ID0gbmV0eGVuX3JvbV93cnNyKGFkYXB0ZXIsIHZhbCk7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCS8qIGNvcHkgIHNlY3RvciAwIHRvIHNlY3RvciA2MyAqLwotCXJldCA9IG5ldHhlbl9yb21fZmFzdF9yZWFkX3dvcmRzKGFkYXB0ZXIsIE5FVFhFTl9DUkJJTklUX1NUQVJULAotCQkJCQlidWZmZXIsIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRSk7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCXJldCA9IG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBORVRYRU5fRklYRURfU1RBUlQsCi0JCQkJCWJ1ZmZlciwgTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFKTsKLQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JLyogbG9jayBzZWN0b3IgNjMgKi8KLQl2YWwgPSBuZXR4ZW5fcm9tX3Jkc3IoYWRhcHRlcik7Ci0JaWYgKCEodmFsICYgMHg4KSkgewotCQl2YWwgfD0gKDB4MSA8PCAyKTsKLQkJLyogbG9jayBzZWN0b3IgNjMgKi8KLQkJaWYgKG5ldHhlbl9yb21fd3JzcihhZGFwdGVyLCB2YWwpID09IDApIHsKLQkJCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCQkJZ290byBvdXRfa2ZyZWU7Ci0KLQkJCS8qIGxvY2sgU1Igd3JpdGVzICovCi0JCQlyZXQgPSBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotCQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQkJCWdvdG8gb3V0X2tmcmVlOwotCQl9Ci0JfQotCi1vdXRfa2ZyZWU6Ci0Ja2ZyZWUoYnVmZmVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9kb19yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQluZXR4ZW5fcm9tX3dyZW4oYWRhcHRlcik7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUREUkVTUywgYWRkcik7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAzKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCi0JCQkgICAgIE0yNVBfSU5TVFJfU0UpOwotCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgewotCQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja19lcmFzZWRfZmxhc2goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQlpbnQgaTsKLQlpbnQgdmFsOwotCWludCBjb3VudCA9IDAsIGVyYXNlZF9lcnJvcnMgPSAwOwotCWludCByYW5nZTsKLQotCXJhbmdlID0gKGFkZHIgPT0gTkVUWEVOX1VTRVJfU1RBUlQpID8KLQkJTkVUWEVOX0ZJWEVEX1NUQVJUIDogYWRkciArIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQotCWZvciAoaSA9IGFkZHI7IGkgPCByYW5nZTsgaSArPSA0KSB7Ci0JCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGksICZ2YWwpOwotCQlpZiAodmFsICE9IDB4ZmZmZmZmZmYpCi0JCQllcmFzZWRfZXJyb3JzKys7Ci0JCWNvdW50Kys7Ci0JfQotCi0JaWYgKGVyYXNlZF9lcnJvcnMpCi0JCXByaW50ayhLRVJOX0lORk8gIjB4JXggb3V0IG9mIDB4JXggd29yZHMgZmFpbCB0byBiZSBlcmFzZWQgIgotCQkJImZvciBzZWN0b3IgYWRkcmVzczogJXhcbiIsIGVyYXNlZF9lcnJvcnMsIGNvdW50LCBhZGRyKTsKLX0KLQotaW50IG5ldHhlbl9yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAocm9tX2xvY2soYWRhcHRlcikgIT0gMCkgewotCQlyZXR1cm4gLTE7Ci0JfQotCXJldCA9IG5ldHhlbl9kb19yb21fc2UoYWRhcHRlciwgYWRkcik7Ci0JbmV0eGVuX3JvbV91bmxvY2soYWRhcHRlcik7Ci0JbXNsZWVwKDMwKTsKLQljaGVja19lcmFzZWRfZmxhc2goYWRhcHRlciwgYWRkcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWN0aW9ucyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICAgIGludCBzdGFydCwgaW50IGVuZCkKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLQkJcmV0ID0gbmV0eGVuX3JvbV9zZShhZGFwdGVyLCBpICogTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQlyZXQgPSBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50Ci1uZXR4ZW5fZmxhc2hfZXJhc2Vfc2Vjb25kYXJ5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgc3RhcnQsIGVuZDsKLQotCXN0YXJ0ID0gTkVUWEVOX1NFQ09OREFSWV9TVEFSVCAvIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQllbmQgICA9IE5FVFhFTl9VU0VSX1NUQVJUIC8gTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFOwotCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWN0aW9ucyhhZGFwdGVyLCBzdGFydCwgZW5kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludAotbmV0eGVuX2ZsYXNoX2VyYXNlX3ByaW1hcnkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQgPSBGTEFTSF9TVUNDRVNTOwotCWludCBzdGFydCwgZW5kOwotCi0Jc3RhcnQgPSBORVRYRU5fUFJJTUFSWV9TVEFSVCAvIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQllbmQgICA9IE5FVFhFTl9TRUNPTkRBUllfU1RBUlQgLyBORVRYRU5fRkxBU0hfU0VDVE9SX1NJWkU7Ci0JcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY3Rpb25zKGFkYXB0ZXIsIHN0YXJ0LCBlbmQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBuZXR4ZW5faGFsdF9wZWdzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8wICsgMHgzYywgMSk7Ci0JIG5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMSArIDB4M2MsIDEpOwotCSBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzIgKyAweDNjLCAxKTsKLQkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8zICsgMHgzYywgMSk7Ci19Ci0KLWludCBuZXR4ZW5fZmxhc2hfdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IG5ldHhlbl9yb21fd3JzcihhZGFwdGVyLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5ldHhlbl9yb21fd3JlbihhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiAjZGVmaW5lIE5FVFhFTl9CT0FSRFRZUEUJCTB4NDAwOAogI2RlZmluZSBORVRYRU5fQk9BUkROVU0gCQkweDQwMGMKICNkZWZpbmUgTkVUWEVOX0NISVBOVU0JCQkweDQwMTAKQEAgLTExNjgsNiArODA5LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHhlbl9hbGxvY19yeF9za2Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsCisJCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlidWZmZXItPnNrYiA9IGRldl9hbGxvY19za2IocmRzX3JpbmctPnNrYl9zaXplKTsKKwlpZiAoIWJ1ZmZlci0+c2tiKQorCQlyZXR1cm4gMTsKKworCXNrYiA9IGJ1ZmZlci0+c2tiOworCisJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCisJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJYnVmZmVyLT5za2IgPSBOVUxMOworCQlyZXR1cm4gMTsKKwl9CisKKwlidWZmZXItPnNrYiA9IHNrYjsKKwlidWZmZXItPmRtYSA9IGRtYTsKKwlidWZmZXItPnN0YXRlID0gTkVUWEVOX0JVRkZFUl9CVVNZOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0eGVuX3Byb2Nlc3NfcnhidWYoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsIHUxNiBpbmRleCwgdTE2IGNrc3VtKQogewpAQCAtMTE5MiwxNjQgKzg2NywxMjEgQEAKIAlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCWJ1ZmZlci0+c2tiID0gTlVMTDsKLQogbm9fc2tiOgogCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7Ci0JYnVmZmVyLT5scm9fY3VycmVudF9mcmFncyA9IDA7Ci0JYnVmZmVyLT5scm9fZXhwZWN0ZWRfZnJhZ3MgPSAwOwotCWxpc3RfYWRkX3RhaWwoJmJ1ZmZlci0+bGlzdCwgJnJkc19yaW5nLT5mcmVlX2xpc3QpOwogCXJldHVybiBza2I7CiB9CiAKLS8qCi0gKiBuZXR4ZW5fcHJvY2Vzc19yY3YoKSBzZW5kIHRoZSByZWNlaXZlZCBwYWNrZXQgdG8gdGhlIHByb3RvY29sIHN0YWNrLgotICogYW5kIGlmIHRoZSBudW1iZXIgb2YgcmVjZWl2ZXMgZXhjZWVkcyBSWF9CVUZGRVJTX1JFRklMTCwgdGhlbiB3ZQotICogaW52b2tlIHRoZSByb3V0aW5lIHRvIHNlbmQgbW9yZSByeCBidWZmZXJzIHRvIHRoZSBQaGFudG9tLi4uCi0gKi8KLXN0YXRpYyB2b2lkIG5ldHhlbl9wcm9jZXNzX3JjdihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHhpZCwKLQkJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjLCBzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmZyYWdfZGVzYykKK3N0YXRpYyBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqCituZXR4ZW5fcHJvY2Vzc19yY3Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlpbnQgcmluZywgaW50IGluZGV4LCBpbnQgbGVuZ3RoLCBpbnQgY2tzdW0sIGludCBwa3Rfb2Zmc2V0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTY0IHN0c19kYXRhID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YSk7Ci0JaW50IGluZGV4ID0gbmV0eGVuX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhKTsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXSk7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgbGVuZ3RoID0gbmV0eGVuX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEpOwotCXUzMiBkZXNjX2N0eDsKLQl1MTYgcGt0X29mZnNldCA9IDAsIGNrc3VtOwotCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAotCWRlc2NfY3R4ID0gbmV0eGVuX2dldF9zdHNfdHlwZShzdHNfZGF0YSk7Ci0JaWYgKHVubGlrZWx5KGRlc2NfY3R4ID49IE5VTV9SQ1ZfREVTQ19SSU5HUykpIHsKLQkJcHJpbnRrKCIlczogJXMgQmFkIFJjdiBkZXNjcmlwdG9yIHJpbmdcbiIsCi0JCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQorCWlmICh1bmxpa2VseShpbmRleCA+IHJkc19yaW5nLT5udW1fZGVzYykpCisJCXJldHVybiBOVUxMOwogCi0JcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tkZXNjX2N0eF07Ci0JaWYgKHVubGlrZWx5KGluZGV4ID4gcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KSkgewotCQlEUFJJTlRLKEVSUiwgIkdvdCBhIGJ1ZmZlciBpbmRleDoleCBNYXggaXMgJXhcbiIsCi0JCQlpbmRleCwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKLQkJcmV0dXJuOwotCX0KIAlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOwotCWlmIChkZXNjX2N0eCA9PSBSQ1ZfREVTQ19MUk9fQ1RYSUQpIHsKLQkJYnVmZmVyLT5scm9fY3VycmVudF9mcmFncysrOwotCQlpZiAobmV0eGVuX2dldF9zdHNfZGVzY19scm9fbGFzdF9mcmFnKGRlc2MpKSB7Ci0JCQlidWZmZXItPmxyb19leHBlY3RlZF9mcmFncyA9Ci0JCQkgICAgbmV0eGVuX2dldF9zdHNfZGVzY19scm9fY250KGRlc2MpOwotCQkJYnVmZmVyLT5scm9fbGVuZ3RoID0gbGVuZ3RoOwotCQl9Ci0JCWlmIChidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzICE9IGJ1ZmZlci0+bHJvX2V4cGVjdGVkX2ZyYWdzKSB7Ci0JCQlpZiAoYnVmZmVyLT5scm9fZXhwZWN0ZWRfZnJhZ3MgIT0gMCkgewotCQkJCXByaW50aygiTFJPOiAocmVmaGFuZGxlOiV4KSByZWN2IGZyYWcuICIKLQkJCQkgICAgICAgIndhaXQgZm9yIGxhc3QuIGZsYWdzOiAleCBleHBlY3RlZDolZCAiCi0JCQkJICAgICAgICJoYXZlOiVkXG4iLCBpbmRleCwKLQkJCQkgICAgICAgbmV0eGVuX2dldF9zdHNfZGVzY19scm9fbGFzdF9mcmFnKGRlc2MpLAotCQkJCSAgICAgICBidWZmZXItPmxyb19leHBlY3RlZF9mcmFncywKLQkJCQkgICAgICAgYnVmZmVyLT5scm9fY3VycmVudF9mcmFncyk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlja3N1bSA9IG5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YSk7CiAKIAlza2IgPSBuZXR4ZW5fcHJvY2Vzc19yeGJ1ZihhZGFwdGVyLCByZHNfcmluZywgaW5kZXgsIGNrc3VtKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuOworCQlyZXR1cm4gYnVmZmVyOwogCi0JaWYgKGRlc2NfY3R4ID09IFJDVl9ERVNDX0xST19DVFhJRCkgewotCQkvKiBUcnVlIGxlbmd0aCB3YXMgb25seSBhdmFpbGFibGUgb24gdGhlIGxhc3QgcGt0ICovCi0JCXNrYl9wdXQoc2tiLCBidWZmZXItPmxyb19sZW5ndGgpOwotCX0gZWxzZSB7Ci0JCWlmIChsZW5ndGggPiByZHNfcmluZy0+c2tiX3NpemUpCi0JCQlza2JfcHV0KHNrYiwgcmRzX3JpbmctPnNrYl9zaXplKTsKLQkJZWxzZQotCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CisJaWYgKGxlbmd0aCA+IHJkc19yaW5nLT5za2Jfc2l6ZSkKKwkJc2tiX3B1dChza2IsIHJkc19yaW5nLT5za2Jfc2l6ZSk7CisJZWxzZQorCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAotCQlwa3Rfb2Zmc2V0ID0gbmV0eGVuX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YSk7Ci0JCWlmIChwa3Rfb2Zmc2V0KQotCQkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKLQl9CisKKwlpZiAocGt0X29mZnNldCkKKwkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQkvKgotCSAqIHJ4IGJ1ZmZlciBjaGFpbmluZyBpcyBkaXNhYmxlZCwgd2FsayBhbmQgZnJlZQotCSAqIGFueSBzcHVyaW91cyByeCBidWZmZXIgY2hhaW4uCi0JICovCi0JaWYgKGZyYWdfZGVzYykgewotCQl1MTYgaSwgbnJfZnJhZ3MgPSBkZXNjLT5ucl9mcmFnczsKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgaSsrKSB7Ci0JCQlpbmRleCA9IGxlMTZfdG9fY3B1KGZyYWdfZGVzYy0+ZnJhZ19oYW5kbGVzW2ldKTsKLQkJCXNrYiA9IG5ldHhlbl9wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsCi0JCQkJCXJkc19yaW5nLCBpbmRleCwgY2tzdW0pOwotCQkJaWYgKHNrYikKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4ZHJvcHBlZCsrOwotCX0gZWxzZSB7Ci0JCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJYWRhcHRlci0+c3RhdHMubm9fcmN2Kys7CisJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CiAKLQkJYWRhcHRlci0+c3RhdHMubm9fcmN2Kys7Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4Ynl0ZXMgKz0gbGVuZ3RoOwotCX0KKwlyZXR1cm4gYnVmZmVyOwogfQogCi0vKiBQcm9jZXNzIFJlY2VpdmUgc3RhdHVzIHJpbmcgKi8KLXUzMiBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHhpZCwgaW50IG1heCkKKyNkZWZpbmUgbmV0eGVuX21lcmdlX3J4X2J1ZmZlcnMobGlzdCwgaGVhZCkgXAorCWRvIHsgbGlzdF9zcGxpY2VfdGFpbF9pbml0KGxpc3QsIGhlYWQpOyB9IHdoaWxlICgwKTsKKworaW50CituZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpCiB7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJihhZGFwdGVyLT5yZWN2X2N0eFtjdHhpZF0pOwotCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkID0gcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkOwotCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYywgKmZyYWdfZGVzYzsKLQl1MzIgY29uc3VtZXIgPSByZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyOwotCWludCBjb3VudCA9IDAsIHJpbmc7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2M7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4YnVmOworCisJdTMyIGNvbnN1bWVyID0gc2RzX3JpbmctPmNvbnN1bWVyOworCisJaW50IGNvdW50ID0gMDsKIAl1NjQgc3RzX2RhdGE7Ci0JdTE2IG9wY29kZTsKKwlpbnQgb3Bjb2RlLCByaW5nLCBpbmRleCwgbGVuZ3RoLCBja3N1bSwgcGt0X29mZnNldDsKIAogCXdoaWxlIChjb3VudCA8IG1heCkgewotCQlkZXNjID0gJmRlc2NfaGVhZFtjb25zdW1lcl07Ci0JCWlmICghKG5ldHhlbl9nZXRfc3RzX293bmVyKGRlc2MpICYgU1RBVFVTX09XTkVSX0hPU1QpKSB7Ci0JCQlEUFJJTlRLKEVSUiwgImRlc2MgJXAgb3duZWRieSAleFxuIiwgZGVzYywKLQkJCQluZXR4ZW5fZ2V0X3N0c19vd25lcihkZXNjKSk7Ci0JCQlicmVhazsKLQkJfQotCisJCWRlc2MgPSAmc2RzX3JpbmctPmRlc2NfaGVhZFtjb25zdW1lcl07CiAJCXN0c19kYXRhID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YSk7CisKKwkJaWYgKCEoc3RzX2RhdGEgJiBTVEFUVVNfT1dORVJfSE9TVCkpCisJCQlicmVhazsKKworCQlyaW5nICAgPSBuZXR4ZW5fZ2V0X3N0c190eXBlKHN0c19kYXRhKTsKKwkJaWYgKHJpbmcgPiBSQ1ZfUklOR19KVU1CTykKKwkJCWNvbnRpbnVlOworCiAJCW9wY29kZSA9IG5ldHhlbl9nZXRfc3RzX29wY29kZShzdHNfZGF0YSk7Ci0JCWZyYWdfZGVzYyA9IE5VTEw7Ci0JCWlmIChvcGNvZGUgPT0gTkVUWEVOX05JQ19SWFBLVF9ERVNDKSB7Ci0JCQlpZiAoZGVzYy0+bnJfZnJhZ3MpIHsKLQkJCQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLAotCQkJCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQkJCWZyYWdfZGVzYyA9ICZkZXNjX2hlYWRbY29uc3VtZXJdOwotCQkJCW5ldHhlbl9zZXRfc3RzX293bmVyKGZyYWdfZGVzYywKLQkJCQkJCVNUQVRVU19PV05FUl9QSEFOVE9NKTsKLQkJCX0KLQkJfQogCi0JCW5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCBjdHhpZCwgZGVzYywgZnJhZ19kZXNjKTsKKwkJaW5kZXggID0gbmV0eGVuX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhKTsKKwkJbGVuZ3RoID0gbmV0eGVuX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEpOworCQlja3N1bSAgPSBuZXR4ZW5fZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEpOworCQlwa3Rfb2Zmc2V0ID0gbmV0eGVuX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YSk7CiAKLQkJbmV0eGVuX3NldF9zdHNfb3duZXIoZGVzYywgU1RBVFVTX09XTkVSX1BIQU5UT00pOworCQlyeGJ1ZiA9IG5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCByaW5nLCBpbmRleCwKKwkJCQlsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0KTsKIAotCQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLAotCQkJCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJaWYgKHJ4YnVmKQorCQkJbGlzdF9hZGRfdGFpbCgmcnhidWYtPmxpc3QsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKTsKKworCQlkZXNjLT5zdGF0dXNfZGVzY19kYXRhID0gY3B1X3RvX2xlNjQoU1RBVFVTX09XTkVSX1BIQU5UT00pOworCisJCWNvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoY29uc3VtZXIsIHNkc19yaW5nLT5udW1fZGVzYyk7CiAJCWNvdW50Kys7CiAJfQotCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspCi0JCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnNfbm9kYihhZGFwdGVyLCBjdHhpZCwgcmluZyk7CiAKLQkvKiB1cGRhdGUgdGhlIGNvbnN1bWVyIGluZGV4IGluIHBoYW50b20gKi8KKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9CisJCQkmYWRhcHRlci0+cmVjdl9jdHgucmRzX3JpbmdzW3JpbmddOworCisJCWlmICghbGlzdF9lbXB0eSgmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSkpIHsKKwkJCWxpc3RfZm9yX2VhY2goY3VyLCAmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSkgeworCQkJCXJ4YnVmID0gbGlzdF9lbnRyeShjdXIsCisJCQkJCQlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CisJCQkJbmV0eGVuX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgcnhidWYpOworCQkJfQorCQkJc3Bpbl9sb2NrKCZyZHNfcmluZy0+bG9jayk7CisJCQluZXR4ZW5fbWVyZ2VfcnhfYnVmZmVycygmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSwKKwkJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZyZHNfcmluZy0+bG9jayk7CisJCX0KKworCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoYWRhcHRlciwgcmRzX3JpbmcpOworCX0KKwogCWlmIChjb3VudCkgewotCQlyZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyID0gY29uc3VtZXI7Ci0KLQkJLyogV2luZG93ID0gMSAqLworCQlzZHNfcmluZy0+Y29uc3VtZXIgPSBjb25zdW1lcjsKIAkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyLCBjb25zdW1lcik7CisJCQkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIsIGNvbnN1bWVyKTsKIAl9CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0xMzY2LDcgKzk5OCwxMSBAQAogCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKmZyYWc7CiAJaW50IGRvbmUgPSAwOwogCisJaWYgKCFzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spKQorCQlyZXR1cm4gMTsKKwogCWxhc3RfY29uc3VtZXIgPSBhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcjsKKwliYXJyaWVyKCk7IC8qIGNtZF9jb25zdW1lciBjYW4gY2hhbmdlIHVuZGVybmVhdGggKi8KIAljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7CiAKIAl3aGlsZSAobGFzdF9jb25zdW1lciAhPSBjb25zdW1lcikgewpAQCAtMTM4OSw3ICsxMDI1LDcgQEAKIAkJfQogCiAJCWxhc3RfY29uc3VtZXIgPSBnZXRfbmV4dF9pbmRleChsYXN0X2NvbnN1bWVyLAotCQkJCQkgICAgICAgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCQkJCQkgICAgICAgYWRhcHRlci0+bnVtX3R4ZCk7CiAJCWlmICgrK2NvdW50ID49IE1BWF9TVEFUVVNfSEFORExFKQogCQkJYnJlYWs7CiAJfQpAQCAtMTQxNyw3NSArMTA1Myw1NSBAQAogCSAqIFRoZXJlIGlzIHN0aWxsIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gYW5kIHRoZSBob3N0IGNvdWxkIG1pc3MgYW4KIAkgKiBpbnRlcnJ1cHQuIFRoZSBjYXJkIGhhcyB0byB0YWtlIGNhcmUgb2YgdGhpcy4KIAkgKi8KKwliYXJyaWVyKCk7IC8qIGNtZF9jb25zdW1lciBjYW4gY2hhbmdlIHVuZGVybmVhdGggKi8KIAljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7CiAJZG9uZSA9IChsYXN0X2NvbnN1bWVyID09IGNvbnN1bWVyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiAKIAlyZXR1cm4gKGRvbmUpOwogfQogCi0vKgotICogbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyBwdXRzIGJ1ZmZlciBpbiB0aGUgUGhhbnRvbSBtZW1vcnkKLSAqLwotdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGN0eCwgdTMyIHJpbmdpZCkKK3ZvaWQKK25ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eF0pOwotCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9IE5VTEw7Ci0JdWludCBwcm9kdWNlcjsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IGNvdW50ID0gMDsKKwlpbnQgcHJvZHVjZXIsIGNvdW50ID0gMDsKIAluZXR4ZW5fY3R4X21zZyBtc2cgPSAwOwotCWRtYV9hZGRyX3QgZG1hOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKLQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmdpZF07Ci0KIAlwcm9kdWNlciA9IHJkc19yaW5nLT5wcm9kdWNlcjsKLQloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CiAKLQkvKiBXZSBjYW4gc3RhcnQgd3JpdGluZyByeCBkZXNjcmlwdG9ycyBpbnRvIHRoZSBwaGFudG9tIG1lbW9yeS4gKi8KKwlzcGluX2xvY2soJnJkc19yaW5nLT5sb2NrKTsKKwloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihyZHNfcmluZy0+c2tiX3NpemUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCWJyZWFrOwotCQl9CisJCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIsIGxpc3QpOwogCi0JCWlmICghYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoKQotCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKLQotCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCi0JCQkJcmRzX3JpbmctPmRtYV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYSkpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlicmVhazsKKwkJaWYgKCFidWZmZXItPnNrYikgeworCQkJaWYgKG5ldHhlbl9hbGxvY19yeF9za2IoYWRhcHRlciwgcmRzX3JpbmcsIGJ1ZmZlcikpCisJCQkJYnJlYWs7CiAJCX0KIAogCQljb3VudCsrOwotCQlidWZmZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAKLQkJYnVmZmVyLT5za2IgPSBza2I7Ci0JCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0JVU1k7Ci0JCWJ1ZmZlci0+ZG1hID0gZG1hOwotCiAJCS8qIG1ha2UgYSByY3YgZGVzY3JpcHRvciAgKi8KIAkJcGRlc2MgPSAmcmRzX3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07Ci0JCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGRtYSk7CisJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKIAkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOwogCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CiAKLQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm51bV9kZXNjKTsKIAl9Ci0JLyogaWYgd2UgZGlkIGFsbG9jYXRlIGJ1ZmZlcnMsIHRoZW4gd3JpdGUgdGhlIGNvdW50IHRvIFBoYW50b20gKi8KKwlzcGluX3VubG9jaygmcmRzX3JpbmctPmxvY2spOworCiAJaWYgKGNvdW50KSB7CiAJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQkJLyogV2luZG93ID0gMSAqLwogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIsCi0JCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudC0xKSk7CisJCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5udW1fZGVzYy0xKSk7CiAKIAkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgewogCQkJLyoKQEAgLTE0OTYsOSArMTExMiw4IEBACiAJCQluZXR4ZW5fc2V0X21zZ19wZWdfaWQobXNnLCBORVRYRU5fUkNWX1BFR19EQl9JRCk7CiAJCQluZXR4ZW5fc2V0X21zZ19wcml2aWQobXNnKTsKIAkJCW5ldHhlbl9zZXRfbXNnX2NvdW50KG1zZywKLQkJCQkJICAgICAoKHByb2R1Y2VyIC0KLQkJCQkJICAgICAgIDEpICYgKHJkc19yaW5nLT4KLQkJCQkJCSAgICAgbWF4X3J4X2Rlc2NfY291bnQgLSAxKSkpOworCQkJCQkgICAgICgocHJvZHVjZXIgLSAxKSAmCisJCQkJCSAgICAgIChyZHNfcmluZy0+bnVtX2Rlc2MgLSAxKSkpOwogCQkJbmV0eGVuX3NldF9tc2dfY3R4aWQobXNnLCBhZGFwdGVyLT5wb3J0bnVtKTsKIAkJCW5ldHhlbl9zZXRfbXNnX29wY29kZShtc2csIE5FVFhFTl9SQ1ZfUFJPRFVDRVIocmluZ2lkKSk7CiAJCQl3cml0ZWwobXNnLApAQCAtMTUwOCw2OCArMTEyMyw0OSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdWludDMyX3QgY3R4LCB1aW50MzJfdCByaW5naWQpCitzdGF0aWMgdm9pZAorbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4XSk7Ci0Jc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nID0gTlVMTDsKLQl1MzIgcHJvZHVjZXI7CiAJc3RydWN0IHJjdl9kZXNjICpwZGVzYzsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqYnVmZmVyOwotCWludCBjb3VudCA9IDA7CisJaW50IHByb2R1Y2VyLCBjb3VudCA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQlkbWFfYWRkcl90IGRtYTsKLQotCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ2lkXTsKIAogCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOworCWlmICghc3Bpbl90cnlsb2NrKCZyZHNfcmluZy0+bG9jaykpCisJCXJldHVybjsKKwogCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKLQkvKiBXZSBjYW4gc3RhcnQgd3JpdGluZyByeCBkZXNjcmlwdG9ycyBpbnRvIHRoZSBwaGFudG9tIG1lbW9yeS4gKi8KIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHJkc19yaW5nLT5za2Jfc2l6ZSk7Ci0JCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJYnJlYWs7Ci0JCX0KKwkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CiAKLQkJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCi0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCi0JCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKLQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgZG1hKSkgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCWJyZWFrOworCQlpZiAoIWJ1ZmZlci0+c2tiKSB7CisJCQlpZiAobmV0eGVuX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgYnVmZmVyKSkKKwkJCQlicmVhazsKIAkJfQogCiAJCWNvdW50Kys7Ci0JCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIsIGxpc3QpOwogCQlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKIAotCQlidWZmZXItPnNrYiA9IHNrYjsKLQkJYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfQlVTWTsKLQkJYnVmZmVyLT5kbWEgPSBkbWE7Ci0KIAkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLwogCQlwZGVzYyA9ICZyZHNfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKIAkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOwogCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CiAJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKIAotCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bnVtX2Rlc2MpOwogCX0KIAotCS8qIGlmIHdlIGRpZCBhbGxvY2F0ZSBidWZmZXJzLCB0aGVuIHdyaXRlIHRoZSBjb3VudCB0byBQaGFudG9tICovCiAJaWYgKGNvdW50KSB7CiAJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQkJLyogV2luZG93ID0gMSAqLwogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciwKLQkJCQkocHJvZHVjZXItMSkgJiAocmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50LTEpKTsKKwkJCQkocHJvZHVjZXIgLSAxKSAmIChyZHNfcmluZy0+bnVtX2Rlc2MgLSAxKSk7CiAJCQl3bWIoKTsKIAl9CisJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKIH0KIAogdm9pZCBuZXR4ZW5fbmljX2NsZWFyX3N0YXRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCA0ZmUyMGVjLi4xYWY0NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiAgTWFpbiBzb3VyY2UgZmlsZSBmb3IgTmV0WGVuIE5JQyBEcml2ZXIgb24gTGludXgKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTk3LDIwICs5NCw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZXR4ZW5fcGNpX3RibCk7CiAKLS8qCi0gKiBJbiBuZXR4ZW5fbmljX2Rvd24oKSwgd2UgbXVzdCB3YWl0IGZvciBhbnkgcGVuZGluZyBjYWxsYmFjayByZXF1ZXN0cyBpbnRvCi0gKiBuZXR4ZW5fd2F0Y2hkb2dfdGFzaygpIHRvIGNvbXBsZXRlOyBlZyBvdGhlcndpc2UgdGhlIHdhdGNoZG9nX3RpbWVyIGNvdWxkIGJlCi0gKiByZWVuYWJsZWQgcmlnaHQgYWZ0ZXIgaXQgaXMgZGVsZXRlZCBpbiBuZXR4ZW5fbmljX2Rvd24oKS4KLSAqIEZMVVNIX1NDSEVEVUxFRF9XT1JLKCkgIGRvZXMgdGhpcyBzeW5jaHJvbml6YXRpb24uCi0gKgotICogTm9ybWFsbHksIHNjaGVkdWxlX3dvcmsoKS9mbHVzaF9zY2hlZHVsZWRfd29yaygpIGNvdWxkIGhhdmUgd29ya2VkLCBidXQKLSAqIG5ldHhlbl9uaWNfY2xvc2UoKSBpcyBpbnZva2VkIHdpdGgga2VybmVsIHJ0bmwgbG9jayBoZWxkLiBuZXRpZl9jYXJyaWVyX29mZigpCi0gKiBjYWxsIGluIG5ldHhlbl9uaWNfY2xvc2UoKSB0cmlnZ2VycyBhIHNjaGVkdWxlX3dvcmsoJmxpbmt3YXRjaF93b3JrKSwgYW5kIGEKLSAqIHN1YnNlcXVlbnQgY2FsbCB0byBmbHVzaF9zY2hlZHVsZWRfd29yaygpIGluIG5ldHhlbl9uaWNfZG93bigpIHdvdWxkIGNhdXNlCi0gKiBsaW5rd2F0Y2hfZXZlbnQoKSB0byBiZSBleGVjdXRlZCB3aGljaCBhbHNvIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHJ0bmwKLSAqIGxvY2sgdGh1cyBjYXVzaW5nIGEgZGVhZGxvY2suCi0gKi8KLQogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR4ZW5fd29ya3E7CiAjZGVmaW5lIFNDSEVEVUxFX1dPUksodHApCXF1ZXVlX3dvcmsobmV0eGVuX3dvcmtxLCB0cCkKICNkZWZpbmUgRkxVU0hfU0NIRURVTEVEX1dPUksoKQlmbHVzaF93b3JrcXVldWUobmV0eGVuX3dvcmtxKQpAQCAtMTUyLDEzMCArMTM1LDE0OCBAQAogCiBzdGF0aWMgc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHJbXSA9IE5YX0xFR0FDWV9JTlRSX0NPTkZJRzsKIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQogewotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgYWRhcHRlci0+Y3JiX2ludHJfbWFzaywgMCk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZW5hYmxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19lbmFibGVfaW50KHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKIHsKLQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIGFkYXB0ZXItPmNyYl9pbnRyX21hc2ssIDB4MSk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAweDEpOwogCiAJaWYgKCFORVRYRU5fSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSkKIAkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAogCQkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywgMHhmYmZmKTsKIH0KIAorc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2FkZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gKG51bV9vbmxpbmVfY3B1cygpID49IDQpID8gNCA6IDI7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gMTsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmc2RzX3JpbmctPm5hcGksCisJCQkJbmV0eGVuX25pY19wb2xsLCBORVRYRU5fTkVUREVWX1dFSUdIVCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25hcGlfZW5hYmxlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQluYXBpX2VuYWJsZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2Rpc2FibGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc2RzX3JpbmcpOworCQluYXBpX2Rpc2FibGUoJnNkc19yaW5nLT5uYXBpKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbnhfc2V0X2RtYV9tYXNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWludDhfdCByZXZpc2lvbl9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IGVycjsKLQl1aW50NjRfdCBtYXNrOworCXVpbnQ2NF90IG1hc2ssIGNtYXNrOwogCi0jaWZkZWYgQ09ORklHX0lBNjQKLQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotI2Vsc2UKLQlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApIHsKLQkJLyogc2hvdWxkIGdvIHRvIERNQV82NEJJVF9NQVNLICovCi0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AzX0EyKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AyX0MxKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM1QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzVCSVRfTUFTSzsKLQl9IGVsc2UgewotCQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotCQltYXNrID0gRE1BXzMyQklUX01BU0s7Ci0JCWdvdG8gc2V0XzMyX2JpdF9tYXNrOwotCX0KKwlhZGFwdGVyLT5wY2lfdXNpbmdfZGFjID0gMDsKIAorCW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKIAkvKgogCSAqIENvbnNpc3RlbnQgRE1BIG1hc2sgaXMgc2V0IHRvIDMyIGJpdCBiZWNhdXNlIGl0IGNhbm5vdCBiZSBzZXQgdG8KIAkgKiAzNSBiaXRzLiBGb3IgUDMgYWxzbyBsZWF2ZSBpdCBhdCAzMiBiaXRzIGZvciBub3cuIE9ubHkgdGhlIHJpbmdzCiAJICogY29tZSBvZmYgdGhpcyBwb29sLgogCSAqLworCWNtYXNrID0gRE1BXzMyQklUX01BU0s7CisKKyNpZm5kZWYgQ09ORklHX0lBNjQKKwlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApCisJCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKKwllbHNlIGlmIChyZXZpc2lvbl9pZCA9PSBOWF9QMl9DMSkKKwkJbWFzayA9IERNQV8zNUJJVF9NQVNLOworI2VuZGlmCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzaykgPT0gMCAmJgotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spID09IDApIHsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIGNtYXNrKSA9PSAwKSB7CiAJCWFkYXB0ZXItPnBjaV91c2luZ19kYWMgPSAxOwogCQlyZXR1cm4gMDsKIAl9Ci1zZXRfMzJfYml0X21hc2s6Ci0jZW5kaWYgLyogQ09ORklHX0lBNjQgKi8KIAotCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmICghZXJyKQotCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmIChlcnIpIHsKLQkJRFBSSU5USyhFUlIsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nOiVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOworfQorCisvKiBVcGRhdGUgYWRkcmVzc2FibGUgcmFuZ2UgaWYgZmlybXdhcmUgc3VwcG9ydHMgaXQgKi8KK3N0YXRpYyBpbnQKK254X3VwZGF0ZV9kbWFfbWFzayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNoYW5nZSwgc2hpZnQsIGVycjsKKwl1aW50NjRfdCBtYXNrLCBvbGRfbWFzazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwljaGFuZ2UgPSAwOworCisJc2hpZnQgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIENSQl9ETUFfU0hJRlQpOworCWlmIChzaGlmdCA+PSAzMikKKwkJcmV0dXJuIDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSAmJiAoc2hpZnQgPiA5KSkKKwkJY2hhbmdlID0gMTsKKwllbHNlIGlmICgoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID09IE5YX1AyX0MxKSAmJiAoc2hpZnQgPD0gNCkpCisJCWNoYW5nZSA9IDE7CisKKwlpZiAoY2hhbmdlKSB7CisJCW9sZF9tYXNrID0gcGRldi0+ZG1hX21hc2s7CisJCW1hc2sgPSAoMVVMTDw8KDMyK3NoaWZ0KSkgLSAxOworCisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzayk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBvbGRfbWFzayk7CiAJfQogCi0JYWRhcHRlci0+cGNpX3VzaW5nX2RhYyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldHhlbl9jaGVja19vcHRpb25zKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19ITUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfWEdfTE9NOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDRfTFA6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19JTUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9QTFVTOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9RVDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19TRlBfQ1Q6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfWEZQOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UOgorCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKKwkJYWRhcHRlci0+bnVtX3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCWVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJCWFkYXB0ZXItPm51bV9yeGQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19ITUVaOgorCWVsc2UKIAkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQlicmVhazsKIAotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfNF9HQjoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0JfTU06Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQkJYnJlYWs7CisJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlNfSE9TVDsKKwlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUzsKKwlhZGFwdGVyLT5udW1fbHJvX3J4ZCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwogCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjM1XzRHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8yRzoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQllbHNlCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBib2FyZCB0eXBlKDB4JXgpXG4iLAotCQkJCWFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1Q7Ci0JYWRhcHRlci0+bWF4X2p1bWJvX3J4X2Rlc2NfY291bnQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOwotCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwotCi0JYWRhcHRlci0+bWF4X3Bvc3NpYmxlX3Jzc19yaW5ncyA9IDE7CiAJcmV0dXJuOwogfQogCkBAIC0zMzYsNyArMzM3LDcgQEAKIHsKIAl1MzIgdmFsLCBkYXRhOwogCi0JdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGU7CisJdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkX3R5cGU7CiAJaWYgKCh2YWwgPT0gTkVUWEVOX0JSRFRZUEVfUDNfSE1FWikgfHwKIAkJKHZhbCA9PSBORVRYRU5fQlJEVFlQRV9QM19YR19MT00pKSB7CiAJCWlmIChwb3J0X21vZGUgPT0gTkVUWEVOX1BPUlRfTU9ERV84MDJfM19BUCkgewpAQCAtNDA1LDkgKzQwNiw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlpZiAobmV0eGVuX2lzX2ZsYXNoX3N1cHBvcnRlZChhZGFwdGVyKSAhPSAwKQotCQlyZXR1cm4gLUVJTzsKLQogCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CiAJCWlmIChuZXR4ZW5fcDNfZ2V0X21hY19hZGRyKGFkYXB0ZXIsICZtYWNfYWRkcikgIT0gMCkKIAkJCXJldHVybiAtRUlPOwpAQCAtNDU3LDQyICs0NTUsNDU4IEBACiAjZW5kaWYKIH07CiAKLS8qCi0gKiBuZXR4ZW5fbmljX3Byb2JlKCkKLSAqCi0gKiBUaGUgTGludXggc3lzdGVtIHdpbGwgaW52b2tlIHRoaXMgYWZ0ZXIgaWRlbnRpZnlpbmcgdGhlIHZlbmRvciBJRCBhbmQKLSAqIGRldmljZSBJZCBpbiB0aGUgcGNpX3RibCBzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuCi0gKgotICogQSBxdWFkIHBvcnQgY2FyZCBoYXMgb25lIG9wZXJhdGlvbmFsIFBDSSBjb25maWcgc3BhY2UsIChmdW5jdGlvbiAwKSwKLSAqIHdoaWNoIGlzIHVzZWQgdG8gYWNjZXNzIGFsbCBmb3VyIHBvcnRzLgotICoKLSAqIFRoaXMgcm91dGluZSB3aWxsIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIsIGFuZCBzZXR1cCB0aGUgZ2xvYmFsIHBhcmFtZXRlcnMKLSAqIGFsb25nIHdpdGggdGhlIHBvcnQncyBzcGVjaWZpYyBzdHJ1Y3R1cmUuCi0gKi8KK3N0YXRpYyB2b2lkCituZXR4ZW5fc2V0dXBfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgKmxlZ2FjeV9pbnRycDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+KE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQgfCBORVRYRU5fTklDX01TSVhfRU5BQkxFRCk7CisJYWRhcHRlci0+aW50cl9zY2hlbWUgPSAtMTsKKwlhZGFwdGVyLT5tc2lfbW9kZSA9IC0xOworCisJaWYgKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkKKwkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody5wY2lfZnVuY107CisJZWxzZQorCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbMF07CisJYWRhcHRlci0+bGVnYWN5X2ludHIuaW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OworCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnID0gbGVnYWN5X2ludHJwLT50Z3Rfc3RhdHVzX3JlZzsKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3RfbWFza19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9tYXNrX3JlZzsKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci5wY2lfaW50X3JlZyA9IGxlZ2FjeV9pbnRycC0+cGNpX2ludF9yZWc7CisKKwluZXR4ZW5fc2V0X21zaXhfYml0KHBkZXYsIDApOworCisJaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7CisKKwkJbmV0eGVuX2luaXRfbXNpeF9lbnRyaWVzKGFkYXB0ZXIpOworCQlpZiAocGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKKwkJCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSkKKwkJCWdvdG8gcmVxdWVzdF9tc2k7CisKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQ7CisJCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMSk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKKworCX0gZWxzZSB7CityZXF1ZXN0X21zaToKKwkJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7CisJCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKKwkJfSBlbHNlCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOworCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOworCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl90ZWFyZG93bl9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQorCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fY2xlYW51cF9wY2lfbWFwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+YWh3LmRiX2Jhc2UgIT0gTlVMTCkKKwkJaW91bm1hcChhZGFwdGVyLT5haHcuZGJfYmFzZSk7CisJaWYgKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgIT0gTlVMTCkKKwkJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKKwlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTEpOworCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UyICE9IE5VTEwpCisJCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMik7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9zZXR1cF9wY2lfbWFwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIwID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIxID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmRiX3B0ciA9IE5VTEw7CisKKwl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4gPSAwLCBwY2lfbGVuMCA9IDA7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOworCisJaW50IGVyciA9IDA7CisKKwkvKgorCSAqIFNldCB0aGUgQ1JCIHdpbmRvdyB0byBpbnZhbGlkLiBJZiBhbnkgcmVnaXN0ZXIgaW4gd2luZG93IDAgaXMKKwkgKiBhY2Nlc3NlZCBpdCBzaG91bGQgc2V0IHRoZSB3aW5kb3cgdG8gMCBhbmQgdGhlbiByZXNldCBpdCB0byAxLgorCSAqLworCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OworCWFkYXB0ZXItPmFody5xZHJfc25fd2luZG93ID0gLTE7CisJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSAtMTsKKworCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLworCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLworCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCXBjaV9sZW4wID0gMDsKKworCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOworCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKKwlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOworCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKKworCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCisJaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7CisJCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKKwkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlICsgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsCisJCQkJU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7CisJCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQsCisJCQkJVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKKwl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8zMk1CX1NJWkUpIHsKKwkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlLCBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKKwkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCAtCisJCQlTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKKwl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8yTUJfU0laRSkgeworCQlhZGFwdGVyLT5od193cml0ZV93eCA9IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk07CisJCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk07CisJCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzJNOworCQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlID0KKwkJCW5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8yTTsKKwkJYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplID0gbmV0eGVuX25pY19wY2lfcmVhZF9ub3JtYWxpemVfMk07CisJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPQorCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfbm9ybWFsaXplXzJNOworCQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk07CisJCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzJNOworCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlID0gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzJNOworCisJCW1lbV9wdHIwID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOworCQlpZiAobWVtX3B0cjAgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBQQ0kgYmFyIDBcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcGNpX2xlbjAgPSBtZW1fbGVuOworCisJCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKKwkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOworCisJCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCisJCQkocGNpX2Z1bmMgKiAweDIwKTsKKwkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOworCQlpZiAocGNpX2Z1bmMgPCA0KQorCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0gKHBjaV9mdW5jICogMHgyMCk7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9CisJCQkJCTB4QTAgKyAoKHBjaV9mdW5jIC0gNCkgKiAweDEwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOworCisJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCA9IG1lbV9wdHIwOworCWFkYXB0ZXItPmFody5wY2lfbGVuMCA9IHBjaV9sZW4wOworCWFkYXB0ZXItPmFody5wY2lfYmFzZTEgPSBtZW1fcHRyMTsKKwlhZGFwdGVyLT5haHcucGNpX2Jhc2UyID0gbWVtX3B0cjI7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJZ290byBza2lwX2Rvb3JiZWxsOworCisJZGJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsJLyogZG9vcmJlbGwgaXMgb24gYmFyIDQgKi8KKwlkYl9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpOworCisJaWYgKGRiX2xlbiA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3JiZWxsIGlzIGRpc2FibGVkXG4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZGJfcHRyID0gaW9yZW1hcChkYl9iYXNlLCBORVRYRU5fREJfTUFQU0laRV9CWVRFUyk7CisJaWYgKCFkYl9wdHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGRvb3JiZWxsIG1hcC4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCitza2lwX2Rvb3JiZWxsOgorCWFkYXB0ZXItPmFody5kYl9iYXNlID0gZGJfcHRyOworCWFkYXB0ZXItPmFody5kYl9sZW4gPSBkYl9sZW47CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fc3RhcnRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCB2YWwsIGVyciwgZmlyc3RfYm9vdDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpbnQgZmlyc3RfZHJpdmVyID0gMDsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlpZiAoYWRhcHRlci0+YWh3LnBjaV9mdW5jID09IDApCisJCQlmaXJzdF9kcml2ZXIgPSAxOworCX0gZWxzZSB7CisJCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCisJCQlmaXJzdF9kcml2ZXIgPSAxOworCX0KKworCWlmICghZmlyc3RfZHJpdmVyKQorCQlyZXR1cm4gMDsKKworCWZpcnN0X2Jvb3QgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKKwkJCU5FVFhFTl9DQU1fUkFNKDB4MWZjKSk7CisKKwllcnIgPSBuZXR4ZW5fY2hlY2tfaHdfaW5pdChhZGFwdGVyLCBmaXJzdF9ib290KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIGluIGluaXQgSFcgaW5pdCBzZXF1ZW5jZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgeworCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJCUNSQl9DTURQRUdfU1RBVEUsIDApOworCQluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBDUkJfRE1BX1NISUZULCAweDU1NTU1NTU1KTsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJbmV0eGVuX3NldF9wb3J0X21vZGUoYWRhcHRlcik7CisKKwluZXR4ZW5fbG9hZF9maXJtd2FyZShhZGFwdGVyKTsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisKKwkJLyogSW5pdGlhbGl6ZSBtdWx0aWNhc3QgYWRkciBwb29sIG93bmVycyAqLworCQl2YWwgPSAweDc2NTQ7CisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKKwkJCXZhbCB8PSAweDBmMDAwMDAwOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQlORVRYRU5fTUFDX0FERFJfQ05UTF9SRUcsIHZhbCk7CisKKwl9CisKKwllcnIgPSBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgorCSAqLworCXZhbCA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKKwkJfCAoKF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDw8IDgpKQorCQl8IChfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OKTsKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgdmFsKTsKKworCS8qIEhhbmRzaGFrZSB3aXRoIHRoZSBjYXJkIGJlZm9yZSB3ZSByZWdpc3RlciB0aGUgZGV2aWNlcy4gKi8KKwllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOworCWlmIChlcnIpIHsKKwkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3JlcXVlc3RfaXJxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpcnFfaGFuZGxlcl90IGhhbmRsZXI7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCWludCBlcnIsIHJpbmc7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJaWYgKChhZGFwdGVyLT5tc2lfbW9kZSAhPSBNU0lfTU9ERV9NVUxUSUZVTkMpIHx8CisJCShhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSBJTlRSX1NDSEVNRV9QRVJQT1JUKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBpbnRlcnJ1cHQgc2NoZW1lIGlzICIKKwkJCQkiaW5jb21wYXRpYmxlIHdpdGggZHJpdmVyXG4iLAorCQkJCW5ldGRldi0+bmFtZSk7CisJCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDE7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQloYW5kbGVyID0gbmV0eGVuX21zaXhfaW50cjsKKwllbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCisJCWhhbmRsZXIgPSBuZXR4ZW5fbXNpX2ludHI7CisJZWxzZSB7CisJCWZsYWdzIHw9IElSUUZfU0hBUkVEOworCQloYW5kbGVyID0gbmV0eGVuX2ludHI7CisJfQorCWFkYXB0ZXItPmlycSA9IG5ldGRldi0+aXJxOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlzcHJpbnRmKHNkc19yaW5nLT5uYW1lLCAiJTE2c1slZF0iLCBuZXRkZXYtPm5hbWUsIHJpbmcpOworCQllcnIgPSByZXF1ZXN0X2lycShzZHNfcmluZy0+aXJxLCBoYW5kbGVyLAorCQkJCSAgZmxhZ3MsIHNkc19yaW5nLT5uYW1lLCBzZHNfcmluZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19mcmVlX2lycShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlmcmVlX2lycShzZHNfcmluZy0+aXJxLCBzZHNfcmluZyk7CisJfQorfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3VwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5wb3J0bnVtKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkcik7CisKKwluZXR4ZW5fbmljX3NldF9saW5rX3BhcmFtZXRlcnMoYWRhcHRlcik7CisKKwluZXR4ZW5fc2V0X211bHRpY2FzdF9saXN0KG5ldGRldik7CisJaWYgKGFkYXB0ZXItPnNldF9tdHUpCisJCWFkYXB0ZXItPnNldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOworCisJYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisKKwluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA+IDEpCisJCW5ldHhlbl9jb25maWdfcnNzKGFkYXB0ZXIsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2Rvd24oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+c3RvcF9wb3J0KQorCQlhZGFwdGVyLT5zdG9wX3BvcnQoYWRhcHRlcik7CisKKwluZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKGFkYXB0ZXIpOworCisJRkxVU0hfU0NIRURVTEVEX1dPUksoKTsKKwlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworfQorCisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfYXR0YWNoKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgZXJyLCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKworCWVyciA9IG5ldHhlbl9pbml0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBpbml0IGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKKwkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDM7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKKworCWVyciA9IG5ldHhlbl9hbGxvY19zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKworCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7CisKKwllcnIgPSBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgaW4gc2V0dGluZyBodyByZXNvdXJjZXNcbiIsCisJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfc3c7CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgeworCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfcHJvZHVjZXIgPQorCQkJY3JiX2NtZF9wcm9kdWNlclthZGFwdGVyLT5wb3J0bnVtXTsKKwkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyID0KKwkJCWNyYl9jbWRfY29uc3VtZXJbYWRhcHRlci0+cG9ydG51bV07CisKKwkJbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKGFkYXB0ZXIsIDApOworCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfY29uc3VtZXIoYWRhcHRlciwgMCk7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisJCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmluZywgcmRzX3JpbmcpOworCX0KKworCWVyciA9IG5ldHhlbl9uaWNfcmVxdWVzdF9pcnEoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIHNldHVwIGludGVycnVwdFxuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yeGJ1ZjsKKwl9CisKKwlhZGFwdGVyLT5pc191cCA9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDOworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfcnhidWY6CisJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKKwluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfb3V0X2ZyZWVfc3c6CisJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2RldGFjaChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbmV0eGVuX25pY19mcmVlX2lycShhZGFwdGVyKTsKKworCW5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7CisJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKKworCWFkYXB0ZXItPmlzX3VwID0gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQKIG5ldHhlbl9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIwID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIxID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOwotCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKLQotCi0JdTggX19pb21lbSAqZGJfcHRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4sIHBjaV9sZW4wID0gMDsKIAlpbnQgaSA9IDAsIGVycjsKLQlpbnQgZmlyc3RfZHJpdmVyLCBmaXJzdF9ib290OwotCXUzMiB2YWw7CiAJaW50IHBjaV9mdW5jX2lkID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOwotCXN0cnVjdCBuZXR4ZW5fbGVnYWN5X2ludHJfc2V0ICpsZWdhY3lfaW50cnA7CiAJdWludDhfdCByZXZpc2lvbl9pZDsKIAotCWlmIChwY2lfZnVuY19pZCA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKLQogCWlmIChwZGV2LT5jbGFzcyAhPSAweDAyMDAwMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiTmV0WGVuIGZ1bmN0aW9uICVkLCBjbGFzcyAleCB3aWxsIG5vdCAiCiAJCQkJImJlIGVuYWJsZWQuXG4iLHBjaV9mdW5jX2lkLCBwZGV2LT5jbGFzcyk7CkBAIC01NDIsMTI1ICs5NTYsMTQgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7Ci0JYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAtMTsKLQlhZGFwdGVyLT5haHcuZGRyX21uX3dpbmRvdyA9IC0xOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKIAotCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLwotCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLwotCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwotCXBjaV9sZW4wID0gMDsKLQotCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOwotCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKLQlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOwotCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKLQotCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCi0JaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7Ci0JCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlICsgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7Ci0JCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IEZJUlNUX1BBR0VfR1JPVVBfU1RBUlQ7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSBGSVJTVF9QQUdFX0dST1VQX0VORDsKLQl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8zMk1CX1NJWkUpIHsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlLCBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCAtCi0JCQlTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOwotCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzJNQl9TSVpFKSB7Ci0JCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8yTTsKLQkJYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8yTTsKLQkJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk07Ci0JCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPQotCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNOwotCQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8yTTsKLQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZSA9Ci0JCQluZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMk07Ci0JCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTTsKLQkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk07Ci0JCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk07Ci0KLQkJbWVtX3B0cjAgPSBpb3JlbWFwKG1lbV9iYXNlLCBtZW1fbGVuKTsKLQkJcGNpX2xlbjAgPSBtZW1fbGVuOwotCQlmaXJzdF9wYWdlX2dyb3VwX3N0YXJ0ID0gMDsKLQkJZmlyc3RfcGFnZV9ncm91cF9lbmQgICA9IDA7Ci0KLQkJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSAwOwotCQlhZGFwdGVyLT5haHcucWRyX3NuX3dpbmRvdyA9IDA7Ci0KLQkJYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfTU5fV0lORE9XICsKLQkJCShwY2lfZnVuY19pZCAqIDB4MjApOwotCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiA9IDB4MTAwMDAwICsgUENJWF9TTl9XSU5ET1c7Ci0JCWlmIChwY2lfZnVuY19pZCA8IDQpCi0JCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiArPSAocGNpX2Z1bmNfaWQgKiAweDIwKTsKLQkJZWxzZQotCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0KLQkJCQkJMHhBMCArICgocGNpX2Z1bmNfaWQgLSA0KSAqIDB4MTApOwotCX0gZWxzZSB7Ci0JCWVyciA9IC1FSU87CisJZXJyID0gbmV0eGVuX3NldHVwX3BjaV9tYXAoYWRhcHRlcik7CisJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwotCX0KLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZE1CIG1lbW9yeSBtYXBcbiIsIChpbnQpKG1lbV9sZW4+PjIwKSk7Ci0KLQlkYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOwkvKiBkb29yYmVsbCBpcyBvbiBiYXIgNCAqLwotCWRiX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCk7Ci0KLQlpZiAoZGJfbGVuID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZG9vcmJlbGwgaXMgZGlzYWJsZWRcbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9pb3VubWFwOwotCX0KLQlEUFJJTlRLKElORk8sICJkb29yYmVsbCBpb3JlbWFwIGZyb20gJWx4IGEgc2l6ZSBvZiAlbHhcbiIsIGRiX2Jhc2UsCi0JCWRiX2xlbik7Ci0KLQlkYl9wdHIgPSBpb3JlbWFwKGRiX2Jhc2UsIE5FVFhFTl9EQl9NQVBTSVpFX0JZVEVTKTsKLQlpZiAoIWRiX3B0cikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgZG9vcmJlbGwgbWFwLiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9pb3VubWFwOwotCX0KLQlEUFJJTlRLKElORk8sICJkb29yYmVsbCBpb3JlbWFwZWQgYXQgJXBcbiIsIGRiX3B0cik7Ci0KLQlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7Ci0JYWRhcHRlci0+YWh3LnBjaV9sZW4wID0gcGNpX2xlbjA7Ci0JYWRhcHRlci0+YWh3LmZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQgPSBmaXJzdF9wYWdlX2dyb3VwX3N0YXJ0OwotCWFkYXB0ZXItPmFody5maXJzdF9wYWdlX2dyb3VwX2VuZCAgID0gZmlyc3RfcGFnZV9ncm91cF9lbmQ7Ci0JYWRhcHRlci0+YWh3LnBjaV9iYXNlMSA9IG1lbV9wdHIxOwotCWFkYXB0ZXItPmFody5wY2lfYmFzZTIgPSBtZW1fcHRyMjsKLQlhZGFwdGVyLT5haHcuZGJfYmFzZSA9IGRiX3B0cjsKLQlhZGFwdGVyLT5haHcuZGJfbGVuID0gZGJfbGVuOwotCi0JbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwKLQkJCW5ldHhlbl9uaWNfcG9sbCwgTkVUWEVOX05FVERFVl9XRUlHSFQpOwotCi0JaWYgKHJldmlzaW9uX2lkID49IE5YX1AzX0IwKQotCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbcGNpX2Z1bmNfaWRdOwotCWVsc2UKLQkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyWzBdOwotCi0JYWRhcHRlci0+bGVnYWN5X2ludHIuaW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OwotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnID0gbGVnYWN5X2ludHJwLT50Z3Rfc3RhdHVzX3JlZzsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3RfbWFza19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9tYXNrX3JlZzsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci5wY2lfaW50X3JlZyA9IGxlZ2FjeV9pbnRycC0+cGNpX2ludF9yZWc7Ci0KLQkvKiB0aGlzIHdpbGwgYmUgcmVhZCBmcm9tIEZXIGxhdGVyICovCi0JYWRhcHRlci0+aW50cl9zY2hlbWUgPSAtMTsKLQlhZGFwdGVyLT5tc2lfbW9kZSA9IC0xOwogCiAJLyogVGhpcyB3aWxsIGJlIHJlc2V0IGZvciBtZXp6IGNhcmRzICAqLwogCWFkYXB0ZXItPnBvcnRudW0gPSBwY2lfZnVuY19pZDsKLQlhZGFwdGVyLT5zdGF0dXMgICAmPSB+TkVUWEVOX05FVERFVl9TVEFUVVM7CiAJYWRhcHRlci0+cnhfY3N1bSA9IDE7CiAJYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7CiAJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkKQEAgLTY4OCwxMiArOTkxLDYgQEAKIAkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAl9CiAKLQkvKgotCSAqIFNldCB0aGUgQ1JCIHdpbmRvdyB0byBpbnZhbGlkLiBJZiBhbnkgcmVnaXN0ZXIgaW4gd2luZG93IDAgaXMKLQkgKiBhY2Nlc3NlZCBpdCBzaG91bGQgc2V0IHRoZSB3aW5kb3cgdG8gMCBhbmQgdGhlbiByZXNldCBpdCB0byAxLgotCSAqLwotCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OwotCiAJaWYgKG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oYWRhcHRlcikgIT0gMCkgewogCQlwcmludGsoIiVzOiBFcnJvciBnZXR0aW5nIGJvYXJkIGNvbmZpZyBpbmZvLlxuIiwKIAkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKQEAgLTcwNCw3ICsxMDAxLDcgQEAKIAluZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29wcyhhZGFwdGVyKTsKIAogCS8qIE1lenogY2FyZHMgaGF2ZSBQQ0kgZnVuY3Rpb24gMCwyLDMgZW5hYmxlZCAqLwotCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGUpIHsKKwlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWjoKIAkJaWYgKHBjaV9mdW5jX2lkID49IDIpCkBAIC03MTQsMTI2ICsxMDExLDMyIEBACiAJCWJyZWFrOwogCX0KIAotCS8qCi0JICogVGhpcyBjYWxsIHdpbGwgc2V0dXAgdmFyaW91cyBtYXggcngvdHggY291bnRzLgotCSAqIEl0IG11c3QgYmUgZG9uZSBiZWZvcmUgYW55IGJ1ZmZlci9yaW5nIGFsbG9jYXRpb25zLgotCSAqLwotCW5ldHhlbl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOworCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCWZpcnN0X2RyaXZlciA9IDA7Ci0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlpZiAoYWRhcHRlci0+YWh3LnBjaV9mdW5jID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0KKwlueF91cGRhdGVfZG1hX21hc2soYWRhcHRlcik7CiAKLQlpZiAoZmlyc3RfZHJpdmVyKSB7Ci0JCWZpcnN0X2Jvb3QgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKLQkJCQlORVRYRU5fQ0FNX1JBTSgweDFmYykpOwotCi0JCWVyciA9IG5ldHhlbl9jaGVja19od19pbml0KGFkYXB0ZXIsIGZpcnN0X2Jvb3QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiBpbml0IEhXIGluaXQgc2VxdWVuY2VcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0JCX0KLQotCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKQotCQkJbmV0eGVuX3NldF9wb3J0X21vZGUoYWRhcHRlcik7Ci0KLQkJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgewotCQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCQkJQ1JCX0NNRFBFR19TVEFURSwgMCk7Ci0JCQluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7Ci0JCQltc2xlZXAoMSk7Ci0JCX0KLQkJbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7Ci0KLQkJaWYgKE5YX0lTX1JFVklTSU9OX1AyKHJldmlzaW9uX2lkKSkgewotCi0JCQkvKiBJbml0aWFsaXplIG11bHRpY2FzdCBhZGRyIHBvb2wgb3duZXJzICovCi0JCQl2YWwgPSAweDc2NTQ7Ci0JCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKQotCQkJCXZhbCB8PSAweDBmMDAwMDAwOwotCQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9NQUNfQUREUl9DTlRMX1JFRywgdmFsKTsKLQotCQl9Ci0KLQkJZXJyID0gbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0KLQkJLyoKLQkJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgotCQkgKi8KLQkJaSA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKLQkJCXwgKChfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiA8PCA4KSkKLQkJCXwgKF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04pOwotCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgaSk7Ci0KLQkJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLwotCQllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfb2ZmbG9hZDsKLQotCX0JLyogZmlyc3RfZHJpdmVyICovCi0KLQluZXR4ZW5fbmljX2ZsYXNoX3ByaW50KGFkYXB0ZXIpOwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCi0JCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmdmFsLCA0KTsKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID0gKHZhbCAmIDB4NCkgPyAxIDogMDsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHJ1bm5pbmcgaW4gJXMgbW9kZVxuIiwKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dCB0aHJvdWdoIiA6ICJsZWdhY3kiKTsKLQl9CisJbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhhZGFwdGVyKTsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBmaXJtd2FyZSBnYXZlIHVzIGEgdmlydHVhbC1waHlzaWNhbCBwb3J0IG1hcHBpbmcuCiAJICovCiAJYWRhcHRlci0+cGh5c2ljYWxfcG9ydCA9IGFkYXB0ZXItPnBvcnRudW07Ci0JaSA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfVjJQKGFkYXB0ZXItPnBvcnRudW0pKTsKLQlpZiAoaSAhPSAweDU1NTU1NTU1KQotCQlhZGFwdGVyLT5waHlzaWNhbF9wb3J0ID0gaTsKLQotCWFkYXB0ZXItPmZsYWdzICY9IH4oTkVUWEVOX05JQ19NU0lfRU5BQkxFRCB8IE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKTsKLQotCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMCk7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7Ci0JCWlmICgobWVtX2xlbiAhPSBORVRYRU5fUENJXzEyOE1CX1NJWkUpICYmCi0JCQltZW1fbGVuICE9IE5FVFhFTl9QQ0lfMk1CX1NJWkUpCi0JCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7CisJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgeworCQlpID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJQ1JCX1YyUChhZGFwdGVyLT5wb3J0bnVtKSk7CisJCWlmIChpICE9IDB4NTU1NTU1NTUpCisJCQlhZGFwdGVyLT5waHlzaWNhbF9wb3J0ID0gaTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQpIHsKKwluZXR4ZW5fY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAotCQluZXR4ZW5faW5pdF9tc2l4X2VudHJpZXMoYWRhcHRlcik7CisJbmV0eGVuX3NldHVwX2ludHIoYWRhcHRlcik7CiAKLQkJaWYgKHBjaV9lbmFibGVfbXNpeChwZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCi0JCQkJCU1TSVhfRU5UUklFU19QRVJfQURBUFRFUikpCi0JCQlnb3RvIHJlcXVlc3RfbXNpOworCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIAotCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSVhfRU5BQkxFRDsKLQkJbmV0eGVuX3NldF9tc2l4X2JpdChwZGV2LCAxKTsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaS14IGludGVycnVwdHNcbiIpOwotCi0JfSBlbHNlIHsKLXJlcXVlc3RfbXNpOgotCQlpZiAodXNlX21zaSAmJiAhcGNpX2VuYWJsZV9tc2kocGRldikpIHsKLQkJCWFkYXB0ZXItPmZsYWdzIHw9IE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQ7Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpIGludGVycnVwdHNcbiIpOwotCQl9IGVsc2UKLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBsZWdhY3kgaW50ZXJydXB0c1xuIik7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKLQllbHNlCi0JCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOworCW5ldHhlbl9uYXBpX2FkZChhZGFwdGVyLCBuZXRkZXYpOwogCiAJZXJyID0gbmV0eGVuX3JlY2VpdmVfcGVnX3JlYWR5KGFkYXB0ZXIpOwogCWlmIChlcnIpCkBAIC04NjIsNyArMTA2NSw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CiAJY2FzZSBORVRYRU5fTklDX0dCRToKIAkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKIAkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwpAQCAtODc2LDI1ICsxMDc5LDEyIEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZGlzYWJsZV9tc2k6Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaXgocGRldik7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKLQkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCW5ldHhlbl90ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOwogCi1lcnJfb3V0X2ZyZWVfb2ZmbG9hZDoKLQlpZiAoZmlyc3RfZHJpdmVyKQotCQluZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwogCiBlcnJfb3V0X2lvdW5tYXA6Ci0JaWYgKGRiX3B0cikKLQkJaW91bm1hcChkYl9wdHIpOwotCi0JaWYgKG1lbV9wdHIwKQotCQlpb3VubWFwKG1lbV9wdHIwKTsKLQlpZiAobWVtX3B0cjEpCi0JCWlvdW5tYXAobWVtX3B0cjEpOwotCWlmIChtZW1fcHRyMikKLQkJaW91bm1hcChtZW1fcHRyMik7CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKIAogZXJyX291dF9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtOTIyLDkgKzExMTIsNyBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKIAlpZiAoYWRhcHRlci0+aXNfdXAgPT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpIHsKLQkJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQluZXR4ZW5fcmVsZWFzZV9yeF9idWZmZXJzKGFkYXB0ZXIpOwotCQluZXR4ZW5fZnJlZV9zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOwogCiAJCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQkJbmV0eGVuX3AzX2ZyZWVfbWFjX2xpc3QoYWRhcHRlcik7CkBAIC05MzMsMjAgKzExMjEsOSBAQAogCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCiAJCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKIAotCWlmIChhZGFwdGVyLT5pcnEpCi0JCWZyZWVfaXJxKGFkYXB0ZXItPmlycSwgYWRhcHRlcik7CisJbmV0eGVuX3RlYXJkb3duX2ludHIoYWRhcHRlcik7CiAKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkKLQkJcGNpX2Rpc2FibGVfbXNpeChwZGV2KTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQotCQlwY2lfZGlzYWJsZV9tc2kocGRldik7Ci0KLQlpb3VubWFwKGFkYXB0ZXItPmFody5kYl9iYXNlKTsKLQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTApOwotCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UxICE9IE5VTEwpCi0JCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSk7Ci0JaWYgKGFkYXB0ZXItPmFody5wY2lfYmFzZTIgIT0gTlVMTCkKLQkJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UyKTsKKwluZXR4ZW5fY2xlYW51cF9wY2lfbWFwKGFkYXB0ZXIpOwogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC05NTUsMTI1ICsxMTMyLDk1IEBACiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIH0KIAotLyoKLSAqIENhbGxlZCB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgaXMgbWFkZSBhY3RpdmUKLSAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQotICovCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJbmV0eGVuX25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgPT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwlpZiAobmV0eGVuX25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnI7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYWRhcHRlci0+Y3Vycl93aW5kb3cgPSAyNTU7CisKKwllcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc3RhcnQgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IG5ldHhlbl9uaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVyciA9IDA7Ci0JaW50IGN0eCwgcmluZzsKLQlpcnFfaGFuZGxlcl90IGhhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IElSUUZfU0FNUExFX1JBTkRPTTsKIAogCWlmIChhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2gpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7Ci0JCWVyciA9IG5ldHhlbl9pbml0X2Zpcm13YXJlKGFkYXB0ZXIpOwotCQlpZiAoZXJyICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluaXQgZmlybXdhcmVcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDM7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAyOwotCi0JCWVyciA9IG5ldHhlbl9hbGxvY19zd19yZXNvdXJjZXMoYWRhcHRlcik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGluIHNldHRpbmcgc3cgcmVzb3VyY2VzXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOworCQllcnIgPSBuZXR4ZW5fbmljX2F0dGFjaChhZGFwdGVyKTsKKwkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQluZXR4ZW5fbmljX2NsZWFyX3N0YXRzKGFkYXB0ZXIpOwotCi0JCWVyciA9IG5ldHhlbl9hbGxvY19od19yZXNvdXJjZXMoYWRhcHRlcik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGluIHNldHRpbmcgaHcgcmVzb3VyY2VzXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfc3c7Ci0JCX0KLQotCQlpZiAoKGFkYXB0ZXItPm1zaV9tb2RlICE9IE1TSV9NT0RFX01VTFRJRlVOQykgfHwKLQkJCShhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSBJTlRSX1NDSEVNRV9QRVJQT1JUKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlybXdhcmUgaW50ZXJydXB0IHNjaGVtZSBpcyAiCi0JCQkJCSJpbmNvbXBhdGlibGUgd2l0aCBkcml2ZXJcbiIsCi0JCQkJCW5ldGRldi0+bmFtZSk7Ci0JCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfaHc7Ci0JCX0KLQotCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7Ci0JCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfcHJvZHVjZXIgPQotCQkJCWNyYl9jbWRfcHJvZHVjZXJbYWRhcHRlci0+cG9ydG51bV07Ci0JCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfY29uc3VtZXIgPQotCQkJCWNyYl9jbWRfY29uc3VtZXJbYWRhcHRlci0+cG9ydG51bV07Ci0KLQkJCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9wcm9kdWNlcihhZGFwdGVyLCAwKTsKLQkJCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9jb25zdW1lcihhZGFwdGVyLCAwKTsKLQkJfQotCi0JCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKQotCQkJCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgY3R4LCByaW5nKTsKLQkJfQotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkKLQkJCWhhbmRsZXIgPSBuZXR4ZW5fbXNpeF9pbnRyOwotCQllbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCi0JCQloYW5kbGVyID0gbmV0eGVuX21zaV9pbnRyOwotCQllbHNlIHsKLQkJCWZsYWdzIHw9IElSUUZfU0hBUkVEOwotCQkJaGFuZGxlciA9IG5ldHhlbl9pbnRyOwotCQl9Ci0JCWFkYXB0ZXItPmlycSA9IG5ldGRldi0+aXJxOwotCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGhhbmRsZXIsCi0JCQkJICBmbGFncywgbmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJyZXF1ZXN0X2lycSBmYWlsZWQgd2l0aDogJWRcbiIsIGVycik7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZV9yeGJ1ZjsKLQkJfQotCi0JCWFkYXB0ZXItPmlzX3VwID0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUM7CiAJfQogCi0JLyogRG9uZSBoZXJlIGFnYWluIHNvIHRoYXQgZXZlbiBpZiBwaGFudG9tIHN3IG92ZXJ3cm90ZSBpdCwKLQkgKiB3ZSBzZXQgaXQgKi8KLQllcnIgPSBhZGFwdGVyLT5pbml0X3BvcnQoYWRhcHRlciwgYWRhcHRlci0+cGh5c2ljYWxfcG9ydCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwb3J0ICVkXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPnBvcnRudW0pOwotCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7Ci0JfQotCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIpOwotCi0JbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKGFkYXB0ZXIpOwotCi0JbmV0eGVuX3NldF9tdWx0aWNhc3RfbGlzdChuZXRkZXYpOwotCWlmIChhZGFwdGVyLT5zZXRfbXR1KQotCQlhZGFwdGVyLT5zZXRfbXR1KGFkYXB0ZXIsIG5ldGRldi0+bXR1KTsKLQotCWFkYXB0ZXItPmFody5saW5rdXAgPSAwOwotCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOwotCi0JbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOwotCW5ldHhlbl9uaWNfZW5hYmxlX2ludChhZGFwdGVyKTsKKwllcnIgPSBuZXR4ZW5fbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OwogCiAJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAogCXJldHVybiAwOwogCi1lcnJfb3V0X2ZyZWVfaXJxOgotCWZyZWVfaXJxKGFkYXB0ZXItPmlycSwgYWRhcHRlcik7Ci1lcnJfb3V0X2ZyZWVfcnhidWY6Ci0JbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKLWVycl9vdXRfZnJlZV9odzoKLQluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7Ci1lcnJfb3V0X2ZyZWVfc3c6Ci0JbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworZXJyX291dDoKKwluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDg0LDIwICsxMjMxLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQotCWlmIChhZGFwdGVyLT5zdG9wX3BvcnQpCi0JCWFkYXB0ZXItPnN0b3BfcG9ydChhZGFwdGVyKTsKLQotCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoYWRhcHRlcik7Ci0KLQluZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKGFkYXB0ZXIpOwotCi0JRkxVU0hfU0NIRURVTEVEX1dPUksoKTsKLQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwotCisJbmV0eGVuX25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjksNyArMTMwMywxNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBuZXR4ZW5fbmljX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZAorbmV0eGVuX2NsZWFyX2NtZGRlc2ModTY0ICpkZXNjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWRlc2NbaV0gPSAwVUxMOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBuZXR4ZW5faGFyZHdhcmVfY29udGV4dCAqaHcgPSAmYWRhcHRlci0+YWh3OwpAQCAtMTE4Myw3ICsxMzI2LDcgQEAKIAogCXUzMiBwcm9kdWNlciwgY29uc3VtZXI7CiAJaW50IGZyYWdfY291bnQsIG5vX29mX2Rlc2M7Ci0JdTMyIG51bV90eGQgPSBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudDsKKwl1MzIgbnVtX3R4ZCA9IGFkYXB0ZXItPm51bV90eGQ7CiAJYm9vbCBpc190c28gPSBmYWxzZTsKIAogCWZyYWdfY291bnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKQEAgLTEyMDIsNyArMTM0NSw3IEBACiAKIAkvKiBDb3B5IHRoZSBkZXNjcmlwdG9ycyBpbnRvIHRoZSBoYXJkd2FyZSAgICAqLwogCWh3ZGVzYyA9ICZody0+Y21kX2Rlc2NfaGVhZFtwcm9kdWNlcl07Ci0JbWVtc2V0KGh3ZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkpOworCW5ldHhlbl9jbGVhcl9jbWRkZXNjKCh1NjQgKilod2Rlc2MpOwogCS8qIFRha2Ugc2tiLT5kYXRhIGl0c2VsZiAqLwogCXBidWYgPSAmYWRhcHRlci0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdOwogCkBAIC0xMjIxLDcgKzEzNjQsNyBAQAogCW5ldHhlbl9zZXRfdHhfZnJhZ3NfbGVuKGh3ZGVzYywgZnJhZ19jb3VudCwgc2tiLT5sZW4pOwogCW5ldHhlbl9zZXRfdHhfcG9ydChod2Rlc2MsIGFkYXB0ZXItPnBvcnRudW0pOwogCi0JaHdkZXNjLT5idWZmZXIxX2xlbmd0aCA9IGNwdV90b19sZTE2KGZpcnN0X3NlZ19sZW4pOworCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFswXSA9IGNwdV90b19sZTE2KGZpcnN0X3NlZ19sZW4pOwogCWh3ZGVzYy0+YWRkcl9idWZmZXIxID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKIAogCWZvciAoaSA9IDEsIGsgPSAxOyBpIDwgZnJhZ19jb3VudDsgaSsrLCBrKyspIHsKQEAgLTEyMzQsNyArMTM3Nyw3IEBACiAJCQlrID0gMDsKIAkJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG51bV90eGQpOwogCQkJaHdkZXNjID0gJmh3LT5jbWRfZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJCW1lbXNldChod2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApKTsKKwkJCW5ldHhlbl9jbGVhcl9jbWRkZXNjKCh1NjQgKilod2Rlc2MpOwogCQkJcGJ1ZiA9ICZhZGFwdGVyLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07CiAJCQlwYnVmLT5za2IgPSBOVUxMOwogCQl9CkBAIC0xMjU0LDIxICsxMzk3LDE4IEBACiAJCWJ1ZmZyYWctPmRtYSA9IHRlbXBfZG1hOwogCQlidWZmcmFnLT5sZW5ndGggPSB0ZW1wX2xlbjsKIAorCQlod2Rlc2MtPmJ1ZmZlcl9sZW5ndGhba10gPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCXN3aXRjaCAoaykgewogCQljYXNlIDA6Ci0JCQlod2Rlc2MtPmJ1ZmZlcjFfbGVuZ3RoID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOwogCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjEgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CiAJCQlicmVhazsKIAkJY2FzZSAxOgotCQkJaHdkZXNjLT5idWZmZXIyX2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJCWh3ZGVzYy0+YWRkcl9idWZmZXIyID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCWh3ZGVzYy0+YnVmZmVyM19sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMyA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDM6Ci0JCQlod2Rlc2MtPmJ1ZmZlcjRfbGVuZ3RoID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOwogCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjQgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTM4Myw3ICsxNTIzLDcgQEAKIAkJbGlua3VwID0gKHZhbCA9PSBYR19MSU5LX1VQX1AzKTsKIAl9IGVsc2UgewogCQl2YWwgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX1hHX1NUQVRFKTsKLQkJaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKQorCQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkKIAkJCWxpbmt1cCA9ICh2YWwgPj4gcG9ydCkgJiAxOwogCQllbHNlIHsKIAkJCXZhbCA9ICh2YWwgPj4gcG9ydCo4KSAmIDB4ZmY7CkBAIC0xNDUwLDEzICsxNTkwLDExIEBACiAJcHJpbnRrKEtFUk5fRVJSICIlcyAlczogdHJhbnNtaXQgdGltZW91dCwgcmVzZXR0aW5nLlxuIiwKIAkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKIAotCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoYWRhcHRlcik7Ci0JbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKKwluZXR4ZW5fbmFwaV9kaXNhYmxlKGFkYXB0ZXIpOwogCiAJYWRhcHRlci0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0JbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOworCW5ldHhlbl9uYXBpX2VuYWJsZShhZGFwdGVyKTsKIAluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiB9CiAKQEAgLTE0OTQsNyArMTYzMiw4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR4ZW5faW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKIAl1MzIgc3RhdHVzID0gMDsKIAogCXN0YXR1cyA9IGFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUik7CkBAIC0xNTI1LDcgKzE2NjQsNyBAQAogCiAJLyogY2xlYXIgaW50ZXJydXB0ICovCiAJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJbmV0eGVuX25pY19kaXNhYmxlX2ludChhZGFwdGVyKTsKKwkJbmV0eGVuX25pY19kaXNhYmxlX2ludChzZHNfcmluZyk7CiAKIAlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlKGFkYXB0ZXIsCiAJCQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZywKQEAgLTE1MzQsNjEgKzE2NzMsNDkgQEAKIAlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUoYWRhcHRlciwgSVNSX0lOVF9WRUNUT1IpOwogCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUik7CiAKLQluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR4ZW5fbXNpX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KIAlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlKGFkYXB0ZXIsCiAJCQltc2lfdGd0X3N0YXR1c1thZGFwdGVyLT5haHcucGNpX2Z1bmNdLCAweGZmZmZmZmZmKTsKIAotCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnNkc19yaW5nLT5uYXBpKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR4ZW5fbXNpeF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gZGF0YTsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSBkYXRhOwogCi0JbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGludCBuZXR4ZW5fbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIsIG5hcGkpOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9CisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZywgbmFwaSk7CisKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKwogCWludCB0eF9jb21wbGV0ZTsKLQlpbnQgY3R4OwogCWludCB3b3JrX2RvbmU7CiAKIAl0eF9jb21wbGV0ZSA9IG5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKGFkYXB0ZXIpOwogCi0Jd29ya19kb25lID0gMDsKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQkvKgotCQkgKiBGYWlybmVzcyBpc3N1ZS4gVGhpcyB3aWxsIGdpdmUgdW5kdWUgd2VpZ2h0IHRvIHRoZQotCQkgKiByZWNlaXZlIGNvbnRleHQgMC4KLQkJICovCi0KLQkJLyoKLQkJICogVG8gYXZvaWQgc3RhcnZhdGlvbiwgd2UgZ2l2ZSBlYWNoIG9mIG91ciByZWNlaXZlcnMsCi0JCSAqIGEgZnJhY3Rpb24gb2YgdGhlIHF1b3RhLiBTb21ldGltZXMsIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHdlCi0JCSAqIGhhdmUgZW5vdWdoIHF1b3RhIHRvIHByb2Nlc3MgZXZlcnkgcGFja2V0LCBidXQgc2luY2UgYWxsIHRoZQotCQkgKiBwYWNrZXRzIGFyZSBvbiBvbmUgY29udGV4dCwgaXQgZ2V0cyBvbmx5IGhhbGYgb2YgdGhlIHF1b3RhLAotCQkgKiBhbmQgZW5kcyB1cCBub3QgcHJvY2Vzc2luZyBpdC4KLQkJICovCi0JCXdvcmtfZG9uZSArPSBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhhZGFwdGVyLCBjdHgsCi0JCQkJCQkgICAgIGJ1ZGdldCAvIE1BWF9SQ1ZfQ1RYKTsKLQl9CisJd29ya19kb25lID0gbmV0eGVuX3Byb2Nlc3NfcmN2X3Jpbmcoc2RzX3JpbmcsIGJ1ZGdldCk7CiAKIAlpZiAoKHdvcmtfZG9uZSA8IGJ1ZGdldCkgJiYgdHhfY29tcGxldGUpIHsKLQkJbmFwaV9jb21wbGV0ZSgmYWRhcHRlci0+bmFwaSk7Ci0JCW5ldHhlbl9uaWNfZW5hYmxlX2ludChhZGFwdGVyKTsKKwkJbmFwaV9jb21wbGV0ZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNjA4LDEzICsxNzM1LDE3IEBACiAJLm5hbWUgPSBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9IG5ldHhlbl9wY2lfdGJsLAogCS5wcm9iZSA9IG5ldHhlbl9uaWNfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG5ldHhlbl9uaWNfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChuZXR4ZW5fbmljX3JlbW92ZSksCisJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCisJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lCiB9OwogCiAvKiBEcml2ZXIgUmVnaXN0cmF0aW9uIG9uIE5ldFhlbiBjYXJkICAgICovCiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKQogeworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOworCiAJaWYgKChuZXR4ZW5fd29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibmV0eGVuIikpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCmluZGV4IGMzYjljODMuLmQ4NTIwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQgaC93IGJsb2NrLgorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtMjk5LDE0ICsyOTYsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAwCi1pbnQgbmV0eGVuX25pdV94Z2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9BQ1RJVkVfSU5ULCAtMSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiBzdGF0aWMgaW50IG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTQ2NywxMDQgKzQ1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKgotICogbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQgLSBIYW5kbGVzIEdiRSBQSFkgaW50ZXJydXB0cwotICogQHBhcmFtIGVuYWJsZSAwIG1lYW5zIGRvbid0IGVuYWJsZSB0aGUgcG9ydAotICoJCSAxIG1lYW5zIGVuYWJsZSAob3IgcmUtZW5hYmxlKSB0aGUgcG9ydAotICovCi1pbnQgbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQlpbnQgcG9ydCwgbG9uZyBlbmFibGUpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JX191MzIgaW50X3NyYzsKLQotCXByaW50ayhLRVJOX0lORk8gUEZYICJORVRYRU46IEhhbmRsaW5nIFBIWSBpbnRlcnJ1cHQgb24gcG9ydCAlZCIKLQkgICAgICAgIiAoZGV2aWNlIGVuYWJsZSA9ICVkKVxuIiwgKGludClwb3J0LCAoaW50KWVuYWJsZSk7Ci0KLQkvKgotCSAqIFRoZSByZWFkIG9mIHRoZSBQSFkgSU5UIHN0YXR1cyB3aWxsIGNsZWFyIHRoZSBwZW5kaW5nCi0JICogaW50ZXJydXB0IHN0YXR1cwotCSAqLwotCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZChhZGFwdGVyLAotCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX1NUQVRVUywKLQkJCQkgICAgJmludF9zcmMpICE9IDApCi0JCXJlc3VsdCA9IC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQSFkgSW50ZXJydXB0IHNvdXJjZSA9IDB4JXggXG4iLCBpbnRfc3JjKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9qYWJiZXIoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiamFiYmVyIEludGVycnVwdCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wb2xhcml0eV9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBvbGFyaXR5IGNoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZW5lcmd5X2RldGVjdChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJlbmVyZ3kgZGV0ZWN0IFxuIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZG93bnNoaWZ0KGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImRvd25zaGlmdCBcbiIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X21kaV94b3Zlcl9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIm1kaV94b3Zlcl9jaGFuZ2VkICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2ZpZm9fb3Zlcl91bmRlcmZsb3coaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmlmb19vdmVyX3VuZGVyZmxvdyAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9mYWxzZV9jYXJyaWVyKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhbHNlX2NhcnJpZXIgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfc3ltYm9sX2Vycm9yKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInN5bWJvbF9lcnJvciAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9hdXRvbmVnX2NvbXBsZXRlZChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2NvbXBsZXRlZCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wYWdlX3JlY2VpdmVkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBhZ2VfcmVjZWl2ZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZHVwbGV4X2NoYW5nZWQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZHVwbGV4X2NoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfYXV0b25lZ19lcnJvcihpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2Vycm9yICIpOwotCQlpZiAoKG5ldHhlbl9nZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGludF9zcmMpKQotCQkgICAgfHwgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSkgewotCQkJX191MzIgc3RhdHVzOwotCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJICAgICAgICJzcGVlZF9jaGFuZ2VkIG9yIGxpbmsgc3RhdHVzIGNoYW5nZWQiKTsKLQkJCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZAotCQkJICAgIChhZGFwdGVyLAotCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKLQkJCSAgICAgJnN0YXR1cykgPT0gMCkgewotCQkJCWlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDIpIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAwMCBNYnBzXG4iKTsKLQkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X2dtaWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgIHBvcnQsCi0JCQkJCQkJCSAgICAgZW5hYmxlKTsKLQkJCQl9IGVsc2UgaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMSkgewotCQkJCQlwcmludGsKLQkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCi0JCQkJCSAgICAgIiB0byAxMDAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIGlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDApIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1IgcmVhZGluZyAiCi0JCQkJCSAgICAgICAiUEhZIHN0YXR1cy4gSW52YWxpZCBzcGVlZC5cbiIpOwotCQkJCQlyZXN1bHQgPSAtMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIkVSUk9SIHJlYWRpbmcgUEhZIHN0YXR1cy5cbiIpOwotCQkJCXJlc3VsdCA9IC0xOwotCQkJfQotCi0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qCiAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KICAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCkBAIC02NDEsODYgKzUzMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKiBFbmFibGUgYSBHYkUgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9lbmFibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIGludCBwb3J0LCBuZXR4ZW5fbml1X2diZV9pZm1vZGVfdCBtb2RlKQotewotCV9fdTMyIG1hY19jZmcwOwotCV9fdTMyIG1hY19jZmcxOwotCV9fdTMyIG1paV9jZmc7Ci0KLQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9zb2Z0X3Jlc2V0KG1hY19jZmcwKTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9lbmFibGVfdHgobWFjX2NmZzApOwotCW5ldHhlbl9nYl9lbmFibGVfcngobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF9yeF9mbG93Y3RsKG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfdHhfcmVzZXRfcGIobWFjX2NmZzApOwotCW5ldHhlbl9nYl9yeF9yZXNldF9wYihtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3R4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3J4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0KLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzEgPSAwOwotCW5ldHhlbl9nYl9zZXRfcHJlYW1ibGVsZW4obWFjX2NmZzEsIDB4Zik7Ci0JbmV0eGVuX2diX3NldF9kdXBsZXgobWFjX2NmZzEpOwotCW5ldHhlbl9nYl9zZXRfY3JjX2VuYWJsZShtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9wYWRzaG9ydChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9jaGVja2xlbmd0aChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9odWdlZnJhbWVzKG1hY19jZmcxKTsKLQotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfMTBfMTAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDEpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQkvKiBzZXQgbWlpIG1vZGUgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMSk7Ci0KLQl9IGVsc2UgaWYgKG1vZGUgPT0gTkVUWEVOX05JVV8xMDAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDIpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQkJLyogc2V0IGdtaWkgbW9kZSAqLwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfTUlJX01PREUgKwotCQkJCQkgICAgKHBvcnQgPDwgMyksIDApOwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFICsKLQkJCQkJICAgIChwb3J0IDw8IDMpLCAxKTsKLQl9Ci0JbWlpX2NmZyA9IDA7Ci0JbmV0eGVuX2diX3NldF9taWlfbWdtdF9jbG9ja3NlbGVjdChtaWlfY2ZnLCA3KTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT05GSUcocG9ydCksCi0JCQkJICAgJm1paV9jZmcsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQltYWNfY2ZnMCA9IDA7Ci0JbmV0eGVuX2diX2VuYWJsZV90eChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX2VuYWJsZV9yeChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF90eF9mbG93Y3RsKG1hY19jZmcwKTsKLQotCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkgICAmbWFjX2NmZzAsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qIERpc2FibGUgYSBHYkUgaW50ZXJmYWNlICovCiBpbnQgbmV0eGVuX25pdV9kaXNhYmxlX2diZV9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTg2OSwzOSArNjgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KLSAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gKi8KLWludCBuZXR4ZW5fbml1X3hnX21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKQotewotCWludCBwaHkgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCXUzMiBzdGF0aW9uaGlnaDsKLQl1MzIgc3RhdGlvbmxvdzsKLQl1OCB2YWxbOF07Ci0KLQlpZiAoYWRkciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocGh5ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEksCi0JCQkJICAmc3RhdGlvbmhpZ2gsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAotCQkJCSAgJnN0YXRpb25sb3csIDQpKQotCQlyZXR1cm4gLUVJTzsKLQkoKF9fbGUzMiAqKXZhbClbMV0gPSBjcHVfdG9fbGUzMihzdGF0aW9uaGlnaCk7Ci0JKChfX2xlMzIgKil2YWwpWzBdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmxvdyk7Ci0KLQltZW1jcHkoYWRkciwgdmFsICsgMiwgNik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTMyIG1vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAppbmRleCBiMjkzYWRjLi41MDE4MzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9fTklDX1BIQU5fUkVHX0hfCkBAIC05MCw2ICs5MSw3IEBACiAjZGVmaW5lIENSQl9SWF9MUk9fU1RBUlRfTlVNICAgICAgICBORVRYRU5fTklDX1JFRygweGMwKQogI2RlZmluZSBDUkJfTVBPUlRfTU9ERSAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjNCkJLyogTXVsdGlwb3J0IE1vZGUgKi8KICNkZWZpbmUgQ1JCX0NNRF9SSU5HX1NJWkUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzgpCisjZGVmaW5lIENSQl9ETUFfU0hJRlQgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGNjKQogI2RlZmluZSBDUkJfSU5UX1ZFQ1RPUiAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkNCkKICNkZWZpbmUgQ1JCX0NUWF9SRVNFVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZDgpCiAjZGVmaW5lIENSQl9IT1NUX1NUU19QUk9EICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAzMjM3NGExLi41MGMxMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMTExNSw2ICsxMTE1LDEzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzX21paShzdHJ1Y3Qgbml1ICpucCwgaW50ICpsaW5rX3VwX3ApCit7CisJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOworCWludCBlcnI7CisJaW50IGJtc3IsIGFkdmVydCwgY3RybDEwMDAsIHN0YXQxMDAwLCBscGEsIGJtY3IsIGVzdGF0dXM7CisJaW50IHN1cHBvcnRlZCwgYWR2ZXJ0aXNpbmcsIGFjdGl2ZV9zcGVlZCwgYWN0aXZlX2R1cGxleDsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1zciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKwlhZHZlcnQgPSBlcnI7CisKKwllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfTFBBKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJbHBhID0gZXJyOworCisJaWYgKGxpa2VseShibXNyICYgQk1TUl9FU1RBVEVOKSkgeworCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfRVNUQVRVUyk7CisJCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJCXJldHVybiBlcnI7CisJCWVzdGF0dXMgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0NUUkwxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJY3RybDEwMDAgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX1NUQVQxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJc3RhdDEwMDAgPSBlcnI7CisJfSBlbHNlCisJCWVzdGF0dXMgPSBjdHJsMTAwMCA9IHN0YXQxMDAwID0gMDsKKworCXN1cHBvcnRlZCA9IDA7CisJaWYgKGJtc3IgJiBCTVNSX0FORUdDQVBBQkxFKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJaWYgKGJtc3IgJiBCTVNSXzEwSEFMRikKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7CisJaWYgKGJtc3IgJiBCTVNSXzEwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGw7CisJaWYgKGJtc3IgJiBCTVNSXzEwMEhBTEYpCisJCXN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYm1zciAmIEJNU1JfMTAwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RIQUxGKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RGVUxMKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCWxwLT5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7CisKKwlhZHZlcnRpc2luZyA9IDA7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOworCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwlpZiAoY3RybDEwMDAgJiBBRFZFUlRJU0VfMTAwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGY7CisJaWYgKGN0cmwxMDAwICYgQURWRVJUSVNFXzEwMDBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCisJaWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7CisJCWludCBuZWcsIG5lZzEwMDA7CisKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMTsKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOworCisJCW5lZyA9IGFkdmVydCAmIGxwYTsKKwkJbmVnMTAwMCA9IChjdHJsMTAwMCA8PCAyKSAmIHN0YXQxMDAwOworCisJCWlmIChuZWcxMDAwICYgKExQQV8xMDAwRlVMTCB8IExQQV8xMDAwSEFMRikpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChuZWcgJiBMUEFfMTAwKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTAwOworCQllbHNlIGlmIChuZWcgJiAoTFBBXzEwSEFMRiB8IExQQV8xMEZVTEwpKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisJCWVsc2UKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisKKwkJaWYgKChuZWcxMDAwICYgTFBBXzEwMDBGVUxMKSB8fCAobmVnICYgTFBBX0RVUExFWCkpCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UgaWYgKGFjdGl2ZV9zcGVlZCAhPSBTUEVFRF9JTlZBTElEKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9IQUxGOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMDsKKworCQlpZiAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwMCkgJiYgIShibWNyICYgQk1DUl9TUEVFRDEwMCkpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChibWNyICYgQk1DUl9TUEVFRDEwMCkKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZWxzZQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisKKwkJaWYgKGJtY3IgJiBCTUNSX0ZVTExEUExYKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJfQorCisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyA9IGFkdmVydGlzaW5nOworCWxwLT5hY3RpdmVfc3BlZWQgPSBhY3RpdmVfc3BlZWQ7CisJbHAtPmFjdGl2ZV9kdXBsZXggPSBhY3RpdmVfZHVwbGV4OworCSpsaW5rX3VwX3AgPSAhIShibXNyICYgQk1TUl9MU1RBVFVTKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnX3JnbWlpKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKIHsKIAlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CkBAIC0xMTcxLDYgKzEyOTUsMjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKK3sKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwllcnIgPSBsaW5rX3N0YXR1c19taWkobnAsIGxpbmtfdXBfcCk7CisJbHAtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGJjbTg3MDRfcmVzZXQoc3RydWN0IG5pdSAqbnApCiB7CiAJaW50IGVyciwgbGltaXQ7CkBAIC0xNjc2LDM5ICsxODE2LDg4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIFhYWCBjb25maWd1cmFibGUgWFhYICovCi0JLyogWFhYIGZvciBub3cgZG9uJ3QgYWR2ZXJ0aXNlIGhhbGYtZHVwbGV4IG9yIGFzeW0gcGF1c2UuLi4gWFhYICovCi0JYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOwotCWlmIChibXNyICYgQk1TUl8xMEZVTEwpCi0JCWFkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCWlmIChibXNyICYgQk1TUl8xMDBGVUxMKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7Ci0JZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlpZiAobHAtPmF1dG9uZWcpIHsKKwkJdTE2IGN0cmwxMDAwOwogCi0JaWYgKGJtc3IgJiBCTVNSX0VTVEFURU4pIHsKLQkJdTE2IGN0cmwxMDAwID0gMDsKLQotCQlpZiAoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpCi0JCQljdHJsMTAwMCB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7Ci0JCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikpCisJCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKKwkJaWYgKChibXNyICYgQk1TUl8xMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7CisJCWlmICgoYm1zciAmIEJNU1JfMTAwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKSkKKwkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKKwkJZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCisJCWlmIChsaWtlbHkoYm1zciAmIEJNU1JfRVNUQVRFTikpIHsKKwkJCWN0cmwxMDAwID0gMDsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwSEFMRjsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwRlVMTDsKKwkJCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLAorCQkJCQlNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJfSBlbHNlIHsKKwkJLyogIWxwLT5hdXRvbmVnICovCisJCWludCBmdWxsZHB4OworCisJCWlmIChscC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisJCQlmdWxsZHB4ID0gMTsKKwkJfSBlbHNlIGlmIChscC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJZnVsbGRweCA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChscC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJLyogaWYgWC1mdWxsIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLCBvcgorCQkJICAgWC1oYWxmIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLi4uICovCisJCQlpZiAoKGZ1bGxkcHggJiYgIShlc3RhdCAmIEVTVEFUVVNfMTAwMF9URlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDA7CisJCX0gZWxzZSBpZiAobHAtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwRlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwSEFMRikpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOworCQl9IGVsc2UgaWYgKGxwLT5zcGVlZCA9PSBTUEVFRF8xMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTBGVUxMKSkgfHwKKwkJCQkoIWZ1bGxkcHggJiYgIShibXNyICYgQk1TUl8xMEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAogCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgYm1jcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorI2lmIDAKIAllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKwogCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLSNpZiAwCisJYm1zciA9IGVycjsKKwogCXByX2luZm8oUEZYICJQb3J0ICV1IGFmdGVyIE1JSSBpbml0IGJtY3JbJTA0eF0gYm1zclslMDR4XVxuIiwKIAkJbnAtPnBvcnQsIGJtY3IsIGJtc3IpOwogI2VuZGlmCkBAIC0yMDU0LDg3ICsyMjQzLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKLXsKLQlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7Ci0JdTE2IGN1cnJlbnRfc3BlZWQsIGJtc3I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBjdXJyZW50X2R1cGxleDsKLQlpbnQgZXJyLCBsaW5rX3VwOwotCi0JbGlua191cCA9IDA7Ci0JY3VycmVudF9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7Ci0JY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAobnAtPmxpbmtfY29uZmlnLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfRElTQUJMRUQpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWJtc3IgPSBlcnI7Ci0JaWYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpIHsKLQkJdTE2IGFkdiwgbHBhLCBjb21tb24sIGVzdGF0OwotCi0JCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlhZHYgPSBlcnI7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0xQQSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWxwYSA9IGVycjsKLQotCQljb21tb24gPSBhZHYgJiBscGE7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0VTVEFUVVMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQllc3RhdCA9IGVycjsKLQotCQlsaW5rX3VwID0gMTsKLQkJaWYgKGVzdGF0ICYgKEVTVEFUVVNfMTAwMF9URlVMTCB8IEVTVEFUVVNfMTAwMF9USEFMRikpIHsKLQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJaWYgKGVzdGF0ICYgRVNUQVRVU18xMDAwX1RGVUxMKQotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQllbHNlCi0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJfSBlbHNlIHsKLQkJCWlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwQkFTRTQpIHsKLQkJCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTAwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UgaWYgKGNvbW1vbiAmIEFEVkVSVElTRV8xMDBGVUxMKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwSEFMRikgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCX0gZWxzZSBpZiAoY29tbW9uICYgQURWRVJUSVNFXzEwRlVMTCkgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTBIQUxGKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UKLQkJCQlsaW5rX3VwID0gMDsKLQkJfQotCX0KLQlscC0+YWN0aXZlX3NwZWVkID0gY3VycmVudF9zcGVlZDsKLQlscC0+YWN0aXZlX2R1cGxleCA9IGN1cnJlbnRfZHVwbGV4OwotCWVyciA9IDA7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JKmxpbmtfdXBfcCA9IGxpbmtfdXA7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBuaXVfbGlua19zdGF0dXMoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQogewogCWNvbnN0IHN0cnVjdCBuaXVfcGh5X29wcyAqb3BzID0gbnAtPnBoeV9vcHM7CkBAIC0yNDU2LDcgKzI1NjQsNyBAQAogCiAJCWNhc2UgTklVX0ZMQUdTXzEwRzoKIAkJCS8qIDEwRyBjb3BwZXIgKi8KLQkJCXRwID0gJnBoeV90ZW1wbGF0ZV8xZ19jb3BwZXI7CisJCQl0cCA9ICZwaHlfdGVtcGxhdGVfMTBnX2NvcHBlcjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTklVX0ZMQUdTX0ZJQkVSOgpAQCAtMjg3Myw3ICsyOTgxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKIHN0YXRpYyBpbnQgdGNhbV91c2VyX2lwX2NsYXNzX3NldChzdHJ1Y3Qgbml1ICpucCwgdW5zaWduZWQgbG9uZyBjbGFzcywKIAkJCQkgIGludCBpcHY2LCB1NjQgcHJvdG9jb2xfaWQsCiAJCQkJICB1NjQgdG9zX21hc2ssIHU2NCB0b3NfdmFsKQpAQCAtMjkwMSw3ICszMDA4LDYgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgdGNhbV9lYXJseV9pbml0KHN0cnVjdCBuaXUgKm5wKQogewpAQCAtMzE2OCw2ICszMjc0LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEVudHJpZXMgZm9yIHRoZSBwb3J0cyBhcmUgaW50ZXJsZWF2ZWQgaW4gdGhlIFRDQU0gKi8KK3N0YXRpYyB1MTYgdGNhbV9nZXRfaW5kZXgoc3RydWN0IG5pdSAqbnAsIHUxNiBpZHgpCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJaWYgKGlkeCA+PSAobnAtPmNsYXMudGNhbV9zeiAtIDEpKQorCQlpZHggPSAwOworCXJldHVybiAobnAtPmNsYXMudGNhbV90b3AgKyAoKGlkeCsxKSAqIG5wLT5wYXJlbnQtPm51bV9wb3J0cykpOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3NpemUoc3RydWN0IG5pdSAqbnApCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJcmV0dXJuIG5wLT5jbGFzLnRjYW1fc3ogLSAxOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3ZhbGlkX2VudHJ5X2NudChzdHJ1Y3Qgbml1ICpucCkKK3sKKwkvKiBPbmUgZW50cnkgcmVzZXJ2ZWQgZm9yIElQIGZyYWdtZW50IHJ1bGUgKi8KKwlyZXR1cm4gbnAtPmNsYXMudGNhbV92YWxpZF9lbnRyaWVzIC0gMTsKK30KKwogc3RhdGljIHZvaWQgbml1X3J4X3NrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICAgICB1MzIgb2Zmc2V0LCB1MzIgc2l6ZSkKIHsKQEAgLTQ4OTEsOCArNTAxOCw3IEBACiAJc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cDsKIAlpbnQgaW5kZXgsIGVycjsKIAotCS8qIFhYWCBmaXggdGhpcyBhbGxvY2F0aW9uIHNjaGVtZSBYWFggKi8KLQlpbmRleCA9IGNwLT50Y2FtX2luZGV4OworCWluZGV4ID0gY3AtPnRjYW1fdG9wOwogCXRwID0gJnBhcmVudC0+dGNhbVtpbmRleF07CiAKIAkvKiBOb3RlIHRoYXQgdGhlIG5vcG9ydCBiaXQgaXMgdGhlIHNhbWUgaW4gYm90aCBpcHY0IGFuZApAQCAtNDkwOSw2ICs1MDM1LDggQEAKIAllcnIgPSB0Y2FtX2Fzc29jX3dyaXRlKG5wLCBpbmRleCwgdHAtPmFzc29jX2RhdGEpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisJdHAtPnZhbGlkID0gMTsKKwljcC0+dGNhbV92YWxpZF9lbnRyaWVzKys7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMTIsMTAgKzUzNDAsMTAgQEAKIAlpZiAobnAtPmZsYWdzICYgTklVX0ZMQUdTXzEwRykgewogCQl2YWwgfD0gWE1BQ19DT05GSUdfTU9ERV9YR01JSTsKIAl9IGVsc2UgewotCQlpZiAobHAtPmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDApCi0JCQl2YWwgfD0gWE1BQ19DT05GSUdfTU9ERV9NSUk7Ci0JCWVsc2UKKwkJaWYgKGxwLT5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCkKIAkJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX0dNSUk7CisJCWVsc2UKKwkJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX01JSTsKIAl9CiAKIAludzY0X21hYyhYTUFDX0NPTkZJRywgdmFsKTsKQEAgLTY3MDMsMTcgKzY4MzEsMjcgQEAKIAltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwogCWNtZC0+cGh5X2FkZHJlc3MgPSBucC0+cGh5X2FkZHI7CiAJY21kLT5zdXBwb3J0ZWQgPSBscC0+c3VwcG9ydGVkOwotCWNtZC0+YWR2ZXJ0aXNpbmcgPSBscC0+YWR2ZXJ0aXNpbmc7Ci0JY21kLT5hdXRvbmVnID0gbHAtPmF1dG9uZWc7CisJY21kLT5hZHZlcnRpc2luZyA9IGxwLT5hY3RpdmVfYWR2ZXJ0aXNpbmc7CisJY21kLT5hdXRvbmVnID0gbHAtPmFjdGl2ZV9hdXRvbmVnOwogCWNtZC0+c3BlZWQgPSBscC0+YWN0aXZlX3NwZWVkOwogCWNtZC0+ZHVwbGV4ID0gbHAtPmFjdGl2ZV9kdXBsZXg7CisJY21kLT5wb3J0ID0gKG5wLT5mbGFncyAmIE5JVV9GTEFHU19GSUJFUikgPyBQT1JUX0ZJQlJFIDogUE9SVF9UUDsKKwljbWQtPnRyYW5zY2VpdmVyID0gKG5wLT5mbGFncyAmIE5JVV9GTEFHU19YQ1ZSX1NFUkRFUykgPworCQlYQ1ZSX0VYVEVSTkFMIDogWENWUl9JTlRFUk5BTDsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG5pdV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKKworCWxwLT5hZHZlcnRpc2luZyA9IGNtZC0+YWR2ZXJ0aXNpbmc7CisJbHAtPnNwZWVkID0gY21kLT5zcGVlZDsKKwlscC0+ZHVwbGV4ID0gY21kLT5kdXBsZXg7CisJbHAtPmF1dG9uZWcgPSBjbWQtPmF1dG9uZWc7CisJcmV0dXJuIG5pdV9pbml0X2xpbmsobnApOwogfQogCiBzdGF0aWMgdTMyIG5pdV9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTY3MjgsNiArNjg2NiwxNiBAQAogCW5wLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKK3N0YXRpYyBpbnQgbml1X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobnAtPmxpbmtfY29uZmlnLmF1dG9uZWcpCisJCXJldHVybiBuaXVfaW5pdF9saW5rKG5wKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5pdV9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTY3NzksNiArNjkyNyw3NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBuaXVfZXRoZmxvd190b19sM3Byb3RvKGludCBmbG93X3R5cGUsIHU4ICpwaWQpCit7CisJc3dpdGNoIChmbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVENQX1Y2X0ZMT1c6CisJCSpwaWQgPSBJUFBST1RPX1RDUDsKKwkJYnJlYWs7CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFVEUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19VRFA7CisJCWJyZWFrOworCWNhc2UgU0NUUF9WNF9GTE9XOgorCWNhc2UgU0NUUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19TQ1RQOworCQlicmVhazsKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBBSF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19BSDsKKwkJYnJlYWs7CisJY2FzZSBFU1BfVjRfRkxPVzoKKwljYXNlIEVTUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19FU1A7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpwaWQgPSAwOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbml1X2NsYXNzX3RvX2V0aGZsb3codTY0IGNsYXNzLCBpbnQgKmZsb3dfdHlwZSkKK3sKKwlzd2l0Y2ggKGNsYXNzKSB7CisJY2FzZSBDTEFTU19DT0RFX1RDUF9JUFY0OgorCQkqZmxvd190eXBlID0gVENQX1Y0X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9VRFBfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFVEUF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfQUhfRVNQX0lQVjQ6CisJCSpmbG93X3R5cGUgPSBBSF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfU0NUUF9JUFY0OgorCQkqZmxvd190eXBlID0gU0NUUF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVENQX0lQVjY6CisJCSpmbG93X3R5cGUgPSBUQ1BfVjZfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1VEUF9JUFY2OgorCQkqZmxvd190eXBlID0gVURQX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNjoKKwkJKmZsb3dfdHlwZSA9IEFIX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9TQ1RQX0lQVjY6CisJCSpmbG93X3R5cGUgPSBTQ1RQX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0cxOgorCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0cyOgorCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0czOgorCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0c0OgorCQkqZmxvd190eXBlID0gSVBfVVNFUl9GTE9XOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBuaXVfZXRoZmxvd190b19jbGFzcyhpbnQgZmxvd190eXBlLCB1NjQgKmNsYXNzKQogewogCXN3aXRjaCAoZmxvd190eXBlKSB7CkBAIC02Nzg4LDcgKzcwMDUsOCBAQAogCWNhc2UgVURQX1Y0X0ZMT1c6CiAJCSpjbGFzcyA9IENMQVNTX0NPREVfVURQX0lQVjQ7CiAJCWJyZWFrOwotCWNhc2UgQUhfRVNQX1Y0X0ZMT1c6CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgRVNQX1Y0X0ZMT1c6CiAJCSpjbGFzcyA9IENMQVNTX0NPREVfQUhfRVNQX0lQVjQ7CiAJCWJyZWFrOwogCWNhc2UgU0NUUF9WNF9GTE9XOgpAQCAtNjgwMCw3ICs3MDE4LDggQEAKIAljYXNlIFVEUF9WNl9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY2OwogCQlicmVhazsKLQljYXNlIEFIX0VTUF9WNl9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwljYXNlIEVTUF9WNl9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY2OwogCQlicmVhazsKIAljYXNlIFNDVFBfVjZfRkxPVzoKQEAgLTY4MTcsOCArNzAzNiw2IEBACiB7CiAJdTY0IGV0aGZsb3cgPSAwOwogCi0JaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfUE9SVCkKLQkJZXRoZmxvdyB8PSBSWEhfREVWX1BPUlQ7CiAJaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfTDJEQSkKIAkJZXRoZmxvdyB8PSBSWEhfTDJEQTsKIAlpZiAoZmxvd19rZXkgJiBGTE9XX0tFWV9WTEFOKQpAQCAtNjg0Miw4ICs3MDU5LDYgQEAKIHsKIAl1NjQga2V5ID0gMDsKIAotCWlmIChldGhmbG93ICYgUlhIX0RFVl9QT1JUKQotCQlrZXkgfD0gRkxPV19LRVlfUE9SVDsKIAlpZiAoZXRoZmxvdyAmIFJYSF9MMkRBKQogCQlrZXkgfD0gRkxPV19LRVlfTDJEQTsKIAlpZiAoZXRoZmxvdyAmIFJYSF9WTEFOKQpAQCAtNjg2NSw0MSArNzA4MCwyNzkgQEAKIAogfQogCi1zdGF0aWMgaW50IG5pdV9nZXRfaGFzaF9vcHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCitzdGF0aWMgaW50IG5pdV9nZXRfaGFzaF9vcHRzKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKQogewotCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1NjQgY2xhc3M7CiAKLQljbWQtPmRhdGEgPSAwOworCW5mYy0+ZGF0YSA9IDA7CiAKLQlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKGNtZC0+Zmxvd190eXBlLCAmY2xhc3MpKQorCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MobmZjLT5mbG93X3R5cGUsICZjbGFzcykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0gQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSAmCiAJICAgIFRDQU1fS0VZX0RJU0MpCi0JCWNtZC0+ZGF0YSA9IFJYSF9ESVNDQVJEOworCQluZmMtPmRhdGEgPSBSWEhfRElTQ0FSRDsKIAllbHNlCi0KLQkJY21kLT5kYXRhID0gbml1X2Zsb3drZXlfdG9fZXRoZmxvdyhucC0+cGFyZW50LT5mbG93X2tleVtjbGFzcyAtCisJCW5mYy0+ZGF0YSA9IG5pdV9mbG93a2V5X3RvX2V0aGZsb3cobnAtPnBhcmVudC0+Zmxvd19rZXlbY2xhc3MgLQogCQkJCQkJICAgICAgQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbml1X3NldF9oYXNoX29wdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKK3N0YXRpYyB2b2lkIG5pdV9nZXRfaXA0ZnNfZnJvbV90Y2FtX2tleShzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwLAorCQkJCQlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCkKK3sKKworCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPSAodHAtPmtleVszXSAmIFRDQU1fVjRLRVkzX1NBRERSKSA+PgorCQlUQ0FNX1Y0S0VZM19TQUREUl9TSElGVDsKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ID0gKHRwLT5rZXlbM10gJiBUQ0FNX1Y0S0VZM19EQUREUikgPj4KKwkJVENBTV9WNEtFWTNfREFERFJfU0hJRlQ7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9ICh0cC0+a2V5X21hc2tbM10gJiBUQ0FNX1Y0S0VZM19TQUREUikgPj4KKwkJVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9ICh0cC0+a2V5X21hc2tbM10gJiBUQ0FNX1Y0S0VZM19EQUREUikgPj4KKwkJVENBTV9WNEtFWTNfREFERFJfU0hJRlQ7CisKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0c3JjID0KKwkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyk7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9CisJCWNwdV90b19iZTMyKGZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRkc3QgPQorCQljcHVfdG9fYmUzMihmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwlmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ID0KKwkJY3B1X3RvX2JlMzIoZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMudG9zID0gKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9UT1MpID4+CisJCVRDQU1fVjRLRVkyX1RPU19TSElGVDsKKwlmc3AtPm1fdS50Y3BfaXA0X3NwZWMudG9zID0gKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1RPUykgPj4KKwkJVENBTV9WNEtFWTJfVE9TX1NISUZUOworCisJc3dpdGNoIChmc3AtPmZsb3dfdHlwZSkgeworCWNhc2UgVENQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMgPQorCQkJKCh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQkgVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQpID4+IDE2OworCQlmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQkoKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCSBUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVCkgJiAweGZmZmY7CisJCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCSgodHAtPmtleV9tYXNrWzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQkgVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQpID4+IDE2OworCQlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQkoKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSAmIDB4ZmZmZjsKKworCQlmc3AtPmhfdS50Y3BfaXA0X3NwZWMucHNyYyA9CisJCQljcHVfdG9fYmUxNihmc3AtPmhfdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5wZHN0ID0KKwkJCWNwdV90b19iZTE2KGZzcC0+aF91LnRjcF9pcDRfc3BlYy5wZHN0KTsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBzcmMgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQljcHVfdG9fYmUxNihmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCWJyZWFrOworCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgorCQlmc3AtPmhfdS5haF9pcDRfc3BlYy5zcGkgPQorCQkJKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCVRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUOworCQlmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkgPQorCQkJKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQ7CisKKwkJZnNwLT5oX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCWNwdV90b19iZTMyKGZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSk7CisJCWZzcC0+bV91LmFoX2lwNF9zcGVjLnNwaSA9CisJCQljcHVfdG9fYmUzMihmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkpOworCQlicmVhazsKKwljYXNlIElQX1VTRVJfRkxPVzoKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCVRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUOworCQlmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyA9CisJCQkodHAtPmtleV9tYXNrWzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKworCQlmc3AtPmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyA9CisJCQljcHVfdG9fYmUzMihmc3AtPmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisJCWZzcC0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzID0KKwkJCWNwdV90b19iZTMyKGZzcC0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKTsKKworCQlmc3AtPmhfdS51c3JfaXA0X3NwZWMucHJvdG8gPQorCQkJKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QUk9UTykgPj4KKwkJCVRDQU1fVjRLRVkyX1BST1RPX1NISUZUOworCQlmc3AtPm1fdS51c3JfaXA0X3NwZWMucHJvdG8gPQorCQkJKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BST1RPKSA+PgorCQkJVENBTV9WNEtFWTJfUFJPVE9fU0hJRlQ7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLmlwX3ZlciA9IEVUSF9SWF9ORkNfSVA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbml1X2dldF9ldGh0b29sX3RjYW1fZW50cnkoc3RydWN0IG5pdSAqbnAsCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnNwID0gJm5mYy0+ZnM7CisJdTE2IGlkeDsKKwl1NjQgY2xhc3M7CisJaW50IHJldCA9IDA7CisKKwlpZHggPSB0Y2FtX2dldF9pbmRleChucCwgKHUxNiluZmMtPmZzLmxvY2F0aW9uKTsKKworCXRwID0gJnBhcmVudC0+dGNhbVtpZHhdOworCWlmICghdHAtPnZhbGlkKSB7CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgZW50cnkgWyVkXSBpbnZhbGlkIGZvciBpZHhbJWRdXG4iLAorCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCAodTE2KW5mYy0+ZnMubG9jYXRpb24sIGlkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGZpbGwgdGhlIGZsb3cgc3BlYyBlbnRyeSAqLworCWNsYXNzID0gKHRwLT5rZXlbMF0gJiBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFKSA+PgorCQlUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFX1NISUZUOworCXJldCA9IG5pdV9jbGFzc190b19ldGhmbG93KGNsYXNzLCAmZnNwLT5mbG93X3R5cGUpOworCisJaWYgKHJldCA8IDApIHsKKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBuaXVfY2xhc3NfdG9fZXRoZmxvdyBmYWlsZWRcbiIsCisJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZnNwLT5mbG93X3R5cGUgPT0gQUhfVjRfRkxPVyB8fCBmc3AtPmZsb3dfdHlwZSA9PSBBSF9WNl9GTE9XKSB7CisJCXUzMiBwcm90byA9ICh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUFJPVE8pID4+CisJCQlUQ0FNX1Y0S0VZMl9QUk9UT19TSElGVDsKKwkJaWYgKHByb3RvID09IElQUFJPVE9fRVNQKSB7CisJCQlpZiAoZnNwLT5mbG93X3R5cGUgPT0gQUhfVjRfRkxPVykKKwkJCQlmc3AtPmZsb3dfdHlwZSA9IEVTUF9WNF9GTE9XOworCQkJZWxzZQorCQkJCWZzcC0+Zmxvd190eXBlID0gRVNQX1Y2X0ZMT1c7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGZzcC0+Zmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFVEUF9WNF9GTE9XOgorCWNhc2UgU0NUUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgorCQluaXVfZ2V0X2lwNGZzX2Zyb21fdGNhbV9rZXkodHAsIGZzcCk7CisJCWJyZWFrOworCWNhc2UgVENQX1Y2X0ZMT1c6CisJY2FzZSBVRFBfVjZfRkxPVzoKKwljYXNlIFNDVFBfVjZfRkxPVzoKKwljYXNlIEFIX1Y2X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIElQX1VTRVJfRkxPVzoKKwkJbml1X2dldF9pcDRmc19mcm9tX3RjYW1fa2V5KHRwLCBmc3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAodHAtPmFzc29jX2RhdGEgJiBUQ0FNX0FTU09DREFUQV9ESVNDKQorCQlmc3AtPnJpbmdfY29va2llID0gUlhfQ0xTX0ZMT1dfRElTQzsKKwllbHNlCisJCWZzcC0+cmluZ19jb29raWUgPSAodHAtPmFzc29jX2RhdGEgJiBUQ0FNX0FTU09DREFUQV9PRkZTRVQpID4+CisJCQlUQ0FNX0FTU09DREFUQV9PRkZTRVRfU0hJRlQ7CisKKwkvKiBwdXQgdGhlIHRjYW0gc2l6ZSBoZXJlICovCisJbmZjLT5kYXRhID0gdGNhbV9nZXRfc2l6ZShucCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfZ2V0X2V0aHRvb2xfdGNhbV9hbGwoc3RydWN0IG5pdSAqbnAsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMsCisJCQkJICAgIHUzMiAqcnVsZV9sb2NzKQoreworCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OworCXN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHA7CisJaW50IGksIGlkeCwgY250OworCXUxNiBuX2VudHJpZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCisJLyogcHV0IHRoZSB0Y2FtIHNpemUgaGVyZSAqLworCW5mYy0+ZGF0YSA9IHRjYW1fZ2V0X3NpemUobnApOworCisJbml1X2xvY2tfcGFyZW50KG5wLCBmbGFncyk7CisJbl9lbnRyaWVzID0gbmZjLT5ydWxlX2NudDsKKwlmb3IgKGNudCA9IDAsIGkgPSAwOyBpIDwgbmZjLT5kYXRhOyBpKyspIHsKKwkJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsIGkpOworCQl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKwkJaWYgKCF0cC0+dmFsaWQpCisJCQljb250aW51ZTsKKwkJcnVsZV9sb2NzW2NudF0gPSBpOworCQljbnQrKzsKKwl9CisJbml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCWlmIChuX2VudHJpZXMgIT0gY250KSB7CisJCS8qIHByaW50IHdhcm5pbmcsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfZ2V0X2V0aHRvb2xfdGNhbV9hbGwsICIKKwkJCSJuX2VudHJpZXNbJWRdICE9IGNudFslZF0hISFcblxuIiwKKwkJCW5wLT5wYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBuX2VudHJpZXMsIGNudCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbml1X2dldF9uZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwKKwkJICAgICAgIHZvaWQgKnJ1bGVfbG9jcykKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJY2FzZSBFVEhUT09MX0dSWEZIOgorCQlyZXQgPSBuaXVfZ2V0X2hhc2hfb3B0cyhucCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCQljbWQtPmRhdGEgPSBucC0+bnVtX3J4X3JpbmdzOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6CisJCWNtZC0+cnVsZV9jbnQgPSB0Y2FtX2dldF92YWxpZF9lbnRyeV9jbnQobnApOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRToKKwkJcmV0ID0gbml1X2dldF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoKKwkJcmV0ID0gbml1X2dldF9ldGh0b29sX3RjYW1fYWxsKG5wLCBjbWQsICh1MzIgKilydWxlX2xvY3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5pdV9zZXRfaGFzaF9vcHRzKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKQorewogCXU2NCBjbGFzczsKIAl1NjQgZmxvd19rZXkgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKGNtZC0+Zmxvd190eXBlLCAmY2xhc3MpKQorCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MobmZjLT5mbG93X3R5cGUsICZjbGFzcykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNsYXNzIDwgQ0xBU1NfQ09ERV9VU0VSX1BST0cxIHx8CiAJICAgIGNsYXNzID4gQ0xBU1NfQ09ERV9TQ1RQX0lQVjYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNtZC0+ZGF0YSAmIFJYSF9ESVNDQVJEKSB7CisJaWYgKG5mYy0+ZGF0YSAmIFJYSF9ESVNDQVJEKSB7CiAJCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOwogCQlmbG93X2tleSA9IG5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0KIAkJCQkJICAgICAgIENMQVNTX0NPREVfVVNFUl9QUk9HMV07CkBAIC02OTI0LDcgKzczNzcsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFuaXVfZXRoZmxvd190b19mbG93a2V5KGNtZC0+ZGF0YSwgJmZsb3dfa2V5KSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2Zsb3drZXkobmZjLT5kYXRhLCAmZmxvd19rZXkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOwpAQCAtNjkzNSw2ICs3Mzg4LDMzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBuaXVfZ2V0X3RjYW1rZXlfZnJvbV9pcDRmcyhzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCwKKwkJCQkgICAgICAgc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cCwKKwkJCQkgICAgICAgaW50IGwyX3JkY190YWIsIHU2NCBjbGFzcykKK3sKKwl1OCBwaWQgPSAwOworCXUzMiBzaXAsIGRpcCwgc2lwbSwgZGlwbSwgc3BpLCBzcGltOworCXUxNiBzcG9ydCwgZHBvcnQsIHNwbSwgZHBtOworCisJc2lwID0gYmUzMl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyk7CisJc2lwbSA9IGJlMzJfdG9fY3B1KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCWRpcCA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRkc3QpOworCWRpcG0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKworCXRwLT5rZXlbMF0gPSBjbGFzcyA8PCBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFX1NISUZUOworCXRwLT5rZXlfbWFza1swXSA9IFRDQU1fVjRLRVkwX0NMQVNTX0NPREU7CisJdHAtPmtleVsxXSA9ICh1NjQpbDJfcmRjX3RhYiA8PCBUQ0FNX1Y0S0VZMV9MMlJEQ05VTV9TSElGVDsKKwl0cC0+a2V5X21hc2tbMV0gPSBUQ0FNX1Y0S0VZMV9MMlJEQ05VTTsKKworCXRwLT5rZXlbM10gPSAodTY0KXNpcCA8PCBUQ0FNX1Y0S0VZM19TQUREUl9TSElGVDsKKwl0cC0+a2V5WzNdIHw9IGRpcDsKKworCXRwLT5rZXlfbWFza1szXSA9ICh1NjQpc2lwbSA8PCBUQ0FNX1Y0S0VZM19TQUREUl9TSElGVDsKKwl0cC0+a2V5X21hc2tbM10gfD0gZGlwbTsKKworCXRwLT5rZXlbMl0gfD0gKCh1NjQpZnNwLT5oX3UudGNwX2lwNF9zcGVjLnRvcyA8PAorCQkgICAgICAgVENBTV9WNEtFWTJfVE9TX1NISUZUKTsKKwl0cC0+a2V5X21hc2tbMl0gfD0gKCh1NjQpZnNwLT5tX3UudGNwX2lwNF9zcGVjLnRvcyA8PAorCQkJICAgIFRDQU1fVjRLRVkyX1RPU19TSElGVCk7CisJc3dpdGNoIChmc3AtPmZsb3dfdHlwZSkgeworCWNhc2UgVENQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwkJc3BvcnQgPSBiZTE2X3RvX2NwdShmc3AtPmhfdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCXNwbSA9IGJlMTZfdG9fY3B1KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjKTsKKwkJZHBvcnQgPSBiZTE2X3RvX2NwdShmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCWRwbSA9IGJlMTZfdG9fY3B1KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5wZHN0KTsKKworCQl0cC0+a2V5WzJdIHw9ICgoKHU2NClzcG9ydCA8PCAxNikgfCBkcG9ydCk7CisJCXRwLT5rZXlfbWFza1syXSB8PSAoKCh1NjQpc3BtIDw8IDE2KSB8IGRwbSk7CisJCW5pdV9ldGhmbG93X3RvX2wzcHJvdG8oZnNwLT5mbG93X3R5cGUsICZwaWQpOworCQlicmVhazsKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJc3BpID0gYmUzMl90b19jcHUoZnNwLT5oX3UuYWhfaXA0X3NwZWMuc3BpKTsKKwkJc3BpbSA9IGJlMzJfdG9fY3B1KGZzcC0+bV91LmFoX2lwNF9zcGVjLnNwaSk7CisKKwkJdHAtPmtleVsyXSB8PSBzcGk7CisJCXRwLT5rZXlfbWFza1syXSB8PSBzcGltOworCQluaXVfZXRoZmxvd190b19sM3Byb3RvKGZzcC0+Zmxvd190eXBlLCAmcGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCXNwaSA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKTsKKwkJc3BpbSA9IGJlMzJfdG9fY3B1KGZzcC0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKTsKKworCQl0cC0+a2V5WzJdIHw9IHNwaTsKKwkJdHAtPmtleV9tYXNrWzJdIHw9IHNwaW07CisJCXBpZCA9IGZzcC0+aF91LnVzcl9pcDRfc3BlYy5wcm90bzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdHAtPmtleVsyXSB8PSAoKHU2NClwaWQgPDwgVENBTV9WNEtFWTJfUFJPVE9fU0hJRlQpOworCWlmIChwaWQpIHsKKwkJdHAtPmtleV9tYXNrWzJdIHw9IFRDQU1fVjRLRVkyX1BST1RPOworCX0KK30KKworc3RhdGljIGludCBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeShzdHJ1Y3Qgbml1ICpucCwKKwkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKQoreworCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OworCXN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHA7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3AgPSAmbmZjLT5mczsKKwlzdHJ1Y3Qgbml1X3JkY190YWJsZXMgKnJkY190YWJsZSA9ICZwYXJlbnQtPnJkY19ncm91cF9jZmdbbnAtPnBvcnRdOworCWludCBsMl9yZGNfdGFibGUgPSByZGNfdGFibGUtPmZpcnN0X3RhYmxlX251bTsKKwl1MTYgaWR4OworCXU2NCBjbGFzczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIsIHJldDsKKworCXJldCA9IDA7CisKKwlpZHggPSBuZmMtPmZzLmxvY2F0aW9uOworCWlmIChpZHggPj0gdGNhbV9nZXRfc2l6ZShucCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZzcC0+Zmxvd190eXBlID09IElQX1VTRVJfRkxPVykgeworCQlpbnQgaTsKKwkJaW50IGFkZF91c3JfY2xzID0gMDsKKwkJaW50IGlwdjYgPSAwOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYyAqdXNwZWMgPSAmZnNwLT5oX3UudXNyX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYyAqdW1hc2sgPSAmZnNwLT5tX3UudXNyX2lwNF9zcGVjOworCisJCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJCWZvciAoaSA9IDA7IGkgPCBOSVVfTDNfUFJPR19DTFM7IGkrKykgeworCQkJaWYgKHBhcmVudC0+bDNfY2xzW2ldKSB7CisJCQkJaWYgKHVzcGVjLT5wcm90byA9PSBwYXJlbnQtPmwzX2Nsc19waWRbaV0pIHsKKwkJCQkJY2xhc3MgPSBwYXJlbnQtPmwzX2Nsc1tpXTsKKwkJCQkJcGFyZW50LT5sM19jbHNfcmVmY250W2ldKys7CisJCQkJCWFkZF91c3JfY2xzID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBQcm9ncmFtIG5ldyB1c2VyIElQIGNsYXNzICovCisJCQkJc3dpdGNoIChpKSB7CisJCQkJY2FzZSAwOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HMjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HMzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HNDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICh1c3BlYy0+aXBfdmVyID09IEVUSF9SWF9ORkNfSVA2KQorCQkJCQlpcHY2ID0gMTsKKwkJCQlyZXQgPSB0Y2FtX3VzZXJfaXBfY2xhc3Nfc2V0KG5wLCBjbGFzcywgaXB2NiwKKwkJCQkJCQkgICAgIHVzcGVjLT5wcm90bywKKwkJCQkJCQkgICAgIHVzcGVjLT50b3MsCisJCQkJCQkJICAgICB1bWFzay0+dG9zKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dDsKKworCQkJCXJldCA9IHRjYW1fdXNlcl9pcF9jbGFzc19lbmFibGUobnAsIGNsYXNzLCAxKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dDsKKwkJCQlwYXJlbnQtPmwzX2Nsc1tpXSA9IGNsYXNzOworCQkJCXBhcmVudC0+bDNfY2xzX3BpZFtpXSA9IHVzcGVjLT5wcm90bzsKKwkJCQlwYXJlbnQtPmwzX2Nsc19yZWZjbnRbaV0rKzsKKwkJCQlhZGRfdXNyX2NscyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFhZGRfdXNyX2NscykgeworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJCSJDb3VsZCBub3QgZmluZC9pbnNlcnQgY2xhc3MgZm9yIHBpZCAlZFxuIiwKKwkJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCB1c3BlYy0+cHJvdG8pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhmc3AtPmZsb3dfdHlwZSwgJmNsYXNzKSkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCWlkeCA9IHRjYW1fZ2V0X2luZGV4KG5wLCBpZHgpOworCXRwID0gJnBhcmVudC0+dGNhbVtpZHhdOworCisJbWVtc2V0KHRwLCAwLCBzaXplb2YoKnRwKSk7CisKKwkvKiBmaWxsIGluIHRoZSB0Y2FtIGtleSBhbmQgbWFzayAqLworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgRVNQX1Y0X0ZMT1c6CisJCW5pdV9nZXRfdGNhbWtleV9mcm9tX2lwNGZzKGZzcCwgdHAsIGwyX3JkY190YWJsZSwgY2xhc3MpOworCQlicmVhazsKKwljYXNlIFRDUF9WNl9GTE9XOgorCWNhc2UgVURQX1Y2X0ZMT1c6CisJY2FzZSBTQ1RQX1Y2X0ZMT1c6CisJY2FzZSBBSF9WNl9GTE9XOgorCWNhc2UgRVNQX1Y2X0ZMT1c6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJImZsb3cgJWQgZm9yIElQdjYgbm90IGltcGxlbWVudGVkXG5cbiIsCisJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBmc3AtPmZsb3dfdHlwZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCWNhc2UgSVBfVVNFUl9GTE9XOgorCQlpZiAoZnNwLT5oX3UudXNyX2lwNF9zcGVjLmlwX3ZlciA9PSBFVEhfUlhfTkZDX0lQNCkgeworCQkJbml1X2dldF90Y2Fta2V5X2Zyb21faXA0ZnMoZnNwLCB0cCwgbDJfcmRjX3RhYmxlLAorCQkJCQkJICAgY2xhc3MpOworCQl9IGVsc2UgeworCQkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJInVzciBmbG93IGZvciBJUHY2IG5vdCBpbXBsZW1lbnRlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJIlVua25vd24gZmxvdyB0eXBlICVkXG5cbiIsCisJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBmc3AtPmZsb3dfdHlwZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGZpbGwgaW4gdGhlIGFzc29jIGRhdGEgKi8KKwlpZiAoZnNwLT5yaW5nX2Nvb2tpZSA9PSBSWF9DTFNfRkxPV19ESVNDKSB7CisJCXRwLT5hc3NvY19kYXRhID0gVENBTV9BU1NPQ0RBVEFfRElTQzsKKwl9IGVsc2UgeworCQlpZiAoZnNwLT5yaW5nX2Nvb2tpZSA+PSBucC0+bnVtX3J4X3JpbmdzKSB7CisJCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIEluIG5pdV9hZGRfZXRodG9vbF90Y2FtX2VudHJ5OiAiCisJCQkJIkludmFsaWQgUlggcmluZyAlbGxkXG5cbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwKKwkJCQkobG9uZyBsb25nKSBmc3AtPnJpbmdfY29va2llKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQl0cC0+YXNzb2NfZGF0YSA9IChUQ0FNX0FTU09DREFUQV9UUkVTX1VTRV9PRkZTRVQgfAorCQkJCSAgKGZzcC0+cmluZ19jb29raWUgPDwKKwkJCQkgICBUQ0FNX0FTU09DREFUQV9PRkZTRVRfU0hJRlQpKTsKKwl9CisKKwllcnIgPSB0Y2FtX3dyaXRlKG5wLCBpZHgsIHRwLT5rZXksIHRwLT5rZXlfbWFzayk7CisJaWYgKGVycikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJZXJyID0gdGNhbV9hc3NvY193cml0ZShucCwgaWR4LCB0cC0+YXNzb2NfZGF0YSk7CisJaWYgKGVycikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB2YWxpZGF0ZSB0aGUgZW50cnkgKi8KKwl0cC0+dmFsaWQgPSAxOworCW5wLT5jbGFzLnRjYW1fdmFsaWRfZW50cmllcysrOworb3V0OgorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5pdV9kZWxfZXRodG9vbF90Y2FtX2VudHJ5KHN0cnVjdCBuaXUgKm5wLCB1MzIgbG9jKQoreworCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OworCXN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHA7CisJdTE2IGlkeDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBjbGFzczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChsb2MgPj0gdGNhbV9nZXRfc2l6ZShucCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbml1X2xvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZHggPSB0Y2FtX2dldF9pbmRleChucCwgbG9jKTsKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKworCS8qIGlmIHRoZSBlbnRyeSBpcyBvZiBhIHVzZXIgZGVmaW5lZCBjbGFzcywgdGhlbiB1cGRhdGUqLworCWNsYXNzID0gKHRwLT5rZXlbMF0gJiBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFKSA+PgorCQlUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFX1NISUZUOworCisJaWYgKGNsYXNzID49IENMQVNTX0NPREVfVVNFUl9QUk9HMSAmJiBjbGFzcyA8PSBDTEFTU19DT0RFX1VTRVJfUFJPRzQpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBOSVVfTDNfUFJPR19DTFM7IGkrKykgeworCQkJaWYgKHBhcmVudC0+bDNfY2xzW2ldID09IGNsYXNzKSB7CisJCQkJcGFyZW50LT5sM19jbHNfcmVmY250W2ldLS07CisJCQkJaWYgKCFwYXJlbnQtPmwzX2Nsc19yZWZjbnRbaV0pIHsKKwkJCQkJLyogZGlzYWJsZSBjbGFzcyAqLworCQkJCQlyZXQgPSB0Y2FtX3VzZXJfaXBfY2xhc3NfZW5hYmxlKG5wLAorCQkJCQkJCQkJY2xhc3MsCisJCQkJCQkJCQkwKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJCWdvdG8gb3V0OworCQkJCQlwYXJlbnQtPmwzX2Nsc1tpXSA9IDA7CisJCQkJCXBhcmVudC0+bDNfY2xzX3BpZFtpXSA9IDA7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IE5JVV9MM19QUk9HX0NMUykgeworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeSwiCisJCQkJIlVzciBjbGFzcyAweCVsbHggbm90IGZvdW5kIFxuIiwKKwkJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGNsYXNzKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IHRjYW1fZmx1c2gobnAsIGlkeCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBpbnZhbGlkYXRlIHRoZSBlbnRyeSAqLworCXRwLT52YWxpZCA9IDA7CisJbnAtPmNsYXMudGNhbV92YWxpZF9lbnRyaWVzLS07CitvdXQ6CisJbml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbml1X3NldF9uZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKK3sKKwlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJY2FzZSBFVEhUT09MX1NSWEZIOgorCQlyZXQgPSBuaXVfc2V0X2hhc2hfb3B0cyhucCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMSU5TOgorCQlyZXQgPSBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeShucCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMREVMOgorCQlyZXQgPSBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeShucCwgY21kLT5mcy5sb2NhdGlvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiB9IG5pdV94bWFjX3N0YXRfa2V5c1tdID0gewpAQCAtNzE1OSw2ICs3OTM3LDcgQEAKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsCQk9IG5pdV9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBuaXVfc2V0X21zZ2xldmVsLAorCS5ud2F5X3Jlc2V0CQk9IG5pdV9ud2F5X3Jlc2V0LAogCS5nZXRfZWVwcm9tX2xlbgkJPSBuaXVfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JCT0gbml1X2dldF9lZXByb20sCiAJLmdldF9zZXR0aW5ncwkJPSBuaXVfZ2V0X3NldHRpbmdzLApAQCAtNzE2Nyw4ICs3OTQ2LDggQEAKIAkuZ2V0X3N0YXRzX2NvdW50CT0gbml1X2dldF9zdGF0c19jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBuaXVfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLnBoeXNfaWQJCT0gbml1X3BoeXNfaWQsCi0JLmdldF9yeGhhc2gJCT0gbml1X2dldF9oYXNoX29wdHMsCi0JLnNldF9yeGhhc2gJCT0gbml1X3NldF9oYXNoX29wdHMsCisJLmdldF9yeG5mYwkJPSBuaXVfZ2V0X25mYywKKwkuc2V0X3J4bmZjCQk9IG5pdV9zZXRfbmZjLAogfTsKIAogc3RhdGljIGludCBuaXVfbGRnX2Fzc2lnbl9sZG4oc3RydWN0IG5pdSAqbnAsIHN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQsCkBAIC04MjM4LDcgKzkwMTcsOCBAQAogCW5pdWRiZyhQUk9CRSwgIm5pdV9jbGFzc2lmaWVyX3N3c3RhdGVfaW5pdDogbnVtX3RjYW0oJWQpXG4iLAogCSAgICAgICBucC0+cGFyZW50LT50Y2FtX251bV9lbnRyaWVzKTsKIAotCWNwLT50Y2FtX2luZGV4ID0gKHUxNikgbnAtPnBvcnQ7CisJY3AtPnRjYW1fdG9wID0gKHUxNikgbnAtPnBvcnQ7CisJY3AtPnRjYW1fc3ogPSBucC0+cGFyZW50LT50Y2FtX251bV9lbnRyaWVzIC8gbnAtPnBhcmVudC0+bnVtX3BvcnRzOwogCWNwLT5oMV9pbml0ID0gMHhmZmZmZmZmZjsKIAljcC0+aDJfaW5pdCA9IDB4ZmZmZjsKIApAQCAtODI1OCw3ICs5MDM4LDkgQEAKIAkJCSAgIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKIAkJCSAgIEFEVkVSVElTRURfQXV0b25lZyk7CiAJbHAtPnNwZWVkID0gbHAtPmFjdGl2ZV9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7Ci0JbHAtPmR1cGxleCA9IGxwLT5hY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJbHAtPmR1cGxleCA9IERVUExFWF9GVUxMOworCWxwLT5hY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJbHAtPmF1dG9uZWcgPSAxOwogI2lmIDAKIAlscC0+bG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX01BQzsKIAlscC0+YWN0aXZlX3NwZWVkID0gU1BFRURfMTAwMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuaCBiL2RyaXZlcnMvbmV0L25pdS5oCmluZGV4IGUxYTczOTIuLjg3NTRlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5oCisrKyBiL2RyaXZlcnMvbmV0L25pdS5oCkBAIC0zMDA0LDcgKzMwMDQsOSBAQAogCXN0cnVjdCBuaXVfYWx0bWFjX3JkYwlhbHRfbWFjX21hcHBpbmdzWzE2XTsKIAlzdHJ1Y3Qgbml1X3ZsYW5fcmRjCXZsYW5fbWFwcGluZ3NbRU5FVF9WTEFOX1RCTF9OVU1fRU5UUklFU107CiAKLQl1MTYJCQl0Y2FtX2luZGV4OworCXUxNgkJCXRjYW1fdG9wOworCXUxNgkJCXRjYW1fc3o7CisJdTE2CQkJdGNhbV92YWxpZF9lbnRyaWVzOwogCXUxNgkJCW51bV9hbHRfbWFjX21hcHBpbmdzOwogCiAJdTMyCQkJaDFfaW5pdDsKQEAgLTMwNDAsNiArMzA0Miw3IEBACiB9OwogCiBzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgeworCXU4CQkJdmFsaWQ7CiAJdTY0CQkJa2V5WzRdOwogCXU2NAkJCWtleV9tYXNrWzRdOwogCXU2NAkJCWFzc29jX2RhdGE7CkBAIC0zMTA3LDEwICszMTEwLDE1IEBACiAJc3RydWN0IHBoeV9wcm9iZV9pbmZvCXBoeV9wcm9iZV9pbmZvOwogCiAJc3RydWN0IG5pdV90Y2FtX2VudHJ5CXRjYW1bTklVX1RDQU1fRU5UUklFU19NQVhdOwotCXU2NAkJCWwyX2Nsc1syXTsKLQl1NjQJCQlsM19jbHNbNF07CisKKyNkZWZpbmUJTklVX0wyX1BST0dfQ0xTCQkyCisjZGVmaW5lCU5JVV9MM19QUk9HX0NMUwkJNAorCXU2NAkJCWwyX2Nsc1tOSVVfTDJfUFJPR19DTFNdOworCXU2NAkJCWwzX2Nsc1tOSVVfTDNfUFJPR19DTFNdOwogCXU2NAkJCXRjYW1fa2V5WzEyXTsKIAl1NjQJCQlmbG93X2tleVsxMl07CisJdTE2CQkJbDNfY2xzX3JlZmNudFtOSVVfTDNfUFJPR19DTFNdOworCXU4CQkJbDNfY2xzX3BpZFtOSVVfTDNfUFJPR19DTFNdOwogfTsKIAogc3RydWN0IG5pdV9vcHMgewpAQCAtMzEzMSwxNiArMzEzOSwxOSBAQAogfTsKIAogc3RydWN0IG5pdV9saW5rX2NvbmZpZyB7CisJdTMyCQkJCXN1cHBvcnRlZDsKKwogCS8qIERlc2NyaWJlcyB3aGF0IHdlJ3JlIHRyeWluZyB0byBnZXQuICovCiAJdTMyCQkJCWFkdmVydGlzaW5nOwotCXUzMgkJCQlzdXBwb3J0ZWQ7CiAJdTE2CQkJCXNwZWVkOwogCXU4CQkJCWR1cGxleDsKIAl1OAkJCQlhdXRvbmVnOwogCiAJLyogRGVzY3JpYmVzIHdoYXQgd2UgYWN0dWFsbHkgaGF2ZS4gKi8KKwl1MzIJCQkJYWN0aXZlX2FkdmVydGlzaW5nOwogCXUxNgkJCQlhY3RpdmVfc3BlZWQ7CiAJdTgJCQkJYWN0aXZlX2R1cGxleDsKKwl1OAkJCQlhY3RpdmVfYXV0b25lZzsKICNkZWZpbmUgU1BFRURfSU5WQUxJRAkJMHhmZmZmCiAjZGVmaW5lIERVUExFWF9JTlZBTElECQkweGZmCiAjZGVmaW5lIEFVVE9ORUdfSU5WQUxJRAkJMHhmZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IDkyNjY1MDIuLjIyMWIwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTgyMiw4ICs4MjIsNyBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2LT5yeF9pbmZvLnNrYnNbaV07CiAJCWRldi0+cnhfaW5mby5za2JzW2ldID0gTlVMTDsKIAkJY2xlYXJfcnhfZGVzYyhkZXYsIGkpOwotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCBlNWNiNmIxLi44ZjM4NzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMjU3LDYgKzI1NywxOCBAQAogCWxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAogCXdpdGggQ2FyZCBTZXJ2aWNlcy4KICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVsM19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWwzX29wZW4sCisJLm5kb19zdG9wIAkJPSBlbDNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGVsM19zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbDNfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBlbDNfZ2V0X3N0YXRzLAorCS5uZG9fZG9faW9jdGwJCT0gZWwzX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIHN0YXRpYyBpbnQgdGM1NzRfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CkBAIC0yODQsMTggKzI5Niw5IEBACiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CiAKLQkvKiBUaGUgRUwzLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWwzX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmZWwzX2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsID0gJmVsM19pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZWwzX25ldGRldl9vcHM7CiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X3J4X21vZGU7Ci0JZGV2LT5vcGVuID0gJmVsM19vcGVuOwotCWRldi0+c3RvcCA9ICZlbDNfY2xvc2U7Ci0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCi0JZGV2LT50eF90aW1lb3V0ID0gZWwzX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKIAogCXJldHVybiB0YzU3NF9jb25maWcobGluayk7CiB9IC8qIHRjNTc0X2F0dGFjaCAqLwpAQCAtMTAzNSw3ICsxMDM4LDggQEAKIAlERUJVRygzLCAiJXM6IGluIHJ4X3BhY2tldCgpLCBzdGF0dXMgJTQuNHgsIHJ4X3N0YXR1cyAlNC40eC5cbiIsCiAJCSAgZGV2LT5uYW1lLCBpbncoaW9hZGRyK0VMM19TVEFUVVMpLCBpbncoaW9hZGRyK1J4U3RhdHVzKSk7CiAJd2hpbGUgKCEoKHJ4X3N0YXR1cyA9IGludyhpb2FkZHIgKyBSeFN0YXR1cykpICYgMHg4MDAwKSAmJgotCQkgICAoLS13b3JrbGltaXQgPj0gMCkpIHsKKwkJCXdvcmtsaW1pdCA+IDApIHsKKwkJd29ya2xpbWl0LS07CiAJCWlmIChyeF9zdGF0dXMgJiAweDQwMDApIHsgLyogRXJyb3IsIHVwZGF0ZSBzdGF0cy4gKi8KIAkJCXNob3J0IGVycm9yID0gcnhfc3RhdHVzICYgMHgzODAwOwogCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKaW5kZXggNzNlY2M2NS4uY2RmNjYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKQEAgLTE2OSw2ICsxNjksMTkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWwzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlbDNfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGVsM19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWwzX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGVsM190eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZwkJPSBlbDNfY29uZmlnLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVsM19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgdGM1ODlfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IGVsM19wcml2YXRlICpscDsKQEAgLTE5NSwxNyArMjA4LDkgQEAKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAotICAgIC8qIFRoZSBFTDMtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbDNfc3RhcnRfeG1pdDsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmZWwzX2NvbmZpZzsKLSAgICBkZXYtPmdldF9zdGF0cyA9ICZlbDNfZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLSAgICBkZXYtPm9wZW4gPSAmZWwzX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmVsM19jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBlbDNfdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmZWwzX25ldGRldl9vcHM7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCiAgICAgcmV0dXJuIHRjNTg5X2NvbmZpZyhsaW5rKTsKQEAgLTg1Nyw3ICs4NjIsOCBAQAogICAgIERFQlVHKDMsICIlczogaW4gcnhfcGFja2V0KCksIHN0YXR1cyAlNC40eCwgcnhfc3RhdHVzICU0LjR4LlxuIiwKIAkgIGRldi0+bmFtZSwgaW53KGlvYWRkcitFTDNfU1RBVFVTKSwgaW53KGlvYWRkcitSWF9TVEFUVVMpKTsKICAgICB3aGlsZSAoISgocnhfc3RhdHVzID0gaW53KGlvYWRkciArIFJYX1NUQVRVUykpICYgMHg4MDAwKSAmJgotCSAgICgtLXdvcmtsaW1pdCA+PSAwKSkgeworCQkgICAgd29ya2xpbWl0ID4gMCkgeworCXdvcmtsaW1pdC0tOwogCWlmIChyeF9zdGF0dXMgJiAweDQwMDApIHsgLyogRXJyb3IsIHVwZGF0ZSBzdGF0cy4gKi8KIAkgICAgc2hvcnQgZXJyb3IgPSByeF9zdGF0dXMgJiAweDM4MDA7CiAJICAgIGRldi0+c3RhdHMucnhfZXJyb3JzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDg3MWFkMjkuLjUwMWE4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgIi4uLzgzOTAuaCIKIApAQCAtOTEsNiArOTIsMTAgQEAKIHN0YXRpYyBpbnQgYXhuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCBheG5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBheG5ldF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZWlfaXJxX3dyYXBwZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGVpX3dhdGNoZG9nKHVfbG9uZyBhcmcpOwpAQCAtMTA4LDcgKzExMyw2IEBACiAKIHN0YXRpYyB2b2lkIGF4bmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCi1zdGF0aWMgdm9pZCBheGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIEFYODgxOTBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhcnRwKTsKIHN0YXRpYyBpbnQgYXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNiArMTM4LDE5IEBACiAJcmV0dXJuIHA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXhuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGF4bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IGF4bmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gYXhuZXRfaW9jdGwsCisJLm5kb19zdGFydF94bWl0CQk9IGF4bmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGF4bmV0X3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIGF4bmV0X2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC0xNDYsMTUgKzE2MywxNyBAQAogewogICAgIGF4bmV0X2Rldl90ICppbmZvOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisgICAgc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWw7CiAKICAgICBERUJVRygwLCAiYXhuZXRfYXR0YWNoKClcbiIpOwogCi0gICAgZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgZWlfZGV2aWNlKSArIHNpemVvZihheG5ldF9kZXZfdCksCi0JCQkiZXRoJWQiLCBheGRldl9zZXR1cCk7Ci0KKyAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGVpX2RldmljZSkgKyBzaXplb2YoYXhuZXRfZGV2X3QpKTsKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKIAorICAgIGVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKyAgICBzcGluX2xvY2tfaW5pdCgmZWlfbG9jYWwtPnBhZ2VfbG9jayk7CisKICAgICBpbmZvID0gUFJJVihkZXYpOwogICAgIGluZm8tPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gZGV2OwpAQCAtMTYzLDEwICsxODIsMTAgQEAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBkZXYtPm9wZW4gPSAmYXhuZXRfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmYXhuZXRfY2xvc2U7Ci0gICAgZGV2LT5kb19pb2N0bCA9ICZheG5ldF9pb2N0bDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmYXhuZXRfbmV0ZGV2X29wczsKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOworICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCiAgICAgcmV0dXJuIGF4bmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogYXhuZXRfYXR0YWNoICovCkBAIC05MDUsMTQgKzkyNCwxMiBAQAogLyogSW5kZXggdG8gZnVuY3Rpb25zLiAqLwogc3RhdGljIHZvaWQgZWlfdHhfaW50cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVpX3R4X2VycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGF4bmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWlfcnhfb3ZlcnJ1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogUm91dGluZXMgZ2VuZXJpYyB0byBOUzgzOTAtYmFzZWQgYm9hcmRzLiAqLwogc3RhdGljIHZvaWQgTlM4MzkwX3RyaWdnZXJfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQkJCQkJCQlpbnQgc3RhcnRfcGFnZSk7Ci1zdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBkb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qCkBAIC05NTQsMTUgKzk3MSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQkvKiBUaGUgY2FyZCBJL08gcGFydCBvZiB0aGUgZHJpdmVyIChlLmcuIDNjNTAzKSBjYW4gaG9vayBhIFR4IHRpbWVvdXQKLQkgICAgd3JhcHBlciB0aGF0IGRvZXMgZS5nLiBtZWRpYSBjaGVjayAmIHRoZW4gY2FsbHMgYXhuZXRfdHhfdGltZW91dC4gKi8KLQlpZiAoZGV2LT50eF90aW1lb3V0ID09IE5VTEwpCi0JCSBkZXYtPnR4X3RpbWVvdXQgPSBheG5ldF90eF90aW1lb3V0OwotCWlmIChkZXYtPndhdGNoZG9nX3RpbWVvIDw9IDApCi0JCSBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgotCiAJLyoKIAkgKglHcmFiIHRoZSBwYWdlIGxvY2sgc28gd2Ugb3duIHRoZSByZWdpc3RlciBzZXQsIHRoZW4gY2FsbAogCSAqCXRoZSBpbml0IGZ1bmN0aW9uLgpAQCAtMTcwMSwzMCArMTcwOSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xvY2soZGV2KSwgZmxhZ3MpOwogfQkKIAotLyoqCi0gKiBheGRldl9zZXR1cCAtIGluaXQgcmVzdCBvZiA4MzkwIGRldmljZSBzdHJ1Y3QKLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSB0byBpbml0Ci0gKgotICogSW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgODM5MCBkZXZpY2Ugc3RydWN0dXJlLiAgRG8gTk9UIF9faW5pdAotICogdGhpcywgYXMgaXQgaXMgdXNlZCBieSA4MzkwIGJhc2VkIG1vZHVsYXIgZHJpdmVycyB0b28uCi0gKi8KLQotc3RhdGljIHZvaWQgYXhkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbDsKLQlpZiAoZWlfZGVidWcgPiAxKQotCQlwcmludGsodmVyc2lvbl84MzkwKTsKLSAgICAKLQllaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaW5pdCgmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0gICAgCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYXhuZXRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwk9IGdldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0KLQlldGhlcl9zZXR1cChkZXYpOwotfQotCiAvKiBUaGlzIHBhZ2Ugb2YgZnVuY3Rpb25zIHNob3VsZCBiZSA4MzkwIGdlbmVyaWMgKi8KIC8qIEZvbGxvdyBOYXRpb25hbCBTZW1pJ3MgcmVjb21tZW5kYXRpb25zIGZvciBpbml0aWFsaXppbmcgdGhlICJOSUMiLiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA2OWRjZmJiLi44MWU2NjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTEwMCw3ICsxMDAsNiBAQAogc3RhdGljIGlycXJldHVybl90IGZqbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGZqbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGZqbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZmpuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZmpuX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKQEAgLTExOCw3ICsxMTcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCBub2RlOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIGxvbmcgb3Blbl90aW1lOwogICAgIHVpbnQgdHhfc3RhcnRlZDoxOwogICAgIHVpbnQgdHhfcXVldWU7CkBAIC0yMjksNiArMjI3LDE4IEBACiAjZGVmaW5lIEJBTktfMVUgICAgICAgICAgICAgIDB4MjQgLyogYmFuayAxIChDT05GSUdfMSkgKi8KICNkZWZpbmUgQkFOS18yVSAgICAgICAgICAgICAgMHgyOCAvKiBiYW5rIDIgKENPTkZJR18xKSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZqbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZmpuX29wZW4sCisJLm5kb19zdG9wCQk9IGZqbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZmpuX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGZqbl90eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZyAJPSBmam5fY29uZmlnLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgZm12ajE4eF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwOwpAQCAtMjYwLDE3ICsyNzAsOSBAQAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIC8qIFRoZSBGTVZKMTh4IHNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZmpuX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJmZqbl9jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZmpuX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLSAgICBkZXYtPm9wZW4gPSAmZmpuX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmZqbl9jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBmam5fdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmZmpuX25ldGRldl9vcHM7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCiAgICAgcmV0dXJuIGZtdmoxOHhfY29uZmlnKGxpbmspOwpAQCAtNzkzLDcgKzc5NSw3IEBACiAJZmpuX3J4KGRldik7CiAgICAgfQogICAgIGlmICh0eF9zdGF0ICYgRl9UTVRfUkRZKSB7Ci0JbHAtPnN0YXRzLnR4X3BhY2tldHMgKz0gbHAtPnNlbnQgOworCWRldi0+c3RhdHMudHhfcGFja2V0cyArPSBscC0+c2VudCA7CiAgICAgICAgIGxwLT5zZW50ID0gMCA7CiAJaWYgKGxwLT50eF9xdWV1ZSkgewogCSAgICBvdXRiKERPX1RYIHwgbHAtPnR4X3F1ZXVlLCBpb2FkZHIgKyBUWF9TVEFSVCk7CkBAIC04NDAsNyArODQyLDcgQEAKIAkgICBodG9ucyhpbncoaW9hZGRyICsgNikpLCBodG9ucyhpbncoaW9hZGRyICsgOCkpLAogCSAgIGh0b25zKGludyhpb2FkZHIgKzEwKSksIGh0b25zKGludyhpb2FkZHIgKzEyKSksCiAJICAgaHRvbnMoaW53KGlvYWRkciArMTQpKSk7Ci0gICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAgICAgLyogVG9EbzogV2Ugc2hvdWxkIHRyeSB0byByZXN0YXJ0IHRoZSBhZGFwdG9yLi4uICovCiAgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKICAgICBmam5fcmVzZXQoZGV2KTsKQEAgLTg4MCw3ICs4ODIsNyBAQAogCiAJREVCVUcoNCwgIiVzOiBUcmFuc21pdHRpbmcgYSBwYWNrZXQgb2YgbGVuZ3RoICVsdS5cbiIsCiAJICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylza2ItPmxlbik7Ci0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiBEaXNhYmxlIGJvdGggaW50ZXJydXB0cy4gKi8KIAlvdXR3KDB4MDAwMCwgaW9hZGRyICsgVFhfSU5UUik7CkBAIC0xMDA4LDcgKzEwMTAsNiBAQAogCiBzdGF0aWMgdm9pZCBmam5fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCBib2d1c2NvdW50ID0gMTA7CS8qIDUgLT4gMTA6IGJ5IGFneSAxOTk0MDkyMiAqLwogCkBAIC0xMDI3LDExICsxMDI4LDExIEBACiAJfQogI2VuZGlmCiAJaWYgKChzdGF0dXMgJiAweEYwKSAhPSAweDIwKSB7CS8qIFRoZXJlIHdhcyBhbiBlcnJvci4gKi8KLQkgICAgbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCSAgICBpZiAoc3RhdHVzICYgRl9MRU5fRVJSKSBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCSAgICBpZiAoc3RhdHVzICYgRl9BTEdfRVJSKSBscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX0NSQ19FUlIpIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX09WUl9GTE8pIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCSAgICBpZiAoc3RhdHVzICYgRl9MRU5fRVJSKSBkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkgICAgaWYgKHN0YXR1cyAmIEZfQUxHX0VSUikgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkgICAgaWYgKHN0YXR1cyAmIEZfQ1JDX0VSUikgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJICAgIGlmIChzdGF0dXMgJiBGX09WUl9GTE8pIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAl9IGVsc2UgewogCSAgICB1X3Nob3J0IHBrdF9sZW4gPSBpbncoaW9hZGRyICsgREFUQVBPUlQpOwogCSAgICAvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlci4gKi8KQEAgLTEwNDEsNyArMTA0Miw3IEBACiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFRoZSBGTVYtMTh4IGNsYWltZWQgYSB2ZXJ5ICIKIAkJICAgICAgICJsYXJnZSBwYWNrZXQsIHNpemUgJWQuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlvdXRiKEZfU0tQX1BLVCwgaW9hZGRyICsgUlhfU0tJUCk7Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJYnJlYWs7CiAJICAgIH0KIAkgICAgc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKzIpOwpAQCAtMTA0OSw3ICsxMDUwLDcgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nICIKIAkJICAgICAgICJwYWNrZXQgKGxlbiAlZCkuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlvdXRiKEZfU0tQX1BLVCwgaW9hZGRyICsgUlhfU0tJUCk7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlicmVhazsKIAkgICAgfQogCkBAIC0xMDcwLDggKzEwNzEsOCBAQAogI2VuZGlmCiAKIAkgICAgbmV0aWZfcngoc2tiKTsKLQkgICAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkgICAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJfQogCWlmICgtLWJvZ3VzY291bnQgPD0gMCkKIAkgICAgYnJlYWs7CkBAIC0xMTkxLDE0ICsxMTkyLDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZmpuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHJldHVybiAmbHAtPnN0YXRzOwotfSAvKiBmam5fZ2V0X3N0YXRzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiAvKgogICBTZXQgdGhlIG11bHRpY2FzdC9wcm9taXNjdW91cyBtb2RlIGZvciB0aGlzIGFkYXB0b3IuCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCmluZGV4IGVjN2M1ODguLjAyZWY2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKQEAgLTQzNiw2ICs0MzYsMTkgQEAKIAogc3RhdGljIHZvaWQgbm1jbGFuX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hY2VfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbWFjZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBtYWNlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtYWNlX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IG1hY2VfdHhfdGltZW91dCwKKwkubmRvX3NldF9jb25maWcJCT0gbWFjZV9jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gbWFjZV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG5tY2xhbl9hdHRhY2gKIAlDcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZyBsb2NhbCBkYXRhCkBAIC00NzQsMTcgKzQ4Nyw5IEBACiAKICAgICBscC0+dHhfZnJlZV9mcmFtZXM9QU0yMTUwX01BWF9UWF9GUkFNRVM7CiAKLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZtYWNlX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJm1hY2VfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzID0gJm1hY2VfZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbWFjZV9uZXRkZXZfb3BzOwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwotICAgIGRldi0+b3BlbiA9ICZtYWNlX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJm1hY2VfY2xvc2U7Ci0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCi0gICAgZGV2LT50eF90aW1lb3V0ID0gbWFjZV90eF90aW1lb3V0OwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2VuZGlmCiAKICAgICByZXR1cm4gbm1jbGFuX2NvbmZpZyhsaW5rKTsKIH0gLyogbm1jbGFuX2F0dGFjaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCBhNjk5OTQwLi4yZmJmOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlICIuLi84MzkwLmgiCiAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KQEAgLTIzMyw2ICsyMzQsMjMgQEAKIAlyZXR1cm4gKHBjbmV0X2Rldl90ICopKHAgKyBzaXplb2Yoc3RydWN0IGVpX2RldmljZSkpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBjbmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHBjbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHBjbmV0X2Nsb3NlLAorCS5uZG9fc2V0X2NvbmZpZwkJPSBzZXRfY29uZmlnLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlaV9zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsIAkJPSBlaV9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWlfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgCT0gZWlfcG9sbCwKKyNlbmRpZgorfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBwY25ldF9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMjYwLDkgKzI3OCw3IEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgZGV2LT5vcGVuID0gJnBjbmV0X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnBjbmV0X2Nsb3NlOwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZzZXRfY29uZmlnOworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZwY25ldF9uZXRkZXZfb3BzOwogCiAgICAgcmV0dXJuIHBjbmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogcGNuZXRfYXR0YWNoICovCkBAIC02NDAsMTggKzY1NiwxMiBAQAogCiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKLSAgICBpZiAoaW5mby0+ZmxhZ3MgJiAoSVNfREwxMDAxOXxJU19ETDEwMDIyKSkgewotCWRldi0+ZG9faW9jdGwgPSAmZWlfaW9jdGw7CisgICAgaWYgKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpCiAJbWlpX3BoeV9wcm9iZShkZXYpOwotICAgIH0KIAogICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKLSNlbmRpZgotCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgInBjbmV0X2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwogCWxpbmstPmRldl9ub2RlID0gTlVMTDsKQEAgLTExODMsNiArMTE5MywxMCBAQAogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwogICAgIHUxNiAqZGF0YSA9ICh1MTYgKikmcnEtPmlmcl9pZnJ1OwogICAgIHVuc2lnbmVkIGludCBtaWlfYWRkciA9IGRldi0+YmFzZV9hZGRyICsgRExJTktfR1BJTzsKKworICAgIGlmICghKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpKQorCXJldHVybiAtRUlOVkFMOworCiAgICAgc3dpdGNoIChjbWQpIHsKICAgICBjYXNlIFNJT0NHTUlJUEhZOgogCWRhdGFbMF0gPSBpbmZvLT5waHlfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IGZjY2Q1M2UuLjc3NDIzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICBzcGlubG9ja190CQkJbG9jazsKICAgICB1X3Nob3J0CQkJbWFuZmlkOwogICAgIHVfc2hvcnQJCQljYXJkaWQ7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisKICAgICBkZXZfbm9kZV90CQkJbm9kZTsKICAgICBzdHJ1Y3Qgc2tfYnVmZgkJKnNhdmVkX3NrYjsKICAgICBpbnQJCQkJcGFja2V0c193YWl0aW5nOwpAQCAtMjg5LDcgKzI4OSw2IEBACiBzdGF0aWMgaW50IHNtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHNtY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHNtY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc21jX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzOWtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTsKIHN0YXRpYyB2b2lkIHNtY19zZXRfeGN2cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZfcG9ydCk7CkBAIC0zMDEsNiArMzAwLDE5IEBACiBzdGF0aWMgaW50IHNtY19saW5rX29rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc21jX29wZW4sCisJLm5kb19zdG9wCQk9IHNtY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc21jX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHNtY190eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZyAJPSBzOWtfY29uZmlnLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19kb19pb2N0bAkJPSAmc21jX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICBzbWM5MWM5Ml9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMzM2LDE4ICszNDgsOSBAQAogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAgICAgLyogVGhlIFNNQzkxYzkyLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc21jX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmc21jX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmczlrX2NvbmZpZzsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLSAgICBkZXYtPm9wZW4gPSAmc21jX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnNtY19jbG9zZTsKLSAgICBkZXYtPmRvX2lvY3RsID0gJnNtY19pb2N0bDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmc21jX25ldGRldl9vcHM7CiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzKTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBzbWNfdHhfdGltZW91dDsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgogCiAgICAgc21jLT5taWlfaWYuZGV2ID0gZGV2OwogICAgIHNtYy0+bWlpX2lmLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKQEAgLTEyOTEsNyArMTI5NCw3IEBACiAJcmV0dXJuOwogICAgIH0KIAotICAgIHNtYy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKICAgICAvKiBUaGUgY2FyZCBzaG91bGQgdXNlIHRoZSBqdXN0LWFsbG9jYXRlZCBidWZmZXIuICovCiAgICAgb3V0dyhwYWNrZXRfbm8sIGlvYWRkciArIFBOUl9BUlIpOwogICAgIC8qIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCAqLwpAQCAtMTM0MCw3ICsxMzQzLDcgQEAKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBTTUM5MWM5MiB0cmFuc21pdCB0aW1lZCBvdXQsICIKIAkgICAiVHhfc3RhdHVzICUyLjJ4IHN0YXR1cyAlNC40eC5cbiIsCiAJICAgZGV2LT5uYW1lLCBpbncoaW9hZGRyKSYweGZmLCBpbncoaW9hZGRyICsgMikpOwotICAgIHNtYy0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICBzbWNfcmVzZXQoZGV2KTsKICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKICAgICBzbWMtPnNhdmVkX3NrYiA9IE5VTEw7CkBAIC0xMzYyLDcgKzEzNjUsNyBAQAogCiAgICAgaWYgKHNtYy0+c2F2ZWRfc2tiKSB7CiAJLyogVEhJUyBTSE9VTEQgTkVWRVIgSEFQUEVOLiAqLwotCXNtYy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcm5hbCBlcnJvciAtLSBzZW50IHBhY2tldCB3aGlsZSBidXN5LlxuIiwKIAkgICAgICAgZGV2LT5uYW1lKTsKIAlyZXR1cm4gMTsKQEAgLTEzNzUsNyArMTM3OCw3IEBACiAJcHJpbnRrKEtFUk5fRVJSICIlczogRmFyIHRvbyBiaWcgcGFja2V0IGVycm9yLlxuIiwgZGV2LT5uYW1lKTsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogCXNtYy0+c2F2ZWRfc2tiID0gTlVMTDsKLQlzbWMtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAlyZXR1cm4gMDsJCS8qIERvIG5vdCByZS1xdWV1ZSB0aGlzIHBhY2tldC4gKi8KICAgICB9CiAgICAgLyogQSBwYWNrZXQgaXMgbm93IHdhaXRpbmcuICovCkBAIC0xNDMzLDExICsxNDM2LDExIEBACiAKICAgICB0eF9zdGF0dXMgPSBpbncoaW9hZGRyICsgREFUQV8xKTsKIAotICAgIHNtYy0+c3RhdHMudHhfZXJyb3JzKys7Ci0gICAgaWYgKHR4X3N0YXR1cyAmIFRTX0xPU1RDQVIpIHNtYy0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLSAgICBpZiAodHhfc3RhdHVzICYgVFNfTEFUQ09MKSAgc21jLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKyAgICBpZiAodHhfc3RhdHVzICYgVFNfTE9TVENBUikgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworICAgIGlmICh0eF9zdGF0dXMgJiBUU19MQVRDT0wpICBkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKICAgICBpZiAodHhfc3RhdHVzICYgVFNfMTZDT0wpIHsKLQlzbWMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCXNtYy0+dHhfZXJyKys7CiAgICAgfQogCkBAIC0xNDc0LDEwICsxNDc3LDEwIEBACiAgICAgLyogQ291bGQgYmUgYSBjb3VudGVyIHJvbGwtb3ZlciB3YXJuaW5nOiB1cGRhdGUgc3RhdHMuICovCiAgICAgY2FyZF9zdGF0cyA9IGludyhpb2FkZHIgKyBDT1VOVEVSKTsKICAgICAvKiBzaW5nbGUgY29sbGlzaW9ucyAqLwotICAgIHNtYy0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOworICAgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOwogICAgIGNhcmRfc3RhdHMgPj49IDQ7CiAgICAgLyogbXVsdGlwbGUgY29sbGlzaW9ucyAqLwotICAgIHNtYy0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOworICAgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOwogI2lmIDAgCQkvKiBUaGVzZSBhcmUgZm9yIHdoZW4gbGludXggc3VwcG9ydHMgdGhlc2Ugc3RhdGlzdGljcyAqLwogICAgIGNhcmRfc3RhdHMgPj49IDQ7CQkJLyogZGVmZXJyZWQgKi8KICAgICBjYXJkX3N0YXRzID4+PSA0OwkJCS8qIGV4Y2VzcyBkZWZlcnJlZCAqLwpAQCAtMTU1MSw3ICsxNTU0LDcgQEAKIAlpZiAoc3RhdHVzICYgSU1fVFhfRU1QVFlfSU5UKSB7CiAJICAgIG91dHcoSU1fVFhfRU1QVFlfSU5ULCBpb2FkZHIgKyBJTlRFUlJVUFQpOwogCSAgICBtYXNrICY9IH5JTV9UWF9FTVBUWV9JTlQ7Ci0JICAgIHNtYy0+c3RhdHMudHhfcGFja2V0cyArPSBzbWMtPnBhY2tldHNfd2FpdGluZzsKKwkgICAgZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IHNtYy0+cGFja2V0c193YWl0aW5nOwogCSAgICBzbWMtPnBhY2tldHNfd2FpdGluZyA9IDA7CiAJfQogCWlmIChzdGF0dXMgJiBJTV9BTExPQ19JTlQpIHsKQEAgLTE1NjcsOCArMTU3MCw4IEBACiAJICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CiAJaWYgKHN0YXR1cyAmIElNX1JYX09WUk5fSU5UKSB7Ci0JICAgIHNtYy0+c3RhdHMucnhfZXJyb3JzKys7Ci0JICAgIHNtYy0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCSAgICBpZiAoc21jLT5kdXBsZXgpCiAJCXNtYy0+cnhfb3ZybiA9IDE7IC8qIG5lZWQgTUNfUkVTRVQgb3V0c2lkZSBzbWNfaW50ZXJydXB0ICovCiAJICAgIG91dHcoSU1fUlhfT1ZSTl9JTlQsIGlvYWRkciArIElOVEVSUlVQVCk7CkBAIC0xNjE4LDcgKzE2MjEsNiBAQAogCiBzdGF0aWMgdm9pZCBzbWNfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCByeF9zdGF0dXM7CiAgICAgaW50IHBhY2tldF9sZW5ndGg7CS8qIENhdXRpb246IG5vdCBmcmFtZSBsZW5ndGgsIHJhdGhlciB3b3JkcwpAQCAtMTY0OSw3ICsxNjUxLDcgQEAKIAkKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkgICAgREVCVUcoMSwgIiVzOiBMb3cgbWVtb3J5LCBwYWNrZXQgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSk7Ci0JICAgIHNtYy0+c3RhdHMucnhfZHJvcHBlZCsrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkgICAgb3V0dyhNQ19SRUxFQVNFLCBpb2FkZHIgKyBNTVVfQ01EKTsKIAkgICAgcmV0dXJuOwogCX0KQEAgLTE2NjIsMTggKzE2NjQsMTggQEAKIAkKIAluZXRpZl9yeChza2IpOwogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0Jc21jLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0Jc21jLT5zdGF0cy5yeF9ieXRlcyArPSBwYWNrZXRfbGVuZ3RoOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGFja2V0X2xlbmd0aDsKIAlpZiAocnhfc3RhdHVzICYgUlNfTVVMVElDQVNUKQotCSAgICBzbWMtPnN0YXRzLm11bHRpY2FzdCsrOworCSAgICBkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogICAgIH0gZWxzZSB7CiAJLyogZXJyb3IgLi4uICovCi0Jc21jLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQotCWlmIChyeF9zdGF0dXMgJiBSU19BTEdORVJSKSAgc21jLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwlpZiAocnhfc3RhdHVzICYgUlNfQUxHTkVSUikgIGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJaWYgKHJ4X3N0YXR1cyAmIChSU19UT09TSE9SVCB8IFJTX1RPT0xPTkcpKQotCSAgICBzbWMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQlpZiAocnhfc3RhdHVzICYgUlNfQkFEQ1JDKQlzbWMtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJaWYgKHJ4X3N0YXR1cyAmIFJTX0JBRENSQykJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAgICAgfQogICAgIC8qIExldCB0aGUgTU1VIGZyZWUgdGhlIG1lbW9yeSBvZiB0aGlzIHBhY2tldC4gKi8KICAgICBvdXR3KE1DX1JFTEVBU0UsIGlvYWRkciArIE1NVV9DTUQpOwpAQCAtMTY4MSwxNSArMTY4Myw2IEBACiAgICAgcmV0dXJuOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIC8qIE5vdGhpbmcgdG8gdXBkYXRlIC0gdGhlIDkxYzkyIGlzIGEgcHJldHR5IHByaW1hdGl2ZSBjaGlwLiAqLwotICAgIHJldHVybiAmc21jLT5zdGF0czsKLX0KLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBDYWxjdWxhdGUgdmFsdWVzIGZvciB0aGUgaGFyZHdhcmUgbXVsdGljYXN0IGZpbHRlciBoYXNoIHRhYmxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggZmVmN2UxOC4uYTM2ODVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IG5vZGU7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKICAgICBpbnQgY2FyZF90eXBlOwogICAgIGludCBwcm9iZV9wb3J0OwogICAgIGludCBzaWxpY29uOyAvKiBzaWxpY29uIHJldmlzaW9uLiAwPW9sZCBDRTIsIDE9U2NpcHBlciwgND1Nb2hhd2sgKi8KQEAgLTM1NSw3ICszNTUsNiBAQAogc3RhdGljIGludCBkb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyYzJwc190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZG9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X2FkZHJlc3NlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2V0X2NhcmRfdHlwZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgY29uc3Qgdm9pZCAqcyk7CkBAIC01NDYsNiArNTQ1LDE5IEBACiAKIC8qPT09PT09PT09PT09PSBNYWluIGJ1bGsgb2YgZnVuY3Rpb25zCT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGRvX29wZW4sCisJLm5kb19zdG9wCQk9IGRvX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGRvX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHhpcmNfdHhfdGltZW91dCwKKwkubmRvX3NldF9jb25maWcJCT0gZG9fY29uZmlnLAorCS5uZG9fZG9faW9jdGwJCT0gZG9faW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKioqKioqKioqKioqKioqCiAgKiB4aXJjMnBzX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCiAgKiBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKQEAgLTU4MSwxOSArNTkzLDEwIEBACiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCiAgICAgLyogRmlsbCBpbiBjYXJkIHNwZWNpZmljIGVudHJpZXMgKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZkb19zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZkb19jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZG9fZ2V0X3N0YXRzOwotICAgIGRldi0+ZG9faW9jdGwgPSAmZG9faW9jdGw7Ci0gICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotICAgIGRldi0+b3BlbiA9ICZkb19vcGVuOwotICAgIGRldi0+c3RvcCA9ICZkb19zdG9wOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IHhpcmNfdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKKyAgICBkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICAgICBJTklUX1dPUksoJmxvY2FsLT50eF90aW1lb3V0X3Rhc2ssIHhpcmMycHNfdHhfdGltZW91dF90YXNrKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIHhpcmMycHNfY29uZmlnKGxpbmspOwogfSAvKiB4aXJjMnBzX2F0dGFjaCAqLwpAQCAtMTE3Miw3ICsxMTc1LDcgQEAKIAlpZiAoYnl0ZXNfcmN2ZCA+IG1heHJ4X2J5dGVzICYmIChyc3IgJiBQa3RSeE9rKSkgewogCSAgICAvKiB0b28gbWFueSBieXRlcyByZWNlaXZlZCBkdXJpbmcgdGhpcyBpbnQsIGRyb3AgdGhlIHJlc3Qgb2YgdGhlCiAJICAgICAqIHBhY2tldHMgKi8KLQkgICAgbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJICAgIERFQlVHKDIsICIlczogUlggZHJvcCwgdG9vIG11Y2ggZG9uZVxuIiwgZGV2LT5uYW1lKTsKIAl9IGVsc2UgaWYgKHJzciAmIFBrdFJ4T2spIHsKIAkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTExODYsNyArMTE4OSw3IEBACiAJICAgIGlmICghc2tiKSB7CiAJCXByaW50ayhLTk9UX1hJUkMgImxvdyBtZW1vcnksIHBhY2tldCBkcm9wcGVkIChzaXplPSV1KVxuIiwKIAkJICAgICAgIHBrdGxlbik7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCSAgICB9IGVsc2UgeyAvKiBva2F5IGdldCB0aGUgcGFja2V0ICovCiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJCWlmIChscC0+c2lsaWNvbiA9PSAwICkgeyAvKiB3b3JrIGFyb3VuZCBhIGhhcmR3YXJlIGJ1ZyAqLwpAQCAtMTI0MiwyNCArMTI0NSwyNCBAQAogCQl9CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCW5ldGlmX3J4KHNrYik7Ci0JCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RsZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdGxlbjsKIAkJaWYgKCEocnNyICYgUGh5UGt0KSkKLQkJICAgIGxwLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJICAgIGRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAJICAgIH0KIAl9IGVsc2UgeyAvKiBiYWQgcGFja2V0ICovCiAJICAgIERFQlVHKDUsICJyc3I9JSMwMnhcbiIsIHJzcik7CiAJfQogCWlmIChyc3IgJiBQa3RUb29Mb25nKSB7Ci0JICAgIGxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkgICAgREVCVUcoMywgIiVzOiBQYWNrZXQgdG9vIGxvbmdcbiIsIGRldi0+bmFtZSk7CiAJfQogCWlmIChyc3IgJiBDUkNFcnIpIHsKLQkgICAgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJICAgIERFQlVHKDMsICIlczogQ1JDIGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCX0KIAlpZiAocnNyICYgQWxpZ25FcnIpIHsKLQkgICAgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7IC8qIG9rYXkgPyAqLworCSAgICBkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7IC8qIG9rYXkgPyAqLwogCSAgICBERUJVRygzLCAiJXM6IEFsaWdubWVudCBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKQEAgLTEyNzAsNyArMTI3Myw3IEBACiAJZXRoX3N0YXR1cyA9IEdldEJ5dGUoWElSQ1JFR19FU1IpOwogICAgIH0KICAgICBpZiAocnhfc3RhdHVzICYgMHgxMCkgeyAvKiBSZWNlaXZlIG92ZXJydW4gKi8KLQlscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJUHV0Qnl0ZShYSVJDUkVHX0NSLCBDbGVhclJ4T3ZydW4pOwogCURFQlVHKDMsICJyZWNlaXZlIG92ZXJydW4gY2xlYXJlZFxuIik7CiAgICAgfQpAQCAtMTI4MywxMSArMTI4NiwxMSBAQAogCW5uID0gR2V0Qnl0ZShYSVJDUkVHMF9QVFIpOwogCWxwLT5sYXN0X3B0cl92YWx1ZSA9IG5uOwogCWlmIChubiA8IG4pIC8qIHJvbGxvdmVyICovCi0JICAgIGxwLT5zdGF0cy50eF9wYWNrZXRzICs9IDI1NiAtIG47CisJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cyArPSAyNTYgLSBuOwogCWVsc2UgaWYgKG4gPT0gbm4pIHsgLyogaGFwcGVucyBzb21ldGltZXMgLSBkb24ndCBrbm93IHdoeSAqLwogCSAgICBERUJVRygwLCAiUFRSIG5vdCBjaGFuZ2VkP1xuIik7CiAJfSBlbHNlCi0JICAgIGxwLT5zdGF0cy50eF9wYWNrZXRzICs9IGxwLT5sYXN0X3B0cl92YWx1ZSAtIG47CisJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cyArPSBscC0+bGFzdF9wdHJfdmFsdWUgLSBuOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKICAgICB9CiAgICAgaWYgKHR4X3N0YXR1cyAmIDB4MDAwMikgewkvKiBFeGVjZXNzaXZlIGNvbGxpc3Npb25zICovCkBAIC0xMjk1LDcgKzEyOTgsNyBAQAogCVB1dEJ5dGUoWElSQ1JFR19DUiwgUmVzdGFydFR4KTsgIC8qIHJlc3RhcnQgdHJhbnNtaXR0ZXIgcHJvY2VzcyAqLwogICAgIH0KICAgICBpZiAodHhfc3RhdHVzICYgMHgwMDQwKQotCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAogICAgIC8qIHJlY2FsY3VsYXRlIG91ciB3b3JrIGNodW5rIHNvIHRoYXQgd2UgbGltaXQgdGhlIGR1cmF0aW9uIG9mIHRoaXMKICAgICAgKiBJU1IgdG8gYWJvdXQgMS8xMCBvZiBhIHNlY29uZC4KQEAgLTEzNTMsNyArMTM1Niw3IEBACiB4aXJjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXRcbiIsIGRldi0+bmFtZSk7CiAgICAgc2NoZWR1bGVfd29yaygmbHAtPnR4X3RpbWVvdXRfdGFzayk7CiB9CkBAIC0xNDA5LDIwICsxNDEyLDExIEBACiAKICAgICBkZXZfa2ZyZWVfc2tiIChza2IpOwogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotICAgIGxwLT5zdGF0cy50eF9ieXRlcyArPSBwa3RsZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBwa3RsZW47CiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLWRvX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0gICAgLyoJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBHZXRCeXRlKD8pICovCi0gICAgcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KIC8qKioqKioqKioqKioqKioqCiAgKiBTZXQgYWxsIGFkZHJlc3NlczogVGhpcyBmaXJzdCBvbmUgaXMgdGhlIGluZGl2aWR1YWwgYWRkcmVzcywKICAqIHRoZSBuZXh0IDkgYWRkcmVzc2VzIGFyZSB0YWtlbiBmcm9tIHRoZSBtdWx0aWNhc3QgbGlzdCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKaW5kZXggYmIyOWFlMy4uYjc1NDAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlidXMtPmRldi5wYXJlbnQgPSBidXMtPnBhcmVudDsKIAlidXMtPmRldi5jbGFzcyA9ICZtZGlvX2J1c19jbGFzczsKIAlidXMtPmRldi5ncm91cHMgPSBOVUxMOwotCWRldl9zZXRfbmFtZSgmYnVzLT5kZXYsIGJ1cy0+aWQpOworCWRldl9zZXRfbmFtZSgmYnVzLT5kZXYsICIlcyIsIGJ1cy0+aWQpOwogCiAJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZidXMtPmRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IGU0ZWRlNjAuLjU4YjczYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTQxNCw3ICs0MTQsNiBAQAogCiBzdGF0aWMgdm9pZCBwaHlfY2hhbmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBwaHlfc3RhdGVfbWFjaGluZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgcGh5X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIC8qKgogICogcGh5X3N0YXJ0X21hY2hpbmUgLSBzdGFydCBQSFkgc3RhdGUgbWFjaGluZSB0cmFja2luZwpAQCAtNDM0LDExICs0MzMsOCBAQAogewogCXBoeWRldi0+YWRqdXN0X3N0YXRlID0gaGFuZGxlcjsKIAotCUlOSVRfV09SSygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgcGh5X3N0YXRlX21hY2hpbmUpOwotCWluaXRfdGltZXIoJnBoeWRldi0+cGh5X3RpbWVyKTsKLQlwaHlkZXYtPnBoeV90aW1lci5mdW5jdGlvbiA9ICZwaHlfdGltZXI7Ci0JcGh5ZGV2LT5waHlfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwaHlkZXY7Ci0JbW9kX3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lciwgamlmZmllcyArIEhaKTsKKwlJTklUX0RFTEFZRURfV09SSygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgcGh5X3N0YXRlX21hY2hpbmUpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgamlmZmllcyArIEhaKTsKIH0KIAogLyoqCkBAIC00NTEsOCArNDQ3LDcgQEAKICAqLwogdm9pZCBwaHlfc3RvcF9tYWNoaW5lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7Ci0JZGVsX3RpbWVyX3N5bmMoJnBoeWRldi0+cGh5X3RpbWVyKTsKLQljYW5jZWxfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBoeWRldi0+c3RhdGVfcXVldWUpOwogCiAJbXV0ZXhfbG9jaygmcGh5ZGV2LT5sb2NrKTsKIAlpZiAocGh5ZGV2LT5zdGF0ZSA+IFBIWV9VUCkKQEAgLTY4MCwxMSArNjc1LDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGlycV9lbmFibGVfZXJyOwogCi0JLyogU3RvcCB0aW1lciBhbmQgcnVuIHRoZSBzdGF0ZSBxdWV1ZSBub3cuICBUaGUgd29yayBmdW5jdGlvbiBmb3IKLQkgKiBzdGF0ZV9xdWV1ZSB3aWxsIHN0YXJ0IHRoZSB0aW1lciB1cCBhZ2Fpbi4KLQkgKi8KLQlkZWxfdGltZXIoJnBoeWRldi0+cGh5X3RpbWVyKTsKLQlzY2hlZHVsZV93b3JrKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwkvKiByZXNjaGVkdWxlIHN0YXRlIHF1ZXVlIHdvcmsgdG8gcnVuIGFzIHNvb24gYXMgcG9zc2libGUgKi8KKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBoeWRldi0+c3RhdGVfcXVldWUpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgMCk7CiAKIAlyZXR1cm47CiAKQEAgLTc2MSwxNCArNzU0LDEzIEBACiAvKioKICAqIHBoeV9zdGF0ZV9tYWNoaW5lIC0gSGFuZGxlIHRoZSBzdGF0ZSBtYWNoaW5lCiAgKiBAd29yazogd29ya19zdHJ1Y3QgdGhhdCBkZXNjcmliZXMgdGhlIHdvcmsgdG8gYmUgZG9uZQotICoKLSAqIERlc2NyaXB0aW9uOiBTY2hlZHVsZWQgYnkgdGhlIHN0YXRlX3F1ZXVlIHdvcmtxdWV1ZSBlYWNoIHRpbWUKLSAqICAgcGh5X3RpbWVyIGlzIHRyaWdnZXJlZC4KICAqLwogc3RhdGljIHZvaWQgcGh5X3N0YXRlX21hY2hpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0KLQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGh5X2RldmljZSwgc3RhdGVfcXVldWUpOworCQkJY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgcGh5X2RldmljZSwgc3RhdGVfcXVldWUpOwogCWludCBuZWVkc19hbmVnID0gMDsKIAlpbnQgZXJyID0gMDsKIApAQCAtOTQ2LDE3ICs5MzgsNiBAQAogCWlmIChlcnIgPCAwKQogCQlwaHlfZXJyb3IocGh5ZGV2KTsKIAotCW1vZF90aW1lcigmcGh5ZGV2LT5waHlfdGltZXIsIGppZmZpZXMgKyBQSFlfU1RBVEVfVElNRSAqIEhaKTsKLX0KLQotLyogUEhZIHRpbWVyIHdoaWNoIHNjaGVkdWxlcyB0aGUgc3RhdGUgbWFjaGluZSB3b3JrICovCi1zdGF0aWMgdm9pZCBwaHlfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSAoc3RydWN0IHBoeV9kZXZpY2UgKilkYXRhOwotCi0JLyoKLQkgKiBQSFkgSS9PIG9wZXJhdGlvbnMgY2FuIHBvdGVudGlhbGx5IHNsZWVwIHNvIHdlIGVuc3VyZSB0aGF0Ci0JICogaXQncyBkb25lIGZyb20gYSBwcm9jZXNzIGNvbnRleHQKLQkgKi8KLQlzY2hlZHVsZV93b3JrKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsCisJCQkJamlmZmllcyArIFBIWV9TVEFURV9USU1FICogSFopOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKaW5kZXggMTM4NzE4Ny4uNTEyM2JiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYworKysgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCkBAIC0xNTksNiArMTU5LDMwIEBACiAJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLCB9CiB9OwogCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbGFuODcxMF9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSAweDAwMDdjMGYwLCAvKiBPVUk9MHgwMDgwMGYsIE1vZGVsIz0weDBmICovCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiU01TQyBMQU44NzEwL0xBTjg3MjAiLAorCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZQorCQkJCXwgU1VQUE9SVEVEX0FzeW1fUGF1c2UpLAorCS5mbGFncwkJPSBQSFlfSEFTX0lOVEVSUlVQVCB8IFBIWV9IQVNfTUFHSUNBTkVHLAorCisJLyogYmFzaWMgZnVuY3Rpb25zICovCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuY29uZmlnX2luaXQJPSBzbXNjX3BoeV9jb25maWdfaW5pdCwKKworCS8qIElSUSByZWxhdGVkICovCisJLmFja19pbnRlcnJ1cHQJPSBzbXNjX3BoeV9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IHNtc2NfcGh5X2NvbmZpZ19pbnRyLAorCisJLnN1c3BlbmQJPSBnZW5waHlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGdlbnBoeV9yZXN1bWUsCisKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsIH0KK307CisKIHN0YXRpYyBpbnQgX19pbml0IHNtc2NfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xNzksOCArMjAzLDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI0OwogCisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlciAoJmxhbjg3MTBfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjU7CisKIAlyZXR1cm4gMDsKIAorZXJyNToKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW45MTF4X2ludF9kcml2ZXIpOwogZXJyNDoKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW44NzAwX2RyaXZlcik7CiBlcnIzOgpAQCAtMTkzLDYgKzIyMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbXNjX2V4aXQodm9pZCkKIHsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW44NzEwX2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuOTExeF9pbnRfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW44NzAwX2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODE4N19kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwppbmRleCA2NTY3ZmFiLi42ZGU4Mzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwpAQCAtMTU3LDYgKzE1Nyw3IEBACiB7CiAJc3RydWN0IGFzeW5jcHBwICphcDsKIAlpbnQgZXJyOworCWludCBzcGVlZDsKIAogCWlmICh0dHktPm9wcy0+d3JpdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTg3LDYgKzE4OCw4IEBACiAJYXAtPmNoYW4ucHJpdmF0ZSA9IGFwOwogCWFwLT5jaGFuLm9wcyA9ICZhc3luY19vcHM7CiAJYXAtPmNoYW4ubXR1ID0gUFBQX01SVTsKKwlzcGVlZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYXAtPmNoYW4uc3BlZWQgPSBzcGVlZDsKIAllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYXAtPmNoYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yMzMsMTEgKzIzNiw5IEBACiAJdGFza2xldF9raWxsKCZhcC0+dHNrKTsKIAogCXBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKLQlpZiAoYXAtPnJwa3QpCi0JCWtmcmVlX3NrYihhcC0+cnBrdCk7CisJa2ZyZWVfc2tiKGFwLT5ycGt0KTsKIAlza2JfcXVldWVfcHVyZ2UoJmFwLT5ycXVldWUpOwotCWlmIChhcC0+dHBrdCkKLQkJa2ZyZWVfc2tiKGFwLT50cGt0KTsKKwlrZnJlZV9za2IoYXAtPnRwa3QpOwogCWtmcmVlKGFwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggODFlN2ZjYy4uOGVlOTE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC0xNjcsNiArMTY3LDcgQEAKIAl1OAkJYXZhaWw7CQkvKiBmbGFnIHVzZWQgaW4gbXVsdGlsaW5rIHN0dWZmICovCiAJdTgJCWhhZF9mcmFnOwkvKiA+PSAxIGZyYWdtZW50cyBoYXZlIGJlZW4gc2VudCAqLwogCXUzMgkJbGFzdHNlcTsJLyogTVA6IGxhc3Qgc2VxdWVuY2UgIyByZWNlaXZlZCAqLworCWludCAgICAgc3BlZWQ7CQkvKiBzcGVlZCBvZiB0aGUgY29ycmVzcG9uZGluZyBwcHAgY2hhbm5lbCovCiAjZW5kaWYgLyogQ09ORklHX1BQUF9NVUxUSUxJTksgKi8KIH07CiAKQEAgLTk5MSw3ICs5OTIsNyBAQAogCiAgb3V0ZjoKIAlrZnJlZV9za2Ioc2tiKTsKLQkrK3BwcC0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkOworCSsrZGV2LT5zdGF0cy50eF9kcm9wcGVkOwogCXJldHVybiAwOwogfQogCkBAIC0xMjQ1LDggKzEyNDYsNyBAQAogCXJldHVybjsKIAogIGRyb3A6Ci0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAJKytwcHAtPmRldi0+c3RhdHMudHhfZXJyb3JzOwogfQogCkBAIC0xMzA4LDEzOCArMTMwOCwxODEgQEAKICAqLwogc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGxlbiwgZnJhZ3NpemU7Ci0JaW50IGksIGJpdHMsIGhkcmxlbiwgbXR1OwotCWludCBmbGVuOwotCWludCBuYXZhaWwsIG5mcmVlOwotCWludCBuYmlnZ2VyOworCWludAlsZW4sIHRvdGxlbjsKKwlpbnQJaSwgYml0cywgaGRybGVuLCBtdHU7CisJaW50CWZsZW47CisJaW50CW5hdmFpbCwJbmZyZWUsIG56ZXJvOworCWludAluYmlnZ2VyOworCWludAl0b3RzcGVlZDsKKwlpbnQJdG90ZnJlZTsKIAl1bnNpZ25lZCBjaGFyICpwLCAqcTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCXN0cnVjdCBjaGFubmVsICpwY2g7CiAJc3RydWN0IHNrX2J1ZmYgKmZyYWc7CiAJc3RydWN0IHBwcF9jaGFubmVsICpjaGFuOwogCi0JbmZyZWUgPSAwOwkvKiAjIGNoYW5uZWxzIHdoaWNoIGhhdmUgbm8gcGFja2V0IGFscmVhZHkgcXVldWVkICovCisJdG90c3BlZWQgPSAwOyAvKnRvdGFsIGJpdHJhdGUgb2YgdGhlIGJ1bmRsZSovCisJbmZyZWUgPQkwOwkvKiAjIGNoYW5uZWxzIHdoaWNoCWhhdmUgbm8JcGFja2V0IGFscmVhZHkgcXVldWVkICovCiAJbmF2YWlsID0gMDsJLyogdG90YWwgIyBvZiB1c2FibGUgY2hhbm5lbHMgKG5vdCBkZXJlZ2lzdGVyZWQpICovCisJbnplcm8gPQkwOyAvKiBudW1iZXIgb2YJY2hhbm5lbHMgd2l0aCB6ZXJvIHNwZWVkIGFzc29jaWF0ZWQqLworCXRvdGZyZWUJPSAwOyAvKnRvdGFsICMgb2YgY2hhbm5lbHMgYXZhaWxhYmxlIGFuZAorCQkJCSAgKmhhdmluZyBubyBxdWV1ZWQgcGFja2V0cyBiZWZvcmUKKwkJCQkgICpzdGFydGluZyB0aGUgZnJhZ21lbnRhdGlvbiovCisKIAloZHJsZW4gPSAocHBwLT5mbGFncyAmIFNDX01QX1hTSE9SVFNFUSk/IE1QSERSTEVOX1NTTjogTVBIRFJMRU47Ci0JaSA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwcHAtPmNoYW5uZWxzLCBjbGlzdCkgeworCWkgPQkwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGNoLCAmcHBwLT5jaGFubmVscywgY2xpc3QpCXsKIAkJbmF2YWlsICs9IHBjaC0+YXZhaWwgPSAocGNoLT5jaGFuICE9IE5VTEwpOwotCQlpZiAocGNoLT5hdmFpbCkgeworCQlwY2gtPnNwZWVkID0gcGNoLT5jaGFuLT5zcGVlZDsKKwkJaWYgKHBjaC0+YXZhaWwpCXsKIAkJCWlmIChza2JfcXVldWVfZW1wdHkoJnBjaC0+ZmlsZS54cSkgfHwKLQkJCSAgICAhcGNoLT5oYWRfZnJhZykgewotCQkJCXBjaC0+YXZhaWwgPSAyOwotCQkJCSsrbmZyZWU7Ci0JCQl9Ci0JCQlpZiAoIXBjaC0+aGFkX2ZyYWcgJiYgaSA8IHBwcC0+bnhjaGFuKQotCQkJCXBwcC0+bnhjaGFuID0gaTsKKwkJCQkhcGNoLT5oYWRfZnJhZykJeworCQkJCQlpZiAocGNoLT5zcGVlZCA9PSAwKQorCQkJCQkJbnplcm8rKzsKKwkJCQkJZWxzZQorCQkJCQkJdG90c3BlZWQgKz0gcGNoLT5zcGVlZDsKKworCQkJCQlwY2gtPmF2YWlsID0gMjsKKwkJCQkJKytuZnJlZTsKKwkJCQkJKyt0b3RmcmVlOworCQkJCX0KKwkJCWlmICghcGNoLT5oYWRfZnJhZyAmJiBpCTwgcHBwLT5ueGNoYW4pCisJCQkJcHBwLT5ueGNoYW4JPSBpOwogCQl9CiAJCSsraTsKIAl9Ci0KIAkvKgotCSAqIERvbid0IHN0YXJ0IHNlbmRpbmcgdGhpcyBwYWNrZXQgdW5sZXNzIGF0IGxlYXN0IGhhbGYgb2YKLQkgKiB0aGUgY2hhbm5lbHMgYXJlIGZyZWUuICBUaGlzIGdpdmVzIG11Y2ggYmV0dGVyIFRDUAotCSAqIHBlcmZvcm1hbmNlIGlmIHdlIGhhdmUgYSBsb3Qgb2YgY2hhbm5lbHMuCisJICogRG9uJ3Qgc3RhcnQgc2VuZGluZyB0aGlzCXBhY2tldCB1bmxlc3MgYXQgbGVhc3QgaGFsZglvZgorCSAqIHRoZSBjaGFubmVscwlhcmUJZnJlZS4gIFRoaXMJZ2l2ZXMgbXVjaCBiZXR0ZXIgVENQCisJICogcGVyZm9ybWFuY2UgaWYgd2UgaGF2ZSBhCWxvdAlvZiBjaGFubmVscy4KIAkgKi8KLQlpZiAobmZyZWUgPT0gMCB8fCBuZnJlZSA8IG5hdmFpbCAvIDIpCi0JCXJldHVybiAwOwkvKiBjYW4ndCB0YWtlIG5vdywgbGVhdmUgaXQgaW4geG1pdF9wZW5kaW5nICovCisJaWYgKG5mcmVlID09IDAgfHwgbmZyZWUJPCBuYXZhaWwgLyAyKQorCQlyZXR1cm4gMDsgLyogY2FuJ3QgdGFrZSBub3csIGxlYXZlIGl0IGluIHhtaXRfcGVuZGluZwkqLwogCiAJLyogRG8gcHJvdG9jb2wgZmllbGQgY29tcHJlc3Npb24gKFhYWCB0aGlzIHNob3VsZCBiZSBvcHRpb25hbCkgKi8KLQlwID0gc2tiLT5kYXRhOwotCWxlbiA9IHNrYi0+bGVuOworCXAgPQlza2ItPmRhdGE7CisJbGVuCT0gc2tiLT5sZW47CiAJaWYgKCpwID09IDApIHsKIAkJKytwOwogCQktLWxlbjsKIAl9CiAKLQkvKgotCSAqIERlY2lkZSBvbiBmcmFnbWVudCBzaXplLgotCSAqIFdlIGNyZWF0ZSBhIGZyYWdtZW50IGZvciBlYWNoIGZyZWUgY2hhbm5lbCByZWdhcmRsZXNzIG9mCi0JICogaG93IHNtYWxsIHRoZXkgYXJlIChpLmUuIGV2ZW4gMCBsZW5ndGgpIGluIG9yZGVyIHRvIG1pbmltaXplCi0JICogdGhlIHRpbWUgdGhhdCBpdCB3aWxsIHRha2UgdG8gZGV0ZWN0IHdoZW4gYSBjaGFubmVsIGRyb3BzCi0JICogYSBmcmFnbWVudC4KLQkgKi8KLQlmcmFnc2l6ZSA9IGxlbjsKLQlpZiAobmZyZWUgPiAxKQotCQlmcmFnc2l6ZSA9IERJVl9ST1VORF9VUChmcmFnc2l6ZSwgbmZyZWUpOwotCS8qIG5iaWdnZXIgY2hhbm5lbHMgZ2V0IGZyYWdzaXplIGJ5dGVzLCB0aGUgcmVzdCBnZXQgZnJhZ3NpemUtMSwKLQkgICBleGNlcHQgaWYgbmJpZ2dlcj09MCwgdGhlbiB0aGV5IGFsbCBnZXQgZnJhZ3NpemUuICovCi0JbmJpZ2dlciA9IGxlbiAlIG5mcmVlOworCXRvdGxlbiA9IGxlbjsKKwluYmlnZ2VyCT0gbGVuICUJbmZyZWU7CiAKLQkvKiBza2lwIHRvIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBvbmUgd2UgbGFzdCB1c2VkCi0JICAgYW5kIHN0YXJ0IGF0IHRoYXQgb25lICovCisJLyogc2tpcAl0byB0aGUgY2hhbm5lbCBhZnRlciB0aGUgb25lIHdlCWxhc3QgdXNlZAorCSAgIGFuZCBzdGFydCBhdAl0aGF0IG9uZSAqLwogCWxpc3QgPSAmcHBwLT5jaGFubmVsczsKLQlmb3IgKGkgPSAwOyBpIDwgcHBwLT5ueGNoYW47ICsraSkgeworCWZvcgkoaSA9IDA7CWkgPAlwcHAtPm54Y2hhbjsgKytpKSB7CiAJCWxpc3QgPSBsaXN0LT5uZXh0OwotCQlpZiAobGlzdCA9PSAmcHBwLT5jaGFubmVscykgewotCQkJaSA9IDA7CisJCWlmIChsaXN0ID09CSZwcHAtPmNoYW5uZWxzKQl7CisJCQlpID0JMDsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi0JLyogY3JlYXRlIGEgZnJhZ21lbnQgZm9yIGVhY2ggY2hhbm5lbCAqLworCS8qIGNyZWF0ZSBhCWZyYWdtZW50IGZvciBlYWNoIGNoYW5uZWwgKi8KIAliaXRzID0gQjsKLQl3aGlsZSAobmZyZWUgPiAwIHx8IGxlbiA+IDApIHsKKwl3aGlsZSAobmZyZWUgPiAwICYmCWxlbgk+IDApIHsKIAkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCWlmIChsaXN0ID09ICZwcHAtPmNoYW5uZWxzKSB7Ci0JCQlpID0gMDsKKwkJaWYgKGxpc3QgPT0JJnBwcC0+Y2hhbm5lbHMpCXsKKwkJCWkgPQkwOwogCQkJY29udGludWU7CiAJCX0KLQkJcGNoID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY2hhbm5lbCwgY2xpc3QpOworCQlwY2gJPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjaGFubmVsLCBjbGlzdCk7CiAJCSsraTsKIAkJaWYgKCFwY2gtPmF2YWlsKQogCQkJY29udGludWU7CiAKIAkJLyoKLQkJICogU2tpcCB0aGlzIGNoYW5uZWwgaWYgaXQgaGFzIGEgZnJhZ21lbnQgcGVuZGluZyBhbHJlYWR5IGFuZAotCQkgKiB3ZSBoYXZlbid0IGdpdmVuIGEgZnJhZ21lbnQgdG8gYWxsIG9mIHRoZSBmcmVlIGNoYW5uZWxzLgorCQkgKiBTa2lwCXRoaXMgY2hhbm5lbCBpZglpdCBoYXMgYSBmcmFnbWVudCBwZW5kaW5nIGFscmVhZHkgYW5kCisJCSAqIHdlIGhhdmVuJ3QgZ2l2ZW4JYSBmcmFnbWVudCB0byBhbGwgb2YgdGhlIGZyZWUgY2hhbm5lbHMuCiAJCSAqLwogCQlpZiAocGNoLT5hdmFpbCA9PSAxKSB7Ci0JCQlpZiAobmZyZWUgPiAwKQorCQkJaWYgKG5mcmVlID4JMCkKIAkJCQljb250aW51ZTsKIAkJfSBlbHNlIHsKLQkJCS0tbmZyZWU7CiAJCQlwY2gtPmF2YWlsID0gMTsKIAkJfQogCiAJCS8qIGNoZWNrIHRoZSBjaGFubmVsJ3MgbXR1IGFuZCB3aGV0aGVyIGl0IGlzIHN0aWxsIGF0dGFjaGVkLiAqLwogCQlzcGluX2xvY2tfYmgoJnBjaC0+ZG93bmwpOwogCQlpZiAocGNoLT5jaGFuID09IE5VTEwpIHsKLQkJCS8qIGNhbid0IHVzZSB0aGlzIGNoYW5uZWwsIGl0J3MgYmVpbmcgZGVyZWdpc3RlcmVkICovCisJCQkvKiBjYW4ndCB1c2UgdGhpcyBjaGFubmVsLCBpdCdzCWJlaW5nIGRlcmVnaXN0ZXJlZCAqLworCQkJaWYgKHBjaC0+c3BlZWQgPT0gMCkKKwkJCQluemVyby0tOworCQkJZWxzZQorCQkJCXRvdHNwZWVkIC09CXBjaC0+c3BlZWQ7CisKIAkJCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAkJCXBjaC0+YXZhaWwgPSAwOwotCQkJaWYgKC0tbmF2YWlsID09IDApCisJCQl0b3RsZW4gPSBsZW47CisJCQl0b3RmcmVlLS07CisJCQluZnJlZS0tOworCQkJaWYgKC0tbmF2YWlsID09CTApCiAJCQkJYnJlYWs7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qCi0JCSAqIENyZWF0ZSBhIGZyYWdtZW50IGZvciB0aGlzIGNoYW5uZWwgb2YKLQkJICogbWluKG1heChtdHUrMi1oZHJsZW4sIDQpLCBmcmFnc2l6ZSwgbGVuKSBieXRlcy4KLQkJICogSWYgbXR1KzItaGRybGVuIDwgNCwgdGhhdCBpcyBhIHJpZGljdWxvdXNseSBzbWFsbAotCQkgKiBNVFUsIHNvIHdlIHVzZSBtdHUgPSAyICsgaGRybGVuLgorCQkqaWYgdGhlIGNoYW5uZWwgc3BlZWQgaXMgbm90IHNldCBkaXZpZGUKKwkJKnRoZSBwYWNrZXQJZXZlbmx5IGFtb25nIHRoZSBmcmVlIGNoYW5uZWxzOworCQkqb3RoZXJ3aXNlIGRpdmlkZSBpdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWVkCisJCSpvZiB0aGUgY2hhbm5lbCB3ZSBhcmUgZ29pbmcgdG8gdHJhbnNtaXQgb24KKwkJKi8KKwkJaWYgKHBjaC0+c3BlZWQgPT0gMCkgeworCQkJZmxlbiA9IHRvdGxlbi9uZnJlZQk7CisJCQlpZiAobmJpZ2dlciA+IDApIHsKKwkJCQlmbGVuKys7CisJCQkJbmJpZ2dlci0tOworCQkJfQorCQl9IGVsc2UgeworCQkJZmxlbiA9ICgoKHRvdGZyZWUgLSBuemVybykqKHRvdGxlbiArIGhkcmxlbip0b3RmcmVlKSkgLworCQkJCSgodG90c3BlZWQqdG90ZnJlZSkvcGNoLT5zcGVlZCkpIC0gaGRybGVuOworCQkJaWYgKG5iaWdnZXIgPiAwKSB7CisJCQkJZmxlbiArPSAoKHRvdGZyZWUgLSBuemVybykqcGNoLT5zcGVlZCkvdG90c3BlZWQ7CisJCQkJbmJpZ2dlciAtPSAoKHRvdGZyZWUgLSBuemVybykqcGNoLT5zcGVlZCkvCisJCQkJCQkJdG90c3BlZWQ7CisJCQl9CisJCX0KKwkJbmZyZWUtLTsKKworCQkvKgorCQkgKmNoZWNrCWlmIHdlIGFyZSBvbiB0aGUgbGFzdCBjaGFubmVsIG9yCisJCSAqd2UgZXhjZWRlZCB0aGUgbGVuZ2h0CW9mIHRoZSBkYXRhCXRvCisJCSAqZnJhZ21lbnQKIAkJICovCi0JCWlmIChmcmFnc2l6ZSA+IGxlbikKLQkJCWZyYWdzaXplID0gbGVuOwotCQlmbGVuID0gZnJhZ3NpemU7Ci0JCW10dSA9IHBjaC0+Y2hhbi0+bXR1ICsgMiAtIGhkcmxlbjsKLQkJaWYgKG10dSA8IDQpCi0JCQltdHUgPSA0OworCQlpZiAoKG5mcmVlID09IDApIHx8IChmbGVuID4gbGVuKSkKKwkJCWZsZW4gPSBsZW47CisJCS8qCisJCSAqaXQgaXMgbm90IHdvcnRoIHRvIHR4IG9uIHNsb3cgY2hhbm5lbHM6CisJCSAqaW4gdGhhdCBjYXNlIGZyb20gdGhlIHJlc3VsdGluZyBmbGVuIGFjY29yZGluZyB0byB0aGUKKwkJICphYm92ZSBmb3JtdWxhIHdpbGwgYmUgZXF1YWwgb3IgbGVzcyB0aGFuIHplcm8uCisJCSAqU2tpcCB0aGUgY2hhbm5lbCBpbiB0aGlzIGNhc2UKKwkJICovCisJCWlmIChmbGVuIDw9CTApIHsKKwkJCXBjaC0+YXZhaWwgPSAyOworCQkJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOworCQkJY29udGludWU7CisJCX0KKworCQltdHUJPSBwY2gtPmNoYW4tPm10dSArIDIgLSBoZHJsZW47CisJCWlmIChtdHUJPCA0KQorCQkJbXR1CT0gNDsKIAkJaWYgKGZsZW4gPiBtdHUpCiAJCQlmbGVuID0gbXR1OwotCQlpZiAoZmxlbiA9PSBsZW4gJiYgbmZyZWUgPT0gMCkKLQkJCWJpdHMgfD0gRTsKLQkJZnJhZyA9IGFsbG9jX3NrYihmbGVuICsgaGRybGVuICsgKGZsZW4gPT0gMCksIEdGUF9BVE9NSUMpOworCQlpZiAoZmxlbiA9PQlsZW4pCisJCQliaXRzIHw9CUU7CisJCWZyYWcgPSBhbGxvY19za2IoZmxlbiArCWhkcmxlbiArIChmbGVuID09IDApLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFmcmFnKQogCQkJZ290byBub3NrYjsKLQkJcSA9IHNrYl9wdXQoZnJhZywgZmxlbiArIGhkcmxlbik7CisJCXEgPQlza2JfcHV0KGZyYWcsIGZsZW4gKyBoZHJsZW4pOwogCi0JCS8qIG1ha2UgdGhlIE1QIGhlYWRlciAqLworCQkvKiBtYWtlCXRoZQlNUCBoZWFkZXIgKi8KIAkJcVswXSA9IFBQUF9NUCA+PiA4OwogCQlxWzFdID0gUFBQX01QOwogCQlpZiAocHBwLT5mbGFncyAmIFNDX01QX1hTSE9SVFNFUSkgewotCQkJcVsyXSA9IGJpdHMgKyAoKHBwcC0+bnhzZXEgPj4gOCkgJiAweGYpOworCQkJcVsyXSA9IGJpdHMJKyAoKHBwcC0+bnhzZXEgPj4gOCkgJiAweGYpOwogCQkJcVszXSA9IHBwcC0+bnhzZXE7CiAJCX0gZWxzZSB7CiAJCQlxWzJdID0gYml0czsKQEAgLTE0NDgsNDMgKzE0OTEsMjggQEAKIAkJCXFbNV0gPSBwcHAtPm54c2VxOwogCQl9CiAKLQkJLyoKLQkJICogQ29weSB0aGUgZGF0YSBpbi4KLQkJICogVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBhIGJ1ZyBpbiBvbGRlciB2ZXJzaW9ucyBvZgotCQkgKiB0aGUgTGludXggUFBQIG11bHRpbGluayByZWNvbnN0cnVjdGlvbiBjb2RlIHdoZXJlIGl0Ci0JCSAqIGRyb3BzIDAtbGVuZ3RoIGZyYWdtZW50cy4gIFRoZXJlZm9yZSB3ZSBtYWtlIHN1cmUgdGhlCi0JCSAqIGZyYWdtZW50IGhhcyBhdCBsZWFzdCBvbmUgYnl0ZSBvZiBkYXRhLiAgQW55IGJ5dGVzCi0JCSAqIHdlIGFkZCBpbiB0aGlzIHNpdHVhdGlvbiB3aWxsIGVuZCB1cCBhcyBwYWRkaW5nIG9uIHRoZQotCQkgKiBlbmQgb2YgdGhlIHJlY29uc3RydWN0ZWQgcGFja2V0LgotCQkgKi8KLQkJaWYgKGZsZW4gPT0gMCkKLQkJCSpza2JfcHV0KGZyYWcsIDEpID0gMDsKLQkJZWxzZQotCQkJbWVtY3B5KHEgKyBoZHJsZW4sIHAsIGZsZW4pOworCQltZW1jcHkocSArIGhkcmxlbiwgcCwgZmxlbik7CiAKIAkJLyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqLwogCQljaGFuID0gcGNoLT5jaGFuOwotCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKSB8fAotCQkgICAgIWNoYW4tPm9wcy0+c3RhcnRfeG1pdChjaGFuLCBmcmFnKSkKKwkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnBjaC0+ZmlsZS54cSkJfHwKKwkJCSFjaGFuLT5vcHMtPnN0YXJ0X3htaXQoY2hhbiwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmcGNoLT5maWxlLnhxLCBmcmFnKTsKLQkJcGNoLT5oYWRfZnJhZyA9IDE7CisJCXBjaC0+aGFkX2ZyYWcgPQkxOwogCQlwICs9IGZsZW47Ci0JCWxlbiAtPSBmbGVuOworCQlsZW4JLT0gZmxlbjsKIAkJKytwcHAtPm54c2VxOwogCQliaXRzID0gMDsKIAkJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwotCi0JCWlmICgtLW5iaWdnZXIgPT0gMCAmJiBmcmFnc2l6ZSA+IDApCi0JCQktLWZyYWdzaXplOwogCX0KLQlwcHAtPm54Y2hhbiA9IGk7CisJcHBwLT5ueGNoYW4JPSBpOwogCiAJcmV0dXJuIDE7CiAKICBub3NrYjoKIAlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CiAJaWYgKHBwcC0+ZGVidWcgJiAxKQotCQlwcmludGsoS0VSTl9FUlIgIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcbiIpOworCQlwcmludGsoS0VSTl9FUlIJIlBQUDogbm8gbWVtb3J5CShmcmFnbWVudClcbiIpOwogCSsrcHBwLT5kZXYtPnN0YXRzLnR4X2Vycm9yczsKIAkrK3BwcC0+bnhzZXE7CiAJcmV0dXJuIDE7CS8qIGFiYW5kb24gdGhlIGZyYW1lICovCkBAIC0yNjU4LDggKzI2ODYsNyBAQAogCXBwcC0+YWN0aXZlX2ZpbHRlciA9IE5VTEw7CiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi8KIAotCWlmIChwcHAtPnhtaXRfcGVuZGluZykKLQkJa2ZyZWVfc2tiKHBwcC0+eG1pdF9wZW5kaW5nKTsKKwlrZnJlZV9za2IocHBwLT54bWl0X3BlbmRpbmcpOwogCiAJZnJlZV9uZXRkZXYocHBwLT5kZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggMWU4OTJiNy4uZDJmYTJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIHsKIAlzdHJ1Y3Qgc3luY3BwcCAqYXA7CiAJaW50IGVycjsKKwlpbnQgc3BlZWQ7CiAKIAlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIzNCw2ICsyMzUsOCBAQAogCWFwLT5jaGFuLm9wcyA9ICZzeW5jX29wczsKIAlhcC0+Y2hhbi5tdHUgPSBQUFBfTVJVOwogCWFwLT5jaGFuLmhkcmxlbiA9IDI7CS8qIGZvciBBL0MgYnl0ZXMgKi8KKwlzcGVlZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYXAtPmNoYW4uc3BlZWQgPSBzcGVlZDsKIAllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYXAtPmNoYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yODEsOCArMjg0LDcgQEAKIAogCXBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKIAlza2JfcXVldWVfcHVyZ2UoJmFwLT5ycXVldWUpOwotCWlmIChhcC0+dHBrdCkKLQkJa2ZyZWVfc2tiKGFwLT50cGt0KTsKKwlrZnJlZV9za2IoYXAtPnRwa3QpOwogCWtmcmVlKGFwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggZTI5NjhmMC4uZjAwMzFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC01MTMsMTcgKzUxMywxNyBAQAogCXJldHVybiBORVRfUlhfU1VDQ0VTUzsgLyogTGllcy4uLiA6LSkgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZXNfcHR5cGUgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lc19wdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX1NFUyksCiAJLmZ1bmMJPSBwcHBvZV9yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lZF9wdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VkX3B0eXBlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBfRElTQyksCiAJLmZ1bmMJPSBwcHBvZV9kaXNjX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG8gcHBwb2Vfc2tfcHJvdG8gPSB7CitzdGF0aWMgc3RydWN0IHByb3RvIHBwcG9lX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJICA9ICJQUFBPRSIsCiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IHBwcG94X3NvY2spLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCBlNmZkY2U5Li5mY2IxNTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtMjgsOCArMjgsOCBAQAogICAgICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUUxHRV9WRU5ET1JfSUQgICAgMHgxMDc3Ci0jZGVmaW5lIFFMR0VfREVWSUNFX0lEICAgIDB4ODAxMgotCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMTIJMHg4MDEyCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMDAJMHg4MDAwCiAjZGVmaW5lIE1BWF9DUFVTIDgKICNkZWZpbmUgTUFYX1RYX1JJTkdTIE1BWF9DUFVTCiAjZGVmaW5lIE1BWF9SWF9SSU5HUyAoKE1BWF9DUFVTICogMikgKyAxKQpAQCAtMTY0LDcgKzE2NCw3IEBACiAJQ1NSX1JQID0gKDEgPDwgMTApLAogCUNTUl9DTURfUEFSTV9TSElGVCA9IDIyLAogCUNTUl9DTURfTk9QID0gMHgwMDAwMDAwMCwKLQlDU1JfQ01EX1NFVF9SU1QgPSAweDEwMDAwMDAsCisJQ1NSX0NNRF9TRVRfUlNUID0gMHgxMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9SU1QgPSAweDIwMDAwMDAwLAogCUNTUl9DTURfU0VUX1BBVVNFID0gMHgzMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9QQVVTRSA9IDB4NDAwMDAwMDAsCkBAIC00MjQsNyArNDI0LDcgQEAKIAlSWF9TWU1CT0xfRVJSID0gMHgwMDAwMDM3MCwKIAlSWF9NQUNfRVJSID0gMHgwMDAwMDM3OCwKIAlSWF9DVExfUEtUUyA9IDB4MDAwMDAzODAsCi0JUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODQsCisJUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODgsCiAJUlhfNjRfUEtUUyA9IDB4MDAwMDAzOTAsCiAJUlhfNjVfVE9fMTI3X1BLVFMgPSAweDAwMDAwMzk4LAogCVJYXzEyOF8yNTVfUEtUUyA9IDB4MDAwMDAzYTAsCkBAIC03MzMsNiArNzMzLDExIEBACiAJQUVOX0xJTktfRE9XTiA9IDB4MDAwMDgwMTIsCiAJQUVOX0lEQ19DTVBMVCA9IDB4MDAwMDgxMDAsCiAJQUVOX0lEQ19SRVEgPSAweDAwMDA4MTAxLAorCUFFTl9JRENfRVhUID0gMHgwMDAwODEwMiwKKwlBRU5fRENCWF9DSEcgPSAweDAwMDA4MTEwLAorCUFFTl9BRU5fTE9TVCA9IDB4MDAwMDgxMjAsCisJQUVOX0FFTl9TRlBfSU4gPSAweDAwMDA4MTMwLAorCUFFTl9BRU5fU0ZQX09VVCA9IDB4MDAwMDgxMzEsCiAJQUVOX0ZXX0lOSVRfRE9ORSA9IDB4MDAwMDg0MDAsCiAJQUVOX0ZXX0lOSVRfRkFJTCA9IDB4MDAwMDg0MDEsCiAKQEAgLTc0Miw0MCArNzQ3LDQ4IEBACiAJTUJfQ01EX01CX1RFU1QgPSAweDAwMDAwMDA2LAogCU1CX0NNRF9DU1VNX1RFU1QgPSAweDAwMDAwMDA3LAkvKiBWZXJpZnkgQ2hlY2tzdW0gKi8KIAlNQl9DTURfQUJPVVRfRlcgPSAweDAwMDAwMDA4LAorCU1CX0NNRF9DT1BZX1JJU0NfUkFNID0gMHgwMDAwMDAwYSwKIAlNQl9DTURfTE9BRF9SSVNDX1JBTSA9IDB4MDAwMDAwMGIsCiAJTUJfQ01EX0RVTVBfUklTQ19SQU0gPSAweDAwMDAwMDBjLAogCU1CX0NNRF9XUklURV9SQU0gPSAweDAwMDAwMDBkLAorCU1CX0NNRF9JTklUX1JJU0NfUkFNID0gMHgwMDAwMDAwZSwKIAlNQl9DTURfUkVBRF9SQU0gPSAweDAwMDAwMDBmLAogCU1CX0NNRF9TVE9QX0ZXID0gMHgwMDAwMDAxNCwKIAlNQl9DTURfTUFLRV9TWVNfRVJSID0gMHgwMDAwMDAyYSwKKwlNQl9DTURfV1JJVEVfU0ZQID0gMHgwMDAwMDAzMCwKKwlNQl9DTURfUkVBRF9TRlAgPSAweDAwMDAwMDMxLAogCU1CX0NNRF9JTklUX0ZXID0gMHgwMDAwMDA2MCwKLQlNQl9DTURfR0VUX0lOSVRfQ0IgPSAweDAwMDAwMDYxLAorCU1CX0NNRF9HRVRfSUZDQiA9IDB4MDAwMDAwNjEsCiAJTUJfQ01EX0dFVF9GV19TVEFURSA9IDB4MDAwMDAwNjksCiAJTUJfQ01EX0lEQ19SRVEgPSAweDAwMDAwMTAwLAkvKiBJbnRlci1Ecml2ZXIgQ29tbXVuaWNhdGlvbiAqLwogCU1CX0NNRF9JRENfQUNLID0gMHgwMDAwMDEwMSwJLyogSW50ZXItRHJpdmVyIENvbW11bmljYXRpb24gKi8KIAlNQl9DTURfU0VUX1dPTF9NT0RFID0gMHgwMDAwMDExMCwJLyogV2FrZSBPbiBMYW4gKi8KLQlNQl9XT0xfRElTQUJMRSA9IDB4MDAwMDAwMDAsCi0JTUJfV09MX01BR0lDX1BLVCA9IDB4MDAwMDAwMDEsCi0JTUJfV09MX0ZMVFIgPSAweDAwMDAwMDAyLAotCU1CX1dPTF9VQ0FTVCA9IDB4MDAwMDAwMDQsCi0JTUJfV09MX01DQVNUID0gMHgwMDAwMDAwOCwKLQlNQl9XT0xfQkNBU1QgPSAweDAwMDAwMDEwLAotCU1CX1dPTF9MSU5LX1VQID0gMHgwMDAwMDAyMCwKLQlNQl9XT0xfTElOS19ET1dOID0gMHgwMDAwMDA0MCwKKwlNQl9XT0xfRElTQUJMRSA9IDAsCisJTUJfV09MX01BR0lDX1BLVCA9ICgxIDw8IDEpLAorCU1CX1dPTF9GTFRSID0gKDEgPDwgMiksCisJTUJfV09MX1VDQVNUID0gKDEgPDwgMyksCisJTUJfV09MX01DQVNUID0gKDEgPDwgNCksCisJTUJfV09MX0JDQVNUID0gKDEgPDwgNSksCisJTUJfV09MX0xJTktfVVAgPSAoMSA8PCA2KSwKKwlNQl9XT0xfTElOS19ET1dOID0gKDEgPDwgNyksCiAJTUJfQ01EX1NFVF9XT0xfRkxUUiA9IDB4MDAwMDAxMTEsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLwotCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLworCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsIC8qIFdha2UgT24gTGFuIEZpbHRlciAqLwogCU1CX0NNRF9TRVRfV09MX01BR0lDID0gMHgwMDAwMDExMywJLyogV2FrZSBPbiBMYW4gTWFnaWMgUGFja2V0ICovCi0JTUJfQ01EX0NMRUFSX1dPTF9NQUdJQyA9IDB4MDAwMDAxMTQsCS8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9DTEVBUl9XT0xfTUFHSUMgPSAweDAwMDAwMTE0LC8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9TRVRfV09MX0lNTUVEID0gMHgwMDAwMDExNSwKIAlNQl9DTURfUE9SVF9SRVNFVCA9IDB4MDAwMDAxMjAsCiAJTUJfQ01EX1NFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjIsCiAJTUJfQ01EX0dFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjMsCi0JTUJfQ01EX1NFVF9BU0lDX1ZPTFRTID0gMHgwMDAwMDEzMCwKLQlNQl9DTURfR0VUX1NOU19EQVRBID0gMHgwMDAwMDEzMSwJLyogVGVtcCBhbmQgVm9sdCBTZW5zZSBkYXRhLiAqLworCU1CX0NNRF9HRVRfTElOS19TVFMgPSAweDAwMDAwMTI0LAogCiAJLyogTWFpbGJveCBDb21tYW5kIFN0YXR1cy4gKi8KIAlNQl9DTURfU1RTX0dPT0QgPSAweDAwMDA0MDAwLAkvKiBTdWNjZXNzLiAqLwogCU1CX0NNRF9TVFNfSU5UUk1EVCA9IDB4MDAwMDEwMDAsCS8qIEludGVybWVkaWF0ZSBDb21wbGV0ZS4gKi8KLQlNQl9DTURfU1RTX0VSUiA9IDB4MDAwMDQwMDUsCS8qIEVycm9yLiAqLworCU1CX0NNRF9TVFNfSU5WTERfQ01EID0gMHgwMDAwNDAwMSwJLyogSW52YWxpZC4gKi8KKwlNQl9DTURfU1RTX1hGQ19FUlIgPSAweDAwMDA0MDAyLAkvKiBJbnRlcmZhY2UgRXJyb3IuICovCisJTUJfQ01EX1NUU19DU1VNX0VSUiA9IDB4MDAwMDQwMDMsCS8qIENzdW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19FUlIgPSAweDAwMDA0MDA1LAkvKiBTeXN0ZW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19QQVJBTV9FUlIgPSAweDAwMDA0MDA2LAkvKiBQYXJhbWV0ZXIgRXJyb3IuICovCiB9OwogCiBzdHJ1Y3QgbWJveF9wYXJhbXMgewpAQCAtNzg1LDcgKzc5OCw3IEBACiAJaW50IG91dF9jb3VudDsKIH07CiAKLXN0cnVjdCBmbGFzaF9wYXJhbXMgeworc3RydWN0IGZsYXNoX3BhcmFtc184MDEyIHsKIAl1OCBkZXZfaWRfc3RyWzRdOwogCV9fbGUxNiBzaXplOwogCV9fbGUxNiBjc3VtOwpAQCAtNzk1LDYgKzgwOCw0MyBAQAogCV9fbGUxNiByZXM7CiB9OwogCisvKiA4MDAwIGRldmljZSdzIGZsYXNoIGlzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICogYXQgYSBkaWZmZXJlbnQgb2Zmc2V0IGluIGZsYXNoLgorICovCisjZGVmaW5lIEZVTkMwX0ZMQVNIX09GRlNFVCAweDE0MDIwMAorI2RlZmluZSBGVU5DMV9GTEFTSF9PRkZTRVQgMHgxNDA2MDAKKworLyogRmxhc2ggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuICovCitzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgeworCXU4IGRldl9pZF9zdHJbNF07CS8qICI4MDAwIiAqLworCV9fbGUxNiB2ZXI7CisJX19sZTE2IHNpemU7CisJX19sZTE2IGNzdW07CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMTYgdG90YWxfc2l6ZTsKKwlfX2xlMTYgZW50cnlfY291bnQ7CisJdTggZGF0YV90eXBlMDsKKwl1OCBkYXRhX3NpemUwOworCXU4IG1hY19hZGRyWzZdOworCXU4IGRhdGFfdHlwZTE7CisJdTggZGF0YV9zaXplMTsKKwl1OCBtYWNfYWRkcjFbNl07CisJdTggZGF0YV90eXBlMjsKKwl1OCBkYXRhX3NpemUyOworCV9fbGUxNiB2bGFuX2lkOworCXU4IGRhdGFfdHlwZTM7CisJdTggZGF0YV9zaXplMzsKKwlfX2xlMTYgbGFzdDsKKwl1OCByZXNlcnZlZDFbNDY0XTsKKwlfX2xlMTYJc3Vic3lzX3Zlbl9pZDsKKwlfX2xlMTYJc3Vic3lzX2Rldl9pZDsKKwl1OCByZXNlcnZlZDJbNF07Cit9OworCit1bmlvbiBmbGFzaF9wYXJhbXMgeworCXN0cnVjdCBmbGFzaF9wYXJhbXNfODAxMiBmbGFzaF9wYXJhbXNfODAxMjsKKwlzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgZmxhc2hfcGFyYW1zXzgwMDA7Cit9OwogCiAvKgogICogZG9vcmJlbGwgc3BhY2UgZm9yIHRoZSByeCByaW5nIGNvbnRleHQKQEAgLTkyNyw2ICs5NzcsNyBAQAogCXU4IGZsYWdzMTsKICNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX09JCTB4MDEJLyogT3ZlcmlkZSBpbnRyIGRlbGF5ICovCiAjZGVmaW5lIElCX01BQ19JT0NCX1JTUF9JCTB4MDIJLyogRGlzYmxlIEludHIgR2VuZXJhdGlvbiAqLworI2RlZmluZSBJQl9NQUNfQ1NVTV9FUlJfTUFTSyAweDFjCS8qIEEgbWFzayB0byB1c2UgZm9yIGNzdW0gZXJycyAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfVEUJMHgwNAkvKiBDaGVja3N1bSBlcnJvciAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfTlUJMHgwOAkvKiBObyBjaGVja3N1bSByY3ZkICovCiAjZGVmaW5lIElCX01BQ19JT0NCX1JTUF9JRQkweDEwCS8qIElQdjQgY2hlY2tzdW0gZXJyb3IgKi8KQEAgLTk2Nyw2ICsxMDE4LDcgQEAKIAlfX2xlMTYgdmxhbl9pZDsJCS8qIDEyIGJpdHMgKi8KICNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX0MJMHgxMDAwCS8qIFZMQU4gQ0ZJIGJpdCAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfQ09TX1NISUZUCTEyCS8qIGNsYXNzIG9mIHNlcnZpY2UgdmFsdWUgKi8KKyNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX1ZMQU5fTUFTSwkweDBmZmZmCiAKIAlfX2xlMTYgcmVzZXJ2ZWQxOwogCV9fbGUzMiByZXNlcnZlZDJbNl07CkBAIC0xMDMyLDYgKzEwODQsNyBAQAogI2RlZmluZSBRX0xFTl9DUFBfMTYJMHgwMDAxCiAjZGVmaW5lIFFfTEVOX0NQUF8zMgkweDAwMDIKICNkZWZpbmUgUV9MRU5fQ1BQXzY0CTB4MDAwMworI2RlZmluZSBRX0xFTl9DUFBfNTEyCTB4MDAwNgogCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUV9QUklfU0hJRlQJMQogI2RlZmluZSBRX0ZMQUdTX0xDCTB4MTAwMApAQCAtMTMxMywyNyArMTM2Niw0OSBAQAogCVFMX0RNQTY0ID0gKDEgPDwgNSksCiAJUUxfUFJPTUlTQ1VPVVMgPSAoMSA8PCA2KSwKIAlRTF9BTExNVUxUSSA9ICgxIDw8IDcpLAorCVFMX1BPUlRfQ0ZHID0gKDEgPDwgOCksCisJUUxfQ0FNX1JUX1NFVCA9ICgxIDw8IDkpLAogfTsKIAogLyogbGlua19zdGF0dXMgYml0IGRlZmluaXRpb25zICovCiBlbnVtIHsKLQlMT09QQkFDS19NQVNLID0gMHgwMDAwMDcwMCwKLQlMT09QQkFDS19QQ1MgPSAweDAwMDAwMTAwLAotCUxPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCi0JTE9PUEJBQ0tfRVhUID0gMHgwMDAwMDMwMCwKLQlQQVVTRV9NQVNLID0gMHgwMDAwMDBjMCwKLQlQQVVTRV9TVEQgPSAweDAwMDAwMDQwLAotCVBBVVNFX1BSSSA9IDB4MDAwMDAwODAsCi0JU1BFRURfTUFTSyA9IDB4MDAwMDAwMzgsCi0JU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAotCVNQRUVEXzFHYiA9IDB4MDAwMDAwMDgsCi0JU1BFRURfMTBHYiA9IDB4MDAwMDAwMTAsCi0JTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAotCUxJTktfVFlQRV9YRkkgPSAweDAwMDAwMDAxLAotCUxJTktfVFlQRV9YQVVJID0gMHgwMDAwMDAwMiwKLQlMSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKLQlMSU5LX1RZUEVfWEFVSV9CUCA9IDB4MDAwMDAwMDQsCi0JTElOS19UWVBFXzEwR0JBU0VUID0gMHgwMDAwMDAwNSwKKwlTVFNfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDA3MDAsCisJU1RTX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAxMDAsCisJU1RTX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCisJU1RTX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAzMDAsCisJU1RTX1BBVVNFX01BU0sgPSAweDAwMDAwMGMwLAorCVNUU19QQVVTRV9TVEQgPSAweDAwMDAwMDQwLAorCVNUU19QQVVTRV9QUkkgPSAweDAwMDAwMDgwLAorCVNUU19TUEVFRF9NQVNLID0gMHgwMDAwMDAzOCwKKwlTVFNfU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAorCVNUU19TUEVFRF8xR2IgPSAweDAwMDAwMDA4LAorCVNUU19TUEVFRF8xMEdiID0gMHgwMDAwMDAxMCwKKwlTVFNfTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAorCVNUU19MSU5LX1RZUEVfWEZJID0gMHgwMDAwMDAwMSwKKwlTVFNfTElOS19UWVBFX1hBVUkgPSAweDAwMDAwMDAyLAorCVNUU19MSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKKwlTVFNfTElOS19UWVBFX1hBVUlfQlAgPSAweDAwMDAwMDA0LAorCVNUU19MSU5LX1RZUEVfMTBHQkFTRVQgPSAweDAwMDAwMDA1LAorfTsKKworLyogbGlua19jb25maWcgYml0IGRlZmluaXRpb25zICovCitlbnVtIHsKKwlDRkdfSlVNQk9fRlJBTUVfU0laRSA9IDB4MDAwMTAwMDAsCisJQ0ZHX1BBVVNFX01BU0sgPSAweDAwMDAwMDYwLAorCUNGR19QQVVTRV9TVEQgPSAweDAwMDAwMDIwLAorCUNGR19QQVVTRV9QUkkgPSAweDAwMDAwMDQwLAorCUNGR19EQ0JYID0gMHgwMDAwMDAxMCwKKwlDRkdfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDAwMDcsCisJQ0ZHX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAwMDIsCisJQ0ZHX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAwMDQsCisJQ0ZHX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAwMDYsCisJQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkUgPSAweDAwMDAyNTgwLAorfTsKKworc3RydWN0IG5pY19vcGVyYXRpb25zIHsKKworCWludCAoKmdldF9mbGFzaCkgKHN0cnVjdCBxbF9hZGFwdGVyICopOworCWludCAoKnBvcnRfaW5pdGlhbGl6ZSkgKHN0cnVjdCBxbF9hZGFwdGVyICopOwogfTsKIAogLyoKQEAgLTEzNzYsNiArMTQ1MSw4IEBACiAKIAl1MzIgbWFpbGJveF9pbjsKIAl1MzIgbWFpbGJveF9vdXQ7CisJc3RydWN0IG1ib3hfcGFyYW1zIGlkY19tYmM7CisJc3RydWN0IG11dGV4CW1waV9tdXRleDsKIAogCWludCB0eF9yaW5nX3NpemU7CiAJaW50IHJ4X3Jpbmdfc2l6ZTsKQEAgLTE0MTEsOCArMTQ4OCwxMCBAQAogCXUzMiBwb3J0X2xpbmtfdXA7CiAJdTMyIHBvcnRfaW5pdDsKIAl1MzIgbGlua19zdGF0dXM7CisJdTMyIGxpbmtfY29uZmlnOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKIAotCXN0cnVjdCBmbGFzaF9wYXJhbXMgZmxhc2g7CisJdW5pb24gZmxhc2hfcGFyYW1zIGZsYXNoOwogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnFfd29ya3F1ZXVlOwpAQCAtMTQyMCw2ICsxNDk5LDExIEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBhc2ljX3Jlc2V0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfcmVzZXRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX3BvcnRfY2ZnX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfaWRjX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gaWRlX2NvbXBsZXRpb247CisJc3RydWN0IG5pY19vcGVyYXRpb25zICpuaWNfb3BzOworCXUxNiBkZXZpY2VfaWQ7CiB9OwogCiAvKgpAQCAtMTQ5Miw2ICsxNTc2LDEwIEBACiB1MzIgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7CiB2b2lkIHFsX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgcWxfcmVhZF94Z21hY19yZWc2NChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTY0ICpkYXRhKTsKK3ZvaWQgcWxfbXBpX2lkY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgcWxfbWJfZ2V0X2Z3X3N0YXRlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiAKICNpZiAxCiAjZGVmaW5lIFFMX0FMTF9EVU1QCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKaW5kZXggMzc5Yjg5NS4uNDBhNzBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwpAQCAtODMsNiArODMsMTAgQEAKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWVbM107CisKKwlpID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHFsX2dldF9tYWNfYWRkcl9yZWcocWRldiwgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKQEAgLTExMSwxMiArMTE1LDE2IEBACiAJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGksIHZhbHVlWzFdLCB2YWx1ZVswXSk7CiAJCX0KIAl9CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiB9CiAKIHZvaWQgcWxfZHVtcF9yb3V0aW5nX2VudHJpZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IGk7CiAJdTMyIHZhbHVlOworCWkgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXZhbHVlID0gMDsKIAkJaWYgKHFsX2dldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAmdmFsdWUpKSB7CkBAIC0xMzEsNiArMTM5LDcgQEAKIAkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgaSwgdmFsdWUpOwogCQl9CiAJfQorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIH0KIAogdm9pZCBxbF9kdW1wX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCA5ZDkyMmUyLi5hNTAwNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGw7CiAJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQlpZiAoKHFkZXYtPmxpbmtfc3RhdHVzICYgTElOS19UWVBFX01BU0spID09IExJTktfVFlQRV8xMEdCQVNFVCkgeworCWlmICgocWRldi0+bGlua19zdGF0dXMgJiBTVFNfTElOS19UWVBFX01BU0spID09CisJCQkJU1RTX0xJTktfVFlQRV8xMEdCQVNFVCkgewogCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BdXRvbmVnKTsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IGZkNTE1YWYuLjE3MGQzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtNTgsOCArNTgsOCBAQAogICAgIE5FVElGX01TR19JRlVQIHwKICAgICBORVRJRl9NU0dfUlhfRVJSIHwKICAgICBORVRJRl9NU0dfVFhfRVJSIHwKLSAgICBORVRJRl9NU0dfVFhfUVVFVUVEIHwKLSAgICBORVRJRl9NU0dfSU5UUiB8IE5FVElGX01TR19UWF9ET05FIHwgTkVUSUZfTVNHX1JYX1NUQVRVUyB8CisvKiAgTkVUSUZfTVNHX1RYX1FVRVVFRCB8ICovCisvKiAgTkVUSUZfTVNHX0lOVFIgfCBORVRJRl9NU0dfVFhfRE9ORSB8IE5FVElGX01TR19SWF9TVEFUVVMgfCAqLwogLyogTkVUSUZfTVNHX1BLVERBVEEgfCAqLwogICAgIE5FVElGX01TR19IVyB8IE5FVElGX01TR19XT0wgfCAwOwogCkBAIC03NSw3ICs3NSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycV90eXBlLCAiMCA9IE1TSS1YLCAxID0gTVNJLCAyID0gTGVnYWN5LiIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcWxnZV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSURfODAxMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDAwKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KIH07CkBAIC0yNDcsOSArMjQ4LDYgQEAKIAl1MzIgb2Zmc2V0ID0gMDsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUFDX0FERFJfVFlQRV9NVUxUSV9NQUM6CiAJY2FzZSBNQUNfQUREUl9UWVBFX0NBTV9NQUM6CkBAIC0zMDgsNyArMzA2LDYgQEAKIAkJc3RhdHVzID0gLUVQRVJNOwogCX0KIGV4aXQ6Ci0JcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzIxLDkgKzMxOCw2IEBACiAJdTMyIG9mZnNldCA9IDA7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBNQUNfQUREUl9UWVBFX01VTFRJX01BQzoKIAljYXNlIE1BQ19BRERSX1RZUEVfQ0FNX01BQzoKQEAgLTMzNCw3ICszMjgsNyBAQAogCQkJICAgIChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwKIAkJCSAgICAoYWRkcls1XSk7CiAKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIkFkZGluZyAlcyBhZGRyZXNzICVwTSIKIAkJCQkiIGF0IGluZGV4ICVkIGluIHRoZSBDQU0uXG4iLAogCQkJCSgodHlwZSA9PQpAQCAtNDE1LDcgKzQwOSw2IEBACiAJCXN0YXR1cyA9IC1FUEVSTTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQyNiwxMCArNDE5LDYgQEAKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXhpdDsKLQogCXN0YXR1cyA9IHFsX3dhaXRfcmVnX3JkeShxZGV2LCBSVF9JRFgsIFJUX0lEWF9NVywgMCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBleGl0OwpAQCAtNDQxLDcgKzQzMCw2IEBACiAJCWdvdG8gZXhpdDsKIAkqdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgUlRfREFUQSk7CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC00NTMsMTMgKzQ0MSw5IEBACiBzdGF0aWMgaW50IHFsX3NldF9yb3V0aW5nX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGluZGV4LCB1MzIgbWFzaywKIAkJCSAgICAgIGludCBlbmFibGUpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsgLyogUmV0dXJuIGVycm9yIGlmIG5vIG1hc2sgbWF0Y2guICovCiAJdTMyIHZhbHVlID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0KIAlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAogCQkiJXMgJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMgbWFzayAlcyB0aGUgcm91dGluZyByZWcuXG4iLAogCQkoZW5hYmxlID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciKSwKQEAgLTU1NSw3ICs1MzksNiBAQAogCQlxbF93cml0ZTMyKHFkZXYsIFJUX0RBVEEsIGVuYWJsZSA/IG1hc2sgOiAwKTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MDQsNyArNTg3LDYgQEAKIHN0YXRpYyB1MzIgcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpCiB7CiAJdTMyIHZhciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBod19mbGFnczsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHg7CiAKIAkvKiBIVyBkaXNhYmxlcyBmb3IgdXMgaWYgd2UncmUgTVNJWCBtdWx0aSBpbnRlcnJ1cHRzIGFuZApAQCAtNjE0LDE0ICs1OTYsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAljdHggPSBxZGV2LT5pbnRyX2NvbnRleHQgKyBpbnRyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlpZiAoIWF0b21pY19yZWFkKCZjdHgtPmlycV9jbnQpKSB7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9FTiwKIAkJY3R4LT5pbnRyX2Rpc19tYXNrKTsKIAkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CiAJfQogCWF0b21pY19pbmMoJmN0eC0+aXJxX2NudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlyZXR1cm4gdmFyOwogfQogCkBAIC02NDEsNiArNjIzLDI4IEBACiAKIH0KIAorc3RhdGljIGludCBxbF92YWxpZGF0ZV9mbGFzaChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHNpemUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgc3RhdHVzLCBpOworCXUxNiBjc3VtID0gMDsKKwlfX2xlMTYgKmZsYXNoID0gKF9fbGUxNiAqKSZxZGV2LT5mbGFzaDsKKworCXN0YXR1cyA9IHN0cm5jbXAoKGNoYXIgKikmcWRldi0+Zmxhc2gsIHN0ciwgNCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgZmxhc2ggc2lnbmF0dXJlLlxuIik7CisJCXJldHVybglzdGF0dXM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJY3N1bSArPSBsZTE2X3RvX2NwdSgqZmxhc2grKyk7CisKKwlpZiAoY3N1bSkKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkiSW52YWxpZCBmbGFzaCBjaGVja3N1bSwgY3N1bSA9IDB4JS4wNHguXG4iLCBjc3VtKTsKKworCXJldHVybiBjc3VtOworfQorCiBzdGF0aWMgaW50IHFsX3JlYWRfZmxhc2hfd29yZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgaW50IG9mZnNldCwgX19sZTMyICpkYXRhKQogewogCWludCBzdGF0dXMgPSAwOwpAQCAtNjY1LDIzICs2NjksNzUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHFsX2dldF9mbGFzaF9wYXJhbXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCitzdGF0aWMgaW50IHFsX2dldF84MDAwX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwl1MzIgaSwgc2l6ZTsKKwlpbnQgc3RhdHVzOworCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CisJdTMyIG9mZnNldDsKKworCS8qIEdldCBmbGFzaCBvZmZzZXQgZm9yIGZ1bmN0aW9uIGFuZCBhZGp1c3QKKwkgKiBmb3IgZHdvcmQgYWNjZXNzLgorCSAqLworCWlmICghcWRldi0+ZnVuYykKKwkJb2Zmc2V0ID0gRlVOQzBfRkxBU0hfT0ZGU0VUIC8gc2l6ZW9mKHUzMik7CisJZWxzZQorCQlvZmZzZXQgPSBGVU5DMV9GTEFTSF9PRkZTRVQgLyBzaXplb2YodTMyKTsKKworCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MzIpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHArKykgeworCQlzdGF0dXMgPSBxbF9yZWFkX2ZsYXNoX3dvcmQocWRldiwgaStvZmZzZXQsIHApOworCQlpZiAoc3RhdHVzKSB7CisJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkVycm9yIHJlYWRpbmcgZmxhc2guXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMDAiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDAwLm1hY19hZGRyKSkgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShxZGV2LT5uZGV2LT5kZXZfYWRkciwKKwkJcWRldi0+Zmxhc2guZmxhc2hfcGFyYW1zXzgwMDAubWFjX2FkZHIsCisJCXFkZXYtPm5kZXYtPmFkZHJfbGVuKTsKKworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9GTEFTSF9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX2dldF84MDEyX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlpbnQgaTsKIAlpbnQgc3RhdHVzOwogCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CiAJdTMyIG9mZnNldCA9IDA7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MzIpOwogCiAJLyogU2Vjb25kIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBmb2xsb3cgdGhlIGZpcnN0CiAJICogZnVuY3Rpb24ncy4KIAkgKi8KIAlpZiAocWRldi0+ZnVuYykKLQkJb2Zmc2V0ID0gc2l6ZW9mKHFkZXYtPmZsYXNoKSAvIHNpemVvZih1MzIpOworCQlvZmZzZXQgPSBzaXplOwogCiAJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fRkxBU0hfTUFTSykpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihxZGV2LT5mbGFzaCkgLyBzaXplb2YodTMyKTsgaSsrLCBwKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwKyspIHsKIAkJc3RhdHVzID0gcWxfcmVhZF9mbGFzaF93b3JkKHFkZXYsIGkrb2Zmc2V0LCBwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CkBAIC02ODksNiArNzQ1LDI1IEBACiAJCX0KIAogCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMTIiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDEyLm1hY19hZGRyKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KHFkZXYtPm5kZXYtPmRldl9hZGRyLAorCQlxZGV2LT5mbGFzaC5mbGFzaF9wYXJhbXNfODAxMi5tYWNfYWRkciwKKwkJcWRldi0+bmRldi0+YWRkcl9sZW4pOworCiBleGl0OgogCXFsX3NlbV91bmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spOwogCXJldHVybiBzdGF0dXM7CkBAIC03NTksMTMgKzgzNCwyNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgcWxfODAwMF9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdGF0dXMgPSBxbF9tYl9nZXRfZndfc3RhdGUocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCS8qIFdha2UgdXAgYSB3b3JrZXIgdG8gZ2V0L3NldCB0aGUgVFgvUlggZnJhbWUgc2l6ZXMuICovCisJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyogVGFrZSB0aGUgTUFDIENvcmUgb3V0IG9mIHJlc2V0LgogICogRW5hYmxlIHN0YXRpc3RpY3MgY291bnRpbmcuCiAgKiBUYWtlIHRoZSB0cmFuc21pdHRlci9yZWNlaXZlciBvdXQgb2YgcmVzZXQuCiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIGRvbmUgaW4gdGhlIE1QSSBmaXJtd2FyZSBhdCBhCiAgKiBsYXRlciBkYXRlLgogICovCi1zdGF0aWMgaW50IHFsX3BvcnRfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3N0YXRpYyBpbnQgcWxfODAxMl9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIGRhdGE7CkBAIC04ODEsNyArOTY4LDggQEAKIC8qIFByb2Nlc3MgKHJlZmlsbCkgYSBsYXJnZSBidWZmZXIgcXVldWUuICovCiBzdGF0aWMgdm9pZCBxbF91cGRhdGVfbGJxKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKLQlpbnQgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgc3RhcnRfaWR4ID0gY2xlYW5faWR4OwogCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYzsKIAl1NjQgbWFwOwogCWludCBpOwpAQCAtOTI4LDE5ICsxMDE2LDIzIEBACiAJCXJ4X3JpbmctPmxicV9wcm9kX2lkeCArPSAxNjsKIAkJaWYgKHJ4X3JpbmctPmxicV9wcm9kX2lkeCA9PSByeF9yaW5nLT5sYnFfbGVuKQogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKKwkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OworCX0KKworCWlmIChzdGFydF9pZHggIT0gY2xlYW5faWR4KSB7CiAJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKIAkJCSJsYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKIAkJcWxfd3JpdGVfZGJfcmVnKHJ4X3JpbmctPmxicV9wcm9kX2lkeCwKIAkJCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHhfZGJfcmVnKTsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OwogCX0KIH0KIAogLyogUHJvY2VzcyAocmVmaWxsKSBhIHNtYWxsIGJ1ZmZlciBxdWV1ZS4gKi8KIHN0YXRpYyB2b2lkIHFsX3VwZGF0ZV9zYnEoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWludCBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBzdGFydF9pZHggPSBjbGVhbl9pZHg7CiAJc3RydWN0IGJxX2Rlc2MgKnNicV9kZXNjOwogCXU2NCBtYXA7CiAJaW50IGk7CkBAIC05OTAsMTMgKzEwODIsMTUgQEAKIAkJcnhfcmluZy0+c2JxX3Byb2RfaWR4ICs9IDE2OwogCQlpZiAocnhfcmluZy0+c2JxX3Byb2RfaWR4ID09IHJ4X3JpbmctPnNicV9sZW4pCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSAwOworCQlyeF9yaW5nLT5zYnFfZnJlZV9jbnQgLT0gMTY7CisJfQorCisJaWYgKHN0YXJ0X2lkeCAhPSBjbGVhbl9pZHgpIHsKIAkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAogCQkJInNicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHgpOwogCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAogCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwotCi0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCAtPSAxNjsKIAl9CiB9CiAKQEAgLTE0MTIsNiArMTUwNiw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUxNiB2bGFuX2lkID0gKGxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpICYKKwkJCUlCX01BQ19JT0NCX1JTUF9WTEFOX01BU0spCiAKIAlRTF9EVU1QX0lCX01BQ19SU1AoaWJfbWFjX3JzcCk7CiAKQEAgLTE0MzYsMzIgKzE1MzIsNTMgQEAKIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1ApIHsKIAkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLCAiUHJvbWlzY3VvdXMgUGFja2V0LlxuIik7CiAJfQotCWlmIChpYl9tYWNfcnNwLT5mbGFnczEgJiAoSUJfTUFDX0lPQ0JfUlNQX0lFIHwgSUJfTUFDX0lPQ0JfUlNQX1RFKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgRVJSLAotCQkJIkJhZCBjaGVja3N1bSBmb3IgdGhpcyAlcyBwYWNrZXQuXG4iLAotCQkJKChpYl9tYWNfcnNwLT4KLQkJCSAgZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpID8gIlRDUCIgOiAiVURQIikpOwotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JfSBlbHNlIGlmIChxZGV2LT5yeF9jc3VtICYmCi0JCSAgICgoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHx8Ci0JCSAgICAoKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9VKSAmJgotCQkgICAgICEoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX05VKSkpKSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywgIlJYIGNoZWNrc3VtIGRvbmUhXG4iKTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCS8qIElmIHJ4IGNoZWNrc3VtIGlzIG9uLCBhbmQgdGhlcmUgYXJlIG5vCisJICogY3N1bSBvciBmcmFtZSBlcnJvcnMuCisJICovCisJaWYgKHFkZXYtPnJ4X2NzdW0gJiYKKwkJIShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfRVJSX01BU0spICYmCisJCSEoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0NTVU1fRVJSX01BU0spKSB7CisJCS8qIFRDUCBmcmFtZS4gKi8KKwkJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9UKSB7CisJCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCisJCQkJCSJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJfSBlbHNlIGlmICgoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1UpICYmCisJCQkJKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9WNCkpIHsKKwkJLyogVW5mcmFnbWVudGVkIGlwdjQgVURQIGZyYW1lLiAqLworCQkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopIHNrYi0+ZGF0YTsKKwkJCWlmICghKGlwaC0+ZnJhZ19vZmYgJgorCQkJCWNwdV90b19iZTE2KElQX01GfElQX09GRlNFVCkpKSB7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCisJCQkJCQkiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCX0KKwkJfQogCX0KKwogCXFkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlxZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZyAtICZxZGV2LT5yeF9yaW5nWzBdKTsKLQlpZiAocWRldi0+dmxncnAgJiYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiUGFzc2luZyBhIFZMQU4gcGFja2V0IHVwc3RyZWFtLlxuIik7Ci0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHFkZXYtPnZsZ3JwLAotCQkJCWxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpKTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwKKwkJcnhfcmluZy0+Y3FfaWQgLSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJgorCQkJKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSAmJgorCQkJKHZsYW5faWQgIT0gMCkpCisJCQl2bGFuX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwKKwkJCQl2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBza2IpOwogCX0gZWxzZSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJQYXNzaW5nIGEgbm9ybWFsIHBhY2tldCB1cHN0cmVhbS5cbiIpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQlpZiAocWRldi0+dmxncnAgJiYKKwkJCShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVikgJiYKKwkJCSh2bGFuX2lkICE9IDApKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KIH0KIApAQCAtMTUwOCwxNCArMTYyNSwxMiBAQAogLyogRmlyZSB1cCBhIGhhbmRsZXIgdG8gcmVzZXQgdGhlIE1QSSBwcm9jZXNzb3IuICovCiB2b2lkIHFsX3F1ZXVlX2Z3X2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9yZXNldF93b3JrLCAwKTsKIH0KIAogdm9pZCBxbF9xdWV1ZV9hc2ljX2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwogCS8qIENsZWFyIGFkYXB0ZXIgdXAgYml0IHRvIHNpZ25hbCB0aGUgcmVjb3ZlcnkKQEAgLTE1NzAsNiArMTY4NSw3IEBACiAJc3RydWN0IG9iX21hY19pb2NiX3JzcCAqbmV0X3JzcCA9IE5VTEw7CiAJaW50IGNvdW50ID0gMDsKIAorCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwogCS8qIFdoaWxlIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLiAqLwogCXdoaWxlIChwcm9kICE9IHJ4X3JpbmctPmNuc21yX2lkeCkgewogCkBAIC0xNTk1LDE1ICsxNzExLDE2IEBACiAJCXByb2QgPSBxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpOwogCX0KIAlxbF93cml0ZV9jcV9pZHgocnhfcmluZyk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocWRldi0+bmRldikgJiYgbmV0X3JzcCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbbmV0X3JzcC0+dHhxX2lkeF07CisJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW25ldF9yc3AtPnR4cV9pZHhdOworCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpICYmCisJCQkJCW5ldF9yc3AgIT0gTlVMTCkgewogCQlpZiAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnF1ZXVlX3N0b3BwZWQpICYmCiAJCSAgICAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnR4X2NvdW50KSA+ICh0eF9yaW5nLT53cV9sZW4gLyA0KSkpCiAJCQkvKgogCQkJICogVGhlIHF1ZXVlIGdvdCBzdG9wcGVkIGJlY2F1c2UgdGhlIHR4X3Jpbmcgd2FzIGZ1bGwuCiAJCQkgKiBXYWtlIGl0IHVwLCBiZWNhdXNlIGl0J3Mgbm93IGF0IGxlYXN0IDI1JSBlbXB0eS4KIAkJCSAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShxZGV2LT5uZGV2KTsKKwkJCW5ldGlmX3dha2Vfc3VicXVldWUocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTE2NjQsNyArMTc4MSw3IEBACiAJCXJ4X3JpbmctPmNxX2lkKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlxbF9lbmFibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwgcnhfcmluZy0+aXJxKTsKIAl9CiAJcmV0dXJuIHdvcmtfZG9uZTsKQEAgLTE2OTAsMTkgKzE4MDcsMjkgQEAKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXUzMiBlbmFibGVfYml0ID0gTUFDX0FERFJfRTsKKwlpbnQgc3RhdHVzOwogCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlpZiAocWxfc2V0X21hY19hZGRyX3JlZwogCSAgICAocWRldiwgKHU4ICopICZlbmFibGVfYml0LCBNQUNfQUREUl9UWVBFX1ZMQU4sIHZpZCkpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCB2bGFuIGFkZHJlc3MuXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBxbF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MTYgdmlkKQogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdTMyIGVuYWJsZV9iaXQgPSAwOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybjsKIAogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcKQEAgLTE3MTAsNiArMTgzNyw3IEBACiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGNsZWFyIHZsYW4gYWRkcmVzcy5cbiIpOwogCX0KIAlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAKIH0KIApAQCAtMTkyNCwxNSArMjA1MiwxOCBAQAogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHRzbzsKIAlzdHJ1Y3QgdHhfcmluZyAqdHhfcmluZzsKLQl1MzIgdHhfcmluZ19pZHggPSAodTMyKSBRTF9UWFFfSURYKHFkZXYsIHNrYik7CisJdTMyIHR4X3JpbmdfaWR4ID0gKHUzMikgc2tiLT5xdWV1ZV9tYXBwaW5nOwogCiAJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW3R4X3JpbmdfaWR4XTsKIAorCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnR4X3JpbmctPnR4X2NvdW50KSA8IDIpKSB7CiAJCVFQUklOVEsocWRldiwgVFhfUVVFVUVELCBJTkZPLAogCQkJIiVzOiBzaHV0dGluZyBkb3duIHR4IHF1ZXVlICVkIGR1IHRvIGxhY2sgb2YgcmVzb3VyY2VzLlxuIiwKIAkJCV9fZnVuY19fLCB0eF9yaW5nX2lkeCk7Ci0JCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJCW5ldGlmX3N0b3Bfc3VicXVldWUobmRldiwgdHhfcmluZy0+d3FfaWQpOwogCQlhdG9taWNfaW5jKCZ0eF9yaW5nLT5xdWV1ZV9zdG9wcGVkKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTIwMTMsNiArMjE0NCw3IEBACiAJCQkiQWxsb2NhdGlvbiBvZiBSWCBzaGFkb3cgc3BhY2UgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwltZW1zZXQocWRldi0+cnhfcmluZ19zaGFkb3dfcmVnX2FyZWEsIDAsIFBBR0VfU0laRSk7CiAJcWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2FyZWEgPQogCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChxZGV2LT5wZGV2LCBQQUdFX1NJWkUsCiAJCQkJICZxZGV2LT50eF9yaW5nX3NoYWRvd19yZWdfZG1hKTsKQEAgLTIwMjEsNiArMjE1Myw3IEBACiAJCQkiQWxsb2NhdGlvbiBvZiBUWCBzaGFkb3cgc3BhY2UgZmFpbGVkLlxuIik7CiAJCWdvdG8gZXJyX3dxcF9zaF9hcmVhOwogCX0KKwltZW1zZXQocWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2FyZWEsIDAsIFBBR0VfU0laRSk7CiAJcmV0dXJuIDA7CiAKIGVycl93cXBfc2hfYXJlYToKQEAgLTIxMDUsNDcgKzIyMzgsNiBAQAogCX0KIH0KIAotLyoKLSAqIEFsbG9jYXRlIGFuZCBtYXAgYSBwYWdlIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGxicS4KLSAqLwotc3RhdGljIGludCBxbF9hbGxvY19sYnFfYnVmZmVycyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKLQkJCQlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgYnFfZGVzYyAqbGJxX2Rlc2M7Ci0JdTY0IG1hcDsKLQlfX2xlNjQgKmJxID0gcnhfcmluZy0+bGJxX2Jhc2U7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+bGJxX2xlbjsgaSsrKSB7Ci0JCWxicV9kZXNjID0gJnJ4X3JpbmctPmxicVtpXTsKLQkJbWVtc2V0KGxicV9kZXNjLCAwLCBzaXplb2YobGJxX2Rlc2MpKTsKLQkJbGJxX2Rlc2MtPmFkZHIgPSBicTsKLQkJbGJxX2Rlc2MtPmluZGV4ID0gaTsKLQkJbGJxX2Rlc2MtPnAubGJxX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMpOwotCQlpZiAodW5saWtlbHkoIWxicV9kZXNjLT5wLmxicV9wYWdlKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJmYWlsZWQgYWxsb2NfcGFnZSgpLlxuIik7Ci0JCQlnb3RvIG1lbV9lcnJvcjsKLQkJfSBlbHNlIHsKLQkJCW1hcCA9IHBjaV9tYXBfcGFnZShxZGV2LT5wZGV2LAotCQkJCQkgICBsYnFfZGVzYy0+cC5sYnFfcGFnZSwKLQkJCQkJICAgMCwgUEFHRV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJCSJQQ0kgbWFwcGluZyBmYWlsZWQuXG4iKTsKLQkJCQlnb3RvIG1lbV9lcnJvcjsKLQkJCX0KLQkJCXBjaV91bm1hcF9hZGRyX3NldChsYnFfZGVzYywgbWFwYWRkciwgbWFwKTsKLQkJCXBjaV91bm1hcF9sZW5fc2V0KGxicV9kZXNjLCBtYXBsZW4sIFBBR0VfU0laRSk7Ci0JCQkqbGJxX2Rlc2MtPmFkZHIgPSBjcHVfdG9fbGU2NChtYXApOwotCQl9Ci0JCWJxKys7Ci0JfQotCXJldHVybiAwOwotbWVtX2Vycm9yOgotCXFsX2ZyZWVfbGJxX2J1ZmZlcnMocWRldiwgcnhfcmluZyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KIHN0YXRpYyB2b2lkIHFsX2ZyZWVfc2JxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewogCWludCBpOwpAQCAtMjE2OCw2MyArMjI2MCw3MiBAQAogCX0KIH0KIAotLyogQWxsb2NhdGUgYW5kIG1hcCBhbiBza2IgZm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgc2JxLiAqLwotc3RhdGljIGludCBxbF9hbGxvY19zYnFfYnVmZmVycyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKy8qIEZyZWUgYWxsIGxhcmdlIGFuZCBzbWFsbCByeCBidWZmZXJzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIGNvbXBsZXRpb24gcXVldWVzIGZvciB0aGlzIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgcWxfZnJlZV9yeF9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBpOworCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nOworCisJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07CisJCWlmIChyeF9yaW5nLT5sYnEpCisJCQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOworCQlpZiAocnhfcmluZy0+c2JxKQorCQkJcWxfZnJlZV9zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7CisJCXJ4X3JpbmcgPSAmcWRldi0+cnhfcmluZ1tpXTsKKwkJaWYgKHJ4X3JpbmctPnR5cGUgIT0gVFhfUSkKKwkJCXFsX3VwZGF0ZV9idWZmZXJfcXVldWVzKHFkZXYsIHJ4X3JpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQgcWxfaW5pdF9sYnFfcmluZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYnFfZGVzYyAqbGJxX2Rlc2M7CisJX19sZTY0ICpicSA9IHJ4X3JpbmctPmxicV9iYXNlOworCisJbWVtc2V0KHJ4X3JpbmctPmxicSwgMCwgcnhfcmluZy0+bGJxX2xlbiAqIHNpemVvZihzdHJ1Y3QgYnFfZGVzYykpOworCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5sYnFfbGVuOyBpKyspIHsKKwkJbGJxX2Rlc2MgPSAmcnhfcmluZy0+bGJxW2ldOworCQltZW1zZXQobGJxX2Rlc2MsIDAsIHNpemVvZigqbGJxX2Rlc2MpKTsKKwkJbGJxX2Rlc2MtPmluZGV4ID0gaTsKKwkJbGJxX2Rlc2MtPmFkZHIgPSBicTsKKwkJYnErKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2luaXRfc2JxX3Jpbmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCiB7CiAJaW50IGk7CiAJc3RydWN0IGJxX2Rlc2MgKnNicV9kZXNjOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTY0IG1hcDsKIAlfX2xlNjQgKmJxID0gcnhfcmluZy0+c2JxX2Jhc2U7CiAKKwltZW1zZXQocnhfcmluZy0+c2JxLCAwLCByeF9yaW5nLT5zYnFfbGVuICogc2l6ZW9mKHN0cnVjdCBicV9kZXNjKSk7CiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPnNicV9sZW47IGkrKykgewogCQlzYnFfZGVzYyA9ICZyeF9yaW5nLT5zYnFbaV07Ci0JCW1lbXNldChzYnFfZGVzYywgMCwgc2l6ZW9mKHNicV9kZXNjKSk7CisJCW1lbXNldChzYnFfZGVzYywgMCwgc2l6ZW9mKCpzYnFfZGVzYykpOwogCQlzYnFfZGVzYy0+aW5kZXggPSBpOwogCQlzYnFfZGVzYy0+YWRkciA9IGJxOwotCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHFkZXYtPm5kZXYsIHJ4X3JpbmctPnNicV9idWZfc2l6ZSk7Ci0JCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZCAqLwotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJInNtYWxsIGJ1ZmYgYWxsb2MgZmFpbGVkIGZvciAlZCBieXRlcyBhdCBpbmRleCAlZC5cbiIsCi0JCQkJcnhfcmluZy0+c2JxX2J1Zl9zaXplLCBpKTsKLQkJCWdvdG8gbWVtX2VycjsKLQkJfQotCQlza2JfcmVzZXJ2ZShza2IsIFFMR0VfU0JfUEFEKTsKLQkJc2JxX2Rlc2MtPnAuc2tiID0gc2tiOwotCQkvKgotCQkgKiBNYXAgb25seSBoYWxmIHRoZSBidWZmZXIuIEJlY2F1c2UgdGhlCi0JCSAqIG90aGVyIGhhbGYgbWF5IGdldCBzb21lIGRhdGEgY29waWVkIHRvIGl0Ci0JCSAqIHdoZW4gdGhlIGNvbXBsZXRpb24gYXJyaXZlcy4KLQkJICovCi0JCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHFkZXYtPnBkZXYsCi0JCQkJICAgICBza2ItPmRhdGEsCi0JCQkJICAgICByeF9yaW5nLT5zYnFfYnVmX3NpemUgLyAyLAotCQkJCSAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIlBDSSBtYXBwaW5nIGZhaWxlZC5cbiIpOwotCQkJZ290byBtZW1fZXJyOwotCQl9Ci0JCXBjaV91bm1hcF9hZGRyX3NldChzYnFfZGVzYywgbWFwYWRkciwgbWFwKTsKLQkJcGNpX3VubWFwX2xlbl9zZXQoc2JxX2Rlc2MsIG1hcGxlbiwgcnhfcmluZy0+c2JxX2J1Zl9zaXplIC8gMik7Ci0JCSpzYnFfZGVzYy0+YWRkciA9IGNwdV90b19sZTY0KG1hcCk7CiAJCWJxKys7CiAJfQotCXJldHVybiAwOwotbWVtX2VycjoKLQlxbF9mcmVlX3NicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBxbF9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKIAkJCQkgc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCiB7Ci0JaWYgKHJ4X3JpbmctPnNicV9sZW4pCi0JCXFsX2ZyZWVfc2JxX2J1ZmZlcnMocWRldiwgcnhfcmluZyk7Ci0JaWYgKHJ4X3JpbmctPmxicV9sZW4pCi0JCXFsX2ZyZWVfbGJxX2J1ZmZlcnMocWRldiwgcnhfcmluZyk7Ci0KIAkvKiBGcmVlIHRoZSBzbWFsbCBidWZmZXIgcXVldWUuICovCiAJaWYgKHJ4X3JpbmctPnNicV9iYXNlKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocWRldi0+cGRldiwKQEAgLTIzMDIsMTEgKzI0MDMsNyBAQAogCQkJZ290byBlcnJfbWVtOwogCQl9CiAKLQkJaWYgKHFsX2FsbG9jX3NicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiU21hbGwgYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7Ci0JCQlnb3RvIGVycl9tZW07Ci0JCX0KKwkJcWxfaW5pdF9zYnFfcmluZyhxZGV2LCByeF9yaW5nKTsKIAl9CiAKIAlpZiAocnhfcmluZy0+bGJxX2xlbikgewpAQCAtMjMzNCwxNCArMjQzMSw3IEBACiAJCQlnb3RvIGVycl9tZW07CiAJCX0KIAotCQkvKgotCQkgKiBBbGxvY2F0ZSB0aGUgYnVmZmVycy4KLQkJICovCi0JCWlmIChxbF9hbGxvY19sYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkxhcmdlIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwotCQkJZ290byBlcnJfbWVtOwotCQl9CisJCXFsX2luaXRfbGJxX3JpbmcocWRldiwgcnhfcmluZyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNDM1LDYgKzI1MjUsNyBAQAogCSAgICBxZGV2LT5kb29yYmVsbF9hcmVhICsgKERCX1BBR0VfU0laRSAqICgxMjggKyByeF9yaW5nLT5jcV9pZCkpOwogCWludCBlcnIgPSAwOwogCXUxNiBicV9sZW47CisJdTY0IHRtcDsKIAogCS8qIFNldCB1cCB0aGUgc2hhZG93IHJlZ2lzdGVycyBmb3IgdGhpcyByaW5nLiAqLwogCXJ4X3JpbmctPnByb2RfaWR4X3NoX3JlZyA9IHNoYWRvd19yZWc7CkBAIC0yNDgwLDcgKzI1NzEsOCBAQAogCSAgICBGTEFHU19MSTsJCS8qIExvYWQgaXJxIGRlbGF5IHZhbHVlcyAqLwogCWlmIChyeF9yaW5nLT5sYnFfbGVuKSB7CiAJCWNxaWNiLT5mbGFncyB8PSBGTEFHU19MTDsJLyogTG9hZCBsYnEgdmFsdWVzICovCi0JCSooKHU2NCAqKSByeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdCkgPSByeF9yaW5nLT5sYnFfYmFzZV9kbWE7CisJCXRtcCA9ICh1NjQpcnhfcmluZy0+bGJxX2Jhc2VfZG1hOzsKKwkJKigoX19sZTY0ICopIHJ4X3JpbmctPmxicV9iYXNlX2luZGlyZWN0KSA9IGNwdV90b19sZTY0KHRtcCk7CiAJCWNxaWNiLT5sYnFfYWRkciA9CiAJCSAgICBjcHVfdG9fbGU2NChyeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdF9kbWEpOwogCQlicV9sZW4gPSAocnhfcmluZy0+bGJxX2J1Zl9zaXplID09IDY1NTM2KSA/IDAgOgpAQCAtMjQ4OSwyNSArMjU4MSwyNiBAQAogCQlicV9sZW4gPSAocnhfcmluZy0+bGJxX2xlbiA9PSA2NTUzNikgPyAwIDoKIAkJCSh1MTYpIHJ4X3JpbmctPmxicV9sZW47CiAJCWNxaWNiLT5sYnFfbGVuID0gY3B1X3RvX2xlMTYoYnFfbGVuKTsKLQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gcnhfcmluZy0+bGJxX2xlbiAtIDE2OworCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHggPSAwOwogCQlyeF9yaW5nLT5sYnFfY3Vycl9pZHggPSAwOwotCQlyeF9yaW5nLT5sYnFfY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX3Byb2RfaWR4OwotCQlyeF9yaW5nLT5sYnFfZnJlZV9jbnQgPSAxNjsKKwkJcnhfcmluZy0+bGJxX2NsZWFuX2lkeCA9IDA7CisJCXJ4X3JpbmctPmxicV9mcmVlX2NudCA9IHJ4X3JpbmctPmxicV9sZW47CiAJfQogCWlmIChyeF9yaW5nLT5zYnFfbGVuKSB7CiAJCWNxaWNiLT5mbGFncyB8PSBGTEFHU19MUzsJLyogTG9hZCBzYnEgdmFsdWVzICovCi0JCSooKHU2NCAqKSByeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdCkgPSByeF9yaW5nLT5zYnFfYmFzZV9kbWE7CisJCXRtcCA9ICh1NjQpcnhfcmluZy0+c2JxX2Jhc2VfZG1hOzsKKwkJKigoX19sZTY0ICopIHJ4X3JpbmctPnNicV9iYXNlX2luZGlyZWN0KSA9IGNwdV90b19sZTY0KHRtcCk7CiAJCWNxaWNiLT5zYnFfYWRkciA9CiAJCSAgICBjcHVfdG9fbGU2NChyeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdF9kbWEpOwogCQljcWljYi0+c2JxX2J1Zl9zaXplID0KLQkJICAgIGNwdV90b19sZTE2KCgocnhfcmluZy0+c2JxX2J1Zl9zaXplIC8gMikgKyA4KSAmIDB4ZmZmZmZmZjgpOworCQkgICAgY3B1X3RvX2xlMTYoKHUxNikocnhfcmluZy0+c2JxX2J1Zl9zaXplLzIpKTsKIAkJYnFfbGVuID0gKHJ4X3JpbmctPnNicV9sZW4gPT0gNjU1MzYpID8gMCA6CiAJCQkodTE2KSByeF9yaW5nLT5zYnFfbGVuOwogCQljcWljYi0+c2JxX2xlbiA9IGNwdV90b19sZTE2KGJxX2xlbik7Ci0JCXJ4X3JpbmctPnNicV9wcm9kX2lkeCA9IHJ4X3JpbmctPnNicV9sZW4gLSAxNjsKKwkJcnhfcmluZy0+c2JxX3Byb2RfaWR4ID0gMDsKIAkJcnhfcmluZy0+c2JxX2N1cnJfaWR4ID0gMDsKLQkJcnhfcmluZy0+c2JxX2NsZWFuX2lkeCA9IHJ4X3JpbmctPnNicV9wcm9kX2lkeDsKLQkJcnhfcmluZy0+c2JxX2ZyZWVfY250ID0gMTY7CisJCXJ4X3JpbmctPnNicV9jbGVhbl9pZHggPSAwOworCQlyeF9yaW5nLT5zYnFfZnJlZV9jbnQgPSByeF9yaW5nLT5zYnFfbGVuOwogCX0KIAlzd2l0Y2ggKHJ4X3JpbmctPnR5cGUpIHsKIAljYXNlIFRYX1E6CkBAIC0yNTUzLDI0ICsyNjQ2LDEzIEBACiAJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJJbnZhbGlkIHJ4X3JpbmctPnR5cGUgPSAlZC5cbiIsCiAJCQlyeF9yaW5nLT50eXBlKTsKIAl9Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiSW5pdGlhbGl6aW5nIHJ4IHdvcmsgcXVldWUuXG4iKTsKKwlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW5pdGlhbGl6aW5nIHJ4IHdvcmsgcXVldWUuXG4iKTsKIAllcnIgPSBxbF93cml0ZV9jZmcocWRldiwgY3FpY2IsIHNpemVvZihzdHJ1Y3QgY3FpY2IpLAogCQkJICAgQ0ZHX0xDUSwgcnhfcmluZy0+Y3FfaWQpOwogCWlmIChlcnIpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBDUUlDQi5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJTdWNjZXNzZnVsbHkgbG9hZGVkIENRSUNCLlxuIik7Ci0JLyoKLQkgKiBBZHZhbmNlIHRoZSBwcm9kdWNlciBpbmRleCBmb3IgdGhlIGJ1ZmZlciBxdWV1ZXMuCi0JICovCi0Jd21iKCk7Ci0JaWYgKHJ4X3JpbmctPmxicV9sZW4pCi0JCXFsX3dyaXRlX2RiX3JlZyhyeF9yaW5nLT5sYnFfcHJvZF9pZHgsCi0JCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4X2RiX3JlZyk7Ci0JaWYgKHJ4X3JpbmctPnNicV9sZW4pCi0JCXFsX3dyaXRlX2RiX3JlZyhyeF9yaW5nLT5zYnFfcHJvZF9pZHgsCi0JCQkJcnhfcmluZy0+c2JxX3Byb2RfaWR4X2RiX3JlZyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjYxNyw3ICsyNjk5LDcgQEAKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCB0eF9yaW5nLlxuIik7CiAJCXJldHVybiBlcnI7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgV1FJQ0IuXG4iKTsKKwlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBXUUlDQi5cbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI2NTksNyArMjc0MSw3IEBACiAJCSAgICAocWRldi0+cGRldiwgcWRldi0+bXNpX3hfZW50cnksIHFkZXYtPnJ4X3JpbmdfY291bnQpKSB7CiAJCQlzZXRfYml0KFFMX01TSVhfRU5BQkxFRCwgJnFkZXYtPmZsYWdzKTsKIAkJCXFkZXYtPmludHJfY291bnQgPSBxZGV2LT5yeF9yaW5nX2NvdW50OwotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLAorCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKIAkJCQkiTVNJLVggRW5hYmxlZCwgZ290ICVkIHZlY3RvcnMuXG4iLAogCQkJCXFkZXYtPmludHJfY291bnQpOwogCQkJcmV0dXJuOwpAQCAtMjc4NiwxMSArMjg2OCwxMSBAQAogCQkJaWYgKHRlc3RfYml0KFFMX01TSVhfRU5BQkxFRCwgJnFkZXYtPmZsYWdzKSkgewogCQkJCWZyZWVfaXJxKHFkZXYtPm1zaV94X2VudHJ5W2ldLnZlY3RvciwKIAkJCQkJICZxZGV2LT5yeF9yaW5nW2ldKTsKLQkJCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLAorCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBERUJVRywKIAkJCQkJImZyZWVpbmcgbXNpeCBpbnRlcnJ1cHQgJWQuXG4iLCBpKTsKIAkJCX0gZWxzZSB7CiAJCQkJZnJlZV9pcnEocWRldi0+cGRldi0+aXJxLCAmcWRldi0+cnhfcmluZ1swXSk7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKKwkJCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgREVCVUcsCiAJCQkJCSJmcmVlaW5nIG1zaSBpbnRlcnJ1cHQgJWQuXG4iLCBpKTsKIAkJCX0KIAkJfQpAQCAtMjgyMSw3ICsyOTAzLDcgQEAKIAkJCQkJaSk7CiAJCQkJZ290byBlcnJfaXJxOwogCQkJfSBlbHNlIHsKLQkJCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sCisJCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKIAkJCQkJIkhvb2tlZCBpbnRyICVkLCBxdWV1ZSB0eXBlICVzJXMlcywgd2l0aCBuYW1lICVzLlxuIiwKIAkJCQkJaSwKIAkJCQkJcWRldi0+cnhfcmluZ1tpXS50eXBlID09CkBAIC0yODk2LDE0ICsyOTc4LDE0IEBACiAJZ2V0X3JhbmRvbV9ieXRlcygodm9pZCAqKSZyaWNiLT5pcHY2X2hhc2hfa2V5WzBdLCA0MCk7CiAJZ2V0X3JhbmRvbV9ieXRlcygodm9pZCAqKSZyaWNiLT5pcHY0X2hhc2hfa2V5WzBdLCAxNik7CiAKLQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJJbml0aWFsaXppbmcgUlNTLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyBSU1MuXG4iKTsKIAogCXN0YXR1cyA9IHFsX3dyaXRlX2NmZyhxZGV2LCByaWNiLCBzaXplb2YocmljYiksIENGR19MUiwgMCk7CiAJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBsb2FkIFJJQ0IuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBSSUNCLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgUklDQi5cbiIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTI5MTMsMTMgKzI5OTUsMTcgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaTsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKIAkvKiBDbGVhciBhbGwgdGhlIGVudHJpZXMgaW4gdGhlIHJvdXRpbmcgdGFibGUuICovCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIGksIDAsIDApOwogCQlpZiAoc3RhdHVzKSB7CiAJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgQ0FNIHBhY2tldHMuXG4iKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKQEAgLTI5MjcsMTMgKzMwMTMsMTMgQEAKIAlpZiAoc3RhdHVzKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAogCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIGVycm9yIHBhY2tldHMuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKKwkJZ290byBleGl0OwogCX0KIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0JDQVNUX1NMT1QsIFJUX0lEWF9CQ0FTVCwgMSk7CiAJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBicm9hZGNhc3QgcGFja2V0cy5cbiIpOwotCQlyZXR1cm4gc3RhdHVzOworCQlnb3RvIGV4aXQ7CiAJfQogCS8qIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBpbmJvdW5kIHF1ZXVlLCB0aGVuIHR1cm4gb24gUlNTIGluIHRoZQogCSAqIHJvdXRpbmcgYmxvY2suCkBAIC0yOTQ0LDE3ICszMDMwLDM5IEBACiAJCWlmIChzdGF0dXMpIHsKIAkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAogCQkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBNQVRDSCBSU1MgcGFja2V0cy5cbiIpOwotCQkJcmV0dXJuIHN0YXR1czsKKwkJCWdvdG8gZXhpdDsKIAkJfQogCX0KIAogCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBSVF9JRFhfQ0FNX0hJVF9TTE9ULAogCQkJCSAgICBSVF9JRFhfQ0FNX0hJVCwgMSk7Ci0JaWYgKHN0YXR1cykgeworCWlmIChzdGF0dXMpCiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAogCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIENBTSBwYWNrZXRzLlxuIik7CitleGl0OgorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgcWxfY2FtX3JvdXRlX2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlzdGF0dXMgPSBxbF9zZXRfbWFjX2FkZHJfcmVnKHFkZXYsICh1OCAqKSBxZGV2LT5uZGV2LT5wZXJtX2FkZHIsCisJCQkgICAgIE1BQ19BRERSX1RZUEVfQ0FNX01BQywgcWRldi0+ZnVuYyAqIE1BWF9DUSk7CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBpbml0IG1hYyBhZGRyZXNzLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQorCisJc3RhdHVzID0gcWxfcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgdGFibGUuXG4iKTsKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTI5NzEsOSArMzA3OSw5IEBACiAJbWFzayA9IHZhbHVlIDw8IDE2OwogCXFsX3dyaXRlMzIocWRldiwgU1lTLCBtYXNrIHwgdmFsdWUpOwogCi0JLyogU2V0IHRoZSBkZWZhdWx0IHF1ZXVlLiAqLwotCXZhbHVlID0gTklDX1JDVl9DRkdfREZROwotCW1hc2sgPSBOSUNfUkNWX0NGR19ERlFfTUFTSzsKKwkvKiBTZXQgdGhlIGRlZmF1bHQgcXVldWUsIGFuZCBWTEFOIGJlaGF2aW9yLiAqLworCXZhbHVlID0gTklDX1JDVl9DRkdfREZRIHwgTklDX1JDVl9DRkdfUlY7CisJbWFzayA9IE5JQ19SQ1ZfQ0ZHX0RGUV9NQVNLIHwgKE5JQ19SQ1ZfQ0ZHX1JWIDw8IDE2KTsKIAlxbF93cml0ZTMyKHFkZXYsIE5JQ19SQ1ZfQ0ZHLCAobWFzayB8IHZhbHVlKSk7CiAKIAkvKiBTZXQgdGhlIE1QSSBpbnRlcnJ1cHQgdG8gZW5hYmxlZC4gKi8KQEAgLTMwMjIsMjggKzMxMzAsMjQgQEAKIAkJfQogCX0KIAotCXN0YXR1cyA9IHFsX3BvcnRfaW5pdGlhbGl6ZShxZGV2KTsKLQlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIHN0YXJ0IHBvcnQuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9CisJLyogSW5pdGlhbGl6ZSB0aGUgcG9ydCBhbmQgc2V0IHRoZSBtYXggZnJhbWVzaXplLiAqLworCXN0YXR1cyA9IHFkZXYtPm5pY19vcHMtPnBvcnRfaW5pdGlhbGl6ZShxZGV2KTsKKyAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgIFFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIHN0YXJ0IHBvcnQuXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICB9CiAKLQlzdGF0dXMgPSBxbF9zZXRfbWFjX2FkZHJfcmVnKHFkZXYsICh1OCAqKSBxZGV2LT5uZGV2LT5wZXJtX2FkZHIsCi0JCQkJICAgICBNQUNfQUREUl9UWVBFX0NBTV9NQUMsIHFkZXYtPmZ1bmMpOworCS8qIFNldCB1cCB0aGUgTUFDIGFkZHJlc3MgYW5kIGZyYW1lIHJvdXRpbmcgZmlsdGVyLiAqLworCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXN0YXR1cyA9IHFsX3JvdXRlX2luaXRpYWxpemUocWRldik7Ci0JaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgdGFibGUuXG4iKTsKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCS8qIFN0YXJ0IE5BUEkgZm9yIHRoZSBSU1MgcXVldWVzLiAqLwogCWZvciAoaSA9IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIkVuYWJsaW5nIE5BUEkgZm9yIHJ4X3JpbmdbJWRdLlxuIiwKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkVuYWJsaW5nIE5BUEkgZm9yIHJ4X3JpbmdbJWRdLlxuIiwKIAkJCWkpOwogCQluYXBpX2VuYWJsZSgmcWRldi0+cnhfcmluZ1tpXS5uYXBpKTsKIAl9CkBAIC0zMDU1LDM2ICszMTU5LDIzIEBACiBzdGF0aWMgaW50IHFsX2FkYXB0ZXJfcmVzZXQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJdTMyIHZhbHVlOwotCWludCBtYXhfd2FpdF90aW1lOwogCWludCBzdGF0dXMgPSAwOwotCWludCByZXNldENudCA9IDA7CisJdW5zaWduZWQgbG9uZyBlbmRfamlmZmllcyA9IGppZmZpZXMgKworCQltYXgoKHVuc2lnbmVkIGxvbmcpMSwgdXNlY3NfdG9famlmZmllcygzMCkpOwogCi0jZGVmaW5lIE1BWF9SRVNFVF9DTlQgICAxCi1pc3N1ZVJlc2V0OgotCXJlc2V0Q250Kys7Ci0JUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLCAiSXNzdWUgc29mdCByZXNldCB0byBjaGlwLlxuIik7CiAJcWxfd3JpdGUzMihxZGV2LCBSU1RfRk8sIChSU1RfRk9fRlIgPDwgMTYpIHwgUlNUX0ZPX0ZSKTsKLQkvKiBXYWl0IGZvciByZXNldCB0byBjb21wbGV0ZS4gKi8KLQltYXhfd2FpdF90aW1lID0gMzsKLQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgREVCVUcsICJXYWl0ICVkIHNlY29uZHMgZm9yIHJlc2V0IHRvIGNvbXBsZXRlLlxuIiwKLQkJbWF4X3dhaXRfdGltZSk7CisKIAlkbyB7CiAJCXZhbHVlID0gcWxfcmVhZDMyKHFkZXYsIFJTVF9GTyk7CiAJCWlmICgodmFsdWUgJiBSU1RfRk9fRlIpID09IDApCiAJCQlicmVhazsKKwkJY3B1X3JlbGF4KCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX2ppZmZpZXMpKTsKIAotCQlzc2xlZXAoMSk7Ci0JfSB3aGlsZSAoKC0tbWF4X3dhaXRfdGltZSkpOwogCWlmICh2YWx1ZSAmIFJTVF9GT19GUikgewogCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLAotCQkJIlN0dWNrIGluIFNvZnRSZXNldDogIEZTQ19TUjoweCUwOHhcbiIsIHZhbHVlKTsKLQkJaWYgKHJlc2V0Q250IDwgTUFYX1JFU0VUX0NOVCkKLQkJCWdvdG8gaXNzdWVSZXNldDsKLQl9Ci0JaWYgKG1heF93YWl0X3RpbWUgPT0gMCkgewotCQlzdGF0dXMgPSAtRVRJTUVET1VUOwotCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLAogCQkJIkVUSU1FT1VUISEhIGVycm9yZWQgb3V0IG9mIHJlc2V0dGluZyB0aGUgY2hpcCFcbiIpOworCQlzdGF0dXMgPSAtRVRJTUVET1VUOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC0zMTA3LDEyICszMTk4LDEwIEBACiAKIHN0YXRpYyBpbnQgcWxfYWRhcHRlcl9kb3duKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKIAlpbnQgaSwgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKIAotCW5ldGlmX3N0b3BfcXVldWUobmRldik7Ci0JbmV0aWZfY2Fycmllcl9vZmYobmRldik7CisJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAKIAkvKiBEb24ndCBraWxsIHRoZSByZXNldCB3b3JrZXIgdGhyZWFkIGlmIHdlCiAJICogYXJlIGluIHRoZSBwcm9jZXNzIG9mIHJlY292ZXJ5LgpAQCAtMzEyMSw2ICszMjEwLDggQEAKIAkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3Jlc2V0X3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX2lkY193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrKTsKIAogCS8qIFRoZSBkZWZhdWx0IHF1ZXVlIGF0IGluZGV4IDAgaXMgYWx3YXlzIHByb2Nlc3NlZCBpbgogCSAqIGEgd29ya3F1ZXVlLgpAQCAtMzE1MCw2ICszMjQxLDEzIEBACiAKIAlxbF90eF9yaW5nX2NsZWFuKHFkZXYpOwogCisJLyogQ2FsbCBuZXRpZl9uYXBpX2RlbCgpIGZyb20gY29tbW9uIHBvaW50LgorCSAqLworCWZvciAoaSA9IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKQorCQluZXRpZl9uYXBpX2RlbCgmcWRldi0+cnhfcmluZ1tpXS5uYXBpKTsKKworCXFsX2ZyZWVfcnhfYnVmZmVycyhxZGV2KTsKKwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJc3RhdHVzID0gcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKIAlpZiAoc3RhdHVzKQpAQCAtMzE2MywyMSArMzI2MSwxOSBAQAogewogCWludCBlcnIgPSAwOwogCi0Jc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAllcnIgPSBxbF9hZGFwdGVyX2luaXRpYWxpemUocWRldik7CiAJaWYgKGVycikgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyLlxuIik7CiAJCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKIAkJZ290byBlcnJfaW5pdDsKIAl9Ci0Jc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOwogCXNldF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKTsKKwlxbF9hbGxvY19yeF9idWZmZXJzKHFkZXYpOworCWlmICgocWxfcmVhZDMyKHFkZXYsIFNUUykgJiBxZGV2LT5wb3J0X2luaXQpKQorCQluZXRpZl9jYXJyaWVyX29uKHFkZXYtPm5kZXYpOwogCXFsX2VuYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwogCXFsX2VuYWJsZV9hbGxfY29tcGxldGlvbl9pbnRlcnJ1cHRzKHFkZXYpOwotCWlmICgocWxfcmVhZDMyKHFkZXYsIFNUUykgJiBxZGV2LT5wb3J0X2luaXQpKSB7Ci0JCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKHFkZXYtPm5kZXYpOwotCX0KKwluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHFkZXYtPm5kZXYpOwogCiAJcmV0dXJuIDA7CiBlcnJfaW5pdDoKQEAgLTMxODUsMjggKzMyODEsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcWxfY3ljbGVfYWRhcHRlcihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gcWxfYWRhcHRlcl9kb3duKHFkZXYpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXJyb3I7Ci0KLQlzdGF0dXMgPSBxbF9hZGFwdGVyX3VwKHFkZXYpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXJyb3I7Ci0KLQlyZXR1cm4gc3RhdHVzOwotZXJyb3I6Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBBTEVSVCwKLQkJIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2VcbiIpOwotCXJ0bmxfbG9jaygpOwotCWRldl9jbG9zZShxZGV2LT5uZGV2KTsKLQlydG5sX3VubG9jaygpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KIHN0YXRpYyB2b2lkIHFsX3JlbGVhc2VfYWRhcHRlcl9yZXNvdXJjZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJcWxfZnJlZV9tZW1fcmVzb3VyY2VzKHFkZXYpOwpAQCAtMzI4Nyw2ICszMzYxLDcgQEAKIAkgKiBjb21wbGV0aW9uIGhhbmRsZXIgcnhfcmluZ3MuCiAJICovCiAJcWRldi0+cnhfcmluZ19jb3VudCA9IHFkZXYtPnR4X3JpbmdfY291bnQgKyBxZGV2LT5yc3NfcmluZ19jb3VudCArIDE7CisJbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShxZGV2LT5uZGV2LCA2NTUzNik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+dHhfcmluZ19jb3VudDsgaSsrKSB7CiAJCXR4X3JpbmcgPSAmcWRldi0+dHhfcmluZ1tpXTsKQEAgLTMzOTMsNiArMzQ2OCw4IEBACiAKIAlpZiAobmRldi0+bXR1ID09IDE1MDAgJiYgbmV3X210dSA9PSA5MDAwKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiQ2hhbmdpbmcgdG8ganVtYm8gTVRVLlxuIik7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhxZGV2LT53b3JrcXVldWUsCisJCQkJJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAwKTsKIAl9IGVsc2UgaWYgKG5kZXYtPm10dSA9PSA5MDAwICYmIG5ld19tdHUgPT0gMTUwMCkgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkNoYW5naW5nIHRvIG5vcm1hbCBNVFUuXG4iKTsKIAl9IGVsc2UgaWYgKChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDE1MDApIHx8CkBAIC0zNDE1LDggKzM0OTIsMTEgQEAKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWxfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwotCWludCBpOworCWludCBpLCBzdGF0dXM7CiAKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAkvKgogCSAqIFNldCBvciBjbGVhciBwcm9taXNjdW91cyBtb2RlIGlmIGEKQEAgLTM0NzIsMTQgKzM1NTIsMTkgQEAKIAl9CiAKIAlpZiAobmRldi0+bWNfY291bnQpIHsKKwkJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZXhpdDsKIAkJZm9yIChpID0gMCwgbWNfcHRyID0gbmRldi0+bWNfbGlzdDsgbWNfcHRyOwogCQkgICAgIGkrKywgbWNfcHRyID0gbWNfcHRyLT5uZXh0KQogCQkJaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcocWRldiwgKHU4ICopIG1jX3B0ci0+ZG1pX2FkZHIsCiAJCQkJCQlNQUNfQUREUl9UWVBFX01VTFRJX01BQywgaSkpIHsKIAkJCQlRUFJJTlRLKHFkZXYsIEhXLCBFUlIsCiAJCQkJCSJGYWlsZWQgdG8gbG9hZG11bHRpY2FzdCBhZGRyZXNzLlxuIik7CisJCQkJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJCQkJZ290byBleGl0OwogCQkJfQorCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJaWYgKHFsX3NldF9yb3V0aW5nX3JlZwogCQkgICAgKHFkZXYsIFJUX0lEWF9NQ0FTVF9NQVRDSF9TTE9ULCBSVF9JRFhfTUNBU1RfTUFUQ0gsIDEpKSB7CiAJCQlRUFJJTlRLKHFkZXYsIEhXLCBFUlIsCkBAIC0zNDkwLDEzICszNTc1LDE0IEBACiAJfQogZXhpdDoKIAlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwogfQogCiBzdGF0aWMgaW50IHFsZ2Vfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbF9hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgc3RhdHVzOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpCiAJCXJldHVybiAtRUJVU1k7CkBAIC0zNTA1LDE1ICszNTkxLDE3IEBACiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5kZXYtPmFkZHJfbGVuKTsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwotCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnKHFkZXYsICh1OCAqKSBuZGV2LT5kZXZfYWRkciwKLQkJCU1BQ19BRERSX1RZUEVfQ0FNX01BQywgcWRldi0+ZnVuYykpIHsvKiBVbmljYXN0ICovCi0JCVFQUklOVEsocWRldiwgSFcsIEVSUiwgIkZhaWxlZCB0byBsb2FkIE1BQyBhZGRyZXNzLlxuIik7Ci0JCXJldCA9IC0xOwotCX0KKwlzdGF0dXMgPSBxbF9zZXRfbWFjX2FkZHJfcmVnKHFkZXYsICh1OCAqKSBuZGV2LT5kZXZfYWRkciwKKwkJCU1BQ19BRERSX1RZUEVfQ0FNX01BQywgcWRldi0+ZnVuYyAqIE1BWF9DUSk7CiAJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOwotCi0JcmV0dXJuIHJldDsKKwlpZiAoc3RhdHVzKQorCQlRUFJJTlRLKHFkZXYsIEhXLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBNQUMgYWRkcmVzcy5cbiIpOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHFsZ2VfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTM1MjYsOSArMzYxNCwzNyBAQAogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0KIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbF9hZGFwdGVyLCBhc2ljX3Jlc2V0X3dvcmsud29yayk7Ci0JcWxfY3ljbGVfYWRhcHRlcihxZGV2KTsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcWxfYWRhcHRlcl9kb3duKHFkZXYpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSBxbF9hZGFwdGVyX3VwKHFkZXYpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm47CitlcnJvcjoKKwlRUFJJTlRLKHFkZXYsIElGVVAsIEFMRVJULAorCQkiRHJpdmVyIHVwL2Rvd24gY3ljbGUgZmFpbGVkLCBjbG9zaW5nIGRldmljZVxuIik7CisJcnRubF9sb2NrKCk7CisJc2V0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOworCWRldl9jbG9zZShxZGV2LT5uZGV2KTsKKwlydG5sX3VubG9jaygpOwogfQogCitzdGF0aWMgc3RydWN0IG5pY19vcGVyYXRpb25zIHFsYTgwMTJfbmljX29wcyA9IHsKKwkuZ2V0X2ZsYXNoCQk9IHFsX2dldF84MDEyX2ZsYXNoX3BhcmFtcywKKwkucG9ydF9pbml0aWFsaXplCT0gcWxfODAxMl9wb3J0X2luaXRpYWxpemUsCit9OworCitzdGF0aWMgc3RydWN0IG5pY19vcGVyYXRpb25zIHFsYTgwMDBfbmljX29wcyA9IHsKKwkuZ2V0X2ZsYXNoCQk9IHFsX2dldF84MDAwX2ZsYXNoX3BhcmFtcywKKwkucG9ydF9pbml0aWFsaXplCT0gcWxfODAwMF9wb3J0X2luaXRpYWxpemUsCit9OworCisKIHN0YXRpYyB2b2lkIHFsX2dldF9ib2FyZF9pbmZvKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewogCXFkZXYtPmZ1bmMgPQpAQCAtMzU0Nyw2ICszNjYzLDExIEBACiAJCXFkZXYtPm1haWxib3hfb3V0ID0gUFJPQ19BRERSX01QSV9SSVNDIHwgUFJPQ19BRERSX0ZVTkMwX01CTzsKIAl9CiAJcWRldi0+Y2hpcF9yZXZfaWQgPSBxbF9yZWFkMzIocWRldiwgUkVWX0lEKTsKKwlxZGV2LT5kZXZpY2VfaWQgPSBxZGV2LT5wZGV2LT5kZXZpY2U7CisJaWYgKHFkZXYtPmRldmljZV9pZCA9PSBRTEdFX0RFVklDRV9JRF84MDEyKQorCQlxZGV2LT5uaWNfb3BzID0gJnFsYTgwMTJfbmljX29wczsKKwllbHNlIGlmIChxZGV2LT5kZXZpY2VfaWQgPT0gUUxHRV9ERVZJQ0VfSURfODAwMCkKKwkJcWRldi0+bmljX29wcyA9ICZxbGE4MDAwX25pY19vcHM7CiB9CiAKIHN0YXRpYyB2b2lkIHFsX3JlbGVhc2VfYWxsKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzYzOSwyNCArMzc2MCwyMCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JcWxfZ2V0X2JvYXJkX2luZm8ocWRldik7CiAJcWRldi0+bmRldiA9IG5kZXY7CiAJcWRldi0+cGRldiA9IHBkZXY7CisJcWxfZ2V0X2JvYXJkX2luZm8ocWRldik7CiAJcWRldi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBkZWZhdWx0X21zZyk7CiAJc3Bpbl9sb2NrX2luaXQoJnFkZXYtPmh3X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZxZGV2LT5zdGF0c19sb2NrKTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KLQllcnIgPSBxbF9nZXRfZmxhc2hfcGFyYW1zKHFkZXYpOworCWVyciA9IHFkZXYtPm5pY19vcHMtPmdldF9mbGFzaChxZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgRkxBU0guXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihxZGV2LT5mbGFzaC5tYWNfYWRkcikpCi0JCWdvdG8gZXJyX291dDsKLQotCW1lbWNweShuZGV2LT5kZXZfYWRkciwgcWRldi0+Zmxhc2gubWFjX2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKIAltZW1jcHkobmRldi0+cGVybV9hZGRyLCBuZGV2LT5kZXZfYWRkciwgbmRldi0+YWRkcl9sZW4pOwogCiAJLyogU2V0IHVwIHRoZSBkZWZhdWx0IHJpbmcgc2l6ZXMuICovCkBAIC0zNjc5LDYgKzM3OTYsMTAgQEAKIAlJTklUX0RFTEFZRURfV09SSygmcWRldi0+YXNpY19yZXNldF93b3JrLCBxbF9hc2ljX3Jlc2V0X3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfcmVzZXRfd29yaywgcWxfbXBpX3Jlc2V0X3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfd29yaywgcWxfbXBpX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yaywgcWxfbXBpX3BvcnRfY2ZnX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfaWRjX3dvcmssIHFsX21waV9pZGNfd29yayk7CisJbXV0ZXhfaW5pdCgmcWRldi0+bXBpX211dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJnFkZXYtPmlkZV9jb21wbGV0aW9uKTsKIAogCWlmICghY2FyZHNfZm91bmQpIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzXG4iLCBEUlZfU1RSSU5HKTsKQEAgLTM3MTYsNyArMzgzNyw4IEBACiAJc3RhdGljIGludCBjYXJkc19mb3VuZCA9IDA7CiAJaW50IGVyciA9IDA7CiAKLQluZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBxbF9hZGFwdGVyKSk7CisJbmRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgcWxfYWRhcHRlciksCisJCQltaW4oTUFYX0NQVVMsIChpbnQpbnVtX29ubGluZV9jcHVzKCkpKTsKIAlpZiAoIW5kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNzM2LDYgKzM4NTgsNyBAQAogCQkJICB8IE5FVElGX0ZfVFNPX0VDTgogCQkJICB8IE5FVElGX0ZfSFdfVkxBTl9UWAogCQkJICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpOworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCiAJaWYgKHRlc3RfYml0KFFMX0RNQTY0LCAmcWRldi0+ZmxhZ3MpKQogCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CkBAIC0zNzU4LDcgKzM4ODEsNiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwogCXFsX2Rpc3BsYXlfZGV2X2luZm8obmRldik7CiAJY2FyZHNfZm91bmQrKzsKIAlyZXR1cm4gMDsKQEAgLTM4MTIsNyArMzkzNCw2IEBACiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwogCXFsX2FkYXB0ZXJfcmVzZXQocWRldik7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCkBAIC0zODU0LDcgKzM5NzUsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JaW50IGVyciwgaTsKKwlpbnQgZXJyOwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKIApAQCAtMzg2NCw5ICszOTg1LDYgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JZm9yIChpID0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQ7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspCi0JCW5ldGlmX25hcGlfZGVsKCZxZGV2LT5yeF9yaW5nW2ldLm5hcGkpOwotCiAJZXJyID0gcGNpX3NhdmVfc3RhdGUocGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBmYTMxODkxLi45ZjgxYjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC0xLDYgKzEsMjYgQEAKICNpbmNsdWRlICJxbGdlLmgiCiAKLXN0YXRpYyBpbnQgcWxfcmVhZF9tYm94X3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICpkYXRhKQorc3RhdGljIHZvaWQgcWxfZGlzcGxheV9tYl9zdHMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCQlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IGk7CisJc3RhdGljIGNoYXIgKmVycl9zdHNbXSA9IHsKKwkJIkNvbW1hbmQgQ29tcGxldGUiLAorCQkiQ29tbWFuZCBOb3QgU3VwcG9ydGVkIiwKKwkJIkhvc3QgSW50ZXJmYWNlIEVycm9yIiwKKwkJIkNoZWNrc3VtIEVycm9yIiwKKwkJIlVudXNlZCBDb21wbGV0aW9uIFN0YXR1cyIsCisJCSJUZXN0IEZhaWxlZCIsCisJCSJDb21tYW5kIFBhcmFtZXRlciBFcnJvciJ9OworCisJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAiJXMuXG4iLAorCQllcnJfc3RzW21iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwMDAwZl0pOworCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAibWJveF9vdXRbJWRdID0gMHglLjA4eC5cbiIsCisJCQkJaSwgbWJjcC0+bWJveF9vdXRbaV0pOworfQorCitpbnQgcWxfcmVhZF9tcGlfcmVnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgcmVnLCB1MzIgKmRhdGEpCiB7CiAJaW50IHN0YXR1czsKIAkvKiB3YWl0IGZvciByZWcgdG8gY29tZSByZWFkeSAqLwpAQCAtMTksNiArMzksMzIgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgcWxfd3JpdGVfbXBpX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyIGRhdGEpCit7CisJaW50IHN0YXR1cyA9IDA7CisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgUFJPQ19BRERSLCBQUk9DX0FERFJfUkRZLCBQUk9DX0FERFJfRVJSKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisJLyogd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGRhdGEgcmVnICovCisJcWxfd3JpdGUzMihxZGV2LCBQUk9DX0RBVEEsIGRhdGEpOworCS8qIHRyaWdnZXIgdGhlIHdyaXRlICovCisJcWxfd3JpdGUzMihxZGV2LCBQUk9DX0FERFIsIHJlZyk7CisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgUFJPQ19BRERSLCBQUk9DX0FERFJfUkRZLCBQUk9DX0FERFJfRVJSKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBxbF9zb2Z0X3Jlc2V0X21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RhdHVzID0gcWxfd3JpdGVfbXBpX3JlZyhxZGV2LCAweDAwMDAxMDEwLCAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgaW50IHFsX2dldF9tYl9zdHMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKIAlpbnQgaSwgc3RhdHVzOwpAQCAtMjgsNyArNzQsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykgewogCQlzdGF0dXMgPQotCQkgICAgcWxfcmVhZF9tYm94X3JlZyhxZGV2LCBxZGV2LT5tYWlsYm94X291dCArIGksCisJCSAgICBxbF9yZWFkX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9vdXQgKyBpLAogCQkJCSAgICAgJm1iY3AtPm1ib3hfb3V0W2ldKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZhaWxlZCBtYWlsYm94IHJlYWQuXG4iKTsKQEAgLTM5LDYzICs4NSw3NDQgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKiBXYWl0IGZvciBhIHNpbmdsZSBtYWlsYm94IGNvbW1hbmQgdG8gY29tcGxldGUuCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBxbF93YWl0X21ieF9jbWRfY21wbHQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IGNvdW50ID0gNTA7CS8qIFRPRE86IGFyYml0cmFyeSBmb3Igbm93LiAqLworCXUzMiB2YWx1ZTsKKworCWRvIHsKKwkJdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgU1RTKTsKKwkJaWYgKHZhbHVlICYgU1RTX1BJKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheShVREVMQVlfREVMQVkpOyAvKiAxMHVzICovCisJfSB3aGlsZSAoLS1jb3VudCk7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKKy8qIEV4ZWN1dGUgYSBzaW5nbGUgbWFpbGJveCBjb21tYW5kLgorICogQ2FsbGVyIG11c3QgaG9sZCBQUk9DX0FERFIgc2VtYXBob3JlLgorICovCitzdGF0aWMgaW50IHFsX2V4ZWNfbWJfY21kKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IGksIHN0YXR1czsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBwZW5kaW5nLgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KKwkgKi8KKwlpZiAocWxfcmVhZDMyKHFkZXYsIENTUikgJiBDU1JfSFJJKQorCQlyZXR1cm4gLUVJTzsKKworCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUFJPQ19SRUdfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qCisJICogRmlsbCB0aGUgb3V0Ym91bmQgbWFpbGJveGVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5pbl9jb3VudDsgaSsrKSB7CisJCXN0YXR1cyA9IHFsX3dyaXRlX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9pbiArIGksCisJCQkJCQltYmNwLT5tYm94X2luW2ldKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZW5kOworCX0KKwkvKgorCSAqIFdha2UgdXAgdGhlIE1QSSBmaXJtd2FyZS4KKwkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9TRVRfSDJSX0lOVCk7CitlbmQ6CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fUFJPQ19SRUdfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogV2UgYXJlIGJlaW5nIGFza2VkIGJ5IGZpcm13YXJlIHRvIGFjY2VwdAorICogYSBjaGFuZ2UgdG8gdGhlIHBvcnQuICBUaGlzIGlzIG9ubHkKKyAqIGEgY2hhbmdlIHRvIG1heCBmcmFtZSBzaXplcyAoVHgvUngpLCBwYXVzZQorICogcGFyYW10ZXJzLCBvciBsb29wYmFjayBtb2RlLiBXZSB3YWtlIHVwIGEgd29ya2VyCisgKiB0byBoYW5kbGVyIHByb2Nlc3NpbmcgdGhpcyBzaW5jZSBhIG1haWxib3ggY29tbWFuZAorICogd2lsbCBuZWVkIHRvIGJlIHNlbnQgdG8gQUNLIHRoZSByZXF1ZXN0LgorICovCitzdGF0aWMgaW50IHFsX2lkY19yZXFfYWVuKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJnFkZXYtPmlkY19tYmM7CisKKwlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRW50ZXIhXG4iKTsKKwkvKiBHZXQgdGhlIHN0YXR1cyBkYXRhIGFuZCBzdGFydCB1cCBhIHRocmVhZCB0bworCSAqIGhhbmRsZSB0aGUgcmVxdWVzdC4KKwkgKi8KKwltYmNwID0gJnFkZXYtPmlkY19tYmM7CisJbWJjcC0+b3V0X2NvdW50ID0gNDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJDb3VsZCBub3QgcmVhZCBNUEksIHJlc2V0dGluZyBBU0lDIVxuIik7CisJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CisJfSBlbHNlCXsKKwkJLyogQmVnaW4gcG9sbGVkIG1vZGUgZWFybHkgc28KKwkJICogd2UgZG9uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0CisJCSAqIHdoZW4gd2UgbGVhdmUgbXBpX3dvcmtlci4KKwkJICovCisJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhxZGV2LT53b3JrcXVldWUsICZxZGV2LT5tcGlfaWRjX3dvcmssIDApOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBQcm9jZXNzIGFuIGludGVyLWRldmljZSBldmVudCBjb21wbGV0aW9uLgorICogSWYgZ29vZCwgc2lnbmFsIHRoZSBjYWxsZXIncyBjb21wbGV0aW9uLgorICovCitzdGF0aWMgaW50IHFsX2lkY19jbXBsdF9hZW4oc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmcWRldi0+aWRjX21iYzsKKwltYmNwLT5vdXRfY291bnQgPSA0OworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIFJJU0MhXG4iKTsKKwkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CisJfSBlbHNlCisJCS8qIFdha2UgdXAgdGhlIHNsZWVwaW5nIG1waV9pZGNfd29yayB0aHJlYWQgdGhhdCBpcworCQkgKiB3YWl0aW5nIGZvciB0aGlzIGV2ZW50LgorCQkgKi8KKwkJY29tcGxldGUoJnFkZXYtPmlkZV9jb21wbGV0aW9uKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyB2b2lkIHFsX2xpbmtfdXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKKwlpbnQgc3RhdHVzOwogCW1iY3AtPm91dF9jb3VudCA9IDI7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkKLQkJZ290byBleGl0OworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIiVzOiBDb3VsZCBub3QgZ2V0IG1haWxib3ggc3RhdHVzLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQogCiAJcWRldi0+bGlua19zdGF0dXMgPSBtYmNwLT5tYm94X291dFsxXTsKIAlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBVcC5cbiIpOwotCVFQUklOVEsocWRldiwgRFJWLCBJTkZPLCAiTGluayBTdGF0dXMgPSAweCUuMDh4LlxuIiwgbWJjcC0+bWJveF9vdXRbMV0pOwotCWlmICghbmV0aWZfY2Fycmllcl9vayhxZGV2LT5uZGV2KSkgewotCQlRUFJJTlRLKHFkZXYsIExJTkssIElORk8sICJMaW5rIGlzIFVwLlxuIik7Ci0JCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUocWRldi0+bmRldik7CisKKwkvKiBJZiB3ZSdyZSBjb21pbmcgYmFjayBmcm9tIGFuIElEQyBldmVudAorCSAqIHRoZW4gc2V0IHVwIHRoZSBDQU0gYW5kIGZyYW1lIHJvdXRpbmcuCisJICovCisJaWYgKHRlc3RfYml0KFFMX0NBTV9SVF9TRVQsICZxZGV2LT5mbGFncykpIHsKKwkJc3RhdHVzID0gcWxfY2FtX3JvdXRlX2luaXRpYWxpemUocWRldik7CisJCWlmIChzdGF0dXMpIHsKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCWNsZWFyX2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpOwogCX0KLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCi0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1IyUENJX0lOVCk7CisKKwkvKiBRdWV1ZSB1cCBhIHdvcmtlciB0byBjaGVjayB0aGUgZnJhbWUKKwkgKiBzaXplIGluZm9ybWF0aW9uLCBhbmQgZml4IGl0IGlmIGl0J3Mgbm90CisJICogdG8gb3VyIGxpa2luZy4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJRdWV1ZSBQb3J0IENvbmZpZyBXb3JrZXIhXG4iKTsKKwkJc2V0X2JpdChRTF9QT1JUX0NGRywgJnFkZXYtPmZsYWdzKTsKKwkJLyogQmVnaW4gcG9sbGVkIG1vZGUgZWFybHkgc28KKwkJICogd2UgZG9uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0CisJCSAqIHdoZW4gd2UgbGVhdmUgbXBpX3dvcmtlciBkcGMuCisJCSAqLworCQlxbF93cml0ZTMyKHFkZXYsIElOVFJfTUFTSywgKElOVFJfTUFTS19QSSA8PCAxNikpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLAorCQkJCSZxZGV2LT5tcGlfcG9ydF9jZmdfd29yaywgMCk7CisJfQorCisJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcWxfbGlua19kb3duKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CisJaW50IHN0YXR1czsKKwogCW1iY3AtPm91dF9jb3VudCA9IDM7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7Ci0JCWdvdG8gZXhpdDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMaW5rIGRvd24gQUVOIGJyb2tlbiFcbiIpOworCisJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7Cit9CisKK3N0YXRpYyBpbnQgcWxfc2ZwX2luKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1czsKKworCW1iY3AtPm91dF9jb3VudCA9IDU7CisKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJTRlAgaW4gQUVOIGJyb2tlbiFcbiIpOworCWVsc2UKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIlNGUCBpbnNlcnRpb24gZGV0ZWN0ZWQuXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcWxfc2ZwX291dChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBzdGF0dXM7CisKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIG91dCBBRU4gYnJva2VuIVxuIik7CisJZWxzZQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIHJlbW92YWwgZGV0ZWN0ZWQuXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcWxfYWVuX2xvc3Qoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKK3sKKwlpbnQgc3RhdHVzOworCisJbWJjcC0+b3V0X2NvdW50ID0gNjsKKworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxvc3QgQUVOIGJyb2tlbiFcbiIpOworCWVsc2UgeworCQlpbnQgaTsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxvc3QgQUVOIGRldGVjdGVkLlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJtYm94X291dFslZF0gPSAweCUuMDh4LlxuIiwKKwkJCQkJaSwgbWJjcC0+bWJveF9vdXRbaV0pOworCiAJfQogCi0JaWYgKG5ldGlmX2NhcnJpZXJfb2socWRldi0+bmRldikpIHsKLQkJUVBSSU5USyhxZGV2LCBMSU5LLCBJTkZPLCAiTGluayBpcyBEb3duLlxuIik7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKHFkZXYtPm5kZXYpOwotCX0KLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBEb3duLlxuIik7Ci0JUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxpbmsgU3RhdHVzID0gMHglLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzFdKTsKLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCi0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1IyUENJX0lOVCk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgcWxfaW5pdF9md19kb25lKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CisJaW50IHN0YXR1czsKKwogCW1iY3AtPm91dF9jb3VudCA9IDI7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkgeworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7Ci0JCWdvdG8gZXhpdDsKKwl9IGVsc2UgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCisJCQltYmNwLT5tYm94X291dFsxXSk7CisJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOworCQlpZiAoc3RhdHVzKQorCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOwogCX0KLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgaW5pdGlhbGl6ZWQhXG4iKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgc3RhdHVzID0gMHglLjA4eC5cbiIsCi0JCW1iY3AtPm1ib3hfb3V0WzBdKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCi0JCW1iY3AtPm1ib3hfb3V0WzFdKTsKLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCit9CisKKy8qIFByb2Nlc3MgYW4gYXN5bmMgZXZlbnQgYW5kIGNsZWFyIGl0IHVubGVzcyBpdCdzIGFuCisgKiBlcnJvciBjb25kaXRpb24uCisgKiAgVGhpcyBjYW4gZ2V0IGNhbGxlZCBpdGVyYXRpdmVseSBmcm9tIHRoZSBtcGlfd29yayB0aHJlYWQKKyAqICB3aGVuIGV2ZW50cyBhcnJpdmUgdmlhIGFuIGludGVycnVwdC4KKyAqICBJdCBhbHNvIGdldHMgY2FsbGVkIHdoZW4gYSBtYWlsYm94IGNvbW1hbmQgaXMgcG9sbGluZyBmb3IKKyAqICBpdCdzIGNvbXBsZXRpb24uICovCitzdGF0aWMgaW50IHFsX21waV9oYW5kbGVyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1czsKKwlpbnQgb3JpZ19jb3VudCA9IG1iY3AtPm91dF9jb3VudDsKKworCS8qIEp1c3QgZ2V0IG1haWxib3ggemVybyBmb3Igbm93LiAqLworCW1iY3AtPm91dF9jb3VudCA9IDE7CisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOworCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOworCQlnb3RvIGVuZDsKKwl9CisKKwlzd2l0Y2ggKG1iY3AtPm1ib3hfb3V0WzBdKSB7CisKKwkvKiBUaGlzIGNhc2UgaXMgb25seSBhY3RpdmUgd2hlbiB3ZSBhcnJpdmUgaGVyZQorCSAqIGFzIGEgcmVzdWx0IG9mIGlzc3VpbmcgYSBtYWlsYm94IGNvbW1hbmQgdG8KKwkgKiB0aGUgZmlybXdhcmUuCisJICovCisJY2FzZSBNQl9DTURfU1RTX0lOVFJNRFQ6CisJY2FzZSBNQl9DTURfU1RTX0dPT0Q6CisJY2FzZSBNQl9DTURfU1RTX0lOVkxEX0NNRDoKKwljYXNlIE1CX0NNRF9TVFNfWEZDX0VSUjoKKwljYXNlIE1CX0NNRF9TVFNfQ1NVTV9FUlI6CisJY2FzZSBNQl9DTURfU1RTX0VSUjoKKwljYXNlIE1CX0NNRF9TVFNfUEFSQU1fRVJSOgorCQkvKiBXZSBjYW4gb25seSBnZXQgbWFpbGJveCBzdGF0dXMgaWYgd2UncmUgcG9sbGluZyBmcm9tIGFuCisJCSAqIHVuZmluaXNoZWQgY29tbWFuZC4gIEdldCB0aGUgcmVzdCBvZiB0aGUgc3RhdHVzIGRhdGEgYW5kCisJCSAqIHJldHVybiBiYWNrIHRvIHRoZSBjYWxsZXIuCisJCSAqIFdlIG9ubHkgZW5kIHVwIGhlcmUgd2hlbiB3ZSdyZSBwb2xsaW5nIGZvciBhIG1haWxib3gKKwkJICogY29tbWFuZCBjb21wbGV0aW9uLgorCQkgKi8KKwkJbWJjcC0+b3V0X2NvdW50ID0gb3JpZ19jb3VudDsKKwkJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIFdlIGFyZSBiZWluZyBhc2tlZCBieSBmaXJtd2FyZSB0byBhY2NlcHQKKwkgKiBhIGNoYW5nZSB0byB0aGUgcG9ydC4gIFRoaXMgaXMgb25seQorCSAqIGEgY2hhbmdlIHRvIG1heCBmcmFtZSBzaXplcyAoVHgvUngpLCBwYXVzZQorCSAqIHBhcmFtdGVycywgb3IgbG9vcGJhY2sgbW9kZS4KKwkgKi8KKwljYXNlIEFFTl9JRENfUkVROgorCQlzdGF0dXMgPSBxbF9pZGNfcmVxX2FlbihxZGV2KTsKKwkJYnJlYWs7CisKKwkvKiBQcm9jZXNzIGFuZCBpbmJvdW5kIElEQyBldmVudC4KKwkgKiBUaGlzIHdpbGwgaGFwcGVuIHdoZW4gd2UncmUgdHJ5aW5nIHRvCisJICogY2hhbmdlIHR4L3J4IG1heCBmcmFtZSBzaXplLCBjaGFuZ2UgcGF1c2UKKwkgKiBwYXJhbXRlcnMgb3IgbG9vcGJhY2sgbW9kZS4KKwkgKi8KKwljYXNlIEFFTl9JRENfQ01QTFQ6CisJY2FzZSBBRU5fSURDX0VYVDoKKwkJc3RhdHVzID0gcWxfaWRjX2NtcGx0X2FlbihxZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9MSU5LX1VQOgorCQlxbF9saW5rX3VwKHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWNhc2UgQUVOX0xJTktfRE9XTjoKKwkJcWxfbGlua19kb3duKHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWNhc2UgQUVOX0ZXX0lOSVRfRE9ORToKKwkJLyogSWYgd2UncmUgaW4gcHJvY2VzcyBvbiBleGVjdXRpbmcgdGhlIGZpcm13YXJlLAorCQkgKiB0aGVuIGNvbnZlcnQgdGhlIHN0YXR1cyB0byBub3JtYWwgbWFpbGJveCBzdGF0dXMuCisJCSAqLworCQlpZiAobWJjcC0+bWJveF9pblswXSA9PSBNQl9DTURfRVhfRlcpIHsKKwkJCW1iY3AtPm91dF9jb3VudCA9IG9yaWdfY291bnQ7CisJCQlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCQkJbWJjcC0+bWJveF9vdXRbMF0gPSBNQl9DTURfU1RTX0dPT0Q7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCXFsX2luaXRfZndfZG9uZShxZGV2LCBtYmNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9BRU5fU0ZQX0lOOgorCQlxbF9zZnBfaW4ocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJY2FzZSBBRU5fQUVOX1NGUF9PVVQ6CisJCXFsX3NmcF9vdXQocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJLyogVGhpcyBldmVudCBjYW4gYXJyaXZlIGF0IGJvb3QgdGltZSBvciBhZnRlciBhbgorCSAqIE1QSSByZXNldCBpZiB0aGUgZmlybXdhcmUgZmFpbGVkIHRvIGluaXRpYWxpemUuCisJICovCisJY2FzZSBBRU5fRldfSU5JVF9GQUlMOgorCQkvKiBJZiB3ZSdyZSBpbiBwcm9jZXNzIG9uIGV4ZWN1dGluZyB0aGUgZmlybXdhcmUsCisJCSAqIHRoZW4gY29udmVydCB0aGUgc3RhdHVzIHRvIG5vcm1hbCBtYWlsYm94IHN0YXR1cy4KKwkJICovCisJCWlmIChtYmNwLT5tYm94X2luWzBdID09IE1CX0NNRF9FWF9GVykgeworCQkJbWJjcC0+b3V0X2NvdW50ID0gb3JpZ19jb3VudDsKKwkJCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJCQltYmNwLT5tYm94X291dFswXSA9IE1CX0NNRF9TVFNfRVJSOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkZpcm13YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9TWVNfRVJSOgorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIlN5c3RlbSBFcnJvci5cbiIpOworCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwkJc3RhdHVzID0gLUVJTzsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9BRU5fTE9TVDoKKwkJcWxfYWVuX2xvc3QocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJVbnN1cHBvcnRlZCBBRSAlLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzBdKTsKKwkJLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCisJfQorZW5kOgogCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEV4ZWN1dGUgYSBzaW5nbGUgbWFpbGJveCBjb21tYW5kLgorICogbWJjcCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdTMyLiAgRWFjaAorICogZWxlbWVudCBpbiB0aGUgYXJyYXkgY29udGFpbnMgdGhlIHZhbHVlIGZvciBpdCdzCisgKiByZXNwZWN0aXZlIG1haWxib3ggcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgcWxfbWFpbGJveF9jb21tYW5kKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1cywgY291bnQ7CisKKwltdXRleF9sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOworCisJLyogQmVnaW4gcG9sbGVkIG1vZGUgZm9yIE1QSSAqLworCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CisKKwkvKiBMb2FkIHRoZSBtYWlsYm94IHJlZ2lzdGVycyBhbmQgd2FrZSB1cCBNUEkgUklTQy4gKi8KKwlzdGF0dXMgPSBxbF9leGVjX21iX2NtZChxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVuZDsKKworCisJLyogSWYgd2UncmUgZ2VuZXJhdGluZyBhIHN5c3RlbSBlcnJvciwgdGhlbiB0aGVyZSdzIG5vdGhpbmcKKwkgKiB0byB3YWl0IGZvci4KKwkgKi8KKwlpZiAobWJjcC0+bWJveF9pblswXSA9PSBNQl9DTURfTUFLRV9TWVNfRVJSKQorCQlnb3RvIGVuZDsKKworCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBXZSBsb29wCisJICogaGVyZSBiZWNhdXNlIHNvbWUgQUVOIG1pZ2h0IGFycml2ZSB3aGlsZQorCSAqIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBtYWlsYm94IGNvbW1hbmQgdG8KKwkgKiBjb21wbGV0ZS4gSWYgbW9yZSB0aGFuIDUgYXJyaXZlIHRoZW4gd2UgY2FuCisJICogYXNzdW1lIHNvbWV0aGluZyBpcyB3cm9uZy4gKi8KKwljb3VudCA9IDU7CisJZG8geworCQkvKiBXYWl0IGZvciB0aGUgaW50ZXJydXB0IHRvIGNvbWUgaW4uICovCisJCXN0YXR1cyA9IHFsX3dhaXRfbWJ4X2NtZF9jbXBsdChxZGV2KTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZW5kOworCisJCS8qIFByb2Nlc3MgdGhlIGV2ZW50LiAgSWYgaXQncyBhbiBBRU4sIGl0CisJCSAqIHdpbGwgYmUgaGFuZGxlZCBpbi1saW5lIG9yIGEgd29ya2VyCisJCSAqIHdpbGwgYmUgc3Bhd25lZC4gSWYgaXQncyBvdXIgY29tcGxldGlvbgorCQkgKiB3ZSB3aWxsIGNhdGNoIGl0IGJlbG93LgorCQkgKi8KKwkJc3RhdHVzID0gcWxfbXBpX2hhbmRsZXIocWRldiwgbWJjcCk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVuZDsKKworCQkvKiBJdCdzIGVpdGhlciB0aGUgY29tcGxldGlvbiBmb3Igb3VyIG1haWxib3gKKwkJICogY29tbWFuZCBjb21wbGV0ZSBvciBhbiBBRU4uICBJZiBpdCdzIG91cgorCQkgKiBjb21wbGV0aW9uIHRoZW4gZ2V0IG91dC4KKwkJICovCisJCWlmICgoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgPT0KKwkJCQkJTUJfQ01EX1NUU19HT09EKSB8fAorCQkJKChtYmNwLT5tYm94X291dFswXSAmIDB4MDAwMGYwMDApID09CisJCQkJCU1CX0NNRF9TVFNfSU5UUk1EVCkpCisJCQlicmVhazsKKwl9IHdoaWxlICgtLWNvdW50KTsKKworCWlmICghY291bnQpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0ZS5cbiIpOworCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBOb3cgd2UgY2FuIGNsZWFyIHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uCisJICogYW5kIGxvb2sgYXQgb3VyIHN0YXR1cy4KKwkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9DTFJfUjJQQ0lfSU5UKTsKKworCWlmICgoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgIT0KKwkJCQkJTUJfQ01EX1NUU19HT09EKSAmJgorCQkoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgIT0KKwkJCQkJTUJfQ01EX1NUU19JTlRSTURUKSkgeworCQlxbF9kaXNwbGF5X21iX3N0cyhxZGV2LCBtYmNwKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOworCS8qIEVuZCBwb2xsZWQgbW9kZSBmb3IgTVBJICovCisJcWxfd3JpdGUzMihxZGV2LCBJTlRSX01BU0ssIChJTlRSX01BU0tfUEkgPDwgMTYpIHwgSU5UUl9NQVNLX1BJKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgZnVuY3Rpb25hbCBzdGF0ZSBmb3IgTVBJIGZpcm13YXJlLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBxbF9tYl9nZXRfZndfc3RhdGUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXMgPSAwOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMTsKKwltYmNwLT5vdXRfY291bnQgPSAyOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9HRVRfRldfU1RBVEU7CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgR2V0IEZpcm13YXJlIFN0YXRlLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCisJLyogSWYgYml0IHplcm8gaXMgc2V0IGluIG1ieCAxIHRoZW4gdGhlIGZpcm13YXJlIGlzCisJICogcnVubmluZywgYnV0IG5vdCBpbml0aWFsaXplZC4gIFRoaXMgc2hvdWxkIG5ldmVyCisJICogaGFwcGVuLgorCSAqLworCWlmIChtYmNwLT5tYm94X291dFsxXSAmIDEpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGaXJtd2FyZSB3YWl0aW5nIGZvciBpbml0aWFsaXphdGlvbi5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFNlbmQgYW5kIEFDSyBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlIHRvCisgKiBsZXQgaXQgY29udGludWUgd2l0aCB0aGUgY2hhbmdlLgorICovCitpbnQgcWxfbWJfaWRjX2FjayhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7CisJaW50IHN0YXR1cyA9IDA7CisKKwltZW1zZXQobWJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtYm94X3BhcmFtcykpOworCisJbWJjcC0+aW5fY291bnQgPSA1OworCW1iY3AtPm91dF9jb3VudCA9IDE7CisKKwltYmNwLT5tYm94X2luWzBdID0gTUJfQ01EX0lEQ19BQ0s7CisJbWJjcC0+bWJveF9pblsxXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbMV07CisJbWJjcC0+bWJveF9pblsyXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbMl07CisJbWJjcC0+bWJveF9pblszXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbM107CisJbWJjcC0+bWJveF9pbls0XSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbNF07CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgSURDIEFDSyBzZW5kLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEdldCBsaW5rIHNldHRpbmdzIGFuZCBtYXhpbXVtIGZyYW1lIHNpemUgc2V0dGluZ3MKKyAqIGZvciB0aGUgY3VycmVudCBwb3J0LgorICogTW9zdCBsaWtlbHkgd2lsbCBibG9jay4KKyAqLworc3RhdGljIGludCBxbF9tYl9zZXRfcG9ydF9jZmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXMgPSAwOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMzsKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9TRVRfUE9SVF9DRkc7CisJbWJjcC0+bWJveF9pblsxXSA9IHFkZXYtPmxpbmtfY29uZmlnOworCW1iY3AtPm1ib3hfaW5bMl0gPSBxZGV2LT5tYXhfZnJhbWVfc2l6ZTsKKworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19JTlRSTURUKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiUG9ydCBDb25maWcgc2VudCwgd2FpdCBmb3IgSURDLlxuIik7CisJfSBlbHNlCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgU2V0IFBvcnQgQ29uZmlndXJhdGlvbi5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgbGluayBzZXR0aW5ncyBhbmQgbWF4aW11bSBmcmFtZSBzaXplIHNldHRpbmdzCisgKiBmb3IgdGhlIGN1cnJlbnQgcG9ydC4KKyAqIE1vc3QgbGlrZWx5IHdpbGwgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgcWxfbWJfZ2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzID0gMDsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDE7CisJbWJjcC0+b3V0X2NvdW50ID0gMzsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfR0VUX1BPUlRfQ0ZHOworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmFpbGVkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9IGVsc2UJeworCQlRUFJJTlRLKHFkZXYsIERSViwgREVCVUcsCisJCQkiUGFzc2VkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJcWRldi0+bGlua19jb25maWcgPSBtYmNwLT5tYm94X291dFsxXTsKKwkJcWRldi0+bWF4X2ZyYW1lX3NpemUgPSBtYmNwLT5tYm94X291dFsyXTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogSURDIC0gSW50ZXIgRGV2aWNlIENvbW11bmljYXRpb24uLi4KKyAqIFNvbWUgZmlybXdhcmUgY29tbWFuZHMgcmVxdWlyZSBjb25zZW50IG9mIGFkamFjZW50IEZDT0UKKyAqIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgdGhlIE9LLCBvciBhCisgKiBjb3VudGVyLXJlcXVlc3QgZm9yIGEgbGl0dGxlIG1vcmUgdGltZS5pCisgKiBUaGUgZmlybXdhcmUgd2lsbCBjb21wbGV0ZSB0aGUgcmVxdWVzdCBpZiB0aGUgb3RoZXIKKyAqIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzcG9uZC4KKyAqLworc3RhdGljIGludCBxbF9pZGNfd2FpdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgc3RhdHVzID0gLUVUSU1FRE9VVDsKKwlsb25nIHdhaXRfdGltZSA9IDEgKiBIWjsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmcWRldi0+aWRjX21iYzsKKwlkbyB7CisJCS8qIFdhaXQgaGVyZSBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUKKwkJICogdmlhIHRoZSBJREMgcHJvY2Vzcy4KKwkJICovCisJCXdhaXRfdGltZSA9CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnFkZXYtPmlkZV9jb21wbGV0aW9uLAorCQkJCQkJCXdhaXRfdGltZSk7CisJCWlmICghd2FpdF90aW1lKSB7CisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJCSJJREMgVGltZW91dC5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogTm93IGV4YW1pbmUgdGhlIHJlc3BvbnNlIGZyb20gdGhlIElEQyBwcm9jZXNzLgorCQkgKiBXZSBtaWdodCBoYXZlIGEgZ29vZCBjb21wbGV0aW9uIG9yIGEgcmVxdWVzdCBmb3IKKwkJICogbW9yZSB3YWl0IHRpbWUuCisJCSAqLworCQlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gQUVOX0lEQ19FWFQpIHsKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkJIklEQyBUaW1lIEV4dGVuc2lvbiBmcm9tIGZ1bmN0aW9uLlxuIik7CisJCQl3YWl0X3RpbWUgKz0gKG1iY3AtPm1ib3hfb3V0WzFdID4+IDgpICYgMHgwMDAwMDAwZjsKKwkJfSBlbHNlIGlmIChtYmNwLT5tYm94X291dFswXSA9PSBBRU5fSURDX0NNUExUKSB7CisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJCSJJREMgU3VjY2Vzcy5cbiIpOworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCQkiSURDOiBJbnZhbGlkIFN0YXRlIDB4JS4wNHguXG4iLAorCQkJCW1iY3AtPm1ib3hfb3V0WzBdKTsKKwkJCXN0YXR1cyA9IC1FSU87CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHdhaXRfdGltZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBBUEkgY2FsbGVkIGluIHdvcmsgdGhyZWFkIGNvbnRleHQgdG8gc2V0IG5ldyBUWC9SWAorICogbWF4aW11bSBmcmFtZSBzaXplIHZhbHVlcyB0byBtYXRjaCBNVFUuCisgKi8KK3N0YXRpYyBpbnQgcWxfc2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RhdHVzID0gcWxfbWJfc2V0X3BvcnRfY2ZnKHFkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gcWxfaWRjX3dhaXQocWRldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgd29ya2VyIHRocmVhZHMgdGhhdCBwcm9jZXNzCisgKiBldmVudHMgdGhhdCBtYXkgc2xlZXAgd2FpdGluZyBmb3IgY29tcGxldGlvbi4KKyAqLworCisvKiBUaGlzIHRocmVhZCBnZXRzIHRoZSBtYXhpbXVtIFRYIGFuZCBSWCBmcmFtZSBzaXplIHZhbHVlcworICogZnJvbSB0aGUgZmlybXdhcmUgYW5kLCBpZiBuZWNlc3NhcnksIGNoYW5nZXMgdGhlbSB0byBtYXRjaAorICogdGhlIE1UVSBzZXR0aW5nLgorICovCit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxfYWRhcHRlciwgbXBpX3BvcnRfY2ZnX3dvcmsud29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9tYl9nZXRfcG9ydF9jZmcocWRldik7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkJ1ZzogRmFpbGVkIHRvIGdldCBwb3J0IGNvbmZpZyBkYXRhLlxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChuZGV2LT5tdHUgPD0gMjUwMCkKKwkJZ290byBlbmQ7CisJZWxzZSBpZiAocWRldi0+bGlua19jb25maWcgJiBDRkdfSlVNQk9fRlJBTUVfU0laRSAmJgorCQkJcWRldi0+bWF4X2ZyYW1lX3NpemUgPT0KKwkJCUNGR19ERUZBVUxUX01BWF9GUkFNRV9TSVpFKQorCQlnb3RvIGVuZDsKKworCXFkZXYtPmxpbmtfY29uZmlnIHw9CUNGR19KVU1CT19GUkFNRV9TSVpFOworCXFkZXYtPm1heF9mcmFtZV9zaXplID0gQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkU7CisJc3RhdHVzID0gcWxfc2V0X3BvcnRfY2ZnKHFkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IEZhaWxlZCB0byBzZXQgcG9ydCBjb25maWcgZGF0YS5cbiIpOworCQlnb3RvIGVycjsKKwl9CitlbmQ6CisJY2xlYXJfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpOworCXJldHVybjsKK2VycjoKKwlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwlnb3RvIGVuZDsKK30KKworLyogUHJvY2VzcyBhbiBpbnRlci1kZXZpY2UgcmVxdWVzdC4gIFRoaXMgaXMgaXNzdWVzIGJ5CisgKiB0aGUgZmlybXdhcmUgaW4gcmVzcG9uc2UgdG8gYW5vdGhlciBmdW5jdGlvbiByZXF1ZXN0aW5nCisgKiBhIGNoYW5nZSB0byB0aGUgcG9ydC4gV2Ugc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSBhIGNoYW5nZQorICogaGFzIGJlZW4gbWFkZSBhbmQgdGhlbiBzZW5kIGEgbWFpbGJveCBjb21tYW5kIEFDS2luZworICogdGhlIGNoYW5nZSByZXF1ZXN0LgorICovCit2b2lkIHFsX21waV9pZGNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9pZGNfd29yay53b3JrKTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZxZGV2LT5pZGNfbWJjOworCXUzMiBhZW47CisKKwlhZW4gPSBtYmNwLT5tYm94X291dFsxXSA+PiAxNjsKKworCXN3aXRjaCAoYWVuKSB7CisJZGVmYXVsdDoKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IFVuaGFuZGxlZCBJREMgYWN0aW9uLlxuIik7CisJCWJyZWFrOworCWNhc2UgTUJfQ01EX1BPUlRfUkVTRVQ6CisJY2FzZSBNQl9DTURfU0VUX1BPUlRfQ0ZHOgorCWNhc2UgTUJfQ01EX1NUT1BfRlc6CisJCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOworCQkvKiBTaWduYWwgdGhlIHJlc3VsdGluZyBsaW5rIHVwIEFFTgorCQkgKiB0aGF0IHRoZSBmcmFtZSByb3V0aW5nIGFuZCBtYWMgYWRkcgorCQkgKiBuZWVkcyB0byBiZSBzZXQuCisJCSAqICovCisJCXNldF9iaXQoUUxfQ0FNX1JUX1NFVCwgJnFkZXYtPmZsYWdzKTsKKwkJc3RhdHVzID0gcWxfbWJfaWRjX2FjayhxZGV2KTsKKwkJaWYgKHN0YXR1cykgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IE5vIHBlbmRpbmcgSURDIVxuIik7CisJCX0KKwl9CiB9CiAKIHZvaWQgcWxfbXBpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTA0LDM3ICs4MzEsMTYgQEAKIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbF9hZGFwdGVyLCBtcGlfd29yay53b3JrKTsKIAlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOwogCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7Ci0JbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCW11dGV4X2xvY2soJnFkZXYtPm1waV9tdXRleCk7CiAKIAl3aGlsZSAocWxfcmVhZDMyKHFkZXYsIFNUUykgJiBTVFNfUEkpIHsKLQkJaWYgKHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCkpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKLQkJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7Ci0JCX0KLQotCQlzd2l0Y2ggKG1iY3AtPm1ib3hfb3V0WzBdKSB7Ci0JCWNhc2UgQUVOX0xJTktfVVA6Ci0JCQlxbF9saW5rX3VwKHFkZXYsIG1iY3ApOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUVOX0xJTktfRE9XTjoKLQkJCXFsX2xpbmtfZG93bihxZGV2LCBtYmNwKTsKLQkJCWJyZWFrOwotCQljYXNlIEFFTl9GV19JTklUX0RPTkU6Ci0JCQlxbF9pbml0X2Z3X2RvbmUocWRldiwgbWJjcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBNQl9DTURfU1RTX0dPT0Q6Ci0JCQlicmVhazsKLQkJY2FzZSBBRU5fRldfSU5JVF9GQUlMOgotCQljYXNlIEFFTl9TWVNfRVJSOgotCQljYXNlIE1CX0NNRF9TVFNfRVJSOgotCQkJcWxfcXVldWVfZndfZXJyb3IocWRldik7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBDbGVhciB0aGUgTVBJIGZpcm13YXJlIHN0YXR1cy4gKi8KLQkJCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOwotCQkJYnJlYWs7Ci0JCX0KKwkJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKwkJbWJjcC0+b3V0X2NvdW50ID0gMTsKKwkJcWxfbXBpX2hhbmRsZXIocWRldiwgbWJjcCk7CiAJfQorCisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOwogCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCAwKTsKIH0KIApAQCAtMTQyLDkgKzg0OCw4IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9yZXNldF93b3JrLndvcmspOwotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCSJFbnRlciwgcWRldiA9ICVwLi5cbiIsIHFkZXYpOwotCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX1NFVF9SU1QpOwotCW1zbGVlcCg1MCk7Ci0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1JTVCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfaWRjX3dvcmspOworCXFsX3NvZnRfcmVzZXRfbXBpX3Jpc2MocWRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yNjA0MC5jIGIvZHJpdmVycy9uZXQvcjYwNDAuYwppbmRleCA5Yzk1ZWJlLi4wYTM3Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yNjA0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKQEAgLTQ5LDEyICs0OSwxMiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicjYwNDAiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIxIgotI2RlZmluZSBEUlZfUkVMREFURQkiMDlKYW4yMDA5IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yMiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjI1TWFyMjAwOSIKIAogLyogUEhZIENISVAgQWRkcmVzcyAqLwogI2RlZmluZSBQSFkxX0FERFIJMQkvKiBGb3IgTUFDMSAqLwotI2RlZmluZSBQSFkyX0FERFIJMgkvKiBGb3IgTUFDMiAqLworI2RlZmluZSBQSFkyX0FERFIJMwkvKiBGb3IgTUFDMiAqLwogI2RlZmluZSBQSFlfTU9ERQkweDMxMDAJLyogUEhZIENISVAgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBQSFlfQ0FQCQkweDAxRTEJLyogUEhZIENISVAgUmVnaXN0ZXIgNCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCBkZDgzZjkzLi4wNmM1MzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTMyNTMsMTMgKzMyNTMsNiBAQAogCQlvcHRzMSB8PSBGaXJzdEZyYWc7CiAJfSBlbHNlIHsKIAkJbGVuID0gc2tiLT5sZW47Ci0KLQkJaWYgKHVubGlrZWx5KGxlbiA8IEVUSF9aTEVOKSkgewotCQkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCQlnb3RvIGVycl91cGRhdGVfc3RhdHM7Ci0JCQlsZW4gPSBFVEhfWkxFTjsKLQkJfQotCiAJCW9wdHMxIHw9IEZpcnN0RnJhZyB8IExhc3RGcmFnOwogCQl0cC0+dHhfc2tiW2VudHJ5XS5za2IgPSBza2I7CiAJfQpAQCAtMzI5Nyw3ICszMjkwLDYgQEAKIGVycl9zdG9wOgogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlyZXQgPSBORVRERVZfVFhfQlVTWTsKLWVycl91cGRhdGVfc3RhdHM6CiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJZ290byBvdXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yaW9uZXQuYyBiL2RyaXZlcnMvbmV0L3Jpb25ldC5jCmluZGV4IGE2ZmQyN2EuLmVjNTllMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Jpb25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3Jpb25ldC5jCkBAIC0zNjIsOCArMzYyLDcgQEAKIAluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBSSU9ORVRfUlhfUklOR19TSVpFOyBpKyspCi0JCWlmIChybmV0LT5yeF9za2JbaV0pCi0JCQlrZnJlZV9za2Iocm5ldC0+cnhfc2tiW2ldKTsKKwkJa2ZyZWVfc2tiKHJuZXQtPnJ4X3NrYltpXSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVlciwgdG1wLCAmcmlvbmV0X3BlZXJzLCBub2RlKSB7CiAJCWlmIChyaW9uZXRfYWN0aXZlW3BlZXItPnJkZXYtPmRlc3RpZF0pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYwppbmRleCA2NDkwMzQ5Li41MTgyYWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jCkBAIC0yNiw3ICsyNiw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IChzdHJ1Y3QgZWZ4X25pYyAqKWNvbnRleHQ7CiAJc3RydWN0IGVmeF9ibGlua2VyICpibCA9ICZlZngtPmJvYXJkX2luZm8uYmxpbmtlcjsKLQllZngtPmJvYXJkX2luZm8uc2V0X2ZhdWx0X2xlZChlZngsIGJsLT5zdGF0ZSk7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQoZWZ4LCBibC0+c3RhdGUpOwogCWJsLT5zdGF0ZSA9ICFibC0+c3RhdGU7CiAJaWYgKGJsLT5yZXN1Ym1pdCkKIAkJbW9kX3RpbWVyKCZibC0+dGltZXIsIGppZmZpZXMgKyBCTElOS19JTlRFUlZBTCk7CkBAIC00OCw3ICs0OCw3IEBACiAJCWJsaW5rZXItPnJlc3VibWl0ID0gZmFsc2U7CiAJCWlmIChibGlua2VyLT50aW1lci5mdW5jdGlvbikKIAkJCWRlbF90aW1lcl9zeW5jKCZibGlua2VyLT50aW1lcik7Ci0JCWVmeC0+Ym9hcmRfaW5mby5zZXRfZmF1bHRfbGVkKGVmeCwgZmFsc2UpOworCQllZngtPmJvYXJkX2luZm8uaW5pdF9sZWRzKGVmeCk7CiAJfQogfQogCkBAIC0xODUsNyArMTg1LDcgQEAKICNkZWZpbmUgU0ZFNDAwMl9SWF9MRUQgICAgKDApCS8qIEdyZWVuICovCiAjZGVmaW5lIFNGRTQwMDJfVFhfTEVEICAgICgxKQkvKiBBbWJlciAqLwogCi1zdGF0aWMgaW50IHNmZTQwMDJfaW5pdF9sZWRzKHN0cnVjdCBlZnhfbmljICplZngpCitzdGF0aWMgdm9pZCBzZmU0MDAyX2luaXRfbGVkcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCS8qIFNldCB0aGUgVFggYW5kIFJYIExFRHMgdG8gcmVmbGVjdCBzdGF0dXMgYW5kIGFjdGl2aXR5LCBhbmQgdGhlCiAJICogZmF1bHQgTEVEIG9mZiAqLwpAQCAtMTk0LDExICsxOTQsOSBAQAogCXhmcF9zZXRfbGVkKGVmeCwgU0ZFNDAwMl9SWF9MRUQsCiAJCSAgICBRVUFLRV9MRURfUlhMSU5LIHwgUVVBS0VfTEVEX0xJTktfQUNUU1RBVCk7CiAJeGZwX3NldF9sZWQoZWZ4LCBTRkU0MDAyX0ZBVUxUX0xFRCwgUVVBS0VfTEVEX09GRik7Ci0JZWZ4LT5ib2FyZF9pbmZvLmJsaW5rZXIubGVkX251bSA9IFNGRTQwMDJfRkFVTFRfTEVEOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZmU0MDAyX2ZhdWx0X2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQorc3RhdGljIHZvaWQgc2ZlNDAwMl9zZXRfaWRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhdGUpCiB7CiAJeGZwX3NldF9sZWQoZWZ4LCBTRkU0MDAyX0ZBVUxUX0xFRCwgc3RhdGUgPyBRVUFLRV9MRURfT04gOgogCQkJUVVBS0VfTEVEX09GRik7CkBAIC0yMjIsNyArMjIwLDY3IEBACiAJCXJldHVybiByYzsKIAllZngtPmJvYXJkX2luZm8ubW9uaXRvciA9IHNmZTQwMDJfY2hlY2tfaHc7CiAJZWZ4LT5ib2FyZF9pbmZvLmluaXRfbGVkcyA9IHNmZTQwMDJfaW5pdF9sZWRzOwotCWVmeC0+Ym9hcmRfaW5mby5zZXRfZmF1bHRfbGVkID0gc2ZlNDAwMl9mYXVsdF9sZWQ7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQgPSBzZmU0MDAyX3NldF9pZF9sZWQ7CisJZWZ4LT5ib2FyZF9pbmZvLmJsaW5rID0gYm9hcmRfYmxpbms7CisJZWZ4LT5ib2FyZF9pbmZvLmZpbmkgPSBlZnhfZmluaV9sbTg3OworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN1cHBvcnQgZm9yIHRoZSBTRk40MTEyRgorICoKKyAqLworc3RhdGljIHU4IHNmbjQxMTJmX2xtODdfY2hhbm5lbCA9IDB4MDM7IC8qIHVzZSBBSU4gbm90IEZBTiBpbnB1dHMgKi8KKworc3RhdGljIGNvbnN0IHU4IHNmbjQxMTJmX2xtODdfcmVnc1tdID0geworCUxNODdfSU5fTElNSVRTKDAsIDB4ODMsIDB4OTEpLAkJLyogMi41VjogIDEuOFYgKy8tIDUlICovCisJTE04N19JTl9MSU1JVFMoMSwgMHg1MSwgMHg1YSksCQkvKiBWY2NwMTogMS4yViArLy0gNSUgKi8KKwlMTTg3X0lOX0xJTUlUUygyLCAweGI2LCAweGNhKSwJCS8qIDMuM1Y6ICAzLjNWICsvLSA1JSAqLworCUxNODdfSU5fTElNSVRTKDQsIDB4YjAsIDB4ZTApLAkJLyogMTJWOiAgIDExLTE0ViAqLworCUxNODdfSU5fTElNSVRTKDUsIDB4NDQsIDB4NGIpLAkJLyogVmNjcDI6IDEuMFYgKy8tIDUlICovCisJTE04N19BSU5fTElNSVRTKDEsIDB4OTEsIDB4YTEpLAkJLyogQUlOMjogIDEuNVYgKy8tIDUlICovCisJTE04N19URU1QX0lOVF9MSU1JVFMoMTAsIDYwKSwJCS8qIGJvYXJkICovCisJTE04N19URU1QX0VYVDFfTElNSVRTKDEwLCA3MCksCQkvKiBGYWxjb24gKi8KKwkwCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNmbjQxMTJmX2h3bW9uX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oImxtODciLCAweDJlKSwKKwkucGxhdGZvcm1fZGF0YQk9ICZzZm40MTEyZl9sbTg3X2NoYW5uZWwsCisJLmlycQkJPSAtMSwKK307CisKKyNkZWZpbmUgU0ZONDExMkZfQUNUX0xFRAkwCisjZGVmaW5lIFNGTjQxMTJGX0xJTktfTEVECTEKKworc3RhdGljIHZvaWQgc2ZuNDExMmZfaW5pdF9sZWRzKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJeGZwX3NldF9sZWQoZWZ4LCBTRk40MTEyRl9BQ1RfTEVELAorCQkgICAgUVVBS0VfTEVEX1JYTElOSyB8IFFVQUtFX0xFRF9MSU5LX0FDVCk7CisJeGZwX3NldF9sZWQoZWZ4LCBTRk40MTEyRl9MSU5LX0xFRCwKKwkJICAgIFFVQUtFX0xFRF9SWExJTksgfCBRVUFLRV9MRURfTElOS19TVEFUKTsKK30KKworc3RhdGljIHZvaWQgc2ZuNDExMmZfc2V0X2lkX2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQoreworCXhmcF9zZXRfbGVkKGVmeCwgU0ZONDExMkZfTElOS19MRUQsCisJCSAgICBzdGF0ZSA/IFFVQUtFX0xFRF9PTiA6IFFVQUtFX0xFRF9PRkYpOworfQorCitzdGF0aWMgaW50IHNmbjQxMTJmX2NoZWNrX2h3KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJLyogTWFzayBvdXQgdW51c2VkIHNlbnNvcnMgKi8KKwlyZXR1cm4gZWZ4X2NoZWNrX2xtODcoZWZ4LCB+MHg0OCk7Cit9CisKK3N0YXRpYyBpbnQgc2ZuNDExMmZfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCWludCByYyA9IGVmeF9pbml0X2xtODcoZWZ4LCAmc2ZuNDExMmZfaHdtb25faW5mbywgc2ZuNDExMmZfbG04N19yZWdzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwllZngtPmJvYXJkX2luZm8ubW9uaXRvciA9IHNmbjQxMTJmX2NoZWNrX2h3OworCWVmeC0+Ym9hcmRfaW5mby5pbml0X2xlZHMgPSBzZm40MTEyZl9pbml0X2xlZHM7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQgPSBzZm40MTEyZl9zZXRfaWRfbGVkOwogCWVmeC0+Ym9hcmRfaW5mby5ibGluayA9IGJvYXJkX2JsaW5rOwogCWVmeC0+Ym9hcmRfaW5mby5maW5pID0gZWZ4X2ZpbmlfbG04NzsKIAlyZXR1cm4gMDsKQEAgLTI0Myw2ICszMDEsOCBAQAogCXsgRUZYX0JPQVJEX1NGRTQwMDIsICJTRkU0MDAyIiwgIlhGUCBhZGFwdGVyIiwgc2ZlNDAwMl9pbml0IH0sCiAJeyBFRlhfQk9BUkRfU0ZONDExMVQsICJTRk40MTExVCIsICIxMDAvMTAwMC8xMEdCQVNFLVQgYWRhcHRlciIsCiAJICBzZm40MTExdF9pbml0IH0sCisJeyBFRlhfQk9BUkRfU0ZONDExMkYsICJTRk40MTEyRiIsICJTRlArIGFkYXB0ZXIiLAorCSAgc2ZuNDExMmZfaW5pdCB9LAogfTsKIAogdm9pZCBlZnhfc2V0X2JvYXJkX2luZm8oc3RydWN0IGVmeF9uaWMgKmVmeCwgdTE2IHJldmlzaW9uX2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmggYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmgKaW5kZXggZDkzYzZjNi4uNDQ5NDJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaApAQCAtMTUsNiArMTUsNyBAQAogCUVGWF9CT0FSRF9TRkU0MDAxID0gMSwKIAlFRlhfQk9BUkRfU0ZFNDAwMiA9IDIsCiAJRUZYX0JPQVJEX1NGTjQxMTFUID0gMHg1MSwKKwlFRlhfQk9BUkRfU0ZONDExMkYgPSAweDUyLAogfTsKIAogZXh0ZXJuIHZvaWQgZWZ4X3NldF9ib2FyZF9pbmZvKHN0cnVjdCBlZnhfbmljICplZngsIHUxNiByZXZpc2lvbl9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCA3NTgzNjU5Li42ZWZmOWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC0xMzMsNiArMTMzLDE2IEBACiBtb2R1bGVfcGFyYW0ocGh5X2ZsYXNoX2NmZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGh5X2ZsYXNoX2NmZywgIlNldCBQSFlzIGludG8gcmVmbGFzaCBtb2RlIGluaXRpYWxseSIpOwogCitzdGF0aWMgdW5zaWduZWQgaXJxX2FkYXB0X2xvd190aHJlc2ggPSAxMDAwMDsKK21vZHVsZV9wYXJhbShpcnFfYWRhcHRfbG93X3RocmVzaCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9hZGFwdF9sb3dfdGhyZXNoLAorCQkgIlRocmVzaG9sZCBzY29yZSBmb3IgcmVkdWNpbmcgSVJRIG1vZGVyYXRpb24iKTsKKworc3RhdGljIHVuc2lnbmVkIGlycV9hZGFwdF9oaWdoX3RocmVzaCA9IDIwMDAwOworbW9kdWxlX3BhcmFtKGlycV9hZGFwdF9oaWdoX3RocmVzaCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9hZGFwdF9oaWdoX3RocmVzaCwKKwkJICJUaHJlc2hvbGQgc2NvcmUgZm9yIGluY3JlYXNpbmcgSVJRIG1vZGVyYXRpb24iKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVXRpbGl0eSBmdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKQEAgLTIyMyw2ICsyMzMsMzUgQEAKIAlyeF9wYWNrZXRzID0gZWZ4X3Byb2Nlc3NfY2hhbm5lbChjaGFubmVsLCBidWRnZXQpOwogCiAJaWYgKHJ4X3BhY2tldHMgPCBidWRnZXQpIHsKKwkJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKKworCQlpZiAoY2hhbm5lbC0+dXNlZF9mbGFncyAmIEVGWF9VU0VEX0JZX1JYICYmCisJCSAgICBlZngtPmlycV9yeF9hZGFwdGl2ZSAmJgorCQkgICAgdW5saWtlbHkoKytjaGFubmVsLT5pcnFfY291bnQgPT0gMTAwMCkpIHsKKwkJCXVuc2lnbmVkIG9sZF9pcnFfbW9kZXJhdGlvbiA9IGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uOworCisJCQlpZiAodW5saWtlbHkoY2hhbm5lbC0+aXJxX21vZF9zY29yZSA8CisJCQkJICAgICBpcnFfYWRhcHRfbG93X3RocmVzaCkpIHsKKwkJCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9CisJCQkJCW1heF90KGludCwKKwkJCQkJICAgICAgY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLQorCQkJCQkgICAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OLAorCQkJCQkgICAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OKTsKKwkJCX0gZWxzZSBpZiAodW5saWtlbHkoY2hhbm5lbC0+aXJxX21vZF9zY29yZSA+CisJCQkJCSAgICBpcnFfYWRhcHRfaGlnaF90aHJlc2gpKSB7CisJCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPQorCQkJCQltaW4oY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gKworCQkJCQkgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiwKKwkJCQkJICAgIGVmeC0+aXJxX3J4X21vZGVyYXRpb24pOworCQkJfQorCisJCQlpZiAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gIT0gb2xkX2lycV9tb2RlcmF0aW9uKQorCQkJCWZhbGNvbl9zZXRfaW50X21vZGVyYXRpb24oY2hhbm5lbCk7CisKKwkJCWNoYW5uZWwtPmlycV9jb3VudCA9IDA7CisJCQljaGFubmVsLT5pcnFfbW9kX3Njb3JlID0gMDsKKwkJfQorCiAJCS8qIFRoZXJlIGlzIG5vIHJhY2UgaGVyZTsgYWx0aG91Z2ggbmFwaV9kaXNhYmxlKCkgd2lsbAogCQkgKiBvbmx5IHdhaXQgZm9yIG5hcGlfY29tcGxldGUoKSwgdGhpcyBpc24ndCBhIHByb2JsZW0KIAkJICogc2luY2UgZWZ4X2NoYW5uZWxfcHJvY2Vzc2VkKCkgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZgpAQCAtNTU3LDYgKzU5Niw4IEBACiAKIH0KIAorc3RhdGljIHZvaWQgZWZ4X2ZpbmlfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKKwogLyogVGhpcyBjYWxsIHJlaW5pdGlhbGlzZXMgdGhlIE1BQyB0byBwaWNrIHVwIG5ldyBQSFkgc2V0dGluZ3MuIFRoZQogICogY2FsbGVyIG11c3QgaG9sZCB0aGUgbWFjX2xvY2sgKi8KIHZvaWQgX19lZnhfcmVjb25maWd1cmVfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtNTkyLDggKzYzMyw4IEBACiAKIGZhaWw6CiAJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gcmVjb25maWd1cmUgTUFDXG4iKTsKLQllZngtPnBoeV9vcC0+ZmluaShlZngpOwotCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOworCWVmeC0+cG9ydF9lbmFibGVkID0gZmFsc2U7CisJZWZ4X2ZpbmlfcG9ydChlZngpOwogfQogCiAvKiBSZWluaXRpYWxpc2UgdGhlIE1BQyB0byBwaWNrIHVwIG5ldyBQSFkgc2V0dGluZ3MsIGV2ZW4gaWYgdGhlIHBvcnQgaXMKQEAgLTk4OSw3ICsxMDMwLDcgQEAKIAllZnhfc2V0X2NoYW5uZWxzKGVmeCk7CiAKIAkvKiBJbml0aWFsaXNlIHRoZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBzZXR0aW5ncyAqLwotCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfaXJxX21vZF91c2VjLCByeF9pcnFfbW9kX3VzZWMpOworCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfaXJxX21vZF91c2VjLCByeF9pcnFfbW9kX3VzZWMsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg2LDcgKzEyMjcsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTZXQgaW50ZXJydXB0IG1vZGVyYXRpb24gcGFyYW1ldGVycyAqLwotdm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsIGludCByeF91c2VjcykKK3ZvaWQgZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IHR4X3VzZWNzLCBpbnQgcnhfdXNlY3MsCisJCQkgICAgIGJvb2wgcnhfYWRhcHRpdmUpCiB7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CkBAIC0xMTk2LDYgKzEyMzgsOCBAQAogCWVmeF9mb3JfZWFjaF90eF9xdWV1ZSh0eF9xdWV1ZSwgZWZ4KQogCQl0eF9xdWV1ZS0+Y2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSB0eF91c2VjczsKIAorCWVmeC0+aXJxX3J4X2FkYXB0aXZlID0gcnhfYWRhcHRpdmU7CisJZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbiA9IHJ4X3VzZWNzOwogCWVmeF9mb3JfZWFjaF9yeF9xdWV1ZShyeF9xdWV1ZSwgZWZ4KQogCQlyeF9xdWV1ZS0+Y2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSByeF91c2VjczsKIH0KQEAgLTE2NjcsNyArMTcxMSw4IEBACiAJCQlyYyA9IGVmeC0+cGh5X29wLT5pbml0KGVmeCk7CiAJCQlpZiAocmMpCiAJCQkJb2sgPSBmYWxzZTsKLQkJfSBlbHNlCisJCX0KKwkJaWYgKCFvaykKIAkJCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOwogCX0KIApAQCAtMTg0OCw4ICsxODkzLDggQEAKIAogc3RhdGljIHN0cnVjdCBlZnhfYm9hcmQgZWZ4X2R1bW15X2JvYXJkX2luZm8gPSB7CiAJLmluaXQJCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAotCS5pbml0X2xlZHMJPSBlZnhfcG9ydF9kdW1teV9vcF9pbnQsCi0JLnNldF9mYXVsdF9sZWQJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKKwkuaW5pdF9sZWRzCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKKwkuc2V0X2lkX2xlZAk9IGVmeF9wb3J0X2R1bW15X29wX2JsaW5rLAogCS5tb25pdG9yCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAogCS5ibGluawkJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKIAkuZmluaQkJPSBlZnhfcG9ydF9kdW1teV9vcF92b2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCmluZGV4IDhiZGUxZDIuLmRhMTU3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKQEAgLTUyLDcgKzUyLDcgQEAKIGV4dGVybiB2b2lkIGVmeF9zdXNwZW5kKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIHZvaWQgZWZ4X3Jlc3VtZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywKLQkJCQkgICAgaW50IHJ4X3VzZWNzKTsKKwkJCQkgICAgaW50IHJ4X3VzZWNzLCBib29sIHJ4X2FkYXB0aXZlKTsKIGV4dGVybiBpbnQgZWZ4X3JlcXVlc3RfcG93ZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IG13LCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGVmeF9oZXhfZHVtcChjb25zdCB1OCAqLCB1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCmluZGV4IDdiNTkyNGMwLi42NDMwOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTUyOSw3ICs1MjksMTQgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAKLQlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmZWZ4LT5taWkpOworCWlmIChlZngtPnBoeV9vcC0+bW1kcyAmIERFVl9QUkVTRU5UX0JJVChNRElPX01NRF9BTikpIHsKKwkJbWRpb19jbGF1c2U0NV9zZXRfZmxhZyhlZngsIGVmeC0+bWlpLnBoeV9pZCwgTURJT19NTURfQU4sCisJCQkJICAgICAgIE1ESU9fTU1EUkVHX0NUUkwxLAorCQkJCSAgICAgICBfX2ZmcyhCTUNSX0FOUkVTVEFSVCksIHRydWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKIHN0YXRpYyB1MzIgZWZ4X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCkBAIC01OTcsNyArNjA0LDYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0Jc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCiAJbWVtc2V0KGNvYWxlc2NlLCAwLCBzaXplb2YoKmNvYWxlc2NlKSk7CkBAIC02MTUsMTQgKzYyMSw4IEBACiAJCX0KIAl9CiAKLQkvKiBGaW5kIGxvd2VzdCBJUlEgbW9kZXJhdGlvbiBhY3Jvc3MgYWxsIHVzZWQgUlggcXVldWVzICovCi0JY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IH4oKHUzMikgMCk7Ci0JZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpIHsKLQkJY2hhbm5lbCA9IHJ4X3F1ZXVlLT5jaGFubmVsOwotCQlpZiAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPCBjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxKQotCQkJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9Ci0JCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb247Ci0JfQorCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBlZngtPmlycV9yeF9hZGFwdGl2ZTsKKwljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID0gZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbjsKIAogCXJldHVybiAwOwogfQpAQCAtNjM2LDEwICs2MzYsOSBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0JdW5zaWduZWQgdHhfdXNlY3MsIHJ4X3VzZWNzOworCXVuc2lnbmVkIHR4X3VzZWNzLCByeF91c2VjcywgYWRhcHRpdmU7CiAKLQlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSB8fAotCSAgICBjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQorCWlmIChjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzIHx8IGNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2VjcykgewpAQCAtNjUwLDYgKzY0OSw3IEBACiAKIAlyeF91c2VjcyA9IGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnE7CiAJdHhfdXNlY3MgPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfaXJxOworCWFkYXB0aXZlID0gY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKIAogCS8qIElmIHRoZSBjaGFubmVsIGlzIHNoYXJlZCBvbmx5IGFsbG93IFJYIHBhcmFtZXRlcnMgdG8gYmUgc2V0ICovCiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpIHsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQl9CiAJfQogCi0JZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF91c2VjcywgcnhfdXNlY3MpOworCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfdXNlY3MsIHJ4X3VzZWNzLCBhZGFwdGl2ZSk7CiAKIAkvKiBSZXNldCBjaGFubmVsIHRvIHBpY2sgdXAgbmV3IG1vZGVyYXRpb24gdmFsdWUuICBOb3RlIHRoYXQKIAkgKiB0aGlzIG1heSBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBpcnFfbW9kZXJhdGlvbiBmaWVsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IGQ1Mzc4ZTYuLjIzYTFiMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTM5LDExICszOSwxNiBAQAogICogQG5leHRfYnVmZmVyX3RhYmxlOiBGaXJzdCBhdmFpbGFibGUgYnVmZmVyIHRhYmxlIGlkCiAgKiBAcGNpX2RldjI6IFRoZSBzZWNvbmRhcnkgUENJIGRldmljZSBpZiBwcmVzZW50CiAgKiBAaTJjX2RhdGE6IE9wZXJhdGlvbnMgYW5kIHN0YXRlIGZvciBJMkMgYml0LWJhc2hpbmcgYWxnb3JpdGhtCisgKiBAaW50X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzIHNlZW4gcmVjZW50bHkKKyAqIEBpbnRfZXJyb3JfZXhwaXJlOiBUaW1lIGF0IHdoaWNoIGVycm9yIGNvdW50IHdpbGwgYmUgZXhwaXJlZAogICovCiBzdHJ1Y3QgZmFsY29uX25pY19kYXRhIHsKIAl1bnNpZ25lZCBuZXh0X2J1ZmZlcl90YWJsZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjI7CiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19kYXRhOworCisJdW5zaWduZWQgaW50X2Vycm9yX2NvdW50OworCXVuc2lnbmVkIGxvbmcgaW50X2Vycm9yX2V4cGlyZTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE5LDggKzEyNCwxMiBAQAogI2RlZmluZSBGQUxDT05fRVZRX1NJWkUgNDA5NgogI2RlZmluZSBGQUxDT05fRVZRX01BU0sgKEZBTENPTl9FVlFfU0laRSAtIDEpCiAKLS8qIE1heCBudW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzLiBBZnRlciB0aGlzIHJlc2V0cyB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KLSNkZWZpbmUgRkFMQ09OX01BWF9JTlRfRVJST1JTIDQKKy8qIElmIEZBTENPTl9NQVhfSU5UX0VSUk9SUyBpbnRlcm5hbCBlcnJvcnMgb2NjdXIgd2l0aGluCisgKiBGQUxDT05fSU5UX0VSUk9SX0VYUElSRSBzZWNvbmRzLCB3ZSBjb25zaWRlciB0aGUgTklDIGJyb2tlbiBhbmQKKyAqIGRpc2FibGUgaXQuCisgKi8KKyNkZWZpbmUgRkFMQ09OX0lOVF9FUlJPUl9FWFBJUkUgMzYwMAorI2RlZmluZSBGQUxDT05fTUFYX0lOVF9FUlJPUlMgNQogCiAvKiBXZSBwb2xsIGZvciBldmVudHMgZXZlcnkgRkxVU0hfSU5URVJWQUwgbXMsIGFuZCBjaGVjayBGTFVTSF9QT0xMX0NPVU5UIHRpbWVzCiAgKi8KQEAgLTE0NiwxMyArMTU1LDYgQEAKIC8qIER1bW15IFNSQU0gc2l6ZSBjb2RlICovCiAjZGVmaW5lIFNSTV9OQl9CU1pfT05DSElQX09OTFkgKC0xKQogCi0vKiBCZSBuaWNlIGlmIHRoZXNlIChvciBlcXVpdi4pIHdlcmUgaW4gbGludXgvcGNpX3JlZ3MuaCwgYnV0IHRoZXkncmUgbm90LiAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfVkFMX0xCTgkxOAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMX0xCTgkyNgotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEX0xCTgk1Ci0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSUQJCTB4M2YwCi0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSURfTEJOCTQKLQogI2RlZmluZSBGQUxDT05fSVNfRFVBTF9GVU5DKGVmeCkJCVwKIAkoZmFsY29uX3JldihlZngpIDwgRkFMQ09OX1JFVl9CMCkKIApAQCAtNzI3LDYgKzcyOSw5IEBACiAJCXR4X2V2X2Rlc2NfcHRyID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfREVTQ19QVFIpOwogCQl0eF9ldl9xX2xhYmVsID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfUV9MQUJFTCk7CiAJCXR4X3F1ZXVlID0gJmVmeC0+dHhfcXVldWVbdHhfZXZfcV9sYWJlbF07CisJCWNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgKz0KKwkJCSh0eF9ldl9kZXNjX3B0ciAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50KSAmCisJCQllZngtPnR5cGUtPnR4ZF9yaW5nX21hc2s7CiAJCWVmeF94bWl0X2RvbmUodHhfcXVldWUsIHR4X2V2X2Rlc2NfcHRyKTsKIAl9IGVsc2UgaWYgKEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX1dRX0ZGX0ZVTEwpKSB7CiAJCS8qIFJld3JpdGUgdGhlIEZJRk8gd3JpdGUgcG9pbnRlciAqLwpAQCAtODk2LDYgKzkwMSw4IEBACiAJCQlkaXNjYXJkID0gdHJ1ZTsKIAl9CiAKKwljaGFubmVsLT5pcnFfbW9kX3Njb3JlICs9IDI7CisKIAkvKiBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0ICovCiAJZWZ4X3J4X3BhY2tldChyeF9xdWV1ZSwgcnhfZXZfZGVzY19wdHIsIHJ4X2V2X2J5dGVfY250LAogCQkgICAgICBjaGVja3N1bW1lZCwgZGlzY2FyZCk7CkBAIC0xMDczLDE0ICsxMDgwLDE1IEBACiAJCSAqIHByb2dyYW0gaXMgYmFzZWQgYXQgMC4gIFNvIGFjdHVhbCBpbnRlcnJ1cHQgbW9kZXJhdGlvbgogCQkgKiBhY2hpZXZlZCBpcyAoKHggKyAxKSAqIHJlcykuCiAJCSAqLwotCQl1bnNpZ25lZCBpbnQgcmVzID0gNTsKLQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLT0gKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uICUgcmVzKTsKLQkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgcmVzKQotCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSByZXM7CisJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC09IChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAlCisJCQkJCSAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OKTsKKwkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTikKKwkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0gRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTjsKIAkJRUZYX1BPUFVMQVRFX0RXT1JEXzIodGltZXJfY21kLAogCQkJCSAgICAgVElNRVJfTU9ERSwgVElNRVJfTU9ERV9JTlRfSExET0ZGLAogCQkJCSAgICAgVElNRVJfVkFMLAotCQkJCSAgICAgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC8gcmVzKSAtIDEpOworCQkJCSAgICAgY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLworCQkJCSAgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiAtIDEpOwogCX0gZWxzZSB7CiAJCUVGWF9QT1BVTEFURV9EV09SRF8yKHRpbWVyX2NtZCwKIAkJCQkgICAgIFRJTUVSX01PREUsIFRJTUVSX01PREVfRElTLApAQCAtMTE4NywzMSArMTE5NSwyOSBAQAogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7Ci0JdW5zaWduZWQgaW50IHJlYWRfcHRyLCBpOworCXVuc2lnbmVkIGludCByZWFkX3B0ciA9IGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cjsKKwl1bnNpZ25lZCBpbnQgZW5kX3B0ciA9IChyZWFkX3B0ciAtIDEpICYgRkFMQ09OX0VWUV9NQVNLOwogCi0JcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7Ci0JZm9yIChpID0gMDsgaSA8IEZBTENPTl9FVlFfU0laRTsgKytpKSB7CisJZG8gewogCQllZnhfcXdvcmRfdCAqZXZlbnQgPSBmYWxjb25fZXZlbnQoY2hhbm5lbCwgcmVhZF9wdHIpOwogCQlpbnQgZXZfY29kZSwgZXZfc3ViX2NvZGUsIGV2X3F1ZXVlOwogCQlib29sIGV2X2ZhaWxlZDsKKwogCQlpZiAoIWZhbGNvbl9ldmVudF9wcmVzZW50KGV2ZW50KSkKIAkJCWJyZWFrOwogCiAJCWV2X2NvZGUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBFVl9DT0RFKTsKLQkJaWYgKGV2X2NvZGUgIT0gRFJJVkVSX0VWX0RFQ09ERSkKLQkJCWNvbnRpbnVlOwotCiAJCWV2X3N1Yl9jb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRFJJVkVSX0VWX1NVQl9DT0RFKTsKLQkJc3dpdGNoIChldl9zdWJfY29kZSkgewotCQljYXNlIFRYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERToKKwkJaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkgICAgZXZfc3ViX2NvZGUgPT0gVFhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfVFhfREVTQ1FfSUQpOwogCQkJaWYgKGV2X3F1ZXVlIDwgRUZYX1RYX1FVRVVFX0NPVU5UKSB7CiAJCQkJdHhfcXVldWUgPSBlZngtPnR4X3F1ZXVlICsgZXZfcXVldWU7CiAJCQkJdHhfcXVldWUtPmZsdXNoZWQgPSB0cnVlOwogCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFOgorCQl9IGVsc2UgaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkJICAgZXZfc3ViX2NvZGUgPT0gUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfUlhfREVTQ1FfSUQpOwogCQkJZXZfZmFpbGVkID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwKQEAgLTEyMjUsMTEgKzEyMzEsMTAgQEAKIAkJCQllbHNlCiAJCQkJCXJ4X3F1ZXVlLT5mbHVzaGVkID0gdHJ1ZTsKIAkJCX0KLQkJCWJyZWFrOwogCQl9CiAKIAkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIEZBTENPTl9FVlFfTUFTSzsKLQl9CisJfSB3aGlsZSAocmVhZF9wdHIgIT0gZW5kX3B0cik7CiB9CiAKIC8qIEhhbmRsZSB0eCBhbmQgcnggZmx1c2hlcyBhdCB0aGUgc2FtZSB0aW1lLCBzaW5jZSB0aGV5IHJ1biBpbgpAQCAtMTM3Nyw3ICsxMzgyLDYgQEAKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOwogCWVmeF9vd29yZF90IGZhdGFsX2ludHI7CiAJaW50IGVycm9yLCBtZW1fcGVycjsKLQlzdGF0aWMgaW50IG5faW50X2Vycm9yczsKIAogCWZhbGNvbl9yZWFkKGVmeCwgJmZhdGFsX2ludHIsIEZBVEFMX0lOVFJfUkVHX0tFUik7CiAJZXJyb3IgPSBFRlhfT1dPUkRfRklFTEQoZmF0YWxfaW50ciwgSU5UX0tFUl9FUlJPUik7CkBAIC0xNDA0LDcgKzE0MDgsMTQgQEAKIAkJcGNpX2NsZWFyX21hc3RlcihuaWNfZGF0YS0+cGNpX2RldjIpOwogCWZhbGNvbl9kaXNhYmxlX2ludGVycnVwdHMoZWZ4KTsKIAotCWlmICgrK25faW50X2Vycm9ycyA8IEZBTENPTl9NQVhfSU5UX0VSUk9SUykgeworCS8qIENvdW50IGVycm9ycyBhbmQgcmVzZXQgb3IgZGlzYWJsZSB0aGUgTklDIGFjY29yZGluZ2x5ICovCisJaWYgKG5pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPT0gMCB8fAorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIG5pY19kYXRhLT5pbnRfZXJyb3JfZXhwaXJlKSkgeworCQluaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50ID0gMDsKKwkJbmljX2RhdGEtPmludF9lcnJvcl9leHBpcmUgPQorCQkJamlmZmllcyArIEZBTENPTl9JTlRfRVJST1JfRVhQSVJFICogSFo7CisJfQorCWlmICgrK25pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPCBGQUxDT05fTUFYX0lOVF9FUlJPUlMpIHsKIAkJRUZYX0VSUihlZngsICJTWVNURU0gRVJST1IgLSByZXNldCBzY2hlZHVsZWRcbiIpOwogCQllZnhfc2NoZWR1bGVfcmVzZXQoZWZ4LCBSRVNFVF9UWVBFX0lOVF9FUlJPUik7CiAJfSBlbHNlIHsKQEAgLTE0MjMsNiArMTQzNCw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGRldl9pZDsKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOworCWlycXJldHVybl90IHJlc3VsdCA9IElSUV9OT05FOwogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKIAllZnhfZHdvcmRfdCByZWc7CiAJdTMyIHF1ZXVlczsKQEAgLTE0MzcsMjMgKzE0NDksMjQgQEAKIAlpZiAodW5saWtlbHkoc3lzZXJyKSkKIAkJcmV0dXJuIGZhbGNvbl9mYXRhbF9pbnRlcnJ1cHQoZWZ4KTsKIAotCWlmIChxdWV1ZXMgPT0gMCkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JZWZ4LT5sYXN0X2lycV9jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKLQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7Ci0KIAkvKiBTY2hlZHVsZSBwcm9jZXNzaW5nIG9mIGFueSBpbnRlcnJ1cHRpbmcgcXVldWVzICovCi0JY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07Ci0Jd2hpbGUgKHF1ZXVlcykgewotCQlpZiAocXVldWVzICYgMHgwMSkKKwllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKKwkJaWYgKChxdWV1ZXMgJiAxKSB8fAorCQkgICAgZmFsY29uX2V2ZW50X3ByZXNlbnQoCisJCQkgICAgZmFsY29uX2V2ZW50KGNoYW5uZWwsIGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cikpKSB7CiAJCQllZnhfc2NoZWR1bGVfY2hhbm5lbChjaGFubmVsKTsKLQkJY2hhbm5lbCsrOworCQkJcmVzdWx0ID0gSVJRX0hBTkRMRUQ7CisJCX0KIAkJcXVldWVzID4+PSAxOwogCX0KIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlpZiAocmVzdWx0ID09IElSUV9IQU5ETEVEKSB7CisJCWVmeC0+bGFzdF9pcnFfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJRUZYX1RSQUNFKGVmeCwgIklSUSAlZCBvbiBDUFUgJWQgc3RhdHVzICIgRUZYX0RXT1JEX0ZNVCAiXG4iLAorCQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC0yMjQ5LDYgKzIyNjIsNyBAQAogCQllZngtPnBoeV9vcCA9ICZmYWxjb25fc2Z0OTAwMV9waHlfb3BzOwogCQlicmVhazsKIAljYXNlIFBIWV9UWVBFX1FUMjAyMkMyOgorCWNhc2UgUEhZX1RZUEVfUVQyMDI1QzoKIAkJZWZ4LT5waHlfb3AgPSAmZmFsY29uX3hmcF9waHlfb3BzOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzExMyw4ICszMTI3LDEwIEBACiAJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWludCByYzsKIAorCS8qIFJlbW92ZSBJMkMgYWRhcHRlciBhbmQgY2xlYXIgaXQgaW4gcHJlcGFyYXRpb24gZm9yIGEgcmV0cnkgKi8KIAlyYyA9IGkyY19kZWxfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAJQlVHX09OKHJjKTsKKwltZW1zZXQoJmVmeC0+aTJjX2FkYXAsIDAsIHNpemVvZihlZngtPmkyY19hZGFwKSk7CiAKIAlmYWxjb25fcmVtb3ZlX3NwaV9kZXZpY2VzKGVmeCk7CiAJZmFsY29uX2ZyZWVfYnVmZmVyKGVmeCwgJmVmeC0+aXJxX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmggYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmgKaW5kZXggNzg2OWMzZC4uNzdmMmUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uaApAQCAtODUsNiArODUsOCBAQAogZXh0ZXJuIHZvaWQgZmFsY29uX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGZhbGNvbl9maW5pX2ludGVycnVwdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAorI2RlZmluZSBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OIDUKKwogLyogR2xvYmFsIFJlc291cmNlcyAqLwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oCmluZGV4IGMxNmRhMzEuLjg4ODMwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2lvLmgKQEAgLTIzOCwxOCArMjM4LDIxIEBACiAvKiBXcml0ZSBkd29yZCB0byBGYWxjb24gcGFnZS1tYXBwZWQgcmVnaXN0ZXIgd2l0aCBhbiBleHRyYSBsb2NrLgogICoKICAqIEFzIGZvciBmYWxjb25fd3JpdGVsX3BhZ2UoKSwgYnV0IGZvciBhIHJlZ2lzdGVyIHRoYXQgc3VmZmVycyBmcm9tCi0gKiBTRkMgYnVnIDMxODEuIFRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVIGNvbGxlY3RvciBjYW5ub3QgYmUKLSAqIGNvbmZ1c2VkLiAqLworICogU0ZDIGJ1ZyAzMTgxLiAgSWYgd3JpdGluZyB0byBwYWdlIDAsIHRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVCisgKiBjb2xsZWN0b3IgY2Fubm90IGJlIGNvbmZ1c2VkLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZmFsY29uX3dyaXRlbF9wYWdlX2xvY2tlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAogCQkJCQkgICAgIGVmeF9kd29yZF90ICp2YWx1ZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOworCWlmIChwYWdlID09IDApCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAJZmFsY29uX3dyaXRlbChlZngsIHZhbHVlLCBGQUxDT05fUEFHRURfUkVHKHBhZ2UsIHJlZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKKwlpZiAocGFnZSA9PSAwKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiB9CiAKICNlbmRpZiAvKiBFRlhfRkFMQ09OX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKaW5kZXggZjllMmY5NS4uOWY1ZWMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKQEAgLTE3LDYgKzE3LDIxIEBACiAjaW5jbHVkZSAiYm9hcmRzLmgiCiAjaW5jbHVkZSAid29ya2Fyb3VuZHMuaCIKIAordW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKQoreworCXVuc2lnbmVkIG91aSA9IDA7CisJaW50IGk7CisKKwkvKiBUaGUgYml0cyBvZiB0aGUgT1VJIGFyZSBkZXNpZ25hdGVkIGEuLngsIHdpdGggYT0wIGFuZCBiIHZhcmlhYmxlLgorCSAqIEluIHRoZSBpZCByZWdpc3RlciBjIGlzIHRoZSBNU0IgYnV0IHRoZSBPVUkgaXMgY29udmVudGlvbmFsbHkKKwkgKiB3cml0dGVuIGFzIGJ5dGVzIGguLmEsIHAuLmksIHguLnEuICBSZW9yZGVyIHRoZSBiaXRzIGFjY29yZGluZ2x5LiAqLworCWZvciAoaSA9IDA7IGkgPCAyMjsgKytpKQorCQlpZiAoaWQgJiAoMSA8PCAoaSArIDEwKSkpCisJCQlvdWkgfD0gMSA8PCAoaSBeIDcpOworCisJcmV0dXJuIG91aTsKK30KKwogaW50IG1kaW9fY2xhdXNlNDVfcmVzZXRfbW1kKHN0cnVjdCBlZnhfbmljICpwb3J0LCBpbnQgbW1kLAogCQkJICAgIGludCBzcGlucywgaW50IHNwaW50aW1lKQogewpAQCAtMTI1LDI0ICsxNDAsMjUgQEAKIGludCBtZGlvX2NsYXVzZTQ1X2NoZWNrX21tZHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCSAgICAgdW5zaWduZWQgaW50IG1tZF9tYXNrLCB1bnNpZ25lZCBpbnQgZmF0YWxfbWFzaykKIHsKKwlpbnQgbW1kID0gMCwgcHJvYmVfbW1kLCBkZXZzMCwgZGV2czE7CiAJdTMyIGRldmljZXM7Ci0JaW50IG1tZCA9IDAsIHByb2JlX21tZDsKIAogCS8qIEhpc3RvcmljYWxseSB3ZSBoYXZlIHByb2JlZCB0aGUgUEhZWFMgdG8gZmluZCBvdXQgd2hhdCBkZXZpY2VzIGFyZQogCSAqIHByZXNlbnQsYnV0IHRoYXQgZG9lc24ndCB3b3JrIHNvIHdlbGwgaWYgdGhlIFBIWVhTIGlzbid0IGV4cGVjdGVkCiAJICogdG8gZXhpc3QsIGlmIHNvIGp1c3QgZmluZCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBzdXBwbGllZC4gKi8KIAlwcm9iZV9tbWQgPSAobW1kX21hc2sgJiBNRElPX01NRFJFR19ERVZTX1BIWVhTKSA/IE1ESU9fTU1EX1BIWVhTIDoKIAkgICAgX19mZnMobW1kX21hc2spOwotCWRldmljZXMgPSAobWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApIHwKLQkJICAgbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpIDw8IDE2KTsKIAogCS8qIENoZWNrIGFsbCB0aGUgZXhwZWN0ZWQgTU1EcyBhcmUgcHJlc2VudCAqLwotCWlmIChkZXZpY2VzIDwgMCkgeworCWRldnMwID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApOworCWRldnMxID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpOworCWlmIChkZXZzMCA8IDAgfHwgZGV2czEgPCAwKSB7CiAJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlYWQgZGV2aWNlcyBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCWRldmljZXMgPSBkZXZzMCB8IChkZXZzMSA8PCAxNik7CiAJaWYgKChkZXZpY2VzICYgbW1kX21hc2spICE9IG1tZF9tYXNrKSB7CiAJCUVGWF9FUlIoZWZ4LCAicmVxdWlyZWQgTU1EcyBub3QgcHJlc2VudDogZ290ICV4LCAiCiAJCQkid2FudGVkICV4XG4iLCBkZXZpY2VzLCBtbWRfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaCBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCmluZGV4IDhiYTQ5NzcuLjcwMTRkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCkBAIC03MCwxMCArNzAsMTAgQEAKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX0xCTgkoMSkKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX1dJRFRICSgxKQogCi0vKiBCaXRzIGluIElEIHJlZyAqLwotI2RlZmluZSBNRElPX0lEX1JFVihfaWQzMikJKF9pZDMyICYgMHhmKQotI2RlZmluZSBNRElPX0lEX01PREVMKF9pZDMyKQkoKF9pZDMyID4+IDQpICYgMHgzZikKLSNkZWZpbmUgTURJT19JRF9PVUkoX2lkMzIpCShfaWQzMiA+PiAxMCkKKy8qIEJpdHMgaW4gY29tYmluZWQgSUQgcmVncyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZGlvX2lkX3Jldih1MzIgaWQpIHsgcmV0dXJuIGlkICYgMHhmOyB9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1kaW9faWRfbW9kZWwodTMyIGlkKSB7IHJldHVybiAoaWQgPj4gNCkgJiAweDNmOyB9CitleHRlcm4gdW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKTsKIAogLyogQml0cyBpbiBNTURSRUdfREVWUzAvMS4gU29tZW9uZSB0aG91Z2h0ZnVsbHkgbGF5ZWQgdGhpbmdzIG91dAogICogc28gdGhlICdiaXQgcHJlc2VudCcgYml0IG51bWJlciBvZiBhbiBNTUQgaXMgdGhlIG51bWJlciBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL210ZC5jIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCmluZGV4IDY2NWNhZmIuLjgyMGMyMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbXRkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgRUZYX0RSSVZFUl9OQU1FICJzZmNfbXRkIgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJzcGkuaCIKKyNpbmNsdWRlICJlZnguaCIKIAogI2RlZmluZSBFRlhfU1BJX1ZFUklGWV9CVUZfTEVOIDE2CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IDE5OTMwZmYuLmUxNjllNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtMzM2LDYgKzMzNiw4IEBACiAgKiBAZXZlbnRxX3JlYWRfcHRyOiBFdmVudCBxdWV1ZSByZWFkIHBvaW50ZXIKICAqIEBsYXN0X2V2ZW50cV9yZWFkX3B0cjogTGFzdCBldmVudCBxdWV1ZSByZWFkIHBvaW50ZXIgdmFsdWUuCiAgKiBAZXZlbnRxX21hZ2ljOiBFdmVudCBxdWV1ZSBtYWdpYyB2YWx1ZSBmb3IgZHJpdmVyLWdlbmVyYXRlZCB0ZXN0IGV2ZW50cworICogQGlycV9jb3VudDogTnVtYmVyIG9mIElSUXMgc2luY2UgbGFzdCBhZGFwdGl2ZSBtb2RlcmF0aW9uIGRlY2lzaW9uCisgKiBAaXJxX21vZF9zY29yZTogSVJRIG1vZGVyYXRpb24gc2NvcmUKICAqIEByeF9hbGxvY19sZXZlbDogV2F0ZXJtYXJrIGJhc2VkIGhldXJpc3RpYyBjb3VudGVyIGZvciBwdXNoaW5nIGRlc2NyaXB0b3JzCiAgKglhbmQgZGlhZ25vc3RpYyBjb3VudGVycwogICogQHJ4X2FsbG9jX3B1c2hfcGFnZXM6IFJYIGFsbG9jYXRpb24gbWV0aG9kIGN1cnJlbnRseSBpbiB1c2UgZm9yIHB1c2hpbmcKQEAgLTM2NCw2ICszNjYsOSBAQAogCXVuc2lnbmVkIGludCBsYXN0X2V2ZW50cV9yZWFkX3B0cjsKIAl1bnNpZ25lZCBpbnQgZXZlbnRxX21hZ2ljOwogCisJdW5zaWduZWQgaW50IGlycV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX21vZF9zY29yZTsKKwogCWludCByeF9hbGxvY19sZXZlbDsKIAlpbnQgcnhfYWxsb2NfcHVzaF9wYWdlczsKIApAQCAtMzg1LDEzICszOTAsMTEgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgZWZ4X2JsaW5rZXIgLSBTL1cgTEVEIGJsaW5raW5nIGNvbnRleHQKLSAqIEBsZWRfbnVtOiBMRUQgSUQgKGJvYXJkLXNwZWNpZmljIG1lYW5pbmcpCiAgKiBAc3RhdGU6IEN1cnJlbnQgc3RhdGUgLSBvbiBvciBvZmYKICAqIEByZXN1Ym1pdDogVGltZXIgcmVzdWJtaXNzaW9uIGZsYWcKICAqIEB0aW1lcjogQ29udHJvbCB0aW1lciBmb3IgYmxpbmtpbmcKICAqLwogc3RydWN0IGVmeF9ibGlua2VyIHsKLQlpbnQgbGVkX251bTsKIAlib29sIHN0YXRlOwogCWJvb2wgcmVzdWJtaXQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CkBAIC00MDQsOCArNDA3LDggQEAKICAqIEBtYWpvcjogTWFqb3IgcmV2LiAoJ0EnLCAnQicgLi4uKQogICogQG1pbm9yOiBNaW5vciByZXYuICgwLCAxLCAuLi4pCiAgKiBAaW5pdDogSW5pdGlhbGlzYXRpb24gZnVuY3Rpb24KLSAqIEBpbml0X2xlZHM6IFNldHMgdXAgYm9hcmQgTEVEcwotICogQHNldF9mYXVsdF9sZWQ6IFR1cm5zIHRoZSBmYXVsdCBMRUQgb24gb3Igb2ZmCisgKiBAaW5pdF9sZWRzOiBTZXRzIHVwIGJvYXJkIExFRHMuIE1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseS4KKyAqIEBzZXRfaWRfbGVkOiBUdXJucyB0aGUgaWRlbnRpZmljYXRpb24gTEVEIG9uIG9yIG9mZgogICogQGJsaW5rOiBTdGFydHMvc3RvcHMgYmxpbmtpbmcKICAqIEBtb25pdG9yOiBCb2FyZC1zcGVjaWZpYyBoZWFsdGggY2hlY2sgZnVuY3Rpb24KICAqIEBmaW5pOiBDbGVhbnVwIGZ1bmN0aW9uCkBAIC00MjEsOSArNDI0LDkgQEAKIAkvKiBBcyB0aGUgTEVEcyBhcmUgdHlwaWNhbGx5IGF0dGFjaGVkIHRvIHRoZSBQSFksIExFRHMKIAkgKiBoYXZlIGEgc2VwYXJhdGUgaW5pdCBjYWxsYmFjayB0aGF0IGhhcHBlbnMgbGF0ZXIgdGhhbgogCSAqIGJvYXJkIGluaXQuICovCi0JaW50ICgqaW5pdF9sZWRzKShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKKwl2b2lkICgqaW5pdF9sZWRzKShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKKwl2b2lkICgqc2V0X2lkX2xlZCkgKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhdGUpOwogCWludCAoKm1vbml0b3IpIChzdHJ1Y3QgZWZ4X25pYyAqbmljKTsKLQl2b2lkICgqc2V0X2ZhdWx0X2xlZCkgKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhdGUpOwogCXZvaWQgKCpibGluaykgKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhcnQpOwogCXZvaWQgKCpmaW5pKSAoc3RydWN0IGVmeF9uaWMgKm5pYyk7CiAJc3RydWN0IGVmeF9ibGlua2VyIGJsaW5rZXI7CkBAIC00NTAsNiArNDUzLDcgQEAKIAlQSFlfVFlQRV9RVDIwMjJDMiA9IDQsCiAJUEhZX1RZUEVfUE04MzU4ID0gNiwKIAlQSFlfVFlQRV9TRlQ5MDAxQSA9IDgsCisJUEhZX1RZUEVfUVQyMDI1QyA9IDksCiAJUEhZX1RZUEVfU0ZUOTAwMUIgPSAxMCwKIAlQSFlfVFlQRV9NQVgJLyogSW5zZXJ0IGFueSBuZXcgaXRlbXMgYmVmb3JlIHRoaXMgKi8KIH07CkBAIC03MDQsNiArNzA4LDggQEAKICAqIEBtZW1iYXNlOiBNZW1vcnkgQkFSIHZhbHVlCiAgKiBAYml1X2xvY2s6IEJJVSAoYnVzIGludGVyZmFjZSB1bml0KSBsb2NrCiAgKiBAaW50ZXJydXB0X21vZGU6IEludGVycnVwdCBtb2RlCisgKiBAaXJxX3J4X2FkYXB0aXZlOiBBZGFwdGl2ZSBJUlEgbW9kZXJhdGlvbiBlbmFibGVkIGZvciBSWCBldmVudCBxdWV1ZXMKKyAqIEBpcnFfcnhfbW9kZXJhdGlvbjogSVJRIG1vZGVyYXRpb24gdGltZSBmb3IgUlggZXZlbnQgcXVldWVzCiAgKiBAaTJjX2FkYXA6IEkyQyBhZGFwdGVyCiAgKiBAYm9hcmRfaW5mbzogQm9hcmQtbGV2ZWwgaW5mb3JtYXRpb24KICAqIEBzdGF0ZTogRGV2aWNlIHN0YXRlIGZsYWcuIFNlcmlhbGlzZWQgYnkgdGhlIHJ0bmxfbG9jay4KQEAgLTc4NSw2ICs3OTEsOCBAQAogCXZvaWQgX19pb21lbSAqbWVtYmFzZTsKIAlzcGlubG9ja190IGJpdV9sb2NrOwogCWVudW0gZWZ4X2ludF9tb2RlIGludGVycnVwdF9tb2RlOworCWJvb2wgaXJxX3J4X2FkYXB0aXZlOworCXVuc2lnbmVkIGludCBpcnFfcnhfbW9kZXJhdGlvbjsKIAogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKIAlzdHJ1Y3QgZWZ4X2JvYXJkIGJvYXJkX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcGh5LmggYi9kcml2ZXJzL25ldC9zZmMvcGh5LmgKaW5kZXggMDdlODU1Yy4uYzFjZmY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9waHkuaApAQCAtMTgsMTIgKzE4LDE2IEBACiAKIGV4dGVybiB2b2lkIHRlbnhwcmVzc19waHlfYmxpbmsoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBibGluayk7CiAKKy8qIFdhaXQgZm9yIHRoZSBQSFkgdG8gYm9vdC4gUmV0dXJuIDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiB0aGUgUEhZIGZhaWxlZAorICogdG8gYm9vdCBkdWUgdG8gY29ycnVwdCBmbGFzaCwgb3Igc29tZSBvdGhlciBuZWdhdGl2ZSBlcnJvciBjb2RlLiAqLworZXh0ZXJuIGludCBzZnQ5MDAxX3dhaXRfYm9vdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIHRoZSBkcml2ZXIgZm9yIFhGUCBvcHRpY2FsIFBIWXMKKyAqIEFNQ0MvUXVha2UgUVQyMHh4IFBIWXMKICAqLwogZXh0ZXJuIHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3hmcF9waHlfb3BzOwogCi0vKiBUaGUgUVVBS0UgWEZQIFBIWSBwcm92aWRlcyB2YXJpb3VzIEgvVyBjb250cm9sIHN0YXRlcyBmb3IgTEVEcyAqLworLyogVGhlc2UgUEhZcyBwcm92aWRlIHZhcmlvdXMgSC9XIGNvbnRyb2wgc3RhdGVzIGZvciBMRURzICovCiAjZGVmaW5lIFFVQUtFX0xFRF9MSU5LX0lOVkFMCSgwKQogI2RlZmluZSBRVUFLRV9MRURfTElOS19TVEFUCSgxKQogI2RlZmluZSBRVUFLRV9MRURfTElOS19BQ1QJKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwppbmRleCBjMGU5MDY4Li40ZWFjNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKQEAgLTM5OSw2ICszOTksNyBAQAogCiBpbnQgc2ZuNDExMXRfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCWludCBpID0gMDsKIAlpbnQgcmM7CiAKIAllZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50ID0KQEAgLTQxNywxMyArNDE4LDIwIEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfaHdtb247CiAKLQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKLQkJZWZ4X3N0YXRzX2Rpc2FibGUoZWZ4KTsKLQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKLQl9CisJZG8geworCQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKKwkJCS8qIFBIWSBtYXkgbm90IGdlbmVyYXRlIGEgMTU2LjI1IE1IeiBjbG9jayBhbmQgTUFDCisJCQkgKiBzdGF0cyBmZXRjaCB3aWxsIGZhaWwuICovCisJCQllZnhfc3RhdHNfZGlzYWJsZShlZngpOworCQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKKwkJfQorCQlyYyA9IHNmdDkwMDFfd2FpdF9ib290KGVmeCk7CisJCWlmIChyYyA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVmeC0+cGh5X21vZGUgPSBQSFlfTU9ERV9TUEVDSUFMOworCX0gd2hpbGUgKHJjID09IC1FSU5WQUwgJiYgKytpIDwgMik7CiAKLQlyZXR1cm4gMDsKLQorCWRldmljZV9yZW1vdmVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsICZkZXZfYXR0cl9waHlfZmxhc2hfY2ZnKTsKIGZhaWxfaHdtb246CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGVmeC0+Ym9hcmRfaW5mby5od21vbl9jbGllbnQpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwppbmRleCA1YjBmNDUxLi5lNjFkYzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCkBAIC0xNTgsMTQgKzE1OCwxNiBAQAogI2RlZmluZSBQQ1NfMTBHQkFTRVRfQkxLTEtfV0lEVEggMQogCiAvKiBCb290IHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBQQ1NfQk9PVF9TVEFUVVNfUkVHCTUzMjQ4Ci0jZGVmaW5lIFBDU19CT09UX0ZBVEFMX0VSUl9MQk4JKDApCi0jZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0xCTgkoMSkKLSNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfV0lEVEgJKDIpCi0jZGVmaW5lIFBDU19CT09UX0NPTVBMRVRFX0xCTgkoMykKLQotI2RlZmluZSBQQ1NfQk9PVF9NQVhfREVMQVkJKDEwMCkKLSNkZWZpbmUgUENTX0JPT1RfUE9MTF9ERUxBWQkoMTApCisjZGVmaW5lIFBDU19CT09UX1NUQVRVU19SRUcJCTUzMjQ4CisjZGVmaW5lIFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTgkwCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0xCTgkJMQorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSAkJMgorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19JTklUCQkwCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX1dBSVRfTURJTwkxCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0NIRUNLU1VNCTIKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfSlVNUAkJMworI2RlZmluZSBQQ1NfQk9PVF9ET1dOTE9BRF9XQUlUX0xCTgkzCisjZGVmaW5lIFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4JNAogCiAvKiAxMDBNLzFHIFBIWSByZWdpc3RlcnMgKi8KICNkZWZpbmUgR1BIWV9YQ09OVFJPTF9SRUcJNDkxNTIKQEAgLTIzMCw0MCArMjMyLDYyIEBACiBzdGF0aWMgREVWSUNFX0FUVFIocGh5X3Nob3J0X3JlYWNoLCAwNjQ0LCBzaG93X3BoeV9zaG9ydF9yZWFjaCwKIAkJICAgc2V0X3BoeV9zaG9ydF9yZWFjaCk7CiAKLS8qIENoZWNrIHRoYXQgdGhlIEMxNjYgaGFzIGJvb3RlZCBzdWNjZXNzZnVsbHkgKi8KLXN0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9jaGVjayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoraW50IHNmdDkwMDFfd2FpdF9ib290KHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKLQlpbnQgY291bnQgPSBQQ1NfQk9PVF9NQVhfREVMQVkgLyBQQ1NfQk9PVF9QT0xMX0RFTEFZOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBIWiArIDE7CiAJaW50IGJvb3Rfc3RhdDsKIAotCS8qIFdhaXQgZm9yIHRoZSBib290IHRvIGNvbXBsZXRlIChvciBub3QpICovCi0Jd2hpbGUgKGNvdW50KSB7Ci0JCWJvb3Rfc3RhdCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwKKwlmb3IgKDs7KSB7CisJCWJvb3Rfc3RhdCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKIAkJCQkJICAgICAgIE1ESU9fTU1EX1BDUywKIAkJCQkJICAgICAgIFBDU19CT09UX1NUQVRVU19SRUcpOwotCQlpZiAoYm9vdF9zdGF0ICYgKDEgPDwgUENTX0JPT1RfQ09NUExFVEVfTEJOKSkKLQkJCWJyZWFrOwotCQljb3VudC0tOwotCQl1ZGVsYXkoUENTX0JPT1RfUE9MTF9ERUxBWSk7Ci0JfQorCQlpZiAoYm9vdF9zdGF0ID49IDApIHsKKwkJCUVGWF9MT0coZWZ4LCAiUEhZIGJvb3Qgc3RhdHVzID0gJSN4XG4iLCBib290X3N0YXQpOworCQkJc3dpdGNoIChib290X3N0YXQgJgorCQkJCSgoMSA8PCBQQ1NfQk9PVF9GQVRBTF9FUlJPUl9MQk4pIHwKKwkJCQkgKDMgPDwgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkJICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSB8CisJCQkJICgxIDw8IFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4pKSkgeworCQkJY2FzZSAoKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSB8CisJCQkgICAgICAoUENTX0JPT1RfUFJPR1JFU1NfQ0hFQ0tTVU0gPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pKToKKwkJCWNhc2UgKCgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikgfAorCQkJICAgICAgKFBDU19CT09UX1BST0dSRVNTX0lOSVQgPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSk6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfV0FJVF9NRElPIDw8CisJCQkgICAgICAgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9ET1dOTE9BRF9XQUlUX0xCTikpOgorCQkJCXJldHVybiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpID8KKwkJCQkJMCA6IC1FSU87CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfSlVNUCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTikpOgorCQkJY2FzZSAoKFBDU19CT09UX1BST0dSRVNTX0pVTVAgPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9DT0RFX1NUQVJURURfTEJOKSk6CisJCQkJcmV0dXJuIChlZngtPnBoeV9tb2RlICYgUEhZX01PREVfU1BFQ0lBTCkgPworCQkJCQktRUlPIDogMDsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGJvb3Rfc3RhdCAmICgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikpCisJCQkJCXJldHVybiAtRUlPOworCQkJCWJyZWFrOworCQkJfQorCQl9CiAKLQlpZiAoIWNvdW50KSB7Ci0JCUVGWF9FUlIoZWZ4LCAiJXM6IFBIWSBib290IHRpbWVkIG91dC4gTGFzdCBzdGF0dXMgIgotCQkJIiV4XG4iLCBfX2Z1bmNfXywKLQkJCShib290X3N0YXQgPj4gUENTX0JPT1RfUFJPR1JFU1NfTEJOKSAmCi0JCQkoKDEgPDwgUENTX0JPT1RfUFJPR1JFU1NfV0lEVEgpIC0gMSkpOwotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQl9CisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAKLQlyZXR1cm4gMDsKKwkJbXNsZWVwKDUwKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgdGVueHByZXNzX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlpbnQgcGh5X2lkID0gZWZ4LT5taWkucGh5X2lkOwogCWludCByZWc7Ci0JaW50IHJjOwogCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewogCQkvKiBFbmFibGUgMzEyLjUgTUh6IGNsb2NrICovCkBAIC0yODYsMTAgKzMxMCw2IEBACiAJCQkJICAgICAgIGZhbHNlKTsKIAl9CiAKLQlyYyA9IHRlbnhwcmVzc19waHlfY2hlY2soZWZ4KTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KIAkvKiBTZXQgdGhlIExFRHMgdXAgYXM6IEdyZWVuID0gTGluaywgQW1iZXIgPSBMaW5rL0FjdCwgUmVkID0gT2ZmICovCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewogCQltZGlvX2NsYXVzZTQ1X3NldF9mbGFnKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCkBAIC0zMDAsNyArMzIwLDcgQEAKIAkJCQkgICAgUE1BX1BNRF9MRURfT1ZFUlJfUkVHLCBQTUFfUE1EX0xFRF9ERUZBVUxUKTsKIAl9CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCkBAIC02NzksMTIgKzY5OSwxMCBAQAogewogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7Ci0JaW50IHJjID0gMCwgcmMyLCBpLCByZXNfcmVnOworCWludCByYyA9IDAsIHJjMiwgaSwgY3RybF9yZWcsIHJlc19yZWc7CiAKLQlpZiAoIShmbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpKQotCQlyZXR1cm4gMDsKLQotCWVmeC0+cGh5X29wLT5nZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7CisJaWYgKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkKKwkJZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZlY21kKTsKIAogCS8qIEluaXRpYWxpc2UgY2FibGUgZGlhZ25vc3RpYyByZXN1bHRzIHRvIHVua25vd24gZmFpbHVyZSAqLwogCWZvciAoaSA9IDE7IGkgPCA5OyArK2kpCkBAIC02OTIsMTggKzcxMCwyMiBAQAogCiAJLyogUnVuIGNhYmxlIGRpYWdub3N0aWNzOyB3YWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlbSB0byBjb21wbGV0ZS4KIAkgKiBBIGNhYmxlIGZhdWx0IGlzIG5vdCBhIHNlbGYtdGVzdCBmYWlsdXJlLCBidXQgYSB0aW1lb3V0IGlzLiAqLworCWN0cmxfcmVnID0gKCgxIDw8IENESUFHX0NUUkxfSU1NRURfTEJOKSB8CisJCSAgICAoQ0RJQUdfQ1RSTF9MRU5fTUVUUkVTIDw8IENESUFHX0NUUkxfTEVOX1VOSVRfTEJOKSk7CisJaWYgKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQkvKiBCcmVhayB0aGUgbGluayBpbiBvcmRlciB0byBydW4gZnVsbCBkaWFnbm9zdGljcy4gIFdlCisJCSAqIG11c3QgcmVzZXQgdGhlIFBIWSB0byByZXN1bWUgbm9ybWFsIHNlcnZpY2UuICovCisJCWN0cmxfcmVnIHw9ICgxIDw8IENESUFHX0NUUkxfQlJLX0xJTktfTEJOKTsKKwl9CiAJbWRpb19jbGF1c2U0NV93cml0ZShlZngsIHBoeV9pZCwgTURJT19NTURfUE1BUE1ELAotCQkJICAgIFBNQV9QTURfQ0RJQUdfQ1RSTF9SRUcsCi0JCQkgICAgKDEgPDwgQ0RJQUdfQ1RSTF9JTU1FRF9MQk4pIHwKLQkJCSAgICAoMSA8PCBDRElBR19DVFJMX0JSS19MSU5LX0xCTikgfAotCQkJICAgIChDRElBR19DVFJMX0xFTl9NRVRSRVMgPDwgQ0RJQUdfQ1RSTF9MRU5fVU5JVF9MQk4pKTsKKwkJCSAgICBQTUFfUE1EX0NESUFHX0NUUkxfUkVHLCBjdHJsX3JlZyk7CiAJaSA9IDA7CiAJd2hpbGUgKG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwgTURJT19NTURfUE1BUE1ELAogCQkJCSAgUE1BX1BNRF9DRElBR19DVFJMX1JFRykgJgogCSAgICAgICAoMSA8PCBDRElBR19DVFJMX0lOX1BST0dfTEJOKSkgewogCQlpZiAoKytpID09IDUwKSB7CiAJCQlyYyA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIHJlc2V0OworCQkJZ290byBvdXQ7CiAJCX0KIAkJbXNsZWVwKDEwMCk7CiAJfQpAQCAtNzI4LDE3ICs3NTAsMTggQEAKIAkJCXJlc3VsdHNbNSArIGldID0gbGVuX3JlZzsKIAl9CiAKLQkvKiBXZSBtdXN0IHJlc2V0IHRvIGV4aXQgY2FibGUgZGlhZ25vc3RpYyBtb2RlLiAgVGhlIEJJU1Qgd2lsbAotCSAqIGFsc28gcnVuIHdoZW4gd2UgZG8gdGhpcy4gKi8KLXJlc2V0OgotCXJjMiA9IHRlbnhwcmVzc19zcGVjaWFsX3Jlc2V0KGVmeCk7Ci0JcmVzdWx0c1swXSA9IHJjMiA/IC0xIDogMTsKLQlpZiAoIXJjKQotCQlyYyA9IHJjMjsKK291dDoKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIFJlc2V0LCBydW5uaW5nIHRoZSBCSVNUIGFuZCB0aGVuIHJlc3VtaW5nIG5vcm1hbCBzZXJ2aWNlLiAqLworCQlyYzIgPSB0ZW54cHJlc3Nfc3BlY2lhbF9yZXNldChlZngpOworCQlyZXN1bHRzWzBdID0gcmMyID8gLTEgOiAxOworCQlpZiAoIXJjKQorCQkJcmMgPSByYzI7CiAKLQlyYzIgPSBlZngtPnBoeV9vcC0+c2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOwotCWlmICghcmMpCi0JCXJjID0gcmMyOworCQlyYzIgPSBlZngtPnBoeV9vcC0+c2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOworCQlpZiAoIXJjKQorCQkJcmMgPSByYzI7CisJfQogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCBkYTNlOWZmLi5kNjY4MWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtMTYyLDYgKzE2MiwxNCBAQAogCS8qIEdldCBzaXplIG9mIHRoZSBpbml0aWFsIGZyYWdtZW50ICovCiAJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAorCS8qIFBhZCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoRUZYX1dPUktBUk9VTkRfMTU1OTIoZWZ4KSAmJiBza2ItPmxlbiA8PSAzMikgeworCQlFRlhfQlVHX09OX1BBUkFOT0lEKHNrYi0+ZGF0YV9sZW4pOworCQlsZW4gPSAzMiArIDE7CisJCWlmIChza2JfcGFkKHNrYiwgbGVuIC0gc2tiLT5sZW4pKQorCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKIAlmaWxsX2xldmVsID0gdHhfcXVldWUtPmluc2VydF9jb3VudCAtIHR4X3F1ZXVlLT5vbGRfcmVhZF9jb3VudDsKIAlxX3NwYWNlID0gZWZ4LT50eXBlLT50eGRfcmluZ19tYXNrIC0gMSAtIGZpbGxfbGV2ZWw7CiAKQEAgLTM3Niw2ICszODQsOSBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZTsKIAorCWlmICh1bmxpa2VseShlZngtPnBvcnRfaW5oaWJpdGVkKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCiAJaWYgKGxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKIAkJdHhfcXVldWUgPSAmZWZ4LT50eF9xdWV1ZVtFRlhfVFhfUVVFVUVfT0ZGTE9BRF9DU1VNXTsKIAllbHNlCkBAIC0zOTcsNyArNDA4LDcgQEAKIAkgKiBzZXBhcmF0ZXMgdGhlIHVwZGF0ZSBvZiByZWFkX2NvdW50IGZyb20gdGhlIHRlc3Qgb2YKIAkgKiBzdG9wcGVkLiAqLwogCXNtcF9tYigpOwotCWlmICh1bmxpa2VseSh0eF9xdWV1ZS0+c3RvcHBlZCkpIHsKKwlpZiAodW5saWtlbHkodHhfcXVldWUtPnN0b3BwZWQpICYmIGxpa2VseShlZngtPnBvcnRfZW5hYmxlZCkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfTkVUREVWX1RYX1RIUkVTSE9MRCh0eF9xdWV1ZSkpIHsKIAkJCUVGWF9CVUdfT05fUEFSQU5PSUQoIWVmeF9kZXZfcmVnaXN0ZXJlZChlZngpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy93b3JrYXJvdW5kcy5oIGIvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKaW5kZXggNzhkZTY4Zi4uYzgyMWMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKQEAgLTM2LDYgKzM2LDggQEAKICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTE0ODIgRUZYX1dPUktBUk9VTkRfQUxXQVlTCiAvKiBGbHVzaCBldmVudHMgY2FuIHRha2UgYSB2ZXJ5IGxvbmcgdGltZSB0byBhcHBlYXIgKi8KICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTE1NTcgRUZYX1dPUktBUk9VTkRfQUxXQVlTCisvKiBUcnVuY2F0ZWQgSVB2NCBwYWNrZXRzIGNhbiBjb25mdXNlIHRoZSBUWCBwYWNrZXQgcGFyc2VyICovCisjZGVmaW5lIEVGWF9XT1JLQVJPVU5EXzE1NTkyIEVGWF9XT1JLQVJPVU5EX0FMV0FZUwogCiAvKiBTcHVyaW91cyBwYXJpdHkgZXJyb3JzIGluIFRTT1JUIGJ1ZmZlcnMgKi8KICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfNTEyOSBFRlhfV09SS0FST1VORF9GQUxDT05fQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKaW5kZXggMmQ1MGI2ZS4uYmIxZWY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCkBAIC03LDggKzcsOCBAQAogICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKi8KIC8qCi0gKiBEcml2ZXIgZm9yIFhGUCBvcHRpY2FsIFBIWXMgKHBsdXMgc29tZSBzdXBwb3J0IHNwZWNpZmljIHRvIHRoZSBRdWFrZSAyMDIyLzMyKQotICogU2VlIHd3dy5hbWNjLmNvbSBmb3IgZGV0YWlscyAoc2VhcmNoIGZvciBxdDIwMzIpCisgKiBEcml2ZXIgZm9yIFNGUCsgYW5kIFhGUCBvcHRpY2FsIFBIWXMgcGx1cyBzb21lIHN1cHBvcnQgc3BlY2lmaWMgdG8gdGhlCisgKiBBTUNDIFFUMjB4eCBhZGFwdGVyczsgc2VlIHd3dy5hbWNjLmNvbSBmb3IgZGV0YWlscwogICovCiAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtMzEsNiArMzEsMjEgQEAKIC8qIFF1YWtlLXNwZWNpZmljIE1ESU8gcmVnaXN0ZXJzICovCiAjZGVmaW5lIE1ESU9fUVVBS0VfTEVEMF9SRUcJKDB4RDAwNikKIAorLyogUVQyMDI1QyBvbmx5ICovCisjZGVmaW5lIFBDU19GV19IRUFSVEJFQVRfUkVHCTB4ZDdlZQorI2RlZmluZSBQQ1NfRldfSEVBUlRCX0xCTgkwCisjZGVmaW5lIFBDU19GV19IRUFSVEJfV0lEVEgJOAorI2RlZmluZSBQQ1NfVUM4MDUxX1NUQVRVU19SRUcJMHhkN2ZkCisjZGVmaW5lIFBDU19VQ19TVEFUVVNfTEJOCTAKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19XSURUSAk4CisjZGVmaW5lIFBDU19VQ19TVEFUVVNfRldfU0FWRQkweDIwCisjZGVmaW5lIFBNQV9QTURfRlRYX0NUUkwyX1JFRwkweGMzMDkKKyNkZWZpbmUgUE1BX1BNRF9GVFhfU1RBVElDX0xCTgkxMworI2RlZmluZSBQTUFfUE1EX1ZFTkQxX1JFRwkweGMwMDEKKyNkZWZpbmUgUE1BX1BNRF9WRU5EMV9MQlRYRF9MQk4JMTUKKyNkZWZpbmUgUENTX1ZFTkQxX1JFRwkgICAJMHhjMDAwCisjZGVmaW5lIFBDU19WRU5EMV9MQlRYRF9MQk4JNQorCiB2b2lkIHhmcF9zZXRfbGVkKHN0cnVjdCBlZnhfbmljICpwLCBpbnQgbGVkLCBpbnQgbW9kZSkKIHsKIAlpbnQgYWRkciA9IE1ESU9fUVVBS0VfTEVEMF9SRUcgKyBsZWQ7CkBAIC00NSw3ICs2MCw0OSBAQAogI2RlZmluZSBYRlBfTUFYX1JFU0VUX1RJTUUgNTAwCiAjZGVmaW5lIFhGUF9SRVNFVF9XQUlUIDEwCiAKLS8qIFJlc2V0IHRoZSBQSFlYUyBNTUQuIFRoaXMgaXMgZG9jdW1lbnRlZCAoZm9yIHRoZSBRdWFrZSBQSFkpIGFzIGRvaW5nCitzdGF0aWMgaW50IHF0MjAyNWNfd2FpdF9yZXNldChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMCAqIEhaOworCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7CisJaW50IHJlZywgb2xkX2NvdW50ZXIgPSAwOworCisJLyogV2FpdCBmb3IgZmlybXdhcmUgaGVhcnRiZWF0IHRvIHN0YXJ0ICovCisJZm9yICg7OykgeworCQlpbnQgY291bnRlcjsKKwkJcmVnID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QQ1MsCisJCQkJCSBQQ1NfRldfSEVBUlRCRUFUX1JFRyk7CisJCWlmIChyZWcgPCAwKQorCQkJcmV0dXJuIHJlZzsKKwkJY291bnRlciA9ICgocmVnID4+IFBDU19GV19IRUFSVEJfTEJOKSAmCisJCQkgICAgKCgxIDw8IFBDU19GV19IRUFSVEJfV0lEVEgpIC0gMSkpOworCQlpZiAob2xkX2NvdW50ZXIgPT0gMCkKKwkJCW9sZF9jb3VudGVyID0gY291bnRlcjsKKwkJZWxzZSBpZiAoY291bnRlciAhPSBvbGRfY291bnRlcikKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQltc2xlZXAoMTApOworCX0KKworCS8qIFdhaXQgZm9yIGZpcm13YXJlIHN0YXR1cyB0byBsb29rIGdvb2QgKi8KKwlmb3IgKDs7KSB7CisJCXJlZyA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwgTURJT19NTURfUENTLAorCQkJCQkgUENTX1VDODA1MV9TVEFUVVNfUkVHKTsKKwkJaWYgKHJlZyA8IDApCisJCQlyZXR1cm4gcmVnOworCQlpZiAoKHJlZyAmCisJCSAgICAgKCgxIDw8IFBDU19VQ19TVEFUVVNfV0lEVEgpIC0gMSkgPDwgUENTX1VDX1NUQVRVU19MQk4pID49CisJCSAgICBQQ1NfVUNfU1RBVFVTX0ZXX1NBVkUpCisJCQlicmVhazsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJbXNsZWVwKDEwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlc2V0IHRoZSBQSFlYUyBNTUQuIFRoaXMgaXMgZG9jdW1lbnRlZCAoZm9yIHRoZSBRdWFrZSBQSFlzKSBhcyBkb2luZwogICogYSBjb21wbGV0ZSBzb2Z0IHJlc2V0LgogICovCiBzdGF0aWMgaW50IHhmcF9yZXNldF9waHkoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU4LDYgKzExNSwxMiBAQAogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKIAorCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJcmMgPSBxdDIwMjVjX3dhaXRfcmVzZXQoZWZ4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKIAkvKiBXYWl0IDI1MG1zIGZvciB0aGUgUEhZIHRvIGNvbXBsZXRlIGJvb3R1cCAqLwogCW1zbGVlcCgyNTApOwogCkBAIC03Myw3ICsxMzYsNyBAQAogCXJldHVybiByYzsKIAogIGZhaWw6Ci0JRUZYX0VSUihlZngsICJYRlA6IHJlc2V0IHRpbWVkIG91dCFcbiIpOworCUVGWF9FUlIoZWZ4LCAiUEhZIHJlc2V0IHRpbWVkIG91dFxuIik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC04OCwxNSArMTUxLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWVmeC0+cGh5X2RhdGEgPSBwaHlfZGF0YTsKIAotCUVGWF9JTkZPKGVmeCwgIlhGUDogUEhZIElEIHJlZyAleCAoT1VJICV4IG1vZGVsICV4IHJldmlzaW9uIgotCQkgIiAleClcbiIsIGRldmlkLCBNRElPX0lEX09VSShkZXZpZCksIE1ESU9fSURfTU9ERUwoZGV2aWQpLAotCQkgTURJT19JRF9SRVYoZGV2aWQpKTsKKwlFRlhfSU5GTyhlZngsICJQSFkgSUQgcmVnICV4IChPVUkgJTA2eCBtb2RlbCAlMDJ4IHJldmlzaW9uICV4KVxuIiwKKwkJIGRldmlkLCBtZGlvX2lkX291aShkZXZpZCksIG1kaW9faWRfbW9kZWwoZGV2aWQpLAorCQkgbWRpb19pZF9yZXYoZGV2aWQpKTsKIAogCXBoeV9kYXRhLT5waHlfbW9kZSA9IGVmeC0+cGh5X21vZGU7CiAKIAlyYyA9IHhmcF9yZXNldF9waHkoZWZ4KTsKIAotCUVGWF9JTkZPKGVmeCwgIlhGUDogUEhZIGluaXQgJXMuXG4iLAorCUVGWF9JTkZPKGVmeCwgIlBIWSBpbml0ICVzLlxuIiwKIAkJIHJjID8gImZhaWxlZCIgOiAic3VjY2Vzc2Z1bCIpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKQEAgLTEzMSwxMiArMTk0LDI4IEBACiB7CiAJc3RydWN0IHhmcF9waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOwogCi0JLyogUmVzZXQgdGhlIFBIWSB3aGVuIG1vdmluZyBmcm9tIHR4IG9mZiB0byB0eCBvbiAqLwotCWlmICghKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9UWF9ESVNBQkxFRCkgJiYKLQkgICAgKHBoeV9kYXRhLT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSkKLQkJeGZwX3Jlc2V0X3BoeShlZngpOworCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJLyogVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHJlZ2lzdGVyIGJpdHMgd2hpY2ggY2FuCisJCSAqIGRpc2FibGUgVFggKGFuZCBzYXZlIHBvd2VyKSBvbiBkaXJlY3QtYXR0YWNoIGNhYmxlcworCQkgKiBvciBvcHRpY2FsIHRyYW5zY2VpdmVycywgdmFyeWluZyBzb21ld2hhdCBiZXR3ZWVuCisJCSAqIGZpcm13YXJlIHZlcnNpb25zLiAgT25seSAnc3RhdGljIG1vZGUnIGFwcGVhcnMgdG8KKwkJICogY292ZXIgZXZlcnl0aGluZy4gKi8KKwkJbWRpb19jbGF1c2U0NV9zZXRfZmxhZygKKwkJCWVmeCwgZWZ4LT5taWkucGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCisJCQlQTUFfUE1EX0ZUWF9DVFJMMl9SRUcsIFBNQV9QTURfRlRYX1NUQVRJQ19MQk4sCisJCQllZngtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQgfHwKKwkJCWVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9MT1dfUE9XRVIgfHwKKwkJCWVmeC0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19QQ1MgfHwKKwkJCWVmeC0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19QTUFQTUQpOworCX0gZWxzZSB7CisJCS8qIFJlc2V0IHRoZSBQSFkgd2hlbiBtb3ZpbmcgZnJvbSB0eCBvZmYgdG8gdHggb24gKi8KKwkJaWYgKCEoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSAmJgorCQkgICAgKHBoeV9kYXRhLT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSkKKwkJCXhmcF9yZXNldF9waHkoZWZ4KTsKIAotCW1kaW9fY2xhdXNlNDVfdHJhbnNtaXRfZGlzYWJsZShlZngpOworCQltZGlvX2NsYXVzZTQ1X3RyYW5zbWl0X2Rpc2FibGUoZWZ4KTsKKwl9CisKIAltZGlvX2NsYXVzZTQ1X3BoeV9yZWNvbmZpZ3VyZShlZngpOwogCiAJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggN2Y4ZTUxNC4uN2IxODgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTY4Nyw2ICs2ODcsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmV0ZGV2OwogCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CiAJdTMyIGlvYWRkciwgYm9ndXNjbnQgPSBSWF9SSU5HX1NJWkU7CiAJdTMyIGludHJfc3RhdHVzID0gMDsKIApAQCAtNjk2LDcgKzY5NywxMyBAQAogCS8qIEdldCBpbnRlcnJwdCBzdGF0ICovCiAJaW50cl9zdGF0dXMgPSBjdHJsX2lubChpb2FkZHIgKyBFRVNSKTsKIAkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KLQljdHJsX291dGwoaW50cl9zdGF0dXMsIGlvYWRkciArIEVFU1IpOworCWlmIChpbnRyX3N0YXR1cyAmIChFRVNSX0ZSQyB8IEVFU1JfUk1BRiB8IEVFU1JfUlJGIHwKKwkJCUVFU1JfUlRMRiB8IEVFU1JfUlRTRiB8IEVFU1JfUFJFIHwgRUVTUl9DRVJGIHwKKwkJCVRYX0NIRUNLIHwgRUVTUl9FUlJfQ0hFQ0spKSB7CisJCWN0cmxfb3V0bChpbnRyX3N0YXR1cywgaW9hZGRyICsgRUVTUik7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0gZWxzZQorCQlnb3RvIG90aGVyX2lycTsKIAogCWlmIChpbnRyX3N0YXR1cyAmIChFRVNSX0ZSQyB8IC8qIEZyYW1lIHJlY3YqLwogCQkJRUVTUl9STUFGIHwgLyogTXVsdGkgY2FzdCBhZGRyZXNzIHJlY3YqLwpAQCAtNzIzLDkgKzczMCwxMCBAQAogCQkgICAgICAgbmRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCX0KIAorb3RoZXJfaXJxOgogCXNwaW5fdW5sb2NrKCZtZHAtPmxvY2spOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2V0aF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC04NDQsNyArODUyLDEzIEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKG5kZXYtPmlycSwgJnNoX2V0aF9pbnRlcnJ1cHQsIDAsIG5kZXYtPm5hbWUsIG5kZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKG5kZXYtPmlycSwgJnNoX2V0aF9pbnRlcnJ1cHQsCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCisJCQkJSVJRRl9TSEFSRUQsCisjZWxzZQorCQkJCTAsCisjZW5kaWYKKwkJCQluZGV2LT5uYW1lLCBuZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2FuIG5vdCBhc3NpZ24gSVJRIG51bWJlciB0byAlc1xuIiwgQ0FSRE5BTUUpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmggYi9kcml2ZXJzL25ldC9zaF9ldGguaAppbmRleCA3M2JjNzE4Li4xNTM3ZTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9zaF9ldGguaApAQCAtNDMsOCArNDMsOCBAQAogCiAjZGVmaW5lIFNINzc2M19TS0JfQUxJR04gMzIKIC8qIENoaXAgQmFzZSBBZGRyZXNzICovCi0jIGRlZmluZSBTSF9UU1VfQUREUiAgMHhGRkUwMTgwMAotIyBkZWZpbmUgQVJTVFIgCQkgIDB4RkZFMDE4MDAKKyMgZGVmaW5lIFNIX1RTVV9BRERSCTB4RkVFMDE4MDAKKyMgZGVmaW5lIEFSU1RSCQkJU0hfVFNVX0FERFIKIAogLyogQ2hpcCBSZWdpc3RlcnMgKi8KIC8qIEUtRE1BQyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCBiZTQ0NjViYy4uOGE3MGRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTgwLDggKzgwLDggQEAKICNkZWZpbmUgU0lTOTAwX01PRFVMRV9OQU1FICJzaXM5MDAiCiAjZGVmaW5lIFNJUzkwMF9EUlZfVkVSU0lPTiAidjEuMDguMTAgQXByLiAyIDIwMDYiCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CiAKIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNDA7CiBzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKaW5kZXggODcwYjRjMy4uYTQ1OTUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApAQCAtNDIsNiArNDIsMTYgQEAKICAgI2RlZmluZSBTTUNfVVNFXzE2QklUCQkwCiAgICNkZWZpbmUgU01DX1VTRV8zMkJJVAkJMQogICAjZGVmaW5lIFNNQ19JUlFfU0VOU0UJCUlSUUZfVFJJR0dFUl9MT1cKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisgICNkZWZpbmUgU01DX1VTRV8xNkJJVAkJMAorICAjZGVmaW5lIFNNQ19VU0VfMzJCSVQJCTEKKyAgI2RlZmluZSBTTUNfSVJRX1NFTlNFCQlJUlFGX1RSSUdHRVJfTE9XCisgICNkZWZpbmUgU01DX01FTV9SRVNFUlZFRAkxCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorICAjZGVmaW5lIFNNQ19VU0VfMTZCSVQJCTAKKyAgI2RlZmluZSBTTUNfVVNFXzMyQklUCQkxCisgICNkZWZpbmUgU01DX0lSUV9TRU5TRQkJSVJRRl9UUklHR0VSX0xPVworICAjZGVmaW5lIFNNQ19NRU1fUkVTRVJWRUQJMQogI2Vsc2UKIC8qCiAgKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24KQEAgLTY3NSw2ICs2ODUsNyBAQAogI2RlZmluZSBDSElQXzkxMTYJMHgwMTE2CiAjZGVmaW5lIENISVBfOTExNwkweDAxMTcKICNkZWZpbmUgQ0hJUF85MTE4CTB4MDExOAorI2RlZmluZSBDSElQXzkyMTEJMHg5MjExCiAjZGVmaW5lIENISVBfOTIxNQkweDExNUEKICNkZWZpbmUgQ0hJUF85MjE3CTB4MTE3QQogI2RlZmluZSBDSElQXzkyMTgJMHgxMThBCkBAIC02ODksNiArNzAwLDcgQEAKIAl7IENISVBfOTExNiwgIkxBTjkxMTYiIH0sCiAJeyBDSElQXzkxMTcsICJMQU45MTE3IiB9LAogCXsgQ0hJUF85MTE4LCAiTEFOOTExOCIgfSwKKwl7IENISVBfOTIxMSwgIkxBTjkyMTEiIH0sCiAJeyBDSElQXzkyMTUsICJMQU45MjE1IiB9LAogCXsgQ0hJUF85MjE3LCAiTEFOOTIxNyIgfSwKIAl7IENISVBfOTIxOCwgIkxBTjkyMTgiIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwppbmRleCA2ZTE3NWU1Li5hZDNjYmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKQEAgLTg5NSwyMiArODk1LDIyIEBACiAJCQlTTVNDX1dBUk5JTkcoSFcsCiAJCQkJIlBhY2tldCB0YWcgcmVzZXJ2ZWQgYml0IGlzIGhpZ2giKTsKIAkJfSBlbHNlIHsKLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwODAwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0VTXykpIHsKIAkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJfSBlbHNlIHsKIAkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9ICh0eF9zdGF0ID4+IDE2KTsKIAkJCX0KLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwMDEwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0VYQ0VTU19DT0xfKSkgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAxNjsKIAkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IDE7CiAJCQl9IGVsc2UgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPQogCQkJCSAgICAoKHR4X3N0YXQgPj4gMykgJiAweEYpOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwODAwKSkKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0xPU1RfQ0FSUklFUl8pKQogCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gMTsKLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwMDIwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0xBVEVfQ09MXykpIHsKIAkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKIAkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQl9CkBAIC05MjQsMTkgKzkyNCwxNyBAQAogewogCWludCBjcmNfZXJyID0gMDsKIAotCWlmICh1bmxpa2VseShyeHN0YXQgJiAweDAwMDA4MDAwKSkgeworCWlmICh1bmxpa2VseShyeHN0YXQgJiBSWF9TVFNfRVNfKSkgewogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlpZiAodW5saWtlbHkocnhzdGF0ICYgMHgwMDAwMDAwMikpIHsKKwkJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIFJYX1NUU19DUkNfRVJSXykpIHsKIAkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJY3JjX2VyciA9IDE7CiAJCX0KIAl9CiAJaWYgKGxpa2VseSghY3JjX2VycikpIHsKLQkJaWYgKHVubGlrZWx5KChyeHN0YXQgJiAweDAwMDAxMDIwKSA9PSAweDAwMDAxMDIwKSkgewotCQkJLyogRnJhbWUgdHlwZSBpbmRpY2F0ZXMgbGVuZ3RoLAotCQkJICogYW5kIGxlbmd0aCBlcnJvciBpcyBzZXQgKi8KKwkJaWYgKHVubGlrZWx5KChyeHN0YXQgJiBSWF9TVFNfRlJBTUVfVFlQRV8pICYmCisJCQkgICAgIChyeHN0YXQgJiBSWF9TVFNfTEVOR1RIX0VSUl8pKSkKIAkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQl9CiAJCWlmIChyeHN0YXQgJiBSWF9TVFNfTUNBU1RfKQogCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAl9CkBAIC05NTUsNyArOTUzLDcgQEAKIAkJZG8gewogCQkJdWRlbGF5KDEpOwogCQkJdmFsID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFJYX0RQX0NUUkwpOwotCQl9IHdoaWxlICgtLXRpbWVvdXQgJiYgKHZhbCAmIFJYX0RQX0NUUkxfUlhfRkZXRF8pKTsKKwkJfSB3aGlsZSAoKHZhbCAmIFJYX0RQX0NUUkxfUlhfRkZXRF8pICYmIC0tdGltZW91dCk7CiAKIAkJaWYgKHVubGlrZWx5KHRpbWVvdXQgPT0gMCkpCiAJCQlTTVNDX1dBUk5JTkcoSFcsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgIgpAQCAtMTEyMSw3ICsxMTE5LDcgQEAKIAogLyogU2V0cyB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzIHRvIGRldl9hZGRyLCBjYWxsZWQgd2l0aCBtYWNfbG9jayBoZWxkICovCiBzdGF0aWMgdm9pZAotc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTggZGV2X2FkZHJbNl0pCitzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3Moc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1OCBkZXZfYWRkcls2XSkKIHsKIAl1MzIgbWFjX2hpZ2gxNiA9IChkZXZfYWRkcls1XSA8PCA4KSB8IGRldl9hZGRyWzRdOwogCXUzMiBtYWNfbG93MzIgPSAoZGV2X2FkZHJbM10gPDwgMjQpIHwgKGRldl9hZGRyWzJdIDw8IDE2KSB8CkBAIC0xMTYyLDggKzExNjAsOCBAQAogCiAJLyogTWFrZSBzdXJlIEVFUFJPTSBoYXMgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgc2V0dGluZyBHUElPX0NGRyAqLwogCXRpbWVvdXQgPSA1MDsKLQl3aGlsZSAoKHRpbWVvdXQtLSkgJiYKLQkgICAgICAgKHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBFMlBfQ01EKSAmIEUyUF9DTURfRVBDX0JVU1lfKSkgeworCXdoaWxlICgoc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEUyUF9DTUQpICYgRTJQX0NNRF9FUENfQlVTWV8pICYmCisJICAgICAgIC0tdGltZW91dCkgewogCQl1ZGVsYXkoMTApOwogCX0KIApAQCAtMTE3Niw3ICsxMTc0LDcgQEAKIAkvKiBUaGUgc29mdCByZXNldCBhYm92ZSBjbGVhcmVkIHRoZSBkZXZpY2UncyBNQUMgYWRkcmVzcywKIAkgKiByZXN0b3JlIGl0IGZyb20gbG9jYWwgY29weSAoc2V0IGluIHByb2JlKSAqLwogCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7Ci0Jc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKIAogCS8qIEluaXRpYWxpc2UgaXJxcywgYnV0IGxlYXZlIGFsbCBzb3VyY2VzIGRpc2FibGVkICovCkBAIC0xMjI3LDYgKzEyMjUsMTAgQEAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJTTVNDOTExeC85MjF4IGlkZW50aWZpZWQgYXQgJSMwOGx4LCBJUlE6ICVkXG4iLAogCQkgKHVuc2lnbmVkIGxvbmcpcGRhdGEtPmlvYWRkciwgZGV2LT5pcnEpOwogCisJLyogUmVzZXQgdGhlIGxhc3Qga25vd24gZHVwbGV4IGFuZCBjYXJyaWVyICovCisJcGRhdGEtPmxhc3RfZHVwbGV4ID0gLTE7CisJcGRhdGEtPmxhc3RfY2FycmllciA9IC0xOworCiAJLyogQnJpbmcgdGhlIFBIWSB1cCAqLwogCXBoeV9zdGFydChwZGF0YS0+cGh5X2Rldik7CiAKQEAgLTE1MDYsNiArMTUwOCwzMSBAQAogfQogI2VuZGlmCQkJCS8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAKK3N0YXRpYyBpbnQgc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJLyogT24gb2xkZXIgaGFyZHdhcmUgcmV2aXNpb25zIHdlIGNhbm5vdCBjaGFuZ2UgdGhlIG1hYyBhZGRyZXNzCisJICogcmVnaXN0ZXJzIHdoaWxlIHJlY2VpdmluZyBkYXRhLiAgTmV3ZXIgZGV2aWNlcyBjYW4gc2FmZWx5IGNoYW5nZQorCSAqIHRoaXMgYXQgYW55IHRpbWUuICovCisJaWYgKHBkYXRhLT5nZW5lcmF0aW9uIDw9IDEgJiYgbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFN0YW5kYXJkIGlvY3RscyBmb3IgbWlpLXRvb2wgKi8KIHN0YXRpYyBpbnQgc21zYzkxMXhfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CkBAIC0xNjE5LDcgKzE2NDYsNyBAQAogCWRvIHsKIAkJbXNsZWVwKDEpOwogCQllMmNtZCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBFMlBfQ01EKTsKLQl9IHdoaWxlICgoZTJjbWQgJiBFMlBfQ01EX0VQQ19CVVNZXykgJiYgKHRpbWVvdXQtLSkpOworCX0gd2hpbGUgKChlMmNtZCAmIEUyUF9DTURfRVBDX0JVU1lfKSAmJiAoLS10aW1lb3V0KSk7CiAKIAlpZiAoIXRpbWVvdXQpIHsKIAkJU01TQ19UUkFDRShEUlYsICJUSU1FRCBPVVQiKTsKQEAgLTE3MzYsNyArMTc2Myw3IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzbXNjOTExeF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19kb19pb2N0bAkJPSBzbXNjOTExeF9kb19pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gc21zYzkxMXhfc2V0X21hY19hZGRyZXNzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzbXNjOTExeF9wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKQEAgLTE5MTIsNyArMTkzOSw2IEBACiAJdW5zaWduZWQgaW50IGludGNmZyA9IDA7CiAJaW50IHJlc19zaXplLCBpcnFfZmxhZ3M7CiAJaW50IHJldHZhbDsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCXByX2luZm8oIiVzOiBEcml2ZXIgdmVyc2lvbiAlcy5cbiIsIFNNU0NfQ0hJUE5BTUUsIFNNU0NfRFJWX1ZFUlNJT04pOwogCkBAIC0yMDI1LDcgKzIwNTEsNyBAQAogCiAJLyogQ2hlY2sgaWYgbWFjIGFkZHJlc3MgaGFzIGJlZW4gc3BlY2lmaWVkIHdoZW4gYnJpbmdpbmcgaW50ZXJmYWNlIHVwICovCiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKLQkJc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwkJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKIAkJU01TQ19UUkFDRShQUk9CRSwgIk1BQyBBZGRyZXNzIGlzIHNwZWNpZmllZCBieSBjb25maWd1cmF0aW9uIik7CiAJfSBlbHNlIHsKIAkJLyogVHJ5IHJlYWRpbmcgbWFjIGFkZHJlc3MgZnJvbSBkZXZpY2UuIGlmIEVFUFJPTSBpcyBwcmVzZW50CkBAIC0yMDM5LDcgKzIwNjUsNyBAQAogCQl9IGVsc2UgewogCQkJLyogZWVwcm9tIHZhbHVlcyBhcmUgaW52YWxpZCwgZ2VuZXJhdGUgcmFuZG9tIE1BQyAqLwogCQkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7Ci0JCQlzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCQkJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKIAkJCVNNU0NfVFJBQ0UoUFJPQkUsCiAJCQkJIk1BQyBBZGRyZXNzIGlzIHNldCB0byByYW5kb21fZXRoZXJfYWRkciIpOwogCQl9CkBAIC0yMDQ3LDggKzIwNzMsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwogCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVzXG4iLAotCQkgcHJpbnRfbWFjKG1hYywgZGV2LT5kZXZfYWRkcikpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmggYi9kcml2ZXJzL25ldC9zbXNjOTExeC5oCmluZGV4IDJiNzY2NTQuLmI1NzE2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21zYzkxMXguaApAQCAtODEsMTIgKzgxLDE5IEBACiAKICNkZWZpbmUgUlhfU1RBVFVTX0ZJRk8JCQkweDQwCiAjZGVmaW5lIFJYX1NUU19FU18JCQkweDAwMDA4MDAwCisjZGVmaW5lIFJYX1NUU19MRU5HVEhfRVJSXwkJMHgwMDAwMTAwMAogI2RlZmluZSBSWF9TVFNfTUNBU1RfCQkJMHgwMDAwMDQwMAorI2RlZmluZSBSWF9TVFNfRlJBTUVfVFlQRV8JCTB4MDAwMDAwMjAKKyNkZWZpbmUgUlhfU1RTX0NSQ19FUlJfCQkJMHgwMDAwMDAwMgogCiAjZGVmaW5lIFJYX1NUQVRVU19GSUZPX1BFRUsJCTB4NDQKIAogI2RlZmluZSBUWF9TVEFUVVNfRklGTwkJCTB4NDgKICNkZWZpbmUgVFhfU1RTX0VTXwkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgVFhfU1RTX0xPU1RfQ0FSUklFUl8JCTB4MDAwMDA4MDAKKyNkZWZpbmUgVFhfU1RTX05PX0NBUlJJRVJfCQkweDAwMDAwNDAwCisjZGVmaW5lIFRYX1NUU19MQVRFX0NPTF8JCTB4MDAwMDAyMDAKKyNkZWZpbmUgVFhfU1RTX0VYQ0VTU19DT0xfCQkweDAwMDAwMTAwCiAKICNkZWZpbmUgVFhfU1RBVFVTX0ZJRk9fUEVFSwkJMHg0QwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5jIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwppbmRleCBkYThiOTc3Li41OTU5YWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogCWRvIHsKIAkJbXNsZWVwKDEpOwogCQllMmNtZCA9IHNtc2M5NDIwX3JlZ19yZWFkKHBkLCBFMlBfQ01EKTsKLQl9IHdoaWxlICgoZTJjbWQgJiBFMlBfQ01EX0VQQ19CVVNZXykgJiYgKHRpbWVvdXQtLSkpOworCX0gd2hpbGUgKChlMmNtZCAmIEUyUF9DTURfRVBDX0JVU1lfKSAmJiAoLS10aW1lb3V0KSk7CiAKIAlpZiAoIXRpbWVvdXQpIHsKIAkJc21zY19pbmZvKEhXLCAiVElNRUQgT1VUIik7CkBAIC00MTMsNiArNDEzLDcgQEAKIAl9CiAKIAltZW1jcHkoZGF0YSwgJmVlcHJvbV9kYXRhW2VlcHJvbS0+b2Zmc2V0XSwgbGVuKTsKKwllZXByb20tPm1hZ2ljID0gU01TQzk0MjBfRUVQUk9NX01BR0lDOwogCWVlcHJvbS0+bGVuID0gbGVuOwogCXJldHVybiAwOwogfQpAQCAtNDIzLDYgKzQyNCw5IEBACiAJc3RydWN0IHNtc2M5NDIwX3BkYXRhICpwZCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIAorCWlmIChlZXByb20tPm1hZ2ljICE9IFNNU0M5NDIwX0VFUFJPTV9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzbXNjOTQyMF9lZXByb21fZW5hYmxlX2FjY2VzcyhwZCk7CiAJc21zYzk0MjBfZWVwcm9tX3NlbmRfY21kKHBkLCBFMlBfQ01EX0VQQ19DTURfRVdFTl8pOwogCXJldCA9IHNtc2M5NDIwX2VlcHJvbV93cml0ZV9sb2NhdGlvbihwZCwgZWVwcm9tLT5vZmZzZXQsICpkYXRhKTsKQEAgLTgwMyw3ICs4MDcsNyBAQAogCWlmIChwZC0+cnhfY3N1bSkgewogCQl1MTYgaHdfY3N1bSA9IGdldF91bmFsaWduZWRfbGUxNihza2JfdGFpbF9wb2ludGVyKHNrYikgKwogCQkJTkVUX0lQX0FMSUdOICsgcGFja2V0X2xlbmd0aCArIDQpOwotCQlwdXRfdW5hbGlnbmVkX2xlMTYoY3B1X3RvX2xlMTYoaHdfY3N1bSksICZza2ItPmNzdW0pOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoaHdfY3N1bSwgJnNrYi0+Y3N1bSk7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5oIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuaAppbmRleCA2OWMzNTFmLi5lNDQxNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5oCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKICNkZWZpbmUgTEFOX1JFR0lTVEVSX0VYVEVOVAkJKDB4NDAwKQogCiAjZGVmaW5lIFNNU0M5NDIwX0VFUFJPTV9TSVpFCQkoKHUzMikxMSkKKyNkZWZpbmUgU01TQzk0MjBfRUVQUk9NX01BR0lDCQkoMHg5NDIwKQogCiAjZGVmaW5lIFBLVF9CVUZfU1oJCQkoVkxBTl9FVEhfRlJBTUVfTEVOICsgTkVUX0lQX0FMSUdOICsgNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDdmNmI0YTQuLjkwZTY2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTIyNTksNiArMjI1OSwyMyBAQAogCWNhcmQtPnNwaWRlcl9zdGF0cy50eF90aW1lb3V0cysrOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNwaWRlcl9uZXRfb3BzID0geworCS5uZG9fb3BlbgkJPSBzcGlkZXJfbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHNwaWRlcl9uZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc3BpZGVyX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc3BpZGVyX25ldF9zZXRfbXVsdGksCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzcGlkZXJfbmV0X3NldF9tYWMsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHNwaWRlcl9uZXRfY2hhbmdlX210dSwKKwkubmRvX2RvX2lvY3RsCQk9IHNwaWRlcl9uZXRfZG9faW9jdGwsCisJLm5kb190eF90aW1lb3V0CQk9IHNwaWRlcl9uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkvKiBIVyBWTEFOICovCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkvKiBwb2xsIGNvbnRyb2xsZXIgKi8KKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNwaWRlcl9uZXRfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCit9OworCiAvKioKICAqIHNwaWRlcl9uZXRfc2V0dXBfbmV0ZGV2X29wcyAtIGluaXRpYWxpemF0aW9uIG9mIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucwogICogQG5ldGRldjogbmV0X2RldmljZSBzdHJ1Y3R1cmUKQEAgLTIyNjgsMjEgKzIyODUsOCBAQAogc3RhdGljIHZvaWQKIHNwaWRlcl9uZXRfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCW5ldGRldi0+b3BlbiA9ICZzcGlkZXJfbmV0X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gJnNwaWRlcl9uZXRfc3RvcDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZzcGlkZXJfbmV0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc3BpZGVyX25ldF9zZXRfbXVsdGk7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmc3BpZGVyX25ldF9zZXRfbWFjOwotCW5ldGRldi0+Y2hhbmdlX210dSA9ICZzcGlkZXJfbmV0X2NoYW5nZV9tdHU7Ci0JbmV0ZGV2LT5kb19pb2N0bCA9ICZzcGlkZXJfbmV0X2RvX2lvY3RsOwotCS8qIHR4IHdhdGNoZG9nICovCi0JbmV0ZGV2LT50eF90aW1lb3V0ID0gJnNwaWRlcl9uZXRfdHhfdGltZW91dDsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmc3BpZGVyX25ldF9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFNQSURFUl9ORVRfV0FUQ0hET0dfVElNRU9VVDsKLQkvKiBIVyBWTEFOICovCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkvKiBwb2xsIGNvbnRyb2xsZXIgKi8KLQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9ICZzcGlkZXJfbmV0X3BvbGxfY29udHJvbGxlcjsKLSNlbmRpZiAvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLwogCS8qIGV0aHRvb2wgb3BzICovCiAJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZzcGlkZXJfbmV0X2V0aHRvb2xfb3BzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKaW5kZXggOThmZTc5NS4uZmNiOTQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYworKysgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCkBAIC0xNzgsNyArMTc4LDcgQEAKICNkZWZpbmUgRklSTVdBUkVfVFgJImFkYXB0ZWMvc3RhcmZpcmVfdHguYmluIgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiBLRVJOX0lORk8gInN0YXJmaXJlLmM6djEuMDMgNy8yNi8yMDAwICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCiBLRVJOX0lORk8gIiAodW5vZmZpY2lhbCAyLjIvMi40IGtlcm5lbCBwb3J0LCB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuYm1hYy5jIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCmluZGV4IDdmNjljN2YuLjUwMTdkN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYworKysgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmMKQEAgLTEwNzQsNiArMTA3NCwxOCBAQAogCS5nZXRfbGluawkJPSBiaWdtYWNfZ2V0X2xpbmssCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJpZ21hY19vcHMgPSB7CisJLm5kb19vcGVuCQk9IGJpZ21hY19vcGVuLAorCS5uZG9fc3RvcAkJPSBiaWdtYWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGJpZ21hY19zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGJpZ21hY19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBiaWdtYWNfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gYmlnbWFjX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYmlnbWFjX2V0aGVyX2luaXQoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkJICAgICAgIHN0cnVjdCBvZl9kZXZpY2UgKnFlY19vcCkKIHsKQEAgLTExODcsMTYgKzExOTksOCBAQAogCWJwLT5kZXYgPSBkZXY7CiAKIAkvKiBTZXQgbGlua3MgdG8gb3VyIEJpZ01BQyBvcGVuIGFuZCBjbG9zZSByb3V0aW5lcy4gKi8KLQlkZXYtPm9wZW4gPSAmYmlnbWFjX29wZW47Ci0JZGV2LT5zdG9wID0gJmJpZ21hY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZiaWdtYWNfc3RhcnRfeG1pdDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmJpZ21hY19ldGh0b29sX29wczsKLQotCS8qIFNldCBsaW5rcyB0byBCaWdNQUMgc3RhdGlzdGljIGFuZCBtdWx0aS1jYXN0IGxvYWRpbmcgY29kZS4gKi8KLQlkZXYtPmdldF9zdGF0cyA9ICZiaWdtYWNfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmJpZ21hY19zZXRfbXVsdGljYXN0OwotCi0JZGV2LT50eF90aW1lb3V0ID0gJmJpZ21hY190eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZiaWdtYWNfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwogCiAJLyogRmluaXNoIG5ldCBkZXZpY2UgcmVnaXN0cmF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKaW5kZXggZmVhZjBlMC4uYzM5OWIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCkBAIC0xMDksOCArMTA5LDkgQEAKICNlbmRpZgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VuZGFuY2UgQWx0YSBFdGhlcm5ldCBkcml2ZXIiKTsKQEAgLTkwOSw3ICs5MTAsNyBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgJXMtZHVwbGV4IGJhc2VkIG9uIE1JSSAjJWQgIgogCQkJCSAgICJuZWdvdGlhdGVkIGNhcGFiaWxpdHkgJTQuNHguXG4iLCBkZXYtPm5hbWUsCiAJCQkJICAgZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLCBucC0+cGh5c1swXSwgbmVnb3RpYXRlZCk7Ci0JCWlvd3JpdGUxNihpb3JlYWQxNihpb2FkZHIgKyBNQUNDdHJsMCkgfCBkdXBsZXggPyAweDIwIDogMCwgaW9hZGRyICsgTUFDQ3RybDApOworCQlpb3dyaXRlMTYoaW9yZWFkMTYoaW9hZGRyICsgTUFDQ3RybDApIHwgKGR1cGxleCA/IDB4MjAgOiAwKSwgaW9hZGRyICsgTUFDQ3RybDApOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCA1MzIyYmI3Li5jMDI0MzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMTE1Nyw3ICsxMTU3LDcgQEAKIAkJaWYgKGxpbWl0LS0gPD0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAobGltaXQgPD0gMCkKKwlpZiAobGltaXQgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUENTIHJlc2V0IGJpdCB3b3VsZCBub3QgY2xlYXIuXG4iLAogCQkgICAgICAgZ3AtPmRldi0+bmFtZSk7CiB9CkBAIC0xMjI5LDcgKzEyMjksNyBAQAogCQkJYnJlYWs7CiAJfSB3aGlsZSAodmFsICYgKEdSRUdfU1dSU1RfVFhSU1QgfCBHUkVHX1NXUlNUX1JYUlNUKSk7CiAKLQlpZiAobGltaXQgPD0gMCkKKwlpZiAobGltaXQgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTVyByZXNldCBpcyBnaGV0dG8uXG4iLCBncC0+ZGV2LT5uYW1lKTsKIAogCWlmIChncC0+cGh5X3R5cGUgPT0gcGh5X3NlcmlhbGluayB8fCBncC0+cGh5X3R5cGUgPT0gcGh5X3NlcmRlcykKQEAgLTI5OTgsOCArMjk5OCwxMSBAQAogCS5uZG9fZG9faW9jdGwJCT0gZ2VtX2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSBnZW1fdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZ2VtX2NoYW5nZV9tdHUsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gZ2VtX3NldF9tYWNfYWRkcmVzcywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyICAgID0gZ2VtX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2VtX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMzE2MSwxMCArMzE2NCw2IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAlkZXYtPmRtYSA9IDA7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBnZW1fc2V0X21hY19hZGRyZXNzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZW1fcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCiAKIAkvKiBTZXQgdGhhdCBub3csIGluIGNhc2UgUE0ga2lja3MgaW4gbm93ICovCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5obWUuYyBiL2RyaXZlcnMvbmV0L3N1bmhtZS5jCmluZGV4IGQ0ZmI0YWMuLjRlOWJkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmhtZS5jCkBAIC0yNjQ5LDggKzI2NDksNiBAQAogCWludCBlcnIgPSAtRU5PREVWOwogCiAJc2J1c19kcCA9IHRvX29mX2RldmljZShvcC0+ZGV2LnBhcmVudCktPm5vZGU7Ci0JaWYgKGlzX3FmZSkKLQkJc2J1c19kcCA9IHRvX29mX2RldmljZShvcC0+ZGV2LnBhcmVudC0+cGFyZW50KS0+bm9kZTsKIAogCS8qIFdlIGNhbiBtYXRjaCBQQ0kgZGV2aWNlcyB0b28sIGRvIG5vdCBhY2NlcHQgdGhvc2UgaGVyZS4gKi8KIAlpZiAoc3RyY21wKHNidXNfZHAtPm5hbWUsICJzYnVzIikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCAyODEzNzMyLi5hZmM3YjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCWliLT5waHlzX2FkZHIgWzVdID0gZGV2LT5kZXZfYWRkciBbNF07CiAKIAkvKiBTZXR1cCB0aGUgVHggcmluZyBlbnRyaWVzICovCi0JZm9yIChpID0gMDsgaSA8PSBUWF9SSU5HX1NJWkU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlsZXB0ciA9IExBTkNFX0FERFIoYWliICsgbGliYnVmZl9vZmZzZXQodHhfYnVmLCBpKSk7CiAJCWliLT5idHhfcmluZyBbaV0udG1kMCAgICAgID0gbGVwdHI7CiAJCWliLT5idHhfcmluZyBbaV0udG1kMV9oYWRyID0gbGVwdHIgPj4gMTY7CkBAIC0zOTksNyArMzk5LDcgQEAKIAlzYnVzX3dyaXRlYihkZXYtPmRldl9hZGRyWzRdLCAmaWItPnBoeXNfYWRkcls1XSk7CiAKIAkvKiBTZXR1cCB0aGUgVHggcmluZyBlbnRyaWVzICovCi0JZm9yIChpID0gMDsgaSA8PSBUWF9SSU5HX1NJWkU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlsZXB0ciA9IGxpYmJ1ZmZfb2Zmc2V0KHR4X2J1ZiwgaSk7CiAJCXNidXNfd3JpdGV3KGxlcHRyLAkmaWItPmJ0eF9yaW5nIFtpXS50bWQwKTsKIAkJc2J1c193cml0ZWIobGVwdHIgPj4gMTYsJmliLT5idHhfcmluZyBbaV0udG1kMV9oYWRyKTsKQEAgLTEzMTEsNiArMTMxMSwxNyBAQAogCS5nZXRfbGluawkJPSBzcGFyY19sYW5jZV9nZXRfbGluaywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BhcmNfbGFuY2Vfb3BzID0geworCS5uZG9fb3BlbgkJPSBsYW5jZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBsYW5jZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGFuY2Vfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGxhbmNlX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGxhbmNlX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgc3BhcmNfbGFuY2VfcHJvYmVfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCQkJCQkgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpsZWRtYSwKIAkJCQkJICAgc3RydWN0IG9mX2RldmljZSAqbGVidWZmZXIpCkBAIC0xNDYyLDEzICsxNDczLDkgQEAKIAogCWxwLT5kZXYgPSBkZXY7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmb3AtPmRldik7Ci0JZGV2LT5vcGVuID0gJmxhbmNlX29wZW47Ci0JZGV2LT5zdG9wID0gJmxhbmNlX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmxhbmNlX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmxhbmNlX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbGFuY2Vfc2V0X211bHRpY2FzdDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnNwYXJjX2xhbmNlX2V0aHRvb2xfb3BzOworCWRldi0+bmV0ZGV2X29wcyA9ICZzcGFyY19sYW5jZV9vcHM7CiAKIAlkZXYtPmlycSA9IG9wLT5pcnFzWzBdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5xZS5jIGIvZHJpdmVycy9uZXQvc3VucWUuYwppbmRleCBmZTBjM2YyLi5jNmVjNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5xZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKQEAgLTgyOSw2ICs4MjksMTcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBxZWNfb3BzID0geworCS5uZG9fb3BlbgkJPSBxZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBxZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcWVfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHFlX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IHFlX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgcWVjX2V0aGVyX2luaXQoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZDsKQEAgLTg5MywxNSArOTA0LDExIEBACiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvcC0+ZGV2KTsKIAotCWRldi0+b3BlbiA9IHFlX29wZW47Ci0JZGV2LT5zdG9wID0gcWVfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBxZV9zdGFydF94bWl0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcWVfc2V0X211bHRpY2FzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBxZV90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CiAJZGV2LT5kbWEgPSAwOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmcWVfZXRodG9vbF9vcHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJnFlY19vcHM7CiAKIAlyZXMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3Vudm5ldC5jIGIvZHJpdmVycy9uZXQvc3Vudm5ldC5jCmluZGV4IDYxMTIzMGYuLmE4MmZiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnZuZXQuYworKysgYi9kcml2ZXJzL25ldC9zdW52bmV0LmMKQEAgLTEwMTIsNiArMTAxMiwxNiBAQAogc3RhdGljIExJU1RfSEVBRCh2bmV0X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWCh2bmV0X2xpc3RfbXV0ZXgpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZuZXRfb3BzID0geworCS5uZG9fb3BlbgkJPSB2bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHZuZXRfY2xvc2UsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSB2bmV0X3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdm5ldF9zZXRfbWFjX2FkZHIsCisJLm5kb190eF90aW1lb3V0CQk9IHZuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSB2bmV0X3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgc3RydWN0IHZuZXQgKiBfX2RldmluaXQgdm5ldF9uZXcoY29uc3QgdTY0ICpsb2NhbF9tYWMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEwNDAsMTUgKzEwNTAsOSBAQAogCUlOSVRfTElTVF9IRUFEKCZ2cC0+bGlzdCk7CiAJdnAtPmxvY2FsX21hYyA9ICpsb2NhbF9tYWM7CiAKLQlkZXYtPm9wZW4gPSB2bmV0X29wZW47Ci0JZGV2LT5zdG9wID0gdm5ldF9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHZuZXRfc2V0X3J4X21vZGU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB2bmV0X3NldF9tYWNfYWRkcjsKLQlkZXYtPnR4X3RpbWVvdXQgPSB2bmV0X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnZuZXRfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmdm5ldF9ldGh0b29sX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVk5FVF9UWF9USU1FT1VUOwotCWRldi0+Y2hhbmdlX210dSA9IHZuZXRfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZuZXRfc3RhcnRfeG1pdDsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKaW5kZXggYmU5ZjM4Zi4uN2RlYmQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmMKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKQEAgLTYzLDcgKzYzLDYgQEAKICAqLwogCiAjaW5jbHVkZSAidGVodXRpLmgiCi0jaW5jbHVkZSAidGVodXRpX2Z3LmgiCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2RldmluaXRkYXRhIGJkeF9wY2lfdGJsW10gPSB7CiAJezB4MUZDOSwgMHgzMDA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKQEAgLTMxOCwyOCArMzE3LDQxIEBACiAKIHN0YXRpYyBpbnQgYmR4X2Z3X2xvYWQoc3RydWN0IGJkeF9wcml2ICpwcml2KQogeworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwogCWludCBtYXN0ZXIsIGk7CisJaW50IHJjOwogCiAJRU5URVI7CiAJbWFzdGVyID0gUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TRU1BUEhPUkUpOwogCWlmICghUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpICYmIG1hc3RlcikgewotCQliZHhfdHhfcHVzaF9kZXNjX3NhZmUocHJpdiwgc19maXJtTG9hZCwgc2l6ZW9mKHNfZmlybUxvYWQpKTsKKwkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgInRlaHV0aS9maXJtd2FyZS5iaW4iLCAmcHJpdi0+cGRldi0+ZGV2KTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJCWJkeF90eF9wdXNoX2Rlc2Nfc2FmZShwcml2LCAoY2hhciAqKWZ3LT5kYXRhLCBmdy0+c2l6ZSk7CiAJCW1kZWxheSgxMDApOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsKLQkJaWYgKFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSkKLQkJCWJyZWFrOworCQlpZiAoUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpKSB7CisJCQlyYyA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQogCQltZGVsYXkoMik7CiAJfQorCXJjID0gLUVJTzsKK291dDoKIAlpZiAobWFzdGVyKQogCQlXUklURV9SRUcocHJpdiwgcmVnSU5JVF9TRU1BUEhPUkUsIDEpOworCWlmIChmdykKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlpZiAoaSA9PSAyMDApIHsKKwlpZiAocmMpIHsKIAkJRVJSKCIlczogZmlybXdhcmUgbG9hZGluZyBmYWlsZWRcbiIsIHByaXYtPm5kZXYtPm5hbWUpOwotCQlEQkcoIlZQQyA9IDB4JXggVklDID0gMHgleCBJTklUX1NUQVRVUyA9IDB4JXggaT0lZFxuIiwKLQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZQQyksCi0JCSAgICBSRUFEX1JFRyhwcml2LCByZWdWSUMpLCBSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUyksIGkpOwotCQlSRVQoLUVJTyk7CisJCWlmIChyYyA9PSAtRUlPKQorCQkJREJHKCJWUEMgPSAweCV4IFZJQyA9IDB4JXggSU5JVF9TVEFUVVMgPSAweCV4IGk9JWRcbiIsCisJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVlBDKSwKKwkJCSAgICBSRUFEX1JFRyhwcml2LCByZWdWSUMpLAorCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSwgaSk7CisJCVJFVChyYyk7CiAJfSBlbHNlIHsKIAkJREJHKCIlczogZmlybXdhcmUgbG9hZGluZyBzdWNjZXNzXG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKIAkJUkVUKDApOwpAQCAtNjE3LDEzICs2MjksNiBAQAogCVJFVChyYyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBiZHhfZmlybXdhcmVfZW5kaWFuZXNzKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc19maXJtTG9hZCk7IGkrKykKLQkJc19maXJtTG9hZFtpXSA9IENQVV9DSElQX1NXQVAzMihzX2Zpcm1Mb2FkW2ldKTsKLX0KLQogc3RhdGljIGludCBiZHhfcmFuZ2VfY2hlY2soc3RydWN0IGJkeF9wcml2ICpwcml2LCB1MzIgb2Zmc2V0KQogewogCXJldHVybiAob2Zmc2V0ID4gKHUzMikgKEJEWF9SRUdTX1NJWkUgLyBwcml2LT5uaWMtPnBvcnRfbnVtKSkgPwpAQCAtMjUwMSw3ICsyNTA2LDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGJkeF9tb2R1bGVfaW5pdCh2b2lkKQogewogCUVOVEVSOwotCWJkeF9maXJtd2FyZV9lbmRpYW5lc3MoKTsKIAlpbml0X3R4ZF9zaXplcygpOwogCXByaW50X2RyaXZlcl9pZCgpOwogCVJFVChwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiZHhfcGNpX2RyaXZlcikpOwpAQCAtMjUyMSwzICsyNTI1LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oQkRYX0RSVl9ERVNDKTsKK01PRFVMRV9GSVJNV0FSRSgidGVodXRpL2Zpcm13YXJlLmJpbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmggYi9kcml2ZXJzL25ldC90ZWh1dGkuaAppbmRleCBlZmFmODRkLi5kZWM2N2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuaAorKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIENvbXBpbGUgVGltZSBTd2l0Y2hlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmggYi9kcml2ZXJzL25ldC90ZWh1dGlfZncuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM2MDNhOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGlfZncuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNzEyICswLDAgQEAKLS8qCi0gKiBUZWh1dGkgTmV0d29ya3MoUikgTmV0d29yayBEcml2ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZWh1dGkgTmV0d29ya3MgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0vKiBMb2FkaW5nIEZpcm13YXJlICovCi0vKiBJTlRfTUVNIFZlciAqLwotc3RhdGljIHUzMiBzX2Zpcm1Mb2FkW10gPSB7Ci0JMHgwMDBmMDAwMiwKLQkweDQwNzE4MDAwLAotCTB4MDAwMDAwMmQsCi0JMHhjMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDEsCi0JMHgwMDAwMDAyZCwKLQkweGMwODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMiwKLQkweDAwMDAwMDJkLAotCTB4YzEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAzLAotCTB4MDAwMDAwMmQsCi0JMHhjMTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDQsCi0JMHgwMDAwMDAyZCwKLQkweGMyMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNSwKLQkweDAwMDAwMDJkLAotCTB4YzI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA2LAotCTB4MDAwMDAwMmQsCi0JMHhjMzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDcsCi0JMHgwMDAwMDAyZCwKLQkweGMzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOCwKLQkweDAwMDAwMDJkLAotCTB4YzQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA5LAotCTB4MDAwMDAwMmQsCi0JMHhjNDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGEsCi0JMHgwMDAwMDAyZCwKLQkweGM1MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYiwKLQkweDAwMDAwMDJkLAotCTB4YzU4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBjLAotCTB4MDAwMDAwMmQsCi0JMHhjNjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGQsCi0JMHgwMDAwMDAyZCwKLQkweGM2ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZSwKLQkweDAwMDAwMDJkLAotCTB4YzcwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBmLAotCTB4MDAwMDAwMmQsCi0JMHhjNzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTAsCi0JMHgwMDAwMDAyZCwKLQkweGM4MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMSwKLQkweDAwMDAwMDJkLAotCTB4Yzg4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEyLAotCTB4MDAwMDAwMmQsCi0JMHhjOTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTMsCi0JMHgwMDAwMDAyZCwKLQkweGM5ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNCwKLQkweDAwMDAwMDJkLAotCTB4Y2EwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE1LAotCTB4MDAwMDAwMmQsCi0JMHhjYTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTYsCi0JMHgwMDAwMDAyZCwKLQkweGNiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNywKLQkweDAwMDAwMDJkLAotCTB4Y2I4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE4LAotCTB4MDAwMDAwMmQsCi0JMHhjYzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTksCi0JMHgwMDAwMDAyZCwKLQkweGNjODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYSwKLQkweDAwMDAwMDJkLAotCTB4Y2QwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFiLAotCTB4MDAwMDAwMmQsCi0JMHhjZDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWMsCi0JMHgwMDAwMDAyZCwKLQkweGNlMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZCwKLQkweDAwMDAwMDJkLAotCTB4Y2U4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFlLAotCTB4MDAwMDAwMmQsCi0JMHhjZjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWYsCi0JMHgwMDAwMDAyZCwKLQkweGNmODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMCwKLQkweDAwMDAwMDJkLAotCTB4ZDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIxLAotCTB4MDAwMDAwMmQsCi0JMHhkMDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjIsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMywKLQkweDAwMDAwMDJkLAotCTB4ZDE4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI0LAotCTB4MDAwMDAwMmQsCi0JMHhkMjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjUsCi0JMHgwMDAwMDAyZCwKLQkweGQyODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNiwKLQkweDAwMDAwMDJkLAotCTB4ZDMwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI3LAotCTB4MDAwMDAwMmQsCi0JMHhkMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjgsCi0JMHgwMDAwMDAyZCwKLQkweGQ0MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOSwKLQkweDAwMDAwMDJkLAotCTB4ZDQ4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJhLAotCTB4MDAwMDAwMmQsCi0JMHhkNTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmIsCi0JMHgwMDAwMDAyZCwKLQkweGQ1ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYywKLQkweDAwMDAwMDJkLAotCTB4ZDYwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJkLAotCTB4MDAwMDAwMmQsCi0JMHhkNjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmUsCi0JMHgwMDAwMDAyZCwKLQkweGQ3MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZiwKLQkweDAwMDAwMDJkLAotCTB4ZDc4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMwLAotCTB4MDAwMDAwMmQsCi0JMHhkODAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzEsCi0JMHgwMDAwMDAyZCwKLQkweGQ4ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMiwKLQkweDAwMDAwMDJkLAotCTB4ZDkwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMzLAotCTB4MDAwMDAwMmQsCi0JMHhkOTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzQsCi0JMHgwMDAwMDAyZCwKLQkweGRhMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNSwKLQkweDAwMDAwMDJkLAotCTB4ZGE4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM2LAotCTB4MDAwMDAwMmQsCi0JMHhkYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzcsCi0JMHgwMDAwMDAyZCwKLQkweGRiODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOCwKLQkweDAwMDAwMDdiLAotCTB4ZGQ2MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM5LAotCTB4MDAwMDAwMmQsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2EsCi0JMHgwMDAwMDAyZCwKLQkweGRiODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNjLAotCTB4MDAwMDAwMmQsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjQsCi0JMHgwMDAwMDAyZCwKLQkweGRiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwM2QwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDcwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDM3MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyOTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2MsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDRhYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjgwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2YsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJiODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMWU0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODgsCi0JMHgwMDAwMDAzZiwKLQkweGQ3ODAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OSwKLQkweDAwMDAwMDNmLAotCTB4ZDc5ODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhhLAotCTB4MDAwMDAwNTksCi0JMHhkNzgwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGUsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ZDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZiwKLQkweDAwMDAwMDE4LAotCTB4MTdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MiwKLQkweDAwMDAwMDJkLAotCTB4ZDdkODAwYjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkzLAotCTB4MDAwMDAwMTgsCi0JMHgxN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyOTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDRhYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDljLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI5ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDA5MTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMTk4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTksCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFiLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDBjODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjgsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDBmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2EsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDM3ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2QsCi0JMHgwMDAwMDAyZCwKLQkweGQzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZSwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMDM3ODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNmLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwMDQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDAsCi0JMHgwMDAwMDAzZiwKLQkweGQxODQwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNCwKLQkweDAwMDAwMDNmLAotCTB4ZDE3ZmZmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ1LAotCTB4MDAwMDAwM2YsCi0JMHhkMTdmZmY4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGMsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRlLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGYsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUxLAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU0LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTUsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU3LAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzOSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTgsCi0JMHgwMDAwMDA5NCwKLQkweDAwMGIzMTNiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOSwKLQkweDAwMDAwMDk0LAotCTB4MDAwOTMxM2QsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVhLAotCTB4MDAwMDAwOTQsCi0JMHgwMDA3MzEzZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWIsCi0JMHgwMDAwMDA5NCwKLQkweDAwMDUzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYywKLQkweDAwMDAwMDA5LAotCTB4YzFlZDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVkLAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwYjc4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDA3ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYzLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjQsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY2LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjcsCi0JMHgwMDAwMDA1OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY5LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmQsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZSwKLQkweDAwMDAwMDE4LAotCTB4MWQyZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZmLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDAsCi0JMHgwMDAwMDAxOCwKLQkweDFkMTMzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMSwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAyLAotCTB4MDAwMDAwMTgsCi0JMHgxZDFiM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA4LAotCTB4MDAwMDAwMDksCi0JMHhjNTJkM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDksCi0JMHgwMDAwMDAyOSwKLQkweGQyMDEwMDY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBlLAotCTB4MDAwMDAwMDksCi0JMHhjMjI5M2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGYsCi0JMHgwMDAwMDAyOSwKLQkweGQyMDAwMDY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTExLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE0LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTUsCi0JMHgwMDAwMDA1OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE3LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTgsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFhLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWIsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYywKLQkweDAwMDAwMDE4LAotCTB4MWQwZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMiwKLQkweDAwMDAwMDA5LAotCTB4YzUyZDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIzLAotCTB4MDAwMDAwMmQsCi0JMHhkMTA4MDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjQsCi0JMHgwMDAwMDAwOCwKLQkweDIzYzMzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNSwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDNiMGEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI2LAotCTB4MDAwMDAwM2YsCi0JMHhkMzAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjcsCi0JMHgwMDAwMDAzZiwKLQkweGQzMDQwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOCwKLQkweDAwMDAwMDJmLAotCTB4ZDY4MTQwODUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI5LAotCTB4MDAwMDAwM2YsCi0JMHhkNGZmZmY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmEsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwNzgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYiwKLQkweDAwMDAwMDNmLAotCTB4ZDFmZmZmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJjLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmQsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzYsCi0JMHgwMDAwMDA2MSwKLQkweGY2MDAwNDZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNywKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM4LAotCTB4MDAwMDAwMTgsCi0JMHgzZDZiMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzksCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAwNThiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYSwKLQkweDAwMDAwMDJmLAotCTB4ZDY4MTAxMDYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNiLAotCTB4MDAwMDAwMmQsCi0JMHhkMjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2MsCi0JMHgwMDAwMDAyMSwKLQkweGQyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNlLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2YsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQxLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ0LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDUsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NiwKLQkweDAwMDAwMDQ5LAotCTB4ZDE3YTMzZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ3LAotCTB4MDAwMDAwMmYsCi0JMHhkMTcxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDgsCi0JMHgwMDAwMDAyZiwKLQkweGQxNjEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRkLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGUsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUwLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTEsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUzLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTQsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NSwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU2LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTcsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU5LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWEsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YiwKLQkweDAwMDAwMDJkLAotCTB4ZDE2YzA3ZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVjLAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVmLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjAsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYyLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjMsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NCwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY4LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjksCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZiLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmMsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZCwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZlLAotCTB4MDAwMDAwNDksCi0JMHhkMTc4MzNlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmYsCi0JMHgwMDAwMDAyZiwKLQkweGQxNzEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MCwKLQkweDAwMDAwMDJmLAotCTB4ZDE2MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcxLAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc0LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzUsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc3LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzgsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2IsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdkLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2UsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgwLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODEsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MiwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgzLAotCTB4MDAwMDAwMmQsCi0JMHhkMTY4MDdlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODQsCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODcsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg5LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThjLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGQsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZSwKLQkweDAwMDAwMDA4LAotCTB4MjI3OTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThmLAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMDYwYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTAsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODEwMTA2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDAwMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkyLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTMsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDAwMTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NCwKLQkweDAwMDAwMDNmLAotCTB4ZDUwMDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk1LAotCTB4MDAwMDAwM2YsCi0JMHhkNTgwMDIwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTYsCi0JMHgwMDAwMDAzZiwKLQkweGQ1ODAwMjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk4LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTksCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YSwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTliLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzRlOSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWMsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzNTZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTllLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWYsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMCwKLQkweDAwMDAwMDQxLAotCTB4ZDUwMDM1NmIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWExLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZWIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMywKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDNiMGQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE0LAotCTB4MDAwMDAwNDksCi0JMHhkNjgwM2IwNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTUsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDM2NjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZiwKLQkweDAwMDAwMDYxLAotCTB4ZjYwMDA0NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIwLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZWIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMiwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDNiMGUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIzLAotCTB4MDAwMDAwNDksCi0JMHhkNjgwM2IwOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjQsCi0JMHgwMDAwMDA0OSwKLQkweGQ1ODAzYjA5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjcsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI5LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzVlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJjLAotCTB4MDAwMDAwNDEsCi0JMHhkNjAwMDdlYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmQsCi0JMHgwMDAwMDA0MSwKLQkweGQ1ODAwODZiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJmLAotCTB4MDAwMDAwMTgsCi0JMHgzN2VkMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzAsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ZmZmZjgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMSwKLQkweDAwMDAwMDNmLAotCTB4ZDUwMjAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMyLAotCTB4MDAwMDAwM2YsCi0JMHhkNTE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzMsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzYsCi0JMHgwMDAwMDAyMSwKLQkweGQ1MDAwMGVhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNywKLQkweDAwMDAwMDQ5LAotCTB4ZGQwZTNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM4LAotCTB4MDAwMDAwMzUsCi0JMHhkMTA0MDA3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzksCi0JMHgwMDAwMDAxOCwKLQkweDM3ZjUwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYSwKLQkweDAwMDAwMDNmLAotCTB4ZDRmZmZmODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNiLAotCTB4MDAwMDAwM2YsCi0JMHhkNTA0MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2MsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2YsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMCwKLQkweDAwMDAwMDUxLAotCTB4ZjUwMDAwZWEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMywKLQkweDAwMDAwMDQ5LAotCTB4ZGQwZTNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ0LAotCTB4MDAwMDAwMzUsCi0JMHhkMTA0ODA3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDUsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZjUwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNiwKLQkweDAwMDAwMDNmLAotCTB4Yzc3ZjdmMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ3LAotCTB4MDAwMDAwM2YsCi0JMHhjNzdmN2YwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODA0MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOSwKLQkweDAwMDAwMDNmLAotCTB4ZDEwM2MwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRhLAotCTB4MDAwMDAwMjUsCi0JMHhkZTIwMDBlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGIsCi0JMHgwMDAwMDA0OSwKLQkweGRlODAyNzRlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGUsCi0JMHgwMDAwMDAzNSwKLQkweGQxMDAwMGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZiwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUwLAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMWQzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNSwKLQkweDAwMDAwMDdkLAotCTB4Yzc2MGE3MTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU2LAotCTB4MDAwMDAwMzEsCi0JMHhjMDgwMDA0MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTcsCi0JMHgwMDAwMDAzMSwKLQkweGM0MDAwMDQ4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOCwKLQkweDAwMDAwMDMxLAotCTB4YzI4MDAwNDUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNCwKLQkweDAwMDAwMDJkLAotCTB4ZGIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYSwKLQkweDAwMDAwMDJkLAotCTB4ZDM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBhMTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmYsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA0ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDUwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBhOTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDgsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA1ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDYwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYjE2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMTgwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE2MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEyMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTMwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEzODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2IsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYywKLQkweDAwMDAwMDNmLAotCTB4ZGQwNTAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2UsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAxOTAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIyODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjViLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTgwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBiOTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjUsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBjMTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmUsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE5ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjczLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2EsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYjE2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWMwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2QsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBjOTksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGQxYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFkMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwZDliLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg4LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFlMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwZTFjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMGYwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NiwKLQkweDAwMDAwMDdkLAotCTB4Yzc2MGE3MTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk3LAotCTB4MDAwMDAwMzEsCi0JMHhjMDgwMDA0MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTgsCi0JMHgwMDAwMDAzMSwKLQkweGM0MDAwMDQ4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OSwKLQkweDAwMDAwMDMxLAotCTB4YzI4MDAwNDUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlhLAotCTB4MDAwMDAwMzEsCi0JMHhkNjgwMDA2ZCwKLS8qIEJSRFhfSU5JVF9TRFJBTSAqLwotCTB4MDAwZjAwMGYsCi0JMHgwMDcwMDA2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDQwLAotCTB4MDAwMDAxMDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAwMDY0LAotCTB4MDAwMDAwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAyNDAwLAotCTB4MDAwMDI4MDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAyODgwLAotCTB4MDAwMDAxODAsCi0JMHgwMDAwMDAwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAxN2QsCi0JMHgwMDAwMDAwOCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDA5LAotCTB4MDAwMDUwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotLyogQlJEWF9JTklUICovCi0JMHgwMDBmMDAwZiwKLQkweDAwNzAwMWY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNDAsCi0JMHgwMDAwMDEwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDAwNjQsCi0JMHgwMDAwMDA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDI0MDAsCi0JMHgwMDAwMjgwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDI4ODAsCi0JMHgwMDAwMDE4MCwKLQkweDAwMDAwMDAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDE3ZCwKLQkweDAwMDAwMDA4LAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDksCi0JMHgwMDAwNTAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0vKiBaRVJPX0lOSVQgKi8KLQkweDAwMGYwMDAyLAotCTB4MDA3MDAwMDAsCi0JMHgwMDAwMDAwMSwKLQkweDAwMDAwMDAwLAotLyogWkVST19JTklUICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzAwMDAwLAotCTB4MDAwMDAwMDEsCi0JMHgwMDAwMDAwMCwKLS8qIExvYWRpbmcgb3BlcmF0aW9uYWwgRmlybXdhcmUgKi8KLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDAsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMSwKLQkweDAwMDAwMDA0LAotCTB4MDFkMTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAyLAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDMsCi0JMHgwMDAwMDAwNCwKLQkweDAyODkzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNCwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAxMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA1LAotCTB4MDAwMDAwMDQsCi0JMHgwMjg1M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDYsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMTgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNywKLQkweDAwMDAwMDA0LAotCTB4MDNmZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA4LAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOCwKLQkweDAwMDAwMDQ5LAotCTB4YzAwMDNiMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI5LAotCTB4MDAwMDAwNDksCi0JMHhjMDgwM2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmEsCi0JMHgwMDAwMDA0OSwKLQkweGMxMDAzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYiwKLQkweDAwMDAwMDQ5LAotCTB4YzE4MDNiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJjLAotCTB4MDAwMDAwMjksCi0JMHhkZjYwMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmQsCi0JMHgwMDAwMDA0OSwKLQkweGRmNDQzYjdkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZSwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJmLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjAsCi0JMHgwMDAwMDAzZiwKLQkweGRmMDAwMDAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MSwKLQkweDAwMDAwMDJkLAotCTB4ZGRlMDBmODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMDI4MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQwMTgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NCwKLQkweDAwMDAwMDdkLAotCTB4ZmQxNTAwODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY1LAotCTB4MDAwMDAwN2EsCi0JMHgxMDIwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjYsCi0JMHgwMDAwMDA3YSwKLQkweDMwMjA3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NywKLQkweDAwMDAwMDIxLAotCTB4ZDAyNDAwNjAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjksCi0JMHgwMDAwMDAzZiwKLQkweGRkNDAwMjgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YSwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWJiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZiLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxZmIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZCwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZlLAotCTB4MDAwMDAwNzksCi0JMHhmZDIxMDEwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmYsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMmI0MDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MCwKLQkweDAwMDAwMDQwLAotCTB4M2QwMDMwMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcxLAotCTB4MDAwMDAwNDgsCi0JMHgxZDAwM2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjE3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDA1N2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc0LAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc3LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzgsCi0JMHgwMDAwMDAyMSwKLQkweGUzMzcxZjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OSwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdhLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2IsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YywKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdkLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2UsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZiwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgwLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODEsCi0JMHgwMDAwMDAzZiwKLQkweGRmMDAwMDgzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMCwKLQkweDAwMDAwMDJkLAotCTB4ZDAwODA4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGExLAotCTB4MDAwMDAwMDgsCi0JMHgyMWI1ZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDEwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMTgxMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE0LAotCTB4MDAwMDAwN2QsCi0JMHhmZDAxODA4MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTUsCi0JMHgwMDAwMDA3OSwKLQkweGQwOTAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNiwKLQkweDAwMDAwMDQ5LAotCTB4ZDA1ODNiN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE3LAotCTB4MDAwMDAwNDksCi0JMHhkMjA0M2IwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTgsCi0JMHgwMDAwMDAzZCwKLQkweGRkNDAwMDAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOSwKLQkweDAwMDAwMDI0LAotCTB4MzIwMDAyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFhLAotCTB4MDAwMDAwM2QsCi0JMHhkZDdmZjgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWIsCi0JMHgwMDAwMDAyOSwKLQkweGQwMjAwMTdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYywKLQkweDAwMDAwMDQ5LAotCTB4ZDBhNDNiMGUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFkLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDJmZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWUsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIwLAotCTB4MDAwMDAwMzgsCi0JMHgzMDAwMDFlMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjEsCi0JMHgwMDAwMDAzOSwKLQkweGQwMDAwMTYwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMiwKLQkweDAwMDAwMDc5LAotCTB4ZDFiMTNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIzLAotCTB4MDAwMDAwMmQsCi0JMHhkZGUwMGZlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjQsCi0JMHgwMDAwMDA0OSwKLQkweGQwODAzMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNSwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTdiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI2LAotCTB4MDAwMDAwNzksCi0JMHhkZDMxM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjcsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMzc0MDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOCwKLQkweDAwMDAwMDA4LAotCTB4MDE3ZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI5LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDAzODcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJjLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxMDQwOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzE3ZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDMwMDNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJmLAotCTB4MDAwMDAwNzksCi0JMHhkMzgxYmI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzAsCi0JMHgwMDAwMDA3ZiwKLQkweGQxMDFiMjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMSwKLQkweDAwMDAwMDQ4LAotCTB4NTEwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMyLAotCTB4MDAwMDAwM2QsCi0JMHhkZDQwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzMsCi0JMHgwMDAwMDAwOCwKLQkweDAxOTUzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNCwKLQkweDAwMDAwMDIxLAotCTB4ZDMwMDA2NjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM1LAotCTB4MDAwMDAwMjAsCi0JMHg1MzgwMDBlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwODAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWIzNjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM4LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYjNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzksCi0JMHgwMDAwMDA3NSwKLQkweGYxMDE4NjYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYSwKLQkweDAwMDAwMDc1LAotCTB4ZDIwMWIxNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNiLAotCTB4MDAwMDAwNzgsCi0JMHgxZDAwN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2MsCi0JMHgwMDAwMDAyNSwKLQkweGRkMDAwMWUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZCwKLQkweDAwMDAwMDA4LAotCTB4MDFiMTMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNlLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2YsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQxLAotCTB4MDAwMDAwMjEsCi0JMHhlMzM3OWY2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDIsCi0JMHgwMDAwMDA0OSwKLQkweGQzMDAzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMywKLQkweDAwMDAwMDc5LAotCTB4ZDM4MWJiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ0LAotCTB4MDAwMDAwN2YsCi0JMHhkMTAxYjI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDUsCi0JMHgwMDAwMDA0OCwKLQkweDUxMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNiwKLQkweDAwMDAwMDc1LAotCTB4ZDIwMWIxNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ3LAotCTB4MDAwMDAwNzgsCi0JMHgxZDAwN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWMwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRhLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDgwODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYywKLQkweDAwMDAwMDc4LAotCTB4M2QwMWMwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDE4ZTNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU5LAotCTB4MDAwMDAwMmYsCi0JMHhkMTgxMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODAxODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYiwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMDIwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWQsCi0JMHgwMDAwMDA0OSwKLQkweGQyMDQzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDI4NDNiMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVmLAotCTB4MDAwMDAwMjUsCi0JMHhkZDAwMDBlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjAsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTM0MTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMSwKLQkweDAwMDAwMDk0LAotCTB4MDAwYjQzNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYyLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE1NDhlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjMsCi0JMHgwMDAwMDA5NCwKLQkweDAwMWI0OTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNCwKLQkweDAwMDAwMDk0LAotCTB4MDAyZjQwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY1LAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjYsCi0JMHgwMDAwMDAxZCwKLQkweGZkMmI4MGU1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNywKLQkweDAwMDAwMDMwLAotCTB4MzE4MzgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY4LAotCTB4MDAwMDAwMzAsCi0JMHgxMTgyODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjksCi0JMHgwMDAwMDAxZCwKLQkweGZkMjU4MGU1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYSwKLQkweDAwMDAwMDMwLAotCTB4MzE4MzAwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZiLAotCTB4MDAwMDAwMzAsCi0JMHgxMTgyMDA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmMsCi0JMHgwMDAwMDAyZiwKLQkweGQxODEwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZCwKLQkweDAwMDAwMDFkLAotCTB4ZmQwOTgwZTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZlLAotCTB4MDAwMDAwMzAsCi0JMHgzMTgzZDM2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmYsCi0JMHgwMDAwMDAzMCwKLQkweDExODNkMjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMCwKLQkweDAwMDAwMDJmLAotCTB4ZDE4MTAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAxLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDIsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMywKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA0LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDUsCi0JMHgwMDAwMDAyNSwKLQkweGQyMDAwMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNiwKLQkweDAwMDAwMDE4LAotCTB4N2Q3N2ZkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA3LAotCTB4MDAwMDAwNDksCi0JMHhkZTIwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDgsCi0JMHgwMDAwMDA0OSwKLQkweGRlODAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOSwKLQkweDAwMDAwMDIxLAotCTB4ZDE4MDAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBhLAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzMWUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwZTNiNzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBkLAotCTB4MDAwMDAwNjEsCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEwLAotCTB4MDAwMDAwMzUsCi0JMHhkZDAwMDBmYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTEsCi0JMHgwMDAwMDAxOCwKLQkweDNiN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEzLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNSwKLQkweDAwMDAwMDIxLAotCTB4ZDE4MDAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE2LAotCTB4MDAwMDAwNjksCi0JMHhkZDA0M2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTcsCi0JMHgwMDAwMDA2MSwKLQkweGYxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE5LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFjLAotCTB4MDAwMDAwMjUsCi0JMHhkMjAwMDI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWQsCi0JMHgwMDAwMDA5OCwKLQkweDYwNWRiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQwLAotCTB4MDAwMDAwNDksCi0JMHhkNDA4M2IwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDEsCi0JMHgwMDAwMDAwOSwKLQkweGMyOGIzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MiwKLQkweDAwMDAwMDNmLAotCTB4ZDQwMDAzODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQzLAotCTB4MDAwMDAwMDksCi0JMHhjMjhiM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDQsCi0JMHgwMDAwMDA0OSwKLQkweGQ0MGUzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NSwKLQkweDAwMDAwMDNmLAotCTB4ZDY0MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ2LAotCTB4MDAwMDAwMmYsCi0JMHhkMjgxNDA4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDcsCi0JMHgwMDAwMDAyZCwKLQkweGQyODQwMzY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGQsCi0JMHgwMDAwMDAzMSwKLQkweGQzMDNkMjY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZSwKLQkweDAwMDAwMDQ5LAotCTB4ZGU0MDNiNjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRmLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUyLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTMsCi0JMHgwMDAwMDA0OSwKLQkweGQ1ODAzYjdlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NCwKLQkweDAwMDAwMDIxLAotCTB4ZGU0MDAwZTYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU1LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NywKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU4LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTksCi0JMHgwMDAwMDA0OSwKLQkweGQ1MDAzYjdlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTViLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVlLAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODBlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWYsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTU0MTY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MCwKLQkweDAwMDAwMDk0LAotCTB4MDAyNTQ0ZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYxLAotCTB4MDAwMDAwOTQsCi0JMHgwMDIzNDFlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjIsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTc0NTY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MywKLQkweDAwMDAwMDk0LAotCTB4MDAxNTQyNjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY0LAotCTB4MDAwMDAwOTQsCi0JMHgwMDI3NDJlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjUsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmQ0MzY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NiwKLQkweDAwMDAwMDk0LAotCTB4MDAyZDQ0NjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY3LAotCTB4MDAwMDAwOTQsCi0JMHgwMDMzNDNlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjgsCi0JMHgwMDAwMDAwNCwKLQkweDAzOTczYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OSwKLQkweDAwMDAwMDBkLAotCTB4ZTMwZGMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZhLAotCTB4MDAwMDAwMzAsCi0JMHgzMjAzMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmIsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDIwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YywKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZkLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmUsCi0JMHgwMDAwMDAwZCwKLQkweGUzM2ZjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZiwKLQkweDAwMDAwMDMwLAotCTB4MzIwNDYwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcwLAotCTB4MDAwMDAwMzAsCi0JMHgxMjA0NDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzEsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODI4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MiwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTczLAotCTB4MDAwMDAwMGQsCi0JMHhlMzNmYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzQsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDQyMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NSwKLQkweDAwMDAwMDMwLAotCTB4MTIwNDAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc2LAotCTB4MDAwMDAwM2YsCi0JMHhkNDgyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzcsCi0JMHgwMDAwMDAwZCwKLQkweGUzNjNjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OCwKLQkweDAwMDAwMDMwLAotCTB4MzIwMzIwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc5LAotCTB4MDAwMDAwMzAsCi0JMHgxMjAzMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2EsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODMwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YiwKLQkweDAwMDAwMDQ5LAotCTB4ZDI4MDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdjLAotCTB4MDAwMDAwMGQsCi0JMHhlMzBkYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2QsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDM4MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZSwKLQkweDAwMDAwMDMwLAotCTB4MTIwMjgwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdmLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgxMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2MDIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MSwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MTAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgyLAotCTB4MDAwMDAwMGQsCi0JMHhlMzNmYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODMsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDQyMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NCwKLQkweDAwMDAwMDMwLAotCTB4MTIwNDAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg1LAotCTB4MDAwMDAwM2YsCi0JMHhkNDgyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODYsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg4LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODksCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAxODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YSwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MTAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThiLAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGMsCi0JMHgwMDAwMDA5OCwKLQkweDgwNjkzYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZCwKLQkweDAwMDAwMDUxLAotCTB4ZjIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThlLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkxLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk0LAotCTB4MDAwMDAwNDksCi0JMHhkM2MwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTUsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NiwKLQkweDAwMDAwMDUxLAotCTB4ZjIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlhLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWIsCi0JMHgwMDAwMDA0OSwKLQkweGQzYTAzYjM4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YywKLQkweDAwMDAwMDE5LAotCTB4ZGQ2MWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlkLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWUsCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZiwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEwLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMiwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMDE4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEzLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTQsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNSwKLQkweDAwMDAwMDk4LAotCTB4ODAzNzNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE2LAotCTB4MDAwMDAwNTEsCi0JMHhmMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE5LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWQsCi0JMHgwMDAwMDA0OSwKLQkweGQzODAzYjM4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZSwKLQkweDAwMDAwMDE5LAotCTB4ZGQ2ZmJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFmLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjAsCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMSwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIyLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNCwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI1LAotCTB4MDAwMDAwOTgsCi0JMHg4MDE3M2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjYsCi0JMHgwMDAwMDA0OSwKLQkweGRlNDAzYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjksCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZCwKLQkweDAwMDAwMDIxLAotCTB4ZDIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJlLAotCTB4MDAwMDAwMTksCi0JMHhkM2VmN2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmYsCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNiwKLQkweDAwMDAwMDJkLAotCTB4ZGQ1NDAxODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM3LAotCTB4MDAwMDAwNzksCi0JMHhmM2UwODA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzgsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzNjdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2IsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYywKLQkweDAwMDAwMDU5LAotCTB4ZmQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMWMwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2UsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDEsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQzLAotCTB4MDAwMDAwMzEsCi0JMHhkNDgzODg2YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNSwKLQkweDAwMDAwMDc5LAotCTB4ZjE4MTkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ2LAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDcsCi0JMHgwMDAwMDA5OCwKLQkweDgwNTNiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOCwKLQkweDAwMDAwMDE5LAotCTB4ZGQ3ZjdiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ5LAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmUsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAwMjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZiwKLQkweDAwMDAwMDQ5LAotCTB4ZDE4NDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAwLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAzLAotCTB4MDAwMDAwNjUsCi0JMHhmMTgwMDI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDQsCi0JMHgwMDAwMDAxOCwKLQkweDdkN2QzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2EwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2EzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMCwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0vKiBGSU5JU0ggSU5JVCBEZXNjcmlwdG9yICovCi0JMHgwMDBmMDAwMiwKLQkweDgwNzE4N2M0LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDQ3OWEzN2YuLmY3ZWZjZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBKZWZmIEdhcnppayAoamdhcnppa0Bwb2JveC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgogICoKICAqIEZpcm13YXJlIGlzOgogICoJRGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkIHNvdXJjZSBjb2RlLApAQCAtNjgsOCArNjgsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45NyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJEZWNlbWJlciAxMCwgMjAwOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjk4IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYnJ1YXJ5IDI1LCAyMDA5IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTE0NzMsNyArMTQ3Myw4IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCiAJCXJldHVybjsKIAogCXJlZyA9IE1JSV9URzNfTUlTQ19TSERXX1dSRU4gfApAQCAtMjA0OSw4ICsyMDUwLDYgQEAKIAogc3RhdGljIHZvaWQgdGczX3dyaXRlX3NpZ19wb3N0X3Jlc2V0KHN0cnVjdCB0ZzMgKiwgaW50KTsKIHN0YXRpYyBpbnQgdGczX2hhbHRfY3B1KHN0cnVjdCB0ZzMgKiwgdTMyKTsKLXN0YXRpYyBpbnQgdGczX252cmFtX2xvY2soc3RydWN0IHRnMyAqKTsKLXN0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqKTsKIAogc3RhdGljIHZvaWQgdGczX3Bvd2VyX2Rvd25fcGh5KHN0cnVjdCB0ZzMgKnRwLCBib29sIGRvX2xvd19wb3dlcikKIHsKQEAgLTIxMDcsNiArMjEwNiwxOTQgQEAKIH0KIAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyBpbnQgdGczX252cmFtX2xvY2soc3RydWN0IHRnMyAqdHApCit7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgeworCQlpbnQgaTsKKworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApIHsKKwkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9TRVQxKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA4MDAwOyBpKyspIHsKKwkJCQlpZiAodHIzMihOVlJBTV9TV0FSQikgJiBTV0FSQl9HTlQxKQorCQkJCQlicmVhazsKKwkJCQl1ZGVsYXkoMjApOworCQkJfQorCQkJaWYgKGkgPT0gODAwMCkgeworCQkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfQorCQl0cC0+bnZyYW1fbG9ja19jbnQrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKKwkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA+IDApCisJCQl0cC0+bnZyYW1fbG9ja19jbnQtLTsKKwkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKQorCQkJdHczMl9mKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7CisJfQorfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKKwkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOworCisJCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyB8IEFDQ0VTU19FTkFCTEUpOworCX0KK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgeworCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CisKKwkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOworCX0KK30KKworc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20oc3RydWN0IHRnMyAqdHAsCisJCQkJCXUzMiBvZmZzZXQsIHUzMiAqdmFsKQoreworCXUzMiB0bXA7CisJaW50IGk7CisKKwlpZiAob2Zmc2V0ID4gRUVQUk9NX0FERFJfQUREUl9NQVNLIHx8IChvZmZzZXQgJSA0KSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKSAmIH4oRUVQUk9NX0FERFJfQUREUl9NQVNLIHwKKwkJCQkJRUVQUk9NX0FERFJfREVWSURfTUFTSyB8CisJCQkJCUVFUFJPTV9BRERSX1JFQUQpOworCXR3MzIoR1JDX0VFUFJPTV9BRERSLAorCSAgICAgdG1wIHwKKwkgICAgICgwIDw8IEVFUFJPTV9BRERSX0RFVklEX1NISUZUKSB8CisJICAgICAoKG9mZnNldCA8PCBFRVBST01fQUREUl9BRERSX1NISUZUKSAmCisJICAgICAgRUVQUk9NX0FERFJfQUREUl9NQVNLKSB8CisJICAgICBFRVBST01fQUREUl9SRUFEIHwgRUVQUk9NX0FERFJfU1RBUlQpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUik7CisKKwkJaWYgKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisJaWYgKCEodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJKnZhbCA9IHRyMzIoR1JDX0VFUFJPTV9EQVRBKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBOVlJBTV9DTURfVElNRU9VVCAxMDAwMAorCitzdGF0aWMgaW50IHRnM19udnJhbV9leGVjX2NtZChzdHJ1Y3QgdGczICp0cCwgdTMyIG52cmFtX2NtZCkKK3sKKwlpbnQgaTsKKworCXR3MzIoTlZSQU1fQ01ELCBudnJhbV9jbWQpOworCWZvciAoaSA9IDA7IGkgPCBOVlJBTV9DTURfVElNRU9VVDsgaSsrKSB7CisJCXVkZWxheSgxMCk7CisJCWlmICh0cjMyKE5WUkFNX0NNRCkgJiBOVlJBTV9DTURfRE9ORSkgeworCQkJdWRlbGF5KDEwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gTlZSQU1fQ01EX1RJTUVPVVQpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiB0ZzNfbnZyYW1fcGh5c19hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCisJICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCisJICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQorCisJCWFkZHIgPSAoKGFkZHIgLyB0cC0+bnZyYW1fcGFnZXNpemUpIDw8CisJCQlBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSArCisJCSAgICAgICAoYWRkciAlIHRwLT5udnJhbV9wYWdlc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIHUzMiB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCisJICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCisJICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQorCisJCWFkZHIgPSAoKGFkZHIgPj4gQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKgorCQkJdHAtPm52cmFtX3BhZ2VzaXplKSArCisJCSAgICAgICAoYWRkciAmICgoMSA8PCBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAtIDEpKTsKKworCXJldHVybiBhZGRyOworfQorCisvKiBOT1RFOiBEYXRhIHJlYWQgaW4gZnJvbSBOVlJBTSBpcyBieXRlc3dhcHBlZCBhY2NvcmRpbmcgdG8KKyAqIHRoZSBieXRlc3dhcHBpbmcgc2V0dGluZ3MgZm9yIGFsbCBvdGhlciByZWdpc3RlciBhY2Nlc3Nlcy4KKyAqIHRnMyBkZXZpY2VzIGFyZSBCRSBkZXZpY2VzLCBzbyBvbiBhIEJFIG1hY2hpbmUsIHRoZSBkYXRhCisgKiByZXR1cm5lZCB3aWxsIGJlIGV4YWN0bHkgYXMgaXQgaXMgc2VlbiBpbiBOVlJBTS4gIE9uIGEgTEUKKyAqIG1hY2hpbmUsIHRoZSAzMi1iaXQgdmFsdWUgd2lsbCBiZSBieXRlc3dhcHBlZC4KKyAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCit7CisJaW50IHJldDsKKworCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCisJCXJldHVybiB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20odHAsIG9mZnNldCwgdmFsKTsKKworCW9mZnNldCA9IHRnM19udnJhbV9waHlzX2FkZHIodHAsIG9mZnNldCk7CisKKwlpZiAob2Zmc2V0ID4gTlZSQU1fQUREUl9NU0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gdGczX252cmFtX2xvY2sodHApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0ZzNfZW5hYmxlX252cmFtX2FjY2Vzcyh0cCk7CisKKwl0dzMyKE5WUkFNX0FERFIsIG9mZnNldCk7CisJcmV0ID0gdGczX252cmFtX2V4ZWNfY21kKHRwLCBOVlJBTV9DTURfUkQgfCBOVlJBTV9DTURfR08gfAorCQlOVlJBTV9DTURfRklSU1QgfCBOVlJBTV9DTURfTEFTVCB8IE5WUkFNX0NNRF9ET05FKTsKKworCWlmIChyZXQgPT0gMCkKKwkJKnZhbCA9IHRyMzIoTlZSQU1fUkREQVRBKTsKKworCXRnM19kaXNhYmxlX252cmFtX2FjY2Vzcyh0cCk7CisKKwl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEVuc3VyZXMgTlZSQU0gZGF0YSBpcyBpbiBieXRlc3RyZWFtIGZvcm1hdC4gKi8KK3N0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfYmUzMihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19iZTMyICp2YWwpCit7CisJdTMyIHY7CisJaW50IHJlcyA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2KTsKKwlpZiAoIXJlcykKKwkJKnZhbCA9IGNwdV90b19iZTMyKHYpOworCXJldHVybiByZXM7Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgdm9pZCBfX3RnM19zZXRfbWFjX2FkZHIoc3RydWN0IHRnMyAqdHAsIGludCBza2lwX21hY18xKQogewogCXUzMiBhZGRyX2hpZ2gsIGFkZHJfbG93OwpAQCAtMjIzNyw4ICsyNDI0LDggQEAKIAkJCXBoeWlkID0gcGh5ZGV2LT5kcnYtPnBoeV9pZCAmIHBoeWRldi0+ZHJ2LT5waHlfaWRfbWFzazsKIAkJCWlmIChwaHlpZCAhPSBURzNfUEhZX0lEX0JDTUFDMTMxKSB7CiAJCQkJcGh5aWQgJj0gVEczX1BIWV9PVUlfTUFTSzsKLQkJCQlpZiAocGh5aWQgPT0gVEczX1BIWV9PVUlfMSAmJgotCQkJCSAgICBwaHlpZCA9PSBURzNfUEhZX09VSV8yICYmCisJCQkJaWYgKHBoeWlkID09IFRHM19QSFlfT1VJXzEgfHwKKwkJCQkgICAgcGh5aWQgPT0gVEczX1BIWV9PVUlfMiB8fAogCQkJCSAgICBwaHlpZCA9PSBURzNfUEhZX09VSV8zKQogCQkJCQlkb19sb3dfcG93ZXIgPSB0cnVlOwogCQkJfQpAQCAtNDMzOCw2ICs0NTI1LDEzIEBACiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgdHAtPmRldik7CisKKwkJaWYgKGxlbiA+ICh0cC0+ZGV2LT5tdHUgKyBFVEhfSExFTikgJiYKKwkJICAgIHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlnb3RvIG5leHRfcGt0OworCQl9CisKICNpZiBURzNfVkxBTl9UQUdfVVNFRAogCQlpZiAodHAtPnZsZ3JwICE9IE5VTEwgJiYKIAkJICAgIGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19WTEFOKSB7CkBAIC01NjMwLDYyICs1ODI0LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7Ci0JCWludCBpOwotCi0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkgewotCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX1NFVDEpOwotCQkJZm9yIChpID0gMDsgaSA8IDgwMDA7IGkrKykgewotCQkJCWlmICh0cjMyKE5WUkFNX1NXQVJCKSAmIFNXQVJCX0dOVDEpCi0JCQkJCWJyZWFrOwotCQkJCXVkZWxheSgyMCk7Ci0JCQl9Ci0JCQlpZiAoaSA9PSA4MDAwKSB7Ci0JCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCQl9Ci0JCXRwLT5udnJhbV9sb2NrX2NudCsrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgewotCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID4gMCkKLQkJCXRwLT5udnJhbV9sb2NrX2NudC0tOwotCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApCi0JCQl0dzMyX2YoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKLQl9Ci19Ci0KLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0ZzNfZW5hYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgewotCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7Ci0KLQkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzIHwgQUNDRVNTX0VOQUJMRSk7Ci0JfQotfQotCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7Ci0JCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKLQotCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgJiB+QUNDRVNTX0VOQUJMRSk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCB0ZzNfYXBlX3NlbmRfZXZlbnQoc3RydWN0IHRnMyAqdHAsIHUzMiBldmVudCkKIHsKIAlpbnQgaTsKQEAgLTY4MjMsNyArNjk2MSw4IEBACiAJX190ZzNfc2V0X21hY19hZGRyKHRwLCAwKTsKIAogCS8qIE1UVSArIGV0aGVybmV0IGhlYWRlciArIEZDUyArIG9wdGlvbmFsIFZMQU4gdGFnICovCi0JdHczMihNQUNfUlhfTVRVX1NJWkUsIHRwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgOCk7CisJdHczMihNQUNfUlhfTVRVX1NJWkUsCisJICAgICB0cC0+ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOICsgVkxBTl9ITEVOKTsKIAogCS8qIFRoZSBzbG90IHRpbWUgaXMgY2hhbmdlZCBieSB0ZzNfc2V0dXBfcGh5IGlmIHdlCiAJICogcnVuIGF0IGdpZ2FiaXQgd2l0aCBoYWxmIGR1cGxleC4KQEAgLTgzODUsMTcgKzg1MjQsMTMgQEAKIAlyZXR1cm4gdHAtPm52cmFtX3NpemU7CiB9CiAKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKTsKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfbGUoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIF9fbGUzMiAqdmFsKTsKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfc3dhYihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpOwotCiBzdGF0aWMgaW50IHRnM19nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIAl1OCAgKnBkOwogCXUzMiBpLCBvZmZzZXQsIGxlbiwgYl9vZmZzZXQsIGJfY291bnQ7Ci0JX19sZTMyIHZhbDsKKwlfX2JlMzIgdmFsOwogCiAJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTg0MTQsNyArODU0OSw3IEBACiAJCQkvKiBpLmUuIG9mZnNldD0xIGxlbj0yICovCiAJCQliX2NvdW50ID0gbGVuOwogCQl9Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZ2YWwpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZ2YWwpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJbWVtY3B5KGRhdGEsICgoY2hhciopJnZhbCkgKyBiX29mZnNldCwgYl9jb3VudCk7CkBAIC04NDI2LDcgKzg1NjEsNyBAQAogCS8qIHJlYWQgYnl0ZXMgdXB0byB0aGUgbGFzdCA0IGJ5dGUgYm91bmRhcnkgKi8KIAlwZCA9ICZkYXRhW2VlcHJvbS0+bGVuXTsKIAlmb3IgKGkgPSAwOyBpIDwgKGxlbiAtIChsZW4gJiAzKSk7IGkgKz0gNCkgewotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0ICsgaSwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCArIGksICZ2YWwpOwogCQlpZiAocmV0KSB7CiAJCQllZXByb20tPmxlbiArPSBpOwogCQkJcmV0dXJuIHJldDsKQEAgLTg0NDAsNyArODU3NSw3IEBACiAJCXBkID0gJmRhdGFbZWVwcm9tLT5sZW5dOwogCQliX2NvdW50ID0gbGVuICYgMzsKIAkJYl9vZmZzZXQgPSBvZmZzZXQgKyBsZW4gLSBiX2NvdW50OwotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgYl9vZmZzZXQsICZ2YWwpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBiX29mZnNldCwgJnZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQltZW1jcHkocGQsICZ2YWwsIGJfY291bnQpOwpAQCAtODQ1Nyw3ICs4NTkyLDcgQEAKIAlpbnQgcmV0OwogCXUzMiBvZmZzZXQsIGxlbiwgYl9vZmZzZXQsIG9kZF9sZW47CiAJdTggKmJ1ZjsKLQlfX2xlMzIgc3RhcnQsIGVuZDsKKwlfX2JlMzIgc3RhcnQsIGVuZDsKIAogCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC04NDcwLDcgKzg2MDUsNyBAQAogCiAJaWYgKChiX29mZnNldCA9IChvZmZzZXQgJiAzKSkpIHsKIAkJLyogYWRqdXN0bWVudHMgdG8gc3RhcnQgb24gcmVxdWlyZWQgNCBieXRlIGJvdW5kYXJ5ICovCi0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZzdGFydCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldC1iX29mZnNldCwgJnN0YXJ0KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCWxlbiArPSBiX29mZnNldDsKQEAgLTg0ODQsNyArODYxOSw3IEBACiAJCS8qIGFkanVzdG1lbnRzIHRvIGVuZCBvbiByZXF1aXJlZCA0IGJ5dGUgYm91bmRhcnkgKi8KIAkJb2RkX2xlbiA9IDE7CiAJCWxlbiA9IChsZW4gKyAzKSAmIH4zOwotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0K2xlbi00LCAmZW5kKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0K2xlbi00LCAmZW5kKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtODU0Myw3ICs4Njc4LDcgQEAKIAkJY21kLT5kdXBsZXggPSB0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleDsKIAl9CiAJY21kLT5waHlfYWRkcmVzcyA9IFBIWV9BRERSOwotCWNtZC0+dHJhbnNjZWl2ZXIgPSAwOworCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCWNtZC0+YXV0b25lZyA9IHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnOwogCWNtZC0+bWF4dHhwa3QgPSAwOwogCWNtZC0+bWF4cnhwa3QgPSAwOwpAQCAtODU2MCwyNiArODY5NSw1OCBAQAogCQlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldCh0cC0+bWRpb19idXMtPnBoeV9tYXBbUEhZX0FERFJdLCBjbWQpOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpIHsKLQkJLyogVGhlc2UgYXJlIHRoZSBvbmx5IHZhbGlkIGFkdmVydGlzZW1lbnQgYml0cyBhbGxvd2VkLiAgKi8KLQkJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgotCQkgICAgKGNtZC0+YWR2ZXJ0aXNpbmcgJiB+KEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAotCQkJCQkgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIEFEVkVSVElTRURfQXV0b25lZyB8Ci0JCQkJCSAgQURWRVJUSVNFRF9GSUJSRSkpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8qIEZpYmVyIGNhbiBvbmx5IGRvIFNQRUVEXzEwMDAuICAqLwotCQllbHNlIGlmICgoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKSAmJgotCQkJIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDApKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JLyogQ29wcGVyIGNhbm5vdCBmb3JjZSBTUEVFRF8xMDAwLiAgKi8KLQl9IGVsc2UgaWYgKChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpICYmCi0JCSAgIChjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApKQorCWlmIChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUgJiYKKwkgICAgY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSBpZiAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgJiYKLQkJICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpKQorCisJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgJiYKKwkgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwgJiYKKwkgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQl1MzIgbWFzayA9IEFEVkVSVElTRURfQXV0b25lZyB8CisJCQkgICBBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCSAgIEFEVkVSVElTRURfQXN5bV9QYXVzZTsKKworCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSkKKwkJCW1hc2sgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKworCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpKQorCQkJbWFzayB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCUFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJCUFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEX1RQOworCQllbHNlCisJCQltYXNrIHw9IEFEVkVSVElTRURfRklCUkU7CisKKwkJaWYgKGNtZC0+YWR2ZXJ0aXNpbmcgJiB+bWFzaykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1hc2sgJj0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAorCQkJIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpOworCisJCWNtZC0+YWR2ZXJ0aXNpbmcgJj0gbWFzazsKKwl9IGVsc2UgeworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSB7CisJCQlpZiAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlpZiAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKKwkJCSAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAl0cC0+bGlua19jb25maWcuYXV0b25lZyA9IGNtZC0+YXV0b25lZzsKQEAgLTkwMjQsMTAgKzkxOTEsMTAgQEAKIHN0YXRpYyBpbnQgdGczX3Rlc3RfbnZyYW0oc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIGNzdW0sIG1hZ2ljOwotCV9fbGUzMiAqYnVmOworCV9fYmUzMiAqYnVmOwogCWludCBpLCBqLCBrLCBlcnIgPSAwLCBzaXplOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZtYWdpYykgIT0gMCkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZtYWdpYykgIT0gMCkKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAobWFnaWMgPT0gVEczX0VFUFJPTV9NQUdJQykKQEAgLTkwNjEsMTQgKzkyMjgsMTUgQEAKIAogCWVyciA9IC1FSU87CiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzaXplOyBpICs9IDQsIGorKykgewotCQlpZiAoKGVyciA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBpLCAmYnVmW2pdKSkgIT0gMCkKKwkJZXJyID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgaSwgJmJ1ZltqXSk7CisJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPCBzaXplKQogCQlnb3RvIG91dDsKIAogCS8qIFNlbGZib290IGZvcm1hdCAqLwotCW1hZ2ljID0gc3dhYjMyKGxlMzJfdG9fY3B1KGJ1ZlswXSkpOworCW1hZ2ljID0gYmUzMl90b19jcHUoYnVmWzBdKTsKIAlpZiAoKG1hZ2ljICYgVEczX0VFUFJPTV9NQUdJQ19GV19NU0spID09CiAJICAgIFRHM19FRVBST01fTUFHSUNfRlcpIHsKIAkJdTggKmJ1ZjggPSAodTggKikgYnVmLCBjc3VtOCA9IDA7CkBAIC05MDk3LDcgKzkyNjUsNyBAQAogCWlmICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0hXX01TSykgPT0KIAkgICAgVEczX0VFUFJPTV9NQUdJQ19IVykgewogCQl1OCBkYXRhW05WUkFNX1NFTEZCT09UX0RBVEFfU0laRV07Ci0JICAgICAgIAl1OCBwYXJpdHlbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKKwkJdTggcGFyaXR5W05WUkFNX1NFTEZCT09UX0RBVEFfU0laRV07CiAJCXU4ICpidWY4ID0gKHU4ICopIGJ1ZjsKIAogCQkvKiBTZXBhcmF0ZSB0aGUgcGFyaXR5IGJpdHMgYW5kIHRoZSBkYXRhIGJ5dGVzLiAgKi8KQEAgLTkxNDAsMTMgKzkzMDgsMTMgQEAKIAogCS8qIEJvb3RzdHJhcCBjaGVja3N1bSBhdCBvZmZzZXQgMHgxMCAqLwogCWNzdW0gPSBjYWxjX2NyYygodW5zaWduZWQgY2hhciAqKSBidWYsIDB4MTApOwotCWlmKGNzdW0gIT0gbGUzMl90b19jcHUoYnVmWzB4MTAvNF0pKQorCWlmIChjc3VtICE9IGJlMzJfdG9fY3B1KGJ1ZlsweDEwLzRdKSkKIAkJZ290byBvdXQ7CiAKIAkvKiBNYW51ZmFjdHVyaW5nIGJsb2NrIHN0YXJ0cyBhdCBvZmZzZXQgMHg3NCwgY2hlY2tzdW0gYXQgMHhmYyAqLwogCWNzdW0gPSBjYWxjX2NyYygodW5zaWduZWQgY2hhciAqKSAmYnVmWzB4NzQvNF0sIDB4ODgpOwotCWlmIChjc3VtICE9IGxlMzJfdG9fY3B1KGJ1ZlsweGZjLzRdKSkKLQkJIGdvdG8gb3V0OworCWlmIChjc3VtICE9IGJlMzJfdG9fY3B1KGJ1ZlsweGZjLzRdKSkKKwkJZ290byBvdXQ7CiAKIAllcnIgPSAwOwogCkBAIC05ODU1LDggKzEwMDIzLDEyIEBACiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJdGczX25ldGlmX3N0b3AodHApOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXRwLT52bGdycCA9IGdycDsKKwkJcmV0dXJuOworCX0KKworCXRnM19uZXRpZl9zdG9wKHRwKTsKIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCkBAIC05ODY1LDggKzEwMDM3LDcgQEAKIAkvKiBVcGRhdGUgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHIGJpdCBpbiBSWF9NT0RFIHJlZ2lzdGVyLiAqLwogCV9fdGczX3NldF9yeF9tb2RlKGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQl0ZzNfbmV0aWZfc3RhcnQodHApOworCXRnM19uZXRpZl9zdGFydCh0cCk7CiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogfQpAQCAtOTk3Myw3ICsxMDE0NCw3IEBACiAKIAl0cC0+bnZyYW1fc2l6ZSA9IEVFUFJPTV9DSElQX1NJWkU7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJm1hZ2ljKSAhPSAwKQogCQlyZXR1cm47CiAKIAlpZiAoKG1hZ2ljICE9IFRHM19FRVBST01fTUFHSUMpICYmCkBAIC05OTg5LDcgKzEwMTYwLDcgQEAKIAljdXJzaXplID0gMHgxMDsKIAogCXdoaWxlIChjdXJzaXplIDwgdHAtPm52cmFtX3NpemUpIHsKLQkJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIGN1cnNpemUsICZ2YWwpICE9IDApCisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgY3Vyc2l6ZSwgJnZhbCkgIT0gMCkKIAkJCXJldHVybjsKIAogCQlpZiAodmFsID09IG1hZ2ljKQpAQCAtMTAwMDUsNyArMTAxNzYsNyBAQAogewogCXUzMiB2YWw7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJnZhbCkgIT0gMCkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZ2YWwpICE9IDApCiAJCXJldHVybjsKIAogCS8qIFNlbGZib290IGZvcm1hdCAqLwpAQCAtMTAwMTYsNyArMTAxODcsMTggQEAKIAogCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHhmMCwgJnZhbCkgPT0gMCkgewogCQlpZiAodmFsICE9IDApIHsKLQkJCXRwLT5udnJhbV9zaXplID0gKHZhbCA+PiAxNikgKiAxMDI0OworCQkJLyogVGhpcyBpcyBjb25mdXNpbmcuICBXZSB3YW50IHRvIG9wZXJhdGUgb24gdGhlCisJCQkgKiAxNi1iaXQgdmFsdWUgYXQgb2Zmc2V0IDB4ZjIuICBUaGUgdGczX252cmFtX3JlYWQoKQorCQkJICogY2FsbCB3aWxsIHJlYWQgZnJvbSBOVlJBTSBhbmQgYnl0ZXN3YXAgdGhlIGRhdGEKKwkJCSAqIGFjY29yZGluZyB0byB0aGUgYnl0ZXN3YXBwaW5nIHNldHRpbmdzIGZvciBhbGwKKwkJCSAqIG90aGVyIHJlZ2lzdGVyIGFjY2Vzc2VzLiAgVGhpcyBlbnN1cmVzIHRoZSBkYXRhIHdlCisJCQkgKiB3YW50IHdpbGwgYWx3YXlzIHJlc2lkZSBpbiB0aGUgbG93ZXIgMTYtYml0cy4KKwkJCSAqIEhvd2V2ZXIsIHRoZSBkYXRhIGluIE5WUkFNIGlzIGluIExFIGZvcm1hdCwgd2hpY2gKKwkJCSAqIG1lYW5zIHRoZSBkYXRhIGZyb20gdGhlIE5WUkFNIHJlYWQgd2lsbCBhbHdheXMgYmUKKwkJCSAqIG9wcG9zaXRlIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBDUFUuICBUaGUgMTYtYml0CisJCQkgKiBieXRlc3dhcCB0aGVuIGJyaW5ncyB0aGUgZGF0YSB0byBDUFUgZW5kaWFubmVzcy4KKwkJCSAqLworCQkJdHAtPm52cmFtX3NpemUgPSBzd2FiMTYoKHUxNikodmFsICYgMHgwMDAwZmZmZikpICogMTAyNDsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTEwNDY3LDE0MSArMTA2NDksNiBAQAogCX0KIH0KIAotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20oc3RydWN0IHRnMyAqdHAsCi0JCQkJCXUzMiBvZmZzZXQsIHUzMiAqdmFsKQotewotCXUzMiB0bXA7Ci0JaW50IGk7Ci0KLQlpZiAob2Zmc2V0ID4gRUVQUk9NX0FERFJfQUREUl9NQVNLIHx8Ci0JICAgIChvZmZzZXQgJSA0KSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKSAmIH4oRUVQUk9NX0FERFJfQUREUl9NQVNLIHwKLQkJCQkJRUVQUk9NX0FERFJfREVWSURfTUFTSyB8Ci0JCQkJCUVFUFJPTV9BRERSX1JFQUQpOwotCXR3MzIoR1JDX0VFUFJPTV9BRERSLAotCSAgICAgdG1wIHwKLQkgICAgICgwIDw8IEVFUFJPTV9BRERSX0RFVklEX1NISUZUKSB8Ci0JICAgICAoKG9mZnNldCA8PCBFRVBST01fQUREUl9BRERSX1NISUZUKSAmCi0JICAgICAgRUVQUk9NX0FERFJfQUREUl9NQVNLKSB8Ci0JICAgICBFRVBST01fQUREUl9SRUFEIHwgRUVQUk9NX0FERFJfU1RBUlQpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewotCQl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUik7Ci0KLQkJaWYgKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0JaWYgKCEodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JKnZhbCA9IHRyMzIoR1JDX0VFUFJPTV9EQVRBKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBOVlJBTV9DTURfVElNRU9VVCAxMDAwMAotCi1zdGF0aWMgaW50IHRnM19udnJhbV9leGVjX2NtZChzdHJ1Y3QgdGczICp0cCwgdTMyIG52cmFtX2NtZCkKLXsKLQlpbnQgaTsKLQotCXR3MzIoTlZSQU1fQ01ELCBudnJhbV9jbWQpOwotCWZvciAoaSA9IDA7IGkgPCBOVlJBTV9DTURfVElNRU9VVDsgaSsrKSB7Ci0JCXVkZWxheSgxMCk7Ci0JCWlmICh0cjMyKE5WUkFNX0NNRCkgJiBOVlJBTV9DTURfRE9ORSkgewotCQkJdWRlbGF5KDEwKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChpID09IE5WUkFNX0NNRF9USU1FT1VUKSB7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHRnM19udnJhbV9waHlzX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQotewotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKLQkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKLQkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCi0KLQkJYWRkciA9ICgoYWRkciAvIHRwLT5udnJhbV9wYWdlc2l6ZSkgPDwKLQkJCUFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICsKLQkJICAgICAgIChhZGRyICUgdHAtPm52cmFtX3BhZ2VzaXplKTsKLQotCXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgdTMyIHRnM19udnJhbV9sb2dpY2FsX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQotewotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKLQkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKLQkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCi0KLQkJYWRkciA9ICgoYWRkciA+PiBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAqCi0JCQl0cC0+bnZyYW1fcGFnZXNpemUpICsKLQkJICAgICAgIChhZGRyICYgKCgxIDw8IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpIC0gMSkpOwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQotewotCWludCByZXQ7Ci0KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pKQotCQlyZXR1cm4gdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIHZhbCk7Ci0KLQlvZmZzZXQgPSB0ZzNfbnZyYW1fcGh5c19hZGRyKHRwLCBvZmZzZXQpOwotCi0JaWYgKG9mZnNldCA+IE5WUkFNX0FERFJfTVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IHRnM19udnJhbV9sb2NrKHRwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOwotCi0JdHczMihOVlJBTV9BRERSLCBvZmZzZXQpOwotCXJldCA9IHRnM19udnJhbV9leGVjX2NtZCh0cCwgTlZSQU1fQ01EX1JEIHwgTlZSQU1fQ01EX0dPIHwKLQkJTlZSQU1fQ01EX0ZJUlNUIHwgTlZSQU1fQ01EX0xBU1QgfCBOVlJBTV9DTURfRE9ORSk7Ci0KLQlpZiAocmV0ID09IDApCi0JCSp2YWwgPSBzd2FiMzIodHIzMihOVlJBTV9SRERBVEEpKTsKLQotCXRnM19kaXNhYmxlX252cmFtX2FjY2Vzcyh0cCk7Ci0KLQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfbGUoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIF9fbGUzMiAqdmFsKQotewotCXUzMiB2OwotCWludCByZXMgPSB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdik7Ci0JaWYgKCFyZXMpCi0JCSp2YWwgPSBjcHVfdG9fbGUzMih2KTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3N3YWIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQotewotCWludCBlcnI7Ci0JdTMyIHRtcDsKLQotCWVyciA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ0bXApOwotCSp2YWwgPSBzd2FiMzIodG1wKTsKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgaW50IHRnM19udnJhbV93cml0ZV9ibG9ja191c2luZ19lZXByb20oc3RydWN0IHRnMyAqdHAsCiAJCQkJICAgIHUzMiBvZmZzZXQsIHUzMiBsZW4sIHU4ICpidWYpCiB7CkBAIC0xMDYxMCwxMyArMTA2NTcsMTMgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkgewogCQl1MzIgYWRkcjsKLQkJX19sZTMyIGRhdGE7CisJCV9fYmUzMiBkYXRhOwogCiAJCWFkZHIgPSBvZmZzZXQgKyBpOwogCiAJCW1lbWNweSgmZGF0YSwgYnVmICsgaSwgNCk7CiAKLQkJdHczMihHUkNfRUVQUk9NX0RBVEEsIGxlMzJfdG9fY3B1KGRhdGEpKTsKKwkJdHczMihHUkNfRUVQUk9NX0RBVEEsIGJlMzJfdG9fY3B1KGRhdGEpKTsKIAogCQl2YWwgPSB0cjMyKEdSQ19FRVBST01fQUREUik7CiAJCXR3MzIoR1JDX0VFUFJPTV9BRERSLCB2YWwgfCBFRVBST01fQUREUl9DT01QTEVURSk7CkBAIC0xMDY2Niw4ICsxMDcxMyw5IEBACiAJCXBoeV9hZGRyID0gb2Zmc2V0ICYgfnBhZ2VtYXNrOwogCiAJCWZvciAoaiA9IDA7IGogPCBwYWdlc2l6ZTsgaiArPSA0KSB7Ci0JCQlpZiAoKHJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBwaHlfYWRkciArIGosCi0JCQkJCQkoX19sZTMyICopICh0bXAgKyBqKSkpKQorCQkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgcGh5X2FkZHIgKyBqLAorCQkJCQkJICAoX19iZTMyICopICh0bXAgKyBqKSk7CisJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXQpCkBAIC0xMDcxNCw3ICsxMDc2Miw3IEBACiAJCQlfX2JlMzIgZGF0YTsKIAogCQkJZGF0YSA9ICooKF9fYmUzMiAqKSAodG1wICsgaikpOwotCQkJLyogc3dhYjMyKGxlMzJfdG9fY3B1KGRhdGEpKSwgYWN0dWFsbHkgKi8KKwogCQkJdHczMihOVlJBTV9XUkRBVEEsIGJlMzJfdG9fY3B1KGRhdGEpKTsKIAogCQkJdHczMihOVlJBTV9BRERSLCBwaHlfYWRkciArIGopOwpAQCAtMTEzMDAsMjQgKzExMzQ4LDI1IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9wYXJ0bm8oc3RydWN0IHRnMyAqdHApCiB7Ci0JdW5zaWduZWQgY2hhciB2cGRfZGF0YVsyNTZdOworCXVuc2lnbmVkIGNoYXIgdnBkX2RhdGFbMjU2XTsgICAvKiBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLwogCXVuc2lnbmVkIGludCBpOwogCXUzMiBtYWdpYzsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweDAsICZtYWdpYykpCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweDAsICZtYWdpYykpCiAJCWdvdG8gb3V0X25vdF9mb3VuZDsKIAogCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz0gNCkgewogCQkJdTMyIHRtcDsKIAotCQkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweDEwMCArIGksICZ0bXApKQorCQkJLyogVGhlIGRhdGEgaXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgaW4gTlZSQU0uCisJCQkgKiBVc2UgdGhlIGJpZy1lbmRpYW4gcmVhZCByb3V0aW5lcyB0byBwcmVzZXJ2ZQorCQkJICogdGhlIGJ5dGUgb3JkZXIgYXMgaXQgZXhpc3RzIGluIE5WUkFNLgorCQkJICovCisJCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgMHgxMDAgKyBpLCAmdG1wKSkKIAkJCQlnb3RvIG91dF9ub3RfZm91bmQ7CiAKLQkJCXZwZF9kYXRhW2kgKyAwXSA9ICgodG1wID4+ICAwKSAmIDB4ZmYpOwotCQkJdnBkX2RhdGFbaSArIDFdID0gKCh0bXAgPj4gIDgpICYgMHhmZik7Ci0JCQl2cGRfZGF0YVtpICsgMl0gPSAoKHRtcCA+PiAxNikgJiAweGZmKTsKLQkJCXZwZF9kYXRhW2kgKyAzXSA9ICgodG1wID4+IDI0KSAmIDB4ZmYpOworCQkJbWVtY3B5KCZ2cGRfZGF0YVtpXSwgJnRtcCwgc2l6ZW9mKHRtcCkpOwogCQl9CiAJfSBlbHNlIHsKIAkJaW50IHZwZF9jYXA7CkBAIC0xMTM0Myw3ICsxMTM5Miw3IEBACiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIHZwZF9jYXAgKyBQQ0lfVlBEX0RBVEEsCiAJCQkJCSAgICAgICZ0bXApOwogCQkJdiA9IGNwdV90b19sZTMyKHRtcCk7Ci0JCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdiwgNCk7CisJCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdiwgc2l6ZW9mKHYpKTsKIAkJfQogCX0KIApAQCAtMTE0MDMsMTUgKzExNDUyLDc5IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQsICZ2YWwpIHx8CisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpIHx8CiAJICAgICh2YWwgJiAweGZjMDAwMDAwKSAhPSAweDBjMDAwMDAwIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDQsICZ2YWwpIHx8CisJICAgIHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA0LCAmdmFsKSB8fAogCSAgICB2YWwgIT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2JjX3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsLCBvZmZzZXQsIHN0YXJ0LCB2ZXJfb2Zmc2V0OworCWludCBpOworCWJvb2wgbmV3dmVyID0gZmFsc2U7CisKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDB4YywgJm9mZnNldCkgfHwKKwkgICAgdGczX252cmFtX3JlYWQodHAsIDB4NCwgJnN0YXJ0KSkKKwkJcmV0dXJuOworCisJb2Zmc2V0ID0gdGczX252cmFtX2xvZ2ljYWxfYWRkcih0cCwgb2Zmc2V0KTsKKworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKKwkJcmV0dXJuOworCisJaWYgKCh2YWwgJiAweGZjMDAwMDAwKSA9PSAweDBjMDAwMDAwKSB7CisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJnZhbCkpCisJCQlyZXR1cm47CisKKwkJaWYgKHZhbCA9PSAwKQorCQkJbmV3dmVyID0gdHJ1ZTsKKwl9CisKKwlpZiAobmV3dmVyKSB7CisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgOCwgJnZlcl9vZmZzZXQpKQorCQkJcmV0dXJuOworCisJCW9mZnNldCA9IG9mZnNldCArIHZlcl9vZmZzZXQgLSBzdGFydDsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpIHsKKwkJCV9fYmUzMiB2OworCQkJaWYgKHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCArIGksICZ2KSkKKwkJCQlyZXR1cm47CisKKwkJCW1lbWNweSh0cC0+ZndfdmVyICsgaSwgJnYsIHNpemVvZih2KSk7CisJCX0KKwl9IGVsc2UgeworCQl1MzIgbWFqb3IsIG1pbm9yOworCisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgVEczX05WTV9QVFJFVl9CQ1ZFUiwgJnZlcl9vZmZzZXQpKQorCQkJcmV0dXJuOworCisJCW1ham9yID0gKHZlcl9vZmZzZXQgJiBURzNfTlZNX0JDVkVSX01BSk1TSykgPj4KKwkJCVRHM19OVk1fQkNWRVJfTUFKU0ZUOworCQltaW5vciA9IHZlcl9vZmZzZXQgJiBURzNfTlZNX0JDVkVSX01JTk1TSzsKKwkJc25wcmludGYoJnRwLT5md192ZXJbMF0sIDMyLCAidiVkLiUwMmQiLCBtYWpvciwgbWlub3IpOworCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2h3c2JfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWwsIG1ham9yLCBtaW5vcjsKKworCS8qIFVzZSBuYXRpdmUgZW5kaWFuIHJlcHJlc2VudGF0aW9uICovCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBURzNfTlZNX0hXU0JfQ0ZHMSwgJnZhbCkpCisJCXJldHVybjsKKworCW1ham9yID0gKHZhbCAmIFRHM19OVk1fSFdTQl9DRkcxX01BSk1TSykgPj4KKwkJVEczX05WTV9IV1NCX0NGRzFfTUFKU0ZUOworCW1pbm9yID0gKHZhbCAmIFRHM19OVk1fSFdTQl9DRkcxX01JTk1TSykgPj4KKwkJVEczX05WTV9IV1NCX0NGRzFfTUlOU0ZUOworCisJc25wcmludGYoJnRwLT5md192ZXJbMF0sIDMyLCAic2IgdiVkLiUwMmQiLCBtYWpvciwgbWlub3IpOworfQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfc2JfdmVyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgdmFsKQogewogCXUzMiBvZmZzZXQsIG1ham9yLCBtaW5vciwgYnVpbGQ7CkBAIC0xMTQzNyw3ICsxMTU1MCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0LCAmdmFsKSkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkpCiAJCXJldHVybjsKIAogCWJ1aWxkID0gKHZhbCAmIFRHM19FRVBST01fU0JfRURIX0JMRF9NQVNLKSA+PgpAQCAtMTE0NTcsNDkgKzExNTcwLDE1IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX21nbXRmd192ZXIoc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIHZhbCwgb2Zmc2V0LCBzdGFydDsKLQl1MzIgdmVyX29mZnNldDsKLQlpbnQgaSwgYmNudDsKLQotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmdmFsKSkKLQkJcmV0dXJuOwotCi0JaWYgKHZhbCAhPSBURzNfRUVQUk9NX01BR0lDKSB7Ci0JCWlmICgodmFsICYgVEczX0VFUFJPTV9NQUdJQ19GV19NU0spID09IFRHM19FRVBST01fTUFHSUNfRlcpCi0JCQl0ZzNfcmVhZF9zYl92ZXIodHAsIHZhbCk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweGMsICZvZmZzZXQpIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4NCwgJnN0YXJ0KSkKLQkJcmV0dXJuOwotCi0Jb2Zmc2V0ID0gdGczX252cmFtX2xvZ2ljYWxfYWRkcih0cCwgb2Zmc2V0KTsKLQotCWlmICghdGczX2Z3X2ltZ19pc192YWxpZCh0cCwgb2Zmc2V0KSB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA4LCAmdmVyX29mZnNldCkpCi0JCXJldHVybjsKLQotCW9mZnNldCA9IG9mZnNldCArIHZlcl9vZmZzZXQgLSBzdGFydDsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gNCkgewotCQlfX2xlMzIgdjsKLQkJaWYgKHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQgKyBpLCAmdikpCi0JCQlyZXR1cm47Ci0KLQkJbWVtY3B5KHRwLT5md192ZXIgKyBpLCAmdiwgNCk7Ci0JfQotCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHx8Ci0JICAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkKLQkJcmV0dXJuOworCWludCBpLCB2bGVuOwogCiAJZm9yIChvZmZzZXQgPSBURzNfTlZNX0RJUl9TVEFSVDsKIAkgICAgIG9mZnNldCA8IFRHM19OVk1fRElSX0VORDsKIAkgICAgIG9mZnNldCArPSBURzNfTlZNX0RJUkVOVF9TSVpFKSB7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQsICZ2YWwpKQorCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkpCiAJCQlyZXR1cm47CiAKIAkJaWYgKCh2YWwgPj4gVEczX05WTV9ESVJUWVBFX1NISUZUKSA9PSBURzNfTlZNX0RJUlRZUEVfQVNGSU5JKQpAQCAtMTE1MTEsMzYgKzExNTkwLDg3IEBACiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCiAJCXN0YXJ0ID0gMHgwODAwMDAwMDsKLQllbHNlIGlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgLSA0LCAmc3RhcnQpKQorCWVsc2UgaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgLSA0LCAmc3RhcnQpKQogCQlyZXR1cm47CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgNCwgJm9mZnNldCkgfHwKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZvZmZzZXQpIHx8CiAJICAgICF0ZzNfZndfaW1nX2lzX3ZhbGlkKHRwLCBvZmZzZXQpIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDgsICZ2YWwpKQorCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgOCwgJnZhbCkpCiAJCXJldHVybjsKIAogCW9mZnNldCArPSB2YWwgLSBzdGFydDsKIAotCWJjbnQgPSBzdHJsZW4odHAtPmZ3X3Zlcik7CisJdmxlbiA9IHN0cmxlbih0cC0+ZndfdmVyKTsKIAotCXRwLT5md192ZXJbYmNudCsrXSA9ICcsJzsKLQl0cC0+ZndfdmVyW2JjbnQrK10gPSAnICc7CisJdHAtPmZ3X3Zlclt2bGVuKytdID0gJywnOworCXRwLT5md192ZXJbdmxlbisrXSA9ICcgJzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJX19sZTMyIHY7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0LCAmdikpCisJCV9fYmUzMiB2OworCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LCAmdikpCiAJCQlyZXR1cm47CiAKIAkJb2Zmc2V0ICs9IHNpemVvZih2KTsKIAotCQlpZiAoYmNudCA+IFRHM19WRVJfU0laRSAtIHNpemVvZih2KSkgewotCQkJbWVtY3B5KCZ0cC0+ZndfdmVyW2JjbnRdLCAmdiwgVEczX1ZFUl9TSVpFIC0gYmNudCk7CisJCWlmICh2bGVuID4gVEczX1ZFUl9TSVpFIC0gc2l6ZW9mKHYpKSB7CisJCQltZW1jcHkoJnRwLT5md192ZXJbdmxlbl0sICZ2LCBURzNfVkVSX1NJWkUgLSB2bGVuKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJbWVtY3B5KCZ0cC0+ZndfdmVyW2JjbnRdLCAmdiwgc2l6ZW9mKHYpKTsKLQkJYmNudCArPSBzaXplb2Yodik7CisJCW1lbWNweSgmdHAtPmZ3X3Zlclt2bGVuXSwgJnYsIHNpemVvZih2KSk7CisJCXZsZW4gKz0gc2l6ZW9mKHYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2Rhc2hfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCWludCB2bGVuOworCXUzMiBhcGVkYXRhOworCisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSB8fAorCSAgICAhKHRwLT50ZzNfZmxhZ3MgICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJCXJldHVybjsKKworCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9TRUdfU0lHKTsKKwlpZiAoYXBlZGF0YSAhPSBBUEVfU0VHX1NJR19NQUdJQykKKwkJcmV0dXJuOworCisJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX0ZXX1NUQVRVUyk7CisJaWYgKCEoYXBlZGF0YSAmIEFQRV9GV19TVEFUVVNfUkVBRFkpKQorCQlyZXR1cm47CisKKwlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfVkVSU0lPTik7CisKKwl2bGVuID0gc3RybGVuKHRwLT5md192ZXIpOworCisJc25wcmludGYoJnRwLT5md192ZXJbdmxlbl0sIFRHM19WRVJfU0laRSAtIHZsZW4sICIgREFTSCB2JWQuJWQuJWQuJWQiLAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9NQUpNU0spID4+IEFQRV9GV19WRVJTSU9OX01BSlNGVCwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fTUlOTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9NSU5TRlQsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX1JFVk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fUkVWU0ZULAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9CTERNU0spKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2Z3X3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsOworCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmdmFsKSkKKwkJcmV0dXJuOworCisJaWYgKHZhbCA9PSBURzNfRUVQUk9NX01BR0lDKQorCQl0ZzNfcmVhZF9iY192ZXIodHApOworCWVsc2UgaWYgKCh2YWwgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19GVykKKwkJdGczX3JlYWRfc2JfdmVyKHRwLCB2YWwpOworCWVsc2UgaWYgKCh2YWwgJiBURzNfRUVQUk9NX01BR0lDX0hXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19IVykKKwkJdGczX3JlYWRfaHdzYl92ZXIodHApOworCWVsc2UKKwkJcmV0dXJuOworCisJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHx8CisJICAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkKKwkJcmV0dXJuOworCisJdGczX3JlYWRfbWdtdGZ3X3Zlcih0cCk7CiAKIAl0cC0+ZndfdmVyW1RHM19WRVJfU0laRSAtIDFdID0gMDsKIH0KQEAgLTEyMzExLDE0ICsxMjQ0MSwxMCBAQAogCX0KIAlpZiAoIWFkZHJfb2spIHsKIAkJLyogTmV4dCwgdHJ5IE5WUkFNLiAqLwotCQlpZiAoIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgotCQkgICAgIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgNCwgJmxvKSkgewotCQkJZGV2LT5kZXZfYWRkclswXSA9ICgoaGkgPj4gMTYpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzFdID0gKChoaSA+PiAyNCkgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbMl0gPSAoKGxvID4+ICAwKSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkclszXSA9ICgobG8gPj4gIDgpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzRdID0gKChsbyA+PiAxNikgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbNV0gPSAoKGxvID4+IDI0KSAmIDB4ZmYpOworCQlpZiAoIXRnM19udnJhbV9yZWFkX2JlMzIodHAsIG1hY19vZmZzZXQgKyAwLCAmaGkpICYmCisJCSAgICAhdGczX252cmFtX3JlYWRfYmUzMih0cCwgbWFjX29mZnNldCArIDQsICZsbykpIHsKKwkJCW1lbWNweSgmZGV2LT5kZXZfYWRkclswXSwgKChjaGFyICopJmhpKSArIDIsIDIpOworCQkJbWVtY3B5KCZkZXYtPmRldl9hZGRyWzJdLCAoY2hhciAqKSZsbywgc2l6ZW9mKGxvKSk7CiAJCX0KIAkJLyogRmluYWxseSBqdXN0IGZldGNoIGl0IG91dCBvZiB0aGUgTUFDIGNvbnRyb2wgcmVncy4gKi8KIAkJZWxzZSB7CkBAIC0xMzE5OSw2ICsxMzMyNSw5IEBACiAJCX0KIAogCQl0ZzNfYXBlX2xvY2tfaW5pdCh0cCk7CisKKwkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKQorCQkJdGczX3JlYWRfZGFzaF92ZXIodHApOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDUwOGRlZjMuLmNiNGM2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0xNzE5LDYgKzE3MTksMTIgQEAKIAogI2RlZmluZSBURzNfT1RQX0RFRkFVTFQJCQkweDI4NmMxNjQwCiAKKy8qIEhhcmR3YXJlIFNlbGZib290IE5WUkFNIGxheW91dCAqLworI2RlZmluZSBURzNfTlZNX0hXU0JfQ0ZHMQkJMHgwMDAwMDAwNAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUFKTVNLCTB4ZjgwMDAwMDAKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01BSlNGVAkyNworI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUlOTVNLCTB4MDdjMDAwMDAKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01JTlNGVAkyMgogCiAjZGVmaW5lIFRHM19FRVBST01fTUFHSUMJCTB4NjY5OTU1YWEKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQ19GVwkJMHhhNTAwMDAwMApAQCAtMTczNyw2ICsxNzQzLDEwIEBACiAjZGVmaW5lIFRHM19OVk1fRElSRU5UX1NJWkUJCTB4YwogI2RlZmluZSBURzNfTlZNX0RJUlRZUEVfU0hJRlQJCTI0CiAjZGVmaW5lIFRHM19OVk1fRElSVFlQRV9BU0ZJTkkJCTEKKyNkZWZpbmUgVEczX05WTV9QVFJFVl9CQ1ZFUgkJMHg5NAorI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSk1TSwkJMHgwMDAwZmYwMAorI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSlNGVAkJOAorI2RlZmluZSBURzNfTlZNX0JDVkVSX01JTk1TSwkJMHgwMDAwMDBmZgogCiAjZGVmaW5lIFRHM19FRVBST01fU0JfRjFSMF9FREhfT0ZGCTB4MTAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVIyX0VESF9PRkYJMHgxNApAQCAtMTk2Nyw2ICsxOTc3LDE0IEBACiAvKiBBUEUgc2hhcmVkIG1lbW9yeS4gIEFjY2Vzc2libGUgdGhyb3VnaCBCQVIxICovCiAjZGVmaW5lIFRHM19BUEVfRldfU1RBVFVTCQkweDQwMGMKICNkZWZpbmUgIEFQRV9GV19TVEFUVVNfUkVBRFkJCSAweDAwMDAwMTAwCisjZGVmaW5lIFRHM19BUEVfRldfVkVSU0lPTgkJMHg0MDE4CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NQUpNU0sJCSAweGZmMDAwMDAwCisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NQUpTRlQJCSAyNAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUlOTVNLCQkgMHgwMGZmMDAwMAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUlOU0ZUCQkgMTYKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX1JFVk1TSwkJIDB4MDAwMGZmMDAKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX1JFVlNGVAkJIDgKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX0JMRE1TSwkJIDB4MDAwMDAwZmYKICNkZWZpbmUgVEczX0FQRV9IT1NUX1NFR19TSUcJCTB4NDIwMAogI2RlZmluZSAgQVBFX0hPU1RfU0VHX1NJR19NQUdJQwkJIDB4NDg0ZjUzNTQKICNkZWZpbmUgVEczX0FQRV9IT1NUX1NFR19MRU4JCTB4NDIwNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCmluZGV4IGIzOTdlODcuLmY5MmZlODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKQEAgLTEyMSwxMSArMTIxLDYgQEAKIAkJZ290byBlcnJfb3V0X3RyZGV2OwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdG1zMzgwdHJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCSAgZGV2LT5uYW1lLCBkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX291dF9yZWdpb247Ci0KIAlkZXYtPmJhc2VfYWRkcgk9IHBjaV9pb2FkZHI7CiAJZGV2LT5pcnEgCT0gcGNpX2lycV9saW5lOwogCWRldi0+ZG1hCT0gMDsKQEAgLTE0Miw3ICsxMzcsNyBAQAogCXJldCA9IHRtc2Rldl9pbml0KGRldiwgJnBkZXYtPmRldik7CiAJaWYgKHJldCkgewogCQlwcmludGsoIiVzOiB1bmFibGUgdG8gZ2V0IG1lbW9yeSBmb3IgZGV2LT5wcml2LlxuIiwgZGV2LT5uYW1lKTsKLQkJZ290byBlcnJfb3V0X2lycTsKKwkJZ290byBlcnJfb3V0X3JlZ2lvbjsKIAl9CiAKIAl0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xNTksMjAgKzE1NCwyNSBAQAogCiAJZGV2LT5uZXRkZXZfb3BzID0gJnRtczM4MHRyX25ldGRldl9vcHM7CiAKKwlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHRtczM4MHRyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkgIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vdXRfdG1zZGV2OworCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX291dF90bXNkZXY7CisJCWdvdG8gZXJyX291dF9pcnE7CiAJCiAJcmV0dXJuIDA7CiAKK2Vycl9vdXRfaXJxOgorCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKIGVycl9vdXRfdG1zZGV2OgogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl0bXNkZXZfdGVybShkZXYpOwotZXJyX291dF9pcnE6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwogZXJyX291dF9yZWdpb246CiAJcmVsZWFzZV9yZWdpb24ocGNpX2lvYWRkciwgVE1TX1BDSV9JT19FWFRFTlQpOwogZXJyX291dF90cmRldjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IDY0MzBhMmUuLmY5NDkxYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtNDc5LDcgKzQ3OSw3IEBACiAKICNpbmNsdWRlICJkZTR4NS5oIgogCi1zdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogCUtFUk5fSU5GTyAiZGU0eDUuYzpWMC41NDYgMjAwMS8wMi8yMiBkYXZpZXNAbWFuaWFjLnVsdHJhbmV0LmNvbVxuIjsKIAogI2RlZmluZSBjX2NoYXIgY29uc3QgY2hhcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDJlNWM5OTkuLmUyYzlkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCiAvKiBHbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBwcmludGVkX3ZlcnNpb247Ci1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogCUtFUk5fSU5GTyBEUlZfTkFNRSAiOiBEYXZpY29tIERNOXh4eCBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKIAlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCmluZGV4IDlmOTQ2ZDQuLmM4ZDIyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCkBAIC0xNDAsNiArMTQwLDcgQEAKICAgICAgICAgICAgICAgIC8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQgaXMgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwogICAgICAgICAgICAgICAgd2hpbGUgKCAhICh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzICYgY3B1X3RvX2xlMzIoRGVzY093bmVkKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgczMyIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOworCQkgICAgICAgc2hvcnQgcGt0X2xlbjsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFID09IHRwLT5jdXJfcngpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTEsOCArMTUyLDI4IEBACiAJCSAgICAgICBpZiAoKyt3b3JrX2RvbmUgPj0gYnVkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm90X2RvbmU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4MzgwMDAzMDApICE9IDB4MDMwMCkgeworCQkgICAgICAgLyoKKwkJCSogT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLgorCQkJKiAoTWF5IG5vdCBiZSBjb25zaWRlcmVkIHZhbGlkIHVudGlsIHdlIGhhdmUKKwkJCSogY2hlY2tlZCBzdGF0dXMgZm9yIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cykKKwkJCSovCisJCSAgICAgICBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKKworCQkgICAgICAgLyoKKwkJCSogTWF4aW11bSBwa3RfbGVuIGlzIDE1MTggKDE1MTQgKyB2bGFuIGhlYWRlcikKKwkJCSogQW55dGhpbmcgaGlnaGVyIHRoYW4gdGhpcyBpcyBhbHdheXMgaW52YWxpZAorCQkJKiByZWdhcmRsZXNzIG9mIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cworCQkJKi8KKworCQkgICAgICAgaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkJICAgICAgUnhEZXNjQ1JDRXJyb3IgfAorCQkJCSAgICAgIFJ4RGVzY0NvbGxpc2lvblNlZW4gfAorCQkJCSAgICAgIFJ4RGVzY1J1bnQgfAorCQkJCSAgICAgIFJ4RGVzY0Rlc2NFcnIgfAorCQkJCSAgICAgIFJ4V2hvbGVQa3QpKSAhPSBSeFdob2xlUGt0CisJCQkgICB8fCBwa3RfbGVuID4gMTUxOCkgeworCQkJICAgICAgIGlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJCQkgICAgICBSeFdob2xlUGt0KSkgIT0gUnhXaG9sZVBrdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweGZmZmYpICE9IDB4N2ZmZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHVsaXBfZGVidWcgPiAxKQpAQCAtMTYxLDMwICsxODIsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICYgUnhEZXNjRmF0YWxFcnIpIHsKKwkJCSAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwODkwKSB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCSAgICAgICBpZiAocGt0X2xlbiA+IDE1MTggfHwKKwkJCQkJICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQorCQkJCQkgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwNCkgdHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwMikgdHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDAwMDEpIHRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBrdF9sZW4gPiAxNTE4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbiwgcGt0X2xlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfbGVuID0gMTUxODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwa3RfbGVuIDwgdHVsaXBfcnhfY29weWJyZWFrCkBAIC0zNTYsMTQgKzM3MCwzNSBAQAogCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQgaXMgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwogCXdoaWxlICggISAodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyAmIGNwdV90b19sZTMyKERlc2NPd25lZCkpKSB7CiAJCXMzMiBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKKwkJc2hvcnQgcGt0X2xlbjsKIAogCQlpZiAodHVsaXBfZGVidWcgPiA1KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsCiAJCQkJICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKLQkJaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKLQkJCWlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CisKKwkJLyoKKwkJICBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguCisJCSAgKE1heSBub3QgYmUgY29uc2lkZXJlZCB2YWxpZCB1bnRpbCB3ZSBoYXZlCisJCSAgY2hlY2tlZCBzdGF0dXMgZm9yIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cykKKwkJKi8KKwkJcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CisJCS8qCisJCSAgTWF4aW11bSBwa3RfbGVuIGlzIDE1MTggKDE1MTQgKyB2bGFuIGhlYWRlcikKKwkJICBBbnl0aGluZyBoaWdoZXIgdGhhbiB0aGlzIGlzIGFsd2F5cyBpbnZhbGlkCisJCSAgcmVnYXJkbGVzcyBvZiBSeExlbmd0aE92ZXIyMDQ3IGJpdHMKKwkJKi8KKworCQlpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCSAgICAgICBSeERlc2NDUkNFcnJvciB8CisJCQkgICAgICAgUnhEZXNjQ29sbGlzaW9uU2VlbiB8CisJCQkgICAgICAgUnhEZXNjUnVudCB8CisJCQkgICAgICAgUnhEZXNjRGVzY0VyciB8CisJCQkgICAgICAgUnhXaG9sZVBrdCkpICAgICAgICAhPSBSeFdob2xlUGt0CisJCSAgICAgfHwgcGt0X2xlbiA+IDE1MTgpIHsKKwkJCWlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJICAgICBSeFdob2xlUGt0KSkgICAgICAgICAhPSBSeFdob2xlUGt0KSB7CiAJCQkJLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KIAkJCQlpZiAoKHN0YXR1cyAmIDB4ZmZmZikgIT0gMHg3ZmZmKSB7CiAJCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCkBAIC0zNzIsMzEgKzQwNywyMiBAQAogCQkJCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKIAkJCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQl9Ci0JCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFJ4RGVzY0ZhdGFsRXJyKSB7CisJCQl9IGVsc2UgewogCQkJCS8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCiAJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKIAkJCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKIAkJCQl0cC0+c3RhdHMucnhfZXJyb3JzKys7IC8qIGVuZCBvZiBhIHBhY2tldC4qLwotCQkJCWlmIChzdGF0dXMgJiAweDA4OTApIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJaWYgKHBrdF9sZW4gPiAxNTE4IHx8CisJCQkJICAgIChzdGF0dXMgJiBSeERlc2NSdW50KSkKKwkJCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDA0KSB0cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIDB4MDAwMikgdHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDAxKSB0cC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCS8qIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4gKi8KLQkJCXNob3J0IHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0JCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHBrdF9sZW4sIHBrdF9sZW4pOwotCQkJCXBrdF9sZW4gPSAxNTE4OwotCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQl9Ci0jZW5kaWYKLQogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAJCQkgICB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCiAJCQlpZiAocGt0X2xlbiA8IHR1bGlwX3J4X2NvcHlicmVhawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKaW5kZXggMTlhYmJjMy4uMGFmYTJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCkBAIC0yMDEsOCArMjAxLDM4IEBACiAJRGVzY1N0YXJ0UGt0ID0gMHgyMDAwMDAwMCwKIAlEZXNjRW5kUmluZyAgPSAweDAyMDAwMDAwLAogCURlc2NVc2VMaW5rICA9IDB4MDEwMDAwMDAsCi0JUnhEZXNjRmF0YWxFcnIgPSAweDAwODAwMCwKKworCS8qCisJICogRXJyb3Igc3VtbWFyeSBmbGFnIGlzIGxvZ2ljYWwgb3Igb2YgJ0NSQyBFcnJvcicsICdDb2xsaXNpb24gU2VlbicsCisJICogJ0ZyYW1lIFRvbyBMb25nJywgJ1J1bnQnIGFuZCAnRGVzY3JpcHRvciBFcnJvcicgZmxhZ3MgZ2VuZXJhdGVkCisJICogd2l0aGluIHR1bGlwIGNoaXAuCisJICovCisJUnhEZXNjRXJyb3JTdW1tYXJ5ID0gMHg4MDAwLAorCVJ4RGVzY0NSQ0Vycm9yID0gMHgwMDAyLAorCVJ4RGVzY0NvbGxpc2lvblNlZW4gPSAweDAwNDAsCisKKwkvKgorCSAqICdGcmFtZSBUb28gTG9uZycgZmxhZyBpcyBzZXQgaWYgcGFja2V0IGxlbmd0aCBpbmNsdWRpbmcgQ1JDIGV4Y2VlZHMKKwkgKiAxNTE4LiAgSG93ZXZlciwgYSBmdWxsIHNpemVkIFZMQU4gdGFnZ2VkIGZyYW1lIGlzIDE1MjIgYnl0ZXMKKwkgKiBpbmNsdWRpbmcgQ1JDLgorCSAqCisJICogVGhlIHR1bGlwIGNoaXAgZG9lcyBub3QgYmxvY2sgb3ZlcnNpemVkIGZyYW1lcywgYW5kIGlmIHRoaXMgZmxhZyBpcworCSAqIHNldCBvbiBhIHJlY2VpdmUgZGVzY3JpcHRvciBpdCBkb2VzIG5vdCBpbmRpY2F0ZSB0aGUgZnJhbWUgaGFzIGJlZW4KKwkgKiB0cnVuY2F0ZWQuICBUaGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGFsc28gaW5jbHVkZXMgdGhlIGFjdHVhbCBsZW5ndGguCisJICogVGhlcmVmb3JlIHdlIGNhbiBzYWZldHkgaWdub3JlIHRoaXMgZmxhZyBhbmQgY2hlY2sgdGhlIGxlbmd0aAorCSAqIG91cnNlbHZlcy4KKwkgKi8KKwlSeERlc2NGcmFtZVRvb0xvbmcgPSAweDAwODAsCisJUnhEZXNjUnVudCA9IDB4MDgwMCwKKwlSeERlc2NEZXNjRXJyID0gMHg0MDAwLAogCVJ4V2hvbGVQa3QgICA9IDB4MDAwMDAzMDAsCisJLyoKKwkgKiBUb3AgdGhyZWUgYml0cyBvZiAxNCBiaXQgZnJhbWUgbGVuZ3RoIChzdGF0dXMgYml0cyAyNy0yOSkgc2hvdWxkCisJICogbmV2ZXIgYmUgc2V0IGFzIHRoYXQgd291bGQgbWFrZSBmcmFtZSBvdmVyIDIwNDcgYnl0ZXMuIFRoZSBSZWNlaXZlCisJICogV2F0Y2hkb2cgZmxhZyAoYml0IDQpIG1heSBpbmRpY2F0ZSB0aGUgbGVuZ3RoIGlzIG92ZXIgMjA0OCBhbmQgdGhlCisJICogbGVuZ3RoIGZpZWxkIGlzIGludmFsaWQuCisJICovCisJUnhMZW5ndGhPdmVyMjA0NyA9IDB4MzgwMDAwMTAKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCmluZGV4IGJlZTc1ZmEuLjJhYmI1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKQEAgLTI1NSw2ICsyNTUsNyBAQAogCiBzdGF0aWMgdm9pZCB0dWxpcF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgdHVsaXBfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgdHVsaXBfZnJlZV9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTUwMiwxNiArNTAzLDIxIEBACiB7CiAJaW50IHJldHZhbDsKIAotCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0dWxpcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpKQotCQlyZXR1cm4gcmV0dmFsOwotCiAJdHVsaXBfaW5pdF9yaW5nIChkZXYpOwogCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0dWxpcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmcmVlX3Jpbmc7CisKIAl0dWxpcF91cCAoZGV2KTsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlIChkZXYpOwogCiAJcmV0dXJuIDA7CisKK2ZyZWVfcmluZzoKKwl0dWxpcF9mcmVlX3JpbmcgKGRldik7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC03NjgsMjMgKzc3NCwxMSBAQAogCXR1bGlwX3NldF9wb3dlcl9zdGF0ZSAodHAsIDAsIDEpOwogfQogCi0KLXN0YXRpYyBpbnQgdHVsaXBfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0dWxpcF9mcmVlX3JpbmcgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5iYXNlX2FkZHI7CiAJaW50IGk7CiAKLQluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOwotCi0JdHVsaXBfZG93biAoZGV2KTsKLQotCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUyLjJ4LlxuIiwKLQkJCWRldi0+bmFtZSwgaW9yZWFkMzIgKGlvYWRkciArIENTUjUpKTsKLQotCWZyZWVfaXJxIChkZXYtPmlycSwgZGV2KTsKLQogCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRwLT5yeF9idWZmZXJzW2ldLnNrYjsKQEAgLTgwMyw2ICs3OTcsNyBAQAogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJfQogCX0KKwogCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHAtPnR4X2J1ZmZlcnNbaV0uc2tiOwogCkBAIC04MTQsNiArODA5LDI0IEBACiAJCXRwLT50eF9idWZmZXJzW2ldLnNrYiA9IE5VTEw7CiAJCXRwLT50eF9idWZmZXJzW2ldLm1hcHBpbmcgPSAwOwogCX0KK30KKworc3RhdGljIGludCB0dWxpcF9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPmJhc2VfYWRkcjsKKworCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CisKKwl0dWxpcF9kb3duIChkZXYpOworCisJaWYgKHR1bGlwX2RlYnVnID4gMSkKKwkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLAorCQkJZGV2LT5uYW1lLCBpb3JlYWQzMiAoaW9hZGRyICsgQ1NSNSkpOworCisJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOworCisJdHVsaXBfZnJlZV9yaW5nIChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKaW5kZXggMDMwZTAyZS4uYzIyN2RiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAJS0VSTl9JTkZPIERSVl9OQU1FICI6IFVMaSBNNTI2MS9NNTI2MyBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKIAlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCA0MjZiN2M3Li5jNjFhMDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTEzOSw5ICsxMzksMTAgQEAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4qLwogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICgyLjQgcG9ydCkgIiBEUlZfUkVMREFURSAiICBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgotS0VSTl9JTkZPICIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZHJpdmVycy5odG1sXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgKDIuNCBwb3J0KSAiCisJRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKKwlLRVJOX0lORk8gIiAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9kcml2ZXJzLmh0bWxcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIldpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24tZmlybXdhcmUuaCBiL2RyaXZlcnMvbmV0L3R5cGhvb24tZmlybXdhcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyZDY5ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgb2YgdGhlIDNjOTkwaW1nLmgKLSAqIG1pY3JvY29kZSBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIFRoZSBuYW1lIG9mIDNDb20gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDNDT00gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFBVUkNIQVNFIE9SIFVTRSBPRiBUSEUgM2M5OTBpbWcuaAotICogTUlDUk9DT0RFIFNPRlRXQVJFIFdJTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQotICogSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKLSAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQotICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgotICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKLSAqLwotCi0gLyogdmVyIDAzLjAwMS4wMDggKi8KLXN0YXRpYyBjb25zdCB1OCB0eXBob29uX2Zpcm13YXJlX2ltYWdlW10gPSB7Ci0weDU0LCAweDU5LCAweDUwLCAweDQ4LCAweDRmLCAweDRmLCAweDRlLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAotMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhjYiwgMHg5OSwgMHhiMSwgMHhkNCwKLTB4NGMsIDB4YjgsIDB4ZDAsIDB4NGIsIDB4MzIsIDB4MDIsIDB4ZDQsIDB4ZWUsIDB4NzMsIDB4N2UsIDB4MGIsIDB4MTMsCi0weDliLCAweGMwLCAweGFlLCAweGY0LCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweGU4LCAweGZjLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgzOSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhlYSwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZWEsCi0weDAxLCAweDAwLCAweDAwLCAweGVhLCAweDMyLCAweDAyLCAweDAwLCAweGVhLCAweGM1LCAweDE0LCAweDAwLCAweGVhLAotMHgwNywgMHgwMCwgMHgyZCwgMHhlOSwgMHgwZSwgMHgwMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHgwZiwgMHhlMSwKLTB4ZDAsIDB4MjAsIDB4OWYsIDB4ZTUsIDB4MTIsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDAxLCAweDAwLCAweDgwLCAweGUwLCAweDA0LCAweDIwLCAweDgxLCAweGU0LCAweDAxLCAweDAwLCAweDUwLCAweGUxLAotMHhmYywgMHhmZiwgMHhmZiwgMHgxYSwgMHgwZSwgMHhmMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHhhMCwgMHhhMCwgMHhlMSwKLTB4MGUsIDB4YjAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4YTgsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDgxLCAweGU1LCAweGE0LCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDgxLCAweGU1LAotMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMywKLTB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4ZDcsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDg4LCAweGQwLCAweDlmLCAweGU1LCAweGRiLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg3YywgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkMiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4NzQsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZDEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDZjLCAweGQwLCAweDlmLCAweGU1LCAweDliLCAweDE0LCAweDAwLCAweGViLCAweGQzLCAweDAwLCAweGEwLCAweGUzLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHg2MCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHg2MCwgMHgwMCwgMHg5ZiwgMHhlNSwKLTB4NjAsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4NjAsIDB4MjAsIDB4OWYsIDB4ZTUsIDB4ZGIsIDB4ZmYsIDB4ZmYsIDB4ZWIsCi0weDVjLCAweDAwLCAweDlmLCAweGU1LCAweDVjLCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweGEwLCAweGUzLAotMHhkNywgMHhmZiwgMHhmZiwgMHhlYiwgMHg1NCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg1NCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4ZDQsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4MGEsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4MGIsIDB4ZjAsIDB4YTAsIDB4ZTEsCi0weGQzLCAweDEwLCAweGEwLCAweGUzLCAweDAxLCAweGYwLCAweDIxLCAweGUxLCAweGQ0LCAweGZmLCAweGZmLCAweGViLAotMHgzYywgMHhhMCwgMHg5ZiwgMHhlNSwgMHgxYSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhjNiwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MTUsIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4MGMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MTAsIDB4MDAsCi0weDNjLCAweDM4LCAweDAwLCAweDgwLCAweGZjLCAweDM3LCAweDAwLCAweDgwLCAweGZjLCAweDNmLCAweDAwLCAweDgwLAotMHg3YywgMHgzNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwKLTB4YWQsIDB4ZGUsIDB4YWQsIDB4ZGUsIDB4YjAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4YWIsIDB4MjAsIDB4NDAsCi0weDQ4LCAweDI5LCAweDAwLCAweDAwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweGJkLCAweGJhLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDU4LCAweDU3LCAweDAwLCAweDAwLCAweDg2LCAweDRiLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGZmLCAweGZmLAotMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMiwgMHg0ZCwgMHgwMCwgMHgyNCwgMHgyOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4MWUsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MTAsIDB4NDksIDB4MDQsIDB4ZjAsIDB4N2IsIDB4ZmQsIDB4MjksIDB4NjgsCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweDI4LCAweDE1LCAweGQwLCAweDM4LCAweDAxLCAweDBkLCAweDQ5LAotMHg0MCwgMHgxOCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg0MSwgMHg2YiwgMHg4MCwgMHgyOSwKLTB4MGMsIDB4ZDIsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsIDB4MjgsIDB4NjgsIDB4YzEsIDB4NjksIDB4YzAsIDB4NDYsCi0weDI5LCAweDYwLCAweDM5LCAweDA3LCAweDQxLCAweDYwLCAweDA0LCAweDYyLCAweGM3LCAweDYyLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMCwgMHgxYywgMHhmYSwgMHhlNywgMHhlOCwgMHgxNywgMHgwMCwgMHg4MCwKLTB4ZWUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDksIDB4MGEsIDB4NjgsCi0weGMwLCAweDQ2LCAweGMyLCAweDYxLCAweDA4LCAweDYwLCAweDcwLCAweDQ3LAotMHhlOCwgMHgxNywgMHgwMCwgMHg4MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTEsCi0weGMwLCAweDEwLCAweDgxLCAweGUzLCAweDAxLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwKLTB4YzAsIDB4MDAsIDB4ODAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDAwLCAweDAwLCAweDBmLCAweGUxLCAweGMwLCAweDAwLCAweGMwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg0MCwgMHgwMCwgMHg4MCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsCi0weDgwLCAweDAwLCAweDEwLCAweGUzLCAweDgwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHg1MCwgMHhlMywKLTB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4MTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweGUzLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg5MSwgMHgwMCwgMHgwMCwgMHhlMCwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDEsIDB4MjAsIDB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTAsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweGI1LCAweDA4LCAweDRmLCAweDY0LCAweDI4LCAweDA0LCAweGQzLAotMHg2NCwgMHgyMCwgMHgzOCwgMHg2MywgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHgwMywgMHhlMCwgMHgzOCwgMHg2MywKLTB4MDQsIDB4NDksIDB4MDUsIDB4ZjAsIDB4MDEsIDB4ZmIsIDB4NzgsIDB4NjMsIDB4YjgsIDB4NjMsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDg4LCAweDEzLCAweDAwLCAweDAwLAotMHg4MCwgMHhiNCwgMHgxMCwgMHg0YiwgMHgwMCwgMHgyMiwgMHgxZiwgMHg2YiwgMHg2NCwgMHgyZiwgMHgwMywgMHhkMiwKLTB4MDksIDB4NjgsIDB4MDksIDB4NjgsIDB4NDksIDB4MDgsIDB4MDIsIDB4ZDIsIDB4MTAsIDB4MWMsIDB4ODAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDE5LCAweDFjLCAweGRiLCAweDZiLCAweDRmLCAweDZiLCAweGJiLCAweDQyLCAweDA1LCAweGQyLAotMHg0MCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxOCwgMHgxOCwgMHhjOCwgMHg2MywgMHhmMSwgMHhlNywKLTB4NDEsIDB4NjgsIDB4MDUsIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjAsIDB4MDQsIDB4NDgsIDB4YzEsIDB4NmIsCi0weDAxLCAweDMxLCAweGMxLCAweDYzLCAweDAyLCAweDIwLCAweGU4LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MTUsIDB4NGMsIDB4MDAsIDB4MjAsIDB4MjEsIDB4NmIsIDB4NjQsIDB4MjksIDB4MGIsIDB4ZDIsIDB4YjksIDB4NmUsCi0weDQ5LCAweDA4LCAweDA4LCAweGQzLCAweDIxLCAweDZjLCAweGEyLCAweDZiLCAweDkxLCAweDQyLCAweDA3LCAweGQyLAotMHhmYSwgMHgxZCwgMHgzOSwgMHgzMiwgMHg1MiwgMHg4YiwgMHg4OSwgMHgxOCwgMHgyMSwgMHg2NCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzgsIDB4NmEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjIsCi0weDM4LCAweDZiLCAweDAyLCAweGYwLCAweDJkLCAweGZlLCAweDM4LCAweDFjLCAweDAyLCAweGYwLCAweGU4LCAweGZhLAotMHgwMSwgMHgyMCwgMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwgMHhlMSwgMHgxOCwgMHhjOCwgMHg3MywgMHgwNSwgMHg0OSwKLTB4MGEsIDB4NmMsIDB4MTIsIDB4MTgsIDB4MGEsIDB4NjQsIDB4MDQsIDB4NDksIDB4OGEsIDB4NmQsIDB4MTIsIDB4MTgsCi0weDhhLCAweDY1LCAweGU0LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgwYSwgMHg0OCwgMHhjMCwgMHg2ZCwgMHgwMiwgMHgyMywKLTB4MTgsIDB4NDAsIDB4MDksIDB4NGEsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4ZDEsIDB4NjMsCi0weDExLCAweDY0LCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDA2LCAweDQ4LCAweDA3LCAweDY4LCAweDdiLCAweDFjLAotMHgwMywgMHg2MCwgMHgwYSwgMHgyZiwgMHhmNywgMHhkMywgMHgwMSwgMHg2MCwgMHhmMywgMHhlNywgMHgwMCwgMHgwMCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDAwLCAweDBjLCAweDEwLCAweDE4LCAweDBhLCAweDA0LAotMHgxMiwgMHgwYywgMHgwOSwgMHgwYywgMHg1MSwgMHgxOCwgMHgwOCwgMHgxOCwgMHgwMSwgMHgwYywgMHgwNSwgMHhkMCwKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDAsIDB4MGMsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MGMsIDB4ZjksIDB4ZDEsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LCAweDAwLCAweDIyLCAweDAwLCAweDI5LAotMHgxOCwgMHhkMCwgMHg0ZiwgMHgwOCwgMHg3YiwgMHgxZSwgMHgwMCwgMHgyZiwKLTB4MDYsIDB4ZDAsIDB4MDcsIDB4ODgsIDB4YmEsIDB4MTgsIDB4MDIsIDB4MzAsIDB4MWYsIDB4MWMsIDB4MDEsIDB4M2IsCi0weDAwLCAweDJmLCAweGY4LCAweGQxLCAweDQ5LCAweDA4LCAweDAzLCAweGQzLCAweDAwLCAweDg4LCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHg4MiwgMHgxOCwgMHgxMCwgMHgwYywgMHgwNSwgMHhkMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4MTEsIDB4MGMsIDB4NDIsIDB4MTgsIDB4MTAsIDB4MGMsIDB4ZjksIDB4ZDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDgzLCAweDg5LCAweGM3LCAweDg5LCAweGZiLCAweDE4LAotMHgwNywgMHg4YSwgMHhmYiwgMHgxOCwgMHg0NywgMHg4YSwgMHhmYiwgMHgxOCwgMHg0MCwgMHg3YSwgMHgwMCwgMHgwMiwKLTB4YzcsIDB4MTgsIDB4MzgsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MzgsIDB4MDQsIDB4MDAsIDB4MGMsIDB4M2IsIDB4MGMsCi0weGM3LCAweDE4LCAweDM4LCAweDBjLCAweGY5LCAweGQxLCAweDA4LCAweDFjLCAweDExLCAweDFjLCAweGZmLCAweGY3LAotMHhjOCwgMHhmZiwgMHgwMSwgMHgxYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhiMCwgMHhmZiwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4MDIsIDB4MjMsIDB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDBmLCAweGQwLCAweDBhLCAweDRhLCAweDkzLCAweDY5LCAweDAxLCAweDMzLAotMHg5MywgMHg2MSwgMHgwYSwgMHg2OCwgMHg4YiwgMHg2OCwgMHg5YSwgMHgxOCwgMHgwMCwgMHg2OCwgMHgxYywgMHgxOCwKLTB4NTcsIDB4ODEsIDB4MDksIDB4NjksIDB4MTAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YWMsIDB4ZmYsIDB4YzAsIDB4NDMsCi0weDYwLCAweDgxLCAweDM4LCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgyMywgMHg4MiwgMHg2OCwgMHgxYSwgMHg0MCwKLTB4MDAsIDB4MjcsIDB4MDAsIDB4MmEsIDB4MTEsIDB4ZDAsIDB4NGEsIDB4NjgsIDB4NTIsIDB4MDksIDB4MGUsIDB4ZDMsCi0weDA5LCAweDRhLCAweDEzLCAweDZhLCAweDAxLCAweDMzLCAweDEzLCAweDYyLCAweGNiLCAweDY4LCAweDAyLCAweDY4LAotMHg5YywgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzYSwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwKLTB4MDAsIDB4ZjAsIDB4MmUsIDB4ZjgsIDB4MjAsIDB4ODIsIDB4MzgsIDB4MWMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDgwLCAweDIzLAotMHg4MiwgMHg2OCwgMHgxYSwgMHg0MCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyYSwgMHgxNSwgMHhkMCwgMHg0YSwgMHg2OCwKLTB4OTIsIDB4MDksIDB4MTIsIDB4ZDMsIDB4MGIsIDB4NGEsIDB4ZDMsIDB4NjksIDB4MDEsIDB4MzMsIDB4ZDMsIDB4NjEsCi0weGNiLCAweDY4LCAweDAyLCAweDY4LCAweDlmLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDNhLAotMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwMCwgMHhkMSwKLTB4MDQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZjgsIDB4ODAsIDB4MjAsIDB4MWMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHhiMCwgMHhiNSwgMHgxNCwgMHgxYywgMHgwNSwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHg2OSwgMHhiOSwgMHg2OCwKLTB4NDEsIDB4MTgsIDB4MzgsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NTMsIDB4ZmYsIDB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDM5LCAweGZmLCAweDA0LCAweDFjLCAweGI4LCAweDY4LAotMHg3OSwgMHg2OSwgMHg0MCwgMHgxOCwgMHg2OSwgMHg2OCwgMHg4OCwgMHg0MiwgMHgwYywgMHhkMiwgMHgyYSwgMHg2OCwKLTB4MTIsIDB4MTgsIDB4MDksIDB4MWEsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDUsIDB4ZjksIDB4YzAsIDB4NDMsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDI2LCAweGZmLCAweDA0LCAweDFjLAotMHhlMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NmIsIDB4YzAsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4YjgsIDB4NmEsCi0weGY5LCAweDZiLCAweDQwLCAweDE4LCAweDc5LCAweDZjLCAweDAwLCAweGYwLCAweGVkLCAweGY4LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwYSwgMHg0OCwgMHgwNywgMHhkMCwgMHgyMCwgMHgyMywgMHhiOSwgMHg2OSwKLTB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjMsIDB4MDcsIDB4ZTAsCi0weGZmLCAweDIzLCAweDAxLCAweDMzLCAweGI5LCAweDY5LCAweDE5LCAweDQzLCAweGI5LCAweDYxLCAweDQxLCAweDZhLAotMHgwMSwgMHgzMSwgMHg0MSwgMHg2MiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NmIsIDB4NDEsIDB4MDksCi0weDFjLCAweGQzLCAweGMwLCAweDA4LCAweDFhLCAweGQzLCAweGY4LCAweDFkLCAweDM5LCAweDMwLCAweDAwLCAweDdiLAotMHgwNiwgMHgyOCwgMHgxNSwgMHhkMSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg1MywgMHhmOCwgMHgwMSwgMHgxYywKLTB4MGEsIDB4NDgsIDB4MDcsIDB4ZDAsIDB4NDAsIDB4MjMsIDB4YjksIDB4NjksCi0weDE5LCAweDQzLCAweGI5LCAweDYxLCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLCAweDA3LCAweGUwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHhiOSwgMHg2OSwgMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHhjMSwgMHg2YSwKLTB4MDEsIDB4MzEsIDB4YzEsIDB4NjIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweDgxLCAweDA5LAotMHgyYywgMHhkMywgMHhjMCwgMHgwOCwgMHgyYSwgMHhkMywgMHhmOCwgMHgxZCwgMHgzOSwgMHgzMCwgMHgwMCwgMHg3YiwKLTB4MTEsIDB4MjgsIDB4MjUsIDB4ZDEsIDB4YjgsIDB4NmEsIDB4MzksIDB4NmMsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDA2LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDA1LCAweDA0LCAweDJkLCAweDBjLAotMHgwZiwgMHg0YywgMHgxMSwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxZiwgMHhmOCwgMHgwMCwgMHgyOCwKLTB4MGMsIDB4ZDAsIDB4YTgsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4MGMsIDB4NGIsIDB4OTgsIDB4NDIsIDB4MDcsIDB4ZDAsCi0weDgwLCAweDIzLCAweGI4LCAweDY5LCAweDE4LCAweDQzLCAweGI4LCAweDYxLCAweDYwLCAweDZiLCAweDAxLCAweDMwLAotMHg2MCwgMHg2MywgMHgwNywgMHhlMCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywKLTB4YjgsIDB4NjEsIDB4YTAsIDB4NmEsIDB4MDEsIDB4MzAsIDB4YTAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4YjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHhmMCwgMHhiNSwgMHhmZiwgMHhiMCwgMHg5OSwgMHhiMCwgMHgwNCwgMHgxYywgMHhlMCwgMHg2YiwgMHg2MSwgMHg2YywKLTB4MDksIDB4MTgsIDB4MDMsIDB4YWEsIDB4ODUsIDB4MTgsIDB4YTMsIDB4NmEsIDB4MDAsIDB4MjAsIDB4OGEsIDB4MDgsCi0weDAxLCAweDMyLCAweDk3LCAweDkyLCAweDA3LCAweGQwLCAweDgyLCAweDAwLCAweDlmLCAweDU4LCAweDAzLCAweGFlLAotMHhiNywgMHg1MCwgMHg5NywgMHg5YSwgMHgwMSwgMHgzMCwgMHg4MiwgMHg0MiwgMHhmNywgMHhkOCwgMHg2MCwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDQsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDAyLCAweDkwLCAweDAyLCAweGFmLCAweDNmLCAweDg4LCAweDAzLCAweGE4LCAweGZmLCAweGY3LCAweDg3LCAweGZlLAotMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg2ZCwgMHhmZSwKLTB4MDcsIDB4MWMsIDB4ZTAsIDB4NmIsIDB4YTEsIDB4NmMsIDB4NDAsIDB4MTgsIDB4NjEsIDB4NmEsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDA4LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDAxLCAweDkxLAotMHgwMSwgMHhhOSwgMHgwOSwgMHg4OCwgMHgwMSwgMHgzMSwgMHg4OCwgMHg0MiwgMHgwYywgMHhkMiwgMHhhMiwgMHg2YSwKLTB4MTIsIDB4MTgsIDB4MDksIDB4MWEsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MmYsIDB4ZjgsIDB4YzAsIDB4NDMsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDUwLCAweGZlLCAweDA3LCAweDFjLAotMHhhOCwgMHg4OSwgMHhlOSwgMHg4OSwgMHgwOCwgMHgxOCwgMHgyOSwgMHg4YSwgMHgwOCwgMHgxOCwgMHg2OSwgMHg4YSwKLTB4MDgsIDB4MTgsIDB4NjksIDB4N2EsIDB4MDksIDB4MDIsIDB4MDgsIDB4MTgsIDB4YTEsIDB4NmMsIDB4NjIsIDB4NmMsCi0weDg5LCAweDFhLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDExLCAweDAyLCAweDEyLCAweDBhLCAweDExLCAweDQzLAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOSwgMHgxOCwgMHgwOCwgMHgwYywgMHgwNSwgMHhkMCwgMHgwOCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDksIDB4MGMsIDB4NDEsIDB4MTgsIDB4MDgsIDB4MGMsIDB4ZjksIDB4ZDEsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDJmLCAweGZlLCAweGMwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDdmLCAweGIwLAotMHgxOSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhiMCwgMHhiNCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4MjksIDB4MmUsIDB4ZDAsIDB4ODMsIDB4MDcsIDB4OWIsIDB4MGYsIDB4ZGMsIDB4MDAsIDB4NDcsIDB4MTgsCi0weDA0LCAweDI1LCAweGVmLCAweDFiLCAweGJmLCAweDA3LCAweGJmLCAweDBmLCAweGZmLCAweDAwLCAweDgwLCAweDA4LAotMHg4MCwgMHgwMCwgMHg1OSwgMHgxOCwgMHgwMywgMHgzMSwgMHg4OSwgMHgwOCwgMHg0ZCwgMHgxZSwgMHgwMiwgMHhjOCwKLTB4ZTEsIDB4NDAsIDB4YTEsIDB4NDAsIDB4NmIsIDB4MWUsIDB4MDAsIDB4MmQsIDB4MDksIDB4ZDAsIDB4MGMsIDB4MDQsCi0weDI0LCAweDBjLCAweGEyLCAweDE4LCAweDA5LCAweDBjLCAweDhhLCAweDE4LCAweDAyLCAweGM4LCAweDFjLCAweDFjLAotMHgwMSwgMHgzYiwgMHgwMCwgMHgyYywgMHhmNSwgMHhkMSwgMHhiOSwgMHg0MCwgMHgwOCwgMHgxYywgMHhmOCwgMHg0MCwKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4ODksIDB4MTgsIDB4MDAsIDB4MGMsIDB4NDIsIDB4MTgsIDB4MTAsIDB4MGMsCi0weDA1LCAweGQwLCAweDEwLCAweDA0LCAweDAwLCAweDBjLCAweDExLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLAotMHhmOSwgMHhkMSwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjcsIDB4MTEsIDB4NDksIDB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsCi0weGQyLCAweDAwLCAweDUzLCAweDE4LCAweDljLCAweDY4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwMywgMHgxYiwgMHgwYiwgMHg4YSwgMHg1OCwKLTB4MTIsIDB4MDMsIDB4MTIsIDB4MGIsIDB4OTMsIDB4NDIsIDB4MGMsIDB4ZDEsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsCi0weGVjLCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDZhLCAweDAxLCAweDAzLCAweDA5LCAweDBiLCAweDA3LCAweDQ4LAotMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywKLTB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmIsIDB4ZTcsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsCi0weDAwLCAweDQwLCAweDE0LCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDk4LCAweGI0LCAweDE0LCAweDRhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHg4MywgMHgwMCwgMHgxMywgMHg0OCwgMHhjMCwgMHg1OCwgMHgwNywgMHgwMywKLTB4M2YsIDB4MGIsIDB4MTIsIDB4NDgsIDB4YzAsIDB4NTgsIDB4MDIsIDB4MDMsIDB4MTIsIDB4MGIsIDB4MTEsIDB4NDgsCi0weGMwLCAweDU4LCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDEwLCAweDRjLCAweGU0LCAweDU4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHg5YiwgMHgwMCwgMHhjYywgMHgwMCwgMHgwMSwgMHgyMSwKLTB4OTgsIDB4NDIsIDB4MDEsIDB4ZDEsIDB4MDgsIDB4MWMsIDB4MDksIDB4ZTAsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksCi0weDEwLCAweDFhLCAweGRhLCAweDFiLCAweDgwLCAweDE4LCAweDAwLCAweGUwLCAweDE4LCAweDFhLCAweDg0LCAweDQyLAotMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHg5OCwgMHhiYywgMHg3MCwgMHg0NywgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwKLTB4MjAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDE4LCAweDA0LCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDEzLCAweDA0LCAweDAwLCAweGQwLCAweDAxLCAweDNhLAotMHg4MCwgMHgwMCwgMHgwYiwgMHgxYywgMHgxMywgMHg0OSwgMHgwZiwgMHg1OCwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwKLTB4MGIsIDB4NTgsIDB4YzAsIDB4NDYsIDB4NWEsIDB4NjAsIDB4MGEsIDB4NTgsIDB4MDgsIDB4MzIsIDB4MTAsIDB4NGIsCi0weDFiLCAweDU4LCAweDlhLCAweDQyLCAweDAxLCAweGQzLCAweDBmLCAweDRhLCAweDEyLCAweDU4LCAweDBmLCAweDRiLAotMHgxZiwgMHg1OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzYiwgMHg0MywgMHgxYiwgMHg2OCwgMHg5YiwgMHgwMCwKLTB4MTcsIDB4MDMsIDB4M2YsIDB4MGIsIDB4OWYsIDB4NDIsIDB4MDYsIDB4ZDEsIDB4MGEsIDB4NDgsIDB4YzEsIDB4NjgsCi0weDAxLCAweDMxLCAweGMxLCAweDYwLCAweDAxLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDA4LCAweDRiLAotMHgxYiwgMHg1OCwgMHhjMCwgMHg0NiwgMHgxYSwgMHg2MCwgMHgwYSwgMHg1MCwgMHgwMCwgMHgyMCwgMHhmNiwgMHhlNywKLTB4MDgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDE4LCAweDA0LCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDEwLCAweDA0LCAweDAwLCAweDgwLAotMHhmZiwgMHg1ZiwgMHgyZCwgMHhlOSwgMHg0OCwgMHhmZSwgMHhmZiwgMHhlYiwgMHgwMSwgMHhiNiwgMHhhMCwgMHhlMywKLTB4MDEsIDB4YjEsIDB4OGIsIDB4ZTIsIDB4MDIsIDB4OGEsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4N2EsIDB4YTAsIDB4ZTMsCi0weDAxLCAweGE5LCAweGEwLCAweGUzLCAweDAxLCAweDU2LCAweGEwLCAweGUzLCAweGM4LCAweDYwLCAweDlmLCAweGU1LAotMHhjOCwgMHg5MCwgMHg5ZiwgMHhlNSwgMHgxNCwgMHg0MCwgMHg5YiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlMywKLTB4MmMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MGEsIDB4MTQsIDB4ZTMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDBjLCAweDAwLCAweDk2LCAweGU1LCAweDAwLCAweDAwLCAweDUwLCAweGUzLCAweDIxLCAweDAwLCAweDAwLCAweDBhLAotMHgwMSwgMHgwYSwgMHgxNCwgMHhlMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwKLTB4MDEsIDB4MGEsIDB4YzAsIDB4ZTMsIDB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweDcwLCAweDg1LCAweGU1LCAweDA2LCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDBhLCAweDE0LCAweGUzLAotMHgwNCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMiwgMHgwYSwgMHhjMCwgMHhlMywKLTB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsIDB4MTQsIDB4ODAsIDB4ODUsIDB4ZTUsCi0weDAxLCAweDA5LCAweDE0LCAweGUzLCAweDA0LCAweDAwLCAweDAwLCAweDBhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LAotMHgwMSwgMHgwOSwgMHhjMCwgMHhlMywgMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwKLTB4MTQsIDB4YTAsIDB4ODUsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAxLCAweDAwLCAweDE0LCAweGUzLCAweDU0LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDBiLCAweDE0LCAweGUzLAotMHg2NywgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMSwgMHgwYiwgMHgxNCwgMHhlMywgMHgyMCwgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MTgsIDB4MDAsIDB4OTksIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MTgsIDB4MDAsIDB4ODksIDB4ZTUsCi0weGQ1LCAweGZmLCAweGZmLCAweGVhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LCAweDAxLCAweDBhLCAweGMwLCAweGUzLAotMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwKLTB4MTQsIDB4NzAsIDB4ODUsIDB4ZTUsIDB4ZTEsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmYsIDB4NWYsIDB4YmQsIDB4ZTgsCi0weDA0LCAweGYwLCAweDVlLCAweGUyLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHgxMCwgMHgxMCwgMHgxZiwgMHhlNSwgMHgxNCwgMHgzMCwgMHg5MSwgMHhlNSwgMHgwMCwgMHgyMCwgMHhjMywgMHhlMSwKLTB4MTQsIDB4MjAsIDB4ODEsIDB4ZTUsIDB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MGMsIDB4MjAsIDB4ODEsIDB4ZTUsCi0weDBiLCAweDEyLCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDgxLCAweGU1LCAweDE4LCAweDEwLCAweDlmLCAweGU1LAotMHhiMCwgMHgyNCwgMHhkMSwgMHhlMSwgMHgwMSwgMHgyMCwgMHg4MiwgMHhlMiwgMHhiMCwgMHgyNCwgMHhjMSwgMHhlMSwKLTB4M2MsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4ODIsIDB4ZTEsIDB4M2MsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweGZmLCAweGZmLCAweGZmLCAweGVhLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMSwgMHgwYiwgMHhhMCwgMHhlMywgMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywKLTB4MTQsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4MDAsIDB4MWEsIDB4ODEsIDB4ZTEsIDB4MjQsIDB4MjAsIDB4OTEsIDB4ZTUsCi0weDcwLCAweDAwLCAweDFmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDIwLCAweDgwLCAweGU1LAotMHgyOCwgMHgxMCwgMHg5MSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgxMCwgMHg4MCwgMHhlNSwKLTB4MmMsIDB4MjAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MjAsIDB4ODIsIDB4ZTIsIDB4MmMsIDB4MjAsIDB4ODAsIDB4ZTUsCi0weDNmLCAweDAwLCAweDAxLCAweGUyLCAweDNmLCAweDAwLCAweDUwLCAweGUzLCAweDFlLCAweGZmLCAweDJmLCAweDExLAotMHgxOCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgxMCwgMHg4MSwgMHhlMiwKLTB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDIsIDB4MTgsIDB4YTAsIDB4ZTMsIDB4MGIsIDB4MDIsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDA0LCAweDAwLCAweDgwLAotMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMiwgMHgwMCwgMHgxMCwgMHg5MCwgMHhlNSwKLTB4MDEsIDB4MDgsIDB4MTEsIDB4ZTMsIDB4MGIsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4MTksIDB4ODEsIDB4ZTIsCi0weDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDIwLCAweDkwLCAweGU1LCAweDQyLCAweDI4LCAweGIwLCAweGUxLAotMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhlNSwgMHgwMiwgMHgwYywgMHgxMCwgMHhlMywKLTB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDYsIDB4MDcsIDB4YTAsIDB4ZTMsIDB4NGMsIDB4MTEsIDB4ODAsIDB4ZTUsCi0weDAzLCAweDAwLCAweDAwLCAweGVhLCAweDBjLCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg0MCwgMHgxMCwgMHg4MCwgMHhlNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTIsCi0weDAwLCAweDEwLCAweDkwLCAweGU1LCAweDAxLCAweDA4LCAweDExLCAweGUzLCAweDBjLCAweDEwLCAweGEwLCAweGUzLAotMHgwMiwgMHgxOSwgMHg4MSwgMHhlMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgyMCwgMHg5MCwgMHhlNSwKLTB4NDIsIDB4MjgsIDB4YjAsIDB4ZTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZTUsCi0weDAyLCAweDBjLCAweDEwLCAweGUzLCAweDAyLCAweDAwLCAweDAwLCAweDBhLCAweDA2LCAweDA3LCAweGEwLCAweGUzLAotMHg0YywgMHgxMSwgMHg4MCwgMHhlNSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHg0YywgMHgwMCwgMHgxZiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weGZlLCAweGZmLCAweGZmLCAweGVhLCAweDAyLCAweDFiLCAweGEwLCAweGUzLCAweDAxLCAweDA2LCAweGEwLCAweGUzLAotMHgxNCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHgyMSwgMHgxZiwgMHhlNSwKLTB4MTQsIDB4MzAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4ZTUsCi0weDFjLCAweDAwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgxNCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywKLTB4MWMsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OTIsIDB4ZTUsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLAotMHhjMCwgMHgyMSwgMHgxZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MTQsIDB4MDAsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDFjLCAweDAwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDgxLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHhiNSwgMHgwZiwgMHgxYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MTcsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsCi0weDAwLCAweGYwLCAweDkyLCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg4MCwgMHhiNSwgMHgwZiwgMHgxYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOSwgMHhmOCwgMHgwMCwgMHgyOCwKLTB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI0LCAweDA3LCAweDY4LCAweDNhLCAweDc4LCAweGQyLCAweDA3LAotMHhkMiwgMHgwZiwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwgMHhmZiwgMHgyMiwgMHgwMSwgMHgzMiwKLTB4NDIsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4NDQsIDB4NjAsIDB4M2EsIDB4N2IsIDB4N2IsIDB4N2IsIDB4MWIsIDB4MDIsCi0weDFhLCAweDQzLCAweDgxLCAweDJhLCAweDA4LCAweGQxLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDQyLCAweDY4LAotMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHgwNCwgMHgyMiwgMHhiZiwgMHgxOCwgMHg4MiwgMHg2MCwgMHgwMCwgMHhlMCwKLTB4ODQsIDB4NjAsIDB4M2EsIDB4N2IsIDB4N2IsIDB4N2IsIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MDgsIDB4MmEsCi0weDA2LCAweGQxLCAweDA2LCAweDIzLCAweDQxLCAweDY4LCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDgxLCAweDY4LAotMHgwZSwgMHgzMSwgMHgzYywgMHhlMCwgMHhjMSwgMHgyMywgMHhkYiwgMHgwMCwgMHg5YSwgMHg0MiwgMHgwMywgMHhkMSwKLTB4NDEsIDB4NjgsIDB4MjQsIDB4NGIsIDB4MTksIDB4NDMsIDB4M2UsIDB4ZTAsIDB4MjMsIDB4NGIsIDB4OWEsIDB4NDIsCi0weDA0LCAweGQxLCAweDAxLCAweDIzLCAweDFiLCAweDAzLCAweDQxLCAweDY4LCAweDE5LCAweDQzLCAweDM2LCAweGUwLAotMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MmUsIDB4M2EsIDB4MWMsIDB4NGIsIDB4OWEsIDB4NDIsIDB4MmQsIDB4ZDgsIDB4MDEsIDB4MjUsCi0weDQyLCAweDY4LCAweDE1LCAweDQzLCAweDQ1LCAweDYwLCAweGJhLCAweDdiLCAweGZiLCAweDdiLCAweDFiLCAweDAyLAotMHgxYSwgMHg0MywgMHgxOCwgMHg0YiwgMHg5YSwgMHg0MiwgMHgyMiwgMHhkMSwgMHhmYiwgMHgxZCwgMHgwOSwgMHgzMywKLTB4NDQsIDB4Y2IsIDB4OWIsIDB4MDcsIDB4ZGIsIDB4MGUsIDB4ZGEsIDB4NDAsIDB4NWIsIDB4NDIsIDB4MjAsIDB4MzMsCi0weDllLCAweDQwLCAweDE2LCAweDQzLCAweDAzLCAweDJlLCAweDE4LCAweGQxLCAweDM5LCAweDdkLCAweDdiLCAweDdkLAotMHgxYiwgMHgwMiwgMHgxOSwgMHg0MywgMHgwOCwgMHgyOSwgMHgwNywgMHhkMSwgMHgwNCwgMHgyMSwgMHgyOSwgMHg0MywKLTB4NDEsIDB4NjAsIDB4ODEsIDB4NjgsIDB4MTYsIDB4MzEsIDB4ODEsIDB4NjAsIDB4MDEsIDB4MjEsIDB4MGEsIDB4ZTAsCi0weGMxLCAweDIzLCAweGRiLCAweDAwLCAweDk5LCAweDQyLCAweDA0LCAweGQxLCAweDAxLCAweDIxLCAweDg5LCAweDAzLAotMHgyOSwgMHg0MywgMHg0MSwgMHg2MCwgMHgwMCwgMHhlMCwgMHg4NCwgMHg2MCwgMHgwMCwgMHgyMSwgMHgwOCwgMHgxYywKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MDAsIDB4MDAsCi0weGFlLCAweDA1LCAweDAwLCAweDAwLCAweGFhLCAweGFhLCAweDAwLCAweDAwLCAweDgwLCAweGI0LCAweDQyLCAweDY4LAotMHhkMSwgMHgwOCwgMHgzZiwgMHhkMywgMHgwMSwgMHg2OCwgMHg4MywgMHg2OCwgMHg1OSwgMHgxOCwgMHgwMiwgMHgzOSwKLTB4OGYsIDB4NzgsIDB4M2YsIDB4MDcsIDB4M2YsIDB4MGYsIDB4MDUsIDB4MmYsIDB4MDMsIDB4ZDEsIDB4ZGEsIDB4MWQsCi0weDBkLCAweDMyLCAweGMyLCAweDYwLCAweDA1LCAweGUwLCAweGJmLCAweDAwLCAweGRiLCAweDE5LCAweGMzLCAweDYwLAotMHgwOCwgMHgyMywgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHg4YSwgMHg3OCwgMHgxMiwgMHgwNywgMHgxMiwgMHgwZiwKLTB4OTIsIDB4MDAsIDB4MDIsIDB4NjEsIDB4MGEsIDB4NzksIDB4NGIsIDB4NzksIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsCi0weDEzLCAweDAyLCAweDEyLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LAotMHgxMiwgMHgwYywgMHg0MiwgMHg2MSwgMHhjYSwgMHg3YSwgMHgwNiwgMHgyYSwgMHgwMywgMHhkMSwgMHgxMCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MTAsIDB4ZTAsIDB4MTEsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4MjAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDBhLCAweGUwLCAweDMzLCAweDJhLCAweDAzLCAweGQxLCAweDQwLCAweDIzLAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwNCwgMHhlMCwgMHgzMiwgMHgyYSwgMHgwMywgMHhkMSwgMHg4MCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4YzksIDB4N2EsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NzYsCi0weDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDBhLCAweDc4LCAweGMwLCAweDQ2LCAweDAyLCAweDYwLCAweDRiLCAweDc4LAotMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgwMiwgMHg2MCwgMHg4YiwgMHg3OCwgMHgxYiwgMHgwNCwgMHgxYSwgMHg0MywKLTB4MDIsIDB4NjAsIDB4YzksIDB4NzgsIDB4MDksIDB4MDYsIDB4MTEsIDB4NDMsIDB4MDEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweDQ4LCAweDY4LCAweDgwLCAweDA5LCAweDI2LCAweGQzLCAweGI4LCAweDZhLAotMHhjOSwgMHg2OCwgMHg0MCwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMiwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4OTgsIDB4NDIsCi0weDE4LCAweGQxLCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LAotMHg0OCwgMHg2MiwgMHgzOCwgMHg2YiwgMHgwMiwgMHhmMCwgMHhkYSwgMHhmOCwgMHgzOCwgMHgxYywgMHgwMSwgMHhmMCwKLTB4OTUsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4MDcsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NzMsIDB4MDcsIDB4NDksCi0weDRhLCAweDZjLCAweDEyLCAweDE4LCAweDRhLCAweDY0LCAweDA2LCAweDQ5LCAweDhhLCAweDZkLCAweDEyLCAweDE4LAotMHg4YSwgMHg2NSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYSwgMHhlNywKLTB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDgxLCAweDA3LCAweDE5LCAweGQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwMSwgMHgxZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwMiwgMHgwMiwKLTB4MTIsIDB4MGUsIDB4MTIsIDB4MDYsIDB4MDAsIDB4MGEsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDQsIDB4MTgsIDB4NDAsCi0weDEwLCAweDQzLCAweDBhLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDEwLCAweDQzLCAweDA5LCAweDAyLAotMHgxYiwgMHgwYSwgMHgxOSwgMHg0MCwgMHgwOCwgMHg0MywgMHg3MCwgMHg0NywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDYsIDB4MDIsIDB4MDIsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDQsCi0weDFhLCAweDQwLCAweDExLCAweDQzLCAweDAyLCAweDBhLCAweDFiLCAweDBhLCAweDFhLCAweDQwLCAweDExLCAweDQzLAotMHgwMCwgMHgwZSwgMHgwOCwgMHg0MywgMHhlZCwgMHhlNywgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgyMywKLTB4ODEsIDB4NmIsIDB4MTksIDB4NDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjksIDB4NDYsIDB4ZDAsIDB4YzcsIDB4MWQsCi0weDM5LCAweDM3LCAweDM5LCAweDdiLCAweDMzLCAweDI5LCAweDAxLCAweGQwLCAweDMyLCAweDI5LCAweDNmLCAweGQxLAotMHgwMSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0YSwgMHg2NSwgMHhjNCwgMHgxZCwgMHgyZCwgMHgzNCwgMHhjZCwgMHgxZCwKLTB4MmQsIDB4MzUsIDB4MDAsIDB4MjIsIDB4OTMsIDB4MDAsIDB4ZTYsIDB4NTgsIDB4YzAsIDB4NDYsIDB4ZWUsIDB4NTAsCi0weDAxLCAweDMyLCAweDA3LCAweDJhLCAweGY4LCAweGQzLCAweDgyLCAweDZhLCAweGMwLCAweDQ2LCAweDRhLCAweDYzLAotMHg4MiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MiwgMHg3YSwgMHg4YiwgMHhjYiwgMHgxZCwgMHgzOSwgMHgzMywKLTB4NWEsIDB4ODMsIDB4NDAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjIsIDB4MTIsIDB4NDgsIDB4MDEsIDB4MjcsCi0weDQyLCAweDY4LCAweDAwLCAweDJhLCAweDEwLCAweGQxLCAweGMyLCAweDY4LCAweDAwLCAweDJhLCAweDEzLCAweGQxLAotMHg0MiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgwZCwgMHhkMSwgMHgwMSwgMHg2MSwgMHhjMSwgMHg2MCwgMHgwMSwgMHg2YSwKLTB4MDIsIDB4MjksIDB4MDIsIDB4ZDMsIDB4MjAsIDB4MzAsIDB4MDcsIDB4NzEsIDB4MGMsIDB4ZTAsIDB4MDAsIDB4ZjAsCi0weDEzLCAweGY4LCAweDA5LCAweGUwLCAweGMyLCAweDY4LCAweDAwLCAweDJhLCAweDAyLCAweGQxLCAweDAxLCAweDYxLAotMHhjMSwgMHg2MCwgMHgwMywgMHhlMCwgMHgwMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg1MSwgMHg2NSwgMHgwMSwgMHg2MSwKLTB4MzgsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmEsIDB4ZTcsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDFlLCAweDQ5LCAweDAwLCAweDIyLCAweGNiLCAweDY4LAotMHgwMCwgMHgyYiwgMHgzNCwgMHhkMCwgMHhjOCwgMHgxZCwgMHhmOSwgMHgzMCwgMHg4MywgMHg2MiwgMHhjYiwgMHg2OCwKLTB4OWIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzMsIDB4NjIsIDB4Y2YsIDB4NjksIDB4N2IsIDB4MDAsIDB4ZGYsIDB4MTksCi0weDdmLCAweDAyLCAweDE3LCAweDRiLCAweGZmLCAweDE4LCAweGZmLCAweDM3LCAweDY1LCAweDM3LCAweDgzLCAweDYzLAotMHgwNywgMHg2MywgMHhjYiwgMHgxZCwgMHhmZiwgMHgzMywgMHg1YSwgMHgzMywgMHgxYSwgMHg3MiwgMHhjYiwgMHg2OSwKLTB4MDAsIDB4MmIsIDB4MDEsIDB4ZDAsIDB4Y2EsIDB4NjEsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4Y2IsIDB4NjEsCi0weDBmLCAweDFjLCAweGM5LCAweDY4LCAweDQ5LCAweDZhLCAweDA5LCAweDg5LCAweDAxLCAweDMxLCAweDQxLCAweDYzLAotMHhmOCwgMHgxZCwgMHhmZiwgMHgzMCwgMHgzYSwgMHgzMCwgMHg0MiwgMHg2MCwgMHgwMiwgMHg4MiwgMHg4MiwgMHg2MCwKLTB4YzIsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2UsIDB4ZmEsIDB4MzgsIDB4NmEsIDB4MDEsIDB4MzAsCi0weDM4LCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBhLCAweGY4LCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgxMCwgMHgxYywgMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZjksIDB4MWQsIDB4ZjksIDB4MzEsCi0weDg4LCAweDZhLCAweGMyLCAweDFkLCAweDJkLCAweDMyLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMyLAotMHgxYSwgMHg0MywgMHhjOCwgMHg2YSwgMHgxMiwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg4MCwgMHgxOCwKLTB4ODIsIDB4NzksIDB4YzMsIDB4NzksIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsCi0weDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDAyLCAweDM4LAotMHg5MiwgMHgwNCwgMHg5MiwgMHgwYywgMHgwMCwgMHgyNiwgMHgyNSwgMHg0ZCwKLTB4ZWMsIDB4MWQsIDB4ZmYsIDB4MzQsIDB4M2EsIDB4MzQsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDAsIDB4MjAsIDB4OGEsCi0weDAxLCAweDIzLCAweDliLCAweDAyLCAweDE4LCAweDQzLCAweDJiLCAweGUwLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhjMiwgMHgxZCwgMHgwZCwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTAsIDB4NDMsIDB4MDMsIDB4MWMsCi0weGY4LCAweDFkLCAweGZmLCAweDMwLCAweDRhLCAweDMwLCAweDgyLCAweDc4LCAweGM4LCAweDZiLCAweDE5LCAweDFjLAotMHgwMiwgMHhmMCwgMHgwMiwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkYSwgMHgyMCwgMHg4YSwgMHhmZiwgMHgyMywKLTB4MDEsIDB4MzMsIDB4MTgsIDB4NDMsIDB4MGUsIDB4ZTAsIDB4ZjksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4M2EsIDB4MzEsCi0weDA4LCAweDYwLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDFjLCAweGY4LAotMHgwMCwgMHgyOCwgMHgxNCwgMHhkMSwgMHgyMCwgMHg4YSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxOCwgMHg0MywKLTB4MjAsIDB4ODIsIDB4MjEsIDB4OGEsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YTIsIDB4ZmIsIDB4ZTgsIDB4NjgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDU0LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LAotMHhlOCwgMHg2MCwgMHgzMCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwKLTB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsCi0weGZjLCAweDFkLCAweGY5LCAweDM0LCAweGEwLCAweDZiLCAweGE2LCAweDZhLCAweGM1LCAweDFkLCAweDBkLCAweDM1LAotMHgzOCwgMHg0OCwgMHhjMCwgMHg2YSwgMHg0YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHg0OSwgMHgwMSwgMHg0MiwgMHgxOCwKLTB4MDEsIDB4MjAsIDB4ODAsIDB4MDcsIDB4MTAsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDAwLCAweDkwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQwLCAweDFkLCAweDA1LCAweDMwLCAweDE4LCAweDQzLAotMHgwMCwgMHg2OCwgMHgzOCwgMHgxYywgMHgyOSwgMHgxYywgMHgwMCwgMHhmMCwgMHhjMiwgMHhmYSwgMHhhOCwgMHg4OCwKLTB4NDEsIDB4MDcsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4NTEsIDB4ZTAsIDB4MjksIDB4ODksIDB4MDksIDB4MTgsCi0weDYwLCAweDZiLCAweDgxLCAweDQyLCAweGY4LCAweGQ4LCAweDY5LCAweDg5LCAweGVhLCAweDg4LCAweDg5LCAweDE4LAotMHg4MSwgMHg0MiwgMHhmMywgMHhkOCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyOCwgMHgyNSwgMHhkMSwgMHhlMCwgMHg2YSwKLTB4ZjEsIDB4NmIsIDB4NDAsIDB4MTgsIDB4NzEsIDB4NmMsIDB4ZmEsIDB4MWQsIDB4Y2QsIDB4MzIsIDB4MDEsIDB4ZjAsCi0weDMzLCAweGY5LCAweGZhLCAweDFkLCAweGZmLCAweDMyLCAweDNhLCAweDMyLCAweGUwLCAweDZhLCAweDUxLCAweDY5LAotMHg0MCwgMHgxOCwgMHhjMywgMHgxZCwgMHgwMywgMHgzMywgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg1ZSwgMHg1OCwKLTB4YzksIDB4MTksIDB4ZmYsIDB4MzEsIDB4MDEsIDB4MzEsIDB4NGUsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsCi0weGY2LCAweGQzLCAweGUwLCAweDZhLCAweDUxLCAweDY5LCAweDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLAotMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgMHg0MywgMHgwMCwgMHhjYSwgMHg1MiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwKLTB4ZmEsIDB4ZDMsIDB4MjksIDB4MWMsIDB4MTEsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YWUsIDB4ZmIsCi0weDAxLCAweDIyLCAweDUyLCAweDA0LCAweDYwLCAweDZiLCAweDAyLCAweDQzLCAweDAxLCAweDIwLCAweDIxLCAweDZiLAotMHhmZiwgMHhmNywgMHhhNiwgMHhmYiwgMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg2MCwgMHg2YiwgMHgwMiwgMHg0MywKLTB4MDAsIDB4MjAsIDB4ZTEsIDB4NmEsIDB4ZmYsIDB4ZjcsIDB4OWUsIDB4ZmIsIDB4YTEsIDB4NmIsIDB4MDgsIDB4NGEsCi0weDAxLCAweDIwLCAweGZmLCAweGY3LCAweDk5LCAweGZiLCAweDAzLCAweDIwLCAweDA2LCAweDQ5LCAweGMwLCAweDQ2LAotMHg0OCwgMHg2MiwgMHgwMSwgMHgyMCwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MGYsIDB4MDAsCi0weDZjLCAweDA3LCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDhkLCAweGIwLCAweDAwLCAweDIwLCAweGI1LCAweDRhLAotMHhkNSwgMHgxZCwgMHhmOSwgMHgzNSwgMHg2OCwgMHg2MiwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHhiMywgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YTgsIDB4NmEsIDB4YzQsIDB4MWQsIDB4MmQsIDB4MzQsIDB4YjEsIDB4NDgsCi0weGMwLCAweDZhLCAweGQ3LCAweDFkLCAweGZmLCAweDM3LCAweDNhLCAweDM3LCAweDM5LCAweDY4LCAweDRiLCAweDAwLAotMHg1OSwgMHgxOCwgMHg0OSwgMHgwMSwgMHg0MCwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjMSwgMHgxZCwKLTB4MDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDgsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA5LCAweDkwLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDE4LCAweDQwLCAweDAwLCAweDBhLAotMHgwYSwgMHg5MCwgMHgwYSwgMHg5OCwgMHhhNCwgMHg0ZSwgMHgwMSwgMHgyOCwgMHg1OSwgMHhkMSwgMHgyOCwgMHg2YiwKLTB4YTIsIDB4NjgsIDB4ODAsIDB4MTgsIDB4YTIsIDB4NGEsIDB4MjEsIDB4NjksCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweGYwLCAweDI2LCAweGY5LCAweDI4LCAweDZiLCAweDc5LCAweDY5LAotMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgwMCwgMHgyMCwgMHg4MiwgMHgwMCwgMHg5OCwgMHg0YiwKLTB4ZDMsIDB4MTgsIDB4ZmYsIDB4MzMsIDB4MDEsIDB4MzMsIDB4NWIsIDB4NjksIDB4YzAsIDB4NDYsIDB4OGIsIDB4NTAsCi0weDAxLCAweDMwLCAweDA0LCAweDI4LCAweGY0LCAweGQzLCAweDAwLCAweDIwLCAweDMxLCAweDFjLCAweDgyLCAweDAwLAotMHg1NiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNCwgMHhhZSwKLTB4YjMsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDMsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDgsIDB4OTAsCi0weDkwLCAweDQ5LCAweDQyLCAweDAwLCAweDhiLCAweDVhLCAweGIyLCAweDVhLCAweDkzLCAweDQyLCAweDEzLCAweGQwLAotMHg4ZSwgMHg0OCwgMHhjMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHhjMSwgMHg4MSwgMHhiOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4MzgsIDB4OGEsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzEsIDB4ZTAsIDB4MzgsIDB4OGEsCi0weDQwLCAweDIzLCAweDE4LCAweDQzLCAweDZkLCAweGUwLCAweDAwLCAweGYwLCAweDExLCAweGY5LCAweDAxLCAweGYwLAotMHg2NywgMHhmZiwgMHhmNSwgMHhlMCwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwgMHhlMywgMHhkMywgMHgwOCwgMHg5OCwKLTB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsIDB4YjgsIDB4NjgsIDB4NDEsIDB4MWMsIDB4YjksIDB4NjAsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweDM4LCAweDhhLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweDAyLCAweGUwLCAweDM4LCAweDhhLAotMHgwNCwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg4MiwgMHg3OCwgMHg2OCwgMHgwMSwgMHgzMCwgMHg3OCwgMHg2MCwKLTB4NjIsIDB4ZTAsIDB4MGEsIDB4OTgsIDB4MDIsIDB4MjgsIDB4NWYsIDB4ZDEsIDB4MDksIDB4OTgsIDB4NDAsIDB4MGMsCi0weDczLCAweGQzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLAotMHgwMCwgMHg2OCwgMHhlMSwgMHgxZCwgMHgwZCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHg0MCwgMHgxOCwKLTB4MGMsIDB4MzgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MjEsIDB4OGEsIDB4MDAsIDB4NmIsIDB4NGIsCi0weGQ2LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA0LCAweGFlLAotMHhiMywgMHg1MCwgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmMywgMHhkMywgMHgwMCwgMHgyMSwgMHg4MywgMHgxZSwKLTB4MGMsIDB4OTMsIDB4NjgsIDB4NGEsIDB4MTYsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGIsIDB4OTYsIDB4OGEsIDB4MDAsCi0weDBjLCAweDliLCAweDliLCAweDE4LCAweDBiLCAweDllLCAweDllLCAweDE5LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHg2ZSwgMHg0NiwgMHhiMywgMHg1MCwgMHgwMSwgMHgzMSwgMHgwNCwgMHgyOSwKLTB4ZjEsIDB4ZDMsIDB4NjksIDB4NDYsIDB4OGIsIDB4MWMsIDB4MDcsIDB4OTMsIDB4MDAsIDB4MjEsIDB4MDgsIDB4OTEsCi0weDA0LCAweGFlLCAweDRhLCAweDAwLCAweDA3LCAweDliLCAweDliLCAweDVhLCAweGIyLCAweDVhLCAweDkzLCAweDQyLAotMHgxMSwgMHhkMCwgMHg1OCwgMHg0OCwgMHhjMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHhjMSwgMHg4MSwgMHhmOCwgMHg2OCwKLTB4NDEsIDB4MWMsIDB4ZjksIDB4NjAsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MzgsIDB4OGEsIDB4MjAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAyLCAweGUwLCAweDM4LCAweDhhLCAweDgwLCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDgyLAotMHg4ZiwgMHhlNywgMHgwMSwgMHgzMSwgMHgwNiwgMHgyOSwgMHhlNCwgMHhkMywgMHgwOCwgMHg5OSwgMHgwMCwgMHgyOSwKLTB4MGQsIDB4ZDEsIDB4ZjksIDB4NjgsIDB4NGEsIDB4MWMsIDB4ZmEsIDB4NjAsIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsCi0weDM5LCAweDhhLCAweDAyLCAweDIzLCAweDE5LCAweDQzLCAweDAzLCAweGUwLCAweDBjLCAweGUwLCAweDM5LCAweDhhLAotMHgwOCwgMHgyMywgMHgxOSwgMHg0MywgMHgzOSwgMHg4MiwgMHgyOSwgMHg2YiwgMHgwOCwgMHgxOCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MDEsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NzYsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDExLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHgwMSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwMCwgMHhlMCwgMHgxOSwgMHhlMCwgMHgzNSwgMHg0OCwgMHgyYSwgMHg2YiwKLTB4YzAsIDB4NDYsIDB4ZWEsIDB4NjIsIDB4MDQsIDB4MjksIDB4NGYsIDB4ZDEsIDB4MDEsIDB4MjEsIDB4YzYsIDB4MWQsCi0weGZmLCAweDM2LCAweDVhLCAweDM2LCAweDMxLCAweDcyLCAweDBhLCAweDk5LCAweDAyLCAweDI5LCAweDFlLCAweGQxLAotMHgwOSwgMHg5OSwgMHgwOSwgMHgwZSwgMHg0OSwgMHgwNiwgMHgxYSwgMHhkMSwgMHhlMSwgMHgxZCwgMHgwNSwgMHgzMSwKLTB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4MzksIDB4MWEsIDB4ZTAsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhlMSwgMHgxZCwgMHgwZCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4ZjksIDB4NjgsIDB4NGEsIDB4MWMsIDB4ZmEsIDB4NjAsIDB4MDAsIDB4MjksIDB4YmMsIDB4ZDEsCi0weGI2LCAweGU3LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGUxLCAweDFkLAotMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHhhMSwgMHg2MCwKLTB4ZTgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjAsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODgsIDB4ZmMsCi0weDIwLCAweDdlLCAweDMzLCAweDI4LCAweDAxLCAweGQwLCAweDMyLCAweDI4LCAweDExLCAweGQxLCAweDAxLCAweDIxLAotMHgxNCwgMHg0YywgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHhiOSwgMHg2MCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ODUsIDB4ZjgsIDB4MjgsIDB4NmIsIDB4YTksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjIsIDB4MjAsIDB4MWMsCi0weGZmLCAweGY3LCAweGMwLCAweGZkLCAweDAwLCAweDI4LCAweDExLCAweGQxLCAweDBlLCAweGUwLCAweDAwLCAweDIwLAotMHgzMCwgMHg3MiwgMHgxMSwgMHhlMCwgMHgzMywgMHgyOSwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOSwgMHgwZCwgMHhkMSwKLTB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzEsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjAsIDB4ZmQsCi0weDAwLCAweDI4LCAweDAxLCAweGQxLCAweDAxLCAweGYwLCAweDcwLCAweGZlLCAweDBkLCAweGIwLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhmMCwgMHgxMiwgMHhmOCwgMHhmNiwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDQwLCAweDA3LCAweDAwLCAweDgwLCAweDgyLCAweDA3LCAweDAwLCAweDgwLAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgyNSwgMHg0OCwKLTB4NDEsIDB4NjgsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjAsIDB4MjQsIDB4NGYsIDB4ZjksIDB4MWQsIDB4ZjksIDB4MzEsCi0weDAwLCAweDI0LCAweDg4LCAweDZhLCAweGZhLCAweDY4LCAweGMwLCAweDQ2LCAweDk0LCAweDYxLCAweDA0LCAweDIyLAotMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg2MCwgMHgxMCwgMHgyMiwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4OWEsIDB4NjEsIDB4ZmEsIDB4MWQsIDB4ZmYsIDB4MzIsIDB4NWEsIDB4MzIsIDB4MTMsIDB4N2EsIDB4MWIsIDB4NGEsCi0weDAwLCAweDJiLCAweDBiLCAweGQwLCAweDE1LCAweDhhLCAweDJlLCAweDBhLCAweDM2LCAweDAyLCAweDMzLCAweDIzLAotMHgyYiwgMHg0MCwgMHg5YiwgMHgwMCwgMHgxZSwgMHg0MywgMHhjYywgMHgyMywgMHgyYiwgMHg0MCwgMHg5YiwgMHgwOCwKLTB4MzMsIDB4NDMsIDB4MTMsIDB4ODIsIDB4MTIsIDB4OGEsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4ODMsCi0weDRhLCAweDZiLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDgxLCAweDBhLCAweDZiLCAweGMwLCAweDQ2LAotMHg4MiwgMHg2MiwgMHhjNCwgMHg2MiwgMHhjMywgMHgxZCwgMHgzOSwgMHgzMywgMHg0YSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NWEsIDB4ODMsIDB4MDQsIDB4MjMsIDB4MDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4ODgsIDB4NmEsCi0weDAxLCAweGYwLCAweDMyLCAweGZhLCAweGY4LCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDU0LCAweDMwLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGFjLCAweDA3LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweGMxLCAweDFkLCAweGY5LCAweDMxLCAweDhhLCAweDZhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkMSwgMHgxZCwgMHg0NSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4MGIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4MDEsIDB4MjcsIDB4YzEsIDB4MWQsIDB4ZmYsIDB4MzEsIDB4NGEsIDB4MzEsCi0weDMzLCAweDJiLCAweDA1LCAweGQxLCAweDhiLCAweDcwLCAweDAxLCAweDFjLCAweDEwLCAweDFjLCAweDAwLCAweGYwLAotMHgwZiwgMHhmOCwgMHgwNiwgMHhlMCwgMHgzMiwgMHgyYiwgMHgwOCwgMHhkMSwgMHg4YiwgMHg3MCwgMHgwMSwgMHgxYywKLTB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4M2MsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDg4LCAweDcwLCAweGY5LCAweGU3LCAweDkwLCAweGI0LCAweGNhLCAweDFkLAotMHhmOSwgMHgzMiwgMHgzMywgMHgyNywgMHhjYywgMHgxZCwgMHhmZiwgMHgzNCwgMHg0YSwgMHgzNCwgMHhkMywgMHg2YSwKLTB4YzAsIDB4NDYsIDB4YTcsIDB4NzAsIDB4ZmYsIDB4MzEsIDB4NDEsIDB4MzEsIDB4MDcsIDB4NmMsIDB4YzAsIDB4NDYsCi0weDRmLCAweDYxLCAweGZiLCAweDE4LCAweDM5LCAweDFjLCAweDlmLCAweDFlLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhmYywgMHgxYywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHg5YiwgMHgwMCwKLTB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4YzksIDB4MTgsIDB4MDgsIDB4MzEsIDB4MDEsIDB4NjQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGI5LCAweDFjLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDM0LCAweDMwLCAweDAxLCAweDc2LAotMHhmOCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHhiOSwgMHgxZCwKLTB4MTksIDB4NDMsIDB4ZDAsIDB4NjMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4NDMsCi0weGQwLCAweDYzLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweGIwLCAweGI1LCAweGNhLCAweDFkLCAweGY5LCAweDMyLAotMHhjNSwgMHgxZCwgMHgyZCwgMHgzNSwgMHgzMiwgMHgyMCwgMHhjZiwgMHgxZCwKLTB4ZmYsIDB4MzcsIDB4NGEsIDB4MzcsIDB4ZDMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NzAsIDB4Y2MsIDB4MWQsCi0weGZmLCAweDM0LCAweDNhLCAweDM0LCAweGU4LCAweDY4LCAweGMwLCAweDQ2LCAweDYwLCAweDYxLCAweDEwLCAweDMwLAotMHhlOCwgMHg2MCwgMHg2MCwgMHg2OSwgMHhjMCwgMHgxOCwgMHg4NywgMHgxZSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MzgsIDB4MWQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4YjksIDB4MWMsIDB4MTksIDB4NDMsCi0weGQwLCAweDYzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDQzLCAweGQwLCAweDYzLAotMHhmOCwgMHgxZCwgMHgwMywgMHgzMCwgMHhmZiwgMHhmNywgMHhmYywgMHhmYiwgMHgyMCwgMHg2MiwgMHhmOCwgMHgxZCwKLTB4MDcsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmIsIDB4NjAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MjgsIDB4NzYsCi0weGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY3LCAweGI1LCAweDgxLCAweGIwLCAweDAxLCAweDk4LAotMHhjNywgMHgxZCwgMHhmOSwgMHgzNywgMHhiOCwgMHg2YSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwKLTB4MDUsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWMsIDB4NjgsIDB4ZmYsIDB4MjMsIDB4ZmUsIDB4MzMsIDB4MjMsIDB4NDAsCi0weDdmLCAweDZiLCAweDNmLCAweDA0LCAweDNiLCAweDQzLCAweDBiLCAweDYwLCAweDM0LCAweDMwLCAweDFjLCAweDFjLAotMHg4MCwgMHgyMywgMHgyMywgMHg0MCwgMHgwMSwgMHg5ZiwgMHhmZiwgMHgzNywgMHg0MSwgMHgzNywgMHgwMCwgMHgyYiwKLTB4M2MsIDB4ZDAsIDB4MGMsIDB4MjMsIDB4MDAsIDB4OTMsIDB4MDAsIDB4MjMsIDB4OWQsIDB4MDAsIDB4YWUsIDB4MTgsCi0weDM2LCAweDY5LCAweDZkLCAweDE4LCAweDZlLCAweDYxLCAweDAxLCAweDMzLCAweDA1LCAweDJiLCAweGY3LCAweGQzLAotMHgwMCwgMHgyMywgMHg5ZCwgMHgwMCwgMHhhZSwgMHgxOCwgMHg3NiwgMHg2YSwgMHg2ZCwgMHgxOCwgMHhhZSwgMHg2MiwKLTB4MDEsIDB4MzMsIDB4MDUsIDB4MmIsIDB4ZjcsIDB4ZDMsIDB4MDEsIDB4OWIsIDB4ZmYsIDB4MzMsIDB4NTEsIDB4MzMsCi0weDliLCAweDc4LCAweDMzLCAweDJiLCAweDBlLCAweGQxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM1LCAweDFkLAotMHgwMSwgMHgzNSwgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4YzUsIDB4MWQsIDB4MGQsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MTYsIDB4ZTAsCi0weDdiLCAweDY5LCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM1LCAweDFkLAotMHgwZCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHg3ZCwgMHg2OSwgMHg1ZCwgMHgxYiwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4YzYsIDB4MWQsIDB4MDEsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4ZWIsIDB4MTgsCi0weDBjLCAweDNiLCAweDAyLCAweGUwLCAweDAwLCAweDIzLCAweDAwLCAweDkzLCAweDRiLCAweDgxLCAweGNiLCAweDgwLAotMHg2MywgMHgwOSwgMHg0OSwgMHhkMywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNCwgMHgxZCwgMHgwNSwgMHgzNCwKLTB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGIsIDB4ODEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGM0LCAweDFkLCAweDBkLCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDBjLCAweDg5LCAweDFiLCAweDFiLAotMHgwMCwgMHg5YywgMHgxYywgMHgxYiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4MjAsIDB4MTgsIDB4ODgsIDB4ODAsIDB4MzgsIDB4NmEsIDB4MDQsIDB4MGUsIDB4ZmYsIDB4MjMsCi0weDFiLCAweDA0LCAweDAzLCAweDQwLCAweDFiLCAweDBhLCAweDFjLCAweDQzLCAweGZmLCAweDIzLCAweDFiLCAweDAyLAotMHgwMywgMHg0MCwgMHgxYiwgMHgwMiwgMHgyMywgMHg0MywgMHgwMCwgMHgwNiwgMHgxOCwgMHg0MywgMHhjOCwgMHg2MCwKLTB4NzgsIDB4NmEsIDB4MDcsIDB4MGUsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDQsIDB4MDMsIDB4NDAsIDB4MWIsIDB4MGEsCi0weDFmLCAweDQzLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDAzLCAweDQwLCAweDFiLCAweDAyLCAweDNiLCAweDQzLAotMHgwMCwgMHgwNiwgMHgxOCwgMHg0MywgMHgwOCwgMHg2MSwgMHhkMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MywKLTB4OTAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsIDB4NTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjQsCi0weDEwLCAweDZjLCAweGMwLCAweDQ2LCAweDg4LCAweDY0LCAweGQwLCAweDZjLCAweGMwLCAweDQ2LCAweGM4LCAweDY0LAotMHg5MCwgMHg2YywgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NSwgMHgwMiwgMHhlMCwgMHgwMCwgMHgyMywgMHgwYiwgMHg4MSwKLTB4OGIsIDB4ODAsIDB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weDBmLCAweDRhLCAweDkzLCAweDg5LCAweDAxLCAweDMzLCAweDkzLCAweDgxLCAweGMyLCAweDFkLCAweGY5LCAweDMyLAotMHgwNCwgMHgyMywgMHg5MCwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjMywgMHg2MCwgMHgxMCwgMHgyMywgMHg4MywgMHg2MSwKLTB4Y2IsIDB4MGEsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MjMsIDB4ODMsIDB4NjEsIDB4YzEsIDB4ODMsIDB4NTEsIDB4NmIsCi0weGMwLCAweDQ2LCAweGMxLCAweDgxLCAweDUxLCAweDZiLCAweGMyLCAweDFkLCAweDM5LCAweDMyLCAweDUxLCAweDgzLAotMHgwNCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMSwgMHhmMCwgMHhjMiwgMHhmOCwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGIwLCAweGI1LCAweDFiLCAweDRjLCAweDIwLCAweDZhLCAweDAyLCAweDI4LCAweDFiLCAweGQyLCAweDAwLCAweDIwLAotMHhlNywgMHgxZCwgMHgxOSwgMHgzNywgMHgzOCwgMHg3MSwgMHhlMSwgMHg2OCwgMHhlMCwgMHgxZCwgMHhmOSwgMHgzMCwKLTB4MDAsIDB4MjksIDB4MTUsIDB4ZDAsIDB4NDIsIDB4NmEsIDB4MDAsIDB4MmEsIDB4MTIsIDB4ZDEsIDB4MDEsIDB4MjUsCi0weDBhLCAweGUwLCAweGZmLCAweGY3LCAweDg5LCAweGZiLCAweDAwLCAweDI4LCAweDA5LCAweGQxLCAweDIwLCAweDZhLAotMHgwMiwgMHgyOCwgMHgwMCwgMHhkMywgMHgzZCwgMHg3MSwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwKLTB4MzgsIDB4NzksIDB4MDAsIDB4MjgsIDB4ZjEsIDB4ZDAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweDZhLCAweDAwLCAweDI4LCAweGY5LCAweGQxLCAweDAwLCAweDI5LCAweGY3LCAweGQxLCAweDYwLCAweDY5LAotMHgwMCwgMHgyOCwgMHgwNCwgMHhkMCwgMHgwNiwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMywgMHhmMCwgMHhhOCwgMHhmYywKLTB4ZWYsIDB4ZTcsIDB4NjAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4ZWMsIDB4ZDAsIDB4MDAsIDB4ZjAsIDB4NWEsIDB4ZjgsCi0weGU5LCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDM0LCAweDA0LCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHgyMCwgMHgyMywgMHhiOCwgMHg2OCwgMHgxOCwgMHg0MCwgMHgwMSwgMHgyNCwKLTB4MDAsIDB4MjUsIDB4MDAsIDB4MjgsIDB4MGIsIDB4ZDEsIDB4MzgsIDB4NmEsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsCi0weDI4LCAweDFjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDFmLCAweDQ4LCAweDAxLCAweDZlLAotMHgwMSwgMHgzMSwgMHgwMSwgMHg2NiwgMHgwMywgMHhlMCwgMHg0OCwgMHg2OCwgMHhjNCwgMHgyMywgMHgxOCwgMHg0MCwKLTB4MDMsIDB4ZDEsIDB4MzgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4MGMsIDB4ZmMsIDB4MmYsIDB4ZTAsIDB4MzgsIDB4MWMsCi0weDAwLCAweGYwLCAweDFjLCAweGZjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDdiLCAweGZhLCAweGI4LCAweDY4LAotMHhjMCwgMHgwOCwgMHgwMiwgMHhkMywgMHgzOCwgMHg2YSwgMHgwMCwgMHhmMCwgMHhkMSwgMHhmYiwgMHhiOCwgMHg2OCwKLTB4MzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjAsIDB4MzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzUsIDB4NjAsCi0weDEwLCAweDQ4LCAweDQxLCAweDY4LCAweDAwLCAweDI5LCAweDExLCAweGQxLCAweGMxLCAweDY4LCAweDAwLCAweDI5LAotMHgwOSwgMHhkMSwgMHg0MSwgMHg2OSwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkMSwgMHgzOSwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4ODEsIDB4NjAsIDB4NDEsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4MTQsIDB4ZjgsIDB4MGIsIDB4ZTAsIDB4MzksIDB4NmEsCi0weGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDQxLCAweDYwLCAweDA2LCAweGUwLCAweDM5LCAweDZhLCAweDgyLCAweDY4LAotMHhjMCwgMHg0NiwgMHhkMSwgMHg2MCwgMHgzOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHgyMCwgMHgxYywKLTB4YmQsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI1LCAweDBiLCAweDRjLCAweDY3LCAweDY4LCAweDAwLCAweDJmLCAweDBmLCAweGQwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHgxMiwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwYSwgMHhkMSwgMHg2MCwgMHg2OCwgMHhjMCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4NjAsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzMsIDB4ZmIsIDB4MDAsIDB4MjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDIwLCAweGZhLCAweGU3LCAweDAwLCAweDAwLAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywgMHhmZSwgMHgxZCwgMHg0OSwgMHgzNiwKLTB4MzAsIDB4NzgsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MTksIDB4ODUsIDB4OGIsIDB4MzMsIDB4NGMsIDB4MzQsIDB4NGIsCi0weDlkLCAweDQyLCAweDNjLCAweGQwLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweDJhLCAweDFjLCAweDAwLCAweGYwLAotMHgxZCwgMHhmOSwgMHgzMSwgMHg0OCwgMHg4MCwgMHg2YSwgMHg1OCwgMHgyMSwgMHg2OSwgMHg0MywgMHg0MCwgMHgxOCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDJjLCAweDRkLCAweDAxLCAweDI4LCAweDFhLCAweGQxLCAweDMwLCAweDc4LCAweGMwLCAweDE5LCAweGMxLCAweDFkLAotMHgxOSwgMHgzMSwgMHgwOCwgMHg3YSwgMHgzYSwgMHg2OCwgMHg4MCwgMHgxOCwgMHgwOSwgMHg3YiwgMHhlYSwgMHgxZCwKLTB4MjEsIDB4MzIsIDB4MDAsIDB4ZjAsIDB4ZTMsIDB4ZmMsIDB4MzAsIDB4NzgsIDB4YzAsIDB4MTksIDB4MjAsIDB4MzAsCi0weDAwLCAweDc5LCAweDM5LCAweDY4LCAweDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDAwLCAweDIwLAotMHgwMCwgMHgyMywgMHg0MiwgMHgwMCwgMHg4YiwgMHg1MiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwgMHhmYSwgMHhkMywKLTB4YTAsIDB4ODgsIDB4NDEsIDB4MDcsIDB4MGIsIDB4ZDEsIDB4MjEsIDB4ODksIDB4MDksIDB4MTgsIDB4NzgsIDB4NjgsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDgxLCAweDQyLCAweDA0LCAweGQ4LCAweDYxLCAweDg5LCAweGUyLCAweDg4LAotMHg4OSwgMHgxOCwgMHg4MSwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMCwgMHgyMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MjEsIDB4MWMsIDB4MTQsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmUsIDB4ZjcsIDB4NWEsIDB4ZmYsCi0weDAxLCAweDIyLCAweDUyLCAweDA0LCAweDc4LCAweDY4LCAweDAyLCAweDQzLAotMHgwMSwgMHgyMCwgMHgzOSwgMHg2OCwgMHhmZSwgMHhmNywgMHg1MiwgMHhmZiwgMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwKLTB4NzgsIDB4NjgsIDB4MDIsIDB4NDMsIDB4MDAsIDB4MjAsIDB4MzksIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NGEsIDB4ZmYsCi0weDBiLCAweDQ5LCAweDBjLCAweDRhLCAweDAxLCAweDIwLCAweGZlLCAweGY3LCAweDQ1LCAweGZmLCAweDAxLCAweDIwLAotMHhlOSwgMHgxZCwgMHgxOSwgMHgzMSwgMHg0OCwgMHg3MSwgMHgwMiwgMHgyMSwgMHhlYSwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4NTEsIDB4NjIsIDB4ZDksIDB4ZTcsIDB4MjgsIDB4YWMsIDB4MjAsIDB4NDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDU0LCAweDAwLCAweDAzLCAweDAwLAotMHgxNCwgMHhhYywgMHgyMCwgMHg0MCwgMHgxNCwgMHgwMCwgMHgwNywgMHgwMCwgMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwKLTB4MDAsIDB4MjEsIDB4NGYsIDB4NDgsIDB4YzIsIDB4MWQsIDB4ZjksIDB4MzIsIDB4NTEsIDB4NjIsIDB4MDEsIDB4MjEsCi0weGM5LCAweDA0LCAweDRkLCAweDRhLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGMxLCAweDFkLCAweDE5LCAweDMxLAotMHg0OSwgMHg3OSwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMSwgMHg0YSwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMywgMHhmMCwKLTB4OWIsIDB4ZmIsIDB4ODcsIDB4ZTAsIDB4NDUsIDB4NDgsIDB4NDcsIDB4NjgsIDB4ZmMsIDB4MWQsIDB4NDksIDB4MzQsCi0weDIxLCAweDc4LCAweDQ4LCAweDAwLCAweGMwLCAweDE5LCAweDgwLCAweDhiLCAweDQ0LCAweDRhLCAweDkyLCAweDZhLAotMHg1OCwgMHgyMywgMHg1OCwgMHg0MywgMHgxNSwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlYSwgMHgxZCwKLTB4MDUsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MDgsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsCi0weGZmLCAweDIzLCAweDFiLCAweDAyLCAweDJiLCAweDQwLCAweDFiLCAweDBhLCAweDNjLCAweDRkLCAweDAxLCAweDJiLAotMHgyNCwgMHhkMSwgMHhjOCwgMHgxOSwgMHhjMSwgMHgxZCwgMHgxOSwgMHgzMSwgMHgwOCwgMHg3YSwgMHgzYSwgMHg2OCwKLTB4ODAsIDB4MTgsIDB4MzksIDB4NGEsIDB4MDksIDB4N2IsIDB4MDAsIDB4ZjAsIDB4YzUsIDB4ZmMsIDB4MjAsIDB4NzgsCi0weGMwLCAweDE5LCAweDIwLCAweDMwLCAweDAwLCAweDc5LCAweDM5LCAweDY4LCAweDQxLCAweDE4LCAweDAwLCAweDIwLAotMHg4MiwgMHgwMCwgMHg1MywgMHgxOSwgMHg5YiwgMHg2ZSwgMHg2ZSwgMHg0NiwgMHhiMywgMHg1MCwgMHgwMSwgMHgzMCwKLTB4MDMsIDB4MjgsIDB4ZjcsIDB4ZDMsIDB4Y2EsIDB4MWQsIDB4MDUsIDB4MzIsIDB4NjksIDB4NDYsIDB4MDAsIDB4MjAsCi0weDQzLCAweDAwLCAweGNkLCAweDVhLCAweGMwLCAweDQ2LCAweGQ1LCAweDUyLCAweDAxLCAweDMwLCAweDA2LCAweDI4LAotMHhmOCwgMHhkMywgMHgyZCwgMHhlMCwgMHgwMiwgMHgyYiwgMHgyYiwgMHhkMSwgMHgxMSwgMHgwYSwgMHgyOSwgMHhkMywKLTB4MDAsIDB4MjEsIDB4OGEsIDB4MDAsIDB4NTMsIDB4MTksIDB4OWIsIDB4NmUsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsCi0weDAxLCAweDMxLCAweDAzLCAweDI5LCAweGY3LCAweGQzLCAweDIxLCAweDc4LCAweDQ5LCAweDAwLCAweGM5LCAweDE5LAotMHgwOSwgMHg4ZiwgMHgzYSwgMHg2OCwgMHg4YiwgMHgxOCwgMHg2YSwgMHg0NiwgMHgwMCwgMHgyMSwgMHg0ZCwgMHgwMCwKLTB4NTYsIDB4NWIsIDB4YzAsIDB4NDYsIDB4NWUsIDB4NTMsIDB4MDEsIDB4MzEsIDB4MDYsIDB4MjksIDB4ZjgsIDB4ZDMsCi0weDE5LCAweDQ5LCAweDhhLCAweDZhLCAweDEzLCAweDE4LCAweDFhLCAweDZkLCAweDAwLCAweDlkLCAweDU1LCAweDQwLAotMHgxOSwgMHg0YSwgMHhkNiwgMHg2OCwgMHg3NSwgMHg0MCwgMHgxZCwgMHg2NSwgMHg4OSwgMHg2YSwgMHgwOCwgMHgxOCwKLTB4NDEsIDB4NmQsIDB4MDIsIDB4OWIsIDB4NTksIDB4NDAsIDB4OTIsIDB4NjksIDB4NTEsIDB4NDAsIDB4NDEsIDB4NjUsCi0weDIwLCAweDc4LCAweDQxLCAweDFlLCAweDIxLCAweDcwLCAweDAwLCAweDI4LCAweDBkLCAweGQwLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHhmNCwgMHhmZSwgMHgwMCwgMHgyOCwgMHgwZCwgMHhkMSwgMHgwOCwgMHg0YSwgMHg1MCwgMHg2OCwKLTB4YzAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YTQsIDB4ZmEsCi0weDAyLCAweGUwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDczLCAweGZhLCAweDAxLCAweGYwLCAweGRlLCAweGZhLAotMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MzgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDk0LCAweDA2LCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHg2OSwgMHg0YiwgMHg5ZiwgMHg2YSwgMHg1OCwgMHgyMywgMHg1YSwgMHg0MywKLTB4YmEsIDB4MTgsIDB4YzMsIDB4MWQsIDB4NDksIDB4MzMsIDB4MWYsIDB4NzgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGQ0LCAweDFkLCAweDAxLCAweDM0LCAweDIzLCAweDQzLCAweDFkLCAweDY4LCAweDQzLCAweDY4LCAweDFjLCAweDA0LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHgwNSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4MWMsIDB4NDMsIDB4NDIsIDB4MjMsIDB4MWMsIDB4NDMsIDB4MGMsIDB4NjAsIDB4ZmYsIDB4MjYsIDB4MzYsIDB4MDIsCi0weDJlLCAweDQwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDllLCAweDQyLCAweDc0LCAweGQxLCAweDZiLCAweDBjLAotMHgyYiwgMHhkMywgMHhjMywgMHgxOSwgMHgyMCwgMHgzMywgMHgxYiwgMHg3OSwKLTB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MWIsIDB4OGYsIDB4NGMsIDB4ODksCi0weDFiLCAweDFiLCAweGNiLCAweDgwLCAweDAwLCAweDI0LCAweGE2LCAweDAwLCAweDAxLCAweDk2LCAweGIzLCAweDE4LAotMHhkZSwgMHgxZCwgMHgwOSwgMHgzNiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4MDEsIDB4OWUsIDB4NzYsIDB4MTgsIDB4NzMsIDB4NjEsIDB4MDEsIDB4MzQsIDB4MDUsIDB4MmMsIDB4ZjAsIDB4ZDMsCi0weDAwLCAweDI0LCAweGE2LCAweDAwLCAweDAwLCAweDk2LCAweGIzLCAweDE4LCAweGRlLCAweDFkLCAweDFkLCAweDM2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwMCwgMHg5ZSwgMHg3NiwgMHgxOCwKLTB4YjMsIDB4NjIsIDB4MDEsIDB4MzQsIDB4MDUsIDB4MmMsIDB4ZjAsIDB4ZDMsIDB4MDYsIDB4ZTAsIDB4MDAsIDB4MjMsCi0weDRiLCAweDgxLCAweGNiLCAweDgwLCAweDQwLCAweDIzLCAweDljLCAweDQzLCAweDBjLCAweDYwLCAweDIzLCAweDFjLAotMHg2YiwgMHgwZSwgMHg0YSwgMHhkMywgMHhjMywgMHgxOSwgMHgyMCwgMHgzMywgMHgxYiwgMHg3OSwgMHgxMCwgMHgzMywKLTB4MGIsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MWIsIDB4OGYsIDB4MGYsIDB4ODksIDB4ZGIsIDB4MWIsCi0weDhiLCAweDgwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDM1LCAweDM0LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhjYiwgMHg2MywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwKLTB4MzEsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NjQsIDB4YWIsIDB4MGUsCi0weDIxLCAweGQyLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDNkLCAweDM0LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg0YiwgMHg2NCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwKLTB4MzksIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OGIsIDB4NjQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGQ0LCAweDFkLCAweDQ1LCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LAotMHhjYiwgMHg2NCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHg0MSwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4MGYsIDB4ZTAsIDB4ZmIsIDB4MWYsCi0weDAxLCAweDNiLCAweDFiLCAweDA0LCAweDFiLCAweDBjLCAweDA3LCAweDY4LCAweGZmLCAweDE4LCAweDAzLCAweDY5LAotMHgwOCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHgzNCwgMHhmOCwgMHgyYywgMHhlMCwgMHgwMCwgMHgyMywKLTB4MGIsIDB4ODEsIDB4OGIsIDB4ODAsIDB4MjgsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4OGIsIDB4ODAsIDB4MGIsIDB4ODEsCi0weGMzLCAweDE5LCAweDIwLCAweDMzLCAweDFiLCAweDdhLCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDdiLCAweDAwLAotMHgxOCwgMHgxOCwgMHgwMCwgMHg4ZSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg4MCwgMHgwMCwgMHgyMCwgMHg4NywgMHgwMCwKLTB4YmIsIDB4MTgsIDB4ZGMsIDB4MWQsIDB4MDksIDB4MzQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsCi0weDFiLCAweDY4LCAweDdmLCAweDE4LCAweDdiLCAweDYxLCAweDAxLCAweDMwLCAweDA1LCAweDI4LCAweGYyLCAweGQzLAotMHgwMCwgMHgyMCwgMHg4NywgMHgwMCwgMHhiYiwgMHgxOCwgMHhkYywgMHgxZCwgMHgxZCwgMHgzNCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4N2YsIDB4MTgsIDB4YmIsIDB4NjIsIDB4MDEsIDB4MzAsCi0weDA1LCAweDI4LCAweGYyLCAweGQzLCAweDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgxZiwgMHgxYywgMHgzYiwgMHgwYywgMHgxOCwgMHhkMiwKLTB4MTcsIDB4NmQsIDB4MTEsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZGYsIDB4NjAsIDB4NTIsIDB4NmQsIDB4YzAsIDB4NDYsCi0weDFhLCAweDYxLCAweGM3LCAweDYwLCAweDFhLCAweDY5LCAweGMwLCAweDQ2LCAweDAyLCAweDYxLCAweGQ4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHhkOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg0OCwgMHg4MCwgMHgxOCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4ODgsIDB4ODAsIDB4MTgsIDB4NjksIDB4MDAsIDB4MGMsIDB4YzgsIDB4ODAsIDB4ODAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDRhLCAweDg4LCAweDEyLCAweDA0LCAweDBiLCAweDg4LCAweDFhLCAweDQzLCAweGMyLCAweDYwLAotMHg4YSwgMHg4OCwgMHhjOSwgMHg4OCwgMHgwOSwgMHgwNCwgMHgxMSwgMHg0MywgMHgwMSwgMHg2MSwgMHhmMiwgMHhlNywKLTB4MmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjEsIDB4YjUsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MjIsIDB4MDgsIDB4OTgsCi0weDAwLCAweDZhLCAweDA4LCAweDliLCAweDk5LCAweDY4LCAweDQ5LCAweDBhLCAweDAyLCAweGQzLCAweDAxLCAweDI3LAotMHhmZiwgMHgwMywgMHgwMCwgMHhlMCwgMHgwMCwgMHgyNywgMHgwMywgMHg4YiwgMHgwMCwgMHgyYiwgMHgxOSwgMHhkMCwKLTB4YTMsIDB4NDksIDB4ODksIDB4NmEsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsIDB4NjMsIDB4NDMsIDB4YzksIDB4MTgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDU4LCAweDM5LCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHgwMiwgMHgyOSwgMHgwMiwgMHhkMSwgMHgwOCwgMHgyMywgMHgxZiwgMHg0MywgMHgwNywgMHhlMCwKLTB4NDEsIDB4OGIsIDB4MDAsIDB4MjksIDB4MDIsIDB4ZDAsIDB4MGMsIDB4MjMsCi0weDFmLCAweDQzLCAweDAxLCAweGUwLCAweDA0LCAweDIzLCAweDFmLCAweDQzLCAweDgzLCAweDhhLCAweDAwLCAweDJiLAotMHgxOCwgMHhkMCwgMHg5NSwgMHg0OSwgMHg4OSwgMHg2YSwgMHgxYywgMHgxYywgMHg1OCwgMHgyMywgMHg2MywgMHg0MywKLTB4YzksIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTgsIDB4MzksIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAyLCAweDI5LCAweDAxLCAweGQxLCAweDBmLCAweDQzLCAweDA3LCAweGUwLAotMHhjMSwgMHg4YSwgMHgwMCwgMHgyOSwgMHgwMiwgMHhkMCwgMHgwMywgMHgyMywgMHgxZiwgMHg0MywgMHgwMSwgMHhlMCwKLTB4MDEsIDB4MjMsIDB4MWYsIDB4NDMsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDcsIDB4OTEsIDB4NGIsIDB4ODksCi0weDBjLCAweDg5LCAweDFjLCAweDE5LCAweDI0LCAweDA0LCAweDI0LCAweDBjLCAweDA4LCAweDlkLCAweDJkLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5NSwgMHhjOSwgMHg4OCwgMHg3ZCwgMHgwOCwgMHgxYSwgMHhkMywgMHgxYSwgMHgxYywKLTB4YzMsIDB4MWQsIDB4MTksIDB4MzMsIDB4MWEsIDB4NzIsIDB4MDcsIDB4OWEsIDB4OTIsIDB4ODksIDB4YzAsIDB4NDYsCi0weDFhLCAweDczLCAweDA3LCAweDlhLCAweDEyLCAweDg5LCAweGMwLCAweDQ2LCAweDAyLCAweDg2LCAweDA0LCAweDg3LAotMHg4MiwgMHg4YSwgMHgwMSwgMHgzYSwgMHg4MiwgMHg4MywgMHgwMSwgMHgyMiwgMHgxOSwgMHg3MSwgMHgwOCwgMHg5YiwKLTB4MWIsIDB4NjgsIDB4NWIsIDB4MTgsIDB4NWIsIDB4NzgsIDB4OWIsIDB4MDAsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsCi0weDA4LCAweDMzLCAweDU5LCAweDE4LCAweGJiLCAweDA4LCAweDQ3LCAweGQzLCAweDA3LCAweDliLCAweDViLCAweDg5LAotMHg4NSwgMHgxOCwgMHgwNiwgMHg5NSwgMHgyMCwgMHgzNSwgMHgyYiwgMHg3MiwgMHgwNywgMHg5YiwgMHg5YiwgMHg4OSwKLTB4YzAsIDB4NDYsIDB4MmIsIDB4NzMsIDB4MDcsIDB4OWIsIDB4MWIsIDB4ODksIDB4MmUsIDB4MWMsIDB4NTUsIDB4MDAsCi0weDJkLCAweDE4LCAweDA1LCAweDk1LCAweDJiLCAweDg2LCAweDAwLCAweDJhLCAweDAxLCAweGQwLCAweGMzLCAweDhhLAotMHgwMCwgMHhlMCwgMHg4MywgMHg4YSwgMHgwMSwgMHgzYiwgMHgwNSwgMHg5ZCwgMHhjMCwgMHg0NiwgMHhhYiwgMHg4MywKLTB4MzEsIDB4NzEsIDB4NjUsIDB4NGIsIDB4OWQsIDB4NmEsIDB4MDUsIDB4OWIsIDB4OWUsIDB4OGIsIDB4NTgsIDB4MjMsCi0weDczLCAweDQzLCAweGViLCAweDE4LCAweGRkLCAweDFkLCAweDAxLCAweDM1LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwgMHgyYiwgMHgwZSwgMHg1YiwgMHgwNiwgMHgwMSwgMHhkMSwgMHgwOCwgMHgzMSwKLTB4MDAsIDB4ZTAsIDB4MTAsIDB4MzEsIDB4ODEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MWQsIDB4NDAsIDB4OWQsIDB4NDIsCi0weDAzLCAweGQxLCAweGUzLCAweDFmLCAweDA1LCAweDNiLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDA1LCAweDliLAotMHhjMCwgMHg0NiwgMHgxYywgMHg4NywgMHgwOCwgMHg5YiwgMHgxYiwgMHg2OCwgMHgxYiwgMHgxOSwgMHgxMCwgMHgzYiwKLTB4OWIsIDB4N2IsIDB4MDYsIDB4OWQsIDB4NDAsIDB4MzUsIDB4MmIsIDB4NzAsIDB4MmIsIDB4NzgsIDB4MDIsIDB4MzMsCi0weGUzLCAweDFhLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDAxLCAweDMyLCAweGJiLCAweDA4LCAweDliLCAweDA3LAotMHg2ZCwgMHhkMCwgMHg4MywgMHgxOCwgMHgyMCwgMHgzMywgMHgwNCwgMHg5MywgMHgxOSwgMHg3MiwgMHgwMSwgMHg5YiwKLTB4NWQsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDcsCi0weDFiLCAweDBmLCAweDliLCAweDAwLCAweDA0LCAweDllLCAweGMwLCAweDQ2LCAweDMzLCAweDczLCAweDAwLCAweDk1LAotMHgyYiwgMHg3OCwgMHgxYiwgMHgwNywgMHgxYiwgMHgwZiwgMHg5YiwgMHgwMCwgMHgwNCwgMHg5ZCwgMHhjMCwgMHg0NiwKLTB4MmIsIDB4NzMsIDB4MDAsIDB4OWQsIDB4ZWIsIDB4NzgsIDB4YWQsIDB4NzgsIDB4MWIsIDB4MDIsIDB4MWQsIDB4NDMsCi0weDJiLCAweDAyLCAweDJkLCAweDBhLCAweDJkLCAweDA2LCAweDJkLCAweDBlLCAweDJiLCAweDQzLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgyYiwgMHg4NiwgMHgwNCwgMHg5YiwgMHhjMCwgMHg0NiwgMHg1OSwgMHg3MiwgMHgwNCwgMHg5YiwKLTB4MWIsIDB4N2IsIDB4MmUsIDB4MWMsIDB4MDQsIDB4OWQsIDB4YzAsIDB4NDYsIDB4NmIsIDB4NzMsIDB4MzMsIDB4OGUsCi0weGMwLCAweDQ2LCAweDczLCAweDg2LCAweDAwLCAweDlkLCAweDJiLCAweDc4LCAweDFiLCAweDA3LCAweDFiLCAweDBmLAotMHg5YiwgMHgwMCwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHg1OSwgMHgxOCwgMHgwNCwgMHgyNSwgMHgzZCwgMHg0MCwKLTB4MGUsIDB4ZDAsIDB4MzQsIDB4ODcsIDB4MDMsIDB4OGIsIDB4MDEsIDB4M2IsIDB4YjMsIDB4ODMsIDB4MTMsIDB4MWMsCi0weDFiLCAweDE4LCAweDIwLCAweDMzLCAweDE5LCAweDcxLCAweDAxLCAweDliLCAweDViLCAweDE4LCAweDViLCAweDc4LAotMHg5YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHgwOCwgMHgzMSwgMHgwMSwgMHgzMiwgMHgzYiwgMHgwOSwgMHgzNywgMHhkMywKLTB4MDAsIDB4MmQsIDB4MDEsIDB4ZDAsIDB4NDMsIDB4OGIsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4OGIsIDB4NTUsIDB4MDAsCi0weDJkLCAweDE4LCAweDAxLCAweDNiLCAweGFiLCAweDgzLCAweDgzLCAweDE4LCAweDAzLCAweDkzLCAweDIwLCAweDMzLAotMHgxOSwgMHg3MSwgMHgyMCwgMHg0YiwgMHg5ZCwgMHg2YSwgMHg1MywgMHgwMCwgMHgxYiwgMHgxOCwgMHgwMiwgMHg5MywKLTB4OWUsIDB4OGIsIDB4NTgsIDB4MjMsIDB4NzMsIDB4NDMsIDB4ZWIsIDB4MTgsIDB4ZGQsIDB4MWQsIDB4MDEsIDB4MzUsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLCAweDFkLCAweDY4LAotMHgyYiwgMHgwZSwgMHg1YiwgMHgwNiwgMHgwMiwgMHhkMSwgMHgwOCwgMHgzMSwgMHgwMSwgMHhlMCwgMHgxNSwgMHhlMCwKLTB4MTAsIDB4MzEsIDB4ODEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MWQsIDB4NDAsIDB4OWQsIDB4NDIsIDB4MDMsIDB4ZDEsCi0weGUzLCAweDFmLCAweDA1LCAweDNiLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDAyLCAweDliLCAweGMwLCAweDQ2LAotMHgxYywgMHg4NywgMHgwOCwgMHg5YiwgMHgxYiwgMHg2OCwgMHgxYiwgMHgxOSwgMHgxMCwgMHgzYiwgMHg5YiwgMHg3YiwKLTB4MDMsIDB4OWMsIDB4NDAsIDB4MzQsIDB4MjMsIDB4NzAsIDB4MDEsIDB4MzIsIDB4MDcsIDB4OWIsIDB4YzAsIDB4NDYsCi0weGQ5LCAweDgwLCAweDUxLCAweDFlLCAweGMzLCAweDFkLCAweDQ5LCAweDMzLCAweDE5LCAweDcwLCAweDA3LCAweDYxLAotMHgwNCwgMHgyYSwgMHgwNiwgMHhkMiwgMHgwNiwgMHg0OSwgMHg1MywgMHgwMCwgMHgxYiwgMHgxOCwgMHg5OSwgMHg4MywKLTB4MDEsIDB4MzIsIDB4MDQsIDB4MmEsIDB4ZjksIDB4ZDMsIDB4MDksIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4YywgMHhiMCwgMHgwNywgMHgxYywgMHgxMiwgMHg0OCwgMHgwMSwgMHg2OCwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4NjAsIDB4MzgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4NzgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAxLCAweDkwLCAweGI4LCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDBkLCAweDQ4LAotMHg0MSwgMHg2OCwgMHhjOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4NGYsIDB4ZjgsIDB4YjgsIDB4NjgsIDB4NDAsIDB4MDksIDB4MDYsIDB4ZDMsIDB4MTAsIDB4MjMsIDB4MDIsIDB4OTgsCi0weDE4LCAweDQzLCAweDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAyLCAweGYwLCAweGUxLCAweGZmLCAweDY4LCAweDQ2LAotMHgwMiwgMHhmMCwgMHg5YSwgMHhmZSwgMHgwYywgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4OGMsIDB4YjAsCi0weDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY4LCAweDA1LCAweDRiLCAweDE5LCAweDQzLAotMHgwMSwgMHg5MSwgMHgwMCwgMHhmMCwgMHgyZiwgMHhmOCwgMHg2OCwgMHg0NiwgMHgwMiwgMHhmMCwgMHg4NCwgMHhmZSwKLTB4MGMsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCi0weDAyLCAweDZhLCAweDAzLCAweDY4LCAweGMwLCAweDQ2LCAweDEzLCAweDYwLCAweDQwLCAweDY4LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MCwgMHg0MCwgMHgzMiwgMHg0OCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5MCwgMHg4MCwgMHhjOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ZDAsIDB4ODAsIDB4NDgsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4ODEsIDB4ODgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDUwLCAweDgxLCAweDA4LCAweDdlLCAweGMwLCAweDQ2LCAweDkwLCAweDczLCAweDA4LCAweDY5LAotMHhjMCwgMHg0NiwgMHg5MCwgMHg4MSwgMHg3MCwgMHg0NywgMHgwNCwgMHg0OSwgMHgwOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4MDAsIDB4ZDEsIDB4NzAsIDB4NDcsIDB4YzIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjAsIDB4ZmEsIDB4ZTcsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAyLCAweDQ5LCAweDBhLCAweDY4LCAweGMwLCAweDQ2LCAweGMyLCAweDYwLAotMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNCwgMHgwMCwgMHgyMiwKLTB4MTIsIDB4NGYsIDB4N2MsIDB4N2YsIDB4MDEsIDB4MzQsIDB4N2MsIDB4NzcsIDB4MDMsIDB4MjMsIDB4ZmMsIDB4MWQsCi0weDE5LCAweDM0LCAweDM4LCAweDYyLCAweDc5LCAweDYyLCAweDIzLCAweDcyLCAweDBlLCAweDRjLCAweDI1LCAweDY4LAotMHg2YiwgMHgwYywgMHgwNSwgMHhkMiwgMHgyMywgMHg2OCwgMHgxYiwgMHgwYywgMHgxMCwgMHhkMSwgMHgyNCwgMHg2OCwKLTB4YTMsIDB4MGEsIDB4MGQsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4MGEsIDB4NGYsIDB4YzAsIDB4NDYsIDB4ZmIsIDB4NjIsCi0weDA5LCAweDRmLCAweDBhLCAweDRiLCAweGMwLCAweDQ2LCAweGRmLCAweDYwLCAweDk5LCAweDYwLCAweDU4LCAweDYwLAotMHgxMCwgMHgxYywgMHgxOCwgMHg2MCwgMHgwMSwgMHgzMiwgMHhmYiwgMHhlNywgMHgxMCwgMHgxYywgMHgzOCwgMHg2NCwKLTB4MDEsIDB4MzIsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weGMwLCAweDAwLCAweDE4LCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAotMHhmMCwgMHhiNSwgMHg0NywgMHg0ZiwgMHgzOCwgMHg2OCwgMHg0NywgMHg0ZSwgMHg0NywgMHg0ZCwgMHgwNywgMHgyMywKLTB4NWIsIDB4MDIsIDB4ZWMsIDB4MTgsIDB4MDAsIDB4MjgsIDB4MWQsIDB4ZDEsIDB4MjAsIDB4NmIsIDB4MDEsIDB4MzAsCi0weDIwLCAweDYzLCAweDQ0LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDQzLCAweDQ4LCAweDQxLCAweDY5LAotMHgwMCwgMHgyOSwgMHgxMywgMHhkMCwgMHhjMSwgMHgxZCwgMHg2OSwgMHgzMSwgMHgwOSwgMHg3YiwgMHgwMCwgMHgyOSwKLTB4MGUsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDEsIDB4NmQsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDgxLCAweDYxLCAweGMyLCAweDY5LCAweDkxLCAweDQyLCAweDA0LCAweGQwLCAweGYxLCAweDZjLAotMHgwMSwgMHgzMSwgMHhmMSwgMHg2NCwgMHgwMSwgMHhmMCwgMHg1MCwgMHhmZSwKLTB4MzgsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MTcsIDB4ZDEsIDB4MzcsIDB4NDgsIDB4NDEsIDB4NjksIDB4MDAsIDB4MjksCi0weDEzLCAweGQwLCAweGMxLCAweDFkLCAweDY5LCAweDMxLCAweDA5LCAweDdiLCAweDAwLCAweDI5LCAweDBlLCAweGQwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMSwgMHg2ZCwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4ODEsIDB4NjEsIDB4YzIsIDB4NjksIDB4OTEsIDB4NDIsIDB4MDQsIDB4ZDAsIDB4ZjEsIDB4NmMsIDB4MDEsIDB4MzEsCi0weGYxLCAweDY0LCAweDAxLCAweGYwLCAweDM1LCAweGZlLCAweDM4LCAweDY4LCAweDAyLCAweDI4LCAweDJmLCAweGQxLAotMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwgMHhlZSwgMHgxOCwgMHg3MCwgMHg3YiwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NzMsIDB4MDAsIDB4ZjAsIDB4NGEsIDB4ZmQsIDB4MzAsIDB4N2IsIDB4MDAsIDB4MjgsCi0weDAyLCAweGQwLCAweDc4LCAweDY4LCAweDAyLCAweGYwLCAweGFhLCAweGZmLCAweDFiLCAweDIzLCAweGRiLCAweDAxLAotMHhlOCwgMHgxOCwgMHhjMCwgMHg4YiwgMHgwNCwgMHgyNiwgMHgwNiwgMHg0MCwgMHhlMCwgMHg2YSwgMHhiMCwgMHg0MiwKLTB4MTQsIDB4ZDAsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4ZjgsIDB4NjAsIDB4MTksIDB4MjgsIDB4MTEsIDB4ZDMsCi0weDFiLCAweDQ4LCAweDAxLCAweDdiLCAweDAwLCAweDI5LCAweDBkLCAweGQxLCAweGZmLCAweDMwLCAweDQxLCAweDMwLAotMHg0MCwgMHg3OCwgMHgwMCwgMHgyOCwgMHgwOCwgMHhkMSwgMHhiOCwgMHg2OCwgMHgwMiwgMHhmMCwgMHg5MCwgMHhmZiwKLTB4MDAsIDB4MjAsIDB4ZjgsIDB4NjAsIDB4ZTYsIDB4NjIsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4ZjgsIDB4NjAsCi0weDM4LCAweDY4LCAweDAzLCAweDI4LCAweDBiLCAweGQxLCAweGVjLCAweDFkLCAweDc5LCAweDM0LCAweGUwLCAweDZiLAotMHg4MCwgMHgwOCwgMHgwMiwgMHhkMywgMHgwMiwgMHgyMCwgMHgwMiwgMHhmMCwgMHgwNywgMHhmYywgMHgwMiwgMHgyMywKLTB4ZTAsIDB4NmIsIDB4OTgsIDB4NDMsIDB4ZTAsIDB4NjMsIDB4MzgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MzgsIDB4NjAsCi0weDAzLCAweDI4LCAweDAxLCAweGQ5LCAweDAwLCAweDIwLCAweDM4LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgzYywgMHgwNCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGU0LCAweDJjLCAweDAwLCAweDgwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweGIwLCAweGI0LCAweDFkLCAweDQ4LAotMHg4NCwgMHg4YSwgMHgxZCwgMHg0YSwgMHgxMywgMHg4YSwgMHhjMSwgMHgxZCwgMHgwOSwgMHgzMSwgMHgwMSwgMHgyNywKLTB4OWMsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4NDMsIDB4OGEsIDB4NTQsIDB4OGEsIDB4YTMsIDB4NDIsIDB4MTAsIDB4ZDAsCi0weDBiLCAweDc4LCAweDAwLCAweDJiLCAweDBkLCAweGQwLCAweDRiLCAweDc4LCAweDAwLCAweDJiLCAweDBhLCAweGQwLAotMHg0NCwgMHg4YiwgMHg5MywgMHg4YSwgMHg5YywgMHg0MiwgMHgwNCwgMHhkYywgMHgxMywgMHg0YiwgMHhjMCwgMHg0NiwKLTB4NWYsIDB4NjAsIDB4OTcsIDB4ODIsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MzMsIDB4OTMsIDB4ODIsIDB4YzMsIDB4OGIsCi0weDVjLCAweDFjLCAweGM0LCAweDgzLCAweDg0LCAweDhiLCAweGEzLCAweDQyLCAweDBlLCAweGRiLCAweDg0LCAweDhhLAotMHgwNSwgMHg4YiwgMHgwMCwgMHgyMywgMHhhYywgMHg0MiwgMHgwNSwgMHhkYSwgMHg0NCwgMHg4YSwgMHhjNSwgMHg4YSwKLTB4YWMsIDB4NDIsIDB4MDEsIDB4ZGEsIDB4NGIsIDB4NzAsIDB4MDAsIDB4ZTAsIDB4NGYsIDB4NzAsIDB4NDMsIDB4ODIsCi0weDgzLCAweDgyLCAweGMzLCAweDgzLCAweDQxLCAweDhhLCAweGMwLCAweDQ2LCAweDUxLCAweDgyLCAweDgwLCAweDhhLAotMHhjMCwgMHg0NiwgMHgxMCwgMHg4MiwgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4M2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4ZjcsIDB4YjUsIDB4OTEsIDB4YjAsCi0weDZiLCAweDQ2LCAweDg0LCAweDFlLCAweDEyLCAweDk5LCAweDE0LCAweDI5LCAweDFhLCAweGQ5LCAweDAwLCAweDIwLAotMHg4MSwgMHgwMCwgMHg2NywgMHg1OCwgMHhjMCwgMHg0NiwgMHg1NywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsIDB4ZjYsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDUsIDB4MjAsIDB4ODcsIDB4MDAsCi0weGQ2LCAweDU5LCAweDRmLCAweDFjLCAweDNkLCAweDA2LCAweDJkLCAweDBlLCAweDBmLCAweDFjLCAweGJmLCAweDAwLAotMHhkZSwgMHg1MSwgMHgyOSwgMHgxYywgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwKLTB4ZjEsIDB4ZDMsIDB4MDksIDB4ZTAsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NjMsIDB4NTgsIDB4YzAsIDB4NDYsCi0weDUzLCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA2LCAweDI4LCAweGY2LCAweGQzLAotMHgwMCwgMHgyMCwgMHhlMCwgMHg3MCwgMHgyMCwgMHg3MiwgMHg2MCwgMHg3MiwgMHhhMCwgMHg3MiwgMHgyMCwgMHg3MywKLTB4NjAsIDB4NzMsIDB4MTIsIDB4OTksIDB4MTQsIDB4MjksIDB4MzcsIDB4ZDksIDB4NjksIDB4NDYsIDB4OGUsIDB4MWMsCi0weDkxLCAweDc4LCAweDA5LCAweDA3LCAweDA5LCAweDBmLCAweDg5LCAweDAwLCAweDE0LCAweDM5LCAweDBkLCAweDA2LAotMHgyZCwgMHgxNiwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZCwgMHgxYiwgMHhkZCwgMHhmMCwgMHgxOSwgMHgxMCwgMHhhOSwKLTB4MDAsIDB4ZjAsIDB4M2QsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGUsIDB4ZDAsCi0weDAwLCAweDIwLCAweDEwLCAweGE5LCAweDA5LCAweDc4LCAweDAwLCAweDI5LCAweDA5LCAweGRkLCAweDAwLCAweDIyLAotMHgzOSwgMHgxOCwgMHg3MiwgMHg1NCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgxMCwgMHhhOSwKLTB4MDksIDB4NzgsIDB4ODgsIDB4NDIsIDB4ZjYsIDB4ZGIsIDB4MTAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4MzgsIDB4MTgsCi0weDA3LCAweDA2LCAweDNmLCAweDBlLCAweGFmLCAweDQyLCAweGUzLCAweGRiLCAweDY4LCAweDQ2LCAweGUyLCAweDFkLAotMHgwZCwgMHgzMiwgMHgwMCwgMHgyMSwgMHhhYiwgMHgwOCwgMHg1ZiwgMHgxYywgMHgwOCwgMHhkMCwgMHg4YiwgMHgwMCwKLTB4YzQsIDB4NTgsIDB4YzAsIDB4NDYsIDB4ZDQsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsCi0weDhmLCAweDQyLCAweGY2LCAweGQ4LCAweDE0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg5MCwgMHhiNCwgMHg4NywgMHgxZSwgMHgwMCwgMHgyMCwgMHg4OSwgMHgwOCwgMHg0YiwgMHgxYywgMHgwOCwgMHhkMCwKLTB4ODEsIDB4MDAsIDB4NTQsIDB4NTgsIDB4YzAsIDB4NDYsIDB4N2MsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDgzLCAweDQyLCAweGY2LCAweGQ4LCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LAotMHgwMiwgMHg3OCwgMHhkMiwgMHgwNiwgMHhkMiwgMHgwZSwgMHgwMCwgMHgyMywgMHgwMSwgMHgyNywgMHgwMSwgMHgyYSwKLTB4MDEsIDB4ZGMsIDB4MGYsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NDAsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzAsCi0weDE0LCAweDJhLCAweDA0LCAweGQxLCAweDA4LCAweDQ4LCAweDAxLCAweDdhLCAweDAxLCAweDMxLCAweDAxLCAweDcyLAotMHgwNywgMHhlMCwgMHgwMiwgMHgyYSwgMHgwNSwgMHhkMCwgMHgwNSwgMHgyYSwgMHgwMywgMHhkMCwgMHgwNiwgMHgyYSwKLTB4MDEsIDB4ZDAsIDB4MTUsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4MTgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDM4LCAweDFjLCAweGZiLCAweGU3LCAweGUwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDBmLCAweDQ4LAotMHgwMSwgMHgyMywgMHgxYiwgMHgwNiwgMHg0MSwgMHg2OSwgMHg5OSwgMHg0MywgMHgxYSwgMHgwOSwgMHg0MSwgMHg2MSwKLTB4ZDEsIDB4NjAsIDB4MDAsIDB4MjEsIDB4YTEsIDB4MjIsIDB4NTIsIDB4MDMsIDB4OTEsIDB4NjEsIDB4MTksIDB4MWMsCi0weDA5LCAweDRhLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LAotMHg4MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHgwMiwgMHhmMCwgMHg2MSwgMHhmZSwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDQsIDB4NDgsIDB4NDEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4NDEsIDB4ODAsIDB4ZjgsIDB4ZTcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGUwLCAweDgyLCAweDIwLCAweDQwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHg4NiwgMHhiMCwgMHg5NSwgMHg0YSwgMHhkMCwgMHg2OCwKLTB4ZDcsIDB4MWQsIDB4NzksIDB4MzcsIDB4MDEsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MzgsIDB4ODksIDB4MDAsIDB4MjgsCi0weDA2LCAweGQxLCAweGQwLCAweDZmLCAweDAyLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLAotMHgxNCwgMHgyMCwgMHgzOCwgMHg4MSwgMHg4ZSwgMHg0YywgMHg2MSwgMHg2YSwgMHg4ZSwgMHg0OCwgMHhjMywgMHg2YiwKLTB4NTksIDB4MTgsIDB4YzEsIDB4NjMsIDB4YTAsIDB4NmEsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZDQsIDB4MTgsCi0weGEwLCAweDYyLCAweDIxLCAweDZhLCAweDA5LCAweDAzLCAweDA5LCAweDBiLCAweDgxLCAweDQyLCAweDA1LCAweGQxLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwNCwgMHg4NywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmMywgMHhlMCwKLTB4YmIsIDB4OGEsIDB4NTgsIDB4MWMsIDB4YjgsIDB4ODIsIDB4M2QsIDB4OGIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MjEsCi0weGFiLCAweDQyLCAweDA0LCAweGRiLCAweGQzLCAweDFkLCAweDg5LCAweDMzLCAweDU4LCAweDcwLCAweGI5LCAweDgyLAotMHhmOSwgMHg4MywgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHgwNSwgMHg5MywgMHg1YiwgMHg2OSwKLTB4MGYsIDB4MmIsIDB4NzMsIDB4ZDIsIDB4MDAsIDB4MjEsIDB4N2MsIDB4NGYsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjEsCi0weDIxLCAweDZhLCAweDhhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDRiLCAweDY4LCAweDFlLCAweDBjLAotMHgzNiwgMHgwNCwgMHhmZCwgMHgxZiwgMHgwOSwgMHgzZCwgMHgwMCwgMHgyZSwgMHgwNSwgMHhkMSwgMHgzYiwgMHgyYSwKLTB4MDMsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4OWEsIDB4NDIsIDB4MDEsIDB4ZDksIDB4YTgsIDB4NzMsCi0weGM4LCAweGUwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwgMHgwMywgMHhhOSwgMHgwOSwgMHg4OCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NzksIDB4ODIsIDB4NDksIDB4MDksIDB4MDUsIDB4MzEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsCi0weDY5LCAweDRlLCAweGMwLCAweDQ2LCAweDAyLCAweDk2LCAweDY5LCAweDQ4LCAweDQzLCAweDZhLCAweGMwLCAweDQ2LAotMHgwMSwgMHg5MywgMHg4MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MywgMHhjMiwgMHgxZCwgMHgxMSwgMHgzMiwKLTB4ODAsIDB4NjksIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4OTIsIDB4NjgsIDB4YjMsIDB4MDcsIDB4MWEsIDB4NDMsCi0weDEyLCAweDY4LCAweDkwLCAweDQyLCAweDAxLCAweGQxLCAweDAxLCAweDIwLAotMHgwZCwgMHhlMCwgMHg5MCwgMHg0MiwgMHgwNSwgMHhkOSwgMHgwMCwgMHg5YiwgMHgxOCwgMHgxYSwgMHgwMSwgMHg5YiwKLTB4ZDIsIDB4MWEsIDB4ODIsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MTIsIDB4MWEsIDB4MDEsIDB4MjAsIDB4MDksIDB4MDEsCi0weDkxLCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDIwLCAweDAxLCAweDI4LCAweDY1LCAweGQxLCAweDUxLCAweDQ5LAotMHgyMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHg2MiwgMHhkMCwgMHgwNSwgMHg5OSwgMHg0OCwgMHg2OSwgMHgwMSwgMHgzMCwKLTB4NDgsIDB4NjEsIDB4MDIsIDB4MjAsIDB4MjEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4ZjAsCi0weGE3LCAweGZjLCAweDc4LCAweDYzLCAweGJlLCAweDYwLCAweDQ5LCAweDQ5LCAweDIyLCAweDZhLCAweGEzLCAweDZiLAotMHhkMywgMHgxOCwgMHg2NiwgMHg2YiwgMHhiMywgMHg0MiwgMHgwMCwgMHhkOSwgMHgyMiwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4YmEsIDB4NjIsIDB4YmEsIDB4NmEsIDB4MGMsIDB4MzIsIDB4ZmEsIDB4NjIsIDB4MDAsIDB4MjIsIDB4ZmEsIDB4NjEsCi0weDAzLCAweGFhLCAweDUyLCAweDg4LCAweGQyLCAweDA5LCAweDAzLCAweGQzLCAweDAxLCAweDIyLCAweDAwLCAweGUwLAotMHg3YiwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgyMiwgMHg3YSwgMHg2MCwgMHg3YSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4MDIsIDB4NjAsIDB4NzgsIDB4OGEsIDB4NDEsIDB4NGUsIDB4NjAsIDB4MjgsIDB4MDQsIDB4ZGMsIDB4YjAsIDB4ODMsCi0weDc4LCAweDhhLCAweGMwLCAweDQ2LCAweGYwLCAweDgzLCAweDA4LCAweGUwLCAweDYwLCAweDIwLCAweGIwLCAweDgzLAotMHg3OSwgMHg4YSwgMHhmOCwgMHg2YSwgMHg0MiwgMHgxOCwgMHg2MywgMHg2YiwgMHg5YSwgMHg0MiwgMHgwMywgMHhkOCwKLTB4ZjEsIDB4ODMsIDB4MDAsIDB4MjIsIDB4M2EsIDB4NjMsIDB4MDUsIDB4ZTAsIDB4MjEsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDM5LCAweDYzLCAweDYxLCAweDZiLCAweDA4LCAweDFhLCAweGYwLCAweDgzLCAweDJkLCAweDQ5LCAweDc4LCAweDZiLAotMHg0MiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiYSwgMHg2MCwgMHg4MiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmYSwgMHg2MCwKLTB4MDIsIDB4NjksIDB4YzAsIDB4NDYsIDB4N2EsIDB4NjEsIDB4NDAsIDB4NjksIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjEsCi0weDJlLCAweDRiLCAweGM4LCAweDE4LCAweDA0LCAweDkwLCAweDAwLCAweGYwLCAweDM3LCAweGY5LCAweDA0LCAweDk4LAotMHgwMCwgMHhmMCwgMHg4OCwgMHhmOCwgMHgwMCwgMHhmMCwgMHhmNiwgMHhmYSwgMHg3OCwgMHg4YSwgMHhmMSwgMHg4YiwKLTB4ODgsIDB4NDIsIDB4MDQsIDB4ZDEsIDB4ZjksIDB4NmEsIDB4MDgsIDB4MTgsIDB4MDQsIDB4ZTAsIDB4MzgsIDB4ZTAsCi0weDMyLCAweGUwLCAweDNhLCAweDZiLCAweDEwLCAweDE4LCAweDQwLCAweDFhLCAweDgxLCAweDA3LCAweDAyLCAweGQwLAotMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwNCwgMHgzMCwgMHg2MSwgMHg2YiwgMHgwOSwgMHgxYSwgMHhhMiwgMHg2YiwKLTB4OTEsIDB4NDIsIDB4MDAsIDB4ZDIsIDB4MjAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjIsIDB4ZTgsIDB4N2IsCi0weDAwLCAweDI4LCAweDA4LCAweGQwLCAweDAwLCAweDIyLCAweGVhLCAweDczLCAweDA1LCAweDk5LCAweDQ4LCAweDY5LAotMHgwMSwgMHgzOCwgMHg0OCwgMHg2MSwgMHg3OCwgMHg2YiwgMHgwMCwgMHhmMCwgMHg3MywgMHhmYSwgMHgxOCwgMHg0OCwKLTB4ODAsIDB4NmEsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MGUsIDB4MDEsIDB4MjgsIDB4MGEsIDB4ZDEsIDB4MjAsIDB4NmEsCi0weDAwLCAweDAzLCAweDAwLCAweDBiLCAweDBiLCAweDRjLCAweGExLCAweDZhLCAweDg4LCAweDQyLCAweDAzLCAweGQwLAotMHgwNiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNCwKLTB4MDgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDYsIDB4ZTAsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAxLCAweGQwLCAweDAwLCAweGYwLCAweGI1LCAweGZhLCAweDAxLCAweDIwLCAweGE4LCAweDczLCAweGVkLCAweGU3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDY4LCAweDFhLCAweDAwLCAweDgwLCAweGM0LCAweDBiLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHg3OCwgMHg2YSwgMHg0MCwgMHg4OSwKLTB4ZmYsIDB4MjEsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NDAsIDB4MTAsIDB4NDgsIDB4MDIsIDB4ZDEsIDB4ODEsIDB4NmMsCi0weDAxLCAweDMxLCAweDgxLCAweDY0LCAweDc5LCAweDZhLCAweDQ5LCAweDg5LCAweDQ5LCAweDBiLCAweDAyLCAweGQyLAotMHg0MSwgMHg2YywgMHgwMSwgMHgzMSwgMHg0MSwgMHg2NCwgMHgwYiwgMHg0OCwgMHg0MSwgMHg2YSwgMHgwMSwgMHgzMSwKLTB4NDEsIDB4NjIsIDB4NzgsIDB4NmEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjIsIDB4MzgsIDB4NmIsCi0weDAwLCAweGYwLCAweGY4LCAweGZiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGIzLCAweGY4LCAweDAxLCAweDIwLAotMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg3MywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsCi0weGY4LCAweGI1LCAweDA3LCAweDFjLCAweDAwLCAweDIyLCAweGY5LCAweDFkLCAweDYxLCAweDMxLCAweDBkLCAweDFjLAotMHg3OCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHg0MCwgMHg4OSwKLTB4MDMsIDB4MGMsIDB4MDEsIDB4ZDIsIDB4NDAsIDB4MGEsIDB4MDMsIDB4ZDIsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGMxLCAweGZmLCAweDY3LCAweGUwLCAweDM1LCAweDQ4LCAweGMwLCAweDZiLCAweDAwLCAweDA5LCAweDFmLCAweGQzLAotMHgwOCwgMHg3OCwgMHg0MCwgMHgwOCwgMHgxYywgMHhkMiwgMHgwMCwgMHgyMCwgMHg0MywgMHgwMCwgMHhjYywgMHg1YSwKLTB4MzEsIDB4NGUsIDB4OWUsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4MWIsIDB4ODgsCi0weDljLCAweDQyLCAweDBlLCAweGQwLCAweGI4LCAweDY5LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDg4LCAweDYxLAotMHhmOCwgMHg2OCwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MjcsIDB4ZjksIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzQsIDB4ZjgsIDB4NDYsIDB4ZTAsIDB4MDEsIDB4MzAsCi0weDAzLCAweDI4LCAweGUzLCAweGRiLCAweDAyLCAweDIwLCAweDQzLCAweDAwLCAweDVjLCAweDE4LCAweGU0LCAweDg4LAotMHgyMiwgMHg0ZSwgMHg5ZSwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHgxYiwgMHg4OCwKLTB4OWMsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4MDEsIDB4MzgsIDB4ZDgsIDB4NDIsIDB4ZjAsIDB4ZGMsCi0weDAxLCAweDIzLCAweGQ4LCAweDQyLCAweGM0LCAweGQwLCAweDFiLCAweDRlLCAweDBiLCAweDIzLCAweDFiLCAweDAyLAotMHhmMCwgMHgxOCwgMHg0MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgyNCwgMHhkMCwgMHg3ZCwgMHg2MywgMHgwMCwgMHg5OCwKLTB4NDAsIDB4ODksIDB4MDAsIDB4MGMsIDB4MWYsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGYwLCAweDE4LCAweGMwLCAweDZiLCAweDM1LCAweDFjLCAweDAwLCAweDI4LCAweDE3LCAweGQwLCAweGZlLCAweDFkLAotMHgyZCwgMHgzNiwgMHhhMiwgMHgwMCwgMHg1MiwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhkMiwgMHgxOCwKLTB4ZDIsIDB4NmIsIDB4MzgsIDB4MWMsIDB4MzEsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4N2IsIDB4ZmMsIDB4MDEsIDB4MjgsCi0weDBlLCAweGQwLCAweDAxLCAweDM0LCAweGEwLCAweDAwLCAweDQwLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLAotMHhjMCwgMHgxOCwgMHhjMCwgMHg2YiwgMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgwMSwgMHhlMCwgMHgwMSwgMHgyYSwKLTB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDgsIDB4ZjgsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2OSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MSwKLTB4ZjgsIDB4NjgsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4NzgsIDB4NmEsIDB4NDAsIDB4ODksCi0weDAxLCAweDBjLCAweDBlLCAweGQyLCAweDQwLCAweDBhLCAweDBjLCAweGQzLCAweDM4LCAweDY4LCAweDQwLCAweDA4LAotMHgwMiwgMHhkMywgMHgzOCwgMHgxYywgMHgwMiwgMHhmMCwgMHgwYywgMHhmYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4YmIsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDgsIDB4ZjgsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDMwLCAweGZmLCAweDAxLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMSwgMHgyMSwgMHgwMCwgMHg2YiwgMHg0MCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2MCwgMHg3MCwgMHg0NywKLTB4YjAsIDB4YjQsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDksIDB4OGIsIDB4ODksIDB4MDgsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDg0LCAweDZhLCAweGMyLCAweDFkLCAweDYxLCAweDMyLCAweDAwLCAweDIwLCAweDAwLCAweDI5LAotMHgwYywgMHhkZCwgMHg4NywgMHgwMCwgMHgzZCwgMHgxOSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDMsIDB4NTEsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDg4LCAweDQyLCAweGYyLCAweGRiLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweGEwLCAweGIwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjMSwgMHgxZCwgMHgyMSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MGIsIDB4OTEsIDB4YzEsIDB4MWQsIDB4NTMsIDB4MzEsIDB4MTksIDB4NDMsIDB4MWYsIDB4OTEsCi0weDA5LCAweDY4LCAweDAxLCAweGFmLCAweGZhLCAweDFkLCAweDM5LCAweDMyLCAweDFlLCAweDkyLCAweDE3LCAweGFiLAotMHg1OSwgMHg4MCwgMHgzYSwgMHg0OSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwYSwgMHg2YSwgMHgxMywgMHg0MywKLTB4Y2MsIDB4MWQsIDB4MTEsIDB4MzQsIDB4ODksIDB4NjksIDB4MDksIDB4MDMsIDB4MDksIDB4MGIsIDB4MjIsIDB4NjksCi0weGU1LCAweDY4LCAweGMwLCAweDQ2LCAweDFkLCAweDk1LCAweGZjLCAweDFkLCAweDM5LCAweDM0LCAweDY0LCAweDhiLAotMHg2NCwgMHgwOSwgMHgwNSwgMHgzNCwgMHgyNCwgMHgwNiwgMHgyNCwgMHgwZSwgMHgxYywgMHg5NCwgMHg1NiwgMHgxYSwKLTB4MWIsIDB4OTYsIDB4MWMsIDB4OWMsIDB4MmUsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDEsIDB4MjYsCi0weDFkLCAweDlkLCAweDFhLCAweDY4LCAweDkxLCAweDQyLCAweDAxLCAweGQxLCAweDMyLCAweDFjLCAweDBiLCAweGUwLAotMHg5MSwgMHg0MiwgMHgwMywgMHhkOSwgMHg1MiwgMHgxYiwgMHgxYiwgMHg5ZSwgMHhiNSwgMHgxOCwgMHgwMCwgMHhlMCwKLTB4NTUsIDB4MWEsIDB4MDEsIDB4MjIsIDB4MjQsIDB4MDEsIDB4YWMsIDB4NDIsCi0weDAwLCAweGQzLCAweDAwLCAweDIyLCAweDAxLCAweDJhLCAweGU2LCAweGQxLCAweDkxLCAweDA3LCAweDAxLCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MCwgMHg5MywgMHgwNywgMHgwMSwgMHgxZCwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjAsIDB4YzEsIDB4MWQsIDB4MDEsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYwLCAweDFmLCAweDk5LCAweDA5LCAweDY4LCAweDFlLCAweDlhLAotMHhjMCwgMHg0NiwgMHg1MSwgMHg4MywgMHhjMSwgMHgxZCwgMHgxZCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MzgsIDB4NjMsIDB4NzksIDB4NjIsIDB4YzEsIDB4MWQsIDB4MTEsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYxLCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgxNywgMHgzMSwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4ODMsIDB4MGUsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCi0weGMwLCAweDQ2LCAweGY4LCAweDgxLCAweDM4LCAweDY4LCAweDQwLCAweDA4LCAweDAyLCAweGQzLCAweDM4LCAweDFjLAotMHgwMiwgMHhmMCwgMHg1YywgMHhmYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwYiwgMHhmOCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4NTgsIDB4ZmYsIDB4MjAsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweGY4LCAweGI1LCAweDA3LCAweDFjLAotMHhmOCwgMHgxZCwgMHgzOSwgMHgzMCwgMHg0MSwgMHg4YiwgMHgzOSwgMHg0YSwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkZCwKLTB4NDIsIDB4ODMsIDB4NDIsIDB4OGIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDEsIDB4MjAsIDB4M2EsIDB4MWQsCi0weDA2LCAweGNhLCAweGJiLCAweDZhLCAweDAyLCAweGYwLCAweDBlLCAweGZmLCAweDMzLCAweDRhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHgzMywgMHg0ZSwgMHgzMCwgMHg2YSwgMHgzMywgMHg0YywgMHhlMSwgMHg2ZCwgMHg0MSwgMHgxOCwKLTB4MzgsIDB4NmIsIDB4YzMsIDB4MWQsIDB4MDUsIDB4MzMsIDB4MDEsIDB4MjAsIDB4NzIsIDB4NmEsIDB4MDIsIDB4ZjAsCi0weGZiLCAweGZlLCAweGUwLCAweDZkLCAweDE4LCAweDMwLCAweDAwLCAweDI1LCAweGIxLCAweDZhLCAweDgxLCAweDQyLAotMHgwMSwgMHhkOCwgMHhlNSwgMHg2NSwgMHgwMCwgMHhlMCwgMHhlMCwgMHg2NSwgMHgyZiwgMHgyMywgMHg5YiwgMHgwMSwKLTB4MjAsIDB4MWMsIDB4ZTEsIDB4NmQsIDB4ZTQsIDB4MTgsIDB4MjIsIDB4NjgsIDB4OTIsIDB4MDAsIDB4MjcsIDB4NGIsCi0weGMwLCAweDQ2LCAweDk5LCAweDUwLCAweDI2LCAweDQ4LCAweGMxLCAweDZiLCAweDRhLCAweDA4LCAweDA1LCAweGQzLAotMHg0OSwgMHgwOCwgMHg0OSwgMHgwMCwgMHhjMSwgMHg2MywgMHgwMSwgMHgyMCwgMHgwMSwgMHhmMCwgMHhkNiwgMHhmZiwKLTB4MjIsIDB4NGEsIDB4MWYsIDB4NDgsIDB4YzEsIDB4MWQsIDB4ODksIDB4MzEsIDB4MGIsIDB4NzgsIDB4MDAsIDB4MmIsCi0weDAyLCAweGQwLCAweDQ5LCAweDc4LCAweDAwLCAweDI5LCAweDAwLCAweGQxLCAweDFlLCAweDRhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHgyMCwgMHg2OCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0YiwgMHhjMywgMHgxOCwgMHgwNSwgMHhjZSwKLTB4YzEsIDB4MWQsIDB4MTEsIDB4MzEsIDB4MDEsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4YzcsIDB4ZmUsIDB4MTQsIDB4NDgsCi0weDIxLCAweDY4LCAweDAxLCAweDMxLCAweDIxLCAweDYwLCAweDE3LCAweDI5LCAweDAwLCAweGQzLCAweDI1LCAweDYwLAotMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwZCwgMHg2NSwgMHg3OSwgMHg2YSwgMHgzYSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NTEsIDB4NjIsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4NjgsIDB4MDAsIDB4MjksCi0weDAzLCAweGQxLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDA0LCAweGUwLCAweDM5LCAweDZiLAotMHhjMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2NSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjMSwgMHg2MCwKLTB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsCi0weDE4LCAweDAwLCAweDE0LCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg0NCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjUsIDB4MTEsIDB4NGUsIDB4ZmYsIDB4MjUsIDB4MDEsIDB4MzUsCi0weDEwLCAweDRmLCAweGMwLCAweDQ2LCAweDM1LCAweDYwLCAweDc4LCAweDY5LCAweDAxLCAweDM4LCAweDc4LCAweDYxLAotMHhiYywgMHg2OCwgMHgwMCwgMHgyYywgMHgxMCwgMHhkMCwgMHgyMCwgMHg2ZCwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MCwKLTB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZjgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4ZmEsCi0weDA4LCAweDQ4LCAweDgwLCAweDZhLCAweDAwLCAweDBjLCAweDAwLCAweDA3LCAweGU5LCAweGQxLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwNSwgMHg0OCwgMHhjMSwgMHg3OSwgMHgwMSwgMHgzMSwgMHhjMSwgMHg3MSwKLTB4ZjcsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwMSwgMHgyMCwgMHg4MCwgMHgwMywgMHgwMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NjgsIDB4YzAsIDB4MDgsCi0weDA5LCAweGQzLCAweDFkLCAweDQ4LCAweDAxLCAweDZhLCAweDAxLCAweDM5LCAweDAxLCAweDYyLCAweDIwLCAweDMwLAotMHgwMCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwgMHhmZSwgMHhmNywgMHhlOSwgMHhmZCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4ZjgsIDB4MWQsIDB4MWQsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MTYsIDB4NGMsCi0weDYxLCAweDZhLCAweDgxLCAweDQyLCAweDIxLCAweGQxLCAweDAxLCAweDFjLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHgyOSwgMHgxYSwgMHhkMSwgMHgwMCwgMHhmMCwgMHgyMiwgMHhmOCwKLTB4NjAsIDB4NjIsIDB4NjAsIDB4NmEsIDB4MjEsIDB4NmEsIDB4ODgsIDB4NDIsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjEsCi0weDg5LCAweDA3LCAweDAxLCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweGYyLCAweGQwLCAweDUxLCAweDIxLAotMHg4OSwgMHgwMywgMHg2MiwgMHg2YSwgMHgyMywgMHg2YiwgMHg5YSwgMHg0MiwgMHgwMiwgMHhkMSwgMHg2MCwgMHg2YiwKLTB4YTIsIDB4NmIsIDB4ODAsIDB4MWEsIDB4MDQsIDB4MzgsIDB4YzgsIDB4NjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDc5LCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGY3LCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4YzEsIDB4MWQsIDB4MDEsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsCi0weDA4LCAweDE4LCAweDBkLCAweDMwLCAweDgxLCAweDA3LCAweDAyLCAweGQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLAotMHgwNCwgMHgzMCwgMHgwNCwgMHg0OSwgMHg4YSwgMHg2YiwgMHgxMiwgMHgxOCwgMHg0YiwgMHg2YiwgMHg5YSwgMHg0MiwKLTB4MDAsIDB4ZDksIDB4MDgsIDB4NmIsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDA0LCAweDQ4LCAweGMwLCAweDY4LCAweDEwLCAweDI4LCAweDAxLCAweGQzLCAweDAwLCAweGYwLAotMHgwNSwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwKLTB4ODgsIDB4YjUsIDB4MGMsIDB4NGYsIDB4MzgsIDB4NzksIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDEsIDB4MGIsIDB4NDksCi0weDEwLCAweDIwLCAweDAyLCAweGYwLCAweGY1LCAweGZkLCAweDAwLCAweDI4LCAweDBiLCAweGQwLCAweDAxLCAweDIwLAotMHgzOCwgMHg3MSwgMHgwOCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwNywgMHg0OCwgMHg0MiwgMHg2OCwKLTB4MDcsIDB4NGIsIDB4MDEsIDB4NjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ZGYsIDB4ZmQsIDB4ODgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY4LCAweDFhLCAweDAwLCAweDgwLCAweGY1LCAweDJjLCAweGZmLCAweGZmLAotMHgxMCwgMHgwMCwgMHgzNSwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwKLTB4OTAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4MTAsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsCi0weDBmLCAweDRmLCAweDEwLCAweDIxLCAweGY4LCAweDFkLCAweDNkLCAweDMwLCAweDAyLCAweGYwLCAweDRjLCAweGZjLAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhmYywgMHgxOCwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwKLTB4MDAsIDB4ZjAsIDB4MTQsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4YzksIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZjksIDB4MTgsCi0weDA4LCAweDcxLCAweGUwLCAweDY4LCAweDEwLCAweDI4LCAweDA0LCAweGQzLCAweDAxLCAweDIwLCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhmOSwgMHgxOCwgMHg0OCwgMHg3MywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MzcsIDB4NDgsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMxLCAweDE4LCAweGM5LCAweDY4LCAweDM1LCAweDRkLCAweDEwLCAweDI5LAotMHgwMCwgMHhkOSwgMHgxMCwgMHgyMSwgMHg2OSwgMHg2MiwgMHgzMiwgMHg0OCwgMHhjMSwgMHg2YywgMHgwMCwgMHg2ZSwKLTB4ODEsIDB4NDIsIDB4MDcsIDB4ZDksIDB4MDgsIDB4MWEsIDB4MDcsIDB4MDksIDB4MDAsIDB4MjQsIDB4NjgsIDB4NmEsCi0weGI4LCAweDQyLCAweDEyLCAweGQyLCAweDA3LCAweDFjLCAweDEwLCAweGUwLCAweDgxLCAweDQyLCAweDJhLCAweGQyLAotMHgyYywgMHg0YSwgMHg1MiwgMHg2YiwgMHgxMCwgMHgxYSwgMHgwNywgMHgwOSwgMHg2OCwgMHg2YSwgMHhiOCwgMHg0MiwKLTB4MDUsIDB4ZDksIDB4MGMsIDB4MDksIDB4MzksIDB4MTksIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDIsIDB4YzQsIDB4MWIsCi0weDAxLCAweGUwLCAweDAwLCAweDI0LCAweDA3LCAweDFjLCAweDNlLCAweDE5LCAweDMwLCAweDAxLCAweDI1LCAweDQ5LAotMHgwMiwgMHhmMCwgMHg4NCwgMHhmZCwgMHgwMCwgMHgyOCwgMHgzZCwgMHhkMCwgMHgyMywgMHg0OCwgMHgwMCwgMHgyYywKLTB4MWEsIDB4ZDEsIDB4MWUsIDB4NDksIDB4M2EsIDB4MDEsIDB4NmYsIDB4NjIsIDB4MDksIDB4NmUsIDB4OGMsIDB4MTgsCi0weDFkLCAweDRkLCAweDZiLCAweDZiLCAweGEzLCAweDQyLCAweDAwLCAweGQ4LCAweGU0LCAweDFhLCAweDFlLCAweDRiLAotMHgxYSwgMHg0MywgMHgwMCwgMHg5MiwgMHhlYSwgMHg2YSwgMHg1MSwgMHgxOCwKLTB4MmEsIDB4NmIsIDB4MDMsIDB4MWMsIDB4MjAsIDB4ZTAsIDB4MWIsIDB4NDgsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsCi0weDAxLCAweDYzLCAweDAwLCAweDIwLCAweDY4LCAweDYyLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgxMCwgMHg0OSwgMHgyNCwgMHgwMSwgMHgzZiwgMHgwMSwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgzYSwgMHg0MywKLTB4NmUsIDB4NjIsIDB4MDAsIDB4OTIsIDB4MGUsIDB4NGQsIDB4ZWEsIDB4NmEsIDB4MDksIDB4NmUsIDB4NTEsIDB4MTgsCi0weDAzLCAweDFjLCAweDA2LCAweDFjLCAweDAwLCAweDIwLCAweDJhLCAweDZiLCAweDAyLCAweGYwLCAweDRhLCAweGZkLAotMHgwYywgMHg0YSwgMHgyMiwgMHg0MywgMHgwMCwgMHg5MiwgMHhiYiwgMHgxOSwgMHhlOSwgMHg2YSwgMHgyYSwgMHg2YiwKLTB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NDEsIDB4ZmQsIDB4MDMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4NjYsCi0weDAwLCAweGYwLCAweDEwLCAweGY4LCAweDAxLCAweDIwLCAweGRhLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg1ZCwgMHgyZSwgMHhmZiwgMHhmZiwKLTB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDIsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDA0LCAweDQ4LCAweDAxLCAweDZlLCAweDA0LCAweDRhLCAweDgwLCAweDMwLCAweGQxLCAweDYwLCAweDAyLCAweDIzLAotMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywgMHhjMSwgMHg2MywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDIsCi0weDFjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweDI3LCAweDFiLCAweDRlLCAweDMzLCAweDIzLAotMHg5YiwgMHgwMSwgMHhmNSwgMHgxOCwgMHg2OCwgMHg2YSwgMHgwMCwgMHgyOCwgMHgxZCwgMHhkOSwgMHgxOSwgMHg0YywKLTB4NjgsIDB4NDYsIDB4MTAsIDB4MjEsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmIsIDB4NjgsIDB4NDYsIDB4MDAsIDB4ZjAsCi0weDMzLCAweGY4LCAweDAwLCAweDI4LCAweDA0LCAweGQwLCAweDE1LCAweDQ5LCAweDQ4LCAweDY5LCAweDAxLCAweDMwLAotMHg0OCwgMHg2MSwgMHgwYSwgMHhlMCwgMHgxMywgMHg0OSwgMHg2MCwgMHg3YiwgMHgwMSwgMHgzMCwgMHg2MCwgMHg3MywKLTB4ODgsIDB4NzksIDB4MDEsIDB4MzAsIDB4ODgsIDB4NzEsIDB4MTEsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDIsIDB4ZjAsCi0weDY1LCAweGY5LCAweDY4LCAweDZhLCAweDAxLCAweDM3LCAweGI4LCAweDQyLCAweGUyLCAweGQ4LCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhmMCwgMHgxOCwgMHg4MSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwMywgMHhkMCwgMHgwMCwgMHgyMSwKLTB4ODEsIDB4NzMsIDB4ZmYsIDB4ZjcsIDB4MDUsIDB4ZmIsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmUsIDB4MDQsIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhiMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4NTgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjQsIDB4MTcsIDB4NGYsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGY5LCAweDE4LCAweDAwLCAweDIyLCAweGNiLCAweDY4LCAweDAwLCAweDJiLAotMHgyMywgMHhkMCwgMHgwMSwgMHgzYiwgMHhjYiwgMHg2MCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhmZiwgMHgxOCwKLTB4YmIsIDB4NjksIDB4MWMsIDB4NmQsIDB4YzAsIDB4NDYsIDB4YmMsIDB4NjEsIDB4MDQsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDVjLCAweDYwLCAweDQ0LCAweDY4LCAweGMwLCAweDQ2LCAweDljLCAweDYwLCAweDg0LCAweDY4LCAweGMwLCAweDQ2LAotMHgxYywgMHg2MSwgMHhjMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg1OCwgMHg2MSwgMHgxYSwgMHg2NSwgMHgwOCwgMHg2OSwKLTB4NDIsIDB4MWMsIDB4MGEsIDB4NjEsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MzgsIDB4NmEsIDB4YzAsIDB4NDYsCi0weDAzLCAweDY1LCAweDAwLCAweGUwLCAweGZiLCAweDYxLCAweDNiLCAweDYyLCAweDE4LCAweDFjLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgxMCwgMHgxYywgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MGEsIDB4NGEsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4YzgsIDB4NjksIDB4MTksIDB4MjMsCi0weGRiLCAweDAxLCAweGQyLCAweDE4LCAweDEzLCAweDY5LCAweDAwLCAweDJiLCAweDA2LCAweGQwLCAweDAxLCAweDNiLAotMHgxMywgMHg2MSwgMHhjYSwgMHg2OSwgMHgxMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHhjYSwgMHg2MSwgMHg3MCwgMHg0NywKLTB4MDAsIDB4MjEsIDB4MTEsIDB4NjEsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDA2LCAweDRhLCAweDExLCAweDY5LCAweDRiLCAweDFjLCAweDEzLCAweDYxLCAweDQwLCAweDMyLCAweDAwLCAweDI5LAotMHgwMSwgMHhkMCwgMHhkMSwgMHg2OSwgMHgwMCwgMHhlMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg2NSwgMHhkMCwgMHg2MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDYsIDB4NGEsIDB4ZDEsIDB4NjgsCi0weDRiLCAweDFjLCAweGQzLCAweDYwLCAweDQwLCAweDMyLCAweDAwLCAweDI5LCAweDAxLCAweGQwLCAweDkxLCAweDY5LAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg2NSwgMHg5MCwgMHg2MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsCi0weDBmLCAweDRhLCAweDk3LCAweDg5LCAweDkyLCAweDZhLCAweDRiLCAweDAwLCAweDFiLCAweDE4LCAweDliLCAweDhhLAotMHgwMCwgMHgyYiwgMHgxMiwgMHhkMCwgMHhiYiwgMHg0MiwgMHgxMCwgMHhkYywgMHgxYywgMHgxYywgMHg1OCwgMHgyMywKLTB4NjMsIDB4NDMsIDB4ZDMsIDB4MTgsIDB4ZGMsIDB4MWYsIDB4NDksIDB4M2MsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDIzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDAzLCAweDJiLCAweDAyLCAweGQwLAotMHgwMCwgMHgyMCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMSwgMHgzMSwgMHgwNCwgMHgyOSwgMHhlNCwgMHhkMywKLTB4MDEsIDB4MjAsIDB4ZjgsIDB4ZTcsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ZjcsIDB4YjUsIDB4ODYsIDB4YjAsCi0weDNkLCAweDRhLCAweDA3LCAweDFjLCAweGQxLCAweDY5LCAweDhmLCAweDQwLCAweDAzLCAweDFjLCAweDE0LCAweDZhLAotMHhlMywgMHg0MCwgMHg1ZiwgMHg0MCwgMHgwNywgMHg5ZSwgMHg4ZSwgMHg0MCwgMHg3NywgMHg0MCwgMHhjZiwgMHg0MCwKLTB4OTQsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTQsIDB4MDMsIDB4MWMsIDB4YTMsIDB4NDAsIDB4MDAsIDB4MjUsCi0weDE0LCAweDY5LCAweGMwLCAweDQ2LCAweDA0LCAweDk0LCAweDAwLCAweDJjLCAweDVkLCAweGQ5LCAweDFjLCAweDFjLAotMHgzMiwgMHg0ZSwgMHgyNiwgMHg0MywgMHg5NCwgMHg2OSwgMHhlNiwgMHg0MCwgMHgzMywgMHgxYywgMHgwMywgMHg5NiwKLTB4NTMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTIsCi0weGJiLCAweDAwLCAweDAyLCAweDlhLCAweGQyLCAweDU4LCAweDEzLCAweDFjLCAweDA1LCAweDljLCAweGUzLCAweDQwLAotMHgwMywgMHg5YywgMHhhMywgMHg0MiwgMHgzZSwgMHhkMSwgMHg4YSwgMHg0MCwgMHhjYSwgMHg0MCwgMHgxNCwgMHgxYywKLTB4NjMsIDB4MDAsIDB4MWIsIDB4MTksIDB4NWIsIDB4MDEsIDB4MDEsIDB4OWEsIDB4ZDIsIDB4MTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGQ2LCAweDFkLCAweDAxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LAotMHgxYiwgMHgwZSwgMHgwMywgMHgyYiwgMHgyYywgMHhkMSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwKLTB4NTEsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDcsIDB4OWUsIDB4MWUsIDB4NDAsIDB4MDAsIDB4OTYsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLCAweDQ5LCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAotMHg4MywgMHg0MiwgMHgxYiwgMHhkMSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHg0ZCwgMHgzNiwKLTB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDAsIDB4OWUsIDB4YjMsIDB4NDIsIDB4MTIsIDB4ZDEsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDA4LCAweDliLAotMHgzMiwgMHgyYiwgMHgwNCwgMHhkMSwgMHgwMiwgMHgyYSwgMHgwNywgMHhkMSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgxNCwKLTB4MGYsIDB4ZTAsIDB4MDgsIDB4OWIsIDB4MzMsIDB4MmIsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MmEsIDB4ZjcsIDB4ZDAsCi0weDA0LCAweDlhLCAweDAxLCAweDM3LCAweDk3LCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDI3LCAweDA0LCAweDlhLAotMHgwMSwgMHgzNSwgMHhhYSwgMHg0MiwgMHhhZSwgMHhkOCwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHgwOSwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDI3LCAweDRkLCAweDY4LCAweDY5LCAweDAwLCAweDI4LAotMHgwNiwgMHhkMCwgMHgyNiwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhmMCwgMHgyYiwgMHhmOCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjMsIDB4NGMsIDB4MDAsIDB4MjYsIDB4YTAsIDB4NjgsIDB4MjMsIDB4NGYsCi0weDAwLCAweDI4LCAweDE2LCAweGQwLCAweDBmLCAweGUwLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAyLCAweGQzLAotMHgwMSwgMHgyMCwgMHgzOCwgMHg3MSwgMHgwZiwgMHhlMCwgMHhhNiwgMHg2MCwgMHhmZCwgMHhmNywgMHhkZSwgMHhmZSwKLTB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MDEsIDB4ZDMsIDB4MDEsIDB4MjAsCi0weDM4LCAweDcxLCAweGU4LCAweDY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDc5LCAweDAwLCAweDI4LAotMHhlOSwgMHhkMCwgMHg2OCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgxYiwgMHhkMCwgMHgwMSwgMHgyMCwgMHhhMCwgMHg2MCwKLTB4ZmUsIDB4ZjcsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4MjgsIDB4ZDYsIDB4ZDEsIDB4NjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weGY2LCAweGQxLCAweDExLCAweGUwLCAweDAwLCAweDI4LCAweGQwLCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LAotMHgwMiwgMHhkMywgMHgwMSwgMHgyMCwgMHgzOCwgMHg3MSwgMHhjYSwgMHhlNywgMHhhNiwgMHg2MCwgMHhmZCwgMHhmNywKLTB4YjksIDB4ZmUsIDB4MDAsIDB4MjgsIDB4YzUsIDB4ZDEsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MDEsIDB4ZDMsCi0weDAxLCAweDIwLCAweDM4LCAweDcxLCAweGU4LCAweDY4LCAweDAwLCAweDI4LCAweGJkLCAweGQwLCAweDM4LCAweDc5LAotMHgwMCwgMHgyOCwgMHhlNywgMHhkMCwgMHhiOSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4NWMsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4OGMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgxZCwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4OWQsIDB4ZmMsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NDEsIDB4NjgsCi0weDE5LCAweDQwLCAweDBjLCAweDBmLCAweDYxLCAweDAxLCAweDA5LCAweDFiLCAweDg5LCAweDAwLCAweDE4LCAweDRhLAotMHg4ZiwgMHgxOCwgMHgwMSwgMHgyMSwgMHgzOSwgMHg4MCwgMHg4MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2NSwKLTB4NDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjcsIDB4YjksIDB4NmMsIDB4ZmEsIDB4NmMsIDB4ODksIDB4MTgsCi0weGI5LCAweDY0LCAweDAwLCAweDIxLCAweGY5LCAweDY0LCAweGJhLCAweDZiLCAweDNiLCAweDZkLCAweGQyLCAweDE4LAotMHhiYSwgMHg2MywgMHgzOSwgMHg2NSwgMHg0MiwgMHg2YSwgMHgyMCwgMHgzMiwgMHg1MSwgMHg3MSwgMHg3OSwgMHg2ZCwKLTB4N2EsIDB4NmYsIDB4ZDIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4ZmMsIDB4ZjcsIDB4Y2EsIDB4ZmYsCi0weDIwLCAweDAxLCAweDA5LCAweDQ5LCAweDQwLCAweDE4LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LAotMHg0MSwgMHg2YiwgMHgwMSwgMHgzOSwgMHg0MSwgMHg2MywgMHg3OCwgMHg2ZiwgMHgwMSwgMHhmMCwgMHhjNiwgMHhmYiwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDVjLCAweDJiLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDQwLCAweDIwLAotMHgxMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHg1OSwgMHhmYywgMHgwNywgMHgxYywKLTB4NDAsIDB4NjgsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsIDB4MDYsIDB4MGYsIDB4NzAsIDB4MDEsCi0weDgwLCAweDFiLCAweDgwLCAweDAwLCAweDBjLCAweDQ5LCAweDQ0LCAweDE4LCAweGI4LCAweDZhLCAweGMwLCAweDQ2LAotMHg2MCwgMHg2NSwgMHg3OCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NywgMHg4MCwgMHg2ZiwgMHgwNSwgMHgxZCwKLTB4ZTUsIDB4NjMsIDB4YjksIDB4NjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ODksIDB4ZjksIDB4MzgsIDB4MWMsCi0weDIxLCAweDFjLCAweDMyLCAweDFjLCAweDJiLCAweDFjLCAweDAwLCAweGYwLCAweDIwLCAweGY4LCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4NGIsIDB4NmYsIDB4OWIsIDB4NmYsIDB4MWYsIDB4MWQsIDB4Y2YsIDB4NjMsIDB4MDUsIDB4NjgsCi0weDAwLCAweDIzLCAweDg0LCAweDY5LCAweGE0LCAweDA4LCAweDA4LCAweGQwLCAweDljLCAweDAwLCAweDJlLCAweDU5LAotMHhjMCwgMHg0NiwgMHgzZSwgMHg1MSwgMHg4NCwgMHg2OSwgMHhhNCwgMHgwOCwgMHgwMSwgMHgzMywgMHg5YywgMHg0MiwKLTB4ZjYsIDB4ZDgsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDMsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGZmLCAweGI1LCAweDgxLCAweGIwLCAweDA0LCAweDFjLCAweDFkLCAweDFjLCAweDBmLCAweDFjLAotMHg0NiwgMHg0OCwgMHgwMSwgMHg2OSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2MSwgMHhmOSwgMHgxZCwgMHg1MSwgMHgzMSwKLTB4YmQsIDB4NjUsIDB4MDAsIDB4OTEsIDB4MjAsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4NWQsIDB4ZmMsIDB4ZjgsIDB4NmQsCi0weDQwLCAweDA5LCAweDM2LCAweGQyLCAweGI4LCAweDZkLCAweDA2LCAweDdiLCAweDQzLCAweDdiLCAweDFiLCAweDAyLAotMHgxZSwgMHg0MywgMHgxNywgMHgyMSwgMHg0OSwgMHgwMiwgMHgwMSwgMHg3MywgMHgwYiwgMHgwYSwgMHg0MywgMHg3MywKLTB4MDAsIDB4OTksIDB4MjAsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4NGMsIDB4ZmMsIDB4YjgsIDB4NmQsIDB4YzAsIDB4NDYsCi0weDA2LCAweDczLCAweDMzLCAweDBhLCAweDQzLCAweDczLCAweGY4LCAweDZkLCAweDQwLCAweDA5LCAweDIwLCAweGQyLAotMHg2MCwgMHg2OCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMywgMHg5OCwgMHgwMSwgMHhmMCwgMHhjYywgMHhmYywKLTB4NjAsIDB4NjgsIDB4MzIsIDB4NGIsIDB4MTgsIDB4NDMsIDB4NjAsIDB4NjAsIDB4MjAsIDB4MWMsIDB4MDEsIDB4ZjAsCi0weDM1LCAweGZkLCAweDAwLCAweDI1LCAweDdkLCAweDYwLCAweGJkLCAweDYwLCAweDNkLCAweDY0LCAweDdkLCAweDY0LAotMHgyMCwgMHgxYywgMHhmYywgMHhmNywgMHgzMSwgMHhmZiwgMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MzgsIDB4ODAsIDB4N2QsIDB4NjIsIDB4MjksIDB4NDgsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjIsIDB4MzgsIDB4MWMsCi0weDAwLCAweGYwLCAweGEwLCAweGZiLCAweDQ0LCAweGUwLCAweDIwLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NCwgMHg2MCwgMHg2OCwKLTB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4NzgsIDB4NmUsIDB4MDEsIDB4MjYsIDB4YzEsIDB4MWQsIDB4MGQsIDB4MzEsCi0weDhhLCAweDQyLCAweDAyLCAweGQyLCAweDNhLCAweDY0LCAweDA4LCAweDFjLCAweDBlLCAweGUwLCAweDQxLCAweDE5LAotMHg4OSwgMHg4OSwgMHhmMCwgMHgyMywgMHgxOSwgMHg0MCwgMHgwOSwgMHgwOSwgMHg4OSwgMHgwMCwgMHg0MCwgMHgxOCwKLTB4ZjgsIDB4NjAsIDB4ZjksIDB4NjEsIDB4NjEsIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4ODEsIDB4NDIsCi0weDE2LCAweGQyLCAweDM5LCAweDY0LCAweDYzLCAweDY4LCAweDE5LCAweDA0LCAweDA5LCAweDBjLCAweDQwLCAweDFhLAotMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MiwgMHgwMCwgMHhhMCwgMHg2MSwKLTB4MjAsIDB4NjgsIDB4MDksIDB4MTgsIDB4OWIsIDB4MTgsIDB4NjMsIDB4NjAsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGZhLCAweDdlLCAweDgwLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAotMHhiZiwgMHhmYiwgMHgwYiwgMHhlMCwgMHhiOSwgMHg2OCwgMHgwOCwgMHgxYSwgMHgwMCwgMHgyNSwgMHg3OCwgMHg2MiwKLTB4YmQsIDB4NjIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4M2MsIDB4ZmMsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsCi0weDAwLCAweGYwLCAweDY0LCAweGY4LCAweDA1LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwKLTB4ZjAsIDB4YjUsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4NmMsIDB4ZjksIDB4NmIsIDB4MGQsIDB4MTgsCi0weDIxLCAweDY4LCAweDQxLCAweDE4LCAweDAwLCAweDIwLCAweGEyLCAweDY5LCAweDAwLCAweDJhLCAweDBiLCAweGQ5LAotMHg4MiwgMHgwMCwgMHg1NiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4YWIsIDB4NTAsIDB4YTIsIDB4NjksIDB4MDEsIDB4MzAsIDB4ODIsIDB4NDIsIDB4ZjMsIDB4ZDgsCi0weDc4LCAweDZlLCAweGY5LCAweDZiLCAweDA5LCAweDE4LCAweDg5LCAweDg5LCAweGYwLCAweDIzLCAweDE5LCAweDQwLAotMHgwOSwgMHgwOSwgMHg4OSwgMHgwMCwgMHg0MCwgMHgxOCwgMHhmOCwgMHg2MCwgMHhmOSwgMHg2MSwgMHgyMCwgMHg2OCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDEsIDB4NjgsIDB4NzgsIDB4NmMsCi0weGZjLCAweGY3LCAweDk1LCAweGZmLCAweDc4LCAweDY0LCAweDYwLCAweDY4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHhmOCwgMHg2OCwgMHg4MSwgMHg0MiwgMHgxOSwgMHhkMiwgMHgzOSwgMHg2NCwgMHg2MywgMHg2OCwgMHgxOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NDAsIDB4MWEsIDB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODIsIDB4MDAsIDB4YTAsIDB4NjEsCi0weDIwLCAweDY4LCAweDA5LCAweDE4LCAweDliLCAweDE4LCAweDYzLCAweDYwLCAweGMzLCAweDFmLCAweDA1LCAweDNiLAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg1NiwgMHhmYSwgMHgwMSwgMHgyMCwgMHg3OCwgMHg4MCwgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4NWUsIDB4ZmIsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjksIDB4NjgsCi0weDA4LCAweDFhLCAweDc4LCAweDYyLCAweDAwLCAweDIwLCAweGI4LCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHhkOSwgMHhmYiwgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHgwMSwgMHhmOCwgMHhlZiwgMHhlNywKLTB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4OGUsIDB4NDgsIDB4NDEsIDB4NjksCi0weDAxLCAweDMxLCAweDQxLCAweDYxLCAweDAzLCAweDIwLCAweDAwLCAweDA3LCAweDYxLCAweDY4LCAweDA4LCAweDQwLAotMHgwNiwgMHgwZiwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgyMCwgMHg2OCwgMHgxMSwgMHgxOCwgMHhmYiwgMHg2OCwKLTB4ZDIsIDB4MWEsIDB4N2IsIDB4NjgsIDB4OWQsIDB4MWEsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MzgsIDB4MWMsCi0weDJhLCAweDFjLCAweDAwLCAweGYwLCAweDI2LCAweGZhLCAweDAwLCAweDIwLCAweDc4LCAweDgwLCAweDIwLCAweDFjLAotMHgwMCwgMHhmMCwgMHgyZSwgMHhmYiwgMHg2MCwgMHg2OCwgMHg0MCwgMHgxOSwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4NjAsIDB4NjAsIDB4MzAsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4ZTAsIDB4ZmIsIDB4N2QsIDB4NGUsIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGYwLCAweDE4LCAweDAwLCAweDY5LCAweDAwLCAweDI4LCAweDE5LCAweGQwLCAweDAwLCAweDI1LAotMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhmMCwgMHgxOCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgxMiwgMHhkMCwKLTB4YWEsIDB4MDAsIDB4OTIsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4ZDIsIDB4NjgsCi0weDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAxLCAweGYwLCAweDFjLCAweGZlLCAweDAxLCAweDM1LCAweGE4LCAweDAwLAotMHg4MCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4ZWMsIDB4ZDEsIDB4ZjgsIDB4NmIsIDB4MDEsIDB4MWYsIDB4OGEsIDB4MWMsIDB4ZmEsIDB4NjMsIDB4ZmEsIDB4NjgsCi0weDdkLCAweDZjLCAweDAwLCAweGYwLCAweGJiLCAweGY5LCAweGMwLCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHgyOCwgMHgxYywgMHhmYywgMHhmNywgMHgxMCwgMHhmZiwgMHgwMywgMHg5MCwgMHhmOSwgMHg2YiwgMHgzYSwgMHg2ZSwKLTB4OGUsIDB4MTgsIDB4MjAsIDB4NjgsIDB4MTIsIDB4MTgsIDB4MDEsIDB4OTIsIDB4N2EsIDB4NmUsIDB4OGQsIDB4MTgsCi0weDExLCAweDE4LCAweDAyLCAweDkxLCAweGM4LCAweDFkLCAweDA5LCAweDMwLCAweGUwLCAweDYwLCAweGIxLCAweDg4LAotMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4NzgsIDB4NjEsIDB4NjgsIDB4NjgsIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLAotMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwOCwgMHg0MywgMHgzOCwgMHg2MSwgMHhhOCwgMHg4OSwKLTB4MDksIDB4MjMsIDB4MWIsIDB4MDIsIDB4MTgsIDB4NDAsIDB4YjgsIDB4NjEsCi0weGE4LCAweDg5LCAweDk4LCAweDQzLCAweGE4LCAweDgxLCAweGE4LCAweDg5LCAweDAyLCAweDk5LCAweGMwLCAweDQ2LAotMHg4OCwgMHg4MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg4MCwgMHhiMCwgMHg4MCwgMHg3MCwgMHg4MSwgMHg2OCwgMHg2MCwKLTB4MjgsIDB4ODIsIDB4YjksIDB4NmUsIDB4MzAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4ZTgsIDB4ZmUsIDB4MzgsIDB4ODYsCi0weGZhLCAweDY5LCAweDMwLCAweDFjLCAweDI5LCAweDFjLCAweGZjLCAweGY3LCAweDAzLCAweGZmLCAweDc4LCAweDg2LAotMHgzZCwgMHg4ZSwgMHg3OCwgMHg4ZSwgMHgwMywgMHg5OSwgMHhmYywgMHhmNywgMHhjOCwgMHhmZSwgMHgwMCwgMHg5MCwKLTB4NjAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MzksIDB4NmUsIDB4NDEsIDB4MWEsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDdhLCAweDZlLCAweDgyLCAweDFhLCAweDEzLCAweDA0LCAweDFiLCAweDBjLCAweDFhLCAweDAyLAotMHgxYiwgMHgwYSwgMHgxYSwgMHg0MywgMHgxNiwgMHgwNCwgMHgzNiwgMHgwYywgMHhiYSwgMHg2OCwgMHg4MiwgMHg0MiwKLTB4MDEsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MTAsIDB4MWEsIDB4YjgsIDB4NjAsIDB4MDgsIDB4MDIsCi0weDA5LCAweDEyLCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg4MCwgMHgyOCwgMHgxYywgMHhmYywgMHhmNywgMHhhMywgMHhmZSwKLTB4MDUsIDB4MWMsIDB4MDAsIDB4OTgsIDB4MzEsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4OWUsIDB4ZmUsIDB4MDYsIDB4MWMsCi0weDc4LCAweDY5LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDAxLCAweDAyLCAweDAwLCAweDBhLCAweDA4LCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHg4MSwgMHg4MCwgMHgyOCwgMHgxYywKLTB4ZmMsIDB4ZjcsIDB4OGYsIDB4ZmUsIDB4NzksIDB4NjksIDB4MDEsIDB4MzEsIDB4YzAsIDB4NDMsIDB4NzksIDB4NjEsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDgxLCAweDM4LCAweDY5LCAweDAxLCAweDBlLCAweGZmLCAweDIyLAotMHgxMiwgMHgwNCwgMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwKLTB4MDIsIDB4NDAsIDB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDEsIDB4NDMsIDB4MzAsIDB4MWMsCi0weGZjLCAweGY3LCAweDc3LCAweGZlLCAweDM5LCAweDY5LCAweDdhLCAweDY4LCAweDg5LCAweDE4LCAweDM5LCAweDYxLAotMHhiOSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgwOSwgMHhkMSwgMHgwMiwgMHg5OSwgMHg4OSwgMHg4OSwgMHhiYSwgMHg2OSwKLTB4MTEsIDB4NDMsIDB4MDIsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTEsIDB4ODEsIDB4YjksIDB4NjksIDB4ZmMsIDB4ZjcsCi0weDY2LCAweGZlLCAweDIwLCAweDgyLCAweDAwLCAweDIwLCAweDYwLCAweDgyLCAweGY4LCAweDZkLCAweDQxLCAweDA4LAotMHgxNiwgMHhkMywgMHg4MCwgMHgwYSwgMHgwYSwgMHhkMywgMHg2MCwgMHg2OCwgMHgxMCwgMHgzOCwgMHgwMSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDA4LCAweDgyLCAweDA5LCAweGUwLCAweDYwLCAweDY4LCAweDBjLCAweDM4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg4OCwgMHg4MSwKLTB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYxLCAweGI1LCAweDg0LCAweGIwLCAweDZlLCAweDRkLCAweDI4LCAweDY5LAotMHgwMSwgMHgyMiwgMHgwNCwgMHg5OSwgMHg4YSwgMHg0MCwgMHg5MCwgMHg0MywgMHgyOCwgMHg2MSwgMHgwNCwgMHg5OCwKLTB4NDMsIDB4MDEsIDB4MTgsIDB4MWEsIDB4ODAsIDB4MDAsIDB4MTYsIDB4MWMsIDB4NjksIDB4NDksIDB4NDQsIDB4MTgsCi0weGUwLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweGEwLCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQxLAotMHgwMCwgMHgyNiwgMHgyNiwgMHhlMCwgMHg2NSwgMHg0OCwgMHg0MSwgMHg2OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MSwKLTB4MDQsIDB4OTgsIDB4ZmMsIDB4ZjcsIDB4MDksIDB4ZmQsIDB4MDcsIDB4MWMsIDB4MDMsIDB4ZDEsIDB4MjgsIDB4NjksCi0weDMwLCAweDQzLCAweDI4LCAweDYxLCAweGI1LCAweGUwLCAweGEwLCAweDY4LCAweDY1LCAweDY4LCAweGE4LCAweDQyLAotMHgwMCwgMHhkMiwgMHgwNSwgMHgxYywgMHhhMSwgMHg2YywgMHhhOSwgMHg0MiwgMHgxNiwgMHhkMiwgMHg0MCwgMHgxYSwKLTB4NjIsIDB4NmEsIDB4MTAsIDB4MWEsIDB4MDAsIDB4MjYsIDB4NjAsIDB4NjIsIDB4YTYsIDB4NjAsIDB4YTYsIDB4NjIsCi0weDIwLCAweDg4LCAweDQ4LCAweDIzLCAweDE4LCAweDQzLCAweDIwLCAweDgwLCAweDBkLCAweDFjLCAweDA5LCAweGQxLAotMHgzOCwgMHgxYywgMHhmYywgMHhmNywgMHgxOSwgMHhmZCwgMHgwMywgMHgyMCwgMHg2MCwgMHg4MCwgMHg2NiwgMHg2MCwKLTB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OGQsIDB4ZjksIDB4OTYsIDB4ZTAsIDB4ZTEsIDB4NjgsIDB4MzgsIDB4NjgsCi0weDA5LCAweDE4LCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDIwLCAweDFjLCAweDAyLCAweDM5LCAweDJhLCAweDFjLAotMHgwMCwgMHhmMCwgMHhjZCwgMHhmOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhkNywgMHhmOSwgMHhlMCwgMHg2OCwKLTB4NDYsIDB4MTksIDB4NzgsIDB4NjgsIDB4MzAsIDB4NDMsIDB4NzgsIDB4NjAsIDB4MDQsIDB4OTgsIDB4MzEsIDB4MWMsCi0weDAxLCAweGYwLCAweDg4LCAweGZhLCAweDIxLCAweDZlLCAweDAwLCAweDk4LAotMHgwOCwgMHgxOCwgMHgwMSwgMHg5MCwgMHg3MCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg2MSwgMHg2ZSwKLTB4NzEsIDB4MWEsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTEsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAyLCAweDkxLCAweDAxLCAweDAyLCAweDAwLCAweDBhLCAweDA4LCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg4MCwgMHgyMCwgMHg4ZSwKLTB4ZmMsIDB4ZjcsIDB4Y2IsIDB4ZmQsIDB4MDYsIDB4MWMsIDB4NjAsIDB4OGUsIDB4MDIsIDB4OTksIDB4ZmMsIDB4ZjcsCi0weGM2LCAweGZkLCAweDAzLCAweDkwLCAweDYwLCAweDY5LCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDAyLAotMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwKLTB4ODEsIDB4ODAsIDB4MzAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4YjcsIDB4ZmQsIDB4NjEsIDB4NjksIDB4MDEsIDB4MzEsCi0weGMwLCAweDQzLCAweDYxLCAweDYxLCAweDAxLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDgxLCAweDYwLCAweDZlLAotMHgwMCwgMHg5OSwgMHg0NiwgMHgxOCwgMHgyMCwgMHg2OSwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwNCwKLTB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsIDB4MDIsIDB4NDAsCi0weDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDAxLCAweDQzLCAweDcxLCAweDYwLCAweDAzLCAweDk4LAotMHhmYywgMHhmNywgMHg5YiwgMHhmZCwgMHgyMSwgMHg2OSwgMHg0OSwgMHgxOSwgMHgyMSwgMHg2MSwgMHhhMSwgMHg2OCwKLTB4NDksIDB4MWIsIDB4YTEsIDB4NjAsIDB4MDYsIDB4ZDEsIDB4YjEsIDB4ODksIDB4YTIsIDB4NjksIDB4MTEsIDB4NDMsCi0weGIxLCAweDgxLCAweGExLCAweDY5LCAweGZjLCAweGY3LCAweDhkLCAweGZkLCAweDM4LCAweDgyLCAweDYxLCAweDZlLAotMHgzOCwgMHg2OCwgMHgwOSwgMHgxOCwgMHgwZSwgMHgzMSwgMHhmOSwgMHg2MCwgMHhlMiwgMHg2OCwgMHgwMCwgMHg5OSwKLTB4MDQsIDB4MzgsIDB4MDAsIDB4ZjAsIDB4NGMsIDB4ZjgsIDB4MDIsIDB4MjAsIDB4NzgsIDB4ODIsIDB4ZTAsIDB4NmQsCi0weDQxLCAweDA4LCAweDE2LCAweGQzLCAweDgwLCAweDBhLCAweDBhLCAweGQzLCAweDc4LCAweDY4LCAweDEwLCAweDM4LAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgzOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4ODEsIDB4MDksIDB4ZTAsIDB4NzgsIDB4NjgsIDB4MGMsIDB4MzgsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDM5LCAweDY4LCAweGMwLCAweDQ2LAotMHg0OCwgMHg4MSwgMHgwNSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGY3LCAweGI1LCAweDAzLCAweDFjLCAweDBmLCAweDFjLCAweDAwLCAweDIwLCAweDFjLCAweDY4LCAweDI2LCAweDA0LAotMHgzMSwgMHgxYywgMHgxZCwgMHgxZCwgMHhmYywgMHhmNywgMHg1MSwgMHhmZCwgMHg0MCwgMHhjNywgMHgwMiwgMHg5YSwKLTB4ZDEsIDB4MWMsIDB4ODksIDB4MDgsIDB4MDEsIDB4MzksIDB4NGEsIDB4MWUsIDB4MDIsIDB4OTIsIDB4MDAsIDB4MjksCi0weDBkLCAweGQwLCAweDIxLCAweDBjLCAweDEwLCAweGNkLCAweDIyLCAweDA0LCAweDBhLCAweDQzLCAweDExLCAweDFjLAotMHgxNiwgMHgxYywgMHhmYywgMHhmNywgMHg0MCwgMHhmZCwgMHg0MCwgMHhjNywgMHgwMiwgMHg5OSwgMHg0YSwgMHgxZSwKLTB4MDIsIDB4OTIsIDB4MDAsIDB4MjksIDB4ZjEsIDB4ZDEsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDg5LCAweDA4LCAweDg5LCAweDAwLCAweDAzLCAweDMyLAotMHg5MywgMHgwOCwgMHg1YSwgMHgxZSwgMHgwMCwgMHgyYiwgMHgwNSwgMHhkMCwgMHgwOCwgMHhjOSwgMHgwOCwgMHhjMCwKLTB4MTMsIDB4MWMsIDB4MDEsIDB4M2EsIDB4MDAsIDB4MmIsIDB4ZjksIDB4ZDEsIDB4NzAsIDB4NDcsIDB4ZmYsIDB4YjUsCi0weDg2LCAweGIwLCAweDE3LCAweDFjLCAweDAwLCAweDI2LCAweDA2LCAweDk4LCAweDgwLCAweDZjLCAweGMwLCAweDFiLAotMHgwNiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2NCwgMHgwMSwgMHgyMCwgMHhjMCwgMHgwNSwgMHgwNiwgMHg5OSwKLTB4ODksIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTEsIDB4MDYsIDB4OTksIDB4NGMsIDB4NmIsIDB4NjcsIDB4ZTAsCi0weDIxLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkxLCAweDYxLCAweDY4LCAweGMwLCAweDQ2LCAweDAzLCAweDkxLAotMHhhMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MSwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwgMHhiOSwgMHg0MiwKLTB4MDgsIDB4ZDIsIDB4MDIsIDB4YWQsIDB4NmQsIDB4ODgsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsIDB4N2YsIDB4MWEsCi0weDAwLCAweDIxLCAweDAyLCAweGFiLCAweDU5LCAweDgwLCAweDE5LCAweGUwLCAweDAyLCAweGE5LCAweDQ5LCAweDg4LAotMHhjOSwgMHgxYiwgMHgwMiwgMHhhYiwgMHg1OSwgMHg4MCwgMHgzZCwgMHgxYywgMHgwMCwgMHgyNywgMHgwMSwgMHgyMSwKLTB4NDksIDB4MDYsIDB4MDcsIDB4OWIsIDB4OWEsIDB4MDcsIDB4OTIsIDB4MGYsIDB4MGQsIDB4ZDAsIDB4ZWIsIDB4MDYsCi0weGRiLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDJiLCAweDA4LCAweGQzLCAweDFlLCAweDJiLCAweDAyLCAweGQxLAotMHgwMywgMHgyYSwgMHgwNCwgMHhkMSwgMHgwMSwgMHhlMCwgMHgwMiwgMHgyYSwKLTB4MDEsIDB4ZDMsIDB4MDEsIDB4MjYsIDB4MDAsIDB4MjEsIDB4MjksIDB4NDMsIDB4MDEsIDB4NDMsIDB4MGEsIDB4MWMsCi0weDAwLCAweDkxLCAweDAwLCAweDIwLCAweDAzLCAweDk5LCAweDA0LCAweDlhLCAweDA3LCAweDliLCAweDAxLCAweGYwLAotMHg1YiwgMHhmZiwgMHgwNywgMHg5OSwgMHg0OSwgMHgxOSwgMHgwNywgMHg5MSwgMHgwMCwgMHgyZSwgMHgwYSwgMHhkMCwKLTB4MWQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MWQsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCi0weDAwLCAweDIwLCAweDA3LCAweDliLCAweDAxLCAweGYwLCAweDRjLCAweGZmLCAweDAwLCAweDI2LCAweDAyLCAweGE4LAotMHg0MCwgMHg4OCwgMHgwMCwgMHgyOCwgMHgwYywgMHhkMCwgMHgwMywgMHg5OCwgMHg0MCwgMHgxOSwgMHgwMywgMHg5MCwKLTB4MDIsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjAsIDB4MDMsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjAsCi0weDA0LCAweDk4LCAweGMwLCAweDQ2LCAweGEwLCAweDYwLCAweDAzLCAweGUwLCAweDAxLCAweDk4LCAweDAxLCAweDM4LAotMHgwMSwgMHg5MCwgMHgxMCwgMHgzNCwgMHgwNiwgMHg5OCwgMHhjMCwgMHg0NiwgMHg0NCwgMHg2MywgMHgwMSwgMHg5OCwKLTB4MDYsIDB4OTksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmYsIDB4MDIsIDB4ZDAsCi0weDAxLCAweDk5LCAweDAwLCAweDI5LCAweDkyLCAweGQxLCAweDA5LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLAotMHgwNiwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgMHgwOSwgMHg5YiwgMHgwMSwgMHhmMCwKLTB4MWYsIDB4ZmYsIDB4MGEsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDAxLCAweDAwLCAweDAwLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDUzLCAweDAyLAotMHg5MCwgMHhiNSwgMHgwYywgMHgxYywgMHgwNywgMHgxYywgMHgzOCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDEsIDB4NjgsIDB4MzgsIDB4OGEsIDB4ZmMsIDB4ZjcsIDB4ODUsIDB4ZmMsCi0weGMwLCAweDQzLCAweGY5LCAweDY4LCAweGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDc4LCAweDhhLCAweDM5LCAweDY4LAotMHgwOCwgMHgxYSwgMHgzOCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMSwgMHhmMCwgMHg4YiwgMHhmOSwgMHgzOCwgMHgxYywKLTB4ZmMsIDB4ZjcsIDB4OGMsIDB4ZmIsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzMsIDB4ZmUsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDAxLCAweDg4LCAweDhhLCAweDA5LCAweDIxLCAweGQzLAotMHhjYSwgMHgwOSwgMHgxZiwgMHhkMiwgMHg4YSwgMHgwOCwgMHgxZCwgMHhkMywgMHgwMCwgMHgyMSwgMHgwMSwgMHg4MCwKLTB4NDEsIDB4ODAsIDB4NDcsIDB4NmYsIDB4NDAsIDB4NmQsIDB4ZmEsIDB4MWQsIDB4MTksIDB4MzIsIDB4NTEsIDB4NzEsCi0weGZhLCAweDZkLCAweGMwLCAweDQ2LCAweDEwLCAweDYwLCAweDNhLCAweDZlLCAweGMwLCAweDQ2LCAweDEwLCAweDYwLAotMHgwYywgMHg0OCwgMHhjMCwgMHg0NiwgMHg4MSwgMHg2MywgMHhjMSwgMHg2YiwgMHg0OSwgMHgwOCwgMHg0OSwgMHgwMCwKLTB4YzEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4Y2MsIDB4ZmYsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDZiLCAweGZmLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweDIzLCAweDE5LCAweDQzLAotMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwgMHg0OSwgMHgwOSwgMHhmNiwgMHhkMiwgMHgwMCwgMHhmMCwgMHhiMCwgMHhmOCwKLTB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDEwLCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDI0LCAweDVlLCAweDFlLCAweDAwLCAweDJiLCAweDE5LCAweGQwLAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MCwgMHg0MSwgMHg4OCwgMHgwYywgMHgxOSwgMHg0MSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4NzksIDB4NjAsIDB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjksIDB4NjAsIDB4YzEsIDB4NjgsCi0weGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDEwLCAweDMwLCAweDEwLCAweDM3LCAweGU5LCAweDZhLCAweDgxLCAweDQyLAotMHgwMiwgMHhkOCwgMHgyOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhlYywgMHhmZiwgMHgzMSwgMHgxYywgMHgwMSwgMHgzZSwKLTB4MDAsIDB4MjksIDB4ZTUsIDB4ZDEsIDB4MjAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDIxLCAweGMxLCAweDYxLCAweDA1LCAweDQ5LCAweDBhLCAweDY4LCAweDAwLCAweDJhLCAweDAxLCAweGQxLAotMHgwOCwgMHg2MCwgMHgwMiwgMHhlMCwgMHg0YSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMCwgMHg2MSwgMHg0OCwgMHg2MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MDMsIDB4NDksIDB4MDgsIDB4NjgsCi0weDAwLCAweDI4LCAweDAyLCAweGQwLCAweGMyLCAweDY5LCAweGMwLCAweDQ2LCAweDBhLCAweDYwLCAweDcwLCAweDQ3LAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHgwMCwgMHgyMSwgMHg4MSwgMHg2NywgMHgwNSwgMHg0OSwgMHg4YSwgMHg2OCwKLTB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsIDB4ODgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4Y2EsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDkwLCAweDY3LCAweGM4LCAweDYwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQwLCAweDJjLCAweDAwLCAweDgwLAotMHgwMywgMHg0OSwgMHg4OCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHg4MiwgMHg2ZiwgMHhjMCwgMHg0NiwKLTB4OGEsIDB4NjAsIDB4NzAsIDB4NDcsIDB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDgwLCAweDIwLCAweDEzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGZmLCAweGY3LAotMHhkNSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgxYiwgMHhkMCwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg0MSwgMHg2OCwKLTB4MTksIDB4NDAsIDB4MGEsIDB4MGYsIDB4NTEsIDB4MDEsIDB4ODksIDB4MWEsIDB4ODksIDB4MDAsIDB4MGQsIDB4NGIsCi0weGM5LCAweDE4LCAweDRiLCAweDg4LCAweDAwLCAweDJiLCAweDA0LCAweGQxLCAweDExLCAweDFjLCAweGZmLCAweGY3LAotMHgzYiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyYiwgMHgwMiwgMHhkMSwgMHhmZiwgMHhmNywKLTB4MDUsIDB4ZmMsIDB4ZjgsIDB4ZTcsIDB4MDIsIDB4MmIsIDB4ZjYsIDB4ZDEsIDB4ZmYsIDB4ZjcsIDB4NGUsIDB4ZmIsCi0weGYzLCAweGU3LCAweDA0LCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweGVlLCAweGU3LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4YjUsIDB4MjAsIDB4MjAsIDB4MGQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZmYsIDB4ZjcsCi0weGJmLCAweGZmLCAweDAwLCAweDI4LCAweDBlLCAweGQwLCAweDAxLCAweDg4LCAweDIwLCAweDIzLCAweDE5LCAweDQzLAotMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwgMHgxMCwgMHgyMywgMHg5OSwgMHg0MywgMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwKLTB4MDksIDB4MGEsIDB4MDEsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4MmUsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAzLCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweGY4LCAweGU3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg5OCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MjIsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4MjIsIDB4NDgsIDB4YzMsIDB4MWQsIDB4NDEsIDB4MzMsCi0weDQxLCAweDZkLCAweDgyLCAweDZkLCAweDgwLCAweDZjLCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDljLCAweDY4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHg5OCwgMHg0MiwgMHgwMCwgMHhkMSwKLTB4MGMsIDB4ZTAsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MTAsIDB4MWEsIDB4NTksIDB4MWEsIDB4NDEsIDB4MTgsCi0weDAwLCAweGUwLCAweDE5LCAweDFhLCAweDAxLCAweDIwLCAweDEwLCAweDI5LCAweDAwLCAweGQ4LCAweDAwLCAweDIwLAotMHgwMCwgMHgyOCwgMHgxZiwgMHhkMCwgMHg3OCwgMHg2YSwgMHhmOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwKLTB4YjgsIDB4NmEsIDB4ZjksIDB4NmEsIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjAsIDB4MTAsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDAwLCAweDkyLCAweGZiLCAweDZhLCAweDBmLCAweDQ4LCAweDQyLCAweDZkLCAweDAzLCAweDIwLCAweDM5LCAweDZhLAotMHgwMSwgMHhmMCwgMHhlMiwgMHhmZCwgMHgzOCwgMHg4OCwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg4MCwKLTB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsIDB4OTgsIDB4NDMsIDB4MzgsIDB4ODAsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDU1LCAweGZmLCAweDk4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDM4LCAweDg4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgzOCwgMHg4MCwgMHhmNywgMHhlNywgMHgwMCwgMHgwMCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwKLTB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MTEsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weGIwLCAweGI1LCAweDQwLCAweDIwLCAweDJjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHhmZCwgMHhmZSwgMHgwNywgMHgxYywgMHg0MCwgMHg2OCwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwKLTB4MDUsIDB4MGYsIDB4NjgsIDB4MDEsIDB4NDAsIDB4MWIsIDB4ODAsIDB4MDAsIDB4MjYsIDB4NDksIDB4NDQsIDB4MTgsCi0weDIwLCAweDg4LCAweDAyLCAweDIzLCAweDE4LCAweDQzLCAweDIwLCAweDgwLCAweDIwLCAweDg4LCAweDQxLCAweDA4LAotMHgzNCwgMHhkMywgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhhMCwgMHg2YywgMHhlMSwgMHg2YywKLTB4NDAsIDB4MTgsIDB4YTAsIDB4NjQsIDB4MDAsIDB4MjAsIDB4ZTAsIDB4NjQsIDB4YTEsIDB4NmIsIDB4MjIsIDB4NmQsCi0weDg5LCAweDE4LCAweGExLCAweDYzLCAweDIwLCAweDY1LCAweGI4LCAweDZhLCAweGMwLCAweDQ2LCAweDYwLCAweDY1LAotMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg3OCwgMHg2OCwgMHgxOCwgMHg0MCwgMHg3OCwgMHg2MCwgMHg2MSwgMHg2OCwKLTB4MzYsIDB4MzEsIDB4OTQsIDB4MjksIDB4MDQsIDB4ZDgsIDB4MzgsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjAsCi0weDM4LCAweDIwLCAweDAzLCAweGUwLCAweDk0LCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYwLCAweDk0LCAweDIwLAotMHhiOCwgMHg2MSwgMHgzOSwgMHg2OCwgMHg3OCwgMHg2OCwgMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgyMCwgMHgxYywKLTB4Y2IsIDB4MWYsIDB4MDUsIDB4M2IsIDB4ZmYsIDB4ZjcsIDB4ZDcsIDB4ZmQsIDB4MDIsIDB4MjAsIDB4NjAsIDB4ODAsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweGRmLCAweGZlLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgzOCwgMHgxYywgMHhmYywgMHhmNywgMHgwNywgMHhmYSwgMHgyOCwgMHgwMSwgMHgwNiwgMHg0OSwgMHg0MCwgMHgxOCwKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsCi0weGVmLCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwMCwgMHgyNywKLTB4MGYsIDB4NGMsIDB4MGQsIDB4ZTAsIDB4NDIsIDB4NmIsIDB4MDEsIDB4M2EsIDB4NDIsIDB4NjMsIDB4MDAsIDB4MmEsCi0weDA1LCAweGRjLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDQyLCAweDYzLCAweGMwLCAweDZhLCAweDAxLCAweGYwLAotMHhjNiwgMHhmOSwgMHgwMSwgMHgzNywgMHgwYiwgMHgyZiwgMHgwNywgMHhkMiwgMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4NmEsIDB4MDAsIDB4MjksIDB4ZTksIDB4ZDEsCi0weDAxLCAweDIwLCAweDQwLCAweDA2LCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4MTAsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MzEsIDB4YzEsIDB4NjAsIDB4MGYsIDB4NDksIDB4YzgsIDB4NjgsCi0weDAxLCAweDI4LCAweDE3LCAweGQxLCAweGM4LCAweDFkLCAweDc5LCAweDMwLCAweDAyLCAweDg5LCAweDAwLCAweDJhLAotMHgxMiwgMHhkMCwgMHgwMSwgMHgzYSwgMHgwMiwgMHg4MSwgMHgwMiwgMHg4OSwgMHgwMCwgMHgyYSwgMHgwZCwgMHhkMSwKLTB4NDIsIDB4ODksIDB4MDAsIDB4MmEsIDB4MDgsIDB4ZDEsIDB4YzksIDB4NmYsIDB4MDIsIDB4MjMsIDB4MGEsIDB4NjgsCi0weDFhLCAweDQzLCAweDBhLCAweDYwLCAweDA0LCAweDIxLCAweDAxLCAweDgxLCAweDAxLCAweDIxLCAweDAwLCAweGUwLAotMHgwMCwgMHgyMSwgMHg0MSwgMHg4MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MjMsIDB4ZjgsIDB4MWQsCi0weDY5LCAweDMwLCAweDAzLCAweDczLCAweDFlLCAweDQ4LCAweGMyLCAweDFkLCAweDc5LCAweDMyLCAweDU0LCAweDhhLAotMHg2MSwgMHgxYywgMHg1MSwgMHg4MiwgMHhkNSwgMHg4YSwgMHgwMCwgMHgyMSwgMHhhYywgMHg0MiwgMHgwNCwgMHhkYiwKLTB4YzQsIDB4MWQsIDB4ODksIDB4MzQsIDB4NjMsIDB4NzAsIDB4NTEsIDB4ODIsIDB4ZDEsIDB4ODMsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDNhLCAweDZkLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweGMwLCAweDQ2LCAweGJhLCAweDYxLAotMHhmYiwgMHg2OSwgMHg5YSwgMHg0MiwgMHgwNiwgMHhkMSwgMHhmOCwgMHg2YywgMHgxMiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzksIDB4NjEsIDB4NDEsIDB4NjksCi0weGZhLCAweDZjLCAweDkxLCAweDQzLCAweDQxLCAweDYxLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweGMxLCAweDYwLAotMHgzOCwgMHg2OSwgMHgwMiwgMHgyOCwgMHhmMSwgMHhkMCwgMHhiOCwgMHg2OSwgMHhmOSwgMHg2OSwgMHg0MSwgMHgxYSwKLTB4MDEsIDB4ZDUsIDB4NzgsIDB4NmQsIDB4NDEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsCi0weGY5LCAweDY5LCAweDA5LCAweDE4LCAweGY5LCAweDYxLCAweDc4LCAweDZkLCAweDgxLCAweDQyLCAweGUyLCAweGQzLAotMHgwOCwgMHgxYSwgMHhmOCwgMHg2MSwgMHhkZiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ZjgsIDB4YjUsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4ZmYsIDB4MjMsCi0weDIxLCAweDMzLCAweDlmLCAweDQyLCAweDAxLCAweGQ5LCAweGZmLCAweDI3LCAweDIxLCAweDM3LCAweGUxLCAweDZlLAotMHgzOCwgMHgxYywgMHgwMSwgMHhmMCwgMHhjYiwgMHhmYywgMHgyZCwgMHg0ZCwgMHgwMCwgMHgyOCwgMHgxMywgMHhkMSwKLTB4ZTAsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDEsIDB4N2EsIDB4MDEsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDEsIDB4NzIsCi0weDI5LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDI5LCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwgMHhiMCwgMHhmYywgMHgwMCwgMHgyMCwgMHhmOCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjAsIDB4NjksIDB4MDEsIDB4MzAsIDB4MjAsIDB4NjEsIDB4MjMsIDB4NDksCi0weGM4LCAweDFkLCAweGI5LCAweDMwLCAweDAyLCAweDZiLCAweDkyLCAweDAwLCAweDUxLCAweDE4LCAweGMwLCAweDMxLAotMHgwZiwgMHg2MSwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4OSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwMSwgMHg2MywKLTB4MjAsIDB4NmIsIDB4YzIsIDB4MTksIDB4NjEsIDB4NmQsIDB4OGEsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjMsIDB4MjIsCi0weDEyLCAweDA1LCAweDNhLCAweDQzLCAweDA1LCAweGUwLCAweDA5LCAweDFhLCAweDdlLCAweDFhLCAweDA3LCAweGQxLAotMHgyMywgMHgyMiwgMHgxMiwgMHgwNSwgMHgwYSwgMHg0MywgMHgwMCwgMHg5MiwgMHg2MSwgMHg2ZSwgMHgwOSwgMHgxOCwKLTB4YTIsIDB4NmUsIDB4MTAsIDB4ZTAsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsCi0weDYxLCAweDZlLCAweDA5LCAweDE4LCAweDAwLCAweDIwLCAweGEyLCAweDZlLCAweDJiLCAweDFjLCAweDAxLCAweGYwLAotMHg3ZCwgMHhmYywgMHgyMywgMHgyMiwgMHgxMiwgMHgwNSwgMHgzMiwgMHg0MywgMHgwMCwgMHg5MiwgMHg2MSwgMHg2ZSwKLTB4YTIsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4NzMsIDB4ZmMsIDB4MjAsIDB4NmIsCi0weGMwLCAweDE5LCAweDAwLCAweDA5LCAweDAwLCAweDAxLCAweDYxLCAweDZkLCAweDgxLCAweDQyLCAweDAwLCAweGQ4LAotMHg0MCwgMHgxYSwgMHgyMCwgMHg2MywgMHgzOCwgMHgxYywgMHhiOCwgMHhlNywKLTB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MWIsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDAxLCAweDIwLCAweGMwLCAweDAzLCAweDBkLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwYywgMHg0OSwgMHhjOCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMiwgMHg3YSwKLTB4MDAsIDB4MjcsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4MDcsIDB4NzIsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDM3LCAweGZmLCAweDA4LCAweDQ5LCAweGM4LCAweDFkLCAweDQ5LCAweDMwLCAweDAyLCAweDdhLCAweDAwLCAweDJhLAotMHgwMywgMHhkMCwgMHgwNywgMHg3MiwgMHgwOCwgMHgxYywgMHhmZiwgMHhmNywgMHgyZCwgMHhmZiwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGU0LCAweDJjLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDEwLCAweDIwLCAweDE4LCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHhmOCwgMHg2MCwgMHgxNiwgMHg0OCwKLTB4YzQsIDB4MWQsIDB4YjksIDB4MzQsIDB4NjEsIDB4NmIsIDB4ODksIDB4MDAsIDB4MDksIDB4MTgsIDB4YzAsIDB4MzEsCi0weDA5LCAweDY5LCAweDdhLCAweDY4LCAweDkyLCAweDAwLCAweGQyLCAweDE5LCAweDUxLCAweDY0LCAweDYxLCAweDZiLAotMHg4OSwgMHgwMCwgMHgwOCwgMHgxOCwgMHhjMCwgMHgzMCwgMHgwMSwgMHg2OSwgMHg3OCwgMHg2OCwgMHg4MCwgMHgwMCwKLTB4YzAsIDB4MTksIDB4YzAsIDB4NmIsIDB4MDEsIDB4ZjAsIDB4YTIsIDB4ZmEsIDB4MDEsIDB4MjMsIDB4NzgsIDB4NjgsCi0weDU4LCAweDQwLCAweDc4LCAweDYwLCAweDYwLCAweDZiLCAweDAxLCAweDMwLCAweDgwLCAweDA3LCAweDgwLCAweDBmLAotMHg2MCwgMHg2MywgMHhmOCwgMHgxZCwgMHgxOSwgMHgzMCwgMHg0MCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4ZjgsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgzOSwgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwNSwgMHhkMCwgMHhiOCwgMHg2YSwgMHhjMCwgMHg2OCwKLTB4ODAsIDB4MDksIDB4MDEsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4NzgsIDB4NmYsIDB4ZmMsIDB4ZjcsCi0weDU5LCAweGY4LCAweDA0LCAweDFjLCAweDA2LCAweGQxLCAweDAxLCAweDIwLCAweGY5LCAweDFkLCAweDE5LCAweDMxLAotMHgwOCwgMHg3MSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmOCwgMHg2YywgMHgyZiwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YmEsIDB4NmEsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDU5LCAweGY4LCAweDY3LCAweDYyLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAotMHgwYiwgMHhmZCwgMHhlYywgMHhlNywgMHhmOSwgMHg2ZCwgMHgwOSwgMHg2OCwgMHgwOSwgMHgxOCwgMHgwOSwgMHgwOSwKLTB4MDksIDB4MDEsIDB4N2EsIDB4NmQsIDB4OGEsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4ODksIDB4MWEsIDB4YTEsIDB4NjIsCi0weGI5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweDRhLCAweDZjLCAweDAwLCAweDJhLCAweDA3LCAweGQwLAotMHg0YSwgMHg2YywgMHgxMiwgMHgxYSwgMHg0YSwgMHg2NCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHhiOSwgMHg2YSwKLTB4MDgsIDB4MTgsIDB4YjgsIDB4NjIsIDB4MzgsIDB4NjgsIDB4YjksIDB4NmEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4MTksCi0weDQyLCAweDZiLCAweDkxLCAweDQyLCAweDBlLCAweGQzLCAweDAwLCAweDIxLCAweDQxLCAweDY0LCAweGI4LCAweDZhLAotMHgzOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0OSwgMHg2YiwgMHg0MCwgMHgxYSwgMHhiOCwgMHg2MiwKLTB4YjksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4YzksIDB4NmIsIDB4NDAsIDB4MTgsIDB4YjgsIDB4NjIsCi0weGI4LCAweDY4LCAweDgxLCAweDAwLCAweGM5LCAweDE5LCAweDQ5LCAweDZjLCAweDAwLCAweDI5LCAweGI4LCAweGQxLAotMHhiOSwgMHg2YSwgMHhmYSwgMHg2YiwgMHg5MSwgMHg0MiwgMHhiNCwgMHhkMCwgMHgzYSwgMHg2YywgMHg5MSwgMHg0MiwKLTB4YjEsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4NTgsIDB4NDAsIDB4YjgsIDB4NjAsIDB4ODAsIDB4MDAsIDB4YzAsIDB4MTksCi0weGMwLCAweDZiLCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweGY4LCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQwLAotMHgwMSwgMHgzOCwgMHhmOCwgMHg2MCwgMHgzOCwgMHg2OSwgMHgwMCwgMHgyOCwgMHhhMSwgMHhkMCwgMHgwMSwgMHgzOCwKLTB4MzgsIDB4NjEsIDB4OWUsIDB4ZTcsIDB4NjgsIDB4MTksIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weGY3LCAweGI1LCAweDkwLCAweGIwLCAweDA0LCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDIwLCAweDA1LCAweDkwLAotMHgwMiwgMHg5MCwgMHgwMCwgMHgyMiwgMHgwMSwgMHg5MiwgMHhmOSwgMHg0OCwgMHhjMCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4YTgsIDB4NjEsIDB4YTAsIDB4NjgsIDB4ODEsIDB4MDAsIDB4MDksIDB4MTksIDB4NDksIDB4NmIsIDB4YzAsIDB4NDYsCi0weDIwLCAweDYwLCAweGUxLCAweDYyLCAweDEyLCAweDlhLCAweGQwLCAweDY4LCAweGMwLCAweDQ2LCAweGE4LCAweDYwLAotMHgxMiwgMHg5YSwgMHg1MSwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwYywgMHg5MSwgMHhmMCwgMHg0OCwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4OTAsIDB4ZDcsIDB4MWQsIDB4MDksIDB4MzcsIDB4ZTAsIDB4NmEsCi0weGMxLCAweDFiLCAweDA5LCAweDA5LCAweGUzLCAweDFkLCAweDE5LCAweDMzLCAweDBjLCAweDlhLCAweGMwLCAweDQ2LAotMHgwZiwgMHg5MywgMHhlYiwgMHg0YiwgMHhjMCwgMHg0NiwgMHgwZSwgMHg5MywgMHg5MSwgMHg0MiwgMHgwMSwgMHhkMywKLTB4YjgsIDB4NDIsIDB4MjEsIDB4ZDgsIDB4ZTEsIDB4NjgsIDB4MDIsIDB4MjksIDB4MWUsIDB4ZDIsIDB4MDEsIDB4MjAsCi0weDBmLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcxLCAweDAwLCAweDIwLCAweDAzLCAweDk5LCAweDAxLCAweGYwLAotMHg1NywgMHhmYiwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgwZSwgMHg5YiwgMHhkOCwgMHg2YiwgMHgwMSwgMHgzMCwKLTB4ZDgsIDB4NjMsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MjcsIDB4NjgsIDB4NjAsIDB4YWYsIDB4NjEsCi0weGRkLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweGRkLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHhkYywgMHg0YiwgMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHgzYSwgMHhmYiwgMHgzOCwgMHgxYywgMHg1YywgMHhlMywKLTB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmMsIDB4MDcsIDB4MWMsCi0weGQ3LCAweDQ4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LCAweDY0LCAweGQwLCAweDM4LCAweDc4LCAweDQwLCAweDA3LAotMHg0MCwgMHgwZiwgMHgwMywgMHgyOCwgMHg2MCwgMHhkMSwgMHgwNSwgMHg5OCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4MDUsIDB4OTAsIDB4MzgsIDB4NzgsIDB4ZjAsIDB4MjMsIDB4MTgsIDB4NDAsIDB4NTgsIDB4ZDEsCi0weGUwLCAweDZhLCAweGMwLCAweDFiLCAweDAwLCAweDA5LCAweDBjLCAweDk5LCAweDg4LCAweDQyLCAweDAyLCAweGQyLAotMHhlMCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgwNSwgMHhkMywgMHhjYiwgMHg0OSwgMHg4OCwgMHg2OCwgMHgwMCwgMHhmMCwKLTB4ODMsIDB4ZmYsIDB4MDYsIDB4MWMsIDB4MDYsIDB4ZDEsIDB4MDMsIDB4OWIsIDB4MjgsIDB4MWMsIDB4MzksIDB4MWMsCi0weDIyLCAweDFjLCAweDAwLCAweGYwLCAweDhiLCAweGZjLCAweDE2LCAweGUxLCAweDJlLCAweDYyLCAweGY4LCAweDY4LAotMHgwMCwgMHgyOCwgMHgwZCwgMHhkMCwgMHhiOCwgMHg4OSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHhjMSwgMHg0OSwKLTB4YzksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NzAsIDB4ZmYsIDB4ZjgsIDB4ODksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsCi0weGJkLCAweDQ5LCAweGM5LCAweDY4LCAweDAwLCAweGYwLCAweDY5LCAweGZmLCAweDdhLCAweDY4LCAweGMwLCAweDQ2LAotMHg3MiwgMHg2MSwgMHhiOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiMSwgMHg2MSwgMHgzMCwgMHgxYywgMHhiOCwgMHg0OSwKLTB4MDksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NWUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MTcsIDB4ZDEsIDB4MzAsIDB4MWMsCi0weGI0LCAweDQ5LCAweDQ5LCAweDY4LCAweDAwLCAweGYwLCAweDU3LCAweGZmLCAweDEwLCAweDM3LCAweGUwLCAweDZhLAotMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyNywgMHhmYywgMHgwNywgMHgxYywKLTB4NjgsIDB4NjgsIDB4YWYsIDB4NGIsIDB4MTgsIDB4NDMsIDB4NjgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4YTgsIDB4NjEsCi0weGFjLCAweDIzLCAweGE4LCAweDY4LCAweDk4LCAweDQzLCAweGE4LCAweDYwLCAweGIwLCAweGUwLCAweGE4LCAweDY5LAotMHhhOCwgMHgyOCwgMHgwMSwgMHhkMiwgMHhhOCwgMHgyMCwgMHhhOCwgMHg2MSwgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwKLTB4YjgsIDB4NDIsIDB4NmMsIDB4ZDgsIDB4OWMsIDB4ZTAsIDB4YTUsIDB4ZTAsIDB4YTQsIDB4ZTAsIDB4MTAsIDB4MjgsCi0weDY4LCAweGQxLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDY4LCAweDY4LCAweDE4LCAweDQwLCAweDAxLCAweDBmLAotMHg0OCwgMHgwMSwgMHg0MCwgMHgxYSwgMHg4MCwgMHgwMCwgMHhhMCwgMHg0YSwgMHg4MiwgMHgxOCwgMHgwMSwgMHg5MiwKLTB4NzgsIDB4ODgsIDB4NDIsIDB4MGIsIDB4MzEsIDB4ZDMsIDB4ODIsIDB4MGIsIDB4MmYsIDB4ZDMsIDB4OWQsIDB4NDgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDAyLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDEwLCAweDgwLAotMHg3OCwgMHg4OCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwZCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MCwKLTB4YjgsIDB4NjgsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjAsIDB4NzgsIDB4NjgsIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweDEwLCAweDYyLCAweDAwLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDY0LAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MywgMHg4OCwgMHgwMiwgMHg4ZiwgMHg0OSwgMHg0MCwgMHgxOCwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjMsIDB4MDEsIDB4OWEsIDB4NTAsIDB4NjgsIDB4MzYsIDB4MzAsCi0weDk0LCAweDI4LCAweDAxLCAweGQ4LCAweDM4LCAweDIwLCAweDAwLCAweGUwLCAweDk0LCAweDIwLCAweGE4LCAweDYxLAotMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgyOCwgMHhkOCwgMHg1OCwgMHhlMCwgMHg3YSwgMHg4OCwKLTB4OTIsIDB4MGIsIDB4MDMsIDB4ZDMsIDB4ODUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MjMsIDB4ZTAsCi0weDAxLCAweDIyLCAweDEyLCAweDAzLCAweDAyLCAweDQwLCAweDgzLCAweDRiLCAweDFkLCAweGQwLCAweDAzLCAweDkzLAotMHgwMCwgMHgwNSwgMHgwMCwgMHgwZCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MCwgMHhiOCwgMHg2OCwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjAsIDB4NzgsIDB4NjgsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsCi0weDEwLCAweDYyLCAweDAwLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LAotMHg5MCwgMHg2NCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MywgMHg4OCwgMHgwMiwgMHg3NSwgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjMsIDB4MDIsIDB4ZTAsIDB4MzMsIDB4ZTAsCi0weDJhLCAweGUwLCAweDAzLCAweDkzLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcxLAotMHgxMiwgMHg5YSwgMHg1MCwgMHg3OCwgMHgwNSwgMHg5OSwgMHg0MywgMHgxYSwgMHgwYiwgMHg5MywgMHgxMCwgMHgzNywKLTB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4ZmIsCi0weDA3LCAweDFjLCAweDAxLCAweDlhLCAweDUwLCAweDZiLCAweDkxLCAweDZiLCAweDA5LCAweDAxLCAweDQwLCAweDE4LAotMHgwYiwgMHg5YiwgMHgyMSwgMHgxYywgMHgzYSwgMHgxYywgMHhmZiwgMHhmNywgMHg3ZCwgMHhmYiwgMHgwMSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4ZDAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4MGIsIDB4OWIsIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjUsCi0weDAxLCAweDIzLCAweDViLCAweDA2LCAweDY4LCAweDY4LCAweDE4LCAweDQzLCAweDY4LCAweDYwLCAweDAwLCAweDIwLAotMHhhOCwgMHg2MSwgMHgwZCwgMHhlMCwgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwKLTB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzEsIDB4ZmIsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NzgsIDB4NDAsIDB4MDcsCi0weDQwLCAweDBmLCAweDAzLCAweDI4LCAweDAwLCAweGQxLCAweGY4LCAweGU2LCAweGE4LCAweDY5LCAweDAzLCAweDk5LAotMHgwMSwgMHhmMCwgMHgyNiwgMHhmYSwgMHgwMCwgMHgyOCwgMHgyYSwgMHhkMSwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4NzksIDB4ZmIsIDB4YTgsIDB4NjgsIDB4ODAsIDB4MDksIDB4MDQsIDB4ZDMsIDB4MzAsIDB4MWMsCi0weDQ5LCAweDQ5LCAweDQ5LCAweDY4LCAweDAwLCAweGYwLCAweDgxLCAweGZlLCAweDQxLCAweDQ5LCAweDAwLCAweDIwLAotMHgwMSwgMHhmMCwgMHgxNCwgMHhmYSwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkMSwgMHgwZSwgMHg5YiwgMHhkOCwgMHg2YiwKLTB4MDEsIDB4MzAsIDB4ZDgsIDB4NjMsIDB4MTEsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsCi0weDQ4LCAweDcxLCAweDgwLCAweDA2LCAweDAwLCAweDI3LCAweDY4LCAweDYwLCAweGFmLCAweDYxLCAweDNhLCAweDRhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgzOSwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgzOSwgMHg0YiwKLTB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZjMsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MTUsIDB4ZTIsIDB4MDUsIDB4OTgsCi0weDBjLCAweDk5LCAweDA4LCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDBjLCAweDkwLCAweDBiLCAweDkwLAotMHgwYywgMHg5OCwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NzEsIDB4MjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MjAsCi0weDA4LCAweDkwLCAweDAwLCAweDIyLCAweDBhLCAweDkyLCAweDBjLCAweDk4LCAweDAxLCAweDM4LCAweDBkLCAweDkwLAotMHhhMywgMHhlMCwgMHg3OCwgMHg4OCwgMHg4YSwgMHgxYiwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg5MCwgMHg0MiwKLTB4MDUsIDB4ZGQsIDB4MDcsIDB4OTIsIDB4ODAsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4OTAsCi0weDAwLCAweGUwLCAweDA3LCAweDkwLCAweDA4LCAweDk4LCAweDAwLCAweDI4LCAweDA3LCAweGQxLCAweDBkLCAweDk4LAotMHgwYSwgMHg5YSwgMHg5MCwgMHg0MiwgMHgwNywgMHhkZCwgMHgwNywgMHg5OCwgMHgzMCwgMHgxOCwgMHg4OCwgMHg0MiwKLTB4MDMsIDB4ZDgsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDUsIDB4MDYsIDB4OTAsIDB4MWMsIDB4ZTAsIDB4MTEsIDB4MjAsCi0weDQwLCAweDA1LCAweDA2LCAweDkwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQxLAotMHgyMCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwNiwgMHg5MCwgMHhiMSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwZiwgMHhkMCwKLTB4MDcsIDB4OTgsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsIDB4MDgsIDB4ZDAsIDB4MWUsIDB4MjgsIDB4MDksIDB4ZGIsCi0weDFlLCAweDI4LCAweDAyLCAweGQxLCAweDAzLCAweDI5LCAweDA1LCAweGQxLCAweDAxLCAweGUwLCAweDAyLCAweDI5LAotMHgwMiwgMHhkMywgMHgwMSwgMHgyMCwgMHgwMiwgMHg5MCwgMHhkZSwgMHhlNywgMHgwYSwgMHg5YSwgMHgwMCwgMHgyYSwKLTB4MDQsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDUsIDB4MDYsIDB4OTgsIDB4MTgsIDB4NDMsIDB4MDYsIDB4OTAsCi0weDA3LCAweDk4LCAweDA2LCAweDk5LCAweDA4LCAweDQzLCAweDAyLCAweDFjLCAweDAwLCAweDkwLCAweDA0LCAweDk4LAotMHg4MywgMHgxOSwgMHgxZCwgMHhlMCwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMSwgMHg0OSwgMHhmZiwgMHhmZiwKLTB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDYwLCAweDA0LCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHg1NSwgMHgzMiwgMHhmZiwgMHhmZiwKLTB4YWMsIDB4NWUsIDB4MjEsIDB4NDAsIDB4MGQsIDB4M2QsIDB4ZmYsIDB4ZmYsIDB4Y2QsIDB4MzEsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweDAwLCAweDMyLCAweDAyLCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLAotMHg2YiwgMHhmOSwgMHgwNywgMHg5OCwgMHgzNiwgMHgxOCwgMHgwMiwgMHg5OCwKLTB4MDAsIDB4MjgsIDB4MTYsIDB4ZDAsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDQsIDB4ZDEsCi0weDA5LCAweDIzLCAweDViLCAweDA0LCAweDA2LCAweDk4LCAweDE4LCAweDQzLCAweDA2LCAweDkwLCAweDA2LCAweDk4LAotMHhjMiwgMHg0YSwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwgMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHhjMSwgMHg0OCwKLTB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4NTEsIDB4ZjksIDB4MDAsIDB4MjAsCi0weDAyLCAweDkwLCAweDA4LCAweDk4LCAweDAwLCAweDI4LCAweDBiLCAweGQxLCAweDBiLCAweDliLCAweDAxLCAweDNiLAotMHgwYiwgMHg5MywgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwYywgMHhkOCwgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4OGEsIDB4ZmEsIDB4MDcsIDB4MWMsIDB4MDcsIDB4ZTAsIDB4NzgsIDB4NjgsIDB4MDcsIDB4OWEsCi0weDgwLCAweDE4LCAweDc4LCAweDYwLCAweDc4LCAweDg4LCAweDA3LCAweDlhLCAweDgwLCAweDFhLCAweDc4LCAweDgwLAotMHgwYSwgMHg5YSwgMHg1MCwgMHgxYywgMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwYSwgMHg5MiwgMHgwYywgMHg5OCwKLTB4MGEsIDB4OWEsIDB4ODIsIDB4NDIsIDB4MDMsIDB4ZGEsIDB4YTksIDB4NjksIDB4YjEsIDB4NDIsIDB4MDAsIDB4ZDksCi0weDUzLCAweGU3LCAweGE4LCAweDY5LCAweGIwLCAweDQyLCAweDZiLCAweGQxLCAweGE4LCAweDY4LCAweDAxLCAweDA5LAotMHg2OSwgMHhkMiwgMHgwOCwgMHg5YSwgMHgwMCwgMHgyYSwgMHg1NiwgMHhkMCwgMHgwYywgMHg5OSwgMHgwYSwgMHg5YSwKLTB4OGEsIDB4NDIsIDB4M2UsIDB4ZGIsIDB4YjEsIDB4MDcsIDB4ODksIDB4MGYsIDB4MGMsIDB4ZDAsIDB4MDgsIDB4OWEsCi0weGQyLCAweDA2LCAweGQyLCAweDBlLCAweDBiLCAweGQwLCAweDFlLCAweDJhLCAweDA2LCAweGRiLCAweDFlLCAweDJhLAotMHgwMiwgMHhkMSwgMHgwMywgMHgyOSwgMHgwNSwgMHhkMCwgMHgwMSwgMHhlMCwgMHgwMiwgMHgyOSwgMHgwMiwgMHhkMiwKLTB4MDIsIDB4OTksIDB4MDAsIDB4MjksIDB4MjEsIDB4ZDAsIDB4MDgsIDB4OWEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsCi0weDA0LCAweDk4LCAweDgzLCAweDE5LCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLAotMHgwMSwgMHhmOSwgMHgwOCwgMHg5OCwgMHgzNiwgMHgxOCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwKLTB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDYsIDB4MDAsIDB4ZTAsIDB4OTIsIDB4NDgsIDB4MDEsIDB4MjIsCi0weDAyLCAweDQzLCAweDAwLCAweDkyLCAweDA0LCAweDk4LCAweDgzLCAweDE5LCAweDhlLCAweDQ4LCAweDAxLCAweDZkLAotMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHhlYywgMHhmOCwgMHgwMCwgMHgyMCwgMHgwMiwgMHg5MCwKLTB4MTUsIDB4ZTAsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDYsCi0weDAwLCAweGUwLCAweDg4LCAweDQ4LCAweDA4LCAweDlhLCAweDAyLCAweDQzLCAweDAwLCAweGUwLCAweDA4LCAweDlhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwKLTB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsIDB4ZDUsIDB4ZjgsIDB4MDgsIDB4OTgsIDB4MzYsIDB4MTgsIDB4MTAsIDB4MzcsCi0weGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDE0LCAweGZhLAotMHgwNywgMHgxYywgMHg2OCwgMHg2OCwgMHg4MCwgMHgwZSwgMHg2YiwgMHhkMiwgMHgwYSwgMHg5OCwgMHhjMCwgMHg0NiwKLTB4MDksIDB4OTAsIDB4MGMsIDB4OTksIDB4ODgsIDB4NDIsIDB4NWMsIDB4ZGEsIDB4MGQsIDB4OTgsIDB4MDksIDB4OTksCi0weDg4LCAweDQyLCAweDAzLCAweGQwLCAweDdhLCAweDg4LCAweDFlLCAweGUwLCAweDVmLCAweGUwLCAweDVlLCAweGUwLAotMHg3OCwgMHg4OCwgMHgwMSwgMHgyMiwgMHg1MiwgMHgwNiwgMHgwMiwgMHg0MywgMHhhOSwgMHg2OCwgMHg4YywgMHgyMywKLTB4MTksIDB4NDAsIDB4MDIsIDB4ZDEsIDB4MDksIDB4MjMsIDB4NWIsIDB4MDQsIDB4MWEsIDB4NDMsIDB4YjEsIDB4MDcsCi0weDg5LCAweDBmLCAweDBlLCAweGQwLCAweGMzLCAweDA2LCAweGRiLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDJiLAotMHgwOSwgMHhkYiwgMHgxZSwgMHgyYiwgMHgwMiwgMHhkMSwgMHgwMywgMHgyOSwgMHgwNSwgMHhkMSwgMHgwMSwgMHhlMCwKLTB4MDIsIDB4MjksIDB4MDIsIDB4ZDMsIDB4MDEsIDB4MjEsIDB4MDIsIDB4OTEsIDB4MDIsIDB4MWMsIDB4MDksIDB4OTgsCi0weDAwLCAweDI4LCAweDAyLCAweGQxLCAweDAxLCAweDIzLCAweGRiLCAweDA1LCAweDFhLCAweDQzLCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4OGYsIDB4ZjgsIDB4NzgsIDB4ODgsIDB4ODYsIDB4MTksIDB4MTAsIDB4MzcsIDB4MDIsIDB4OTgsIDB4MDAsIDB4MjgsCi0weDE0LCAweGQwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQwLCAweDAxLCAweDIwLAotMHg0MCwgMHgwNiwgMHgwMCwgMHhlMCwgMHg1NywgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4NTMsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsCi0weDAxLCAweGYwLCAweDc2LCAweGY4LCAweDAwLCAweDIwLCAweDAyLCAweDkwLCAweGUwLCAweDZhLCAweGI4LCAweDQyLAotMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmOSwgMHgwNywgMHgxYywgMHgwOSwgMHg5OCwKLTB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDksIDB4OTAsCi0weDBjLCAweDk5LCAweDg4LCAweDQyLCAweGEyLCAweGRiLCAweDY4LCAweDY4LCAweDMwLCAweDQzLCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHg2OCwgMHg2MCwgMHhlOCwgMHg2YSwgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYSwgMHgyOCwgMHhlMCwKLTB4MjcsIDB4ZTAsIDB4YTgsIDB4NjgsIDB4MDAsIDB4MDksIDB4MTQsIDB4ZDMsIDB4NjgsIDB4NjgsIDB4ODAsIDB4MGUsCi0weDE1LCAweGQyLCAweDAxLCAweDlhLCAweDAwLCAweDJhLCAweDEyLCAweGQwLCAweDAxLCAweDlhLCAweDUwLCAweDZiLAotMHgwYiwgMHg5YiwgMHgyMSwgMHgxYywgMHgzYSwgMHgxYywgMHhmZiwgMHhmNywgMHg4OSwgMHhmOSwgMHgwMSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4OTAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4MGIsIDB4OWIsIDB4YzAsIDB4NDYsIDB4OTMsIDB4NjMsCi0weDAzLCAweGUwLCAweGU4LCAweDZhLCAweDMxLCAweDFjLCAweDAwLCAweGYwLCAweDVkLCAweGZhLCAweDY4LCAweDY4LAotMHgzMCwgMHg0MywgMHg2OCwgMHg2MCwgMHhhOCwgMHg2OSwgMHhiMCwgMHg0MiwgMHgwNSwgMHhkOSwgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4ODAsIDB4MWIsIDB4MDAsIDB4ZjAsIDB4ZWUsIDB4ZjksIDB4YWUsIDB4NjEsIDB4YTgsIDB4NjgsCi0weDhjLCAweDIzLCAweDE4LCAweDQwLCAweDBiLCAweGQwLCAweDJmLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgyYSwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4MjMsIDB4ZjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjAsIDB4NmQsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLCAweGUxLCAweDY5LCAweDgxLCAweDQyLAotMHgxMiwgMHhkMCwgMHgyMiwgMHg2OSwgMHgwMiwgMHgyYSwgMHgwZiwgMHhkMiwgMHg0MSwgMHgxYSwgMHgwMSwgMHhkNSwKLTB4NjAsIDB4NmQsIDB4NDEsIDB4MTgsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4M2YsIDB4ZmIsIDB4ZTEsIDB4NjksCi0weDQwLCAweDE4LCAweGUwLCAweDYxLCAweDYxLCAweDZkLCAweDg4LCAweDQyLCAweDI0LCAweGQzLCAweDQwLCAweDFhLAotMHhlMCwgMHg2MSwgMHgyMSwgMHhlMCwgMHg4MSwgMHg0MiwgMHgxZiwgMHhkMSwgMHgyMCwgMHg2OSwgMHgwMiwgMHgyOCwKLTB4MWMsIDB4ZDIsIDB4MDEsIDB4MjAsIDB4NjAsIDB4NjEsIDB4MTgsIDB4NDgsIDB4NDEsIDB4NjksIDB4ZTIsIDB4NmMsCi0weDBhLCAweDQzLCAweDQyLCAweDYxLCAweDgxLCAweDY5LCAweGUzLCAweDZjLCAweDk5LCAweDQzLCAweDgxLCAweDYxLAotMHgwMSwgMHgyMSwgMHgwOSwgMHgwNSwgMHhjYSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MSwKLTB4OGIsIDB4MDIsIDB4MjAsIDB4NmQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsCi0weGUxLCAweDY5LCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweGNjLCAweGZhLAotMHgyOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZiwgMHhmOSwgMHgwYywgMHg5OCwgMHgwNSwgMHg5OSwgMHg0MCwgMHgxOCwKLTB4MDAsIDB4MDEsIDB4MTAsIDB4MzAsIDB4NjgsIDB4NjEsIDB4MTMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgxMiwgMHgwMiwgMHgwNCwgMHgwMCwgMHg1MiwgMHgwMiwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MmQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4ZjAsCi0weDAzLCAweGY5LCAweDA3LCAweDFjLCAweDgxLCAweDY5LCAweDQ0LCAweDZhLCAweGEwLCAweDZmLCAweDAwLCAweGYwLAotMHg0NSwgMHhmZSwgMHgwMCwgMHgyMCwgMHhlMSwgMHgxZCwgMHgxOSwgMHgzMSwgMHg0OCwgMHg3MSwgMHg3OSwgMHg2OCwKLTB4YzksIDB4MGUsIDB4MDksIDB4ZDMsIDB4ZjgsIDB4NmEsIDB4MDAsIDB4MDEsIDB4MjQsIDB4NDksIDB4NDAsIDB4MTgsCi0weDI0LCAweDRiLCAweGMwLCAweDE4LCAweDAxLCAweDY4LCAweDAxLCAweDM5LCAweDAxLCAweDYwLCAweDM2LCAweGUwLAotMHhlMSwgMHg2ZCwgMHgwOSwgMHg2OCwgMHgyMiwgMHg2ZSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHgyMCwgMHg0ZSwKLTB4ZjUsIDB4MWQsIDB4NzksIDB4MzUsIDB4MDEsIDB4MjMsIDB4ZTksIDB4NmIsIDB4MTksIDB4NDMsIDB4ZTksIDB4NjMsCi0weGI5LCAweDZhLCAweGUyLCAweDZkLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGI5LCAweDZhLCAweDIyLCAweDZlLAotMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHg2MSwgMHg2OSwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMSwgMHhhOSwgMHg2YiwKLTB4MDEsIDB4MzEsIDB4YTksIDB4NjMsIDB4MDgsIDB4MjksIDB4MDcsIDB4ZDMsIDB4YTgsIDB4NjMsIDB4MDEsIDB4MjAsCi0weDAwLCAweGYwLCAweDg2LCAweGY4LCAweGU4LCAweDZiLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweGU4LCAweDYzLAotMHg3OCwgMHg2OCwgMHg4MSwgMHgwZSwgMHgwZiwgMHhkMiwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhmMSwgMHgxOCwKLTB4YzksIDB4NjgsIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDAsIDB4MDAsIDB4MDgsIDB4MDQsIDB4ZDIsIDB4MjAsIDB4MWMsCi0weDM5LCAweDFjLCAweDAwLCAweGYwLCAweDQzLCAweGY4LCAweDAyLCAweGUwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHgwNSwgMHhmYSwgMHgzOCwgMHgxYywgMHhmYiwgMHhmNywgMHgwNiwgMHhmYywgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGIsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weGEwLCAweDFjLCAweDAwLCAweDgwLCAweGI0LCAweDBjLCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhmOCwgMHgxZCwgMHgxOSwgMHgzMCwKLTB4MDEsIDB4NzksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NzEsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDU2LCAweGZiLCAweGY4LCAweDY4LCAweDAyLCAweDI4LCAweDBkLCAweGQwLCAweGI4LCAweDY4LAotMHg4MCwgMHgwMCwgMHhjMiwgMHgxOSwgMHg1MCwgMHg2YywgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMCwgMHhiOCwgMHg2YSwKLTB4NDEsIDB4NzgsIDB4MDksIDB4MDEsIDB4MTAsIDB4MzEsIDB4NTIsIDB4NmIsIDB4MTAsIDB4MWEsIDB4ODgsIDB4NDIsCi0weDA1LCAweGQzLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDQyLCAweGZiLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgyOCwgMHhmYSwgMHhmOCwgMHhlNywgMHg3OCwgMHg2OCwKLTB4ODAsIDB4MDAsIDB4YzAsIDB4MTksIDB4YzAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjIsIDB4ZjEsIDB4ZTcsCi0weGIwLCAweGI1LCAweDg3LCAweGIwLCAweDBmLCAweDFjLCAweDgwLCAweDZmLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHgwMCwgMHgyNCwgMHgxMywgMHg0ZCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhlOCwgMHgxOCwgMHg4MCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MTcsIDB4ZDAsIDB4NjksIDB4NDYsIDB4YTIsIDB4MDAsIDB4NTIsIDB4MTksIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGQyLCAweDE4LCAweDkyLCAweDY5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDkyLCAweGZiLAotMHgwMCwgMHgyOCwgMHgwOSwgMHhkMSwgMHgwMSwgMHgzNCwgMHhhMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgwYiwgMHgyMywKLTB4MWIsIDB4MDIsIDB4YzAsIDB4MTgsIDB4ODAsIDB4NjksIDB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDlkLCAweGY5LCAweDA3LCAweGIwLAotMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YjgsIDB4YjUsIDB4YzIsIDB4MDcsIDB4ZDIsIDB4MGYsIDB4MTYsIDB4NGMsIDB4MTYsIDB4NDksIDB4MDEsIDB4ZDAsCi0weDA4LCAweDIyLCAweDA4LCAweGUwLCAweDgyLCAweDA4LCAweDA1LCAweGQzLCAweDBjLCAweDIyLCAweGE0LCAweDE4LAotMHgwYiwgMHg2OCwgMHhkZiwgMHgxZCwgMHgxNSwgMHgzNywgMHgwMywgMHhlMCwgMHgxYywgMHgyMiwgMHgwYiwgMHg2OCwKLTB4ZGYsIDB4MWQsIDB4MDksIDB4MzcsIDB4MGYsIDB4NGIsIDB4MWQsIDB4NzgsIDB4MDAsIDB4MmQsIDB4MTMsIDB4ZDAsCi0weDViLCAweDc4LCAweDAwLCAweDJiLCAweDEwLCAweGQwLCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDFhLCAweDQzLAotMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHg1YiwgMHgwOCwgMHgxYSwgMHg0MywgMHgwMCwgMHg5MiwgMHg0YSwgMHg2OCwKLTB4MDEsIDB4MjAsIDB4MzksIDB4MWMsIDB4MjMsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZGYsIDB4ZmUsIDB4YjgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAzLCAweDIzLCAweDFiLCAweDA2LCAweDFhLCAweDQzLCAweGYxLCAweGU3LAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHhmOCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MjEsIDB4YzEsIDB4NjEsIDB4MDUsIDB4NDksIDB4OGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsCi0weDg4LCAweDYwLCAweDAyLCAweGUwLCAweGNhLCAweDY4LCAweGMwLCAweDQ2LCAweGQwLCAweDYxLCAweGM4LCAweDYwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMywgMHg0OSwgMHg4OCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4YzIsIDB4NjksIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAxLCAweDFjLCAweDAxLCAweDIzLCAweDg4LCAweDY4LCAweDU4LCAweDQwLAotMHg4OCwgMHg2MCwgMHhjYSwgMHg2OCwgMHgwMSwgMHgzYSwgMHhjYSwgMHg2MCwgMHgwYSwgMHg2OSwgMHgwMSwgMHgzYSwKLTB4ODAsIDB4MDAsIDB4MGEsIDB4NjEsIDB4NDIsIDB4MTgsIDB4ZDAsIDB4NmIsIDB4NTMsIDB4NmIsIDB4YzAsIDB4NDYsCi0weGNiLCAweDYyLCAweDBiLCAweDY4LCAweDliLCAweDAwLCAweDU5LCAweDE4LCAweDQ5LCAweDZjLCAweDUzLCAweDZjLAotMHhjOSwgMHgxOCwgMHg1MSwgMHg2NCwgMHg3MCwgMHg0NywgMHg4YSwgMHg2OCwgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwKLTB4ZDMsIDB4NmIsIDB4ODMsIDB4NDIsIDB4MTcsIDB4ZDEsIDB4ZDAsIDB4MWQsIDB4M2QsIDB4MzAsIDB4MGEsIDB4NjgsCi0weDkyLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDZjLCAweDAzLCAweDY4LCAweDlhLCAweDFhLCAweDAyLCAweDYwLAotMHgwMSwgMHgyMywgMHg4OCwgMHg2OCwgMHg1OCwgMHg0MCwgMHg4OCwgMHg2MCwgMHhjYSwgMHg2OCwgMHgwMSwgMHgzMiwKLTB4Y2EsIDB4NjAsIDB4MGEsIDB4NjksIDB4MDEsIDB4MzIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MGEsIDB4NjEsCi0weDQwLCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDcwLCAweDQ3LCAweGI4LCAweGI1LCAweDA0LCAweDFjLAotMHgxZCwgMHgxYywgMHgxNywgMHgxYywgMHgwOCwgMHgxYywgMHgzOSwgMHgxYywgMHhmZiwgMHhmNywgMHhkOSwgMHhmZiwKLTB4MDAsIDB4MjAsIDB4MjksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4N2MsIDB4ZmUsIDB4MDEsIDB4MjAsIDB4ZjksIDB4MWQsCi0weDE5LCAweDMxLCAweDQ4LCAweDcxLCAweDgwLCAweDA2LCAweDYwLCAweDYwLCAweDAwLCAweDIwLCAweGEwLCAweDYxLAotMHgwNiwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwNiwgMHg0OCwKLTB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDUsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4NjIsIDB4ZmUsCi0weGI4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDAyLAotMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwKLTB4MTAsIDB4MTgsIDB4MDgsIDB4NjAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksCi0weDAzLCAweDQ5LCAweDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwKLTB4MDYsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTAsIDB4MTgsIDB4MDgsIDB4NjAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsCi0weDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDAzLCAweDQ5LCAweDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDYsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTAsIDB4MTgsCi0weDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDAzLCAweDQ5LAotMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwgMHg3MCwgMHg0NywgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDIsIDB4NDgsIDB4NDEsIDB4NzksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NzEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDkwLCAweGI0LCAweDgyLCAweDAwLAotMHgxNywgMHg0YiwgMHg5YSwgMHg1OCwgMHg4YiwgMHgwNywgMHgwMiwgMHhkMCwgMHg4OSwgMHgwOCwgMHgwYiwgMHgxZCwKLTB4MDEsIDB4ZTAsIDB4ODksIDB4MDgsIDB4Y2IsIDB4MWMsIDB4MTEsIDB4NjksIDB4ZDcsIDB4NjgsIDB4MTIsIDB4NGMsCi0weDgwLCAweDAwLCAweDIwLCAweDU4LCAweDQwLCAweDY4LCAweGI5LCAweDQyLCAweDAzLCAweGQxLCAweDgxLCAweDQyLAotMHgxOSwgMHhkOSwgMHgxMSwgMHg2OCwgMHgxNywgMHhlMCwgMHgwMCwgMHgyNCwgMHhiOSwgMHg0MiwgMHgwOSwgMHhkOSwKLTB4ODEsIDB4NDIsIDB4MTIsIDB4ZDksIDB4MTEsIDB4NjgsIDB4NzgsIDB4MWEsIDB4MDAsIDB4ZDUsIDB4MDMsIDB4MzAsCi0weDgwLCAweDEwLCAweDk4LCAweDQyLCAweDBiLCAweGQ4LCAweDA3LCAweGUwLCAweDgxLCAweDQyLCAweDA1LCAweGQ4LAotMHg3OCwgMHgxYSwgMHgwMCwgMHhkNSwgMHgwMywgMHgzMCwgMHg4MCwgMHgxMCwgMHg5OCwgMHg0MiwgMHgwMiwgMHhkOCwKLTB4MjAsIDB4MWMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YzgsIDB4MWQsIDB4MDUsIDB4MzAsIDB4ZmEsIDB4ZTcsCi0weDcwLCAweDA0LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDgwLCAweDAwLCAweDBmLCAweDRhLCAweDE3LCAweDU4LAotMHg4OCwgMHgwNywgMHgwMiwgMHhkMCwgMHg4OCwgMHgwOCwgMHgwNCwgMHgzMCwgMHgwMSwgMHhlMCwgMHg4OCwgMHgwOCwKLTB4MDMsIDB4MzAsIDB4MzksIDB4NjksIDB4N2EsIDB4NjgsIDB4OTEsIDB4NDIsIDB4MDksIDB4ZDksIDB4MzksIDB4NjgsCi0weGMwLCAweDQ2LCAweDM5LCAweDYxLCAweGY5LCAweDY4LCAweDdhLCAweDY4LCAweDkxLCAweDQyLCAweDAyLCAweGQ5LAotMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHg4MSwgMHgwMCwgMHgzOCwgMHg2OSwgMHgwMCwgMHhmMCwKLTB4ZDEsIDB4ZmQsIDB4MzgsIDB4NjEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDcwLCAweDA0LCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDAzLCAweDIxLCAweDA5LCAweDA3LCAweDAxLCAweDQwLAotMHgwYywgMHgwZiwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHgyMiwgMHg5MiwgMHgwNywgMHgwMiwgMHg0MCwKLTB4YTMsIDB4MDAsIDB4MWMsIDB4NGYsIDB4ZmYsIDB4NTgsIDB4ODksIDB4MDcsIDB4ODksIDB4MGYsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDgwLCAweDA4LCAweDAwLCAweDI5LCAweDAwLCAweGQwLCAweDAxLCAweDMwLCAweDAwLCAweDJhLAotMHgwMSwgMHhkMCwgMHgwMiwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgzMCwgMHhmOSwgMHg2OCwgMHg3YSwgMHg2OCwKLTB4OTEsIDB4NDIsIDB4MDIsIDB4ZDksIDB4MzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4ODEsIDB4MDAsCi0weGY4LCAweDY4LCAweDAwLCAweGYwLCAweGE1LCAweGZkLCAweGY4LCAweDYwLCAweDBmLCAweDQ4LCAweDAwLCAweDY5LAotMHgwMCwgMHgyOCwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMCwgMHhhMCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgyMCwgMHgxYywKLTB4ZmUsIDB4ZjcsIDB4Y2EsIDB4ZmMsIDB4MGIsIDB4NDksIDB4YzgsIDB4MWQsIDB4MTksIDB4MzAsIDB4MDMsIDB4NzksCi0weDAwLCAweDIyLCAweDAwLCAweDJiLCAweDA1LCAweGQxLCAweDA5LCAweDQ5LCAweGM4LCAweDFkLCAweDE5LCAweDMwLAotMHgwMywgMHg3OSwgMHgwMCwgMHgyYiwgMHgwMywgMHhkMCwgMHgwMiwgMHg3MSwgMHgwOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4NzksIDB4ZjksIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzAsIDB4MDQsIDB4MDAsIDB4ODAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgyYiwgMHg0OSwgMHgwOSwgMHg3OSwgMHgwMCwgMHgyOSwgMHgwMywgMHhkMSwgMHg0MSwgMHg2OCwKLTB4MjksIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjAsIDB4ODEsIDB4NjgsCi0weDQ5LCAweDA4LCAweDAyLCAweGQzLCAweDA5LCAweDIxLCAweDA5LCAweDA0LCAweDAxLCAweGUwLCAweDBkLCAweDIxLAotMHgwOSwgMHgwNCwgMHgwYywgMHhjOCwgMHgwOCwgMHgzOCwgMHgxOSwgMHg0MywgMHg4NywgMHg2OCwgMHhiYiwgMHgwYSwKLTB4MDMsIDB4ZDMsIDB4NDMsIDB4NjgsIDB4NWIsIDB4MDgsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MzEsIDB4NDAsIDB4NjgsCi0weDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLCAweDA3LCAweDBmLCAweGY4LCAweDAwLCAweDFkLCAweDRjLAotMHgwMCwgMHgxOSwgMHgyMywgMHg2OCwgMHhjMCwgMHgxOCwgMHg1MCwgMHgzMCwgMHgwMCwgMHg3OSwgMHgwMSwgMHgyOCwKLTB4MTAsIDB4ZDEsIDB4NjAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDcxLCAweGY4LCAweDM4LCAweDAxLCAweDAwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LAotMHg0MSwgMHg2YiwgMHgwMSwgMHgzOSwgMHg0MSwgMHg2MywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MzgsIDB4MDEsIDB4MDAsIDB4MTksIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4MDMsIDB4NmIsCi0weDVkLCAweDFjLCAweDA1LCAweDYzLCAweGJkLCAweDAyLCAweDJkLCAweDE5LCAweGRiLCAweDAwLCAweGViLCAweDE4LAotMHg4MCwgMHgzMywgMHgxOSwgMHg2MywgMHhkYSwgMHg2MiwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywKLTB4MDEsIDB4MjEsIDB4YjksIDB4NDAsIDB4MjIsIDB4NjgsIDB4MTEsIDB4NDMsIDB4MjEsIDB4NjAsIDB4MDEsIDB4NmIsCi0weDgwLCAweDI5LCAweGUyLCAweGQzLCAweDAwLCAweDIxLCAweDAxLCAweDYzLCAweGRmLCAweGU3LCAweDAwLCAweDAwLAotMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4MWYsIDB4NGUsIDB4NzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MzYsIDB4ZDEsIDB4MDAsIDB4MjQsCi0weGIxLCAweDY4LCAweDQ4LCAweDFjLCAweGM5LCAweDAwLCAweDg5LCAweDE5LCAweGIwLCAweDYwLCAweDMyLCAweDY4LAotMHg4OSwgMHgxOCwgMHg2MCwgMHgzMSwgMHgwZCwgMHg3YiwgMHgwOCwgMHgyOCwgMHgwMCwgMHhkMywgMHhiNCwgMHg2MCwKLTB4MjgsIDB4MDEsIDB4ODAsIDB4MTksIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODcsIDB4NmIsCi0weDAwLCAweDJmLCAweDIxLCAweGQwLCAweGMxLCAweDZhLCAweDRiLCAweDFjLCAweGFhLCAweDAyLCAweDkyLCAweDE5LAotMHhjOSwgMHgwMCwgMHg1MSwgMHgxOCwgMHg4MCwgMHgzMSwgMHhjMywgMHg2MiwgMHhjYSwgMHg2YSwgMHgwOSwgMHg2YiwKLTB4MDEsIDB4M2YsIDB4ODcsIDB4NjMsIDB4ODAsIDB4MmIsIDB4MDAsIDB4ZDMsIDB4YzQsIDB4NjIsIDB4MDAsIDB4MmYsCi0weDA2LCAweGQxLCAweDAxLCAweDI3LCAweGFmLCAweDQwLCAweDNiLCAweDFjLCAweGRiLCAweDQzLCAweDM3LCAweDY4LAotMHgzYiwgMHg0MCwgMHgzMywgMHg2MCwgMHg0MywgMHg2YiwgMHgwMSwgMHgzYiwgMHg0MywgMHg2MywgMHgxMCwgMHgxYywKLTB4MzcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDksIDB4ZjgsIDB4NzgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4YzksIDB4ZDAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHhjZCwgMHgwZiwgMHhlZCwgMHgwNywgMHgwMSwgMHgyNCwgMHgwMCwgMHgyNywgMHgyZSwgMHg0YiwKLTB4MmUsIDB4NGEsIDB4MDAsIDB4MmQsIDB4MWQsIDB4ZDAsIDB4ZDgsIDB4NmEsIDB4MDEsIDB4MzAsIDB4ZDgsIDB4NjIsCi0weDEwLCAweDFjLCAweDUyLCAweDY5LCAweDAwLCAweDJhLCAweDEyLCAweGQwLCAweDAyLCAweDY5LCAweDUzLCAweDFjLAotMHg5MiwgMHgwMCwgMHgxMiwgMHgxOCwgMHgwMywgMHg2MSwgMHg5MSwgMHg2MSwgMHg0MSwgMHg2OSwgMHgwMSwgMHgzMSwKLTB4NDEsIDB4NjEsIDB4MDIsIDB4NjksIDB4MGYsIDB4MmEsIDB4MDAsIDB4ZDMsIDB4MDcsIDB4NjEsIDB4MGYsIDB4MjksCi0weDAwLCAweGQzLCAweDQ0LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA4LCAweDFjLAotMHhmZiwgMHhmNywgMHhlZSwgMHhmZSwgMHhmOCwgMHhlNywgMHgxNSwgMHg2OSwgMHg2ZSwgMHgxYywgMHhhZCwgMHgwMCwKLTB4YWQsIDB4MTgsIDB4MTYsIDB4NjEsIDB4YTksIDB4NjEsIDB4NTUsIDB4NjksIDB4MDEsIDB4MzUsIDB4NTUsIDB4NjEsCi0weDE2LCAweDY5LCAweDBmLCAweDJlLCAweDAwLCAweGQzLCAweDE3LCAweDYxLCAweDBmLCAweDJkLCAweDAwLCAweGQzLAotMHg1NCwgMHg2MCwgMHg4YywgMHgwMiwgMHhhNCwgMHgwYSwgMHgxNiwgMHg0ZiwgMHgzYSwgMHg2ZiwgMHhmZCwgMHg2OCwKLTB4ZjksIDB4MWQsIDB4NzksIDB4MzEsIDB4MDEsIDB4MmQsIDB4MGMsIDB4ZDEsIDB4ZGIsIDB4NmQsIDB4NWIsIDB4MDgsCi0weDA5LCAweGQzLCAweDBiLCAweDg5LCAweDAwLCAweDJiLCAweDA2LCAweGQxLCAweGZkLCAweDZmLCAweDAzLCAweDNiLAotMHgyZSwgMHg2OCwgMHgzMywgMHg0MCwgMHgyYiwgMHg2MCwgMHgxNCwgMHgyMywgMHgwYiwgMHg4MSwgMHgxMCwgMHg2MCwKLTB4ODAsIDB4MDcsIDB4ODAsIDB4MGEsIDB4MjAsIDB4NDMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MzgsCi0weDUwLCAweDYwLCAweDA5LCAweDZhLCAweDA4LCAweDMyLCAweDkxLCAweDQyLCAweDAwLCAweGQ4LCAweDA3LCAweDRhLAotMHgwMCwgMHgwZCwgMHgwMiwgMHhkMywgMHg1MSwgMHgyMCwgMHg4MCwgMHgwMywgMHg4MiwgMHg2MSwgMHgzYSwgMHg2NywKLTB4YmUsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLAotMHhiMCwgMHhiNSwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkMSwgMHgwMSwgMHgyMCwgMHhjMCwgMHgwNSwgMHgxNiwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MTUsIDB4NGMsIDB4MDAsIDB4MjUsIDB4NjcsIDB4NjksIDB4MDAsIDB4MmYsCi0weDE2LCAweGQwLCAweGUwLCAweDY4LCAweDQxLCAweDFjLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweGUxLCAweDYwLAotMHg4MCwgMHg2OSwgMHgwMSwgMHgzZiwgMHhmZiwgMHhmNywgMHg5NCwgMHhmZSwgMHhlMCwgMHg2OCwgMHgwZiwgMHgyOCwKLTB4MDAsIDB4ZDMsIDB4ZTUsIDB4NjAsIDB4ZTAsIDB4NjgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4ODAsIDB4NjksCi0weDAwLCAweDA4LCAweDAxLCAweGQzLCAweDAwLCAweDJmLCAweGVhLCAweGQxLCAweDY3LCAweDYxLCAweDAzLCAweGUwLAotMHgwOCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHg2NSwgMHg2MCwgMHgyMCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZmYsIDB4ZjcsIDB4MjYsIDB4ZmYsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHhiMCwgMHhiNCwgMHgxMCwgMHgyMywKLTB4ODIsIDB4NjgsIDB4MTMsIDB4NDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MmIsIDB4MTUsIDB4ZDAsIDB4MGMsIDB4NGIsCi0weDFhLCAweDQwLCAweDEyLCAweDAxLCAweDgxLCAweDI0LCAweDE0LCAweDQzLCAweDAyLCAweDY4LCAweDE1LCAweDY4LAotMHgxMywgMHgxZCwgMHg4MCwgMHhjYiwgMHgxYiwgMHg2OCwgMHgwNCwgMHgzYSwgMHgwMiwgMHg2MCwgMHgyMCwgMHhjMiwKLTB4ODAsIDB4YzIsIDB4MDgsIDB4YzIsIDB4MTQsIDB4NjAsIDB4NDIsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDA0LCAweDMyLCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweDA4LCAweDFjLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwMCwgMHhmMCwgMHhmZiwgMHgwZiwgMHhmMCwgMHhiNCwgMHg4MiwgMHg2OCwgMHg1MywgMHgwOSwgMHgzNCwgMHhkMywKLTB4MWIsIDB4NGIsIDB4MWEsIDB4NDAsIDB4MTIsIDB4MDEsIDB4ODEsIDB4MjYsIDB4MTYsIDB4NDMsIDB4MDMsIDB4NjgsCi0weDFkLCAweDY4LCAweDFmLCAweDFkLCAweDEwLCAweGNmLCAweDNmLCAweDY4LCAweDA0LCAweDNiLCAweDAzLCAweDYwLAotMHgyMCwgMHhjMywgMHgxMCwgMHhjMywgMHg4MCwgMHhjMywgMHgxZSwgMHg2MCwgMHg0MywgMHg2OCwgMHgxZiwgMHgxZCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4M2IsIDB4NDMsIDB4NDMsIDB4NjAsIDB4Y2IsIDB4NmIsIDB4MTgsIDB4MWYsCi0weGM4LCAweDYzLCAweDgwLCAweGNiLCAweDgwLCAweGMwLCAweDFjLCAweDY4LCAweDFmLCAweDFkLCAweDAzLCAweDFkLAotMHgwNCwgMHg2MCwgMHgzOCwgMHgxYywgMHgzZiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxZiwgMHg2MCwgMHgxZiwgMHgxZCwKLTB4NDMsIDB4NjgsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4ODEsIDB4MjMsIDB4MjMsIDB4NDMsIDB4M2IsIDB4NjAsCi0weDQwLCAweDY4LCAweDAwLCAweDBjLCAweDAwLCAweDA0LCAweDEwLCAweDQzLCAweDc4LCAweDYwLCAweDA4LCAweDZlLAotMHgwNCwgMHgzMCwgMHgwOCwgMHg2NiwgMHg0OCwgMHg2ZSwgMHgwNCwgMHgzMCwgMHg0OCwgMHg2NiwgMHgwMCwgMHgyMCwKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MGYsIDB4ODAsIDB4YjQsIDB4ODEsIDB4NmEsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGNhLCAweDFkLCAweDA1LCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LAotMHhjZiwgMHgxZCwgMHgwMSwgMHgzNywgMHgzYiwgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhjYiwgMHg2MCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGYsIDB4MWQsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDhiLCAweDYwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDBiLCAweDQzLCAweDFiLCAweDY4LCAweDBjLCAweGMxLAotMHgwMiwgMHg2MiwgMHgwMSwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MiwgMHgwNCwgMHgyMywgMHg4MSwgMHg2OSwKLTB4MTksIDB4NDMsIDB4ODEsIDB4NjEsIDB4MDIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4OTEsIDB4NjEsIDB4ODEsIDB4NmEsCi0weDA0LCAweDMxLCAweDgxLCAweDYyLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDkxLCAweDYyLCAweGMxLCAweDFkLAotMHgzOSwgMHgzMSwgMHg0YSwgMHg4YiwgMHgwNCwgMHgzYSwgMHg0YSwgMHg4MywgMHg0OSwgMHg4YiwgMHgwMiwgMHg2YiwKLTB4NDAsIDB4MzIsIDB4NTEsIDB4ODMsIDB4YzEsIDB4ODksIDB4MDQsIDB4MzksIDB4YzEsIDB4ODEsIDB4YzEsIDB4NjgsCi0weDAwLCAweDZiLCAweGMwLCAweDQ2LCAweGMxLCAweDYwLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwMCwgMHg0NywgMHgwOCwgMHg0NywgMHgxMCwgMHg0NywgMHgxOCwgMHg0NywgMHgyMCwgMHg0NywgMHgyOCwgMHg0NywKLTB4MzAsIDB4NDcsIDB4MzgsIDB4NDcsIDB4MzAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4MGMsIDB4YzAsIDB4OWQsIDB4ZTUsCi0weDBjLCAweDQ4LCAweGEwLCAweGUxLCAweDI0LCAweDQ4LCAweGIwLCAweGUxLCAweDFlLCAweDAwLCAweDAwLCAweDBhLAotMHgwMSwgMHhjMCwgMHg0YywgMHhlMiwgMHgxOCwgMHg0MCwgMHhhMCwgMHhlMywgMHg2NCwgMHg1MSwgMHg5ZiwgMHhlNSwKLTB4OTQsIDB4NTAsIDB4MjAsIDB4ZTAsIDB4MDAsIDB4NTAsIDB4OTAsIDB4ZTUsIDB4MTQsIDB4NDAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDMwLCAweDg1LCAweGU1LCAweDA0LCAweGMwLCAweDg1LCAweGU1LCAweDA4LCAweDEwLCAweDg1LCAweGU1LAotMHgwYywgMHgyMCwgMHg4NSwgMHhlNSwgMHgxMCwgMHgxMCwgMHg5MCwgMHhlNSwKLTB4MTAsIDB4NTAsIDB4ODUsIDB4ZTIsIDB4MDEsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MGMsIDB4NTAsIDB4OTAsIDB4NTUsCi0weDA0LCAweDAwLCAweDU1LCAweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDBhLCAweDA0LCAweDEwLCAweDkwLCAweGU1LAotMHgwMCwgMHg1MCwgMHg4MCwgMHhlNSwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4MzAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MzAsIDB4OTMsIDB4ZTUsCi0weDA4LCAweDIwLCAweDkwLCAweGU1LCAweDAxLCAweDMxLCAweDgzLCAweGUzLCAweDAyLCAweDM2LCAweDgzLCAweGUzLAotMHgwMywgMHgwMCwgMHg1NSwgMHhlMSwgMHgxNCwgMHgzMCwgMHg4MCwgMHhlNSwgMHhmMiwgMHhmZiwgMHhmZiwgMHgxYSwKLTB4MDEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDEsIDB4MDYsIDB4MWMsIDB4ZTMsCi0weGYxLCAweGZmLCAweGZmLCAweDBhLCAweGVjLCAweDEwLCAweDlmLCAweGU1LCAweDAyLCAweGM2LCAweGNjLCAweGUzLAotMHg1NCwgMHgyMCwgMHg5MSwgMHhlNSwgMHhlNCwgMHgzMCwgMHg5ZiwgMHhlNSwgMHg1MCwgMHgxMCwgMHg5MSwgMHhlNSwKLTB4ZDksIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZjAsIDB4NDcsIDB4MmQsIDB4ZTksIDB4MjAsIDB4YzAsIDB4OWQsIDB4ZTUsCi0weDBjLCAweDY4LCAweGEwLCAweGUxLCAweDI2LCAweDY4LCAweGIwLCAweGUxLCAweDI1LCAweDAwLCAweDAwLCAweDBhLAotMHgxOCwgMHg0MCwgMHhhMCwgMHhlMywgMHhiOCwgMHg1MCwgMHg5ZiwgMHhlNSwgMHg5NCwgMHgwMCwgMHgwMCwgMHhlMCwKLTB4MDUsIDB4MDAsIDB4ODAsIDB4ZTAsIDB4MDgsIDB4NDAsIDB4OTAsIDB4ZTUsIDB4MDQsIDB4ODAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDcwLCAweGEwLCAweGUzLCAweDFmLCAweGMwLCAweGEwLCAweGUzLCAweDAyLCAweGM0LCAweDhjLCAweGUzLAotMHgwMCwgMHg1MCwgMHg5MCwgMHhlNSwgMHgxMCwgMHg5MCwgMHg5MCwgMHhlNSwgMHgxNCwgMHhhMCwgMHg5MCwgMHhlNSwKLTB4MDAsIDB4MzAsIDB4ODUsIDB4ZTUsIDB4MDQsIDB4YzAsIDB4ODUsIDB4ZTUsIDB4MDgsIDB4MTAsIDB4ODUsIDB4ZTUsCi0weDBjLCAweDIwLCAweDg1LCAweGU1LCAweDEwLCAweDUwLCAweDg1LCAweGUyLCAweDA5LCAweDAwLCAweDU1LCAweGUxLAotMHgwYywgMHg1MCwgMHg5MCwgMHg1NSwgMHgwYSwgMHgwMCwgMHg1NSwgMHhlMSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDMsIDB4NzAsIDB4MTcsIDB4ZTIsIDB4MjAsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MjAsIDB4MzAsIDB4ODMsIDB4ZTIsCi0weDBhLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDYwLCAweDk2LCAweGUyLCAweDAxLCAweDcwLCAweDg3LCAweGUyLAotMHgwOSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyMCwgMHg2MCwgMHg0NiwgMHhlMiwgMHgyMCwgMHgwMCwgMHg1NiwgMHhlMywKLTB4ZWMsIDB4ZmYsIDB4ZmYsIDB4Y2EsIDB4MDAsIDB4NzAsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4YzAsIDB4NDYsIDB4ZTIsCi0weDAyLCAweGM0LCAweDhjLCAweGUzLCAweDAwLCAweDYwLCAweGEwLCAweGUzLCAweGU3LCAweGZmLCAweGZmLCAweGVhLAotMHgwMCwgMHg1MCwgMHg4OCwgMHhlNSwgMHhmMiwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4NTAsIDB4ODAsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4ZjAsIDB4NDcsIDB4YmQsIDB4ZTgsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweGEwLCAweDk0LCAweGU1LCAweDBhLCAweDAwLCAweDU1LCAweGUxLAotMHgxNCwgMHhhMCwgMHg4MCwgMHhlNSwgMHhlNSwgMHhmZiwgMHhmZiwgMHgxYSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4ZjUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDAwLCAweDgwLCAweDIwLCAweDQwLCAweDY4LCAweDgyLCAweDlmLCAweGU1LCAweDBiLCAweDkyLCAweGEwLCAweGUzLAotMHg2NCwgMHhhMiwgMHg5ZiwgMHhlNSwgMHg1OCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgwZSwgMHhmMCwgMHhhMCwgMHhlMSwKLTB4NTQsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4M2YsIDB4NDAsIDB4MmQsIDB4ZTksCi0weDAwLCAweDAwLCAweDRmLCAweGUxLCAweDFmLCAweDAwLCAweDAwLCAweGUyLCAweDEyLCAweDAwLCAweDUwLCAweGUzLAotMHg1NCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MDQsIDB4NTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsCi0weDA5LCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDUzLCAweDAwLCAweDAwLCAweDFiLAotMHg4MCwgMHgwMCwgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgyMCwgMHgwMCwgMHgxNCwgMHhlMywKLTB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDcsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAxLCAweDA2LCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLCAweDA4LCAweDAwLCAweDE0LCAweGUzLAotMHg0NSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwNSwgMHgxNCwgMHhlMywgMHg0YSwgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MDIsIDB4MDgsIDB4MTQsIDB4ZTMsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZTUsIDB4MGUsIDB4MTQsIDB4ZTMsCi0weDA3LCAweDAwLCAweDAwLCAweDBhLCAweDA0LCAweDIwLCAweDk4LCAweGU1LCAweDBjLCAweDEwLCAweDk4LCAweGU1LAotMHgwNCwgMHgzMCwgMHg1MiwgMHhlMiwgMHgzYywgMHgzMCwgMHhhMCwgMHhiMywgMHgwNCwgMHgzMCwgMHg4OCwgMHhlNSwKLTB4MDIsIDB4MDAsIDB4OTEsIDB4ZTcsIDB4MGYsIDB4ZTAsIDB4YTAsIDB4ZTEsCi0weDEwLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDUwLCAweDU1LCAweGUyLCAweDAzLCAweDAwLCAweDAwLCAweDBhLAotMHgwMCwgMHg0MCwgMHg5OSwgMHhlNSwgMHgwYywgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwKLTB4MWIsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDgsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDBiLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDBjLCAweDE0LCAweGUzLCAweDk4LCAweDAxLCAweDlmLCAweDE1LAotMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMiwgMHgwNCwgMHgxNCwgMHhlMywKLTB4OGMsIDB4MDEsIDB4OWYsIDB4MTUsIDB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsCi0weDAxLCAweDA5LCAweDE0LCAweGUzLCAweDgwLCAweDAxLCAweDlmLCAweDE1LCAweDBmLCAweGUwLCAweGEwLCAweDExLAotMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwNCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwKLTB4MTYsIDB4MDAsIDB4MDAsIDB4MGEsIDB4NTQsIDB4ZTAsIDB4OGYsIDB4ZTIsIDB4MDQsIDB4MDAsIDB4MTQsIDB4ZTMsCi0weDQwLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAyLCAweDBhLCAweDE0LCAweGUzLAotMHg0NCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMiwgMHgwOSwgMHgxNCwgMHhlMywKLTB4NDgsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MDIsIDB4MTQsIDB4ZTMsCi0weDRjLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDA0LCAweDE0LCAweGUzLAotMHg1MCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwYSwgMHgxNCwgMHhlMywKLTB4MjEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDEwLCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLCAweDFjLCAweDAwLCAweDAwLCAweDFiLAotMHgwMCwgMHg0MCwgMHg5OSwgMHhlNSwgMHgwNCwgMHg1MCwgMHhhMCwgMHhlMywgMHgwMCwgMHg0MCwgMHg5NCwgMHhlMiwKLTB4MWIsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4M2YsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MDQsIDB4ZjAsIDB4NWUsIDB4ZTIsCi0weGMwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDYxLCAweGUxLCAweGZhLCAweGZmLCAweGZmLCAweGVhLAotMHgxOCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgxYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4NTQsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTQsIDB4MDAsIDB4OWEsIDB4ZTUsCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDIwLCAweDEwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweGEwLCAweGUzLAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyNCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MjgsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MmMsIDB4MTAsIDB4OWEsIDB4ZTUsCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLAotMHgzNCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MzgsIDB4ZTAsIDB4OWEsIDB4ZTUsIDB4M2MsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTgsIDB4MDAsIDB4OWEsIDB4ZTUsCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDM4LCAweGUwLCAweDlhLCAweGU1LCAweDNjLCAweDEwLCAweDlhLCAweGU1LAotMHgxNCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg2NCwgMHgyMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MzAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MzAsIDB4NTMsIDB4ZTAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YmEsCi0weDAwLCAweDMwLCAweDgyLCAweGU1LCAweDBjLCAweDAwLCAweDkyLCAweGU1LCAweDA4LCAweDMwLCAweDkyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg5MSwgMHhlMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMywgMHgxMCwgMHg4MCwgMHhlNywKLTB4MDQsIDB4MzAsIDB4NTMsIDB4ZTIsIDB4M2MsIDB4MzAsIDB4YTAsIDB4YjMsIDB4MDgsIDB4MzAsIDB4ODIsIDB4ZTUsCi0weDAxLCAweDAwLCAweGEwLCAweGUzLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDNjLCAweDEwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MTAsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDA4LCAweDEwLCAweDkwLCAweGU1LCAweDA0LCAweDEwLCAweDUxLCAweGUyLCAweDNjLCAweDEwLCAweGEwLCAweGIzLAotMHgwOCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4Y2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NzEsIDB4MmIsIDB4ZmYsIDB4ZmYsIDB4ZDEsIDB4M2QsIDB4ZmYsIDB4ZmYsCi0weGM5LCAweDJiLCAweGZmLCAweGZmLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweGM5LCAweDFjLCAweDg5LCAweDA4LAotMHg4OSwgMHgwMCwgMHgwMSwgMHgyMywgMHg4NSwgMHg0YSwgMHg1YiwgMHgwNywgMHgxOCwgMHg0MywgMHgxMywgMHg2OCwKLTB4NWIsIDB4MTgsIDB4MTMsIDB4NjAsIDB4MDAsIDB4MWYsIDB4ODEsIDB4YTMsIDB4NWIsIDB4MWEsIDB4MTgsIDB4NDcsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4OTgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4OTgsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsCi0weDk0LCAweDMwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAzLCAweDAwLCAweDUwLCAweGUxLAotMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwgMHgwNCwgMHgxMCwgMHg4MSwgMHhlMiwgMHgwNCwgMHgyMCwgMHg1MiwgMHhlMiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDIwLCAweDgwLCAweGU1LCAweDc0LCAweDAwLCAweDlmLCAweGU1LCAweDc0LCAweDEwLCAweDlmLCAweGU1LAotMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwgMHg2MCwgMHgzMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwKLTB4MDMsIDB4MDAsIDB4NTAsIDB4ZTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsCi0weDA0LCAweDIwLCAweDUyLCAweGUyLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGY4LCAweGZmLCAweGZmLCAweGVhLAotMHg1MCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwgMHg0YywgMHgwMCwgMHg5ZiwgMHhlNSwKLTB4NGMsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4MmMsIDB4MzAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAzLCAweDAwLCAweDUwLCAweGUxLCAweDAzLCAweDAwLCAweDAwLCAweDFhLAotMHgwNCwgMHgxMCwgMHg4MSwgMHhlMiwgMHgwNCwgMHgyMCwgMHg1MiwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MjgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDdjLCAweDM0LCAweDAwLCAweDgwLCAweDgwLCAweDMwLCAweDAwLCAweDgwLAotMHhhZCwgMHhkZSwgMHhhZCwgMHhkZSwgMHhjMCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzNywgMHgwMCwgMHg4MCwKLTB4ODAsIDB4MzQsIDB4MDAsIDB4ODAsIDB4YzQsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4M2YsIDB4MDAsIDB4ODAsCi0weDQwLCAweDM4LCAweDAwLCAweDgwLCAweGM4LCAweDA0LCAweDAwLCAweDgwLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLAotMHg3MSwgMHhlYSwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHgzOSwgMHhmZSwgMHhmZiwgMHhlYSwKLTB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZmUsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDFiLCAweGZmLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDZiLCAweGVhLCAweGZmLCAweGVhLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsCi0weDAwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDBiLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHgwYiwgMHhmZiwgMHhmZiwgMHgwMywgMHhmZiwgMHgwNiwgMHg1NCwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4MDQsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGExLCAweDA1LCAweGZmLCAweGZmLCAweDA0LCAweGZmLCAweDA3LCAweDU0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLAotMHhiNSwgMHgwNCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHgwNSwgMHhmZiwgMHhmZiwKLTB4MDUsIDB4ZmYsIDB4MDUsIDB4NTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDA1LCAweGZmLCAweGZmLCAweDAxLCAweGZmLCAweDA0LCAweDAwLAotMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxOCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NjEsIDB4MGUsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4ZmYsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGExLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweDAyLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHgwMSwgMHg0NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MGQsIDB4ZmYsIDB4ZmYsIDB4MDYsIDB4MDAsIDB4ZmYsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNkLCAweDUwLCAweGZmLCAweGZmLCAweDgxLCAweDUwLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg0OCwgMHgwNSwgMHgwMCwgMHg4MCwgMHgxMSwgMHg3NSwgMHgyMSwgMHg0MCwgMHgxYiwgMHg3NSwgMHgyMSwgMHg0MCwKLTB4MzEsIDB4NzUsIDB4MjEsIDB4NDAsIDB4NDksIDB4NzUsIDB4MjEsIDB4NDAsCi0weDU1LCAweDc1LCAweDIxLCAweDQwLCAweDYzLCAweDc1LCAweDIxLCAweDQwLCAweDdkLCAweDc1LCAweDIxLCAweDQwLAotMHhhOSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg2ZCwgMHg3NiwgMHgyMSwgMHg0MCwgMHhjNSwgMHg3NiwgMHgyMSwgMHg0MCwKLTB4ZDMsIDB4NzYsIDB4MjEsIDB4NDAsIDB4ZGQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4ZTcsIDB4NzYsIDB4MjEsIDB4NDAsCi0weDk5LCAweDc3LCAweDIxLCAweDQwLCAweGE3LCAweDc3LCAweDIxLCAweDQwLCAweGI1LCAweDc3LCAweDIxLCAweDQwLAotMHg2MSwgMHg3OCwgMHgyMSwgMHg0MCwgMHg1ZiwgMHg3YywgMHgyMSwgMHg0MCwgMHhlOSwgMHg3YywgMHgyMSwgMHg0MCwKLTB4ODksIDB4N2QsIDB4MjEsIDB4NDAsIDB4YmQsIDB4N2UsIDB4MjEsIDB4NDAsIDB4YzksIDB4N2UsIDB4MjEsIDB4NDAsCi0weDI5LCAweDdmLCAweDIxLCAweDQwLCAweDhkLCAweDdmLCAweDIxLCAweDQwLCAweGI5LCAweDdmLCAweDIxLCAweDQwLAotMHhkZCwgMHg3ZiwgMHgyMSwgMHg0MCwgMHgxZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHg0NSwgMHg4MCwgMHgyMSwgMHg0MCwKLTB4OGQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4OWQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4YzUsIDB4ODAsIDB4MjEsIDB4NDAsCi0weGQ1LCAweDgwLCAweDIxLCAweDQwLCAweDFkLCAweDgxLCAweDIxLCAweDQwLCAweDViLCAweDgxLCAweDIxLCAweDQwLAotMHhiMSwgMHg4MSwgMHgyMSwgMHg0MCwgMHgxMSwgMHg4MiwgMHgyMSwgMHg0MCwgMHgxYiwgMHg4MiwgMHgyMSwgMHg0MCwKLTB4MWYsIDB4ODIsIDB4MjEsIDB4NDAsIDB4OGQsIDB4ODIsIDB4MjEsIDB4NDAsIDB4ZDksIDB4ODIsIDB4MjEsIDB4NDAsCi0weDMxLCAweDgzLCAweDIxLCAweDQwLCAweDZkLCAweDgzLCAweDIxLCAweDQwLCAweGQxLCAweDgzLCAweDIxLCAweDQwLAotMHgwOSwgMHg4NCwgMHgyMSwgMHg0MCwgMHgxOSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg1MSwgMHg4NCwgMHgyMSwgMHg0MCwKLTB4NjEsIDB4ODQsIDB4MjEsIDB4NDAsIDB4NzUsIDB4ODQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4ODQsIDB4MjEsIDB4NDAsCi0weGE3LCAweDg0LCAweDIxLCAweDQwLCAweGIxLCAweDg0LCAweDIxLCAweDQwLCAweDE1LCAweDg1LCAweDIxLCAweDQwLAotMHg0NSwgMHg4NSwgMHgyMSwgMHg0MCwgMHg1MSwgMHg4NSwgMHgyMSwgMHg0MCwgMHhjNSwgMHg4NSwgMHgyMSwgMHg0MCwKLTB4Y2YsIDB4ODUsIDB4MjEsIDB4NDAsIDB4ZDksIDB4ODUsIDB4MjEsIDB4NDAsIDB4ZTMsIDB4ODUsIDB4MjEsIDB4NDAsCi0weGVkLCAweDg1LCAweDIxLCAweDQwLCAweGY3LCAweDg1LCAweDIxLCAweDQwLCAweDAxLCAweDg2LCAweDIxLCAweDQwLAotMHgwYiwgMHg4NiwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4NiwgMHgyMSwgMHg0MCwgMHgwMSwgMHg4OSwgMHgyMSwgMHg0MCwKLTB4MWYsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MjksIDB4ODYsIDB4MjEsIDB4NDAsIDB4MzMsIDB4ODYsIDB4MjEsIDB4NDAsCi0weDNkLCAweDg2LCAweDIxLCAweDQwLCAweDY1LCAweDg2LCAweDIxLCAweDQwLCAweDZmLCAweDg2LCAweDIxLCAweDQwLAotMHhkMSwgMHg4NiwgMHgyMSwgMHg0MCwgMHhkYiwgMHg4NiwgMHgyMSwgMHg0MCwgMHhlNSwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4ZWYsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZjksIDB4ODYsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDAzLCAweDg3LCAweDIxLCAweDQwLCAweDY5LCAweDg3LCAweDIxLCAweDQwLCAweGI1LCAweDg3LCAweDIxLCAweDQwLAotMHhmOSwgMHg4NywgMHgyMSwgMHg0MCwgMHgwOSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4NTUsIDB4ODgsIDB4MjEsIDB4NDAsIDB4NTksIDB4ODgsIDB4MjEsIDB4NDAsIDB4NWQsIDB4ODgsIDB4MjEsIDB4NDAsCi0weGI1LCAweDg4LCAweDIxLCAweDQwLCAweGRkLCAweDg4LCAweDIxLCAweDQwLCAweGU5LCAweDg4LCAweDIxLCAweDQwLAotMHhlZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHhmMSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhmNSwgMHg4OCwgMHgyMSwgMHg0MCwKLTB4ZjksIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZmQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4MmQsIDB4ODUsIDB4MjEsIDB4NDAsCi0weDg5LCAweDg1LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHgwZCwgMHg4OSwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHhlMSwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHg2YiwgMHg3OCwgMHgyMSwgMHg0MCwgMHhmNSwgMHg3YiwgMHgyMSwgMHg0MCwgMHgzMSwgMHg3YywgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDE4LCAweDQwLCAweDU4LCAweDAxLCAweDE4LCAweDQwLAotMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MDEsIDB4MTgsIDB4NDAsCi0weDI0LCAweDgzLCAweDIwLCAweDQwLCAweDI0LCAweGEzLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg3OCwgMHgwMSwgMHgxOCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDE4LCAweDQwLAotMHg4OCwgMHgwMSwgMHgxOCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwgMHgyNCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDA4LCAweDAwLCAweDEyLCAweDAwLCAweDE4LCAweDAwLCAweDEyLCAweDAwLCAweDBjLCAweDAwLCAweDEyLCAweDAwLAotMHgxYywgMHgwMCwgMHgxMiwgMHgwMCwgMHgyNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwKLTB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGQxLCAweGE4LCAweDIxLCAweDQwLCAweDJkLCAweGFhLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg4OSwgMHg3MCwgMHgyMSwgMHg0MCwgMHhjOSwgMHhhMSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDU3LCAweDg5LCAweDIxLCAweDQwLCAweGQxLCAweGE4LCAweDIxLCAweDQwLCAweGM1LCAweDJmLCAweGZmLCAweGZmLAotMHgwNSwgMHgyMSwgMHhmZiwgMHhmZiwgMHhlZiwgMHgyMCwgMHhmZiwgMHhmZiwgMHg1OSwgMHhhNywgMHgyMSwgMHg0MCwKLTB4MzQsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NDgsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmUsIDB4MDAsIDB4ODAsCi0weDMwLCAweDMzLCAweDNhLCAweDMxLCAweDMxLCAweDNhLCAweDMxLCAweDMxLCAweDAwLCAweDMwLCAweDM3LCAweDJmLAotMHgzMiwgMHgzMywgMHgyZiwgMHgzMCwgMHgzMSwgMHgwMCwgMHgzMCwgMHgzMCwgMHgzMCwgMHgzMCwgMHgzMSwgMHgzNSwKLTB4MzYsIDB4MzksIDB4MDAsIDB4NDMsIDB4NmYsIDB4NzAsIDB4NzksIDB4NzIsIDB4NjksIDB4NjcsIDB4NjgsIDB4NzQsCi0weDIwLCAweDI4LCAweDYzLCAweDI5LCAweDIwLCAweDMyLCAweDMwLCAweDMwLCAweDMxLCAweDIwLCAweDMzLCAweDQzLAotMHg2ZiwgMHg2ZCwgMHgyMCwgMHg0MywgMHg2ZiwgMHg3MiwgMHg3MCwgMHg2ZiwgMHg3MiwgMHg2MSwgMHg3NCwgMHg2OSwKLTB4NmYsIDB4NmUsIDB4MGEsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDUzLCAweGZmLCAweGZmLAotMHgyNywgMHhmMCwgMHg3ZCwgMHhmZCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHhkYSwgMHgwZSwgMHg4MiwgMHgwMCwKLTB4MDEsIDB4NDAsIDB4NjQsIDB4MDQsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsCi0weDY5LCAweDNlLCAweGZmLCAweGZmLCAweGM5LCAweDRmLCAweGZmLCAweGZmLCAweGQ1LCAweDI0LCAweGZmLCAweGZmLAotMHhjOSwgMHgzYiwgMHhmZiwgMHhmZiwgMHgyOSwgMHgzYywgMHhmZiwgMHhmZiwgMHgxOSwgMHgxYSwgMHhmZiwgMHhmZiwKLTB4NjUsIDB4MTEsIDB4ZmYsIDB4ZmYsIDB4Y2MsIDB4NTMsIDB4ZmYsIDB4ZmYsIDB4MjEsIDB4NDAsIDB4ZmYsIDB4ZmYsCi0weDg5LCAweDcwLCAweDIxLCAweDQwLCAweDQ5LCAweDcyLCAweDIxLCAweDQwLCAweGQ5LCAweDNmLCAweGZmLCAweGZmLAotMHgyMSwgMHg5YSwgMHgyMSwgMHg0MCwgMHg4NSwgMHgyNCwgMHhmZiwgMHhmZiwgMHg2NCwgMHg1MywgMHhmZiwgMHhmZiwKLTB4OGMsIDB4NTMsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDgwLCAweDMwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhiMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwZSwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4NmUsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGVkLCAweDg5LCAweDIxLCAweDQwLCAweDhiLCAweDg5LCAweDIxLCAweDQwLCAweGE1LCAweDhjLCAweDIxLCAweDQwLAotMHgwNSwgMHg4ZCwgMHgyMSwgMHg0MCwgMHhjZCwgMHg4ZCwgMHgyMSwgMHg0MCwgMHg4YiwgMHg4YiwgMHgyMSwgMHg0MCwKLTB4YTksIDB4OGUsIDB4MjEsIDB4NDAsIDB4MTUsIDB4OGYsIDB4MjEsIDB4NDAsIDB4NjksIDB4OGIsIDB4MjEsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDU5LCAweGJkLCAweDIxLCAweDQwLCAweGMxLCAweGJkLCAweDIxLCAweDQwLCAweDJkLCAweGJlLCAweDIxLCAweDQwLAotMHgwMCwgMHgyMCwgMHgwYSwgMHg0YSwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhkMSwgMHgxOCwgMHgyZCwgMHgyMywKLTB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4ODgsIDB4NjEsIDB4ZDgsIDB4NjAsIDB4ZDgsIDB4NjMsIDB4ODAsIDB4MzIsCi0weGM4LCAweDYwLCAweDA4LCAweDYxLCAweDQ4LCAweDYxLCAweGQwLCAweDYyLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LAotMHg0OCwgMHg2MCwgMHg4OCwgMHg2MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ZmUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGMsIDB4MWMsIDB4MDUsIDB4MWMsCi0weDAwLCAweDIzLCAweDAwLCAweDkzLCAweGZmLCAweGY3LCAweGRlLCAweGZmLCAweDY4LCAweDQ5LCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhjZiwgMHgxOCwgMHg3OCwgMHg2OCwgMHgyOCwgMHg0MCwKLTB4MDAsIDB4MjIsIDB4ZjgsIDB4NjAsIDB4M2EsIDB4NjEsIDB4YmEsIDB4NjgsIDB4MjIsIDB4NDAsIDB4N2EsIDB4NjEsCi0weDBjLCAweDFjLCAweDQxLCAweDA5LCAweDAzLCAweGQyLCAweDUxLCAweDA5LCAweDAxLCAweGQyLCAweDgwLCAweDBhLAotMHgwMiwgMHhkMywgMHg2MCwgMHg0OCwgMHgwMCwgMHhmMCwgMHhjMiwgMHhmOCwgMHgwMSwgMHgyMCwgMHhmOSwgMHg2OCwKLTB4NDksIDB4MDksIDB4MDMsIDB4ZDIsIDB4NzksIDB4NjksIDB4NDksIDB4MDksIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsCi0weDAwLCAweDA2LCAweDAwLCAweDBlLCAweDAzLCAweGYwLCAweGQ0LCAweGZhLCAweGY4LCAweDY4LCAweDAwLCAweDI4LAotMHg3MCwgMHhkMCwgMHgwMCwgMHgyMywgMHgwMiwgMHg5MywgMHgwMSwgMHg5MywgMHg1NCwgMHg0YSwgMHgwMSwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZjgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4ZDUsIDB4MWQsIDB4NzksIDB4MzUsIDB4MDMsIDB4OTUsCi0weDAxLCAweDI0LCAweDAwLCAweDIxLCAweDRmLCAweDRkLCAweGZhLCAweDY4LCAweDIyLCAweDQwLCAweDM5LCAweGQwLAotMHg4YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg5MiwgMHgwMCwgMHg0ZSwgMHg0YiwgMHg5YiwgMHg1YywgMHgxZSwgMHgxYywKLTB4ODMsIDB4NDIsIDB4MDQsIDB4ZDAsIDB4NGIsIDB4NGIsIDB4ZDMsIDB4MTgsIDB4NWIsIDB4NzgsIDB4ODMsIDB4NDIsCi0weDJjLCAweGQxLCAweDQ5LCAweDRiLCAweGQyLCAweDE4LCAweGQzLCAweDc4LCAweDAzLCAweDlkLCAweGVkLCAweDZhLAotMHhhYiwgMHg0MiwgMHgwMiwgMHhkOSwgMHgwMywgMHg5ZCwgMHhjMCwgMHg0NiwgMHhlYiwgMHg2MiwgMHg1MywgMHg2OCwKLTB4NWIsIDB4MDgsIDB4MDEsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4MDAsIDB4OTMsIDB4ODYsIDB4NDIsIDB4MGEsIDB4ZDEsCi0weDk1LCAweDY4LCAweDAyLCAweDliLCAweDVlLCAweDFjLCAweDAyLCAweDk2LCAweDliLCAweDAwLCAweDNjLCAweDRlLAotMHg5ZSwgMHgxOSwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhmMywgMHgxOCwgMHg5ZCwgMHg2MSwgMHg1MywgMHg3OCwKLTB4ODMsIDB4NDIsIDB4MGQsIDB4ZDEsIDB4ZDIsIDB4NjgsIDB4MDEsIDB4OWIsIDB4NWQsIDB4MWMsIDB4MDEsIDB4OTUsCi0weDliLCAweDAwLCAweDM1LCAweDRkLCAweDVkLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LAotMHhkYSwgMHg2MCwgMHgzYSwgMHg2OSwgMHgwMSwgMHgzMiwgMHgzYSwgMHg2MSwgMHg2NCwgMHgwMCwgMHgwMSwgMHgzMSwKLTB4MGIsIDB4MjksIDB4YmQsIDB4ZDMsIDB4MDEsIDB4MzAsIDB4MDksIDB4MjgsIDB4YjgsIDB4ZDMsIDB4MDAsIDB4MjAsCi0weDAyLCAweDliLCAweDk5LCAweDAwLCAweDJiLCAweDRhLCAweDg5LCAweDE4LCAweDBiLCAweDIzLCAweDFiLCAweDAyLAotMHhjOSwgMHgxOCwgMHg4OCwgMHg2MSwgMHgwMSwgMHg5YiwgMHg5OSwgMHgwMCwgMHg4OSwgMHgxOCwgMHgyZCwgMHgyMywKLTB4OWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4YzgsIDB4NjAsIDB4MDAsIDB4OWIsIDB4MDAsIDB4MmIsIDB4MGMsIDB4ZDEsCi0weDgxLCAweDAwLCAweDg5LCAweDE4LCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGM5LCAweDE4LCAweGNiLCAweDY5LAotMHhjMCwgMHg0NiwgMHg4YiwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhmNCwgMHhkMywgMHgwOCwgMHhlMCwKLTB4MDcsIDB4ZTAsIDB4MDMsIDB4OWQsIDB4ZTgsIDB4NmEsIDB4MzAsIDB4MjgsIDB4MDMsIDB4ZDIsIDB4MzAsIDB4MjAsCi0weDAzLCAweDlkLCAweGMwLCAweDQ2LCAweGU4LCAweDYyLCAweDE5LCAweDRhLCAweDc4LCAweDY5LCAweDAwLCAweDI4LAotMHgyYSwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MSwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4MjQsIDB4MDAsIDB4MjIsIDB4MTMsIDB4NGUsIDB4N2IsIDB4NjksIDB4MjMsIDB4NDAsIDB4MTAsIDB4ZDAsCi0weDkzLCAweDAwLCAweDliLCAweDE4LCAweDliLCAweDAwLCAweDEyLCAweDRkLCAweDViLCAweDE5LCAweDlkLCAweDc4LAotMHg4NSwgMHg0MiwgMHgwOCwgMHhkMSwgMHgxZCwgMHg2OSwgMHgwYiwgMHgxYywgMHg5YiwgMHgwMCwgMHg5ZSwgMHgxOSwKLTB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4ZGQsIDB4NjMsIDB4MDEsIDB4MzEsIDB4NjQsIDB4MDAsCi0weDAxLCAweDMyLCAweDBiLCAweDJhLCAweGU2LCAweGQzLCAweDAxLCAweDMwLCAweDA5LCAweDI4LCAweGUxLCAweGQzLAotMHgwMCwgMHgyMCwgMHg4OSwgMHgwMCwgMHgwNCwgMHg0YSwgMHg4OSwgMHgxOCwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwKLTB4YzksIDB4MTgsIDB4YzgsIDB4NjMsIDB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDMwLCAweDUzLCAweGZmLCAweGZmLCAweDAwLCAweDAxLCAweDAwLCAweDgwLAotMHgwMCwgMHg0NywgMHgwOCwgMHg0NywgMHgxMCwgMHg0NywgMHgxOCwgMHg0NywgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwKLTB4MTgsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsCi0weDEwLCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LAotMHgwOCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHgzOCwgMHg1MiwgMHhmZiwgMHhmZiwKLTB4ODgsIDB4NTEsIDB4ZmYsIDB4ZmYsIDB4ZDUsIDB4YjAsIDB4MjEsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MjAsCi0weDFhLCAweDQ5LCAweDAxLCAweDI1LCAweDA4LCAweDYwLCAweDFhLCAweDRmLCAweGJiLCAweDIzLCAweDFiLCAweDAxLAotMHhmOCwgMHgxOCwgMHgwNSwgMHg3MywgMHgxOCwgMHg0OCwgMHg0MSwgMHg2YiwgMHgyYywgMHgwNSwgMHgwMCwgMHgyMCwKLTB4N2EsIDB4NmUsIDB4MTcsIDB4NGIsIDB4OGEsIDB4NDIsIDB4MWQsIDB4ZDAsCi0weDE5LCAweDdiLCAweDAwLCAweDI5LCAweDE3LCAweGQxLCAweGQ5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLAotMHg0OSwgMHg3OCwgMHgxZSwgMHgxYywgMHgwMCwgMHgyOSwgMHgxMCwgMHhkMSwgMHhiMCwgMHg2MCwgMHgxMCwgMHgyMCwKLTB4NzAsIDB4NjAsIDB4MTAsIDB4NGEsIDB4MTAsIDB4NDksIDB4ZmYsIDB4ZjcsIDB4YzMsIDB4ZmYsIDB4MDAsIDB4MjgsCi0weDA3LCAweGQwLCAweDM1LCAweDczLCAweDA0LCAweDIzLCAweGI4LCAweDY5LCAweDE4LCAweDQzLCAweGI4LCAweDYxLAotMHgyMCwgMHg2MSwgMHgwMCwgMHhmMCwgMHgxNywgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MTgsIDB4NzMsIDB4MDQsIDB4MjMsIDB4YjgsIDB4NjksIDB4OTgsIDB4NDMsIDB4YjgsIDB4NjEsIDB4MjAsIDB4NjEsCi0weGY1LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHgyMCwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4N2QsIDB4NzEsIDB4MjEsIDB4NDAsIDB4ZjgsIDB4YjUsIDB4MTUsIDB4NGYsIDB4MzksIDB4NmMsIDB4MTUsIDB4NDgsCi0weDQwLCAweDZlLCAweDBjLCAweDFhLCAweDE0LCAweDRlLCAweDcxLCAweDY4LCAweDE0LCAweDRkLCAweGExLCAweDQyLAotMHgwNiwgMHhkOCwgMHgxNCwgMHg0YSwgMHgwYSwgMHg0MywgMHgwMCwgMHg5MiwgMHhiOSwgMHg2YiwgMHgwOSwgMHgxOCwKLTB4ZmEsIDB4NmIsIDB4MTEsIDB4ZTAsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4MjIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weGI5LCAweDZiLCAweDA5LCAweDE4LCAweDAwLCAweDIwLCAweGZhLCAweDZiLCAweDJiLCAweDFjLCAweGZmLCAweGY3LAotMHg4ZCwgMHhmZiwgMHg3MCwgMHg2OCwgMHgwMCwgMHgxYiwgMHgwYSwgMHg0YSwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwKLTB4YjksIDB4NmIsIDB4ZmEsIDB4NmIsIDB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODIsIDB4ZmYsCi0weGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MzcsIDB4MDIsIDB4ZjAsIDB4YjUsIDB4MmIsIDB4NGYsIDB4YjgsIDB4NjgsIDB4NzksIDB4NjgsCi0weGMwLCAweDE5LCAweDIwLCAweDMwLCAweDI5LCAweDRhLCAweGZmLCAweGY3LCAweDYzLCAweGZmLCAweDAxLCAweDIwLAotMHhjMCwgMHgwMiwgMHgyOCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhiOSwgMHg2OCwgMHgzOCwgMHgxYywKLTB4MjYsIDB4NGQsIDB4MDAsIDB4MjQsIDB4MjYsIDB4NGUsIDB4ZWYsIDB4MWQsIDB4NzksIDB4MzcsIDB4MDAsIDB4MjksCi0weDMxLCAweGQxLCAweDMxLCAweDY4LCAweDBhLCAweDc4LCAweDEyLCAweDBhLCAweDAzLCAweGQyLCAweDA0LCAweDczLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0OSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwYywgMHhkMSwKLTB4MDUsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4M2UsIDB4ZjksIDB4MzAsIDB4NjgsIDB4MDAsIDB4ZjAsCi0weDY3LCAweGY4LCAweDAwLCAweDI4LCAweDI2LCAweGQxLCAweDJjLCAweDczLCAweGZmLCAweGY3LCAweDU4LCAweGZmLAotMHgyMiwgMHhlMCwgMHgwOSwgMHgwMSwgMHgwNywgMHgxYywgMHg0MSwgMHg2MCwgMHgwOCwgMHgxYywgMHgxNywgMHg0YSwKLTB4MTcsIDB4NDksIDB4ZmYsIDB4ZjcsIDB4MzUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDcsIDB4ZDEsIDB4M2MsIDB4NzMsCi0weDA0LCAweDIzLCAweGE4LCAweDY5LCAweDk4LCAweDQzLCAweDk5LCAweDA0LCAweGE4LCAweDYxLCAweDA4LCAweDYxLAotMHhkYSwgMHhlNywgMHgxMCwgMHgyMCwgMHgwMCwgMHhmMCwgMHgyMCwgMHhmOSwgMHgxMCwgMHgyMCwgMHhiOCwgMHg2MCwKLTB4ZmYsIDB4ZjcsIDB4ODIsIDB4ZmYsIDB4ZDIsIDB4ZTcsIDB4MDUsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDAsIDB4ZjAsCi0weDE3LCAweGY5LCAweDMwLCAweDY4LCAweDAwLCAweGYwLCAweDQwLCAweGY4LCAweDAwLCAweDI4LCAweGQ4LCAweGQwLAotMHgwMiwgMHgyMywgMHhmOCwgMHg2YiwgMHgxOCwgMHg0MywgMHhmOCwgMHg2MywgMHhjNCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4YTUsIDB4NTUsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDgwLCAweDIwLCAweDU1LCAweGZmLCAweGZmLAotMHg3ZCwgMHg3MSwgMHgyMSwgMHg0MCwgMHg5MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwMywgMHgxMCwgMHg0OSwKLTB4MDAsIDB4MjcsIDB4MDgsIDB4NjAsIDB4MGYsIDB4NGMsIDB4ZTAsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4M2EsIDB4MzAsCi0weDQ3LCAweDcwLCAweGUwLCAweDY5LCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDY5LCAweDAwLCAweGYwLAotMHhkNywgMHhmOCwgMHhlMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwgMHhlNywgMHg2MSwgMHgwMSwgMHhlMCwKLTB4MDEsIDB4MjAsIDB4ZTAsIDB4NjEsIDB4MDcsIDB4NDgsIDB4MDIsIDB4MjMsIDB4YzEsIDB4NmIsIDB4MTksIDB4NDMsCi0weGMxLCAweDYzLCAweDI3LCAweDczLCAweGZmLCAweGY3LCAweDAwLCAweGZmLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NzgsIDB4ODgsCi0weDZkLCAweDI4LCAweDAzLCAweGRiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHhmNywgMHhmOCwgMHgxNywgMHhlMCwgMHg4MCwgMHgwMCwgMHgwZCwgMHg0OSwgMHgwOSwgMHg1OCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4Y2IsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MGYsIDB4ZDEsIDB4MzksIDB4NzgsIDB4YzksIDB4MDksCi0weDBjLCAweGQzLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNmLCAweGY4LCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHgwYiwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGU4LCAweDAxLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDgyLCAweGIwLCAweDAyLCAweDFjLCAweDQxLCAweDRiLAotMHhkZCwgMHgxZCwgMHhmZiwgMHgzNSwgMHgzYSwgMHgzNSwgMHgyZiwgMHg3OCwgMHgwMCwgMHgyZiwgMHgwMSwgMHhkMCwKLTB4MDAsIDB4MjcsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MjcsIDB4MmYsIDB4NzAsIDB4MmYsIDB4NzgsIDB4ZmIsIDB4MDAsCi0weGRiLCAweDE5LCAweDViLCAweDAxLCAweDNhLCAweDRmLCAweGRjLCAweDE5LCAweDQwLCAweDc4LCAweDAwLCAweDAxLAotMHhjNywgMHgxZCwgMHgwOSwgMHgzNywgMHgwMCwgMHgyMCwgMHg4MywgMHgwMCwgMHhkNiwgMHg1OCwgMHhjMCwgMHg0NiwKLTB4ZTYsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MDAsIDB4MjksIDB4MGYsIDB4ZDAsCi0weDAwLCAweDIyLCAweGJiLCAweDA4LCAweDAxLCAweDkzLCAweDgzLCAweDQyLCAweDBiLCAweGQ5LCAweDEzLCAweDFjLAotMHg5YiwgMHgwMCwgMHhjYiwgMHg1OCwgMHg4NiwgMHgwMCwgMHhhMywgMHg1MSwgMHgwMSwgMHg5YiwgMHgwMSwgMHgzMCwKLTB4MDEsIDB4MzIsIDB4ODMsIDB4NDIsIDB4ZjUsIDB4ZDgsIDB4MDAsIDB4ZTAsIDB4MTAsIDB4MjcsIDB4MmIsIDB4NDgsCi0weDAyLCAweDZkLCAweDgwLCAweDZlLCAweDJhLCAweDQ5LCAweDgyLCAweDQyLCAweDAzLCAweGQ4LCAweDgyLCAweDFhLAotMHhjYiwgMHg2YywgMHg5YSwgMHgxYSwgMHgwMCwgMHhlMCwgMHgxMiwgMHgxYSwgMHhiYSwgMHg0MiwgMHgwNSwgMHhkOCwKLTB4MjYsIDB4NDgsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MzcsIDB4ZTAsCi0weGMzLCAweDE5LCAweGNhLCAweDZjLCAweDkzLCAweDQyLCAweDA4LCAweGQ4LCAweDIyLCAweDRhLCAweDNhLCAweDQzLAotMHgwMCwgMHg5MiwgMHgwYSwgMHgxYywgMHg0OSwgMHg2YywgMHgwOSwgMHgxOCwgMHg5MiwgMHg2YywgMHgyMywgMHgxYywKLTB4MTIsIDB4ZTAsIDB4MTYsIDB4MWEsIDB4MDAsIDB4OTYsIDB4MWIsIDB4NDksIDB4NDksIDB4NmMsIDB4MDksIDB4MTgsCi0weDE5LCAweDQ4LCAweDgyLCAweDZjLCAweDAzLCAweDIwLCAweDIzLCAweDFjLCAweGZmLCAweGY3LCAweDVlLCAweGZlLAotMHhiOCwgMHgxYiwgMHgxOCwgMHg0YSwgMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwgMHhhMywgMHgxOSwgMHgxNCwgMHg0OCwKLTB4ODIsIDB4NmMsIDB4NDEsIDB4NmMsIDB4MDMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4NTMsIDB4ZmUsIDB4MDEsIDB4MjAsCi0weDBkLCAweDQ5LCAweGMwLCAweDQ2LCAweDY4LCAweDcwLCAweDhhLCAweDY5LCAweDkyLCAweDAwLCAweDUyLCAweDE4LAotMHgxNywgMHg2MSwgMHg4YSwgMHg2OSwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMCwgMHgwMCwgMHgyNywgMHg4ZiwgMHg2MSwKLTB4MDAsIDB4ZTAsIDB4ODgsIDB4NjEsIDB4MGMsIDB4NDgsIDB4MDIsIDB4MjMsIDB4YzEsIDB4NmIsIDB4MTksIDB4NDMsCi0weGMxLCAweDYzLCAweDAwLCAweDIwLCAweDAxLCAweDI3LCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDRmLCAweDczLAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4NTAsIDB4YmEsIDB4MjAsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDAyLCAweGU4LCAweDBlLCAweDAwLCAweDgwLAotMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwNywgMHg0OSwgMHg4YSwgMHg2ZSwgMHgxMCwgMHgxOCwgMHgwNywgMHg0YSwKLTB4ZDIsIDB4NmMsIDB4MTMsIDB4MDQsIDB4MWIsIDB4MGMsIDB4ODMsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4ODAsIDB4MWEsCi0weDg4LCAweDY2LCAweDg4LCAweDZlLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLCAweDcwLCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwKLTB4MDYsIDB4NDksIDB4NGEsIDB4NmUsIDB4MTAsIDB4MTgsIDB4MDYsIDB4NGEsIDB4MTIsIDB4NmMsIDB4ODIsIDB4NDIsCi0weDAwLCAweGQ4LCAweDgwLCAweDFhLCAweDQ4LCAweDY2LCAweDQ4LCAweDZlLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MSwgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MDUsIDB4MjIsIDB4MGEsIDB4NjAsIDB4ODIsIDB4ODgsIDB4YzAsIDB4NDYsCi0weDhhLCAweDgwLCAweDAwLCAweDIyLCAweDRhLCAweDcwLCAweDQwLCAweDg4LCAweGMwLCAweDQ2LCAweDQ4LCAweDgwLAotMHhjYSwgMHg4MCwgMHg4YSwgMHg2MCwgMHhjYSwgMHg2MCwgMHg3MCwgMHg0NywgMHgwNSwgMHgyMiwgMHgwMiwgMHg2MCwKLTB4MDAsIDB4MjIsIDB4ODIsIDB4ODAsIDB4NDIsIDB4NzAsIDB4NDEsIDB4ODAsIDB4YzIsIDB4ODAsIDB4ODIsIDB4NjAsCi0weGMyLCAweDYwLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDBlLCAweDQ4LAotMHg0MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywgMHg2OSwgMHg0NiwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZGQsIDB4ZmYsIDB4MzgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsCi0weDQ1LCAweDIwLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAxLCAweDI3LCAweGRmLCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHgxMSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweGMxLCAweDg4LCAweDA5LCAweDRhLAotMHhjMCwgMHg0NiwgMHg5MSwgMHg4MSwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHhiZCwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4NDAsIDB4MDIsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsCi0weGY1LCAweGZlLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhjMywgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzEsIDB4YTEsIDB4MjEsCi0weDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDI4LCAweDBmLCAweDAwLCAweDgwLAotMHgwMCwgMHgyMCwgMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MSwgMHhmZiwgMHgyMSwgMHhhMSwgMHgyMiwKLTB4NTIsIDB4MDMsIDB4MDEsIDB4MzEsIDB4OTEsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsCi0weDAyLCAweDIwLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwKLTB4NzAsIDB4NDcsIDB4YzAsIDB4ODgsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsCi0weDQ4LCAweDYxLCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYzLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwOCwgMHg0OSwgMHgwZiwgMHg2YiwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NzEsIDB4ZmYsIDB4ZjgsIDB4MDYsIDB4YzAsIDB4MGUsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweGE5LCAweGZlLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4ODAsIDB4YjUsIDB4ODUsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDViLCAweGZmLCAweGY4LCAweDg4LCAweDA0LCAweGE5LCAweDAzLCAweGYwLCAweGM5LCAweGZmLCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHgwMSwgMHhhOCwgMHg0MCwgMHg4OCwgMHgwMCwgMHgyOCwgMHgwZiwgMHhkMCwgMHgwMSwgMHhhOCwKLTB4NDAsIDB4ODgsIDB4ODAsIDB4MDgsIDB4MDMsIDB4MzgsIDB4ODAsIDB4MDgsIDB4MDEsIDB4MzAsIDB4MDQsIDB4M2IsCi0weDU4LCAweDcwLCAweDA0LCAweDk4LCAweDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkxLCAweDQwLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwNSwgMHhlMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4YzEsIDB4MWQsIDB4MDEsIDB4MzEsCi0weDY4LCAweDQ2LCAweGZmLCAweGY3LCAweDc1LCAweGZlLCAweDAxLCAweDIwLCAweDA1LCAweGIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgxNCwgMHg0ZiwgMHgzOSwgMHg3YiwKLTB4MDAsIDB4MjksIDB4MjAsIDB4ZDEsIDB4ZjksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4M2EsIDB4MzEsIDB4NDksIDB4NzgsCi0weDAwLCAweDI5LCAweDFhLCAweGQxLCAweDEwLCAweDQ5LCAweDA1LCAweDIyLCAweDAwLCAweDkyLCAweDA4LCAweDIyLAotMHgwMCwgMHhhYiwgMHg1YSwgMHg4MCwgMHg5OCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg3MCwKLTB4MDAsIDB4MjQsIDB4ZGMsIDB4ODAsIDB4MDgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4NDgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDAxLCAweDIwLCAweDM4LCAweDczLCAweDY4LCAweDQ2LCAweDA4LCAweDMxLAotMHhmZiwgMHhmNywgMHg0YywgMHhmZSwgMHgwMCwgMHgyOCwgMHgwMCwgMHhkMCwgMHgzYywgMHg3MywgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhmOSwgMHhmZSwgMHhiYSwgMHg2OCwgMHgwZCwgMHg0YywgMHgwZSwgMHg0OCwKLTB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MGQsIDB4NDksIDB4ZmYsIDB4ZjcsIDB4ZTQsIDB4ZmMsIDB4MDAsIDB4MjgsCi0weDBjLCAweGRhLCAweDA1LCAweGUwLCAweGI5LCAweDg4LCAweDBiLCAweDRiLCAweGZmLCAweGY3LCAweGRmLCAweGZjLAotMHgwMCwgMHgyOCwgMHgwNSwgMHhkYSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4MjIsIDB4ZmUsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHgwZCwgMHg3NiwgMHgyMSwgMHg0MCwgMHhjMSwgMHhiZCwgMHgyMSwgMHg0MCwgMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4YjUsIDB4YzAsIDB4ODgsIDB4MDMsIDB4ZjAsIDB4MmUsIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGUyLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhkZCwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4MDEsIDB4MWMsIDB4MDIsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGIwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweDA4LCAweDFjLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHhiNSwgMHhmZSwgMHgyMSwgMHg0OCwgMHhmZiwgMHhmNywgMHhhNCwgMHhmYywgMHgwNCwgMHgxYywgMHgyMCwgMHg0YSwKLTB4MDAsIDB4MjEsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YTAsIDB4ZmMsIDB4MDAsIDB4MjgsIDB4MjcsIDB4ZDAsCi0weDA0LCAweGE5LCAweDFkLCAweDRhLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDk5LCAweGZjLCAweDA0LCAweGE4LAotMHgwMCwgMHgyMywgMHgwMSwgMHgyZiwgMHgwNiwgMHhkMSwgMHgwYywgMHhhYSwgMHgwMiwgMHgzMiwgMHgwMCwgMHgyMSwKLTB4MTMsIDB4NjAsIDB4MDEsIDB4MzEsIDB4MTAsIDB4MjksIDB4ZmIsIDB4ZDMsIDB4MDEsIDB4NjgsIDB4MDQsIDB4MjksCi0weDA0LCAweGQ5LCAweDg5LCAweDA4LCAweDAzLCAweDM5LCAweDg5LCAweDA4LCAweDAxLCAweDMxLCAweDAwLCAweGUwLAotMHgxOSwgMHgxYywgMHgwMCwgMHhhYiwgMHg1OSwgMHg3MCwgMHgwNiwgMHhhOSwgMHgwOSwgMHg3OCwgMHhjMCwgMHg0NiwKLTB4ZDksIDB4ODAsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDcsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDA0LCAweDMzLCAweDA4LCAweGFkLCAweDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLAotMHgxOCwgMHg3MCwgMHgwOSwgMHg0OSwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHg2ZSwgMHhmYywgMHg2OCwgMHg0NiwKLTB4MjksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjcsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4NDYsIDB4YjAsIDB4YjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweDU5LCAweGIxLCAweDIxLCAweDQwLAotMHg5ZCwgMHhhZiwgMHgyMSwgMHg0MCwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHgwMSwgMHgxYywKLTB4MDIsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weDAxLCAweDFjLCAweDAxLCAweDIwLCAweGZmLCAweGY3LCAweGEyLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHgwMSwgMHgxYywgMHgwMSwgMHgyMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHhmOCwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzcsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsCi0weDAxLCAweGE5LCAweGZmLCAweGY3LCAweDRkLCAweGZlLCAweDIxLCAweDQ4LCAweGZmLCAweGY3LCAweDNjLCAweGZjLAotMHgwMCwgMHg5MCwgMHg3OCwgMHg3OCwgMHgwMCwgMHgwMSwgMHhiYSwgMHg2OCwgMHgwNCwgMHgzMCwgMHhmYywgMHgyYSwKLTB4MjUsIDB4ZDgsIDB4ZmYsIDB4MjMsIDB4MDksIDB4MzMsIDB4OTgsIDB4NDIsIDB4MjEsIDB4ZDgsIDB4MTksIDB4MmMsCi0weDFmLCAweGQ4LCAweGZkLCAweDg4LCAweGY4LCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkwLCAweGY5LCAweDFkLAotMHgwOSwgMHgzMSwgMHgwNiwgMHhhYiwgMHgwMCwgMHgyMCwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgyZSwgMHgwZCwgMHhkZCwKLTB4NDAsIDB4YzksIDB4NDAsIDB4YzMsIDB4NDAsIDB4YzksIDB4NDAsIDB4YzMsIDB4NDAsIDB4YzksIDB4NDAsIDB4YzMsCi0weDQwLCAweGM5LCAweDQwLCAweGMzLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDdlLCAweDc4LAotMHg4NiwgMHg0MiwgMHhmMSwgMHhkYywgMHgyMCwgMHgxYywgMHgwNSwgMHhhOSwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywKLTB4MjEsIDB4ZmMsIDB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAxLCAweGFiLCAweDE4LCAweDcwLCAweDA3LCAweDQ5LCAweDAwLCAweDk4LCAweGZmLCAweGY3LAotMHgwNiwgMHhmYywgMHgwMCwgMHgyMSwgMHgwMSwgMHhhOCwgMHhmZiwgMHhmNywgMHg0ZiwgMHhmZCwgMHgwMSwgMHgyMCwKLTB4NDcsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weDNjLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweDFiLCAweGZlLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHhmYywgMHg4OCwgMHgyNSwgMHg0ZCwKLTB4NjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4NjksIDB4NDYsIDB4NjgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGY1LCAweGZkLCAweDEwLCAweDJjLCAweDA4LCAweGQzLCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHgxNywgMHhlMCwKLTB4NzgsIDB4NzgsIDB4ODIsIDB4MDAsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsIDB4MDAsIDB4MjAsIDB4YjksIDB4NjgsCi0weDAwLCAweDJhLCAweDE1LCAweGQ5LCAweDQwLCAweGNiLCAweDBmLCAweDFjLAotMHgwMSwgMHgzMSwgMHhiZSwgMHg0MiwgMHgwZCwgMHhkMCwgMHgwMCwgMHhhYSwgMHgxMiwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MWEsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MWEsIDB4NzAsIDB4MDQsIDB4MjIsIDB4ZGEsIDB4ODAsIDB4MDIsIDB4OTAsCi0weDAzLCAweDkxLCAweDA0LCAweDMzLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDE1LCAweGUwLCAweDAxLCAweDMwLAotMHg5MCwgMHg0MiwgMHhlOSwgMHhkMywgMHgwMCwgMHhhYiwgMHg1YywgMHg3MCwgMHgwMiwgMHg5NCwgMHg2OSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4MzMsIDB4MDAsIDB4MmEsCi0weDA1LCAweGQ5LCAweDBmLCAweDFjLCAweDgwLCAweGMzLCAweDAxLCAweDMwLCAweDAxLCAweDMxLCAweDkwLCAweDQyLAotMHhmOSwgMHhkMywgMHg2OCwgMHg0NiwgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywgMHhmNywgMHhmYywgMHgwMSwgMHgyMCwKLTB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OWMsIDB4MDMsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI0LCAweDIzLCAweDQ4LCAweDAwLCAweDY4LCAweDAxLCAweDIxLCAweDQyLCAweDA5LCAweDAwLCAweGQzLAotMHgwMCwgMHgyMSwgMHgwMCwgMHgyNywgMHgzYSwgMHgxYywgMHg0MywgMHgwYiwgMHgwMCwgMHhkMiwgMHgwMiwgMHgyMiwKLTB4MTEsIDB4NDMsIDB4MWUsIDB4NGEsIDB4MjAsIDB4MjQsIDB4ZDMsIDB4NjgsIDB4MDEsIDB4MmIsIDB4MmUsIDB4ZDEsCi0weDgwLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDI0LCAweDBjLCAweDQzLCAweDIwLCAweDFjLCAweDFiLCAweDIzLAotMHhkYiwgMHgwMSwgMHhkMSwgMHgxOCwgMHg4OSwgMHg4YiwgMHgwOSwgMHgwYiwgMHgwMCwgMHhkMiwgMHgwNCwgMHgyNywKLTB4MzgsIDB4NDMsIDB4ZDEsIDB4NmYsIDB4MDksIDB4NjgsIDB4MDksIDB4MGEsIDB4MDcsIDB4ZDIsIDB4ZDEsIDB4MWQsCi0weDc5LCAweDMxLCAweDA5LCAweDY4LCAweDA5LCAweDY4LCAweDA5LCAweDBhLCAweDAxLCAweGQzLCAweDA4LCAweDIzLAotMHgxOCwgMHg0MywgMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgMHhkMSwgMHgxOCwgMHg4OSwgMHg3OSwgMHgwMywgMHgyOSwKLTB4MDIsIDB4ZDEsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsIDB4MTgsIDB4NDMsIDB4MGIsIDB4NDksIDB4MDksIDB4NmEsCi0weDEwLCAweDIyLCAweDRiLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIyLCAweDEwLCAweDQzLCAweDg5LCAweDA3LAotMHg4OSwgMHgwZiwgMHg4OSwgMHgwMSwgMHgwOCwgMHg0MywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg0MCwgMHgwYywKLTB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MGMsIDB4NDMsIDB4MjAsIDB4MWMsIDB4ZWMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGMwLCAweDAwLCAweDE4LCAweDQwLAotMHhmMCwgMHhiNSwgMHgzYSwgMHg0YywgMHgyMCwgMHgxYywgMHgwNCwgMHhmMCwgMHgwNywgMHhmYSwgMHgzOSwgMHg0OCwKLTB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4YzcsIDB4MTgsIDB4YjksIDB4NzksIDB4MzcsIDB4NGUsIDB4YzUsIDB4MWQsCi0weDc5LCAweDM1LCAweDA2LCAweDI5LCAweDYyLCAweGQyLCAweDAyLCAweGEzLCAweDViLCAweDVjLCAweDViLCAweDAwLAotMHg5ZiwgMHg0NCwgMHgwMCwgMHgxYywgMHgwMywgMHgwZSwgMHgxZSwgMHgzNywgMHg0ZSwgMHg1NSwgMHgwMSwgMHgyMCwKLTB4YjgsIDB4NzEsIDB4MDAsIDB4MjAsIDB4YjAsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4OTUsIDB4ZmYsIDB4MDUsIDB4MjMsCi0weDk4LCAweDQzLCAweDAwLCAweGYwLCAweDZmLCAweGY4LCAweDBjLCAweGUwLCAweGZmLCAweGY3LCAweDhlLCAweGZmLAotMHhjMCwgMHgwOCwgMHgwNiwgMHhkMywgMHhiMCwgMHg2OCwgMHg0MSwgMHgxYywgMHhiMSwgMHg2MCwgMHgwYSwgMHgyOCwKLTB4MDMsIDB4ZDksIDB4MDQsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MjAsIDB4YjgsIDB4NzEsIDB4NjQsIDB4MjIsCi0weDIwLCAweDFjLCAweDJiLCAweGUwLCAweDA2LCAweDFjLCAweGMwLCAweDZmLCAweDgwLCAweDIzLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMywgMHgyMCwgMHhiOCwgMHg3MSwgMHgyMCwgMHgxYywgMHgyMCwgMHg0YSwKLTB4MDAsIDB4MjEsIDB4MDQsIDB4ZjAsIDB4OTksIDB4ZjksIDB4ZjAsIDB4NmYsIDB4MDQsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDk5LCAweDQzLCAweDAxLCAweDYwLCAweDI4LCAweDY4LCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwNSwgMHgyMSwgMHhiOSwgMHg3MSwgMHgyOSwgMHg2OCwKLTB4MDQsIDB4MjMsIDB4MGEsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4YzAsIDB4NmYsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweGZmLCAweGY3LCAweDVhLCAweGZmLCAweDA4LCAweDIzLCAweDE4LCAweDQzLAotMHgwMCwgMHhmMCwgMHgzNCwgMHhmOCwgMHgyMCwgMHgxYywgMHgxMCwgMHg0YSwgMHgwMCwgMHgyMSwgMHgwNCwgMHhmMCwKLTB4NzcsIDB4ZjksIDB4ZTUsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4NGUsIDB4ZmYsIDB4MDQsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDAwLCAweGYwLCAweDI4LCAweGY4LCAweGRlLCAweGU3LCAweDAwLCAweDIwLCAweDI5LCAweDY4LCAweDYwLCAweDIzLAotMHgwYSwgMHg2OCwgMHg5YSwgMHg0MywgMHgwYSwgMHg2MCwgMHhmZiwgMHhmNywgMHhlMywgMHhmYSwgMHhkNSwgMHhlNywKLTB4MDYsIDB4MjAsIDB4YjgsIDB4NzEsIDB4ZDIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YTksIDB4NzksIDB4MjEsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDljLCAweDAzLCAweDAwLCAweDgwLCAweDMwLCAweDc1LCAweDAwLCAweDAwLAotMHgxMCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgyMCwKLTB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NzEsIDB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsCi0weDA0LCAweGYwLCAweDRlLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDk4LCAweDFjLCAweDAwLCAweDgwLAotMHhhOSwgMHg3OSwgMHgyMSwgMHg0MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgzMSwgMHg0OCwgMHgwMCwgMHg2OCwKLTB4NzksIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MTAsIDB4MjMsIDB4MDEsIDB4MWMsIDB4OTksIDB4NDMsIDB4MDEsIDB4ZTAsCi0weDEwLCAweDIxLCAweDAxLCAweDQzLCAweDJkLCAweDRjLCAweGUyLCAweDY4LCAweDAxLCAweDJhLCAweDA1LCAweGQxLAotMHgyMiwgMHg3OSwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOSwgMHg0MywKLTB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4MDEsIDB4NjAsIDB4ZTAsIDB4NjgsCi0weDAxLCAweDI4LCAweDIwLCAweGQxLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGUwLCAweDE4LCAweDgwLCAweDhiLAotMHhmOSwgMHgwOCwgMHgwNCwgMHhkMywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHgwMSwgMHgxYywgMHg5OSwgMHg0MywKLTB4MDEsIDB4ZTAsIDB4MDEsIDB4MjEsIDB4YzksIDB4MDIsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MjAsCi0weDAyLCAweGYwLCAweDFhLCAweGZiLCAweDM4LCAweDA5LCAweDA3LCAweGQzLCAweGUwLCAweDZmLCAweDgwLCAweDIzLAotMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHhlMCwgMHgxOCwgMHgwMCwgMHg2OCwgMHgwMCwgMHhlMCwKLTB4ZTAsIDB4NmYsIDB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MTUsIDB4NDgsCi0weDAxLCAweDZhLCAweDc4LCAweDA5LCAweDAzLCAweGQzLCAweGZmLCAweDIwLCAweDAxLCAweDMwLCAweDA4LCAweDQzLAotMHgwMywgMHhlMCwgMHhmZiwgMHgyMywgMHgwOCwgMHgxYywgMHgwMSwgMHgzMywgMHg5OCwgMHg0MywgMHg4MCwgMHgwOCwKLTB4ODAsIDB4MDAsIDB4YmEsIDB4MDksIDB4OTIsIDB4MDcsIDB4OTIsIDB4MGYsIDB4MTAsIDB4NDMsIDB4ODgsIDB4NDIsCi0weDAyLCAweGQwLCAweDBjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLCAweGUxLCAweDY4LCAweDAxLCAweDI5LAotMHgwOCwgMHhkMSwgMHg3OSwgMHgwYSwgMHgwNiwgMHhkMywgMHhmZiwgMHgyMywgMHgwNCwgMHgzMywgMHgxOCwgMHg0MCwKLTB4MDMsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4ZjcsIDB4OGUsIDB4ZmYsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHhiNSwgMHhmZiwgMHhmNywKLTB4YjEsIDB4ZmUsIDB4ODAsIDB4MDksIDB4MWIsIDB4ZDIsIDB4MGYsIDB4NDgsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsCi0weGMxLCAweDE4LCAweDRhLCAweDc5LCAweDAwLCAweDJhLCAweDE0LCAweGQxLCAweDAxLCAweDIyLCAweDRhLCAweDcxLAotMHgwMCwgMHgyNywgMHg4MCwgMHgzMCwgMHgwMCwgMHg2OCwgMHg2MCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywKLTB4MDEsIDB4NjAsIDB4MDgsIDB4NDgsIDB4MDYsIDB4ZTAsIDB4MDIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4OGMsIDB4ZmMsCi0weDA3LCAweDIwLCAweDAyLCAweGYwLCAweDViLCAweGZjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDM2LCAweGZhLAotMHhmNSwgMHhlNywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCi0weDM3LCAweGZjLCAweGZmLCAweGY3LCAweDg1LCAweGZlLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDA4LCAweDQ4LAotMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwNywgMHg0OCwgMHgwMCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4NjcsIDB4ZmIsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MTcsIDB4ZmMsIDB4ZjgsIDB4ODgsIDB4ZmYsIDB4ZjcsIDB4NDIsIDB4ZmYsCi0weGZmLCAweGY3LCAweDYyLCAweGZlLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZiwgMHhmNywgMHg0YywgMHhmYiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4YjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4YzcsIDB4ODgsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCi0weDAxLCAweGZjLCAweDAxLCAweDI0LCAweDFhLCAweDRiLCAweDlmLCAweDQyLCAweDBhLCAweGQ5LCAweDAwLCAweGE4LAotMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwKLTB4ZDgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NDgsIDB4ZmYsIDB4ZjcsCi0weGUxLCAweGY5LCAweDA1LCAweDFjLCAweDEzLCAweDRhLCAweDM4LCAweDFjLCAweDA0LCAweGE5LCAweGZmLCAweGY3LAotMHhkZCwgMHhmOSwgMHgxMiwgMHg0OSwgMHgyOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkOCwgMHhmOSwgMHgwMSwgMHgyZiwKLTB4MDYsIDB4ZDEsIDB4MGMsIDB4YTksIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsCi0weDBhLCAweDYwLCAweDAxLCAweDMwLCAweDEwLCAweDI4LCAweGZiLCAweGQzLCAweDEwLCAweDIwLCAweDAwLCAweGFiLAotMHg1OCwgMHg3MCwgMHgwNCwgMHg5OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwNSwgMHg5OCwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDYsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4MGYsIDB4ZmIsIDB4MjAsIDB4MWMsCi0weDQ2LCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGZmLCAweDAxLCAweDAwLCAweDAwLAotMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg5ZCwgMHhhZiwgMHgyMSwgMHg0MCwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGJiLCAweGZiLCAweGZjLCAweDg4LCAweDc4LCAweDc4LCAweDAxLCAweDI1LCAweDEwLCAweDI4LCAweDAxLCAweGQxLAotMHgxOSwgMHgyYywgMHgwOSwgMHhkOSwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MDQsIDB4MzMsIDB4MjcsIDB4ZTAsCi0weGI4LCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkwLCAweGY4LCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkwLAotMHgwNiwgMHhhYSwgMHhmYiwgMHgxZCwgMHgwOSwgMHgzMywgMHgwMCwgMHgyMSwgMHg3OCwgMHg3OCwgMHgwMCwgMHgyOCwKLTB4MGQsIDB4ZGQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4Y2IsIDB4NDAsIDB4YzIsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDA0LCAweDI4LCAweGY4LCAweGRiLCAweDQ4LCAweDFjLCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHg3OCwgMHg3OCwgMHg4OCwgMHg0MiwgMHhmMSwgMHhkYywgMHgwYiwgMHg0OCwgMHhmZiwgMHhmNywgMHg3ZSwgMHhmOSwKLTB4MDcsIDB4MWMsIDB4MGEsIDB4NGEsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4N2EsIDB4ZjksCi0weDA4LCAweDQ5LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDc1LCAweGY5LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZiwgMHhmNywgMHhiZSwgMHhmYSwgMHgyOCwgMHgxYywgMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4YzUsIDB4YWYsIDB4MjEsIDB4NDAsCi0weDNjLCAweDAyLCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDAwLCAweDI3LAotMHhlNiwgMHg4OCwgMHhhMiwgMHg2OCwgMHg0NywgMHg0OSwgMHgwOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwOCwgMHhkMCwKLTB4MDAsIDB4MmUsIDB4MDEsIDB4ZDAsIDB4MDEsIDB4MmUsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4MDEsIDB4ZTAsCi0weDA0LCAweDJlLCAweDAwLCAweGQxLCAweDAzLCAweDI2LCAweDAxLCAweDI1LCAweDQxLCAweDQ4LCAweDA1LCAweDJlLAotMHg2NiwgMHhkMiwgMHgwMiwgMHhhMywgMHg5YiwgMHg1ZCwgMHg1YiwgMHgwMCwgMHg5ZiwgMHg0NCwgMHgwMCwgMHgxYywKLTB4MDMsIDB4MDYsIDB4MDgsIDB4MGMsIDB4MTAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MjMsIDB4MDMsIDB4ZTAsCi0weDA1LCAweDgwLCAweDA1LCAweGUwLCAweDAwLCAweDIzLCAweDAzLCAweDgwLCAweDQzLCAweDgwLCAweDA2LCAweGUwLAotMHgwMCwgMHgyMywgMHgwMywgMHg4MCwgMHg0NSwgMHg4MCwgMHgwMiwgMHhlMCwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywKLTB4MDMsIDB4ODAsIDB4Y2IsIDB4MWQsIDB4NzksIDB4MzMsIDB4OWUsIDB4ODksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsCi0weDllLCAweDQyLCAweDAyLCAweGRiLCAweGQyLCAweDA3LCAweGQyLCAweDBmLCAweDAwLCAweGUwLCAweDAxLCAweDIyLAotMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4OSwgMHg4OCwgMHhmZiwgMHgyMywgMHhlMSwgMHgzMywKLTB4OTksIDB4NDMsIDB4MDEsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDYsIDB4ODgsIDB4ZmYsIDB4MzMsIDB4OWUsIDB4NDIsCi0weDBkLCAweGQxLCAweGZmLCAweDIwLCAweGUxLCAweDMwLCAweDA4LCAweDQzLCAweDAwLCAweDJhLCAweDA0LCAweGQxLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwMSwgMHgxYywgMHgyMCwgMHhlMCwgMHgwMSwgMHgyMSwKLTB4ODksIDB4MDIsIDB4MDEsIDB4NDMsIDB4MWMsIDB4ZTAsIDB4MDEsIDB4MmUsIDB4MGEsIDB4ZDEsIDB4NDAsIDB4ODgsCi0weDAxLCAweDI4LCAweDA0LCAweGQxLCAweDYwLCAweDIzLCAweDE5LCAweDQzLCAweDAwLCAweDJhLCAweDEzLCAweGQwLAotMHgwYywgMHhlMCwgMHgyMCwgMHgyMywgMHgxOSwgMHg0MywgMHgwZiwgMHhlMCwgMHgwMCwgMHgyZSwgMHgwZCwgMHhkMSwKLTB4NDAsIDB4ODgsIDB4MDEsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4ZmYsIDB4MjMsIDB4ODEsIDB4MzMsIDB4MTksIDB4NDMsCi0weDAwLCAweDJhLCAweDA1LCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE5LCAweDQzLCAweDAxLCAweGUwLAotMHg4MCwgMHgyMywgMHgxOSwgMHg0MywgMHgwNCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3NSwgMHhmOSwgMHgwOSwgMHgyMSwKLTB4NDksIDB4MDIsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzAsIDB4ZjksIDB4MDAsIDB4MmYsIDB4MDIsIDB4ZDEsCi0weDAwLCAweDIwLCAweDEyLCAweGUwLCAweGZmLCAweGU3LCAweDY5LCAweDQ2LCAweDIwLCAweDFjLCAweGZmLCAweGY3LAotMHhlZiwgMHhmYSwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MDQsIDB4MzMsCi0weGZmLCAweGY3LCAweDIyLCAweGZhLCAweDI4LCAweDFjLCAweDA0LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4YzAsIDB4ODgsIDB4NTEsIDB4MjEsIDB4ODksIDB4MDMsIDB4MDgsIDB4NjIsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDE2LCAweDRmLCAweGY4LCAweDY4LCAweDAxLCAweDI4LAotMHgwNywgMHhkMSwgMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg0MCwgMHg4YSwgMHg4MCwgMHgyMSwKLTB4MDEsIDB4NDMsIDB4MWIsIDB4MjAsIDB4MDcsIDB4ZTAsIDB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZjgsIDB4MTgsCi0weDgwLCAweDhiLCAweDAxLCAweDIxLCAweDQ5LCAweDAzLCAweDAxLCAweDQzLCAweDEwLCAweDIwLCAweDAyLCAweGYwLAotMHgzMywgMHhmOSwgMHgwMSwgMHgyMCwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhmOSwgMHgxOCwgMHgwOCwgMHg4MCwKLTB4NDgsIDB4ODAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDEsIDB4MjMsCi0weDFiLCAweDAzLCAweDk4LCAweDQzLCAweDQxLCAweDIxLCAweDA5LCAweDAyLCAweDAxLCAweDQzLCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHgyMCwgMHhmOSwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MTcsIDB4NGYsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsCi0weDA4LCAweGQxLCAweDM3LCAweDIzLCAweDliLCAweDAxLCAweGY4LCAweDE4LCAweDQwLCAweDhhLCAweDgwLCAweDIzLAotMHg5OCwgMHg0MywgMHgwMSwgMHgxYywgMHgxYiwgMHgyMCwgMHgwOCwgMHhlMCwgMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwKLTB4ZjgsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsCi0weDEwLCAweDIwLCAweDAyLCAweGYwLCAweDAxLCAweGY5LCAweGZmLCAweDIwLCAweDcxLCAweDIzLCAweDViLCAweDAxLAotMHhmOSwgMHgxOCwgMHgwMSwgMHgzMCwgMHgwOCwgMHg4MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOCwgMHgxOCwKLTB4ODAsIDB4OGIsIDB4NDEsIDB4MjMsIDB4MWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDksIDB4MjEsIDB4NDksIDB4MDIsCi0weDAxLCAweDQzLCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweGVlLCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4MDgsIDB4NDksIDB4Y2YsIDB4NmEsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NjksIDB4ZmEsIDB4YjgsIDB4MDUsCi0weDgwLCAweDBkLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LAotMHhhMSwgMHhmOSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4YzAsIDB4ODgsIDB4OWYsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDUsIDB4NDksCi0weGM5LCAweDZhLCAweDFiLCAweDIzLCAweDViLCAweDAxLCAweDE5LCAweDQwLCAweDA4LCAweDQzLCAweDAzLCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGQsIDB4NDksIDB4MGYsIDB4NmEsCi0weDAxLCAweDJmLCAweDAxLCAweGQxLCAweGZmLCAweDAzLCAweDA3LCAweGUwLCAweDAyLCAweDJmLCAweDAxLCAweGQxLAotMHgzZiwgMHgwMywgMHgwMywgMHhlMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyNywgMHhmZiwgMHgwMiwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4MzUsIDB4ZmEsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZmLCAweGY3LCAweDZmLCAweGY5LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHgxNCwgMHg0MCwgMHhjMiwgMHg4OCwgMHhhMSwgMHgyMCwKLTB4NDAsIDB4MDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDMsIDB4OWEsIDB4NDIsIDB4MDEsIDB4ZDEsCi0weDAyLCAweDIyLCAweDA0LCAweGUwLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDlhLCAweDQyLCAweDAyLCAweGQxLAotMHgwMSwgMHgyMiwgMHgwMiwgMHg2MiwgMHgwMCwgMHhlMCwgMHgwMSwgMHg2MiwgMHgwOCwgMHgxYywgMHg3MCwgMHg0NywKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4OWYsIDB4ZjgsIDB4NjksIDB4NDYsCi0weDA0LCAweDFjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDBhLCAweGZhLCAweDAxLCAweGFiLCAweDVjLCAweDgwLAotMHgwOSwgMHg0ZiwgMHhmOCwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4NDAsIDB4ZjksIDB4ZjgsIDB4NmQsIDB4YzAsIDB4MDcsIDB4YzAsIDB4MGYsIDB4MDUsIDB4NDksCi0weGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDgwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHhlMywgMHhmOSwgMHgwNiwgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4MWIsIDB4ZjksIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ODcsIDB4NjgsCi0weGZmLCAweGY3LCAweGM2LCAweGY5LCAweDIwLCAweDJmLCAweDA3LCAweGQyLCAweDc4LCAweDAwLCAweDBjLCAweDQ5LAotMHg0MCwgMHgxOCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwNiwgMHhlMCwKLTB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsCi0weDAyLCAweDIwLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LAotMHhlZiwgMHhmOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzEsIDB4ODgsIDB4ODIsIDB4NjgsCi0weDIwLCAweDJhLCAweDA0LCAweGQyLCAweDEwLCAweDFjLCAweDAyLCAweGYwLCAweDE3LCAweGY4LCAweDAwLCAweDIwLAotMHgxMCwgMHhlMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg5YSwgMHhmOSwgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwKLTB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsCi0weDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDA0LCAweDMzLCAweGZmLCAweGY3LCAweGNkLCAweGY4LCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjNywgMHg4OCwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZjksIDB4MTAsIDB4NDgsIDB4ZmUsIDB4ZjcsIDB4NzIsIDB4ZmYsCi0weDAyLCAweDIwLCAweDM5LCAweDFjLCAweDAyLCAweGYwLCAweGYyLCAweGZmLCAweDAwLCAweDI4LCAweDA2LCAweGQwLAotMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgMHgwMiwgMHhmMCwgMHgzNiwgMHhmZiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwKLTB4MDIsIDB4ZTAsIDB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDcsIDB4NDksIDB4MjAsIDB4MWMsCi0weGZlLCAweGY3LCAweDVmLCAweGZmLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweGE4LCAweGY4LAotMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4YjAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weGM3LCAweDg4LCAweDY5LCAweDQ2LCAweDg0LCAweDY4LCAweGZmLCAweGY3LCAweDU3LCAweGY5LCAweDEwLCAweDQ4LAotMHhmZSwgMHhmNywgMHg0NiwgMHhmZiwgMHgwZiwgMHg0YSwgMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgMHhmZSwgMHhmNywKLTB4NDMsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDYsIDB4ZDAsIDB4MGQsIDB4NGIsIDB4MDIsIDB4MjAsIDB4MzksIDB4MWMsCi0weDIyLCAweDFjLCAweGZlLCAweGY3LCAweDNjLCAweGZmLCAweDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLAotMHgxOCwgMHg3MCwgMHgwOSwgMHg0OSwgMHgyOCwgMHgxYywgMHhmZSwgMHhmNywgMHgzMiwgMHhmZiwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4N2IsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4YjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweDU5LCAweGIxLCAweDIxLCAweDQwLAotMHg1OSwgMHhiMCwgMHgyMSwgMHg0MCwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywKLTB4NDMsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjQsCi0weGMyLCAweDg4LCAweDE5LCAweDRiLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDAwLCAweDJhLCAweDAzLCAweGQxLAotMHgxOCwgMHg2YiwgMHgxMCwgMHgyMywgMHg5OCwgMHg0MywgMHgwNCwgMHhlMCwgMHgwMSwgMHgyYSwgMHgwNCwgMHhkMSwKLTB4MTgsIDB4NmIsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NDgsIDB4NjEsIDB4MWYsIDB4ZTAsIDB4MDIsIDB4MmEsCi0weDFkLCAweGQxLCAweGMyLCAweDY4LCAweDg3LCAweDY4LCAweDAwLCAweDIwLCAweDNiLCAweDFjLCAweGMzLCAweDQwLAotMHhkYiwgMHgwNywgMHhkYiwgMHgwZiwgMHg5YiwgMHgwMiwgMHgwMywgMHg0MywgMHgwYiwgMHg2MSwgMHgwMSwgMHgzMCwKLTB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MjAsIDB4MjgsIDB4ZjMsIDB4ZGIsIDB4MDAsIDB4MjAsIDB4MTMsIDB4MWMsCi0weGMzLCAweDQwLCAweGRiLCAweDA3LCAweGRiLCAweDBmLCAweDliLCAweDAyLCAweGM3LCAweDFkLCAweDE5LCAweDM3LAotMHgzYiwgMHg0MywgMHgwYiwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgyMCwgMHgyOCwKLTB4ZjEsIDB4ZGIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDgwLCAweGI0LCAweGMyLCAweDg4LCAweDgxLCAweDY4LCAweDEwLCAweDAyLCAweDEyLCAweDBhLCAweDEwLCAweDQzLAotMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwYywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MCwgMHgwYywgMHg0YiwKLTB4YzAsIDB4NDYsIDB4MWEsIDB4ODAsIDB4MGEsIDB4MGMsIDB4MTcsIDB4MDIsCi0weDEyLCAweDEyLCAweDNhLCAweDQzLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDQyLCAweDYwLCAweDVhLCAweDgwLAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwYSwgMHgwMiwgMHgwOSwgMHgwYSwgMHgxMSwgMHg0MywgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4ODEsIDB4NjAsIDB4OTksIDB4ODAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDQwLCAweDAwLCAweDE0LCAweDAwLCAweDI4LCAweDFiLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDg0LCAweGIwLAotMHgxMywgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMywgMHgwMiwgMHgxMiwgMHgxMiwKLTB4MTMsIDB4NDMsIDB4NGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MWYsIDB4MWMsIDB4MTMsIDB4MDIsCi0weDEyLCAweDEyLCAweDEzLCAweDQzLCAweDg5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDBhLCAweDAyLAotMHgwOSwgMHgxMiwgMHgxMSwgMHg0MywgMHgwYywgMHgwNCwgMHgyNCwgMHgwYywgMHg2OSwgMHg0NiwgMHgxZCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4YWUsIDB4ZjgsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsIDB4MjgsIDB4MDQsIDB4MjAsIDB4NDMsCi0weDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweGU1LCAweGZmLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzEsIDB4ODgsIDB4ODIsIDB4NjgsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDEwLCAweDBjLCAweDAzLCAweDAyLAotMHgwMCwgMHgxMiwgMHgxOCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHg2MSwgMHgxMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MGEsIDB4MTAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDQ4LCAweDYxLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDE0LCAweDAwLAotMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgxNiwgMHg0YiwgMHhkOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MGEsIDB4MDIsIDB4MDksIDB4MTIsIDB4MTEsIDB4NDMsIDB4MWEsIDB4NjksIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsCi0weDE3LCAweDAyLCAweDEyLCAweDEyLCAweDNhLCAweDQzLCAweDViLCAweDY5LCAweDFiLCAweDA0LCAweDFiLCAweDBjLAotMHgxZiwgMHgwMiwgMHgxYiwgMHgxMiwgMHgzYiwgMHg0MywgMHgxZiwgMHgwNCwgMHgzZiwgMHgwYywgMHgwNSwgMHgyMywKLTB4MDAsIDB4OTMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MWMsIDB4ODAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4M2IsCi0weDVjLCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGQ5LCAweDgwLCAweDEwLCAweDA0LAotMHgzOCwgMHg0MywgMHgwMiwgMHg5MCwgMHgwMywgMHg5NCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywKLTB4OTUsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweDAwLCAweDE0LCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDBiLCAweDQ5LCAweDhhLCAweDZhLAotMHgwNSwgMHgyMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHg4OCwgMHgwMSwgMHhhYiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgyMSwKLTB4MDQsIDB4M2IsIDB4NTksIDB4NzAsIDB4NDAsIDB4ODgsIDB4MDAsIDB4YWIsIDB4NTgsIDB4ODAsIDB4ZGEsIDB4ODAsCi0weDAyLCAweDkxLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweGZlLCAweGY3LCAweDc5LCAweGZmLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weGMwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDBiLCAweDQ5LCAweDBhLCAweDZhLAotMHgwNSwgMHgyMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHg4OCwgMHgwMSwgMHhhYiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgyMSwKLTB4MDQsIDB4M2IsIDB4NTksIDB4NzAsIDB4NDAsIDB4ODgsIDB4MDAsIDB4YWIsIDB4NTgsIDB4ODAsIDB4ZGEsIDB4ODAsCi0weDAyLCAweDkxLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweGZlLCAweGY3LCAweDU1LCAweGZmLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weGMwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGZlLCAweGY3LAotMHhmNCwgMHhmZCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3NSwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZjcsIDB4ZmYsIDB4MDYsIDB4NDgsCi0weDAwLCAweDZiLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LAotMHgyZiwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGY4LCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmMywgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTAsIDB4NDgsIDB4ZmUsIDB4ZjcsIDB4YzYsIDB4ZmQsCi0weDAxLCAweDIwLCAweDQwLCAweDAyLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIxLAotMHgwYywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg3MSwgMHgwYywgMHg0OCwgMHgwMiwgMHg2OCwgMHg1MiwgMHgwYywKLTB4MDUsIDB4ZDIsIDB4MDIsIDB4NjgsIDB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsCi0weDAzLCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LCAweGM3LCAweDYwLCAweDAyLCAweGUwLCAweDA3LCAweDQ4LAotMHhjMCwgMHg0NiwgMHgwNywgMHg2NCwgMHgwOCwgMHgxYywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ZDUsIDB4OTQsIDB4MjEsIDB4NDAsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIwLAotMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MiwgMHgxMiwgMHgyMCwgMHhmZiwgMHhmNywgMHhjYiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjAsCi0weDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcyLCAweDE1LCAweDIwLCAweGZmLCAweGY3LCAweGJmLCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHhmMCwKLTB4ZjksIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDA3LCAweDFjLCAweGY4LCAweDg4LCAweDAyLCAweGYwLCAweGZlLCAweGY4LCAweDAwLCAweDI4LCAweDBjLCAweGQxLAotMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHg4MiwgMHhmZiwgMHgwNiwgMHg0OCwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4MjAsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywKLTB4NmQsIDB4ZmYsIDB4MDEsIDB4MjcsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsIDB4MDksIDB4NDgsIDB4ODEsIDB4ODksCi0weDA5LCAweDA0LCAweGMyLCAweDg5LCAweDExLCAweDQzLCAweDAyLCAweDkxLCAweDgxLCAweDg4LCAweDA5LCAweDA0LAotMHhjMCwgMHg4OCwgMHgwOCwgMHg0MywgMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywKLTB4OWIsIDB4ZmUsIDB4MzgsIDB4MWMsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDY5LCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg2NCwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NWYsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weGZlLCAweGY3LCAweDVhLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHg1NSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg1MCwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NGIsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDQ2LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0MSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4ZmUsIDB4ZjcsIDB4M2MsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCi0weDM3LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDMyLCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHg4YywgMHhiMCwgMHgwOCwgMHhhOSwgMHhmZSwgMHhmNywKLTB4MTMsIDB4ZmYsIDB4NjksIDB4NDYsIDB4MDgsIDB4YTgsIDB4MDIsIDB4ZjAsIDB4YTksIDB4ZmYsIDB4MDIsIDB4MjAsCi0weDA4LCAweGFiLCAweDU4LCAweDcwLCAweDY5LCAweDQ2LCAweDA4LCAweGE4LCAweGZlLCAweGY3LCAweDQ4LCAweGZlLAotMHgwMSwgMHgyMCwgMHgwYywgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4MTksIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsCi0weDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweGY4LCAweGZlLCAweGZhLCAweDg4LCAweDEyLCAweDQ5LAotMHgwMSwgMHgyNCwgMHhjOCwgMHgxZCwgMHg4OSwgMHgzMCwgMHgwMCwgMHgyYSwgMHgwZiwgMHhkMCwgMHgwNCwgMHg3MCwKLTB4NDQsIDB4NzAsIDB4YjgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MzEsIDB4YzgsIDB4ODIsIDB4YjgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA4LCAweDgzLCAweGY4LCAweDY4LCAweDAwLCAweDBjLCAweDQ4LCAweDgzLCAweGY4LCAweDY4LAotMHhjMCwgMHg0NiwgMHg4OCwgMHg4MywgMHgwMiwgMHhlMCwgMHgwMCwgMHgyMSwKLTB4MDEsIDB4NzAsIDB4NDEsIDB4NzAsIDB4MDYsIDB4NDgsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZlLCAweGY3LCAweDE3LCAweGZlLCAweDIwLCAweDFjLCAweDA0LCAweGIwLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZTMsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weGZlLCAweGY3LCAweGRlLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHhkOSwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhkNCwgMHhmZSwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4Y2YsIDB4ZmUsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLAotMHhmZSwgMHhmNywgMHhhZSwgMHhmZSwgMHhmOCwgMHg4OCwgMHgwMywgMHgyNCwgMHhlNCwgMHgwNCwgMHgwNCwgMHg0MywKLTB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4OWMsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4MGYsIDB4NGIsIDB4OWMsIDB4NDIsCi0weDA2LCAweGQ5LCAweDBmLCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZSwgMHhmNywgMHhkYywgMHhmZCwgMHgwMSwgMHgyMCwgMHg4MCwgMHgwNywgMHgyMCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4YWIsIDB4NTksIDB4NzAsIDB4ZmEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4ODAsCi0weDAyLCAweDkwLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweDA0LCAweDMzLCAweGZlLCAweGY3LCAweGNjLCAweGZkLAotMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweDdiLCAweGZlLCAweGY4LCAweDg4LAotMHgwMywgMHgyMywgMHhkYiwgMHgwNCwgMHgxOCwgMHg0MywgMHg5OCwgMHg0MiwgMHgwMiwgMHhkMywgMHgwYSwgMHg0YiwKLTB4OTgsIDB4NDIsIDB4MDgsIDB4ZDksIDB4MDksIDB4NDgsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZlLCAweGY3LCAweGFiLCAweGZkLCAweDAxLCAweDIwLCAweDAzLCAweGUwLCAweGI5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg2MCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDgwLCAweGI1LCAweDg2LCAweGIwLCAweDAyLCAweGE5LCAweGZlLCAweGY3LCAweDU3LCAweGZlLCAweDAxLCAweDI3LAotMHgwMiwgMHhhYiwgMHg1ZiwgMHg3MCwgMHgwMCwgMHgyMCwgMHhkOCwgMHg4MCwgMHgwYSwgMHg0OCwgMHg0MSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDQsIDB4OTEsIDB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTEsIDB4YzEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQwLCAweDY5LCAweGMwLCAweDQ2LCAweDAxLCAweDkwLCAweDY5LCAweDQ2LAotMHgwMiwgMHhhOCwgMHhmZSwgMHhmNywgMHg4MSwgMHhmZCwgMHgzOCwgMHgxYywgMHgwNiwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MTksIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4YzEsIDB4NjgsCi0weDgwLCAweDY4LCAweGZlLCAweGY3LCAweDQ3LCAweGZiLCAweDAwLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywKLTB4NjgsIDB4NDYsIDB4NTAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MzYsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsCi0weDAyLCAweDk3LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDYxLCAweGZkLCAweDA0LCAweGIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywKLTB4NjgsIDB4NDYsIDB4NTEsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MjQsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsCi0weDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDUwLCAweGZkLCAweDA0LCAweGIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MjcsIDB4MTIsIDB4NDksIDB4MDksIDB4NjgsIDB4MTIsIDB4NGEsCi0weDEyLCAweDZiLCAweDEwLCAweDIzLCAweDFhLCAweDQwLCAweDAxLCAweDI0LCAweDAwLCAweDJhLCAweDAwLCAweGQwLAotMHgwMSwgMHgyNywgMHg4YSwgMHgwYywgMHgwMywgMHhkMywgMHgzYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMiwgMHgyNywKLTB4MTcsIDB4NDMsIDB4YzksIDB4MGMsIDB4MDMsIDB4ZDMsIDB4MzksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDQsIDB4MjcsCi0weDBmLCAweDQzLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGVjLCAweGZkLCAweDAxLCAweGFiLCAweDVmLCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgyNiwgMHhmZCwgMHgyMCwgMHgxYywgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLAotMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhkNywgMHhmZCwgMHgwNiwgMHg0OCwgMHhjMCwgMHg2ZCwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MGYsIDB4ZmQsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhkZCwgMHhmZCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3MCwgMHg0NywKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhjYiwgMHhmZCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4YjUsIDB4ODUsIDB4YjAsIDB4MDEsIDB4YTksIDB4ZmUsIDB4ZjcsIDB4YWIsIDB4ZmQsIDB4MDAsIDB4MjAsCi0weDAxLCAweGFiLCAweDU4LCAweDcwLCAweDBjLCAweDQ5LCAweGM5LCAweDY4LCAweDAxLCAweDI3LCAweDAxLCAweDI5LAotMHgwMiwgMHhkMSwgMHgwMywgMHg5NywgMHgwNCwgMHg5NywgMHgwMSwgMHhlMCwgMHgwMywgMHg5NywgMHgwNCwgMHg5MCwKLTB4NjgsIDB4NDYsIDB4MDEsIDB4ZjAsIDB4MzMsIDB4ZmQsIDB4MDIsIDB4YWIsIDB4MDAsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDU4LCAweDgwLCAweDAwLCAweDIxLCAweDAxLCAweGE4LCAweGZlLCAweGY3LCAweGQzLCAweGZjLCAweDM4LCAweDFjLAotMHgwNSwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4NzAsIDB4NDcsIDB4MDQsIDB4NDksIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4NzAsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMxLCAweDY4LCAweDI4LCAweGZhLCAweGQzLCAweDcwLCAweDQ3LCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwMCwgMHgyMiwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMywgMHg0MCwgMHgxYSwgMHgwMSwgMHgzMiwgMHg4OCwgMHg0MiwKLTB4ZmIsIDB4ZDIsIDB4MTAsIDB4MWMsIDB4NzAsIDB4NDcsIDB4ODgsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4NDAsIDB4MWEsCi0weDg4LCAweDQyLCAweGZjLCAweGQyLCAweDcwLCAweDQ3LCAweDkwLCAweGI0LCAweDAxLCAweDFjLCAweGZmLCAweDI3LAotMHgwNCwgMHgyOSwgMHgyNywgMHhkYSwgMHgwMCwgMHgyMCwgMHgxNCwgMHg0YSwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwKLTB4ZGIsIDB4MDAsIDB4ZDQsIDB4NTgsIDB4NjMsIDB4MGMsIDB4MWEsIDB4ZDIsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsCi0weGM5LCAweDAwLCAweDU3LCAweDU4LCAweDQzLCAweDAwLCAweDFiLCAweDE4LCAweGRiLCAweDAwLCAweGQ3LCAweDUwLAotMHg4OSwgMHgxOCwgMHg5YSwgMHgxOCwgMHg0ZiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg1NywgMHg2MCwgMHg4YiwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4OTMsIDB4NjAsIDB4MGIsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjEsIDB4NGIsIDB4NjksCi0weGMwLCAweDQ2LCAweDUzLCAweDYxLCAweGM5LCAweDY4LCAweGMwLCAweDQ2LCAweGQxLCAweDYwLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNCwgMHgyOCwgMHhkOSwgMHhkYiwKLTB4MzgsIDB4MWMsIDB4ZjYsIDB4ZTcsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ZjcsIDB4YjUsIDB4YzQsIDB4YjAsCi0weDA0LCAweDFjLCAweDAwLCAweDIwLCAweDQ2LCAweDlhLCAweDExLCAweDIxLCAweDExLCAweDQwLCAweDZlLCAweGQwLAotMHgwMCwgMHgyNywgMHg3OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHhjOSwgMHgwMCwgMHg1NywgMHg0YSwgMHg1MSwgMHg1OCwKLTB4NDksIDB4MGMsIDB4MDMsIDB4ZDIsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDQsIDB4ZTAsCi0weDc5LCAweDFjLCAweDBmLCAweDA2LCAweDNmLCAweDBlLCAweDA0LCAweDJmLCAweGVmLCAweGRiLCAweDAwLCAweDI4LAotMHg1YiwgMHhkMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHg0MCwgMHgyMywgMHgwMCwgMHgyMSwKLTB4MDAsIDB4MjAsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4ODgsIDB4ZmEsIDB4MDQsIDB4YTksIDB4MDAsIDB4MjAsCi0weDgyLCAweDAwLCAweDhhLCAweDU4LCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweGEyLCAweDQyLCAweDAzLCAweGQxLAotMHg3MiwgMHgxYywgMHgxNiwgMHgwNiwgMHgzNiwgMHgwZSwgMHgwNCwgMHhlMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsIDB4ZjAsIDB4ZGIsIDB4MDAsIDB4MmUsIDB4M2QsIDB4ZDAsIDB4MDQsIDB4MmMsCi0weDNlLCAweGQxLCAweDgwLCAweDAwLCAweDA4LCAweDU4LCAweDQwLCAweDAxLCAweDgwLCAweDBkLCAweDAwLCAweDIyLAotMHgwMCwgMHg5MiwgMHgxMCwgMHgyMywgMHgwMCwgMHgyMSwgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg2OCwgMHhmYSwKLTB4MDAsIDB4MjEsIDB4MDEsIDB4OTEsIDB4MDIsIDB4YTgsIDB4MDUsIDB4OTksIDB4NDksIDB4MGMsIDB4ODksIDB4MDUsCi0weDI5LCAweGQwLCAweGMxLCAweDY4LCAweDBhLCAweDA2LCAweDEyLCAweDBlLCAweDQ1LCAweDliLCAweDlhLCAweDQyLAotMHgxMSwgMHhkMSwgMHhjMCwgMHg2OCwgMHg0MCwgMHgwMSwgMHg4NiwgMHgwZCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwKLTB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MzAsIDB4MWMsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4NTAsIDB4ZmEsCi0weDAxLCAweDk5LCAweDAyLCAweDlkLCAweDQ4LCAweDFjLCAweDAxLCAweDA2LAotMHgwOSwgMHgwZSwgMHgwMSwgMHg5MSwgMHgwZSwgMHhlMCwgMHg0OCwgMHgwMSwgMHg4NiwgMHgwZCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4OTIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MzAsIDB4MWMsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsCi0weDNmLCAweGZhLCAweDAyLCAweGE4LCAweDA1LCAweDk5LCAweDQ5LCAweDBjLCAweDg5LCAweDA1LCAweGQ4LCAweGQxLAotMHgwMSwgMHg5OSwgMHgwMCwgMHgyOSwgMHgwZiwgMHhkMSwgMHhmZiwgMHgyMCwgMHgzZCwgMHhlMCwgMHg0MCwgMHhlMCwKLTB4ODAsIDB4MDAsIDB4MDgsIDB4NTgsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDI4LCAweGZhLAotMHgwMiwgMHg5ZCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNCwgMHg0NiwgMHg5YSwgMHgxMCwgMHg0MywgMHg3OSwgMHgwMCwKLTB4YzksIDB4MTksIDB4YzksIDB4MDAsIDB4MTcsIDB4NGEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NTAsIDB4MzAsIDB4MWMsCi0weDhlLCAweDE4LCAweDcwLCAweDYwLCAweDEwLCAweDIwLCAweDA0LCAweDJjLCAweDAwLCAweGQwLCAweDBjLCAweDIwLAotMHgwNCwgMHgxYywgMHhiMCwgMHg2MCwgMHgwMCwgMHgyMCwgMHgyMCwgMHgyMSwgMHg0NiwgMHg5YSwgMHgxMSwgMHg0MCwKLTB4MjAsIDB4MjksIDB4MDAsIDB4ZDAsIDB4MjgsIDB4MWMsIDB4MzAsIDB4NjEsIDB4MjgsIDB4MTksIDB4ZmYsIDB4MjEsCi0weGZmLCAweDMwLCAweDA4LCAweDMwLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweDE5LCAweGZmLCAweDQzLCAweDAxLAotMHgxOCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg3MCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg1MCwgMHgyMSwKLTB4NDYsIDB4OWEsIDB4MTEsIDB4NDAsIDB4NTAsIDB4MjksIDB4MDAsIDB4ZDEsIDB4MjgsIDB4MWMsIDB4ZjAsIDB4NjAsCi0weDM4LCAweDFjLCAweDQ3LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGZmLCAweDIwLAotMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHg4MCwgMHhiNCwgMHgwMCwgMHgyMywKLTB4MDAsIDB4MjIsIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDksIDB4ODcsIDB4NWMsIDB4N2IsIDB4NDAsIDB4MWIsIDB4MDYsCi0weDFiLCAweDBlLCAweDAxLCAweDMyLCAweDhhLCAweDQyLCAweGY4LCAweGQzLCAweGQ4LCAweDQzLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNCwgMHgyOCwKLTB4MDcsIDB4ZGEsIDB4NDEsIDB4MDAsIDB4MDksIDB4MTgsIDB4YzksIDB4MDAsIDB4NDUsIDB4OTEsIDB4NDEsIDB4NGEsCi0weDUxLCAweDU4LCAweDRiLCAweDBjLCAweDAyLCAweGQyLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweDc2LCAweGUwLAotMHgwMSwgMHgyMywgMHg1YiwgMHgwNCwgMHgxOSwgMHg0MCwgMHg0MywgMHgwMCwgMHgxOCwgMHgxOCwgMHhjMCwgMHgwMCwKLTB4M2EsIDB4NGEsIDB4MTQsIDB4MTgsIDB4MDAsIDB4MjksIDB4NjEsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDIsIDB4OTEsCi0weDIwLCAweDY5LCAweGExLCAweDY4LCAweDQ1LCAweDE4LCAweDMwLCAweGQwLCAweGZmLCAweDIxLCAweDY4LCAweDFlLAotMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhjZCwgMHhmZSwgMHg2MSwgMHg2OCwgMHg0MCwgMHgxOCwgMHgwMSwgMHg5MCwKLTB4MDEsIDB4OTgsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4YTYsIDB4NjgsIDB4YWYsIDB4MWIsIDB4MDksIDB4ZTAsCi0weDAwLCAweDI2LCAweGZmLCAweDIxLCAweDI4LCAweDFjLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGM3LCAweGZlLAotMHgwNywgMHgxYywgMHgwMSwgMHhkMSwgMHhmZiwgMHgyNywgMHgwOSwgMHgzNywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwKLTB4MDEsIDB4OTgsIDB4MzEsIDB4MWMsIDB4MDMsIDB4YWEsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OWUsIDB4ZjksCi0weDAzLCAweGE4LCAweDM5LCAweDFjLCAweGZmLCAweGY3LCAweGFjLCAweGZmLCAweGMwLCAweDQzLCAweDAyLCAweDk5LAotMHg0OCwgMHg0MCwgMHgwMSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwMiwgMHg5MSwgMHhlZCwgMHgxYiwgMHhhMCwgMHg2OCwKLTB4YTgsIDB4NDIsIDB4MDAsIDB4ZDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MmQsIDB4Y2UsIDB4ZDgsIDB4MDIsIDB4OTksCi0weGNmLCAweDQzLCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDBjLCAweDIzLCAweDAwLCAweDIxLCAweDYwLCAweDY4LAotMHgwMywgMHhhYSwgMHgwMCwgMHhmMCwgMHg4MywgMHhmOSwgMHgyMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwKLTB4MDUsIDB4OTgsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MzksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsCi0weDA1LCAweDkwLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDk4LCAweDQzLCAweDA1LCAweDkwLCAweDBjLCAweDIxLAotMHgwMywgMHhhOCwgMHhmZiwgMHhmNywgMHg4MywgMHhmZiwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgwNSwgMHg5OSwKLTB4OTksIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDIsIDB4MDgsIDB4NDMsIDB4MDUsIDB4OTAsCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDYwLCAweDY4LCAweDAzLCAweGFhLCAweDAwLCAweGYwLCAweGNhLCAweGY5LAotMHgwMCwgMHgyMCwgMHg0NSwgMHg5OSwgMHgwNiwgMHg0YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg1MCwgMHhjMSwgMHg0MywKLTB4NjEsIDB4NjAsIDB4YTEsIDB4NjAsIDB4ZTEsIDB4NjAsIDB4MjEsIDB4NjEsIDB4NjEsIDB4NjEsIDB4NDYsIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLAotMHhiMCwgMHhiNCwgMHg0YywgMHg0MiwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkYiwKLTB4MGMsIDB4MWMsIDB4MDAsIDB4MjcsIDB4ZmYsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MjEsIDB4ZGEsIDB4MTIsIDB4NGQsCi0weDQzLCAweDAwLCAweDE4LCAweDE4LCAweGMwLCAweDAwLCAweDQwLCAweDE5LCAweDAxLCAweDJhLCAweDA1LCAweGQwLAotMHgwMiwgMHgyYSwgMHgwOSwgMHhkMCwgMHgwMywgMHgyYSwgMHgxNiwgMHhkMSwgMHgwMSwgMHg2OSwgMHgwYiwgMHhlMCwKLTB4MDAsIDB4MjksIDB4MTIsIDB4ZGIsIDB4MDIsIDB4NjksIDB4OGEsIDB4NDIsIDB4MGYsIDB4ZDMsIDB4MDUsIDB4ZTAsCi0weDAwLCAweDI5LCAweDA3LCAweGRhLCAweGMxLCAweDY4LCAweGExLCAweDQyLCAweDA5LCAweGQzLCAweDA5LCAweDFiLAotMHhjMSwgMHg2MCwgMHhjMCwgMHg2OCwgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHhjMSwgMHg2OCwgMHgwOSwgMHgxOSwKLTB4MDIsIDB4NjksIDB4OTEsIDB4NDIsIDB4ZjYsIDB4ZDksIDB4MzgsIDB4MWMsIDB4ZjYsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDQwLCAweGFiLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDE3LCAweDFjLCAweDBkLCAweDFjLAotMHgwMCwgMHgyMSwgMHgwMiwgMHg5MSwgMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwgMHhkMiwgMHgwMCwgMHgyYywgMHg0OSwKLTB4OGIsIDB4NTgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4MDEsIDB4OTMsIDB4MDAsIDB4MjMsIDB4ZGIsIDB4NDMsCi0weDA0LCAweDI4LCAweDAyLCAweGRhLCAweDAxLCAweDk4LCAweDQwLCAweDA4LCAweDAxLCAweGQyLCAweDE4LCAweDFjLAotMHg0NiwgMHhlMCwgMHg1NCwgMHgxOCwgMHhlMCwgMHg2OCwgMHhjMiwgMHgxOSwgMHgyMSwgMHg2OSwgMHg4YSwgMHg0MiwKLTB4MDAsIDB4ZDksIDB4MGYsIDB4MWEsIDB4MDAsIDB4MmYsIDB4M2MsIDB4ZDksIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsCi0weDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweDBkLCAweGZlLCAweDYxLCAweDY4LAotMHg0NiwgMHgxOCwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwKLTB4ZmYsIDB4ZjcsIDB4MGQsIDB4ZmUsIDB4YzIsIDB4MTksIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsIDB4OGEsIDB4NDIsCi0weDE0LCAweGQ5LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDBiLCAweDFhLCAweDAzLCAweDkzLAotMHgwMSwgMHgxYywgMHgzMCwgMHgxYywgMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwgMHhlMSwgMHhmOCwgMHhlMCwgMHg2OCwKLTB4MDMsIDB4OWIsIDB4YzAsIDB4MTgsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4OWIsIDB4NWQsIDB4MTksIDB4ZmYsIDB4MWEsCi0weDAyLCAweDk4LCAweDE4LCAweDE4LCAweDAyLCAweDkwLCAweDEwLCAweGUwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHgwMSwgMHgxYywgMHgzMCwgMHgxYywgMHgyYSwgMHgxYywgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwKLTB4Y2QsIDB4ZjgsIDB4ZTAsIDB4NjgsIDB4YzAsIDB4MTksIDB4ZWQsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MDIsIDB4OTgsCi0weGMwLCAweDE5LCAweDAyLCAweDkwLCAweDAwLCAweDI3LCAweDAwLCAweDJmLCAweGMyLCAweGQ4LCAweDAyLCAweDk4LAotMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsIDB4MTcsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4OTEsCi0weDQyLCAweDAwLCAweDEyLCAweDE4LCAweGQyLCAweDAwLCAweDAyLCAweDkyLCAweDMwLCAweDQ5LCAweDhhLCAweDU4LAotMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgwMCwgMHgyNCwgMHhlNCwgMHg0MywgMHgwNCwgMHgyOCwgMHgwMSwgMHhkYSwKLTB4NTAsIDB4MDksIDB4MDEsIDB4ZDIsIDB4MjAsIDB4MWMsIDB4NTEsIDB4ZTAsIDB4MDIsIDB4OWEsIDB4NTQsIDB4MTgsCi0weGUwLCAweDY4LCAweGMyLCAweDE5LCAweDYwLCAweDY5LCAweDgyLCAweDQyLCAweDAxLCAweGQ5LCAweDIyLCAweDY5LAotMHg4NywgMHgxYSwgMHgwMCwgMHgyZiwgMHg0NSwgMHhkOSwgMHgyNSwgMHg0ZSwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwKLTB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YTcsIDB4ZmQsIDB4NjEsIDB4NjgsCi0weDQwLCAweDE4LCAweDAwLCAweDkwLCAweGEwLCAweDY4LCAweGUxLCAweDY4LCAweDQwLCAweDE4LCAweGZmLCAweDIxLAotMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhhNiwgMHhmZCwgMHgwMiwgMHg5YSwgMHhiMSwgMHg1OCwgMHgwMSwgMHgyMywKLTB4NWIsIDB4MDQsIDB4MTksIDB4NDMsIDB4YjEsIDB4NTAsIDB4YzEsIDB4MTksIDB4ZmYsIDB4MjIsIDB4MDksIDB4MzIsCi0weDkxLCAweDQyLCAweDEzLCAweGQ5LCAweDEzLCAweDFhLCAweDAxLCAweDFjLCAweDAwLCAweDk4LCAweDJhLCAweDFjLAotMHgxZSwgMHgxYywgMHgwMCwgMHhmMCwgMHhkZiwgMHhmOCwgMHhlMCwgMHg2OCwgMHg4MCwgMHgxOSwgMHg3NSwgMHgxOSwKLTB4ZTAsIDB4NjAsIDB4MjEsIDB4NjksIDB4ODgsIDB4NDIsIDB4MDAsIDB4ZDksIDB4MjAsIDB4NjEsIDB4YmYsIDB4MWIsCi0weDAxLCAweDk4LCAweDMwLCAweDE4LCAweDAxLCAweDkwLCAweDEyLCAweGUwLCAweDAxLCAweDFjLCAweDAwLCAweDllLAotMHgzMCwgMHgxYywgMHgyYSwgMHgxYywgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHhjYiwgMHhmOCwgMHhlMCwgMHg2OCwKLTB4YzAsIDB4MTksIDB4ZWQsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MjEsIDB4NjksIDB4ODgsIDB4NDIsIDB4MDAsIDB4ZDksCi0weDIwLCAweDYxLCAweDAxLCAweDk4LCAweGMwLCAweDE5LCAweDAxLCAweDkwLCAweDAwLCAweDI3LCAweDAwLCAweDJmLAotMHhiOSwgMHhkOCwgMHgwMSwgMHg5OCwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4YjAsIDB4YjUsIDB4YzMsIDB4YjAsCi0weDBjLCAweDFjLCAweDAwLCAweDI3LCAweGZhLCAweDQzLCAweDA0LCAweDI4LCAweDA2LCAweGRhLCAweDQxLCAweDAwLAotMHgwOSwgMHgxOCwgMHhjOSwgMHgwMCwgMHgxNCwgMHg0OCwgMHg0NSwgMHg1OCwgMHg2YiwgMHgwYywgMHgwNCwgMHhkMiwKLTB4MTAsIDB4MWMsIDB4NDMsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjIsIDB4MDksCi0weDFiLCAweGQzLCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDA4LCAweDE4LCAweDQwLCAweDY4LCAweDBjLCAweDIzLAotMHgwMCwgMHgyMSwgMHgwMSwgMHhhYSwgMHgwMCwgMHhmMCwgMHgzMCwgMHhmOCwgMHgxMSwgMHgyYywgMHgwZCwgMHhkMCwKLTB4MTIsIDB4MmMsIDB4MGQsIDB4ZDAsIDB4MTMsIDB4MmMsIDB4MDUsIDB4ZDAsIDB4MTQsIDB4MmMsIDB4MGEsIDB4ZDEsCi0weDAzLCAweDk4LCAweDAwLCAweDA0LCAweDA3LCAweDBlLCAweDA2LCAweGUwLCAweDAzLCAweDk4LCAweDA3LCAweDA2LAotMHgzZiwgMHgwZSwgMHgwMiwgMHhlMCwgMHgwMSwgMHg5ZiwgMHgwMCwgMHhlMCwgMHgwMiwgMHg5ZiwgMHgzOCwgMHgxYywKLTB4ZGIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MDMsIDB4NDksIDB4MDAsIDB4MjAsCi0weDAwLCAweDIyLCAweDBhLCAweDU0LCAweDAxLCAweDMwLCAweDYwLCAweDI4LCAweGZiLCAweGQzLCAweDcwLCAweDQ3LAotMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHgwMiwgMHhmMCwgMHg2ZiwgMHhmYSwgMHg1NywgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4Y2MsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ZjksIDB4MDAsIDB4MGEsIDB4ZmIsIDB4ZDMsCi0weDAyLCAweGYwLCAweDRlLCAweGZhLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI1LCAweDgyLCAweGIwLAotMHgwNywgMHg5ZCwgMHgxNCwgMHgxYywgMHgxZiwgMHgxYywgMHgzMCwgMHg0YSwgMHhkMiwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MTYsIDB4NjgsIDB4OWUsIDB4NDMsIDB4MTYsIDB4NjAsIDB4MzMsIDB4MWMsIDB4ZmYsIDB4MjIsIDB4MDEsIDB4MzIsCi0weDJhLCAweDQwLCAweDQwLCAweDAyLCAweDA4LCAweDQzLCAweDA1LCAweDBhLCAweDA2LCAweDFjLCAweDAwLCAweDBjLAotMHgwMSwgMHg5MCwgMHgwMCwgMHgyYSwgMHgyMCwgMHhkMCwgMHgwMiwgMHhmMCwgMHg0YiwgMHhmYSwgMHg1MywgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4YTgsIDB4ZjksIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4MDIsIDB4ZjAsCi0weGEzLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweGEwLCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLAotMHg5ZCwgMHhmOSwgMHgwMiwgMHhmMCwgMHgyMywgMHhmYSwgMHhmZiwgMHhmNywgMHhjNywgMHhmZiwgMHgwMiwgMHhmMCwKLTB4MzcsIDB4ZmEsIDB4NTQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4OTQsIDB4ZjksIDB4MDAsIDB4OTgsIDB4MDIsIDB4ZjAsCi0weDkxLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDhlLCAweGY5LCAweDMwLCAweDFjLCAweDE0LCAweGUwLAotMHgwMiwgMHhmMCwgMHgyYSwgMHhmYSwgMHg1MiwgMHgyMCwgMHgwMiwgMHhmMCwgMHg4NywgMHhmOSwgMHgwMSwgMHg5OCwKLTB4MDIsIDB4ZjAsIDB4ODQsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ODEsIDB4ZjksIDB4MzAsIDB4MWMsCi0weDAyLCAweGYwLCAweDdlLCAweGY5LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDdiLCAweGY5LCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHg3OCwgMHhmOSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3NSwgMHhmOSwgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4NzIsIDB4ZjksIDB4MDAsIDB4MmYsIDB4MDUsIDB4ZDksIDB4MDIsIDB4ZjAsIDB4ZTQsIDB4ZjgsCi0weDIwLCAweDcwLCAweDAxLCAweDM0LCAweDAxLCAweDNmLCAweGY5LCAweGQxLCAweDAyLCAweGYwLCAweGYwLCAweGY5LAotMHgwNCwgMHg0YSwgMHhkMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDgyLCAweGIwLCAweDE0LCAweDFjLCAweDFmLCAweDFjLCAweDQyLCAweDAyLCAweDBhLCAweDQzLAotMHgxNSwgMHgxYywgMHgwMSwgMHgyOCwgMHg1NCwgMHhkMCwgMHgyYywgMHg0OSwgMHhjOCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4YzgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAyLCAweGYwLCAweGU2LCAweGY5LCAweDUzLCAweDIwLCAweDAyLCAweGYwLAotMHg0MywgMHhmOSwgMHgyOCwgMHgwYywgMHgwNiwgMHgxYywgMHgwMiwgMHhmMCwgMHgzZiwgMHhmOSwgMHgyOCwgMHgwYSwKLTB4MDEsIDB4OTAsIDB4MDAsIDB4OTAsIDB4MDIsIDB4ZjAsIDB4M2EsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDM3LCAweGY5LCAweDAyLCAweGYwLCAweGJkLCAweGY5LCAweGZmLCAweGY3LCAweDYxLCAweGZmLCAweDAyLCAweGYwLAotMHhkMSwgMHhmOSwgMHg4NCwgMHgyMCwgMHgwMiwgMHhmMCwgMHgyZSwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4MmIsIDB4ZjksIDB4MDAsIDB4OTgsIDB4MDIsIDB4ZjAsIDB4MjgsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDI1LCAweGY5LCAweDAwLCAweDJmLCAweDA1LCAweGQ5LCAweDIwLCAweDc4LCAweDAxLCAweDM0LCAweDAyLCAweGYwLAotMHgxZiwgMHhmOSwgMHgwMSwgMHgzZiwgMHhmOSwgMHhkMSwgMHgwMiwgMHhmMCwgMHhhMywgMHhmOSwgMHgwMiwgMHhmMCwKLTB4YjksIDB4ZjksIDB4ODMsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MTYsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDEzLCAweGY5LCAweDAxLCAweDk4LCAweDAyLCAweGYwLCAweDEwLCAweGY5LAotMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHgwZCwgMHhmOSwgMHgwMiwgMHhmMCwgMHg5MywgMHhmOSwgMHhmZiwgMHhmNywKLTB4MzcsIDB4ZmYsIDB4MDcsIDB4NDksIDB4YzgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsCi0weDAyLCAweDYwLCAweGM4LCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4MDEsIDB4ZjAsIDB4OGYsIDB4ZjgsIDB4MDYsIDB4NGYsCi0weGMwLCAweDQ2LCAweGY4LCAweDYwLCAweDAxLCAweGYwLCAweGYyLCAweGY4LCAweDc4LCAweDgwLCAweDAxLCAweGYwLAotMHhiMSwgMHhmOCwgMHgzOCwgMHg3MSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4ZjAsIDB4MDUsIDB4ZjksIDB4MDIsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwYiwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgxMSwgMHhkMSwgMHhjMSwgMHg2ZiwgMHgwMiwgMHgyMywKLTB4MGEsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4YzEsIDB4NmYsIDB4ODAsIDB4MjMsIDB4MGEsIDB4NjgsCi0weDFhLCAweDQzLCAweDBhLCAweDYwLCAweGMxLCAweDE4LCAweDA4LCAweDY4LCAweDgyLCAweDIzLCAweDAyLCAweDY4LAotMHgxYSwgMHg0MywgMHgwMiwgMHg2MCwgMHgwMCwgMHgyMCwgMHgwOCwgMHg4MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4NGEsIDB4NDksIDB4Y2EsIDB4MWQsIDB4OWQsIDB4MzIsCi0weDAwLCAweDIwLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweGQ3LCAweDUwLCAweDAxLCAweDMwLCAweDE3LCAweDI4LAotMHhmYSwgMHhkMywgMHg0NiwgMHg0YywgMHgwMCwgMHgyMCwgMHg4MiwgMHgwMCwgMHhhNywgMHg1MCwgMHgwMSwgMHgzMCwKLTB4MjAsIDB4MjgsIDB4ZmEsIDB4ZDMsIDB4NDMsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ODMsIDB4MDAsIDB4ZDcsIDB4NTAsCi0weDAxLCAweDMwLCAweDIwLCAweDI4LCAweGZhLCAweGQzLCAweGE3LCAweDYxLCAweDk3LCAweDYxLCAweDRmLCAweDY1LAotMHg4ZiwgMHg2NSwgMHgzZiwgMHg0ZCwgMHhjMCwgMHg0NiwgMHgyZiwgMHg2MCwgMHg2ZiwgMHg2MCwgMHhhZiwgMHg2MCwKLTB4YWYsIDB4NjEsIDB4ZWYsIDB4NjAsIDB4MmYsIDB4NjEsIDB4NmYsIDB4NjEsIDB4MDAsIDB4MjAsIDB4YzEsIDB4MDAsCi0weDA5LCAweDE4LCAweDQ5LCAweDAxLCAweDM1LCAweDRiLCAweGM5LCAweDE4LCAweDg2LCAweDAwLCAweGNiLCAweDFkLAotMHhmOSwgMHgzMywgMHgzNCwgMHg0YywgMHgzNCwgMHgxOSwgMHhlMywgMHg2MywgMHgxMSwgMHgyMywgMHg1YiwgMHgwMSwKLTB4Y2IsIDB4MTgsIDB4NjMsIDB4NjMsIDB4MGQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2IsIDB4MTgsIDB4YjQsIDB4MTgsCi0weGUzLCAweDYzLCAweDIzLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDYxLCAweDYzLCAweDAxLCAweDMwLAotMHgwMiwgMHgyOCwgMHhlNCwgMHhkYiwgMHgyOSwgMHg0OCwgMHhjMSwgMHgxZCwgMHhmOSwgMHgzMSwgMHgyOSwgMHg0YywKLTB4YzAsIDB4NDYsIDB4YTEsIDB4NjIsIDB4NjEsIDB4NmIsIDB4MGQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZTEsIDB4NjIsCi0weGMxLCAweDE4LCAweDkxLCAweDYyLCAweDUxLCAweDZiLCAweGMwLCAweDQ2LCAweGQxLCAweDYyLCAweDA4LCAweDIxLAotMHhlMSwgMHg2NCwgMHgyNSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgyMSwgMHg2NSwgMHgyNCwgMHg0OSwgMHgwYiwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4NjMsIDB4NjUsIDB4YzMsIDB4MWQsIDB4NGQsIDB4MzMsIDB4ZTMsIDB4NjUsIDB4MjUsIDB4NjYsCi0weDhiLCAweDY4LCAweGMwLCAweDQ2LCAweDYzLCAweDY2LCAweGNiLCAweDY4LCAweGMwLCAweDQ2LCAweGEzLCAweDY2LAotMHgxZSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhlMywgMHg2NiwgMHgyNywgMHg2NywgMHgwYiwgMHgyMywgMHhkYiwgMHgwMSwKLTB4YzMsIDB4MTgsIDB4YTMsIDB4NjcsIDB4NjcsIDB4NjcsIDB4MDEsIDB4MjYsIDB4ZTMsIDB4MWQsIDB4NjksIDB4MzMsCi0weDY2LCAweDYxLCAweGU3LCAweDYxLCAweDFmLCAweDczLCAweDAyLCAweDIzLCAweGQzLCAweDY0LCAweDE3LCAweDRiLAotMHhjMCwgMHg0NiwgMHgxMywgMHg2NSwgMHhjYiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg1MywgMHg2NSwgMHhjMywgMHgxZCwKLTB4NTEsIDB4MzMsIDB4ZDMsIDB4NjUsIDB4MmIsIDB4MWQsIDB4MTMsIDB4NjYsIDB4NGIsIDB4NjksIDB4YzAsIDB4NDYsCi0weDUzLCAweDY2LCAweDg5LCAweDY5LCAweGMwLCAweDQ2LCAweDkxLCAweDY2LCAweDBmLCAweDQ5LCAweGMwLCAweDQ2LAotMHhkMSwgMHg2NiwgMHgxNiwgMHg2NywgMHgwZiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg5MCwgMHg2NywKLTB4NTYsIDB4NjcsIDB4ZDcsIDB4NjEsIDB4ZDAsIDB4MWQsIDB4NjksIDB4MzAsIDB4NTYsIDB4NjEsIDB4MDcsIDB4NzMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLAotMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHgzMCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4MDAsIDB4NTUsIDB4ZmYsIDB4ZmYsIDB4MzgsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDEwLCAweDU1LCAweGZmLCAweGZmLCAweDkwLCAweGI0LCAweDAwLCAweDIxLCAweDFlLCAweDRhLCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhkNywgMHgxOCwgMHhmOSwgMHg3MywgMHgxOSwgMHgyMywKLTB4ZGIsIDB4MDEsIDB4ZDAsIDB4MTgsIDB4MDEsIDB4MjQsIDB4Y2QsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZDMsIDB4MTgsCi0weGMxLCAweDYxLCAweDFjLCAweDcwLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQzLCAweDE4LCAweDk5LCAweDYwLAotMHhiOSwgMHg3MywgMHg1OSwgMHg2MSwgMHgyZiwgMHgyMywgMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHgxOSwgMHg2MCwKLTB4MTMsIDB4NGIsIDB4NTEsIDB4MjcsIDB4YmYsIDB4MDMsIDB4MDMsIDB4NjMsIDB4M2IsIDB4NjAsIDB4ODQsIDB4NjksCi0weGU0LCAweDE4LCAweDQ0LCAweDYzLCAweDA0LCAweDNjLCAweDdjLCAweDYwLCAweDAxLCAweDI0LCAweGU0LCAweDAyLAotMHg4NCwgMHg2MywgMHgwZSwgMHg0YywgMHhjMCwgMHg0NiwgMHhiYywgMHg2MCwgMHgwNCwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDQsIDB4NjIsIDB4ODQsIDB4NjksIDB4ZTQsIDB4MTgsIDB4MGIsIDB4NGIsIDB4ZTMsIDB4MTgsIDB4ZmIsIDB4NjAsCi0weDAzLCAweDZiLCAweGMwLCAweDQ2LCAweDgzLCAweDYyLCAweDQzLCAweDZhLCAweGMwLCAweDQ2LCAweDAzLCAweDYyLAotMHhjMSwgMHg2MywgMHg1MSwgMHg2NCwgMHg5MSwgMHg2NCwgMHhkMSwgMHg2NSwgMHhkMSwgMHg2NiwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0weGZjLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweGY3LCAweGZmLCAweGZmLCAweDkwLCAweGI0LCAweDAwLCAweDIyLAotMHgxYiwgMHg0OSwgMHhjOSwgMHgyMywgMHgxYiwgMHgwMSwgMHhjOCwgMHgxOCwgMHgwMiwgMHg3MSwgMHgwMSwgMHgyMCwKLTB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4Y2IsIDB4MTgsIDB4NTgsIDB4NzMsIDB4MTcsIDB4NDgsIDB4MDMsIDB4MWMsCi0weDAwLCAweDI3LCAweGRjLCAweDFkLCAweGMxLCAweDM0LCAweDFjLCAweDY1LCAweDIzLCAweDFjLCAweDAxLCAweDM3LAotMHgzZiwgMHgyZiwgMHhmOCwgMHhkMywgMHgxYSwgMHg2NSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjZiwgMHgxOCwKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2IsIDB4MTgsIDB4M2EsIDB4NjEsIDB4OTgsIDB4NjEsIDB4NDAsIDB4MjAsCi0weGY4LCAweDYwLCAweGRhLCAweDYxLCAweDFhLCAweDYyLCAweGNhLCAweDY0LCAweDBhLCAweDY2LCAweDBjLCAweDQ4LAotMHhjMCwgMHg0NiwgMHhjMiwgMHg2MCwgMHgwYiwgMHg0OCwgMHgwMCwgMHg2YiwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwKLTB4ZjgsIDB4NjMsIDB4MGEsIDB4NDgsIDB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTksIDB4ODAsIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDU5LCAweDgwLCAweDgwLCAweDY4LCAweGMwLCAweDQ2LCAweDk4LCAweDgwLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiYywgMHgyMCwgMHg0MCwKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDAwLCAweDIwLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDczLCAweGNiLCAweDFkLCAweGZmLCAweDMzLAotMHgzYSwgMHgzMywgMHg4OCwgMHg2MSwgMHhjOCwgMHg2MSwgMHgxOCwgMHg3MCwgMHgwNiwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MTAsIDB4NjUsIDB4NTAsIDB4NjYsIDB4OTAsIDB4NjYsIDB4MDgsIDB4NzAsIDB4NTgsIDB4NzAsIDB4YmIsIDB4MjMsCi0weDFiLCAweDAxLCAweGQxLCAweDE4LCAweDA4LCAweDczLCAweDcwLCAweDQ3LCAweDI4LCAweDA1LCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHgyZiwgMHg0OSwgMHgyZiwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MTEsIDB4NjEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4YzgsIDB4MTgsIDB4NTAsIDB4NjEsIDB4MmQsIDB4NDgsCi0weGMwLCAweDQ2LCAweDEwLCAweDYyLCAweGRiLCAweDAwLCAweGMzLCAweDE4LCAweDUzLCAweDYyLCAweDAwLCAweDIzLAotMHgxMywgMHg2MywgMHg1MywgMHg2MywgMHgyOSwgMHg0YSwgMHgyYSwgMHg0ZiwgMHhkNCwgMHgxZCwgMHhmZiwgMHgzNCwKLTB4ZmEsIDB4MzQsIDB4MTQsIDB4YzcsIDB4MDgsIDB4M2YsIDB4M2IsIDB4NjEsIDB4MWMsIDB4MWYsIDB4N2MsIDB4NjEsCi0weDI2LCAweDRmLCAweGMwLCAweDQ2LCAweDM5LCAweDYwLCAweGI4LCAweDYxLCAweDc5LCAweDYxLCAweGY4LCAweDYyLAotMHgzYiwgMHg2MywgMHg3YiwgMHg2NCwgMHhiYSwgMHg2NCwgMHhmYSwgMHg2NSwgMHgyMiwgMHg0ZiwgMHhmZSwgMHgxZCwKLTB4ZjksIDB4MzYsIDB4MjIsIDB4NGQsIDB4ZWMsIDB4MWQsIDB4NzksIDB4MzQsIDB4MjYsIDB4NjIsIDB4NTEsIDB4MjYsCi0weGI2LCAweDAzLCAweDM3LCAweDYxLCAweDI0LCAweDZhLCAweGMwLCAweDQ2LCAweDc0LCAweDYxLCAweDJmLCAweDY3LAotMHgxZCwgMHg0ZCwgMHgwOSwgMHgyNywgMHg3ZiwgMHgwNCwgMHhlYywgMHgxZCwgMHg3NSwgMHgzNCwgMHg3YywgMHg2MCwKLTB4M2QsIDB4NjAsIDB4MWIsIDB4NGMsIDB4YzAsIDB4NDYsIDB4M2MsIDB4NjEsIDB4ZTYsIDB4MWQsIDB4NzUsIDB4MzYsCi0weDdlLCAweDYxLCAweDE5LCAweDRmLCAweGMwLCAweDQ2LCAweDdjLCAweDYwLCAweDNkLCAweDYwLCAweDBmLCAweDFjLAotMHgwMCwgMHgyMSwgMHhmZiwgMHgyNCwgMHgwMSwgMHgzNCwgMHgxZCwgMHgxYywgMHg4YiwgMHgwMCwgMHhmZCwgMHg1MCwKLTB4MDEsIDB4MzEsIDB4YTEsIDB4NDIsIDB4ZmEsIDB4ZDMsIDB4MDEsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjcsCi0weGZmLCAweDAyLCAweDgzLCAweDAwLCAweGNkLCAweDUwLCAweDAxLCAweDMwLCAweGI4LCAweDQyLCAweGZhLCAweGQzLAotMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg1NSwgMHg1MCwgMHgwMSwgMHgzMCwgMHg4MCwgMHgyOCwgMHhmYSwgMHhkMywKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDI0LCAweDgzLCAweDIwLCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLAotMHg4MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsCi0weDA4LCAweDA0LCAweDAwLCAweDgwLCAweGI4LCAweGI1LCAweDJjLCAweDQ4LCAweGZkLCAweGY3LCAweGJhLCAweGZkLAotMHgwMSwgMHgyMCwgMHgyYiwgMHg0OSwgMHgwYSwgMHg2OCwgMHg1MiwgMHgwYywgMHgwNiwgMHhkMiwgMHgwYSwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MGEsIDB4NjgsIDB4OTIsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsCi0weDA0LCAweDA2LCAweDI0LCAweDBlLCAweDI1LCAweDRhLCAweGQ3LCAweDFkLCAweDBkLCAweDM3LCAweDAwLCAweDIzLAotMHgwMCwgMHgyMCwgMHg5ZCwgMHgwMCwgMHg3OCwgMHg1MSwgMHgwMSwgMHgzMywgMHgwNCwgMHgyYiwgMHhmYSwgMHhkMywKLTB4MDEsIDB4MjcsIDB4M2YsIDB4MDUsIDB4NTAsIDB4NjEsIDB4ZjgsIDB4NjAsIDB4ZDAsIDB4NjEsIDB4ZjgsIDB4NjEsCi0weDAwLCAweDIzLCAweGRiLCAweDQzLCAweDkzLCAweDYxLCAweDNiLCAweDYxLCAweDEzLCAweDYyLCAweDNiLCAweDYyLAotMHgwMCwgMHgyNywgMHgxYiwgMHg0YiwgMHg4ZCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHg4ZCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MmMsIDB4MGIsIDB4ZDAsIDB4ZGQsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDAwLCAweDk1LCAweDlkLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDVkLCAweDZiLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5NSwgMHgxZCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHgwMSwgMHgzNywgMHg0MCwgMHgyZiwKLTB4ZTgsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4NmMsIDB4NDYsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDcsIDB4MWMsIDB4NDMsCi0weDAxLCAweGUwLCAweDIwLCAweDYwLCAweDAxLCAweDM3LCAweDBkLCAweDY4LCAweDJiLCAweDA5LCAweDAyLCAweGQyLAotMHg4MCwgMHgyZiwgMHhmOCwgMHhkMywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyZiwgMHgwMywgMHhkMywgMHgwOCwgMHg0OSwKLTB4NGIsIDB4NmUsIDB4MDEsIDB4MzMsIDB4NGIsIDB4NjYsIDB4ZDAsIDB4NjIsIDB4YjgsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4MGUsIDB4NGYsIDB4MGYsIDB4NGEsIDB4MDAsIDB4MjAsIDB4NGMsIDB4MDEsCi0weDY0LCAweDFhLCAweGE0LCAweDAwLCAweGEzLCAweDE4LCAweDU4LCAweDYwLCAweDk4LCAweDYwLCAweDE4LCAweDY0LAotMHg1OCwgMHg2NCwgMHgxMCwgMHg1MywgMHg1OCwgMHg4MCwgMHhjYywgMHgwMCwgMHhlNCwgMHgxOSwgMHg5OCwgMHg2NywKLTB4ZGMsIDB4NjIsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZWUsIDB4ZDMsIDB4MDYsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweDQ4LCAweDYwLCAweDg4LCAweDYwLCAweGM4LCAweDYwLCAweDA4LCAweDYxLCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhYywgMHg2NiwgMHgyMSwgMHg0MCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4NjQsIDB4MjEsIDB4MDUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjMsCi0weDAwLCAweDIxLCAweGM5LCAweDQzLCAweDQxLCAweDYzLCAweDgxLCAweDYzLCAweDAwLCAweDIxLCAweGMxLCAweDYzLAotMHgwMSwgMHg2NCwgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgwMSwgMHgyMCwKLTB4NDAsIDB4MDIsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4M2MsIDB4MjAsIDB4NDgsIDB4NjAsCi0weDg4LCAweDYwLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAwLCAweDIwLCAweDA3LCAweDRhLAotMHg4NywgMHgwMCwgMHhjYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg1MSwgMHgwMSwgMHgzMCwgMHgxMCwgMHgyOCwKLTB4ZjgsIDB4ZDMsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGY0LCAweDJkLCAweDAwLCAweDgwLCAweDVkLCAweDRjLCAweGZmLCAweGZmLCAweDEyLCAweDQ5LCAweDEzLCAweDQ4LAotMHg2NywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYSwgMHgxOCwgMHgwNiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgxMSwgMHg0YiwKLTB4Y2EsIDB4MTgsIDB4YzEsIDB4NjAsIDB4ODIsIDB4NjAsIDB4MDEsIDB4NjEsIDB4MGYsIDB4NDksIDB4MTAsIDB4NDgsCi0weGE3LCAweDIzLCAweDliLCAweDAxLCAweGNhLCAweDE4LCAweDA2LCAweGMwLCAweDA4LCAweDM4LCAweDBlLCAweDRiLAotMHhjYSwgMHgxOCwgMHhjMSwgMHg2MCwgMHg4MiwgMHg2MCwgMHgwMSwgMHg2MSwgMHgwYywgMHg0OCwgMHgwZCwgMHg0OSwKLTB4NjcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzIsIDB4MTgsIDB4MDUsIDB4YzEsIDB4MDgsIDB4MzksIDB4MDUsIDB4NGIsCi0weGMyLCAweDE4LCAweGM4LCAweDYwLCAweDhhLCAweDYwLCAweDA4LCAweDYxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHhhYywgMHgxZSwgMHgyMSwgMHg0MCwgMHg0OCwgMHgyZSwgMHgwMCwgMHg4MCwgMHhmYywgMHgxZiwgMHgwMCwgMHgwMCwKLTB4YWMsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MzQsIDB4MmUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MmYsIDB4MDAsIDB4MDAsCi0weGFjLCAweDNlLCAweDIxLCAweDQwLCAweDVjLCAweDJlLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHg0MCwgMHg0YywgMHgwMCwgMHgyMCwgMHgwYSwgMHgwMSwgMHgxMiwgMHgxOSwKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjIsIDB4MTAsIDB4NjMsIDB4NTAsIDB4NjMsCi0weDkwLCAweDYzLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGYzLCAweGQzLCAweDNhLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MywgMHg0OCwgMHg2MywgMHg4OCwgMHg2MywgMHgyMCwgMHg2MCwgMHgwMSwgMHgyMSwgMHhlMywgMHgxZCwKLTB4NTksIDB4MzMsIDB4NjAsIDB4NjAsIDB4MTksIDB4NzEsIDB4MTgsIDB4NzIsIDB4OTgsIDB4NzEsIDB4OTgsIDB4NzIsCi0weDU5LCAweDcxLCAweDU4LCAweDcyLCAweGQ4LCAweDcxLCAweGQ4LCAweDcyLCAweGUyLCAweDFkLCAweDQ5LCAweDMyLAotMHgxMSwgMHg3MywgMHgxOSwgMHg3MCwgMHg5MCwgMHg3MywgMHg5OCwgMHg3MCwgMHg1MSwgMHg3MywgMHg1OSwgMHg3MCwKLTB4ZDAsIDB4NzMsIDB4ZDgsIDB4NzAsIDB4MTEsIDB4NzEsIDB4MTEsIDB4NzIsIDB4OTAsIDB4NzEsIDB4OTAsIDB4NzIsCi0weDUwLCAweDcxLCAweDUwLCAweDcyLCAweGQwLCAweDcxLCAweGQwLCAweDcyLCAweDE4LCAweDczLCAweDAyLCAweDIyLAotMHhlNywgMHgxZCwgMHg2OSwgMHgzNywgMHgzYSwgMHg3MCwgMHg5OSwgMHg3MywgMHhiYSwgMHg3MCwgMHg1OCwgMHg3MywKLTB4NzgsIDB4NzAsIDB4ZDgsIDB4NzMsIDB4ZjgsIDB4NzAsIDB4MzksIDB4NzEsIDB4M2EsIDB4NzIsIDB4YjksIDB4NzEsCi0weGI5LCAweDcyLCAweDc4LCAweDcxLCAweDdhLCAweDcyLCAweGY5LCAweDcxLCAweGY5LCAweDcyLCAweDM5LCAweDczLAotMHhlMywgMHgxZCwgMHg3OSwgMHgzMywgMHgxYSwgMHg3MCwgMHhiOSwgMHg3MywgMHg5OSwgMHg3MCwgMHg3OCwgMHg3MywKLTB4NWEsIDB4NzAsIDB4ZjksIDB4NzMsIDB4ZDksIDB4NzAsIDB4MWEsIDB4NzEsIDB4MWEsIDB4NzIsIDB4OTksIDB4NzEsCi0weDlhLCAweDcyLCAweDU4LCAweDcxLCAweDVhLCAweDcyLCAweGQ5LCAweDcxLCAweGRhLCAweDcyLCAweDE5LCAweDczLAotMHhlNywgMHgxZCwgMHg4OSwgMHgzNywgMHgzYSwgMHg3MCwgMHg5OSwgMHg3MywgMHhiOSwgMHg3MCwgMHg1OCwgMHg3MywKLTB4N2EsIDB4NzAsIDB4ZDksIDB4NzMsIDB4ZjksIDB4NzAsIDB4MzksIDB4NzEsIDB4M2EsIDB4NzIsIDB4YjksIDB4NzEsCi0weGI5LCAweDcyLCAweDc4LCAweDcxLCAweDdhLCAweDcyLCAweGY5LCAweDcxLCAweGY5LCAweDcyLCAweDNhLCAweDczLAotMHhlMywgMHgxZCwgMHg5OSwgMHgzMywgMHgxYSwgMHg3MCwgMHhiOSwgMHg3MywgMHg5YSwgMHg3MCwgMHg3OCwgMHg3MywKLTB4NWEsIDB4NzAsIDB4ZjksIDB4NzMsIDB4ZGEsIDB4NzAsIDB4MTksIDB4NzEsIDB4MWEsIDB4NzIsIDB4OTksIDB4NzEsCi0weDk5LCAweDcyLCAweDU4LCAweDcxLCAweDVhLCAweDcyLCAweGQ5LCAweDcxLCAweGQ5LCAweDcyLCAweDIwLCAweDYxLAotMHhlMCwgMHg2MCwgMHg2MCwgMHg2MSwgMHhhMCwgMHg2MCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MTksIDB4MDAsIDB4ODAsIDB4ODEsIDB4MjAsIDB4MDAsIDB4MDIsCi0weDAxLCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDcwLCAweDQ3LCAweGMwLCAweDAwLCAweDE0LCAweDAwLAotMHgwOSwgMHg0OSwgMHgwYSwgMHg0YiwgMHhjOCwgMHgxOCwgMHgwNCwgMHgzYiwgMHhjOSwgMHgxOCwgMHgwOCwgMHg2MCwKLTB4MDAsIDB4MjEsIDB4YzIsIDB4MWQsIDB4MjksIDB4MzIsIDB4YzIsIDB4NjEsIDB4MTAsIDB4MWMsIDB4MDEsIDB4MzEsCi0weDA4LCAweDI5LCAweGY4LCAweGQzLCAweGMxLCAweDFmLCAweDI5LCAweDM5LCAweDAwLCAweDIwLCAweGM4LCAweDYxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4NCwgMHgwOSwgMHgwMCwgMHgwMCwKLTB4MDYsIDB4NDgsIDB4MDcsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4NDgsIDB4ODAsIDB4MDAsIDB4MjAsCi0weDg4LCAweDgwLCAweGM4LCAweDgwLCAweDg4LCAweDYwLCAweDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLAotMHg4OCwgMHg2MSwgMHg3MCwgMHg0NywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MDYsIDB4NDgsIDB4YzIsIDB4MWQsIDB4MTksIDB4MzIsCi0weGMxLCAweDYwLCAweDAxLCAweDYxLCAweGMxLCAweDYxLCAweDAxLCAweDYyLCAweDExLCAweDcxLCAweGZmLCAweDMwLAotMHgwMSwgMHgzMCwgMHg0MSwgMHg2MiwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4MDksIDB4NDgsIDB4MGEsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MTgsIDB4NjAsIDB4MDAsIDB4MjEsIDB4YzIsIDB4MWQsCi0weDRkLCAweDMyLCAweGMyLCAweDYwLCAweDEwLCAweDFjLCAweDAxLCAweDMxLCAweDE0LCAweDI5LCAweGY4LCAweGQzLAotMHhjMSwgMHgxZiwgMHg0ZCwgMHgzOSwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MCwgMHg1OCwgMHg2MCwgMHg5OCwgMHg2MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDcsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDBiLCAweDQ5LCAweDBiLCAweDQ4LCAweGZkLCAweGY3LCAweGVhLCAweGZiLCAweDBiLCAweDQ4LAotMHgwMCwgMHg2YSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg5OCwgMHg0MywgMHgwOSwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjIsIDB4MDksIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YzAsIDB4NmYsCi0weDgwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhjMSwgMHhiZCwgMHgyMSwgMHg0MCwgMHg3NSwgMHg5OCwgMHgyMSwgMHg0MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweDBmLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDA0LCAweGQxLCAweGMwLCAweDZmLAotMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwYiwgMHg0YiwgMHgwYywgMHg0OCwKLTB4MGMsIDB4NGEsIDB4MDAsIDB4MjEsIDB4ZmQsIDB4ZjcsIDB4YmYsIDB4ZmIsIDB4MGIsIDB4NDgsIDB4NDEsIDB4OGQsCi0weDAxLCAweDMxLCAweDQxLCAweDg1LCAweDAwLCAweDIxLCAweGMxLCAweDg1LCAweDA5LCAweDQ4LCAweDAwLCAweDZhLAotMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHgxOCwgMHg0MywgMHgwOCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4NTksIDB4YmQsIDB4MjEsIDB4NDAsCi0weDc1LCAweDk4LCAweDIxLCAweDQwLCAweGI4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmMCwgMHhiNSwgMHgxYiwgMHg0YywKLTB4MTAsIDB4MjYsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4NjAsIDB4ODgsIDB4MDAsIDB4MjgsCi0weDA1LCAweGQxLCAweDIwLCAweDc5LCAweDAwLCAweDI4LCAweDAyLCAweGQxLCAweDE5LCAweDIwLCAweGEwLCAweDY3LAotMHgwMCwgMHhlMCwgMHhhNiwgMHg2NywgMHgwMCwgMHgyMCwgMHgwNywgMHgyMywgMHg1YiwgMHgwMiwgMHhlNSwgMHgxOCwKLTB4YzEsIDB4NDMsIDB4ZTgsIDB4NjEsIDB4NjksIDB4NjIsIDB4NTksIDB4MDgsIDB4YTEsIDB4MjcsIDB4N2YsIDB4MDMsCi0weDc5LCAweDYwLCAweDBmLCAweDIxLCAweDc5LCAweDYwLCAweGUxLCAweDFkLCAweGI5LCAweDMxLCAweDA4LCAweDcxLAotMHgwMSwgMHgyMCwgMHhiOCwgMHg2MCwgMHg0MCwgMHgwMiwgMHhiOCwgMHg2MCwgMHgwMCwgMHhmMCwgMHg0YywgMHhmYSwKLTB4MDAsIDB4ZjAsIDB4ZjAsIDB4ZmEsIDB4MDQsIDB4MjAsIDB4YjgsIDB4NjAsIDB4MDcsIDB4MjAsIDB4NzgsIDB4NjEsCi0weDdlLCAweDYwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGUwLCAweDE4LCAweGMwLCAweDhiLCAweDA0LCAweDIzLAotMHgxOCwgMHg0MCwgMHhlOCwgMHg2MiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjQsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4MjMsCi0weDAxLCAweDMzLCAweDlhLCAweDQyLCAweDA4LCAweGQwLCAweDAxLCAweDI5LCAweDAwLCAweGQxLCAweDAxLCAweDIwLAotMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MWIsIDB4NGEsIDB4ZDcsIDB4NjgsIDB4MWEsIDB4NGIsIDB4MTksIDB4NzksIDB4MWMsIDB4MWMsIDB4MzcsIDB4MjMsCi0weDliLCAweDAxLCAweGUzLCAweDE4LCAweDAxLCAweDJmLCAweDBkLCAweGQxLCAweDU3LCAweDg4LCAweDAwLCAweDJmLAotMHgwYSwgMHhkMSwgMHgwMCwgMHgyOSwgMHgwYSwgMHhkMSwgMHg1OSwgMHg4YiwgMHgwYSwgMHgwOSwgMHgwMCwgMHhkMywKLTB4MDIsIDB4MjAsIDB4NDksIDB4MDksIDB4ZTgsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4ZTUsIDB4ZTcsCi0weDAwLCAweDI5LCAweDAzLCAweGQwLCAweDk4LCAweDhhLCAweDgwLCAweDA3LCAweDgwLCAweDBmLCAweGRmLCAweGU3LAotMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhkMSwgMHgxOCwgMHg4YSwgMHg4OCwgMHhmZiwgMHgyNywgMHgwMSwgMHgzNywKLTB4MTcsIDB4NDAsIDB4MGEsIDB4NDksIDB4YzksIDB4ODgsIDB4MDMsIDB4ZDAsIDB4NGIsIDB4MGEsIDB4MDEsIDB4ZDMsCi0weDAzLCAweDIwLCAweGQxLCAweGU3LCAweDEzLCAweDBhLCAweDAzLCAweGQzLCAweDBiLCAweDBhLCAweDAxLCAweGQzLAotMHgwMiwgMHgyMCwgMHhjYiwgMHhlNywgMHhkMiwgMHgwOSwgMHhjOSwgMHhkMywgMHhjOSwgMHgwOSwgMHhjNywgMHhkMywKLTB4MDEsIDB4MjAsIDB4YzUsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweGMxLCAweGIwLCAweDAxLCAweDIwLCAweDAwLCAweDA3LCAweDUyLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MCwgMHg1MiwgMHg0OCwgMHg0MiwgMHg2OSwgMHg0MCwgMHgwZCwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywKLTB4NDgsIDB4NjAsIDB4NTAsIDB4NDgsIDB4YzAsIDB4NmEsIDB4NTAsIDB4NGIsIDB4MTgsIDB4NDMsIDB4MDAsIDB4MjEsCi0weDAzLCAweDAzLCAweDFiLCAweDBiLCAweDRlLCAweDRjLCAweDI3LCAweDZmLCAweDNkLCAweDAzLCAweDJkLCAweDBiLAotMHhlNywgMHgxZCwgMHg3OSwgMHgzNywgMHhhYiwgMHg0MiwgMHgxYywgMHhkMCwgMHhlMywgMHgxZCwgMHg3OSwgMHgzMywKLTB4MWIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NDAsIDB4OTMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDMsIDB4NDMsCi0weDFiLCAweDY4LCAweGNjLCAweDAwLCAweDZlLCAweDQ2LCAweDMzLCAweDUxLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwNiwgMHgxZCwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHg2YywgMHg0NCwgMHg2MywgMHg2MCwgMHgwOCwgMHgzMCwKLTB4MDEsIDB4MzEsIDB4NDAsIDB4OWIsIDB4ODMsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4M2YsIDB4NDgsIDB4MDMsIDB4MDMsCi0weDFiLCAweDBiLCAweGFiLCAweDQyLCAweGU3LCAweGQxLCAweDAwLCAweDIwLCAweDAxLCAweDIzLCAweDFiLCAweDAzLAotMHgxMywgMHg0MCwgMHgzYywgMHg0YywgMHgwMywgMHhkMCwgMHg2MywgMHg2YSwgMHgwMSwgMHgzMywgMHg2MywgMHg2MiwKLTB4MDksIDB4ZTAsIDB4MTMsIDB4MGIsIDB4MDMsIDB4ZDMsIDB4MjMsIDB4NmEsCi0weDAxLCAweDMzLCAweDIzLCAweDYyLCAweDAzLCAweGUwLCAweDM3LCAweDRiLCAweDVjLCAweDZkLCAweDAxLCAweDM0LAotMHg1YywgMHg2NSwgMHgwMCwgMHgyOSwgMHgwOSwgMHhkMCwgMHgwMywgMHgxYywgMHhkYywgMHgwMCwgMHgyMywgMHgxYywKLTB4NmIsIDB4NDQsIDB4NWMsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MjMsIDB4MGQsIDB4MDEsIDB4ZDIsIDB4ODgsIDB4NDIsCi0weGY1LCAweGQxLCAweDMwLCAweDRjLCAweDI1LCAweDY4LCAweDZiLCAweDBjLCAweDA1LCAweGQyLCAweDIzLCAweDY4LAotMHgxYiwgMHgwYywgMHgwOCwgMHhkMSwgMHgyNCwgMHg2OCwgMHhhMywgMHgwYSwgMHgwNSwgMHhkMywgMHgyMCwgMHgyNCwKLTB4MmIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4NWMsIDB4NjIsIDB4MDAsIDB4MjQsIDB4NWMsIDB4NjIsIDB4MjUsIDB4NGIsCi0weDIzLCAweDRjLCAweDUxLCAweDI2LCAweGI2LCAweDAzLCAweDIzLCAweDY3LCAweDMzLCAweDYxLCAweDNkLCAweDZhLAotMHhjMCwgMHg0NiwgMHg3NSwgMHg2MSwgMHgwMiwgMHgyNSwgMHhhMSwgMHgyNiwgMHg3NiwgMHgwMywgMHg3NSwgMHg2MCwKLTB4MDEsIDB4MjUsIDB4YjUsIDB4NjAsIDB4ZTYsIDB4MWQsIDB4YjksIDB4MzYsIDB4MzUsIDB4NzEsIDB4ODgsIDB4NDIsCi0weDIxLCAweGQwLCAweDI1LCAweDFjLCAweGMzLCAweDAwLCAweDZjLCAweDQ2LCAweGU0LCAweDU4LCAweDJlLCAweDZmLAotMHg2YiwgMHg0NCwgMHgzNCwgMHg2MCwgMHg1YiwgMHg2OCwgMHgyYywgMHg2ZiwgMHhjMCwgMHg0NiwgMHg2MywgMHg2MCwKLTB4MmIsIDB4NmYsIDB4MDgsIDB4MzMsIDB4MmIsIDB4NjcsIDB4M2MsIDB4NmEsIDB4YTMsIDB4NDIsIDB4MDIsIDB4ZDMsCi0weDEyLCAweDRiLCAweGMwLCAweDQ2LCAweDJiLCAweDY3LCAweDAzLCAweDFjLCAweGRiLCAweDAwLCAweDZiLCAweDQ0LAotMHg1YywgMHg2OCwgMHgwMSwgMHgzMCwgMHgyMywgMHgwZCwgMHgwNCwgMHhkMywgMHg1MSwgMHgyNCwgMHhhNCwgMHgwMywKLTB4MmIsIDB4NmYsIDB4YzAsIDB4NDYsIDB4YTMsIDB4NjEsIDB4ODgsIDB4NDIsIDB4ZGUsIDB4ZDEsIDB4MTAsIDB4MGIsCi0weDAzLCAweGQzLCAweDBlLCAweDQ5LCAweDAxLCAweDIwLCAweGZkLCAweGY3LCAweDc0LCAweGZhLCAweDQxLCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4MDAsIDB4MDEsIDB4MTQsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwKLTB4YzksIDB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MjIsCi0weDA2LCAweDI0LCAweDQ3LCAweDRmLCAweGMwLCAweDQ2LCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDAxLCAweDMzLAotMHgyMCwgMHgyYiwgMHhmOSwgMHhkMywgMHgwNCwgMHgyNSwgMHgzZCwgMHg2MSwgMHgwNSwgMHgyMywgMHgzYiwgMHg2MSwKLTB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4M2QsIDB4NjEsIDB4M2IsIDB4NjEsCi0weDNmLCAweDRkLCAweGFiLCAweDZmLCAweGRlLCAweDA4LCAweDAyLCAweDIzLCAweDFlLCAweDQwLCAweDA0LCAweDIzLAotMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwKLTB4OWUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsCi0weDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLCAweDVlLCAweDA4LCAweDAyLCAweDIzLAotMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgzMywgMHg0MywKLTB4M2IsIDB4NjEsIDB4MDIsIDB4MjMsIDB4YWUsIDB4NmYsIDB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsCi0weDNiLCAweDYxLCAweDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLCAweDVkLCAweDAwLAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywKLTB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YzUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDg1LCAweDA4LAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywKLTB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4NDUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDAyLCAweDI1LAotMHgwNSwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywKLTB4M2IsIDB4NjEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MDMsIDB4NDMsCi0weDNiLCAweDYxLCAweDA1LCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDYxLCAweDAwLCAweDI1LCAweDNkLCAweDYxLAotMHgwMSwgMHgyMywgMHgzYiwgMHg2MSwgMHgzZCwgMHg2MSwgMHgzYiwgMHg2MSwgMHgwMCwgMHgyMCwgMHgzZCwgMHg2MSwKLTB4MGQsIDB4NGIsIDB4MWIsIDB4NjksIDB4NDksIDB4MDAsIDB4MWUsIDB4MWMsIDB4MDIsIDB4MjMsIDB4MzMsIDB4NDAsCi0weDE5LCAweDQzLCAweDAxLCAweDIzLCAweDNiLCAweDYxLCAweDAxLCAweDMwLAotMHgxMCwgMHgyOCwgMHhmMiwgMHhkMywgMHgwMiwgMHgyMCwgMHgzOCwgMHg2MSwgMHgwMywgMHgyMCwgMHgzOCwgMHg2MSwKLTB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4MzgsIDB4NjEsIDB4NDgsIDB4MDgsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHhmMCwgMHhiNCwgMHgwMCwgMHgyNCwgMHgwNywgMHgyMywgMHgwNiwgMHgyNywKLTB4NDQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MTcsIDB4NjEsIDB4MTMsIDB4NjEsIDB4MDEsIDB4MzQsIDB4MjAsIDB4MmMsCi0weGY5LCAweGQzLCAweDA0LCAweDI2LCAweDE2LCAweDYxLCAweDA1LCAweDI0LCAweDE0LCAweDYxLCAweDE3LCAweDYxLAotMHgwNywgMHgyMywgMHgxMywgMHg2MSwgMHgxNiwgMHg2MSwgMHgxNCwgMHg2MSwgMHgxNywgMHg2MSwgMHgxMywgMHg2MSwKLTB4M2MsIDB4NGIsIDB4OWIsIDB4NmYsIDB4ZGQsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsCi0weDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDM3LCAweDRiLCAweDliLCAweDZmLAotMHg5ZCwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwKLTB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4MzIsIDB4NGIsIDB4OWIsIDB4NmYsIDB4NWQsIDB4MDgsIDB4MDIsIDB4MjMsCi0weDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLAotMHgyZCwgMHg0YiwgMHg5ZCwgMHg2ZiwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywKLTB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4MjksIDB4NGIsIDB4OWIsIDB4NmYsIDB4NWQsIDB4MDAsCi0weDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLAotMHgxNSwgMHg2MSwgMHhjNSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywKLTB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4ODUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsCi0weDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDQ1LCAweDA4LAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywKLTB4MTUsIDB4NjEsIDB4MDIsIDB4MjUsIDB4MDUsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsCi0weDI1LCAweDQzLCAweDE1LCAweDYxLCAweDQwLCAweDAwLCAweDAyLCAweDIzLCAweDE4LCAweDQwLCAweDAzLCAweDFjLAotMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyMCwgMHg0MywgMHgxMCwgMHg2MSwgMHgxNywgMHg2MSwgMHgwNywgMHgyMywKLTB4MTMsIDB4NjEsIDB4MTYsIDB4NjEsIDB4MTQsIDB4NjEsIDB4NGMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MGYsIDB4MjEsCi0weDI1LCAweDFjLCAweGNkLCAweDQwLCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLAotMHgxMywgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgxMywgMHg2MSwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzOSwKLTB4MTAsIDB4MjgsIDB4ZjEsIDB4ZDMsIDB4MTcsIDB4NjEsIDB4MDcsIDB4MjMsIDB4MTMsIDB4NjEsIDB4MTcsIDB4NjEsCi0weDEzLCAweDYxLCAweDAzLCAweDIwLCAweDEwLCAweDYxLCAweGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg0ZiwgMHg0ZCwKLTB4MDgsIDB4MjEsIDB4MDIsIDB4MjAsIDB4MmEsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4MjcsIDB4ZjksIDB4NGQsIDB4NGMsCi0weDcxLCAweDIzLCAweDViLCAweDAxLCAweGU3LCAweDE4LCAweDM4LCAweDgwLCAweDFhLCAweDIxLCAweDAyLCAweDIwLAotMHgyYSwgMHgxYywgMHhmZCwgMHhmNywgMHgxZCwgMHhmOSwgMHg3OCwgMHg4MCwgMHgyMCwgMHg3OSwgMHgwMCwgMHgyOCwKLTB4MGIsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MzgsIDB4ODAsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MTAsIDB4ZDEsCi0weDQ0LCAweDQ4LCAweDAwLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE4LCAweDQzLCAweDk5LCAweDAyLAotMHgwOCwgMHg2MCwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwNiwgMHhkMSwgMHg2MCwgMHg4OCwgMHgwMCwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4ZjksIDB4MjEsIDB4MTIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4NDMsIDB4ZmYsIDB4MDEsIDB4MjEsCi0weGM5LCAweDAzLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDNlLCAweGZmLCAweDAwLCAweDI1LCAweDdkLCAweDI2LAotMHhmNiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMSwgMHgzNSwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHg5YywgMHhmZSwKLTB4MDAsIDB4MGMsIDB4MDEsIDB4ZDMsIDB4YjUsIDB4NDIsIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MjUsIDB4MDUsIDB4ZTAsCi0weDAzLCAweDIxLCAweDA5LCAweDAzLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDJiLCAweGZmLCAweDAxLCAweDM1LAotMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHg4ZCwgMHhmZSwgMHg0MCwgMHgwYiwgMHgwMSwgMHhkMiwgMHhiNSwgMHg0MiwKLTB4ZjIsIDB4ZDMsIDB4MDQsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ODYsIDB4ZmUsIDB4ZmYsIDB4MjMsIDB4ZTEsIDB4MzMsCi0weDk4LCAweDQzLCAweDAxLCAweDIxLCAweDAxLCAweDQzLCAweDM4LCAweDg4LCAweGZmLCAweDIzLCAweDAxLCAweDMzLAotMHg5OCwgMHg0MiwgMHgwMywgMHhkMSwgMHgyZiwgMHgyMywgMHg1YiwgMHgwMSwKLTB4MTksIDB4NDMsIDB4MTYsIDB4ZTAsIDB4MDEsIDB4MjgsIDB4MDksIDB4ZDEsIDB4NzgsIDB4ODgsIDB4MDEsIDB4MjgsCi0weDAzLCAweGQxLCAweDIzLCAweDIzLCAweDViLCAweDAxLCAweDE5LCAweDQzLCAweDBkLCAweGUwLCAweDIwLCAweDIzLAotMHgxOSwgMHg0MywgMHgwYSwgMHhlMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHhkMSwgMHg3OCwgMHg4OCwgMHgwMSwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4MGIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4MTksIDB4NDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MjMsCi0weDE5LCAweDQzLCAweDA0LCAweDIwLCAweGZmLCAweGY3LCAweGY4LCAweGZlLCAweDA5LCAweDIxLCAweDQ5LCAweDAyLAotMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHhmMywgMHhmZSwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwKLTB4MDAsIDB4MjEsIDB4MWIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZWMsIDB4ZmUsIDB4MWEsIDB4MjAsIDB4ZmYsIDB4ZjcsCi0weDRmLCAweGZlLCAweDAxLCAweDIxLCAweGM5LCAweDAzLCAweDAxLCAweDQzLCAweDFhLCAweDIwLCAweGZmLCAweGY3LAotMHhlMywgMHhmZSwgMHgwMCwgMHgyNywgMHgwMywgMHhlMCwgMHgwOCwgMHgyZiwgMHgwMSwgMHhkMywgMHgwZiwgMHgyZiwKLTB4MDgsIDB4ZDksIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NDAsIDB4ZmUsIDB4NzksIDB4MDAsIDB4MDksIDB4MTksCi0weDFiLCAweDIzLCAweGRiLCAweDAxLCAweGM5LCAweDE4LCAweDg4LCAweDgzLCAweDAxLCAweDM3LCAweDIwLCAweDJmLAotMHhlZiwgMHhkMywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhlZCwgMHhhZiwgMHgyMSwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MTMsIDB4NDgsCi0weDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4MDEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDgxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHgwMSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4ODEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsCi0weDAxLCAweGIwLCAweDcwLCAweDQ3LCAweDAwLCAweDA4LCAweDE0LCAweDQwLCAweGYwLCAweGI1LCAweDgzLCAweGIwLAotMHg2OCwgMHg0ZCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlZiwgMHgxOCwgMHhmOCwgMHg4YiwgMHgwNCwgMHgyMiwKLTB4MDIsIDB4NDAsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZTgsIDB4MTgsIDB4MDEsIDB4ODgsCi0weGMwLCAweDQ2LCAweDAxLCAweDkxLCAweDQwLCAweDg4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDAwLCAweDI0LAotMHgwMywgMHhlMCwgMHgwOCwgMHgyYywgMHgwMSwgMHhkMywgMHgwZiwgMHgyYywgMHgwOCwgMHhkOSwgMHgyMCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZTgsIDB4ZmQsIDB4NjEsIDB4MDAsIDB4NDksIDB4MTksIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsCi0weGM5LCAweDE4LCAweDg4LCAweDgzLCAweDAxLCAweDM0LCAweDIwLCAweDJjLCAweGVmLCAweGQzLCAweDU4LCAweDRjLAotMHhlMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgxNSwgMHhkMCwgMHg1NywgMHg0ZSwgMHgyMCwgMHgyNSwgMHgwMSwgMHgzZCwKLTB4NTMsIDB4NDksIDB4ZTAsIDB4NjksIDB4MzAsIDB4NDAsIDB4MGIsIDB4ZDAsIDB4NjgsIDB4MDAsIDB4NDAsIDB4MTgsCi0weDM3LCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDhiLCAweDI4LCAweDFjLCAweGZmLCAweGY3LAotMHg2NSwgMHhmZSwgMHhlMCwgMHg2OSwgMHhiMCwgMHg0MywgMHhlMCwgMHg2MSwgMHg3NiwgMHgwOCwgMHgwMCwgMHgyZCwKLTB4ZWIsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YzIsIDB4ZmQsIDB4NDgsIDB4NDksIDB4YzAsIDB4NDYsCi0weGY4LCAweDgzLCAweGY4LCAweDhiLCAweGMyLCAweDA4LCAweDI1LCAweGQzLCAweGNhLCAweDY4LCAweDAxLCAweDJhLAotMHgxMywgMHhkMSwgMHgwYSwgMHg3OSwgMHgwMCwgMHgyYSwgMHgxZiwgMHhkMSwgMHg0OSwgMHg4OCwgMHgwMCwgMHgyOSwKLTB4MWMsIDB4ZDEsIDB4MDEsIDB4OTksIDB4NDMsIDB4NGEsIDB4MDAsIDB4MjksIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjksCi0weDE2LCAweGQxLCAweDUxLCAweDhiLCAweGM5LCAweDA4LCAweDEzLCAweGQyLCAweDBmLCAweGUwLCAweDUxLCAweDhiLAotMHgwOSwgMHgwOSwgMHgwZiwgMHhkMiwgMHgwYiwgMHhlMCwgMHgwYSwgMHg3OSwgMHgwMCwgMHgyYSwgMHgwYiwgMHhkMSwKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4OGEsIDB4ODgsIDB4YzksIDB4ODgsIDB4MTEsIDB4NDAsCi0weDQ5LCAweDA5LCAweDA5LCAweDA3LCAweDAyLCAweGQxLCAweDA0LCAweDIzLCAweDk4LCAweDQzLCAweGY4LCAweDgzLAotMHhmOCwgMHg4YiwgMHgwNCwgMHgyMSwgMHgwMSwgMHg0MCwgMHgwMiwgMHg5YSwgMHgxZiwgMHhkMCwgMHhiOSwgMHg4YiwKLTB4NGEsIDB4MGIsIDB4MjcsIDB4ZDMsIDB4ODAsIDB4MDksIDB4MjUsIDB4ZDMsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4OTgsCi0weDAxLCAweDMzLCAweDk4LCAweDQyLCAweDIwLCAweGQwLCAweDAwLCAweDI1LCAweDAwLCAweDk4LCAweDAxLCAweDI4LAotMHgwMCwgMHhkMSwgMHgwNSwgMHgwMiwgMHgwMSwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMSwgMHgyMywKLTB4NWIsIDB4MDMsIDB4MWQsIDB4NDMsIDB4YTksIDB4NDIsIDB4MTMsIDB4ZDAsCi0weDAwLCAweDIwLCAweDI5LCAweDFjLCAweGZmLCAweGY3LCAweDEwLCAweGZlLCAweGJkLCAweDgzLCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHg2MCwgMHg2MiwgMHgwYSwgMHhlMCwgMHhiOCwgMHg4YiwgMHg0MCwgMHgwYiwgMHgwNywgMHhkMiwKLTB4MDksIDB4MjEsIDB4NDksIDB4MDIsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4MDMsIDB4ZmUsIDB4MDksIDB4MjAsCi0weDQwLCAweDAyLCAweGI4LCAweDgzLCAweGY4LCAweDhiLCAweGMwLCAweDA4LCAweDJkLCAweGQzLCAweDFkLCAweDQ4LAotMHhjNywgMHg2YSwgMHgwMSwgMHg5OCwgMHgwMCwgMHg5OSwgMHhmZiwgMHhmNywgMHg1MSwgMHhmYywgMHhjMiwgMHgwNywKLTB4ZDIsIDB4MGYsIDB4MWEsIDB4NDksIDB4MDMsIDB4ZDAsIDB4MDQsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4MmIsIDB4NDMsCi0weDAzLCAweGUwLCAweDA0LCAweDIzLCAweGNkLCAweDZkLCAweDlkLCAweDQzLCAweDJiLCAweDFjLCAweGNiLCAweDY1LAotMHg4MywgMHgwOCwgMHgwMywgMHhkMywgMHgwMiwgMHgyMywgMHhjZCwgMHg2ZCwgMHgyYiwgMHg0MywgMHgwMywgMHhlMCwKLTB4MDIsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4OWQsIDB4NDMsIDB4MmIsIDB4MWMsIDB4Y2IsIDB4NjUsIDB4NjEsIDB4NmEsCi0weDgxLCAweDQyLCAweDBjLCAweGQwLCAweDYwLCAweDYyLCAweDBlLCAweDQ4LCAweDAwLCAweDJhLCAweDAzLCAweGQwLAotMHhmZiwgMHgyMSwgMHgyMSwgMHgzMSwgMHgzOSwgMHg0MywgMHgwMywgMHhlMCwgMHhmZiwgMHgyMywgMHgyMSwgMHgzMywKLTB4OWYsIDB4NDMsIDB4MzksIDB4MWMsIDB4YzEsIDB4NjIsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDY4LCAweDFjLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgxYywgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4OTAsIDB4YjQsIDB4MDEsIDB4MjIsCi0weDIwLCAweDI4LCAweDBmLCAweGQyLCAweDQzLCAweDAwLCAweDBmLCAweDFjLCAweDA3LCAweDQ5LCAweDVjLCAweDE4LAotMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhlMywgMHgxOCwgMHg5ZiwgMHg4MywgMHg4MiwgMHg0MCwgMHgwNywgMHgyMywKLTB4NWIsIDB4MDIsIDB4YzksIDB4MTgsIDB4MTAsIDB4MWMsIDB4Y2EsIDB4NjksIDB4MTAsIDB4NDMsIDB4YzgsIDB4NjEsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDBiLCAweDQ4LCAweDQwLCAweDY5LAotMHgwYiwgMHg0OSwgMHhjOSwgMHg4YiwgMHgwNCwgMHgyMiwgMHgwYSwgMHg0MCwgMHgwYSwgMHg0OSwgMHgwNiwgMHhkMCwKLTB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MjMsIDB4Y2EsIDB4NmQsIDB4MWEsIDB4NDMsCi0weDA1LCAweGUwLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDE4LCAweDQzLCAweGNhLCAweDZkLCAweDUyLCAweDA4LAotMHg1MiwgMHgwMCwgMHhjYSwgMHg2NSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4ZTgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weGZmLCAweGY3LCAweGRlLCAweGZmLCAweDAxLCAweDFjLCAweDA1LCAweDIwLCAweDAwLCAweDkwLCAweDAwLCAweDIwLAotMHgwMSwgMHhhYiwgMHgxOCwgMHg4MCwgMHgwNCwgMHgzYiwgMHg1OCwgMHg3MCwgMHgxYiwgMHgyMiwgMHgwMCwgMHhhYiwKLTB4NWEsIDB4ODAsIDB4ZDksIDB4ODAsIDB4MDUsIDB4NDksIDB4YzksIDB4NmQsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTEsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZkLCAweGY3LCAweDc5LCAweGY4LCAweDA0LCAweGIwLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwZiwgMHg0OCwgMHgwMSwgMHg2OCwKLTB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MDEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsCi0weDgwLCAweDBhLCAweDAzLCAweGQzLCAweDBiLCAweDQ4LCAweDAwLCAweDY4LCAweDAwLCAweDBjLCAweDAxLCAweGUwLAotMHgwYSwgMHg0OCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOSwgMHg0YiwgMHg5OCwgMHg0MiwKLTB4MDUsIDB4ZDAsIDB4MDIsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDcsIDB4NGIsIDB4OTgsIDB4NDIsCi0weDAxLCAweGQxLCAweDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZjLCAweGU3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4MDQsIDB4OTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTksIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjQsIDB4MDEsIDB4MjQsCi0weDIxLCAweDFjLCAweDE4LCAweDQ4LCAweDAyLCAweDY4LCAweDUyLCAweDBjLCAweDA2LCAweGQyLCAweDAyLCAweDY4LAotMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMSwKLTB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MTIsIDB4NGYsIDB4MTMsIDB4NGEsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4NjgsCi0weDAwLCAweDBjLCAweDAwLCAweGUwLCAweDkwLCAweDZjLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDEwLCAweDRiLAotMHg5OCwgMHg0MiwgMHgwOCwgMHhkMCwgMHgwMiwgMHgzMywgMHg5OCwgMHg0MiwgMHgwNSwgMHhkMCwgMHgwZSwgMHg0YiwKLTB4OTgsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MDIsIDB4M2IsIDB4OTgsIDB4NDIsIDB4MGMsIDB4ZDEsIDB4MDAsIDB4MjksCi0weDAyLCAweGQwLCAweGY4LCAweDZhLCAweDAwLCAweDBjLCAweDAwLCAweGUwLAotMHhkMCwgMHg2YywgMHg0MCwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwZSwKLTB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDk5LCAweDAwLCAweDAwLAotMHgwNywgMHg5OSwgMHgwMCwgMHgwMCwgMHgwYywgMHg0OCwgMHgwMSwgMHg2OCwgMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwKLTB4MDEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDUsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDIsIDB4ZDMsCi0weDA4LCAweDQ4LCAweDgwLCAweDY4LCAweDAxLCAweGUwLCAweDA4LCAweDQ4LCAweDQwLCAweDZjLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwMCwgMHgyMSwgMHgwMywgMHgyOCwgMHgwMywgMHhkMCwgMHg0MCwgMHgwOCwgMHgwMSwgMHhkMywKLTB4MDEsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDgsIDB4MWMsIDB4ZmMsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDAxLCAweDI3LAotMHgxYSwgMHg0YywgMHgyNSwgMHg2OCwgMHhmZiwgMHhmNywgMHg3MiwgMHhmZiwgMHgwMywgMHgxYywgMHgxOSwgMHg0YSwKLTB4MDIsIDB4MjEsIDB4MDEsIDB4MjYsIDB4MTgsIDB4NDgsIDB4MDEsIDB4MmIsIDB4MWIsIDB4ZDEsIDB4Y2IsIDB4MDQsCi0weDFlLCAweDYwLCAweDU1LCAweDIzLCAweDAzLCAweDYwLCAweDAwLCAweDIzLCAweDQzLCAweDYwLCAweDA2LCAweDY4LAotMHg1NSwgMHgyZSwgMHgxYiwgMHhkMSwgMHhhYSwgMHgyNiwgMHgwNiwgMHg2MCwgMHg0MywgMHg2MCwgMHgwMywgMHg2OCwKLTB4YWEsIDB4MmIsIDB4MTUsIDB4ZDEsIDB4MDksIDB4MjMsIDB4MDMsIDB4NjAsIDB4MDUsIDB4MjMsIDB4MGYsIDB4NGYsCi0weGMwLCAweDQ2LCAweDNiLCAweDYwLCAweDAzLCAweDIzLCAweDBlLCAweDRmLCAweGMwLCAweDQ2LCAweDNiLCAweDYwLAotMHgxMSwgMHg2MCwgMHgwNywgMHg2OCwgMHgwOCwgMHhlMCwgMHgwOCwgMHgyMywgMHgyMywgMHg2MCwgMHgwNCwgMHgyMywKLTB4MGEsIDB4NGYsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsIDB4MTEsIDB4NjAsIDB4MDYsIDB4NjAsIDB4MjcsIDB4NjgsCi0weGMwLCAweDQ2LCAweDI1LCAweDYwLCAweDM4LCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MmEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NDAsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweGZmLCAweGY3LCAweDMwLCAweGZmLCAweDAxLCAweDI4LCAweDA1LCAweGQxLAotMHgxOSwgMHg0OCwgMHgwMCwgMHg2OCwgMHgxOSwgMHg0OSwgMHg0OSwgMHg2YiwgMHgwOCwgMHg0MCwgMHgyMiwgMHhlMCwKLTB4MTgsIDB4NDgsIDB4MDEsIDB4NjgsIDB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MDEsIDB4NjgsIDB4MDksIDB4MGMsCi0weDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAzLCAweGQzLCAweDE0LCAweDQ4LCAweDAwLCAweDY4LAotMHgwMCwgMHgwYywgMHgwMSwgMHhlMCwgMHgxMywgMHg0OCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4MTIsIDB4NGIsIDB4YzAsIDB4MTgsIDB4MDgsIDB4MjgsIDB4MGIsIDB4ZDIsIDB4MDEsIDB4YTMsIDB4MWIsIDB4NWMsCi0weDViLCAweDAwLCAweDlmLCAweDQ0LCAweDA1LCAweDAzLCAweDA3LCAweDAzLCAweDA3LCAweDA3LCAweDA1LCAweDAzLAotMHgwMywgMHgyMCwgMHgwMiwgMHhlMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyMSwKLTB4MzgsIDB4NjAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZDEsIDB4MDAsIDB4MjEsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MGUsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDM0LCAweDZlLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmUsIDB4NjYsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsCi0weDA3LCAweDFjLCAweDAxLCAweDIwLCAweDAxLCAweDkwLCAweGZmLCAweGY3LCAweGU3LCAweGZlLCAweDAxLCAweDI4LAotMHgxMywgMHhkMSwgMHgzOCwgMHgyZiwgMHgwMSwgMHhkMCwgMHhhOCwgMHgyZiwgMHgwNywgMHhkMSwgMHgwMCwgMHgyNiwKLTB4ZjYsIDB4NDMsIDB4MzQsIDB4MWMsIDB4YTgsIDB4MmYsIDB4MDIsIDB4ZDEsIDB4MzAsIDB4MWMsIDB4MDAsIDB4OTYsCi0weDM1LCAweDFjLCAweDExLCAweDIwLCAweDAwLCAweDA0LCAweDA2LCAweDYyLCAweDQ0LCAweDYyLCAweDg1LCAweDYyLAotMHgwMCwgMHg5OSwgMHhjMCwgMHg0NiwgMHhjMSwgMHg2MiwgMHgwMCwgMHgyMSwgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwKLTB4MDEsIDB4NjAsIDB4MzgsIDB4MmYsIDB4MDEsIDB4ZDAsIDB4YTgsIDB4MmYsIDB4MDUsIDB4ZDEsIDB4MDEsIDB4MjEsCi0weDAxLCAweDYwLCAweGE4LCAweDJmLCAweDAxLCAweGQxLCAweDAzLCAweDIxLCAweDAxLCAweDYwLCAweDAxLCAweDk4LAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgzNCwgMHg2ZSwgMHgyMSwgMHg0MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDEyLCAweDRjLCAweDIxLCAweDY4LCAweDEyLCAweDQ4LCAweDgxLCAweDQyLCAweDBiLCAweGQwLCAweDAwLCAweDIzLAotMHgyMSwgMHgxYywgMHhlMiwgMHgxZCwgMHhjMSwgMHgzMiwgMHgwMCwgMHhlMCwKLTB4MDgsIDB4YzEsIDB4OTEsIDB4NDIsIDB4ZmMsIDB4ZDMsIDB4MjAsIDB4NjAsIDB4YzgsIDB4MjAsIDB4YTAsIDB4ODAsCi0weDY3LCAweDcyLCAweDM4LCAweDAxLCAweDAwLCAweGYwLCAweDE4LCAweGY4LCAweDI3LCAweDcyLCAweDBhLCAweDQ4LAotMHhjMCwgMHg0NiwgMHhlMCwgMHg2MCwgMHgwOSwgMHgyZiwgMHgwMCwgMHhkYiwgMHgwMCwgMHgyNywgMHhlMCwgMHgxOSwKLTB4MDEsIDB4N2QsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NzUsIDB4ZTAsIDB4ODgsIDB4MDEsIDB4MzAsIDB4ZTAsIDB4ODAsCi0weDAxLCAweDIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHhlZSwgMHhmZiwgMHhjMCwgMHhkMCwgMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHg4MCwgMHhiNCwgMHgwOCwgMHg0YSwKLTB4ZDEsIDB4MWQsIDB4ODksIDB4MzEsIDB4MGIsIDB4N2EsIDB4MjAsIDB4MmIsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjMsCi0weDBiLCAweDcyLCAweDA3LCAweDFjLCAweDA4LCAweDdhLCAweDQzLCAweDFjLCAweDBiLCAweDcyLCAweDgwLCAweDE4LAotMHg5MCwgMHgzMCwgMHg0NywgMHg3MiwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4MDcsIDB4NDksIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDgsIDB4NjgsIDB4MDIsIDB4NDAsIDB4MDEsIDB4MjAsCi0weDAwLCAweDJhLCAweDA2LCAweGQxLCAweDBhLCAweDY4LCAweDEyLCAweDBjLCAweDAyLCAweGQxLCAweDA5LCAweDY4LAotMHg4OSwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MDksIDB4NGMsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsIDB4ZmMsIDB4ZjcsCi0weDkxLCAweGZmLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBlLCAweGY4LCAweDAxLCAweDIzLCAweGQ4LCAweDQyLAotMHgwMSwgMHhkMSwgMHgwMCwgMHgwYywgMHhlMCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgyMCwgMHgxYywgMHhmYywgMHhmNywKLTB4YzUsIDB4ZmUsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YzQsIDB4NjYsIDB4MjEsIDB4NDAsCi0weGY4LCAweGI1LCAweDA3LCAweDFjLCAweDc5LCAweDdhLCAweDc2LCAweDQ4LCAweDAwLCAweDIzLCAweDc2LCAweDRjLAotMHgwMSwgMHgyOSwgMHg1ZCwgMHhkMSwgMHhhMiwgMHg4OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHhhMSwgMHg4OSwKLTB4OGEsIDB4NDIsIDB4NzQsIDB4ZGEsIDB4ZmEsIDB4N2EsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZDAsIDB4N2EsIDB4NmMsCi0weDAwLCAweDJhLCAweDEyLCAweGQwLCAweDhhLCAweDQyLCAweDEwLCAweGQ4LCAweDAwLCAweDlhLCAweDUxLCAweDFjLAotMHhhMSwgMHg4MCwgMHhhMSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg4MSwgMHg3OCwgMHg2YywgMHg2YiwgMHg0ZSwKLTB4YzAsIDB4NDYsIDB4ZjAsIDB4ODAsIDB4YTAsIDB4NmEsIDB4NTgsIDB4MjMsIDB4NzksIDB4NmMsIDB4NTksIDB4NDMsCi0weDQwLCAweDE4LCAweGMxLCAweDFhLCAweDI4LCAweGUwLCAweDIyLCAweDg4LCAweDAxLCAweDMyLCAweDEyLCAweDA0LAotMHgxMiwgMHgwYywgMHgyMiwgMHg4MCwgMHg4YSwgMHg0MiwgMHgwMCwgMHhkYiwgMHgyMywgMHg4MCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4MjksIDB4NjksIDB4ZGQsIDB4NWYsIDB4NGMsIDB4YTQsIDB4NmEsIDB4NWUsIDB4NGIsIDB4MWQsIDB4ODgsCi0weDU4LCAweDIzLCAweDZiLCAweDQzLCAweGUzLCAweDE4LCAweGRlLCAweDFkLCAweDAxLCAweDM2LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwgMHgxNSwgMHhkMSwgMHg1OCwgMHg0OSwKLTB4MDAsIDB4OWEsIDB4MDEsIDB4MzIsIDB4OGEsIDB4ODAsIDB4OGEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDIsIDB4ODEsCi0weDA4LCAweDg4LCAweDAxLCAweDMwLCAweDU0LCAweDRlLCAweGMwLCAweDQ2LCAweGYwLCAweDgwLCAweDU4LCAweDIwLAotMHg2OCwgMHg0MywgMHgyMSwgMHgxOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzOSwgMHhmYiwgMHhmMCwgMHg4OCwKLTB4MDAsIDB4MDQsIDB4MDAsIDB4MTQsIDB4OTUsIDB4ZTAsIDB4NGQsIDB4NGIsIDB4MDEsIDB4MzUsIDB4MmQsIDB4MDQsCi0weDJkLCAweDBjLCAweDFkLCAweDgwLCAweDhkLCAweDQyLCAweDAxLCAweGRiLCAweDAwLCAweDI1LCAweDFkLCAweDgwLAotMHgwMSwgMHgzMiwgMHgxMiwgMHgwNCwgMHgxMiwgMHgxNCwgMHg5MSwgMHg0MiwgMHhjZSwgMHhkYywgMHg4MSwgMHhlMCwKLTB4ZTEsIDB4ODgsIDB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MTgsIDB4ZGEsIDB4ZjksIDB4N2EsIDB4MDAsIDB4MjksCi0weDJmLCAweGQwLCAweDc5LCAweDZjLCAweDQ5LCAweDA0LCAweDQ5LCAweDBjLCAweDc5LCAweDY0LCAweDJhLCAweGQwLAotMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgyNywgMHhkOCwgMHhlMSwgMHg4OCwgMHgwMSwgMHgzMSwgMHhlMSwgMHg4MCwKLTB4ZTEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4ODEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4NzgsIDB4NmMsCi0weDE4LCAweDQzLCAweDNhLCAweDRlLCAweGMwLCAweDQ2LCAweGYwLCAweDgwLCAweDAwLCAweGUwLCAweDYzLCAweGUwLAotMHhlMCwgMHg2YSwgMHg3OSwgMHg2YywgMHg0YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHg0OSwgMHgwMSwgMHg0MCwgMHgxOCwKLTB4YzEsIDB4MWYsIDB4NTksIDB4MzksIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZmIsIDB4ZTAsIDB4NmEsCi0weDc5LCAweDZjLCAweDRhLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDAxLCAweDgwLCAweDE4LCAweDAxLCAweDM5LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg2MCwgMHgzOCwgMHgwMCwgMHhmMCwgMHg4OSwgMHhmYiwgMHhiNiwgMHhlNywKLTB4NGEsIDB4ZTAsIDB4NjEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDYxLCAweDgwLCAweGUyLCAweDg5LCAweDkxLCAweDQyLCAweDAwLCAweGRiLCAweDYzLCAweDgwLAotMHgwMCwgMHgyMSwgMHgwMCwgMHgyYSwgMHgzZSwgMHhkZCwgMHgyNCwgMHg0YywgMHhlNCwgMHg2YSwgMHgyMywgMHg0YiwKLTB4NWQsIDB4ODgsIDB4NmIsIDB4MDAsIDB4NWIsIDB4MTksIDB4NWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4ZGUsIDB4MWQsCi0weDAxLCAweDM2LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LAotMHgyMCwgMHhkMSwgMHgxYywgMHg0ZSwgMHhmMSwgMHg4OCwgMHgwMSwgMHgzMSwgMHhmMSwgMHg4MCwgMHhmMSwgMHg4OCwKLTB4YzAsIDB4NDYsIDB4ODEsIDB4ODEsIDB4NzAsIDB4ODgsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4MDEsIDB4MzAsCi0weDE4LCAweDQzLCAweDE3LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDgwLCAweDY4LCAweDAwLCAweDQwLCAweDE5LAotMHg0MCwgMHgwMSwgMHgyMSwgMHgxOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZiwgMHhmYSwgMHg3MSwgMHg4OCwKLTB4NGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4NTIsIDB4MDEsIDB4ZjAsIDB4NmEsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ZjAsCi0weDRkLCAweGZiLCAweDBlLCAweDQ5LCAweGM4LCAweDg4LCAweDc5LCAweGU3LCAweDBiLCAweDRiLCAweDAxLCAweDM1LAotMHgyZCwgMHgwNCwgMHgyZCwgMHgwYywgMHg1ZCwgMHg4MCwgMHg5NSwgMHg0MiwgMHgwMSwgMHhkYiwgMHgwMCwgMHgyNSwKLTB4NWQsIDB4ODAsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsIDB4MDksIDB4MTQsIDB4OGEsIDB4NDIsIDB4YzIsIDB4ZGMsCi0weDAxLCAweDg5LCAweDAxLCAweDMxLCAweDAxLCAweDgxLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweGY4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0YywgMHgyYiwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKLTB4YzQsIDB4NjYsIDB4MjEsIDB4NDAsIDB4ZjAsIDB4YjQsIDB4MDYsIDB4MWMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsCi0weDMzLCAweDQwLCAweDAxLCAweDI0LCAweDQ0LCAweDRmLCAweDAwLCAweDIwLCAweDQ0LCAweDRhLCAweDQ1LCAweDRkLAotMHhkMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwMCwgMHgyYiwgMHg0MSwgMHhkMCwgMHhlMywgMHgwMywgMHhmMywgMHgxYSwKLTB4NzMsIDB4ZDAsIDB4ZWUsIDB4ODksIDB4OWUsIDB4NDIsIDB4NzEsIDB4ZDMsIDB4ZWUsIDB4ODgsIDB4MDAsIDB4MmUsCi0weDZkLCAweGQwLCAweGVkLCAweDZhLCAweDVlLCAweDFlLCAweDczLCAweDAwLCAweDliLCAweDE5LCAweDViLCAweDAxLAotMHhlZCwgMHgxOCwgMHhhZSwgMHg2OCwgMHgzNiwgMHgwNiwgMHgzNiwgMHgwZSwgMHgwMywgMHgyZSwgMHgwMiwgMHhkMCwKLTB4Y2UsIDB4ODksIDB4MDEsIDB4MzYsIDB4Y2UsIDB4ODEsIDB4NDAsIDB4MzUsIDB4YWQsIDB4OGIsIDB4YWQsIDB4MDAsCi0weDM1LCAweDRlLCAweDc2LCAweDZhLCAweGMwLCAweDQ2LCAweDcwLCAweDUxLCAweDU1LCAweDg5LCAweDAxLCAweDM1LAotMHg1NSwgMHg4MSwgMHgzMiwgMHg0ZSwgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHg5MCwgMHg2MCwgMHhmMiwgMHg2YSwKLTB4ZDIsIDB4MTgsIDB4OTAsIDB4NjMsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjMsIDB4ZjIsIDB4NmEsCi0weGQyLCAweDE4LCAweDEwLCAweDY0LCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweDUwLCAweDY0LCAweGYyLCAweDZhLAotMHhkMiwgMHgxOCwgMHg5MCwgMHg2NCwgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2NCwgMHhmMCwgMHg4OCwKLTB4MDEsIDB4MzgsIDB4ZjAsIDB4ODAsIDB4ZjAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4ODgsIDB4ODEsIDB4MjQsIDB4NDksCi0weDAwLCAweDI4LCAweDM5LCAweGQxLCAweDRmLCAweDgwLCAweDM3LCAweGUwLCAweDAwLCAweDJlLCAweDM4LCAweGQ5LAotMHhhYiwgMHg4OSwgMHhiMywgMHg0MiwgMHgzMCwgMHhkMywgMHhhYiwgMHg4OCwgMHgwMCwgMHgyYiwgMHgyYywgMHhkMCwKLTB4NTMsIDB4ODksIDB4MDEsIDB4MzMsIDB4NTMsIDB4ODEsIDB4MmEsIDB4MWMsIDB4YWQsIDB4NmEsIDB4NTgsIDB4MjMsCi0weDAxLCAweDNlLCAweDczLCAweDQzLCAweGVkLCAweDE4LCAweGFlLCAweDY4LCAweDM2LCAweDA2LCAweDM2LCAweDBlLAotMHgwMywgMHgyZSwgMHgwMiwgMHhkMCwgMHhjZSwgMHg4OSwgMHgwMSwgMHgzNiwgMHhjZSwgMHg4MSwgMHhhOCwgMHg2MCwKLTB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4YTgsIDB4NjMsIDB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4ZTgsIDB4NjMsCi0weDk1LCAweDZhLCAweGVkLCAweDE4LCAweDI4LCAweDY0LCAweDk1LCAweDZhLCAweGVkLCAweDE4LCAweDY4LCAweDY0LAotMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhhOCwgMHg2NCwgMHg5NSwgMHg2YSwgMHhlYiwgMHgxOCwgMHhkOCwgMHg2NCwKLTB4OTAsIDB4ODgsIDB4MDEsIDB4MzgsIDB4OTAsIDB4ODAsIDB4OTAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDgsIDB4ODEsCi0weDAwLCAweDI4LCAweDAzLCAweGQxLCAweDAxLCAweGUwLCAweDA0LCAweGUwLCAweDAzLCAweGUwLCAweDE3LCAweDgwLAotMHgyMCwgMHgxYywgMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHhjYSwgMHg4OSwgMHgwMSwgMHgzMiwgMHhjYSwgMHg4MSwKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAwLCAweDIxLCAweDQxLCAweDYwLCAweDEwLCAweDQ5LAotMHg0YSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMCwgMHhkMSwgMHhjYSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMCwKLTB4Y2EsIDB4MWQsIDB4MTksIDB4MzIsIDB4MTIsIDB4NzksIDB4MDAsIDB4MmEsIDB4MDgsIDB4ZDAsIDB4NGEsIDB4NjksCi0weDAwLCAweDJhLCAweDBiLCAweGQxLCAweDg4LCAweDYxLCAweDQ4LCAweDYxLAotMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg0YSwgMHg2OSwgMHgwMCwgMHgyYSwKLTB4MDIsIDB4ZDEsIDB4ODgsIDB4NjEsIDB4NDgsIDB4NjEsIDB4ZjcsIDB4ZTcsIDB4OGEsIDB4NjksIDB4YzAsIDB4NDYsCi0weDUwLCAweDYwLCAweDg4LCAweDYxLCAweGYyLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgyYSwgMHg0OCwgMHg0MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHg0YywgMHhkMCwgMHgwOCwgMHgyMiwKLTB4YzEsIDB4NjgsIDB4MGEsIDB4NDAsIDB4MDAsIDB4MjcsIDB4MjcsIDB4NGIsIDB4ZDksIDB4MWQsIDB4YjksIDB4MzEsCi0weDAwLCAweDJhLCAweDExLCAweGQwLCAweDA0LCAweDIyLCAweDI1LCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYxLAotMHgyNCwgMHg0YywgMHhjMCwgMHg0NiwgMHg0YywgMHg2MiwgMHgyNCwgMHg0YywgMHhjMCwgMHg0NiwgMHg4YywgMHg2MiwKLTB4MjMsIDB4NGMsIDB4YzAsIDB4NDYsIDB4Y2MsIDB4NjIsIDB4MjMsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjMsCi0weDRmLCAweDYzLCAweDEyLCAweGUwLCAweDA1LCAweDIyLCAweDIxLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYxLAotMHgyMCwgMHg0YywgMHhjMCwgMHg0NiwgMHg0YywgMHg2MiwgMHgyMCwgMHg0YywgMHhjMCwgMHg0NiwgMHg4YywgMHg2MiwKLTB4MWYsIDB4NGMsIDB4YzAsIDB4NDYsIDB4Y2MsIDB4NjIsIDB4MWYsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjMsCi0weDFlLCAweDRjLCAweGMwLCAweDQ2LCAweDRjLCAweDYzLCAweDQwLCAweDI0LCAweGNjLCAweDgyLCAweDRmLCAweDgzLAotMHgxYywgMHg0ZiwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyYSwgMHgwYywgMHhkOSwgMHg4YywgMHgwMCwgMHgwNSwgMHgxOSwKLTB4NmQsIDB4NmEsIDB4N2QsIDB4NDAsIDB4ZTQsIDB4MTgsIDB4ZmYsIDB4MzQsIDB4MDEsIDB4MzQsIDB4NjUsIDB4NjIsCi0weDAxLCAweDMxLCAweDkxLCAweDQyLCAweGY0LCAweGQzLCAweDEwLCAweDI5LCAweDA3LCAweGQyLCAweDhhLCAweDAwLAotMHhkMiwgMHgxOCwgMHhmZiwgMHgzMiwgMHgwMSwgMHgzMiwgMHg1NywgMHg2MiwgMHgwMSwgMHgzMSwgMHgxMCwgMHgyOSwKLTB4ZjcsIDB4ZDMsIDB4MTEsIDB4NDksIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZjgsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGFjLCAweGFiLCAweDIwLCAweDQwLAotMHgyOCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLTB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsIDB4MjAsIDB4MDEsIDB4NDAsIDB4MDAsCi0weDY3LCAweDQ1LCAweDIzLCAweDAxLCAweGVmLCAweGNkLCAweGFiLCAweDg5LCAweDk4LCAweGJhLCAweGRjLCAweGZlLAotMHgxMCwgMHgzMiwgMHg1NCwgMHg3NiwgMHhjMywgMHhkMiwgMHhlMSwgMHhmMCwgMHgzNiwgMHgzNiwgMHgzNiwgMHgzNiwKLTB4MzAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4YjAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MTUsIDB4NGQsIDB4ZTksIDB4MWQsCi0weGM5LCAweDMxLCAweDE1LCAweDRjLCAweDIzLCAweDFjLCAweDE1LCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LAotMHg0NCwgMHhmYiwgMHhlOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgxZSwgMHgzMSwgMHgyMywgMHgxYywgMHgwZCwgMHgxYywKLTB4MTEsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4M2IsIDB4ZmIsIDB4MjksIDB4MWMsIDB4MjMsIDB4MWMsCi0weDBlLCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LCAweDM1LCAweGZiLCAweDM5LCAweDFjLCAweDIzLCAweDFjLAotMHgwYywgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgyZiwgMHhmYiwgMHgwMCwgMHgyMSwgMHgwYiwgMHg0OCwKLTB4YzIsIDB4MWQsIDB4MTksIDB4MzIsIDB4NTEsIDB4NzEsIDB4MDEsIDB4MjEsIDB4ZmYsIDB4MzAsIDB4MDEsIDB4MzAsCi0weDQxLCAweDYyLCAweDA4LCAweDFjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg3NSwgMHgwOCwgMHhmZiwgMHhmZiwgMHgyOCwgMHgwMCwgMHgwMywgMHgwMCwKLTB4NDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDM3LCAweDRhLCAweDUwLCAweDY5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMwLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgzMywgMHg0YiwgMHgwMSwgMHgyOSwKLTB4NDksIDB4ZDEsIDB4MWYsIDB4NjgsIDB4MTksIDB4MWMsIDB4MzIsIDB4NGIsIDB4OWYsIDB4NDIsIDB4MDQsIDB4ZDEsCi0weGZmLCAweGY3LCAweDNlLCAweGZmLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIzLAotMHg5ZiwgMHgwMCwgMHhjYywgMHg1OSwgMHg1NSwgMHg2OSwgMHhlZiwgMHgxOSwgMHgzYywgMHg2MSwgMHgwMSwgMHgzMywKLTB4MDUsIDB4MmIsIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDUzLCAweDY5LCAweGMwLCAweDQ2LCAweDk4LCAweDYwLCAweDUwLCAweDY5LCAweDA4LCAweDIzLCAweGMyLCAweDY4LAotMHgxMywgMHg0MCwgMHgyNSwgMHg0ZiwgMHhmYSwgMHgxZCwgMHhiOSwgMHgzMiwgMHgwMCwgMHgyYiwgMHgwMiwgMHhkMCwKLTB4MDQsIDB4MjMsIDB4MjMsIDB4NGMsIDB4MDEsIDB4ZTAsIDB4MDUsIDB4MjMsIDB4MjIsIDB4NGMsIDB4YzAsIDB4NDYsCi0weDE0LCAweDYxLCAweDQwLCAweDI0LCAweGQ0LCAweDgyLCAweDAwLCAweDI0LCAweDU0LCAweDgzLCAweDIwLCAweDRjLAotMHgwMCwgMHgyMiwgMHgwMCwgMHgyYiwgMHgwYywgMHhkOSwgMHg5NSwgMHgwMCwKLTB4NDYsIDB4MTksIDB4NzYsIDB4NmEsIDB4NjYsIDB4NDAsIDB4ZWQsIDB4MTksIDB4ZmYsIDB4MzUsIDB4MDEsIDB4MzUsCi0weDZlLCAweDYyLCAweDAxLCAweDMyLCAweDlhLCAweDQyLCAweGY0LCAweGQzLCAweDEwLCAweDJhLCAweDA3LCAweGQyLAotMHg5MywgMHgwMCwgMHhkYiwgMHgxOSwgMHhmZiwgMHgzMywgMHgwMSwgMHgzMywgMHg1YywgMHg2MiwgMHgwMSwgMHgzMiwKLTB4MTAsIDB4MmEsIDB4ZjcsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4NzAsIDB4ZmYsIDB4YmMsIDB4ZTcsIDB4MDAsIDB4MjEsCi0weDhmLCAweDAwLCAweGRjLCAweDU5LCAweDU1LCAweDY5LCAweGVmLCAweDE5LCAweDdjLCAweDYyLCAweDAxLCAweDMxLAotMHgwNSwgMHgyOSwgMHhmNywgMHhkMywgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMywgMHgyMywgMHgxOCwgMHg0MywKLTB4NTEsIDB4NjksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjAsIDB4NTAsIDB4NjksIDB4NDAsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDUwLCAweDYxLCAweDA5LCAweDQ4LCAweGZjLCAweGY3LCAweGE0LCAweGZhLCAweGE0LCAweGU3LCAweDAwLCAweDAwLAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgzMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2NywgMHg0NSwgMHgyMywgMHgwMSwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MjgsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4NDAsIDB4MDAsCi0weDVjLCAweDVjLCAweDVjLCAweDVjLCAweDExLCAweDMxLCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgzYiwgMHg0OCwgMHgzYywgMHg0YywgMHgwOCwgMHgyMSwgMHgyMCwgMHg2MCwgMHhhMSwgMHg4MCwgMHgwMCwgMHgyMCwKLTB4MjAsIDB4ODEsIDB4ZTEsIDB4ODAsIDB4NjAsIDB4ODEsIDB4MzksIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjAsCi0weDM4LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYxLCAweDM4LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYxLAotMHgzNywgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwgMHgzNywgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MSwKLTB4MzYsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjIsIDB4MzYsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjIsCi0weDM1LCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYyLCAweDM1LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYyLAotMHgzNCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MywgMHgzNCwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MywKLTB4MzMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjMsIDB4MzMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjMsCi0weDMyLCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDY0LCAweDMyLCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDY0LAotMHgzMSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2NCwgMHgzMSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2NCwKLTB4MzAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjUsIDB4MzAsIDB4NDksIDB4YzgsIDB4NjgsIDB4MDIsIDB4MDQsCi0weDg5LCAweDY5LCAweDRhLCAweDQwLCAweGUzLCAweDFkLCAweDc5LCAweDMzLCAweDA5LCAweDA0LCAweGM5LCAweDQzLAotMHhjMCwgMHg0MywgMHg0OCwgMHg0MCwgMHhlMSwgMHgxZCwgMHhiOSwgMHgzMSwgMHhkYSwgMHg2MywgMHgwOCwgMHg2MCwKLTB4MjksIDB4NGQsIDB4MjEsIDB4MWMsIDB4MmIsIDB4MWMsIDB4MjksIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZjcsCi0weDNlLCAweGZhLCAweDI4LCAweDRhLCAweGUxLCAweDFkLCAweGI1LCAweDMxLCAweDAxLCAweDIwLCAweDJiLCAweDFjLAotMHgwZSwgMHgxYywgMHhmYywgMHhmNywgMHgzNiwgMHhmYSwgMHgyNCwgMHg0YSwgMHgwMCwgMHgyMCwgMHgzMSwgMHgxYywKLTB4MmIsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzAsIDB4ZmEsIDB4ZTEsIDB4MWQsIDB4NGQsIDB4MzEsIDB4MmIsIDB4MWMsCi0weDIwLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDI5LCAweGZhLCAweGUwLCAweDFkLCAweDVkLCAweDMwLAotMHgwMSwgMHg2OCwgMHgwMCwgMHgyOSwgMHhmYywgMHhkMCwgMHg2MCwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgzOCwgMHg2NSwKLTB4MjAsIDB4NmUsIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjUsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDgwLCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweGI5LCAweDIwLCAweDQwLCAweDgxLCAweDgxLCAweDQ4LCAweGJkLAotMHg3OSwgMHg1NiwgMHgyMywgMHg4YywgMHg5MywgMHgwYywgMHg4MiwgMHg5NSwgMHgxZCwgMHgwZSwgMHgxMiwgMHhjZiwKLTB4OWIsIDB4M2IsIDB4YzAsIDB4ZTksIDB4ZTYsIDB4NTUsIDB4N2MsIDB4ODIsIDB4OTksIDB4ZjYsIDB4NzgsIDB4MDIsCi0weGQxLCAweGQ3LCAweDI1LCAweDczLCAweDcyLCAweDhjLCAweDMzLCAweDEwLCAweGY3LCAweDAzLCAweGYxLCAweDQyLAotMHg2YywgMHg5YiwgMHg0YSwgMHhhNywgMHg4MiwgMHg4ZSwgMHgyMywgMHhhOSwgMHg5MCwgMHhiMSwgMHg4MiwgMHg4ZSwKLTB4ZGMsIDB4M2YsIDB4ZmIsIDB4MjksIDB4MDAsIDB4NjIsIDB4MjIsIDB4NDUsIDB4ODgsIDB4MmIsIDB4ZjEsIDB4ODUsCi0weDEyLCAweDYxLCAweGQxLCAweDczLCAweDZlLCAweGIxLCAweDExLCAweDE2LCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHg3NSwgMHgwOCwgMHhmZiwgMHhmZiwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMiwgMHgwMCwKLTB4MTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDMzLCAweGY4LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDRjLCAweGZmLCAweDAzLCAweDQ4LCAweDAxLCAweDg5LAotMHgwMSwgMHgzMSwgMHgwMSwgMHg4MSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MWMsCi0weDBmLCAweDFjLCAweDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLCAweDFmLCAweGY4LCAweGUwLCAweDY4LAotMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwNCwgMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywKLTB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsCi0weDA4LCAweDQzLCAweDM4LCAweDY1LCAweDIwLCAweDY5LCAweGMwLCAweDQ2LCAweDc4LCAweDY1LCAweDYwLCAweDY5LAotMHhjMCwgMHg0NiwgMHhiOCwgMHg2NSwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg4MSwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI1LCAweDAwLCAweDIyLCAweDkzLCAweDAwLCAweDFmLCAweDE4LCAweGJmLCAweDY5LCAweDViLCAweDE4LAotMHg1ZiwgMHg2MiwgMHgwMSwgMHgzMiwgMHgwNSwgMHgyYSwgMHhmNywgMHhkMywgMHgwNywgMHg3YSwgMHhmYiwgMHgwOCwKLTB4MDMsIDB4ZDMsIDB4MDAsIDB4MjMsIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsIDB4MTMsIDB4NjIsIDB4MDcsIDB4NmIsCi0weGMwLCAweDQ2LCAweDhmLCAweDYzLCAweGM3LCAweDZhLCAweGMwLCAweDQ2LCAweGNmLCAweDYzLCAweDg3LCAweDZiLAotMHhjMCwgMHg0NiwgMHgwZiwgMHg2NCwgMHg0NywgMHg2YiwgMHhjMCwgMHg0NiwgMHg0ZiwgMHg2NCwgMHgwNywgMHg2YywKLTB4YzAsIDB4NDYsIDB4OGYsIDB4NjQsIDB4YzIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4Y2EsIDB4NjQsIDB4YzIsIDB4ODgsCi0weGMwLCAweDQ2LCAweDBhLCAweDgwLCAweDgyLCAweDdhLCAweDEyLCAweDA2LCAweDAzLCAweDdhLCAweDFiLCAweDA0LAotMHgxYSwgMHg0MywgMHhjMywgMHg4OCwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHg0MywgMHg3YSwgMHhkYiwgMHgwNywKLTB4MWEsIDB4NDMsIDB4OGEsIDB4NjAsIDB4MTcsIDB4MWMsIDB4ODMsIDB4N2EsIDB4NWEsIDB4MDgsIDB4MDUsIDB4ZDMsCi0weDE0LCAweDIyLCAweDFjLCAweDFjLCAweGEzLCAweDA4LCAweDAyLCAweGQyLCAweDE1LCAweDIyLCAweDAwLCAweGUwLAotMHgwMCwgMHgyMiwgMHgwMCwgMHg3YSwgMHg0MywgMHgwOCwgMHgxMCwgMHhkMywgMHhjMCwgMHgwOCwgMHgwMiwgMHhkMywKLTB4ODgsIDB4MjAsIDB4MTAsIDB4NDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MjAsIDB4MTAsIDB4NDMsIDB4M2EsIDB4MGEsCi0weDEyLCAweDAyLCAweDAxLCAweDIzLCAweDFhLCAweDQzLCAweGM4LCAweDYwLCAweDhhLCAweDYwLCAweDA4LCAweDFjLAotMHhmZiwgMHhmNywgMHg3OCwgMHhmZCwgMHgwNSwgMHhlMCwgMHgzOCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMywgMHgyMywKLTB4MTgsIDB4NDMsIDB4ODgsIDB4NjAsIDB4Y2EsIDB4NjAsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksIDB4MDEsIDB4MzEsCi0weDAxLCAweDgxLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNCwgMHgwMiwgMHg2ZCwgMHgxNCwgMHg0YywgMHgxNSwgMHgxYywgMHhlNywgMHg2OSwgMHhiZCwgMHg0MCwKLTB4MTMsIDB4MWMsIDB4MjYsIDB4NmEsIDB4ZjMsIDB4NDAsIDB4NWQsIDB4NDAsIDB4MmUsIDB4MWMsIDB4NDUsIDB4NmQsCi0weGJkLCAweDQwLCAweDZlLCAweDQwLCAweDJiLCAweDFjLCAweDM1LCAweDFjLCAweGZkLCAweDQwLCAweDJmLCAweDFjLAotMHhiYiwgMHgwMCwgMHg2NSwgMHg2YSwgMHhlYiwgMHg1OCwgMHgwMCwgMHgyYiwgMHgwOCwgMHhkMCwgMHgyMywgMHg2OSwKLTB4MDEsIDB4MzcsIDB4OWYsIDB4NDIsIDB4MDAsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4YmUsIDB4MDAsIDB4YWUsIDB4NTksCi0weDAwLCAweDJlLCAweGY3LCAweGQxLCAweGE0LCAweDY5LCAweGEyLCAweDQwLCAweDExLCAweDQzLCAweDA1LCAweDRiLAotMHgxOSwgMHg0MywgMHhiYSwgMHgwMCwgMHhhOSwgMHg1MCwgMHg0MCwgMHgzMCwgMHg4NywgMHg4MywgMHhmMCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDgwLCAweGI0LCAweDAwLCAweDIyLCAweDAwLCAweDIzLCAweDAwLCAweDI5LCAweDA1LCAweGQ5LCAweDA3LCAweDc4LAotMHg3YSwgMHg0MCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMywgMHg4YiwgMHg0MiwgMHhmOSwgMHhkMywgMHhkMCwgMHg0MywKLTB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDAwLCAweDI0LCAweGZmLCAweDI2LCAweDA5LCAweDM2LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDlhLCAweGY4LAotMHgwMCwgMHhmMCwgMHhiOCwgMHhmOSwgMHgwNSwgMHgxYywgMHgwMCwgMHhmMCwgMHhjNywgMHhmYSwgMHgzZCwgMHg3MCwKLTB4MjgsIDB4MWMsIDB4MDEsIDB4MzcsIDB4MDEsIDB4MzQsIDB4YjQsIDB4NDIsIDB4ZjEsIDB4ZDMsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDAwLCAweGYwLCAweDkzLCAweGY4LCAweDAwLCAweGYwLAotMHhhNywgMHhmOSwgMHgwNywgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmYSwgMHgzOCwgMHgwYSwgMHhmNiwgMHhkMywKLTB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjMsIDB4YjUsIDB4ODIsIDB4YjAsIDB4MDIsIDB4OTgsCi0weDQxLCAweDAyLCAweDUzLCAweDIwLCAweDAwLCAweGYwLCAweDY0LCAweGY4LCAweDAwLCAweGYwLCAweGE4LCAweGZhLAotMHhmZiwgMHhmNywgMHhlOCwgMHhmZiwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5MCwgMHgyZSwgMHgyMCwKLTB4MDAsIDB4OTAsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MjcsIDB4MDIsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDQsIDB4ZDEsCi0weDAwLCAweDk4LCAweDg0LCAweDQyLCAweDAxLCAweGQzLCAweDAwLCAweDI2LAotMHgwOSwgMHhlMCwgMHgwMSwgMHg5OCwgMHg0MSwgMHgxYywgMHgwMSwgMHg5MSwgMHgwMCwgMHhmMCwgMHg2MCwgMHhmOCwKLTB4MDAsIDB4ZjAsIDB4N2UsIDB4ZjksIDB4MDYsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OGQsIDB4ZmEsIDB4ZjgsIDB4MDAsCi0weDg2LCAweDQwLCAweDM1LCAweDQzLCAweDAxLCAweDM0LCAweDAxLCAweDM3LCAweDA0LCAweDJmLCAweGU2LCAweGQzLAotMHgwMywgMHg5OSwgMHgyMCwgMHhjMSwgMHgwMywgMHg5MSwgMHhmZiwgMHgyMywgMHgwOSwgMHgzMywgMHg5YywgMHg0MiwKLTB4ZGQsIDB4ZDMsIDB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsCi0weDA0LCAweDFjLCAweDBmLCAweDFjLCAweDAxLCAweDJjLCAweDJhLCAweGQwLCAweDE2LCAweDQ4LCAweGMwLCAweDZmLAotMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMCwgMHgyNiwgMHgyMCwgMHhjZiwKLTB4YjEsIDB4MDAsIDB4ODQsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4ZjgsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGRmLCAweGY5LCAweDI4LCAweDBhLCAweDAwLCAweGYwLCAweGRjLCAweGY5LCAweDI4LCAweDBjLCAweDAwLCAweGYwLAotMHhkOSwgMHhmOSwgMHgyOCwgMHgwZSwgMHgwMCwgMHhmMCwgMHhkNiwgMHhmOSwgMHgwMCwgMHhmMCwgMHg1YywgMHhmYSwKLTB4MDEsIDB4MzYsIDB4NDIsIDB4MmUsIDB4ZTksIDB4ZDMsIDB4NjEsIDB4MDIsIDB4ODMsIDB4MjAsIDB4MDAsIDB4ZjAsCi0weDBmLCAweGY4LCAweDAwLCAweGYwLCAweDUzLCAweGZhLCAweGZmLCAweGY3LCAweDkzLCAweGZmLCAweDA0LCAweDQ4LAotMHhjMCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MWMsCi0weDBmLCAweDFjLCAweDAwLCAweGYwLCAweDU5LCAweGZhLCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGY5LAotMHgzOCwgMHgwYywgMHgwMCwgMHhmMCwgMHhiMywgMHhmOSwgMHgzOCwgMHgwYSwgMHgwMCwgMHhmMCwgMHhiMCwgMHhmOSwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YWQsIDB4ZjksIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweDAxLCAweDFjLCAweDU0LCAweDIwLCAweGZmLCAweGY3LCAweGU3LCAweGZmLCAweDAwLCAweDIwLAotMHgwMCwgMHhmMCwgMHhhMiwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHgwMCwgMHhmMCwKLTB4M2QsIDB4ZmEsIDB4NTcsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDkwLCAweGI1LCAweDA4LCAweDRmLCAweGZhLCAweDZmLCAweDIwLCAweDIzLCAweDE0LCAweDY4LCAweDljLCAweDQzLAotMHgxNCwgMHg2MCwgMHgyMywgMHgxYywgMHhmZiwgMHhmNywgMHg2NSwgMHhmZiwgMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA4LCAweDRmLCAweGZhLCAweDZmLCAweDIwLCAweDIzLAotMHgxNCwgMHg2OCwgMHg5YywgMHg0MywgMHgxNCwgMHg2MCwgMHgyMywgMHgxYywgMHhmZiwgMHhmNywgMHg4NywgMHhmZiwKLTB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgxOCwgMHg0ZSwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywKLTB4MDEsIDB4NjAsIDB4NjEsIDB4MDIsIDB4NTMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YTUsIDB4ZmYsIDB4MDAsIDB4ZjAsCi0weGU5LCAweGY5LCAweGZmLCAweGY3LCAweDI5LCAweGZmLCAweGY4LCAweDFkLCAweDA1LCAweDMwLCAweDAxLCAweDJjLAotMHgwMywgMHhkMSwgMHgyMiwgMHgyZiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyNywgMHgwZiwgMHhlMCwgMHg0NCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4YWEsIDB4ZmYsIDB4MDAsIDB4ZjAsIDB4YzgsIDB4ZjgsIDB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGQ3LCAweGY5LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweGEyLCAweGZmLCAweDAwLCAweGYwLCAweGMwLCAweGY4LAotMHgwNSwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZiwgMHhmOSwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MjgsIDB4MDIsIDB4MzgsIDB4NDMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweGMyLCAweGIwLAotMHgxNCwgMHgxYywgMHgwZCwgMHgxYywgMHgwNywgMHgxYywgMHgwMSwgMHgyZiwgMHgyZiwgMHhkMCwgMHg3OSwgMHgwMiwKLTB4MTksIDB4NGUsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MDIsIDB4NjAsCi0weDUzLCAweDIwLCAweGZmLCAweGY3LCAweDZiLCAweGZmLCAweDAwLCAweGYwLCAweGFmLCAweGY5LCAweGZmLCAweGY3LAotMHhlZiwgMHhmZSwgMHg2OCwgMHg0NiwgMHhmZiwgMHhmNywgMHhkNiwgMHhmZSwgMHg2YSwgMHg0NiwgMHhlOCwgMHgxZCwKLTB4MDUsIDB4MzAsIDB4MTQsIDB4NTQsIDB4MjEsIDB4MGEsIDB4NjgsIDB4NDQsIDB4NDEsIDB4NzAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDk5LCAweDBjLCAweDMwLCAweGZmLCAweGY3LCAweGJhLCAweGZlLCAweDAyLCAweGFiLCAweDE4LCAweDcwLAotMHgwMCwgMHgyMCwgMHg1OCwgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4YjIsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDE1LCAweGZmLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLAotMHgwMSwgMHg2MCwgMHg0MiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4YjUsIDB4YzIsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MmYsCi0weDAxLCAweGQxLCAweDAxLCAweDIwLCAweDM2LCAweGUwLCAweDZiLCAweDQ2LCAweDAwLCAweDIwLCAweGM0LCAweDQzLAotMHgxMCwgMHhjMywgMHgwMSwgMHgzMCwgMHg0MiwgMHgyOCwgMHhmYiwgMHhkMywgMHg2OCwgMHg0NiwgMHgwYywgMHgzMCwKLTB4MDMsIDB4MWMsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MGEsIDB4ZDksIDB4MGUsIDB4ODgsIDB4YzAsIDB4NDYsCi0weDA2LCAweDcwLCAweDBlLCAweDg4LCAweDM2LCAweDEyLCAweDQ2LCAweDcwLCAweDAyLCAweDMwLCAweDAyLCAweDMxLAotMHgwMiwgMHgzNCwgMHg5NCwgMHg0MiwgMHhmNCwgMHhkMywgMHgwMCwgMHg5MiwgMHgxOCwgMHgxYywgMHgxMSwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4N2MsIDB4ZmUsIDB4MDQsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MDIsIDB4YWIsCi0weDFjLCAweDcwLCAweDU4LCAweDcwLCAweDlkLCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLCAweGZmLCAweGY3LAotMHg3MSwgMHhmZSwgMHgwMiwgMHhhYiwgMHg1OCwgMHg3MCwgMHg0NSwgMHg5YiwgMHgxZCwgMHgwNiwgMHgyZCwgMHgwZSwKLTB4YWMsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4M2UsIDB4ZmYsCi0weDAxLCAweDIwLCAweGFjLCAweDQyLCAweDAwLCAweGQxLCAweDAwLCAweDIwLCAweDQ2LCAweGIwLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjMiwgMHhiMCwgMHgwZiwgMHgxYywgMHg0MSwgMHgwMiwKLTB4MTQsIDB4NGMsIDB4ZTAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDIsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MDIsIDB4NjAsCi0weDUzLCAweDIwLCAweGZmLCAweGY3LCAweGVmLCAweGZlLCAweDAwLCAweGYwLCAweDMzLCAweGY5LCAweGZmLCAweGY3LAotMHg3MywgMHhmZSwgMHg2OCwgMHg0NiwgMHhmZiwgMHhmNywgMHg1YSwgMHhmZSwgMHhlMCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDIsIDB4YWQsIDB4MDEsIDB4NjAsIDB4NmQsIDB4NzgsIDB4MDAsIDB4MjQsCi0weDAyLCAweGFiLCAweDVjLCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLCAweGZmLCAweGY3LCAweDNjLCAweGZlLAotMHhhOCwgMHg0MiwgMHgwMiwgMHhkMSwgMHgwMCwgMHg5OCwgMHg4NywgMHg0MiwgMHgwMSwgMHhkMywgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4NDIsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweGUzLAotMHhiNCwgMHgyMiwgMHg5ZiwgMHhlNSwgMHhiNCwgMHgzMiwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAotMHg4MSwgMHgwMywgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LCAweDAxLCAweDAzLCAweDgwLCAweGUxLAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDkzLCAweGU1LCAweDgxLCAweDAyLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDAxLCAweDAyLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4ODEsIDB4MDEsIDB4ODAsIDB4ZTEsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4ODEsIDB4MDAsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4MDEsIDB4MDAsIDB4ODAsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsCi0weGE0LCAweDIxLCAweDlmLCAweGU1LCAweGE4LCAweDMxLCAweDlmLCAweGU1LCAweGEwLCAweDEzLCAweGEwLCAweGUxLAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDIwLCAweDEzLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weGEwLCAweDEyLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MjAsIDB4MTIsIDB4YTAsIDB4ZTEsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4YTAsIDB4MTEsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MjAsIDB4MTEsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHhhMCwgMHgxMCwgMHhhMCwgMHhlMSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHhhMCwgMHgzMCwgMHg5ZiwgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4NzAsIDB4MzAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDM0LCAweDIwLCAweDlmLCAweGU1LAotMHgzYywgMHgzMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZjgsIDB4MDAsIDB4MTgsIDB4NDAsCi0weDA0LCAweDAxLCAweDE4LCAweDQwLCAweDAwLCAweDAxLCAweDE4LCAweDQwLCAweGZjLCAweDAwLCAweDE4LCAweDQwLAotMHg4MCwgMHhiNSwgMHgwMCwgMHhmMCwgMHgwYywgMHhmOCwgMHgwMCwgMHgyNywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4NDcsIDB4ZjgsIDB4NzgsIDB4MWMsIDB4MDcsIDB4MDQsIDB4M2YsIDB4MGMsIDB4MGMsIDB4MmYsIDB4ZjcsIDB4ZGQsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDFkLCAweDQ4LAotMHgwMiwgMHg2OCwgMHgxZCwgMHg0OSwgMHg4YiwgMHg2OSwgMHhkMiwgMHgxOCwgMHgwMiwgMHg2MCwgMHgwMiwgMHg2NiwKLTB4OGEsIDB4NmEsIDB4NDMsIDB4NjgsIDB4OWIsIDB4MTgsIDB4NDMsIDB4NjAsIDB4OTMsIDB4NDIsIDB4MDIsIDB4ZDIsCi0weDgyLCAweDY4LCAweDAxLCAweDMyLCAweDgyLCAweDYwLCAweGMyLCAweDY4LCAweDBiLCAweDZhLCAweGQyLCAweDE4LAotMHhjMiwgMHg2MCwgMHg0MiwgMHg2OSwgMHhjYiwgMHg2OCwgMHhkMiwgMHgxOCwgMHg0MiwgMHg2MSwgMHhjMiwgMHg2OSwKLTB4OGIsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4YzIsIDB4NjEsIDB4MDIsIDB4NjksIDB4MGIsIDB4NjksIDB4ZDIsIDB4MTgsCi0weDAyLCAweDYxLCAweDgyLCAweDY5LCAweDBiLCAweDY4LCAweGQyLCAweDE4LCAweDgyLCAweDYxLCAweDAyLCAweDZiLAotMHhjYiwgMHg2OSwgMHhkMiwgMHgxOCwgMHgwMiwgMHg2MywgMHg0YSwgMHg2YSwgMHg0MywgMHg2YiwgMHg5YiwgMHgxOCwKLTB4NDMsIDB4NjMsIDB4OTMsIDB4NDIsIDB4MDIsIDB4ZDIsIDB4ODIsIDB4NmIsIDB4MDEsIDB4MzIsIDB4ODIsIDB4NjMsCi0weGMyLCAweDZiLCAweDRiLCAweDY5LCAweGQyLCAweDE4LCAweGMyLCAweDYzLCAweDAyLCAweDZjLCAweGM5LCAweDZhLAotMHg1MSwgMHgxOCwgMHgwMSwgMHg2NCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDgsIDB4MTQsIDB4NDAsIDB4ODgsIDB4YjUsIDB4NjksIDB4NDYsIDB4MDAsIDB4ZjAsIDB4MTcsIDB4ZjgsCi0weDgxLCAweDA4LCAweDBhLCAweGQwLCAweDAwLCAweDIwLCAweDAwLCAweDI5LCAweDA3LCAweGQ5LCAweDAwLCAweDIyLAotMHg4MywgMHgwMCwgMHgwMCwgMHg5ZiwgMHhjMCwgMHg0NiwgMHhmYSwgMHg1MCwgMHgwMSwgMHgzMCwgMHg4OCwgMHg0MiwKLTB4ZjgsIDB4ZDMsIDB4ODgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4MDAsIDB4ZjAsCi0weDA0LCAweGY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIyLAotMHgwMCwgMHgyOCwgMHgwYSwgMHhkMCwgMHgwMSwgMHgyOCwgMHgwYSwgMHhkMCwgMHgwMiwgMHgyOCwgMHgwYywgMHhkMCwKLTB4MDMsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDcsIDB4NDgsIDB4MWMsIDB4MjIsIDB4MDgsIDB4NjAsIDB4MTAsIDB4MWMsCi0weDcwLCAweDQ3LCAweDA2LCAweDQ4LCAweDA0LCAweGUwLCAweDA2LCAweDQ4LCAweDUwLCAweDIyLCAweDA4LCAweDYwLAotMHhmNywgMHhlNywgMHgwNSwgMHg0OCwgMHg2OCwgMHgyMiwgMHgwOCwgMHg2MCwgMHhmMywgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDgwLCAweGI0LCAweDAzLCAweDIyLCAweGMyLCAweDgwLCAweDE1LCAweDRhLAotMHhjMCwgMHg0NiwgMHg4MiwgMHg2MCwgMHgxNCwgMHg0YSwgMHgxMiwgMHg4OCwgMHgwMSwgMHgzMiwgMHhjMiwgMHg2MCwKLTB4MDAsIDB4MjAsIDB4MTMsIDB4NGEsIDB4MTMsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NzAsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMxLCAweDA4LCAweDI4LCAweGY4LCAweGQzLCAweDIwLCAweDIyLCAweDBhLCAweDcwLCAweDAxLCAweDMxLAotMHgwMCwgMHgyMCwgMHgwZSwgMHg0YiwgMHgxZiwgMHg1YywgMHhjMCwgMHg0NiwgMHgwZiwgMHg3MCwgMHgwMSwgMHgzMCwKLTB4MDEsIDB4MzEsIDB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MGEsIDB4NzAsIDB4MDEsIDB4MzEsIDB4MDAsIDB4MjAsCi0weDA5LCAweDRhLCAweDEzLCAweDVjLCAweGMwLCAweDQ2LCAweDBiLCAweDcwLCAweDAxLCAweDMwLCAweDAxLCAweDMxLAotMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwOCwgMHg3MCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDg1LCAweDA0LCAweDAwLCAweDgwLCAweDhlLCAweDA0LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIzLAotMHgwYSwgMHg0OCwgMHhjMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHg0YiwgMHg3MCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg3MCwKLTB4NjQsIDB4MjEsIDB4ODAsIDB4MzAsIDB4YzEsIDB4ODIsIDB4MDEsIDB4ODMsIDB4NDMsIDB4ODMsIDB4N2QsIDB4MjEsCi0weGM5LCAweDAwLCAweDgxLCAweDgzLCAweGMyLCAweDgzLCAweDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLAotMHgwMCwgMHhmMCwgMHg4ZSwgMHhmYiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YjUsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZTEsIDB4ZmYsIDB4MTMsIDB4NDgsCi0weDAyLCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDgwLCAweGZiLCAweDAxLCAweDIzLCAweGQ4LCAweDQyLAotMHgwYSwgMHhkMSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHhjYSwgMHg4OCwgMHgwMSwgMHgzMiwKLTB4Y2EsIDB4ODAsIDB4ODEsIDB4NzksIDB4MDEsIDB4MzEsIDB4ODEsIDB4NzEsIDB4ZmQsIDB4ZjcsIDB4NzAsIDB4ZjksCi0weDBiLCAweDQ4LCAweGMwLCAweDY4LCAweDAxLCAweDI4LCAweDA1LCAweGQxLCAweDBhLCAweDQ4LCAweDdkLCAweDIyLAotMHhkMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg2OCwgMHhmYiwgMHgwOCwgMHg0OCwgMHhmYiwgMHhmNywKLTB4ZTEsIDB4ZmMsIDB4MDgsIDB4NDgsIDB4MjgsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4NjAsIDB4ZmIsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc5LCAweDIxLCAweGZmLCAweGZmLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhhNSwgMHg3YiwgMHgyMSwgMHg0MCwKLTB4OTUsIDB4MmMsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4MDMsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4MTAsIDB4MjAsCi0weDBmLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDBmLCAweDRhLCAweDBmLCAweDQ4LCAweDY0LCAweDIxLAotMHhmYiwgMHhmNywgMHhjNiwgMHhmYywgMHgwZSwgMHg0OCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwgMHgwMSwgMHg2OCwKLTB4MGEsIDB4NDAsIDB4MDgsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MDIsIDB4NjgsIDB4MTIsIDB4MGMsCi0weDA3LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDA0LCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LAotMHhjMSwgMHg2MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwNywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2NCwKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTUsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weDdjLCAweDI5LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgyNywgMHg0OCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwKLTB4MDEsIDB4NjgsIDB4MGEsIDB4NDAsIDB4MDcsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MDIsIDB4NjgsCi0weDEyLCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAzLCAweGQzLCAweDIxLCAweDQ4LAotMHhjMCwgMHg0NiwgMHhjMSwgMHg2MCwgMHgwMiwgMHhlMCwgMHgyMCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2NCwKLTB4MWYsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4ODcsIDB4ZmMsIDB4MWYsIDB4NDgsIDB4YzEsIDB4NmIsIDB4ZmYsIDB4MjksCi0weGZjLCAweGQxLCAweDgxLCAweDZiLCAweDQyLCAweDZiLCAweDE2LCAweDFjLCAweDBmLCAweDFjLCAweDFjLCAweDRjLAotMHgxMCwgMHgyMywgMHg2MCwgMHg2OSwgMHgxOCwgMHg0MywgMHg2MCwgMHg2MSwgMHhhMSwgMHg2OSwgMHg5OSwgMHg0MywKLTB4MWQsIDB4MDQsIDB4YTEsIDB4NjEsIDB4ZTgsIDB4NjAsIDB4YTAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MjgsIDB4NjEsCi0weDE2LCAweDRhLCAweDE3LCAweDQ5LCAweDY0LCAweDIwLCAweGZiLCAweGY3LCAweDZmLCAweGZjLCAweDE2LCAweDRhLAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgxNSwgMHg0YiwgMHgwMCwgMHgyMCwgMHgzOSwgMHgxYywgMHgzMiwgMHgxYywKLTB4ZmIsIDB4ZjcsIDB4NmUsIDB4ZmMsIDB4MTMsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDgsIDB4MjksIDB4ZmMsIDB4ZDEsCi0weDEyLCAweDQ4LCAweGZiLCAweGY3LCAweDVkLCAweGZjLCAweDEwLCAweDIzLCAweDYwLCAweDY5LCAweDk4LCAweDQzLAotMHg2MCwgMHg2MSwgMHhlOCwgMHg2MCwgMHgwMSwgMHgyMCwgMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgMHhlMSwgMHgxOCwKLTB4YzgsIDB4NzEsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDAyLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyMCwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4YjUsIDB4YjYsIDB4MjEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDQwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZkLCAweGY3LAotMHgwMSwgMHhmZiwgMHgwNiwgMHg0OCwgMHhmYiwgMHhmNywgMHgzMiwgMHhmYywgMHhmZCwgMHhmNywgMHhkNiwgMHhmZSwKLTB4ZmUsIDB4ZjcsIDB4MDQsIDB4ZjgsIDB4ZmUsIDB4ZjcsIDB4MTYsIDB4ZjgsIDB4ZmUsIDB4ZjcsIDB4MjQsIDB4ZjgsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkxLCAweDAzLCAweGZmLCAweGZmLCAweDkwLCAweGI1LCAweGZkLCAweGY3LAotMHg2YiwgMHhmYywgMHgzNCwgMHg0ZiwgMHgwMCwgMHgyNCwgMHhmOSwgMHg2OCwgMHhmOCwgMHgxZCwgMHg3OSwgMHgzMCwKLTB4MDEsIDB4MjksIDB4MGYsIDB4ZDEsIDB4MzEsIDB4NDksIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjcsIDB4MzEsIDB4NDksCi0weGMwLCAweDQ2LCAweDAxLCAweDYwLCAweDMwLCAweDQ5LCAweGMwLCAweDQ2LCAweDBjLCAweDYwLCAweDRjLCAweDYwLAotMHg4YywgMHg2MCwgMHhjYywgMHg2MCwgMHgwYywgMHg2MSwgMHg0YywgMHg2MSwgMHg4YywgMHg2MSwgMHgwNCwgMHhlMCwKLTB4ZjksIDB4MWQsIDB4N2QsIDB4MzEsIDB4ZjksIDB4NjcsIDB4MTIsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MDAsIDB4NjgsCi0weDYwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweGY4LCAweDZmLCAweDIwLCAweDIzLAotMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4NTQsIDB4ZjgsIDB4ZmQsIDB4ZjcsIDB4NGUsIDB4ZmMsCi0weDAwLCAweGYwLCAweDVlLCAweGY5LCAweGZkLCAweGY3LCAweDczLCAweGY4LCAweGZmLCAweGY3LCAweDBjLCAweGZlLAotMHhmZCwgMHhmNywgMHgyZSwgMHhmZSwgMHhmZCwgMHhmNywgMHhiNiwgMHhmZCwgMHhmZCwgMHhmNywgMHhjMiwgMHhmZSwKLTB4ZmQsIDB4ZjcsIDB4NTQsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4MGEsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4OTQsIDB4ZmQsCi0weDAwLCAweGYwLCAweDFhLCAweGZhLCAweGZkLCAweGY3LCAweDljLCAweGZmLCAweGZkLCAweGY3LCAweDBhLCAweGZmLAotMHhmZCwgMHhmNywgMHhkMiwgMHhmZSwgMHhmZCwgMHhmNywgMHgzYywgMHhmYywgMHhmYiwgMHhmNywgMHhkYywgMHhmYSwKLTB4ZmYsIDB4ZjcsIDB4OWMsIDB4ZmYsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGY4LCAweDE4LCAweDA0LCAweDcyLCAweDQ0LCAweDcyLCAweDA3LCAweDIzLCAweDViLCAweDAyLCAweGY4LCAweDE4LAotMHgwNCwgMHg2MywgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwMiwgMHhkMSwgMHhhOCwgMHgyMCwgMHhmZSwgMHhmNywKLTB4YjEsIDB4ZmQsIDB4MDksIDB4NDgsIDB4YzAsIDB4NDYsIDB4NDQsIDB4NjIsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4ZmEsCi0weDA3LCAweDQ4LCAweGZiLCAweGY3LCAweGJkLCAweGZiLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMSwgMHgxMSwgMHg0MCwKLTB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MTUsIDB4OGYsIDB4MjEsIDB4NDAsCi0weDAwLCAweGI1LCAweDA0LCAweDQ4LCAweGZiLCAweGY3LCAweGFhLCAweGZiLCAweGZkLCAweGY3LCAweDVlLCAweGZmLAotMHhmZCwgMHhmNywgMHgyNCwgMHhmYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxNSwgMHg5OSwgMHgyMSwgMHg0MCwKLTB4ZmEsIDB4MjEsIDB4MDMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4NjIsIDB4NDAsIDB4MjEsIDB4NDEsIDB4NjIsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDQ4LCAweDQxLCAweDY5LAotMHgwNywgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MSwgMHg4MiwgMHg2OSwgMHg5YSwgMHg0MywgMHg4MiwgMHg2MSwKLTB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4ZDEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZlLCAweGFmLCAweDlhLCAweDEwLAotMHgwMCwgMHhiNSwgMHgwMiwgMHg0OCwgMHhmYiwgMHhmNywgMHg4MCwgMHhmYiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YzgsIDB4NTcsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4MjQsIDB4NGMsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDQsCi0weDIwLCAweDY4LCAweDAxLCAweDQwLCAweDA5LCAweDIwLCAweDIyLCAweDRlLCAweDIyLCAweDRkLCAweDAwLCAweDI5LAotMHgwNSwgMHhkMSwgMHgyMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNCwgMHhkMSwgMHgyMSwgMHg2OCwgMHg4OSwgMHgwYSwKLTB4MDEsIDB4ZDMsIDB4ZjAsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4MjgsIDB4NjQsIDB4MWQsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weDY1LCAweGZiLCAweDFkLCAweDRmLCAweDFkLCAweDQ5LCAweDg4LCAweDY5LCAweDAxLCAweDMwLCAweDg4LCAweDYxLAotMHgzOCwgMHg3YSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHg3OCwgMHg3YSwgMHgwMCwgMHgyOCwgMHgxZiwgMHhkMCwKLTB4MTksIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4NTcsIDB4ZmIsIDB4MTksIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4NTQsIDB4ZmIsCi0weDAwLCAweDI4LCAweGZhLCAweGQxLCAweDM4LCAweDdhLCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDE2LCAweDQ4LAotMHhmYiwgMHhmNywgMHg0YywgMHhmYiwgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNCwgMHgyMCwgMHg2OCwgMHgwMSwgMHg0MCwKLTB4MTQsIDB4MjAsIDB4MDAsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDQsIDB4ZDEsCi0weDIxLCAweDY4LCAweDg5LCAweDBhLCAweDAxLCAweGQzLCAweGYwLCAweDYwLCAweDAxLCAweGUwLCAweDI4LCAweDY0LAotMHhmZiwgMHhlNywgMHhmZSwgMHhlNywgMHhmZiwgMHhmNywgMHg2NSwgMHhmZCwgMHgwYiwgMHg0OCwgMHhmYiwgMHhmNywKLTB4MzUsIDB4ZmIsIDB4ZmYsIDB4ZjcsIDB4YWYsIDB4ZmYsIDB4Y2QsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDAyLCAweGZmLCAweGZmLAotMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwKLTB4YjUsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4OTksIDB4OWYsIDB4MjEsIDB4NDAsCi0weDAwLCAweDIwLCAweDA3LCAweDRhLCAweDAxLCAweDIxLCAweDA5LCAweDA1LCAweDUwLCAweDYxLCAweGM4LCAweDYwLAotMHhkMCwgMHg2MSwgMHhjOCwgMHg2MSwgMHgwMywgMHgyMywgMHhkYiwgMHgwNCwgMHgwMywgMHg0YSwgMHgwMSwgMHgyMSwKLTB4ZDEsIDB4NjMsIDB4NTgsIDB4NjAsIDB4ZmMsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGMwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweGI1LCAweGMwLCAweGIwLCAweDAxLCAweDIyLCAweDAwLCAweDIxLAotMHgwYSwgMHgyMCwgMHhmYywgMHhmNywgMHhkMSwgMHhmZiwgMHgwNywgMHgxYywgMHhmZiwgMHgyZiwgMHgyOCwgMHhkMCwKLTB4NjksIDB4NDYsIDB4ZmYsIDB4MjIsIDB4MzgsIDB4MWMsIDB4MDEsIDB4MzIsIDB4ZmQsIDB4ZjcsIDB4NTQsIDB4ZjksCi0weGZmLCAweDIzLCAweDAxLCAweDMzLCAweDk4LCAweDQyLCAweDFiLCAweGQxLCAweDBkLCAweDk4LCAweDAwLCAweDA5LAotMHgxOCwgMHhkMywgMHgzOCwgMHgxYywgMHhmZCwgMHhmNywgMHg4ZCwgMHhmOCwgMHgwZSwgMHg0OSwgMHgwMSwgMHgyMiwKLTB4MTIsIDB4MDQsIDB4MDgsIDB4NjgsIDB4MDIsIDB4NDAsIDB4MGQsIDB4NDgsIDB4MDUsIDB4ZDEsIDB4MGEsIDB4NjgsCi0weDEyLCAweDBjLCAweDA2LCAweGQxLCAweDA5LCAweDY4LCAweDg5LCAweDBhLCAweDAzLCAweGQzLCAweDBhLCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMiwgMHhlMCwgMHgwOSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwKLTB4ZmYsIDB4ZjcsIDB4YmMsIDB4ZmYsIDB4MzgsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4NzQsIDB4ZjgsIDB4NDAsIDB4YjAsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MTcsIDB4NDksIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDA4LCAweDY4LCAweDAyLCAweDQwLCAweDA2LCAweDIwLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDBhLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwOSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMywgMHhkMywgMHgxMSwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MTAsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsCi0weDAzLCAweDIwLCAweGZlLCAweGY3LCAweGQzLCAweGZjLCAweGZiLCAweGY3LCAweDBkLCAweGZmLCAweDAxLCAweDIzLAotMHgxOCwgMHg0MywgMHhmYiwgMHhmNywgMHhlNywgMHhmZiwgMHhmZiwgMHhmNywgMHg4MywgMHhmZSwgMHhmZiwgMHhmNywKLTB4OWQsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4MDUsIDB4ZmUsIDB4ZmYsIDB4ZjcsIDB4ZjUsIDB4ZmUsIDB4ZmYsIDB4ZjcsCi0weDA5LCAweGZmLCAweGZmLCAweGY3LCAweDliLCAweGZkLCAweGZmLCAweGY3LCAweDIxLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4NDYsIDB4NGEsIDB4MDEsIDB4MjEsIDB4YzksIDB4MDMsCi0weDQ1LCAweDRkLCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGVjLCAweDE4LCAweGExLCAweDYxLCAweDI4LCAweDg4LAotMHg0MCwgMHgwNCwgMHg0MywgMHg0YiwgMHhjMCwgMHgxOCwgMHg4NywgMHgxYSwgMHgwNCwgMHgyMCwgMHhhZiwgMHg2MCwKLTB4NDEsIDB4NGUsIDB4YzAsIDB4NDYsIDB4YjAsIDB4NjEsIDB4MDgsIDB4MjAsIDB4YzgsIDB4MjMsIDB4NDMsIDB4NDMsCi0weGJiLCAweDQyLCAweDIxLCAweGQ5LCAweDQxLCAweDAwLCAweDNkLCAweDRlLCAweGMwLCAweDQ2LCAweDMxLCAweDYxLAotMHhiNiwgMHg2OSwgMHgyMCwgMHgyMywgMHg5YiwgMHgxYiwgMHgzYSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMywgMHg2MSwKLTB4MTAsIDB4M2IsIDB4MzMsIDB4NjIsIDB4OGIsIDB4MDAsIDB4ZmYsIDB4MWEsIDB4NDAsIDB4MDgsIDB4ODEsIDB4NDIsCi0weDE3LCAweGQzLCAweGI4LCAweDIzLCAweDQzLCAweDQzLCAweGJiLCAweDQyLCAweDA4LCAweGQ5LCAweDQxLCAweDFlLAotMHgzMiwgMHg0YiwgMHhjMCwgMHg0NiwgMHg5OSwgMHg4MSwgMHhkOSwgMHg4MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgzOCwKLTB4NTgsIDB4NjEsIDB4MGEsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4ODEsIDB4NDIsIDB4ZWYsIDB4ZDIsIDB4MDYsIDB4ZTAsCi0weDJjLCAweDRlLCAweGIzLCAweDY5LCAweDAxLCAweDMzLCAweGIzLCAweDYxLCAweDQwLCAweDAwLCAweDg4LCAweDQyLAotMHhkMiwgMHhkOSwgMHgyYSwgMHg0OSwgMHgwMCwgMHgyMCwgMHhhMywgMHg2OSwgMHg5YiwgMHgwOCwgMHgwNywgMHhkMCwKLTB4MjgsIDB4NGIsIDB4ODcsIDB4MDAsIDB4Y2IsIDB4NTEsIDB4YTcsIDB4NjksIDB4YmYsIDB4MDgsIDB4MDEsIDB4MzAsCi0weDg3LCAweDQyLCAweGY4LCAweGQ4LCAweDIyLCAweDQ5LCAweGMwLCAweDQ2LCAweDhhLCAweDYyLCAweDhjLCAweDg5LAotMHg1OCwgMHgyMCwgMHg2MCwgMHg0MywgMHg4NywgMHgxOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyYywKLTB4MGEsIDB4ZGQsIDB4NTgsIDB4MjMsIDB4NDMsIDB4NDMsIDB4OGMsIDB4NmEsIDB4ZTMsIDB4MTgsIDB4MDEsIDB4MzAsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDlhLCAweDYwLCAweDhiLCAweDg5LCAweDgzLCAweDQyLCAweGY0LCAweGRjLAotMHhjZiwgMHg2MiwgMHhjYywgMHg4OSwgMHg2MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwgMHgwMSwgMHhjNywgMHgxOSwKLTB4MDAsIDB4MjAsIDB4MDAsIDB4MmMsIDB4MGIsIDB4ZGQsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4NWIsIDB4MDEsCi0weGNjLCAweDZhLCAweGUzLCAweDE4LCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDlhLCAweDYwLAotMHhjYiwgMHg4OSwgMHg4MywgMHg0MiwgMHhmMywgMHhkYywgMHg0ZiwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwYiwgMHg2OSwKLTB4MDAsIDB4MmIsIDB4MDcsIDB4ZDksIDB4ODcsIDB4MDAsIDB4NGIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NTEsCi0weDBiLCAweDY5LCAweDAxLCAweDMwLCAweDgzLCAweDQyLCAweGY3LCAweGQ4LCAweDQ5LCAweDZhLCAweDgwLCAweDAwLAotMHgwOCwgMHgxOCwgMHgwNCwgMHgzOCwgMHgyOCwgMHg2MSwgMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YjAsIDB4YmUsIDB4MjEsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweGFkLCAweGRlLCAweDAwLAotMHgwYSwgMHg0OCwgMHgwMSwgMHgyMywgMHgxYiwgMHgwNiwgMHg0MSwgMHg2OSwgMHg5OSwgMHg0MywgMHgxYSwgMHgwOSwKLTB4NDEsIDB4NjEsIDB4ZDEsIDB4NjAsIDB4MDAsIDB4MjEsIDB4YTEsIDB4MjIsIDB4NTIsIDB4MDMsIDB4OTEsIDB4NjEsCi0weDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDYxLCAweDAxLCAweDIwLCAweDAwLCAweDA2LAotMHg1OSwgMHgwNSwgMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjQsIDB4MDIsIDB4MWMsIDB4MGIsIDB4NDgsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzMsIDB4MTgsCi0weDlhLCAweDYxLCAweDAxLCAweDIzLCAweDFiLCAweDA2LCAweDQyLCAweDY5LCAweDFhLCAweDQzLCAweDQyLCAweDYxLAotMHg4NywgMHg2OSwgMHg5ZiwgMHg0MywgMHgwMSwgMHgyMywgMHgxYiwgMHgwNSwKLTB4ODcsIDB4NjEsIDB4ZGEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTgsIDB4NjEsIDB4YTEsIDB4MjAsCi0weDQwLCAweDAzLCAweDgxLCAweDYxLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNSwgMHhmZiwgMHhmNywgMHhjOSwgMHhmZiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhmMCwgMHgyMCwgMHhmOCwKLTB4MDAsIDB4MjAsIDB4MDksIDB4NDksIDB4MDAsIDB4MjIsIDB4MDMsIDB4MDEsIDB4NWYsIDB4MTgsIDB4MzMsIDB4MjMsCi0weDliLCAweDAxLCAweGZiLCAweDE4LCAweDlhLCAweDYyLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAweGY2LCAweGQzLAotMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHgzMywgMHhmOCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MWQsIDB4M2UsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweGI1LCAweDAyLCAweDQ4LCAweDAwLCAweGYwLCAweDA0LCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhOCwgMHg2MSwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHgwZiwgMHg0YiwKLTB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4MDAsIDB4MjgsIDB4MGUsIDB4ZDAsIDB4YzgsIDB4NjEsIDB4MTgsIDB4MWMsCi0weDU5LCAweDY5LCAweDUzLCAweDAxLCAweDE5LCAweDQzLCAweDQxLCAweDYxLCAweDg3LCAweDY5LCAweDlmLCAweDQzLAotMHg4NywgMHg2MSwgMHhkMSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MSwgMHg4MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MTgsIDB4MWMsIDB4NWYsIDB4NjksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4OWYsIDB4NDMsCi0weDQ3LCAweDYxLCAweGQ3LCAweDYwLCAweDAwLCAweDIwLCAweGM4LCAweDYxLCAweGYzLCAweGU3LCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNCwgMHgwNywgMHgxYywgMHgwMCwgMHgyMCwgMHgxNywgMHg0YywKLTB4MDMsIDB4MDEsIDB4MWQsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZWIsIDB4MTgsIDB4OWQsIDB4NmEsCi0weGJkLCAweDQyLCAweDA1LCAweGQxLCAweDFkLCAweDZiLCAweDk1LCAweDQyLCAweDAyLCAweGQxLCAweGRiLCAweDZhLAotMHg4YiwgMHg0MiwgMHgxYywgMHhkMCwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhlZSwgMHhkMywgMHgwMCwgMHgyMCwKLTB4MDMsIDB4MDEsIDB4MWQsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZWIsIDB4MTgsIDB4OWIsIDB4NmEsCi0weDAwLCAweDJiLCAweDA5LCAweGQxLCAweDAzLCAweDAxLCAweDFjLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLAotMHhlMywgMHgxOCwgMHgxYSwgMHg2MywgMHhkOSwgMHg2MiwgMHg1YSwgMHg2MywgMHg5ZiwgMHg2MiwgMHgwMiwgMHhlMCwKLTB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZWEsIDB4ZDMsIDB4MGIsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDAsIDB4MjAsCi0weGMwLCAweDQzLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgwMSwgMHgxYywgMHgwMCwgMHgyMiwgMHgwMSwgMHgyMCwgMHgxNiwgMHg0ZiwgMHgwMSwgMHhlMCwKLTB4MDAsIDB4MmEsIDB4MDcsIDB4ZDEsIDB4MDMsIDB4MDEsIDB4ZGMsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGUzLCAweDE4LCAweDliLCAweDY5LCAweDhiLCAweDQyLCAweDExLCAweGQxLCAweDAyLCAweDAxLCAweGQyLCAweDE5LAotMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMiwgMHgxOCwgMHg5MywgMHg2YSwgMHhjMCwgMHg0NiwgMHg5MywgMHg2MSwKLTB4ZDMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4ZDMsIDB4NjEsIDB4MTMsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjIsCi0weDUzLCAweDZiLCAweGMwLCAweDQ2LCAweDUzLCAweDYyLCAweDAxLCAweDIyLCAweDAxLCAweDMwLCAweDBiLCAweDI4LAotMHhlMCwgMHhkMywgMHgwNywgMHg0YiwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMSwgMHg5YSwgMHg2OCwgMHg4YSwgMHg0MiwKLTB4MDMsIDB4ZDEsIDB4MDAsIDB4MjEsIDB4OTksIDB4NjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsCi0weGMwLCAweDQzLCAweGZhLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU4LCAweDFiLCAweDAwLCAweDgwLAotMHgwYiwgMHgyOCwgMHgxNywgMHhkYSwgMHgwYywgMHg0OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg4YSwgMHg2OSwKLTB4MTMsIDB4NDMsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4OGIsIDB4NjEsIDB4MTMsIDB4NjEsIDB4MDAsIDB4MDEsCi0weDQwLCAweDE4LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDAzLCAweDZiLCAweGMwLCAweDQ2LAotMHg0MywgMHg2MywgMHg1MywgMHgwMSwgMHg4OCwgMHg2OSwgMHg5OCwgMHg0MywgMHg4OCwgMHg2MSwgMHgxMCwgMHg2MSwKLTB4MDEsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI0LCAweDA4LCAweDRhLCAweGQwLCAweDY5LCAweDAwLCAweDIxLCAweDA3LCAweDRmLCAweGQzLCAweDY5LAotMHg4MywgMHg0MiwgMHgwMiwgMHhkOSwgMHhmYywgMHgxYSwgMHgyMCwgMHgxOCwgMHgwMCwgMHhlMCwgMHhjMCwgMHgxYSwKLTB4MDksIDB4MTgsIDB4MTgsIDB4MWMsIDB4YjksIDB4NDIsIDB4ZjQsIDB4ZDksIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIwLCAweDE0LCAweDQwLCAweGE4LCAweDYxLCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgwMCwgMHgyNCwgMHgwMCwgMHgyZiwgMHgwNCwgMHhkMywgMHhmZiwgMHhmNywgMHhlMywgMHhmZiwgMHgwMSwgMHgzNCwKLTB4YmMsIDB4NDIsIDB4ZmEsIDB4ZDksIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCBhOGU1NjUxLi45ZGQ0Zjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0xMDAsMTAgKzEwMCwxMSBAQAogI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2CiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidHlwaG9vbiIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OIAkiMS41LjgiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMDYvMTEvMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAJIjEuNS45IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hciAyLCAyMDA5IgogI2RlZmluZSBQRlgJCQlEUlZfTU9EVUxFX05BTUUgIjogIgogI2RlZmluZSBFUlJfUEZYCQkJS0VSTl9FUlIgUEZYCisjZGVmaW5lIEZJUk1XQVJFX05BTUUJCSIzY29tL3R5cGhvb24uYmluIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMjksOSArMTMwLDkgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgInR5cGhvb24uaCIKLSNpbmNsdWRlICJ0eXBob29uLWZpcm13YXJlLmgiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KICAgICAidHlwaG9vbi5jOiB2ZXJzaW9uICIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpXG4iOwpAQCAtMTM5LDYgKzE0MCw3IEBACiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBEaWxsb3cgPGRhdmVAdGhlZGlsbG93cy5vcmc+Iik7CiBNT0RVTEVfVkVSU0lPTihEUlZfTU9EVUxFX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX05BTUUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIFR5cGhvb24gRmFtaWx5ICgzQzk5MCwgM0NSOTkwLCBhbmQgdmFyaWFudHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHJ4X2NvcHlicmVhaywgIlBhY2tldHMgc21hbGxlciB0aGFuIHRoaXMgYXJlIGNvcGllZCBhbmQgIgogCQkJICAgICAgICJ0aGUgYnVmZmVyIGdpdmVuIGJhY2sgdG8gdGhlIE5JQy4gRGVmYXVsdCAiCkBAIC0xMzQ0LDE0ICsxMzQ2LDc0IEBACiAJdHAtPnR4SGlSaW5nLmxhc3RSZWFkID0gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdHlwaG9vbl9mdzsKKworc3RhdGljIGludAordHlwaG9vbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCB0eXBob29uICp0cCkKK3sKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqZkhkcjsKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqc0hkcjsKKwljb25zdCB1OCAqaW1hZ2VfZGF0YTsKKwl1MzIgbnVtU2VjdGlvbnM7CisJdTMyIHNlY3Rpb25fbGVuOworCXUzMiByZW1haW5pbmc7CisJaW50IGVycjsKKworCWlmICh0eXBob29uX2Z3KQorCQlyZXR1cm4gMDsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnR5cGhvb25fZncsIEZJUk1XQVJFX05BTUUsICZ0cC0+cGRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCQl0cC0+bmFtZSwgRklSTVdBUkVfTkFNRSk7CisJCXJldHVybiBlcnI7CisJfQorCisJaW1hZ2VfZGF0YSA9ICh1OCAqKSB0eXBob29uX2Z3LT5kYXRhOworCXJlbWFpbmluZyA9IHR5cGhvb25fZnctPnNpemU7CisJaWYgKHJlbWFpbmluZyA8IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlcikpCisJCWdvdG8gaW52YWxpZF9mdzsKKworCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKKwlpZiAobWVtY21wKGZIZHItPnRhZywgIlRZUEhPT04iLCA4KSkKKwkJZ290byBpbnZhbGlkX2Z3OworCisJbnVtU2VjdGlvbnMgPSBsZTMyX3RvX2NwdShmSGRyLT5udW1TZWN0aW9ucyk7CisJaW1hZ2VfZGF0YSArPSBzaXplb2Yoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIpOworCXJlbWFpbmluZyAtPSBzaXplb2Yoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIpOworCisJd2hpbGUgKG51bVNlY3Rpb25zLS0pIHsKKwkJaWYgKHJlbWFpbmluZyA8IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlcikpCisJCQlnb3RvIGludmFsaWRfZnc7CisKKwkJc0hkciA9IChzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqKSBpbWFnZV9kYXRhOworCQlpbWFnZV9kYXRhICs9IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlcik7CisJCXNlY3Rpb25fbGVuID0gbGUzMl90b19jcHUoc0hkci0+bGVuKTsKKworCQlpZiAocmVtYWluaW5nIDwgc2VjdGlvbl9sZW4pCisJCQlnb3RvIGludmFsaWRfZnc7CisKKwkJaW1hZ2VfZGF0YSArPSBzZWN0aW9uX2xlbjsKKwkJcmVtYWluaW5nIC09IHNlY3Rpb25fbGVuOworCX0KKworCXJldHVybiAwOworCitpbnZhbGlkX2Z3OgorCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2VcbiIsIHRwLT5uYW1lKTsKKwlyZWxlYXNlX2Zpcm13YXJlKHR5cGhvb25fZncpOworCXR5cGhvb25fZncgPSBOVUxMOworCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgaW50CiB0eXBob29uX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB0eXBob29uICp0cCkKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5pb2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGRldjsKLQlzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqZkhkcjsKLQlzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqc0hkcjsKLQl1OCAqaW1hZ2VfZGF0YTsKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqZkhkcjsKKwljb25zdCBzdHJ1Y3QgdHlwaG9vbl9zZWN0aW9uX2hlYWRlciAqc0hkcjsKKwljb25zdCB1OCAqaW1hZ2VfZGF0YTsKIAl2b2lkICpkcGFnZTsKIAlkbWFfYWRkcl90IGRwYWdlX2RtYTsKIAlfX3N1bTE2IGNzdW07CkBAIC0xMzY1LDIwICsxNDI3LDEyIEBACiAJaW50IGk7CiAJaW50IGVycjsKIAotCWVyciA9IC1FSU5WQUw7Ci0JZkhkciA9IChzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqKSB0eXBob29uX2Zpcm13YXJlX2ltYWdlOwotCWltYWdlX2RhdGEgPSAodTggKikgZkhkcjsKLQotCWlmKG1lbWNtcChmSGRyLT50YWcsICJUWVBIT09OIiwgOCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBmaXJtd2FyZSBpbWFnZSFcbiIsIHRwLT5uYW1lKTsKLQkJZ290byBlcnJfb3V0OwotCX0KKwlpbWFnZV9kYXRhID0gKHU4ICopIHR5cGhvb25fZnctPmRhdGE7CisJZkhkciA9IChzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqKSBpbWFnZV9kYXRhOwogCiAJLyogQ2Fubm90IGp1c3QgbWFwIHRoZSBmaXJtd2FyZSBpbWFnZSB1c2luZyBwY2lfbWFwX3NpbmdsZSgpIGFzCi0JICogdGhlIGZpcm13YXJlIGlzIHBhcnQgb2YgdGhlIGtlcm5lbC9tb2R1bGUgaW1hZ2UsIHNvIHdlIGFsbG9jYXRlCi0JICogc29tZSBjb25zaXN0ZW50IG1lbW9yeSB0byBjb3B5IHRoZSBzZWN0aW9ucyBpbnRvLCBhcyBpdCBpcyBzaW1wbGVyLAotCSAqIGFuZCBzaG9ydC1saXZlZC4gSWYgd2UgZXZlciBzcGxpdCBvdXQgYW5kIHJlcXVpcmUgYSB1c2VybGFuZAotCSAqIGZpcm13YXJlIGxvYWRlciwgdGhlbiB3ZSBjYW4gcmV2aXNpdCB0aGlzLgorCSAqIHRoZSBmaXJtd2FyZSBpcyB2bWFsbG9jKCknZCBhbmQgbWF5IG5vdCBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsCisJICogc28gd2UgYWxsb2NhdGUgc29tZSBjb25zaXN0ZW50IG1lbW9yeSB0byBjb3B5IHRoZSBzZWN0aW9ucyBpbnRvLgogCSAqLwogCWVyciA9IC1FTk9NRU07CiAJZHBhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBQQUdFX1NJWkUsICZkcGFnZV9kbWEpOwpAQCAtMjA4Niw2ICsyMTQwLDEwIEBACiAJc3RydWN0IHR5cGhvb24gKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyOwogCisJZXJyID0gdHlwaG9vbl9yZXF1ZXN0X2Zpcm13YXJlKHRwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwogCWVyciA9IHR5cGhvb25fd2FrZXVwKHRwLCBXYWl0U2xlZXApOwogCWlmKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHdha2V1cCBkZXZpY2VcbiIsIGRldi0+bmFtZSk7CkBAIC0yNjI0LDYgKzI2ODIsOCBAQAogc3RhdGljIHZvaWQgX19leGl0CiB0eXBob29uX2NsZWFudXAodm9pZCkKIHsKKwlpZiAodHlwaG9vbl9mdykKKwkJcmVsZWFzZV9maXJtd2FyZSh0eXBob29uX2Z3KTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnR5cGhvb25fZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKaW5kZXggMWMwOTVjNi4uYTExMDMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCkBAIC0xNTM2LDMyICsxNTM2LDE1IEBACiBzdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwcml2LT5ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5LCAqbWRpbzsKLQljb25zdCBwaGFuZGxlICpwaDsKLQljaGFyIGJ1c19uYW1lW01JSV9CVVNfSURfU0laRV07Ci0JY29uc3QgdW5zaWduZWQgaW50ICppZDsKKwlzdHJ1Y3QgdWNjX2dldGhfaW5mbyAqdWdfaW5mbyA9IHByaXYtPnVnX2luZm87CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQljaGFyIHBoeV9pZFtCVVNfSURfU0laRV07CiAKIAlwcml2LT5vbGRsaW5rID0gMDsKIAlwcml2LT5vbGRzcGVlZCA9IDA7CiAJcHJpdi0+b2xkZHVwbGV4ID0gLTE7CiAKLQlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKLQlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwotCW1kaW8gPSBvZl9nZXRfcGFyZW50KHBoeSk7Ci0KLQlpZCA9IG9mX2dldF9wcm9wZXJ0eShwaHksICJyZWciLCBOVUxMKTsKLQotCW9mX25vZGVfcHV0KHBoeSk7Ci0Jb2Zfbm9kZV9wdXQobWRpbyk7Ci0KLQlmc2xfcHFfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7Ci0Jc25wcmludGYocGh5X2lkLCBzaXplb2YocGh5X2lkKSwgIiVzOiUwMngiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfbmFtZSwgKmlkKTsKLQotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5X2lkLCAmYWRqdXN0X2xpbmssIDAsIHByaXYtPnBoeV9pbnRlcmZhY2UpOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgdWdfaW5mby0+cGh5X2J1c19pZCwgJmFkanVzdF9saW5rLCAwLAorCQkJICAgICBwcml2LT5waHlfaW50ZXJmYWNlKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewogCQlwcmludGsoIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKQEAgLTM1MTgsNiArMzUwMSwyMCBAQAogCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfTUlJOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHVjY19nZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVjY19nZXRoX29wZW4sCisJLm5kb19zdG9wCQk9IHVjY19nZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1Y2NfZ2V0aF9zdGFydF94bWl0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHVjY19nZXRoX3NldF9tdWx0aSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdWNjX2dldGhfdGltZW91dCwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdWNjX25ldHBvbGwsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgdWNjX2dldGhfcHJvYmUoc3RydWN0IG9mX2RldmljZSogb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwpAQCAtMzYyOSwxMCArMzYyNiwxMiBAQAogCXVnX2luZm8tPnVmX2luZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCWZpeGVkX2xpbmsgPSBvZl9nZXRfcHJvcGVydHkobnAsICJmaXhlZC1saW5rIiwgTlVMTCk7CiAJaWYgKGZpeGVkX2xpbmspIHsKLQkJc25wcmludGYodWdfaW5mby0+bWRpb19idXMsIE1JSV9CVVNfSURfU0laRSwgIjAiKTsKLQkJdWdfaW5mby0+cGh5X2FkZHJlc3MgPSBmaXhlZF9saW5rWzBdOworCQlzbnByaW50Zih1Z19pbmZvLT5waHlfYnVzX2lkLCBzaXplb2YodWdfaW5mby0+cGh5X2J1c19pZCksCisJCQkgUEhZX0lEX0ZNVCwgIjAiLCBmaXhlZF9saW5rWzBdKTsKIAkJcGh5ID0gTlVMTDsKIAl9IGVsc2UgeworCQljaGFyIGJ1c19uYW1lW01JSV9CVVNfSURfU0laRV07CisKIAkJcGggPSBvZl9nZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7CiAJCXBoeSA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwaCk7CiAKQEAgLTM2NDMsNyArMzY0Miw2IEBACiAJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7CiAJCWlmIChwcm9wID09IE5VTEwpCiAJCQlyZXR1cm4gLTE7Ci0JCXVnX2luZm8tPnBoeV9hZGRyZXNzID0gKnByb3A7CiAKIAkJLyogU2V0IHRoZSBidXMgaWQgKi8KIAkJbWRpbyA9IG9mX2dldF9wYXJlbnQocGh5KTsKQEAgLTM2NTcsOCArMzY1NSw5IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLTE7CiAKLQkJc25wcmludGYodWdfaW5mby0+bWRpb19idXMsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwKLQkJCQlyZXMuc3RhcnQmMHhmZmZmZik7CisJCWZzbF9wcV9tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKKwkJc25wcmludGYodWdfaW5mby0+cGh5X2J1c19pZCwgc2l6ZW9mKHVnX2luZm8tPnBoeV9idXNfaWQpLAorCQkJIiVzOiUwMngiLCBidXNfbmFtZSwgKnByb3ApOwogCX0KIAogCS8qIGdldCB0aGUgcGh5IGludGVyZmFjZSB0eXBlLCBvciBkZWZhdWx0IHRvIE1JSSAqLwpAQCAtMzczMSwxOSArMzczMCwxMSBAQAogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwogCXVlY19zZXRfZXRodG9vbF9vcHMoZGV2KTsKLQlkZXYtPm9wZW4gPSB1Y2NfZ2V0aF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdWNjX2dldGhfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB1Y2NfZ2V0aF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ1Y2NfZ2V0aF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCUlOSVRfV09SSygmdWdldGgtPnRpbWVvdXRfd29yaywgdWNjX2dldGhfdGltZW91dF93b3JrKTsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZ1Z2V0aC0+bmFwaSwgdWNjX2dldGhfcG9sbCwgVUNDX0dFVEhfREVWX1dFSUdIVCk7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHVjY19uZXRwb2xsOwotI2VuZGlmCi0JZGV2LT5zdG9wID0gdWNjX2dldGhfY2xvc2U7Ci0vLyAgICBkZXYtPmNoYW5nZV9tdHUgPSB1Y2NfZ2V0aF9jaGFuZ2VfbXR1OwogCWRldi0+bXR1ID0gMTUwMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHVjY19nZXRoX3NldF9tdWx0aTsKIAogCXVnZXRoLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcubXNnX2VuYWJsZSwgVUdFVEhfTVNHX0RFRkFVTFQpOwogCXVnZXRoLT5waHlfaW50ZXJmYWNlID0gcGh5X2ludGVyZmFjZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCmluZGV4IDY2ZDE4OTcuLmUzYTI1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaApAQCAtMTEwMSw4ICsxMTAxLDcgQEAKIAl1MzIgZXZlbnRSZWdNYXNrOwogCXUxNiBwYXVzZVBlcmlvZDsKIAl1MTYgZXh0ZW5zaW9uRmllbGQ7Ci0JdTggcGh5X2FkZHJlc3M7Ci0JY2hhciBtZGlvX2J1c1tNSUlfQlVTX0lEX1NJWkVdOworCWNoYXIgcGh5X2J1c19pZFtCVVNfSURfU0laRV07CiAJdTggd2VpZ2h0ZmFjdG9yW05VTV9UWF9RVUVVRVNdOwogCXU4IGludGVycnVwdGNvYWxlc2NpbmdtYXh2YWx1ZVtOVU1fUlhfUVVFVUVTXTsKIAl1OCBsMnF0W1VDQ19HRVRIX1ZMQU5fUFJJT1JJVFlfTUFYXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IGUwMDk0ODEuLjg3YjRhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtODA3LDYgKzgwNywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTcyX3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODgxNzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQgPSAwOwpAQCAtODQ2LDkgKzg1OCw4IEBACiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweDNmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxNzJfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZheDg4MTcyX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODgxNzJfZXRodG9vbF9vcHM7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwpAQCAtODk4LDYgKzkwOSwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODg3NzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQsIGVtYmRfcGh5OwpAQCAtOTYyLDcgKzk4NSw2IEBACiAJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CkBAIC05NzgsNyArMTAwMCw3IEBACiAKIAltc2xlZXAoMTUwKTsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmYXg4ODc3Ml9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCiAJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKQEAgLTExODEsNiArMTIwMywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0LAorCS5uZG9fZG9faW9jdGwgCQk9IGFzaXhfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGF4ODgxNzhfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyBpbnQgYXg4ODE3OF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKQEAgLTEyNDcsMTEgKzEyODEsMTAgQEAKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHhmZjsKIAlkZXYtPm1paS5zdXBwb3J0c19nbWlpID0gMTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsKKworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmF4ODgxNzhfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3OF9ldGh0b29sX29wczsKLQlkZXYtPm5ldC0+Y2hhbmdlX210dSA9ICZheDg4MTc4X2NoYW5nZV9tdHU7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CiAJZGJnKCJQSFlJRD0weCUwOHgiLCBwaHlpZCk7CkBAIC0xNDUxLDYgKzE0ODQsMTQgQEAKIAkvLyBDYWJsZXMtdG8tR28gVVNCIEV0aGVybmV0IEFkYXB0ZXIKIAlVU0JfREVWSUNFKDB4MGI5NSwgMHg3NzJhKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODg3NzJfaW5mbywKK30sIHsKKwkvLyBBQk9DT00gZm9yIHBjaQorCVVTQl9ERVZJQ0UoMHgxNGVhLCAweGFiMTEpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3OF9pbmZvLAorfSwgeworCS8vIEFTSVggODg3NzJhCisJVVNCX0RFVklDRSgweDBkYjAsIDB4YTg3NyksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZheDg4NzcyX2luZm8sCiB9LAogCXsgfSwJCS8vIEVORAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IGNiN2FjYmIuLmI5ZGQ0MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtMTYzLDcgKzE2Myw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXVuc2lnbmVkIGludCB0eF9wdHIsIHR4X2lkeDsKQEAgLTI0NSw4ICsyNDQsOCBAQAogCQlpZighY2F0Yy0+aXNfZjV1MDExKSB7CiAJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7CiAJCQlpZiAocGt0X2xlbiA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJCWNhdGMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjYyLDggKzI2MSw4IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNhdGMtPm5ldGRldik7CiAJCW5ldGlmX3J4KHNrYik7CiAKLQkJY2F0Yy0+c3RhdHMucnhfcGFja2V0cysrOwotCQljYXRjLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCiAJCS8qIEY1VTAxMSBvbmx5IGRvZXMgb25lIHBhY2tldCBwZXIgUlggKi8KIAkJaWYgKGNhdGMtPmlzX2Y1dTAxMSkKQEAgLTM4Niw3ICszODUsNyBAQAogCQlkYmcoIlR4IFJlc2V0LiIpOwogCQl1cmItPnN0YXR1cyA9IDA7CiAJCWNhdGMtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQljYXRjLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJY2xlYXJfYml0KFRYX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CiAJCW5ldGlmX3dha2VfcXVldWUoY2F0Yy0+bmV0ZGV2KTsKIAkJcmV0dXJuOwpAQCAtNDEyLDcgKzQxMSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGNhdGNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgaW50IGNhdGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDQzLDggKzQ0Miw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHIgPj0gMCkgewotCQljYXRjLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJY2F0Yy0+c3RhdHMudHhfcGFja2V0cysrOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAl9CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC01ODgsMTUgKzU4NywxNSBAQAogCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSBUeFNpbmdsZUNvbGw6CiAJCWNhc2UgVHhNdWx0aUNvbGw6Ci0JCQljYXRjLT5zdGF0cy5jb2xsaXNpb25zICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJCWNhc2UgVHhFeGNlc3NDb2xsOgotCQkJY2F0Yy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7Ci0JCQljYXRjLT5zdGF0cy50eF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CiAJCQlicmVhazsKIAkJY2FzZSBSeEZyYW1FcnI6Ci0JCQljYXRjLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7Ci0JCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJfQogCkBAIC02MTQsMTIgKzYxMyw2IEBACiAJbW9kX3RpbWVyKCZjYXRjLT50aW1lciwgamlmZmllcyArIFNUQVRTX1VQREFURSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY2F0Y19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JcmV0dXJuICZjYXRjLT5zdGF0czsKLX0KLQogLyoKICAqIFJlY2VpdmUgbW9kZXMuIEJyb2FkY2FzdCwgTXVsdGljYXN0LCBQcm9taXNjLgogICovCkBAIC03NTAsNiArNzQzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2F0Y19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjYXRjX29wZW4sCisJLm5kb19zdG9wCQk9IGNhdGNfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gY2F0Y19zdGFydF94bWl0LAorCisJLm5kb190eF90aW1lb3V0CQk9IGNhdGNfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGNhdGNfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKgogICogVVNCIHByb2JlLCBkaXNjb25uZWN0LgogICovCkBAIC03NzQsMTMgKzc3OSw4IEBACiAKIAljYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCW5ldGRldi0+b3BlbiA9IGNhdGNfb3BlbjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNhdGNfaGFyZF9zdGFydF94bWl0OwotCW5ldGRldi0+c3RvcCA9IGNhdGNfc3RvcDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGNhdGNfZ2V0X3N0YXRzOwotCW5ldGRldi0+dHhfdGltZW91dCA9IGNhdGNfdHhfdGltZW91dDsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmY2F0Y19uZXRkZXZfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gY2F0Y19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm9wcyk7CiAKIAljYXRjLT51c2JkZXYgPSB1c2JkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKaW5kZXggMGUwNjFkZi4uNTVlOGVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYwpAQCAtNTU5LDYgKzU1OSwxMSBAQAogCVVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19FVEhFUk5FVCwKIAkJCVVTQl9DRENfUFJPVE9fTk9ORSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBFcmljc3NvbiBGMzUwN2cgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiZGIsIDB4MTkwMCwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKIH0sCiAJeyB9LAkJLy8gRU5ECiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDViNjdiYmYuLjZmYzRmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTQxOSw2ICs0MTksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbTk2MDFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IGRtOTYwMV9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZG05NjAxX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgZG05NjAxX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0OwpAQCAtNDI4LDkgKzQ0MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBkbTk2MDFfaW9jdGw7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+bmV0LT5zZXRfbWFjX2FkZHJlc3MgPSBkbTk2MDFfc2V0X21hY19hZGRyZXNzOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmRtOTYwMV9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZkbTk2MDFfZXRodG9vbF9vcHM7CiAJZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBETV9UWF9PVkVSSEVBRDsKIAlkZXYtPmhhcmRfbXR1ID0gZGV2LT5uZXQtPm10dSArIGRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW47CkBAIC02MzUsNiArNjQ1LDEwIEBACiAJVVNCX0RFVklDRSgweDBhNDcsIDB4OTYwMSksCS8qIEhpcm9zZSBVU0ItMTAwICovCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAogCSB9LAorCXsKKwlVU0JfREVWSUNFKDB4MGZlNiwgMHg4MTAxKSwJLyogRE05NjAxIFVTQiB0byBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgKi8KKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCisJIH0sCiAJe30sCQkJLy8gRU5ECiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggYTA3NGMxNi4uY2RlNDIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMjM2MywxMiArMjM2Myw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0vKiBGcmVlcyBhIGdlbmVyYWwgaHNvIGRldmljZSAqLwotc3RhdGljIHZvaWQgaHNvX2ZyZWVfZGV2aWNlKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KQotewotCWtmcmVlKGhzb19kZXYpOwotfQotCiAvKiBDcmVhdGVzIGEgZ2VuZXJhbCBoc28gZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IGhzb19kZXZpY2UgKmhzb19jcmVhdGVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJCQkgICAgaW50IHBvcnRfc3BlYykKQEAgLTI0MzEsOSArMjQyNSwxNiBAQAogCQlmcmVlX25ldGRldihoc29fbmV0LT5uZXQpOwogCX0KIAotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc29fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBoc29fbmV0X29wZW4sCisJLm5kb19zdG9wCT0gaHNvX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoc29fbmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0ID0gaHNvX25ldF90eF90aW1lb3V0LAorfTsKKwogLyogaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgKi8KIHN0YXRpYyB2b2lkIGhzb19uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewpAQCAtMjQ0MiwxMCArMjQ0Myw3IEBACiAJRDEoInNpemVvZiBoc29fbmV0IGlzICVkIiwgKGludClzaXplb2YoKmhzb19uZXQpKTsKIAogCS8qIGZpbGwgaW4gdGhlIG90aGVyIGZpZWxkcyAqLwotCW5ldC0+b3BlbiA9IGhzb19uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBoc29fbmV0X2Nsb3NlOwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gaHNvX25ldF9zdGFydF94bWl0OwotCW5ldC0+dHhfdGltZW91dCA9IGhzb19uZXRfdHhfdGltZW91dDsKKwluZXQtPm5ldGRldl9vcHMgPSAmaHNvX25ldGRldl9vcHM7CiAJbmV0LT53YXRjaGRvZ190aW1lbyA9IEhTT19ORVRfVFhfVElNRU9VVDsKIAluZXQtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDsKIAluZXQtPnR5cGUgPSBBUlBIUkRfTk9ORTsKQEAgLTI2NDUsNyArMjY0Myw3IEBACiAJfQogCWhzb19mcmVlX3Rpb21nZXQoc2VyaWFsKTsKIAlrZnJlZShzZXJpYWwpOwotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIH0KIAogLyogQ3JlYXRlcyBhIGJ1bGsgQVQgY2hhbm5lbCAqLwpAQCAtMjcyNiw3ICsyNzI0LDcgQEAKIGV4aXQ6CiAJaHNvX2ZyZWVfdGlvbWdldChzZXJpYWwpOwogCWtmcmVlKHNlcmlhbCk7Ci0JaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCWtmcmVlKGhzb19kZXYpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzg1LDcgKzI3ODMsNyBAQAogCQlrZnJlZShzZXJpYWwpOwogCX0KIAlpZiAoaHNvX2RldikKLQkJaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCQlrZnJlZShoc29fZGV2KTsKIAlyZXR1cm4gTlVMTDsKIAogfQpAQCAtMjk3OCw4ICsyOTc2LDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZoc29fZHJpdmVyLCBpbnRlcmZhY2UsIGhzb19kZXYpOwotCiAJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgZGV2aWNlICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGhzb19kZXYpOwogCkBAIC0yOTk3LDggKzI5OTMsNiBAQAogCiAJLyogcmVtb3ZlIHJlZmVyZW5jZSBvZiBvdXIgcHJpdmF0ZSBkYXRhICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCi0JdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSgmaHNvX2RyaXZlciwgaW50ZXJmYWNlKTsKIH0KIAogc3RhdGljIHZvaWQgYXN5bmNfZ2V0X2ludGYoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYyBiL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKaW5kZXggY2VkOGYzNi4uN2FlOWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYworKysgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCkBAIC00ODYsNiArNDg2LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWNzNzgzMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gbWNzNzgzMF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwkgPSBtY3M3ODMwX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgbWNzNzgzMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IGRldi0+bmV0OwpAQCAtNDk1LDExICs1MDcsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JbmV0LT5kb19pb2N0bCA9IG1jczc4MzBfaW9jdGw7CiAJbmV0LT5ldGh0b29sX29wcyA9ICZtY3M3ODMwX2V0aHRvb2xfb3BzOwotCW5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gbWNzNzgzMF9zZXRfbXVsdGljYXN0OworCW5ldC0+bmV0ZGV2X29wcyA9ICZtY3M3ODMwX25ldGRldl9vcHM7CiAJbWNzNzgzMF9zZXRfbXVsdGljYXN0KG5ldCk7Ci0JbmV0LT5zZXRfbWFjX2FkZHJlc3MgPSBtY3M3ODMwX3NldF9tYWNfYWRkcmVzczsKIAogCS8qIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdGF0dXMgYnl0ZSBvbiByeCAqLwogCWRldi0+cnhfdXJiX3NpemUgPSBFVEhfRlJBTUVfTEVOICsgMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IGI3Zjc2M2UuLjFiZjI0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtMjY2LDYgKzI2NiwxNiBAQAogCXJldHVybiAtRURPTTsKIH0KIAorLyogc2FtZSBhcyB1c2JuZXRfbmV0ZGV2X29wcyBidXQgTVRVIGNoYW5nZSBub3QgYWxsb3dlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBpbnQKIGdlbmVyaWNfcm5kaXNfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgZmxhZ3MpCiB7CkBAIC0zMjcsNyArMzM3LDggQEAKIAlkZXYtPnJ4X3VyYl9zaXplICY9IH4oZGV2LT5tYXhwYWNrZXQgLSAxKTsKIAl1LmluaXQtPm1heF90cmFuc2Zlcl9zaXplID0gY3B1X3RvX2xlMzIoZGV2LT5yeF91cmJfc2l6ZSk7CiAKLQluZXQtPmNoYW5nZV9tdHUgPSBOVUxMOworCW5ldC0+bmV0ZGV2X29wcyA9ICZybmRpc19uZXRkZXZfb3BzOworCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIAlpZiAodW5saWtlbHkocmV0dmFsIDwgMCkpIHsKIAkJLyogaXQgbWlnaHQgbm90IGV2ZW4gYmUgYW4gUk5ESVMgZGV2aWNlISEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGQ4NjY0YmYuLmY5ZmI0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXJiICpyeF91cmIsICp0eF91cmIsICppbnRyX3VyYiwgKmN0cmxfdXJiOwogCXN0cnVjdCBza19idWZmICp0eF9za2IsICpyeF9za2I7CkBAIC00NjMsOCArNDYyLDggQEAKIAlza2JfcHV0KGRldi0+cnhfc2tiLCBwa3RfbGVuKTsKIAlkZXYtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhkZXYtPnJ4X3NrYiwgbmV0ZGV2KTsKIAluZXRpZl9yeChkZXYtPnJ4X3NrYik7Ci0JZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCXNwaW5fbG9jaygmZGV2LT5yeF9wb29sX2xvY2spOwogCXNrYiA9IHB1bGxfc2tiKGRldik7CkBAIC01NzMsMTMgKzU3MiwxMyBAQAogCiAJZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWlmIChkWzBdICYgVFNSX0VSUk9SUykgewotCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChkW0lOVF9UU1JdICYgKFRTUl9FQ09MIHwgVFNSX0pCUikpCi0JCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTENPTCkKLQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTE9TU19DUlMpCi0JCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAl9CiAJLyogUmVwb3J0IGxpbmsgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2sgKi8KIAlpZiAoKGRbSU5UX01TUl0gJiBNU1JfTElOSykgPT0gMCkgewpAQCAtNjk3LDE3ICs2OTYsMTIgQEAKIAlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODE1MF9uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigocnRsODE1MF90ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiVHggdGltZW91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGRldi0+dHhfdXJiKTsKLQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNTBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNzQ3LDEyICs3NDEsMTIgQEAKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwogCQllbHNlIHsKIAkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7Ci0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJCX0KIAl9IGVsc2UgewotCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCX0KIApAQCAtODk3LDYgKzg5MSwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1MF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBydGw4MTUwX29wZW4sCisJLm5kb19zdG9wCQk9IHJ0bDgxNTBfY2xvc2UsCisJLm5kb19kb19pb2N0bAkJPSBydGw4MTUwX2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTUwX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHJ0bDgxNTBfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxNTBfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzLAorCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBydGw4MTUwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTkyMywxNSArOTMwLDggQEAKIAkKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCWRldi0+bmV0ZGV2ID0gbmV0ZGV2OwotCW5ldGRldi0+b3BlbiA9IHJ0bDgxNTBfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBydGw4MTUwX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBydGw4MTUwX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZydGw4MTUwX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUTDgxNTBfVFhfVElNRU9VVDsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTUwX3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBydGw4MTUwX3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTUwX3NldF9tdWx0aWNhc3Q7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBydGw4MTUwX3NldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPmdldF9zdGF0cyA9IHJ0bDgxNTBfbmV0ZGV2X3N0YXRzOwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCWRldi0+aW50cl9pbnRlcnZhbCA9IDEwMDsJLyogMTAwbXMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCAzZTYxNTVhLi5kYzE2NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtMTAwOCw2ICsxMDA4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21zYzk1eHhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsIAkJPSBzbXNjOTV4eF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNtc2M5NXh4X3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSBOVUxMOwpAQCAtMTAzOCw5ICsxMDUwLDggQEAKIAkvKiBJbml0IGFsbCByZWdpc3RlcnMgKi8KIAlyZXQgPSBzbXNjOTV4eF9yZXNldChkZXYpOwogCi0JZGV2LT5uZXQtPmRvX2lvY3RsID0gc21zYzk1eHhfaW9jdGw7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmc21zYzk1eHhfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmc21zYzk1eHhfZXRodG9vbF9vcHM7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNtc2M5NXh4X3NldF9tdWx0aWNhc3Q7CiAJZGV2LT5uZXQtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAJZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBTTVNDOTVYWF9UWF9PVkVSSEVBRDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwppbmRleCBhYTMxNDkwLi42NTk2NTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHVzYm5ldF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSkKK2ludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IHVzYm5ldAkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCWxsX210dSA9IG5ld19tdHUgKyBuZXQtPmhhcmRfaGVhZGVyX2xlbjsKQEAgLTI0NiwxNCArMjQ2LDcgQEAKIAogCXJldHVybiAwOwogfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnVzYm5ldF9nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCi17Ci0Jc3RydWN0IHVzYm5ldAkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlyZXR1cm4gJmRldi0+c3RhdHM7Ci19CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfY2hhbmdlX210dSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU0OCw3ICs1NDEsNyBAQAogCiAvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKIAotc3RhdGljIGludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQl0ZW1wOwpAQCAtNTkyLDYgKzU4NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdG9wKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTk5LDcgKzU5Myw3IEBACiAKIC8vIHByZWNvbmRpdGlvbjogbmV2ZXIgY2FsbGVkIGluX2ludGVycnVwdAogCi1zdGF0aWMgaW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoraW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCWludAkJCXJldHZhbDsKQEAgLTY3NCw2ICs2NjgsNyBAQAogZG9uZV9ub3BtOgogCXJldHVybiByZXR2YWw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfb3Blbik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTcyMyw4ICs3MTgsOCBAQAogCWlmIChkZXYtPm1paS5tZGlvX3JlYWQpCiAJCXJldHVybiBtaWlfbGlua19vaygmZGV2LT5taWkpOwogCi0JLyogT3RoZXJ3aXNlLCBzYXkgd2UncmUgdXAgKHRvIGF2b2lkIGJyZWFraW5nIHNjcmlwdHMpICovCi0JcmV0dXJuIDE7CisJLyogT3RoZXJ3aXNlLCBkdHJ0IGZvciBkcml2ZXJzIGNhbGxpbmcgbmV0aWZfY2Fycmllcl97b24sb2ZmfSAqLworCXJldHVybiBldGh0b29sX29wX2dldF9saW5rKG5ldCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfZ2V0X2xpbmspOwogCkBAIC05MDgsNyArOTAzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCkBAIC05MTcsMTAgKzkxMiwxMSBAQAogCiAJLy8gRklYTUU6IGRldmljZSByZWNvdmVyeSAtLSByZXNldD8KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF90eF90aW1lb3V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGg7CkBAIC0xMDAzLDcgKzk5OSw3IEBACiAJfQogCXJldHVybiByZXR2YWw7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdGFydF94bWl0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTExMCw2ICsxMTA2LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfZGlzY29ubmVjdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdXNibmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTc5LDEzICsxMTg0LDE0IEBACiAJCW5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogI2VuZGlmCiAKLQluZXQtPmNoYW5nZV9tdHUgPSB1c2JuZXRfY2hhbmdlX210dTsKLQluZXQtPmdldF9zdGF0cyA9IHVzYm5ldF9nZXRfc3RhdHM7CisJbmV0LT5uZXRkZXZfb3BzID0gJnVzYm5ldF9uZXRkZXZfb3BzOworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHVzYm5ldF9zdGFydF94bWl0OwogCW5ldC0+b3BlbiA9IHVzYm5ldF9vcGVuOwogCW5ldC0+c3RvcCA9IHVzYm5ldF9zdG9wOwotCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUX0pJRkZJRVM7CiAJbmV0LT50eF90aW1lb3V0ID0gdXNibmV0X3R4X3RpbWVvdXQ7CisjZW5kaWYKKwluZXQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVF9KSUZGSUVTOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmdXNibmV0X2V0aHRvb2xfb3BzOwogCiAJLy8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGJpbmQvaW5pdCBwcm9jZWR1cmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvemF1cnVzLmMgYi9kcml2ZXJzL25ldC91c2IvemF1cnVzLmMKaW5kZXggZTI0ZjdiMy4uMDQ4ODJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3phdXJ1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi96YXVydXMuYwpAQCAtMzQxLDYgKzM0MSwxMSBAQAogCVVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19NRExNLAogCQkJVVNCX0NEQ19QUk9UT19OT05FKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmJvZ3VzX21kbG1faW5mbywKK30sIHsKKwkvKiBNb3Rvcm9sYSBNT1RPTUFHWCBwaG9uZXMgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDIyYjgsIDB4NjQyNSwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZib2d1c19tZGxtX2luZm8sCiB9LAogCiAvKiBPbHltcHVzIGhhcyBzb21lIG1vZGVscyB3aXRoIGEgWmF1cnVzLWNvbXBhdGlibGUgb3B0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDg1MmQwZTcuLjAxNWRiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTE5LDEyICsxOSwxNyBAQAogI2RlZmluZSBEUlZfTkFNRQkidmV0aCIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMCIKIAorI2RlZmluZSBNSU5fTVRVIDY4CQkvKiBNaW4gTDMgTVRVICovCisjZGVmaW5lIE1BWF9NVFUgNjU1MzUJCS8qIE1heCBMMyBNVFUgKGFyYml0cmFyeSkgKi8KKyNkZWZpbmUgTVRVX1BBRCAoRVRIX0hMRU4gKyA0KSAgLyogTWF4IGRpZmZlcmVuY2UgYmV0d2VlbiBMMiBhbmQgTDMgc2l6ZSBNVFUgKi8KKwogc3RydWN0IHZldGhfbmV0X3N0YXRzIHsKIAl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZwl0eF9wYWNrZXRzOwogCXVuc2lnbmVkIGxvbmcJcnhfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZwl0eF9ieXRlczsKIAl1bnNpZ25lZCBsb25nCXR4X2Ryb3BwZWQ7CisJdW5zaWduZWQgbG9uZwlyeF9kcm9wcGVkOwogfTsKIAogc3RydWN0IHZldGhfcHJpdiB7CkBAIC0xNDcsNyArMTUyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmN2ID0gTlVMTDsKIAlzdHJ1Y3QgdmV0aF9wcml2ICpwcml2LCAqcmN2X3ByaXY7Ci0Jc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzLCAqcmN2X3N0YXRzOwogCWludCBsZW5ndGgsIGNwdTsKIAogCXNrYl9vcnBoYW4oc2tiKTsKQEAgLTE1OCw5ICsxNjMsMTMgQEAKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdGF0cyA9IHBlcl9jcHVfcHRyKHByaXYtPnN0YXRzLCBjcHUpOworCXJjdl9zdGF0cyA9IHBlcl9jcHVfcHRyKHJjdl9wcml2LT5zdGF0cywgY3B1KTsKIAogCWlmICghKHJjdi0+ZmxhZ3MgJiBJRkZfVVApKQotCQlnb3RvIG91dGY7CisJCWdvdG8gdHhfZHJvcDsKKworCWlmIChza2ItPmxlbiA+IChyY3YtPm10dSArIE1UVV9QQUQpKQorCQlnb3RvIHJ4X2Ryb3A7CiAKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcmN2KTsKQEAgLTE3OCwxNyArMTg3LDIxIEBACiAJc3RhdHMtPnR4X2J5dGVzICs9IGxlbmd0aDsKIAlzdGF0cy0+dHhfcGFja2V0cysrOwogCi0Jc3RhdHMgPSBwZXJfY3B1X3B0cihyY3ZfcHJpdi0+c3RhdHMsIGNwdSk7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKLQlzdGF0cy0+cnhfcGFja2V0cysrOworCXJjdl9zdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOworCXJjdl9zdGF0cy0+cnhfcGFja2V0cysrOwogCiAJbmV0aWZfcngoc2tiKTsKIAlyZXR1cm4gMDsKIAotb3V0ZjoKK3R4X2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKIAlyZXR1cm4gMDsKKworcnhfZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyY3Zfc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTIxMCw2ICsyMjMsNyBAQAogCWRldl9zdGF0cy0+cnhfYnl0ZXMgPSAwOwogCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSAwOwogCWRldl9zdGF0cy0+dHhfZHJvcHBlZCA9IDA7CisJZGV2X3N0YXRzLT5yeF9kcm9wcGVkID0gMDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXN0YXRzID0gcGVyX2NwdV9wdHIocHJpdi0+c3RhdHMsIGNwdSk7CkBAIC0yMTksNiArMjMzLDcgQEAKIAkJZGV2X3N0YXRzLT5yeF9ieXRlcyArPSBzdGF0cy0+cnhfYnl0ZXM7CiAJCWRldl9zdGF0cy0+dHhfYnl0ZXMgKz0gc3RhdHMtPnR4X2J5dGVzOwogCQlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgKz0gc3RhdHMtPnR4X2Ryb3BwZWQ7CisJCWRldl9zdGF0cy0+cnhfZHJvcHBlZCArPSBzdGF0cy0+cnhfZHJvcHBlZDsKIAl9CiAKIAlyZXR1cm4gZGV2X3N0YXRzOwpAQCAtMjM5LDYgKzI1NCwyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmV0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+cGVlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc192YWxpZF92ZXRoX210dShpbnQgbmV3X210dSkKK3sKKwlyZXR1cm4gKG5ld19tdHUgPj0gTUlOX01UVSAmJiBuZXdfbXR1IDw9IE1BWF9NVFUpOworfQorCitzdGF0aWMgaW50IHZldGhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpZiAoIWlzX3ZhbGlkX3ZldGhfbXR1KG5ld19tdHUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdmV0aF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHM7CkBAIC0yNjMsMTAgKzMwMSwxMyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZldGhfbmV0ZGV2X29wcyA9IHsKLQkubmRvX2luaXQJPSB2ZXRoX2Rldl9pbml0LAotCS5uZG9fb3Blbgk9IHZldGhfb3BlbiwKLQkubmRvX3N0YXJ0X3htaXQgPSB2ZXRoX3htaXQsCi0JLm5kb19nZXRfc3RhdHMJPSB2ZXRoX2dldF9zdGF0cywKKwkubmRvX2luaXQgICAgICAgICAgICA9IHZldGhfZGV2X2luaXQsCisJLm5kb19vcGVuICAgICAgICAgICAgPSB2ZXRoX29wZW4sCisJLm5kb19zdG9wICAgICAgICAgICAgPSB2ZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAgID0gdmV0aF94bWl0LAorCS5uZG9fY2hhbmdlX210dSAgICAgID0gdmV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fZ2V0X3N0YXRzICAgICAgID0gdmV0aF9nZXRfc3RhdHMsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCiB9OwogCiBzdGF0aWMgdm9pZCB2ZXRoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNzksNDQgKzMyMCw2IEBACiAJZGV2LT5kZXN0cnVjdG9yID0gdmV0aF9kZXZfZnJlZTsKIH0KIAotc3RhdGljIHZvaWQgdmV0aF9jaGFuZ2Vfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcjsKLQlzdHJ1Y3QgdmV0aF9wcml2ICpwcml2OwotCi0JcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcGVlciA9IHByaXYtPnBlZXI7Ci0KLQlpZiAobmV0aWZfY2Fycmllcl9vayhwZWVyKSkgewotCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKLQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQl9IGVsc2UgewotCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgdmV0aF9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwotCi0JaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX29wZW4gIT0gdmV0aF9vcGVuKQotCQlnb3RvIG91dDsKLQotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIE5FVERFVl9DSEFOR0U6Ci0JCXZldGhfY2hhbmdlX3N0YXRlKGRldik7Ci0JCWJyZWFrOwotCX0KLW91dDoKLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdmV0aF9ub3RpZmllcl9ibG9jayBfX3JlYWRfbW9zdGx5ID0gewotCS5ub3RpZmllcl9jYWxsCT0gdmV0aF9kZXZpY2VfZXZlbnQsCi19OwotCiAvKgogICogbmV0bGluayBpbnRlcmZhY2UKICAqLwpAQCAtMzI5LDYgKzMzMiwxMCBAQAogCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KKwlpZiAodGJbSUZMQV9NVFVdKSB7CisJCWlmICghaXNfdmFsaWRfdmV0aF9tdHUobmxhX2dldF91MzIodGJbSUZMQV9NVFVdKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2NywxNCArNDc0LDEyIEBACiAKIHN0YXRpYyBfX2luaXQgaW50IHZldGhfaW5pdCh2b2lkKQogewotCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmdmV0aF9ub3RpZmllcl9ibG9jayk7CiAJcmV0dXJuIHJ0bmxfbGlua19yZWdpc3RlcigmdmV0aF9saW5rX29wcyk7CiB9CiAKIHN0YXRpYyBfX2V4aXQgdm9pZCB2ZXRoX2V4aXQodm9pZCkKIHsKIAlydG5sX2xpbmtfdW5yZWdpc3RlcigmdmV0aF9saW5rX29wcyk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnZldGhfbm90aWZpZXJfYmxvY2spOwogfQogCiBtb2R1bGVfaW5pdCh2ZXRoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwppbmRleCA0NjcxNDM2Li44ODBlYWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYworKysgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwpAQCAtMTA5LDggKzEwOSw5IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMTAtTEsiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURQorCSIgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOwogCiAvKiBUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byB1c2UgUENJIG1lbW9yeSBzcGFjZS4gU29tZSBlYXJseSB2ZXJzaW9ucwogICAgb2YgdGhlIFJoaW5lIG1heSBvbmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSS9PIHNwYWNlIGFjY2Vzc2VzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCBjNTY5MWZkLi5mYjUzZWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtMTgzOCwxNyArMTgzOCwxOSBAQAogewogCXN0cnVjdCBza19idWZmICpza2IgPSB0ZGluZm8tPnNrYjsKIAlpbnQgaTsKKwlpbnQgcGt0bGVuOwogCiAJLyoKIAkgKglEb24ndCB1bm1hcCB0aGUgcHJlLWFsbG9jYXRlZCB0eF9idWZzCiAJICovCiAJaWYgKHRkaW5mby0+c2tiX2RtYSkgewogCisJCXBrdGxlbiA9IChza2ItPmxlbiA+IEVUSF9aTEVOID8gOiBFVEhfWkxFTik7CiAJCWZvciAoaSA9IDA7IGkgPCB0ZGluZm8tPm5za2JfZG1hOyBpKyspIHsKICNpZmRlZiBWRUxPQ0lUWV9aRVJPX0NPUFlfU1VQUE9SVAogCQkJcGNpX3VubWFwX3NpbmdsZSh2cHRyLT5wZGV2LCB0ZGluZm8tPnNrYl9kbWFbaV0sIGxlMTZfdG9fY3B1KHRkLT50ZGVzYzEubGVuKSwgUENJX0RNQV9UT0RFVklDRSk7CiAjZWxzZQotCQkJcGNpX3VubWFwX3NpbmdsZSh2cHRyLT5wZGV2LCB0ZGluZm8tPnNrYl9kbWFbaV0sIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRpbmZvLT5za2JfZG1hW2ldLCBwa3RsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogI2VuZGlmCiAJCQl0ZGluZm8tPnNrYl9kbWFbaV0gPSAwOwogCQl9CkBAIC0yMDgwLDE3ICsyMDgyLDE0IEBACiAJc3RydWN0IHR4X2Rlc2MgKnRkX3B0cjsKIAlzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqdGRpbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHBrdGxlbiA9IHNrYi0+bGVuOworCWludCBwa3RsZW47CiAJX19sZTE2IGxlbjsKIAlpbnQgaW5kZXg7CiAKIAotCi0JaWYgKHNrYi0+bGVuIDwgRVRIX1pMRU4pIHsKLQkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCWdvdG8gb3V0OwotCQlwa3RsZW4gPSBFVEhfWkxFTjsKLQl9CisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJZ290byBvdXQ7CisJcGt0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBza2ItPmxlbiwgRVRIX1pMRU4pOwogCiAJbGVuID0gY3B1X3RvX2xlMTYocGt0bGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IDNkMDAzMzkuLmE2ZjFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTk1Myw2ICs5NTMsNyBAQAogCiAJdmktPnN0YXR1cyA9IFZJUlRJT19ORVRfU19MSU5LX1VQOwogCXZpcnRuZXRfdXBkYXRlX3N0YXR1cyh2aSk7CisJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCiAJcHJfZGVidWcoInZpcnRuZXQ6IHJlZ2lzdGVyZWQgZGV2aWNlICVzXG4iLCBkZXYtPm5hbWUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggMGQ3YmExMS4uNjE1ODFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC03MzEsOCArNzMxLDcgQEAKIAkgKiBXZSBjYW4gc2FmZWx5IGZhbGwgYmFjayB0byBub24tZG1hLWFibGUgbWVtb3J5LCBiZWNhdXNlIHdlIGhhdmUKIAkgKiB0aGUgY29zYS0+Ym91bmNlYnVmIHByZS1hbGxvY2F0ZWQuCiAJICovCi0JaWYgKGNoYW4tPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CiAJY2hhbi0+cnhfc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAlpZiAoY2hhbi0+cnhfc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwKQEAgLTk5OSw4ICs5OTgsOCBAQAogc3RhdGljIGludCBjb3NhX2Zhc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogICAgICAgICBpbnQgcG9ydCA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIGludCBydiA9IGZhc3luY19oZWxwZXIoaW5vZGUsIGZpbGUsIG9uLCAmZmFzeW5jW3BvcnRdKTsKLSAgICAgICAgcmV0dXJuIHJ2IDwgMCA/IHJ2IDogMDsKKworCXJldHVybiBmYXN5bmNfaGVscGVyKGlub2RlLCBmaWxlLCBvbiwgJmZhc3luY1twb3J0XSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwppbmRleCA1ZmE1MjkyLi4zNWRlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwpAQCAtMzU1LDEyICszNTUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsYmFjayB0byBpbml0aWFsaXplIGRldmljZSAqLwotc3RhdGljIHZvaWQgY3ljeF94MjVfY2hhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWRldi0+aW5pdCA9IGN5Y3hfbmV0ZGV2aWNlX2luaXQ7Ci19Ci0KIC8qIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCiAgKiBoYW5kbGVkLgpAQCAtNDc2LDYgKzQ3MCwyNyBAQAogCS5yZWJ1aWxkID0gY3ljeF9uZXRkZXZpY2VfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN5Y3hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJPSBjeWN4X25ldGRldmljZV9pbml0LAorCS5uZG9fb3Blbgk9IGN5Y3hfbmV0ZGV2aWNlX29wZW4sCisJLm5kb19zdG9wCT0gY3ljeF9uZXRkZXZpY2Vfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJPSBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHMsCit9OworCitzdGF0aWMgdm9pZCBjeWN4X3gyNV9jaGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLworCWRldi0+bmV0ZGV2X29wcwkJPSAmY3ljeF9uZXRkZXZfb3BzOworCWRldi0+aGVhZGVyX29wcwkJPSAmY3ljeF9oZWFkZXJfb3BzOworCisJLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZGV2LT5tdHUJCT0gQ1lDWF9YMjVfQ0hBTl9NVFU7CisJZGV2LT50eXBlCQk9IEFSUEhSRF9IV1gyNTsJLyogQVJQIGgvdyB0eXBlICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwkJLyogbWVkaWEgaGVhZGVyIGxlbmd0aCAqLworCWRldi0+YWRkcl9sZW4JCT0gMDsJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCit9CisKIC8qIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCiAgKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawpAQCAtNDg3LDIwICs1MDIsNiBAQAogCXN0cnVjdCBjeWN4X2RldmljZSAqY2FyZCA9IGNoYW4tPmNhcmQ7CiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiA9ICZjYXJkLT53YW5kZXY7CiAKLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9IGN5Y3hfbmV0ZGV2aWNlX29wZW47Ci0JZGV2LT5zdG9wCQk9IGN5Y3hfbmV0ZGV2aWNlX3N0b3A7Ci0JZGV2LT5oZWFkZXJfb3BzCQk9ICZjeWN4X2hlYWRlcl9vcHM7Ci0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHM7Ci0KLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPm10dQkJPSBDWUNYX1gyNV9DSEFOX01UVTsKLQlkZXYtPnR5cGUJCT0gQVJQSFJEX0hXWDI1OwkvKiBBUlAgaC93IHR5cGUgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CQkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0JZGV2LT5hZGRyX2xlbgkJPSAwOwkJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KLQogCWlmICghY2hhbi0+c3ZjKQogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGNoYW4tPmxjbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IGEyOTdlM2UuLmU4ZDE1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBpbnZhbGlkIGRhdGEgbm8gaGVhZGVyXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlpZiAoaGRyLT5jb250cm9sICE9IEZSQURfSV9VSSkKIAl7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgaGVhZGVyIGZsYWcgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPmNvbnRyb2wpOwotCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAllbHNlCiAJCXN3aXRjaChoZHItPklQX05MUElEKQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKIAkJCQlpZiAoaGRyLT5OTFBJRCAhPSBGUkFEX1BfU05BUCkKIAkJCQl7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVuc3VwcG9ydGVkIE5MUElEIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5OTFBJRCk7Ci0JCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkgCiAJCQkJaWYgKGhkci0+T1VJWzBdICsgaGRyLT5PVUlbMV0gKyBoZHItPk9VSVsyXSAhPSAwKQogCQkJCXsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgb3JnYW5pemF0aW9uYWxseSB1bmlxdWUgaWRlbnRpZmllciAweCUwMlgtJTAyWC0lMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPk9VSVswXSwgaGRyLT5PVUlbMV0sIGhkci0+T1VJWzJdKTsKLQkJCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogCQkJY2FzZSBGUkFEX1BfUTkzMzoKIAkJCWNhc2UgRlJBRF9QX0NMTlA6CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgTkxQSUQgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgcGFkIGJ5dGUgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwkJCQkKIAkJfQogCkBAIC0xNzgsOSArMTc4LDkgQEAKIAkJLyogd2UndmUgc2V0IHVwIHRoZSBwcm90b2NvbCwgc28gZGlzY2FyZCB0aGUgaGVhZGVyICovCiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9wdWxsKHNrYiwgaGVhZGVyKTsKLQkJZGxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKLQkJZGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIAllbHNlCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTIwMCwxOSArMjAwLDE5IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCi0JcmV0ID0gZGxwLT5zbGF2ZS0+aGFyZF9zdGFydF94bWl0KHNrYiwgZGxwLT5zbGF2ZSk7CisJcmV0ID0gZGxwLT5zbGF2ZS0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkbHAtPnNsYXZlKTsKIAlzd2l0Y2ggKHJldCkKIAl7CiAJCWNhc2UgRExDSV9SRVRfT0s6Ci0JCQlkbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQkJY2FzZSBETENJX1JFVF9FUlI6Ci0JCQlkbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJCWNhc2UgRExDSV9SRVRfRFJPUDoKLQkJCWRscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXQgPSAxOwogCQkJYnJlYWs7CiAJfQpAQCAtMjk1LDExICsyOTUsOSBAQAogCiBzdGF0aWMgaW50IGRsY2lfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOworCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigoKmRscC0+c2xhdmUtPmNoYW5nZV9tdHUpKGRscC0+c2xhdmUsIG5ld19tdHUpKTsKKwlyZXR1cm4gZGV2X3NldF9tdHUoZGxwLT5zbGF2ZSwgbmV3X210dSk7CiB9CiAKIHN0YXRpYyBpbnQgZGxjaV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNDIsMTUgKzM0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGxjaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOwotCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigmZGxwLT5zdGF0cyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGxjaV9hZGQoc3RydWN0IGRsY2lfYWRkICpkbGNpKQogewogCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXIsICpzbGF2ZTsKQEAgLTQ4OCwxOCArNDc3LDIxIEBACiAJLmNyZWF0ZQk9IGRsY2lfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbGNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gZGxjaV9vcGVuLAorCS5uZG9fc3RvcAk9IGRsY2lfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGRsY2lfZGV2X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQsCisJLm5kb19jaGFuZ2VfbXR1CT0gZGxjaV9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgZGxjaV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJZGV2LT5mbGFncwkJPSAwOwotCWRldi0+b3BlbgkJPSBkbGNpX29wZW47Ci0JZGV2LT5zdG9wCQk9IGRsY2lfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bAkJPSBkbGNpX2Rldl9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQ7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZkbGNpX2hlYWRlcl9vcHM7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gZGxjaV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IGRsY2lfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmRsY2lfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAKIAlkbHAtPnJlY2VpdmUJCT0gZGxjaV9yZWNlaXZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKaW5kZXggNWNlNDM3Mi4uNzU5NmVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKIEVYUE9SVF9TWU1CT0woYXR0YWNoX2hkbGNfcHJvdG9jb2wpOwogRVhQT1JUX1NZTUJPTChkZXRhY2hfaGRsY19wcm90b2NvbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaGRsY19wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaGRsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyksCiAJLmZ1bmMgPSBoZGxjX3JjdiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMgYi9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKaW5kZXggMDZiZWJhNC4uMmRkNzhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwpAQCAtNTUsNyArNTUsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZXRoZGV2OwkvKiBsaW5rIHRvIGV0aGVybmV0IGRldmljZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlCSpheGRldjsJCS8qIGxhcGJldGggZGV2aWNlIChsYXBiIykgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJCS8qIHNvbWUgc3RhdGlzdGljcyAqLwogfTsKIAogc3RhdGljIExJU1RfSEVBRChsYXBiZXRoX2RldmljZXMpOwpAQCAtMTA3LDEwICsxMDYsOSBAQAogCWlmICghbmV0aWZfcnVubmluZyhsYXBiZXRoLT5heGRldikpCiAJCWdvdG8gZHJvcF91bmxvY2s7CiAKLQlsYXBiZXRoLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0KIAlsZW4gPSBza2ItPmRhdGFbMF0gKyBza2ItPmRhdGFbMV0gKiAyNTY7Ci0JbGFwYmV0aC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogCiAJc2tiX3B1bGwoc2tiLCAyKTsJLyogUmVtb3ZlIHRoZSBsZW5ndGggYnl0ZXMgKi8KIAlza2JfdHJpbShza2IsIGxlbik7CS8qIFNldCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhICovCkBAIC0yMTAsOCArMjA4LDggQEAKIAkqcHRyKysgPSBzaXplICUgMjU2OwogCSpwdHIrKyA9IHNpemUgLyAyNTY7CiAKLQlsYXBiZXRoLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JbGFwYmV0aC0+c3RhdHMudHhfYnl0ZXMgKz0gc2l6ZTsKKwluZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJbmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2l6ZTsKIAogCXNrYi0+ZGV2ID0gZGV2ID0gbGFwYmV0aC0+ZXRoZGV2OwogCkBAIC0yNTUsMTUgKzI1Myw2IEBACiB9CiAKIC8qCi0gKglTdGF0aXN0aWNzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGFwYmV0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGFwYmV0aGRldiAqbGFwYmV0aCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZsYXBiZXRoLT5zdGF0czsKLX0KLQotLyoKICAqCVNldCBBWC4yNSBjYWxsc2lnbgogICovCiBzdGF0aWMgaW50IGxhcGJldGhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCkBAIC0zMTQsMTQgKzMwMywxNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsYXBiZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBsYXBiZXRoX29wZW4sCisJLm5kb19zdG9wCSAgICAgPSBsYXBiZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkgICAgID0gbGFwYmV0aF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgdm9pZCBsYXBiZXRoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYXBiZXRoX3htaXQ7Ci0JZGV2LT5vcGVuCSAgICAgPSBsYXBiZXRoX29wZW47Ci0JZGV2LT5zdG9wCSAgICAgPSBsYXBiZXRoX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcwkgICAgID0gJmxhcGJldGhfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJICAgICA9IGZyZWVfbmV0ZGV2OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICA9IGxhcGJldGhfZ2V0X3N0YXRzOwogCWRldi0+dHlwZSAgICAgICAgICAgID0gQVJQSFJEX1gyNTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDM7CiAJZGV2LT5tdHUgICAgICAgICAgICAgPSAxMDAwOwpAQCAtNDIxLDcgKzQxMyw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxhcGJldGhfcGFja2V0X3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxhcGJldGhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0RFQyksCiAJLmZ1bmMgPSBsYXBiZXRoX3JjdiwKIH07CkBAIC00MzAsNyArNDIyLDcgQEAKIAkubm90aWZpZXJfY2FsbCA9IGxhcGJldGhfZGV2aWNlX2V2ZW50LAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9JTkZPICJMQVBCIEV0aGVybmV0IGRyaXZlciB2ZXJzaW9uIDAuMDJcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGxhcGJldGhfaW5pdF9kcml2ZXIodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCmluZGV4IDc4ZjdiYzkuLmY0MjExZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwpAQCAtNjgsNyArNjgsNiBAQAogLyogZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCiBzdHJ1Y3QgbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKIAogCXNwaW5sb2NrX3QJbG9jazsKQEAgLTExNyw3ICsxMTYsNiBAQAogc3RhdGljIGludCAgc2JuaV9jbG9zZSggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiBzdGF0aWMgaW50ICBzYm5pX2lvY3RsKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50ICk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICpzYm5pX2dldF9zdGF0cyggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIHZvaWQgIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2JuaV9pbnRlcnJ1cHQoIGludCwgdm9pZCAqICk7CkBAIC0yMDgsMTUgKzIwNiwyMSBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzYm5pX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNibmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gc2JuaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc2JuaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fZG9faW9jdGwJCT0gc2JuaV9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHNibmlfZGV2c2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cCggZGV2ICk7Ci0JZGV2LT5vcGVuCQk9ICZzYm5pX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZzYm5pX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gJnNibmlfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmc2JuaV9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwJCT0gJnNibmlfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKIH0KIAogaW50IF9faW5pdCBzYm5pX3Byb2JlKGludCB1bml0KQpAQCAtMjI5LDYgKzIzMyw4IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKKwogCXNwcmludGYoZGV2LT5uYW1lLCAic2JuaSVkIiwgdW5pdCk7CiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIApAQCAtNzIzLDEzICs3MjksMTEgQEAKIAkJCW5sLT53YWl0X2ZyYW1lbm8gPSAwLAogCQkJbmwtPmlucHBvcyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCQktPnN0YXRzLnJ4X2Vycm9ycysrLAotCQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQkJLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlubC0+bWFzdGVyLT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbHNlCi0JCQlubC0+c3RhdHMucnhfZXJyb3JzKyssCi0JCQlubC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkgICAgICAgIGRldi0+c3RhdHMucnhfZXJyb3JzKyssCisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbmRpZgogCQkJLyogbm93IHNraXAgYWxsIGZyYW1lcyB1bnRpbCBpc19maXJzdCAhPSAwICovCiAJfSBlbHNlCkBAIC03NDIsMTMgKzc0NiwxMSBAQAogCQkgKi8KIAkJbmwtPndhaXRfZnJhbWVubyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCSgoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKQotCQkJLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMucnhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICNlbHNlCi0JCW5sLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJbmwtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAjZW5kaWYKIAogCXJldHVybiAgZnJhbWVfb2s7CkBAIC03NTYsMTUgKzc1OCwxNiBAQAogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc2VuZF9jb21wbGV0ZSggc3RydWN0IG5ldF9sb2NhbCAgKm5sICkKK3NlbmRfY29tcGxldGUoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogeworCXN0cnVjdCBuZXRfbG9jYWwgICpubCA9IG5ldGRldl9wcml2KGRldik7CisKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X2J5dGVzCi0JCSs9IG5sLT50eF9idWZfcC0+bGVuOworCW5sLT5tYXN0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlubC0+bWFzdGVyLT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbHNlCi0JbmwtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlubC0+c3RhdHMudHhfYnl0ZXMgKz0gbmwtPnR4X2J1Zl9wLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbmRpZgogCWRldl9rZnJlZV9za2JfaXJxKCBubC0+dHhfYnVmX3AgKTsKIApAQCAtNzkyLDcgKzc5NSw3IEBACiAJCQkJCQkgICBubC0+bWF4ZnJhbWUsCiAJCQkJCQkgICBubC0+dHhfYnVmX3AtPmxlbiAtIG5sLT5vdXRwb3MpOwogCQkJZWxzZQotCQkJCXNlbmRfY29tcGxldGUoIG5sICksCisJCQkJc2VuZF9jb21wbGV0ZSggZGV2ICksCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZSggbmwtPm1hc3RlciApOwogI2Vsc2UKQEAgLTg4MSwxMyArODg0LDExIEBACiAJCWRldl9rZnJlZV9za2JfYW55KCBubC0+dHhfYnVmX3AgKSwKIAkJbmwtPnR4X2J1Zl9wID0gTlVMTCwKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnR4X2Vycm9ycysrLAotCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCS0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMudHhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZWxzZQotCQlubC0+c3RhdHMudHhfZXJyb3JzKyssCi0JCW5sLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrLAorCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZW5kaWYKIAogCW5sLT50eF9mcmFtZW5vCT0gMDsKQEAgLTEwMTcsMTQgKzEwMTgsMTMgQEAKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgbmwtPm1hc3RlciApOwogCW5ldGlmX3J4KCBza2IgKTsKLQkrKygoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKS0+c3RhdHMucnhfcGFja2V0czsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnJ4X2J5dGVzICs9Ci0JCW5sLT5pbnBwb3M7CisJKytubC0+bWFzdGVyLT5zdGF0cy5yeF9wYWNrZXRzOworCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZWxzZQogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyggc2tiLCBkZXYgKTsKIAluZXRpZl9yeCggc2tiICk7Ci0JKytubC0+c3RhdHMucnhfcGFja2V0czsKLQlubC0+c3RhdHMucnhfYnl0ZXMgKz0gbmwtPmlucHBvczsKKwkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZW5kaWYKIAlubC0+cnhfYnVmX3AgPSBOVUxMOwkvKiBwcm90b2NvbCBkcml2ZXIgd2lsbCBjbGVhciB0aGlzIHNrX2J1ZmYgKi8KIH0KQEAgLTExOTcsNyArMTE5Nyw3IEBACiBoYW5kbGVyX2F0dGFjaGVkOgogCiAJc3Bpbl9sb2NrKCAmbmwtPmxvY2sgKTsKLQltZW1zZXQoICZubC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKKwltZW1zZXQoICZkZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpICk7CiAJbWVtc2V0KCAmbmwtPmluX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHNibmlfaW5fc3RhdHMpICk7CiAKIAljYXJkX3N0YXJ0KCBkZXYgKTsKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAKIAkvKiBTdW1tYXJ5IHN0YXRpc3RpY3Mgb2YgTXVsdGlMaW5lIG9wZXJhdGlvbiB3aWxsIGJlIHN0b3JlZAogCSAgIGluIG1hc3RlcidzIGNvdW50ZXJzICovCi0JbWVtc2V0KCAmc25sLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSApOworCW1lbXNldCggJnNsYXZlX2Rldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKIAluZXRpZl9zdG9wX3F1ZXVlKCBzbGF2ZV9kZXYgKTsKIAluZXRpZl93YWtlX3F1ZXVlKCBkZXYgKTsJLyogTm93IHdlIGFyZSBhYmxlIHRvIHRyYW5zbWl0ICovCiAKQEAgLTE0NjQsMTQgKzE0NjQsNiBAQAogCiAjZW5kaWYKIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotc2JuaV9nZXRfc3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICkKLXsKLQlyZXR1cm4gICYoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQKIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKaW5kZXggZTZlMmNlMy4uZDY3ZTIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYworKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJCW1lbWNweShzbC0+eGJ1ZmYsIHNsLT54aGVhZCwgc2wtPnhsZWZ0KTsKIAkJfSBlbHNlICB7CiAJCQlzbC0+eGxlZnQgPSAwOwotCQkJc2wtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl9CiAJfQogCXNsLT54aGVhZCA9IHNsLT54YnVmZjsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCQkJbWVtY3B5KHNsLT5yYnVmZiwgcmJ1ZmYsIHNsLT5yY291bnQpOwogCQl9IGVsc2UgIHsKIAkJCXNsLT5yY291bnQgPSAwOwotCQkJc2wtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCQlzZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncyk7CiAJCX0KIAl9CkBAIC0xODgsMTggKzE4OCwxOSBAQAogCiBzdGF0aWMgdm9pZCB4MjVfYXN5X2J1bXAoc3RydWN0IHgyNV9hc3kgKnNsKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzbC0+ZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGNvdW50OwogCWludCBlcnI7CiAKIAljb3VudCA9IHNsLT5yY291bnQ7Ci0Jc2wtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY291bnQ7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGNvdW50KzEpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCiAJCQlzbC0+ZGV2LT5uYW1lKTsKLQkJc2wtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1c2goc2tiLCAxKTsJLyogTEFQQiBpbnRlcm5hbCBjb250cm9sICovCkBAIC0yMTEsNyArMjEyLDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIngyNV9hc3k6IGRhdGEgcmVjZWl2ZWQgZXJyIC0gJWRcbiIsIGVycik7CiAJfSBlbHNlIHsKIAkJbmV0aWZfcngoc2tiKTsKLQkJc2wtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJfQogfQogCkBAIC0yMjYsNyArMjI3LDcgQEAKIAkJbGVuID0gbXR1OwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRydW5jYXRpbmcgb3ZlcnNpemVkIHRyYW5zbWl0IHBhY2tldCFcbiIsCiAJCQkJCXNsLT5kZXYtPm5hbWUpOwotCQlzbC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlzbC0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXgyNV9hc3lfdW5sb2NrKHNsKTsKIAkJcmV0dXJuOwogCX0KQEAgLTI2Niw3ICsyNjcsNyBAQAogCWlmIChzbC0+eGxlZnQgPD0gMCkgewogCQkvKiBOb3cgc2VyaWFsIGJ1ZmZlciBpcyBhbG1vc3QgZnJlZSAmIHdlIGNhbiBzdGFydAogCQkgKiB0cmFuc21pc3Npb24gb2YgYW5vdGhlciBwYWNrZXQgKi8KLQkJc2wtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJc2wtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQljbGVhcl9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJnR0eS0+ZmxhZ3MpOwogCQl4MjVfYXN5X3VubG9jayhzbCk7CiAJCXJldHVybjsKQEAgLTM4Myw3ICszODQsNyBAQAogCS8qIFdlIHdlcmUgbm90IGJ1c3ksIHNvIHdlIGFyZSBub3cuLi4gOi0pICovCiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCXgyNV9hc3lfbG9jayhzbCk7Ci0JCXNsLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJeDI1X2FzeV9lbmNhcHMoc2wsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQpAQCAtNTMzLDcgKzUzNCw3IEBACiAJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKGZwICYmICpmcCsrKSB7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKSkKLQkJCQlzbC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJc2wtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQljcCsrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTYwOCwxNCArNjA5LDYgQEAKIAl4MjVfYXN5X2ZyZWUoc2wpOwogfQogCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqeDI1X2FzeV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgeDI1X2FzeSAqc2wgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmc2wtPnN0YXRzOwotfQotCi0KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICoJCQlTVEFOREFSRCBYLjI1IEVOQ0FQU1VMQVRJT04JCSAgCSAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY4Miw3ICs2NzUsNyBAQAogCQkJc2wtPnJidWZmW3NsLT5yY291bnQrK10gPSBzOwogCQkJcmV0dXJuOwogCQl9Ci0JCXNsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQlzbC0+ZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQlzZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncyk7CiAJfQogfQpAQCAtNzE5LDYgKzcxMiwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHgyNV9hc3lfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSB4MjVfYXN5X29wZW5fZGV2LAorCS5uZG9fc3RvcAk9IHgyNV9hc3lfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CT0geDI1X2FzeV94bWl0LAorCS5uZG9fdHhfdGltZW91dAk9IHgyNV9hc3lfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJPSB4MjVfYXN5X2NoYW5nZV9tdHUsCit9OworCiAvKiBJbml0aWFsaXNlIHRoZSBYLjI1IGRyaXZlci4gIENhbGxlZCBieSB0aGUgZGV2aWNlIGluaXQgY29kZSAqLwogc3RhdGljIHZvaWQgeDI1X2FzeV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNzM0LDEzICs3MzUsOCBAQAogCSAqLwogCiAJZGV2LT5tdHUJCT0gU0xfTVRVOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0geDI1X2FzeV94bWl0OwotCWRldi0+dHhfdGltZW91dAkJPSB4MjVfYXN5X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZ4MjVfYXN5X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaKjIwOwotCWRldi0+b3BlbgkJPSB4MjVfYXN5X29wZW5fZGV2OwotCWRldi0+c3RvcAkJPSB4MjVfYXN5X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzCSAgICAgICAgPSB4MjVfYXN5X2dldF9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUJCT0geDI1X2FzeV9jaGFuZ2VfbXR1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gMDsKIAlkZXYtPmFkZHJfbGVuCQk9IDA7CiAJZGV2LT50eXBlCQk9IEFSUEhSRF9YMjU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5oIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaAppbmRleCA0MTc3MDIwLi44ZjBmYzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmgKQEAgLTI4LDEwICsyOCw2IEBACiAgIHVuc2lnbmVkIGNoYXIJCSp4YnVmZjsJCS8qIHRyYW5zbWl0dGVyIGJ1ZmZlcgkJKi8KICAgdW5zaWduZWQgY2hhciAgICAgICAgICp4aGVhZDsgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgYnl0ZSB0byBYTUlUICovCiAgIGludCAgICAgICAgICAgICAgICAgICB4bGVmdDsgICAgICAgICAgLyogYnl0ZXMgbGVmdCBpbiBYTUlUIHF1ZXVlICAgICAqLwotCi0gIC8qIFguMjUgaW50ZXJmYWNlIHN0YXRpc3RpY3MuICovCi0gIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCiAgIGludCAgICAgICAgICAgICAgICAgICBidWZmc2l6ZTsgICAgICAgLyogTWF4IGJ1ZmZlcnMgc2l6ZXMgICAgICAgICAgICAqLwogCiAgIHVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogRmxhZyB2YWx1ZXMvIG1vZGUgZXRjCSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUKaW5kZXggMTY5NmU5My4uNWQ5ZTAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAKIAlkcml2ZXIubwlcCiAJZncubwkJXAogCW9wLXJma2lsbC5vCVwKKwlzeXNmcy5vCQlcCiAJbmV0ZGV2Lm8JXAogCXR4Lm8JCVwKIAlyeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwppbmRleCAxNWQ5ZjUxLi5iM2NhZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKQEAgLTUyLDcgKzUyLDYgQEAKICAqCiAgKiBpMjQwMG1fZGV2X2luaXRhbGl6ZSgpICAgICAgIENhbGxlZCBieSBpMjQwMG1fZGV2X3N0YXJ0KCkKICAqICAgaTI0MDBtX3NldF9pbml0X2NvbmZpZygpCi0gKiAgIGkyNDAwbV9maXJtd2FyZV9jaGVjaygpCiAgKiAgIGkyNDAwbV9jbWRfZ2V0X3N0YXRlKCkKICAqIGkyNDAwbV9kZXZfc2h1dGRvd24oKSAgICAgICAgQ2FsbGVkIGJ5IGkyNDAwbV9kZXZfc3RvcCgpCiAgKiAgIGkyNDAwbS0+YnVzX3Jlc2V0KCkKQEAgLTk0Miw4ICs5NDEsOCBAQAogLyogRmlybXdhcmUgaW50ZXJmYWNlIHZlcnNpb25zIHdlIHN1cHBvcnQgKi8KIGVudW0gewogCUkyNDAwTV9IREl2X01BSk9SID0gOSwKLQlJMjQwME1fSERJdl9NQUpPUl8yID0gOCwKIAlJMjQwME1fSERJdl9NSU5PUiA9IDEsCisJSTI0MDBNX0hESXZfTUlOT1JfMiA9IDIsCiB9OwogCiAKQEAgLTk1OSw2ICs5NTgsMTAgQEAKICAqIExvbmcgZnVuY3Rpb24sIGJ1dCBxdWl0ZSBzaW1wbGU7IGZpcnN0IGNodW5rIGxhdW5jaGVzIHRoZSBjb21tYW5kCiAgKiBhbmQgZG91YmxlIGNoZWNrcyB0aGUgcmVwbHkgZm9yIHRoZSByaWdodCBUTFYuIFRoZW4gd2UgcHJvY2VzcyB0aGUKICAqIFRMViAod2hlcmUgdGhlIG1lYXQgaXMpLgorICoKKyAqIE9uY2Ugd2UgcHJvY2VzcyB0aGUgVExWIHRoYXQgZ2l2ZXMgdXMgdGhlIGZpcm13YXJlJ3MgaW50ZXJmYWNlCisgKiB2ZXJzaW9uLCB3ZSBlbmNvZGUgaXQgYW5kIHNhdmUgaXQgaW4gaTI0MDBtLT5md192ZXJzaW9uIGZvciBmdXR1cmUKKyAqIHJlZmVyZW5jZS4KICAqLwogaW50IGkyNDAwbV9maXJtd2FyZV9jaGVjayhzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCiB7CkBAIC0xMDA5LDIyICsxMDEyLDIwIEBACiAJbWlub3IgPSBsZTE2X3RvX2NwdShsNG12LT5taW5vcik7CiAJYnJhbmNoID0gbGUxNl90b19jcHUobDRtdi0+YnJhbmNoKTsKIAlyZXN1bHQgPSAtRUlOVkFMOwotCWlmIChtYWpvciAhPSBJMjQwME1fSERJdl9NQUpPUgotCSAgICAmJiBtYWpvciAhPSBJMjQwME1fSERJdl9NQUpPUl8yKSB7Ci0JCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgbWFqb3IgZncgaW50ZXJmYWNlIHZlcnNpb24gIgorCWlmIChtYWpvciAhPSBJMjQwME1fSERJdl9NQUpPUikgeworCQlkZXZfZXJyKGRldiwgInVuc3VwcG9ydGVkIG1ham9yIGZ3IHZlcnNpb24gIgogCQkJIiV1LiV1LiV1XG4iLCBtYWpvciwgbWlub3IsIGJyYW5jaCk7CiAJCWdvdG8gZXJyb3JfYmFkX21ham9yOwogCX0KLQlpZiAobWFqb3IgPT0gSTI0MDBNX0hESXZfTUFKT1JfMikKLQkJZGV2X2VycihkZXYsICJkZXByZWNhdGVkIG1ham9yIGZ3IGludGVyZmFjZSB2ZXJzaW9uICIKLQkJCSIldS4ldS4ldVxuIiwgbWFqb3IsIG1pbm9yLCBicmFuY2gpOwogCXJlc3VsdCA9IDA7Ci0JaWYgKG1pbm9yICE9IEkyNDAwTV9IREl2X01JTk9SKQotCQlkZXZfd2FybihkZXYsICJ1bnRlc3RlZCBtaW5vciBmdyBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1XG4iLAorCWlmIChtaW5vciA8IEkyNDAwTV9IREl2X01JTk9SXzIgJiYgbWlub3IgPiBJMjQwME1fSERJdl9NSU5PUikKKwkJZGV2X3dhcm4oZGV2LCAidW50ZXN0ZWQgbWlub3IgZncgdmVyc2lvbiAldS4ldS4ldVxuIiwKIAkJCSBtYWpvciwgbWlub3IsIGJyYW5jaCk7Ci1lcnJvcl9iYWRfbWFqb3I6CisJLyogWWVzLCB3ZSBpZ25vcmUgdGhlIGJyYW5jaCAtLSB3ZSBkb24ndCBoYXZlIHRvIHRyYWNrIGl0ICovCisJaTI0MDBtLT5md192ZXJzaW9uID0gbWFqb3IgPDwgMTYgfCBtaW5vcjsKIAlkZXZfaW5mbyhkZXYsICJmaXJtd2FyZSBpbnRlcmZhY2UgdmVyc2lvbiAldS4ldS4ldVxuIiwKIAkJIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKK2Vycm9yX2JhZF9tYWpvcjoKIGVycm9yX25vX3RsdjoKIGVycm9yX2NtZF9mYWlsZWQ6CiAJa2ZyZWVfc2tiKGFja19za2IpOwpAQCAtMTIyMSw2ICsxMjIyLDc3IEBACiAKIAogLyoqCisgKiBpMjQwMG1fc2V0X2lkbGVfdGltZW91dCAtIFNldCB0aGUgZGV2aWNlJ3MgaWRsZSBtb2RlIHRpbWVvdXQKKyAqCisgKiBAaTI0MDBtOiBpMjQwMG0gZGV2aWNlIGRlc2NyaXB0b3IKKyAqCisgKiBAbXNlY3M6IG1pbGxpc2Vjb25kcyBmb3IgdGhlIHRpbWVvdXQgdG8gZW50ZXIgaWRsZSBtb2RlLiBCZXR3ZWVuCisgKiAgICAgMTAwIHRvIDMwMDAwMCAoNW0pOyAwIHRvIGRpc2FibGUuIEluIGluY3JlbWVudHMgb2YgMTAwLgorICoKKyAqIEFmdGVyIHRoaXMgQG1zZWNzIG9mIHRoZSBsaW5rIGJlaW5nIGlkbGUgKG5vIGRhdGEgYmVpbmcgc2VudCBvcgorICogcmVjZWl2ZWQpLCB0aGUgZGV2aWNlIHdpbGwgbmVnb3RpYXRlIHdpdGggdGhlIGJhc2VzdGF0aW9uIGVudGVyaW5nCisgKiBpZGxlIG1vZGUgZm9yIHNhdmluZyBwb3dlci4gVGhlIGNvbm5lY3Rpb24gaXMgbWFpbnRhaW5lZCwgYnV0CisgKiBnZXR0aW5nIG91dCBvZiBpdCAoZG9uZSBpbiB0eC5jKSB3aWxsIHJlcXVpcmUgc29tZSBuZWdvdGlhdGlvbiwKKyAqIHBvc3NpYmxlIGNyeXB0byByZS1oYW5kc2hha2UgYW5kIGEgcG9zc2libGUgREhDUCByZS1sZWFzZS4KKyAqCisgKiBPbmx5IGF2YWlsYWJsZSBpZiBmd192ZXJzaW9uID49IDB4MDAwOTAwMDIuCisgKgorICogUmV0dXJuczogMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKi8KK2ludCBpMjQwMG1fc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHVuc2lnbmVkIG1zZWNzKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXN0cnVjdCBza19idWZmICphY2tfc2tiOworCXN0cnVjdCB7CisJCXN0cnVjdCBpMjQwMG1fbDNsNF9oZHIgaGRyOworCQlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IGNpdDsKKwl9ICpjbWQ7CisJY29uc3Qgc3RydWN0IGkyNDAwbV9sM2w0X2hkciAqYWNrOworCXNpemVfdCBhY2tfbGVuOworCWNoYXIgc3RyZXJyWzMyXTsKKworCXJlc3VsdCA9IC1FTk9TWVM7CisJaWYgKGkyNDAwbV9sZV92MV8zKGkyNDAwbSkpCisJCWdvdG8gZXJyb3JfYWxsb2M7CisJcmVzdWx0ID0gLUVOT01FTTsKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlnb3RvIGVycm9yX2FsbG9jOworCWNtZC0+aGRyLnR5cGUgPSBjcHVfdG9fbGUxNihJMjQwME1fTVRfR0VUX1NUQVRFKTsKKwljbWQtPmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkgLSBzaXplb2YoY21kLT5oZHIpKTsKKwljbWQtPmhkci52ZXJzaW9uID0gY3B1X3RvX2xlMTYoSTI0MDBNX0wzTDRfVkVSU0lPTik7CisKKwljbWQtPmNpdC5oZHIudHlwZSA9CisJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfVElNRU9VVCk7CisJY21kLT5jaXQuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihjbWQtPmNpdC50aW1lb3V0KSk7CisJY21kLT5jaXQudGltZW91dCA9IGNwdV90b19sZTMyKG1zZWNzKTsKKworCWFja19za2IgPSBpMjQwMG1fbXNnX3RvX2RldihpMjQwMG0sIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoSVNfRVJSKGFja19za2IpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlzc3VlICdzZXQgaWRsZSB0aW1lb3V0JyBjb21tYW5kOiAiCisJCQkiJWxkXG4iLCBQVFJfRVJSKGFja19za2IpKTsKKwkJcmVzdWx0ID0gUFRSX0VSUihhY2tfc2tiKTsKKwkJZ290byBlcnJvcl9tc2dfdG9fZGV2OworCX0KKwlhY2sgPSB3aW1heF9tc2dfZGF0YV9sZW4oYWNrX3NrYiwgJmFja19sZW4pOworCXJlc3VsdCA9IGkyNDAwbV9tc2dfY2hlY2tfc3RhdHVzKGFjaywgc3RyZXJyLCBzaXplb2Yoc3RyZXJyKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICInc2V0IGlkbGUgdGltZW91dCcgKDB4JTA0eCkgY29tbWFuZCBmYWlsZWQ6ICIKKwkJCSIlZCAtICVzXG4iLCBJMjQwME1fTVRfR0VUX1NUQVRFLCByZXN1bHQsIHN0cmVycik7CisJCWdvdG8gZXJyb3JfY21kX2ZhaWxlZDsKKwl9CisJcmVzdWx0ID0gMDsKKwlrZnJlZV9za2IoYWNrX3NrYik7CitlcnJvcl9jbWRfZmFpbGVkOgorZXJyb3JfbXNnX3RvX2RldjoKKwlrZnJlZShjbWQpOworZXJyb3JfYWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKICAqIGkyNDAwbV9kZXZfaW5pdGlhbGl6ZSAtIEluaXRpYWxpemUgdGhlIGRldmljZSBvbmNlIGNvbW11bmljYXRpb25zIGFyZSByZWFkeQogICoKICAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCkBAIC0xMjM4LDI2ICsxMzEwLDU1IEBACiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfcGFyYW1ldGVycyBpZGxlX3BhcmFtczsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IGlkbGVfdGltZW91dDsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZDJoX2RhdGFfZm9ybWF0IGRmOworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kbF9ob3N0X3Jlb3JkZXIgZGxocjsKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgKmFyZ3NbOV07CiAJdW5zaWduZWQgYXJnYyA9IDA7CiAKIAlkX2Zuc3RhcnQoMywgZGV2LCAiKGkyNDAwbSAlcClcbiIsIGkyNDAwbSk7Ci0JLyogVXNlbGVzcyBmb3Igbm93Li4ubWlnaHQgY2hhbmdlICovCisJLyogRGlzYWJsZSBpZGxlIG1vZGU/IChlbmFibGVkIGJ5IGRlZmF1bHQpICovCiAJaWYgKGkyNDAwbV9pZGxlX21vZGVfZGlzYWJsZWQpIHsKLQkJaWRsZV9wYXJhbXMuaGRyLnR5cGUgPQotCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTKTsKLQkJaWRsZV9wYXJhbXMuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAotCQkJc2l6ZW9mKGlkbGVfcGFyYW1zKSAtIHNpemVvZihpZGxlX3BhcmFtcy5oZHIpKTsKLQkJaWRsZV9wYXJhbXMuaWRsZV90aW1lb3V0ID0gMDsKLQkJaWRsZV9wYXJhbXMuaWRsZV9wYWdpbmdfaW50ZXJ2YWwgPSAwOwotCQlhcmdzW2FyZ2MrK10gPSAmaWRsZV9wYXJhbXMuaGRyOworCQlpZiAoaTI0MDBtX2xlX3YxXzMoaTI0MDBtKSkgeworCQkJaWRsZV9wYXJhbXMuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyk7CisJCQlpZGxlX3BhcmFtcy5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCisJCQkJc2l6ZW9mKGlkbGVfcGFyYW1zKSAtIHNpemVvZihpZGxlX3BhcmFtcy5oZHIpKTsKKwkJCWlkbGVfcGFyYW1zLmlkbGVfdGltZW91dCA9IDA7CisJCQlpZGxlX3BhcmFtcy5pZGxlX3BhZ2luZ19pbnRlcnZhbCA9IDA7CisJCQlhcmdzW2FyZ2MrK10gPSAmaWRsZV9wYXJhbXMuaGRyOworCQl9IGVsc2UgeworCQkJaWRsZV90aW1lb3V0Lmhkci50eXBlID0KKwkJCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQpOworCQkJaWRsZV90aW1lb3V0Lmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoaWRsZV90aW1lb3V0KSAtIHNpemVvZihpZGxlX3RpbWVvdXQuaGRyKSk7CisJCQlpZGxlX3RpbWVvdXQudGltZW91dCA9IDA7CisJCQlhcmdzW2FyZ2MrK10gPSAmaWRsZV90aW1lb3V0LmhkcjsKKwkJfQorCX0KKwlpZiAoaTI0MDBtX2dlX3YxXzQoaTI0MDBtKSkgeworCQkvKiBFbmFibGUgZXh0ZW5kZWQgUlggZGF0YSBmb3JtYXQ/ICovCisJCWRmLmhkci50eXBlID0KKwkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0QySF9EQVRBX0ZPUk1BVCk7CisJCWRmLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCXNpemVvZihkZikgLSBzaXplb2YoZGYuaGRyKSk7CisJCWRmLmZvcm1hdCA9IDE7CisJCWFyZ3NbYXJnYysrXSA9ICZkZi5oZHI7CisKKwkJLyogRW5hYmxlIFJYIGRhdGEgcmVvcmRlcmluZz8KKwkJICogKHN3aXRjaCBmbGlwcGVkIGluIHJ4LmM6aTI0MDBtX3J4X3NldHVwKCkgYWZ0ZXIgZncgdXBsb2FkKSAqLworCQlpZiAoaTI0MDBtLT5yeF9yZW9yZGVyKSB7CisJCQlkbGhyLmhkci50eXBlID0KKwkJCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19ETF9IT1NUX1JFT1JERVIpOworCQkJZGxoci5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCisJCQkJc2l6ZW9mKGRsaHIpIC0gc2l6ZW9mKGRsaHIuaGRyKSk7CisJCQlkbGhyLnJlb3JkZXIgPSAxOworCQkJYXJnc1thcmdjKytdID0gJmRsaHIuaGRyOworCQl9CiAJfQogCXJlc3VsdCA9IGkyNDAwbV9zZXRfaW5pdF9jb25maWcoaTI0MDBtLCBhcmdzLCBhcmdjKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcjsKLQlyZXN1bHQgPSBpMjQwMG1fZmlybXdhcmVfY2hlY2soaTI0MDBtKTsJLyogZncgdmVyc2lvbnMgb2s/ICovCi0JaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZXJyb3I7CiAJLyoKIAkgKiBVcGRhdGUgc3RhdGU6IEhlcmUgaXQganVzdCBjYWxscyBhIGdldCBzdGF0ZTsgcGFyc2luZyB0aGUKIAkgKiByZXN1bHQgKFN5c3RlbSBTdGF0ZSBUTFYgYW5kIFJGIFN0YXR1cyBUTFYgW2RvbmUgaW4gdGhlIHJ4CkBAIC0xMjY2LDYgKzEzNjcsOCBAQAogCSAqLwogCXJlc3VsdCA9IGkyNDAwbV9jbWRfZ2V0X3N0YXRlKGkyNDAwbSk7CiBlcnJvcjoKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNlOiAlZFxuIiwgcmVzdWx0KTsKIAlkX2ZuZW5kKDMsIGRldiwgIihpMjQwMG0gJXApID0gJWRcbiIsIGkyNDAwbSwgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oCmluZGV4IDMxODNiYWEuLjQ4ZmJmYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kZWJ1Zy1sZXZlbHMuaAorKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmgKQEAgLTM4LDYgKzM4LDcgQEAKIAlEX1NVQk1PRFVMRV9ERUNMQVJFKG5ldGRldiksCiAJRF9TVUJNT0RVTEVfREVDTEFSRShyZmtpbGwpLAogCURfU1VCTU9EVUxFX0RFQ0xBUkUocngpLAorCURfU1VCTU9EVUxFX0RFQ0xBUkUoc3lzZnMpLAogCURfU1VCTU9EVUxFX0RFQ0xBUkUodHgpLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCmluZGV4IGU4MGEwYjYuLjA3YTU0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICAqICAgICAgIGkyNDAwbV9kZXZfYm9vdHN0cmFwKCkKICAqICAgICAgIGkyNDAwbV90eF9zZXR1cCgpCiAgKiAgICAgICBpMjQwMG0tPmJ1c19kZXZfc3RhcnQoKQorICogICAgICAgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKCkKICAqICAgICAgIGkyNDAwbV9jaGVja19tYWNfYWRkcigpCiAgKiAgIHdpbWF4X2Rldl9hZGQoKQogICoKQEAgLTc1LDYgKzc2LDExIEBACiAJCSAiSWYgdHJ1ZSwgdGhlIGRldmljZSB3aWxsIG5vdCBlbmFibGUgaWRsZSBtb2RlIG5lZ290aWF0aW9uICIKIAkJICJ3aXRoIHRoZSBiYXNlIHN0YXRpb24gKHdoZW4gY29ubmVjdGVkKSB0byBzYXZlIHBvd2VyLiIpOwogCitpbnQgaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQ7CS8qIDAgKHJ4IHJlb3JkZXIgZW5hYmxlZCkgYnkgZGVmYXVsdCAqLworbW9kdWxlX3BhcmFtX25hbWVkKHJ4X3Jlb3JkZXJfZGlzYWJsZWQsIGkyNDAwbV9yeF9yZW9yZGVyX2Rpc2FibGVkLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhyeF9yZW9yZGVyX2Rpc2FibGVkLAorCQkgIklmIHRydWUsIFJYIHJlb3JkZXJpbmcgd2lsbCBiZSBkaXNhYmxlZC4iKTsKKwogLyoqCiAgKiBpMjQwMG1fcXVldWVfd29yayAtIHNjaGVkdWxlIHdvcmsgb24gYSBpMjQwMG0ncyBxdWV1ZQogICoKQEAgLTM5NSw2ICs0MDEsOSBAQAogCXJlc3VsdCA9IGkyNDAwbV90eF9zZXR1cChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yX3R4X3NldHVwOworCXJlc3VsdCA9IGkyNDAwbV9yeF9zZXR1cChpMjQwMG0pOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX3J4X3NldHVwOwogCXJlc3VsdCA9IGkyNDAwbS0+YnVzX2Rldl9zdGFydChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yX2J1c19kZXZfc3RhcnQ7CkBAIC00MDQsNiArNDEzLDkgQEAKIAkJZGV2X2VycihkZXYsICJjYW5ub3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCWdvdG8gZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZTsKIAl9CisJcmVzdWx0ID0gaTI0MDBtX2Zpcm13YXJlX2NoZWNrKGkyNDAwbSk7CS8qIGZ3IHZlcnNpb25zIG9rPyAqLworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2Z3X2NoZWNrOwogCS8qIEF0IHRoaXMgcG9pbnQgaXMgb2sgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgZGV2aWNlICovCiAJcmVzdWx0ID0gaTI0MDBtX2NoZWNrX21hY19hZGRyKGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCkBAIC00MjEsMTAgKzQzMywxMyBAQAogCiBlcnJvcl9kZXZfaW5pdGlhbGl6ZToKIGVycm9yX2NoZWNrX21hY19hZGRyOgorZXJyb3JfZndfY2hlY2s6CiAJZGVzdHJveV93b3JrcXVldWUoaTI0MDBtLT53b3JrX3F1ZXVlKTsKIGVycm9yX2NyZWF0ZV93b3JrcXVldWU6CiAJaTI0MDBtLT5idXNfZGV2X3N0b3AoaTI0MDBtKTsKIGVycm9yX2J1c19kZXZfc3RhcnQ6CisJaTI0MDBtX3J4X3JlbGVhc2UoaTI0MDBtKTsKK2Vycm9yX3J4X3NldHVwOgogCWkyNDAwbV90eF9yZWxlYXNlKGkyNDAwbSk7CiBlcnJvcl90eF9zZXR1cDoKIGVycm9yX2Jvb3RzdHJhcDoKQEAgLTQ3Miw2ICs0ODcsNyBAQAogCWkyNDAwbS0+cmVhZHkgPSAwOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGkyNDAwbS0+d29ya19xdWV1ZSk7CiAJaTI0MDBtLT5idXNfZGV2X3N0b3AoaTI0MDBtKTsKKwlpMjQwMG1fcnhfcmVsZWFzZShpMjQwMG0pOwogCWkyNDAwbV90eF9yZWxlYXNlKGkyNDAwbSk7CiAJd2ltYXhfc3RhdGVfY2hhbmdlKHdpbWF4X2RldiwgV0lNQVhfU1RfRE9XTik7CiAJZF9mbmVuZCgzLCBkZXYsICIoaTI0MDBtICVwKSA9IDBcbiIsIGkyNDAwbSk7CkBAIC02MTMsNyArNjI5LDcgQEAKIAlkX2Zuc3RhcnQoMywgZGV2LCAiKGkyNDAwbSAlcClcbiIsIGkyNDAwbSk7CiAKIAlzbnByaW50Zih3aW1heF9kZXYtPm5hbWUsIHNpemVvZih3aW1heF9kZXYtPm5hbWUpLAotCQkgImkyNDAwbS0lczolcyIsIGRldi0+YnVzLT5uYW1lLCBkZXYtPmJ1c19pZCk7CisJCSAiaTI0MDBtLSVzOiVzIiwgZGV2LT5idXMtPm5hbWUsIGRldl9uYW1lKGRldikpOwogCiAJaTI0MDBtLT5ibV9jbWRfYnVmID0ga3phbGxvYyhJMjQwME1fQk1fQ01EX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoaTI0MDBtLT5ibV9jbWRfYnVmID09IE5VTEwpIHsKQEAgLTY1Nyw2ICs2NzMsMTEgQEAKIAl3aW1heF9zdGF0ZV9jaGFuZ2Uod2ltYXhfZGV2LCBXSU1BWF9TVF9VTklOSVRJQUxJWkVEKTsKIAogCS8qIE5vdyBzZXR1cCBhbGwgdGhhdCByZXF1aXJlcyBhIHJlZ2lzdGVyZWQgbmV0IGFuZCB3aW1heCBkZXZpY2UuICovCisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXRfZGV2LT5kZXYua29iaiwgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3Qgc2V0dXAgaTI0MDBtJ3Mgc3lzZnM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3N5c2ZzX3NldHVwOworCX0KIAlyZXN1bHQgPSBpMjQwMG1fZGVidWdmc19hZGQoaTI0MDBtKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBpMjQwMG0ncyBkZWJ1Z2ZzOiAlZFxuIiwgcmVzdWx0KTsKQEAgLTY2Niw2ICs2ODcsOSBAQAogCXJldHVybiByZXN1bHQ7CiAKIGVycm9yX2RlYnVnZnNfc2V0dXA6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2LT5kZXYua29iaiwKKwkJCSAgICZpMjQwMG1fZGV2X2F0dHJfZ3JvdXApOworZXJyb3Jfc3lzZnNfc2V0dXA6CiAJd2ltYXhfZGV2X3JtKCZpMjQwMG0tPndpbWF4X2Rldik7CiBlcnJvcl93aW1heF9kZXZfYWRkOgogCWkyNDAwbV9kZXZfc3RvcChpMjQwMG0pOwpAQCAtNjk3LDYgKzcyMSw4IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2KTsKIAogCWkyNDAwbV9kZWJ1Z2ZzX3JtKGkyNDAwbSk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2LT5kZXYua29iaiwKKwkJCSAgICZpMjQwMG1fZGV2X2F0dHJfZ3JvdXApOwogCXdpbWF4X2Rldl9ybSgmaTI0MDBtLT53aW1heF9kZXYpOwogCWkyNDAwbV9kZXZfc3RvcChpMjQwMG0pOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwppbmRleCBlY2QwY2ZhLi42NzVjNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlmIChvZmZzZXQgKyBzZWN0aW9uX3NpemUgPiBiY2ZfbGVuKSB7CiAJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBiYWQgc2VjdGlvbiAjJXp1LCAiCiAJCQkJImVuZCAoQCV6dSkgYmV5b25kIEVPRiAoQCV6dSlcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgc2VjdGlvbiwKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHNlY3Rpb24sCiAJCQkJb2Zmc2V0ICsgc2VjdGlvbl9zaXplLCAgYmNmX2xlbik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcl9zZWN0aW9uX2JleW9uZF9lb2Y7CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCQkgICAgJmFjaywgc2l6ZW9mKGFjayksIEkyNDAwTV9CTV9DTURfUkFXKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IHNlY3Rpb24gIyV6dSAoQCV6dSAlenUgQikgIgotCQkJCSJmYWlsZWQgJWRcbiIsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIHNlY3Rpb24sCisJCQkJImZhaWxlZCAlZFxuIiwgaTI0MDBtLT5md19uYW1lLCBzZWN0aW9uLAogCQkJCW9mZnNldCwgc2l6ZW9mKCpiaCkgKyBkYXRhX3NpemUsIChpbnQpIHJldCk7CiAJCQlnb3RvIGVycm9yX3NlbmQ7CiAJCX0KQEAgLTg3NCw3ICs4NzQsNyBAQAogCQlpZiAocmVzdWx0IDwgMCkKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IG5vbi1zaWduZWQgZG93bmxvYWQgIgogCQkJCSJpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJlc3VsdCk7CisJCQkJaTI0MDBtLT5md19uYW1lLCByZXN1bHQpOwogCX0gZWxzZSBpZiAoaTI0MDBtLT5zYm9vdCA9PSAwCiAJCSAmJiAobW9kdWxlX2lkICYgSTI0MDBNX0JDRl9NT0RfSURfUE9LRVMpKSB7CiAJCS8qIG5vbi1zaWduZWQgYm9vdCBwcm9jZXNzIHdpdGggcG9rZXMsIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTg4Niw3ICs4ODYsNyBAQAogCQlpZiAocmVzdWx0IDwgMCkKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IHNpZ25lZCBib290IGRvd25sb2FkICIKIAkJCQkiaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXN1bHQpOworCQkJCWkyNDAwbS0+ZndfbmFtZSwgcmVzdWx0KTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkxNSw3ICs5MTUsNyBAQAogCWlmIChiY2Zfc2l6ZSA8IHNpemVvZigqYmNmKSkgewkvKiBiaWcgZW5vdWdoIGhlYWRlcj8gKi8KIAkJZGV2X2VycihkZXYsICJmaXJtd2FyZSAlcyB0b28gc2hvcnQ6ICIKIAkJCSIlenUgQiB2cyAlenUgKGF0IGxlYXN0KSBleHBlY3RlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIGJjZl9zaXplLCBzaXplb2YoKmJjZikpOworCQkJaTI0MDBtLT5md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZW9mKCpiY2YpKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTkzMSw3ICs5MzEsNyBAQAogCWlmIChiY2Zfc2l6ZSAhPSBzaXplKSB7CQkvKiBhbm5veWluZ2x5IHBhcmFub2lkICovCiAJCWRldl9lcnIoZGV2LCAiZmlybXdhcmUgJXM6IGJhZCBzaXplLCBnb3QgIgogCQkJIiV6dSBCIHZzICV1IGV4cGVjdGVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgYmNmX3NpemUsIHNpemUpOworCQkJaTI0MDBtLT5md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC05NDMsNyArOTQzLDcgQEAKIAogCWlmIChtb2R1bGVfdHlwZSAhPSA2KSB7CQkvKiBidWlsdCBmb3IgdGhlIHJpZ2h0IGhhcmR3YXJlPyAqLwogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlczogdW5leHBlY3RlZCBtb2R1bGUgdHlwZSAweCV4OyAiCi0JCQkiYWJvcnRpbmdcbiIsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIG1vZHVsZV90eXBlKTsKKwkJCSJhYm9ydGluZ1xuIiwgaTI0MDBtLT5md19uYW1lLCBtb2R1bGVfdHlwZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC05NTEsMTAgKzk1MSwxMCBAQAogCXJlc3VsdCA9IDA7CiAJaWYgKG1vZHVsZV92ZW5kb3IgIT0gMHg4MDg2KQogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlcz8gdW5leHBlY3RlZCB2ZW5kb3IgMHglMDR4XG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgbW9kdWxlX3ZlbmRvcik7CisJCQlpMjQwMG0tPmZ3X25hbWUsIG1vZHVsZV92ZW5kb3IpOwogCWlmIChkYXRlIDwgMHgyMDA4MDMwMCkKIAkJZGV2X2VycihkZXYsICJiYWQgZncgJXM/IGJ1aWxkIGRhdGUgdG9vIG9sZCAlMDh4XG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgZGF0ZSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGRhdGUpOwogZXJyb3I6CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwMTYsNyArMTAxNiw3IEBACiAJCWdvdG8gZXJyb3JfZGV2X3JlYm9vdGVkOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiZncgJXM6IGRvd25sb2FkIGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOworCQkJaTI0MDBtLT5md19uYW1lLCByZXQpOwogCQlnb3RvIGVycm9yX2RubG9hZF9iY2Y7CiAJfQogCkBAIC0xMDI2LDEyICsxMDI2LDEyIEBACiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJmdyAlczogIgogCQkJImRvd25sb2FkIGZpbmFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgcmV0KTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgcmV0KTsKIAkJZ290byBlcnJvcl9kbmxvYWRfZmluYWxpemU7CiAJfQogCiAJZF9wcmludGYoMiwgZGV2LCAiZncgJXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXG4iLAotCQkgaTI0MDBtLT5idXNfZndfbmFtZSk7CisJCSBpMjQwMG0tPmZ3X25hbWUpOwogCWkyNDAwbS0+Ym9vdF9tb2RlID0gMDsKIGVycm9yX2RubG9hZF9maW5hbGl6ZToKIGVycm9yX2RubG9hZF9iY2Y6CkBAIC0xMDY3LDI4ICsxMDY3LDQxIEBACiAgKi8KIGludCBpMjQwMG1fZGV2X2Jvb3RzdHJhcChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIGVudW0gaTI0MDBtX2JyaSBmbGFncykKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMCwgaXRyID0gMDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX2JjZl9oZHIgKmJjZjsJLyogRmlybXdhcmUgZGF0YSAqLworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CiAKIAlkX2Zuc3RhcnQoNSwgZGV2LCAiKGkyNDAwbSAlcClcbiIsIGkyNDAwbSk7Ci0JLyogTG9hZCBmaXJtd2FyZSBmaWxlcyB0byBtZW1vcnkuICovCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgImZ3ICVzOiByZXF1ZXN0IGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOwotCQlnb3RvIGVycm9yX2Z3X3JlcTsKLQl9Ci0JYmNmID0gKHZvaWQgKikgZnctPmRhdGE7CiAKKwkvKiBMb2FkIGZpcm13YXJlIGZpbGVzIHRvIG1lbW9yeS4gKi8KKwlpdHIgPSAwOworCXdoaWxlKDEpIHsKKwkJZndfbmFtZSA9IGkyNDAwbS0+YnVzX2Z3X25hbWVzW2l0cl07CisJCWlmIChmd19uYW1lID09IE5VTEwpIHsKKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGZpbmQgYSB1c2FibGUgZmlybXdhcmUgaW1hZ2VcbiIpOworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gZXJyb3Jfbm9fZnc7CisJCX0KKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsIGRldik7CisJCWlmIChyZXQgPT0gMCkKKwkJCWJyZWFrOwkJLyogZ290IGl0ICovCisJCWlmIChyZXQgPCAwKQorCQkJZGV2X2VycihkZXYsICJmdyAlczogY2Fubm90IGxvYWQgZmlsZTogJWRcbiIsCisJCQkJZndfbmFtZSwgcmV0KTsKKwkJaXRyKys7CisJfQorCisJYmNmID0gKHZvaWQgKikgZnctPmRhdGE7CisJaTI0MDBtLT5md19uYW1lID0gZndfbmFtZTsKIAlyZXQgPSBpMjQwMG1fZndfY2hlY2soaTI0MDBtLCBiY2YsIGZ3LT5zaXplKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9md19iYWQ7CiAJcmV0ID0gaTI0MDBtX2Z3X2RubG9hZChpMjQwMG0sIGJjZiwgZnctPnNpemUsIGZsYWdzKTsKIGVycm9yX2Z3X2JhZDoKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLWVycm9yX2Z3X3JlcToKK2Vycm9yX25vX2Z3OgogCWRfZm5lbmQoNSwgZGV2LCAiKGkyNDAwbSAlcCkgPSAlZFxuIiwgaTI0MDBtLCByZXQpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmggYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKaW5kZXggMjM2ZjE5ZS4uM2FlMmRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaApAQCAtMTU2LDEwICsxNTYsNiBAQAogfTsKIAogCi0vKiBGaXJtd2FyZSB2ZXJzaW9uIHdlIHJlcXVlc3Qgd2hlbiBwdWxsaW5nIHRoZSBmdyBpbWFnZSBmaWxlICovCi0jZGVmaW5lIEkyNDAwTV9GV19WRVJTSU9OICIxLjMiCi0KLQogLyoqCiAgKiBpMjQwMG1fcmVzZXRfdHlwZSAtIG1ldGhvZHMgdG8gcmVzZXQgYSBkZXZpY2UKICAqCkBAIC0xNzgsNiArMTc0LDcgQEAKIH07CiAKIHN0cnVjdCBpMjQwMG1fcmVzZXRfY3R4Oworc3RydWN0IGkyNDAwbV9yb3E7CiAKIC8qKgogICogc3RydWN0IGkyNDAwbSAtIGRlc2NyaXB0b3IgZm9yIGFuIEludGVsIDI0MDBtCkBAIC0yNDIsMTAgKzIzOSwxNCBAQAogICogICAgIFRoZSBjYWxsZXIgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBhCiAgKiAgICAgYmFya2VyIHRoYXQgaW5kaWNhdGVzIHRoZSBkZXZpY2UgZ29pbmcgaW50byByZXNldCBtb2RlLgogICoKLSAqIEBidXNfZndfbmFtZTogW2ZpbGxdIG5hbWUgb2YgdGhlIGZpcm13YXJlIGltYWdlIChpbiBtb3N0IGNhc2VzLAotICogICAgIHRoZXkgYXJlIGFsbCB0aGUgc2FtZSBmb3IgYSBzaW5nbGUgcmVsZWFzZSwgZXhjZXB0IHRoYXQgdGhleQotICogICAgIGhhdmUgdGhlIHR5cGUgb2YgdGhlIGJ1cyBlbWJlZGRlZCBpbiB0aGUgbmFtZSAoZWc6Ci0gKiAgICAgaTI0MDBtLWZ3LVgtVkVSU0lPTi5zYmNmLCB3aGVyZSBYIGlzIHRoZSBidXMgbmFtZSkuCisgKiBAYnVzX2Z3X25hbWVzOiBbZmlsbF0gYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgdGhlCisgKiAgICAgZmlybXdhcmUgaW1hZ2VzIHRvIHRyeSBsb2FkaW5nLiBUaGlzIGlzIG1hZGUgYSBsaXN0IHNvIHdlIGNhbgorICogICAgIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBmaXJtd2FyZSByZWxlYXNlcyAoZWc6IGlmIHdlCisgKiAgICAgY2FuJ3QgZmluZCB0aGUgZGVmYXVsdCB2MS40LCB3ZSB0cnkgdjEuMykuIEluIGdlbmVyYWwsIHRoZSBuYW1lCisgKiAgICAgc2hvdWxkIGJlIGkyNDAwbS1mdy1YLVZFUlNJT04uc2JjZiwgd2hlcmUgWCBpcyB0aGUgYnVzIG5hbWUuCisgKiAgICAgVGhlIGxpc3QgaXMgdHJpZWQgaW4gb3JkZXIgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBsb2FkcyBpcworICogICAgIHVzZWQuIFRoZSBmdyBsb2FkZXIgd2lsbCBzZXQgaTI0MDBtLT5md19uYW1lIHRvIHBvaW50IHRvIHRoZQorICogICAgIGFjdGl2ZSBmaXJtd2FyZSBpbWFnZS4KICAqCiAgKiBAYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOiBbZmlsbF0gU2V0IHRvIHRydWUgaWYgdGhlIGRldmljZSdzIE1BQwogICogICAgIGFkZHJlc3MgcHJvdmlkZWQgaW4gYm9vdCBtb2RlIGlzIGtpbmQgb2YgYnJva2VuIGFuZCBuZWVkcyB0bwpAQCAtMjU3LDYgKzI1OCw5IEBACiAgKiAgICAgZm9yY2UgdGhpcyB0byBiZSB0aGUgZmlyc3QgZmllbGQgc28gdGhhdCB3ZSBjYW4gZ2V0IGZyb20KICAqICAgICBuZXRkZXZfcHJpdigpIHRoZSByaWdodCBwb2ludGVyLgogICoKKyAqIEByeF9yZW9yZGVyOiAxIGlmIFJYIHJlb3JkZXJpbmcgaXMgZW5hYmxlZDsgdGhpcyBjYW4gb25seSBiZQorICogICAgIHNldCBhdCBwcm9iZSB0aW1lLgorICoKICAqIEBzdGF0ZTogZGV2aWNlJ3Mgc3RhdGUgKGFzIHJlcG9ydGVkIGJ5IGl0KQogICoKICAqIEBzdGF0ZV93cTogd2FpdHF1ZXVlIHRoYXQgaXMgd29rZW4gdXAgd2hlbmV2ZXIgdGhlIHN0YXRlIGNoYW5nZXMKQEAgLTMxMyw2ICszMTcsMTIgQEAKICAqCiAgKiBAcnhfc2l6ZV9tYXg6IGJ1Z2dlc3QgUlggbWVzc2FnZSByZWNlaXZlZC4KICAqCisgKiBAcnhfcm9xOiBSWCBSZU9yZGVyIHF1ZXVlcy4gKGZ3ID49IHYxLjQpIFdoZW4gcGFja2V0cyBhcmUgcmVjZWl2ZWQKKyAqICAgICBvdXQgb2Ygb3JkZXIsIHRoZSBkZXZpY2Ugd2lsbCBhc2sgdGhlIGRyaXZlciB0byBob2xkIGNlcnRhaW4KKyAqICAgICBwYWNrZXRzIHVudGlsIHRoZSBvbmVzIHRoYXQgYXJlIHJlY2VpdmVkIG91dCBvZiBvcmRlciBjYW4gYmUKKyAqICAgICBkZWxpdmVyZWQuIFRoZW4gdGhlIGRyaXZlciBjYW4gcmVsZWFzZSB0aGVtIHRvIHRoZSBob3N0LiBTZWUKKyAqICAgICBkcml2ZXJzL25ldC9pMjQwMG0vcnguYyBmb3IgZGV0YWlscy4KKyAqCiAgKiBAaW5pdF9tdXRleDogTXV0ZXggdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlIGRldmljZSBicmluZ3VwCiAgKiAgICAgc2VxdWVuY2U7IHRoaXMgd2F5IGlmIHRoZSBkZXZpY2UgcmVib290cyBpbiB0aGUgbWlkZGxlLCB3ZQogICogICAgIGRvbid0IHRyeSB0byBkbyBhIGJyaW5ndXAgYWdhaW4gd2hpbGUgd2UgYXJlIHRlYXJpbmcgZG93biB0aGUKQEAgLTM2NCw2ICszNzQsMTEgQEAKICAqICAgICBUaGVzZSBoYXZlIHRvIGJlIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCBhIGNoaWxkIG9mCiAgKiAgICAgKHdpbWF4X2Rldi0+ZGVidWdmc19kZW50cnkpIHNvIHRoZXkgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUKICAqICAgICBtb2R1bGUgdW5sb2FkcywgYXMgd2UgZG9uJ3Qga2VlcCBlYWNoIGRlbnRyeS4KKyAqCisgKiBAZndfbmFtZTogbmFtZSBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyAqCisgKiBAZndfdmVyc2lvbjogdmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgaW50ZXJmYWNlLCBNYWpvci5taW5vciwKKyAqICAgICBlbmNvZGVkIGluIHRoZSBoaWdoIHdvcmQgYW5kIGxvdyB3b3JkIChtYWpvciA8PCAxNiB8IG1pbm9yKS4KICAqLwogc3RydWN0IGkyNDAwbSB7CiAJc3RydWN0IHdpbWF4X2RldiB3aW1heF9kZXY7CS8qIEZJUlNUISBTZWUgZG9jICovCkBAIC0zNzIsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBib290X21vZGU6MTsJCS8qIGlzIHRoZSBkZXZpY2UgaW4gYm9vdCBtb2RlPyAqLwogCXVuc2lnbmVkIHNib290OjE7CQkvKiBzaWduZWQgb3IgdW5zaWduZWQgZncgYm9vdCAqLwogCXVuc2lnbmVkIHJlYWR5OjE7CQkvKiBhbGwgcHJvYmluZyBzdGVwcyBkb25lICovCisJdW5zaWduZWQgcnhfcmVvcmRlcjoxOwkJLyogUlggcmVvcmRlciBpcyBlbmFibGVkICovCiAJdTggdHJhY2VfbXNnX2Zyb21fdXNlcjsJCS8qIGVjaG8gcnggbXNncyB0byAndHJhY2UnIHBpcGUgKi8KIAkJCQkJLyogdHlwZWQgdTggc28gZGVidWdmcy91OCBjYW4gdHdlYWsgKi8KIAllbnVtIGkyNDAwbV9zeXN0ZW1fc3RhdGUgc3RhdGU7CkBAIC0zODgsNyArNDA0LDcgQEAKIAkJCQkgICBzaXplX3QsIGludCBmbGFncyk7CiAJc3NpemVfdCAoKmJ1c19ibV93YWl0X2Zvcl9hY2spKHN0cnVjdCBpMjQwMG0gKiwKIAkJCQkgICAgICAgc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciAqLCBzaXplX3QpOwotCWNvbnN0IGNoYXIgKmJ1c19md19uYW1lOworCWNvbnN0IGNoYXIgKipidXNfZndfbmFtZXM7CiAJdW5zaWduZWQgYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOjE7CiAKIAlzcGlubG9ja190IHR4X2xvY2s7CQkvKiBwcm90ZWN0IFRYIHN0YXRlICovCkBAIC00MDAsMTAgKzQxNiwxMSBAQAogCXVuc2lnbmVkIHR4X3BsX251bSwgdHhfcGxfbWF4LCB0eF9wbF9taW4sCiAJCXR4X251bSwgdHhfc2l6ZV9hY2MsIHR4X3NpemVfbWluLCB0eF9zaXplX21heDsKIAotCS8qIFJYIHN0YXRzICovCisJLyogUlggc3R1ZmYgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0IFJYIHN0YXRlICovCiAJdW5zaWduZWQgcnhfcGxfbnVtLCByeF9wbF9tYXgsIHJ4X3BsX21pbiwKIAkJcnhfbnVtLCByeF9zaXplX2FjYywgcnhfc2l6ZV9taW4sIHJ4X3NpemVfbWF4OworCXN0cnVjdCBpMjQwMG1fcm9xICpyeF9yb3E7CS8qIG5vdCB1bmRlciByeF9sb2NrISAqLwogCiAJc3RydWN0IG11dGV4IG1zZ19tdXRleDsJCS8qIHNlcmlhbGl6ZSBjb21tYW5kIGV4ZWN1dGlvbiAqLwogCXN0cnVjdCBjb21wbGV0aW9uIG1zZ19jb21wbGV0aW9uOwpAQCAtNDIxLDYgKzQzOCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKndha2VfdHhfc2tiOwogCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CisJY29uc3QgY2hhciAqZndfbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlybXdhcmUgaW1hZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGZ3X3ZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSAqLwogfTsKIAogCkBAIC00MzUsNiArNDU0LDcgQEAKIAl3aW1heF9kZXZfaW5pdCgmaTI0MDBtLT53aW1heF9kZXYpOwogCiAJaTI0MDBtLT5ib290X21vZGUgPSAxOworCWkyNDAwbS0+cnhfcmVvcmRlciA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaTI0MDBtLT5zdGF0ZV93cSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaTI0MDBtLT50eF9sb2NrKTsKQEAgLTU3OCwxMiArNTk4LDE5IEBACiAgKiBEcml2ZXIgLyBkZXZpY2Ugc2V0dXAgYW5kIGludGVybmFsIGZ1bmN0aW9ucwogICovCiBleHRlcm4gdm9pZCBpMjQwMG1fbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK2V4dGVybiBpbnQgaTI0MDBtX3N5c2ZzX3NldHVwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CiBleHRlcm4gaW50IGkyNDAwbV90eF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOwogZXh0ZXJuIHZvaWQgaTI0MDBtX3dha2VfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBpMjQwMG1fdHhfcmVsZWFzZShzdHJ1Y3QgaTI0MDBtICopOwogCitleHRlcm4gaW50IGkyNDAwbV9yeF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3J4X3JlbGVhc2Uoc3RydWN0IGkyNDAwbSAqKTsKKwogZXh0ZXJuIHZvaWQgaTI0MDBtX25ldF9yeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkLAogCQkJICBjb25zdCB2b2lkICosIGludCk7CitleHRlcm4gdm9pZCBpMjQwMG1fbmV0X2VyeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosCisJCQkgICBlbnVtIGkyNDAwbV9jcyk7CiBlbnVtIGkyNDAwbV9wdDsKIGV4dGVybiBpbnQgaTI0MDBtX3R4KHN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGVudW0gaTI0MDBtX3B0KTsKIApAQCAtNzIxLDYgKzc0OCw3IEBACiBleHRlcm4gaW50IGkyNDAwbV9maXJtd2FyZV9jaGVjayhzdHJ1Y3QgaTI0MDBtICopOwogZXh0ZXJuIGludCBpMjQwMG1fc2V0X2luaXRfY29uZmlnKHN0cnVjdCBpMjQwMG0gKiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBpMjQwMG1fdGx2X2hkciAqKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgaTI0MDBtX3NldF9pZGxlX3RpbWVvdXQoc3RydWN0IGkyNDAwbSAqLCB1bnNpZ25lZCk7CiAKIHN0YXRpYyBpbmxpbmUKIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqdXNiX2dldF9lcGQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCBpbnQgZXApCkBAIC03MzMsNiArNzYxLDMyIEBACiBleHRlcm4gdm9pZCBpMjQwMG1fcmVwb3J0X3Rsdl9yZl9zd2l0Y2hlc19zdGF0dXMoCiAJc3RydWN0IGkyNDAwbSAqLCBjb25zdCBzdHJ1Y3QgaTI0MDBtX3Rsdl9yZl9zd2l0Y2hlc19zdGF0dXMgKik7CiAKKy8qCisgKiBIZWxwZXJzIGZvciBmaXJtd2FyZSBiYWNrd2FyZHMgY29tcGFiaWxpdHkKKyAqCisgKiBBcyB3ZSBhaW0gdG8gc3VwcG9ydCBhdCBsZWFzdCB0aGUgZmlybXdhcmUgdmVyc2lvbiB0aGF0IHdhcworICogcmVsZWFzZWQgd2l0aCB0aGUgcHJldmlvdXMga2VybmVsL2RyaXZlciByZWxlYXNlLCBzb21lIGNvZGUgd2lsbCBiZQorICogY29uZGl0aW9uYWxseSBleGVjdXRlZCBkZXBlbmRpbmcgb24gdGhlIGZpcm13YXJlIHZlcnNpb24uIE9uIGVhY2gKKyAqIHJlbGVhc2UsIHRoZSBjb2RlIHRvIHN1cHBvcnQgZncgcmVsZWFzZXMgcGFzdCB0aGUgbGFzdCB0d28gb25lcworICogd2lsbCBiZSBwdXJnZWQuCisgKgorICogQnkgbWFraW5nIGl0IGRlcGVuZCBvbiB0aGlzIG1hY3JvcywgaXQgaXMgZWFzaWVyIHRvIGtlZXAgaXQgYSB0YWIKKyAqIG9uIHdoYXQgaGFzIHRvIGdvIGFuZCB3aGF0IG5vdC4KKyAqLworc3RhdGljIGlubGluZQordW5zaWduZWQgaTI0MDBtX2xlX3YxXzMoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQoreworCS8qIHJ1bm5pbmcgZncgaXMgbG93ZXIgb3IgdjEuMyAqLworCXJldHVybiBpMjQwMG0tPmZ3X3ZlcnNpb24gPD0gMHgwMDA5MDAwMTsKK30KKworc3RhdGljIGlubGluZQordW5zaWduZWQgaTI0MDBtX2dlX3YxXzQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQoreworCS8qIHJ1bm5pbmcgZncgaXMgaGlnaGVyIG9yIHYxLjQgKi8KKwlyZXR1cm4gaTI0MDBtLT5md192ZXJzaW9uID49IDB4MDAwOTAwMDI7Cit9CisKIAogLyoKICAqIERvIGEgbWlsbGlzZWNvbmQtc2xlZXAgZm9yIGFsbG93aW5nIHdpcmVzaGFyayB0byBkdW1wIGFsbCB0aGUgZGF0YQpAQCAtNzUwLDYgKzgwNCw3IEBACiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogCiBleHRlcm4gaW50IGkyNDAwbV9pZGxlX21vZGVfZGlzYWJsZWQ7CitleHRlcm4gaW50IGkyNDAwbV9yeF9yZW9yZGVyX2Rpc2FibGVkOwogCiAKICNlbmRpZiAvKiAjaWZuZGVmIF9fSTI0MDBNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCmluZGV4IGJlOGJlNGQuLjZiMWZlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKQEAgLTI4LDEzICsyOCwxMiBAQAogICogc3BhY2UgYW5kIGZyb20gdGhlIG90aGVyIHNpZGUuIFRoZSB3b3JsZCBpcyAoc2FkbHkpIGNvbmZpZ3VyZWQgdG8KICAqIHRha2UgaW4gb25seSBFdGhlcm5ldCBkZXZpY2VzLi4uCiAgKgotICogQmVjYXVzZSBvZiB0aGlzLCBjdXJyZW50bHkgdGhlcmUgaXMgYW4gY29weS1lYWNoLXJ4ZWQtcGFja2V0Ci0gKiBvdmVyaGVhZCBvbiB0aGUgUlggcGF0aC4gRWFjaCBJUCBwYWNrZXQgaGFzIHRvIGJlIHJlYWxsb2NhdGVkIHRvCi0gKiBhZGQgYW4gZXRoZXJuZXQgaGVhZGVyIChhcyB0aGVyZSBpcyBubyBzcGFjZSBpbiB3aGF0IHdlIGdldCBmcm9tCi0gKiB0aGUgZGV2aWNlKS4gVGhpcyBpcyBhIGtub3duIGRyYXdiYWNrIGFuZCBjb21pbmcgdmVyc2lvbnMgb2YgdGhlCi0gKiBkZXZpY2UncyBmaXJtd2FyZSBhcmUgYmVpbmcgY2hhbmdlZCB0byBhZGQgaGVhZGVyIHNwYWNlIHRoYXQgY2FuIGJlCi0gKiB1c2VkIHRvIGluc2VydCB0aGUgZXRoZXJuZXQgaGVhZGVyIHdpdGhvdXQgaGF2aW5nIHRvIHJlYWxsb2NhdGUgYW5kCi0gKiBjb3B5LgorICogQmVjYXVzZSBvZiB0aGlzLCB3aGVuIHVzaW5nIGZpcm13YXJlcyA8PSB2MS4zLCB0aGVyZSBpcyBhbgorICogY29weS1lYWNoLXJ4ZWQtcGFja2V0IG92ZXJoZWFkIG9uIHRoZSBSWCBwYXRoLiBFYWNoIElQIHBhY2tldCBoYXMKKyAqIHRvIGJlIHJlYWxsb2NhdGVkIHRvIGFkZCBhbiBldGhlcm5ldCBoZWFkZXIgKGFzIHRoZXJlIGlzIG5vIHNwYWNlCisgKiBpbiB3aGF0IHdlIGdldCBmcm9tIHRoZSBkZXZpY2UpLiBUaGlzIGlzIGEga25vd24gZHJhd2JhY2sgYW5kCisgKiBmaXJtd2FyZXMgPj0gMS40IGFkZCBoZWFkZXIgc3BhY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBpbnNlcnQgdGhlCisgKiBldGhlcm5ldCBoZWFkZXIgd2l0aG91dCBoYXZpbmcgdG8gcmVhbGxvY2F0ZSBhbmQgY29weS4KICAqCiAgKiBUWCBlcnJvciBoYW5kbGluZyBpcyB0cmlja3k7IGJlY2F1c2Ugd2UgaGF2ZSB0byBGSUZPL3F1ZXVlIHRoZQogICogYnVmZmVycyBmb3IgdHJhbnNtaXNzaW9uIChhcyB0aGUgaGFyZHdhcmUgbGlrZXMgaXQgYWdncmVnYXRlZCksIHdlCkBAIC02Nyw3ICs2Niw5IEBACiAgKiBpMjQwMG1fdHhfdGltZW91dCAgICAgIENhbGxlZCB3aGVuIHRoZSBkZXZpY2UgdGltZXMgb3V0CiAgKgogICogaTI0MDBtX25ldF9yeCAgICAgICAgICBDYWxsZWQgYnkgdGhlIFJYIGNvZGUgd2hlbiBhIGRhdGEgZnJhbWUgaXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgorICogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKGZpcm13YXJlIDw9IDEuMykKKyAqIGkyNDAwbV9uZXRfZXJ4ICAgICAgICAgQ2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4gYSBkYXRhIGZyYW1lIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSAoZmlybXdhcmUgPj0gMS40KS4KICAqIGkyNDAwbV9uZXRkZXZfc2V0dXAgICAgQ2FsbGVkIHRvIHNldHVwIGFsbCB0aGUgbmV0ZGV2IHN0dWZmIGZyb20KICAqICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NfbmV0ZGV2LgogICovCkBAIC0zOTYsMzAgKzM5NywxOCBAQAogICogQ3JlYXRlIGEgZmFrZSBldGhlcm5ldCBoZWFkZXIKICAqCiAgKiBGb3IgZW11bGF0aW5nIGFuIGV0aGVybmV0IGRldmljZSwgZXZlcnkgcmVjZWl2ZWQgSVAgaGVhZGVyIGhhcyB0bwotICogYmUgcHJlZml4ZWQgd2l0aCBhbiBldGhlcm5ldCBoZWFkZXIuCi0gKgotICogV2hhdCB3ZSByZWNlaXZlIGhhcyAocG90ZW50aWFsbHkpIG1hbnkgSVAgcGFja2V0cyBjb25jYXRlbmF0ZWQgd2l0aAotICogbm8gRVRIX0hMRU4gYnl0ZXMgcHJlZml4ZWQuIFRodXMgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIGFuIGV0aAotICogaGVhZGVyLgotICoKLSAqIFdlIHdvdWxkIGhhdmUgdG8gcmVhbGxvY2F0ZSBvciBkbyB1Z2x5IGZyYWdtZW50IHRyaWNrcyBpbiBvcmRlciB0bwotICogYWRkIGl0LgotICoKLSAqIEJ1dCB3aGF0IHdlIGRvIGlzIHVzZSB0aGUgaGVhZGVyIHNwYWNlIG9mIHRoZSBSWCB0cmFuc2FjdGlvbgotICogKCptc2dfaGRyKSBhcyB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmU7IHRoZW4gd2UnbGwgcG9pbnQgYWxsIHRoZQotICogZGF0YSBza2JzIHRoZXJlLCBhcyB0aGV5IHNoYXJlIHRoZSBzYW1lIGJhY2tpbmcgc3RvcmUuCi0gKgotICogV2Ugb25seSBzdXBwb3J0IElQdjQgZm9yIHYzIGZpcm13YXJlLgorICogYmUgcHJlZml4ZWQgd2l0aCBhbiBldGhlcm5ldCBoZWFkZXIuIEZha2UgaXQgd2l0aCB0aGUgZ2l2ZW4KKyAqIHByb3RvY29sLgogICovCiBzdGF0aWMKIHZvaWQgaTI0MDBtX3J4X2Zha2VfZXRoX2hlYWRlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCSAgICAgICB2b2lkICpfZXRoX2hkcikKKwkJCSAgICAgICB2b2lkICpfZXRoX2hkciwgX19iZTE2IHByb3RvY29sKQogewogCXN0cnVjdCBldGhoZHIgKmV0aF9oZHIgPSBfZXRoX2hkcjsKIAogCW1lbWNweShldGhfaGRyLT5oX2Rlc3QsIG5ldF9kZXYtPmRldl9hZGRyLCBzaXplb2YoZXRoX2hkci0+aF9kZXN0KSk7CiAJbWVtc2V0KGV0aF9oZHItPmhfc291cmNlLCAwLCBzaXplb2YoZXRoX2hkci0+aF9kZXN0KSk7Ci0JZXRoX2hkci0+aF9wcm90byA9IGNwdV90b19iZTE2KEVUSF9QX0lQKTsKKwlldGhfaGRyLT5oX3Byb3RvID0gcHJvdG9jb2w7CiB9CiAKIApAQCAtNDMyLDYgKzQyMSwxMyBAQAogICogQGJ1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEKICAqIEBsZW46IGJ1ZmZlcidzIGxlbmd0aAogICoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG5vdyBmb3IgdGhlIHYxLjMgZmlybXdhcmUuIEl0IHdpbGwgYmUgZGVwcmVjYXRlZAorICogaW4gPj0gMi42LjMxLgorICoKKyAqIE5vdGUgdGhhdCBkdWUgdG8gZmlybXdhcmUgbGltaXRhdGlvbnMsIHdlIGRvbid0IGhhdmUgc3BhY2UgdG8gYWRkCisgKiBhbiBldGhlcm5ldCBoZWFkZXIsIHNvIHdlIG5lZWQgdG8gY29weSBlYWNoIHBhY2tldC4gRmlybXdhcmUKKyAqIHZlcnNpb25zID49IHYxLjQgZml4IHRoaXMgW3NlZSBpMjQwMG1fbmV0X2VyeCgpXS4KKyAqCiAgKiBXZSBqdXN0IGNsb25lIHRoZSBza2IgYW5kIHNldCBpdCB1cCBzbyB0aGF0IGl0J3Mgc2tiLT5kYXRhIHBvaW50ZXIKICAqIHBvaW50cyB0byAiYnVmIiBhbmQgaXQncyBsZW5ndGguCiAgKgpAQCAtNDc4LDcgKzQ3NCw4IEBACiAJCW1lbWNweShza2JfcHV0KHNrYiwgYnVmX2xlbiksIGJ1ZiwgYnVmX2xlbik7CiAJfQogCWkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoaTI0MDBtLT53aW1heF9kZXYubmV0X2RldiwKLQkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOKTsKKwkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAorCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtRVRIX0hMRU4pOwogCXNrYi0+ZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtNDkzLDYgKzQ5MCw2NSBAQAogCQlpMjQwMG0sIGJ1ZiwgYnVmX2xlbik7CiB9CiAKKworLyoKKyAqIGkyNDAwbV9uZXRfZXJ4IC0gcGFzcyBhIG5ldHdvcmsgcGFja2V0IHRvIHRoZSBzdGFjayAoZXh0ZW5kZWQgdmVyc2lvbikKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQHNrYjogdGhlIHNrYiB3aGVyZSB0aGUgcGFja2V0IGlzIC0gdGhlIHNrYiBzaG91bGQgYmUgc2V0IHRvIHBvaW50CisgKiAgICAgYXQgdGhlIElQIHBhY2tldDsgdGhpcyBmdW5jdGlvbiB3aWxsIGFkZCBldGhlcm5ldCBoZWFkZXJzIGlmCisgKiAgICAgbmVlZGVkLgorICogQGNzOiBwYWNrZXQgdHlwZQorICoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG5vdyBmb3IgZmlybXdhcmUgPj0gdjEuNC4gTm90ZSBpdCBpcyBxdWl0ZQorICogc2ltaWxhciB0byBpMjQwMG1fbmV0X3J4KCkgKHVzZWQgb25seSBmb3IgdjEuMyBmaXJtd2FyZSkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSBydW4gZnJvbSBhIHRocmVhZCBjb250ZXh0LiBIb3dldmVyLCB3ZQorICogc3RpbGwgdXNlIG5ldGlmX3J4KCkgaW5zdGVhZCBvZiBuZXRpZl9yZWNlaXZlX3NrYigpIGFzIHdhcworICogcmVjb21tZW5kZWQgaW4gdGhlIG1haWxpbmcgbGlzdC4gUmVhc29uIGlzIGluIHNvbWUgc3RyZXNzIHRlc3RzCisgKiB3aGVuIHNlbmRpbmcvcmVjZWl2aW5nIGEgbG90IG9mIGRhdGEgd2Ugc2VlbSB0byBoaXQgYSBzb2Z0bG9jayBpbgorICogdGhlIGtlcm5lbCdzIFRDUCBpbXBsZW1lbnRhdGlvbiBbYXJvdWRuIHRjcF9kZWxheV90aW1lcigpXS4gVXNpbmcKKyAqIG5ldGlmX3J4KCkgdG9vayBjYXJlIG9mIHRoZSBpc3N1ZS4KKyAqCisgKiBUaGlzIGlzLCBvZiBjb3Vyc2UsIHN0aWxsIG9wZW4gdG8gZG8gbW9yZSByZXNlYXJjaCBvbiB3aHkgcnVubmluZworICogd2l0aCBuZXRpZl9yZWNlaXZlX3NrYigpIGhpdHMgdGhpcyBzb2Z0bG9jay4gRklYTUUuCisgKi8KK3ZvaWQgaTI0MDBtX25ldF9lcngoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgZW51bSBpMjQwMG1fY3MgY3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlpbnQgcHJvdG9jb2w7CisKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCBza2IgJXAgWyV1XSBjcyAlZClcbiIsCisJCSAgaTI0MDBtLCBza2IsIHNrYi0+bGVuLCBjcyk7CisJc3dpdGNoKGNzKSB7CisJY2FzZSBJMjQwME1fQ1NfSVBWNF8wOgorCWNhc2UgSTI0MDBNX0NTX0lQVjQ6CisJCXByb3RvY29sID0gRVRIX1BfSVA7CisJCWkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoaTI0MDBtLT53aW1heF9kZXYubmV0X2RldiwKKwkJCQkJICBza2ItPmRhdGEgLSBFVEhfSExFTiwKKwkJCQkJICBjcHVfdG9fYmUxNihFVEhfUF9JUCkpOworCQlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtRVRIX0hMRU4pOworCQlza2ItPmRldiA9IGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXY7CisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CisJCW5ldF9kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmV0X2Rldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiRVJYOiBCVUc/IENTIHR5cGUgJXUgdW5zdXBwb3J0ZWRcbiIsIGNzKTsKKwkJZ290byBlcnJvcjsKKworCX0KKwlkX3ByaW50ZigzLCBkZXYsICJFUlg6IHJlY2VpdmluZyAlZCBieXRlcyB0byB0aGUgbmV0d29yayBzdGFja1xuIiwKKwkJIHNrYi0+bGVuKTsKKwlkX2R1bXAoNCwgZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwluZXRpZl9yeF9uaShza2IpOwkvKiBzZWUgbm90ZXMgaW4gZnVuY3Rpb24gaGVhZGVyICovCitlcnJvcjoKKwlkX2ZuZW5kKDIsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFsldV0gY3MgJWQpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCBza2IsIHNrYi0+bGVuLCBjcyk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTI0MDBtX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuID0gaTI0MDBtX29wZW4sCiAJLm5kb19zdG9wID0gaTI0MDBtX3N0b3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vcnguYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCmluZGV4IDY5MjIwMjI3Li4wMjQxOWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vcnguYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vcnguYwpAQCAtMzksNyArMzksNyBAQAogICogIC0gVXNlIHNrYl9jbG9uZSgpLCBicmVhayB1cCBwcm9jZXNzaW5nIGluIGNodW5rcwogICogIC0gU3BsaXQgdHJhbnNwb3J0L2RldmljZSBzcGVjaWZpYwogICogIC0gTWFrZSBidWZmZXIgc2l6ZSBkeW5hbWljIHRvIGV4ZXJ0IGxlc3MgbWVtb3J5IHByZXNzdXJlCi0gKgorICogIC0gUlggcmVvcmRlciBzdXBwb3J0CiAgKgogICogVGhpcyBoYW5kbGVzIHRoZSBSWCBwYXRoLgogICoKQEAgLTY5LDYgKzY5LDUwIEBACiAgKiBTZWUgdHguYyBmb3IgYSBkZWVwZXIgZGVzY3JpcHRpb24gb24gYWxpZ25tZW50IHJlcXVpcmVtZW50cyBhbmQKICAqIG90aGVyIGZ1biBmYWN0cyBvZiBpdC4KICAqCisgKiBEQVRBIFBBQ0tFVFMKKyAqCisgKiBJbiBmaXJtd2FyZXMgPD0gdjEuMywgZGF0YSBwYWNrZXRzIGhhdmUgbm8gaGVhZGVyIGZvciBSWCwgYnV0IHRoZXkKKyAqIGRvIGZvciBUWCAoY3VycmVudGx5IHVudXNlZCkuCisgKgorICogSW4gZmlybXdhcmUgPj0gMS40LCBSWCBwYWNrZXRzIGhhdmUgYW4gZXh0ZW5kZWQgaGVhZGVyICgxNgorICogYnl0ZXMpLiBUaGlzIGhlYWRlciBjb252ZXlzIGluZm9ybWF0aW9uIGZvciBtYW5hZ2VtZW50IG9mIGhvc3QKKyAqIHJlb3JkZXJpbmcgb2YgcGFja2V0cyAodGhlIGRldmljZSBvZmZsb2FkcyBzdG9yYWdlIG9mIHRoZSBwYWNrZXRzCisgKiBmb3IgcmVvcmRlcmluZyB0byB0aGUgaG9zdCkuIFJlYWQgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogVGhlIGhlYWRlciBpcyB1c2VkIGFzIGR1bW15IHNwYWNlIHRvIGVtdWxhdGUgYW4gZXRoZXJuZXQgaGVhZGVyIGFuZAorICogdGh1cyBiZSBhYmxlIHRvIGFjdCBhcyBhbiBldGhlcm5ldCBkZXZpY2Ugd2l0aG91dCBoYXZpbmcgdG8gcmVhbGxvY2F0ZS4KKyAqCisgKiBEQVRBIFJYIFJFT1JERVJJTkcKKyAqCisgKiBTdGFydGluZyBpbiBmaXJtd2FyZSB2MS40LCB0aGUgZGV2aWNlIGNhbiBkZWxpdmVyIHBhY2tldHMgZm9yCisgKiBkZWxpdmVyeSB3aXRoIHNwZWNpYWwgcmVvcmRlcmluZyBpbmZvcm1hdGlvbjsgdGhpcyBhbGxvd3MgaXQgdG8KKyAqIG1vcmUgZWZmZWN0aXZlbHkgZG8gcGFja2V0IG1hbmFnZW1lbnQgd2hlbiBzb21lIGZyYW1lcyB3ZXJlIGxvc3QgaW4KKyAqIHRoZSByYWRpbyB0cmFmZmljLgorICoKKyAqIFRodXMsIGZvciBSWCBwYWNrZXRzIHRoYXQgY29tZSBvdXQgb2Ygb3JkZXIsIHRoZSBkZXZpY2UgZ2l2ZXMgdGhlCisgKiBkcml2ZXIgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHF1ZXVlIHRoZW0gcHJvcGVybHkgYW5kIHRoZW4gYXQgc29tZQorICogcG9pbnQsIHRoZSBzaWduYWwgdG8gZGVsaXZlciB0aGUgd2hvbGUgKG9yIHBhcnQpIG9mIHRoZSBxdWV1ZWQKKyAqIHBhY2tldHMgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoZXJlIGFyZSAxNiBzdWNoIHF1ZXVlcy4KKyAqCisgKiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIGEgcGFja2V0IGNvbWVzIGluIHdpdGggdGhlICJuZWVkIHJlb3JkZXIiCisgKiBmbGFnIHNldCBpbiB0aGUgUlggaGVhZGVyLiBXaGVuIHN1Y2ggYml0IGlzIHNldCwgdGhlIGZvbGxvd2luZworICogb3BlcmF0aW9ucyBtaWdodCBiZSBpbmRpY2F0ZWQ6CisgKgorICogIC0gcmVzZXQgcXVldWU6IHNlbmQgYWxsIHF1ZXVlZCBwYWNrZXRzIHRvIHRoZSBPUworICoKKyAqICAtIHF1ZXVlOiBxdWV1ZSBhIHBhY2tldAorICoKKyAqICAtIHVwZGF0ZSB3czogdXBkYXRlIHRoZSBxdWV1ZSdzIHdpbmRvdyBzdGFydCBhbmQgZGVsaXZlciBxdWV1ZWQKKyAqICAgIHBhY2tldHMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYQorICoKKyAqICAtIHF1ZXVlICYgdXBkYXRlIHdzOiBxdWV1ZSBhIHBhY2tldCwgdXBkYXRlIHRoZSB3aW5kb3cgc3RhcnQgYW5kCisgKiAgICBkZWxpdmVyIHF1ZXVlZCBwYWNrZXRzIHRoYXQgbWVldCB0aGUgY3JpdGVyaWEKKyAqCisgKiAoZGVsaXZlcnkgY3JpdGVyaWE6IHRoZSBwYWNrZXQncyBbbm9ybWFsaXplZF0gc2VxdWVuY2UgbnVtYmVyIGlzCisgKiBsb3dlciB0aGFuIHRoZSBuZXcgW25vcm1hbGl6ZWRdIHdpbmRvdyBzdGFydCkuCisgKgorICogU2VlIHRoZSBpMjQwMG1fcm9xXyooKSBmdW5jdGlvbnMgZm9yIGRldGFpbHMuCisgKgogICogUk9BRE1BUAogICoKICAqIGkyNDAwbV9yeApAQCAtNzYsNiArMTIwLDE5IEBACiAgKiAgIGkyNDAwbV9yeF9wbF9kZXNjcl9jaGVjawogICogICBpMjQwMG1fcnhfcGF5bG9hZAogICogICAgIGkyNDAwbV9uZXRfcngKKyAqICAgICBpMjQwMG1fcnhfZWRhdGEKKyAqICAgICAgIGkyNDAwbV9uZXRfZXJ4CisgKiAgICAgICBpMjQwMG1fcm9xX3Jlc2V0CisgKiAgICAgICAgIGkyNDAwbV9uZXRfZXJ4CisgKiAgICAgICBpMjQwMG1fcm9xX3F1ZXVlCisgKiAgICAgICAgIF9faTI0MDBtX3JvcV9xdWV1ZQorICogICAgICAgaTI0MDBtX3JvcV91cGRhdGVfd3MKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICAgIGkyNDAwbV9uZXRfZXJ4CisgKiAgICAgICBpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cworICogICAgICAgICBfX2kyNDAwbV9yb3FfcXVldWUKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICAgIGkyNDAwbV9uZXRfZXJ4CiAgKiAgICAgaTI0MDBtX3J4X2N0bAogICogICAgICAgaTI0MDBtX21zZ19zaXplX2NoZWNrCiAgKiAgICAgICBpMjQwMG1fcmVwb3J0X2hvb2tfd29yayAgICBbaW4gYSB3b3JrcXVldWVdCkBAIC0xNzcsOCArMjM0LDcgQEAKIAlyZXR1cm47CiAKIGVycm9yX3dhaXRlcl9jYW5jZWxsZWQ6Ci0JaWYgKGFja19za2IpCi0JCWtmcmVlX3NrYihhY2tfc2tiKTsKKwlrZnJlZV9za2IoYWNrX3NrYik7CiBlcnJvcl9ub193YWl0ZXI6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTI0MDBtLT5yeF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwpAQCAtMjY1LDggKzMyMSw2IEBACiB9CiAKIAotCi0KIC8qCiAgKiBSZWNlaXZlIGFuZCBzZW5kIHVwIGEgdHJhY2UKICAqCkBAIC0zMTcsMzAgKzM3MSw2MjggQEAKIAogCiAvKgorICogUmVvcmRlciBxdWV1ZSBkYXRhIHN0b3JlZCBvbiBza2ItPmNiIHdoaWxlIHRoZSBza2IgaXMgcXVldWVkIGluIHRoZQorICogcmVvcmRlciBxdWV1ZXMuCisgKi8KK3N0cnVjdCBpMjQwMG1fcm9xX2RhdGEgeworCXVuc2lnbmVkIHNuOwkJLyogU2VyaWFsIG51bWJlciBmb3IgdGhlIHNrYiAqLworCWVudW0gaTI0MDBtX2NzIGNzOwkvKiBwYWNrZXQgdHlwZSBmb3IgdGhlIHNrYiAqLworfTsKKworCisvKgorICogUmVPcmRlciBRdWV1ZQorICoKKyAqIEB3czogV2luZG93IFN0YXJ0OyBzZXF1ZW5jZSBudW1iZXIgd2hlcmUgdGhlIGN1cnJlbnQgd2luZG93IHN0YXJ0CisgKiAgICAgaXMgZm9yIHRoaXMgcXVldWUKKyAqIEBxdWV1ZTogdGhlIHNrYiBxdWV1ZSBpdHNlbGYKKyAqIEBsb2c6IGNpcmN1bGFyIHJpbmcgYnVmZmVyIHVzZWQgdG8gbG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICogICAgIHJlb3JkZXIgcHJvY2VzcyBpbiB0aGlzIHF1ZXVlIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpbiBjYXNlIG9mCisgKiAgICAgZXJyb3IgdG8gaGVscCBkaWFnbm9zZSBpdC4KKyAqCisgKiBUaGlzIGlzIHRoZSBoZWFkIGZvciBhIGxpc3Qgb2Ygc2ticy4gSW4gdGhlIHNrYi0+Y2IgbWVtYmVyIG9mIHRoZQorICogc2tiIHdoZW4gcXVldWVkIGhlcmUgY29udGFpbnMgYSAnc3RydWN0IGkyNDAwbV9yb3FfZGF0YScgd2VyZSB3ZQorICogc3RvcmUgdGhlIHNlcXVlbmNlIG51bWJlciAoc24pIGFuZCB0aGUgY3MgKHBhY2tldCB0eXBlKSBjb21pbmcgZnJvbQorICogdGhlIFJYIHBheWxvYWQgaGVhZGVyIGZyb20gdGhlIGRldmljZS4KKyAqLworc3RydWN0IGkyNDAwbV9yb3EKK3sKKwl1bnNpZ25lZCB3czsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlOworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZyAqbG9nOworfTsKKworCitzdGF0aWMKK3ZvaWQgX19pMjQwMG1fcm9xX2luaXQoc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlyb3EtPndzID0gMDsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZyb3EtPnF1ZXVlKTsKK30KKworCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV9pbmRleChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EpCit7CisJcmV0dXJuICgodW5zaWduZWQgbG9uZykgcm9xIC0gKHVuc2lnbmVkIGxvbmcpIGkyNDAwbS0+cnhfcm9xKQorCQkvIHNpemVvZigqcm9xKTsKK30KKworCisvKgorICogTm9ybWFsaXplIGEgc2VxdWVuY2UgbnVtYmVyIGJhc2VkIG9uIHRoZSBxdWV1ZSdzIHdpbmRvdyBzdGFydAorICoKKyAqIG5zbiA9IChzbiAtIHdzKSAlIDIwNDgKKyAqCisgKiBOb3RlIHRoYXQgaWYgQHNuIDwgQHJvcS0+d3MsIHdlIHN0aWxsIG5lZWQgYSBwb3NpdGl2ZSBudW1iZXI7ICUncworICogc2lnbiBpcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYywgc28gd2Ugbm9ybWFsaXplIGl0IGJ5IGFkZGluZyAyMDQ4CisgKiB0byBicmluZyBpdCB0byBiZSBwb3NpdGl2ZS4KKyAqLworc3RhdGljCit1bnNpZ25lZCBfX2kyNDAwbV9yb3FfbnNuKHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsIHVuc2lnbmVkIHNuKQoreworCWludCByOworCXIgPSAgKChpbnQpIHNuIC0gKGludCkgcm9xLT53cykgJSAyMDQ4OworCWlmIChyIDwgMCkKKwkJciArPSAyMDQ4OworCXJldHVybiByOworfQorCisKKy8qCisgKiBDaXJjdWxhciBidWZmZXIgdG8ga2VlcCB0aGUgbGFzdCBOIHJlb3JkZXIgb3BlcmF0aW9ucworICoKKyAqIEluIGNhc2Ugc29tZXRoaW5nIGZhaWxzLCBkdW1iIHRoZW4gdG8gdHJ5IHRvIGNvbWUgdXAgd2l0aCB3aGF0CisgKiBoYXBwZW5lZC4KKyAqLworZW51bSB7CisJSTI0MDBNX1JPUV9MT0dfTEVOR1RIID0gMzIsCit9OworCitzdHJ1Y3QgaTI0MDBtX3JvcV9sb2cgeworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSB7CisJCWVudW0gaTI0MDBtX3JvX3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgd3MsIGNvdW50LCBzbiwgbnNuLCBuZXdfd3M7CisJfSBlbnRyeVtJMjQwME1fUk9RX0xPR19MRU5HVEhdOworCXVuc2lnbmVkIGluLCBvdXQ7Cit9OworCisKKy8qIFByaW50IGEgbG9nIGVudHJ5ICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9sb2dfZW50cnlfcHJpbnQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCB1bnNpZ25lZCBpbmRleCwKKwkJCQl1bnNpZ25lZCBlX2luZGV4LAorCQkJCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisKKwlzd2l0Y2goZS0+dHlwZSkgeworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUkVTRVQ6CisJCWRldl9lcnIoZGV2LCAicSMlZCByZXNldCAgICAgICAgICAgd3MgJXUgY250ICV1IHNuICV1LyV1IgorCQkJIiAtIG5ldyBud3MgJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuLCBlLT5uZXdfd3MpOworCQlicmVhazsKKwljYXNlIEkyNDAwTV9ST19UWVBFX1BBQ0tFVDoKKwkJZGV2X2VycihkZXYsICJxIyVkIHF1ZXVlICAgICAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuKTsKKwkJYnJlYWs7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9XUzoKKwkJZGV2X2VycihkZXYsICJxIyVkIHVwZGF0ZV93cyAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXUiCisJCQkiIC0gbmV3IG53cyAldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24sIGUtPm5ld193cyk7CisJCWJyZWFrOworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTOgorCQlkZXZfZXJyKGRldiwgInEjJWQgcXVldWVfdXBkYXRlX3dzIHdzICV1IGNudCAldSBzbiAldS8ldSIKKwkJCSIgLSBuZXcgbndzICV1XG4iLAorCQkJaW5kZXgsIGUtPndzLCBlLT5jb3VudCwgZS0+c24sIGUtPm5zbiwgZS0+bmV3X3dzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJxIyVkIEJVRz8gZW50cnkgJXUgLSB1bmtub3duIHR5cGUgJXVcbiIsCisJCQlpbmRleCwgZV9pbmRleCwgZS0+dHlwZSk7CisJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9sb2dfYWRkKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwKKwkJCXN0cnVjdCBpMjQwMG1fcm9xICpyb3EsIGVudW0gaTI0MDBtX3JvX3R5cGUgdHlwZSwKKwkJCXVuc2lnbmVkIHdzLCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgc24sCisJCQl1bnNpZ25lZCBuc24sIHVuc2lnbmVkIG5ld193cykKK3sKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9sb2dfZW50cnkgKmU7CisJdW5zaWduZWQgY250X2lkeDsKKwlpbnQgaW5kZXggPSBfX2kyNDAwbV9yb3FfaW5kZXgoaTI0MDBtLCByb3EpOworCisJLyogaWYgd2UgcnVuIG91dCBvZiBzcGFjZSwgd2UgZWF0IGZyb20gdGhlIGVuZCAqLworCWlmIChyb3EtPmxvZy0+aW4gLSByb3EtPmxvZy0+b3V0ID09IEkyNDAwTV9ST1FfTE9HX0xFTkdUSCkKKwkJcm9xLT5sb2ctPm91dCsrOworCWNudF9pZHggPSByb3EtPmxvZy0+aW4rKyAlIEkyNDAwTV9ST1FfTE9HX0xFTkdUSDsKKwllID0gJnJvcS0+bG9nLT5lbnRyeVtjbnRfaWR4XTsKKworCWUtPnR5cGUgPSB0eXBlOworCWUtPndzID0gd3M7CisJZS0+Y291bnQgPSBjb3VudDsKKwllLT5zbiA9IHNuOworCWUtPm5zbiA9IG5zbjsKKwllLT5uZXdfd3MgPSBuZXdfd3M7CisKKwlpZiAoZF90ZXN0KDEpKQorCQlpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChpMjQwMG0sIGluZGV4LCBjbnRfaWR4LCBlKTsKK30KKworCisvKiBEdW1wIGFsbCB0aGUgZW50cmllcyBpbiB0aGUgRklGTyBhbmQgcmVpbml0aWFsaXplIGl0ICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9sb2dfZHVtcChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EpCit7CisJdW5zaWduZWQgY250LCBjbnRfaWR4OworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZTsKKwlpbnQgaW5kZXggPSBfX2kyNDAwbV9yb3FfaW5kZXgoaTI0MDBtLCByb3EpOworCisJQlVHX09OKHJvcS0+bG9nLT5vdXQgPiByb3EtPmxvZy0+aW4pOworCWZvciAoY250ID0gcm9xLT5sb2ctPm91dDsgY250IDwgcm9xLT5sb2ctPmluOyBjbnQrKykgeworCQljbnRfaWR4ID0gY250ICUgSTI0MDBNX1JPUV9MT0dfTEVOR1RIOworCQllID0gJnJvcS0+bG9nLT5lbnRyeVtjbnRfaWR4XTsKKwkJaTI0MDBtX3JvcV9sb2dfZW50cnlfcHJpbnQoaTI0MDBtLCBpbmRleCwgY250X2lkeCwgZSk7CisJCW1lbXNldChlLCAwLCBzaXplb2YoKmUpKTsKKwl9CisJcm9xLT5sb2ctPmluID0gcm9xLT5sb2ctPm91dCA9IDA7Cit9CisKKworLyoKKyAqIEJhY2tib25lIGZvciB0aGUgcXVldWluZyBvZiBhbiBza2IgKGJ5IG5vcm1hbGl6ZWQgc2VxdWVuY2UgbnVtYmVyKQorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiByZW9yZGVyIHF1ZXVlIHdoZXJlIHRvIGFkZAorICogQHNrYjogdGhlIHNrYiB0byBhZGQKKyAqIEBzbjogdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgc2tiCisgKiBAbnNuOiB0aGUgbm9ybWFsaXplZCBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHNrYiAocHJlLWNvbXB1dGVkIGJ5IHRoZQorICogICAgIGNhbGxlciBmcm9tIHRoZSBAc24gYW5kIEByb3EtPndzKS4KKyAqCisgKiBXZSB0cnkgZmlyc3QgYSBjb3VwbGUgb2YgcXVpY2sgY2FzZXM6CisgKgorICogICAtIHRoZSBxdWV1ZSBpcyBlbXB0eQorICogICAtIHRoZSBza2Igd291bGQgYmUgYXBwZW5kZWQgdG8gdGhlIHF1ZXVlCisgKgorICogVGhlc2Ugd2lsbCBiZSB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucy4KKyAqCisgKiBJZiB0aGVzZSBmYWlsLCB0aGVuIHdlIGhhdmUgdG8gZG8gYSBzb3J0ZWQgaW5zZXJ0aW9uIGluIHRoZSBxdWV1ZSwKKyAqIHdoaWNoIGlzIHRoZSBzbG93ZXN0IHBhdGguCisgKgorICogV2UgZG9uJ3QgaGF2ZSB0byBhY3F1aXJlIGEgcmVmZXJlbmNlIGNvdW50IGFzIHdlIGFyZSBnb2luZyB0byBvd24gaXQuCisgKi8KK3N0YXRpYwordm9pZCBfX2kyNDAwbV9yb3FfcXVldWUoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc24sIHVuc2lnbmVkIG5zbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyLCAqcm9xX2RhdGE7CisJdW5zaWduZWQgbnNuX2l0cjsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUgbnNuICV1KVxuIiwKKwkJICBpMjQwMG0sIHJvcSwgc2tiLCBzbiwgbnNuKTsKKworCXJvcV9kYXRhID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYi0+Y2I7CisJQlVJTERfQlVHX09OKHNpemVvZigqcm9xX2RhdGEpID4gc2l6ZW9mKHNrYi0+Y2IpKTsKKwlyb3FfZGF0YS0+c24gPSBzbjsKKwlkX3ByaW50ZigzLCBkZXYsICJFUlg6IHJvcSAlcCBbd3MgJXVdIG5zbiAlZCBzbiAldVxuIiwKKwkJIHJvcSwgcm9xLT53cywgbnNuLCByb3FfZGF0YS0+c24pOworCisJLyogUXVldWVzIHdpbGwgYmUgZW1wdHkgb24gbm90LXNvLWJhZCBlbnZpcm9ubWVudHMsIHNvIHRyeQorCSAqIHRoYXQgZmlyc3QgKi8KKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZyb3EtPnF1ZXVlKSkgeworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIGZpcnN0IG9uZVxuIiwgcm9xKTsKKwkJX19za2JfcXVldWVfaGVhZCgmcm9xLT5xdWV1ZSwgc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vdyB0cnkgYXBwZW5kLCBhcyBtb3N0IG9mIHRoZSBvcGVyYXRpb25zIHdpbGwgYmUgdGhhdCAqLworCXNrYl9pdHIgPSBza2JfcGVla190YWlsKCZyb3EtPnF1ZXVlKTsKKwlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJbnNuX2l0ciA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCByb3FfZGF0YV9pdHItPnNuKTsKKwkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJaWYgKG5zbiA+PSBuc25faXRyKSB7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gYXBwZW5kZWQgYWZ0ZXIgJXAgKG5zbiAlZCBzbiAldSlcbiIsCisJCQkgcm9xLCBza2JfaXRyLCBuc25faXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJX19za2JfcXVldWVfdGFpbCgmcm9xLT5xdWV1ZSwgc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vbmUgb2YgdGhlIGZhc3QgcGF0aHMgb3B0aW9uIHdvcmtlZC4gSXRlcmF0ZSB0byBmaW5kIHRoZQorCSAqIHJpZ2h0IHNwb3Qgd2hlcmUgdG8gaW5zZXJ0IHRoZSBwYWNrZXQ7IHdlIGtub3cgdGhlIHF1ZXVlIGlzCisJICogbm90IGVtcHR5LCBzbyB3ZSBhcmUgbm90IHRoZSBmaXJzdCBvbmVzOyB3ZSBhbHNvIGtub3cgd2UKKwkgKiBhcmUgbm90IGdvaW5nIHRvIGJlIHRoZSBsYXN0IG9uZXMuIFRoZSBsaXN0IGlzIHNvcnRlZCwgc28KKwkgKiB3ZSBoYXZlIHRvIGluc2VydCBiZWZvcmUgdGhlIHRoZSBmaXJzdCBndXkgd2l0aCBhbiBuc25faXRyCisJICogZ3JlYXRlciB0aGF0IG91ciBuc24uICovCisJc2tiX3F1ZXVlX3dhbGsoJnJvcS0+cXVldWUsIHNrYl9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWlmIChuc25faXRyID4gbnNuKSB7CisJCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHF1ZXVlZCBiZWZvcmUgJXAgIgorCQkJCSAiKG5zbiAlZCBzbiAldSlcbiIsIHJvcSwgc2tiX2l0ciwgbnNuX2l0ciwKKwkJCQkgcm9xX2RhdGFfaXRyLT5zbik7CisJCQlfX3NrYl9xdWV1ZV9iZWZvcmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHNrYik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhhdCBpcyBWRVJZIGJhZCAtLSBwcmludCBpbmZvIHRvIGhlbHAKKwkgKiBkaWFnbm9zZSBhbmQgY3Jhc2ggaXQgKi8KKwlkZXZfZXJyKGRldiwgIlNXIEJVRz8gZmFpbGVkIHRvIGluc2VydCBwYWNrZXRcbiIpOworCWRldl9lcnIoZGV2LCAiRVJYOiByb3EgJXAgW3dzICV1XSBza2IgJXAgbnNuICVkIHNuICV1XG4iLAorCQlyb3EsIHJvcS0+d3MsIHNrYiwgbnNuLCByb3FfZGF0YS0+c24pOworCXNrYl9xdWV1ZV93YWxrKCZyb3EtPnF1ZXVlLCBza2JfaXRyKSB7CisJCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwkJbnNuX2l0ciA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJLyogTlNOIGJvdW5kcyBhc3N1bWVkIGNvcnJlY3QgKGNoZWNrZWQgd2hlbiBpdCB3YXMgcXVldWVkKSAqLworCQlkZXZfZXJyKGRldiwgIkVSWDogcm9xICVwIHNrYl9pdHIgJXAgbnNuICVkIHNuICV1XG4iLAorCQkJcm9xLCBza2JfaXRyLCBuc25faXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwl9CisJQlVHKCk7CitvdXQ6CisJZF9mbmVuZCg0LCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUgbnNuICVkKSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCXJldHVybjsKK30KKworCisvKgorICogQmFja2JvbmUgZm9yIHRoZSB1cGRhdGUgd2luZG93IHN0YXJ0IG9wZXJhdGlvbgorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiBSZW9yZGVyIHF1ZXVlCisgKiBAc246IE5ldyBzZXF1ZW5jZSBudW1iZXIKKyAqCisgKiBVcGRhdGVzIHRoZSB3aW5kb3cgc3RhcnQgb2YgYSBxdWV1ZTsgd2hlbiBkb2luZyBzbywgaXQgbXVzdCBkZWxpdmVyCisgKiB0byB0aGUgbmV0d29ya2luZyBzdGFjayBhbGwgdGhlIHF1ZXVlZCBza2IncyB3aG9zZSBub3JtYWxpemVkCisgKiBzZXF1ZW5jZSBudW1iZXIgaXMgbG93ZXIgdGhhbiB0aGUgbmV3IG5vcm1hbGl6ZWQgd2luZG93IHN0YXJ0LgorICovCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV91cGRhdGVfd3Moc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkJCXVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0ciwgKnRtcF9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyOworCXVuc2lnbmVkIG5ld19ud3MsIG5zbl9pdHI7CisKKwluZXdfbndzID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHNuKTsKKwlpZiAodW5saWtlbHkobmV3X253cyA+PSAxMDI0KSAmJiBkX3Rlc3QoMSkpIHsKKwkJZGV2X2VycihkZXYsICJTVyBCVUc/IF9fdXBkYXRlX3dzIG5ld19ud3MgJXUgKHNuICV1IHdzICV1KVxuIiwKKwkJCW5ld19ud3MsIHNuLCByb3EtPndzKTsKKwkJV0FSTl9PTigxKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJfQorCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHRtcF9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWlmIChuc25faXRyIDwgbmV3X253cykgeworCQkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSByZWxlYXNlIHNrYiAlcCAiCisJCQkJICIobnNuICV1LyV1IG5ldyBud3MgJXUpXG4iLAorCQkJCSByb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24sCisJCQkJIG5ld19ud3MpOworCQkJX19za2JfdW5saW5rKHNrYl9pdHIsICZyb3EtPnF1ZXVlKTsKKwkJCWkyNDAwbV9uZXRfZXJ4KGkyNDAwbSwgc2tiX2l0ciwgcm9xX2RhdGFfaXRyLT5jcyk7CisJCX0KKwkJZWxzZQorCQkJYnJlYWs7CS8qIHJlc3Qgb2YgcGFja2V0cyBhbGwgbnNuX2l0ciA+IG53cyAqLworCX0KKwlyb3EtPndzID0gc247CisJcmV0dXJuIG5ld19ud3M7Cit9CisKKworLyoKKyAqIFJlc2V0IGEgcXVldWUKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQGNpbjogUXVldWUgSW5kZXgKKyAqCisgKiBEZWxpdmVyIGFsbCB0aGUgcGFja2V0cyBhbmQgcmVzZXQgdGhlIHdpbmRvdy1zdGFydCB0byB6ZXJvLiBOYW1lIGlzCisgKiBraW5kIG9mIG1pc2xlYWRpbmcuCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3Jlc2V0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9pdHIsICp0bXBfaXRyOworCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhX2l0cjsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcClcbiIsIGkyNDAwbSwgcm9xKTsKKwlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1JFU0VULAorCQkJICAgICByb3EtPndzLCBza2JfcXVldWVfbGVuKCZyb3EtPnF1ZXVlKSwKKwkJCSAgICAgfjAsIH4wLCAwKTsKKwlza2JfcXVldWVfd2Fsa19zYWZlKCZyb3EtPnF1ZXVlLCBza2JfaXRyLCB0bXBfaXRyKSB7CisJCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSByZWxlYXNlIHNrYiAlcCAoc24gJXUpXG4iLAorCQkJIHJvcSwgc2tiX2l0ciwgcm9xX2RhdGFfaXRyLT5zbik7CisJCV9fc2tiX3VubGluayhza2JfaXRyLCAmcm9xLT5xdWV1ZSk7CisJCWkyNDAwbV9uZXRfZXJ4KGkyNDAwbSwgc2tiX2l0ciwgcm9xX2RhdGFfaXRyLT5jcyk7CisJfQorCXJvcS0+d3MgPSAwOworCWRfZm5lbmQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXApID0gdm9pZFxuIiwgaTI0MDBtLCByb3EpOworCXJldHVybjsKK30KKworCisvKgorICogUXVldWUgYSBwYWNrZXQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQGNpbjogUXVldWUgSW5kZXgKKyAqIEBza2I6IGNvbnRhaW5pbmcgdGhlIHBhY2tldCBkYXRhCisgKiBAZmJuOiBGaXJzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKiBAbGJuOiBMYXN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqCisgKiBUaGUgaGFyZHdhcmUgaXMgYXNraW5nIHRoZSBkcml2ZXIgdG8gcXVldWUgYSBwYWNrZXQgZm9yIGxhdGVyCisgKiBkZWxpdmVyeSB0byB0aGUgbmV0d29ya2luZyBzdGFjay4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfcXVldWUoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgdW5zaWduZWQgbGJuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBuc24sIGxlbjsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgbGJuICV1KSA9IHZvaWRcbiIsCisJCSAgaTI0MDBtLCByb3EsIHNrYiwgbGJuKTsKKwlsZW4gPSBza2JfcXVldWVfbGVuKCZyb3EtPnF1ZXVlKTsKKwluc24gPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgbGJuKTsKKwlpZiAodW5saWtlbHkobnNuID49IDEwMjQpKSB7CisJCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBxdWV1ZSBuc24gJWQgKGxibiAldSB3cyAldSlcbiIsCisJCQluc24sIGxibiwgcm9xLT53cyk7CisJCWkyNDAwbV9yb3FfbG9nX2R1bXAoaTI0MDBtLCByb3EpOworCQlpMjQwMG0tPmJ1c19yZXNldChpMjQwMG0sIEkyNDAwTV9SVF9XQVJNKTsKKwl9IGVsc2UgeworCQlfX2kyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgbGJuLCBuc24pOworCQlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1BBQ0tFVCwKKwkJCQkgICAgIHJvcS0+d3MsIGxlbiwgbGJuLCBuc24sIH4wKTsKKwl9CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgbGJuICV1KSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgcm9xLCBza2IsIGxibik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBVcGRhdGUgdGhlIHdpbmRvdyBzdGFydCBpbiBhIHJlb3JkZXIgcXVldWUgYW5kIGRlbGl2ZXIgYWxsIHNrYnMKKyAqIHdpdGggYSBsb3dlciB3aW5kb3cgc3RhcnQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQHJvcTogUmVvcmRlciBxdWV1ZQorICogQHNuOiBOZXcgc2VxdWVuY2UgbnVtYmVyCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkgIHVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBvbGRfd3MsIG5zbiwgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNuICV1KVxuIiwgaTI0MDBtLCByb3EsIHNuKTsKKwlvbGRfd3MgPSByb3EtPndzOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV91cGRhdGVfd3MoaTI0MDBtLCByb3EsIHNuKTsKKwlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1dTLAorCQkJICAgICBvbGRfd3MsIGxlbiwgc24sIG5zbiwgcm9xLT53cyk7CisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNuICV1KSA9IHZvaWRcbiIsIGkyNDAwbSwgcm9xLCBzbik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBRdWV1ZSBhIHBhY2tldCBhbmQgdXBkYXRlIHRoZSB3aW5kb3cgc3RhcnQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQGNpbjogUXVldWUgSW5kZXgKKyAqIEBza2I6IGNvbnRhaW5pbmcgdGhlIHBhY2tldCBkYXRhCisgKiBAZmJuOiBGaXJzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKiBAc246IExhc3QgYmxvY2sgbnVtYmVyIG9mIHRoZSBwYWNrZXQgaW4gQHNrYgorICoKKyAqIE5vdGUgdGhhdCB1bmxpa2UgaTI0MDBtX3JvcV91cGRhdGVfd3MoKSwgd2hpY2ggc2V0cyB0aGUgbmV3IHdpbmRvdworICogc3RhcnQgdG8gQHNuLCBpbiBoZXJlIHdlJ2xsIHNldCBpdCB0byBAc24gKyAxLgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9xdWV1ZV91cGRhdGVfd3Moc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkJCXN0cnVjdCBza19idWZmICogc2tiLCB1bnNpZ25lZCBzbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJdW5zaWduZWQgbnNuLCBvbGRfd3MsIGxlbjsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUpXG4iLAorCQkgIGkyNDAwbSwgcm9xLCBza2IsIHNuKTsKKwlsZW4gPSBza2JfcXVldWVfbGVuKCZyb3EtPnF1ZXVlKTsKKwluc24gPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgc24pOworCW9sZF93cyA9IHJvcS0+d3M7CisJaWYgKHVubGlrZWx5KG5zbiA+PSAxMDI0KSkgeworCQlkZXZfZXJyKGRldiwgIlNXIEJVRz8gcXVldWVfdXBkYXRlX3dzIG5zbiAldSAoc24gJXUgd3MgJXUpXG4iLAorCQkJbnNuLCBzbiwgcm9xLT53cyk7CisJCWkyNDAwbV9yb3FfbG9nX2R1bXAoaTI0MDBtLCByb3EpOworCQlpMjQwMG0tPmJ1c19yZXNldChpMjQwMG0sIEkyNDAwTV9SVF9XQVJNKTsKKwl9IGVsc2UgeworCQkvKiBpZiB0aGUgcXVldWUgaXMgZW1wdHksIGRvbid0IGJvdGhlciBhcyB3ZSdkIHF1ZXVlCisJCSAqIGl0IGFuZCBpbm1lZGlhdGVseSB1bnF1ZXVlIGl0IC0tIGp1c3QgZGVsaXZlciBpdCAqLworCQlpZiAobGVuID09IDApIHsKKwkJCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhOworCQkJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwkJCWkyNDAwbV9uZXRfZXJ4KGkyNDAwbSwgc2tiLCByb3FfZGF0YS0+Y3MpOworCQl9CisJCWVsc2UgeworCQkJX19pMjQwMG1fcm9xX3F1ZXVlKGkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCQkJX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc24gKyAxKTsKKwkJfQorCQlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1BBQ0tFVF9XUywKKwkJCQkgICBvbGRfd3MsIGxlbiwgc24sIG5zbiwgcm9xLT53cyk7CisJfQorCWRfZm5lbmQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc2tiICVwIHNuICV1KSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgcm9xLCBza2IsIHNuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQHNrYl9yeDogc2tiIHRoYXQgY29udGFpbnMgdGhlIGV4dGVuZGVkIGRhdGEgcGFja2V0CisgKiBAc2luZ2xlX2xhc3Q6IDEgaWYgdGhlIHBheWxvYWQgaXMgdGhlIG9ubHkgb25lIG9yIHRoZSBsYXN0IG9uZSBvZgorICogICAgIHRoZSBza2IuCisgKiBAcGF5bG9hZDogcG9pbnRlciB0byB0aGUgcGFja2V0J3MgZGF0YSBpbnNpZGUgdGhlIHNrYgorICogQHNpemU6IHNpemUgb2YgdGhlIHBheWxvYWQKKyAqCisgKiBTdGFydGluZyBpbiB2MS40IG9mIHRoZSBpMjQwMG0ncyBmaXJtd2FyZSwgdGhlIGRldmljZSBjYW4gc2VuZCBkYXRhCisgKiBwYWNrZXRzIHRvIHRoZSBob3N0IGluIGFuIGV4dGVuZGVkIGZvcm1hdCB0aGF0OyB0aGlzIGluY3VkZXMgYSAxNgorICogYnl0ZSBoZWFkZXIgKHN0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyKS4gVXNpbmcgdGhpcyBoZWFkZXIncyBzcGFjZQorICogd2UgY2FuIGZha2UgZXRoZXJuZXQgaGVhZGVycyBmb3IgZXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbiB3aXRob3V0CisgKiBoYXZpbmcgdG8gY29weSBwYWNrZXRzIGFyb3VuZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgc2FpZCBwYXRoLgorICoKKyAqCisgKiBSZWNlaXZlIGFuZCBzZW5kIHVwIGFuIGV4dGVuZGVkIGRhdGEgcGFja2V0IHRoYXQgcmVxdWlyZXMgbm8gcmVvcmRlcmluZworICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2tiX3J4OiBza2IgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqIEBzaW5nbGVfbGFzdDogMSBpZiB0aGUgcGF5bG9hZCBpcyB0aGUgb25seSBvbmUgb3IgdGhlIGxhc3Qgb25lIG9mCisgKiAgICAgdGhlIHNrYi4KKyAqIEBwYXlsb2FkOiBwb2ludGVyIHRvIHRoZSBwYWNrZXQncyBkYXRhIChwYXN0IHRoZSBhY3R1YWwgZXh0ZW5kZWQKKyAqICAgICBkYXRhIHBheWxvYWQgaGVhZGVyKS4KKyAqIEBzaXplOiBzaXplIG9mIHRoZSBwYXlsb2FkCisgKgorICogUGFzcyBvdmVyIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGEgZGF0YSBwYWNrZXQgdGhhdCBtaWdodCBoYXZlCisgKiByZW9yZGVyaW5nIHJlcXVpcmVtZW50cy4KKyAqCisgKiBUaGlzIG5lZWRzIHRvIHRoZSBkZWNpZGUgaWYgdGhlIHNrYiBpbiB3aGljaCB0aGUgcGFja2V0IGlzCisgKiBjb250YWluZWQgY2FuIGJlIHJldXNlZCBvciBpZiBpdCBuZWVkcyB0byBiZSBjbG9uZWQuIFRoZW4gaXQgaGFzIHRvCisgKiBiZSB0cmltbWVkIGluIHRoZSBlZGdlcyBzbyB0aGF0IHRoZSBiZWdpbm5pbmcgaXMgdGhlIHNwYWNlIGZvciBldGgKKyAqIGhlYWRlciBhbmQgdGhlbiBwYXNzIGl0IHRvIGkyNDAwbV9uZXRfZXJ4KCkgZm9yIHRoZSBzdGFjaworICoKKyAqIEFzc3VtZXMgdGhlIGNhbGxlciBoYXMgdmVyaWZpZWQgdGhlIHNhbml0eSBvZiB0aGUgcGF5bG9hZCAoc2l6ZSwKKyAqIGV0YykgYWxyZWFkeS4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yeF9lZGF0YShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBza19idWZmICpza2JfcngsCisJCSAgICAgdW5zaWduZWQgc2luZ2xlX2xhc3QsIGNvbnN0IHZvaWQgKnBheWxvYWQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwljb25zdCBzdHJ1Y3QgaTI0MDBtX3BsX2VkYXRhX2hkciAqaGRyID0gcGF5bG9hZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwllbnVtIGkyNDAwbV9jcyBjczsKKwl1MzIgcmVvcmRlcjsKKwl1bnNpZ25lZCByb19uZWVkZWQsIHJvX3R5cGUsIHJvX2Npbiwgcm9fc247CisJc3RydWN0IGkyNDAwbV9yb3EgKnJvcTsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YTsKKworCUJVSUxEX0JVR19PTihFVEhfSExFTiA+IHNpemVvZigqaGRyKSk7CisKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCBza2JfcnggJXAgc2luZ2xlICV1IHBheWxvYWQgJXAgIgorCQkgICJzaXplICV6dSlcbiIsIGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgc2l6ZSk7CisJaWYgKHNpemUgPCBzaXplb2YoKmhkcikpIHsKKwkJZGV2X2VycihkZXYsICJFUlg6IEhXIEJVRz8gbWVzc2FnZSB3aXRoIHNob3J0IGhlYWRlciAoJXp1ICIKKwkJCSJ2cyAlenUgYnl0ZXMgZXhwZWN0ZWQpXG4iLCBzaXplLCBzaXplb2YoKmhkcikpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChzaW5nbGVfbGFzdCkgeworCQlza2IgPSBza2JfZ2V0KHNrYl9yeCk7CisJCWRfcHJpbnRmKDMsIGRldiwgIkVSWDogc2tiICVwIHJldXNpbmdcbiIsIHNrYik7CisJfSBlbHNlIHsKKwkJc2tiID0gc2tiX2Nsb25lKHNrYl9yeCwgR0ZQX0tFUk5FTCk7CisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJFUlg6IG5vIG1lbW9yeSB0byBjbG9uZSBza2JcbiIpOworCQkJbmV0X2Rldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJZ290byBlcnJvcl9za2JfY2xvbmU7CisJCX0KKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBza2IgJXAgY2xvbmVkIGZyb20gJXBcbiIsIHNrYiwgc2tiX3J4KTsKKwl9CisJLyogbm93IHdlIGhhdmUgdG8gcHVsbCBhbmQgdHJpbSBzbyB0aGF0IHRoZSBza2IgcG9pbnRzIHRvIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgSVAgcGFja2V0OyB0aGUgbmV0ZGV2IHBhcnQgd2lsbCBhZGQgdGhlCisJICogZXRoZXJuZXQgaGVhZGVyIGFzIG5lZWRlZCAtIHdlIGtub3cgdGhlcmUgaXMgZW5vdWdoIHNwYWNlCisJICogYmVjYXVzZSB3ZSBjaGVja2VkIGluIGkyNDAwbV9yeF9lZGF0YSgpLiAqLworCXNrYl9wdWxsKHNrYiwgcGF5bG9hZCArIHNpemVvZigqaGRyKSAtICh2b2lkICopIHNrYi0+ZGF0YSk7CisJc2tiX3RyaW0oc2tiLCAodm9pZCAqKSBza2JfZW5kX3BvaW50ZXIoc2tiKSAtIHBheWxvYWQgLSBzaXplb2YoKmhkcikpOworCisJcmVvcmRlciA9IGxlMzJfdG9fY3B1KGhkci0+cmVvcmRlcik7CisJcm9fbmVlZGVkID0gcmVvcmRlciAmIEkyNDAwTV9ST19ORUVERUQ7CisJY3MgPSBoZHItPmNzOworCWlmIChyb19uZWVkZWQpIHsKKwkJcm9fdHlwZSA9IChyZW9yZGVyID4+IEkyNDAwTV9ST19UWVBFX1NISUZUKSAmIEkyNDAwTV9ST19UWVBFOworCQlyb19jaW4gPSAocmVvcmRlciA+PiBJMjQwME1fUk9fQ0lOX1NISUZUKSAmIEkyNDAwTV9ST19DSU47CisJCXJvX3NuID0gKHJlb3JkZXIgPj4gSTI0MDBNX1JPX1NOX1NISUZUKSAmIEkyNDAwTV9ST19TTjsKKworCQlyb3EgPSAmaTI0MDBtLT5yeF9yb3Fbcm9fY2luXTsKKwkJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwkJcm9xX2RhdGEtPnNuID0gcm9fc247CisJCXJvcV9kYXRhLT5jcyA9IGNzOworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJlb3JkZXIgbmVlZGVkOiAiCisJCQkgInR5cGUgJXUgY2luICV1IFt3cyAldV0gc24gJXUvJXUgbGVuICV6dUJcbiIsCisJCQkgcm9fdHlwZSwgcm9fY2luLCByb3EtPndzLCByb19zbiwKKwkJCSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9fc24pLCBzaXplKTsKKwkJZF9kdW1wKDIsIGRldiwgcGF5bG9hZCwgc2l6ZSk7CisJCXN3aXRjaChyb190eXBlKSB7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUkVTRVQ6CisJCQlpMjQwMG1fcm9xX3Jlc2V0KGkyNDAwbSwgcm9xKTsKKwkJCWtmcmVlX3NrYihza2IpOwkvKiBubyBkYXRhIGhlcmUgKi8KKwkJCWJyZWFrOworCQljYXNlIEkyNDAwTV9ST19UWVBFX1BBQ0tFVDoKKwkJCWkyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgcm9fc24pOworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfV1M6CisJCQlpMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgcm9fc24pOworCQkJa2ZyZWVfc2tiKHNrYik7CS8qIG5vIGRhdGEgaGVyZSAqLworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTOgorCQkJaTI0MDBtX3JvcV9xdWV1ZV91cGRhdGVfd3MoaTI0MDBtLCByb3EsIHNrYiwgcm9fc24pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGRldiwgIkhXIEJVRz8gdW5rbm93biByZW9yZGVyIHR5cGUgJXVcbiIsIHJvX3R5cGUpOworCQl9CisJfQorCWVsc2UKKwkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2IsIGNzKTsKK2Vycm9yX3NrYl9jbG9uZToKK2Vycm9yOgorCWRfZm5lbmQoMiwgZGV2LCAiKGkyNDAwbSAlcCBza2JfcnggJXAgc2luZ2xlICV1IHBheWxvYWQgJXAgIgorCQkic2l6ZSAlenUpID0gdm9pZFxuIiwgaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBzaXplKTsKKwlyZXR1cm47Cit9CisKKworLyoKICAqIEFjdCBvbiBhIHJlY2VpdmVkIHBheWxvYWQKICAqCiAgKiBAaTI0MDBtOiBkZXZpY2UgaW5zdGFuY2UKICAqIEBza2Jfcng6IHNrYiB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gd2FzIHJlY2VpdmVkCi0gKiBAc2luZ2xlOiAxIGlmIHRoZXJlIGlzIG9ubHkgb25lIHBheWxvYWQsIDAgb3RoZXJ3aXNlCisgKiBAc2luZ2xlX2xhc3Q6IDEgdGhpcyBpcyB0aGUgb25seSBwYXlsb2FkIG9yIHRoZSBsYXN0IG9uZSAoc28gdGhlCisgKiAgICAgc2tiIGNhbiBiZSByZXVzZWQgaW5zdGVhZCBvZiBjbG9uZWQpLgogICogQHBsZDogcGF5bG9hZCBkZXNjcmlwdG9yCiAgKiBAcGF5bG9hZDogcGF5bG9hZCBkYXRhCiAgKgogICogVXBvbiByZWNlcHRpb24gb2YgYSBwYXlsb2FkLCBsb29rIGF0IGl0cyBndXRzIGluIHRoZSBwYXlsb2FkCi0gKiBkZXNjcmlwdG9yIGFuZCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LgorICogZGVzY3JpcHRvciBhbmQgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdC4gSWYgaXQgaXMgYSBzaW5nbGUgcGF5bG9hZAorICogc2tiIG9yIGlmIHRoZSBsYXN0IHNrYiBpcyBhIGRhdGEgcGFja2V0LCB0aGUgc2tiIHdpbGwgYmUgcmVmZXJlbmNlZAorICogYW5kIG1vZGlmaWVkIChzbyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgY2xvbmVkKS4KICAqLwogc3RhdGljCiB2b2lkIGkyNDAwbV9yeF9wYXlsb2FkKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYl9yeCwKLQkJICAgICAgIHVuc2lnbmVkIHNpbmdsZSwgY29uc3Qgc3RydWN0IGkyNDAwbV9wbGQgKnBsZCwKKwkJICAgICAgIHVuc2lnbmVkIHNpbmdsZV9sYXN0LCBjb25zdCBzdHJ1Y3QgaTI0MDBtX3BsZCAqcGxkLAogCQkgICAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc2l6ZV90IHBsX3NpemUgPSBpMjQwMG1fcGxkX3NpemUocGxkKTsKIAllbnVtIGkyNDAwbV9wdCBwbF90eXBlID0gaTI0MDBtX3BsZF90eXBlKHBsZCk7CiAKKwlkX3ByaW50Zig3LCBkZXYsICJSWDogcmVjZWl2ZWQgcGF5bG9hZCB0eXBlICV1LCAlenUgYnl0ZXNcbiIsCisJCSBwbF90eXBlLCBwbF9zaXplKTsKKwlkX2R1bXAoOCwgZGV2LCBwYXlsb2FkLCBwbF9zaXplKTsKKwogCXN3aXRjaCAocGxfdHlwZSkgewogCWNhc2UgSTI0MDBNX1BUX0RBVEE6CiAJCWRfcHJpbnRmKDMsIGRldiwgIlJYOiBkYXRhIHBheWxvYWQgJXp1IGJ5dGVzXG4iLCBwbF9zaXplKTsKLQkJaTI0MDBtX25ldF9yeChpMjQwMG0sIHNrYl9yeCwgc2luZ2xlLCBwYXlsb2FkLCBwbF9zaXplKTsKKwkJaTI0MDBtX25ldF9yeChpMjQwMG0sIHNrYl9yeCwgc2luZ2xlX2xhc3QsIHBheWxvYWQsIHBsX3NpemUpOwogCQlicmVhazsKIAljYXNlIEkyNDAwTV9QVF9DVFJMOgogCQlpMjQwMG1fcnhfY3RsKGkyNDAwbSwgc2tiX3J4LCBwYXlsb2FkLCBwbF9zaXplKTsKQEAgLTM0OCw2ICsxMDAwLDEwIEBACiAJY2FzZSBJMjQwME1fUFRfVFJBQ0U6CiAJCWkyNDAwbV9yeF90cmFjZShpMjQwMG0sIHBheWxvYWQsIHBsX3NpemUpOwogCQlicmVhazsKKwljYXNlIEkyNDAwTV9QVF9FREFUQToKKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBkYXRhIHBheWxvYWQgJXp1IGJ5dGVzXG4iLCBwbF9zaXplKTsKKwkJaTI0MDBtX3J4X2VkYXRhKGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgcGxfc2l6ZSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CS8qIEFueXRoaW5nIGVsc2Ugc2hvdWxkbid0IGNvbWUgdG8gdGhlIGhvc3QgKi8KIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCWRldl9lcnIoZGV2LCAiUlg6IEhXIEJVRz8gdW5leHBlY3RlZCBwYXlsb2FkIHR5cGUgJXVcbiIsCkBAIC00NzUsNyArMTEzMSw3IEBACiAJY29uc3Qgc3RydWN0IGkyNDAwbV9tc2dfaGRyICptc2dfaGRyOwogCXNpemVfdCBwbF9pdHIsIHBsX3NpemUsIHNrYl9sZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBudW1fcGxzOworCXVuc2lnbmVkIG51bV9wbHMsIHNpbmdsZV9sYXN0OwogCiAJc2tiX2xlbiA9IHNrYi0+bGVuOwogCWRfZm5zdGFydCg0LCBkZXYsICIoaTI0MDBtICVwIHNrYiAlcCBbc2l6ZSAlenVdKVxuIiwKQEAgLTUwNCw3ICsxMTYwLDggQEAKIAkJCQkJCSAgcGxfaXRyLCBza2ItPmxlbik7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZ290byBlcnJvcl9wbF9kZXNjcl9jaGVjazsKLQkJaTI0MDBtX3J4X3BheWxvYWQoaTI0MDBtLCBza2IsIG51bV9wbHMgPT0gMSwgJm1zZ19oZHItPnBsZFtpXSwKKwkJc2luZ2xlX2xhc3QgPSBudW1fcGxzID09IDEgfHwgaSA9PSBudW1fcGxzIC0gMTsKKwkJaTI0MDBtX3J4X3BheWxvYWQoaTI0MDBtLCBza2IsIHNpbmdsZV9sYXN0LCAmbXNnX2hkci0+cGxkW2ldLAogCQkJCSAgc2tiLT5kYXRhICsgcGxfaXRyKTsKIAkJcGxfaXRyICs9IEFMSUdOKHBsX3NpemUsIEkyNDAwTV9QTF9QQUQpOwogCQljb25kX3Jlc2NoZWQoKTsJCS8qIERvbid0IG1vbm9wb2xpemUgKi8KQEAgLTUzMiwzICsxMTg5LDczIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGkyNDAwbV9yeCk7CisKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIFJYIHF1ZXVlIGFuZCBpbmZyYXN0cnVjdHVyZQorICoKKyAqIFRoaXMgc2V0cyB1cCBhbGwgdGhlIFJYIHJlb3JkZXJpbmcgaW5mcmFzdHJ1Y3R1cmVzLCB3aGljaCB3aWxsIG5vdAorICogYmUgdXNlZCBpZiByZW9yZGVyaW5nIGlzIG5vdCBlbmFibGVkIG9yIGlmIHRoZSBmaXJtd2FyZSBkb2VzIG5vdAorICogc3VwcG9ydCBpdC4gVGhlIGRldmljZSBpcyB0b2xkIHRvIGRvIHJlb3JkZXJpbmcgaW4KKyAqIGkyNDAwbV9kZXZfaW5pdGlhbGl6ZSgpLCB3aGVyZSBpdCBhbHNvIGxvb2tzIGF0IHRoZSB2YWx1ZSBvZiB0aGUKKyAqIGkyNDAwbS0+cnhfcmVvcmRlciBzd2l0Y2ggYmVmb3JlIHRha2luZyBhIGRlY2lzc2lvbi4KKyAqCisgKiBOb3RlIHdlIGFsbG9jYXRlIHRoZSByb3EgcXVldWVzIGluIG9uZSBjaHVuayBhbmQgdGhlIGFjdHVhbCBsb2dnaW5nCisgKiBzdXBwb3J0IGZvciBpdCAobG9nZ2luZykgaW4gYW5vdGhlciBvbmUgYW5kIHRoZW4gd2Ugc2V0dXAgdGhlCisgKiBwb2ludGVycyBmcm9tIHRoZSBmaXJzdCB0byB0aGUgbGFzdC4KKyAqLworaW50IGkyNDAwbV9yeF9zZXR1cChzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCisJaTI0MDBtLT5yeF9yZW9yZGVyID0gaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQ/IDAgOiAxOworCWlmIChpMjQwMG0tPnJ4X3Jlb3JkZXIpIHsKKwkJdW5zaWduZWQgaXRyOworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IGkyNDAwbV9yb3FfbG9nICpyZDsKKworCQlyZXN1bHQgPSAtRU5PTUVNOworCisJCXNpemUgPSBzaXplb2YoaTI0MDBtLT5yeF9yb3FbMF0pICogKEkyNDAwTV9ST19DSU4gKyAxKTsKKwkJaTI0MDBtLT5yeF9yb3EgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoaTI0MDBtLT5yeF9yb3EgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJSWDogY2Fubm90IGFsbG9jYXRlICV6dSBieXRlcyBmb3IgIgorCQkJCSJyZW9yZGVyIHF1ZXVlc1xuIiwgc2l6ZSk7CisJCQlnb3RvIGVycm9yX3JvcV9hbGxvYzsKKwkJfQorCisJCXNpemUgPSBzaXplb2YoKmkyNDAwbS0+cnhfcm9xWzBdLmxvZykgKiAoSTI0MDBNX1JPX0NJTiArIDEpOworCQlyZCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIlJYOiBjYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciAiCisJCQkJInJlb3JkZXIgcXVldWVzIGxvZyBhcmVhc1xuIiwgc2l6ZSk7CisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcl9yb3FfbG9nX2FsbG9jOworCQl9CisKKwkJZm9yKGl0ciA9IDA7IGl0ciA8IEkyNDAwTV9ST19DSU4gKyAxOyBpdHIrKykgeworCQkJX19pMjQwMG1fcm9xX2luaXQoJmkyNDAwbS0+cnhfcm9xW2l0cl0pOworCQkJaTI0MDBtLT5yeF9yb3FbaXRyXS5sb2cgPSAmcmRbaXRyXTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZXJyb3Jfcm9xX2xvZ19hbGxvYzoKKwlrZnJlZShpMjQwMG0tPnJ4X3JvcSk7CitlcnJvcl9yb3FfYWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBUZWFyIGRvd24gdGhlIFJYIHF1ZXVlIGFuZCBpbmZyYXN0cnVjdHVyZSAqLwordm9pZCBpMjQwMG1fcnhfcmVsZWFzZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCit7CisJaWYgKGkyNDAwbS0+cnhfcmVvcmRlcikgeworCQl1bnNpZ25lZCBpdHI7CisJCWZvcihpdHIgPSAwOyBpdHIgPCBJMjQwME1fUk9fQ0lOICsgMTsgaXRyKyspCisJCQlfX3NrYl9xdWV1ZV9wdXJnZSgmaTI0MDBtLT5yeF9yb3FbaXRyXS5xdWV1ZSk7CisJCWtmcmVlKGkyNDAwbS0+cnhfcm9xWzBdLmxvZyk7CisJCWtmcmVlKGkyNDAwbS0+cnhfcm9xKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYwppbmRleCAxMjNhNWY4Li41YWM1ZTc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCkBAIC03MCw4ICs3MCwxMyBAQAogc3RhdGljIGludCBpb2VfdGltZW91dCA9IDI7CiBtb2R1bGVfcGFyYW0oaW9lX3RpbWVvdXQsIGludCwgMCk7CiAKLS8qIE91ciBmaXJtd2FyZSBmaWxlIG5hbWUgKi8KLSNkZWZpbmUgSTI0MDBNU19GV19GSUxFX05BTUUgImkyNDAwbS1mdy1zZGlvLSIgSTI0MDBNX0ZXX1ZFUlNJT04gIi5zYmNmIgorLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSBsaXN0ICovCitzdGF0aWMgY29uc3QgY2hhciAqaTI0MDBtc19idXNfZndfbmFtZXNbXSA9IHsKKyNkZWZpbmUgSTI0MDBNU19GV19GSUxFX05BTUUgImkyNDAwbS1mdy1zZGlvLTEuMy5zYmNmIgorCUkyNDAwTVNfRldfRklMRV9OQU1FLAorCU5VTEwKK307CisKIAogLyoKICAqIEVuYWJsZSB0aGUgU0RJTyBmdW5jdGlvbgpAQCAtNDAxLDcgKzQwNiw3IEBACiAJaTI0MDBtLT5idXNfcmVzZXQgPSBpMjQwMG1zX2J1c19yZXNldDsKIAlpMjQwMG0tPmJ1c19ibV9jbWRfc2VuZCA9IGkyNDAwbXNfYnVzX2JtX2NtZF9zZW5kOwogCWkyNDAwbS0+YnVzX2JtX3dhaXRfZm9yX2FjayA9IGkyNDAwbXNfYnVzX2JtX3dhaXRfZm9yX2FjazsKLQlpMjQwMG0tPmJ1c19md19uYW1lID0gSTI0MDBNU19GV19GSUxFX05BTUU7CisJaTI0MDBtLT5idXNfZndfbmFtZXMgPSBpMjQwMG1zX2J1c19md19uYW1lczsKIAlpMjQwMG0tPmJ1c19ibV9tYWNfYWRkcl9pbXBhaXJlZCA9IDE7CiAKIAlyZXN1bHQgPSBpMjQwMG1zX2VuYWJsZV9mdW5jdGlvbihpMjQwMG1zLT5mdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zeXNmcy5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zeXNmcy5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBJbnRlbCBXaXJlbGVzcyBXaU1BWCBDb25uZWN0aW9uIDI0MDBtCisgKiBTeXNmcyBpbnRlcmZhY2VzIHRvIHNob3cgZHJpdmVyIGFuZCBkZXZpY2UgaW5mb3JtYXRpb24KKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnBvcmF0aW9uIDxsaW51eC13aW1heEBpbnRlbC5jb20+CisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgImkyNDAwbS5oIgorCisKKyNkZWZpbmUgRF9TVUJNT0RVTEUgc3lzZnMKKyNpbmNsdWRlICJkZWJ1Zy1sZXZlbHMuaCIKKworCisvKgorICogU2V0IHRoZSBpZGxlIHRpbWVvdXQgKG1zZWNzKQorICoKKyAqIEZJWE1FOiBldmVudHVhbGx5IHRoaXMgc2hvdWxkIGJlIGEgY29tbW9uIFdpTUFYIHN0YWNrIG1ldGhvZCwgYnV0CisgKiB3b3VsZCBsaWtlIHRvIHdhaXQgdG8gc2VlIGhvdyBvdGhlciBkZXZpY2VzIG1hbmFnZSBpdC4KKyAqLworc3RhdGljCitzc2l6ZV90IGkyNDAwbV9pZGxlX3RpbWVvdXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCBpMjQwMG0gKmkyNDAwbSA9IG5ldF9kZXZfdG9faTI0MDBtKHRvX25ldF9kZXYoZGV2KSk7CisJdW5zaWduZWQgdmFsOworCisJcmVzdWx0ID0gLUVJTlZBTDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiV1XG4iLCAmdmFsKSAhPSAxKQorCQlnb3RvIGVycm9yX25vX3Vuc2lnbmVkOworCWlmICh2YWwgIT0gMCAmJiAodmFsIDwgMTAwIHx8IHZhbCA+IDMwMDAwMCB8fCB2YWwgJSAxMDAgIT0gMCkpIHsKKwkJZGV2X2VycihkZXYsICJpZGxlX3RpbWVvdXQ6ICV1OiBpbnZhbGlkIG1zZWNzIHNwZWNpZmljYXRpb247ICIKKwkJCSJ2YWxpZCB2YWx1ZXMgYXJlIDAsIDEwMC0zMDAwMDAgaW4gMTAwIGluY3JlbWVudHNcbiIsCisJCQl2YWwpOworCQlnb3RvIGVycm9yX2JhZF92YWx1ZTsKKwl9CisJcmVzdWx0ID0gaTI0MDBtX3NldF9pZGxlX3RpbWVvdXQoaTI0MDBtLCB2YWwpOworCWlmIChyZXN1bHQgPj0gMCkKKwkJcmVzdWx0ID0gc2l6ZTsKK2Vycm9yX25vX3Vuc2lnbmVkOgorZXJyb3JfYmFkX3ZhbHVlOgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYworREVWSUNFX0FUVFIoaTI0MDBtX2lkbGVfdGltZW91dCwgU19JV1VTUiwKKwkgICAgTlVMTCwgaTI0MDBtX2lkbGVfdGltZW91dF9zdG9yZSk7CisKK3N0YXRpYworc3RydWN0IGF0dHJpYnV0ZSAqaTI0MDBtX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9pMjQwMG1faWRsZV90aW1lb3V0LmF0dHIsCisJTlVMTCwKK307CisKK3N0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTI0MDBtX2Rldl9hdHRyX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwJCS8qIHdlIHdhbnQgdGhlbSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKi8KKwkuYXR0cnMgPSBpMjQwMG1fZGV2X2F0dHJzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2Itbm90aWYuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2Itbm90aWYuYwppbmRleCA5NzAyYzIyYi4uNmFkZDI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2Itbm90aWYuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCWRldl9lcnIoZGV2LCAiSFcgQlVHPyBVbmtub3duL3VuZXhwZWN0ZWQgZGF0YSBpbiBub3RpZmljYXRpb24gIgogCQkJIm1lc3NhZ2UgKCV6dSBieXRlcylcbiIsIGJ1Zl9sZW4pOwogCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAiJXMgJXM6ICIsCi0JCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSAsIGRldi0+YnVzX2lkKTsKKwkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXZfbmFtZShkZXYpKTsKIAkJaWYgKGJ1Zl9sZW4gPiA2NCkgewogCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsIHByZWZpeCwgRFVNUF9QUkVGSVhfT0ZGU0VULAogCQkJCSAgICAgICA4LCA0LCBidWYsIDY0LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYwppbmRleCA3YzI4NjEwLi5jYTQxNTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCkBAIC03Myw3ICs3MywxNCBAQAogCiAKIC8qIE91ciBmaXJtd2FyZSBmaWxlIG5hbWUgKi8KLSNkZWZpbmUgSTI0MDBNVV9GV19GSUxFX05BTUUgImkyNDAwbS1mdy11c2ItIiBJMjQwME1fRldfVkVSU0lPTiAiLnNiY2YiCitzdGF0aWMgY29uc3QgY2hhciAqaTI0MDBtdV9idXNfZndfbmFtZXNbXSA9IHsKKyNkZWZpbmUgSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfNCAiaTI0MDBtLWZ3LXVzYi0xLjQuc2JjZiIKKwlJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80LAorI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV8zICJpMjQwMG0tZnctdXNiLTEuMy5zYmNmIgorCUkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzMsCisJTlVMTCwKK307CisKIAogc3RhdGljCiBpbnQgaTI0MDBtdV9idXNfZGV2X3N0YXJ0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKQEAgLTM5NCw3ICs0MDEsNyBAQAogCWkyNDAwbS0+YnVzX3Jlc2V0ID0gaTI0MDBtdV9idXNfcmVzZXQ7CiAJaTI0MDBtLT5idXNfYm1fY21kX3NlbmQgPSBpMjQwMG11X2J1c19ibV9jbWRfc2VuZDsKIAlpMjQwMG0tPmJ1c19ibV93YWl0X2Zvcl9hY2sgPSBpMjQwMG11X2J1c19ibV93YWl0X2Zvcl9hY2s7Ci0JaTI0MDBtLT5idXNfZndfbmFtZSA9IEkyNDAwTVVfRldfRklMRV9OQU1FOworCWkyNDAwbS0+YnVzX2Z3X25hbWVzID0gaTI0MDBtdV9idXNfZndfbmFtZXM7CiAJaTI0MDBtLT5idXNfYm1fbWFjX2FkZHJfaW1wYWlyZWQgPSAwOwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC01OTQsNCArNjAxLDUgQEAKIE1PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIDxsaW51eC13aW1heEBpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIDI0MDBNIFdpTUFYIG5ldHdvcmtpbmcgZm9yIFVTQiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0ZJUk1XQVJFKEkyNDAwTVVfRldfRklMRV9OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80KTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV8zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGZlODE5YTcuLjYxMmZmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMjI4LDYgKzIyOCwxNCBAQAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBjb250YWluaW5nIHRoZQogCSAgQXRtZWwgYXQ3NmM1MDIgYW5kIGF0NzZjNTA0IGNoaXBzLgogCitjb25maWcgQVQ3NkM1MFhfVVNCCisgICAgICAgIHRyaXN0YXRlICJBdG1lbCBhdDc2YzUwMy9hdDc2YzUwNS9hdDc2YzUwNWEgVVNCIGNhcmRzIgorICAgICAgICBkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgVVNCCisgICAgICAgIHNlbGVjdCBGV19MT0FERVIKKyAgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIEVuYWJsZSBzdXBwb3J0IGZvciBVU0IgV2lyZWxlc3MgZGV2aWNlcyB1c2luZyBBdG1lbCBhdDc2YzUwMywKKyAgICAgICAgICBhdDc2YzUwNSBvciBhdDc2YzUwNWEgY2hpcHMuCisKIGNvbmZpZyBBSVJPX0NTCiAJdHJpc3RhdGUgIkNpc2NvL0Fpcm9uZXQgMzRYLzM1WC80NTAwLzQ4MDAgUENNQ0lBIGNhcmRzIgogCWRlcGVuZHMgb24gUENNQ0lBICYmIChCUk9LRU4gfHwgIU0zMlIpICYmIFdMQU5fODAyMTEKQEAgLTQ2NSw2ICs0NzMsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1XTDhLCisJdHJpc3RhdGUgIk1hcnZlbGwgODhXOHh4eCBQQ0kvUENJZSBXaXJlbGVzcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgUENJICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCBUT1BET0cgODAyLjExIHdpcmVsZXNzIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBtd2w4ay4gIElmIHVuc3VyZSwgc2F5IE4uCisKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGFjNTkwZTFjLi5kNzgwNDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtMjQsNiArMjQsOCBAQAogb2JqLSQoQ09ORklHX1BDSV9BVE1FTCkgICAgICAgICArPSBhdG1lbF9wY2kubyAKIG9iai0kKENPTkZJR19QQ01DSUFfQVRNRUwpICAgICAgKz0gYXRtZWxfY3MubwogCitvYmotJChDT05GSUdfQVQ3NkM1MFhfVVNCKSAgICAgICs9IGF0NzZjNTB4LXVzYi5vCisKIG9iai0kKENPTkZJR19QUklTTTU0KQkJKz0gcHJpc201NC8KIAogb2JqLSQoQ09ORklHX0hPU1RBUCkJCSs9IGhvc3RhcC8KQEAgLTQ2LDYgKzQ4LDggQEAKIAogb2JqLSQoQ09ORklHX0FETTgyMTEpCSs9IGFkbTgyMTEubwogCitvYmotJChDT05GSUdfTVdMOEspCSs9IG13bDhrLm8KKwogb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bHdpZmkvCiBvYmotJChDT05GSUdfUlQyWDAwKQkrPSBydDJ4MDAvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBjNDRmMzg4Li43ZTgwYWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC0yNjQ2LDE3ICsyNjQ2LDIxIEBACiAJLnBhcnNlID0gd2xsX2hlYWRlcl9wYXJzZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlybzExX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBhaXJvX29wZW4sCisJLm5kb19zdG9wIAkJPSBhaXJvX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBhaXJvX3N0YXJ0X3htaXQxMSwKKwkubmRvX2dldF9zdGF0cyAJCT0gYWlyb19nZXRfc3RhdHMsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBhaXJvX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IGFpcm9faW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGFpcm9fY2hhbmdlX210dSwKK307CisKIHN0YXRpYyB2b2lkIHdpZmlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYWlybzExX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmFpcm9faGVhZGVyX29wczsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZhaXJvX3N0YXJ0X3htaXQxMTsKLQlkZXYtPmdldF9zdGF0cyA9ICZhaXJvX2dldF9zdGF0czsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZhaXJvX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gJmFpcm9faW9jdGw7CiAJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZhaXJvX2hhbmRsZXJfZGVmOwotCWRldi0+Y2hhbmdlX210dSA9ICZhaXJvX2NoYW5nZV9tdHU7Ci0JZGV2LT5vcGVuID0gJmFpcm9fb3BlbjsKLQlkZXYtPnN0b3AgPSAmYWlyb19jbG9zZTsKIAogCWRldi0+dHlwZSAgICAgICAgICAgICAgID0gQVJQSFJEX0lFRUU4MDIxMTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiAgICA9IEVUSF9ITEVOOwpAQCAtMjczOSw2ICsyNzQzLDMzIEBACiAJCQkgICAgICAmYWktPm5ldHdvcmtfZnJlZV9saXN0KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhaXJvX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFpcm9fb3BlbiwKKwkubmRvX3N0b3AJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYWlyb19zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGFpcm9fZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYWlyb19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBhaXJvX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IGFpcm9faW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGFpcm9fY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1waV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhaXJvX29wZW4sCisJLm5kb19zdG9wCQk9IGFpcm9fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG1waV9zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGFpcm9fZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYWlyb19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBhaXJvX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IGFpcm9faW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGFpcm9fY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqX2luaXRfYWlyb19jYXJkKCB1bnNpZ25lZCBzaG9ydCBpcnEsIGludCBwb3J0LAogCQkJCQkgICBpbnQgaXNfcGNtY2lhLCBzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkbWRldiApCkBAIC0yNzc2LDIyICsyODA3LDE2IEBACiAJCWdvdG8gZXJyX291dF9mcmVlOwogCWFpcm9fbmV0d29ya3NfaW5pdGlhbGl6ZSAoYWkpOwogCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCAoJmFpLT50eHEpOworCiAJLyogVGhlIEFpcm8tc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFpLT5mbGFncykpIHsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCAoJmFpLT50eHEpOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZtcGlfc3RhcnRfeG1pdDsKLQl9IGVsc2UKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYWlyb19zdGFydF94bWl0OwotCWRldi0+Z2V0X3N0YXRzID0gJmFpcm9fZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmFpcm9fc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gJmFpcm9fc2V0X21hY19hZGRyZXNzOwotCWRldi0+ZG9faW9jdGwgPSAmYWlyb19pb2N0bDsKKwlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFpLT5mbGFncykpCisJCWRldi0+bmV0ZGV2X29wcyA9ICZtcGlfbmV0ZGV2X29wczsKKwllbHNlCisJCWRldi0+bmV0ZGV2X29wcyA9ICZhaXJvX25ldGRldl9vcHM7CiAJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZhaXJvX2hhbmRsZXJfZGVmOwogCWFpLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJmFpLT5zcHlfZGF0YTsKIAlkZXYtPndpcmVsZXNzX2RhdGEgPSAmYWktPndpcmVsZXNzX2RhdGE7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gJmFpcm9fY2hhbmdlX210dTsKLQlkZXYtPm9wZW4gPSAmYWlyb19vcGVuOwotCWRldi0+c3RvcCA9ICZhaXJvX2Nsb3NlOwogCWRldi0+aXJxID0gaXJxOwogCWRldi0+YmFzZV9hZGRyID0gcG9ydDsKIApAQCAtNDcyNyw3ICs0NzUyLDcgQEAKIAlTdGF0c1JpZCBzdGF0czsKIAlpbnQgaSwgajsKIAlfX2xlMzIgKnZhbHMgPSBzdGF0cy52YWxzOwotCWludCBsZW4gPSBsZTE2X3RvX2NwdShzdGF0cy5sZW4pOworCWludCBsZW47CiAKIAlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDczOCw2ICs0NzYzLDcgQEAKIAl9CiAKIAlyZWFkU3RhdHNSaWQoYXByaXYsICZzdGF0cywgcmlkLCAxKTsKKwlsZW4gPSBsZTE2X3RvX2NwdShzdGF0cy5sZW4pOwogCiAgICAgICAgIGogPSAwOwogCWZvcihpPTA7IHN0YXRzTGFiZWxzW2ldIT0oY2hhciAqKS0xICYmIGkqNDxsZW47IGkrKykgewpAQCAtNzE0NywxMSArNzE3MywxNSBAQAogewogCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgZXh0cmE7Ci0Jc3RydWN0IGl3X3F1YWxpdHkgcXVhbFtJV19NQVhfQVBdOworCXN0cnVjdCBpd19xdWFsaXR5ICpxdWFsOwogCUJTU0xpc3RSaWQgQlNTTGlzdDsKIAlpbnQgaTsKIAlpbnQgbG9zZVN5bmMgPSBjYXBhYmxlKENBUF9ORVRfQURNSU4pID8gMTogLTE7CiAKKwlxdWFsID0ga21hbGxvYyhJV19NQVhfQVAgKiBzaXplb2YoKnF1YWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXF1YWwpCisJCXJldHVybiAtRU5PTUVNOworCiAJZm9yIChpID0gMDsgaSA8IElXX01BWF9BUDsgaSsrKSB7CiAJCXUxNiBkQm07CiAJCWlmIChyZWFkQlNTTGlzdFJpZChsb2NhbCwgbG9zZVN5bmMsICZCU1NMaXN0KSkKQEAgLTcyMDYsNiArNzIzNiw3IEBACiAJfQogCWR3cnEtPmxlbmd0aCA9IGk7CiAKKwlrZnJlZShxdWFsKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCmluZGV4IDI3Njk2YzIuLmQwNTkzZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKQEAgLTE2LDggKzE2LDggQEAKICAgICBJbiBhZGRpdGlvbiB0aGlzIG1vZHVsZSB3YXMgZGVyaXZlZCBmcm9tIGR1bW15X2NzLgogICAgIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiBkdW1teV9jcyBpcyBEYXZpZCBBLiBIaW5kcwogICAgIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCi0gICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgIAotICAgIAorICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogI2lmZGVmIF9fSU5fUENNQ0lBX1BBQ0tBR0VfXwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSAiYWlyby5oIgpAQCAtNTQsNyArNTQsNyBAQAogc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKIHN0YXRpYyBjaGFyICp2ZXJzaW9uID0gIiRSZXZpc2lvbjogMS4yICQiOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnID4gKG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsKICNlbHNlCiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTYyLDkgKzYyLDkgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBNT0RVTEVfQVVUSE9SKCJCZW5qYW1pbiBSZWVkIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIENpc2NvL0Fpcm9uZXQgODAyLjExIHdpcmVsZXNzIGV0aGVybmV0IFwKLSAgICAgICAgICAgICAgICAgICBjYXJkcy4gIFRoaXMgaXMgdGhlIG1vZHVsZSB0aGF0IGxpbmtzIHRoZSBQQ01DSUEgY2FyZCBcCi0JCSAgIHdpdGggdGhlIGFpcm8gbW9kdWxlLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciBDaXNjby9BaXJvbmV0IDgwMi4xMSB3aXJlbGVzcyBldGhlcm5ldCAiCisJCSAgICJjYXJkcy4gIFRoaXMgaXMgdGhlIG1vZHVsZSB0aGF0IGxpbmtzIHRoZSBQQ01DSUEgY2FyZCAiCisJCSAgICJ3aXRoIHRoZSBhaXJvIG1vZHVsZS4iKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJBaXJvbmV0IDQ1MDAsIDQ4MDAgYW5kIENpc2NvIDM0MCBQQ01DSUEgY2FyZHMiKTsKIApAQCAtNzYsNyArNzYsNyBAQAogICAgZXZlbnQgaXMgcmVjZWl2ZWQuICBUaGUgY29uZmlnKCkgYW5kIHJlbGVhc2UoKSBlbnRyeSBwb2ludHMgYXJlCiAgICB1c2VkIHRvIGNvbmZpZ3VyZSBvciByZWxlYXNlIGEgc29ja2V0LCBpbiByZXNwb25zZSB0byBjYXJkCiAgICBpbnNlcnRpb24gYW5kIGVqZWN0aW9uIGV2ZW50cy4gIFRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgYWlyb19jcwotICAgZXZlbnQgaGFuZGxlci4gCisgICBldmVudCBoYW5kbGVyLgogKi8KIAogc3RhdGljIGludCBhaXJvX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CkBAIC0xMDMsOCArMTAzLDkgQEAKICAgIGJ5IG9uZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCiAKICAgIFlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGEgbGlua2VkIGxpc3QgZm9yIHRoaXMgLS0gZm9yIGV4YW1wbGUsIHRoZQotICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2Ygc3RydWN0IHBjbWNpYV9kZXZpY2UgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCi0gICBkZXZpY2UgbnVtYmVycyBhcmUgdXNlZCB0byBkZXJpdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgaW5kZXguCisgICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywKKyAgIHdoZXJlIG1pbm9yIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZworICAgYXJyYXkgaW5kZXguCiAqLwogCiAvKgpAQCAtMTIyLDIyICsxMjMsMjIgQEAKICAgIGRldmljZSBJTyByb3V0aW5lcyBjYW4gdXNlIGEgZmxhZyBsaWtlIHRoaXMgdG8gdGhyb3R0bGUgSU8gdG8gYQogICAgY2FyZCB0aGF0IGlzIG5vdCByZWFkeSB0byBhY2NlcHQgaXQuCiAqLwotICAgCisKIHR5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7CiAJZGV2X25vZGVfdAlub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpldGhfZGV2OwogfSBsb2NhbF9pbmZvX3Q7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAKKwogICBhaXJvX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCiAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAogICB3aXRoIENhcmQgU2VydmljZXMuCi0gIAorCiAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQogICBjYXJkIGluc2VydGlvbiBldmVudC4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgYWlyb19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCkBAIC0xNTAsNyArMTUxLDcgQEAKIAlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlwX2Rldi0+aXJxLkhhbmRsZXIgPSBOVUxMOwotCQorCiAJLyoKIAkgIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IgYWxtb3N0CkBAIC0xNjAsNyArMTYxLDcgQEAKIAkqLwogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSAwOwogCXBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLQkKKwogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAJbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsKSB7CkBAIC0xNzMsMTIgKzE3NCwxMiBAQAogfSAvKiBhaXJvX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCiAgIHN0cnVjdHVyZXMgYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkCiAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIGFpcm9fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtMTg3LDIwICsxODgsMjAgQEAKIAogCWFpcm9fcmVsZWFzZShsaW5rKTsKIAotCWlmICggKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ICkgewotCQlzdG9wX2Fpcm9fY2FyZCggKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2LCAwICk7CisJaWYgKCgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYpIHsKKwkJc3RvcF9haXJvX2NhcmQoKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiwgMCk7CiAJfQotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7CisJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7CiAKIAlrZnJlZShsaW5rLT5wcml2KTsKIH0gLyogYWlyb19kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIGFpcm9fY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CiAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQogICBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCi0gIAorCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKQEAgLTMyNSwyNiArMzI2LDI4IEBACiAJKi8KIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCQorCiAJLyoKIAkgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAJICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogCSovCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKLQkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSAKLQkJaW5pdF9haXJvX2NhcmQoIGxpbmstPmlycS5Bc3NpZ25lZElSUSwKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspICk7Ci0JaWYgKCEoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYpIGdvdG8gY3NfZmFpbGVkOwotCQorCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLAorCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCSgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYgPQorCQlpbml0X2Fpcm9fY2FyZChsaW5rLT5pcnEuQXNzaWduZWRJUlEsCisJCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxLCAxLCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisJaWYgKCEoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2KQorCQlnb3RvIGNzX2ZhaWxlZDsKKwogCS8qCiAJICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQogCSAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuCiAJKi8KLQlzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUgKTsKKwlzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2LT5uYW1lKTsKIAlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOwogCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKLQkKKwogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KIAlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiAiLAogCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwpAQCAtMzc0LDExICszNzcsMTEgQEAKIH0gLyogYWlyb19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIEFmdGVyIGEgY2FyZCBpcyByZW1vdmVkLCBhaXJvX3JlbGVhc2UoKSB3aWxsIHVucmVnaXN0ZXIgdGhlCiAgIGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZSBpcwogICBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIGFpcm9fcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTQ3NSw3ICs0NzgsNyBAQAogICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKICAgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKICAgICBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgCisgICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCiBtb2R1bGVfaW5pdChhaXJvX2NzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzAyZjFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKQEAgLTAsMCArMSwyNTAxIEBACisvKgorICogYXQ3NmM1MDMvYXQ3NmM1MDUgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiAtIDIwMDMgT2xpdmVyIEt1cnRoCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgSm9lcmcgQWxiZXJ0IDxqb2VyZy5hbGJlcnRAZ214LmRlPgorICogQ29weXJpZ2h0IChjKSAyMDA0IE5pY2sgSm9uZXMKKyAqIENvcHlyaWdodCAoYykgMjAwNCBCYWxpbnQgU2VlYmVyIDxuMF81cDRtX3AxMzQ1M0Bob3RtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA3IEthbGxlIFZhbG8gPGthbGxlLnZhbG9AaWtpLmZpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJlcmxpb3MgZHJpdmVyIGZvciBXTEFOIFVTQiBkZXZpY2VzIGJhc2VkIG9uIHRoZQorICogQXRtZWwgQVQ3NkM1MDNBLzUwNS81MDVBLgorICoKKyAqIFNvbWUgaXdfaGFuZGxlciBjb2RlIHdhcyB0YWtlbiBmcm9tIGFpcm8uYywgKEMpIDE5OTkgQmVuamFtaW4gUmVlZAorICoKKyAqIFRPRE8gbGlzdCBpcyBhdCB0aGUgd2lraToKKyAqCisgKiBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0NzZjNTB4LXVzYiNUT0RPCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAiYXQ3NmM1MHgtdXNiLmgiCisKKy8qIFZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX05BTUUgImF0NzZjNTB4LXVzYiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMTciCisjZGVmaW5lIERSSVZFUl9ERVNDICJBdG1lbCBhdDc2eCBVU0IgV2lyZWxlc3MgTEFOIERyaXZlciIKKworLyogYXQ3Nl9kZWJ1ZyBiaXRzICovCisjZGVmaW5lIERCR19QUk9HUkVTUwkJMHgwMDAwMDAwMQkvKiBhdXRoZW50aWNhdGlvbi9hY2NvY2lhdGlvbiAqLworI2RlZmluZSBEQkdfQlNTX1RBQkxFCQkweDAwMDAwMDAyCS8qIHNob3cgQlNTIHRhYmxlIGFmdGVyIHNjYW5zICovCisjZGVmaW5lIERCR19JT0NUTAkJMHgwMDAwMDAwNAkvKiBpb2N0bCBjYWxscyAvIHNldHRpbmdzICovCisjZGVmaW5lIERCR19NQUNfU1RBVEUJCTB4MDAwMDAwMDgJLyogTUFDIHN0YXRlIHRyYW5zaXRpb25zICovCisjZGVmaW5lIERCR19UWF9EQVRBCQkweDAwMDAwMDEwCS8qIHR4IGhlYWRlciAqLworI2RlZmluZSBEQkdfVFhfREFUQV9DT05URU5UCTB4MDAwMDAwMjAJLyogdHggY29udGVudCAqLworI2RlZmluZSBEQkdfVFhfTUdNVAkJMHgwMDAwMDA0MAkvKiB0eCBtYW5hZ2VtZW50ICovCisjZGVmaW5lIERCR19SWF9EQVRBCQkweDAwMDAwMDgwCS8qIHJ4IGRhdGEgaGVhZGVyICovCisjZGVmaW5lIERCR19SWF9EQVRBX0NPTlRFTlQJMHgwMDAwMDEwMAkvKiByeCBkYXRhIGNvbnRlbnQgKi8KKyNkZWZpbmUgREJHX1JYX01HTVQJCTB4MDAwMDAyMDAJLyogcnggbWdtdCBmcmFtZSBoZWFkZXJzICovCisjZGVmaW5lIERCR19SWF9CRUFDT04JCTB4MDAwMDA0MDAJLyogcnggYmVhY29uICovCisjZGVmaW5lIERCR19SWF9DVFJMCQkweDAwMDAwODAwCS8qIHJ4IGNvbnRyb2wgKi8KKyNkZWZpbmUgREJHX1JYX01HTVRfQ09OVEVOVAkweDAwMDAxMDAwCS8qIHJ4IG1nbXQgY29udGVudCAqLworI2RlZmluZSBEQkdfUlhfRlJBR1MJCTB4MDAwMDIwMDAJLyogcnggZGF0YSBmcmFnbWVudCBoYW5kbGluZyAqLworI2RlZmluZSBEQkdfREVWU1RBUlQJCTB4MDAwMDQwMDAJLyogZncgZG93bmxvYWQsIGRldmljZSBzdGFydCAqLworI2RlZmluZSBEQkdfVVJCCQkJMHgwMDAwODAwMAkvKiByeCB1cmIgc3RhdHVzLCAuLi4gKi8KKyNkZWZpbmUgREJHX1JYX0FUTUVMX0hEUgkweDAwMDEwMDAwCS8qIEF0bWVsLXNwZWNpZmljIFJ4IGhlYWRlcnMgKi8KKyNkZWZpbmUgREJHX1BST0NfRU5UUlkJCTB4MDAwMjAwMDAJLyogcHJvY2VkdXJlIGVudHJpZXMvZXhpdHMgKi8KKyNkZWZpbmUgREJHX1BNCQkJMHgwMDA0MDAwMAkvKiBwb3dlciBtYW5hZ2VtZW50IHNldHRpbmdzICovCisjZGVmaW5lIERCR19CU1NfTUFUQ0gJCTB4MDAwODAwMDAJLyogQlNTIG1hdGNoIGZhaWx1cmVzICovCisjZGVmaW5lIERCR19QQVJBTVMJCTB4MDAxMDAwMDAJLyogc2hvdyBjb25maWd1cmVkIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgREJHX1dBSVRfQ09NUExFVEUJMHgwMDIwMDAwMAkvKiBjb21tYW5kIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgREJHX1JYX0ZSQUdTX1NLQgkweDAwNDAwMDAwCS8qIHNrYiBoZWFkZXIgb2YgUnggZnJhZ21lbnRzICovCisjZGVmaW5lIERCR19CU1NfVEFCTEVfUk0JMHgwMDgwMDAwMAkvKiBwdXJnaW5nIGJzcyB0YWJsZSBlbnRyaWVzICovCisjZGVmaW5lIERCR19NT05JVE9SX01PREUJMHgwMTAwMDAwMAkvKiBtb25pdG9yIG1vZGUgKi8KKyNkZWZpbmUgREJHX01JQgkJCTB4MDIwMDAwMDAJLyogZHVtcCBhbGwgTUlCcyBvbiBzdGFydHVwICovCisjZGVmaW5lIERCR19NR01UX1RJTUVSCQkweDA0MDAwMDAwCS8qIGR1bXAgbWdtdF90aW1lciBvcHMgKi8KKyNkZWZpbmUgREJHX1dFX0VWRU5UUwkJMHgwODAwMDAwMAkvKiBkdW1wIHdpcmVsZXNzIGV2ZW50cyAqLworI2RlZmluZSBEQkdfRlcJCQkweDEwMDAwMDAwCS8qIGZpcm13YXJlIGRvd25sb2FkICovCisjZGVmaW5lIERCR19ERlUJCQkweDIwMDAwMDAwCS8qIGRldmljZSBmaXJtd2FyZSB1cGdyYWRlICovCisjZGVmaW5lIERCR19DTUQJCQkweDQwMDAwMDAwCisjZGVmaW5lIERCR19NQUM4MDIxMQkJMHg4MDAwMDAwMAorCisjZGVmaW5lIERCR19ERUZBVUxUUwkJMAorCisvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KKyNkZWZpbmUgYXQ3Nl9kYmcoYml0cywgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGF0NzZfZGVidWcgJiAoYml0cykpCQkJCSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgXAorCQkJICAgICAgICMjIGFyZyk7CQkJCQkgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgYXQ3Nl9kYmdfZHVtcChiaXRzLCBidWYsIGxlbiwgZm9ybWF0LCBhcmcuLi4pCVwKKwlkbyB7IFwKKwkJaWYgKGF0NzZfZGVidWcgJiAoYml0cykpIHsgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogIiBmb3JtYXQgIlxuIiAsIFwKKwkJCSAgICAgICAjIyBhcmcpOwkJCQkJIFwKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsICAgICBcCisJCQkJCSAgICAgYnVmLCBsZW4pOwkJCSBcCisJCX0JCQkJCQkJIFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgdWludCBhdDc2X2RlYnVnID0gREJHX0RFRkFVTFRTOworCisvKiBQcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nICovCitzdGF0aWMgc3RydWN0IG11dGV4IGZ3X211dGV4OworCitzdGF0aWMgc3RydWN0IGZ3ZW50cnkgZmlybXdhcmVzW10gPSB7CisJWzBdID0geyAiIiB9LAorCVtCT0FSRF81MDNfSVNMMzg2MV0gPSB7ICJhdG1lbF9hdDc2YzUwMy1pMzg2MS5iaW4iIH0sCisJW0JPQVJEXzUwM19JU0wzODYzXSA9IHsgImF0bWVsX2F0NzZjNTAzLWkzODYzLmJpbiIgfSwKKwlbQk9BUkRfNTAzXSA9IHsgImF0bWVsX2F0NzZjNTAzLXJmbWQuYmluIiB9LAorCVtCT0FSRF81MDNfQUNDXSA9IHsgImF0bWVsX2F0NzZjNTAzLXJmbWQtYWNjLmJpbiIgfSwKKwlbQk9BUkRfNTA1XSA9IHsgImF0bWVsX2F0NzZjNTA1LXJmbWQuYmluIiB9LAorCVtCT0FSRF81MDVfMjk1OF0gPSB7ICJhdG1lbF9hdDc2YzUwNS1yZm1kMjk1OC5iaW4iIH0sCisJW0JPQVJEXzUwNUFdID0geyAiYXRtZWxfYXQ3NmM1MDVhLXJmbWQyOTU4LmJpbiIgfSwKKwlbQk9BUkRfNTA1QU1YXSA9IHsgImF0bWVsX2F0NzZjNTA1YW14LXJmbWQuYmluIiB9LAorfTsKKworI2RlZmluZSBVU0JfREVWSUNFX0RBVEEoX19vcHMpCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkoX19vcHMpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZfdGFibGVbXSA9IHsKKwkvKgorCSAqIGF0NzZjNTAzLWkzODYxCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy8zODYxIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYwMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBMaW5rc3lzIFdVU0IxMSB2Mi4xL3YyLjYgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjZiLCAweDIyMTEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogTmV0Z2VhciBNQTEwMSByZXYuIEEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODY0LCAweDQxMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogVGVrcmFtIFUzMDBDIC8gQWxsbmV0IEFMTDAxOTMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MTIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogSFAgSE4yMTBXIEo3ODAxQSAqLworCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MDExYyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBTaXRlY29tL1otQ29tL1p5eGVsIE00WS03NTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogRHluYWxpbmsvQXNrZXkgV0xMMDEzIChpbnRlcnNpbCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjlhLCAweDAzMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogRVogY29ubmVjdCAxMU1wYnMgV2lyZWxlc3MgVVNCIEFkYXB0ZXIgU01DMjY2MlcgdjEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDVjLCAweGEwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogQmVuUSBBV0wzMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGE1LCAweDkwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogQWRkdHJvbiBBV1UtMTIwLCBDb21wZXggV0xVMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWRkLCAweGZmMzEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogSW50ZWwgQVAzMTAgQW55UG9pbnQgSUkgVVNCICovCisJeyBVU0JfREVWSUNFKDB4ODA4NiwgMHgwMjAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIER5bmFsaW5rIEwxMVUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDhlLCAweDcxMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogQXJlc2NvbSBXTC0yMTAsIEZDQyBpZCAwN0otR0wyNDExVVNCICovCisJeyBVU0JfREVWSUNFKDB4MGQ4ZSwgMHg3MTEwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEktTyBEQVRBIFdOLUIxMS9VU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5MTkpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogQlQgVm95YWdlciAxMDEwICovCisJeyBVU0JfREVWSUNFKDB4MDY5YSwgMHgwODIxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qCisJICogYXQ3NmM1MDMtaTM4NjMKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzLzM4NjMgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjA0KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYzKSB9LAorCS8qIFNhbXN1bmcgU1dMLTIxMDBVICovCisJeyBVU0JfREVWSUNFKDB4MDU1ZCwgMHhhMDAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYzKSB9LAorCS8qCisJICogYXQ3NmM1MDMtcmZtZAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvUkZNRCBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIER5bmFsaW5rL0Fza2V5IFdMTDAxMyAocmZtZCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjlhLCAweDAzMjEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjYgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNzdiLCAweDIyMTkpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIE5ldHdvcmsgRXZlcnl3aGVyZSBOV1UxMUIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNzdiLCAweDIyMjcpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIE5ldGdlYXIgTUExMDEgcmV2LiBCICovCisJeyBVU0JfREVWSUNFKDB4MDg2NCwgMHg0MTAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBELUxpbmsgRFdMLTEyMCByZXYuIEUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDAxLCAweDMyMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEFjdGlvbnRlYyA4MDJVQVQxLCBIV1UwMTE1MC0wMVVLICovCisJeyBVU0JfREVWSUNFKDB4MTY2OCwgMHg3NjA1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBBaXJWYXN0IFctQnVkZGllIFdOMjEwICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg0MTAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIFhIMTE1MyA4MDIuMTFiIFVTQiBhZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MTM3MSwgMHg1NzQzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBDTmV0IENOVVNCNjExICovCisJeyBVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBGaWJlckxpbmUgRkwtV0wyMDBVICovCisJeyBVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBCZW5RIEFXTDQwMCBVU0Igc3RpY2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGE1LCAweDkwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIDNDb20gM0NSU0hFVzY5NiAqLworCXsgVVNCX0RFVklDRSgweDA1MDYsIDB4MGEwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogU2llbWVucyBTYW50aXMgQURTTCBXTEFOIFVTQiBhZGFwdGVyIFdMTCAwMTMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjgxLCAweDAwMWIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEJlbGtpbiBGNUQ2MDUwLCB2ZXJzaW9uIDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwNTApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIGlCbGl0enosIEJXVTYxMyAobm90ICpCIG9yICpTQikgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEdpZ2FieXRlIEdOLVdMQk0xMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIFBsYW5leCBHVy1VUzExUyAqLworCXsgVVNCX0RFVklDRSgweDIwMTksIDB4MzIyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogSW50ZXJuYWwgV0xBTiBhZGFwdGVyIGluIGg1WzQsNV14eCBzZXJpZXMgaVBBUXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDlmLCAweDAwMzIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIENvcmVnYSBXaXJlbGVzcyBMQU4gVVNCLTExIG1pbmkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMTEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIENvcmVnYSBXaXJlbGVzcyBMQU4gVVNCLTExIG1pbmkyICovCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDE4KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBVbmlkZW4gUENXMTAwICovCisJeyBVU0JfREVWSUNFKDB4MDVkZCwgMHhmZjM1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKgorCSAqIGF0NzZjNTAzLXJmbWQtYWNjCisJICovCisJLyogU01DMjY2NFcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDM1MDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0FDQykgfSwKKwkvKiBCZWxraW4gRjVENjA1MCwgU01DMjY2MlcgdjIsIFNNQzI2NjJXLUFSICovCisJeyBVU0JfREVWSUNFKDB4MGQ1YywgMHhhMDAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19BQ0MpIH0sCisJLyoKKwkgKiBhdDc2YzUwNS1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNS9SRk1EICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjA2KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNSkgfSwKKwkvKgorCSAqIGF0NzZjNTA1LXJmbWQyOTU4CisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNS9SRk1ELCBPdmlzTGluayBXTC0xMTMwVVNCICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjEzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIEZpYmVybGluZSBGTC1XTDI0MFUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMTQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogQ05ldCBDTlVTQi02MTFHICovCisJeyBVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDEzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjggKi8KKwl7IFVTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogWHRlcmFzeXMgWE4tMjEyMkIsIElCbGl0enogQldVNjEzQi9CV1U2MTNTQiAqLworCXsgVVNCX0RFVklDRSgweDEyZmQsIDB4MTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBDb3JlZ2EgV0xBTiBVU0IgU3RpY2sgMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDc2MTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogTWljcm9zdGFyIE1TSSBCb3ggTVM2OTc4ICovCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgxMDIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qCisJICogYXQ3NmM1MDVhLXJmbWQyOTU4CisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNUEgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE0KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpIH0sCisJLyogR2VuZXJpYyBBVDc2QzUwNUFTIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBKSB9LAorCS8qIFNpZW1lbnMgR2lnYXNldCBVU0IgV0xBTiBBZGFwdGVyIDExICovCisJeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpIH0sCisJLyoKKwkgKiBhdDc2YzUwNWFteC1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNUFNWCBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QU1YKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldl90YWJsZSk7CisKKy8qIFN1cHBvcnRlZCByYXRlcyBvZiB0aGlzIGhhcmR3YXJlLCBiaXQgNyBtYXJrcyBiYXNpYyByYXRlcyAqLworc3RhdGljIGNvbnN0IHU4IGh3X3JhdGVzW10gPSB7IDB4ODIsIDB4ODQsIDB4MGIsIDB4MTYgfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHByZWFtYmxlc1tdID0geyAibG9uZyIsICJzaG9ydCIsICJhdXRvIiB9OworCisvKiBGaXJtd2FyZSBkb3dubG9hZCAqLworLyogREZVIHN0YXRlcyAqLworI2RlZmluZSBTVEFURV9JRExFCQkJMHgwMAorI2RlZmluZSBTVEFURV9ERVRBQ0gJCQkweDAxCisjZGVmaW5lIFNUQVRFX0RGVV9JRExFCQkJMHgwMgorI2RlZmluZSBTVEFURV9ERlVfRE9XTkxPQURfU1lOQwkJMHgwMworI2RlZmluZSBTVEFURV9ERlVfRE9XTkxPQURfQlVTWQkJMHgwNAorI2RlZmluZSBTVEFURV9ERlVfRE9XTkxPQURfSURMRQkJMHgwNQorI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1RfU1lOQwkJMHgwNgorI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1QJCTB4MDcKKyNkZWZpbmUgU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQJMHgwOAorI2RlZmluZSBTVEFURV9ERlVfVVBMT0FEX0lETEUJCTB4MDkKKyNkZWZpbmUgU1RBVEVfREZVX0VSUk9SCQkJMHgwYQorCisvKiBERlUgY29tbWFuZHMgKi8KKyNkZWZpbmUgREZVX0RFVEFDSAkJCTAKKyNkZWZpbmUgREZVX0ROTE9BRAkJCTEKKyNkZWZpbmUgREZVX1VQTE9BRAkJCTIKKyNkZWZpbmUgREZVX0dFVFNUQVRVUwkJCTMKKyNkZWZpbmUgREZVX0NMUlNUQVRVUwkJCTQKKyNkZWZpbmUgREZVX0dFVFNUQVRFCQkJNQorI2RlZmluZSBERlVfQUJPUlQJCQk2CisKKyNkZWZpbmUgRldfQkxPQ0tfU0laRSAxMDI0CisKK3N0cnVjdCBkZnVfc3RhdHVzIHsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyIHBvbGxfdGltZW91dFszXTsKKwl1bnNpZ25lZCBjaGFyIHN0YXRlOworCXVuc2lnbmVkIGNoYXIgc3RyaW5nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc19pbnRlcnNpbChlbnVtIGJvYXJkX3R5cGUgYm9hcmQpCit7CisJcmV0dXJuIChib2FyZCA9PSBCT0FSRF81MDNfSVNMMzg2MSB8fCBib2FyZCA9PSBCT0FSRF81MDNfSVNMMzg2Myk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfaXNfNTAzcmZtZChlbnVtIGJvYXJkX3R5cGUgYm9hcmQpCit7CisJcmV0dXJuIChib2FyZCA9PSBCT0FSRF81MDMgfHwgYm9hcmQgPT0gQk9BUkRfNTAzX0FDQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfaXNfNTA1YShlbnVtIGJvYXJkX3R5cGUgYm9hcmQpCit7CisJcmV0dXJuIChib2FyZCA9PSBCT0FSRF81MDVBIHx8IGJvYXJkID09IEJPQVJEXzUwNUFNWCk7Cit9CisKKy8qIExvYWQgYSBibG9jayBvZiB0aGUgZmlyc3QgKGludGVybmFsKSBwYXJ0IG9mIHRoZSBmaXJtd2FyZSAqLworc3RhdGljIGludCBhdDc2X2xvYWRfaW50X2Z3X2Jsb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgYmxvY2tubywKKwkJCQkgIHZvaWQgKmJsb2NrLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0ROTE9BRCwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCSAgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCBibG9ja25vLCAwLCBibG9jaywgc2l6ZSwKKwkJCSAgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9kZnVfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGZ1X3N0YXR1cyAqc3RhdHVzKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCBERlVfR0VUU1RBVFVTLAorCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgIDAsIDAsIHN0YXR1cywgc2l6ZW9mKHN0cnVjdCBkZnVfc3RhdHVzKSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTggYXQ3Nl9kZnVfZ2V0X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCAqc3RhdGUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIERGVV9HRVRTVEFURSwKKwkJCSAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgICAwLCAwLCBzdGF0ZSwgMSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbnZlcnQgdGltZW91dCBmcm9tIHRoZSBERlUgc3RhdHVzIHRvIGppZmZpZXMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDc2X2dldF90aW1lb3V0KHN0cnVjdCBkZnVfc3RhdHVzICpzKQoreworCXJldHVybiBtc2Vjc190b19qaWZmaWVzKChzLT5wb2xsX3RpbWVvdXRbMl0gPDwgMTYpCisJCQkJfCAocy0+cG9sbF90aW1lb3V0WzFdIDw8IDgpCisJCQkJfCAocy0+cG9sbF90aW1lb3V0WzBdKSk7Cit9CisKKy8qIExvYWQgaW50ZXJuYWwgZmlybXdhcmUgZnJvbSB0aGUgYnVmZmVyLiAgSWYgbWFuaWZlc3Rfc3luY190aW1lb3V0ID4gMCwgdXNlCisgKiBpdHMgdmFsdWUgaW4gamlmZmllcyBpbiB0aGUgTUFOSUZFU1RfU1lOQyBzdGF0ZS4gICovCitzdGF0aWMgaW50IGF0NzZfdXNiZGZ1X2Rvd25sb2FkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSwKKwkJCQlpbnQgbWFuaWZlc3Rfc3luY190aW1lb3V0KQoreworCXU4ICpibG9jazsKKwlzdHJ1Y3QgZGZ1X3N0YXR1cyBkZnVfc3RhdF9idWY7CisJaW50IHJldCA9IDA7CisJaW50IG5lZWRfZGZ1X3N0YXRlID0gMTsKKwlpbnQgaXNfZG9uZSA9IDA7CisJdTggZGZ1X3N0YXRlID0gMDsKKwl1MzIgZGZ1X3RpbWVvdXQgPSAwOworCWludCBic2l6ZSA9IDA7CisJaW50IGJsb2Nrbm8gPSAwOworCisJYXQ3Nl9kYmcoREJHX0RGVSwgIiVzKCAlcCwgJXUsICVkKSIsIF9fZnVuY19fLCBidWYsIHNpemUsCisJCSBtYW5pZmVzdF9zeW5jX3RpbWVvdXQpOworCisJaWYgKCFzaXplKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJGVyBidWZmZXIgbGVuZ3RoIGludmFsaWQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmxvY2sgPSBrbWFsbG9jKEZXX0JMT0NLX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYmxvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJZG8geworCQlpZiAobmVlZF9kZnVfc3RhdGUpIHsKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0ZSh1ZGV2LCAmZGZ1X3N0YXRlKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImNhbm5vdCBnZXQgREZVIHN0YXRlOiAlZFxuIiwgcmV0KTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCQluZWVkX2RmdV9zdGF0ZSA9IDA7CisJCX0KKworCQlzd2l0Y2ggKGRmdV9zdGF0ZSkgeworCQljYXNlIFNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DIik7CisJCQlyZXQgPSBhdDc2X2RmdV9nZXRfc3RhdHVzKHVkZXYsICZkZnVfc3RhdF9idWYpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJZGZ1X3N0YXRlID0gZGZ1X3N0YXRfYnVmLnN0YXRlOworCQkJCWRmdV90aW1lb3V0ID0gYXQ3Nl9nZXRfdGltZW91dCgmZGZ1X3N0YXRfYnVmKTsKKwkJCQluZWVkX2RmdV9zdGF0ZSA9IDA7CisJCQl9IGVsc2UKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiYXQ3Nl9kZnVfZ2V0X3N0YXR1cyByZXR1cm5lZCAlZFxuIiwKKwkJCQkJICAgcmV0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX0JVU1k6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0RPV05MT0FEX0JVU1kiKTsKKwkJCW5lZWRfZGZ1X3N0YXRlID0gMTsKKworCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVTogUmVzZXR0aW5nIGRldmljZSIpOworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGRmdV90aW1lb3V0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiRE9XTkxPQUQuLi4iKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFNUQVRFX0RGVV9JRExFOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVSBJRExFIik7CisKKwkJCWJzaXplID0gbWluX3QoaW50LCBzaXplLCBGV19CTE9DS19TSVpFKTsKKwkJCW1lbWNweShibG9jaywgYnVmLCBic2l6ZSk7CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiaW50IGZ3LCBzaXplIGxlZnQgPSAlNWQsICIKKwkJCQkgImJzaXplID0gJTRkLCBibG9ja25vID0gJTJkIiwgc2l6ZSwgYnNpemUsCisJCQkJIGJsb2Nrbm8pOworCQkJcmV0ID0KKwkJCSAgICBhdDc2X2xvYWRfaW50X2Z3X2Jsb2NrKHVkZXYsIGJsb2Nrbm8sIGJsb2NrLCBic2l6ZSk7CisJCQlidWYgKz0gYnNpemU7CisJCQlzaXplIC09IGJzaXplOworCQkJYmxvY2tubysrOworCisJCQlpZiAocmV0ICE9IGJzaXplKQorCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJhdDc2X2xvYWRfaW50X2Z3X2Jsb2NrICIKKwkJCQkJICAgInJldHVybmVkICVkXG4iLCByZXQpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1RfU1lOQzoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfTUFOSUZFU1RfU1lOQyIpOworCisJCQlyZXQgPSBhdDc2X2RmdV9nZXRfc3RhdHVzKHVkZXYsICZkZnVfc3RhdF9idWYpOworCQkJaWYgKHJldCA8IDApCisJCQkJYnJlYWs7CisKKwkJCWRmdV9zdGF0ZSA9IGRmdV9zdGF0X2J1Zi5zdGF0ZTsKKwkJCWRmdV90aW1lb3V0ID0gYXQ3Nl9nZXRfdGltZW91dCgmZGZ1X3N0YXRfYnVmKTsKKwkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKworCQkJLyogb3ZlcnJpZGUgdGhlIHRpbWVvdXQgZnJvbSB0aGUgc3RhdHVzIHJlc3BvbnNlLAorCQkJICAgbmVlZGVkIGZvciBBVDc2QzUwNUEgKi8KKwkJCWlmIChtYW5pZmVzdF9zeW5jX3RpbWVvdXQgPiAwKQorCQkJCWRmdV90aW1lb3V0ID0gbWFuaWZlc3Rfc3luY190aW1lb3V0OworCisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVOiBXYWl0aW5nIGZvciBtYW5pZmVzdCBwaGFzZSIpOworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGRmdV90aW1lb3V0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVCIpOworCQkJaXNfZG9uZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVF9XQUlUX1JFU0VUOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVF9XQUlUX1JFU0VUIik7CisJCQlpc19kb25lID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX1VQTE9BRF9JRExFOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9VUExPQURfSURMRSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRVJST1I6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0VSUk9SIik7CisJCQlyZXQgPSAtRVBJUEU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVSBVTktOT1dOIFNUQVRFICglZCkiLCBkZnVfc3RhdGUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoIWlzX2RvbmUgJiYgKHJldCA+PSAwKSk7CisKK2V4aXQ6CisJa2ZyZWUoYmxvY2spOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgSEVYMlNUUl9CVUZGRVJTIDQKKyNkZWZpbmUgSEVYMlNUUl9NQVhfTEVOIDY0CisjZGVmaW5lIEJJTjJIRVgoeCkgKCh4KSA8IDEwID8gJzAnICsgKHgpIDogKHgpICsgJ0EnIC0gMTApCisKKy8qIENvbnZlcnQgYmluYXJ5IGRhdGEgaW50byBoZXggc3RyaW5nICovCitzdGF0aWMgY2hhciAqaGV4MnN0cih2b2lkICpidWYsIGludCBsZW4pCit7CisJc3RhdGljIGF0b21pY190IGEgPSBBVE9NSUNfSU5JVCgwKTsKKwlzdGF0aWMgY2hhciBidWZzW0hFWDJTVFJfQlVGRkVSU11bMyAqIEhFWDJTVFJfTUFYX0xFTiArIDFdOworCWNoYXIgKnJldCA9IGJ1ZnNbYXRvbWljX2luY19yZXR1cm4oJmEpICYgKEhFWDJTVFJfQlVGRkVSUyAtIDEpXTsKKwljaGFyICpvYnVmID0gcmV0OworCXU4ICppYnVmID0gYnVmOworCisJaWYgKGxlbiA+IEhFWDJTVFJfTUFYX0xFTikKKwkJbGVuID0gSEVYMlNUUl9NQVhfTEVOOworCisJaWYgKGxlbiA8PSAwKSB7CisJCXJldFswXSA9ICdcMCc7CisJCXJldHVybiByZXQ7CisJfQorCisJd2hpbGUgKGxlbi0tKSB7CisJCSpvYnVmKysgPSBCSU4ySEVYKCppYnVmID4+IDQpOworCQkqb2J1ZisrID0gQklOMkhFWCgqaWJ1ZiAmIDB4Zik7CisJCSpvYnVmKysgPSAnLSc7CisJCWlidWYrKzsKKwl9CisJKigtLW9idWYpID0gJ1wwJzsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFDMlNUUl9CVUZGRVJTIDQKKworc3RhdGljIGlubGluZSBjaGFyICptYWMyc3RyKHU4ICptYWMpCit7CisJc3RhdGljIGF0b21pY190IGEgPSBBVE9NSUNfSU5JVCgwKTsKKwlzdGF0aWMgY2hhciBidWZzW01BQzJTVFJfQlVGRkVSU11bNiAqIDNdOworCWNoYXIgKnN0cjsKKworCXN0ciA9IGJ1ZnNbYXRvbWljX2luY19yZXR1cm4oJmEpICYgKE1BQzJTVFJfQlVGRkVSUyAtIDEpXTsKKwlzcHJpbnRmKHN0ciwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7CisJcmV0dXJuIHN0cjsKK30KKworLyogTEVEIHRyaWdnZXIgKi8KK3N0YXRpYyBpbnQgdHhfYWN0aXZpdHk7CitzdGF0aWMgdm9pZCBhdDc2X2xlZHRyaWdfdHhfdGltZXJmdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgREVGSU5FX1RJTUVSKGxlZHRyaWdfdHhfdGltZXIsIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmMsIDAsIDApOworREVGSU5FX0xFRF9UUklHR0VSKGxlZHRyaWdfdHgpOworCitzdGF0aWMgdm9pZCBhdDc2X2xlZHRyaWdfdHhfdGltZXJmdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdGF0aWMgaW50IHR4X2xhc3RhY3Rpdml0eTsKKworCWlmICh0eF9sYXN0YWN0aXZpdHkgIT0gdHhfYWN0aXZpdHkpIHsKKwkJdHhfbGFzdGFjdGl2aXR5ID0gdHhfYWN0aXZpdHk7CisJCWxlZF90cmlnZ2VyX2V2ZW50KGxlZHRyaWdfdHgsIExFRF9GVUxMKTsKKwkJbW9kX3RpbWVyKCZsZWR0cmlnX3R4X3RpbWVyLCBqaWZmaWVzICsgSFogLyA0KTsKKwl9IGVsc2UKKwkJbGVkX3RyaWdnZXJfZXZlbnQobGVkdHJpZ190eCwgTEVEX09GRik7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF9hY3Rpdml0eSh2b2lkKQoreworCXR4X2FjdGl2aXR5Kys7CisJaWYgKCF0aW1lcl9wZW5kaW5nKCZsZWR0cmlnX3R4X3RpbWVyKSkKKwkJbW9kX3RpbWVyKCZsZWR0cmlnX3R4X3RpbWVyLCBqaWZmaWVzICsgSFogLyA0KTsKK30KKworc3RhdGljIGludCBhdDc2X3JlbWFwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwYSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsIDAsIE5VTEwsIDAsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9nZXRfb3BfbW9kZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0OworCXU4IHNhdmVkOworCXU4ICpvcF9tb2RlOworCisJb3BfbW9kZSA9IGttYWxsb2MoMSwgR0ZQX05PSU8pOworCWlmICghb3BfbW9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwMSwgMCwgb3BfbW9kZSwgMSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlzYXZlZCA9ICpvcF9tb2RlOworCWtmcmVlKG9wX21vZGUpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZSBpZiAocmV0IDwgMSkKKwkJcmV0dXJuIC1FSU87CisJZWxzZQorCQlyZXR1cm4gc2F2ZWQ7Cit9CisKKy8qIExvYWQgYSBibG9jayBvZiB0aGUgc2Vjb25kICgiZXh0ZXJuYWwiKSBwYXJ0IG9mIHRoZSBmaXJtd2FyZSAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9sb2FkX2V4dF9md19ibG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGJsb2Nrbm8sCisJCQkJCSB2b2lkICpibG9jaywgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MGUsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgIDB4MDgwMiwgYmxvY2tubywgYmxvY2ssIHNpemUsCisJCQkgICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9od19jZmcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJICB1bmlvbiBhdDc2X2h3Y2ZnICpidWYsIGludCBidWZfc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDBhMDIsIDAsCisJCQkgICAgICAgYnVmLCBidWZfc2l6ZSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCisvKiBJbnRlcnNpbCBib2FyZHMgdXNlIGEgZGlmZmVyZW50ICJ2YWx1ZSIgZm9yIEdldEhXQ29uZmlnIHJlcXVlc3RzICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9od19jZmdfaW50ZXJzaWwoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCSAgIHVuaW9uIGF0NzZfaHdjZmcgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MDkwMiwgMCwKKwkJCSAgICAgICBidWYsIGJ1Zl9zaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKKy8qIEdldCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFkYXB0ZXIgYW5kIHB1dCBpdCB0byB0aGUgYXBwcm9wcmlhdGUKKyAqIGZpZWxkcyBvZiAncHJpdicgKHRoZSBHZXRIV0NvbmZpZyByZXF1ZXN0IGFuZCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcmVzdWx0CisgKiBkZXBlbmRzIG9uIHRoZSBib2FyZCB0eXBlKSAqLworc3RhdGljIGludCBhdDc2X2dldF9od19jb25maWcoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXVuaW9uIGF0NzZfaHdjZmcgKmh3Y2ZnID0ga21hbGxvYyhzaXplb2YoKmh3Y2ZnKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWh3Y2ZnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhdDc2X2lzX2ludGVyc2lsKHByaXYtPmJvYXJkX3R5cGUpKSB7CisJCXJldCA9IGF0NzZfZ2V0X2h3X2NmZ19pbnRlcnNpbChwcml2LT51ZGV2LCBod2NmZywKKwkJCQkJICAgICAgIHNpemVvZihod2NmZy0+aSkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBod2NmZy0+aS5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5pLnJlZ3VsYXRvcnlfZG9tYWluOworCX0gZWxzZSBpZiAoYXQ3Nl9pc181MDNyZm1kKHByaXYtPmJvYXJkX3R5cGUpKSB7CisJCXJldCA9IGF0NzZfZ2V0X2h3X2NmZyhwcml2LT51ZGV2LCBod2NmZywgc2l6ZW9mKGh3Y2ZnLT5yMykpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBod2NmZy0+cjMubWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJcHJpdi0+cmVndWxhdG9yeV9kb21haW4gPSBod2NmZy0+cjMucmVndWxhdG9yeV9kb21haW47CisJfSBlbHNlIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnKHByaXYtPnVkZXYsIGh3Y2ZnLCBzaXplb2YoaHdjZmctPnI1KSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5yNS5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5yNS5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9CisKK2V4aXQ6CisJa2ZyZWUoaHdjZmcpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgZ2V0IEhXIENvbmZpZyAoZXJyb3IgJWQpXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCByZWdfZG9tYWluIGNvbnN0ICphdDc2X2dldF9yZWdfZG9tYWluKHUxNiBjb2RlKQoreworCWludCBpOworCXN0YXRpYyBzdHJ1Y3QgcmVnX2RvbWFpbiBjb25zdCBmZF90YWJbXSA9IHsKKwkJeyAweDEwLCAiRkNDIChVU0EpIiwgMHg3ZmYgfSwJLyogY2ggMS0xMSAqLworCQl7IDB4MjAsICJJQyAoQ2FuYWRhKSIsIDB4N2ZmIH0sCS8qIGNoIDEtMTEgKi8KKwkJeyAweDMwLCAiRVRTSSAobW9zdCBvZiBFdXJvcGUpIiwgMHgxZmZmIH0sCS8qIGNoIDEtMTMgKi8KKwkJeyAweDMxLCAiU3BhaW4iLCAweDYwMCB9LAkvKiBjaCAxMC0xMSAqLworCQl7IDB4MzIsICJGcmFuY2UiLCAweDFlMDAgfSwJLyogY2ggMTAtMTMgKi8KKwkJeyAweDQwLCAiTUtLIChKYXBhbikiLCAweDIwMDAgfSwJLyogY2ggMTQgKi8KKwkJeyAweDQxLCAiTUtLMSAoSmFwYW4pIiwgMHgzZmZmIH0sCS8qIGNoIDEtMTQgKi8KKwkJeyAweDUwLCAiSXNyYWVsIiwgMHgzZmMgfSwJLyogY2ggMy05ICovCisJCXsgMHgwMCwgIjx1bmtub3duPiIsIDB4ZmZmZmZmZmYgfQkvKiBjaCAxLTMyICovCisJfTsKKworCS8qIExhc3QgZW50cnkgaXMgZmFsbGJhY2sgZm9yIHVua25vd24gZG9tYWluIGNvZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZF90YWIpIC0gMTsgaSsrKQorCQlpZiAoY29kZSA9PSBmZF90YWJbaV0uY29kZSkKKwkJCWJyZWFrOworCisJcmV0dXJuICZmZF90YWJbaV07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X21pYihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTE2IG1pYiwgdm9pZCAqYnVmLAorCQkJICAgICAgIGludCBidWZfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgbWliIDw8IDgsIDAsIGJ1ZiwgYnVmX3NpemUsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA+PSAwICYmIHJldCAhPSBidWZfc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHJldDsKK30KKworLyogUmV0dXJuIHBvc2l0aXZlIG51bWJlciBmb3Igc3RhdHVzLCBuZWdhdGl2ZSBmb3IgYW4gZXJyb3IgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2NtZF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGNtZCkKK3sKKwl1OCAqc3RhdF9idWY7CisJaW50IHJldDsKKworCXN0YXRfYnVmID0ga21hbGxvYyg0MCwgR0ZQX05PSU8pOworCWlmICghc3RhdF9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgyMiwKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSwgY21kLCAwLCBzdGF0X2J1ZiwKKwkJCTQwLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBzdGF0X2J1Zls1XTsKKwlrZnJlZShzdGF0X2J1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BS0VfQ01EX0NBU0UoYykgY2FzZSAoYyk6IHJldHVybiAjYworc3RhdGljIGNvbnN0IGNoYXIgKmF0NzZfZ2V0X2NtZF9zdHJpbmcodTggY21kX3N0YXR1cykKK3sKKwlzd2l0Y2ggKGNtZF9zdGF0dXMpIHsKKwkJTUFLRV9DTURfQ0FTRShDTURfU0VUX01JQik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX0dFVF9NSUIpOworCQlNQUtFX0NNRF9DQVNFKENNRF9TQ0FOKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfSk9JTik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1NUQVJUX0lCU1MpOworCQlNQUtFX0NNRF9DQVNFKENNRF9SQURJT19PTik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1JBRElPX09GRik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1NUQVJUVVApOworCX0KKworCXJldHVybiAiVU5LTk9XTiI7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBjbWQsIHZvaWQgKmJ1ZiwKKwkJCQkgaW50IGJ1Zl9zaXplKQoreworCWludCByZXQ7CisJc3RydWN0IGF0NzZfY29tbWFuZCAqY21kX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdDc2X2NvbW1hbmQpICsKKwkJCQkJICAgICAgIGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKworCWlmICghY21kX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWRfYnVmLT5jbWQgPSBjbWQ7CisJY21kX2J1Zi0+cmVzZXJ2ZWQgPSAwOworCWNtZF9idWYtPnNpemUgPSBjcHVfdG9fbGUxNihidWZfc2l6ZSk7CisJbWVtY3B5KGNtZF9idWYtPmRhdGEsIGJ1ZiwgYnVmX3NpemUpOworCisJYXQ3Nl9kYmdfZHVtcChEQkdfQ01ELCBjbWRfYnVmLCBzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKyBidWZfc2l6ZSwKKwkJICAgICAgImlzc3VpbmcgY29tbWFuZCAlcyAoMHglMDJ4KSIsCisJCSAgICAgIGF0NzZfZ2V0X2NtZF9zdHJpbmcoY21kKSwgY21kKTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MGUsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAwLCAwLCBjbWRfYnVmLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdDc2X2NvbW1hbmQpICsgYnVmX3NpemUsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJa2ZyZWUoY21kX2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQUtFX0NNRF9TVEFUVVNfQ0FTRShjKQljYXNlIChjKTogcmV0dXJuICNjCitzdGF0aWMgY29uc3QgY2hhciAqYXQ3Nl9nZXRfY21kX3N0YXR1c19zdHJpbmcodTggY21kX3N0YXR1cykKK3sKKwlzd2l0Y2ggKGNtZF9zdGF0dXMpIHsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JRExFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19DT01QTEVURSk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfVU5LTk9XTik7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1RJTUVfT1VUKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JTl9QUk9HUkVTUyk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSE9TVF9GQUlMVVJFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19TQ0FOX0ZBSUxFRCk7CisJfQorCisJcmV0dXJuICJVTktOT1dOIjsKK30KKworLyogV2FpdCB1bnRpbCB0aGUgY29tbWFuZCBpcyBjb21wbGV0ZWQgKi8KK3N0YXRpYyBpbnQgYXQ3Nl93YWl0X2NvbXBsZXRpb24oc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgaW50IGNtZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgQ01EX0NPTVBMRVRJT05fVElNRU9VVDsKKworCWRvIHsKKwkJc3RhdHVzID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBjbWQpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfY21kX3N0YXR1cyBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYXQ3Nl9kYmcoREJHX1dBSVRfQ09NUExFVEUsCisJCQkgIiVzOiBXYWl0aW5nIG9uIGNtZCAlZCwgc3RhdHVzID0gJWQgKCVzKSIsCisJCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBjbWQsIHN0YXR1cywKKwkJCSBhdDc2X2dldF9jbWRfc3RhdHVzX3N0cmluZyhzdGF0dXMpKTsKKworCQlpZiAoc3RhdHVzICE9IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MKKwkJICAgICYmIHN0YXR1cyAhPSBDTURfU1RBVFVTX0lETEUpCisJCQlicmVhazsKKworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFogLyAxMCk7CS8qIDEwMCBtcyAqLworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBjb21wbGV0aW9uIHRpbWVvdXQgZm9yIGNvbW1hbmQgJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBjbWQpOworCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X21pYihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TRVRfTUlCLCBidWYsCisJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBzZXRfbWliX2J1ZmZlciwKKwkJCQkJICAgICBkYXRhKSArIGJ1Zi0+c2l6ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfU0VUX01JQik7CisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIlczogc2V0X21pYjogYXQ3Nl93YWl0X2NvbXBsZXRpb24gZmFpbGVkICIKKwkJICAgICAgICJ3aXRoICVkXG4iLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXJldCA9IC1FSU87CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogUmV0dXJuIDwgMCBvbiBlcnJvciwgPT0gMCBpZiBubyBjb21tYW5kIHNlbnQsID09IDEgaWYgY21kIHNlbnQgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcmFkaW8oc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCWludCBjbWQ7CisKKwlpZiAocHJpdi0+cmFkaW9fb24gPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCWNtZCA9IGVuYWJsZSA/IENNRF9SQURJT19PTiA6IENNRF9SQURJT19PRkY7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgY21kLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKCVkKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBjbWQsIHJldCk7CisJZWxzZQorCQlyZXQgPSAxOworCisJcHJpdi0+cmFkaW9fb24gPSBlbmFibGU7CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IGN1cnJlbnQgcG93ZXIgc2F2ZSBtb2RlIChBVDc2X1BNX09GRi9BVDc2X1BNX09OL0FUNzZfUE1fU01BUlQpICovCitzdGF0aWMgaW50IGF0NzZfc2V0X3BtX21vZGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUNfTUdNVDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hY19tZ210LCBwb3dlcl9tZ210X21vZGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gcHJpdi0+cG1fbW9kZTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHBtX21vZGUpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X3ByZWFtYmxlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHU4IHR5cGUpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTE9DQUw7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9sb2NhbCwgcHJlYW1ibGVfdHlwZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSB0eXBlOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocHJlYW1ibGUpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2ZyYWcoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTE2IHNpemUpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDI7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjLCBmcmFnX3RocmVzaG9sZCk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLndvcmQgPSBjcHVfdG9fbGUxNihzaXplKTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKGZyYWcgdGhyZXNob2xkKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9ydHMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTE2IHNpemUpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDI7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjLCBydHNfdGhyZXNob2xkKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KHNpemUpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocnRzKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9hdXRvcmF0ZV9mYWxsYmFjayhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgb25vZmYpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTE9DQUw7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9sb2NhbCwgdHhhdXRvcmF0ZV9mYWxsYmFjayk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBvbm9mZjsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKGF1dG9yYXRlIGZhbGxiYWNrKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWNfYWRkcihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCBpOworCWludCByZXQ7CisJc3RydWN0IG1pYl9tYWNfYWRkciAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX2FkZHIpLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX0FERFIsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfYWRkcikpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDX0FERFIpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfQUREUjogbWFjX2FkZHIgJXMgcmVzIDB4JXggMHgleCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBtYWMyc3RyKG0tPm1hY19hZGRyKSwgbS0+cmVzWzBdLCBtLT5yZXNbMV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPmdyb3VwX2FkZHIpOyBpKyspCisJCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19BRERSOiBncm91cCBhZGRyICVkOiAlcywgIgorCQkJICJzdGF0dXMgJWQiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGksCisJCQkgbWFjMnN0cihtLT5ncm91cF9hZGRyW2ldKSwgbS0+Z3JvdXBfYWRkcl9zdGF0dXNbaV0pOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWNfd2VwKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwlpbnQga2V5X2xlbjsKKwlzdHJ1Y3QgbWliX21hY193ZXAgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hY193ZXApLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfV0VQLCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX3dlcCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDX1dFUCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19XRVA6IHByaXZfaW52b2tlZCAldSBkZWZfa2V5X2lkICV1ICIKKwkJICJrZXlfbGVuICV1IGV4Y2xfdW5lbmNyICV1IHdlcF9pY3ZfZXJyICV1IHdlcF9leGNsdWRlZCAldSAiCisJCSAiZW5jcl9sZXZlbCAldSBrZXkgJWQiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBtLT5wcml2YWN5X2ludm9rZWQsIG0tPndlcF9kZWZhdWx0X2tleV9pZCwKKwkJIG0tPndlcF9rZXlfbWFwcGluZ19sZW4sIG0tPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQsCisJCSBsZTMyX3RvX2NwdShtLT53ZXBfaWN2X2Vycm9yX2NvdW50KSwKKwkJIGxlMzJfdG9fY3B1KG0tPndlcF9leGNsdWRlZF9jb3VudCksIG0tPmVuY3J5cHRpb25fbGV2ZWwsCisJCSBtLT53ZXBfZGVmYXVsdF9rZXlfaWQpOworCisJa2V5X2xlbiA9IChtLT5lbmNyeXB0aW9uX2xldmVsID09IDEpID8KKwkgICAgV0VQX1NNQUxMX0tFWV9MRU4gOiBXRVBfTEFSR0VfS0VZX0xFTjsKKworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKQorCQlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfV0VQOiBrZXkgJWQ6ICVzIiwKKwkJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGksCisJCQkgaGV4MnN0cihtLT53ZXBfZGVmYXVsdF9rZXl2YWx1ZVtpXSwga2V5X2xlbikpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWNfbWdtdChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tYWNfbWdtdCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX01HTVQsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDX01HTVQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfTUdNVDogYmVhY29uX3BlcmlvZCAlZCBDRlBfbWF4X2R1cmF0aW9uICIKKwkJICIlZCBtZWRpdW1fb2NjdXBhbmN5X2xpbWl0ICVkIHN0YXRpb25faWQgMHgleCBBVElNX3dpbmRvdyAlZCAiCisJCSAiQ0ZQX21vZGUgJWQgcHJpdmFjeV9vcHRfaW1wbCAlZCBEVElNX3BlcmlvZCAlZCBDRlBfcGVyaW9kICVkICIKKwkJICJjdXJyZW50X2Jzc2lkICVzIGN1cnJlbnRfZXNzaWQgJXMgY3VycmVudF9ic3NfdHlwZSAlZCAiCisJCSAicG1fbW9kZSAlZCBpYnNzX2NoYW5nZSAlZCByZXMgJWQgIgorCQkgIm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkICVkICIKKwkJICJpbnRlcm5hdGlvbmFsX3JvYW1pbmcgJWQgY291bnRyeV9zdHJpbmcgJS4zcyIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGxlMTZfdG9fY3B1KG0tPmJlYWNvbl9wZXJpb2QpLAorCQkgbGUxNl90b19jcHUobS0+Q0ZQX21heF9kdXJhdGlvbiksCisJCSBsZTE2X3RvX2NwdShtLT5tZWRpdW1fb2NjdXBhbmN5X2xpbWl0KSwKKwkJIGxlMTZfdG9fY3B1KG0tPnN0YXRpb25faWQpLCBsZTE2X3RvX2NwdShtLT5BVElNX3dpbmRvdyksCisJCSBtLT5DRlBfbW9kZSwgbS0+cHJpdmFjeV9vcHRpb25faW1wbGVtZW50ZWQsIG0tPkRUSU1fcGVyaW9kLAorCQkgbS0+Q0ZQX3BlcmlvZCwgbWFjMnN0cihtLT5jdXJyZW50X2Jzc2lkKSwKKwkJIGhleDJzdHIobS0+Y3VycmVudF9lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgbS0+Y3VycmVudF9ic3NfdHlwZSwgbS0+cG93ZXJfbWdtdF9tb2RlLCBtLT5pYnNzX2NoYW5nZSwKKwkJIG0tPnJlcywgbS0+bXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQsCisJCSBtLT5tdWx0aV9kb21haW5fY2FwYWJpbGl0eV9lbmFibGVkLCBtLT5jb3VudHJ5X3N0cmluZyk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hYyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tYWMgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hYyksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQywgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUMpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUM6IG1heF90eF9tc2R1X2xpZmV0aW1lICVkICIKKwkJICJtYXhfcnhfbGlmZXRpbWUgJWQgZnJhZ190aHJlc2hvbGQgJWQgcnRzX3RocmVzaG9sZCAlZCAiCisJCSAiY3dtaW4gJWQgY3dtYXggJWQgc2hvcnRfcmV0cnlfdGltZSAlZCBsb25nX3JldHJ5X3RpbWUgJWQgIgorCQkgInNjYW5fdHlwZSAlZCBzY2FuX2NoYW5uZWwgJWQgcHJvYmVfZGVsYXkgJXUgIgorCQkgIm1pbl9jaGFubmVsX3RpbWUgJWQgbWF4X2NoYW5uZWxfdGltZSAlZCBsaXN0ZW5faW50ICVkICIKKwkJICJkZXNpcmVkX3NzaWQgJXMgZGVzaXJlZF9ic3NpZCAlcyBkZXNpcmVkX2Jzc3R5cGUgJWQiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgbGUzMl90b19jcHUobS0+bWF4X3R4X21zZHVfbGlmZXRpbWUpLAorCQkgbGUzMl90b19jcHUobS0+bWF4X3J4X2xpZmV0aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmZyYWdfdGhyZXNob2xkKSwgbGUxNl90b19jcHUobS0+cnRzX3RocmVzaG9sZCksCisJCSBsZTE2X3RvX2NwdShtLT5jd21pbiksIGxlMTZfdG9fY3B1KG0tPmN3bWF4KSwKKwkJIG0tPnNob3J0X3JldHJ5X3RpbWUsIG0tPmxvbmdfcmV0cnlfdGltZSwgbS0+c2Nhbl90eXBlLAorCQkgbS0+c2Nhbl9jaGFubmVsLCBsZTE2X3RvX2NwdShtLT5wcm9iZV9kZWxheSksCisJCSBsZTE2X3RvX2NwdShtLT5taW5fY2hhbm5lbF90aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1heF9jaGFubmVsX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+bGlzdGVuX2ludGVydmFsKSwKKwkJIGhleDJzdHIobS0+ZGVzaXJlZF9zc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBtYWMyc3RyKG0tPmRlc2lyZWRfYnNzaWQpLCBtLT5kZXNpcmVkX2Jzc3R5cGUpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9waHkoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfcGh5ICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9waHkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9QSFksIG0sIHNpemVvZihzdHJ1Y3QgbWliX3BoeSkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoUEhZKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgUEhZOiBlZF90aHJlc2hvbGQgJWQgc2xvdF90aW1lICVkICIKKwkJICJzaWZzX3RpbWUgJWQgcHJlYW1ibGVfbGVuZ3RoICVkIHBsY3BfaGVhZGVyX2xlbmd0aCAlZCAiCisJCSAibXBkdV9tYXhfbGVuZ3RoICVkIGNjYV9tb2RlX3N1cHBvcnRlZCAlZCBvcGVyYXRpb25fcmF0ZV9zZXQgIgorCQkgIjB4JXggMHgleCAweCV4IDB4JXggY2hhbm5lbF9pZCAlZCBjdXJyZW50X2NjYV9tb2RlICVkICIKKwkJICJwaHlfdHlwZSAlZCBjdXJyZW50X3JlZ19kb21haW4gJWQiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBsZTMyX3RvX2NwdShtLT5lZF90aHJlc2hvbGQpLAorCQkgbGUxNl90b19jcHUobS0+c2xvdF90aW1lKSwgbGUxNl90b19jcHUobS0+c2lmc190aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnByZWFtYmxlX2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5wbGNwX2hlYWRlcl9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+bXBkdV9tYXhfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmNjYV9tb2RlX3N1cHBvcnRlZCksIG0tPm9wZXJhdGlvbl9yYXRlX3NldFswXSwKKwkJIG0tPm9wZXJhdGlvbl9yYXRlX3NldFsxXSwgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzJdLAorCQkgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzNdLCBtLT5jaGFubmVsX2lkLCBtLT5jdXJyZW50X2NjYV9tb2RlLAorCQkgbS0+cGh5X3R5cGUsIG0tPmN1cnJlbnRfcmVnX2RvbWFpbik7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX2xvY2FsKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX2xvY2FsICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9waHkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9MT0NBTCwgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfbG9jYWwpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKExPQ0FMKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTE9DQUw6IGJlYWNvbl9lbmFibGUgJWQgIgorCQkgInR4YXV0b3JhdGVfZmFsbGJhY2sgJWQgc3NpZF9zaXplICVkIHByb21pc2N1b3VzX21vZGUgJWQgIgorCQkgInByZWFtYmxlX3R5cGUgJWQiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBtLT5iZWFjb25fZW5hYmxlLAorCQkgbS0+dHhhdXRvcmF0ZV9mYWxsYmFjaywgbS0+c3NpZF9zaXplLCBtLT5wcm9taXNjdW91c19tb2RlLAorCQkgbS0+cHJlYW1ibGVfdHlwZSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21kb21haW4oc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWRvbWFpbiAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWRvbWFpbiksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01ET01BSU4sIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tZG9tYWluKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNRE9NQUlOKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTURPTUFJTjogY2hhbm5lbF9saXN0ICVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIGhleDJzdHIobS0+Y2hhbm5lbF9saXN0LCBzaXplb2YobS0+Y2hhbm5lbF9saXN0KSkpOworCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTURPTUFJTjogdHhfcG93ZXJsZXZlbCAlcyIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBoZXgyc3RyKG0tPnR4X3Bvd2VybGV2ZWwsIHNpemVvZihtLT50eF9wb3dlcmxldmVsKSkpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLworc3RhdGljIGludCBhdDc2X3N0YXJ0X21vbml0b3Ioc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiBzY2FuOworCWludCByZXQ7CisKKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbikpOworCW1lbXNldChzY2FuLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisKKwlzY2FuLmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCXNjYW4uc2Nhbl90eXBlID0gU0NBTl9UWVBFX1BBU1NJVkU7CisJc2Nhbi5pbnRlcm5hdGlvbmFsX3NjYW4gPSAwOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TQ0FOLCAmc2Nhbiwgc2l6ZW9mKHNjYW4pKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgQ01EX1NDQU4pOworCisJcmV0dXJuIHJldDsKK30KKworLyogQ2FsY3VsYXRlIHBhZGRpbmcgZnJvbSB0eGJ1Zi0+d2xlbmd0aCAod2hpY2ggZXhjbHVkZXMgdGhlIFVTQiBUWCBoZWFkZXIpLAorICAgbGlrZWx5IHRvIGNvbXBlbnNhdGUgYSBmbGF3IGluIHRoZSBBVDc2QzUwM0EgVVNCIHBhcnQgLi4uICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2NhbGNfcGFkZGluZyhpbnQgd2xlbikKK3sKKwkvKiBhZGQgdGhlIFVTQiBUWCBoZWFkZXIgKi8KKwl3bGVuICs9IEFUNzZfVFhfSERSTEVOOworCisJd2xlbiA9IHdsZW4gJSA2NDsKKworCWlmICh3bGVuIDwgNTApCisJCXJldHVybiA1MCAtIHdsZW47CisKKwlpZiAod2xlbiA+PSA2MSkKKwkJcmV0dXJuIDY0ICsgNTAgLSB3bGVuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisKKwlwcml2LT5yeF90YXNrbGV0LmRhdGEgPSAodW5zaWduZWQgbG9uZyl1cmI7CisJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cnhfdGFza2xldCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGF0NzZfc3VibWl0X3J4X3VyYihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJaW50IHNpemU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnJ4X3NrYjsKKworCWlmICghcHJpdi0+cnhfdXJiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBwcml2LT5yeF91cmIgaXMgTlVMTFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXNrYikgeworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIpKTsKKwkJaWYgKCFza2IpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSByeCBza2J1ZmZcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcHJpdi0+cnhfc2tiID0gc2tiOworCX0gZWxzZSB7CisJCXNrYl9wdXNoKHNrYiwgc2tiX2hlYWRyb29tKHNrYikpOworCQlza2JfdHJpbShza2IsIDApOworCX0KKworCXNpemUgPSBza2JfdGFpbHJvb20oc2tiKTsKKwl1c2JfZmlsbF9idWxrX3VyYihwcml2LT5yeF91cmIsIHByaXYtPnVkZXYsIHByaXYtPnJ4X3BpcGUsCisJCQkgIHNrYl9wdXQoc2tiLCBzaXplKSwgc2l6ZSwgYXQ3Nl9yeF9jYWxsYmFjaywgcHJpdik7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+cnhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FTk9ERVYpCisJCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsCisJCQkJICJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZCAtRU5PREVWIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJ4LCB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwl9CisKK2V4aXQ6CisJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FTk9ERVYpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzdWJtaXQgcnggdXJiIC0gcGxlYXNlIHVubG9hZCB0aGUgIgorCQkgICAgICAgImRyaXZlciBhbmQvb3IgcG93ZXIgY3ljbGUgdGhlIGRldmljZVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBEb3dubG9hZCBleHRlcm5hbCBmaXJtd2FyZSAqLworc3RhdGljIGludCBhdDc2X2xvYWRfZXh0ZXJuYWxfZncoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBmd2VudHJ5ICpmd2UpCit7CisJaW50IHJldDsKKwlpbnQgb3BfbW9kZTsKKwlpbnQgYmxvY2tubyA9IDA7CisJaW50IGJzaXplOworCXU4ICpibG9jazsKKwl1OCAqYnVmID0gZndlLT5leHRmdzsKKwlpbnQgc2l6ZSA9IGZ3ZS0+ZXh0Zndfc2l6ZTsKKworCWlmICghYnVmIHx8ICFzaXplKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCW9wX21vZGUgPSBhdDc2X2dldF9vcF9tb2RlKHVkZXYpOworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIm9wbW9kZSAlZCIsIG9wX21vZGUpOworCisJaWYgKG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LCAidW5leHBlY3RlZCBvcG1vZGUgJWRcbiIsCisJCQkgICBvcF9tb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmxvY2sgPSBrbWFsbG9jKEZXX0JMT0NLX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYmxvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiZG93bmxvYWRpbmcgZXh0ZXJuYWwgZmlybXdhcmUiKTsKKworCS8qIGZvciBmdyA+PSAwLjEwMCwgdGhlIGRldmljZSBuZWVkcyBhbiBleHRyYSBlbXB0eSBibG9jayAqLworCWRvIHsKKwkJYnNpemUgPSBtaW5fdChpbnQsIHNpemUsIEZXX0JMT0NLX1NJWkUpOworCQltZW1jcHkoYmxvY2ssIGJ1ZiwgYnNpemUpOworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsCisJCQkgImV4dCBmdywgc2l6ZSBsZWZ0ID0gJTVkLCBic2l6ZSA9ICU0ZCwgYmxvY2tubyA9ICUyZCIsCisJCQkgc2l6ZSwgYnNpemUsIGJsb2Nrbm8pOworCQlyZXQgPSBhdDc2X2xvYWRfZXh0X2Z3X2Jsb2NrKHVkZXYsIGJsb2Nrbm8sIGJsb2NrLCBic2l6ZSk7CisJCWlmIChyZXQgIT0gYnNpemUpIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJICAgImxvYWRpbmcgJWR0aCBmaXJtd2FyZSBibG9jayBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgIGJsb2Nrbm8sIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmICs9IGJzaXplOworCQlzaXplIC09IGJzaXplOworCQlibG9ja25vKys7CisJfSB3aGlsZSAoYnNpemUgPiAwKTsKKworCWlmIChhdDc2X2lzXzUwNWEoZndlLT5ib2FyZF90eXBlKSkgeworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICIyMDAgbXMgZGVsYXkgZm9yIDUwNWEiKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaIC8gNSArIDEpOworCX0KKworZXhpdDoKKwlrZnJlZShibG9jayk7CisJaWYgKHJldCA8IDApCisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgZXh0ZXJuYWwgZmlybXdhcmUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBEb3dubG9hZCBpbnRlcm5hbCBmaXJtd2FyZSAqLworc3RhdGljIGludCBhdDc2X2xvYWRfaW50ZXJuYWxfZncoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBmd2VudHJ5ICpmd2UpCit7CisJaW50IHJldDsKKwlpbnQgbmVlZF9yZW1hcCA9ICFhdDc2X2lzXzUwNWEoZndlLT5ib2FyZF90eXBlKTsKKworCXJldCA9IGF0NzZfdXNiZGZ1X2Rvd25sb2FkKHVkZXYsIGZ3ZS0+aW50ZncsIGZ3ZS0+aW50Zndfc2l6ZSwKKwkJCQkgICBuZWVkX3JlbWFwID8gMCA6IDIgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGludGVybmFsIGZ3IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAic2VuZGluZyBSRU1BUCIpOworCisJLyogbm8gUkVNQVAgZm9yIDUwNUEgKHNlZSBTRiBkcml2ZXIpICovCisJaWYgKG5lZWRfcmVtYXApIHsKKwkJcmV0ID0gYXQ3Nl9yZW1hcCh1ZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJICAgInNlbmRpbmcgUkVNQVAgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJzbGVlcGluZyBmb3IgMiBzZWNvbmRzIik7CisJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDIgKiBIWiArIDEpOworCXVzYl9yZXNldF9kZXZpY2UodWRldik7CisKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3N0YXJ0dXBfZGV2aWNlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfY2FyZF9jb25maWcgKmNjZmcgPSAmcHJpdi0+Y2FyZF9jb25maWc7CisJaW50IHJldDsKKworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHNzaWQgJS4qcyAoJXMpIG1vZGUgJXMgY2ggJWQgd2VwICVzIGtleSAlZCAiCisJCSAia2V5bGVuICVkIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBwcml2LT5lc3NpZF9zaXplLAorCQkgcHJpdi0+ZXNzaWQsIGhleDJzdHIocHJpdi0+ZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQyA/ICJhZGhvYyIgOiAiaW5mcmEiLAorCQkgcHJpdi0+Y2hhbm5lbCwgcHJpdi0+d2VwX2VuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAorCQkgcHJpdi0+d2VwX2tleV9pZCwgcHJpdi0+d2VwX2tleXNfbGVuW3ByaXYtPndlcF9rZXlfaWRdKTsKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBwcmVhbWJsZSAlcyBydHMgJWQgcmV0cnkgJWQgZnJhZyAlZCAiCisJCSAidHhyYXRlICVzIGF1dGhfbW9kZSAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIHByZWFtYmxlc1twcml2LT5wcmVhbWJsZV90eXBlXSwgcHJpdi0+cnRzX3RocmVzaG9sZCwKKwkJIHByaXYtPnNob3J0X3JldHJ5X2xpbWl0LCBwcml2LT5mcmFnX3RocmVzaG9sZCwKKwkJIHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFXzFNQklUID8gIjFNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV8yTUJJVCA/ICIyTUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfNV81TUJJVCA/ICI1LjVNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV8xMU1CSVQgPyAiMTFNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV9BVVRPID8gImF1dG8iIDogIjxpbnZhbGlkPiIsIHByaXYtPmF1dGhfbW9kZSk7CisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogcG1fbW9kZSAlZCBwbV9wZXJpb2QgJWQgYXV0aF9tb2RlICVzICIKKwkJICJzY2FuX3RpbWVzICVkICVkIHNjYW5fbW9kZSAlcyIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHByaXYtPnBtX21vZGUsIHByaXYtPnBtX3BlcmlvZCwKKwkJIHByaXYtPmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfT1BFTiA/ICJvcGVuIiA6ICJzaGFyZWRfc2VjcmV0IiwKKwkJIHByaXYtPnNjYW5fbWluX3RpbWUsIHByaXYtPnNjYW5fbWF4X3RpbWUsCisJCSBwcml2LT5zY2FuX21vZGUgPT0gU0NBTl9UWVBFX0FDVElWRSA/ICJhY3RpdmUiIDogInBhc3NpdmUiKTsKKworCW1lbXNldChjY2ZnLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfY2FyZF9jb25maWcpKTsKKwljY2ZnLT5wcm9taXNjdW91c19tb2RlID0gMDsKKwljY2ZnLT5zaG9ydF9yZXRyeV9saW1pdCA9IHByaXYtPnNob3J0X3JldHJ5X2xpbWl0OworCisJaWYgKHByaXYtPndlcF9lbmFibGVkKSB7CisJCWlmIChwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0gPiBXRVBfU01BTExfS0VZX0xFTikKKwkJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDI7CisJCWVsc2UKKwkJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDE7CisKKwkJLyogamFsOiBhbHdheXMgZXhjbHVkZSB1bmVuY3J5cHRlZCBpZiBXRVAgaXMgYWN0aXZlICovCisJCWNjZmctPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOworCX0gZWxzZSB7CisJCWNjZmctPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAwOworCQljY2ZnLT5lbmNyeXB0aW9uX3R5cGUgPSAwOworCX0KKworCWNjZmctPnJ0c190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihwcml2LT5ydHNfdGhyZXNob2xkKTsKKwljY2ZnLT5mcmFnbWVudGF0aW9uX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHByaXYtPmZyYWdfdGhyZXNob2xkKTsKKworCW1lbWNweShjY2ZnLT5iYXNpY19yYXRlX3NldCwgaHdfcmF0ZXMsIDQpOworCS8qIGphbDogcmVhbGx5IG5lZWRlZCwgd2UgZG8gYSBzZXRfbWliIGZvciBhdXRvcmF0ZSBsYXRlciA/Pz8gKi8KKwljY2ZnLT5hdXRvX3JhdGVfZmFsbGJhY2sgPSAocHJpdi0+dHhyYXRlID09IFRYX1JBVEVfQVVUTyA/IDEgOiAwKTsKKwljY2ZnLT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwljY2ZnLT5wcml2YWN5X2ludm9rZWQgPSBwcml2LT53ZXBfZW5hYmxlZDsKKwltZW1jcHkoY2NmZy0+Y3VycmVudF9zc2lkLCBwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCWNjZmctPnNzaWRfbGVuID0gcHJpdi0+ZXNzaWRfc2l6ZTsKKworCWNjZmctPndlcF9kZWZhdWx0X2tleV9pZCA9IHByaXYtPndlcF9rZXlfaWQ7CisJbWVtY3B5KGNjZmctPndlcF9kZWZhdWx0X2tleV92YWx1ZSwgcHJpdi0+d2VwX2tleXMsCisJICAgICAgIHNpemVvZihwcml2LT53ZXBfa2V5cykpOworCisJY2NmZy0+c2hvcnRfcHJlYW1ibGUgPSBwcml2LT5wcmVhbWJsZV90eXBlOworCWNjZmctPmJlYWNvbl9wZXJpb2QgPSBjcHVfdG9fbGUxNihwcml2LT5iZWFjb25fcGVyaW9kKTsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU1RBUlRVUCwgJnByaXYtPmNhcmRfY29uZmlnLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGF0NzZfY2FyZF9jb25maWcpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfU1RBUlRVUCk7CisKKwkvKiByZW1vdmUgQlNTSUQgZnJvbSBwcmV2aW91cyBydW4gKi8KKwltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKworCWlmIChhdDc2X3NldF9yYWRpbyhwcml2LCAxKSA9PSAxKQorCQlhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfUkFESU9fT04pOworCisJcmV0ID0gYXQ3Nl9zZXRfcHJlYW1ibGUocHJpdiwgcHJpdi0+cHJlYW1ibGVfdHlwZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9mcmFnKHByaXYsIHByaXYtPmZyYWdfdGhyZXNob2xkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X3J0cyhwcml2LCBwcml2LT5ydHNfdGhyZXNob2xkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X2F1dG9yYXRlX2ZhbGxiYWNrKHByaXYsCisJCQkJCSBwcml2LT50eHJhdGUgPT0gVFhfUkFURV9BVVRPID8gMSA6IDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfcG1fbW9kZShwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChhdDc2X2RlYnVnICYgREJHX01JQikgeworCQlhdDc2X2R1bXBfbWliX21hYyhwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tYWNfYWRkcihwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tYWNfbWdtdChwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tYWNfd2VwKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21kb21haW4ocHJpdik7CisJCWF0NzZfZHVtcF9taWJfcGh5KHByaXYpOworCQlhdDc2X2R1bXBfbWliX2xvY2FsKHByaXYpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBFbmFibGUgb3IgZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfc2V0X3Byb21pc2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19zZXRfcHJvbWlzYyk7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCBwcm9taXNjdW91c19tb2RlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHByaXYtPnByb21pc2MgPyAxIDogMDsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHByb21pc2N1b3VzX21vZGUpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIFN1Ym1pdCBSeCB1cmIgYmFjayB0byB0aGUgZGV2aWNlICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfc3VibWl0X3J4KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfc3VibWl0X3J4KTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisJYXQ3Nl9zdWJtaXRfcnhfdXJiKHByaXYpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKilwYXJhbTsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1cyA9IHsgMCB9OworCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpIHsKKwkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiZGV2aWNlIHVucGx1Z2dlZCIpOworCQlpZiAodXJiKQorCQkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAidXJiIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcHJpdi0+cnhfc2tiIHx8ICFwcml2LT5yeF9za2ItPmRhdGEpCisJCXJldHVybjsKKworCWJ1ZiA9IChzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKilwcml2LT5yeF9za2ItPmRhdGE7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCAmJiB1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkKKwkJCWF0NzZfZGJnKERCR19VUkIsCisJCQkJICIlcyAlczogLSBub256ZXJvIFJ4IGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkJIF9fZnVuY19fLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCQkJIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWF0NzZfZGJnKERCR19SWF9BVE1FTF9IRFIsCisJCSAiJXM6IHJ4IGZyYW1lOiByYXRlICVkIHJzc2kgJWQgbm9pc2UgJWQgbGluayAlZCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGJ1Zi0+cnhfcmF0ZSwgYnVmLT5yc3NpLAorCQkgYnVmLT5ub2lzZV9sZXZlbCwgYnVmLT5saW5rX3F1YWxpdHkpOworCisJc2tiX3B1bGwocHJpdi0+cnhfc2tiLCBBVDc2X1JYX0hEUkxFTik7CisJc2tiX3RyaW0ocHJpdi0+cnhfc2tiLCBsZTE2X3RvX2NwdShidWYtPndsZW5ndGgpKTsKKwlhdDc2X2RiZ19kdW1wKERCR19SWF9EQVRBLCBwcml2LT5yeF9za2ItPmRhdGEsCisJCSAgICAgIHByaXYtPnJ4X3NrYi0+bGVuLCAiUlg6IGxlbj0lZCIsIHByaXYtPnJ4X3NrYi0+bGVuKTsKKworCXJ4X3N0YXR1cy5zaWduYWwgPSBidWYtPnJzc2k7CisJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CisJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19JVl9TVFJJUFBFRDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgImNhbGxpbmcgaWVlZTgwMjExX3J4X2lycXNhZmUoKTogJWQvJWQiLAorCQkgcHJpdi0+cnhfc2tiLT5sZW4sIHByaXYtPnJ4X3NrYi0+ZGF0YV9sZW4pOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBwcml2LT5yeF9za2IsICZyeF9zdGF0dXMpOworCisJLyogVXNlIGEgbmV3IHNrYiBmb3IgdGhlIG5leHQgcmVjZWl2ZSAqLworCXByaXYtPnJ4X3NrYiA9IE5VTEw7CisKKwlhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7Cit9CisKKy8qIExvYWQgZmlybXdhcmUgaW50byBrZXJuZWwgbWVtb3J5IGFuZCBwYXJzZSBpdCAqLworc3RhdGljIHN0cnVjdCBmd2VudHJ5ICphdDc2X2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCSAgZW51bSBib2FyZF90eXBlIGJvYXJkX3R5cGUpCit7CisJaW50IHJldDsKKwljaGFyICpzdHI7CisJc3RydWN0IGF0NzZfZndfaGVhZGVyICpmd2g7CisJc3RydWN0IGZ3ZW50cnkgKmZ3ZSA9ICZmaXJtd2FyZXNbYm9hcmRfdHlwZV07CisKKwltdXRleF9sb2NrKCZmd19tdXRleCk7CisKKwlpZiAoZndlLT5sb2FkZWQpIHsKKwkJYXQ3Nl9kYmcoREJHX0ZXLCAicmUtdXNpbmcgcHJldmlvdXNseSBsb2FkZWQgZnciKTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19GVywgImRvd25sb2FkaW5nIGZpcm13YXJlICVzIiwgZndlLT5md25hbWUpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3ZS0+ZncsIGZ3ZS0+ZnduYW1lLCAmdWRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LCAiZmlybXdhcmUgJXMgbm90IGZvdW5kIVxuIiwKKwkJCSAgIGZ3ZS0+ZnduYW1lKTsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJ5b3UgbWF5IG5lZWQgdG8gZG93bmxvYWQgdGhlIGZpcm13YXJlIGZyb20gIgorCQkJICAgImh0dHA6Ly9kZXZlbG9wZXIuYmVybGlvcy5kZS9wcm9qZWN0cy9hdDc2YzUwM2EvXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19GVywgImdvdCBpdC4iKTsKKwlmd2ggPSAoc3RydWN0IGF0NzZfZndfaGVhZGVyICopKGZ3ZS0+ZnctPmRhdGEpOworCisJaWYgKGZ3ZS0+ZnctPnNpemUgPD0gc2l6ZW9mKCpmd2gpKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZmlybXdhcmUgaXMgdG9vIHNob3J0ICgweCV6eClcbiIsIGZ3ZS0+ZnctPnNpemUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQ1JDIGN1cnJlbnRseSBub3QgY2hlY2tlZCAqLworCWZ3ZS0+Ym9hcmRfdHlwZSA9IGxlMzJfdG9fY3B1KGZ3aC0+Ym9hcmRfdHlwZSk7CisJaWYgKGZ3ZS0+Ym9hcmRfdHlwZSAhPSBib2FyZF90eXBlKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiYm9hcmQgdHlwZSBtaXNtYXRjaCwgcmVxdWVzdGVkICV1LCBnb3QgJXVcbiIsCisJCQkgICBib2FyZF90eXBlLCBmd2UtPmJvYXJkX3R5cGUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZndlLT5md192ZXJzaW9uLm1ham9yID0gZndoLT5tYWpvcjsKKwlmd2UtPmZ3X3ZlcnNpb24ubWlub3IgPSBmd2gtPm1pbm9yOworCWZ3ZS0+ZndfdmVyc2lvbi5wYXRjaCA9IGZ3aC0+cGF0Y2g7CisJZndlLT5md192ZXJzaW9uLmJ1aWxkID0gZndoLT5idWlsZDsKKworCXN0ciA9IChjaGFyICopZndoICsgbGUzMl90b19jcHUoZndoLT5zdHJfb2Zmc2V0KTsKKwlmd2UtPmludGZ3ID0gKHU4ICopZndoICsgbGUzMl90b19jcHUoZndoLT5pbnRfZndfb2Zmc2V0KTsKKwlmd2UtPmludGZ3X3NpemUgPSBsZTMyX3RvX2NwdShmd2gtPmludF9md19sZW4pOworCWZ3ZS0+ZXh0ZncgPSAodTggKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19vZmZzZXQpOworCWZ3ZS0+ZXh0Zndfc2l6ZSA9IGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X2xlbik7CisKKwlmd2UtPmxvYWRlZCA9IDE7CisKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZ1ZGV2LT5kZXYsCisJCSAgICJ1c2luZyBmaXJtd2FyZSAlcyAodmVyc2lvbiAlZC4lZC4lZC0lZClcbiIsCisJCSAgIGZ3ZS0+ZnduYW1lLCBmd2gtPm1ham9yLCBmd2gtPm1pbm9yLCBmd2gtPnBhdGNoLCBmd2gtPmJ1aWxkKTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImJvYXJkICV1LCBpbnQgJWQ6JWQsIGV4dCAlZDolZCIsIGJvYXJkX3R5cGUsCisJCSBsZTMyX3RvX2NwdShmd2gtPmludF9md19vZmZzZXQpLCBsZTMyX3RvX2NwdShmd2gtPmludF9md19sZW4pLAorCQkgbGUzMl90b19jcHUoZndoLT5leHRfZndfb2Zmc2V0KSwgbGUzMl90b19jcHUoZndoLT5leHRfZndfbGVuKSk7CisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiZmlybXdhcmUgaWQgJXMiLCBzdHIpOworCitleGl0OgorCW11dGV4X3VubG9jaygmZndfbXV0ZXgpOworCisJaWYgKGZ3ZS0+bG9hZGVkKQorCQlyZXR1cm4gZndlOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfbWFjODAyMTFfdHhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eF9za2IpOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQlicmVhazsKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwkJLyogZmFpbCwgdXJiIGhhcyBiZWVuIHVubGlua2VkICovCisJCS8qIEZJWE1FOiBhZGQgZXJyb3IgbWVzc2FnZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdDc2X2RiZyhEQkdfVVJCLCAiJXMgLSBub256ZXJvIHR4IHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCW1lbXNldCgmaW5mby0+c3RhdHVzLCAwLCBzaXplb2YoaW5mby0+c3RhdHVzKSk7CisKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHByaXYtPnR4X3NrYik7CisKKwlwcml2LT50eF9za2IgPSBOVUxMOworCisJaWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtPmh3KTsKK30KKworc3RhdGljIGludCBhdDc2X21hYzgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKnR4X2J1ZmZlciA9IHByaXYtPmJ1bGtfb3V0X2J1ZmZlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJaW50IHBhZGRpbmcsIHN1Ym1pdF9sZW4sIHJldDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlpZiAocHJpdi0+dHhfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIGNhbGxlZCB3aGlsZSB0eCB1cmIgaXMgcGVuZGluZ1xuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgX19mdW5jX18pOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKworCWF0NzZfbGVkdHJpZ190eF9hY3Rpdml0eSgpOwkvKiB0ZWxsIGxlZHRyaWdnZXIgd2Ugc2VuZCBhIHBhY2tldCAqLworCisJV0FSTl9PTihwcml2LT50eF9za2IgIT0gTlVMTCk7CisKKwlwcml2LT50eF9za2IgPSBza2I7CisJcGFkZGluZyA9IGF0NzZfY2FsY19wYWRkaW5nKHNrYi0+bGVuKTsKKwlzdWJtaXRfbGVuID0gQVQ3Nl9UWF9IRFJMRU4gKyBza2ItPmxlbiArIHBhZGRpbmc7CisKKwkvKiBzZXR1cCAnQXRtZWwnIGhlYWRlciAqLworCW1lbXNldCh0eF9idWZmZXIsIDAsIHNpemVvZigqdHhfYnVmZmVyKSk7CisJdHhfYnVmZmVyLT5wYWRkaW5nID0gcGFkZGluZzsKKwl0eF9idWZmZXItPndsZW5ndGggPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJdHhfYnVmZmVyLT50eF9yYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBpbmZvKS0+aHdfdmFsdWU7CisJbWVtc2V0KHR4X2J1ZmZlci0+cmVzZXJ2ZWQsIDAsIHNpemVvZih0eF9idWZmZXItPnJlc2VydmVkKSk7CisJbWVtY3B5KHR4X2J1ZmZlci0+cGFja2V0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCWF0NzZfZGJnKERCR19UWF9EQVRBLCAiJXMgdHg6IHdsZW4gMHgleCBwYWQgMHgleCByYXRlICVkIGhkciIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGxlMTZfdG9fY3B1KHR4X2J1ZmZlci0+d2xlbmd0aCksCisJCSB0eF9idWZmZXItPnBhZGRpbmcsIHR4X2J1ZmZlci0+dHhfcmF0ZSk7CisKKwkvKiBzZW5kIHN0dWZmICovCisJYXQ3Nl9kYmdfZHVtcChEQkdfVFhfREFUQV9DT05URU5ULCB0eF9idWZmZXIsIHN1Ym1pdF9sZW4sCisJCSAgICAgICIlcygpOiB0eF9idWZmZXIgJWQgYnl0ZXM6IiwgX19mdW5jX18sIHN1Ym1pdF9sZW4pOworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnR4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+dHhfcGlwZSwgdHhfYnVmZmVyLAorCQkJICBzdWJtaXRfbGVuLCBhdDc2X21hYzgwMjExX3R4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT50eF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gdHggc3VibWl0IHVyYjogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogLUVJTlZBTDogdHggdXJiICVwIGhjcHJpdiAlcCBjb21wbGV0ZSAlcFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHByaXYtPnR4X3VyYiwKKwkJCSAgICAgICBwcml2LT50eF91cmItPmhjcHJpdiwgcHJpdi0+dHhfdXJiLT5jb21wbGV0ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9tYWM4MDIxMV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcmV0ID0gYXQ3Nl9zdWJtaXRfcnhfdXJiKHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9wZW46IHN1Ym1pdF9yeF91cmIgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlhdDc2X3N0YXJ0dXBfZGV2aWNlKHByaXYpOworCisJYXQ3Nl9zdGFydF9tb25pdG9yKHByaXYpOworCitlcnJvcjoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9tYWM4MDIxMV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJaWYgKCFwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKSB7CisJCS8qIFdlIGFyZSBjYWxsZWQgYnkgImlmY29uZmlnIGV0aFggZG93biIsIG5vdCBiZWNhdXNlIHRoZQorCQkgKiBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlLiAqLworCQlhdDc2X3NldF9yYWRpbyhwcml2LCAwKTsKKworCQkvKiBXZSB1bmxpbmsgcnhfdXJiIGJlY2F1c2UgYXQ3Nl9vcGVuKCkgcmUtc3VibWl0cyBpdC4KKwkJICogSWYgdW5wbHVnZ2VkLCBhdDc2X2RlbGV0ZV9kZXZpY2UoKSB0YWtlcyBjYXJlIG9mIGl0LiAqLworCQl1c2Jfa2lsbF91cmIocHJpdi0+cnhfdXJiKTsKKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQgPSAwOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBleGl0OworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IGF0NzZfam9pbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3JlcV9qb2luIGpvaW47CisJaW50IHJldDsKKworCW1lbXNldCgmam9pbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9qb2luKSk7CisJbWVtY3B5KGpvaW4uZXNzaWQsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9zaXplKTsKKwlqb2luLmVzc2lkX3NpemUgPSBwcml2LT5lc3NpZF9zaXplOworCW1lbWNweShqb2luLmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCWpvaW4uYnNzX3R5cGUgPSBJTkZSQVNUUlVDVFVSRV9NT0RFOworCWpvaW4uY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJam9pbi50aW1lb3V0ID0gY3B1X3RvX2xlMTYoMjAwMCk7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogc2VuZGluZyBDTURfSk9JTiIsIF9fZnVuY19fKTsKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX0pPSU4sICZqb2luLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfc2V0X2NhcmRfY29tbWFuZCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfSk9JTik7CisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXM6IENNRF9KT0lOIHJldHVybmVkOiAweCUwMngiLCBfX2Z1bmNfXywgcmV0KTsKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl93YWl0X2NvbXBsZXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJYXQ3Nl9zZXRfcG1fbW9kZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R3b3JrX2h3X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgZHdvcmtfaHdfc2Nhbi53b3JrKTsKKwlpbnQgcmV0OworCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlyZXQgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIENNRF9TQ0FOKTsKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogQ01EX1NDQU4gc3RhdHVzIDB4JTAyeCIsIF9fZnVuY19fLCByZXQpOworCisJLyogRklYTUU6IGFkZCBtYXhpbXVtIHRpbWUgZm9yIHNjYW4gdG8gY29tcGxldGUgKi8KKworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPmR3b3JrX2h3X3NjYW4sCisJCQkJICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwkJZ290byBleGl0OworCX0KKworCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odywgZmFsc2UpOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpKQorCQlhdDc2X2pvaW4ocHJpdik7CisKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworc3RhdGljIGludCBhdDc2X2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBhdDc2X3JlcV9zY2FuIHNjYW47CisJdTggKnNzaWQgPSBOVUxMOworCWludCByZXQsIGxlbiA9IDA7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiIsIF9fZnVuY19fKTsKKworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX3NjYW4pKTsKKwltZW1zZXQoc2Nhbi5ic3NpZCwgMHhGRiwgRVRIX0FMRU4pOworCisJaWYgKHJlcS0+bl9zc2lkcykgeworCQlzY2FuLnNjYW5fdHlwZSA9IFNDQU5fVFlQRV9BQ1RJVkU7CisJCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7CisJCWxlbiA9IHJlcS0+c3NpZHNbMF0uc3NpZF9sZW47CisJfSBlbHNlIHsKKwkJc2Nhbi5zY2FuX3R5cGUgPSBTQ0FOX1RZUEVfUEFTU0lWRTsKKwl9CisKKwlpZiAobGVuKSB7CisJCW1lbWNweShzY2FuLmVzc2lkLCBzc2lkLCBsZW4pOworCQlzY2FuLmVzc2lkX3NpemUgPSBsZW47CisJfQorCisJc2Nhbi5taW5fY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9taW5fdGltZSk7CisJc2Nhbi5tYXhfY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9tYXhfdGltZSk7CisJc2Nhbi5wcm9iZV9kZWxheSA9IGNwdV90b19sZTE2KHByaXYtPnNjYW5fbWluX3RpbWUgKiAxMDAwKTsKKwlzY2FuLmludGVybmF0aW9uYWxfc2NhbiA9IDA7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogc2VuZGluZyBDTURfU0NBTiIsIF9fZnVuY19fKTsKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NDQU4sICZzY2FuLCBzaXplb2Yoc2NhbikpOworCisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJDTURfU0NBTiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKKwkJCSAgIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IGNoYW5uZWwgJWQgcmFkaW8gJWQiLAorCQkgX19mdW5jX18sIGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlLAorCQkgaHctPmNvbmYucmFkaW9fZW5hYmxlZCk7CisJYXQ3Nl9kYmdfZHVtcChEQkdfTUFDODAyMTEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTiwgImJzc2lkOiIpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXByaXYtPmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZTsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSkKKwkJYXQ3Nl9qb2luKHByaXYpOworCWVsc2UKKwkJYXQ3Nl9zdGFydF9tb25pdG9yKHByaXYpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKToiLCBfX2Z1bmNfXyk7CisJYXQ3Nl9kYmdfZHVtcChEQkdfTUFDODAyMTEsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTiwgImJzc2lkOiIpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCW1lbWNweShwcml2LT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSkKKwkJLyogbWFjODAyMTEgaXMgam9pbmluZyBhIGJzcyAqLworCQlhdDc2X2pvaW4ocHJpdik7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogbXVzdCBiZSBhdG9taWMgKi8KK3N0YXRpYyB2b2lkIGF0NzZfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgaW50IG1jX2NvdW50LAorCQkJCSAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCBmbGFnczsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IGNoYW5nZWRfZmxhZ3M9MHglMDh4ICIKKwkJICJ0b3RhbF9mbGFncz0weCUwOHggbWNfY291bnQ9JWQiLAorCQkgX19mdW5jX18sIGNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncywgbWNfY291bnQpOworCisJZmxhZ3MgPSBjaGFuZ2VkX2ZsYWdzICYgQVQ3Nl9TVVBQT1JURURfRklMVEVSUzsKKwkqdG90YWxfZmxhZ3MgPSBBVDc2X1NVUFBPUlRFRF9GSUxURVJTOworCisJLyogQmFpbCBvdXQgYWZ0ZXIgdXBkYXRpbmcgZmxhZ3MgdG8gcHJldmVudCBhIFdBUk5fT04gaW4gbWFjODAyMTEuICovCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpCisJCXJldHVybjsKKworCS8qIEZJWE1FOiBhY2Nlc3MgdG8gcHJpdi0+cHJvbWlzYyBzaG91bGQgYmUgcHJvdGVjdGVkIHdpdGgKKwkgKiBwcml2LT5tdHgsIGJ1dCBpdCdzIGltcG9zc2libGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlCisJICogYXRvbWljICovCisKKwlpZiAoZmxhZ3MgJiYgIXByaXYtPnByb21pc2MpIHsKKwkJLyogbWFjODAyMTEgd2FudHMgdXMgdG8gZW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KKwkJcHJpdi0+cHJvbWlzYyA9IDE7CisJfSBlbHNlIGlmICghZmxhZ3MgJiYgcHJpdi0+cHJvbWlzYykgeworCQkvKiB3ZSBuZWVkIHRvIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworCQlwcml2LT5wcm9taXNjID0gMDsKKwl9IGVsc2UKKwkJcmV0dXJuOworCisJcXVldWVfd29yayhody0+d29ya3F1ZXVlLCAmcHJpdi0+d29ya19zZXRfcHJvbWlzYyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKKwkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJaW50IGk7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiBjbWQgJWQga2V5LT5hbGcgJWQga2V5LT5rZXlpZHggJWQgIgorCQkgImtleS0+a2V5bGVuICVkIiwKKwkJIF9fZnVuY19fLCBjbWQsIGtleS0+YWxnLCBrZXktPmtleWlkeCwga2V5LT5rZXlsZW4pOworCisJaWYgKGtleS0+YWxnICE9IEFMR19XRVApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWtleS0+aHdfa2V5X2lkeCA9IGtleS0+a2V5aWR4OworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTRVRfS0VZOgorCQltZW1jcHkocHJpdi0+d2VwX2tleXNba2V5LT5rZXlpZHhdLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCQlwcml2LT53ZXBfa2V5c19sZW5ba2V5LT5rZXlpZHhdID0ga2V5LT5rZXlsZW47CisKKwkJLyogRklYTUU6IGZpbmQgb3V0IGhvdyB0byBkbyB0aGlzIHByb3Blcmx5ICovCisJCXByaXYtPndlcF9rZXlfaWQgPSBrZXktPmtleWlkeDsKKworCQlicmVhazsKKwljYXNlIERJU0FCTEVfS0VZOgorCWRlZmF1bHQ6CisJCXByaXYtPndlcF9rZXlzX2xlbltrZXktPmtleWlkeF0gPSAwOworCQlicmVhazsKKwl9CisKKwlwcml2LT53ZXBfZW5hYmxlZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgeworCQlpZiAocHJpdi0+d2VwX2tleXNfbGVuW2ldICE9IDApCisJCQlwcml2LT53ZXBfZW5hYmxlZCA9IDE7CisJfQorCisJYXQ3Nl9zdGFydHVwX2RldmljZShwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYXQ3Nl9vcHMgPSB7CisJLnR4ID0gYXQ3Nl9tYWM4MDIxMV90eCwKKwkuYWRkX2ludGVyZmFjZSA9IGF0NzZfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZSA9IGF0NzZfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnID0gYXQ3Nl9jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UgPSBhdDc2X2NvbmZpZ19pbnRlcmZhY2UsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSBhdDc2X2NvbmZpZ3VyZV9maWx0ZXIsCisJLnN0YXJ0ID0gYXQ3Nl9tYWM4MDIxMV9zdGFydCwKKwkuc3RvcCA9IGF0NzZfbWFjODAyMTFfc3RvcCwKKwkuaHdfc2NhbiA9IGF0NzZfaHdfc2NhbiwKKwkuc2V0X2tleSA9IGF0NzZfc2V0X2tleSwKK307CisKKy8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLworc3RhdGljIHN0cnVjdCBhdDc2X3ByaXYgKmF0NzZfYWxsb2NfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdDc2X3ByaXYpLCAmYXQ3Nl9vcHMpOworCWlmICghaHcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IGNvdWxkIG5vdCByZWdpc3RlciIKKwkJICAgICAgICIgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisKKwlwcml2LT51ZGV2ID0gdWRldjsKKworCW11dGV4X2luaXQoJnByaXYtPm10eCk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX3NldF9wcm9taXNjLCBhdDc2X3dvcmtfc2V0X3Byb21pc2MpOworCUlOSVRfV09SSygmcHJpdi0+d29ya19zdWJtaXRfcngsIGF0NzZfd29ya19zdWJtaXRfcngpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29ya19od19zY2FuLCBhdDc2X2R3b3JrX2h3X3NjYW4pOworCisJdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBhdDc2X3J4X3Rhc2tsZXQsIDApOworCisJcHJpdi0+cG1fbW9kZSA9IEFUNzZfUE1fT0ZGOworCXByaXYtPnBtX3BlcmlvZCA9IDA7CisKKwkvKiB1bml0IHVzICovCisJcHJpdi0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwMDA7CisKKwlyZXR1cm4gcHJpdjsKK30KKworc3RhdGljIGludCBhdDc2X2FsbG9jX3VyYnMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludCwgKmVwX2luLCAqZXBfb3V0OworCWludCBpOworCWludCBidWZmZXJfc2l6ZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRU5URVIiLCBfX2Z1bmNfXyk7CisKKwlhdDc2X2RiZyhEQkdfVVJCLCAiJXM6IE51bUVuZHBvaW50cyAlZCAiLCBfX2Z1bmNfXywKKwkJIGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJOdW1FbmRwb2ludHMpOworCisJZXBfaW4gPSBOVUxMOworCWVwX291dCA9IE5VTEw7CisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJYXQ3Nl9kYmcoREJHX1VSQiwgIiVzOiAlZC4gZW5kcG9pbnQ6IGFkZHIgMHgleCBhdHRyIDB4JXgiLAorCQkJIF9fZnVuY19fLCBpLCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcywKKwkJCSBlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzKTsKKworCQlpZiAoIWVwX2luICYmIHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkKKwkJCWVwX2luID0gZW5kcG9pbnQ7CisKKwkJaWYgKCFlcF9vdXQgJiYgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KGVuZHBvaW50KSkKKwkJCWVwX291dCA9IGVuZHBvaW50OworCX0KKworCWlmICghZXBfaW4gfHwgIWVwX291dCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiYnVsayBlbmRwb2ludHMgbWlzc2luZ1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcHJpdi0+cnhfcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBlcF9pbi0+YkVuZHBvaW50QWRkcmVzcyk7CisJcHJpdi0+dHhfcGlwZSA9IHVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBlcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MpOworCisJcHJpdi0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlwcml2LT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+cnhfdXJiIHx8ICFwcml2LT50eF91cmIpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFVSQlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJ1ZmZlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdDc2X3R4X2J1ZmZlcikgKyBNQVhfUEFERElOR19TSVpFOworCXByaXYtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+YnVsa19vdXRfYnVmZmVyKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJjYW5ub3QgYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVYSVQiLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhdDc2X3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSBUWF9SQVRFXzFNQklULCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gVFhfUkFURV8yTUJJVCwgfSwKKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IFRYX1JBVEVfNV81TUJJVCwgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSBUWF9SQVRFXzExTUJJVCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXQ3Nl9jaGFubmVsc1tdID0geworCXsgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQxNywgLmh3X3ZhbHVlID0gMiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzMiwgLmh3X3ZhbHVlID0gNSB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzNywgLmh3X3ZhbHVlID0gNiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0NywgLmh3X3ZhbHVlID0gOCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5od192YWx1ZSA9IDExIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDY3LCAuaHdfdmFsdWUgPSAxMiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0ODQsIC5od192YWx1ZSA9IDE0IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGF0NzZfc3VwcG9ydGVkX2JhbmQgPSB7CisJLmNoYW5uZWxzID0gYXQ3Nl9jaGFubmVscywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoYXQ3Nl9jaGFubmVscyksCisJLmJpdHJhdGVzID0gYXQ3Nl9yYXRlcywKKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoYXQ3Nl9yYXRlcyksCit9OworCisvKiBSZWdpc3RlciBuZXR3b3JrIGRldmljZSBhbmQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9pbml0X25ld19kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCWludCByZXQ7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgKi8KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIlVTQiBpbnRlcmZhY2U6ICVkIGVuZHBvaW50cyIsCisJCSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMpOworCisJcmV0ID0gYXQ3Nl9hbGxvY191cmJzKHByaXYsIGludGVyZmFjZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXhpdDsKKworCS8qIE1BQyBhZGRyZXNzICovCisJcmV0ID0gYXQ3Nl9nZXRfaHdfY29uZmlnKHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJjYW5ub3QgZ2V0IE1BQyBhZGRyZXNzXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCXByaXYtPmRvbWFpbiA9IGF0NzZfZ2V0X3JlZ19kb21haW4ocHJpdi0+cmVndWxhdG9yeV9kb21haW4pOworCisJcHJpdi0+Y2hhbm5lbCA9IERFRl9DSEFOTkVMOworCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOworCXByaXYtPnJ0c190aHJlc2hvbGQgPSBERUZfUlRTX1RIUkVTSE9MRDsKKwlwcml2LT5mcmFnX3RocmVzaG9sZCA9IERFRl9GUkFHX1RIUkVTSE9MRDsKKwlwcml2LT5zaG9ydF9yZXRyeV9saW1pdCA9IERFRl9TSE9SVF9SRVRSWV9MSU1JVDsKKwlwcml2LT50eHJhdGUgPSBUWF9SQVRFX0FVVE87CisJcHJpdi0+cHJlYW1ibGVfdHlwZSA9IFBSRUFNQkxFX1RZUEVfTE9ORzsKKwlwcml2LT5iZWFjb25fcGVyaW9kID0gMTAwOworCXByaXYtPmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9PUEVOOworCXByaXYtPnNjYW5fbWluX3RpbWUgPSBERUZfU0NBTl9NSU5fVElNRTsKKwlwcml2LT5zY2FuX21heF90aW1lID0gREVGX1NDQU5fTUFYX1RJTUU7CisJcHJpdi0+c2Nhbl9tb2RlID0gU0NBTl9UWVBFX0FDVElWRTsKKwlwcml2LT5kZXZpY2VfdW5wbHVnZ2VkID0gMDsKKworCS8qIG1hYzgwMjExIGluaXRpYWxpc2F0aW9uICovCisJcHJpdi0+aHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CisJcHJpdi0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZhdDc2X3N1cHBvcnRlZF9iYW5kOworCXByaXYtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkJICBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQzsKKwlwcml2LT5ody0+bWF4X3NpZ25hbCA9IDEwMDsKKworCVNFVF9JRUVFODAyMTFfREVWKHByaXYtPmh3LCAmaW50ZXJmYWNlLT5kZXYpOworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBwcml2LT5tYWNfYWRkcik7CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgcmVnaXN0ZXIgbWFjODAyMTEgaHcgKHN0YXR1cyAlZCkhXG4iLAorCQkgICAgICAgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVTQiAlcywgTUFDICVzLCBmaXJtd2FyZSAlZC4lZC4lZC0lZFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCSAgICAgICBkZXZfbmFtZSgmaW50ZXJmYWNlLT5kZXYpLCBtYWMyc3RyKHByaXYtPm1hY19hZGRyKSwKKwkgICAgICAgcHJpdi0+ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0+ZndfdmVyc2lvbi5taW5vciwKKwkgICAgICAgcHJpdi0+ZndfdmVyc2lvbi5wYXRjaCwgcHJpdi0+ZndfdmVyc2lvbi5idWlsZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ3VsYXRvcnkgZG9tYWluIDB4JTAyeDogJXNcbiIsCisJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkgICAgICAgcHJpdi0+cmVndWxhdG9yeV9kb21haW4sIHByaXYtPmRvbWFpbi0+bmFtZSk7CisKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kZWxldGVfZGV2aWNlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRU5URVIiLCBfX2Z1bmNfXyk7CisKKwkvKiBUaGUgZGV2aWNlIGlzIGdvbmUsIGRvbid0IGJvdGhlciB0dXJuaW5nIGl0IG9mZiAqLworCXByaXYtPmRldmljZV91bnBsdWdnZWQgPSAxOworCisJdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKKworCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKSB7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2h3X3NjYW4pOworCQlmbHVzaF93b3JrcXVldWUocHJpdi0+aHctPndvcmtxdWV1ZSk7CisJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKwl9CisKKwlpZiAocHJpdi0+dHhfdXJiKSB7CisJCXVzYl9raWxsX3VyYihwcml2LT50eF91cmIpOworCQl1c2JfZnJlZV91cmIocHJpdi0+dHhfdXJiKTsKKwl9CisJaWYgKHByaXYtPnJ4X3VyYikgeworCQl1c2Jfa2lsbF91cmIocHJpdi0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHByaXYtPnJ4X3VyYik7CisJfQorCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogdW5saW5rZWQgdXJicyIsIF9fZnVuY19fKTsKKworCWtmcmVlKHByaXYtPmJ1bGtfb3V0X2J1ZmZlcik7CisKKwlkZWxfdGltZXJfc3luYygmbGVkdHJpZ190eF90aW1lcik7CisKKwlpZiAocHJpdi0+cnhfc2tiKQorCQlrZnJlZV9za2IocHJpdi0+cnhfc2tiKTsKKworCXVzYl9wdXRfZGV2KHByaXYtPnVkZXYpOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogYmVmb3JlIGZyZWVpbmcgcHJpdi9pZWVlODAyMTFfaHciLAorCQkgX19mdW5jX18pOworCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVYSVQiLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2OworCXN0cnVjdCBmd2VudHJ5ICpmd2U7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJaW50IG9wX21vZGU7CisJaW50IG5lZWRfZXh0X2Z3ID0gMDsKKwlzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24gZnd2OworCWludCBib2FyZF90eXBlID0gKGludClpZC0+ZHJpdmVyX2luZm87CisKKwl1ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKworCS8qIExvYWQgZmlybXdhcmUgaW50byBrZXJuZWwgbWVtb3J5ICovCisJZndlID0gYXQ3Nl9sb2FkX2Zpcm13YXJlKHVkZXYsIGJvYXJkX3R5cGUpOworCWlmICghZndlKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJb3BfbW9kZSA9IGF0NzZfZ2V0X29wX21vZGUodWRldik7CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJvcG1vZGUgJWQiLCBvcF9tb2RlKTsKKworCS8qIHdlIGdldCBPUE1PREVfTk9ORSB3aXRoIDIuNC4yMywgU01DMjY2MlctQVIgPz8/CisJICAgd2UgZ2V0IDIwNCB3aXRoIDIuNC4yMywgRmliZXJsaW5lIEZMLVdMMjQwdSAoNTA1QStSRk1EMjk1OCkgPz8/ICovCisKKwlpZiAob3BfbW9kZSA9PSBPUE1PREVfSFdfQ09ORklHX01PREUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBoYW5kbGUgYSBkZXZpY2UgaW4gSFdfQ09ORklHX01PREVcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSF9GTEFTSAorCSAgICAmJiBvcF9tb2RlICE9IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhPVVRfRkxBU0gpIHsKKwkJLyogZG93bmxvYWQgaW50ZXJuYWwgZmlybXdhcmUgcGFydCAqLworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBpbnRlcm5hbCBmaXJtd2FyZVxuIik7CisJCXJldCA9IGF0NzZfbG9hZF9pbnRlcm5hbF9mdyh1ZGV2LCBmd2UpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJCSAgICJlcnJvciAlZCBkb3dubG9hZGluZyBpbnRlcm5hbCBmaXJtd2FyZVxuIiwKKwkJCQkgICByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQl1c2JfcHV0X2Rldih1ZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBJbnRlcm5hbCBmaXJtd2FyZSBhbHJlYWR5IGluc2lkZSB0aGUgZGV2aWNlLiAgR2V0IGZpcm13YXJlCisJICogdmVyc2lvbiB0byB0ZXN0IGlmIGV4dGVybmFsIGZpcm13YXJlIGlzIGxvYWRlZC4KKwkgKiBUaGlzIHdvcmtzIG9ubHkgZm9yIG5ld2VyIGZpcm13YXJlLCBlLmcuIHRoZSBJbnRlcnNpbCAwLjkwLngKKwkgKiBzYXlzICJjb250cm9sIHRpbWVvdXQgb24gZXAwaW4iIGFuZCBzdWJzZXF1ZW50CisJICogYXQ3Nl9nZXRfb3BfbW9kZSgpIGZhaWwgdG9vIDotKCAqLworCisJLyogaWYgdmVyc2lvbiA+PSAwLjEwMC54Lnkgb3IgZGV2aWNlIHdpdGggYnVpbHQtaW4gZmxhc2ggd2UgY2FuCisJICogcXVlcnkgdGhlIGRldmljZSBmb3IgdGhlIGZ3IHZlcnNpb24gKi8KKwlpZiAoKGZ3ZS0+ZndfdmVyc2lvbi5tYWpvciA+IDAgfHwgZndlLT5md192ZXJzaW9uLm1pbm9yID49IDEwMCkKKwkgICAgfHwgKG9wX21vZGUgPT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSF9GTEFTSCkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfbWliKHVkZXYsIE1JQl9GV19WRVJTSU9OLCAmZnd2LCBzaXplb2YoZnd2KSk7CisJCWlmIChyZXQgPCAwIHx8IChmd3YubWFqb3IgfCBmd3YubWlub3IpID09IDApCisJCQluZWVkX2V4dF9mdyA9IDE7CisJfSBlbHNlCisJCS8qIE5vIHdheSB0byBjaGVjayBmaXJtd2FyZSB2ZXJzaW9uLCByZWxvYWQgdG8gYmUgc3VyZSAqLworCQluZWVkX2V4dF9mdyA9IDE7CisKKwlpZiAobmVlZF9leHRfZncpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgZXh0ZXJuYWwgZmlybXdhcmVcbiIpOworCisJCXJldCA9IGF0NzZfbG9hZF9leHRlcm5hbF9mdyh1ZGV2LCBmd2UpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKworCQkvKiBSZS1jaGVjayBmaXJtd2FyZSB2ZXJzaW9uICovCisJCXJldCA9IGF0NzZfZ2V0X21pYih1ZGV2LCBNSUJfRldfVkVSU0lPTiwgJmZ3diwgc2l6ZW9mKGZ3dikpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJCSAgICJlcnJvciAlZCBnZXR0aW5nIGZpcm13YXJlIHZlcnNpb25cbiIsIHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJcHJpdiA9IGF0NzZfYWxsb2NfbmV3X2RldmljZSh1ZGV2KTsKKwlpZiAoIXByaXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgcHJpdik7CisKKwltZW1jcHkoJnByaXYtPmZ3X3ZlcnNpb24sICZmd3YsIHNpemVvZihzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24pKTsKKwlwcml2LT5ib2FyZF90eXBlID0gYm9hcmRfdHlwZTsKKworCXJldCA9IGF0NzZfaW5pdF9uZXdfZGV2aWNlKHByaXYsIGludGVyZmFjZSk7CisJaWYgKHJldCA8IDApCisJCWF0NzZfZGVsZXRlX2RldmljZShwcml2KTsKKworCXJldHVybiByZXQ7CisKK2Vycm9yOgorCXVzYl9wdXRfZGV2KHVkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisKKwlwcml2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCS8qIERpc2Nvbm5lY3QgYWZ0ZXIgbG9hZGluZyBpbnRlcm5hbCBmaXJtd2FyZSAqLworCWlmICghcHJpdikKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRpc2Nvbm5lY3RpbmdcbiIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJYXQ3Nl9kZWxldGVfZGV2aWNlKHByaXYpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaW50ZXJmYWNlLT5kZXYsICJkaXNjb25uZWN0ZWRcbiIpOworfQorCisvKiBTdHJ1Y3R1cmUgZm9yIHJlZ2lzdGVyaW5nIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdDc2X2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5wcm9iZSA9IGF0NzZfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBhdDc2X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gZGV2X3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXQ3Nl9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiIGxvYWRpbmdcbiIpOworCisJbXV0ZXhfaW5pdCgmZndfbXV0ZXgpOworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYXQ3Nl9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJICAgICAgICI6IHVzYl9yZWdpc3RlciBmYWlsZWQgKHN0YXR1cyAlZClcbiIsIHJlc3VsdCk7CisKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImF0NzZfdXNiLXR4IiwgJmxlZHRyaWdfdHgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdDc2X21vZF9leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiIHVubG9hZGluZ1xuIik7CisJdXNiX2RlcmVnaXN0ZXIoJmF0NzZfZHJpdmVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaXJtd2FyZXMpOyBpKyspIHsKKwkJaWYgKGZpcm13YXJlc1tpXS5mdykKKwkJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmVzW2ldLmZ3KTsKKwl9CisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUobGVkdHJpZ190eCk7Cit9CisKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXQ3Nl9kZWJ1ZywgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIGxldmVsIik7CisKK21vZHVsZV9pbml0KGF0NzZfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoYXQ3Nl9tb2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk9saXZlciBLdXJ0aCA8b2t1QG1hc3FtYWlsLmN4PiIpOworTU9EVUxFX0FVVEhPUigiSm9lcmcgQWxiZXJ0IDxqb2VyZy5hbGJlcnRAZ214LmRlPiIpOworTU9EVUxFX0FVVEhPUigiQWxleCA8YWxleEBmb29nb2QuY29tPiIpOworTU9EVUxFX0FVVEhPUigiTmljayBKb25lcyIpOworTU9EVUxFX0FVVEhPUigiQmFsaW50IFNlZWJlciA8bjBfNXA0bV9wMTM0NTNAaG90bWFpbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiIpOworTU9EVUxFX0FVVEhPUigiR3VpZG8gR3VlbnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9AaWtpLmZpPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjNWNjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5oCkBAIC0wLDAgKzEsNDYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgT2xpdmVyIEt1cnRoCisgKgkgICAgIChjKSAyMDAzLDIwMDQgSm9lcmcgQWxiZXJ0IDxqb2VyZy5hbGJlcnRAZ214LmRlPgorICoJICAgICAoYykgMjAwNyBHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBkcml2ZXIgd2FzIGJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gdGhlIFNvdXJjZWZvcmdlIGRyaXZlcgorICogcmVsZWFzZWQgYW5kIG1haW50YWluZWQgYnkgQXRtZWw6CisgKgorICogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYXRtZWx3bGFuZHJpdmVyLworICoKKyAqIEFsdGhvdWdoIHRoZSBjb2RlIHdhcyBjb21wbGV0ZWx5IHJlLXdyaXR0ZW4sCisgKiBpdCB3b3VsZCBoYXZlIGJlZW4gaW1wb3NzaWJsZSB3aXRob3V0IEF0bWVsJ3MgZGVjaXNpb24gdG8KKyAqIHJlbGVhc2UgYW4gT3BlbiBTb3VyY2UgZHJpdmVyICh1bmZvcnR1bmF0ZWx5IHRoZSBmaXJtd2FyZSB3YXMKKyAqIGtlcHQgYmluYXJ5IG9ubHkpLiBUaGFua3MgZm9yIHRoYXQgZGVjaXNpb24gdG8gQXRtZWwhCisgKi8KKworI2lmbmRlZiBfQVQ3Nl9VU0JfSAorI2RlZmluZSBfQVQ3Nl9VU0JfSAorCisvKiBCb2FyZCB0eXBlcyAqLworZW51bSBib2FyZF90eXBlIHsKKwlCT0FSRF81MDNfSVNMMzg2MSA9IDEsCisJQk9BUkRfNTAzX0lTTDM4NjMgPSAyLAorCUJPQVJEXzUwMyA9IDMsCisJQk9BUkRfNTAzX0FDQyA9IDQsCisJQk9BUkRfNTA1ID0gNSwKKwlCT0FSRF81MDVfMjk1OCA9IDYsCisJQk9BUkRfNTA1QSA9IDcsCisJQk9BUkRfNTA1QU1YID0gOAorfTsKKworI2RlZmluZSBDTURfU1RBVFVTX0lETEUJCQkJMHgwMAorI2RlZmluZSBDTURfU1RBVFVTX0NPTVBMRVRFCQkJMHgwMQorI2RlZmluZSBDTURfU1RBVFVTX1VOS05PV04JCQkweDAyCisjZGVmaW5lIENNRF9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIJCTB4MDMKKyNkZWZpbmUgQ01EX1NUQVRVU19GVU5DVElPTl9OT1RfU1VQUE9SVEVECTB4MDQKKyNkZWZpbmUgQ01EX1NUQVRVU19USU1FX09VVAkJCTB4MDcKKyNkZWZpbmUgQ01EX1NUQVRVU19JTl9QUk9HUkVTUwkJCTB4MDgKKyNkZWZpbmUgQ01EX1NUQVRVU19IT1NUX0ZBSUxVUkUJCQkweGZmCisjZGVmaW5lIENNRF9TVEFUVVNfU0NBTl9GQUlMRUQJCQkweGYwCisKKy8qIGFuc3dlcnMgdG8gZ2V0IG9wIG1vZGUgKi8KKyNkZWZpbmUgT1BNT0RFX05PTkUJCQkJMHgwMAorI2RlZmluZSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNICQkweDAxCisjZGVmaW5lIE9QTU9ERV9IV19DT05GSUdfTU9ERQkJCTB4MDIKKyNkZWZpbmUgT1BNT0RFX0RGVV9NT0RFX1dJVEhfRkxBU0gJCTB4MDMKKyNkZWZpbmUgT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSAkJMHgwNAorCisjZGVmaW5lIENNRF9TRVRfTUlCCQkweDAxCisjZGVmaW5lIENNRF9HRVRfTUlCCQkweDAyCisjZGVmaW5lIENNRF9TQ0FOCQkweDAzCisjZGVmaW5lIENNRF9KT0lOCQkweDA0CisjZGVmaW5lIENNRF9TVEFSVF9JQlNTCQkweDA1CisjZGVmaW5lIENNRF9SQURJT19PTgkJMHgwNgorI2RlZmluZSBDTURfUkFESU9fT0ZGCQkweDA3CisjZGVmaW5lIENNRF9TVEFSVFVQCQkweDBCCisKKyNkZWZpbmUgTUlCX0xPQ0FMCQkweDAxCisjZGVmaW5lIE1JQl9NQUNfQUREUgkJMHgwMgorI2RlZmluZSBNSUJfTUFDCQkJMHgwMworI2RlZmluZSBNSUJfTUFDX01HTVQJCTB4MDUKKyNkZWZpbmUgTUlCX01BQ19XRVAJCTB4MDYKKyNkZWZpbmUgTUlCX1BIWQkJCTB4MDcKKyNkZWZpbmUgTUlCX0ZXX1ZFUlNJT04JCTB4MDgKKyNkZWZpbmUgTUlCX01ET01BSU4JCTB4MDkKKworI2RlZmluZSBBREhPQ19NT0RFCQkxCisjZGVmaW5lIElORlJBU1RSVUNUVVJFX01PREUJMgorCisvKiB2YWx1ZXMgZm9yIHN0cnVjdCBtaWJfbG9jYWwsIGZpZWxkIHByZWFtYmxlX3R5cGUgKi8KKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9MT05HCTAKKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9TSE9SVAkxCisjZGVmaW5lIFBSRUFNQkxFX1RZUEVfQVVUTwkyCisKKy8qIHZhbHVlcyBmb3IgdHhfcmF0ZSAqLworI2RlZmluZSBUWF9SQVRFXzFNQklUCQkwCisjZGVmaW5lIFRYX1JBVEVfMk1CSVQJCTEKKyNkZWZpbmUgVFhfUkFURV81XzVNQklUIAkyCisjZGVmaW5lIFRYX1JBVEVfMTFNQklUCQkzCisjZGVmaW5lIFRYX1JBVEVfQVVUTwkJNAorCisvKiBwb3dlciBtYW5hZ2VtZW50IG1vZGVzICovCisjZGVmaW5lIEFUNzZfUE1fT0ZGCQkxCisjZGVmaW5lIEFUNzZfUE1fT04JCTIKKyNkZWZpbmUgQVQ3Nl9QTV9TTUFSVAkJMworCitzdHJ1Y3QgaHdjZmdfcjUwNSB7CisJdTggY3IzOV92YWx1ZXNbMTRdOworCXU4IHJlc2VydmVkMVsxNF07CisJdTggYmJfY3JbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisJdTggcmVzZXJ2ZWQyWzE0XTsKKwl1OCBjcjE1X3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQzWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGh3Y2ZnX3JmbWQgeworCXU4IGNyMjBfdmFsdWVzWzE0XTsKKwl1OCBjcjIxX3ZhbHVlc1sxNF07CisJdTggYmJfY3JbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisJdTggbG93X3Bvd2VyX3ZhbHVlc1sxNF07CisJdTggbm9ybWFsX3Bvd2VyX3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQxWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGh3Y2ZnX2ludGVyc2lsIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggY3IzMV92YWx1ZXNbMTRdOworCXU4IGNyNThfdmFsdWVzWzE0XTsKKwl1OCBwaWR2aWRbNF07CisJdTggcmVndWxhdG9yeV9kb21haW47CisJdTggcmVzZXJ2ZWRbMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBhdDc2X2h3Y2ZnIHsKKwlzdHJ1Y3QgaHdjZmdfaW50ZXJzaWwgaTsKKwlzdHJ1Y3QgaHdjZmdfcmZtZCByMzsKKwlzdHJ1Y3QgaHdjZmdfcjUwNSByNTsKK307CisKKyNkZWZpbmUgV0VQX1NNQUxMX0tFWV9MRU4JKDQwIC8gOCkKKyNkZWZpbmUgV0VQX0xBUkdFX0tFWV9MRU4JKDEwNCAvIDgpCisjZGVmaW5lIFdFUF9LRVlTCQkoNCkKKworc3RydWN0IGF0NzZfY2FyZF9jb25maWcgeworCXU4IGV4Y2x1ZGVfdW5lbmNyeXB0ZWQ7CisJdTggcHJvbWlzY3VvdXNfbW9kZTsKKwl1OCBzaG9ydF9yZXRyeV9saW1pdDsKKwl1OCBlbmNyeXB0aW9uX3R5cGU7CisJX19sZTE2IHJ0c190aHJlc2hvbGQ7CisJX19sZTE2IGZyYWdtZW50YXRpb25fdGhyZXNob2xkOwkvKiAyNTYuLjIzNDYgKi8KKwl1OCBiYXNpY19yYXRlX3NldFs0XTsKKwl1OCBhdXRvX3JhdGVfZmFsbGJhY2s7CS8qIDAsMSAqLworCXU4IGNoYW5uZWw7CisJdTggcHJpdmFjeV9pbnZva2VkOworCXU4IHdlcF9kZWZhdWx0X2tleV9pZDsJLyogMC4uMyAqLworCXU4IGN1cnJlbnRfc3NpZFszMl07CisJdTggd2VwX2RlZmF1bHRfa2V5X3ZhbHVlWzRdW1dFUF9MQVJHRV9LRVlfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKwl1OCBzaG9ydF9wcmVhbWJsZTsKKwlfX2xlMTYgYmVhY29uX3BlcmlvZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X2NvbW1hbmQgeworCXU4IGNtZDsKKwl1OCByZXNlcnZlZDsKKwlfX2xlMTYgc2l6ZTsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTGVuZ3RoIG9mIEF0bWVsLXNwZWNpZmljIFJ4IGhlYWRlciBiZWZvcmUgODAyLjExIGZyYW1lICovCisjZGVmaW5lIEFUNzZfUlhfSERSTEVOIG9mZnNldG9mKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciwgcGFja2V0KQorCitzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgeworCV9fbGUxNiB3bGVuZ3RoOworCXU4IHJ4X3JhdGU7CisJdTggbmV3YnNzOworCXU4IGZyYWdtZW50YXRpb247CisJdTggcnNzaTsKKwl1OCBsaW5rX3F1YWxpdHk7CisJdTggbm9pc2VfbGV2ZWw7CisJX19sZTMyIHJ4X3RpbWU7CisJdTggcGFja2V0W0lFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTERdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTGVuZ3RoIG9mIEF0bWVsLXNwZWNpZmljIFR4IGhlYWRlciBiZWZvcmUgODAyLjExIGZyYW1lICovCisjZGVmaW5lIEFUNzZfVFhfSERSTEVOIG9mZnNldG9mKHN0cnVjdCBhdDc2X3R4X2J1ZmZlciwgcGFja2V0KQorCitzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgeworCV9fbGUxNiB3bGVuZ3RoOworCXU4IHR4X3JhdGU7CisJdTggcGFkZGluZzsKKwl1OCByZXNlcnZlZFs0XTsKKwl1OCBwYWNrZXRbSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBkZWZpbmVzIGZvciBzY2FuX3R5cGUgYmVsb3cgKi8KKyNkZWZpbmUgU0NBTl9UWVBFX0FDVElWRQkwCisjZGVmaW5lIFNDQU5fVFlQRV9QQVNTSVZFCTEKKworc3RydWN0IGF0NzZfcmVxX3NjYW4geworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFszMl07CisJdTggc2Nhbl90eXBlOworCXU4IGNoYW5uZWw7CisJX19sZTE2IHByb2JlX2RlbGF5OworCV9fbGUxNiBtaW5fY2hhbm5lbF90aW1lOworCV9fbGUxNiBtYXhfY2hhbm5lbF90aW1lOworCXU4IGVzc2lkX3NpemU7CisJdTggaW50ZXJuYXRpb25hbF9zY2FuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfcmVxX2lic3MgeworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFszMl07CisJdTggYnNzX3R5cGU7CisJdTggY2hhbm5lbDsKKwl1OCBlc3NpZF9zaXplOworCXU4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfcmVxX2pvaW4geworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFszMl07CisJdTggYnNzX3R5cGU7CisJdTggY2hhbm5lbDsKKwlfX2xlMTYgdGltZW91dDsKKwl1OCBlc3NpZF9zaXplOworCXU4IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNldF9taWJfYnVmZmVyIHsKKwl1OCB0eXBlOworCXU4IHNpemU7CisJdTggaW5kZXg7CisJdTggcmVzZXJ2ZWQ7CisJdW5pb24geworCQl1OCBieXRlOworCQlfX2xlMTYgd29yZDsKKwkJdTggYWRkcltFVEhfQUxFTl07CisJfSBkYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9sb2NhbCB7CisJdTE2IHJlc2VydmVkMDsKKwl1OCBiZWFjb25fZW5hYmxlOworCXU4IHR4YXV0b3JhdGVfZmFsbGJhY2s7CisJdTggcmVzZXJ2ZWQxOworCXU4IHNzaWRfc2l6ZTsKKwl1OCBwcm9taXNjdW91c19tb2RlOworCXUxNiByZXNlcnZlZDI7CisJdTggcHJlYW1ibGVfdHlwZTsKKwl1MTYgcmVzZXJ2ZWQzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfYWRkciB7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlc1syXTsJCS8qID8/PyAqLworCXU4IGdyb3VwX2FkZHJbNF1bRVRIX0FMRU5dOworCXU4IGdyb3VwX2FkZHJfc3RhdHVzWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWMgeworCV9fbGUzMiBtYXhfdHhfbXNkdV9saWZldGltZTsKKwlfX2xlMzIgbWF4X3J4X2xpZmV0aW1lOworCV9fbGUxNiBmcmFnX3RocmVzaG9sZDsKKwlfX2xlMTYgcnRzX3RocmVzaG9sZDsKKwlfX2xlMTYgY3dtaW47CisJX19sZTE2IGN3bWF4OworCXU4IHNob3J0X3JldHJ5X3RpbWU7CisJdTggbG9uZ19yZXRyeV90aW1lOworCXU4IHNjYW5fdHlwZTsJCS8qIGFjdGl2ZSBvciBwYXNzaXZlICovCisJdTggc2Nhbl9jaGFubmVsOworCV9fbGUxNiBwcm9iZV9kZWxheTsJLyogZGVsYXkgYmVmb3JlIFByb2JlUmVxIGluIGFjdGl2ZSBzY2FuLCBSTyAqLworCV9fbGUxNiBtaW5fY2hhbm5lbF90aW1lOworCV9fbGUxNiBtYXhfY2hhbm5lbF90aW1lOworCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTggZGVzaXJlZF9zc2lkWzMyXTsKKwl1OCBkZXNpcmVkX2Jzc2lkW0VUSF9BTEVOXTsKKwl1OCBkZXNpcmVkX2Jzc3R5cGU7CS8qIGFkLWhvYyBvciBpbmZyYXN0cnVjdHVyZSAqLworCXU4IHJlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjX21nbXQgeworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworCV9fbGUxNiBDRlBfbWF4X2R1cmF0aW9uOworCV9fbGUxNiBtZWRpdW1fb2NjdXBhbmN5X2xpbWl0OworCV9fbGUxNiBzdGF0aW9uX2lkOwkvKiBhc3NvYyBpZCAqLworCV9fbGUxNiBBVElNX3dpbmRvdzsKKwl1OCBDRlBfbW9kZTsKKwl1OCBwcml2YWN5X29wdGlvbl9pbXBsZW1lbnRlZDsKKwl1OCBEVElNX3BlcmlvZDsKKwl1OCBDRlBfcGVyaW9kOworCXU4IGN1cnJlbnRfYnNzaWRbRVRIX0FMRU5dOworCXU4IGN1cnJlbnRfZXNzaWRbMzJdOworCXU4IGN1cnJlbnRfYnNzX3R5cGU7CisJdTggcG93ZXJfbWdtdF9tb2RlOworCS8qIHJmbWQgYW5kIDUwNSAqLworCXU4IGlic3NfY2hhbmdlOworCXU4IHJlczsKKwl1OCBtdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZDsKKwl1OCBtdWx0aV9kb21haW5fY2FwYWJpbGl0eV9lbmFibGVkOworCXU4IGNvdW50cnlfc3RyaW5nWzNdOworCXU4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfd2VwIHsKKwl1OCBwcml2YWN5X2ludm9rZWQ7CS8qIDAgZGlzYWJsZSBlbmNyLiwgMSBlbmFibGUgZW5jciAqLworCXU4IHdlcF9kZWZhdWx0X2tleV9pZDsKKwl1OCB3ZXBfa2V5X21hcHBpbmdfbGVuOworCXU4IGV4Y2x1ZGVfdW5lbmNyeXB0ZWQ7CisJX19sZTMyIHdlcF9pY3ZfZXJyb3JfY291bnQ7CisJX19sZTMyIHdlcF9leGNsdWRlZF9jb3VudDsKKwl1OCB3ZXBfZGVmYXVsdF9rZXl2YWx1ZVtXRVBfS0VZU11bV0VQX0xBUkdFX0tFWV9MRU5dOworCXU4IGVuY3J5cHRpb25fbGV2ZWw7CS8qIDEgZm9yIDQwYml0LCAyIGZvciAxMDRiaXQgZW5jcnlwdGlvbiAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9waHkgeworCV9fbGUzMiBlZF90aHJlc2hvbGQ7CisKKwlfX2xlMTYgc2xvdF90aW1lOworCV9fbGUxNiBzaWZzX3RpbWU7CisJX19sZTE2IHByZWFtYmxlX2xlbmd0aDsKKwlfX2xlMTYgcGxjcF9oZWFkZXJfbGVuZ3RoOworCV9fbGUxNiBtcGR1X21heF9sZW5ndGg7CisJX19sZTE2IGNjYV9tb2RlX3N1cHBvcnRlZDsKKworCXU4IG9wZXJhdGlvbl9yYXRlX3NldFs0XTsKKwl1OCBjaGFubmVsX2lkOworCXU4IGN1cnJlbnRfY2NhX21vZGU7CisJdTggcGh5X3R5cGU7CisJdTggY3VycmVudF9yZWdfZG9tYWluOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9md192ZXJzaW9uIHsKKwl1OCBtYWpvcjsKKwl1OCBtaW5vcjsKKwl1OCBwYXRjaDsKKwl1OCBidWlsZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWRvbWFpbiB7CisJdTggdHhfcG93ZXJsZXZlbFsxNF07CisJdTggY2hhbm5lbF9saXN0WzE0XTsJLyogMCBmb3IgaW52YWxpZCBjaGFubmVscyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfZndfaGVhZGVyIHsKKwlfX2xlMzIgY3JjOwkJLyogQ1JDMzIgb2YgdGhlIHdob2xlIGltYWdlICovCisJX19sZTMyIGJvYXJkX3R5cGU7CS8qIGZpcm13YXJlIGNvbXBhdGliaWxpdHkgY29kZSAqLworCXU4IGJ1aWxkOwkJLyogZmlybXdhcmUgYnVpbGQgbnVtYmVyICovCisJdTggcGF0Y2g7CQkvKiBmaXJtd2FyZSBwYXRjaCBsZXZlbCAqLworCXU4IG1pbm9yOwkJLyogZmlybXdhcmUgbWlub3IgdmVyc2lvbiAqLworCXU4IG1ham9yOwkJLyogZmlybXdhcmUgbWFqb3IgdmVyc2lvbiAqLworCV9fbGUzMiBzdHJfb2Zmc2V0OwkvKiBvZmZzZXQgb2YgdGhlIGNvcHlyaWdodCBzdHJpbmcgKi8KKwlfX2xlMzIgaW50X2Z3X29mZnNldDsJLyogaW50ZXJuYWwgZmlybXdhcmUgaW1hZ2Ugb2Zmc2V0ICovCisJX19sZTMyIGludF9md19sZW47CS8qIGludGVybmFsIGZpcm13YXJlIGltYWdlIGxlbmd0aCAqLworCV9fbGUzMiBleHRfZndfb2Zmc2V0OwkvKiBleHRlcm5hbCBmaXJtd2FyZSBpbWFnZSBvZmZzZXQgKi8KKwlfX2xlMzIgZXh0X2Z3X2xlbjsJLyogZXh0ZXJuYWwgZmlybXdhcmUgaW1hZ2UgbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBhIGRlc2NyaXB0aW9uIG9mIGEgcmVndWxhdG9yeSBkb21haW4gYW5kIHRoZSBhbGxvd2VkIGNoYW5uZWxzICovCitzdHJ1Y3QgcmVnX2RvbWFpbiB7CisJdTE2IGNvZGU7CisJY2hhciBjb25zdCAqbmFtZTsKKwl1MzIgY2hhbm5lbF9tYXA7CS8qIGlmIGJpdCBOIGlzIHNldCwgY2hhbm5lbCAoTisxKSBpcyBhbGxvd2VkICovCit9OworCisvKiBEYXRhIGZvciBvbmUgbG9hZGVkIGZpcm13YXJlIGZpbGUgKi8KK3N0cnVjdCBmd2VudHJ5IHsKKwljb25zdCBjaGFyICpjb25zdCBmd25hbWU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgZXh0Zndfc2l6ZTsKKwlpbnQgaW50Zndfc2l6ZTsKKwkvKiBwb2ludGVyIHRvIGxvYWRlZCBmaXJtd2FyZSwgbm8gbmVlZCB0byBmcmVlICovCisJdTggKmV4dGZ3OwkJLyogZXh0ZXJuYWwgZmlybXdhcmUsIGV4dGZ3X3NpemUgYnl0ZXMgbG9uZyAqLworCXU4ICppbnRmdzsJCS8qIGludGVybmFsIGZpcm13YXJlLCBpbnRmd19zaXplIGJ5dGVzIGxvbmcgKi8KKwllbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZTsJLyogYm9hcmQgdHlwZSAqLworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd192ZXJzaW9uOworCWludCBsb2FkZWQ7CQkvKiBMb2FkZWQgYW5kIHBhcnNlZCBzdWNjZXNzZnVsbHkgKi8KK307CisKK3N0cnVjdCBhdDc2X3ByaXYgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkvKiBVU0IgZGV2aWNlIHBvaW50ZXIgKi8KKworCXN0cnVjdCBza19idWZmICpyeF9za2I7CS8qIHNrYnVmZiBmb3IgcmVjZWl2aW5nIGRhdGEgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwkvKiBza2J1ZmYgZm9yIHRyYW5zbWl0dGluZyBkYXRhICovCisJdm9pZCAqYnVsa19vdXRfYnVmZmVyOwkvKiBidWZmZXIgZm9yIHNlbmRpbmcgZGF0YSAqLworCisJc3RydWN0IHVyYiAqdHhfdXJiOwkvKiBVUkIgZm9yIHNlbmRpbmcgZGF0YSAqLworCXN0cnVjdCB1cmIgKnJ4X3VyYjsJLyogVVJCIGZvciByZWNlaXZpbmcgZGF0YSAqLworCisJdW5zaWduZWQgaW50IHR4X3BpcGU7CS8qIGJ1bGsgb3V0IHBpcGUgKi8KKwl1bnNpZ25lZCBpbnQgcnhfcGlwZTsJLyogYnVsayBpbiBwaXBlICovCisKKwlzdHJ1Y3QgbXV0ZXggbXR4OwkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCisJLyogd29yayBxdWV1ZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19zZXRfcHJvbWlzYzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19zdWJtaXRfcng7CisJc3RydWN0IGRlbGF5ZWRfd29yayBkd29ya19od19zY2FuOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CisKKwkvKiB0aGUgV0VQIHN0dWZmICovCisJaW50IHdlcF9lbmFibGVkOwkvKiAxIGlmIFdFUCBpcyBlbmFibGVkICovCisJaW50IHdlcF9rZXlfaWQ7CQkvKiBrZXkgaWQgdG8gYmUgdXNlZCAqLworCXU4IHdlcF9rZXlzW1dFUF9LRVlTXVtXRVBfTEFSR0VfS0VZX0xFTl07CS8qIFdFUCBrZXlzICovCisJdTggd2VwX2tleXNfbGVuW1dFUF9LRVlTXTsJLyogbGVuZ3RoIG9mIFdFUCBrZXlzICovCisKKwlpbnQgY2hhbm5lbDsKKwlpbnQgaXdfbW9kZTsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCWludCBlc3NpZF9zaXplOworCWludCByYWRpb19vbjsKKwlpbnQgcHJvbWlzYzsKKworCWludCBwcmVhbWJsZV90eXBlOwkvKiAwIC0gbG9uZywgMSAtIHNob3J0LCAyIC0gYXV0byAqLworCWludCBhdXRoX21vZGU7CQkvKiBhdXRoZW50aWNhdGlvbiB0eXBlOiAwIG9wZW4sIDEgc2hhcmVkIGtleSAqLworCWludCB0eHJhdGU7CQkvKiAwLDEsMiwzID0gMSwyLDUuNSwxMSBNYnBzLCA0IGlzIGF1dG8gKi8KKwlpbnQgZnJhZ190aHJlc2hvbGQ7CS8qIHRocmVzaG9sZCBmb3IgZnJhZ21lbnRhdGlvbiBvZiB0eCBwYWNrZXRzICovCisJaW50IHJ0c190aHJlc2hvbGQ7CS8qIHRocmVzaG9sZCBmb3IgUlRTIG1lY2hhbmlzbSAqLworCWludCBzaG9ydF9yZXRyeV9saW1pdDsKKworCWludCBzY2FuX21pbl90aW1lOwkvKiBzY2FuIG1pbiBjaGFubmVsIHRpbWUgKi8KKwlpbnQgc2Nhbl9tYXhfdGltZTsJLyogc2NhbiBtYXggY2hhbm5lbCB0aW1lICovCisJaW50IHNjYW5fbW9kZTsJCS8qIFNDQU5fVFlQRV9BQ1RJVkUsIFNDQU5fVFlQRV9QQVNTSVZFICovCisJaW50IHNjYW5fbmVlZF9hbnk7CS8qIGlmIHNldCwgbmVlZCB0byBzY2FuIGZvciBhbnkgRVNTSUQgKi8KKworCXUxNiBhc3NvY19pZDsJCS8qIGN1cnJlbnQgYXNzb2NpYXRpb24gSUQsIGlmIGFzc29jaWF0ZWQgKi8KKworCXU4IHBtX21vZGU7CQkvKiBwb3dlciBtYW5hZ2VtZW50IG1vZGUgKi8KKwl1MzIgcG1fcGVyaW9kOwkJLyogcG93ZXIgbWFuYWdlbWVudCBwZXJpb2QgaW4gbWljcm9zZWNvbmRzICovCisKKwlzdHJ1Y3QgcmVnX2RvbWFpbiBjb25zdCAqZG9tYWluOwkvKiByZWcgZG9tYWluIGRlc2NyaXB0aW9uICovCisKKwkvKiBUaGVzZSBmaWVsZHMgY29udGFpbiBIVyBjb25maWcgcHJvdmlkZWQgYnkgdGhlIGRldmljZSAobm90IGFsbCBvZgorCSAqIHRoZXNlIGZpZWxkcyBhcmUgdXNlZCBieSBhbGwgYm9hcmQgdHlwZXMpICovCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCisJc3RydWN0IGF0NzZfY2FyZF9jb25maWcgY2FyZF9jb25maWc7CisKKwllbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZTsKKwlzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24gZndfdmVyc2lvbjsKKworCXVuc2lnbmVkIGludCBkZXZpY2VfdW5wbHVnZ2VkOjE7CisJdW5zaWduZWQgaW50IG5ldGRldl9yZWdpc3RlcmVkOjE7CisJc3RydWN0IHNldF9taWJfYnVmZmVyIG1pYl9idWY7CS8qIGdsb2JhbCBidWZmZXIgZm9yIHNldF9taWIgY2FsbHMgKi8KKworCWludCBiZWFjb25fcGVyaW9kOwkvKiBwZXJpb2Qgb2YgbWdtdCBiZWFjb25zLCBLdXMgKi8KKworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWludCBtYWM4MDIxMV9yZWdpc3RlcmVkOworfTsKKworI2RlZmluZSBBVDc2X1NVUFBPUlRFRF9GSUxURVJTIEZJRl9QUk9NSVNDX0lOX0JTUworCisjZGVmaW5lIFNDQU5fUE9MTF9JTlRFUlZBTAkoSFogLyA0KQorCisjZGVmaW5lIENNRF9DT01QTEVUSU9OX1RJTUVPVVQJKDUgKiBIWikKKworI2RlZmluZSBERUZfUlRTX1RIUkVTSE9MRAkxNTM2CisjZGVmaW5lIERFRl9GUkFHX1RIUkVTSE9MRAkxNTM2CisjZGVmaW5lIERFRl9TSE9SVF9SRVRSWV9MSU1JVAk4CisjZGVmaW5lIERFRl9DSEFOTkVMCQkxMAorI2RlZmluZSBERUZfU0NBTl9NSU5fVElNRQkxMAorI2RlZmluZSBERUZfU0NBTl9NQVhfVElNRQkxMjAKKworLyogdGhlIG1heCBwYWRkaW5nIHNpemUgZm9yIHR4IGluIGJ5dGVzIChzZWUgY2FsY19wYWRkaW5nKSAqLworI2RlZmluZSBNQVhfUEFERElOR19TSVpFCTUzCisKKyNlbmRpZgkJCQkvKiBfQVQ3Nl9VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZQppbmRleCA3MTljZmFlLi44NGE3NGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZQpAQCAtMTAsNSArMTAsNiBAQAogYXRoNWsteQkJCQkrPSByZXNldC5vCiBhdGg1ay15CQkJCSs9IGF0dGFjaC5vCiBhdGg1ay15CQkJCSs9IGJhc2UubworYXRoNWsteQkJCQkrPSBsZWQubwogYXRoNWstJChDT05GSUdfQVRINUtfREVCVUcpCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19BVEg1SykJCSs9IGF0aDVrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdGg1ay5oCmluZGV4IGI5YWYyYjguLjBkYzJjNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdGg1ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKQEAgLTExMjksNiArMTEyOSwxMiBAQAogZXh0ZXJuIHN0cnVjdCBhdGg1a19odyAqYXRoNWtfaHdfYXR0YWNoKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU4IG1hY192ZXJzaW9uKTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAorLyogTEVEIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBhdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgYXRoNWtfbGVkX29mZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKKwogLyogUmVzZXQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpOwogZXh0ZXJuIGludCBhdGg1a19od19yZXNldChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBlbnVtIG5sODAyMTFfaWZ0eXBlIG9wX21vZGUsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0dGFjaC5jCmluZGV4IDA1YmM1Y2IuLjY1NmNiOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0dGFjaC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0dGFjaC5jCkBAIC0zNCwxNCArMzQsMTQgQEAKIHN0YXRpYyBpbnQgYXRoNWtfaHdfcG9zdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCi0JaW50IGksIGM7Ci0JdTE2IGN1cl9yZWc7Ci0JdTE2IHJlZ3NbMl0gPSB7QVI1S19TVEFfSUQwLCBBUjVLX1BIWSg4KX07Ci0JdTMyIHZhcl9wYXR0ZXJuOwotCXUzMiBzdGF0aWNfcGF0dGVybls0XSA9IHsKKwlzdGF0aWMgY29uc3QgdTMyIHN0YXRpY19wYXR0ZXJuWzRdID0gewogCQkweDU1NTU1NTU1LAkweGFhYWFhYWFhLAogCQkweDY2NjY2NjY2LAkweDk5OTk5OTk5CiAJfTsKKwlzdGF0aWMgY29uc3QgdTE2IHJlZ3NbMl0gPSB7IEFSNUtfU1RBX0lEMCwgQVI1S19QSFkoOCkgfTsKKwlpbnQgaSwgYzsKKwl1MTYgY3VyX3JlZzsKKwl1MzIgdmFyX3BhdHRlcm47CiAJdTMyIGluaXRfdmFsOwogCXUzMiBjdXJfdmFsOwogCkBAIC0xMDYsNyArMTA2LDYgQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7Ci0JdTggbWFjW0VUSF9BTEVOXSA9IHt9OwogCWludCByZXQ7CiAJdTMyIHNyZXY7CiAKQEAgLTMxMiw3ICszMTEsNyBAQAogCX0KIAogCS8qIE1BQyBhZGRyZXNzIGlzIGNsZWFyZWQgdW50aWwgYWRkX2ludGVyZmFjZSAqLwotCWF0aDVrX2h3X3NldF9sbGFkZHIoYWgsIG1hYyk7CisJYXRoNWtfaHdfc2V0X2xsYWRkcihhaCwgKHU4W0VUSF9BTEVOXSl7fSk7CiAKIAkvKiBTZXQgQlNTSUQgdG8gYmNhc3QgYWRkcmVzczogZmY6ZmY6ZmY6ZmY6ZmY6ZmYgZm9yIG5vdyAqLwogCW1lbXNldChhaC0+YWhfYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYwppbmRleCA2ODM3Y2E5Li5jYWQzY2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAogLyogS25vd24gUENJIGlkcyAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX3BjaV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoNWtfcGNpX2lkX3RhYmxlW10gPSB7CiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAyMDcpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMCB9LCAvKiA1MjEwIGVhcmx5ICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMDcpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMCB9LCAvKiA1MjEwICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTEpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMSB9LCAvKiA1MzExIC0gdGhpcyBpcyBvbiBBSEIgYnVzICEqLwpAQCAtMTAzLDcgKzEwMyw3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRoNWtfcGNpX2lkX3RhYmxlKTsKIAogLyogS25vd24gU1JFVnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRoNWtfc3Jldl9uYW1lIHNyZXZfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfc3Jldl9uYW1lIHNyZXZfbmFtZXNbXSA9IHsKIAl7ICI1MjEwIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTIxMCB9LAogCXsgIjUzMTEiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVI1MzExIH0sCiAJeyAiNTMxMUEiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVI1MzExQSB9LApAQCAtMTQyLDcgKzE0Miw3IEBACiAJeyAieHh4eHgiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfVU5LTk9XTiB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhdGg1a19yYXRlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhdGg1a19yYXRlc1tdID0gewogCXsgLmJpdHJhdGUgPSAxMCwKIAkgIC5od192YWx1ZSA9IEFUSDVLX1JBVEVfQ09ERV8xTSwgfSwKIAl7IC5iaXRyYXRlID0gMjAsCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCXUzMiBjaGFuZ2VzKTsKIAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDVrX2h3X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg1a19od19vcHMgPSB7CiAJLnR4IAkJPSBhdGg1a190eCwKIAkuc3RhcnQgCQk9IGF0aDVrX3N0YXJ0LAogCS5zdG9wIAkJPSBhdGg1a19zdG9wLApAQCAtMzUwLDYgKzM1MCw3IEBACiBzdGF0aWMgdm9pZCAJYXRoNWtfYmVhY29uX3NlbmQoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZCAJYXRoNWtfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyB2b2lkCWF0aDVrX2JlYWNvbl91cGRhdGVfdGltZXJzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU2NCBiY190c2YpOworc3RhdGljIHZvaWQJYXRoNWtfdGFza2xldF9iZWFjb24odW5zaWduZWQgbG9uZyBkYXRhKTsKIAogc3RhdGljIGlubGluZSB1NjQgYXRoNWtfZXh0ZW5kX3RzZihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgcnN0YW1wKQogewpAQCAtMzY5LDExICszNzAsNiBAQAogc3RhdGljIHZvaWQgCWF0aDVrX3Rhc2tsZXRfcmVzZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogc3RhdGljIHZvaWQgCWF0aDVrX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpOwotLyogTEVEIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludAlhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgdm9pZAlhdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIHZvaWQJYXRoNWtfbGVkX29mZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKLXN0YXRpYyB2b2lkCWF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIAogLyoKICAqIE1vZHVsZSBpbml0L2V4aXQgZnVuY3Rpb25zCkBAIC03ODksNiArNzg1LDcgQEAKIAl0YXNrbGV0X2luaXQoJnNjLT5yeHRxLCBhdGg1a190YXNrbGV0X3J4LCAodW5zaWduZWQgbG9uZylzYyk7CiAJdGFza2xldF9pbml0KCZzYy0+dHh0cSwgYXRoNWtfdGFza2xldF90eCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnJlc3RxLCBhdGg1a190YXNrbGV0X3Jlc2V0LCAodW5zaWduZWQgbG9uZylzYyk7CisJdGFza2xldF9pbml0KCZzYy0+YmVhY29udHEsIGF0aDVrX3Rhc2tsZXRfYmVhY29uLCAodW5zaWduZWQgbG9uZylzYyk7CiAJc2V0dXBfdGltZXIoJnNjLT5jYWxpYl90aW0sIGF0aDVrX2NhbGlicmF0ZSwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCiAJcmV0ID0gYXRoNWtfZWVwcm9tX3JlYWRfbWFjKGFoLCBtYWMpOwpAQCAtMTA5OCw3ICsxMDk1LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBhdGg1a19od190b19kcml2ZXJfcml4KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGludCBod19yaXgpCiB7Ci0JV0FSTl9PTihod19yaXggPCAwIHx8IGh3X3JpeCA+IEFSNUtfTUFYX1JBVEVTKTsKKwlXQVJOKGh3X3JpeCA8IDAgfHwgaHdfcml4ID49IEFSNUtfTUFYX1JBVEVTLAorCQkJImh3X3JpeCBvdXQgb2YgYm91bmRzOiAleFxuIiwgaHdfcml4KTsKIAlyZXR1cm4gc2MtPnJhdGVfaWR4W3NjLT5jdXJiYW5kLT5iYW5kXVtod19yaXhdOwogfQogCkBAIC0xMjE4LDYgKzEyMTYsMTAgQEAKIAogCXBrdGxlbiA9IHNrYi0+bGVuOwogCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCWtleWlkeCA9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OworCQlwa3RsZW4gKz0gaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47CisJfQogCWlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgewogCQlmbGFncyB8PSBBUjVLX1RYREVTQ19SVFNFTkE7CiAJCWN0c19yYXRlID0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoc2MtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CkBAIC0xMjMwLDExICsxMjMyLDYgQEAKIAkJZHVyYXRpb24gPSBsZTE2X3RvX2NwdShpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uKHNjLT5odywKIAkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOwogCX0KLQotCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgewotCQlrZXlpZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKLQkJcGt0bGVuICs9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuOwotCX0KIAlyZXQgPSBhaC0+YWhfc2V0dXBfdHhfZGVzYyhhaCwgZHMsIHBrdGxlbiwKIAkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwgQVI1S19QS1RfVFlQRV9OT1JNQUwsCiAJCShzYy0+cG93ZXJfbGV2ZWwgKiAyKSwKQEAgLTE3MDAsNiArMTY5NywzNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYXRoNWtfdGFza2xldF9iZWFjb24odW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aDVrX3NvZnRjICopIGRhdGE7CisKKwkvKgorCSAqIFNvZnR3YXJlIGJlYWNvbiBhbGVydC0tdGltZSB0byBzZW5kIGEgYmVhY29uLgorCSAqCisJICogSW4gSUJTUyBtb2RlIHdlIHVzZSB0aGlzIGludGVycnVwdCBqdXN0IHRvCisJICoga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBUQlRUICh0YXJnZXQgYmVhY29uCisJICogdHJhbnNtaXNzaW9uIHRpbWUpIGluIG9yZGVyIHRvIGRldGVjdCB3ZXRoZXIKKwkgKiBhdXRvbWF0aWMgVFNGIHVwZGF0ZXMgaGFwcGVuZWQuCisJICovCisJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJLyogWFhYOiBvbmx5IGlmIFZFT0wgc3VwcHBvcnRlZCAqLworCQl1NjQgdHNmID0gYXRoNWtfaHdfZ2V0X3RzZjY0KHNjLT5haCk7CisJCXNjLT5uZXh0dGJ0dCArPSBzYy0+YmludHZhbDsKKwkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19CRUFDT04sCisJCQkJIlNXQkEgbmV4dHRidHQ6ICV4IGh3X3R1OiAleCAiCisJCQkJIlRTRjogJWxseFxuIiwKKwkJCQlzYy0+bmV4dHRidHQsCisJCQkJVFNGX1RPX1RVKHRzZiksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNmKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2soJnNjLT5ibG9jayk7CisJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKKwkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7CisJfQorfQogCiBzdGF0aWMgdm9pZAogYXRoNWtfdGFza2xldF9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0yMDQwLDkgKzIwNjUsOCBAQAogICogZnJhbWUgY29udGVudHMgYXJlIGRvbmUgYXMgbmVlZGVkIGFuZCB0aGUgc2xvdCB0aW1lIGlzCiAgKiBhbHNvIGFkanVzdGVkIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGUuCiAgKgotICogdGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IChhdGg1a19pbnRyKCkpCi0gKiBidXQgYWxzbyBmcm9tIGF0aDVrX2JlYWNvbl9jb25maWcoKSBpbiBJQlNTIG1vZGUgd2hpY2ggaW4gdHVybgotICogY2FuIGJlIGNhbGxlZCBmcm9tIGEgdGFza2xldCBhbmQgdXNlciBjb250ZXh0CisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHNvZnR3YXJlIGlycSBjb250ZXh0IChiZWFjb250cSBvciByZXN0cQorICogdGFza2xldHMpIG9yIHVzZXIgY29udGV4dCBmcm9tIGF0aDVrX2JlYWNvbl9jb25maWcuCiAgKi8KIHN0YXRpYyB2b2lkCiBhdGg1a19iZWFjb25fc2VuZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQpAQCAtMjIxNiw2ICsyMjQwLDcgQEAKIGF0aDVrX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlhdGg1a19od19zZXRfaW1yKGFoLCAwKTsKIAlzYy0+Ym1pc3Njb3VudCA9IDA7CkBAIC0yMjM3LDkgKzIyNjIsOSBAQAogCiAJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCQlpZiAoYXRoNWtfaHdfaGFzdmVvbChhaCkpIHsKLQkJCQlzcGluX2xvY2soJnNjLT5ibG9jayk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ibG9jaywgZmxhZ3MpOwogCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKLQkJCQlzcGluX3VubG9jaygmc2MtPmJsb2NrKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+YmxvY2ssIGZsYWdzKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzYywgLTEpOwpAQCAtMjM5MSw2ICsyNDE2LDcgQEAKIAl0YXNrbGV0X2tpbGwoJnNjLT5yeHRxKTsKIAl0YXNrbGV0X2tpbGwoJnNjLT50eHRxKTsKIAl0YXNrbGV0X2tpbGwoJnNjLT5yZXN0cSk7CisJdGFza2xldF9raWxsKCZzYy0+YmVhY29udHEpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0MDgsMTYgKzI0MzQsOSBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlkbyB7Ci0JCS8qCi0JCSAqIEZpZ3VyZSBvdXQgdGhlIHJlYXNvbihzKSBmb3IgdGhlIGludGVycnVwdC4gIE5vdGUKLQkJICogdGhhdCBnZXRfaXNyIHJldHVybnMgYSBwc2V1ZG8tSVNSIHRoYXQgbWF5IGluY2x1ZGUKLQkJICogYml0cyB3ZSBoYXZlbid0IGV4cGxpY2l0bHkgZW5hYmxlZCBzbyB3ZSBtYXNrIHRoZQotCQkgKiB2YWx1ZSB0byBpbnN1cmUgd2Ugb25seSBwcm9jZXNzIGJpdHMgd2UgcmVxdWVzdGVkLgotCQkgKi8KIAkJYXRoNWtfaHdfZ2V0X2lzcihhaCwgJnN0YXR1cyk7CQkvKiBOQjogY2xlYXJzIElSUSB0b28gKi8KIAkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19JTlRSLCAic3RhdHVzIDB4JXgvMHgleFxuIiwKIAkJCQlzdGF0dXMsIHNjLT5pbWFzayk7Ci0JCXN0YXR1cyAmPSBzYy0+aW1hc2s7IC8qIGRpc2NhcmQgdW5hc2tlZCBmb3IgYml0cyAqLwogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgQVI1S19JTlRfRkFUQUwpKSB7CiAJCQkvKgogCQkJICogRmF0YWwgZXJyb3JzIGFyZSB1bnJlY292ZXJhYmxlLgpAQCAtMjQyOCwzMiArMjQ0Nyw3IEBACiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+cmVzdHEpOwogCQl9IGVsc2UgewogCQkJaWYgKHN0YXR1cyAmIEFSNUtfSU5UX1NXQkEpIHsKLQkJCQkvKgotCQkJCSogU29mdHdhcmUgYmVhY29uIGFsZXJ0LS10aW1lIHRvIHNlbmQgYSBiZWFjb24uCi0JCQkJKiBIYW5kbGUgYmVhY29uIHRyYW5zbWlzc2lvbiBkaXJlY3RseTsgZGVmZXJyaW5nCi0JCQkJKiB0aGlzIGlzIHRvbyBzbG93IHRvIG1lZXQgdGltaW5nIGNvbnN0cmFpbnRzCi0JCQkJKiB1bmRlciBsb2FkLgotCQkJCSoKLQkJCQkqIEluIElCU1MgbW9kZSB3ZSB1c2UgdGhpcyBpbnRlcnJ1cHQganVzdCB0bwotCQkJCSoga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBUQlRUICh0YXJnZXQgYmVhY29uCi0JCQkJKiB0cmFuc21pc3Npb24gdGltZSkgaW4gb3JkZXIgdG8gZGV0ZWN0IHdldGhlcgotCQkJCSogYXV0b21hdGljIFRTRiB1cGRhdGVzIGhhcHBlbmVkLgotCQkJCSovCi0JCQkJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJCQkJIC8qIFhYWDogb25seSBpZiBWRU9MIHN1cHBwb3J0ZWQgKi8KLQkJCQkJdTY0IHRzZiA9IGF0aDVrX2h3X2dldF90c2Y2NChhaCk7Ci0JCQkJCXNjLT5uZXh0dGJ0dCArPSBzYy0+YmludHZhbDsKLQkJCQkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19CRUFDT04sCi0JCQkJCQkgICJTV0JBIG5leHR0YnR0OiAleCBod190dTogJXggIgotCQkJCQkJICAiVFNGOiAlbGx4XG4iLAotCQkJCQkJICBzYy0+bmV4dHRidHQsCi0JCQkJCQkgIFRTRl9UT19UVSh0c2YpLAotCQkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNwaW5fbG9jaygmc2MtPmJsb2NrKTsKLQkJCQkJYXRoNWtfYmVhY29uX3NlbmQoc2MpOwotCQkJCQlzcGluX3VubG9jaygmc2MtPmJsb2NrKTsKLQkJCQl9CisJCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPmJlYWNvbnRxKTsKIAkJCX0KIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9SWEVPTCkgewogCQkJCS8qCkBAIC0yNTMxLDE0MSArMjUyNSw2IEBACiB9CiAKIAotCi0vKioqKioqKioqKioqKioqXAotKiBMRUQgZnVuY3Rpb25zICoKLVwqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JaWYgKHRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKSB7Ci0JCWF0aDVrX2h3X3NldF9ncGlvX291dHB1dChzYy0+YWgsIHNjLT5sZWRfcGluKTsKLQkJYXRoNWtfbGVkX29mZihzYyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfbGVkX29uKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sIHNjLT5sZWRfb24pOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfbGVkX29mZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCi0JCXJldHVybjsKLQlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCAhc2MtPmxlZF9vbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2RldiwKLQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCi17Ci0Jc3RydWN0IGF0aDVrX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGxlZF9kZXYsIHN0cnVjdCBhdGg1a19sZWQsCi0JCWxlZF9kZXYpOwotCi0JaWYgKGJyaWdodG5lc3MgPT0gTEVEX09GRikKLQkJYXRoNWtfbGVkX29mZihsZWQtPnNjKTsKLQllbHNlCi0JCWF0aDVrX2xlZF9vbihsZWQtPnNjKTsKLX0KLQotc3RhdGljIGludAotYXRoNWtfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19sZWQgKmxlZCwKLQkJICAgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdHJpZ2dlcikKLXsKLQlpbnQgZXJyOwotCi0JbGVkLT5zYyA9IHNjOwotCXN0cm5jcHkobGVkLT5uYW1lLCBuYW1lLCBzaXplb2YobGVkLT5uYW1lKSk7Ci0JbGVkLT5sZWRfZGV2Lm5hbWUgPSBsZWQtPm5hbWU7Ci0JbGVkLT5sZWRfZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7Ci0JbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gYXRoNWtfbGVkX2JyaWdodG5lc3Nfc2V0OwotCi0JZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZzYy0+cGRldi0+ZGV2LCAmbGVkLT5sZWRfZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCUFUSDVLX1dBUk4oc2MsICJjb3VsZCBub3QgcmVnaXN0ZXIgTEVEICVzXG4iLCBuYW1lKTsKLQkJbGVkLT5zYyA9IE5VTEw7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoNWtfbGVkICpsZWQpCi17Ci0JaWYgKCFsZWQtPnNjKQotCQlyZXR1cm47Ci0JbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2Rldik7Ci0JYXRoNWtfbGVkX29mZihsZWQtPnNjKTsKLQlsZWQtPnNjID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+cnhfbGVkKTsKLQlhdGg1a191bnJlZ2lzdGVyX2xlZCgmc2MtPnR4X2xlZCk7Ci19Ci0KLQotc3RhdGljIGludAotYXRoNWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBzYy0+cGRldjsKLQljaGFyIG5hbWVbQVRINUtfTEVEX01BWF9OQU1FX0xFTiArIDFdOwotCi0JLyoKLQkgKiBBdXRvLWVuYWJsZSBzb2Z0IGxlZCBwcm9jZXNzaW5nIGZvciBJQk0gY2FyZHMgYW5kIGZvcgotCSAqIDUyMTEgbWluaXBjaSBjYXJkcy4KLQkgKi8KLQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTJfSUJNIHx8Ci0JICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjExKSB7Ci0JCV9fc2V0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKTsKLQkJc2MtPmxlZF9waW4gPSAwOwotCQlzYy0+bGVkX29uID0gMDsgIC8qIGFjdGl2ZSBsb3cgKi8KLQl9Ci0JLyogRW5hYmxlIHNvZnRsZWQgb24gUElOMSBvbiBIUCBDb21wYXEgbmM2eHgsIG5jNDAwMCAmIG54NTAwMCBsYXB0b3BzICovCi0JaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DT01QQVEpIHsKLQkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOwotCQlzYy0+bGVkX3BpbiA9IDE7Ci0JCXNjLT5sZWRfb24gPSAxOyAgLyogYWN0aXZlIGhpZ2ggKi8KLQl9Ci0JLyoKLQkgKiBQaW4gMyBvbiBGb3hjb25uIGNoaXBzIHVzZWQgaW4gQWNlciBBc3BpcmUgT25lICgweDEwNWI6ZTAwOCkgYW5kCi0JICogaW4gZW1hY2hpbmVzIG5vdGVib29rcyB3aXRoIEFNQklUIHN1YnN5c3RlbS4KLQkgKi8KLQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0ZPWENPTk4gfHwKLQkgICAgcGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNQklUKSB7Ci0JCV9fc2V0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKTsKLQkJc2MtPmxlZF9waW4gPSAzOwotCQlzYy0+bGVkX29uID0gMDsgIC8qIGFjdGl2ZSBsb3cgKi8KLQl9Ci0KLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlnb3RvIG91dDsKLQotCWF0aDVrX2xlZF9lbmFibGUoc2MpOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCBuYW1lLAotCQlpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIG5hbWUsCi0JCWllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoaHcpKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKlwKICogTWFjODAyMTEgZnVuY3Rpb25zICoKIFwqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaAppbmRleCBjMGZiOGI1Li4yMGUwZDE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaApAQCAtMTY5LDYgKzE2OSw3IEBACiAJc3RydWN0IGF0aDVrX2xlZAl0eF9sZWQ7CQkvKiB0eCBsZWQgKi8KIAogCXNwaW5sb2NrX3QJCWJsb2NrOwkJLyogcHJvdGVjdHMgYmVhY29uICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWJlYWNvbnRxOwkvKiBiZWFjb24gaW50ciB0YXNrbGV0ICovCiAJc3RydWN0IGF0aDVrX2J1ZgkqYmJ1ZjsJCS8qIGJlYWNvbiBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQJCWJoYWxxLAkJLyogU1cgcSBmb3Igb3V0Z29pbmcgYmVhY29ucyAqLwogCQkJCWJtaXNzY291bnQsCS8qIG1pc3NlZCBiZWFjb24gdHJhbnNtaXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYwppbmRleCA0MTNlZDY4OS4uOTc3MGJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jCkBAIC04MiwxNCArODIsMTQgQEAKIC8qIGRlYnVnZnM6IHJlZ2lzdGVycyAqLwogCiBzdHJ1Y3QgcmVnIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGFkZHI7CiB9OwogCiAjZGVmaW5lIFJFR19TVFJVQ1RfSU5JVChyKSB7ICNyLCByIH0KIAogLyoganVzdCBhIGZldyByYW5kb20gcmVnaXN0ZXJzLCBtaWdodCB3YW50IHRvIGFkZCBtb3JlICovCi1zdGF0aWMgc3RydWN0IHJlZyByZWdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZyByZWdzW10gPSB7CiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfQ1IpLAogCVJFR19TVFJVQ1RfSU5JVChBUjVLX1JYRFApLAogCVJFR19TVFJVQ1RfSU5JVChBUjVLX0NGRyksCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogc3RhdGljIHZvaWQgKnJlZ19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gJnJlZ3NbKnBvc10gOiBOVUxMOworCXJldHVybiAqcG9zIDwgQVJSQVlfU0laRShyZWdzKSA/ICh2b2lkICopJnJlZ3NbKnBvc10gOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCByZWdfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqcCkKQEAgLTE1Myw3ICsxNTMsNyBAQAogc3RhdGljIHZvaWQgKnJlZ19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKIHsKIAkrKypwb3M7Ci0JcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gJnJlZ3NbKnBvc10gOiBOVUxMOworCXJldHVybiAqcG9zIDwgQVJSQVlfU0laRShyZWdzKSA/ICh2b2lkICopJnJlZ3NbKnBvc10gOiBOVUxMOwogfQogCiBzdGF0aWMgaW50IHJlZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQpAQCAtMjkwLDcgKzI5MCw3IEBACiAKIC8qIGRlYnVnZnM6IGRlYnVnIGxldmVsICovCiAKLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJZW51bSBhdGg1a19kZWJ1Z19sZXZlbCBsZXZlbDsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmRlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5jCmluZGV4IGE1NGVlN2UuLmFjNDVjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5jCkBAIC0xNDE4LDE0ICsxNDE4LDExIEBACiAgKi8KIGludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYykKIHsKLQl1OCBtYWNfZFtFVEhfQUxFTl07CisJdTggbWFjX2RbRVRIX0FMRU5dID0ge307CiAJdTMyIHRvdGFsLCBvZmZzZXQ7CiAJdTE2IGRhdGE7CiAJaW50IG9jdGV0LCByZXQ7CiAKLQltZW1zZXQobWFjLCAwLCBFVEhfQUxFTik7Ci0JbWVtc2V0KG1hY19kLCAwLCBFVEhfQUxFTik7Ci0KIAlyZXQgPSBhdGg1a19od19lZXByb21fcmVhZChhaCwgMHgyMCwgJmRhdGEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xNDQxLDExICsxNDM4LDExIEBACiAJCW9jdGV0ICs9IDI7CiAJfQogCi0JbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKLQogCWlmICghdG90YWwgfHwgdG90YWwgPT0gMyAqIDB4ZmZmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltZW1jcHkobWFjLCBtYWNfZCwgRVRIX0FMRU4pOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NmUxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2xlZC5jCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgU2FtIExlZmZsZXIsIEVycm5vIENvbnN1bHRpbmcKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA5IEJvYiBDb3BlbGFuZCA8bWVAYm9iY29wZWxhbmQuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdyAoIkRpc2NsYWltZXIiKSBhbmQgYW55CisgKiAgICByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24gaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseQorICogICAgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT05JTkZSSU5HRU1FTlQsIE1FUkNIQU5USUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgImF0aDVrLmgiCisjaW5jbHVkZSAiYmFzZS5oIgorCisjZGVmaW5lIEFUSF9TREVWSUNFKHN1YnYsc3ViZCkgXAorCS52ZW5kb3IgPSBQQ0lfQU5ZX0lELCAuZGV2aWNlID0gUENJX0FOWV9JRCwgXAorCS5zdWJ2ZW5kb3IgPSAoc3VidiksIC5zdWJkZXZpY2UgPSAoc3ViZCkKKworI2RlZmluZSBBVEhfTEVEKHBpbixwb2xhcml0eSkgLmRyaXZlcl9kYXRhID0gKCgocGluKSA8PCA4KSB8IChwb2xhcml0eSkpCisjZGVmaW5lIEFUSF9QSU4oZGF0YSkgKChkYXRhKSA+PiA4KQorI2RlZmluZSBBVEhfUE9MQVJJVFkoZGF0YSkgKChkYXRhKSAmIDB4ZmYpCisKKy8qIERldmljZXMgd2UgbWF0Y2ggb24gZm9yIExFRCBjb25maWcgaW5mbyAodHlwaWNhbGx5IGxhcHRvcHMpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoNWtfbGVkX2RldmljZXNbXSA9IHsKKwkvKiBJQk0tc3BlY2lmaWMgQVI1MjEyICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjEyX0lCTSksIEFUSF9MRUQoMCwgMCkgfSwKKwkvKiBBUjUyMTEgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTEpLCBBVEhfTEVEKDAsIDApIH0sCisJLyogSFAgQ29tcGFxIG5jNnh4LCBuYzQwMDAsIG54NjAwMCAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9DT01QQVEsIFBDSV9BTllfSUQpLCBBVEhfTEVEKDEsIDEpIH0sCisJLyogQWNlciBBc3BpcmUgT25lIEExNTAgKG1heGltbGV2aXRza3lAZ21haWwuY29tKSAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9GT1hDT05OLCAweGUwMDgpLCBBVEhfTEVEKDMsIDApIH0sCisJLyogQWNlciBGZXJyYXJpIDUwMDAgKHJ1c3MuZGlsbEBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FNQklULCAweDA0MjIpLCBBVEhfTEVEKDEsIDEpIH0sCisJLyogRS1tYWNoaW5lcyBFNTEwICh0dWxpb21AZ21haWwuY29tKSAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUJJVCwgMHgwNDI4KSwgQVRIX0xFRCgzLCAwKSB9LAorCXsgfQorfTsKKwordm9pZCBhdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKHRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKSB7CisJCWF0aDVrX2h3X3NldF9ncGlvX291dHB1dChzYy0+YWgsIHNjLT5sZWRfcGluKTsKKwkJYXRoNWtfbGVkX29mZihzYyk7CisJfQorfQorCit2b2lkIGF0aDVrX2xlZF9vbihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCisJCXJldHVybjsKKwlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCBzYy0+bGVkX29uKTsKK30KKwordm9pZCBhdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJcmV0dXJuOworCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAorCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgYXRoNWtfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IGF0aDVrX2xlZCwKKwkJbGVkX2Rldik7CisKKwlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQorCQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOworCWVsc2UKKwkJYXRoNWtfbGVkX29uKGxlZC0+c2MpOworfQorCitzdGF0aWMgaW50CithdGg1a19yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2xlZCAqbGVkLAorCQkgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQoreworCWludCBlcnI7CisKKwlsZWQtPnNjID0gc2M7CisJc3RybmNweShsZWQtPm5hbWUsIG5hbWUsIHNpemVvZihsZWQtPm5hbWUpKTsKKwlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQ7CisKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnNjLT5wZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpIHsKKwkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOworCQlsZWQtPnNjID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19sZWQgKmxlZCkKK3sKKwlpZiAoIWxlZC0+c2MpCisJCXJldHVybjsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKKwlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOworCWxlZC0+c2MgPSBOVUxMOworfQorCit2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+cnhfbGVkKTsKKwlhdGg1a191bnJlZ2lzdGVyX2xlZCgmc2MtPnR4X2xlZCk7Cit9CisKK2ludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OworCWNoYXIgbmFtZVtBVEg1S19MRURfTUFYX05BTUVfTEVOICsgMV07CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKm1hdGNoOworCisJbWF0Y2ggPSBwY2lfbWF0Y2hfaWQoJmF0aDVrX2xlZF9kZXZpY2VzWzBdLCBwZGV2KTsKKwlpZiAobWF0Y2gpIHsKKwkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOworCQlzYy0+bGVkX3BpbiA9IEFUSF9QSU4obWF0Y2gtPmRyaXZlcl9kYXRhKTsKKwkJc2MtPmxlZF9vbiA9IEFUSF9QT0xBUklUWShtYXRjaC0+ZHJpdmVyX2RhdGEpOworCX0KKworCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCisJCWdvdG8gb3V0OworCisJYXRoNWtfbGVkX2VuYWJsZShzYyk7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT5yeF9sZWQsIG5hbWUsCisJCWllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoaHcpKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0aDVrLSVzOjp0eCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJcmV0ID0gYXRoNWtfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnR4X2xlZCwgbmFtZSwKKwkJaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShodykpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKaW5kZXggZjhhNGE2OS4uNTUxMjJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKQEAgLTY1Nyw5ICs2NTcsOCBAQAogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKLQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMDAsIEFSNUtfVFNGX0wzMik7Ci0JYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAodHNmNjQgPj4gMzIpICYgMHhmZmZmZmZmZiwgQVI1S19UU0ZfVTMyKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZjY0ICYgMHhmZmZmZmZmZiwgQVI1S19UU0ZfTDMyKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsICh0c2Y2NCA+PiAzMikgJiAweGZmZmZmZmZmLCBBUjVLX1RTRl9VMzIpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jCmluZGV4IDE1MzFjY2QuLjY4NWRjMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVzZXQuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgKiBpbmRleCBpbnRvIHJhdGVzIGZvciBjb250cm9sIHJhdGVzLCB3ZSBjYW4gc2V0IGl0IHVwIGxpa2UgdGhpcyBiZWNhdXNlCiAgKiB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgQVI1MjEyIGFuZCB3ZSBrbm93IGl0IHN1cHBvcnRzIEcgbW9kZQogICovCi1zdGF0aWMgaW50IGNvbnRyb2xfcmF0ZXNbXSA9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNvbnRyb2xfcmF0ZXNbXSA9CiAJeyAwLCAxLCAxLCAxLCA0LCA0LCA2LCA2LCA4LCA4LCA4LCA4IH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQppbmRleCAwMDYyOTU4Li4xYTRkNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIAkJbWFpbi5vIFwKIAkJcmVjdi5vIFwKIAkJeG1pdC5vIFwKKwkJdmlydHVhbC5vIFwKIAkJcmMubwogCiBhdGg5ay0kKENPTkZJR19QQ0kpICs9IHBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jCmluZGV4IDM5MWM5ZmQuLjAwY2M3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jCkBAIC02MCw2ICs2MCw3IEBACiBzdGF0aWMgaW50IGF0aF9haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAl2b2lkIF9faW9tZW0gKm1lbTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtOTYsNyArOTcsOCBAQAogCiAJaXJxID0gcmVzLT5zdGFydDsKIAotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpICsKKwkJCQlzaXplb2Yoc3RydWN0IGF0aF9zb2Z0YyksICZhdGg5a19vcHMpOwogCWlmIChodyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTEwNiw3ICsxMDgsMTEgQEAKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOwogCi0Jc2MgPSBody0+cHJpdjsKKwlhcGh5ID0gaHctPnByaXY7CisJc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSAoYXBoeSArIDEpOworCWFwaHktPnNjID0gc2M7CisJYXBoeS0+aHcgPSBodzsKKwlzYy0+cHJpX3dpcGh5ID0gYXBoeTsKIAlzYy0+aHcgPSBodzsKIAlzYy0+ZGV2ID0gJnBkZXYtPmRldjsKIAlzYy0+bWVtID0gbWVtOwpAQCAtMTU2LDcgKzE2Miw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChodykgewotCQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKIAkJYXRoX2NsZWFudXAoc2MpOwogCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmMKaW5kZXggZDRkZjdlNi4uYTM5ZWI3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmMKQEAgLTY0MiwxNCArNjQyLDEzIEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKIH0KIAorLyogRnJlZXplIHRoZSBNSUIgY291bnRlcnMsIGdldCB0aGUgc3RhdHMgYW5kIHRoZW4gY2xlYXIgdGhlbSAqLwogdm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJEaXNhYmxlIE1JQiBjb3VudGVyc1xuIik7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfRk1DIHwgQVJfTUlCQ19DTUMpOwotCisJUkVHX1dSSVRFKGFoLCBBUl9NSUJDLCBBUl9NSUJDX0ZNQyk7CiAJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKLQorCVJFR19XUklURShhaCwgQVJfTUlCQywgQVJfTUlCQ19DTUMpOwogCVJFR19XUklURShhaCwgQVJfRklMVF9PRkRNLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfQ0NLLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCmluZGV4IDBiMGY4MmMuLmI2NGJlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYXRoOWsuaApAQCAtMjkyLDYgKzI5Miw3IEBACiBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgewogCXN0cnVjdCBhdGhfdHhxICp0eHE7CiAJaW50IGlmX2lkOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOwogfTsKIAogc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7CkBAIC0zNzMsMTAgKzM3NCwxMCBAQAogc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKIAkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBhdGhfdHhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKTsKIHZvaWQgYXRoX3R4X3Rhc2tsZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGJvb2wgYXRoX3R4X2FnZ3JfY2hlY2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKTsKIGludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pOwpAQCAtMzg3LDIyICszODgsMTIgQEAKIC8qIFZJRnMgKi8KIC8qKioqKioqKi8KIAotLyoKLSAqIERlZmluZSB0aGUgc2NoZW1lIHRoYXQgd2Ugc2VsZWN0IE1BQyBhZGRyZXNzIGZvciBtdWx0aXBsZQotICogQlNTIG9uIHRoZSBzYW1lIHJhZGlvLiBUaGUgdmVyeSBmaXJzdCBWSUYgd2lsbCBqdXN0IHVzZSB0aGUgTUFDCi0gKiBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTS4gRm9yIHRoZSBuZXh0IDMgVklGcywgd2Ugc2V0IHRoZQotICogVS9MIGJpdCAoYml0IDEpIGluIE1BQyBhZGRyZXNzLCBhbmQgdXNlIHRoZSBuZXh0IHR3byBiaXRzIGFzIHRoZQotICogaW5kZXggb2YgdGhlIFZJRi4KLSAqLwotCi0jZGVmaW5lIEFUSF9TRVRfVklGX0JTU0lEX01BU0soYnNzaWRfbWFzaykgXAotCSgoYnNzaWRfbWFzaylbMF0gJj0gfigoKEFUSF9CQ0JVRi0xKTw8Mil8MHgwMikpCi0KIHN0cnVjdCBhdGhfdmlmIHsKIAlpbnQgYXZfYnNsb3Q7CiAJZW51bSBubDgwMjExX2lmdHlwZSBhdl9vcG1vZGU7CiAJc3RydWN0IGF0aF9idWYgKmF2X2JjYnVmOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCBhdl9idHhjdGw7CisJdTggYnNzaWRbRVRIX0FMRU5dOyAvKiBjdXJyZW50IEJTU0lEIGZyb20gY29uZmlnX2ludGVyZmFjZSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKiovCkBAIC00MjYsMTEgKzQxNyw2IEBACiAJdTE2IGR0aW1fcGVyaW9kOwogCXUxNiBibWlzc190aW1lb3V0OwogCXU4IGR0aW1fY291bnQ7Ci0JdTggdGltX29mZnNldDsKLQl1bmlvbiB7Ci0JCXU2NCBsYXN0X3RzZjsKLQkJdTggbGFzdF90c3RhbXBbOF07Ci0JfSB1OyAvKiBsYXN0IHJlY2VpdmVkIGJlYWNvbi9wcm9iZSByZXNwb25zZSB0aW1lc3RhbXAgb2YgdGhpcyBCU1MuICovCiB9OwogCiBzdHJ1Y3QgYXRoX2JlYWNvbiB7CkBAIC00NDQsNyArNDMwLDggQEAKIAl1MzIgYm1pc3NjbnQ7CiAJdTMyIGFzdF9iZV94bWl0OwogCXU2NCBiY190c3RhbXA7Ci0JaW50IGJzbG90W0FUSF9CQ0JVRl07CisJc3RydWN0IGllZWU4MDIxMV92aWYgKmJzbG90W0FUSF9CQ0JVRl07CisJc3RydWN0IGF0aF93aXBoeSAqYnNsb3RfYXBoeVtBVEhfQkNCVUZdOwogCWludCBzbG90dGltZTsKIAlpbnQgc2xvdHVwZGF0ZTsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBiZWFjb25fcWk7CkBAIC00NTMsMjQgKzQ0MCwyMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYmJ1ZjsKIH07CiAKLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7Cit2b2lkIGF0aF9iZWFjb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiBpbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9odyAqYWgpOwotaW50IGF0aF9iZWFjb25fYWxsb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7CitpbnQgYXRoX2JlYWNvbl9hbGxvYyhzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHZvaWQgYXRoX2JlYWNvbl9yZXR1cm4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmlmICphdnApOwotdm9pZCBhdGhfYmVhY29uX3N5bmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7CiAKIC8qKioqKioqLwogLyogQU5JICovCiAvKioqKioqKi8KIAotLyogQU5JIHZhbHVlcyBmb3IgU1RBIG9ubHkuCi0gICBGSVhNRTogQWRkIGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgQVAgbGF0ZXIgKi8KLQotI2RlZmluZSBBVEhfQU5JX1BPTExJTlRFUlZBTCAgICAxMDAgICAgIC8qIDEwMCBtaWxsaXNlY29uZHMgYmV0d2VlbiBBTkkgcG9sbCAqLwotI2RlZmluZSBBVEhfU0hPUlRfQ0FMSU5URVJWQUwgICAxMDAwICAgIC8qIDEgc2Vjb25kIGJldHdlZW4gY2FsaWJyYXRpb25zICovCi0jZGVmaW5lIEFUSF9MT05HX0NBTElOVEVSVkFMICAgIDMwMDAwICAgLyogMzAgc2Vjb25kcyBiZXR3ZWVuIGNhbGlicmF0aW9ucyAqLwotI2RlZmluZSBBVEhfUkVTVEFSVF9DQUxJTlRFUlZBTCAxMjAwMDAwIC8qIDIwIG1pbnV0ZXMgYmV0d2VlbiBjYWxpYnJhdGlvbnMgKi8KKyNkZWZpbmUgQVRIX1NUQV9TSE9SVF9DQUxJTlRFUlZBTCAxMDAwICAgIC8qIDEgc2Vjb25kICovCisjZGVmaW5lIEFUSF9BUF9TSE9SVF9DQUxJTlRFUlZBTCAgMTAwICAgICAvKiAxMDAgbXMgKi8KKyNkZWZpbmUgQVRIX0FOSV9QT0xMSU5URVJWQUwgICAgICAxMDAgICAgIC8qIDEwMCBtcyAqLworI2RlZmluZSBBVEhfTE9OR19DQUxJTlRFUlZBTCAgICAgIDMwMDAwICAgLyogMzAgc2Vjb25kcyAqLworI2RlZmluZSBBVEhfUkVTVEFSVF9DQUxJTlRFUlZBTCAgIDEyMDAwMDAgLyogMjAgbWludXRlcyAqLwogCiBzdHJ1Y3QgYXRoX2FuaSB7CiAJYm9vbCBjYWxkb25lOwpAQCAtNTQwLDI3ICs1MjQsMjcgQEAKICAqLwogI2RlZmluZQlBVEhfS0VZTUFYCSAgICAgICAgMTI4ICAgICAvKiBtYXgga2V5IGNhY2hlIHNpemUgd2UgaGFuZGxlICovCiAKLSNkZWZpbmUgQVRIX0lGX0lEX0FOWSAgIAkweGZmCiAjZGVmaW5lIEFUSF9UWFBPV0VSX01BWCAgICAgICAgIDEwMCAgICAgLyogLjUgZEJtIHVuaXRzICovCiAjZGVmaW5lIEFUSF9SU1NJX0RVTU1ZX01BUktFUiAgIDB4MTI3CiAjZGVmaW5lIEFUSF9SQVRFX0RVTU1ZX01BUktFUiAgIDAKIAotI2RlZmluZSBTQ19PUF9JTlZBTElECQlCSVQoMCkKLSNkZWZpbmUgU0NfT1BfQkVBQ09OUwkJQklUKDEpCi0jZGVmaW5lIFNDX09QX1JYQUdHUgkJQklUKDIpCi0jZGVmaW5lIFNDX09QX1RYQUdHUgkJQklUKDMpCi0jZGVmaW5lIFNDX09QX0NIQUlOTUFTS19VUERBVEUJQklUKDQpCi0jZGVmaW5lIFNDX09QX0ZVTExfUkVTRVQJQklUKDUpCi0jZGVmaW5lIFNDX09QX05PX1JFU0VUCQlCSVQoNikKLSNkZWZpbmUgU0NfT1BfUFJFQU1CTEVfU0hPUlQJQklUKDcpCi0jZGVmaW5lIFNDX09QX1BST1RFQ1RfRU5BQkxFCUJJVCg4KQotI2RlZmluZSBTQ19PUF9SWEZMVVNICQlCSVQoOSkKLSNkZWZpbmUgU0NfT1BfTEVEX0FTU09DSUFURUQJQklUKDEwKQotI2RlZmluZSBTQ19PUF9SRktJTExfUkVHSVNURVJFRAlCSVQoMTEpCi0jZGVmaW5lIFNDX09QX1JGS0lMTF9TV19CTE9DS0VECUJJVCgxMikKLSNkZWZpbmUgU0NfT1BfUkZLSUxMX0hXX0JMT0NLRUQJQklUKDEzKQotI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04JQklUKDE0KQotI2RlZmluZSBTQ19PUF9MRURfT04JCUJJVCgxNSkKKyNkZWZpbmUgU0NfT1BfSU5WQUxJRCAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFNDX09QX0JFQUNPTlMgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBTQ19PUF9SWEFHR1IgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgU0NfT1BfVFhBR0dSICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lIFNDX09QX0NIQUlOTUFTS19VUERBVEUgIEJJVCg0KQorI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUICAgICAgICBCSVQoNSkKKyNkZWZpbmUgU0NfT1BfUFJFQU1CTEVfU0hPUlQgICAgQklUKDYpCisjZGVmaW5lIFNDX09QX1BST1RFQ1RfRU5BQkxFICAgIEJJVCg3KQorI2RlZmluZSBTQ19PUF9SWEZMVVNIICAgICAgICAgICBCSVQoOCkKKyNkZWZpbmUgU0NfT1BfTEVEX0FTU09DSUFURUQgICAgQklUKDkpCisjZGVmaW5lIFNDX09QX1JGS0lMTF9SRUdJU1RFUkVEIEJJVCgxMCkKKyNkZWZpbmUgU0NfT1BfUkZLSUxMX1NXX0JMT0NLRUQgQklUKDExKQorI2RlZmluZSBTQ19PUF9SRktJTExfSFdfQkxPQ0tFRCBCSVQoMTIpCisjZGVmaW5lIFNDX09QX1dBSVRfRk9SX0JFQUNPTiAgIEJJVCgxMykKKyNkZWZpbmUgU0NfT1BfTEVEX09OICAgICAgICAgICAgQklUKDE0KQorI2RlZmluZSBTQ19PUF9TQ0FOTklORyAgICAgICAgICBCSVQoMTUpCisjZGVmaW5lIFNDX09QX1RTRl9SRVNFVCAgICAgICAgIEJJVCgxNikKIAogc3RydWN0IGF0aF9idXNfb3BzIHsKIAl2b2lkCQkoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opOwpAQCAtNTY4LDE1ICs1NTIsMzQgQEAKIAlib29sCQkoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKTsKIH07CiAKK3N0cnVjdCBhdGhfd2lwaHk7CisKIHN0cnVjdCBhdGhfc29mdGMgewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXNwaW5sb2NrX3Qgd2lwaHlfbG9jazsgLyogc3BpbmxvY2sgdG8gcHJvdGVjdCBhdGhfd2lwaHkgZGF0YSAqLworCXN0cnVjdCBhdGhfd2lwaHkgKnByaV93aXBoeTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICoqc2VjX3dpcGh5OyAvKiBzZWNvbmRhcnkgd2lwaHlzICh2aXJ0dWFsIHJhZGlvcyk7IG1heQorCQkJCSAgICAgICAqIGhhdmUgTlVMTCBlbnRyaWVzICovCisJaW50IG51bV9zZWNfd2lwaHk7IC8qIG51bWJlciBvZiBzZWNfd2lwaHkgcG9pbnRlcnMgaW4gdGhlIGFycmF5ICovCisJaW50IGNoYW5faWR4OworCWludCBjaGFuX2lzX2h0OworCXN0cnVjdCBhdGhfd2lwaHkgKm5leHRfd2lwaHk7CisJc3RydWN0IHdvcmtfc3RydWN0IGNoYW5fd29yazsKKwlpbnQgd2lwaHlfc2VsZWN0X2ZhaWx1cmVzOworCXVuc2lnbmVkIGxvbmcgd2lwaHlfc2VsZWN0X2ZpcnN0X2ZhaWw7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3aXBoeV93b3JrOworCXVuc2lnbmVkIGxvbmcgd2lwaHlfc2NoZWR1bGVyX2ludDsKKwlpbnQgd2lwaHlfc2NoZWR1bGVyX2luZGV4OworCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKIAlzdHJ1Y3QgYXRoX2h3ICpzY19haDsKIAl2b2lkIF9faW9tZW0gKm1lbTsKIAlpbnQgaXJxOwogCXNwaW5sb2NrX3Qgc2NfcmVzZXRsb2NrOworCXNwaW5sb2NrX3Qgc2Nfc2VyaWFsX3J3OwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAogCXU4IGN1cmJzc2lkW0VUSF9BTEVOXTsKQEAgLTYwMiw3ICs2MDUsNiBAQAogCXN0cnVjdCBhdGhfcnggcng7CiAJc3RydWN0IGF0aF90eCB0eDsKIAlzdHJ1Y3QgYXRoX2JlYWNvbiBiZWFjb247Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZnNbQVRIX0JDQlVGXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU11bQVRIX1JBVEVfTUFYXTsKIAlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV9NQVhdOwogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqY3VyX3JhdGVfdGFibGU7CkBAIC02MjcsNiArNjI5LDIwIEBACiAJc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzOwogfTsKIAorc3RydWN0IGF0aF93aXBoeSB7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2M7IC8qIHNoYXJlZCBmb3IgYWxsIHZpcnR1YWwgd2lwaHlzICovCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJZW51bSBhdGhfd2lwaHlfc3RhdGUgeworCQlBVEhfV0lQSFlfSU5BQ1RJVkUsCisJCUFUSF9XSVBIWV9BQ1RJVkUsCisJCUFUSF9XSVBIWV9QQVVTSU5HLAorCQlBVEhfV0lQSFlfUEFVU0VELAorCQlBVEhfV0lQSFlfU0NBTiwKKwl9IHN0YXRlOworCWludCBjaGFuX2lkeDsKKwlpbnQgY2hhbl9pc19odDsKK307CisKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwogaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiBpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwpAQCAtNjUwLDYgKzY2NiwxNCBAQAogdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIGNvbnN0IGNoYXIgKmF0aF9tYWNfYmJfbmFtZSh1MzIgbWFjX2JiX3ZlcnNpb24pOwogY29uc3QgY2hhciAqYXRoX3JmX25hbWUodTE2IHJmX3ZlcnNpb24pOwordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGF0aDlrX3VwZGF0ZV9pY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4pOwordm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KTsKK2ludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmhjaGFuKTsKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIGludCBhdGhfcGNpX2luaXQodm9pZCk7CkBAIC02NzksOCArNzAzLDU4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfcmVzdG9yZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2MtPnBzX3VzZWNvdW50KSkKLQkJaWYgKHNjLT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQorCQlpZiAoKHNjLT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSAmJgorCQkgICAgIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9XQUlUX0ZPUl9CRUFDT04pKQogCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLAogCQkJCQkgIHNjLT5zY19haC0+cmVzdG9yZV9tb2RlKTsKIH0KKworCit2b2lkIGF0aDlrX3NldF9ic3NpZF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2ludCBhdGg5a193aXBoeV9hZGQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aDlrX3dpcGh5X2RlbChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KTsKK3ZvaWQgYXRoOWtfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBhdGg5a193aXBoeV9wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KTsKK2ludCBhdGg5a193aXBoeV91bnBhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOworaW50IGF0aDlrX3dpcGh5X3NlbGVjdChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KTsKK3ZvaWQgYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdW5zaWduZWQgaW50IG1zZWNfaW50KTsKK3ZvaWQgYXRoOWtfd2lwaHlfY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Citib29sIGF0aDlrX3dpcGh5X3N0YXJ0ZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgc3RydWN0IGF0aF93aXBoeSAqc2VsZWN0ZWQpOworYm9vbCBhdGg5a193aXBoeV9zY2FubmluZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX3dpcGh5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworLyoKKyAqIFJlYWQgYW5kIHdyaXRlLCB0aGV5IGJvdGggc2hhcmUgdGhlIHNhbWUgbG9jay4gV2UgZG8gdGhpcyB0byBzZXJpYWxpemUKKyAqIHJlYWRzIGFuZCB3cml0ZXMgb24gQXRoZXJvcyA4MDIuMTFuIFBDSSBkZXZpY2VzIG9ubHkuIFRoaXMgaXMgcmVxdWlyZWQKKyAqIGFzIHRoZSBGSUZPIG9uIHRoZXNlIGRldmljZXMgY2FuIG9ubHkgYWNjZXB0IHNhbmVseSAyIHJlcXVlc3RzLiBBZnRlcgorICogdGhhdCB0aGUgZGV2aWNlIGdvZXMgYmFuYW5hcy4gU2VyaWFsaXppbmcgdGhlIHJlYWRzL3dyaXRlcyBwcmV2ZW50cyB0aGlzCisgKiBmcm9tIGhhcHBlbmluZy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaW93cml0ZTMyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcmVnX29mZnNldCwgdTMyIHZhbCkKK3sKKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJfSBlbHNlCisJCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0aDlrX2lvcmVhZDMyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcmVnX29mZnNldCkKK3sKKwl1MzIgdmFsOworCWlmIChhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9PTikgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWgtPmFoX3NjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwkJdmFsID0gaW9yZWFkMzIoYWgtPmFoX3NjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWgtPmFoX3NjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwl9IGVsc2UKKwkJdmFsID0gaW9yZWFkMzIoYWgtPmFoX3NjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwlyZXR1cm4gdmFsOworfQorCiAjZW5kaWYgLyogQVRIOUtfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9iZWFjb24uYwppbmRleCAyZTJlZjM1Li4wMzljNzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9iZWFjb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9iZWFjb24uYwpAQCAtMTYsNiArMTYsOCBAQAogCiAjaW5jbHVkZSAiYXRoOWsuaCIKIAorI2RlZmluZSBGVURHRSAyCisKIC8qCiAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSBjZXJ0YWluIHRyYW5zbWl0IHF1ZXVlIHByb3BlcnRpZXMgZGVwZW5kaW5nIG9uCiAgKiAgdGhlIG9wZXJhdGluZyBtb2RlIG9mIHRoZSBzdGF0aW9uIChBUCBvciBBZEhvYykuICBQYXJhbWV0ZXJzIGFyZSBBSUZTCkBAIC00NCw0MiArNDYsMjggQEAKIAkJCSJ1bmFibGUgdG8gdXBkYXRlIGgvdyBiZWFjb24gcXVldWUgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgc2MtPmJlYWNvbi5iZWFjb25xKTsgLyogcHVzaCB0byBoL3cgKi8KKwkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCQlyZXR1cm4gMTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9ic3R1Y2tfcHJvY2VzcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJInN0dWNrIGJlYWNvbjsgcmVzZXR0aW5nIChibWlzcyBjb3VudCAldSlcbiIsCi0JCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCWF0aF9yZXNldChzYywgZmFsc2UpOwotfQotCiAvKgogICogIEFzc29jaWF0ZXMgdGhlIGJlYWNvbiBmcmFtZSBidWZmZXIgd2l0aCBhIHRyYW5zbWl0IGRlc2NyaXB0b3IuICBXaWxsIHNldAogICogIHVwIGFsbCByZXF1aXJlZCBhbnRlbm5hIHN3aXRjaCBwYXJhbWV0ZXJzLCByYXRlIGNvZGVzLCBhbmQgY2hhbm5lbCBmbGFncy4KICAqICBCZWFjb25zIGFyZSBhbHdheXMgc2VudCBvdXQgYXQgdGhlIGxvd2VzdCByYXRlLCBhbmQgYXJlIG5vdCByZXRyaWVkLgogKi8KLXN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfdmlmICphdnAsIHN0cnVjdCBhdGhfYnVmICpiZikKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmlmICphdnAsCisJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9kZXNjICpkczsKIAlzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1s0XTsKIAlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0OwotCWludCBmbGFncywgYW50ZW5uYTsKLQl1OCByaXgsIHJhdGU7Ci0JaW50IGN0c3JhdGUgPSAwOwotCWludCBjdHNkdXJhdGlvbiA9IDA7CisJaW50IGZsYWdzLCBhbnRlbm5hLCBjdHNyYXRlID0gMCwgY3RzZHVyYXRpb24gPSAwOworCXU4IHJhdGU7CiAKLQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwgIm0gJXAgbGVuICV1XG4iLCBza2IsIHNrYi0+bGVuKTsKLQotCS8qIHNldHVwIGRlc2NyaXB0b3JzICovCiAJZHMgPSBiZi0+YmZfZGVzYzsKLQogCWZsYWdzID0gQVRIOUtfVFhERVNDX05PQUNLOwogCiAJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCkBAIC05Miw2NSArODAsNTMgQEAKIAkJZHMtPmRzX2xpbmsgPSAwOwogCQkvKgogCQkgKiBTd2l0Y2ggYW50ZW5uYSBldmVyeSBiZWFjb24uCi0JCSAqIFNob3VsZCBvbmx5IHN3aXRjaCBldmVyeSBiZWFjb24gcGVyaW9kLCBub3QgZm9yIGV2ZXJ5Ci0JCSAqIFNXQkEncwotCQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYQorCQkgKiBTaG91bGQgb25seSBzd2l0Y2ggZXZlcnkgYmVhY29uIHBlcmlvZCwgbm90IGZvciBldmVyeSBTV0JBCisJCSAqIFhYWCBhc3N1bWVzIHR3byBhbnRlbm5hZQogCQkgKi8KIAkJYW50ZW5uYSA9ICgoc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCAvIHNjLT5uYmNudmlmcykgJiAxID8gMiA6IDEpOwogCX0KIAogCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwogCi0JLyoKLQkgKiBDYWxjdWxhdGUgcmF0ZSBjb2RlLgotCSAqIFhYWCBldmVyeXRoaW5nIGF0IG1pbiB4bWl0IHJhdGUKLQkgKi8KLQlyaXggPSAwOwogCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCXJhdGUgPSBydC0+aW5mb1swXS5yYXRlY29kZTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCi0JCXJhdGUgfD0gcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJcmF0ZSB8PSBydC0+aW5mb1swXS5zaG9ydF9wcmVhbWJsZTsKIAotCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLAotCQkJICAgICAgIHNrYi0+bGVuICsgRkNTX0xFTiwgICAgIC8qIGZyYW1lIGxlbmd0aCAqLwotCQkJICAgICAgIEFUSDlLX1BLVF9UWVBFX0JFQUNPTiwgIC8qIEF0aGVyb3MgcGFja2V0IHR5cGUgKi8KLQkJCSAgICAgICBNQVhfUkFURV9QT1dFUiwgICAgICAgICAvKiBGSVhNRSAqLwotCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwgIC8qIG5vIGVuY3J5cHRpb24gKi8KLQkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwgICAvKiBubyBlbmNyeXB0aW9uICovCi0JCQkgICAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgLyogbm8gYWNrLAotCQkJCQkJCSAgdmVvbCBmb3IgYmVhY29ucyAqLwotCQkpOworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCisJCQkgICAgICAgQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAorCQkJICAgICAgIE1BWF9SQVRFX1BPV0VSLAorCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwkJCSAgICAgICBmbGFncyk7CiAKIAkvKiBOQjogYmVhY29uJ3MgQnVmTGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgcm91bmR1cChza2ItPmxlbiwgNCksIC8qIGJ1ZmZlciBsZW5ndGggKi8KLQkJCSAgICB0cnVlLCAgICAgICAgICAgICAgICAgLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsICAgICAgICAgICAgICAgICAvKiBsYXN0IHNlZ21lbnQgKi8KLQkJCSAgICBkcyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCQkpOworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLCByb3VuZHVwKHNrYi0+bGVuLCA0KSwKKwkJCSAgICB0cnVlLCB0cnVlLCBkcyk7CiAKIAltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKIAlzZXJpZXNbMF0uVHJpZXMgPSAxOwogCXNlcmllc1swXS5SYXRlID0gcmF0ZTsKIAlzZXJpZXNbMF0uQ2hTZWwgPSBzYy0+dHhfY2hhaW5tYXNrOwogCXNlcmllc1swXS5SYXRlRmxhZ3MgPSAoY3RzcmF0ZSkgPyBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgOiAwOwotCWF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oYWgsIGRzLCBkcywgMCwKLQkJY3RzcmF0ZSwgY3RzZHVyYXRpb24sIHNlcmllcywgNCwgMCk7CisJYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhhaCwgZHMsIGRzLCAwLCBjdHNyYXRlLCBjdHNkdXJhdGlvbiwKKwkJCQkgICAgIHNlcmllcywgNCwgMCk7CiB9CiAKLS8qIEdlbmVyYXRlIGJlYWNvbiBmcmFtZSBhbmQgcXVldWUgY2FiIGRhdGEgZm9yIGEgVklGICovCi1zdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aF9iZWFjb25fZ2VuZXJhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJc3RydWN0IGF0aF92aWYgKmF2cDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBhdGhfdHhxICpjYWJxOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCWludCBjYWJxX2RlcHRoOwogCi0JdmlmID0gc2MtPnZpZnNbaWZfaWRdOwotCUFTU0VSVCh2aWYpOworCWlmIChhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfQUNUSVZFKQorCQlyZXR1cm4gTlVMTDsKIAogCWF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKIAljYWJxID0gc2MtPmJlYWNvbi5jYWJxOwpAQCAtMTYxLDE2ICsxMzcsMTkgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJLyogUmVsZWFzZSB0aGUgb2xkIGJlYWNvbiBmaXJzdCAqLworCiAJYmYgPSBhdnAtPmF2X2JjYnVmOwogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwogCWlmIChza2IpIHsKIAkJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKLQkJCQkgc2tiLT5sZW4sCi0JCQkJIERNQV9UT19ERVZJQ0UpOworCQkJCSBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQogCi0Jc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoc2MtPmh3LCB2aWYpOworCS8qIEdldCBhIG5ldyBiZWFjb24gZnJvbSBtYWM4MDIxMSAqLworCisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CiAJYmYtPmJmX21wZHUgPSBza2I7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE4OSwxNyArMTY4LDE1IEBACiAKIAliZi0+YmZfYnVmX2FkZHIgPSBiZi0+YmZfZG1hY29udGV4dCA9CiAJCWRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKLQkJCSAgICAgICBza2ItPmxlbiwKLQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJCSAgICAgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkcikpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWJmLT5iZl9tcGR1ID0gTlVMTDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkiZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBiZWFjb25pbmdcbiIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uaW5nXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHZpZik7CisJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhodywgdmlmKTsKIAogCS8qCiAJICogaWYgdGhlIENBQlEgdHJhZmZpYyBmcm9tIHByZXZpb3VzIERUSU0gaXMgcGVuZGluZyBhbmQgdGhlIGN1cnJlbnQKQEAgLTIxNCwyOCArMTkxLDE4IEBACiAJc3Bpbl91bmxvY2tfYmgoJmNhYnEtPmF4cV9sb2NrKTsKIAogCWlmIChza2IgJiYgY2FicV9kZXB0aCkgewotCQkvKgotCQkgKiBVbmxvY2sgdGhlIGNhYnEgbG9jayBhcyBhdGhfdHhfZHJhaW50eHEgYWNxdWlyZXMKLQkJICogdGhlIGxvY2sgYWdhaW4gd2hpY2ggaXMgYSBjb21tb24gZnVuY3Rpb24gYW5kIHRoYXQKLQkJICogYWNxdWlyZXMgdHhxIGxvY2sgaW5zaWRlLgotCQkgKi8KIAkJaWYgKHNjLT5udmlmcyA+IDEpIHsKLQkJCWF0aF9kcmFpbnR4cShzYywgY2FicSwgZmFsc2UpOwogCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJImZsdXNoIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQkJIkZsdXNoaW5nIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQlhdGhfZHJhaW50eHEoc2MsIGNhYnEsIGZhbHNlKTsKIAkJfQogCX0KIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCi0JLyoKLQkgKiBFbmFibGUgdGhlIENBQiBxdWV1ZSBiZWZvcmUgdGhlIGJlYWNvbiBxdWV1ZSB0bwotCSAqIGluc3VyZSBjYWIgZnJhbWVzIGFyZSB0cmlnZ2VyZWQgYnkgdGhpcyBiZWFjb24uCi0JICovCiAJd2hpbGUgKHNrYikgewotCQlhdGhfdHhfY2FicShzYywgc2tiKTsKLQkJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHZpZik7CisJCWF0aF90eF9jYWJxKGh3LCBza2IpOworCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGh3LCB2aWYpOwogCX0KIAogCXJldHVybiBiZjsKQEAgLTI0NSwyOCArMjEyLDIyIEBACiAgKiBTdGFydHVwIGJlYWNvbiB0cmFuc21pc3Npb24gZm9yIGFkaG9jIG1vZGUgd2hlbiB0aGV5IGFyZSBzZW50IGVudGlyZWx5CiAgKiBieSB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIHNlbGYtbGlua2VkIGRlc2NyaXB0b3IgKyB2ZW9sIHRyaWNrLgogKi8KLXN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKIAlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQl2aWYgPSBzYy0+dmlmc1tpZl9pZF07Ci0JQVNTRVJUKHZpZik7Ci0KIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKLQlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAiYXZwPSVwIGF2X2JjYnVmPSVwXG4iLAotCQkJYXZwLCBhdnAgIT0gTlVMTCA/IGF2cC0+YXZfYmNidWYgOiBOVUxMKTsKKwlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQorCiAJYmYgPSBhdnAtPmF2X2JjYnVmOwogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBiZi0+YmZfbXBkdTsKIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCiAJLyogTkI6IGNhbGxlciBpcyBrbm93biB0byBoYXZlIGFscmVhZHkgc3RvcHBlZCB0eCBkbWEgKi8KQEAgLTI4OCwxOCArMjQ5LDE1IEBACiAJcmV0dXJuIGF0aDlrX2h3X3NldHVwdHhxdWV1ZShhaCwgQVRIOUtfVFhfUVVFVUVfQkVBQ09OLCAmcWkpOwogfQogCi1pbnQgYXRoX2JlYWNvbl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQoraW50IGF0aF9iZWFjb25fYWxsb2Moc3RydWN0IGF0aF93aXBoeSAqYXBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGF0aF92aWYgKmF2cDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fbGU2NCB0c3RhbXA7CiAKLQl2aWYgPSBzYy0+dmlmc1tpZl9pZF07Ci0JQVNTRVJUKHZpZik7Ci0KIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKIAkvKiBBbGxvY2F0ZSBhIGJlYWNvbiBkZXNjcmlwdG9yIGlmIHdlIGhhdmVuJ3QgZG9uZSBzby4gKi8KQEAgLTMxOSw0MiArMjc3LDM3IEBACiAJCQkgKi8KIAkJCWF2cC0+YXZfYnNsb3QgPSAwOwogCQkJZm9yIChzbG90ID0gMDsgc2xvdCA8IEFUSF9CQ0JVRjsgc2xvdCsrKQotCQkJCWlmIChzYy0+YmVhY29uLmJzbG90W3Nsb3RdID09IEFUSF9JRl9JRF9BTlkpIHsKKwkJCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSA9PSBOVUxMKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFhYWCBoYWNrLCBzcGFjZSBvdXQgc2xvdHMgdG8gYmV0dGVyCiAJCQkJCSAqIGRlYWwgd2l0aCBtaXNzZXMKIAkJCQkJICovCiAJCQkJCWlmIChzbG90KzEgPCBBVEhfQkNCVUYgJiYKLQkJCQkJICAgIHNjLT5iZWFjb24uYnNsb3Rbc2xvdCsxXSA9PQotCQkJCQkJQVRIX0lGX0lEX0FOWSkgeworCQkJCQkgICAgc2MtPmJlYWNvbi5ic2xvdFtzbG90KzFdID09IE5VTEwpIHsKIAkJCQkJCWF2cC0+YXZfYnNsb3QgPSBzbG90KzE7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQlhdnAtPmF2X2JzbG90ID0gc2xvdDsKIAkJCQkJLyogTkI6IGtlZXAgbG9va2luZyBmb3IgYSBkb3VibGUgc2xvdCAqLwogCQkJCX0KLQkJCUJVR19PTihzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdICE9IEFUSF9JRl9JRF9BTlkpOwotCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IGlmX2lkOworCQkJQlVHX09OKHNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gIT0gTlVMTCk7CisJCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gdmlmOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2F2cC0+YXZfYnNsb3RdID0gYXBoeTsKIAkJCXNjLT5uYmNudmlmcysrOwogCQl9CiAJfQogCi0JLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lICwgaWYgaXQgYWxyZWFkeSBleGlzdHMuICovCisJLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KIAliZiA9IGF2cC0+YXZfYmNidWY7CiAJaWYgKGJmLT5iZl9tcGR1ICE9IE5VTEwpIHsKIAkJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CiAJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCi0JCQkJIHNrYi0+bGVuLAotCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJfQogCi0JLyoKLQkgKiBOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLgotCSAqIEZJWE1FOiBGaWxsIGF2cC0+YXZfYnR4Y3RsLnR4cG93ZXIgYW5kCi0JICogYXZwLT5hdl9idHhjdGwuc2hvcnRQcmVhbWJsZQotCSAqLworCS8qIE5COiB0aGUgYmVhY29uIGRhdGEgYnVmZmVyIG11c3QgYmUgMzItYml0IGFsaWduZWQuICovCiAJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoc2MtPmh3LCB2aWYpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwgImNhbm5vdCBnZXQgc2tiXG4iKTsKQEAgLTQwMywxMyArMzU2LDEyIEBACiAJYmYtPmJmX21wZHUgPSBza2I7CiAJYmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2RtYWNvbnRleHQgPQogCQlkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCBza2ItPmRhdGEsCi0JCQkgICAgICAgc2tiLT5sZW4sCi0JCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCQkgICAgICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gYmVhY29uIGFsbG9jXG4iKTsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJkbWFfbWFwcGluZ19lcnJvciBvbiBiZWFjb24gYWxsb2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQyMiw3ICszNzQsOCBAQAogCQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAKIAkJaWYgKGF2cC0+YXZfYnNsb3QgIT0gLTEpIHsKLQkJCXNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gPSBBVEhfSUZfSURfQU5ZOworCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBOVUxMOwogCQkJc2MtPm5iY252aWZzLS07CiAJCX0KIApAQCAtNDMwLDggKzM4Myw3IEBACiAJCWlmIChiZi0+YmZfbXBkdSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CiAJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCQkgc2tiLT5sZW4sCi0JCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJCX0KQEAgLTQ0MSw5MiArMzkzLDQ1IEBACiAJfQogfQogCi12b2lkIGF0aDlrX2JlYWNvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3ZvaWQgYXRoX2JlYWNvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopZGF0YTsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBOVUxMOwotCWludCBzbG90LCBpZl9pZDsKLQl1MzIgYmZhZGRyOwotCXUzMiByeF9jbGVhciA9IDAsIHJ4X2ZyYW1lID0gMCwgdHhfZnJhbWUgPSAwOwotCXUzMiBzaG93X2N5Y2xlcyA9IDA7Ci0JdTMyIGJjID0gMDsgLyogYmVhY29uIGNvdW50ICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCWludCBzbG90OworCXUzMiBiZmFkZHIsIGJjID0gMCwgdHNmdHU7CiAJdTY0IHRzZjsKLQl1MzIgdHNmdHU7CiAJdTE2IGludHZhbDsKIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQlzaG93X2N5Y2xlcyA9IGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KGFoLAotCQkJCQkgICAgJnJ4X2NsZWFyLCAmcnhfZnJhbWUsICZ0eF9mcmFtZSk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgcHJldmlvdXMgYmVhY29uIGhhcyBnb25lIG91dC4gIElmCiAJICogbm90IGRvbid0IHRyeSB0byBwb3N0IGFub3RoZXIsIHNraXAgdGhpcyBwZXJpb2QKIAkgKiBhbmQgd2FpdCBmb3IgdGhlIG5leHQuICBNaXNzZWQgYmVhY29ucyBpbmRpY2F0ZQogCSAqIGEgcHJvYmxlbSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIElmIHdlIG1pc3MgdG9vCiAJICogbWFueSBjb25zZWN1dGl2ZSBiZWFjb25zIHJlc2V0IHRoZSBkZXZpY2UuCi0JICoKLQkgKiBGSVhNRTogQ2xlYW4gdXAgdGhpcyBtZXNzICEhCiAJICovCiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKLQkJLyogWFhYOiBkb3RoIG5lZWRzIHRoZSBjaGFuY2hhbmdlIElFIGNvdW50ZG93biBkZWNyZW1lbnRlZC4KLQkJICogICAgICBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGEgbWFjODAyMTEgY2FsbCB0byBpbmRpY2F0ZQotCQkgKiAgICAgIGEgYmVhY29uIG1pc3Mgc28gYXBwcm9wcmlhdGUgYWN0aW9uIGNvdWxkIGJlIHRha2VuCi0JCSAqICAgICAgKGluIHRoYXQgbGF5ZXIpLgotCQkgKi8KKwogCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKLQkJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJCWlmIChzaG93X2N5Y2xlcykgewotCQkJCQkvKgotCQkJCQkgKiBEaXNwbGF5IGN5Y2xlIGNvdW50ZXIgc3RhdHMgZnJvbSBIVwotCQkJCQkgKiB0byBhaWRlIGluIGRlYnVnIG9mIHN0aWNraW5lc3MuCi0JCQkJCSAqLwotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJidXN5IHRpbWVzOiByeF9jbGVhcj0lZCwgIgotCQkJCQkJInJ4X2ZyYW1lPSVkLCB0eF9mcmFtZT0lZFxuIiwKLQkJCQkJCXJ4X2NsZWFyLCByeF9mcmFtZSwKLQkJCQkJCXR4X2ZyYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJ1bmFibGUgdG8gb2J0YWluICIKLQkJCQkJCSJidXN5IHRpbWVzXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJfQorCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQl9IGVsc2UgaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPj0gQlNUVUNLX1RIUkVTSCkgewotCQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX05PX1JFU0VUKSB7Ci0JCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPT0gQlNUVUNLX1RIUkVTSCkgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSAiCi0JCQkJCQkic3R1Y2tcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7Ci0JCQkJYXRoX2JzdHVja19wcm9jZXNzKHNjKTsKLQkJCX0KKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7CisJCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKIAkJfQorCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCAhPSAwKSB7Ci0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7Ci0JCX0gZWxzZSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkicmVzdW1lIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKLQkJCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJfQorCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOwogCX0KIApAQCAtNTQyLDIxICs0NDcsMjIgQEAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CiAJdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKIAlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCWlmX2lkID0gc2MtPmJlYWNvbi5ic2xvdFsoc2xvdCArIDEpICUgQVRIX0JDQlVGXTsKKwl2aWYgPSBzYy0+YmVhY29uLmJzbG90WyhzbG90ICsgMSkgJSBBVEhfQkNCVUZdOworCWFwaHkgPSBzYy0+YmVhY29uLmJzbG90X2FwaHlbKHNsb3QgKyAxKSAlIEFUSF9CQ0JVRl07CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJInNsb3QgJWQgW3RzZiAlbGx1IHRzZnR1ICV1IGludHZhbCAldV0gaWZfaWQgJWRcbiIsCi0JCXNsb3QsICh1bnNpZ25lZCBsb25nIGxvbmcpdHNmLCB0c2Z0dSwKLQkJaW50dmFsLCBpZl9pZCk7CisJCSJzbG90ICVkIFt0c2YgJWxsdSB0c2Z0dSAldSBpbnR2YWwgJXVdIHZpZiAlcFxuIiwKKwkJc2xvdCwgdHNmLCB0c2Z0dSwgaW50dmFsLCB2aWYpOwogCiAJYmZhZGRyID0gMDsKLQlpZiAoaWZfaWQgIT0gQVRIX0lGX0lEX0FOWSkgewotCQliZiA9IGF0aF9iZWFjb25fZ2VuZXJhdGUoc2MsIGlmX2lkKTsKKwlpZiAodmlmKSB7CisJCWJmID0gYXRoX2JlYWNvbl9nZW5lcmF0ZShhcGh5LT5odywgdmlmKTsKIAkJaWYgKGJmICE9IE5VTEwpIHsKIAkJCWJmYWRkciA9IGJmLT5iZl9kYWRkcjsKIAkJCWJjID0gMTsKIAkJfQogCX0KKwogCS8qCiAJICogSGFuZGxlIHNsb3QgdGltZSBjaGFuZ2Ugd2hlbiBhIG5vbi1FUlAgc3RhdGlvbiBqb2lucy9sZWF2ZXMKIAkgKiBhbiAxMWcgbmV0d29yay4gIFRoZSA4MDIuMTEgbGF5ZXIgbm90aWZpZXMgdXMgdmlhIGNhbGxiYWNrLApAQCAtNTczLDcgKzQ3OSw2IEBACiAJICogICAgIGludGVydmFsIGhhcyBwYXNzZWQuICBXaGVuIGJ1cnN0aW5nIHNsb3QgaXMgYWx3YXlzIGxlZnQKIAkgKiAgICAgc2V0IHRvIEFUSF9CQ0JVRiBzbyB0aGlzIGNoZWNrIGlzIGEgbm9vcC4KIAkgKi8KLQkvKiBYWFggbG9ja2luZyAqLwogCWlmIChzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPT0gVVBEQVRFKSB7CiAJCXNjLT5iZWFjb24udXBkYXRlc2xvdCA9IENPTU1JVDsgLyogY29tbWl0IG5leHQgYmVhY29uICovCiAJCXNjLT5iZWFjb24uc2xvdHVwZGF0ZSA9IHNsb3Q7CkBAIC01OTAsNyArNDk1LDYgQEAKIAkJaWYgKCFhdGg5a19od19zdG9wdHhkbWEoYWgsIHNjLT5iZWFjb24uYmVhY29ucSkpIHsKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkJImJlYWNvbiBxdWV1ZSAldSBkaWQgbm90IHN0b3A/XG4iLCBzYy0+YmVhY29uLmJlYWNvbnEpOwotCQkJLyogTkI6IHRoZSBIQUwgc3RpbGwgc3RvcHMgRE1BLCBzbyBwcm9jZWVkICovCiAJCX0KIAogCQkvKiBOQjogY2FicSB0cmFmZmljIHNob3VsZCBhbHJlYWR5IGJlIHF1ZXVlZCBhbmQgcHJpbWVkICovCkBAIC02MDIsNDAgKzUwNiwyMTMgQEAKIH0KIAogLyoKLSAqIENvbmZpZ3VyZSB0aGUgYmVhY29uIGFuZCBzbGVlcCB0aW1lcnMuCi0gKgotICogV2hlbiBvcGVyYXRpbmcgYXMgYW4gQVAgdGhpcyByZXNldHMgdGhlIFRTRiBhbmQgc2V0cwotICogdXAgdGhlIGhhcmR3YXJlIHRvIG5vdGlmeSB1cyB3aGVuIHdlIG5lZWQgdG8gaXNzdWUgYmVhY29ucy4KLSAqCi0gKiBXaGVuIG9wZXJhdGluZyBpbiBzdGF0aW9uIG1vZGUgdGhpcyBzZXRzIHVwIHRoZSBiZWFjb24KLSAqIHRpbWVycyBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZWNlaXZlZAotICogYmVhY29uIGFuZCB0aGUgY3VycmVudCBUU0YsIGNvbmZpZ3VyZXMgUENGIGFuZCBEVElNCi0gKiBoYW5kbGluZywgcHJvZ3JhbXMgdGhlIHNsZWVwIHJlZ2lzdGVycyBzbyB0aGUgaGFyZHdhcmUKLSAqIHdpbGwgd2FrZXVwIGluIHRpbWUgdG8gcmVjZWl2ZSBiZWFjb25zLCBhbmQgY29uZmlndXJlcwotICogdGhlIGJlYWNvbiBtaXNzIGhhbmRsaW5nIHNvIHdlJ2xsIHJlY2VpdmUgYSBCTUlTUwotICogaW50ZXJydXB0IHdoZW4gd2Ugc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUAotICogd2UndmUgYXNzb2NpYXRlZCB3aXRoLgorICogRm9yIG11bHRpLWJzcyBhcCBzdXBwb3J0IGJlYWNvbnMgYXJlIGVpdGhlciBzdGFnZ2VyZWQgZXZlbmx5IG92ZXIgTiBzbG90cyBvcgorICogYnVyc3QgdG9nZXRoZXIuICBGb3IgdGhlIGZvcm1lciBhcnJhbmdlIGZvciB0aGUgU1dCQSB0byBiZSBkZWxpdmVyZWQgZm9yIGVhY2gKKyAqIHNsb3QuIFNsb3RzIHRoYXQgYXJlIG5vdCBvY2N1cGllZCB3aWxsIGdlbmVyYXRlIG5vdGhpbmcuCiAgKi8KLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYsCisJCQkJIHN0cnVjdCBhdGhfdmlmICphdnApCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOwotCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOwogCXUzMiBuZXh0dGJ0dCwgaW50dmFsOwogCi0JaWYgKGlmX2lkICE9IEFUSF9JRl9JRF9BTlkpIHsKLQkJdmlmID0gc2MtPnZpZnNbaWZfaWRdOwotCQlBU1NFUlQodmlmKTsKLQkJYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwotCQlvcG1vZGUgPSBhdnAtPmF2X29wbW9kZTsKKwkvKiBDb25maWd1cmUgdGhlIHRpbWVycyBvbmx5IHdoZW4gdGhlIFRTRiBoYXMgdG8gYmUgcmVzZXQgKi8KKworCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkpCisJCXJldHVybjsKKworCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKwlpbnR2YWwgLz0gQVRIX0JDQlVGOyAgICAvKiBmb3Igc3RhZ2dlcmVkIGJlYWNvbnMgKi8KKwluZXh0dGJ0dCA9IGludHZhbDsKKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKKworCS8qCisJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kIFNXQkEgaW50ZXJydXB0cyB0bworCSAqIHByZXBhcmUgYmVhY29uIGZyYW1lcy4KKwkgKi8KKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKKwlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7CisJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKKworCS8qIFNldCB0aGUgY29tcHV0ZWQgQVAgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19iZWFjb25pbml0KHNjLT5zY19haCwgbmV4dHRidHQsIGludHZhbCk7CisJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworCisJLyogQ2xlYXIgdGhlIHJlc2V0IFRTRiBmbGFnLCBzbyB0aGF0IHN1YnNlcXVlbnQgYmVhY29uIHVwZGF0aW9uCisJICAgd2lsbCBub3QgcmVzZXQgdGhlIEhXIFRTRi4gKi8KKworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfVFNGX1JFU0VUOworfQorCisvKgorICogVGhpcyBzZXRzIHVwIHRoZSBiZWFjb24gdGltZXJzIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0CisgKiByZWNlaXZlZCBiZWFjb24gYW5kIHRoZSBjdXJyZW50IFRTRiwgY29uZmlndXJlcyBQQ0YgYW5kIERUSU0KKyAqIGhhbmRsaW5nLCBwcm9ncmFtcyB0aGUgc2xlZXAgcmVnaXN0ZXJzIHNvIHRoZSBoYXJkd2FyZSB3aWxsIHdha2V1cCBpbgorICogdGltZSB0byByZWNlaXZlIGJlYWNvbnMsIGFuZCBjb25maWd1cmVzIHRoZSBiZWFjb24gbWlzcyBoYW5kbGluZyBzbworICogd2UnbGwgcmVjZWl2ZSBhIEJNSVNTIGludGVycnVwdCB3aGVuIHdlIHN0b3Agc2VlaW5nIGJlYWNvbnMgZnJvbSB0aGUgQVAKKyAqIHdlJ3ZlIGFzc29jaWF0ZWQgd2l0aC4KKyAqLworc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9jb25maWdfc3RhKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mLAorCQkJCSAgc3RydWN0IGF0aF92aWYgKmF2cCkKK3sKKwlzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIGJzOworCWludCBkdGltcGVyaW9kLCBkdGltY291bnQsIHNsZWVwZHVyYXRpb247CisJaW50IGNmcHBlcmlvZCwgY2ZwY291bnQ7CisJdTMyIG5leHR0YnR0ID0gMCwgaW50dmFsLCB0c2Z0dTsKKwl1NjQgdHNmOworCisJbWVtc2V0KCZicywgMCwgc2l6ZW9mKGJzKSk7CisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKworCS8qCisJICogU2V0dXAgZHRpbSBhbmQgY2ZwIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvCisJICogbGFzdCBiZWFjb24gd2UgcmVjZWl2ZWQgKHdoaWNoIG1heSBiZSBub25lKS4KKwkgKi8KKwlkdGltcGVyaW9kID0gY29uZi0+ZHRpbV9wZXJpb2Q7CisJaWYgKGR0aW1wZXJpb2QgPD0gMCkJCS8qIE5COiAwIGlmIG5vdCBrbm93biAqLworCQlkdGltcGVyaW9kID0gMTsKKwlkdGltY291bnQgPSBjb25mLT5kdGltX2NvdW50OworCWlmIChkdGltY291bnQgPj0gZHRpbXBlcmlvZCkJLyogTkI6IHNhbml0eSBjaGVjayAqLworCQlkdGltY291bnQgPSAwOworCWNmcHBlcmlvZCA9IDE7CQkJLyogTkI6IG5vIFBDRiBzdXBwb3J0IHlldCAqLworCWNmcGNvdW50ID0gMDsKKworCXNsZWVwZHVyYXRpb24gPSBjb25mLT5saXN0ZW5faW50ZXJ2YWwgKiBpbnR2YWw7CisJaWYgKHNsZWVwZHVyYXRpb24gPD0gMCkKKwkJc2xlZXBkdXJhdGlvbiA9IGludHZhbDsKKworCS8qCisJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKKwkgKiBUU0YgYW5kIGNhbGN1bGF0ZSBkdGltK2NmcCBzdGF0ZSBmb3IgdGhlIHJlc3VsdC4KKwkgKi8KKwl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOworCXRzZnR1ID0gVFNGX1RPX1RVKHRzZj4+MzIsIHRzZikgKyBGVURHRTsKKwlkbyB7CisJCW5leHR0YnR0ICs9IGludHZhbDsKKwkJaWYgKC0tZHRpbWNvdW50IDwgMCkgeworCQkJZHRpbWNvdW50ID0gZHRpbXBlcmlvZCAtIDE7CisJCQlpZiAoLS1jZnBjb3VudCA8IDApCisJCQkJY2ZwY291bnQgPSBjZnBwZXJpb2QgLSAxOworCQl9CisJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CisKKwlicy5ic19pbnR2YWwgPSBpbnR2YWw7CisJYnMuYnNfbmV4dHRidHQgPSBuZXh0dGJ0dDsKKwlicy5ic19kdGltcGVyaW9kID0gZHRpbXBlcmlvZCppbnR2YWw7CisJYnMuYnNfbmV4dGR0aW0gPSBicy5ic19uZXh0dGJ0dCArIGR0aW1jb3VudCppbnR2YWw7CisJYnMuYnNfY2ZwcGVyaW9kID0gY2ZwcGVyaW9kKmJzLmJzX2R0aW1wZXJpb2Q7CisJYnMuYnNfY2ZwbmV4dCA9IGJzLmJzX25leHRkdGltICsgY2ZwY291bnQqYnMuYnNfZHRpbXBlcmlvZDsKKwlicy5ic19jZnBtYXhkdXJhdGlvbiA9IDA7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJlYWNvbnMgdG8gbWlzcyogYmVmb3JlIHRha2luZworCSAqIGEgQk1JU1MgaW50ZXJydXB0LiBUaGUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQgaW4gVFUgc28gd2Ugb25seQorCSAqIG5lZWQgY2FsY3VsYXRlIGJhc2VkCW9uIHRoZSBiZWFjb24gaW50ZXJ2YWwuICBOb3RlIHRoYXQgd2UgY2xhbXAgdGhlCisJICogcmVzdWx0IHRvIGF0IG1vc3QgMTUgYmVhY29ucy4KKwkgKi8KKwlpZiAoc2xlZXBkdXJhdGlvbiA+IGludHZhbCkgeworCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IGNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAqCisJCQlBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAvIDI7CiAJfSBlbHNlIHsKLQkJb3Btb2RlID0gc2MtPnNjX2FoLT5vcG1vZGU7CisJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gRElWX1JPVU5EX1VQKGNvbmYtPmJtaXNzX3RpbWVvdXQsIGludHZhbCk7CisJCWlmIChicy5ic19ibWlzc3RocmVzaG9sZCA+IDE1KQorCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSAxNTsKKwkJZWxzZSBpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPD0gMCkKKwkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTsKIAl9CiAKLQltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcpKTsKKwkvKgorCSAqIENhbGN1bGF0ZSBzbGVlcCBkdXJhdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgZ2l2ZW4gaW4gbXMuCisJICogV2UgZW5zdXJlIGEgbXVsdGlwbGUgb2YgdGhlIGJlYWNvbiBwZXJpb2QgaXMgdXNlZC4gQWxzbywgaWYgdGhlIHNsZWVwCisJICogZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcworCSAqIHRvIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiB0aGF0LgorCSAqCisJICogWFhYIGZpeGVkIGF0IDEwMG1zCisJICovCiAKKwlicy5ic19zbGVlcGR1cmF0aW9uID0gcm91bmR1cChJRUVFODAyMTFfTVNfVE9fVFUoMTAwKSwgc2xlZXBkdXJhdGlvbik7CisJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQorCQlicy5ic19zbGVlcGR1cmF0aW9uID0gYnMuYnNfZHRpbXBlcmlvZDsKKworCS8qIFRTRiBvdXQgb2YgcmFuZ2UgdGhyZXNob2xkIGZpeGVkIGF0IDEgc2Vjb25kICovCisJYnMuYnNfdHNmb29yX3RocmVzaG9sZCA9IEFUSDlLX1RTRk9PUl9USFJFU0hPTEQ7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwgInRzZjogJWxsdSB0c2Z0dTogJXVcbiIsIHRzZiwgdHNmdHUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkiYm1pc3M6ICV1IHNsZWVwOiAldSBjZnAtcGVyaW9kOiAldSBtYXhkdXI6ICV1IG5leHQ6ICV1XG4iLAorCQlicy5ic19ibWlzc3RocmVzaG9sZCwgYnMuYnNfc2xlZXBkdXJhdGlvbiwKKwkJYnMuYnNfY2ZwcGVyaW9kLCBicy5ic19jZnBtYXhkdXJhdGlvbiwgYnMuYnNfY2ZwbmV4dCk7CisKKwkvKiBTZXQgdGhlIGNvbXB1dGVkIFNUQSBiZWFjb24gdGltZXJzICovCisKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOworCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhzYy0+c2NfYWgsICZicyk7CisJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgICBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYsCisJCQkJICAgIHN0cnVjdCBhdGhfdmlmICphdnAsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJdTY0IHRzZjsKKwl1MzIgdHNmdHUsIGludHZhbCwgbmV4dHRidHQ7CisKKwlpbnR2YWwgPSBjb25mLT5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EOworCisJLyogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgVFNGICovCisKKwluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOworCWlmIChuZXh0dGJ0dCA9PSAwKQorICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gaW50dmFsOworICAgICAgICBlbHNlIGlmIChpbnR2YWwpCisgICAgICAgICAgICAgICAgbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOworCisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoc2MtPnNjX2FoKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSgodTMyKSh0c2Y+PjMyKSwgKHUzMil0c2YpICsgRlVER0U7CisJZG8geworCQluZXh0dGJ0dCArPSBpbnR2YWw7CisJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCisJCW5leHR0YnR0LCBpbnR2YWwsIGNvbmYtPmJlYWNvbl9pbnRlcnZhbCk7CisKKwkvKgorCSAqIEluIElCU1MgbW9kZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYnV0IG9ubHkgZW5hYmxlIFNXQkEgaW50ZXJydXB0cworCSAqIGlmIHdlIG5lZWQgdG8gbWFudWFsbHkgcHJlcGFyZSBiZWFjb24gZnJhbWVzLiAgT3RoZXJ3aXNlIHdlIHVzZSBhCisJICogc2VsZi1saW5rZWQgdHggZGVzY3JpcHRvciBhbmQgbGV0IHRoZSBoYXJkd2FyZSBkZWFsIHdpdGggdGhpbmdzLgorCSAqLworCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOworCWlmICghKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7CisKKwlhdGhfYmVhY29ucV9jb25maWcoc2MpOworCisJLyogU2V0IHRoZSBjb21wdXRlZCBBREhPQyBiZWFjb24gdGltZXJzICovCisKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOworCWF0aDlrX2h3X2JlYWNvbmluaXQoc2MtPnNjX2FoLCBuZXh0dGJ0dCwgaW50dmFsKTsKKwlzYy0+YmVhY29uLmJtaXNzY250ID0gMDsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CisKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkKKwkJYXRoX2JlYWNvbl9zdGFydF9hZGhvYyhzYywgdmlmKTsKK30KKwordm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKKworCS8qIFNldHVwIHRoZSBiZWFjb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcpKTsKIAljb25mLmJlYWNvbl9pbnRlcnZhbCA9IHNjLT5ody0+Y29uZi5iZWFjb25faW50ID8KIAkJc2MtPmh3LT5jb25mLmJlYWNvbl9pbnQgOiBBVEhfREVGQVVMVF9CSU5UVkFMOwogCWNvbmYubGlzdGVuX2ludGVydmFsID0gMTsKQEAgLTY0MywyMTIgKzcyMCwyNSBAQAogCWNvbmYuZHRpbV9jb3VudCA9IDE7CiAJY29uZi5ibWlzc190aW1lb3V0ID0gQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjb25mLmJlYWNvbl9pbnRlcnZhbDsKIAotCS8qIGV4dHJhY3QgdHN0YW1wIGZyb20gbGFzdCBiZWFjb24gYW5kIGNvbnZlcnQgdG8gVFUgKi8KLQluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOworCWlmICh2aWYpIHsKKwkJc3RydWN0IGF0aF92aWYgKmF2cCA9IChzdHJ1Y3QgYXRoX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CiAKLQkvKiBYWFggY29uZGl0aW9uYWxpemUgbXVsdGktYnNzIHN1cHBvcnQ/ICovCi0JaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qCi0JCSAqIEZvciBtdWx0aS1ic3MgYXAgc3VwcG9ydCBiZWFjb25zIGFyZSBlaXRoZXIgc3RhZ2dlcmVkCi0JCSAqIGV2ZW5seSBvdmVyIE4gc2xvdHMgb3IgYnVyc3QgdG9nZXRoZXIuICBGb3IgdGhlIGZvcm1lcgotCQkgKiBhcnJhbmdlIGZvciB0aGUgU1dCQSB0byBiZSBkZWxpdmVyZWQgZm9yIGVhY2ggc2xvdC4KLQkJICogU2xvdHMgdGhhdCBhcmUgbm90IG9jY3VwaWVkIHdpbGwgZ2VuZXJhdGUgbm90aGluZy4KLQkJICovCi0JCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCi0JCWludHZhbCA9IGNvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKLQkJaW50dmFsIC89IEFUSF9CQ0JVRjsgICAgLyogZm9yIHN0YWdnZXJlZCBiZWFjb25zICovCi0JfSBlbHNlIHsKLQkJaW50dmFsID0gY29uZi5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EOwotCX0KLQotCWlmIChuZXh0dGJ0dCA9PSAwKQkvKiBlLmcuIGZvciBhcCBtb2RlICovCi0JCW5leHR0YnR0ID0gaW50dmFsOwotCWVsc2UgaWYgKGludHZhbCkJLyogTkI6IGNhbiBiZSAwIGZvciBtb25pdG9yIG1vZGUgKi8KLQkJbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJuZXh0dGJ0dCAldSBpbnR2YWwgJXUgKCV1KVxuIiwKLQkJbmV4dHRidHQsIGludHZhbCwgY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JLyogQ2hlY2sgZm9yIE5MODAyMTFfSUZUWVBFX0FQIGFuZCBzY19ub3N0YWJlYWNvbnMgZm9yIFdEUyBjbGllbnQgKi8KLQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIGJzOwotCQl1NjQgdHNmOwotCQl1MzIgdHNmdHU7Ci0JCWludCBkdGltcGVyaW9kLCBkdGltY291bnQsIHNsZWVwZHVyYXRpb247Ci0JCWludCBjZnBwZXJpb2QsIGNmcGNvdW50OwotCi0JCS8qCi0JCSAqIFNldHVwIGR0aW0gYW5kIGNmcCBwYXJhbWV0ZXJzIGFjY29yZGluZyB0bwotCQkgKiBsYXN0IGJlYWNvbiB3ZSByZWNlaXZlZCAod2hpY2ggbWF5IGJlIG5vbmUpLgotCQkgKi8KLQkJZHRpbXBlcmlvZCA9IGNvbmYuZHRpbV9wZXJpb2Q7Ci0JCWlmIChkdGltcGVyaW9kIDw9IDApCQkvKiBOQjogMCBpZiBub3Qga25vd24gKi8KLQkJCWR0aW1wZXJpb2QgPSAxOwotCQlkdGltY291bnQgPSBjb25mLmR0aW1fY291bnQ7Ci0JCWlmIChkdGltY291bnQgPj0gZHRpbXBlcmlvZCkJLyogTkI6IHNhbml0eSBjaGVjayAqLwotCQkJZHRpbWNvdW50ID0gMDsKLQkJY2ZwcGVyaW9kID0gMTsJCQkvKiBOQjogbm8gUENGIHN1cHBvcnQgeWV0ICovCi0JCWNmcGNvdW50ID0gMDsKLQotCQlzbGVlcGR1cmF0aW9uID0gY29uZi5saXN0ZW5faW50ZXJ2YWwgKiBpbnR2YWw7Ci0JCWlmIChzbGVlcGR1cmF0aW9uIDw9IDApCi0JCQlzbGVlcGR1cmF0aW9uID0gaW50dmFsOwotCi0jZGVmaW5lIEZVREdFIDIKLQkJLyoKLQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJICogVFNGIGFuZCBjYWxjdWxhdGUgZHRpbStjZnAgc3RhdGUgZm9yIHRoZSByZXN1bHQuCi0JCSAqLwotCQl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7Ci0JCXRzZnR1ID0gVFNGX1RPX1RVKHRzZj4+MzIsIHRzZikgKyBGVURHRTsKLQkJZG8gewotCQkJbmV4dHRidHQgKz0gaW50dmFsOwotCQkJaWYgKC0tZHRpbWNvdW50IDwgMCkgewotCQkJCWR0aW1jb3VudCA9IGR0aW1wZXJpb2QgLSAxOwotCQkJCWlmICgtLWNmcGNvdW50IDwgMCkKLQkJCQkJY2ZwY291bnQgPSBjZnBwZXJpb2QgLSAxOwotCQkJfQotCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLSN1bmRlZiBGVURHRQotCQltZW1zZXQoJmJzLCAwLCBzaXplb2YoYnMpKTsKLQkJYnMuYnNfaW50dmFsID0gaW50dmFsOwotCQlicy5ic19uZXh0dGJ0dCA9IG5leHR0YnR0OwotCQlicy5ic19kdGltcGVyaW9kID0gZHRpbXBlcmlvZCppbnR2YWw7Ci0JCWJzLmJzX25leHRkdGltID0gYnMuYnNfbmV4dHRidHQgKyBkdGltY291bnQqaW50dmFsOwotCQlicy5ic19jZnBwZXJpb2QgPSBjZnBwZXJpb2QqYnMuYnNfZHRpbXBlcmlvZDsKLQkJYnMuYnNfY2ZwbmV4dCA9IGJzLmJzX25leHRkdGltICsgY2ZwY291bnQqYnMuYnNfZHRpbXBlcmlvZDsKLQkJYnMuYnNfY2ZwbWF4ZHVyYXRpb24gPSAwOwotCi0JCS8qCi0JCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJlYWNvbnMgdG8gbWlzcwotCQkgKiBiZWZvcmUgdGFraW5nIGEgQk1JU1MgaW50ZXJydXB0LiAgVGhlIGNvbmZpZ3VyYXRpb24KLQkJICogaXMgc3BlY2lmaWVkIGluIFRVIHNvIHdlIG9ubHkgbmVlZCBjYWxjdWxhdGUgYmFzZWQKLQkJICogb24gdGhlIGJlYWNvbiBpbnRlcnZhbC4gIE5vdGUgdGhhdCB3ZSBjbGFtcCB0aGUKLQkJICogcmVzdWx0IHRvIGF0IG1vc3QgMTUgYmVhY29ucy4KLQkJICovCi0JCWlmIChzbGVlcGR1cmF0aW9uID4gaW50dmFsKSB7Ci0JCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IGNvbmYubGlzdGVuX2ludGVydmFsICoKLQkJCQlBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAvIDI7Ci0JCX0gZWxzZSB7Ci0JCQlicy5ic19ibWlzc3RocmVzaG9sZCA9Ci0JCQkJRElWX1JPVU5EX1VQKGNvbmYuYm1pc3NfdGltZW91dCwgaW50dmFsKTsKLQkJCWlmIChicy5ic19ibWlzc3RocmVzaG9sZCA+IDE1KQotCQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTU7Ci0JCQllbHNlIGlmIChicy5ic19ibWlzc3RocmVzaG9sZCA8PSAwKQotCQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTsKKwkJc3dpdGNoKGF2cC0+YXZfb3Btb2RlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQlhdGhfYmVhY29uX2NvbmZpZ19hcChzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHNjLCAmY29uZiwgYXZwLCB2aWYpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWF0aF9iZWFjb25fY29uZmlnX3N0YShzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAorCQkJCSJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvKgotCQkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uICBUaGUgY29uZmlndXJhdGlvbiBpcwotCQkgKiBnaXZlbiBpbiBtcy4gIFdlIGluc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24KLQkJICogcGVyaW9kIGlzIHVzZWQuICBBbHNvLCBpZiB0aGUgc2xlZXAgZHVyYXRpb24gaXMKLQkJICogZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcwotCQkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KLQkJICoKLQkJICogWFhYIGZpeGVkIGF0IDEwMG1zCi0JCSAqLwotCi0JCWJzLmJzX3NsZWVwZHVyYXRpb24gPSByb3VuZHVwKElFRUU4MDIxMV9NU19UT19UVSgxMDApLAotCQkJCQkgICAgICBzbGVlcGR1cmF0aW9uKTsKLQkJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkidHNmICVsbHUgIgotCQkJInRzZjp0dSAldSAiCi0JCQkiaW50dmFsICV1ICIKLQkJCSJuZXh0dGJ0dCAldSAiCi0JCQkiZHRpbSAldSAiCi0JCQkibmV4dGR0aW0gJXUgIgotCQkJImJtaXNzICV1ICIKLQkJCSJzbGVlcCAldSAiCi0JCQkiY2ZwOnBlcmlvZCAldSAiCi0JCQkibWF4ZHVyICV1ICIKLQkJCSJuZXh0ICV1ICIKLQkJCSJ0aW1vZmZzZXQgJXVcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCQlicy5ic19pbnR2YWwsCi0JCQlicy5ic19uZXh0dGJ0dCwKLQkJCWJzLmJzX2R0aW1wZXJpb2QsCi0JCQlicy5ic19uZXh0ZHRpbSwKLQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkLAotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJCWJzLmJzX2NmcHBlcmlvZCwKLQkJCWJzLmJzX2NmcG1heGR1cmF0aW9uLAotCQkJYnMuYnNfY2ZwbmV4dCwKLQkJCWJzLmJzX3RpbW9mZnNldAotCQkJKTsKLQotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhhaCwgJmJzKTsKLQkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5pbWFzayk7Ci0JfSBlbHNlIHsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWlmIChuZXh0dGJ0dCA9PSBpbnR2YWwpCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKLQkJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkvKgotCQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJCSAqIFRTRgotCQkJICovCi0jZGVmaW5lIEZVREdFIDIKLQkJCWlmICghKGludHZhbCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpKSB7Ci0JCQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQkJCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLAotCQkJCQkodTMyKXRzZikgKyBGVURHRTsKLQkJCQlkbyB7Ci0JCQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLQkJCX0KLSN1bmRlZiBGVURHRQotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCQkJbmV4dHRidHQsCi0JCQkJaW50dmFsICYgfkFUSDlLX0JFQUNPTl9SRVNFVF9UU0YsCi0JCQkJY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JCQkvKgotCQkJICogSW4gSUJTUyBtb2RlIGVuYWJsZSB0aGUgYmVhY29uIHRpbWVycyBidXQgb25seQotCQkJICogZW5hYmxlIFNXQkEgaW50ZXJydXB0cyBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0JCQkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKLQkJCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUKLQkJCSAqIGRlYWwgd2l0aCB0aGluZ3MuCi0JCQkgKi8KLQkJCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOwotCQkJaWYgKCEoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7Ci0JCQlhdGhfYmVhY29ucV9jb25maWcoc2MpOwotCQl9IGVsc2UgaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQkvKgotCQkJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kCi0JCQkgKiBTV0JBIGludGVycnVwdHMgdG8gcHJlcGFyZSBiZWFjb24gZnJhbWVzLgotCQkJICovCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKLQkJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsgICAvKiBiZWFjb24gcHJlcGFyZSAqLwotCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKLQkJfQotCQlhdGg5a19od19iZWFjb25pbml0KGFoLCBuZXh0dGJ0dCwgaW50dmFsKTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwotCQkvKgotCQkgKiBXaGVuIHVzaW5nIGEgc2VsZi1saW5rZWQgYmVhY29uIGRlc2NyaXB0b3IgaW4KLQkJICogaWJzcyBtb2RlIGxvYWQgaXQgb25jZSBoZXJlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JCSAgICAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIDApOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKIAl9CiB9Ci0KLXZvaWQgYXRoX2JlYWNvbl9zeW5jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCi17Ci0JLyoKLQkgKiBSZXN5bmMgYmVhY29uIHRpbWVycyB1c2luZyB0aGUgdHNmIG9mIHRoZQotCSAqIGJlYWNvbiBmcmFtZSB3ZSBqdXN0IHJlY2VpdmVkLgotCSAqLwotCWF0aF9iZWFjb25fY29uZmlnKHNjLCBpZl9pZCk7Ci0Jc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTlM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuYwppbmRleCAxZmMzYTA4Li5jOTQ0NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmMKQEAgLTcxOCwzOSArNzE4LDMxIEBACiAJcmV0dXJuIG5mOwogfQogCi1ib29sIGF0aDlrX2h3X2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAotCQkJYm9vbCAqaXNDYWxEb25lKQorc3RhdGljIHZvaWQgYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmN1cnJDYWwgPSBhaC0+Y2FsX2xpc3RfY3VycjsKKwl1MzIgcmRkYXRhLCBpOworCWludCBkZWx0YSwgY3VyclBEQURDLCByZWd2YWw7CiAKLQkqaXNDYWxEb25lID0gdHJ1ZTsKKwlyZGRhdGEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw0KTsKIAotCWlmIChjdXJyQ2FsICYmCi0JICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAotCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7Ci0JCWF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihhaCwgY2hhbiwgcnhjaGFpbm1hc2ssIGN1cnJDYWwsCi0JCQkJCSBpc0NhbERvbmUpOwotCQlpZiAoKmlzQ2FsRG9uZSkgewotCQkJYWgtPmNhbF9saXN0X2N1cnIgPSBjdXJyQ2FsID0gY3VyckNhbC0+Y2FsTmV4dDsKKwljdXJyUERBREMgPSBNUyhyZGRhdGEsIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19PVVQpOwogCi0JCQlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpIHsKLQkJCQkqaXNDYWxEb25lID0gZmFsc2U7Ci0JCQkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwotCQkJfQorCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0RBQ19IUFdSXzVHKSkKKwkJZGVsdGEgPSAoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQyArIDQpIC8gODsKKwllbHNlCisJCWRlbHRhID0gKGN1cnJQREFEQyAtIGFoLT5pbml0UERBREMgKyA1KSAvIDEwOworCisJaWYgKGRlbHRhICE9IGFoLT5QREFEQ2RlbHRhKSB7CisJCWFoLT5QREFEQ2RlbHRhID0gZGVsdGE7CisJCWZvciAoaSA9IDE7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspIHsKKwkJCXJlZ3ZhbCA9IGFoLT5vcmlnaW5hbEdhaW5baV0gLSBkZWx0YTsKKwkJCWlmIChyZWd2YWwgPCAwKQorCQkJCXJlZ3ZhbCA9IDA7CisKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCwKKwkJCQkJQVJfUEhZX1RYX0dBSU4sIHJlZ3ZhbCk7CiAJCX0KIAl9Ci0KLQlpZiAobG9uZ2NhbCkgewotCQlhdGg5a19od19nZXRuZihhaCwgY2hhbik7Ci0JCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmN1cmNoYW4pOwotCQlhdGg5a19od19zdGFydF9uZmNhbChhaCk7Ci0KLQkJaWYgKGNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQ1dfSU5UKQotCQkJY2hhbi0+Y2hhbm5lbEZsYWdzICY9IH5DSEFOTkVMX0NXX0lOVDsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaHcgKmFoKQpAQCAtODQ4LDI2ICs4NDAsMTQxIEBACiAKIH0KIAorYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJdTggcnhjaGFpbm1hc2ssIGJvb2wgbG9uZ2NhbCwKKwkJCWJvb2wgKmlzQ2FsRG9uZSkKK3sKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsID0gYWgtPmNhbF9saXN0X2N1cnI7CisKKwkqaXNDYWxEb25lID0gdHJ1ZTsKKworCWlmIChjdXJyQ2FsICYmCisJICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAorCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7CisJCWF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihhaCwgY2hhbiwgcnhjaGFpbm1hc2ssIGN1cnJDYWwsCisJCQkJCSBpc0NhbERvbmUpOworCQlpZiAoKmlzQ2FsRG9uZSkgeworCQkJYWgtPmNhbF9saXN0X2N1cnIgPSBjdXJyQ2FsID0gY3VyckNhbC0+Y2FsTmV4dDsKKworCQkJaWYgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9XQUlUSU5HKSB7CisJCQkJKmlzQ2FsRG9uZSA9IGZhbHNlOworCQkJCWF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKGFoLCBjdXJyQ2FsKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChsb25nY2FsKSB7CisJCWlmIChBUl9TUkVWXzkyODUoYWgpICYmIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCisJCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CisKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKQorCQkJYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKGFoKTsKKwkJYXRoOWtfaHdfZ2V0bmYoYWgsIGNoYW4pOworCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5jdXJjaGFuKTsKKwkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOworCisJCWlmIChjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0NXX0lOVCkKKwkJCWNoYW4tPmNoYW5uZWxGbGFncyAmPSB+Q0hBTk5FTF9DV19JTlQ7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGFyOTI4NV9jbGMoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCWlmIChjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0hUMjApIHsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfUEFSQUxMRUxfQ0FMX0VOQUJMRSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfVFVSQk8sIEFSX1BIWV9GQ19EWU4yMDQwX0VOKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCSAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwgMCwgQUhfV0FJVF9USU1FT1VUKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAib2Zmc2V0ICIKKwkJCQkiY2FsaWJyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGluICIKKwkJCQkiMW1zOyBub2lzeSA/P1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9UVVJCTywgQVJfUEhZX0ZDX0RZTjIwNDBfRU4pOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9QQVJBTExFTF9DQUxfRU5BQkxFKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSk7CisJfQorCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFKTsKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKwlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwKKwkJCSAgMCwgQUhfV0FJVF9USU1FT1VUKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsICJvZmZzZXQgY2FsaWJyYXRpb24gIgorCQkJCSJmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyBub2lzeSA/P1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBhdGg5a19od19pbml0X2NhbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKLQkJICBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKwlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CisJCWlmICghYXI5Mjg1X2NsYyhhaCwgY2hhbikpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOwogCi0JaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsIDApKSB7CisJCS8qIEtpY2sgb2ZmIHRoZSBjYWwgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCisJCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAorCQkJCUFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOworCisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLCAwLAorCQkJCQlBSF9XQUlUX1RJTUVPVVQpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyAiCisJCQkJIm5vaXN5IGVudmlyb25tZW50P1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwl9CisKKwkvKiBDYWxpYnJhdGUgdGhlIEFHQyAqLworCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAorCQkJQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisKKwlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwKKwkJCQkwLCBBSF9XQUlUX1RJTUVPVVQpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJvZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGluIDFtczsgIgogCQkJIm5vaXN5IGVudmlyb25tZW50P1xuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCX0KKworCS8qIERvIFBBIENhbGlicmF0aW9uICovCiAJaWYgKEFSX1NSRVZfOTI4NShhaCkgJiYgQVJfU1JFVl85Mjg1XzExX09SX0xBVEVSKGFoKSkKIAkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgpOwogCisJLyogRG8gTkYgQ2FsaWJyYXRpb24gKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8Ci0JCSAgQVJfUEhZX0FHQ19DT05UUk9MX05GKTsKKwkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKKwkJCUFSX1BIWV9BR0NfQ09OVFJPTF9ORik7CiAKIAlhaC0+Y2FsX2xpc3QgPSBhaC0+Y2FsX2xpc3RfbGFzdCA9IGFoLT5jYWxfbGlzdF9jdXJyID0gTlVMTDsKIApAQCAtODc2LDE5ICs5ODMsMTkgQEAKIAkJCUlOSVRfQ0FMKCZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCUlOU0VSVF9DQUwoYWgsICZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIEdhaW4gQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CiAJCX0KIAkJaWYgKGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgQURDX0RDX0NBTCkpIHsKIAkJCUlOSVRfQ0FMKCZhaC0+YWRjZGNfY2FsZGF0YSk7CiAJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmFkY2RjX2NhbGRhdGEpOwogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBEQyBDYWxpYnJhdGlvbi5cbiIpOwogCQl9CiAJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIElRX01JU01BVENIX0NBTCkpIHsKIAkJCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7CiAJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmlxX2NhbGRhdGEpOwogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQkJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQogCiAJCWFoLT5jYWxfbGlzdF9jdXJyID0gYWgtPmNhbF9saXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmgKaW5kZXggZDI0NDhmMC4uMzI1ODllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRSAgICAgIAkJLTg1CiAjZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0hJR0hfVkFMVUUgICAgICAJCS02MgotI2RlZmluZSBBUl9QSFlfQ0NBX01JTl9CQURfVkFMVUUgICAgICAgCQktMTIxCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKICNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKICNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmMKaW5kZXggODAwYWQ1OS4uODI1NzNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jCkBAIC0xNCwxMSArMTQsMTUgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKwogI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfZGVidWcgPSBEQkdfREVGQVVMVDsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOwogCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRoOWtfZGVidWdmc19yb290OworCiB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJaWYgKCFzYykKQEAgLTI1OCwxMyArMjYyLDE0IEBACiAKIC8qIEZJWE1FOiBsZWdhY3kgcmF0ZXMsIGxhdGVyIG9uIC4uICovCiB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCi0JCQkgICAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcykKKwkJCSAgICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCiB7CiAJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpIHsKIAkJaW50IGlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyaXhdLmRvdDExcmF0ZTsKIAogCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2lkeF0ueHJldHJpZXMgKz0geHJldHJpZXM7CiAJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5yZXRyaWVzICs9IHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5wZXIgPSBwZXI7CiAJfQogfQogCkBAIC0yNzcsMTUgKzI4MiwxNiBAQAogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCWludCBpID0gMDsKIAotCWxlbiArPSBzcHJpbnRmKGJ1ZiwgIiU3cyAlMTNzICU4cyAlOHNcblxuIiwgIlJhdGUiLCAiU3VjY2VzcyIsCi0JCSAgICAgICAiUmV0cmllcyIsICJYUmV0cmllcyIpOworCWxlbiArPSBzcHJpbnRmKGJ1ZiwgIiU3cyAlMTNzICU4cyAlOHMgJTZzXG5cbiIsICJSYXRlIiwgIlN1Y2Nlc3MiLAorCQkgICAgICAgIlJldHJpZXMiLCAiWFJldHJpZXMiLCAiUEVSIik7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IDE1OyBpKyspIHsKIAkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkJIiU1cyUzZDogJTh1ICU4dSAlOHVcbiIsICJNQ1MiLCBpLAorCQkJCSIlNXMlM2Q6ICU4dSAlOHUgJTh1ICU4dVxuIiwgIk1DUyIsIGksCiAJCQkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpXS5zdWNjZXNzLAogCQkJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaV0ucmV0cmllcywKLQkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnhyZXRyaWVzKTsKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnhyZXRyaWVzLAorCQkJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaV0ucGVyKTsKIAl9CiAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CkBAIC0zMTYsNiArMzIyLDkgQEAKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWlmIChzYy0+Y3VyX3JhdGVfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSkKIAkJcmV0dXJuIGF0aF9yZWFkX2ZpbGVfc3RhdF8xMW5fcmMoZmlsZSwgdXNlcl9idWYsIGNvdW50LCBwcG9zKTsKIAllbHNlCkBAIC0zMjgsMTYgKzMzNywxNjkgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRQogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKiBhdGhfd2lwaHlfc3RhdGVfc3RyKGVudW0gYXRoX3dpcGh5X3N0YXRlIHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEFUSF9XSVBIWV9JTkFDVElWRToKKwkJcmV0dXJuICJJTkFDVElWRSI7CisJY2FzZSBBVEhfV0lQSFlfQUNUSVZFOgorCQlyZXR1cm4gIkFDVElWRSI7CisJY2FzZSBBVEhfV0lQSFlfUEFVU0lORzoKKwkJcmV0dXJuICJQQVVTSU5HIjsKKwljYXNlIEFUSF9XSVBIWV9QQVVTRUQ6CisJCXJldHVybiAiUEFVU0VEIjsKKwljYXNlIEFUSF9XSVBIWV9TQ0FOOgorCQlyZXR1cm4gIlNDQU4iOworCX0KKwlyZXR1cm4gIj8iOworfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfd2lwaHkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWludCBpOworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkicHJpbWFyeTogJXMgKCVzIGNoYW49JWQgaHQ9JWQpXG4iLAorCQkJd2lwaHlfbmFtZShzYy0+cHJpX3dpcGh5LT5ody0+d2lwaHkpLAorCQkJYXRoX3dpcGh5X3N0YXRlX3N0cihzYy0+cHJpX3dpcGh5LT5zdGF0ZSksCisJCQlzYy0+cHJpX3dpcGh5LT5jaGFuX2lkeCwgc2MtPnByaV93aXBoeS0+Y2hhbl9pc19odCk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5ID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkJInNlY29uZGFyeTogJXMgKCVzIGNoYW49JWQgaHQ9JWQpXG4iLAorCQkJCXdpcGh5X25hbWUoYXBoeS0+aHctPndpcGh5KSwKKwkJCQlhdGhfd2lwaHlfc3RhdGVfc3RyKGFwaHktPnN0YXRlKSwKKwkJCQlhcGh5LT5jaGFuX2lkeCwgYXBoeS0+Y2hhbl9pc19odCk7CisJfQorCisJcHV0X3VuYWxpZ25lZF9sZTMyKFJFR19SRUFEKHNjLT5zY19haCwgQVJfU1RBX0lEMCksIGFkZHIpOworCXB1dF91bmFsaWduZWRfbGUxNihSRUdfUkVBRChzYy0+c2NfYWgsIEFSX1NUQV9JRDEpICYgMHhmZmZmLCBhZGRyICsgNCk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiYWRkcjogJXBNXG4iLCBhZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMzIoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9CU1NNU0tMKSwgYWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KFJFR19SRUFEKHNjLT5zY19haCwgQVJfQlNTTVNLVSkgJiAweGZmZmYsIGFkZHIgKyA0KTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJhZGRybWFzazogJXBNXG4iLCBhZGRyKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfd2lwaHkgKiBnZXRfd2lwaHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJaWYgKHN0cmNtcChuYW1lLCB3aXBoeV9uYW1lKHNjLT5wcmlfd2lwaHktPmh3LT53aXBoeSkpID09IDApCisJCXJldHVybiBzYy0+cHJpX3dpcGh5OworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSAmJiBzdHJjbXAobmFtZSwgd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpKSA9PSAwKQorCQkJcmV0dXJuIGFwaHk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlbF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9kZWwoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgcGF1c2Vfd2lwaHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGdldF93aXBoeShzYywgbmFtZSk7CisJaWYgKCFhcGh5KQorCQlyZXR1cm4gLUVOT0VOVDsKKwlyZXR1cm4gYXRoOWtfd2lwaHlfcGF1c2UoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgdW5wYXVzZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworfQorCitzdGF0aWMgaW50IHNlbGVjdF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9zZWxlY3QoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgc2NoZWR1bGVfd2lwaHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGNvbnN0IGNoYXIgKm1zZWMpCit7CisJYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzYywgc2ltcGxlX3N0cnRvdWwobXNlYywgTlVMTCwgMCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3dpcGh5KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTBdOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAobGVuID4gMCAmJiBidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJYnVmW2xlbiAtIDFdID0gJ1wwJzsKKworCWlmIChzdHJuY21wKGJ1ZiwgImFkZCIsIDMpID09IDApIHsKKwkJaW50IHJlcyA9IGF0aDlrX3dpcGh5X2FkZChzYyk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiZGVsPSIsIDQpID09IDApIHsKKwkJaW50IHJlcyA9IGRlbF93aXBoeShzYywgYnVmICsgNCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAicGF1c2U9IiwgNikgPT0gMCkgeworCQlpbnQgcmVzID0gcGF1c2Vfd2lwaHkoc2MsIGJ1ZiArIDYpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CisJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZiwgInVucGF1c2U9IiwgOCkgPT0gMCkgeworCQlpbnQgcmVzID0gdW5wYXVzZV93aXBoeShzYywgYnVmICsgOCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic2VsZWN0PSIsIDcpID09IDApIHsKKwkJaW50IHJlcyA9IHNlbGVjdF93aXBoeShzYywgYnVmICsgNyk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic2NoZWR1bGU9IiwgOSkgPT0gMCkgeworCQlpbnQgcmVzID0gc2NoZWR1bGVfd2lwaHkoc2MsIGJ1ZiArIDkpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CisJfSBlbHNlCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc193aXBoeSA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV93aXBoeSwKKwkud3JpdGUgPSB3cml0ZV9maWxlX3dpcGh5LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFCit9OworCisKIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXNjLT5kZWJ1Zy5kZWJ1Z19tYXNrID0gYXRoOWtfZGVidWc7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLCBOVUxMKTsKLQlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jvb3QpCi0JCWdvdG8gZXJyOwotCiAJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSksCi0JCQkJCQkgICAgICBzYy0+ZGVidWcuZGVidWdmc19yb290KTsKKwkJCQkJCSAgICAgIGF0aDlrX2RlYnVnZnNfcm9vdCk7CiAJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19waHkpCiAJCWdvdG8gZXJyOwogCkBAIC0zNjAsNiArNTIyLDEyIEBACiAJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQpCiAJCWdvdG8gZXJyOwogCisJc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKAorCQkid2lwaHkiLCBTX0lSVUdPIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKKwkJJmZvcHNfd2lwaHkpOworCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpCisJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJYXRoOWtfZXhpdF9kZWJ1ZyhzYyk7CkBAIC0zNjgsOSArNTM2LDI0IEBACiAKIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc193aXBoeSk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0KTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19pbnRlcnJ1cHQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RtYSk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcGh5KTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19yb290KTsKK30KKworaW50IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpCit7CisJYXRoOWtfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLCBOVUxMKTsKKwlpZiAoIWF0aDlrX2RlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlKGF0aDlrX2RlYnVnZnNfcm9vdCk7CisJYXRoOWtfZGVidWdmc19yb290ID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5oCmluZGV4IDYxZTk2OTguLjA2NTI2OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApAQCAtOTEsMzEgKzkxLDM0IEBACiAJdTMyIHN1Y2Nlc3M7CiAJdTMyIHJldHJpZXM7CiAJdTMyIHhyZXRyaWVzOworCXU4IHBlcjsKIH07CiAKIHN0cnVjdCBhdGhfc3RhdHMgewogCXN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIGlzdGF0czsKLQlzdHJ1Y3QgYXRoX2xlZ2FjeV9yY19zdGF0cyBsZWdhY3lfcmNzdGF0c1sxMl07IC8qIG1heCgxMWEsMTFiLDExZykgKi8KLQlzdHJ1Y3QgYXRoXzExbl9yY19zdGF0cyBuX3Jjc3RhdHNbMTZdOyAvKiAwLi4xNSBNQ1MgcmF0ZXMgKi8KKwlzdHJ1Y3QgYXRoX2xlZ2FjeV9yY19zdGF0cyBsZWdhY3lfcmNzdGF0c1sxMl07CS8qIG1heCgxMWEsMTFiLDExZykgKi8KKwlzdHJ1Y3QgYXRoXzExbl9yY19zdGF0cyBuX3Jjc3RhdHNbMTZdOwkJLyogMC4uMTUgTUNTIHJhdGVzICovCiB9OwogCiBzdHJ1Y3QgYXRoOWtfZGVidWcgewogCWludCBkZWJ1Z19tYXNrOwotCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jjc3RhdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3dpcGh5OwogCXN0cnVjdCBhdGhfc3RhdHMgc3RhdHM7CiB9OwogCiB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogdm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKTsKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCk7CiB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAotCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMpOworCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcik7CiAKICNlbHNlCiAKQEAgLTEzMyw2ICsxMzYsMTUgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYXRoOWtfZGVidWdfY3JlYXRlX3Jvb3Qodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpCit7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkJCSAgICBlbnVtIGF0aDlrX2ludCBzdGF0dXMpCiB7CkBAIC0xNDQsNyArMTU2LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCi0JCQkJCSAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcykKKwkJCQkJICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKaW5kZXggYjU1ZTk5Mi4uMTgzYzk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKQEAgLTE3OSw2ICsxNzksNjkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX2dldF90eGdhaW5faW5kZXgoc3RydWN0IGF0aF9odyAqYWgsCisJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQlzdHJ1Y3QgY2FsRGF0YVBlckZyZXFPcExvb3AgKnJhd0RhdGFzZXRPcExvb3AsCisJCXU4ICpjYWxDaGFucywgIHUxNiBhdmFpbFBpZXJzLCB1OCAqcHdyLCB1OCAqcGNkYWNJZHgpCit7CisJdTggcGNkYWMsIGkgPSAwOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCWJvb2wgbWF0Y2g7CisJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCisJZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykKKwkJaWYgKGNhbENoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQorCQkJYnJlYWs7CisKKwltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgKKwkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsIElTX0NIQU5fMkdIWihjaGFuKSksCisJCQljYWxDaGFucywgbnVtUGllcnMsICZpZHhMLCAmaWR4Uik7CisJaWYgKG1hdGNoKSB7CisJCXBjZGFjID0gcmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wY2RhY1swXVswXTsKKwkJKnB3ciA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucHdyUGRnWzBdWzBdOworCX0gZWxzZSB7CisJCXBjZGFjID0gcmF3RGF0YXNldE9wTG9vcFtpZHhSXS5wY2RhY1swXVswXTsKKwkJKnB3ciA9IChyYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXSArCisJCQkJcmF3RGF0YXNldE9wTG9vcFtpZHhSXS5wd3JQZGdbMF1bMF0pLzI7CisJfQorCisJd2hpbGUgKHBjZGFjID4gYWgtPm9yaWdpbmFsR2FpbltpXSAmJgorCQkJaSA8IChBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFIC0gMSkpCisJCWkrKzsKKworCSpwY2RhY0lkeCA9IGk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfZ2V0X3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQl1MzIgaW5pdFR4R2FpbiwKKwkJCQlpbnQgdHhQb3dlciwKKwkJCQl1OCAqcFBEQURDVmFsdWVzKQoreworCXUzMiBpOworCXUzMiBvZmZzZXQ7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDZfMCwKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0VSUl9FU1RfTU9ERSwgMyk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzEsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw3LAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfSU5JVF9UWF9HQUlOLCBpbml0VHhHYWluKTsKKworCW9mZnNldCA9IHR4UG93ZXI7CisJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9OVU1fUERBRENfVkFMVUVTOyBpKyspCisJCWlmIChpIDwgb2Zmc2V0KQorCQkJcFBEQURDVmFsdWVzW2ldID0gMHgwOworCQllbHNlCisJCQlwUERBRENWYWx1ZXNbaV0gPSAweEZGOworfQorCisKKworCiBzdGF0aWMgdm9pZCBhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICpwb3dJbmZvLApAQCAtNDM5LDcgKzUwMiw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtKSB7CiAJY2FzZSBFRVBfTkZUSFJFU0hfMjoKLQkJcmV0dXJuIHBNb2RhbFsxXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07CisJCXJldHVybiBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKIAljYXNlIEFSX0VFUFJPTV9NQUMoMCk6CiAJCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07CiAJY2FzZSBBUl9FRVBST01fTUFDKDEpOgpAQCAtNDY2LDYgKzUyOSw4IEBACiAJCXJldHVybiBwQmFzZS0+dHhNYXNrOwogCWNhc2UgRUVQX1JYX01BU0s6CiAJCXJldHVybiBwQmFzZS0+cnhNYXNrOworCWNhc2UgRUVQX0ZSQUNfTl81RzoKKwkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTc1LDcgKzY0MCw3IEBACiAJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KIAkJCW1pbigodTE2KUFSNTQxNl9NQVhfUkFURV9QT1dFUiwgcFBkR2FpbkJvdW5kYXJpZXNbaV0pOwogCi0JCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKKwkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CiAJCQltaW5EZWx0YSA9IHBQZEdhaW5Cb3VuZGFyaWVzWzBdIC0gMjM7CiAJCQlwUGRHYWluQm91bmRhcmllc1swXSA9IDIzOwogCQl9IGVsc2UgewpAQCAtNjE0LDcgKzY3OSw3IEBACiAJCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOwogCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CiAKLQkJaWYgKHRndEluZGV4ID4gbWF4SW5kZXgpIHsKKwkJaWYgKHRndEluZGV4ID49IG1heEluZGV4KSB7CiAJCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgogCQkJICAgICAgIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CiAJCQkJdG1wVmFsID0gKGludDE2X3QpIFRNUF9WQUxfVlBEX1RBQkxFOwpAQCAtNjQ4LDExICs3MTMsMTEgQEAKIAl1OCAqcENhbEJDaGFucyA9IE5VTEw7CiAJdTE2IHBkR2Fpbk92ZXJsYXBfdDI7CiAJc3RhdGljIHU4IHBkYWRjVmFsdWVzW0FSNTQxNl9OVU1fUERBRENfVkFMVUVTXTsKLQl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI1NDE2X1BEX0dBSU5TX0lOX01BU0tdOworCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTS107CiAJdTE2IG51bVBpZXJzLCBpLCBqOwogCWludDE2X3QgdE1pbkNhbFBvd2VyOwogCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOwotCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9OVU1fUERfR0FJTlNdID0geyAwLCAwLCAwLCAwIH07CisJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKIAl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7CiAKIAl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CkBAIC02NjcsMTYgKzczMiwxNiBAQAogCX0KIAogCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKLQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOworCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7CiAKIAludW1YcGRHYWluID0gMDsKIAotCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewotCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgewotCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X05VTV9QRF9HQUlOUykKKwlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKKwkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKKwkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9FRVA0S19OVU1fUERfR0FJTlMpCiAJCQkJYnJlYWs7CiAJCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOworCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7CiAJCQludW1YcGRHYWluKys7CiAJCX0KIAl9CkBAIC02ODcsMTEgKzc1MiwxMCBAQAogCQkgICAgICB4cGRHYWluVmFsdWVzWzBdKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMiwKIAkJICAgICAgeHBkR2FpblZhbHVlc1sxXSk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzMsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMl0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLCAwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSAmJgorCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCiAJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCiAJCSAgICAoaSAhPSAwKSkgewogCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKQEAgLTcwNyw3ICs3NzEsNyBAQAogCQkJCQkgICAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCiAJCQkJCSAgICBwZGFkY1ZhbHVlcywgbnVtWHBkR2Fpbik7CiAKLQkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgeworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKIAkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKIAkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAogCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQpAQCAtMTU5NCwxMSArMTY1OCwyNiBAQAogCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7CiAJY2FzZSBFRVBfVFhHQUlOX1RZUEU6CiAJCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKKwljYXNlIEVFUF9PTF9QV1JDVFJMOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5vcGVuTG9vcFB3ckNudGwgPyB0cnVlIDogZmFsc2U7CisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsKKwljYXNlIEVFUF9SQ19DSEFJTl9NQVNLOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5yY0NoYWluTWFzazsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CiAJY2FzZSBFRVBfREFDX0hQV1JfNUc6CiAJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjApCiAJCQlyZXR1cm4gcEJhc2UtPmRhY0hpUHdyTW9kZV81RzsKIAkJZWxzZQogCQkJcmV0dXJuIDA7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIyKQorCQkJcmV0dXJuIHBCYXNlLT5mcmFjX25fNWc7CisJCWVsc2UKKwkJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE2MjgsNyArMTcwNyw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKKwkJaWYgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgJiYKIAkJICAgIChhaC0+cnhjaGFpbm1hc2sgPT0gNSB8fCBhaC0+dHhjaGFpbm1hc2sgPT0gNSkKIAkJICAgICYmIChpICE9IDApKQogCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKQEAgLTE2NDksNyArMTcyOCw3IEBACiAJCQkgIFNNKHBNb2RhbC0+aXFDYWxRQ2hbaV0sCiAJCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7CiAKLQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CiAJCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKIAkJCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07CiAJCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKQEAgLTE4MzIsOCArMTkxMSwxNSBAQAogCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKIAl9CiAKKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NLX1RYX0NUUkwsCisJCQkJQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0ssCisJCQkJcE1vZGFsLT5taXNjQml0cyk7CisKKwogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkgewotCQlpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQorCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQogCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCiAJCQkJCWVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOwogCQllbHNlIGlmIChlZXAtPmJhc2VFZXBIZWFkZXIuZGFjSGlQd3JNb2RlXzVHKQpAQCAtMTg0NCw2ICsxOTMwLDEwIEBACiAKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZSQU1FX0NUTCwgQVJfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLAogCQkJCXBNb2RhbC0+bWlzY0JpdHMgPj4gMik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw5LAorCQkJCUFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSywKKwkJCQllZXAtPmJhc2VFZXBIZWFkZXIuZGVzaXJlZFNjYWxlQ0NLKTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTIwMDQsNyArMjA5NCw3IEBACiAJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KIAkJCW1pbigodTE2KUFSNTQxNl9NQVhfUkFURV9QT1dFUiwgcFBkR2FpbkJvdW5kYXJpZXNbaV0pOwogCi0JCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKKwkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CiAJCQltaW5EZWx0YSA9IHBQZEdhaW5Cb3VuZGFyaWVzWzBdIC0gMjM7CiAJCQlwUGRHYWluQm91bmRhcmllc1swXSA9IDIzOwogCQl9IGVsc2UgewpAQCAtMjA3Myw2ICsyMTYzLDEwIEBACiAJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCiB7CisjZGVmaW5lIFNNX1BEX0dBSU4oeCkgU00oMHgzOCwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeCkKKyNkZWZpbmUgU01fUERHQUlOX0IoeCwgeSkgXAorCQlTTSgoZ2FpbkJvdW5kYXJpZXNbeF0pLCBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfIyN5KQorCiAJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKIAlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhc2V0OwogCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKQEAgLTIxMDYsNiArMjIwMCwxMiBAQAogCQludW1QaWVycyA9IEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTOwogCX0KIAorCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAmJiBJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1swXTsKKwkJYWgtPmluaXRQREFEQyA9ICgoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopCisJCQkJIHBSYXdEYXRhc2V0KS0+dnBkUGRnWzBdWzBdOworCX0KKwogCW51bVhwZEdhaW4gPSAwOwogCiAJZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7CkBAIC0yMTI4LDcgKzIyMjgsNyBAQAogCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSAmJgorCQlpZiAoQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSAmJgogCQkgICAgKGFoLT5yeGNoYWlubWFzayA9PSA1IHx8IGFoLT50eGNoYWlubWFzayA9PSA1KSAmJgogCQkgICAgKGkgIT0gMCkpIHsKIAkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7CkBAIC0yMTQxLDI1ICsyMjQxLDQ1IEBACiAJCQllbHNlCiAJCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGE1R1tpXTsKIAotCQkJYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLCBjaGFuLAotCQkJCQkgICAgcFJhd0RhdGFzZXQsIHBDYWxCQ2hhbnMsCi0JCQkJCSAgICBudW1QaWVycywgcGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJICAgICZ0TWluQ2FsUG93ZXIsIGdhaW5Cb3VuZGFyaWVzLAotCQkJCQkgICAgcGRhZGNWYWx1ZXMsIG51bVhwZEdhaW4pOwogCi0JCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1swXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMV0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMikKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1szXSwKLQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQpKTsKKwkJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJCXU4IHBjZGFjSWR4OworCQkJCXU4IHR4UG93ZXI7CisKKwkJCQlhdGg5a19nZXRfdHhnYWluX2luZGV4KGFoLCBjaGFuLAorCQkJCShzdHJ1Y3QgY2FsRGF0YVBlckZyZXFPcExvb3AgKilwUmF3RGF0YXNldCwKKwkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywgJnR4UG93ZXIsICZwY2RhY0lkeCk7CisJCQkJYXRoOWtfb2xjX2dldF9wZGFkY3MoYWgsIHBjZGFjSWR4LAorCQkJCQkJICAgICB0eFBvd2VyLzIsIHBkYWRjVmFsdWVzKTsKKwkJCX0gZWxzZSB7CisJCQkJYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLAorCQkJCQkJCWNoYW4sIHBSYXdEYXRhc2V0LAorCQkJCQkJCXBDYWxCQ2hhbnMsIG51bVBpZXJzLAorCQkJCQkJCXBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCQkJJnRNaW5DYWxQb3dlciwKKwkJCQkJCQlnYWluQm91bmRhcmllcywKKwkJCQkJCQlwZGFkY1ZhbHVlcywKKwkJCQkJCQludW1YcGRHYWluKTsKKwkJCX0KKworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00oMHg2LAorCQkJCQkJQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApIHwKKwkJCQkJCVNNX1BEX0dBSU4oMSkgfCBTTV9QRF9HQUlOKDIpIHwKKwkJCQkJCVNNX1BEX0dBSU4oMykgfCBTTV9QRF9HQUlOKDQpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlSRUdfV1JJVEUoYWgsCisJCQkJCQlBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCQlTTShwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApfAorCQkJCQkJU01fUERHQUlOX0IoMCwgMSkgfAorCQkJCQkJU01fUERHQUlOX0IoMSwgMikgfAorCQkJCQkJU01fUERHQUlOX0IoMiwgMykgfAorCQkJCQkJU01fUERHQUlOX0IoMywgNCkpOworCQkJCX0KIAkJCX0KIAogCQkJcmVnT2Zmc2V0ID0gQVJfUEhZX0JBU0UgKyAoNjcyIDw8IDIpICsgcmVnQ2hhaW5PZmZzZXQ7CkBAIC0yMTkzLDYgKzIzMTMsOCBAQAogCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKIAogCXJldHVybiB0cnVlOworI3VuZGVmIFNNX1BEX0dBSU4KKyN1bmRlZiBTTV9QREdBSU5fQgogfQogCiBzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLApAQCAtMjQ5MywxMyArMjYxNSwxNCBAQAogCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKIAkJCQkgICAgdTggcG93ZXJMaW1pdCkKIHsKKyNkZWZpbmUgUlRfQVJfREVMVEEoeCkgKHJhdGVzQXJyYXlbeF0gLSBjY2tfb2ZkbV9kZWx0YSkKIAlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOwogCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQogCQkmKHBFZXBEYXRhLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKIAlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwogCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKIAl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7Ci0JaW50IGk7CisJaW50IGksIGNja19vZmRtX2RlbHRhID0gMDsKIAogCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOwogCkBAIC0yNTQ4LDE2ICsyNjcxLDMwIEBACiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMjRtYl0sIDApKTsKIAogCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTFsXSwgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81c10sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJY2NrX29mZG1fZGVsdGEgPSAyOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUycyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUybCksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMWwpLCAwKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKKwkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExcyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMWwpLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81cyksIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNWwpLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOworCQl9CiAJfQogCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCkBAIC0yNTkwLDEyICsyNzI3LDE5IEBACiAJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKIAkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCiAJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGVFeHRDY2spLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlRHVwQ2NrKSwgMCkpOworCQl9IGVsc2UgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CisJCX0KIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9TVUIsCkBAIC0yNjE1LDYgKzI3NTksMjEgQEAKIAllbHNlCiAJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CiAKKwlzd2l0Y2goYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSkgeworCWNhc2UgMToKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiSW52YWxpZCBjaGFpbm1hc2sgY29uZmlndXJhdGlvblxuIik7CisJCWJyZWFrOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCmluZGV4IDk5ODYzYjUuLmQ2ZjYxMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCkBAIC03NSwxMSArNzUsMjkgQEAKICNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDAgMgogI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MCAzCiAKKyNkZWZpbmUgSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTiAgICAgNiAgLyogMTAqbG9nMTAoMikqMiAqLworI2RlZmluZSBJTkNSRUFTRV9NQVhQT1dfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCisKKy8qCisgKiBGb3IgQVI5Mjg1IGFuZCBsYXRlciBjaGlwc2V0cywgdGhlIGZvbGxvd2luZyBiaXRzIGFyZSBub3QgYmVpbmcgcHJvZ3JhbW1lZAorICogaW4gRUVQUk9NIGFuZCBzbyBuZWVkIHRvIGJlIGVuYWJsZWQgYWx3YXlzLgorICoKKyAqIEJpdCAwOiBlbl9mY2NfbWlkCisgKiBCaXQgMTogZW5famFwX21pZAorICogQml0IDI6IGVuX2ZjY19kZnNfaHQ0MAorICogQml0IDM6IGVuX2phcF9odDQwCisgKiBCaXQgNDogZW5famFwX2Rmc19odDQwCisgKi8KKyNkZWZpbmUgQVI5Mjg1X1JERVhUX0RFRkFVTFQgICAgMHgxRgorCiAjZGVmaW5lIEFSX0VFUFJPTV9NQUMoaSkJKDB4MWQrKGkpKQogI2RlZmluZSBBVEg5S19QT1dfU00oX3IsIF9zKQkoKChfcikgJiAweDNmKSA8PCAoX3MpKQogI2RlZmluZSBGUkVRMkZCSU4oeCwgeSkJCSgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCiAjZGVmaW5lIGF0aDlrX2h3X3VzZV9mbGFzaChfYWgpCSghKF9haC0+YWhfZmxhZ3MgJiBBSF9VU0VfRUVQUk9NKSkKIAorI2RlZmluZSBPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJiBcCisJCQkJIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpCisKICNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKICNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCiAjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCkBAIC0xMTAsNiArMTI4LDcgQEAKICNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcgICAgICAweDExCiAjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5ICAgICAgMHgxMwogI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCAgICAgIDB4MTQKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIgICAgICAweDE2CiAKICNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4CiAjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNApAQCAtMTUyLDYgKzE3MSw4IEBACiAjZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAgICAgICAgICAgNQogI2RlZmluZSBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUyAgICAgICAgICAgICAgIDEKIAorI2RlZmluZSBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFIDIyCisKIGVudW0gZWVwcm9tX3BhcmFtIHsKIAlFRVBfTkZUSFJFU0hfNSwKIAlFRVBfTkZUSFJFU0hfMiwKQEAgLTE3Miw3ICsxOTMsMTAgQEAKIAlFRVBfUlhfTUFTSywKIAlFRVBfUlhHQUlOX1RZUEUsCiAJRUVQX1RYR0FJTl9UWVBFLAorCUVFUF9PTF9QV1JDVFJMLAorCUVFUF9SQ19DSEFJTl9NQVNLLAogCUVFUF9EQUNfSFBXUl81RywKKwlFRVBfRlJBQ19OXzVHCiB9OwogCiBlbnVtIGFyNTQxNl9yYXRlcyB7CkBAIC0yMTIsMTIgKzIzNiwxNCBAQAogCXU4IGZ1dHVyZUJhc2VfMVsyXTsKIAl1OCByeEdhaW5UeXBlOwogCXU4IGRhY0hpUHdyTW9kZV81RzsKLQl1OCBmdXR1cmVCYXNlXzI7CisJdTggb3Blbkxvb3BQd3JDbnRsOwogCXU4IGRhY0xwTW9kZTsKIAl1OCB0eEdhaW5UeXBlOwogCXU4IHJjQ2hhaW5NYXNrOwogCXU4IGRlc2lyZWRTY2FsZUNDSzsKLQl1OCBmdXR1cmVCYXNlXzNbMjNdOworCXU4IHBvd2VyX3RhYmxlX29mZnNldDsKKwl1OCBmcmFjX25fNWc7CisJdTggZnV0dXJlQmFzZV8zWzIxXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgewpAQCAtMjM1LDcgKzI2MSw3IEBACiAJdTE2IGRldmljZUNhcDsKIAl1MzIgYmluQnVpbGROdW1iZXI7CiAJdTggZGV2aWNlVHlwZTsKLQl1OCBmdXR1cmVCYXNlWzFdOworCXU4IHR4R2FpblR5cGU7CiB9IF9fcGFja2VkOwogCiAKQEAgLTI5MSw2ICszMTcsMTMgQEAKIAlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCB7CisJdTggcHdyUGRnWzJdWzVdOworCXU4IHZwZFBkZ1syXVs1XTsKKwl1OCBwY2RhY1syXVs1XTsKKwl1OCBlbXB0eVsyXVs1XTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyIHsKIAl1MzIgIGFudEN0cmxDaGFpbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CiAJdTMyICBhbnRDdHJsQ29tbW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmMKaW5kZXggY2FkOGUzOS4uZDQ5NGU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jCkBAIC04NCwxMSArODQsMTMgQEAKIAkJcmV0dXJuIGF0aDlrX2h3X21hY19jbGtzKGFoLCB1c2Vjcyk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfd2FpdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCitib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCAoQUhfVElNRU9VVCAvIEFIX1RJTUVfUVVBTlRVTSk7IGkrKykgeworCUJVR19PTih0aW1lb3V0IDwgQUhfVElNRV9RVUFOVFVNKTsKKworCWZvciAoaSA9IDA7IGkgPCAodGltZW91dCAvIEFIX1RJTUVfUVVBTlRVTSk7IGkrKykgewogCQlpZiAoKFJFR19SRUFEKGFoLCByZWcpICYgbWFzaykgPT0gdmFsKQogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTk2LDggKzk4LDggQEAKIAl9CiAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdfSU8sCi0JCSJ0aW1lb3V0IG9uIHJlZyAweCV4OiAweCUwOHggJiAweCUwOHggIT0gMHglMDh4XG4iLAotCQlyZWcsIFJFR19SRUFEKGFoLCByZWcpLCBtYXNrLCB2YWwpOworCQkidGltZW91dCAoJWQgdXMpIG9uIHJlZyAweCV4OiAweCUwOHggJiAweCUwOHggIT0gMHglMDh4XG4iLAorCQl0aW1lb3V0LCByZWcsIFJFR19SRUFEKGFoLCByZWcpLCBtYXNrLCB2YWwpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMzg5LDYgKzM5MSwyNSBAQAogCX0KIAogCWFoLT5jb25maWcuaW50cl9taXRpZ2F0aW9uID0gMTsKKworCS8qCisJICogV2UgbmVlZCB0aGlzIGZvciBQQ0kgZGV2aWNlcyBvbmx5IChDYXJkYnVzLCBQQ0ksIG1pbmlQQ0kpCisJICogX2FuZF8gaWYgb24gbm9uLXVuaXByb2Nlc3NvciBzeXN0ZW1zIChNdWx0aXByb2Nlc3Nvci9IVCkuCisJICogVGhpcyBtZWFucyB3ZSB1c2UgaXQgZm9yIGFsbCBBUjU0MTYgZGV2aWNlcywgYW5kIHRoZSBmZXcKKwkgKiBtaW5vciBQQ0kgQVI5MjgwIGRldmljZXMgb3V0IHRoZXJlLgorCSAqCisJICogU2VyaWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZXNlIGRldmljZXMgZG8gbm90IGhhbmRsZQorCSAqIHdlbGwgdGhlIGNhc2Ugb2YgdHdvIGNvbmN1cnJlbnQgcmVhZHMvd3JpdGVzIGR1ZSB0byB0aGUgbGF0ZW5jeQorCSAqIGludm9sdmVkLiBEdXJpbmcgb25lIHJlYWQvd3JpdGUgYW5vdGhlciByZWFkL3dyaXRlIGNhbiBiZSBpc3N1ZWQKKwkgKiBvbiBhbm90aGVyIENQVSB3aGlsZSB0aGUgcHJldmlvdXMgcmVhZC93cml0ZSBtYXkgc3RpbGwgYmUgd29ya2luZworCSAqIG9uIG91ciBoYXJkd2FyZSwgaWYgd2UgaGl0IHRoaXMgY2FzZSB0aGUgaGFyZHdhcmUgcG9vcHMgaW4gYSBsb29wLgorCSAqIFdlIHByZXZlbnQgdGhpcyBieSBzZXJpYWxpemluZyByZWFkcyBhbmQgd3JpdGVzLgorCSAqCisJICogVGhpcyBpc3N1ZSBpcyBub3QgcHJlc2VudCBvbiBQQ0ktRXhwcmVzcyBkZXZpY2VzIG9yIHByZS1BUjU0MTYKKwkgKiBkZXZpY2VzIChsZWdhY3ksIDgwMi4xMWFiZykuCisJICovCisJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQorCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0gU0VSX1JFR19NT0RFX0FVVE87CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19uZXdzdGF0ZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLApAQCAtNjA4LDcgKzYyOSw4IEBACiAJfQogCiAJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKLQkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB7CisJCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSB8fAorCQkgICAgKEFSX1NSRVZfOTI4MChhaCkgJiYgIWFoLT5pc19wY2lleHByZXNzKSkgewogCQkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9CiAJCQkJU0VSX1JFR19NT0RFX09OOwogCQl9IGVsc2UgewpAQCAtNjYwLDIyICs2ODIsMTYgQEAKIAkJYWgtPnN1cHBfY2FscyA9IEFEQ19HQUlOX0NBTCB8IEFEQ19EQ19DQUwgfCBJUV9NSVNNQVRDSF9DQUw7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTE2MChhaCkpIHsKLQkJYWgtPmNvbmZpZy5lbmFibGVfYW5pID0gMTsKLQkJYWgtPmFuaV9mdW5jdGlvbiA9IChBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCB8Ci0JCQkJCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMKTsKLQl9IGVsc2UgewotCQlhaC0+YW5pX2Z1bmN0aW9uID0gQVRIOUtfQU5JX0FMTDsKLQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCWFoLT5hbmlfZnVuY3Rpb24gJj0JfkFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTDsKLQkJfQotCX0KKwlhaC0+YW5pX2Z1bmN0aW9uID0gQVRIOUtfQU5JX0FMTDsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJYWgtPmFuaV9mdW5jdGlvbiAmPSB+QVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKIAkJIlRoaXMgTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBcbiIsCiAJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24sIGFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAKIAlpZiAoQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NV8xXzIpLCA2KTsKIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4NUNvbW1vbl85Mjg1XzFfMiwKQEAgLTgxNSw2ICs4MzEsMjIgQEAKIAlpZiAoZWNvZGUgIT0gMCkKIAkJZ290byBiYWQ7CiAKKwlpZiAoQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCQl1MzIgdHhnYWluX3R5cGUgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKTsKKworCQkvKiB0eGdhaW4gdGFibGUgKi8KKwkJaWYgKHR4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfVFhHQUlOX0hJR0hfUE9XRVIpIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQlhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzIsCisJCQlBUlJBWV9TSVpFKGFyOTI4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85Mjg1XzFfMiksIDYpOworCQl9IGVsc2UgeworCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCWFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzIsCisJCQlBUlJBWV9TSVpFKGFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzIpLCA2KTsKKwkJfQorCisJfQorCiAJLyogcnhnYWluIHRhYmxlICovCiAJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkpCiAJCWF0aDlrX2h3X2luaXRfcnhnYWluX2luaShhaCk7CkBAIC04MjMsNyArODU1LDE2IEBACiAJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkpCiAJCWF0aDlrX2h3X2luaXRfdHhnYWluX2luaShhaCk7CiAKLQlpZiAoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgeworCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwgImZhaWxlZCBhdGg5a19od19maWxsX2NhcF9pbmZvXG4iKTsKKwkJZWNvZGUgPSAtRUlOVkFMOworCQlnb3RvIGJhZDsKKwl9CisKKwlpZiAoKGFoLT5od192ZXJzaW9uLmRldmlkID09IEFSOTI4MF9ERVZJRF9QQ0kpICYmCisJICAgIHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBhaC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpIHsKKworCQkvKiBFRVBST00gRml4dXAgKi8KIAkJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKIAkJCXUzMiByZWcgPSBJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgMCk7CiAKQEAgLTgzOCwxMyArODc5LDYgQEAKIAkJfQogCX0KIAotCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKLQkJCSJmYWlsZWQgYXRoOWtfaHdfZmlsbF9jYXBfaW5mb1xuIik7Ci0JCWVjb2RlID0gLUVJTlZBTDsKLQkJZ290byBiYWQ7Ci0JfQotCiAJZWNvZGUgPSBhdGg5a19od19pbml0X21hY2FkZHIoYWgpOwogCWlmIChlY29kZSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsCkBAIC0xMTQ5LDcgKzExODMsNyBAQAogCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiAKIAotCWlmICghQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgfHwKKwlpZiAoIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgfHwKIAkgICAgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuOwogCkBAIC0xMjAwLDYgKzEyMzQsMTcgQEAKIAkJcmV0dXJuIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoYWgsIHBFZXBEYXRhLCByZWcsIHZhbHVlKTsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfb2xjX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKQorCQlhaC0+b3JpZ2luYWxHYWluW2ldID0KKwkJCU1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQpLAorCQkJCQlBUl9QSFlfVFhfR0FJTik7CisJYWgtPlBEQURDZGVsdGEgPSAwOworfQorCiBzdGF0aWMgaW50IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCWVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKQpAQCAtMTI0MCw3ICsxMjg1LDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BRENfU0VSSUFMX0NUTCwgQVJfUEhZX1NFTF9FWFRFUk5BTF9SQURJTyk7CiAJYWgtPmVlcF9vcHMtPnNldF9hZGRhYyhhaCwgY2hhbik7CiAKLQlpZiAoQVJfU1JFVl81NDE2X1YyMl9PUl9MQVRFUihhaCkpIHsKKwlpZiAoQVJfU1JFVl81NDE2XzIyX09SX0xBVEVSKGFoKSkgewogCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlBZGRhYywgMSwgcmVnV3JpdGVzKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgdGVtcDsKQEAgLTEyNzgsNyArMTMyMyw4IEBACiAJaWYgKEFSX1NSRVZfOTI4MChhaCkpCiAJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCisJaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgKEFSX1NSRVZfOTI4NShhaCkgJiYKKwkgICAgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkpCiAJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlDb21tb24uaWFfcm93czsgaSsrKSB7CkBAIC0xMzA2LDYgKzEzNTIsOSBAQAogCWF0aDlrX2h3X3NldF9yZWdzKGFoLCBjaGFuLCBtYWNtb2RlKTsKIAlhdGg5a19od19pbml0X2NoYWluX21hc2tzKGFoKTsKIAorCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJYXRoOWtfb2xjX2luaXQoYWgpOworCiAJc3RhdHVzID0gYWgtPmVlcF9vcHMtPnNldF90eHBvd2VyKGFoLCBjaGFuLAogCQkJCSAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKIAkJCQkgIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLApAQCAtMTQ2NCw2ICsxNTEzLDE0IEBACiAJdTMyIHJzdF9mbGFnczsKIAl1MzIgdG1wUmVnOwogCisJaWYgKEFSX1NSRVZfOTEwMChhaCkpIHsKKwkJdTMyIHZhbCA9IFJFR19SRUFEKGFoLCBBUl9SVENfREVSSVZFRF9DTEspOworCQl2YWwgJj0gfkFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0Q7CisJCXZhbCB8PSBTTSgxLCBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9SVENfREVSSVZFRF9DTEssIHZhbCk7CisJCSh2b2lkKVJFR19SRUFEKGFoLCBBUl9SVENfREVSSVZFRF9DTEspOworCX0KKwogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCkBAIC0xNDkwLDcgKzE1NDcsNyBAQAogCXVkZWxheSg1MCk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SQywgMCk7Ci0JaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9SVENfUkMsIEFSX1JUQ19SQ19NLCAwKSkgeworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUlRDX1JDLCBBUl9SVENfUkNfTSwgMCwgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKIAkJCSJSVEMgc3R1Y2sgaW4gTUFDIHJlc2V0XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTUxMywxMiArMTU3MCwxNCBAQAogCQkgIEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRVNFVCwgMCk7CisJdWRlbGF5KDIpOwogCVJFR19XUklURShhaCwgQVJfUlRDX1JFU0VULCAxKTsKIAogCWlmICghYXRoOWtfaHdfd2FpdChhaCwKIAkJCSAgIEFSX1JUQ19TVEFUVVMsCiAJCQkgICBBUl9SVENfU1RBVFVTX00sCi0JCQkgICBBUl9SVENfU1RBVFVTX09OKSkgeworCQkJICAgQVJfUlRDX1NUQVRVU19PTiwKKwkJCSAgIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsICJSVEMgbm90IHdha2luZyB1cFxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xNTgwLDcgKzE2MzksMTAgQEAKIHN0YXRpYyBib29sIGF0aDlrX2h3X2NoaXBfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0JaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9XQVJNKSkKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9QT1dFUl9PTikpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfV0FSTSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKQEAgLTE2MTAsNyArMTY3Miw3IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRkJVU19SRVEsIEFSX1BIWV9SRkJVU19SRVFfRU4pOwogCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX1JGQlVTX0dSQU5ULCBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sCi0JCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4pKSB7CisJCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAogCQkJIkNvdWxkIG5vdCBraWxsIGJhc2ViYW5kIFJYXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjM4NCwxNCArMjQ0NiwxMSBAQAogCiBib29sIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LAogCQkJCSBjb25zdCBzdHJ1Y3QgYXRoOWtfa2V5dmFsICprLAotCQkJCSBjb25zdCB1OCAqbWFjLCBpbnQgeG9yS2V5KQorCQkJCSBjb25zdCB1OCAqbWFjKQogewogCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJdTMyIGtleTAsIGtleTEsIGtleTIsIGtleTMsIGtleTQ7CiAJdTMyIGtleVR5cGU7Ci0JdTMyIHhvck1hc2sgPSB4b3JLZXkgPwotCQkoQVRIOUtfS0VZX1hPUiA8PCAyNCB8IEFUSDlLX0tFWV9YT1IgPDwgMTYgfCBBVEg5S19LRVlfWE9SIDw8IDgKLQkJIHwgQVRIOUtfS0VZX1hPUikgOiAwOwogCiAJaWYgKGVudHJ5ID49IHBDYXAtPmtleWNhY2hlX3NpemUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfS0VZQ0FDSEUsCkBAIC0yNDQzLDI2ICsyNTAyLDU3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlrZXkwID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDApIF4geG9yTWFzazsKLQlrZXkxID0gKGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyA0KSBeIHhvck1hc2spICYgMHhmZmZmOwotCWtleTIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdmFsICsgNikgXiB4b3JNYXNrOwotCWtleTMgPSAoZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3ZhbCArIDEwKSBeIHhvck1hc2spICYgMHhmZmZmOwotCWtleTQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdmFsICsgMTIpIF4geG9yTWFzazsKKwlrZXkwID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDApOworCWtleTEgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdmFsICsgNCk7CisJa2V5MiA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyA2KTsKKwlrZXkzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3ZhbCArIDEwKTsKKwlrZXk0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDEyKTsKIAlpZiAoay0+a3ZfbGVuIDw9IExFTl9XRVAxMDQpCiAJCWtleTQgJj0gMHhmZjsKIAorCS8qCisJICogTm90ZTogS2V5IGNhY2hlIHJlZ2lzdGVycyBhY2Nlc3Mgc3BlY2lhbCBtZW1vcnkgYXJlYSB0aGF0IHJlcXVpcmVzCisJICogdHdvIDMyLWJpdCB3cml0ZXMgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSB2YWx1ZXMgaW4gdGhlIGludGVybmFsCisJICogbWVtb3J5LiBDb25zZXF1ZW50bHksIHRoZSBleGFjdCBvcmRlciBhbmQgcGFpcnMgdXNlZCBoZXJlIG11c3QgYmUKKwkgKiBtYWludGFpbmVkLgorCSAqLworCiAJaWYgKGtleVR5cGUgPT0gQVJfS0VZVEFCTEVfVFlQRV9US0lQICYmIEFUSDlLX0lTX01JQ19FTkFCTEVEKGFoKSkgewogCQl1MTYgbWljZW50cnkgPSBlbnRyeSArIDY0OwogCisJCS8qCisJCSAqIFdyaXRlIGludmVydGVkIGtleVs0NzowXSBmaXJzdCB0byBhdm9pZCBNaWNoYWVsIE1JQyBlcnJvcnMKKwkJICogb24gZnJhbWVzIHRoYXQgY291bGQgYmUgc2VudCBvciByZWNlaXZlZCBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKiBUaGUgY29ycmVjdCBrZXkgd2lsbCBiZSB3cml0dGVuIGluIHRoZSBlbmQgb25jZSBldmVyeXRoaW5nCisJCSAqIGVsc2UgaXMgcmVhZHkuCisJCSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCB+a2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIH5rZXkxKTsKKworCQkvKiBXcml0ZSBrZXlbOTU6NDhdICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMihlbnRyeSksIGtleTIpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMoZW50cnkpLCBrZXkzKTsKKworCQkvKiBXcml0ZSBrZXlbMTI3Ojk2XSBhbmQga2V5IHR5cGUgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KGVudHJ5KSwga2V5NCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShlbnRyeSksIGtleVR5cGUpOworCisJCS8qIFdyaXRlIE1BQyBhZGRyZXNzIGZvciB0aGUgZW50cnkgKi8KIAkJKHZvaWQpIGF0aDlrX2h3X2tleXNldG1hYyhhaCwgZW50cnksIG1hYyk7CiAKIAkJaWYgKGFoLT5taXNjX21vZGUgJiBBUl9QQ1VfTUlDX05FV19MT0NfRU5BKSB7CisJCQkvKgorCQkJICogVEtJUCB1c2VzIHR3byBrZXkgY2FjaGUgZW50cmllczoKKwkJCSAqIE1pY2hhZWwgTUlDIFRYL1JYIGtleXMgaW4gdGhlIHNhbWUga2V5IGNhY2hlIGVudHJ5CisJCQkgKiAoaWR4ID0gbWFpbiBpbmRleCArIDY0KToKKwkJCSAqIGtleTAgWzMxOjBdID0gUlgga2V5IFszMTowXQorCQkJICoga2V5MSBbMTU6MF0gPSBUWCBrZXkgWzMxOjE2XQorCQkJICoga2V5MSBbMzE6MTZdID0gcmVzZXJ2ZWQKKwkJCSAqIGtleTIgWzMxOjBdID0gUlgga2V5IFs2MzozMl0KKwkJCSAqIGtleTMgWzE1OjBdID0gVFgga2V5IFsxNTowXQorCQkJICoga2V5MyBbMzE6MTZdID0gcmVzZXJ2ZWQKKwkJCSAqIGtleTQgWzMxOjBdID0gVFgga2V5IFs2MzozMl0KKwkJCSAqLwogCQkJdTMyIG1pYzAsIG1pYzEsIG1pYzIsIG1pYzMsIG1pYzQ7CiAKIAkJCW1pYzAgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgMCk7CkBAIC0yNDcwLDQ1ICsyNTYwLDg0IEBACiAJCQltaWMxID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3R4bWljICsgMikgJiAweGZmZmY7CiAJCQltaWMzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3R4bWljICsgMCkgJiAweGZmZmY7CiAJCQltaWM0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3R4bWljICsgNCk7CisKKwkJCS8qIFdyaXRlIFJYWzMxOjBdIGFuZCBUWFszMToxNl0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgbWljMSk7CisKKwkJCS8qIFdyaXRlIFJYWzYzOjMyXSBhbmQgVFhbMTU6MF0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMihtaWNlbnRyeSksIG1pYzIpOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKG1pY2VudHJ5KSwgbWljMyk7CisKKwkJCS8qIFdyaXRlIFRYWzYzOjMyXSBhbmQga2V5VHlwZShyZXNlcnZlZCkgKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChtaWNlbnRyeSksIG1pYzQpOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9UWVBFKG1pY2VudHJ5KSwKIAkJCQkgIEFSX0tFWVRBQkxFX1RZUEVfQ0xSKTsKIAogCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRLSVAgdXNlcyBmb3VyIGtleSBjYWNoZSBlbnRyaWVzICh0d28gZm9yIGdyb3VwCisJCQkgKiBrZXlzKToKKwkJCSAqIE1pY2hhZWwgTUlDIFRYL1JYIGtleXMgYXJlIGluIGRpZmZlcmVudCBrZXkgY2FjaGUKKwkJCSAqIGVudHJpZXMgKGlkeCA9IG1haW4gaW5kZXggKyA2NCBmb3IgVFggYW5kCisJCQkgKiBtYWluIGluZGV4ICsgMzIgKyA5NiBmb3IgUlgpOgorCQkJICoga2V5MCBbMzE6MF0gPSBUWC9SWCBNSUMga2V5IFszMTowXQorCQkJICoga2V5MSBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoga2V5MiBbMzE6MF0gPSBUWC9SWCBNSUMga2V5IFs2MzozMl0KKwkJCSAqIGtleTMgWzMxOjBdID0gcmVzZXJ2ZWQKKwkJCSAqIGtleTQgWzMxOjBdID0gcmVzZXJ2ZWQKKwkJCSAqCisJCQkgKiBVcHBlciBsYXllciBjb2RlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHNlcGFyYXRlbHkKKwkJCSAqIGZvciBUWCBhbmQgUlgga2V5cyB3aGVuIHRoZXNlIHJlZ2lzdGVycyBvZmZzZXRzIGFyZQorCQkJICogdXNlZC4KKwkJCSAqLwogCQkJdTMyIG1pYzAsIG1pYzI7CiAKIAkJCW1pYzAgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgMCk7CiAJCQltaWMyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X21pYyArIDQpOworCisJCQkvKiBXcml0ZSBNSUMga2V5WzMxOjBdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAobWljZW50cnkpLCBtaWMwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShtaWNlbnRyeSksIDApOworCisJCQkvKiBXcml0ZSBNSUMga2V5WzYzOjMyXSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKG1pY2VudHJ5KSwgbWljMik7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMobWljZW50cnkpLCAwKTsKKworCQkJLyogV3JpdGUgVFhbNjM6MzJdIGFuZCBrZXlUeXBlKHJlc2VydmVkKSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgMCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOwogCQl9CisKKwkJLyogTUFDIGFkZHJlc3MgcmVnaXN0ZXJzIGFyZSByZXNlcnZlZCBmb3IgdGhlIE1JQyBlbnRyeSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzAobWljZW50cnkpLCAwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9NQUMxKG1pY2VudHJ5KSwgMCk7CisKKwkJLyoKKwkJICogV3JpdGUgdGhlIGNvcnJlY3QgKHVuLWludmVydGVkKSBrZXlbNDc6MF0gbGFzdCB0byBlbmFibGUKKwkJICogVEtJUCBub3cgdGhhdCBhbGwgb3RoZXIgcmVnaXN0ZXJzIGFyZSBzZXQgd2l0aCBjb3JyZWN0CisJCSAqIHZhbHVlcy4KKwkJICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChlbnRyeSksIGtleTApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCBrZXkxKTsKIAl9IGVsc2UgeworCQkvKiBXcml0ZSBrZXlbNDc6MF0gKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwga2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIGtleTEpOworCisJCS8qIFdyaXRlIGtleVs5NTo0OF0gKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKGVudHJ5KSwga2V5Mik7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMyhlbnRyeSksIGtleTMpOworCisJCS8qIFdyaXRlIGtleVsxMjc6OTZdIGFuZCBrZXkgdHlwZSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTQoZW50cnkpLCBrZXk0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9UWVBFKGVudHJ5KSwga2V5VHlwZSk7CiAKKwkJLyogV3JpdGUgTUFDIGFkZHJlc3MgZm9yIHRoZSBlbnRyeSAqLwogCQkodm9pZCkgYXRoOWtfaHdfa2V5c2V0bWFjKGFoLCBlbnRyeSwgbWFjKTsKIAl9CiAKLQlpZiAoYWgtPmN1cmNoYW4gPT0gTlVMTCkKLQkJcmV0dXJuIHRydWU7Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjgwMSw2ICsyOTMwLDggQEAKIAkJCQltYXNrMiB8PSBBVEg5S19JTlRfR1RUOwogCQkJaWYgKGlzcjIgJiBBUl9JU1JfUzJfQ1NUKQogCQkJCW1hc2syIHw9IEFUSDlLX0lOVF9DU1Q7CisJCQlpZiAoaXNyMiAmIEFSX0lTUl9TMl9UU0ZPT1IpCisJCQkJbWFzazIgfD0gQVRIOUtfSU5UX1RTRk9PUjsKIAkJfQogCiAJCWlzciA9IFJFR19SRUFEKGFoLCBBUl9JU1JfUkFDKTsKQEAgLTI5NDYsNyArMzA3Nyw5IEBACiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX0RUSU1TWU5DKQogCQkJbWFzazIgfD0gQVJfSU1SX1MyX0RUSU1TWU5DOwogCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9DQUJFTkQpCi0JCQltYXNrMiB8PSAoQVJfSU1SX1MyX0NBQkVORCk7CisJCQltYXNrMiB8PSBBUl9JTVJfUzJfQ0FCRU5EOworCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9UU0ZPT1IpCisJCQltYXNrMiB8PSBBUl9JTVJfUzJfVFNGT09SOwogCX0KIAogCWlmIChpbnRzICYgKEFUSDlLX0lOVF9HVFQgfCBBVEg5S19JTlRfQ1NUKSkgewpAQCAtMzExNiw2ICszMjQ5LDggQEAKIAkJICAgIEFSX1RCVFRfVElNRVJfRU4gfCBBUl9USU1fVElNRVJfRU4gfAogCQkgICAgQVJfRFRJTV9USU1FUl9FTik7CiAKKwkvKiBUU0YgT3V0IG9mIFJhbmdlIFRocmVzaG9sZCAqLworCVJFR19XUklURShhaCwgQVJfVFNGT09SX1RIUkVTSE9MRCwgYnMtPmJzX3RzZm9vcl90aHJlc2hvbGQpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKi8KQEAgLTMxMjgsMTAgKzMyNjMsMTEgQEAKIAl1MTYgY2FwRmllbGQgPSAwLCBlZXZhbDsKIAogCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMCk7Ci0KIAlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID0gZWV2YWw7CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzEpOworCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQorCQllZXZhbCB8PSBBUjkyODVfUkRFWFRfREVGQVVMVDsKIAlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCA9IGVldmFsOwogCiAJY2FwRmllbGQgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09QX0NBUCk7CkBAIC0zMTgyLDE0ICszMzE4LDExIEBACiAJfQogCiAJcENhcC0+dHhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKLQlpZiAoKGFoLT5pc19wY2lleHByZXNzKQotCSAgICB8fCAoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU18xMUEpKSB7Ci0JCXBDYXAtPnJ4X2NoYWlubWFzayA9Ci0JCQlhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JYX01BU0spOwotCX0gZWxzZSB7Ci0JCXBDYXAtPnJ4X2NoYWlubWFzayA9Ci0JCQkoYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApKSA/IDB4NSA6IDB4NzsKLQl9CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjU0MTZfREVWSURfUENJKSAmJgorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSkKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OworCWVsc2UKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAogCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5od192ZXJzaW9uLm1hY1JldiA9PSAwKSkpCiAJCWFoLT5taXNjX21vZGUgfD0gQVJfUENVX01JQ19ORVdfTE9DX0VOQTsKQEAgLTMzMTcsOCArMzQ1MCw2IEBACiBib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCiAJCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KQogewotCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7Ci0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFUSDlLX0NBUF9DSVBIRVI6CiAJCXN3aXRjaCAoY2FwYWJpbGl0eSkgewpAQCAtMzM0NCwxNiArMzQ3NSwxMCBAQAogCWNhc2UgQVRIOUtfQ0FQX1RLSVBfU1BMSVQ6CiAJCXJldHVybiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpID8KIAkJCWZhbHNlIDogdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9XTUVfVEtJUE1JQzoKLQkJcmV0dXJuIDA7Ci0JY2FzZSBBVEg5S19DQVBfUEhZQ09VTlRFUlM6Ci0JCXJldHVybiBhaC0+aGFzX2h3X3BoeWNvdW50ZXJzID8gMCA6IC1FTlhJTzsKIAljYXNlIEFUSDlLX0NBUF9ESVZFUlNJVFk6CiAJCXJldHVybiAoUkVHX1JFQUQoYWgsIEFSX1BIWV9DQ0tfREVURUNUKSAmCiAJCQlBUl9QSFlfQ0NLX0RFVEVDVF9CQl9FTkFCTEVfQU5UX0ZBU1RfRElWKSA/CiAJCQl0cnVlIDogZmFsc2U7Ci0JY2FzZSBBVEg5S19DQVBfUEhZRElBRzoKLQkJcmV0dXJuIHRydWU7CiAJY2FzZSBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSDoKIAkJc3dpdGNoIChjYXBhYmlsaXR5KSB7CiAJCWNhc2UgMDoKQEAgLTMzNjgsMTggKzM0OTMsNiBAQAogCQkJfQogCQl9CiAJCXJldHVybiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlyZXR1cm4gKGFoLT5taXNjX21vZGUgJiBBUl9QQ1VfVFhfQUREX1RTRikgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX1JGU0lMRU5UOgotCQlpZiAoY2FwYWJpbGl0eSA9PSAzKQotCQkJcmV0dXJuIGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX0FOVF9DRkdfMkdIWjoKLQkJKnJlc3VsdCA9IHBDYXAtPm51bV9hbnRjZmdfMmdoejsKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfQU5UX0NGR181R0haOgotCQkqcmVzdWx0ID0gcENhcC0+bnVtX2FudGNmZ181Z2h6OwotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9UWFBPVzoKIAkJc3dpdGNoIChjYXBhYmlsaXR5KSB7CiAJCWNhc2UgMDoKQEAgLTMzOTUsNiArMzUwOCwxMCBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmV0dXJuIGZhbHNlOworCWNhc2UgQVRIOUtfQ0FQX0RTOgorCQlyZXR1cm4gKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkgJiYKKwkJCShhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JDX0NIQUlOX01BU0spID09IDEpKQorCQkJPyBmYWxzZSA6IHRydWU7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTM0MjgsMTIgKzM1NDUsNiBAQAogCQllbHNlCiAJCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyAmPSB+QVJfU1RBX0lEMV9NQ0FTVF9LU1JDSDsKIAkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfVFNGX0FESlVTVDoKLQkJaWYgKHNldHRpbmcpCi0JCQlhaC0+bWlzY19tb2RlIHw9IEFSX1BDVV9UWF9BRERfVFNGOwotCQllbHNlCi0JCQlhaC0+bWlzY19tb2RlICY9IH5BUl9QQ1VfVFhfQUREX1RTRjsKLQkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTM3MDAsOSArMzgxMSw4IEBACiAKIHZvaWQgYXRoOWtfaHdfc2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgsIHU2NCB0c2Y2NCkKIHsKLQlSRUdfV1JJVEUoYWgsIEFSX1RTRl9MMzIsIDB4MDAwMDAwMDApOwotCVJFR19XUklURShhaCwgQVJfVFNGX1UzMiwgKHRzZjY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYpOwogCVJFR19XUklURShhaCwgQVJfVFNGX0wzMiwgdHNmNjQgJiAweGZmZmZmZmZmKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1RTRl9VMzIsICh0c2Y2NCA+PiAzMikgJiAweGZmZmZmZmZmKTsKIH0KIAogdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9odyAqYWgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaAppbmRleCA4MjExMTYzLi5kYzY4MWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKQEAgLTQyLDggKzQyLDggQEAKICNkZWZpbmUgQVI1NDE2X01BR0lDCQkweDE5NjQxMDE0CiAKIC8qIFJlZ2lzdGVyIHJlYWQvd3JpdGUgcHJpbWl0aXZlcyAqLwotI2RlZmluZSBSRUdfV1JJVEUoX2FoLCBfcmVnLCBfdmFsKSBpb3dyaXRlMzIoX3ZhbCwgX2FoLT5haF9zYy0+bWVtICsgX3JlZykKLSNkZWZpbmUgUkVHX1JFQUQoX2FoLCBfcmVnKSBpb3JlYWQzMihfYWgtPmFoX3NjLT5tZW0gKyBfcmVnKQorI2RlZmluZSBSRUdfV1JJVEUoX2FoLCBfcmVnLCBfdmFsKSBhdGg5a19pb3dyaXRlMzIoKF9haCksIChfcmVnKSwgKF92YWwpKQorI2RlZmluZSBSRUdfUkVBRChfYWgsIF9yZWcpIGF0aDlrX2lvcmVhZDMyKChfYWgpLCAoX3JlZykpCiAKICNkZWZpbmUgU00oX3YsIF9mKSAgKCgoX3YpIDw8IF9mIyNfUykgJiBfZikKICNkZWZpbmUgTVMoX3YsIF9mKSAgKCgoX3YpICYgX2YpID4+IF9mIyNfUykKQEAgLTkzLDcgKzkzLDcgQEAKICNkZWZpbmUgQVRIOUtfTlVNX1FVRVVFUyAgICAgICAgICAgIDEwCiAKICNkZWZpbmUgTUFYX1JBVEVfUE9XRVIgICAgICAgICAgICAgIDYzCi0jZGVmaW5lIEFIX1RJTUVPVVQgICAgICAgICAgICAgICAgICAxMDAwMDAKKyNkZWZpbmUgQUhfV0FJVF9USU1FT1VUICAgICAgICAgICAgIDEwMDAwMCAvKiAodXMpICovCiAjZGVmaW5lIEFIX1RJTUVfUVVBTlRVTSAgICAgICAgICAgICAxMAogI2RlZmluZSBBUl9LRVlUQUJMRV9TSVpFICAgICAgICAgICAgMTI4CiAjZGVmaW5lIFBPV0VSX1VQX1RJTUUgICAgICAgICAgICAgICAyMDAwMDAKQEAgLTE1MywxNiArMTUzLDEwIEBACiAJQVRIOUtfQ0FQX0NJUEhFUiA9IDAsCiAJQVRIOUtfQ0FQX1RLSVBfTUlDLAogCUFUSDlLX0NBUF9US0lQX1NQTElULAotCUFUSDlLX0NBUF9QSFlDT1VOVEVSUywKIAlBVEg5S19DQVBfRElWRVJTSVRZLAogCUFUSDlLX0NBUF9UWFBPVywKLQlBVEg5S19DQVBfUEhZRElBRywKIAlBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKLQlBVEg5S19DQVBfVFNGX0FESlVTVCwKLQlBVEg5S19DQVBfV01FX1RLSVBNSUMsCi0JQVRIOUtfQ0FQX1JGU0lMRU5ULAotCUFUSDlLX0NBUF9BTlRfQ0ZHXzJHSFosCi0JQVRIOUtfQ0FQX0FOVF9DRkdfNUdIWgorCUFUSDlLX0NBUF9EUwogfTsKIAogc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyB7CkBAIC0yNDksNiArMjQzLDcgQEAKIAlBVEg5S19JTlRfRFRJTVNZTkMgPSAweDAwODAwMDAwLAogCUFUSDlLX0lOVF9HUElPID0gMHgwMTAwMDAwMCwKIAlBVEg5S19JTlRfQ0FCRU5EID0gMHgwMjAwMDAwMCwKKwlBVEg5S19JTlRfVFNGT09SID0gMHgwNDAwMDAwMCwKIAlBVEg5S19JTlRfQ1NUID0gMHgxMDAwMDAwMCwKIAlBVEg5S19JTlRfR1RUID0gMHgyMDAwMDAwMCwKIAlBVEg5S19JTlRfRkFUQUwgPSAweDQwMDAwMDAwLApAQCAtMjU2LDYgKzI1MSw3IEBACiAJQVRIOUtfSU5UX0JNSVNDID0gQVRIOUtfSU5UX1RJTSB8CiAJCUFUSDlLX0lOVF9EVElNIHwKIAkJQVRIOUtfSU5UX0RUSU1TWU5DIHwKKwkJQVRIOUtfSU5UX1RTRk9PUiB8CiAJCUFUSDlLX0lOVF9DQUJFTkQsCiAJQVRIOUtfSU5UX0NPTU1PTiA9IEFUSDlLX0lOVF9SWE5PRlJNIHwKIAkJQVRIOUtfSU5UX1JYREVTQyB8CkBAIC0zODUsNiArMzgxLDcgQEAKICNkZWZpbmUgQVRIOUtfQkVBQ09OX1BFUklPRCAgICAgICAweDAwMDBmZmZmCiAjZGVmaW5lIEFUSDlLX0JFQUNPTl9FTkEgICAgICAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBBVEg5S19CRUFDT05fUkVTRVRfVFNGICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQVRIOUtfVFNGT09SX1RIUkVTSE9MRCAgICAweDAwMDA0MjQwIC8qIDE2ayB1cyAqLwogCXUzMiBic19kdGltcGVyaW9kOwogCXUxNiBic19jZnBwZXJpb2Q7CiAJdTE2IGJzX2NmcG1heGR1cmF0aW9uOwpAQCAtMzkyLDYgKzM4OSw3IEBACiAJdTE2IGJzX3RpbW9mZnNldDsKIAl1MTYgYnNfYm1pc3N0aHJlc2hvbGQ7CiAJdTMyIGJzX3NsZWVwZHVyYXRpb247CisJdTMyIGJzX3RzZm9vcl90aHJlc2hvbGQ7CiB9OwogCiBzdHJ1Y3QgY2hhbl9jZW50ZXJzIHsKQEAgLTU0Nyw2ICs1NDUsMTAgQEAKIAl1OCB0eGNoYWlubWFzazsKIAl1OCByeGNoYWlubWFzazsKIAorCXUzMiBvcmlnaW5hbEdhaW5bMjJdOworCWludCBpbml0UERBREM7CisJaW50IFBEQURDZGVsdGE7CisKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXM7CiAJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUNvbW1vbjsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazA7CkBAIC01ODIsNyArNTg0LDcgQEAKIGJvb2wgYXRoOWtfaHdfa2V5c2V0bWFjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpOwogYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKIAkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSk7CisJCQkJIGNvbnN0IHU4ICptYWMpOwogYm9vbCBhdGg5a19od19rZXlpc3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpOwogCiAvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KQEAgLTYwMyw3ICs2MDUsNyBAQAogCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpOwogCiAvKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwotYm9vbCBhdGg5a19od193YWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7Citib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCk7CiB1MzIgYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKHUzMiB2YWwsIHUzMiBuKTsKIGJvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBmbGFncywgdTE2ICpsb3csIHUxNiAqaGlnaCk7CiB1MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oCmluZGV4IGQ0OTIzNjMuLjFkNjBjMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaApAQCAtMTQsNyArMTQsNyBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzXzkxMDBbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKQEAgLTc4LDcgKzc4LDcgQEAKICAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uXzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uW11bMl0gPSB7CiAgICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDE1IH0sCiAgICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCkBAIC00NTYsMTIgKzQ1NiwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmswW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2Fpbl85MTAwW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtNTI4LDIxICs1MjgsMjEgQEAKICAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMSB9LAogICAgIHsgMHgwMDAwOThlYywgMHgwMDAwMDAwOCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmsyW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAwMDAwNDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmszXzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNbXVszXSA9IHsKICAgICB7IDB4MDAwMDk4ZjAsIDB4MDE0MDAwMTgsIDB4MDFjMDAwMTggfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNltdWzNdID0gewogCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCkBAIC01NzksNyArNTc5LDcgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtNjE1LDEzICs2MTUsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rN1tdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkFkZGFjW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAzIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCkBAIC02NjEsNyArNjYxLDcgQEAKICAgICB7MHgwMDAwOThjYywgIDB4MDAwMDAwMDAgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNfOTEwMFtdWzZdID0gewogICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LApAQCAtNzM1LDcgKzczNSw3IEBACiAgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZDb21tb25fOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAogICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LApAQCAtMTEwOSwxMiArMTEwOSwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5fOTEwMFtdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtMTE4MSwyMSArMTE4MSwyMSBAQAogICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMV85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDAyMTA4NDIxfSwKICAgICB7IDB4MDAwMDk4ZWMsIDB4MDAwMDAwMDh9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3fSwKICAgICB7IDB4MDAwMDk4ZTAsIDB4MDAwMDA0MjB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM185MTAwW11bM10gPSB7CiAgICAgeyAweDAwMDA5OGYwLCAweDAxNDAwMDE4LCAweDAxYzAwMDE4IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2W11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxMDBbXVszXSA9IHsKIAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIH07CiAKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ185MTAwW11bM10gPSB7CiAKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTEyNzAsMTMgKzEyNzAsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY1tdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCkBAIC00MTIxLDYgKzQxMjEsNyBAQAogICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAogfTsKIAorLyogQVI5Mjg1IHYxXzIgUENJIFJlZ2lzdGVyIFdyaXRlcy4gIENyZWF0ZWQ6IDAzLzA0LzA5ICovCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzXzkyODVfMV8yW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCkBAIC00MTU1LDcgKzQxNTYsNyBAQAogICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAogICAgIHsgMHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAogICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NyB9LAotICAgIHsgMHgwMDAwOTljOCwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSB9LAogICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCB9LAogICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCB9LAogICAgIHsgMHgwMDAwOTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtNDQyMSwyNSArNDQyMiw2IEBACiAgICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCiAgICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjUwLCAweDAwMDRmMDAwLCAweDAwMDRmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCi0gICAgeyAweDAwMDBhMjc0LCAweDBhODFjNjUyLCAweDBhODFjNjUyLCAweDBhODIwNjUyLCAweDBhODIwNjUyLCAweDBhODJhNjUyIH0sCi0gICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3MjAxLCAweDAwMDA3MjAxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwNDA4LCAweDAwMDEwNDA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4NjBhLCAweDAwMDE4NjBhLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIwODE4LCAweDAwMDIwODE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0ODU4LCAweDAwMDI0ODU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI2ODU5LCAweDAwMDI2ODU5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI5ODViLCAweDAwMDI5ODViLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJiODlhLCAweDAwMDJiODlhLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJkODliLCAweDAwMDJkODliLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJmODljLCAweDAwMDJmODljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxODlkLCAweDAwMDMxODlkLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMzODllLCAweDAwMDMzODllLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM2OGRlLCAweDAwMDM2OGRlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCiB9OwogCkBAIC00NTY5LDcgKzQ1NTEsNyBAQAogICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAogICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAogICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgxMCB9LAogICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LApAQCAtNDU4NSw3ICs0NTY3LDcgQEAKICAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKICAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMTAgfSwKKyAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMGEgfSwKICAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKQEAgLTQ3MDksOCArNDY5MSw2IEBACiAgICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCiAgICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDMxOGM2MzE4IH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MGMwMzE4IH0sCiAgICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCiAgICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCiAgICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCkBAIC00NzI1LDggKzQ3MDUsNiBAQAogICAgIHsgMHgwMDAwYTM4OCwgMHgwYzAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgzMThjNjMxOCB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDMxOCB9LAogICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAogICAgIHsgMHgwMDAwYTNhMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTNhNCwgMHgwMDAwMDAwMCB9LApAQCAtNDc0MSw4ICs0NzE5LDYgQEAKICAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MzE4YzYzMTggfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzMTggfSwKICAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKICAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKQEAgLTQ3NTMsMTMgKzQ3MjksMTEgQEAKICAgICB7IDB4MDAwMDc4MTAsIDB4NzFjMGQzODggfSwKICAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTggfSwKICAgICB7IDB4MDAwMDc4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQgfSwKICAgICB7IDB4MDAwMDc4MjQsIDB4MDBkODZmZmYgfSwKICAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIgfSwKICAgICB7IDB4MDAwMDc4MmMsIDB4NmUzNmQ5N2IgfSwKICAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmUgfSwKICAgICB7IDB4MDAwMDc4MzQsIDB4NzE0MDAwODcgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDEgfSwKICAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUgfSwKICAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAgfSwKICAgICB7IDB4MDAwMDc4NDQsIDB4MDAwYzBkYjYgfSwKQEAgLTQ3NzIsMTAgKzQ3NDYsODEgQEAKICAgICB7IDB4MDAwMDc4NjAsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGUgfSwKICAgICB7IDB4MDAwMDc4NjgsIDB4YzIwMzQwODAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQgfSwKICAgICB7IDB4MDAwMDc4NzAsIDB4MTAxNDJjMDAgfSwKIH07CiAKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcyMDEsIDB4MDAwMDcyMDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY0NDAsIDB4MDAwMGY0NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQ2NDAsIDB4MDAwMTQ2NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTg2ODAsIDB4MDAwMTg2ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk4NDEsIDB4MDAwMTk4NDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWNhNDAsIDB4MDAwMWNhNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWZhODAsIDB4MDAwMWZhODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjNhYzAsIDB4MDAwMjNhYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmFiNDAsIDB4MDAwMmFiNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMmE2NTIgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhNmM5LCAweDAwMDJhNmM5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4NzU4LCAweDAwMDM4NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0NzVlLCAweDAwMDQ0NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCit9OworCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMltdWzJdID0gewogICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAogICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwppbmRleCBmMzJjNjIyLi5mNzU3YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJZHMtPmRzX3R4c3RhdC50c19zaG9ydHJldHJ5ID0gTVMoYWRzLT5kc190eHN0YXR1czEsIEFSX1JUU0ZhaWxDbnQpOwogCWRzLT5kc190eHN0YXQudHNfbG9uZ3JldHJ5ID0gTVMoYWRzLT5kc190eHN0YXR1czEsIEFSX0RhdGFGYWlsQ250KTsKIAlkcy0+ZHNfdHhzdGF0LnRzX3ZpcnRjb2wgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfVmlydFJldHJ5Q250KTsKLQlkcy0+ZHNfdHhzdGF0LnRzX2FudGVubmEgPSAxOworCWRzLT5kc190eHN0YXQudHNfYW50ZW5uYSA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg4Niw3ICs4ODYsOCBAQAogCQlSRUdfU0VUX0JJVChhaCwgQVJfRElBR19TVywKIAkJCSAgICAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiAKLQkJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9PQlNfQlVTXzEsIEFSX09CU19CVVNfMV9SWF9TVEFURSwgMCkpIHsKKwkJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9PQlNfQlVTXzEsIEFSX09CU19CVVNfMV9SWF9TVEFURSwKKwkJCQkgICAwLCBBSF9XQUlUX1RJTUVPVVQpKSB7CiAJCQlSRUdfQ0xSX0JJVChhaCwgQVJfRElBR19TVywKIAkJCQkgICAgKEFSX0RJQUdfUlhfRElTIHwKIAkJCQkgICAgIEFSX0RJQUdfUlhfQUJPUlQpKTsKQEAgLTkzMywxNSArOTM0LDMyIEBACiAKIGJvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCiB7CisjZGVmaW5lIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgMTAwMDAgICAvKiB1c2VjICovCisjZGVmaW5lIEFIX1JYX1RJTUVfUVVBTlRVTSAgICAgMTAwICAgICAvKiB1c2VjICovCisKKwlpbnQgaTsKKwogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRCk7CiAKLQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX0NSLCBBUl9DUl9SWEUsIDApKSB7CisJLyogV2FpdCBmb3IgcnggZW5hYmxlIGJpdCB0byBnbyBsb3cgKi8KKwlmb3IgKGkgPSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNOyBpICE9IDA7IGktLSkgeworCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9DUikgJiBBUl9DUl9SWEUpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KEFIX1RJTUVfUVVBTlRVTSk7CisJfQorCisJaWYgKGkgPT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwKLQkJCSJkbWEgZmFpbGVkIHRvIHN0b3AgaW4gMTBtc1xuIgotCQkJIkFSX0NSPTB4JTA4eFxuQVJfRElBR19TVz0weCUwOHhcbiIsCi0JCQlSRUdfUkVBRChhaCwgQVJfQ1IpLCBSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQkJImRtYSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyAiCisJCQkiQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCisJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwogCX0KKworI3VuZGVmIEFIX1JYX1RJTUVfUVVBTlRVTQorI3VuZGVmIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKaW5kZXggNzRiNjYwYS4uYTc1ZjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpZm5kZWYgTUFDX0gKICNkZWZpbmUgTUFDX0gKIAotI2RlZmluZSBSWFNUQVRVU19SQVRFKGFoLCBhZHMpIChBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSA/CQlcCisjZGVmaW5lIFJYU1RBVFVTX1JBVEUoYWgsIGFkcykgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgPwkJXAogCQkJCU1TKGFkcy0+ZHNfcnhzdGF0dXMwLCBBUl9SeFJhdGUpIDoJXAogCQkJCShhZHMtPmRzX3J4c3RhdHVzMyA+PiAyKSAmIDB4RkYpCiAKQEAgLTU2Niw5ICs1NjYsMTEgQEAKIAlBVEg5S19SWF9GSUxURVJfQkVBQ09OID0gMHgwMDAwMDAxMCwKIAlBVEg5S19SWF9GSUxURVJfUFJPTSA9IDB4MDAwMDAwMjAsCiAJQVRIOUtfUlhfRklMVEVSX1BST0JFUkVRID0gMHgwMDAwMDA4MCwKLQlBVEg5S19SWF9GSUxURVJfUFNQT0xMID0gMHgwMDAwNDAwMCwKIAlBVEg5S19SWF9GSUxURVJfUEhZRVJSID0gMHgwMDAwMDEwMCwKKwlBVEg5S19SWF9GSUxURVJfTVlCRUFDT04gPSAweDAwMDAwMjAwLAorCUFUSDlLX1JYX0ZJTFRFUl9QU1BPTEwgPSAweDAwMDA0MDAwLAogCUFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUiA9IDB4MDAwMDIwMDAsCisJQVRIOUtfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTCA9IDB4MDAwMDgwMDAsCiB9OwogCiAjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgMHgwMDAxCkBAIC01ODcsOSArNTg5LDExIEBACiAJdTgga3ZfdHlwZTsKIAl1OCBrdl9wYWQ7CiAJdTE2IGt2X2xlbjsKLQl1OCBrdl92YWxbMTZdOwotCXU4IGt2X21pY1s4XTsKLQl1OCBrdl90eG1pY1s4XTsKKwl1OCBrdl92YWxbMTZdOyAvKiBUSyAqLworCXU4IGt2X21pY1s4XTsgLyogTWljaGFlbCBNSUMga2V5ICovCisJdTgga3ZfdHhtaWNbOF07IC8qIE1pY2hhZWwgTUlDIFRYIGtleSAodXNlZCBvbmx5IGlmIHRoZSBoYXJkd2FyZQorCQkJICogc3VwcG9ydHMgYm90aCBNSUMga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnk7CisJCQkgKiBpbiB0aGF0IGNhc2UsIGt2X21pYyBpcyB0aGUgUlgga2V5KSAqLwogfTsKIAogZW51bSBhdGg5a19rZXlfdHlwZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKaW5kZXggZmMzNDYwZi4uOGRiNzVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYwpAQCAtMjYsNiArMjYsMTAgQEAKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJBdGhlcm9zIDgwMi4xMW4gV0xBTiBjYXJkcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogCitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uIik7CisKIC8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLwogCiAjZGVmaW5lIENIQU4yRyhfZnJlcSwgX2lkeCkgIHsgXApAQCAtMjMyLDExICsyMzYsMTEgQEAKICAqIGJ5IHJlc2V0aW5nIHRoZSBjaGlwLiAgVG8gYWNjb21wbGlzaCB0aGlzIHdlIG11c3QgZmlyc3QgY2xlYW51cCBhbnkgcGVuZGluZwogICogRE1BLCB0aGVuIHJlc3RhcnQgc3R1ZmYuCiAqLwotc3RhdGljIGludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGg5a19jaGFubmVsICpoY2hhbikKK2ludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmhjaGFuKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgZmFzdGNjID0gdHJ1ZSwgc3RvcHBlZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsOwogCWludCByOwogCkBAIC0zMDgsMjMgKzMxMiwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGF0aF9odyAqYWg7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJYm9vbCBsb25nY2FsID0gZmFsc2U7CiAJYm9vbCBzaG9ydGNhbCA9IGZhbHNlOwogCWJvb2wgYW5pZmxhZyA9IGZhbHNlOwogCXVuc2lnbmVkIGludCB0aW1lc3RhbXAgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwotCXUzMiBjYWxfaW50ZXJ2YWw7CisJdTMyIGNhbF9pbnRlcnZhbCwgc2hvcnRfY2FsX2ludGVydmFsOwogCi0Jc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7Ci0JYWggPSBzYy0+c2NfYWg7CisJc2hvcnRfY2FsX2ludGVydmFsID0gKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApID8KKwkJQVRIX0FQX1NIT1JUX0NBTElOVEVSVkFMIDogQVRIX1NUQV9TSE9SVF9DQUxJTlRFUlZBTDsKIAogCS8qCiAJKiBkb24ndCBjYWxpYnJhdGUgd2hlbiB3ZSdyZSBzY2FubmluZy4KIAkqIHdlIGFyZSBtb3N0IGxpa2VseSBub3Qgb24gb3VyIGhvbWUgY2hhbm5lbC4KIAkqLwotCWlmIChzYy0+cngucnhmaWx0ZXIgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJcmV0dXJuOworCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9TQ0FOTklORykKKwkJZ290byBzZXRfdGltZXI7CiAKIAkvKiBMb25nIGNhbGlicmF0aW9uIHJ1bnMgaW5kZXBlbmRlbnRseSBvZiBzaG9ydCBjYWxpYnJhdGlvbi4gKi8KIAlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkubG9uZ2NhbF90aW1lcikgPj0gQVRIX0xPTkdfQ0FMSU5URVJWQUwpIHsKQEAgLTMzNSw4ICszMzksNyBAQAogCiAJLyogU2hvcnQgY2FsaWJyYXRpb24gYXBwbGllcyBvbmx5IHdoaWxlIGNhbGRvbmUgaXMgZmFsc2UgKi8KIAlpZiAoIXNjLT5hbmkuY2FsZG9uZSkgewotCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkuc2hvcnRjYWxfdGltZXIpID49Ci0JCSAgICBBVEhfU0hPUlRfQ0FMSU5URVJWQUwpIHsKKwkJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLnNob3J0Y2FsX3RpbWVyKSA+PSBzaG9ydF9jYWxfaW50ZXJ2YWwpIHsKIAkJCXNob3J0Y2FsID0gdHJ1ZTsKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfQU5JLCAic2hvcnRjYWwgQCVsdVxuIiwgamlmZmllcyk7CiAJCQlzYy0+YW5pLnNob3J0Y2FsX3RpbWVyID0gdGltZXN0YW1wOwpAQCAtMzUyLDggKzM1NSw3IEBACiAJfQogCiAJLyogVmVyaWZ5IHdoZXRoZXIgd2UgbXVzdCBjaGVjayBBTkkgKi8KLQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkuY2hlY2thbmlfdGltZXIpID49Ci0JICAgQVRIX0FOSV9QT0xMSU5URVJWQUwpIHsKKwlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkuY2hlY2thbmlfdGltZXIpID49IEFUSF9BTklfUE9MTElOVEVSVkFMKSB7CiAJCWFuaWZsYWcgPSB0cnVlOwogCQlzYy0+YW5pLmNoZWNrYW5pX3RpbWVyID0gdGltZXN0YW1wOwogCX0KQEAgLTM2Miw4ICszNjQsNyBAQAogCWlmIChsb25nY2FsIHx8IHNob3J0Y2FsIHx8IGFuaWZsYWcpIHsKIAkJLyogQ2FsbCBBTkkgcm91dGluZSBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGFuaWZsYWcpCi0JCQlhdGg5a19od19hbmlfbW9uaXRvcihhaCwgJnNjLT5ub2Rlc3RhdHMsCi0JCQkJCSAgICAgYWgtPmN1cmNoYW4pOworCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+bm9kZXN0YXRzLCBhaC0+Y3VyY2hhbik7CiAKIAkJLyogUGVyZm9ybSBjYWxpYnJhdGlvbiBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGxvbmdjYWwgfHwgc2hvcnRjYWwpIHsKQEAgLTM5Miw2ICszOTMsNyBAQAogCQl9CiAJfQogCitzZXRfdGltZXI6CiAJLyoKIAkqIFNldCB0aW1lciBpbnRlcnZhbCBiYXNlZCBvbiBwcmV2aW91cyByZXN1bHRzLgogCSogVGhlIGludGVydmFsIG11c3QgYmUgdGhlIHNob3J0ZXN0IG5lY2Vzc2FyeSB0byBzYXRpc2Z5IEFOSSwKQEAgLTQwMSw3ICs0MDMsNyBAQAogCWlmIChzYy0+c2NfYWgtPmNvbmZpZy5lbmFibGVfYW5pKQogCQljYWxfaW50ZXJ2YWwgPSBtaW4oY2FsX2ludGVydmFsLCAodTMyKUFUSF9BTklfUE9MTElOVEVSVkFMKTsKIAlpZiAoIXNjLT5hbmkuY2FsZG9uZSkKLQkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilBVEhfU0hPUlRfQ0FMSU5URVJWQUwpOworCQljYWxfaW50ZXJ2YWwgPSBtaW4oY2FsX2ludGVydmFsLCAodTMyKXNob3J0X2NhbF9pbnRlcnZhbCk7CiAKIAltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGNhbF9pbnRlcnZhbCkpOwogfQpAQCAtNDEyLDcgKzQxNCw3IEBACiAgKiB0aGUgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb24sIGZvciBidCBjb2V4aXN0ZW5jZSwgdXNlCiAgKiB0aGUgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb24gZXZlbiBpbiBsZWdhY3kgbW9kZS4KICAqLwotc3RhdGljIHZvaWQgYXRoX3VwZGF0ZV9jaGFpbm1hc2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpc19odCkKK3ZvaWQgYXRoX3VwZGF0ZV9jaGFpbm1hc2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpc19odCkKIHsKIAlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQ0hBSU5NQVNLX1VQREFURTsKIAlpZiAoaXNfaHQgfHwKQEAgLTUxNCw2ICs1MTYsNyBAQAogCQkJcmV0dXJuIElSUV9OT05FOwogCiAJCXNjLT5pbnRyc3RhdHVzID0gc3RhdHVzOworCQlhdGg5a19wc193YWtldXAoc2MpOwogCiAJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJCS8qIG5lZWQgYSBjaGlwIHJlc2V0ICovCkBAIC01NzQsNyArNTc3LDEyIEBACiAJCQkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9CRUFDT047CiAJCQkJfQogCQkJfQorCQkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpIHsKKwkJCQkvKiBGSVhNRTogSGFuZGxlIHRoaXMgaW50ZXJydXB0IGZvciBwb3dlciBzYXZlICovCisJCQkJc2NoZWQgPSB0cnVlOworCQkJfQogCQl9CisJCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCX0gd2hpbGUgKDApOwogCiAJYXRoX2RlYnVnX3N0YXRfaW50ZXJydXB0KHNjLCBzdGF0dXMpOwpAQCAtNjMwLDIwICs2MzgsOSBAQAogCXJldHVybiBjaGFubW9kZTsKIH0KIAotc3RhdGljIGludCBhdGhfa2V5c2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsCi0JICAgICAgIHN0cnVjdCBhdGg5a19rZXl2YWwgKmhrLCBjb25zdCB1OCBtYWNbRVRIX0FMRU5dKQotewotCWJvb2wgc3RhdHVzOwotCi0Jc3RhdHVzID0gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHNjLT5zY19haCwKLQkJa2V5aXgsIGhrLCBtYWMsIGZhbHNlKTsKLQotCXJldHVybiBzdGF0dXMgIT0gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoX3NldGtleV90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsIGNvbnN0IHU4ICprZXksCi0JCQkgICBzdHJ1Y3QgYXRoOWtfa2V5dmFsICpoaywKLQkJCSAgIGNvbnN0IHU4ICphZGRyKQorCQkJICAgc3RydWN0IGF0aDlrX2tleXZhbCAqaGssIGNvbnN0IHU4ICphZGRyLAorCQkJICAgYm9vbCBhdXRoZW50aWNhdG9yKQogewogCWNvbnN0IHU4ICprZXlfcnhtaWM7CiAJY29uc3QgdTggKmtleV90eG1pYzsKQEAgLTY1MiwyNiArNjQ5LDMzIEBACiAJa2V5X3J4bWljID0ga2V5ICsgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVk7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCS8qIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gKi8KLQkJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKLQkJcmV0dXJuIGF0aF9rZXlzZXQoc2MsIGtleWl4LCBoaywgYWRkcik7CisJCS8qCisJCSAqIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gLSBvbmx5IHR3byBrZXkgY2FjaGUgZW50cmllcyBhcmUgdXNlZAorCQkgKiByZWdhcmRsZXNzIG9mIHNwbGl0bWljIGNhcGFiaWxpdHkgc2luY2UgZ3JvdXAga2V5IGlzIG9ubHkKKwkJICogdXNlZCBlaXRoZXIgZm9yIFRYIG9yIFJYLgorCQkgKi8KKwkJaWYgKGF1dGhlbnRpY2F0b3IpIHsKKwkJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCQltZW1jcHkoaGstPmt2X3R4bWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQkJbWVtY3B5KGhrLT5rdl90eG1pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQl9CisJCXJldHVybiBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBrZXlpeCwgaGssIGFkZHIpOwogCX0KIAlpZiAoIXNjLT5zcGxpdG1pYykgewotCQkvKgotCQkgKiBkYXRhIGtleSBnb2VzIGF0IGZpcnN0IGluZGV4LAotCQkgKiB0aGUgaGFsIGhhbmRsZXMgdGhlIE1JQyBrZXlzIGF0IGluZGV4KzY0LgotCQkgKi8KKwkJLyogVFggYW5kIFJYIGtleXMgc2hhcmUgdGhlIHNhbWUga2V5IGNhY2hlIGVudHJ5LiAqLwogCQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOwogCQltZW1jcHkoaGstPmt2X3R4bWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfdHhtaWMpKTsKLQkJcmV0dXJuIGF0aF9rZXlzZXQoc2MsIGtleWl4LCBoaywgYWRkcik7CisJCXJldHVybiBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBrZXlpeCwgaGssIGFkZHIpOwogCX0KLQkvKgotCSAqIFRYIGtleSBnb2VzIGF0IGZpcnN0IGluZGV4LCBSWCBrZXkgYXQgKzMyLgotCSAqIFRoZSBoYWwgaGFuZGxlcyB0aGUgTUlDIGtleXMgYXQgaW5kZXgrNjQuCi0JICovCisKKwkvKiBTZXBhcmF0ZSBrZXkgY2FjaGUgZW50cmllcyBmb3IgVFggYW5kIFJYICovCisKKwkvKiBUWCBrZXkgZ29lcyBhdCBmaXJzdCBpbmRleCwgUlgga2V5IGF0ICszMi4gKi8KIAltZW1jcHkoaGstPmt2X21pYywga2V5X3R4bWljLCBzaXplb2YoaGstPmt2X21pYykpOwotCWlmICghYXRoX2tleXNldChzYywga2V5aXgsIGhrLCBOVUxMKSkgewotCQkvKiBUeG1pYyBlbnRyeSBmYWlsZWQuIE5vIG5lZWQgdG8gcHJvY2VlZCBmdXJ0aGVyICovCisJaWYgKCFhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBrZXlpeCwgaGssIE5VTEwpKSB7CisJCS8qIFRYIE1JQyBlbnRyeSBmYWlsZWQuIE5vIG5lZWQgdG8gcHJvY2VlZCBmdXJ0aGVyICovCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfS0VZQ0FDSEUsCiAJCQkiU2V0dGluZyBUWCBNSUMgS2V5IEZhaWxlZFxuIik7CiAJCXJldHVybiAwOwpAQCAtNjc5LDcgKzY4Myw3IEBACiAKIAltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOwogCS8qIFhYWCBkZWxldGUgdHgga2V5IG9uIGZhaWx1cmU/ICovCi0JcmV0dXJuIGF0aF9rZXlzZXQoc2MsIGtleWl4ICsgMzIsIGhrLCBhZGRyKTsKKwlyZXR1cm4gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHNjLT5zY19haCwga2V5aXggKyAzMiwgaGssIGFkZHIpOwogfQogCiBzdGF0aWMgaW50IGF0aF9yZXNlcnZlX2tleV9jYWNoZV9zbG90X3RraXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCkBAIC03NjMsNiArNzY3LDcgQEAKIH0KIAogc3RhdGljIGludCBhdGhfa2V5X2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewpAQCAtNzk1LDEzICs4MDAsMTAgQEAKIAkJICogbmVlZCB0byBjaGFuZ2Ugd2l0aCB2aXJ0dWFsIGludGVyZmFjZXMuICovCiAJCWlkeCA9IGtleS0+a2V5aWR4OwogCX0gZWxzZSBpZiAoa2V5LT5rZXlpZHgpIHsKLQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQogCQlpZiAoV0FSTl9PTighc3RhKSkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJbWFjID0gc3RhLT5hZGRyOwogCi0JCXZpZiA9IHNjLT52aWZzWzBdOwogCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCQkvKiBPbmx5IGtleWlkeCAwIHNob3VsZCBiZSB1c2VkIHdpdGggdW5pY2FzdCBrZXksIGJ1dAogCQkJICogYWxsb3cgdGhpcyBmb3IgY2xpZW50IG1vZGUgZm9yIG5vdy4gKi8KQEAgLTgyMiw5ICs4MjQsMTAgQEAKIAl9CiAKIAlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApCi0JCXJldCA9IGF0aF9zZXRrZXlfdGtpcChzYywgaWR4LCBrZXktPmtleSwgJmhrLCBtYWMpOworCQlyZXQgPSBhdGhfc2V0a2V5X3RraXAoc2MsIGlkeCwga2V5LT5rZXksICZoaywgbWFjLAorCQkJCSAgICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCk7CiAJZWxzZQotCQlyZXQgPSBhdGhfa2V5c2V0KHNjLCBpZHgsICZoaywgbWFjKTsKKwkJcmV0ID0gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHNjLT5zY19haCwgaWR4LCAmaGssIG1hYyk7CiAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIC1FSU87CkBAIC05MDksOCArOTEyLDcgQEAKIAkJfQogCiAJCS8qIENvbmZpZ3VyZSB0aGUgYmVhY29uICovCi0JCWF0aF9iZWFjb25fY29uZmlnKHNjLCAwKTsKLQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTlM7CisJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOwogCiAJCS8qIFJlc2V0IHJzc2kgc3RhdHMgKi8KIAkJc2MtPm5vZGVzdGF0cy5uc19hdmdicnNzaSA9IEFUSF9SU1NJX0RVTU1ZX01BUktFUjsKQEAgLTkyMCw4ICs5MjIsNyBAQAogCiAJCS8qIFN0YXJ0IEFOSSAqLwogCQltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsCi0JCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEhfQU5JX1BPTExJTlRFUlZBTCkpOwotCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSF9BTklfUE9MTElOVEVSVkFMKSk7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJCc3MgSW5mbyBESVNTT0NcbiIpOwogCQlzYy0+Y3VyYWlkID0gMDsKQEAgLTEwODMsMTMgKzEwODQsNyBAQAogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCi0KLS8qKioqKioqKioqKioqKioqKioqLwotLyoJUmZraWxsCSAgICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKQEAgLTExMTYsNyArMTExMSw3IEBACiAJfQogCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpCi0JCWF0aF9iZWFjb25fY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZKTsJLyogcmVzdGFydCBiZWFjb25zICovCisJCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsJLyogcmVzdGFydCBiZWFjb25zICovCiAKIAkvKiBSZS1FbmFibGUgIGludGVycnVwdHMgKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKQEAgLTExMzAsNyArMTEyNSw3IEBACiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfcmFkaW9fZGlzYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKQEAgLTExNjUsNiArMTE2MCwxMiBAQAogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qCVJma2lsbAkgICAqLworLyoqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyBib29sIGF0aF9pc19yZmtpbGxfc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwpAQCAtMTMwNiw2ICsxMzA3LDcgQEAKIAlhdGhfZGV0YWNoKHNjKTsKIAlmcmVlX2lycShzYy0+aXJxLCBzYyk7CiAJYXRoX2J1c19jbGVhbnVwKHNjKTsKKwlrZnJlZShzYy0+c2VjX3dpcGh5KTsKIAlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOwogfQogCkBAIC0xMzIyLDcgKzEzMjQsMTcgQEAKIAlhdGhfZGVpbml0X3Jma2lsbChzYyk7CiAjZW5kaWYKIAlhdGhfZGVpbml0X2xlZHMoc2MpOworCWNhbmNlbF93b3JrX3N5bmMoJnNjLT5jaGFuX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPndpcGh5X3dvcmspOwogCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5ID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJc2MtPnNlY193aXBoeVtpXSA9IE5VTEw7CisJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGFwaHktPmh3KTsKKwkJaWVlZTgwMjExX2ZyZWVfaHcoYXBoeS0+aHcpOworCX0KIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhodyk7CiAJYXRoX3J4X2NsZWFudXAoc2MpOwogCWF0aF90eF9jbGVhbnVwKHNjKTsKQEAgLTEzNTYsMTAgKzEzNjgsMTIgQEAKIAlpZiAoYXRoOWtfaW5pdF9kZWJ1ZyhzYykgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc2MtPndpcGh5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcmVzZXRsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3NlcmlhbF9ydyk7CiAJbXV0ZXhfaW5pdCgmc2MtPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJnNjLT5pbnRyX3RxLCBhdGg5a190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YmNvbl90YXNrbGV0LCBhdGg5a19iZWFjb25fdGFza2xldCwKKwl0YXNrbGV0X2luaXQoJnNjLT5iY29uX3Rhc2tsZXQsIGF0aF9iZWFjb25fdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylzYyk7CiAKIAkvKgpAQCAtMTUxMywxNyArMTUyNywxNiBAQAogCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9ESVZFUlNJVFksIDEsIHRydWUsIE5VTEwpOwogCXNjLT5yeC5kZWZhbnQgPSBhdGg5a19od19nZXRkZWZhbnRlbm5hKGFoKTsKIAotCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykgeworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKIAkJbWVtY3B5KHNjLT5ic3NpZG1hc2ssIGF0aF9iY2FzdF9tYWMsIEVUSF9BTEVOKTsKLQkJQVRIX1NFVF9WSUZfQlNTSURfTUFTSyhzYy0+YnNzaWRtYXNrKTsKLQkJYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHNjKTsKLQl9CiAKIAlzYy0+YmVhY29uLnNsb3R0aW1lID0gQVRIOUtfU0xPVF9USU1FXzk7CS8qIGRlZmF1bHQgdG8gc2hvcnQgc2xvdCB0aW1lICovCiAKIAkvKiBpbml0aWFsaXplIGJlYWNvbiBzbG90cyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspCi0JCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBBVEhfSUZfSURfQU5ZOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspIHsKKwkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IE5VTEw7CisJCXNjLT5iZWFjb24uYnNsb3RfYXBoeVtpXSA9IE5VTEw7CisJfQogCiAJLyogc2F2ZSBNSVNDIGNvbmZpZ3VyYXRpb25zICovCiAJc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MgPSAxOwpAQCAtMTU1OCwzMyArMTU3MSwyMiBAQAogYmFkOgogCWlmIChhaCkKIAkJYXRoOWtfaHdfZGV0YWNoKGFoKTsKKwlhdGg5a19leGl0X2RlYnVnKHNjKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAotaW50IGF0aF9hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3ZvaWQgYXRoX3NldF9od19jYXBhYihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7Ci0JaW50IGVycm9yID0gMDsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQXR0YWNoIEFUSCBod1xuIik7Ci0KLQllcnJvciA9IGF0aF9pbml0KGRldmlkLCBzYyk7Ci0JaWYgKGVycm9yICE9IDApCi0JCXJldHVybiBlcnJvcjsKLQotCS8qIGdldCBtYWMgYWRkcmVzcyBmcm9tIGhhcmR3YXJlIGFuZCBzZXQgaW4gbWFjODAyMTEgKi8KLQotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBzYy0+c2NfYWgtPm1hY2FkZHIpOwotCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CiAJCUlFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAogCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTiB8CiAJCUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8Ci0JCUlFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CiAKLQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkpCisJaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihzYy0+c2NfYWgpIHx8IG1vZHBhcmFtX25vaHdjcnlwdCkKIAkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRTsKIAogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KQEAgLTE1OTcsMzEgKzE1OTksNTMgQEAKIAogCWh3LT5xdWV1ZXMgPSA0OwogCWh3LT5tYXhfcmF0ZXMgPSA0OworCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gNTAwMDsKKwlody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDEwOwogCWh3LT5tYXhfcmF0ZV90cmllcyA9IEFUSF8xMU5fVFhNQVhUUlk7CiAJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9ub2RlKTsKIAlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX3ZpZik7CiAKIAlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJhdGg5a19yYXRlX2NvbnRyb2wiOwogCisJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9CisJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQkmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKK30KKworaW50IGF0aF9hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKKwlpbnQgZXJyb3IgPSAwLCBpOworCisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJBdHRhY2ggQVRIIGh3XG4iKTsKKworCWVycm9yID0gYXRoX2luaXQoZGV2aWQsIHNjKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIGVycm9yOworCisJLyogZ2V0IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgYW5kIHNldCBpbiBtYWM4MDIxMSAqLworCisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIHNjLT5zY19haC0+bWFjYWRkcik7CisKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CisKIAlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfSFQpIHsKIAkJc2V0dXBfaHRfY2FwKHNjLCAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5odF9jYXApOwogCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHNjLT5zY19haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpCiAJCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLmh0X2NhcCk7CiAJfQogCi0JaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9CSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9Ci0JCQkmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQogCS8qIGluaXRpYWxpemUgdHgvcnggZW5naW5lICovCiAJZXJyb3IgPSBhdGhfdHhfaW5pdChzYywgQVRIX1RYQlVGKTsKIAlpZiAoZXJyb3IgIT0gMCkKLQkJZ290byBkZXRhY2g7CisJCWdvdG8gZXJyb3JfYXR0YWNoOwogCiAJZXJyb3IgPSBhdGhfcnhfaW5pdChzYywgQVRIX1JYQlVGKTsKIAlpZiAoZXJyb3IgIT0gMCkKLQkJZ290byBkZXRhY2g7CisJCWdvdG8gZXJyb3JfYXR0YWNoOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQogCS8qIEluaXRpYWx6ZSBoL3cgUmZraWxsICovCkBAIC0xNjI5LDQzICsxNjUzLDU1IEBACiAJCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgYXRoX3Jma2lsbF9wb2xsKTsKIAogCS8qIEluaXRpYWxpemUgcy93IHJma2lsbCAqLwotCWlmIChhdGhfaW5pdF9zd19yZmtpbGwoc2MpKQotCQlnb3RvIGRldGFjaDsKKwllcnJvciA9IGF0aF9pbml0X3N3X3Jma2lsbChzYyk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yX2F0dGFjaDsKICNlbmRpZgogCiAJaWYgKGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc2MtPnNjX2FoKSkgewotCQkvKiBBbnl0aGluZyBhcHBsaWVkIGhlcmUgKHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdG9pbikgZ2V0cworCQkvKiBBbnl0aGluZyBhcHBsaWVkIGhlcmUgKHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbikgZ2V0cwogCQkgKiBzYXZlZCBvbiB0aGUgd2lwaHkgb3JpZ18qIHBhcmFtZXRlcnMgKi8KLQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QgPQotCQkJYXRoOWtfd29ybGRfcmVnZG9tYWluKHNjLT5zY19haCk7CisJCXJlZ2QgPSBhdGg5a193b3JsZF9yZWdkb21haW4oc2MtPnNjX2FoKTsKIAkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CiAJCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSBmYWxzZTsKLQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoc2MtPmh3LT53aXBoeSwgcmVnZCk7Ci0JCWF0aDlrX3JlZ19hcHBseV9yYWRhcl9mbGFncyhody0+d2lwaHkpOwotCQlhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3MoaHctPndpcGh5LCBSRUdET01fU0VUX0JZX0lOSVQpOwogCX0gZWxzZSB7CiAJCS8qIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbnNlIG9mIENSREEsCi0JCSAqIGl0cyBvdXIgb3duIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiwgc2ltaWxhciB0bworCQkgKiBpdCdzIG91ciBvd24gY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluLCBzaW1pbGFyIHRvCiAJCSAqIGNmZzgwMjExJ3MgYnV0IHdlIGVuYWJsZSBwYXNzaXZlIHNjYW5uaW5nICovCi0JCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkID0KLQkJCWF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7Ci0JCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KHNjLT5ody0+d2lwaHksIHJlZ2QpOwotCQlhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3MoaHctPndpcGh5KTsKLQkJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKGh3LT53aXBoeSwgUkVHRE9NX1NFVF9CWV9JTklUKTsKKwkJcmVnZCA9IGF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7CiAJfQorCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwgcmVnZCk7CisJYXRoOWtfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKGh3LT53aXBoeSk7CisJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKGh3LT53aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUik7CisKKwlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKIAogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAotCWlmICghYXRoOWtfaXNfd29ybGRfcmVnZChzYy0+c2NfYWgpKQotCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBzYy0+c2NfYWgtPnJlZ3VsYXRvcnkuYWxwaGEyKTsKKwlpZiAoIWF0aDlrX2lzX3dvcmxkX3JlZ2Qoc2MtPnNjX2FoKSkgeworCQllcnJvciA9IHJlZ3VsYXRvcnlfaGludChody0+d2lwaHksCisJCQlzYy0+c2NfYWgtPnJlZ3VsYXRvcnkuYWxwaGEyKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJvcl9hdHRhY2g7CisJfQogCiAJLyogSW5pdGlhbGl6ZSBMRUQgY29udHJvbCAqLwogCWF0aF9pbml0X2xlZHMoc2MpOwogCiAKIAlyZXR1cm4gMDsKLWRldGFjaDoKLQlhdGhfZGV0YWNoKHNjKTsKKworZXJyb3JfYXR0YWNoOgorCS8qIGNsZWFudXAgdHggcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQorCQkJYXRoX3R4X2NsZWFudXBxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CisKKwlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKKwlhdGg5a19leGl0X2RlYnVnKHNjKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTcwMCw3ICsxNzM2LDcgQEAKIAlhdGhfdXBkYXRlX3R4cG93KHNjKTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CRUFDT05TKQotCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgQVRIX0lGX0lEX0FOWSk7CS8qIHJlc3RhcnQgYmVhY29ucyAqLworCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CS8qIHJlc3RhcnQgYmVhY29ucyAqLwogCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5pbWFzayk7CiAKQEAgLTE3MzksNiArMTc3NSw3IEBACiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICIlcyBETUE6ICV1IGJ1ZmZlcnMgJXUgZGVzYy9idWZcbiIsCiAJCW5hbWUsIG5idWYsIG5kZXNjKTsKIAorCUlOSVRfTElTVF9IRUFEKGhlYWQpOwogCS8qIGF0aF9kZXNjIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBEV09SRHMgKi8KIAlpZiAoKHNpemVvZihzdHJ1Y3QgYXRoX2Rlc2MpICUgNCkgIT0gMCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiYXRoX2Rlc2Mgbm90IERXT1JEIGFsaWduZWRcbiIpOwpAQCAtMTc3MCw3ICsxODA3LDcgQEAKIAogCS8qIGFsbG9jYXRlIGRlc2NyaXB0b3JzICovCiAJZGQtPmRkX2Rlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoc2MtPmRldiwgZGQtPmRkX2Rlc2NfbGVuLAotCQkJCQkgJmRkLT5kZF9kZXNjX3BhZGRyLCBHRlBfQVRPTUlDKTsKKwkJCQkJICZkZC0+ZGRfZGVzY19wYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRkLT5kZF9kZXNjID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0xNzgyLDE1ICsxODE5LDEzIEBACiAKIAkvKiBhbGxvY2F0ZSBidWZmZXJzICovCiAJYnNpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9idWYpICogbmJ1ZjsKLQliZiA9IGttYWxsb2MoYnNpemUsIEdGUF9LRVJORUwpOworCWJmID0ga3phbGxvYyhic2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJmID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOwogCX0KLQltZW1zZXQoYmYsIDAsIGJzaXplKTsKIAlkZC0+ZGRfYnVmcHRyID0gYmY7CiAKLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrLCBiZisrLCBkcyArPSBuZGVzYykgewogCQliZi0+YmZfZGVzYyA9IGRzOwogCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CkBAIC0xODkwLDEwICsxOTI1LDkgQEAKIAogLyogWFhYOiBSZW1vdmUgbWUgb25jZSB3ZSBkb24ndCBkZXBlbmQgb24gYXRoOWtfY2hhbm5lbCBmb3IgYWxsCiAgKiB0aGlzIHJlZHVuZGFudCBkYXRhICovCi1zdGF0aWMgdm9pZCBhdGg5a191cGRhdGVfaWNoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbikKK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKIApAQCAtMTkyNSw3ICsxOTU5LDggQEAKIAogc3RhdGljIGludCBhdGg5a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VyY2hhbiA9IGh3LT5jb25mLmNoYW5uZWw7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmluaXRfY2hhbm5lbDsKIAlpbnQgciwgcG9zOwpAQCAtMTkzNSwxMiArMTk3MCwzNCBAQAogCiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAorCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgeworCQlpZiAoc2MtPmNoYW5faWR4ID09IGN1cmNoYW4tPmh3X3ZhbHVlKSB7CisJCQkvKgorCQkJICogQWxyZWFkeSBvbiB0aGUgb3BlcmF0aW9uYWwgY2hhbm5lbCwgdGhlIG5ldyB3aXBoeQorCQkJICogY2FuIGJlIG1hcmtlZCBhY3RpdmUuCisJCQkgKi8KKwkJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQW5vdGhlciB3aXBoeSBpcyBvbiBhbm90aGVyIGNoYW5uZWwsIHN0YXJ0IHRoZSBuZXcKKwkJCSAqIHdpcGh5IGluIHBhdXNlZCBzdGF0ZS4KKwkJCSAqLworCQkJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwkJfQorCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9BQ1RJVkU7CisKIAkvKiBzZXR1cCBpbml0aWFsIGNoYW5uZWwgKi8KIAogCXBvcyA9IGN1cmNoYW4tPmh3X3ZhbHVlOwogCisJc2MtPmNoYW5faWR4ID0gcG9zOwogCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmNoYW5uZWxzW3Bvc107Ci0JYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBpbml0X2NoYW5uZWwpOworCWF0aDlrX3VwZGF0ZV9pY2hhbm5lbChzYywgaHcsIGluaXRfY2hhbm5lbCk7CiAKIAkvKiBSZXNldCBTRVJERVMgcmVnaXN0ZXJzICovCiAJYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHNjLT5zY19haCwgMCk7CkBAIC0yMDAzLDcgKzIwNjAsNyBAQAogCXNjLT5pbWFzayAmPSB+KEFUSDlLX0lOVF9TV0JBIHwgQVRIOUtfSU5UX0JNSVNTKTsKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQogCXIgPSBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc2MpOwpAQCAtMjAxOSwxMCArMjA3NiwxNyBAQAogCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgdHhjdGw7CiAJaW50IGhkcmxlbiwgcGFkc2l6ZTsKIAorCWlmIChhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfQUNUSVZFICYmIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9TQ0FOKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogJXM6IFRYIGluIHVuZXhwZWN0ZWQgd2lwaHkgc3RhdGUgIgorCQkgICAgICAgIiVkXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSksIGFwaHktPnN0YXRlKTsKKwkJZ290byBleGl0OworCX0KKwogCW1lbXNldCgmdHhjdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wpKTsKIAogCS8qCkBAIC0yMDU2LDcgKzIxMjAsNyBAQAogCiAJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAidHJhbnNtaXR0aW5nIHBhY2tldCwgc2tiOiAlcFxuIiwgc2tiKTsKIAotCWlmIChhdGhfdHhfc3RhcnQoc2MsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CisJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTIwNjksNyArMjEzMywxMCBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9JTkFDVElWRTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKQEAgLTIwNzgsNyArMjE0NSwxMiBAQAogCiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAotCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwlpZiAoYXRoOWtfd2lwaHlfc3RhcnRlZChzYykpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCQlyZXR1cm47IC8qIGFub3RoZXIgd2lwaHkgc3RpbGwgaW4gdXNlICovCisJfQogCiAJLyogbWFrZSBzdXJlIGgvdyB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0CiAJICogYmVmb3JlIHNldHRpbmcgdGhlIGludmFsaWQgZmxhZy4gKi8KQEAgLTIxMDksMzEgKzIxODEsNDMgQEAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CiAJZW51bSBubDgwMjExX2lmdHlwZSBpY19vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKLQotCS8qIFN1cHBvcnQgb25seSB2aWYgZm9yIG5vdyAqLwotCi0JaWYgKHNjLT5udmlmcykKLQkJcmV0dXJuIC1FTk9CVUZTOworCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAorCWlmICghKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykgJiYKKwkgICAgc2MtPm52aWZzID4gMCkgeworCQlyZXQgPSAtRU5PQlVGUzsKKwkJZ290byBvdXQ7CisJfQorCiAJc3dpdGNoIChjb25mLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlpY19vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoc2MtPm5iY252aWZzID49IEFUSF9CQ0JVRikgeworCQkJcmV0ID0gLUVOT0JVRlM7CisJCQlnb3RvIG91dDsKKwkJfQogCQlpY19vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9BREhPQzsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJaWYgKHNjLT5uYmNudmlmcyA+PSBBVEhfQkNCVUYpIHsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBvdXQ7CisJCX0KIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQVA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiSW50ZXJmYWNlIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWRcbiIsIGNvbmYtPnR5cGUpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKIAl9CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkF0dGFjaCBhIFZJRiBvZiB0eXBlOiAlZFxuIiwgaWNfb3Btb2RlKTsKQEAgLTIxNDIsMTIgKzIyMjYsMTkgQEAKIAlhdnAtPmF2X29wbW9kZSA9IGljX29wbW9kZTsKIAlhdnAtPmF2X2JzbG90ID0gLTE7CiAKLQlpZiAoaWNfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KHNjLT5zY19haCwgMSk7Ci0KLQlzYy0+dmlmc1swXSA9IGNvbmYtPnZpZjsKIAlzYy0+bnZpZnMrKzsKIAorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCisJCWF0aDlrX3NldF9ic3NpZF9tYXNrKGh3KTsKKworCWlmIChzYy0+bnZpZnMgPiAxKQorCQlnb3RvIG91dDsgLyogc2tpcCBnbG9iYWwgc2V0dGluZ3MgZm9yIHNlY29uZGFyeSB2aWYgKi8KKworCWlmIChpY19vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzYy0+c2NfYWgsIDEpOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfVFNGX1JFU0VUOworCX0KKwogCS8qIFNldCB0aGUgZGV2aWNlIG9wbW9kZSAqLwogCXNjLT5zY19haC0+b3Btb2RlID0gaWNfb3Btb2RlOwogCkBAIC0yMTU1LDEwICsyMjQ2LDEzIEBACiAJICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KIAkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KIAkgKi8KLQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSAmJgotCSAgICAoKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKLQkgICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkpCi0JCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfTUlCOworCWlmICgoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8fAorCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKKwkJaWYgKGF0aDlrX2h3X3BoeWNvdW50ZXJzKHNjLT5zY19haCkpCisJCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX01JQjsKKwkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9UU0ZPT1I7CisJfQorCiAJLyoKIAkgKiBTb21lIGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgVElNIElFIGFuZCBmaXJlcyBhbgogCSAqIGludGVycnVwdCB3aGVuIHRoZSBUSU0gYml0IGlzIHNldC4gIEZvciBoYXJkd2FyZQpAQCAtMjE3OSwxNiArMjI3MywxOCBAQAogCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEhfQU5JX1BPTExJTlRFUlZBTCkpOwogCX0KIAorb3V0OgogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKLQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCWludCBpOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEZXRhY2ggSW50ZXJmYWNlXG4iKTsKIApAQCAtMjIwNiw3ICsyMzAyLDE1IEBACiAKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JFQUNPTlM7CiAKLQlzYy0+dmlmc1swXSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtpXSA9PSBjb25mLT52aWYpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdmlmIGhhZCBhbGxvY2F0ZWQgYmVhY29uICIKKwkJCSAgICAgICAic2xvdFxuIiwgX19mdW5jX18pOworCQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IE5VTEw7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbaV0gPSBOVUxMOworCQl9CisJfQorCiAJc2MtPm52aWZzLS07CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CkBAIC0yMjE0LDcgKzIzMTgsOCBAQAogCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwpAQCAtMjI0NCwyNCArMjM0OSw0OSBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwogCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CiAKKwkJYXBoeS0+Y2hhbl9pZHggPSBwb3M7CisJCWFwaHktPmNoYW5faXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCWlmIChhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTiB8fAorCQkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBEbyBub3QgY2hhbmdlIG9wZXJhdGlvbmFsIGNoYW5uZWwgYmFzZWQgb24gYSBwYXVzZWQKKwkJCSAqIHdpcGh5IGNoYW5nZXMuCisJCQkgKi8KKwkJCWdvdG8gc2tpcF9jaGFuX2NoYW5nZTsKKwkJfQorCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IGNoYW5uZWw6ICVkIE1IelxuIiwKIAkJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAogCQkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbHkgKi8KLQkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCAmc2MtPnNjX2FoLT5jaGFubmVsc1twb3NdKTsKKwkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSk7CiAKIAkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIGNvbmZfaXNfaHQoY29uZikpOwogCi0JCWlmIChhdGhfc2V0X2NoYW5uZWwoc2MsICZzYy0+c2NfYWgtPmNoYW5uZWxzW3Bvc10pIDwgMCkgeworCQlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKIAkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCitza2lwX2NoYW5fY2hhbmdlOgogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQogCQlzYy0+Y29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CiAKKwkvKgorCSAqIFRoZSBIVyBUU0YgaGFzIHRvIGJlIHJlc2V0IHdoZW4gdGhlIGJlYWNvbiBpbnRlcnZhbCBjaGFuZ2VzLgorCSAqIFdlIHNldCB0aGUgZmxhZyBoZXJlLCBhbmQgYXRoX2JlYWNvbl9jb25maWdfYXAoKSB3b3VsZCB0YWtlIHRoaXMKKwkgKiBpbnRvIGFjY291bnQgd2hlbiBpdCBnZXRzIGNhbGxlZCB0aHJvdWdoIHRoZSBzdWJzZXF1ZW50CisJICogY29uZmlnX2ludGVyZmFjZSgpIGNhbGwgLSB3aXRoIElGQ0NfQkVBQ09OIGluIHRoZSBjaGFuZ2VkIGZpZWxkLgorCSAqLworCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKQorCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfVFNGX1JFU0VUOworCiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0yMjcxLDEyICsyNDAxLDE1IEBACiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKIAl1MzIgcmZpbHQgPSAwOwogCWludCBlcnJvciwgaTsKIAorCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisKIAkvKiBUT0RPOiBOZWVkIHRvIGRlY2lkZSB3aGljaCBodyBvcG1vZGUgdG8gdXNlIGZvciBtdWx0aS1pbnRlcmZhY2UKIAkgKiBjYXNlcyAqLwogCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKQEAgLTIyOTcsNiArMjQzMCw3IEBACiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCQkvKiBTZXQgQlNTSUQgKi8KIAkJCW1lbWNweShzYy0+Y3VyYnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQltZW1jcHkoYXZwLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJCXNjLT5jdXJhaWQgPSAwOwogCQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYyk7CiAKQEAgLTIzMzEsMTEgKzI0NjUsMTMgQEAKIAkJCSAqLwogCQkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAotCQkJZXJyb3IgPSBhdGhfYmVhY29uX2FsbG9jKHNjLCAwKTsKLQkJCWlmIChlcnJvciAhPSAwKQorCQkJZXJyb3IgPSBhdGhfYmVhY29uX2FsbG9jKGFwaHksIHZpZik7CisJCQlpZiAoZXJyb3IgIT0gMCkgeworCQkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CiAKLQkJCWF0aF9iZWFjb25fc3luYyhzYywgMCk7CisJCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgdmlmKTsKIAkJfQogCX0KIApAQCAtMjM1Miw2ICsyNDg4LDggQEAKIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQlhdGhfdXBkYXRlX2NoYWlubWFzayhzYywgMCk7CiAKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3MCw3ICsyNTA4LDggQEAKIAkJCQkgICBpbnQgbWNfY291bnQsCiAJCQkJICAgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAl1MzIgcmZpbHQ7CiAKIAljaGFuZ2VkX2ZsYWdzICY9IFNVUFBPUlRFRF9GSUxURVJTOwpAQCAtMjM4MCwxNCArMjUxOSw2IEBACiAJcmZpbHQgPSBhdGhfY2FsY3J4ZmlsdGVyKHNjKTsKIAlhdGg5a19od19zZXRyeGZpbHRlcihzYy0+c2NfYWgsIHJmaWx0KTsKIAotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBhdGhfYmNhc3RfbWFjLCBFVEhfQUxFTik7Ci0JCQlzYy0+Y3VyYWlkID0gMDsKLQkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwotCQl9Ci0JfQotCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgUlggZmlsdGVyOiAweCV4XG4iLCBzYy0+cngucnhmaWx0ZXIpOwogfQogCkBAIC0yMzk2LDcgKzI1MjcsOCBAQAogCQkJICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNUQV9OT1RJRllfQUREOgpAQCAtMjQxMyw3ICsyNTQ1LDggQEAKIHN0YXRpYyBpbnQgYXRoOWtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIAlpbnQgcmV0ID0gMCwgcW51bTsKIApAQCAtMjQ0OSwxNiArMjU4MiwyMCBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAobW9kcGFyYW1fbm9od2NyeXB0KQorCQlyZXR1cm4gLUVOT1NQQzsKKwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0tFWUNBQ0hFLCAiU2V0IEhXIEtleVxuIik7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0VUX0tFWToKLQkJcmV0ID0gYXRoX2tleV9jb25maWcoc2MsIHN0YSwga2V5KTsKKwkJcmV0ID0gYXRoX2tleV9jb25maWcoc2MsIHZpZiwgc3RhLCBrZXkpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCWtleS0+aHdfa2V5X2lkeCA9IHJldDsKIAkJCS8qIHB1c2ggSVYgYW5kIE1pY2hhZWwgTUlDIGdlbmVyYXRpb24gdG8gc3RhY2sgKi8KQEAgLTI0ODgsNyArMjYyNSw4IEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCQkJICAgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKQEAgLTI1MjMsNyArMjY2MSw4IEBACiBzdGF0aWMgdTY0IGF0aDlrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJdTY0IHRzZjsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOwpAQCAtMjUzNCw3ICsyNjczLDggQEAKIAogc3RhdGljIHZvaWQgYXRoOWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAlhdGg5a19od19zZXR0c2Y2NChzYy0+c2NfYWgsIHRzZik7CkBAIC0yNTQzLDcgKzI2ODMsOCBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJYXRoOWtfaHdfcmVzZXRfdHNmKHNjLT5zY19haCk7CkBAIC0yNTU1LDcgKzI2OTYsOCBAQAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewpAQCAtMjU5MSw2ICsyNzMzLDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCisJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKKwkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfU0NBTjsKKwlhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHNjLCBhcGh5KTsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfU0NBTk5JTkc7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCkBAIC0yNjA4LDYgKzI3ODQsOCBAQAogCS5zZXRfdHNmIAkgICAgPSBhdGg5a19zZXRfdHNmLAogCS5yZXNldF90c2YgCSAgICA9IGF0aDlrX3Jlc2V0X3RzZiwKIAkuYW1wZHVfYWN0aW9uICAgICAgID0gYXRoOWtfYW1wZHVfYWN0aW9uLAorCS5zd19zY2FuX3N0YXJ0ICAgICAgPSBhdGg5a19zd19zY2FuX3N0YXJ0LAorCS5zd19zY2FuX2NvbXBsZXRlICAgPSBhdGg5a19zd19zY2FuX2NvbXBsZXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0yNjgxLDEyICsyODU5LDIwIEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKKwllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImF0aDlrOiBVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgcm9vdDogJWRcbiIsCisJCQllcnJvcik7CisJCWdvdG8gZXJyX3JhdGVfdW5yZWdpc3RlcjsKKwl9CisKIAllcnJvciA9IGF0aF9wY2lfaW5pdCgpOwogCWlmIChlcnJvciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiYXRoOWs6IE5vIFBDSSBkZXZpY2VzIGZvdW5kLCBkcml2ZXIgbm90IGluc3RhbGxlZC5cbiIpOwogCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3JhdGVfdW5yZWdpc3RlcjsKKwkJZ290byBlcnJfcmVtb3ZlX3Jvb3Q7CiAJfQogCiAJZXJyb3IgPSBhdGhfYWhiX2luaXQoKTsKQEAgLTI3MDAsNiArMjg4Niw4IEBACiAgZXJyX3BjaV9leGl0OgogCWF0aF9wY2lfZXhpdCgpOwogCisgZXJyX3JlbW92ZV9yb290OgorCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CiAgZXJyX3JhdGVfdW5yZWdpc3RlcjoKIAlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKICBlcnJfb3V0OgpAQCAtMjcxMSw2ICsyODk5LDcgQEAKIHsKIAlhdGhfYWhiX2V4aXQoKTsKIAlhdGhfcGNpX2V4aXQoKTsKKwlhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCgpOwogCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgdW5sb2FkZWRcbiIsIGRldl9pbmZvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKaW5kZXggYzI4YWZlNC4uOWE1OGJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKQEAgLTUyLDggKzUyLDggQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoc2MtPmRldik7CiAKIAlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoX3BjaV9lZXByb21fcmVhZChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKQpAQCAtNjMsNyArNjMsOCBAQAogCWlmICghYXRoOWtfaHdfd2FpdChhaCwKIAkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQSwKIAkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9CVVNZIHwKLQkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9QUk9UX0FDQ0VTUywgMCkpIHsKKwkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9QUk9UX0FDQ0VTUywgMCwKKwkJCSAgIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtODIsNiArODMsNyBAQAogc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAl1OCBjc3o7CkBAIC0xNTQsNyArMTU2LDggQEAKIAkJZ290byBiYWQxOwogCX0KIAotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpICsKKwkJCQlzaXplb2Yoc3RydWN0IGF0aF9zb2Z0YyksICZhdGg5a19vcHMpOwogCWlmIChodyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRoX3BjaTogbm8gbWVtb3J5IGZvciBpZWVlODAyMTFfaHdcbiIpOwogCQlnb3RvIGJhZDI7CkBAIC0xNjMsNyArMTY2LDExIEBACiAJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CiAKLQlzYyA9IGh3LT5wcml2OworCWFwaHkgPSBody0+cHJpdjsKKwlzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIChhcGh5ICsgMSk7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5wcmlfd2lwaHkgPSBhcGh5OwogCXNjLT5odyA9IGh3OwogCXNjLT5kZXYgPSAmcGRldi0+ZGV2OwogCXNjLT5tZW0gPSBtZW07CkBAIC0yMTMsNyArMjIwLDggQEAKIHN0YXRpYyB2b2lkIGF0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKIAlhdGhfY2xlYW51cChzYyk7CiB9CkBAIC0yMjMsNyArMjMxLDggQEAKIHN0YXRpYyBpbnQgYXRoX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOwogCkBAIC0yNDIsNyArMjUxLDggQEAKIHN0YXRpYyBpbnQgYXRoX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAl1MzIgdmFsOwogCWludCBlcnI7CiAKQEAgLTI5Miw3ICszMDIsNyBAQAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogfTsKIAotaW50IF9faW5pdCBhdGhfcGNpX2luaXQodm9pZCkKK2ludCBhdGhfcGNpX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXRoX3BjaV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYwppbmRleCA1MmFhMmE3Li5lMTQ5NGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYwpAQCAtMTMyLDIwICsxMzIsMjcgQEAKIAkJYk1vZGUgPSAwOwogCQlmcmFjTW9kZSA9IDA7CiAKLQkJaWYgKChmcmVxICUgMjApID09IDApIHsKLQkJCWFNb2RlUmVmU2VsID0gMzsKLQkJfSBlbHNlIGlmICgoZnJlcSAlIDEwKSA9PSAwKSB7Ci0JCQlhTW9kZVJlZlNlbCA9IDI7Ci0JCX0gZWxzZSB7CisJCXN3aXRjaChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0ZSQUNfTl81RykpIHsKKwkJY2FzZSAwOgorCQkJaWYgKChmcmVxICUgMjApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDM7CisJCQl9IGVsc2UgaWYgKChmcmVxICUgMTApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDI7CisJCQl9CisJCQlpZiAoYU1vZGVSZWZTZWwpCisJCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJZGVmYXVsdDoKIAkJCWFNb2RlUmVmU2VsID0gMDsKLQogCQkJZnJhY01vZGUgPSAxOwogCQkJcmVmRGl2QSA9IDE7CiAJCQljaGFubmVsU2VsID0gKGZyZXEgKiAweDgwMDApIC8gMTU7CiAKIAkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1NZTlRIOSwKIAkJCQkgICAgICBBUl9BTl9TWU5USDlfUkVGRElWQSwgcmVmRGl2QSk7CisKIAkJfQorCiAJCWlmICghZnJhY01vZGUpIHsKIAkJCW5kaXYgPSAoZnJlcSAqIChyZWZEaXZBID4+IGFNb2RlUmVmU2VsKSkgLyA2MDsKIAkJCWNoYW5uZWxTZWwgPSBuZGl2ICYgMHgxZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCmluZGV4IDgzN2E1OTguLjFlYWM4YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCkBAIC0zODcsNiArMzg3LDggQEAKIAogI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkwgICAgICAgMHhBMjA0CiAjZGVmaW5lIEFSX1BIWV9DQ0tfVFhfQ1RSTF9KQVBBTiAweDAwMDAwMDEwCisjZGVmaW5lIEFSX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfVFhfREFDX1NDQUxFX0NDS19TICAgICAgIDIKIAogI2RlZmluZSBBUl9QSFlfQ0NLX0RFVEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTIwOAogI2RlZmluZSBBUl9QSFlfQ0NLX0RFVEVDVF9XRUFLX1NJR19USFJfQ0NLICAgICAgICAgIDB4MDAwMDAwM0YKQEAgLTQ0NCw2ICs0NDYsMzIgQEAKICNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzMgICAgMHgwMDMwMDAwMAogI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fM19TICAyMAogCisjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRSAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFX1MgMjIKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDQgICAgICAgMHhhMjY0CisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19WQUxJRCAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfVkFMSURfUyAgIDAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX09VVCAgICAgICAweDAwMDAwMUZFCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19PVVRfUyAgICAgMQorCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMNl8wICAgICAweGEyNzAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw2XzEgICAgIDB4YjI3MAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUgICAgIDB4MDMwMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFX1MgICAyNAorCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMNyAgICAgICAweGEyNzQKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfSU5JVF9UWF9HQUlOICAgICAweDAxRjgwMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTl9TICAgMTkKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDkgICAgICAgMHhhMjdDCisjZGVmaW5lIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSyAgICAgICAgMHgwMDAwN0MwMAorI2RlZmluZSBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0tfUyAgICAgIDEwCisKKyNkZWZpbmUgQVJfUEhZX1RYX0dBSU5fVEJMMSAgICAgIDB4YTMwMAorI2RlZmluZSBBUl9QSFlfVFhfR0FJTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0YwMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0dBSU5fUyAgICAgICAgICAgICAgICAgICAxMgorCiAjZGVmaW5lIEFSX1BIWV9WSVRfTUFTSzJfTV80Nl82MSAweGEzYTAKICNkZWZpbmUgQVJfUEhZX01BU0syX01fMzFfNDUgICAgIDB4YTNhNAogI2RlZmluZSBBUl9QSFlfTUFTSzJfTV8xNl8zMCAgICAgMHhhM2E4CkBAIC00ODUsNiArNTEzLDExIEBACiAjZGVmaW5lIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80ICAgIDB4MEZDMDAwMDAKICNkZWZpbmUgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzRfUyAgMjIKIAorLyogQ2FycmllciBsZWFrIGNhbGlicmF0aW9uIGNvbnRyb2wsIGRvIGl0IGFmdGVyIEFHQyBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBBUl9QSFlfQ0xfQ0FMX0NUTCAgICAgICAweEEzNTgKKyNkZWZpbmUgQVJfUEhZX0NMX0NBTF9FTkFCTEUgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9QSFlfUEFSQUxMRUxfQ0FMX0VOQUJMRSAgICAweDAwMDAwMDAxCisKICNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEU1ICAgMHhBMzhDCiAjZGVmaW5lIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiAgIDB4QTM5MAogCkBAIC01MzAsOCArNTYzLDYgQEAKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBBVEg5S19LRVlfWE9SICAgICAgICAgICAgICAgICAweGFhCi0KICNkZWZpbmUgQVRIOUtfSVNfTUlDX0VOQUJMRUQoYWgpCQkJCQlcCiAJKChhaCktPnN0YV9pZDFfZGVmYXVsdHMgJiBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMKaW5kZXggYTRlODYzMS4uODMyNzM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jCkBAIC0xMjY3LDcgKzEyNjcsOCBAQAogCQlhdGhfcmNfcHJpdi0+cGVyX2Rvd25fdGltZSA9IG5vd19tc2VjOwogCX0KIAotCWF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc2MsIHR4X3JhdGUsIHhyZXRyaWVzLCByZXRyaWVzKTsKKwlhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHNjLCB0eF9yYXRlLCB4cmV0cmllcywgcmV0cmllcywKKwkJCSAgICAgICBhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyKTsKIAogI3VuZGVmIENIS19SU1NJCiB9CkBAIC0xMzg2LDQwICsxMzg3LDE4IEBACiBzdGF0aWMgdm9pZCBhdGhfcmNfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCXN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAotCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUpCiB7Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKIAlzdHJ1Y3QgYXRoX3JhdGVzZXQgKnJhdGVzZXQgPSAmYXRoX3JjX3ByaXYtPm5lZ19yYXRlczsKIAl1OCAqaHRfbWNzID0gKHU4ICopJmF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXM7CiAJdTggaSwgaiwgaywgaGkgPSAwLCBodGhpID0gMDsKIAotCS8qIEZJWE1FOiBBZGhvYyAqLwotCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKLQkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkgewotCQlib29sIGlzX2N3XzQwID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7Ci0JCXJhdGVfdGFibGUgPSBhdGhfY2hvb3NlX3JhdGVfdGFibGUoc2MsIHNiYW5kLT5iYW5kLAotCQkJCQkJICAgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkLAotCQkJCQkJICAgaXNfY3dfNDApOwotCX0gZWxzZSBpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJLyogY3VyX3JhdGVfdGFibGUgd291bGQgYmUgc2V0IG9uIGluaXQgdGhyb3VnaCBjb25maWcoKSAqLwotCQlyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCX0KLQogCWlmICghcmF0ZV90YWJsZSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiUmF0ZSB0YWJsZSBub3QgaW5pdGlhbGl6ZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgewotCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gV0xBTl9SQ19IVF9GTEFHOwotCQlpZiAoc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzayAhPSAxKQotCQkJYXRoX3JjX3ByaXYtPmh0X2NhcCB8PSBXTEFOX1JDX0RTX0ZMQUc7Ci0JCWlmIChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkKLQkJCWF0aF9yY19wcml2LT5odF9jYXAgfD0gV0xBTl9SQ180MF9GTEFHOwotCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApCi0JCQlhdGhfcmNfcHJpdi0+aHRfY2FwIHw9IFdMQU5fUkNfU0dJX0ZMQUc7Ci0JfQotCiAJLyogSW5pdGlhbCByYXRlIHRhYmxlIHNpemUuIFdpbGwgY2hhbmdlIGRlcGVuZGluZwogCSAqIG9uIHRoZSB3b3JraW5nIHJhdGUgc2V0ICovCiAJYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZSA9IFJBVEVfVEFCTEVfU0laRTsKQEAgLTE0MzksNyArMTQxOCw3IEBACiAJCQlhdGhfcmNfcHJpdi0+dmFsaWRfcGh5X3JhdGVpZHhbaV1bal0gPSAwOwogCQlhdGhfcmNfcHJpdi0+dmFsaWRfcGh5X3JhdGVjbnRbaV0gPSAwOwogCX0KLQlhdGhfcmNfcHJpdi0+cmNfcGh5X21vZGUgPSAoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfNDBfRkxBRyk7CisJYXRoX3JjX3ByaXYtPnJjX3BoeV9tb2RlID0gYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfNDBfRkxBRzsKIAogCS8qIFNldCBzdHJlYW0gY2FwYWJpbGl0eSAqLwogCWF0aF9yY19wcml2LT5zaW5nbGVfc3RyZWFtID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX0RTX0ZMQUcpID8gMCA6IDE7CkBAIC0xNDg0LDkgKzE0NjMsMzQgQEAKIAlhdGhfcmNfc29ydF92YWxpZHJhdGVzKHJhdGVfdGFibGUsIGF0aF9yY19wcml2KTsKIAlhdGhfcmNfcHJpdi0+cmF0ZV9tYXhfcGh5ID0gYXRoX3JjX3ByaXYtPnZhbGlkX3JhdGVfaW5kZXhbay00XTsKIAlzYy0+Y3VyX3JhdGVfdGFibGUgPSByYXRlX3RhYmxlOworCisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJSQyBJbml0aWFsaXplZCB3aXRoIGNhcGFiaWxpdGllczogMHgleFxuIiwKKwkJYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiB9CiAKLS8qIFJhdGUgQ29udHJvbCBjYWxsYmFja3MgKi8KK3N0YXRpYyB1OCBhdGhfcmNfYnVpbGRfaHRfY2FwcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCBpc19odCwgYm9vbCBpc19jdzQwLAorCQkJICAgICAgIGJvb2wgaXNfc2dpNDApCit7CisJdTggY2FwcyA9IDA7CisKKwlpZiAoaXNfaHQpIHsKKwkJY2FwcyA9IFdMQU5fUkNfSFRfRkxBRzsKKwkJaWYgKHNjLT5zY19haC0+Y2Fwcy50eF9jaGFpbm1hc2sgIT0gMSAmJgorCQkgICAgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9EUywgMCwgTlVMTCkpCisJCQljYXBzIHw9IFdMQU5fUkNfRFNfRkxBRzsKKwkJaWYgKGlzX2N3NDApCisJCQljYXBzIHw9IFdMQU5fUkNfNDBfRkxBRzsKKwkJaWYgKGlzX3NnaTQwKQorCQkJY2FwcyB8PSBXTEFOX1JDX1NHSV9GTEFHOworCX0KKworCXJldHVybiBjYXBzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYWM4MDIxMSBSYXRlIENvbnRyb2wgY2FsbGJhY2tzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyB2b2lkIGF0aF90eF9zdGF0dXModm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTUzMyw3ICsxNTM3LDggQEAKIAkJCSB0eF9pbmZvX3ByaXYtPnR4LnRzX2xvbmdyZXRyeSk7CiAKIAkvKiBDaGVjayBpZiBhZ2dyZWdhdGlvbiBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0aWQgKi8KLQlpZiAoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSkgeworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpICYmCisJICAgICEoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSkgewogCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQkJdTggKnFjLCB0aWQ7CiAJCQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwpAQCAtMTU4MSw2ICsxNTg2LDggQEAKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CiAJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIGlzX2N3NDAsIGlzX3NnaTQwOwogCWludCBpLCBqID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CkBAIC0xNjAyLDEyICsxNjA5LDcyIEBACiAJCWF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAl9CiAKLQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEpOworCWlzX2N3NDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwlpc19zZ2k0MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCisJLyogQ2hvb3NlIHJhdGUgdGFibGUgZmlyc3QgKi8KKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkgeworCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIGlzX2N3NDApOworCX0gZWxzZSBpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJLyogY3VyX3JhdGVfdGFibGUgd291bGQgYmUgc2V0IG9uIGluaXQgdGhyb3VnaCBjb25maWcoKSAqLworCQlyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOworCX0KKworCWF0aF9yY19wcml2LT5odF9jYXAgPSBhdGhfcmNfYnVpbGRfaHRfY2FwcyhzYywgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkLAorCQkJCQkJICAgaXNfY3c0MCwgaXNfc2dpNDApOworCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9yYXRlX3VwZGF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIG9wZXJfY3c0MCA9IGZhbHNlLCBvcGVyX3NnaTQwOworCWJvb2wgbG9jYWxfY3c0MCA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKwlib29sIGxvY2FsX3NnaTQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKworCS8qIEZJWE1FOiBIYW5kbGUgQVAgbW9kZSBsYXRlciB3aGVuIHdlIHN1cHBvcnQgQ1dNICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuOworCisJCWlmIChzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKKwkJICAgIHNjLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJb3Blcl9jdzQwID0gdHJ1ZTsKKworCQlvcGVyX3NnaTQwID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQl0cnVlIDogZmFsc2U7CisKKwkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIG9wZXJfY3c0MCk7CisJCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsCisJCQkJCQkgICBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQsCisJCQkJCQkgICBvcGVyX2N3NDAsIG9wZXJfc2dpNDApOworCQkJYXRoX3JjX2luaXQoc2MsIHByaXZfc3RhLCBzYmFuZCwgc3RhLCByYXRlX3RhYmxlKTsKKworCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCQkJIk9wZXJhdGluZyBIVCBCYW5kd2lkdGggY2hhbmdlZCB0bzogJWRcbiIsCisJCQkJc2MtPmh3LT5jb25mLmNoYW5uZWxfdHlwZSk7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyB2b2lkICphdGhfcmF0ZV9hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpcikKIHsKLQlyZXR1cm4gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXJldHVybiBhcGh5LT5zYzsKIH0KIAogc3RhdGljIHZvaWQgYXRoX3JhdGVfZnJlZSh2b2lkICpwcml2KQpAQCAtMTY0NiwzMyArMTcxMywxMyBAQAogCS50eF9zdGF0dXMgPSBhdGhfdHhfc3RhdHVzLAogCS5nZXRfcmF0ZSA9IGF0aF9nZXRfcmF0ZSwKIAkucmF0ZV9pbml0ID0gYXRoX3JhdGVfaW5pdCwKKwkucmF0ZV91cGRhdGUgPSBhdGhfcmF0ZV91cGRhdGUsCiAJLmFsbG9jID0gYXRoX3JhdGVfYWxsb2MsCiAJLmZyZWUgPSBhdGhfcmF0ZV9mcmVlLAogCS5hbGxvY19zdGEgPSBhdGhfcmF0ZV9hbGxvY19zdGEsCiAJLmZyZWVfc3RhID0gYXRoX3JhdGVfZnJlZV9zdGEsCiB9OwogCi1zdGF0aWMgdm9pZCBhdGhfc2V0dXBfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHJhdGVfdGFibGUtPnJhdGVfY250OyBpKyspIHsKLQkJdTggY2l4ID0gcmF0ZV90YWJsZS0+aW5mb1tpXS5jdHJsX3JhdGU7Ci0KLQkJcmF0ZV90YWJsZS0+aW5mb1tpXS5scEFja0R1cmF0aW9uID0KLQkJCWF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLAotCQkJCQkgICAgICAgV0xBTl9DVFJMX0ZSQU1FX1NJWkUsCi0JCQkJCSAgICAgICBjaXgsCi0JCQkJCSAgICAgICBmYWxzZSk7Ci0JCXJhdGVfdGFibGUtPmluZm9baV0uc3BBY2tEdXJhdGlvbiA9Ci0JCQlhdGg5a19od19jb21wdXRldHh0aW1lKHNjLT5zY19haCwgcmF0ZV90YWJsZSwKLQkJCQkJICAgICAgIFdMQU5fQ1RSTF9GUkFNRV9TSVpFLAotCQkJCQkgICAgICAgY2l4LAotCQkJCQkgICAgICAgdHJ1ZSk7Ci0JfQotfQotCiB2b2lkIGF0aF9yYXRlX2F0dGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExQl0gPQpAQCAtMTY5MywxMiArMTc0MCw2IEBACiAJCSZhcjU0MTZfMTFuZ19yYXRldGFibGU7CiAJc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VU10gPQogCQkmYXI1NDE2XzExbmdfcmF0ZXRhYmxlOwotCi0JYXRoX3NldHVwX3JhdGVfdGFibGUoc2MsICZhcjU0MTZfMTFiX3JhdGV0YWJsZSk7Ci0JYXRoX3NldHVwX3JhdGVfdGFibGUoc2MsICZhcjU0MTZfMTFhX3JhdGV0YWJsZSk7Ci0JYXRoX3NldHVwX3JhdGVfdGFibGUoc2MsICZhcjU0MTZfMTFnX3JhdGV0YWJsZSk7Ci0JYXRoX3NldHVwX3JhdGVfdGFibGUoc2MsICZhcjU0MTZfMTFuYV9yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExbmdfcmF0ZXRhYmxlKTsKIH0KIAogaW50IGF0aF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5oCmluZGV4IGQ2ODhlYzUxLi5kYjliMGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmgKQEAgLTEyMCw4ICsxMjAsNiBAQAogCQl1OCBzZ2lfaW5kZXg7CiAJCXU4IGh0X2luZGV4OwogCQl1MzIgbWF4XzRtc19mcmFtZWxlbjsKLQkJdTE2IGxwQWNrRHVyYXRpb247Ci0JCXUxNiBzcEFja0R1cmF0aW9uOwogCX0gaW5mb1tSQVRFX1RBQkxFX1NJWkVdOwogCXUzMiBwcm9iZV9pbnRlcnZhbDsKIAl1MzIgcnNzaV9yZWR1Y2VfaW50ZXJ2YWw7CkBAIC0xOTYsMTEgKzE5NCwxOSBAQAogCXN0cnVjdCBhdGhfcmF0ZV9zb2Z0YyAqYXNjOwogfTsKIAorZW51bSBhdGg5a19pbnRlcm5hbF9mcmFtZV90eXBlIHsKKwlBVEg5S19OT1RfSU5URVJOQUwsCisJQVRIOUtfSU5UX1BBVVNFLAorCUFUSDlLX0lOVF9VTlBBVVNFCit9OworCiBzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiB7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKIAlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0eDsKIAlpbnQgbl9mcmFtZXM7CiAJaW50IG5fYmFkX2ZyYW1lczsKIAlib29sIHVwZGF0ZV9yYzsKKwllbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgZnJhbWVfdHlwZTsKIH07CiAKICNkZWZpbmUgQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWN2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWN2LmMKaW5kZXggMDhmNjc2YS4uMGJiYTE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYwpAQCAtMTYsNiArMTYsMjcgQEAKIAogI2luY2x1ZGUgImF0aDlrLmgiCiAKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2h3ICogYXRoX2dldF92aXJ0X2h3KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+cHJpX3dpcGh5LT5odzsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoaGRyLT5hZGRyMSwgYXBoeS0+aHctPndpcGh5LT5wZXJtX2FkZHIpCisJCSAgICA9PSAwKSB7CisJCQlodyA9IGFwaHktPmh3OworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gaHc7Cit9CisKIC8qCiAgKiBTZXR1cCBhbmQgbGluayBkZXNjcmlwdG9ycy4KICAqCkBAIC03OSw3ICsxMDAsNyBAQAogCXJldHVybiAodHNmICYgfjB4N2ZmZikgfCByc3RhbXA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXRoX3J4YnVmX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MzIgbGVuKQorc3RhdGljIHN0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUzMiBsZW4sIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIG9mZjsKQEAgLTk3LDcgKzExOCw3IEBACiAJICogVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHdlIG1heSBnZXQgOCBLQiBoZXJlIGZyb20gdGhlCiAJICoga2VybmVsLi4uIGFuZCB0aGF0IGlzIGFjdHVhbGx5IHdoYXQgaXMgb2JzZXJ2ZWQgb24gc29tZQogCSAqIHN5c3RlbXMgOiggKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIHNjLT5jYWNoZWxzeiAtIDEpOworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4gKyBzYy0+Y2FjaGVsc3ogLSAxLCBnZnBfbWFzayk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIHNjLT5jYWNoZWxzejsKIAkJaWYgKG9mZiAhPSAwKQpAQCAtMTIzLDEwICsxNDQsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4IHJhdGVjb2RlOwogCV9fbGUxNiBmYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAltZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTsKKwlodyA9IGF0aF9nZXRfdmlydF9odyhzYywgaGRyKTsKIAogCWlmIChkcy0+ZHNfcnhzdGF0LnJzX21vcmUpIHsKIAkJLyoKQEAgLTE4Niw3ICsyMDksNiBAQAogCQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcmF0ZWNvZGUgJiAweDdmOwogCX0gZWxzZSB7CiAJCWludCBpID0gMCwgY3VyX2JhbmQsIG5fcmF0ZXM7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCiAJCWN1cl9iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKIAkJbl9yYXRlcyA9IHNjLT5zYmFuZHNbY3VyX2JhbmRdLm5fYml0cmF0ZXM7CkBAIC0yMDgsOCArMjMwLDggQEAKIAl9CiAKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSBhdGhfZXh0ZW5kX3RzZihzYywgZHMtPmRzX3J4c3RhdC5yc190c3RhbXApOwotCXJ4X3N0YXR1cy0+YmFuZCA9IHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kOwotCXJ4X3N0YXR1cy0+ZnJlcSA9ICBzYy0+aHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMtPmZyZXEgPSBody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKIAlyeF9zdGF0dXMtPm5vaXNlID0gc2MtPmFuaS5ub2lzZV9mbG9vcjsKIAlyeF9zdGF0dXMtPnNpZ25hbCA9IHJ4X3N0YXR1cy0+bm9pc2UgKyBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gZHMtPmRzX3J4c3RhdC5yc19hbnRlbm5hOwpAQCAtMjg0LDcgKzMwNiw3IEBACiAJCX0KIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJmLCAmc2MtPnJ4LnJ4YnVmLCBsaXN0KSB7Ci0JCQlza2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplKTsKKwkJCXNrYiA9IGF0aF9yeGJ1Zl9hbGxvYyhzYywgc2MtPnJ4LmJ1ZnNpemUsIEdGUF9LRVJORUwpOwogCQkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWJyZWFrOwpAQCAtMzYzLDI2ICszODUsMzYgQEAKIAlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX1BST0JFUkVROwogCi0JLyogQ2FuJ3Qgc2V0IEhPU1RBUCBpbnRvIHByb21pc2NvdXMgbW9kZSAqLworCS8qCisJICogU2V0IHByb21pc2N1b3VzIG1vZGUgd2hlbiBGSUZfUFJPTUlTQ19JTl9CU1MgaXMgZW5hYmxlZCBmb3Igc3RhdGlvbgorCSAqIG1vZGUgaW50ZXJmYWNlIG9yIHdoZW4gaW4gbW9uaXRvciBtb2RlLiBBUCBtb2RlIGRvZXMgbm90IG5lZWQgdGhpcworCSAqIHNpbmNlIGl0IHJlY2VpdmVzIGFsbCBpbi1CU1MgZnJhbWVzIGFueXdheS4KKwkgKi8KIAlpZiAoKChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgJiYKIAkgICAgIChzYy0+cngucnhmaWx0ZXIgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKSB8fAotCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpIHsKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpKQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFJPTTsKLQkJLyogPz8/IFRvIHByZXZlbnQgZnJvbSBzZW5kaW5nIEFDSyAqLwotCQlyZmlsdCAmPSB+QVRIOUtfUlhfRklMVEVSX1VDQVNUOwotCX0KIAogCWlmIChzYy0+cngucnhmaWx0ZXIgJiBGSUZfQ09OVFJPTCkKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX0NPTlRST0w7CiAKLQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmCisJICAgICEoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfTVlCRUFDT047CisJZWxzZQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfQkVBQ09OOwogCi0JLyogSWYgaW4gSE9TVEFQIG1vZGUsIHdhbnQgdG8gZW5hYmxlIHJlY2VwdGlvbiBvZiBQU1BPTEwgZnJhbWVzCi0JICAgJiBiZWFjb24gZnJhbWVzICovCisJLyogSWYgaW4gSE9TVEFQIG1vZGUsIHdhbnQgdG8gZW5hYmxlIHJlY2VwdGlvbiBvZiBQU1BPTEwgZnJhbWVzICovCiAJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZmlsdCB8PSAoQVRIOUtfUlhfRklMVEVSX0JFQUNPTiB8IEFUSDlLX1JYX0ZJTFRFUl9QU1BPTEwpOworCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFNQT0xMOworCisJaWYgKHNjLT5zZWNfd2lwaHkpIHsKKwkJLyogVE9ETzogb25seSBuZWVkZWQgaWYgbW9yZSB0aGFuIG9uZSBCU1NJRCBpcyBpbiB1c2UgaW4KKwkJICogc3RhdGlvbi9hZGhvYyBtb2RlICovCisJCS8qIFRPRE86IGZvciBvbGRlciBjaGlwcywgbWF5IG5lZWQgdG8gYWRkIEFUSDlLX1JYX0ZJTFRFUl9QUk9NCisJCSAqLworCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfTUNBU1RfQkNBU1RfQUxMOworCX0KIAogCXJldHVybiByZmlsdDsKIApAQCAtNDI3LDcgKzQ1OSw2IEBACiAJYXRoOWtfaHdfc3RvcHBjdXJlY3YoYWgpOwogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCAwKTsKIAlzdG9wcGVkID0gYXRoOWtfaHdfc3RvcGRtYXJlY3YoYWgpOwotCW1kZWxheSgzKTsgLyogM21zIGlzIGxvbmcgZW5vdWdoIGZvciAxIGZyYW1lICovCiAJc2MtPnJ4LnJ4bGluayA9IE5VTEw7CiAKIAlyZXR1cm4gc3RvcHBlZDsKQEAgLTU1MCw3ICs1ODEsNyBAQAogCiAJCS8qIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBhbiBza2IgdG8gcmVxdWV1ZSBvbmNlIHdlIGFyZSBkb25lCiAJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mgc2tiICovCi0JCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSk7CisJCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0FUT01JQyk7CiAKIAkJLyogSWYgdGhlcmUgaXMgbm8gbWVtb3J5IHdlIGlnbm9yZSB0aGUgY3VycmVudCBSWCdkIGZyYW1lLAogCQkgKiB0ZWxsIGhhcmR3YXJlIGl0IGNhbiBnaXZlIHVzIGEgbmV3IGZyYW1lIHVzaW5nIHRoZSBvbGQKQEAgLTYwNCw3ICs2MzUsMjkgQEAKIAkJfQogCiAJCS8qIFNlbmQgdGhlIGZyYW1lIHRvIG1hYzgwMjExICovCi0JCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCAmcnhfc3RhdHVzKTsKKwkJaWYgKGhkci0+YWRkcjFbNV0gJiAweDAxKSB7CisJCQlpbnQgaTsKKwkJCS8qCisJCQkgKiBEZWxpdmVyIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWVzIHRvIGFsbCBzdWl0YWJsZQorCQkJICogdmlydHVhbCB3aXBoeXMuCisJCQkgKi8KKwkJCS8qIFRPRE86IGZpbHRlciBiYXNlZCBvbiBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCQkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCQkJc3RydWN0IHNrX2J1ZmYgKm5za2I7CisJCQkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisJCQkJbnNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKG5za2IpCisJCQkJCV9faWVlZTgwMjExX3J4KGFwaHktPmh3LCBuc2tiLAorCQkJCQkJICAgICAgICZyeF9zdGF0dXMpOworCQkJfQorCQkJX19pZWVlODAyMTFfcngoc2MtPmh3LCBza2IsICZyeF9zdGF0dXMpOworCQl9IGVsc2UgeworCQkJLyogRGVsaXZlciB1bmljYXN0IGZyYW1lcyBiYXNlZCBvbiByZWNlaXZlciBhZGRyZXNzICovCisJCQlfX2llZWU4MDIxMV9yeChhdGhfZ2V0X3ZpcnRfaHcoc2MsIGhkciksIHNrYiwKKwkJCQkgICAgICAgJnJ4X3N0YXR1cyk7CisJCX0KIAogCQkvKiBXZSB3aWxsIG5vdyBnaXZlIGhhcmR3YXJlIG91ciBzaGlueSBuZXcgYWxsb2NhdGVkIHNrYiAqLwogCQliZi0+YmZfbXBkdSA9IHJlcXVldWVfc2tiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWcuaAppbmRleCAxN2VkMTkwLi5kODZlOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWcuaApAQCAtNjcsNyArNjcsNyBAQAogI2RlZmluZSBBUl9ETUFTSVpFXzUxMkIgICAgICAweDAwMDAwMDA3CiAKICNkZWZpbmUgQVJfVFhDRkcgICAgICAgICAgICAgMHgwMDMwCi0jZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaX01BU0sgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfTUFTSyAgMHgwMDAwMDAwNwogI2RlZmluZSBBUl9UWENGR19ETUFTWl80QiAgICAwCiAjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaXzhCICAgIDEKICNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfMTZCICAgMgpAQCAtMTU4LDE0ICsxNTgsNiBAQAogI2RlZmluZSBBUl9DU1RfVElNRU9VVF9MSU1JVCAgICAgIDB4RkZGRjAwMDAKICNkZWZpbmUgQVJfQ1NUX1RJTUVPVVRfTElNSVRfUyAgICAxNgogCi0jZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTAwICAgICAgICAgICAgICAgICAgMHgwMTQKLQotI2RlZmluZSBBUl9TUkVWXzkxMDAoYWgpICgoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbikgPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApCi0jZGVmaW5lIEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoX2FoKSBcCi0JKEFSX1NSRVZfOTEwMCgoX2FoKSkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKF9haCkpCi0jZGVmaW5lIEFSX1NSRVZfNTQxNl9WMjJfT1JfTEFURVIoX2FoKSBcCi0JKEFSX1NSRVZfOTEwMCgoX2FoKSkgfHwgQVJfU1JFVl81NDE2XzIyX09SX0xBVEVSKF9haCkpCi0KICNkZWZpbmUgQVJfSVNSICAgICAgICAgICAgICAgMHgwMDgwCiAjZGVmaW5lIEFSX0lTUl9SWE9LICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVJfSVNSX1JYREVTQyAgICAgICAgMHgwMDAwMDAwMgpAQCAtNzM0LDYgKzcyNiw3IEBACiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8xMCAgICAgICAgICAgICAgIDAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIwICAgICAgICAgICAgICAgMQogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjIgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTAwICAgICAgICAgICAgICAgICAgMHgxNAogI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTE2MCAgICAgICAgCSAgICAgIDB4NDAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MTYwXzEwICAgIAkgICAgICAwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMSAgICAJICAgICAgMQpAQCAtNzQ2LDE0ICs3MzksMjMgQEAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMiAgICAgICAgICAgICAgMgogCi0jZGVmaW5lIEFSX1NSRVZfOTEwMF9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkpCisjZGVmaW5lIEFSX1NSRVZfNTQxNihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpKQogI2RlZmluZSBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSB8fCBcCi0JCSgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIwKSkKKwkoKChBUl9TUkVWXzU0MTYoX2FoKSkgJiYgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMCkpIHx8IFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxMDApKQogI2RlZmluZSBBUl9TUkVWXzU0MTZfMjJfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSB8fCBcCi0JCSgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyKSkKKwkoKChBUl9TUkVWXzU0MTYoX2FoKSkgJiYgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMikpIHx8IFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxMDApKQorCisjZGVmaW5lIEFSX1NSRVZfOTEwMChhaCkgXAorCSgoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbikgPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApCisjZGVmaW5lIEFSX1NSRVZfOTEwMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxMDApKQorCiAjZGVmaW5lIEFSX1NSRVZfOTE2MChfYWgpIFwKIAkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQogI2RlZmluZSBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoX2FoKSBcCkBAIC03NzgsMTQgKzc4MCwxNCBAQAogI2RlZmluZSBBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzExKF9haCkgXAotCShBUl9TUkVWXzkyODAoYWgpICYmIFwKKwkoQVJfU1JFVl85Mjg1KGFoKSAmJiBcCiAJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExKSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzExX09SX0xBVEVSKF9haCkgXAogCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCiAJIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gXAogCQkJICAgICAgIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTIoX2FoKSBcCi0JKEFSX1NSRVZfOTI4MChhaCkgJiYgXAorCShBUl9TUkVWXzkyODUoYWgpICYmIFwKIAkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODUpIHx8IFwKQEAgLTk3Nyw4ICs5NzksNiBAQAogI2RlZmluZSBBUl9SVENfUExMX0NMS1NFTCAgICAgICAweDAwMDAwMzAwCiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMX1MgICAgIDgKIAotCi0KICNkZWZpbmUgQVJfUlRDX1JFU0VUIFwKIAkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDQwKSA6IDB4NzA0MCkKICNkZWZpbmUgQVJfUlRDX1JFU0VUX0VOCQkoMHgwMDAwMDAwMSkKQEAgLTEwMTUsNiArMTAxNSwxMiBAQAogI2RlZmluZSBBUl9SVENfSU5UUl9NQVNLIFwKIAkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDU4KSA6IDB4NzA1OCkKIAorLyogUlRDX0RFUklWRURfKiAtIG9ubHkgZm9yIEFSOTEwMCAqLworCisjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMSyAgICAgICAgICAgKEFSX1JUQ19CQVNFICsgMHgwMDM4KQorI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EICAgIDB4MDAwMGZmZmUKKyNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRF9TICAxCisKICNkZWZpbmUJQVJfU0VRX01BU0sJMHg4MDYwCiAKICNkZWZpbmUgQVJfQU5fUkYyRzFfQ0gwICAgICAgICAgMHg3ODEwCkBAIC0xMzg1LDggKzEzOTEsOCBAQAogI2RlZmluZSBBUl9QSFlfQ09VTlRNQVggICAgICAgICgzIDw8IDIyKQogI2RlZmluZSBBUl9NSUJDTlRfSU5UUk1BU0sgICAgICgzIDw8IDIyKQogCi0jZGVmaW5lIEFSX1RTRl9USFJFU0hPTEQgICAgICAgMHg4MTNjCi0jZGVmaW5lIEFSX1RTRl9USFJFU0hPTERfVkFMICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUl9UU0ZPT1JfVEhSRVNIT0xEICAgICAgIDB4ODEzYworI2RlZmluZSBBUl9UU0ZPT1JfVEhSRVNIT0xEX1ZBTCAgIDB4MDAwMEZGRkYKIAogI2RlZmluZSBBUl9QSFlfRVJSX0VJRlNfTUFTSyAgIDgxNDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5jCmluZGV4IDhjMmI1NmEuLmI4ZjliNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMKQEAgLTEwNiwxOSArMTA2LDIwIEBACiAJfQogfTsKIAorc3RhdGljIGlubGluZSBib29sIGlzX3d3cl9za3UodTE2IHJlZ2QpCit7CisJcmV0dXJuICgocmVnZCAmIFdPUkxEX1NLVV9NQVNLKSA9PSBXT1JMRF9TS1VfUFJFRklYKSB8fAorCQkocmVnZCA9PSBXT1JMRCk7Cit9CisKIHN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgJiB+V09STERXSURFX1JPQU1JTkdfRkxBRzsKIH0KIAotdTE2IGF0aDlrX3JlZ2RfZ2V0X3JkKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXJldHVybiBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7Ci19Ci0KIGJvb2wgYXRoOWtfaXNfd29ybGRfcmVnZChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlyZXR1cm4gaXNXd3JTS1UoYWgpOworCXJldHVybiBpc193d3Jfc2t1KGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICphdGg5a19kZWZhdWx0X3dvcmxkX3JlZ2RvbWFpbih2b2lkKQpAQCAtMTU5LDEzICsxNjAsMTkgQEAKIH0KIAogLyoKLSAqIEVuYWJsZSBhZGhvYyBvbiA1IEdIeiBpZiBhbGxvd2VkIGJ5IDExZC4KLSAqIFJlbW92ZSBwYXNzaXZlIHNjYW4gaWYgY2hhbm5lbCBpcyBhbGxvd2VkIGJ5IDExZCwKLSAqIGV4Y2VwdCB3aGVuIG9uIHJhZGFyIGZyZXF1ZW5jaWVzLgorICogTi5COiBUaGVzZSBleGNlcHRpb24gcnVsZXMgZG8gbm90IGFwcGx5IHJhZGFyIGZyZXFzLgorICoKKyAqIC0gV2UgZW5hYmxlIGFkaG9jIChvciBiZWFjb25pbmcpIGlmIGFsbG93ZWQgYnkgMTFkCisgKiAtIFdlIGVuYWJsZSBhY3RpdmUgc2NhbiBpZiB0aGUgY2hhbm5lbCBpcyBhbGxvd2VkIGJ5IDExZAorICogLSBJZiBubyBjb3VudHJ5IElFIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgYSB3ZSBkZXRlcm1pbmUgd2UgaGF2ZQorICogICByZWNlaXZlZCBhIGJlYWNvbiBvbiBhIGNoYW5uZWwgd2UgY2FuIGVuYWJsZSBhY3RpdmUgc2NhbiBhbmQKKyAqICAgYWRob2MgKG9yIGJlYWNvbmluZykuCiAgKi8KLXN0YXRpYyB2b2lkIGF0aDlrX3JlZ19hcHBseV81Z2h6X2JlYWNvbmluZ19mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAotCQkJCQkgICAgIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyB2b2lkIGF0aDlrX3JlZ19hcHBseV9iZWFjb25pbmdfZmxhZ3MoCisJc3RydWN0IHdpcGh5ICp3aXBoeSwKKwllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CkBAIC0xNzMsMzQgKzE4MCw1NiBAQAogCXUzMiBiYW5kd2lkdGggPSAwOwogCWludCByOwogCi0JaWYgKHNldGJ5ICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKLQkJcmV0dXJuOwotCWlmICghd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdKQotCQlyZXR1cm47CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCi0Jc2JhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKLQkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOwotCQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLAotCQkJJmJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKLQkJaWYgKHIpCisJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQogCQkJY29udGludWU7Ci0JCS8qIElmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlIHdlIGVuYWJsZSBhZGhvYwotCQkgKiBpZiBpdCBhbGxvd3MgdXMgdG8gdXNlIGl0LiBOb3RlIHRoYXQgd2Ugd291bGQgaGF2ZSBkaXNhYmxlZAotCQkgKiBpdCBieSBhcHBseWluZyBvdXIgc3RhdGljIHdvcmxkIHJlZ2RvbWFpbiBieSBkZWZhdWx0IGR1cmluZwotCQkgKiBwcm9iZSAqLwotCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJiBOTDgwMjExX1JSRl9OT19JQlNTKSkKLQkJCWNoLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQkJaWYgKCFhdGg5a19pc19yYWRhcl9mcmVxKGNoLT5jZW50ZXJfZnJlcSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKLQkJCWNoLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCisJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKGF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSB8fAorCQkJICAgIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikpCisJCQkJY29udGludWU7CisKKwkJCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLAorCQkJCQkmYmFuZHdpZHRoLCAmcmVnX3J1bGUpOworCQkJCWlmIChyKQorCQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJCSAqIElmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCisJCQkJICogd2UgZW5hYmxlIGFkaG9jL2JlYWNvbmluZyBpZiBpdCBhbGxvd3MgdXMgdG8KKwkJCQkgKiB1c2UgaXQuIE5vdGUgdGhhdCB3ZSB3b3VsZCBoYXZlIGRpc2FibGVkIGl0CisJCQkJICogYnkgYXBwbHlpbmcgb3VyIHN0YXRpYyB3b3JsZCByZWdkb21haW4gYnkKKwkJCQkgKiBkZWZhdWx0IGR1cmluZyBpbml0LCBwcmlvciB0byBjYWxsaW5nIG91cgorCQkJCSAqIHJlZ3VsYXRvcnlfaGludCgpLgorCQkJCSAqLworCQkJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmCisJCQkJICAgIE5MODAyMTFfUlJGX05PX0lCU1MpKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJgorCQkJCSAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2gtPmJlYWNvbl9mb3VuZCkKKwkJCQkJY2gtPmZsYWdzICY9IH4oSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8CisJCQkJCSAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKTsKKwkJCX0KKwkJfQogCX0KKwogfQogCiAvKiBBbGxvd3MgYWN0aXZlIHNjYW4gc2NhbiBvbiBDaCAxMiBhbmQgMTMgKi8KLXN0YXRpYyB2b2lkIGF0aDlrX3JlZ19hcHBseV9hY3RpdmVfc2Nhbl9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAotCQkJCQkgICAgICBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpCitzdGF0aWMgdm9pZCBhdGg5a19yZWdfYXBwbHlfYWN0aXZlX3NjYW5fZmxhZ3MoCisJc3RydWN0IHdpcGh5ICp3aXBoeSwKKwllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKQEAgLTIwOCwxMiArMjM3LDEzIEBACiAJdTMyIGJhbmR3aWR0aCA9IDA7CiAJaW50IHI7CiAKLQkvKiBGb3JjZSBwYXNzaXZlIHNjYW4gb24gQ2hhbm5lbHMgMTItMTMgKi8KIAlzYmFuZCA9IHdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKIAotCS8qIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQgYWx3YXlzIGVuYWJsZSBhY3RpdmUgc2NhbgotCSAqIG9uIHRoZXNlIGNoYW5uZWxzICovCi0JaWYgKHNldGJ5ICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCS8qCisJICogSWYgbm8gY291bnRyeSBJRSBoYXMgYmVlbiByZWNlaXZlZCBhbHdheXMgZW5hYmxlIGFjdGl2ZSBzY2FuCisJICogb24gdGhlc2UgY2hhbm5lbHMuIFRoaXMgaXMgb25seSBkb25lIGZvciBzcGVjaWZpYyByZWd1bGF0b3J5IFNLVXMKKwkgKi8KKwlpZiAoaW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CiAJCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMV07IC8qIENIIDEyICovCiAJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCiAJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKQEAgLTIyMywxMCArMjUzLDEyIEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBJZiBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjaWV2ZWQgY2hlY2sgaXRzIHJ1bGUgZm9yIHRoaXMKKwkvKgorCSAqIElmIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNpZXZlZCBjaGVjayBpdHMgcnVsZSBmb3IgdGhpcwogCSAqIGNoYW5uZWwgZmlyc3QgYmVmb3JlIGVuYWJsaW5nIGFjdGl2ZSBzY2FuLiBUaGUgcGFzc2l2ZSBzY2FuCi0JICogd291bGQgaGF2ZSBiZWVuIGVuZm9yY2VkIGJ5IHRoZSBpbml0aWFsIHByb2JlIHByb2Nlc3Npbmcgb24KLQkgKiBvdXIgY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluLiAqLworCSAqIHdvdWxkIGhhdmUgYmVlbiBlbmZvcmNlZCBieSB0aGUgaW5pdGlhbCBwcm9jZXNzaW5nIG9mIG91cgorCSAqIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbi4KKwkgKi8KIAogCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMV07IC8qIENIIDEyICovCiAJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSwgJmJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKQEAgLTI3OCwxMCArMzEwLDEyIEBACiAJfQogfQogCi12b2lkIGF0aDlrX3JlZ19hcHBseV93b3JsZF9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpCit2b2lkIGF0aDlrX3JlZ19hcHBseV93b3JsZF9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAKIAlzd2l0Y2ggKGFoLT5yZWd1bGF0b3J5LnJlZ3BhaXItPnJlZ0RtbkVudW0pIHsKQEAgLTI4OSwxMSArMzIzLDExIEBACiAJY2FzZSAweDYzOgogCWNhc2UgMHg2NjoKIAljYXNlIDB4Njc6Ci0JCWF0aDlrX3JlZ19hcHBseV81Z2h6X2JlYWNvbmluZ19mbGFncyh3aXBoeSwgc2V0YnkpOworCQlhdGg5a19yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOwogCQlicmVhazsKIAljYXNlIDB4Njg6Ci0JCWF0aDlrX3JlZ19hcHBseV81Z2h6X2JlYWNvbmluZ19mbGFncyh3aXBoeSwgc2V0YnkpOwotCQlhdGg5a19yZWdfYXBwbHlfYWN0aXZlX3NjYW5fZmxhZ3Mod2lwaHksIHNldGJ5KTsKKwkJYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncyh3aXBoeSwgaW5pdGlhdG9yKTsKKwkJYXRoOWtfcmVnX2FwcGx5X2FjdGl2ZV9zY2FuX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuOwpAQCAtMzAyLDE4ICszMzYsMTggQEAKIGludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCS8qIFdlIGFsd2F5cyBhcHBseSB0aGlzICovCiAJYXRoOWtfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKHdpcGh5KTsKIAogCXN3aXRjaCAocmVxdWVzdC0+aW5pdGlhdG9yKSB7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0RSSVZFUjoKLQljYXNlIFJFR0RPTV9TRVRfQllfSU5JVDoKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09SRToKLQljYXNlIFJFR0RPTV9TRVRfQllfVVNFUjoKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI6CisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRToKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSOgogCQlicmVhazsKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRToKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOgogCQlpZiAoYXRoOWtfaXNfd29ybGRfcmVnZChzYy0+c2NfYWgpKQogCQkJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKHdpcGh5LCByZXF1ZXN0LT5pbml0aWF0b3IpOwogCQlicmVhazsKQEAgLTM3MSwxMSArNDA1LDggQEAKIH0KIAogLyogUmV0dXJucyB0aGUgbWFwIG9mIHRoZSBFRVBST00gc2V0IFJEIHRvIGEgY291bnRyeSBjb2RlICovCi1zdGF0aWMgdTE2IGF0aDlrX3JlZ2RfZ2V0X2RlZmF1bHRfY291bnRyeShzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHUxNiByZCkKIHsKLQl1MTYgcmQ7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKIAlpZiAocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSB7CiAJCXN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCAqY291bnRyeSA9IE5VTEw7CiAJCXUxNiBjYyA9IHJkICYgfkNPVU5UUllfRVJEX0ZMQUc7CkBAIC00MDUsNyArNDM2LDcgQEAKIGludCBhdGg5a19yZWdkX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKLQlpbnQgcmVnZG1uOworCXUxNiByZWdkbW47CiAKIAlpZiAoIWF0aDlrX3JlZ2RfaXNfZWVwcm9tX3ZhbGlkKGFoKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLApAQCAtNDEzLDE0ICs0NDQsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KGFoKTsKKwlyZWdkbW4gPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHJlZ2Rtbik7CiAKIAlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCAmJgotCSAgICBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCkgPT0gQ1RSWV9ERUZBVUxUKQorCSAgICByZWdkbW4gPT0gQ1RSWV9ERUZBVUxUKQogCQlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX1VOSVRFRF9TVEFURVM7CiAKIAlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCkgewotCQlyZWdkbW4gPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CiAJCWNvdW50cnkgPSBOVUxMOwogCX0gZWxzZSB7CiAJCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeShhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUpOwpAQCAtNDMzLDcgKzQ2NCw2IEBACiAJCQlyZWdkbW4gPSBjb3VudHJ5LT5yZWdEbW5FbnVtOwogCX0KIAotCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmRfaW51c2UgPSByZWdkbW47CiAJYWgtPnJlZ3VsYXRvcnkucmVncGFpciA9IGF0aDlrX2dldF9yZWdwYWlyKHJlZ2Rtbik7CiAKIAlpZiAoIWFoLT5yZWd1bGF0b3J5LnJlZ3BhaXIpIHsKQEAgLTQ2Nyw3ICs0OTcsOCBAQAogCXUzMiBjdGwgPSBOT19DVEw7CiAKIAlpZiAoIWFoLT5yZWd1bGF0b3J5LnJlZ3BhaXIgfHwKLQkgICAgKGFoLT5yZWd1bGF0b3J5LmNvdW50cnlfY29kZSA9PSBDVFJZX0RFRkFVTFQgJiYgaXNXd3JTS1UoYWgpKSkgeworCSAgICAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCAmJgorCSAgICAgaXNfd3dyX3NrdShhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCkpKSkgewogCQlpZiAoSVNfQ0hBTl9CKGNoYW4pKQogCQkJY3RsID0gU0RfTk9fQ1RMIHwgQ1RMXzExQjsKIAkJZWxzZSBpZiAoSVNfQ0hBTl9HKGNoYW4pKQpAQCAtNDgwLDcgKzUxMSw3IEBACiAJaWYgKElTX0NIQU5fQihjaGFuKSkKIAkJY3RsID0gYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnXzJnaHpfY3RsIHwgQ1RMXzExQjsKIAllbHNlIGlmIChJU19DSEFOX0coY2hhbikpCi0JCWN0bCA9IGFoLT5yZWd1bGF0b3J5LnJlZ3BhaXItPnJlZ181Z2h6X2N0bCB8IENUTF8xMUc7CisJCWN0bCA9IGFoLT5yZWd1bGF0b3J5LnJlZ3BhaXItPnJlZ18yZ2h6X2N0bCB8IENUTF8xMUc7CiAJZWxzZQogCQljdGwgPSBhaC0+cmVndWxhdG9yeS5yZWdwYWlyLT5yZWdfNWdoel9jdGwgfCBDVExfMTFBOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmgKaW5kZXggMzk0MjBkZS4uOGY4ODVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuaApAQCAtMjAsMTEgKzIwLDYgQEAKICNkZWZpbmUgQ09VTlRSWV9FUkRfRkxBRyAgICAgICAgMHg4MDAwCiAjZGVmaW5lIFdPUkxEV0lERV9ST0FNSU5HX0ZMQUcgIDB4NDAwMAogCi0jZGVmaW5lIGlzV3dyU0tVKF9haCkgXAotCSgoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKChfYWgpKSAmIFdPUkxEX1NLVV9NQVNLKSA9PSBcCi0JCVdPUkxEX1NLVV9QUkVGSVgpIHx8IFwKLQkJKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKF9haCkgPT0gV09STEQpKQotCiAjZGVmaW5lIE1VTFRJX0RPTUFJTl9NQVNLIDB4RkYwMAogCiAjZGVmaW5lIFdPUkxEX1NLVV9NQVNLICAgICAgICAgIDB4MDBGMApAQCAtNTIsNyArNDcsNiBAQAogCXUzMiB0cF9zY2FsZTsKIAl1MTYgY3VycmVudF9yZDsKIAl1MTYgY3VycmVudF9yZF9leHQ7Ci0JdTE2IGN1cnJlbnRfcmRfaW51c2U7CiAJaW50MTZfdCBwb3dlcl9saW1pdDsKIAlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7CiB9OwpAQCAtMjM5LDE3ICsyMzMsMTUgQEAKIAlDVFJZX0JFTEdJVU0yID0gNTAwMgogfTsKIAotdTE2IGF0aDlrX3JlZ2RfZ2V0X3JkKHN0cnVjdCBhdGhfaHcgKmFoKTsKIGJvb2wgYXRoOWtfaXNfd29ybGRfcmVnZChzdHJ1Y3QgYXRoX2h3ICphaCk7CiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfd29ybGRfcmVnZG9tYWluKHN0cnVjdCBhdGhfaHcgKmFoKTsKIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICphdGg5a19kZWZhdWx0X3dvcmxkX3JlZ2RvbWFpbih2b2lkKTsKLXZvaWQgYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSk7Cit2b2lkIGF0aDlrX3JlZ19hcHBseV93b3JsZF9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpOwogdm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSk7CiBpbnQgYXRoOWtfcmVnZF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIGJvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9odyAqYWgpOwogdTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwogaW50IGF0aDlrX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKLXZvaWQgYXRoOWtfcmVnZF9nZXRfY3VycmVudF9jb3VudHJ5KHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY291bnRyeV9lbnRyeSAqY3RyeSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvdmlydHVhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvdmlydHVhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjQyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMKQEAgLTAsMCArMSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXRoOWsuaCIKKworc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgeworCWludCBjb3VudDsKKwl1OCAqYWRkcjsKK307CisKK3N0YXRpYyB2b2lkIGF0aDlrX3ZpZl9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgKml0ZXJfZGF0YSA9IGRhdGE7CisJdTggKm5idWY7CisKKwluYnVmID0ga3JlYWxsb2MoaXRlcl9kYXRhLT5hZGRyLCAoaXRlcl9kYXRhLT5jb3VudCArIDEpICogRVRIX0FMRU4sCisJCQlHRlBfQVRPTUlDKTsKKwlpZiAobmJ1ZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwltZW1jcHkobmJ1ZiArIGl0ZXJfZGF0YS0+Y291bnQgKiBFVEhfQUxFTiwgbWFjLCBFVEhfQUxFTik7CisJaXRlcl9kYXRhLT5hZGRyID0gbmJ1ZjsKKwlpdGVyX2RhdGEtPmNvdW50Kys7Cit9CisKK3ZvaWQgYXRoOWtfc2V0X2Jzc2lkX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgaXRlcl9kYXRhOworCWludCBpLCBqOworCXU4IG1hc2tbRVRIX0FMRU5dOworCisJLyoKKwkgKiBBZGQgcHJpbWFyeSBNQUMgYWRkcmVzcyBldmVuIGlmIGl0IGlzIG5vdCBpbiBhY3RpdmUgdXNlIHNpbmNlIGl0CisJICogd2lsbCBiZSBjb25maWd1cmVkIHRvIHRoZSBoYXJkd2FyZSBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgYW5kIHRoZQorCSAqIEJTU0lEIG1hc2sgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgYW5vdGhlciBhZGRyZXNzIGlzIGFjdGl2ZS4KKwkgKi8KKwlpdGVyX2RhdGEuYWRkciA9IGttYWxsb2MoRVRIX0FMRU4sIEdGUF9BVE9NSUMpOworCWlmIChpdGVyX2RhdGEuYWRkcikgeworCQltZW1jcHkoaXRlcl9kYXRhLmFkZHIsIHNjLT5zY19haC0+bWFjYWRkciwgRVRIX0FMRU4pOworCQlpdGVyX2RhdGEuY291bnQgPSAxOworCX0gZWxzZQorCQlpdGVyX2RhdGEuY291bnQgPSAwOworCisJLyogR2V0IGxpc3Qgb2YgYWxsIGFjdGl2ZSBNQUMgYWRkcmVzc2VzICovCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKHNjLT5odywgYXRoOWtfdmlmX2l0ZXIsCisJCQkJCQkgICAmaXRlcl9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYygKKwkJCXNjLT5zZWNfd2lwaHlbaV0tPmh3LCBhdGg5a192aWZfaXRlciwgJml0ZXJfZGF0YSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwkvKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIG1hc2sgdG8gY292ZXIgYWxsIGFjdGl2ZSBhZGRyZXNzZXMgKi8KKwltZW1zZXQobWFzaywgMCwgRVRIX0FMRU4pOworCWZvciAoaSA9IDA7IGkgPCBpdGVyX2RhdGEuY291bnQ7IGkrKykgeworCQl1OCAqYTEgPSBpdGVyX2RhdGEuYWRkciArIGkgKiBFVEhfQUxFTjsKKwkJZm9yIChqID0gaSArIDE7IGogPCBpdGVyX2RhdGEuY291bnQ7IGorKykgeworCQkJdTggKmEyID0gaXRlcl9kYXRhLmFkZHIgKyBqICogRVRIX0FMRU47CisJCQltYXNrWzBdIHw9IGExWzBdIF4gYTJbMF07CisJCQltYXNrWzFdIHw9IGExWzFdIF4gYTJbMV07CisJCQltYXNrWzJdIHw9IGExWzJdIF4gYTJbMl07CisJCQltYXNrWzNdIHw9IGExWzNdIF4gYTJbM107CisJCQltYXNrWzRdIHw9IGExWzRdIF4gYTJbNF07CisJCQltYXNrWzVdIHw9IGExWzVdIF4gYTJbNV07CisJCX0KKwl9CisKKwlrZnJlZShpdGVyX2RhdGEuYWRkcik7CisKKwkvKiBJbnZlcnQgdGhlIG1hc2sgYW5kIGNvbmZpZ3VyZSBoYXJkd2FyZSAqLworCXNjLT5ic3NpZG1hc2tbMF0gPSB+bWFza1swXTsKKwlzYy0+YnNzaWRtYXNrWzFdID0gfm1hc2tbMV07CisJc2MtPmJzc2lkbWFza1syXSA9IH5tYXNrWzJdOworCXNjLT5ic3NpZG1hc2tbM10gPSB+bWFza1szXTsKKwlzYy0+YnNzaWRtYXNrWzRdID0gfm1hc2tbNF07CisJc2MtPmJzc2lkbWFza1s1XSA9IH5tYXNrWzVdOworCisJYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHNjKTsKK30KKworaW50IGF0aDlrX3dpcGh5X2FkZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaSwgZXJyb3I7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwl1OCBhZGRyW0VUSF9BTEVOXTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5KSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IHNjLT5udW1fc2VjX3dpcGh5KSB7CisJCS8qIE5vIGVtcHR5IHNsb3QgYXZhaWxhYmxlOyBpbmNyZWFzZSBhcnJheSBsZW5ndGggKi8KKwkJc3RydWN0IGF0aF93aXBoeSAqKm47CisJCW4gPSBrcmVhbGxvYyhzYy0+c2VjX3dpcGh5LAorCQkJICAgICAoc2MtPm51bV9zZWNfd2lwaHkgKyAxKSAqCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5ICopLAorCQkJICAgICBHRlBfQVRPTUlDKTsKKwkJaWYgKG4gPT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW5baV0gPSBOVUxMOworCQlzYy0+c2VjX3dpcGh5ID0gbjsKKwkJc2MtPm51bV9zZWNfd2lwaHkrKzsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgc2MtPmRldik7CisKKwlhcGh5ID0gaHctPnByaXY7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5zZWNfd2lwaHlbaV0gPSBhcGh5OworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwltZW1jcHkoYWRkciwgc2MtPnNjX2FoLT5tYWNhZGRyLCBFVEhfQUxFTik7CisJYWRkclswXSB8PSAweDAyOyAvKiBMb2NhbGx5IG1hbmFnZWQgYWRkcmVzcyAqLworCS8qCisJICogWE9SIHZpcnR1YWwgd2lwaHkgaW5kZXggaW50byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyB0byBnZW5lcmF0ZQorCSAqIGEgZGlmZmVyZW50IE1BQyBhZGRyZXNzIGZvciBlYWNoIHZpcnR1YWwgd2lwaHkuCisJICovCisJYWRkcls1XSBePSBpICYgMHhmZjsKKwlhZGRyWzRdIF49IChpICYgMHhmZjAwKSA+PiA4OworCWFkZHJbM10gXj0gKGkgJiAweGZmMDAwMCkgPj4gMTY7CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgYWRkcik7CisKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CisKKwllcnJvciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CisKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkvKiBNYWtlIHN1cmUgd2lwaHkgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQgKGlmIGVuYWJsZWQpICovCisJCWF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc2MsIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBhdGg5a193aXBoeV9kZWwoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWludCBpOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKGFwaHkgPT0gc2MtPnNlY193aXBoeVtpXSkgeworCQkJc2MtPnNlY193aXBoeVtpXSA9IE5VTEw7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXBoeS0+aHcpOworCQkJaWVlZTgwMjExX2ZyZWVfaHcoYXBoeS0+aHcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBhdGg5a19zZW5kX251bGxmdW5jKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgICAgIGludCBwcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJX19sZTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKworCXNrYiA9IGRldl9hbGxvY19za2IoMjQpOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KGhkciwgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwcykKKwkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShoZHItPmFkZHIxLCBic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIyLCBhcGh5LT5ody0+d2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIzLCBic3NpZCwgRVRIX0FMRU4pOworCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisJaW5mby0+ZmxhZ3MgPSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CisJaW5mby0+Y29udHJvbC52aWYgPSB2aWY7CisJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSAwOworCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPSA0OworCWluZm8tPmNvbnRyb2wucmF0ZXNbMV0uaWR4ID0gLTE7CisKKwltZW1zZXQoJnR4Y3RsLCAwLCBzaXplb2Yoc3RydWN0IGF0aF90eF9jb250cm9sKSk7CisJdHhjdGwudHhxID0gJnNjLT50eC50eHFbc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPXV07CisJdHhjdGwuZnJhbWVfdHlwZSA9IHBzID8gQVRIOUtfSU5UX1BBVVNFIDogQVRIOUtfSU5UX1VOUEFVU0U7CisKKwlpZiAoYXRoX3R4X3N0YXJ0KGFwaHktPmh3LCBza2IsICZ0eGN0bCkgIT0gMCkKKwkJZ290byBleGl0OworCisJcmV0dXJuIDA7CitleGl0OgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgYm9vbCBfX2F0aDlrX3dpcGh5X3BhdXNpbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9QQVVTSU5HKQorCQlyZXR1cm4gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhdGg5a193aXBoeV9wYXVzaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWJvb2wgcmV0OworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYyk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBfX2F0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTikKKwkJcmV0dXJuIHRydWU7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBhdGg5a193aXBoeV9zY2FubmluZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlib29sIHJldDsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3NjYW5uaW5nKHNjKTsKKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19hdGg5a193aXBoeV91bnBhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOworCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fYXRoOWtfd2lwaHlfdW5wYXVzZV9jaChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWlmIChhcGh5ID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoYXBoeS0+Y2hhbl9pZHggIT0gYXBoeS0+c2MtPmNoYW5faWR4KQorCQlyZXR1cm47IC8qIHdpcGh5IG5vdCBvbiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCAqLworCV9fYXRoOWtfd2lwaHlfdW5wYXVzZShhcGh5KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfd2lwaHlfdW5wYXVzZV9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCV9fYXRoOWtfd2lwaHlfdW5wYXVzZV9jaChzYy0+cHJpX3dpcGh5KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykKKwkJX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHNjLT5zZWNfd2lwaHlbaV0pOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLCBjaGFuX3dvcmspOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+bmV4dF93aXBoeTsKKworCWlmIChhcGh5ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogQWxsIHBlbmRpbmcgaW50ZXJmYWNlcyBwYXVzZWQ7IHJlYWR5IHRvIGNoYW5nZQorCSAqIGNoYW5uZWxzLgorCSAqLworCisJLyogQ2hhbmdlIGNoYW5uZWxzICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbGx5ICovCisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBhcGh5LT5odywKKwkJCSAgICAgICZzYy0+c2NfYWgtPmNoYW5uZWxzW3NjLT5jaGFuX2lkeF0pOworCWF0aF91cGRhdGVfY2hhaW5tYXNrKHNjLCBzYy0+Y2hhbl9pc19odCk7CisJaWYgKGF0aF9zZXRfY2hhbm5lbChzYywgYXBoeS0+aHcsCisJCQkgICAgJnNjLT5zY19haC0+Y2hhbm5lbHNbc2MtPmNoYW5faWR4XSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogRmFpbGVkIHRvIHNldCBjaGFubmVsIGZvciBuZXcgIgorCQkgICAgICAgInZpcnR1YWwgd2lwaHlcbiIpOworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJYXRoOWtfd2lwaHlfdW5wYXVzZV9jaGFubmVsKHNjKTsKK30KKworLyoKKyAqIGF0aDlrIHZlcnNpb24gb2YgaWVlZTgwMjExX3R4X3N0YXR1cygpIGZvciBUWCBmcmFtZXMgdGhhdCBhcmUgZ2VuZXJhdGVkCisgKiBpbnRlcm5hbGx5IGluIHRoZSBkcml2ZXIuCisgKi8KK3ZvaWQgYXRoOWtfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCisJaWYgKHR4X2luZm9fcHJpdiAmJiB0eF9pbmZvX3ByaXYtPmZyYW1lX3R5cGUgPT0gQVRIOUtfSU5UX1BBVVNFICYmCisJICAgIGFwaHktPnN0YXRlID09IEFUSF9XSVBIWV9QQVVTSU5HKSB7CisJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogbm8gQUNLIGZvciBwYXVzZSAiCisJCQkgICAgICAgImZyYW1lXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJLyoKKwkJCSAqIFRoZSBBUCBkaWQgbm90IHJlcGx5OyBpZ25vcmUgdGhpcyB0byBhbGxvdyB1cyB0bworCQkJICogY29udGludWUuCisJCQkgKi8KKwkJfQorCQlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJCWlmICghYXRoOWtfd2lwaHlfcGF1c2luZyhhcGh5LT5zYykpIHsKKwkJCS8qCisJCQkgKiBEcm9wIGZyb20gdGFza2xldCB0byB3b3JrIHRvIGFsbG93IG11dGV4IGZvciBjaGFubmVsCisJCQkgKiBjaGFuZ2UuCisJCQkgKi8KKwkJCXF1ZXVlX3dvcmsoYXBoeS0+c2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCQl9CisJfQorCisJa2ZyZWUodHhfaW5mb19wcml2KTsKKwl0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdID0gTlVMTDsKKworCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfbWFya19wYXVzZWQoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwlpZiAoIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpCisJCXF1ZXVlX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+Y2hhbl93b3JrKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfcGF1c2VfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBkYXRhOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKSB2aWYtPmRydl9wcml2OworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWlmICghdmlmLT5ic3NfY29uZi5hc3NvYykgeworCQkJYXRoOWtfbWFya19wYXVzZWQoYXBoeSk7CisJCQlicmVhazsKKwkJfQorCQkvKiBUT0RPOiBjb3VsZCBhdm9pZCB0aGlzIGlmIGFscmVhZHkgaW4gUFMgbW9kZSAqLworCQlpZiAoYXRoOWtfc2VuZF9udWxsZnVuYyhhcGh5LCB2aWYsIGF2cC0+YnNzaWQsIDEpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZW5kIFBTIG51bGxmdW5jXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWF0aDlrX21hcmtfcGF1c2VkKGFwaHkpOworCQl9CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCS8qIEJlYWNvbiB0cmFuc21pc3Npb24gaXMgcGF1c2VkIGJ5IGFwaHktPnN0YXRlIGNoYW5nZSAqLworCQlhdGg5a19tYXJrX3BhdXNlZChhcGh5KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyBpbnQgX19hdGg5a193aXBoeV9wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhhcGh5LT5odyk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0lORzsKKwkvKgorCSAqIFRPRE86IGhhbmRsZSBQQVVTSU5HLT5QQVVTRUQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZQorCSAqIGFjdGl2ZSB2aWZzIChub3cgd2UgZG8gaXQgb24gdGhlIGZpcnN0IHZpZiBnZXR0aW5nIHJlYWR5OyBzaG91bGQgYmUKKwkgKiBvbiB0aGUgbGFzdCkKKwkgKi8KKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoYXBoeS0+aHcsIGF0aDlrX3BhdXNlX2l0ZXIsCisJCQkJCQkgICBhcGh5KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaW50IHJldDsKKwlzcGluX2xvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3BhdXNlKGFwaHkpOworCXNwaW5fdW5sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfdW5wYXVzZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGRhdGE7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopIHZpZi0+ZHJ2X3ByaXY7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKCF2aWYtPmJzc19jb25mLmFzc29jKQorCQkJYnJlYWs7CisJCWF0aDlrX3NlbmRfbnVsbGZ1bmMoYXBoeSwgdmlmLCBhdnAtPmJzc2lkLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJLyogQmVhY29uIHRyYW5zbWlzc2lvbiBpcyByZS1lbmFibGVkIGJ5IGFwaHktPnN0YXRlIGNoYW5nZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoYXBoeS0+aHcsCisJCQkJCQkgICBhdGg5a191bnBhdXNlX2l0ZXIsIGFwaHkpOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoYXBoeS0+aHcpOworCXJldHVybiAwOworfQorCitpbnQgYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWludCByZXQ7CisJc3Bpbl9sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0ID0gX19hdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworCXNwaW5fdW5sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV9tYXJrX2FsbF9wYXVzZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJc2MtPnByaV93aXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpCisJCQlzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fYXRoOWtfd2lwaHlfcGF1c2VfYWxsKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQlfX2F0aDlrX3dpcGh5X3BhdXNlKHNjLT5wcmlfd2lwaHkpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQkJX19hdGg5a193aXBoeV9wYXVzZShzYy0+c2VjX3dpcGh5W2ldKTsKKwl9Cit9CisKK2ludCBhdGg5a193aXBoeV9zZWxlY3Qoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWJvb2wgbm93OworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWYgKF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc2MpKSB7CisJCS8qCisJCSAqIEZvciBub3csIHdlIGFyZSB1c2luZyBtYWM4MDIxMSBzdyBzY2FuIGFuZCBpdCBleHBlY3RzIHRvCisJCSAqIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgY2hhbm5lbCBjaGFuZ2VzLCBzbyBhdm9pZCB3aXBoeQorCQkgKiBzY2hlZHVsaW5nIGR1cmluZyBhIHNjYW4uIFRoaXMgY291bGQgYmUgb3B0aW1pemVkIGlmIHRoZQorCQkgKiBzY2FubmluZyBjb250cm9sIHdlcmUgbW92ZWQgaW50byB0aGUgZHJpdmVyLgorCQkgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpIHsKKwkJaWYgKHNjLT53aXBoeV9zZWxlY3RfZmFpbHVyZXMgPT0gMCkKKwkJCXNjLT53aXBoeV9zZWxlY3RfZmlyc3RfZmFpbCA9IGppZmZpZXM7CisJCXNjLT53aXBoeV9zZWxlY3RfZmFpbHVyZXMrKzsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc2MtPndpcGh5X3NlbGVjdF9maXJzdF9mYWlsICsgSFogLyAyKSkKKwkJeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBQcmV2aW91cyB3aXBoeSBzZWxlY3QgdGltZWQgIgorCQkJICAgICAgICJvdXQ7IGRpc2FibGUvZW5hYmxlIGh3IHRvIHJlY292ZXJcbiIpOworCQkJX19hdGg5a193aXBoeV9tYXJrX2FsbF9wYXVzZWQoc2MpOworCQkJLyoKKwkJCSAqIFRPRE86IHRoaXMgd29ya2Fyb3VuZCB0byBmaXggaGFyZHdhcmUgaXMgdW5saWtlbHkgdG8KKwkJCSAqIGJlIHNwZWNpZmljIHRvIHZpcnR1YWwgd2lwaHkgY2hhbmdlcy4gSXQgY2FuIGhhcHBlbgorCQkJICogb24gbm9ybWFsIGNoYW5uZWwgY2hhbmdlLCB0b28sIGFuZCBhcyBzdWNoLCB0aGlzCisJCQkgKiBzaG91bGQgcmVhbGx5IGJlIG1hZGUgbW9yZSBnZW5lcmljLiBGb3IgZXhhbXBsZSwKKwkJCSAqIHRyaWNrZXIgcmFkaW8gZGlzYWJsZS9lbmFibGUgb24gR1RUIGludGVycnVwdCBidXJzdAorCQkJICogKHNheSwgMTAgR1RUIGludGVycnVwdHMgcmVjZWl2ZWQgd2l0aG91dCBhbnkgVFgKKwkJCSAqIGZyYW1lIGJlaW5nIGNvbXBsZXRlZCkKKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJCWF0aF9yYWRpb19kaXNhYmxlKHNjKTsKKwkJCWF0aF9yYWRpb19lbmFibGUoc2MpOworCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwkJfQorCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwl9CisJc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcyA9IDA7CisKKwkvKiBTdG9yZSB0aGUgbmV3IGNoYW5uZWwgKi8KKwlzYy0+Y2hhbl9pZHggPSBhcGh5LT5jaGFuX2lkeDsKKwlzYy0+Y2hhbl9pc19odCA9IGFwaHktPmNoYW5faXNfaHQ7CisJc2MtPm5leHRfd2lwaHkgPSBhcGh5OworCisJX19hdGg5a193aXBoeV9wYXVzZV9hbGwoc2MpOworCW5vdyA9ICFfX2F0aDlrX3dpcGh5X3BhdXNpbmcoYXBoeS0+c2MpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwlpZiAobm93KSB7CisJCS8qIFJlYWR5IHRvIHJlcXVlc3QgY2hhbm5lbCBjaGFuZ2UgaW1tZWRpYXRlbHkgKi8KKwkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCX0KKworCS8qCisJICogd2lwaHlzIHdpbGwgYmUgdW5wYXVzZWQgaW4gYXRoOWtfdHhfc3RhdHVzKCkgb25jZSBjaGFubmVsIGhhcyBiZWVuCisJICogY2hhbmdlZCBpZiBhbnkgd2lwaHkgbmVlZHMgdGltZSB0byBiZWNvbWUgcGF1c2VkLgorCSAqLworCisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgYXRoOWtfd2lwaHlfc3RhcnRlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybiB0cnVlOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2NoYW4oc3RydWN0IGF0aF93aXBoeSAqYXBoeSwKKwkJCQkgICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCkKK3sKKwlpZiAoc2VsZWN0ZWQtPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKSB7CisJCWlmIChhcGh5ID09IHNlbGVjdGVkKQorCQkJcmV0dXJuOworCQkvKgorCQkgKiBQYXVzZSBhbGwgb3RoZXIgd2lwaHlzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHNjYW4gZXZlbiBpZgorCQkgKiB0aGV5IGFyZSBvbiB0aGUgY3VycmVudCBjaGFubmVsIG5vdy4KKwkJICovCisJfSBlbHNlIGlmIChhcGh5LT5jaGFuX2lkeCA9PSBzZWxlY3RlZC0+Y2hhbl9pZHgpCisJCXJldHVybjsKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGFwaHktPmh3KTsKK30KKwordm9pZCBhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgc3RydWN0IGF0aF93aXBoeSAqc2VsZWN0ZWQpCit7CisJaW50IGk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCWF0aDlrX3dpcGh5X3BhdXNlX2NoYW4oc2MtPnByaV93aXBoeSwgc2VsZWN0ZWQpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQkJYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzYy0+c2VjX3dpcGh5W2ldLCBzZWxlY3RlZCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9zb2Z0YywKKwkJCQkJICAgIHdpcGh5X3dvcmsud29yayk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IE5VTEw7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9PSAwKSB7CisJCS8qIHdpcGh5IHNjaGVkdWxlciBpcyBkaXNhYmxlZCAqLworCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm47CisJfQorCit0cnlfYWdhaW46CisJc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCsrOworCXdoaWxlIChzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4IDw9IHNjLT5udW1fc2VjX3dpcGh5KSB7CisJCWFwaHkgPSBzYy0+c2VjX3dpcGh5W3NjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggLSAxXTsKKwkJaWYgKGFwaHkgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKQorCQkJYnJlYWs7CisKKwkJc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCsrOworCQlhcGh5ID0gTlVMTDsKKwl9CisJaWYgKGFwaHkgPT0gTlVMTCkgeworCQlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4ID0gMDsKKwkJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9JTkFDVElWRSkgeworCQkJaWYgKGZpcnN0KSB7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJCX0KKwkJCS8qIE5vIHdpcGh5IGlzIHJlYWR5IHRvIGJlIHNjaGVkdWxlZCAqLworCQl9IGVsc2UKKwkJCWFwaHkgPSBzYy0+cHJpX3dpcGh5OworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwlpZiAoYXBoeSAmJgorCSAgICBhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfQUNUSVZFICYmIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9TQ0FOICYmCisJICAgIGF0aDlrX3dpcGh5X3NlbGVjdChhcGh5KSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6IEZhaWxlZCB0byBzY2hlZHVsZSB2aXJ0dWFsIHdpcGh5ICIKKwkJICAgICAgICJjaGFuZ2VcbiIpOworCX0KKworCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT53aXBoeV93b3JrLAorCQkJICAgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworfQorCit2b2lkIGF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBtc2VjX2ludCkKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMobXNlY19pbnQpOworCWlmIChzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCkKKwkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPndpcGh5X3dvcmssCisJCQkJICAgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jCmluZGV4IDNmNzBiMWUuLmUzZjM3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMKQEAgLTU1LDkgKzU1LDkgQEAKIAogI2RlZmluZSBJU19IVF9SQVRFKF9yYXRlKSAgICAgKChfcmF0ZSkgJiAweDgwKQogCi1zdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkgICAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9odF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQpOwogc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCiAJCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAkJQVNTRVJUKCFiZl9pc3JldHJpZWQoYmYpKTsKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7Ci0JCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhxLCB0aWQsICZiZl9oZWFkKTsKKwkJYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHNjLCB0eHEsIHRpZCwgJmJmX2hlYWQpOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKQEAgLTc3MiwyNCArNzcyLDYgQEAKIC8qIFF1ZXVlIE1hbmFnZW1lbnQgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHUzMiBhdGhfdHhxX2RlcHRoKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSkKLXsKLQlyZXR1cm4gc2MtPnR4LnR4cVtxbnVtXS5heHFfZGVwdGg7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9nZXRfYmVhY29uY29uZmlnKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQsCi0JCQkJIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQotCS8qIGZpbGwgaW4gYmVhY29uIGNvbmZpZyBkYXRhICovCi0KLQljb25mLT5iZWFjb25faW50ZXJ2YWwgPSBody0+Y29uZi5iZWFjb25faW50OwotCWNvbmYtPmxpc3Rlbl9pbnRlcnZhbCA9IDEwMDsKLQljb25mLT5kdGltX2NvdW50ID0gMTsKLQljb25mLT5ibWlzc190aW1lb3V0ID0gQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjb25mLT5saXN0ZW5faW50ZXJ2YWw7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0aF90eHFfZHJhaW5fcGVuZGluZ19idWZmZXJzKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CkBAIC05MDksNyArODkxLDcgQEAKIAlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJaWYgKHR4cS0+YXhxX2RlcHRoID49IChBVEhfVFhCVUYgLSAyMCkpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULAogCQkJIlRYIHF1ZXVlOiAlZCBpcyBmdWxsLCBkZXB0aDogJWRcbiIsCiAJCQlxbnVtLCB0eHEtPmF4cV9kZXB0aCk7CiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwpAQCAtOTY0LDcgKzk0Niw2IEBACiB7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAJaW50IHFudW0gPSBzYy0+YmVhY29uLmNhYnEtPmF4cV9xbnVtOwotCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyBjb25mOwogCiAJYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzYy0+c2NfYWgsIHFudW0sICZxaSk7CiAJLyoKQEAgLTk3NSw5ICs5NTYsOCBAQAogCWVsc2UgaWYgKHNjLT5jb25maWcuY2FicVJlYWR5dGltZSA+IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQpCiAJCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQ7CiAKLQlhdGhfZ2V0X2JlYWNvbmNvbmZpZyhzYywgQVRIX0lGX0lEX0FOWSwgJmNvbmYpOwotCXFpLnRxaV9yZWFkeVRpbWUgPQotCQkoY29uZi5iZWFjb25faW50ZXJ2YWwgKiBzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUpIC8gMTAwOworCXFpLnRxaV9yZWFkeVRpbWUgPSAoc2MtPmh3LT5jb25mLmJlYWNvbl9pbnQgKgorCQkJICAgIHNjLT5jb25maWcuY2FicVJlYWR5dGltZSkgLyAxMDA7CiAJYXRoX3R4cV91cGRhdGUoc2MsIHFudW0sICZxaSk7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNTgsOSArMTIzOCw5IEBACiAJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgYmZfaGVhZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF90eF9zZW5kX25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkKQorc3RhdGljIHZvaWQgYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJCSAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkKQogewogCXN0cnVjdCBhdGhfYnVmICpiZjsKIApAQCAtMTI3Niw2ICsxMjU2LDE5IEBACiAJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3R4X3NlbmRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQpCit7CisJc3RydWN0IGF0aF9idWYgKmJmOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwliZi0+YmZfbmZyYW1lcyA9IDE7CisJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOworCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgYmZfaGVhZCk7Cit9CisKIHN0YXRpYyBlbnVtIGF0aDlrX3BrdF90eXBlIGdldF9od19wYWNrZXRfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CkBAIC0xNTE3LDEwICsxNTEwLDEyIEBACiAJCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIDgxOTIpOwogfQogCi1zdGF0aWMgaW50IGF0aF90eF9zZXR1cF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKK3N0YXRpYyBpbnQgYXRoX3R4X3NldHVwX2J1ZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGF0aF9idWYgKmJmLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKIHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2OwpAQCAtMTUzMSw2ICsxNTI2LDggQEAKIAlpZiAodW5saWtlbHkoIXR4X2luZm9fcHJpdikpCiAJCXJldHVybiAtRU5PTUVNOwogCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSB0eF9pbmZvX3ByaXY7CisJdHhfaW5mb19wcml2LT5hcGh5ID0gYXBoeTsKKwl0eF9pbmZvX3ByaXYtPmZyYW1lX3R5cGUgPSB0eGN0bC0+ZnJhbWVfdHlwZTsKIAloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwogCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCkBAIC0xNTM4LDggKzE1MzUsNyBAQAogCiAJYmYtPmJmX2ZybWxlbiA9IHNrYi0+bGVuICsgRkNTX0xFTiAtIChoZHJsZW4gJiAzKTsKIAotCWlmICgoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSAmJiAhaXNfcGFlKHNrYikgJiYKLQkgICAgICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKSkKKwlpZiAoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSAmJiAhaXNfcGFlKHNrYikpCiAJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9IVDsKIAogCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNjLCBza2IsIHR4Y3RsLT50eHEpOwpAQCAtMTU3NiwxNCArMTU3MiwxNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSAgSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwogCXN0cnVjdCBhdGhfZGVzYyAqZHM7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJaW50IGZybV90eXBlOworCV9fbGUxNiBmYzsKIAogCWZybV90eXBlID0gZ2V0X2h3X3BhY2tldF90eXBlKHNrYik7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKIAlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CiAJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKQEAgLTE2MDgsNiArMTYwNywxMSBAQAogCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7CiAJCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKIAorCQlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwgJmJmX2hlYWQpOworCQkJZ290byB0eF9kb25lOworCQl9CisKIAkJaWYgKGF0aF9hZ2dyX3F1ZXJ5KHNjLCBhbiwgYmYtPmJmX3RpZG5vKSkgewogCQkJLyoKIAkJCSAqIFRyeSBhZ2dyZWdhdGlvbiBpZiBpdCdzIGEgdW5pY2FzdCBkYXRhIGZyYW1lCkBAIC0xNjE5LDI0ICsxNjIzLDIzIEBACiAJCQkgKiBTZW5kIHRoaXMgZnJhbWUgYXMgcmVndWxhciB3aGVuIEFEREJBCiAJCQkgKiBleGNoYW5nZSBpcyBuZWl0aGVyIGNvbXBsZXRlIG5vciBwZW5kaW5nLgogCQkJICovCi0JCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsCi0JCQkJCSAgIHRpZCwgJmJmX2hlYWQpOworCQkJYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLAorCQkJCQkgICAgICB0aWQsICZiZl9oZWFkKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWJmLT5iZl9sYXN0YmYgPSBiZjsKLQkJYmYtPmJmX25mcmFtZXMgPSAxOwotCi0JCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgJmJmX2hlYWQpOworCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKIAl9CiAKK3R4X2RvbmU6CiAJc3Bpbl91bmxvY2tfYmgoJnR4Y3RsLT50eHEtPmF4cV9sb2NrKTsKIH0KIAogLyogVXBvbiBmYWlsdXJlIGNhbGxlciBzaG91bGQgZnJlZSBza2IgKi8KLWludCBhdGhfdHhfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCitpbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKIHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJaW50IHI7CiAKQEAgLTE2NDYsNyArMTY0OSw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihzYywgYmYsIHNrYiwgdHhjdGwpOworCXIgPSBhdGhfdHhfc2V0dXBfYnVmZmVyKGh3LCBiZiwgc2tiLCB0eGN0bCk7CiAJaWYgKHVubGlrZWx5KHIpKSB7CiAJCXN0cnVjdCBhdGhfdHhxICp0eHEgPSB0eGN0bC0+dHhxOwogCkBAIC0xNjU3LDcgKzE2NjAsNyBAQAogCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGhhdmUgdG8gcnVuIFRYIGNvbXBsZXRpb25vbiBvbmUgYnVmZmVyCiAJCSAqIG9uIHRoZSBxdWV1ZSAqLwogCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAoYXRoX3R4cV9kZXB0aChzYywgdHhxLT5heHFfcW51bSkgPiAxKSB7CisJCWlmIChzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA+IDEpIHsKIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywKIAkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAJCQl0eHEtPnN0b3BwZWQgPSAxOwpAQCAtMTY3Niw4ICsxNjc5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWludCBoZHJsZW4sIHBhZHNpemU7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKQEAgLTE3MTQsNyArMTcxOSw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgQ0FCUSBwYWNrZXQsIHNrYjogJXBcbiIsIHNrYik7CiAKLQlpZiAoYXRoX3R4X3N0YXJ0KHNjLCBza2IsICZ0eGN0bCkgIT0gMCkgeworCWlmIChhdGhfdHhfc3RhcnQoaHcsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIkNBQlEgVFggZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTE3MzUsOSArMTc0MCwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKTsKIAlpbnQgaGRybGVuLCBwYWRzaXplOworCWludCBmcmFtZV90eXBlID0gQVRIOUtfTk9UX0lOVEVSTkFMOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggY29tcGxldGU6IHNrYjogJXBcbiIsIHNrYik7CiAKKwlpZiAodHhfaW5mb19wcml2KSB7CisJCWh3ID0gdHhfaW5mb19wcml2LT5hcGh5LT5odzsKKwkJZnJhbWVfdHlwZSA9IHR4X2luZm9fcHJpdi0+ZnJhbWVfdHlwZTsKKwl9CisKIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAogCSAgICB0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEKSB7CiAJCWtmcmVlKHR4X2luZm9fcHJpdik7CkBAIC0xNzY3LDcgKzE3NzgsMTAgQEAKIAkJc2tiX3B1bGwoc2tiLCBwYWRzaXplKTsKIAl9CiAKLQlpZWVlODAyMTFfdHhfc3RhdHVzKGh3LCBza2IpOworCWlmIChmcmFtZV90eXBlID09IEFUSDlLX05PVF9JTlRFUk5BTCkKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKKwllbHNlCisJCWF0aDlrX3R4X3N0YXR1cyhodywgc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLApAQCAtMTg2Nyw3ICsxODgxLDcgQEAKIAogCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAJaWYgKHR4cS0+c3RvcHBlZCAmJgotCSAgICBhdGhfdHhxX2RlcHRoKHNjLCB0eHEtPmF4cV9xbnVtKSA8PSAoQVRIX1RYQlVGIC0gMjApKSB7CisJICAgIHNjLT50eC50eHFbdHhxLT5heHFfcW51bV0uYXhxX2RlcHRoIDw9IChBVEhfVFhCVUYgLSAyMCkpIHsKIAkJcW51bSA9IGF0aF9nZXRfbWFjODAyMTFfcW51bSh0eHEtPmF4cV9xbnVtLCBzYyk7CiAJCWlmIChxbnVtICE9IC0xKSB7CiAJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShzYy0+aHcsIHFudW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggOTE5MzBhMi4uODU3ZDg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC0yLDggKzIsOCBAQAogCiAgICAgIERyaXZlciBmb3IgQXRtZWwgYXQ3NmM1MDIgYXQ3NmM1MDQgYW5kIGF0NzZjNTA2IHdpcmVsZXNzIGNhcmRzLgogCi0gICAgICAgIENvcHlyaWdodCAyMDAwLTIwMDEgQVRNRUwgQ29ycG9yYXRpb24uCi0gICAgICAgIENvcHlyaWdodCAyMDAzLTIwMDQgU2ltb24gS2VsbGV5LgorCUNvcHlyaWdodCAyMDAwLTIwMDEgQVRNRUwgQ29ycG9yYXRpb24uCisJQ29weXJpZ2h0IDIwMDMtMjAwNCBTaW1vbiBLZWxsZXkuCiAKICAgICBUaGlzIGNvZGUgd2FzIGRldmVsb3BlZCBmcm9tIHZlcnNpb24gMi4xLjEgb2YgdGhlIEF0bWVsIGRyaXZlcnMsCiAgICAgcmVsZWFzZWQgYnkgQXRtZWwgY29ycC4gdW5kZXIgdGhlIEdQTCBpbiBEZWNlbWJlciAyMDAyLiBJdCBhbHNvCkBAIC04OSwxNSArODksMTUgQEAKIAljb25zdCBjaGFyICpmd19maWxlOwogCWNvbnN0IGNoYXIgKmZ3X2ZpbGVfZXh0OwogfSBmd190YWJsZVtdID0gewotCXsgQVRNRUxfRldfVFlQRV81MDIsICAgICAgImF0bWVsX2F0NzZjNTAyIiwgICAgICAiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV81MDJELCAgICAgImF0bWVsX2F0NzZjNTAyZCIsICAgICAiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV81MDJFLCAgICAgImF0bWVsX2F0NzZjNTAyZSIsICAgICAiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV81MDJfM0NPTSwgImF0bWVsX2F0NzZjNTAyXzNjb20iLCAiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV81MDQsICAgICAgImF0bWVsX2F0NzZjNTA0IiwgICAgICAiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV81MDRfMjk1OCwgImF0bWVsX2F0NzZjNTA0XzI5NTgiLCAiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV81MDRBXzI5NTgsImF0bWVsX2F0NzZjNTA0YV8yOTU4IiwiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV81MDYsICAgICAgImF0bWVsX2F0NzZjNTA2IiwgICAgICAiYmluIiB9LAotCXsgQVRNRUxfRldfVFlQRV9OT05FLCAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgTlVMTCB9CisJeyBBVE1FTF9GV19UWVBFXzUwMiwJCSJhdG1lbF9hdDc2YzUwMiIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwMkQsCQkiYXRtZWxfYXQ3NmM1MDJkIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTAyRSwJCSJhdG1lbF9hdDc2YzUwMmUiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDJfM0NPTSwJImF0bWVsX2F0NzZjNTAyXzNjb20iLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDQsCQkiYXRtZWxfYXQ3NmM1MDQiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDRfMjk1OCwJImF0bWVsX2F0NzZjNTA0XzI5NTgiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDRBXzI5NTgsCSJhdG1lbF9hdDc2YzUwNGFfMjk1OCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNiwJCSJhdG1lbF9hdDc2YzUwNiIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFX05PTkUsCQlOVUxMLAkJCU5VTEwgfQogfTsKIAogI2RlZmluZSBNQVhfU1NJRF9MRU5HVEggMzIKQEAgLTEwNiw2MCArMTA2LDYwIEBACiAjZGVmaW5lIE1BWF9CU1NfRU5UUklFUwk2NAogCiAvKiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgR0NSICAweDAwICAgIC8vICAgICAgKFNJUjApICBHZW5lcmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSNkZWZpbmUgQlNSICAweDAyICAgIC8vICAgICAgKFNJUjEpICBCYW5rIFN3aXRjaGluZyBTZWxlY3QgUmVnaXN0ZXIKKyNkZWZpbmUgR0NSICAweDAwICAgIC8qIChTSVIwKSAgR2VuZXJhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEJTUiAgMHgwMiAgICAvKiAoU0lSMSkgIEJhbmsgU3dpdGNoaW5nIFNlbGVjdCBSZWdpc3RlciAqLwogI2RlZmluZSBBUiAgIDB4MDQKICNkZWZpbmUgRFIgICAweDA4Ci0jZGVmaW5lIE1SMSAgMHgxMiAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciAxCi0jZGVmaW5lIE1SMiAgMHgxNCAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciAyCi0jZGVmaW5lIE1SMyAgMHgxNiAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciAzCi0jZGVmaW5lIE1SNCAgMHgxOCAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciA0CisjZGVmaW5lIE1SMSAgMHgxMiAgICAvKiBNaXJyb3IgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBNUjIgIDB4MTQgICAgLyogTWlycm9yIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgTVIzICAweDE2ICAgIC8qIE1pcnJvciBSZWdpc3RlciAzICovCisjZGVmaW5lIE1SNCAgMHgxOCAgICAvKiBNaXJyb3IgUmVnaXN0ZXIgNCAqLwogCiAjZGVmaW5lIEdQUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYwogI2RlZmluZSBHUFIyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGUKICNkZWZpbmUgR1BSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCi0vLwotLy8gQ29uc3RhbnRzIGZvciB0aGUgR0NSIHJlZ2lzdGVyLgotLy8KLSNkZWZpbmUgR0NSX1JFTUFQICAgICAweDA0MDAgICAgICAgICAgLy8gUmVtYXAgaW50ZXJuYWwgU1JBTSB0byAwCi0jZGVmaW5lIEdDUl9TV1JFUyAgICAgMHgwMDgwICAgICAgICAgIC8vIEJJVSByZXNldCAoQVJNIGFuZCBQQUkgYXJlIE5PVCByZXNldCkKLSNkZWZpbmUgR0NSX0NPUkVTICAgICAweDAwNjAgICAgICAgICAgLy8gQ29yZSBSZXNldCAoQVJNIGFuZCBQQUkgYXJlIHJlc2V0KQotI2RlZmluZSBHQ1JfRU5JTlQgICAgIDB4MDAwMiAgICAgICAgICAvLyBFbmFibGUgSW50ZXJydXB0cwotI2RlZmluZSBHQ1JfQUNLSU5UICAgIDB4MDAwOCAgICAgICAgICAvLyBBY2tub3dsZWRnZSBJbnRlcnJ1cHRzCisvKgorICogQ29uc3RhbnRzIGZvciB0aGUgR0NSIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEdDUl9SRU1BUCAgICAgMHgwNDAwICAgICAgICAgIC8qIFJlbWFwIGludGVybmFsIFNSQU0gdG8gMCAqLworI2RlZmluZSBHQ1JfU1dSRVMgICAgIDB4MDA4MCAgICAgICAgICAvKiBCSVUgcmVzZXQgKEFSTSBhbmQgUEFJIGFyZSBOT1QgcmVzZXQpICovCisjZGVmaW5lIEdDUl9DT1JFUyAgICAgMHgwMDYwICAgICAgICAgIC8qIENvcmUgUmVzZXQgKEFSTSBhbmQgUEFJIGFyZSByZXNldCkgKi8KKyNkZWZpbmUgR0NSX0VOSU5UICAgICAweDAwMDIgICAgICAgICAgLyogRW5hYmxlIEludGVycnVwdHMgKi8KKyNkZWZpbmUgR0NSX0FDS0lOVCAgICAweDAwMDggICAgICAgICAgLyogQWNrbm93bGVkZ2UgSW50ZXJydXB0cyAqLwogCi0jZGVmaW5lIEJTU19TUkFNICAgICAgMHgwMjAwICAgICAgICAgIC8vIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gU1JBTQotI2RlZmluZSBCU1NfSVJBTSAgICAgIDB4MDEwMCAgICAgICAgICAvLyBBTUJBIG1vZHVsZSBzZWxlY3Rpb24gLS0+IElSQU0KLS8vCi0vLyBDb25zdGFudHMgZm9yIHRoZSBNUiByZWdpc3RlcnMuCi0vLwotI2RlZmluZSBNQUNfSU5JVF9DT01QTEVURSAgICAgICAweDAwMDEgICAgICAgIC8vIE1BQyBpbml0IGhhcyBiZWVuIGNvbXBsZXRlZAotI2RlZmluZSBNQUNfQk9PVF9DT01QTEVURSAgICAgICAweDAwMTAgICAgICAgIC8vIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZAotI2RlZmluZSBNQUNfSU5JVF9PSyAgICAgICAgICAgICAweDAwMDIgICAgICAgIC8vIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZAorI2RlZmluZSBCU1NfU1JBTSAgICAgIDB4MDIwMCAgICAgICAgICAvKiBBTUJBIG1vZHVsZSBzZWxlY3Rpb24gLS0+IFNSQU0gKi8KKyNkZWZpbmUgQlNTX0lSQU0gICAgICAweDAxMDAgICAgICAgICAgLyogQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBJUkFNICovCisvKgorICpDb25zdGFudHMgZm9yIHRoZSBNUiByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgTUFDX0lOSVRfQ09NUExFVEUgICAgICAgMHgwMDAxICAgICAgICAvKiBNQUMgaW5pdCBoYXMgYmVlbiBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgTUFDX0JPT1RfQ09NUExFVEUgICAgICAgMHgwMDEwICAgICAgICAvKiBNQUMgYm9vdCBoYXMgYmVlbiBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgTUFDX0lOSVRfT0sgICAgICAgICAgICAgMHgwMDAyICAgICAgICAvKiBNQUMgYm9vdCBoYXMgYmVlbiBjb21wbGV0ZWQgKi8KIAogI2RlZmluZSBNSUJfTUFYX0RBVEFfQllURVMgICAgMjEyCiAjZGVmaW5lIE1JQl9IRUFERVJfU0laRSAgICAgICA0ICAgIC8qIGZpcnN0IGZvdXIgZmllbGRzICovCiAKIHN0cnVjdCBnZXRfc2V0X21pYiB7Ci0gICAgICAgIHU4IHR5cGU7Ci0gICAgICAgIHU4IHNpemU7Ci0gICAgICAgIHU4IGluZGV4OwotICAgICAgICB1OCByZXNlcnZlZDsKLSAgICAgICAgdTggZGF0YVtNSUJfTUFYX0RBVEFfQllURVNdOworCXU4IHR5cGU7CisJdTggc2l6ZTsKKwl1OCBpbmRleDsKKwl1OCByZXNlcnZlZDsKKwl1OCBkYXRhW01JQl9NQVhfREFUQV9CWVRFU107CiB9OwogCiBzdHJ1Y3QgcnhfZGVzYyB7Ci0gICAgICAgIHUzMiAgICAgICAgICBOZXh0OwotICAgICAgICB1MTYgICAgICAgICAgTXNkdVBvczsKLSAgICAgICAgdTE2ICAgICAgICAgIE1zZHVTaXplOworCXUzMiAgICAgICAgICBOZXh0OworCXUxNiAgICAgICAgICBNc2R1UG9zOworCXUxNiAgICAgICAgICBNc2R1U2l6ZTsKIAotICAgICAgICB1OCAgICAgICAgICAgU3RhdGU7Ci0gICAgICAgIHU4ICAgICAgICAgICBTdGF0dXM7Ci0gICAgICAgIHU4ICAgICAgICAgICBSYXRlOwotICAgICAgICB1OCAgICAgICAgICAgUnNzaTsKLSAgICAgICAgdTggICAgICAgICAgIExpbmtRdWFsaXR5OwotICAgICAgICB1OCAgICAgICAgICAgUHJlYW1ibGVUeXBlOwotICAgICAgICB1MTYgICAgICAgICAgRHVyYXRpb247Ci0gICAgICAgIHUzMiAgICAgICAgICBSeFRpbWU7CisJdTggICAgICAgICAgIFN0YXRlOworCXU4ICAgICAgICAgICBTdGF0dXM7CisJdTggICAgICAgICAgIFJhdGU7CisJdTggICAgICAgICAgIFJzc2k7CisJdTggICAgICAgICAgIExpbmtRdWFsaXR5OworCXU4ICAgICAgICAgICBQcmVhbWJsZVR5cGU7CisJdTE2ICAgICAgICAgIER1cmF0aW9uOworCXUzMiAgICAgICAgICBSeFRpbWU7CiB9OwogCiAjZGVmaW5lIFJYX0RFU0NfRkxBR19WQUxJRCAgICAgICAweDgwCkBAIC0xOTIsNyArMTkyLDcgQEAKIAl1OCAgICAgICAgS2V5SW5kZXg7CiAJdTggICAgICAgIENoaXBlclR5cGU7CiAJdTggICAgICAgIENoaXByZUxlbmd0aDsKLSAgICAgICAgdTggICAgICAgIFJlc2VydmVkMTsKKwl1OCAgICAgICAgUmVzZXJ2ZWQxOwogCiAJdTggICAgICAgIFJlc2VydmVkOwogCXU4ICAgICAgICBQYWNrZXRUeXBlOwpAQCAtMjEyLDkgKzIxMiw5IEBACiAjZGVmaW5lIFRYX0RFU0NfUEFDS0VUX1RZUEVfT0ZGU0VUICAgMTcKICNkZWZpbmUgVFhfREVTQ19IT1NUX0xFTkdUSF9PRkZTRVQgICAxOAogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBIb3N0LU1BQyBpbnRlcmZhY2UKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qCisgKiBIb3N0LU1BQyBpbnRlcmZhY2UKKyAqLwogCiAjZGVmaW5lIFRYX1NUQVRVU19TVUNDRVNTICAgICAgIDB4MDAKIApAQCAtMjI2LDE0ICsyMjYsMTQgQEAKICNkZWZpbmUgVFhfUEFDS0VUX1RZUEVfREFUQSAgICAgMHgwMQogI2RlZmluZSBUWF9QQUNLRVRfVFlQRV9NR01UICAgICAweDAyCiAKLSNkZWZpbmUgSVNSX0VNUFRZICAgICAgICAgICAgICAgMHgwMCAgICAgICAgLy8gbm8gYml0cyBzZXQgaW4gSVNSCi0jZGVmaW5lIElTUl9UeENPTVBMRVRFICAgICAgICAgIDB4MDEgICAgICAgIC8vIHBhY2tldCB0cmFuc21pdHRlZAotI2RlZmluZSBJU1JfUnhDT01QTEVURSAgICAgICAgICAweDAyICAgICAgICAvLyBwYWNrZXQgcmVjZWl2ZWQKLSNkZWZpbmUgSVNSX1J4RlJBTUVMT1NUICAgICAgICAgMHgwNCAgICAgICAgLy8gUnggRnJhbWUgbG9zdAotI2RlZmluZSBJU1JfRkFUQUxfRVJST1IgICAgICAgICAweDA4ICAgICAgICAvLyBGYXRhbCBlcnJvcgotI2RlZmluZSBJU1JfQ09NTUFORF9DT01QTEVURSAgICAweDEwICAgICAgICAvLyBjb21tYW5kIGNvbXBsZXRlZAotI2RlZmluZSBJU1JfT1VUX09GX1JBTkdFICAgICAgICAweDIwICAgICAgICAvLyBjb21tYW5kIGNvbXBsZXRlZAotI2RlZmluZSBJU1JfSUJTU19NRVJHRSAgICAgICAgICAweDQwICAgICAgICAvLyAoNC4xLjIuMzApOiBJQlNTIG1lcmdlCisjZGVmaW5lIElTUl9FTVBUWSAgICAgICAgICAgICAgIDB4MDAgICAgICAgIC8qIG5vIGJpdHMgc2V0IGluIElTUiAqLworI2RlZmluZSBJU1JfVHhDT01QTEVURSAgICAgICAgICAweDAxICAgICAgICAvKiBwYWNrZXQgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgSVNSX1J4Q09NUExFVEUgICAgICAgICAgMHgwMiAgICAgICAgLyogcGFja2V0IHJlY2VpdmVkICovCisjZGVmaW5lIElTUl9SeEZSQU1FTE9TVCAgICAgICAgIDB4MDQgICAgICAgIC8qIFJ4IEZyYW1lIGxvc3QgKi8KKyNkZWZpbmUgSVNSX0ZBVEFMX0VSUk9SICAgICAgICAgMHgwOCAgICAgICAgLyogRmF0YWwgZXJyb3IgKi8KKyNkZWZpbmUgSVNSX0NPTU1BTkRfQ09NUExFVEUgICAgMHgxMCAgICAgICAgLyogY29tbWFuZCBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgSVNSX09VVF9PRl9SQU5HRSAgICAgICAgMHgyMCAgICAgICAgLyogY29tbWFuZCBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgSVNSX0lCU1NfTUVSR0UgICAgICAgICAgMHg0MCAgICAgICAgLyogKDQuMS4yLjMwKTogSUJTUyBtZXJnZSAqLwogI2RlZmluZSBJU1JfR0VORVJJQ19JUlEgICAgICAgICAweDgwCiAKICNkZWZpbmUgTG9jYWxfTWliX1R5cGUgICAgICAgICAgMHgwMQpAQCAtMzExLDIyICszMTEsMjIgQEAKICNkZWZpbmUgTUFYX0VOQ1JZUFRJT05fS0VZUyA0CiAjZGVmaW5lIE1BWF9FTkNSWVBUSU9OX0tFWV9TSVpFIDQwCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gODAyLjExIHJlbGF0ZWQgZGVmaW5pdGlvbnMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoKKyAqIDgwMi4xMSByZWxhdGVkIGRlZmluaXRpb25zCisgKi8KIAotLy8KLS8vIFJlZ3VsYXRvcnkgRG9tYWlucwotLy8KKy8qCisgKiBSZWd1bGF0b3J5IERvbWFpbnMKKyAqLwogCi0jZGVmaW5lIFJFR19ET01BSU5fRkNDCQkweDEwCS8vQ2hhbm5lbHMJMS0xMQlVU0EKLSNkZWZpbmUgUkVHX0RPTUFJTl9ET0MJCTB4MjAJLy9DaGFubmVsCTEtMTEJQ2FuYWRhCi0jZGVmaW5lIFJFR19ET01BSU5fRVRTSQkJMHgzMAkvL0NoYW5uZWwJMS0xMwlFdXJvcGUgKGV4IFNwYWluL0ZyYW5jZSkKLSNkZWZpbmUgUkVHX0RPTUFJTl9TUEFJTgkweDMxCS8vQ2hhbm5lbAkxMC0xMQlTcGFpbgotI2RlZmluZSBSRUdfRE9NQUlOX0ZSQU5DRQkweDMyCS8vQ2hhbm5lbAkxMC0xMwlGcmFuY2UKLSNkZWZpbmUgUkVHX0RPTUFJTl9NS0sJCTB4NDAJLy9DaGFubmVsCTE0CUphcGFuCi0jZGVmaW5lIFJFR19ET01BSU5fTUtLMQkJMHg0MQkvL0NoYW5uZWwJMS0xNAlKYXBhbihNS0sxKQotI2RlZmluZSBSRUdfRE9NQUlOX0lTUkFFTAkweDUwCS8vQ2hhbm5lbAkzLTkJSVNSQUVMCisjZGVmaW5lIFJFR19ET01BSU5fRkNDCQkweDEwCS8qIENoYW5uZWxzCTEtMTEJVVNBCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fRE9DCQkweDIwCS8qIENoYW5uZWwJMS0xMQlDYW5hZGEJCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9FVFNJCQkweDMwCS8qIENoYW5uZWwJMS0xMwlFdXJvcGUgKGV4IFNwYWluL0ZyYW5jZSkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9TUEFJTgkweDMxCS8qIENoYW5uZWwJMTAtMTEJU3BhaW4JCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9GUkFOQ0UJMHgzMgkvKiBDaGFubmVsCTEwLTEzCUZyYW5jZQkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX01LSwkJMHg0MAkvKiBDaGFubmVsCTE0CUphcGFuCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fTUtLMQkJMHg0MQkvKiBDaGFubmVsCTEtMTQJSmFwYW4oTUtLMSkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0lTUkFFTAkweDUwCS8qIENoYW5uZWwJMy05CUlTUkFFTAkJCQkqLwogCiAjZGVmaW5lIEJTU19UWVBFX0FEX0hPQwkJMQogI2RlZmluZSBCU1NfVFlQRV9JTkZSQVNUUlVDVFVSRSAyCkBAIC0zNjQsMTMgKzM2NCwxMyBAQAogI2RlZmluZSBDSVBIRVJfU1VJVEVfQ0NYICAgICAgNAogI2RlZmluZSBDSVBIRVJfU1VJVEVfV0VQXzEyOCAgNQogCi0vLwotLy8gSUZBQ0UgTUFDUk9TICYgZGVmaW5pdGlvbnMKLS8vCi0vLworLyoKKyAqIElGQUNFIE1BQ1JPUyAmIGRlZmluaXRpb25zCisgKi8KIAotLy8gRnVuY0N0cmwgZmllbGQ6Ci0vLworLyoKKyAqIEZ1bmNDdHJsIGZpZWxkOgorICovCiAjZGVmaW5lIEZVTkNfQ1RSTF9UeEVOQUJMRQkJMHgxMAogI2RlZmluZSBGVU5DX0NUUkxfUnhFTkFCTEUJCTB4MjAKICNkZWZpbmUgRlVOQ19DVFJMX0lOSVRfQ09NUExFVEUJCTB4MDEKQEAgLTM3OCw0OCArMzc4LDQ4IEBACiAvKiBBIHN0dWIgZmlybXdhcmUgaW1hZ2Ugd2hpY2ggcmVhZHMgdGhlIE1BQyBhZGRyZXNzIGZyb20gTlZSQU0gb24gdGhlIGNhcmQuCiAgICBGb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uIGFuZCBzb3VyY2Ugc2VlIHRoZSBlbmQgb2YgdGhpcyBmaWxlLiAqLwogc3RhdGljIHU4IG1hY19yZWFkZXJbXSA9IHsKLQkweDA2LDB4MDAsMHgwMCwweGVhLDB4MDQsMHgwMCwweDAwLDB4ZWEsMHgwMywweDAwLDB4MDAsMHhlYSwweDAyLDB4MDAsMHgwMCwweGVhLAotCTB4MDEsMHgwMCwweDAwLDB4ZWEsMHgwMCwweDAwLDB4MDAsMHhlYSwweGZmLDB4ZmYsMHhmZiwweGVhLDB4ZmUsMHhmZiwweGZmLDB4ZWEsCi0JMHhkMywweDAwLDB4YTAsMHhlMywweDAwLDB4ZjAsMHgyMSwweGUxLDB4MGUsMHgwNCwweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywKLQkweDgxLDB4MTEsMHhhMCwweGUxLDB4MDAsMHgxMCwweDgxLDB4ZTMsMHgwMCwweDEwLDB4ODAsMHhlNSwweDFjLDB4MTAsMHg5MCwweGU1LAotCTB4MTAsMHgxMCwweGMxLDB4ZTMsMHgxYywweDEwLDB4ODAsMHhlNSwweDAxLDB4MTAsMHhhMCwweGUzLDB4MDgsMHgxMCwweDgwLDB4ZTUsCi0JMHgwMiwweDAzLDB4YTAsMHhlMywweDAwLDB4MTAsMHhhMCwweGUzLDB4YjAsMHgxMCwweGMwLDB4ZTEsMHhiNCwweDEwLDB4YzAsMHhlMSwKLQkweGI4LDB4MTAsMHhjMCwweGUxLDB4YmMsMHgxMCwweGMwLDB4ZTEsMHg1NiwweGRjLDB4YTAsMHhlMywweDIxLDB4MDAsMHgwMCwweGViLAotCTB4MGEsMHgwMCwweGEwLDB4ZTMsMHgxYSwweDAwLDB4MDAsMHhlYiwweDEwLDB4MDAsMHgwMCwweGViLDB4MDcsMHgwMCwweDAwLDB4ZWIsCi0JMHgwMiwweDAzLDB4YTAsMHhlMywweDAyLDB4MTQsMHhhMCwweGUzLDB4YjQsMHgxMCwweGMwLDB4ZTEsMHg0YywweDEwLDB4OWYsMHhlNSwKLQkweGJjLDB4MTAsMHhjMCwweGUxLDB4MTAsMHgxMCwweGEwLDB4ZTMsMHhiOCwweDEwLDB4YzAsMHhlMSwweGZlLDB4ZmYsMHhmZiwweGVhLAotCTB4MDAsMHg0MCwweDJkLDB4ZTksMHgwMCwweDIwLDB4YTAsMHhlMywweDAyLDB4M2MsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsCi0JMHgyOCwweDAwLDB4OWYsMHhlNSwweDM3LDB4MDAsMHgwMCwweGViLDB4MDAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwKLQkweDAwLDB4NDAsMHgyZCwweGU5LDB4MTIsMHgyZSwweGEwLDB4ZTMsMHgwNiwweDMwLDB4YTAsMHhlMywweDAwLDB4MTAsMHhhMCwweGUzLAotCTB4MDIsMHgwNCwweGEwLDB4ZTMsMHgyZiwweDAwLDB4MDAsMHhlYiwweDAwLDB4NDAsMHhiZCwweGU4LDB4MWUsMHhmZiwweDJmLDB4ZTEsCi0JMHgwMCwweDAyLDB4MDAsMHgwMiwweDgwLDB4MDEsMHg5MCwweGUwLDB4MDEsMHgwMCwweDAwLDB4MGEsMHgwMSwweDAwLDB4NTAsMHhlMiwKLQkweGZjLDB4ZmYsMHhmZiwweGVhLDB4MWUsMHhmZiwweDJmLDB4ZTEsMHg4MCwweDEwLDB4YTAsMHhlMywweGYzLDB4MDYsMHhhMCwweGUzLAotCTB4MDAsMHgxMCwweDgwLDB4ZTUsMHgwMCwweDEwLDB4YTAsMHhlMywweDAwLDB4MTAsMHg4MCwweGU1LDB4MDEsMHgxMCwweGEwLDB4ZTMsCi0JMHgwNCwweDEwLDB4ODAsMHhlNSwweDAwLDB4MTAsMHg4MCwweGU1LDB4MGUsMHgzNCwweGEwLDB4ZTMsMHgxYywweDEwLDB4OTMsMHhlNSwKLQkweDAyLDB4MWEsMHg4MSwweGUzLDB4MWMsMHgxMCwweDgzLDB4ZTUsMHg1OCwweDExLDB4OWYsMHhlNSwweDMwLDB4MTAsMHg4MCwweGU1LAotCTB4NTQsMHgxMSwweDlmLDB4ZTUsMHgzNCwweDEwLDB4ODAsMHhlNSwweDM4LDB4MTAsMHg4MCwweGU1LDB4M2MsMHgxMCwweDgwLDB4ZTUsCi0JMHgxMCwweDEwLDB4OTAsMHhlNSwweDA4LDB4MDAsMHg5MCwweGU1LDB4MWUsMHhmZiwweDJmLDB4ZTEsMHhmMywweDE2LDB4YTAsMHhlMywKLQkweDA4LDB4MDAsMHg5MSwweGU1LDB4MDUsMHgwMCwweGEwLDB4ZTMsMHgwYywweDAwLDB4ODEsMHhlNSwweDEwLDB4MDAsMHg5MSwweGU1LAotCTB4MDIsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgwYSwweGZmLDB4MDAsMHhhMCwweGUzLDB4MGMsMHgwMCwweDgxLDB4ZTUsCi0JMHgxMCwweDAwLDB4OTEsMHhlNSwweDAyLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDAwLDB4OTEsMHhlNSwKLQkweDEwLDB4MDAsMHg5MSwweGU1LDB4MDEsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgwYSwweDA4LDB4MDAsMHg5MSwweGU1LAotCTB4ZmYsMHgwMCwweDAwLDB4ZTIsMHgxZSwweGZmLDB4MmYsMHhlMSwweDMwLDB4NDAsMHgyZCwweGU5LDB4MDAsMHg1MCwweGEwLDB4ZTEsCi0JMHgwMywweDQwLDB4YTAsMHhlMSwweGEyLDB4MDIsMHhhMCwweGUxLDB4MDgsMHgwMCwweDAwLDB4ZTIsMHgwMywweDAwLDB4ODAsMHhlMiwKLQkweGQ4LDB4MTAsMHg5ZiwweGU1LDB4MDAsMHgwMCwweGMxLDB4ZTUsMHgwMSwweDIwLDB4YzEsMHhlNSwweGUyLDB4ZmYsMHhmZiwweGViLAotCTB4MDEsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgxYSwweDE0LDB4MDAsMHhhMCwweGUzLDB4YzQsMHhmZiwweGZmLDB4ZWIsCi0JMHgwNCwweDIwLDB4YTAsMHhlMSwweDA1LDB4MTAsMHhhMCwweGUxLDB4MDIsMHgwMCwweGEwLDB4ZTMsMHgwMSwweDAwLDB4MDAsMHhlYiwKLQkweDMwLDB4NDAsMHhiZCwweGU4LDB4MWUsMHhmZiwweDJmLDB4ZTEsMHg3MCwweDQwLDB4MmQsMHhlOSwweGYzLDB4NDYsMHhhMCwweGUzLAotCTB4MDAsMHgzMCwweGEwLDB4ZTMsMHgwMCwweDAwLDB4NTAsMHhlMywweDA4LDB4MDAsMHgwMCwweDlhLDB4OGMsMHg1MCwweDlmLDB4ZTUsCi0JMHgwMywweDYwLDB4ZDUsMHhlNywweDBjLDB4NjAsMHg4NCwweGU1LDB4MTAsMHg2MCwweDk0LDB4ZTUsMHgwMiwweDAwLDB4MTYsMHhlMywKLQkweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDEsMHgzMCwweDgzLDB4ZTIsMHgwMCwweDAwLDB4NTMsMHhlMSwweGY3LDB4ZmYsMHhmZiwweDNhLAotCTB4ZmYsMHgzMCwweGEwLDB4ZTMsMHgwYywweDMwLDB4ODQsMHhlNSwweDA4LDB4MDAsMHg5NCwweGU1LDB4MTAsMHgwMCwweDk0LDB4ZTUsCi0JMHgwMSwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHgwMCwweDk0LDB4ZTUsMHgwMCwweDAwLDB4YTAsMHhlMywKLQkweDAwLDB4MDAsMHg1MiwweGUzLDB4MGIsMHgwMCwweDAwLDB4OWEsMHgxMCwweDUwLDB4OTQsMHhlNSwweDAyLDB4MDAsMHgxNSwweGUzLAotCTB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwYywweDMwLDB4ODQsMHhlNSwweDEwLDB4NTAsMHg5NCwweGU1LDB4MDEsMHgwMCwweDE1LDB4ZTMsCi0JMHhmYywweGZmLDB4ZmYsMHgwYSwweDA4LDB4NTAsMHg5NCwweGU1LDB4MDEsMHg1MCwweGMxLDB4ZTQsMHgwMSwweDAwLDB4ODAsMHhlMiwKLQkweDAyLDB4MDAsMHg1MCwweGUxLDB4ZjMsMHhmZiwweGZmLDB4M2EsMHhjOCwweDAwLDB4YTAsMHhlMywweDk4LDB4ZmYsMHhmZiwweGViLAotCTB4NzAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwweDAxLDB4MGMsMHgwMCwweDAyLDB4MDEsMHgwMiwweDAwLDB4MDIsCi0JMHgwMCwweDAxLDB4MDAsMHgwMgorCTB4MDYsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZWEsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKKwkweGQzLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLCAweDBlLCAweDA0LCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorCTB4ODEsIDB4MTEsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODEsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OTAsIDB4ZTUsCisJMHgxMCwgMHgxMCwgMHhjMSwgMHhlMywgMHgxYywgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwOCwgMHgxMCwgMHg4MCwgMHhlNSwKKwkweDAyLCAweDAzLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweGIwLCAweDEwLCAweGMwLCAweGUxLCAweGI0LCAweDEwLCAweGMwLCAweGUxLAorCTB4YjgsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4YmMsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4NTYsIDB4ZGMsIDB4YTAsIDB4ZTMsIDB4MjEsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHgwYSwgMHgwMCwgMHhhMCwgMHhlMywgMHgxYSwgMHgwMCwgMHgwMCwgMHhlYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHgwNywgMHgwMCwgMHgwMCwgMHhlYiwKKwkweDAyLCAweDAzLCAweGEwLCAweGUzLCAweDAyLCAweDE0LCAweGEwLCAweGUzLCAweGI0LCAweDEwLCAweGMwLCAweGUxLCAweDRjLCAweDEwLCAweDlmLCAweGU1LAorCTB4YmMsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4MTAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4YjgsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCisJMHgwMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgwMCwgMHgyMCwgMHhhMCwgMHhlMywgMHgwMiwgMHgzYywgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKKwkweDI4LCAweDAwLCAweDlmLCAweGU1LCAweDM3LCAweDAwLCAweDAwLCAweGViLCAweDAwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLAorCTB4MDAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4MTIsIDB4MmUsIDB4YTAsIDB4ZTMsIDB4MDYsIDB4MzAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHgwMiwgMHgwNCwgMHhhMCwgMHhlMywgMHgyZiwgMHgwMCwgMHgwMCwgMHhlYiwgMHgwMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKKwkweDAwLCAweDAyLCAweDAwLCAweDAyLCAweDgwLCAweDAxLCAweDkwLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDAwLCAweDUwLCAweGUyLAorCTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4ZjMsIDB4MDYsIDB4YTAsIDB4ZTMsCisJMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKKwkweDA0LCAweDEwLCAweDgwLCAweGU1LCAweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDBlLCAweDM0LCAweGEwLCAweGUzLCAweDFjLCAweDEwLCAweDkzLCAweGU1LAorCTB4MDIsIDB4MWEsIDB4ODEsIDB4ZTMsIDB4MWMsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4NTgsIDB4MTEsIDB4OWYsIDB4ZTUsIDB4MzAsIDB4MTAsIDB4ODAsIDB4ZTUsCisJMHg1NCwgMHgxMSwgMHg5ZiwgMHhlNSwgMHgzNCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgzOCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgzYywgMHgxMCwgMHg4MCwgMHhlNSwKKwkweDEwLCAweDEwLCAweDkwLCAweGU1LCAweDA4LCAweDAwLCAweDkwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGYzLCAweDE2LCAweGEwLCAweGUzLAorCTB4MDgsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDUsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MGMsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4MTAsIDB4MDAsIDB4OTEsIDB4ZTUsCisJMHgwMiwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHhmZiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwYywgMHgwMCwgMHg4MSwgMHhlNSwKKwkweDEwLCAweDAwLCAweDkxLCAweGU1LCAweDAyLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDA4LCAweDAwLCAweDkxLCAweGU1LAorCTB4MTAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4MDAsIDB4OTEsIDB4ZTUsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgwMCwgMHg1MCwgMHhhMCwgMHhlMSwKKwkweDAzLCAweDQwLCAweGEwLCAweGUxLCAweGEyLCAweDAyLCAweGEwLCAweGUxLCAweDA4LCAweDAwLCAweDAwLCAweGUyLCAweDAzLCAweDAwLCAweDgwLCAweGUyLAorCTB4ZDgsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YzEsIDB4ZTUsIDB4MDEsIDB4MjAsIDB4YzEsIDB4ZTUsIDB4ZTIsIDB4ZmYsIDB4ZmYsIDB4ZWIsCisJMHgwMSwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgxYSwgMHgxNCwgMHgwMCwgMHhhMCwgMHhlMywgMHhjNCwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweDA0LCAweDIwLCAweGEwLCAweGUxLCAweDA1LCAweDEwLCAweGEwLCAweGUxLCAweDAyLCAweDAwLCAweGEwLCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweGViLAorCTB4MzAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NzAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4ZjMsIDB4NDYsIDB4YTAsIDB4ZTMsCisJMHgwMCwgMHgzMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgwMCwgMHg1MCwgMHhlMywgMHgwOCwgMHgwMCwgMHgwMCwgMHg5YSwgMHg4YywgMHg1MCwgMHg5ZiwgMHhlNSwKKwkweDAzLCAweDYwLCAweGQ1LCAweGU3LCAweDBjLCAweDYwLCAweDg0LCAweGU1LCAweDEwLCAweDYwLCAweDk0LCAweGU1LCAweDAyLCAweDAwLCAweDE2LCAweGUzLAorCTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDEsIDB4MzAsIDB4ODMsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4NTMsIDB4ZTEsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4M2EsCisJMHhmZiwgMHgzMCwgMHhhMCwgMHhlMywgMHgwYywgMHgzMCwgMHg4NCwgMHhlNSwgMHgwOCwgMHgwMCwgMHg5NCwgMHhlNSwgMHgxMCwgMHgwMCwgMHg5NCwgMHhlNSwKKwkweDAxLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDA4LCAweDAwLCAweDk0LCAweGU1LCAweDAwLCAweDAwLCAweGEwLCAweGUzLAorCTB4MDAsIDB4MDAsIDB4NTIsIDB4ZTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4OWEsIDB4MTAsIDB4NTAsIDB4OTQsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTUsIDB4ZTMsCisJMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwYywgMHgzMCwgMHg4NCwgMHhlNSwgMHgxMCwgMHg1MCwgMHg5NCwgMHhlNSwgMHgwMSwgMHgwMCwgMHgxNSwgMHhlMywKKwkweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDA4LCAweDUwLCAweDk0LCAweGU1LCAweDAxLCAweDUwLCAweGMxLCAweGU0LCAweDAxLCAweDAwLCAweDgwLCAweGUyLAorCTB4MDIsIDB4MDAsIDB4NTAsIDB4ZTEsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4M2EsIDB4YzgsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4OTgsIDB4ZmYsIDB4ZmYsIDB4ZWIsCisJMHg3MCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMSwgMHgwYywgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwKKwkweDAwLCAweDAxLCAweDAwLCAweDAyCiB9OwogCiBzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSB7CkBAIC00MzMsNyArNDMzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBkZXZpY2UgKnN5c19kZXY7CiAJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwotCXNwaW5sb2NrX3QgaXJxbG9jaywgdGltZXJsb2NrOwkvLyBzcGlubG9ja3MKKwlzcGlubG9ja190IGlycWxvY2ssIHRpbWVybG9jazsJLyogc3BpbmxvY2tzICovCiAJZW51bSB7IEJVU19UWVBFX1BDQ0FSRCwgQlVTX1RZUEVfUENJIH0gYnVzX3R5cGU7CiAJZW51bSB7CiAJCUNBUkRfVFlQRV9QQVJBTExFTF9GTEFTSCwKQEAgLTU0MSw3ICs1NDEsNyBAQAogCXU4IHJ4X2J1ZltNQVhfV0lSRUxFU1NfQk9EWV07CiB9OwogCi1zdGF0aWMgdTggYXRtZWxfYmFzaWNfcmF0ZXNbNF0gPSB7MHg4MiwweDg0LDB4MGIsMHgxNn07CitzdGF0aWMgdTggYXRtZWxfYmFzaWNfcmF0ZXNbNF0gPSB7MHg4MiwgMHg4NCwgMHgwYiwgMHgxNn07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWludCByZWdfZG9tYWluOwpAQCAtMTI4MywxNyArMTI4MywxNyBAQAogCiBzdGF0aWMgaW50IGF0bWVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0gICAgICAgIGlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IDIzMTIpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICBkZXYtPm10dSA9IG5ld19tdHU7Ci0gICAgICAgIHJldHVybiAwOworCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IDIzMTIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXRtZWxfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAotICAgICAgICBtZW1jcHkgKGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCW1lbWNweSAoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAJcmV0dXJuIGF0bWVsX29wZW4oZGV2KTsKIH0KIApAQCAtMTQyMCwxMCArMTQyMCwxNyBAQAogCQkJCSAgICAgcHJpdi0+ZmlybXdhcmVfaWQpOwogCiAJCXN3aXRjaCAocHJpdi0+Y2FyZF90eXBlKSB7Ci0JCWNhc2UgQ0FSRF9UWVBFX1BBUkFMTEVMX0ZMQVNIOiBjID0gIlBhcmFsbGVsIGZsYXNoIjsgYnJlYWs7Ci0JCWNhc2UgQ0FSRF9UWVBFX1NQSV9GTEFTSDogYyA9ICJTUEkgZmxhc2hcbiI7IGJyZWFrOwotCQljYXNlIENBUkRfVFlQRV9FRVBST006IGMgPSAiRUVQUk9NIjsgYnJlYWs7Ci0JCWRlZmF1bHQ6IGMgPSAiPHVua25vd24+IjsKKwkJY2FzZSBDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0g6CisJCQljID0gIlBhcmFsbGVsIGZsYXNoIjsKKwkJCWJyZWFrOworCQljYXNlIENBUkRfVFlQRV9TUElfRkxBU0g6CisJCQljID0gIlNQSSBmbGFzaFxuIjsKKwkJCWJyZWFrOworCQljYXNlIENBUkRfVFlQRV9FRVBST006CisJCQljID0gIkVFUFJPTSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWMgPSAiPHVua25vd24+IjsKIAkJfQogCiAJCXIgPSAiPHVua25vd24+IjsKQEAgLTE0MzksMTYgKzE0NDYsMzMgQEAKIAkJCSAgICAgcHJpdi0+dXNlX3dwYSA/ICJZZXMiIDogIk5vIik7CiAJfQogCi0Jc3dpdGNoKHByaXYtPnN0YXRpb25fc3RhdGUpIHsKLQljYXNlIFNUQVRJT05fU1RBVEVfU0NBTk5JTkc6IHMgPSAiU2Nhbm5pbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfSk9JTk5JTkc6IHMgPSAiSm9pbmluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9BVVRIRU5USUNBVElORzogcyA9ICJBdXRoZW50aWNhdGluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9BU1NPQ0lBVElORzogcyA9ICJBc3NvY2lhdGluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9SRUFEWTogcyA9ICJSZWFkeSI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HOiBzID0gIlJlYXNzb2NpYXRpbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfTUdNVF9FUlJPUjogcyA9ICJNYW5hZ2VtZW50IGVycm9yIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0RPV046IHMgPSAiRG93biI7IGJyZWFrOwotCWRlZmF1bHQ6IHMgPSAiPHVua25vd24+IjsKKwlzd2l0Y2ggKHByaXYtPnN0YXRpb25fc3RhdGUpIHsKKwljYXNlIFNUQVRJT05fU1RBVEVfU0NBTk5JTkc6CisJCXMgPSAiU2Nhbm5pbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfSk9JTk5JTkc6CisJCXMgPSAiSm9pbmluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9BVVRIRU5USUNBVElORzoKKwkJcyA9ICJBdXRoZW50aWNhdGluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9BU1NPQ0lBVElORzoKKwkJcyA9ICJBc3NvY2lhdGluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9SRUFEWToKKwkJcyA9ICJSZWFkeSI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HOgorCQlzID0gIlJlYXNzb2NpYXRpbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfTUdNVF9FUlJPUjoKKwkJcyA9ICJNYW5hZ2VtZW50IGVycm9yIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0RPV046CisJCXMgPSAiRG93biI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXMgPSAiPHVua25vd24+IjsKIAl9CiAKIAlwICs9IHNwcmludGYocCwgIkN1cnJlbnQgc3RhdGU6XHRcdCVzXG4iLCBzKTsKQEAgLTE0NTgsMTYgKzE0ODIsMzAgQEAKIHN0YXRpYyBpbnQgYXRtZWxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogCQkJICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBkYXRhOworCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gZGF0YTsKIAlpbnQgbGVuID0gYXRtZWxfcHJvY19vdXRwdXQgKHBhZ2UsIHByaXYpOwotICAgICAgICBpZiAobGVuIDw9IG9mZitjb3VudCkgKmVvZiA9IDE7Ci0gICAgICAgICpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0gICAgICAgIGxlbiAtPSBvZmY7Ci0gICAgICAgIGlmIChsZW4+Y291bnQpIGxlbiA9IGNvdW50OwotICAgICAgICBpZiAobGVuPDApIGxlbiA9IDA7Ci0gICAgICAgIHJldHVybiBsZW47CisJaWYgKGxlbiA8PSBvZmYrY291bnQpCisJCSplb2YgPSAxOworCSpzdGFydCA9IHBhZ2UgKyBvZmY7CisJbGVuIC09IG9mZjsKKwlpZiAobGVuID4gY291bnQpCisJCWxlbiA9IGNvdW50OworCWlmIChsZW4gPCAwKQorCQlsZW4gPSAwOworCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXRtZWxfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGF0bWVsX29wZW4sCisJLm5kb19zdG9wCQk9IGF0bWVsX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSAJPSBhdG1lbF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGF0bWVsX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3N0YXJ0X3htaXQgCT0gc3RhcnRfdHgsCisJLm5kb19kb19pb2N0bCAJCT0gYXRtZWxfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCh1bnNpZ25lZCBzaG9ydCBpcnEsIHVuc2lnbmVkIGxvbmcgcG9ydCwKIAkJCQkgICBjb25zdCBBdG1lbEZXVHlwZSBmd190eXBlLAogCQkJCSAgIHN0cnVjdCBkZXZpY2UgKnN5c19kZXYsCkBAIC0xNDc5LDExICsxNTE3LDExIEBACiAJaW50IHJjOwogCiAJLyogQ3JlYXRlIHRoZSBuZXR3b3JrIGRldmljZSBvYmplY3QuICovCi0gICAgICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqcHJpdikpOwotICAgICAgICBpZiAoIWRldikgeworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqcHJpdikpOworCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRtZWw6IENvdWxkbid0IGFsbG9jX2V0aGVyZGV2XG4iKTsKIAkJcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKwl9CiAJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbDogQ291bGRuJ3QgZ2V0IG5hbWUhXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CkBAIC0xNTUyLDEzICsxNTkwLDggQEAKIAlwcml2LT5tYW5hZ2VtZW50X3RpbWVyLmZ1bmN0aW9uID0gYXRtZWxfbWFuYWdlbWVudF90aW1lcjsKIAlwcml2LT5tYW5hZ2VtZW50X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwogCi0JZGV2LT5vcGVuID0gYXRtZWxfb3BlbjsKLQlkZXYtPnN0b3AgPSBhdG1lbF9jbG9zZTsKLQlkZXYtPmNoYW5nZV9tdHUgPSBhdG1lbF9jaGFuZ2VfbXR1OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYXRtZWxfc2V0X21hY19hZGRyZXNzOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc3RhcnRfdHg7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmYXRtZWxfaGFuZGxlcl9kZWY7Ci0JZGV2LT5kb19pb2N0bCA9IGF0bWVsX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZhdG1lbF9uZXRkZXZfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYXRtZWxfaGFuZGxlcl9kZWY7CiAJZGV2LT5pcnEgPSBpcnE7CiAJZGV2LT5iYXNlX2FkZHIgPSBwb3J0OwogCkBAIC0xNTc3LDcgKzE2MTAsNyBAQAogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkKIAkJZ290byBlcnJfb3V0X3JlczsKIAotCWlmICghcHJvYmVfYXRtZWxfY2FyZChkZXYpKXsKKwlpZiAoIXByb2JlX2F0bWVsX2NhcmQoZGV2KSkgewogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KQEAgLTE1OTQsNyArMTYyNyw3IEBACiAJcmV0dXJuIGRldjsKIAogZXJyX291dF9yZXM6Ci0JcmVsZWFzZV9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCAzMik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIDMyKTsKIGVycl9vdXRfaXJxOgogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogZXJyX291dF9mcmVlOgpAQCAtMTYzMiw3ICsxNjY1LDcgQEAKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBDaGVjayBpZiB3ZSBhc2tlZCBmb3IgYGFueScgKi8KLQlpZihkd3JxLT5mbGFncyA9PSAwKSB7CisJaWYgKGR3cnEtPmZsYWdzID09IDApIHsKIAkJcHJpdi0+Y29ubmVjdF90b19hbnlfQlNTID0gMTsKIAl9IGVsc2UgewogCQlpbnQgaW5kZXggPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKQEAgLTE3NjgsNyArMTgwMSw3IEBACiAJfQogCWlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQogCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMTsKLQlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorCWlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQogCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMDsKIAogCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCkBAIC0xNzk3LDcgKzE4MzAsNyBAQAogCS8qIENvcHkgdGhlIGtleSB0byB0aGUgdXNlciBidWZmZXIgKi8KIAlkd3JxLT5sZW5ndGggPSBwcml2LT53ZXBfa2V5X2xlbltpbmRleF07CiAJaWYgKGR3cnEtPmxlbmd0aCA+IDE2KSB7Ci0JCWR3cnEtPmxlbmd0aD0wOworCQlkd3JxLT5sZW5ndGggPSAwOwogCX0gZWxzZSB7CiAJCW1lbXNldChleHRyYSwgMCwgMTYpOwogCQltZW1jcHkoZXh0cmEsIHByaXYtPndlcF9rZXlzW2luZGV4XSwgZHdycS0+bGVuZ3RoKTsKQEAgLTIwMTMsMTEgKzIwNDYsMjAgQEAKIAkJfSBlbHNlIHsKIAkJLyogU2V0dGluZyBieSBmcmVxdWVuY3kgdmFsdWUgKi8KIAkJCXN3aXRjaCAodndycS0+dmFsdWUpIHsKLQkJCWNhc2UgIDEwMDAwMDA6IHByaXYtPnR4X3JhdGUgPSAwOyBicmVhazsKLQkJCWNhc2UgIDIwMDAwMDA6IHByaXYtPnR4X3JhdGUgPSAxOyBicmVhazsKLQkJCWNhc2UgIDU1MDAwMDA6IHByaXYtPnR4X3JhdGUgPSAyOyBicmVhazsKLQkJCWNhc2UgMTEwMDAwMDA6IHByaXYtPnR4X3JhdGUgPSAzOyBicmVhazsKLQkJCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCQkJY2FzZSAgMTAwMDAwMDoKKwkJCQlwcml2LT50eF9yYXRlID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgIDIwMDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICA1NTAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAyOworCQkJCWJyZWFrOworCQkJY2FzZSAxMTAwMDAwMDoKKwkJCQlwcml2LT50eF9yYXRlID0gMzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KIAl9CkBAIC0yMDYyLDExICsyMTA0LDE5IEBACiAJCXZ3cnEtPnZhbHVlID0gMTEwMDAwMDA7CiAJfSBlbHNlIHsKIAkJdndycS0+Zml4ZWQgPSAxOwotCQlzd2l0Y2gocHJpdi0+dHhfcmF0ZSkgewotCQljYXNlIDA6IHZ3cnEtPnZhbHVlID0gIDEwMDAwMDA7IGJyZWFrOwotCQljYXNlIDE6IHZ3cnEtPnZhbHVlID0gIDIwMDAwMDA7IGJyZWFrOwotCQljYXNlIDI6IHZ3cnEtPnZhbHVlID0gIDU1MDAwMDA7IGJyZWFrOwotCQljYXNlIDM6IHZ3cnEtPnZhbHVlID0gMTEwMDAwMDA7IGJyZWFrOworCQlzd2l0Y2ggKHByaXYtPnR4X3JhdGUpIHsKKwkJY2FzZSAwOgorCQkJdndycS0+dmFsdWUgPSAgMTAwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl2d3JxLT52YWx1ZSA9ICAyMDAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXZ3cnEtPnZhbHVlID0gIDU1MDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdndycS0+dmFsdWUgPSAxMTAwMDAwMDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMjU3Niw4ICsyNjI2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBhdG1lbF9oYW5kbGVyX2RlZiA9Ci17CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGF0bWVsX2hhbmRsZXJfZGVmID0gewogCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGF0bWVsX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZQk9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9oYW5kbGVyKSwKIAkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9hcmdzKSwKQEAgLTI4MzQsNyArMjg4Myw3IEBACiAKIAlpZiAocHJpdi0+d2VwX2lzX29uICYmIHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gIT0gMSkKIAkJLyogbm8gV0VQIGZvciBhdXRoZW50aWNhdGlvbiBmcmFtZXMgd2l0aCBUclNlcU5vIDEgKi8KLSAgICAgICAgICAgICAgICBoZWFkZXIuZnJhbWVfY29udHJvbCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkJaGVhZGVyLmZyYW1lX2NvbnRyb2wgfD0gIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKIAlhdXRoLmFsZyA9IGNwdV90b19sZTE2KHN5c3RlbSk7CiAKQEAgLTI5NjksNyArMzAxOCw3IEBACiAJCWlmIChtZW1jbXAoYnNzLCBwcml2LT5CU1NpbmZvW2ldLkJTU0lELCA2KSA9PSAwKQogCQkJaW5kZXggPSBpOwogCi0gICAgICAgIC8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMKKwkvKiBJZiB3ZSBwcm9jZXNzIGEgcHJvYmUgYW5kIGFuIGVudHJ5IGZyb20gdGhpcyBCU1MgZXhpc3RzCiAJICAgd2Ugd2lsbCB1cGRhdGUgdGhlIEJTUyBlbnRyeSB3aXRoIHRoZSBpbmZvIGZyb20gdGhpcyBCU1MuCiAJICAgSWYgd2UgcHJvY2VzcyBhIGJlYWNvbiB3ZSB3aWxsIG9ubHkgdXBkYXRlIFJTU0kgKi8KIApAQCAtMjk5NSw3ICszMDQ0LDcgQEAKIAlpZiAoY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQogCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID0gSVdfTU9ERV9BREhPQzsKIAllbHNlIGlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKLQkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9SVdfTU9ERV9JTkZSQTsKKwkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9IElXX01PREVfSU5GUkE7CiAKIAlwcml2LT5CU1NpbmZvW2luZGV4XS5wcmVhbWJsZSA9IGNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUgPwogCQlTSE9SVF9QUkVBTUJMRSA6IExPTkdfUFJFQU1CTEU7CkBAIC0zMDQyLDcgKzMwOTEsNyBAQAogCQl9CiAKIAkJaWYgKHNob3VsZF9hc3NvY2lhdGUpIHsKLQkJCWlmKHByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQpIHsKKwkJCWlmIChwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkKSB7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HKTsKIAkJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMSk7CiAJCQkJcmV0dXJuOwpAQCAtMzA2Myw4ICszMTEyLDggQEAKIAkJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwogCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIFdMQU5fQVVUSF9TSEFSRURfS0VZLCBOVUxMLCAwKTsKIAkJCXJldHVybjsKLQkJfSBlbHNlIGlmICggICBzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKLQkJICAgICAgICAgICAmJiBwcml2LT53ZXBfaXNfb24pIHsKKwkJfSBlbHNlIGlmIChzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKKwkJCSAgICYmIHByaXYtPndlcF9pc19vbikgewogCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAxOwogCQkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CiAJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgV0xBTl9BVVRIX09QRU4sIE5VTEwsIDApOwpAQCAtMzI1MiwxMSArMzMwMSwxMSBAQAogCXU4IG1heF9yc3NpID0gNDI7IC8qIDUwMi1ybWZkLXJldmQgbWF4IGJ5IGV4cGVyaW1lbnQsIGRlZmF1bHQgZm9yIG5vdyAqLwogCiAJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgQVRNRUxfRldfVFlQRV81MDJFOgotCQkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIEFUTUVMX0ZXX1RZUEVfNTAyRToKKwkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlyc3NpID0gcnNzaSAqIDEwMCAvIG1heF9yc3NpOwpAQCAtMzQ3Myw4ICszNTIyLDcgQEAKIAkgICAgc3RhdHVzID09IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpCiAJCXJldHVybjsKIAotCXN3aXRjaCAoY29tbWFuZCl7Ci0KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKIAljYXNlIENNRF9TdGFydDoKIAkJaWYgKHN0YXR1cyA9PSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CiAJCQlwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkID0gcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkOwpAQCAtMzcwOSw3ICszNzU3LDcgQEAKIAogCWlmIChyYykgewogCQlpZiAoZGV2LT5kZXZfYWRkclswXSA9PSAweEZGKSB7Ci0JCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsMHgwNCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsIDB4MDQsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDB9OwogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiAqKiogSW52YWxpZCBNQUMgYWRkcmVzcy4gVVBHUkFERSBGaXJtd2FyZSAqKioqXG4iLCBkZXYtPm5hbWUpOwogCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRlZmF1bHRfbWFjLCA2KTsKIAkJfQpAQCAtMzgwMyw3ICszODUxLDcgQEAKIAkJCQl9IGVsc2UgewogCQkJCQltaWIuZ3JvdXBfa2V5ID0gaTsKIAkJCQkJcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlID0gcHJpdi0+cGFpcndpc2VfY2lwaGVyX3N1aXRlOwotCQkJCSAgICAgICAgbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0xXSA9IDE7CisJCQkJCW1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMV0gPSAxOwogCQkJCQltaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTJdID0gcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlOwogCQkJCX0KIAkJCX0KQEAgLTM5MTMsNyArMzk2MSw3IEBACiAJCQlsZW4gPSBmd19lbnRyeS0+c2l6ZTsKIAkJfQogCi0JICAgICAgICBpZiAobGVuIDw9IDB4NjAwMCkgeworCQlpZiAobGVuIDw9IDB4NjAwMCkgewogCQkJYXRtZWxfd3JpdGUxNihwcml2LT5kZXYsIEJTUiwgQlNTX0lSQU0pOwogCQkJYXRtZWxfY29weV90b19jYXJkKHByaXYtPmRldiwgMCwgZncsIGxlbik7CiAJCQlhdG1lbF9zZXRfZ2NyKHByaXYtPmRldiwgR0NSX1JFTUFQKTsKQEAgLTM5NDIsNyArMzk5MCw3IEBACiAJcHJpdi0+dXNlX3dwYSA9IChwcml2LT5ob3N0X2luZm8ubWFqb3JfdmVyc2lvbiA9PSA0KTsKIAlwcml2LT5yYWRpb19vbl9icm9rZW4gPSAocHJpdi0+aG9zdF9pbmZvLm1ham9yX3ZlcnNpb24gPT0gNSk7CiAKLSAgICAgICAgLyogdW5tYXNrIGFsbCBpcnEgc291cmNlcyAqLworCS8qIHVubWFzayBhbGwgaXJxIHNvdXJjZXMgKi8KIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9JTlRfTUFTS19PRkZTRVQpLCAweGZmKTsKIAogCS8qIGludCBUeCBzeXN0ZW0gYW5kIGVuYWJsZSBUeCAqLwpAQCAtMzk3NSw3ICs0MDIzLDcgQEAKIAkJICAgIENNRF9TVEFUVVNfUkVKRUNURURfUkFESU9fT0ZGKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogY2Fubm90IHR1cm4gdGhlIHJhZGlvIG9uLlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIApAQCAtMzk5OSw4ICs0MDQ3LDcgQEAKIAllbHNlCiAJCWJ1aWxkX3dlcF9taWIocHJpdik7CiAKLQlpZiAob2xkX3N0YXRlID09IFNUQVRJT05fU1RBVEVfUkVBRFkpCi0JeworCWlmIChvbGRfc3RhdGUgPT0gU1RBVElPTl9TVEFURV9SRUFEWSkgewogCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CkBAIC00Mjc3LDI0ICs0MzI0LDI0IEBACiAJLnNldCBOVlJBTV9MRU5HVEgsIDB4MDIwMAogCS5zZXQgTUFDX0FERFJFU1NfTUlCLCBTUkFNX0JBU0UKIAkuc2V0IE1BQ19BRERSRVNTX0xFTkdUSCwgNgotICAgICAgICAuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKKwkuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKIAkuc2V0IE1SMSwgMAogCS5zZXQgTVIyLCA0CiAJLnNldCBNUjMsIDgKIAkuc2V0IE1SNCwgMHhDCiBSRVNFVF9WRUNUT1I6Ci0gICAgICAgIGIgUkVTRVRfSEFORExFUgorCWIgUkVTRVRfSEFORExFUgogVU5ERUZfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogU1dJX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIElBQk9SVF9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBEQUJPUlRfVkVDVE9SOgogUkVTRVJWRURfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogSVJRX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIEZJUV9WRUNUT1I6CiAJYiBIQUxUMQogSEFMVDE6CWIgSEFMVDEKQEAgLTQzMDYsNyArNDM1Myw3IEBACiAJbGRyCXIwLCA9U1BJX0NHRU5fQkFTRQogCW1vdglyMSwgIzAKIAltb3YJcjEsIHIxLCBsc2wgIzMKLQlvcnIJcjEscjEsICMwCisJb3JyCXIxLCByMSwgIzAKIAlzdHIJcjEsIFtyMF0KIAlsZHIJcjEsIFtyMCwgIzI4XQogCWJpYwlyMSwgcjEsICMxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCmluZGV4IGI0NTczMTAuLmJlYWYxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKQEAgLTU1MCw5ICs1NTAsNiBAQAogCiBzdHJ1Y3QgYjQzX3N0YXRzIHsKIAl1OCBsaW5rX25vaXNlOwotCS8qIFN0b3JlIHRoZSBsYXN0IFRYL1JYIHRpbWVzIGhlcmUgZm9yIHVwZGF0aW5nIHRoZSBsZWRzLiAqLwotCXVuc2lnbmVkIGxvbmcgbGFzdF90eDsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CiB9OwogCiBzdHJ1Y3QgYjQzX2tleSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYwppbmRleCBiYzI3NjdkLi40NWUzZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKQEAgLTUxLDggKzUxLDggQEAKIH07CiAKIHN0YXRpYyBpbmxpbmUKLXN0cnVjdCBiNDNfZGZzX2ZpbGUgKiBmb3BzX3RvX2Rmc19maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19kZWJ1Z2ZzX2ZvcHMgKmRmb3BzKQorc3RydWN0IGI0M19kZnNfZmlsZSAqZm9wc190b19kZnNfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M19kZWJ1Z2ZzX2ZvcHMgKmRmb3BzKQogewogCXZvaWQgKnA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCA2ZDY1YTAyLi4wY2M4MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC00MSw2ICs0MSwxMiBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAKKy8qIFJlcXVpcmVkIG51bWJlciBvZiBUWCBETUEgc2xvdHMgcGVyIFRYIGZyYW1lLgorICogVGhpcyBjdXJyZW50bHkgaXMgMiwgYmVjYXVzZSB3ZSBwdXQgdGhlIGhlYWRlciBhbmQgdGhlIGllZWU4MDIxMSBmcmFtZQorICogaW50byBzZXBhcmF0ZSBzbG90cy4gKi8KKyNkZWZpbmUgVFhfU0xPVFNfUEVSX0ZSQU1FCTIKKworCiAvKiAzMmJpdCBETUEgb3BzLiAqLwogc3RhdGljCiBzdHJ1Y3QgYjQzX2RtYWRlc2NfZ2VuZXJpYyAqb3AzMl9pZHgyZGVzYyhzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcsCkBAIC03NCw4ICs4MCw3IEBACiAJYWRkcmV4dCA9ICh1MzIpIChkbWFhZGRyICYgU1NCX0RNQV9UUkFOU0xBVElPTl9NQVNLKQogCSAgICA+PiBTU0JfRE1BX1RSQU5TTEFUSU9OX1NISUZUOwogCWFkZHIgfD0gc3NiX2RtYV90cmFuc2xhdGlvbihyaW5nLT5kZXYtPmRldik7Ci0JY3RsID0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKLQkgICAgJiBCNDNfRE1BMzJfRENUTF9CWVRFQ05UOworCWN0bCA9IGJ1ZnNpemUgJiBCNDNfRE1BMzJfRENUTF9CWVRFQ05UOwogCWlmIChzbG90ID09IHJpbmctPm5yX3Nsb3RzIC0gMSkKIAkJY3RsIHw9IEI0M19ETUEzMl9EQ1RMX0RUQUJMRUVORDsKIAlpZiAoc3RhcnQpCkBAIC0xNzcsOCArMTgyLDcgQEAKIAkJY3RsMCB8PSBCNDNfRE1BNjRfRENUTDBfRlJBTUVFTkQ7CiAJaWYgKGlycSkKIAkJY3RsMCB8PSBCNDNfRE1BNjRfRENUTDBfSVJROwotCWN0bDEgfD0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKLQkgICAgJiBCNDNfRE1BNjRfRENUTDFfQllURUNOVDsKKwljdGwxIHw9IGJ1ZnNpemUgJiBCNDNfRE1BNjRfRENUTDFfQllURUNOVDsKIAljdGwxIHw9IChhZGRyZXh0IDw8IEI0M19ETUE2NF9EQ1RMMV9BRERSRVhUX1NISUZUKQogCSAgICAmIEI0M19ETUE2NF9EQ1RMMV9BRERSRVhUX01BU0s7CiAKQEAgLTU3NiwxMiArNTgwLDExIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwKIAkJCQkJIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApOwotCX0KLQotCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCkpIHsKLQkJYjQzZXJyKHJpbmctPmRldi0+d2wsICJSWCBETUEgYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIC1FSU87CisJCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCkpIHsKKwkJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiUlggRE1BIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAl9CiAKIAltZXRhLT5za2IgPSBza2I7CkBAIC04MzAsOSArODMzLDYgQEAKIAkJaWYgKHJpbmctPmluZGV4ID09IDApIHsKIAkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCNDNfRE1BMF9SWF9CVUZGRVJTSVpFOwogCQkJcmluZy0+ZnJhbWVvZmZzZXQgPSBCNDNfRE1BMF9SWF9GUkFNRU9GRlNFVDsKLQkJfSBlbHNlIGlmIChyaW5nLT5pbmRleCA9PSAzKSB7Ci0JCQlyaW5nLT5yeF9idWZmZXJzaXplID0gQjQzX0RNQTNfUlhfQlVGRkVSU0laRTsKLQkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQjQzX0RNQTNfUlhfRlJBTUVPRkZTRVQ7CiAJCX0gZWxzZQogCQkJQjQzX1dBUk5fT04oMSk7CiAJfQpAQCAtODQyLDcgKzg0MiwxMCBAQAogI2VuZGlmCiAKIAlpZiAoZm9yX3R4KSB7Ci0JCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhyaW5nLT5ucl9zbG90cywKKwkJLyogQXNzdW1wdGlvbjogQjQzX1RYUklOR19TTE9UUyBjYW4gYmUgZGl2aWRlZCBieSBUWF9TTE9UU19QRVJfRlJBTUUgKi8KKwkJQlVJTERfQlVHX09OKEI0M19UWFJJTkdfU0xPVFMgJSBUWF9TTE9UU19QRVJfRlJBTUUgIT0gMCk7CisKKwkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FLAogCQkJCQkgICAgYjQzX3R4aGRyX3NpemUoZGV2KSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQpAQCAtODU4LDcgKzg2MSw3IEBACiAJCQkJCSAgYjQzX3R4aGRyX3NpemUoZGV2KSwgMSkpIHsKIAkJCS8qIHVnaCByZWFsbG9jICovCiAJCQlrZnJlZShyaW5nLT50eGhkcl9jYWNoZSk7Ci0JCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMsCisJCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUUsCiAJCQkJCQkgICAgYjQzX3R4aGRyX3NpemUoZGV2KSwKIAkJCQkJCSAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQpAQCAtMTE0OSw3ICsxMTUyLDEwIEBACiAJdTE2IGNvb2tpZTsKIAlzaXplX3QgaGRyc2l6ZSA9IGI0M190eGhkcl9zaXplKHJpbmctPmRldik7CiAKLSNkZWZpbmUgU0xPVFNfUEVSX1BBQ0tFVCAgMgorCS8qIEltcG9ydGFudCBub3RlOiBJZiB0aGUgbnVtYmVyIG9mIHVzZWQgRE1BIHNsb3RzIHBlciBUWCBmcmFtZQorCSAqIGlzIGNoYW5nZWQgaGVyZSwgdGhlIFRYX1NMT1RTX1BFUl9GUkFNRSBkZWZpbml0aW9uIGF0IHRoZSB0b3Agb2YKKwkgKiB0aGUgZmlsZSBoYXMgdG8gYmUgdXBkYXRlZCwgdG9vIQorCSAqLwogCiAJb2xkX3RvcF9zbG90ID0gcmluZy0+Y3VycmVudF9zbG90OwogCW9sZF91c2VkX3Nsb3RzID0gcmluZy0+dXNlZF9zbG90czsKQEAgLTExNTksNyArMTE2NSw3IEBACiAJZGVzYyA9IG9wcy0+aWR4MmRlc2MocmluZywgc2xvdCwgJm1ldGFfaGRyKTsKIAltZW1zZXQobWV0YV9oZHIsIDAsIHNpemVvZigqbWV0YV9oZHIpKTsKIAotCWhlYWRlciA9ICYocmluZy0+dHhoZHJfY2FjaGVbc2xvdCAqIGhkcnNpemVdKTsKKwloZWFkZXIgPSAmKHJpbmctPnR4aGRyX2NhY2hlWyhzbG90IC8gVFhfU0xPVFNfUEVSX0ZSQU1FKSAqIGhkcnNpemVdKTsKIAljb29raWUgPSBnZW5lcmF0ZV9jb29raWUocmluZywgc2xvdCk7CiAJZXJyID0gYjQzX2dlbmVyYXRlX3R4aGRyKHJpbmctPmRldiwgaGVhZGVyLAogCQkJCSBza2ItPmRhdGEsIHNrYi0+bGVuLCBpbmZvLCBjb29raWUpOwpAQCAtMTI1NCw4ICsxMjYwLDggQEAKIH0KIAogLyogU3RhdGljIG1hcHBpbmcgb2YgbWFjODAyMTEncyBxdWV1ZXMgKHByaW9yaXRpZXMpIHRvIGI0MyBETUEgcmluZ3MuICovCi1zdGF0aWMgc3RydWN0IGI0M19kbWFyaW5nICogc2VsZWN0X3JpbmdfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJICAgIHU4IHF1ZXVlX3ByaW8pCitzdGF0aWMgc3RydWN0IGI0M19kbWFyaW5nICpzZWxlY3RfcmluZ19ieV9wcmlvcml0eShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICB1OCBxdWV1ZV9wcmlvKQogewogCXN0cnVjdCBiNDNfZG1hcmluZyAqcmluZzsKIApAQCAtMTMwNiwxNyArMTMxMiwxOSBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisKIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwotCWlmICh1bmxpa2VseShmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkpIHsKLQkJYjQzd2FybihkZXYtPndsLCAiRE1BIHF1ZXVlIG92ZXJmbG93XG4iKTsKLQkJZXJyID0gLUVOT1NQQzsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KIAkvKiBDaGVjayBpZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQgaW4gbWFjODAyMTEsCiAJICogYnV0IHdlIGdvdCBjYWxsZWQgbmV2ZXJ0aGVsZXNzLgogCSAqIFRoYXQgd291bGQgYmUgYSBtYWM4MDIxMSBidWcuICovCiAJQjQzX1dBUk5fT04ocmluZy0+c3RvcHBlZCk7CiAKKwlpZiAodW5saWtlbHkoZnJlZV9zbG90cyhyaW5nKSA8IFRYX1NMT1RTX1BFUl9GUkFNRSkpIHsKKwkJYjQzd2FybihkZXYtPndsLCAiRE1BIHF1ZXVlIG92ZXJmbG93XG4iKTsKKwkJZXJyID0gLUVOT1NQQzsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCS8qIEFzc2lnbiB0aGUgcXVldWUgbnVtYmVyIHRvIHRoZSByaW5nIChpZiBub3QgYWxyZWFkeSBkb25lIGJlZm9yZSkKIAkgKiBzbyBUWCBzdGF0dXMgaGFuZGxpbmcgY2FuIHVzZSBpdC4gVGhlIHF1ZXVlIHRvIHJpbmcgbWFwcGluZyBpcwogCSAqIHN0YXRpYywgc28gd2UgZG9uJ3QgbmVlZCB0byBzdG9yZSBpdCBwZXIgZnJhbWUuICovCkBAIC0xMzM1LDcgKzEzNDMsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCXJpbmctPm5yX3R4X3BhY2tldHMrKzsKLQlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBTTE9UU19QRVJfUEFDS0VUKSB8fAorCWlmICgoZnJlZV9zbG90cyhyaW5nKSA8IFRYX1NMT1RTX1BFUl9GUkFNRSkgfHwKIAkgICAgc2hvdWxkX2luamVjdF9vdmVyZmxvdyhyaW5nKSkgewogCQkvKiBUaGlzIFRYIHJpbmcgaXMgZnVsbC4gKi8KIAkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LT53bC0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKQEAgLTE0MTcsOSArMTQyNSw4IEBACiAJCQlicmVhazsKIAkJc2xvdCA9IG5leHRfc2xvdChyaW5nLCBzbG90KTsKIAl9Ci0JZGV2LT5zdGF0cy5sYXN0X3R4ID0gamlmZmllczsKIAlpZiAocmluZy0+c3RvcHBlZCkgewotCQlCNDNfV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCk7CisJCUI0M19XQVJOX09OKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpOwogCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYtPndsLT5odywgcmluZy0+cXVldWVfcHJpbyk7CiAJCXJpbmctPnN0b3BwZWQgPSAwOwogCQlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19ETUFWRVJCT1NFKSkgewpAQCAtMTQ0Miw4ICsxNDQ5LDggQEAKIAkJcmluZyA9IHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KGRldiwgaSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKLQkJc3RhdHNbaV0ubGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFNMT1RTX1BFUl9QQUNLRVQ7Ci0JCXN0YXRzW2ldLmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOworCQlzdGF0c1tpXS5sZW4gPSByaW5nLT51c2VkX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FOworCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FOwogCQlzdGF0c1tpXS5jb3VudCA9IHJpbmctPm5yX3R4X3BhY2tldHM7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKaW5kZXggZDFlYjVjMC4uMDVkZGU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaApAQCAtMSwxNCArMSwxMiBAQAogI2lmbmRlZiBCNDNfRE1BX0hfCiAjZGVmaW5lIEI0M19ETUFfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJiNDMuaCIKIAorCiAvKiBETUEtSW50ZXJydXB0IHJlYXNvbnMuICovCiAjZGVmaW5lIEI0M19ETUFJUlFfRkFUQUxNQVNLCSgoMSA8PCAxMCkgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMikgXAogCQkJCQkgfCAoMSA8PCAxNCkgfCAoMSA8PCAxNSkpCkBAIC0xNjEsMTQgKzE1OSwxMyBAQAogCiAvKiBNaXNjIERNQSBjb25zdGFudHMgKi8KICNkZWZpbmUgQjQzX0RNQV9SSU5HTUVNU0laRQkJUEFHRV9TSVpFCi0jZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCTMwCi0jZGVmaW5lIEI0M19ETUEzX1JYX0ZSQU1FT0ZGU0VUCTAKKyNkZWZpbmUgQjQzX0RNQTBfUlhfRlJBTUVPRkZTRVQJCTMwCiAKIC8qIERNQSBlbmdpbmUgdHVuaW5nIGtub2JzICovCi0jZGVmaW5lIEI0M19UWFJJTkdfU0xPVFMJCTEyOAorI2RlZmluZSBCNDNfVFhSSU5HX1NMT1RTCQkyNTYKICNkZWZpbmUgQjQzX1JYUklOR19TTE9UUwkJNjQKLSNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkoMjMwNCArIDEwMCkKLSNkZWZpbmUgQjQzX0RNQTNfUlhfQlVGRkVSU0laRQkxNgorI2RlZmluZSBCNDNfRE1BMF9SWF9CVUZGRVJTSVpFCQlJRUVFODAyMTFfTUFYX0ZSQU1FX0xFTgorCiAKIHN0cnVjdCBza19idWZmOwogc3RydWN0IGI0M19wcml2YXRlOwpAQCAtMjE1LDcgKzIxMiw3IEBACiAJdm9pZCAqZGVzY2Jhc2U7CiAJLyogTWV0YSBkYXRhIGFib3V0IGFsbCBkZXNjcmlwdG9ycy4gKi8KIAlzdHJ1Y3QgYjQzX2RtYWRlc2NfbWV0YSAqbWV0YTsKLQkvKiBDYWNoZSBvZiBUWCBoZWFkZXJzIGZvciBlYWNoIHNsb3QuCisJLyogQ2FjaGUgb2YgVFggaGVhZGVycyBmb3IgZWFjaCBUWCBmcmFtZS4KIAkgKiBUaGlzIGlzIHRvIGF2b2lkIGFuIGFsbG9jYXRpb24gb24gZWFjaCBUWC4KIAkgKiBUaGlzIGlzIE5VTEwgZm9yIGFuIFJYIHJpbmcuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCmluZGV4IDZhMThhMTQuLjIyZDBmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogCi1zdGF0aWMgc3RydWN0IGI0M19sb19jYWxpYiAqIGI0M19maW5kX2xvX2NhbGliKHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbywKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorc3RhdGljIHN0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19maW5kX2xvX2NhbGliKHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbywKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCiAJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgKiAicGFkX21peF9nYWluIiBpcyB0aGUgUEFEIE1peGVyIEdhaW4uCiAgKi8KIHN0YXRpYyB1MTYgbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgIHUxNiAqIHZhbHVlLCB1MTYgKiBwYWRfbWl4X2dhaW4pCisJCQkJICAgdTE2ICp2YWx1ZSwgdTE2ICpwYWRfbWl4X2dhaW4pCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAl1MTYgcmVnLCB2LCBwYWRtaXg7CkBAIC0yMjUsMTQgKzIyNSwxMiBAQAogCQkJCXJhZGlvX3BjdGxfcmVnID0gdG1wOwogCQl9CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCSAgICAgICYgMHhGRkYwKSB8IHJhZGlvX3BjdGxfcmVnKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgcmFkaW9fcGN0bF9yZWcpOwogCWI0M19ncGh5X3NldF9iYXNlYmFuZF9hdHRlbnVhdGlvbihkZXYsIDIpOwogCiAJcmVnID0gbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoZGV2LCAmbWFzaywgTlVMTCk7CiAJbWFzayA9IH5tYXNrOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgcmVnLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgcmVnKQotCQkJICAmIG1hc2spOworCWI0M19yYWRpb19tYXNrKGRldiwgcmVnLCBtYXNrKTsKIAogCWlmIChoYXNfdHhfbWFnbmlmaWNhdGlvbihwaHkpKSB7CiAJCWludCBpLCBqOwpAQCAtMjQyLDE0ICsyNDAsMTAgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eF9tYWduX3ZhbHVlcyk7IGkrKykgewogCQkJdHhfbWFnbiA9IHR4X21hZ25fdmFsdWVzW2ldOwotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAotCQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgJiAweEZGMEYpIHwgdHhfbWFnbik7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkYwRiwgdHhfbWFnbik7CiAJCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRSh0eF9iaWFzX3ZhbHVlcyk7IGorKykgewogCQkJCXR4X2JpYXMgPSB0eF9iaWFzX3ZhbHVlc1tqXTsKLQkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJCSAgICYgMHhGRkYwKSB8IHR4X2JpYXMpOworCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg1MiwgMHhGRkYwLCB0eF9iaWFzKTsKIAkJCQlmZWVkdGhyb3VnaCA9CiAJCQkJICAgIGxvX21lYXN1cmVfZmVlZHRocm91Z2goZGV2LCAwLCBwZ2EsCiAJCQkJCQkJICAgdHJzd19yeCk7CkBAIC0yNjksOCArMjYzLDcgQEAKIAl9IGVsc2UgewogCQlsby0+dHhfbWFnbiA9IDA7CiAJCWxvLT50eF9iaWFzID0gMDsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkgICYgMHhGRkYwKTsJLyogVFggYmlhcyA9PSAwICovCisJCWI0M19yYWRpb19tYXNrKGRldiwgMHg1MiwgMHhGRkYwKTsJLyogVFggYmlhcyA9PSAwICovCiAJfQogCWxvLT50eGN0bF9tZWFzdXJlZF90aW1lID0gamlmZmllczsKIH0KQEAgLTQwNiwxOCArMzk5LDEwIEBACiAJCXNhdi0+cGh5X2Nja18xNCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MTQpKTsKIAkJc2F2LT5waHlfaHB3cl90c3NpY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0hQV1JfVFNTSUNUTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMKQotCQkJICAgICAgfCAweDEwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSkpCi0JCQkgICAgICB8IDB4NDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9EQUNDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgIHwgMHg0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDE0KSwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MTQpKQotCQkJICAgICAgfCAweDIwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwsIDB4MTAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksIDB4NDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfREFDQ1RMLCAweDQwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSwgMHgyMDApOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IgJiYKIAkgICAgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwICYmIHBoeS0+cmFkaW9fcmV2IDwgNikgewpAQCAtNDM0LDE3ICs0MTksMTAgQEAKIAkJc2F2LT5waHlfY2NrXzNFID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzRSkpOwogCQlzYXYtPnBoeV9jcnMwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DTEFTU0NUTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0xBU1NDVEwpCi0JCQkgICAgICAmIDB4RkZGQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHg3RkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikKLQkJCSAgICAgIHwgMHgwMDAzKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkKLQkJCSAgICAgICYgMHhGRkZDKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DTEFTU0NUTCwgMHhGRkZDKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCAweDdGRkYpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkMpOwogCQlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0cpIHsKIAkJCWlmICgocGh5LT5yZXYgPj0gNykgJiYKIAkJCSAgICAoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkpIHsKQEAgLTU1OCw4ICs1MzYsNyBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg3QSwgc2F2LT5yYWRpb183QSk7CiAJaWYgKCFoYXNfdHhfbWFnbmlmaWNhdGlvbihwaHkpKSB7CiAJCXRtcCA9IHNhdi0+cmFkaW9fNTI7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKQotCQkJCQkgICAgICAmIDB4RkYwRikgfCB0bXApOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkYwRiwgdG1wKTsKIAl9CiAJYjQzX3dyaXRlMTYoZGV2LCAweDNFMiwgc2F2LT5yZWdfM0UyKTsKIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IgJiYKQEAgLTc1NCw5ICs3MzEsOSBAQAogfQogCiBzdGF0aWMKLXN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfY2FsaWJyYXRlX2xvX3NldHRpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKK3N0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19jYWxpYnJhdGVfbG9fc2V0dGluZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwogCXN0cnVjdCBiNDNfcGh5X2cgKmdwaHkgPSBwaHktPmc7CkBAIC03NzgsMTIgKzc1NSw4IEBACiAKIAl0eGN0bF9yZWcgPSBsb190eGN0bF9yZWdpc3Rlcl90YWJsZShkZXYsICZ0eGN0bF92YWx1ZSwgJnBhZF9taXhfZ2Fpbik7CiAKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykgJiAweEZGRjApCi0JCQkgIHwgcmZhdHQtPmF0dCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0eGN0bF9yZWcsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgdHhjdGxfcmVnKSAmIH50eGN0bF92YWx1ZSkKLQkJCSAgfCAocmZhdHQtPndpdGhfcGFkbWl4KSA/IHR4Y3RsX3ZhbHVlIDogMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIHJmYXR0LT5hdHQpOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgdHhjdGxfcmVnLCB+dHhjdGxfdmFsdWUsIChyZmF0dC0+d2l0aF9wYWRtaXggPyB0eGN0bF92YWx1ZSA6MCkpOwogCiAJbWF4X3J4X2dhaW4gPSByZmF0dC0+YXR0ICogMjsKIAltYXhfcnhfZ2FpbiArPSBiYmF0dC0+YXR0IC8gMjsKQEAgLTgyNCw5ICs3OTcsOSBAQAogLyogR2V0IGEgY2FsaWJyYXRlZCBMTyBzZXR0aW5nIGZvciB0aGUgZ2l2ZW4gYXR0ZW51YXRpb24gdmFsdWVzLgogICogTWlnaHQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIHVuZGVyIE9PTSEgKi8KIHN0YXRpYwotc3RydWN0IGI0M19sb19jYWxpYiAqIGI0M19nZXRfY2FsaWJfbG9fc2V0dGluZ3Moc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCi0JCQkJCQljb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKK3N0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19nZXRfY2FsaWJfbG9fc2V0dGluZ3Moc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBkZXYtPnBoeS5nLT5sb19jb250cm9sOwogCXN0cnVjdCBiNDNfbG9fY2FsaWIgKmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA3MTE2YWI2Li5iNzJlZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogfQogCiAvKiBSZWFkIEhvc3RGbGFncyAqLwotdTY0IGI0M19oZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKiBkZXYpCit1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXU2NCByZXQ7CiAKQEAgLTYwMCw3ICs2MDAsNyBAQAogfQogCiBzdGF0aWMKLXZvaWQgYjQzX21hY2ZpbHRlcl9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCBjb25zdCB1OCAqIG1hYykKK3ZvaWQgYjQzX21hY2ZpbHRlcl9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCBjb25zdCB1OCAqbWFjKQogewogCXN0YXRpYyBjb25zdCB1OCB6ZXJvX2FkZHJbRVRIX0FMRU5dID0geyAwIH07CiAJdTE2IGRhdGE7CkBAIC03OTAsNyArNzkwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQga2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJICAgICAgdTggaW5kZXgsIHU4IGFsZ29yaXRobSwgY29uc3QgdTggKiBrZXkpCisJCSAgICAgIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sIGNvbnN0IHU4ICprZXkpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIG9mZnNldDsKQEAgLTgxMiw3ICs4MTIsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQga2V5bWFjX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggaW5kZXgsIGNvbnN0IHU4ICogYWRkcikKK3N0YXRpYyB2b2lkIGtleW1hY193cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGluZGV4LCBjb25zdCB1OCAqYWRkcikKIHsKIAl1MzIgYWRkcnRtcFsyXSA9IHsgMCwgMCwgfTsKIAl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OwpAQCAtODYyLDcgKzg2Miw3IEBACiAKIHN0YXRpYyB2b2lkIGRvX2tleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgdTggaW5kZXgsIHU4IGFsZ29yaXRobSwKLQkJCSBjb25zdCB1OCAqIGtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICogbWFjX2FkZHIpCisJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAl1OCBidWZbQjQzX1NFQ19LRVlTSVpFXSA9IHsgMCwgfTsKIAl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OwpAQCAtODg2LDggKzg4Niw4IEBACiAKIHN0YXRpYyBpbnQgYjQzX2tleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgaW50IGluZGV4LCB1OCBhbGdvcml0aG0sCi0JCQkgY29uc3QgdTggKiBrZXksIHNpemVfdCBrZXlfbGVuLAotCQkJIGNvbnN0IHU4ICogbWFjX2FkZHIsCisJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sCisJCQkgY29uc3QgdTggKm1hY19hZGRyLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYpCiB7CiAJaW50IGk7CkBAIC0xMjg2LDcgKzEyODYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBiNDNfd3JpdGVfdGVtcGxhdGVfY29tbW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICBjb25zdCB1OCAqIGRhdGEsIHUxNiBzaXplLAorCQkJCSAgICAgIGNvbnN0IHU4ICpkYXRhLCB1MTYgc2l6ZSwKIAkJCQkgICAgICB1MTYgcmFtX29mZnNldCwKIAkJCQkgICAgICB1MTYgc2htX3NpemVfb2Zmc2V0LCB1OCByYXRlKQogewpAQCAtMTQ3Niw5ICsxNDc2LDkgQEAKICAqIDIpIFBhdGNoaW5nIGR1cmF0aW9uIGZpZWxkCiAgKiAzKSBTdHJpcHBpbmcgVElNCiAgKi8KLXN0YXRpYyBjb25zdCB1OCAqIGI0M19nZW5lcmF0ZV9wcm9iZV9yZXNwKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJICB1MTYgKmRlc3Rfc2l6ZSwKLQkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCitzdGF0aWMgY29uc3QgdTggKmI0M19nZW5lcmF0ZV9wcm9iZV9yZXNwKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJIHUxNiAqZGVzdF9zaXplLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQogewogCWNvbnN0IHU4ICpzcmNfZGF0YTsKIAl1OCAqZGVzdF9kYXRhOwpAQCAtMjk4MCw3ICsyOTgwLDcgQEAKIAliNDNfY2xlYXJfa2V5cyhkZXYpOwogfQogCi1zdGF0aWMgaW50IGI0M19ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdTMyICogZGF0YSkKK3N0YXRpYyBpbnQgYjQzX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKmRhdGEpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSAoc3RydWN0IGI0M193bCAqKXJuZy0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzMxMSw3ICszMzExLDcgQEAKIAltc2xlZXAoMSk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogYmFuZF90b19zdHJpbmcoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQorc3RhdGljIGNvbnN0IGNoYXIgKmJhbmRfdG9fc3RyaW5nKGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzd2l0Y2ggKGJhbmQpIHsKIAljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CkBAIC00MTcwLDExICs0MTcwLDIxIEBACiAJCQloZiB8PSBCNDNfSEZfR0RDVzsKIAkJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9QQUNUUkwpCiAJCQloZiB8PSBCNDNfSEZfT0ZETVBBQk9PU1Q7Ci0JfSBlbHNlIGlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgewotCQloZiB8PSBCNDNfSEZfU1lNVzsKLQkJaWYgKHBoeS0+cmV2ID49IDIgJiYgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKQotCQkJaGYgJj0gfkI0M19IRl9HRENXOwogCX0KKwlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKSB7CisJCWlmIChwaHktPnJhZGlvX3JldiA9PSA2KQorCQkJaGYgfD0gQjQzX0hGXzQzMThUU1NJOworCQlpZiAocGh5LT5yYWRpb19yZXYgPCA2KQorCQkJaGYgfD0gQjQzX0hGX1ZDT1JFQ0FMQzsKKwl9CisJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9YVEFMX05PU0xPVykKKwkJaGYgfD0gQjQzX0hGX0RTQ1JROyAvKiBEaXNhYmxlIHNsb3djbG9jayByZXF1ZXN0cyBmcm9tIHVjb2RlLiAqLworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwlpZiAoKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpICYmCisJICAgIChidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpCisJCWhmIHw9IEI0M19IRl9QQ0lTQ1c7IC8qIFBDSSBzbG93IGNsb2NrIHdvcmthcm91bmQuICovCisjZW5kaWYKKwloZiAmPSB+QjQzX0hGX1NLQ0ZQVVA7CiAJYjQzX2hmX3dyaXRlKGRldiwgaGYpOwogCiAJYjQzX3NldF9yZXRyeV9saW1pdHMoZGV2LCBCNDNfREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCwKQEAgLTQyMTMsNyArNDIyMyw3IEBACiAJYjQzX3NldF9zeW50aF9wdV9kZWxheShkZXYsIDEpOwogCWI0M19ibHVldG9vdGhfY29leHRfZW5hYmxlKGRldik7CiAKLQlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsJLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLworCXNzYl9idXNfcG93ZXJ1cChidXMsICEoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1hUQUxfTk9TTE9XKSk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKIAliNDNfc2VjdXJpdHlfaW5pdChkZXYpOwogCWlmICghZGV2LT5zdXNwZW5kX2luX3Byb2dyZXNzKQpAQCAtNDM5Nyw2ICs0NDA3LDM0IEBACiAJQjQzX1dBUk5fT04oIXZpZiB8fCB3bC0+dmlmICE9IHZpZik7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKSB7CisJCS8qIERpc2FibGUgQ0ZQIHVwZGF0ZSBkdXJpbmcgc2NhbiBvbiBvdGhlciBjaGFubmVscy4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9TS0NGUFVQKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBiNDNfb3Bfc3dfc2Nhbl9jb21wbGV0ZV9ub3RpZmllcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkgeworCQkvKiBSZS1lbmFibGUgQ0ZQIHVwZGF0ZS4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfU0tDRlBVUCk7CisJfQorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGI0M19od19vcHMgPSB7CiAJLnR4CQkJPSBiNDNfb3BfdHgsCiAJLmNvbmZfdHgJCT0gYjQzX29wX2NvbmZfdHgsCkBAIC00NDE1LDYgKzQ0NTMsOCBAQAogCS5zdG9wCQkJPSBiNDNfb3Bfc3RvcCwKIAkuc2V0X3RpbQkJPSBiNDNfb3BfYmVhY29uX3NldF90aW0sCiAJLnN0YV9ub3RpZnkJCT0gYjQzX29wX3N0YV9ub3RpZnksCisJLnN3X3NjYW5fc3RhcnQJCT0gYjQzX29wX3N3X3NjYW5fc3RhcnRfbm90aWZpZXIsCisJLnN3X3NjYW5fY29tcGxldGUJPSBiNDNfb3Bfc3dfc2Nhbl9jb21wbGV0ZV9ub3RpZmllciwKIH07CiAKIC8qIEhhcmQtcmVzZXQgdGhlIGNoaXAuIERvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfYS5jCmluZGV4IDdmZTlkMTcuLmM4MzZjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfYS5jCkBAIC0xMjEsMjcgKzEyMSwxOCBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA3LCAocjggPDwgNCkgfCByOCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjAsIChyOCA8PCA0KSB8IHI4KTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyMSwgKHI4IDw8IDQpIHwgcjgpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDIyLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAyMikKLQkJCQkJJiAweDAwMEYpIHwgKHI4IDw8IDQpKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAyMiwgMHgwMDBGLCAocjggPDwgNCkpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDJBLCAocjggPDwgNCkpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDJCLCAocjggPDwgNCkpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA4LCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwOCkKLQkJCQkJJiAweDAwRjApIHwgKHI4IDw8IDQpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyOSwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMjkpCi0JCQkJCSYgMHhGRjBGKSB8IDB4MDBCMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMDgsIDB4MDBGMCwgKHI4IDw8IDQpKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAyOSwgMHhGRjBGLCAweDAwQjApOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDM1LCAweDAwQUEpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDM2LCAweDAwODUpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDNBLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzQSkKLQkJCQkJJiAweEZGMjApIHwKLQkJCSAgZnJlcV9yM0FfdmFsdWUoZnJlcSkpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDNELAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDNEKSAmIDB4MDBGRik7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDgxKQotCQkJCQkmIDB4RkY3RikgfCAweDAwODApOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDM1LAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDM1KSAmIDB4RkZFRik7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMzUsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDM1KQotCQkJCQkmIDB4RkZFRikgfCAweDAwMTApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDNBLCAweEZGMjAsIGZyZXFfcjNBX3ZhbHVlKGZyZXEpKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAzRCwgMHgwMEZGKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA4MSwgMHhGRjdGLCAweDAwODApOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDM1LCAweEZGRUYpOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDM1LCAweEZGRUYsIDB4MDAxMCk7CiAJYjQzX3JhZGlvX3NldF90eF9pcShkZXYpOwogCS8vVE9ETzogVFNTSTJkYm0gd29ya2Fyb3VuZAogLy9GSVhNRQliNDNfcGh5X3htaXRwb3dlcihkZXYpOwpAQCAtMTYwLDIzICsxNTEsMjAgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MiwgMHgwMDgwKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MCwgMHgwMDAwKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzRiwgMHgwMERBKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNSkgJiB+MHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDIwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDIwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAwNSwgfjB4MDAwOCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwMTApOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDgxLCB+MHgwMDIwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA4MSwgfjB4MDAyMCk7CiAJbXNsZWVwKDEpOwkJLyogZGVsYXkgNDAwdXNlYyAqLwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDgxKSAmIH4weDAwMjApIHwgMHgwMDEwKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA4MSwgfjB4MDAyMCwgMHgwMDEwKTsKIAltc2xlZXAoMSk7CQkvKiBkZWxheSA0MDB1c2VjICovCiAKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDUpICYgfjB4MDAwOCkgfCAweDAwMDgpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDg1LCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDg1KSAmIH4weDAwMTApOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA1LCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA1KSAmIH4weDAwMDgpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDgxKSAmIH4weDAwNDApOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDQwKSB8IDB4MDA0MCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMDUsIH4weDAwMDgsIDB4MDAwOCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODUsIH4weDAwMTApOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDA1LCB+MHgwMDA4KTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA4MSwgfjB4MDA0MCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIH4weDAwNDAsIDB4MDA0MCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsCiAJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDgxKSAmIH4weDAwMDgpIHwgMHgwMDA4KTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYzLCAweEREQzYpOwpAQCAtMjI0LDIyICsyMTIsMTYgQEAKIAl1MTYgYiwgY3Vycl9zLCBiZXN0X3MgPSAweEZGRkY7CiAJaW50IGk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLAotCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApICYgfkI0M19QSFlfQ1JTMF9FTik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpKSB8IDB4MTAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDgyKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDgyKSkgJiAweEYwRkYpIHwgMHgwMzAwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwOSwKLQkJYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwOSkgfCAweDAwODApOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDEyLAotCQkoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAxMikgJiAweEZGRkMpIHwgMHgwMDAyKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIH5CNDNfUEhZX0NSUzBfRU4pOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLCAweDEwMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDgyKSwgMHhGMEZGLCAweDAzMDApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwMDksIDB4MDA4MCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMTIsIDB4RkZGQywgMHgwMDAyKTsKIAliNDNfd2FfaW5pdGdhaW5zKGRldik7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEJBKSwgMHgzRUQ1KTsKIAliID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9QV1JET1dOKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QV1JET1dOLCAoYiAmIDB4RkZGOCkgfCAweDAwMDUpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA0KSB8IDB4MDAwNCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDAwNCwgMHgwMDA0KTsKIAlmb3IgKGkgPSAweDEwOyBpIDw9IDB4MjA7IGkrKykgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAxMywgaSk7CiAJCWN1cnJfcyA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT1RBQkxFUSkgJiAweDAwRkY7CkBAIC0yNTIsOCArMjM0LDcgQEAKIAkJCWJlc3RfcyA9IGN1cnJfczsKIAl9CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUFdSRE9XTiwgYik7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDQsCi0JCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDQpICYgMHhGRkZCKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAwNCwgMHhGRkZCKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAxMywgYmVzdF9zKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMV9SMSwgMCwgMHhGRkVDKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QjcpLCAweDFFODApOwpAQCAtMjYxLDE0ICsyNDIsMTAgQEAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QjUpLCAweDBFQzApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCMiksIDB4MDBDMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI5KSwgMHgxRkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpKSAmIDB4RjAwMCkgfCAweDAwNTMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE02MSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETTYxKSAmIDB4RkUxRikgfCAweDAxMjApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxMyksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMykpICYgMHgwRkZGKSB8IDB4MzAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDE0KSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDE0KSkgJiAweDBGRkYpIHwgMHgzMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhCQiksIDB4RjAwMCwgMHgwMDUzKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE02MSwgMHhGRTFGLCAweDAxMjApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEzKSwgMHgwRkZGLCAweDMwMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDE0KSwgMHgwRkZGLCAweDMwMDApOwogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCA2LCAweDAwMTcpOwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCBpLCAweDAwMEYpOwpAQCAtMjc2LDggKzI1Myw3IEBACiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzEsIDB4MEUsIDB4MDAxMSk7CiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzEsIDB4MEYsIDB4MDAxMyk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDMzKSwgMHg1MDMwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLAotCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApIHwgQjQzX1BIWV9DUlMwX0VOKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ1JTMCwgQjQzX1BIWV9DUlMwX0VOKTsKIH0KIAogc3RhdGljIHZvaWQgaGFyZHdhcmVfcGN0bF9pbml0X2FwaHkoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzAwLDI2ICsyNzYsMjEgQEAKIAogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksCi0JCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpKSAmIH4weDEwMDApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLCB+MHgxMDAwKTsKIAkJaWYgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRU5DT1JFKSAmIEI0M19QSFlfRU5DT1JFX0VOKQotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRU5DT1JFLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRU5DT1JFKSB8IDB4MDAxMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfRU5DT1JFLCAweDAwMTApOwogCQllbHNlCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FTkNPUkUsCi0JCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9FTkNPUkUpICYgfjB4MTAxMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0VOQ09SRSwgfjB4MTAxMCk7CiAJfQogCiAJYjQzX3dhX2FsbChkZXYpOwogCiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9BKSB7CiAJCWlmIChwaHktPmdtb2RlICYmIChwaHktPnJldiA8IDMpKQotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNCwKLQkJCQliNDNfcGh5X3JlYWQoZGV2LCAweDAwMzQpIHwgMHgwMDAxKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwMDM0LCAweDAwMDEpOwogCQliNDNfcGh5X3Jzc2lhZ2MoZGV2LCAwKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSB8IEI0M19QSFlfQ1JTMF9FTik7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9DUlMwLCBCNDNfUEhZX0NSUzBfRU4pOwogCiAJCWI0M19yYWRpb19pbml0MjA2MChkZXYpOwogCkBAIC0zMzksOSArMzEwLDcgQEAKIAogCWlmICgocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0cpICYmCiAJICAgIChkZXYtPmRldi0+YnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9QQUNUUkwpKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg2RSksCi0JCQkJICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4NkUpKQotCQkJCSAgICYgMHhFMDAwKSB8IDB4M0NGKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4NkUpLCAweEUwMDAsIDB4M0NGKTsKIAl9CiB9CiAKQEAgLTUyMCwxNCArNDg5LDE0IEBACiAJCQlyZXR1cm47CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LCAweDAwQzApOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgMHgwMDA4KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDEwKSAmIDB4RkZGNyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMSkgJiAweEZGRjcpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwMTAsIDB4RkZGNyk7CisJCWI0M19waHlfbWFzayhkZXYsIDB4MDAxMSwgMHhGRkY3KTsKIAkJYjQzX3JhZGlvX2luaXQyMDYwKGRldik7CiAJfSBlbHNlIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDQsIDB4MDBGRik7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA1LCAweDAwRkIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDEwLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTApIHwgMHgwMDA4KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDExKSB8IDB4MDAwOCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDEwLCAweDAwMDgpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxMSwgMHgwMDA4KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMKaW5kZXggODhiYjMwMy4uZTdiOThmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMKQEAgLTIwNCwxMyArMjA0LDkgQEAKIAkJCQkJCSAmIDB4RkZGMCkgfAogCQkJICAgIGJhc2ViYW5kX2F0dGVudWF0aW9uKTsKIAl9IGVsc2UgaWYgKHBoeS0+YW5hbG9nID4gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9EQUNDVEwsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9EQUNDVEwpCi0JCQkgICAgICAgJiAweEZGQzMpIHwgKGJhc2ViYW5kX2F0dGVudWF0aW9uIDw8IDIpKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9EQUNDVEwsIDB4RkZDMywgKGJhc2ViYW5kX2F0dGVudWF0aW9uIDw8IDIpKTsKIAl9IGVsc2UgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9EQUNDVEwsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9EQUNDVEwpCi0JCQkgICAgICAgJiAweEZGODcpIHwgKGJhc2ViYW5kX2F0dGVudWF0aW9uIDw8IDMpKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9EQUNDVEwsIDB4RkY4NywgKGJhc2ViYW5kX2F0dGVudWF0aW9uIDw8IDMpKTsKIAl9CiB9CiAKQEAgLTI1MiwxNyArMjQ4LDEzIEBACiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywKIAkJCQkgIChyZiAmIDB4MDAwRikgfCAodHhfY29udHJvbCAmIDB4MDA3MCkpOwogCX0gZWxzZSB7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCQkgICAgICAmIDB4RkZGMCkgfCAocmYgJiAweDAwMEYpKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCSAgICAgICYgfjB4MDA3MCkgfCAodHhfY29udHJvbCAmCi0JCQkJCQkJICAgIDB4MDA3MCkpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgKHJmICYgMHgwMDBGKSk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg1MiwgfjB4MDA3MCwgKHR4X2NvbnRyb2wgJiAweDAwNzApKTsKIAl9CiAJaWYgKGhhc190eF9tYWduaWZpY2F0aW9uKHBoeSkpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLCB0eF9tYWduIHwgdHhfYmlhcyk7CiAJfSBlbHNlIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCSAgICAgICYgMHhGRkYwKSB8ICh0eF9iaWFzICYgMHgwMDBGKSk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg1MiwgMHhGRkYwLCAodHhfYmlhcyAmIDB4MDAwRikpOwogCX0KIAliNDNfbG9fZ19hZGp1c3QoZGV2KTsKIH0KQEAgLTMzNywxMiArMzI5LDkgQEAKIAogCWlmICh0aGlyZCAhPSAtMSkgewogCQl0bXAgPSAoKHUxNikgdGhpcmQgPDwgMTQpIHwgKCh1MTYpIHRoaXJkIDw8IDYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMCkgJiAweEJGQkYpIHwgdG1wKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMSwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpICYgMHhCRkJGKSB8IHRtcCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEyKSAmIDB4QkZCRikgfCB0bXApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QkZCRiwgdG1wKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEJGQkYsIHRtcCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhCRkJGLCB0bXApOwogCX0KIAliNDNfZHVtbXlfdHJhbnNtaXNzaW9uKGRldik7CiB9CkBAIC0zNzMsMTIgKzM2Miw5IEBACiAJZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIHRhYmxlLCBpLCBpIC0gc3RhcnQpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMCwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMCkgJiAweEJGQkYpIHwgMHg0MDQwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEExKSAmIDB4QkZCRikgfCAweDQwNDApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhCRkJGKSB8IDB4NDAwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEJGQkYsIDB4NDA0MCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEJGQkYsIDB4NDA0MCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEJGQkYsIDB4NDAwMCk7CiAJYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOwogfQogCkBAIC00NTQsMTMgKzQ0MCwxMSBAQAogCWJhY2t1cFsxMF0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKTsKIAliYWNrdXBbMTFdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA0Myk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDI5LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MjkpICYgMHg3RkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDAxLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDAxKSAmIDB4M0ZGRikgfCAweDQwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMSkgfCAweDAwMEMpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkYzKSB8IDB4MDAwNCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSAmIH4oMHgxIHwgMHgyKSk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDI5LCAweDdGRkYpOworCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMSwgMHgzRkZGLCAweDQwMDApOworCWI0M19waHlfc2V0KGRldiwgMHgwODExLCAweDAwMEMpOworCWI0M19waHlfbWFza3NldChkZXYsIDB4MDgxMiwgMHhGRkYzLCAweDAwMDQpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDgwMiwgfigweDEgfCAweDIpKTsKIAlpZiAocGh5LT5yZXYgPj0gNikgewogCQliYWNrdXBbMTJdID0gYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJFKTsKIAkJYmFja3VwWzEzXSA9IGI0M19waHlfcmVhZChkZXYsIDB4MDAyRik7CkBAIC00NzUsMTMgKzQ1OSwxMyBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJGLCAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwRiwgMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTAsIDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpIHwgMHgwMTAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAxKSB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNjAsIGI0M19waHlfcmVhZChkZXYsIDB4MDA2MCkgfCAweDAwNDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE0LCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTQpIHwgMHgwMjAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA0NzgsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODAxLCAweDAwNDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDA2MCwgMHgwMDQwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwMTQsIDB4MDIwMCk7CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDA3MCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDgwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwNzApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA4MCk7CiAJdWRlbGF5KDMwKTsKIAogCXY0N0YgPSAoczE2KSAoKGI0M19waHlfcmVhZChkZXYsIDB4MDQ3RikgPj4gOCkgJiAweDAwM0YpOwpAQCAtNTAxLDQwICs0ODUsMzEgQEAKIAkJaWYgKHNhdmVkID09IDB4RkZGRikKIAkJCXNhdmVkID0gNDsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpICYgMHgwMDdGKTsKKwkJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwN0EsIDB4MDA3Rik7CiAJCWlmIChwaHktPnJldiAhPSAxKSB7CS8qIE5vdCBpbiBzcGVjcywgYnV0IG5lZWRlZCB0byBwcmV2ZW50IFBQQyBtYWNoaW5lIGNoZWNrICovCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODE0LAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgxNCkgfCAweDAwMDEpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxNSwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTUpICYgMHhGRkZFKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwODE0LCAweDAwMDEpOworCQkJYjQzX3BoeV9tYXNrKGRldiwgMHgwODE1LCAweEZGRkUpOwogCQl9Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMSkgfCAweDAwMEMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODEyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpIHwgMHgwMDBDKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAzMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgfCAweDAwMzApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDgxMSwgMHgwMDBDKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTIsIDB4MDAwQyk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODExLCAweDAwMzApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDgxMiwgMHgwMDMwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1QSwgMHgwNDgwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1OSwgMHgwODEwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1OCwgMHgwMDBEKTsKIAkJaWYgKHBoeS0+cmV2ID09IDApIHsKIAkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMDMsIDB4MDEyMik7CiAJCX0gZWxzZSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDBBLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMEEpCi0JCQkJICAgICAgfCAweDIwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDAwMEEsIDB4MjAwMCk7CiAJCX0KIAkJaWYgKHBoeS0+cmV2ICE9IDEpIHsJLyogTm90IGluIHNwZWNzLCBidXQgbmVlZGVkIHRvIHByZXZlbnQgUFBDIG1hY2hpbmUgY2hlY2sgKi8KLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE0KSB8IDB4MDAwNCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODE1LAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgxNSkgJiAweEZGRkIpOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTQsIDB4MDAwNCk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTUsIDB4RkZGQik7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMykgJiAweEZGOUYpCi0JCQkgICAgICB8IDB4MDA0MCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwMEYpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMDMsIDB4RkY5RiwgMHgwMDQwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDBGKTsKIAkJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAzLCAwLCAxKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDQzKQotCQkJCQkJJiAweDAwRjApIHwgMHgwMDBGKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwNDMsIDB4MDBGMCwgMHgwMDBGKTsKIAkJdWRlbGF5KDMwKTsKIAkJdjQ3RiA9IChzMTYpICgoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7CiAJCWlmICh2NDdGID49IDB4MjApCkBAIC01NzYsNyArNTUxLDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA0MywgYmFja3VwWzExXSk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGJhY2t1cFsxMF0pOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDEgfCAweDIpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MjksIGI0M19waHlfcmVhZChkZXYsIDB4MDQyOSkgfCAweDgwMDApOworCWI0M19waHlfc2V0KGRldiwgMHgwNDI5LCAweDgwMDApOwogCWI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoZGV2KTsKIAlpZiAocGh5LT5yZXYgPj0gNikgewogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiYWNrdXBbMTZdKTsKQEAgLTYwNCw5ICs1NzksOCBAQAogCWlmIChwaHktPnJhZGlvX3JldiA9PSA4KQogCQliNDNfY2FsY19ucnNzaV9vZmZzZXQoZGV2KTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSAmIDB4N0ZGRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSAmIDB4RkZGQyk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9HX0NSUywgMHg3RkZGKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA4MDIsIDB4RkZGQyk7CiAJYmFja3VwWzddID0gYjQzX3JlYWQxNihkZXYsIDB4MDNFMik7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDAzRTIsIGI0M19yZWFkMTYoZGV2LCAweDAzRTIpIHwgMHg4MDAwKTsKIAliYWNrdXBbMF0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKTsKQEAgLTYzMyw2NiArNjA3LDQ0IEBACiAJCWNhc2UgNDoKIAkJY2FzZSA2OgogCQljYXNlIDc6Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDQ3OCkKLQkJCQkgICAgICB8IDB4MDEwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMSkKLQkJCQkgICAgICB8IDB4MDA0MCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwMTAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwODAxLCAweDAwNDApOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJY2FzZSA1OgotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMSwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpCi0JCQkJICAgICAgJiAweEZGQkYpOworCQkJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAxLCAweEZGQkYpOwogCQkJYnJlYWs7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDYwKQotCQkJICAgICAgfCAweDAwNDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE0LCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTQpCi0JCQkgICAgICB8IDB4MDIwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDYwLCAweDAwNDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxNCwgMHgwMjAwKTsKIAl9Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDcwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwNzApOwogCWI0M19zZXRfYWxsX2dhaW5zKGRldiwgMCwgOCwgMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpICYgMHgwMEY3KTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3QSwgMHgwMEY3KTsKIAlpZiAocGh5LT5yZXYgPj0gMikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMSkgJiAweEZGQ0YpIHwKLQkJCSAgICAgIDB4MDAzMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSAmIDB4RkZDRikgfAotCQkJICAgICAgMHgwMDEwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODExLCAweEZGQ0YsIDB4MDAzMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDgxMiwgMHhGRkNGLCAweDAwMTApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwODApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA4MCk7CiAJdWRlbGF5KDIwKTsKIAogCW5yc3NpMCA9IChzMTYpICgoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7CiAJaWYgKG5yc3NpMCA+PSAweDAwMjApCiAJCW5yc3NpMCAtPSAweDAwNDA7CiAKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwN0YpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDdBLCAweDAwN0YpOwogCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMDMsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMDMpCi0JCQkJCSAgICAmIDB4RkY5RikgfCAweDAwNDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMDMsIDB4RkY5RiwgMHgwMDQwKTsKIAl9CiAKIAliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX0NIQU5ORUxfRVhULAogCQkgICAgYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX0NIQU5ORUxfRVhUKQogCQkgICAgfCAweDIwMDApOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwRik7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDBGKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE1LCAweEYzMzApOwogCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSAmIDB4RkZDRikgfAotCQkJICAgICAgMHgwMDIwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMjApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTIsIDB4RkZDRiwgMHgwMDIwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODExLCAweEZGQ0YsIDB4MDAyMCk7CiAJfQogCiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAzLCAwLCAxKTsKQEAgLTcyNiwxMCArNjc4LDggQEAKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19MT19DT05UUk9MLCBiYWNrdXBbMTNdKTsKIAl9CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgJiAweEZGQ0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSAmIDB4RkZDRik7CisJCWI0M19waHlfbWFzayhkZXYsIDB4MDgxMiwgMHhGRkNGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwODExLCAweEZGQ0YpOwogCX0KIAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCBiYWNrdXBbMF0pOwpAQCAtNzQzLDExICs2OTMsOSBAQAogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNTksIGJhY2t1cFs1XSk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1OCwgYmFja3VwWzZdKTsKIAliNDNfc3ludGhfcHVfd29ya2Fyb3VuZChkZXYsIHBoeS0+Y2hhbm5lbCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSB8ICgweDAwMDEgfCAweDAwMDIpKTsKKwliNDNfcGh5X3NldChkZXYsIDB4MDgwMiwgKDB4MDAwMSB8IDB4MDAwMikpOwogCWI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoZGV2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9HX0NSUykgfCAweDgwMDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHg4MDAwKTsKIAlpZiAocGh5LT5yZXYgPj0gMykgewogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiYWNrdXBbMTRdKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MCwgYmFja3VwWzE1XSk7CkBAIC03NzQsMTMgKzcyMiw5IEBACiAJCWlmICh0bXAxNiA+PSAweDIwKQogCQkJdG1wMTYgLT0gMHg0MDsKIAkJaWYgKHRtcDE2IDwgMykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ4QSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDhBKQotCQkJCSAgICAgICAmIDB4RjAwMCkgfCAweDA5RUIpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDhBLCAweEYwMDAsIDB4MDlFQik7CiAJCX0gZWxzZSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgICYgMHhGMDAwKSB8IDB4MEFFRCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEEsIDB4RjAwMCwgMHgwQUVEKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChncGh5LT5pbnRlcmZtb2RlID09IEI0M19JTlRFUkZNT0RFX05PTldMQU4pIHsKQEAgLTgyMyw3ICs3NjcsNyBAQAogICogaW50ZXJmZXJlbmNlIG1pdGlnYXRpb24gY29kZS4KICAqIEl0IGlzIHNhdmUgdG8gcmVzdG9yZSB2YWx1ZXMgaW4gcmFuZG9tIG9yZGVyLgogICovCi1zdGF0aWMgdm9pZCBfc3RhY2tfc2F2ZSh1MzIgKiBfc3RhY2twdHIsIHNpemVfdCAqIHN0YWNraWR4LAorc3RhdGljIHZvaWQgX3N0YWNrX3NhdmUodTMyICpfc3RhY2twdHIsIHNpemVfdCAqc3RhY2tpZHgsCiAJCQl1OCBpZCwgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQogewogCXUzMiAqc3RhY2twdHIgPSAmKF9zdGFja3B0clsqc3RhY2tpZHhdKTsKQEAgLTgzNyw3ICs3ODEsNyBAQAogCUI0M19XQVJOX09OKCpzdGFja2lkeCA+PSBCNDNfSU5URVJGU1RBQ0tfU0laRSk7CiB9CiAKLXN0YXRpYyB1MTYgX3N0YWNrX3Jlc3RvcmUodTMyICogc3RhY2twdHIsIHU4IGlkLCB1MTYgb2Zmc2V0KQorc3RhdGljIHUxNiBfc3RhY2tfcmVzdG9yZSh1MzIgKnN0YWNrcHRyLCB1OCBpZCwgdTE2IG9mZnNldCkKIHsKIAlzaXplX3QgaTsKIApAQCAtOTAxLDExICs4NDUsOCBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQjQzX0lOVEVSRk1PREVfTk9OV0xBTjoKIAkJaWYgKHBoeS0+cmV2ICE9IDEpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDJCKSB8IDB4MDgwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkJICAgQjQzX1BIWV9HX0NSUykgJiB+MHg0MDAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDA4MDApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9HX0NSUywgfjB4NDAwMCk7CiAJCQlicmVhazsKIAkJfQogCQlyYWRpb19zdGFja3NhdmUoMHgwMDc4KTsKQEAgLTkyNCwyNiArODY1LDE5IEBACiAJCXBoeV9zdGFja3NhdmUoMHgwNDA2KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQwNiwgMHg3RTI4KTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgwODAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX1JBRElPX0JJVEZJRUxEKSB8IDB4MTAwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDA4MDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsIDB4MTAwMCk7CiAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMCkgJiAweEMwQzApIHwgMHgwMDA4KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEMwQzAsIDB4MDAwOCk7CiAJCXBoeV9zdGFja3NhdmUoMHgwNEExKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMSwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpICYgMHhDMEMwKSB8IDB4MDYwNSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMSwgMHhDMEMwLCAweDA2MDUpOwogCQlwaHlfc3RhY2tzYXZlKDB4MDRBMik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEyKSAmIDB4QzBDMCkgfCAweDAyMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4QzBDMCwgMHgwMjA0KTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTgpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkgJiAweEMwQzApIHwgMHgwODAzKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweEMwQzAsIDB4MDgwMyk7CiAJCXBoeV9zdGFja3NhdmUoMHgwNEFCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpICYgMHhDMEMwKSB8IDB4MDYwNSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBQiwgMHhDMEMwLCAweDA2MDUpOwogCiAJCXBoeV9zdGFja3NhdmUoMHgwNEE3KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBNywgMHgwMDAyKTsKQEAgLTk5OSwxMiArOTMzLDggQEAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0MkIpOwogCQlwaHlfc3RhY2tzYXZlKDB4MDQ4Qyk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JBRElPX0JJVEZJRUxEKQotCQkJICAgICAgJiB+MHgxMDAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9HX0NSUykKLQkJCSAgICAgICAmIDB4RkZGQykgfCAweDAwMDIpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1JBRElPX0JJVEZJRUxELCB+MHgxMDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHhGRkZDLCAweDAwMDIpOwogCiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzMsIDB4MDgwMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTMsIDB4MjAyNyk7CkBAIC0xMDEzLDggKzk0Myw3IEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUEsIDB4MUNBOCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUMsIDB4Mjg3QSk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMCkKLQkJCQkJICAgICYgMHhGRkMwKSB8IDB4MDAxQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMCwgMHhGRkMwLCAweDAwMUEpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE3LCAweDAwMEQpOwogCiAJCWlmIChwaHktPnJldiA8IDIpIHsKQEAgLTEwMjcsNjUgKzk1Niw0MSBAQAogCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRDMSwgMHgwMDU5KTsKIAkJfQogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpCi0JCQkJCSAgICAmIDB4QzBGRikgfCAweDE4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEExKQotCQkJCQkgICAgJiAweEZGQzApIHwgMHgwMDE1KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhDRkZGKSB8IDB4MTAwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTgsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTgpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDBBMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFCKQotCQkJCQkgICAgJiAweENGRkYpIHwgMHgxMDAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikKLQkJCQkJICAgICYgMHhGMEZGKSB8IDB4MDgwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4RkZDRikgfCAweDAwMTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFCKQotCQkJCQkgICAgJiAweEZGRjApIHwgMHgwMDA1KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGRkNGKSB8IDB4MDAxMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTgsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTgpCi0JCQkJCSAgICAmIDB4RkZGMCkgfCAweDAwMDYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEyLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEyKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwODAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMCkKLQkJCQkJICAgICYgMHhGMEZGKSB8IDB4MDUwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpCi0JCQkJCSAgICAmIDB4RkZGMCkgfCAweDAwMEIpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QzBGRiwgMHgxODAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEZGQzAsIDB4MDAxNSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhDRkZGLCAweDEwMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTgsIDB4RjBGRiwgMHgwQTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweENGRkYsIDB4MTAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBQiwgMHhGMEZGLCAweDA4MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4RkZDRiwgMHgwMDEwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEZGRjAsIDB4MDAwNSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGRkNGLCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTgsIDB4RkZGMCwgMHgwMDA2KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEYwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMCwgMHhGMEZGLCAweDA1MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4RkZGMCwgMHgwMDBCKTsKIAogCQlpZiAocGh5LT5yZXYgPj0gMykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ4QSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDhBKQotCQkJCSAgICAgICYgfjB4ODAwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDE1LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDE1KQotCQkJCQkJICAgICYgMHg4MDAwKSB8IDB4MzZEOCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDE2LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDE2KQotCQkJCQkJICAgICYgMHg4MDAwKSB8IDB4MzZEOCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDE3LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDE3KQotCQkJCQkJICAgICYgMHhGRTAwKSB8IDB4MDE2RCk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA0OEEsICh1MTYpfjB4ODAwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0MTUsIDB4ODAwMCwgMHgzNkQ4KTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQxNiwgMHg4MDAwLCAweDM2RDgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDE3LCAweEZFMDAsIDB4MDE2RCk7CiAJCX0gZWxzZSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgfCAweDEwMDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ4QSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkJCSAgICAmIDB4OUZGRikgfCAweDIwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA0OEEsIDB4MTAwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEEsIDB4OUZGRiwgMHgyMDAwKTsKIAkJCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgfCBCNDNfSEZfQUNJVyk7CiAJCX0KIAkJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikKLQkJCQkgICAgICB8IDB4MDgwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDQyQiwgMHgwODAwKTsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhDLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDhDKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwMjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDhDLCAweEYwRkYsIDB4MDIwMCk7CiAJCWlmIChwaHktPnJldiA9PSAyKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFFLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFFKQotCQkJCQkJICAgICYgMHhGRjAwKSB8IDB4MDA3Rik7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFELCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFEKQotCQkJCQkJICAgICYgMHgwMEZGKSB8IDB4MTMwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUUsIDB4RkYwMCwgMHgwMDdGKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBRCwgMHgwMEZGLCAweDEzMDApOwogCQl9IGVsc2UgaWYgKHBoeS0+cmV2ID49IDYpIHsKIAkJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCAweDFBMDAsIDB4MywgMHgwMDdGKTsKIAkJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCAweDFBMDAsIDB4MiwgMHgwMDdGKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUQsIGI0M19waHlfcmVhZChkZXYsIDB4MDRBRCkKLQkJCQkgICAgICAmIDB4MDBGRik7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA0QUQsIDB4MDBGRik7CiAJCX0KIAkJYjQzX2NhbGNfbnJzc2lfc2xvcGUoZGV2KTsKIAkJYnJlYWs7CkBAIC0xMTA0LDI0ICsxMDA5LDE4IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBCNDNfSU5URVJGTU9ERV9OT05XTEFOOgogCQlpZiAocGh5LT5yZXYgIT0gMSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpICYgfjB4MDgwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkJICAgQjQzX1BIWV9HX0NSUykgfCAweDQwMDApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDJCLCB+MHgwODAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHg0MDAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJhZGlvX3N0YWNrcmVzdG9yZSgweDAwNzgpOwogCQliNDNfY2FsY19ucnNzaV90aHJlc2hvbGQoZGV2KTsKIAkJcGh5X3N0YWNrcmVzdG9yZSgweDA0MDYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpICYgfjB4MDgwMCk7CisJCWI0M19waHlfbWFzayhkZXYsIDB4MDQyQiwgfjB4MDgwMCk7CiAJCWlmICghZGV2LT5iYWRfZnJhbWVzX3ByZWVtcHQpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JBRElPX0JJVEZJRUxELAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQpCi0JCQkJICAgICAgJiB+KDEgPDwgMTEpKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsIH4oMSA8PCAxMSkpOwogCQl9Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9HX0NSUykgfCAweDQwMDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfR19DUlMsIDB4NDAwMCk7CiAJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEEwKTsKIAkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTEpOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMik7CkBAIC0xMzg5LDE3ICsxMjg4LDEwIEBACiAJCXNhdi5waHlfY3JzMCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCk7CiAJCXNhdi5waHlfY2xhc3NjdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSKQotCQkJICAgICAgfCAweDAwMDMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMKQotCQkJICAgICAgJiAweEZGRkMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DTEFTU0NUTCkKLQkJCSAgICAgICYgMHhGRkZDKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsIDB4MDAwMyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwgMHhGRkZDKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NMQVNTQ1RMLCAweEZGRkMpOwogCQlpZiAoaGFzX2xvb3BiYWNrX2dhaW4ocGh5KSkgewogCQkJc2F2LnBoeV9sb19tYXNrID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MT19NQVNLKTsKIAkJCXNhdi5waHlfbG9fY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MT19DVEwpOwpAQCAtMTQyMCw4ICsxMzEyLDcgQEAKIAliNDNfd3JpdGUxNihkZXYsIDB4M0UyLCBiNDNfcmVhZDE2KGRldiwgMHgzRTIpIHwgMHg4MDAwKTsKIAogCXNhdi5waHlfc3luY2N0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfU1lOQ0NUTCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfU1lOQ0NUTCwgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9TWU5DQ1RMKQotCQkgICAgICAmIDB4RkY3Rik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9TWU5DQ1RMLCAweEZGN0YpOwogCXNhdi5yZWdfM0U2ID0gYjQzX3JlYWQxNihkZXYsIDB4M0U2KTsKIAlzYXYucmVnXzNGNCA9IGI0M19yZWFkMTYoZGV2LCAweDNGNCk7CiAKQEAgLTE0MjksOSArMTMyMCw3IEBACiAJCWI0M193cml0ZTE2KGRldiwgMHgwM0U2LCAweDAxMjIpOwogCX0gZWxzZSB7CiAJCWlmIChwaHktPmFuYWxvZyA+PSAyKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgwMyksCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MDMpKQotCQkJCSAgICAgICAmIDB4RkZCRikgfCAweDQwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MDMpLCAweEZGQkYsIDB4NDApOwogCQl9CiAJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQsCiAJCQkgICAgKGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19DSEFOTkVMX0VYVCkgfCAweDIwMDApKTsKQEAgLTE0NTQsMTQgKzEzNDMsMTIgQEAKIAkJCQkJCSAgIExQRCgwLCAwLCAxKSkpOwogCX0KIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QR0FDVEwsIDB4QkZBMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUxLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MSkKLQkJCSAgfCAweDAwMDQpOworCWI0M19yYWRpb19zZXQoZGV2LCAweDUxLCAweDAwMDQpOwogCWlmIChwaHktPnJhZGlvX3JldiA9PSA4KSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgMHgxRik7CiAJfSBlbHNlIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLCAwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpCi0JCQkJCSAgICAgICYgMHhGRkYwKSB8IDB4MDAwOSk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCAweDAwMDkpOwogCX0KIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHg1OCksIDApOwogCkBAIC0xNjEwLDggKzE0OTcsNyBAQAogCXU4IG9sZF9jaGFubmVsOwogCiAJaWYgKHBoeS0+YW5hbG9nID09IDEpIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpCi0JCQkJICB8IDB4MDA1MCk7CisJCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA1MCk7CiAJfQogCWlmICgoYnVzLT5ib2FyZGluZm8udmVuZG9yICE9IFNTQl9CT0FSRFZFTkRPUl9CQ00pICYmCiAJICAgIChidXMtPmJvYXJkaW5mby50eXBlICE9IFNTQl9CT0FSRF9CVTQzMDYpKSB7CkBAIC0xNjIxLDM5ICsxNTA3LDI5IEBACiAJCQl2YWx1ZSArPSAweDIwMjsKIAkJfQogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM1LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM1KSAmIDB4RjBGRikKLQkJICAgICAgfCAweDA3MDApOworCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAzNSwgMHhGMEZGLCAweDA3MDApOwogCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTApCiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzgsIDB4MDY2Nyk7CiAKIAlpZiAocGh5LT5nbW9kZSB8fCBwaHktPnJldiA+PSAyKSB7CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTApIHsKLQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpCi0JCQkJCSAgfCAweDAwMjApOwotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTEsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA1MSkKLQkJCQkJICB8IDB4MDAwNCk7CisJCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMjApOworCQkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA1MSwgMHgwMDA0KTsKIAkJfQogCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1BIWV9SQURJTywgMHgwMDAwKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpIHwgMHgwMTAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDJCKSB8IDB4MjAwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODAyLCAweDAxMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDQyQiwgMHgyMDAwKTsKIAogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDFDLCAweDE4NkEpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTMsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDEzKSAmIDB4MDBGRikgfCAweDE5MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM1LAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDAzNSkgJiAweEZGQzApIHwgMHgwMDY0KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1RCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpICYgMHhGRjgwKSB8IDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAxMywgMHgwMEZGLCAweDE5MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMzUsIDB4RkZDMCwgMHgwMDY0KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDVELCAweEZGODAsIDB4MDAwQSk7CiAJfQogCiAJaWYgKGRldi0+YmFkX2ZyYW1lc19wcmVlbXB0KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JBRElPX0JJVEZJRUxELAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwKLQkJCQkJICAgQjQzX1BIWV9SQURJT19CSVRGSUVMRCkgfCAoMSA8PCAxMSkpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsICgxIDw8IDExKSk7CiAJfQogCiAJaWYgKHBoeS0+YW5hbG9nID09IDEpIHsKQEAgLTE2OTUsNyArMTU3MSw3IEBACiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUIsIDB4MDA3Qik7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUMsIDB4MDBCMCk7CiAKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwMDcpOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDAwNyk7CiAKIAliNDNfZ3BoeV9jaGFubmVsX3N3aXRjaChkZXYsIG9sZF9jaGFubmVsLCAwKTsKIApAQCAtMTc3MSwxMiArMTY0NywxMCBAQAogCQl2YWwgKz0gMHgwMjAyOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0cpIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAyMCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUxLAotCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA1MSkgfCAweDAwMDQpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpIHwgMHgwMTAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDJCKSB8IDB4MjAwMCk7CisJCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDAyMCk7CisJCWI0M19yYWRpb19zZXQoZGV2LCAweDAwNTEsIDB4MDAwNCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODAyLCAweDAxMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDQyQiwgMHgyMDAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4NUIsIDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1QywgMCk7CiAJfQpAQCAtMTgwMSw4ICsxNjc1LDcgQEAKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDVCLCAweDdCKTsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDVDLCAweEIwKTsKIAl9Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSAmIDB4MDBGOCkgfCAweDAwMDcpOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDdBLCAweDAwRjgsIDB4MDAwNyk7CiAKIAliNDNfZ3BoeV9jaGFubmVsX3N3aXRjaChkZXYsIG9sZF9jaGFubmVsLCAwKTsKIApAQCAtMTgxNCwxOSArMTY4NywxNiBAQAogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzgsIDB4MDY2OCk7CiAJYjQzX3NldF90eHBvd2VyX2coZGV2LCAmZ3BoeS0+YmJhdHQsICZncGh5LT5yZmF0dCwgZ3BoeS0+dHhfY29udHJvbCk7CiAJaWYgKHBoeS0+cmFkaW9fcmV2IDw9IDUpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4NUQsIChiNDNfcGh5X3JlYWQoZGV2LCAweDVEKQotCQkJCQkgICYgMHhGRjgwKSB8IDB4MDAwMyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4NUQsIDB4RkY4MCwgMHgwMDAzKTsKIAl9CiAJaWYgKHBoeS0+cmFkaW9fcmV2IDw9IDIpCiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDVELCAweDAwMEQpOwogCiAJaWYgKHBoeS0+YW5hbG9nID09IDQpIHsKIAkJYjQzX3dyaXRlMTYoZGV2LCAweDNFNCwgOSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDYxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDYxKQotCQkJICAgICAgJiAweDBGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCAweDYxLCAweDBGRkYpOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMDIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMDIpICYgMHhGRkMwKQotCQkJICAgICAgfCAweDAwMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMDIsIDB4RkZDMCwgMHgwMDA0KTsKIAl9CiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CKQogCQlCNDNfV0FSTl9PTigxKTsKQEAgLTE4NjgsNjMgKzE3MzgsMzkgQEAKIAliYWNrdXBfcmFkaW9bMV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0Myk7CiAJYmFja3VwX3JhZGlvWzJdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4N0EpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIDB4M0ZGRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLQkJBTkRDRkcsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLQkJBTkRDRkcpIHwgMHg4MDAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVIsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSKSB8IDB4MDAwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkgJiAweEZGRkQpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDAxKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSAmIDB4RkZGRSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCAweDNGRkYpOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRywgMHg4MDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDAwMDIpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweEZGRkQpOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAwMSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZGRSk7CiAJaWYgKHBoeS0+cmV2ICE9IDEpIHsJLyogTm90IGluIHNwZWNzLCBidXQgbmVlZGVkIHRvIHByZXZlbnQgUFBDIG1hY2hpbmUgY2hlY2sgKi8KLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikgfCAweDAwMDEpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwKLQkJCQkJICAgQjQzX1BIWV9BTkFMT0dPVkVSVkFMKSAmIDB4RkZGRSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpIHwgMHgwMDAyKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkgJiAweEZGRkQpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAxKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkUpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAyKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkQpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVIsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkgfCAweDAwMEMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDMwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJICAgICAgICYgMHhGRkNGKSB8IDB4MTApOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAwQyk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHgwMDBDKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDAwMzApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweEZGQ0YsIDB4MTApOwogCiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4NUEpLCAweDA3ODApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU5KSwgMHhDODEwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHg1OCksIDB4MDAwRCk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgwQSksCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MEEpKSB8IDB4MjAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDSygweDBBKSwgMHgyMDAwKTsKIAlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSKSB8IDB4MDAwNCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX0FOQUxPR09WRVJWQUwpICYgMHhGRkZCKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsIDB4MDAwNCk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwgMHhGRkZCKTsKIAl9Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MDMpLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwMykpCi0JCSAgICAgICAmIDB4RkY5RikgfCAweDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NDSygweDAzKSwgMHhGRjlGLCAweDQwKTsKIAogCWlmIChwaHktPnJhZGlvX3JldiA9PSA4KSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgMHgwMDBGKTsKIAl9IGVsc2UgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIDApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkJICAgICAgJiAweEZGRjApIHwgMHg5KTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIDB4OSk7CiAJfQogCWI0M19ncGh5X3NldF9iYXNlYmFuZF9hdHRlbnVhdGlvbihkZXYsIDExKTsKIApAQCAtMTkzNCw0NSArMTc4MCwyOCBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MT19NQVNLLCAweDgwMjApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0xPX0NUTCwgMCk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyQiksCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDJCKSkKLQkJICAgICAgICYgMHhGRkMwKSB8IDB4MDEpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDJCKSwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MkIpKQotCQkgICAgICAgJiAweEMwRkYpIHwgMHg4MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MkIpLCAweEZGQzAsIDB4MDEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MkIpLCAweEMwRkYsIDB4ODAwKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMTAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSAmIDB4Q0ZGRik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMTAwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhDRkZGKTsKIAogCWlmIChkZXYtPmRldi0+YnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9FWFRMTkEpIHsKIAkJaWYgKHBoeS0+cmV2ID49IDcpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikKLQkJCQkgICAgICB8IDB4MDgwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpCi0JCQkJICAgICAgfCAweDgwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwODAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4ODAwMCk7CiAJCX0KIAl9Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDdBLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSkKLQkJCSAgJiAweDAwRjcpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHg3QSwgMHgwMEY3KTsKIAogCWogPSAwOwogCWxvb3BfaV9tYXggPSAocGh5LT5yYWRpb19yZXYgPT0gOCkgPyAxNSA6IDk7CiAJZm9yIChpID0gMDsgaSA8IGxvb3BfaV9tYXg7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgewogCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCBpKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpCi0JCQkJICAgICAgICYgMHhGMEZGKSB8IChqIDw8IDgpKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9QR0FDVEwpCi0JCQkJICAgICAgICYgMHgwRkZGKSB8IDB4QTAwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QR0FDVEwsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9QR0FDVEwpCi0JCQkJICAgICAgfCAweEYwMDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RjBGRiwgKGogPDwgOCkpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9QR0FDVEwsIDB4MEZGRiwgMHhBMDAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9QR0FDVEwsIDB4RjAwMCk7CiAJCQl1ZGVsYXkoMjApOwogCQkJaWYgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfTE9fTEVBS0FHRSkgPj0gMHhERkMpCiAJCQkJZ290byBleGl0X2xvb3AxOwpAQCAtMTk4MiwyMCArMTgxMSwxMiBAQAogCWxvb3AxX291dGVyX2RvbmUgPSBpOwogCWxvb3AxX2lubmVyX2RvbmUgPSBqOwogCWlmIChqID49IDgpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpCi0JCQkgICAgICB8IDB4MzApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweDMwKTsKIAkJdHJzd19yeCA9IDB4MUI7CiAJCWZvciAoaiA9IGogLSA4OyBqIDwgMTY7IGorKykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICAgJiAweEYwRkYpIHwgKGogPDwgOCkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICAgJiAweDBGRkYpIHwgMHhBMDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICB8IDB4RjAwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGMEZGLCAoaiA8PCA4KSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHgwRkZGLCAweEEwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhGMDAwKTsKIAkJCXVkZWxheSgyMCk7CiAJCQl0cnN3X3J4IC09IDM7CiAJCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MT19MRUFLQUdFKSA+PSAweERGQykKQEAgLTIwNDYsMzQgKzE4NjcsMjQgQEAKIAkJcmV0dXJuOwogCX0KIAotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzYsIGI0M19waHlfcmVhZChkZXYsIDB4MDAzNikgJiAweEZFRkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDAzNiwgMHhGRUZGKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJGLCAweDAyMDIpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0N0MsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ3QykgfCAweDAwMDIpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0N0EsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ3QSkgfCAweEYwMDApOworCWI0M19waHlfc2V0KGRldiwgMHgwNDdDLCAweDAwMDIpOworCWI0M19waHlfc2V0KGRldiwgMHgwNDdBLCAweEYwMDApOwogCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5yYWRpb19yZXYgPT0gOCkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDdBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKQotCQkJCQkgICAgJiAweEZGMEYpIHwgMHgwMDEwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1RCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDVEKQotCQkJICAgICAgfCAweDgwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDRFLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDRFKQotCQkJCQkgICAgJiAweEZGQzApIHwgMHgwMDEwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDdBLCAweEZGMEYsIDB4MDAxMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDVELCAweDgwMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwNEUsIDB4RkZDMCwgMHgwMDEwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyRSwgMHhDMDdGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KQotCQkJICAgICAgfCAweDA0MDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNiwgMHgwNDAwKTsKIAl9IGVsc2UgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzYpCi0JCQkgICAgICB8IDB4MDIwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzYsIGI0M19waHlfcmVhZChkZXYsIDB4MDAzNikKLQkJCSAgICAgIHwgMHgwNDAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1RCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDVEKQotCQkJICAgICAgJiAweDdGRkYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDRGLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNEYpCi0JCQkgICAgICAmIDB4RkZGRSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwNEUpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNiwgMHgwMjAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwMzYsIDB4MDQwMCk7CisJCWI0M19waHlfbWFzayhkZXYsIDB4MDA1RCwgMHg3RkZGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDRGLCAweEZGRkUpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwNEUsIDB4RkZDMCwgMHgwMDEwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyRSwgMHhDMDdGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDQ3QSkKLQkJCQkJICAgICYgMHhGRjBGKSB8IDB4MDAxMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ3QSwgMHhGRjBGLCAweDAwMTApOwogCX0KIH0KIApAQCAtMjA4OSwyMiArMTkwMCwxNyBAQAogCQlyZXR1cm47CiAJfQogCi0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDAzNikgJiAweEZGQzApCi0JCSAgICAgIHwgKGdwaHktPnRndF9pZGxlX3Rzc2kgLSBncGh5LT5jdXJfaWRsZV90c3NpKSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3OCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDQ3OCkgJiAweEZGMDApCi0JCSAgICAgIHwgKGdwaHktPnRndF9pZGxlX3Rzc2kgLSBncGh5LT5jdXJfaWRsZV90c3NpKSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDM2LCAweEZGQzAsIChncGh5LT50Z3RfaWRsZV90c3NpIC0gZ3BoeS0+Y3VyX2lkbGVfdHNzaSkpOworCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ3OCwgMHhGRjAwLCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKIAliNDNfZ3BoeV90c3NpX3Bvd2VyX2x0X2luaXQoZGV2KTsKIAliNDNfZ3BoeV9nYWluX2x0X2luaXQoZGV2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNjApICYgMHhGRkJGKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDAwNjAsIDB4RkZCRik7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxNCwgMHgwMDAwKTsKIAogCUI0M19XQVJOX09OKHBoeS0+cmV2IDwgNik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3OCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KQotCQkgICAgICB8IDB4MDgwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3OCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KQotCQkgICAgICAmIDB4RkVGRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAxKQotCQkgICAgICAmIDB4RkZCRik7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0NzgsIDB4MDgwMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDc4LCAweEZFRkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDgwMSwgMHhGRkJGKTsKIAogCWI0M19ncGh5X2RjX2x0X2luaXQoZGV2LCAxKTsKIApAQCAtMjEzOSw5ICsxOTQ1LDcgQEAKIAliNDNfaGFyZHdhcmVfcGN0bF9lYXJseV9pbml0KGRldik7CiAJaWYgKGdwaHktPmN1cl9pZGxlX3Rzc2kgPT0gMCkgewogCQlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwICYmIHBoeS0+YW5hbG9nID09IDApIHsKLQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDc2LAotCQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDc2KQotCQkJCQkgICAmIDB4MDBGNykgfCAweDAwODQpOworCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwNzYsIDB4MDBGNywgMHgwMDg0KTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBiNDNfcmZhdHQgcmZhdHQ7CiAJCQlzdHJ1Y3QgYjQzX2JiYXR0IGJiYXR0OwpAQCAtMjE3NCw5ICsxOTc4LDcgQEAKIAkJCX0KIAkJfQogCQlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwICYmIHBoeS0+YW5hbG9nID09IDApIHsKLQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDc2LAotCQkJCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNzYpCi0JCQkJCSAgJiAweEZGN0IpOworCQkJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwNzYsIDB4RkY3Qik7CiAJCX0gZWxzZSB7CiAJCQliNDNfc2V0X3R4cG93ZXJfZyhkZXYsICZvbGRfYmJhdHQsCiAJCQkJCSAgJm9sZF9yZmF0dCwgb2xkX3R4X2NvbnRyb2wpOwpAQCAtMjIyMCwyMCArMjAyMiwxNCBAQAogCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEMzKSwgMHg4MDA2KTsKIAkJfQogCQlpZiAodG1wID09IDUpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhDQyksCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweENDKSkKLQkJCQkgICAgICAgJiAweDAwRkYpIHwgMHgxRjAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweENDKSwgMHgwMEZGLCAweDFGMDApOwogCQl9CiAJfQogCWlmICgocGh5LT5yZXYgPD0gMiAmJiBwaHktPmdtb2RlKSB8fCBwaHktPnJldiA+PSAyKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4N0UpLCAweDc4KTsKIAlpZiAocGh5LT5yYWRpb19yZXYgPT0gOCkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpKQotCQkJICAgICAgfCAweDgwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDNFKSwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDNFKSkKLQkJCSAgICAgIHwgMHg0KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksIDB4ODApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDNFKSwgMHg0KTsKIAl9CiAJaWYgKGhhc19sb29wYmFja19nYWluKHBoeSkpCiAJCWI0M19jYWxjX2xvb3BiYWNrX2dhaW4oZGV2KTsKQEAgLTIyNTEsMTUgKzIwNDcsMTAgQEAKIAkJCQkgIHwgZ3BoeS0+bG9fY29udHJvbC0+dHhfYmlhcyB8IGdwaHktPgogCQkJCSAgbG9fY29udHJvbC0+dHhfbWFnbik7CiAJfSBlbHNlIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAotCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKSAmIDB4RkZGMCkKLQkJCQkgIHwgZ3BoeS0+bG9fY29udHJvbC0+dHhfYmlhcyk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg1MiwgMHhGRkYwLCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzKTsKIAl9CiAJaWYgKHBoeS0+cmV2ID49IDYpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MzYpLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MzYpKQotCQkJICAgICAgICYgMHgwRkZGKSB8IChncGh5LT5sb19jb250cm9sLT4KLQkJCQkJICAgIHR4X2JpYXMgPDwgMTIpKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgzNiksIDB4MEZGRiwgKGdwaHktPmxvX2NvbnRyb2wtPnR4X2JpYXMgPDwgMTIpKTsKIAl9CiAJaWYgKGRldi0+ZGV2LT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1BBQ1RSTCkKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkUpLCAweDgwNzUpOwpAQCAtMjI5OCwxMSArMjA4OSw4IEBACiAJICAgYnV0IE9GRE0gaXMgbGVnYWwgZXZlcnl3aGVyZSAqLwogCWlmICgoZGV2LT5kZXYtPmJ1cy0+Y2hpcF9pZCA9PSAweDQzMDYKIAkgICAgICYmIGRldi0+ZGV2LT5idXMtPmNoaXBfcGFja2FnZSA9PSAyKSB8fCAwKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHhCRkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEMzKSwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEMzKSkKLQkJCSAgICAgICYgMHg3RkZGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCAweEJGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHhDMyksIDB4N0ZGRik7CiAJfQogfQogCkBAIC0yNTA0LDkgKzIyOTIsOCBAQAogCiAJYjQzX3BoeV9sb2NrKGRldik7CiAJYjQzX3JhZGlvX2xvY2soZGV2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9HX0NSUykgJiAweDdGRkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDgwMiwgMHhGRkZDKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDdGRkYpOwogCWI0M19zZXRfYWxsX2dhaW5zKGRldiwgMywgOCwgMSk7CiAKIAlzdGFydCA9IChjaGFubmVsIC0gNSA+IDApID8gY2hhbm5lbCAtIDUgOiAxOwpAQCAtMjUxNywxMSArMjMwNCw5IEBACiAJCQlyZXRbaSAtIDFdID0gYjQzX2dwaHlfYWNpX2RldGVjdChkZXYsIGkpOwogCX0KIAliNDNfc3dpdGNoX2NoYW5uZWwoZGV2LCBjaGFubmVsKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSAmIDB4RkZGQykgfCAweDAwMDMpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MDMsIGI0M19waHlfcmVhZChkZXYsIDB4MDQwMykgJiAweEZGRjgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4ODAwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODAyLCAweEZGRkMsIDB4MDAwMyk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDAzLCAweEZGRjgpOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHg4MDAwKTsKIAliNDNfc2V0X29yaWdpbmFsX2dhaW5zKGRldik7CiAJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspIHsKIAkJaWYgKCFyZXRbaV0pCkBAIC0yNTY1LDggKzIzNTAsOCBAQAogCXJldHVybiAwOwogfQogCi11OCAqIGI0M19nZW5lcmF0ZV9keW5fdHNzaTJkYm1fdGFiKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICBzMTYgcGFiMCwgczE2IHBhYjEsIHMxNiBwYWIyKQordTggKmI0M19nZW5lcmF0ZV9keW5fdHNzaTJkYm1fdGFiKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgIHMxNiBwYWIwLCBzMTYgcGFiMSwgczE2IHBhYjIpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdTggKnRhYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwppbmRleCAxMDM2YmVmLi44Y2Q5Nzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCkBAIC01NSw4ICs1NSw4IEBACiB9CiAKIHN0YXRpYwotc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqIHBhcnNlX2Nvb2tpZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgICAgdTE2IGNvb2tpZSwKK3N0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnBhcnNlX2Nvb2tpZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICB1MTYgY29va2llLAogCQkJCSAgICAgIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICoqcGFjaykKIHsKIAlzdHJ1Y3QgYjQzX3BpbyAqcGlvID0gJmRldi0+cGlvOwpAQCAtMTM0LDggKzEzNCw4IEBACiAJcmV0dXJuIDg7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogYjQzX3NldHVwX3Bpb3F1ZXVlX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpiNDNfc2V0dXBfcGlvcXVldWVfdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKIAlzdHJ1Y3QgYjQzX3Bpb190eHBhY2tldCAqcDsKQEAgLTE3MSw4ICsxNzEsOCBAQAogCXJldHVybiBxOwogfQogCi1zdGF0aWMgc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqIGI0M19zZXR1cF9waW9xdWV1ZV9yeChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCitzdGF0aWMgc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqYjQzX3NldHVwX3Bpb3F1ZXVlX3J4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJCSAgICAgdW5zaWduZWQgaW50IGluZGV4KQogewogCXN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnE7CiAKQEAgLTMwOCw4ICszMDgsOCBAQAogfQogCiAvKiBTdGF0aWMgbWFwcGluZyBvZiBtYWM4MDIxMSdzIHF1ZXVlcyAocHJpb3JpdGllcykgdG8gYjQzIFBJTyBxdWV1ZXMuICovCi1zdGF0aWMgc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqIHNlbGVjdF9xdWV1ZV9ieV9wcmlvcml0eShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCQkJIHU4IHF1ZXVlX3ByaW8pCitzdGF0aWMgc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJCQl1OCBxdWV1ZV9wcmlvKQogewogCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYwppbmRleCA3MTM3NTM3Li5hZmFkNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1jaGFyICogYjQzX3Jma2lsbF9sZWRfbmFtZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCitjaGFyICpiNDNfcmZraWxsX2xlZF9uYW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3Jma2lsbCAqcmZrID0gJihkZXYtPndsLT5yZmtpbGwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My93YS5jCmluZGV4IDBjMGZiMTUuLmUxZTIwZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My93YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My93YS5jCkBAIC02Miw4ICs2Miw3IEBACiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0xOQUhQRkNUTCwgMHgxRkY5KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLAotCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwpICYgMHhGRjBGKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwsIDB4RkYwRik7CiAJaWYgKHBoeS0+cmV2IDw9IDIpCiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9MUEZHQUlOLCAwLCAweDFGQkYpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDAyLCAweDFGQkYpOwpAQCAtNzMsMTEgKzcyLDkgQEAKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDFELCAweDBGNDApOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMUYsIDB4MUMwMCk7CiAJaWYgKHBoeS0+cmV2IDw9IDMpCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkEsCi0JCQkoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJBKSAmIDB4MDBGRikgfCAweDA0MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMkEsIDB4MDBGRiwgMHgwNDAwKTsKIAllbHNlIGlmIChwaHktPnJldiA9PSA1KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkEsCi0JCQkoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJBKSAmIDB4MDBGRikgfCAweDFBMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMkEsIDB4MDBGRiwgMHgxQTAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDBDQywgMHgyMTIxKTsKIAl9CiAJaWYgKHBoeS0+cmV2ID49IDMpCkBAIC04Niw3ICs4Myw3IEBACiAKIHN0YXRpYyB2b2lkIGI0M193YV9kaXZpZGVyKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMkIpICYgfjB4MDEwMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDJCLCB+MHgwMTAwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDhFLCAweDU4QzEpOwogfQogCkBAIC0yNzIsOCArMjY5LDcgQEAKIAogc3RhdGljIHZvaWQgYjQzX3dhX2xtcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1NSwKLQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDA1NSkgJiAweEZGQzApIHwgMHgwMDA0KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwNTUsIDB4RkZDMCwgMHgwMDA0KTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3dhX21peGVkc2lnbmFsKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTMxOCwyMyArMzE0LDE4IEBACiAJfSBlbHNlIGlmIChwaHktPnJldiA9PSAyKSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSU1RIUkVTMSwgMHgxODYxKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTVEhSRVMyLCAweDAyNzEpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTlREV0VMTCwKLQkJCQkgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5URFdFTEwpCi0JCQkJICB8IDB4MDgwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTlREV0VMTCwgMHgwODAwKTsKIAl9IGVsc2UgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzEsIDB4MDA5OCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSU1RIUkVTMiwgMHgwMDcwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEM5KSwgMHgwMDgwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsCi0JCQkJICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVERXRUxMKQotCQkJCSAgfCAweDA4MDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5URFdFTEwsIDB4MDgwMCk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBiNDNfd2FfY3JzX3RocihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApICYgfjB4MDNDMCkgfCAweEQwMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ1JTMCwgfjB4MDNDMCwgMHhEMDAwKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3dhX2Nyc19ibGFuayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC0zOTEsNzIgKzM4Miw0NSBAQAogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgMywgMjUpOwogCX0KIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDS1NISUZUQklUU19XQSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLU0hJRlRCSVRTX1dBKSAmIH4weEZGMDApIHwgMHg1NzAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpKSAmIH4weDAwN0YpIHwgMHgwMDBGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpKSAmIH4weDNGODApIHwgMHgyQjgwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVFdSU0VUVCkgJiAweEYwRkYpIHwgMHgwMzAwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsCi0JCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDdBKSB8IDB4MDAwOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTjFQMUdBSU4sCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX04xUDFHQUlOKSAmIH4weDAwMEYpIHwgMHgwMDA4KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QMVAyR0FJTiwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUDFQMkdBSU4pICYgfjB4MEYwMCkgfCAweDA2MDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xTjJHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMU4yR0FJTikgJiB+MHgwRjAwKSB8IDB4MDcwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTjFQMUdBSU4sCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX04xUDFHQUlOKSAmIH4weDBGMDApIHwgMHgwMTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NDS1NISUZUQklUU19XQSwgKHUxNil+MHhGRjAwLCAweDU3MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwgfjB4MDA3RiwgMHgwMDBGKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQSksIH4weDNGODAsIDB4MkI4MCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsIDB4RjBGRiwgMHgwMzAwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHg3QSwgMHgwMDA4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX04xUDFHQUlOLCB+MHgwMDBGLCAweDAwMDgpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUDFQMkdBSU4sIH4weDBGMDAsIDB4MDYwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMU4yR0FJTiwgfjB4MEYwMCwgMHgwNzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX04xUDFHQUlOLCB+MHgwRjAwLCAweDAxMDApOwogCWlmIChwaHktPnJldiA9PSAxKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xTjJHQUlOLAotCQkJCSAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfTjFOMkdBSU4pCi0JCQkJICAgJiB+MHgwMDBGKSB8IDB4MDAwNyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTjFOMkdBSU4sIH4weDAwMEYsIDB4MDAwNyk7CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCkpICYgfjB4MDBGRikgfCAweDAwMUMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCkpICYgfjB4M0YwMCkgfCAweDAyMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg5NiksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg5NikpICYgfjB4MDBGRikgfCAweDAwMUMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSkpICYgfjB4MDBGRikgfCAweDAwMjApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSkpICYgfjB4M0YwMCkgfCAweDAyMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MikpICYgfjB4MDBGRikgfCAweDAwMkUpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg5NiksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg5NikpICYgfjB4RkYwMCkgfCAweDFBMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSkpICYgfjB4MDBGRikgfCAweDAwMjgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSkpICYgfjB4RkYwMCkgfCAweDJDMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDg4KSwgfjB4MDBGRiwgMHgwMDFDKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCksIH4weDNGMDAsIDB4MDIwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLCB+MHgwMEZGLCAweDAwMUMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDg5KSwgfjB4MDBGRiwgMHgwMDIwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksIH4weDNGMDAsIDB4MDIwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpLCB+MHgwMEZGLCAweDAwMkUpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDk2KSwgKHUxNil+MHhGRjAwLCAweDFBMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDgxKSwgfjB4MDBGRiwgMHgwMDI4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksICh1MTYpfjB4RkYwMCwgMHgyQzAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QRUFLX0NPVU5ULCAweDA5MkIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgwMDFFKSB8IDB4MDAwMik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgfjB4MDAxRSwgMHgwMDAyKTsKIAl9IGVsc2UgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpKSAmIH4weDAwMUUpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksIH4weDAwMUUpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUYpLCAweDI4N0EpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCkgJiB+MHgwMDBGKSB8IDB4MDAwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwgfjB4MDAwRiwgMHgwMDA0KTsKIAkJaWYgKHBoeS0+cmV2ID49IDYpIHsKIAkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgyMiksIDB4Mjg3QSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLAotCQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwpICYgfjB4RjAwMCkgfCAweDMwMDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLCAodTE2KX4weEYwMDAsIDB4MzAwMCk7CiAJCX0KIAl9Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRElWU1JDSElEWCwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRElWU1JDSElEWCkgJiAweDgwODApIHwgMHg3ODc0KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgsIDB4ODA4MCwgMHg3ODc0KTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OEUpLCAweDFDMDApOwogCWlmIChwaHktPnJldiA9PSAxKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RJVlAxUDJHQUlOLAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRElWUDFQMkdBSU4pICYgfjB4MEYwMCkgfCAweDA2MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RJVlAxUDJHQUlOLCB+MHgwRjAwLCAweDA2MDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OEIpLCAweDAwNUUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsCi0JCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlRXUlNFVFQpICYgfjB4MDBGRikgfCAweDAwMUUpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0FOVFdSU0VUVCwgfjB4MDBGRiwgMHgwMDFFKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhEKSwgMHgwMDAyKTsKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzNfUjEsIDAsIDApOwogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDM19SMSwgMSwgNyk7CkBAIC00NjksMTAgKzQzMyw4IEBACiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MzLCAzLCAyOCk7CiAJfQogCWlmIChwaHktPnJldiA+PSA2KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksCi0JCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgyNikpICYgfjB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksCi0JCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgyNikpICYgfjB4MTAwMCk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweDI2KSwgfjB4MDAwMyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweDI2KSwgfjB4MTAwMCk7CiAJfQogCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfVkVSU0lPTl9PRkRNKTsgLyogRHVtbXkgcmVhZCAqLwogfQpAQCAtNTM4LDggKzUwMCw3IEBACiAJCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfR0FJTlgsIDIsIDB4MDAwMSk7CiAJCQlpZiAoKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfRVhUTE5BKSAmJgogCQkJICAgIChwaHktPnJldiA+PSA3KSkgewotCQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSksCi0JCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRVhURygweDExKSkgJiAweEY3RkYpOworCQkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfRVhURygweDExKSwgMHhGN0ZGKTsKIAkJCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfR0FJTlgsIDB4MDAyMCwgMHgwMDAxKTsKIAkJCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfR0FJTlgsIDB4MDAyMSwgMHgwMDAxKTsKIAkJCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfR0FJTlgsIDB4MDAyMiwgMHgwMDAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCmluZGV4IGVhZTliODAuLjBmNTNjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwpAQCAtNTM4LDggKzUzOCwxNCBAQAogCWNoYW5zdGF0ID0gbGUxNl90b19jcHUocnhoZHItPmNoYW5uZWwpOwogCXBoeXR5cGUgPSBjaGFuc3RhdCAmIEI0M19SWF9DSEFOX1BIWVRZUEU7CiAKLQlpZiAobWFjc3RhdCAmIEI0M19SWF9NQUNfRkNTRVJSKQorCWlmICh1bmxpa2VseShtYWNzdGF0ICYgQjQzX1JYX01BQ19GQ1NFUlIpKSB7CiAJCWRldi0+d2wtPmllZWVfc3RhdHMuZG90MTFGQ1NFcnJvckNvdW50Kys7CisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CisJfQorCWlmICh1bmxpa2VseShwaHlzdGF0MCAmIChCNDNfUlhfUEhZU1QwX1BMQ1BIQ0YgfCBCNDNfUlhfUEhZU1QwX1BMQ1BGVikpKQorCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKKwlpZiAocGh5c3RhdDAgJiBCNDNfUlhfUEhZU1QwX1NIT1JUUFJNQkwpCisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CiAJaWYgKG1hY3N0YXQgJiBCNDNfUlhfTUFDX0RFQ0VSUikgewogCQkvKiBEZWNyeXB0aW9uIHdpdGggdGhlIGdpdmVuIGtleSBmYWlsZWQuCiAJCSAqIERyb3AgdGhlIHBhY2tldC4gV2UgYWxzbyB3b24ndCBiZSBhYmxlIHRvIGRlY3J5cHQgaXQgd2l0aApAQCAtNjA2LDggKzYxMiwxMiBAQAogCQkJCQkJcGh5dHlwZSA9PSBCNDNfUEhZVFlQRV9BKTsKIAllbHNlCiAJCXN0YXR1cy5yYXRlX2lkeCA9IGI0M19wbGNwX2dldF9iaXRyYXRlX2lkeF9jY2socGxjcCk7Ci0JaWYgKHVubGlrZWx5KHN0YXR1cy5yYXRlX2lkeCA9PSAtMSkpCi0JCWdvdG8gZHJvcDsKKwlpZiAodW5saWtlbHkoc3RhdHVzLnJhdGVfaWR4ID09IC0xKSkgeworCQkvKiBQTENQIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4KKwkJICogRHJvcCB0aGUgZnJhbWUsIGlmIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiBjb3JydXB0ZWQgZnJhbWVzLiAqLworCQlpZiAoIShkZXYtPndsLT5maWx0ZXJfZmxhZ3MgJiBGSUZfUExDUEZBSUwpKQorCQkJZ290byBkcm9wOworCX0KIAlzdGF0dXMuYW50ZW5uYSA9ICEhKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9BTlQpOwogCiAJLyoKQEAgLTY2MSw3ICs2NzEsNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCi0JZGV2LT5zdGF0cy5sYXN0X3J4ID0gamlmZmllczsKIAlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYtPndsLT5odywgc2tiLCAmc3RhdHVzKTsKIAogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaAppbmRleCAyNDUzZGVhLi5jZTg3MjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCkBAIC0zMSw3ICszMSw3IEBACiB2b2lkIGhvc3RhcF9kdW1wX3R4X2hlYWRlcihjb25zdCBjaGFyICpuYW1lLAogCQkJICAgY29uc3Qgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUgKnR4KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBob3N0YXBfODAyMTFfb3BzOwotaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHUxNiBmYyk7CitpbnQgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oX19sZTE2IGZjKTsKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpob3N0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBob3N0YXBfc2V0dXBfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGxvY2FsX2luZm9fdCAqbG9jYWwsCiAJCSAgICAgIGludCB0eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaAppbmRleCAzYTk0NzRkLi4yZTlmYjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBIT1NUQVBfODAyMTFfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIHN0cnVjdCBob3N0YXBfaWVlZTgwMjExX21nbXQgewogCV9fbGUxNiBmcmFtZV9jb250cm9sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCmluZGV4IDI0MTc1NjMuLjM4MTZkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIAogI2luY2x1ZGUgImhvc3RhcF84MDIxMS5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgpAQCAtMTcsMTAgKzE4LDEwIEBACiB2b2lkIGhvc3RhcF9kdW1wX3J4XzgwMjExKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBzaWduYWw9JWQgbm9pc2U9JWQgcmF0ZT0lZCBsZW49JWQgIgogCSAgICAgICAiamlmZmllcz0lbGRcbiIsCkBAIC0zMCw5ICszMSwxMCBAQAogCWlmIChza2ItPmxlbiA8IDIpCiAJCXJldHVybjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgRkM9MHglMDR4ICh0eXBlPSVkOiVkKSVzJXMiLAotCSAgICAgICBmYywgV0xBTl9GQ19HRVRfVFlQRShmYykgPj4gMiwgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID4+IDQsCisJICAgICAgIGZjLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMiwKKwkgICAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUyA/ICIgW1RvRFNdIiA6ICIiLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgW0Zyb21EU10iIDogIiIpOwogCkBAIC00Miw3ICs0NCw3IEBACiAJfQogCiAJcHJpbnRrKCIgZHVyPTB4JTA0eCBzZXE9MHglMDR4XG4iLCBsZTE2X3RvX2NwdShoZHItPmR1cmF0aW9uX2lkKSwKLQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgICBBMT0lcE0iLCBoZHItPmFkZHIxKTsKIAlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKQEAgLTYzLDcgKzY1LDcgQEAKIAlpbnQgaGRybGVuLCBwaGRybGVuLCBoZWFkX25lZWQsIHRhaWxfbmVlZDsKIAl1MTYgZmM7CiAJaW50IHByaXNtX2hlYWRlciwgcmV0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpmaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmaGRyOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtODQsOCArODYsOCBAQAogCQlwaGRybGVuID0gMDsKIAl9CiAKLQlmaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGZoZHItPmZyYW1lX2N0bCk7CisJZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShmaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmICh0eXBlID09IFBSSVNNMl9SWF9NR01UICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBtYW5hZ2VtZW50IGZyYW1lIHdpdGggaGVhZGVyICIKQEAgLTk0LDcgKzk2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIGV4dHJhIGRhdGE7IGlmIG5vdCwgZXhwYW5kIHNrYgogCSAqIGJ1ZmZlciB0byBiZSBsYXJnZSBlbm91Z2ggZm9yIHRoZSBjaGFuZ2VzICovCkBAIC0yMDUsMTMgKzIwNywxMSBAQAogc3RhdGljIHZvaWQgbW9uaXRvcl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAlpbnQgbGVuOwogCiAJbGVuID0gcHJpc20yX3J4XzgwMjExKGRldiwgc2tiLCByeF9zdGF0cywgUFJJU00yX1JYX01PTklUT1IpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIH0KIAogCkBAIC0yNDcsMjEgKzI0NywyMSBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1wcmlzbTJfZnJhZ19jYWNoZV9nZXQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKK3ByaXNtMl9mcmFnX2NhY2hlX2dldChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXUxNiBzYzsKIAl1bnNpZ25lZCBpbnQgZnJhZywgc2VxOwogCXN0cnVjdCBwcmlzbTJfZnJhZ19lbnRyeSAqZW50cnk7CiAKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7Ci0JZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKLQlzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKSA+PiA0OworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJZnJhZyA9IHNjICYgSUVFRTgwMjExX1NDVExfRlJBRzsKKwlzZXEgPSAoc2MgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CiAKIAlpZiAoZnJhZyA9PSAwKSB7CiAJCS8qIFJlc2VydmUgZW5vdWdoIHNwYWNlIHRvIGZpdCBtYXhpbXVtIGZyYW1lIGxlbmd0aCAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5kZXYtPm10dSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkcikgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpICsKIAkJCQkgICAgOCAvKiBMTEMgKi8gKwogCQkJCSAgICAyIC8qIGFsaWdubWVudCAqLyArCiAJCQkJICAgIDggLyogV0VQICovICsgRVRIX0FMRU4gLyogV0RTICovKTsKQEAgLTI5OSwxNCArMjk5LDE0IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogc3RhdGljIGludCBwcmlzbTJfZnJhZ19jYWNoZV9pbnZhbGlkYXRlKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJdTE2IHNjOwogCXVuc2lnbmVkIGludCBzZXE7CiAJc3RydWN0IHByaXNtMl9mcmFnX2VudHJ5ICplbnRyeTsKIAotCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKTsKLQlzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKSA+PiA0OworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJc2VxID0gKHNjICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OwogCiAJZW50cnkgPSBwcmlzbTJfZnJhZ19jYWNoZV9maW5kKGxvY2FsLCBzZXEsIC0xLCBoZHItPmFkZHIyLCBoZHItPmFkZHIxKTsKIApAQCAtNDcyLDEwICs0NzIsOCBAQAogCQkgICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywgdTE2IHR5cGUsCiAJCSAgICAgdTE2IHN0eXBlKQogewotCWlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikgewotCQlob3N0YXBfdXBkYXRlX3N0YV9wcyhsb2NhbCwgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopCi0JCQkJICAgICBza2ItPmRhdGEpOwotCX0KKwlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIpCisJCWhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhKTsKIAogCWlmIChsb2NhbC0+aG9zdGFwZCAmJiB0eXBlID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSB7CiAJCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OICYmCkBAIC01NTIsOCArNTUwLDggQEAKIAogCiBzdGF0aWMgaW50Ci1ob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCi0JCSAgICB1MTYgZmMsIHN0cnVjdCBuZXRfZGV2aWNlICoqd2RzKQoraG9zdGFwX3J4X2ZyYW1lX3dkcyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1MTYgZmMsCisJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKndkcykKIHsKIAkvKiBGSVg6IGlzIHRoaXMgcmVhbGx5IHN1cHBvc2VkIHRvIGFjY2VwdCBXRFMgZnJhbWVzIG9ubHkgaW4gTWFzdGVyCiAJICogbW9kZT8gV2hhdCBhYm91dCBSZXBlYXRlciBvciBNYW5hZ2VkIHdpdGggV0RTIGZyYW1lcz8gKi8KQEAgLTYxMSwxNCArNjA5LDE0IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJdTE2IGZjLCBldGhlcnR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4ICpwb3M7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogY2hlY2sgdGhhdCB0aGUgZnJhbWUgaXMgdW5pY2FzdCBmcmFtZSB0byB1cyAqLwogCWlmICgoZmMgJiAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpID09CkBAIC02NTEsMTQgKzY0OSwxNCBAQAogaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IHJlcywgaGRybGVuOwogCiAJaWYgKGNyeXB0ID09IE5VTEwgfHwgY3J5cHQtPm9wcy0+ZGVjcnlwdF9tcGR1ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmIChsb2NhbC0+dGtpcF9jb3VudGVybWVhc3VyZXMgJiYKIAkgICAgc3RyY21wKGNyeXB0LT5vcHMtPm5hbWUsICJUS0lQIikgPT0gMCkgewpAQCAtNjg5LDE0ICs2ODcsMTQgQEAKIGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0X21zZHUobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgaW50IGtleWlkeCwgc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJYXRvbWljX2luYygmY3J5cHQtPnJlZmNudCk7CiAJcmVzID0gY3J5cHQtPm9wcy0+ZGVjcnlwdF9tc2R1KHNrYiwga2V5aWR4LCBoZHJsZW4sIGNyeXB0LT5wcml2KTsKQEAgLTcyMCwxMSArNzE4LDEwIEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXNpemVfdCBoZHJsZW47CiAJdTE2IGZjLCB0eXBlLCBzdHlwZSwgc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKndkcyA9IE5VTEw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCXVuc2lnbmVkIGludCBmcmFnOwogCXU4ICpwYXlsb2FkOwogCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKQEAgLTc0NywxOCArNzQ0LDE3IEBACiAJZGV2ID0gbG9jYWwtPmRkZXY7CiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJaWYgKHNrYi0+bGVuIDwgMTApCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKLQlzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7Ci0JZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXR5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFOworCXN0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKKwlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOworCWZyYWcgPSBzYyAmIElFRUU4MDIxMV9TQ1RMX0ZSQUc7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIFB1dCB0aGlzIGNvZGUgaGVyZSBzbyB0aGF0IHdlIGF2b2lkIGR1cGxpY2F0aW5nIGl0IGluIGFsbAogCSAqIFJ4IHBhdGhzLiAtIEplYW4gSUkgKi8KQEAgLTg2NiwxMCArODYyLDggQEAKIAogCWlmIChob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsLCBoZHIsIGZjLCAmd2RzKSkKIAkJZ290byByeF9kcm9wcGVkOwotCWlmICh3ZHMpIHsKKwlpZiAod2RzKQogCQlza2ItPmRldiA9IGRldiA9IHdkczsKLQkJc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7Ci0JfQogCiAJaWYgKGxvY2FsLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSICYmICF3ZHMgJiYKIAkgICAgKGZjICYgKElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSA9PQpAQCAtODc4LDcgKzg3Miw2IEBACiAJICAgIG1lbWNtcChoZHItPmFkZHIyLCBsb2NhbC0+YXNzb2NfYXBfYWRkciwgRVRIX0FMRU4pID09IDApIHsKIAkJLyogRnJhbWUgZnJvbSBCU1NJRCBvZiB0aGUgQVAgZm9yIHdoaWNoIHdlIGFyZSBhIGNsaWVudCAqLwogCQlza2ItPmRldiA9IGRldiA9IGxvY2FsLT5zdGFkZXY7Ci0JCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwogCQlmcm9tX2Fzc29jX2FwID0gMTsKIAl9CiAKQEAgLTkxOCw3ICs5MTEsNyBAQAogCWlmIChsb2NhbC0+aG9zdF9kZWNyeXB0ICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYKIAkgICAgKGtleWlkeCA9IGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0KGxvY2FsLCBza2IsIGNyeXB0KSkgPCAwKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJLyogc2tiOiBoZHIgKyAocG9zc2libHkgZnJhZ21lbnRlZCkgcGxhaW50ZXh0IHBheWxvYWQgKi8KIApAQCAtOTMxLDcgKzkyNCw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJ4IGNhbm5vdCBnZXQgc2tiIGZyb20gIgogCQkJICAgICAgICJmcmFnbWVudCBjYWNoZSAobW9yZWZyYWc9JWQgc2VxPSV1IGZyYWc9JXUpXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgKGZjICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSAhPSAwLAotCQkJICAgICAgIFdMQU5fR0VUX1NFUV9TRVEoc2MpID4+IDQsIGZyYWcpOworCQkJICAgICAgIChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCwgZnJhZyk7CiAJCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJCX0KIApAQCAtOTcyLDcgKzk2NSw3IEBACiAJCS8qIHRoaXMgd2FzIHRoZSBsYXN0IGZyYWdtZW50IGFuZCB0aGUgZnJhbWUgd2lsbCBiZQogCQkgKiBkZWxpdmVyZWQsIHNvIHJlbW92ZSBza2IgZnJvbSBmcmFnbWVudCBjYWNoZSAqLwogCQlza2IgPSBmcmFnX3NrYjsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAkJcHJpc20yX2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShsb2NhbCwgaGRyKTsKIAl9CiAKQEAgLTk4Myw3ICs5NzYsNyBAQAogCSAgICBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdF9tc2R1KGxvY2FsLCBza2IsIGtleWlkeCwgY3J5cHQpKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJaWYgKGNyeXB0ICYmICEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmICFsb2NhbC0+b3Blbl93ZXApIHsKIAkJaWYgKGxvY2FsLT5pZWVlXzgwMl8xeCAmJgogCQkgICAgaG9zdGFwX2lzX2VhcG9sX2ZyYW1lKGxvY2FsLCBza2IpKSB7CkBAIC0xMDY5LDggKzEwNjIsOCBAQAogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gRVRIX0FMRU4pOwogCX0KIAotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIgJiYgIXdkcyAmJgogCSAgICBsb2NhbC0+YXAtPmJyaWRnZV9wYWNrZXRzKSB7CkBAIC0xMTE1LDcgKzExMDgsNyBAQAogIHJ4X2Ryb3BwZWQ6CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlnb3RvIHJ4X2V4aXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYwppbmRleCAwNzhhMDEwLi42NjkzNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCkBAIC0xNSwxMCArMTUsMTAgQEAKIAogdm9pZCBob3N0YXBfZHVtcF90eF84MDIxMShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1MTYgZmM7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRYIGxlbj0lZCBqaWZmaWVzPSVsZFxuIiwKIAkgICAgICAgbmFtZSwgc2tiLT5sZW4sIGppZmZpZXMpOwpAQCAtMjYsOSArMjYsMTAgQEAKIAlpZiAoc2tiLT5sZW4gPCAyKQogCQlyZXR1cm47CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCklcyVzIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMgPyAiIFtGcm9tRFNdIiA6ICIiKTsKIApAQCAtMzgsNyArMzksNyBAQAogCX0KIAogCXByaW50aygiIGR1cj0weCUwNHggc2VxPTB4JTA0eFxuIiwgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCksCi0JICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCkpOworCSAgICAgICBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgQTE9JXBNIiwgaGRyLT5hZGRyMSk7CiAJcHJpbnRrKCIgQTI9JXBNIiwgaGRyLT5hZGRyMik7CkBAIC01Nyw3ICs1OCw3IEBACiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAJaW50IG5lZWRfaGVhZHJvb20sIG5lZWRfdGFpbHJvb20gPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIGhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7CiAJdTE2IGZjLCBldGhlcnR5cGUgPSAwOwogCWVudW0gewogCQlXRFNfTk8gPSAwLCBXRFNfT1dOX0ZSQU1FLCBXRFNfQ09NUExJQU5UX0ZSQU1FCkBAIC0yMDEsNyArMjAyLDcgQEAKIAkJbWVtY3B5KCZoZHIuYWRkcjMsIGxvY2FsLT5ic3NpZCwgRVRIX0FMRU4pOwogCX0KIAotCWhkci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CiAKIAlza2JfcHVsbChza2IsIHNraXBfaGVhZGVyX2J5dGVzKTsKIAluZWVkX2hlYWRyb29tID0gbG9jYWwtPmZ1bmMtPm5lZWRfdHhfaGVhZHJvb20gKyBoZHJfbGVuICsgZW5jYXBzX2xlbjsKQEAgLTI2NSw3ICsyNjYsNyBAQAogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI4NywxMCArMjg4LDEwIEBACiAJbWV0YS0+aWZhY2UgPSBpZmFjZTsKIAogCWlmIChza2ItPmxlbiA+PSBJRUVFODAyMTFfREFUQV9IRFIzX0xFTiArIHNpemVvZihyZmMxMDQyX2hlYWRlcikgKyAyKSB7Ci0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkJICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA9PSBJRUVFODAyMTFfU1RZUEVfREFUQSkgeworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0RBVEEpIHsKIAkJCXU4ICpwb3MgPSAmc2tiLT5kYXRhW0lFRUU4MDIxMV9EQVRBX0hEUjNfTEVOICsKIAkJCQkJICAgICBzaXplb2YocmZjMTA0Ml9oZWFkZXIpXTsKIAkJCW1ldGEtPmV0aGVydHlwZSA9IChwb3NbMF0gPDwgOCkgfCBwb3NbMV07CkBAIC0zMTAsOCArMzExLDcgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwotCXUxNiBmYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWludCBwcmVmaXhfbGVuLCBwb3N0Zml4X2xlbiwgaGRyX2xlbiwgcmVzOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihza2ItPmRldik7CkBAIC0zMjQsNyArMzI0LDcgQEAKIAogCWlmIChsb2NhbC0+dGtpcF9jb3VudGVybWVhc3VyZXMgJiYKIAkgICAgc3RyY21wKGNyeXB0LT5vcHMtPm5hbWUsICJUS0lQIikgPT0gMCkgewotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRLSVAgY291bnRlcm1lYXN1cmVzOiBkcm9wcGVkICIKIAkJCSAgICAgICAiVFggcGFja2V0IHRvICVwTVxuIiwKQEAgLTM0OSw5ICszNDksOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQloZHJfbGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaGRyX2xlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAkvKiBIb3N0LWJhc2VkIElFRUUgODAyLjExIGZyYWdtZW50YXRpb24gZm9yIFRYIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBzbwogCSAqIGNhbGwgYm90aCBNU0RVIGFuZCBNUERVIGVuY3J5cHRpb24gZnVuY3Rpb25zIGZyb20gaGVyZS4gKi8KQEAgLTM4NCw3ICszODMsNyBAQAogCWFwX3R4X3JldCB0eF9yZXQ7CiAJc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqbWV0YTsKIAlpbnQgbm9fZW5jcnlwdCA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtNDI3LDE0ICs0MjYsMTQgQEAKIAl0eF9yZXQgPSBob3N0YXBfaGFuZGxlX3N0YV90eChsb2NhbCwgJnR4KTsKIAlza2IgPSB0eC5za2I7CiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLSAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJc3dpdGNoICh0eF9yZXQpIHsKIAljYXNlIEFQX1RYX0NPTlRJTlVFOgogCQlicmVhazsKIAljYXNlIEFQX1RYX0NPTlRJTlVFX05PVF9BVVRIT1JJWkVEOgogCQlpZiAobG9jYWwtPmllZWVfODAyXzF4ICYmCi0JCSAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgorCQkgICAgaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCQkgICAgbWV0YS0+ZXRoZXJ0eXBlICE9IEVUSF9QX1BBRSAmJgogCQkgICAgIShtZXRhLT5mbGFncyAmIEhPU1RBUF9UWF9GTEFHU19XRFMpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgZnJhbWUgdG8gdW5hdXRob3JpemVkICIKQEAgLTQ2OSwxMCArNDY4LDEwIEBACiAKIAkJLyogcmVtb3ZlIHNwZWNpYWwgdmVyc2lvbiBmcm9tIHRoZSBmcmFtZSBoZWFkZXIgKi8KIAkJZmMgJj0gfklFRUU4MDIxMV9GQ1RMX1ZFUlM7Ci0JCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CiAJfQogCi0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7CisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCW5vX2VuY3J5cHQgPSAxOwogCQl0eC5jcnlwdCA9IE5VTEw7CiAJfQpAQCAtNDkzLDkgKzQ5Miw5IEBACiAJCS8qIEFkZCBJU1dFUCBmbGFnIGJvdGggZm9yIGZpcm13YXJlIGFuZCBob3N0IGJhc2VkIGVuY3J5cHRpb24KIAkJICovCiAJCWZjIHw9IElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRDsKLQkJaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAl9IGVsc2UgaWYgKGxvY2FsLT5kcm9wX3VuZW5jcnlwdGVkICYmCi0JCSAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICYmCisJCSAgIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkJICAgbWV0YS0+ZXRoZXJ0eXBlICE9IEVUSF9QX1BBRSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgdW5lbmNyeXB0ZWQgVFggZGF0YSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKaW5kZXggMGE0YmY5NC4uYTJhMjAzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogCiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKQEAgLTU4OCwyNiArNTg5LDIyIEBACiBzdGF0aWMgdm9pZCBob3N0YXBfYXBfdHhfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9rLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7Ci0JdTE2IGZjOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmICghYXAtPmxvY2FsLT5ob3N0YXBkIHx8ICFhcC0+bG9jYWwtPmFwZGV2KSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0KIAkvKiBQYXNzIHRoZSBUWCBjYWxsYmFjayBmcmFtZSB0byB0aGUgaG9zdGFwZDsgdXNlIDgwMi4xMSBoZWFkZXIgdmVyc2lvbgogCSAqIDEgdG8gaW5kaWNhdGUgZmFpbHVyZSAobm8gQUNLKSBhbmQgMiBzdWNjZXNzIChmcmFtZSBBQ0tlZCkgKi8KIAotCWZjICY9IH5JRUVFODAyMTFfRkNUTF9WRVJTOwotCWZjIHw9IG9rID8gQklUKDEpIDogQklUKDApOwotCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaGRyLT5mcmFtZV9jb250cm9sICY9IGNwdV90b19sZTE2KH5JRUVFODAyMTFfRkNUTF9WRVJTKTsKKwloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYob2sgPyBCSVQoMSkgOiBCSVQoMCkpOwogCiAJc2tiLT5kZXYgPSBhcC0+bG9jYWwtPmFwZGV2OwotCXNrYl9wdWxsKHNrYiwgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpKTsKKwlza2JfcHVsbChza2IsIGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCkpOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwogCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMik7CiAJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CkBAIC02MjEsOCArNjE4LDggQEAKIHsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcC0+bG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwotCXUxNiBmYywgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzOwogCV9fbGUxNiAqcG9zOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKIAljaGFyICp0eHQgPSBOVUxMOwpAQCAtNjMyLDEwICs2MjksOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgIT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgfHwKLQkgICAgV0xBTl9GQ19HRVRfU1RZUEUoZmMpICE9IElFRUU4MDIxMV9TVFlQRV9BVVRIIHx8CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlpZiAoIWllZWU4MDIxMV9pc19hdXRoKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKIAkgICAgc2tiLT5sZW4gPCBJRUVFODAyMTFfTUdNVF9IRFJfTEVOICsgNikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3RhcF9hcF90eF9jYl9hdXRoIHJlY2VpdmVkIGludmFsaWQgIgogCQkgICAgICAgImZyYW1lXG4iLCBkZXYtPm5hbWUpOwpAQCAtNjkxLDcgKzY4Niw3IEBACiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXAtPmxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYywgc3RhdHVzOwogCV9fbGUxNiAqcG9zOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKQEAgLTcwMiwxMSArNjk3LDEwIEBACiAJCXJldHVybjsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSAhPSBJRUVFODAyMTFfRlRZUEVfTUdNVCB8fAotCSAgICAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpICE9IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQICYmCi0JICAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgIT0gSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUCkgfHwKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlpZiAoKCFpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgICAhaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSB8fAogCSAgICBza2ItPmxlbiA8IElFRUU4MDIxMV9NR01UX0hEUl9MRU4gKyA0KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaG9zdGFwX2FwX3R4X2NiX2Fzc29jIHJlY2VpdmVkIGludmFsaWQgIgogCQkgICAgICAgImZyYW1lXG4iLCBkZXYtPm5hbWUpOwpAQCAtNzU3LDEyICs3NTEsMTIgQEAKIHN0YXRpYyB2b2lkIGhvc3RhcF9hcF90eF9jYl9wb2xsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvaywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAogCWlmIChza2ItPmxlbiA8IDI0KQogCQlnb3RvIGZhaWw7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWlmIChvaykgewogCQlzcGluX2xvY2soJmFwLT5zdGFfdGFibGVfbG9jayk7CiAJCXN0YSA9IGFwX2dldF9zdGEoYXAsIGhkci0+YWRkcjEpOwpAQCAtOTE3LDcgKzkxMSw3IEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CkBAIC05NDIsOCArOTM2LDggQEAKIAl9CiAKIAlmYyA9IHR5cGVfc3VidHlwZTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYl9wdXQoc2tiLCBoZHJsZW4pOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGNwdV90b19sZTE2KHR5cGVfc3VidHlwZSkpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgaGRybGVuKTsKIAlpZiAoYm9keSkKIAkJbWVtY3B5KHNrYl9wdXQoc2tiLCBib2R5X2xlbiksIGJvZHksIGJvZHlfbGVuKTsKIApAQCAtOTU0LDExICs5NDgsMTEgQEAKIAogCiAJbWVtY3B5KGhkci0+YWRkcjEsIGFkZHIsIEVUSF9BTEVOKTsgLyogREEgLyBSQSAqLwotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgeworCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCWZjIHw9IElFRUU4MDIxMV9GQ1RMX0ZST01EUzsKIAkJbWVtY3B5KGhkci0+YWRkcjIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsgLyogQlNTSUQgKi8KIAkJbWVtY3B5KGhkci0+YWRkcjMsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsgLyogU0EgKi8KLQl9IGVsc2UgaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9DVEwpIHsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19jdGwoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQkvKiBjb250cm9sOkFDSyBkb2VzIG5vdCBoYXZlIGFkZHIyIG9yIGFkZHIzICovCiAJCW1lbXNldChoZHItPmFkZHIyLCAwLCBFVEhfQUxFTik7CiAJCW1lbXNldChoZHItPmFkZHIzLCAwLCBFVEhfQUxFTik7CkBAIC05NjcsNyArOTYxLDcgQEAKIAkJbWVtY3B5KGhkci0+YWRkcjMsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsgLyogQlNTSUQgKi8KIAl9CiAKLQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CiAKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKIAltZW1zZXQobWV0YSwgMCwgc2l6ZW9mKCptZXRhKSk7CkBAIC0xMjg0LDIyICsxMjc4LDIxIEBACiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlzaXplX3QgaGRybGVuOwogCXN0cnVjdCBhcF9kYXRhICphcCA9IGxvY2FsLT5hcDsKIAljaGFyIGJvZHlbOCArIFdMQU5fQVVUSF9DSEFMTEVOR0VfTEVOXSwgKmNoYWxsZW5nZSA9IE5VTEw7CiAJaW50IGxlbiwgb2xlbjsKIAl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOwogCV9fbGUxNiAqcG9zOwotCXUxNiByZXNwID0gV0xBTl9TVEFUVVNfU1VDQ0VTUywgZmM7CisJdTE2IHJlc3AgPSBXTEFOX1NUQVRVU19TVUNDRVNTOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKIAlzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7CiAJY2hhciAqdHh0ID0gIiI7CiAKIAlsZW4gPSBza2ItPmxlbiAtIElFRUU4MDIxMV9NR01UX0hEUl9MRU47CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmIChsZW4gPCA2KSB7CiAJCVBERUJVRyhERUJVR19BUCwgIiVzOiBoYW5kbGVfYXV0aGVuIC0gdG9vIHNob3J0IHBheWxvYWQgIgpAQCAtMTQzNSw3ICsxNDI4LDcgQEAKIAkJCSAgICBjaGFsbGVuZ2UgPT0gTlVMTCB8fAogCQkJICAgIG1lbWNtcChzdGEtPnUuc3RhLmNoYWxsZW5nZSwgY2hhbGxlbmdlLAogCQkJCSAgIFdMQU5fQVVUSF9DSEFMTEVOR0VfTEVOKSAhPSAwIHx8Ci0JCQkgICAgIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpIHsKKwkJCSAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQkJCXR4dCA9ICJjaGFsbGVuZ2UgcmVzcG9uc2UgaW5jb3JyZWN0IjsKIAkJCQlyZXNwID0gV0xBTl9TVEFUVVNfQ0hBTExFTkdFX0ZBSUw7CiAJCQkJZ290byBmYWlsOwpAQCAtMTQ4OCw3ICsxNDgxLDcgQEAKIAkJICAgICAgICJ0cmFucyM9JWQgc3RhdD0lZCBsZW49JWQgZmM9JTA0eCkgPT0+ICVkICglcylcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGhkci0+YWRkcjIsCiAJCSAgICAgICBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGUsIGxlbiwKLQkJICAgICAgIGZjLCByZXNwLCB0eHQpOworCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSwgcmVzcCwgdHh0KTsKIAl9CiB9CiAKQEAgLTE0OTgsNyArMTQ5MSw3IEBACiAJCQkgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzLCBpbnQgcmVhc3NvYykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyIGJvZHlbMTJdLCAqcCwgKmxwb3M7CiAJaW50IGxlbiwgbGVmdDsKIAlfX2xlMTYgKnBvczsKQEAgLTE3MDcsNyArMTcwMCw3IEBACiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyICpib2R5ID0gKGNoYXIgKikgKHNrYi0+ZGF0YSArIElFRUU4MDIxMV9NR01UX0hEUl9MRU4pOwogCWludCBsZW47CiAJdTE2IHJlYXNvbl9jb2RlOwpAQCAtMTc0OSw3ICsxNzQyLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJY2hhciAqYm9keSA9IHNrYi0+ZGF0YSArIElFRUU4MDIxMV9NR01UX0hEUl9MRU47CiAJaW50IGxlbjsKIAl1MTYgcmVhc29uX2NvZGU7CkBAIC0xNzg4LDcgKzE3ODEsNyBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHNjaGVkdWxlZCB0YXNrIGZvciBwZW5kaW5nIEFQIGZyYW1lcy4gKi8KIHN0YXRpYyB2b2lkIGFwX2hhbmRsZV9kYXRhX251bGxmdW5jKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAKQEAgLTE4MDUsNyArMTc5OCw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgc2NoZWR1bGVkIHRhc2sgZm9yIHBlbmRpbmcgQVAgZnJhbWVzLiAqLwogc3RhdGljIHZvaWQgYXBfaGFuZGxlX2Ryb3BwZWRfZGF0YShsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTE4NjMsNyArMTg1Niw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgc2NoZWR1bGVkIHRhc2sgZm9yIHBlbmRpbmcgQVAgZnJhbWVzLiAqLwogc3RhdGljIHZvaWQgaGFuZGxlX3BzcG9sbChsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CkBAIC0xODcyLDggKzE4NjUsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlQREVCVUcoREVCVUdfUFMyLCAiaGFuZGxlX3BzcG9sbDogQlNTSUQ9JXBNLCBUQT0lcE0gUFdSTUdUPSVkXG4iLAotCSAgICAgICBoZHItPmFkZHIxLCBoZHItPmFkZHIyLAotCSAgICAgICAhIShsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkgJiBJRUVFODAyMTFfRkNUTF9QTSkpOworCSAgICAgICBoZHItPmFkZHIxLCBoZHItPmFkZHIyLCAhIWllZWU4MDIxMV9oYXNfcG0oaGRyLT5mcmFtZV9jb250cm9sKSk7CiAKIAlpZiAobWVtY21wKGhkci0+YWRkcjEsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkgewogCQlQREVCVUcoREVCVUdfQVAsCkBAIC0xOTg0LDcgKzE5NzYsNyBAQAogc3RhdGljIHZvaWQgaGFuZGxlX2JlYWNvbihsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJY2hhciAqYm9keSA9IHNrYi0+ZGF0YSArIElFRUU4MDIxMV9NR01UX0hEUl9MRU47CiAJaW50IGxlbiwgbGVmdDsKIAl1MTYgYmVhY29uX2ludCwgY2FwYWJpbGl0eTsKQEAgLTIxNDMsMTQgKzIxMzUsMTQgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKICNlbmRpZiAvKiBQUklTTTJfTk9fS0VSTkVMX0lFRUU4MDIxMV9NR01UICovCiAJdTE2IGZjLCB0eXBlLCBzdHlwZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAkvKiBGSVg6IHNob3VsZCBnaXZlIHNrYi0+bGVuIHRvIGhhbmRsZXIgZnVuY3Rpb25zIGFuZCBjaGVjayB0aGF0IHRoZQogCSAqIGJ1ZmZlciBpcyBsb25nIGVub3VnaCAqLwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwotCXN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXR5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFOworCXN0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKIAogI2lmbmRlZiBQUklTTTJfTk9fS0VSTkVMX0lFRUU4MDIxMV9NR01UCiAJaWYgKCFsb2NhbC0+aG9zdGFwZCAmJiB0eXBlID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7CkBAIC0yMjYyLDggKzIyNTQsNyBAQAogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCXUxNiBmYzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAJbG9jYWwgPSBpZmFjZS0+bG9jYWw7CkBAIC0yMjcxLDE0ICsyMjYyLDEyIEBACiAJaWYgKHNrYi0+bGVuIDwgMTYpCiAJCWdvdG8gZHJvcDsKIAotCWxvY2FsLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAlpZiAobG9jYWwtPmFwLT5hcF9wb2xpY3kgPT0gQVBfT1RIRVJfQVBfU0tJUF9BTEwgJiYKLQkgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYKLQkgICAgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pCisJICAgIGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJZ290byBkcm9wOwogCiAJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0hPU1RBUCk7CkBAIC0yMjk0LDcgKzIyODMsNyBAQAogc3RhdGljIHZvaWQgc2NoZWR1bGVfcGFja2V0X3NlbmQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHM7CiAKIAlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnR4X2J1ZikpCkBAIC0yMzA3LDEwICsyMjk2LDEwIEBACiAJCXJldHVybjsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiX3B1dChza2IsIDE2KTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDE2KTsKIAogCS8qIEdlbmVyYXRlIGEgZmFrZSBwc3BvbGwgZnJhbWUgdG8gc3RhcnQgcGFja2V0IGRlbGl2ZXJ5ICovCi0JaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNigKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNigKIAkJSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpOwogCW1lbWNweShoZHItPmFkZHIxLCBsb2NhbC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmFkZHIyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKQEAgLTI2ODksNyArMjY3OCw3IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwogCWludCBzZXRfdGltLCByZXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CiAKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKQEAgLTI2OTgsNyArMjY4Nyw3IEBACiAJICAgIG1ldGEtPmlmYWNlLT50eXBlID09IEhPU1RBUF9JTlRFUkZBQ0VfU1RBKQogCQlnb3RvIG91dDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCWlmIChoZHItPmFkZHIxWzBdICYgMHgwMSkgewogCQkvKiBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lIC0gbm8gQVAgcmVsYXRlZCBwcm9jZXNzaW5nICovCkBAIC0yNzUzLDcgKzI3NDIsNyBAQAogCiAJaWYgKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX0FERF9NT1JFREFUQSkgewogCQkvKiBpbmRpY2F0ZSB0byBTVEEgdGhhdCBtb3JlIGZyYW1lcyBmb2xsb3cgKi8KLQkJaGRyLT5mcmFtZV9jdGwgfD0KKwkJaGRyLT5mcmFtZV9jb250cm9sIHw9CiAJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CiAJfQogCkBAIC0yODI4LDEwICsyODE3LDEwIEBACiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3R4X2V4Yyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwogCiAJc3Bpbl9sb2NrKCZsb2NhbC0+YXAtPnN0YV90YWJsZV9sb2NrKTsKQEAgLTI4OTgsOCArMjg4Nyw4IEBACiAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiBDYWxsZWQgZm9yIGVhY2ggUlggZnJhbWUgdG8gdXBkYXRlCi0gKiBTVEEgcG93ZXIgc2F2aW5nIHN0YXRlLiBwd3JtZ3QgaXMgYSBmbGFnIGZyb20gODAyLjExIGZyYW1lX2N0bCBmaWVsZC4gKi8KLWludCBob3N0YXBfdXBkYXRlX3N0YV9wcyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorICogU1RBIHBvd2VyIHNhdmluZyBzdGF0ZS4gcHdybWd0IGlzIGEgZmxhZyBmcm9tIDgwMi4xMSBmcmFtZV9jb250cm9sIGZpZWxkLiAqLworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IGZjOwpAQCAtMjkxMyw5ICsyOTAyLDEwIEBACiAJaWYgKCFzdGEpCiAJCXJldHVybiAtMTsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlob3N0YXBfdXBkYXRlX3N0YV9wczIobG9jYWwsIHN0YSwgZmMgJiBJRUVFODAyMTFfRkNUTF9QTSwKLQkJCSAgICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykpOworCQkJICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSwKKwkJCSAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpOwogCiAJYXRvbWljX2RlYygmc3RhLT51c2Vycyk7CiAJcmV0dXJuIDA7CkBAIC0yOTMyLDE2ICsyOTIyLDE2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmIChsb2NhbC0+YXAgPT0gTlVMTCkKIAkJcmV0dXJuIEFQX1JYX0NPTlRJTlVFOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwotCXN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKKwlzdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAKIAlzcGluX2xvY2soJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwogCXN0YSA9IGFwX2dldF9zdGEobG9jYWwtPmFwLCBoZHItPmFkZHIyKTsKQEAgLTMwNjQsNyArMzA1NCw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0LAogCQkJICAgICB2b2lkICoqc3RhX3B0cikKIHsKQEAgLTMxNjYsNyArMzE1Niw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKaW5kZXggZDM2ZTRiMS4uNjU1Y2VlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaApAQCAtMjM1LDcgKzIzNSw3IEBACiBhcF90eF9yZXQgaG9zdGFwX2hhbmRsZV9zdGFfdHgobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGhvc3RhcF90eF9kYXRhICp0eCk7CiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3JlbGVhc2Uodm9pZCAqcHRyKTsKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfdHhfZXhjKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpOworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogdHlwZWRlZiBlbnVtIHsKIAlBUF9SWF9DT05USU5VRSwgQVBfUlhfRFJPUCwgQVBfUlhfRVhJVCwgQVBfUlhfQ09OVElOVUVfTk9UX0FVVEhPUklaRUQKIH0gYXBfcnhfcmV0OwpAQCAtMjQzLDEzICsyNDMsMTMgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywKIAkJCSAgICAgICBpbnQgd2RzKTsKLWludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKK2ludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgICAgc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKipjcnlwdCwKIAkJCSAgICAgdm9pZCAqKnN0YV9wdHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXNzb2Moc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXV0aG9yaXplZChzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7CiBpbnQgaG9zdGFwX2FkZF9zdGEoc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwotaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAoraW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKTsKIHZvaWQgaG9zdGFwX3VwZGF0ZV9yYXRlcyhsb2NhbF9pbmZvX3QgKmxvY2FsKTsKIHZvaWQgaG9zdGFwX2FkZF93ZHNfbGlua3MobG9jYWxfaW5mb190ICpsb2NhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggMGYyNzA1OS4uM2RhZDFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xNjgzLDcgKzE2ODIsNyBAQAogCiAJUERFQlVHKERFQlVHX0VYVFJBMiwgInByaXNtMl9nZXRfdHhmaWRfaWR4OiBubyByb29tIGluIHR4ZmlkIGJ1ZjogIgogCSAgICAgICAicGFja2V0IGRyb3BwZWRcbiIpOwotCWxvY2FsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJbG9jYWwtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCiAJcmV0dXJuIC0xOwogfQpAQCAtMTc4OCwxMSArMTc4Nyw5IEBACiAJCXByaXNtMl90cmFuc21pdF9jYiwgKGxvbmcpIGlkeCk7CiAKIAlpZiAocmVzKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcmlzbTJfdHJhbnNtaXQ6IENNRENPREVfVFJBTlNNSVQgIgogCQkgICAgICAgImZhaWxlZCAocmVzPSVkKVxuIiwgZGV2LT5uYW1lLCByZXMpOwotCQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKLQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE4NDAsOCArMTgzNyw4IEBACiAJaGRyX2xlbiA9IDI0OwogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAmdHhkZXNjLmZyYW1lX2NvbnRyb2wsIGhkcl9sZW4pOwogIAlmYyA9IGxlMTZfdG9fY3B1KHR4ZGVzYy5mcmFtZV9jb250cm9sKTsKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSAmJgorCWlmIChpZWVlODAyMTFfaXNfZGF0YSh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKKwkgICAgaWVlZTgwMjExX2hhc19hNCh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKIAkgICAgc2tiLT5sZW4gPj0gMzApIHsKIAkJLyogQWRkcjQgKi8KIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBoZHJfbGVuLCB0eGRlc2MuYWRkcjQsCkBAIC0xOTQwLDEyICsxOTM3LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJaW50IHJlcywgcnhfcGVuZGluZyA9IDA7CiAJdTE2IGxlbiwgaGRyX2xlbiwgcnhmaWQsIHN0YXR1cywgbWFjcG9ydDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJc3RydWN0IGhmYTM4NHhfcnhfZnJhbWUgcnhkZXNjOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCiAJcHJpc20yX2NhbGxiYWNrKGxvY2FsLCBQUklTTTJfQ0FMTEJBQ0tfUlhfU1RBUlQpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwogCiAJcnhmaWQgPSBwcmlzbTJfcmVhZF9maWRfcmVnKGRldiwgSEZBMzg0WF9SWEZJRF9PRkYpOwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCkBAIC0yMDMyLDcgKzIwMjcsNyBAQAogCXJldHVybjsKIAogIHJ4X2Ryb3BwZWQ6Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJZ290byByeF9leGl0OwpAQCAtMjA4Miw3ICsyMDc3LDcgQEAKIAlzdGF0cy5yYXRlID0gcnhkZXNjLT5yYXRlOwogCiAJLyogQ29udmVydCBQcmlzbTIgUlggc3RydWN0dXJlIGludG8gSUVFRSA4MDIuMTEgaGVhZGVyICovCi0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUocnhkZXNjLT5mcmFtZV9jb250cm9sKSk7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4ocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKIAlpZiAoaGRybGVuID4gcnhfaGRybGVuKQogCQloZHJsZW4gPSByeF9oZHJsZW47CiAKQEAgLTIyMDQsNyArMjE5OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCWxlbiA9IGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZGF0YV9sZW4pOwogCXNrYiA9IGRldl9hbGxvY19za2IoaGRybGVuICsgbGVuKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKQEAgLTIzMTUsOCArMjMxMCw3IEBACiAJCWlmIChza2ItPmxlbiA+PSBzaXplb2YoKnR4ZGVzYykpIHsKIAkJCS8qIENvbnZlcnQgUHJpc20yIFJYIHN0cnVjdHVyZSBpbnRvIElFRUUgODAyLjExIGhlYWRlcgogCQkJICovCi0JCQl1MTYgZmMgPSBsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwotCQkJaW50IGhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwkJCWludCBoZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCQkJbWVtbW92ZShza2JfcHVsbChza2IsIHNpemVvZigqdHhkZXNjKSAtIGhkcmxlbiksCiAJCQkJJnR4ZGVzYy0+ZnJhbWVfY29udHJvbCwgaGRybGVuKTsKIApAQCAtMjMzNyw3ICsyMzMxLDcgQEAKIAlzdHJ1Y3QgaGZhMzg0eF90eF9mcmFtZSB0eGRlc2M7CiAKIAlzaG93X2R1bXAgPSBsb2NhbC0+ZnJhbWVfZHVtcCAmIFBSSVNNMl9EVU1QX1RYRVhDX0hEUjsKLQlsb2NhbC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCXJlcyA9IGhvc3RhcF90eF9jb21wbF9yZWFkKGxvY2FsLCAxLCAmdHhkZXNjLCAmcGF5bG9hZCk7CiAJSEZBMzg0WF9PVVRXKEhGQTM4NFhfRVZfVFhFWEMsIEhGQTM4NFhfRVZBQ0tfT0ZGKTsKQEAgLTIzOTQsMTIgKzIzODgsMTIgQEAKIAlQREVCVUcoREVCVUdfRVhUUkEsICIgICByZXRyeV9jb3VudD0lZCB0eF9yYXRlPSVkIGZjPTB4JTA0eCAiCiAJICAgICAgICIoJXMlcyVzOjolZCVzJXMpXG4iLAogCSAgICAgICB0eGRlc2MucmV0cnlfY291bnQsIHR4ZGVzYy50eF9yYXRlLCBmYywKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgPyAiTWdtdCIgOiAiIiwKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCA/ICJDdHJsIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSA/ICJEYXRhIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKLQkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBUb0RTIiA6ICIiLAotCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgRnJvbURTIiA6ICIiKTsKKwkgICAgICAgaWVlZTgwMjExX2lzX21nbXQodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIk1nbXQiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19jdGwodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIkN0cmwiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19kYXRhKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICJEYXRhIiA6ICIiLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKKwkgICAgICAgaWVlZTgwMjExX2hhc190b2RzKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICIgVG9EUyIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2hhc19mcm9tZHModHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIiBGcm9tRFMiIDogIiIpOwogCVBERUJVRyhERUJVR19FWFRSQSwgIiAgIEExPSVwTSBBMj0lcE0gQTM9JXBNIEE0PSVwTVxuIiwKIAkgICAgICAgdHhkZXNjLmFkZHIxLCB0eGRlc2MuYWRkcjIsCiAJICAgICAgIHR4ZGVzYy5hZGRyMywgdHhkZXNjLmFkZHI0KTsKQEAgLTMyMjgsNyArMzIyMiw2IEBACiAKIAlob3N0YXBfc2V0dXBfZGV2KGRldiwgbG9jYWwsIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSKTsKIAotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaG9zdGFwX21hc3Rlcl9zdGFydF94bWl0OwogCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKaW5kZXggOTliNGNmNC4uNmZhMTRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKQEAgLTEsNSArMSw2IEBACiAvKiBIb3N0IEFQIGRyaXZlciBJbmZvIEZyYW1lIHByb2Nlc3NpbmcgKHBhcnQgb2YgaG9zdGFwLm8gbW9kdWxlKSAqLwogCisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJob3N0YXBfYXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCA4NjE4YjMzLi4zZjJiZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0yLDYgKzIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwppbmRleCAwMmEzMTJjLi42ZmUxMjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC01NDMsNyArNTQyLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUocngtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdShyeC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHJ4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUocngtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01NzAsNyArNTcwLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUodHgtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdSh0eC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHR4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUodHgtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01OTMsMzcgKzU5NCwxNiBAQAogfQogCiAKLWludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpCitpbnQgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oX19sZTE2IGZjKQogewotCWludCBoZHJsZW4gPSAyNDsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmIGllZWU4MDIxMV9oYXNfYTQgKGZjKSkKKwkJcmV0dXJuIDMwOyAvKiBBZGRyNCAqLworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19jdHMoZmMpIHx8IGllZWU4MDIxMV9pc19hY2soZmMpKQorCQlyZXR1cm4gMTA7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChmYykpCisJCXJldHVybiAxNjsKIAotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKLQkJCWhkcmxlbiA9IDMwOyAvKiBBZGRyNCAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWhkcmxlbiA9IDE2OwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGhkcmxlbjsKLX0KLQotCi1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaG9zdGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKLQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZpZmFjZS0+c3RhdHM7CisJcmV0dXJuIDI0OwogfQogCiAKQEAgLTgzNSw2ICs4MTUsNDYgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9vcHMpOwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tZ210X25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCAJPSBob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiB2b2lkIGhvc3RhcF9zZXR1cF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbG9jYWxfaW5mb190ICpsb2NhbCwKIAkJICAgICAgaW50IHR5cGUpCiB7CkBAIC04NDQsMzcgKzg2NCwzMSBAQAogCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKiBrZXJuZWwgY2FsbGJhY2tzICovCi0JZGV2LT5nZXRfc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzOwogCWlmIChpZmFjZSkgewogCQkvKiBDdXJyZW50bHksIHdlIHBvaW50IHRvIHRoZSBwcm9wZXIgc3B5X2RhdGEgb25seSBvbgogCQkgKiB0aGUgbWFpbl9kZXYuIFRoaXMgY291bGQgYmUgZml4ZWQuIEplYW4gSUkgKi8KIAkJaWZhY2UtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmaWZhY2UtPnNweV9kYXRhOwogCQlkZXYtPndpcmVsZXNzX2RhdGEgPSAmaWZhY2UtPndpcmVsZXNzX2RhdGE7CiAJfQotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCQkoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZob3N0YXBfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5kb19pb2N0bCA9IGhvc3RhcF9pb2N0bDsKLQlkZXYtPm9wZW4gPSBwcmlzbTJfb3BlbjsKLQlkZXYtPnN0b3AgPSBwcmlzbTJfY2xvc2U7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBwcmlzbTJfc2V0X21hY19hZGRyZXNzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBwcmlzbTJfY2hhbmdlX210dTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBwcmlzbTJfdHhfdGltZW91dDsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmhvc3RhcF9pd19oYW5kbGVyX2RlZjsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAotCWlmICh0eXBlID09IEhPU1RBUF9JTlRFUkZBQ0VfQVApIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfbWdtdF9zdGFydF94bWl0OworCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBIT1NUQVBfSU5URVJGQUNFX0FQOgorCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21nbXRfbmV0ZGV2X29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7Ci0JfSBlbHNlIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfZGF0YV9zdGFydF94bWl0OworCQlicmVhazsKKwljYXNlIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSOgorCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CS8qIHVzZSBtYWluIHJhZGlvIGRldmljZSBxdWV1ZSAqLworCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21hc3Rlcl9vcHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbmV0ZGV2X29wczsKIAl9CiAKIAlkZXYtPm10dSA9IGxvY2FsLT5tdHU7Ci0JaWYgKHR5cGUgIT0gSE9TVEFQX0lOVEVSRkFDRV9NQVNURVIpIHsKLQkJLyogdXNlIG1haW4gcmFkaW8gZGV2aWNlIHF1ZXVlICovCi0JCWRldi0+dHhfcXVldWVfbGVuID0gMDsKLQl9CisKIAogCVNFVF9FVEhUT09MX09QUyhkZXYsICZwcmlzbTJfZXRodG9vbF9vcHMpOwogCkBAIC0xMTI0LDcgKzExMzgsNiBAQAogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF9yeF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF90eF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfODAyMTFfZ2V0X2hkcmxlbik7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF9nZXRfc3RhdHMpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0dXBfZGV2KTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdF9xdWV1ZSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9zZXRfaG9zdGFwZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCmluZGV4IDRkOGQ1MWEzLi4zZDIzODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaApAQCAtNjg0LDcgKzY4NCw2IEBACiAJdTE2IGNoYW5uZWxfbWFzazsgLyogbWFzayBvZiBhbGxvd2VkIGNoYW5uZWxzICovCiAJdTE2IHNjYW5fY2hhbm5lbF9tYXNrOyAvKiBtYXNrIG9mIGNoYW5uZWxzIHRvIGJlIHNjYW5uZWQgKi8KIAlzdHJ1Y3QgY29tbV90YWxsaWVzX3N1bXMgY29tbV90YWxsaWVzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAlpbnQgaXdfbW9kZTsgLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KIAlpbnQgcHNldWRvX2FkaG9jOyAvKiAwOiBJV19NT0RFX0FESE9DIGlzIHJlYWwgODAyLjExIGNvbXBsaWFudCBJQlNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKaW5kZXggMWQ1ZGMzZS4uODVjYzc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJICAlIGVjaG8gMHgwMDAwMEZGTyA+IC9wcm9jL25ldC9pZWVlODAyMTEvZGVidWdfbGV2ZWwKIAogCSAgRm9yIGEgbGlzdCBvZiB2YWx1ZXMgeW91IGNhbiBhc3NpZ24gdG8gZGVidWdfbGV2ZWwsIHlvdQotCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiA8bmV0L2llZWU4MDIxMS5oPgorCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiBpZWVlODAyMTEuaAogCiAJICBJZiB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gZGVidWcgb3IgZGV2ZWxvcCB0aGUgbGliaXB3CiAJICBjb21wb25lbnQsIHlvdSBtb3N0IGxpa2VseSB3YW50IHRvIHNheSBOIGhlcmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaWVlZTgwMjExLmgKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaWVlZTgwMjExLmgKaW5kZXggYWRiN2NmMy4uNzA3NTVjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApAQCAtNTQsNjUgKzU0LDEyIEBACiAjZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgMjU2VQogI2RlZmluZQlNQVhfRlJBR19USFJFU0hPTEQgICAgIDIzNDZVCiAKLS8qIEZyYW1lIGNvbnRyb2wgZmllbGQgY29uc3RhbnRzICovCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1ZFUlMJCTB4MDAwMwotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9GVFlQRQkJMHgwMDBjCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1NUWVBFCQkweDAwZjAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVE9EUwkJMHgwMTAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZST01EUwkJMHgwMjAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUwkweDA0MDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUkVUUlkJCTB4MDgwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9QTQkJMHgxMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBCQkweDIwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVECTB4NDAwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9PUkRFUgkJMHg4MDAwCi0KLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX01HTVQJCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfQ1RMCQkweDAwMDQKLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX0RBVEEJCTB4MDAwOAotCi0vKiBtYW5hZ2VtZW50ICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEJMHgwMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQIAkweDAwMTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRCTB4MDAyMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQCTB4MDAzMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRCTB4MDA0MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUAkweDAwNTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0JFQUNPTgkJMHgwMDgwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BVElNCQkweDAwOTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DCTB4MDBBMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVVUSAkJMHgwMEIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgJCTB4MDBDMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OCQkweDAwRDAKLQotLyogY29udHJvbCAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMCQkweDAwQTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JUUwkJMHgwMEIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DVFMJCTB4MDBDMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQUNLCQkweDAwRDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGRU5ECQkweDAwRTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGRU5EQUNLCTB4MDBGMAotCi0vKiBkYXRhICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBCQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0sJMHgwMDEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGUE9MTAkweDAwMjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0tQT0xMCTB4MDAzMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMJMHgwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDSwkJMHgwMDUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRlBPTEwJCTB4MDA2MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZBQ0tQT0xMCTB4MDA3MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEgICAgICAgIDB4MDA4MAotCi0jZGVmaW5lIElFRUU4MDIxMV9TQ1RMX0ZSQUcJCTB4MDAwRgotI2RlZmluZSBJRUVFODAyMTFfU0NUTF9TRVEJCTB4RkZGMAotCiAvKiBRT1MgY29udHJvbCAqLwogI2RlZmluZSBJRUVFODAyMTFfUUNUTF9USUQJCTB4MDAwRgogCiAvKiBkZWJ1ZyBtYWNyb3MgKi8KIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiBleHRlcm4gdTMyIGllZWU4MDIxMV9kZWJ1Z19sZXZlbDsKICNkZWZpbmUgSUVFRTgwMjExX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKIGRvIHsgaWYgKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKQEAgLTEyOCw3ICs3NSw3IEBACiB7CiAJcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCQkJCS8qIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCiAKIC8qCiAgKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbToKQEAgLTE1Miw3ICs5OSw3IEBACiAgKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGllZWU4MDIxMV9kZWJ1Z19sZXZlbCBhcnJheS4KICAqCiAgKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaWVlZTgwMjExIHRoZW4geW91IGRvIG5vdCBoYXZlCi0gKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgorICogQ09ORklHX0xJQklQV19ERUJVRyBkZWZpbmVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KICAqCiAgKi8KIApAQCAtMjE3LDIzICsxNjQsNiBAQAogI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJBRyhzZXEpICgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCiAjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKIAotLyogQWN0aW9uIGNhdGVnb3JpZXMgLSA4MDIuMTFoICovCi1lbnVtIGllZWU4MDIxMV9hY3Rpb25jYXRlZ29yaWVzIHsKLQlXTEFOX0FDVElPTl9TUEVDVFJVTV9NR01UID0gMCwKLQkvKiBSZXNlcnZlZCAxLTEyNyAgKi8KLQkvKiBFcnJvciAgICAxMjgtMjU1ICovCi19OwotCi0vKiBBY3Rpb24gZGV0YWlscyAtIDgwMi4xMWggKi8KLWVudW0gaWVlZTgwMjExX2FjdGlvbmRldGFpbHMgewotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX01FQVNVUkVfUkVRVUVTVCA9IDAsCi0JV0xBTl9BQ1RJT05fQ0FURUdPUllfTUVBU1VSRV9SRVBPUlQgPSAxLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX1RQQ19SRVFVRVNUID0gMiwKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9UUENfUkVQT1JUID0gMywKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9DSEFOTkVMX1NXSVRDSCA9IDQsCi0JLyogNSAtIDI1NSBSZXNlcnZlZCAqLwotfTsKLQogI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfU0lHTkFMICgxPDwwKQogI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSSAoMTw8MSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX05PSVNFICgxPDwyKQpAQCAtNDExLDM3ICszNDEsNiBAQAogCiAjZGVmaW5lIEJFQUNPTl9QUk9CRV9TU0lEX0lEX1BPU0lUSU9OIDEyCiAKLS8qIE1hbmFnZW1lbnQgRnJhbWUgSW5mb3JtYXRpb24gRWxlbWVudCBUeXBlcyAqLwotZW51bSBpZWVlODAyMTFfbWZpZSB7Ci0JTUZJRV9UWVBFX1NTSUQgPSAwLAotCU1GSUVfVFlQRV9SQVRFUyA9IDEsCi0JTUZJRV9UWVBFX0ZIX1NFVCA9IDIsCi0JTUZJRV9UWVBFX0RTX1NFVCA9IDMsCi0JTUZJRV9UWVBFX0NGX1NFVCA9IDQsCi0JTUZJRV9UWVBFX1RJTSA9IDUsCi0JTUZJRV9UWVBFX0lCU1NfU0VUID0gNiwKLQlNRklFX1RZUEVfQ09VTlRSWSA9IDcsCi0JTUZJRV9UWVBFX0hPUF9QQVJBTVMgPSA4LAotCU1GSUVfVFlQRV9IT1BfVEFCTEUgPSA5LAotCU1GSUVfVFlQRV9SRVFVRVNUID0gMTAsCi0JTUZJRV9UWVBFX0NIQUxMRU5HRSA9IDE2LAotCU1GSUVfVFlQRV9QT1dFUl9DT05TVFJBSU5UID0gMzIsCi0JTUZJRV9UWVBFX1BPV0VSX0NBUEFCSUxJVFkgPSAzMywKLQlNRklFX1RZUEVfVFBDX1JFUVVFU1QgPSAzNCwKLQlNRklFX1RZUEVfVFBDX1JFUE9SVCA9IDM1LAotCU1GSUVfVFlQRV9TVVBQX0NIQU5ORUxTID0gMzYsCi0JTUZJRV9UWVBFX0NTQSA9IDM3LAotCU1GSUVfVFlQRV9NRUFTVVJFX1JFUVVFU1QgPSAzOCwKLQlNRklFX1RZUEVfTUVBU1VSRV9SRVBPUlQgPSAzOSwKLQlNRklFX1RZUEVfUVVJRVQgPSA0MCwKLQlNRklFX1RZUEVfSUJTU19ERlMgPSA0MSwKLQlNRklFX1RZUEVfRVJQX0lORk8gPSA0MiwKLQlNRklFX1RZUEVfUlNOID0gNDgsCi0JTUZJRV9UWVBFX1JBVEVTX0VYID0gNTAsCi0JTUZJRV9UWVBFX0dFTkVSSUMgPSAyMjEsCi0JTUZJRV9UWVBFX1FPU19QQVJBTUVURVIgPSAyMjIsCi19OwotCiBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8xYWRkciB7CiAJX19sZTE2IGZyYW1lX2N0bDsKIAlfX2xlMTYgZHVyYXRpb25faWQ7CkBAIC04ODcsNyArNzg2LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYzsKIAogCS8qIEJvb2trZWVwaW5nIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YXRzIGllZWVfc3RhdHM7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2dlbyBnZW87CkBAIC0xMTE4LDYgKzEwMTYsMTAgQEAKIC8qIGllZWU4MDIxMS5jICovCiBleHRlcm4gdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdik7CitleHRlcm4gaW50IGllZWU4MDIxMV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKKworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2FnZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKTsKIAogZXh0ZXJuIGludCBpZWVlODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDUyYjFjZjUuLjExNWI3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC0xNjkyLDcgKzE2OTIsMTMgQEAKIAl1MzIgbG9jazsKIAl1MzIgb3JkX2xlbiA9IHNpemVvZihsb2NrKTsKIAotCS8qIFF1aXRlIGlmIG1hbnVhbGx5IGRpc2FibGVkLiAqLworCS8qIEFnZSBzY2FuIGxpc3QgZW50cmllcyBmb3VuZCBiZWZvcmUgc3VzcGVuZCAqLworCWlmIChwcml2LT5zdXNwZW5kX3RpbWUpIHsKKwkJaWVlZTgwMjExX25ldHdvcmtzX2FnZShwcml2LT5pZWVlLCBwcml2LT5zdXNwZW5kX3RpbWUpOworCQlwcml2LT5zdXNwZW5kX3RpbWUgPSAwOworCX0KKworCS8qIFF1aWV0IGlmIG1hbnVhbGx5IGRpc2FibGVkLiAqLwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVykgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IFJhZGlvIGlzIGRpc2FibGVkIGJ5IE1hbnVhbCBEaXNhYmxlICIKIAkJCSAgICAgICAic3dpdGNoXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKQEAgLTIzODUsMTMgKzIzOTEsMTQgQEAKICNlbmRpZgogCiAJcHJpdi0+ZmF0YWxfZXJyb3IgPSBJUFcyMTAwX0VSUl9DM19DT1JSVVBUSU9OOwotCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCXByaXYtPm5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpc3Jfcngoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGksCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpcHcyMTAwX3N0YXR1cyAqc3RhdHVzID0gJnByaXYtPnN0YXR1c19xdWV1ZS5kcnZbaV07CiAJc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0ICpwYWNrZXQgPSAmcHJpdi0+cnhfYnVmZmVyc1tpXTsKIApAQCAtMjQwMCwxNCArMjQwNywxNCBAQAogCWlmICh1bmxpa2VseShzdGF0dXMtPmZyYW1lX3NpemUgPiBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLCBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgeworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC0yNDM3LDEwICsyNDQ0LDEwIEBACiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkJSVBXX0RFQlVHX0RST1AoIiVzOiBOb24gY29uc3VtZWQgcGFja2V0OlxuIiwKLQkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJCSAgICAgICBkZXYtPm5hbWUpOwogCQlwcmludGtfYnVmKElQV19ETF9EUk9QLCBwYWNrZXRfZGF0YSwgc3RhdHVzLT5mcmFtZV9zaXplKTsKICNlbmRpZgotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCQkvKiBpZWVlODAyMTFfcnggZmFpbGVkLCBzbyBpdCBkaWRuJ3QgZnJlZSB0aGUgU0tCICovCiAJCWRldl9rZnJlZV9za2JfYW55KHBhY2tldC0+c2tiKTsKQEAgLTI0NTEsNyArMjQ1OCw3IEBACiAJaWYgKHVubGlrZWx5KGlwdzIxMDBfYWxsb2Nfc2tiKHByaXYsIHBhY2tldCkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIgogCQkgICAgICAgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgU0tCIG9udG8gUkJEIHJpbmcgLSBkaXNhYmxpbmcgIgotCQkgICAgICAgImFkYXB0ZXIuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgICJhZGFwdGVyLlxuIiwgZGV2LT5uYW1lKTsKIAkJLyogVE9ETzogc2NoZWR1bGUgYWRhcHRlciBzaHV0ZG93biAqLwogCQlJUFdfREVCVUdfSU5GTygiVE9ETzogU2h1dGRvd24gYWRhcHRlci4uLlxuIik7CiAJfQpAQCAtMjQ2NSw2ICsyNDcyLDcgQEAKIHN0YXRpYyB2b2lkIGlzcl9yeF9tb25pdG9yKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAogCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwogCXN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqcGFja2V0ID0gJnByaXYtPnJ4X2J1ZmZlcnNbaV07CiAKQEAgLTI0ODIsMTUgKzI0OTAsMTUgQEAKIAkJCQlzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLAogCQkJICAgICAgIHNrYl90YWlscm9vbShwYWNrZXQtPnNrYikpOwotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKSB7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IHVwLlxuIik7CiAJCXJldHVybjsKQEAgLTI0OTksNyArMjUwNyw3IEBACiAJaWYgKHVubGlrZWx5KHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0sgJiYKIAkJICAgICBzdGF0dXMtPmZsYWdzICYgSVBXX1NUQVRVU19GTEFHX0NSQ19FUlJPUikpIHsKIAkJSVBXX0RFQlVHX1JYKCJDUkMgZXJyb3IgaW4gcGFja2V0LiAgRHJvcHBpbmcuXG4iKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI1MjEsNyArMjUyOSw3IEBACiAJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSk7CiAKIAlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkocGFja2V0LT5za2IpOwpAQCAtMjUzMiw3ICsyNTQwLDcgQEAKIAlpZiAodW5saWtlbHkoaXB3MjEwMF9hbGxvY19za2IocHJpdiwgcGFja2V0KSkpIHsKIAkJSVBXX0RFQlVHX1dBUk5JTkcoCiAJCQkiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBTS0Igb250byBSQkQgcmluZyAtIGRpc2FibGluZyAiCi0JCQkiYWRhcHRlci5cbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJImFkYXB0ZXIuXG4iLCBkZXYtPm5hbWUpOwogCQkvKiBUT0RPOiBzY2hlZHVsZSBhZGFwdGVyIHNodXRkb3duICovCiAJCUlQV19ERUJVR19JTkZPKCJUT0RPOiBTaHV0ZG93biBhZGFwdGVyLi4uXG4iKTsKIAl9CkBAIC0zMzM0LDcgKzMzNDIsNyBAQAogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCUlQV19ERUJVR19JTkZPKCJDYW4gbm90IHRyYW5zbWl0IHdoZW4gbm90IGNvbm5lY3RlZC5cbiIpOwotCQlwcml2LT5pZWVlLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlwcml2LT5uZXRfZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQpAQCAtNTgzMCw3ICs1ODM4LDcgQEAKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCXByaXYtPmllZWUtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQpAQCAtNjAwMCw2ICs2MDA4LDE3IEBACiAKIHN0YXRpYyB2b2lkIGlwdzIxMDBfaXJxX3Rhc2tsZXQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3MjEwMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpcHcyMTAwX29wZW4sCisJLm5kb19zdG9wCQk9IGlwdzIxMDBfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGllZWU4MDIxMV94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX2luaXQJCT0gaXB3MjEwMF9uZXRfaW5pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaXB3MjEwMF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaXB3MjEwMF9zZXRfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIExvb2sgaW50byB1c2luZyBuZXRkZXYgZGVzdHJ1Y3RvciB0byBzaHV0ZG93biBpZWVlODAyMTE/ICovCiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXB3MjEwMF9hbGxvY19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCkBAIC02MDI0LDE1ICs2MDQzLDExIEBACiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CiAKLQlkZXYtPm9wZW4gPSBpcHcyMTAwX29wZW47Ci0JZGV2LT5zdG9wID0gaXB3MjEwMF9jbG9zZTsKLQlkZXYtPmluaXQgPSBpcHcyMTAwX25ldF9pbml0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpcHcyMTAwX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZpcHcyMTAwX2V0aHRvb2xfb3BzOwotCWRldi0+dHhfdGltZW91dCA9IGlwdzIxMDBfdHhfdGltZW91dDsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmlwdzIxMDBfd3hfaGFuZGxlcl9kZWY7CiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5pZWVlODAyMTEgPSBwcml2LT5pZWVlOwogCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gaXB3MjEwMF9zZXRfYWRkcmVzczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMyAqIEhaOwogCWRldi0+aXJxID0gMDsKIApAQCAtNjQxNSw2ICs2NDMwLDggQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOwogCisJcHJpdi0+c3VzcGVuZF9hdCA9IGdldF9zZWNvbmRzKCk7CisKIAltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTY0NTgsNiArNjQ3NSw4IEBACiAJICogdGhlIHF1ZXVlIG9mIG5lZWRlZCAqLwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAorCXByaXYtPnN1c3BlbmRfdGltZSA9IGdldF9zZWNvbmRzKCkgLSBwcml2LT5zdXNwZW5kX2F0OworCiAJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpKQogCQlpcHcyMTAwX3VwKHByaXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAppbmRleCBiYmYxZGRjLi5mMTgzZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaApAQCAtMzksOCArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLy8gbmV3IGRyaXZlciBBUEkKIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KLQogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAjZW5kaWYKQEAgLTQ4LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIHN0cnVjdCBpcHcyMTAwX3ByaXY7CiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQ7CiBzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQ7CkBAIC01OTEsNiArNTkxLDEwIEBACiAKIAlpbnQgdXNlcl9yZXF1ZXN0ZWRfc2NhbjsKIAorCS8qIFRyYWNrIHRpbWUgaW4gc3VzcGVuZCAqLworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9hdDsKKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfdGltZTsKKwogCXUzMiBpbnRlcnJ1cHRzOwogCWludCB0eF9pbnRlcnJ1cHRzOwogCWludCByeF9pbnRlcnJ1cHRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCAwNDIwZDNkLi5iMzQ0OTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtMzAxLDg4ICszMDEsMTAyIEBACiB9CiAKIC8qIDgtYml0IGRpcmVjdCB3cml0ZSAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKSB3cml0ZWIoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTgoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgaXB3LT5od19iYXNlICsgb2ZzKTsKK30KIAogLyogOC1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfd3JpdGU4KGlwdywgb2ZzLCB2YWwpIGRvIHsgXAotIElQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKLSB9IHdoaWxlICgwKQorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCisJX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIHdyaXRldygodmFsKSwgKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaXB3X3dyaXRlMTYoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIGlwdy0+aHdfYmFzZSArIG9mcyk7Cit9CiAKIC8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGZvciBsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIFwKLSBJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9kaXJlY3QxNigweCUwOFgsIDB4JTA4WClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikob2ZzKSwgKHUzMikodmFsKSk7IFwKLSBfaXB3X3dyaXRlMTYoaXB3LCBvZnMsIHZhbCkKKyNkZWZpbmUgaXB3X3dyaXRlMTYoaXB3LCBvZnMsIHZhbCkgZG8geyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MTYoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCisJX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpOyBcCit9IHdoaWxlICgwKQogCiAvKiAzMi1iaXQgZGlyZWN0IHdyaXRlIChsb3cgNEspICovCi0jZGVmaW5lIF9pcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSB3cml0ZWwoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTMyKHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1bnNpZ25lZCBsb25nIG9mcywKKwkJdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBpcHctPmh3X2Jhc2UgKyBvZnMpOworfQogCiAvKiAzMi1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSBcCi0gSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MzIoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTMyKGlwdywgb2ZzLCB2YWwpCisjZGVmaW5lIGlwd193cml0ZTMyKGlwdywgb2ZzLCB2YWwpIGRvIHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDMyKDB4JTA4WCwgMHglMDhYKVxuIiwgX19GSUxFX18sIFwKKwkJCV9fTElORV9fLCAodTMyKShvZnMpLCAodTMyKSh2YWwpKTsgXAorCV9pcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKTsgXAorfSB3aGlsZSAoMCkKIAogLyogOC1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd19yZWFkOChpcHcsIG9mcykgcmVhZGIoKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKLQotLyogOC1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotc3RhdGljIGlubGluZSB1OCBfX2lwd19yZWFkOChjaGFyICpmLCB1MzIgbCwgc3RydWN0IGlwd19wcml2ICppcHcsIHUzMiBvZnMpCitzdGF0aWMgaW5saW5lIHU4IF9pcHdfcmVhZDgoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0OCgweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7Ci0JcmV0dXJuIF9pcHdfcmVhZDgoaXB3LCBvZnMpOworCXJldHVybiByZWFkYihpcHctPmh3X2Jhc2UgKyBvZnMpOwogfQogCiAvKiBhbGlhcyB0byA4LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZDgoaXB3LCBvZnMpIF9faXB3X3JlYWQ4KF9fRklMRV9fLCBfX0xJTkVfXywgaXB3LCBvZnMpCisjZGVmaW5lIGlwd19yZWFkOChpcHcsIG9mcykgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0OCgweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCSh1MzIpKG9mcykpOyBcCisJX2lwd19yZWFkOChpcHcsIG9mcyk7IFwKK30pCiAKIC8qIDE2LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3JlYWQxNihpcHcsIG9mcykgcmVhZHcoKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKLQotLyogMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KLXN0YXRpYyBpbmxpbmUgdTE2IF9faXB3X3JlYWQxNihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGlwd19wcml2ICppcHcsIHUzMiBvZnMpCitzdGF0aWMgaW5saW5lIHUxNiBfaXB3X3JlYWQxNihzdHJ1Y3QgaXB3X3ByaXYgKmlwdywgdW5zaWduZWQgbG9uZyBvZnMpCiB7Ci0JSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9kaXJlY3QxNigweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7Ci0JcmV0dXJuIF9pcHdfcmVhZDE2KGlwdywgb2ZzKTsKKwlyZXR1cm4gcmVhZHcoaXB3LT5od19iYXNlICsgb2ZzKTsKIH0KIAogLyogYWxpYXMgdG8gMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd19yZWFkMTYoaXB3LCBvZnMpIF9faXB3X3JlYWQxNihfX0ZJTEVfXywgX19MSU5FX18sIGlwdywgb2ZzKQorI2RlZmluZSBpcHdfcmVhZDE2KGlwdywgb2ZzKSAoeyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9kaXJlY3QxNigweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCSh1MzIpKG9mcykpOyBcCisJX2lwd19yZWFkMTYoaXB3LCBvZnMpOyBcCit9KQogCiAvKiAzMi1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd19yZWFkMzIoaXB3LCBvZnMpIHJlYWRsKChpcHcpLT5od19iYXNlICsgKG9mcykpCi0KLS8qIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi1zdGF0aWMgaW5saW5lIHUzMiBfX2lwd19yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1MzIgX2lwd19yZWFkMzIoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MzIoMHglMDhYKVxuIiwgZiwgbCwgKHUzMikgKG9mcykpOwotCXJldHVybiBfaXB3X3JlYWQzMihpcHcsIG9mcyk7CisJcmV0dXJuIHJlYWRsKGlwdy0+aHdfYmFzZSArIG9mcyk7CiB9CiAKIC8qIGFsaWFzIHRvIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZDMyKGlwdywgb2ZzKSBfX2lwd19yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBpcHcsIG9mcykKKyNkZWZpbmUgaXB3X3JlYWQzMihpcHcsIG9mcykgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MzIoMHglMDhYKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBcCisJCQkodTMyKShvZnMpKTsgXAorCV9pcHdfcmVhZDMyKGlwdywgb2ZzKTsgXAorfSkKIAotLyogbXVsdGktYnl0ZSByZWFkIChhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogc3RhdGljIHZvaWQgX2lwd19yZWFkX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqLCB1MzIsIHU4ICosIGludCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19pcHdfcmVhZF9pbmRpcmVjdChjb25zdCBjaGFyICpmLCBpbnQgbCwKLQkJCQkgICAgICAgc3RydWN0IGlwd19wcml2ICphLCB1MzIgYiwgdTggKiBjLCBpbnQgZCkKLXsKLQlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2luZGlyZWN0KDB4JTA4WCkgJWQgYnl0ZXNcbiIsIGYsIGwsICh1MzIpIChiKSwKLQkJICAgICBkKTsKLQlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCk7Ci19Ci0KIC8qIGFsaWFzIHRvIG11bHRpLWJ5dGUgcmVhZCAoU1JBTS9yZWdzIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd19yZWFkX2luZGlyZWN0KGEsIGIsIGMsIGQpIF9faXB3X3JlYWRfaW5kaXJlY3QoX19GSUxFX18sIF9fTElORV9fLCBhLCBiLCBjLCBkKQorI2RlZmluZSBpcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKSAoeyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9pbmRpcmVjdCgweCUwOFgpICV1IGJ5dGVzXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKGIpLCAodTMyKShkKSk7IFwKKwlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCk7IFwKK30pCiAKIC8qIGFsaWFzIHRvIG11bHRpLWJ5dGUgcmVhZCAoU1JBTS9yZWdzIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHU4ICogZGF0YSwKIAkJCQlpbnQgbnVtKTsKLSNkZWZpbmUgaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpIFwKLQlJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9pbmRpcmVjdCgweCUwOFgpICVkIGJ5dGVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKGIpLCBkKTsgXAotCV9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCkKKyNkZWZpbmUgaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpIGRvIHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2luZGlyZWN0KDB4JTA4WCkgJXUgYnl0ZXNcbiIsIF9fRklMRV9fLCBcCisJCQlfX0xJTkVfXywgKHUzMikoYiksICh1MzIpKGQpKTsgXAorCV9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDMyLWJpdCBpbmRpcmVjdCB3cml0ZSAoYWJvdmUgNEspICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX3JlZzMyKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQpAQCAtNzcxNywyMiArNzczMSwyMyBAQAogCQkJCSAgIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciAqcnhiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5uZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZQogCSAqIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArIElQV19SWF9GUkFNRV9TSVpFKSA+CiAJCSAgICAgc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC03NzU0LDcgKzc3NjksNyBAQAogCQlpcHdfcmVidWlsZF9kZWNyeXB0ZWRfc2tiKHByaXYsIHJ4Yi0+c2tiKTsKIAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCi0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWVsc2UgewkJCS8qIGllZWU4MDIxMV9yeCBzdWNjZWVkZWQsIHNvIGl0IG5vdyBvd25zIHRoZSBTS0IgKi8KIAkJcnhiLT5za2IgPSBOVUxMOwogCQlfX2lwd19sZWRfYWN0aXZpdHlfb24ocHJpdik7CkBAIC03NzY2LDYgKzc3ODEsNyBAQAogCQkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpcHdfcnhfZnJhbWUgKmZyYW1lID0gJnBrdC0+dS5mcmFtZTsKIApAQCAtNzc4MywxOCArNzc5OSwxOCBAQAogCXNob3J0IGxlbiA9IGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5uZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZQogCSAqIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArIElQV19SWF9GUkFNRV9TSVpFKSA+CiAJCSAgICAgc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC03ODA0LDcgKzc4MjAsNyBAQAogCSAqIHRoYXQgbm93ICovCiAJaWYgKGxlbiA+IElQV19SWF9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcikpIHsKIAkJLyogRklYTUU6IFNob3VsZCBhbGxvYyBiaWdnZXIgc2tiIGluc3RlYWQgKi8KLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOwogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgdG9vIGxhcmdlIHBhY2tldCBpbiBtb25pdG9yXG4iKTsKIAkJcmV0dXJuOwpAQCAtNzkxMCw3ICs3OTI2LDcgQEAKIAlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHJ4Yi0+c2tiLT5sZW4pOwogCiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcnhiLT5za2IsIHN0YXRzKSkKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJZWxzZSB7CQkJLyogaWVlZTgwMjExX3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CiAJCS8qIG5vIExFRCBkdXJpbmcgY2FwdHVyZSAqLwpAQCAtNzk0Miw2ICs3OTU4LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+cHJvbV9uZXRfZGV2OwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXB3X3J4X2ZyYW1lICpmcmFtZSA9ICZwa3QtPnUuZnJhbWU7CiAJc3RydWN0IGlwd19ydF9oZHIgKmlwd19ydDsKQEAgLTc5NjQsMTcgKzc5ODEsMTcgQEAKIAkJcmV0dXJuOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5wcm9tX25ldF9kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCWlmICh1bmxpa2VseSgobGVuICsgSVBXX1JYX0ZSQU1FX1NJWkUpID4gc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+cHJvbV9wcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZSBpbnRlcmZhY2UgaXMgb3BlbiAqLwotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5wcm9tX25ldF9kZXYpKSkgewotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNzk4Myw3ICs4MDAwLDcgQEAKIAkgKiB0aGF0IG5vdyAqLwogCWlmIChsZW4gPiBJUFdfUlhfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSB7CiAJCS8qIEZJWE1FOiBTaG91bGQgYWxsb2MgYmlnZ2VyIHNrYiBpbnN0ZWFkICovCi0JCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHRvbyBsYXJnZSBwYWNrZXQgaW4gbW9uaXRvclxuIik7CiAJCXJldHVybjsKIAl9CkBAIC04MTE1LDcgKzgxMzIsNyBAQAogCUlQV19ERUJVR19SWCgiUnggcGFja2V0IG9mICVkIGJ5dGVzLlxuIiwgc2tiLT5sZW4pOwogCiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+cHJvbV9wcml2LT5pZWVlLCBza2IsIHN0YXRzKSkgewotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KIH0KQEAgLTgzOTksNyArODQxNiw3IEBACiAJCQkJCUlQV19ERUJVR19EUk9QCiAJCQkJCSAgICAoIlJlY2VpdmVkIHBhY2tldCBpcyB0b28gc21hbGwuICIKIAkJCQkJICAgICAiRHJvcHBpbmcuXG4iKTsKLQkJCQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCXByaXYtPm5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTEwNDcwLDE1ICsxMDQ4Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppcHdfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlwcml2LT5pZWVlLT5zdGF0cy50eF9wYWNrZXRzID0gcHJpdi0+dHhfcGFja2V0czsKLQlwcml2LT5pZWVlLT5zdGF0cy5yeF9wYWNrZXRzID0gcHJpdi0+cnhfcGFja2V0czsKLQlyZXR1cm4gJnByaXYtPmllZWUtPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCkBAIC0xMTIyNCw2ICsxMTIzMiwxMiBAQAogewogCWludCByYywgaSwgajsKIAorCS8qIEFnZSBzY2FuIGxpc3QgZW50cmllcyBmb3VuZCBiZWZvcmUgc3VzcGVuZCAqLworCWlmIChwcml2LT5zdXNwZW5kX3RpbWUpIHsKKwkJaWVlZTgwMjExX25ldHdvcmtzX2FnZShwcml2LT5pZWVlLCBwcml2LT5zdXNwZW5kX3RpbWUpOworCQlwcml2LT5zdXNwZW5kX3RpbWUgPSAwOworCX0KKwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRVhJVF9QRU5ESU5HKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMTE1MTUsMTEgKzExNTI5LDE0IEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwd19wcm9tX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcHdfcHJvbV9wcml2ICpwcm9tX3ByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiAmcHJvbV9wcml2LT5pZWVlLT5zdGF0czsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3X3Byb21fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGlwd19wcm9tX29wZW4sCisJLm5kb19zdG9wCQk9IGlwd19wcm9tX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGlwd19wcm9tX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCBpcHdfcHJvbV9hbGxvYyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CkBAIC0xMTU0MCwxMCArMTE1NTcsNyBAQAogCW1lbWNweShwcml2LT5wcm9tX25ldF9kZXYtPmRldl9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCiAJcHJpdi0+cHJvbV9uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKLQlwcml2LT5wcm9tX25ldF9kZXYtPm9wZW4gPSBpcHdfcHJvbV9vcGVuOwotCXByaXYtPnByb21fbmV0X2Rldi0+c3RvcCA9IGlwd19wcm9tX3N0b3A7Ci0JcHJpdi0+cHJvbV9uZXRfZGV2LT5nZXRfc3RhdHMgPSBpcHdfcHJvbV9nZXRfc3RhdHM7Ci0JcHJpdi0+cHJvbV9uZXRfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQ7CisJcHJpdi0+cHJvbV9uZXRfZGV2LT5uZXRkZXZfb3BzID0gJmlwd19wcm9tX25ldGRldl9vcHM7CiAKIAlwcml2LT5wcm9tX3ByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX01PTklUT1I7CiAJU0VUX05FVERFVl9ERVYocHJpdi0+cHJvbV9uZXRfZGV2LCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKQEAgLTExNTcxLDYgKzExNTg1LDE3IEBACiAKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwd19uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBpcHdfbmV0X2luaXQsCisJLm5kb19vcGVuCQk9IGlwd19uZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gaXB3X25ldF9zdG9wLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaXB3X25ldF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBpcHdfbmV0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlwd19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTExNjcyLDEyICsxMTY5Nyw3IEBACiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CiAKLQluZXRfZGV2LT5vcGVuID0gaXB3X25ldF9vcGVuOwotCW5ldF9kZXYtPnN0b3AgPSBpcHdfbmV0X3N0b3A7Ci0JbmV0X2Rldi0+aW5pdCA9IGlwd19uZXRfaW5pdDsKLQluZXRfZGV2LT5nZXRfc3RhdHMgPSBpcHdfbmV0X2dldF9zdGF0czsKLQluZXRfZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZXRfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpcHdfbmV0X3NldF9tYWNfYWRkcmVzczsKKwluZXRfZGV2LT5uZXRkZXZfb3BzID0gJmlwd19uZXRkZXZfb3BzOwogCXByaXYtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmcHJpdi0+aWVlZS0+c3B5X2RhdGE7CiAJbmV0X2Rldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwogCW5ldF9kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmlwd193eF9oYW5kbGVyX2RlZjsKQEAgLTExODI0LDYgKzExODQ0LDggQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CiAKKwlwcml2LT5zdXNwZW5kX2F0ID0gZ2V0X3NlY29uZHMoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMTg1OSw2ICsxMTg4MSw4IEBACiAJICogdGhlIHF1ZXVlIG9mIG5lZWRlZCAqLwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAorCXByaXYtPnN1c3BlbmRfdGltZSA9IGdldF9zZWNvbmRzKCkgLSBwcml2LT5zdXNwZW5kX2F0OworCiAJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT51cCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmgKaW5kZXggMjc3YjI3NC4uMDVlOGNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmgKQEAgLTQ5LDEzICs0OSwxNCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiaXB3MjIwMCIKIAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIC8qIEF1dGhlbnRpY2F0aW9uICBhbmQgQXNzb2NpYXRpb24gU3RhdGVzICovCiBlbnVtIGNvbm5lY3Rpb25fbWFuYWdlcl9hc3NvY19zdGF0ZXMgewogCUNNQVNfSU5JVCA9IDAsCkBAIC0xMzQ2LDYgKzEzNDcsMTAgQEAKIAogCXM4IHR4X3Bvd2VyOwogCisJLyogVHJhY2sgdGltZSBpbiBzdXNwZW5kICovCisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX2F0OworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF90aW1lOworCiAjaWZkZWYgQ09ORklHX1BNCiAJdTMyIHBtX3N0YXRlWzE2XTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfZ2VvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYwppbmRleCA5NjBhZDEzLi45ZGZiYjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKIAogaW50IGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCBjaGFubmVsKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfbW9kdWxlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwppbmRleCBhMmY1NjE2Li45MmEyNjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogCi0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTiAiODAyLjExIGRhdGEvbWFuYWdlbWVudC9jb250cm9sIHN0YWNrIgogI2RlZmluZSBEUlZfTkFNRSAgICAgICAgImllZWU4MDIxMSIKQEAgLTEwNSw2ICsxMDUsMjEgQEAKIAlpZWVlLT5uZXR3b3JrcyA9IE5VTEw7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2FnZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGFnZV9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcyhhZ2Vfc2VjcyAqIE1TRUNfUEVSX1NFQyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0d29yaywgJmllZWUtPm5ldHdvcmtfbGlzdCwgbGlzdCkgeworCQluZXR3b3JrLT5sYXN0X3NjYW5uZWQgLT0gYWdlX2ppZmZpZXM7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX25ldHdvcmtzX2FnZSk7CisKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19pbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCWludCBpOwpAQCAtMTE2LDIwICsxMzEsMTQgQEAKIAkJCSAgICAgICZpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdCk7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCitpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gSUVFRTgwMjExX0RBVEFfTEVOKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2LT5tdHUgPSBuZXdfbXR1OwogCXJldHVybiAwOwogfQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmllZWU4MDIxMV9nZW5lcmljX2dldF9zdGF0cygKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmllZWUtPnN0YXRzOwotfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2hhbmdlX210dSk7CiAKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2KQogewpAQCAtMTQ1LDEyICsxNTQsMTAgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCWllZWUgPSBuZXRkZXZfcHJpdihkZXYpOworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV94bWl0OwogCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwotCi0JLyogRHJpdmVycyBhcmUgZnJlZSB0byBvdmVycmlkZSB0aGlzIGlmIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uCi0JICogZG9lcyBub3QgbWVldCB0aGVpciBuZWVkcy4gKi8KLQlkZXYtPmdldF9zdGF0cyA9IGllZWU4MDIxMV9nZW5lcmljX2dldF9zdGF0czsKKyNlbmRpZgogCiAJaWVlZS0+ZGV2ID0gZGV2OwogCkBAIC0yMDYsNyArMjEzLDcgQEAKIAlmcmVlX25ldGRldihkZXYpOwogfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7CiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsID0gMDsKQEAgLTIzNywxMSArMjQ0LDExIEBACiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGxlbik7CiB9Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogc3RhdGljIGludCBfX2luaXQgaWVlZTgwMjExX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAogCWllZWU4MDIxMV9kZWJ1Z19sZXZlbCA9IGRlYnVnOwpAQCAtMjYxLDcgKzI2OCw3IEBACiAJZS0+cmVhZF9wcm9jID0gc2hvd19kZWJ1Z19sZXZlbDsKIAllLT53cml0ZV9wcm9jID0gc3RvcmVfZGVidWdfbGV2ZWw7CiAJZS0+ZGF0YSA9IE5VTEw7Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfREVTQ1JJUFRJT04gIiwgIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgRFJWX0NPUFlSSUdIVCAiXG4iKTsKQEAgLTI3MSwyMCArMjc4LDIwIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpZWVlODAyMTFfZXhpdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9wcm9jKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIGllZWU4MDIxMV9wcm9jKTsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKIAkJaWVlZTgwMjExX3Byb2MgPSBOVUxMOwogCX0KLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogbW9kdWxlX2V4aXQoaWVlZTgwMjExX2V4aXQpOwogbW9kdWxlX2luaXQoaWVlZTgwMjExX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKaW5kZXggOWM2N2RmYS4uZGFlNGI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCkBAIC0zMyw3ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKworI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTMzNCw3ICszMzUsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJc2l6ZV90IGhkcmxlbjsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlLCBzYzsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGZyYWc7CiAJdTggKnBheWxvYWQ7CiAJdTE2IGV0aGVydHlwZTsKQEAgLTM1Myw4ICszNTMsNiBAQAogCWludCBjYW5fYmVfZGVjcnlwdGVkID0gMDsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKLQlzdGF0cyA9ICZpZWVlLT5zdGF0czsKLQogCWlmIChza2ItPmxlbiA8IDEwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTS0IgbGVuZ3RoIDwgMTBcbiIsIGRldi0+bmFtZSk7CiAJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTQxMSw4ICs0MDksOCBAQAogI2VuZGlmCiAKIAlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJaWVlZTgwMjExX21vbml0b3JfcngoaWVlZSwgc2tiLCByeF9zdGF0cyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTc2OCw4ICs3NjYsOCBAQAogCX0KICNlbmRpZgogCi0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogI2lmZGVmIE5PVF9ZRVQKIAlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUiAmJiAhd2RzICYmIGllZWUtPmFwLT5icmlkZ2VfcGFja2V0cykgewpAQCAtODExLDcgKzgwOSw3IEBACiAJCQkgKiBpbiBvdXIgc3RhdHMuICovCiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUAogCQkJICAgICgiUlg6IG5ldGlmX3J4IGRyb3BwZWQgdGhlIHBhY2tldFxuIik7Ci0JCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCX0KIAl9CiAKQEAgLTgyMyw3ICs4MjEsNyBAQAogCXJldHVybiAxOwogCiAgICAgICByeF9kcm9wcGVkOgotCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAKIAkvKiBSZXR1cm5pbmcgMCBpbmRpY2F0ZXMgdG8gY2FsbGVyIHRoYXQgd2UgaGF2ZSBub3QgaGFuZGxlZCB0aGUgU0tCLS0KIAkgKiBzbyBpdCBpcyBzdGlsbCBhbGxvY2F0ZWQgYW5kIGNhbiBiZSB1c2VkIGFnYWluIGJ5IHVuZGVybHlpbmcKQEAgLTkxOCw3ICs5MTYsNyBAQAogCiBkcm9wX2ZyZWU6CiAJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLQlpZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJaWVlZS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJcmV0dXJuOwogfQogCkBAIC0xMDc5LDM3ICsxMDc3LDM3IEBACiAJcmV0dXJuIHJjOwogfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotI2RlZmluZSBNRklFX1NUUklORyh4KSBjYXNlIE1GSUVfVFlQRV8gIyN4OiByZXR1cm4gI3gKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCisjZGVmaW5lIE1GSUVfU1RSSU5HKHgpIGNhc2UgV0xBTl9FSURfICMjeDogcmV0dXJuICN4CiAKIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfaW5mb19lbGVtZW50X3N0cmluZyh1MTYgaWQpCiB7CiAJc3dpdGNoIChpZCkgewogCQlNRklFX1NUUklORyhTU0lEKTsKLQkJTUZJRV9TVFJJTkcoUkFURVMpOwotCQlNRklFX1NUUklORyhGSF9TRVQpOwotCQlNRklFX1NUUklORyhEU19TRVQpOwotCQlNRklFX1NUUklORyhDRl9TRVQpOworCQlNRklFX1NUUklORyhTVVBQX1JBVEVTKTsKKwkJTUZJRV9TVFJJTkcoRkhfUEFSQU1TKTsKKwkJTUZJRV9TVFJJTkcoRFNfUEFSQU1TKTsKKwkJTUZJRV9TVFJJTkcoQ0ZfUEFSQU1TKTsKIAkJTUZJRV9TVFJJTkcoVElNKTsKLQkJTUZJRV9TVFJJTkcoSUJTU19TRVQpOworCQlNRklFX1NUUklORyhJQlNTX1BBUkFNUyk7CiAJCU1GSUVfU1RSSU5HKENPVU5UUlkpOwotCQlNRklFX1NUUklORyhIT1BfUEFSQU1TKTsKLQkJTUZJRV9TVFJJTkcoSE9QX1RBQkxFKTsKKwkJTUZJRV9TVFJJTkcoSFBfUEFSQU1TKTsKKwkJTUZJRV9TVFJJTkcoSFBfVEFCTEUpOwogCQlNRklFX1NUUklORyhSRVFVRVNUKTsKIAkJTUZJRV9TVFJJTkcoQ0hBTExFTkdFKTsKLQkJTUZJRV9TVFJJTkcoUE9XRVJfQ09OU1RSQUlOVCk7Ci0JCU1GSUVfU1RSSU5HKFBPV0VSX0NBUEFCSUxJVFkpOworCQlNRklFX1NUUklORyhQV1JfQ09OU1RSQUlOVCk7CisJCU1GSUVfU1RSSU5HKFBXUl9DQVBBQklMSVRZKTsKIAkJTUZJRV9TVFJJTkcoVFBDX1JFUVVFU1QpOwogCQlNRklFX1NUUklORyhUUENfUkVQT1JUKTsKLQkJTUZJRV9TVFJJTkcoU1VQUF9DSEFOTkVMUyk7Ci0JCU1GSUVfU1RSSU5HKENTQSk7CisJCU1GSUVfU1RSSU5HKFNVUFBPUlRFRF9DSEFOTkVMUyk7CisJCU1GSUVfU1RSSU5HKENIQU5ORUxfU1dJVENIKTsKIAkJTUZJRV9TVFJJTkcoTUVBU1VSRV9SRVFVRVNUKTsKIAkJTUZJRV9TVFJJTkcoTUVBU1VSRV9SRVBPUlQpOwogCQlNRklFX1NUUklORyhRVUlFVCk7CiAJCU1GSUVfU1RSSU5HKElCU1NfREZTKTsKIAkJTUZJRV9TVFJJTkcoRVJQX0lORk8pOwogCQlNRklFX1NUUklORyhSU04pOwotCQlNRklFX1NUUklORyhSQVRFU19FWCk7CisJCU1GSUVfU1RSSU5HKEVYVF9TVVBQX1JBVEVTKTsKIAkJTUZJRV9TVFJJTkcoR0VORVJJQyk7CiAJCU1GSUVfU1RSSU5HKFFPU19QQVJBTUVURVIpOwogCWRlZmF1bHQ6CkBAIC0xMTI0LDcgKzExMjIsNyBAQAogewogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAJdTggaTsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCWNoYXIgcmF0ZXNfc3RyWzY0XTsKIAljaGFyICpwOwogI2VuZGlmCkBAIC0xMTQ0LDcgKzExNDIsNyBAQAogCQl9CiAKIAkJc3dpdGNoIChpbmZvX2VsZW1lbnQtPmlkKSB7Ci0JCWNhc2UgTUZJRV9UWVBFX1NTSUQ6CisJCWNhc2UgV0xBTl9FSURfU1NJRDoKIAkJCW5ldHdvcmstPnNzaWRfbGVuID0gbWluKGluZm9fZWxlbWVudC0+bGVuLAogCQkJCQkJKHU4KSBJV19FU1NJRF9NQVhfU0laRSk7CiAJCQltZW1jcHkobmV0d29yay0+c3NpZCwgaW5mb19lbGVtZW50LT5kYXRhLApAQCAtMTE1MywyMSArMTE1MSwyMSBAQAogCQkJCW1lbXNldChuZXR3b3JrLT5zc2lkICsgbmV0d29yay0+c3NpZF9sZW4sIDAsCiAJCQkJICAgICAgIElXX0VTU0lEX01BWF9TSVpFIC0gbmV0d29yay0+c3NpZF9sZW4pOwogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX1NTSUQ6ICclcycgbGVuPSVkLlxuIiwKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9TU0lEOiAnJXMnIGxlbj0lZC5cbiIsCiAJCQkJCSAgICAgcHJpbnRfc3NpZChzc2lkLCBuZXR3b3JrLT5zc2lkLAogCQkJCQkJCW5ldHdvcmstPnNzaWRfbGVuKSwKIAkJCQkJICAgICBuZXR3b3JrLT5zc2lkX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9SQVRFUzoKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisJCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCQlwID0gcmF0ZXNfc3RyOwogI2VuZGlmCiAJCQluZXR3b3JrLT5yYXRlc19sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4sCiAJCQkJCQkgTUFYX1JBVEVTX0xFTkdUSCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbmV0d29yay0+cmF0ZXNfbGVuOyBpKyspIHsKIAkJCQluZXR3b3JrLT5yYXRlc1tpXSA9IGluZm9fZWxlbWVudC0+ZGF0YVtpXTsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCQkJCXAgKz0gc25wcmludGYocCwgc2l6ZW9mKHJhdGVzX3N0cikgLQogCQkJCQkgICAgICAocCAtIHJhdGVzX3N0ciksICIlMDJYICIsCiAJCQkJCSAgICAgIG5ldHdvcmstPnJhdGVzW2ldKTsKQEAgLTExODIsMTkgKzExODAsMTkgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfUkFURVM6ICclcycgKCVkKVxuIiwKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9TVVBQX1JBVEVTOiAnJXMnICglZClcbiIsCiAJCQkJCSAgICAgcmF0ZXNfc3RyLCBuZXR3b3JrLT5yYXRlc19sZW4pOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUkFURVNfRVg6Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworCQljYXNlIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOgorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCXAgPSByYXRlc19zdHI7CiAjZW5kaWYKIAkJCW5ldHdvcmstPnJhdGVzX2V4X2xlbiA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiwKIAkJCQkJCSAgICBNQVhfUkFURVNfRVhfTEVOR1RIKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBuZXR3b3JrLT5yYXRlc19leF9sZW47IGkrKykgewogCQkJCW5ldHdvcmstPnJhdGVzX2V4W2ldID0gaW5mb19lbGVtZW50LT5kYXRhW2ldOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCQkJcCArPSBzbnByaW50ZihwLCBzaXplb2YocmF0ZXNfc3RyKSAtCiAJCQkJCSAgICAgIChwIC0gcmF0ZXNfc3RyKSwgIiUwMlggIiwKIAkJCQkJICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOwpAQCAtMTIwOSw0OSArMTIwNyw0OSBAQAogCQkJCX0KIAkJCX0KIAotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SQVRFU19FWDogJyVzJyAoJWQpXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOiAnJXMnICglZClcbiIsCiAJCQkJCSAgICAgcmF0ZXNfc3RyLCBuZXR3b3JrLT5yYXRlc19leF9sZW4pOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfRFNfU0VUOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9EU19TRVQ6ICVkXG4iLAorCQljYXNlIFdMQU5fRUlEX0RTX1BBUkFNUzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9EU19QQVJBTVM6ICVkXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXSk7CiAJCQluZXR3b3JrLT5jaGFubmVsID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfRkhfU0VUOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9GSF9TRVQ6IGlnbm9yZWRcbiIpOworCQljYXNlIFdMQU5fRUlEX0ZIX1BBUkFNUzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9GSF9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ0ZfU0VUOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9DRl9TRVQ6IGlnbm9yZWRcbiIpOworCQljYXNlIFdMQU5fRUlEX0NGX1BBUkFNUzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9DRl9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfVElNOgorCQljYXNlIFdMQU5fRUlEX1RJTToKIAkJCW5ldHdvcmstPnRpbS50aW1fY291bnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT50aW0udGltX3BlcmlvZCA9IGluZm9fZWxlbWVudC0+ZGF0YVsxXTsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9FUlBfSU5GTzoKKwkJY2FzZSBXTEFOX0VJRF9FUlBfSU5GTzoKIAkJCW5ldHdvcmstPmVycF92YWx1ZSA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX0VSUF9WQUxVRTsKIAkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfRVJQX1NFVDogJWRcbiIsCiAJCQkJCSAgICAgbmV0d29yay0+ZXJwX3ZhbHVlKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0lCU1NfU0VUOgorCQljYXNlIFdMQU5fRUlEX0lCU1NfUEFSQU1TOgogCQkJbmV0d29yay0+YXRpbV93aW5kb3cgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0lCU1NfU0VUOiAlZFxuIiwKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9JQlNTX1BBUkFNUzogJWRcbiIsCiAJCQkJCSAgICAgbmV0d29yay0+YXRpbV93aW5kb3cpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ0hBTExFTkdFOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9DSEFMTEVOR0U6IGlnbm9yZWRcbiIpOworCQljYXNlIFdMQU5fRUlEX0NIQUxMRU5HRToKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9DSEFMTEVOR0U6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfR0VORVJJQzoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfR0VORVJJQzogJWQgYnl0ZXNcbiIsCisJCWNhc2UgV0xBTl9FSURfR0VORVJJQzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9HRU5FUklDOiAlZCBieXRlc1xuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbik7CiAJCQlpZiAoIWllZWU4MDIxMV9wYXJzZV9xb3NfaW5mb19wYXJhbV9JRShpbmZvX2VsZW1lbnQsCiAJCQkJCQkJICAgICAgIG5ldHdvcmspKQpAQCAtMTI2OSw4ICsxMjY3LDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1JTTjoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfUlNOOiAlZCBieXRlc1xuIiwKKwkJY2FzZSBXTEFOX0VJRF9SU046CisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfUlNOOiAlZCBieXRlc1xuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbik7CiAJCQluZXR3b3JrLT5yc25faWVfbGVuID0gbWluKGluZm9fZWxlbWVudC0+bGVuICsgMiwKIAkJCQkJCSAgTUFYX1dQQV9JRV9MRU4pOwpAQCAtMTI3OCwyMiArMTI3NiwyMiBAQAogCQkJICAgICAgIG5ldHdvcmstPnJzbl9pZV9sZW4pOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUU9TX1BBUkFNRVRFUjoKKwkJY2FzZSBXTEFOX0VJRF9RT1NfUEFSQU1FVEVSOgogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIlFvUyBFcnJvciBuZWVkIHRvIHBhcnNlIFFPU19QQVJBTUVURVIgSUVcbiIpOwogCQkJYnJlYWs7CiAJCQkvKiA4MDIuMTFoICovCi0JCWNhc2UgTUZJRV9UWVBFX1BPV0VSX0NPTlNUUkFJTlQ6CisJCWNhc2UgV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQ6CiAJCQluZXR3b3JrLT5wb3dlcl9jb25zdHJhaW50ID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfUE9XRVJfQ09OU1RSQUlOVDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0NTQToKKwkJY2FzZSBXTEFOX0VJRF9DSEFOTkVMX1NXSVRDSDoKIAkJCW5ldHdvcmstPnBvd2VyX2NvbnN0cmFpbnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19DU0E7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9RVUlFVDoKKwkJY2FzZSBXTEFOX0VJRF9RVUlFVDoKIAkJCW5ldHdvcmstPnF1aWV0LmNvdW50ID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+cXVpZXQucGVyaW9kID0gaW5mb19lbGVtZW50LT5kYXRhWzFdOwogCQkJbmV0d29yay0+cXVpZXQuZHVyYXRpb24gPSBpbmZvX2VsZW1lbnQtPmRhdGFbMl07CkBAIC0xMzAxLDcgKzEyOTksNyBAQAogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfUVVJRVQ7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9JQlNTX0RGUzoKKwkJY2FzZSBXTEFOX0VJRF9JQlNTX0RGUzoKIAkJCWlmIChuZXR3b3JrLT5pYnNzX2RmcykKIAkJCQlicmVhazsKIAkJCW5ldHdvcmstPmlic3NfZGZzID0ga21lbWR1cChpbmZvX2VsZW1lbnQtPmRhdGEsCkBAIC0xMzEyLDcgKzEzMTAsNyBAQAogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfSUJTU19ERlM7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9UUENfUkVQT1JUOgorCQljYXNlIFdMQU5fRUlEX1RQQ19SRVBPUlQ6CiAJCQluZXR3b3JrLT50cGNfcmVwb3J0LnRyYW5zbWl0X3Bvd2VyID0KIAkJCSAgICBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT50cGNfcmVwb3J0LmxpbmtfbWFyZ2luID0gaW5mb19lbGVtZW50LT5kYXRhWzFdOwpAQCAtMTU2MSw3ICsxNTU5LDcgQEAKIAl9OwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqb2xkZXN0ID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppbmZvX2VsZW1lbnQgPSBiZWFjb24tPmluZm9fZWxlbWVudDsKICNlbmRpZgogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNjE1LDcgKzE2MTMsNyBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKChvbGRlc3QgPT0gTlVMTCkgfHwKLQkJICAgICh0YXJnZXQtPmxhc3Rfc2Nhbm5lZCA8IG9sZGVzdC0+bGFzdF9zY2FubmVkKSkKKwkJICAgIHRpbWVfYmVmb3JlKHRhcmdldC0+bGFzdF9zY2FubmVkLCBvbGRlc3QtPmxhc3Rfc2Nhbm5lZCkpCiAJCQlvbGRlc3QgPSB0YXJnZXQ7CiAJfQogCkBAIC0xNjM5LDcgKzE2MzcsNyBAQAogCQkJbGlzdF9kZWwoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCk7CiAJCX0KIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgcHJpbnRfc3NpZChzc2lkLCBuZXR3b3JrLnNzaWQsCiAJCQkJCQkgbmV0d29yay5zc2lkX2xlbiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwppbmRleCBmNzhmNTdlLi42NWE4MTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIC8qCiAKQEAgLTI2MCw3ICsyNjAsNiBAQAogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplLAogCSAgICBydHNfcmVxdWlyZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmaWVlZS0+c3RhdHM7CiAJaW50IGVuY3J5cHQsIGhvc3RfZW5jcnlwdCwgaG9zdF9lbmNyeXB0X21zZHUsIGhvc3RfYnVpbGRfaXY7CiAJX19iZTE2IGV0aGVyX3R5cGU7CiAJaW50IGJ5dGVzLCBmYywgaGRyX2xlbjsKQEAgLTMwNiw3ICszMDUsNyBAQAogCiAJaWYgKCFlbmNyeXB0ICYmIGllZWUtPmllZWU4MDJfMXggJiYKIAkgICAgaWVlZS0+ZHJvcF91bmVuY3J5cHRlZCAmJiBldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX1BBRSkpIHsKLQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWdvdG8gc3VjY2VzczsKIAl9CiAKQEAgLTUyNiw4ICs1MjUsOCBAQAogCWlmICh0eGIpIHsKIAkJaW50IHJldCA9ICgqaWVlZS0+aGFyZF9zdGFydF94bWl0KSAodHhiLCBkZXYsIHByaW9yaXR5KTsKIAkJaWYgKHJldCA9PSAwKSB7Ci0JCQlzdGF0cy0+dHhfcGFja2V0cysrOwotCQkJc3RhdHMtPnR4X2J5dGVzICs9IHR4Yi0+cGF5bG9hZF9zaXplOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHR4Yi0+cGF5bG9hZF9zaXplOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNTM5LDggKzUzOCw5IEBACiAgICAgICBmYWlsZWQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQlzdGF0cy0+dHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3htaXQpOwogCiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eGJfZnJlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwppbmRleCAzMWVhM2FiLi4zYzA4MTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMKQEAgLTM1LDEzICszNSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIHN0YXRpYyBjb25zdCBjaGFyICppZWVlODAyMTFfbW9kZXNbXSA9IHsKIAkiPyIsICJhIiwgImIiLCAiYWIiLCAiZyIsICJhZyIsICJiZyIsICJhYmciCiB9OwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBlbGFwc2VkX2ppZmZpZXNfbXNlY3ModW5zaWduZWQgbG9uZyBzdGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXM7CisKKwlpZiAoZW5kID49IHN0YXJ0KQorCQlyZXR1cm4gamlmZmllc190b19tc2VjcyhlbmQgLSBzdGFydCk7CisKKwlyZXR1cm4gamlmZmllc190b19tc2VjcyhlbmQgKyAoTUFYX0pJRkZZX09GRlNFVCAtIHN0YXJ0KSArIDEpOworfQorCiAjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0CiBzdGF0aWMgY2hhciAqaWVlZTgwMjExX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJCSAgICAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLApAQCAtMjE1LDggKzIyNiw4IEBACiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJcCA9IGN1c3RvbTsKIAlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLAotCQkgICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCi0JCSAgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkpOworCQkgICAgICAiIExhc3QgYmVhY29uOiAldW1zIGFnbyIsCisJCSAgICAgIGVsYXBzZWRfamlmZmllc19tc2VjcyhuZXR3b3JrLT5sYXN0X3NjYW5uZWQpKTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CiAJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQogCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwpAQCAtMjc2LDE1ICsyODcsMTUgQEAKIAkJICAgIHRpbWVfYWZ0ZXIobmV0d29yay0+bGFzdF9zY2FubmVkICsgaWVlZS0+c2Nhbl9hZ2UsIGppZmZpZXMpKQogCQkJZXYgPSBpZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oaWVlZSwgZXYsIHN0b3AsIG5ldHdvcmssCiAJCQkJCQkgICAgICBpbmZvKTsKLQkJZWxzZQorCQllbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJOb3Qgc2hvd2luZyBuZXR3b3JrICclcyAoIgotCQkJCQkgICAgICIlcE0pJyBkdWUgdG8gYWdlICglZG1zKS5cbiIsCisJCQkJCSAgICAgIiVwTSknIGR1ZSB0byBhZ2UgKCV1bXMpLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJIG5ldHdvcmstPnNzaWRfbGVuKSwKIAkJCQkJICAgICBuZXR3b3JrLT5ic3NpZCwKLQkJCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQotCQkJCQkJCSAgICAgIG5ldHdvcmstPgotCQkJCQkJCSAgICAgIGxhc3Rfc2Nhbm5lZCkpOworCQkJCQkgICAgIGVsYXBzZWRfamlmZmllc19tc2VjcygKKwkJCQkJICAgICAgICAgICAgICAgbmV0d29yay0+bGFzdF9zY2FubmVkKSk7CisJCX0KIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKaW5kZXggN2IzYmFkMS4uODMwNGY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwpAQCAtMSwyNyArMSwyOSBAQAogY29uZmlnIElXTFdJRkkKLQlib29sICJJbnRlbCBXaXJlbGVzcyBXaWZpIgorCXRyaXN0YXRlICJJbnRlbCBXaXJlbGVzcyBXaWZpIgogCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBJV0xDT1JFCi0JdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpZmkgQ29yZSIKLQlkZXBlbmRzIG9uIElXTFdJRkkKIAlzZWxlY3QgTElCODAyMTEKKwlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgSVdMV0lGSV9MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MgaWYgSVdMV0lGSV9MRURTCiAJc2VsZWN0IFJGS0lMTCBpZiBJV0xXSUZJX1JGS0lMTAogCiBjb25maWcgSVdMV0lGSV9MRURTCi0JYm9vbCAiRW5hYmxlIExFRCBzdXBwb3J0IGluIGl3bGFnbiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0xDT1JFCisJYm9vbCAiRW5hYmxlIExFRCBzdXBwb3J0IGluIGl3bGFnbiBhbmQgaXdsMzk0NSBkcml2ZXJzIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCiBjb25maWcgSVdMV0lGSV9SRktJTEwKLQlib29sICJFbmFibGUgUkYga2lsbCBzdXBwb3J0IGluIGl3bGFnbiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0xDT1JFCisJYm9vbCAiRW5hYmxlIFJGIGtpbGwgc3VwcG9ydCBpbiBpd2xhZ24gYW5kIGl3bDM5NDUgZHJpdmVycyIKKwlkZXBlbmRzIG9uIElXTFdJRkkKKworY29uZmlnIElXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKKwlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsYWduIGRyaXZlciIKKwlkZXBlbmRzIG9uIElXTFdJRkkKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bGFnbiBkcml2ZXIuCiAKIGNvbmZpZyBJV0xXSUZJX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiBpd2xhZ24gYW5kIGl3bDM5NDUgZHJpdmVycyIKLQlkZXBlbmRzIG9uIElXTENPUkUKKwlkZXBlbmRzIG9uIElXTFdJRkkKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBkZWJ1ZyB0cmFjaW5nIG91dHB1dCBmb3IgdGhlIGl3bHdpZmkgZHJpdmVycwogCkBAIC00NSwxNiArNDcsMTQgQEAKIAkgIGFueSBwcm9ibGVtcyB5b3UgbWF5IGVuY291bnRlci4KIAogY29uZmlnIElXTFdJRklfREVCVUdGUwotICAgICAgICBib29sICJJd2x3aWZpIGRlYnVnZnMgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBJV0xDT1JFICYmIElXTFdJRklfREVCVUcgJiYgTUFDODAyMTFfREVCVUdGUworICAgICAgICBib29sICJpd2xhZ24gZGVidWdmcyBzdXBwb3J0IgorICAgICAgICBkZXBlbmRzIG9uIElXTFdJRkkgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCiAgICAgICAgIC0tLWhlbHAtLS0KIAkgIEVuYWJsZSBjcmVhdGlvbiBvZiBkZWJ1Z2ZzIGZpbGVzIGZvciB0aGUgaXdsd2lmaSBkcml2ZXJzLgogCiBjb25maWcgSVdMQUdOCi0JdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpRmkgTmV4dCBHZW4gQUdOIgorCXRyaXN0YXRlICJJbnRlbCBXaXJlbGVzcyBXaUZpIE5leHQgR2VuIEFHTiAoaXdsYWduKSIKIAlkZXBlbmRzIG9uIElXTFdJRkkKLQlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IElXTENPUkUKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToKIApAQCAtNzcsMTkgKzc3LDYgQEAKIAkgIHNheSBNIGhlcmUgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQ+LiAgVGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXdsYWduLmtvLgogCi1jb25maWcgSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCi0JYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bGFnbiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0xBR04KLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bGFnbiBkcml2ZXIuCi0KLWNvbmZpZyBJV0xBR05fTEVEUwotCWJvb2wgIkVuYWJsZSBMRURTIGZlYXR1cmVzIGluIGl3bGFnbiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0xBR04KLQlzZWxlY3QgSVdMV0lGSV9MRURTCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBMRURTIGZvciB0aGUgaXdsYWduIGRyaXZlcnMKLQogCiBjb25maWcgSVdMNDk2NQogCWJvb2wgIkludGVsIFdpcmVsZXNzIFdpRmkgNDk2NUFHTiIKQEAgLTk4LDE5ICs4NSwxNCBAQAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNDk2NUFHTgogCiBjb25maWcgSVdMNTAwMAotCWJvb2wgIkludGVsIFdpcmVsZXNzIFdpRmkgNTAwMEFHTiIKKwlib29sICJJbnRlbCBXaXJlbGVzcyBXaUZpIDUwMDBBR047IEludGVsIFdpRmkgTGluayAxMDAwLCA2MDAwLCBhbmQgNjA1MCBTZXJpZXMiCiAJZGVwZW5kcyBvbiBJV0xBR04KIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayA1MDAwQUdOIEZhbWlseQogCiBjb25maWcgSVdMMzk0NQotCXRyaXN0YXRlICJJbnRlbCBQUk8vV2lyZWxlc3MgMzk0NUFCRy9CRyBOZXR3b3JrIENvbm5lY3Rpb24iCisJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbiAoaXdsMzk0NSkiCiAJZGVwZW5kcyBvbiBJV0xXSUZJCi0Jc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBMSUI4MDIxMQotCXNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIElXTDM5NDVfTEVEUwotCXNlbGVjdCBMRURTX0NMQVNTIGlmIElXTDM5NDVfTEVEUwotCXNlbGVjdCBSRktJTEwgaWYgSVdMV0lGSV9SRktJTEwKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToKIApAQCAtMTM0LDEzICsxMTYsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bDM5NDUua28uCiAKIGNvbmZpZyBJV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0JYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bDM5NDUgZHJpdmVycyIKKwlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsMzk0NSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBJV0wzOTQ1CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2wzOTQ1IGRyaXZlci4KLQotY29uZmlnIElXTDM5NDVfTEVEUwotCWJvb2wgIkVuYWJsZSBMRURTIGZlYXR1cmVzIGluIGl3bDM5NDUgZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMMzk0NQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgTEVEUyBmb3IgdGhlIGl3bDM5NDUgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKaW5kZXggZGRjOGIzMS4uZDc5ZDk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCkBAIC0xLDExICsxLDExIEBACi1vYmotJChDT05GSUdfSVdMQ09SRSkJKz0gaXdsY29yZS5vCitvYmotJChDT05GSUdfSVdMV0lGSSkJKz0gaXdsY29yZS5vCiBpd2xjb3JlLW9ianMgCQk6PSBpd2wtY29yZS5vIGl3bC1lZXByb20ubyBpd2wtaGNtZC5vIGl3bC1wb3dlci5vCiBpd2xjb3JlLW9ianMgCQkrPSBpd2wtcngubyBpd2wtdHgubyBpd2wtc3RhLm8gaXdsLWNhbGliLm8KIGl3bGNvcmUtb2JqcyAJCSs9IGl3bC1zY2FuLm8KIGl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9ERUJVR0ZTKSArPSBpd2wtZGVidWdmcy5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfTEVEUykgKz0gaXdsLWxlZC5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfUkZLSUxMKSArPSBpd2wtcmZraWxsLm8KLWl3bGNvcmUtJChDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UKSArPSBpd2wtc3BlY3RydW0ubworaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UKSArPSBpd2wtc3BlY3RydW0ubwogCiBvYmotJChDT05GSUdfSVdMQUdOKQkrPSBpd2xhZ24ubwogaXdsYWduLW9ianMJCTo9IGl3bC1hZ24ubyBpd2wtYWduLXJzLm8KQEAgLTEzLDEwICsxMyw5IEBACiBpd2xhZ24tJChDT05GSUdfSVdMNDk2NSkgKz0gaXdsLTQ5NjUubwogaXdsYWduLSQoQ09ORklHX0lXTDUwMDApICs9IGl3bC01MDAwLm8KIGl3bGFnbi0kKENPTkZJR19JV0w1MDAwKSArPSBpd2wtNjAwMC5vCi1pd2xhZ24tJChDT05GSUdfSVdMNTAwMCkgKz0gaXdsLTEwMC5vCitpd2xhZ24tJChDT05GSUdfSVdMNTAwMCkgKz0gaXdsLTEwMDAubwogCiBvYmotJChDT05GSUdfSVdMMzk0NSkJKz0gaXdsMzk0NS5vCi1pd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubwotaXdsMzk0NS0kKENPTkZJR19JV0wzOTQ1X0xFRFMpICs9IGl3bC0zOTQ1LWxlZC5vCitpd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubyBpd2wtMzk0NS1sZWQubwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKaW5kZXggMTFkMjA2YS4uN2RhNTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC00NiwyMCArNDYsMjAgQEAKICNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwotI2RlZmluZSBJV0wxMDBfVUNPREVfQVBJX01BWCAyCisjZGVmaW5lIElXTDEwMDBfVUNPREVfQVBJX01BWCAyCiAKIC8qIExvd2VzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSVdMMTAwX1VDT0RFX0FQSV9NSU4gMQorI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NSU4gMQogCi0jZGVmaW5lIElXTDEwMF9GV19QUkUgIml3bHdpZmktMTAwLSIKLSNkZWZpbmUgX0lXTDEwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDBfRldfUFJFICNhcGkgIi51Y29kZSIKLSNkZWZpbmUgSVdMMTAwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0wxMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMMTAwMF9GV19QUkUgIml3bHdpZmktMTAwMC0iCisjZGVmaW5lIF9JV0wxMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDEwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKKyNkZWZpbmUgSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQogCi1zdHJ1Y3QgaXdsX2NmZyBpd2wxMDBfYmduX2NmZyA9IHsKLQkubmFtZSA9ICIxMDAgU2VyaWVzIEJHTiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMMTAwX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDEwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMMTAwX1VDT0RFX0FQSV9NSU4sCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmcgPSB7CisJLm5hbWUgPSAiMTAwMCBTZXJpZXMgQkdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0wxMDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDEwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDEwMDBfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKIAkub3BzID0gJml3bDUwMDBfb3BzLAogCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCmluZGV4IGE5NzNhYzEuLmFjMjJmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwpAQCAtMjQsNiArMjQsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTYzLDggKzE2NCw4IEBACiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9sZWQsIGxlZF9kZXYpOworCXN0cnVjdCBpd2xfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgaXdsX2xlZCwgbGVkX2Rldik7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gbGVkLT5wcml2OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQpAQCAtMjAyLDcgKzIwMyw3IEBACiAgKiBSZWdpc3RlciBsZWQgY2xhc3Mgd2l0aCB0aGUgc3lzdGVtCiAgKi8KIHN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9sZWQgKmxlZCwKKwkJCQkgICBzdHJ1Y3QgaXdsX2xlZCAqbGVkLAogCQkJCSAgIGVudW0gbGVkX3R5cGUgdHlwZSwgdTggc2V0X2xlZCwKIAkJCQkgICBjaGFyICp0cmlnZ2VyKQogewpAQCAtMzE1LDY2ICszMTYsNjYgQEAKIAlwcml2LT5hbGxvd19ibGlua2luZyA9IDA7CiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShwcml2LT5odyk7Ci0Jc25wcmludGYocHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOjpyYWRpbyIsCisJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5uYW1lLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6OnJhZGlvIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKLQlwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19SQURJT10ubGVkX29uID0gaXdsMzk0NV9sZWRfb247Ci0JcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vZmYgPSBpd2wzOTQ1X2xlZF9vZmY7Ci0JcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9wYXR0ZXJuID0gTlVMTDsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bDM5NDVfbGVkX29uOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubGVkX29mZiA9IGl3bDM5NDVfbGVkX29mZjsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9wYXR0ZXJuID0gTlVMTDsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LAotCQkJCSAgICZwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19SQURJT10sCisJCQkJICAgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10sCiAJCQkJICAgSVdMX0xFRF9UUkdfUkFESU8sIDEsIHRyaWdnZXIpOwogCiAJaWYgKHJldCkKIAkJZ290byBleGl0X2ZhaWw7CiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShwcml2LT5odyk7Ci0Jc25wcmludGYocHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCisJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5uYW1lLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSksICJpd2wtJXM6OmFzc29jIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2wzOTQ1X2xlZF9yZWdpc3Rlcl9sZWQocHJpdiwKLQkJCQkgICAmcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfQVNTT0NdLAorCQkJCSAgICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLAogCQkJCSAgIElXTF9MRURfVFJHX0FTU09DLCAwLCB0cmlnZ2VyKTsKIAogCS8qIGZvciBhc3NvYyBhbHdheXMgdHVybiBsZWQgb24gKi8KLQlwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX29uID0gaXdsMzk0NV9sZWRfb247Ci0JcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfQVNTT0NdLmxlZF9vZmYgPSBpd2wzOTQ1X2xlZF9vbjsKLQlwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX3BhdHRlcm4gPSBOVUxMOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX29uID0gaXdsMzk0NV9sZWRfb247CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5sZWRfb2ZmID0gaXdsMzk0NV9sZWRfb247CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5sZWRfcGF0dGVybiA9IE5VTEw7CiAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXRfZmFpbDsKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KTsKLQlzbnByaW50Zihwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19SWF0ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6OlJYIiwKKwlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLm5hbWUsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczo6UlgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LAotCQkJCSAgICZwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19SWF0sCisJCQkJICAgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sCiAJCQkJICAgSVdMX0xFRF9UUkdfUlgsIDAsIHRyaWdnZXIpOwogCi0JcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUlhdLmxlZF9vbiA9IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQ7Ci0JcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUlhdLmxlZF9vZmYgPSBpd2wzOTQ1X2xlZF9hc3NvY2lhdGVkOwotCXByaXYtPmxlZDM5W0lXTF9MRURfVFJHX1JYXS5sZWRfcGF0dGVybiA9IGl3bDM5NDVfbGVkX3BhdHRlcm47CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX29mZiA9IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQ7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfcGF0dGVybiA9IGl3bDM5NDVfbGVkX3BhdHRlcm47CiAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXRfZmFpbDsKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKLQlzbnByaW50Zihwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19UWF0ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6OlRYIiwKKwlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLm5hbWUsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczo6VFgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LAotCQkJCSAgICZwcml2LT5sZWQzOVtJV0xfTEVEX1RSR19UWF0sCisJCQkJICAgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0sCiAJCQkJICAgSVdMX0xFRF9UUkdfVFgsIDAsIHRyaWdnZXIpOwogCi0JcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfVFhdLmxlZF9vbiA9IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQ7Ci0JcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfVFhdLmxlZF9vZmYgPSBpd2wzOTQ1X2xlZF9hc3NvY2lhdGVkOwotCXByaXYtPmxlZDM5W0lXTF9MRURfVFJHX1RYXS5sZWRfcGF0dGVybiA9IGl3bDM5NDVfbGVkX3BhdHRlcm47CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX29mZiA9IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQ7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfcGF0dGVybiA9IGl3bDM5NDVfbGVkX3BhdHRlcm47CiAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXRfZmFpbDsKQEAgLTM4OCw3ICszODksNyBAQAogCiAKIC8qIHVucmVnaXN0ZXIgbGVkIGNsYXNzICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsMzk0NV9sZWQgKmxlZCwgdTggc2V0X2xlZCkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfbGVkICpsZWQsIHU4IHNldF9sZWQpCiB7CiAJaWYgKCFsZWQtPnJlZ2lzdGVyZWQpCiAJCXJldHVybjsKQEAgLTQwMyw5ICs0MDQsMTAgQEAKIC8qIFVucmVnaXN0ZXIgYWxsIGxlZCBoYW5kbGVycyAqLwogdm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfQVNTT0NdLCAwKTsKLQlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUlhdLCAwKTsKLQlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfVFhdLCAwKTsKLQlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkMzlbSVdMX0xFRF9UUkdfUkFESU9dLCAxKTsKKwlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CisJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOworCWl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKCZwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLCAwKTsKKwlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXSwgMSk7CiB9CiAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKaW5kZXggODgxODVhNi4uM2I2NTY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCkBAIC0yOSwyNCArMjksMTAgQEAKIAogc3RydWN0IGl3bF9wcml2OwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAogI2luY2x1ZGUgIml3bC1sZWQuaCIKIAotc3RydWN0IGl3bDM5NDVfbGVkIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OwotCWNoYXIgbmFtZVszMl07Ci0KLQlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpOwotCWludCAoKmxlZF9vZmYpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpOwotCWludCAoKmxlZF9wYXR0ZXJuKSAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAotCQkJICAgIHVuc2lnbmVkIGludCBpZHgpOwotCi0JZW51bSBsZWRfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwotfTsKLQogZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpAQCAtNTUsNiArNDEsNiBAQAogc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfTEVEUyAqLwogCisjZW5kaWYgLyogSVdMV0lGSV9MRURTKi8KICNlbmRpZiAvKiBJV0wzOTQ1X0xFRFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCmluZGV4IDdkYjgxOTguLmY2NWMzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKQEAgLTEyNyw2ICsxMjcsNyBAQAogI2RlZmluZSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCAgICAgICA4CiAjZGVmaW5lIElXTF9SQVRFX01JTl9TVUNDRVNTX1RIICAgICAgIDgKICNkZWZpbmUgSVdMX1JBVEVfREVDUkVBU0VfVEggICAgICAgMTkyMAorI2RlZmluZSBJV0xfUkFURV9SRVRSWV9USAkgICAgIDE1CiAKIHN0YXRpYyB1OCBpd2wzOTQ1X2dldF9yYXRlX2luZGV4X2J5X3Jzc2koczMyIHJzc2ksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKQEAgLTI5OCwzNyArMjk5LDUzIEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwotCXdoaWxlIChyZXRyaWVzLS0pIHsKIAotCQkvKiBJZiB3ZSBoYXZlIGZpbGxlZCB1cCB0aGUgd2luZG93IHRoZW4gc3VidHJhY3Qgb25lIGZyb20gdGhlCi0JCSAqIHN1Y2Nlc3MgY291bnRlciBpZiB0aGUgaGlnaC1iaXQgaXMgY291bnRpbmcgdG93YXJkCi0JCSAqIHN1Y2Nlc3MgKi8KLQkJaWYgKHdpbmRvdy0+Y291bnRlciA9PSBJV0xfUkFURV9NQVhfV0lORE9XKSB7Ci0JCQlpZiAod2luZG93LT5kYXRhICYgKDFVTEwgPDwgKElXTF9SQVRFX01BWF9XSU5ET1cgLSAxKSkpCisJLyoKKwkgKiBLZWVwIHRyYWNrIG9mIG9ubHkgdGhlIGxhdGVzdCA2MiB0eCBmcmFtZSBhdHRlbXB0cyBpbiB0aGlzIHJhdGUncworCSAqIGhpc3Rvcnkgd2luZG93OyBhbnl0aGluZyBvbGRlciBpc24ndCByZWFsbHkgcmVsZXZhbnQgYW55IG1vcmUuCisJICogSWYgd2UgaGF2ZSBmaWxsZWQgdXAgdGhlIHNsaWRpbmcgd2luZG93LCBkcm9wIHRoZSBvbGRlc3QgYXR0ZW1wdDsKKwkgKiBpZiB0aGUgb2xkZXN0IGF0dGVtcHQgKGhpZ2hlc3QgYml0IGluIGJpdG1hcCkgc2hvd3MgInN1Y2Nlc3MiLAorCSAqIHN1YnRyYWN0ICIxIiBmcm9tIHRoZSBzdWNjZXNzIGNvdW50ZXIgKHRoaXMgaXMgdGhlIG1haW4gcmVhc29uCisJICogd2Uga2VlcCB0aGVzZSBiaXRtYXBzISkuCisJICogKi8KKwl3aGlsZSAocmV0cmllcyA+IDApIHsKKwkJaWYgKHdpbmRvdy0+Y291bnRlciA+PSBJV0xfUkFURV9NQVhfV0lORE9XKSB7CisKKwkJCS8qIHJlbW92ZSBlYXJsaWVzdCAqLworCQkJd2luZG93LT5jb3VudGVyID0gSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDE7CisKKwkJCWlmICh3aW5kb3ctPmRhdGEgJiAoMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKSkgeworCQkJCXdpbmRvdy0+ZGF0YSAmPSB+KDFVTEwgPDwgKElXTF9SQVRFX01BWF9XSU5ET1cgLSAxKSk7CiAJCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXItLTsKLQkJfSBlbHNlCi0JCQl3aW5kb3ctPmNvdW50ZXIrKzsKLQotCQkvKiBTbGlkZSB0aGUgd2luZG93IHRvIHRoZSBsZWZ0IG9uZSBiaXQgKi8KLQkJd2luZG93LT5kYXRhID0gKHdpbmRvdy0+ZGF0YSA8PCAxKTsKLQotCQkvKiBJZiB0aGlzIHBhY2tldCB3YXMgYSBzdWNjZXNzIHRoZW4gc2V0IHRoZSBsb3cgYml0IGhpZ2ggKi8KLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyKys7Ci0JCQl3aW5kb3ctPmRhdGEgfD0gMTsKKwkJCX0KIAkJfQogCi0JCS8qIHdpbmRvdy0+Y291bnRlciBjYW4ndCBiZSAwIC0tIGl0IGlzIGVpdGhlciA+MCBvcgotCQkgKiBJV0xfUkFURV9NQVhfV0lORE9XICovCi0JCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IDEyODAwICogd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgLwotCQkgICAgd2luZG93LT5jb3VudGVyOworCQkvKiBJbmNyZW1lbnQgZnJhbWVzLWF0dGVtcHRlZCBjb3VudGVyICovCisJCXdpbmRvdy0+Y291bnRlcisrOwogCi0JCS8qIFRhZyB0aGlzIHdpbmRvdyBhcyBoYXZpbmcgYmVlbiB1cGRhdGVkICovCi0JCXdpbmRvdy0+c3RhbXAgPSBqaWZmaWVzOworCQkvKiBTaGlmdCBiaXRtYXAgYnkgb25lIGZyYW1lICh0aHJvdyBhd2F5IG9sZGVzdCBoaXN0b3J5KSwKKwkJICogT1IgaW4gIjEiLCBhbmQgaW5jcmVtZW50ICJzdWNjZXNzIiBpZiB0aGlzCisJCSAqIGZyYW1lIHdhcyBzdWNjZXNzZnVsLiAqLworCQl3aW5kb3ctPmRhdGEgPDw9IDE7CisJCWlmIChzdWNjZXNzID4gMCkgeworCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIrKzsKKwkJCXdpbmRvdy0+ZGF0YSB8PSAweDE7CisJCQlzdWNjZXNzLS07CisJCX0KIAorCQlyZXRyaWVzLS07CiAJfQogCisJLyogQ2FsY3VsYXRlIGN1cnJlbnQgc3VjY2VzcyByYXRpbywgYXZvaWQgZGl2aWRlLWJ5LTAhICovCisJaWYgKHdpbmRvdy0+Y291bnRlciA+IDApCisJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IDEyOCAqICgxMDAgKiB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcikKKwkJCQkJLyB3aW5kb3ctPmNvdW50ZXI7CisJZWxzZQorCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKKworCS8qIENhbGN1bGF0ZSBhdmVyYWdlIHRocm91Z2hwdXQsIGlmIHdlIGhhdmUgZW5vdWdoIGhpc3RvcnkuICovCiAJaWYgKChmYWlsX2NvdW50ID49IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSB8fAogCSAgICAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPj0gSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKQogCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gKgpAQCAtMzM2LDYgKzM1Myw5IEBACiAJZWxzZQogCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAKKwkvKiBUYWcgdGhpcyB3aW5kb3cgYXMgaGF2aW5nIGJlZW4gdXBkYXRlZCAqLworCXdpbmRvdy0+c3RhbXAgPSBqaWZmaWVzOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7CiAKIH0KQEAgLTQ2OCw3ICs0ODgsMTAgQEAKIAogCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKLQlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50OworCXJldHJpZXMgPSBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgLSAxOworCS8qIFNhbml0eSBDaGVjayBmb3IgcmV0cmllcyAqLworCWlmIChyZXRyaWVzID4gSVdMX1JBVEVfUkVUUllfVEgpCisJCXJldHJpZXMgPSBJV0xfUkFURV9SRVRSWV9USDsKIAogCWZpcnN0X2luZGV4ID0gc2JhbmQtPmJpdHJhdGVzW2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHhdLmh3X3ZhbHVlOwogCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlRfMzk0NSkpIHsKQEAgLTcyNCw3ICs3NDcsNyBAQAogCiAJZmFpbF9jb3VudCA9IHdpbmRvdy0+Y291bnRlciAtIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyOwogCi0JaWYgKCgoZmFpbF9jb3VudCA8PSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgJiYKKwlpZiAoKChmYWlsX2NvdW50IDwgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpICYmCiAJICAgICAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPCBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCkpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCkBAIC03MzUsNiArNzU4LDkgQEAKIAkJCSAgICAgICB3aW5kb3ctPmNvdW50ZXIsCiAJCQkgICAgICAgd2luZG93LT5zdWNjZXNzX2NvdW50ZXIsCiAJCQkgICAgICAgcnNfc3RhLT5leHBlY3RlZF90cHQgPyAibm90ICIgOiAiIik7CisKKwkgICAvKiBDYW4ndCBjYWxjdWxhdGUgdGhpcyB5ZXQ7IG5vdCBlbm91Z2ggaGlzdG9yeSAqLworCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJCWdvdG8gb3V0OwogCiAJfQpAQCAtNzUwLDYgKzc3Niw3IEBACiAJaWYgKChtYXhfcmF0ZV9pZHggIT0gLTEpICYmIChtYXhfcmF0ZV9pZHggPCBoaWdoKSkKIAkJaGlnaCA9IElXTF9SQVRFX0lOVkFMSUQ7CiAKKwkvKiBDb2xsZWN0IE1lYXN1cmVkIHRocm91Z2hwdXRzIG9mIGFkamFjZW50IHJhdGVzICovCiAJaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQogCQlsb3dfdHB0ID0gcnNfc3RhLT53aW5bbG93XS5hdmVyYWdlX3RwdDsKIApAQCAtNzU4LDI0ICs3ODUsNDMgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCi0Jc2NhbGVfYWN0aW9uID0gMTsKKwlzY2FsZV9hY3Rpb24gPSAwOwogCisJLyogTG93IHN1Y2Nlc3MgcmF0aW8gLCBuZWVkIHRvIGRyb3AgdGhlIHJhdGUgKi8KIAlpZiAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA8IElXTF9SQVRFX0RFQ1JFQVNFX1RIKSB8fCAhY3VycmVudF90cHQpIHsKIAkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgc3VjY2Vzc19yYXRpb1xuIik7CiAJCXNjYWxlX2FjdGlvbiA9IC0xOworCisJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzLAorCSAqIHRyeSBpbmNyZWFzZSAqLwogCX0gZWxzZSBpZiAoKGxvd190cHQgPT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCi0JCSAgIChoaWdoX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkpCi0JCXNjYWxlX2FjdGlvbiA9IDE7Ci0JZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAgIChoaWdoX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkpIHsKKworCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKQorCQkJc2NhbGVfYWN0aW9uID0gMTsKKwkJZWxzZSBpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCisJCQlzY2FsZV9hY3Rpb24gPSAtMTsKKworCS8qIEJvdGggYWRqYWNlbnQgdGhyb3VnaHB1dHMgYXJlIG1lYXN1cmVkLCBidXQgbmVpdGhlciBvbmUgaGFzCisJICogYmV0dGVyIHRocm91Z2hwdXQ7IHdlJ3JlIHVzaW5nIHRoZSBiZXN0IHJhdGUsIGRvbid0IGNoYW5nZQorCSAqIGl0ISAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCiAJCSAoaGlnaF90cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCiAJCSAobG93X3RwdCA8IGN1cnJlbnRfdHB0KSAmJiAoaGlnaF90cHQgPCBjdXJyZW50X3RwdCkpIHsKKwogCQlJV0xfREVCVUdfUkFURShwcml2LCAiTm8gYWN0aW9uIC0tIGxvdyBbJWRdICYgaGlnaCBbJWRdIDwgIgogCQkJICAgICAgICJjdXJyZW50X3RwdCBbJWRdXG4iLAogCQkJICAgICAgIGxvd190cHQsIGhpZ2hfdHB0LCBjdXJyZW50X3RwdCk7CiAJCXNjYWxlX2FjdGlvbiA9IDA7CisKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhdGVzIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCX0gZWxzZSB7CiAJCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgewotCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQpCisKKwkJCS8qIEhpZ2ggcmF0ZSBoYXMgYmV0dGVyIHRocm91Z2hwdXQsIEluY3JlYXNlCisJCQkgKiByYXRlICovCisJCQlpZiAoaGlnaF90cHQgPiBjdXJyZW50X3RwdCAmJgorCQkJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+PSBJV0xfUkFURV9JTkNSRUFTRV9USCkKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQkJZWxzZSB7CiAJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKQEAgLTc4NywyOSArODMzLDMxIEBACiAJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKIAkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIGlmICh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA+PSBJV0xfUkFURV9JTkNSRUFTRV9USCkgeworCQkJCS8qIExvd2VyIHJhdGUgaGFzIGJldHRlcgorCQkJCSAqIHRocm91Z2hwdXQsZGVjcmVhc2UgcmF0ZSAqLwogCQkJCXNjYWxlX2FjdGlvbiA9IDE7CisJCQl9CiAJCX0KIAl9CiAKLQlpZiAoc2NhbGVfYWN0aW9uID09IC0xKSB7Ci0JCWlmICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPiBJV0xfU1VDQ0VTU19ET1dOX1RIKQotCQkJc2NhbGVfYWN0aW9uID0gMDsKLQl9IGVsc2UgaWYgKHNjYWxlX2FjdGlvbiA9PSAxKSB7Ci0JCWlmICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPCBJV0xfU1VDQ0VTU19VUF9USCkgewotCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIk5vIGFjdGlvbiAtLSBzdWNjZXNzX3JhdGlvIFslZF0gPCAiCi0JCQkgICAgICAgIlNVQ0NFU1MgVVBcbiIsIHdpbmRvdy0+c3VjY2Vzc19yYXRpbyk7Ci0JCQlzY2FsZV9hY3Rpb24gPSAwOwotCQl9Ci0JfQorCS8qIFNhbml0eSBjaGVjazsgYXNrZWQgZm9yIGRlY3JlYXNlLCBidXQgc3VjY2VzcyByYXRlIG9yIHRocm91Z2hwdXQKKwkgKiBoYXMgYmVlbiBnb29kIGF0IG9sZCByYXRlLiAgRG9uJ3QgY2hhbmdlIGl0LiAqLworCWlmICgoc2NhbGVfYWN0aW9uID09IC0xKSAmJiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpICYmCisJCSAgICAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+IElXTF9SQVRFX0hJR0hfVEgpIHx8CisJCSAgICAgKGN1cnJlbnRfdHB0ID4gKDEwMCAqIHJzX3N0YS0+ZXhwZWN0ZWRfdHB0W2xvd10pKSkpCisJCXNjYWxlX2FjdGlvbiA9IDA7CiAKIAlzd2l0Y2ggKHNjYWxlX2FjdGlvbikgewogCWNhc2UgLTE6CisKKwkJLyogRGVjcmVzZSByYXRlICovCiAJCWlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJCWluZGV4ID0gbG93OwogCQlicmVhazsKIAogCWNhc2UgMToKKwkJLyogSW5jcmVhc2UgcmF0ZSAqLwogCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEKQogCQkJaW5kZXggPSBoaWdoOwogCkBAIC04MTcsNiArODY1LDcgQEAKIAogCWNhc2UgMDoKIAlkZWZhdWx0OgorCQkvKiBObyBjaGFuZ2UgKi8KIAkJYnJlYWs7CiAJfQogCkBAIC04NDYsMTEgKzg5NSwxNiBAQAogCQkJCQkJICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgajsKKwlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZXNjICs9IHNwcmludGYoYnVmZiArIGRlc2MsICJ0eCBwYWNrZXRzPSVkIGxhc3QgcmF0ZSBpbmRleD0lZFxuIgogCQkJInJhdGU9MHglWCBmbHVzaCB0aW1lICVkXG4iLAogCQkJbHFfc3RhLT50eF9wYWNrZXRzLApAQCAtODYzLDcgKzkxNyw5IEBACiAJCQkJbHFfc3RhLT53aW5bal0uc3VjY2Vzc19jb3VudGVyLAogCQkJCWxxX3N0YS0+d2luW2pdLnN1Y2Nlc3NfcmF0aW8pOwogCX0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zdGF0c190YWJsZV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKaW5kZXggZDQ5ZTQ4Yi4uYmE3ZTcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtNTU0LDcgKzU1NCw3IEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilJV0xfUlhfREFUQShwa3QpOwogI2VuZGlmCiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyICpyeF9oZHIgPSBJV0xfUlhfSERSKHBrdCk7CkBAIC01ODMsNyArNTgzLDcgQEAKIAkJCQkgICAgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcnhiLT5za2ItPmRhdGEsCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KHJ4X2VuZC0+c3RhdHVzKSwgc3RhdHMpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJcHJpdi0+cnh0eHBhY2tldHMgKz0gbGVuOwogI2VuZGlmCkBAIC03NDEsNyArNzQxLDggQEAKIHZvaWQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7CiAJc3RydWN0IGl3bDM5NDVfdGZkICp0ZmRfdG1wID0gKHN0cnVjdCBpd2wzOTQ1X3RmZCAqKXR4cS0+dGZkczsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZCA9ICZ0ZmRfdG1wW3R4cS0+cS5yZWFkX3B0cl07CisJaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOworCXN0cnVjdCBpd2wzOTQ1X3RmZCAqdGZkID0gJnRmZF90bXBbaW5kZXhdOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwogCWludCBpOwogCWludCBjb3VudGVyOwpAQCAtNzU5LDYgKzc2MCwxMyBAQAogCQlyZXR1cm47CiAJfQogCisJLyogVW5tYXAgdHhfY21kICovCisJaWYgKGNvdW50ZXIpCisJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAorCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAorCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwogCS8qIHVubWFwIGNodW5rcyBpZiBhbnkgKi8KIAogCWZvciAoaSA9IDE7IGkgPCBjb3VudGVyOyBpKyspIHsKQEAgLTEwNzMsNyArMTA4MSw3IEBACiAJKiBEMFUqIC0tPiBEMEEqIHN0YXRlICovCiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKIAotCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKIAlpZiAocmV0IDwgMCkgewogCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwpAQCAtMjc0Nyw2ICsyNzU1LDcgQEAKIAkJLnF1ZXJ5X2FkZHIgPSBpd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyLAogCX0sCiAJLnNlbmRfdHhfcG93ZXIJPSBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIsCisJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2wzOTQ1X2hjbWRfdXRpbHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggYWIzOWY0YS4uMDhjMTliZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSV9NQVggMQotI2RlZmluZSBJV0w1MTUwX1VDT0RFX0FQSV9NQVggMQorI2RlZmluZSBJV0w1MTUwX1VDT0RFX0FQSV9NQVggMgogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01JTiAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCmluZGV4IDA0YjQyYzguLmNhYjc4NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCkBAIC04MDEsNyArODAxLDEwIEBACiAJICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkpCiAJCXJldHVybjsKIAotCXJldHJpZXMgPSBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgLSAxOworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVKQorCQlyZXRyaWVzID0gMDsKKwllbHNlCisJCXJldHJpZXMgPSBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgLSAxOwogCiAJaWYgKHJldHJpZXMgPiAxNSkKIAkJcmV0cmllcyA9IDE1OwpAQCAtOTEzLDcgKzkxNiw3IEBACiAJCQl0cHQgPSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbcnNfaW5kZXhdOwogCQllbHNlCiAJCQl0cHQgPSAwOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkKIAkJCXJzX2NvbGxlY3RfdHhfZGF0YShzZWFyY2hfd2luLCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTI5LDcgKzkzMiw3IEBACiAJCQl0cHQgPSBjdXJyX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEod2luZG93LCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTQxLDcgKzk0NCw3IEBACiAJLyogSWYgbm90IHNlYXJjaGluZyBmb3IgbmV3IG1vZGUsIGluY3JlbWVudCBzdWNjZXNzL2ZhaWxlZCBjb3VudGVyCiAJICogLi4uIHRoZXNlIGhlbHAgZGV0ZXJtaW5lIHdoZW4gdG8gc3RhcnQgc2VhcmNoaW5nIGFnYWluICovCiAJaWYgKGxxX3N0YS0+c3RheV9pbl90YmwpIHsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkgewogCQkJbHFfc3RhLT50b3RhbF9zdWNjZXNzICs9IGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwOwogCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQgKz0KIAkJCSAgICAgKGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuIC0gaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtMTcwMCw2ICsxNzAzLDcgQEAKIAl1MTYgaGlnaF9sb3c7CiAJczMyIHNyOwogCXU4IHRpZCA9IE1BWF9USURfQ09VTlQ7CisJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGE7CiAKIAlJV0xfREVCVUdfUkFURShwcml2LCAicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CiAKQEAgLTE4OTYsNyArMTkwMCw3IEBACiAJCWlmIChoaWdoICE9IElXTF9SQVRFX0lOVkFMSUQgJiYgc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQllbHNlIGlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKLQkJCXNjYWxlX2FjdGlvbiA9IC0xOworCQkJc2NhbGVfYWN0aW9uID0gMDsKIAl9CiAKIAkvKiBCb3RoIGFkamFjZW50IHRocm91Z2hwdXRzIGFyZSBtZWFzdXJlZCwgYnV0IG5laXRoZXIgb25lIGhhcyBiZXR0ZXIKQEAgLTE5MTcsOSArMTkyMSw3IEBACiAJCQkJCXNyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKSB7CiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCX0gZWxzZSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKLQkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBoaWdoIHRwdFxuIik7Ci0JCQkJc2NhbGVfYWN0aW9uID0gLTE7CisJCQkJc2NhbGVfYWN0aW9uID0gMDsKIAkJCX0KIAogCQkvKiBMb3dlciBhZGphY2VudCByYXRlJ3MgdGhyb3VnaHB1dCBpcyBtZWFzdXJlZCAqLwpAQCAtMjAzNSw4ICsyMDM3LDE1IEBACiAJCQlpZiAoKGxxX3N0YS0+bGFzdF90cHQgPiBJV0xfQUdHX1RQVF9USFJFSE9MRCkgJiYKIAkJCSAgICAobHFfc3RhLT50eF9hZ2dfdGlkX2VuICYgKDEgPDwgdGlkKSkgJiYKIAkJCSAgICAodGlkICE9IE1BWF9USURfQ09VTlQpKSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgInRyeSB0byBhZ2dyZWdhdGUgdGlkICVkXG4iLCB0aWQpOwotCQkJCXJzX3RsX3R1cm5fb25fYWdnKHByaXYsIHRpZCwgbHFfc3RhLCBzdGEpOworCQkJCXRpZF9kYXRhID0KKwkJCQkgICAmcHJpdi0+c3RhdGlvbnNbbHFfc3RhLT5scS5zdGFfaWRdLnRpZFt0aWRdOworCQkJCWlmICh0aWRfZGF0YS0+YWdnLnN0YXRlID09IElXTF9BR0dfT0ZGKSB7CisJCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsCisJCQkJCQkgICAgICAgInRyeSB0byBhZ2dyZWdhdGUgdGlkICVkXG4iLAorCQkJCQkJICAgICAgIHRpZCk7CisJCQkJCXJzX3RsX3R1cm5fb25fYWdnKHByaXYsIHRpZCwKKwkJCQkJCQkgIGxxX3N0YSwgc3RhKTsKKwkJCQl9CiAJCQl9CiAJCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyID0gMDsKIAkJCXJzX3NldF9zdGF5X2luX3RhYmxlKHByaXYsIDAsIGxxX3N0YSk7CkBAIC0yNDY0LDE4ICsyNDczLDI1IEBACiAJCQkgICAgIHUzMiAqcmF0ZV9uX2ZsYWdzLCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2OworCXU4IHZhbGlkX3R4X2FudDsKKwl1OCBhbnRfc2VsX3R4OwogCiAJcHJpdiA9IGxxX3N0YS0+ZHJ2OworCXZhbGlkX3R4X2FudCA9IHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQ7CiAJaWYgKGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpIHsKLQkJaWYgKGluZGV4IDwgMTIpIHsKKwkJYW50X3NlbF90eCA9CisJCSAgKChscV9zdGEtPmRiZ19maXhlZF9yYXRlICYgUkFURV9NQ1NfQU5UX0FCQ19NU0spCisJCSAgPj4gUkFURV9NQ1NfQU5UX1BPUyk7CisJCWlmICgodmFsaWRfdHhfYW50ICYgYW50X3NlbF90eCkgPT0gYW50X3NlbF90eCkgewogCQkJKnJhdGVfbl9mbGFncyA9IGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGU7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiRml4ZWQgcmF0ZSBPTlxuIik7CiAJCX0gZWxzZSB7Ci0JCQlpZiAobHFfc3RhLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCQkJKnJhdGVfbl9mbGFncyA9IDB4ODAwRDsKLQkJCWVsc2UKLQkJCQkqcmF0ZV9uX2ZsYWdzID0gMHg4MjBBOworCQkJbHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSA9IDA7CisJCQlJV0xfRVJSKHByaXYsCisJCQkgICAgIkludmFsaWQgYW50ZW5uYSBzZWxlY3Rpb24gMHglWCwgVmFsaWQgaXMgMHglWFxuIiwKKwkJCSAgICBhbnRfc2VsX3R4LCB2YWxpZF90eF9hbnQpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkZpeGVkIHJhdGUgT0ZGXG4iKTsKIAkJfQotCQlJV0xfREVCVUdfUkFURShwcml2LCAiRml4ZWQgcmF0ZSBPTlxuIik7CiAJfSBlbHNlIHsKIAkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkZpeGVkIHJhdGUgT0ZGXG4iKTsKIAl9CkBAIC0yNTIwLDExICsyNTM2LDE5IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpID0gMDsKKwlzc2l6ZV90IHJldDsKIAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2OworCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gKnRibCA9ICYobHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0pOworCisJcHJpdiA9IGxxX3N0YS0+ZHJ2OworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAic3RhX2lkICVkXG4iLCBscV9zdGEtPmxxLnN0YV9pZCk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZhaWxlZD0lZCBzdWNjZXNzPSVkIHJhdGU9MCVYXG4iLApAQCAtMjUzMiw2ICsyNTU2LDIwIEBACiAJCQlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZpeGVkIHJhdGUgMHglWFxuIiwKIAkJCWxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJ2YWxpZF90eF9hbnQgJXMlcyVzXG4iLAorCSAgICAocHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCAmIEFOVF9BKSA/ICJBTlRfQSwiIDogIiIsCisJICAgIChwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgQU5UX0IpID8gIkFOVF9CLCIgOiAiIiwKKwkgICAgKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBBTlRfQykgPyAiQU5UX0MiIDogIiIpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJscSB0eXBlICVzXG4iLAorCSAgIChpc19sZWdhY3kodGJsLT5scV90eXBlKSkgPyAibGVnYWN5IiA6ICJIVCIpOworCWlmIChpc19IdCh0YmwtPmxxX3R5cGUpKSB7CisJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXMiLAorCQkgICAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpKSA/ICJTSVNPIiA6CisJCSAgICgoaXNfbWltbzIodGJsLT5scV90eXBlKSkgPyAiTUlNTzIiIDogIk1JTU8zIikpOworCQkgICBkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKKwkJICAgKHRibC0+aXNfZmF0KSA/ICI0ME1IeiIgOiAiMjBNSHoiKTsKKwkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiAlc1xuIiwgKHRibC0+aXNfU0dJKSA/ICJTR0kiIDogIiIpOworCX0KIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiZ2VuZXJhbDoiCiAJCSJmbGFncz0weCVYIG1pbW8tZD0lZCBzLWFudDB4JXggZC1hbnQ9MHgleFxuIiwKIAkJbHFfc3RhLT5scS5nZW5lcmFsX3BhcmFtcy5mbGFncywKQEAgLTI1NTcsNyArMjU5NSw5IEBACiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgcmF0ZVslZF0gMHglWFxuIiwKIAkJCWksIGxlMzJfdG9fY3B1KGxxX3N0YS0+bHEucnNfdGFibGVbaV0ucmF0ZV9uX2ZsYWdzKSk7CiAKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zY2FsZV90YWJsZV9vcHMgPSB7CkBAIC0yNTY4LDExICsyNjA4LDE3IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpLCBqOworCXNzaXplX3QgcmV0OwogCiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgTFFfU0laRTsgaSsrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIlcyB0eXBlPSVkIFNHST0lZCBGQVQ9JWQgRFVQPSVkXG4iCiAJCQkJInJhdGU9MHglWFxuIiwKQEAgLTI1OTAsNyArMjYzNiw5IEBACiAJCQkJbHFfc3RhLT5scV9pbmZvW2ldLndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAkJfQogCX0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zdGF0c190YWJsZV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCmluZGV4IDM0NTgwNmQuLmFiNTlhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCkBAIC0yMzEsNyArMjMxLDcgQEAKICNkZWZpbmUgSVdMX1JTX0dPT0RfUkFUSU8JCTEyODAwCS8qIDEwMCUgKi8KICNkZWZpbmUgSVdMX1JBVEVfU0NBTEVfU1dJVENICQkxMDg4MAkvKiAgODUlICovCiAjZGVmaW5lIElXTF9SQVRFX0hJR0hfVEgJCTEwODgwCS8qICA4NSUgKi8KLSNkZWZpbmUgSVdMX1JBVEVfSU5DUkVBU0VfVEggICAgICAgICAgICA4OTYwCS8qICA3MCUgKi8KKyNkZWZpbmUgSVdMX1JBVEVfSU5DUkVBU0VfVEgJCTY0MDAJLyogIDUwJSAqLwogI2RlZmluZSBJV0xfUkFURV9ERUNSRUFTRV9USAkJMTkyMAkvKiAgMTUlICovCiAKIC8qIHBvc3NpYmxlIGFjdGlvbnMgd2hlbiBpbiBsZWdhY3kgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAzOTc1NzdjLi4wZGIzYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtNzIsNyArNzIsNyBAQAogI2RlZmluZSBWRAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCisjaWZkZWYgQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKICNkZWZpbmUgVlMgInMiCiAjZWxzZQogI2RlZmluZSBWUwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAogCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAogCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuICovCiAJZm9yIChpID0gMTsgaSA8IG51bV90YnM7IGkrKykgewpAQCAtNjAxLDM4ICs2MDEsNiBAQAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCi0vKgotICogUW9TICBzdXBwb3J0Ci0qLwotc3RhdGljIHZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKQotewotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyA9IDA7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnF1ZXVlX3JlcXVlc3QgJiYKLQkgICAgIXByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC50eG9wX3JlcXVlc3QpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KLQkJCVFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSzsKLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7Ci0KLQlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0gUU9TX1BBUkFNX0ZMR19UR05fTVNLOwotCi0JaWYgKGZvcmNlIHx8IGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19RT1MocHJpdiwgInNlbmQgUW9TIGNtZCB3aXRoIFFvcyBhY3RpdmU9JWQgRkxBR1M9MHglWFxuIiwKLQkJCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlLAotCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MpOwotCi0JCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUU9TX1BBUkFNLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQpLAotCQkJCSAgICAgICAmcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLCBOVUxMKTsKLQl9Ci19Ci0KICNkZWZpbmUgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTAk0MDk2CiAKIHN0YXRpYyB1MTYgaXdsX2FkanVzdF9iZWFjb25faW50ZXJ2YWwodTE2IGJlYWNvbl92YWwpCkBAIC02NDQsNiArNjEyLDkgQEAKIAkJCQkJLyBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwogCW5ld192YWwgPSBiZWFjb25fdmFsIC8gYmVhY29uX2ZhY3RvcjsKIAorCWlmICghbmV3X3ZhbCkKKwkJbmV3X3ZhbCA9IE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7CisKIAlyZXR1cm4gbmV3X3ZhbDsKIH0KIApAQCAtNzUxLDQxICs3MjIsNiBAQAogCQlJV0xfV0FSTihwcml2LCAidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9yeF9yZXBseV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCi0JSVdMX0VSUihwcml2LCAiRXJyb3IgUmVwbHkgdHlwZSAweCUwOFggY21kICVzICgweCUwMlgpICIKLQkJInNlcSAweCUwNFggc2VyIDB4JTA4WFxuIiwKLQkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX3R5cGUpLAotCQlnZXRfY21kX3N0cmluZyhwa3QtPnUuZXJyX3Jlc3AuY21kX2lkKSwKLQkJcGt0LT51LmVycl9yZXNwLmNtZF9pZCwKLQkJbGUxNl90b19jcHUocGt0LT51LmVycl9yZXNwLmJhZF9jbWRfc2VxX251bSksCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl9pbmZvKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9wbV9zbGVlcF9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOwotCUlXTF9ERUJVR19SWChwcml2LCAic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCi0JCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SQURJTyhwcml2LCAiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgotCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAotCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfYmdfYmVhY29uX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KQEAgLTEzMTIsNjQgKzEyNDgsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGl3bF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwotCXUzMiBpbnRhLCBpbnRhX21hc2s7Ci0JdTMyIGludGFfZmg7Ci0JaWYgKCFwcml2KQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCi0JLyogRGlzYWJsZSAoYnV0IGRvbid0IGNsZWFyISkgaW50ZXJydXB0cyBoZXJlIHRvIGF2b2lkCi0JICogICAgYmFjay10by1iYWNrIElTUnMgYW5kIHNwb3JhZGljIGludGVycnVwdHMgZnJvbSBvdXIgTklDLgotCSAqIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlcnZpY2UsIHRoZSB0YXNrbGV0IHdpbGwgcmUtZW5hYmxlIGludHMuCi0JICogSWYgd2UgKmRvbid0KiBoYXZlIHNvbWV0aGluZywgd2UnbGwgcmUtZW5hYmxlIGJlZm9yZSBsZWF2aW5nIGhlcmUuICovCi0JaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOyAgLyoganVzdCBmb3IgZGVidWcgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOwotCi0JLyogRGlzY292ZXIgd2hpY2ggaW50ZXJydXB0cyBhcmUgYWN0aXZlL3BlbmRpbmcgKi8KLQlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0KLQkvKiBJZ25vcmUgaW50ZXJydXB0IGlmIHRoZXJlJ3Mgbm90aGluZyBpbiBOSUMgdG8gc2VydmljZS4KLQkgKiBUaGlzIG1heSBiZSBkdWUgdG8gSVJRIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLAotCSAqIG9yIGR1ZSB0byBzcG9yYWRpYyBpbnRlcnJ1cHRzIHRocm93biBmcm9tIG91ciBOSUMuICovCi0JaWYgKCFpbnRhICYmICFpbnRhX2ZoKSB7Ci0JCUlXTF9ERUJVR19JU1IocHJpdiwgIklnbm9yZSBpbnRlcnJ1cHQsIGludGEgPT0gMCwgaW50YV9maCA9PSAwXG4iKTsKLQkJZ290byBub25lOwotCX0KLQotCWlmICgoaW50YSA9PSAweEZGRkZGRkZGKSB8fCAoKGludGEgJiAweEZGRkZGRkYwKSA9PSAweGE1YTVhNWEwKSkgewotCQkvKiBIYXJkd2FyZSBkaXNhcHBlYXJlZC4gSXQgbWlnaHQgaGF2ZSBhbHJlYWR5IHJhaXNlZAotCQkgKiBhbiBpbnRlcnJ1cHQgKi8KLQkJSVdMX1dBUk4ocHJpdiwgIkhBUkRXQVJFIEdPTkU/PyBJTlRBID09IDB4JTA4eFxuIiwgaW50YSk7Ci0JCWdvdG8gdW5wbHVnZ2VkOwotCX0KLQotCUlXTF9ERUJVR19JU1IocHJpdiwgIklTUiBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKLQkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKLQotCWludGEgJj0gfkNTUl9JTlRfQklUX1NDRDsKLQotCS8qIGl3bF9pcnFfdGFza2xldCgpIHdpbGwgc2VydmljZSBpbnRlcnJ1cHRzIGFuZCByZS1lbmFibGUgdGhlbSAqLwotCWlmIChsaWtlbHkoaW50YSB8fCBpbnRhX2ZoKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+aXJxX3Rhc2tsZXQpOwotCi0gdW5wbHVnZ2VkOgotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLSBub25lOgotCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCi0JCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIElSUV9OT05FOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogdUNvZGUgZG93bmxvYWQgZnVuY3Rpb25zCkBAIC0yNjc0LDcxICsyNTUyLDYgQEAKIAogfQogCi1zdGF0aWMgaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByZXQ7Ci0JdTggKnNzaWQgPSBOVUxMOwotCXNpemVfdCBzc2lkX2xlbiA9IDA7Ci0KLQlpZiAocmVxLT5uX3NzaWRzKSB7Ci0JCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7Ci0JCXNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKLQl9Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJcmV0ID0gLUVJTzsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogV2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kLgotCSAqIEF2b2lkIHNjYW5uaW5nIGR1cmluZyBwb3NzaWJsZSBFQVBPTCBleGNoYW5nZSwgcmV0dXJuCi0JICogc3VjY2VzcyBpbW1lZGlhdGVseS4KLQkgKi8KLQlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKLQkgICAgdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBuZXh0IHNjYW4gcGVyaW9kXG4iKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLwotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JaWYgKHNzaWRfbGVuKSB7Ci0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7Ci0JCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9IHNzaWRfbGVuOwotCQltZW1jcHkocHJpdi0+ZGlyZWN0X3NzaWQsIHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7Ci0JfSBlbHNlIHsKLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKLQl9Ci0KLQlyZXQgPSBpd2xfc2Nhbl9pbml0aWF0ZShwcml2KTsKLQotCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgY29uc3QgdTggKmFkZHIsCiAJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCkBAIC0zMzcwLDcgKzMxODMsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShEUlZfTkFNRSk7CisJcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoRFJWX05BTUUpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIApAQCAtMzU0Niw3ICszMzU5LDcgQEAKIAkvKiBhbXAgaW5pdCAqLwogCWVyciA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuaW5pdChwcml2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgQVBNR1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBpbml0IEFQTUdcbiIpOwogCQlnb3RvIG91dF9pb3VubWFwOwogCX0KIAkvKioqKioqKioqKioqKioqKioKQEAgLTM1NjAsNyArMzM3Myw3IEBACiAJfQogCWVyciA9IGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihwcml2KTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF9pb3VubWFwOworCQlnb3RvIG91dF9mcmVlX2VlcHJvbTsKIAogCS8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi8KIAlpd2xfZWVwcm9tX2dldF9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwpAQCAtMzYxMiw3ICszNDI1LDcgQEAKIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewogCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKLQkJZ290byBvdXRfdW5pbml0X2RydjsKKwkJZ290byBvdXRfZnJlZV9pcnE7CiAJfQogCiAJaXdsX3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CkBAIC0zNjU2LDE5ICszNDY5LDIxIEBACiAJcmV0dXJuIDA7CiAKICBvdXRfcmVtb3ZlX3N5c2ZzOgorCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CisJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7Cisgb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CiAgb3V0X2Rpc2FibGVfbXNpOgogCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+cGNpX2Rldik7Ci0gb3V0X3VuaW5pdF9kcnY6CiAJaXdsX3VuaW5pdF9kcnYocHJpdik7CiAgb3V0X2ZyZWVfZWVwcm9tOgogCWl3bF9lZXByb21fZnJlZShwcml2KTsKICBvdXRfaW91bm1hcDoKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5od19iYXNlKTsKICBvdXRfcGNpX3JlbGVhc2VfcmVnaW9uczoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogIG91dF9pZWVlODAyMTFfZnJlZV9odzoKQEAgLTM4MjgsOSArMzY0Myw5IEBACiAJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NywgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDAwODgsIFBDSV9BTllfSUQsIGl3bDYwNTBfM2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg5LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzJhZ25fY2ZnKX0sCi0vKiAxMDAgU2VyaWVzIFdpRmkgKi8KLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgzLCBQQ0lfQU5ZX0lELCBpd2wxMDBfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODQsIFBDSV9BTllfSUQsIGl3bDEwMF9iZ25fY2ZnKX0sCisvKiAxMDAwIFNlcmllcyBXaUZpICovCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MywgUENJX0FOWV9JRCwgaXdsMTAwMF9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NCwgUENJX0FOWV9JRCwgaXdsMTAwMF9iZ25fY2ZnKX0sCiAjZW5kaWYgLyogQ09ORklHX0lXTDUwMDAgKi8KIAogCXswfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCmluZGV4IDI2MGJmOTAuLjA4NWU5Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTI0MCw2ICsyNDAsMzkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2h3X25pY19pbml0KTsKIAorLyoKKyAqIFFvUyAgc3VwcG9ydAorKi8KK3ZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKQoreworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyA9IDA7CisKKwlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnF1ZXVlX3JlcXVlc3QgJiYKKwkgICAgIXByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC50eG9wX3JlcXVlc3QpCisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KKwkJCVFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSzsKKwlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKKwkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQorCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7CisKKwlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQpCisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0gUU9TX1BBUkFNX0ZMR19UR05fTVNLOworCisJaWYgKGZvcmNlIHx8IGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCUlXTF9ERUJVR19RT1MocHJpdiwgInNlbmQgUW9TIGNtZCB3aXRoIFFvcyBhY3RpdmU9JWQgRkxBR1M9MHglWFxuIiwKKwkJCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlLAorCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MpOworCisJCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUU9TX1BBUkFNLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQpLAorCQkJCSAgICAgICAmcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLCBOVUxMKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9hY3RpdmF0ZV9xb3MpOworCiB2b2lkIGl3bF9yZXNldF9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUxNiBjd19taW4gPSAxNTsKQEAgLTEzODYsMTQgKzE0MTksMTYgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAlpZiAodHhfcG93ZXIgPCBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTikgewotCQlJV0xfV0FSTihwcml2LCAiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBiZWxvdyBsaW1pdC5cbiIsCi0JCQkgICAgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpOworCQlJV0xfV0FSTihwcml2LCAiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBiZWxvdyBsb3dlciBsaW1pdCAlZC5cbiIsCisJCQkgdHhfcG93ZXIsCisJCQkgSVdMX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAodHhfcG93ZXIgPiBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWCkgewotCQlJV0xfV0FSTihwcml2LCAiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBhYm92ZSBsaW1pdC5cbiIsCi0JCQkgICAgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpOworCQlJV0xfV0FSTihwcml2LCAiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBhYm92ZSB1cHBlciBsaW1pdCAlZC5cbiIsCisJCQkgdHhfcG93ZXIsCisJCQkgSVdMX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NQVgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE0NDIsNiArMTQ3Nyw2NSBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfZW5hYmxlX2ludGVycnVwdHMpOwogCitpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKKwl1MzIgaW50YSwgaW50YV9tYXNrOworCXUzMiBpbnRhX2ZoOworCWlmICghcHJpdikKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAorCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KKwkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgorCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLworCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKKworCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCisJLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCisJICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKKwkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLworCWlmICghaW50YSAmJiAhaW50YV9maCkgeworCQlJV0xfREVCVUdfSVNSKHByaXYsICJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7CisJCWdvdG8gbm9uZTsKKwl9CisKKwlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKKwkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQuIEl0IG1pZ2h0IGhhdmUgYWxyZWFkeSByYWlzZWQKKwkJICogYW4gaW50ZXJydXB0ICovCisJCUlXTF9XQVJOKHByaXYsICJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOworCQlnb3RvIHVucGx1Z2dlZDsKKwl9CisKKwlJV0xfREVCVUdfSVNSKHByaXYsICJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCisJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CisKKwlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7CisKKwkvKiBpd2xfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KKwlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKKworIHVucGx1Z2dlZDoKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworCisgbm9uZToKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KKwkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQorCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiBJUlFfTk9ORTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2lzcik7CisKIGludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2xfYnRfY21kIGJ0X2NtZCA9IHsKQEAgLTE5NzcsMyArMjA3MSw0MiBAQAogCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfYmdfcmZfa2lsbCk7CisKK3ZvaWQgaXdsX3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAorCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3BtX3NsZWVwX25vdGlmKTsKKwordm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgorCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAorCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZik7CisKK3ZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKworCUlXTF9FUlIocHJpdiwgIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCisJCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCisJCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKKwkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCisJCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCisJCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAorCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcmVwbHlfZXJyb3IpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKaW5kZXggOWQ0NjRlYy4uMjczMTBmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaApAQCAtMjI0LDYgKzIyNCw3IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfb3BzICpod19vcHMpOwogdm9pZCBpd2xfaHdfZGV0ZWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yZXNldF9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKTsKIHZvaWQgaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpOwogaW50IGl3bF9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTI1MCw2ICsyNTEsMTYgQEAKIHZvaWQgaXdsX3VuaW5pdF9kcnYoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSWCBoYW5kbGVycy4KKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBpd2xfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfcnhfcmVwbHlfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogUlgKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgaXdsX3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpOwpAQCAtMzQ1LDYgKzM1Niw3IEBACiBpbnQgaXdsX3NjYW5fY2FuY2VsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG1zKTsKIGludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKIHUxNiBpd2xfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLCBpbnQgbGVmdCk7CiB2b2lkIGl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0zNzksNyArMzkxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTcGVjdHJ1bSBNZWFzdXJlZW10bnMgaW4gIGl3bC1zcGVjdHJ1bS5jCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0xBR05fU1BFQ1RSVU1fTUVBU1VSRU1FTlQKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikge30KQEAgLTQxMCw2ICs0MjIsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaXJxcmV0dXJuX3QgaXdsX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbmxpbmUgdTE2IGl3bF9wY2llX2xpbmtfY3RsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcG9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAppbmRleCA1MDI4Yzc4Li4yZjEyNDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaApAQCAtMjExLDcgKzIxMSw3IEBACiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MzUwICAgICAgICAgICAoMHgwMDAwMDMwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTEwMCAgICAgICAgICAgKDB4MDAwMDA1MCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUxNTAgICAgICAgICAgICgweDAwMDAwNDApCi0jZGVmaW5lIENTUl9IV19SRVZfVFlQRV8xMDAgICAgICAgICAgICAoMHgwMDAwMDYwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfMTAwMCAgICAgICAgICAgKDB4MDAwMDA2MCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4MDAgICAgICAgICAgICgweDAwMDAwNzApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV82eDUwICAgICAgICAgICAoMHgwMDAwMDgwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfTk9ORSAgICAgICAgICAgKDB4MDAwMDBGMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggYWZkZTcxMy4uMGJhYWU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTYyLDcgKzYyLDcgQEAKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzNhZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8zYWduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDBfYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmc7CiAKIC8qIHNoYXJlZCBzdHJ1Y3R1cmVzIGZyb20gaXdsLTUwMDAuYyAqLwogZXh0ZXJuIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zOwpAQCAtODQxLDcgKzg0MSw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UKSB8fCBkZWZpbmVkKENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UKQorI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpIHx8IGRlZmluZWQoQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpCiAJLyogc3BlY3RydW0gbWVhc3VyZW1lbnQgcmVwb3J0IGNhY2hpbmcgKi8KIAlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKIAl1OCBtZWFzdXJlbWVudF9zdGF0dXM7CkBAIC05MjIsMjMgKzkyMiwxNiBAQAogCSAqIDQ5NjUncyBpbml0aWFsaXplIGFsaXZlIHJlc3BvbnNlIGNvbnRhaW5zIHNvbWUgY2FsaWJyYXRpb24gZGF0YS4gKi8KIAlzdHJ1Y3QgaXdsX2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7CiAJc3RydWN0IGl3bF9hbGl2ZV9yZXNwIGNhcmRfYWxpdmU7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX0lXTDM5NDVfUkZLSUxMKQorI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfUkZLSUxMKQogCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9MRURTKSB8fCBkZWZpbmVkKENPTkZJR19JV0wzOTQ1X0xFRFMpCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOwogCXU4IGxhc3RfYmxpbmtfcmF0ZTsKIAl1OCBhbGxvd19ibGlua2luZzsKIAl1NjQgbGVkX3RwdDsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCXN0cnVjdCBpd2xfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCi0Jc3RydWN0IGl3bDM5NDVfbGVkIGxlZDM5W0lXTF9MRURfVFJHX01BWF07CiAJdW5zaWduZWQgaW50IHJ4dHhwYWNrZXRzOwogI2VuZGlmCiAJdTE2IGFjdGl2ZV9yYXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKaW5kZXggYzdiOGU1Yi4uMDgzZWExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCkBAIC0xNTYsNiArMTU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OworCXUzMiB2YWw7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCiAJCXJldHVybiAwOwpAQCAtMTY3LDcgKzE2OCw4IEBACiAJCQkgICAoQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSB8CiAJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0dPSU5HX1RPX1NMRUVQKSwgMTUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk1BQyBpcyBpbiBkZWVwIHNsZWVwIVxuIik7CisJCXZhbCA9IF9pd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCk7CisJCUlXTF9FUlIocHJpdiwgIk1BQyBpcyBpbiBkZWVwIHNsZWVwIS4gIENTUl9HUF9DTlRSTCA9IDB4JTA4WFxuIiwgdmFsKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCmluZGV4IDE0MGZkOGYuLmVmOWIxNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCkBAIC0zMCw3ICszMCw3IEBACiAKIHN0cnVjdCBpd2xfcHJpdjsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfTEVEUykgfHwgZGVmaW5lZChDT05GSUdfSVdMMzk0NV9MRURTKQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAKICNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IDFlYzJiMjAuLjIzNjQ0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTQ0MCw2ICs0NDAsNzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NjYW5faW5pdGlhdGUpOwogCisjZGVmaW5lIElXTF9ERUxBWV9ORVhUX1NDQU4gKEhaKjIpCisKK2ludCBpd2xfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldDsKKwl1OCAqc3NpZCA9IE5VTEw7CisJc2l6ZV90IHNzaWRfbGVuID0gMDsKKworCWlmIChyZXEtPm5fc3NpZHMpIHsKKwkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKKwkJc3NpZF9sZW4gPSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuOworCX0KKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlyZXQgPSAtRUlPOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBXZSBkb24ndCBzY2hlZHVsZSBzY2FuIHdpdGhpbiBuZXh0X3NjYW5famlmZmllcyBwZXJpb2QuCisJICogQXZvaWQgc2Nhbm5pbmcgZHVyaW5nIHBvc3NpYmxlIEVBUE9MIGV4Y2hhbmdlLCByZXR1cm4KKwkgKiBzdWNjZXNzIGltbWVkaWF0ZWx5LgorCSAqLworCWlmIChwcml2LT5uZXh0X3NjYW5famlmZmllcyAmJgorCSAgICB0aW1lX2FmdGVyKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAic2NhbiByZWplY3RlZDogd2l0aGluIG5leHQgc2NhbiBwZXJpb2RcbiIpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIGlmIHdlIGp1c3QgZmluaXNoZWQgc2NhbiBhc2sgZm9yIGRlbGF5ICovCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCisJICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLCBqaWZmaWVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAic2NhbiByZWplY3RlZDogd2l0aGluIHByZXZpb3VzIHNjYW4gcGVyaW9kXG4iKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoc3NpZF9sZW4pIHsKKwkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKKwkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gIHNzaWRfbGVuOworCQltZW1jcHkocHJpdi0+ZGlyZWN0X3NzaWQsIHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7CisJfSBlbHNlIHsKKwkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKKwl9CisKKwlyZXQgPSBpd2xfc2Nhbl9pbml0aWF0ZShwcml2KTsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9tYWNfaHdfc2Nhbik7CisKICNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKIAogdm9pZCBpd2xfYmdfc2Nhbl9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IDFmYWUzYTYuLjE2ODQ0OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC00NzIsNiArNDcyLDcgQEAKIHZvaWQgaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKQEAgLTQ4NiwxMSArNDg3LDE3IEBACiAJLyogY2xlYW4gdWNvZGUga2V5IHRhYmxlIGJpdCBtYXAgKi8KIAlwcml2LT51Y29kZV9rZXlfdGFibGUgPSAwOwogCisJLyoga2VlcCB0cmFjayBvZiBzdGF0aWMga2V5cyAqLworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZU19NQVggOyBpKyspIHsKKwkJaWYgKHByaXYtPndlcF9rZXlzW2ldLmtleV9zaXplKQorCQkJdGVzdF9hbmRfc2V0X2JpdChpLCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKTsKKwl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUpOwogCi1zdGF0aWMgaW50IGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCBpOwogCkBAIC01MDAsNiArNTA3LDcgQEAKIAogCXJldHVybiBXRVBfSU5WQUxJRF9PRkZTRVQ7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgpOwogCiBpbnQgaXdsX3NlbmRfc3RhdGljX3dlcGtleV9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBzZW5kX2lmX2VtcHR5KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAppbmRleCA5N2Y2MTY5Li41OWE1ODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaApAQCAtNTQsNiArNTQsNyBAQAogaW50IGl3bF9yeG9uX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCk7CiBpbnQgaXdsX3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCk7CiB2b2lkIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogaW50IGl3bF9nZXRfcmFfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7CiBpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCBhZTA0YzIwOC4uZGZmNjBmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC04MTksNyArODE5LDcgQEAKIAkgKiB3aXRoaW4gY29tbWFuZCBidWZmZXIgYXJyYXkuICovCiAJdHhjbWRfcGh5cyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkJICAgIG91dF9jbWQsIHNpemVvZihzdHJ1Y3QgaXdsX2NtZCksCi0JCQkJICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCSAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCXBjaV91bm1hcF9hZGRyX3NldCgmb3V0X2NtZC0+bWV0YSwgbWFwcGluZywgdHhjbWRfcGh5cyk7CiAJcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSk7CiAJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKQEAgLTk2OCw3ICs5NjgsNyBAQAogCQkJSVdMX01BWF9TQ0FOX1NJWkUgOiBzaXplb2Yoc3RydWN0IGl3bF9jbWQpOwogCiAJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2Rldiwgb3V0X2NtZCwKLQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCSAgIGxlbiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAlwY2lfdW5tYXBfYWRkcl9zZXQoJm91dF9jbWQtPm1ldGEsIG1hcHBpbmcsIHBoeXNfYWRkcik7CiAJcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgbGVuKTsKIAlwaHlzX2FkZHIgKz0gb2Zmc2V0b2Yoc3RydWN0IGl3bF9jbWQsIGhkcik7CkBAIC0xMDY4LDcgKzEwNjgsNyBAQAogCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKIAkJcGNpX3VubWFwX2FkZHIoJnR4cS0+Y21kW2NtZF9pZHhdLT5tZXRhLCBtYXBwaW5nKSwKIAkJcGNpX3VubWFwX2xlbigmdHhxLT5jbWRbY21kX2lkeF0tPm1ldGEsIGxlbiksCi0JCVBDSV9ETUFfVE9ERVZJQ0UpOworCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJZm9yIChpZHggPSBpd2xfcXVldWVfaW5jX3dyYXAoaWR4LCBxLT5uX2JkKTsgcS0+cmVhZF9wdHIgIT0gaWR4OwogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCAwY2Q4Y2I5Li40NDY1MzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTMyOCw2ICszMjgsOCBAQAogCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICphY3RpdmVfcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOwogCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpzdGFnaW5nX3J4b24gPSAodm9pZCAqKSZwcml2LT5zdGFnaW5nX3J4b247CiAJaW50IHJjID0gMDsKKwlib29sIG5ld19hc3NvYyA9CisJCSEhKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spOwogCiAJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtMTsKQEAgLTM2Niw4ICszNjgsNyBAQAogCSAqIGFuIFJYT05fQVNTT0MgYW5kIHRoZSBuZXcgY29uZmlnIHdhbnRzIHRoZSBhc3NvY2lhdGVkIG1hc2sgZW5hYmxlZCwKIAkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBhc3NvY2lhdGVkIGZyb20gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAJICogYmVmb3JlIHdlIGFwcGx5IHRoZSBuZXcgY29uZmlnICovCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCi0JICAgIChzdGFnaW5nX3J4b24tPmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykpIHsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgbmV3X2Fzc29jKSB7CiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJUb2dnbGluZyBhc3NvY2lhdGVkIGJpdCBvbiBjdXJyZW50IFJYT05cbiIpOwogCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAKQEAgLTM5NSw4ICszOTYsNyBAQAogCQkgICAgICAgIiogd2l0aCVzIFJYT05fRklMVEVSX0FTU09DX01TS1xuIgogCQkgICAgICAgIiogY2hhbm5lbCA9ICVkXG4iCiAJCSAgICAgICAiKiBic3NpZCA9ICVwTVxuIiwKLQkJICAgICAgICgocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmCi0JCQkgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSA/ICIiIDogIm91dCIpLAorCQkgICAgICAgKG5ld19hc3NvYyA/ICIiIDogIm91dCIpLAogCQkgICAgICAgbGUxNl90b19jcHUoc3RhZ2luZ19yeG9uLT5jaGFubmVsKSwKIAkJICAgICAgIHN0YWdpbmdfcnhvbi0+YnNzaWRfYWRkcik7CiAKQEAgLTQwNyw2ICs0MDcsOCBAQAogCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ0ID0gMDsKIAlzdGFnaW5nX3J4b24tPnJlc2VydmVkNSA9IDA7CiAKKwlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgIXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pOworCiAJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCiAJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCiAJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLApAQCAtNDU2LDI1ICs0NTgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3VwZGF0ZV9zdGFfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCiAJCQkJICAgdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2IGtleV9mbGFncyA9IDA7CisJaW50IHJldDsKIAotCXN3aXRjaCAoa2V5Y29uZi0+YWxnKSB7Ci0JY2FzZSBBTEdfQ0NNUDoKLQkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfRkxHX0NDTVA7Ci0JCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNigKLQkJCQlrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKLQkJa2V5X2ZsYWdzICY9IH5TVEFfS0VZX0ZMR19JTlZBTElEOwotCQlicmVhazsKLQljYXNlIEFMR19US0lQOgotCWNhc2UgQUxHX1dFUDoKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19DQ01QIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOworCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKKworCWlmIChzdGFfaWQgPT0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCkKKwkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfTVVMVElDQVNUX01TSzsKKworCWtleWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwlrZXljb25mLT5od19rZXlfaWR4ID0ga2V5Y29uZi0+a2V5aWR4OworCWtleV9mbGFncyAmPSB+U1RBX0tFWV9GTEdfSU5WQUxJRDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7CiAJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKQEAgLTQ4MywxNiArNDg0LDQzIEBACiAKIAltZW1jcHkocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleSwga2V5Y29uZi0+a2V5LAogCSAgICAgICBrZXljb25mLT5rZXlsZW4pOworCisJaWYgKChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzICYgU1RBX0tFWV9GTEdfRU5DUllQVF9NU0spCisJCQk9PSBTVEFfS0VZX0ZMR19OT19FTkMpCisJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID0KKwkJCQkgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChwcml2KTsKKwkvKiBlbHNlLCB3ZSBhcmUgb3ZlcnJpZGluZyBhbiBleGlzdGluZyBrZXkgPT4gbm8gbmVlZCB0byBhbGxvY2F0ZWQgcm9vbQorCSogaW4gdUNvZGUuICovCisKKwlXQVJOKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCwKKwkJIm5vIHNwYWNlIGZvciBhIG5ldyBrZXkiKTsKKwogCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7CiAJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKIAlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJod2NyeXB0bzogbW9kaWZ5IHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOworCisJcmV0ID0gaXdsX3NlbmRfYWRkX3N0YShwcml2LAorCQkoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLCBDTURfQVNZTkMpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKHByaXYsICJod2NyeXB0bzogbW9kaWZ5IHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOwotCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKLQkJKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YSwgMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3NldF90a2lwX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKKwkJCQkgIHU4IHN0YV9pZCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKKwkJCQkgIHU4IHN0YV9pZCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9jbGVhcl9zdGFfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBzdGFfaWQpCkBAIC01MTQsNiArNTQyLDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgdTggc3RhX2lkKQoreworCWludCByZXQgPSAwOworCisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IEhXX0tFWV9EWU5BTUlDOworCisJc3dpdGNoIChrZXljb25mLT5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlyZXQgPSBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfVEtJUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUxHX1dFUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0VSUihwcml2LCJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXljb25mLT5hbGcpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCUlXTF9ERUJVR19XRVAocHJpdiwgIlNldCBkeW5hbWljIGtleTogYWxnPSAlZCBsZW49JWQgaWR4PSVkIHN0YT0lZCByZXQ9JWRcbiIsCisJCSAgICAgIGtleWNvbmYtPmFsZywga2V5Y29uZi0+a2V5bGVuLCBrZXljb25mLT5rZXlpZHgsCisJCSAgICAgIHN0YV9pZCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9yZW1vdmVfc3RhdGljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3NldF9zdGF0aWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJaWYgKGtleS0+YWxnID09IEFMR19XRVApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCUlXTF9FUlIocHJpdiwgIlN0YXRpYyBrZXkgaW52YWxpZDogYWxnICVkXG4iLCBrZXktPmFsZyk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CkBAIC02MTUsNDggKzY4OSw2IEBACiAJCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIH0KIAotLyoKLSAqIFFvUyAgc3VwcG9ydAotKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kICpxb3MpCi17Ci0KLQlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9RT1NfUEFSQU0sCi0JCQkJc2l6ZW9mKHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kKSwgcW9zKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9hY3RpdmF0ZV9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmb3JjZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOwotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC5xdWV1ZV9yZXF1ZXN0ICYmCi0JICAgICFwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAudHhvcF9yZXF1ZXN0KQotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9Ci0JCQlRT1NfUEFSQU1fRkxHX1RYT1BfVFlQRV9NU0s7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZm9yY2UgfHwgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX1FPUyhwcml2LCAic2VuZCBRb1MgY21kIHdpdGggUW9TIGFjdGl2ZSAlZCBcbiIsCi0JCQkgICAgICBwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKTsKLQotCQlpd2wzOTQ1X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHByaXYsCi0JCQkJJihwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0pKTsKLQl9Ci19Ci0KLQogI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTEwMjQKICNkZWZpbmUgSU5URUxfQ09OTl9MSVNURU5fSU5URVJWQUwJY3B1X3RvX2xlMTYoMHhBKQogCkBAIC03MjYsMzggKzc1OCw2IEBACiAJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93KSk7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICAiCi0JCQkgICAgICAgIlF1ZXVpbmcuXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOwotCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfRykKLQkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKQotCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKLQlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JcHJpdi0+c2Nhbl9zdGFydCA9IGppZmZpZXM7Ci0JcHJpdi0+c2Nhbl9wYXNzX3N0YXJ0ID0gcHJpdi0+c2Nhbl9zdGFydDsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGl3bDM5NDVfc2V0X21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSkKIHsKIAlpZiAobW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewpAQCAtNzk4LDExICs3OTgsMTEgQEAKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkJICAgICAgc3RydWN0IGl3bF9jbWQgKmNtZCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWcsCi0JCQkJICAgICAgaW50IGxhc3RfZnJhZykKKwkJCQkgICAgICBpbnQgc3RhX2lkKQogewogCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAlzdHJ1Y3QgaXdsMzk0NV9od19rZXkgKmtleWluZm8gPQotCSAgICAmcHJpdi0+c3RhdGlvbnNfMzlbaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHhdLmtleWluZm87CisJICAgICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLmtleWluZm87CiAKIAlzd2l0Y2ggKGtleWluZm8tPmFsZykgewogCWNhc2UgQUxHX0NDTVA6CkBAIC04MTIsMTUgKzgxMiw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfVEtJUDoKLSNpZiAwCi0JCXR4LT5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwotCi0JCWlmIChsYXN0X2ZyYWcpCi0JCQltZW1jcHkodHgtPnRraXBfbWljLmJ5dGUsIHNrYl9mcmFnLT50YWlsIC0gOCwKLQkJCSAgICAgICA4KTsKLQkJZWxzZQotCQkJbWVtc2V0KHR4LT50a2lwX21pYy5ieXRlLCAwLCA4KTsKLSNlbmRpZgogCQlicmVhazsKIAogCWNhc2UgQUxHX1dFUDoKQEAgLTg5OSw3ICs4OTAsNyBAQAogCQkJdHgtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDIpOwogCX0gZWxzZSB7CiAJCXR4LT50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSAwOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJCXByaXYtPnJ4dHhwYWNrZXRzICs9IGxlMTZfdG9fY3B1KGNtZC0+Y21kLnR4Lmxlbik7CiAjZW5kaWYKIAl9CkBAIC0xMTIwLDcgKzExMTEsNyBAQAogCQkJCQkJICAgdHhjbWRfcGh5cywgbGVuLCAxLCAwKTsKIAogCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkKLQkJaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8ocHJpdiwgaW5mbywgb3V0X2NtZCwgc2tiLCAwKTsKKwkJaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8ocHJpdiwgaW5mbywgb3V0X2NtZCwgc2tiLCBzdGFfaWQpOwogCiAJLyogU2V0IHVwIFRGRCdzIDJuZCBlbnRyeSB0byBwb2ludCBkaXJlY3RseSB0byByZW1haW5kZXIgb2Ygc2tiLAogCSAqIGlmIGFueSAoODAyLjExIG51bGwgZnJhbWVzIGhhdmUgbm8gcGF5bG9hZCkuICovCkBAIC0xMTg4LDU2ICsxMTc5LDYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcmFkaW9fa2lsbF9zdyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISFkaXNhYmxlX3JhZGlvID09IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gJXNcbiIsCi0JCQkgIGRpc2FibGVfcmFkaW8gPyAiT0ZGIiA6ICJPTiIpOwotCi0JaWYgKGRpc2FibGVfcmFkaW8pIHsKLQkJaXdsX3NjYW5fY2FuY2VsKHByaXYpOwotCQkvKiBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIEFQICovCi0JCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAotCQkJCSAgICBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlpd2xfc2VuZF9jYXJkX3N0YXRlKHByaXYsIENBUkRfU1RBVEVfQ01EX0RJU0FCTEUsIDApOwotCQkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7Ci0KLQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIHdha2UgdXAgdWNvZGUgKi8KLQltc2xlZXAoMTApOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKLQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpCi0JCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCi0JCQkJICAiZGlzYWJsZWQgYnkgSFcgc3dpdGNoXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwcml2LT5pc19vcGVuKQotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCXJldHVybjsKLX0KLQogI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCiAKICNpbmNsdWRlICJpd2wtc3BlY3RydW0uaCIKQEAgLTE0MTcsNjAgKzEzNTgsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0KLQlJV0xfRVJSKHByaXYsICJFcnJvciBSZXBseSB0eXBlIDB4JTA4WCBjbWQgJXMgKDB4JTAyWCkgIgotCQkic2VxIDB4JTA0WCBzZXIgMHglMDhYXG4iLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfdHlwZSksCi0JCWdldF9jbWRfc3RyaW5nKHBrdC0+dS5lcnJfcmVzcC5jbWRfaWQpLAotCQlwa3QtPnUuZXJyX3Jlc3AuY21kX2lkLAotCQlsZTE2X3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuYmFkX2NtZF9zZXFfbnVtKSwKLQkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX2luZm8pKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uICpyZXBvcnQgPSAmKHBrdC0+dS5zcGVjdHJ1bV9ub3RpZik7Ci0KLQlpZiAoIXJlcG9ydC0+c3RhdGUpIHsKLQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF8xMUggfCBJV0xfRExfSU5GTywKLQkJCSAgIlNwZWN0cnVtIE1lYXN1cmUgTm90aWZpY2F0aW9uOiBTdGFydFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoJnByaXYtPm1lYXN1cmVfcmVwb3J0LCByZXBvcnQsIHNpemVvZigqcmVwb3J0KSk7Ci0JcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzIHw9IE1FQVNVUkVNRU5UX1JFQURZOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsX3NsZWVwX25vdGlmaWNhdGlvbiAqc2xlZXAgPSAmKHBrdC0+dS5zbGVlcF9ub3RpZik7Ci0JSVdMX0RFQlVHX1JYKHByaXYsICJzbGVlcCBtb2RlOiAlZCwgc3JjOiAlZFxuIiwKLQkJICAgICBzbGVlcC0+cG1fc2xlZXBfbW9kZSwgc2xlZXAtPnBtX3dha2V1cF9zcmMpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0JSVdMX0RFQlVHX1JBRElPKHByaXYsICJEdW1waW5nICVkIGJ5dGVzIG9mIHVuaGFuZGxlZCAiCi0JCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsCi0JCQlsZTMyX3RvX2NwdShwa3QtPmxlbiksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOwotCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsCi0JCQkgICBsZTMyX3RvX2NwdShwa3QtPmxlbikpOwotfQotCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX2JlYWNvbl91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CkBAIC0xNTE4LDEyNyArMTQwNSw2IEBACiAJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YmVhY29uX3VwZGF0ZSk7CiB9CiAKLS8qIFNlcnZpY2UgcmVzcG9uc2UgdG8gUkVQTFlfU0NBTl9DTUQgKDB4ODApICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQotCUlXTF9ERUJVR19SWChwcml2LCAiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOwotI2VuZGlmCi19Ci0KLS8qIFNlcnZpY2UgU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gKDB4ODIpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsX3NjYW5zdGFydF9ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2xfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0JcHJpdi0+c2Nhbl9zdGFydF90c2YgPSBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyk7Ci0JSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gc3RhcnQ6ICIKLQkJICAgICAgICIlZCBbODAyLjExJXNdICIKLQkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAoYmVhY29uIHRpbWVyICV1KVxuIiwKLQkJICAgICAgIG5vdGlmLT5jaGFubmVsLAotCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAotCQkgICAgICAgbm90aWYtPnRzZl9oaWdoLAotCQkgICAgICAgbm90aWYtPnRzZl9sb3csIG5vdGlmLT5zdGF0dXMsIG5vdGlmLT5iZWFjb25fdGltZXIpOwotfQotCi0vKiBTZXJ2aWNlIFNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04gKDB4ODMpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fcmVzdWx0c19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsX3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqbm90aWYgPQotCSAgICAoc3RydWN0IGl3bF9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwotI2VuZGlmCi0KLQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjaC5yZXM6ICIKLQkJICAgICAgICIlZCBbODAyLjExJXNdICIKLQkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCi0JCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKLQkJICAgICAgIG5vdGlmLT5jaGFubmVsLAotCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAotCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9oaWdoKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT5zdGF0aXN0aWNzWzBdKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSAtIHByaXYtPnNjYW5fc3RhcnRfdHNmLAotCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKLQkJCQkJKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkpOwotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLX0KLQotLyogU2VydmljZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiAoMHg4NCkgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfc2Nhbl9jb21wbGV0ZV9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9zY2FuY29tcGxldGVfbm90aWZpY2F0aW9uICpzY2FuX25vdGlmID0gKHZvaWQgKilwa3QtPnUucmF3OwotI2VuZGlmCi0KLQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKLQkJICAgICAgIHNjYW5fbm90aWYtPnNjYW5uZWRfY2hhbm5lbHMsCi0JCSAgICAgICBzY2FuX25vdGlmLT50c2ZfbG93LAotCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2hpZ2gsIHNjYW5fbm90aWYtPnN0YXR1cyk7Ci0KLQkvKiBUaGUgSFcgaXMgbm8gbG9uZ2VyIHNjYW5uaW5nICovCi0JY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIFRoZSBzY2FuIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIGNhbWUgaW4sIHNvIGtpbGwgdGhhdCB0aW1lci4uLiAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW4gcGFzcyBvbiAlc0dIeiB0b29rICVkbXNcbiIsCi0JCSAgICAgICAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkgPwotCQkJCQkJCSIyLjQiIDogIjUuMiIsCi0JCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwotCQkJCQkocHJpdi0+c2Nhbl9wYXNzX3N0YXJ0LCBqaWZmaWVzKSkpOwotCi0JLyogUmVtb3ZlIHRoaXMgc2Nhbm5lZCBiYW5kIGZyb20gdGhlIGxpc3Qgb2YgcGVuZGluZwotCSAqIGJhbmRzIHRvIHNjYW4sIGJhbmQgRyBwcmVjZWRlcyBBIGluIG9yZGVyIG9mIHNjYW5uaW5nCi0JICogYXMgc2VlbiBpbiBpd2wzOTQ1X2JnX3JlcXVlc3Rfc2NhbiAqLwotCWlmIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKQotCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JZWxzZSBpZiAocHJpdi0+c2Nhbl9iYW5kcyAmICBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikpCi0JCXByaXYtPnNjYW5fYmFuZHMgJj0gfkJJVChJRUVFODAyMTFfQkFORF81R0haKTsKLQotCS8qIElmIGEgcmVxdWVzdCB0byBhYm9ydCB3YXMgZ2l2ZW4sIG9yIHRoZSBzY2FuIGRpZCBub3Qgc3VjY2VlZAotCSAqIHRoZW4gd2UgcmVzZXQgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBhbmQgdGVybWluYXRlLAotCSAqIHJlLXF1ZXVpbmcgYW5vdGhlciBzY2FuIGlmIG9uZSBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlcmUgYXJlIG1vcmUgYmFuZHMgb24gdGhpcyBzY2FuIHBhc3MgcmVzY2hlZHVsZSAqLwotCQlpZiAocHJpdi0+c2Nhbl9iYW5kcyA+IDApCi0JCQlnb3RvIHJlc2NoZWR1bGU7Ci0JfQotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7Ci0KLQljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FuIHRvb2sgJWRtc1xuIiwKLQkJamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMocHJpdi0+c2Nhbl9zdGFydCwgamlmZmllcykpKTsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCi0JcmV0dXJuOwotCi1yZXNjaGVkdWxlOgotCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IGppZmZpZXM7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotfQotCiAvKiBIYW5kbGUgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUgdGhhdCBjYXJkJ3MgcG93ZXIgc3RhdGUgaXMgY2hhbmdpbmcKICAqIGR1ZSB0byBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGNyaXRpY2FsIHRlbXBlcmF0dXJlIFJGS0lMTCAqLwogc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9jYXJkX3N0YXRlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTE2OTAsMTMgKzE0NTYsMTEgQEAKIHsKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9BTElWRV0gPSBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlOwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FERF9TVEFdID0gaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhOwotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bDM5NDVfcnhfcmVwbHlfZXJyb3I7CisJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfRVJST1JdID0gaXdsX3J4X3JlcGx5X2Vycm9yOwogCXByaXYtPnJ4X2hhbmRsZXJzW0NIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTl0gPSBpd2xfcnhfY3NhOwotCXByaXYtPnJ4X2hhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXSA9Ci0JICAgIGl3bDM5NDVfcnhfc3BlY3RydW1fbWVhc3VyZV9ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9wbV9zbGVlcF9ub3RpZjsKKwlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsX3J4X3BtX3NsZWVwX25vdGlmOwogCXByaXYtPnJ4X2hhbmRsZXJzW1BNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDXSA9Ci0JICAgIGl3bDM5NDVfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZjsKKwkgICAgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWY7CiAJcHJpdi0+cnhfaGFuZGxlcnNbQkVBQ09OX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZjsKIAogCS8qCkBAIC0xNzA3LDk3ICsxNDcxLDE0IEBACiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfU1RBVElTVElDU19DTURdID0gaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzOwogCXByaXYtPnJ4X2hhbmRsZXJzW1NUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NDQU5fQ01EXSA9IGl3bDM5NDVfcnhfcmVwbHlfc2NhbjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX1NUQVJUX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWY7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fcmVzdWx0c19ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fY29tcGxldGVfbm90aWY7CisJaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHByaXYpOworCWl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHByaXYpOwogCXByaXYtPnJ4X2hhbmRsZXJzW0NBUkRfU1RBVEVfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZjsKIAogCS8qIFNldCB1cCBoYXJkd2FyZSBzcGVjaWZpYyBSeCBoYW5kbGVycyAqLwogCWl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChwcml2KTsKIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltIC0gUmVjbGFpbSBDTUQgcXVldWUgZW50cmllcwotICogV2hlbiBGVyBhZHZhbmNlcyAnUicgaW5kZXgsIGFsbCBlbnRyaWVzIGJldHdlZW4gb2xkIGFuZCBuZXcgJ1InIGluZGV4Ci0gKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4KLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgaW50IHR4cV9pZCwgaW50IGluZGV4KQotewotCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKLQlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKLQlpbnQgbmZyZWVkID0gMDsKLQotCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKHEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCi0JCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAotCQkJICBpbmRleCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGluZGV4ID0gaXdsX3F1ZXVlX2luY193cmFwKGluZGV4LCBxLT5uX2JkKTsgcS0+cmVhZF9wdHIgIT0gaW5kZXg7Ci0JCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgewotCQlpZiAobmZyZWVkID4gMSkgewotCQkJSVdMX0VSUihwcml2LCAiSENNRCBza2lwcGVkOiBpbmRleCAoJWQpICVkICVkXG4iLCBpbmRleCwKLQkJCQkJcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmZyZWVkKys7Ci0JfQotfQotCi0KLS8qKgotICogaXdsMzk0NV90eF9jbWRfY29tcGxldGUgLSBQdWxsIHVudXNlZCBidWZmZXJzIG9mZiB0aGUgcXVldWUgYW5kIHJlY2xhaW0gdGhlbQotICogQHJ4YjogUnggYnVmZmVyIHRvIHJlY2xhaW0KLSAqCi0gKiBJZiBhbiBSeCBidWZmZXIgaGFzIGFuIGFzeW5jIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGUgY2FsbGJhY2sKLSAqIHdpbGwgYmUgZXhlY3V0ZWQuICBUaGUgYXR0YWNoZWQgc2tiIChpZiBwcmVzZW50KSB3aWxsIG9ubHkgYmUgZnJlZWQKLSAqIGlmIHRoZSBjYWxsYmFjayByZXR1cm5zIDEKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV90eF9jbWRfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQl1MTYgc2VxdWVuY2UgPSBsZTE2X3RvX2NwdShwa3QtPmhkci5zZXF1ZW5jZSk7Ci0JaW50IHR4cV9pZCA9IFNFUV9UT19RVUVVRShzZXF1ZW5jZSk7Ci0JaW50IGluZGV4ID0gU0VRX1RPX0lOREVYKHNlcXVlbmNlKTsKLQlpbnQgaHVnZSA9ICAhIShwa3QtPmhkci5zZXF1ZW5jZSAmIFNFUV9IVUdFX0ZSQU1FKTsKLQlpbnQgY21kX2luZGV4OwotCXN0cnVjdCBpd2xfY21kICpjbWQ7Ci0KLQlpZiAoV0FSTih0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0sCi0JCSAid3JvbmcgY29tbWFuZCBxdWV1ZSAlZCwgc2VxdWVuY2UgMHglWCByZWFkcD0lZCB3cml0ZXA9JWRcbiIsCi0JCSAgdHhxX2lkLCBzZXF1ZW5jZSwKLQkJICBwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dLnEucmVhZF9wdHIsCi0JCSAgcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLndyaXRlX3B0cikpIHsKLQkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9JTkZPICwgcnhiLCAzMik7Ci0JCXJldHVybjsKLQl9Ci0KLQljbWRfaW5kZXggPSBnZXRfY21kX2luZGV4KCZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dLnEsIGluZGV4LCBodWdlKTsKLQljbWQgPSBwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dLmNtZFtjbWRfaW5kZXhdOwotCi0JLyogSW5wdXQgZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSB3aGVuIGNvbW1hbmRzIGFyZSBhZGRlZCB0byBxdWV1ZS4gKi8KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCWNtZC0+bWV0YS5zb3VyY2UtPnUuc2tiID0gcnhiLT5za2I7Ci0JCXJ4Yi0+c2tiID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNtZC0+bWV0YS51LmNhbGxiYWNrICYmCi0JCSAgICFjbWQtPm1ldGEudS5jYWxsYmFjayhwcml2LCBjbWQsIHJ4Yi0+c2tiKSkKLQkJcnhiLT5za2IgPSBOVUxMOwotCi0JaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKLQotCWlmICghKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQl9Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBSWC1GVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBSeCB0aGVvcnkgb2Ygb3BlcmF0aW9uCkBAIC0yMTU3LDcgKzE4MzgsNyBAQAogCQkJICogZmlyZSBvZmYgdGhlIChwb3NzaWJseSkgYmxvY2tpbmcgaXdsX3NlbmRfY21kKCkKIAkJCSAqIGFzIHdlIHJlY2xhaW0gdGhlIGRyaXZlciBjb21tYW5kIHF1ZXVlICovCiAJCQlpZiAocnhiICYmIHJ4Yi0+c2tiKQotCQkJCWl3bDM5NDVfdHhfY21kX2NvbXBsZXRlKHByaXYsIHJ4Yik7CisJCQkJaXdsX3R4X2NtZF9jb21wbGV0ZShwcml2LCByeGIpOwogCQkJZWxzZQogCQkJCUlXTF9XQVJOKHByaXYsICJDbGFpbSBudWxsIHJ4Yj9cbiIpOwogCQl9CkBAIC0yMTk1LDE0ICsxODc2LDYgQEAKIAlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCUlXTF9ERUJVR19JU1IocHJpdiwgIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOwotCXNldF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIENTUl9JTklfU0VUX01BU0spOwotfQotCi0KIC8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmbHVzaCBhbnkgc2NoZWR1bGVkIHRhc2tsZXQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTIyMTEsMjEgKzE4ODQsNiBAQAogCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JY2xlYXJfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBkaXNhYmxlIGludGVycnVwdHMgZnJvbSB1Q29kZS9OSUMgdG8gaG9zdCAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBhY2tub3dsZWRnZS9jbGVhci9yZXNldCBhbnkgaW50ZXJydXB0cyBzdGlsbCBwZW5kaW5nCi0JICogZnJvbSB1Q29kZSBvciBmbG93IGhhbmRsZXIgKFJ4L1R4IERNQSkgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweGZmZmZmZmZmKTsKLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JSVdMX0RFQlVHX0lTUihwcml2LCAiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKIHsKIAlzd2l0Y2ggKGkpIHsKQEAgLTI0NjcsNyArMjEyNSw3IEBACiAJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KLQkJaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKIAkJaXdsX2lycV9oYW5kbGVfZXJyb3IocHJpdik7CiAKQEAgLTI1NDcsNyArMjIwNSw3IEBACiAJLyogUmUtZW5hYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCi0JCWl3bDM5NDVfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CkBAIC0yNTYxLDYzICsyMjE5LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpd2wzOTQ1X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JdTMyIGludGEsIGludGFfbWFzazsKLQl1MzIgaW50YV9maDsKLQlpZiAoIXByaXYpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0KLQkvKiBEaXNhYmxlIChidXQgZG9uJ3QgY2xlYXIhKSBpbnRlcnJ1cHRzIGhlcmUgdG8gYXZvaWQKLQkgKiAgICBiYWNrLXRvLWJhY2sgSVNScyBhbmQgc3BvcmFkaWMgaW50ZXJydXB0cyBmcm9tIG91ciBOSUMuCi0JICogSWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gc2VydmljZSwgdGhlIHRhc2tsZXQgd2lsbCByZS1lbmFibGUgaW50cy4KLQkgKiBJZiB3ZSAqZG9uJ3QqIGhhdmUgc29tZXRoaW5nLCB3ZSdsbCByZS1lbmFibGUgYmVmb3JlIGxlYXZpbmcgaGVyZS4gKi8KLQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7ICAvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBEaXNjb3ZlciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUvcGVuZGluZyAqLwotCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQotCS8qIElnbm9yZSBpbnRlcnJ1cHQgaWYgdGhlcmUncyBub3RoaW5nIGluIE5JQyB0byBzZXJ2aWNlLgotCSAqIFRoaXMgbWF5IGJlIGR1ZSB0byBJUlEgc2hhcmVkIHdpdGggYW5vdGhlciBkZXZpY2UsCi0JICogb3IgZHVlIHRvIHNwb3JhZGljIGludGVycnVwdHMgdGhyb3duIGZyb20gb3VyIE5JQy4gKi8KLQlpZiAoIWludGEgJiYgIWludGFfZmgpIHsKLQkJSVdMX0RFQlVHX0lTUihwcml2LCAiSWdub3JlIGludGVycnVwdCwgaW50YSA9PSAwLCBpbnRhX2ZoID09IDBcbiIpOwotCQlnb3RvIG5vbmU7Ci0JfQotCi0JaWYgKChpbnRhID09IDB4RkZGRkZGRkYpIHx8ICgoaW50YSAmIDB4RkZGRkZGRjApID09IDB4YTVhNWE1YTApKSB7Ci0JCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkICovCi0JCUlXTF9XQVJOKHByaXYsICJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOwotCQlnb3RvIHVucGx1Z2dlZDsKLQl9Ci0KLQlJV0xfREVCVUdfSVNSKHByaXYsICJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCi0JCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7Ci0KLQlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7Ci0KLQkvKiBpd2wzOTQ1X2lycV90YXNrbGV0KCkgd2lsbCBzZXJ2aWNlIGludGVycnVwdHMgYW5kIHJlLWVuYWJsZSB0aGVtICovCi0JaWYgKGxpa2VseShpbnRhIHx8IGludGFfZmgpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7Ci11bnBsdWdnZWQ6Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gbm9uZToKLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIElSUV9OT05FOwotfQotCiBzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQkgICAgIHU4IGlzX2FjdGl2ZSwgdTggbl9wcm9iZXMsCkBAIC0zMzg3LDcgKzI5ODgsNyBAQAogCiAJLyogdGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCkBAIC0zNTE3LDcgKzMxMTgsNyBAQAogCiAJLyogY2xlYXIgKGFnYWluKSwgdGhlbiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7Ci0JaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKIAkvKiByZWFsbHkgbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwpAQCAtMzk0MSw3ICszNTQyLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKIAogCS8qIHdlIGhhdmUganVzdCBhc3NvY2lhdGVkLCBkb24ndCBzdGFydCBzY2FuIHRvbyBlYXJseSAqLwogCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU47CkBAIC00MTcyLDkgKzM3NzMsMTMgQEAKIAl9CiAjZW5kaWYKIAotCWl3bDM5NDVfcmFkaW9fa2lsbF9zdyhwcml2LCAhY29uZi0+cmFkaW9fZW5hYmxlZCk7CisJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYgaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRi1LSUxMIC0gd2FpdGluZyBmb3IgdUNvZGVcbiIpOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKKwkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKIAkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHJhZGlvIGRpc2FibGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDQ0Miw2NiArNDA0Nyw2IEBACiAKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKLXsKLQlpbnQgcmMgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc2l6ZV90IGxlbiA9IDA7Ci0JdTggKnNzaWQgPSBOVUxMOwotCURFQ0xBUkVfU1NJRF9CVUYoc3NpZF9idWYpOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7Ci0KLQlpZiAocmVxLT5uX3NzaWRzKSB7Ci0JCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7Ci0JCWxlbiA9IHJlcS0+c3NpZHNbMF0uc3NpZF9sZW47Ci0JfQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlyYyA9IC1FSU87Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHkgb3IgZXhpdCBwZW5kaW5nXG4iKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8qIHdlIGRvbid0IHNjaGVkdWxlIHNjYW4gd2l0aGluIG5leHRfc2Nhbl9qaWZmaWVzIHBlcmlvZCAqLwotCWlmIChwcml2LT5uZXh0X3NjYW5famlmZmllcyAmJgotCQkJdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKLQkJcmMgPSAtRUFHQUlOOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCS8qIGlmIHdlIGp1c3QgZmluaXNoZWQgc2NhbiBhc2sgZm9yIGRlbGF5IGZvciBhIGJyb2FkY2FzdCBzY2FuICovCi0JaWYgKChsZW4gPT0gMCkgJiYgcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgJiYKLQkgICAgdGltZV9hZnRlcihwcml2LT5sYXN0X3NjYW5famlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU4sCi0JCSAgICAgICBqaWZmaWVzKSkgewotCQlyYyA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0JaWYgKGxlbikgewotCQlJV0xfREVCVUdfU0NBTihwcml2LCAiZGlyZWN0IHNjYW4gZm9yICVzIFslemRdXG4gIiwKLQkJCSAgICAgICBwcmludF9zc2lkKHNzaWRfYnVmLCBzc2lkLCBsZW4pLCBsZW4pOwotCi0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7Ci0JCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9IGxlbjsKLQkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBsZW4pOwotCX0gZWxzZQotCQlwcml2LT5vbmVfZGlyZWN0X3NjYW4gPSAwOwotCi0JcmMgPSBpd2wzOTQ1X3NjYW5faW5pdGlhdGUocHJpdik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKLQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLApAQCAtNDUwOSw4ICs0MDU0LDkgQEAKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAljb25zdCB1OCAqYWRkcjsKLQlpbnQgcmV0OwotCXU4IHN0YV9pZDsKKwlpbnQgcmV0ID0gMDsKKwl1OCBzdGFfaWQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOworCXU4IHN0YXRpY19rZXk7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIApAQCAtNDUyMCw0MyArNDA2Niw0MSBAQAogCX0KIAogCWFkZHIgPSBzdGEgPyBzdGEtPmFkZHIgOiBpd2xfYmNhc3RfYWRkcjsKLQlzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAotCQkJCSAgIGFkZHIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdGF0aWNfa2V5ID0gIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpOworCisJaWYgKCFzdGF0aWNfa2V5KSB7CisJCXN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOworCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSAlcE1ub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQkJCQkgICAgYWRkcik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQogCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgIFNFVF9LRVk6Ci0JCXJldCA9IGl3bDM5NDVfdXBkYXRlX3N0YV9rZXlfaW5mbyhwcml2LCBrZXksIHN0YV9pZCk7Ci0JCWlmICghcmV0KSB7Ci0JCQlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgMSk7Ci0JCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQkJa2V5LT5od19rZXlfaWR4ID0gc3RhX2lkOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsCi0JCQkJInNldF9rZXkgc3VjY2VzcywgdXNpbmcgaHdjcnlwdG9cbiIpOwotCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0JCX0KKwljYXNlIFNFVF9LRVk6CisJCWlmIChzdGF0aWNfa2V5KQorCQkJcmV0ID0gaXdsMzk0NV9zZXRfc3RhdGljX2tleShwcml2LCBrZXkpOworCQllbHNlCisJCQlyZXQgPSBpd2wzOTQ1X3NldF9keW5hbWljX2tleShwcml2LCBrZXksIHN0YV9pZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW5hYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6Ci0JCXJldCA9IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHByaXYsIHN0YV9pZCk7Ci0JCWlmICghcmV0KSB7Ci0JCQlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgMCk7Ci0JCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7Ci0JCX0KKwkJaWYgKHN0YXRpY19rZXkpCisJCQlyZXQgPSBpd2wzOTQ1X3JlbW92ZV9zdGF0aWNfa2V5KHByaXYpOworCQllbHNlCisJCQlyZXQgPSBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhwcml2LCBzdGFfaWQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00NTk3LDkgKzQxNDEsOSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlpd2wzOTQ1X2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKKwkJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKIAllbHNlIGlmIChwcml2LT5hc3NvY19pZCAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJCWl3bF9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIApAQCAtNDcwNCw2ICs0MjQ4LDcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fbGU2NCB0aW1lc3RhbXA7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIApAQCAtNDcyNSw2ICs0MjcwLDggQEAKIAlwcml2LT5pYnNzX2JlYWNvbiA9IHNrYjsKIAogCXByaXYtPmFzc29jX2lkID0gMDsKKwl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKKwlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApOwogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtNTIwMSw3ICs0NzQ4LDcgQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKKwlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShEUlZfTkFNRSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCkBAIC01Mjc1LDcgKzQ4MjIsNyBAQAogCS5jb25mX3R4ID0gaXdsMzk0NV9tYWNfY29uZl90eCwKIAkucmVzZXRfdHNmID0gaXdsMzk0NV9tYWNfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gaXdsMzk0NV9ic3NfaW5mb19jaGFuZ2VkLAotCS5od19zY2FuID0gaXdsMzk0NV9tYWNfaHdfc2NhbgorCS5od19zY2FuID0gaXdsX21hY19od19zY2FuCiB9OwogCiBzdGF0aWMgaW50IGl3bDM5NDVfaW5pdF9kcnYoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtNTM0MCwxMyArNDg4Nyw2IEBACiAJfQogCWl3bDM5NDVfaW5pdF9od19yYXRlcyhwcml2LCBwcml2LT5pZWVlX3JhdGVzKTsKIAotCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzKQotCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KLQkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscykKLQkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9Ci0JCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07Ci0KIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfY2hhbm5lbF9tYXA6CkBAIC01MzU1LDYgKzQ4OTUsNDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7CisKKwlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJpd2wtMzk0NS1ycyI7CisJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYpOworCisJLyogVGVsbCBtYWM4MDIxMSBvdXIgY2hhcmFjdGVyaXN0aWNzICovCisJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKKworCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKworCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCisJLyogRGVmYXVsdCB2YWx1ZTsgNCBFRENBIFFPUyBwcmlvcml0aWVzICovCisJaHctPnF1ZXVlcyA9IDQ7CisKKwlody0+Y29uZi5iZWFjb25faW50ID0gMTAwOworCisJaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMpCisJCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPQorCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCisJaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpCisJCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPQorCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byByZWdpc3RlciBodyAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGl3bDM5NDVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWludCBlcnIgPSAwOwpAQCAtNTM4NSw3ICs0OTY2LDcgQEAKIAkJCSJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKIAkJCUlXTF9NSU5fTlVNX1FVRVVFUywgSVdMMzlfTUFYX05VTV9RVUVVRVMpOwogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfaWVlZTgwMjExX2ZyZWVfaHc7CiAJfQogCiAJLyoKQEAgLTU0MDYsMjMgKzQ5ODcsNiBAQAogCXByaXYtPmRlYnVnX2xldmVsID0gaXdsMzk0NV9tb2RfcGFyYW1zLmRlYnVnOwogCWF0b21pY19zZXQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCwgMCk7CiAjZW5kaWYKLQlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJpd2wtMzk0NS1ycyI7Ci0JaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYpOwotCi0JLyogVGVsbCBtYWM4MDIxMSBvdXIgY2hhcmFjdGVyaXN0aWNzICovCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKLQotCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KLQkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKLQotCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOwotCi0JaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7Ci0KLQkvKiA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KLQlody0+cXVldWVzID0gNDsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiAyLiBJbml0aWFsaXppbmcgUENJIGJ1cwpAQCAtNTQ2Nyw3ICs1MDMxLDcgQEAKIAkvKiBhbXAgaW5pdCAqLwogCWVyciA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuaW5pdChwcml2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgQVBNR1xuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCkBAIC01NDc5LDcgKzUwNDMsNyBAQAogCWVyciA9IGl3bF9lZXByb21faW5pdChwcml2KTsKIAlpZiAoZXJyKSB7CiAJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7Ci0JCWdvdG8gb3V0X3JlbW92ZV9zeXNmczsKKwkJZ290byBvdXRfaW91bm1hcDsKIAl9CiAJLyogTUFDIEFkZHJlc3MgbG9jYXRpb24gaW4gRUVQUk9NIHNhbWUgZm9yIDM5NDUvNDk2NSAqLwogCWVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CkBAIC01NDkzLDcgKzUwNTcsNyBAQAogCS8qIERldmljZS1zcGVjaWZpYyBzZXR1cCAqLwogCWlmIChpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMocHJpdikpIHsKIAkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBzZXR0aW5nc1xuIik7Ci0JCWdvdG8gb3V0X2lvdW5tYXA7CisJCWdvdG8gb3V0X2VlcHJvbV9mcmVlOwogCX0KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTUwMyw3ICs1MDY3LDcgQEAKIAllcnIgPSBpd2wzOTQ1X2luaXRfZHJ2KHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGRyaXZlciBmYWlsZWRcbiIpOwotCQlnb3RvIG91dF9mcmVlX2dlb3M7CisJCWdvdG8gb3V0X3Vuc2V0X2h3X3BhcmFtczsKIAl9CiAKIAlJV0xfSU5GTyhwcml2LCAiRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzXG4iLApAQCAtNTUyNiwxMiArNTA5MCwxMiBAQAogCSAqICoqKioqKioqKioqKioqKioqKioqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXBjaV9lbmFibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBpd2wzOTQ1X2lzciwgSVJRRl9TSEFSRUQsCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBpd2xfaXNyLCBJUlFGX1NIQVJFRCwKIAkJCSAgRFJWX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CkBAIC01NTUzLDE5ICs1MTE3LDE4IEBACiAJICogOS4gU2V0dXAgYW5kIFJlZ2lzdGVyIG1hYzgwMjExCiAJICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7Ci0JaWYgKGVycikgewotCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0d29yayBkZXZpY2U6ICVkXG4iLCBlcnIpOwotCQlnb3RvICBvdXRfcmVtb3ZlX3N5c2ZzOwotCX0KKwlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKLQlwcml2LT5ody0+Y29uZi5iZWFjb25faW50ID0gMTAwOwotCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOworCWVyciA9IGl3bDM5NDVfc2V0dXBfbWFjKHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gIG91dF9yZW1vdmVfc3lzZnM7CiAKIAllcnIgPSBpd2xfcmZraWxsX2luaXQocHJpdik7CiAJaWYgKGVycikKIAkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgogCQkJCSAgIklnbm9yaW5nIGVycm9yOiAlZFxuIiwgZXJyKTsKKwllbHNlCisJCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwogCiAJLyogU3RhcnQgbW9uaXRvcmluZyB0aGUga2lsbHN3aXRjaCAqLwogCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZmtpbGxfcG9sbCwKQEAgLTU1NzQsMjQgKzUxMzcsMjYgQEAKIAlyZXR1cm4gMDsKIAogIG91dF9yZW1vdmVfc3lzZnM6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKLSBvdXRfZnJlZV9nZW9zOgotCWl3bGNvcmVfZnJlZV9nZW9zKHByaXYpOwotCi0gb3V0X3JlbGVhc2VfaXJxOgotCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwotCWl3bDM5NDVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2wzOTQ1X2F0dHJpYnV0ZV9ncm91cCk7Cisgb3V0X3JlbGVhc2VfaXJxOgorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CiAgb3V0X2Rpc2FibGVfbXNpOgogCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKKwlpd2xjb3JlX2ZyZWVfZ2Vvcyhwcml2KTsKKwlpd2xfZnJlZV9jaGFubmVsX21hcChwcml2KTsKKyBvdXRfdW5zZXRfaHdfcGFyYW1zOgorCWl3bDM5NDVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOworIG91dF9lZXByb21fZnJlZToKKwlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CiAgb3V0X2lvdW5tYXA6CiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+aHdfYmFzZSk7CiAgb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKICBvdXRfcGNpX2Rpc2FibGVfZGV2aWNlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogIG91dF9pZWVlODAyMTFfZnJlZV9odzoKIAlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CiAgb3V0OgpAQCAtNTYyMSw3ICs1MTg2LDcgQEAKIAkgKiB0YXNrbGV0IGZvciB0aGUgZHJpdmVyCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWl3bF9zeW5jaHJvbml6ZV9pcnEocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggNjM4OGIwNS4uZThkZmRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaApAQCAtMjY1LDYgKzI2NSw3IEBACiAKICNkZWZpbmUJQ01EX0ZfSE9TVENNRAkJKDEgPDwgMCkKICNkZWZpbmUgRldfQ0FQSU5GT19XUEEgIAkoMSA8PCAwKQorI2RlZmluZSBGV19DQVBJTkZPX1BTICAJCSgxIDw8IDEpCiAjZGVmaW5lIEZXX0NBUElORk9fRklSTVdBUkVfVVBHUkFERQkoMSA8PCAxMykKICNkZWZpbmUgRldfQ0FQSU5GT19CT09UMl9VUEdSQURFCSgxPDwxNCkKICNkZWZpbmUgRldfQ0FQSU5GT19QRVJTSVNURU5UX0NPTkZJRwkoMTw8MTUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGRkNjgyYzQuLjI3ZTgxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xMDksNyArMTA5LDYgQEAKIAl2b2lkICpjYXJkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9kZXY7IC8qIFZpcnR1YWwgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnJ0YXBfbmV0X2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCmluZGV4IDYxZDJmNTAuLmIxMThhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKQEAgLTIzLDcgKzIzLDcgQEAKIHN0YXRpYyB2b2lkIGxic19ldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCiAJc25wcmludGYoaW5mby0+ZndfdmVyc2lvbiwgMzIsICIldS4ldS4ldS5wJXUiLAogCQlwcml2LT5md3JlbGVhc2UgPj4gMjQgJiAweGZmLApAQCAtNDcsNyArNDcsNyBAQAogc3RhdGljIGludCBsYnNfZXRodG9vbF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICogYnl0ZXMpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGNtZF9kc184MDJfMTFfZWVwcm9tX2FjY2VzcyBjbWQ7CiAJaW50IHJldDsKIApAQCAtNzYsNyArNzYsNyBAQAogc3RhdGljIHZvaWQgbGJzX2V0aHRvb2xfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHVpbnQ2NF90ICpkYXRhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBjbWRfZHNfbWVzaF9hY2Nlc3MgbWVzaF9hY2Nlc3M7CiAJaW50IHJldDsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAKIHN0YXRpYyBpbnQgbGJzX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlpZiAoc3NldCA9PSBFVEhfU1NfU1RBVFMgJiYgZGV2ID09IHByaXYtPm1lc2hfZGV2KQogCQlyZXR1cm4gTUVTSF9TVEFUU19OVU07CkBAIC0xNDMsNyArMTQzLDcgQEAKIHN0YXRpYyB2b2lkIGxic19ldGh0b29sX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlpZiAocHJpdi0+d29sX2NyaXRlcmlhID09IDB4ZmZmZmZmZmYpIHsKIAkJLyogSW50ZXJmYWNlIGRyaXZlciBkaWRuJ3QgY29uZmlndXJlIHdha2UgKi8KQEAgLTE2Niw3ICsxNjYsNyBAQAogc3RhdGljIGludCBsYnNfZXRodG9vbF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXVpbnQzMl90IGNyaXRlcmlhID0gMDsKIAogCWlmIChwcml2LT53b2xfY3JpdGVyaWEgPT0gMHhmZmZmZmZmZiAmJiB3b2wtPndvbG9wdHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCA4Zjg5MzRhLi5jZWRlYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCWxlbiA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19SRUFEX0xFTik7CiAJaWYgKGxlbiA9PSAwIHx8IGxlbiA+IE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSB7CiAJCWxic19wcl9lcnIoImNhcmQgZGF0YSBidWZmZXIgaGFzIGludmFsaWQgIyBvZiBieXRlcyAoJWQpXG4iLCBsZW4pOwotCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlnb3RvIGRhdF9lcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKaW5kZXggNDUxOWQ3My4uNzZmNGM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwpAQCAtOTUsNiArOTUsOCBAQAogCiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgaWZfc2Rpb19wYWNrZXQJKnBhY2tldHM7CisKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdAlwYWNrZXRfd29ya2VyOwogfTsKIApAQCAtMjA5LDYgKzIxMSw5IEBACiAJCWV2ZW50ID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBJRl9TRElPX0VWRU5ULCAmcmV0KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OworCisJCS8qIHJpZ2h0IHNoaWZ0IDMgYml0cyB0byBnZXQgdGhlIGV2ZW50IGlkICovCisJCWV2ZW50ID4+PSAzOwogCX0gZWxzZSB7CiAJCWlmIChzaXplIDwgNCkgewogCQkJbGJzX2RlYl9zZGlvKCJldmVudCBwYWNrZXQgdG9vIHNtYWxsICglZCBieXRlcylcbiIsCkBAIC03NDMsNyArNzQ4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAotCXNjaGVkdWxlX3dvcmsoJmNhcmQtPnBhY2tldF93b3JrZXIpOworCXF1ZXVlX3dvcmsoY2FyZC0+d29ya3F1ZXVlLCAmY2FyZC0+cGFja2V0X3dvcmtlcik7CiAKIAlyZXQgPSAwOwogCkBAIC04MzMsNiArODM4LDcgQEAKIAljYXJkLT5mdW5jID0gZnVuYzsKIAljYXJkLT5tb2RlbCA9IG1vZGVsOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKwljYXJkLT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJsaWJlcnRhc19zZGlvIik7CiAJSU5JVF9XT1JLKCZjYXJkLT5wYWNrZXRfd29ya2VyLCBpZl9zZGlvX2hvc3RfdG9fY2FyZF93b3JrZXIpOwogCiAJZm9yIChpID0gMDtpIDwgQVJSQVlfU0laRShpZl9zZGlvX21vZGVscyk7aSsrKSB7CkBAIC05MjEsMTUgKzkyNywxNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2FjdGl2YXRlX2NhcmQ7CiAKKwlpZiAocHJpdi0+ZndjYXBpbmZvICYgRldfQ0FQSU5GT19QUykKKwkJcHJpdi0+cHNfc3VwcG9ydGVkID0gMTsKKwogb3V0OgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIAogZXJyX2FjdGl2YXRlX2NhcmQ6Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQlmcmVlX25ldGRldihwcml2LT5kZXYpOwotCWtmcmVlKHByaXYpOworCWZsdXNoX3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOworCWxic19yZW1vdmVfY2FyZChwcml2KTsKIHJlY2xhaW06CiAJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwogcmVsZWFzZV9pbnQ6CkBAIC05MzksNiArOTQ3LDcgQEAKIHJlbGVhc2U6CiAJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CiBmcmVlOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CiAJd2hpbGUgKGNhcmQtPnBhY2tldHMpIHsKIAkJcGFja2V0ID0gY2FyZC0+cGFja2V0czsKIAkJY2FyZC0+cGFja2V0cyA9IGNhcmQtPnBhY2tldHMtPm5leHQ7CkBAIC05NjUsNyArOTc0LDggQEAKIAlsYnNfc3RvcF9jYXJkKGNhcmQtPnByaXYpOwogCWxic19yZW1vdmVfY2FyZChjYXJkLT5wcml2KTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKIAogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKIAlzZGlvX3JlbGVhc2VfaXJxKGZ1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwppbmRleCAyZmM2MzdhLi5lYTNkYzAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKQEAgLTU5LDcgKzU5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGlmX3VzYl9maXJtd2FyZV9zZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCA9IHByaXYtPmNhcmQ7CiAJY2hhciBmd25hbWVbRklSTVdBUkVfTkFNRV9NQVhdOwogCWludCByZXQ7CkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgc3NpemVfdCBpZl91c2JfYm9vdDJfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5tbF9wcml2OwogCXN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHAgPSBwcml2LT5jYXJkOwogCWNoYXIgZnduYW1lW0ZJUk1XQVJFX05BTUVfTUFYXTsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IDhhN2ViMjcuLjhhZTkzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogc3RhdGljIHNzaXplX3QgbGJzX2FueWNhc3RfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyBtZXNoX2FjY2VzczsKIAlpbnQgcmV0OwogCkBAIC0yNDEsNyArMjQxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGxic19hbnljYXN0X3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyBtZXNoX2FjY2VzczsKIAl1aW50MzJfdCBkYXR1bTsKIAlpbnQgcmV0OwpAQCAtMjYzLDcgKzI2Myw3IEBACiBzdGF0aWMgc3NpemVfdCBsYnNfcHJiX3JzcF9saW1pdF9nZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5tbF9wcml2OwogCXN0cnVjdCBjbWRfZHNfbWVzaF9hY2Nlc3MgbWVzaF9hY2Nlc3M7CiAJaW50IHJldDsKIAl1MzIgcmV0cnlfbGltaXQ7CkBAIC0yODYsNyArMjg2LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGxic19wcmJfcnNwX2xpbWl0X3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+bWxfcHJpdjsKIAlzdHJ1Y3QgY21kX2RzX21lc2hfYWNjZXNzIG1lc2hfYWNjZXNzOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyByZXRyeV9saW1pdDsKQEAgLTMyMSw3ICszMjEsNyBAQAogc3RhdGljIHNzaXplX3QgbGJzX3J0YXBfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNSwgIjB4JVhcbiIsIHByaXYtPm1vbml0b3Jtb2RlKTsKIH0KIApAQCAtMzMyLDcgKzMzMiw3IEBACiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IG1vbml0b3JfbW9kZTsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+bWxfcHJpdjsKIAogCXNzY2FuZihidWYsICIleCIsICZtb25pdG9yX21vZGUpOwogCWlmIChtb25pdG9yX21vZGUpIHsKQEAgLTM4Myw3ICszODMsNyBAQAogc3RhdGljIHNzaXplX3QgbGJzX21lc2hfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNSwgIjB4JVhcbiIsICEhcHJpdi0+bWVzaF9kZXYpOwogfQogCkBAIC0zOTMsNyArMzkzLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGxic19tZXNoX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJaW50IGVuYWJsZTsKIAlpbnQgcmV0LCBhY3Rpb24gPSBDTURfQUNUX01FU0hfQ09ORklHX1NUT1A7CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQAogICovCiBzdGF0aWMgaW50IGxic19kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldikgOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlpbnQgcmV0ID0gMDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOwpAQCAtNTIxLDcgKzUyMSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgbGJzX2V0aF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKIApAQCAtNTM4LDcgKzUzOCw3IEBACiAKIHN0YXRpYyB2b2lkIGxic190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfVFgpOwogCkBAIC01ODIsMjQgKzU4MiwxMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2hvc3RfdG9fY2FyZF9kb25lKTsKIAotLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV0d29yayBzdGF0aXN0aWNzCi0gKgotICogIEBwYXJhbSBkZXYgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGJzX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCiBzdGF0aWMgaW50IGxic19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnBod2FkZHIgPSBhZGRyOwogCXN0cnVjdCBjbWRfZHNfODAyXzExX21hY19hZGRyZXNzIGNtZDsKIApAQCAtNzMyLDcgKzcxOCw3IEBACiAKIHN0YXRpYyB2b2lkIGxic19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAogCXNjaGVkdWxlX3dvcmsoJnByaXYtPm1jYXN0X3dvcmspOwogfQpAQCAtNzQ4LDcgKzczNCw3IEBACiBzdGF0aWMgaW50IGxic190aHJlYWQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9USFJFQUQpOwpAQCAtMTE2Miw2ICsxMTQ4LDE3IEBACiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxic19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbGJzX2Rldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBsYnNfZXRoX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGxic19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBsYnNfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fdHhfdGltZW91dCAJPSBsYnNfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBjYXJkLiBpdCB3aWxsIHByb2JlIHRoZQogICogY2FyZCwgYWxsb2NhdGUgdGhlIGxic19wcml2IGFuZCBpbml0aWFsaXplIHRoZSBkZXZpY2UuCkBAIC0xMTgzLDYgKzExODAsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWRldi0+bWxfcHJpdiA9IHByaXY7CiAKIAlpZiAobGJzX2luaXRfYWRhcHRlcihwcml2KSkgewogCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyIHN0cnVjdHVyZS5cbiIpOwpAQCAtMTE5NSwxOSArMTE5MywxMyBAQAogCXByaXYtPmluZnJhX29wZW4gPSAwOwogCiAJLyogU2V0dXAgdGhlIE9TIEludGVyZmFjZSB0byBvdXIgZnVuY3Rpb25zICovCi0JZGV2LT5vcGVuID0gbGJzX2Rldl9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbGJzX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSBsYnNfZXRoX3N0b3A7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYnNfc2V0X21hY19hZGRyZXNzOwotCWRldi0+dHhfdGltZW91dCA9IGxic190eF90aW1lb3V0OwotCWRldi0+Z2V0X3N0YXRzID0gbGJzX2dldF9zdGF0czsKKyAJZGV2LT5uZXRkZXZfb3BzID0gJmxic19uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZsYnNfZXRodG9vbF9vcHM7CiAjaWZkZWYJV0lSRUxFU1NfRVhUCi0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmbGJzX2hhbmRsZXJfZGVmOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmbGJzX2hhbmRsZXJfZGVmOwogI2VuZGlmCiAJZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsIGRtZGV2KTsKIApAQCAtMTQxNyw2ICsxNDA5LDE0IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfc3RvcF9jYXJkKTsKIAogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1lc2hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGJzX2Rldl9vcGVuLAorCS5uZG9fc3RvcCAJCT0gbGJzX21lc2hfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGJzX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGxic19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogLyoqCiAgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBhZGRzIG1zaFggaW50ZXJmYWNlCiAgKgpAQCAtMTQzOSwxMSArMTQzOSw3IEBACiAJbWVzaF9kZXYtPm1sX3ByaXYgPSBwcml2OwogCXByaXYtPm1lc2hfZGV2ID0gbWVzaF9kZXY7CiAKLQltZXNoX2Rldi0+b3BlbiA9IGxic19kZXZfb3BlbjsKLQltZXNoX2Rldi0+aGFyZF9zdGFydF94bWl0ID0gbGJzX2hhcmRfc3RhcnRfeG1pdDsKLQltZXNoX2Rldi0+c3RvcCA9IGxic19tZXNoX3N0b3A7Ci0JbWVzaF9kZXYtPmdldF9zdGF0cyA9IGxic19nZXRfc3RhdHM7Ci0JbWVzaF9kZXYtPnNldF9tYWNfYWRkcmVzcyA9IGxic19zZXRfbWFjX2FkZHJlc3M7CisJbWVzaF9kZXYtPm5ldGRldl9vcHMgPSAmbWVzaF9uZXRkZXZfb3BzOwogCW1lc2hfZGV2LT5ldGh0b29sX29wcyA9ICZsYnNfZXRodG9vbF9vcHM7CiAJbWVtY3B5KG1lc2hfZGV2LT5kZXZfYWRkciwgcHJpdi0+ZGV2LT5kZXZfYWRkciwKIAkJCXNpemVvZihwcml2LT5kZXYtPmRldl9hZGRyKSk7CkBAIC0xNDU0LDcgKzE0NTAsNiBAQAogCW1lc2hfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmbWVzaF9oYW5kbGVyX2RlZjsKICNlbmRpZgogCW1lc2hfZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKLQltZXNoX2Rldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdDsKIAkvKiBSZWdpc3RlciB2aXJ0dWFsIG1lc2ggaW50ZXJmYWNlICovCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG1lc2hfZGV2KTsKIAlpZiAocmV0KSB7CkBAIC0xNjQ3LDE0ICsxNjQyLDYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGJzX3J0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOwotCXJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQgbGJzX3JlbW92ZV9ydGFwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CkBAIC0xNjY3LDYgKzE2NTQsMTIgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRhcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGxic19ydGFwX29wZW4sCisJLm5kb19zdG9wID0gbGJzX3J0YXBfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQgPSBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgaW50IGxic19hZGRfcnRhcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xNjg2LDEwICsxNjc5LDcgQEAKIAogCW1lbWNweShydGFwX2Rldi0+ZGV2X2FkZHIsIHByaXYtPmN1cnJlbnRfYWRkciwgRVRIX0FMRU4pOwogCXJ0YXBfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKLQlydGFwX2Rldi0+b3BlbiA9IGxic19ydGFwX29wZW47Ci0JcnRhcF9kZXYtPnN0b3AgPSBsYnNfcnRhcF9zdG9wOwotCXJ0YXBfZGV2LT5nZXRfc3RhdHMgPSBsYnNfcnRhcF9nZXRfc3RhdHM7Ci0JcnRhcF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19ydGFwX2hhcmRfc3RhcnRfeG1pdDsKKwlydGFwX2Rldi0+bmV0ZGV2X29wcyA9ICZydGFwX25ldGRldl9vcHM7CiAJcnRhcF9kZXYtPm1sX3ByaXYgPSBwcml2OwogCVNFVF9ORVRERVZfREVWKHJ0YXBfZGV2LCBwcml2LT5kZXYtPmRldi5wYXJlbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9wZXJzaXN0Y2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9wZXJzaXN0Y2ZnLmMKaW5kZXggZDQyYjdhNS4uMThmZTI5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcGVyc2lzdGNmZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3BlcnNpc3RjZmcuYwpAQCAtMTgsNyArMTgsNyBAQAogc3RhdGljIGludCBtZXNoX2dldF9kZWZhdWx0X3BhcmFtZXRlcnMoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgbXJ2bF9tZXNoX2RlZmF1bHRzICpkZWZzKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5tbF9wcml2OwogCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOwogCWludCByZXQ7CiAKQEAgLTU3LDcgKzU3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGJvb3RmbGFnX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5tbF9wcml2OwogCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOwogCXVpbnQzMl90IGRhdHVtOwogCWludCByZXQ7CkBAIC0xMDAsNyArMTAwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGJvb3R0aW1lX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+bWxfcHJpdjsKIAlzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnIGNtZDsKIAl1aW50MzJfdCBkYXR1bTsKIAlpbnQgcmV0OwpAQCAtMTUyLDcgKzE1Miw3IEBACiBzdGF0aWMgc3NpemVfdCBjaGFubmVsX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZyBjbWQ7CiAJdWludDMyX3QgZGF0dW07CiAJaW50IHJldDsKQEAgLTIxMCw3ICsyMTAsNyBAQAogCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOwogCXN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgZGVmczsKIAlzdHJ1Y3QgbXJ2bF9tZXNoaWUgKmllOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5tbF9wcml2OwogCWludCBsZW47CiAJaW50IHJldDsKIApAQCAtMjY5LDcgKzI2OSw3IEBACiAJc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZyBjbWQ7CiAJc3RydWN0IG1ydmxfbWVzaF9kZWZhdWx0cyBkZWZzOwogCXN0cnVjdCBtcnZsX21lc2hpZSAqaWU7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJdWludDMyX3QgZGF0dW07CiAJaW50IHJldDsKIApAQCAtMzIzLDcgKzMyMyw3IEBACiAJc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZyBjbWQ7CiAJc3RydWN0IG1ydmxfbWVzaF9kZWZhdWx0cyBkZWZzOwogCXN0cnVjdCBtcnZsX21lc2hpZSAqaWU7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJdWludDMyX3QgZGF0dW07CiAJaW50IHJldDsKIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZyBjbWQ7CiAJc3RydWN0IG1ydmxfbWVzaF9kZWZhdWx0cyBkZWZzOwogCXN0cnVjdCBtcnZsX21lc2hpZSAqaWU7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7CiAJdWludDMyX3QgZGF0dW07CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKaW5kZXggMDc5ZTZhYS4uNGY2MDk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IChFVEhfSExFTiArIDggKyBzaXplb2Yoc3RydWN0IHJ4cGQpKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIGxlbmd0aFxuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldCA9IDA7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNzksNyArMTc5LDcgQEAKIAlpZiAoIShwX3J4X3BkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIHN0YXR1c1xuIik7CiAJCWxic19wcl9hbGVydCgicnhwZCBub3Qgb2tcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0ID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTI0Myw4ICsyNDMsOCBAQAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcF9yeF9wZCk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJaWYgKGluX2ludGVycnVwdCgpKQpAQCAtMzExLDcgKzMxMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0ID0gMDsKLQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CiAJc3RydWN0IHJ4ODAyMTFwYWNrZXRoZHIgKnBfcnhfcGt0OwogCXN0cnVjdCByeHBkICpwcnhwZDsKIAlzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyIHJhZGlvdGFwX2hkcjsKQEAgLTMyNiw3ICszMjYsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgKEVUSF9ITEVOICsgOCArIHNpemVvZihzdHJ1Y3QgcnhwZCkpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgbGVuZ3RoXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZG9uZTsKQEAgLTMzNyw3ICszMzcsNyBAQAogCSAqLwogCWlmICghKHByeHBkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQkvL2xic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgc3RhdHVzXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJfQogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2tiLT5sZW4tc2l6ZW9mKFJ4UGQpID0gJWQtJXpkID0gJXpkXG4iLApAQCAtMzg5LDggKzM4OSw4IEBACiAJbGJzX2NvbXB1dGVfcnNzaShwcml2LCBwcnhwZCk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHByaXYtPnJ0YXBfbmV0X2Rldik7CiAJbmV0aWZfcngoc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwppbmRleCAwMGE1N2VkLi44MTI0ZGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCkBAIC05NDUsNyArOTQ1LDcgQEAKIAkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJaW50IHJldCA9IDA7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKICNkZWZpbmUgU0NBTl9JVEVNX1NJWkUgMTI4Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGVyciA9IDA7CiAJY2hhciAqZXYgPSBleHRyYTsKIAljaGFyICpzdG9wID0gZXYgKyBkd3JxLT5sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwppbmRleCBkYWM0NjI2Li5mMTBhYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKQEAgLTYwLDcgKzYwLDcgQEAKIGludCBsYnNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgdHhwZCAqdHhwZDsKIAljaGFyICpwODAyeF9oZHI7CiAJdWludDE2X3QgcGt0X2xlbjsKQEAgLTgyLDggKzgyLDggQEAKIAkJICAgICAgIHNrYi0+bGVuLCBNUlZEUlZfRVRIX1RYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CiAJCS8qIFdlJ2xsIG5ldmVyIG1hbmFnZSB0byBzZW5kIHRoaXMgb25lOyBkcm9wIGl0IGFuZCByZXR1cm4gJ09LJyAqLwogCi0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlnb3RvIGZyZWU7CiAJfQogCkBAIC0xNDYsOCArMTQ2LDggQEAKIAogCWxic19kZWJfdHgoIiVzIGxpbmVkIHVwIHBhY2tldFxuIiwgX19mdW5jX18pOwogCi0JcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCmluZGV4IGM2MTAyZTAuLjhiYzE5MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIHN0YXRpYyBpbnQgbGJzX2dldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgc3RydWN0IGl3X2ZyZXEgKmZ3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmNmcDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKQEAgLTE4OSw3ICsxODksNyBAQAogc3RhdGljIGludCBsYnNfZ2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IHNvY2thZGRyICphd3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIApAQCAtMjA3LDcgKzIwNyw3IEBACiBzdGF0aWMgaW50IGxic19zZXRfbmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CiAKQEAgLTIzMSw3ICsyMzEsNyBAQAogc3RhdGljIGludCBsYnNfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwogCkBAIC0yNDgsNyArMjQ4LDcgQEAKIHN0YXRpYyBpbnQgbWVzaF9nZXRfbmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CiAKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAl1MzIgdmFsID0gdndycS0+dmFsdWU7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CkBAIC0yOTMsNyArMjkzLDcgQEAKIHN0YXRpYyBpbnQgbGJzX2dldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJaW50IHJldCA9IDA7CiAJdTE2IHZhbCA9IDA7CiAKQEAgLTMxNSw3ICszMTUsNyBAQAogc3RhdGljIGludCBsYnNfc2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCWludCByZXQgPSAwOwogCXUzMiB2YWwgPSB2d3JxLT52YWx1ZTsKIApAQCAtMzM2LDcgKzMzNiw3IEBACiBzdGF0aWMgaW50IGxic19nZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJaW50IHJldCA9IDA7CiAJdTE2IHZhbCA9IDA7CiAKQEAgLTM1OSw3ICszNTksNyBAQAogc3RhdGljIGludCBsYnNfZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1MzIgKiB1d3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIApAQCAtMzg1LDcgKzM4NSw3IEBACiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJczE2IGN1cmxldmVsID0gMDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNDE4LDcgKzQxOCw3IEBACiBzdGF0aWMgaW50IGxic19zZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgc2xpbWl0ID0gMCwgbGxpbWl0ID0gMDsKIApAQCAtNDY2LDcgKzQ2Niw3IEBACiBzdGF0aWMgaW50IGxic19nZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgdmFsID0gMDsKIApAQCAtNTQyLDcgKzU0Miw3IEBACiAJCQkgIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7CiAJaW50IGksIGo7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKIAlzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpjZnA7CiAJdTggcmF0ZXNbTUFYX1JBVEVTICsgMV07CkBAIC03MDgsNyArNzA4LDcgQEAKIHN0YXRpYyBpbnQgbGJzX3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwogCkBAIC03NTgsNyArNzU4LDcgQEAKIHN0YXRpYyBpbnQgbGJzX2dldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwogCkBAIC03ODEsNyArNzgxLDcgQEAKIAkJRVhDRUxMRU5UID0gOTUsCiAJCVBFUkZFQ1QgPSAxMDAKIAl9OwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXUzMiByc3NpX3F1YWw7CiAJdTMyIHR4X3F1YWw7CiAJdTMyIHF1YWxpdHkgPSAwOwpAQCAtODMwLDcgKzgzMCw3IEBACiAJcXVhbGl0eSA9IHJzc2lfcXVhbDsKIAogCS8qIFF1YWxpdHkgYnkgVFggZXJyb3JzICovCi0JcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IHByaXYtPnN0YXRzLnR4X2Vycm9yczsKKwlwcml2LT53c3RhdHMuZGlzY2FyZC5yZXRyaWVzID0gZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAKIAltZW1zZXQoJmxvZywgMCwgc2l6ZW9mKGxvZykpOwogCWxvZy5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihsb2cpKTsKQEAgLTg4Niw3ICs4ODYsNyBAQAogCQkgIHN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpjZnA7CiAJc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXE7CiAKQEAgLTk0Myw3ICs5NDMsNyBAQAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICBzdHJ1Y3QgaXdfZnJlcSAqZndycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqY2ZwOwogCWludCByZXQgPSAtRUlOVkFMOwogCkBAIC05OTQsNyArOTk0LDcgQEAKIHN0YXRpYyBpbnQgbGJzX3NldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCSAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAl1OCBuZXdfcmF0ZSA9IDA7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAJdTggcmF0ZXNbTUFYX1JBVEVTICsgMV07CkBAIC0xMDU0LDcgKzEwNTQsNyBAQAogc3RhdGljIGludCBsYnNfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwogCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHUzMiAqIHV3cnEsIGNoYXIgKmV4dHJhKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIHU4ICogZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CkBAIC0xMzE5LDcgKzEzMTksNyBAQAogCQkgICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGFzc29jX3JlcTsKIAl1MTYgaXNfZGVmYXVsdCA9IDAsIGluZGV4ID0gMCwgc2V0X3R4X2tleSA9IDA7CiAKQEAgLTEzOTUsNyArMTM5NSw3IEBACiAJCQkgICAgICBjaGFyICpleHRyYSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAJaW50IGluZGV4LCBtYXhfa2V5X2xlbjsKIApAQCAtMTUwMSw3ICsxNTAxLDcgQEAKIAkJCSAgICAgIGNoYXIgKmV4dHJhKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKIAlpbnQgYWxnID0gZXh0LT5hbGc7CiAJc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXE7CkBAIC0xNjM5LDcgKzE2MzksNyBAQAogCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCiAJCQkgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCWludCByZXQgPSAwOwogCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxOwogCkBAIC0xNjg1LDcgKzE2ODUsNyBAQAogCQkJICBjaGFyICpleHRyYSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIApAQCAtMTcxMyw3ICsxNzEzLDcgQEAKIAkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmR3cnEsCiAJCQkgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXE7CiAJaW50IHJldCA9IDA7CiAJaW50IHVwZGF0ZWQgPSAwOwpAQCAtMTgxNiw3ICsxODE2LDcgQEAKIAkJCSBjaGFyICpleHRyYSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIApAQCAtMTg1Nyw3ICsxODU3LDcgQEAKIAkJICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlzMTYgZGJtID0gKHMxNikgdndycS0+dmFsdWU7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CkBAIC0xOTM2LDcgKzE5MzYsNyBAQAogc3RhdGljIGludCBsYnNfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCSAgIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CiAKQEAgLTE5NzEsNyArMTk3MSw3IEBACiBzdGF0aWMgaW50IGxic19zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlpbnQgcmV0ID0gMDsKIAl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKIAl1OCBzc2lkX2xlbiA9IDA7CkBAIC0yMDQwLDcgKzIwNDAsNyBAQAogCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CiAKQEAgLTIwNTgsNyArMjA1OCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlpbnQgcmV0ID0gMDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKQEAgLTIxMDIsNyArMjEwMiw3IEBACiBzdGF0aWMgaW50IGxic19zZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCSBzdHJ1Y3Qgc29ja2FkZHIgKmF3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxOwogCWludCByZXQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwppbmRleCBmY2U0OWJhLi4yMzY4YjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKQEAgLTEwLDcgKzEwLDYgQEAKIC8qCiAgKiBUT0RPOgogICogLSBJQlNTIG1vZGUgc2ltdWxhdGlvbiAoQmVhY29uIHRyYW5zbWlzc2lvbiB3aXRoIGNvbXBldGl0aW9uIGZvciAiYWlyIHRpbWUiKQotICogLSBJRUVFIDgwMi4xMWEgYW5kIDgwMi4xMW4gbW9kZXMKICAqIC0gUlggZmlsdGVyaW5nIGJhc2VkIG9uIGZpbHRlciBjb25maWd1cmF0aW9uIChkYXRhLT5yeF9maWx0ZXIpCiAgKi8KIApAQCAtMzEsNiArMzAsMTEyIEBACiBtb2R1bGVfcGFyYW0ocmFkaW9zLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyYWRpb3MsICJOdW1iZXIgb2Ygc2ltdWxhdGVkIHJhZGlvcyIpOwogCisvKioKKyAqIGVudW0gaHdzaW1fcmVndGVzdCAtIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgdGVzdHMgd2Ugb2ZmZXIKKyAqCisgKiBUaGVzZSBhcmUgdGhlIGRpZmZlcmVudCB2YWx1ZXMgeW91IGNhbiB1c2UgZm9yIHRoZSByZWd0ZXN0CisgKiBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGlzIHVzZWZ1bCB0byBoZWxwIHRlc3Qgd29ybGQgcm9hbWluZworICogYW5kIHRoZSBkcml2ZXIgcmVndWxhdG9yeV9oaW50KCkgY2FsbCBhbmQgY29tYmluYXRpb25zIG9mIHRoZXNlLgorICogSWYgeW91IHdhbnQgdG8gZG8gc3BlY2lmaWMgYWxwaGEyIHJlZ3VsYXRvcnkgZG9tYWluIHRlc3RzIHNpbXBseQorICogdXNlIHRoZSB1c2Vyc3BhY2UgcmVndWxhdG9yeSByZXF1ZXN0IGFzIHRoYXQgd2lsbCBiZSByZXNwZWN0ZWQgYXMKKyAqIHdlbGwgd2l0aG91dCB0aGUgbmVlZCBvZiB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIuIFRoaXMgaXMgZGVzaWduZWQKKyAqIG9ubHkgZm9yIHRlc3RpbmcgdGhlIGRyaXZlciByZWd1bGF0b3J5IHJlcXVlc3QsIHdvcmxkIHJvYW1pbmcKKyAqIGFuZCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zLgorICoKKyAqIEBIV1NJTV9SRUdURVNUX0RJU0FCTEVEOiBObyByZWd1bGF0b3J5IHRlc3RzIGFyZSBwZXJmb3JtZWQsCisgKiAJdGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqIEBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBkcml2ZXIgcmVndWxhdG9yeQorICoJaGludCwgb25seSBvbmUgZHJpdmVyIHJlZ3VsYXRvcnkgaGludCB3aWxsIGJlIHNlbnQgYXMgc3VjaCB0aGUKKyAqIAlzZWNvbmRhcnkgcmFkaW9zIGFyZSBleHBlY3RlZCB0byBmb2xsb3cuCisgKiBASFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTDogVXNlZCBmb3IgdGVzdGluZyB0aGUgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqIAlyZXF1ZXN0IHdpdGggYWxsIHJhZGlvcyByZXBvcnRpbmcgdGhlIHNhbWUgcmVndWxhdG9yeSBkb21haW4uCisgKiBASFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGRyaXZlcnMgY2FsbGluZworICogCWRpZmZlcmVudCByZWd1bGF0b3J5IGRvbWFpbnMgcmVxdWVzdHMuIEV4cGVjdGVkIGJlaGF2aW91ciBpcyBmb3IKKyAqIAlhbiBpbnRlcnNlY3Rpb24gdG8gb2NjdXIgYnV0IGVhY2ggZGV2aWNlIHdpbGwgc3RpbGwgdXNlIHRoZWlyCisgKiAJcmVzcGVjdGl2ZSByZWd1bGF0b3J5IHJlcXVlc3RlZCBkb21haW5zLiBTdWJzZXF1ZW50IHJhZGlvcyB3aWxsCisgKiAJdXNlIHRoZSByZXN1bHRpbmcgaW50ZXJzZWN0aW9uLgorICogQEhXU0lNX1JFR1RFU1RfV09STERfUk9BTTogVXNlZCBmb3IgdGVzdGluZyB0aGUgd29ybGQgcm9hbWluZy4gV2UgYWNvbXBsaXNoCisgKgl0aGlzIGJ5IHVzaW5nIGEgY3VzdG9tIGJlYWNvbi1jYXBhYmxlIHJlZ3VsYXRvcnkgZG9tYWluIGZvciB0aGUgZmlyc3QKKyAqCXJhZGlvLiBBbGwgb3RoZXIgZGV2aWNlIHdvcmxkIHJvYW0uCisgKiBASFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQ6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluIHJlcXVlc3RzLiBBbGwgcmFkaW9zIHdpbGwgYWRoZXJlIHRvIHRoaXMgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBASFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMjogVXNlZCBmb3IgdGVzdGluZyAyIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluIHJlcXVlc3RzLiBUaGUgZmlyc3QgcmFkaW8gd2lsbCBhZGhlcmUgdG8gdGhlIGZpcnN0IGN1c3RvbSB3b3JsZAorICogCXJlZ3VsYXRvcnkgZG9tYWluLCB0aGUgc2Vjb25kIG9uZSB0byB0aGUgc2Vjb25kIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluLiBBbGwgb3RoZXIgZGV2aWNlcyB3aWxsIHdvcmxkIHJvYW0uCisgKiBASFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XXzogVXNlZCBmb3IgdGVzdGluZyBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4KKyAqCXNldHRpbmdzLCBvbmx5IHRoZSBmaXJzdCByYWRpbyB3aWxsIHNlbmQgYSByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0CisgKglhbmQgdXNlIHN0cmljdCBzZXR0aW5ncy4gVGhlIHJlc3Qgb2YgdGhlIHJhZGlvcyBhcmUgZXhwZWN0ZWQgdG8gZm9sbG93LgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTDogVXNlZCBmb3IgdGVzdGluZyBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4KKyAqCXNldHRpbmdzLiBBbGwgcmFkaW9zIHdpbGwgYWRoZXJlIHRvIHRoaXMuCisgKiBASFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkKKyAqCWRvbWFpbiBzZXR0aW5ncywgY29tYmluZWQgd2l0aCBzZWNvbmRhcnkgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncy4gVGhlIGZpcnN0IHJhZGlvIHdpbGwgZ2V0IGEgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmcKKyAqCXVzaW5nIHRoZSBmaXJzdCBkcml2ZXIgcmVndWxhdG9yeSByZXF1ZXN0IGFuZCB0aGUgc2Vjb25kIHJhZGlvIHdpbGwgdXNlCisgKglub24tc3RyaWN0IHNldHRpbmdzIHVzaW5nIHRoZSBzZWNvbmQgZHJpdmVyIHJlZ3VsYXRvcnkgcmVxdWVzdC4gQWxsCisgKglvdGhlciBkZXZpY2VzIHNob3VsZCBmb2xsb3cgdGhlIGludGVyc2VjdGlvbiBjcmVhdGVkIGJldHdlZW4gdGhlCisgKglmaXJzdCB0d28uCisgKiBASFdTSU1fUkVHVEVTVF9BTEw6IFVzZWQgZm9yIHRlc3RpbmcgZXZlcnkgcG9zc2libGUgbWl4LiBZb3Ugd2lsbCBuZWVkCisgKiAJYXQgbGVhc3QgNiByYWRpb3MgZm9yIGEgY29tcGxldGUgdGVzdC4gV2Ugd2lsbCB0ZXN0IGluIHRoaXMgb3JkZXI6CisgKiAJMSAtIGRyaXZlciBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4KKyAqIAkyIC0gc2Vjb25kIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbgorICogCTMgLSBmaXJzdCBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdAorICogCTQgLSBzZWNvbmQgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3QKKyAqIAk1IC0gc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHVzaW5nIHRoZSB0aGlyZCBkcml2ZXIgcmVndWxhdG9yeQorICogCSAgICBkb21haW4gcmVxdWVzdAorICogCTYgYW5kIG9uIC0gc2hvdWxkIGZvbGxvdyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSAzcmQsIDRydGggYW5kIDV0aCByYWRpbworICogCSAgICAgICAgICAgcmVndWxhdG9yeSByZXF1ZXN0cy4KKyAqLworZW51bSBod3NpbV9yZWd0ZXN0IHsKKwlIV1NJTV9SRUdURVNUX0RJU0FCTEVEID0gMCwKKwlIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XID0gMSwKKwlIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMID0gMiwKKwlIV1NJTV9SRUdURVNUX0RJRkZfQ09VTlRSWSA9IDMsCisJSFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNID0gNCwKKwlIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRCA9IDUsCisJSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMiA9IDYsCisJSFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XID0gNywKKwlIV1NJTV9SRUdURVNUX1NUUklDVF9BTEwgPSA4LAorCUhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHID0gOSwKKwlIV1NJTV9SRUdURVNUX0FMTCA9IDEwLAorfTsKKworLyogU2V0IHRvIG9uZSBvZiB0aGUgSFdTSU1fUkVHVEVTVF8qIHZhbHVlcyBhYm92ZSAqLworc3RhdGljIGludCByZWd0ZXN0ID0gSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDsKK21vZHVsZV9wYXJhbShyZWd0ZXN0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZWd0ZXN0LCAiVGhlIHR5cGUgb2YgcmVndWxhdG9yeSB0ZXN0IHdlIHdhbnQgdG8gcnVuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpod3NpbV9hbHBoYTJzW10gPSB7CisJIkZJIiwKKwkiQUwiLAorCSJVUyIsCisJIkRFIiwKKwkiSlAiLAorCSJBTCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSA9IHsKKwkubl9yZWdfcnVsZXMgPSA0LAorCS5hbHBoYTIgPSAgIjk5IiwKKwkucmVnX3J1bGVzID0geworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSg1MTUwLTEwLCA1MjQwKzEwLCA0MCwgMCwgMzAsIDApLAorCQlSRUdfUlVMRSg1NzQ1LTEwLCA1ODI1KzEwLCA0MCwgMCwgMzAsIDApLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAyID0geworCS5uX3JlZ19ydWxlcyA9IDIsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCAwLCAyMCwgMCksCisJCVJFR19SVUxFKDU3MjUtMTAsIDU4NTArMTAsIDQwLCAwLCAzMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IE5MODAyMTFfUlJGX05PX0lCU1MpLAorCX0KK307CisKIHN0cnVjdCBod3NpbV92aWZfcHJpdiB7CiAJdTMyIG1hZ2ljOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKQEAgLTg2LDIyICsxOTEsNjUgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpod3NpbV9tb247IC8qIGdsb2JhbCBtb25pdG9yIG5ldGRldiAqLwogCisjZGVmaW5lIENIQU4yRyhfZnJlcSkgIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2ZyZXEpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgaHdzaW1fY2hhbm5lbHNbXSA9IHsKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NzIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0ODQgfSwKKyNkZWZpbmUgQ0hBTjVHKF9mcmVxKSB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9mcmVxKSwgXAorCS5tYXhfcG93ZXIgPSAyMCwgXAorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzXzJnaHpbXSA9IHsKKwlDSEFOMkcoMjQxMiksIC8qIENoYW5uZWwgMSAqLworCUNIQU4yRygyNDE3KSwgLyogQ2hhbm5lbCAyICovCisJQ0hBTjJHKDI0MjIpLCAvKiBDaGFubmVsIDMgKi8KKwlDSEFOMkcoMjQyNyksIC8qIENoYW5uZWwgNCAqLworCUNIQU4yRygyNDMyKSwgLyogQ2hhbm5lbCA1ICovCisJQ0hBTjJHKDI0MzcpLCAvKiBDaGFubmVsIDYgKi8KKwlDSEFOMkcoMjQ0MiksIC8qIENoYW5uZWwgNyAqLworCUNIQU4yRygyNDQ3KSwgLyogQ2hhbm5lbCA4ICovCisJQ0hBTjJHKDI0NTIpLCAvKiBDaGFubmVsIDkgKi8KKwlDSEFOMkcoMjQ1NyksIC8qIENoYW5uZWwgMTAgKi8KKwlDSEFOMkcoMjQ2MiksIC8qIENoYW5uZWwgMTEgKi8KKwlDSEFOMkcoMjQ2NyksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiksIC8qIENoYW5uZWwgMTMgKi8KKwlDSEFOMkcoMjQ4NCksIC8qIENoYW5uZWwgMTQgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgaHdzaW1fY2hhbm5lbHNfNWdoeltdID0geworCUNIQU41Ryg1MTgwKSwgLyogQ2hhbm5lbCAzNiAqLworCUNIQU41Ryg1MjAwKSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwKSwgLyogQ2hhbm5lbCA0NCAqLworCUNIQU41Ryg1MjQwKSwgLyogQ2hhbm5lbCA0OCAqLworCisJQ0hBTjVHKDUyNjApLCAvKiBDaGFubmVsIDUyICovCisJQ0hBTjVHKDUyODApLCAvKiBDaGFubmVsIDU2ICovCisJQ0hBTjVHKDUzMDApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjApLCAvKiBDaGFubmVsIDY0ICovCisKKwlDSEFONUcoNTUwMCksIC8qIENoYW5uZWwgMTAwICovCisJQ0hBTjVHKDU1MjApLCAvKiBDaGFubmVsIDEwNCAqLworCUNIQU41Ryg1NTQwKSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCksIC8qIENoYW5uZWwgMTEyICovCisJQ0hBTjVHKDU1ODApLCAvKiBDaGFubmVsIDExNiAqLworCUNIQU41Ryg1NjAwKSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCksIC8qIENoYW5uZWwgMTI0ICovCisJQ0hBTjVHKDU2NDApLCAvKiBDaGFubmVsIDEyOCAqLworCUNIQU41Ryg1NjYwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCksIC8qIENoYW5uZWwgMTM2ICovCisJQ0hBTjVHKDU3MDApLCAvKiBDaGFubmVsIDE0MCAqLworCisJQ0hBTjVHKDU3NDUpLCAvKiBDaGFubmVsIDE0OSAqLworCUNIQU41Ryg1NzY1KSwgLyogQ2hhbm5lbCAxNTMgKi8KKwlDSEFONUcoNTc4NSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUpLCAvKiBDaGFubmVsIDE2MSAqLworCUNIQU41Ryg1ODI1KSwgLyogQ2hhbm5lbCAxNjUgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgaHdzaW1fcmF0ZXNbXSA9IHsKQEAgLTEyNiw4ICsyNzQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKV07CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kc1syXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfMmdoeltBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzJnaHopXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfNWdoeltBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzVnaHopXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbQVJSQVlfU0laRShod3NpbV9yYXRlcyldOwogCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwpAQCAtNTkwLDEwICs3MzksMTYgQEAKIAkubmFtZSA9ICJtYWM4MDIxMV9od3NpbSIKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHdzaW1fbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgCT0gaHdzaW1fbW9uX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIHN0YXRpYyB2b2lkIGh3c2ltX21vbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaHdzaW1fbW9uX3htaXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmh3c2ltX25ldGRldl9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CiAJZXRoZXJfc2V0dXAoZGV2KTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CkBAIC03MjgsNiArODgzLDcgQEAKIAl1OCBhZGRyW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKIAlpZiAocmFkaW9zIDwgMSB8fCByYWRpb3MgPiAxMDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzg1LDI1ICs5NDEsMTA1IEBACiAJCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV92aWZfcHJpdik7CiAJCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV9zdGFfcHJpdik7CiAKLQkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzLCBod3NpbV9jaGFubmVscywgc2l6ZW9mKGh3c2ltX2NoYW5uZWxzKSk7CisJCW1lbWNweShkYXRhLT5jaGFubmVsc18yZ2h6LCBod3NpbV9jaGFubmVsc18yZ2h6LAorCQkJc2l6ZW9mKGh3c2ltX2NoYW5uZWxzXzJnaHopKTsKKwkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzXzVnaHosIGh3c2ltX2NoYW5uZWxzXzVnaHosCisJCQlzaXplb2YoaHdzaW1fY2hhbm5lbHNfNWdoeikpOwogCQltZW1jcHkoZGF0YS0+cmF0ZXMsIGh3c2ltX3JhdGVzLCBzaXplb2YoaHdzaW1fcmF0ZXMpKTsKLQkJZGF0YS0+YmFuZC5jaGFubmVscyA9IGRhdGEtPmNoYW5uZWxzOwotCQlkYXRhLT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKTsKLQkJZGF0YS0+YmFuZC5iaXRyYXRlcyA9IGRhdGEtPnJhdGVzOwotCQlkYXRhLT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7Ci0JCW1lbXNldCgmZGF0YS0+YmFuZC5odF9jYXAubWNzLCAwLAotCQkgICAgICAgc2l6ZW9mKGRhdGEtPmJhbmQuaHRfY2FwLm1jcykpOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKLQkJZGF0YS0+YmFuZC5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKLQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZkYXRhLT5iYW5kOworCisJCWZvciAoYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gJmRhdGEtPmJhbmRzW2JhbmRdOworCQkJc3dpdGNoIChiYW5kKSB7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfMmdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfMmdoeik7CisJCQkJYnJlYWs7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfNWdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfNWdoeik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCisJCQlzYmFuZC0+Yml0cmF0ZXMgPSBkYXRhLT5yYXRlczsKKwkJCXNiYW5kLT5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShod3NpbV9yYXRlcyk7CisKKwkJCXNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJCXNiYW5kLT5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOworCQkJc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7CisJCQlzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7CisJCQltZW1zZXQoJnNiYW5kLT5odF9jYXAubWNzLCAwLAorCQkJICAgICAgIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOworCQkJc2JhbmQtPmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCQlzYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKwkJCXNiYW5kLT5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKworCQkJaHctPndpcGh5LT5iYW5kc1tiYW5kXSA9IHNiYW5kOworCQl9CisKKwkJLyogV29yayB0byBiZSBkb25lIHByaW9yIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpICovCisJCXN3aXRjaCAocmVndGVzdCkgeworCQljYXNlIEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOgorCQkJLyoKKwkJCSAqIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisJCQkgKiBoaW50cyBwcmlvciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKQorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDoKKwkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMOgorCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1c6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6CisJCQlpZiAoaSA9PSAwKQorCQkJCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9BTEw6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfSBlbHNlIGlmIChpID09IDQpCisJCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAKIAkJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAkJaWYgKGVyciA8IDApIHsKQEAgLTgxMiw2ICsxMDQ4LDUyIEBACiAJCQlnb3RvIGZhaWxlZF9odzsKIAkJfQogCisJCS8qIFdvcmsgdG8gYmUgZG9uZSBhZnRlciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKSAqLworCQlzd2l0Y2ggKHJlZ3Rlc3QpIHsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDoKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19GT0xMT1c6CisJCQlpZiAoIWkpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTDoKKwkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6CisJCQlpZiAoaSA8IEFSUkFZX1NJWkUoaHdzaW1fYWxwaGEycykpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1tpXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRF8yOgorCQkJLyoKKwkJCSAqIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKwkJCSAqIGRvbWFpbnMgYWZ0ZXIgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3CisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVzoKKwkJCWlmIChpID09IDApCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRzoKKwkJCWlmIChpID09IDApCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQllbHNlIGlmIChpID09IDEpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1sxXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0FMTDoKKwkJCWlmIChpID09IDIpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQllbHNlIGlmIChpID09IDMpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1sxXSk7CisJCQllbHNlIGlmIChpID09IDQpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1syXSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBod2FkZHIgJXBNIHJlZ2lzdGVyZWRcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksCiAJCSAgICAgICBody0+d2lwaHktPnBlcm1fYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2EwMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtMCwwICsxLDM3ODkgQEAKKy8qCisgKiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGRyaXZlciBmb3IgTWFydmVsbCBUT1BET0cgODAyLjExIFdpcmVsZXNzIGNhcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2RlZmluZSBNV0w4S19ERVNDCSJNYXJ2ZWxsIFRPUERPRyhSKSA4MDIuMTEgV2lyZWxlc3MgTmV0d29yayBEcml2ZXIiCisjZGVmaW5lIE1XTDhLX05BTUUJS0JVSUxEX01PRE5BTUUKKyNkZWZpbmUgTVdMOEtfVkVSU0lPTgkiMC45LjEiCisKK01PRFVMRV9ERVNDUklQVElPTihNV0w4S19ERVNDKTsKK01PRFVMRV9WRVJTSU9OKE1XTDhLX1ZFUlNJT04pOworTU9EVUxFX0FVVEhPUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShtd2w4a190YWJsZSkgPSB7CisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhMmIpLCAuZHJpdmVyX2RhdGEgPSA4Njg3LCB9LAorCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTMwKSwgLmRyaXZlcl9kYXRhID0gODY4NywgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbXdsOGtfdGFibGUpOworCisjZGVmaW5lIElFRUU4MDIxMV9BRERSX0xFTgkJCUVUSF9BTEVOCisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1XTDhLX0hJVV9HRU5fUFRSCQkJMHgwMDAwMGMxMAorI2RlZmluZSAgTVdMOEtfTU9ERV9TVEEJCQkJMHgwMDAwMDA1YQorI2RlZmluZSAgTVdMOEtfTU9ERV9BUAkJCQkweDAwMDAwMGE1CisjZGVmaW5lIE1XTDhLX0hJVV9JTlRfQ09ERQkJCTB4MDAwMDBjMTQKKyNkZWZpbmUgIE1XTDhLX0ZXU1RBX1JFQURZCQkJMHhmMGYxZjJmNAorI2RlZmluZSAgTVdMOEtfRldBUF9SRUFEWQkJCTB4ZjFmMmY0YTUKKyNkZWZpbmUgIE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRAkJMHgwMDAwMDAwNQorI2RlZmluZSBNV0w4S19ISVVfU0NSQVRDSAkJCTB4MDAwMDBjNDAKKworLyogSG9zdC0+ZGV2aWNlIGNvbW11bmljYXRpb25zICovCisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUwkJMHgwMDAwMGMxOAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDAwMDBjMWMKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfTUFTSwkJMHgwMDAwMGMyMAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9DTEVBUl9TRUwJMHgwMDAwMGMyNAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9TVEFUVVNfTUFTSwkweDAwMDAwYzI4CisjZGVmaW5lICBNV0w4S19IMkFfSU5UX0RVTU1ZCQkJKDEgPDwgMjApCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1JFU0VUCQkJKDEgPDwgMTUpCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1BTCQkJKDEgPDwgMikKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwJCQkoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9QUEFfUkVBRFkJCSgxIDw8IDApCisKKy8qIERldmljZS0+aG9zdCBjb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9FVkVOVFMJCTB4MDAwMDBjMmMKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTCQkweDAwMDAwYzMwCisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0sJCTB4MDAwMDBjMzQKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMCTB4MDAwMDBjMzgKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0sJMHgwMDAwMGMzYworI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9EVU1NWQkJCSgxIDw8IDIwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVECQkoMSA8PCAxMSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkJCSgxIDw8IDEwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURBUl9ERVRFQ1QJCSgxIDw8IDcpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBRElPX09OCQkJKDEgPDwgNikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT0ZGCQkoMSA8PCA1KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQJCSgxIDw8IDMpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX09QQ19ET05FCQkJKDEgPDwgMikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkJCQkoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9UWF9ET05FCQkJKDEgPDwgMCkKKworI2RlZmluZSBNV0w4S19BMkhfRVZFTlRTCShNV0w4S19BMkhfSU5UX0RVTU1ZIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUkFEQVJfREVURUNUIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBRElPX09OIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBRElPX09GRiB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfVFhfRE9ORSkKKworLyogV01FIHN0cmVhbSBjbGFzc2VzICovCisjZGVmaW5lIFdNRV9BQ19CRQkwCQkvKiBiZXN0IGVmZm9ydCAqLworI2RlZmluZSBXTUVfQUNfQksJMQkJLyogYmFja2dyb3VuZCAqLworI2RlZmluZSBXTUVfQUNfVkkJMgkJLyogdmlkZW8gKi8KKyNkZWZpbmUgV01FX0FDX1ZPCTMJCS8qIHZvaWNlICovCisKKyNkZWZpbmUgTVdMOEtfUlhfUVVFVUVTCQkxCisjZGVmaW5lIE1XTDhLX1RYX1FVRVVFUwkJNAorCitzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgeworCWludCByeF9kZXNjX2NvdW50OworCisJLyogaHcgcmVjZWl2ZXMgaGVyZSAqLworCWludCByeF9oZWFkOworCisJLyogcmVmaWxsIGRlc2NzIGhlcmUgKi8KKwlpbnQgcnhfdGFpbDsKKworCXN0cnVjdCBtd2w4a19yeF9kZXNjICpyeF9kZXNjX2FyZWE7CisJZG1hX2FkZHJfdCByeF9kZXNjX2RtYTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKK307CisKK3N0cnVjdCBtd2w4a19za2IgeworCS8qCisJICogVGhlIERNQSBlbmdpbmUgcmVxdWlyZXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIHBheWxvYWQuCisJICogSWYgdGhlIHNrYnVmZiBpcyBzaGFyZWQvY2xvbmVkLCBpdCBuZWVkcyB0byBiZSB1bnNoYXJlZC4KKwkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgc3RhY2sgYWx3YXlzIGdldHMgYmFjaworCSAqIHRoZSBza2J1ZmYgaXQgc2VudCBmb3IgdHJhbnNtaXNzaW9uLgorCSAqLworCXN0cnVjdCBza19idWZmICpjbG9uZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfTsKKworc3RydWN0IG13bDhrX3R4X3F1ZXVlIHsKKwkvKiBodyB0cmFuc21pdHMgaGVyZSAqLworCWludCB0eF9oZWFkOworCisJLyogc3cgYXBwZW5kcyBoZXJlICovCisJaW50IHR4X3RhaWw7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjX2FyZWE7CisJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKKwlzdHJ1Y3QgbXdsOGtfc2tiICp0eF9za2I7Cit9OworCisvKiBQb2ludGVycyB0byB0aGUgZmlybXdhcmUgZGF0YSBhbmQgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCBpdC4gICovCitzdHJ1Y3QgbXdsOGtfZmlybXdhcmUgeworCS8qIE1pY3JvY29kZSAqLworCXN0cnVjdCBmaXJtd2FyZSAqdWNvZGU7CisKKwkvKiBCb290IGhlbHBlciBjb2RlICovCisJc3RydWN0IGZpcm13YXJlICpoZWxwZXI7Cit9OworCitzdHJ1Y3QgbXdsOGtfcHJpdiB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdTggbmFtZVsxNl07CisJLyogZmlybXdhcmUgYWNjZXNzIGxvY2sgKi8KKwlzcGlubG9ja190IGZ3X2xvY2s7CisKKwkvKiBmaXJtd2FyZSBmaWxlcyBhbmQgbWV0YSBkYXRhICovCisJc3RydWN0IG13bDhrX2Zpcm13YXJlIGZ3OworCXUzMiBwYXJ0X251bTsKKworCS8qIGxvY2sgaGVsZCBvdmVyIFRYIGFuZCBUWCByZWFwICovCisJc3BpbmxvY2tfdCB0eF9sb2NrOworCXUzMiBpbnRfbWFzazsKKworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJc3RydWN0IGxpc3RfaGVhZCB2aWZfbGlzdDsKKworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VycmVudF9jaGFubmVsOworCisJLyogcG93ZXIgbWFuYWdlbWVudCBzdGF0dXMgY29va2llIGZyb20gZmlybXdhcmUgKi8KKwl1MzIgKmNvb2tpZTsKKwlkbWFfYWRkcl90IGNvb2tpZV9kbWE7CisKKwl1MTYgbnVtX21jYWRkcnM7CisJdTE2IHJlZ2lvbl9jb2RlOworCXU4IGh3X3JldjsKKwlfX2xlMzIgZndfcmV2OworCXUzMiB3ZXBfZW5hYmxlZDsKKworCS8qCisJICogUnVubmluZyBjb3VudCBvZiBUWCBwYWNrZXRzIGluIGZsaWdodCwgdG8gYXZvaWQKKwkgKiBpdGVyYXRpbmcgb3ZlciB0aGUgdHJhbnNtaXQgcmluZ3MgZWFjaCB0aW1lLgorCSAqLworCWludCBwZW5kaW5nX3R4X3BrdHM7CisKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgcnhxW01XTDhLX1JYX1FVRVVFU107CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlIHR4cVtNV0w4S19UWF9RVUVVRVNdOworCisJLyogUEhZIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbMTJdOworCisJLyogUkYgcHJlYW1ibGU6IFNob3J0LCBMb25nIG9yIEF1dG8gKi8KKwl1OAlyYWRpb19wcmVhbWJsZTsKKwl1OAlyYWRpb19zdGF0ZTsKKworCS8qIFdNTSBNT0RFIDEgZm9yIGVuYWJsZWQ7IDAgZm9yIGRpc2FibGVkICovCisJYm9vbCB3bW1fbW9kZTsKKworCS8qIFNldCBpZiBQSFkgY29uZmlnIGlzIGluIHByb2dyZXNzICovCisJYm9vbCBpbmNvbmZpZzsKKworCS8qIFhYWCBuZWVkIHRvIGNvbnZlcnQgdGhpcyB0byBoYW5kbGUgbXVsdGlwbGUgaW50ZXJmYWNlcyAqLworCWJvb2wgY2FwdHVyZV9iZWFjb247CisJdTggY2FwdHVyZV9ic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCXN0cnVjdCBza19idWZmICpiZWFjb25fc2tiOworCisJLyoKKwkgKiBUaGlzIEZKIHdvcmtlciBoYXMgdG8gYmUgZ2xvYmFsIGFzIGl0IGlzIHNjaGVkdWxlZCBmcm9tIHRoZQorCSAqIFJYIGhhbmRsZXIuICBBdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgd2hpY2ggaW50ZXJmYWNlIGl0CisJICogYmVsb25ncyB0byB1bnRpbCB0aGUgbGlzdCBvZiBic3NpZHMgd2FpdGluZyB0byBjb21wbGV0ZSBqb2luCisJICogaXMgY2hlY2tlZC4KKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluYWxpemVfam9pbl93b3JrZXI7CisKKwkvKiBUYXNrbGV0IHRvIHJlY2xhaW0gVFggZGVzY3JpcHRvcnMgYW5kIGJ1ZmZlcnMgYWZ0ZXIgdHggKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcmVjbGFpbV90YXNrOworCisJLyogV29yayB0aHJlYWQgdG8gc2VyaWFsaXplIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY29uZmlnX3dxOworCXN0cnVjdCBjb21wbGV0aW9uICpob3N0Y21kX3dhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gKnR4X3dhaXQ7Cit9OworCisvKiBQZXIgaW50ZXJmYWNlIHNwZWNpZmljIHByaXZhdGUgZGF0YSAqLworc3RydWN0IG13bDhrX3ZpZiB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCisJLyogYmFja3BvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCisJLyogQlNTIGNvbmZpZyBvZiBBUCBvciBJQlNTIGZyb20gbWFjODAyMTEqLworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgYnNzX2luZm87CisKKwkvKiBCU1NJRCBvZiBBUCBvciBJQlNTICovCisJdTgJYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwl1OAltYWNfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCisJLyoKKwkgKiBTdWJzZXQgb2Ygc3VwcG9ydGVkIGxlZ2FjeSByYXRlcy4KKwkgKiBJbnRlcnNlY3Rpb24gb2YgQVAgYW5kIFNUQSBzdXBwb3J0ZWQgcmF0ZXMuCisJICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlIGxlZ2FjeV9yYXRlc1sxMl07CisKKwkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIGxlZ2FjeSByYXRlcyAqLworCXU4CWxlZ2FjeV9ucmF0ZXM7CisKKwkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIE1DUyByYXRlcy4gV29yayBpbiBwcm9ncmVzcyAqLworCXU4CW1jc19ucmF0ZXM7CisKKwkgLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLlJldHVybmVkIGJ5IHVwZGF0ZV9zdGFfZGIgY2FsbCAqLworCXU4CXBlZXJfaWQ7CisKKwkvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlciAqLworCXUxNglzZXFubzsKKworCS8qIE5vdGU6VGhlcmUgaXMgbm8gY2hhbm5lbCBpbmZvLAorCSAqIHJlZmVyIHRvIHRoZSBtYXN0ZXIgY2hhbm5lbCBpbmZvIGluIHByaXYKKwkgKi8KK307CisKKyNkZWZpbmUgTVdMOEtfVklGKF92aWYpIChzdHJ1Y3QgbXdsOGtfdmlmICopKCYoKF92aWYpLT5kcnZfcHJpdikpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgbXdsOGtfY2hhbm5lbHNbXSA9IHsKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMywgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzNywgLmh3X3ZhbHVlID0gNiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13bDhrX3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gNCwgfSwKKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LAorCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMTIsIH0sCisJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAxOCwgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAyMiwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAyNCwgfSwKKwl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAzNiwgfSwKKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA0OCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSA5NiwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMDgsIH0sCit9OworCisvKiBSYWRpbyBzZXR0aW5ncyAqLworI2RlZmluZSBNV0w4S19SQURJT19GT1JDRQkJMHgyCisjZGVmaW5lIE1XTDhLX1JBRElPX0VOQUJMRQkJMHgxCisjZGVmaW5lIE1XTDhLX1JBRElPX0RJU0FCTEUJCTB4MAorI2RlZmluZSBNV0w4S19SQURJT19BVVRPX1BSRUFNQkxFCTB4MDAwNQorI2RlZmluZSBNV0w4S19SQURJT19TSE9SVF9QUkVBTUJMRQkweDAwMDMKKyNkZWZpbmUgTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRQkweDAwMDEKKworLyogV01NICovCisjZGVmaW5lIE1XTDhLX1dNTV9FTkFCTEUJCTEKKyNkZWZpbmUgTVdMOEtfV01NX0RJU0FCTEUJCTAKKworI2RlZmluZSBNV0w4S19SQURJT19ERUZBVUxUX1BSRUFNQkxFCU1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUKKworLyogU2xvdCB0aW1lICovCisKKy8qIFNob3J0IFNsb3Q6IDl1cyBzbG90IHRpbWUgKi8KKyNkZWZpbmUgTVdMOEtfU0hPUlRfU0xPVFRJTUUJCTEKKworLyogTG9uZyBzbG90OiAyMHVzIHNsb3QgdGltZSAqLworI2RlZmluZSBNV0w4S19MT05HX1NMT1RUSU1FCQkwCisKKy8qIFNldCBvciBnZXQgaW5mbyBmcm9tIEZpcm13YXJlICovCisjZGVmaW5lIE1XTDhLX0NNRF9TRVQJCQkweDAwMDEKKyNkZWZpbmUgTVdMOEtfQ01EX0dFVAkJCTB4MDAwMAorCisvKiBGaXJtd2FyZSBjb21tYW5kIGNvZGVzICovCisjZGVmaW5lIE1XTDhLX0NNRF9DT0RFX0ROTEQJCTB4MDAwMQorI2RlZmluZSBNV0w4S19DTURfR0VUX0hXX1NQRUMJCTB4MDAwMworI2RlZmluZSBNV0w4S19DTURfTUFDX01VTFRJQ0FTVF9BRFIJMHgwMDEwCisjZGVmaW5lIE1XTDhLX0NNRF9HRVRfU1RBVAkJMHgwMDE0CisjZGVmaW5lIE1XTDhLX0NNRF9SQURJT19DT05UUk9MCQkweDAwMUMKKyNkZWZpbmUgTVdMOEtfQ01EX1JGX1RYX1BPV0VSCQkweDAwMUUKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9QUkVfU0NBTgkJMHgwMTA3CisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOCQkweDAxMDgKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMCTB4MDEwQQorI2RlZmluZSBNV0w4S19DTURfU0VUX1NMT1QJCTB4MDExNAorI2RlZmluZSBNV0w4S19DTURfTUlNT19DT05GSUcJCTB4MDEyNQorI2RlZmluZSBNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIJMHgwMTUwCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfV01NX01PREUJCTB4MDEyMworI2RlZmluZSBNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TCTB4MDExNQorI2RlZmluZSBNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4JMHgwMTExCisjZGVmaW5lIE1XTDhLX0NNRF9VUERBVEVfU1RBREIJCTB4MTEyMworI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFCTB4MDIwMworI2RlZmluZSBNV0w4S19DTURfU0VUX0xJTktBREFQVF9NT0RFCTB4MDEyOQorI2RlZmluZSBNV0w4S19DTURfU0VUX0FJRAkJMHgwMTBkCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkFURQkJMHgwMTEwCisjZGVmaW5lIE1XTDhLX0NNRF9VU0VfRklYRURfUkFURQkweDAxMjYKKyNkZWZpbmUgTVdMOEtfQ01EX1JUU19USFJFU0hPTEQJCTB4MDExMworI2RlZmluZSBNV0w4S19DTURfRU5DUllQVElPTgkJMHgxMTIyCisKK3N0YXRpYyBjb25zdCBjaGFyICptd2w4a19jbWRfbmFtZSh1MTYgY21kLCBjaGFyICpidWYsIGludCBidWZzaXplKQoreworI2RlZmluZSBNV0w4S19DTUROQU1FKHgpCWNhc2UgTVdMOEtfQ01EXyMjeDogZG8ge1wKKwkJCQkJc25wcmludGYoYnVmLCBidWZzaXplLCAiJXMiLCAjeCk7XAorCQkJCQlyZXR1cm4gYnVmO1wKKwkJCQkJfSB3aGlsZSAoMCkKKwlzd2l0Y2ggKGNtZCAmICh+MHg4MDAwKSkgeworCQlNV0w4S19DTUROQU1FKENPREVfRE5MRCk7CisJCU1XTDhLX0NNRE5BTUUoR0VUX0hXX1NQRUMpOworCQlNV0w4S19DTUROQU1FKE1BQ19NVUxUSUNBU1RfQURSKTsKKwkJTVdMOEtfQ01ETkFNRShHRVRfU1RBVCk7CisJCU1XTDhLX0NNRE5BTUUoUkFESU9fQ09OVFJPTCk7CisJCU1XTDhLX0NNRE5BTUUoUkZfVFhfUE9XRVIpOworCQlNV0w4S19DTUROQU1FKFNFVF9QUkVfU0NBTik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1BPU1RfU0NBTik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JGX0NIQU5ORUwpOworCQlNV0w4S19DTUROQU1FKFNFVF9TTE9UKTsKKwkJTVdMOEtfQ01ETkFNRShNSU1PX0NPTkZJRyk7CisJCU1XTDhLX0NNRE5BTUUoRU5BQkxFX1NOSUZGRVIpOworCQlNV0w4S19DTUROQU1FKFNFVF9XTU1fTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0VEQ0FfUEFSQU1TKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfRklOQUxJWkVfSk9JTik7CisJCU1XTDhLX0NNRE5BTUUoVVBEQVRFX1NUQURCKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUkFURUFEQVBUX01PREUpOworCQlNV0w4S19DTUROQU1FKFNFVF9MSU5LQURBUFRfTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0FJRCk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEUpOworCQlNV0w4S19DTUROQU1FKFVTRV9GSVhFRF9SQVRFKTsKKwkJTVdMOEtfQ01ETkFNRShSVFNfVEhSRVNIT0xEKTsKKwkJTVdMOEtfQ01ETkFNRShFTkNSWVBUSU9OKTsKKwlkZWZhdWx0OgorCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIweCV4IiwgY21kKTsKKwl9CisjdW5kZWYgTVdMOEtfQ01ETkFNRQorCisJcmV0dXJuIGJ1ZjsKK30KKworLyogSGFyZHdhcmUgYW5kIGZpcm13YXJlIHJlc2V0ICovCitzdGF0aWMgdm9pZCBtd2w4a19od19yZXNldChzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9SRVNFVCwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUkVTRVQsCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCW1zbGVlcCgyMCk7Cit9CisKKy8qIFJlbGVhc2UgZncgaW1hZ2UgKi8KK3N0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZncoc3RydWN0IGZpcm13YXJlICoqZncpCit7CisJaWYgKCpmdyA9PSBOVUxMKQorCQlyZXR1cm47CisJcmVsZWFzZV9maXJtd2FyZSgqZncpOworCSpmdyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncudWNvZGUpOworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LmhlbHBlcik7Cit9CisKKy8qIFJlcXVlc3QgZncgaW1hZ2UgKi8KK3N0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9mdyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IGZpcm13YXJlICoqZncpCit7CisJLyogcmVsZWFzZSBjdXJyZW50IGltYWdlICovCisJaWYgKCpmdyAhPSBOVUxMKQorCQltd2w4a19yZWxlYXNlX2Z3KGZ3KTsKKworCXJldHVybiByZXF1ZXN0X2Zpcm13YXJlKChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiopZncsCisJCQkJCQlmbmFtZSwgJnByaXYtPnBkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwgdTMyIHBhcnRfbnVtKQoreworCXU4IGZpbGVuYW1lWzY0XTsKKwlpbnQgcmM7CisKKwlwcml2LT5wYXJ0X251bSA9IHBhcnRfbnVtOworCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksCisJCSAibXdsOGsvaGVscGVyXyV1LmZ3IiwgcHJpdi0+cGFydF9udW0pOworCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZpbGVuYW1lLCAmcHJpdi0+ZncuaGVscGVyKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMgRXJyb3IgcmVxdWVzdGluZyBoZWxwZXIgZmlybXdhcmUgZmlsZSAlc1xuIiwKKwkJCXBjaV9uYW1lKHByaXYtPnBkZXYpLCBmaWxlbmFtZSk7CisJCXJldHVybiByYzsKKwl9CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwKKwkJICJtd2w4ay9mbWltYWdlXyV1LmZ3IiwgcHJpdi0+cGFydF9udW0pOworCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZpbGVuYW1lLCAmcHJpdi0+ZncudWNvZGUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIEVycm9yIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwKKwkJCQkJcGNpX25hbWUocHJpdi0+cGRldiksIGZpbGVuYW1lKTsKKwkJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncuaGVscGVyKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXdsOGtfY21kX3BrdCB7CisJX19sZTE2CWNvZGU7CisJX19sZTE2CWxlbmd0aDsKKwlfX2xlMTYJc2VxX251bTsKKwlfX2xlMTYJcmVzdWx0OworCWNoYXIJcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBGaXJtd2FyZSBsb2FkaW5nLgorICovCitzdGF0aWMgaW50Cittd2w4a19zZW5kX2Z3X2xvYWRfY21kKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHByaXYtPnJlZ3M7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgcmM7CisJaW50IGxvb3BzOworCisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBkYXRhLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hX2FkZHIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlvd3JpdGUzMihkbWFfYWRkciwgcmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKKwlpb3dyaXRlMzIoMCwgcmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwsCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKworCXJjID0gLUVUSU1FRE9VVDsKKwlsb29wcyA9IDEwMDA7CisJZG8geworCQl1MzIgaW50X2NvZGU7CisKKwkJaW50X2NvZGUgPSBpb3JlYWQzMihyZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKKwkJaWYgKGludF9jb2RlID09IE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRCkgeworCQkJaW93cml0ZTMyKDAsIHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJLyoKKwkgKiBDbGVhciAnY29tbWFuZCBkb25lJyBpbnRlcnJ1cHQgYml0LgorCSAqLworCWxvb3BzID0gMTAwMDsKKwlkbyB7CisJCXUzMiBzdGF0dXM7CisKKwkJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArCisJCQkJTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUpIHsKKwkJCWlvd3JpdGUzMih+TVdMOEtfQTJIX0lOVF9PUENfRE9ORSwKKwkJCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJCWlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCQkJYnJlYWs7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfbG9hZF9md19pbWFnZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCAqY21kOworCWludCBkb25lOworCWludCByYyA9IDA7CisKKwljbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSArIDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+Y29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9DT0RFX0ROTEQpOworCWNtZC0+c2VxX251bSA9IDA7CisJY21kLT5yZXN1bHQgPSAwOworCisJZG9uZSA9IDA7CisJd2hpbGUgKGxlbmd0aCkgeworCQlpbnQgYmxvY2tfc2l6ZSA9IGxlbmd0aCA+IDI1NiA/IDI1NiA6IGxlbmd0aDsKKworCQltZW1jcHkoY21kLT5wYXlsb2FkLCBkYXRhICsgZG9uZSwgYmxvY2tfc2l6ZSk7CisJCWNtZC0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoYmxvY2tfc2l6ZSk7CisKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGNtZCwKKwkJCQkJCXNpemVvZigqY21kKSArIGJsb2NrX3NpemUpOworCQlpZiAocmMpCisJCQlicmVhazsKKworCQlkb25lICs9IGJsb2NrX3NpemU7CisJCWxlbmd0aCAtPSBibG9ja19zaXplOworCX0KKworCWlmICghcmMpIHsKKwkJY21kLT5sZW5ndGggPSAwOworCQlyYyA9IG13bDhrX3NlbmRfZndfbG9hZF9jbWQocHJpdiwgY21kLCBzaXplb2YoKmNtZCkpOworCX0KKworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfZmVlZF9md19pbWFnZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IG1heV9jb250aW51ZSwgcmMgPSAwOworCXUzMiBkb25lLCBwcmV2X2Jsb2NrX3NpemU7CisKKwlidWZmZXIgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkb25lID0gMDsKKwlwcmV2X2Jsb2NrX3NpemUgPSAwOworCW1heV9jb250aW51ZSA9IDEwMDA7CisJd2hpbGUgKG1heV9jb250aW51ZSA+IDApIHsKKwkJdTMyIGJsb2NrX3NpemU7CisKKwkJYmxvY2tfc2l6ZSA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfU0NSQVRDSCk7CisJCWlmIChibG9ja19zaXplICYgMSkgeworCQkJYmxvY2tfc2l6ZSAmPSB+MTsKKwkJCW1heV9jb250aW51ZS0tOworCQl9IGVsc2UgeworCQkJZG9uZSArPSBwcmV2X2Jsb2NrX3NpemU7CisJCQlsZW5ndGggLT0gcHJldl9ibG9ja19zaXplOworCQl9CisKKwkJaWYgKGJsb2NrX3NpemUgPiAxMDI0IHx8IGJsb2NrX3NpemUgPiBsZW5ndGgpIHsKKwkJCXJjID0gLUVPVkVSRkxPVzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxlbmd0aCA9PSAwKSB7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChibG9ja19zaXplID09IDApIHsKKwkJCXJjID0gLUVQUk9UTzsKKwkJCW1heV9jb250aW51ZS0tOworCQkJdWRlbGF5KDEpOworCQkJY29udGludWU7CisJCX0KKworCQlwcmV2X2Jsb2NrX3NpemUgPSBibG9ja19zaXplOworCQltZW1jcHkoYnVmZmVyLCBkYXRhICsgZG9uZSwgYmxvY2tfc2l6ZSk7CisKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGJ1ZmZlciwgYmxvY2tfc2l6ZSk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCX0KKworCWlmICghcmMgJiYgbGVuZ3RoICE9IDApCisJCXJjID0gLUVSRU1PVEVJTzsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfbG9hZF9maXJtd2FyZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlpbnQgbG9vcHMsIHJjOworCisJY29uc3QgdTggKnVjb2RlID0gcHJpdi0+ZncudWNvZGUtPmRhdGE7CisJc2l6ZV90IHVjb2RlX2xlbiA9IHByaXYtPmZ3LnVjb2RlLT5zaXplOworCWNvbnN0IHU4ICpoZWxwZXIgPSBwcml2LT5mdy5oZWxwZXItPmRhdGE7CisJc2l6ZV90IGhlbHBlcl9sZW4gPSBwcml2LT5mdy5oZWxwZXItPnNpemU7CisKKwlpZiAoIW1lbWNtcCh1Y29kZSwgIlx4MDFceDAwXHgwMFx4MDAiLCA0KSkgeworCQlyYyA9IG13bDhrX2xvYWRfZndfaW1hZ2UocHJpdiwgaGVscGVyLCBoZWxwZXJfbGVuKTsKKwkJaWYgKHJjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSAiCisJCQkJImhlbHBlciBpbWFnZVxuIiwgcGNpX25hbWUocHJpdi0+cGRldikpOworCQkJcmV0dXJuIHJjOworCQl9CisJCW1zbGVlcCgxKTsKKworCQlyYyA9IG13bDhrX2ZlZWRfZndfaW1hZ2UocHJpdiwgdWNvZGUsIHVjb2RlX2xlbik7CisJfSBlbHNlIHsKKwkJcmMgPSBtd2w4a19sb2FkX2Z3X2ltYWdlKHByaXYsIHVjb2RlLCB1Y29kZV9sZW4pOworCX0KKworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBkYXRhXG4iLAorCQkJcGNpX25hbWUocHJpdi0+cGRldikpOworCQlyZXR1cm4gcmM7CisJfQorCisJaW93cml0ZTMyKE1XTDhLX01PREVfU1RBLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOworCW1zbGVlcCgxKTsKKworCWxvb3BzID0gMjAwMDAwOworCWRvIHsKKwkJaWYgKGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpCisJCQkJCQk9PSBNV0w4S19GV1NUQV9SRUFEWSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlyZXR1cm4gbG9vcHMgPyAwIDogLUVUSU1FRE9VVDsKK30KKworCisvKgorICogRGVmaW5lcyBzaGFyZWQgYmV0d2VlbiB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbi4KKyAqLworLyogSFQgY29udHJvbCBmaWVsZHMgZm9yIGZpcm13YXJlICovCitzdHJ1Y3QgZXdjX2h0X2luZm8geworCV9fbGUxNgljb250cm9sMTsKKwlfX2xlMTYJY29udHJvbDI7CisJX19sZTE2CWNvbnRyb2wzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRmlybXdhcmUgU3RhdGlvbiBkYXRhYmFzZSBvcGVyYXRpb25zICovCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9BRERfRU5UUlkJCTAKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWQkxCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkJCTIKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX0ZMVVNICQkzCisKKy8qIFBlZXIgRW50cnkgZmxhZ3MgLSB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB0aGUgcGVlciBub2RlICovCisjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVAkyCisjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BREhPQ19TVEFUSU9OCTQKKworI2RlZmluZSBNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTCTEyCisjZGVmaW5lIE1XTDhLX01DU19CSVRNQVBfU0laRQkJMTYKKyNkZWZpbmUgcGFkX3NpemUJCQkxNgorCitzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8geworCS8qIFBlZXIgdHlwZSAtIEFQIHZzLiBTVEEuICAqLworCV9fdTgJcGVlcl90eXBlOworCisJLyogQmFzaWMgODAyLjExIGNhcGFiaWxpdGllcyBmcm9tIGFzc29jIHJlc3AuICAqLworCV9fbGUxNgliYXNpY19jYXBzOworCisJLyogU2V0IGlmIHBlZXIgc3VwcG9ydHMgODAyLjExbiBoaWdoIHRocm91Z2hwdXQgKEhUKS4gICovCisJX191OAlodF9zdXBwb3J0OworCisJLyogVmFsaWQgaWYgSFQgaXMgc3VwcG9ydGVkLiAgKi8KKwlfX2xlMTYJaHRfY2FwczsKKwlfX3U4CWV4dGVuZGVkX2h0X2NhcHM7CisJc3RydWN0IGV3Y19odF9pbmZvCWV3Y19pbmZvOworCisJLyogTGVnYWN5IHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLworCV9fdTgJbGVnYWN5X3JhdGVzW01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworCisJLyogSFQgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCisJX191OAlodF9yYXRlc1tNV0w4S19NQ1NfQklUTUFQX1NJWkVdOworCV9fdTgJcGFkW3BhZF9zaXplXTsKKworCS8qIElmIHNldCwgaW50ZXJvcGVyYWJpbGl0eSBtb2RlLCBubyBwcm9wcmlldGFyeSBleHRlbnNpb25zLiAgKi8KKwlfX3U4CWludGVyb3A7CisJX191OAlwYWQyOworCV9fdTgJc3RhdGlvbl9pZDsKKwlfX2xlMTYJYW1zZHVfZW5hYmxlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIElubGluZSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBRb1MgZmllbGQgaW4gZGF0YSBkZXNjcmlwdG9yLiAgKi8KK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfdGlkKHUxNiBxb3MsIHU4IHRpZCkKK3sKKwl1MTYgdmFsX21hc2sgPSAweDAwMGY7CisJdTE2IHFvc19tYXNrID0gfnZhbF9tYXNrOworCisJLyogVElEIGJpdHMgMC0zICovCisJcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAodGlkICYgdmFsX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AodTE2IHFvcykKK3sKKwl1MTYgdmFsX21hc2sgPSAxIDw8IDQ7CisKKwkvKiBFbmQgb2YgU2VydmljZSBQZXJpb2QgQml0IDQgKi8KKwlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYWNrKHUxNiBxb3MsIHU4IGFja19wb2xpY3kpCit7CisJdTE2IHZhbF9tYXNrID0gMHgzOworCXU4CXNoaWZ0ID0gNTsKKwl1MTYgcW9zX21hc2sgPSB+KHZhbF9tYXNrIDw8IHNoaWZ0KTsKKworCS8qIEFjayBQb2xpY3kgQml0IDUtNiAqLworCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChhY2tfcG9saWN5ICYgdmFsX21hc2spIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9hbXNkdSh1MTYgcW9zKQoreworCXUxNiB2YWxfbWFzayA9IDEgPDwgNzsKKworCS8qIEFNU0RVIHByZXNlbnQgQml0IDcgKi8KKwlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfcWxlbih1MTYgcW9zLCB1OCBsZW4pCit7CisJdTE2IHZhbF9tYXNrID0gMHhmZjsKKwl1OAlzaGlmdCA9IDg7CisJdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7CisKKwkvKiBRdWV1ZSBMZW5ndGggQml0cyA4LTE1ICovCisJcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAoKGxlbiAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Cit9CisKKy8qIERNQSBoZWFkZXIgdXNlZCBieSBmaXJtd2FyZSBhbmQgaGFyZHdhcmUuICAqLworc3RydWN0IG13bDhrX2RtYV9kYXRhIHsKKwlfX2xlMTYgZndsZW47CisJc3RydWN0IGllZWU4MDIxMV9oZHIgd2g7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBSb3V0aW5lcyB0byBhZGQvcmVtb3ZlIERNQSBoZWFkZXIgZnJvbSBza2IuICAqLworc3RhdGljIGlubGluZSBpbnQgbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKShza2ItPmRhdGEpOworCXZvaWQgKmRzdCwgKnNyYyA9ICZ0ci0+d2g7CisJX19sZTE2IGZjID0gdHItPndoLmZyYW1lX2NvbnRyb2w7CisJaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmMpOworCXUxNiBzcGFjZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gaGRybGVuOworCisJZHN0ID0gKHZvaWQgKil0ciArIHNwYWNlOworCWlmIChkc3QgIT0gc3JjKSB7CisJCW1lbW1vdmUoZHN0LCBzcmMsIGhkcmxlbik7CisJCXNrYl9wdWxsKHNrYiwgc3BhY2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICptd2w4a19hZGRfZG1hX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKwl1MzIgaGRybGVuLCBwa3RsZW47CisJc3RydWN0IG13bDhrX2RtYV9kYXRhICp0cjsKKworCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4od2gtPmZyYW1lX2NvbnRyb2wpOworCXBrdGxlbiA9IHNrYi0+bGVuOworCisJLyoKKwkgKiBDb3B5IHVwL2Rvd24gdGhlIDgwMi4xMSBoZWFkZXI7IHRoZSBmaXJtd2FyZSByZXF1aXJlcworCSAqIHdlIHByZXNlbnQgYSAyLWJ5dGUgcGF5bG9hZCBsZW5ndGggZm9sbG93ZWQgYnkgYQorCSAqIDQtYWRkcmVzcyBoZWFkZXIgKHcvbyBRb1MpLCBmb2xsb3dlZCAob3B0aW9uYWxseSkgYnkKKwkgKiBhbnkgV0VQL0V4dElWIGhlYWRlciAoYnV0IG9ubHkgZmlsbGVkIGluIGZvciBDQ01QKS4KKwkgKi8KKwlpZiAoaGRybGVuICE9IHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpKQorCQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gaGRybGVuKTsKKworCXRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKKwlpZiAod2ggIT0gJnRyLT53aCkKKwkJbWVtbW92ZSgmdHItPndoLCB3aCwgaGRybGVuKTsKKworCS8qIENsZWFyIGFkZHI0ICovCisJbWVtc2V0KHRyLT53aC5hZGRyNCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCS8qCisJICogRmlybXdhcmUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGx5IGZvcm1lZCAiODAyLjExCisJICogcGF5bG9hZCIuICBUaGF0IGlzLCBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgdGhlIDgwMi4xMSBoZWFkZXIuCisJICogVGhpcyBpbmNsdWRlcyBhbGwgY3J5cHRvIG1hdGVyaWFsIGluY2x1ZGluZyB0aGUgTUlDLgorCSAqLworCXRyLT5md2xlbiA9IGNwdV90b19sZTE2KHBrdGxlbiAtIGhkcmxlbik7CisKKwlyZXR1cm4gc2tiOworfQorCisKKy8qCisgKiBQYWNrZXQgcmVjZXB0aW9uLgorICovCisjZGVmaW5lIE1XTDhLX1JYX0NUUkxfS0VZX0lOREVYX01BU0sJMHgzMAorI2RlZmluZSBNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHgwMgorI2RlZmluZSBNV0w4S19SWF9DVFJMX0FNUERVCQkweDAxCisKK3N0cnVjdCBtd2w4a19yeF9kZXNjIHsKKwlfX2xlMTYgcGt0X2xlbjsKKwlfX3U4IGxpbmtfcXVhbGl0eTsKKwlfX3U4IG5vaXNlX2xldmVsOworCV9fbGUzMiBwa3RfcGh5c19hZGRyOworCV9fbGUzMiBuZXh0X3J4X2Rlc2NfcGh5c19hZGRyOworCV9fbGUxNiBxb3NfY29udHJvbDsKKwlfX2xlMTYgcmF0ZV9pbmZvOworCV9fbGUzMiBwYWQwWzRdOworCV9fdTggcnNzaTsKKwlfX3U4IGNoYW5uZWw7CisJX19sZTE2IHBhZDE7CisJX191OCByeF9jdHJsOworCV9fdTggcnhfc3RhdHVzOworCV9fdTggcGFkMlsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfUlhfREVTQ1MJCTI1NgorI2RlZmluZSBNV0w4S19SWF9NQVhTWgkJMzgwMAorCitzdGF0aWMgaW50IG13bDhrX3J4cV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBzaXplOworCWludCBpOworCisJcnhxLT5yeF9kZXNjX2NvdW50ID0gMDsKKwlyeHEtPnJ4X2hlYWQgPSAwOworCXJ4cS0+cnhfdGFpbCA9IDA7CisKKwlzaXplID0gTVdMOEtfUlhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3J4X2Rlc2MpOworCisJcnhxLT5yeF9kZXNjX2FyZWEgPQorCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLCAmcnhxLT5yeF9kZXNjX2RtYSk7CisJaWYgKHJ4cS0+cnhfZGVzY19hcmVhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFJYIGRlc2NyaXB0b3JzXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocnhxLT5yeF9kZXNjX2FyZWEsIDAsIHNpemUpOworCisJcnhxLT5yeF9za2IgPSBrbWFsbG9jKE1XTDhLX1JYX0RFU0NTICoKKwkJCQlzaXplb2YoKnJ4cS0+cnhfc2tiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ4cS0+cnhfc2tiID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFJYIHNrYnVmZiBsaXN0XG4iLAorCQkJcHJpdi0+bmFtZSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwKKwkJCQkgICAgcnhxLT5yeF9kZXNjX2FyZWEsIHJ4cS0+cnhfZGVzY19kbWEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHJ4cS0+cnhfc2tiLCAwLCBNV0w4S19SWF9ERVNDUyAqIHNpemVvZigqcnhxLT5yeF9za2IpKTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19SWF9ERVNDUzsgaSsrKSB7CisJCXN0cnVjdCBtd2w4a19yeF9kZXNjICpyeF9kZXNjOworCQlpbnQgbmV4dGk7CisKKwkJcnhfZGVzYyA9IHJ4cS0+cnhfZGVzY19hcmVhICsgaTsKKwkJbmV4dGkgPSAoaSArIDEpICUgTVdMOEtfUlhfREVTQ1M7CisKKwkJcnhfZGVzYy0+bmV4dF9yeF9kZXNjX3BoeXNfYWRkciA9CisJCQljcHVfdG9fbGUzMihyeHEtPnJ4X2Rlc2NfZG1hCisJCQkJCQkrIG5leHRpICogc2l6ZW9mKCpyeF9kZXNjKSk7CisJCXJ4X2Rlc2MtPnJ4X2N0cmwgPQorCQkJY3B1X3RvX2xlMzIoTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByeHFfcmVmaWxsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSAqcnhxID0gcHJpdi0+cnhxICsgaW5kZXg7CisJaW50IHJlZmlsbGVkOworCisJcmVmaWxsZWQgPSAwOworCXdoaWxlIChyeHEtPnJ4X2Rlc2NfY291bnQgPCBNV0w4S19SWF9ERVNDUyAmJiBsaW1pdC0tKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWludCByeDsKKworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKE1XTDhLX1JYX01BWFNaKTsKKwkJaWYgKHNrYiA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcnhxLT5yeF9kZXNjX2NvdW50Kys7CisKKwkJcnggPSByeHEtPnJ4X3RhaWw7CisJCXJ4cS0+cnhfdGFpbCA9IChyeCArIDEpICUgTVdMOEtfUlhfREVTQ1M7CisKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLnBrdF9waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLAorCQkJCQlNV0w4S19SWF9NQVhTWiwgRE1BX0ZST01fREVWSUNFKSk7CisKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLnBrdF9sZW4gPSBjcHVfdG9fbGUxNihNV0w4S19SWF9NQVhTWik7CisJCXJ4cS0+cnhfc2tiW3J4XSA9IHNrYjsKKwkJd21iKCk7CisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5yeF9jdHJsID0gMDsKKworCQlyZWZpbGxlZCsrOworCX0KKworCXJldHVybiByZWZpbGxlZDsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIHRoZSBjYXJkJ3MgcmVjZXB0aW9uIGlzIGNvbXBsZXRlbHkgaGFsdGVkICovCitzdGF0aWMgdm9pZCBtd2w4a19yeHFfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1JYX0RFU0NTOyBpKyspIHsKKwkJaWYgKHJ4cS0+cnhfc2tiW2ldICE9IE5VTEwpIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCQkJYWRkciA9IGxlMzJfdG9fY3B1KHJ4cS0+cnhfZGVzY19hcmVhW2ldLnBrdF9waHlzX2FkZHIpOworCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBhZGRyLCBNV0w4S19SWF9NQVhTWiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlrZnJlZV9za2IocnhxLT5yeF9za2JbaV0pOworCQkJcnhxLT5yeF9za2JbaV0gPSBOVUxMOworCQl9CisJfQorCisJa2ZyZWUocnhxLT5yeF9za2IpOworCXJ4cS0+cnhfc2tiID0gTlVMTDsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwKKwkJCSAgICBNV0w4S19SWF9ERVNDUyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhfZGVzYyksCisJCQkgICAgcnhxLT5yeF9kZXNjX2FyZWEsIHJ4cS0+cnhfZGVzY19kbWEpOworCXJ4cS0+cnhfZGVzY19hcmVhID0gTlVMTDsKK30KKworCisvKgorICogU2NhbiBhIGxpc3Qgb2YgQlNTSURzIHRvIHByb2Nlc3MgZm9yIGZpbmFsaXplIGpvaW4uCisgKiBBbGxvd3MgZm9yIGV4dGVuc2lvbiB0byBwcm9jZXNzIG11bHRpcGxlIEJTU0lEcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK213bDhrX2NhcHR1cmVfYnNzaWQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICp3aCkKK3sKKwlyZXR1cm4gcHJpdi0+Y2FwdHVyZV9iZWFjb24gJiYKKwkJaWVlZTgwMjExX2lzX2JlYWNvbih3aC0+ZnJhbWVfY29udHJvbCkgJiYKKwkJIWNvbXBhcmVfZXRoZXJfYWRkcih3aC0+YWRkcjMsIHByaXYtPmNhcHR1cmVfYnNzaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfc2F2ZV9iZWFjb24oc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOworCW1lbXNldChwcml2LT5jYXB0dXJlX2Jzc2lkLCAwLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJLyoKKwkgKiBVc2UgR0ZQX0FUT01JQyBhcyByeHFfcHJvY2VzcyBpcyBjYWxsZWQgZnJvbQorCSAqIHRoZSBwcmltYXJ5IGludGVycnVwdCBoYW5kbGVyLCBtZW1vcnkgYWxsb2NhdGlvbiBjYWxsCisJICogbXVzdCBub3Qgc2xlZXAuCisJICovCisJcHJpdi0+YmVhY29uX3NrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHByaXYtPmJlYWNvbl9za2IgIT0gTlVMTCkKKwkJcXVldWVfd29yayhwcml2LT5jb25maWdfd3EsCisJCQkJJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKK30KKworc3RhdGljIGludCByeHFfcHJvY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgbGltaXQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBwcm9jZXNzZWQ7CisKKwlwcm9jZXNzZWQgPSAwOworCXdoaWxlIChyeHEtPnJ4X2Rlc2NfY291bnQgJiYgbGltaXQtLSkgeworCQlzdHJ1Y3QgbXdsOGtfcnhfZGVzYyAqcnhfZGVzYzsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKworCQlyeF9kZXNjID0gcnhxLT5yeF9kZXNjX2FyZWEgKyByeHEtPnJ4X2hlYWQ7CisJCWlmICghKHJ4X2Rlc2MtPnJ4X2N0cmwgJiBNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQorCQkJYnJlYWs7CisJCXJtYigpOworCisJCXNrYiA9IHJ4cS0+cnhfc2tiW3J4cS0+cnhfaGVhZF07CisJCXJ4cS0+cnhfc2tiW3J4cS0+cnhfaGVhZF0gPSBOVUxMOworCisJCXJ4cS0+cnhfaGVhZCA9IChyeHEtPnJ4X2hlYWQgKyAxKSAlIE1XTDhLX1JYX0RFU0NTOworCQlyeHEtPnJ4X2Rlc2NfY291bnQtLTsKKworCQlhZGRyID0gbGUzMl90b19jcHUocnhfZGVzYy0+cGt0X3BoeXNfYWRkcik7CisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgYWRkciwKKwkJCQkJTVdMOEtfUlhfTUFYU1osIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJc2tiX3B1dChza2IsIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnBrdF9sZW4pKTsKKwkJaWYgKG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYikpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHBlbmRpbmcgam9pbiBvcGVyYXRpb24uIHNhdmUgYSBjb3B5IG9mCisJCSAqIHRoZSBiZWFjb24gYW5kIHNjaGVkdWxlIGEgdGFza2xldCB0byBzZW5kIGZpbmFsaXplCisJCSAqIGpvaW4gY29tbWFuZCB0byB0aGUgZmlybXdhcmUuCisJCSAqLworCQlpZiAobXdsOGtfY2FwdHVyZV9ic3NpZChwcml2LCB3aCkpCisJCQltd2w4a19zYXZlX2JlYWNvbihwcml2LCBza2IpOworCisJCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisJCXN0YXR1cy5tYWN0aW1lID0gMDsKKwkJc3RhdHVzLnNpZ25hbCA9IC1yeF9kZXNjLT5yc3NpOworCQlzdGF0dXMubm9pc2UgPSAtcnhfZGVzYy0+bm9pc2VfbGV2ZWw7CisJCXN0YXR1cy5xdWFsID0gcnhfZGVzYy0+bGlua19xdWFsaXR5OworCQlzdGF0dXMuYW50ZW5uYSA9IDE7CisJCXN0YXR1cy5yYXRlX2lkeCA9IDE7CisJCXN0YXR1cy5mbGFnID0gMDsKKwkJc3RhdHVzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCQlzdGF0dXMuZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShyeF9kZXNjLT5jaGFubmVsKTsKKwkJaWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYiwgJnN0YXR1cyk7CisKKwkJcHJvY2Vzc2VkKys7CisJfQorCisJcmV0dXJuIHByb2Nlc3NlZDsKK30KKworCisvKgorICogUGFja2V0IHRyYW5zbWlzc2lvbi4KKyAqLworCisvKiBUcmFuc21pdCBxdWV1ZSBhc3NpZ25tZW50LiAgKi8KK2VudW0geworCU1XTDhLX1dNRV9BQ19CSwk9IDAsCQkvKiBiYWNrZ3JvdW5kIGFjY2VzcyAqLworCU1XTDhLX1dNRV9BQ19CRQk9IDEsCQkvKiBiZXN0IGVmZm9ydCBhY2Nlc3MgKi8KKwlNV0w4S19XTUVfQUNfVkkJPSAyLAkJLyogdmlkZW8gYWNjZXNzICovCisJTVdMOEtfV01FX0FDX1ZPCT0gMywJCS8qIHZvaWNlIGFjY2VzcyAqLworfTsKKworLyogVHJhbnNtaXQgcGFja2V0IEFDSyBwb2xpY3kgKi8KKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMCQkwCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PTkUJCTEKKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9fRVhQTElDSVQJMgorI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSwkJMworCisjZGVmaW5lIEdFVF9UWFEoX2FjKSAoXAorCQkoKF9hYykgPT0gV01FX0FDX1ZPKSA/IE1XTDhLX1dNRV9BQ19WTyA6IFwKKwkJKChfYWMpID09IFdNRV9BQ19WSSkgPyBNV0w4S19XTUVfQUNfVkkgOiBcCisJCSgoX2FjKSA9PSBXTUVfQUNfQkspID8gTVdMOEtfV01FX0FDX0JLIDogXAorCQlNV0w4S19XTUVfQUNfQkUpCisKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19JRExFCQkJMHgwMDAwMDAwMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX1VTRUQJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0sJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZCQkweDAwMDAwMDA0CisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYCQkweDAwMDAwMDA4CisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfQlJPQURDQVNUX1RYCQkweDAwMDAwMDEwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRkFJTEVEX0xJTktfRVJST1IJMHgwMDAwMDAyMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQJMHgwMDAwMDA0MAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9BR0lORwkJMHgwMDAwMDA4MAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0hPU1RfQ01ECQkweDQwMDAwMDAwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgIE1XTDhLX1RYRF9TT0ZUU1RBTEUJCQkJMHg4MAorI2RlZmluZSAgTVdMOEtfVFhEX1NPRlRTVEFMRV9NR01UX1JFVFJZCQkJMHgwMQorCitzdHJ1Y3QgbXdsOGtfdHhfZGVzYyB7CisJX19sZTMyIHN0YXR1czsKKwlfX3U4IGRhdGFfcmF0ZTsKKwlfX3U4IHR4X3ByaW9yaXR5OworCV9fbGUxNiBxb3NfY29udHJvbDsKKwlfX2xlMzIgcGt0X3BoeXNfYWRkcjsKKwlfX2xlMTYgcGt0X2xlbjsKKwlfX3U4IGRlc3RfTUFDX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX2xlMzIgbmV4dF90eF9kZXNjX3BoeXNfYWRkcjsKKwlfX2xlMzIgcmVzZXJ2ZWQ7CisJX19sZTE2IHJhdGVfaW5mbzsKKwlfX3U4IHBlZXJfaWQ7CisJX191OCB0eF9mcmFnX2NudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfVFhfREVTQ1MJCTEyOAorCitzdGF0aWMgaW50IG13bDhrX3R4cV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCWludCBzaXplOworCWludCBpOworCisJbWVtc2V0KCZ0eHEtPnR4X3N0YXRzLCAwLAorCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOworCXR4cS0+dHhfc3RhdHMubGltaXQgPSBNV0w4S19UWF9ERVNDUzsKKwl0eHEtPnR4X2hlYWQgPSAwOworCXR4cS0+dHhfdGFpbCA9IDA7CisKKwlzaXplID0gTVdMOEtfVFhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4X2Rlc2MpOworCisJdHhxLT50eF9kZXNjX2FyZWEgPQorCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLCAmdHhxLT50eF9kZXNjX2RtYSk7CisJaWYgKHR4cS0+dHhfZGVzY19hcmVhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFRYIGRlc2NyaXB0b3JzXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHhxLT50eF9kZXNjX2FyZWEsIDAsIHNpemUpOworCisJdHhxLT50eF9za2IgPSBrbWFsbG9jKE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKCp0eHEtPnR4X3NrYiksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICh0eHEtPnR4X3NrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBUWCBza2J1ZmYgbGlzdFxuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsCisJCQkJICAgIHR4cS0+dHhfZGVzY19hcmVhLCB0eHEtPnR4X2Rlc2NfZG1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0eHEtPnR4X3NrYiwgMCwgTVdMOEtfVFhfREVTQ1MgKiBzaXplb2YoKnR4cS0+dHhfc2tiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfREVTQ1M7IGkrKykgeworCQlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKKwkJaW50IG5leHRpOworCisJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIGk7CisJCW5leHRpID0gKGkgKyAxKSAlIE1XTDhLX1RYX0RFU0NTOworCisJCXR4X2Rlc2MtPnN0YXR1cyA9IDA7CisJCXR4X2Rlc2MtPm5leHRfdHhfZGVzY19waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIodHhxLT50eF9kZXNjX2RtYSArCisJCQkJCQluZXh0aSAqIHNpemVvZigqdHhfZGVzYykpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfdHhfc3RhcnQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUFBBX1JFQURZLAorCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG13bDhrX3R4cV9idXN5KHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCXJldHVybiBwcml2LT5wZW5kaW5nX3R4X3BrdHM7Cit9CisKK3N0cnVjdCBtd2w4a190eHFfaW5mbyB7CisJdTMyIGZ3X293bmVkOworCXUzMiBkcnZfb3duZWQ7CisJdTMyIHVudXNlZDsKKwl1MzIgbGVuOworCXUzMiBoZWFkOworCXUzMiB0YWlsOworfTsKKworc3RhdGljIGludCBtd2w4a19zY2FuX3R4X3Jpbmcoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IG13bDhrX3R4cV9pbmZvIHR4aW5mb1tdLAorCQkJCXUzMiBudW1fcXVldWVzKQoreworCWludCBjb3VudCwgZGVzYywgc3RhdHVzOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOworCWludCBuZGVzY3MgPSAwOworCisJbWVtc2V0KHR4aW5mbywgMCwgbnVtX3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfdHhxX2luZm8pKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG51bV9xdWV1ZXM7IGNvdW50KyspIHsKKwkJdHhxID0gcHJpdi0+dHhxICsgY291bnQ7CisJCXR4aW5mb1tjb3VudF0ubGVuID0gdHhxLT50eF9zdGF0cy5sZW47CisJCXR4aW5mb1tjb3VudF0uaGVhZCA9IHR4cS0+dHhfaGVhZDsKKwkJdHhpbmZvW2NvdW50XS50YWlsID0gdHhxLT50eF90YWlsOworCQlmb3IgKGRlc2MgPSAwOyBkZXNjIDwgTVdMOEtfVFhfREVTQ1M7IGRlc2MrKykgeworCQkJdHhfZGVzYyA9IHR4cS0+dHhfZGVzY19hcmVhICsgZGVzYzsKKwkJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnN0YXR1cyk7CisKKwkJCWlmIChzdGF0dXMgJiBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKQorCQkJCXR4aW5mb1tjb3VudF0uZndfb3duZWQrKzsKKwkJCWVsc2UKKwkJCQl0eGluZm9bY291bnRdLmRydl9vd25lZCsrOworCisJCQlpZiAodHhfZGVzYy0+cGt0X2xlbiA9PSAwKQorCQkJCXR4aW5mb1tjb3VudF0udW51c2VkKys7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcmV0dXJuIG5kZXNjczsKK30KKworc3RhdGljIGludCBtd2w4a190eF93YWl0X2VtcHR5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgZGVsYXlfbXMpCit7CisJdTMyIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCisJbWlnaHRfc2xlZXAoKTsKKworCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBQcmV2aW91cyBUWFdhaXRFbXB0eSBpbnN0YW5jZVxuIik7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWNvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CisJaWYgKGNvdW50KSB7CisJCXByaXYtPnR4X3dhaXQgPSAmY21kX3dhaXQ7CisJCWlmIChwcml2LT5yYWRpb19zdGF0ZSkKKwkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlpZiAoY291bnQpIHsKKwkJc3RydWN0IG13bDhrX3R4cV9pbmZvIHR4aW5mb1s0XTsKKwkJaW50IGluZGV4OworCQlpbnQgbmV3Y291bnQ7CisKKwkJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKKwkJaWYgKHRpbWVvdXQpCisJCQlyZXR1cm4gMDsKKworCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCQlwcml2LT50eF93YWl0ID0gTlVMTDsKKwkJbmV3Y291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJCXByaW50ayhLRVJOX0VSUiAiJXMoJXUpIFRJTUVET1VUOiV1bXMgUGVuZDoldS0tPiV1XG4iLAorCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCBkZWxheV9tcywgY291bnQsIG5ld2NvdW50KTsKKworCQltd2w4a19zY2FuX3R4X3JpbmcocHJpdiwgdHhpbmZvLCA0KTsKKwkJZm9yIChpbmRleCA9IDAgOyBpbmRleCA8IDQ7IGluZGV4KyspCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiVFhROiV1IEw6JXUgSDoldSBUOiV1IEZXOiV1IERSVjoldSBVOiV1XG4iLAorCQkJCQlpbmRleCwKKwkJCQkJdHhpbmZvW2luZGV4XS5sZW4sCisJCQkJCXR4aW5mb1tpbmRleF0uaGVhZCwKKwkJCQkJdHhpbmZvW2luZGV4XS50YWlsLAorCQkJCQl0eGluZm9baW5kZXhdLmZ3X293bmVkLAorCQkJCQl0eGluZm9baW5kZXhdLmRydl9vd25lZCwKKwkJCQkJdHhpbmZvW2luZGV4XS51bnVzZWQpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNV0w4S19UWERfT0sJKE1XTDhLX1RYRF9TVEFUVVNfT0sgfCBcCisJCQkgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWSB8IFwKKwkJCSBNV0w4S19UWERfU1RBVFVTX09LX01PUkVfUkVUUlkpCisjZGVmaW5lIE1XTDhLX1RYRF9TVUNDRVNTKHN0YXQpCQkoKHN0YXQpICYgTVdMOEtfVFhEX09LKQorI2RlZmluZSBNV0w4S19UWERfRkFJTF9SRVRSWShzdGF0KQlcCisJKChzdGF0KSAmIChNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQpKQorCitzdGF0aWMgdm9pZCBtd2w4a190eHFfcmVjbGFpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgZm9yY2UpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCWludCB3YWtlID0gMDsKKworCXdoaWxlICh0eHEtPnR4X3N0YXRzLmxlbiA+IDApIHsKKwkJaW50IHR4OworCQlpbnQgcmM7CisJCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJCXUzMiBzdGF0dXM7CisKKwkJcmMgPSAwOworCQl0eCA9IHR4cS0+dHhfaGVhZDsKKwkJdHhfZGVzYyA9IHR4cS0+dHhfZGVzY19hcmVhICsgdHg7CisKKwkJc3RhdHVzID0gbGUzMl90b19jcHUodHhfZGVzYy0+c3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCkgeworCQkJaWYgKCFmb3JjZSkKKwkJCQlicmVhazsKKwkJCXR4X2Rlc2MtPnN0YXR1cyAmPQorCQkJCX5jcHVfdG9fbGUzMihNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKTsKKwkJfQorCisJCXR4cS0+dHhfaGVhZCA9ICh0eCArIDEpICUgTVdMOEtfVFhfREVTQ1M7CisJCUJVR19PTih0eHEtPnR4X3N0YXRzLmxlbiA9PSAwKTsKKwkJdHhxLT50eF9zdGF0cy5sZW4tLTsKKwkJcHJpdi0+cGVuZGluZ190eF9wa3RzLS07CisKKwkJYWRkciA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnBrdF9waHlzX2FkZHIpOworCQlzaXplID0gKHUzMikobGUxNl90b19jcHUodHhfZGVzYy0+cGt0X2xlbikpOworCQlza2IgPSB0eHEtPnR4X3NrYlt0eF0uc2tiOworCQl0eHEtPnR4X3NrYlt0eF0uc2tiID0gTlVMTDsKKworCQlCVUdfT04oc2tiID09IE5VTEwpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGFkZHIsIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCXJjID0gbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc2tiKTsKKworCQkvKiBNYXJrIGRlc2NyaXB0b3IgYXMgdW51c2VkICovCisJCXR4X2Rlc2MtPnBrdF9waHlzX2FkZHIgPSAwOworCQl0eF9kZXNjLT5wa3RfbGVuID0gMDsKKworCQlpZiAodHhxLT50eF9za2JbdHhdLmNsb25lKSB7CisJCQkvKiBSZXBsYWNlIHdpdGggb3JpZ2luYWwgc2tiCisJCQkgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIHN0YWNrCisJCQkgKiBhcyBidWZmZXIgaGFzIGJlZW4gY2xvbmVkCisJCQkgKi8KKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXNrYiA9IHR4cS0+dHhfc2tiW3R4XS5jbG9uZTsKKwkJCXR4cS0+dHhfc2tiW3R4XS5jbG9uZSA9IE5VTEw7CisJCX0KKworCQlpZiAocmMpIHsKKwkJCS8qIFNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBoZXJlLgorCQkJICogRmFpbGVkIHRvIHJlbW92ZSBETUEgaGVhZGVyLgorCQkJICogUHJpbnQgZXJyb3IgbWVzc2FnZSBhbmQgZHJvcCBwYWNrZXQuCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlbW92aW5nIERNQSBoZWFkZXIgZnJvbSAiCisJCQkJCSJ0eCBza2IgMHglcC5cbiIsIHByaXYtPm5hbWUsIHNrYik7CisKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKGluZm8pOworCisJCS8qIENvbnZlcnQgZmlybXdhcmUgc3RhdHVzIHN0dWZmIGludG8gdHhfc3RhdHVzICovCisJCWlmIChNV0w4S19UWERfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCQkvKiBUcmFuc21pdCBPSyAqLworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQl9CisKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOworCisJCXdha2UgPSAhcHJpdi0+aW5jb25maWcgJiYgcHJpdi0+cmFkaW9fc3RhdGU7CisJfQorCisJaWYgKHdha2UpCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBpbmRleCk7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUgY2FyZCdzIHRyYW5zbWl0IGlzIGNvbXBsZXRlbHkgaGFsdGVkICovCitzdGF0aWMgdm9pZCBtd2w4a190eHFfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCisJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGluZGV4LCAxKTsKKworCWtmcmVlKHR4cS0+dHhfc2tiKTsKKwl0eHEtPnR4X3NrYiA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsCisJCQkgICAgTVdMOEtfVFhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4X2Rlc2MpLAorCQkJICAgIHR4cS0+dHhfZGVzY19hcmVhLCB0eHEtPnR4X2Rlc2NfZG1hKTsKKwl0eHEtPnR4X2Rlc2NfYXJlYSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX3R4cV94bWl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eDsKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyOworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqb3JnX3NrYiA9IHNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwl1MTYgcW9zID0gMDsKKwlib29sIHFvc2ZyYW1lID0gZmFsc2UsIGFtcGR1ZnJhbWUgPSBmYWxzZTsKKwlib29sIG1jZnJhbWUgPSBmYWxzZSwgZWFwb2xmcmFtZSA9IGZhbHNlOworCWJvb2wgYW1zZHVmcmFtZSA9IGZhbHNlOworCV9fbGUxNiBmYzsKKworCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCXR4ID0gdHhxLT50eF9kZXNjX2FyZWEgKyB0eHEtPnR4X3RhaWw7CisKKwlCVUdfT04odHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5za2IgIT0gTlVMTCk7CisKKwkvKgorCSAqIEFwcGVuZCBIVyBETUEgaGVhZGVyIHRvIHN0YXJ0IG9mIHBhY2tldC4gIERyb3AgcGFja2V0IGlmCisJICogdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBvciBhIGZhaWx1cmUgdG8gdW5zaGFyZS91bmNsb25lCisJICogdGhlIHNrYi4KKwkgKi8KKwlza2IgPSBtd2w4a19hZGRfZG1hX2hlYWRlcihza2IpOworCisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHByZXBlbmQgSFcgRE1BICIKKwkJCSJoZWFkZXIsIGRyb3BwaW5nIFRYIGZyYW1lLlxuIiwgcHJpdi0+bmFtZSk7CisJCWRldl9rZnJlZV9za2Iob3JnX3NrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltd2w4a192aWYgPSBNV0w4S19WSUYodHhfaW5mby0+Y29udHJvbC52aWYpOworCXRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKKwl3aCA9ICZ0ci0+d2g7CisJZmMgPSB3aC0+ZnJhbWVfY29udHJvbDsKKwlxb3NmcmFtZSA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYyk7CisJbWNmcmFtZSA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHdoLT5hZGRyMSk7CisJYW1wZHVmcmFtZSA9ICEhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKKwkJdTE2IHNlcW5vID0gbXdsOGtfdmlmLT5zZXFubzsKKwkJd2gtPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCQl3aC0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2Vxbm8gPDwgNCk7CisJCW13bDhrX3ZpZi0+c2Vxbm8gPSBzZXFubysrICUgNDA5NjsKKwl9CisKKwlpZiAocW9zZnJhbWUpCisJCXFvcyA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKWllZWU4MDIxMV9nZXRfcW9zX2N0bCh3aCkpKTsKKworCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQlza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gZG1hIG1hcCBza2IsICIKKwkJCSJkcm9wcGluZyBUWCBmcmFtZS5cbiIsIHByaXYtPm5hbWUpOworCisJCWlmIChvcmdfc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiKG9yZ19za2IpOworCQlpZiAoc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJLyogU2V0IGRlc2MgaGVhZGVyLCBjcHUgYml0IG9yZGVyLiAgKi8KKwl0eC0+c3RhdHVzID0gMDsKKwl0eC0+ZGF0YV9yYXRlID0gMDsKKwl0eC0+dHhfcHJpb3JpdHkgPSBpbmRleDsKKwl0eC0+cW9zX2NvbnRyb2wgPSAwOworCXR4LT5yYXRlX2luZm8gPSAwOworCXR4LT5wZWVyX2lkID0gbXdsOGtfdmlmLT5wZWVyX2lkOworCisJYW1zZHVmcmFtZSA9ICEhKHFvcyAmIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCk7CisKKwkvKiBTZXR1cCBmaXJtd2FyZSBjb250cm9sIGJpdCBmaWVsZHMgZm9yIGVhY2ggZnJhbWUgdHlwZS4gICovCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSB8fCBpZWVlODAyMTFfaXNfY3RsKGZjKSkgeworCQl0eC0+ZGF0YV9yYXRlID0gMDsKKwkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9lb3NwKHFvcyk7CisJCS8qIFNldCBRdWV1ZSBzaXplIHRvIHVuc3BlY2lmaWVkICovCisJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfcWxlbihxb3MsIDB4ZmYpOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCXR4LT5kYXRhX3JhdGUgPSAxOworCQlpZiAobWNmcmFtZSkKKwkJCXR4LT5zdGF0dXMgfD0gTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFg7CisKKwkJLyoKKwkJICogVGVsbCBmaXJtd2FyZSB0byBub3Qgc2VuZCBFQVBPTCBwa3RzIGluIGFuCisJCSAqIGFnZ3JlZ2F0ZS4gIFZlcmlmeSBhZ2FpbnN0IG1hYzgwMjExIHR4IHBhdGguICBJZgorCQkgKiBzdGFjayB0dXJucyBvZmYgQU1QRFUgZm9yIGFuIEVBUE9MIGZyYW1lIHRoaXMKKwkJICogY2hlY2sgd2lsbCBiZSByZW1vdmVkLgorCQkgKi8KKwkJaWYgKGVhcG9sZnJhbWUpIHsKKwkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOworCQl9IGVsc2UgeworCQkJLyogU2VuZCBwa3QgaW4gYW4gYWdncmVnYXRlIGlmIEFNUERVIGZyYW1lLiAgKi8KKwkJCWlmIChhbXBkdWZyYW1lKQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0spOworCQkJZWxzZQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMKTsKKworCQkJaWYgKGFtc2R1ZnJhbWUpCisJCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hbXNkdShxb3MpOworCQl9CisJfQorCisJLyogQ29udmVydCB0byBsaXR0bGUgZW5kaWFuICovCisJdHgtPnFvc19jb250cm9sID0gY3B1X3RvX2xlMTYocW9zKTsKKwl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIodHgtPnN0YXR1cyk7CisJdHgtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihkbWEpOworCXR4LT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCisJdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5za2IgPSBza2I7CisJdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5jbG9uZSA9CisJCXNrYiA9PSBvcmdfc2tiID8gTlVMTCA6IG9yZ19za2I7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKE1XTDhLX1RYRF9TVEFUVVNfT0sgfAorCQkJCQlNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKTsKKwl3bWIoKTsKKwl0eHEtPnR4X3N0YXRzLmxlbisrOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cysrOworCXR4cS0+dHhfc3RhdHMuY291bnQrKzsKKwl0eHEtPnR4X3RhaWwrKzsKKworCWlmICh0eHEtPnR4X3RhaWwgPT0gTVdMOEtfVFhfREVTQ1MpCisJCXR4cS0+dHhfdGFpbCA9IDA7CisJaWYgKHR4cS0+dHhfaGVhZCA9PSB0eHEtPnR4X3RhaWwpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBpbmRleCk7CisKKwlpZiAocHJpdi0+aW5jb25maWcpIHsKKwkJLyoKKwkJICogU2lsZW50bHkgcXVldWUgcGFja2V0IHdoZW4gd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKKwkJICogYSBjb25maWcgY3ljbGUuICBOb3RpZnkgZmlybXdhcmUgb25seSBpZiB3ZSBhcmUKKwkJICogd2FpdGluZyBmb3IgVFhRcyB0byBlbXB0eS4gIElmIGEgcGFja2V0IGlzIHNlbnQKKwkJICogYmVmb3JlIC5jb25maWcoKSBpcyBjb21wbGV0ZSwgcGVyaGFwcyBpdCBpcyBiZXR0ZXIKKwkJICogdG8gZHJvcCB0aGUgcGFja2V0LCBhcyB0aGUgY2hhbm5lbCBpcyBiZWluZyBjaGFuZ2VkCisJCSAqIGFuZCB0aGUgcGFja2V0IHdpbGwgZW5kIHVwIG9uIHRoZSB3cm9uZyBjaGFubmVsLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBXQVJOSU5HIFRYIGFjdGl2aXR5IHdoaWxlICIKKwkJCSJpbiBjb25maWdcbiIsIF9fZnVuY19fKTsKKworCQlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMKQorCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJfSBlbHNlCisJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworCisvKgorICogQ29tbWFuZCBwcm9jZXNzaW5nLgorICovCisKKy8qIFRpbWVvdXQgZmlybXdhcmUgY29tbWFuZHMgYWZ0ZXIgMjAwMG1zICovCisjZGVmaW5lIE1XTDhLX0NNRF9USU1FT1VUX01TCTIwMDAKKworc3RhdGljIGludCBtd2w4a19wb3N0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG13bDhrX2NtZF9wa3QgKmNtZCkKK3sKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjbWRfd2FpdCk7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdW5zaWduZWQgaW50IGRtYV9zaXplOworCWludCByYzsKKwl1MTYgX19pb21lbSAqcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisJdTggYnVmWzMyXTsKKworCWNtZC0+cmVzdWx0ID0gMHhGRkZGOworCWRtYV9zaXplID0gbGUxNl90b19jcHUoY21kLT5sZW5ndGgpOworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgY21kLCBkbWFfc2l6ZSwKKwkJCQkgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWFfYWRkcikpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHByaXYtPmhvc3RjbWRfd2FpdCAhPSBOVUxMKQorCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgaG9zdCBjb21tYW5kIGluIHByb2dyZXNzXG4iKTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCXByaXYtPmhvc3RjbWRfd2FpdCA9ICZjbWRfd2FpdDsKKwlpb3dyaXRlMzIoZG1hX2FkZHIsIHJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwsCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCisJCQkJbXNlY3NfdG9famlmZmllcyhNV0w4S19DTURfVElNRU9VVF9NUykpOworCisJcmVzdWx0ID0gJmNtZC0+cmVzdWx0OworCWlmICghdGltZW91dCkgeworCQlzcGluX2xvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwkJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29tbWFuZCAlcyB0aW1lb3V0IGFmdGVyICV1IG1zXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSwKKwkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCisJCSAgICAgICBNV0w4S19DTURfVElNRU9VVF9NUyk7CisJCXJjID0gLUVUSU1FRE9VVDsKKwl9IGVsc2UgeworCQlyYyA9ICpyZXN1bHQgPyAtRUlOVkFMIDogMDsKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29tbWFuZCAlcyBlcnJvciAweCV4XG4iLAorCQkJICAgICAgIHByaXYtPm5hbWUsCisJCQkgICAgICAgbXdsOGtfY21kX25hbWUoY21kLT5jb2RlLCBidWYsIHNpemVvZihidWYpKSwKKwkJCSAgICAgICAqcmVzdWx0KTsKKwl9CisKKwlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBkbWFfc2l6ZSwKKwkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBHRVRfSFdfU1BFQy4KKyAqLworc3RydWN0IG13bDhrX2NtZF9nZXRfaHdfc3BlYyB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fdTggaHdfcmV2OworCV9fdTggaG9zdF9pbnRlcmZhY2U7CisJX19sZTE2IG51bV9tY2FkZHJzOworCV9fdTggcGVybV9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX19sZTE2IHJlZ2lvbl9jb2RlOworCV9fbGUzMiBmd19yZXY7CisJX19sZTMyIHBzX2Nvb2tpZTsKKwlfX2xlMzIgY2FwczsKKwlfX3U4IG1jc19iaXRtYXBbMTZdOworCV9fbGUzMiByeF9xdWV1ZV9wdHI7CisJX19sZTMyIG51bV90eF9xdWV1ZXM7CisJX19sZTMyIHR4X3F1ZXVlX3B0cnNbTVdMOEtfVFhfUVVFVUVTXTsKKwlfX2xlMzIgY2FwczI7CisJX19sZTMyIG51bV90eF9kZXNjX3Blcl9xdWV1ZTsKKwlfX2xlMzIgdG90YWxfcnhfZGVzYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX2dldF9od19zcGVjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF9nZXRfaHdfc3BlYyAqY21kOworCWludCByYzsKKwlpbnQgaTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9HRVRfSFdfU1BFQyk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCW1lbXNldChjbWQtPnBlcm1fYWRkciwgMHhmZiwgc2l6ZW9mKGNtZC0+cGVybV9hZGRyKSk7CisJY21kLT5wc19jb29raWUgPSBjcHVfdG9fbGUzMihwcml2LT5jb29raWVfZG1hKTsKKwljbWQtPnJ4X3F1ZXVlX3B0ciA9IGNwdV90b19sZTMyKHByaXYtPnJ4cVswXS5yeF9kZXNjX2RtYSk7CisJY21kLT5udW1fdHhfcXVldWVzID0gTVdMOEtfVFhfUVVFVUVTOworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJY21kLT50eF9xdWV1ZV9wdHJzW2ldID0gY3B1X3RvX2xlMzIocHJpdi0+dHhxW2ldLnR4X2Rlc2NfZG1hKTsKKwljbWQtPm51bV90eF9kZXNjX3Blcl9xdWV1ZSA9IE1XTDhLX1RYX0RFU0NTOworCWNtZC0+dG90YWxfcnhfZGVzYyA9IE1XTDhLX1JYX0RFU0NTOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworCWlmICghcmMpIHsKKwkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGNtZC0+cGVybV9hZGRyKTsKKwkJcHJpdi0+bnVtX21jYWRkcnMgPSBsZTE2X3RvX2NwdShjbWQtPm51bV9tY2FkZHJzKTsKKwkJcHJpdi0+ZndfcmV2ID0gY21kLT5md19yZXY7CisJCXByaXYtPmh3X3JldiA9IGNtZC0+aHdfcmV2OworCQlwcml2LT5yZWdpb25fY29kZSA9IGxlMTZfdG9fY3B1KGNtZC0+cmVnaW9uX2NvZGUpOworCX0KKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX01BQ19NVUxUSUNBU1RfQURSLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgbnVtYWRkcjsKKwlfX3U4IGFkZHJbMV1bSUVFRTgwMjExX0FERFJfTEVOXTsKK307CisKKyNkZWZpbmUgTVdMOEtfRU5BQkxFX1JYX01VTFRJQ0FTVCAweDAwMEYKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQlpbnQgbWNfY291bnQsCisJCQkJCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisJc3RydWN0IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkciAqY21kOworCWludCBpbmRleCA9IDA7CisJaW50IHJjOworCWludCBzaXplID0gc2l6ZW9mKCpjbWQpICsgKChtY19jb3VudCAtIDEpICogSUVFRTgwMjExX0FERFJfTEVOKTsKKwljbWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01BQ19NVUxUSUNBU1RfQURSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0VOQUJMRV9SWF9NVUxUSUNBU1QpOworCWNtZC0+bnVtYWRkciA9IGNwdV90b19sZTE2KG1jX2NvdW50KTsKKwl3aGlsZSAoKGluZGV4IDwgbWNfY291bnQpICYmIG1jbGlzdCkgeworCQlpZiAobWNsaXN0LT5kYV9hZGRybGVuICE9IElFRUU4MDIxMV9BRERSX0xFTikgeworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHJfZXhpdDsKKwkJfQorCQltZW1jcHkoY21kLT5hZGRyW2luZGV4XSwgbWNsaXN0LT5kYV9hZGRyLCBJRUVFODAyMTFfQUREUl9MRU4pOworCQlpbmRleCsrOworCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJfQorCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyX2V4aXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfODAyXzExX0dFVF9TVEFULgorICovCitzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTMyIHN0YXRzWzY0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfU1RBVF9BQ0tfRkFJTFVSRQk5CisjZGVmaW5lIE1XTDhLX1NUQVRfUlRTX0ZBSUxVUkUJMTIKKyNkZWZpbmUgTVdMOEtfU1RBVF9GQ1NfRVJST1IJMjQKKyNkZWZpbmUgTVdMOEtfU1RBVF9SVFNfU1VDQ0VTUwkxMQorCitzdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0ICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVF9TVEFUKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWlmICghcmMpIHsKKwkJc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9BQ0tfRkFJTFVSRV0pOworCQlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX1JUU19GQUlMVVJFXSk7CisJCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX0ZDU19FUlJPUl0pOworCQlzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX1JUU19TVUNDRVNTXSk7CisJfQorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfODAyXzExX1JBRElPX0NPTlRST0wuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2wgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBjb250cm9sOworCV9fbGUxNiByYWRpb19vbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCAqY21kOworCWludCByYzsKKworCWlmICgoKGVuYWJsZSAmIE1XTDhLX1JBRElPX0VOQUJMRSkgPT0gcHJpdi0+cmFkaW9fc3RhdGUpICYmCisJICAgICEoZW5hYmxlICYgTVdMOEtfUkFESU9fRk9SQ0UpKQorCQlyZXR1cm4gMDsKKworCWVuYWJsZSAmPSBNV0w4S19SQURJT19FTkFCTEU7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUkFESU9fQ09OVFJPTCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+Y29udHJvbCA9IGNwdV90b19sZTE2KHByaXYtPnJhZGlvX3ByZWFtYmxlKTsKKwljbWQtPnJhZGlvX29uID0gY3B1X3RvX2xlMTYoZW5hYmxlID8gMHgwMDAxIDogMHgwMDAwKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCWlmICghcmMpCisJCXByaXYtPnJhZGlvX3N0YXRlID0gZW5hYmxlOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50Cittd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgc2hvcnRfcHJlYW1ibGUpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisKKwlpZiAoaHcgPT0gTlVMTCB8fCBody0+cHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcml2ID0gaHctPnByaXY7CisKKwlwcml2LT5yYWRpb19wcmVhbWJsZSA9IChzaG9ydF9wcmVhbWJsZSA/CisJCU1XTDhLX1JBRElPX1NIT1JUX1BSRUFNQkxFIDoKKwkJTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRSk7CisKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LAorCQkJTVdMOEtfUkFESU9fRU5BQkxFIHwgTVdMOEtfUkFESU9fRk9SQ0UpOworfQorCisvKgorICogQ01EXzgwMl8xMV9SRl9UWF9QT1dFUi4KKyAqLworI2RlZmluZSBNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTAk4CisKK3N0cnVjdCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgc3VwcG9ydF9sZXZlbDsKKwlfX2xlMTYgY3VycmVudF9sZXZlbDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisJX19sZTE2IHBvd2VyX2xldmVsX2xpc3RbTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZEJtKQoreworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JGX1RYX1BPV0VSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5zdXBwb3J0X2xldmVsID0gY3B1X3RvX2xlMTYoZEJtKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUFJFX1NDQU4uCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4gKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1BSRV9TQ0FOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9QT1NUX1NDQU4uCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBpc2lic3M7CisJX191OCBic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludAorbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggbWFjW0lFRUU4MDIxMV9BRERSX0xFTl0pCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9QT1NUX1NDQU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5pc2lic3MgPSAwOworCW1lbWNweShjbWQtPmJzc2lkLCBtYWMsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JGX0NIQU5ORUwuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fdTggY3VycmVudF9jaGFubmVsOworCV9fbGUzMiBjaGFubmVsX2ZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsLT5od192YWx1ZTsKKwlpZiAoY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQljbWQtPmNoYW5uZWxfZmxhZ3MgPSBjcHVfdG9fbGUzMigweDAwMDAwMDgxKTsKKwllbHNlCisJCWNtZC0+Y2hhbm5lbF9mbGFncyA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9TTE9ULgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9zbG90IHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX3U4IHNob3J0X3Nsb3Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfc2xvdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHNsb3RfdGltZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9zbG90ICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9TTE9UKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5zaG9ydF9zbG90ID0gc2xvdF90aW1lID09IE1XTDhLX1NIT1JUX1NMT1RUSU1FID8gMSA6IDA7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfTUlNT19DT05GSUcuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworCV9fdTggcnhfYW50ZW5uYV9tYXA7CisJX191OCB0eF9hbnRlbm5hX21hcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21pbW9fY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHJ4LCBfX3U4IHR4KQoreworCXN0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfTUlNT19DT05GSUcpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMigodTMyKU1XTDhLX0NNRF9TRVQpOworCWNtZC0+cnhfYW50ZW5uYV9tYXAgPSByeDsKKwljbWQtPnR4X2FudGVubmFfbWFwID0gdHg7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfRU5BQkxFX1NOSUZGRVIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19lbmFibGVfc25pZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTMyKCh1MzIpTVdMOEtfQ01EX1NFVCkgOiAwOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SQVRFX0FEQVBUX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG1vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3UxNiBtb2RlKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfV01NX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3dtbSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3NldF93bW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfd21tICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9XTU1fTU9ERSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpIDogMDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCWlmICghcmMpCisJCXByaXYtPndtbV9tb2RlID0gZW5hYmxlOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SVFNfVEhSRVNIT0xELgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3J0c190aHJlc2hvbGQgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiB0aHJlc2hvbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgdTE2IGFjdGlvbiwgdTE2ICp0aHJlc2hvbGQpCit7CisJc3RydWN0IG13bDhrX2NtZF9ydHNfdGhyZXNob2xkICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JUU19USFJFU0hPTEQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihhY3Rpb24pOworCWNtZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYoKnRocmVzaG9sZCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX0VEQ0FfUEFSQU1TLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCisJLyogU2VlIE1XTDhLX1NFVF9FRENBX1hYWCBiZWxvdyAqLworCV9fbGUxNiBhY3Rpb247CisKKwkvKiBUWCBvcHBvcnR1bml0eSBpbiB1bml0cyBvZiAzMiB1cyAqLworCV9fbGUxNiB0eG9wOworCisJLyogTG9nIGV4cG9uZW50IG9mIG1heCBjb250ZW50aW9uIHBlcmlvZDogMC4uLjE1Ki8KKwlfX3U4IGxvZ19jd19tYXg7CisKKwkvKiBMb2cgZXhwb25lbnQgb2YgbWluIGNvbnRlbnRpb24gcGVyaW9kOiAwLi4uMTUgKi8KKwlfX3U4IGxvZ19jd19taW47CisKKwkvKiBBZGFwdGl2ZSBpbnRlcmZyYW1lIHNwYWNpbmcgaW4gdW5pdHMgb2YgMzJ1cyAqLworCV9fdTggYWlmczsKKworCS8qIFRYIHF1ZXVlIHRvIGNvbmZpZ3VyZSAqLworCV9fdTggdHhxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19HRVRfRURDQV9BTEwJMAorI2RlZmluZSBNV0w4S19TRVRfRURDQV9DVwkweDAxCisjZGVmaW5lIE1XTDhLX1NFVF9FRENBX1RYT1AJMHgwMgorI2RlZmluZSBNV0w4S19TRVRfRURDQV9BSUZTCTB4MDQKKworI2RlZmluZSBNV0w4S19TRVRfRURDQV9BTEwJKE1XTDhLX1NFVF9FRENBX0NXIHwgXAorCQkJCSBNV0w4S19TRVRfRURDQV9UWE9QIHwgXAorCQkJCSBNV0w4S19TRVRfRURDQV9BSUZTKQorCitzdGF0aWMgaW50Cittd2w4a19zZXRfZWRjYV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggcW51bSwKKwkJX191MTYgY3dfbWluLCBfX3UxNiBjd19tYXgsCisJCV9fdTggYWlmcywgX191MTYgdHhvcCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyAqY21kOworCXUzMiBsb2dfY3dfbWluLCBsb2dfY3dfbWF4OworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbG9nX2N3X21pbiA9IGlsb2cyKGN3X21pbisxKTsKKwlsb2dfY3dfbWF4ID0gaWxvZzIoY3dfbWF4KzEpOworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19TRVRfRURDQV9BTEwpOworCWNtZC0+dHhvcCA9IGNwdV90b19sZTE2KHR4b3ApOworCWNtZC0+bG9nX2N3X21heCA9ICh1OClsb2dfY3dfbWF4OworCWNtZC0+bG9nX2N3X21pbiA9ICh1OClsb2dfY3dfbWluOworCWNtZC0+YWlmcyA9IGFpZnM7CisJY21kLT50eHEgPSBxbnVtOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0ZJTkFMSVpFX0pPSU4uCisgKi8KKworLyogRkogYmVhY29uIGJ1ZmZlciBzaXplIGlzIGNvbXBpbGVkIGludG8gdGhlIGZpcm13YXJlLiAgKi8KKyNkZWZpbmUgTVdMOEtfRkpfQkVBQ09OX01BWExFTgkxMjgKKworc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIHNsZWVwX2ludGVydmFsOwkvKiBOdW1iZXIgb2YgYmVhY29uIHBlcmlvZHMgdG8gc2xlZXAgKi8KKwlfX3U4IGJlYWNvbl9kYXRhW01XTDhLX0ZKX0JFQUNPTl9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19maW5hbGl6ZV9qb2luKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpmcmFtZSwKKwkJCQlfX3UxNiBmcmFtZWxlbiwgX191MTYgZHRpbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4gKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnBheWxvYWQgPSBmcmFtZTsKKwl1MTYgaGRybGVuOworCXUzMiBwYXlsb2FkX2xlbjsKKwlpbnQgcmM7CisKKwlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwlpZiAoZHRpbSkKKwkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGR0aW0pOworCWVsc2UKKwkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKDEpOworCisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihwYXlsb2FkLT5mcmFtZV9jb250cm9sKTsKKworCXBheWxvYWRfbGVuID0gZnJhbWVsZW4gPiBoZHJsZW4gPyBmcmFtZWxlbiAtIGhkcmxlbiA6IDA7CisKKwkvKiBYWFggVEJEIE1pZ2h0IGp1c3QgaGF2ZSB0byBhYm9ydCBhbmQgcmV0dXJuIGFuIGVycm9yICovCisJaWYgKHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTikKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBXQVJOSU5HOiBJbmNvbXBsZXRlIGJlYWNvbiAiCisJCQkic2VudCB0byBmaXJtd2FyZS4gU3o9JXUgTUFYPSV1XG4iLCBfX2Z1bmNfXywKKwkJCXBheWxvYWRfbGVuLCBNV0w4S19GSl9CRUFDT05fTUFYTEVOKTsKKworCXBheWxvYWRfbGVuID0gcGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOID8KKwkJCQlNV0w4S19GSl9CRUFDT05fTUFYTEVOIDogcGF5bG9hZF9sZW47CisKKwlpZiAocGF5bG9hZCAmJiBwYXlsb2FkX2xlbikKKwkJbWVtY3B5KGNtZC0+YmVhY29uX2RhdGEsICZwYXlsb2FkLT51LmJlYWNvbiwgcGF5bG9hZF9sZW4pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9VUERBVEVfU1RBREIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCisJLyogU2VlIFNUQURCX0FDVElPTl9UWVBFICovCisJX19sZTMyCWFjdGlvbjsKKworCS8qIFBlZXIgTUFDIGFkZHJlc3MgKi8KKwlfX3U4CXBlZXJfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCisJX19sZTMyCXJlc2VydmVkOworCisJLyogUGVlciBpbmZvIC0gdmFsaWQgZHVyaW5nIGFkZC91cGRhdGUuICAqLworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbwlwZWVyX2luZm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBfX3UzMiBhY3Rpb24pCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYiAqY21kOworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyAqcGVlcl9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXMgPSBtdl92aWYtPmxlZ2FjeV9yYXRlczsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlpbnQgcmM7CisJX191OCBjb3VudCwgKnJhdGVzOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VQREFURV9TVEFEQik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsKKwlwZWVyX2luZm8gPSAmY21kLT5wZWVyX2luZm87CisJbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBtdl92aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIE1XTDhLX1NUQV9EQl9BRERfRU5UUlk6CisJY2FzZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZOgorCQkvKiBCdWlsZCBwZWVyX2luZm8gYmxvY2sgKi8KKwkJcGVlcl9pbmZvLT5wZWVyX3R5cGUgPSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQ7CisJCXBlZXJfaW5mby0+YmFzaWNfY2FwcyA9IGNwdV90b19sZTE2KGluZm8tPmFzc29jX2NhcGFiaWxpdHkpOworCQlwZWVyX2luZm8tPmludGVyb3AgPSAxOworCQlwZWVyX2luZm8tPmFtc2R1X2VuYWJsZWQgPSAwOworCisJCXJhdGVzID0gcGVlcl9pbmZvLT5sZWdhY3lfcmF0ZXM7CisJCWZvciAoY291bnQgPSAwIDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCQlyYXRlc1tjb3VudF0gPSBiaXRyYXRlc1tjb3VudF0uaHdfdmFsdWU7CisKKwkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwkJaWYgKHJjID09IDApCisJCQltdl92aWYtPnBlZXJfaWQgPSBwZWVyX2luZm8tPnN0YXRpb25faWQ7CisKKwkJYnJlYWs7CisKKwljYXNlIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlk6CisJY2FzZSBNV0w4S19TVEFfREJfRkxVU0g6CisJZGVmYXVsdDoKKwkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwkJaWYgKHJjID09IDApCisJCQltdl92aWYtPnBlZXJfaWQgPSAwOworCQlicmVhazsKKwl9CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfQUlELgorICovCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfRElTQUJMRUQJCQkweDAwCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfTk9OX01FTUJFUl9QUk9UX01PREUJCTB4MDEKKyNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9PTkVfMjBNSFpfU1RBX1BST1RfTU9ERQkweDAyCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfSFRNSVhFRF9QUk9UX01PREUJCTB4MDMKKworI2RlZmluZSBNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWQkJCTE0CisKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRAkJCTB4MDAKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMUcJCQkJMHgwNworI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZCQkweDAyCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTAkJCTB4MDYKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9NQVNLCQkJCTB4MDcKKworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc2V0X2FpZCB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNglhaWQ7CisKKwkgLyogQVAncyBNQUMgYWRkcmVzcyAoQlNTSUQpICovCisJX191OAlic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCV9fbGUxNglwcm90ZWN0aW9uX21vZGU7CisJX191OAlzdXBwX3JhdGVzW01XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJaW50IGNvdW50OworCXUxNiBwcm90X21vZGU7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9BSUQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5haWQgPSBjcHVfdG9fbGUxNihpbmZvLT5haWQpOworCisJbWVtY3B5KGNtZC0+YnNzaWQsIG12X3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCisJaWYgKGluZm8tPnVzZV9jdHNfcHJvdCkgeworCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExRzsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGluZm8tPmh0Lm9wZXJhdGlvbl9tb2RlICYKKwkJCUlFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT04pIHsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OXzIwTUhaOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fTk9OSFRfTUlYRUQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCWNtZC0+cHJvdGVjdGlvbl9tb2RlID0gY3B1X3RvX2xlMTYocHJvdF9tb2RlKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJY21kLT5zdXBwX3JhdGVzW2NvdW50XSA9IGJpdHJhdGVzW2NvdW50XS5od192YWx1ZTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURS4KKyAqLworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfcmF0ZXNldCB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fdTgJbGVnYWN5X3JhdGVzW01XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZXTsKKworCS8qIEJpdG1hcCBmb3Igc3VwcG9ydGVkIE1DUyBjb2Rlcy4gICovCisJX191OAltY3Nfc2V0W01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworCV9fdTgJcmVzZXJ2ZWRbTVdMOEtfSUVFRV9MRUdBQ1lfREFUQV9SQVRFU107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3VwZGF0ZV9yYXRlc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJaW50IGNvdW50OworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJY21kLT5sZWdhY3lfcmF0ZXNbY291bnRdID0gYml0cmF0ZXNbY291bnRdLmh3X3ZhbHVlOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1VTRV9GSVhFRF9SQVRFLgorICovCisjZGVmaW5lIE1XTDhLX1JBVEVfVEFCTEVfU0laRQk4CisjZGVmaW5lIE1XTDhLX1VDQVNUX1JBVEUJMAorI2RlZmluZSBNV0w4S19NQ0FTVF9SQVRFCTEKKyNkZWZpbmUgTVdMOEtfQkNBU1RfUkFURQkyCisKKyNkZWZpbmUgTVdMOEtfVVNFX0ZJWEVEX1JBVEUJMHgwMDAxCisjZGVmaW5lIE1XTDhLX1VTRV9BVVRPX1JBVEUJMHgwMDAyCisKK3N0cnVjdCBtd2w4a19yYXRlX2VudHJ5IHsKKwkvKiBTZXQgdG8gMSBpZiBIVCByYXRlLCAwIGlmIGxlZ2FjeS4gICovCisJX19sZTMyCWlzX2h0X3JhdGU7CisKKwkvKiBTZXQgdG8gMSB0byB1c2UgcmV0cnlfY291bnQgZmllbGQuICAqLworCV9fbGUzMgllbmFibGVfcmV0cnk7CisKKwkvKiBTcGVjaWZpZWQgbGVnYWN5IHJhdGUgb3IgTUNTLiAgKi8KKwlfX2xlMzIJcmF0ZTsKKworCS8qIE51bWJlciBvZiBhbGxvd2VkIHJldHJpZXMuICAqLworCV9fbGUzMglyZXRyeV9jb3VudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtd2w4a19yYXRlX3RhYmxlIHsKKwkvKiAxIHRvIGFsbG93IHNwZWNpZmllZCByYXRlIGFuZCBiZWxvdyAqLworCV9fbGUzMglhbGxvd19yYXRlX2Ryb3A7CisJX19sZTMyCW51bV9yYXRlczsKKwlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSByYXRlX2VudHJ5W01XTDhLX1JBVEVfVEFCTEVfU0laRV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlIHsKKwlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyCWFjdGlvbjsKKwlzdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSByYXRlX3RhYmxlOworCisJLyogVW5pY2FzdCwgQnJvYWRjYXN0IG9yIE11bHRpY2FzdCAqLworCV9fbGUzMglyYXRlX3R5cGU7CisJX19sZTMyCXJlc2VydmVkMTsKKwlfX2xlMzIJcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJdTMyIGFjdGlvbiwgdTMyIHJhdGVfdHlwZSwgc3RydWN0IG13bDhrX3JhdGVfdGFibGUgKnJhdGVfdGFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZSAqY21kOworCWludCBjb3VudDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7CisJY21kLT5yYXRlX3R5cGUgPSBjcHVfdG9fbGUzMihyYXRlX3R5cGUpOworCisJaWYgKHJhdGVfdGFibGUgIT0gTlVMTCkgeworCQkvKiBDb3B5IG92ZXIgZWFjaCBmaWVsZCBtYW51YWxseSBzbworCQkqIHRoYXQgYml0ZmxpcHBpbmcgY2FuIGJlIGRvbmUKKwkJKi8KKwkJY21kLT5yYXRlX3RhYmxlLmFsbG93X3JhdGVfZHJvcCA9CisJCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+YWxsb3dfcmF0ZV9kcm9wKTsKKwkJY21kLT5yYXRlX3RhYmxlLm51bV9yYXRlcyA9CisJCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+bnVtX3JhdGVzKTsKKworCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCByYXRlX3RhYmxlLT5udW1fcmF0ZXM7IGNvdW50KyspIHsKKwkJCXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5ICpkc3QgPQorCQkJCSZjbWQtPnJhdGVfdGFibGUucmF0ZV9lbnRyeVtjb3VudF07CisJCQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSAqc3JjID0KKwkJCQkmcmF0ZV90YWJsZS0+cmF0ZV9lbnRyeVtjb3VudF07CisKKwkJCWRzdC0+aXNfaHRfcmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+aXNfaHRfcmF0ZSk7CisJCQlkc3QtPmVuYWJsZV9yZXRyeSA9IGNwdV90b19sZTMyKHNyYy0+ZW5hYmxlX3JldHJ5KTsKKwkJCWRzdC0+cmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+cmF0ZSk7CisJCQlkc3QtPnJldHJ5X2NvdW50ID0gY3B1X3RvX2xlMzIoc3JjLT5yZXRyeV9jb3VudCk7CisJCX0KKwl9CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIEludGVycnVwdCBoYW5kbGluZy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG13bDhrX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJaW93cml0ZTMyKH5zdGF0dXMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCisJc3RhdHVzICY9IHByaXYtPmludF9tYXNrOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9UWF9ET05FKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkpIHsKKwkJd2hpbGUgKHJ4cV9wcm9jZXNzKGh3LCAwLCAxKSkKKwkJCXJ4cV9yZWZpbGwoaHcsIDAsIDEpOworCX0KKworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX09QQ19ET05FKSB7CisJCWlmIChwcml2LT5ob3N0Y21kX3dhaXQgIT0gTlVMTCkgeworCQkJY29tcGxldGUocHJpdi0+aG9zdGNtZF93YWl0KTsKKwkJCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9RVUVVRV9FTVBUWSkgeworCQlpZiAoIXByaXYtPmluY29uZmlnICYmCisJCQlwcml2LT5yYWRpb19zdGF0ZSAmJgorCQkJbXdsOGtfdHhxX2J1c3kocHJpdikpCisJCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qCisgKiBDb3JlIGRyaXZlciBvcGVyYXRpb25zLgorICovCitzdGF0aWMgaW50IG13bDhrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGluZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJaW50IHJjOworCisJaWYgKHByaXYtPmN1cnJlbnRfY2hhbm5lbCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyAiCisJCSAgICAgICAiZGlzYWJsZWRcbiIsIHByaXYtPm5hbWUpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJcmMgPSBtd2w4a190eHFfeG1pdChodywgaW5kZXgsIHNrYik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a193b3JrX3N0cnVjdCB7CisJLyogSW5pdGlhbGl6ZWQgYnkgbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3Q7CisKKwkvKiBSZXF1aXJlZCBmaWVsZCBwYXNzZWQgaW4gdG8gbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKworCS8qIFJlcXVpcmVkIGZpZWxkIHBhc3NlZCBpbiB0byBtd2w4a19xdWV1ZV93b3JrKCkuICAqLworCWludCAoKndmdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpOworCisJLyogSW5pdGlhbGl6ZWQgYnkgbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiAqY21kX3dhaXQ7CisKKwkvKiBSZXN1bHQgY29kZS4gICovCisJaW50IHJjOworCisJLyoKKwkgKiBPcHRpb25hbCBmaWVsZC4gUmVmZXIgdG8gZXhwbGFuYXRpb24gb2YgTVdMOEtfV1FfWFhYX1hYWAorCSAqIGZsYWdzIGZvciBleHBsYW5hdGlvbi4gIERlZmF1bHRzIHRvIE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUy4KKwkgKi8KKwl1MzIgb3B0aW9uczsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfQ09ORklHX1RJTUVPVVRfTVMuICAqLworCXVuc2lnbmVkIGxvbmcgdGltZW91dF9tczsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTLiAgKi8KKwl1MzIgdHh3YWl0X2F0dGVtcHRzOworCisJLyogT3B0aW9uYWwgZmllbGQuICBEZWZhdWx0cyB0byBNV0w4S19UWFdBSVRfTVMuICAqLworCXUzMiB0eF90aW1lb3V0X21zOworCXUzMiBzdGVwOworfTsKKworLyogRmxhZ3MgY29udHJvbGxpbmcgYmVoYXZpb3Igb2YgY29uZmlnIHF1ZXVlIHJlcXVlc3RzICovCisKKy8qIENhbGxlciBzcGlucyB3aGlsZSB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfU1BJTgkJCTB4MDAwMDAwMDEKKworLyogV2FpdCBmb3IgVFggcXVldWVzIHRvIGVtcHR5IGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkJCTB4MDAwMDAwMDIKKworLyogUXVldWUgcmVxdWVzdCBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfUE9TVF9SRVFVRVNUCQkweDAwMDAwMDA0CisKKy8qCisgKiBDYWxsZXIgc2xlZXBzIGFuZCB3YWl0cyBmb3IgdGFzayBjb21wbGV0ZSBub3RpZmljYXRpb24uCisgKiBEbyBub3QgdXNlIGluIGF0b21pYyBjb250ZXh0LgorICovCisjZGVmaW5lIE1XTDhLX1dRX1NMRUVQCQkJMHgwMDAwMDAwOAorCisvKiBGcmVlIHdvcmsgc3RydWN0IHdoZW4gdGFzayBpcyBkb25lLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUCTB4MDAwMDAwMTAKKworLyoKKyAqIENvbmZpZyByZXF1ZXN0IGlzIHF1ZXVlZCBhbmQgcmV0dXJucyB0byBjYWxsZXIgaW1lZGlhdGVseS4gIFVzZQorICogdGhpcyBpbiBhdG9taWMgY29udGV4dC4gV29yayBzdHJ1Y3QgaXMgZnJlZWQgYnkgbXdsOGtfcXVldWVfd29yaygpCisgKiB3aGVuIHRoaXMgZmxhZyBpcyBzZXQuCisgKi8KKyNkZWZpbmUgTVdMOEtfV1FfUVVFVUVfT05MWQkoTVdMOEtfV1FfUE9TVF9SRVFVRVNUIHwgXAorCQkJCSBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QpCisKKy8qIERlZmF1bHQgd29yayBxdWV1ZSBiZWhhdmlvciBpcyB0byBzbGVlcCBhbmQgd2FpdCBmb3IgdHggY29tcGxldGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUyAoTVdMOEtfV1FfU0xFRVAgfCBNV0w4S19XUV9UWF9XQUlUX0VNUFRZKQorCisvKgorICogRGVmYXVsdCBjb25maWcgcmVxdWVzdCB0aW1lb3V0LiAgQWRkIGFkanVzdG1lbnRzIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIGNvbmZpZyB0aHJlYWQgd2FpdHMgbG9uZyBlbm91Z2ggZm9yIGJvdGggdHggd2FpdCBhbmQgY21kIHdhaXQgYmVmb3JlCisgKiB0aW1pbmcgb3V0LgorICovCisKKy8qIFRpbWUgdG8gd2FpdCBmb3IgYWxsIFRYUXMgdG8gZHJhaW4uICBUWCBEb29yYmVsbCBpcyBwcmVzc2VkIGVhY2ggdGltZS4gICovCisjZGVmaW5lIE1XTDhLX1RYV0FJVF9USU1FT1VUX01TCQkxMDAwCisKKy8qIERlZmF1bHQgbnVtYmVyIG9mIFRYIHdhaXQgYXR0ZW1wdHMuICAqLworI2RlZmluZSBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMJNAorCisvKiBUb3RhbCB0aW1lIHRvIHdhaXQgZm9yIFRYUSB0byBkcmFpbi4gICovCisjZGVmaW5lIE1XTDhLX1RYV0FJVF9NUwkJCShNV0w4S19UWFdBSVRfVElNRU9VVF9NUyAqIFwKKwkJCQkJCU1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUykKKworLyogU2NoZWR1bGluZyBzbG9wLiAgKi8KKyNkZWZpbmUgTVdMOEtfT1NfU0NIRURVTEVfT1ZFUkhFQURfTVMJMjAwCisKKyNkZWZpbmUgTVdMOEtfQ09ORklHX1RJTUVPVVRfTVMJKE1XTDhLX0NNRF9USU1FT1VUX01TICsgXAorCQkJCSBNV0w4S19UWFdBSVRfTVMgKyBcCisJCQkJIE1XTDhLX09TX1NDSEVEVUxFX09WRVJIRUFEX01TKQorCitzdGF0aWMgdm9pZCBtd2w4a19jb25maWdfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmh3OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCXByaXYtPmluY29uZmlnID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKworCS8qCisJICogV2FpdCBmb3IgaG9zdCBxdWV1ZXMgdG8gZHJhaW4gYmVmb3JlIGRvaW5nIFBIWQorCSAqIHJlY29uZmlndXJhdGlvbi4gVGhpcyBhdm9pZHMgaW50ZXJydXB0aW5nIGFueSBpbi1mbGlnaHQKKwkgKiBETUEgdHJhbnNmZXJzIHRvIHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWSkgeworCQl1MzIgdGltZW91dDsKKwkJdTMyIHRpbWVfcmVtYWluaW5nOworCQl1MzIgaXRlcjsKKwkJdTMyIHR4X3dhaXRfYXR0ZW1wdHMgPSB3b3JrZXItPnR4d2FpdF9hdHRlbXB0czsKKworCQl0aW1lX3JlbWFpbmluZyA9IHdvcmtlci0+dHhfdGltZW91dF9tczsKKwkJaWYgKCF0eF93YWl0X2F0dGVtcHRzKQorCQkJdHhfd2FpdF9hdHRlbXB0cyA9IDE7CisKKwkJdGltZW91dCA9IHdvcmtlci0+dHhfdGltZW91dF9tcy90eF93YWl0X2F0dGVtcHRzOworCQlpZiAoIXRpbWVvdXQpCisJCQl0aW1lb3V0ID0gMTsKKworCQlpdGVyID0gdHhfd2FpdF9hdHRlbXB0czsKKwkJZG8geworCQkJaW50IHdhaXRfdGltZTsKKworCQkJaWYgKHRpbWVfcmVtYWluaW5nID4gdGltZW91dCkgeworCQkJCXRpbWVfcmVtYWluaW5nIC09IHRpbWVvdXQ7CisJCQkJd2FpdF90aW1lID0gdGltZW91dDsKKwkJCX0gZWxzZQorCQkJCXdhaXRfdGltZSA9IHRpbWVfcmVtYWluaW5nOworCisJCQlpZiAoIXdhaXRfdGltZSkKKwkJCQl3YWl0X3RpbWUgPSAxOworCisJCQlyYyA9IG13bDhrX3R4X3dhaXRfZW1wdHkoaHcsIHdhaXRfdGltZSk7CisJCQlpZiAocmMpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHR4d2FpdCB0aW1lb3V0PSV1bXMgIgorCQkJCQkiUmV0cnk6JXUvJXVcbiIsIF9fZnVuY19fLCB0aW1lb3V0LAorCQkJCQl0eF93YWl0X2F0dGVtcHRzIC0gaXRlciArIDEsCisJCQkJCXR4X3dhaXRfYXR0ZW1wdHMpOworCisJCX0gd2hpbGUgKHJjICYmIC0taXRlcik7CisKKwkJcmMgPSBpdGVyID8gMCA6IC1FVElNRURPVVQ7CisJfQorCWlmICghcmMpCisJCXJjID0gd29ya2VyLT53ZnVuYyh3dCk7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlwcml2LT5pbmNvbmZpZyA9IGZhbHNlOworCWlmIChwcml2LT5wZW5kaW5nX3R4X3BrdHMgJiYgcHJpdi0+cmFkaW9fc3RhdGUpCisJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKKworCXdvcmtlci0+cmMgPSByYzsKKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU0xFRVApCisJCWNvbXBsZXRlKHdvcmtlci0+Y21kX3dhaXQpOworCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVCkKKwkJa2ZyZWUod3QpOworfQorCitzdGF0aWMgaW50IG13bDhrX3F1ZXVlX3dvcmsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICp3b3JrZXIsCisJCQkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxdWV1ZSwKKwkJCQlpbnQgKCp3ZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3KSkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCWludCByYyA9IDA7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjbWRfd2FpdCk7CisKKwlpZiAoIXdvcmtlci0+dGltZW91dF9tcykKKwkJd29ya2VyLT50aW1lb3V0X21zID0gTVdMOEtfQ09ORklHX1RJTUVPVVRfTVM7CisKKwlpZiAoIXdvcmtlci0+b3B0aW9ucykKKwkJd29ya2VyLT5vcHRpb25zID0gTVdMOEtfV1FfREVGQVVMVF9PUFRJT05TOworCisJaWYgKCF3b3JrZXItPnR4d2FpdF9hdHRlbXB0cykKKwkJd29ya2VyLT50eHdhaXRfYXR0ZW1wdHMgPSBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFM7CisKKwlpZiAoIXdvcmtlci0+dHhfdGltZW91dF9tcykKKwkJd29ya2VyLT50eF90aW1lb3V0X21zID0gTVdMOEtfVFhXQUlUX01TOworCisJd29ya2VyLT5odyA9IGh3OworCXdvcmtlci0+Y21kX3dhaXQgPSAmY21kX3dhaXQ7CisJd29ya2VyLT5yYyA9IDE7CisJd29ya2VyLT53ZnVuYyA9IHdmdW5jOworCisJSU5JVF9XT1JLKCZ3b3JrZXItPnd0LCBtd2w4a19jb25maWdfdGhyZWFkKTsKKwlxdWV1ZV93b3JrKHdxdWV1ZSwgJndvcmtlci0+d3QpOworCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1BPU1RfUkVRVUVTVCkgeworCQlyYyA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NQSU4pIHsKKwkJCXRpbWVvdXQgPSB3b3JrZXItPnRpbWVvdXRfbXM7CisJCQl3aGlsZSAodGltZW91dCAmJiAod29ya2VyLT5yYyA+IDApKSB7CisJCQkJbWRlbGF5KDEpOworCQkJCXRpbWVvdXQtLTsKKwkJCX0KKwkJfSBlbHNlIGlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TTEVFUCkKKwkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAorCQkJCW1zZWNzX3RvX2ppZmZpZXMod29ya2VyLT50aW1lb3V0X21zKSk7CisKKwkJaWYgKHRpbWVvdXQpCisJCQlyYyA9IHdvcmtlci0+cmM7CisJCWVsc2UgeworCQkJY2FuY2VsX3dvcmtfc3luYygmd29ya2VyLT53dCk7CisJCQlyYyA9IC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3N0YXJ0X3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqd29ya2VyID0gKHN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCWlmIChwcml2LT52aWYgIT0gTlVMTCkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBUdXJuIG9uIHJhZGlvICovCisJaWYgKG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRU5BQkxFKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBQdXJnZSBUWC9SWCBIVyBxdWV1ZXMgKi8KKwlpZiAobXdsOGtfY21kX3NldF9wcmVfc2NhbihodykpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJaWYgKG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKGh3LCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIikpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogRW5hYmxlIGZpcm13YXJlIHJhdGUgYWRhcHRhdGlvbiAqLworCWlmIChtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShodywgMCkpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogRGlzYWJsZSBXTU0uIFdNTSBnZXRzIGVuYWJsZWQgd2hlbiBzdGFjayBzZW5kcyBXTU0gcGFybXMgKi8KKwlpZiAobXdsOGtfc2V0X3dtbShodywgTVdMOEtfV01NX0RJU0FCTEUpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIERpc2FibGUgc25pZmZlciBtb2RlICovCisJaWYgKG13bDhrX2VuYWJsZV9zbmlmZmVyKGh3LCAwKSkKKwkJcmMgPSAtRUlPOworCittd2w4a19zdGFydF9leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmM7CisKKwkvKiBFbmFibGUgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9lbmFibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJm13bDhrX2ludGVycnVwdCwKKwkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2Rpc2FibGVfdGFza2xldDsKKwl9CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbXdsOGtfc3RhcnRfZGlzYWJsZV9pcnE7CisJfQorCisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX3N0YXJ0X3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmICghcmMpCisJCXJldHVybiByYzsKKworCWlmIChyYyA9PSAtRVRJTUVET1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisKKwlyYyA9IC1FSU87CisKK213bDhrX3N0YXJ0X2Rpc2FibGVfaXJxOgorCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworbXdsOGtfc3RhcnRfZGlzYWJsZV90YXNrbGV0OgorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCXJldHVybiByYzsKK30KKworc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworfTsKKworc3RhdGljIGludCBtd2w4a19zdG9wX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlpbnQgcmM7CisKKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGk7CisKKwlpZiAocHJpdi0+dmlmICE9IE5VTEwpCisJCXJldHVybjsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfc3RvcF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCisJLyogU3RvcCBmaW5hbGl6ZSBqb2luIHdvcmtlciAqLworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwlpZiAocHJpdi0+YmVhY29uX3NrYiAhPSBOVUxMKQorCQlkZXZfa2ZyZWVfc2tiKHByaXYtPmJlYWNvbl9za2IpOworCisJLyogU3RvcCB0eCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwkvKiBTdG9wIGNvbmZpZyB0aHJlYWQgKi8KKwlmbHVzaF93b3JrcXVldWUocHJpdi0+Y29uZmlnX3dxKTsKKworCS8qIFJldHVybiBhbGwgc2ticyB0byBtYWM4MDIxMSAqLworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDEpOworfQorCitzdGF0aWMgaW50IG13bDhrX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCisJICovCisJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgbWFuYWdlZCBpbnRlcmZhY2VzIGZvciBub3cuCisJICovCisJaWYgKGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2xlYW4gb3V0IGRyaXZlciBwcml2YXRlIGFyZWEgKi8KKwltd2w4a192aWYgPSBNV0w4S19WSUYoY29uZi0+dmlmKTsKKwltZW1zZXQobXdsOGtfdmlmLCAwLCBzaXplb2YoKm13bDhrX3ZpZikpOworCisJLyogU2F2ZSB0aGUgbWFjIGFkZHJlc3MgKi8KKwltZW1jcHkobXdsOGtfdmlmLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwkvKiBCYWNrIHBvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLworCW13bDhrX3ZpZi0+cHJpdiA9IHByaXY7CisKKwkvKiBTZXR1cCBpbml0aWFsIFBIWSBwYXJhbWV0ZXJzICovCisJbWVtY3B5KG13bDhrX3ZpZi0+bGVnYWN5X3JhdGVzICwKKwkJcHJpdi0+cmF0ZXMsIHNpemVvZihtd2w4a192aWYtPmxlZ2FjeV9yYXRlcykpOworCW13bDhrX3ZpZi0+bGVnYWN5X25yYXRlcyA9IEFSUkFZX1NJWkUocHJpdi0+cmF0ZXMpOworCisJLyogU2V0IEluaXRpYWwgc2VxdWVuY2UgbnVtYmVyIHRvIHplcm8gKi8KKwltd2w4a192aWYtPnNlcW5vID0gMDsKKworCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmIChwcml2LT52aWYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcHJpdi0+dmlmID0gTlVMTDsKK30KKworc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdTMyIGNoYW5nZWQ7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZ193dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKKwkJbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwkJcHJpdi0+Y3VycmVudF9jaGFubmVsID0gTlVMTDsKKwkJcmMgPSAwOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCWlmIChtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0VOQUJMRSkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisKKwlpZiAobXdsOGtfY21kX3NldF9yZl9jaGFubmVsKGh3LCBjb25mLT5jaGFubmVsKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJaWYgKGNvbmYtPnBvd2VyX2xldmVsID4gMTgpCisJCWNvbmYtPnBvd2VyX2xldmVsID0gMTg7CisJaWYgKG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIoaHcsIGNvbmYtPnBvd2VyX2xldmVsKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJaWYgKG13bDhrX2NtZF9taW1vX2NvbmZpZyhodywgMHg3LCAweDcpKQorCQlyYyA9IC1FSU5WQUw7CisKK213bDhrX2NvbmZpZ19leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCWludCByYyA9IDA7CisJc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPmNoYW5nZWQgPSBjaGFuZ2VkOworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19jb25maWdfd3QpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXQuXG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZSh3b3JrZXIpOworCisJLyoKKwkgKiBtYWM4MDIxMSB3aWxsIGNyYXNoIG9uIGFueXRoaW5nIG90aGVyIHRoYW4gLUVJTlZBTCBvbgorCSAqIGVycm9yLiBMb29rcyBsaWtlIHdpcmVsZXNzIGV4dGVuc2lvbnMgd2hpY2ggY2FsbHMgbWFjODAyMTEKKwkgKiBtYXkgYmUgdGhlIGFjdHVhbCBjdWxwcml0Li4uCisJICovCisJcmV0dXJuIHJjID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJdTMyIGNoYW5nZWQgPSBjb25mLT5jaGFuZ2VkOworCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CU1NJRCkKKwkJbWVtY3B5KG12X3ZpZi0+YnNzaWQsIGNvbmYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm87CisJdTMyIGNoYW5nZWQ7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSB3b3JrZXItPnZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvID0gd29ya2VyLT5pbmZvOworCXUzMiBjaGFuZ2VkOworCWludCByYzsKKworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmID0gTVdMOEtfVklGKHZpZik7CisKKwljaGFuZ2VkID0gd29ya2VyLT5jaGFuZ2VkOworCXByaXYtPmNhcHR1cmVfYmVhY29uID0gZmFsc2U7CisKKwlpZiAoaW5mby0+YXNzb2MpIHsKKwkJbWVtY3B5KCZtd2w4a192aWYtPmJzc19pbmZvLCBpbmZvLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKworCQkvKiBJbnN0YWxsIHJhdGVzICovCisJCWlmIChtd2w4a191cGRhdGVfcmF0ZXNldChodywgdmlmKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFR1cm4gb24gcmF0ZSBhZGFwdGF0aW9uICovCisJCWlmIChtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoaHcsIE1XTDhLX1VTRV9BVVRPX1JBVEUsCisJCQlNV0w4S19VQ0FTVF9SQVRFLCBOVUxMKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFNldCByYWRpbyBwcmVhbWJsZSAqLworCQlpZiAobXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKGh3LAorCQkJCWluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSkpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBTZXQgc2xvdCB0aW1lICovCisJCWlmIChtd2w4a19jbWRfc2V0X3Nsb3QoaHcsIGluZm8tPnVzZV9zaG9ydF9zbG90ID8KKwkJCQlNV0w4S19TSE9SVF9TTE9UVElNRSA6IE1XTDhLX0xPTkdfU0xPVFRJTUUpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogVXBkYXRlIHBlZXIgcmF0ZSBpbmZvICovCisJCWlmIChtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLAorCQkJCU1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogU2V0IEFJRCAqLworCQlpZiAobXdsOGtfY21kX3NldF9haWQoaHcsIHZpZikpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKgorCQkgKiBGaW5hbGl6ZSB0aGUgam9pbi4gIFRlbGwgcnggaGFuZGxlciB0byBwcm9jZXNzCisJCSAqIG5leHQgYmVhY29uIGZyb20gb3VyIEJTU0lELgorCQkgKi8KKwkJbWVtY3B5KHByaXYtPmNhcHR1cmVfYnNzaWQsCisJCQkJbXdsOGtfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwkJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSB0cnVlOworCX0gZWxzZSB7CisJCW13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkpOworCQltZW1zZXQoJm13bDhrX3ZpZi0+YnNzX2luZm8sIDAsCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZikpOworCQltZW1zZXQobXdsOGtfdmlmLT5ic3NpZCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwl9CisKK213bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDoKKwlyYyA9IDA7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKKwkJCQkgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYzsKKworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSA9PSAwKQorCQlyZXR1cm47CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl3b3JrZXItPnZpZiA9IHZpZjsKKwl3b3JrZXItPmluZm8gPSBpbmZvOworCXdvcmtlci0+Y2hhbmdlZCA9IGNoYW5nZWQ7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsCisJCQkgICAgICBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFnczsKKwl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzOworCWludCBtY19jb3VudDsKKwlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0OworfTsKKworI2RlZmluZSBNV0w4S19TVVBQT1JURURfSUZfRkxBR1MJRklGX0JDTl9QUkJSRVNQX1BST01JU0MKKworc3RhdGljIGludCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzID0gd29ya2VyLT5jaGFuZ2VkX2ZsYWdzOworCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MgPSB3b3JrZXItPnRvdGFsX2ZsYWdzOworCWludCBtY19jb3VudCA9IHdvcmtlci0+bWNfY291bnQ7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCA9IHdvcmtlci0+bWNsaXN0OworCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWY7CisJaW50IHJjID0gMDsKKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQorCQkJcmMgPSBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KTsKKwkJZWxzZSB7CisJCQltdl92aWYgPSBNV0w4S19WSUYocHJpdi0+dmlmKTsKKwkJCXJjID0gbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsIG12X3ZpZi0+YnNzaWQpOworCQl9CisJfQorCisJaWYgKHJjKQorCQlnb3RvIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfZXhpdDsKKwlpZiAobWNfY291bnQpIHsKKwkJbWNfY291bnQgPSBtY19jb3VudCA8IHByaXYtPm51bV9tY2FkZHJzID8KKwkJCQltY19jb3VudCA6IHByaXYtPm51bV9tY2FkZHJzOworCQlyYyA9IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkcihodywgbWNfY291bnQsIG1jbGlzdCk7CisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzKClFcnJvciBzZXR0aW5nIG11bHRpY2FzdCBhZGRyZXNzZXNcbiIsCisJCQlfX2Z1bmNfXyk7CisJfQorCittd2w4a19jb25maWd1cmVfZmlsdGVyX2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJICAgaW50IG1jX2NvdW50LAorCQkJCSAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisKKwlzdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJLyogQ2xlYXIgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmbGFncyAqLworCSp0b3RhbF9mbGFncyAmPSBNV0w4S19TVVBQT1JURURfSUZfRkxBR1M7CisKKwlpZiAoIShjaGFuZ2VkX2ZsYWdzICYgTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTKSAmJiAhbWNfY291bnQpCisJCXJldHVybjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfQVRPTUlDKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybjsKKworCXdvcmtlci0+aGVhZGVyLm9wdGlvbnMgPSBNV0w4S19XUV9RVUVVRV9PTkxZIHwgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWTsKKwl3b3JrZXItPmNoYW5nZWRfZmxhZ3MgPSBjaGFuZ2VkX2ZsYWdzOworCXdvcmtlci0+dG90YWxfZmxhZ3MgPSB0b3RhbF9mbGFnczsKKwl3b3JrZXItPm1jX2NvdW50ID0gbWNfY291bnQ7CisJd29ya2VyLT5tY2xpc3QgPSBtY2xpc3Q7CisKKwltd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsIHByaXYtPmNvbmZpZ193cSwKKwkJCSBtd2w4a19jb25maWd1cmVfZmlsdGVyX3d0KTsKK30KKworc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1MzIgdmFsdWU7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKil3dDsKKworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJdTE2IHRocmVzaG9sZCA9ICh1MTYpKHdvcmtlci0+dmFsdWUpOworCWludCByYzsKKworCXJjID0gbXdsOGtfcnRzX3RocmVzaG9sZChodywgTVdMOEtfQ01EX1NFVCwgJnRocmVzaG9sZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+dmFsdWUgPSB2YWx1ZTsKKworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLAorCQkJICAgICAgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd3QpOworCWtmcmVlKHdvcmtlcik7CisKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1MTYgcXVldWU7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtczsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZl90eF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyID0KKwkoc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXUxNiBxdWV1ZSA9IHdvcmtlci0+cXVldWU7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyA9IHdvcmtlci0+cGFyYW1zOworCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCisJaWYgKHByaXYtPndtbV9tb2RlID09IE1XTDhLX1dNTV9ESVNBQkxFKQorCQlpZiAobXdsOGtfc2V0X3dtbShodywgTVdMOEtfV01NX0VOQUJMRSkpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gbXdsOGtfY29uZl90eF9leGl0OworCX0KKworCWlmIChtd2w4a19zZXRfZWRjYV9wYXJhbXMoaHcsIEdFVF9UWFEocXVldWUpLCBwYXJhbXMtPmN3X21pbiwKKwkJcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wKSkKKwkJCXJjID0gLUVJTlZBTDsKK213bDhrX2NvbmZfdHhfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+cXVldWUgPSBxdWV1ZTsKKwl3b3JrZXItPnBhcmFtcyA9IHBhcmFtczsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfY29uZl90eF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CisJaW50IGluZGV4OworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNV0w4S19UWF9RVUVVRVM7IGluZGV4KyspIHsKKwkJdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CisJCW1lbWNweSgmc3RhdHNbaW5kZXhdLCAmdHhxLT50eF9zdGF0cywKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzOworfTsKKworc3RhdGljIGludCBtd2w4a19nZXRfc3RhdHNfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyICopd3Q7CisKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCh3b3JrZXItPmhlYWRlci5odywgd29ya2VyLT5zdGF0cyk7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+c3RhdHMgPSBzdGF0czsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfZ2V0X3N0YXRzX3d0KTsKKworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsOGtfb3BzID0geworCS50eAkJCT0gbXdsOGtfdHgsCisJLnN0YXJ0CQkJPSBtd2w4a19zdGFydCwKKwkuc3RvcAkJCT0gbXdsOGtfc3RvcCwKKwkuYWRkX2ludGVyZmFjZQkJPSBtd2w4a19hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gbXdsOGtfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSBtd2w4a19jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UJPSBtd2w4a19jb25maWdfaW50ZXJmYWNlLAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gbXdsOGtfYnNzX2luZm9fY2hhbmdlZCwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF9ydHNfdGhyZXNob2xkCT0gbXdsOGtfc2V0X3J0c190aHJlc2hvbGQsCisJLmNvbmZfdHgJCT0gbXdsOGtfY29uZl90eCwKKwkuZ2V0X3R4X3N0YXRzCQk9IG13bDhrX2dldF90eF9zdGF0cywKKwkuZ2V0X3N0YXRzCQk9IG13bDhrX2dldF9zdGF0cywKK307CisKK3N0YXRpYyB2b2lkIG13bDhrX3R4X3JlY2xhaW1faGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKSBkYXRhOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDApOworCisJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkgeworCQlpbnQgY291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKKwkJaWYgKGNvdW50ID09IDApIHsKKwkJCWNvbXBsZXRlKHByaXYtPnR4X3dhaXQpOworCQkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG13bDhrX3ByaXYsIGZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+YmVhY29uX3NrYjsKKwl1OCBkdGltID0gKE1XTDhLX1ZJRihwcml2LT52aWYpKS0+YnNzX2luZm8uZHRpbV9wZXJpb2Q7CisKKwltd2w4a19maW5hbGl6ZV9qb2luKHByaXYtPmh3LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBkdGltKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlwcml2LT5iZWFjb25fc2tiID0gTlVMTDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXdsOGtfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlpbnQgcmM7CisJaW50IGk7CisJdTggKmZ3OworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGVuYWJsZSBuZXcgUENJIGRldmljZVxuIiwKKwkJICAgICAgIE1XTDhLX05BTUUpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIE1XTDhLX05BTUUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCisJCSAgICAgICBNV0w4S19OQU1FKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJm13bDhrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIiwgTVdMOEtfTkFNRSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9yZWc7CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisJcHJpdi0+cGRldiA9IHBkZXY7CisJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwlwcml2LT50eF93YWl0ID0gTlVMTDsKKwlwcml2LT5pbmNvbmZpZyA9IGZhbHNlOworCXByaXYtPndlcF9lbmFibGVkID0gMDsKKwlwcml2LT53bW1fbW9kZSA9IGZhbHNlOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cyA9IDA7CisJc3RybmNweShwcml2LT5uYW1lLCBNV0w4S19OQU1FLCBzaXplb2YocHJpdi0+bmFtZSkpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmZ3X2xvY2spOworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisKKwlwcml2LT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDEsIDB4MTAwMDApOworCWlmIChwcml2LT5yZWdzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIG13bDhrX2NoYW5uZWxzLCBzaXplb2YobXdsOGtfY2hhbm5lbHMpKTsKKwlwcml2LT5iYW5kLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCXByaXYtPmJhbmQuY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKKwlwcml2LT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13bDhrX2NoYW5uZWxzKTsKKwlwcml2LT5iYW5kLmJpdHJhdGVzID0gcHJpdi0+cmF0ZXM7CisJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShtd2w4a19yYXRlcyk7CisJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5yYXRlcykgIT0gc2l6ZW9mKG13bDhrX3JhdGVzKSk7CisJbWVtY3B5KHByaXYtPnJhdGVzLCBtd2w4a19yYXRlcywgc2l6ZW9mKG13bDhrX3JhdGVzKSk7CisKKwkvKgorCSAqIEV4dHJhIGhlYWRyb29tIGlzIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBETUEgaGVhZGVyCisJICogbWludXMgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IDgwMi4xMSBmcmFtZSAoQ1RTIGZyYW1lKS4KKwkgKi8KKwlody0+ZXh0cmFfdHhfaGVhZHJvb20gPQorCQlzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2N0cyk7CisKKwlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwOworCisJaHctPnF1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKKworCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOworCisJLyogU2V0IHJzc2kgYW5kIG5vaXNlIHZhbHVlcyB0byBkQm0gKi8KKwlody0+ZmxhZ3MgfD0gKElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX05PSVNFX0RCTSk7CisJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG13bDhrX3ZpZik7CisJcHJpdi0+dmlmID0gTlVMTDsKKworCS8qIFNldCBkZWZhdWx0IHJhZGlvIHN0YXRlIGFuZCBwcmVhbWJsZSAqLworCXByaXYtPnJhZGlvX3ByZWFtYmxlID0gTVdMOEtfUkFESU9fREVGQVVMVF9QUkVBTUJMRTsKKwlwcml2LT5yYWRpb19zdGF0ZSA9IE1XTDhLX1JBRElPX0RJU0FCTEU7CisKKwkvKiBGaW5hbGl6ZSBqb2luIHdvcmtlciAqLworCUlOSVRfV09SSygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIsIG13bDhrX2ZpbmFsaXplX2pvaW5fd29ya2VyKTsKKworCS8qIFRYIHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfaW5pdCgmcHJpdi0+dHhfcmVjbGFpbV90YXNrLAorCQkJbXdsOGtfdHhfcmVjbGFpbV9oYW5kbGVyLCAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogQ29uZmlnIHdvcmt0aHJlYWQgKi8KKwlwcml2LT5jb25maWdfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibXdsOGtfY29uZmlnIik7CisJaWYgKHByaXYtPmNvbmZpZ193cSA9PSBOVUxMKQorCQlnb3RvIGVycl9pb3VubWFwOworCisJLyogUG93ZXIgbWFuYWdlbWVudCBjb29raWUgKi8KKwlwcml2LT5jb29raWUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LCAmcHJpdi0+Y29va2llX2RtYSk7CisJaWYgKHByaXYtPmNvb2tpZSA9PSBOVUxMKQorCQlnb3RvIGVycl9pb3VubWFwOworCisJcmMgPSBtd2w4a19yeHFfaW5pdChodywgMCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9pb3VubWFwOworCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7CisJCXJjID0gbXdsOGtfdHhxX2luaXQoaHcsIGkpOworCQlpZiAocmMpCisJCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKwl9CisKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJcHJpdi0+aW50X21hc2sgPSAwOworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKKwlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKKworCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmbXdsOGtfaW50ZXJydXB0LAorCQkJIElSUUZfU0hBUkVELCBNV0w4S19OQU1FLCBodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKwl9CisKKwkvKiBSZXNldCBmaXJtd2FyZSBhbmQgaGFyZHdhcmUgKi8KKwltd2w4a19od19yZXNldChwcml2KTsKKworCS8qIEFzayB1c2VybGFuZCBob3RwbHVnIGRhZW1vbiBmb3IgdGhlIGRldmljZSBmaXJtd2FyZSAqLworCXJjID0gbXdsOGtfcmVxdWVzdF9maXJtd2FyZShwcml2LCAodTMyKWlkLT5kcml2ZXJfZGF0YSk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGZpbGVzIG5vdCBmb3VuZFxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCS8qIExvYWQgZmlybXdhcmUgaW50byBoYXJkd2FyZSAqLworCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShwcml2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHN0YXJ0IGZpcm13YXJlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBSZWNsYWltIG1lbW9yeSBvbmNlIGZpcm13YXJlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgKi8KKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCisJLyoKKwkgKiBUZW1wb3JhcmlseSBlbmFibGUgaW50ZXJydXB0cy4gIEluaXRpYWwgZmlybXdhcmUgaG9zdAorCSAqIGNvbW1hbmRzIHVzZSBpbnRlcnJ1cHRzIGFuZCBhdm9pZHMgcG9sbGluZy4gIERpc2FibGUKKwkgKiBpbnRlcnJ1cHRzIHdoZW4gZG9uZS4KKwkgKi8KKwlwcml2LT5pbnRfbWFzayB8PSBNV0w4S19BMkhfRVZFTlRTOworCisJaW93cml0ZTMyKHByaXYtPmludF9tYXNrLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisKKwkvKiBHZXQgY29uZmlnIGRhdGEsIG1hYyBhZGRycyBldGMgKi8KKwlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlYyhodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBpbml0aWFsaXNlIGZpcm13YXJlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBUdXJuIHJhZGlvIG9mZiAqLworCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGRpc2FibGVcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworCXJjID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJZncgPSAodTggKikmcHJpdi0+ZndfcmV2OworCXByaW50ayhLRVJOX0lORk8gIiVzOiA4OFcldSAlc1xuIiwgcHJpdi0+bmFtZSwgcHJpdi0+cGFydF9udW0sCisJCU1XTDhLX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgVmVyOiVzICBGaXJtd2FyZSBWZXI6JXUuJXUuJXUuJXVcbiIsCisJCXByaXYtPm5hbWUsIE1XTDhLX1ZFUlNJT04sIGZ3WzNdLCBmd1syXSwgZndbMV0sIGZ3WzBdKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogTUFDIEFkZHJlc3M6ICVzXG4iLCBwcml2LT5uYW1lLAorCSAgICAgICBwcmludF9tYWMobWFjLCBody0+d2lwaHktPnBlcm1fYWRkcikpOworCisJcmV0dXJuIDA7CisKK2Vycl9zdG9wX2Zpcm13YXJlOgorCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CisKK2Vycl9mcmVlX2lycToKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKK2Vycl9mcmVlX3F1ZXVlczoKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCitlcnJfaW91bm1hcDoKKwlpZiAocHJpdi0+Y29va2llICE9IE5VTEwpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKKwkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOworCisJaWYgKHByaXYtPnJlZ3MgIT0gTlVMTCkKKwkJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CisKKwlpZiAocHJpdi0+Y29uZmlnX3dxICE9IE5VTEwpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmNvbmZpZ193cSk7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCitlcnJfZnJlZV9yZWc6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtd2w4a19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcHJpbnRrKEtFUk5fRVJSICI9PT0+JXMoJXUpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXdsOGtfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJaW50IGk7CisKKwlpZiAoaHcgPT0gTlVMTCkKKwkJcmV0dXJuOworCXByaXYgPSBody0+cHJpdjsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwkvKiBSZW1vdmUgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9raWxsKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogU3RvcCBjb25maWcgdGhyZWFkICovCisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+Y29uZmlnX3dxKTsKKworCS8qIFN0b3AgaGFyZHdhcmUgKi8KKwltd2w4a19od19yZXNldChwcml2KTsKKworCS8qIFJldHVybiBhbGwgc2ticyB0byBtYWM4MDIxMSAqLworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDEpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKKworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LAorCQkJCXByaXYtPmNvb2tpZSwgcHJpdi0+Y29va2llX2RtYSk7CisKKwlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXdsOGtfZHJpdmVyID0geworCS5uYW1lCQk9IE1XTDhLX05BTUUsCisJLmlkX3RhYmxlCT0gbXdsOGtfdGFibGUsCisJLnByb2JlCQk9IG13bDhrX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXdsOGtfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBfX2RldmV4aXRfcChtd2w4a19zaHV0ZG93biksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtd2w4a19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm13bDhrX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtd2w4a19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtd2w4a19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtd2w4a19pbml0KTsKK21vZHVsZV9leGl0KG13bDhrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCmluZGV4IDI0Y2FlYzYuLmQ2M2M4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTIxMCwxMCArMjEwLDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR3YXZlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgbmV0d2F2ZV93YXRjaGRvZyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAotLyogU3RhdGlzdGljcyAqLwotc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR3YXZlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQogLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzKiBuZXR3YXZlX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApAQCAtMjc1LDE0ICsyNzEsOSBAQAogICAgIGludCAgICAgICAgbGFzdEV4ZWM7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICB3YXRjaGRvZzsJLyogVG8gYXZvaWQgYmxvY2tpbmcgc3RhdGUgKi8KICAgICBzdHJ1Y3Qgc2l0ZV9zdXJ2ZXkgICAgIG5zczsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAgIGl3X3N0YXRzOyAgICAvKiBXaXJlbGVzcyBzdGF0cyAqLwogfSBuZXR3YXZlX3ByaXZhdGU7CiAKLSNpZmRlZiBORVRXQVZFX1NUQVRTCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHdhdmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2VuZGlmCi0KIC8qCiAgKiBUaGUgTmV0d2F2ZSBjYXJkIGlzIGxpdHRsZS1lbmRpYW4sIHNvIHdvbid0IHdvcmsgZm9yIGJpZyBlbmRpYW4KICAqIHN5c3RlbXMuCkBAIC0zNjQsNiArMzU1LDE3IEBACiAgICAgcmV0dXJuICZwcml2LT5pd19zdGF0czsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXR3YXZlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAJPSBuZXR3YXZlX29wZW4sCisJLm5kb19zdG9wCQk9IG5ldHdhdmVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5ldHdhdmVfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbmV0d2F2ZV93YXRjaGRvZywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIG5ldHdhdmVfYXR0YWNoICh2b2lkKQogICoKQEAgLTQxMiwxNyArNDE0LDEyIEBACiAgICAgc3Bpbl9sb2NrX2luaXQoJnByaXYtPnNwaW5sb2NrKTsKIAogICAgIC8qIE5ldHdhdmUgc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJm5ldHdhdmVfc3RhcnRfeG1pdDsKLSAgICBkZXYtPmdldF9zdGF0cyAgPSAmbmV0d2F2ZV9nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZuZXR3YXZlX25ldGRldl9vcHM7CiAgICAgLyogd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwotICAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm5ldHdhdmVfaGFuZGxlcl9kZWY7CisgICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZuZXR3YXZlX2hhbmRsZXJfZGVmOwogCi0gICAgZGV2LT50eF90aW1lb3V0ID0gJm5ldHdhdmVfd2F0Y2hkb2c7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKLSAgICBkZXYtPm9wZW4gPSAmbmV0d2F2ZV9vcGVuOwotICAgIGRldi0+c3RvcCA9ICZuZXR3YXZlX2Nsb3NlOwogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogICAgIHJldHVybiBuZXR3YXZlX3BjbWNpYV9jb25maWcoIGxpbmspOwpAQCAtOTg4LDcgKzk4NSw3IEBACiAJcmV0dXJuIDE7CiAgICAgfQogCi0gICAgcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworICAgIGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwogCiAgICAgREVCVUcoMywgIlRyYW5zbWl0dGluZyB3aXRoIFNQQ1EgJXggU1BVICV4IExJRiAleCBJU1BMUSAleFxuIiwKIAkgIHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BDUSksCkBAIC0xMTA3LDExICsxMTA0LDExIEBACiAJICAgIHJzZXIgPSByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1JTRVIpOwkJCQogCSAgICAKIAkgICAgaWYgKHJzZXIgJiAweDA0KSB7Ci0JCSsrcHJpdi0+c3RhdHMucnhfZHJvcHBlZDsgCi0JCSsrcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9yczsKKwkJKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisJCSsrZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzOwogCSAgICB9CiAJICAgIGlmIChyc2VyICYgMHgwMikKLQkJKytwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CisJCSsrZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CiAJCQkKIAkgICAgLyogQ2xlYXIgdGhlIFJ4RXJyIGJpdCBpbiBSU0VSLiBSU0VSKzQgaXMgdGhlCiAJICAgICAqIHdyaXRlIHBhcnQuIEFsc28gY2xlYXIgdGhlIFJ4Q1JDICgweDA0KSBhbmQgCkBAIC0xMTI1LDggKzExMjIsOCBAQAogCSAgICB3YWl0X1dPQyhpb2Jhc2UpOwogCSAgICB3cml0ZWIoMHg0MCwgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19BU0NDKTsKIAotCSAgICAvKiBSZW1lbWJlciB0byBjb3VudCB1cCBwcml2LT5zdGF0cyBvbiBlcnJvciBwYWNrZXRzICovCi0JICAgICsrcHJpdi0+c3RhdHMucnhfZXJyb3JzOworCSAgICAvKiBSZW1lbWJlciB0byBjb3VudCB1cCBkZXYtPnN0YXRzIG9uIGVycm9yIHBhY2tldHMgKi8KKwkgICAgKytkZXYtPnN0YXRzLnJ4X2Vycm9yczsKIAl9CiAJLyogVHhETiAqLwogCWlmIChzdGF0dXMgJiAweDIwKSB7CkBAIC0xMTQwLDE3ICsxMTM3LDE3IEBACiAJCS8qIFRyYW5zbWl0dGluZyB3YXMgb2theSwgY2xlYXIgYml0cyAqLwogCQl3YWl0X1dPQyhpb2Jhc2UpOwogCQl3cml0ZWIoMHgyZiwgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19UU0VSICsgNCk7Ci0JCSsrcHJpdi0+c3RhdHMudHhfcGFja2V0czsKKwkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHM7CiAJICAgIH0KIAkJCQogCSAgICBpZiAodHhTdGF0dXMgJiAweGQwKSB7CiAJCWlmICh0eFN0YXR1cyAmIDB4ODApIHsKLQkJICAgICsrcHJpdi0+c3RhdHMuY29sbGlzaW9uczsgLyogQmVjYXVzZSBvZiAvcHJvYy9uZXQvZGV2Ki8KLQkJICAgIC8qICsrcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnM7ICovCisJCSAgICArK2Rldi0+c3RhdHMuY29sbGlzaW9uczsgLyogQmVjYXVzZSBvZiAvcHJvYy9uZXQvZGV2Ki8KKwkJICAgIC8qICsrZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9yczsgKi8KIAkJICAgIC8qIHByaW50aygiQ29sbGlzaW9uLiAlbGRcbiIsIGppZmZpZXMgLSBkZXYtPnRyYW5zX3N0YXJ0KTsgKi8KIAkJfQogCQlpZiAodHhTdGF0dXMgJiAweDQwKSAKLQkJICAgICsrcHJpdi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CisJCSAgICArK2Rldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CiAJCS8qIDB4ODAgVHhHVSBUcmFuc21pdCBnaXZldXAgLSBuaW5lIHRpbWVzIGFuZCBubyBsdWNrCiAJCSAqIDB4NDAgVHhOT0FQIE5vIGFjY2VzcyBwb2ludC4gRGlzY2FyZGVkIHBhY2tldC4KIAkJICogMHgxMCBUeEVyciBUcmFuc21pdCBlcnJvci4gQWx3YXlzIHNldCB3aGVuIApAQCAtMTE2Myw3ICsxMTYwLDcgQEAKIAkJLyogQ2xlYXIgb3V0IFR4R1UsIFR4Tk9BUCwgVHhFcnIgYW5kIFR4VHJ5cyAqLwogCQl3YWl0X1dPQyhpb2Jhc2UpOwogCQl3cml0ZWIoMHhkZiAmIHR4U3RhdHVzLCByYW1CYXNlK05FVFdBVkVfRVJFR19UU0VSKzQpOwotCQkrK3ByaXYtPnN0YXRzLnR4X2Vycm9yczsKKwkJKytkZXYtPnN0YXRzLnR4X2Vycm9yczsKIAkgICAgfQogCSAgICBERUJVRygzLCAiTmV3IHN0YXR1cyBpcyBUU0VSICV4IEFTUiAleFxuIiwKIAkJICByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1RTRVIpLApAQCAtMTE5Nyw0MCArMTE5NCw2IEBACiAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfSAvKiBuZXR3YXZlX3dhdGNoZG9nICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0d2F2ZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLSAgICB1cGRhdGVfc3RhdHMoZGV2KTsKLQotICAgIERFQlVHKDIsICJuZXR3YXZlOiBTUENRICV4IFNQVSAleCBMSUYgJXggSVNQTFEgJXggTUhTICV4IHJ4dHggJXgiCi0JICAiICV4IHR4ICV4ICV4ICV4ICV4XG4iLCAKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BDUSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQVSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0xJRiksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0lTUExRKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfTUhTKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweGUpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4ZiksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxOCksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxOSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxYSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxYikpOwotCi0gICAgcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLSAgICAvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0vKiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsgKi8KLQotICAgIC8vc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci0KLS8qICAgIHByaXYtPnN0YXRzLnJ4X3BhY2tldHMgPSByZWFkYihwcml2LT5yYW1CYXNlICsgMHgxOGUpOyAKLSAgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzID0gcmVhZGIocHJpdi0+cmFtQmFzZSArIDB4MThmKTsgKi8KLQotICAgIC8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBuZXR3YXZlX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyNzQsNyArMTIzNyw3IEBACiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJICAgIERFQlVHKDEsICJuZXR3YXZlX3J4OiBDb3VsZCBub3QgYWxsb2NhdGUgYW4gc2tfYnVmZiBvZiAiCiAJCSAgImxlbmd0aCAlZFxuIiwgcmN2TGVuKTsKLQkgICAgKytwcml2LT5zdGF0cy5yeF9kcm9wcGVkOyAKKwkgICAgKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CiAJICAgIC8qIFRlbGwgdGhlIGFkYXB0ZXIgdG8gc2tpcCB0aGUgcGFja2V0ICovCiAJICAgIHdhaXRfV09DKGlvYmFzZSk7CiAJICAgIHdyaXRlYihORVRXQVZFX0NNRF9TUlAsIHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfQ0IgKyAwKTsKQEAgLTEzMDcsOCArMTI3MCw4IEBACiAJLyogUXVldWUgcGFja2V0IGZvciBuZXR3b3JrIGxheWVyICovCiAJbmV0aWZfcngoc2tiKTsKIAotCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSByY3ZMZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByY3ZMZW47CiAKIAkvKiBHb3QgdGhlIHBhY2tldCwgdGVsbCB0aGUgYWRhcHRlciB0byBza2lwIGl0ICovCiAJd2FpdF9XT0MoaW9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYwppbmRleCA3ZDIyOTJkLi4xMDg0YjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jCkBAIC00Myw2ICs0Myw0NiBAQAogCWNoYXIgc2lnbmF0dXJlWzBdOyAgICAgIC8qIEZXIHNpZ25hdHVyZSBsZW5ndGggaGVhZGVyc2l6ZS0yMCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qIENoZWNrIHRoZSByYW5nZSBvZiB2YXJpb3VzIGhlYWRlciBlbnRyaWVzLiBSZXR1cm4gYSBwb2ludGVyIHRvIGEKKyAqIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLCBvciBOVUxMIGlmIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp2YWxpZGF0ZV9mdyhjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKmhkciwgc2l6ZV90IGxlbikKK3sKKwl1MTYgaGRyc2l6ZTsKKworCWlmIChsZW4gPCBzaXplb2YoKmhkcikpCisJCXJldHVybiAiaW1hZ2UgdG9vIHNtYWxsIjsKKwlpZiAobWVtY21wKGhkci0+aGRyX3ZlcnMsICJIRlciLCAzKSAhPSAwKQorCQlyZXR1cm4gImZvcm1hdCBub3QgcmVjb2duaXNlZCI7CisKKwloZHJzaXplID0gbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKTsKKwlpZiAoaGRyc2l6ZSA+IGxlbikKKwkJcmV0dXJuICJiYWQgaGVhZGVyc2l6ZSI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5ibG9ja19vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgYmxvY2sgb2Zmc2V0IjsKKwlpZiAoKGhkcnNpemUgKyBsZTMyX3RvX2NwdShoZHItPnBkcl9vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgUERSIG9mZnNldCI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5wcmlfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIFBSSSBvZmZzZXQiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+Y29tcGF0X29mZnNldCkpID4gbGVuKQorCQlyZXR1cm4gImJhZCBjb21wYXQgb2Zmc2V0IjsKKworCS8qIFRPRE86IGNvbnNpZGVyIGFkZGluZyBhIGNoZWNrc3VtIG9yIENSQyB0byB0aGUgZmlybXdhcmUgZm9ybWF0ICovCisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqCitvcmlub2NvX2NhY2hlZF9md19nZXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgYm9vbCBwcmltYXJ5KQoreworCWlmIChwcmltYXJ5KQorCQlyZXR1cm4gcHJpdi0+Y2FjaGVkX3ByaV9mdzsKKwllbHNlCisJCXJldHVybiBwcml2LT5jYWNoZWRfZnc7Cit9CisjZWxzZQorI2RlZmluZSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgcHJpbWFyeSkgKE5VTEwpCisjZW5kaWYKKwogLyogRG93bmxvYWQgZWl0aGVyIFNUQSBvciBBUCBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLiAqLwogc3RhdGljIGludAogb3Jpbm9jb19kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LApAQCAtNTYsOCArOTYsOSBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CiAJY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICpoZHI7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZW5kOworCWNvbnN0IHZvaWQgKmVuZDsKIAljb25zdCBjaGFyICpmaXJtd2FyZTsKKwljb25zdCBjaGFyICpmd19lcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJaW50IGVyciA9IDA7CiAKQEAgLTc5LDcgKzEyMCw3IEBACiAJaWYgKGVycikKIAkJZ290byBmcmVlOwogCi0JaWYgKCFwcml2LT5jYWNoZWRfZncpIHsKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpIHsKIAkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZpcm13YXJlLCBwcml2LT5kZXYpOwogCiAJCWlmIChlcnIpIHsKQEAgLTg5LDEwICsxMzAsMTkgQEAKIAkJCWdvdG8gZnJlZTsKIAkJfQogCX0gZWxzZQotCQlmd19lbnRyeSA9IHByaXYtPmNhY2hlZF9mdzsKKwkJZndfZW50cnkgPSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpOwogCiAJaGRyID0gKGNvbnN0IHN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciAqKSBmd19lbnRyeS0+ZGF0YTsKIAorCWZ3X2VyciA9IHZhbGlkYXRlX2Z3KGhkciwgZndfZW50cnktPnNpemUpOworCWlmIChmd19lcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2UgZGV0ZWN0ZWQgKCVzKS4gIgorCQkgICAgICAgIkFib3J0aW5nIGRvd25sb2FkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBmd19lcnIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGFib3J0OworCX0KKwogCS8qIEVuYWJsZSBhdXggcG9ydCB0byBhbGxvdyBwcm9ncmFtbWluZyAqLwogCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9pbml0KGh3LCBsZTMyX3RvX2NwdShoZHItPmVudHJ5X3BvaW50KSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIGluaXQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKQEAgLTExNSw3ICsxNjUsOCBAQAogCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKSArCiAJCSAgICAgICBsZTMyX3RvX2NwdShoZHItPnBkcl9vZmZzZXQpKTsKIAotCWVyciA9IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhodywgZmlyc3RfYmxvY2ssIHBkYSk7CisJZXJyID0gaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGh3LCBmaXJzdF9ibG9jaywgZW5kLCBwZGEsCisJCQkJCSAgICAgJnBkYVtmdy0+cGRhX3NpemUgLyBzaXplb2YoKnBkYSldKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFwcGx5IFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwogCWlmIChlcnIpCiAJCWdvdG8gYWJvcnQ7CkBAIC0xMzIsNyArMTgzLDcgQEAKIAogYWJvcnQ6CiAJLyogSWYgd2UgcmVxdWVzdGVkIHRoZSBmaXJtd2FyZSwgcmVsZWFzZSBpdC4gKi8KLQlpZiAoIXByaXYtPmNhY2hlZF9mdykKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpCiAJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCiBmcmVlOgpAQCAtMTQ3LDcgKzE5OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQKIHN5bWJvbF9kbF9pbWFnZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncsCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmltYWdlLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmltYWdlLCBjb25zdCB2b2lkICplbmQsCiAJCWludCBzZWNvbmRhcnkpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwpAQCAtMTg4LDkgKzIzOSwxMCBAQAogCiAJLyogV3JpdGUgdGhlIFBEQSB0byB0aGUgYWRhcHRlciAqLwogCWlmIChzZWNvbmRhcnkpIHsKLQkJc2l6ZV90IGxlbiA9IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGZpcnN0X2Jsb2NrKTsKKwkJc2l6ZV90IGxlbiA9IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGZpcnN0X2Jsb2NrLCBlbmQpOwogCQlwdHIgPSBmaXJzdF9ibG9jayArIGxlbjsKLQkJcmV0ID0gaGVybWVzX2FwcGx5X3BkYShodywgcHRyLCBwZGEpOworCQlyZXQgPSBoZXJtZXNfYXBwbHlfcGRhKGh3LCBwdHIsIGVuZCwgcGRhLAorCQkJCSAgICAgICAmcGRhW2Z3LT5wZGFfc2l6ZSAvIHNpemVvZigqcGRhKV0pOwogCQlrZnJlZShwZGEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTIzNCwyMCArMjg2LDIwIEBACiAJaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwogCi0JaWYgKCFwcml2LT5jYWNoZWRfcHJpX2Z3KSB7CisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgdHJ1ZSkpIHsKIAkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+cHJpX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5wcmlfZncpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAl9IGVsc2UKLQkJZndfZW50cnkgPSBwcml2LT5jYWNoZWRfcHJpX2Z3OworCQlmd19lbnRyeSA9IG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCB0cnVlKTsKIAogCS8qIExvYWQgcHJpbWFyeSBmaXJtd2FyZSAqLwogCXJldCA9IHN5bWJvbF9kbF9pbWFnZShwcml2LCBmdywgZndfZW50cnktPmRhdGEsCiAJCQkgICAgICBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplLCAwKTsKIAotCWlmICghcHJpdi0+Y2FjaGVkX3ByaV9mdykKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCB0cnVlKSkKIAkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKQEAgLTI1NSwxOSArMzA3LDE5IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKCFwcml2LT5jYWNoZWRfZncpIHsKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpIHsKIAkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+c3RhX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5zdGFfZncpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAl9IGVsc2UKLQkJZndfZW50cnkgPSBwcml2LT5jYWNoZWRfZnc7CisJCWZ3X2VudHJ5ID0gb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKTsKIAogCS8qIExvYWQgc2Vjb25kYXJ5IGZpcm13YXJlICovCiAJcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKIAkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDEpOwotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KQorCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkKIAkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTZWNvbmRhcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLApAQCAtMzAxLDkgKzM1Myw5IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKIHZvaWQgb3Jpbm9jb19jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgYXApCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnByaV9mdzsKIAljb25zdCBjaGFyICpmdzsKQEAgLTMyMywxMiArMzc1LDEwIEBACiAJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZncsIHByaXYtPmRldikgPT0gMCkKIAkJCXByaXYtPmNhY2hlZF9mdyA9IGZ3X2VudHJ5OwogCX0KLSNlbmRpZgogfQogCiB2b2lkIG9yaW5vY29fdW5jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQogewotI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKIAlpZiAocHJpdi0+Y2FjaGVkX3ByaV9mdykKIAkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5jYWNoZWRfcHJpX2Z3KTsKIAlpZiAocHJpdi0+Y2FjaGVkX2Z3KQpAQCAtMzM2LDUgKzM4Niw1IEBACiAKIAlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKIAlwcml2LT5jYWNoZWRfZncgPSBOVUxMOwotI2VuZGlmCiB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaAppbmRleCAyMjkwZjA4Li44OWZjMjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5oCkBAIC0xMCw3ICsxMCwxMiBAQAogCiBpbnQgb3Jpbm9jb19kb3dubG9hZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKIHZvaWQgb3Jpbm9jb19jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgYXApOwogdm9pZCBvcmlub2NvX3VuY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CisjZWxzZQorI2RlZmluZSBvcmlub2NvX2NhY2hlX2Z3KHByaXYsIGFwKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgogCiAjZW5kaWYgLyogX09SSU5PQ09fRldfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKaW5kZXggNTI2MGNlYi4uYTliYTE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKQEAgLTcxLDE4ICs3MSw2IEBACiAjZGVmaW5lIEJMT0NLX0VORAkweEZGRkZGRkZGCS8qIExhc3QgaW1hZ2UgYmxvY2sgKi8KICNkZWZpbmUgVEVYVF9FTkQJMHgxQQkJLyogRW5kIG9mIHRleHQgaGVhZGVyICovCiAKLS8qCi0gKiBQREEgPT0gUHJvZHVjdGlvbiBEYXRhIEFyZWEKLSAqCi0gKiBJbiBwcmluY2lwbGUsIHRoZSBtYXguIHNpemUgb2YgdGhlIFBEQSBpcyBpcyA0MDk2IHdvcmRzLiBDdXJyZW50bHksCi0gKiBob3dldmVyLCBvbmx5IGFib3V0IDUwMCBieXRlcyBvZiB0aGlzIGFyZWEgYXJlIHVzZWQuCi0gKgotICogU29tZSBVU0IgaW1wbGVtZW50YXRpb25zIGNhbid0IGhhbmRsZSBzaXplcyBpbiBleGNlc3Mgb2YgMTAxNi4gTm90ZQotICogdGhhdCBQREEgaXMgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhvc2UgVVNCIGVudmlyb25tZW50cywgYnV0IG1heSBiZQotICogcmV0cmlldmVkIGJ5IGNvbW1vbiBjb2RlLgotICovCi0jZGVmaW5lIE1BWF9QREFfU0laRQkxMDAwCi0KIC8qIExpbWl0IHRoZSBhbW91dCB3ZSB0cnkgdG8gZG93bmxvYWQgaW4gYSBzaW5nbGUgc2hvdC4KICAqIFNpemUgaXMgaW4gYnl0ZXMuCiAgKi8KQEAgLTIxOCwxMyArMjA2LDE0IEBACiAgKiBTY2FuIFBEUiBmb3IgdGhlIHJlY29yZCB3aXRoIHRoZSBzcGVjaWZpZWQgUkVDT1JEX0lELgogICogSWYgaXQncyBub3QgZm91bmQsIHJldHVybiBOVUxMLgogICovCi1zdGF0aWMgc3RydWN0IHBkciAqCi1oZXJtZXNfZmluZF9wZHIoc3RydWN0IHBkciAqZmlyc3RfcGRyLCB1MzIgcmVjb3JkX2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZHIgKgoraGVybWVzX2ZpbmRfcGRyKGNvbnN0IHN0cnVjdCBwZHIgKmZpcnN0X3BkciwgdTMyIHJlY29yZF9pZCwgY29uc3Qgdm9pZCAqZW5kKQogewotCXN0cnVjdCBwZHIgKnBkciA9IGZpcnN0X3BkcjsKLQl2b2lkICplbmQgPSAodm9pZCAqKWZpcnN0X3BkciArIE1BWF9QREFfU0laRTsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHIgPSBmaXJzdF9wZHI7CiAKLQl3aGlsZSAoKCh2b2lkICopcGRyIDwgZW5kKSAmJgorCWVuZCAtPSBzaXplb2Yoc3RydWN0IHBkcik7CisKKwl3aGlsZSAoKCh2b2lkICopIHBkciA8PSBlbmQpICYmCiAJICAgICAgIChwZHJfaWQocGRyKSAhPSBQRElfRU5EKSkgewogCQkvKgogCQkgKiBQRFIgYXJlYSBpcyBjdXJyZW50bHkgbm90IHRlcm1pbmF0ZWQgYnkgUERJX0VORC4KQEAgLTI0NCwxMiArMjMzLDE1IEBACiB9CiAKIC8qIFNjYW4gcHJvZHVjdGlvbiBkYXRhIGl0ZW1zIGZvciBhIHBhcnRpY3VsYXIgZW50cnkgKi8KLXN0YXRpYyBzdHJ1Y3QgcGRpICoKLWhlcm1lc19maW5kX3BkaShzdHJ1Y3QgcGRpICpmaXJzdF9wZGksIHUzMiByZWNvcmRfaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IHBkaSAqCitoZXJtZXNfZmluZF9wZGkoY29uc3Qgc3RydWN0IHBkaSAqZmlyc3RfcGRpLCB1MzIgcmVjb3JkX2lkLCBjb25zdCB2b2lkICplbmQpCiB7Ci0Jc3RydWN0IHBkaSAqcGRpID0gZmlyc3RfcGRpOworCWNvbnN0IHN0cnVjdCBwZGkgKnBkaSA9IGZpcnN0X3BkaTsKIAotCXdoaWxlIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSB7CisJZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRpKTsKKworCXdoaWxlICgoKHZvaWQgKikgcGRpIDw9IGVuZCkgJiYKKwkgICAgICAgKHBkaV9pZChwZGkpICE9IFBESV9FTkQpKSB7CiAKIAkJLyogSWYgdGhlIHJlY29yZCBJRCBtYXRjaGVzLCB3ZSBhcmUgZG9uZSAqLwogCQlpZiAocGRpX2lkKHBkaSkgPT0gcmVjb3JkX2lkKQpAQCAtMjYyLDEyICsyNTQsMTMgQEAKIAogLyogUHJvY2VzcyBvbmUgUGx1ZyBEYXRhIEl0ZW0gLSBmaW5kIGNvcnJlc3BvbmRpbmcgUERSIGFuZCBwbHVnIGl0ICovCiBzdGF0aWMgaW50Ci1oZXJtZXNfcGx1Z19wZGkoaGVybWVzX3QgKmh3LCBzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsIGNvbnN0IHN0cnVjdCBwZGkgKnBkaSkKK2hlcm1lc19wbHVnX3BkaShoZXJtZXNfdCAqaHcsIGNvbnN0IHN0cnVjdCBwZHIgKmZpcnN0X3BkciwKKwkJY29uc3Qgc3RydWN0IHBkaSAqcGRpLCBjb25zdCB2b2lkICpwZHJfZW5kKQogewotCXN0cnVjdCBwZHIgKnBkcjsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHI7CiAKIAkvKiBGaW5kIHRoZSBQRFIgY29ycmVzcG9uZGluZyB0byB0aGlzIFBESSAqLwotCXBkciA9IGhlcm1lc19maW5kX3BkcihmaXJzdF9wZHIsIHBkaV9pZChwZGkpKTsKKwlwZHIgPSBoZXJtZXNfZmluZF9wZHIoZmlyc3RfcGRyLCBwZGlfaWQocGRpKSwgcGRyX2VuZCk7CiAKIAkvKiBObyBtYXRjaCBpcyBmb3VuZCwgc2FmZSB0byBpZ25vcmUgKi8KIAlpZiAoIXBkcikKQEAgLTM0NSwxOCArMzM4LDIyIEBACiAgKi8KIGludCBoZXJtZXNfYXBwbHlfcGRhKGhlcm1lc190ICpodywKIAkJICAgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCSAgICAgY29uc3QgX19sZTE2ICpwZGEpCisJCSAgICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJICAgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJICAgICBjb25zdCB2b2lkICpwZGFfZW5kKQogewogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IHBkaSAqcGRpOwotCXN0cnVjdCBwZHIgKnBkcjsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHI7CiAKLQlwZHIgPSAoc3RydWN0IHBkciAqKSBmaXJzdF9wZHI7CisJcGRyID0gKGNvbnN0IHN0cnVjdCBwZHIgKikgZmlyc3RfcGRyOworCXBkYV9lbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZGkpOwogCiAJLyogR28gdGhyb3VnaCBldmVyeSBQREkgYW5kIHBsdWcgdGhlbSBpbnRvIHRoZSBhZGFwdGVyICovCiAJcGRpID0gKGNvbnN0IHN0cnVjdCBwZGkgKikgKHBkYSArIDIpOwotCXdoaWxlIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSB7Ci0JCXJldCA9IGhlcm1lc19wbHVnX3BkaShodywgcGRyLCBwZGkpOworCXdoaWxlICgoKHZvaWQgKikgcGRpIDw9IHBkYV9lbmQpICYmCisJICAgICAgIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSkgeworCQlyZXQgPSBoZXJtZXNfcGx1Z19wZGkoaHcsIHBkciwgcGRpLCBwZHJfZW5kKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTM3MCwxNSArMzY3LDE4IEBACiAgKiBpbmNsdWRpbmcgdGhlIGhlYWRlciBkYXRhLgogICovCiBzaXplX3QKLWhlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrKQoraGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCkKIHsKIAljb25zdCBzdHJ1Y3QgZGJsb2NrICpibGsgPSAoY29uc3Qgc3RydWN0IGRibG9jayAqKSBmaXJzdF9ibG9jazsKIAlpbnQgdG90YWxfbGVuID0gMDsKIAlpbnQgbGVuOwogCisJZW5kIC09IHNpemVvZigqYmxrKTsKKwogCS8qIFNraXAgYWxsIGJsb2NrcyB0byBsb2NhdGUgUGx1ZyBEYXRhIFJlZmVyZW5jZXMKIAkgKiAoU3BlY3RydW0gQ1MpICovCi0Jd2hpbGUgKGRibG9ja19hZGRyKGJsaykgIT0gQkxPQ0tfRU5EKSB7CisJd2hpbGUgKCgodm9pZCAqKSBibGsgPD0gZW5kKSAmJgorCSAgICAgICAoZGJsb2NrX2FkZHIoYmxrKSAhPSBCTE9DS19FTkQpKSB7CiAJCWxlbiA9IGRibG9ja19sZW4oYmxrKTsKIAkJdG90YWxfbGVuICs9IHNpemVvZigqYmxrKSArIGxlbjsKIAkJYmxrID0gKHN0cnVjdCBkYmxvY2sgKikgJmJsay0+ZGF0YVtsZW5dOwpAQCAtNDc2LDcgKzQ3Niw3IEBACiB9CiAKIC8qIFByb2dyYW0gdGhlIGRhdGEgYmxvY2tzICovCi1pbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3QgY2hhciAqZW5kKQoraW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCkKIHsKIAljb25zdCBzdHJ1Y3QgZGJsb2NrICpibGs7CiAJdTMyIGJsa2FkZHI7CkBAIC00ODgsMTQgKzQ4OCwxNCBAQAogCiAJYmxrID0gKGNvbnN0IHN0cnVjdCBkYmxvY2sgKikgZmlyc3RfYmxvY2s7CiAKLQlpZiAoKGNvbnN0IGNoYXIgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCisJaWYgKCh2b2lkICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQogCQlyZXR1cm4gLUVJTzsKIAogCWJsa2FkZHIgPSBkYmxvY2tfYWRkcihibGspOwogCWJsa2xlbiA9IGRibG9ja19sZW4oYmxrKTsKIAogCXdoaWxlICgoYmxrYWRkciAhPSBCTE9DS19FTkQpICYmCi0JICAgICAgICgoKGNvbnN0IGNoYXIgKikgYmxrICsgYmxrbGVuKSA8PSBlbmQpKSB7CisJICAgICAgICgoKHZvaWQgKikgYmxrICsgYmxrbGVuKSA8PSBlbmQpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHIFBGWAogCQkgICAgICAgIlByb2dyYW1taW5nIGJsb2NrIG9mIGxlbmd0aCAlZCB0byBhZGRyZXNzIDB4JTA4eFxuIiwKIAkJICAgICAgIGJsa2xlbiwgYmxrYWRkcik7CkBAIC01MjcsNyArNTI3LDcgQEAKICNlbmRpZgogCQlibGsgPSAoY29uc3Qgc3RydWN0IGRibG9jayAqKSAmYmxrLT5kYXRhW2Jsa2xlbl07CiAKLQkJaWYgKChjb25zdCBjaGFyICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQorCQlpZiAoKHZvaWQgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlibGthZGRyID0gZGJsb2NrX2FkZHIoYmxrKTsKQEAgLTU0NSw5ICs1NDUsOSBAQAogCV9fbGUxNiBpZDsJCQkJCQkJXAogCXU4IHZhbFtsZW5ndGhdOwkJCQkJCQlcCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkID0gewkJCVwKLQljcHVfdG9fbGUxNigoc2l6ZW9mKGRlZmF1bHRfcGRyX2RhdGFfIyNwaWQpLwkJXAorCWNwdV90b19sZTE2KChzaXplb2YoZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCkvCQkJXAogCQkJCXNpemVvZihfX2xlMTYpKSAtIDEpLAkJCVwKLQljcHVfdG9fbGUxNihwaWQpLAkJCQkJXAorCWNwdV90b19sZTE2KHBpZCksCQkJCQkJXAogCWRhdGEJCQkJCQkJCVwKIH0KIApAQCAtNjE2LDE3ICs2MTYsMjAgQEAKICAqLwogaW50IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhoZXJtZXNfdCAqaHcsCiAJCQkJICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhKQorCQkJCSAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCQkJICAgY29uc3QgX19sZTE2ICpwZGEsCisJCQkJICAgY29uc3Qgdm9pZCAqcGRhX2VuZCkKIHsKIAljb25zdCBzdHJ1Y3QgcGRyICpwZHIgPSAoY29uc3Qgc3RydWN0IHBkciAqKSBmaXJzdF9wZHI7Ci0Jc3RydWN0IHBkaSAqZmlyc3RfcGRpID0gKHN0cnVjdCBwZGkgKikgJnBkYVsyXTsKLQlzdHJ1Y3QgcGRpICpwZGk7Ci0Jc3RydWN0IHBkaSAqZGVmYXVsdF9wZGkgPSBOVUxMOwotCXN0cnVjdCBwZGkgKm91dGRvb3JfcGRpOwotCXZvaWQgKmVuZCA9ICh2b2lkICopZmlyc3RfcGRyICsgTUFYX1BEQV9TSVpFOworCWNvbnN0IHN0cnVjdCBwZGkgKmZpcnN0X3BkaSA9IChjb25zdCBzdHJ1Y3QgcGRpICopICZwZGFbMl07CisJY29uc3Qgc3RydWN0IHBkaSAqcGRpOworCWNvbnN0IHN0cnVjdCBwZGkgKmRlZmF1bHRfcGRpID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcGRpICpvdXRkb29yX3BkaTsKIAlpbnQgcmVjb3JkX2lkOwogCi0Jd2hpbGUgKCgodm9pZCAqKXBkciA8IGVuZCkgJiYKKwlwZHJfZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRyKTsKKworCXdoaWxlICgoKHZvaWQgKikgcGRyIDw9IHBkcl9lbmQpICYmCiAJICAgICAgIChwZHJfaWQocGRyKSAhPSBQRElfRU5EKSkgewogCQkvKgogCQkgKiBGb3Igc3BlY3RydW1fY3MgZmlybXdhcmVzLApAQCAtNjM4LDcgKzY0MSw3IEBACiAJCQlicmVhazsKIAkJcmVjb3JkX2lkID0gcGRyX2lkKHBkcik7CiAKLQkJcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkKTsKKwkJcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkLCBwZGFfZW5kKTsKIAkJaWYgKHBkaSkKIAkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiRm91bmQgcmVjb3JkIDB4JTA0eCBhdCAlcFxuIiwKIAkJCSAgICAgICByZWNvcmRfaWQsIHBkaSk7CkBAIC02NDYsNyArNjQ5LDggQEAKIAkJc3dpdGNoIChyZWNvcmRfaWQpIHsKIAkJY2FzZSAweDExMDogLyogTW9kZW0gUkVGREFDIHZhbHVlcyAqLwogCQljYXNlIDB4MTIwOiAvKiBNb2RlbSBWR0RBQyB2YWx1ZXMgKi8KLQkJCW91dGRvb3JfcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkICsgMSk7CisJCQlvdXRkb29yX3BkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCArIDEsCisJCQkJCQkgICAgICBwZGFfZW5kKTsKIAkJCWRlZmF1bHRfcGRpID0gTlVMTDsKIAkJCWlmIChvdXRkb29yX3BkaSkgewogCQkJCXBkaSA9IG91dGRvb3JfcGRpOwpAQCAtNjg3LDcgKzY5MSw4IEBACiAKIAkJaWYgKHBkaSkgewogCQkJLyogTGVuZ3RocyBvZiB0aGUgZGF0YSBpbiBQREkgYW5kIFBEUiBtdXN0IG1hdGNoICovCi0JCQlpZiAocGRpX2xlbihwZGkpID09IHBkcl9sZW4ocGRyKSkgeworCQkJaWYgKChwZGlfbGVuKHBkaSkgPT0gcGRyX2xlbihwZHIpKSAmJgorCQkJICAgICgodm9pZCAqKSBwZGktPmRhdGEgKyBwZGlfbGVuKHBkaSkgPCBwZGFfZW5kKSkgewogCQkJCS8qIGRvIHRoZSBhY3R1YWwgcGx1Z2dpbmcgKi8KIAkJCQloZXJtZXNfYXV4X3NldGFkZHIoaHcsIHBkcl9hZGRyKHBkcikpOwogCQkJCWhlcm1lc193cml0ZV9ieXRlcyhodywgSEVSTUVTX0FVWERBVEEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oCmluZGV4IDZmY2IyNjIuLjU4M2E1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIGludCBoZXJtZXNpX3Byb2dyYW1faW5pdChoZXJtZXNfdCAqaHcsIHUzMiBvZmZzZXQpOwogaW50IGhlcm1lc2lfcHJvZ3JhbV9lbmQoaGVybWVzX3QgKmh3KTsKLWludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCBjaGFyICplbmQpOworaW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCk7CiAKIGludCBoZXJtZXNfcmVhZF9wZGEoaGVybWVzX3QgKmh3LAogCQkgICAgX19sZTE2ICpwZGEsCkBAIC0zOCwxMSArMzgsMTUgQEAKIAkJICAgIGludCB1c2VfZWVwcm9tKTsKIGludCBoZXJtZXNfYXBwbHlfcGRhKGhlcm1lc190ICpodywKIAkJICAgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCSAgICAgY29uc3QgX19sZTE2ICpwZGEpOworCQkgICAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCSAgICAgY29uc3QgX19sZTE2ICpwZGEsCisJCSAgICAgY29uc3Qgdm9pZCAqcGRhX2VuZCk7CiBpbnQgaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGhlcm1lc190ICpodywKIAkJCQkgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCQkJICAgY29uc3QgX19sZTE2ICpwZGEpOworCQkJCSAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCQkJICAgY29uc3QgX19sZTE2ICpwZGEsCisJCQkJICAgY29uc3Qgdm9pZCAqcGRhX2VuZCk7CiAKLXNpemVfdCBoZXJtZXNfYmxvY2tzX2xlbmd0aChjb25zdCBjaGFyICpmaXJzdF9ibG9jayk7CitzaXplX3QgaGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCk7CiAKICNlbmRpZiAvKiBfSEVSTUVTX0RMRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCmluZGV4IDU0ZGZjNDUuLjM0NTU5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCkBAIC0yMDc2LDggKzIwNzYsMjAgQEAKIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KKworc3RhdGljIHZvaWQgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXByaXYtPnBtX25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBvcmlub2NvX3BtX25vdGlmaWVyOworCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwcml2LT5wbV9ub3RpZmllcik7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJnByaXYtPnBtX25vdGlmaWVyKTsKK30KICNlbHNlIC8qICFQTV9TTEVFUCB8fCBIRVJNRVNfQ0FDSEVfRldfT05fSU5JVCAqLwotI2RlZmluZSBvcmlub2NvX3BtX25vdGlmaWVyIE5VTEwKKyNkZWZpbmUgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpIGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI1NjgsMTIgKzI1ODAsMTMgQEAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKIAlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKIAlwcml2LT5jYWNoZWRfZncgPSBOVUxMOworI2VuZGlmCiAKIAkvKiBSZWdpc3RlciBQTSBub3RpZmllcnMgKi8KLQlwcml2LT5wbV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gb3Jpbm9jb19wbV9ub3RpZmllcjsKLQlyZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOworCW9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7CiAKIAlyZXR1cm4gZGV2OwogfQpAQCAtMjU5OCw3ICsyNjExLDcgQEAKIAkJa2ZyZWUocnhfZGF0YSk7CiAJfQogCi0JdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOworCW9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKIAlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7CiAKIAlwcml2LT53cGFfaWVfbGVuID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKaW5kZXggZjNmOTRiMi4uOGU1YTcyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKQEAgLTE1OSw5ICsxNTksMTEgQEAKIAl1bnNpZ25lZCBpbnQgdGtpcF9jbV9hY3RpdmU6MTsKIAl1bnNpZ25lZCBpbnQga2V5X21nbXQ6MzsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKIAkvKiBDYWNoZWQgaW4gbWVtb3J5IGZpcm13YXJlIHRvIHVzZSBkdXJpbmcgLT5yZXN1bWUuICovCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpjYWNoZWRfcHJpX2Z3OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqY2FjaGVkX2Z3OworI2VuZGlmCiAKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbm90aWZpZXI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCmluZGV4IDk0YzNhY2QuLjJkZGE1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKQEAgLTE0LDYgKzE0LDEwIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogZW51bSBwNTRfY29udHJvbF9mcmFtZV90eXBlcyB7CiAJUDU0X0NPTlRST0xfVFlQRV9TRVRVUCA9IDAsCiAJUDU0X0NPTlRST0xfVFlQRV9TQ0FOLApAQCAtMTEyLDYgKzExNiwyMSBAQAogCUZXX1NUQVRFX1JFU0VUVElORywKIH07CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCisjZGVmaW5lIFA1NF9MRURfTUFYX05BTUVfTEVOIDMxCisKK3N0cnVjdCBwNTRfbGVkX2RldiB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHdfZGV2OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2RldjsKKwljaGFyIG5hbWVbUDU0X0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKKworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgcmVnaXN0ZXJlZDsKK307CisKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCiBzdHJ1Y3QgcDU0X2NvbW1vbiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJdTMyIHJ4X3N0YXJ0OwpAQCAtMTU3LDYgKzE3NiwxMiBAQAogCXN0cnVjdCBjb21wbGV0aW9uIGVlcHJvbV9jb21wOwogCXU4IHByaXZhY3lfY2FwczsKIAl1OCByeF9rZXljYWNoZV9zaXplOworCS8qIExFRCBtYW5hZ2VtZW50ICovCisJI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJc3RydWN0IHA1NF9sZWRfZGV2IGFzc29jX2xlZDsKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgdHhfbGVkOworCSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCXUxNiBzb2Z0bGVkX3N0YXRlOwkJLyogYml0IGZpZWxkIG9mIGdsb3dpbmcgTEVEcyAqLwogfTsKIAogaW50IHA1NF9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTY1LDYgKzE5MCw3IEBACiBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7CiBpbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpwNTRfaW5pdF9jb21tb24oc2l6ZV90IHByaXZfZGF0YV9sZW4pOworaW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KTsKIHZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiAKICNlbmRpZiAvKiBQNTRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCmluZGV4IDQ1YzJlN2EuLjBhOTg5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKQEAgLTIxLDYgKzIxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KIAogI2luY2x1ZGUgInA1NC5oIgogI2luY2x1ZGUgInA1NGNvbW1vbi5oIgpAQCAtNzM1LDEwICs3MzgsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghKGhkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9JTl9GQ1NfR09PRCkpKSB7Ci0JCWlmIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfRkNTRkFJTCkKLQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7Ci0JCWVsc2UKLQkJCXJldHVybiAwOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9PSykKQEAgLTg0OSwxMCArODQ5LDExIEBACiAJCQkJCSAgIF9fbGUzMiByZXFfaWQpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmVudHJ5ID0gcHJpdi0+dHhfcXVldWUubmV4dDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CisJZW50cnkgPSBwcml2LT50eF9xdWV1ZS5uZXh0OwogCXdoaWxlIChlbnRyeSAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBlbnRyeS0+ZGF0YTsKIApAQCAtODcxLDcgKzg3Miw3IEBACiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IHA1NF9mcmFtZV9zZW50ICpwYXlsb2FkID0gKHN0cnVjdCBwNTRfZnJhbWVfc2VudCAqKSBoZHItPmRhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKmVudHJ5ID0gKHN0cnVjdCBza19idWZmICopIHByaXYtPnR4X3F1ZXVlLm5leHQ7CisJc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwogCXUzMiBhZGRyID0gbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpIC0gcHJpdi0+aGVhZHJvb207CiAJc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZSA9IE5VTEw7CiAJdTMyIGZyZWVkID0gMDsKQEAgLTg4MCw2ICs4ODEsNyBAQAogCWludCBjb3VudCwgaWR4OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwllbnRyeSA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBwcml2LT50eF9xdWV1ZS5uZXh0OwogCXdoaWxlIChlbnRyeSAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeSk7CiAJCXN0cnVjdCBwNTRfaGRyICplbnRyeV9oZHI7CkBAIC0xMTIyLDcgKzExMjQsNyBAQAogCQkJICAgICAgIHN0cnVjdCBwNTRfaGRyICpkYXRhLCB1MzIgbGVuKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICplbnRyeSA9IHByaXYtPnR4X3F1ZXVlLm5leHQ7CisJc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwogCXN0cnVjdCBza19idWZmICp0YXJnZXRfc2tiID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZTsKQEAgLTExNjAsNiArMTE2Miw3IEBACiAJCX0KIAl9CiAKKwllbnRyeSA9IHByaXYtPnR4X3F1ZXVlLm5leHQ7CiAJd2hpbGUgKGxlZnQtLSkgewogCQl1MzIgaG9sZV9zaXplOwogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeSk7CkBAIC0xNjc3LDcgKzE2ODAsNyBAQAogCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9OT05FOworCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNjkwLDcgKzE2OTMsNyBAQAogCQkgICAgKG1vZGUgIT0gUDU0X0ZJTFRFUl9UWVBFX1BST01JU0NVT1VTKSkKIAkJCW1vZGUgfD0gUDU0X0ZJTFRFUl9UWVBFX1RSQU5TUEFSRU5UOwogCX0gZWxzZQotCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX1JYX0RJU0FCTEVEOworCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTsKIAogCXNldHVwLT5tYWNfbW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwogCW1lbWNweShzZXR1cC0+bWFjX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CkBAIC0xODY4LDcgKzE4NzEsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBtb2RlLCBpbnQgbGluaywgaW50IGFjdCkKK3N0YXRpYyBpbnQgcDU0X3NldF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTg3OSwxMSArMTg4MiwxMSBAQAogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxlZCA9IChzdHJ1Y3QgcDU0X2xlZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmxlZCkpOwotCWxlZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwotCWxlZC0+bGVkX3Blcm1hbmVudCA9IGNwdV90b19sZTE2KGxpbmspOwotCWxlZC0+bGVkX3RlbXBvcmFyeSA9IGNwdV90b19sZTE2KGFjdCk7Ci0JbGVkLT5kdXJhdGlvbiA9IGNwdV90b19sZTE2KDEwMDApOworCWxlZCA9IChzdHJ1Y3QgcDU0X2xlZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpsZWQpKTsKKwlsZWQtPmZsYWdzID0gY3B1X3RvX2xlMTYoMHgwMDAzKTsKKwlsZWQtPm1hc2tbMF0gPSBsZWQtPm1hc2tbMV0gPSBjcHVfdG9fbGUxNihwcml2LT5zb2Z0bGVkX3N0YXRlKTsKKwlsZWQtPmRlbGF5WzBdID0gY3B1X3RvX2xlMTYoMSk7CisJbGVkLT5kZWxheVsxXSA9IGNwdV90b19sZTE2KDApOwogCXByaXYtPnR4KGRldiwgc2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNjcsNiArMjA3MCw5IEBACiAKIAlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT53b3JrLCAwKTsKIAorCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOworCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOworCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gZXJyOwpAQCAtMjA3OSw2ICsyMDg1LDkgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKKwlwcml2LT5zb2Z0bGVkX3N0YXRlID0gMDsKKwlwNTRfc2V0X2xlZHMoZGV2KTsKKwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yayk7CiAJaWYgKHByaXYtPmNhY2hlZF9iZWFjb24pCiAJCXA1NF90eF9jYW5jZWwoZGV2LCBwcml2LT5jYWNoZWRfYmVhY29uKTsKQEAgLTIxMTYsNyArMjEyNSw2IEBACiAKIAltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJcDU0X3NldHVwX21hYyhkZXYpOwotCXA1NF9zZXRfbGVkcyhkZXYsIDEsIDAsIDApOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTk2LDggKzIyMDQsNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gcDU0X3NldF9sZWRzKGRldiwgMSwgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSwgMCk7Ci0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0yMjExLDkgKzIyMTcsNyBAQAogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCiAJKnRvdGFsX2ZsYWdzICY9IEZJRl9QUk9NSVNDX0lOX0JTUyB8Ci0JCQlGSUZfT1RIRVJfQlNTIHwKLQkJCSgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpID8KLQkJCQlGSUZfRkNTRkFJTCA6IDA7CisJCQlGSUZfT1RIRVJfQlNTOwogCiAJcHJpdi0+ZmlsdGVyX2ZsYWdzID0gKnRvdGFsX2ZsYWdzOwogCkBAIC0yNDE2LDYgKzI0MjAsOTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCitzdGF0aWMgdm9pZCBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBwNTRfbGVkX2RldiAqbGVkID0gY29udGFpbmVyX29mKGxlZF9kZXYsIHN0cnVjdCBwNTRfbGVkX2RldiwKKwkJCQkJICAgICAgIGxlZF9kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGxlZC0+aHdfZGV2OworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwkvKiBEb24ndCB0b2dnbGUgdGhlIExFRCwgd2hlbiB0aGUgZGV2aWNlIGlzIGRvd24uICovCisJaWYgKHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCisJCXJldHVybiA7CisKKwlpZiAoYnJpZ2h0bmVzcyAhPSBMRURfT0ZGKQorCQlwcml2LT5zb2Z0bGVkX3N0YXRlIHw9IEJJVChsZWQtPmluZGV4KTsKKwllbHNlCisJCXByaXYtPnNvZnRsZWRfc3RhdGUgJj0gfkJJVChsZWQtPmluZGV4KTsKKworCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOworCWlmIChlcnIgJiYgbmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gdXBkYXRlICVzIExFRC5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBsZWRfZGV2LT5uYW1lKTsKK30KKworc3RhdGljIGludCBwNTRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVkX2luZGV4LAorCQkJICAgIGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCWlmIChsZWQtPnJlZ2lzdGVyZWQpCisJCXJldHVybiAtRUVYSVNUOworCisJc25wcmludGYobGVkLT5uYW1lLCBzaXplb2YobGVkLT5uYW1lKSwgInA1NC0lczo6JXMiLAorCQkgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7CisJbGVkLT5od19kZXYgPSBkZXY7CisJbGVkLT5pbmRleCA9IGxlZF9pbmRleDsKKwlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0OworCisJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2RldihkZXYtPndpcGh5KSwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRC5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBuYW1lKTsKKwllbHNlCisJCWxlZC0+cmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA1NF9pbml0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwkvKgorCSAqIFRPRE86CisJICogRmlndXJlIG91dCBpZiB0aGUgRUVQUk9NIGNvbnRhaW5zIHNvbWUgaGludHMgYWJvdXQgdGhlIG51bWJlcgorCSAqIG9mIGF2YWlsYWJsZS9wcm9ncmFtbWFibGUgTEVEcyBvZiB0aGUgZGV2aWNlLgorCSAqIEJ1dCBmb3Igbm93LCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZSB0d28gcHJvZ3JhbW1hYmxlIExFRHMuCisJICovCisKKwllcnIgPSBwNTRfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPmFzc29jX2xlZCwgMCwgImFzc29jIiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKGRldikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwNTRfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPnR4X2xlZCwgMSwgInR4IiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGRldikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwNTRfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChwcml2LT50eF9sZWQucmVnaXN0ZXJlZCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnByaXYtPnR4X2xlZC5sZWRfZGV2KTsKKwlpZiAocHJpdi0+YXNzb2NfbGVkLnJlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT5hc3NvY19sZWQubGVkX2Rldik7Cit9CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHA1NF9vcHMgPSB7CiAJLnR4CQkJPSBwNTRfdHgsCiAJLnN0YXJ0CQkJPSBwNTRfc3RhcnQsCkBAIC0yNDQ5LDYgKzI1NDMsOCBAQAogCXByaXYtPmJhc2ljX3JhdGVfbWFzayA9IDB4MTVmOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4X3F1ZXVlKTsKIAlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CisJCSAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgfAogCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwogCkBAIC0yNDg2LDEyICsyNTgyLDM3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwNTRfaW5pdF9jb21tb24pOwogCitpbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKworCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihwZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIGRldmljZSAoJWQpLlxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKwllcnIgPSBwNTRfaW5pdF9sZWRzKGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKworCWRldl9pbmZvKHBkZXYsICJpcyByZWdpc3RlcmVkIGFzICclcydcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlZ2lzdGVyX2NvbW1vbik7CisKIHZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlrZnJlZShwcml2LT5pcV9hdXRvY2FsKTsKIAlrZnJlZShwcml2LT5vdXRwdXRfbGltaXQpOwogCWtmcmVlKHByaXYtPmN1cnZlX2RhdGEpOworCisJI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJcDU0X3VucmVnaXN0ZXJfbGVkcyhkZXYpOworCSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X2ZyZWVfY29tbW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCmluZGV4IGRlZjIzYjEuLjc1ZWFkN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKQEAgLTUxNSwxMCArNTE1LDkgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcDU0X2xlZCB7Ci0JX19sZTE2IG1vZGU7Ci0JX19sZTE2IGxlZF90ZW1wb3Jhcnk7Ci0JX19sZTE2IGxlZF9wZXJtYW5lbnQ7Ci0JX19sZTE2IGR1cmF0aW9uOworCV9fbGUxNiBmbGFnczsKKwlfX2xlMTYgbWFza1syXTsKKwlfX2xlMTYgZGVsYXlbMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHA1NF9lZGNmIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwppbmRleCAzZjlhNmIwLi5lMzU2OWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCkBAIC00MTMsOCArNDEzLDcgQEAKIAllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsICZwNTRwX2ludGVycnVwdCwKIAkJCSAgSVJRRl9TSEFSRUQsICJwNTRwY2kiLCBkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC00NzYsMzAgKzQ3NSwyNiBAQAogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAltZW1fYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAltZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAlpZiAobWVtX2xlbiA8IHNpemVvZihzdHJ1Y3QgcDU0cF9jc3IpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IFRvbyBzaG9ydCBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJUb28gc2hvcnQgUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX2Rpc2FibGVfZGV2OwogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgInA1NHBjaSIpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9kaXNhYmxlX2RldjsKIAl9CiAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykgfHwKIAkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBlcnJfZnJlZV9yZWc7CiAJfQogCkBAIC01MTEsOCArNTA2LDcgQEAKIAogCWRldiA9IHA1NF9pbml0X2NvbW1vbihzaXplb2YoKnByaXYpKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9yZWc7CiAJfQpAQCAtNTI1LDE3ICs1MTksMTUgQEAKIAogCXByaXYtPm1hcCA9IGlvcmVtYXAobWVtX2FkZHIsIG1lbV9sZW4pOwogCWlmICghcHJpdi0+bWFwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZXJyID0gLUVJTlZBTDsJLy8gVE9ETzogdXNlIGEgYmV0dGVyIGVycm9yIGNvZGU/CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIAogCXByaXYtPnJpbmdfY29udHJvbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZigqcHJpdi0+cmluZ19jb250cm9sKSwKIAkJCQkJCSAgJnByaXYtPnJpbmdfY29udHJvbF9kbWEpOwogCWlmICghcHJpdi0+cmluZ19jb250cm9sKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBhbGxvY2F0ZSByaW5nc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHJpbmdzXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW91bm1hcDsKIAl9CkBAIC01NDksOCArNTQxLDcgQEAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgImlzbDM4ODZwY2kiLAogCQkJICAgICAgICZwcml2LT5wZGV2LT5kZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogY2Fubm90IGZpbmQgZmlybXdhcmUgIgotCQkJIihpc2wzODg2cGNpKVxuIiwgcGNpX25hbWUocHJpdi0+cGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZmluZCBmaXJtd2FyZSAoaXNsMzg4NnBjaSlcbiIpOwogCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgImlzbDM4ODYiLAogCQkJCSAgICAgICAmcHJpdi0+cGRldi0+ZGV2KTsKIAkJaWYgKGVycikKQEAgLTU2NSwxMiArNTU2LDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwllcnIgPSBwNTRfcmVnaXN0ZXJfY29tbW9uKGRldiwgJnBkZXYtPmRldik7CisJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9jb21tb247Ci0JfQogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwppbmRleCA3ZmRlMjQzLi4yYjIyMmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC02OTQsMTUgKzY5NCwxMCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOwogCi0JcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyICIKLQkJCQkJICJtYWM4MDIxMSBodzogJWQiLCByZXQpOworCXJldCA9IHA1NF9yZWdpc3Rlcl9jb21tb24oaHcsICZwcml2LT5zcGktPmRldik7CisJaWYgKHJldCkKIAkJZ290byBlcnJfZnJlZV9jb21tb247Ci0JfQogCi0JZGV2X2luZm8oJnByaXYtPnNwaS0+ZGV2LCAiZGV2aWNlIGlzIGJvdW5kIHRvICVzXG4iLAotCQkgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfY29tbW9uOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDk1MzlkZGMuLmRhNjY0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTk3NiwxMSArOTc2LDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiKHA1NHVzYikgQ2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZVxuIik7CisJZXJyID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsICZ1ZGV2LT5kZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwotCX0KIAogCXJldHVybiAwOwogCkBAIC0xMDI0LDYgKzEwMjIsNyBAQAogCS5kaXNjb25uZWN0ID0gcDU0dV9kaXNjb25uZWN0LAogCS5wcmVfcmVzZXQgPSBwNTR1X3ByZV9yZXNldCwKIAkucG9zdF9yZXNldCA9IHA1NHVfcG9zdF9yZXNldCwKKwkuc29mdF91bmJpbmQgPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcDU0dV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCmluZGV4IDkxOTY4MjUuLjE2NmVkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCkBAIC00Myw3ICs0Myw2IEBACiAKIHN0YXRpYyBpbnQgcHJpc201NF9icmluZ19kb3duKGlzbHBjaV9wcml2YXRlICopOwogc3RhdGljIGludCBpc2xwY2lfYWxsb2NfbWVtb3J5KGlzbHBjaV9wcml2YXRlICopOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppc2xwY2lfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogLyogVGVtcG9yYXJ5IGR1bW15IE1BQyBhZGRyZXNzIHRvIHVzZSB1bnRpbCBmaXJtd2FyZSBpcyBsb2FkZWQuCiAgKiBUaGUgaWRlYSB0aGVyZSBpcyB0aGF0IHNvbWUgdG9vbHMgKHN1Y2ggYXMgbmFtZWlmKSBtYXkgcXVlcnkKQEAgLTYxNCwxOCArNjEzLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCi1pc2xwY2lfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCi0jaWYgVkVSQk9TRSA+IFNIT1dfRVJST1JfTUVTU0FHRVMKLQlERUJVRyhTSE9XX0ZVTkNUSU9OX0NBTExTLCAiaXNscGNpX3N0YXRpc3RpY3NcbiIpOwotI2VuZGlmCi0KLQlyZXR1cm4gJnByaXYtPnN0YXRpc3RpY3M7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODA0LDEwICs3OTEsMjIgQEAKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlzbHBjaV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXNscGNpX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGlzbHBjaV9ldGh0b29sX2dldF9kcnZpbmZvLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpc2xwY2lfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGlzbHBjaV9vcGVuLAorCS5uZG9fc3RvcAkJPSBpc2xwY2lfY2xvc2UsCisJLm5kb19kb19pb2N0bAkJPSBwcmlzbTU0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpc2xwY2lfZXRoX3RyYW5zbWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBpc2xwY2lfZXRoX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gcHJpc201NF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0cnVjdCBuZXRfZGV2aWNlICoKIGlzbHBjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTgyNywyNSArODI2LDE2IEBACiAJbmRldi0+aXJxID0gcGRldi0+aXJxOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgKi8KLQluZGV2LT5vcGVuID0gJmlzbHBjaV9vcGVuOwotCW5kZXYtPnN0b3AgPSAmaXNscGNpX2Nsb3NlOwotCW5kZXYtPmdldF9zdGF0cyA9ICZpc2xwY2lfc3RhdGlzdGljczsKLQluZGV2LT5kb19pb2N0bCA9ICZwcmlzbTU0X2lvY3RsOwotCW5kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0KLQkgICAgKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSAmcHJpc201NF9oYW5kbGVyX2RlZjsKKwluZGV2LT5uZXRkZXZfb3BzID0gJmlzbHBjaV9uZXRkZXZfb3BzOworCW5kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnByaXNtNTRfaGFuZGxlcl9kZWY7CiAJbmRldi0+ZXRodG9vbF9vcHMgPSAmaXNscGNpX2V0aHRvb2xfb3BzOwogCi0JbmRldi0+aGFyZF9zdGFydF94bWl0ID0gJmlzbHBjaV9ldGhfdHJhbnNtaXQ7CiAJLyogbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmlzbHBjaV9zZXRfbXVsdGljYXN0X2xpc3Q7ICovCiAJbmRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKLQluZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmcHJpc201NF9zZXRfbWFjX2FkZHJlc3M7CiAJLyogR2V0IGEgbm9uLXplcm8gZHVtbXkgTUFDIGFkZHJlc3MgZm9yIG5hbWVpZi4gSmVhbiBJSSAqLwogCW1lbWNweShuZGV2LT5kZXZfYWRkciwgZHVtbXlfbWFjLCA2KTsKIAotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAogCW5kZXYtPndhdGNoZG9nX3RpbWVvID0gSVNMUENJX1RYX1RJTUVPVVQ7Ci0JbmRldi0+dHhfdGltZW91dCA9ICZpc2xwY2lfZXRoX3R4X3RpbWVvdXQ7Ci0jZW5kaWYKIAogCS8qIGFsbG9jYXRlIGEgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlIHRvIHRoZSBuZXR3b3JrIGRldmljZSAgKi8KIAlwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCmluZGV4IDhlNTVhNWYuLmM0ZDBmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCkBAIC0xNTgsOSArMTU4LDYgQEAKIAlkbWFfYWRkcl90IHBjaV9tYXBfdHhfYWRkcmVzc1tJU0wzOFhYX0NCX1RYX1FTSVpFXTsKIAlkbWFfYWRkcl90IHBjaV9tYXBfcnhfYWRkcmVzc1tJU0wzOFhYX0NCX1JYX1FTSVpFXTsKIAotCS8qIGRyaXZlciBuZXR3b3JrIGludGVyZmFjZSBtZW1iZXJzICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdGlzdGljczsKLQogCS8qIHdhaXQgZm9yIGEgcmVzZXQgaW50ZXJydXB0ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfZG9uZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwppbmRleCA4ODg5NWJkLi5lZjNlZjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwpAQCAtMjMxLDggKzIzMSw4IEBACiAKIAkvKiBzZXQgdGhlIHRyYW5zbWlzc2lvbiB0aW1lICovCiAJbmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXByaXYtPnN0YXRpc3RpY3MudHhfcGFja2V0cysrOwotCXByaXYtPnN0YXRpc3RpY3MudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJbmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCW5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJLyogdHJpZ2dlciB0aGUgZGV2aWNlICovCiAJaXNscGNpX3RyaWdnZXIocHJpdik7CkBAIC0yNDMsNyArMjQzLDcgQEAKIAlyZXR1cm4gMDsKIAogICAgICAgZHJvcF9mcmVlOgotCXByaXYtPnN0YXRpc3RpY3MudHhfZHJvcHBlZCsrOworCW5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zbG9jaywgZmxhZ3MpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwpAQCAtNDA4LDggKzQwOCw4IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOwogCX0KIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JcHJpdi0+c3RhdGlzdGljcy5yeF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdGlzdGljcy5yeF9ieXRlcyArPSBzaXplOworCW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJLyogZGVsaXZlciB0aGUgc2tiIHRvIHRoZSBuZXR3b3JrIGxheWVyICovCiAjaWZkZWYgSVNMUENJX0VUSF9ERUJVRwpAQCAtNDk3LDEwICs0OTcsOSBAQAogaXNscGNpX2V0aF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRpc3RpY3MgPSAmcHJpdi0+c3RhdGlzdGljczsKIAogCS8qIGluY3JlbWVudCB0aGUgdHJhbnNtaXQgZXJyb3IgY291bnRlciAqLwotCXN0YXRpc3RpY3MtPnR4X2Vycm9ycysrOworCW5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJaWYgKCFwcml2LT5yZXNldF90YXNrX3BlbmRpbmcpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA5OWVjN2Q2Li5mYTkwZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtOCw3ICs4LDcgQEAKICAqIENvcHlyaWdodCAoYykgMTk5OCAgQ29yZXkgVGhvbWFzIChjb3JleUB3b3JsZC5zdGQuY29tKQogICoKICAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb25seSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9ubHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBJdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMjcsNyArMjcsNyBAQAogICoKICAqIERhbmllbGUgQmVsbHVjY2kgPGJlbGx1Y2RhQHRpc2NhbGkuaXQ+IC0gMDcvMTAvMjAwMwogICogLSBBdWRpdCBjb3B5X3RvX3VzZXIgaW4gaW9jdGwoU0lPQ0dJV0VTU0lEKQotICogCisgKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02NSw4ICs2NSw4IEBACiAvKiBXYXJuaW5nIDogdGhlc2Ugc3R1ZmYgd2lsbCBzbG93IGRvd24gdGhlIGRyaXZlci4uLiAqLwogI2RlZmluZSBXSVJFTEVTU19TUFkJCS8qIEVuYWJsZSBzcHlpbmcgYWRkcmVzc2VzICovCiAvKiBEZWZpbml0aW9ucyB3ZSBuZWVkIGZvciBzcHkgKi8KLXR5cGVkZWYgc3RydWN0IGl3X3N0YXRpc3RpY3MJaXdfc3RhdHM7Ci10eXBlZGVmIHVfY2hhcgltYWNfYWRkcltFVEhfQUxFTl07CS8qIEhhcmR3YXJlIGFkZHJlc3MgKi8KK3R5cGVkZWYgc3RydWN0IGl3X3N0YXRpc3RpY3MgaXdfc3RhdHM7Cit0eXBlZGVmIHVfY2hhciBtYWNfYWRkcltFVEhfQUxFTl07CS8qIEhhcmR3YXJlIGFkZHJlc3MgKi8KIAogI2luY2x1ZGUgInJheWN0bC5oIgogI2luY2x1ZGUgInJheV9jcy5oIgpAQCAtODYsNyArODYsNyBAQAogc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKIC8qICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7ICovCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhhcmdzKTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnID4gKG4pKSBwcmludGsoYXJncyk7CiAjZWxzZQogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQogI2VuZGlmCkBAIC0xMDgsMTIgKzEwOCwxMiBAQAogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhbGwpOwogc3RhdGljIGludCB0cmFuc2xhdGVfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LCBVQ0hBUiBtc2dfdHlwZSwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pOworc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKKwkJCSAgICAgVUNIQVIgbXNnX3R5cGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpOwogc3RhdGljIHZvaWQgdW50cmFuc2xhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbik7Ci1zdGF0aWMgaXdfc3RhdHMgKiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYJcmF5X2hhbmRsZXJfZGVmOworc3RhdGljIGl3X3N0YXRzICpyYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiByYXlfaGFuZGxlcl9kZWY7CiAKIC8qKioqKiBQcm90b3R5cGVzIGZvciByYXlsaW5rIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgYXNjX3RvX2ludChjaGFyIGEpOwpAQCAtMTI0LDcgKzEyNCw3IEBACiBzdGF0aWMgaW50IGdldF9mcmVlX3R4X2NjcyhyYXlfZGV2X3QgKmxvY2FsKTsKIHN0YXRpYyB2b2lkIGluaXRfc3RhcnR1cF9wYXJhbXMocmF5X2Rldl90ICpsb2NhbCk7CiBzdGF0aWMgaW50IHBhcnNlX2FkZHIoY2hhciAqaW5fc3RyLCBVQ0hBUiAqb3V0KTsKLXN0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciogZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgVUNIQVIgdHlwZSk7CitzdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFVDSEFSIHR5cGUpOwogc3RhdGljIGludCByYXlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaW50ZXJydXB0X2VjZihyYXlfZGV2X3QgKmxvY2FsLCBpbnQgY2NzKTsKIHN0YXRpYyB2b2lkIHJheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEzMiwxNyArMTMyLDE3IEBACiBzdGF0aWMgdm9pZCB2ZXJpZnlfZGxfc3RhcnR1cCh1X2xvbmcpOwogCiAvKiBQcm90b3R5cGVzIGZvciBpbnRlcnJwdCB0aW1lIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGlycXJldHVybl90IHJheV9pbnRlcnJ1cHQgKGludCByZWcsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcmF5X2ludGVycnVwdChpbnQgcmVnLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgY2xlYXJfaW50ZXJydXB0KHJheV9kZXZfdCAqbG9jYWwpOwotc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKK3N0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CiBzdGF0aWMgaW50IGNvcHlfZnJvbV9yeF9idWZmKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgcGt0X2FkZHIsIGludCBsZW4pOwogc3RhdGljIHZvaWQgcmF5X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcyk7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2ZyYWdfY2hhaW4ocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKTsKIHN0YXRpYyB2b2lkIHJ4X2F1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOwotc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIHVuc2lnbmVkIGludCBwa3RfYWRkciwgCi0gICAgICAgICAgICAgaW50IHJ4X2xlbik7CisJCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKK3N0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKIHN0YXRpYyB2b2lkIGFzc29jaWF0ZShyYXlfZGV2X3QgKmxvY2FsKTsKIAogLyogQ2FyZCBjb21tYW5kIGZ1bmN0aW9ucyAqLwpAQCAtMjE5LDgyICsyMTksOTcgQEAKIG1vZHVsZV9wYXJhbShyYXlfbWVtX3NwZWVkLCBpbnQsIDApOwogCiBzdGF0aWMgVUNIQVIgYjVfZGVmYXVsdF9zdGFydHVwX3Bhcm1zW10gPSB7Ci0gICAgMCwgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGhvYyBzdGF0aW9uICovCi0gICAnTCcsJ0knLCdOJywnVScsJ1gnLCAwLCAgMCwgIDAsICAvKiAzMiBjaGFyIEVTU0lEICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMSwgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgICAgICAgICAgLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEZyYWcgdGhyZXNob2xkICovCi0gICAgMHgwMCwgMHg4MCwgICAgICAgICAgICAgICAgICAgICAvKiBIb3AgdGltZSAxMjggS3VzKi8KLSAgICAweDAxLCAweDAwLCAgICAgICAgICAgICAgICAgICAgIC8qIEJlYWNvbiBwZXJpb2QgMjU2IEt1cyAqLwotICAgIDB4MDEsIDB4MDcsIDB4YTMsICAgICAgICAgICAgICAgLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQqLwotICAgIDB4MWQsIDB4ODIsIDB4NGUsICAgICAgICAgICAgICAgLyogU0lGUywgRElGUywgUElGUyAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogUlRTIHRocmVzaG9sZCAqLwotICAgIDB4MDQsIDB4ZTIsIDB4MzgsIDB4QTQsICAgICAgICAgLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KLSAgICAweDA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KLSAgICAweDA4LCAweDAyLCAweDA4LCAgICAgICAgICAgICAgIC8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb21pc2N1b3VzIG1vZGUgKi8KLSAgICAweDBjLCAweDBiZCwgICAgICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSB3b3JkICovCi0gICAgMHgzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbG90IHRpbWUgKi8KLSAgICAweGZmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLwotICAgIDB4MDUsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCi0gICAgMHgwMSwgMHgwYiwgMHg0ZiwgICAgICAgICAgICAgICAvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLworCTAsIDAsCQkJLyogQWRob2Mgc3RhdGlvbiAqLworCSdMJywgJ0knLCAnTicsICdVJywgJ1gnLCAwLCAwLCAwLAkvKiAzMiBjaGFyIEVTU0lEICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMSwgMCwJCQkvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLworCTAsIDAsIDAsIDAsIDAsIDAsCS8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCisJMHg3ZiwgMHhmZiwJCS8qIEZyYWcgdGhyZXNob2xkICovCisJMHgwMCwgMHg4MCwJCS8qIEhvcCB0aW1lIDEyOCBLdXMgKi8KKwkweDAxLCAweDAwLAkJLyogQmVhY29uIHBlcmlvZCAyNTYgS3VzICovCisJMHgwMSwgMHgwNywgMHhhMywJLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQgKi8KKwkweDFkLCAweDgyLCAweDRlLAkvKiBTSUZTLCBESUZTLCBQSUZTICovCisJMHg3ZiwgMHhmZiwJCS8qIFJUUyB0aHJlc2hvbGQgKi8KKwkweDA0LCAweGUyLCAweDM4LCAweEE0LAkvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLworCTB4MDUsCQkJLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLworCTB4MDgsIDB4MDIsIDB4MDgsCS8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4ICovCisJMCwJCQkvKiBQcm9taXNjdW91cyBtb2RlICovCisJMHgwYywgMHgwYmQsCQkvKiBVbmlxdWUgd29yZCAqLworCTB4MzIsCQkJLyogU2xvdCB0aW1lICovCisJMHhmZiwgMHhmZiwJCS8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLworCTB4MDUsIDB4ZmYsCQkvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KKwkweDAxLCAweDBiLCAweDRmLAkvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLwogLyogYjQgLSBiNSBkaWZmZXJlbmNlcyBzdGFydCBoZXJlICovCi0gICAgMHgwMCwgMHgzZiwgICAgICAgICAgICAgICAgICAgICAvKiBDVyBtYXggKi8KLSAgICAweDAwLCAweDBmLCAgICAgICAgICAgICAgICAgICAgIC8qIENXIG1pbiAqLwotICAgIDB4MDQsIDB4MDgsICAgICAgICAgICAgICAgICAgICAgLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCi0gICAgMHgyOCwgMHgyOCwgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLwotICAgIDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHN5bmMgdGhyZXNoICovCi0gICAgMCwgMiwgMiwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbGxvdyBicm9hZGNhc3QgU1NJRCBwcm9iZSByZXNwICovCi0gICAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcml2YWN5IG11c3Qgc3RhcnQsIGNhbiBqb2luICovCi0gICAgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCAgICAgICAgICAvKiBiYXNpYyByYXRlIHNldCAqLworCTB4MDAsIDB4M2YsCQkvKiBDVyBtYXggKi8KKwkweDAwLCAweDBmLAkJLyogQ1cgbWluICovCisJMHgwNCwgMHgwOCwJCS8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLworCTB4MjgsIDB4MjgsCQkvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLworCTcsCQkJLyogZGV0IHN5bmMgdGhyZXNoICovCisJMCwgMiwgMiwJCS8qIHRlc3QgbW9kZSwgbWluLCBtYXggKi8KKwkwLAkJCS8qIGFsbG93IGJyb2FkY2FzdCBTU0lEIHByb2JlIHJlc3AgKi8KKwkwLCAwLAkJCS8qIHByaXZhY3kgbXVzdCBzdGFydCwgY2FuIGpvaW4gKi8KKwkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwCS8qIGJhc2ljIHJhdGUgc2V0ICovCiB9OwogCiBzdGF0aWMgVUNIQVIgYjRfZGVmYXVsdF9zdGFydHVwX3Bhcm1zW10gPSB7Ci0gICAgMCwgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGhvYyBzdGF0aW9uICovCi0gICAnTCcsJ0knLCdOJywnVScsJ1gnLCAwLCAgMCwgIDAsICAvKiAzMiBjaGFyIEVTU0lEICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMSwgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgICAgICAgICAgLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEZyYWcgdGhyZXNob2xkICovCi0gICAgMHgwMiwgMHgwMCwgICAgICAgICAgICAgICAgICAgICAvKiBIb3AgdGltZSAqLwotICAgIDB4MDAsIDB4MDEsICAgICAgICAgICAgICAgICAgICAgLyogQmVhY29uIHBlcmlvZCAqLwotICAgIDB4MDEsIDB4MDcsIDB4YTMsICAgICAgICAgICAgICAgLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQqLwotICAgIDB4MWQsIDB4ODIsIDB4Y2UsICAgICAgICAgICAgICAgLyogU0lGUywgRElGUywgUElGUyAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogUlRTIHRocmVzaG9sZCAqLwotICAgIDB4ZmIsIDB4MWUsIDB4YzcsIDB4NWMsICAgICAgICAgLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KLSAgICAweDA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KLSAgICAweDA0LCAweDAyLCAweDQsICAgICAgICAgICAgICAgIC8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb21pc2N1b3VzIG1vZGUgKi8KLSAgICAweDBjLCAweDBiZCwgICAgICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSB3b3JkICovCi0gICAgMHg0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbG90IHRpbWUgKFRCRCBzZWVtcyB3cm9uZykqLwotICAgIDB4ZmYsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCi0gICAgMHgwNSwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KLSAgICAweDAxLCAweDBiLCAweDRlLCAgICAgICAgICAgICAgIC8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCisJMCwgMCwJCQkvKiBBZGhvYyBzdGF0aW9uICovCisJJ0wnLCAnSScsICdOJywgJ1UnLCAnWCcsIDAsIDAsIDAsCS8qIDMyIGNoYXIgRVNTSUQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkxLCAwLAkJCS8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCisJMCwgMCwgMCwgMCwgMCwgMCwJLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KKwkweDdmLCAweGZmLAkJLyogRnJhZyB0aHJlc2hvbGQgKi8KKwkweDAyLCAweDAwLAkJLyogSG9wIHRpbWUgKi8KKwkweDAwLCAweDAxLAkJLyogQmVhY29uIHBlcmlvZCAqLworCTB4MDEsIDB4MDcsIDB4YTMsCS8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0ICovCisJMHgxZCwgMHg4MiwgMHhjZSwJLyogU0lGUywgRElGUywgUElGUyAqLworCTB4N2YsIDB4ZmYsCQkvKiBSVFMgdGhyZXNob2xkICovCisJMHhmYiwgMHgxZSwgMHhjNywgMHg1YywJLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KKwkweDA1LAkJCS8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KKwkweDA0LCAweDAyLCAweDQsCS8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4ICovCisJMCwJCQkvKiBQcm9taXNjdW91cyBtb2RlICovCisJMHgwYywgMHgwYmQsCQkvKiBVbmlxdWUgd29yZCAqLworCTB4NGUsCQkJLyogU2xvdCB0aW1lIChUQkQgc2VlbXMgd3JvbmcpICovCisJMHhmZiwgMHhmZiwJCS8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLworCTB4MDUsIDB4ZmYsCQkvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KKwkweDAxLCAweDBiLCAweDRlLAkvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLwogLyogYjQgLSBiNSBkaWZmZXJlbmNlcyBzdGFydCBoZXJlICovCi0gICAgMHgzZiwgMHgwZiwgICAgICAgICAgICAgICAgICAgICAvKiBDVyBtYXgsIG1pbiAqLwotICAgIDB4MDQsIDB4MDgsICAgICAgICAgICAgICAgICAgICAgLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCi0gICAgMHgyOCwgMHgyOCwgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLwotICAgIDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHN5bmMgdGhyZXNoICovCi0gICAgMCwgMiwgMiAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4Ki8KKwkweDNmLCAweDBmLAkJLyogQ1cgbWF4LCBtaW4gKi8KKwkweDA0LCAweDA4LAkJLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCisJMHgyOCwgMHgyOCwJCS8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCisJNywJCQkvKiBkZXQgc3luYyB0aHJlc2ggKi8KKwkwLCAyLCAyCQkJLyogdGVzdCBtb2RlLCBtaW4sIG1heCAqLwogfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZXRoMl9sbGNbXSA9IHsweGFhLCAweGFhLCAzLCAwLCAwLCAwfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGV0aDJfbGxjW10gPSB7IDB4YWEsIDB4YWEsIDMsIDAsIDAsIDAgfTsKIAogc3RhdGljIGNoYXIgaG9wX3BhdHRlcm5fbGVuZ3RoW10gPSB7IDEsCi0JICAgICBVU0FfSE9QX01PRCwgICAgICAgICAgICAgRVVST1BFX0hPUF9NT0QsCi0JICAgICBKQVBBTl9IT1BfTU9ELCAgICAgICAgICAgS09SRUFfSE9QX01PRCwKLQkgICAgIFNQQUlOX0hPUF9NT0QsICAgICAgICAgICBGUkFOQ0VfSE9QX01PRCwKLQkgICAgIElTUkFFTF9IT1BfTU9ELCAgICAgICAgICBBVVNUUkFMSUFfSE9QX01PRCwKLQkgICAgIEpBUEFOX1RFU1RfSE9QX01PRAorCVVTQV9IT1BfTU9ELCBFVVJPUEVfSE9QX01PRCwKKwlKQVBBTl9IT1BfTU9ELCBLT1JFQV9IT1BfTU9ELAorCVNQQUlOX0hPUF9NT0QsIEZSQU5DRV9IT1BfTU9ELAorCUlTUkFFTF9IT1BfTU9ELCBBVVNUUkFMSUFfSE9QX01PRCwKKwlKQVBBTl9URVNUX0hPUF9NT0QKIH07CiAKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiUmF5bGluay9XZWJHZWFyIHdpcmVsZXNzIExBTiAtIENvcmV5IDxUaG9tYXMgY29yZXlAd29ybGQuc3RkLmNvbT4iOworc3RhdGljIGNoYXIgcmNzaWRbXSA9CisgICAgIlJheWxpbmsvV2ViR2VhciB3aXJlbGVzcyBMQU4gLSBDb3JleSA8VGhvbWFzIGNvcmV5QHdvcmxkLnN0ZC5jb20+IjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByYXlfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQgCQk9IHJheV9kZXZfaW5pdCwKKwkubmRvX29wZW4gCQk9IHJheV9vcGVuLAorCS5uZG9fc3RvcCAJCT0gcmF5X2Rldl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcmF5X2Rldl9zdGFydF94bWl0LAorCS5uZG9fc2V0X2NvbmZpZwkJPSByYXlfZGV2X2NvbmZpZywKKwkubmRvX2dldF9zdGF0cwkJPSByYXlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgcmF5X2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC0zMDYsNzEgKzMyMSw2NiBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWw7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlyYXlfZGV2X3QgKmxvY2FsOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLSAgICBERUJVRygxLCAicmF5X2F0dGFjaCgpXG4iKTsKKwlERUJVRygxLCAicmF5X2F0dGFjaCgpXG4iKTsKIAotICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCi0gICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHJheV9kZXZfdCkpOwotICAgIGlmICghZGV2KQotCSAgICBnb3RvIGZhaWxfYWxsb2NfZGV2OworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHJheV9kZXZfdCkpOworCWlmICghZGV2KQorCQlnb3RvIGZhaWxfYWxsb2NfZGV2OwogCi0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxvY2FsLT5maW5kZXIgPSBwX2RldjsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJbG9jYWwtPmZpbmRlciA9IHBfZGV2OwogCi0gICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nLiBOb25lIHVzZWQgaGVyZSAqLwotICAgIHBfZGV2LT5pby5OdW1Qb3J0czEgPSAwOwotICAgIHBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIHBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDU7CisJLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nLiBOb25lIHVzZWQgaGVyZSAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSAwOworCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDU7CiAKLSAgICAvKiBJbnRlcnJ1cHQgc2V0dXAuIEZvciBQQ01DSUEsIGRyaXZlciB0YWtlcyB3aGF0J3MgZ2l2ZW4gKi8KLSAgICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0gICAgcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICBwX2Rldi0+aXJxLkhhbmRsZXIgPSAmcmF5X2ludGVycnVwdDsKKwkvKiBJbnRlcnJ1cHQgc2V0dXAuIEZvciBQQ01DSUEsIGRyaXZlciB0YWtlcyB3aGF0J3MgZ2l2ZW4gKi8KKwlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlwX2Rldi0+aXJxLkhhbmRsZXIgPSAmcmF5X2ludGVycnVwdDsKIAotICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KLSAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLSAgICBwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IDE7CisJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLworCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAotICAgIHBfZGV2LT5wcml2ID0gZGV2OwotICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7Ci0gICAgCi0gICAgbG9jYWwtPmZpbmRlciA9IHBfZGV2OwotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5TRVJURUQ7Ci0gICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwotICAgIGxvY2FsLT5udW1fbXVsdGkgPSAwOwotICAgIERFQlVHKDIsInJheV9hdHRhY2ggcF9kZXYgPSAlcCwgIGRldiA9ICVwLCAgbG9jYWwgPSAlcCwgaW50ciA9ICVwXG4iLAotICAgICAgICAgIHBfZGV2LGRldixsb2NhbCwmcmF5X2ludGVycnVwdCk7CisJcF9kZXYtPnByaXYgPSBkZXY7CisJcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKIAotICAgIC8qIFJheWxpbmsgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJnJheV9kZXZfc3RhcnRfeG1pdDsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmcmF5X2Rldl9jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgID0gJnJheV9nZXRfc3RhdHM7Ci0gICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7Ci0gICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZyYXlfaGFuZGxlcl9kZWY7CisJbG9jYWwtPmZpbmRlciA9IHBfZGV2OworCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5TRVJURUQ7CisJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOworCWxvY2FsLT5udW1fbXVsdGkgPSAwOworCURFQlVHKDIsICJyYXlfYXR0YWNoIHBfZGV2ID0gJXAsICBkZXYgPSAlcCwgIGxvY2FsID0gJXAsIGludHIgPSAlcFxuIiwKKwkgICAgICBwX2RldiwgZGV2LCBsb2NhbCwgJnJheV9pbnRlcnJ1cHQpOworCisJLyogUmF5bGluayBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCisJZGV2LT5uZXRkZXZfb3BzID0gJnJheV9uZXRkZXZfb3BzOworCVNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcmF5X2hhbmRsZXJfZGVmOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIGxvY2FsLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJmxvY2FsLT5zcHlfZGF0YTsKLSAgICBkZXYtPndpcmVsZXNzX2RhdGEgPSAmbG9jYWwtPndpcmVsZXNzX2RhdGE7Ci0jZW5kaWYJLyogV0lSRUxFU1NfU1BZICovCisJbG9jYWwtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmbG9jYWwtPnNweV9kYXRhOworCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZsb2NhbC0+d2lyZWxlc3NfZGF0YTsKKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KIAotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKIAotICAgIERFQlVHKDIsInJheV9jcyByYXlfYXR0YWNoIGNhbGxpbmcgZXRoZXJfc2V0dXAuKVxuIik7Ci0gICAgZGV2LT5pbml0ID0gJnJheV9kZXZfaW5pdDsKLSAgICBkZXYtPm9wZW4gPSAmcmF5X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnJheV9kZXZfY2xvc2U7Ci0gICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCURFQlVHKDIsICJyYXlfY3MgcmF5X2F0dGFjaCBjYWxsaW5nIGV0aGVyX3NldHVwLilcbiIpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotICAgIGluaXRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJaW5pdF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIHRoaXNfZGV2aWNlID0gcF9kZXY7Ci0gICAgcmV0dXJuIHJheV9jb25maWcocF9kZXYpOworCXRoaXNfZGV2aWNlID0gcF9kZXY7CisJcmV0dXJuIHJheV9jb25maWcocF9kZXYpOwogCiBmYWlsX2FsbG9jX2RldjoKLSAgICByZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gLUVOT01FTTsKIH0gLyogcmF5X2F0dGFjaCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKICAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKQEAgLTM3OSwyNSArMzg5LDI3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXJheV9kZXZfdCAqbG9jYWw7CiAKLSAgICBERUJVRygxLCAicmF5X2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMSwgInJheV9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgdGhpc19kZXZpY2UgPSBOVUxMOwotICAgIGRldiA9IGxpbmstPnByaXY7CisJdGhpc19kZXZpY2UgPSBOVUxMOworCWRldiA9IGxpbmstPnByaXY7CiAKLSAgICByYXlfcmVsZWFzZShsaW5rKTsKKwlyYXlfcmVsZWFzZShsaW5rKTsKIAotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIGlmIChsaW5rLT5wcml2KSB7Ci0JaWYgKGxpbmstPmRldl9ub2RlKSB1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotICAgICAgICBmcmVlX25ldGRldihkZXYpOwotICAgIH0KLSAgICBERUJVRygyLCJyYXlfY3MgcmF5X2RldGFjaCBlbmRpbmdcbiIpOworCWlmIChsaW5rLT5wcml2KSB7CisJCWlmIChsaW5rLT5kZXZfbm9kZSkKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJfQorCURFQlVHKDIsICJyYXlfY3MgcmF5X2RldGFjaCBlbmRpbmdcbiIpOwogfSAvKiByYXlfZGV0YWNoICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICByYXlfY29uZmlnKCkgaXMgcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKICAgICBpcyByZWNlaXZlZCwgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0LCBhbmQgdG8gbWFrZSB0aGUKQEAgLTQwOCw5MiArNDIwLDEwMSBAQAogI2RlZmluZSBNQVhfVFVQTEVfU0laRSAxMjgKIHN0YXRpYyBpbnQgcmF5X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBpbnQgbGFzdF9mbiA9IDAsIGxhc3RfcmV0ID0gMDsKLSAgICBpbnQgaTsKLSAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbGFzdF9mbiA9IDAsIGxhc3RfcmV0ID0gMDsKKwlpbnQgaTsKKwl3aW5fcmVxX3QgcmVxOworCW1lbXJlcV90IG1lbTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICAgIERFQlVHKDEsICJyYXlfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKwlERUJVRygxLCAicmF5X2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICAvKiBEZXRlcm1pbmUgY2FyZCB0eXBlIGFuZCBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIERldGVjdGVkOiAlcyVzJXMlc1xuIiwKLQkgICBsaW5rLT5wcm9kX2lkWzBdID8gbGluay0+cHJvZF9pZFswXSA6ICIgIiwKLQkgICBsaW5rLT5wcm9kX2lkWzFdID8gbGluay0+cHJvZF9pZFsxXSA6ICIgIiwKLQkgICBsaW5rLT5wcm9kX2lkWzJdID8gbGluay0+cHJvZF9pZFsyXSA6ICIgIiwKLQkgICBsaW5rLT5wcm9kX2lkWzNdID8gbGluay0+cHJvZF9pZFszXSA6ICIgIik7CisJLyogRGV0ZXJtaW5lIGNhcmQgdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiAqLworCXByaW50ayhLRVJOX0lORk8gInJheV9jcyBEZXRlY3RlZDogJXMlcyVzJXNcbiIsCisJICAgICAgIGxpbmstPnByb2RfaWRbMF0gPyBsaW5rLT5wcm9kX2lkWzBdIDogIiAiLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzFdID8gbGluay0+cHJvZF9pZFsxXSA6ICIgIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFsyXSA/IGxpbmstPnByb2RfaWRbMl0gOiAiICIsCisJICAgICAgIGxpbmstPnByb2RfaWRbM10gPyBsaW5rLT5wcm9kX2lkWzNdIDogIiAiKTsKIAotICAgIC8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90Ci0gICAgICAgYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgotICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLSAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKLSAgICAKLSAgICAvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAotICAgICAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgotICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwkvKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorCSAgIGFjdHVhbGx5IGFzc2lnbiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KKwkgKi8KKwlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCisJLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KKwkgKi8KKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKKwkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogLyoqKiBTZXQgdXAgMzJrIHdpbmRvdyBmb3Igc2hhcmVkIG1lbW9yeSAodHJhbnNtaXQgYW5kIGNvbnRyb2wpICoqKioqKioqKioqKi8KLSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOwotICAgIHJlcS5CYXNlID0gMDsKLSAgICByZXEuU2l6ZSA9IDB4ODAwMDsKLSAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpOwotICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOyBtZW0uUGFnZSA9IDA7Ci0gICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKTsKLSAgICBsb2NhbC0+c3JhbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOworCXJlcS5BdHRyaWJ1dGVzID0KKwkgICAgV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7CisJcmVxLkJhc2UgPSAwOworCXJlcS5TaXplID0gMHg4MDAwOworCXJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7CisJQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSk7CisJbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7CisJbWVtLlBhZ2UgPSAwOworCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSk7CisJbG9jYWwtPnNyYW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAKIC8qKiogU2V0IHVwIDE2ayB3aW5kb3cgZm9yIHNoYXJlZCBtZW1vcnkgKHJlY2VpdmUgYnVmZmVyKSAqKioqKioqKioqKioqKiovCi0gICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKLSAgICByZXEuQmFzZSA9IDA7Ci0gICAgcmVxLlNpemUgPSAweDQwMDA7Ci0gICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpKTsKLSAgICBtZW0uQ2FyZE9mZnNldCA9IDB4ODAwMDsgbWVtLlBhZ2UgPSAwOwotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPnJtZW1faGFuZGxlLCAmbWVtKSk7Ci0gICAgbG9jYWwtPnJtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKKwlyZXEuQXR0cmlidXRlcyA9CisJICAgIFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOworCXJlcS5CYXNlID0gMDsKKwlyZXEuU2l6ZSA9IDB4NDAwMDsKKwlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOworCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csCisJCSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpKTsKKwltZW0uQ2FyZE9mZnNldCA9IDB4ODAwMDsKKwltZW0uUGFnZSA9IDA7CisJQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+cm1lbV9oYW5kbGUsICZtZW0pKTsKKwlsb2NhbC0+cm1lbSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAogLyoqKiBTZXQgdXAgd2luZG93IGZvciBhdHRyaWJ1dGUgbWVtb3J5ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9BTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7Ci0gICAgcmVxLkJhc2UgPSAwOwotICAgIHJlcS5TaXplID0gMHgxMDAwOwotICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPmFtZW1faGFuZGxlKSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7IG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5hbWVtX2hhbmRsZSwgJm1lbSkpOwotICAgIGxvY2FsLT5hbWVtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CisJcmVxLkF0dHJpYnV0ZXMgPQorCSAgICBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0FNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKKwlyZXEuQmFzZSA9IDA7CisJcmVxLlNpemUgPSAweDEwMDA7CisJcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKKwlDU19DSEVDSyhSZXF1ZXN0V2luZG93LAorCQkgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPmFtZW1faGFuZGxlKSk7CisJbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7CisJbWVtLlBhZ2UgPSAwOworCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPmFtZW1faGFuZGxlLCAmbWVtKSk7CisJbG9jYWwtPmFtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAKLSAgICBERUJVRygzLCJyYXlfY29uZmlnIHNyYW09JXBcbiIsbG9jYWwtPnNyYW0pOwotICAgIERFQlVHKDMsInJheV9jb25maWcgcm1lbT0lcFxuIixsb2NhbC0+cm1lbSk7Ci0gICAgREVCVUcoMywicmF5X2NvbmZpZyBhbWVtPSVwXG4iLGxvY2FsLT5hbWVtKTsKLSAgICBpZiAocmF5X2luaXQoZGV2KSA8IDApIHsKLSAgICAgICAgcmF5X3JlbGVhc2UobGluayk7Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KKwlERUJVRygzLCAicmF5X2NvbmZpZyBzcmFtPSVwXG4iLCBsb2NhbC0+c3JhbSk7CisJREVCVUcoMywgInJheV9jb25maWcgcm1lbT0lcFxuIiwgbG9jYWwtPnJtZW0pOworCURFQlVHKDMsICJyYXlfY29uZmlnIGFtZW09JXBcbiIsIGxvY2FsLT5hbWVtKTsKKwlpZiAocmF5X2luaXQoZGV2KSA8IDApIHsKKwkJcmF5X3JlbGVhc2UobGluayk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwotICAgIGkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLSAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgIHByaW50aygicmF5X2NvbmZpZyByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotICAgICAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQorCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOworCWkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoaSAhPSAwKSB7CisJCXByaW50aygicmF5X2NvbmZpZyByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOworCQlyYXlfcmVsZWFzZShsaW5rKTsKKwkJcmV0dXJuIGk7CisJfQogCi0gICAgc3RyY3B5KGxvY2FsLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOwotICAgIGxpbmstPmRldl9ub2RlID0gJmxvY2FsLT5ub2RlOworCXN0cmNweShsb2NhbC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZsb2NhbC0+bm9kZTsKIAotICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSYXlMaW5rLCBpcnEgJWQsIGh3X2FkZHIgJXBNXG4iLAotICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBSYXlMaW5rLCBpcnEgJWQsIGh3X2FkZHIgJXBNXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAotICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgIHJldHVybiAtRU5PREVWOworCXJheV9yZWxlYXNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogfSAvKiByYXlfY29uZmlnICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNjcyBfX2lvbWVtICpjY3NfYmFzZShyYXlfZGV2X3QgKmRldikKQEAgLTUxNiwyNjcgKzUzNywyNzggQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBpbnQgaTsKLSAgICBVQ0hBUiAqcDsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIERFQlVHKDEsICJyYXlfaW5pdCgweCVwKVxuIiwgZGV2KTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDAsInJheV9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwlpbnQgaTsKKwlVQ0hBUiAqcDsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCURFQlVHKDEsICJyYXlfaW5pdCgweCVwKVxuIiwgZGV2KTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDAsICJyYXlfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICBsb2NhbC0+bmV0X3R5cGUgPSBuZXRfdHlwZTsKLSAgICBsb2NhbC0+c3RhX3R5cGUgPSBUWVBFX1NUQTsKKwlsb2NhbC0+bmV0X3R5cGUgPSBuZXRfdHlwZTsKKwlsb2NhbC0+c3RhX3R5cGUgPSBUWVBFX1NUQTsKIAotICAgIC8qIENvcHkgdGhlIHN0YXJ0dXAgcmVzdWx0cyB0byBsb2NhbCBtZW1vcnkgKi8KLSAgICBtZW1jcHlfZnJvbWlvKCZsb2NhbC0+c3RhcnR1cF9yZXMsIGxvY2FsLT5zcmFtICsgRUNGX1RPX0hPU1RfQkFTRSxcCi0gICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RhcnR1cF9yZXNfNikpOworCS8qIENvcHkgdGhlIHN0YXJ0dXAgcmVzdWx0cyB0byBsb2NhbCBtZW1vcnkgKi8KKwltZW1jcHlfZnJvbWlvKCZsb2NhbC0+c3RhcnR1cF9yZXMsIGxvY2FsLT5zcmFtICsgRUNGX1RPX0hPU1RfQkFTRSwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBzdGFydHVwX3Jlc182KSk7CiAKLSAgICAvKiBDaGVjayBQb3dlciB1cCB0ZXN0IHN0YXR1cyBhbmQgZ2V0IG1hYyBhZGRyZXNzIGZyb20gY2FyZCAqLwotICAgIGlmIChsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkICE9IDB4ODApIHsKLSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfaW5pdCBFUlJPUiBjYXJkIHN0YXR1cyA9ICUyeFxuIiwKLSAgICAgICAgICAgbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCk7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5JVF9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwkvKiBDaGVjayBQb3dlciB1cCB0ZXN0IHN0YXR1cyBhbmQgZ2V0IG1hYyBhZGRyZXNzIGZyb20gY2FyZCAqLworCWlmIChsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkICE9IDB4ODApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2luaXQgRVJST1IgY2FyZCBzdGF0dXMgPSAlMnhcbiIsCisJCSAgICAgICBsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTklUX0VSUk9SOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgbG9jYWwtPmZ3X3ZlciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzBdOwotICAgIGxvY2FsLT5md19ibGQgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsxXTsKLSAgICBsb2NhbC0+ZndfdmFyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMl07Ci0gICAgREVCVUcoMSwicmF5X2luaXQgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBcbiIsbG9jYWwtPmZ3X3ZlciwgbG9jYWwtPmZ3X2JsZCk7CisJbG9jYWwtPmZ3X3ZlciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzBdOworCWxvY2FsLT5md19ibGQgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsxXTsKKwlsb2NhbC0+ZndfdmFyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMl07CisJREVCVUcoMSwgInJheV9pbml0IGZpcm13YXJlIHZlcnNpb24gJWQuJWQgXG4iLCBsb2NhbC0+ZndfdmVyLAorCSAgICAgIGxvY2FsLT5md19ibGQpOwogCi0gICAgbG9jYWwtPnRpYl9sZW5ndGggPSAweDIwOwotICAgIGlmICgobG9jYWwtPmZ3X3ZlciA9PSA1KSAmJiAobG9jYWwtPmZ3X2JsZCA+PSAzMCkpCi0gICAgICAgIGxvY2FsLT50aWJfbGVuZ3RoID0gbG9jYWwtPnN0YXJ0dXBfcmVzLnRpYl9sZW5ndGg7Ci0gICAgREVCVUcoMiwicmF5X2luaXQgdGliX2xlbmd0aCA9IDB4JTAyeFxuIiwgbG9jYWwtPnRpYl9sZW5ndGgpOwotICAgIC8qIEluaXRpYWxpemUgQ0NTJ3MgdG8gYnVmZmVyIGZyZWUgc3RhdGUgKi8KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpOwotICAgIGZvciAoaT0wOyAgaTxOVU1CRVJfT0ZfQ0NTOyAgaSsrKSB7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQotICAgIGluaXRfc3RhcnR1cF9wYXJhbXMobG9jYWwpOworCWxvY2FsLT50aWJfbGVuZ3RoID0gMHgyMDsKKwlpZiAoKGxvY2FsLT5md192ZXIgPT0gNSkgJiYgKGxvY2FsLT5md19ibGQgPj0gMzApKQorCQlsb2NhbC0+dGliX2xlbmd0aCA9IGxvY2FsLT5zdGFydHVwX3Jlcy50aWJfbGVuZ3RoOworCURFQlVHKDIsICJyYXlfaW5pdCB0aWJfbGVuZ3RoID0gMHglMDJ4XG4iLCBsb2NhbC0+dGliX2xlbmd0aCk7CisJLyogSW5pdGlhbGl6ZSBDQ1MncyB0byBidWZmZXIgZnJlZSBzdGF0ZSAqLworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCk7CisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9DQ1M7IGkrKykgeworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCX0KKwlpbml0X3N0YXJ0dXBfcGFyYW1zKGxvY2FsKTsKIAotICAgIC8qIGNvcHkgbWFjIGFkZHJlc3MgdG8gc3RhcnR1cCBwYXJhbWV0ZXJzICovCi0gICAgaWYgKHBhcnNlX2FkZHIocGh5X2FkZHIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyKSkKLSAgICB7Ci0gICAgICAgIHAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbWVtY3B5KCZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwKLSAgICAgICAgICAgICAgICZsb2NhbC0+c3RhcnR1cF9yZXMuc3RhdGlvbl9hZGRyLCBBRERSTEVOKTsKLSAgICAgICAgcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOwotICAgIH0KKwkvKiBjb3B5IG1hYyBhZGRyZXNzIHRvIHN0YXJ0dXAgcGFyYW1ldGVycyAqLworCWlmIChwYXJzZV9hZGRyKHBoeV9hZGRyLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcikpIHsKKwkJcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOworCX0gZWxzZSB7CisJCW1lbWNweSgmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsCisJCSAgICAgICAmbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXRpb25fYWRkciwgQUREUkxFTik7CisJCXAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKKwl9CiAKLSAgICBjbGVhcl9pbnRlcnJ1cHQobG9jYWwpOyAvKiBDbGVhciBhbnkgaW50ZXJydXB0IGZyb20gdGhlIGNhcmQgKi8KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FXQUlUSU5HX1BBUkFNOwotICAgIERFQlVHKDIsInJheV9pbml0IGVuZGluZ1xuIik7Ci0gICAgcmV0dXJuIDA7CisJY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsJLyogQ2xlYXIgYW55IGludGVycnVwdCBmcm9tIHRoZSBjYXJkICovCisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BV0FJVElOR19QQVJBTTsKKwlERUJVRygyLCAicmF5X2luaXQgZW5kaW5nXG4iKTsKKwlyZXR1cm4gMDsKIH0gLyogcmF5X2luaXQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzIHRvIHRoZSBjYXJkIGFuZCBjb21tYW5kIGl0IHRvIHJlYWQgdGhlbSAgICAgICAqLwogc3RhdGljIGludCBkbF9zdGFydHVwX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIGludCBjY3NpbmRleDsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBjY3NpbmRleDsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgREVCVUcoMSwiZGxfc3RhcnR1cF9wYXJhbXMgZW50ZXJlZFxuIik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIAotICAgIC8qIENvcHkgcGFyYW1ldGVycyB0byBob3N0IHRvIEVDRiBhcmVhICovCi0gICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgCi0gICAgICAgIG1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNCwKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNSwKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKKwlERUJVRygxLCAiZGxfc3RhcnR1cF9wYXJhbXMgZW50ZXJlZFxuIik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIAotICAgIC8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSByZXR1cm4gLTE7Ci0gICAgbG9jYWwtPmRsX3BhcmFtX2NjcyA9IGNjc2luZGV4OwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TLCAmcGNjcy0+Y21kKTsKLSAgICBERUJVRygyLCJkbF9zdGFydHVwX3BhcmFtcyBzdGFydCBjY3NpbmRleCA9ICVkXG4iLCBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInJheSBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCi0gICAgICAgICAgICJFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIC0yOwotICAgIH0KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNOwotICAgIC8qIFN0YXJ0IGtlcm5lbCB0aW1lciB0byB3YWl0IGZvciBkbCBzdGFydHVwIHRvIGNvbXBsZXRlLiAqLwotICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaLzI7Ci0gICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmdmVyaWZ5X2RsX3N0YXJ0dXA7Ci0gICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIERFQlVHKDIsInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyBzdGFydGVkIHRpbWVyIGZvciB2ZXJpZnlfZGxfc3RhcnR1cFxuIik7Ci0gICAgcmV0dXJuIDA7CisJLyogQ29weSBwYXJhbWV0ZXJzIHRvIGhvc3QgdG8gRUNGIGFyZWEgKi8KKwlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQorCQltZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjQsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOworCWVsc2UKKwkJbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI1LAorCQkJICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKKworCS8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQorCQlyZXR1cm4gLTE7CisJbG9jYWwtPmRsX3BhcmFtX2NjcyA9IGNjc2luZGV4OworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TLCAmcGNjcy0+Y21kKTsKKwlERUJVRygyLCAiZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnQgY2NzaW5kZXggPSAlZFxuIiwKKwkgICAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheSBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCisJCSAgICAgICAiRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybiAtMjsKKwl9CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTTsKKwkvKiBTdGFydCBrZXJuZWwgdGltZXIgdG8gd2FpdCBmb3IgZGwgc3RhcnR1cCB0byBjb21wbGV0ZS4gKi8KKwlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAvIDI7CisJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmdmVyaWZ5X2RsX3N0YXJ0dXA7CisJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCURFQlVHKDIsCisJICAgICAgInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyBzdGFydGVkIHRpbWVyIGZvciB2ZXJpZnlfZGxfc3RhcnR1cFxuIik7CisJcmV0dXJuIDA7CiB9IC8qIGRsX3N0YXJ0dXBfcGFyYW1zICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGluaXRfc3RhcnR1cF9wYXJhbXMocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBpbnQgaTsgCisJaW50IGk7CiAKLSAgICBpZiAoY291bnRyeSA+IEpBUEFOX1RFU1QpIGNvdW50cnkgPSBVU0E7Ci0gICAgZWxzZQotICAgICAgICBpZiAoY291bnRyeSA8IFVTQSkgY291bnRyeSA9IFVTQTsKLSAgICAvKiBzdHJ1Y3R1cmUgZm9yIGhvcCB0aW1lIGFuZCBiZWFjb24gcGVyaW9kIGlzIGRlZmluZWQgaGVyZSB1c2luZyAKLSAgICAgKiBOZXcgODAyLjExRDYuMSBmb3JtYXQuICBDYXJkIGZpcm13YXJlIGlzIHN0aWxsIHVzaW5nIG9sZCBmb3JtYXQKLSAgICAgKiB1bnRpbCB2ZXJzaW9uIDYuCi0gICAgICogICAgQmVmb3JlICAgICAgICAgICAgICAgICAgICBBZnRlcgotICAgICAqICAgIGFfaG9wX3RpbWUgbXMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBtcyBieXRlCi0gICAgICogICAgYV9ob3BfdGltZSAycyBieXRlICAgICAgICBhX2hvcF90aW1lIGxzIGJ5dGUKLSAgICAgKiAgICBhX2hvcF90aW1lIGxzIGJ5dGUgICAgICAgIGFfYmVhY29uX3BlcmlvZCBtcyBieXRlCi0gICAgICogICAgYV9iZWFjb25fcGVyaW9kICAgICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbHMgYnl0ZQotICAgICAqCi0gICAgICogICAgYV9ob3BfdGltZSA9IHVTICAgICAgICAgICBhX2hvcF90aW1lID0gS3VTCi0gICAgICogICAgYV9iZWFjb25fcGVyaW9kID0gaG9wcyAgICBhX2JlYWNvbl9wZXJpb2QgPSBLdVMKLSAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY0bXMgPSAwMTAwMDAgKi8KLSAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAgewotICAgICAgICBtZW1jcHkoKFVDSEFSICopJmxvY2FsLT5zcGFybS5iNCwgYjRfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLCAKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKLSAgICAgICAgLyogVHJhbnNsYXRlIHNhbmUga3VzIGlucHV0IHZhbHVlcyB0byBvbGQgYnVpbGQgNC81IGZvcm1hdCAqLwotICAgICAgICAvKiBpID0gaG9wIHRpbWUgaW4gdVMgdHJ1bmNhdGVkIHRvIDMgYnl0ZXMgKi8KLSAgICAgICAgaSA9IChob3BfZHdlbGwgKiAxMDI0KSAmIDB4ZmZmZmZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVswXSA9IChpID4+IDE2KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzFdID0gKGkgPj4gOCkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzBdID0gMDsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFsxXSA9Ci0gICAgICAgICAgICAoKGJlYWNvbl9wZXJpb2QvaG9wX2R3ZWxsKSAtIDEpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfcGF0dGVybl9sZW5ndGggPSAKLSAgICAgICAgICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldIC0gMTsKLSAgICAgICAgaWYgKGJjKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9hY2tfdGltZW91dCA9IDB4NTA7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9zaWZzID0gMHgzZjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsgICAgLyogVmVyc2lvbiA1IHVzZXMgcmVhbCBrdXMgdmFsdWVzICovCi0gICAgICAgIG1lbWNweSgoVUNIQVIgKikmbG9jYWwtPnNwYXJtLmI1LCBiNV9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsIAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOworCWlmIChjb3VudHJ5ID4gSkFQQU5fVEVTVCkKKwkJY291bnRyeSA9IFVTQTsKKwllbHNlIGlmIChjb3VudHJ5IDwgVVNBKQorCQljb3VudHJ5ID0gVVNBOworCS8qIHN0cnVjdHVyZSBmb3IgaG9wIHRpbWUgYW5kIGJlYWNvbiBwZXJpb2QgaXMgZGVmaW5lZCBoZXJlIHVzaW5nCisJICogTmV3IDgwMi4xMUQ2LjEgZm9ybWF0LiAgQ2FyZCBmaXJtd2FyZSBpcyBzdGlsbCB1c2luZyBvbGQgZm9ybWF0CisJICogdW50aWwgdmVyc2lvbiA2LgorCSAqICAgIEJlZm9yZSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIKKwkgKiAgICBhX2hvcF90aW1lIG1zIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbXMgYnl0ZQorCSAqICAgIGFfaG9wX3RpbWUgMnMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBscyBieXRlCisJICogICAgYV9ob3BfdGltZSBscyBieXRlICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbXMgYnl0ZQorCSAqICAgIGFfYmVhY29uX3BlcmlvZCAgICAgICAgICAgYV9iZWFjb25fcGVyaW9kIGxzIGJ5dGUKKwkgKgorCSAqICAgIGFfaG9wX3RpbWUgPSB1UyAgICAgICAgICAgYV9ob3BfdGltZSA9IEt1UworCSAqICAgIGFfYmVhY29uX3BlcmlvZCA9IGhvcHMgICAgYV9iZWFjb25fcGVyaW9kID0gS3VTCisJICovLyogNjRtcyA9IDAxMDAwMCAqLworCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpIHsKKwkJbWVtY3B5KChVQ0hBUiAqKSAmbG9jYWwtPnNwYXJtLmI0LCBiNF9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7CisJCS8qIFRyYW5zbGF0ZSBzYW5lIGt1cyBpbnB1dCB2YWx1ZXMgdG8gb2xkIGJ1aWxkIDQvNSBmb3JtYXQgKi8KKwkJLyogaSA9IGhvcCB0aW1lIGluIHVTIHRydW5jYXRlZCB0byAzIGJ5dGVzICovCisJCWkgPSAoaG9wX2R3ZWxsICogMTAyNCkgJiAweGZmZmZmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMF0gPSAoaSA+PiAxNikgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVsxXSA9IChpID4+IDgpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFswXSA9IDA7CisJCWxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMV0gPQorCQkgICAgKChiZWFjb25fcGVyaW9kIC8gaG9wX2R3ZWxsKSAtIDEpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OworCQlsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfcGF0dGVybl9sZW5ndGggPQorCQkgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV0gLSAxOworCQlpZiAoYmMpIHsKKwkJCWxvY2FsLT5zcGFybS5iNC5hX2Fja190aW1lb3V0ID0gMHg1MDsKKwkJCWxvY2FsLT5zcGFybS5iNC5hX3NpZnMgPSAweDNmOworCQl9CisJfSBlbHNlIHsgLyogVmVyc2lvbiA1IHVzZXMgcmVhbCBrdXMgdmFsdWVzICovCisJCW1lbWNweSgoVUNIQVIgKikgJmxvY2FsLT5zcGFybS5iNSwgYjVfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOwogCi0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzBdID0gKGhvcF9kd2VsbCA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzFdID0gaG9wX2R3ZWxsICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFswXSA9IChiZWFjb25fcGVyaW9kID4+IDgpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFsxXSA9IGJlYWNvbl9wZXJpb2QgJiAweGZmOwotICAgICAgICBpZiAocHNtKQotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfcG93ZXJfbWd0X3N0YXRlID0gMTsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfcGF0dGVybl9sZW5ndGggPSAKLSAgICAgICAgICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOwotICAgIH0KLSAgICAKLSAgICBsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPSBuZXRfdHlwZSAmIDB4MDE7Ci0gICAgbG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cyA9IFRZUEVfU1RBOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVswXSA9IChob3BfZHdlbGwgPj4gOCkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVsxXSA9IGhvcF9kd2VsbCAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMF0gPQorCQkgICAgKGJlYWNvbl9wZXJpb2QgPj4gOCkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzFdID0gYmVhY29uX3BlcmlvZCAmIDB4ZmY7CisJCWlmIChwc20pCisJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wb3dlcl9tZ3Rfc3RhdGUgPSAxOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7CisJCWxvY2FsLT5zcGFybS5iNS5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9CisJCSAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsKKwl9CiAKLSAgICBpZiAoZXNzaWQgIT0gTlVMTCkKLSAgICAgICAgc3RybmNweShsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCwgZXNzaWQsIEVTU0lEX1NJWkUpOwotfSAvKiBpbml0X3N0YXJ0dXBfcGFyYW1zICovIAorCWxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9IG5ldF90eXBlICYgMHgwMTsKKwlsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzID0gVFlQRV9TVEE7CisKKwlpZiAoZXNzaWQgIT0gTlVMTCkKKwkJc3RybmNweShsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCwgZXNzaWQsIEVTU0lEX1NJWkUpOworfSAvKiBpbml0X3N0YXJ0dXBfcGFyYW1zICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHZlcmlmeV9kbF9zdGFydHVwKHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBsb2NhbC0+ZGxfcGFyYW1fY2NzOwotICAgIFVDSEFSIHN0YXR1czsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBsb2NhbC0+ZGxfcGFyYW1fY2NzOworCVVDSEFSIHN0YXR1czsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyB2ZXJpZnlfZGxfc3RhcnR1cCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIHZlcmlmeV9kbF9zdGFydHVwIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KICNpZmRlZiBQQ01DSUFfREVCVUcKLSAgICBpZiAocGNfZGVidWcgPiAyKSB7Ci0gICAgaW50IGk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInZlcmlmeV9kbF9zdGFydHVwIHBhcmFtZXRlcnMgc2VudCB2aWEgY2NzICVkOlxuIiwKLSAgICAgICAgICAgbG9jYWwtPmRsX3BhcmFtX2Njcyk7Ci0gICAgICAgIGZvciAoaT0wOyBpPHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpOyBpKyspIHsKLSAgICAgICAgICAgIHByaW50aygiICUyeCIsICh1bnNpZ25lZCBpbnQpIHJlYWRiKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSArIGkpKTsKLSAgICAgICAgfQotICAgIHByaW50aygiXG4iKTsKLSAgICB9CisJaWYgKHBjX2RlYnVnID4gMikgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJ2ZXJpZnlfZGxfc3RhcnR1cCBwYXJhbWV0ZXJzIHNlbnQgdmlhIGNjcyAlZDpcbiIsCisJCSAgICAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpOyBpKyspIHsKKwkJCXByaW50aygiICUyeCIsCisJCQkgICAgICAgKHVuc2lnbmVkIGludClyZWFkYihsb2NhbC0+c3JhbSArCisJCQkJCQkgICBIT1NUX1RPX0VDRl9CQVNFICsgaSkpOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CiAjZW5kaWYKIAotICAgIHN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzIT0gQ0NTX0JVRkZFUl9GUkVFKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiRG93bmxvYWQgc3RhcnR1cCBwYXJhbXMgZmFpbGVkLiAgU3RhdHVzID0gJWRcbiIsCi0gICAgICAgICAgIHN0YXR1cyk7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykKLSAgICAgICAgc3RhcnRfbmV0KCh1X2xvbmcpbG9jYWwpOwotICAgIGVsc2UKLSAgICAgICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7CisJc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCWlmIChzdGF0dXMgIT0gQ0NTX0JVRkZFUl9GUkVFKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJEb3dubG9hZCBzdGFydHVwIHBhcmFtcyBmYWlsZWQuICBTdGF0dXMgPSAlZFxuIiwKKwkJICAgICAgIHN0YXR1cyk7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7CisJCXJldHVybjsKKwl9CisJaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykKKwkJc3RhcnRfbmV0KCh1X2xvbmcpIGxvY2FsKTsKKwllbHNlCisJCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKIAotICAgIHJldHVybjsKKwlyZXR1cm47CiB9IC8qIGVuZCB2ZXJpZnlfZGxfc3RhcnR1cCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb21tYW5kIGNhcmQgdG8gc3RhcnQgYSBuZXR3b3JrICovCiBzdGF0aWMgdm9pZCBzdGFydF9uZXQodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIHN0YXJ0X25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHJldHVybjsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19TVEFSVF9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXkgc3RhcnQgbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKLSAgICByZXR1cm47CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGNjc2luZGV4OworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3Mgc3RhcnRfbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKKwkJcmV0dXJuOworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX1NUQVJUX05FVFdPUkssICZwY2NzLT5jbWQpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsudXBkYXRlX3BhcmFtKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsICJyYXkgc3RhcnQgbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKKwlyZXR1cm47CiB9IC8qIGVuZCBzdGFydF9uZXQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29tbWFuZCBjYXJkIHRvIGpvaW4gYSBuZXR3b3JrICovCiBzdGF0aWMgdm9pZCBqb2luX25ldCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKIAotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGpvaW5fbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgcmV0dXJuOwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX0pPSU5fTkVUV09SSywgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5IGpvaW4gbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKLSAgICByZXR1cm47CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBjY3NpbmRleDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3Mgam9pbl9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQorCS8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQorCQlyZXR1cm47CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfSk9JTl9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsudXBkYXRlX3BhcmFtKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsubmV0X2luaXRpYXRlZCk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLCAicmF5IGpvaW4gbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKKwlyZXR1cm47CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIEFmdGVyIGEgY2FyZCBpcyByZW1vdmVkLCByYXlfcmVsZWFzZSgpIHdpbGwgdW5yZWdpc3RlciB0aGUgbmV0CiAgICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCkBAIC03ODQsMjUgKzgxNiwyNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcmF5X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7IAotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGludCBpOwotICAgIAotICAgIERFQlVHKDEsICJyYXlfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CiAKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJREVCVUcoMSwgInJheV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlvdW5tYXAobG9jYWwtPnNyYW0pOwotICAgIGlvdW5tYXAobG9jYWwtPnJtZW0pOwotICAgIGlvdW5tYXAobG9jYWwtPmFtZW0pOwotICAgIC8qIERvIGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLSAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5hbWVtX2hhbmRsZSk7Ci0gICAgaWYgKCBpICE9IDAgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5hbWVtKSByZXQgPSAleFxuIixpKTsKLSAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5ybWVtX2hhbmRsZSk7Ci0gICAgaWYgKCBpICE9IDAgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5ybWVtKSByZXQgPSAleFxuIixpKTsKLSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwogCi0gICAgREVCVUcoMiwicmF5X3JlbGVhc2UgZW5kaW5nXG4iKTsKKwlpb3VubWFwKGxvY2FsLT5zcmFtKTsKKwlpb3VubWFwKGxvY2FsLT5ybWVtKTsKKwlpb3VubWFwKGxvY2FsLT5hbWVtKTsKKwkvKiBEbyBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCisJaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+YW1lbV9oYW5kbGUpOworCWlmIChpICE9IDApCisJCURFQlVHKDAsICJSZWxlYXNlV2luZG93KGxvY2FsLT5hbWVtKSByZXQgPSAleFxuIiwgaSk7CisJaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+cm1lbV9oYW5kbGUpOworCWlmIChpICE9IDApCisJCURFQlVHKDAsICJSZWxlYXNlV2luZG93KGxvY2FsLT5ybWVtKSByZXQgPSAleFxuIiwgaSk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCisJREVCVUcoMiwgInJheV9yZWxlYXNlIGVuZGluZ1xuIik7CiB9CiAKIHN0YXRpYyBpbnQgcmF5X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC04MzEsMjM2ICs4NjUsMjQyIEBACiBzdGF0aWMgaW50IHJheV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogI2lmZGVmIFJBWV9JTU1FRElBVEVfSU5JVAotICAgIGludCBpOwotI2VuZGlmCS8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaTsKKyNlbmRpZiAvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBERUJVRygxLCJyYXlfZGV2X2luaXQoZGV2PSVwKVxuIixkZXYpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2Rldl9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwlERUJVRygxLCAicmF5X2Rldl9pbml0KGRldj0lcClcbiIsIGRldik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2Rldl9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KICNpZmRlZiBSQVlfSU1NRURJQVRFX0lOSVQKLSAgICAvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoIChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKLSAgICAgICAgICAgInJldHVybnMgMHgleFxuIixpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSNlbHNlCS8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLwotICAgIC8qIFBvc3Rwb25lIHRoZSBjYXJkIGluaXQgc28gdGhhdCB3ZSBjYW4gc3RpbGwgY29uZmlndXJlIHRoZSBjYXJkLAotICAgICAqIGZvciBleGFtcGxlIHVzaW5nIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zLiBUaGUgaW5pdCB3aWxsIGhhcHBlbgotICAgICAqIGluIHJheV9vcGVuKCkgLSBKZWFuIElJICovCi0gICAgREVCVUcoMSwicmF5X2Rldl9pbml0OiBwb3N0cG9uaW5nIGNhcmQgaW5pdCB0byByYXlfb3BlbigpIDsgU3RhdHVzID0gJWRcbiIsCi0JICBsb2NhbC0+Y2FyZF9zdGF0dXMpOwotI2VuZGlmCS8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLworCS8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLworCWlmICgoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgorCQkgICAgICAgInJldHVybnMgMHgleFxuIiwgaSk7CisJCXJldHVybiAtMTsKKwl9CisjZWxzZSAvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KKwkvKiBQb3N0cG9uZSB0aGUgY2FyZCBpbml0IHNvIHRoYXQgd2UgY2FuIHN0aWxsIGNvbmZpZ3VyZSB0aGUgY2FyZCwKKwkgKiBmb3IgZXhhbXBsZSB1c2luZyB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucy4gVGhlIGluaXQgd2lsbCBoYXBwZW4KKwkgKiBpbiByYXlfb3BlbigpIC0gSmVhbiBJSSAqLworCURFQlVHKDEsCisJICAgICAgInJheV9kZXZfaW5pdDogcG9zdHBvbmluZyBjYXJkIGluaXQgdG8gcmF5X29wZW4oKSA7IFN0YXR1cyA9ICVkXG4iLAorCSAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyk7CisjZW5kaWYgLyogUkFZX0lNTUVESUFURV9JTklUICovCiAKLSAgICAvKiBjb3B5IG1hYyBhbmQgYnJvYWRjYXN0IGFkZHJlc3NlcyB0byBsaW51eCBkZXZpY2UgKi8KLSAgICBtZW1jcHkoJmRldi0+ZGV2X2FkZHIsICZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7Ci0gICAgbWVtc2V0KGRldi0+YnJvYWRjYXN0LCAweGZmLCBFVEhfQUxFTik7CisJLyogY29weSBtYWMgYW5kIGJyb2FkY2FzdCBhZGRyZXNzZXMgdG8gbGludXggZGV2aWNlICovCisJbWVtY3B5KCZkZXYtPmRldl9hZGRyLCAmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOworCW1lbXNldChkZXYtPmJyb2FkY2FzdCwgMHhmZiwgRVRIX0FMRU4pOwogCi0gICAgREVCVUcoMiwicmF5X2Rldl9pbml0IGVuZGluZ1xuIik7Ci0gICAgcmV0dXJuIDA7CisJREVCVUcoMiwgInJheV9kZXZfaW5pdCBlbmRpbmdcbiIpOworCXJldHVybiAwOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9kZXZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICAvKiBEdW1teSByb3V0aW5lIHRvIHNhdGlzZnkgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIERFQlVHKDEsInJheV9kZXZfY29uZmlnKGRldj0lcCxpZm1hcD0lcClcbiIsZGV2LG1hcCk7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfZGV2X2NvbmZpZyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCS8qIER1bW15IHJvdXRpbmUgdG8gc2F0aXNmeSBkZXZpY2Ugc3RydWN0dXJlICovCisJREVCVUcoMSwgInJheV9kZXZfY29uZmlnKGRldj0lcCxpZm1hcD0lcClcbiIsIGRldiwgbWFwKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfZGV2X2NvbmZpZyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXNob3J0IGxlbmd0aCA9IHNrYi0+bGVuOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfZGV2X3N0YXJ0X3htaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIERFQlVHKDMsInJheV9kZXZfc3RhcnRfeG1pdChza2I9JXAsIGRldj0lcClcbiIsc2tiLGRldik7Ci0gICAgaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBORUVEX1RPX0FVVEgpIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiIpOwotICAgICAgICBpZiAoIWJ1aWxkX2F1dGhfZnJhbWUgKGxvY2FsLCBsb2NhbC0+YXV0aF9pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7Ci0gICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBVVRIRU5USUNBVEVEOwotICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlERUJVRygzLCAicmF5X2Rldl9zdGFydF94bWl0KHNrYj0lcCwgZGV2PSVwKVxuIiwgc2tiLCBkZXYpOworCWlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gTkVFRF9UT19BVVRIKSB7CisJCURFQlVHKDAsICJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuIik7CisJCWlmICghYnVpbGRfYXV0aF9mcmFtZShsb2NhbCwgbG9jYWwtPmF1dGhfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgeworCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVVUSEVOVElDQVRFRDsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCXJldHVybiAxOworCQl9CisJfQogCi0gICAgaWYgKGxlbmd0aCA8IEVUSF9aTEVOKQotICAgIHsKLSAgICAJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLSAgICAJCXJldHVybiAwOwotICAgIAlsZW5ndGggPSBFVEhfWkxFTjsKLSAgICB9Ci0gICAgc3dpdGNoIChyYXlfaHdfeG1pdCggc2tiLT5kYXRhLCBsZW5ndGgsIGRldiwgREFUQV9UWVBFKSkgewotICAgICAgICBjYXNlIFhNSVRfTk9fQ0NTOgotICAgICAgICBjYXNlIFhNSVRfTkVFRF9BVVRIOgotCSAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgY2FzZSBYTUlUX05PX0lOVFI6Ci0gICAgICAgIGNhc2UgWE1JVF9NU0dfQkFEOgotICAgICAgICBjYXNlIFhNSVRfT0s6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLSAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKKwkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJCXJldHVybiAwOworCQlsZW5ndGggPSBFVEhfWkxFTjsKKwl9CisJc3dpdGNoIChyYXlfaHdfeG1pdChza2ItPmRhdGEsIGxlbmd0aCwgZGV2LCBEQVRBX1RZUEUpKSB7CisJY2FzZSBYTUlUX05PX0NDUzoKKwljYXNlIFhNSVRfTkVFRF9BVVRIOgorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiAxOworCWNhc2UgWE1JVF9OT19JTlRSOgorCWNhc2UgWE1JVF9NU0dfQkFEOgorCWNhc2UgWE1JVF9PSzoKKwlkZWZhdWx0OgorCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7CiB9IC8qIHJheV9kZXZfc3RhcnRfeG1pdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIqIGRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIAotICAgICAgICAgICAgICAgIFVDSEFSIG1zZ190eXBlKQorc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgVUNIQVIgbXNnX3R5cGUpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBjY3NpbmRleDsKLSAgICBpbnQgb2Zmc2V0OwotICAgIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OyAvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIFBDIHNwYWNlICovCi0gICAgc2hvcnQgaW50IGFkZHI7ICAgICAvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIGNhcmQgc3BhY2UgKi8KLSAgICAKLSAgICBERUJVRygzLCJyYXlfaHdfeG1pdChkYXRhPSVwLCBsZW49JWQsIGRldj0lcClcbiIsZGF0YSxsZW4sZGV2KTsKLSAgICBpZiAobGVuICsgVFhfSEVBREVSX0xFTkdUSCA+IFRYX0JVRl9TSVpFKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2h3X3htaXQgcGFja2V0IHRvbyBsYXJnZTogJWQgYnl0ZXNcbiIsbGVuKTsKLSAgICAgICAgcmV0dXJuIFhNSVRfTVNHX0JBRDsKLSAgICB9CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBjY3NpbmRleDsKKwlpbnQgb2Zmc2V0OworCXN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OwkvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIFBDIHNwYWNlICovCisJc2hvcnQgaW50IGFkZHI7CQkvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIGNhcmQgc3BhY2UgKi8KKworCURFQlVHKDMsICJyYXlfaHdfeG1pdChkYXRhPSVwLCBsZW49JWQsIGRldj0lcClcbiIsIGRhdGEsIGxlbiwgZGV2KTsKKwlpZiAobGVuICsgVFhfSEVBREVSX0xFTkdUSCA+IFRYX0JVRl9TSVpFKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheV9od194bWl0IHBhY2tldCB0b28gbGFyZ2U6ICVkIGJ5dGVzXG4iLAorCQkgICAgICAgbGVuKTsKKwkJcmV0dXJuIFhNSVRfTVNHX0JBRDsKKwl9CiAJc3dpdGNoIChjY3NpbmRleCA9IGdldF9mcmVlX3R4X2Njcyhsb2NhbCkpIHsKIAljYXNlIEVDQ1NCVVNZOgotCQlERUJVRygyLCJyYXlfaHdfeG1pdCB0eF9jY3MgdGFibGUgYnVzeVxuIik7CisJCURFQlVHKDIsICJyYXlfaHdfeG1pdCB0eF9jY3MgdGFibGUgYnVzeVxuIik7CiAJY2FzZSBFQ0NTRlVMTDoKLSAgICAgICAgREVCVUcoMiwicmF5X2h3X3htaXQgTm8gZnJlZSB0eCBjY3NcbiIpOworCQlERUJVRygyLCAicmF5X2h3X3htaXQgTm8gZnJlZSB0eCBjY3NcbiIpOwogCWNhc2UgRUNBUkRHT05FOgotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgcmV0dXJuIFhNSVRfTk9fQ0NTOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiBYTUlUX05PX0NDUzsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0gICAgYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKKwlhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOwogCi0gICAgaWYgKG1zZ190eXBlID09IERBVEFfVFlQRSkgewotICAgICAgICBsb2NhbC0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwotICAgICAgICBsb2NhbC0+c3RhdHMudHhfcGFja2V0cysrOwotICAgIH0KKwlpZiAobXNnX3R5cGUgPT0gREFUQV9UWVBFKSB7CisJCWxvY2FsLT5zdGF0cy50eF9ieXRlcyArPSBsZW47CisJCWxvY2FsLT5zdGF0cy50eF9wYWNrZXRzKys7CisJfQogCi0gICAgcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOworCXB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKIAotICAgIHJheV9idWlsZF9oZWFkZXIobG9jYWwsIHB0eCwgbXNnX3R5cGUsIGRhdGEpOwotICAgIGlmICh0cmFuc2xhdGUpIHsKLSAgICAgICAgb2Zmc2V0ID0gdHJhbnNsYXRlX2ZyYW1lKGxvY2FsLCBwdHgsIGRhdGEsIGxlbik7Ci0gICAgfQotICAgIGVsc2UgeyAvKiBFbmNhcHN1bGF0ZSBmcmFtZSAqLwotICAgICAgICAvKiBUQkQgVElCIGxlbmd0aCB3aWxsIG1vdmUgYWRkcmVzcyBvZiBwdHgtPnZhciAqLwotICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEsIGxlbik7Ci0gICAgICAgIG9mZnNldCA9IDA7Ci0gICAgfQorCXJheV9idWlsZF9oZWFkZXIobG9jYWwsIHB0eCwgbXNnX3R5cGUsIGRhdGEpOworCWlmICh0cmFuc2xhdGUpIHsKKwkJb2Zmc2V0ID0gdHJhbnNsYXRlX2ZyYW1lKGxvY2FsLCBwdHgsIGRhdGEsIGxlbik7CisJfSBlbHNlIHsgLyogRW5jYXBzdWxhdGUgZnJhbWUgKi8KKwkJLyogVEJEIFRJQiBsZW5ndGggd2lsbCBtb3ZlIGFkZHJlc3Mgb2YgcHR4LT52YXIgKi8KKwkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhLCBsZW4pOworCQlvZmZzZXQgPSAwOworCX0KIAotICAgIC8qIGZpbGwgaW4gdGhlIENDUyAqLwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICBsZW4gKz0gVFhfSEVBREVSX0xFTkdUSCArIG9mZnNldDsKLSAgICB3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYihhZGRyID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clswXSk7Ci0gICAgd3JpdGViKGxvY2FsLT50aWJfbGVuZ3RoLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMV0pOwotICAgIHdyaXRlYihsZW4gPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzBdKTsKLSAgICB3cml0ZWIobGVuICYgMHhmZiwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzFdKTsKKwkvKiBmaWxsIGluIHRoZSBDQ1MgKi8KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJbGVuICs9IFRYX0hFQURFUl9MRU5HVEggKyBvZmZzZXQ7CisJd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoYWRkciA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMF0pOworCXdyaXRlYihsb2NhbC0+dGliX2xlbmd0aCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzFdKTsKKwl3cml0ZWIobGVuID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFswXSk7CisJd3JpdGViKGxlbiAmIDB4ZmYsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFsxXSk7CiAvKiBUQkQgc3RpbGwgbmVlZCBwc21fY2FtPyAqLwotICAgIHdyaXRlYihQU01fQ0FNLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKLSAgICB3cml0ZWIobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9yYXRlKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LmFudGVubmEpOwotICAgIERFQlVHKDMsInJheV9od194bWl0IGRlZmF1bHRfdHhfcmF0ZSA9IDB4JXhcbiIsXAotICAgICAgICAgIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlKTsKKwl3cml0ZWIoUFNNX0NBTSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7CisJd3JpdGViKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfcmF0ZSk7CisJd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5hbnRlbm5hKTsKKwlERUJVRygzLCAicmF5X2h3X3htaXQgZGVmYXVsdF90eF9yYXRlID0gMHgleFxuIiwKKwkgICAgICBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSk7CiAKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9od194bWl0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMiwgInJheV9od194bWl0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwogLyogVEJEIHZlcnkgaW5lZmZpY2llbnQgdG8gY29weSBwYWNrZXQgdG8gYnVmZmVyLCBhbmQgdGhlbiBub3QKICAgIHNlbmQgaXQsIGJ1dCB0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcXVldWUgdGhlIG1lc3NhZ2VzIGFuZCB0aGF0CiAgICB3b24ndCBiZSBkb25lIGZvciBhIHdoaWxlLiAgTWF5YmUgc2V0IHRidXN5IHVudGlsIGEgQ0NTIGlzIGZyZWU/CiAqLwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybiBYTUlUX05PX0lOVFI7Ci0gICAgfQotICAgIHJldHVybiBYTUlUX09LOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybiBYTUlUX05PX0lOVFI7CisJfQorCXJldHVybiBYTUlUX09LOwogfSAvKiBlbmQgcmF5X2h3X3htaXQgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgdHJhbnNsYXRlX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LCB1bnNpZ25lZCBjaGFyICpkYXRhLAotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKQotewotICAgIF9fYmUxNiBwcm90byA9ICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3Byb3RvOwotICAgIGlmIChudG9ocyhwcm90bykgPj0gMTUzNikgeyAvKiBESVggSUkgZXRoZXJuZXQgZnJhbWUgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBESVggSUlcbiIpOwotICAgICAgICAvKiBDb3B5IExMQyBoZWFkZXIgdG8gY2FyZCBidWZmZXIgKi8KLSAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBldGgyX2xsYywgc2l6ZW9mKGV0aDJfbGxjKSk7Ci0gICAgICAgIG1lbWNweV90b2lvKCAoKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhcikgKyBzaXplb2YoZXRoMl9sbGMpLCAoVUNIQVIgKikmcHJvdG8sIDIpOwotICAgICAgICBpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfQUFSUCkgfHwgcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBYKSkgewotICAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgc2VsZWN0aXZlIHRyYW5zbGF0aW9uIHRhYmxlLCBvbmx5IDIgZW50cmllcyAqLwotICAgICAgICAgICAgd3JpdGViKDB4ZjgsICYoKHN0cnVjdCBzbmFwaGRyX3QgX19pb21lbSAqKXB0eC0+dmFyKS0+b3JnWzNdKTsKLSAgICAgICAgfQotICAgICAgICAvKiBDb3B5IGJvZHkgb2YgZXRoZXJuZXQgcGFja2V0IHdpdGhvdXQgZXRoZXJuZXQgaGVhZGVyICovCi0gICAgICAgIG1lbWNweV90b2lvKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIgKyBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCksIFwKLSAgICAgICAgICAgICAgICAgICAgZGF0YSArIEVUSF9ITEVOLCAgbGVuIC0gRVRIX0hMRU4pOwotICAgICAgICByZXR1cm4gKGludCkgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47Ci0gICAgfQotICAgIGVsc2UgeyAvKiBhbHJlYWR5ICA4MDIgdHlwZSwgYW5kIHByb3RvIGlzIGxlbmd0aCAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIDgwMlxuIik7Ci0gICAgICAgIGlmIChwcm90byA9PSBodG9ucygweGZmZmYpKSB7IC8qIGV2aWwgbmV0d2FyZSBJUFggODAyLjMgd2l0aG91dCBMTEMgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBldmlsIElQWFxuIik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgIGxlbiAtIEVUSF9ITEVOKTsKLSAgICAgICAgICAgIHJldHVybiAwIC0gRVRIX0hMRU47Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sICBsZW4gLSBFVEhfSExFTik7Ci0gICAgICAgIHJldHVybiAwIC0gRVRIX0hMRU47Ci0gICAgfQotICAgIC8qIFRCRCBkbyBvdGhlciBmcmFtZSB0eXBlcyAqLwotfSAvKiBlbmQgdHJhbnNsYXRlX2ZyYW1lICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LCBVQ0hBUiBtc2dfdHlwZSwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhKQotewotICAgIHdyaXRlYihQUk9UT0NPTF9WRVIgfCBtc2dfdHlwZSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKLS8qKiogSUVFRSA4MDIuMTEgQWRkcmVzcyBmaWVsZCBhc3NpZ25tZW50cyAqKioqKioqKioqKioqCi0gICAgICAgICAgICAgICAgVE9EUyBGUk9NRFMgICBhZGRyXzEgICAgIGFkZHJfMiAgICAgICAgICBhZGRyXzMgICBhZGRyXzQKLUFkaG9jICAgICAgICAgICAwICAgIDAgICAgICAgIGRlc3QgICAgICAgc3JjICh0ZXJtaW5hbCkgIEJTU0lEICAgIE4vQQotQVAgdG8gVGVybWluYWwgIDAgICAgMSAgICAgICAgZGVzdCAgICAgICBBUChCU1NJRCkgICAgICAgc291cmNlICAgTi9BCi1UZXJtaW5hbCB0byBBUCAgMSAgICAwICAgICAgICBBUChCU1NJRCkgIHNyYyAodGVybWluYWwpICBkZXN0ICAgICBOL0EKLUFQIHRvIEFQICAgICAgICAxICAgIDEgICAgICAgIGRlc3QgQVAgICAgc3JjIEFQICAgICAgICAgIGRlc3QgICAgIHNvdXJjZSAgICAgIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICBpZiAobG9jYWwtPm5ldF90eXBlID09IEFESE9DKSB7ICAgCi0gICAgICAgIHdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwotICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIDIgKiBBRERSTEVOKTsKLSAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKLSAgICB9Ci0gICAgZWxzZSAvKiBpbmZyYXN0cnVjdHVyZSAqLwotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlYihGQzJfRlJPTV9EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5ic3NfaWQsIDYpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLyogVGVybWluYWwgKi8KLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGViKEZDMl9UT19EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOwotICAgICAgICB9Ci0gICAgfQotfSAvKiBlbmQgZW5jYXBzdWxhdGVfZnJhbWUgKi8KIAorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIGludCB0cmFuc2xhdGVfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCisJCQkgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCV9fYmUxNiBwcm90byA9ICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3Byb3RvOworCWlmIChudG9ocyhwcm90bykgPj0gMTUzNikgeyAvKiBESVggSUkgZXRoZXJuZXQgZnJhbWUgKi8KKwkJREVCVUcoMywgInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgRElYIElJXG4iKTsKKwkJLyogQ29weSBMTEMgaGVhZGVyIHRvIGNhcmQgYnVmZmVyICovCisJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZXRoMl9sbGMsIHNpemVvZihldGgyX2xsYykpOworCQltZW1jcHlfdG9pbygoKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhcikgKyBzaXplb2YoZXRoMl9sbGMpLAorCQkJICAgIChVQ0hBUiAqKSAmcHJvdG8sIDIpOworCQlpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfQUFSUCkgfHwgcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBYKSkgeworCQkJLyogVGhpcyBpcyB0aGUgc2VsZWN0aXZlIHRyYW5zbGF0aW9uIHRhYmxlLCBvbmx5IDIgZW50cmllcyAqLworCQkJd3JpdGViKDB4ZjgsCisJCQkgICAgICAgJigoc3RydWN0IHNuYXBoZHJfdCBfX2lvbWVtICopcHR4LT52YXIpLT5vcmdbM10pOworCQl9CisJCS8qIENvcHkgYm9keSBvZiBldGhlcm5ldCBwYWNrZXQgd2l0aG91dCBldGhlcm5ldCBoZWFkZXIgKi8KKwkJbWVtY3B5X3RvaW8oKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhciArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpLCBkYXRhICsgRVRIX0hMRU4sCisJCQkgICAgbGVuIC0gRVRIX0hMRU4pOworCQlyZXR1cm4gKGludClzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKKwl9IGVsc2UgeyAvKiBhbHJlYWR5ICA4MDIgdHlwZSwgYW5kIHByb3RvIGlzIGxlbmd0aCAqLworCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSA4MDJcbiIpOworCQlpZiAocHJvdG8gPT0gaHRvbnMoMHhmZmZmKSkgeyAvKiBldmlsIG5ldHdhcmUgSVBYIDgwMi4zIHdpdGhvdXQgTExDICovCisJCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBldmlsIElQWFxuIik7CisJCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgbGVuIC0gRVRIX0hMRU4pOworCQkJcmV0dXJuIDAgLSBFVEhfSExFTjsKKwkJfQorCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgbGVuIC0gRVRIX0hMRU4pOworCQlyZXR1cm4gMCAtIEVUSF9ITEVOOworCX0KKwkvKiBUQkQgZG8gb3RoZXIgZnJhbWUgdHlwZXMgKi8KK30gLyogZW5kIHRyYW5zbGF0ZV9mcmFtZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAorCQkJICAgICBVQ0hBUiBtc2dfdHlwZSwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwl3cml0ZWIoUFJPVE9DT0xfVkVSIHwgbXNnX3R5cGUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7CisvKioqIElFRUUgODAyLjExIEFkZHJlc3MgZmllbGQgYXNzaWdubWVudHMgKioqKioqKioqKioqKgorCQlUT0RTCUZST01EUwlhZGRyXzEJCWFkZHJfMgkJYWRkcl8zCWFkZHJfNAorQWRob2MJCTAJMAlkZXN0CQlzcmMgKHRlcm1pbmFsKQlCU1NJRAlOL0EKK0FQIHRvIFRlcm1pbmFsCTAJMQlkZXN0CQlBUChCU1NJRCkJc291cmNlCU4vQQorVGVybWluYWwgdG8gQVAJMQkwCUFQKEJTU0lEKQlzcmMgKHRlcm1pbmFsKQlkZXN0CU4vQQorQVAgdG8gQVAJMQkxCWRlc3QgQVAJCXNyYyBBUAkJZGVzdAlzb3VyY2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKGxvY2FsLT5uZXRfdHlwZSA9PSBBREhPQykgeworCQl3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LAorCQkJICAgIDIgKiBBRERSTEVOKTsKKwkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKKwl9IGVsc2UgeyAvKiBpbmZyYXN0cnVjdHVyZSAqLworCisJCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKSB7CisJCQl3cml0ZWIoRkMyX0ZST01fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+YnNzX2lkLCA2KTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKKwkJfSBlbHNlIHsgLyogVGVybWluYWwgKi8KKworCQkJd3JpdGViKEZDMl9UT19EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOworCQl9CisJfQorfSAvKiBlbmQgZW5jYXBzdWxhdGVfZnJhbWUgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0xMDcxLDcgKzExMTEsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAorCS5nZXRfZHJ2aW5mbyA9IG5ldGRldl9nZXRfZHJ2aW5mbywKIH07CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMTA4MSw5ICsxMTIxLDcgQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgcHJvdG9jb2wgbmFtZQogICovCiBzdGF0aWMgaW50IHJheV9nZXRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCWNoYXIgKmN3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmN3cnEsIGNoYXIgKmV4dHJhKQogewogCXN0cmNweShjd3JxLCAiSUVFRSA4MDIuMTEtRkgiKTsKIAlyZXR1cm4gMDsKQEAgLTEwOTUsMTQgKzExMzMsMTMgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KQEAgLTExMTMsMTUgKzExNTAsMTQgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0gCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IGZyZXF1ZW5jeQogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19mcmVxICpmd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTExMzYsMjIgKzExNzIsMjEgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCisJCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBDaGVjayBpZiB3ZSBhc2tlZCBmb3IgYGFueScgKi8KLQlpZihkd3JxLT5mbGFncyA9PSAwKSB7CisJaWYgKGR3cnEtPmZsYWdzID09IDApIHsKIAkJLyogQ29yZXkgOiBjYW4geW91IGRvIHRoYXQgPyAqLwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfSBlbHNlIHsKIAkJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHN0cmluZyAqLwotCQlpZihkd3JxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkgeworCQlpZiAoZHdycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpIHsKIAkJCXJldHVybiAtRTJCSUc7CiAJCX0KIApAQCAtMTE2MCw3ICsxMTk1LDcgQEAKIAkJbWVtY3B5KGxvY2FsLT5zcGFybS5iNS5hX2N1cnJlbnRfZXNzX2lkLCBleHRyYSwgZHdycS0+bGVuZ3RoKTsKIAl9CiAKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXJldHVybiAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTE2OSw4ICsxMjA0LDcgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCisJCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTE3OSw3ICsxMjEzLDcgQEAKIAogCS8qIFB1c2ggaXQgb3V0ICEgKi8KIAlkd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpOwotCWR3cnEtPmZsYWdzID0gMTsgLyogYWN0aXZlICovCisJZHdycS0+ZmxhZ3MgPSAxOwkvKiBhY3RpdmUgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMTE4OSw5ICsxMjIzLDggQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgQVAgYWRkcmVzcwogICovCiBzdGF0aWMgaW50IHJheV9nZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IHNvY2thZGRyICphd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICAgc3RydWN0IHNvY2thZGRyICphd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTIwNywyNSArMTI0MCwyNCBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBDaGVjayBpZiByYXRlIGlzIGluIHJhbmdlICovCi0JaWYoKHZ3cnEtPnZhbHVlICE9IDEwMDAwMDApICYmICh2d3JxLT52YWx1ZSAhPSAyMDAwMDAwKSkKKwlpZiAoKHZ3cnEtPnZhbHVlICE9IDEwMDAwMDApICYmICh2d3JxLT52YWx1ZSAhPSAyMDAwMDAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBIYWNrIGZvciAxLjUgTWIvcyBpbnN0ZWFkIG9mIDIgTWIvcyAqLwotCWlmKChsb2NhbC0+ZndfdmVyID09IDB4NTUpICYmCQkvKiBQbGVhc2UgY2hlY2sgKi8KLQkgICAodndycS0+dmFsdWUgPT0gMjAwMDAwMCkpCisJaWYgKChsb2NhbC0+ZndfdmVyID09IDB4NTUpICYmCS8qIFBsZWFzZSBjaGVjayAqLworCSAgICAodndycS0+dmFsdWUgPT0gMjAwMDAwMCkpCiAJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gMzsKIAllbHNlCi0JCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gdndycS0+dmFsdWUvNTAwMDAwOworCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IHZ3cnEtPnZhbHVlIC8gNTAwMDAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjM2LDE2ICsxMjY4LDE1IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPT0gMykKLQkJdndycS0+dmFsdWUgPSAyMDAwMDAwOwkJLyogSHVtLi4uICovCisJaWYgKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID09IDMpCisJCXZ3cnEtPnZhbHVlID0gMjAwMDAwMDsJLyogSHVtLi4uICovCiAJZWxzZQogCQl2d3JxLT52YWx1ZSA9IGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlICogNTAwMDAwOwotCXZ3cnEtPmZpeGVkID0gMDsJCS8qIFdlIGFyZSBpbiBhdXRvIG1vZGUgKi8KKwl2d3JxLT5maXhlZCA9IDA7CS8qIFdlIGFyZSBpbiBhdXRvIG1vZGUgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMTI1Niw0MyArMTI4Nyw0MCBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkgICAgICAgY2hhciAqZXh0cmEpCisJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBydGhyID0gdndycS0+dmFsdWU7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogaWYod3JxLT51LnJ0cy5maXhlZCA9PSAwKSB3ZSBzaG91bGQgY29tcGxhaW4gKi8KLQlpZih2d3JxLT5kaXNhYmxlZCkKKwlpZiAodndycS0+ZGlzYWJsZWQpCiAJCXJ0aHIgPSAzMjc2NzsKIAllbHNlIHsKLQkJaWYoKHJ0aHIgPCAwKSB8fCAocnRociA+IDIzNDcpKSAvKiBXaGF0J3MgdGhlIG1heCBwYWNrZXQgc2l6ZSA/Pz8gKi8KKwkJaWYgKChydGhyIDwgMCkgfHwgKHJ0aHIgPiAyMzQ3KSkgICAvKiBXaGF0J3MgdGhlIG1heCBwYWNrZXQgc2l6ZSA/Pz8gKi8KIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzBdID0gKHJ0aHIgPj4gOCkgJiAweEZGOwogCWxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMV0gPSBydGhyICYgMHhGRjsKIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IFJUUyB0aHJlc2hvbGQKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJICAgICAgIGNoYXIgKmV4dHJhKQorCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXZ3cnEtPnZhbHVlID0gKGxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMF0gPDwgOCkKLQkJKyBsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzFdOworCSAgICArIGxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMV07CiAJdndycS0+ZGlzYWJsZWQgPSAodndycS0+dmFsdWUgPT0gMzI3NjcpOwogCXZ3cnEtPmZpeGVkID0gMTsKIApAQCAtMTMwNSwyNyArMTMzMywyNiBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZnRociA9IHZ3cnEtPnZhbHVlOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIGlmKHdycS0+dS5mcmFnLmZpeGVkID09IDApIHNob3VsZCBjb21wbGFpbiAqLwotCWlmKHZ3cnEtPmRpc2FibGVkKQorCWlmICh2d3JxLT5kaXNhYmxlZCkKIAkJZnRociA9IDMyNzY3OwogCWVsc2UgewotCQlpZigoZnRociA8IDI1NikgfHwgKGZ0aHIgPiAyMzQ3KSkgLyogVG8gY2hlY2sgb3V0ICEgKi8KKwkJaWYgKChmdGhyIDwgMjU2KSB8fCAoZnRociA+IDIzNDcpKQkvKiBUbyBjaGVjayBvdXQgISAqLwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzBdID0gKGZ0aHIgPj4gOCkgJiAweEZGOwogCWxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzFdID0gZnRociAmIDB4RkY7CiAKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXJldHVybiAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTMzNCwxMyArMTM2MSwxMiBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXZ3cnEtPnZhbHVlID0gKGxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzBdIDw8IDgpCi0JCSsgbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMV07CisJICAgICsgbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMV07CiAJdndycS0+ZGlzYWJsZWQgPSAodndycS0+dmFsdWUgPT0gMzI3NjcpOwogCXZ3cnEtPmZpeGVkID0gMTsKIApAQCAtMTM1MiwyMyArMTM3OCwyMCBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IHNldCBNb2RlIG9mIE9wZXJhdGlvbgogICovCiBzdGF0aWMgaW50IHJheV9zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCV9fdTMyICp1d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBfX3UzMiAqdXdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAJY2hhciBjYXJkX21vZGUgPSAxOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXN3aXRjaCAoKnV3cnEpCi0JeworCXN3aXRjaCAoKnV3cnEpIHsKIAljYXNlIElXX01PREVfQURIT0M6CiAJCWNhcmRfbW9kZSA9IDA7Ci0JCS8vIEZhbGwgdGhyb3VnaAorCQkvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIElXX01PREVfSU5GUkE6CiAJCWxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSA9IGNhcmRfbW9kZTsKIAkJYnJlYWs7CkBAIC0xMzg0LDEzICsxNDA3LDExIEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IE1vZGUgb2YgT3BlcmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJX191MzIgKnV3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIF9fdTMyICp1d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSkKKwlpZiAobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlKQogCQkqdXdycSA9IElXX01PREVfSU5GUkE7CiAJZWxzZQogCQkqdXdycSA9IElXX01PREVfQURIT0M7CkBAIC0xNDA0LDEyICsxNDI1LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9yYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLAotCQkJIGNoYXIgKmV4dHJhKQorCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKIAotCW1lbXNldCgoY2hhciAqKSByYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOworCW1lbXNldCgoY2hhciAqKXJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CiAKIAkvKiBTZXQgdGhlIGxlbmd0aCAodmVyeSBpbXBvcnRhbnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpICovCiAJZHdycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CkBAIC0xNDIwLDcgKzE0NDAsNyBAQAogCiAJLyogU2V0IGluZm9ybWF0aW9uIGluIHRoZSByYW5nZSBzdHJ1Y3QgKi8KIAlyYW5nZS0+dGhyb3VnaHB1dCA9IDEuMSAqIDEwMDAgKiAxMDAwOwkvKiBQdXQgdGhlIHJpZ2h0IG51bWJlciBoZXJlICovCi0JcmFuZ2UtPm51bV9jaGFubmVscyA9IGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOyAKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07CiAJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSAwOwogCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMDsKIAlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAyNTU7CS8qIFdoYXQncyB0aGUgY29ycmVjdCB2YWx1ZSA/ICovCkBAIC0xNDM3LDggKzE0NTcsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZnJhbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkgICBjaGFyICpleHRyYSkKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXRyYW5zbGF0ZSA9ICooZXh0cmEpOwkvKiBTZXQgZnJhbWluZyBtb2RlICovCiAKQEAgLTE0NTEsOCArMTQ3MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9mcmFtaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCSAgIGNoYXIgKmV4dHJhKQorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJKihleHRyYSkgPSB0cmFuc2xhdGU7CiAKQEAgLTE0NjUsOCArMTQ4Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9jb3VudHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCSAgIGNoYXIgKmV4dHJhKQorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJKihleHRyYSkgPSBjb3VudHJ5OwogCkBAIC0xNDc3LDExICsxNDk0LDEwIEBACiAvKgogICogQ29tbWl0IGhhbmRsZXIgOiBjYWxsZWQgYWZ0ZXIgYSBidW5jaCBvZiBTRVQgb3BlcmF0aW9ucwogICovCi1zdGF0aWMgaW50IHJheV9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywJLyogTlVMTCAqLwotCQkgICAgICB2b2lkICp6d3JxLAkJCS8qIE5VTEwgKi8KLQkJICAgICAgY2hhciAqZXh0cmEpCQkJLyogTlVMTCAqLwoteworc3RhdGljIGludCByYXlfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCS8qIE5VTEwgKi8KKwkJICAgICAgdm9pZCAqendycSwJLyogTlVMTCAqLworCQkgICAgICBjaGFyICpleHRyYSkKK3sgLyogTlVMTCAqLwogCXJldHVybiAwOwogfQogCkBAIC0xNDg5LDMzICsxNTA1LDM0IEBACiAvKgogICogU3RhdHMgaGFuZGxlciA6IHJldHVybiBXaXJlbGVzcyBTdGF0cwogICovCi1zdGF0aWMgaXdfc3RhdHMgKiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQorc3RhdGljIGl3X3N0YXRzICpyYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gIHJheV9kZXZfdCAqCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICBzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOwogCi0gIGlmKGxvY2FsID09IChyYXlfZGV2X3QgKikgTlVMTCkKLSAgICByZXR1cm4gKGl3X3N0YXRzICopIE5VTEw7CisJaWYgKGxvY2FsID09IChyYXlfZGV2X3QgKikgTlVMTCkKKwkJcmV0dXJuIChpd19zdGF0cyAqKSBOVUxMOwogCi0gIGxvY2FsLT53c3RhdHMuc3RhdHVzID0gbG9jYWwtPmNhcmRfc3RhdHVzOworCWxvY2FsLT53c3RhdHMuc3RhdHVzID0gbG9jYWwtPmNhcmRfc3RhdHVzOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICBpZigobG9jYWwtPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKSAmJiAobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlID09IDApKQotICAgIHsKLSAgICAgIC8qIEdldCBpdCBmcm9tIHRoZSBmaXJzdCBub2RlIGluIHNweSBsaXN0ICovCi0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5xdWFsOwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0udXBkYXRlZDsKLSAgICB9CisJaWYgKChsb2NhbC0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApCisJICAgICYmIChsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUgPT0gMCkpIHsKKwkJLyogR2V0IGl0IGZyb20gdGhlIGZpcnN0IG5vZGUgaW4gc3B5IGxpc3QgKi8KKwkJbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOworCQlsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7CisJCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0KKwkJICAgIGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS51cGRhdGVkOworCX0KICNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KIAotICBpZihwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKLSAgICBsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSByZWFkYigmcC0+cnhub2lzZSk7Ci0gICAgbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gNDsKLSAgfQorCWlmIChwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gcmVhZGIoJnAtPnJ4bm9pc2UpOworCQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCB8PSA0OworCX0KIAotICByZXR1cm4gJmxvY2FsLT53c3RhdHM7CisJcmV0dXJuICZsb2NhbC0+d3N0YXRzOwogfSAvKiBlbmQgcmF5X2dldF93aXJlbGVzc19zdGF0cyAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNTIzLDExNTkgKzE1NDAsMTI2NCBAQAogICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCiAgKi8KIAotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJcmF5X2hhbmRsZXJbXSA9IHsKLQlbU0lPQ1NJV0NPTU1JVC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2NvbW1pdCwKLQlbU0lPQ0dJV05BTUUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9uYW1lLAotCVtTSU9DU0lXRlJFUSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyZXEsCi0JW1NJT0NHSVdGUkVRICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJlcSwKLQlbU0lPQ1NJV01PREUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9tb2RlLAotCVtTSU9DR0lXTU9ERSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X21vZGUsCi0JW1NJT0NHSVdSQU5HRSAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmFuZ2UsCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciByYXlfaGFuZGxlcltdID0geworCVtTSU9DU0lXQ09NTUlUIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9jb21taXQsCisJW1NJT0NHSVdOQU1FIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbmFtZSwKKwlbU0lPQ1NJV0ZSRVEgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmVxLAorCVtTSU9DR0lXRlJFUSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyZXEsCisJW1NJT0NTSVdNT0RFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfbW9kZSwKKwlbU0lPQ0dJV01PREUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9tb2RlLAorCVtTSU9DR0lXUkFOR0UgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYW5nZSwKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAJW1NJT0NTSVdTUFkgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3NweSwKLQlbU0lPQ0dJV1NQWSAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfc3B5LAotCVtTSU9DU0lXVEhSU1BZLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF90aHJzcHksCi0JW1NJT0NHSVdUSFJTUFktU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3RocnNweSwKLSNlbmRpZgkvKiBXSVJFTEVTU19TUFkgKi8KLQlbU0lPQ0dJV0FQICAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF93YXAsCi0JW1NJT0NTSVdFU1NJRCAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZXNzaWQsCi0JW1NJT0NHSVdFU1NJRCAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZXNzaWQsCi0JW1NJT0NTSVdSQVRFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcmF0ZSwKLQlbU0lPQ0dJV1JBVEUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYXRlLAotCVtTSU9DU0lXUlRTICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3J0cywKLQlbU0lPQ0dJV1JUUyAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9ydHMsCi0JW1NJT0NTSVdGUkFHICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJhZywKLQlbU0lPQ0dJV0ZSQUcgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmFnLAorCVtTSU9DU0lXU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3NweSwKKwlbU0lPQ0dJV1NQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF9zcHksCisJW1NJT0NTSVdUSFJTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfdGhyc3B5LAorCVtTSU9DR0lXVEhSU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3RocnNweSwKKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KKwlbU0lPQ0dJV0FQIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfd2FwLAorCVtTSU9DU0lXRVNTSUQgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9lc3NpZCwKKwlbU0lPQ0dJV0VTU0lEIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZXNzaWQsCisJW1NJT0NTSVdSQVRFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcmF0ZSwKKwlbU0lPQ0dJV1JBVEUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYXRlLAorCVtTSU9DU0lXUlRTIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcnRzLAorCVtTSU9DR0lXUlRTIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcnRzLAorCVtTSU9DU0lXRlJBRyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyYWcsCisJW1NJT0NHSVdGUkFHIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJhZywKIH07CiAKLSNkZWZpbmUgU0lPQ1NJUEZSQU1JTkcJU0lPQ0lXRklSU1RQUklWCQkvKiBTZXQgZnJhbWluZyBtb2RlICovCisjZGVmaW5lIFNJT0NTSVBGUkFNSU5HCVNJT0NJV0ZJUlNUUFJJVgkvKiBTZXQgZnJhbWluZyBtb2RlICovCiAjZGVmaW5lIFNJT0NHSVBGUkFNSU5HCVNJT0NJV0ZJUlNUUFJJViArIDEJLyogR2V0IGZyYW1pbmcgbW9kZSAqLwogI2RlZmluZSBTSU9DR0lQQ09VTlRSWQlTSU9DSVdGSVJTVFBSSVYgKyAzCS8qIEdldCBjb3VudHJ5IGNvZGUgKi8KIAotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJcmF5X3ByaXZhdGVfaGFuZGxlcltdID0geworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcmF5X3ByaXZhdGVfaGFuZGxlcltdID0gewogCVswXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyYW1pbmcsCiAJWzFdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJhbWluZywKIAlbM10gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9jb3VudHJ5LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3MJcmF5X3ByaXZhdGVfYXJnc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3MgcmF5X3ByaXZhdGVfYXJnc1tdID0gewogLyogY21kLAkJc2V0X2FyZ3MsCWdldF9hcmdzLAluYW1lICovCi17IFNJT0NTSVBGUkFNSU5HLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfZnJhbWluZyIgfSwKLXsgU0lPQ0dJUEZSQU1JTkcsIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldF9mcmFtaW5nIiB9LAoteyBTSU9DR0lQQ09VTlRSWSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0X2NvdW50cnkiIH0sCisJe1NJT0NTSVBGUkFNSU5HLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsCisJICJzZXRfZnJhbWluZyJ9LAorCXtTSU9DR0lQRlJBTUlORywgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAiZ2V0X2ZyYW1pbmcifSwKKwl7U0lPQ0dJUENPVU5UUlksIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgImdldF9jb3VudHJ5In0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmCXJheV9oYW5kbGVyX2RlZiA9Ci17Ci0JLm51bV9zdGFuZGFyZAk9IEFSUkFZX1NJWkUocmF5X2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZQk9IEFSUkFZX1NJWkUocmF5X3ByaXZhdGVfaGFuZGxlciksCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJheV9oYW5kbGVyX2RlZiA9IHsKKwkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShyYXlfaGFuZGxlciksCisJLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShyYXlfcHJpdmF0ZV9oYW5kbGVyKSwKIAkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUocmF5X3ByaXZhdGVfYXJncyksCi0JLnN0YW5kYXJkCT0gcmF5X2hhbmRsZXIsCi0JLnByaXZhdGUJPSByYXlfcHJpdmF0ZV9oYW5kbGVyLAotCS5wcml2YXRlX2FyZ3MJPSByYXlfcHJpdmF0ZV9hcmdzLAorCS5zdGFuZGFyZCA9IHJheV9oYW5kbGVyLAorCS5wcml2YXRlID0gcmF5X3ByaXZhdGVfaGFuZGxlciwKKwkucHJpdmF0ZV9hcmdzID0gcmF5X3ByaXZhdGVfYXJncywKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gcmF5X2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICBsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICAKLSAgICBERUJVRygxLCAicmF5X29wZW4oJyVzJylcbiIsIGRldi0+bmFtZSk7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAobGluay0+b3BlbiA9PSAwKQotCSAgICBsb2NhbC0+bnVtX211bHRpID0gMDsKLSAgICBsaW5rLT5vcGVuKys7CisJREVCVUcoMSwgInJheV9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCi0gICAgLyogSWYgdGhlIGNhcmQgaXMgbm90IHN0YXJ0ZWQsIHRpbWUgdG8gc3RhcnQgaXQgISAtIEplYW4gSUkgKi8KLSAgICBpZihsb2NhbC0+Y2FyZF9zdGF0dXMgPT0gQ0FSRF9BV0FJVElOR19QQVJBTSkgewotCWludCBpOworCWlmIChsaW5rLT5vcGVuID09IDApCisJCWxvY2FsLT5udW1fbXVsdGkgPSAwOworCWxpbmstPm9wZW4rKzsKIAotCURFQlVHKDEsInJheV9vcGVuOiBkb2luZyBpbml0IG5vdyAhXG4iKTsKKwkvKiBJZiB0aGUgY2FyZCBpcyBub3Qgc3RhcnRlZCwgdGltZSB0byBzdGFydCBpdCAhIC0gSmVhbiBJSSAqLworCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgPT0gQ0FSRF9BV0FJVElOR19QQVJBTSkgeworCQlpbnQgaTsKIAotCS8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLwotCWlmICggKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApCi0JICB7Ci0JICAgIHByaW50ayhLRVJOX0lORk8gInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCi0JCSAgICJyZXR1cm5zIDB4JXhcbiIsaSk7Ci0JICAgIHJldHVybiAtMTsKLQkgIH0KLSAgICAgfQorCQlERUJVRygxLCAicmF5X29wZW46IGRvaW5nIGluaXQgbm93ICFcbiIpOwogCi0gICAgaWYgKHNuaWZmZXIpIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICBlbHNlICAgICAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCisJCWlmICgoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgorCQkJICAgICAgICJyZXR1cm5zIDB4JXhcbiIsIGkpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQogCi0gICAgREVCVUcoMiwicmF5X29wZW4gZW5kaW5nXG4iKTsKLSAgICByZXR1cm4gMDsKKwlpZiAoc25pZmZlcikKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCWVsc2UKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCURFQlVHKDIsICJyYXlfb3BlbiBlbmRpbmdcbiIpOworCXJldHVybiAwOwogfSAvKiBlbmQgcmF5X29wZW4gKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgbGluayA9IGxvY2FsLT5maW5kZXI7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBERUJVRygxLCAicmF5X2Rldl9jbG9zZSgnJXMnKVxuIiwgZGV2LT5uYW1lKTsKKwlERUJVRygxLCAicmF5X2Rldl9jbG9zZSgnJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIGxpbmstPm9wZW4tLTsKLSAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbGluay0+b3Blbi0tOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotICAgIC8qIEluIGhlcmUsIHdlIHNob3VsZCBzdG9wIHRoZSBoYXJkd2FyZSAoc3RvcCBjYXJkIGZyb20gYmVlaW5nIGFjdGl2ZSkKLSAgICAgKiBhbmQgc2V0IGxvY2FsLT5jYXJkX3N0YXR1cyB0byBDQVJEX0FXQUlUSU5HX1BBUkFNLCBzbyB0aGF0IHdoaWxlIHRoZQotICAgICAqIGNhcmQgaXMgY2xvc2VkIHdlIGNhbiBjaGFnZSBpdHMgY29uZmlndXJhdGlvbi4KLSAgICAgKiBQcm9iYWJseSBhbHNvIG5lZWQgYSBDT1IgcmVzZXQgdG8gZ2V0IHNhbmUgc3RhdGUgLSBKZWFuIElJICovCisJLyogSW4gaGVyZSwgd2Ugc2hvdWxkIHN0b3AgdGhlIGhhcmR3YXJlIChzdG9wIGNhcmQgZnJvbSBiZWVpbmcgYWN0aXZlKQorCSAqIGFuZCBzZXQgbG9jYWwtPmNhcmRfc3RhdHVzIHRvIENBUkRfQVdBSVRJTkdfUEFSQU0sIHNvIHRoYXQgd2hpbGUgdGhlCisJICogY2FyZCBpcyBjbG9zZWQgd2UgY2FuIGNoYWdlIGl0cyBjb25maWd1cmF0aW9uLgorCSAqIFByb2JhYmx5IGFsc28gbmVlZCBhIENPUiByZXNldCB0byBnZXQgc2FuZSBzdGF0ZSAtIEplYW4gSUkgKi8KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfSAvKiBlbmQgcmF5X2Rldl9jbG9zZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIERFQlVHKDEsInJheV9yZXNldCBlbnRlcmVkXG4iKTsKLSAgICByZXR1cm47CitzdGF0aWMgdm9pZCByYXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlERUJVRygxLCAicmF5X3Jlc2V0IGVudGVyZWRcbiIpOworCXJldHVybjsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ2F1c2UgYSBmaXJtd2FyZSBpbnRlcnJ1cHQgaWYgaXQgaXMgcmVhZHkgZm9yIG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogUmV0dXJuIG5vbnplcm8gaWYgbm90IHJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIGludCBpbnRlcnJ1cHRfZWNmKHJheV9kZXZfdCAqbG9jYWwsIGludCBjY3MpCiB7Ci0gICAgaW50IGkgPSA1MDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGkgPSA1MDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHRfZWNmIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBERUJVRygyLCJpbnRlcnJ1cHRfZWNmKGxvY2FsPSVwLCBjY3MgPSAweCV4XG4iLGxvY2FsLGNjcyk7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGludGVycnVwdF9lY2YgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCURFQlVHKDIsICJpbnRlcnJ1cHRfZWNmKGxvY2FsPSVwLCBjY3MgPSAweCV4XG4iLCBsb2NhbCwgY2NzKTsKIAotICAgIHdoaWxlICggaSAmJiAKLSAgICAgICAgICAgIChyZWFkYihsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpICYgRUNGX0lOVFJfU0VUKSkKLSAgICAgICAgaS0tOwotICAgIGlmIChpID09IDApIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdF9lY2YgY2FyZCBub3QgcmVhZHkgZm9yIGludGVycnVwdFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJd2hpbGUgKGkgJiYKKwkgICAgICAgKHJlYWRiKGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCkgJgorCQlFQ0ZfSU5UUl9TRVQpKQorCQlpLS07CisJaWYgKGkgPT0gMCkgeworCQlERUJVRygyLCAicmF5X2NzIGludGVycnVwdF9lY2YgY2FyZCBub3QgcmVhZHkgZm9yIGludGVycnVwdFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAJLyogRmlsbCB0aGUgbWFpbGJveCwgdGhlbiBraWNrIHRoZSBjYXJkICovCi0gICAgd3JpdGViKGNjcywgbG9jYWwtPnNyYW0gKyBTQ0JfQkFTRSk7Ci0gICAgd3JpdGViKEVDRl9JTlRSX1NFVCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKTsKLSAgICByZXR1cm4gMDsKKwl3cml0ZWIoY2NzLCBsb2NhbC0+c3JhbSArIFNDQl9CQVNFKTsKKwl3cml0ZWIoRUNGX0lOVFJfU0VULCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpOworCXJldHVybiAwOwogfSAvKiBpbnRlcnJ1cHRfZWNmICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIEdldCBuZXh0IGZyZWUgdHJhbnNtaXQgQ0NTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFJldHVybiAtIGluZGV4IG9mIGN1cnJlbnQgdHggY2NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHN0YXRpYyBpbnQgZ2V0X2ZyZWVfdHhfY2NzKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgZ2V0X2ZyZWVfdHhfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQVJER09ORTsKLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGdldF9mcmVlX3R4X2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiBFQ0FSREdPTkU7CisJfQogCi0gICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwmbG9jYWwtPnR4X2Njc19sb2NrKSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgdHhfY2NzX2xvY2sgYnVzeVxuIik7Ci0gICAgICAgIHJldHVybiBFQ0NTQlVTWTsKLSAgICB9IAorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZsb2NhbC0+dHhfY2NzX2xvY2spKSB7CisJCURFQlVHKDEsICJyYXlfY3MgdHhfY2NzX2xvY2sgYnVzeVxuIik7CisJCXJldHVybiBFQ0NTQlVTWTsKKwl9CiAKLSAgICBmb3IgKGk9MDsgaSA8IE5VTUJFUl9PRl9UWF9DQ1M7IGkrKykgewotICAgICAgICBpZiAocmVhZGIoJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcytpKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MraSktPmxpbmspOworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfVFhfQ0NTOyBpKyspIHsKKwkJaWYgKHJlYWRiKCYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKKwkJCXdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKTsKKwkJCXdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcyArIGkpLT5saW5rKTsKIAkJCWxvY2FsLT50eF9jY3NfbG9jayA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KKwkJCXJldHVybiBpOworCQl9CisJfQogCWxvY2FsLT50eF9jY3NfbG9jayA9IDA7Ci0gICAgREVCVUcoMiwicmF5X2NzIEVSUk9SIG5vIGZyZWUgdHggQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOwotICAgIHJldHVybiBFQ0NTRlVMTDsKKwlERUJVRygyLCAicmF5X2NzIEVSUk9SIG5vIGZyZWUgdHggQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOworCXJldHVybiBFQ0NTRlVMTDsKIH0gLyogZ2V0X2ZyZWVfdHhfY2NzICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIEdldCBuZXh0IGZyZWUgQ0NTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFJldHVybiAtIGluZGV4IG9mIGN1cnJlbnQgY2NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHN0YXRpYyBpbnQgZ2V0X2ZyZWVfY2NzKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgZ2V0X2ZyZWVfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQVJER09ORTsKLSAgICB9Ci0gICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwmbG9jYWwtPmNjc19sb2NrKSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgY2NzX2xvY2sgYnVzeVxuIik7Ci0gICAgICAgIHJldHVybiBFQ0NTQlVTWTsKLSAgICB9IAorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBnZXRfZnJlZV9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gRUNBUkRHT05FOworCX0KKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbG9jYWwtPmNjc19sb2NrKSkgeworCQlERUJVRygxLCAicmF5X2NzIGNjc19sb2NrIGJ1c3lcbiIpOworCQlyZXR1cm4gRUNDU0JVU1k7CisJfQogCi0gICAgZm9yIChpID0gTlVNQkVSX09GX1RYX0NDUzsgaSA8IE5VTUJFUl9PRl9DQ1M7IGkrKykgewotICAgICAgICBpZiAocmVhZGIoJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcytpKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MraSktPmxpbmspOworCWZvciAoaSA9IE5VTUJFUl9PRl9UWF9DQ1M7IGkgPCBOVU1CRVJfT0ZfQ0NTOyBpKyspIHsKKwkJaWYgKHJlYWRiKCYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKKwkJCXdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKTsKKwkJCXdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcyArIGkpLT5saW5rKTsKIAkJCWxvY2FsLT5jY3NfbG9jayA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KKwkJCXJldHVybiBpOworCQl9CisJfQogCWxvY2FsLT5jY3NfbG9jayA9IDA7Ci0gICAgREVCVUcoMSwicmF5X2NzIEVSUk9SIG5vIGZyZWUgQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOwotICAgIHJldHVybiBFQ0NTRlVMTDsKKwlERUJVRygxLCAicmF5X2NzIEVSUk9SIG5vIGZyZWUgQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOworCXJldHVybiBFQ0NTRlVMTDsKIH0gLyogZ2V0X2ZyZWVfY2NzICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZV90aW1lb3V0KHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIEF1dGhlbnRpY2F0aW9uIHdpdGggYWNjZXNzIHBvaW50IGZhaWxlZCIKLSAgICAgICAiIC0gdGltZW91dFxuIik7Ci0gICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIEF1dGhlbnRpY2F0aW9uIHdpdGggYWNjZXNzIHBvaW50IGZhaWxlZCIKKwkgICAgICAgIiAtIHRpbWVvdXRcbiIpOworCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCBhc2NfdG9faW50KGNoYXIgYSkKIHsKLSAgICBpZiAoYSA8ICcwJykgcmV0dXJuIC0xOwotICAgIGlmIChhIDw9ICc5JykgcmV0dXJuIChhIC0gJzAnKTsKLSAgICBpZiAoYSA8ICdBJykgcmV0dXJuIC0xOwotICAgIGlmIChhIDw9ICdGJykgcmV0dXJuICgxMCArIGEgLSAnQScpOwotICAgIGlmIChhIDwgJ2EnKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEgPD0gJ2YnKSByZXR1cm4gKDEwICsgYSAtICdhJyk7Ci0gICAgcmV0dXJuIC0xOworCWlmIChhIDwgJzAnKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPD0gJzknKQorCQlyZXR1cm4gKGEgLSAnMCcpOworCWlmIChhIDwgJ0EnKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPD0gJ0YnKQorCQlyZXR1cm4gKDEwICsgYSAtICdBJyk7CisJaWYgKGEgPCAnYScpCisJCXJldHVybiAtMTsKKwlpZiAoYSA8PSAnZicpCisJCXJldHVybiAoMTAgKyBhIC0gJ2EnKTsKKwlyZXR1cm4gLTE7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcGFyc2VfYWRkcihjaGFyICppbl9zdHIsIFVDSEFSICpvdXQpCiB7Ci0gICAgaW50IGxlbjsKLSAgICBpbnQgaSxqLGs7Ci0gICAgaW50IHN0YXR1czsKLSAgICAKLSAgICBpZiAoaW5fc3RyID09IE5VTEwpIHJldHVybiAwOwotICAgIGlmICgobGVuID0gc3RybGVuKGluX3N0cikpIDwgMikgcmV0dXJuIDA7Ci0gICAgbWVtc2V0KG91dCwgMCwgQUREUkxFTik7CisJaW50IGxlbjsKKwlpbnQgaSwgaiwgazsKKwlpbnQgc3RhdHVzOwogCi0gICAgc3RhdHVzID0gMTsKLSAgICBqID0gbGVuIC0gMTsKLSAgICBpZiAoaiA+IDEyKSBqID0gMTI7Ci0gICAgaSA9IDU7Ci0gICAgCi0gICAgd2hpbGUgKGogPiAwKQotICAgIHsKLSAgICAgICAgaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKSBvdXRbaV0gPSBrOwotICAgICAgICBlbHNlIHJldHVybiAwOworCWlmIChpbl9zdHIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKChsZW4gPSBzdHJsZW4oaW5fc3RyKSkgPCAyKQorCQlyZXR1cm4gMDsKKwltZW1zZXQob3V0LCAwLCBBRERSTEVOKTsKIAotICAgICAgICBpZiAoaiA9PSAwKSBicmVhazsKLSAgICAgICAgaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKSBvdXRbaV0gKz0gayA8PCA0OwotICAgICAgICBlbHNlIHJldHVybiAwOwotICAgICAgICBpZiAoIWktLSkgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gMTsKKwlqID0gbGVuIC0gMTsKKwlpZiAoaiA+IDEyKQorCQlqID0gMTI7CisJaSA9IDU7CisKKwl3aGlsZSAoaiA+IDApIHsKKwkJaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKQorCQkJb3V0W2ldID0gazsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGogPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpCisJCQlvdXRbaV0gKz0gayA8PCA0OworCQllbHNlCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFpLS0pCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1czsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpyYXlfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgbmV0X2RldmljZV9zdGF0cyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAmbG9jYWwtPnN0YXRzOwotICAgIH0KLSAgICBpZiAocmVhZGIoJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCkpCi0gICAgewotICAgICAgICBsb2NhbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5tcnhfb3ZlcmZsb3cpKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9vdmVyZmxvdyk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpOwotICAgIH0KLSAgICBpZiAocmVhZGIoJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCkpCi0gICAgewotICAgICAgICBsb2NhbC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPm1yeF9jaGVja3N1bV9lcnJvcikpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCk7Ci0gICAgfQotICAgIGlmIChyZWFkYigmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KSkKLSAgICB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5yeF9oZWNfZXJyb3IpKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPnJ4X2hlY19lcnJvcik7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpOwotICAgIH0KLSAgICByZXR1cm4gJmxvY2FsLT5zdGF0czsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgbmV0X2RldmljZV9zdGF0cyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAmbG9jYWwtPnN0YXRzOworCX0KKwlpZiAocmVhZGIoJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCkpIHsKKwkJbG9jYWwtPnN0YXRzLnJ4X292ZXJfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+bXJ4X292ZXJmbG93KSk7CisJCXdyaXRlYigwLCAmcC0+bXJ4X292ZXJmbG93KTsKKwkJd3JpdGViKDAsICZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpOworCX0KKwlpZiAocmVhZGIoJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCkpIHsKKwkJbG9jYWwtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0KKwkJICAgIHN3YWIxNihyZWFkdygmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKSk7CisJCXdyaXRlYigwLCAmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKTsKKwkJd3JpdGViKDAsICZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpOworCX0KKwlpZiAocmVhZGIoJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCkpIHsKKwkJbG9jYWwtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPnJ4X2hlY19lcnJvcikpOworCQl3cml0ZWIoMCwgJnAtPnJ4X2hlY19lcnJvcik7CisJCXdyaXRlYigwLCAmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KTsKKwl9CisJcmV0dXJuICZsb2NhbC0+c3RhdHM7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV91cGRhdGVfcGFybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBVQ0hBUiBvYmppZCwgVUNIQVIgKnZhbHVlLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9wYXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFVDSEFSIG9iamlkLCBVQ0hBUiAqdmFsdWUsCisJCQkgICAgaW50IGxlbikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIGludCBpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGNjc2luZGV4OworCWludCBpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9wYXJtIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfdXBkYXRlX3Bhcm0gLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQogCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDAsInJheV91cGRhdGVfcGFybSAtIE5vIGZyZWUgY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19VUERBVEVfUEFSQU1TLCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIob2JqaWQsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm9iamVjdF9pZCk7Ci0gICAgd3JpdGViKDEsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm51bWJlcl9vYmplY3RzKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uZmFpbHVyZV9jYXVzZSk7Ci0gICAgZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKLSAgICAgICAgd3JpdGViKHZhbHVlW2ldLCBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UpOwotICAgIH0KLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQorCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHsKKwkJREVCVUcoMCwgInJheV91cGRhdGVfcGFybSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19VUERBVEVfUEFSQU1TLCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIob2JqaWQsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm9iamVjdF9pZCk7CisJd3JpdGViKDEsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm51bWJlcl9vYmplY3RzKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uZmFpbHVyZV9jYXVzZSk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXdyaXRlYih2YWx1ZVtpXSwgbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFKTsKKwl9CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygwLCAicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwl9CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJheV91cGRhdGVfbXVsdGlfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWxsKQogewotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pLCAqKmRtaXA7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgaSA9IDA7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHZvaWQgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSwgKipkbWlwOworCWludCBjY3NpbmRleDsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGkgPSAwOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwl2b2lkIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0U7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV91cGRhdGVfbXVsdGlfbGlzdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9tdWx0aV9saXN0KCVwKVxuIixkZXYpOwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCi0gICAgewotICAgICAgICBERUJVRygxLCJyYXlfdXBkYXRlX211bHRpIC0gTm8gZnJlZSBjY3NcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVCwgJnBjY3MtPmNtZCk7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X3VwZGF0ZV9tdWx0aV9saXN0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlERUJVRygyLCAicmF5X3VwZGF0ZV9tdWx0aV9saXN0KCVwKVxuIiwgZGV2KTsKKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSB7CisJCURFQlVHKDEsICJyYXlfdXBkYXRlX211bHRpIC0gTm8gZnJlZSBjY3NcbiIpOworCQlyZXR1cm47CisJfQorCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVCwgJnBjY3MtPmNtZCk7CiAKLSAgICBpZiAoYWxsKSB7Ci0gICAgICAgIHdyaXRlYigweGZmLCAmcGNjcy0+dmFyKTsKLSAgICAgICAgbG9jYWwtPm51bV9tdWx0aSA9IDB4ZmY7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBDb3B5IHRoZSBrZXJuZWwncyBsaXN0IG9mIE1DIGFkZHJlc3NlcyB0byBjYXJkICovCi0gICAgICAgIGZvciAoZG1pcD0mZGV2LT5tY19saXN0OyAoZG1pPSpkbWlwKSE9TlVMTDsgZG1pcD0mZG1pLT5uZXh0KSB7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwLCBkbWktPmRtaV9hZGRyLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfdXBkYXRlX211bHRpIGFkZCBhZGRyICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIixkbWktPmRtaV9hZGRyWzBdLGRtaS0+ZG1pX2FkZHJbMV0sZG1pLT5kbWlfYWRkclsyXSxkbWktPmRtaV9hZGRyWzNdLGRtaS0+ZG1pX2FkZHJbNF0sZG1pLT5kbWlfYWRkcls1XSk7Ci0gICAgICAgICAgICBwICs9IEVUSF9BTEVOOwotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID4gMjU2L0FERFJMRU4pIGkgPSAyNTYvQUREUkxFTjsKLSAgICAgICAgd3JpdGViKChVQ0hBUilpLCAmcGNjcy0+dmFyKTsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHVwZGF0ZV9tdWx0aSAlZCBhZGRyZXNzZXMgaW4gbGlzdFxuIiwgaSk7Ci0gICAgICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgICAgICBsb2NhbC0+bnVtX211bHRpID0gaTsKLSAgICB9Ci0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgdXBkYXRlX211bHRpIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KKwlpZiAoYWxsKSB7CisJCXdyaXRlYigweGZmLCAmcGNjcy0+dmFyKTsKKwkJbG9jYWwtPm51bV9tdWx0aSA9IDB4ZmY7CisJfSBlbHNlIHsKKwkJLyogQ29weSB0aGUga2VybmVsJ3MgbGlzdCBvZiBNQyBhZGRyZXNzZXMgdG8gY2FyZCAqLworCQlmb3IgKGRtaXAgPSAmZGV2LT5tY19saXN0OyAoZG1pID0gKmRtaXApICE9IE5VTEw7CisJCSAgICAgZG1pcCA9ICZkbWktPm5leHQpIHsKKwkJCW1lbWNweV90b2lvKHAsIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkgICAgICBkbWktPmRtaV9hZGRyWzBdLCBkbWktPmRtaV9hZGRyWzFdLAorCQkJICAgICAgZG1pLT5kbWlfYWRkclsyXSwgZG1pLT5kbWlfYWRkclszXSwKKwkJCSAgICAgIGRtaS0+ZG1pX2FkZHJbNF0sIGRtaS0+ZG1pX2FkZHJbNV0pOworCQkJcCArPSBFVEhfQUxFTjsKKwkJCWkrKzsKKwkJfQorCQlpZiAoaSA+IDI1NiAvIEFERFJMRU4pCisJCQlpID0gMjU2IC8gQUREUkxFTjsKKwkJd3JpdGViKChVQ0hBUikgaSwgJnBjY3MtPnZhcik7CisJCURFQlVHKDEsICJyYXlfY3MgdXBkYXRlX211bHRpICVkIGFkZHJlc3NlcyBpbiBsaXN0XG4iLCBpKTsKKwkJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJCWxvY2FsLT5udW1fbXVsdGkgPSBpOworCX0KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsCisJCSAgICAgICJyYXlfY3MgdXBkYXRlX211bHRpIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCX0KIH0gLyogZW5kIHJheV91cGRhdGVfbXVsdGlfbGlzdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBVQ0hBUiBwcm9taXNjOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCVVDSEFSIHByb21pc2M7CiAKLSAgICBERUJVRygyLCJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0KCVwKVxuIixkZXYpOworCURFQlVHKDIsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0KCVwKVxuIiwgZGV2KTsKIAotICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAwKSB7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb25cbiIpOwotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDE7Ci0gICAgICAgICAgICBwcm9taXNjID0gMTsKLSAgICAgICAgICAgIHJheV91cGRhdGVfcGFybShkZXYsICBPQkpJRF9wcm9taXNjdW91c19tb2RlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDEpIHsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvZmZcbiIpOwotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDA7Ci0gICAgICAgICAgICBwcm9taXNjID0gMDsKLSAgICAgICAgICAgIHJheV91cGRhdGVfcGFybShkZXYsICBPQkpJRF9wcm9taXNjdW91c19tb2RlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7Ci0gICAgICAgIH0KLSAgICB9CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAwKSB7CisJCQlERUJVRygxLCAicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9uXG4iKTsKKwkJCWxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAxOworCQkJcHJvbWlzYyA9IDE7CisJCQlyYXlfdXBkYXRlX3Bhcm0oZGV2LCBPQkpJRF9wcm9taXNjdW91c19tb2RlLAorCQkJCQkmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDEpIHsKKwkJCURFQlVHKDEsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb2ZmXG4iKTsKKwkJCWxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAwOworCQkJcHJvbWlzYyA9IDA7CisJCQlyYXlfdXBkYXRlX3Bhcm0oZGV2LCBPQkpJRF9wcm9taXNjdW91c19tb2RlLAorCQkJCQkmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKKwkJfQorCX0KIAotICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSByYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAxKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPm51bV9tdWx0aSAhPSBkZXYtPm1jX2NvdW50KSByYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAwKTsKLSAgICB9CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCXJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDEpOworCWVsc2UgeworCQlpZiAobG9jYWwtPm51bV9tdWx0aSAhPSBkZXYtPm1jX2NvdW50KQorCQkJcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMCk7CisJfQogfSAvKiBlbmQgc2V0X211bHRpY2FzdF9saXN0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEFsbCByb3V0aW5lcyBiZWxvdyBoZXJlIGFyZSBydW4gYXQgaW50ZXJydXB0IHRpbWUuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcmF5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICByYXlfZGV2X3QgKmxvY2FsOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3M7Ci0gICAgVUNIQVIgcmNzaW5kZXg7Ci0gICAgVUNIQVIgdG1wOwotICAgIFVDSEFSIGNtZDsKLSAgICBVQ0hBUiBzdGF0dXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlyYXlfZGV2X3QgKmxvY2FsOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3M7CisJVUNIQVIgcmNzaW5kZXg7CisJVUNIQVIgdG1wOworCVVDSEFSIGNtZDsKKwlVQ0hBUiBzdGF0dXM7CiAKLSAgICBpZiAoZGV2ID09IE5VTEwpIC8qIE5vdGUgdGhhdCB3ZSB3YW50IGludGVycnVwdHMgd2l0aCBkZXYtPnN0YXJ0ID09IDAgKi8KLQlyZXR1cm4gSVJRX05PTkU7CisJaWYgKGRldiA9PSBOVUxMKQkvKiBOb3RlIHRoYXQgd2Ugd2FudCBpbnRlcnJ1cHRzIHdpdGggZGV2LT5zdGFydCA9PSAwICovCisJCXJldHVybiBJUlFfTk9ORTsKIAotICAgIERFQlVHKDQsInJheV9jczogaW50ZXJydXB0IGZvciAqZGV2PSVwXG4iLGRldik7CisJREVCVUcoNCwgInJheV9jczogaW50ZXJydXB0IGZvciAqZGV2PSVwXG4iLCBkZXYpOwogCi0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilsb2NhbC0+ZmluZGVyOwotICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHQgZnJvbSBkZXZpY2Ugbm90IHByZXNlbnQgb3Igc3VzcGVuZGVkLlxuIik7Ci0gICAgICAgIHJldHVybiBJUlFfTk9ORTsKLSAgICB9Ci0gICAgcmNzaW5kZXggPSByZWFkYigmKChzdHJ1Y3Qgc2NiIF9faW9tZW0gKikobG9jYWwtPnNyYW0pKS0+cmNzX2luZGV4KTsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJbGluayA9IChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKWxvY2FsLT5maW5kZXI7CisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKKwkJREVCVUcoMiwKKwkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgZnJvbSBkZXZpY2Ugbm90IHByZXNlbnQgb3Igc3VzcGVuZGVkLlxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJcmNzaW5kZXggPSByZWFkYigmKChzdHJ1Y3Qgc2NiIF9faW9tZW0gKikobG9jYWwtPnNyYW0pKS0+cmNzX2luZGV4KTsKIAotICAgIGlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKQotICAgIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLHJjc2luZGV4KTsKLSAgICAgICAgY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKLSAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotICAgIH0KLSAgICBpZiAocmNzaW5kZXggPCBOVU1CRVJfT0ZfQ0NTKSAvKiBJZiBpdCdzIGEgcmV0dXJuZWQgQ0NTICovCi0gICAgewotICAgICAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7Ci0gICAgICAgIGNtZCA9IHJlYWRiKCZwY2NzLT5jbWQpOwotICAgICAgICBzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHN3aXRjaCAoY21kKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TOiAvKiBIYXBwZW5zIGluIGZpcm13YXJlIHNvbWVkYXkgKi8KLSAgICAgICAgICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBPS1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBmYWlsXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19VUERBVEVfUEFSQU1TOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGRvbmVcbiIpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIHRtcCA9IHJlYWRiKCZwY2NzLT52YXIudXBkYXRlX3BhcmFtLmZhaWx1cmVfY2F1c2UpOwotICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGZhaWxlZCAtIHJlYXNvbiAlZFxuIix0bXApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1JFUE9SVF9QQVJBTVM6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHJlcG9ydCBwYXJhbXMgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNUOiAvKiBOb3RlIHRoYXQgdGhpcyBDQ1MgaXNuJ3QgcmV0dXJuZWQgKi8KLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgQ0NTIFVwZGF0ZSBNdWx0aWNhc3QgTGlzdCBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19VUERBVEVfUE9XRVJfU0FWSU5HU19NT0RFOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcG93ZXIgc2F2ZSBtb2RlIGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NUQVJUX05FVFdPUks6Ci0gICAgICAgIGNhc2UgQ0NTX0pPSU5fTkVUV09SSzoKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydGVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQscGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuYnNzaWQsQUREUkxFTik7CisJaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKKwkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIiwgcmNzaW5kZXgpOworCQljbGVhcl9pbnRlcnJ1cHQobG9jYWwpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWlmIChyY3NpbmRleCA8IE5VTUJFUl9PRl9DQ1MpIHsgLyogSWYgaXQncyBhIHJldHVybmVkIENDUyAqLworCQlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7CisJCWNtZCA9IHJlYWRiKCZwY2NzLT5jbWQpOworCQlzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TOgkvKiBIYXBwZW5zIGluIGZpcm13YXJlIHNvbWVkYXkgKi8KKwkJCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBPS1xuIik7CisJCQl9IGVsc2UgeworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIGZhaWxcbiIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1VQREFURV9QQVJBTVM6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGRvbmVcbiIpOworCQkJaWYgKHN0YXR1cyAhPSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCXRtcCA9CisJCQkJICAgIHJlYWRiKCZwY2NzLT52YXIudXBkYXRlX3BhcmFtLgorCQkJCQkgIGZhaWx1cmVfY2F1c2UpOworCQkJCURFQlVHKDAsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBmYWlsZWQgLSByZWFzb24gJWRcbiIsCisJCQkJICAgICAgdG1wKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19SRVBPUlRfUEFSQU1TOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgcmVwb3J0IHBhcmFtcyBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19VUERBVEVfTVVMVElDQVNUX0xJU1Q6CS8qIE5vdGUgdGhhdCB0aGlzIENDUyBpc24ndCByZXR1cm5lZCAqLworCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IENDUyBVcGRhdGUgTXVsdGljYXN0IExpc3QgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVVBEQVRFX1BPV0VSX1NBVklOR1NfTU9ERToKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcG93ZXIgc2F2ZSBtb2RlIGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NUQVJUX05FVFdPUks6CisJCWNhc2UgQ0NTX0pPSU5fTkVUV09SSzoKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlpZiAocmVhZGIKKwkJCQkgICAgKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5uZXRfaW5pdGlhdGVkKSA9PQorCQkJCSAgICAxKSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0ZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQl9CisJCQkJbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCwKKwkJCQkJICAgICAgcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuYnNzaWQsCisJCQkJCSAgICAgIEFERFJMRU4pOwogCi0gICAgICAgICAgICAgICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAzOwotICAgICAgICAgICAgICAgIGVsc2UgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsubmV0X2RlZmF1bHRfdHhfcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmVuY3J5cHRpb24gPSByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuZW5jcnlwdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKCFzbmlmZmVyICYmIChsb2NhbC0+bmV0X3R5cGUgPT0gSU5GUkEpCi0gICAgICAgICAgICAgICAgICAgICYmICEobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRlKGxvY2FsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9GQUlMRUQ7CisJCQkJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKKwkJCQkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAzOworCQkJCWVsc2UKKwkJCQkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPQorCQkJCQkgICAgcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLgorCQkJCQkJICBuZXRfZGVmYXVsdF90eF9yYXRlKTsKKwkJCQlsb2NhbC0+ZW5jcnlwdGlvbiA9CisJCQkJICAgIHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5lbmNyeXB0aW9uKTsKKwkJCQlpZiAoIXNuaWZmZXIgJiYgKGxvY2FsLT5uZXRfdHlwZSA9PSBJTkZSQSkKKwkJCQkgICAgJiYgIShsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKSkgeworCQkJCQlhdXRoZW50aWNhdGUobG9jYWwpOworCQkJCX0KKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKKwkJCX0gZWxzZSB7CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfRkFJTEVEOwogCi0gICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaKjU7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19TVEFSVF9ORVRXT1JLKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnQgZmFpbGVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmc3RhcnRfbmV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luIGZhaWxlZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU1RBUlRfQVNTT0NJQVRJT046Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19DT01QTEVURTsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgYXNzb2NpYXRpb24gc3VjY2Vzc2Z1bFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGFzc29jaWF0aW9uIGZhaWxlZCxcbiIpOwotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOwotICAgICAgICAgICAgICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1RYX1JFUVVFU1Q6Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMywicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGNvbXBsZXRlXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBmYWlsZWRcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzbmlmZmVyKSBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1RFU1RfTUVNT1JZOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBtZW0gdGVzdCBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TSFVURE9XTjoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgcmV0dXJuZWQgLSBTaHV0ZG93blxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfRFVNUF9NRU1PUlk6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGR1bXAgbWVtb3J5IGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NUQVJUX1RJTUVSOgotICAgICAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdCBESU5HIC0gcmF5bGluayB0aW1lciBleHBpcmVkXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyAweCV4IHJldHVybmVkIDB4JXhcbiIsXAotICAgICAgICAgICAgICAgICAgcmNzaW5kZXgsIGNtZCk7Ci0gICAgICAgIH0KLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KLSAgICBlbHNlIC8qIEl0J3MgYW4gUkNTICovCi0gICAgewotICAgICAgICBwcmNzID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7Ci0gICAgCi0gICAgICAgIHN3aXRjaCAocmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBQUk9DRVNTX1JYX1BBQ0tFVDoKLSAgICAgICAgICAgIHJheV9yeChkZXYsIGxvY2FsLCBwcmNzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJFSk9JTl9ORVRfQ09NUExFVEU6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHJlam9pbiBuZXQgY29tcGxldGVcbiIpOwotICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7Ci0gICAgICAgICAgICAvKiBkbyB3ZSBuZWVkIHRvIGNsZWFyIHR4IGJ1ZmZlcnMgQ0NTJ3M/ICovCi0gICAgICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzbmlmZmVyKSBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCwgcHJjcy0+dmFyLnJlam9pbl9uZXRfY29tcGxldGUuYnNzaWQsIEFERFJMRU4pOwotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBuZXcgQlNTSUQgPSAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsXAotICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5ic3NfaWRbMF0sIGxvY2FsLT5ic3NfaWRbMV0sIGxvY2FsLT5ic3NfaWRbMl0sXAotICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5ic3NfaWRbM10sIGxvY2FsLT5ic3NfaWRbNF0sIGxvY2FsLT5ic3NfaWRbNV0pOwotICAgICAgICAgICAgICAgIGlmICghc25pZmZlcikgYXV0aGVudGljYXRlKGxvY2FsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJPQU1JTkdfSU5JVElBVEVEOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCByb2FtaW5nIGluaXRpYXRlZFxuIik7IAotICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBKQVBBTl9DQUxMX1NJR05fUlhEOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBqYXBhbiBjYWxsIHNpZ24gcnhcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgVW5leHBlY3RlZCBpbnRlcnJ1cHQgZm9yIFJDUyAweCV4IGNtZCA9IDB4JXhcbiIsXAotICAgICAgICAgICAgICAgICAgcmNzaW5kZXgsICh1bnNpZ25lZCBpbnQpIHJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9Ci0gICAgY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKLSAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQkJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQkJCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogNTsKKwkJCQlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCQkJCWlmIChzdGF0dXMgPT0gQ0NTX1NUQVJUX05FVFdPUkspIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnQgZmFpbGVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZzdGFydF9uZXQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbiBmYWlsZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OworCQkJCX0KKwkJCQlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU1RBUlRfQVNTT0NJQVRJT046CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19DT01QTEVURTsKKwkJCQlERUJVRygwLCAicmF5X2NzIGFzc29jaWF0aW9uIHN1Y2Nlc3NmdWxcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlERUJVRygwLCAicmF5X2NzIGFzc29jaWF0aW9uIGZhaWxlZCxcbiIpOworCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOworCQkJCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19UWF9SRVFVRVNUOgorCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCURFQlVHKDMsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBjb21wbGV0ZVxuIik7CisJCQl9IGVsc2UgeworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBmYWlsZWRcbiIpOworCQkJfQorCQkJaWYgKCFzbmlmZmVyKQorCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVEVTVF9NRU1PUlk6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBtZW0gdGVzdCBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19TSFVURE9XTjoKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyByZXR1cm5lZCAtIFNodXRkb3duXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19EVU1QX01FTU9SWToKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGR1bXAgbWVtb3J5IGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NUQVJUX1RJTUVSOgorCQkJREVCVUcoMiwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IERJTkcgLSByYXlsaW5rIHRpbWVyIGV4cGlyZWRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgMHgleCByZXR1cm5lZCAweCV4XG4iLAorCQkJICAgICAgcmNzaW5kZXgsIGNtZCk7CisJCX0KKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCX0gZWxzZSB7IC8qIEl0J3MgYW4gUkNTICovCisKKwkJcHJjcyA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OworCisJCXN3aXRjaCAocmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpIHsKKwkJY2FzZSBQUk9DRVNTX1JYX1BBQ0tFVDoKKwkJCXJheV9yeChkZXYsIGxvY2FsLCBwcmNzKTsKKwkJCWJyZWFrOworCQljYXNlIFJFSk9JTl9ORVRfQ09NUExFVEU6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCByZWpvaW4gbmV0IGNvbXBsZXRlXG4iKTsKKwkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOworCQkJLyogZG8gd2UgbmVlZCB0byBjbGVhciB0eCBidWZmZXJzIENDUydzPyAqLworCQkJaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgeworCQkJCWlmICghc25pZmZlcikKKwkJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCwKKwkJCQkJICAgICAgcHJjcy0+dmFyLnJlam9pbl9uZXRfY29tcGxldGUuCisJCQkJCSAgICAgIGJzc2lkLCBBRERSTEVOKTsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgbmV3IEJTU0lEID0gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbMF0sIGxvY2FsLT5ic3NfaWRbMV0sCisJCQkJICAgICAgbG9jYWwtPmJzc19pZFsyXSwgbG9jYWwtPmJzc19pZFszXSwKKwkJCQkgICAgICBsb2NhbC0+YnNzX2lkWzRdLCBsb2NhbC0+YnNzX2lkWzVdKTsKKwkJCQlpZiAoIXNuaWZmZXIpCisJCQkJCWF1dGhlbnRpY2F0ZShsb2NhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBST0FNSU5HX0lOSVRJQVRFRDoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHJvYW1pbmcgaW5pdGlhdGVkXG4iKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROworCQkJYnJlYWs7CisJCWNhc2UgSkFQQU5fQ0FMTF9TSUdOX1JYRDoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGphcGFuIGNhbGwgc2lnbiByeFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIFVuZXhwZWN0ZWQgaW50ZXJydXB0IGZvciBSQ1MgMHgleCBjbWQgPSAweCV4XG4iLAorCQkJICAgICAgcmNzaW5kZXgsCisJCQkgICAgICAodW5zaWduZWQgaW50KXJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKTsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzLT5idWZmZXJfc3RhdHVzKTsKKwl9CisJY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9IC8qIHJheV9pbnRlcnJ1cHQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcykKK3N0YXRpYyB2b2lkIHJheV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCByYXlfZGV2X3QgKmxvY2FsLAorCQkgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpCiB7Ci0gICAgaW50IHJ4X2xlbjsKLSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHI7Ci0gICAgdm9pZCBfX2lvbWVtICpwbXNnOwotICAgIERFQlVHKDQsInJheV9yeCBwcm9jZXNzIHJ4IHBhY2tldFxuIik7CisJaW50IHJ4X2xlbjsKKwl1bnNpZ25lZCBpbnQgcGt0X2FkZHI7CisJdm9pZCBfX2lvbWVtICpwbXNnOworCURFQlVHKDQsICJyYXlfcnggcHJvY2VzcyByeCBwYWNrZXRcbiIpOwogCi0gICAgLyogQ2FsY3VsYXRlIGFkZHJlc3Mgb2YgcGFja2V0IHdpdGhpbiBSeCBidWZmZXIgKi8KLSAgICBwa3RfYWRkciA9ICgocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpICYgUlhfQlVGRl9FTkQ7Ci0gICAgLyogTGVuZ3RoIG9mIGZpcnN0IHBhY2tldCBmcmFnbWVudCAqLwotICAgIHJ4X2xlbiA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7CisJLyogQ2FsY3VsYXRlIGFkZHJlc3Mgb2YgcGFja2V0IHdpdGhpbiBSeCBidWZmZXIgKi8KKwlwa3RfYWRkciA9ICgocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8IDgpCisJCSAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkgJiBSWF9CVUZGX0VORDsKKwkvKiBMZW5ndGggb2YgZmlyc3QgcGFja2V0IGZyYWdtZW50ICovCisJcnhfbGVuID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQorCSAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKIAotICAgIGxvY2FsLT5sYXN0X3JzbCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X3NpZ19sZXYpOwotICAgIHBtc2cgPSBsb2NhbC0+cm1lbSArIHBrdF9hZGRyOwotICAgIHN3aXRjaChyZWFkYihwbXNnKSkKLSAgICB7Ci0gICAgY2FzZSBEQVRBX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBkYXRhIHR5cGVcbiIpOwotICAgICAgICByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVVUSEVOVElDX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBhdXRoZW50aWMgdHlwZVxuIik7Ci0gICAgICAgIGlmIChzbmlmZmVyKSByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGVsc2UgcnhfYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERUFVVEhFTlRJQ19UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggZGVhdXRoIHR5cGVcbiIpOwotICAgICAgICBpZiAoc25pZmZlcikgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBlbHNlIHJ4X2RlYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOVUxMX01TR19UWVBFOgotICAgICAgICBERUJVRygzLCJyYXlfY3MgcnggTlVMTCBtc2dcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJFQUNPTl9UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggYmVhY29uIHR5cGVcbiIpOwotICAgICAgICBpZiAoc25pZmZlcikgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCWxvY2FsLT5sYXN0X3JzbCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X3NpZ19sZXYpOworCXBtc2cgPSBsb2NhbC0+cm1lbSArIHBrdF9hZGRyOworCXN3aXRjaCAocmVhZGIocG1zZykpIHsKKwljYXNlIERBVEFfVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBkYXRhIHR5cGVcbiIpOworCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWJyZWFrOworCWNhc2UgQVVUSEVOVElDX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggYXV0aGVudGljIHR5cGVcbiIpOworCQlpZiAoc25pZmZlcikKKwkJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJZWxzZQorCQkJcnhfYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBERUFVVEhFTlRJQ19UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGRlYXV0aCB0eXBlXG4iKTsKKwkJaWYgKHNuaWZmZXIpCisJCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWVsc2UKKwkJCXJ4X2RlYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBOVUxMX01TR19UWVBFOgorCQlERUJVRygzLCAicmF5X2NzIHJ4IE5VTEwgbXNnXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBCRUFDT05fVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBiZWFjb24gdHlwZVxuIik7CisJCWlmIChzbmlmZmVyKQorCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwogCi0gICAgICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCAoVUNIQVIgKikmbG9jYWwtPmxhc3RfYmNuLCBwa3RfYWRkciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2xlbiA8IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSA/IAotICAgICAgICAgICAgICAgICAgICAgICAgICByeF9sZW4gOiBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkpOworCQljb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgKFVDSEFSICopICZsb2NhbC0+bGFzdF9iY24sIHBrdF9hZGRyLAorCQkJCSAgcnhfbGVuIDwgc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpID8KKwkJCQkgIHJ4X2xlbiA6IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSk7CiAKLQlsb2NhbC0+YmVhY29uX3J4ZWQgPSAxOwotICAgICAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3Mgc28gdGhlIGNhcmQgY291bnRlcnMgbmV2ZXIgb3ZlcmZsb3cgKi8KLSAgICAgICAgcmF5X2dldF9zdGF0cyhkZXYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIHVua25vd24gcGt0IHR5cGUgJTJ4XG4iLCAodW5zaWduZWQgaW50KSByZWFkYihwbXNnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKwkJbG9jYWwtPmJlYWNvbl9yeGVkID0gMTsKKwkJLyogR2V0IHRoZSBzdGF0aXN0aWNzIHNvIHRoZSBjYXJkIGNvdW50ZXJzIG5ldmVyIG92ZXJmbG93ICovCisJCXJheV9nZXRfc3RhdHMoZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUcoMCwgInJheV9jcyB1bmtub3duIHBrdCB0eXBlICUyeFxuIiwKKwkJICAgICAgKHVuc2lnbmVkIGludClyZWFkYihwbXNnKSk7CisJCWJyZWFrOworCX0KIAogfSAvKiBlbmQgcmF5X3J4ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIAotICAgICAgICAgICAgIGludCByeF9sZW4pCitzdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKIHsKLSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLSAgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBVQ0hBUiAqcnhfcHRyOwotICAgIGludCB0b3RhbF9sZW47Ci0gICAgaW50IHRtcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlVQ0hBUiAqcnhfcHRyOworCWludCB0b3RhbF9sZW47CisJaW50IHRtcDsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICBpbnQgc2lnbGV2ID0gbG9jYWwtPmxhc3RfcnNsOwotICAgIHVfY2hhciBsaW5rc3JjYWRkcltFVEhfQUxFTl07CS8qIE90aGVyIGVuZCBvZiB0aGUgd2lyZWxlc3MgbGluayAqLworCWludCBzaWdsZXYgPSBsb2NhbC0+bGFzdF9yc2w7CisJdV9jaGFyIGxpbmtzcmNhZGRyW0VUSF9BTEVOXTsJLyogT3RoZXIgZW5kIG9mIHRoZSB3aXJlbGVzcyBsaW5rICovCiAjZW5kaWYKIAotICAgIGlmICghc25pZmZlcikgewotICAgICAgICBpZiAodHJhbnNsYXRlKSB7CisJaWYgKCFzbmlmZmVyKSB7CisJCWlmICh0cmFuc2xhdGUpIHsKIC8qIFRCRCBsZW5ndGggbmVlZHMgZml4aW5nIGZvciB0cmFuc2xhdGVkIGhlYWRlciAqLwotICAgICAgICAgICAgaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAotICAgICAgICAgICAgICAgIHJ4X2xlbiA+IChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKyBGQ1NfTEVOKSkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIscnhfbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBlbmNhcHN1bGF0ZWQgZXRoZXJuZXQgKi8gewotICAgICAgICAgICAgaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAotICAgICAgICAgICAgICAgIHJ4X2xlbiA+IChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKyBGQ1NfTEVOKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIixyeF9sZW4pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBERUJVRyg0LCJyYXlfY3MgcnhfZGF0YSBwYWNrZXRcbiIpOwotICAgIC8qIElmIGZyYWdtZW50ZWQgcGFja2V0LCB2ZXJpZnkgc2l6ZXMgb2YgZnJhZ21lbnRzIGFkZCB1cCAqLwotICAgIGlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyByeCdlZCBmcmFnbWVudFxuIik7Ci0gICAgICAgIHRtcCA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgICAgICsgIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzFdKTsKLSAgICAgICAgdG90YWxfbGVuID0gdG1wOwotICAgICAgICBwcmNzbGluayA9IHByY3M7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHRtcCAtPSAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICsgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOwotICAgICAgICAgICAgaWYgKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSA9PSAweEZGCi0gICAgICAgICAgICAgICAgfHwgdG1wIDwgMCkgYnJlYWs7Ci0gICAgICAgICAgICBwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQotICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT5saW5rX2ZpZWxkKTsKLSAgICAgICAgfSB3aGlsZSAoMSk7CisJCQlpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8CisJCQkgICAgcnhfbGVuID4KKwkJCSAgICAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsKKwkJCSAgICAgRkNTX0xFTikpIHsKKwkJCQlERUJVRygwLAorCQkJCSAgICAgICJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIiwKKwkJCQkgICAgICByeF9sZW4pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsgLyogZW5jYXBzdWxhdGVkIGV0aGVybmV0ICovCiAKLSAgICAgICAgaWYgKHRtcCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyByeF9kYXRhIGZyYWdtZW50IGxlbmd0aHMgZG9uJ3QgYWRkIHVwXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7IAotICAgICAgICAgICAgcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsgLyogU2luZ2xlIHVuZnJhZ21lbnRlZCBwYWNrZXQgKi8KLSAgICAgICAgdG90YWxfbGVuID0gcnhfbGVuOwotICAgIH0KKwkJCWlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKKwkJCSAgICByeF9sZW4gPgorCQkJICAgIChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKworCQkJICAgICBGQ1NfTEVOKSkgeworCQkJCURFQlVHKDAsCisJCQkJICAgICAgInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLAorCQkJCSAgICAgIHJ4X2xlbik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorCURFQlVHKDQsICJyYXlfY3MgcnhfZGF0YSBwYWNrZXRcbiIpOworCS8qIElmIGZyYWdtZW50ZWQgcGFja2V0LCB2ZXJpZnkgc2l6ZXMgb2YgZnJhZ21lbnRzIGFkZCB1cCAqLworCWlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7CisJCURFQlVHKDEsICJyYXlfY3MgcngnZWQgZnJhZ21lbnRcbiIpOworCQl0bXAgPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMF0pIDw8IDgpCisJCSAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzFdKTsKKwkJdG90YWxfbGVuID0gdG1wOworCQlwcmNzbGluayA9IHByY3M7CisJCWRvIHsKKwkJCXRtcCAtPQorCQkJICAgIChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pCisJCQkgICAgIDw8IDgpCisJCQkgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOworCQkJaWYgKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KQorCQkJICAgID09IDB4RkYgfHwgdG1wIDwgMCkKKwkJCQlicmVhazsKKwkJCXByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCisJCQkgICAgKyByZWFkYigmcHJjc2xpbmstPmxpbmtfZmllbGQpOworCQl9IHdoaWxlICgxKTsKIAotICAgIHNrYiA9IGRldl9hbGxvY19za2IoIHRvdGFsX2xlbis1ICk7Ci0gICAgaWYgKHNrYiA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIHJ4X2RhdGEgY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7IAotICAgICAgICBpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikKLSAgICAgICAgICAgIHJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2tiX3Jlc2VydmUoIHNrYiwgMik7ICAgLyogQWxpZ24gSVAgb24gMTYgYnl0ZSAoVEJEIGNoZWNrIHRoaXMpKi8KKwkJaWYgKHRtcCA8IDApIHsKKwkJCURFQlVHKDAsCisJCQkgICAgICAicmF5X2NzIHJ4X2RhdGEgZnJhZ21lbnQgbGVuZ3RocyBkb24ndCBhZGQgdXBcbiIpOworCQkJbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeyAvKiBTaW5nbGUgdW5mcmFnbWVudGVkIHBhY2tldCAqLworCQl0b3RhbF9sZW4gPSByeF9sZW47CisJfQogCi0gICAgREVCVUcoNCwicmF5X2NzIHJ4X2RhdGEgdG90YWxfbGVuID0gJXgsIHJ4X2xlbiA9ICV4XG4iLHRvdGFsX2xlbixyeF9sZW4pOworCXNrYiA9IGRldl9hbGxvY19za2IodG90YWxfbGVuICsgNSk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCURFQlVHKDAsICJyYXlfY3MgcnhfZGF0YSBjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKKwkJbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpCisJCQlyZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgMik7CS8qIEFsaWduIElQIG9uIDE2IGJ5dGUgKFRCRCBjaGVjayB0aGlzKSAqLworCisJREVCVUcoNCwgInJheV9jcyByeF9kYXRhIHRvdGFsX2xlbiA9ICV4LCByeF9sZW4gPSAleFxuIiwgdG90YWxfbGVuLAorCSAgICAgIHJ4X2xlbik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogUmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3IgdGhlIHdob2xlIGRhbW4gcGFja2V0LiAqLwotICAgIHJ4X3B0ciA9IHNrYl9wdXQoIHNrYiwgdG90YWxfbGVuKTsKLSAgICAvKiBDb3B5IHRoZSB3aG9sZSBwYWNrZXQgdG8gc2tfYnVmZiAqLwotICAgIHJ4X3B0ciArPSBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciAmIFJYX0JVRkZfRU5ELCByeF9sZW4pOwotICAgIC8qIEdldCBzb3VyY2UgYWRkcmVzcyAqLworCS8qIFJlc2VydmUgZW5vdWdoIHJvb20gZm9yIHRoZSB3aG9sZSBkYW1uIHBhY2tldC4gKi8KKwlyeF9wdHIgPSBza2JfcHV0KHNrYiwgdG90YWxfbGVuKTsKKwkvKiBDb3B5IHRoZSB3aG9sZSBwYWNrZXQgdG8gc2tfYnVmZiAqLworCXJ4X3B0ciArPQorCSAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciAmIFJYX0JVRkZfRU5ELCByeF9sZW4pOworCS8qIEdldCBzb3VyY2UgYWRkcmVzcyAqLwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgb2Zmc2V0b2Yoc3RydWN0IG1hY19oZWFkZXIsIGFkZHJfMiksCi0JCQkJICAgICBsaW5rc3JjYWRkciwgRVRIX0FMRU4pOworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwKKwkJCQkJIG9mZnNldG9mKHN0cnVjdCBtYWNfaGVhZGVyLCBhZGRyXzIpLAorCQkJCQkgbGlua3NyY2FkZHIsIEVUSF9BTEVOKTsKICNlbmRpZgotICAgIC8qIE5vdywgZGVhbCB3aXRoIGVuY2Fwc3VsYXRpb24vdHJhbnNsYXRpb24vc25pZmZlciAqLwotICAgIGlmICghc25pZmZlcikgewotICAgICAgICBpZiAoIXRyYW5zbGF0ZSkgeyAKLSAgICAgICAgICAgIC8qIEVuY2Fwc3VsYXRlZCBldGhlcm5ldCwgc28ganVzdCBsb3Agb2ZmIDgwMi4xMSBNQUMgaGVhZGVyICovCisJLyogTm93LCBkZWFsIHdpdGggZW5jYXBzdWxhdGlvbi90cmFuc2xhdGlvbi9zbmlmZmVyICovCisJaWYgKCFzbmlmZmVyKSB7CisJCWlmICghdHJhbnNsYXRlKSB7CisJCQkvKiBFbmNhcHN1bGF0ZWQgZXRoZXJuZXQsIHNvIGp1c3QgbG9wIG9mZiA4MDIuMTEgTUFDIGhlYWRlciAqLwogLyogVEJEIHJlc2VydmUgICAgICAgICAgICBza2JfcmVzZXJ2ZSggc2tiLCBSWF9NQUNfSEVBREVSX0xFTkdUSCk7ICovCi0gICAgICAgICAgICBza2JfcHVsbCggc2tiLCBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBEbyB0cmFuc2xhdGlvbiAqLwotICAgICAgICAgICAgdW50cmFuc2xhdGUobG9jYWwsIHNrYiwgdG90YWxfbGVuKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsgIC8qIHNuaWZmZXIgbW9kZSwgc28ganVzdCBwYXNzIHdob2xlIHBhY2tldCAqLyAgfTsKKwkJCXNrYl9wdWxsKHNrYiwgUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCQl9IGVsc2UgeworCQkJLyogRG8gdHJhbnNsYXRpb24gKi8KKwkJCXVudHJhbnNsYXRlKGxvY2FsLCBza2IsIHRvdGFsX2xlbik7CisJCX0KKwl9IGVsc2UgeyAvKiBzbmlmZmVyIG1vZGUsIHNvIGp1c3QgcGFzcyB3aG9sZSBwYWNrZXQgKi8KKwl9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIE5vdyBwaWNrIHVwIHRoZSByZXN0IG9mIHRoZSBmcmFnbWVudHMgaWYgYW55ICovCi0gICAgdG1wID0gMTc7IAotICAgIGlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7Ci0gICAgICAgIHByY3NsaW5rID0gcHJjczsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHJ4X2RhdGEgaW4gZnJhZ21lbnQgbG9vcFxuIik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCi0gICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7Ci0gICAgICAgICAgICByeF9sZW4gPSAoKCByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pKQotICAgICAgICAgICAgICAgICYgUlhfQlVGRl9FTkQ7Ci0gICAgICAgICAgICBwa3RfYWRkciA9ICgoIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkKLSAgICAgICAgICAgICAgICAmIFJYX0JVRkZfRU5EOworCS8qIE5vdyBwaWNrIHVwIHRoZSByZXN0IG9mIHRoZSBmcmFnbWVudHMgaWYgYW55ICovCisJdG1wID0gMTc7CisJaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKKwkJcHJjc2xpbmsgPSBwcmNzOworCQlERUJVRygxLCAicmF5X2NzIHJ4X2RhdGEgaW4gZnJhZ21lbnQgbG9vcFxuIik7CisJCWRvIHsKKwkJCXByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCisJCQkgICAgKworCQkJICAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKwkJCXJ4X2xlbiA9CisJCQkgICAgKChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pCisJCQkgICAgICA8PCA4KQorCQkJICAgICArCisJCQkgICAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSkpCisJCQkgICAgJiBSWF9CVUZGX0VORDsKKwkJCXBrdF9hZGRyID0KKwkJCSAgICAoKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwKKwkJCSAgICAgIDgpCisJCQkgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkKKwkJCSAgICAmIFJYX0JVRkZfRU5EOwogCi0gICAgICAgICAgICByeF9wdHIgKz0gY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIsIHJ4X2xlbik7CisJCQlyeF9wdHIgKz0KKwkJCSAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciwgcnhfbGVuKTsKIAotICAgICAgICB9IHdoaWxlICh0bXAtLSAmJiAKLSAgICAgICAgICAgICAgICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpOwotICAgICAgICByZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOwotICAgIH0KKwkJfSB3aGlsZSAodG1wLS0gJiYKKwkJCSByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0KKwkJCSAweEZGKTsKKwkJcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKKwl9CiAKLSAgICBza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7Ci0gICAgbmV0aWZfcngoc2tiKTsKLSAgICBsb2NhbC0+c3RhdHMucnhfcGFja2V0cysrOwotICAgIGxvY2FsLT5zdGF0cy5yeF9ieXRlcyArPSB0b3RhbF9sZW47CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwluZXRpZl9yeChza2IpOworCWxvY2FsLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbG9jYWwtPnN0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX2xlbjsKIAotICAgIC8qIEdhdGhlciBzaWduYWwgc3RyZW5ndGggcGVyIGFkZHJlc3MgKi8KKwkvKiBHYXRoZXIgc2lnbmFsIHN0cmVuZ3RoIHBlciBhZGRyZXNzICovCiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgLyogRm9yIHRoZSBBY2Nlc3MgUG9pbnQgb3IgdGhlIG5vZGUgaGF2aW5nIHN0YXJ0ZWQgdGhlIGFkLWhvYyBuZXQKLSAgICAgKiBub3RlIDogYWQtaG9jIHdvcmsgb25seSBpbiBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBidXQgd2UKLSAgICAgKiBrbHVkZ2UgaW4gcmF5X2dldF93aXJlbGVzc19zdGF0cy4uLiAqLwotICAgIGlmKCFtZW1jbXAobGlua3NyY2FkZHIsIGxvY2FsLT5ic3NfaWQsIEVUSF9BTEVOKSkKLSAgICAgIHsKLQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotCS8qbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBub25lID8gKi8KLQlsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBzaWdsZXY7Ci0JLypsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBub25lID8gKi8KLQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9IDB4MjsKLSAgICAgIH0KLSAgICAvKiBOb3csIHVwZGF0ZSB0aGUgc3B5IHN0dWZmICovCi0gICAgewotCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQl3c3RhdHMubGV2ZWwgPSBzaWdsZXY7Ci0JLyogd3N0YXRzLm5vaXNlID0gbm9uZSA/ICovCi0JLyogd3N0YXRzLnF1YWwgPSBub25lID8gKi8KLQl3c3RhdHMudXBkYXRlZCA9IDB4MjsKLQkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KLQl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgbGlua3NyY2FkZHIsICZ3c3RhdHMpOwotICAgIH0KLSNlbmRpZgkvKiBXSVJFTEVTU19TUFkgKi8KKwkvKiBGb3IgdGhlIEFjY2VzcyBQb2ludCBvciB0aGUgbm9kZSBoYXZpbmcgc3RhcnRlZCB0aGUgYWQtaG9jIG5ldAorCSAqIG5vdGUgOiBhZC1ob2Mgd29yayBvbmx5IGluIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGJ1dCB3ZQorCSAqIGtsdWRnZSBpbiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzLi4uICovCisJaWYgKCFtZW1jbXAobGlua3NyY2FkZHIsIGxvY2FsLT5ic3NfaWQsIEVUSF9BTEVOKSkgeworCQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLworCQkvKmxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbm9uZSA/ICovCisJCWxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IHNpZ2xldjsKKwkJLypsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBub25lID8gKi8KKwkJbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSAweDI7CisJfQorCS8qIE5vdywgdXBkYXRlIHRoZSBzcHkgc3R1ZmYgKi8KKwl7CisJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKKwkJd3N0YXRzLmxldmVsID0gc2lnbGV2OworCQkvKiB3c3RhdHMubm9pc2UgPSBub25lID8gKi8KKwkJLyogd3N0YXRzLnF1YWwgPSBub25lID8gKi8KKwkJd3N0YXRzLnVwZGF0ZWQgPSAweDI7CisJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLworCQl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgbGlua3NyY2FkZHIsICZ3c3RhdHMpOworCX0KKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KIH0gLyogZW5kIHJ4X2RhdGEgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgdW50cmFuc2xhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIHsKLSAgICBzbmFwaGRyX3QgKnBzbmFwID0gKHNuYXBoZHJfdCAqKShza2ItPmRhdGEgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKnBtYWMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0gICAgX19iZTE2IHR5cGUgPSAqKF9fYmUxNiAqKXBzbmFwLT5ldGhlcnR5cGU7Ci0gICAgaW50IGRlbHRhOwotICAgIHN0cnVjdCBldGhoZHIgKnBldGg7Ci0gICAgVUNIQVIgc3JjYWRkcltBRERSTEVOXTsKLSAgICBVQ0hBUiBkZXN0YWRkcltBRERSTEVOXTsKLSAgICBzdGF0aWMgVUNIQVIgb3JnX2JyaWRnZVszXSA9IHswLCAwLCAweGY4fTsKLSAgICBzdGF0aWMgVUNIQVIgb3JnXzEwNDJbM10gPSB7MCwgMCwgMH07CisJc25hcGhkcl90ICpwc25hcCA9IChzbmFwaGRyX3QgKikgKHNrYi0+ZGF0YSArIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcG1hYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlfX2JlMTYgdHlwZSA9ICooX19iZTE2ICopIHBzbmFwLT5ldGhlcnR5cGU7CisJaW50IGRlbHRhOworCXN0cnVjdCBldGhoZHIgKnBldGg7CisJVUNIQVIgc3JjYWRkcltBRERSTEVOXTsKKwlVQ0hBUiBkZXN0YWRkcltBRERSTEVOXTsKKwlzdGF0aWMgVUNIQVIgb3JnX2JyaWRnZVszXSA9IHsgMCwgMCwgMHhmOCB9OworCXN0YXRpYyBVQ0hBUiBvcmdfMTA0MlszXSA9IHsgMCwgMCwgMCB9OwogCi0gICAgbWVtY3B5KGRlc3RhZGRyLCBpZWVlODAyMTFfZ2V0X0RBKHBtYWMpLCBBRERSTEVOKTsKLSAgICBtZW1jcHkoc3JjYWRkciwgaWVlZTgwMjExX2dldF9TQShwbWFjKSwgQUREUkxFTik7CisJbWVtY3B5KGRlc3RhZGRyLCBpZWVlODAyMTFfZ2V0X0RBKHBtYWMpLCBBRERSTEVOKTsKKwltZW1jcHkoc3JjYWRkciwgaWVlZTgwMjExX2dldF9TQShwbWFjKSwgQUREUkxFTik7CiAKICNpZmRlZiBQQ01DSUFfREVCVUcKLSAgICBpZiAocGNfZGVidWcgPiAzKSB7Ci0gICAgaW50IGk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBiZWZvcmUgdW50cmFuc2xhdGUiKTsKLSAgICBmb3IgKGk9MDtpPDY0O2krKykgCi0gICAgICAgIHByaW50aygiJTAyeCAiLHNrYi0+ZGF0YVtpXSk7Ci0gICAgcHJpbnRrKCJcbiIgS0VSTl9ERUJVRyAidHlwZSA9ICUwOHgsIHhzYXAgPSAlMDJ4JTAyeCUwMngsIG9yZyA9ICUwMngwMngwMnhcbiIsCi0gICAgICAgICAgIG50b2hzKHR5cGUpLAotCSAgIHBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwsCi0JICAgcHNuYXAtPm9yZ1swXSwgcHNuYXAtPm9yZ1sxXSwgcHNuYXAtPm9yZ1syXSk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInVudHJhbnNsYXRlIHNrYi0+ZGF0YSA9ICVwXG4iLHNrYi0+ZGF0YSk7Ci0gICAgfQorCWlmIChwY19kZWJ1ZyA+IDMpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYmVmb3JlIHVudHJhbnNsYXRlIik7CisJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQkJcHJpbnRrKCIlMDJ4ICIsIHNrYi0+ZGF0YVtpXSk7CisJCXByaW50aygiXG4iIEtFUk5fREVCVUcKKwkJICAgICAgICJ0eXBlID0gJTA4eCwgeHNhcCA9ICUwMnglMDJ4JTAyeCwgb3JnID0gJTAyeDAyeDAyeFxuIiwKKwkJICAgICAgIG50b2hzKHR5cGUpLCBwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsLAorCQkgICAgICAgcHNuYXAtPm9yZ1swXSwgcHNuYXAtPm9yZ1sxXSwgcHNuYXAtPm9yZ1syXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJ1bnRyYW5zbGF0ZSBza2ItPmRhdGEgPSAlcFxuIiwgc2tiLT5kYXRhKTsKKwl9CiAjZW5kaWYKIAotICAgIGlmIChwc25hcC0+ZHNhcCAhPSAweGFhIHx8IHBzbmFwLT5zc2FwICE9IDB4YWEgfHwgcHNuYXAtPmN0cmwgIT0gMykgewotICAgICAgICAvKiBub3QgYSBzbmFwIHR5cGUgc28gbGVhdmUgaXQgYWxvbmUgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIE5PVCBTTkFQICUwMnggJTAyeCAlMDJ4XG4iLAotCQlwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsKTsKKwlpZiAocHNuYXAtPmRzYXAgIT0gMHhhYSB8fCBwc25hcC0+c3NhcCAhPSAweGFhIHx8IHBzbmFwLT5jdHJsICE9IDMpIHsKKwkJLyogbm90IGEgc25hcCB0eXBlIHNvIGxlYXZlIGl0IGFsb25lICovCisJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgTk9UIFNOQVAgJTAyeCAlMDJ4ICUwMnhcbiIsCisJCSAgICAgIHBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwpOwogCi0gICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKLSAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgcGV0aC0+aF9wcm90byA9IGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIEl0cyBhIFNOQVAgKi8KLSAgICAgICAgaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfYnJpZGdlLCAzKSA9PSAwKSB7IC8qIEV0aGVySUkgYW5kIG51a2UgdGhlIExMQyAgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIEJyaWRnZSBlbmNhcFxuIik7Ci0gICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIAotICAgICAgICAgICAgICAgICsgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IHR5cGU7Ci0JfSBlbHNlIGlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnXzEwNDIsIDMpID09IDApIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG50b2hzKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVEhfUF9JUFg6Ci0gICAgICAgICAgICAgICAgY2FzZSBFVEhfUF9BQVJQOgotICAgICAgICAgICAgICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIElQWC9BQVJQXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwotICAgICAgICAgICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIGRlZmF1bHRcbiIpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIICsgCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKLSAgICAgICAgICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQl9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50aygicmF5X2NzIHVudHJhbnNsYXRlIHZlcnkgY29uZnVzZWQgYnkgcGFja2V0XG4iKTsKLSAgICAgICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOworCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQlwZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCX0gZWxzZSB7IC8qIEl0cyBhIFNOQVAgKi8KKwkJaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfYnJpZGdlLCAzKSA9PSAwKSB7CisJCS8qIEV0aGVySUkgYW5kIG51a2UgdGhlIExMQyAqLworCQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBCcmlkZ2UgZW5jYXBcbiIpOworCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSAorCQkJICAgICsgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47CisJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCX0gZWxzZSBpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ18xMDQyLCAzKSA9PSAwKSB7CisJCQlzd2l0Y2ggKG50b2hzKHR5cGUpKSB7CisJCQljYXNlIEVUSF9QX0lQWDoKKwkJCWNhc2UgRVRIX1BfQUFSUDoKKwkJCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBJUFgvQUFSUFxuIik7CisJCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOworCQkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQkJcGV0aC0+aF9wcm90byA9CisJCQkJICAgIGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgZGVmYXVsdFxuIik7CisJCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCArCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOworCQkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQkJcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludGsoInJheV9jcyB1bnRyYW5zbGF0ZSB2ZXJ5IGNvbmZ1c2VkIGJ5IHBhY2tldFxuIik7CisJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47CisJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCX0KIAl9Ci0gICAgfQogLyogVEJEIHJlc2VydmUgIHNrYl9yZXNlcnZlKHNrYiwgZGVsdGEpOyAqLwotICAgIHNrYl9wdWxsKHNrYiwgZGVsdGEpOwotICAgIERFQlVHKDMsInVudHJhbnNsYXRlIGFmdGVyIHNrYl9wdWxsKCVkKSwgc2tiLT5kYXRhID0gJXBcbiIsZGVsdGEsc2tiLT5kYXRhKTsKLSAgICBtZW1jcHkocGV0aC0+aF9kZXN0LCBkZXN0YWRkciwgQUREUkxFTik7Ci0gICAgbWVtY3B5KHBldGgtPmhfc291cmNlLCBzcmNhZGRyLCBBRERSTEVOKTsKKwlza2JfcHVsbChza2IsIGRlbHRhKTsKKwlERUJVRygzLCAidW50cmFuc2xhdGUgYWZ0ZXIgc2tiX3B1bGwoJWQpLCBza2ItPmRhdGEgPSAlcFxuIiwgZGVsdGEsCisJICAgICAgc2tiLT5kYXRhKTsKKwltZW1jcHkocGV0aC0+aF9kZXN0LCBkZXN0YWRkciwgQUREUkxFTik7CisJbWVtY3B5KHBldGgtPmhfc291cmNlLCBzcmNhZGRyLCBBRERSTEVOKTsKICNpZmRlZiBQQ01DSUFfREVCVUcKLSAgICBpZiAocGNfZGVidWcgPiAzKSB7Ci0gICAgaW50IGk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBhZnRlciB1bnRyYW5zbGF0ZToiKTsKLSAgICBmb3IgKGk9MDtpPDY0O2krKykKLSAgICAgICAgcHJpbnRrKCIlMDJ4ICIsc2tiLT5kYXRhW2ldKTsKLSAgICBwcmludGsoIlxuIik7Ci0gICAgfQorCWlmIChwY19kZWJ1ZyA+IDMpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYWZ0ZXIgdW50cmFuc2xhdGU6Iik7CisJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQkJcHJpbnRrKCIlMDJ4ICIsIHNrYi0+ZGF0YVtpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CiAjZW5kaWYKIH0gLyogZW5kIHVudHJhbnNsYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIHJlY2VpdmUgYnVmZmVyIHRvIFBDIG1lbW9yeS4KICAqIGRlc3QgICAgID0gZGVzdGluYXRpb24gYWRkcmVzcyBpbiBQQyBtZW1vcnkKICAqIHBrdF9hZGRyID0gc291cmNlIGFkZHJlc3MgaW4gcmVjZWl2ZSBidWZmZXIKICAqIGxlbiAgICAgID0gbGVuZ3RoIG9mIHBhY2tldCB0byBjb3B5CiAgKi8KLXN0YXRpYyBpbnQgY29weV9mcm9tX3J4X2J1ZmYocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBwa3RfYWRkciwgaW50IGxlbmd0aCkKK3N0YXRpYyBpbnQgY29weV9mcm9tX3J4X2J1ZmYocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBwa3RfYWRkciwKKwkJCSAgICAgaW50IGxlbmd0aCkKIHsKLSAgICBpbnQgd3JhcF9ieXRlcyA9IChwa3RfYWRkciArIGxlbmd0aCkgLSAoUlhfQlVGRl9FTkQgKyAxKTsKLSAgICBpZiAod3JhcF9ieXRlcyA8PSAwKQotICAgIHsKLSAgICAgICAgbWVtY3B5X2Zyb21pbyhkZXN0LGxvY2FsLT5ybWVtICsgcGt0X2FkZHIsbGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZSAvKiBQYWNrZXQgd3JhcHBlZCBpbiBjaXJjdWxhciBidWZmZXIgKi8KLSAgICB7Ci0gICAgICAgIG1lbWNweV9mcm9taW8oZGVzdCxsb2NhbC0+cm1lbStwa3RfYWRkcixsZW5ndGggLSB3cmFwX2J5dGVzKTsKLSAgICAgICAgbWVtY3B5X2Zyb21pbyhkZXN0ICsgbGVuZ3RoIC0gd3JhcF9ieXRlcywgbG9jYWwtPnJtZW0sIHdyYXBfYnl0ZXMpOwotICAgIH0KLSAgICByZXR1cm4gbGVuZ3RoOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmVsZWFzZV9mcmFnX2NoYWluKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqIHByY3MpCi17Ci0gICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7Ci0gICAgaW50IHRtcCA9IDE3OwotICAgIHVuc2lnbmVkIHJjc2luZGV4ID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisJaW50IHdyYXBfYnl0ZXMgPSAocGt0X2FkZHIgKyBsZW5ndGgpIC0gKFJYX0JVRkZfRU5EICsgMSk7CisJaWYgKHdyYXBfYnl0ZXMgPD0gMCkgeworCQltZW1jcHlfZnJvbWlvKGRlc3QsIGxvY2FsLT5ybWVtICsgcGt0X2FkZHIsIGxlbmd0aCk7CisJfSBlbHNlIHsgLyogUGFja2V0IHdyYXBwZWQgaW4gY2lyY3VsYXIgYnVmZmVyICovCiAKLSAgICB3aGlsZSAodG1wLS0pIHsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIixyY3NpbmRleCk7Ci0gICAgICAgICAgICBicmVhazsgICAgICAKLSAgICAgICAgfSAgIAotICAgICAgICBwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OwotICAgICAgICByY3NpbmRleCA9IHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKLSAgICB9Ci0gICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKKwkJbWVtY3B5X2Zyb21pbyhkZXN0LCBsb2NhbC0+cm1lbSArIHBrdF9hZGRyLAorCQkJICAgICAgbGVuZ3RoIC0gd3JhcF9ieXRlcyk7CisJCW1lbWNweV9mcm9taW8oZGVzdCArIGxlbmd0aCAtIHdyYXBfYnl0ZXMsIGxvY2FsLT5ybWVtLAorCQkJICAgICAgd3JhcF9ieXRlcyk7CisJfQorCXJldHVybiBsZW5ndGg7CiB9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfZnJhZ19jaGFpbihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpCit7CisJc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7CisJaW50IHRtcCA9IDE3OworCXVuc2lnbmVkIHJjc2luZGV4ID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisKKwl3aGlsZSAodG1wLS0pIHsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKKwkJaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIsCisJCQkgICAgICByY3NpbmRleCk7CisJCQlicmVhazsKKwkJfQorCQlwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OworCQlyY3NpbmRleCA9IHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKwl9CisJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKK30KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIERFQlVHKDAsInJheV9jcyBTdGFydGluZyBhdXRoZW50aWNhdGlvbi5cbiIpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGF1dGhlbnRpY2F0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCURFQlVHKDAsICJyYXlfY3MgU3RhcnRpbmcgYXV0aGVudGljYXRpb24uXG4iKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgYXV0aGVudGljYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KIAotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBpZiAoYnVpbGRfYXV0aF9mcmFtZShsb2NhbCwgbG9jYWwtPmJzc19pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7Ci0gICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZhdXRoZW50aWNhdGVfdGltZW91dDsKLSAgICB9Ci0gICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqMjsKLSAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBV0FJVElOR19SRVNQT05TRTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJaWYgKGJ1aWxkX2F1dGhfZnJhbWUobG9jYWwsIGxvY2FsLT5ic3NfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgeworCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7CisJfSBlbHNlIHsKKwkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmF1dGhlbnRpY2F0ZV90aW1lb3V0OworCX0KKwlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAqIDI7CisJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVdBSVRJTkdfUkVTUE9OU0U7CiB9IC8qIGVuZCBhdXRoZW50aWNhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcnhfYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKKwkJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCiB7Ci0gICAgVUNIQVIgYnVmZlsyNTZdOwotICAgIHN0cnVjdCByeF9tc2cgKm1zZyA9IChzdHJ1Y3QgcnhfbXNnICopYnVmZjsKLSAgICAKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJVUNIQVIgYnVmZlsyNTZdOworCXN0cnVjdCByeF9tc2cgKm1zZyA9IChzdHJ1Y3QgcnhfbXNnICopYnVmZjsKIAotICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7Ci0gICAgLyogaWYgd2UgYXJlIHRyeWluZyB0byBnZXQgYXV0aGVudGljYXRlZCAqLwotICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHJ4X2F1dGggdmFyPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgbXNnLT52YXJbMF0sbXNnLT52YXJbMV0sbXNnLT52YXJbMl0sbXNnLT52YXJbM10sbXNnLT52YXJbNF0sbXNnLT52YXJbNV0pOwotICAgICAgICBpZiAobXNnLT52YXJbMl0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXNwb25zZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWxkX2F1dGhfZnJhbWUgKGxvY2FsLCBtc2ctPm1hYy5hZGRyXzIsIE9QRU5fQVVUSF9SRVNQT05TRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IE5FRURfVE9fQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShsb2NhbC0+YXV0aF9pZCwgbXNnLT5tYWMuYWRkcl8yLCBBRERSTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgLyogSW5mcmFzdHJ1Y3R1cmUgbmV0d29yayAqLwotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBBV0FJVElOR19SRVNQT05TRSkgewotICAgICAgICAgICAgLyogVmVyaWZ5IGF1dGhlbnRpY2F0aW9uIHNlcXVlbmNlICMyIGFuZCBzdWNjZXNzICovCi0gICAgICAgICAgICBpZiAobXNnLT52YXJbMl0gPT0gMikgewotICAgICAgICAgICAgICAgIGlmICgobXNnLT52YXJbM10gfCBtc2ctPnZhcls0XSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBERUJVRygxLCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX0NPTVBMRVRFOwotICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGUobG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBVVRIRU5USUNBVEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwiQXV0aGVudGljYXRpb24gcmVmdXNlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9SRUZVU0VEOwotICAgICAgICAgICAgICAgICAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisKKwljb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgYnVmZiwgcGt0X2FkZHIsIHJ4X2xlbiAmIDB4ZmYpOworCS8qIGlmIHdlIGFyZSB0cnlpbmcgdG8gZ2V0IGF1dGhlbnRpY2F0ZWQgKi8KKwlpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7CisJCURFQlVHKDEsICJyYXlfY3MgcnhfYXV0aCB2YXI9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICBtc2ctPnZhclswXSwgbXNnLT52YXJbMV0sIG1zZy0+dmFyWzJdLCBtc2ctPnZhclszXSwKKwkJICAgICAgbXNnLT52YXJbNF0sIG1zZy0+dmFyWzVdKTsKKwkJaWYgKG1zZy0+dmFyWzJdID09IDEpIHsKKwkJCURFQlVHKDAsICJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXNwb25zZS5cbiIpOworCQkJaWYgKCFidWlsZF9hdXRoX2ZyYW1lCisJCQkgICAgKGxvY2FsLCBtc2ctPm1hYy5hZGRyXzIsIE9QRU5fQVVUSF9SRVNQT05TRSkpIHsKKwkJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBORUVEX1RPX0FVVEg7CisJCQkJbWVtY3B5KGxvY2FsLT5hdXRoX2lkLCBtc2ctPm1hYy5hZGRyXzIsCisJCQkJICAgICAgIEFERFJMRU4pOworCQkJfQorCQl9CisJfSBlbHNlIHsgLyogSW5mcmFzdHJ1Y3R1cmUgbmV0d29yayAqLworCisJCWlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gQVdBSVRJTkdfUkVTUE9OU0UpIHsKKwkJCS8qIFZlcmlmeSBhdXRoZW50aWNhdGlvbiBzZXF1ZW5jZSAjMiBhbmQgc3VjY2VzcyAqLworCQkJaWYgKG1zZy0+dmFyWzJdID09IDIpIHsKKwkJCQlpZiAoKG1zZy0+dmFyWzNdIHwgbXNnLT52YXJbNF0pID09IDApIHsKKwkJCQkJREVCVUcoMSwgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOworCQkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfQ09NUExFVEU7CisJCQkJCWFzc29jaWF0ZShsb2NhbCk7CisJCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9CisJCQkJCSAgICBBVVRIRU5USUNBVEVEOworCQkJCX0gZWxzZSB7CisJCQkJCURFQlVHKDAsICJBdXRoZW50aWNhdGlvbiByZWZ1c2VkXG4iKTsKKwkJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX1JFRlVTRUQ7CisJCQkJCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKKwkJCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0KKwkJCQkJICAgIFVOQVVUSEVOVElDQVRFRDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CiAKIH0gLyogZW5kIHJ4X2F1dGhlbnRpY2F0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBhc3NvY2lhdGUocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotICAgIGludCBjY3NpbmRleDsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBhc3NvY2lhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4qLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCi0gICAgeworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CisJaW50IGNjc2luZGV4OworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBhc3NvY2lhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQorCS8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4gKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSB7CiAvKiBUQkQgc2hvdWxkIG5ldmVyIGJlIGhlcmUgYnV0Li4uIHdoYXQgaWYgd2UgYXJlPyAqLwotICAgICAgICBERUJVRygxLCJyYXlfY3MgYXNzb2NpYXRlIC0gTm8gZnJlZSBjY3NcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIERFQlVHKDEsInJheV9jcyBTdGFydGluZyBhc3NvY2lhdGlvbiB3aXRoIGFjY2VzcyBwb2ludFxuIik7Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIC8qIGZpbGwgaW4gdGhlIENDUyAqLwotICAgIHdyaXRlYihDQ1NfU1RBUlRfQVNTT0NJQVRJT04sICZwY2NzLT5jbWQpOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJREVCVUcoMSwgInJheV9jcyBhc3NvY2lhdGUgLSBObyBmcmVlIGNjc1xuIik7CisJCXJldHVybjsKKwl9CisJREVCVUcoMSwgInJheV9jcyBTdGFydGluZyBhc3NvY2lhdGlvbiB3aXRoIGFjY2VzcyBwb2ludFxuIik7CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCS8qIGZpbGwgaW4gdGhlIENDUyAqLworCXdyaXRlYihDQ1NfU1RBUlRfQVNTT0NJQVRJT04sICZwY2NzLT5jbWQpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwgInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CiAKLSAgICAgICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWioyOwotICAgICAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7Ci0gICAgICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzbmlmZmVyKSBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMjsKKwkJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OworCQlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOworCQlyZXR1cm47CisJfQorCWlmICghc25pZmZlcikKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAogfSAvKiBlbmQgYXNzb2NpYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKK3N0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKIHsKIC8qICBVQ0hBUiBidWZmWzI1Nl07CiAgICAgc3RydWN0IHJ4X21zZyAqbXNnID0gKHN0cnVjdCByeF9tc2cgKilidWZmOwogKi8KLSAgICBERUJVRygwLCJEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkXG4iKTsKLSAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7Ci0gICAgLyogTmVlZCB0byByZWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gZGVwZW5kaW5nIG9uIHJlYXNvbiBjb2RlICovCisJREVCVUcoMCwgIkRlYXV0aGVudGljYXRpb24gZnJhbWUgcmVjZWl2ZWRcbiIpOworCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKKwkvKiBOZWVkIHRvIHJlYXV0aGVudGljYXRlIG9yIHJlam9pbiBkZXBlbmRpbmcgb24gcmVhc29uIGNvZGUgKi8KIC8qICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgYnVmZiwgcGt0X2FkZHIsIHJ4X2xlbiAmIDB4ZmYpOwogICovCiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGNsZWFyX2ludGVycnVwdChyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIHdyaXRlYigwLCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBIQ1NfSU5UUl9PRkZTRVQpOworCXdyaXRlYigwLCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBIQ1NfSU5UUl9PRkZTRVQpOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNkZWZpbmUgTUFYREFUQSAoUEFHRV9TSVpFIC0gODApCiAKIHN0YXRpYyBjaGFyICpjYXJkX3N0YXR1c1tdID0gewotICAgICJDYXJkIGluc2VydGVkIC0gdW5pbml0aWFsaXplZCIsICAgICAvKiAwICovCi0gICAgIkNhcmQgbm90IGRvd25sb2FkZWQiLCAgICAgICAgICAgICAgIC8qIDEgKi8KLSAgICAiV2FpdGluZyBmb3IgZG93bmxvYWQgcGFyYW1ldGVycyIsICAgLyogMiAqLwotICAgICJDYXJkIGRvaW5nIGFjcXVpc2l0aW9uIiwgICAgICAgICAgICAvKiAzICovCi0gICAgIkFjcXVpc2l0aW9uIGNvbXBsZXRlIiwgICAgICAgICAgICAgIC8qIDQgKi8KLSAgICAiQXV0aGVudGljYXRpb24gY29tcGxldGUiLCAgICAgICAgICAgLyogNSAqLwotICAgICJBc3NvY2lhdGlvbiBjb21wbGV0ZSIsICAgICAgICAgICAgICAvKiA2ICovCi0gICAgIj8/PyIsICI/Pz8iLCAiPz8/IiwgIj8/PyIsICAgICAgICAgIC8qIDcgOCA5IDEwIHVuZGVmaW5lZCAqLwotICAgICJDYXJkIGluaXQgZXJyb3IiLCAgICAgICAgICAgICAgICAgICAvKiAxMSAqLwotICAgICJEb3dubG9hZCBwYXJhbWV0ZXJzIGVycm9yIiwgICAgICAgICAvKiAxMiAqLwotICAgICI/Pz8iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMyAqLwotICAgICJBY3F1aXNpdGlvbiBmYWlsZWQiLCAgICAgICAgICAgICAgICAvKiAxNCAqLwotICAgICJBdXRoZW50aWNhdGlvbiByZWZ1c2VkIiwgICAgICAgICAgICAvKiAxNSAqLwotICAgICJBc3NvY2lhdGlvbiBmYWlsZWQiICAgICAgICAgICAgICAgICAvKiAxNiAqLworCSJDYXJkIGluc2VydGVkIC0gdW5pbml0aWFsaXplZCIsCS8qIDAgKi8KKwkiQ2FyZCBub3QgZG93bmxvYWRlZCIsCQkJLyogMSAqLworCSJXYWl0aW5nIGZvciBkb3dubG9hZCBwYXJhbWV0ZXJzIiwJLyogMiAqLworCSJDYXJkIGRvaW5nIGFjcXVpc2l0aW9uIiwJCS8qIDMgKi8KKwkiQWNxdWlzaXRpb24gY29tcGxldGUiLAkJCS8qIDQgKi8KKwkiQXV0aGVudGljYXRpb24gY29tcGxldGUiLAkJLyogNSAqLworCSJBc3NvY2lhdGlvbiBjb21wbGV0ZSIsCQkJLyogNiAqLworCSI/Pz8iLCAiPz8/IiwgIj8/PyIsICI/Pz8iLAkJLyogNyA4IDkgMTAgdW5kZWZpbmVkICovCisJIkNhcmQgaW5pdCBlcnJvciIsCQkJLyogMTEgKi8KKwkiRG93bmxvYWQgcGFyYW1ldGVycyBlcnJvciIsCQkvKiAxMiAqLworCSI/Pz8iLAkJCQkJLyogMTMgKi8KKwkiQWNxdWlzaXRpb24gZmFpbGVkIiwJCQkvKiAxNCAqLworCSJBdXRoZW50aWNhdGlvbiByZWZ1c2VkIiwJCS8qIDE1ICovCisJIkFzc29jaWF0aW9uIGZhaWxlZCIJCQkvKiAxNiAqLwogfTsKIAotc3RhdGljIGNoYXIgKm5ldHR5cGVbXSA9IHsiQWRob2MiLCAiSW5mcmEgIn07Ci1zdGF0aWMgY2hhciAqZnJhbWluZ1tdID0geyJFbmNhcHN1bGF0aW9uIiwgIlRyYW5zbGF0aW9uIn0KK3N0YXRpYyBjaGFyICpuZXR0eXBlW10gPSB7ICJBZGhvYyIsICJJbmZyYSAiIH07CitzdGF0aWMgY2hhciAqZnJhbWluZ1tdID0geyAiRW5jYXBzdWxhdGlvbiIsICJUcmFuc2xhdGlvbiIgfQorCiA7CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9jc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogLyogUHJpbnQgY3VycmVudCB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdmlhIG90aGVyIG1lYW5zCi0gKiBlZyBpZmNvbmZpZyAKKyAqIGVnIGlmY29uZmlnCiAgKi8KLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgIHJheV9kZXZfdCAqbG9jYWw7Ci0gICAgVUNIQVIgKnA7Ci0gICAgc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKnBmaDsKLSAgICBVQ0hBUiBjWzMzXTsKKwlpbnQgaTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXJheV9kZXZfdCAqbG9jYWw7CisJVUNIQVIgKnA7CisJc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKnBmaDsKKwlVQ0hBUiBjWzMzXTsKIAotICAgIGxpbmsgPSB0aGlzX2RldmljZTsKLSAgICBpZiAoIWxpbmspCi0gICAgCXJldHVybiAwOwotICAgIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7Ci0gICAgaWYgKCFkZXYpCi0gICAgCXJldHVybiAwOwotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBpZiAoIWxvY2FsKQotICAgIAlyZXR1cm4gMDsKKwlsaW5rID0gdGhpc19kZXZpY2U7CisJaWYgKCFsaW5rKQorCQlyZXR1cm4gMDsKKwlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIDA7CiAKLSAgICBzZXFfcHV0cyhtLCAiUmF5bGluayBXaXJlbGVzcyBMQU4gZHJpdmVyIHN0YXR1c1xuIik7Ci0gICAgc2VxX3ByaW50ZihtLCAiJXNcbiIsIHJjc2lkKTsKLSAgICAvKiBidWlsZCA0IGRvZXMgbm90IHJlcG9ydCB2ZXJzaW9uLCBhbmQgZmllbGQgaXMgMHg1NSBhZnRlciBtZW10ZXN0ICovCi0gICAgc2VxX3B1dHMobSwgIkZpcm13YXJlIHZlcnNpb24gICAgID0gIik7Ci0gICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKLSAgICAgICAgc2VxX3B1dHMobSwgIjQgLSBVc2UgZHVtcF9jaXMgZm9yIG1vcmUgZGV0YWlsc1xuIik7Ci0gICAgZWxzZQotICAgICAgICBzZXFfcHJpbnRmKG0sICIlMmQuJTAyZC4lMDJkXG4iLAotICAgICAgICAgICAgICAgICAgIGxvY2FsLT5md192ZXIsIGxvY2FsLT5md19ibGQsIGxvY2FsLT5md192YXIpOworCXNlcV9wdXRzKG0sICJSYXlsaW5rIFdpcmVsZXNzIExBTiBkcml2ZXIgc3RhdHVzXG4iKTsKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgcmNzaWQpOworCS8qIGJ1aWxkIDQgZG9lcyBub3QgcmVwb3J0IHZlcnNpb24sIGFuZCBmaWVsZCBpcyAweDU1IGFmdGVyIG1lbXRlc3QgKi8KKwlzZXFfcHV0cyhtLCAiRmlybXdhcmUgdmVyc2lvbiAgICAgPSAiKTsKKwlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQorCQlzZXFfcHV0cyhtLCAiNCAtIFVzZSBkdW1wX2NpcyBmb3IgbW9yZSBkZXRhaWxzXG4iKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIiUyZC4lMDJkLiUwMmRcbiIsCisJCQkgICBsb2NhbC0+ZndfdmVyLCBsb2NhbC0+ZndfYmxkLCBsb2NhbC0+ZndfdmFyKTsKIAotICAgIGZvciAoaT0wOyBpPDMyOyBpKyspIGNbaV0gPSBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyZW50X2Vzc19pZFtpXTsKLSAgICBjWzMyXSA9IDA7Ci0gICAgc2VxX3ByaW50ZihtLCAiJXMgbmV0d29yayBFU1NJRCA9IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICBuZXR0eXBlW2xvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZV0sIGMpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQljW2ldID0gbG9jYWwtPnNwYXJtLmI1LmFfY3VycmVudF9lc3NfaWRbaV07CisJY1szMl0gPSAwOworCXNlcV9wcmludGYobSwgIiVzIG5ldHdvcmsgRVNTSUQgPSBcIiVzXCJcbiIsCisJCSAgIG5ldHR5cGVbbG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlXSwgYyk7CiAKLSAgICBwID0gbG9jYWwtPmJzc19pZDsKLSAgICBzZXFfcHJpbnRmKG0sICJCU1NJRCAgICAgICAgICAgICAgICA9ICVwTVxuIiwgcCk7CisJcCA9IGxvY2FsLT5ic3NfaWQ7CisJc2VxX3ByaW50ZihtLCAiQlNTSUQgICAgICAgICAgICAgICAgPSAlcE1cbiIsIHApOwogCi0gICAgc2VxX3ByaW50ZihtLCAiQ291bnRyeSBjb2RlICAgICAgICAgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSk7CisJc2VxX3ByaW50ZihtLCAiQ291bnRyeSBjb2RlICAgICAgICAgPSAlZFxuIiwKKwkJICAgbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUpOwogCi0gICAgaSA9IGxvY2FsLT5jYXJkX3N0YXR1czsKLSAgICBpZiAoaSA8IDApIGkgPSAxMDsKLSAgICBpZiAoaSA+IDE2KSBpID0gMTA7Ci0gICAgc2VxX3ByaW50ZihtLCAiQ2FyZCBzdGF0dXMgICAgICAgICAgPSAlc1xuIiwgY2FyZF9zdGF0dXNbaV0pOworCWkgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7CisJaWYgKGkgPCAwKQorCQlpID0gMTA7CisJaWYgKGkgPiAxNikKKwkJaSA9IDEwOworCXNlcV9wcmludGYobSwgIkNhcmQgc3RhdHVzICAgICAgICAgID0gJXNcbiIsIGNhcmRfc3RhdHVzW2ldKTsKIAotICAgIHNlcV9wcmludGYobSwgIkZyYW1pbmcgbW9kZSAgICAgICAgID0gJXNcbiIsZnJhbWluZ1t0cmFuc2xhdGVdKTsKKwlzZXFfcHJpbnRmKG0sICJGcmFtaW5nIG1vZGUgICAgICAgICA9ICVzXG4iLCBmcmFtaW5nW3RyYW5zbGF0ZV0pOwogCi0gICAgc2VxX3ByaW50ZihtLCAiTGFzdCBwa3Qgc2lnbmFsIGx2bCAgPSAlZFxuIiwgbG9jYWwtPmxhc3RfcnNsKTsKKwlzZXFfcHJpbnRmKG0sICJMYXN0IHBrdCBzaWduYWwgbHZsICA9ICVkXG4iLCBsb2NhbC0+bGFzdF9yc2wpOwogCi0gICAgaWYgKGxvY2FsLT5iZWFjb25fcnhlZCkgewotCS8qIFB1bGwgc29tZSBmaWVsZHMgb3V0IG9mIGxhc3QgYmVhY29uIHJlY2VpdmVkICovCi0Jc2VxX3ByaW50ZihtLCAiQmVhY29uIEludGVydmFsICAgICAgPSAlZCBLdXNcbiIsCi0JCSAgICAgICBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzBdCi0JCSAgICAgICArIDI1NiAqIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMV0pOwotICAgIAotICAgIHAgPSBsb2NhbC0+bGFzdF9iY24uZWxlbWVudHM7Ci0gICAgaWYgKHBbMF0gPT0gQ19FU1NJRF9FTEVNRU5UX0lEKSBwICs9IHBbMV0gKyAyOwotICAgIGVsc2UgewotICAgICAgICBzZXFfcHJpbnRmKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IGVzc2lkIGVsZW1lbnQgaWQgPSAlZFxuIixwWzBdKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorCWlmIChsb2NhbC0+YmVhY29uX3J4ZWQpIHsKKwkJLyogUHVsbCBzb21lIGZpZWxkcyBvdXQgb2YgbGFzdCBiZWFjb24gcmVjZWl2ZWQgKi8KKwkJc2VxX3ByaW50ZihtLCAiQmVhY29uIEludGVydmFsICAgICAgPSAlZCBLdXNcbiIsCisJCQkgICBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzBdCisJCQkgICArIDI1NiAqIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMV0pOwogCi0gICAgaWYgKHBbMF0gPT0gQ19TVVBQT1JURURfUkFURVNfRUxFTUVOVF9JRCkgewotICAgICAgICBzZXFfcHV0cyhtLCAiU3VwcG9ydGVkIHJhdGUgY29kZXMgPSAiKTsKLSAgICAgICAgZm9yIChpPTI7IGk8cFsxXSArIDI7IGkrKykgCi0gICAgICAgICAgICBzZXFfcHJpbnRmKG0sICIweCUwMnggIiwgcFtpXSk7Ci0gICAgICAgIHNlcV9wdXRjKG0sICdcbicpOwotICAgICAgICBwICs9IHBbMV0gKyAyOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc2VxX3B1dHMobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgcmF0ZXMgZWxlbWVudFxuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwkJcCA9IGxvY2FsLT5sYXN0X2Jjbi5lbGVtZW50czsKKwkJaWYgKHBbMF0gPT0gQ19FU1NJRF9FTEVNRU5UX0lEKQorCQkJcCArPSBwWzFdICsgMjsKKwkJZWxzZSB7CisJCQlzZXFfcHJpbnRmKG0sCisJCQkJICAgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgZXNzaWQgZWxlbWVudCBpZCA9ICVkXG4iLAorCQkJCSAgIHBbMF0pOworCQkJcmV0dXJuIDA7CisJCX0KIAotCWlmIChwWzBdID09IENfRkhfUEFSQU1fU0VUX0VMRU1FTlRfSUQpIHsKLQkgICAgcGZoID0gKHN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICopcDsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIGR3ZWxsICAgICAgICAgICAgPSAlZCBLdXNcbiIsCi0JCQkgICBwZmgtPmR3ZWxsX3RpbWVbMF0gKyAyNTYgKiBwZmgtPmR3ZWxsX3RpbWVbMV0pOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3Agc2V0ICAgICAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3Bfc2V0KTsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIHBhdHRlcm4gICAgICAgICAgPSAlZCBcbiIsIHBmaC0+aG9wX3BhdHRlcm4pOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgaW5kZXggICAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3BfaW5kZXgpOwotCSAgICBwICs9IHBbMV0gKyAyOworCQlpZiAocFswXSA9PSBDX1NVUFBPUlRFRF9SQVRFU19FTEVNRU5UX0lEKSB7CisJCQlzZXFfcHV0cyhtLCAiU3VwcG9ydGVkIHJhdGUgY29kZXMgPSAiKTsKKwkJCWZvciAoaSA9IDI7IGkgPCBwWzFdICsgMjsgaSsrKQorCQkJCXNlcV9wcmludGYobSwgIjB4JTAyeCAiLCBwW2ldKTsKKwkJCXNlcV9wdXRjKG0sICdcbicpOworCQkJcCArPSBwWzFdICsgMjsKKwkJfSBlbHNlIHsKKwkJCXNlcV9wdXRzKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IHJhdGVzIGVsZW1lbnRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAocFswXSA9PSBDX0ZIX1BBUkFNX1NFVF9FTEVNRU5UX0lEKSB7CisJCQlwZmggPSAoc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKilwOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIGR3ZWxsICAgICAgICAgICAgPSAlZCBLdXNcbiIsCisJCQkJICAgcGZoLT5kd2VsbF90aW1lWzBdICsKKwkJCQkgICAyNTYgKiBwZmgtPmR3ZWxsX3RpbWVbMV0pOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIHNldCAgICAgICAgICAgICAgPSAlZCBcbiIsCisJCQkJICAgcGZoLT5ob3Bfc2V0KTsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBwYXR0ZXJuICAgICAgICAgID0gJWQgXG4iLAorCQkJCSAgIHBmaC0+aG9wX3BhdHRlcm4pOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIGluZGV4ICAgICAgICAgICAgPSAlZCBcbiIsCisJCQkJICAgcGZoLT5ob3BfaW5kZXgpOworCQkJcCArPSBwWzFdICsgMjsKKwkJfSBlbHNlIHsKKwkJCXNlcV9wdXRzKG0sCisJCQkJICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IEZIIHBhcmFtIGVsZW1lbnRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlzZXFfcHV0cyhtLCAiTm8gYmVhY29ucyByZWNlaXZlZFxuIik7CiAJfQotCWVsc2UgewotCSAgICBzZXFfcHV0cyhtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBGSCBwYXJhbSBlbGVtZW50XG4iKTsKLQkgICAgcmV0dXJuIDA7Ci0JfQotICAgIH0gZWxzZSB7Ci0Jc2VxX3B1dHMobSwgIk5vIGJlYWNvbnMgcmVjZWl2ZWRcbiIpOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByYXlfY3NfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMjY4NCw3NCArMjgwNiw3NyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXlfY3NfcHJvY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSByYXlfY3NfcHJvY19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSByYXlfY3NfcHJvY19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKICNlbmRpZgogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCBidWlsZF9hdXRoX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgYXV0aF90eXBlKQogewotICAgIGludCBhZGRyOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsKLSAgICBpbnQgY2NzaW5kZXg7CisJaW50IGFkZHI7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OworCWludCBjY3NpbmRleDsKIAotICAgIC8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4gKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfdHhfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHNlbmQgYXV0aGVudGljYXRlIC0gTm8gZnJlZSB0eCBjY3NcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCS8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4gKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfdHhfY2NzKGxvY2FsKSkgPCAwKSB7CisJCURFQlVHKDEsICJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGUgLSBObyBmcmVlIHR4IGNjc1xuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwogCi0gICAgLyogQWRkcmVzcyBpbiBjYXJkIHNwYWNlICovCi0gICAgYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKLSAgICAvKiBmaWxsIGluIHRoZSBDQ1MgKi8KLSAgICB3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYihhZGRyID4+IDgsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyKTsKLSAgICB3cml0ZWIoMHgyMCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIgKyAxKTsKLSAgICB3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9NU0IsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoKTsKLSAgICB3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9MU0IscGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGggKyAxKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7CisJLyogQWRkcmVzcyBpbiBjYXJkIHNwYWNlICovCisJYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKKwkvKiBmaWxsIGluIHRoZSBDQ1MgKi8KKwl3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOworCXdyaXRlYihhZGRyID4+IDgsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyKTsKKwl3cml0ZWIoMHgyMCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIgKyAxKTsKKwl3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9NU0IsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoKTsKKwl3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9MU0IsCisJICAgICAgIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoICsgMSk7CisJd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOwogCi0gICAgcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOwotICAgIC8qIGZpbGwgaW4gdGhlIG1hYyBoZWFkZXIgKi8KLSAgICB3cml0ZWIoUFJPVE9DT0xfVkVSIHwgQVVUSEVOVElDX1RZUEUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7Ci0gICAgd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOworCS8qIGZpbGwgaW4gdGhlIG1hYyBoZWFkZXIgKi8KKwl3cml0ZWIoUFJPVE9DT0xfVkVSIHwgQVVUSEVOVElDX1RZUEUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7CisJd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CiAKLSAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGRlc3QsIEFERFJMRU4pOwotICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOwotICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CisJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBkZXN0LCBBRERSTEVOKTsKKwltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKKwltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOwogCi0gICAgLyogRmlsbCBpbiBtc2cgYm9keSB3aXRoIHByb3RvY29sIDAwIDAwLCBzZXF1ZW5jZSAwMSAwMCAsc3RhdHVzIDAwIDAwICovCi0gICAgbWVtc2V0X2lvKHB0eC0+dmFyLCAwLCA2KTsKLSAgICB3cml0ZWIoYXV0aF90eXBlICYgMHhmZiwgcHR4LT52YXIgKyAyKTsKKwkvKiBGaWxsIGluIG1zZyBib2R5IHdpdGggcHJvdG9jb2wgMDAgMDAsIHNlcXVlbmNlIDAxIDAwICxzdGF0dXMgMDAgMDAgKi8KKwltZW1zZXRfaW8ocHR4LT52YXIsIDAsIDYpOworCXdyaXRlYihhdXRoX3R5cGUgJiAweGZmLCBwdHgtPnZhciArIDIpOwogCi0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAwOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwKKwkJICAgICAgInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7CiB9IC8qIEVuZCBidWlsZF9hdXRoX2ZyYW1lICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgcmF5Y3Nfd3JpdGUoY29uc3QgY2hhciAqbmFtZSwgd3JpdGVfcHJvY190ICp3LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqIGVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRlJFRyB8IFNfSVdVU1IsIE5VTEwpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPQorCSAgICBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGUkVHIHwgU19JV1VTUiwgTlVMTCk7CiAJaWYgKGVudHJ5KSB7CiAJCWVudHJ5LT53cml0ZV9wcm9jID0gdzsKIAkJZW50cnktPmRhdGEgPSBkYXRhOwogCX0KIH0KIAotc3RhdGljIGludCB3cml0ZV9lc3NpZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgd3JpdGVfZXNzaWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBjaGFyIHByb2NfZXNzaWRbMzNdOwogCWludCBsZW4gPSBjb3VudDsKQEAgLTI3NjUsNyArMjg5MCw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2ludChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgd3JpdGVfaW50KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19udW1iZXJbMTBdOwogCWNoYXIgKnA7CkBAIC0yNzg1LDcgKzI5MTEsNyBAQAogCQl1bnNpZ25lZCBpbnQgYyA9ICpwIC0gJzAnOwogCQlpZiAoYyA+IDkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbnIgPSBucioxMCArIGM7CisJCW5yID0gbnIgKiAxMCArIGM7CiAJCXArKzsKIAl9IHdoaWxlICgtLWxlbik7CiAJKihpbnQgKilkYXRhID0gbnI7CkBAIC0yNzk3LDU1ICsyOTIzLDU4IEBACiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMWE2LCAweDAwMDApLAogCVBDTUNJQV9ERVZJQ0VfTlVMTCwKIH07CisKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCByYXlfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHJheV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5kcnYJCT0gewotCQkubmFtZQk9ICJyYXlfY3MiLAotCX0sCi0JLnByb2JlCQk9IHJheV9wcm9iZSwKLQkucmVtb3ZlCQk9IHJheV9kZXRhY2gsCi0JLmlkX3RhYmxlICAgICAgID0gcmF5X2lkcywKLQkuc3VzcGVuZAk9IHJheV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcmF5X3Jlc3VtZSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkubmFtZSA9ICJyYXlfY3MiLAorCQl9LAorCS5wcm9iZSA9IHJheV9wcm9iZSwKKwkucmVtb3ZlID0gcmF5X2RldGFjaCwKKwkuaWRfdGFibGUgPSByYXlfaWRzLAorCS5zdXNwZW5kID0gcmF5X3N1c3BlbmQsCisJLnJlc3VtZSA9IHJheV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3JheV9jcyh2b2lkKQogewotICAgIGludCByYzsKLSAgICAKLSAgICBERUJVRygxLCAiJXNcbiIsIHJjc2lkKTsKLSAgICByYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOwotICAgIERFQlVHKDEsICJyYXlsaW5rIGluaXRfbW9kdWxlIHJlZ2lzdGVyX3BjbWNpYV9kcml2ZXIgcmV0dXJucyAweCV4XG4iLHJjKTsKKwlpbnQgcmM7CisKKwlERUJVRygxLCAiJXNcbiIsIHJjc2lkKTsKKwlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOworCURFQlVHKDEsICJyYXlsaW5rIGluaXRfbW9kdWxlIHJlZ2lzdGVyX3BjbWNpYV9kcml2ZXIgcmV0dXJucyAweCV4XG4iLAorCSAgICAgIHJjKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0gICAgcHJvY19ta2RpcigiZHJpdmVyL3JheV9jcyIsIE5VTEwpOworCXByb2NfbWtkaXIoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKIAotICAgIHByb2NfY3JlYXRlKCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIDAsIE5VTEwsICZyYXlfY3NfcHJvY19mb3BzKTsKLSAgICByYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIHdyaXRlX2Vzc2lkLCBOVUxMKTsKLSAgICByYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIHdyaXRlX2ludCwgJm5ldF90eXBlKTsKLSAgICByYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCB3cml0ZV9pbnQsICZ0cmFuc2xhdGUpOworCXByb2NfY3JlYXRlKCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIDAsIE5VTEwsICZyYXlfY3NfcHJvY19mb3BzKTsKKwlyYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIHdyaXRlX2Vzc2lkLCBOVUxMKTsKKwlyYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIHdyaXRlX2ludCwgJm5ldF90eXBlKTsKKwlyYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCB3cml0ZV9pbnQsICZ0cmFuc2xhdGUpOwogI2VuZGlmCi0gICAgaWYgKHRyYW5zbGF0ZSAhPSAwKSB0cmFuc2xhdGUgPSAxOwotICAgIHJldHVybiAwOworCWlmICh0cmFuc2xhdGUgIT0gMCkKKwkJdHJhbnNsYXRlID0gMTsKKwlyZXR1cm4gMDsKIH0gLyogaW5pdF9yYXlfY3MgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yYXlfY3Modm9pZCkKIHsKLSAgICBERUJVRygwLCAicmF5X2NzOiBjbGVhbnVwX21vZHVsZVxuIik7CisJREVCVUcoMCwgInJheV9jczogY2xlYW51cF9tb2R1bGVcbiIpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKICNlbmRpZgogCi0gICAgcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOwogfSAvKiBleGl0X3JheV9jcyAqLwogCiBtb2R1bGVfaW5pdChpbml0X3JheV9jcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggODJhZjIxZS4uZGI5MWRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtMjUyNCw2ICsyNTI0LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHNhbWUgYXMgcm5kaXNfbmV0ZGV2X29wcyBidXQgd2l0aCBsb2NhbCBtdWx0aWNhc3QgaGFuZGxlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc193ZXh0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHJuZGlzX3dleHRfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogCiBzdGF0aWMgaW50IHJuZGlzX3dleHRfYmluZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewpAQCAtMjU1OSw3ICsyNTcwLDggQEAKIAkgKiBybmRpc19ob3N0IHdhbnRzIHRvIGF2b2lkIGFsbCBPSUQgYXMgbXVjaCBhcyBwb3NzaWJsZQogCSAqIHNvIGRvIHByb21pc2MvbXVsdGljYXN0IGhhbmRsaW5nIGluIHJuZGlzX3dleHQuCiAJICovCi0JdXNiZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHJuZGlzX3dleHRfc2V0X211bHRpY2FzdF9saXN0OworCXVzYmRldi0+bmV0LT5uZXRkZXZfb3BzID0gJnJuZGlzX3dleHRfbmV0ZGV2X29wczsKKwogCXRtcCA9IFJORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVEIHwgUk5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUOwogCXJldHZhbCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IGIwODQ4MjU5Li4wZjA4NzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCkBAIC0xMTQsOSArMTE0LDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCmluZGV4IDcyYWMzMWMuLmVjM2IwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKQEAgLTQ4LDggKzQ4LDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwMjAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMGMKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKaW5kZXggZWI4Mjg2MC4uMjc2YTgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwpAQCAtMTE0LDkgKzExNCw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAppbmRleCAxN2EwYzljLi5jZTJmMDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCkBAIC01OSw4ICs1OSw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMjAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDQwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCmluZGV4IDI3MDY5MWEuLjllNjMwZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTIwNCw5ICsyMDQsNiBAQAogewogCXUxNiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC0yMDA3LDYgKzIwMDQsOCBAQAogCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAwZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDFhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCS8qIENOZXQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDkwMjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCiAJLyogQ29uY2VwdHJvbmljICovCiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAogCS8qIEQtTElOSyAqLwpAQCAtMjAzMSwxNCArMjAzMCwyMCBAQAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjU3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHg5MDIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCS8qIFNhZ2VtICovCisJeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDRiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAogCS8qIFNpZW1lbnMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNjgxLCAweDNjMDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCiAJLyogU01DICovCiAJeyBVU0JfREVWSUNFKDB4MDcwNywgMHhlZTEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAogCS8qIFNwYWlyb24gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTRiLCAweDAxMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJLyogU1VSRUNPTSAqLworCXsgVVNCX0RFVklDRSgweDA3NjksIDB4MTFmMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKIAkvKiBUcnVzdCAqLwogCXsgVVNCX0RFVklDRSgweDBlYjAsIDB4OTAyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwkvKiBWVGVjaCAqLworCXsgVVNCX0RFVklDRSgweDBmODgsIDB4MzAxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKIAkvKiBaaW53ZWxsICovCiAJeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjYwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCmluZGV4IGFmY2UwZTAuLjViYzQ2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKQEAgLTU5LDggKzU5LDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAwNmEKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwNjAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCmluZGV4IGRjZGNlN2YuLjA3ZDM3OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCkBAIC00MzUsMTEgKzQzNSwxMiBAQAogCWlmIChpbmRleCA+PSBkZWJ1Zy0+X19uYW1lLndvcmRfY291bnQpCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAkJCQkJCQkJXAorCWluZGV4ICs9IChkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZSAvCQkJXAorCQkgIGRlYnVnLT5fX25hbWUud29yZF9zaXplKTsJCQlcCisJCQkJCQkJCVwKIAlpZiAoZGVidWctPl9fbmFtZS5mbGFncyAmIFJUMlgwMERFQlVHRlNfT0ZGU0VUKQkJXAogCQlpbmRleCAqPSBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZTsJCVwKIAkJCQkJCQkJXAotCWluZGV4ICs9IGRlYnVnLT5fX25hbWUud29yZF9iYXNlOwkJCVwKLQkJCQkJCQkJXAogCWRlYnVnLT5fX25hbWUucmVhZChpbnRmLT5ydDJ4MDBkZXYsIGluZGV4LCAmdmFsdWUpOwlcCiAJCQkJCQkJCVwKIAlzaXplID0gc3ByaW50ZihsaW5lLCBfX2Zvcm1hdCwgdmFsdWUpOwkJCVwKQEAgLTQ3NiwxMSArNDc3LDEyIEBACiAJc2l6ZSA9IHN0cmxlbihsaW5lKTsJCQkJCVwKIAl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGxpbmUsIE5VTEwsIDApOwkJCVwKIAkJCQkJCQkJXAorCWluZGV4ICs9IChkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZSAvCQkJXAorCQkgIGRlYnVnLT5fX25hbWUud29yZF9zaXplKTsJCQlcCisJCQkJCQkJCVwKIAlpZiAoZGVidWctPl9fbmFtZS5mbGFncyAmIFJUMlgwMERFQlVHRlNfT0ZGU0VUKQkJXAogCQlpbmRleCAqPSBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZTsJCVwKIAkJCQkJCQkJXAotCWluZGV4ICs9IGRlYnVnLT5fX25hbWUud29yZF9iYXNlOwkJCVwKLQkJCQkJCQkJXAogCWRlYnVnLT5fX25hbWUud3JpdGUoaW50Zi0+cnQyeDAwZGV2LCBpbmRleCwgdmFsdWUpOwlcCiAJCQkJCQkJCVwKIAkqb2Zmc2V0ICs9IHNpemU7CQkJCQlcCkBAIC01NDUsOSArNTQ3LDkgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlibG9iLT5kYXRhID0gZGF0YTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImRyaXZlcjogJXNcbiIsIGludGYtPnJ0MngwMGRldi0+b3BzLT5uYW1lKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInZlcnNpb246ICVzXG4iLCBEUlZfVkVSU0lPTik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjb21waWxlZDogJXMgJXNcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJkcml2ZXI6XHQlc1xuIiwgaW50Zi0+cnQyeDAwZGV2LT5vcHMtPm5hbWUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAidmVyc2lvbjpcdCVzXG4iLCBEUlZfVkVSU0lPTik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjb21waWxlZDpcdCVzICVzXG4iLCBfX0RBVEVfXywgX19USU1FX18pOwogCWJsb2ItPnNpemUgPSBzdHJsZW4oYmxvYi0+ZGF0YSk7CiAKIAlyZXR1cm4gZGVidWdmc19jcmVhdGVfYmxvYihuYW1lLCBTX0lSVVNSLCBpbnRmLT5kcml2ZXJfZm9sZGVyLCBibG9iKTsKQEAgLTU2OCwxNCArNTcwLDI3IEBACiAJCXJldHVybiBOVUxMOwogCiAJYmxvYi0+ZGF0YSA9IGRhdGE7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJydCBjaGlwOiAlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmYgY2hpcDogJTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJmKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJldmlzaW9uOiUwOHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZXYpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicnQgY2hpcDpcdCUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5ydCk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZiBjaGlwOlx0JTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJmKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJldmlzaW9uOlx0JTA4eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJldik7CiAJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJcbiIpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY3NyIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5jc3Iud29yZF9jb3VudCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJlZXByb20gbGVuZ3RoOiAlZFxuIiwgZGVidWctPmVlcHJvbS53b3JkX2NvdW50KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImJicCBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+YmJwLndvcmRfY291bnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmYgbGVuZ3RoOiAlZFxuIiwgZGVidWctPnJmLndvcmRfY291bnQpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmVnaXN0ZXJcdGJhc2VcdHdvcmRzXHR3b3Jkc2l6ZVxuIik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjc3JcdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+Y3NyLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5jc3Iud29yZF9jb3VudCwKKwkJCWRlYnVnLT5jc3Iud29yZF9zaXplKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImVlcHJvbVx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5lZXByb20ud29yZF9iYXNlLAorCQkJZGVidWctPmVlcHJvbS53b3JkX2NvdW50LAorCQkJZGVidWctPmVlcHJvbS53b3JkX3NpemUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiYmJwXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPmJicC53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+YmJwLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+YmJwLndvcmRfc2l6ZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZlx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5yZi53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+cmYud29yZF9jb3VudCwKKwkJCWRlYnVnLT5yZi53b3JkX3NpemUpOwogCWJsb2ItPnNpemUgPSBzdHJsZW4oYmxvYi0+ZGF0YSk7CiAKIAlyZXR1cm4gZGVidWdmc19jcmVhdGVfYmxvYihuYW1lLCBTX0lSVVNSLCBpbnRmLT5kcml2ZXJfZm9sZGVyLCBibG9iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCmluZGV4IDkyMjNhNmQuLjdlYjVjZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwpAQCAtMzAyLDExICszMDIsNiBAQAogCSAgICBQRVJDRU5UQUdFKHF1YWwtPnJ4X3N1Y2Nlc3MsIHF1YWwtPnJ4X2ZhaWxlZCArIHF1YWwtPnJ4X3N1Y2Nlc3MpOwogCWxpbmstPnR4X3BlcmNlbnRhZ2UgPQogCSAgICBQRVJDRU5UQUdFKHF1YWwtPnR4X3N1Y2Nlc3MsIHF1YWwtPnR4X2ZhaWxlZCArIHF1YWwtPnR4X3N1Y2Nlc3MpOwotCi0JcXVhbC0+cnhfc3VjY2VzcyA9IDA7Ci0JcXVhbC0+cnhfZmFpbGVkID0gMDsKLQlxdWFsLT50eF9zdWNjZXNzID0gMDsKLQlxdWFsLT50eF9mYWlsZWQgPSAwOwogfQogCiBpbnQgcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGludCByc3NpKQpAQCAtMzkyLDYgKzM4NywxNiBAQAogCQlydDJ4MDBsaW5rX2FudGVubmFfcmVzZXQocnQyeDAwZGV2KTsKIH0KIAordm9pZCBydDJ4MDBsaW5rX3Jlc2V0X3F1YWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJcXVhbC0+cnhfc3VjY2VzcyA9IDA7CisJcXVhbC0+cnhfZmFpbGVkID0gMDsKKwlxdWFsLT50eF9zdWNjZXNzID0gMDsKKwlxdWFsLT50eF9mYWlsZWQgPSAwOworfQorCiBzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX3R1bmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KQEAgLTQ0OCw2ICs0NTMsMTEgQEAKIAlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHkocnQyeDAwZGV2KTsKIAogCS8qCisJICogUmVzZXQgdGhlIHF1YWxpdHkgY291bnRlcnMgd2hpY2ggcmVjb3VudGVkIGR1cmluZyBlYWNoIHBlcmlvZC4KKwkgKi8KKwlydDJ4MDBsaW5rX3Jlc2V0X3F1YWwocnQyeDAwZGV2KTsKKworCS8qCiAJICogSW5jcmVhc2UgdHVuZXIgY291bnRlciwgYW5kIHJlc2NoZWR1bGUgdGhlIG5leHQgbGluayB0dW5lciBydW4uCiAJICovCiAJbGluay0+Y291bnQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCmluZGV4IDBiZTE0N2YuLjJjYThiN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwpAQCAtMTIzLDkgKzEyMyw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCmluZGV4IDJmOTdmZWUuLjQxZTg5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaApAQCAtNTAsOCArNTAsOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDEwMAogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA4MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IDY1MjFkYWMuLjI0ZmRmZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtMTIyLDkgKzEyMiw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTIyNDEsMTMgKzIyMzgsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotLyoKLSAqIE1hYzgwMjExIGRlbWFuZHMgZ2V0X3RzZiBtdXN0IGJlIGF0b21pYy4KLSAqIFRoaXMgaXMgbm90IHBvc3NpYmxlIGZvciBydDczdXNiIHNpbmNlIGFsbCByZWdpc3RlciBhY2Nlc3MKLSAqIGZ1bmN0aW9ucyByZXF1aXJlIHNsZWVwaW5nLiBVbnRpbGwgbWFjODAyMTEgbm8gbG9uZ2VyIG5lZWRzCi0gKiBnZXRfdHNmIHRvIGJlIGF0b21pYywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuCi0gKi8KIHN0YXRpYyB1NjQgcnQ3M3VzYl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKQEAgLTIyNjEsOSArMjI1MSw2IEBACiAKIAlyZXR1cm4gdHNmOwogfQotI2Vsc2UKLSNkZWZpbmUgcnQ3M3VzYl9nZXRfdHNmCU5VTEwKLSNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnQ3M3VzYl9tYWM4MDIxMV9vcHMgPSB7CiAJLnR4CQkJPSBydDJ4MDBtYWNfdHgsCkBAIC0yMzU0LDcgKzIzNDEsMTggQEAKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0NzN1c2JfZGV2aWNlX3RhYmxlW10gPSB7CiAJLyogQWJvQ29tICovCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFiKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFlKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIEFMICovCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwkvKiBBbWlnbyAqLworCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4OTAyMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGViMCwgMHg5MDIxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwkvKiBBTUlUICAqLworCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogQXNrZXkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIEFTVVMgKi8KQEAgLTIzNjcsNiArMjM2NSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MDVjKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBCaWxsaW9udG9uICovCiAJeyBVU0JfREVWSUNFKDB4MTYzMSwgMHhjMDE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwOGRkLCAweDAxMjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIEJ1ZmZhbG8gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBmNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCkBAIC0yMzgyLDYgKzIzODEsMTEgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwkvKiBFZGltYXggKi8KKwl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDczMTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzYxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJLyogRW5HZW5pdXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDM3MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIEdlbXRlayAqLwogCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAwNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogR2lnYWJ5dGUgKi8KQEAgLTI0MDIsMjIgKzI0MDYsMzQgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweGE4NjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4YTg3NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUmFsaW5rICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTNkKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjY3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUWNvbSAqLwogCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjE5NiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjI5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMzgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIFNhbXN1bmcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDQ0NzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIFNlbmFvICovCiAJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg3MTAwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBTaXRlY29tICovCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHg5NzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJmKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDkwYWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4OTcxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogU3VyZWNvbSAqLwogCXsgVVNCX0RFVklDRSgweDA3NjksIDB4MzFmMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJLyogUGhpbGlwcyAqLworCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MjAwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUGxhbmV4ICovCiAJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiNTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIFpjb20gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIFp5WEVMICovCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDE1KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCmluZGV4IDgzNGIyOGNlLi5jODAxNmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTUwLDggKzUwLDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwODAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKaW5kZXggODJiZDQ3ZS4uZmQ4MTg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwpAQCAtNDgsNiArNDgsMTAgQEAKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE4OSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxOTcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTk4KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKKwkvKiBTdXJlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwNzY5LCAweDExRjIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCisJLyogTG9naXRlY2ggKi8KKwl7VVNCX0RFVklDRSgweDA3ODksIDB4MDEwQyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAkvKiBOZXRnZWFyICovCiAJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDYxMDApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCiAJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDZhMDApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCkBAIC01Nyw4ICs2MSwxNiBAQAogCS8qIFNpdGVjb20gKi8KIAl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAwZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAyOCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCisJLyogU3BoYWlyb24gQWNjZXNzIFN5c3RlbXMgR21iSCAqLworCXtVU0JfREVWSUNFKDB4MTE0QiwgMHgwMTUwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCS8qIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKi8KKwl7VVNCX0RFVklDRSgweDEzNzEsIDB4OTQwMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAkvKiBBYm9jb20gKi8KIAl7VVNCX0RFVklDRSgweDEzZDEsIDB4YWJlNiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwkvKiBRY29tICovCisJe1VTQl9ERVZJQ0UoMHgxOEU4LCAweDYyMzIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCisJLyogQWlyTGl2ZSAqLworCXtVU0JfREVWSUNFKDB4MWI3NSwgMHg4MTg3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCAzOWY1MjVlLi5mOTUyMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTI0NzcsNiArMjQ3NywxNiBAQAogCS5yZWJ1aWxkID0gc3RyaXBfcmVidWlsZF9oZWFkZXIsCiB9OwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3RyaXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCT0gc3RyaXBfb3Blbl9sb3csCisJLm5kb19zdG9wIAk9IHN0cmlwX2Nsb3NlX2xvdywKKwkubmRvX3N0YXJ0X3htaXQgPSBzdHJpcF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gc3RyaXBfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZ2V0X3N0YXRzCT0gc3RyaXBfZ2V0X3N0YXRzLAorCS5uZG9fY2hhbmdlX210dSA9IHN0cmlwX2NoYW5nZV9tdHUsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSBEREkgd2hlbiB0aGUKICAqIChkeW5hbWljYWxseSBhc3NpZ25lZCkgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKQEAgLTI1MDMsMTggKzI1MTMsOCBAQAogCWRldi0+ZGV2X2FkZHJbMF0gPSAwOwogCWRldi0+YWRkcl9sZW4gPSBzaXplb2YoTWV0cmljb21BZGRyZXNzKTsKIAotCS8qCi0JICogUG9pbnRlcnMgdG8gaW50ZXJmYWNlIHNlcnZpY2Ugcm91dGluZXMuCi0JICovCi0KLQlkZXYtPm9wZW4gPSBzdHJpcF9vcGVuX2xvdzsKLQlkZXYtPnN0b3AgPSBzdHJpcF9jbG9zZV9sb3c7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdHJpcF94bWl0OwotCWRldi0+aGVhZGVyX29wcyA9ICZzdHJpcF9oZWFkZXJfb3BzOwotCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzdHJpcF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMgPSBzdHJpcF9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gc3RyaXBfY2hhbmdlX210dTsKKwlkZXYtPmhlYWRlcl9vcHMgPSAmc3RyaXBfaGVhZGVyX29wcywKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3RyaXBfbmV0ZGV2X29wczsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwppbmRleCA2ODhiZGVhLi5iNzI4NTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCkBAIC00MjgxLDggKzQyODEsNyBAQAogCiAKIAkvKiBMb29wIG9uIGFsbCBwb3NzaWJsZSBiYXNlIGFkZHJlc3Nlcy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpb1srK2ldICE9IDApICYmIChpIDwgQVJSQVlfU0laRShpbykpKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW8pICYmIGlvW2ldICE9IDA7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKG5ldF9sb2NhbCkpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IGRlNzE3ZjguLmU1NWIzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTgzOCw5ICs4MzgsOCBAQAogICAgIH0KICAgd2hpbGUoKChzdGF0dXMgJiBTUjNfRVhFQ19TVEFURV9NQVNLKSAhPSBTUjNfRVhFQ19JRExFKSAmJiAoc3Bpbi0tID4gMCkpOwogCi0gIC8qIElmIHRoZSBpbnRlcnJ1cHQgaGFzbid0IGJlIHBvc3RlZCAqLwotICBpZihzcGluIDw9IDApCi0gICAgeworICAvKiBJZiB0aGUgaW50ZXJydXB0IGhhc24ndCBiZWVuIHBvc3RlZCAqLworICBpZiAoc3BpbiA8IDApIHsKICNpZmRlZiBERUJVR19JTlRFUlJVUFRfRVJST1IKICAgICAgIHByaW50ayhLRVJOX0lORk8gInd2XzgyNTkzX2NtZDogJXMgdGltZW91dCAocHJldmlvdXMgY29tbWFuZCksIHN0YXR1cyAweCUwMnhcbiIsCiAJICAgICBzdHIsIHN0YXR1cyk7CkBAIC0xMzUzLDIxICsxMzUyLDYgQEAKICAqIG9yIHdpcmVsZXNzIGV4dGVuc2lvbnMKICAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogR2V0IHRoZSBjdXJyZW50IGV0aGVybmV0IHN0YXRpc3RpY3MuIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotICogY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqIFVzZWQgd2hlbiB0aGUgdXNlciByZWFkIC9wcm9jL25ldC9kZXYKLSAqLwotc3RhdGljIGVuX3N0YXRzCSoKLXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQotewotI2lmZGVmIERFQlVHX0lPQ1RMX1RSQUNFCi0gIHByaW50ayhLRVJOX0RFQlVHICIlczogPD53YXZlbGFuX2dldF9zdGF0cygpXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0KLSAgcmV0dXJuKCYoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0cyk7Ci19CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC0yODE4LDcgKzI4MDIsNyBAQAogICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHd2X3BhY2tldF9yZWFkKCk6IGNvdWxkIG5vdCBhbGxvY19za2IoJWQsIEdGUF9BVE9NSUMpXG4iLAogCSAgICAgZGV2LT5uYW1lLCBza3NpemUpOwogI2VuZGlmCi0gICAgICBscC0+c3RhdHMucnhfZHJvcHBlZCsrOworICAgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICAvKgogICAgICAgICogTm90IG9ubHkgZG8gd2Ugd2FudCB0byByZXR1cm4gaGVyZSwgYnV0IHdlIGFsc28gbmVlZCB0byBkcm9wIHRoZQogICAgICAgICogcGFja2V0IG9uIHRoZSBmbG9vciB0byBjbGVhciB0aGUgaW50ZXJydXB0LgpAQCAtMjg3OCw4ICsyODYyLDggQEAKICAgbmV0aWZfcngoc2tiKTsKIAogICAvKiBLZWVwIHN0YXRzIHVwIHRvIGRhdGUgKi8KLSAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLSAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKKyAgZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisgIGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tzaXplOwogCiAjaWZkZWYgREVCVUdfUlhfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8LXd2X3BhY2tldF9yZWFkKClcbiIsIGRldi0+bmFtZSk7CkBAIC0yOTgxLDEzICsyOTY1LDEzIEBACiAgICAgICAvKiBDaGVjayBzdGF0dXMgKi8KICAgICAgIGlmKChzdGF0dXMgJiBSWF9SQ1ZfT0spICE9IFJYX1JDVl9PSykKIAl7Ci0JICBscC0+c3RhdHMucnhfZXJyb3JzKys7CisJICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCSAgaWYoc3RhdHVzICYgUlhfTk9fU0ZEKQotCSAgICBscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJICBpZihzdGF0dXMgJiBSWF9DUkNfRVJSKQotCSAgICBscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkgIGlmKHN0YXR1cyAmIFJYX09WUlJVTikKLQkgICAgbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfcGFja2V0X3JjdigpOiBwYWNrZXQgbm90IHJlY2VpdmVkIG9rLCBzdGF0dXMgPSAweCV4XG4iLApAQCAtMzA3NCw3ICszMDU4LDcgQEAKICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKICAgLyogS2VlcCBzdGF0cyB1cCB0byBkYXRlICovCi0gIGxwLT5zdGF0cy50eF9ieXRlcyArPSBsZW5ndGg7CisgIGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuZ3RoOwogCiAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5zcGlubG9jaywgZmxhZ3MpOwogCkBAIC00MTA3LDcgKzQwOTEsNyBAQAogCSAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB3dl9pbnRlcnJ1cHQoKTogcmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3dcbiIsCiAJCSAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgotCSAgICAgIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICAgIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkgICAgICBscC0+b3ZlcnJ1bm5pbmcgPSAxOwogICAgICAgCSAgICB9CiAKQEAgLTQxNTYsNyArNDE0MCw3IEBACiAJICAvKiBDaGVjayBmb3IgcG9zc2libGUgZXJyb3JzICovCiAJICBpZigodHhfc3RhdHVzICYgVFhfT0spICE9IFRYX09LKQogCSAgICB7Ci0JICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCSAgICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9GUlRMKQogCQl7CkBAIC00MTcxLDE0ICs0MTU1LDE0IEBACiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9pbnRlcnJ1cHQoKTogRE1BIHVuZGVycnVuXG4iLAogCQkJIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9MT1NUX0NUUykKIAkJewogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBubyBDVFNcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9MT1NUX0NSUykKIAkJewpAQCAtNDE4NiwxNCArNDE3MCwxNCBAQAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IG5vIGNhcnJpZXJcbiIsCiAJCQkgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJfQogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0hSVF9CRUFUKQogCQl7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IGhlYXJ0IGJlYXRcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfREVGRVIpCiAJCXsKQEAgLTQyMTcsMTQgKzQyMDEsMTQgQEAKICNlbmRpZgogCQkgICAgICBpZighKHR4X3N0YXR1cyAmIFRYX05DT0xfTUFTSykpCiAJCQl7Ci0JCQkgIGxwLT5zdGF0cy5jb2xsaXNpb25zICs9IDB4MTA7CisJCQkgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAweDEwOwogCQkJfQogCQkgICAgfQogCQl9CiAJICAgIH0JLyogaWYoISh0eF9zdGF0dXMgJiBUWF9PSykpICovCiAKLQkgIGxwLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgJiBUWF9OQ09MX01BU0spOwotCSAgbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAodHhfc3RhdHVzICYgVFhfTkNPTF9NQVNLKTsKKwkgIGRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCiAJICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJICBvdXRiKENSMF9JTlRfQUNLIHwgT1AwX05PUCwgTENDUihiYXNlKSk7CS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KQEAgLTQ0NTIsNiArNDQzNiwxOSBAQAogICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB3YXZlbGFuX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSB3YXZlbGFuX29wZW4sCisJLm5kb19zdG9wCQk9IHdhdmVsYW5fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHdhdmVsYW5fcGFja2V0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdCwKKyNpZmRlZiBTRVRfTUFDX0FERFJFU1MKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHdhdmVsYW5fc2V0X21hY19hZGRyZXNzLAorI2VuZGlmCisJLm5kb190eF90aW1lb3V0CQk9IHdhdmVsYW5fd2F0Y2hkb2csCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIHdhdmVsYW5fYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKQEAgLTQ1MTIsMTcgKzQ1MDksNyBAQAogICBscC0+ZGV2ID0gZGV2OwogCiAgIC8qIHdhdmVsYW4gTkVUMyBjYWxsYmFja3MgKi8KLSAgZGV2LT5vcGVuID0gJndhdmVsYW5fb3BlbjsKLSAgZGV2LT5zdG9wID0gJndhdmVsYW5fY2xvc2U7Ci0gIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJndhdmVsYW5fcGFja2V0X3htaXQ7Ci0gIGRldi0+Z2V0X3N0YXRzID0gJndhdmVsYW5fZ2V0X3N0YXRzOwotICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdDsKLSNpZmRlZiBTRVRfTUFDX0FERFJFU1MKLSAgZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3M7Ci0jZW5kaWYJLyogU0VUX01BQ19BRERSRVNTICovCi0KLSAgLyogU2V0IHRoZSB3YXRjaGRvZyB0aW1lciAqLwotICBkZXYtPnR4X3RpbWVvdXQJPSAmd2F2ZWxhbl93YXRjaGRvZzsKKyAgZGV2LT5uZXRkZXZfb3BzID0gJndhdmVsYW5fbmV0ZGV2X29wczsKICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IFdBVENIRE9HX0pJRkZJRVM7CiAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCmluZGV4IDYyODE5MmQuLjcwNmZkMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaApAQCAtNTc2LDcgKzU3Niw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogU2hvcnRjdXRzICovCi10eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCWVuX3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd19zdGF0czsKIHR5cGVkZWYgc3RydWN0IGl3X3F1YWxpdHkJaXdfcXVhbDsKIHR5cGVkZWYgc3RydWN0IGl3X2ZyZXEJCWl3X2ZyZXE7CkBAIC01OTIsOCArNTkxLDYgQEAKICAqIEZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLCBMaW51eCBrZWVwIGRhdGEgaW4gdHdvIHN0cnVjdHVyZS4gImRldmljZSIKICAqIGtlZXAgdGhlIGdlbmVyaWMgZGF0YSAoc2FtZSBmb3JtYXQgZm9yIGV2ZXJ5Ym9keSkgYW5kICJuZXRfbG9jYWwiIGtlZXAKICAqIHRoZSBhZGRpdGlvbmFsIHNwZWNpZmljIGRhdGEuCi0gKiBOb3RlIHRoYXQgc29tZSBvZiB0aGlzIHNwZWNpZmljIGRhdGEgaXMgaW4gZmFjdCBnZW5lcmljIChlbl9zdGF0cywgZm9yCi0gKiBleGFtcGxlKS4KICAqLwogc3RydWN0IG5ldF9sb2NhbAogewpAQCAtNjAxLDcgKzU5OCw2IEBACiAgIHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2OwkJLyogUmV2ZXJzZSBsaW5rLi4uICovCiAgIHNwaW5sb2NrX3QJc3BpbmxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIChTTVApICovCiAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICoJbGluazsJCS8qIHBjbWNpYSBzdHJ1Y3R1cmUgKi8KLSAgZW5fc3RhdHMJc3RhdHM7CQkvKiBFdGhlcm5ldCBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwogICBpbnQJCW5yZXNldHM7CS8qIE51bWJlciBvZiBodyByZXNldHMgKi8KICAgdV9jaGFyCWNvbmZpZ3VyZWQ7CS8qIElmIGl0IGlzIGNvbmZpZ3VyZWQgKi8KICAgdV9jaGFyCXJlY29uZmlnXzgyNTkzOwkvKiBOZWVkIHRvIHJlY29uZmlndXJlIHRoZSBjb250cm9sbGVyICovCkBAIC02OTQsOCArNjkwLDYgQEAKIHN0YXRpYyB2b2lkCiAJd3ZfaW5pdF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBkaXNwbGF5IHN0YXJ0dXAgaW5mbyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCwgU1RBVFMgJiBSRUNPTkZJRyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgZW5fc3RhdHMJKgotCXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBHaXZlIHN0YXRzIC9wcm9jL25ldC9kZXYgKi8KIHN0YXRpYyBpd19zdGF0cyAqCiAJd2F2ZWxhbl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQQUNLRVQgUkVDRVBUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCmluZGV4IDU5YmIzYTUuLjhiY2UxYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCkBAIC02MDYsNyArNjA2LDcgQEAKIAl1OAkJCQlyZWdfZG9tYWluOwogCXU4CQkJCXZlcnNpb25bMl07CiAJc3RydWN0IHdsMzUwMV9zY2FuX2NvbmZpcm0JYnNzX3NldFsyMF07Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgCXN0YXRzOworCiAJc3RydWN0IGl3X3N0YXRpc3RpY3MJCXdzdGF0czsKIAlzdHJ1Y3QgaXdfc3B5X2RhdGEJCXNweV9kYXRhOwogCXN0cnVjdCBpd19wdWJsaWNfZGF0YQkJd2lyZWxlc3NfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggYzhkNWMzNC4uMWY2NGQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jIGEgc2tfYnVmZiBvZiBzaXplICVkLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCXRoaXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJfSBlbHNlIHsKIAkJc2tiLT5kZXYgPSBkZXY7CiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIElQIGhlYWRlcnMgb24gMTYgYnl0ZXMgYm91bmRhcmllcyAqLwpAQCAtMTAwOCw4ICsxMDA4LDggQEAKIAkJd2wzNTAxX3JlY2VpdmUodGhpcywgc2tiLT5kYXRhLCBwa3RfbGVuKTsKIAkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwogCQlza2ItPnByb3RvY29sCT0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQl0aGlzLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXRoaXMtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CiB9CkBAIC0xMzExLDcgKzEzMTEsNyBAQAogc3RhdGljIHZvaWQgd2wzNTAxX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0aGlzLT5zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIApAQCAtMTM0NiwxMSArMTM0NiwxMSBAQAogCWlmIChlbmFibGVkKQogCQl3bDM1MDFfdW5ibG9ja19pbnRlcnJ1cHQodGhpcyk7CiAJaWYgKHJjKSB7Ci0JCSsrdGhpcy0+c3RhdHMudHhfZHJvcHBlZDsKKwkJKytkZXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9IGVsc2UgewotCQkrK3RoaXMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCXRoaXMtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJa2ZyZWVfc2tiKHNrYik7CiAKIAkJaWYgKHRoaXMtPnR4X2J1ZmZlcl9jbnQgPCAyKQpAQCAtMTQwMCwxMyArMTQwMCw2IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqd2wzNTAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJnRoaXMtPnN0YXRzOwotfQotCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKndsMzUwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTg5MCw2ICsxODgzLDE2IEBACiAJLmdldF93aXJlbGVzc19zdGF0cyA9IHdsMzUwMV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdsMzUwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB3bDM1MDFfb3BlbiwKKwkubmRvX3N0b3AJCT0gd2wzNTAxX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB3bDM1MDFfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB3bDM1MDFfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiB3bDM1MDFfYXR0YWNoIC0gY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIKICAqCkBAIC0xOTIyLDE3ICsxOTI1LDE2IEBACiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB3bDM1MDFfY2FyZCkpOwogCWlmICghZGV2KQogCQlnb3RvIG91dF9saW5rOwotCWRldi0+b3BlbgkJPSB3bDM1MDFfb3BlbjsKLQlkZXYtPnN0b3AJCT0gd2wzNTAxX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gd2wzNTAxX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gd2wzNTAxX3R4X3RpbWVvdXQ7CisKKworCWRldi0+bmV0ZGV2X29wcwkJPSAmd2wzNTAxX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IDUgKiBIWjsKLQlkZXYtPmdldF9zdGF0cwkJPSB3bDM1MDFfZ2V0X3N0YXRzOworCiAJdGhpcyA9IG5ldGRldl9wcml2KGRldik7CiAJdGhpcy0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZ0aGlzLT5zcHlfZGF0YTsKIAl0aGlzLT5wX2RldiA9IHBfZGV2OwogCWRldi0+d2lyZWxlc3NfZGF0YQk9ICZ0aGlzLT53aXJlbGVzc19kYXRhOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMJPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJndsMzUwMV9oYW5kbGVyX2RlZjsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzCT0gJndsMzUwMV9oYW5kbGVyX2RlZjsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmb3BzKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcF9kZXYtPnByaXYgPSBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCA2MjI2YWMyLi45YjI0NGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtMzI4LDggKzMyOCw4IEBACiAJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVtkYXRhbGVuLTI0XSwgMik7CiAJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGEsIGxlbik7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB6ZC0+ZGV2KTsKLQkJCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQl6ZC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQl6ZC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCW5ldGlmX3J4KHNrYik7CiAJCQlnb3RvIHJlc3VibWl0OwogCQl9CkBAIC0zODQsOCArMzg0LDggQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSs4LCBsZW4pOwogCQl9CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOwotCQl6ZC0+c3RhdHMucnhfcGFja2V0cysrOwotCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCXpkLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJemQtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGlmX3J4KHNrYik7CiAJfQogcmVzdWJtaXQ6CkBAIC03ODcsNyArNzg3LDcgQEAKIAlzdHJ1Y3QgdXJiICp1cmIgPSB6ZC0+dHhfdXJiOwogCiAJaWYgKCF6ZC0+bWFjX2VuYWJsZWQgfHwgemQtPm1vbml0b3IpIHsKLQkJemQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04MTcsMTIgKzgxNywxMiBAQAogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIoemQtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVycikgewotCQl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJCXJldHVybiBlcnI7CiAJfQotCXpkLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JemQtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJa2ZyZWVfc2tiKHNrYik7CiAKQEAgLTgzOCw3ICs4MzgsNyBAQAogCWRldl93YXJuKCZ6ZC0+dXNiLT5kZXYsICIlczogVFggdGltZW91dCwgc2hvb3RpbmcgZG93biB1cmJcbiIsCiAJICAgIGRldi0+bmFtZSk7CiAJdXNiX3VubGlua191cmIoemQtPnR4X3VyYik7Ci0JemQtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJLyogUmVzdGFydCB0aGUgdGltZW91dCB0byBxdWlldCB0aGUgd2F0Y2hkb2c6ICovCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiB9CkBAIC04NjEsMTMgKzg2MSw2IEBACiAJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnpkMTIwMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJnpkLT5zdGF0czsKLX0KLQogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICp6ZDEyMDFfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTcyNCw2ICsxNzE3LDE4IEBACiAJLmdldF93aXJlbGVzc19zdGF0cwk9IHpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHpkMTIwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB6ZDEyMDFfbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHpkMTIwMV9uZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gemQxMjAxX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gemQxMjAxX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB6ZDEyMDFfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgemQxMjAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CkBAIC0xNzc2LDE2ICsxNzgxLDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zdGFydDsKIAotCWRldi0+b3BlbiA9IHpkMTIwMV9uZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB6ZDEyMDFfbmV0X3N0b3A7Ci0JZGV2LT5nZXRfc3RhdHMgPSB6ZDEyMDFfZ2V0X3N0YXRzOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCSAgICAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJnpkMTIwMV9pd19oYW5kbGVyczsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnpkMTIwMV9uZXRkZXZfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmemQxMjAxX2l3X2hhbmRsZXJzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBaRDEyMDFfVFhfVElNRU9VVDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB6ZDEyMDFfdHhfdGltZW91dDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHpkMTIwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gemQxMjAxX3NldF9tYWNfYWRkcmVzczsKIAlzdHJjcHkoZGV2LT5uYW1lLCAid2xhbiVkIik7CiAKIAllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIsIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAppbmRleCAyMzVmMGVlLi5kZDdlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaApAQCAtMjYsNyArMjYsNiBAQAogCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CiAJaW50CQkJcmVtb3ZlZDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzCWl3c3RhdHM7CiAKIAlpbnQJCQllbmRwX2luOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGYxNTE5MTQuLjJjODEzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTE2MTYsMyArMTYxNiwyNCBAQAogCiAJcmV0dXJuIHpkX2lvd3JpdGUzMmEoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwogfQorCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKQoreworCWludCByOworCXN0YXRpYyBjb25zdCB6ZF9hZGRyX3QgYXdfcHRfYmlfYWRkcltdID0KKwkJeyBDUl9UU0ZfTE9XX1BBUlQsIENSX1RTRl9ISUdIX1BBUlQgfTsKKwl1MzIgdmFsdWVzWzJdOworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJciA9IHpkX2lvcmVhZDMydl9sb2NrZWQoY2hpcCwgdmFsdWVzLCAoY29uc3QgemRfYWRkcl90ICopYXdfcHRfYmlfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGF3X3B0X2JpX2FkZHIpKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlpZiAocikKKwkJcmV0dXJuIDA7CisKKwl0c2YgPSB2YWx1ZXNbMV07CisJdHNmID0gKHRzZiA8PCAzMikgfCB2YWx1ZXNbMF07CisKKwlyZXR1cm4gdHNmOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCmluZGV4IGY4YzA2MWEuLmVlNDI3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKQEAgLTk1MCw0ICs5NTAsNiBAQAogaW50IHpkX2NoaXBfc2V0X211bHRpY2FzdF9oYXNoKHN0cnVjdCB6ZF9jaGlwICpjaGlwLAogCSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHpkX21jX2hhc2ggKmhhc2gpOwogCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKTsKKwogI2VuZGlmIC8qIF9aRF9DSElQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggNzU3OWFmMi4uYzNhNTEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTE3MCwxMCArMTcwLDEwIEBACiAJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKIAlyID0gemRfcmVnMmFscGhhMihtYWMtPnJlZ2RvbWFpbiwgYWxwaGEyKTsKLQlpZiAoIXIpCi0JCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGFscGhhMik7CisJaWYgKHIpCisJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKLQlyID0gMDsKKwlyID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgYWxwaGEyKTsKIGRpc2FibGVfaW50OgogCXpkX2NoaXBfZGlzYWJsZV9pbnQoY2hpcCk7CiBvdXQ6CkBAIC01NzUsMTMgKzU3NSwxNyBAQAogCiAJciA9IGZpbGxfY3RybHNldChtYWMsIHNrYik7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIGZhaWw7CiAKIAlpbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdID0gaHc7CiAKIAlyID0gemRfdXNiX3R4KCZtYWMtPmNoaXAudXNiLCBza2IpOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBmYWlsOworCXJldHVybiAwOworCitmYWlsOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTM1LDYgKzkzOSwxMiBAQAogCX0KIH0KIAorc3RhdGljIHU2NCB6ZF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CisJcmV0dXJuIHpkX2NoaXBfZ2V0X3RzZigmbWFjLT5jaGlwKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHpkX29wcyA9IHsKIAkudHgJCQk9IHpkX29wX3R4LAogCS5zdGFydAkJCT0gemRfb3Bfc3RhcnQsCkBAIC05NDUsNiArOTU1LDcgQEAKIAkuY29uZmlnX2ludGVyZmFjZQk9IHpkX29wX2NvbmZpZ19pbnRlcmZhY2UsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSB6ZF9vcF9jb25maWd1cmVfZmlsdGVyLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gemRfb3BfYnNzX2luZm9fY2hhbmdlZCwKKwkuZ2V0X3RzZgkJPSB6ZF9vcF9nZXRfdHNmLAogfTsKIAogc3RydWN0IGllZWU4MDIxMV9odyAqemRfbWFjX2FsbG9jX2h3KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAyZjE2NDVkLi43NDc3ZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMTA3LDkgKzEwNyw5IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKLUtFUk5fSU5GTyAiICAodW5vZmZpY2lhbCAyLjQueCBwb3J0LCAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorICBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKKyAgS0VSTl9JTkZPICIgICh1bm9mZmljaWFsIDIuNC54IHBvcnQsICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGFja2V0IEVuZ2luZXMgWWVsbG93ZmluIEctTklDIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKaW5kZXggZDUzOWQ5ZC4uYmI1YTFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZGluby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJcmVzID0gJmRpbm9fZGV2LT5oYmEubG1taW9fc3BhY2U7CiAJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCXNpemUgPSBzY25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiRGlubyBMTU1JTyAoJXMpIiwgCi0JCQkgYnVzLT5icmlkZ2UtPmJ1c19pZCk7CisJCQkgZGV2X25hbWUoYnVzLT5icmlkZ2UpKTsKIAlyZXMtPm5hbWUgPSBrbWFsbG9jKHNpemUrMSwgR0ZQX0tFUk5FTCk7CiAJaWYocmVzLT5uYW1lKQogCQlzdHJjcHkoKGNoYXIgKilyZXMtPm5hbWUsIG5hbWUpOwpAQCAtNDkzLDcgKzQ5Myw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgKmxuLCAqdG1wX2xuOwogCiAJCXByaW50ayhLRVJOX0VSUiAiRGlubzogY2Fubm90IGF0dGFjaCBidXMgJXNcbiIsCi0JCSAgICAgICBidXMtPmJyaWRnZS0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGJ1cy0+YnJpZGdlKSk7CiAJCS8qIGtpbGwgdGhlIGJ1cywgd2UgY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCBpdCAqLwogCQlsaXN0X2Zvcl9lYWNoX3NhZmUobG4sIHRtcF9sbiwgJmJ1cy0+ZGV2aWNlcykgewogCQkJc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9kZXZfYihsbik7CkBAIC01ODcsNyArNTg3LDcgQEAKIAkJCWJ1cy0+cmVzb3VyY2VbaSsxXSA9ICZyZXNbaV07CiAJCX0KIAotCX0gZWxzZSBpZihidXMtPnNlbGYpIHsKKwl9IGVsc2UgaWYgKGJ1cy0+cGFyZW50KSB7CiAJCWludCBpOwogCiAJCXBjaV9yZWFkX2JyaWRnZV9iYXNlcyhidXMpOwpAQCAtNjExLDEyICs2MTEsMTIgQEAKIAkJCX0KIAkJCQkJCiAJCQlEQkcoIkRFQlVHICVzIGFzc2lnbmluZyAlZCBbMHglbHgsMHglbHhdXG4iLAotCQkJICAgIGJ1cy0+c2VsZi0+ZGV2LmJ1c19pZCwgaSwKKwkJCSAgICBkZXZfbmFtZSgmYnVzLT5zZWxmLT5kZXYpLCBpLAogCQkJICAgIGJ1cy0+c2VsZi0+cmVzb3VyY2VbaV0uc3RhcnQsCiAJCQkgICAgYnVzLT5zZWxmLT5yZXNvdXJjZVtpXS5lbmQpOwogCQkJcGNpX2Fzc2lnbl9yZXNvdXJjZShidXMtPnNlbGYsIGkpOwogCQkJREJHKCJERUJVRyAlcyBhZnRlciBhc3NpZ24gJWQgWzB4JWx4LDB4JWx4XVxuIiwKLQkJCSAgICBidXMtPnNlbGYtPmRldi5idXNfaWQsIGksCisJCQkgICAgZGV2X25hbWUoJmJ1cy0+c2VsZi0+ZGV2KSwgaSwKIAkJCSAgICBidXMtPnNlbGYtPnJlc291cmNlW2ldLnN0YXJ0LAogCQkJICAgIGJ1cy0+c2VsZi0+cmVzb3VyY2VbaV0uZW5kKTsKIAkJfQpAQCAtMTAyNiw3ICsxMDI2LDggQEAKIAkJZGlub19jdXJyZW50X2J1cyA9IGJ1cy0+c3Vib3JkaW5hdGUgKyAxOwogCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBmYWlsZWQgdG8gc2NhbiBQQ0kgYnVzIG9uICVzIChwcm9iYWJseSBkdXBsaWNhdGUgYnVzIG51bWJlciAlZClcbiIsIGRldi0+ZGV2LmJ1c19pZCwgZGlub19jdXJyZW50X2J1cyk7CisJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGZhaWxlZCB0byBzY2FuIFBDSSBidXMgb24gJXMgKHByb2JhYmx5IGR1cGxpY2F0ZSBidXMgbnVtYmVyICVkKVxuIiwKKwkJICAgICAgIGRldl9uYW1lKCZkZXYtPmRldiksIGRpbm9fY3VycmVudF9idXMpOwogCQkvKiBpbmNyZW1lbnQgdGhlIGJ1cyBudW1iZXIgaW4gY2FzZSBvZiBkdXBsaWNhdGVzICovCiAJCWRpbm9fY3VycmVudF9idXMrKzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9nc2MuYyBiL2RyaXZlcnMvcGFyaXNjL2dzYy5jCmluZGV4IGU3NmRiOWUuLmQzMzYzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2dzYy5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2dzYy5jCkBAIC0xODYsMjkgKzE4NiwzNCBAQAogCSppcnFwID0gaXJxOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCitzdHJ1Y3QgZ3NjX2ZpeHVwX3N0cnVjdCB7CisJdm9pZCAoKmNob29zZV9pcnEpKHN0cnVjdCBwYXJpc2NfZGV2aWNlICosIHZvaWQgKik7CisJdm9pZCAqY3RybDsKK307CisKK3N0YXRpYyBpbnQgZ3NjX2ZpeHVwX2lycXNfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrbGlzdF9ub2RlICogbiA9IGtsaXN0X25leHQoaSk7Ci0JcmV0dXJuIG4gPyBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KSA6IE5VTEw7CisJc3RydWN0IHBhcmlzY19kZXZpY2UgKnBhZGV2ID0gdG9fcGFyaXNjX2RldmljZShkZXYpOworCXN0cnVjdCBnc2NfZml4dXBfc3RydWN0ICpnZiA9IGRhdGE7CisKKwkvKiB3b3JrLWFyb3VuZCBmb3IgNzE1LzY0IGFuZCBvdGhlcnMgd2hpY2ggaGF2ZSBwYXJlbnQKKwkgICBhdCBwYXRoIFs1XSBhbmQgY2hpbGRyZW4gYXQgcGF0aCBbNS8wL3hdICovCisJaWYgKHBhZGV2LT5pZC5od190eXBlID09IEhQSFdfRkFVTFRZKQorCQlnc2NfZml4dXBfaXJxcyhwYWRldiwgZ2YtPmN0cmwsIGdmLT5jaG9vc2VfaXJxKTsKKwlnZi0+Y2hvb3NlX2lycShwYWRldiwgZ2YtPmN0cmwpOworCisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZ3NjX2ZpeHVwX2lycXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKnBhcmVudCwgdm9pZCAqY3RybCwKIAkJCXZvaWQgKCpjaG9vc2VfaXJxKShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqLCB2b2lkICopKQogewotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3Qga2xpc3RfaXRlciBpOworCXN0cnVjdCBnc2NfZml4dXBfc3RydWN0IGRhdGEgPSB7CisJCS5jaG9vc2VfaXJxCT0gY2hvb3NlX2lycSwKKwkJLmN0cmwJCT0gY3RybCwKKwl9OwogCi0Ja2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPmRldi5rbGlzdF9jaGlsZHJlbiwgJmkpOwotCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkgewotCQlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqcGFkZXYgPSB0b19wYXJpc2NfZGV2aWNlKGRldik7Ci0KLQkJLyogd29yay1hcm91bmQgZm9yIDcxNS82NCBhbmQgb3RoZXJzIHdoaWNoIGhhdmUgcGFyZW50IAotCQkgICBhdCBwYXRoIFs1XSBhbmQgY2hpbGRyZW4gYXQgcGF0aCBbNS8wL3hdICovCi0JCWlmIChwYWRldi0+aWQuaHdfdHlwZSA9PSBIUEhXX0ZBVUxUWSkKLQkJCXJldHVybiBnc2NfZml4dXBfaXJxcyhwYWRldiwgY3RybCwgY2hvb3NlX2lycSk7Ci0JCWNob29zZV9pcnEocGFkZXYsIGN0cmwpOwotCX0KLQlrbGlzdF9pdGVyX2V4aXQoJmkpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmcGFyZW50LT5kZXYsICZkYXRhLCBnc2NfZml4dXBfaXJxc19jYWxsYmFjayk7CiB9CiAKIGludCBnc2NfY29tbW9uX3NldHVwKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnc2NfYXNpYyAqZ3NjX2FzaWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKaW5kZXggMDc5NzY1OS4uNTAxYWFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJfQogCiAJLyogQ2hlY2sgaWYgcGNpZGV2IGJlaGluZCBhIFBQQiAqLwotCWlmIChOVUxMICE9IHBjaWRldi0+YnVzLT5zZWxmKSB7CisJaWYgKHBjaWRldi0+YnVzLT5wYXJlbnQpIHsKIAkJLyogQ29udmVydCBwY2lkZXYgSU5UUl9QSU4gaW50byBzb21ldGhpbmcgd2UKIAkJKiogY2FuIGxvb2t1cCBpbiB0aGUgSVJULgogCQkqLwpAQCAtNTIzLDEwICs1MjMsOSBAQAogI2VuZGlmIC8qIFBDSV9CUklER0VfRlVOQ1MgKi8KIAogCQkvKgotCQkqKiBMb2NhdGUgdGhlIGhvc3Qgc2xvdCB0aGUgUFBCIG5lYXJlc3QgdGhlIEhvc3QgYnVzCi0JCSoqIGFkYXB0ZXIuCi0JCSovCi0JCXdoaWxlIChOVUxMICE9IHAtPnBhcmVudC0+c2VsZikKKwkJICogTG9jYXRlIHRoZSBob3N0IHNsb3Qgb2YgdGhlIFBQQi4KKwkJICovCisJCXdoaWxlIChwLT5wYXJlbnQtPnBhcmVudCkKIAkJCXAgPSBwLT5wYXJlbnQ7CiAKIAkJaW50cl9zbG90ID0gUENJX1NMT1QocC0+c2VsZi0+ZGV2Zm4pOwpAQCAtNzA5LDExICs3MDgsMTQgQEAKIAlzdHJ1Y3QgdmVjdG9yX2luZm8gKnZpID0gaW9zYXBpY19nZXRfdmVjdG9yKGlycSk7CiAJdTMyIGQwLCBkMSwgZHVtbXlfZDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZGVzdF9jcHU7CiAKLQlpZiAoY3B1X2NoZWNrX2FmZmluaXR5KGlycSwgZGVzdCkpCisJZGVzdF9jcHUgPSBjcHVfY2hlY2tfYWZmaW5pdHkoaXJxLCBkZXN0KTsKKwlpZiAoZGVzdF9jcHUgPCAwKQogCQlyZXR1cm47CiAKLQl2aS0+dHhuX2FkZHIgPSB0eG5fYWZmaW5pdHlfYWRkcihpcnEsIGNwdW1hc2tfZmlyc3QoZGVzdCkpOworCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShkZXN0X2NwdSk7CisJdmktPnR4bl9hZGRyID0gdHhuX2FmZmluaXR5X2FkZHIoaXJxLCBkZXN0X2NwdSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9zYXBpY19sb2NrLCBmbGFncyk7CiAJLyogZDEgY29udGFpbnMgdGhlIGRlc3RpbmF0aW9uIENQVSwgc28gb25seSB3YW50IHRvIHNldCB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMgYi9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKaW5kZXggZDgyMzNkZS4uNTlmYmJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvbGJhX3BjaS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJKiogUHJvcGVybHkgU2V0dXAgTU1JTyByZXNvdXJjZXMgZm9yIHRoaXMgYnVzLgogCSoqIHBjaV9hbGxvY19wcmltYXJ5X2J1cygpIG1hbmdsZXMgdGhpcy4KIAkqLwotCWlmIChidXMtPnNlbGYpIHsKKwlpZiAoYnVzLT5wYXJlbnQpIHsKIAkJaW50IGk7CiAJCS8qIFBDSS1QQ0kgQnJpZGdlICovCiAJCXBjaV9yZWFkX2JyaWRnZV9iYXNlcyhidXMpOwpAQCAtODAyLDcgKzgwMiw3IEBACiAqKiBDYW4ndCBmaXh1cCBoZXJlIGFueXdheS4uLi5nYXJyLi4uCiAqLwogCWlmIChmYmJfZW5hYmxlKSB7Ci0JCWlmIChidXMtPnNlbGYpIHsKKwkJaWYgKGJ1cy0+cGFyZW50KSB7CiAJCQl1OCBjb250cm9sOwogCQkJLyogZW5hYmxlIG9uIFBQQiAqLwogCQkJKHZvaWQpIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGJ1cy0+c2VsZiwgUENJX0JSSURHRV9DT05UUk9MLCAmY29udHJvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYyBiL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jCmluZGV4IGE3MGNmMTYuLmU1OTk5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jCkBAIC0xMjA2LDMxICsxMjA2LDQ5IEBACiAJcmV0dXJuICh2b2lkICopIHBkaXJfYmFzZTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQorc3RydWN0IGliYXNlX2RhdGFfc3RydWN0IHsKKwlzdHJ1Y3QgaW9jICppb2M7CisJaW50IGlvY19udW07Cit9OworCitzdGF0aWMgaW50IHNldHVwX2liYXNlX2ltYXNrX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IGtsaXN0X25vZGUgKiBuID0ga2xpc3RfbmV4dChpKTsKLSAgICAgICAgcmV0dXJuIG4gPyBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KSA6IE5VTEw7CisJLyogbGJhX3NldF9pcmVncygpIGlzIGluIGRyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYyAqLworICAgICAgICBleHRlcm4gdm9pZCBsYmFfc2V0X2lyZWdzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICosIHUzMiwgdTMyKTsKKwlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqbGJhID0gdG9fcGFyaXNjX2RldmljZShkZXYpOworCXN0cnVjdCBpYmFzZV9kYXRhX3N0cnVjdCAqaWJkID0gZGF0YTsKKwlpbnQgcm9wZV9udW0gPSAobGJhLT5ocGEuc3RhcnQgPj4gMTMpICYgMHhmOworCWlmIChyb3BlX251bSA+PiAzID09IGliZC0+aW9jX251bSkKKwkJbGJhX3NldF9pcmVncyhsYmEsIGliZC0+aW9jLT5pYmFzZSwgaWJkLT5pb2MtPmltYXNrKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogc2V0dXAgTWVyY3VyeSBvciBFbHJveSBJQkFTRS9JTUFTSyByZWdpc3RlcnMuICovCiBzdGF0aWMgdm9pZCAKIHNldHVwX2liYXNlX2ltYXNrKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpzYmEsIHN0cnVjdCBpb2MgKmlvYywgaW50IGlvY19udW0pCiB7Ci0JLyogbGJhX3NldF9pcmVncygpIGlzIGluIGRyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYyAqLwotICAgICAgICBleHRlcm4gdm9pZCBsYmFfc2V0X2lyZWdzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICosIHUzMiwgdTMyKTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGtsaXN0X2l0ZXIgaTsKKwlzdHJ1Y3QgaWJhc2VfZGF0YV9zdHJ1Y3QgaWJhc2VfZGF0YSA9IHsKKwkJLmlvYwkJPSBpb2MsCisJCS5pb2NfbnVtCT0gaW9jX251bSwKKwl9OwogCi0Ja2xpc3RfaXRlcl9pbml0KCZzYmEtPmRldi5rbGlzdF9jaGlsZHJlbiwgJmkpOwotCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkgewotCQlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqbGJhID0gdG9fcGFyaXNjX2RldmljZShkZXYpOwotCQlpbnQgcm9wZV9udW0gPSAobGJhLT5ocGEuc3RhcnQgPj4gMTMpICYgMHhmOwotCQlpZiAocm9wZV9udW0gPj4gMyA9PSBpb2NfbnVtKQotCQkJbGJhX3NldF9pcmVncyhsYmEsIGlvYy0+aWJhc2UsIGlvYy0+aW1hc2spOwotCX0KLQlrbGlzdF9pdGVyX2V4aXQoJmkpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmc2JhLT5kZXYsICZpYmFzZV9kYXRhLAorCQkJICAgICAgc2V0dXBfaWJhc2VfaW1hc2tfY2FsbGJhY2spOwogfQogCisjaWZkZWYgU0JBX0FHUF9TVVBQT1JUCitzdGF0aWMgaW50CitzYmFfaW9jX2ZpbmRfcXVpY2tzaWx2ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWludCAqYWdwX2ZvdW5kID0gZGF0YTsKKwlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqbGJhID0gdG9fcGFyaXNjX2RldmljZShkZXYpOworCisJaWYgKElTX1FVSUNLU0lMVkVSKGxiYSkpCisJCSphZ3BfZm91bmQgPSAxOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkCiBzYmFfaW9jX2luaXRfcGx1dG8oc3RydWN0IHBhcmlzY19kZXZpY2UgKnNiYSwgc3RydWN0IGlvYyAqaW9jLCBpbnQgaW9jX251bSkKIHsKQEAgLTEzMzIsOSArMTM1MCw2IEBACiAJV1JJVEVfUkVHKGlvYy0+aWJhc2UgfCAzMSwgaW9jLT5pb2NfaHBhICsgSU9DX1BDT00pOwogCiAjaWZkZWYgU0JBX0FHUF9TVVBQT1JUCi17Ci0Jc3RydWN0IGtsaXN0X2l0ZXIgaTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOwogCiAJLyoKIAkqKiBJZiBhbiBBR1AgZGV2aWNlIGlzIHByZXNlbnQsIG9ubHkgdXNlIGhhbGYgb2YgdGhlIElPViBzcGFjZQpAQCAtMTM0NCwxMyArMTM1OSw3IEBACiAJKiogV2UgcHJvZ3JhbSB0aGUgbmV4dCBwZGlyIGluZGV4IGFmdGVyIHdlIHN0b3Agdy8gYSBrZXkgZm9yCiAJKiogdGhlIEdBUlQgY29kZSB0byBoYW5kc2hha2Ugb24uCiAJKi8KLQlrbGlzdF9pdGVyX2luaXQoJnNiYS0+ZGV2LmtsaXN0X2NoaWxkcmVuLCAmaSk7Ci0Jd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpKSB7Ci0JCXN0cnVjdCBwYXJpc2NfZGV2aWNlICpsYmEgPSB0b19wYXJpc2NfZGV2aWNlKGRldik7Ci0JCWlmIChJU19RVUlDS1NJTFZFUihsYmEpKQotCQkJYWdwX2ZvdW5kID0gMTsKLQl9Ci0Ja2xpc3RfaXRlcl9leGl0KCZpKTsKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJnNiYS0+ZGV2LCAmYWdwX2ZvdW5kLCBzYmFfaW9jX2ZpbmRfcXVpY2tzaWx2ZXIpOwogCiAJaWYgKGFncF9mb3VuZCAmJiBzYmFfcmVzZXJ2ZV9hZ3BnYXJ0KSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNlcnZpbmcgJWRNYiBvZiBJT1ZBIHNwYWNlIGZvciBhZ3BnYXJ0XG4iLApAQCAtMTM1OCw5ICsxMzY3LDcgQEAKIAkJaW9jLT5wZGlyX3NpemUgLz0gMjsKIAkJaW9jLT5wZGlyX2Jhc2VbUERJUl9JTkRFWChpb3ZhX3NwYWNlX3NpemUvMildID0gU0JBX0FHUEdBUlRfQ09PS0lFOwogCX0KLX0KICNlbmRpZiAvKlNCQV9BR1BfU1VQUE9SVCovCi0KIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2F0YXJpLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9hdGFyaS5jCmluZGV4IGFkNGNkZDIuLjBiMjhmY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2F0YXJpLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfYXRhcmkuYwpAQCAtODQsNyArODQsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIKIHBhcnBvcnRfYXRhcmlfcmVhZF9zdGF0dXMoc3RydWN0IHBhcnBvcnQgKnApCiB7Ci0JcmV0dXJuICgobWZwLnBhcl9kdF9yZWcgJiAxID8gMCA6IFBBUlBPUlRfU1RBVFVTX0JVU1kpIHwKKwlyZXR1cm4gKChzdF9tZnAucGFyX2R0X3JlZyAmIDEgPyAwIDogUEFSUE9SVF9TVEFUVVNfQlVTWSkgfAogCQlQQVJQT1JUX1NUQVRVU19TRUxFQ1QgfCBQQVJQT1JUX1NUQVRVU19FUlJPUik7CiB9CiAKQEAgLTE5Myw5ICsxOTMsOSBAQAogCQlzb3VuZF95bS53ZF9kYXRhID0gc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsIHwgKDEgPDwgNSk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJLyogTUZQIHBvcnQgSTAgYXMgaW5wdXQuICovCi0JCW1mcC5kYXRhX2RpciAmPSB+MTsKKwkJc3RfbWZwLmRhdGFfZGlyICY9IH4xOwogCQkvKiBNRlAgcG9ydCBJMCBpbnRlcnJ1cHQgb24gaGlnaC0+bG93IGVkZ2UuICovCi0JCW1mcC5hY3RpdmVfZWRnZSAmPSB+MTsKKwkJc3RfbWZwLmFjdGl2ZV9lZGdlICY9IH4xOwogCQlwID0gcGFycG9ydF9yZWdpc3Rlcl9wb3J0KCh1bnNpZ25lZCBsb25nKSZzb3VuZF95bS53ZF9kYXRhLAogCQkJCQkgIElSUV9NRlBfQlVTWSwgUEFSUE9SVF9ETUFfTk9ORSwKIAkJCQkJICAmcGFycG9ydF9hdGFyaV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IGY1YTY2MmEuLjI2YzUzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTMzMCw2ICszMzAsMTQgQEAKIAllbnRyeV9oZWFkZXIgPSAoc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKikoZG1hciArIDEpOwogCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpZW50cnlfaGVhZGVyKSA8CiAJCQkoKCh1bnNpZ25lZCBsb25nKWRtYXIpICsgZG1hcl90YmwtPmxlbmd0aCkpIHsKKwkJLyogQXZvaWQgbG9vcGluZyBmb3JldmVyIG9uIGJhZCBBQ1BJIHRhYmxlcyAqLworCQlpZiAoZW50cnlfaGVhZGVyLT5sZW5ndGggPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCQkiSW52YWxpZCAwLWxlbmd0aCBzdHJ1Y3R1cmVcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKIAkJZG1hcl90YWJsZV9wcmludF9kbWFyX2VudHJ5KGVudHJ5X2hlYWRlcik7CiAKIAkJc3dpdGNoIChlbnRyeV9oZWFkZXItPnR5cGUpIHsKQEAgLTQ5MSw3ICs0OTksNyBAQAogCWludCBtYXBfc2l6ZTsKIAl1MzIgdmVyOwogCXN0YXRpYyBpbnQgaW9tbXVfYWxsb2NhdGVkID0gMDsKLQlpbnQgYWdhdzsKKwlpbnQgYWdhdyA9IDA7CiAKIAlpb21tdSA9IGt6YWxsb2Moc2l6ZW9mKCppb21tdSksIEdGUF9LRVJORUwpOwogCWlmICghaW9tbXUpCkBAIC01MDcsNiArNTE1LDcgQEAKIAlpb21tdS0+Y2FwID0gZG1hcl9yZWFkcShpb21tdS0+cmVnICsgRE1BUl9DQVBfUkVHKTsKIAlpb21tdS0+ZWNhcCA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIERNQVJfRUNBUF9SRUcpOwogCisjaWZkZWYgQ09ORklHX0RNQVIKIAlhZ2F3ID0gaW9tbXVfY2FsY3VsYXRlX2FnYXcoaW9tbXUpOwogCWlmIChhZ2F3IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTUxNCw2ICs1MjMsNyBAQAogCQkJaW9tbXUtPnNlcV9pZCk7CiAJCWdvdG8gZXJyb3I7CiAJfQorI2VuZGlmCiAJaW9tbXUtPmFnYXcgPSBhZ2F3OwogCiAJLyogdGhlIHJlZ2lzdGVycyBtaWdodCBiZSBtb3JlIHRoYW4gb25lIHBhZ2UgKi8KQEAgLTU3MSwxOSArNTgxLDQ5IEBACiAJfQogfQogCitzdGF0aWMgaW50IHFpX2NoZWNrX2ZhdWx0KHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIGludCBpbmRleCkKK3sKKwl1MzIgZmF1bHQ7CisJaW50IGhlYWQ7CisJc3RydWN0IHFfaW52YWwgKnFpID0gaW9tbXUtPnFpOworCWludCB3YWl0X2luZGV4ID0gKGluZGV4ICsgMSkgJSBRSV9MRU5HVEg7CisKKwlmYXVsdCA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKKworCS8qCisJICogSWYgSVFFIGhhcHBlbnMsIHRoZSBoZWFkIHBvaW50cyB0byB0aGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkCisJICogd2l0aCB0aGUgZXJyb3IuIE5vIG5ldyBkZXNjcmlwdG9ycyBhcmUgZmV0Y2hlZCB1bnRpbCB0aGUgSVFFCisJICogaXMgY2xlYXJlZC4KKwkgKi8KKwlpZiAoZmF1bHQgJiBETUFfRlNUU19JUUUpIHsKKwkJaGVhZCA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0lRSF9SRUcpOworCQlpZiAoKGhlYWQgPj4gNCkgPT0gaW5kZXgpIHsKKwkJCW1lbWNweSgmcWktPmRlc2NbaW5kZXhdLCAmcWktPmRlc2Nbd2FpdF9pbmRleF0sCisJCQkJCXNpemVvZihzdHJ1Y3QgcWlfZGVzYykpOworCQkJX19pb21tdV9mbHVzaF9jYWNoZShpb21tdSwgJnFpLT5kZXNjW2luZGV4XSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBxaV9kZXNjKSk7CisJCQl3cml0ZWwoRE1BX0ZTVFNfSVFFLCBpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogU3VibWl0IHRoZSBxdWV1ZWQgaW52YWxpZGF0aW9uIGRlc2NyaXB0b3IgdG8gdGhlIHJlbWFwcGluZwogICogaGFyZHdhcmUgdW5pdCBhbmQgd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24uCiAgKi8KLXZvaWQgcWlfc3VibWl0X3N5bmMoc3RydWN0IHFpX2Rlc2MgKmRlc2MsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCitpbnQgcWlfc3VibWl0X3N5bmMoc3RydWN0IHFpX2Rlc2MgKmRlc2MsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCiB7CisJaW50IHJjID0gMDsKIAlzdHJ1Y3QgcV9pbnZhbCAqcWkgPSBpb21tdS0+cWk7CiAJc3RydWN0IHFpX2Rlc2MgKmh3LCB3YWl0X2Rlc2M7CiAJaW50IHdhaXRfaW5kZXgsIGluZGV4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXFpKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJaHcgPSBxaS0+ZGVzYzsKIApAQCAtNjAxLDcgKzY0MSw4IEBACiAKIAlod1tpbmRleF0gPSAqZGVzYzsKIAotCXdhaXRfZGVzYy5sb3cgPSBRSV9JV0RfU1RBVFVTX0RBVEEoMikgfCBRSV9JV0RfU1RBVFVTX1dSSVRFIHwgUUlfSVdEX1RZUEU7CisJd2FpdF9kZXNjLmxvdyA9IFFJX0lXRF9TVEFUVVNfREFUQShRSV9ET05FKSB8CisJCQlRSV9JV0RfU1RBVFVTX1dSSVRFIHwgUUlfSVdEX1RZUEU7CiAJd2FpdF9kZXNjLmhpZ2ggPSB2aXJ0X3RvX3BoeXMoJnFpLT5kZXNjX3N0YXR1c1t3YWl0X2luZGV4XSk7CiAKIAlod1t3YWl0X2luZGV4XSA9IHdhaXRfZGVzYzsKQEAgLTYxMiwxMyArNjUzLDExIEBACiAJcWktPmZyZWVfaGVhZCA9IChxaS0+ZnJlZV9oZWFkICsgMikgJSBRSV9MRU5HVEg7CiAJcWktPmZyZWVfY250IC09IDI7CiAKLQlzcGluX2xvY2soJmlvbW11LT5yZWdpc3Rlcl9sb2NrKTsKIAkvKgogCSAqIHVwZGF0ZSB0aGUgSFcgdGFpbCByZWdpc3RlciBpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZgogCSAqIG5ldyBkZXNjcmlwdG9ycy4KIAkgKi8KIAl3cml0ZWwocWktPmZyZWVfaGVhZCA8PCA0LCBpb21tdS0+cmVnICsgRE1BUl9JUVRfUkVHKTsKLQlzcGluX3VubG9jaygmaW9tbXUtPnJlZ2lzdGVyX2xvY2spOwogCiAJd2hpbGUgKHFpLT5kZXNjX3N0YXR1c1t3YWl0X2luZGV4XSAhPSBRSV9ET05FKSB7CiAJCS8qCkBAIC02MjgsMTUgKzY2NywyMSBAQAogCQkgKiBhIGRlYWRsb2NrIHdoZXJlIHRoZSBpbnRlcnJ1cHQgY29udGV4dCBjYW4gd2FpdCBpbmRlZmluaXRlbHkKIAkJICogZm9yIGZyZWUgc2xvdHMgaW4gdGhlIHF1ZXVlLgogCQkgKi8KKwkJcmMgPSBxaV9jaGVja19mYXVsdChpb21tdSwgaW5kZXgpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwogCQlzcGluX3VubG9jaygmcWktPnFfbG9jayk7CiAJCWNwdV9yZWxheCgpOwogCQlzcGluX2xvY2soJnFpLT5xX2xvY2spOwogCX0KLQotCXFpLT5kZXNjX3N0YXR1c1tpbmRleF0gPSBRSV9ET05FOworb3V0OgorCXFpLT5kZXNjX3N0YXR1c1tpbmRleF0gPSBxaS0+ZGVzY19zdGF0dXNbd2FpdF9pbmRleF0gPSBRSV9ET05FOwogCiAJcmVjbGFpbV9mcmVlX2Rlc2MocWkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFpLT5xX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTY0OSwxMyArNjk0LDEzIEBACiAJZGVzYy5sb3cgPSBRSV9JRUNfVFlQRTsKIAlkZXNjLmhpZ2ggPSAwOwogCisJLyogc2hvdWxkIG5ldmVyIGZhaWwgKi8KIAlxaV9zdWJtaXRfc3luYygmZGVzYywgaW9tbXUpOwogfQogCiBpbnQgcWlfZmx1c2hfY29udGV4dChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLCB1MTYgc2lkLCB1OCBmbSwKIAkJICAgICB1NjQgdHlwZSwgaW50IG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKQogewotCiAJc3RydWN0IHFpX2Rlc2MgZGVzYzsKIAogCWlmIChub25fcHJlc2VudF9lbnRyeV9mbHVzaCkgewpAQCAtNjY5LDEwICs3MTQsNyBAQAogCQkJfCBRSV9DQ19HUkFOKHR5cGUpIHwgUUlfQ0NfVFlQRTsKIAlkZXNjLmhpZ2ggPSAwOwogCi0JcWlfc3VibWl0X3N5bmMoJmRlc2MsIGlvbW11KTsKLQotCXJldHVybiAwOwotCisJcmV0dXJuIHFpX3N1Ym1pdF9zeW5jKCZkZXNjLCBpb21tdSk7CiB9CiAKIGludCBxaV9mbHVzaF9pb3RsYihzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLCB1NjQgYWRkciwKQEAgLTcwMiwxMCArNzQ0LDcgQEAKIAlkZXNjLmhpZ2ggPSBRSV9JT1RMQl9BRERSKGFkZHIpIHwgUUlfSU9UTEJfSUgoaWgpCiAJCXwgUUlfSU9UTEJfQU0oc2l6ZV9vcmRlcik7CiAKLQlxaV9zdWJtaXRfc3luYygmZGVzYywgaW9tbXUpOwotCi0JcmV0dXJuIDA7Ci0KKwlyZXR1cm4gcWlfc3VibWl0X3N5bmMoJmRlc2MsIGlvbW11KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZwppbmRleCBlYWNmYjEzLi45YWE0ZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnCkBAIC0xNDMsNyArMTQzLDcgQEAKIAogY29uZmlnIEhPVFBMVUdfUENJX1JQQQogCXRyaXN0YXRlICJSUEEgUENJIEhvdHBsdWcgZHJpdmVyIgotCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMgJiYgUFBDNjQgJiYgIUhPVFBMVUdfUENJX0ZBS0UKKwlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTICYmIEVFSCAmJiAhSE9UUExVR19QQ0lfRkFLRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSUEEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgUENJIEhvdHBsdWcuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCmluZGV4IGExM2FiZjUuLjg0NTBmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYwpAQCAtMjI1LDcgKzIyNSw4IEBACiAKIHZvaWQgY3BxaHBfY3JlYXRlX2RlYnVnZnNfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7Ci0JY3RybC0+ZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShjdHJsLT5wY2lfZGV2LT5kZXYuYnVzX2lkLCBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKKwljdHJsLT5kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRldl9uYW1lKCZjdHJsLT5wY2lfZGV2LT5kZXYpLAorCQkJCQkgICBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKIH0KIAogdm9pZCBjcHFocF9yZW1vdmVfZGVidWdmc19maWxlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCmluZGV4IGRiODUyODQuLjM5YWUzNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaApAQCAtMTExLDYgKzExMSw3IEBACiAJaW50IGNtZF9idXN5OwogCXVuc2lnbmVkIGludCBub19jbWRfY29tcGxldGU6MTsKIAl1bnNpZ25lZCBpbnQgbGlua19hY3RpdmVfcmVwb3J0aW5nOjE7CisJdW5zaWduZWQgaW50IG5vdGlmaWNhdGlvbl9lbmFibGVkOjE7CiB9OwogCiAjZGVmaW5lIElOVF9CVVRUT05fSUdOT1JFCQkwCkBAIC0xNzAsNiArMTcxLDcgQEAKIGV4dGVybiBpbnQgcGNpZWhwX3VuY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKIGV4dGVybiB2b2lkIHBjaWVocF9xdWV1ZV9wdXNoYnV0dG9uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0cnVjdCBjb250cm9sbGVyICpwY2llX2luaXQoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpOworaW50IHBjaWVfaW5pdF9ub3RpZmljYXRpb24oc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogaW50IHBjaWVocF9lbmFibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKIGludCBwY2llaHBfZGlzYWJsZV9zbG90KHN0cnVjdCBzbG90ICpwX3Nsb3QpOwogaW50IHBjaWVfZW5hYmxlX25vdGlmaWNhdGlvbihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKaW5kZXggYzI0ODU1NC4uNjgxZTM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwpAQCAtNDM0LDYgKzQzNCwxMyBAQAogCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9jdGxyOwogCX0KIAorCS8qIEVuYWJsZSBldmVudHMgYWZ0ZXIgd2UgaGF2ZSBzZXR1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzICovCisJcmMgPSBwY2llX2luaXRfbm90aWZpY2F0aW9uKGN0cmwpOworCWlmIChyYykgeworCQljdHJsX2VycihjdHJsLCAiTm90aWZpY2F0aW9uIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9yZWxlYXNlX2N0bHI7CisJfQorCiAJLyogQ2hlY2sgaWYgc2xvdCBpcyBvY2N1cGllZCAqLwogCXRfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAl0X3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyh0X3Nsb3QsICZ2YWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IDcxYTgwMTIuLjdhMTZjNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCkBAIC05MzQsNyArOTM0LDcgQEAKIAkJY3RybF93YXJuKGN0cmwsICJDYW5ub3QgZGlzYWJsZSBzb2Z0d2FyZSBub3RpZmljYXRpb25cbiIpOwogfQogCi1zdGF0aWMgaW50IHBjaWVfaW5pdF9ub3RpZmljYXRpb24oc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCitpbnQgcGNpZV9pbml0X25vdGlmaWNhdGlvbihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKIAlpZiAocGNpZWhwX3JlcXVlc3RfaXJxKGN0cmwpKQogCQlyZXR1cm4gLTE7CkBAIC05NDIsMTMgKzk0MiwxNyBAQAogCQlwY2llaHBfZnJlZV9pcnEoY3RybCk7CiAJCXJldHVybiAtMTsKIAl9CisJY3RybC0+bm90aWZpY2F0aW9uX2VuYWJsZWQgPSAxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwY2llX3NodXRkb3duX25vdGlmaWNhdGlvbihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKLQlwY2llX2Rpc2FibGVfbm90aWZpY2F0aW9uKGN0cmwpOwotCXBjaWVocF9mcmVlX2lycShjdHJsKTsKKwlpZiAoY3RybC0+bm90aWZpY2F0aW9uX2VuYWJsZWQpIHsKKwkJcGNpZV9kaXNhYmxlX25vdGlmaWNhdGlvbihjdHJsKTsKKwkJcGNpZWhwX2ZyZWVfaXJxKGN0cmwpOworCQljdHJsLT5ub3RpZmljYXRpb25fZW5hYmxlZCA9IDA7CisJfQogfQogCiBzdGF0aWMgaW50IHBjaWVfaW5pdF9zbG90KHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQpAQCAtMTExMCwxMyArMTExNCw4IEBACiAJaWYgKHBjaWVfaW5pdF9zbG90KGN0cmwpKQogCQlnb3RvIGFib3J0X2N0cmw7CiAKLQlpZiAocGNpZV9pbml0X25vdGlmaWNhdGlvbihjdHJsKSkKLQkJZ290byBhYm9ydF9zbG90OwotCiAJcmV0dXJuIGN0cmw7CiAKLWFib3J0X3Nsb3Q6Ci0JcGNpZV9jbGVhbnVwX3Nsb3QoY3RybCk7CiBhYm9ydF9jdHJsOgogCWtmcmVlKGN0cmwpOwogYWJvcnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCBmNGI3Yzc5Li5mM2Y2ODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTYxLDYgKzYxLDggQEAKIC8qIGdsb2JhbCBpb21tdSBsaXN0LCBzZXQgTlVMTCBmb3IgaWdub3JlZCBETUFSIHVuaXRzICovCiBzdGF0aWMgc3RydWN0IGludGVsX2lvbW11ICoqZ19pb21tdXM7CiAKK3N0YXRpYyBpbnQgcndiZl9xdWlyazsKKwogLyoKICAqIDA6IFByZXNlbnQKICAqIDEtMTE6IFJlc2VydmVkCkBAIC03ODUsNyArNzg3LDcgQEAKIAl1MzIgdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAotCWlmICghY2FwX3J3YmYoaW9tbXUtPmNhcCkpCisJaWYgKCFyd2JmX3F1aXJrICYmICFjYXBfcndiZihpb21tdS0+Y2FwKSkKIAkJcmV0dXJuOwogCXZhbCA9IGlvbW11LT5nY21kIHwgRE1BX0dDTURfV0JGOwogCkBAIC0zMTM3LDMgKzMxMzksMTUgQEAKIAkudW5tYXAJCT0gaW50ZWxfaW9tbXVfdW5tYXBfcmFuZ2UsCiAJLmlvdmFfdG9fcGh5cwk9IGludGVsX2lvbW11X2lvdmFfdG9fcGh5cywKIH07CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19pb21tdV9yd2JmKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyoKKwkgKiBNb2JpbGUgNCBTZXJpZXMgQ2hpcHNldCBuZWdsZWN0cyB0byBzZXQgUldCRiBjYXBhYmlsaXR5LAorCSAqIGJ1dCBuZWVkcyBpdDoKKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJETUFSOiBGb3JjaW5nIHdyaXRlLWJ1ZmZlciBmbHVzaCBjYXBhYmlsaXR5XG4iKTsKKwlyd2JmX3F1aXJrID0gMTsKK30KKworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MmE0MCwgcXVpcmtfaW9tbXVfcndiZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCBmNzgzNzFiLi5iNzIxYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAl1OCAgaXJ0ZV9tYXNrOwogfTsKIAotI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIHN0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgKmdldF9vbmVfZnJlZV9pcnFfMl9pb21tdShpbnQgY3B1KQogewogCXN0cnVjdCBpcnFfMl9pb21tdSAqaW9tbXU7CkBAIC0yMDcsNyArMjA3LDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyB2b2lkIHFpX2ZsdXNoX2llYyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCBpbnQgaW5kZXgsIGludCBtYXNrKQorc3RhdGljIGludCBxaV9mbHVzaF9pZWMoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IGluZGV4LCBpbnQgbWFzaykKIHsKIAlzdHJ1Y3QgcWlfZGVzYyBkZXNjOwogCkBAIC0yMTUsNyArMjE1LDcgQEAKIAkJICAgfCBRSV9JRUNfU0VMRUNUSVZFOwogCWRlc2MuaGlnaCA9IDA7CiAKLQlxaV9zdWJtaXRfc3luYygmZGVzYywgaW9tbXUpOworCXJldHVybiBxaV9zdWJtaXRfc3luYygmZGVzYywgaW9tbXUpOwogfQogCiBpbnQgbWFwX2lycV90b19pcnRlX2hhbmRsZShpbnQgaXJxLCB1MTYgKnN1Yl9oYW5kbGUpCkBAIC0yODMsNiArMjgzLDcgQEAKIAogaW50IG1vZGlmeV9pcnRlKGludCBpcnEsIHN0cnVjdCBpcnRlICppcnRlX21vZGlmaWVkKQogeworCWludCByYzsKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGlydGUgKmlydGU7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKQEAgLTMwMywxNCArMzA0LDE1IEBACiAJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgaXJ0ZV9tb2RpZmllZC0+bG93IHwgKDEgPDwgMSkpOwogCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsIGlydGUsIHNpemVvZigqaXJ0ZSkpOwogCi0JcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgMCk7Ci0KKwlyYyA9IHFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIDApOwogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiByYzsKIH0KIAogaW50IGZsdXNoX2lydGUoaW50IGlycSkKIHsKKwlpbnQgcmM7CiAJaW50IGluZGV4OwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CkBAIC0zMjYsMTAgKzMyOCwxMCBAQAogCiAJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXggKyBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CiAKLQlxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CisJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdHJ1Y3QgaW50ZWxfaW9tbXUgKm1hcF9pb2FwaWNfdG9faXIoaW50IGFwaWMpCkBAIC0zNTUsNiArMzU3LDcgQEAKIAogaW50IGZyZWVfaXJ0ZShpbnQgaXJxKQogeworCWludCByYyA9IDA7CiAJaW50IGluZGV4LCBpOwogCXN0cnVjdCBpcnRlICppcnRlOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CkBAIC0zNzUsNyArMzc4LDcgQEAKIAlpZiAoIWlycV9pb21tdS0+c3ViX2hhbmRsZSkgewogCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgaXJxX2lvbW11LT5pcnRlX21hc2spOyBpKyspCiAJCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCAwKTsKLQkJcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgaXJxX2lvbW11LT5pcnRlX21hc2spOworCQlyYyA9IHFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsKIAl9CiAKIAlpcnFfaW9tbXUtPmlvbW11ID0gTlVMTDsKQEAgLTM4NSw3ICszODgsNyBAQAogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBpb21tdV9zZXRfaW50cl9yZW1hcHBpbmcoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IG1vZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IDQ0ZjE1ZmYuLmJhYmEyZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0xMDMsMTQgKzEwMywxMiBAQAogCX0KIH0KIAotLyoKLSAqIEVzc2VudGlhbGx5LCB0aGlzIGlzICgoMSA8PCAoMSA8PCB4KSkgLSAxKSwgYnV0IHdpdGhvdXQgdGhlCi0gKiB1bmRlZmluZWRuZXNzIG9mIGEgPDwgMzIuCi0gKi8KIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyB1MzIgbXNpX21hc2sodW5zaWduZWQgeCkKIHsKLQlzdGF0aWMgY29uc3QgdTMyIG1hc2tbXSA9IHsgMSwgMiwgNCwgMHhmLCAweGZmLCAweGZmZmYsIDB4ZmZmZmZmZmYgfTsKLQlyZXR1cm4gbWFza1t4XTsKKwkvKiBEb24ndCBzaGlmdCBieSA+PSB3aWR0aCBvZiB0eXBlICovCisJaWYgKHggPj0gNSkKKwkJcmV0dXJuIDB4ZmZmZmZmZmY7CisJcmV0dXJuICgxIDw8ICgxIDw8IHgpKSAtIDE7CiB9CiAKIHN0YXRpYyB2b2lkIG1zaXhfZmx1c2hfd3JpdGVzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggZTNlZmU2Yi4uNmQ2MTIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTE1NDAsMTYgKzE1NDAsMjEgQEAKIH0KIAogLyoqCi0gKglwY2lfcmVxdWVzdF9yZWdpb24gLSBSZXNlcnZlZCBQQ0kgSS9PIGFuZCBtZW1vcnkgcmVzb3VyY2UKKyAqCV9fcGNpX3JlcXVlc3RfcmVnaW9uIC0gUmVzZXJ2ZWQgUENJIEkvTyBhbmQgbWVtb3J5IHJlc291cmNlCiAgKglAcGRldjogUENJIGRldmljZSB3aG9zZSByZXNvdXJjZXMgYXJlIHRvIGJlIHJlc2VydmVkCiAgKglAYmFyOiBCQVIgdG8gYmUgcmVzZXJ2ZWQKICAqCUByZXNfbmFtZTogTmFtZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2UuCisgKglAZXhjbHVzaXZlOiB3aGV0aGVyIHRoZSByZWdpb24gYWNjZXNzIGlzIGV4Y2x1c2l2ZSBvciBub3QKICAqCiAgKglNYXJrIHRoZSBQQ0kgcmVnaW9uIGFzc29jaWF0ZWQgd2l0aCBQQ0kgZGV2aWNlIEBwZGV2IEJSIEBiYXIgYXMKICAqCWJlaW5nIHJlc2VydmVkIGJ5IG93bmVyIEByZXNfbmFtZS4gIERvIG5vdCBhY2Nlc3MgYW55CiAgKglhZGRyZXNzIGluc2lkZSB0aGUgUENJIHJlZ2lvbnMgdW5sZXNzIHRoaXMgY2FsbCByZXR1cm5zCiAgKglzdWNjZXNzZnVsbHkuCiAgKgorICoJSWYgQGV4Y2x1c2l2ZSBpcyBzZXQsIHRoZW4gdGhlIHJlZ2lvbiBpcyBtYXJrZWQgc28gdGhhdCB1c2Vyc3BhY2UKKyAqCWlzIGV4cGxpY2l0bHkgbm90IGFsbG93ZWQgdG8gbWFwIHRoZSByZXNvdXJjZSB2aWEgL2Rldi9tZW0gb3IKKyAqIAlzeXNmcyBNTUlPIGFjY2Vzcy4KKyAqCiAgKglSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgJUVCVVNZIG9uIGVycm9yLiAgQSB3YXJuaW5nCiAgKgltZXNzYWdlIGlzIGFsc28gcHJpbnRlZCBvbiBmYWlsdXJlLgogICovCkBAIC0xNTg4LDEyICsxNTkzLDEyIEBACiB9CiAKIC8qKgotICoJcGNpX3JlcXVlc3RfcmVnaW9uIC0gUmVzZXJ2ZWQgUENJIEkvTyBhbmQgbWVtb3J5IHJlc291cmNlCisgKglwY2lfcmVxdWVzdF9yZWdpb24gLSBSZXNlcnZlIFBDSSBJL08gYW5kIG1lbW9yeSByZXNvdXJjZQogICoJQHBkZXY6IFBDSSBkZXZpY2Ugd2hvc2UgcmVzb3VyY2VzIGFyZSB0byBiZSByZXNlcnZlZAogICoJQGJhcjogQkFSIHRvIGJlIHJlc2VydmVkCi0gKglAcmVzX25hbWU6IE5hbWUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlLgorICoJQHJlc19uYW1lOiBOYW1lIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZQogICoKLSAqCU1hcmsgdGhlIFBDSSByZWdpb24gYXNzb2NpYXRlZCB3aXRoIFBDSSBkZXZpY2UgQHBkZXYgQlIgQGJhciBhcworICoJTWFyayB0aGUgUENJIHJlZ2lvbiBhc3NvY2lhdGVkIHdpdGggUENJIGRldmljZSBAcGRldiBCQVIgQGJhciBhcwogICoJYmVpbmcgcmVzZXJ2ZWQgYnkgb3duZXIgQHJlc19uYW1lLiAgRG8gbm90IGFjY2VzcyBhbnkKICAqCWFkZHJlc3MgaW5zaWRlIHRoZSBQQ0kgcmVnaW9ucyB1bmxlc3MgdGhpcyBjYWxsIHJldHVybnMKICAqCXN1Y2Nlc3NmdWxseS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggMjZkZGY3OGEuLjA3YzBhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0xNiwyMSArMTYsMjEgQEAKICNlbmRpZgogCiAvKioKLSAqIEZpcm13YXJlIFBNIGNhbGxiYWNrcworICogc3RydWN0IHBjaV9wbGF0Zm9ybV9wbV9vcHMgLSBGaXJtd2FyZSBQTSBjYWxsYmFja3MKICAqCi0gKiBAaXNfbWFuYWdlYWJsZSAtIHJldHVybnMgJ3RydWUnIGlmIGdpdmVuIGRldmljZSBpcyBwb3dlciBtYW5hZ2VhYmxlIGJ5IHRoZQotICogICAgICAgICAgICAgICAgICBwbGF0Zm9ybSBmaXJtd2FyZQorICogQGlzX21hbmFnZWFibGU6IHJldHVybnMgJ3RydWUnIGlmIGdpdmVuIGRldmljZSBpcyBwb3dlciBtYW5hZ2VhYmxlIGJ5IHRoZQorICogICAgICAgICAgICAgICAgIHBsYXRmb3JtIGZpcm13YXJlCiAgKgotICogQHNldF9zdGF0ZSAtIGludm9rZXMgdGhlIHBsYXRmb3JtIGZpcm13YXJlIHRvIHNldCB0aGUgZGV2aWNlJ3MgcG93ZXIgc3RhdGUKKyAqIEBzZXRfc3RhdGU6IGludm9rZXMgdGhlIHBsYXRmb3JtIGZpcm13YXJlIHRvIHNldCB0aGUgZGV2aWNlJ3MgcG93ZXIgc3RhdGUKICAqCi0gKiBAY2hvb3NlX3N0YXRlIC0gcmV0dXJucyBQQ0kgcG93ZXIgc3RhdGUgb2YgZ2l2ZW4gZGV2aWNlIHByZWZlcnJlZCBieSB0aGUKLSAqICAgICAgICAgICAgICAgICBwbGF0Zm9ybTsgdG8gYmUgdXNlZCBkdXJpbmcgc3lzdGVtLXdpZGUgdHJhbnNpdGlvbnMgZnJvbSBhCi0gKiAgICAgICAgICAgICAgICAgc2xlZXBpbmcgc3RhdGUgdG8gdGhlIHdvcmtpbmcgc3RhdGUgYW5kIHZpY2UgdmVyc2EKKyAqIEBjaG9vc2Vfc3RhdGU6IHJldHVybnMgUENJIHBvd2VyIHN0YXRlIG9mIGdpdmVuIGRldmljZSBwcmVmZXJyZWQgYnkgdGhlCisgKiAgICAgICAgICAgICAgICBwbGF0Zm9ybTsgdG8gYmUgdXNlZCBkdXJpbmcgc3lzdGVtLXdpZGUgdHJhbnNpdGlvbnMgZnJvbSBhCisgKiAgICAgICAgICAgICAgICBzbGVlcGluZyBzdGF0ZSB0byB0aGUgd29ya2luZyBzdGF0ZSBhbmQgdmljZSB2ZXJzYQogICoKLSAqIEBjYW5fd2FrZXVwIC0gcmV0dXJucyAndHJ1ZScgaWYgZ2l2ZW4gZGV2aWNlIGlzIGNhcGFibGUgb2Ygd2FraW5nIHVwIHRoZQotICogICAgICAgICAgICAgICBzeXN0ZW0gZnJvbSBhIHNsZWVwaW5nIHN0YXRlCisgKiBAY2FuX3dha2V1cDogcmV0dXJucyAndHJ1ZScgaWYgZ2l2ZW4gZGV2aWNlIGlzIGNhcGFibGUgb2Ygd2FraW5nIHVwIHRoZQorICogICAgICAgICAgICAgIHN5c3RlbSBmcm9tIGEgc2xlZXBpbmcgc3RhdGUKICAqCi0gKiBAc2xlZXBfd2FrZSAtIGVuYWJsZXMvZGlzYWJsZXMgdGhlIHN5c3RlbSB3YWtlIHVwIGNhcGFiaWxpdHkgb2YgZ2l2ZW4gZGV2aWNlCisgKiBAc2xlZXBfd2FrZTogZW5hYmxlcy9kaXNhYmxlcyB0aGUgc3lzdGVtIHdha2UgdXAgY2FwYWJpbGl0eSBvZiBnaXZlbiBkZXZpY2UKICAqCiAgKiBJZiBnaXZlbiBwbGF0Zm9ybSBpcyBnZW5lcmFsbHkgY2FwYWJsZSBvZiBwb3dlciBtYW5hZ2luZyBQQ0kgZGV2aWNlcywgYWxsIG9mCiAgKiB0aGVzZSBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCmluZGV4IGFhYzcwMDYuLjM4MjU3NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwpAQCAtMTA4LDYgKzEwOCwzNyBAQAogfQogI2VuZGlmICAvKiAgMCAgKi8KIAorCitzdGF0aWMgdm9pZCBzZXRfZGV2aWNlX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKQoreworCWJvb2wgZW5hYmxlID0gKigoYm9vbCAqKWRhdGEpOworCisJaWYgKGRldi0+cGNpZV90eXBlICE9IFBDSUVfUkNfUE9SVCAmJgorCSAgICBkZXYtPnBjaWVfdHlwZSAhPSBQQ0lFX1NXX1VQU1RSRUFNX1BPUlQgJiYKKwkgICAgZGV2LT5wY2llX3R5cGUgIT0gUENJRV9TV19ET1dOU1RSRUFNX1BPUlQpCisJCXJldHVybjsKKworCWlmIChlbmFibGUpCisJCXBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoZGV2KTsKKwllbHNlCisJCXBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKGRldik7Cit9CisKKy8qKgorICogc2V0X2Rvd25zdHJlYW1fZGV2aWNlc19lcnJvcl9yZXBvcnRpbmcgLSBlbmFibGUvZGlzYWJsZSB0aGUgZXJyb3IgcmVwb3J0aW5nICBiaXRzIG9uIHRoZSByb290IHBvcnQgYW5kIGl0cyBkb3duc3RyZWFtIHBvcnRzLgorICogQGRldjogcG9pbnRlciB0byByb290IHBvcnQncyBwY2lfZGV2IGRhdGEgc3RydWN0dXJlCisgKiBAZW5hYmxlOiB0cnVlID0gZW5hYmxlIGVycm9yIHJlcG9ydGluZywgZmFsc2UgPSBkaXNhYmxlIGVycm9yIHJlcG9ydGluZy4KKyAqLworc3RhdGljIHZvaWQgc2V0X2Rvd25zdHJlYW1fZGV2aWNlc19lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgIGJvb2wgZW5hYmxlKQoreworCXNldF9kZXZpY2VfZXJyb3JfcmVwb3J0aW5nKGRldiwgJmVuYWJsZSk7CisKKwlpZiAoIWRldi0+c3Vib3JkaW5hdGUpCisJCXJldHVybjsKKwlwY2lfd2Fsa19idXMoZGV2LT5zdWJvcmRpbmF0ZSwgc2V0X2RldmljZV9lcnJvcl9yZXBvcnRpbmcsICZlbmFibGUpOworfQorCiBzdGF0aWMgaW50IGZpbmRfZGV2aWNlX2l0ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CkBAIC01MjUsMTUgKzU1NiwxMSBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZXJfcG9zICsgUENJX0VSUl9VTkNPUl9TVEFUVVMsICZyZWczMik7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBhZXJfcG9zICsgUENJX0VSUl9VTkNPUl9TVEFUVVMsIHJlZzMyKTsKIAotCS8qIEVuYWJsZSBSb290IFBvcnQgZGV2aWNlIHJlcG9ydGluZyBlcnJvciBpdHNlbGYgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MrUENJX0VYUF9ERVZDVEwsICZyZWcxNik7Ci0JcmVnMTYgPSByZWcxNiB8Ci0JCVBDSV9FWFBfREVWQ1RMX0NFUkUgfAotCQlQQ0lfRVhQX0RFVkNUTF9ORkVSRSB8Ci0JCVBDSV9FWFBfREVWQ1RMX0ZFUkUgfAotCQlQQ0lfRVhQX0RFVkNUTF9VUlJFOwotCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MrUENJX0VYUF9ERVZDVEwsCi0JCXJlZzE2KTsKKwkvKgorCSAqIEVuYWJsZSBlcnJvciByZXBvcnRpbmcgZm9yIHRoZSByb290IHBvcnQgZGV2aWNlIGFuZCBkb3duc3RyZWFtIHBvcnQKKwkgKiBkZXZpY2VzLgorCSAqLworCXNldF9kb3duc3RyZWFtX2RldmljZXNfZXJyb3JfcmVwb3J0aW5nKHBkZXYsIHRydWUpOwogCiAJLyogRW5hYmxlIFJvb3QgUG9ydCdzIGludGVycnVwdCBpbiByZXNwb25zZSB0byBlcnJvciBtZXNzYWdlcyAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKQEAgLTU1Myw2ICs1ODAsMTIgQEAKIAl1MzIgcmVnMzI7CiAJaW50IHBvczsKIAorCS8qCisJICogRGlzYWJsZSBlcnJvciByZXBvcnRpbmcgZm9yIHRoZSByb290IHBvcnQgZGV2aWNlIGFuZCBkb3duc3RyZWFtIHBvcnQKKwkgKiBkZXZpY2VzLgorCSAqLworCXNldF9kb3duc3RyZWFtX2RldmljZXNfZXJyb3JfcmVwb3J0aW5nKHBkZXYsIGZhbHNlKTsKKwogCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CiAJLyogRGlzYWJsZSBSb290J3MgaW50ZXJydXB0IGluIHJlc3BvbnNlIHRvIGVycm9yIG1lc3NhZ2VzICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyBQQ0lfRVJSX1JPT1RfQ09NTUFORCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKaW5kZXggZjliODc0ZS4uNWVhNTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwpAQCAtOTcsMTQgKzk3LDEzIEBACiAKIAlwY2llX3BvcnRkcnZfc2F2ZV9jb25maWcoZGV2KTsKIAotCXBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoZGV2KTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwY2llX3BvcnRkcnZfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJa2ZyZWUocGNpX2dldF9kcnZkYXRhKGRldikpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGJhYWQwOTMuLjkyYjllZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KICNpbmNsdWRlICJwY2kuaCIKIAogaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwpAQCAtMTU4NCw2ICsxNTg1LDcgQEAKICAqLwogI2RlZmluZSBBTURfODEzWF9NSVNDCQkJMHg0MAogI2RlZmluZSBBTURfODEzWF9OT0lPQU1PREUJCSgxPDwwKQorI2RlZmluZSBBTURfODEzWF9SRVZfQjIJCQkweDEzCiAKIHN0YXRpYyB2b2lkIHF1aXJrX2Rpc2FibGVfYW1kXzgxM3hfYm9vdF9pbnRlcnJ1cHQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTE1OTEsNiArMTU5Myw4IEBACiAKIAlpZiAobm9pb2FwaWNxdWlyaykKIAkJcmV0dXJuOworCWlmIChkZXYtPnJldmlzaW9uID09IEFNRF84MTNYX1JFVl9CMikKKwkJcmV0dXJuOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgQU1EXzgxM1hfTUlTQywgJnBjaV9jb25maWdfZHdvcmQpOwogCXBjaV9jb25maWdfZHdvcmQgJj0gfkFNRF84MTNYX05PSU9BTU9ERTsKQEAgLTE3NDYsNiArMTc1MCwzMCBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCwgcXVpcmtfZTEwMF9pbnRlcnJ1cHQpOwogCisvKgorICogVGhlIDgyNTc1IGFuZCA4MjU5OCBtYXkgZXhwZXJpZW5jZSBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gdHJhbnNpdGlvbmluZworICogb3V0IG9mIEwwUy4gIFRvIHByZXZlbnQgdGhpcyB3ZSBuZWVkIHRvIGRpc2FibGUgTDBTIG9uIHRoZSBwY2ktZSBsaW5rCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGlzYWJsaW5nIEwwc1xuIik7CisJcGNpX2Rpc2FibGVfbGlua19zdGF0ZShkZXYsIFBDSUVfTElOS19TVEFURV9MMFMpOworfQorREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGE3LCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBhOSwgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwYjYsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGM2LCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBjNywgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwYzgsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGQ2LCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBkYiwgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZGQsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGUxLCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBlYywgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZjEsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGY0LCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTUwOCwgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBmaXh1cF9yZXYxXzUzYzgxMChzdHJ1Y3QgcGNpX2RldiogZGV2KQogewogCS8qIHJldiAxIG5jcjUzYzgxMCBjaGlwcyBkb24ndCBzZXQgdGhlIGNsYXNzIGF0IGFsbCB3aGljaCBtZWFucwpAQCAtMTk4MSw3ICsyMDA5LDYgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMDAwX1BDSUUsCiAJCQlxdWlya19tc2lfaHRfY2FwKTsKIAotCiAvKiBUaGUgblZpZGlhIENLODA0IGNoaXBzZXQgbWF5IGhhdmUgMiBIVCBNU0kgbWFwcGluZ3MuCiAgKiBNU0kgYXJlIHN1cHBvcnRlZCBpZiB0aGUgTVNJIGNhcGFiaWxpdHkgc2V0IGluIGFueSBvZiB0aGVzZSBtYXBwaW5ncy4KICAqLwpAQCAtMjAzMiw2ICsyMDU5LDkgQEAKIAkJCSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMF9QWEIsCiAJCQkgaHRfZW5hYmxlX21zaV9tYXBwaW5nKTsKIAorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMyX0JSSURHRSwKKwkJCSBodF9lbmFibGVfbXNpX21hcHBpbmcpOworCiAvKiBUaGUgUDVOMzItU0xJIFByZW1pdW0gbW90aGVyYm9hcmQgZnJvbSBBc3VzIGhhcyBhIHByb2JsZW0gd2l0aCBtc2kKICAqIGZvciB0aGUgTUNQNTUgTklDLiBJdCBpcyBub3QgeWV0IGRldGVybWluZWQgd2hldGhlciB0aGUgbXNpIHByb2JsZW0KICAqIGFsc28gYWZmZWN0cyBvdGhlciBkZXZpY2VzLiBBcyBmb3Igbm93LCB0dXJuIG9mZiBtc2kgZm9yIHRoaXMgZGV2aWNlLgpAQCAtMjA0OCwxMCArMjA3OCwxMDQgQEAKIAkJCVBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSwKIAkJCW52ZW5ldF9tc2lfZGlzYWJsZSk7CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBudl9odF9lbmFibGVfbXNpX21hcHBpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqaG9zdF9icmlkZ2U7CisJaW50IHBvczsKKwlpbnQgaSwgZGV2X25vOworCWludCBmb3VuZCA9IDA7CisKKwlkZXZfbm8gPSBkZXYtPmRldmZuID4+IDM7CisJZm9yIChpID0gZGV2X25vOyBpID49IDA7IGktLSkgeworCQlob3N0X2JyaWRnZSA9IHBjaV9nZXRfc2xvdChkZXYtPmJ1cywgUENJX0RFVkZOKGksIDApKTsKKwkJaWYgKCFob3N0X2JyaWRnZSkKKwkJCWNvbnRpbnVlOworCisJCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoaG9zdF9icmlkZ2UsIEhUX0NBUFRZUEVfU0xBVkUpOworCQlpZiAocG9zICE9IDApIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9kZXZfcHV0KGhvc3RfYnJpZGdlKTsKKwl9CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm47CisKKwkvKiByb290IGRpZCB0aGF0ICEgKi8KKwlpZiAobXNpX2h0X2NhcF9lbmFibGVkKGhvc3RfYnJpZGdlKSkKKwkJZ290byBvdXQ7CisKKwlodF9lbmFibGVfbXNpX21hcHBpbmcoZGV2KTsKKworb3V0OgorCXBjaV9kZXZfcHV0KGhvc3RfYnJpZGdlKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGh0X2Rpc2FibGVfbXNpX21hcHBpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcG9zLCB0dGwgPSA0ODsKKworCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoZGV2LCBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKKwl3aGlsZSAocG9zICYmIHR0bC0tKSB7CisJCXU4IGZsYWdzOworCisJCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHBvcyArIEhUX01TSV9GTEFHUywKKwkJCQkJICZmbGFncykgPT0gMCkgeworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGlzYWJsaW5nIEhUIE1TSSBNYXBwaW5nXG4iKTsKKworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgSFRfTVNJX0ZMQUdTLAorCQkJCQkgICAgICBmbGFncyAmIH5IVF9NU0lfRkxBR1NfRU5BQkxFKTsKKwkJfQorCQlwb3MgPSBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkoZGV2LCBwb3MsCisJCQkJCQkgIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOworCX0KK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRfY2hlY2tfbXNpX21hcHBpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcG9zLCB0dGwgPSA0ODsKKwlpbnQgZm91bmQgPSAwOworCisJLyogY2hlY2sgaWYgdGhlcmUgaXMgSFQgTVNJIGNhcCBvciBlbmFibGVkIG9uIHRoaXMgZGV2aWNlICovCisJcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShkZXYsIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOworCXdoaWxlIChwb3MgJiYgdHRsLS0pIHsKKwkJdTggZmxhZ3M7CisKKwkJaWYgKGZvdW5kIDwgMSkKKwkJCWZvdW5kID0gMTsKKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgSFRfTVNJX0ZMQUdTLAorCQkJCQkgJmZsYWdzKSA9PSAwKSB7CisJCQlpZiAoZmxhZ3MgJiBIVF9NU0lfRkxBR1NfRU5BQkxFKSB7CisJCQkJaWYgKGZvdW5kIDwgMikgeworCQkJCQlmb3VuZCA9IDI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlwb3MgPSBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkoZGV2LCBwb3MsCisJCQkJCQkgIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOworCX0KKworCXJldHVybiBmb3VuZDsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IG52X21zaV9odF9jYXBfcXVpcmsoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqaG9zdF9icmlkZ2U7Ci0JaW50IHBvcywgdHRsID0gNDg7CisJaW50IHBvczsKKwlpbnQgZm91bmQ7CisKKwkvKiBFbmFibGluZyBIVCBNU0kgbWFwcGluZyBvbiB0aGlzIGRldmljZSBicmVha3MgTUNQNTEgKi8KKwlpZiAoZGV2LT5kZXZpY2UgPT0gMHgyNzApCisJCXJldHVybjsKKworCS8qIGNoZWNrIGlmIHRoZXJlIGlzIEhUIE1TSSBjYXAgb3IgZW5hYmxlZCBvbiB0aGlzIGRldmljZSAqLworCWZvdW5kID0gaHRfY2hlY2tfbXNpX21hcHBpbmcoZGV2KTsKKworCS8qIG5vIEhUIE1TSSBDQVAgKi8KKwlpZiAoZm91bmQgPT0gMCkKKwkJcmV0dXJuOwogCiAJLyoKIAkgKiBIVCBNU0kgbWFwcGluZyBzaG91bGQgYmUgZGlzYWJsZWQgb24gZGV2aWNlcyB0aGF0IGFyZSBiZWxvdwpAQCAtMjA2NywyNCArMjE5MSwxOSBAQAogCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoaG9zdF9icmlkZ2UsIEhUX0NBUFRZUEVfU0xBVkUpOwogCWlmIChwb3MgIT0gMCkgewogCQkvKiBIb3N0IGJyaWRnZSBpcyB0byBIVCAqLwotCQlodF9lbmFibGVfbXNpX21hcHBpbmcoZGV2KTsKKwkJaWYgKGZvdW5kID09IDEpIHsKKwkJCS8qIGl0IGlzIG5vdCBlbmFibGVkLCB0cnkgdG8gZW5hYmxlIGl0ICovCisJCQludl9odF9lbmFibGVfbXNpX21hcHBpbmcoZGV2KTsKKwkJfQogCQlyZXR1cm47CiAJfQogCi0JLyogSG9zdCBicmlkZ2UgaXMgbm90IHRvIEhULCBkaXNhYmxlIEhUIE1TSSBtYXBwaW5nIG9uIHRoaXMgZGV2aWNlICovCi0JcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShkZXYsIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOwotCXdoaWxlIChwb3MgJiYgdHRsLS0pIHsKLQkJdTggZmxhZ3M7CisJLyogSFQgTVNJIGlzIG5vdCBlbmFibGVkICovCisJaWYgKGZvdW5kID09IDEpCisJCXJldHVybjsKIAotCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBIVF9NU0lfRkxBR1MsCi0JCQkJCSAmZmxhZ3MpID09IDApIHsKLQkJCWRldl9pbmZvKCZkZXYtPmRldiwgIkRpc2FibGluZyBIVCBNU0kgbWFwcGluZyIpOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgSFRfTVNJX0ZMQUdTLAotCQkJCQkgICAgICBmbGFncyAmIH5IVF9NU0lfRkxBR1NfRU5BQkxFKTsKLQkJfQotCQlwb3MgPSBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkoZGV2LCBwb3MsCi0JCQkJCQkgIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOwotCX0KKwkvKiBIb3N0IGJyaWRnZSBpcyBub3QgdG8gSFQsIGRpc2FibGUgSFQgTVNJIG1hcHBpbmcgb24gdGhpcyBkZXZpY2UgKi8KKwlodF9kaXNhYmxlX21zaV9tYXBwaW5nKGRldik7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0FOWV9JRCwgbnZfbXNpX2h0X2NhcF9xdWlyayk7CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfQU5ZX0lELCBudl9tc2lfaHRfY2FwX3F1aXJrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3JvbS5jIGIvZHJpdmVycy9wY2kvcm9tLmMKaW5kZXggMjljYmU0Ny4uMzY4NjRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcm9tLmMKKysrIGIvZHJpdmVycy9wY2kvcm9tLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAogLyoqCiAgKiBwY2lfZ2V0X3JvbV9zaXplIC0gb2J0YWluIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgUk9NIGltYWdlCisgKiBAcGRldjogdGFyZ2V0IFBDSSBkZXZpY2UKICAqIEByb206IGtlcm5lbCB2aXJ0dWFsIHBvaW50ZXIgdG8gaW1hZ2Ugb2YgUk9NCiAgKiBAc2l6ZTogc2l6ZSBvZiBQQ0kgd2luZG93CiAgKiAgcmV0dXJuOiBzaXplIG9mIGFjdHVhbCBST00gaW1hZ2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IGZjMWRlNDYuLjkwMDEzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtNDY4LDEzICs0NjgsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmcGNtY2lhX3NvY2tldHNfbG9jayk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKSB7CiAJCXN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0ID0gUENNQ0lBX1NPQ0tFVChpKTsKQEAgLTQ5OCwxMyArNDk4LDEzIEBACiAgKiBQQ01DSUEgIkRyaXZlciIgQVBJCiAgKi8KIAotc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnBjbWNpYV9zb2NrZXRzX2xvY2spOwogCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShhdTF4MDBfcGNtY2lhX2h3X2luaXQpOyBpKyspIHsKLQkJcmV0ID0gYXUxeDAwX3BjbWNpYV9od19pbml0W2ldKGRldik7CisJCXJldCA9IGF1MXgwMF9wY21jaWFfaHdfaW5pdFtpXSgmZGV2LT5kZXYpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKIAl9CkBAIC01MTIsMTQgKzUxMiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTF4MDBfcGNtY2lhX2RyaXZlciA9IHsKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MXgwMF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlLAotCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCisJLnN1c3BlbmQgCT0gYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIApAQCAtNTMzLDggKzU0NSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhdTF4MDBfcGNtY2lhX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWlmICgoZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKSkpCi0JCXJldHVybiBlcnJvcjsKKwllcnJvciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTQ0LDcgKzU1NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4MDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MXgwMF9wY21jaWFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDcxNjUzYWIuLjQwZDQ5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMjM4LDYgKzEyMzgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIHN0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgcGNpY19vcGVyYXRpb25zID0gewogCS5pbml0CQkJPSBwY2ljX2luaXQsCiAJLmdldF9zdGF0dXMJCT0gcGNpY19nZXRfc3RhdHVzLApAQCAtMTI0OCwxMSArMTI1OCwxMyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGk4MjM2NV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiaTgyMzY1IiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTgyMzY1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpODIzNjUiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gaTgyMzY1X2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmk4MjM2NV9kZXZpY2U7CkBAIC0xMjYxLDcgKzEyNzMsNyBAQAogewogICAgIGludCBpLCByZXQ7CiAKLSAgICByZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CiAgICAgaWYgKHJldCkKIAlnb3RvIGVycl9vdXQ7CiAKQEAgLTEzMzcsNyArMTM0OSw3IEBACiAJcG5wX2Rpc2FibGVfZGV2KGk4MjM2NV9wbnBkZXYpOwogI2VuZGlmCiBlcnJfZHJpdmVyX3VucmVnaXN0ZXI6Ci0gICAgZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIGVycl9vdXQ6CiAgICAgcmV0dXJuIHJldDsKIH0gLyogaW5pdF9pODIzNjUgKi8KQEAgLTEzNjUsNyArMTM3Nyw3IEBACiAgICAgaWYgKGk4MjM2NV9wbnBkZXYpCiAgICAgCQlwbnBfZGlzYWJsZV9kZXYoaTgyMzY1X3BucGRldik7CiAjZW5kaWYKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CisgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogfSAvKiBleGl0X2k4MjM2NSAqLwogCiBtb2R1bGVfaW5pdChpbml0X2k4MjM2NSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCAyYWI0ZjIyLi42MmI0ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTY5NiwxMyArNjk2LDI1IEBACiAJLnNldF9tZW1fbWFwCQk9IHBjY19zZXRfbWVtX21hcCwKIH07CiAKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBjY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY2ZjIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiY2ZjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gY2ZjX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGNmY19kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjY19kZXZpY2UgPSB7CkBAIC03MTYsMTMgKzcyOCwxMyBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNjX2RldmljZSk7CiAJaWYgKHJldCl7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzU0LDcgKzc2Niw3IEBACiAJaWYgKHBjY19zb2NrZXRzID09IDApIHsKIAkJcHJpbnRrKCJzb2NrZXQgaXMgbm90IGZvdW5kLlxuIik7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODAyLDcgKzgxNCw3IEBACiAJaWYgKHBvbGxfaW50ZXJ2YWwgIT0gMCkKIAkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfdGltZXIpOwogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIH0gLyogZXhpdF9tMzJyX3BjYyAqLwogCiBtb2R1bGVfaW5pdChpbml0X20zMnJfcGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IDJmMTA4YzIuLjEyMDM0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtNjcyLDEzICs2NzIsMjUgQEAKIAkuc2V0X21lbV9tYXAJCT0gcGNjX3NldF9tZW1fbWFwLAogfTsKIAorc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwY2MiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwY2NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJwY2MiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gcGNjX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNjX2RldmljZSA9IHsKQEAgLTY5MiwxMyArNzA0LDEzIEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKIAlpZiAocmV0KXsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03MTUsNyArNzI3LDcgQEAKIAlpZiAocGNjX3NvY2tldHMgPT0gMCkgewogCQlwcmludGsoInNvY2tldCBpcyBub3QgZm91bmQuXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBjY19kZXZpY2UpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NjMsNyArNzc1LDcgQEAKIAlpZiAocG9sbF9pbnRlcnZhbCAhPSAwKQogCQlkZWxfdGltZXJfc3luYygmcG9sbF90aW1lcik7CiAKLQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogfSAvKiBleGl0X20zMnJfcGNjICovCiAKIG1vZHVsZV9pbml0KGluaXRfbTMycl9wY2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggYzBlMmFmYy4uZTU5MmUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBhbGlnbiwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBtYWtlX3Jlc291cmNlKDAsIG51bSwgSU9SRVNPVVJDRV9JTywKLQkJCQkJICAgICBzLT5kZXYuYnVzX2lkKTsKKwkJCQkJICAgICBkZXZfbmFtZSgmcy0+ZGV2KSk7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBtaW4gPSBiYXNlOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBjNWIyYTQ0Li5kOGRhNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIApAQCAtNzMsNyArNzMsNyBAQAogCSAqIEluaXRpYWxpc2UgYW55ICJvbi1ib2FyZCIgUENNQ0lBIHNvY2tldHMuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2ExMXgwX3BjbWNpYV9od19pbml0KTsgaSsrKSB7Ci0JCXJldCA9IHNhMTF4MF9wY21jaWFfaHdfaW5pdFtpXShkZXYpOworCQlyZXQgPSBzYTExeDBfcGNtY2lhX2h3X2luaXRbaV0oJmRldi0+ZGV2KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtODEsMTMgKzgxLDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJzYTExeDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlLAotCS5yZW1vdmUJCT0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSwKLQkubmFtZQkJPSAic2ExMXgwLXBjbWNpYSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lIAk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3JlbW92ZSwKKwkuc3VzcGVuZCAJPSBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogLyogc2ExMXgwX3BjbWNpYV9pbml0KCkKQEAgLTEwMCw3ICsxMTgsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBzYTExeDBfcGNtY2lhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOwogfQogCiAvKiBzYTExeDBfcGNtY2lhX2V4aXQoKQpAQCAtMTEwLDcgKzEyOCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExeDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIkpvaG4gRG9yc2V5IDxqb2huK0Bjcy5jbXUuZWR1PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGNpYy5jIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCmluZGV4IDJhNjEzZTkuLjlhZDk3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKQEAgLTM2MywxMyArMzYzLDI1IEBACiAgICAgcmV0dXJuIGlkOwogfQogCitzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRjaWNfZHJpdmVyID0gewotCS5uYW1lID0gInRjaWMtcGNtY2lhIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGNpY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGNpYy1wY21jaWEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSB0Y2ljX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0Y2ljX2RldmljZSA9IHsKQEAgLTM4Myw3ICszOTUsNyBAQAogICAgIGludCBpLCBzb2NrLCByZXQgPSAwOwogICAgIHVfaW50IG1hc2ssIHNjYW47CiAKLSAgICBpZiAoZHJpdmVyX3JlZ2lzdGVyKCZ0Y2ljX2RyaXZlcikpCisgICAgaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGNpY19kcml2ZXIpKQogCXJldHVybiAtMTsKICAgICAKICAgICBwcmludGsoS0VSTl9JTkZPICJEYXRhYm9vayBUQ0lDLTIgUENNQ0lBIHByb2JlOiAiKTsKQEAgLTM5MSw3ICs0MDMsNyBAQAogCiAgICAgaWYgKCFyZXF1ZXN0X3JlZ2lvbih0Y2ljX2Jhc2UsIDE2LCAidGNpYy0yIikpIHsKIAlwcmludGsoImNvdWxkIG5vdCBhbGxvY2F0ZSBwb3J0cyxcbiAiKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogICAgIGVsc2UgewpAQCAtNDE0LDcgKzQyNiw3IEBACiAgICAgaWYgKHNvY2sgPT0gMCkgewogCXByaW50aygibm90IGZvdW5kLlxuIik7CiAJcmVsZWFzZV9yZWdpb24odGNpY19iYXNlLCAxNik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KIApAQCAtNTQyLDcgKzU1NCw3IEBACiAgICAgfQogCiAgICAgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRjaWNfZGV2aWNlKTsKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiB9IC8qIGV4aXRfdGNpYyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggYjJjNDEyNC4uNjU5NDIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNCwyNCArNzA0LDM3IEBACiAKIF9fc2V0dXAoInZyYzQxNzFfY2FyZD0iLCB2cmM0MTcxX2NhcmRfc2V0dXApOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdnJjNDE3MV9jYXJkX2RyaXZlciA9IHsKLQkubmFtZQkJPSB2cmM0MTcxX2NhcmRfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZyYzQxNzFfY2FyZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gdnJjNDE3MV9jYXJkX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kCT0gdnJjNDE3MV9jYXJkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2cmM0MTcxX2NhcmRfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdnJjNDE3MV9jYXJkX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZGV2aWNlKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTczNSwxMSArNzQ4LDEyIEBACiAJaWYgKHJldHZhbCA8IDApIHsKIAkJdnJjNDE3MV9yZW1vdmVfc29ja2V0cygpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RldmljZSk7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzLCBjb25uZWN0ZWQgdG8gSVJRICVkXG4iLCB2cmM0MTcxX2NhcmRfZHJpdmVyLm5hbWUsIHZyYzQxNzFfaXJxKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcywgY29ubmVjdGVkIHRvIElSUSAlZFxuIiwKKwkJdnJjNDE3MV9jYXJkX2RyaXZlci5kcml2ZXIubmFtZSwgdnJjNDE3MV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDksNyArNzYzLDcgQEAKIAlmcmVlX2lycSh2cmM0MTcxX2lycSwgdnJjNDE3MV9zb2NrZXRzKTsKIAl2cmM0MTcxX3JlbW92ZV9zb2NrZXRzKCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHZyYzQxNzFfY2FyZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCmluZGV4IDk0MzYzMTEuLjM2MDgwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwpAQCAtMTUsOCArMTUsNyBAQAogaWYgWDg2X1BMQVRGT1JNX0RFVklDRVMKIAogY29uZmlnIEFDRVJfV01JCi0JdHJpc3RhdGUgIkFjZXIgV01JIExhcHRvcCBFeHRyYXMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSAiQWNlciBXTUkgTGFwdG9wIEV4dHJhcyIKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MKIAlkZXBlbmRzIG9uIE5FV19MRURTCkBAIC0zOSw5ICszOCw5IEBACiAJdHJpc3RhdGUgIkFzdXMgTGFwdG9wIEV4dHJhcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAhQUNQSV9BU1VTCi0JZGVwZW5kcyBvbiBMRURTX0NMQVNTCi0JZGVwZW5kcyBvbiBORVdfTEVEUwotCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCXNlbGVjdCBMRURTX0NMQVNTCisJc2VsZWN0IE5FV19MRURTCisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZXBlbmRzIG9uIElOUFVUCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgbmV3IExpbnV4IGRyaXZlciBmb3IgQXN1cyBsYXB0b3BzLiBJdCBtYXkgYWxzbyBzdXBwb3J0IHNvbWUKQEAgLTYyLDYgKzYxLDcgQEAKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gUkZLSUxMCisJZGVwZW5kcyBvbiBQT1dFUl9TVVBQTFkKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciByZmtpbGwgYW5kIGJhY2tsaWdodCBjb250cm9sIHRvIERlbGwKQEAgLTE4NCwxMSArMTg0LDExIEBACiBjb25maWcgVEhJTktQQURfQUNQSQogCXRyaXN0YXRlICJUaGlua1BhZCBBQ1BJIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBBQ1BJCisJZGVwZW5kcyBvbiBJTlBVVAogCXNlbGVjdCBCQUNLTElHSFRfTENEX1NVUFBPUlQKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCXNlbGVjdCBIV01PTgogCXNlbGVjdCBOVlJBTQotCXNlbGVjdCBJTlBVVAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiAJc2VsZWN0IE5FVApAQCAtMzAxLDYgKzMwMSw3IEBACiBjb25maWcgRUVFUENfTEFQVE9QCiAJdHJpc3RhdGUgIkVlZSBQQyBIb3RrZXkgRHJpdmVyIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gQUNQSQorCWRlcGVuZHMgb24gSU5QVVQKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJc2VsZWN0IEhXTU9OCkBAIC0zMTMsOSArMzE0LDggQEAKIAogCiBjb25maWcgQUNQSV9XTUkKLQl0cmlzdGF0ZSAiV01JIChFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJXTUkiCiAJZGVwZW5kcyBvbiBBQ1BJCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBQ1BJLVdNSSAoV2luZG93cyBNYW5hZ2VtZW50CiAJICBJbnN0cnVtZW50YXRpb24pIG1hcHBlciBkZXZpY2UgKFBOUDBDMTQpIGZvdW5kIG9uIHNvbWUgc3lzdGVtcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IDk0YzlmOTExLi5hNmE0MmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTEwMjYsNyArMTAyNiw3IEBACiAJa2ZyZWUod2lyZWxlc3NfcmZraWxsLT5kYXRhKTsKIAlyZmtpbGxfdW5yZWdpc3Rlcih3aXJlbGVzc19yZmtpbGwpOwogCWlmIChoYXNfY2FwKEFDRVJfQ0FQX0JMVUVUT09USCkpIHsKLQkJa2ZyZWUod2lyZWxlc3NfcmZraWxsLT5kYXRhKTsKKwkJa2ZyZWUoYmx1ZXRvb3RoX3Jma2lsbC0+ZGF0YSk7CiAJCXJma2lsbF91bnJlZ2lzdGVyKGJsdWV0b290aF9yZmtpbGwpOwogCX0KIAlyZXR1cm47CkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCiAJc2V0X3F1aXJrcygpOwogCi0JaWYgKCFhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCkgJiYgaGFzX2NhcChBQ0VSX0NBUF9CUklHSFRORVNTKSkgeworCWlmIChhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCkgJiYgaGFzX2NhcChBQ0VSX0NBUF9CUklHSFRORVNTKSkgewogCQlpbnRlcmZhY2UtPmNhcGFiaWxpdHkgJj0gfkFDRVJfQ0FQX0JSSUdIVE5FU1M7CiAJCXByaW50ayhBQ0VSX0lORk8gIkJyaWdodG5lc3MgbXVzdCBiZSBjb250cm9sbGVkIGJ5ICIKIAkJICAgICAgICJnZW5lcmljIHZpZGVvIGRyaXZlclxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYwppbmRleCA1NmFmNmNmLi5lZWFmYzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKQEAgLTgxNSw2ICs4MTUsNyBAQAogc3RhdGljIHZvaWQgYXN1c19ob3RrX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqa2V5OworCXUxNiBjb3VudDsKIAogCS8qIFRPRE8gRmluZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGV2ZW50cyBjb3VudC4gKi8KIAlpZiAoIWhvdGspCkBAIC04MzIsOSArODMzLDExIEBACiAJCWxjZF9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04pOwogCX0KIAorCWNvdW50ID0gaG90ay0+ZXZlbnRfY291bnRbZXZlbnQgJSAxMjhdKys7CisJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChob3RrLT5kZXZpY2UsIGV2ZW50LCBjb3VudCk7CiAJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChob3RrLT5kZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCiAJCQkJCWRldl9uYW1lKCZob3RrLT5kZXZpY2UtPmRldiksIGV2ZW50LAotCQkJCQlob3RrLT5ldmVudF9jb3VudFtldmVudCAlIDEyOF0rKyk7CisJCQkJCWNvdW50KTsKIAogCWlmIChob3RrLT5pbnB1dGRldikgewogCQlrZXkgPSBhc3VzX2dldF9lbnRyeV9ieV9zY2FuY29kZShldmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IDc4NmVkODYuLjZmNTRmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC01NTcsMTMgKzU1NywxNyBAQAogc3RhdGljIHZvaWQgZWVlcGNfaG90a19ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKKwl1MTYgY291bnQ7CisKIAlpZiAoIWVob3RrKQogCQlyZXR1cm47CiAJaWYgKGV2ZW50ID49IE5PVElGWV9CUk5fTUlOICYmIGV2ZW50IDw9IE5PVElGWV9CUk5fTUFYKQogCQlub3RpZnlfYnJuKCk7CisJY291bnQgPSBlaG90ay0+ZXZlbnRfY291bnRbZXZlbnQgJSAxMjhdKys7CisJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChlaG90ay0+ZGV2aWNlLCBldmVudCwgY291bnQpOwogCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQoZWhvdGstPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKIAkJCQkJZGV2X25hbWUoJmVob3RrLT5kZXZpY2UtPmRldiksIGV2ZW50LAotCQkJCQllaG90ay0+ZXZlbnRfY291bnRbZXZlbnQgJSAxMjhdKyspOworCQkJCQljb3VudCk7CiAJaWYgKGVob3RrLT5pbnB1dGRldikgewogCQlrZXkgPSBlZXBjX2dldF9lbnRyeV9ieV9zY2FuY29kZShldmVudCk7CiAJCWlmIChrZXkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IDY1ZGM0MTUuLjQ1OTQwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtMTY2LDYgKzE2Niw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGZfZGV2aWNlOwogCXN0cnVjdCBrZmlmbyAqZmlmbzsKIAlzcGlubG9ja190IGZpZm9fbG9jazsKKwlpbnQgcmZraWxsX3N1cHBvcnRlZDsKIAlpbnQgcmZraWxsX3N0YXRlOwogCWludCBsb2dvbGFtcF9yZWdpc3RlcmVkOwogCWludCBrYmxhbXBzX3JlZ2lzdGVyZWQ7CkBAIC01MjYsNyArNTI3LDcgQEAKIHNob3dfbGlkX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JaWYgKGZ1aml0c3VfaG90a2V5LT5yZmtpbGxfc3RhdGUgPT0gVU5TVVBQT1JURURfQ01EKQorCWlmICghKGZ1aml0c3VfaG90a2V5LT5yZmtpbGxfc3VwcG9ydGVkICYgMHgxMDApKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKIAlpZiAoZnVqaXRzdV9ob3RrZXktPnJma2lsbF9zdGF0ZSAmIDB4MTAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJvcGVuXG4iKTsKQEAgLTUzOCw3ICs1MzksNyBAQAogc2hvd19kb2NrX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JaWYgKGZ1aml0c3VfaG90a2V5LT5yZmtpbGxfc3RhdGUgPT0gVU5TVVBQT1JURURfQ01EKQorCWlmICghKGZ1aml0c3VfaG90a2V5LT5yZmtpbGxfc3VwcG9ydGVkICYgMHgyMDApKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKIAlpZiAoZnVqaXRzdV9ob3RrZXktPnJma2lsbF9zdGF0ZSAmIDB4MjAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJkb2NrZWRcbiIpOwpAQCAtNTUwLDcgKzU1MSw3IEBACiBzaG93X3JhZGlvc19zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWlmIChmdWppdHN1X2hvdGtleS0+cmZraWxsX3N0YXRlID09IFVOU1VQUE9SVEVEX0NNRCkKKwlpZiAoIShmdWppdHN1X2hvdGtleS0+cmZraWxsX3N1cHBvcnRlZCAmIDB4MjApKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKIAlpZiAoZnVqaXRzdV9ob3RrZXktPnJma2lsbF9zdGF0ZSAmIDB4MjApCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm9uXG4iKTsKQEAgLTkyOCw4ICs5MjksMTcgQEAKIAkJOyAvKiBObyBhY3Rpb24sIHJlc3VsdCBpcyBkaXNjYXJkZWQgKi8KIAl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX0lORk8sICJEaXNjYXJkZWQgJWkgcmluZ2J1ZmZlciBlbnRyaWVzXG4iLCBpKTsKIAotCWZ1aml0c3VfaG90a2V5LT5yZmtpbGxfc3RhdGUgPQotCQljYWxsX2ZleHRfZnVuYyhGVU5DX1JGS0lMTCwgMHg0LCAweDAsIDB4MCk7CisJZnVqaXRzdV9ob3RrZXktPnJma2lsbF9zdXBwb3J0ZWQgPQorCQljYWxsX2ZleHRfZnVuYyhGVU5DX1JGS0lMTCwgMHgwLCAweDAsIDB4MCk7CisKKwkvKiBNYWtlIHN1cmUgb3VyIGJpdG1hc2sgb2Ygc3VwcG9ydGVkIGZ1bmN0aW9ucyBpcyBjbGVhcmVkIGlmIHRoZQorCSAgIFJGS0lMTCBmdW5jdGlvbiBibG9jayBpcyBub3QgaW1wbGVtZW50ZWQsIGxpa2Ugb24gdGhlIFM3MDIwLiAqLworCWlmIChmdWppdHN1X2hvdGtleS0+cmZraWxsX3N1cHBvcnRlZCA9PSBVTlNVUFBPUlRFRF9DTUQpCisJCWZ1aml0c3VfaG90a2V5LT5yZmtpbGxfc3VwcG9ydGVkID0gMDsKKworCWlmIChmdWppdHN1X2hvdGtleS0+cmZraWxsX3N1cHBvcnRlZCkKKwkJZnVqaXRzdV9ob3RrZXktPnJma2lsbF9zdGF0ZSA9CisJCQljYWxsX2ZleHRfZnVuYyhGVU5DX1JGS0lMTCwgMHg0LCAweDAsIDB4MCk7CiAKIAkvKiBTdXNwZWN0IHRoaXMgaXMgYSBrZXltYXAgb2YgdGhlIGFwcGxpY2F0aW9uIHBhbmVsLCBwcmludCBpdCAqLwogCXByaW50ayhLRVJOX0lORk8gImZ1aml0c3UtbGFwdG9wOiBCVE5JOiBbMHgleF1cbiIsCkBAIC0xMDA1LDggKzEwMTUsOSBAQAogCiAJaW5wdXQgPSBmdWppdHN1X2hvdGtleS0+aW5wdXQ7CiAKLQlmdWppdHN1X2hvdGtleS0+cmZraWxsX3N0YXRlID0KLQkJY2FsbF9mZXh0X2Z1bmMoRlVOQ19SRktJTEwsIDB4NCwgMHgwLCAweDApOworCWlmIChmdWppdHN1X2hvdGtleS0+cmZraWxsX3N1cHBvcnRlZCkKKwkJZnVqaXRzdV9ob3RrZXktPnJma2lsbF9zdGF0ZSA9CisJCQljYWxsX2ZleHRfZnVuYyhGVU5DX1JGS0lMTCwgMHg0LCAweDAsIDB4MCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBQ1BJX0ZVSklUU1VfTk9USUZZX0NPREUxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggNTM3OTU5ZC4uYmM4OTk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0xOTE3LDEyICsxOTE3LDcgQEAKIAogc3RhdGljIGludCBzb255cGlfbWlzY19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9jb21wYXQuZmlmb19hc3luYyk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2NvbXBhdC5maWZvX2FzeW5jKTsKIH0KIAogc3RhdGljIGludCBzb255cGlfbWlzY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IGJjYmMwNTEuLmQyNDMzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTc1MzIsNyArNzUzMiw3IEBACiAgKiBpZiBpdCBpcyBub3QgdGhlcmUgeWV0LgogICovCiAjZGVmaW5lIElCTV9CSU9TX01PRFVMRV9BTElBUyhfX3R5cGUpIFwKLQlNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06YnZyIiBfX3R5cGUgIkVUPz9XVyIpCisJTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOmJ2ciIgX190eXBlICJFVD8/V1cqIikKIAogLyogTm9uLWFuY2llbnQgdGhpbmtwYWRzICovCiBNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06Kjpzdm5JQk06KjpwdnJUaGlua1BhZCo6cnZuSUJNOioiKTsKQEAgLTc1NDEsOSArNzU0MSw5IEBACiAvKiBBbmNpZW50IHRoaW5rcGFkIEJJT1NlcyBoYXZlIHRvIGJlIGlkZW50aWZpZWQgYnkKICAqIEJJT1MgdHlwZSBvciBtb2RlbCBudW1iZXIsIGFuZCB0aGVyZSBhcmUgZmFyIGxlc3MKICAqIEJJT1MgdHlwZXMgdGhhbiBtb2RlbCBudW1iZXJzLi4uICovCi1JQk1fQklPU19NT0RVTEVfQUxJQVMoIklbQixELEgsSSxNLE4sTyxULFcsVixZLFpdIik7Ci1JQk1fQklPU19NT0RVTEVfQUxJQVMoIjFbMCwzLDYsOCxBLUcsSSxLLE0tUCxTLFRdIik7Ci1JQk1fQklPU19NT0RVTEVfQUxJQVMoIktbVSxYLVpdIik7CitJQk1fQklPU19NT0RVTEVfQUxJQVMoIklbQkRISU1OT1RXVllaXSIpOworSUJNX0JJT1NfTU9EVUxFX0FMSUFTKCIxWzAzNjhBLUdJS00tUFNUXSIpOworSUJNX0JJT1NfTU9EVUxFX0FMSUFTKCJLW1VYLVpdIik7CiAKIE1PRFVMRV9BVVRIT1IoIkJvcmlzbGF2IERlaWFub3YsIEhlbnJpcXVlIGRlIE1vcmFlcyBIb2xzY2h1aCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKFRQQUNQSV9ERVNDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKaW5kZXggOGE4YjM3Ny4uMmYyNjllMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCkBAIC03MDgsNyArNzA4LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWNwaV93bWlfaW5pdCh2b2lkKQogewotCWFjcGlfc3RhdHVzIHJlc3VsdDsKKwlpbnQgcmVzdWx0OwogCiAJSU5JVF9MSVNUX0hFQUQoJndtaV9ibG9ja3MubGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYwppbmRleCAxZDc2ODkyLi5hNTJkNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2RzMjc2MF9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9kczI3NjBfYmF0dGVyeS5jCkBAIC0xODAsMTAgKzE4MCwxMyBAQAogCWRpLT5lbXB0eV91QWggPSBiYXR0ZXJ5X2ludGVycG9sYXRlKHNjYWxlLCBkaS0+dGVtcF9DIC8gMTApOwogCWRpLT5lbXB0eV91QWggKj0gMTAwMDsgLyogY29udmVydCB0byDCtUFoICovCiAKLQkvKiBGcm9tIE1heGltIEFwcGxpY2F0aW9uIE5vdGUgMTMxOiByZW1haW5pbmcgY2FwYWNpdHkgPQotCSAqICgoSUNBIC0gRW1wdHkgVmFsdWUpIC8gKEZ1bGwgVmFsdWUgLSBFbXB0eSBWYWx1ZSkpIHggMTAwJSAqLwotCWRpLT5yZW1fY2FwYWNpdHkgPSAoKGRpLT5hY2N1bV9jdXJyZW50X3VBaCAtIGRpLT5lbXB0eV91QWgpICogMTAwTCkgLwotCQkJICAgIChkaS0+ZnVsbF9hY3RpdmVfdUFoIC0gZGktPmVtcHR5X3VBaCk7CisJaWYgKGRpLT5mdWxsX2FjdGl2ZV91QWggPT0gZGktPmVtcHR5X3VBaCkKKwkJZGktPnJlbV9jYXBhY2l0eSA9IDA7CisJZWxzZQorCQkvKiBGcm9tIE1heGltIEFwcGxpY2F0aW9uIE5vdGUgMTMxOiByZW1haW5pbmcgY2FwYWNpdHkgPQorCQkgKiAoKElDQSAtIEVtcHR5IFZhbHVlKSAvIChGdWxsIFZhbHVlIC0gRW1wdHkgVmFsdWUpKSB4IDEwMCUgKi8KKwkJZGktPnJlbV9jYXBhY2l0eSA9ICgoZGktPmFjY3VtX2N1cnJlbnRfdUFoIC0gZGktPmVtcHR5X3VBaCkgKiAxMDBMKSAvCisJCQkJICAgIChkaS0+ZnVsbF9hY3RpdmVfdUFoIC0gZGktPmVtcHR5X3VBaCk7CiAKIAlpZiAoZGktPnJlbV9jYXBhY2l0eSA8IDApCiAJCWRpLT5yZW1fY2FwYWNpdHkgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKaW5kZXggYWRkYjg3Yy4uMzIyMmZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2UgcmlvX2J1cyA9IHsKLQkuYnVzX2lkID0gInJhcGlkaW8iLAorCS5pbml0X25hbWUgPSAicmFwaWRpbyIsCiB9OwogCiBzdHJ1Y3QgYnVzX3R5cGUgcmlvX2J1c190eXBlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwppbmRleCBkNWU0ZTYzLi44NmM2MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJLyogcmVnaXN0ZXIgaXJxIGhhbmRsZXIgYWZ0ZXIgd2Uga25vdyB3aGF0IG5hbWUgd2UnbGwgdXNlICovCiAJcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MV9JRF9TWVMsIGF0OTFfcnRjX2ludGVycnVwdCwKIAkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JCQkJcnRjLT5ydGNkZXYtPmRldi5idXNfaWQsIHJ0Yyk7CisJCQkJZGV2X25hbWUoJnJ0Yy0+cnRjZGV2LT5kZXYpLCBydGMpOwogCWlmIChyZXQpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3Qgc2hhcmUgSVJRICVkP1xuIiwgQVQ5MV9JRF9TWVMpOwogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjLT5ydGNkZXYpOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAlpZiAoZ3Bicl9yZWFkbChydGMpID09IDApCiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICIlczogU0VUIFRJTUUhXG4iLAotCQkJCXJ0Yy0+cnRjZGV2LT5kZXYuYnVzX2lkKTsKKwkJCQlkZXZfbmFtZSgmcnRjLT5ydGNkZXYtPmRldikpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCmluZGV4IDJjYmViMDcuLmJkMWNlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtMzc3LDEzICszNzcsMTMgQEAKIAogCS8qIGhhbmRsZSBwZXJpb2RpYyBhbmQgYWxhcm0gaXJxcyAqLwogCWlmIChyZXF1ZXN0X2lycShvbWFwX3J0Y190aW1lciwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKSkgeworCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgewogCQlwcl9kZWJ1ZygiJXM6IFJUQyB0aW1lciBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAogCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfdGltZXIpOwogCQlnb3RvIGZhaWwwOwogCX0KIAlpZiAocmVxdWVzdF9pcnEob21hcF9ydGNfYWxhcm0sIHJ0Y19pcnEsIElSUUZfRElTQUJMRUQsCi0JCQlydGMtPmRldi5idXNfaWQsIHJ0YykpIHsKKwkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0YykpIHsKIAkJcHJfZGVidWcoIiVzOiBSVEMgYWxhcm0gaW50ZXJydXB0IElSUSVkIGFscmVhZHkgY2xhaW1lZFxuIiwKIAkJCXBkZXYtPm5hbWUsIG9tYXBfcnRjX2FsYXJtKTsKIAkJZ290byBmYWlsMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKaW5kZXggMWMzZmM2Yi4uNDg5OGY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNoLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vcnRjLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInNoLXJ0YyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMi4wIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yLjEiCiAKICNkZWZpbmUgUlRDX1JFRyhyKQkoKHIpICogcnRjX3JlZ19zaXplKQogCkBAIC05OSw1NiArOTksNTEgQEAKIAl1bnNpZ25lZCBzaG9ydCBwZXJpb2RpY19mcmVxOwogfTsKIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGludCBfX3NoX3J0Y19pbnRlcnJ1cHQoc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXVuc2lnbmVkIGludCB0bXAsIHBlbmRpbmc7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwlwZW5kaW5nID0gdG1wICYgUkNSMV9DRjsKIAl0bXAgJj0gflJDUjFfQ0Y7CiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKIAkvKiBVc2VycyBoYXZlIHJlcXVlc3RlZCBPbmUgeCBTZWNvbmQgSVJRICovCi0JaWYgKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX09YUykKKwlpZiAocGVuZGluZyAmJiBydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9PWFMpCiAJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX1VGIHwgUlRDX0lSUUYpOwogCi0Jc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfYWxhcm0oaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGludCBfX3NoX3J0Y19hbGFybShzdHJ1Y3Qgc2hfcnRjICpydGMpCiB7Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJdW5zaWduZWQgaW50IHRtcCwgcGVuZGluZzsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXBlbmRpbmcgPSB0bXAgJiBSQ1IxX0FGOwogCXRtcCAmPSB+KFJDUjFfQUYgfCBSQ1IxX0FJRSk7Ci0JCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCi0JcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfQUYgfCBSVENfSVJRRik7CisJaWYgKHBlbmRpbmcpCisJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOwogCi0Jc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfcGVyaW9kaWMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGludCBfX3NoX3J0Y19wZXJpb2RpYyhzdHJ1Y3Qgc2hfcnRjICpydGMpCiB7Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2ID0gcnRjLT5ydGNfZGV2OwotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJc3RydWN0IHJ0Y190YXNrICppcnFfdGFzazsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwZW5kaW5nOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMik7CisJcGVuZGluZyA9IHRtcCAmIFJDUjJfUEVGOwogCXRtcCAmPSB+UkNSMl9QRUY7CiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMik7CiAKKwlpZiAoIXBlbmRpbmcpCisJCXJldHVybiAwOworCiAJLyogSGFsZiBwZXJpb2QgZW5hYmxlZCB0aGFuIG9uZSBza2lwcGVkIGFuZCB0aGUgbmV4dCBub3RpZmllZCAqLwogCWlmICgocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfSFApICYmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9DT1VOVCkpCiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSAmPSB+UEZfQ09VTlQ7CkBAIC0xNTcsMTYgKzE1Miw2NSBAQAogCQkJcnRjLT5wZXJpb2RpY19mcmVxIHw9IFBGX0NPVU5UOwogCQlpZiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfS09VKSB7CiAJCQlzcGluX2xvY2soJnJ0Y19kZXYtPmlycV90YXNrX2xvY2spOwotCQkJaWYgKHJ0Y19kZXYtPmlycV90YXNrKQotCQkJCXJ0Y19kZXYtPmlycV90YXNrLT5mdW5jKHJ0Y19kZXYtPmlycV90YXNrLT5wcml2YXRlX2RhdGEpOworCQkJaXJxX3Rhc2sgPSBydGNfZGV2LT5pcnFfdGFzazsKKwkJCWlmIChpcnFfdGFzaykKKwkJCQlpcnFfdGFzay0+ZnVuYyhpcnFfdGFzay0+cHJpdmF0ZV9kYXRhKTsKIAkJCXNwaW5fdW5sb2NrKCZydGNfZGV2LT5pcnFfdGFza19sb2NrKTsKIAkJfSBlbHNlCiAJCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19QRiB8IFJUQ19JUlFGKTsKIAl9CiAKKwlyZXR1cm4gcGVuZGluZzsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX2ludGVycnVwdChydGMpOwogCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfYWxhcm0oaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX2FsYXJtKHJ0Yyk7CisJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX3BlcmlvZGljKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19wZXJpb2RpYyhydGMpOworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19zaGFyZWQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX2ludGVycnVwdChydGMpOworCXJldCB8PSBfX3NoX3J0Y19hbGFybShydGMpOworCXJldCB8PSBfX3NoX3J0Y19wZXJpb2RpYyhydGMpOworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNoX3J0Y19zZXRwaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQpAQCAtMjc1LDYgKzMxOSwyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfcnRjX3NldGNpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CisKKwl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKworCWlmICghZW5hYmxlKQorCQl0bXAgJj0gflJDUjFfQ0lFOworCWVsc2UKKwkJdG1wIHw9IFJDUjFfQ0lFOworCisJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+bG9jayk7Cit9CisKIHN0YXRpYyBpbnQgc2hfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0yOTEsOSArMzU0LDExIEBACiAJCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSAmPSB+UEZfT1hTOworCQlzaF9ydGNfc2V0Y2llKGRldiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PTjoKIAkJcnRjLT5wZXJpb2RpY19mcmVxIHw9IFBGX09YUzsKKwkJc2hfcnRjX3NldGNpZShkZXYsIDEpOwogCQlicmVhazsKIAljYXNlIFJUQ19JUlFQX1JFQUQ6CiAJCXJldCA9IHB1dF91c2VyKHJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEsCkBAIC0zNTYsMTggKzQyMSwxNyBAQAogCQl0bS0+dG1fc2VjLS07CiAjZW5kaWYKIAorCS8qIG9ubHkga2VlcCB0aGUgY2FycnkgaW50ZXJydXB0IGVuYWJsZWQgaWYgVUlFIGlzIG9uICovCisJaWYgKCEocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKSkKKwkJc2hfcnRjX3NldGNpZShkZXYsIDApOworCiAJZGV2X2RiZyhkZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKIAkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKIAkJX19mdW5jX18sCiAJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLAogCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiArIDEsIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKLQlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJpbnZhbGlkIGRhdGVcbiIpOwotCQlydGNfdGltZV90b190bSgwLCB0bSk7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTU3Miw3ICs2MzYsNyBAQAogewogCXN0cnVjdCBzaF9ydGMgKnJ0YzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQl1bnNpZ25lZCBpbnQgdG1wOworCXN0cnVjdCBydGNfdGltZSByOwogCWludCByZXQ7CiAKIAlydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfcnRjKSwgR0ZQX0tFUk5FTCk7CkBAIC01ODUsMjYgKzY0OSwxMiBAQAogCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKHVubGlrZWx5KHJldCA8PSAwKSkgewogCQlyZXQgPSAtRU5PRU5UOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIHBlcmlvZFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSByZXNvdXJjZVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CiAJcnRjLT5wZXJpb2RpY19pcnEgPSByZXQ7Ci0KLQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwotCWlmICh1bmxpa2VseShyZXQgPD0gMCkpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBjYXJyeVxuIik7Ci0JCWdvdG8gZXJyX2JhZHJlczsKLQl9Ci0JcnRjLT5jYXJyeV9pcnEgPSByZXQ7Ci0KLQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOwotCWlmICh1bmxpa2VseShyZXQgPD0gMCkpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBhbGFybVxuIik7Ci0JCWdvdG8gZXJyX2JhZHJlczsKLQl9Ci0JcnRjLT5hbGFybV9pcnEgPSByZXQ7CisJcnRjLT5jYXJyeV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCXJ0Yy0+YWxhcm1faXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKSB7CkBAIC02NDYsNDcgKzY5Niw2NiBAQAogCX0KIAogCXJ0Yy0+cnRjX2Rldi0+bWF4X3VzZXJfZnJlcSA9IDI1NjsKLQlydGMtPnJ0Y19kZXYtPmlycV9mcmVxID0gMTsKLQlydGMtPnBlcmlvZGljX2ZyZXEgPSAweDYwOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAotCS8qIHJlZ2lzdGVyIHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycXMgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShydGMtPnBlcmlvZGljX2lycSwgc2hfcnRjX3BlcmlvZGljLCBJUlFGX0RJU0FCTEVELAotCQkJICAic2gtcnRjIHBlcmlvZCIsIHJ0Yyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJInJlcXVlc3QgcGVyaW9kIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPnBlcmlvZGljX2lycSk7Ci0JCWdvdG8gZXJyX3VubWFwOworCWlmIChydGMtPmNhcnJ5X2lycSA8PSAwKSB7CisJCS8qIHJlZ2lzdGVyIHNoYXJlZCBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnEgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19zaGFyZWQsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAorCQkJCXJ0Yy0+cGVyaW9kaWNfaXJxKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmVnaXN0ZXIgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPnBlcmlvZGljX2lycSwgc2hfcnRjX3BlcmlvZGljLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyBwZXJpb2QiLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IHBlcmlvZCBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKKwkJCQlyZXQsIHJ0Yy0+cGVyaW9kaWNfaXJxKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5jYXJyeV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIGNhcnJ5IiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBjYXJyeSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKKwkJCQlyZXQsIHJ0Yy0+Y2FycnlfaXJxKTsKKwkJCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmFsYXJtX2lycSwgc2hfcnRjX2FsYXJtLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyBhbGFybSIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgYWxhcm0gSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPmFsYXJtX2lycSk7CisJCQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKKwkJCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmNhcnJ5X2lycSwgc2hfcnRjX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgInNoLXJ0YyBjYXJyeSIsIHJ0Yyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJInJlcXVlc3QgY2FycnkgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKLQkJCXJ0Yy0+Y2FycnlfaXJxKTsKLQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7Ci0JCWdvdG8gZXJyX3VubWFwOworCS8qIGV2ZXJ5dGhpbmcgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworCXJ0Yy0+cGVyaW9kaWNfZnJlcSA9IDA7CisJcnRjLT5ydGNfZGV2LT5pcnFfZnJlcSA9IDA7CisJc2hfcnRjX3NldHBpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0YWllKCZwZGV2LT5kZXYsIDApOworCXNoX3J0Y19zZXRjaWUoJnBkZXYtPmRldiwgMCk7CisKKwkvKiByZXNldCBydGMgdG8gZXBvY2ggMCBpZiB0aW1lIGlzIGludmFsaWQgKi8KKwlpZiAocnRjX3JlYWRfdGltZShydGMtPnJ0Y19kZXYsICZyKSA8IDApIHsKKwkJcnRjX3RpbWVfdG9fdG0oMCwgJnIpOworCQlydGNfc2V0X3RpbWUocnRjLT5ydGNfZGV2LCAmcik7CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5hbGFybV9pcnEsIHNoX3J0Y19hbGFybSwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgInNoLXJ0YyBhbGFybSIsIHJ0Yyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJInJlcXVlc3QgYWxhcm0gSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKLQkJCXJ0Yy0+YWxhcm1faXJxKTsKLQkJZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7Ci0JCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOwotCQlnb3RvIGVycl91bm1hcDsKLQl9Ci0KLQl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQl0bXAgJj0gflJDUjFfQ0Y7Ci0JdG1wIHw9IFJDUjFfQ0lFOwotCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwotCisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCXJldHVybiAwOwogCiBlcnJfdW5tYXA6CkBAIC03MDgsMTAgKzc3NywxMyBAQAogCiAJc2hfcnRjX3NldHBpZSgmcGRldi0+ZGV2LCAwKTsKIAlzaF9ydGNfc2V0YWllKCZwZGV2LT5kZXYsIDApOworCXNoX3J0Y19zZXRjaWUoJnBkZXYtPmRldiwgMCk7CiAKLQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKIAlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKLQlmcmVlX2lycShydGMtPmFsYXJtX2lycSwgcnRjKTsKKwlpZiAocnRjLT5jYXJyeV9pcnEgPiAwKSB7CisJCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOworCQlmcmVlX2lycShydGMtPmFsYXJtX2lycSwgcnRjKTsKKwl9CiAKIAlyZWxlYXNlX3Jlc291cmNlKHJ0Yy0+cmVzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYyBiL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKaW5kZXggYWQzNWY3Ni4uYTYzNDFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCkBAIC00MjYsNyArNDI2LDcgQEAKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgdHdsNDAzMF9ydGNfaW50ZXJydXB0LAogCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpOworCQkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0Yyk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVJRIGlzIG5vdCBmcmVlLlxuIik7CiAJCWdvdG8gb3V0MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9NYWtlZmlsZQppbmRleCBkMGVhZTU5Li45NWJjY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL01ha2VmaWxlCkBAIC0yLDkgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFMvMzkwIHNwZWNpZmljIGRldmljZSBkcml2ZXJzCiAjCiAKLUNGTEFHU19zeXNpbmZvLm8gKz0gLUlpbmNsdWRlL21hdGgtZW11IC1JYXJjaC9zMzkwL21hdGgtZW11IC13Ci0KLW9iai15ICs9IHMzOTBtYWNoLm8gc3lzaW5mby5vCiBvYmoteSArPSBjaW8vIGJsb2NrLyBjaGFyLyBjcnlwdG8vIG5ldC8gc2NzaS8ga3ZtLwogCiBkcml2ZXJzLXkgKz0gZHJpdmVycy9zMzkwL2J1aWx0LWluLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDA4YzIzYTkuLjJmZDY0ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtOSw2ICs5LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0yMiw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgogI2luY2x1ZGUgPGFzbS9pZGFscy5oPgogI2luY2x1ZGUgPGFzbS90b2RjbGsuaD4KKyNpbmNsdWRlIDxhc20vaXRjdy5oPgogCiAvKiBUaGlzIGlzIHVnbHkuLi4gKi8KICNkZWZpbmUgUFJJTlRLX0hFQURFUiAiZGFzZDoiCkBAIC0yMjEsNyArMjI1LDcgQEAKIAkJCXJldHVybiByYzsKIAl9CiAJLyogcmVnaXN0ZXIgJ2RldmljZScgZGVidWcgYXJlYSwgdXNlZCBmb3IgYWxsIERCRl9ERVZfWFhYIGNhbGxzICovCi0JZGV2aWNlLT5kZWJ1Z19hcmVhID0gZGVidWdfcmVnaXN0ZXIoZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgMSwgMSwKKwlkZXZpY2UtPmRlYnVnX2FyZWEgPSBkZWJ1Z19yZWdpc3RlcihkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCA0LCAxLAogCQkJCQkgICAgOCAqIHNpemVvZihsb25nKSk7CiAJZGVidWdfcmVnaXN0ZXJfdmlldyhkZXZpY2UtPmRlYnVnX2FyZWEsICZkZWJ1Z19zcHJpbnRmX3ZpZXcpOwogCWRlYnVnX3NldF9sZXZlbChkZXZpY2UtPmRlYnVnX2FyZWEsIERCRl9XQVJOSU5HKTsKQEAgLTc2Miw3ICs3NjYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OwogCWlmIChzdHJuY21wKChjaGFyICopICZjcXItPm1hZ2ljLCBkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIDQpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCiAJCQkgICAgIiBkYXNkX2Njd19yZXEgMHglMDh4IG1hZ2ljIGRvZXNuJ3QgbWF0Y2giCiAJCQkgICAgIiBkaXNjaXBsaW5lIDB4JTA4eCIsCiAJCQkgICAgY3FyLT5tYWdpYywKQEAgLTc4Miw2ICs3ODYsNyBAQAogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByZXRyaWVzLCByYzsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCS8qIENoZWNrIHRoZSBjcXIgKi8KIAlyYyA9IGRhc2RfY2hlY2tfY3FyKGNxcik7CkBAIC04MTUsMTAgKzgyMCwxMCBAQAogCQkJCSAgICAgICJkZXZpY2UgYnVzeSwgcmV0cnkgbGF0ZXIiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImxpbmUgJWQgdW5rbm93biBSQz0lZCwgcGxlYXNlICIKLQkJCQkgICAgInJlcG9ydCB0byBsaW51eDM5MEBkZS5pYm0uY29tIiwKLQkJCQkgICAgX19MSU5FX18sIHJjKTsKKwkJCS8qIGludGVybmFsIGVycm9yIDEwIC0gdW5rbm93biByYyovCisJCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIxMCAlZCIsIHJjKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlICIKKwkJCQkiREFTRCBkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJCUJVRygpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgzNiw2ICs4NDEsNyBAQAogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByYzsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCS8qIENoZWNrIHRoZSBjcXIgKi8KIAlyYyA9IGRhc2RfY2hlY2tfY3FyKGNxcik7CkBAIC04NDMsMTcgKzg0OSwyMyBAQAogCQlyZXR1cm4gcmM7CiAJZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwogCWlmIChjcXItPnJldHJpZXMgPCAwKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKLQkJCSAgICAic3RhcnRfSU86IHJlcXVlc3QgJXAgKCUwMngvJWkpIC0gbm8gcmV0cnkgbGVmdC4iLAotCQkJICAgIGNxciwgY3FyLT5zdGF0dXMsIGNxci0+cmV0cmllcyk7CisJCS8qIGludGVybmFsIGVycm9yIDE0IC0gc3RhcnRfSU8gcnVuIG91dCBvZiByZXRyaWVzICovCisJCXNwcmludGYoZXJyb3JzdHJpbmcsICIxNCAlcCIsIGNxcik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0VSUk9SOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJY3FyLT5zdGFydGNsayA9IGdldF9jbG9jaygpOwogCWNxci0+c3RhcnR0aW1lID0gamlmZmllczsKIAljcXItPnJldHJpZXMtLTsKLQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoZGV2aWNlLT5jZGV2LCBjcXItPmNwYWRkciwgKGxvbmcpIGNxciwKLQkJCSAgICAgIGNxci0+bHBtLCAwKTsKKwlpZiAoY3FyLT5jcG1vZGUgPT0gMSkgeworCQlyYyA9IGNjd19kZXZpY2VfdG1fc3RhcnQoZGV2aWNlLT5jZGV2LCBjcXItPmNwYWRkciwKKwkJCQkJIChsb25nKSBjcXIsIGNxci0+bHBtKTsKKwl9IGVsc2UgeworCQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoZGV2aWNlLT5jZGV2LCBjcXItPmNwYWRkciwKKwkJCQkgICAgICAobG9uZykgY3FyLCBjcXItPmxwbSwgMCk7CisJfQogCXN3aXRjaCAocmMpIHsKIAljYXNlIDA6CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfSU5fSU87CkBAIC04NjIsMTEgKzg3NCwxMSBAQAogCQkJICAgICAgY3FyKTsKIAkJYnJlYWs7CiAJY2FzZSAtRUJVU1k6Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiBkZXZpY2UgYnVzeSwgcmV0cnkgbGF0ZXIiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRVRJTUVET1VUOgotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogcmVxdWVzdCB0aW1lb3V0LCByZXRyeSBsYXRlciIpOwogCQlicmVhazsKIAljYXNlIC1FQUNDRVM6CkBAIC04NzYsMTkgKzg4OCwyNCBAQAogCQkgKiBEbyBhIHJldHJ5IHdpdGggYWxsIGF2YWlsYWJsZSBwYXRoZXMuCiAJCSAqLwogCQljcXItPmxwbSA9IExQTV9BTllQQVRIOwotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogc2VsZWN0ZWQgcGF0aGVzIGdvbmUsIgogCQkJICAgICAgIiByZXRyeSBvbiBhbGwgcGF0aGVzIik7CiAJCWJyZWFrOwogCWNhc2UgLUVOT0RFVjoKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJzdGFydF9JTzogLUVOT0RFViBkZXZpY2UgZ29uZSwgcmV0cnkiKTsKKwkJYnJlYWs7CiAJY2FzZSAtRUlPOgotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAgICJzdGFydF9JTzogZGV2aWNlIGdvbmUsIHJldHJ5Iik7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAic3RhcnRfSU86IC1FSU8gZGV2aWNlIGdvbmUsIHJldHJ5Iik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkgICAgImxpbmUgJWQgdW5rbm93biBSQz0lZCwgcGxlYXNlIHJlcG9ydCIKLQkJCSAgICAiIHRvIGxpbnV4MzkwQGRlLmlibS5jb20iLCBfX0xJTkVfXywgcmMpOworCQkvKiBpbnRlcm5hbCBlcnJvciAxMSAtIHVua25vd24gcmMgKi8KKwkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTEgJWQiLCByYyk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSJyZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwogCX0KQEAgLTk0NSw3ICs5NjIsNyBAQAogCQlyZXR1cm47CiAJY3FyID0gKHN0cnVjdCBkYXNkX2Njd19yZXEgKikgaW50cGFybTsKIAlpZiAoY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfSU5fSU8pIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLAorCQlEQkZfRVZFTlQoREJGX0RFQlVHLAogCQkJImludmFsaWQgc3RhdHVzIGluIGhhbmRsZV9raWxsZWRfcmVxdWVzdDogIgogCQkJImJ1c19pZCAlcywgc3RhdHVzICUwMngiLAogCQkJZGV2X25hbWUoJmNkZXYtPmRldiksIGNxci0+c3RhdHVzKTsKQEAgLTk1Niw4ICs5NzMsOCBAQAogCWlmIChkZXZpY2UgPT0gTlVMTCB8fAogCSAgICBkZXZpY2UgIT0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KSB8fAogCSAgICBzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6IGJ1c19pZCAlcyIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiAiCisJCQkgICAgICAiYnVzX2lkICVzIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm47CiAJfQogCkBAIC05OTYsMTEgKzEwMTMsMTEgQEAKIAkJY2FzZSAtRUlPOgogCQkJYnJlYWs7CiAJCWNhc2UgLUVUSU1FRE9VVDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXMoJXMpOiByZXF1ZXN0IHRpbWVkIG91dFxuIiwKKwkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIiVzKCVzKTogcmVxdWVzdCB0aW1lZCBvdXRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyglcyk6IHVua25vd24gZXJyb3IgJWxkXG4iLAorCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiJXMoJXMpOiB1bmtub3duIGVycm9yICVsZFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgZGV2X25hbWUoJmNkZXYtPmRldiksIFBUUl9FUlIoaXJiKSk7CiAJCX0KIAkJZGFzZF9oYW5kbGVfa2lsbGVkX3JlcXVlc3QoY2RldiwgaW50cGFybSk7CkBAIC0xMDA5LDE1ICsxMDI2LDExIEBACiAKIAlub3cgPSBnZXRfY2xvY2soKTsKIAotCURCRl9FVkVOVChEQkZfRVJSLCAiSW50ZXJydXB0OiBidXNfaWQgJXMgQ1MvRFMgJTA0eCBpcCAlMDh4IiwKLQkJICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgKChpcmItPnNjc3cuY21kLmNzdGF0IDw8IDgpIHwKLQkJICBpcmItPnNjc3cuY21kLmRzdGF0KSwgKHVuc2lnbmVkIGludCkgaW50cGFybSk7Ci0KIAkvKiBjaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cyAqLwogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGludHBhcm07Ci0JaWYgKCFjcXIgfHwgKChpcmItPnNjc3cuY21kLmNjID09IDEpICYmCi0JCSAgICAgKGlyYi0+c2Nzdy5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCQkgICAgIChpcmItPnNjc3cuY21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSB7CisJaWYgKCFjcXIgfHwgKChzY3N3X2NjKCZpcmItPnNjc3cpID09IDEpICYmCisJCSAgICAgKHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgorCQkgICAgIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSB7CiAJCWlmIChjcXIgJiYgY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfSU5fSU8pCiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKIAkJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KTsKQEAgLTEwMzMsMTQgKzEwNDYsMTQgQEAKIAlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7CiAJaWYgKCFkZXZpY2UgfHwKIAkgICAgc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiBidXNfaWQgJXMiLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogIgorCQkJICAgICAgImJ1c19pZCAlcyIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIENoZWNrIGZvciBjbGVhciBwZW5kaW5nICovCiAJaWYgKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0NMRUFSX1BFTkRJTkcgJiYKLQkgICAgaXJiLT5zY3N3LmNtZC5mY3RsICYgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpIHsKKwkgICAgc2Nzd19mY3RsKCZpcmItPnNjc3cpICYgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9DTEVBUkVEOwogCQlkYXNkX2RldmljZV9jbGVhcl90aW1lcihkZXZpY2UpOwogCQl3YWtlX3VwKCZkYXNkX2ZsdXNoX3dxKTsKQEAgLTEwNDgsMTkgKzEwNjEsMTcgQEAKIAkJcmV0dXJuOwogCX0KIAotIAkvKiBjaGVjayBzdGF0dXMgLSB0aGUgcmVxdWVzdCBtaWdodCBoYXZlIGJlZW4ga2lsbGVkIGJ5IGR5biBkZXRhY2ggKi8KKwkvKiBjaGVjayBzdGF0dXMgLSB0aGUgcmVxdWVzdCBtaWdodCBoYXZlIGJlZW4ga2lsbGVkIGJ5IGR5biBkZXRhY2ggKi8KIAlpZiAoY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfSU5fSU8pIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLAotCQkJImludmFsaWQgc3RhdHVzOiBidXNfaWQgJXMsIHN0YXR1cyAlMDJ4IiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBjcXItPnN0YXR1cyk7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJpbnZhbGlkIHN0YXR1czogYnVzX2lkICVzLCAiCisJCQkgICAgICAic3RhdHVzICUwMngiLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgY3FyLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJfQotCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJJbnQ6IENTL0RTIDB4JTA0eCBmb3IgY3FyICVwIiwKLQkJICAgICAgKChpcmItPnNjc3cuY21kLmNzdGF0IDw8IDgpIHwgaXJiLT5zY3N3LmNtZC5kc3RhdCksIGNxcik7CisKIAluZXh0ID0gTlVMTDsKIAlleHBpcmVzID0gMDsKLQlpZiAoaXJiLT5zY3N3LmNtZC5kc3RhdCA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCi0JICAgIGlyYi0+c2Nzdy5jbWQuY3N0YXQgPT0gMCAmJiAhaXJiLT5lc3cuZXN3MC5lcncuY29ucykgeworCWlmIChzY3N3X2RzdGF0KCZpcmItPnNjc3cpID09IChERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkgJiYKKwkgICAgc2Nzd19jc3RhdCgmaXJiLT5zY3N3KSA9PSAwKSB7CiAJCS8qIHJlcXVlc3Qgd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9TVUNDRVNTOwogCQljcXItPnN0b3BjbGsgPSBub3c7CkBAIC0xMDcxLDE4ICsxMDgyLDIzIEBACiAJCX0KIAl9IGVsc2UgeyAgLyogZXJyb3IgKi8KIAkJbWVtY3B5KCZjcXItPmlyYiwgaXJiLCBzaXplb2Yoc3RydWN0IGlyYikpOworCQkvKiBsb2cgc2Vuc2UgZm9yIGV2ZXJ5IGZhaWxlZCBJL08gdG8gczM5MCBkZWJ1Z2ZlYXR1cmUgKi8KKwkJZGFzZF9sb2dfc2Vuc2VfZGJmKGNxciwgaXJiKTsKIAkJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7CiAJCQlkYXNkX2xvZ19zZW5zZShjcXIsIGlyYik7CiAJCX0KKwogCQkvKgogCQkgKiBJZiB3ZSBkb24ndCB3YW50IGNvbXBsZXggRVJQIGZvciB0aGlzIHJlcXVlc3QsIHRoZW4ganVzdAogCQkgKiByZXNldCB0aGlzIGFuZCByZXRyeSBpdCBpbiB0aGUgZmFzdHBhdGgKIAkJICovCiAJCWlmICghdGVzdF9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpICYmCiAJCSAgICBjcXItPnJldHJpZXMgPiAwKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCi0JCQkJICAgICJkZWZhdWx0IEVSUCBpbiBmYXN0cGF0aCAoJWkgcmV0cmllcyBsZWZ0KSIsCi0JCQkJICAgIGNxci0+cmV0cmllcyk7CisJCQlpZiAoY3FyLT5scG0gPT0gTFBNX0FOWVBBVEgpCisJCQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKKwkJCQkJICAgICAgImRlZmF1bHQgRVJQIGluIGZhc3RwYXRoICIKKwkJCQkJICAgICAgIiglaSByZXRyaWVzIGxlZnQpIiwKKwkJCQkJICAgICAgY3FyLT5yZXRyaWVzKTsKIAkJCWNxci0+bHBtICAgID0gTFBNX0FOWVBBVEg7CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKIAkJCW5leHQgPSBjcXI7CkBAIC0xMDkzLDEwICsxMTA5LDYgQEAKIAkgICAgKCFkZXZpY2UtPnN0b3BwZWQpKSB7CiAJCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPnN0YXJ0X0lPKG5leHQpID09IDApCiAJCQlleHBpcmVzID0gbmV4dC0+ZXhwaXJlczsKLQkJZWxzZQotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiSW50ZXJydXB0IGZhc3RwYXRoICIKLQkJCQkgICAgImZhaWxlZCEiKTsKIAl9CiAJaWYgKGV4cGlyZXMgIT0gMCkKIAkJZGFzZF9kZXZpY2Vfc2V0X3RpbWVyKGRldmljZSwgZXhwaXJlcyk7CkBAIC0xMTY5LDYgKzExODEsNyBAQAogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKIAl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBkYXNkX2Njd19yZXEgKiwgdm9pZCAqZGF0YSk7CiAJdm9pZCAqY2FsbGJhY2tfZGF0YTsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCBmaW5hbF9xdWV1ZSkgewogCQljcXIgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBkYXNkX2Njd19yZXEsIGRldmxpc3QpOwpAQCAtMTE4OSwxMCArMTIwMiwxMSBAQAogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9URVJNSU5BVEVEOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAid3JvbmcgY3FyIHN0YXR1cyBpbiBfX2Rhc2RfcHJvY2Vzc19maW5hbF9xdWV1ZSAiCi0JCQkJICAgICJmb3IgY3FyICVwLCBzdGF0dXMgJXgiLAotCQkJCSAgICBjcXIsIGNxci0+c3RhdHVzKTsKKwkJCS8qIGludGVybmFsIGVycm9yIDEyIC0gd3JvbmcgY3FyIHN0YXR1cyovCisJCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIxMiAlcCAleDAyIiwgY3FyLCBjcXItPnN0YXR1cyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJCSJyZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJCUJVRygpOwogCQl9CiAJCWlmIChjcXItPmNhbGxiYWNrICE9IE5VTEwpCkBAIC0xMjE3LDE4ICsxMjMxLDE3IEBACiAJICAgICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGNxci0+ZXhwaXJlcyArIGNxci0+c3RhcnR0aW1lKSkpIHsKIAkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpICE9IDApIHsKIAkJCS8qIEhtcGYsIHRyeSBhZ2FpbiBpbiA1IHNlYyAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImludGVybmFsIGVycm9yIC0gdGltZW91dCAoJWlzKSBleHBpcmVkICIKLQkJCQkgICAgImZvciBjcXIgJXAsIHRlcm1pbmF0aW9uIGZhaWxlZCwgIgotCQkJCSAgICAicmV0cnlpbmcgaW4gNXMiLAotCQkJCSAgICAoY3FyLT5leHBpcmVzL0haKSwgY3FyKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJjcXIgJXAgdGltZWQgb3V0ICglaXMpIGJ1dCBjYW5ub3QgYmUgIgorCQkJCSJlbmRlZCwgcmV0cnlpbmcgaW4gNSBzXG4iLAorCQkJCWNxciwgKGNxci0+ZXhwaXJlcy9IWikpOwogCQkJY3FyLT5leHBpcmVzICs9IDUqSFo7CiAJCQlkYXNkX2RldmljZV9zZXRfdGltZXIoZGV2aWNlLCA1KkhaKTsKIAkJfSBlbHNlIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJpbnRlcm5hbCBlcnJvciAtIHRpbWVvdXQgKCVpcykgZXhwaXJlZCAiCi0JCQkJICAgICJmb3IgY3FyICVwICglaSByZXRyaWVzIGxlZnQpIiwKLQkJCQkgICAgKGNxci0+ZXhwaXJlcy9IWiksIGNxciwgY3FyLT5yZXRyaWVzKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJjcXIgJXAgdGltZWQgb3V0ICglaXMpLCAlaSByZXRyaWVzICIKKwkJCQkicmVtYWluaW5nXG4iLCBjcXIsIChjcXItPmV4cGlyZXMvSFopLAorCQkJCWNxci0+cmV0cmllcyk7CiAJCX0KIAl9CiB9CkBAIC0xMjkwLDEwICsxMzAzLDkgQEAKIAkJCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CiAJCQlpZiAocmMpIHsKIAkJCQkvKiB1bmFibGUgdG8gdGVybWluYXRlIHJlcXVldXN0ICovCi0JCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkJICAgICJkYXNkIGZsdXNoIGNjd19xdWV1ZSBpcyB1bmFibGUgIgotCQkJCQkgICAgIiB0byB0ZXJtaW5hdGUgcmVxdWVzdCAlcCIsCi0JCQkJCSAgICBjcXIpOworCQkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkiRmx1c2hpbmcgdGhlIERBU0QgcmVxdWVzdCBxdWV1ZSAiCisJCQkJCSJmYWlsZWQgZm9yIHJlcXVlc3QgJXBcbiIsIGNxcik7CiAJCQkJLyogc3RvcCBmbHVzaCBwcm9jZXNzaW5nICovCiAJCQkJZ290byBmaW5pc2hlZDsKIAkJCX0KQEAgLTE1MzcsMTAgKzE1NDksOSBAQAogCQkvKiByZXF1ZXN0IGluIElPIC0gdGVybWluYXRlIElPIGFuZCByZWxlYXNlIGFnYWluICovCiAJCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CiAJCWlmIChyYykgewotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImRhc2RfY2FuY2VsX3JlcSBpcyB1bmFibGUgIgotCQkJCSAgICAiIHRvIHRlcm1pbmF0ZSByZXF1ZXN0ICVwLCByYyA9ICVkIiwKLQkJCQkgICAgY3FyLCByYyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiQ2FuY2VsbGluZyByZXF1ZXN0ICVwIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAorCQkJCWNxciwgcmMpOwogCQl9IGVsc2UgewogCQkJY3FyLT5zdG9wY2xrID0gZ2V0X2Nsb2NrKCk7CiAJCQlyYyA9IDE7CkBAIC0xNjE3LDcgKzE2MjgsNyBAQAogCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9ET05FKQogCQlEQkZfREVWX0VWRU5UKERCRl9OT1RJQ0UsIGRldmljZSwgIiVzIiwgIkVSUCBzdWNjZXNzZnVsIik7CiAJZWxzZQotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLCAiRVJQIHVuc3VjY2Vzc2Z1bCIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkVSUCBmYWlsZWQgZm9yIHRoZSBEQVNEXG4iKTsKIAllcnBfZm4gPSBkZXZpY2UtPmRpc2NpcGxpbmUtPmVycF9wb3N0YWN0aW9uKGNxcik7CiAJZXJwX2ZuKGNxcik7CiB9CkBAIC0xOTkxLDggKzIwMDIsMTEgQEAKIAlibGtfcXVldWVfbWF4X3NlY3RvcnMoYmxvY2stPnJlcXVlc3RfcXVldWUsIG1heCk7CiAJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwogCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7Ci0JYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7Ci0JYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7CisJLyogd2l0aCBwYWdlIHNpemVkIHNlZ21lbnRzIHdlIGNhbiB0cmFuc2xhdGUgZWFjaCBzZWdlbWVudCBpbnRvCisJICogb25lIGlkYXcvdGlkYXcKKwkgKi8KKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibG9jay0+cmVxdWVzdF9xdWV1ZSwgUEFHRV9TSVpFKTsKKwlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShibG9jay0+cmVxdWVzdF9xdWV1ZSwgUEFHRV9TSVpFIC0gMSk7CiAJYmxrX3F1ZXVlX29yZGVyZWQoYmxvY2stPnJlcXVlc3RfcXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOwogfQogCkBAIC0yMDQzLDggKzIwNTcsOSBAQAogCX0KIAogCWlmIChkYXNkX3Byb2Jlb25seSkgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGJhc2UsICIlcyIsCi0JCQkgICAgIk5vIGFjY2VzcyB0byBkZXZpY2UgZHVlIHRvIHByb2Jlb25seSBtb2RlIik7CisJCWRldl9pbmZvKCZiYXNlLT5jZGV2LT5kZXYsCisJCQkgIkFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSBpdCBpcyBpbiAiCisJCQkgInByb2Jlb25seSBtb2RlXG4iKTsKIAkJcmMgPSAtRVBFUk07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIxMDEsNyArMjExNiw4IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGRhc2Rfb3BlbiwKIAkucmVsZWFzZQk9IGRhc2RfcmVsZWFzZSwKLQkubG9ja2VkX2lvY3RsCT0gZGFzZF9pb2N0bCwKKwkuaW9jdGwJCT0gZGFzZF9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gZGFzZF9pb2N0bCwKIAkuZ2V0Z2VvCQk9IGRhc2RfZ2V0Z2VvLAogfTsKIApAQCAtMjE0MywxNCArMjE1OSwxNCBAQAogCiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb3B0aW9ucyhjZGV2LCBDQ1dERVZfRE9fUEFUSEdST1VQKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAogCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IHNldCBjY3ctZGV2aWNlIG9wdGlvbnMgIgogCQkgICAgICAgImZvciAlc1xuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlyZXQgPSBkYXNkX2FkZF9zeXNmc19maWxlcyhjZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAogCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IGFkZCBzeXNmcyBlbnRyaWVzICIKIAkJICAgICAgICJmb3IgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKQEAgLTIxNjYsOSArMjE4Miw3IEBACiAJICAgIChkYXNkX2F1dG9kZXRlY3QgJiYgZGFzZF9idXNpZF9rbm93bihkZXZfbmFtZSgmY2Rldi0+ZGV2KSkgIT0gMCkpCiAJCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZGV2KTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiZGFzZF9nZW5lcmljX3Byb2JlOiBjb3VsZCBub3QgaW5pdGlhbGx5ICIKLQkJICAgICAgICJvbmxpbmUgY2N3LWRldmljZSAlczsgcmV0dXJuIGNvZGU6ICVkXG4iLAorCQlwcl93YXJuaW5nKCIlczogU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIHdpdGggcmM9JWRcbiIsCiAJCSAgICAgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgcmV0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMzIsMTAgKzIyNDYsOSBAQAogCWRpc2NpcGxpbmUgPSBiYXNlX2Rpc2NpcGxpbmU7CiAJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfVVNFRElBRykgewogCSAgCWlmICghZGFzZF9kaWFnX2Rpc2NpcGxpbmVfcG9pbnRlcikgewotCQkgICAgICAgIHByaW50ayAoS0VSTl9XQVJOSU5HCi0JCQkJImRhc2RfZ2VuZXJpYyBjb3VsZG4ndCBvbmxpbmUgZGV2aWNlICVzICIKLQkJCQkiLSBkaXNjaXBsaW5lIERJQUcgbm90IGF2YWlsYWJsZVxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCQlwcl93YXJuaW5nKCIlcyBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgYmVjYXVzZSAiCisJCQkJICAgIm9mIG1pc3NpbmcgRElBRyBkaXNjaXBsaW5lXG4iLAorCQkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWRhc2RfZGVsZXRlX2RldmljZShkZXZpY2UpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTIyNTYsMTAgKzIyNjksOSBAQAogCS8qIGNoZWNrX2RldmljZSB3aWxsIGFsbG9jYXRlIGJsb2NrIGRldmljZSBpZiBuZWNlc3NhcnkgKi8KIAlyYyA9IGRpc2NpcGxpbmUtPmNoZWNrX2RldmljZShkZXZpY2UpOwogCWlmIChyYykgewotCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJImRhc2RfZ2VuZXJpYyBjb3VsZG4ndCBvbmxpbmUgZGV2aWNlICVzICIKLQkJCSJ3aXRoIGRpc2NpcGxpbmUgJXMgcmM9JWlcbiIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgZGlzY2lwbGluZS0+bmFtZSwgcmMpOworCQlwcl93YXJuaW5nKCIlcyBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSB3aXRoIGRpc2NpcGxpbmUgJXMgIgorCQkJICAgImZhaWxlZCB3aXRoIHJjPSVpXG4iLAorCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldiksIGRpc2NpcGxpbmUtPm5hbWUsIHJjKTsKIAkJbW9kdWxlX3B1dChkaXNjaXBsaW5lLT5vd25lcik7CiAJCW1vZHVsZV9wdXQoYmFzZV9kaXNjaXBsaW5lLT5vd25lcik7CiAJCWRhc2RfZGVsZXRlX2RldmljZShkZXZpY2UpOwpAQCAtMjI2OCw5ICsyMjgwLDggQEAKIAogCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShkZXZpY2UsIERBU0RfU1RBVEVfT05MSU5FKTsKIAlpZiAoZGV2aWNlLT5zdGF0ZSA8PSBEQVNEX1NUQVRFX0tOT1dOKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HCi0JCQkiZGFzZF9nZW5lcmljIGRpc2NpcGxpbmUgbm90IGZvdW5kIGZvciAlc1xuIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIGJlY2F1c2Ugb2YgYSAiCisJCQkgICAibWlzc2luZyBkaXNjaXBsaW5lXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJjID0gLUVOT0RFVjsKIAkJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9ORVcpOwogCQlpZiAoZGV2aWNlLT5ibG9jaykKQEAgLTIzMTQsMTMgKzIzMjUsMTMgQEAKIAkJb3Blbl9jb3VudCA9IGF0b21pY19yZWFkKCZkZXZpY2UtPmJsb2NrLT5vcGVuX2NvdW50KTsKIAkJaWYgKG9wZW5fY291bnQgPiBtYXhfY291bnQpIHsKIAkJCWlmIChvcGVuX2NvdW50ID4gMCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBvZmZsaW5lIGRhc2QgIgotCQkJCSAgICAgICAiZGV2aWNlIHdpdGggb3BlbiBjb3VudCA9ICVpLlxuIiwKLQkJCQkgICAgICAgb3Blbl9jb3VudCk7CisJCQkJcHJfd2FybmluZygiJXM6IFRoZSBEQVNEIGNhbm5vdCBiZSBzZXQgb2ZmbGluZSAiCisJCQkJCSAgICJ3aXRoIG9wZW4gY291bnQgJWlcbiIsCisJCQkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBvcGVuX2NvdW50KTsKIAkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyIsCi0JCQkJICAgICAgICJDYW4ndCBvZmZsaW5lIGRhc2QgZGV2aWNlIGR1ZSAiCi0JCQkJICAgICAgICJ0byBpbnRlcm5hbCB1c2VcbiIpOworCQkJCXByX3dhcm5pbmcoIiVzOiBUaGUgREFTRCBjYW5ub3QgYmUgc2V0IG9mZmxpbmUgIgorCQkJCQkgICAid2hpbGUgaXQgaXMgaW4gdXNlXG4iLAorCQkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQljbGVhcl9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZkZXZpY2UtPmZsYWdzKTsKIAkJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCQkJcmV0dXJuIC1FQlVTWTsKQEAgLTIzOTMsOCArMjQwNCwxMCBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KG1hZ2ljLCAxIC8qIFJEQyAqLywgcmRjX2J1ZmZlcl9zaXplLCBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgUkRDIHJlcXVlc3QiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMTMgLSBBbGxvY2F0aW5nIHRoZSBSREMgcmVxdWVzdCBmYWlsZWQqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJICJyZWFzb249JXNcbiIsICIxMyIpOwogCQlyZXR1cm4gY3FyOwogCX0KIApAQCAtMjQzMSw2ICsyNDQ0LDQwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMpOwogCisvKgorICogICBJbiBjb21tYW5kIG1vZGUgYW5kIHRyYW5zcG9ydCBtb2RlIHdlIG5lZWQgdG8gbG9vayBmb3Igc2Vuc2UKKyAqICAgZGF0YSBpbiBkaWZmZXJlbnQgcGxhY2VzLiBUaGUgc2Vuc2UgZGF0YSBpdHNlbGYgaXMgYWxsd2F5cworICogICBhbiBhcnJheSBvZiAzMiBieXRlcywgc28gd2UgY2FuIHVuaWZ5IHRoZSBzZW5zZSBkYXRhIGFjY2VzcworICogICBmb3IgYm90aCBtb2Rlcy4KKyAqLworY2hhciAqZGFzZF9nZXRfc2Vuc2Uoc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0c2IgKnRzYiA9IE5VTEw7CisJY2hhciAqc2Vuc2UgPSBOVUxMOworCisJaWYgKHNjc3dfaXNfdG0oJmlyYi0+c2NzdykgJiYgKGlyYi0+c2Nzdy50bS5mY3hzID09IDB4MDEpKSB7CisJCWlmIChpcmItPnNjc3cudG0udGN3KQorCQkJdHNiID0gdGN3X2dldF90c2IoKHN0cnVjdCB0Y3cgKikodW5zaWduZWQgbG9uZykKKwkJCQkJICBpcmItPnNjc3cudG0udGN3KTsKKwkJaWYgKHRzYiAmJiB0c2ItPmxlbmd0aCA9PSA2NCAmJiB0c2ItPmZsYWdzKQorCQkJc3dpdGNoICh0c2ItPmZsYWdzICYgMHgwNykgeworCQkJY2FzZSAxOgkvKiB0c2FfaW9zdGF0ICovCisJCQkJc2Vuc2UgPSB0c2ItPnRzYS5pb3N0YXQuc2Vuc2U7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6IC8qIHRzYV9kZHBjICovCisJCQkJc2Vuc2UgPSB0c2ItPnRzYS5kZHBjLnNlbnNlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBjdXJyZW50bHkgd2UgZG9uJ3QgdXNlIGludGVycm9nYXRlIGRhdGEgKi8KKwkJCQlicmVhazsKKwkJCX0KKwl9IGVsc2UgaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKKwkJc2Vuc2UgPSBpcmItPmVjdzsKKwl9CisJcmV0dXJuIHNlbnNlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZXRfc2Vuc2UpOworCiBzdGF0aWMgaW50IF9faW5pdCBkYXNkX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CkBAIC0yNDcyLDcgKzI1MTksNyBAQAogCiAJcmV0dXJuIDA7CiBmYWlsZWQ6Ci0JTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJpbml0aWFsaXphdGlvbiBub3QgcGVyZm9ybWVkIGR1ZSB0byBlcnJvcnMiKTsKKwlwcl9pbmZvKCJUaGUgREFTRCBkZXZpY2UgZHJpdmVyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZFxuIik7CiAJZGFzZF9leGl0KCk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKaW5kZXggZDgyYWFkNTIuLjI3OTkxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwpAQCAtNyw2ICs3LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9pZGFscy5oPgpAQCAtNzUsNyArNzcsNyBAQAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCisJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkgICAgImJsb2NraW5nIHJlcXVlc3QgcXVldWUgZm9yICVpcyIsIGV4cGlyZXMvSFopOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKQEAgLTExNCw5ICsxMTYsOSBAQAogCX0gZWxzZSB7CiAKIAkJLyogaXNzdWUgYSBtZXNzYWdlIGFuZCB3YWl0IGZvciAnZGV2aWNlIHJlYWR5JyBpbnRlcnJ1cHQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkgICAgImlzIG9mZmxpbmUgb3Igbm90IGluc3RhbGxlZCAtICIKLQkJCSAgICAiSU5URVJWRU5USU9OIFJFUVVJUkVEISEiKTsKKwkJCSAgICAiSU5URVJWRU5USU9OIFJFUVVJUkVEISFcbiIpOwogCiAJCWRhc2RfMzk5MF9lcnBfYmxvY2tfcXVldWUoZXJwLCA2MCpIWik7CiAJfQpAQCAtMTU4LDcgKzE2MCw3IEBACiAKIAlpZiAoKGVycC0+bHBtICYgb3BtKSAhPSAweDAwKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCiAJCQkgICAgInRyeSBhbHRlcm5hdGUgbHBtPSV4IChscHVtPSV4IC8gb3BtPSV4KSIsCiAJCQkgICAgZXJwLT5scG0sIGVycC0+aXJiLmVzdy5lc3cwLnN1YmxvZy5scHVtLCBvcG0pOwogCkBAIC0xNjYsMTAgKzE2OCw5IEBACiAJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogCQllcnAtPnJldHJpZXMgPSAxMDsKIAl9IGVsc2UgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJICAgICJObyBhbHRlcm5hdGUgY2hhbm5lbCBwYXRoIGxlZnQgKGxwdW09JXggLyAiCi0JCQkgICAgIm9wbT0leCkgLT4gcGVybWFuZW50IGVycm9yIiwKLQkJCSAgICBlcnAtPmlyYi5lc3cuZXN3MC5zdWJsb2cubHB1bSwgb3BtKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiVGhlIERBU0QgY2Fubm90IGJlIHJlYWNoZWQgb24gYW55IHBhdGggKGxwdW09JXgiCisJCQkiL29wbT0leClcbiIsIGVycC0+aXJiLmVzdy5lc3cwLnN1YmxvZy5scHVtLCBvcG0pOwogCiAJCS8qIHBvc3QgcmVxdWVzdCB3aXRoIHBlcm1hbmVudCBlcnJvciAqLwogCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKQEAgLTIwNCw4ICsyMDUsOCBAQAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgRENUTF9kYXRhKSwKIAkJCQkJICBkZXZpY2UpOwogCWlmIChJU19FUlIoZGN0bF9jcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBEQ1RMLUNRUiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIERDVEwtQ1FSXG4iKTsKIAkJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJCXJldHVybiBlcnA7CiAJfQpAQCAtMjk0LDcgKzI5NSw3IEBACiAJLyogaW50ZXJydXB0ICh0aGlzIGVuYWJsZXMgZWFzaWVyIGVucXVlaW5nIG9mIHRoZSBjcXIpCSAgICAqLwogCWlmIChlcnAtPmZ1bmN0aW9uICE9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJkYXNkXzM5OTBfZXJwX2FjdGlvbl80OiBmaXJzdCB0aW1lIHJldHJ5Iik7CiAKIAkJZXJwLT5yZXRyaWVzID0gMjU2OwpAQCAtMzAzLDcgKzMwNCw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKHNlbnNlICYmIChzZW5zZVsyNV0gPT0gMHgxRCkpIHsgLyogc3RhdGUgY2hhbmdlIHBlbmRpbmcgKi8KIAotCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICJ3YWl0aW5nIGZvciBzdGF0ZSBjaGFuZ2UgcGVuZGluZyAiCiAJCQkJICAgICJpbnRlcnJ1cHQsICVkIHJldHJpZXMgbGVmdCIsCiAJCQkJICAgIGVycC0+cmV0cmllcyk7CkBAIC0zMTEsMTUgKzMxMiwxNCBAQAogCQkJZGFzZF8zOTkwX2VycF9ibG9ja19xdWV1ZShlcnAsIDMwKkhaKTsKIAogCQl9IGVsc2UgaWYgKHNlbnNlICYmIChzZW5zZVsyNV0gPT0gMHgxRSkpIHsJLyogYnVzeSAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICJidXN5IC0gcmVkcml2aW5nIHJlcXVlc3QgbGF0ZXIsICIKIAkJCQkgICAgIiVkIHJldHJpZXMgbGVmdCIsCiAJCQkJICAgIGVycC0+cmV0cmllcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXNkXzM5OTBfZXJwX2Jsb2NrX3F1ZXVlKGVycCwgSFopOwogCQl9IGVsc2UgewotCiAJCQkvKiBubyBzdGF0ZSBjaGFuZ2UgcGVuZGluZyAtIHJldHJ5ICovCi0JCQlERVZfTUVTU0FHRSAoS0VSTl9JTkZPLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICAicmVkcml2aW5nIHJlcXVlc3QgaW1tZWRpYXRlbHksICIKIAkJCQkgICAgICIlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICAgZXJwLT5yZXRyaWVzKTsKQEAgLTM4NCw2ICszODQsNyBAQAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKIAljaGFyIG1zZ19mb3JtYXQgPSAoc2Vuc2VbN10gJiAweEYwKTsKIAljaGFyIG1zZ19ubyA9IChzZW5zZVs3XSAmIDB4MEYpOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJc3dpdGNoIChtc2dfZm9ybWF0KSB7CiAJY2FzZSAweDAwOgkJLyogRm9ybWF0IDAgLSBQcm9ncmFtIG9yIFN5c3RlbSBDaGVja3MgKi8KQEAgLTM5NCw5NSArMzk1LDk3IEBACiAJCQljYXNlIDB4MDA6CS8qIE5vIE1lc3NhZ2UgKi8KIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgQ29tbWFuZCIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgQ29tbWFuZFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDI6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBDb21tYW5kICIKLQkJCQkJICAgICJTZXF1ZW5jZSIpOworCQkJCQkgICAgIlNlcXVlbmNlXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMzoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBDQ1cgQ291bnQgbGVzcyB0aGFuICIKLQkJCQkJICAgICJyZXF1aXJlZCIpOworCQkJCQkgICAgInJlcXVpcmVkXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgUGFyYW1ldGVyIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBQYXJhbWV0ZXJcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA1OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gRGlhZ25vc3RpYyBvZiBTZXBlY2lhbCIKLQkJCQkJICAgICIgQ29tbWFuZCBWaW9sYXRlcyBGaWxlIE1hc2siKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBEaWFnbm9zdGljIG9mIFNwZWNpYWwiCisJCQkJCSAgICAiIENvbW1hbmQgVmlvbGF0ZXMgRmlsZSBNYXNrXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNzoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBDaGFubmVsIFJldHVybmVkIHdpdGggIgotCQkJCQkgICAgIkluY29ycmVjdCByZXRyeSBDQ1ciKTsKKwkJCQkJICAgICJJbmNvcnJlY3QgcmV0cnkgQ0NXXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwODoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2V0IE5vdGlmaWNhdGlvbiIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2V0IE5vdGlmaWNhdGlvblxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDk6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBTdG9yYWdlIFBhdGggUmVzdGFydCIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICJGT1JNQVQgMCAtIFN0b3JhZ2UgUGF0aCBSZXN0YXJ0XG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwQToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBDaGFubmVsIHJlcXVlc3RlZCAiCi0JCQkJCSAgICAiLi4uICUwMngiLCBzZW5zZVs4XSk7CisJCQkJCSAgICAiLi4uICUwMnhcbiIsIHNlbnNlWzhdKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwQjoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIERlZmVjdGl2ZS8iCi0JCQkJCSAgICAiQWx0ZXJuYXRlIFRyYWNrIFBvaW50ZXIiKTsKKwkJCQkJICAgICJBbHRlcm5hdGUgVHJhY2sgUG9pbnRlclxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEM6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gRFBTIEluc3RhbGxhdGlvbiAiCi0JCQkJCSAgICAiQ2hlY2siKTsKKwkJCQkJICAgICJDaGVja1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEU6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ29tbWFuZCBJbnZhbGlkIG9uICIKLQkJCQkJICAgICJTZWNvbmRhcnkgQWRkcmVzcyIpOworCQkJCQkgICAgIlNlY29uZGFyeSBBZGRyZXNzXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwRjoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBTdGF0dXMgTm90IEFzICIKLQkJCQkJICAgICJSZXF1aXJlZDogcmVhc29uICUwMngiLCBzZW5zZVs4XSk7CisJCQkJCSAgICAiUmVxdWlyZWQ6IHJlYXNvbiAlMDJ4XG4iLAorCQkJCQkgc2Vuc2VbOF0pOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2V2ZWQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZFxuIik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlzd2l0Y2ggKG1zZ19ubykgewogCQkJY2FzZSAweDAwOgkvKiBObyBNZXNzYWdlICovCiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDE6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBEZXZpY2UgRXJyb3IgU291cmNlIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgIkZPUk1BVCAwIC0gRGV2aWNlIEVycm9yICIKKwkJCQkJICJTb3VyY2VcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAyOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDM6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gRGV2aWNlIEZlbmNlZCAtICIKLQkJCQkJICAgICJkZXZpY2UgPSAlMDJ4Iiwgc2Vuc2VbNF0pOworCQkJCQkgICAgImRldmljZSA9ICUwMnhcbiIsIHNlbnNlWzRdKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBEYXRhIFBpbm5lZCBmb3IgIgotCQkJCQkgICAgIkRldmljZSIpOworCQkJCQkgICAgIkRldmljZVxuIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZFxuIik7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC00OTIsMzQ4ICs0OTUsMzUyIEBACiAJCWNhc2UgMHgwMDoJLyogTm8gTWVzc2FnZSAqLwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2UgU3RhdHVzIDEgbm90IGFzICIKLQkJCQkgICAgImV4cGVjdGVkIik7CisJCQkJICAgICJleHBlY3RlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIEluZGV4IG1pc3NpbmciKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gSW5kZXggbWlzc2luZ1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIEludGVycnVwdGlvbiBjYW5ub3QgYmUgcmVzZXQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCAxIC0gSW50ZXJydXB0aW9uIGNhbm5vdCBiZSAiCisJCQkJICJyZXNldFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBkaWQgbm90IHJlc3BvbmQgdG8gIgotCQkJCSAgICAic2VsZWN0aW9uIik7CisJCQkJICAgICJzZWxlY3Rpb25cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2UgY2hlY2stMiBlcnJvciBvciBTZXQgIgotCQkJCSAgICAiU2VjdG9yIGlzIG5vdCBjb21wbGV0ZSIpOworCQkJCSAgICAiU2VjdG9yIGlzIG5vdCBjb21wbGV0ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIEhlYWQgYWRkcmVzcyBkb2VzIG5vdCAiCi0JCQkJICAgICJjb21wYXJlIik7CisJCQkJICAgICJjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIHN0YXR1cyAxIG5vdCB2YWxpZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2Ugc3RhdHVzIDEgbm90IHZhbGlkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIG5vdCByZWFkeSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2Ugbm90IHJlYWR5XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gVHJhY2sgcGh5c2ljYWwgYWRkcmVzcyBkaWQgIgotCQkJCSAgICAibm90IGNvbXBhcmUiKTsKKwkJCQkgICAgIm5vdCBjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gTWlzc2luZyBkZXZpY2UgYWRkcmVzcyBiaXQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gTWlzc2luZyBkZXZpY2UgYWRkcmVzcyBiaXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBEcml2ZSBtb3RvciBzd2l0Y2ggaXMgb2ZmIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIERyaXZlIG1vdG9yIHN3aXRjaCBpcyBvZmZcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBTZWVrIGluY29tcGxldGUiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gU2VlayBpbmNvbXBsZXRlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gQ3lsaW5kZXIgYWRkcmVzcyBkaWQgbm90ICIKLQkJCQkgICAgImNvbXBhcmUiKTsKKwkJCQkgICAgImNvbXBhcmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBPZmZzZXQgYWN0aXZlIGNhbm5vdCBiZSAiCi0JCQkJICAgICJyZXNldCIpOworCQkJCSAgICAicmVzZXRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDIwOgkJLyogRm9ybWF0IDIgLSAzOTkwIEVxdWlwbWVudCBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMiAtIDM5OTAgY2hlY2stMiBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDIgLSAzOTkwIGNoZWNrLTIgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDIgLSBTdXBwb3J0IGZhY2lsaXR5IGVycm9ycyIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDIgLSBTdXBwb3J0IGZhY2lsaXR5IGVycm9yc1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBGOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0JCQkJICAgICJGT1JNQVQgMiAtIE1pY3JvY29kZSBkZXRlY3RlZCBlcnJvciAlMDJ4IiwKLQkJCQkgICAgc2Vuc2VbOF0pOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiRk9STUFUIDIgLSBNaWNyb2NvZGUgZGV0ZWN0ZWQgZXJyb3IgIgorCQkJCSAiJTAyeFxuIiwKKwkJCQkgc2Vuc2VbOF0pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAyIC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAyIC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDMwOgkJLyogRm9ybWF0IDMgLSAzOTkwIENvbnRyb2wgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwRjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDMgLSBBbGxlZ2lhbmNlIHRlcm1pbmF0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAzIC0gQWxsZWdpYW5jZSB0ZXJtaW5hdGVkXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMyAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMyAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHg0MDoJCS8qIEZvcm1hdCA0IC0gRGF0YSBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIEhvbWUgYWRkcmVzcyBhcmVhIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIEhvbWUgYWRkcmVzcyBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gQ291bnQgYXJlYSBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBDb3VudCBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gS2V5IGFyZWEgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gS2V5IGFyZWEgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBEYXRhIGFyZWEgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gRGF0YSBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGhvbWUgYWRkcmVzcyAiCi0JCQkJICAgICJhcmVhIik7CisJCQkJICAgICJhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGNvdW50IGFkZHJlc3MgIgotCQkJCSAgICAiYXJlYSIpOworCQkJCSAgICAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBrZXkgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4ga2V5IGFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gZGF0YSBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBkYXRhIGFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBIb21lIGFkZHJlc3MgYXJlYSBlcnJvcjsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIENvdW50IGFyZWEgZXJyb3I7IG9mZnNldCAiCi0JCQkJICAgICJhY3RpdmUiKTsKKwkJCQkgICAgImFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIEtleSBhcmVhIGVycm9yOyBvZmZzZXQgIgotCQkJCSAgICAiYWN0aXZlIik7CisJCQkJICAgICJhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBEYXRhIGFyZWEgZXJyb3I7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gaG9tZSAiCi0JCQkJICAgICJhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgImFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5biBieXRlIGluIGNvdW50ICIKLQkJCQkgICAgImFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAiYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGtleSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luIGJ5dGUgaW4gZGF0YSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHg1MDogIC8qIEZvcm1hdCA1IC0gRGF0YSBDaGVjayB3aXRoIGRpc3BsYWNlbWVudCBpbmZvcm1hdGlvbiAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgIgotCQkJCSAgICAiaG9tZSBhZGRyZXNzIGFyZWEiKTsKKwkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgY291bnQgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBjb3VudCAiCisJCQkJICJhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUga2V5IGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUga2V5IGFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBkYXRhIGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgZGF0YSAiCisJCQkJICJhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgIgotCQkJCSAgICAiaG9tZSBhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgY291bnQgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGtleSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgZGF0YSBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNSAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNSAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHg2MDogIC8qIEZvcm1hdCA2IC0gVXNhZ2UgU3RhdGlzdGljcy9PdmVycnVuIEVycm9ycyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQiIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQlxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBDIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBDXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIERcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBGIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBGXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEciKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEdcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgSCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgSFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NzA6ICAvKiBGb3JtYXQgNyAtIERldmljZSBDb25uZWN0aW9uIENvbnRyb2wgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBSQ0MgaW5pdGlhdGVkIGJ5IGEgY29ubmVjdGlvbiAiCi0JCQkJICAgICJjaGVjayBhbGVydCIpOworCQkJCSAgICAiY2hlY2sgYWxlcnRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBSQ0MgMSBzZXF1ZW5jZSBub3QgIgotCQkJCSAgICAic3VjY2Vzc2Z1bCIpOworCQkJCSAgICAic3VjY2Vzc2Z1bFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIFJDQyAxIGFuZCBSQ0MgMiBzZXF1ZW5jZXMgbm90ICIKLQkJCQkgICAgInN1Y2Nlc3NmdWwiKTsKKwkJCQkgICAgInN1Y2Nlc3NmdWxcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBJbnZhbGlkIHRhZy1pbiBkdXJpbmcgIgotCQkJCSAgICAic2VsZWN0aW9uIHNlcXVlbmNlIik7CisJCQkJICAgICJzZWxlY3Rpb24gc2VxdWVuY2VcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDcgLSBleHRyYSBSQ0MgcmVxdWlyZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA3IC0gZXh0cmEgUkNDIHJlcXVpcmVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gSW52YWxpZCBEQ0Mgc2VsZWN0aW9uICIKLQkJCQkgICAgInJlc3BvbnNlIG9yIHRpbWVvdXQiKTsKKwkJCQkgICAgInJlc3BvbnNlIG9yIHRpbWVvdXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBNaXNzaW5nIGVuZCBvcGVyYXRpb247IGRldmljZSAiCi0JCQkJICAgICJ0cmFuc2ZlciBjb21wbGV0ZSIpOworCQkJCSAgICAidHJhbnNmZXIgY29tcGxldGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBNaXNzaW5nIGVuZCBvcGVyYXRpb247IGRldmljZSAiCi0JCQkJICAgICJ0cmFuc2ZlciBpbmNvbXBsZXRlIik7CisJCQkJICAgICJ0cmFuc2ZlciBpbmNvbXBsZXRlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gSW52YWxpZCB0YWctaW4gZm9yIGFuICIKLQkJCQkgICAgImltbWVkaWF0ZSBjb21tYW5kIHNlcXVlbmNlIik7CisJCQkJICAgICJpbW1lZGlhdGUgY29tbWFuZCBzZXF1ZW5jZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIEludmFsaWQgdGFnLWluIGZvciBhbiAiCi0JCQkJICAgICJleHRlbmRlZCBjb21tYW5kIHNlcXVlbmNlIik7CisJCQkJICAgICJleHRlbmRlZCBjb21tYW5kIHNlcXVlbmNlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gMzk5MCBtaWNyb2NvZGUgdGltZSBvdXQgd2hlbiAiCi0JCQkJICAgICJzdG9wcGluZyBzZWxlY3Rpb24iKTsKKwkJCQkgICAgInN0b3BwaW5nIHNlbGVjdGlvblxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIE5vIHJlc3BvbnNlIHRvIHNlbGVjdGlvbiAiCi0JCQkJICAgICJhZnRlciBhIHBvbGwgaW50ZXJydXB0aW9uIik7CisJCQkJICAgICJhZnRlciBhIHBvbGwgaW50ZXJydXB0aW9uXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gUGVybWFuZW50IHBhdGggZXJyb3IgKERBU0QgIgotCQkJCSAgICAiY29udHJvbGxlciBub3QgYXZhaWxhYmxlKSIpOworCQkJCSAgICAiY29udHJvbGxlciBub3QgYXZhaWxhYmxlKVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIERBU0QgY29udHJvbGxlciBub3QgYXZhaWxhYmxlIgotCQkJCSAgICAiIG9uIGRpc2Nvbm5lY3RlZCBjb21tYW5kIGNoYWluIik7CisJCQkJICAgICIgb24gZGlzY29ubmVjdGVkIGNvbW1hbmQgY2hhaW5cbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA3IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA3IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCkBAIC04NDEsNTIgKzg0OCw1MiBAQAogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6CS8qIE5vIE1lc3NhZ2UgKi8KIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIEVycm9yIGNvcnJlY3Rpb24gY29kZSAiCi0JCQkJICAgICJoYXJkd2FyZSBmYXVsdCIpOworCQkJCSAgICAiaGFyZHdhcmUgZmF1bHRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBVbmV4cGVjdGVkIGVuZCBvcGVyYXRpb24gIgotCQkJCSAgICAicmVzcG9uc2UgY29kZSIpOworCQkJCSAgICAicmVzcG9uc2UgY29kZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIEVuZCBvcGVyYXRpb24gd2l0aCB0cmFuc2ZlciAiCi0JCQkJICAgICJjb3VudCBub3QgemVybyIpOworCQkJCSAgICAiY291bnQgbm90IHplcm9cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBFbmQgb3BlcmF0aW9uIHdpdGggdHJhbnNmZXIgIgotCQkJCSAgICAiY291bnQgemVybyIpOworCQkJCSAgICAiY291bnQgemVyb1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIERQUyBjaGVja3MgYWZ0ZXIgYSBzeXN0ZW0gIgotCQkJCSAgICAicmVzZXQgb3Igc2VsZWN0aXZlIHJlc2V0Iik7CisJCQkJICAgICJyZXNldCBvciBzZWxlY3RpdmUgcmVzZXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDggLSBEUFMgY2Fubm90IGJlIGZpbGxlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDggLSBEUFMgY2Fubm90IGJlIGZpbGxlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIFNob3J0IGJ1c3kgdGltZS1vdXQgZHVyaW5nICIKLQkJCQkgICAgImRldmljZSBzZWxlY3Rpb24iKTsKKwkJCQkgICAgImRldmljZSBzZWxlY3Rpb25cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBEQVNEIGNvbnRyb2xsZXIgZmFpbGVkIHRvICIKLQkJCQkgICAgInNldCBvciByZXNldCB0aGUgbG9uZyBidXN5IGxhdGNoIik7CisJCQkJICAgICJzZXQgb3IgcmVzZXQgdGhlIGxvbmcgYnVzeSBsYXRjaFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIE5vIGludGVycnVwdGlvbiBmcm9tIGRldmljZSAiCi0JCQkJICAgICJkdXJpbmcgYSBjb21tYW5kIGNoYWluIik7CisJCQkJICAgICJkdXJpbmcgYSBjb21tYW5kIGNoYWluXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOCAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgOCAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIApAQCAtODk1LDk3ICs5MDIsMTAwIEBACiAJCWNhc2UgMHgwMDoKIAkJCWJyZWFrOwkvKiBObyBNZXNzYWdlICovCiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDkgLSBEZXZpY2UgY2hlY2stMiBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDkgLSBEZXZpY2UgY2hlY2stMiBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOSAtIEhlYWQgYWRkcmVzcyBkaWQgbm90IGNvbXBhcmUiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCA5IC0gSGVhZCBhZGRyZXNzIGRpZCBub3QgIgorCQkJCSAiY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOSAtIFRyYWNrIHBoeXNpY2FsIGFkZHJlc3MgZGlkICIKLQkJCQkgICAgIm5vdCBjb21wYXJlIHdoaWxlIG9yaWVudGVkIik7CisJCQkJICAgICJub3QgY29tcGFyZSB3aGlsZSBvcmllbnRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOSAtIEN5bGluZGVyIGFkZHJlc3MgZGlkIG5vdCAiCi0JCQkJICAgICJjb21wYXJlIik7CisJCQkJICAgICJjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOSAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgOSAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHhGMDoJCS8qIEZvcm1hdCBGIC0gQ2FjaGUgU3RvcmFnZSBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIE9wZXJhdGlvbiBUZXJtaW5hdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIE9wZXJhdGlvbiBUZXJtaW5hdGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gU3Vic3lzdGVtIFByb2Nlc3NpbmcgRXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gU3Vic3lzdGVtIFByb2Nlc3NpbmcgRXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoZSBvciBub252b2xhdGlsZSBzdG9yYWdlICIKLQkJCQkgICAgImVxdWlwbWVudCBmYWlsdXJlIik7CisJCQkJICAgICJlcXVpcG1lbnQgZmFpbHVyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgdGVybWluYXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHRlcm1pbmF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoZSBmYXN0IHdyaXRlIGFjY2VzcyBub3QgIgotCQkJCSAgICAiYXV0aG9yaXplZCIpOworCQkJCSAgICAiYXV0aG9yaXplZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFRyYWNrIGZvcm1hdCBpbmNvcnJlY3QiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gVHJhY2sgZm9ybWF0IGluY29ycmVjdFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgcmVpbml0aWF0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGluZyByZWluaXRpYXRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgRiAtIE5vbnZvbGF0aWxlIHN0b3JhZ2UgIgotCQkJCSAgICAidGVybWluYXRlZCIpOworCQkJCSAgICAidGVybWluYXRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFZvbHVtZSBpcyBzdXNwZW5kZWQgZHVwbGV4Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFZvbHVtZSBpcyBzdXNwZW5kZWQgZHVwbGV4XG4iKTsKIAkJCS8qIGNhbGwgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIChFRVIpICovCiAJCQlkYXNkX2Vlcl93cml0ZShkZXZpY2UsIGVycC0+cmVmZXJzLAogCQkJCSAgICAgICBEQVNEX0VFUl9QUFJDU1VTUEVORCk7CiAJCQlicmVhazsKIAkJY2FzZSAweDBDOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBzdGF0dXMgY29ubm90IGJlICIKLQkJCQkgICAgImRldGVybWluZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gU3Vic3lzdGVtIHN0YXR1cyBjYW5ub3QgYmUgIgorCQkJCSAgICAiZGV0ZXJtaW5lZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgc3RhdHVzIHJlc2V0IHRvICIKLQkJCQkgICAgImRlZmF1bHQiKTsKKwkJCQkgICAgImRlZmF1bHRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBEQVNEIEZhc3QgV3JpdGUgaW5oaWJpdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIERBU0QgRmFzdCBXcml0ZSBpbmhpYml0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBEIC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBEIC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCi0JZGVmYXVsdDoJLyogdW5rbm93biBtZXNzYWdlIGZvcm1hdCAtIHNob3VsZCBub3QgaGFwcGVuICovCi0JICAgICAgICBERVZfTUVTU0FHRSAoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIG1lc3NhZ2UgZm9ybWF0ICUwMngiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfZm9ybWF0KTsKKwlkZWZhdWx0OgkvKiB1bmtub3duIG1lc3NhZ2UgZm9ybWF0IC0gc2hvdWxkIG5vdCBoYXBwZW4KKwkJCSAgIGludGVybmFsIGVycm9yIDAzIC0gdW5rbm93biBtZXNzYWdlIGZvcm1hdCAqLworCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIwMyAleDAyIiwgbXNnX2Zvcm1hdCk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkgInJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQlicmVhazsKIAl9CQkJLyogZW5kIHN3aXRjaCBtZXNzYWdlIGZvcm1hdCAqLwogCkBAIC0xMDE1LDcgKzEwMjUsNyBAQAogCS8qIGVudiBkYXRhIHByZXNlbnQgKEFDVElPTiAxMCAtIHJldHJ5IHNob3VsZCB3b3JrKSAqLwogCWlmIChzZW5zZVsyXSAmIFNOUzJfRU5WX0RBVEFfUFJFU0VOVCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb21tYW5kIFJlamVjdCAtIGVudmlyb25tZW50YWwgZGF0YSBwcmVzZW50Iik7CiAKIAkJZGFzZF8zOTkwX2hhbmRsZV9lbnZfZGF0YShlcnAsIHNlbnNlKTsKQEAgLTEwMjMsOSArMTAzMywxMCBAQAogCQllcnAtPnJldHJpZXMgPSA1OwogCiAJfSBlbHNlIHsKLQkJLyogZmF0YWwgZXJyb3IgLSAgc2V0IHN0YXR1cyB0byBGQUlMRUQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ29tbWFuZCBSZWplY3QgLSBGYXRhbCBlcnJvciIpOworCQkvKiBmYXRhbCBlcnJvciAtICBzZXQgc3RhdHVzIHRvIEZBSUxFRAorCQkgICBpbnRlcm5hbCBlcnJvciAwOSAtIENvbW1hbmQgUmVqZWN0ICovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjA5Iik7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAl9CkBAIC0xMDYxLDcgKzEwNzIsNyBAQAogCX0gZWxzZSB7CiAKIAkJLyogaXNzdWUgYSBtZXNzYWdlIGFuZCB3YWl0IGZvciAnZGV2aWNlIHJlYWR5JyBpbnRlcnJ1cHQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImJ1cyBvdXQgcGFyaXR5IGVycm9yIG9yIEJPUEMgcmVxdWVzdGVkIGJ5ICIKIAkJCSAgICAiY2hhbm5lbCIpOwogCkBAIC0xMDkzLDIxICsxMTA0LDE5IEBACiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfZXF1aXBfY2hlY2s7CiAKIAlpZiAoc2Vuc2VbMV0gJiBTTlMxX1dSSVRFX0lOSElCSVRFRCkgeworCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIldyaXRlIGluaGliaXRlZCBwYXRoIGVuY291bnRlcmVkXG4iKTsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIldyaXRlIGluaGliaXRlZCBwYXRoIGVuY291bnRlcmVkIik7Ci0KLQkJLyogdmFyeSBwYXRoIG9mZmxpbmUgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiUGF0aCBzaG91bGQgYmUgdmFyaWVkIG9mZi1saW5lLiAiCi0JCQkgICAgIlRoaXMgaXMgbm90IGltcGxlbWVudGVkIHlldCBcbiAtIHBsZWFzZSByZXBvcnQgIgotCQkJICAgICJ0byBsaW51eDM5MEBkZS5pYm0uY29tIik7CisJCS8qIHZhcnkgcGF0aCBvZmZsaW5lCisJCSAgIGludGVybmFsIGVycm9yIDA0IC0gUGF0aCBzaG91bGQgYmUgdmFyaWVkIG9mZi1saW5lLiovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjA0Iik7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMShlcnApOwogCiAJfSBlbHNlIGlmIChzZW5zZVsyXSAmIFNOUzJfRU5WX0RBVEFfUFJFU0VOVCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJFcXVpcG1lbnQgQ2hlY2sgLSAiICJlbnZpcm9ubWVudGFsIGRhdGEgcHJlc2VudCIpOwogCiAJCWRhc2RfMzk5MF9oYW5kbGVfZW52X2RhdGEoZXJwLCBzZW5zZSk7CkBAIC0xMTE2LDcgKzExMjUsNyBAQAogCiAJfSBlbHNlIGlmIChzZW5zZVsxXSAmIFNOUzFfUEVSTV9FUlIpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiRXF1aXBtZW50IENoZWNrIC0gcmV0cnkgZXhoYXVzdGVkIG9yICIKIAkJCSAgICAidW5kZXNpcmFibGUiKTsKIApAQCAtMTEyNSw3ICsxMTM0LDcgQEAKIAl9IGVsc2UgewogCQkvKiBhbGwgb3RoZXIgZXF1aXBtZW50IGNoZWNrcyAtIEFjdGlvbiA1ICovCiAJCS8qIHJlc3QgaXMgZG9uZSB3aGVuIHJldHJpZXMgPT0gMCAqLwotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiRXF1aXBtZW50IGNoZWNrIG9yIHByb2Nlc3NpbmcgZXJyb3IiKTsKIAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl81KGVycCk7CkBAIC0xMTU2LDkgKzExNjUsOSBAQAogCWlmIChzZW5zZVsyXSAmIFNOUzJfQ09SUkVDVEFCTEUpIHsJLyogY29ycmVjdGFibGUgZGF0YSBjaGVjayAqLwogCiAJCS8qIGlzc3VlIG1lc3NhZ2UgdGhhdCB0aGUgZGF0YSBoYXMgYmVlbiBjb3JyZWN0ZWQgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQlkZXZfZW1lcmcoJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJICAgICJEYXRhIHJlY292ZXJlZCBkdXJpbmcgcmV0cnkgd2l0aCBQQ0kgIgotCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZSIpOworCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZVxuIik7CiAKIAkJLyogbm90IHBvc3NpYmxlIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBpbiBMaW51eCAqLwogCQlwYW5pYygiTm8gd2F5IHRvIGluZm9ybSBhcHBsaWNhdGlvbiBhYm91dCB0aGUgcG9zc2libHkgIgpAQCAtMTE2Niw3ICsxMTc1LDcgQEAKIAogCX0gZWxzZSBpZiAoc2Vuc2VbMl0gJiBTTlMyX0VOVl9EQVRBX1BSRVNFTlQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5jb3JyZWN0YWJsZSBkYXRhIGNoZWNrIHJlY292ZXJlZCBzZWNvbmRhcnkgIgogCQkJICAgICJhZGRyIG9mIGR1cGxleCBwYWlyIik7CiAKQEAgLTExNzQsNyArMTE4Myw3IEBACiAKIAl9IGVsc2UgaWYgKHNlbnNlWzFdICYgU05TMV9QRVJNX0VSUikgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJVbmNvcnJlY3RhYmxlIGRhdGEgY2hlY2sgd2l0aCBpbnRlcm5hbCAiCiAJCQkgICAgInJldHJ5IGV4aGF1c3RlZCIpOwogCkBAIC0xMTgyLDcgKzExOTEsNyBAQAogCiAJfSBlbHNlIHsKIAkJLyogYWxsIG90aGVyIGRhdGEgY2hlY2tzICovCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJVbmNvcnJlY3RhYmxlIGRhdGEgY2hlY2sgd2l0aCByZXRyeSBjb3VudCAiCiAJCQkgICAgImV4aGF1c3RlZC4uLiIpOwogCkBAIC0xMjEyLDcgKzEyMjEsNyBAQAogCiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfb3ZlcnJ1bjsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAiT3ZlcnJ1biAtIHNlcnZpY2Ugb3ZlcnJ1biBvciBvdmVycnVuIgogCQkgICAgIiBlcnJvciByZXF1ZXN0ZWQgYnkgY2hhbm5lbCIpOwogCkBAIC0xMjQzLDcgKzEyNTIsNyBAQAogCiAJaWYgKHNlbnNlWzJdICYgU05TMl9FTlZfREFUQV9QUkVTRU5UKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlRyYWNrIGZvcm1hdCBlcnJvciB3aGVuIGRlc3RhZ2luZyBvciAiCiAJCQkgICAgInN0YWdpbmcgZGF0YSIpOwogCkBAIC0xMjUyLDggKzEyNjEsMTAgQEAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIHNlbnNlKTsKIAogCX0gZWxzZSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkludmFsaWQgVHJhY2sgRm9ybWF0IC0gRmF0YWwgZXJyb3IiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMDYgLSBUaGUgdHJhY2sgZm9ybWF0IGlzIG5vdCB2YWxpZCovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSJyZWFzb249JXNcbiIsICIwNiIpOwogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQpAQCAtMTI3OSw4ICsxMjkwLDggQEAKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZGVmYXVsdF9lcnAtPnN0YXJ0ZGV2OwogCi0JREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJICAgICJFbmQtb2YtQ3lsaW5kZXIgLSBtdXN0IG5ldmVyIGhhcHBlbiIpOworCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkiVGhlIGN5bGluZGVyIGRhdGEgZm9yIGFjY2Vzc2luZyB0aGUgREFTRCBpcyBpbmNvbnNpc3RlbnRcbiIpOwogCiAJLyogaW1wbGVtZW50IGFjdGlvbiA3IC0gQlVHICovCiAJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChkZWZhdWx0X2VycCwgREFTRF9DUVJfRkFJTEVEKTsKQEAgLTEzMDYsNyArMTMxNyw3IEBACiAKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9lbnZfZGF0YTsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwgIkVudmlyb25tZW50YWwgZGF0YSBwcmVzZW50Iik7CisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLCAiRW52aXJvbm1lbnRhbCBkYXRhIHByZXNlbnQiKTsKIAogCWRhc2RfMzk5MF9oYW5kbGVfZW52X2RhdGEoZXJwLCBzZW5zZSk7CiAKQEAgLTEzMzksOCArMTM1MCw4IEBACiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGRlZmF1bHRfZXJwLT5zdGFydGRldjsKIAotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCSAgICAiTm8gUmVjb3JkIEZvdW5kIC0gRmF0YWwgZXJyb3IgIik7CisJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSAgICAiVGhlIHNwZWNpZmllZCByZWNvcmQgd2FzIG5vdCBmb3VuZFxuIik7CiAKIAlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGRlZmF1bHRfZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCkBAIC0xMzY1LDcgKzEzNzYsOCBAQAogCiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwogCi0JREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwgIkZpbGUgUHJvdGVjdGVkIik7CisJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2Ugb2YgIgorCQkiYSBoYXJkd2FyZSBlcnJvclxuIik7CiAKIAlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIApAQCAtMTM5NCw3ICsxNDA2LDcgQEAKIAlpZiAoY3FyLT5ibG9jayAmJgogCSAgICAoY3FyLT5ibG9jay0+YmFzZSAhPSBjcXItPnN0YXJ0ZGV2KSkgewogCQlpZiAoY3FyLT5zdGFydGRldi0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgY3FyLT5zdGFydGRldiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgY3FyLT5zdGFydGRldiwKIAkJCQkgICAgIkVSUCBvbiBhbGlhcyBkZXZpY2UgZm9yIHJlcXVlc3QgJXAsIgogCQkJCSAgICAiIHJlY292ZXIgb24gYmFzZSBkZXZpY2UgJXMiLCBjcXIsCiAJCQkJICAgIGRldl9uYW1lKCZjcXItPmJsb2NrLT5iYXNlLT5jZGV2LT5kZXYpKTsKQEAgLTE1MTEsNyArMTUyMyw3IEBACiAJZXJwLT5yZXRyaWVzID0gMjU2OwogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xMF8zMjsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwgIlBlcmZvcm0gbG9nZ2luZyByZXF1ZXN0ZWQiKTsKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsICJQZXJmb3JtIGxvZ2dpbmcgcmVxdWVzdGVkIik7CiAKIAlyZXR1cm4gZXJwOwogCkBAIC0xNTQ5LDcgKzE1NjEsNyBAQAogCWNoYXIgKkxPX2RhdGE7CQkvKiBMT19lY2tkX2RhdGFfdCAqLwogCXN0cnVjdCBjY3cxICpjY3csICpvbGRjY3c7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgIldyaXRlIG5vdCBmaW5pc2hlZCBiZWNhdXNlIG9mIHVuZXhwZWN0ZWQgY29uZGl0aW9uIik7CiAKIAlkZWZhdWx0X2VycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xQl8zMjsKQEAgLTE1NjEsMTAgKzE1NzMsMTYgQEAKIAkJY3FyID0gY3FyLT5yZWZlcnM7CiAJfQogCisJaWYgKHNjc3dfaXNfdG0oJmNxci0+aXJiLnNjc3cpKSB7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICIzMiBiaXQgc2Vuc2UsIGFjdGlvbiAxQiBpcyBub3QgZGVmaW5lZCIKKwkJCSAgICAgICIgaW4gdHJhbnNwb3J0IG1vZGUgLSBqdXN0IHJldHJ5Iik7CisJCXJldHVybiBkZWZhdWx0X2VycDsKKwl9CisKIAkvKiBmb3IgaW1wcmVjaXNlIGVuZGluZyBqdXN0IGRvIGRlZmF1bHQgZXJwICovCiAJaWYgKHNlbnNlWzFdICYgMHgwMSkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJJbXByZWNpc2UgZW5kaW5nIGlzIHNldCAtIGp1c3QgcmV0cnkiKTsKIAogCQlyZXR1cm4gZGVmYXVsdF9lcnA7CkBAIC0xNTc1LDggKzE1OTMsNyBAQAogCWNwYSA9IGRlZmF1bHRfZXJwLT5yZWZlcnMtPmlyYi5zY3N3LmNtZC5jcGE7CiAKIAlpZiAoY3BhID09IDApIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5hYmxlIHRvIGRldGVybWluZSBhZGRyZXNzIG9mIHRoZSBDQ1cgIgogCQkJICAgICJ0byBiZSByZXN0YXJ0ZWQiKTsKIApAQCAtMTU5MCw3ICsxNjA3LDkgQEAKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgTE9fZWNrZF9kYXRhKSwgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoZXJwKSkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLCAiVW5hYmxlIHRvIGFsbG9jYXRlIEVSUCIpOworCQkvKiBpbnRlcm5hbCBlcnJvciAwMSAtIFVuYWJsZSB0byBhbGxvY2F0ZSBFUlAgKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCAiMDEiKTsKIAkJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChkZWZhdWx0X2VycCwgREFTRF9DUVJfRkFJTEVEKTsKIAl9CiAKQEAgLTE1OTksNyArMTYxOCw3IEBACiAJb2xkY2N3ID0gY3FyLT5jcGFkZHI7CiAJaWYgKG9sZGNjdy0+Y21kX2NvZGUgPT0gREFTRF9FQ0tEX0NDV19QRlgpIHsKIAkJUEZYX2RhdGEgPSBjcXItPmRhdGE7Ci0JCW1lbWNweShERV9kYXRhLCAmUEZYX2RhdGEtPmRlZmluZV9leHRlbmQsCisJCW1lbWNweShERV9kYXRhLCAmUEZYX2RhdGEtPmRlZmluZV9leHRlbnQsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSkpOwogCX0gZWxzZQogCQltZW1jcHkoREVfZGF0YSwgY3FyLT5kYXRhLCBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSkpOwpAQCAtMTYwOCwxMCArMTYyNyw3IEBACiAJTE9fZGF0YSA9IGVycC0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKTsKIAogCWlmICgoc2Vuc2VbM10gPT0gMHgwMSkgJiYgKExPX2RhdGFbMV0gJiAweDAxKSkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkJVRyAtIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iKTsKLQorCQkvKiBzaG91bGQgbm90ICovCiAJCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZGVmYXVsdF9lcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQogCkBAIC0xNzAxLDcgKzE3MTcsNyBAQAogCWNoYXIgKkxPX2RhdGE7CQkvKiBzdHJ1Y3QgTE9fZWNrZF9kYXRhICovCiAJc3RydWN0IGNjdzEgKmNjdzsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAiV3JpdGUgbm90IGZpbmlzaGVkIGJlY2F1c2Ugb2YgdW5leHBlY3RlZCBjb25kaXRpb24iCiAJCSAgICAiIC0gZm9sbG93IG9uIik7CiAKQEAgLTE3MTIsMTAgKzE3MjgsMTYgQEAKIAkJY3FyID0gY3FyLT5yZWZlcnM7CiAJfQogCisJaWYgKHNjc3dfaXNfdG0oJmNxci0+aXJiLnNjc3cpKSB7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICIzMiBiaXQgc2Vuc2UsIGFjdGlvbiAxQiwgdXBkYXRlLCIKKwkJCSAgICAgICIgaW4gdHJhbnNwb3J0IG1vZGUgLSBqdXN0IHJldHJ5Iik7CisJCXJldHVybiBwcmV2aW91c19lcnA7CisJfQorCiAJLyogZm9yIGltcHJlY2lzZSBlbmRpbmcganVzdCBkbyBkZWZhdWx0IGVycCAqLwogCWlmIChzZW5zZVsxXSAmIDB4MDEpIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiSW1wcmVjaXNlIGVuZGluZyBpcyBzZXQgLSBqdXN0IHJldHJ5Iik7CiAKIAkJcHJldmlvdXNfZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CkBAIC0xNzI4LDEwICsxNzUwLDEwIEBACiAJY3BhID0gcHJldmlvdXNfZXJwLT5pcmIuc2Nzdy5jbWQuY3BhOwogCiAJaWYgKGNwYSA9PSAwKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFkZHJlc3Mgb2YgdGhlIENDVyAiCi0JCQkgICAgInRvIGJlIHJlc3RhcnRlZCIpOworCQkvKiBpbnRlcm5hbCBlcnJvciAwMiAtCisJCSAgIFVuYWJsZSB0byBkZXRlcm1pbmUgYWRkcmVzcyBvZiB0aGUgQ0NXIHRvIGJlIHJlc3RhcnRlZCAqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwMiIpOwogCiAJCXByZXZpb3VzX2VycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCkBAIC0xNzQ0LDEwICsxNzY2LDcgQEAKIAlMT19kYXRhID0gZXJwLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpOwogCiAJaWYgKChzZW5zZVszXSA9PSAweDAxKSAmJiAoTE9fZGF0YVsxXSAmIDB4MDEpKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQlVHIC0gdGhpcyBzaG91bGQgbm90IGhhcHBlbiIpOwotCisJCS8qIHNob3VsZCBub3QgaGFwcGVuICovCiAJCXByZXZpb3VzX2VycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCiAJCXJldHVybiBwcmV2aW91c19lcnA7CkBAIC0xOTM1LDE0ICsxOTU0LDEzIEBACiAKIAlpZiAoKHNlbnNlWzI1XSAmIERBU0RfU0VOU0VfQklUXzEpICYmIChzZW5zZVsyNl0gJiBEQVNEX1NFTlNFX0JJVF8yKSkgewogCi0JCS8qIHNldCB0byBzdXNwZW5kZWQgZHVwbGV4IHN0YXRlIHRoZW4gcmVzdGFydCAqLworCQkvKiBzZXQgdG8gc3VzcGVuZGVkIGR1cGxleCBzdGF0ZSB0aGVuIHJlc3RhcnQKKwkJICAgaW50ZXJuYWwgZXJyb3IgMDUgLSBTZXQgZGV2aWNlIHRvIHN1c3BlbmRlZCBkdXBsZXggc3RhdGUKKwkJICAgc2hvdWxkIGJlIGRvbmUgKi8KIAkJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwotCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlNldCBkZXZpY2UgdG8gc3VzcGVuZGVkIGR1cGxleCBzdGF0ZSBzaG91bGQgYmUgIgotCQkJICAgICJkb25lIVxuIgotCQkJICAgICJUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKGZvciBjb21wb3VuZCBFUlApIgotCQkJICAgICIgLSBwbGVhc2UgcmVwb3J0IHRvIGxpbnV4MzkwQGRlLmlibS5jb20iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJInJlYXNvbj0lc1xuIiwgIjA1Iik7CiAKIAl9CiAKQEAgLTIwMTIsMTUgKzIwMzAsMTQgQEAKIHsKIAkvKiBwcmludCBtZXNzYWdlIGFjY29yZGluZyB0byBsb2cgb3IgbWVzc2FnZSB0byBvcGVyYXRvciBtb2RlICovCiAJaWYgKChzZW5zZVsyNF0gJiBEQVNEX1NJTV9NU0dfVE9fT1ApIHx8IChzZW5zZVsxXSAmIDB4MTApKSB7Ci0KIAkJLyogcHJpbnQgU0lNIFNSQyBmcm9tIFJlZkNvZGUgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIlNJTSAtIFNSQzogIgotCQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4Iiwgc2Vuc2VbMjJdLAorCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlNJTSAtIFNSQzogIgorCQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4XG4iLCBzZW5zZVsyMl0sCiAJCQkgICAgc2Vuc2VbMjNdLCBzZW5zZVsxMV0sIHNlbnNlWzEyXSk7CiAJfSBlbHNlIGlmIChzZW5zZVsyNF0gJiBEQVNEX1NJTV9MT0cpIHsKIAkJLyogcHJpbnQgU0lNIFNSQyBSZWZjb2RlICovCi0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiU0lNIC0gU1JDOiAiCi0JCQkgICAgIiUwMnglMDJ4JTAyeCUwMngiLCBzZW5zZVsyMl0sCisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgImxvZyBTSU0gLSBTUkM6ICIKKwkJCSAgICAiJTAyeCUwMnglMDJ4JTAyeFxuIiwgc2Vuc2VbMjJdLAogCQkJICAgIHNlbnNlWzIzXSwgc2Vuc2VbMTFdLCBzZW5zZVsxMl0pOwogCX0KIH0KQEAgLTIwNjMsMTQgKzIwODAsMTQgQEAKIAkJc3dpdGNoIChzZW5zZVsyNV0pIHsKIAogCQljYXNlIDB4MDA6CS8qIHN1Y2Nlc3MgLSB1c2UgZGVmYXVsdCBFUlAgZm9yIHJldHJpZXMgKi8KLQkJICAgICAgICBERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiRVJQIGNhbGxlZCBmb3Igc3VjY2Vzc2Z1bCByZXF1ZXN0IgogCQkJCSAgICAiIC0ganVzdCByZXRyeSIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDAxOgkvKiBmYXRhbCBlcnJvciAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIlJldHJ5IG5vdCByZWNvbW1lbmRlZCAtIEZhdGFsIGVycm9yIik7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkVSUCBmYWlsZWQgZm9yIHRoZSBEQVNEXG4iKTsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAkJCWJyZWFrOwpAQCAtMjA4MCwxMyArMjA5NywxMCBAQAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9pbnRfcmVxKGVycCk7CiAJCQlicmVhazsKIAotCQljYXNlIDB4MEY6ICAvKiBsZW5ndGggbWlzbWF0Y2ggZHVyaW5nIHVwZGF0ZSB3cml0ZSBjb21tYW5kICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAidXBkYXRlIHdyaXRlIGNvbW1hbmQgZXJyb3IgLSBzaG91bGQgbm90ICIKLQkJCQkgICAgImhhcHBlbjtcbiIKLQkJCQkgICAgIlBsZWFzZSBzZW5kIHRoaXMgbWVzc2FnZSB0b2dldGhlciB3aXRoICIKLQkJCQkgICAgInRoZSBhYm92ZSBzZW5zZSBkYXRhIHRvIGxpbnV4MzkwQGRlLiIKLQkJCQkgICAgImlibS5jb20iKTsKKwkJY2FzZSAweDBGOiAgLyogbGVuZ3RoIG1pc21hdGNoIGR1cmluZyB1cGRhdGUgd3JpdGUgY29tbWFuZAorCQkJICAgICAgIGludGVybmFsIGVycm9yIDA4IC0gdXBkYXRlIHdyaXRlIGNvbW1hbmQgZXJyb3IqLworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgIgorCQkJCSJEQVNEIGRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjA4Iik7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTIwOTUsMTMgKzIxMDksMTIgQEAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzEwXzMyKGVycCwgc2Vuc2UpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAweDE1OgkvKiBuZXh0IHRyYWNrIG91dHNpZGUgZGVmaW5lZCBleHRlbmQgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJuZXh0IHRyYWNrIG91dHNpZGUgZGVmaW5lZCBleHRlbmQgLSAiCi0JCQkJICAgICJzaG91bGQgbm90IGhhcHBlbjtcbiIKLQkJCQkgICAgIlBsZWFzZSBzZW5kIHRoaXMgbWVzc2FnZSB0b2dldGhlciB3aXRoICIKLQkJCQkgICAgInRoZSBhYm92ZSBzZW5zZSBkYXRhIHRvIGxpbnV4MzkwQGRlLiIKLQkJCQkgICAgImlibS5jb20iKTsKKwkJY2FzZSAweDE1OgkvKiBuZXh0IHRyYWNrIG91dHNpZGUgZGVmaW5lZCBleHRlbmQKKwkJCQkgICBpbnRlcm5hbCBlcnJvciAwNyAtIFRoZSBuZXh0IHRyYWNrIGlzIG5vdAorCQkJCSAgIHdpdGhpbiB0aGUgZGVmaW5lZCBzdG9yYWdlIGV4dGVudCAqLworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCQkicmVhc29uPSVzXG4iLCAiMDciKTsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAkJCWJyZWFrOwpAQCAtMjExMiw5ICsyMTI1LDkgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgxQzoJLyogaW52YWxpZCBkYXRhICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VNRVJHLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfZW1lcmcoJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRGF0YSByZWNvdmVyZWQgZHVyaW5nIHJldHJ5IHdpdGggUENJICIKLQkJCQkgICAgImZldGNoIG1vZGUgYWN0aXZlIik7CisJCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZVxuIik7CiAKIAkJCS8qIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gaW4gTGludXggKi8KIAkJCXBhbmljCkBAIC0yMTIzLDcgKzIxMzYsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDFEOgkvKiBzdGF0ZS1jaGFuZ2UgcGVuZGluZyAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiQSBTdGF0ZSBjaGFuZ2UgcGVuZGluZyBjb25kaXRpb24gZXhpc3RzICIKIAkJCQkgICAgImZvciB0aGUgc3Vic3lzdGVtIG9yIGRldmljZSIpOwogCkBAIC0yMTMxLDcgKzIxNDQsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDFFOgkvKiBidXN5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkJICAgICJCdXN5IGNvbmRpdGlvbiBleGlzdHMgIgogCQkJCSAgICAiZm9yIHRoZSBzdWJzeXN0ZW0gb3IgZGV2aWNlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBlcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KGVycCwgc2Vuc2UpOwpAQCAtMjE3MSw5ICsyMTg0LDkgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7CiAKLQlpZiAoZXJwLT5yZWZlcnMtPmlyYi5zY3N3LmNtZC5jc3RhdCAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISworCWlmIChzY3N3X2NzdGF0KCZlcnAtPnJlZmVycy0+aXJiLnNjc3cpICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLCiAJCQkJCSAgIHwgU0NITl9TVEFUX0NITl9DVFJMX0NISykpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImNoYW5uZWwgb3IgaW50ZXJmYWNlIGNvbnRyb2wgY2hlY2siKTsKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIE5VTEwpOwogCX0KQEAgLTIxOTMsMjEgKzIyMDYsMjMgQEAKICAqICAgZXJwX25ldwkJY29udGVucyB3YXMgcG9zc2libHkgbW9kaWZpZWQKICAqLwogc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKgotZGFzZF8zOTkwX2VycF9pbnNwZWN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKiBlcnApCitkYXNkXzM5OTBfZXJwX2luc3BlY3Qoc3RydWN0IGRhc2RfY2N3X3JlcSAqZXJwKQogewogCiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqZXJwX25ldyA9IE5VTEw7Ci0JLyogc2Vuc2UgZGF0YSBhcmUgbG9jYXRlZCBpbiB0aGUgcmVmZXJzIHJlY29yZCBvZiB0aGUgKi8KLQkvKiBhbHJlYWR5IHNldCB1cCBuZXcgRVJQICEJCQkgICAgICAqLwotCWNoYXIgKnNlbnNlID0gZXJwLT5yZWZlcnMtPmlyYi5lY3c7CisJY2hhciAqc2Vuc2U7CiAKIAkvKiBpZiB0aGlzIHByb2JsZW0gb2NjdXJlZCBvbiBhbiBhbGlhcyByZXRyeSBvbiBiYXNlICovCiAJZXJwX25ldyA9IGRhc2RfMzk5MF9lcnBfaW5zcGVjdF9hbGlhcyhlcnApOwogCWlmIChlcnBfbmV3KQogCQlyZXR1cm4gZXJwX25ldzsKIAotCS8qIGNoZWNrIGlmIG5vIGNvbmN1cnJlbnQgc2VucyBpcyBhdmFpbGFibGUgKi8KLQlpZiAoIWVycC0+cmVmZXJzLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMpCisJLyogc2Vuc2UgZGF0YSBhcmUgbG9jYXRlZCBpbiB0aGUgcmVmZXJzIHJlY29yZCBvZiB0aGUKKwkgKiBhbHJlYWR5IHNldCB1cCBuZXcgRVJQICEKKwkgKiBjaGVjayBpZiBjb25jdXJyZW50IHNlbnMgaXMgYXZhaWxhYmxlCisJICovCisJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmZXJwLT5yZWZlcnMtPmlyYik7CisJaWYgKCFzZW5zZSkKIAkJZXJwX25ldyA9IGRhc2RfMzk5MF9lcnBfY29udHJvbF9jaGVjayhlcnApOwogCS8qIGRpc3Rpbmd1aXNoIGJldHdlZW4gMjQgYW5kIDMyIGJ5dGUgc2Vuc2UgZGF0YSAqLwogCWVsc2UgaWYgKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApIHsKQEAgLTIyMzEsNyArMjI0NiwxMSBAQAogICogREVTQ1JJUFRJT04KICAqICAgVGhpcyBmdW50aW9uIGFkZHMgYW4gYWRkaXRpb25hbCByZXF1ZXN0IGJsb2NrIChFUlApIHRvIHRoZSBoZWFkIG9mCiAgKiAgIHRoZSBnaXZlbiBjcXIgKG9yIGVycCkuCi0gKiAgIFRoaXMgZXJwIGlzIGluaXRpYWxpemVkIGFzIGFuIGRlZmF1bHQgZXJwIChyZXRyeSBUSUMpCisgKiAgIEZvciBhIGNvbW1hbmQgbW9kZSBjcXIgdGhlIGVycCBpcyBpbml0aWFsaXplZCBhcyBhbiBkZWZhdWx0IGVycAorICogICAocmV0cnkgVElDKS4KKyAqICAgRm9yIHRyYW5zcG9ydCBtb2RlIHdlIG1ha2UgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBUQ1cgKHBvaW50cyB0bworICogICB0aGUgb3JpZ2luYWwgVENDQiwgVElEQUxzLCBldGMuKSBidXQgZ2l2ZSBpdCBhIGZyZXNoCisgKiAgIFRTQiBzbyB0aGUgb3JpZ2luYWwgc2Vuc2UgZGF0YSB3aWxsIG5vdCBiZSBjaGFuZ2VkLgogICoKICAqIFBBUkFNRVRFUgogICogICBjcXIJCWhlYWQgb2YgdGhlIGN1cnJlbnQgRVJQLWNoYWluIChvciBzaW5nbGUgY3FyIGlmCkBAIC0yMjM5LDI1ICsyMjU4LDM1IEBACiAgKiBSRVRVUk4gVkFMVUVTCiAgKiAgIGVycAkJcG9pbnRlciB0byBuZXcgRVJQLWNoYWluIGhlYWQKICAqLwotc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKgotZGFzZF8zOTkwX2VycF9hZGRfZXJwKHN0cnVjdCBkYXNkX2Njd19yZXEgKiBjcXIpCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF8zOTkwX2VycF9hZGRfZXJwKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcikKIHsKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gY3FyLT5zdGFydGRldjsKIAlzdHJ1Y3QgY2N3MSAqY2N3OworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmVycDsKKwlpbnQgY3BsZW5ndGgsIGRhdGFzaXplOworCXN0cnVjdCB0Y3cgKnRjdzsKKwlzdHJ1Y3QgdHNiICp0c2I7CisKKwlpZiAoY3FyLT5jcG1vZGUgPT0gMSkgeworCQljcGxlbmd0aCA9IDA7CisJCWRhdGFzaXplID0gc2l6ZW9mKHN0cnVjdCB0Y3cpICsgc2l6ZW9mKHN0cnVjdCB0c2IpOworCX0gZWxzZSB7CisJCWNwbGVuZ3RoID0gMjsKKwkJZGF0YXNpemUgPSAwOworCX0KIAogCS8qIGFsbG9jYXRlIGFkZGl0aW9uYWwgcmVxdWVzdCBibG9jayAqLwotCXN0cnVjdCBkYXNkX2Njd19yZXEgKmVycDsKLQotCWVycCA9IGRhc2RfYWxsb2NfZXJwX3JlcXVlc3QoKGNoYXIgKikgJmNxci0+bWFnaWMsIDIsIDAsIGRldmljZSk7CisJZXJwID0gZGFzZF9hbGxvY19lcnBfcmVxdWVzdCgoY2hhciAqKSAmY3FyLT5tYWdpYywKKwkJCQkgICAgIGNwbGVuZ3RoLCBkYXRhc2l6ZSwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGVycCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY3FyLT5yZXRyaWVzIDw9IDApIHsKLQkJICAgICAgICBERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCiAJCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgRVJQIHJlcXVlc3QiKTsKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5zdG9wY2xrID0gZ2V0X2Nsb2NrICgpOwogCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgREVWX01FU1NBR0UgKEtFUk5fRVJSLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIEVSUCByZXF1ZXN0ICIKIAkJCQkgICAgICIoJWkgcmV0cmllcyBsZWZ0KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5yZXRyaWVzKTsKQEAgLTIyNjYsMTMgKzIyOTUsMjQgQEAKIAkJcmV0dXJuIGNxcjsKIAl9CiAKLQkvKiBpbml0aWFsaXplIHJlcXVlc3Qgd2l0aCBkZWZhdWx0IFRJQyB0byBjdXJyZW50IEVSUC9DUVIgKi8KLQljY3cgPSBlcnAtPmNwYWRkcjsKLQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9OT09QOwotCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19DQzsKLQljY3crKzsKLQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9USUM7Ci0JY2N3LT5jZGEgICAgICA9IChsb25nKShjcXItPmNwYWRkcik7CisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJLyogbWFrZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgb3JpZ2luYWwgdGN3IGJ1dCBzZXQgbmV3IHRzYiAqLworCQllcnAtPmNwbW9kZSA9IDE7CisJCWVycC0+Y3BhZGRyID0gZXJwLT5kYXRhOworCQl0Y3cgPSBlcnAtPmRhdGE7CisJCXRzYiA9IChzdHJ1Y3QgdHNiICopICZ0Y3dbMV07CisJCSp0Y3cgPSAqKChzdHJ1Y3QgdGN3ICopY3FyLT5jcGFkZHIpOworCQl0Y3ctPnRzYiA9IChsb25nKXRzYjsKKwl9IGVsc2UgeworCQkvKiBpbml0aWFsaXplIHJlcXVlc3Qgd2l0aCBkZWZhdWx0IFRJQyB0byBjdXJyZW50IEVSUC9DUVIgKi8KKwkJY2N3ID0gZXJwLT5jcGFkZHI7CisJCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX05PT1A7CisJCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19DQzsKKwkJY2N3Kys7CisJCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX1RJQzsKKwkJY2N3LT5jZGEgICAgICA9IChsb25nKShjcXItPmNwYWRkcik7CisJfQorCiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfYWRkX2VycDsKIAllcnAtPnJlZmVycyAgID0gY3FyOwogCWVycC0+c3RhcnRkZXYgPSBkZXZpY2U7CkBAIC0yMjgyLDcgKzIzMjIsNiBAQAogCWVycC0+ZXhwaXJlcyAgPSAwOwogCWVycC0+cmV0cmllcyAgPSAyNTY7CiAJZXJwLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwotCiAJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CiAKIAlyZXR1cm4gZXJwOwpAQCAtMjM0MCwyOCArMjM3OSwzMyBAQAogICogICBtYXRjaAkJJ2Jvb2xlYW4nIGZvciBtYXRjaCBmb3VuZAogICoJCQlyZXR1cm5zIDEgaWYgbWF0Y2ggZm91bmQsIG90aGVyd2lzZSAwLgogICovCi1zdGF0aWMgaW50Ci1kYXNkXzM5OTBfZXJwX2Vycm9yX21hdGNoKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjEsIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjIpCitzdGF0aWMgaW50IGRhc2RfMzk5MF9lcnBfZXJyb3JfbWF0Y2goc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyMSwKKwkJCQkgICAgIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjIpCiB7CisJY2hhciAqc2Vuc2UxLCAqc2Vuc2UyOwogCiAJaWYgKGNxcjEtPnN0YXJ0ZGV2ICE9IGNxcjItPnN0YXJ0ZGV2KQogCQlyZXR1cm4gMDsKIAotCWlmIChjcXIxLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMgIT0gY3FyMi0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQotCQlyZXR1cm4gMDsKKwlzZW5zZTEgPSBkYXNkX2dldF9zZW5zZSgmY3FyMS0+aXJiKTsKKwlzZW5zZTIgPSBkYXNkX2dldF9zZW5zZSgmY3FyMi0+aXJiKTsKIAotCWlmICgoY3FyMS0+aXJiLmVzdy5lc3cwLmVydy5jb25zID09IDApICYmCi0JICAgIChjcXIyLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMgPT0gMCkpCXsKLQkJaWYgKChjcXIxLT5pcmIuc2Nzdy5jbWQuY3N0YXQgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAotCQkJCQkgICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSA9PQotCQkgICAgKGNxcjItPmlyYi5zY3N3LmNtZC5jc3RhdCAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8Ci0JCQkJCSAgICAgU0NITl9TVEFUX0NITl9DVFJMX0NISykpKQorCS8qIG9uZSByZXF1ZXN0IGhhcyBzZW5zZSBkYXRhLCB0aGUgb3RoZXIgbm90IC0+IG5vIG1hdGNoLCByZXR1cm4gMCAqLworCWlmICghc2Vuc2UxICE9ICFzZW5zZTIpCisJCXJldHVybiAwOworCS8qIG5vIHNlbnNlIGRhdGEgaW4gYm90aCBjYXNlcyAtPiBjaGVjayBjc3RhdCBmb3IgSUZDQyAqLworCWlmICghc2Vuc2UxICYmICFzZW5zZTIpCXsKKwkJaWYgKChzY3N3X2NzdGF0KCZjcXIxLT5pcmIuc2NzdykgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAorCQkJCQkJICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSA9PQorCQkgICAgKHNjc3dfY3N0YXQoJmNxcjItPmlyYi5zY3N3KSAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8CisJCQkJCQkgICAgU0NITl9TVEFUX0NITl9DVFJMX0NISykpKQogCQkJcmV0dXJuIDE7IC8qIG1hdGNoIHdpdGggaWZjYyovCiAJfQogCS8qIGNoZWNrIHNlbnNlIGRhdGE7IGJ5dGUgMC0yLDI1LDI3ICovCi0JaWYgKCEoKG1lbWNtcCAoY3FyMS0+aXJiLmVjdywgY3FyMi0+aXJiLmVjdywgMykgPT0gMCkgJiYKLQkgICAgICAoY3FyMS0+aXJiLmVjd1syN10gPT0gY3FyMi0+aXJiLmVjd1syN10pICYmCi0JICAgICAgKGNxcjEtPmlyYi5lY3dbMjVdID09IGNxcjItPmlyYi5lY3dbMjVdKSkpIHsKKwlpZiAoIShzZW5zZTEgJiYgc2Vuc2UyICYmCisJICAgICAgKG1lbWNtcChzZW5zZTEsIHNlbnNlMiwgMykgPT0gMCkgJiYKKwkgICAgICAoc2Vuc2UxWzI3XSA9PSBzZW5zZTJbMjddKSAmJgorCSAgICAgIChzZW5zZTFbMjVdID09IHNlbnNlMlsyNV0pKSkgewogCiAJCXJldHVybiAwOwkvKiBzZW5zZSBkb2Vzbid0IG1hdGNoICovCiAJfQpAQCAtMjQzNCw3ICsyNDc4LDcgQEAKIHsKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKLQljaGFyICpzZW5zZSA9IGVycC0+aXJiLmVjdzsKKwljaGFyICpzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKCZlcnAtPmlyYik7CiAKIAkvKiBjaGVjayBmb3IgMjQgYnl0ZSBzZW5zZSBFUlAgKi8KIAlpZiAoKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9idXNfb3V0KSB8fApAQCAtMjQ0OSw3ICsyNDkzLDcgQEAKIAkJLyogcHJlcGFyZSBlcnAgZm9yIHJldHJ5IG9uIGRpZmZlcmVudCBjaGFubmVsIHBhdGggKi8KIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMShlcnApOwogCi0JCWlmICghKHNlbnNlWzJdICYgREFTRF9TRU5TRV9CSVRfMCkpIHsKKwkJaWYgKHNlbnNlICYmICEoc2Vuc2VbMl0gJiBEQVNEX1NFTlNFX0JJVF8wKSkgewogCiAJCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4KIAkJCSAqIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCAqLwpAQCAtMjQ3MSw3ICsyNTE1LDcgQEAKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJZGVmYXVsdDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCisJCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJCQkgICAgImludmFsaWQgc3ViY29tbWFuZCBtb2RpZmllciAweCV4ICIKIAkJCQkJICAgICJmb3IgRGlhZ25vc3RpYyBDb250cm9sIENvbW1hbmQiLAogCQkJCQkgICAgc2Vuc2VbMjVdKTsKQEAgLTI0NzksMTkgKzI1MjMsMjEgQEAKIAkJfQogCiAJCS8qIGNoZWNrIGZvciAzMiBieXRlIHNlbnNlIEVSUCAqLwotCX0gZWxzZSBpZiAoKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9yZXRyeSkgfHwKLQkJICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9wYXRoKSB8fAotCQkgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvZGUpIHx8Ci0JCSAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfY29uZmlnKSkgeworCX0gZWxzZSBpZiAoc2Vuc2UgJiYKKwkJICAgKChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcmV0cnkpIHx8CisJCSAgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX3BhdGgpIHx8CisJCSAgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvZGUpIHx8CisJCSAgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvbmZpZykpKSB7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9jb21wb3VuZChlcnAsIHNlbnNlKTsKIAogCX0gZWxzZSB7Ci0JCS8qIE5vIHJldHJ5IGxlZnQgYW5kIG5vIGFkZGl0aW9uYWwgc3BlY2lhbCBoYW5kbGluZyAqLwotCQkvKm5lY2Vzc2FyeSAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJICAgICJubyByZXRyaWVzIGxlZnQgZm9yIGVycCAlcCAtICIKLQkJCSAgICAic2V0IHN0YXR1cyB0byBGQUlMRUQiLCBlcnApOworCQkvKgorCQkgKiBObyByZXRyeSBsZWZ0IGFuZCBubyBhZGRpdGlvbmFsIHNwZWNpYWwgaGFuZGxpbmcKKwkJICogbmVjZXNzYXJ5CisJCSAqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJFUlAgJXAgaGFzIHJ1biBvdXQgb2YgcmV0cmllcyBhbmQgZmFpbGVkXG4iLCBlcnApOwogCiAJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCX0KQEAgLTI1NDgsMjQgKzI1OTQsMjUgQEAKIAogCWlmIChlcnAtPnJldHJpZXMgPiAwKSB7CiAKLQkJY2hhciAqc2Vuc2UgPSBlcnAtPnJlZmVycy0+aXJiLmVjdzsKKwkJY2hhciAqc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmZXJwLT5yZWZlcnMtPmlyYik7CiAKIAkJLyogY2hlY2sgZm9yIHNwZWNpYWwgcmV0cmllcyAqLwotCQlpZiAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KSB7CisJCWlmIChzZW5zZSAmJiBlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQpIHsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIHNlbnNlKTsKIAotCQl9IGVsc2UgaWYgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMUJfMzIpIHsKKwkJfSBlbHNlIGlmIChzZW5zZSAmJgorCQkJICAgZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xQl8zMikgewogCiAJCQllcnAgPSBkYXNkXzM5OTBfdXBkYXRlXzFCKGVycCwgc2Vuc2UpOwogCi0JCX0gZWxzZSBpZiAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2ludF9yZXEpIHsKKwkJfSBlbHNlIGlmIChzZW5zZSAmJiBlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfaW50X3JlcSkgewogCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2ludF9yZXEoZXJwKTsKIAogCQl9IGVsc2UgewogCQkJLyogc2ltcGxlIHJldHJ5CSAgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCiAJCQkJICAgICIlaSByZXRyaWVzIGxlZnQgZm9yIGVycCAlcCIsCiAJCQkJICAgIGVycC0+cmV0cmllcywgZXJwKTsKIApAQCAtMjYwOSwyNCArMjY1NiwyNCBAQAogCiAJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7CiAJCS8qIHByaW50IGN1cnJlbnQgZXJwX2NoYWluICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkVSUCBjaGFpbiBhdCBCRUdJTk5JTkcgb2YgRVJQLUFDVElPTiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiRVJQIGNoYWluIGF0IEJFR0lOTklORyBvZiBFUlAtQUNUSU9OXG4iKTsKIAkJZm9yICh0ZW1wX2VycCA9IGNxcjsKIAkJICAgICB0ZW1wX2VycCAhPSBOVUxMOyB0ZW1wX2VycCA9IHRlbXBfZXJwLT5yZWZlcnMpIHsKIAotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgIiAgIGVycCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwIiwKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRVJQICVwICglMDJ4KSByZWZlcnMgdG8gJXBcbiIsCiAJCQkJICAgIHRlbXBfZXJwLCB0ZW1wX2VycC0+c3RhdHVzLAogCQkJCSAgICB0ZW1wX2VycC0+cmVmZXJzKTsKIAkJfQogCX0KIAogCS8qIGRvdWJsZS1jaGVjayBpZiBjdXJyZW50IGVycC9jcXIgd2FzIHN1Y2Nlc3NmdWwgKi8KLQlpZiAoKGNxci0+aXJiLnNjc3cuY21kLmNzdGF0ID09IDB4MDApICYmCi0JICAgIChjcXItPmlyYi5zY3N3LmNtZC5kc3RhdCA9PQorCWlmICgoc2Nzd19jc3RhdCgmY3FyLT5pcmIuc2NzdykgPT0gMHgwMCkgJiYKKwkgICAgKHNjc3dfZHN0YXQoJmNxci0+aXJiLnNjc3cpID09CiAJICAgICAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpKSkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKIAkJCSAgICAiRVJQIGNhbGxlZCBmb3Igc3VjY2Vzc2Z1bCByZXF1ZXN0ICVwIgogCQkJICAgICIgLSBOTyBFUlAgbmVjZXNzYXJ5IiwgY3FyKTsKIApAQCAtMjY0OCwxMyArMjY5NSwxMyBAQAogCiAJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7CiAJCS8qIHByaW50IGN1cnJlbnQgZXJwX2NoYWluICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkVSUCBjaGFpbiBhdCBFTkQgb2YgRVJQLUFDVElPTiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiRVJQIGNoYWluIGF0IEVORCBvZiBFUlAtQUNUSU9OXG4iKTsKIAkJZm9yICh0ZW1wX2VycCA9IGVycDsKIAkJICAgICB0ZW1wX2VycCAhPSBOVUxMOyB0ZW1wX2VycCA9IHRlbXBfZXJwLT5yZWZlcnMpIHsKIAotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgIiAgIGVycCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwIiwKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRVJQICVwICglMDJ4KSByZWZlcnMgdG8gJXBcbiIsCiAJCQkJICAgIHRlbXBfZXJwLCB0ZW1wX2VycC0+c3RhdHVzLAogCQkJCSAgICB0ZW1wX2VycC0+cmVmZXJzKTsKIAkJfQpAQCAtMjY2Nyw2ICsyNzE0LDggQEAKIAkJbGlzdF9hZGRfdGFpbCgmZXJwLT5ibG9ja2xpc3QsICZjcXItPmJsb2NrbGlzdCk7CiAJfQogCisKKwogCXJldHVybiBlcnA7CiAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfYWN0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCAyMDY3NmNkLi41YjdiYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTUsNiArNSw4IEBACiAgKiBBdXRob3Iocyk6IFN0ZWZhbiBXZWluaHViZXIgPHdlaW5AZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlICJkYXNkX2ludC5oIgpAQCAtNTAzLDcgKzUwNSw3IEBACiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjdS0+bG9jaywgZmxhZ3MpOwogCWlmIChyYyB8fCAobGN1LT5mbGFncyAmIE5FRURfVUFDX1VQREFURSkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJjb3VsZCBub3QgdXBkYXRlIgorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICJjb3VsZCBub3QgdXBkYXRlIgogCQkJICAgICIgYWxpYXMgZGF0YSBpbiBsY3UgKHJjID0gJWQpLCByZXRyeSBsYXRlciIsIHJjKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsY3UtPnJ1YWNfZGF0YS5kd29yaywgMzAqSFopOwogCX0gZWxzZSB7CkBAIC02NDYsMTQgKzY0OCwxNiBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmMgPSAwOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAljcXIgPSBsY3UtPnJzdV9jcXI7CiAJc3RybmNweSgoY2hhciAqKSAmY3FyLT5tYWdpYywgIkVDS0QiLCA0KTsKIAlBU0NFQkMoKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpOwotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUlNDSzsKLQljcXItPmNwYWRkci0+ZmxhZ3MgPSAwIDsKLQljcXItPmNwYWRkci0+Y291bnQgPSAxNjsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SU0NLOworCWNjdy0+ZmxhZ3MgPSAwIDsKKwljY3ctPmNvdW50ID0gMTY7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCSgoY2hhciAqKWNxci0+ZGF0YSlbMF0gPSByZWFzb247CiAKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwpAQCAtODU1LDE2ICs4NTksMjUgQEAKIAlzdHJ1Y3QgYWxpYXNfbGN1ICpsY3U7CiAJY2hhciByZWFzb247CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCWNoYXIgKnNlbnNlOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCi0JcmVhc29uID0gaXJiLT5lY3dbOF07Ci0JREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyAleCIsCi0JCSAgICAiZWNrZCBoYW5kbGUgc3VtbWFyeSB1bml0IGNoZWNrOiByZWFzb24iLCByZWFzb24pOworCXNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoaXJiKTsKKwlpZiAoc2Vuc2UpIHsKKwkJcmVhc29uID0gc2Vuc2VbOF07CisJCURCRl9ERVZfRVZFTlQoREJGX05PVElDRSwgZGV2aWNlLCAiJXMgJXgiLAorCQkJICAgICJlY2tkIGhhbmRsZSBzdW1tYXJ5IHVuaXQgY2hlY2s6IHJlYXNvbiIsIHJlYXNvbik7CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICJlY2tkIGhhbmRsZSBzdW1tYXJ5IHVuaXQgY2hlY2s6IgorCQkJICAgICIgbm8gcmVhc29uIGNvZGUgYXZhaWxhYmxlIik7CisJCXJldHVybjsKKwl9CiAKIAlsY3UgPSBwcml2YXRlLT5sY3U7CiAJaWYgKCFsY3UpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiZGV2aWNlIG5vdCByZWFkeSB0byBoYW5kbGUgc3VtbWFyeSIKIAkJCSAgICAiIHVuaXQgY2hlY2sgKG5vIGxjdSBzdHJ1Y3R1cmUpIik7CiAJCXJldHVybjsKQEAgLTg3Nyw3ICs4OTAsNyBAQAogCSAqIHRoZSBuZXh0IGludGVycnVwdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UKIAkgKi8KIAlpZiAobGlzdF9lbXB0eSgmZGV2aWNlLT5hbGlhc19saXN0KSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJkZXZpY2UgaXMgaW4gb2ZmbGluZSBwcm9jZXNzaW5nLCIKIAkJCSAgICAiIGRvbid0IGRvIHN1bW1hcnkgdW5pdCBjaGVjayBoYW5kbGluZyIpOwogCQlzcGluX3VubG9jaygmbGN1LT5sb2NrKTsKQEAgLTg4NSw3ICs4OTgsNyBAQAogCX0KIAlpZiAobGN1LT5zdWNfZGF0YS5kZXZpY2UpIHsKIAkJLyogYWxyZWFkeSBzY2hlZHVsZWQgb3IgcnVubmluZyAqLwotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJwcmV2aW91cyBpbnN0YW5jZSBvZiBzdW1tYXJ5IHVuaXQgY2hlY2sgd29ya2VyIgogCQkJICAgICIgc3RpbGwgcGVuZGluZyIpOwogCQlzcGluX3VubG9jaygmbGN1LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKaW5kZXggMzQzMzk5MC4uZTc3NjY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKQEAgLTEzLDYgKzEzLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjcsNiArNjksOCBAQAogaW50IGRhc2RfYXV0b2RldGVjdCA9IDA7CS8qIGlzIHRydWUsIHdoZW4gYXV0b2RldGVjdGlvbiBpcyBhY3RpdmUgKi8KIGludCBkYXNkX25vcGF2ID0gMDsJCS8qIGlzIHRydWUsIHdoZW4gUEFWIGlzIGRpc2FibGVkICovCiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX25vcGF2KTsKK2ludCBkYXNkX25vZmN4OwkJCS8qIGRpc2FibGUgSGlnaCBQZXJmb3JtYW5jZSBGaWNvbiAqLworRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9ub2ZjeCk7CiAKIC8qCiAgKiBjaGFyICpkYXNkW10gaXMgaW50ZW5kZWQgdG8gaG9sZCB0aGUgcmFuZ2VzIHN1cHBsaWVkIGJ5IHRoZSBkYXNkPSBzdGF0ZW1lbnQKQEAgLTEyNSw2ICsxMjksNyBAQAogICogUmVhZCBhIGRldmljZSBidXNpZC9kZXZubyBmcm9tIGEgc3RyaW5nLgogICovCiBzdGF0aWMgaW50CisKIGRhc2RfYnVzaWQoY2hhciAqKnN0ciwgaW50ICppZDAsIGludCAqaWQxLCBpbnQgKmRldm5vKQogewogCWludCB2YWwsIG9sZF9zdHlsZTsKQEAgLTEzMiw4ICsxMzcsNyBAQAogCS8qIEludGVycHJldCBpcGxkZXYgYnVzaWQgKi8KIAlpZiAoc3RybmNtcChEQVNEX0lQTERFViwgKnN0ciwgc3RybGVuKERBU0RfSVBMREVWKSkgPT0gMCkgewogCQlpZiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9DQ1cpIHsKLQkJCU1FU1NBR0UoS0VSTl9FUlIsICIlcyIsICJpcGwgZGV2aWNlIGlzIG5vdCBhIGNjdyAiCi0JCQkJImRldmljZSIpOworCQkJcHJfZXJyKCJUaGUgSVBMIGRldmljZSBpcyBub3QgYSBDQ1cgZGV2aWNlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCSppZDAgPSAwOwpAQCAtMjA5LDkgKzIxMyw4IEBACiAJCWVsc2UgaWYgKGxlbiA9PSA4ICYmICFzdHJuY21wKHN0ciwgImZhaWxmYXN0IiwgOCkpCiAJCQlmZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfRkFJTEZBU1Q7CiAJCWVsc2UgewotCQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCQkJInVuc3VwcG9ydGVkIGZlYXR1cmU6ICUqcywgIgotCQkJCSJpZ25vcmluZyBzZXR0aW5nIiwgbGVuLCBzdHIpOworCQkJcHJfd2FybmluZygiJSpzIGlzIG5vdCBhIHN1cHBvcnRlZCBkZXZpY2Ugb3B0aW9uXG4iLAorCQkJCSAgIGxlbiwgc3RyKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJfQogCQlzdHIgKz0gbGVuOwpAQCAtMjIwLDggKzIyMyw4IEBACiAJCXN0cisrOwogCX0KIAlpZiAoKnN0ciAhPSAnKScpIHsKLQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCQkibWlzc2luZyAnKScgaW4gZGFzZCBwYXJhbWV0ZXIgc3RyaW5nXG4iKTsKKwkJcHJfd2FybmluZygiQSBjbG9zaW5nIHBhcmVudGhlc2lzICcpJyBpcyBtaXNzaW5nIGluIHRoZSAiCisJCQkgICAiZGFzZD0gcGFyYW1ldGVyXG4iKTsKIAkJcmMgPSAtRUlOVkFMOwogCX0gZWxzZQogCQlzdHIrKzsKQEAgLTI1MywyNSArMjU2LDI5IEBACiAgICAgICAgIH0KIAlpZiAoc3RybmNtcCgiYXV0b2RldGVjdCIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKIAkJZGFzZF9hdXRvZGV0ZWN0ID0gMTsKLQkJTUVTU0FHRSAoS0VSTl9JTkZPLCAiJXMiLAotCQkJICJ0dXJuaW5nIHRvIGF1dG9kZXRlY3Rpb24gbW9kZSIpOworCQlwcl9pbmZvKCJUaGUgYXV0b2RldGVjdGlvbiBtb2RlIGhhcyBiZWVuIGFjdGl2YXRlZFxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc2lkdWFsX3N0cjsKICAgICAgICAgfQogCWlmIChzdHJuY21wKCJwcm9iZW9ubHkiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWRhc2RfcHJvYmVvbmx5ID0gMTsKLQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsCi0JCQkidHVybmluZyB0byBwcm9iZW9ubHkgbW9kZSIpOworCQlwcl9pbmZvKCJUaGUgcHJvYmVvbmx5IG1vZGUgaGFzIGJlZW4gYWN0aXZhdGVkXG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzaWR1YWxfc3RyOwogICAgICAgICB9CiAJaWYgKHN0cm5jbXAoIm5vcGF2IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgewogCQlpZiAoTUFDSElORV9JU19WTSkKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiJ25vcGF2JyBub3Qgc3VwcG9ydGVkIG9uIFZNIik7CisJCQlwcl9pbmZvKCInbm9wYXYnIGlzIG5vdCBzdXBwb3J0ZWQgb24gei9WTVxuIik7CiAJCWVsc2UgewogCQkJZGFzZF9ub3BhdiA9IDE7Ci0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgImRpc2FibGUgUEFWIG1vZGUiKTsKKwkJCXByX2luZm8oIlBBViBzdXBwb3J0IGhhcyBiZSBkZWFjdGl2YXRlZFxuIik7CiAJCX0KIAkJcmV0dXJuIHJlc2lkdWFsX3N0cjsKIAl9CisJaWYgKHN0cm5jbXAoIm5vZmN4IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgeworCQlkYXNkX25vZmN4ID0gMTsKKwkJcHJfaW5mbygiSGlnaCBQZXJmb3JtYW5jZSBGSUNPTiBzdXBwb3J0IGhhcyBiZWVuICIKKwkJCSJkZWFjdGl2YXRlZFxuIik7CisJCXJldHVybiByZXNpZHVhbF9zdHI7CisJfQogCWlmIChzdHJuY21wKCJmaXhlZGJ1ZmZlcnMiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWlmIChkYXNkX3BhZ2VfY2FjaGUpCiAJCQlyZXR1cm4gcmVzaWR1YWxfc3RyOwpAQCAtMjgwLDEwICsyODcsMTAgQEAKIAkJCQkJICBQQUdFX1NJWkUsIFNMQUJfQ0FDSEVfRE1BLAogCQkJCQkgIE5VTEwpOwogCQlpZiAoIWRhc2RfcGFnZV9jYWNoZSkKLQkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLCAiRmFpbGVkIHRvIGNyZWF0ZSBzbGFiLCAiCisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICIlcyIsICJGYWlsZWQgdG8gY3JlYXRlIHNsYWIsICIKIAkJCQkiZml4ZWQgYnVmZmVyIG1vZGUgZGlzYWJsZWQuIik7CiAJCWVsc2UKLQkJCU1FU1NBR0UgKEtFUk5fSU5GTywgIiVzIiwKKwkJCURCRl9FVkVOVChEQkZfSU5GTywgIiVzIiwKIAkJCQkgInR1cm5pbmcgb24gZml4ZWQgYnVmZmVyIG1vZGUiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzaWR1YWxfc3RyOwogICAgICAgICB9CkBAIC0zMjEsNyArMzI4LDcgQEAKIAkgICAgKGZyb21faWQwICE9IHRvX2lkMCB8fCBmcm9tX2lkMSAhPSB0b19pZDEgfHwgZnJvbSA+IHRvKSkKIAkJcmMgPSAtRUlOVkFMOwogCWlmIChyYykgewotCQlNRVNTQUdFKEtFUk5fRVJSLCAiSW52YWxpZCBkZXZpY2UgcmFuZ2UgJXMiLCBwYXJzZXN0cmluZyk7CisJCXByX2VycigiJXMgaXMgbm90IGEgdmFsaWQgZGV2aWNlIHJhbmdlXG4iLCBwYXJzZXN0cmluZyk7CiAJCXJldHVybiBFUlJfUFRSKHJjKTsKIAl9CiAJZmVhdHVyZXMgPSBkYXNkX2ZlYXR1cmVfbGlzdChzdHIsICZzdHIpOwpAQCAtMzQwLDggKzM0Nyw4IEBACiAJCXJldHVybiBzdHIgKyAxOwogCWlmICgqc3RyID09ICdcMCcpCiAJCXJldHVybiBzdHI7Ci0JTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCSJqdW5rIGF0IGVuZCBvZiBkYXNkIHBhcmFtZXRlciBzdHJpbmc6ICVzXG4iLCBzdHIpOworCXByX3dhcm5pbmcoIlRoZSBkYXNkPSBwYXJhbWV0ZXIgdmFsdWUgJXMgaGFzIGFuIGludmFsaWQgZW5kaW5nXG4iLAorCQkgICBzdHIpOwogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggZWYyYTU2OS4uYjlhN2Y3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtOCw2ICs4LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTE0NCw4ICsxNDYsOCBAQAogCW1kc2tfdGVybV9pbyhkZXZpY2UpOwogCXJjID0gbWRza19pbml0X2lvKGRldmljZSwgZGV2aWNlLT5ibG9jay0+YnBfYmxvY2ssIDAsIE5VTEwpOwogCWlmIChyYykKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJESUFHIEVSUCB1bnN1Y2Nlc3NmdWwsICIKLQkJCSAgICAicmM9JWQiLCByYyk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRJQUcgRVJQIGZhaWxlZCB3aXRoICIKKwkJCSAgICAicmM9JWRcbiIsIHJjKTsKIH0KIAogLyogU3RhcnQgYSBnaXZlbiByZXF1ZXN0IGF0IHRoZSBkZXZpY2UuIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvCkBAIC0xNjAsNyArMTYyLDcgQEAKIAogCWRldmljZSA9IGNxci0+c3RhcnRkZXY7CiAJaWYgKGNxci0+cmV0cmllcyA8IDApIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJESUFHIHN0YXJ0X0lPOiByZXF1ZXN0ICVwICIKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICJESUFHIHN0YXJ0X0lPOiByZXF1ZXN0ICVwICIKIAkJCSAgICAiLSBubyByZXRyeSBsZWZ0KSIsIGNxcik7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRVJST1I7CiAJCXJldHVybiAtRUlPOwpAQCAtMTk1LDcgKzE5Nyw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6IC8qIEVycm9yIGNvbmRpdGlvbiAqLwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJkaWEyNTAgcmV0dXJuZWQgcmM9JWQiLCByYyk7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgImRpYTI1MCByZXR1cm5lZCByYz0lZCIsIHJjKTsKIAkJZGFzZF9kaWFnX2VycChkZXZpY2UpOwogCQlyYyA9IC1FSU87CiAJCWJyZWFrOwpAQCAtMjQzLDEzICsyNDUsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAoIWlwKSB7CQkvKiBubyBpbnRwYXJtOiB1bnNvbGljaXRlZCBpbnRlcnJ1cHQgKi8KLQkJTUVTU0FHRShLRVJOX0RFQlVHLCAiJXMiLCAiY2F1Z2h0IHVuc29saWNpdGVkIGludGVycnVwdCIpOworCQlEQkZfRVZFTlQoREJGX05PVElDRSwgIiVzIiwgImNhdWdodCB1bnNvbGljaXRlZCAiCisJCQkgICAgICAiaW50ZXJydXB0Iik7CiAJCXJldHVybjsKIAl9CiAJY3FyID0gKHN0cnVjdCBkYXNkX2Njd19yZXEgKikgaXA7CiAJZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwogCWlmIChzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCiAJCQkgICAgIiBtYWdpYyBudW1iZXIgb2YgZGFzZF9jY3dfcmVxIDB4JTA4WCBkb2Vzbid0IgogCQkJICAgICIgbWF0Y2ggZGlzY2lwbGluZSAweCUwOFgiLAogCQkJICAgIGNxci0+bWFnaWMsICooaW50ICopICgmZGV2aWNlLT5kaXNjaXBsaW5lLT5uYW1lKSk7CkBAIC0yODEsMTUgKzI4NCwxMSBAQAogCQkJCXJjID0gZGFzZF9zdGFydF9kaWFnKG5leHQpOwogCQkJCWlmIChyYyA9PSAwKQogCQkJCQlleHBpcmVzID0gbmV4dC0+ZXhwaXJlczsKLQkJCQllbHNlIGlmIChyYyAhPSAtRUFDQ0VTKQotCQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJCSAgICAiSW50ZXJydXB0IGZhc3RwYXRoICIKLQkJCQkJCSAgICAiZmFpbGVkISIpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiaW50ZXJydXB0IHN0YXR1cyBmb3IgIgorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW50ZXJydXB0IHN0YXR1cyBmb3IgIgogCQkJICAgICJyZXF1ZXN0ICVwIHdhcyAlZCAoJWQgcmV0cmllcyBsZWZ0KSIsIGNxciwgc3RhdHVzLAogCQkJICAgIGNxci0+cmV0cmllcyk7CiAJCWRhc2RfZGlhZ19lcnAoZGV2aWNlKTsKQEAgLTMyMiw4ICszMjEsOSBAQAogCWlmIChwcml2YXRlID09IE5VTEwpIHsKIAkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2RpYWdfcHJpdmF0ZSksR0ZQX0tFUk5FTCk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHByaXZhdGUgZGF0YSIpOworCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCSJBbGxvY2F0aW5nIG1lbW9yeSBmb3IgcHJpdmF0ZSBEQVNEIGRhdGEgIgorCQkJCSAgICAgICJmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJY2N3X2RldmljZV9nZXRfaWQoZGV2aWNlLT5jZGV2LCAmcHJpdmF0ZS0+ZGV2X2lkKTsKQEAgLTMzMSw3ICszMzEsNyBAQAogCX0KIAlibG9jayA9IGRhc2RfYWxsb2NfYmxvY2soKTsKIAlpZiAoSVNfRVJSKGJsb2NrKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCBibG9jayBzdHJ1Y3R1cmUiKTsKIAkJZGV2aWNlLT5wcml2YXRlID0gTlVMTDsKIAkJa2ZyZWUocHJpdmF0ZSk7CkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogCXJjID0gZGlhZzIxMCgoc3RydWN0IGRpYWcyMTAgKikgcmRjX2RhdGEpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImZhaWxlZCB0byByZXRyaWV2ZSBkZXZpY2UgIgorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICJmYWlsZWQgdG8gcmV0cmlldmUgZGV2aWNlICIKIAkJCSAgICAiaW5mb3JtYXRpb24gKHJjPSVkKSIsIHJjKTsKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CkBAIC0zNjIsOCArMzYyLDggQEAKIAkJcHJpdmF0ZS0+cHRfYmxvY2sgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgInVuc3VwcG9ydGVkIGRldmljZSBjbGFzcyAiCi0JCQkgICAgIihjbGFzcz0lZCkiLCBwcml2YXRlLT5yZGNfZGF0YS52ZGV2X2NsYXNzKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV2aWNlIHR5cGUgJWQgaXMgbm90IHN1cHBvcnRlZCAiCisJCQkgICAgImluIERJQUcgbW9kZVxuIiwgcHJpdmF0ZS0+cmRjX2RhdGEudmRldl9jbGFzcyk7CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM4MCw3ICszODAsNyBAQAogCS8qIGZpZ3VyZSBvdXQgYmxvY2tzaXplIG9mIGRldmljZSAqLwogCWxhYmVsID0gKHN0cnVjdCB2dG9jX2Ntc19sYWJlbCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKGxhYmVsID09IE5VTEwpICB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIk5vIG1lbW9yeSB0byBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC00MDQsOCArNDA0LDggQEAKIAkJcHJpdmF0ZS0+aW9iLmZsYWdhID0gREFTRF9ESUFHX0ZMQUdBX0RFRkFVTFQ7CiAJCXJjID0gZGlhMjUwKCZwcml2YXRlLT5pb2IsIFJXX0JJTyk7CiAJCWlmIChyYyA9PSAzKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkiRElBRyBjYWxsIGZhaWxlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJBIDY0LWJpdCBESUFHIGNhbGwgZmFpbGVkXG4iKTsKIAkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIG91dF9sYWJlbDsKIAkJfQpAQCAtNDE0LDggKzQxNCw4IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGJzaXplID4gUEFHRV9TSVpFKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiZGV2aWNlIGFjY2VzcyBmYWlsZWQgIgotCQkJICAgICIocmM9JWQpIiwgcmMpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UiCisJCQkgIiBvZiBhbiBpbmNvcnJlY3QgZm9ybWF0IChyYz0lZClcbiIsIHJjKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dF9sYWJlbDsKIAl9CkBAIC00MzMsMTUgKzQzMywxNSBAQAogCQlibG9jay0+czJiX3NoaWZ0Kys7CiAJcmMgPSBtZHNrX2luaXRfaW8oZGV2aWNlLCBibG9jay0+YnBfYmxvY2ssIDAsIE5VTEwpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIkRJQUcgaW5pdGlhbGl6YXRpb24gIgotCQkJImZhaWxlZCAocmM9JWQpIiwgcmMpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJESUFHIGluaXRpYWxpemF0aW9uICIKKwkJCSJmYWlsZWQgd2l0aCByYz0lZFxuIiwgcmMpOwogCQlyYyA9IC1FSU87CiAJfSBlbHNlIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCQkgICAgIiglbGQgQi9ibGspOiAlbGRrQiIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLT5icF9ibG9jaywKLQkJCSAgICAodW5zaWduZWQgbG9uZykgKGJsb2NrLT5ibG9ja3MgPDwKLQkJCQlibG9jay0+czJiX3NoaWZ0KSA+PiAxKTsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJOZXcgREFTRCB3aXRoICVsZCBieXRlL2Jsb2NrLCB0b3RhbCBzaXplICVsZCBLQlxuIiwKKwkJCSAodW5zaWduZWQgbG9uZykgYmxvY2stPmJwX2Jsb2NrLAorCQkJICh1bnNpZ25lZCBsb25nKSAoYmxvY2stPmJsb2NrcyA8PAorCQkJCQkgIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEpOwogCX0KIG91dF9sYWJlbDoKIAlmcmVlX3BhZ2UoKGxvbmcpIGxhYmVsKTsKQEAgLTU5NSw3ICs1OTUsNyBAQAogZGFzZF9kaWFnX2R1bXBfc2Vuc2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKiByZXEsCiAJCSAgICAgc3RydWN0IGlyYiAqc3RhdCkKIHsKLQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJICAgICJkdW1wIHNlbnNlIG5vdCBhdmFpbGFibGUgZm9yIERJQUcgZGF0YSIpOwogfQogCkBAIC02MjEsMTAgKzYyMSw4IEBACiBkYXNkX2RpYWdfaW5pdCh2b2lkKQogewogCWlmICghTUFDSElORV9JU19WTSkgewotCQlNRVNTQUdFX0xPRyhLRVJOX0lORk8sCi0JCQkgICAgIk1hY2hpbmUgaXMgbm90IFZNOiAlcyAiCi0JCQkgICAgImRpc2NpcGxpbmUgbm90IGluaXRpYWxpemluZyIsCi0JCQkgICAgZGFzZF9kaWFnX2Rpc2NpcGxpbmUubmFtZSk7CisJCXByX2luZm8oIkRpc2NpcGxpbmUgJXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCB6L1ZNXG4iLAorCQkJZGFzZF9kaWFnX2Rpc2NpcGxpbmUubmFtZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlBU0NFQkMoZGFzZF9kaWFnX2Rpc2NpcGxpbmUuZWJjbmFtZSwgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYmRiODc5OS4uMjEyNTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMTEsNiArMTEsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjcsOSArMjksMTIgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jaW8uaD4KICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2l0Y3cuaD4KIAogI2luY2x1ZGUgImRhc2RfaW50LmgiCiAjaW5jbHVkZSAiZGFzZF9lY2tkLmgiCisjaW5jbHVkZSAiLi4vY2lvL2Noc2MuaCIKKwogCiAjaWZkZWYgUFJJTlRLX0hFQURFUgogI3VuZGVmIFBSSU5US19IRUFERVIKQEAgLTg0LDcgKzg5LDcgQEAKIAkvKiBzZXQgRUNLRCBzcGVjaWZpYyBjY3ctZGV2aWNlIG9wdGlvbnMgKi8KIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vcHRpb25zKGNkZXYsIENDV0RFVl9BTExPV19GT1JDRSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2Vja2RfcHJvYmU6IGNvdWxkIG5vdCBzZXQgY2N3LWRldmljZSBvcHRpb25zICIKIAkJICAgICAgICJmb3IgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKQEAgLTE1OSw2ICsxNjQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2NoX3Qoc3RydWN0IGNoX3QgKmdlbywgX191MzIgY3lsLCBfX3U4IGhlYWQpCit7CisJZ2VvLT5jeWwgPSAoX191MTYpIGN5bDsKKwlnZW8tPmhlYWQgPSBjeWwgPj4gMTY7CisJZ2VvLT5oZWFkIDw8PSA0OworCWdlby0+aGVhZCB8PSBoZWFkOworfQorCiBzdGF0aWMgaW50CiBjaGVja19YUkMgKHN0cnVjdCBjY3cxICAgICAgICAgKmRlX2NjdywKICAgICAgICAgICAgc3RydWN0IERFX2Vja2RfZGF0YSAqZGF0YSwKQEAgLTE4NiwxMSArMTk5LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRlZmluZV9leHRlbnQoc3RydWN0IGNjdzEgKiBjY3csIHN0cnVjdCBERV9lY2tkX2RhdGEgKiBkYXRhLCBpbnQgdHJrLAotCSAgICAgIGludCB0b3RyaywgaW50IGNtZCwgc3RydWN0IGRhc2RfZGV2aWNlICogZGV2aWNlKQorZGVmaW5lX2V4dGVudChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgREVfZWNrZF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHJrLAorCSAgICAgIHVuc2lnbmVkIGludCB0b3RyaywgaW50IGNtZCwgc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwotCXN0cnVjdCBjaF90IGdlbywgYmVnLCBlbmQ7CisJdTMyIGJlZ2N5bCwgZW5kY3lsOworCXUxNiBoZWFkcywgYmVnaGVhZCwgZW5kaGVhZDsKIAlpbnQgcmMgPSAwOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwpAQCAtMjM2LDcgKzI1MCw4IEBACiAJCXJjID0gY2hlY2tfWFJDIChjY3csIGRhdGEsIGRldmljZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICJ1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiMHgleCBpcyBub3QgYSBrbm93biBjb21tYW5kXG4iLCBjbWQpOwogCQlicmVhazsKIAl9CiAKQEAgLTI0OCwyNyArMjYzLDI0IEBACiAJICAgICYmICEocHJpdmF0ZS0+dXNlc19jZGwgJiYgdHJrIDwgMikpCiAJCWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDA7IC8qIFJlZ3VsYXIgRGF0YSBGb3JtYXQgTW9kZSAqLwogCi0JZ2VvLmN5bCA9IHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bDsKLQlnZW8uaGVhZCA9IHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOwotCWJlZy5jeWwgPSB0cmsgLyBnZW8uaGVhZDsKLQliZWcuaGVhZCA9IHRyayAlIGdlby5oZWFkOwotCWVuZC5jeWwgPSB0b3RyayAvIGdlby5oZWFkOwotCWVuZC5oZWFkID0gdG90cmsgJSBnZW8uaGVhZDsKKwloZWFkcyA9IHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOworCWJlZ2N5bCA9IHRyayAvIGhlYWRzOworCWJlZ2hlYWQgPSB0cmsgJSBoZWFkczsKKwllbmRjeWwgPSB0b3RyayAvIGhlYWRzOworCWVuZGhlYWQgPSB0b3RyayAlIGhlYWRzOwogCiAJLyogY2hlY2sgZm9yIHNlcXVlbnRpYWwgcHJlc3RhZ2UgLSBlbmhhbmNlIGN5bGluZGVyIHJhbmdlICovCiAJaWYgKGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8CiAJICAgIGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgewogCi0JCWlmIChlbmQuY3lsICsgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCA8IGdlby5jeWwpCi0JCQllbmQuY3lsICs9IHByaXZhdGUtPmF0dHJpYi5ucl9jeWw7CisJCWlmIChlbmRjeWwgKyBwcml2YXRlLT5hdHRyaWIubnJfY3lsIDwgcHJpdmF0ZS0+cmVhbF9jeWwpCisJCQllbmRjeWwgKz0gcHJpdmF0ZS0+YXR0cmliLm5yX2N5bDsKIAkJZWxzZQotCQkJZW5kLmN5bCA9IChnZW8uY3lsIC0gMSk7CisJCQllbmRjeWwgPSAocHJpdmF0ZS0+cmVhbF9jeWwgLSAxKTsKIAl9CiAKLQlkYXRhLT5iZWdfZXh0LmN5bCA9IGJlZy5jeWw7Ci0JZGF0YS0+YmVnX2V4dC5oZWFkID0gYmVnLmhlYWQ7Ci0JZGF0YS0+ZW5kX2V4dC5jeWwgPSBlbmQuY3lsOwotCWRhdGEtPmVuZF9leHQuaGVhZCA9IGVuZC5oZWFkOworCXNldF9jaF90KCZkYXRhLT5iZWdfZXh0LCBiZWdjeWwsIGJlZ2hlYWQpOworCXNldF9jaF90KCZkYXRhLT5lbmRfZXh0LCBlbmRjeWwsIGVuZGhlYWQpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjgzLDI5ICsyOTUsMTQ1IEBACiAJCXJldHVybiAwOwogCiAJLyogc3dpdGNoIG9uIFN5c3RlbSBUaW1lIFN0YW1wIC0gbmVlZGVkIGZvciBYUkMgU3VwcG9ydCAqLwotCXBmeGRhdGEtPmRlZmluZV9leHRlbmQuZ2FfZXh0ZW5kZWQgfD0gMHgwODsgLyogJ1RpbWUgU3RhbXAgVmFsaWQnICAgKi8KLQlwZnhkYXRhLT5kZWZpbmVfZXh0ZW5kLmdhX2V4dGVuZGVkIHw9IDB4MDI7IC8qICdFeHRlbmRlZCBQYXJhbWV0ZXInICovCisJcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVudC5nYV9leHRlbmRlZCB8PSAweDA4OyAvKiAnVGltZSBTdGFtcCBWYWxpZCcgICAqLworCXBmeGRhdGEtPmRlZmluZV9leHRlbnQuZ2FfZXh0ZW5kZWQgfD0gMHgwMjsgLyogJ0V4dGVuZGVkIFBhcmFtZXRlcicgKi8KIAlwZnhkYXRhLT52YWxpZGl0eS50aW1lX3N0YW1wID0gMTsJICAgIC8qICdUaW1lIFN0YW1wIFZhbGlkJyAgICovCiAKLQlyYyA9IGdldF9zeW5jX2Nsb2NrKCZwZnhkYXRhLT5kZWZpbmVfZXh0ZW5kLmVwX3N5c190aW1lKTsKKwlyYyA9IGdldF9zeW5jX2Nsb2NrKCZwZnhkYXRhLT5kZWZpbmVfZXh0ZW50LmVwX3N5c190aW1lKTsKIAkvKiBJZ25vcmUgcmV0dXJuIGNvZGUgaWYgc3luYyBjbG9jayBpcyBzd2l0Y2hlZCBvZmYuICovCiAJaWYgKHJjID09IC1FTk9TWVMgfHwgcmMgPT0gLUVBQ0NFUykKIAkJcmMgPSAwOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBwcmVmaXgoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IFBGWF9lY2tkX2RhdGEgKnBmeGRhdGEsIGludCB0cmssCi0JCSAgaW50IHRvdHJrLCBpbnQgY21kLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsCi0JCSAgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldikKK3N0YXRpYyB2b2lkIGZpbGxfTFJFX2RhdGEoc3RydWN0IExSRV9lY2tkX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCB0cmssCisJCQkgIHVuc2lnbmVkIGludCByZWNfb25fdHJrLCBpbnQgY291bnQsIGludCBjbWQsCisJCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVjbGVuLAorCQkJICB1bnNpZ25lZCBpbnQgdGxmKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlpbnQgc2VjdG9yOworCWludCBkbiwgZDsKKworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKKworCW1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKKwlzZWN0b3IgPSAwOworCWlmIChyZWNfb25fdHJrKSB7CisJCXN3aXRjaCAocHJpdmF0ZS0+cmRjX2RhdGEuZGV2X3R5cGUpIHsKKwkJY2FzZSAweDMzOTA6CisJCQlkbiA9IGNlaWxfcXVvdChyZWNsZW4gKyA2LCAyMzIpOworCQkJZCA9IDkgKyBjZWlsX3F1b3QocmVjbGVuICsgNiAqIChkbiArIDEpLCAzNCk7CisJCQlzZWN0b3IgPSAoNDkgKyAocmVjX29uX3RyayAtIDEpICogKDEwICsgZCkpIC8gODsKKwkJCWJyZWFrOworCQljYXNlIDB4MzM4MDoKKwkJCWQgPSA3ICsgY2VpbF9xdW90KHJlY2xlbiArIDEyLCAzMik7CisJCQlzZWN0b3IgPSAoMzkgKyAocmVjX29uX3RyayAtIDEpICogKDggKyBkKSkgLyA3OworCQkJYnJlYWs7CisJCX0KKwl9CisJZGF0YS0+c2VjdG9yID0gc2VjdG9yOworCS8qIG5vdGU6IG1lYW5pbmcgb2YgY291bnQgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW9uCisJICoJIGZvciByZWNvcmQgYmFzZWQgSS9PIGl0J3MgdGhlIG51bWJlciBvZiByZWNvcmRzLCBidXQgZm9yCisJICoJIHRyYWNrIGJhc2VkIEkvTyBpdCdzIHRoZSBudW1iZXIgb2YgdHJhY2tzCisJICovCisJZGF0YS0+Y291bnQgPSBjb3VudDsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9IT01FX0FERFJFU1M6CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MzsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0hPTUVfQUREUkVTUzoKKwkJZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgzOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgxNjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1JFQ09SRF9aRVJPOgorCQlkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDE7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAzOworCQlkYXRhLT5jb3VudCsrOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9SRUNPUkRfWkVSTzoKKwkJZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgzOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgxNjsKKwkJZGF0YS0+Y291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFOgorCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9NVDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfS0Q6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAxOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9DS0RfTVQ6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CS8qIG5vdCB0bGYsIGFzIG9uZSBtaWdodCB0aGluayAqLworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgzRjsKKwkJZGF0YS0+ZXh0ZW5kZWRfb3BlcmF0aW9uID0gMHgyMzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQUQ6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfTVQ6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0Q6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0RfTVQ6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0NLRDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DS0RfTVQ6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MTY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0NPVU5UOgorCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwNjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQToKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gdGxmOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwQzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX0VSQVNFOgorCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDBiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwKKwkJCSAgICAiZmlsbCBMUkUgdW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCUJVRygpOworCX0KKwlzZXRfY2hfdCgmZGF0YS0+c2Vla19hZGRyLAorCQkgdHJrIC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCisJCSB0cmsgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCk7CisJZGF0YS0+c2VhcmNoX2FyZy5jeWwgPSBkYXRhLT5zZWVrX2FkZHIuY3lsOworCWRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9IGRhdGEtPnNlZWtfYWRkci5oZWFkOworCWRhdGEtPnNlYXJjaF9hcmcucmVjb3JkID0gcmVjX29uX3RyazsKK30KKworc3RhdGljIGludCBwcmVmaXhfTFJFKHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBQRlhfZWNrZF9kYXRhICpwZnhkYXRhLAorCQkgICAgICB1bnNpZ25lZCBpbnQgdHJrLCB1bnNpZ25lZCBpbnQgdG90cmssIGludCBjbWQsCisJCSAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldiwgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJICAgICAgdW5zaWduZWQgY2hhciBmb3JtYXQsIHVuc2lnbmVkIGludCByZWNfb25fdHJrLCBpbnQgY291bnQsCisJCSAgICAgIHVuc2lnbmVkIGludCBibGtzaXplLCB1bnNpZ25lZCBpbnQgdGxmKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqYmFzZXByaXYsICpzdGFydHByaXY7Ci0Jc3RydWN0IERFX2Vja2RfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgY2hfdCBnZW8sIGJlZywgZW5kOworCXN0cnVjdCBERV9lY2tkX2RhdGEgKmRlZGF0YTsKKwlzdHJ1Y3QgTFJFX2Vja2RfZGF0YSAqbHJlZGF0YTsKKwl1MzIgYmVnY3lsLCBlbmRjeWw7CisJdTE2IGhlYWRzLCBiZWdoZWFkLCBlbmRoZWFkOwogCWludCByYyA9IDA7CiAKIAliYXNlcHJpdiA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKIAlzdGFydHByaXYgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIHN0YXJ0ZGV2LT5wcml2YXRlOwotCWRhdGEgPSAmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVuZDsKKwlkZWRhdGEgPSAmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVudDsKKwlscmVkYXRhID0gJnBmeGRhdGEtPmxvY2F0ZV9yZWNvcmQ7CiAKIAljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19QRlg7CiAJY2N3LT5mbGFncyA9IDA7CkBAIC0zMTQsMTAgKzQ0MiwxNiBAQAogCiAJbWVtc2V0KHBmeGRhdGEsIDAsIHNpemVvZigqcGZ4ZGF0YSkpOwogCS8qIHByZWZpeCBkYXRhICovCi0JcGZ4ZGF0YS0+Zm9ybWF0ID0gMDsKKwlpZiAoZm9ybWF0ID4gMSkgeworCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGJhc2VkZXYsCisJCQkgICAgICAiUEZYIExSRSB1bmtub3duIGZvcm1hdCAweCV4IiwgZm9ybWF0KTsKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwZnhkYXRhLT5mb3JtYXQgPSBmb3JtYXQ7CiAJcGZ4ZGF0YS0+YmFzZV9hZGRyZXNzID0gYmFzZXByaXYtPm5lZC0+dW5pdF9hZGRyOwogCXBmeGRhdGEtPmJhc2VfbHNzID0gYmFzZXByaXYtPm5lZC0+SUQ7Ci0JcGZ4ZGF0YS0+dmFsaWRpdHkuZGVmaW5lX2V4dGVuZCA9IDE7CisJcGZ4ZGF0YS0+dmFsaWRpdHkuZGVmaW5lX2V4dGVudCA9IDE7CiAKIAkvKiBwcml2YXRlIHVpZCBpcyBrZXB0IHVwIHRvIGRhdGUsIGNvbmZfZGF0YSBtYXkgYmUgb3V0ZGF0ZWQgKi8KIAlpZiAoc3RhcnRwcml2LT51aWQudHlwZSAhPSBVQV9CQVNFX0RFVklDRSkgewpAQCAtMzM3LDcwICs0NzEsOTQgQEAKIAljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9LRDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9LRF9NVDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DT1VOVDoKLQkJZGF0YS0+bWFzay5wZXJtID0gMHgxOwotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOgorCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9NVDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfS0Q6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEX01UOgotCQlkYXRhLT5tYXNrLnBlcm0gPSAweDAyOwotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MDI7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKIAkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOwogCQlicmVhazsKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9DS0RfTVQ6Ci0JCWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gREFTRF9CWVBBU1NfQ0FDSEU7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKIAkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOwogCQlicmVhazsKIAljYXNlIERBU0RfRUNLRF9DQ1dfRVJBU0U6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0hPTUVfQUREUkVTUzoKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfUkVDT1JEX1pFUk86Ci0JCWRhdGEtPm1hc2sucGVybSA9IDB4MzsKLQkJZGF0YS0+bWFzay5hdXRoID0gMHgxOwotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IERBU0RfQllQQVNTX0NBQ0hFOworCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MzsKKwkJZGVkYXRhLT5tYXNrLmF1dGggPSAweDE7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKKwkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQToKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAyOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSBibGtzaXplOwogCQlyYyA9IGNoZWNrX1hSQ19vbl9wcmVmaXgocGZ4ZGF0YSwgYmFzZWRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBiYXNlZGV2LCAidW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7Ci0JCWJyZWFrOworCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGJhc2VkZXYsCisJCQkgICAgIlBGWCBMUkUgdW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkYXRhLT5hdHRyaWJ1dGVzLm1vZGUgPSAweDM7CS8qIEVDS0QgKi8KKwlkZWRhdGEtPmF0dHJpYnV0ZXMubW9kZSA9IDB4MzsJLyogRUNLRCAqLwogCiAJaWYgKChiYXNlcHJpdi0+cmRjX2RhdGEuY3VfdHlwZSA9PSAweDIxMDUgfHwKIAkgICAgIGJhc2Vwcml2LT5yZGNfZGF0YS5jdV90eXBlID09IDB4MjEwNyB8fAogCSAgICAgYmFzZXByaXYtPnJkY19kYXRhLmN1X3R5cGUgPT0gMHgxNzUwKQogCSAgICAmJiAhKGJhc2Vwcml2LT51c2VzX2NkbCAmJiB0cmsgPCAyKSkKLQkJZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHg0MDsgLyogUmVndWxhciBEYXRhIEZvcm1hdCBNb2RlICovCisJCWRlZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHg0MDsgLyogUmVndWxhciBEYXRhIEZvcm1hdCBNb2RlICovCiAKLQlnZW8uY3lsID0gYmFzZXByaXYtPnJkY19kYXRhLm5vX2N5bDsKLQlnZW8uaGVhZCA9IGJhc2Vwcml2LT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKLQliZWcuY3lsID0gdHJrIC8gZ2VvLmhlYWQ7Ci0JYmVnLmhlYWQgPSB0cmsgJSBnZW8uaGVhZDsKLQllbmQuY3lsID0gdG90cmsgLyBnZW8uaGVhZDsKLQllbmQuaGVhZCA9IHRvdHJrICUgZ2VvLmhlYWQ7CisJaGVhZHMgPSBiYXNlcHJpdi0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJYmVnY3lsID0gdHJrIC8gaGVhZHM7CisJYmVnaGVhZCA9IHRyayAlIGhlYWRzOworCWVuZGN5bCA9IHRvdHJrIC8gaGVhZHM7CisJZW5kaGVhZCA9IHRvdHJrICUgaGVhZHM7CiAKIAkvKiBjaGVjayBmb3Igc2VxdWVudGlhbCBwcmVzdGFnZSAtIGVuaGFuY2UgY3lsaW5kZXIgcmFuZ2UgKi8KLQlpZiAoZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfUFJFU1RBR0UgfHwKLQkgICAgZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfQUNDRVNTKSB7CisJaWYgKGRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfUFJFU1RBR0UgfHwKKwkgICAgZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9BQ0NFU1MpIHsKIAotCQlpZiAoZW5kLmN5bCArIGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsIDwgZ2VvLmN5bCkKLQkJCWVuZC5jeWwgKz0gYmFzZXByaXYtPmF0dHJpYi5ucl9jeWw7CisJCWlmIChlbmRjeWwgKyBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bCA8IGJhc2Vwcml2LT5yZWFsX2N5bCkKKwkJCWVuZGN5bCArPSBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bDsKIAkJZWxzZQotCQkJZW5kLmN5bCA9IChnZW8uY3lsIC0gMSk7CisJCQllbmRjeWwgPSAoYmFzZXByaXYtPnJlYWxfY3lsIC0gMSk7CiAJfQogCi0JZGF0YS0+YmVnX2V4dC5jeWwgPSBiZWcuY3lsOwotCWRhdGEtPmJlZ19leHQuaGVhZCA9IGJlZy5oZWFkOwotCWRhdGEtPmVuZF9leHQuY3lsID0gZW5kLmN5bDsKLQlkYXRhLT5lbmRfZXh0LmhlYWQgPSBlbmQuaGVhZDsKKwlzZXRfY2hfdCgmZGVkYXRhLT5iZWdfZXh0LCBiZWdjeWwsIGJlZ2hlYWQpOworCXNldF9jaF90KCZkZWRhdGEtPmVuZF9leHQsIGVuZGN5bCwgZW5kaGVhZCk7CisKKwlpZiAoZm9ybWF0ID09IDEpIHsKKwkJZmlsbF9MUkVfZGF0YShscmVkYXRhLCB0cmssIHJlY19vbl90cmssIGNvdW50LCBjbWQsCisJCQkgICAgICBiYXNlZGV2LCBibGtzaXplLCB0bGYpOworCX0KKwogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBwcmVmaXgoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IFBGWF9lY2tkX2RhdGEgKnBmeGRhdGEsCisJCSAgdW5zaWduZWQgaW50IHRyaywgdW5zaWduZWQgaW50IHRvdHJrLCBpbnQgY21kLAorCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldiwgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldikKK3sKKwlyZXR1cm4gcHJlZml4X0xSRShjY3csIHBmeGRhdGEsIHRyaywgdG90cmssIGNtZCwgYmFzZWRldiwgc3RhcnRkZXYsCisJCQkgIDAsIDAsIDAsIDAsIDApOworfQorCiBzdGF0aWMgdm9pZAotbG9jYXRlX3JlY29yZChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgTE9fZWNrZF9kYXRhICpkYXRhLCBpbnQgdHJrLAotCSAgICAgIGludCByZWNfb25fdHJrLCBpbnQgbm9fcmVjLCBpbnQgY21kLAorbG9jYXRlX3JlY29yZChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgTE9fZWNrZF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHJrLAorCSAgICAgIHVuc2lnbmVkIGludCByZWNfb25fdHJrLCBpbnQgbm9fcmVjLCBpbnQgY21kLAogCSAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSwgaW50IHJlY2xlbikKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CkBAIC00OTEsMTIgKzY0OSwxNCBAQAogCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwYjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgInVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgInVua25vd24gbG9jYXRlIHJlY29yZCAiCisJCQkgICAgICAib3Bjb2RlIDB4JXgiLCBjbWQpOwogCX0KLQlkYXRhLT5zZWVrX2FkZHIuY3lsID0gZGF0YS0+c2VhcmNoX2FyZy5jeWwgPQotCQl0cmsgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKLQlkYXRhLT5zZWVrX2FkZHIuaGVhZCA9IGRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9Ci0JCXRyayAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOworCXNldF9jaF90KCZkYXRhLT5zZWVrX2FkZHIsCisJCSB0cmsgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKKwkJIHRyayAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKTsKKwlkYXRhLT5zZWFyY2hfYXJnLmN5bCA9IGRhdGEtPnNlZWtfYWRkci5jeWw7CisJZGF0YS0+c2VhcmNoX2FyZy5oZWFkID0gZGF0YS0+c2Vla19hZGRyLmhlYWQ7CiAJZGF0YS0+c2VhcmNoX2FyZy5yZWNvcmQgPSByZWNfb25fdHJrOwogfQogCkBAIC01ODUsOCArNzQ1LDggQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdCgiRUNLRCIsIDEgLyogUkNEICovLCBjaXctPmNvdW50LCBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgUkNEIHJlcXVlc3QiKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBSQ0QgcmVxdWVzdCIpOwogCQlyZXR1cm4gY3FyOwogCX0KIApAQCAtNzM2LDE0ICs4OTYsMTYgQEAKIAkJCXJjID0gZGFzZF9lY2tkX3JlYWRfY29uZl9scG0oZGV2aWNlLCAmY29uZl9kYXRhLAogCQkJCQkJICAgICAmY29uZl9sZW4sIGxwbSk7CiAJCQlpZiAocmMgJiYgcmMgIT0gLUVPUE5PVFNVUFApIHsJLyogLUVPUE5PVFNVUFAgaXMgb2sgKi8KLQkJCQlNRVNTQUdFKEtFUk5fV0FSTklORywKLQkJCQkJIlJlYWQgY29uZmlndXJhdGlvbiBkYXRhIHJldHVybmVkICIKLQkJCQkJImVycm9yICVkIiwgcmMpOworCQkJCURCRl9FVkVOVChEQkZfV0FSTklORywKKwkJCQkJICAiUmVhZCBjb25maWd1cmF0aW9uIGRhdGEgcmV0dXJuZWQgIgorCQkJCQkgICJlcnJvciAlZCBmb3IgZGV2aWNlOiAlcyIsIHJjLAorCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJCXJldHVybiByYzsKIAkJCX0KIAkJCWlmIChjb25mX2RhdGEgPT0gTlVMTCkgewotCQkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLCAiTm8gY29uZmlndXJhdGlvbiAiCi0JCQkJCSJkYXRhIHJldHJpZXZlZCIpOworCQkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIk5vIGNvbmZpZ3VyYXRpb24gIgorCQkJCQkgICJkYXRhIHJldHJpZXZlZCBmb3IgZGV2aWNlOiAlcyIsCisJCQkJCSAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQkJY29udGludWU7CS8qIG5vIGVycm9yICovCiAJCQl9CiAJCQkvKiBzYXZlIGZpcnN0IHZhbGlkIGNvbmZpZ3VyYXRpb24gZGF0YSAqLwpAQCAtNzkwLDggKzk1Miw5IEBACiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgZGFzZF9yc3NkX2ZlYXR1cmVzKSksCiAJCQkJICAgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiAiCisJCQkgICJyZXF1ZXN0IGZvciBkZXZpY2U6ICVzIiwKKwkJCSAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CkBAIC04NDAsNyArMTAwMyw4IEBACiAvKgogICogQnVpbGQgQ1AgZm9yIFBlcmZvcm0gU3Vic3lzdGVtIEZ1bmN0aW9uIC0gU1NDLgogICovCi1zdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJCQkgICAgaW50IGVuYWJsZV9wYXYpCiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXN0cnVjdCBkYXNkX3BzZl9zc2NfZGF0YSAqcHNmX3NzY19kYXRhOwpAQCAtODUxLDE1ICsxMDE1LDE3IEBACiAJCQkJICBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAiQ291bGQgbm90IGFsbG9jYXRlIFBTRi1TU0MgcmVxdWVzdCIpOwogCQlyZXR1cm4gY3FyOwogCX0KIAlwc2Zfc3NjX2RhdGEgPSAoc3RydWN0IGRhc2RfcHNmX3NzY19kYXRhICopY3FyLT5kYXRhOwogCXBzZl9zc2NfZGF0YS0+b3JkZXIgPSBQU0ZfT1JERVJfU1NDOwotCXBzZl9zc2NfZGF0YS0+c3Vib3JkZXIgPSAweDg4OwotCXBzZl9zc2NfZGF0YS0+cmVzZXJ2ZWRbMF0gPSAweDg4OwotCisJcHNmX3NzY19kYXRhLT5zdWJvcmRlciA9IDB4NDA7CisJaWYgKGVuYWJsZV9wYXYpIHsKKwkJcHNmX3NzY19kYXRhLT5zdWJvcmRlciB8PSAweDg4OworCQlwc2Zfc3NjX2RhdGEtPnJlc2VydmVkWzBdID0gMHg4ODsKKwl9CiAJY2N3ID0gY3FyLT5jcGFkZHI7CiAJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUFNGOwogCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpcHNmX3NzY19kYXRhOwpAQCAtODgwLDEyICsxMDQ2LDEyIEBACiAgKiBjYWxsIG1pZ2h0IGNoYW5nZSBiZWhhdmlvdXIgb2YgREFTRCBkZXZpY2VzLgogICovCiBzdGF0aWMgaW50Ci1kYXNkX2Vja2RfcHNmX3NzYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK2Rhc2RfZWNrZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBpbnQgZW5hYmxlX3BhdikKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOwogCi0JY3FyID0gZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2MoZGV2aWNlKTsKKwljcXIgPSBkYXNkX2Vja2RfYnVpbGRfcHNmX3NzYyhkZXZpY2UsIGVuYWJsZV9wYXYpOwogCWlmIChJU19FUlIoY3FyKSkKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIApAQCAtOTA0LDE5ICsxMDcwLDIwIEBACiB7CiAJaW50IHJjOwogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlpbnQgZW5hYmxlX3BhdjsKIAotCS8qIEN1cnJlbnRseSBQQVYgaXMgdGhlIG9ubHkgcmVhc29uIHRvICd2YWxpZGF0ZScgc2VydmVyIG9uIExQQVIgKi8KIAlpZiAoZGFzZF9ub3BhdiB8fCBNQUNISU5FX0lTX1ZNKQotCQlyZXR1cm4gMDsKLQotCXJjID0gZGFzZF9lY2tkX3BzZl9zc2MoZGV2aWNlKTsKKwkJZW5hYmxlX3BhdiA9IDA7CisJZWxzZQorCQllbmFibGVfcGF2ID0gMTsKKwlyYyA9IGRhc2RfZWNrZF9wc2Zfc3NjKGRldmljZSwgZW5hYmxlX3Bhdik7CiAJLyogbWF5IGJlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgb24gc2VydmVyLAogCSAqIHRoZXJlZm9yZSBqdXN0IHJlcG9ydCBlcnJvciBhbmQgZ28gYWhlYWQgKi8KIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7Ci0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiUFNGLVNTQyBvbiBzdG9yYWdlIHN1YnN5c3RlbSAlcy4lcy4lMDR4IHJldHVybmVkIHJjPSVkIiwKLQkJICAgIHByaXZhdGUtPnVpZC52ZW5kb3IsIHByaXZhdGUtPnVpZC5zZXJpYWwsCi0JCSAgICBwcml2YXRlLT51aWQuc3NpZCwgcmMpOworCURCRl9FVkVOVChEQkZfV0FSTklORywgIlBTRi1TU0Mgb24gc3RvcmFnZSBzdWJzeXN0ZW0gJXMuJXMuJTA0eCAiCisJCSAgInJldHVybmVkIHJjPSVkIGZvciBkZXZpY2U6ICVzIiwKKwkJICBwcml2YXRlLT51aWQudmVuZG9yLCBwcml2YXRlLT51aWQuc2VyaWFsLAorCQkgIHByaXZhdGUtPnVpZC5zc2lkLCByYywgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJLyogUkUtUmVhZCBDb25maWd1cmF0aW9uIERhdGEgKi8KIAlyZXR1cm4gZGFzZF9lY2tkX3JlYWRfY29uZihkZXZpY2UpOwogfQpAQCAtOTM4LDkgKzExMDUsOSBAQAogCQlwcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlKSwKIAkJCQkgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAkJaWYgKHByaXZhdGUgPT0gTlVMTCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHByaXZhdGUgIgotCQkJCSAgICAiZGF0YSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiQWxsb2NhdGluZyBtZW1vcnkgZm9yIHByaXZhdGUgREFTRCBkYXRhICIKKwkJCQkgImZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlkZXZpY2UtPnByaXZhdGUgPSAodm9pZCAqKSBwcml2YXRlOwpAQCAtOTY1LDggKzExMzIsOSBAQAogCWlmIChwcml2YXRlLT51aWQudHlwZSA9PSBVQV9CQVNFX0RFVklDRSkgewogCQlibG9jayA9IGRhc2RfYWxsb2NfYmxvY2soKTsKIAkJaWYgKElTX0VSUihibG9jaykpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgYmxvY2sgc3RydWN0dXJlIik7CisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCAiCisJCQkJICAiYmxvY2sgc3RydWN0dXJlIGZvciBkZXZpY2U6ICVzIiwKKwkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJcmMgPSBQVFJfRVJSKGJsb2NrKTsKIAkJCWdvdG8gb3V0X2VycjE7CiAJCX0KQEAgLTk5NywyMCArMTE2NSwyNyBAQAogCW1lbXNldChyZGNfZGF0YSwgMCwgc2l6ZW9mKHJkY19kYXRhKSk7CiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCAiRUNLRCIsICZyZGNfZGF0YSwgNjQpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKLQkJCSAgICAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkICIKLQkJCSAgICAicmM9JWQiLCByYyk7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywKKwkJCSAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBmYWlsZWQsIHJjPSVkIGZvciAiCisJCQkgICJkZXZpY2U6ICVzIiwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIG91dF9lcnIzOwogCX0KLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJICAgICIlMDRYLyUwMlgoQ1U6JTA0WC8lMDJYKSBDeWw6JWQgSGVhZDolZCBTZWM6JWQiLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X3R5cGUsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5kZXZfbW9kZWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5jdV90eXBlLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfbW9kZWwubW9kZWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLnNlY19wZXJfdHJrKTsKKwkvKiBmaW5kIHRoZSB2YWlsZCBjeWxpbmRlciBzaXplICovCisJaWYgKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCA9PSBMVl9DT01QQVRfQ1lMICYmCisJICAgIHByaXZhdGUtPnJkY19kYXRhLmxvbmdfbm9fY3lsKQorCQlwcml2YXRlLT5yZWFsX2N5bCA9IHByaXZhdGUtPnJkY19kYXRhLmxvbmdfbm9fY3lsOworCWVsc2UKKwkJcHJpdmF0ZS0+cmVhbF9jeWwgPSBwcml2YXRlLT5yZGNfZGF0YS5ub19jeWw7CisKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJOZXcgREFTRCAlMDRYLyUwMlggKENVICUwNFgvJTAyWCkgIgorCQkgIndpdGggJWQgY3lsaW5kZXJzLCAlZCBoZWFkcywgJWQgc2VjdG9yc1xuIiwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmRldl90eXBlLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X21vZGVsLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfdHlwZSwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmN1X21vZGVsLm1vZGVsLAorCQkgICAgcHJpdmF0ZS0+cmVhbF9jeWwsCisJCSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKKwkJIHByaXZhdGUtPnJkY19kYXRhLnNlY19wZXJfdHJrKTsKIAlyZXR1cm4gMDsKIAogb3V0X2VycjM6CkBAIC0xMTUxLDE0ICsxMzI2LDEyIEBACiAJc3RhdHVzID0gcHJpdmF0ZS0+aW5pdF9jcXJfc3RhdHVzOwogCXByaXZhdGUtPmluaXRfY3FyX3N0YXR1cyA9IC0xOwogCWlmIChzdGF0dXMgIT0gREFTRF9DUVJfRE9ORSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAidm9sdW1lIGFuYWx5c2lzIHJldHVybmVkIHVuZm9ybWF0dGVkIGRpc2siKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICAgICJUaGUgREFTRCBpcyBub3QgZm9ybWF0dGVkXG4iKTsKIAkJcmV0dXJuIC1FTUVESVVNVFlQRTsKIAl9CiAKIAlwcml2YXRlLT51c2VzX2NkbCA9IDE7Ci0JLyogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MvcmVjb3JkcyBwZXIgdHJhY2suICovCi0JYmxrX3Blcl90cmsgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGJsb2NrLT5icF9ibG9jayk7CiAJLyogQ2hlY2sgVHJhY2sgMCBmb3IgQ29tcGF0aWJsZSBEaXNrIExheW91dCAqLwogCWNvdW50X2FyZWEgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKQEAgLTExODIsOCArMTM1NSw4IEBACiAJCQljb3VudF9hcmVhID0gJnByaXZhdGUtPmNvdW50X2FyZWFbMF07CiAJfSBlbHNlIHsKIAkJaWYgKHByaXZhdGUtPmNvdW50X2FyZWFbM10ucmVjb3JkID09IDEpCi0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIlRyayAwOiBubyByZWNvcmRzIGFmdGVyIFZUT0MhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJUcmFjayAwIGhhcyBubyByZWNvcmRzIGZvbGxvd2luZyB0aGUgVlRPQ1xuIik7CiAJfQogCWlmIChjb3VudF9hcmVhICE9IE5VTEwgJiYgY291bnRfYXJlYS0+a2wgPT0gMCkgewogCQkvKiB3ZSBmb3VuZCBub3R0aGluZyB2aW9sYXRpbmcgb3VyIGRpc2sgbGF5b3V0ICovCkBAIC0xMTkxLDggKzEzNjQsOCBAQAogCQkJYmxvY2stPmJwX2Jsb2NrID0gY291bnRfYXJlYS0+ZGw7CiAJfQogCWlmIChibG9jay0+YnBfYmxvY2sgPT0gMCkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiVm9sdW1lIGhhcyBpbmNvbXBhdGlibGUgZGlzayBsYXlvdXQiKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgZGlzayBsYXlvdXQgb2YgdGhlIERBU0QgaXMgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRU1FRElVTVRZUEU7CiAJfQogCWJsb2NrLT5zMmJfc2hpZnQgPSAwOwkvKiBiaXRzIHRvIHNoaWZ0IDUxMiB0byBnZXQgYSBibG9jayAqLwpAQCAtMTIwMCwxOSArMTM3MywxOSBAQAogCQlibG9jay0+czJiX3NoaWZ0Kys7CiAKIAlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxvY2stPmJwX2Jsb2NrKTsKLQlibG9jay0+YmxvY2tzID0gKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCAqCisJYmxvY2stPmJsb2NrcyA9IChwcml2YXRlLT5yZWFsX2N5bCAqCiAJCQkgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKIAkJCSAgYmxrX3Blcl90cmspOwogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiKCVka0IgYmxrcyk6ICVka0IgYXQgJWRrQi90cmsgJXMiLAotCQkgICAgKGJsb2NrLT5icF9ibG9jayA+PiAxMCksCi0JCSAgICAoKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCAqCi0JCSAgICAgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKLQkJICAgICAgYmxrX3Blcl90cmsgKiAoYmxvY2stPmJwX2Jsb2NrID4+IDkpKSA+PiAxKSwKLQkJICAgICgoYmxrX3Blcl90cmsgKiBibG9jay0+YnBfYmxvY2spID4+IDEwKSwKLQkJICAgIHByaXZhdGUtPnVzZXNfY2RsID8KLQkJICAgICJjb21wYXRpYmxlIGRpc2sgbGF5b3V0IiA6ICJsaW51eCBkaXNrIGxheW91dCIpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJICJEQVNEIHdpdGggJWQgS0IvYmxvY2ssICVkIEtCIHRvdGFsIHNpemUsICVkIEtCL3RyYWNrLCAiCisJCSAiJXNcbiIsIChibG9jay0+YnBfYmxvY2sgPj4gMTApLAorCQkgKChwcml2YXRlLT5yZWFsX2N5bCAqCisJCSAgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKKwkJICAgYmxrX3Blcl90cmsgKiAoYmxvY2stPmJwX2Jsb2NrID4+IDkpKSA+PiAxKSwKKwkJICgoYmxrX3Blcl90cmsgKiBibG9jay0+YnBfYmxvY2spID4+IDEwKSwKKwkJIHByaXZhdGUtPnVzZXNfY2RsID8KKwkJICJjb21wYXRpYmxlIGRpc2sgbGF5b3V0IiA6ICJsaW51eCBkaXNrIGxheW91dCIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjYyLDMxICsxNDM1LDM1IEBACiAJc3RydWN0IGVja2RfY291bnQgKmVjdDsKIAlzdHJ1Y3QgY2N3MSAqY2N3OwogCXZvaWQgKmRhdGE7Ci0JaW50IHJwdCwgY3lsLCBoZWFkOworCWludCBycHQ7CisJc3RydWN0IGNoX3QgYWRkcmVzczsKIAlpbnQgY3BsZW5ndGgsIGRhdGFzaXplOwogCWludCBpOworCWludCBpbnRlbnNpdHkgPSAwOworCWludCByMF9wZXJtOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCXJwdCA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgZmRhdGEtPmJsa3NpemUpOwotCWN5bCA9IGZkYXRhLT5zdGFydF91bml0IC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7Ci0JaGVhZCA9IGZkYXRhLT5zdGFydF91bml0ICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJc2V0X2NoX3QoJmFkZHJlc3MsCisJCSBmZGF0YS0+c3RhcnRfdW5pdCAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAorCQkgZmRhdGEtPnN0YXJ0X3VuaXQgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCk7CiAKIAkvKiBTYW5pdHkgY2hlY2tzLiAqLwogCWlmIChmZGF0YS0+c3RhcnRfdW5pdCA+PQotCSAgICAocHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsICogcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLCAiVHJhY2sgbm8gJWQgdG9vIGJpZyEiLAotCQkJICAgIGZkYXRhLT5zdGFydF91bml0KTsKKwkgICAgKHByaXZhdGUtPnJlYWxfY3lsICogcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpKSB7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIlN0YXJ0IHRyYWNrIG51bWJlciAlZCB1c2VkIGluICIKKwkJCSAiZm9ybWF0dGluZyBpcyB0b28gYmlnXG4iLCBmZGF0YS0+c3RhcnRfdW5pdCk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAlpZiAoZmRhdGEtPnN0YXJ0X3VuaXQgPiBmZGF0YS0+c3RvcF91bml0KSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLCAiVHJhY2sgJWQgcmVhY2hlZCEgZW5kaW5nLiIsCi0JCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJTdGFydCB0cmFjayAlZCB1c2VkIGluICIKKwkJCSAiZm9ybWF0dGluZyBleGNlZWRzIGVuZCB0cmFja1xuIiwgZmRhdGEtPnN0YXJ0X3VuaXQpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAJaWYgKGRhc2RfY2hlY2tfYmxvY2tzaXplKGZkYXRhLT5ibGtzaXplKSAhPSAwKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJICAgICJJbnZhbGlkIGJsb2Nrc2l6ZSAlZC4uLnRlcm1pbmF0aW5nISIsCi0JCQkgICAgZmRhdGEtPmJsa3NpemUpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIlRoZSBEQVNEIGNhbm5vdCBiZSBmb3JtYXR0ZWQgd2l0aCBibG9jayBzaXplICVkXG4iLAorCQkJIGZkYXRhLT5ibGtzaXplKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCkBAIC0xMjk2LDkgKzE0NzMsMTcgQEAKIAkgKiAgIEJpdCAxOiB3cml0ZSBob21lIGFkZHJlc3MsIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCiAJICogICBCaXQgMjogaW52YWxpZGF0ZSB0cmFja3MKIAkgKiAgIEJpdCAzOiB1c2UgT1MvMzkwIGNvbXBhdGlibGUgZGlzayBsYXlvdXQgKGNkbCkKKwkgKiAgIEJpdCA0OiBkbyBub3QgYWxsb3cgc3RvcmFnZSBzdWJzeXN0ZW0gdG8gbW9kaWZ5IHJlY29yZCB6ZXJvCiAJICogT25seSBzb21lIGJpdCBjb21iaW5hdGlvbnMgZG8gbWFrZSBzZW5zZS4KIAkgKi8KLQlzd2l0Y2ggKGZkYXRhLT5pbnRlbnNpdHkpIHsKKwlpZiAoZmRhdGEtPmludGVuc2l0eSAmIDB4MTApIHsKKwkJcjBfcGVybSA9IDA7CisJCWludGVuc2l0eSA9IGZkYXRhLT5pbnRlbnNpdHkgJiB+MHgxMDsKKwl9IGVsc2UgeworCQlyMF9wZXJtID0gMTsKKwkJaW50ZW5zaXR5ID0gZmRhdGEtPmludGVuc2l0eTsKKwl9CisJc3dpdGNoIChpbnRlbnNpdHkpIHsKIAljYXNlIDB4MDA6CS8qIE5vcm1hbCBmb3JtYXQgKi8KIAljYXNlIDB4MDg6CS8qIE5vcm1hbCBmb3JtYXQsIHVzZSBjZGwuICovCiAJCWNwbGVuZ3RoID0gMiArIHJwdDsKQEAgLTEzMjIsOCArMTUwNyw4IEBACiAJCQlzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIkludmFsaWQgZmxhZ3MgMHgleC4iLAotCQkJICAgIGZkYXRhLT5pbnRlbnNpdHkpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBJL08gY29udHJvbCBjYWxsIHVzZWQgIgorCQkJICJpbmNvcnJlY3QgZmxhZ3MgMHgleFxuIiwgZmRhdGEtPmludGVuc2l0eSk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAkvKiBBbGxvY2F0ZSB0aGUgZm9ybWF0IGNjdyByZXF1ZXN0LiAqLwpAQCAtMTMzNSwxMSArMTUyMCwxNCBAQAogCWRhdGEgPSBmY3AtPmRhdGE7CiAJY2N3ID0gZmNwLT5jcGFkZHI7CiAKLQlzd2l0Y2ggKGZkYXRhLT5pbnRlbnNpdHkgJiB+MHgwOCkgeworCXN3aXRjaCAoaW50ZW5zaXR5ICYgfjB4MDgpIHsKIAljYXNlIDB4MDA6IC8qIE5vcm1hbCBmb3JtYXQuICovCiAJCWRlZmluZV9leHRlbnQoY2N3KyssIChzdHJ1Y3QgREVfZWNrZF9kYXRhICopIGRhdGEsCiAJCQkgICAgICBmZGF0YS0+c3RhcnRfdW5pdCwgZmRhdGEtPnN0YXJ0X3VuaXQsCiAJCQkgICAgICBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRCwgZGV2aWNlKTsKKwkJLyogZ3JhbnQgc3Vic3lzdGVtIHBlcm1pc3Npb24gdG8gZm9ybWF0IFIwICovCisJCWlmIChyMF9wZXJtKQorCQkJKChzdHJ1Y3QgREVfZWNrZF9kYXRhICopZGF0YSktPmdhX2V4dGVuZGVkIHw9IDB4MDQ7CiAJCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpOwogCQljY3dbLTFdLmZsYWdzIHw9IENDV19GTEFHX0NDOwogCQlsb2NhdGVfcmVjb3JkKGNjdysrLCAoc3RydWN0IExPX2Vja2RfZGF0YSAqKSBkYXRhLApAQCAtMTM3MywxMSArMTU2MSwxMSBAQAogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgTE9fZWNrZF9kYXRhKTsKIAkJYnJlYWs7CiAJfQotCWlmIChmZGF0YS0+aW50ZW5zaXR5ICYgMHgwMSkgewkvKiB3cml0ZSByZWNvcmQgemVybyAqLworCWlmIChpbnRlbnNpdHkgJiAweDAxKSB7CS8qIHdyaXRlIHJlY29yZCB6ZXJvICovCiAJCWVjdCA9IChzdHJ1Y3QgZWNrZF9jb3VudCAqKSBkYXRhOwogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgZWNrZF9jb3VudCk7Ci0JCWVjdC0+Y3lsID0gY3lsOwotCQllY3QtPmhlYWQgPSBoZWFkOworCQllY3QtPmN5bCA9IGFkZHJlc3MuY3lsOworCQllY3QtPmhlYWQgPSBhZGRyZXNzLmhlYWQ7CiAJCWVjdC0+cmVjb3JkID0gMDsKIAkJZWN0LT5rbCA9IDA7CiAJCWVjdC0+ZGwgPSA4OwpAQCAtMTM4OCwxMSArMTU3NiwxMSBAQAogCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBlY3Q7CiAJCWNjdysrOwogCX0KLQlpZiAoKGZkYXRhLT5pbnRlbnNpdHkgJiB+MHgwOCkgJiAweDA0KSB7CS8qIGVyYXNlIHRyYWNrICovCisJaWYgKChpbnRlbnNpdHkgJiB+MHgwOCkgJiAweDA0KSB7CS8qIGVyYXNlIHRyYWNrICovCiAJCWVjdCA9IChzdHJ1Y3QgZWNrZF9jb3VudCAqKSBkYXRhOwogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgZWNrZF9jb3VudCk7Ci0JCWVjdC0+Y3lsID0gY3lsOwotCQllY3QtPmhlYWQgPSBoZWFkOworCQllY3QtPmN5bCA9IGFkZHJlc3MuY3lsOworCQllY3QtPmhlYWQgPSBhZGRyZXNzLmhlYWQ7CiAJCWVjdC0+cmVjb3JkID0gMTsKIAkJZWN0LT5rbCA9IDA7CiAJCWVjdC0+ZGwgPSAwOwpAQCAtMTQwNSwyMCArMTU5MywyMCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcnB0OyBpKyspIHsKIAkJCWVjdCA9IChzdHJ1Y3QgZWNrZF9jb3VudCAqKSBkYXRhOwogCQkJZGF0YSArPSBzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwotCQkJZWN0LT5jeWwgPSBjeWw7Ci0JCQllY3QtPmhlYWQgPSBoZWFkOworCQkJZWN0LT5jeWwgPSBhZGRyZXNzLmN5bDsKKwkJCWVjdC0+aGVhZCA9IGFkZHJlc3MuaGVhZDsKIAkJCWVjdC0+cmVjb3JkID0gaSArIDE7CiAJCQllY3QtPmtsID0gMDsKIAkJCWVjdC0+ZGwgPSBmZGF0YS0+Ymxrc2l6ZTsKIAkJCS8qIENoZWNrIGZvciBzcGVjaWFsIHRyYWNrcyAwLTEgd2hlbiBmb3JtYXR0aW5nIENETCAqLwotCQkJaWYgKChmZGF0YS0+aW50ZW5zaXR5ICYgMHgwOCkgJiYKKwkJCWlmICgoaW50ZW5zaXR5ICYgMHgwOCkgJiYKIAkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCA9PSAwKSB7CiAJCQkJaWYgKGkgPCAzKSB7CiAJCQkJCWVjdC0+a2wgPSA0OwogCQkJCQllY3QtPmRsID0gc2l6ZXNfdHJrMFtpXSAtIDQ7CiAJCQkJfQogCQkJfQotCQkJaWYgKChmZGF0YS0+aW50ZW5zaXR5ICYgMHgwOCkgJiYKKwkJCWlmICgoaW50ZW5zaXR5ICYgMHgwOCkgJiYKIAkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCA9PSAxKSB7CiAJCQkJZWN0LT5rbCA9IDQ0OwogCQkJCWVjdC0+ZGwgPSBMQUJFTF9TSVpFIC0gNDQ7CkBAIC0xNDc5LDU3ICsxNjY3LDY5IEBACiAJCQkJCQkgICBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJY2hhciBtYXNrOworCWNoYXIgKnNlbnNlID0gTlVMTDsKIAogCS8qIGZpcnN0IG9mIGFsbCBjaGVjayBmb3Igc3RhdGUgY2hhbmdlIHBlbmRpbmcgaW50ZXJydXB0ICovCiAJbWFzayA9IERFVl9TVEFUX0FUVEVOVElPTiB8IERFVl9TVEFUX0RFVl9FTkQgfCBERVZfU1RBVF9VTklUX0VYQ0VQOwotCWlmICgoaXJiLT5zY3N3LmNtZC5kc3RhdCAmIG1hc2spID09IG1hc2spIHsKKwlpZiAoKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgJiBtYXNrKSA9PSBtYXNrKSB7CiAJCWRhc2RfZ2VuZXJpY19oYW5kbGVfc3RhdGVfY2hhbmdlKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBzdW1tYXJ5IHVuaXQgY2hlY2sgKi8KLQlpZiAoKGlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSAmJgorCWlmICgoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spICYmCiAJICAgIChpcmItPmVjd1s3XSA9PSAweDBEKSkgewogCQlkYXNkX2FsaWFzX2hhbmRsZV9zdW1tYXJ5X3VuaXRfY2hlY2soZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQogCi0KKwlzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKGlyYik7CiAJLyogc2VydmljZSBpbmZvcm1hdGlvbiBtZXNzYWdlIFNJTSAqLwotCWlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zICYmICEoaXJiLT5lY3dbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgJiYKLQkgICAgKChpcmItPmVjd1s2XSAmIERBU0RfU0lNX1NFTlNFKSA9PSBEQVNEX1NJTV9TRU5TRSkpIHsKLQkJZGFzZF8zOTkwX2VycF9oYW5kbGVfc2ltKGRldmljZSwgaXJiLT5lY3cpOworCWlmIChzZW5zZSAmJiAhKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApICYmCisJICAgICgoc2Vuc2VbNl0gJiBEQVNEX1NJTV9TRU5TRSkgPT0gREFTRF9TSU1fU0VOU0UpKSB7CisJCWRhc2RfMzk5MF9lcnBfaGFuZGxlX3NpbShkZXZpY2UsIHNlbnNlKTsKIAkJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICgoaXJiLT5zY3N3LmNtZC5jYyA9PSAxKSAmJgotCSAgICAoaXJiLT5zY3N3LmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCi0JICAgIChpcmItPnNjc3cuY21kLmFjdGwgJiBTQ1NXX0FDVExfU1RBUlRfUEVORCkgJiYKLQkgICAgKGlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkgeworCWlmICgoc2Nzd19jYygmaXJiLT5zY3N3KSA9PSAxKSAmJgorCSAgICAoc2Nzd19mY3RsKCZpcmItPnNjc3cpICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCisJICAgIChzY3N3X2FjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0FDVExfU1RBUlRfUEVORCkgJiYKKwkgICAgKHNjc3dfc3RjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkgewogCQkvKiBmYWtlIGlyYiBkbyBub3RoaW5nLCB0aGV5IGFyZSBoYW5kbGVkIGVsc2V3aGVyZSAqLwogCQlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKCEoaXJiLT5lc3cuZXN3MC5lcncuY29ucykpIHsKKwlpZiAoIXNlbnNlKSB7CiAJCS8qIGp1c3QgcmVwb3J0IG90aGVyIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgInVuc29saWNpdGVkIGludGVycnVwdCByZWNlaXZlZCIpOwogCX0gZWxzZSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAogCQkJICAgICJ1bnNvbGljaXRlZCBpbnRlcnJ1cHQgcmVjZWl2ZWQgIgogCQkJICAgICIoc2Vuc2UgYXZhaWxhYmxlKSIpOwotCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiLAorCQkJCQkJICAgInVuc29saWNpdGVkIik7CiAJfQogCiAJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAlyZXR1cm47CiB9OwogCi1zdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwKHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3NpbmdsZSgKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCiAJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCi0JCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQorCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfdHJrLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsYXN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSkKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyAqaWRhd3M7CkBAIC0xNTM5LDExICsxNzM5LDkgQEAKIAlzdHJ1Y3QgcmVxX2l0ZXJhdG9yIGl0ZXI7CiAJc3RydWN0IGJpb192ZWMgKmJ2OwogCWNoYXIgKmRzdDsKLQl1bnNpZ25lZCBpbnQgYmxrc2l6ZSwgYmxrX3Blcl90cmssIG9mZjsKKwl1bnNpZ25lZCBpbnQgb2ZmOwogCWludCBjb3VudCwgY2lkYXcsIGNwbGVuZ3RoLCBkYXRhc2l6ZTsKLQlzZWN0b3JfdCByZWNpZCwgZmlyc3RfcmVjLCBsYXN0X3JlYzsKLQlzZWN0b3JfdCBmaXJzdF90cmssIGxhc3RfdHJrOwotCXVuc2lnbmVkIGludCBmaXJzdF9vZmZzLCBsYXN0X29mZnM7CisJc2VjdG9yX3QgcmVjaWQ7CiAJdW5zaWduZWQgY2hhciBjbWQsIHJjbWQ7CiAJaW50IHVzZV9wcmVmaXg7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2OwpAQCAtMTU1NiwxNSArMTc1NCw3IEBACiAJCWNtZCA9IERBU0RfRUNLRF9DQ1dfV1JJVEVfTVQ7CiAJZWxzZQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KLQlibGtzaXplID0gYmxvY2stPmJwX2Jsb2NrOwotCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibGtzaXplKTsKLQkvKiBDYWxjdWxhdGUgcmVjb3JkIGlkIG9mIGZpcnN0IGFuZCBsYXN0IGJsb2NrLiAqLwotCWZpcnN0X3JlYyA9IGZpcnN0X3RyayA9IHJlcS0+c2VjdG9yID4+IGJsb2NrLT5zMmJfc2hpZnQ7Ci0JZmlyc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYoZmlyc3RfdHJrLCBibGtfcGVyX3Ryayk7Ci0JbGFzdF9yZWMgPSBsYXN0X3RyayA9Ci0JCShyZXEtPnNlY3RvciArIHJlcS0+bnJfc2VjdG9ycyAtIDEpID4+IGJsb2NrLT5zMmJfc2hpZnQ7Ci0JbGFzdF9vZmZzID0gc2VjdG9yX2RpdihsYXN0X3RyaywgYmxrX3Blcl90cmspOworCiAJLyogQ2hlY2sgc3RydWN0IGJpbyBhbmQgY291bnQgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIHRoZSByZXF1ZXN0LiAqLwogCWNvdW50ID0gMDsKIAljaWRhdyA9IDA7CkBAIC0xNzE0LDYgKzE5MDQsNDk3IEBACiAJcmV0dXJuIGNxcjsKIH0KIAorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcF9jbWRfdHJhY2soCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAorCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfdHJrLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsYXN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSkKK3sKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyAqaWRhd3M7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCXN0cnVjdCBjY3cxICpjY3c7CisJc3RydWN0IHJlcV9pdGVyYXRvciBpdGVyOworCXN0cnVjdCBiaW9fdmVjICpidjsKKwljaGFyICpkc3QsICppZGF3X2RzdDsKKwl1bnNpZ25lZCBpbnQgY2lkYXcsIGNwbGVuZ3RoLCBkYXRhc2l6ZTsKKwl1bnNpZ25lZCBpbnQgdGxmOworCXNlY3Rvcl90IHJlY2lkOworCXVuc2lnbmVkIGNoYXIgY21kOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKKwl1bnNpZ25lZCBpbnQgdHJrY291bnQsIGNvdW50LCBjb3VudF90b190cmtfZW5kOworCXVuc2lnbmVkIGludCBpZGF3X2xlbiwgc2VnX2xlbiwgcGFydF9sZW4sIGxlbl90b190cmFja19lbmQ7CisJdW5zaWduZWQgY2hhciBuZXdfdHJhY2ssIGVuZF9pZGF3OworCXNlY3Rvcl90IHRya2lkOworCXVuc2lnbmVkIGludCByZWNvZmZzOworCisJYmFzZWRldiA9IGJsb2NrLT5iYXNlOworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkKKwkJY21kID0gREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE7CisJZWxzZSBpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkKKwkJY21kID0gREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOworCWVsc2UKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBUcmFjayBiYXNlZCBJL08gbmVlZHMgSURBV3MgZm9yIGVhY2ggcGFnZSwgYW5kIG5vdCBqdXN0IGZvcgorCSAqIDY0IGJpdCBhZGRyZXNzZXMuIFdlIG5lZWQgYWRkaXRpb25hbCBpZGFscyBmb3IgcGFnZXMKKwkgKiB0aGF0IGdldCBmaWxsZWQgZnJvbSB0d28gdHJhY2tzLCBzbyB3ZSB1c2UgdGhlIG51bWJlcgorCSAqIG9mIHJlY29yZHMgYXMgdXBwZXIgbGltaXQuCisJICovCisJY2lkYXcgPSBsYXN0X3JlYyAtIGZpcnN0X3JlYyArIDE7CisJdHJrY291bnQgPSBsYXN0X3RyayAtIGZpcnN0X3RyayArIDE7CisKKwkvKiAxeCBwcmVmaXggKyBvbmUgcmVhZC93cml0ZSBjY3cgcGVyIHRyYWNrICovCisJY3BsZW5ndGggPSAxICsgdHJrY291bnQ7CisKKwkvKiBvbiAzMS1iaXQgd2UgbmVlZCBzcGFjZSBmb3IgdHdvIDMyIGJpdCBhZGRyZXNzZXMgcGVyIHBhZ2UKKwkgKiBvbiA2NC1iaXQgb25lIDY0IGJpdCBhZGRyZXNzCisJICovCisJZGF0YXNpemUgPSBzaXplb2Yoc3RydWN0IFBGWF9lY2tkX2RhdGEpICsKKwkJY2lkYXcgKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsKKworCS8qIEFsbG9jYXRlIHRoZSBjY3cgcmVxdWVzdC4gKi8KKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAorCQkJCSAgIGNwbGVuZ3RoLCBkYXRhc2l6ZSwgc3RhcnRkZXYpOworCWlmIChJU19FUlIoY3FyKSkKKwkJcmV0dXJuIGNxcjsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwkvKiB0cmFuc2ZlciBsZW5ndGggZmFjdG9yOiBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdGhlIGxhc3QgdHJhY2sgKi8KKwlpZiAoZmlyc3RfdHJrID09IGxhc3RfdHJrKQorCQl0bGYgPSBsYXN0X29mZnMgLSBmaXJzdF9vZmZzICsgMTsKKwllbHNlCisJCXRsZiA9IGxhc3Rfb2ZmcyArIDE7CisJdGxmICo9IGJsa3NpemU7CisKKwlpZiAocHJlZml4X0xSRShjY3crKywgY3FyLT5kYXRhLCBmaXJzdF90cmssCisJCSAgICAgICBsYXN0X3RyaywgY21kLCBiYXNlZGV2LCBzdGFydGRldiwKKwkJICAgICAgIDEgLyogZm9ybWF0ICovLCBmaXJzdF9vZmZzICsgMSwKKwkJICAgICAgIHRya2NvdW50LCBibGtzaXplLAorCQkgICAgICAgdGxmKSA9PSAtRUFHQUlOKSB7CisJCS8qIENsb2NrIG5vdCBpbiBzeW5jIGFuZCBYUkMgaXMgZW5hYmxlZC4KKwkJICogVHJ5IGFnYWluIGxhdGVyLgorCQkgKi8KKwkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgc3RhcnRkZXYpOworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwkvKgorCSAqIFRoZSB0cmFuc2xhdGlvbiBvZiByZXF1ZXN0IGludG8gY2N3IHByb2dyYW1zIG11c3QgbWVldCB0aGUKKwkgKiBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwkgKiAtIGFsbCBpZGF3cyBidXQgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCBtdXN0IGFkZHJlc3MgZnVsbCBwYWdlcworCSAqICAgKG9yIDJLIGJsb2NrcyBvbiAzMS1iaXQpCisJICogLSB0aGUgc2NvcGUgb2YgYSBjY3cgYW5kIGl0J3MgaWRhbCBlbmRzIHdpdGggdGhlIHRyYWNrIGJvdW5kYXJpZXMKKwkgKi8KKwlpZGF3cyA9ICh1bnNpZ25lZCBsb25nICopIChjcXItPmRhdGEgKyBzaXplb2Yoc3RydWN0IFBGWF9lY2tkX2RhdGEpKTsKKwlyZWNpZCA9IGZpcnN0X3JlYzsKKwluZXdfdHJhY2sgPSAxOworCWVuZF9pZGF3ID0gMDsKKwlsZW5fdG9fdHJhY2tfZW5kID0gMDsKKwlpZGF3X2RzdCA9IDA7CisJaWRhd19sZW4gPSAwOworCXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJlcSwgaXRlcikgeworCQlkc3QgPSBwYWdlX2FkZHJlc3MoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJc2VnX2xlbiA9IGJ2LT5idl9sZW47CisJCXdoaWxlIChzZWdfbGVuKSB7CisJCQlpZiAobmV3X3RyYWNrKSB7CisJCQkJdHJraWQgPSByZWNpZDsKKwkJCQlyZWNvZmZzID0gc2VjdG9yX2Rpdih0cmtpZCwgYmxrX3Blcl90cmspOworCQkJCWNvdW50X3RvX3Rya19lbmQgPSBibGtfcGVyX3RyayAtIHJlY29mZnM7CisJCQkJY291bnQgPSBtaW4oKGxhc3RfcmVjIC0gcmVjaWQgKyAxKSwKKwkJCQkJICAgIChzZWN0b3JfdCljb3VudF90b190cmtfZW5kKTsKKwkJCQlsZW5fdG9fdHJhY2tfZW5kID0gY291bnQgKiBibGtzaXplOworCQkJCWNjd1stMV0uZmxhZ3MgfD0gQ0NXX0ZMQUdfQ0M7CisJCQkJY2N3LT5jbWRfY29kZSA9IGNtZDsKKwkJCQljY3ctPmNvdW50ID0gbGVuX3RvX3RyYWNrX2VuZDsKKwkJCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KWlkYXdzOworCQkJCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19JREE7CisJCQkJY2N3Kys7CisJCQkJcmVjaWQgKz0gY291bnQ7CisJCQkJbmV3X3RyYWNrID0gMDsKKwkJCX0KKwkJCS8qIElmIHdlIHN0YXJ0IGEgbmV3IGlkYXcsIGV2ZXJ5dGhpbmcgaXMgZmluZSBhbmQgdGhlCisJCQkgKiBzdGFydCBvZiB0aGUgbmV3IGlkYXcgaXMgdGhlIHN0YXJ0IG9mIHRoaXMgc2VnbWVudC4KKwkJCSAqIElmIHdlIGNvbnRpbnVlIGFuIGlkYXcsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlCisJCQkgKiBjdXJyZW50IHNlZ21lbnQgYmVnaW5zIHdoZXJlIHRoZSBzbyBmYXIgYWNjdW11bGF0ZWQKKwkJCSAqIGlkYXcgZW5kcworCQkJICovCisJCQlpZiAoIWlkYXdfZHN0KQorCQkJCWlkYXdfZHN0ID0gZHN0OworCQkJaWYgKChpZGF3X2RzdCArIGlkYXdfbGVuKSAhPSBkc3QpIHsKKwkJCQlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBzdGFydGRldik7CisJCQkJcmV0dXJuIEVSUl9QVFIoLUVSQU5HRSk7CisJCQl9CisJCQlwYXJ0X2xlbiA9IG1pbihzZWdfbGVuLCBsZW5fdG9fdHJhY2tfZW5kKTsKKwkJCXNlZ19sZW4gLT0gcGFydF9sZW47CisJCQlkc3QgKz0gcGFydF9sZW47CisJCQlpZGF3X2xlbiArPSBwYXJ0X2xlbjsKKwkJCWxlbl90b190cmFja19lbmQgLT0gcGFydF9sZW47CisJCQkvKiBjb2xsZWN0ZWQgbWVtb3J5IGFyZWEgZW5kcyBvbiBhbiBJREFfQkxPQ0sgYm9yZGVyLAorCQkJICogLT4gY3JlYXRlIGFuIGlkYXcKKwkJCSAqIGlkYWxfY3JlYXRlX3dvcmRzIHdpbGwgaGFuZGxlIGNhc2VzIHdoZXJlIGlkYXdfbGVuCisJCQkgKiBpcyBsYXJnZXIgdGhlbiBJREFfQkxPQ0tfU0laRQorCQkJICovCisJCQlpZiAoIShfX3BhKGlkYXdfZHN0ICsgaWRhd19sZW4pICYgKElEQV9CTE9DS19TSVpFLTEpKSkKKwkJCQllbmRfaWRhdyA9IDE7CisJCQkvKiBXZSBhbHNvIG5lZWQgdG8gZW5kIHRoZSBpZGF3IGF0IHRyYWNrIGVuZCAqLworCQkJaWYgKCFsZW5fdG9fdHJhY2tfZW5kKSB7CisJCQkJbmV3X3RyYWNrID0gMTsKKwkJCQllbmRfaWRhdyA9IDE7CisJCQl9CisJCQlpZiAoZW5kX2lkYXcpIHsKKwkJCQlpZGF3cyA9IGlkYWxfY3JlYXRlX3dvcmRzKGlkYXdzLCBpZGF3X2RzdCwKKwkJCQkJCQkgIGlkYXdfbGVuKTsKKwkJCQlpZGF3X2RzdCA9IDA7CisJCQkJaWRhd19sZW4gPSAwOworCQkJCWVuZF9pZGF3ID0gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkgfHwKKwkgICAgYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxGQVNUKQorCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CisJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OworCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5ibG9jayA9IGJsb2NrOworCWNxci0+ZXhwaXJlcyA9IDUgKiA2MCAqIEhaOwkvKiA1IG1pbnV0ZXMgKi8KKwljcXItPmxwbSA9IHByaXZhdGUtPnBhdGhfZGF0YS5wcG07CisJY3FyLT5yZXRyaWVzID0gMjU2OworCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKKwljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKKwlyZXR1cm4gY3FyOworfQorCitzdGF0aWMgaW50IHByZXBhcmVfaXRjdyhzdHJ1Y3QgaXRjdyAqaXRjdywKKwkJCXVuc2lnbmVkIGludCB0cmssIHVuc2lnbmVkIGludCB0b3RyaywgaW50IGNtZCwKKwkJCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldiwKKwkJCXN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQl1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IGNvdW50LAorCQkJdW5zaWduZWQgaW50IGJsa3NpemUsCisJCQl1bnNpZ25lZCBpbnQgdG90YWxfZGF0YV9zaXplLAorCQkJdW5zaWduZWQgaW50IHRsZiwKKwkJCXVuc2lnbmVkIGludCBibGtfcGVyX3RyaykKK3sKKwlzdHJ1Y3QgUEZYX2Vja2RfZGF0YSBwZnhkYXRhOworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqYmFzZXByaXYsICpzdGFydHByaXY7CisJc3RydWN0IERFX2Vja2RfZGF0YSAqZGVkYXRhOworCXN0cnVjdCBMUkVfZWNrZF9kYXRhICpscmVkYXRhOworCXN0cnVjdCBkY3cgKmRjdzsKKworCXUzMiBiZWdjeWwsIGVuZGN5bDsKKwl1MTYgaGVhZHMsIGJlZ2hlYWQsIGVuZGhlYWQ7CisJdTggcGZ4X2NtZDsKKworCWludCByYyA9IDA7CisJaW50IHNlY3RvciA9IDA7CisJaW50IGRuLCBkOworCisKKwkvKiBzZXR1cCBwcmVmaXggZGF0YSAqLworCWJhc2Vwcml2ID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOworCXN0YXJ0cHJpdiA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgc3RhcnRkZXYtPnByaXZhdGU7CisJZGVkYXRhID0gJnBmeGRhdGEuZGVmaW5lX2V4dGVudDsKKwlscmVkYXRhID0gJnBmeGRhdGEubG9jYXRlX3JlY29yZDsKKworCW1lbXNldCgmcGZ4ZGF0YSwgMCwgc2l6ZW9mKHBmeGRhdGEpKTsKKwlwZnhkYXRhLmZvcm1hdCA9IDE7IC8qIFBGWCB3aXRoIExSRSAqLworCXBmeGRhdGEuYmFzZV9hZGRyZXNzID0gYmFzZXByaXYtPm5lZC0+dW5pdF9hZGRyOworCXBmeGRhdGEuYmFzZV9sc3MgPSBiYXNlcHJpdi0+bmVkLT5JRDsKKwlwZnhkYXRhLnZhbGlkaXR5LmRlZmluZV9leHRlbnQgPSAxOworCisJLyogcHJpdmF0ZSB1aWQgaXMga2VwdCB1cCB0byBkYXRlLCBjb25mX2RhdGEgbWF5IGJlIG91dGRhdGVkICovCisJaWYgKHN0YXJ0cHJpdi0+dWlkLnR5cGUgIT0gVUFfQkFTRV9ERVZJQ0UpIHsKKwkJcGZ4ZGF0YS52YWxpZGl0eS52ZXJpZnlfYmFzZSA9IDE7CisJCWlmIChzdGFydHByaXYtPnVpZC50eXBlID09IFVBX0hZUEVSX1BBVl9BTElBUykKKwkJCXBmeGRhdGEudmFsaWRpdHkuaHlwZXJfcGF2ID0gMTsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE6CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgxOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSBibGtzaXplOworCQlkZWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDI7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MDsKKwkJbHJlZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MEM7CisJCWxyZWRhdGEtPmF1eGlsaWFyeS5jaGVja19ieXRlcyA9IDB4MDE7CisJCXBmeF9jbWQgPSBEQVNEX0VDS0RfQ0NXX1BGWF9SRUFEOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQToKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAyOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSBibGtzaXplOworCQlyYyA9IGNoZWNrX1hSQ19vbl9wcmVmaXgoJnBmeGRhdGEsIGJhc2VkZXYpOworCQlkZWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDI7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MDsKKwkJbHJlZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4M0Y7CisJCWxyZWRhdGEtPmV4dGVuZGVkX29wZXJhdGlvbiA9IDB4MjM7CisJCWxyZWRhdGEtPmF1eGlsaWFyeS5jaGVja19ieXRlcyA9IDB4MjsKKwkJcGZ4X2NtZCA9IERBU0RfRUNLRF9DQ1dfUEZYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGJhc2VkZXYsCisJCQkgICAgICAicHJlcGFyZSBpdGN3LCB1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWRlZGF0YS0+YXR0cmlidXRlcy5tb2RlID0gMHgzOwkvKiBFQ0tEICovCisKKwloZWFkcyA9IGJhc2Vwcml2LT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwliZWdjeWwgPSB0cmsgLyBoZWFkczsKKwliZWdoZWFkID0gdHJrICUgaGVhZHM7CisJZW5kY3lsID0gdG90cmsgLyBoZWFkczsKKwllbmRoZWFkID0gdG90cmsgJSBoZWFkczsKKworCS8qIGNoZWNrIGZvciBzZXF1ZW50aWFsIHByZXN0YWdlIC0gZW5oYW5jZSBjeWxpbmRlciByYW5nZSAqLworCWlmIChkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8CisJICAgIGRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfQUNDRVNTKSB7CisKKwkJaWYgKGVuZGN5bCArIGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsIDwgYmFzZXByaXYtPnJlYWxfY3lsKQorCQkJZW5kY3lsICs9IGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsOworCQllbHNlCisJCQllbmRjeWwgPSAoYmFzZXByaXYtPnJlYWxfY3lsIC0gMSk7CisJfQorCisJc2V0X2NoX3QoJmRlZGF0YS0+YmVnX2V4dCwgYmVnY3lsLCBiZWdoZWFkKTsKKwlzZXRfY2hfdCgmZGVkYXRhLT5lbmRfZXh0LCBlbmRjeWwsIGVuZGhlYWQpOworCisJZGVkYXRhLT5lcF9mb3JtYXQgPSAweDIwOyAvKiByZWNvcmRzIHBlciB0cmFjayBpcyB2YWxpZCAqLworCWRlZGF0YS0+ZXBfcmVjX3Blcl90cmFjayA9IGJsa19wZXJfdHJrOworCisJaWYgKHJlY19vbl90cmspIHsKKwkJc3dpdGNoIChiYXNlcHJpdi0+cmRjX2RhdGEuZGV2X3R5cGUpIHsKKwkJY2FzZSAweDMzOTA6CisJCQlkbiA9IGNlaWxfcXVvdChibGtzaXplICsgNiwgMjMyKTsKKwkJCWQgPSA5ICsgY2VpbF9xdW90KGJsa3NpemUgKyA2ICogKGRuICsgMSksIDM0KTsKKwkJCXNlY3RvciA9ICg0OSArIChyZWNfb25fdHJrIC0gMSkgKiAoMTAgKyBkKSkgLyA4OworCQkJYnJlYWs7CisJCWNhc2UgMHgzMzgwOgorCQkJZCA9IDcgKyBjZWlsX3F1b3QoYmxrc2l6ZSArIDEyLCAzMik7CisJCQlzZWN0b3IgPSAoMzkgKyAocmVjX29uX3RyayAtIDEpICogKDggKyBkKSkgLyA3OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlscmVkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMTsKKwlscmVkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3Njb3BlID0gMTsKKwlscmVkYXRhLT5hdXhpbGlhcnkuaW1iZWRkZWRfY2N3X3ZhbGlkID0gMTsKKwlscmVkYXRhLT5sZW5ndGggPSB0bGY7CisJbHJlZGF0YS0+aW1iZWRkZWRfY2N3ID0gY21kOworCWxyZWRhdGEtPmNvdW50ID0gY291bnQ7CisJbHJlZGF0YS0+c2VjdG9yID0gc2VjdG9yOworCXNldF9jaF90KCZscmVkYXRhLT5zZWVrX2FkZHIsIGJlZ2N5bCwgYmVnaGVhZCk7CisJbHJlZGF0YS0+c2VhcmNoX2FyZy5jeWwgPSBscmVkYXRhLT5zZWVrX2FkZHIuY3lsOworCWxyZWRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9IGxyZWRhdGEtPnNlZWtfYWRkci5oZWFkOworCWxyZWRhdGEtPnNlYXJjaF9hcmcucmVjb3JkID0gcmVjX29uX3RyazsKKworCWRjdyA9IGl0Y3dfYWRkX2RjdyhpdGN3LCBwZnhfY21kLCAwLAorCQkgICAgICZwZnhkYXRhLCBzaXplb2YocGZ4ZGF0YSksIHRvdGFsX2RhdGFfc2l6ZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3BfdHBtX3RyYWNrKAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywKKwkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3RyaywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGFzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUpCit7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKwlzdHJ1Y3QgcmVxX2l0ZXJhdG9yIGl0ZXI7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWNoYXIgKmRzdDsKKwl1bnNpZ25lZCBpbnQgdHJrY291bnQsIGN0aWRhdzsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CisJdW5zaWduZWQgaW50IHRsZjsKKwlzdHJ1Y3QgaXRjdyAqaXRjdzsKKwlzdHJ1Y3QgdGlkYXcgKmxhc3RfdGlkYXcgPSBOVUxMOworCWludCBpdGN3X29wOworCXNpemVfdCBpdGN3X3NpemU7CisKKwliYXNlZGV2ID0gYmxvY2stPmJhc2U7CisJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKKwlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7CisJCWNtZCA9IERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOworCQlpdGN3X29wID0gSVRDV19PUF9SRUFEOworCX0gZWxzZSBpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgeworCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE7CisJCWl0Y3dfb3AgPSBJVENXX09QX1dSSVRFOworCX0gZWxzZQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIHRyYWNrYmFzZWQgSS9PIG5lZWRzIGFkZHJlc3MgYWxsIG1lbW9yeSB2aWEgVElEQVdzLAorCSAqIG5vdCBqdXN0IGZvciA2NCBiaXQgYWRkcmVzc2VzLiBUaGlzIGFsbG93cyB1cyB0byBtYXAKKwkgKiBlYWNoIHNlZ21lbnQgZGlyZWN0bHkgdG8gb25lIHRpZGF3LgorCSAqLworCXRya2NvdW50ID0gbGFzdF90cmsgLSBmaXJzdF90cmsgKyAxOworCWN0aWRhdyA9IDA7CisJcnFfZm9yX2VhY2hfc2VnbWVudChidiwgcmVxLCBpdGVyKSB7CisJCSsrY3RpZGF3OworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBjY3cgcmVxdWVzdC4gKi8KKwlpdGN3X3NpemUgPSBpdGN3X2NhbGNfc2l6ZSgwLCBjdGlkYXcsIDApOworCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCisJCQkJICAgMCwgaXRjd19zaXplLCBzdGFydGRldik7CisJaWYgKElTX0VSUihjcXIpKQorCQlyZXR1cm4gY3FyOworCisJY3FyLT5jcG1vZGUgPSAxOworCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKKwljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OworCWNxci0+YmxvY2sgPSBibG9jazsKKwljcXItPmV4cGlyZXMgPSAxMDAqSFo7CisJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOworCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOworCWNxci0+cmV0cmllcyA9IDEwOworCisJLyogdHJhbnNmZXIgbGVuZ3RoIGZhY3RvcjogaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSBsYXN0IHRyYWNrICovCisJaWYgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykKKwkJdGxmID0gbGFzdF9vZmZzIC0gZmlyc3Rfb2ZmcyArIDE7CisJZWxzZQorCQl0bGYgPSBsYXN0X29mZnMgKyAxOworCXRsZiAqPSBibGtzaXplOworCisJaXRjdyA9IGl0Y3dfaW5pdChjcXItPmRhdGEsIGl0Y3dfc2l6ZSwgaXRjd19vcCwgMCwgY3RpZGF3LCAwKTsKKwljcXItPmNwYWRkciA9IGl0Y3dfZ2V0X3RjdyhpdGN3KTsKKworCWlmIChwcmVwYXJlX2l0Y3coaXRjdywgZmlyc3RfdHJrLCBsYXN0X3RyaywKKwkJCSBjbWQsIGJhc2VkZXYsIHN0YXJ0ZGV2LAorCQkJIGZpcnN0X29mZnMgKyAxLAorCQkJIHRya2NvdW50LCBibGtzaXplLAorCQkJIChsYXN0X3JlYyAtIGZpcnN0X3JlYyArIDEpICogYmxrc2l6ZSwKKwkJCSB0bGYsIGJsa19wZXJfdHJrKSA9PSAtRUFHQUlOKSB7CisJCS8qIENsb2NrIG5vdCBpbiBzeW5jIGFuZCBYUkMgaXMgZW5hYmxlZC4KKwkJICogVHJ5IGFnYWluIGxhdGVyLgorCQkgKi8KKwkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgc3RhcnRkZXYpOworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwkvKgorCSAqIEEgdGlkYXcgY2FuIGFkZHJlc3MgNGsgb2YgbWVtb3J5LCBidXQgbXVzdCBub3QgY3Jvc3MgcGFnZSBib3VuZGFyaWVzCisJICogV2UgY2FuIGxldCB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIHRoaXMgYnkgc2V0dGluZworCSAqIGJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5IHRvIHBhZ2UgYm91bmRhcmllcyBhbmQKKwkgKiBibGtfbWF4X3NlZ21lbnRfc2l6ZSB0byBwYWdlIHNpemUgd2hlbiBzZXR0aW5nIHVwIHRoZSByZXF1ZXN0IHF1ZXVlLgorCSAqLworCXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJlcSwgaXRlcikgeworCQlkc3QgPSBwYWdlX2FkZHJlc3MoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJbGFzdF90aWRhdyA9IGl0Y3dfYWRkX3RpZGF3KGl0Y3csIDB4MDAsIGRzdCwgYnYtPmJ2X2xlbik7CisJCWlmIChJU19FUlIobGFzdF90aWRhdykpCisJCQlyZXR1cm4gKHN0cnVjdCBkYXNkX2Njd19yZXEgKilsYXN0X3RpZGF3OworCX0KKworCWxhc3RfdGlkYXctPmZsYWdzIHw9IDB4ODA7CisJaXRjd19maW5hbGl6ZShpdGN3KTsKKworCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkgfHwKKwkgICAgYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxGQVNUKQorCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CisJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OworCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5ibG9jayA9IGJsb2NrOworCWNxci0+ZXhwaXJlcyA9IDUgKiA2MCAqIEhaOwkvKiA1IG1pbnV0ZXMgKi8KKwljcXItPmxwbSA9IHByaXZhdGUtPnBhdGhfZGF0YS5wcG07CisJY3FyLT5yZXRyaWVzID0gMjU2OworCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKKwljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKKwlyZXR1cm4gY3FyOworfQorCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwKHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCWludCB0cG0sIGNtZHJ0ZCwgY21kd3RkOworCWludCB1c2VfcHJlZml4OworCisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCWludCBmY3hfaW5fY3NzLCBmY3hfaW5fZ25lcSwgZmN4X2luX2ZlYXR1cmVzOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKKwlzZWN0b3JfdCBmaXJzdF9yZWMsIGxhc3RfcmVjOworCXNlY3Rvcl90IGZpcnN0X3RyaywgbGFzdF90cms7CisJdW5zaWduZWQgaW50IGZpcnN0X29mZnMsIGxhc3Rfb2ZmczsKKwl1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmssIGJsa3NpemU7CisJaW50IGNkbHNwZWNpYWw7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCisJYmFzZWRldiA9IGJsb2NrLT5iYXNlOworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisKKwkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KKwlibGtzaXplID0gYmxvY2stPmJwX2Jsb2NrOworCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibGtzaXplKTsKKwkvKiBDYWxjdWxhdGUgcmVjb3JkIGlkIG9mIGZpcnN0IGFuZCBsYXN0IGJsb2NrLiAqLworCWZpcnN0X3JlYyA9IGZpcnN0X3RyayA9IHJlcS0+c2VjdG9yID4+IGJsb2NrLT5zMmJfc2hpZnQ7CisJZmlyc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYoZmlyc3RfdHJrLCBibGtfcGVyX3Ryayk7CisJbGFzdF9yZWMgPSBsYXN0X3RyayA9CisJCShyZXEtPnNlY3RvciArIHJlcS0+bnJfc2VjdG9ycyAtIDEpID4+IGJsb2NrLT5zMmJfc2hpZnQ7CisJbGFzdF9vZmZzID0gc2VjdG9yX2RpdihsYXN0X3RyaywgYmxrX3Blcl90cmspOworCWNkbHNwZWNpYWwgPSAocHJpdmF0ZS0+dXNlc19jZGwgJiYgZmlyc3RfcmVjIDwgMipibGtfcGVyX3Ryayk7CisKKwkvKiBpcyB0cmFuc3BvcnQgbW9kZSBzdXBwb3J0ZWQgPyAqLworCWZjeF9pbl9jc3MgPSBjc3NfZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpY3MuZmN4OworCWZjeF9pbl9nbmVxID0gcHJpdmF0ZS0+Z25lcS0+cmVzZXJ2ZWQyWzddICYgMHgwNDsKKwlmY3hfaW5fZmVhdHVyZXMgPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzQwXSAmIDB4ODA7CisJdHBtID0gZmN4X2luX2NzcyAmJiBmY3hfaW5fZ25lcSAmJiBmY3hfaW5fZmVhdHVyZXM7CisKKwkvKiBpcyByZWFkIHRyYWNrIGRhdGEgYW5kIHdyaXRlIHRyYWNrIGRhdGEgaW4gY29tbWFuZCBtb2RlIHN1cHBvcnRlZD8gKi8KKwljbWRydGQgPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzldICYgMHgyMDsKKwljbWR3dGQgPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzEyXSAmIDB4NDA7CisJdXNlX3ByZWZpeCA9IHByaXZhdGUtPmZlYXR1cmVzLmZlYXR1cmVbOF0gJiAweDAxOworCisJY3FyID0gTlVMTDsKKwlpZiAoY2Rsc3BlY2lhbCB8fCBkYXNkX3BhZ2VfY2FjaGUpIHsKKwkJLyogZG8gbm90aGluZywganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGNtZCBtb2RlIHNpbmdsZSBjYXNlICovCisJfSBlbHNlIGlmICghZGFzZF9ub2ZjeCAmJiB0cG0gJiYgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykpIHsKKwkJY3FyID0gZGFzZF9lY2tkX2J1aWxkX2NwX3RwbV90cmFjayhzdGFydGRldiwgYmxvY2ssIHJlcSwKKwkJCQkJCSAgICBmaXJzdF9yZWMsIGxhc3RfcmVjLAorCQkJCQkJICAgIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkJCQkgICAgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzLAorCQkJCQkJICAgIGJsa19wZXJfdHJrLCBibGtzaXplKTsKKwkJaWYgKElTX0VSUihjcXIpICYmIFBUUl9FUlIoY3FyKSAhPSAtRUFHQUlOKQorCQkJY3FyID0gTlVMTDsKKwl9IGVsc2UgaWYgKHVzZV9wcmVmaXggJiYKKwkJICAgKCgocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSAmJiBjbWRydGQpIHx8CisJCSAgICAoKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpICYmIGNtZHd0ZCkpKSB7CisJCWNxciA9IGRhc2RfZWNrZF9idWlsZF9jcF9jbWRfdHJhY2soc3RhcnRkZXYsIGJsb2NrLCByZXEsCisJCQkJCQkgICBmaXJzdF9yZWMsIGxhc3RfcmVjLAorCQkJCQkJICAgZmlyc3RfdHJrLCBsYXN0X3RyaywKKwkJCQkJCSAgIGZpcnN0X29mZnMsIGxhc3Rfb2ZmcywKKwkJCQkJCSAgIGJsa19wZXJfdHJrLCBibGtzaXplKTsKKwkJaWYgKElTX0VSUihjcXIpICYmIFBUUl9FUlIoY3FyKSAhPSAtRUFHQUlOKQorCQkJY3FyID0gTlVMTDsKKwl9CisJaWYgKCFjcXIpCisJCWNxciA9IGRhc2RfZWNrZF9idWlsZF9jcF9jbWRfc2luZ2xlKHN0YXJ0ZGV2LCBibG9jaywgcmVxLAorCQkJCQkJICAgIGZpcnN0X3JlYywgbGFzdF9yZWMsCisJCQkJCQkgICAgZmlyc3RfdHJrLCBsYXN0X3RyaywKKwkJCQkJCSAgICBmaXJzdF9vZmZzLCBsYXN0X29mZnMsCisJCQkJCQkgICAgYmxrX3Blcl90cmssIGJsa3NpemUpOworCXJldHVybiBjcXI7Cit9CisKIHN0YXRpYyBpbnQKIGRhc2RfZWNrZF9mcmVlX2NwKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKQEAgLTE3NjcsNyArMjQ0OCw3IEBACiB9CiAKIC8qCi0gKiBNb2RpZnkgY2N3IGNoYWluIGluIGNxciBzbyBpdCBjYW4gYmUgc3RhcnRlZCBvbiBhIGJhc2UgZGV2aWNlLgorICogTW9kaWZ5IGNjdy90Y3cgaW4gY3FyIHNvIGl0IGNhbiBiZSBzdGFydGVkIG9uIGEgYmFzZSBkZXZpY2UuCiAgKgogICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGVub3VnaCB0byByZXN0YXJ0IHRoZSBjcXIhCiAgKiBFaXRoZXIgcmVzZXQgY3FyLT5zdGFydGRldiBhcyB3ZWxsIChzdW1tYXJ5IHVuaXQgY2hlY2sgaGFuZGxpbmcpCkBAIC0xNzc3LDEzICsyNDU4LDI0IEBACiB7CiAJc3RydWN0IGNjdzEgKmNjdzsKIAlzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqcGZ4ZGF0YTsKKwlzdHJ1Y3QgdGN3ICp0Y3c7CisJc3RydWN0IHRjY2IgKnRjY2I7CisJc3RydWN0IGRjdyAqZGN3OwogCi0JY2N3ID0gY3FyLT5jcGFkZHI7Ci0JcGZ4ZGF0YSA9IGNxci0+ZGF0YTsKLQotCWlmIChjY3ctPmNtZF9jb2RlID09IERBU0RfRUNLRF9DQ1dfUEZYKSB7CisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJdGN3ID0gY3FyLT5jcGFkZHI7CisJCXRjY2IgPSB0Y3dfZ2V0X3RjY2IodGN3KTsKKwkJZGN3ID0gKHN0cnVjdCBkY3cgKikmdGNjYi0+dGNhWzBdOworCQlwZnhkYXRhID0gKHN0cnVjdCBQRlhfZWNrZF9kYXRhICopJmRjdy0+Y2RbMF07CiAJCXBmeGRhdGEtPnZhbGlkaXR5LnZlcmlmeV9iYXNlID0gMDsKIAkJcGZ4ZGF0YS0+dmFsaWRpdHkuaHlwZXJfcGF2ID0gMDsKKwl9IGVsc2UgeworCQljY3cgPSBjcXItPmNwYWRkcjsKKwkJcGZ4ZGF0YSA9IGNxci0+ZGF0YTsKKwkJaWYgKGNjdy0+Y21kX2NvZGUgPT0gREFTRF9FQ0tEX0NDV19QRlgpIHsKKwkJCXBmeGRhdGEtPnZhbGlkaXR5LnZlcmlmeV9iYXNlID0gMDsKKwkJCXBmeGRhdGEtPnZhbGlkaXR5Lmh5cGVyX3BhdiA9IDA7CisJCX0KIAl9CiB9CiAKQEAgLTE4NjEsNiArMjU1Myw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTE4NjgsMTQgKzI1NjEsMTUgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAogCQkJCSAgIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JFTEVBU0U7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5jb3VudCA9IDMyOwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JFTEVBU0U7CisJY2N3LT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7CisJY2N3LT5jb3VudCA9IDMyOworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwogCWNxci0+bWVtZGV2ID0gZGV2aWNlOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CkBAIC0xOTAyLDYgKzI1OTYsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xOTA5LDE0ICsyNjA0LDE1IEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKIAkJCQkgICAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIAl9Ci0JY3FyLT5jcGFkZHItPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRVNFUlZFOwotICAgICAgICBjcXItPmNwYWRkci0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOwotICAgICAgICBjcXItPmNwYWRkci0+Y291bnQgPSAzMjsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRVNFUlZFOworCWNjdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOworCWNjdy0+Y291bnQgPSAzMjsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwpAQCAtMTk0Miw2ICsyNjM4LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMTk0OSwxNCArMjY0NiwxNSBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCiAJCQkJICAgMSwgMzIsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU0xDSzsKLSAgICAgICAgY3FyLT5jcGFkZHItPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmNvdW50ID0gMzI7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU0xDSzsKKwljY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKKwljY3ctPmNvdW50ID0gMzI7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKQEAgLTE5OTAsNyArMjY4OCw3IEBACiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgZGFzZF9yc3NkX3BlcmZfc3RhdHNfdCkpLAogCQkJCSAgIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQpAQCAtMjA4MCw5ICsyNzc4LDkgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcHJpdmF0ZS0+YXR0cmliID0gYXR0cmliOwogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiY2FjaGUgb3BlcmF0aW9uIG1vZGUgc2V0IHRvICV4ICglaSBjeWxpbmRlciBwcmVzdGFnZSkiLAotCQkgICAgcHJpdmF0ZS0+YXR0cmliLm9wZXJhdGlvbiwgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCk7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkgIlRoZSBEQVNEIGNhY2hlIG1vZGUgd2FzIHNldCB0byAleCAoJWkgY3lsaW5kZXIgcHJlc3RhZ2UpXG4iLAorCQkgcHJpdmF0ZS0+YXR0cmliLm9wZXJhdGlvbiwgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMzMsNyArMjgzMSw3IEBACiAJLyogc2V0dXAgQ0NXcyBmb3IgUFNGICsgUlNTRCAqLwogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KCJFQ0tEIiwgMiAsIDAsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmMgPSBQVFJfRVJSKGNxcik7CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yMjQyLDExICsyOTQwLDU0IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHZvaWQKK2Rhc2RfZWNrZF9kdW1wX3NlbnNlX2RiZihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLAorCQkJIHN0cnVjdCBpcmIgKmlyYiwgY2hhciAqcmVhc29uKQoreworCXU2NCAqc2Vuc2U7CisJaW50IHNsOworCXN0cnVjdCB0c2IgKnRzYjsKKworCXNlbnNlID0gTlVMTDsKKwl0c2IgPSBOVUxMOworCWlmIChyZXEgJiYgc2Nzd19pc190bSgmcmVxLT5pcmIuc2NzdykpIHsKKwkJaWYgKGlyYi0+c2Nzdy50bS50Y3cpCisJCQl0c2IgPSB0Y3dfZ2V0X3RzYigKKwkJCQkoc3RydWN0IHRjdyAqKSh1bnNpZ25lZCBsb25nKWlyYi0+c2Nzdy50bS50Y3cpOworCQlpZiAodHNiICYmIChpcmItPnNjc3cudG0uZmN4cyA9PSAweDAxKSkgeworCQkJc3dpdGNoICh0c2ItPmZsYWdzICYgMHgwNykgeworCQkJY2FzZSAxOgkvKiB0c2FfaW9zdGF0ICovCisJCQkJc2Vuc2UgPSAodTY0ICopdHNiLT50c2EuaW9zdGF0LnNlbnNlOworCQkJYnJlYWs7CisJCQljYXNlIDI6IC8qIHRzX2RkcGMgKi8KKwkJCQlzZW5zZSA9ICh1NjQgKil0c2ItPnRzYS5kZHBjLnNlbnNlOworCQkJYnJlYWs7CisJCQljYXNlIDM6IC8qIHRzYV9pbnRyZyAqLworCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykKKwkJCXNlbnNlID0gKHU2NCAqKWlyYi0+ZWN3OworCX0KKwlpZiAoc2Vuc2UpIHsKKwkJZm9yIChzbCA9IDA7IHNsIDwgNDsgc2wrKykgeworCQkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwKKwkJCQkgICAgICAiJXM6ICUwMTZsbHggJTAxNmxseCAlMDE2bGx4ICUwMTZsbHgiLAorCQkJCSAgICAgIHJlYXNvbiwgc2Vuc2VbMF0sIHNlbnNlWzFdLCBzZW5zZVsyXSwKKwkJCQkgICAgICBzZW5zZVszXSk7CisJCX0KKwl9IGVsc2UgeworCQlEQkZfREVWX0VWRU5UKERCRl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIlNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKKwl9Cit9CisKIC8qCiAgKiBQcmludCBzZW5zZSBkYXRhIGFuZCByZWxhdGVkIGNoYW5uZWwgcHJvZ3JhbS4KICAqIFBhcnRzIGFyZSBwcmludGVkIGJlY2F1c2UgcHJpbnRrIGJ1ZmZlciBpcyBvbmx5IDEwMjQgYnl0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorc3RhdGljIHZvaWQgZGFzZF9lY2tkX2R1bXBfc2Vuc2VfY2N3KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpyZXEsIHN0cnVjdCBpcmIgKmlyYikKIHsKIAljaGFyICpwYWdlOwpAQCAtMjI1NSw4ICsyOTk2LDggQEAKIAogCXBhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKHBhZ2UgPT0gTlVMTCkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiICVzIiwKLQkJCSAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YSIpOworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YVxuIik7CiAJCXJldHVybjsKIAl9CiAJLyogZHVtcCB0aGUgc2Vuc2UgZGF0YSAqLwpAQCAtMjI2NSw3ICszMDA2LDcgQEAKIAkJICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgogCQkgICAgICAgIiBpbiByZXE6ICVwIENTOiAweCUwMlggRFM6IDB4JTAyWFxuIiwgcmVxLAotCQkgICAgICAgaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5kc3RhdCk7CisJCSAgICAgICBzY3N3X2NzdGF0KCZpcmItPnNjc3cpLCBzY3N3X2RzdGF0KCZpcmItPnNjc3cpKTsKIAlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCiAJCSAgICAgICAiIGRldmljZSAlczogRmFpbGluZyBDQ1c6ICVwXG4iLAogCQkgICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKQEAgLTIzNDEsNiArMzA4MiwxNDcgQEAKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwogfQogCisKKy8qCisgKiBQcmludCBzZW5zZSBkYXRhIGZyb20gYSB0Y3cuCisgKi8KK3N0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlX3RjdyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLCBzdHJ1Y3QgaXJiICppcmIpCit7CisJY2hhciAqcGFnZTsKKwlpbnQgbGVuLCBzbCwgc2N0LCByZXNpZHVhbDsKKworCXN0cnVjdCB0c2IgKnRzYjsKKwl1OCAqc2Vuc2U7CisKKworCXBhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CisJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIgJXMiLAorCQkJICAgICJObyBtZW1vcnkgdG8gZHVtcCBzZW5zZSBkYXRhIik7CisJCXJldHVybjsKKwl9CisJLyogZHVtcCB0aGUgc2Vuc2UgZGF0YSAqLworCWxlbiA9IHNwcmludGYocGFnZSwgIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJICAgICAgIiBJL08gc3RhdHVzIHJlcG9ydCBmb3IgZGV2aWNlICVzOlxuIiwKKwkJICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkgICAgICAgIiBpbiByZXE6ICVwIENTOiAweCUwMlggRFM6IDB4JTAyWCAiCisJCSAgICAgICAiZmN4czogMHglMDJYIHNjaHhzOiAweCUwMlhcbiIsIHJlcSwKKwkJICAgICAgIHNjc3dfY3N0YXQoJmlyYi0+c2NzdyksIHNjc3dfZHN0YXQoJmlyYi0+c2NzdyksCisJCSAgICAgICBpcmItPnNjc3cudG0uZmN4cywgaXJiLT5zY3N3LnRtLnNjaHhzKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCSAgICAgICAiIGRldmljZSAlczogRmFpbGluZyBUQ1c6ICVwXG4iLAorCQkgICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJICAgICAgICh2b2lkICopIChhZGRyX3QpIGlyYi0+c2Nzdy50bS50Y3cpOworCisJdHNiID0gTlVMTDsKKwlzZW5zZSA9IE5VTEw7CisJaWYgKGlyYi0+c2Nzdy50bS50Y3cpCisJCXRzYiA9IHRjd19nZXRfdHNiKAorCQkJKHN0cnVjdCB0Y3cgKikodW5zaWduZWQgbG9uZylpcmItPnNjc3cudG0udGN3KTsKKworCWlmICh0c2IgJiYgKGlyYi0+c2Nzdy50bS5mY3hzID09IDB4MDEpKSB7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+bGVuZ3RoICVkXG4iLCB0c2ItPmxlbmd0aCk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+ZmxhZ3MgJXhcbiIsIHRzYi0+ZmxhZ3MpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmRjd19vZmZzZXQgJWRcbiIsIHRzYi0+ZGN3X29mZnNldCk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+Y291bnQgJWRcbiIsIHRzYi0+Y291bnQpOworCQlyZXNpZHVhbCA9IHRzYi0+Y291bnQgLSAyODsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgcmVzaWR1YWwgJWRcbiIsIHJlc2lkdWFsKTsKKworCQlzd2l0Y2ggKHRzYi0+ZmxhZ3MgJiAweDA3KSB7CisJCWNhc2UgMToJLyogdHNhX2lvc3RhdCAqLworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LmRldl90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGV2X3RpbWUpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LmRlZl90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGVmX3RpbWUpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LnF1ZXVlX3RpbWUgJWRcbiIsCisJCQkJICAgICAgIHRzYi0+dHNhLmlvc3RhdC5xdWV1ZV90aW1lKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5kZXZfYnVzeV90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGV2X2J1c3lfdGltZSk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5pb3N0YXQuZGV2X2FjdF90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQuZGV2X2FjdF90aW1lKTsKKwkJCXNlbnNlID0gdHNiLT50c2EuaW9zdGF0LnNlbnNlOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogdHNfZGRwYyAqLworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuZGRwYy5yYyAlZFxuIiwgdHNiLT50c2EuZGRwYy5yYyk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5kZHBjLnJjcTogICIpOworCQkJZm9yIChzbCA9IDA7IHNsIDwgMTY7IHNsKyspIHsKKwkJCQlmb3IgKHNjdCA9IDA7IHNjdCA8IDg7IHNjdCsrKSB7CisJCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgJTAyeCIsCisJCQkJCQkgICAgICAgdHNiLT50c2EuZGRwYy5yY3Fbc2xdKTsKKwkJCQl9CisJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisJCQl9CisJCQlzZW5zZSA9IHRzYi0+dHNhLmRkcGMuc2Vuc2U7CisJCQlicmVhazsKKwkJY2FzZSAzOiAvKiB0c2FfaW50cmcgKi8KKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkgICAgICAiIHRzYi0+dHNhLmludHJnLjogbm90IHN1cHBvcnRldCB5ZXQgXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNlbnNlKSB7CisJCQlmb3IgKHNsID0gMDsgc2wgPCA0OyBzbCsrKSB7CisJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCQkJICAgICAgIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkJICAgICAgICIgU2Vuc2UoaGV4KSAlMmQtJTJkOiIsCisJCQkJCSAgICAgICAoOCAqIHNsKSwgKCg4ICogc2wpICsgNykpOworCQkJCWZvciAoc2N0ID0gMDsgc2N0IDwgODsgc2N0KyspIHsKKwkJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiAlMDJ4IiwKKwkJCQkJCSAgICAgICBzZW5zZVs4ICogc2wgKyBzY3RdKTsKKwkJCQl9CisJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisJCQl9CisKKwkJCWlmIChzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSB7CisJCQkJLyogMjQgQnl0ZSBTZW5zZSBEYXRhICovCisJCQkJc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJCSIgMjQgQnl0ZTogJXggTVNHICV4LCAiCisJCQkJCSIlcyBNU0diIHRvIFNZU09QXG4iLAorCQkJCQlzZW5zZVs3XSA+PiA0LCBzZW5zZVs3XSAmIDB4MGYsCisJCQkJCXNlbnNlWzFdICYgMHgxMCA/ICIiIDogIm5vIik7CisJCQl9IGVsc2UgeworCQkJCS8qIDMyIEJ5dGUgU2Vuc2UgRGF0YSAqLworCQkJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCQkiIDMyIEJ5dGU6IEZvcm1hdDogJXggIgorCQkJCQkiRXhjZXB0aW9uIGNsYXNzICV4XG4iLAorCQkJCQlzZW5zZVs2XSAmIDB4MGYsIHNlbnNlWzIyXSA+PiA0KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCSIgU09SUlkgLSBOTyBWQUxJRCBTRU5TRSBBVkFJTEFCTEVcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkiIFNPUlJZIC0gTk8gVFNCIERBVEEgQVZBSUxBQkxFXG4iKTsKKwl9CisJcHJpbnRrKCIlcyIsIHBhZ2UpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorCQkJCSBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpyZXEsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwlpZiAocmVxICYmIHNjc3dfaXNfdG0oJnJlcS0+aXJiLnNjc3cpKQorCQlkYXNkX2Vja2RfZHVtcF9zZW5zZV90Y3coZGV2aWNlLCByZXEsIGlyYik7CisJZWxzZQorCQlkYXNkX2Vja2RfZHVtcF9zZW5zZV9jY3coZGV2aWNlLCByZXEsIGlyYik7Cit9CisKKwogLyoKICAqIG1heF9ibG9ja3MgaXMgZGVwZW5kZW50IG9uIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSB0aGF0IGlzIGF2YWlsYWJsZQogICogaW4gdGhlIHN0YXRpYyBpbyBidWZmZXIgZm9yIGVhY2ggZGV2aWNlLiBDdXJyZW50bHkgZWFjaCBkZXZpY2UgaGFzCkBAIC0yMzc1LDYgKzMyNTcsNyBAQAogCS5idWlsZF9jcCA9IGRhc2RfZWNrZF9idWlsZF9hbGlhc19jcCwKIAkuZnJlZV9jcCA9IGRhc2RfZWNrZF9mcmVlX2FsaWFzX2NwLAogCS5kdW1wX3NlbnNlID0gZGFzZF9lY2tkX2R1bXBfc2Vuc2UsCisJLmR1bXBfc2Vuc2VfZGJmID0gZGFzZF9lY2tkX2R1bXBfc2Vuc2VfZGJmLAogCS5maWxsX2luZm8gPSBkYXNkX2Vja2RfZmlsbF9pbmZvLAogCS5pb2N0bCA9IGRhc2RfZWNrZF9pb2N0bCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKaW5kZXggMjQ3NmY4Ny4uYWQ0NWJjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaApAQCAtMzgsOCArMzgsMTEgQEAKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRUxFQVNFCQkgMHg5NAogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ0tEX01UCSAweDllCiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEX01UCSAweDlkCisjZGVmaW5lIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQQkgMHhBNQorI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQQkgMHhBNgogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFU0VSVkUJCSAweEI0CiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUEZYCQkgMHhFNworI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1BGWF9SRUFECQkgMHhFQQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JTQ0sJCSAweEY5CiAKIC8qCkBAIC00OCw2ICs1MSwxMSBAQAogI2RlZmluZSBQU0ZfT1JERVJfUFJTU0QgMHgxOAogI2RlZmluZSBQU0ZfT1JERVJfU1NDCTB4MUQKIAorLyoKKyAqIFNpemUgdGhhdCBpcyByZXBvcnRldCBmb3IgbGFyZ2Ugdm9sdW1lcyBpbiB0aGUgb2xkIDE2LWJpdCBub19jeWwgZmllbGQKKyAqLworI2RlZmluZSBMVl9DT01QQVRfQ1lMIDB4RkZGRQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNFQ1RJT046IFR5cGUgRGVmaW5pdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE4LDcgKzEyNiw5IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIGVwX3N5c190aW1lOyAvKiBFeHQgUGFyYW1ldGVyIC0gU3lzdGVtIFRpbWUgU3RhbXAgKi8KIAlfX3U4IGVwX2Zvcm1hdDsgICAgICAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBmb3JtYXQgYnl0ZSAgICAgICAqLwogCV9fdTggZXBfcHJpbzsgICAgICAgICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIHByaW9yaXR5IEkvTyBieXRlICovCi0JX191OCBlcF9yZXNlcnZlZFs2XTsgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgUmVzZXJ2ZWQgICAgICAgICAgKi8KKwlfX3U4IGVwX3Jlc2VydmVkMTsgICAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBSZXNlcnZlZAkgICAgICAgKi8KKwlfX3U4IGVwX3JlY19wZXJfdHJhY2s7IC8qIE51bWJlciBvZiByZWNvcmRzIG9uIGEgdHJhY2sJICAgICAgICovCisJX191OCBlcF9yZXNlcnZlZFs0XTsgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgUmVzZXJ2ZWQJICAgICAgICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IExPX2Vja2RfZGF0YSB7CkBAIC0xMzksMTEgKzE0OSwzNyBAQAogCV9fdTE2IGxlbmd0aDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgTFJFX2Vja2RfZGF0YSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBvcmllbnRhdGlvbjoyOworCQl1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjo2OworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIG9wZXJhdGlvbjsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGxlbmd0aF92YWxpZDoxOworCQl1bnNpZ25lZCBjaGFyIGxlbmd0aF9zY29wZToxOworCQl1bnNpZ25lZCBjaGFyIGltYmVkZGVkX2Njd192YWxpZDoxOworCQl1bnNpZ25lZCBjaGFyIGNoZWNrX2J5dGVzOjI7CisJCXVuc2lnbmVkIGNoYXIgaW1iZWRkZWRfY291bnRfdmFsaWQ6MTsKKwkJdW5zaWduZWQgY2hhciByZXNlcnZlZDoxOworCQl1bnNpZ25lZCBjaGFyIHJlYWRfY291bnRfc3VmZml4OjE7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXV4aWxpYXJ5OworCV9fdTggaW1iZWRkZWRfY2N3OworCV9fdTggY291bnQ7CisJc3RydWN0IGNoX3Qgc2Vla19hZGRyOworCXN0cnVjdCBjaHJfdCBzZWFyY2hfYXJnOworCV9fdTggc2VjdG9yOworCV9fdTE2IGxlbmd0aDsKKwlfX3U4IGltYmVkZGVkX2NvdW50OworCV9fdTggZXh0ZW5kZWRfb3BlcmF0aW9uOworCV9fdTE2IGV4dGVuZGVkX3BhcmFtZXRlcl9sZW5ndGg7CisJX191OCBleHRlbmRlZF9wYXJhbWV0ZXJbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogUHJlZml4IGRhdGEgZm9yIGZvcm1hdCAweDAwIGFuZCAweDAxICovCiBzdHJ1Y3QgUEZYX2Vja2RfZGF0YSB7CiAJdW5zaWduZWQgY2hhciBmb3JtYXQ7CiAJc3RydWN0IHsKLQkJdW5zaWduZWQgY2hhciBkZWZpbmVfZXh0ZW5kOjE7CisJCXVuc2lnbmVkIGNoYXIgZGVmaW5lX2V4dGVudDoxOwogCQl1bnNpZ25lZCBjaGFyIHRpbWVfc3RhbXA6MTsKIAkJdW5zaWduZWQgY2hhciB2ZXJpZnlfYmFzZToxOwogCQl1bnNpZ25lZCBjaGFyIGh5cGVyX3BhdjoxOwpAQCAtMTUzLDkgKzE4OSw4IEBACiAJX191OCBhdXg7CiAJX191OCBiYXNlX2xzczsKIAlfX3U4IHJlc2VydmVkWzddOwotCXN0cnVjdCBERV9lY2tkX2RhdGEgZGVmaW5lX2V4dGVuZDsKLQlzdHJ1Y3QgTE9fZWNrZF9kYXRhIGxvY2F0ZV9yZWNvcmQ7Ci0JX191OCBMT19leHRlbmRlZF9kYXRhWzRdOworCXN0cnVjdCBERV9lY2tkX2RhdGEgZGVmaW5lX2V4dGVudDsKKwlzdHJ1Y3QgTFJFX2Vja2RfZGF0YSBsb2NhdGVfcmVjb3JkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBkYXNkX2Vja2RfY2hhcmFjdGVyaXN0aWNzIHsKQEAgLTIyOCw3ICsyNjMsOCBAQAogCV9fdTggZmFjdG9yNzsKIAlfX3U4IGZhY3Rvcjg7CiAJX191OCByZXNlcnZlZDJbM107Ci0JX191OCByZXNlcnZlZDNbMTBdOworCV9fdTggcmVzZXJ2ZWQzWzZdOworCV9fdTMyIGxvbmdfbm9fY3lsOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIGVsZW1lbnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgKi8KQEAgLTQwNiw2ICs0NDIsNyBAQAogCWludCB1c2VzX2NkbDsKIAlzdHJ1Y3QgYXR0cmliX2RhdGFfdCBhdHRyaWI7CS8qIGUuZy4gY2FjaGUgb3BlcmF0aW9ucyAqLwogCXN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMgZmVhdHVyZXM7CisJdTMyIHJlYWxfY3lsOwogCiAJLyogYWxpYXMgbWFuYWdlbW5ldCAqLwogCXN0cnVjdCBkYXNkX3VpZCB1aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCmluZGV4IGY4ZTA1Y2UuLmMyNGM4YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCkBAIC02LDYgKzYsOCBAQAogICogIEF1dGhvcihzKTogU3RlZmFuIFdlaW5odWJlciA8d2VpbkBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5NywxMSArMjk5LDEyIEBACiAJc3RydWN0IGRhc2RfZWVyX2hlYWRlciBoZWFkZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWVyYnVmZmVyICplZXJiOworCWNoYXIgKnNlbnNlOwogCiAJLyogZ28gdGhyb3VnaCBjcXIgY2hhaW4gYW5kIGNvdW50IHRoZSB2YWxpZCBzZW5zZSBkYXRhIHNldHMgKi8KIAlkYXRhX3NpemUgPSAwOwogCWZvciAodGVtcF9jcXIgPSBjcXI7IHRlbXBfY3FyOyB0ZW1wX2NxciA9IHRlbXBfY3FyLT5yZWZlcnMpCi0JCWlmICh0ZW1wX2Nxci0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQorCQlpZiAoZGFzZF9nZXRfc2Vuc2UoJnRlbXBfY3FyLT5pcmIpKQogCQkJZGF0YV9zaXplICs9IDMyOwogCiAJaGVhZGVyLnRvdGFsX3NpemUgPSBzaXplb2YoaGVhZGVyKSArIGRhdGFfc2l6ZSArIDQ7IC8qICJFT1IiICovCkBAIC0zMTYsOSArMzE5LDExIEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlZXJiLCAmYnVmZmVybGlzdCwgbGlzdCkgewogCQlkYXNkX2Vlcl9zdGFydF9yZWNvcmQoZWVyYiwgaGVhZGVyLnRvdGFsX3NpemUpOwogCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgKGNoYXIgKikgJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOwotCQlmb3IgKHRlbXBfY3FyID0gY3FyOyB0ZW1wX2NxcjsgdGVtcF9jcXIgPSB0ZW1wX2Nxci0+cmVmZXJzKQotCQkJaWYgKHRlbXBfY3FyLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMpCi0JCQkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIGNxci0+aXJiLmVjdywgMzIpOworCQlmb3IgKHRlbXBfY3FyID0gY3FyOyB0ZW1wX2NxcjsgdGVtcF9jcXIgPSB0ZW1wX2Nxci0+cmVmZXJzKSB7CisJCQlzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKCZ0ZW1wX2Nxci0+aXJiKTsKKwkJCWlmIChzZW5zZSkKKwkJCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgc2Vuc2UsIDMyKTsKKwkJfQogCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgIkVPUiIsIDQpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJsb2NrLCBmbGFncyk7CkBAIC00NTEsNiArNDU2LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJaWYgKGRldmljZS0+ZWVyX2NxcikKIAkJcmV0dXJuIDA7CkBAIC00NjgsMTAgKzQ3NCwxMSBAQAogCWNxci0+ZXhwaXJlcyA9IDEwICogSFo7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKIAotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU05TUzsKLQljcXItPmNwYWRkci0+Y291bnQgPSBTTlNTX0RBVEFfU0laRTsKLQljcXItPmNwYWRkci0+ZmxhZ3MgPSAwOwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NOU1M7CisJY2N3LT5jb3VudCA9IFNOU1NfREFUQV9TSVpFOworCWNjdy0+ZmxhZ3MgPSAwOworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAogCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKIAljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKQEAgLTUzNCw3ICs1NDEsNyBAQAogCWlmIChlZXJiLT5idWZmZXJfcGFnZV9jb3VudCA8IDEgfHwKIAkgICAgZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPiBJTlRfTUFYIC8gUEFHRV9TSVpFKSB7CiAJCWtmcmVlKGVlcmIpOwotCQlNRVNTQUdFKEtFUk5fV0FSTklORywgImNhbid0IG9wZW4gZGV2aWNlIHNpbmNlIG1vZHVsZSAiCisJCURCRl9FVkVOVChEQkZfV0FSTklORywgImNhbid0IG9wZW4gZGV2aWNlIHNpbmNlIG1vZHVsZSAiCiAJCQkicGFyYW1ldGVyIGVlcl9wYWdlcyBpcyBzbWFsbGVyIHRoYW4gMSBvciIKIAkJCSIgYmlnZ2VyIHRoYW4gJWQiLCAoaW50KShJTlRfTUFYIC8gUEFHRV9TSVpFKSk7CiAJCXVubG9ja19rZXJuZWwoKTsKQEAgLTY4Nyw3ICs2OTQsNyBAQAogCWlmIChyYykgewogCQlrZnJlZShkYXNkX2Vlcl9kZXYpOwogCQlkYXNkX2Vlcl9kZXYgPSBOVUxMOwotCQlNRVNTQUdFKEtFUk5fRVJSLCAiJXMiLCAiZGFzZF9lZXJfaW5pdCBjb3VsZCBub3QgIgorCQlEQkZfRVZFTlQoREJGX0VSUiwgIiVzIiwgImRhc2RfZWVyX2luaXQgY291bGQgbm90ICIKIAkJICAgICAgICJyZWdpc3RlciBtaXNjIGRldmljZSIpOwogCQlyZXR1cm4gcmM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwppbmRleCA4ZjEwMDAwLi5kOTcwY2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwpAQCAtOSw2ICs5LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCkBAIC05MSwxNCArOTMsMTQgQEAKIAogICAgICAgICAvKiBqdXN0IHJldHJ5IC0gdGhlcmUgaXMgbm90aGluZyB0byBzYXZlIC4uLiBJIGdvdCBubyBzZW5zZSBkYXRhLi4uLiAqLwogICAgICAgICBpZiAoY3FyLT5yZXRyaWVzID4gMCkgewotCQlERVZfTUVTU0FHRSAoS0VSTl9ERUJVRywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdCBFUlAgY2FsbGVkICglaSByZXRyaWVzIGxlZnQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5yZXRyaWVzKTsKIAkJY3FyLT5scG0gICAgPSBMUE1fQU5ZUEFUSDsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVWX01FU1NBR0UgKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICAiZGVmYXVsdCBFUlAgY2FsbGVkIChOTyByZXRyeSBsZWZ0KSIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJkZWZhdWx0IEVSUCBoYXMgcnVuIG91dCBvZiByZXRyaWVzIGFuZCBmYWlsZWRcbiIpOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAkJY3FyLT5zdG9wY2xrID0gZ2V0X2Nsb2NrKCk7CiAgICAgICAgIH0KQEAgLTE2Miw4ICsxNjQsMjEgQEAKIAkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlKGRldmljZSwgY3FyLCBpcmIpOwogfQogCit2b2lkCitkYXNkX2xvZ19zZW5zZV9kYmYoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLCBzdHJ1Y3QgaXJiICppcmIpCit7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisKKwlkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OworCS8qIGR1bXAgc2Vuc2UgZGF0YSB0byBzMzkwIGRlYnVnZmVhdHVyZSovCisJaWYgKGRldmljZS0+ZGlzY2lwbGluZSAmJiBkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKQorCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKGRldmljZSwgY3FyLCBpcmIsICJsb2ciKTsKK30KK0VYUE9SVF9TWU1CT0woZGFzZF9sb2dfc2Vuc2VfZGJmKTsKKwogRVhQT1JUX1NZTUJPTChkYXNkX2RlZmF1bHRfZXJwX2FjdGlvbik7CiBFWFBPUlRfU1lNQk9MKGRhc2RfZGVmYXVsdF9lcnBfcG9zdGFjdGlvbik7CiBFWFBPUlRfU1lNQk9MKGRhc2RfYWxsb2NfZXJwX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChkYXNkX2ZyZWVfZXJwX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChkYXNkX2xvZ19zZW5zZSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKaW5kZXggZjFkMTc2MC4uYTNlYjZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKQEAgLTYsNiArNiw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KQEAgLTEyOCwxNyArMTMwLDE4IEBACiAJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSksCiAJCQkJICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlICIKLQkJCQkgICAgImRhdGEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkFsbG9jYXRpbmcgbWVtb3J5IGZvciBwcml2YXRlIERBU0QgIgorCQkJCSAiZGF0YSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZGV2aWNlLT5wcml2YXRlID0gKHZvaWQgKikgcHJpdmF0ZTsKIAl9CiAJYmxvY2sgPSBkYXNkX2FsbG9jX2Jsb2NrKCk7CiAJaWYgKElTX0VSUihibG9jaykpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkIGJsb2NrIHN0cnVjdHVyZSIpOworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCBibG9jayAiCisJCQkgICJzdHJ1Y3R1cmUgZm9yIGRldmljZTogJXMiLAorCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZGV2aWNlLT5wcml2YXRlID0gTlVMTDsKIAkJa2ZyZWUocHJpdmF0ZSk7CiAJCXJldHVybiBQVFJfRVJSKGJsb2NrKTsKQEAgLTE1MCw5ICsxNTMsOSBAQAogCXJkY19kYXRhID0gKHZvaWQgKikgJihwcml2YXRlLT5yZGNfZGF0YSk7CiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCAiRkJBICIsICZyZGNfZGF0YSwgMzIpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKLQkJCSAgICAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkIGVycm9yICVkIiwKLQkJCSAgICByYyk7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyByZXR1cm5lZCAiCisJCQkgICJlcnJvciAlZCBmb3IgZGV2aWNlOiAlcyIsCisJCQkgIHJjLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZGV2aWNlLT5ibG9jayA9IE5VTEw7CiAJCWRhc2RfZnJlZV9ibG9jayhibG9jayk7CiAJCWRldmljZS0+cHJpdmF0ZSA9IE5VTEw7CkBAIC0xNjAsMTUgKzE2MywxNiBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiJTA0WC8lMDJYKENVOiUwNFgvJTAyWCkgJWRNQiBhdCglZCBCL2JsaykiLAotCQkgICAgY2Rldi0+aWQuZGV2X3R5cGUsCi0JCSAgICBjZGV2LT5pZC5kZXZfbW9kZWwsCi0JCSAgICBjZGV2LT5pZC5jdV90eXBlLAotCQkgICAgY2Rldi0+aWQuY3VfbW9kZWwsCi0JCSAgICAoKHByaXZhdGUtPnJkY19kYXRhLmJsa19iZHNhICoKLQkJICAgICAgKHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplID4+IDkpKSA+PiAxMSksCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkgIk5ldyBGQkEgREFTRCAlMDRYLyUwMlggKENVICUwNFgvJTAyWCkgd2l0aCAlZCBNQiAiCisJCSAiYW5kICVkIEIvYmxrXG4iLAorCQkgY2Rldi0+aWQuZGV2X3R5cGUsCisJCSBjZGV2LT5pZC5kZXZfbW9kZWwsCisJCSBjZGV2LT5pZC5jdV90eXBlLAorCQkgY2Rldi0+aWQuY3VfbW9kZWwsCisJCSAoKHByaXZhdGUtPnJkY19kYXRhLmJsa19iZHNhICoKKwkJICAgKHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplID4+IDkpKSA+PiAxMSksCisJCSBwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MCw3ICsxODQsNyBAQAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUgKikgYmxvY2stPmJhc2UtPnByaXZhdGU7CiAJcmMgPSBkYXNkX2NoZWNrX2Jsb2Nrc2l6ZShwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CiAJaWYgKHJjKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgYmxvY2stPmJhc2UsICJ1bmtub3duIGJsb2Nrc2l6ZSAlZCIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGJsb2NrLT5iYXNlLCAidW5rbm93biBibG9ja3NpemUgJWQiLAogCQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTIxNSw3ICsyMTksNyBAQAogCWlmIChjcXItPmZ1bmN0aW9uID09IGRhc2RfZGVmYXVsdF9lcnBfYWN0aW9uKQogCQlyZXR1cm4gZGFzZF9kZWZhdWx0X2VycF9wb3N0YWN0aW9uOwogCi0JREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBjcXItPnN0YXJ0ZGV2LCAidW5rbm93biBFUlAgYWN0aW9uICVwIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBjcXItPnN0YXJ0ZGV2LCAidW5rbm93biBFUlAgYWN0aW9uICVwIiwKIAkJICAgIGNxci0+ZnVuY3Rpb24pOwogCXJldHVybiBOVUxMOwogfQpAQCAtMjMzLDkgKzIzNyw5IEBACiAJfQogCiAJLyogY2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgInVuc29saWNpdGVkIGludGVycnVwdCByZWNlaXZlZCIpOwotCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZShkZXZpY2UsIE5VTEwsIGlyYik7CisJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYiwgInVuc29saWNpdGVkIik7CiAJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAlyZXR1cm47CiB9OwpAQCAtNDM3LDYgKzQ0MSwyNSBAQAogfQogCiBzdGF0aWMgdm9pZAorZGFzZF9mYmFfZHVtcF9zZW5zZV9kYmYoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwKKwkJCSBzdHJ1Y3QgaXJiICppcmIsIGNoYXIgKnJlYXNvbikKK3sKKwlpbnQgc2w7CisJaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKKwkJZm9yIChzbCA9IDA7IHNsIDwgNDsgc2wrKykgeworCQkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwKKwkJCQkgICAgICAiJXM6ICUwOHggJTA4eCAlMDh4ICUwOHgiLAorCQkJCSAgICAgIHJlYXNvbiwgaXJiLT5lY3dbOCAqIDBdLCBpcmItPmVjd1s4ICogMV0sCisJCQkJICAgICAgaXJiLT5lY3dbOCAqIDJdLCBpcmItPmVjd1s4ICogM10pOworCQl9CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCiBkYXNkX2ZiYV9kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICogcmVxLAogCQkgICAgc3RydWN0IGlyYiAqaXJiKQogewpAQCAtNDQ2LDcgKzQ2OSw3IEBACiAKIAlwYWdlID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmIChwYWdlID09IE5VTEwpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiAlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YSIpOwogCQlyZXR1cm47CiAJfQpAQCAtNDc2LDggKzQ5OSw3IEBACiAJICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCiAJCQkgICAgICAgIiBTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CiAJfQotCU1FU1NBR0VfTE9HKEtFUk5fRVJSLCAiJXMiLAotCQkgICAgcGFnZSArIHNpemVvZihLRVJOX0VSUiBQUklOVEtfSEVBREVSKSk7CisJcHJpbnRrKEtFUk5fRVJSICIlcyIsIHBhZ2UpOwogCiAJLyogZHVtcCB0aGUgQ2hhbm5lbCBQcm9ncmFtICovCiAJLyogcHJpbnQgZmlyc3QgQ0NXcyAobWF4aW11bSA4KSAqLwpAQCAtNDk4LDggKzUyMCw3IEBACiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwogCQlhY3QrKzsKIAl9Ci0JTUVTU0FHRV9MT0coS0VSTl9FUlIsICIlcyIsCi0JCSAgICBwYWdlICsgc2l6ZW9mKEtFUk5fRVJSIFBSSU5US19IRUFERVIpKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzIiwgcGFnZSk7CiAKIAogCS8qIHByaW50IGZhaWxpbmcgQ0NXIGFyZWEgKi8KQEAgLTU0MCw4ICs1NjEsNyBAQAogCQlhY3QrKzsKIAl9CiAJaWYgKGxlbiA+IDApCi0JCU1FU1NBR0VfTE9HKEtFUk5fRVJSLCAiJXMiLAotCQkJICAgIHBhZ2UgKyBzaXplb2YoS0VSTl9FUlIgUFJJTlRLX0hFQURFUikpOworCQlwcmludGsoS0VSTl9FUlIgIiVzIiwgcGFnZSk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKIH0KIApAQCAtNTc2LDYgKzU5Niw3IEBACiAJLmJ1aWxkX2NwID0gZGFzZF9mYmFfYnVpbGRfY3AsCiAJLmZyZWVfY3AgPSBkYXNkX2ZiYV9mcmVlX2NwLAogCS5kdW1wX3NlbnNlID0gZGFzZF9mYmFfZHVtcF9zZW5zZSwKKwkuZHVtcF9zZW5zZV9kYmYgPSBkYXNkX2ZiYV9kdW1wX3NlbnNlX2RiZiwKIAkuZmlsbF9pbmZvID0gZGFzZF9mYmFfZmlsbF9pbmZvLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggZTk5ZDU2Ni4uZDMxOTgzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC0xMSw2ICsxMSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CkBAIC0xNjMsOSArMTY1LDggQEAKIAkvKiBSZWdpc3RlciB0byBzdGF0aWMgZGFzZCBtYWpvciA5NCAqLwogCXJjID0gcmVnaXN0ZXJfYmxrZGV2KERBU0RfTUFKT1IsICJkYXNkIik7CiAJaWYgKHJjICE9IDApIHsKLQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCQkiQ291bGRuJ3QgcmVnaXN0ZXIgc3VjY2Vzc2Z1bGx5IHRvICIKLQkJCSJtYWpvciBubyAlZCIsIERBU0RfTUFKT1IpOworCQlwcl93YXJuaW5nKCJSZWdpc3RlcmluZyB0aGUgZGV2aWNlIGRyaXZlciB3aXRoIG1ham9yIG51bWJlciAiCisJCQkgICAiJWQgZmFpbGVkXG4iLCBEQVNEX01BSk9SKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggNGEzOTA4NC4uYzFlNDg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTExMiw2ICsxMTIsOSBAQAogCQkJCWRfZGF0YSk7IFwKIH0gd2hpbGUoMCkKIAorLyogbGltaXQgc2l6ZSBmb3IgYW4gZXJyb3JzdHJpbmcgKi8KKyNkZWZpbmUgRVJST1JMRU5HVEggMzAKKwogLyogZGVmaW5pdGlvbiBvZiBkYmYgZGVidWcgbGV2ZWxzICovCiAjZGVmaW5lCURCRl9FTUVSRwkwCS8qIHN5c3RlbSBpcyB1bnVzYWJsZQkJCSovCiAjZGVmaW5lCURCRl9BTEVSVAkxCS8qIGFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5CSovCkBAIC0xNTcsNyArMTYwLDggQEAKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CS8qIHRoZSBvcmlnaW5hdGluZyBibG9jayBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKm1lbWRldjsJLyogdGhlIGRldmljZSB1c2VkIHRvIGFsbG9jYXRlIHRoaXMgKi8KIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2OwkvKiBkZXZpY2UgdGhlIHJlcXVlc3QgaXMgc3RhcnRlZCBvbiAqLwotCXN0cnVjdCBjY3cxICpjcGFkZHI7CQkvKiBhZGRyZXNzIG9mIGNoYW5uZWwgcHJvZ3JhbSAqLworCXZvaWQgKmNwYWRkcjsJCQkvKiBhZGRyZXNzIG9mIGNjdyBvciB0Y3cgKi8KKwl1bnNpZ25lZCBjaGFyIGNwbW9kZTsJCS8qIDAgPSBjbWQgbW9kZSwgMSA9IGl0Y3cgKi8KIAljaGFyIHN0YXR1czsJCQkvKiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0ICovCiAJc2hvcnQgcmV0cmllczsJCQkvKiBBIHJldHJ5IGNvdW50ZXIgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOyAgICAgICAgCS8qIGZsYWdzIG9mIHRoaXMgcmVxdWVzdCAqLwpAQCAtMjgwLDYgKzI4NCw4IEBACiAJZGFzZF9lcnBfZm5fdCgqZXJwX3Bvc3RhY3Rpb24pIChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopOwogCXZvaWQgKCpkdW1wX3NlbnNlKSAoc3RydWN0IGRhc2RfZGV2aWNlICosIHN0cnVjdCBkYXNkX2Njd19yZXEgKiwKIAkJCSAgICBzdHJ1Y3QgaXJiICopOworCXZvaWQgKCpkdW1wX3NlbnNlX2RiZikgKHN0cnVjdCBkYXNkX2RldmljZSAqLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICosCisJCQkgICAgc3RydWN0IGlyYiAqLCBjaGFyICopOwogCiAJdm9pZCAoKmhhbmRsZV91bnNvbGljaXRlZF9pbnRlcnJ1cHQpIChzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwKIAkJCQkJICAgICAgc3RydWN0IGlyYiAqKTsKQEAgLTM3OCw3ICszODQsNyBAQAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJYXRvbWljX3Qgb3Blbl9jb3VudDsKIAotCXVuc2lnbmVkIGxvbmcgYmxvY2tzOwkgICAvKiBzaXplIG9mIHZvbHVtZSBpbiBibG9ja3MgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2tzOyAvKiBzaXplIG9mIHZvbHVtZSBpbiBibG9ja3MgKi8KIAl1bnNpZ25lZCBpbnQgYnBfYmxvY2s7CSAgIC8qIGJ5dGVzIHBlciBibG9jayAqLwogCXVuc2lnbmVkIGludCBzMmJfc2hpZnQ7CSAgIC8qIGxvZzIgKGJwX2Jsb2NrLzUxMikgKi8KIApAQCAtNTczLDEyICs1NzksMTQgQEAKIHZvaWQgZGFzZF9nZW5lcmljX2hhbmRsZV9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRhc2RfZGV2aWNlICopOwogCiBpbnQgZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKHN0cnVjdCBkYXNkX2RldmljZSAqLCBjaGFyICosIHZvaWQgKiosIGludCk7CitjaGFyICpkYXNkX2dldF9zZW5zZShzdHJ1Y3QgaXJiICopOwogCiAvKiBleHRlcm5hbHMgaW4gZGFzZF9kZXZtYXAuYyAqLwogZXh0ZXJuIGludCBkYXNkX21heF9kZXZpbmRleDsKIGV4dGVybiBpbnQgZGFzZF9wcm9iZW9ubHk7CiBleHRlcm4gaW50IGRhc2RfYXV0b2RldGVjdDsKIGV4dGVybiBpbnQgZGFzZF9ub3BhdjsKK2V4dGVybiBpbnQgZGFzZF9ub2ZjeDsKIAogaW50IGRhc2RfZGV2bWFwX2luaXQodm9pZCk7CiB2b2lkIGRhc2RfZGV2bWFwX2V4aXQodm9pZCk7CkBAIC02MjMsNiArNjMxLDcgQEAKIAkJCQkJICAgIHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIHZvaWQgZGFzZF9mcmVlX2VycF9yZXF1ZXN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKiwgc3RydWN0IGRhc2RfZGV2aWNlICopOwogdm9pZCBkYXNkX2xvZ19zZW5zZShzdHJ1Y3QgZGFzZF9jY3dfcmVxICosIHN0cnVjdCBpcmIgKik7Cit2b2lkIGRhc2RfbG9nX3NlbnNlX2RiZihzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsIHN0cnVjdCBpcmIgKmlyYik7CiAKIC8qIGV4dGVybmFscyBpbiBkYXNkXzM5OTBfZXJwLmMgKi8KIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfMzk5MF9lcnBfYWN0aW9uKHN0cnVjdCBkYXNkX2Njd19yZXEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwppbmRleCBiODJkODE2Li40Y2UzZjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKQEAgLTksNiArOSw5IEBACiAgKgogICogaS9vIGNvbnRyb2xzIGZvciB0aGUgZGFzZCBkcml2ZXIuCiAgKi8KKworI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTk0LDcgKzk3LDggQEAKIAlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGJhc2UsICIlcyIsICJRdWllc2NlIElPIG9uIGRldmljZSIpOworCWRldl9pbmZvKCZiYXNlLT5jZGV2LT5kZXYsICJUaGUgREFTRCBoYXMgYmVlbiBwdXQgaW4gdGhlIHF1aWVzY2UgIgorCQkgInN0YXRlXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKIAliYXNlLT5zdG9wcGVkIHw9IERBU0RfU1RPUFBFRF9RVUlFU0NFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xMDMsNyArMTA3LDcgQEAKIAogCiAvKgotICogUXVpZXNjZSBkZXZpY2UuCisgKiBSZXN1bWUgZGV2aWNlLgogICovCiBzdGF0aWMgaW50IGRhc2RfaW9jdGxfcmVzdW1lKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaykKIHsKQEAgLTExNCw3ICsxMTgsOCBAQAogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgYmFzZSwgIiVzIiwgInJlc3VtZSBJTyBvbiBkZXZpY2UiKTsKKwlkZXZfaW5mbygmYmFzZS0+Y2Rldi0+ZGV2LCAiSS9PIG9wZXJhdGlvbnMgaGF2ZSBiZWVuIHJlc3VtZWQgIgorCQkgIm9uIHRoZSBEQVNEXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKIAliYXNlLT5zdG9wcGVkICY9IH5EQVNEX1NUT1BQRURfUVVJRVNDRTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwpAQCAtMTQwLDEzICsxNDUsMTMgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmIChiYXNlLT5zdGF0ZSAhPSBEQVNEX1NUQVRFX0JBU0lDKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgYmFzZSwgIiVzIiwKLQkJCSAgICAiZGFzZF9mb3JtYXQ6IGRldmljZSBpcyBub3QgZGlzYWJsZWQhICIpOworCQlkZXZfd2FybigmYmFzZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgREFTRCBjYW5ub3QgYmUgZm9ybWF0dGVkIHdoaWxlIGl0IGlzIGVuYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCURCRl9ERVZfRVZFTlQoREJGX05PVElDRSwgYmFzZSwKLQkJICAgICAgImZvcm1hdHRpbmcgdW5pdHMgJWQgdG8gJWQgKCVkIEIgYmxvY2tzKSBmbGFncyAlZCIsCisJCSAgICAgICJmb3JtYXR0aW5nIHVuaXRzICV1IHRvICV1ICgldSBCIGJsb2NrcykgZmxhZ3MgJXUiLAogCQkgICAgICBmZGF0YS0+c3RhcnRfdW5pdCwKIAkJICAgICAgZmRhdGEtPnN0b3BfdW5pdCwgZmRhdGEtPmJsa3NpemUsIGZkYXRhLT5pbnRlbnNpdHkpOwogCkBAIC0xNjksMTAgKzE3NCw5IEBACiAJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIGNxci0+bWVtZGV2KTsKIAkJaWYgKHJjKSB7CiAJCQlpZiAocmMgIT0gLUVSRVNUQVJUU1lTKQotCQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBiYXNlLAotCQkJCQkgICAgIiBGb3JtYXR0aW5nIG9mIHVuaXQgJWQgZmFpbGVkICIKLQkJCQkJICAgICJ3aXRoIHJjID0gJWQiLAotCQkJCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQsIHJjKTsKKwkJCQlkZXZfZXJyKCZiYXNlLT5jZGV2LT5kZXYsCisJCQkJCSJGb3JtYXR0aW5nIHVuaXQgJWQgZmFpbGVkIHdpdGggIgorCQkJCQkicmM9JWRcbiIsIGZkYXRhLT5zdGFydF91bml0LCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAkJZmRhdGEtPnN0YXJ0X3VuaXQrKzsKQEAgLTE5OSw4ICsyMDMsOSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZmRhdGEsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgZm9ybWF0X2RhdGFfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGJsb2NrLT5iYXNlLCAiJXMiLAotCQkJICAgICJDYW5ub3QgbG93LWxldmVsIGZvcm1hdCBhIHBhcnRpdGlvbiIpOworCQlkZXZfd2FybigmYmxvY2stPmJhc2UtPmNkZXYtPmRldiwKKwkJCSAiVGhlIHNwZWNpZmllZCBEQVNEIGlzIGEgcGFydGl0aW9uIGFuZCBjYW5ub3QgYmUgIgorCQkJICJmb3JtYXR0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIGRhc2RfZm9ybWF0KGJsb2NrLCAmZmRhdGEpOwpAQCAtMzY1LDkgKzM3MCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50Ci1kYXNkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKLQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQKK2Rhc2RfZG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTQyMCwzICs0MjUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQorCitpbnQgZGFzZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByYzsKKworCWxvY2tfa2VybmVsKCk7CisJcmMgPSBkYXNkX2RvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IGJmNmZkMzQuLjIwODBiYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTExLDYgKzExLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0xMTIsNyArMTE0LDcgQEAKIAkJCXNlcV9wcmludGYobSwgIm4vZgkgIik7CiAJCWVsc2UKIAkJCXNlcV9wcmludGYobSwKLQkJCQkgICAiYXQgYmxvY2tzaXplOiAlZCwgJWxkIGJsb2NrcywgJWxkIE1CIiwKKwkJCQkgICAiYXQgYmxvY2tzaXplOiAlZCwgJWxsZCBibG9ja3MsICVsbGQgTUIiLAogCQkJCSAgIGJsb2NrLT5icF9ibG9jaywgYmxvY2stPmJsb2NrcywKIAkJCQkgICAoKGJsb2NrLT5icF9ibG9jayA+PiA5KSAqCiAJCQkJICAgIGJsb2NrLT5ibG9ja3MpID4+IDExKTsKQEAgLTI2Nyw3ICsyNjksNyBAQAogCWJ1ZmZlciA9IGRhc2RfZ2V0X3VzZXJfc3RyaW5nKHVzZXJfYnVmLCB1c2VyX2xlbik7CiAJaWYgKElTX0VSUihidWZmZXIpKQogCQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOwotCU1FU1NBR0VfTE9HKEtFUk5fSU5GTywgIi9wcm9jL2Rhc2Qvc3RhdGljdGljczogJyVzJyIsIGJ1ZmZlcik7CisJREJGX0VWRU5UKERCRl9ERUJVRywgIi9wcm9jL2Rhc2Qvc3RhdGljdGljczogJyVzJ1xuIiwgYnVmZmVyKTsKIAogCS8qIGNoZWNrIGZvciB2YWxpZCB2ZXJicyAqLwogCWZvciAoc3RyID0gYnVmZmVyOyBpc3NwYWNlKCpzdHIpOyBzdHIrKyk7CkBAIC0yNzcsMzMgKzI3OSwzMyBAQAogCQlpZiAoc3RyY21wKHN0ciwgIm9uIikgPT0gMCkgewogCQkJLyogc3dpdGNoIG9uIHN0YXRpc3RpY3MgcHJvZmlsaW5nICovCiAJCQlkYXNkX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT047Ci0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIlN0YXRpc3RpY3Mgc3dpdGNoZWQgb24iKTsKKwkJCXByX2luZm8oIlRoZSBzdGF0aXN0aWNzIGZlYXR1cmUgaGFzIGJlZW4gc3dpdGNoZWQgIgorCQkJCSJvblxuIik7CiAJCX0gZWxzZSBpZiAoc3RyY21wKHN0ciwgIm9mZiIpID09IDApIHsKIAkJCS8qIHN3aXRjaCBvZmYgYW5kIHJlc2V0IHN0YXRpc3RpY3MgcHJvZmlsaW5nICovCiAJCQltZW1zZXQoJmRhc2RfZ2xvYmFsX3Byb2ZpbGUsCiAJCQkgICAgICAgMCwgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCkpOwogCQkJZGFzZF9wcm9maWxlX2xldmVsID0gREFTRF9QUk9GSUxFX09GRjsKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiU3RhdGlzdGljcyBzd2l0Y2hlZCBvZmYiKTsKKwkJCXByX2luZm8oIlRoZSBzdGF0aXN0aWNzIGZlYXR1cmUgaGFzIGJlZW4gc3dpdGNoZWQgIgorCQkJCSJvZmZcbiIpOwogCQl9IGVsc2UKIAkJCWdvdG8gb3V0X2Vycm9yOwogCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJyZXNldCIsIDUpID09IDApIHsKIAkJLyogcmVzZXQgdGhlIHN0YXRpc3RpY3MgKi8KIAkJbWVtc2V0KCZkYXNkX2dsb2JhbF9wcm9maWxlLCAwLAogCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCkpOwotCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIlN0YXRpc3RpY3MgcmVzZXQiKTsKKwkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgaGF2ZSBiZWVuIHJlc2V0XG4iKTsKIAl9IGVsc2UKIAkJZ290byBvdXRfZXJyb3I7CiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gdXNlcl9sZW47CiBvdXRfZXJyb3I6Ci0JTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCSIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IG9ubHkgJ3NldCBvbicsICdzZXQgb2ZmJyAiCi0JCSJhbmQgJ3Jlc2V0JyBhcmUgc3VwcG9ydGVkIHZlcmJzIik7CisJcHJfd2FybmluZygiJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciAvcHJvYy9kYXNkL3N0YXRpc3RpY3NcbiIsCisJCXN0cik7CiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCi0JTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCSIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWwiKTsKKwlwcl93YXJuaW5nKCIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWxcbiIpOwogCXJldHVybiB1c2VyX2xlbjsKICNlbmRpZgkJCQkvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMKaW5kZXggMWZkOGYyMS4uNDM3N2U5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwpAQCAtMjgwLDggKzI4MCwxMSBAQAogCXJjID0gMDsKIAlmb3IgKG9mZnNldCA9IHNpemVvZihzdHJ1Y3Qgc2NjYl9oZWFkZXIpOyBvZmZzZXQgPCBzY2NiLT5sZW5ndGg7CiAJICAgICBvZmZzZXQgKz0gZXZidWYtPmxlbmd0aCkgewotCQkvKiBTZWFyY2ggZm9yIGV2ZW50IGhhbmRsZXIgKi8KIAkJZXZidWYgPSAoc3RydWN0IGV2YnVmX2hlYWRlciAqKSAoKGFkZHJfdCkgc2NjYiArIG9mZnNldCk7CisJCS8qIENoZWNrIGZvciBtYWxmb3JtZWQgaGFyZHdhcmUgcmVzcG9uc2UgKi8KKwkJaWYgKGV2YnVmLT5sZW5ndGggPT0gMCkKKwkJCWJyZWFrOworCQkvKiBTZWFyY2ggZm9yIGV2ZW50IGhhbmRsZXIgKi8KIAkJcmVnID0gTlVMTDsKIAkJbGlzdF9mb3JfZWFjaChsLCAmc2NscF9yZWdfbGlzdCkgewogCQkJcmVnID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3Qgc2NscF9yZWdpc3RlciwgbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYwppbmRleCA1MDYzOTA0Li43N2FiNmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCiAjaW5jbHVkZSAic2NscC5oIgogCkBAIC00NzQsNiArNDc1LDEwIEBACiAJCWdvdG8gc2tpcF9hZGQ7CiAJaWYgKHN0YXJ0ICsgc2l6ZSA+IFZNRU1fTUFYX1BIWVMpCiAJCXNpemUgPSBWTUVNX01BWF9QSFlTIC0gc3RhcnQ7CisJaWYgKG1lbW9yeV9lbmRfc2V0ICYmIChzdGFydCA+PSBtZW1vcnlfZW5kKSkKKwkJZ290byBza2lwX2FkZDsKKwlpZiAobWVtb3J5X2VuZF9zZXQgJiYgKHN0YXJ0ICsgc2l6ZSA+IG1lbW9yeV9lbmQpKQorCQlzaXplID0gbWVtb3J5X2VuZCAtIHN0YXJ0OwogCWFkZF9tZW1vcnkoMCwgc3RhcnQsIHNpemUpOwogc2tpcF9hZGQ6CiAJZmlyc3Rfcm4gPSBybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaAppbmRleCBkMGQ1NjVhLi5jMDc4MDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCkBAIC0zMjQsOCArMzI0LDYgQEAKICNlbmRpZgogCiAvKiBhIGZ1bmN0aW9uIGZvciBkdW1waW5nIGRldmljZSBzZW5zZSBpbmZvICovCi1leHRlcm4gdm9pZCB0YXBlX2R1bXBfc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKiwKLQkJCSAgICBzdHJ1Y3QgaXJiICopOwogZXh0ZXJuIHZvaWQgdGFwZV9kdW1wX3NlbnNlX2RiZihzdHJ1Y3QgdGFwZV9kZXZpY2UgKiwgc3RydWN0IHRhcGVfcmVxdWVzdCAqLAogCQkJCXN0cnVjdCBpcmIgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKaW5kZXggMjJjYTM0My4uODA3ZGVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKQEAgLTgsNiArOCw4IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpAQCAtMTgsOCArMjAsNiBAQAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfMzRYWDogIgotCiAvKgogICogUG9pbnRlciB0byBkZWJ1ZyBhcmVhLgogICovCkBAIC0yMDMsOCArMjAzLDcgQEAKIAkJdGFwZV8zNHh4X3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19NU0VOKTsKIAl9IGVsc2UgewogCQlEQkZfRVZFTlQoMywgInVuc29sLmlycSEgZGV2IGVuZDogJTA4eFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiVW5zb2xpY2l0ZWQgSVJRIChEZXZpY2UgRW5kKSBjYXVnaHQuXG4iKTsKLQkJdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwkJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYik7CiAJfQogCXJldHVybiBUQVBFX0lPX1NVQ0NFU1M7CiB9CkBAIC0yMjYsOSArMjI1LDcgQEAKIAkJdGFwZV9zdGRfcmVhZF9iYWNrd2FyZChkZXZpY2UsIHJlcXVlc3QpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAl9Ci0JaWYgKHJlcXVlc3QtPm9wICE9IFRPX1JCQSkKLQkJUFJJTlRfRVJSKCJyZWFkX29wcG9zaXRlIGNhbGxlZCB3aXRoIHN0YXRlOiVzXG4iLAotCQkJICB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKKwogCS8qCiAJICogV2UgdHJpZWQgdG8gcmVhZCBmb3J3YXJkIGFuZCBiYWNrd2FyZCwgYnV0IGhhdCBubwogCSAqIHN1Y2Nlc3MgLT4gZmFpbGVkLgpAQCAtMjQxLDEzICsyMzgsOSBAQAogCQkgIHN0cnVjdCBpcmIgKmlyYiwgaW50IG5vKQogewogCWlmIChyZXF1ZXN0LT5vcCAhPSBUT19BU1NJR04pIHsKLQkJUFJJTlRfV0FSTigiQW4gdW5leHBlY3RlZCBjb25kaXRpb24gIyVkIHdhcyBjYXVnaHQgaW4gIgotCQkJICAgInRhcGUgZXJyb3IgcmVjb3ZlcnkuXG4iLCBubyk7Ci0JCVBSSU5UX1dBUk4oIlBsZWFzZSByZXBvcnQgdGhpcyBpbmNpZGVudC5cbiIpOwotCQlpZiAocmVxdWVzdCkKLQkJCVBSSU5UX1dBUk4oIk9wZXJhdGlvbiBvZiB0YXBlOiVzXG4iLAotCQkJCSAgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIHVuZXhwZWN0ZWQgY29uZGl0aW9uICVkICIKKwkJCSJvY2N1cnJlZCBpbiB0YXBlIGVycm9yIHJlY292ZXJ5XG4iLCBubyk7CisJCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOwogCX0KIAlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiB9CkBAIC0yNjEsOSArMjU0LDggQEAKIAkJICAgICAgc3RydWN0IGlyYiAqaXJiKQogewogCWlmIChpcmItPmVjd1szXSA9PSAweDQwKSB7Ci0JCVBSSU5UX1dBUk4gKCJEYXRhIG92ZXJydW4gZXJyb3IgYmV0d2VlbiBjb250cm9sLXVuaXQgIgotCQkJICAgICJhbmQgZHJpdmUuIFVzZSBhIGZhc3RlciBjaGFubmVsIGNvbm5lY3Rpb24sICIKLQkJCSAgICAiaWYgcG9zc2libGUhIFxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIGRhdGEgb3ZlcnJ1biBvY2N1cnJlZCBiZXR3ZWVuIgorCQkJIiB0aGUgY29udHJvbCB1bml0IGFuZCB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJfQogCXJldHVybiB0YXBlXzM0eHhfZXJwX2J1ZyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLTEpOwpAQCAtMjgwLDcgKzI3Miw4IEBACiAJCS8qCiAJCSAqIGN1IGRldGVjdGVkIGluY29ycmVjdCBibG9jay1pZCBzZXF1ZW5jZSBvbiB0YXBlLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiSWxsZWdhbCBibG9jay1pZCBzZXF1ZW5jZSBmb3VuZCFcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIGJsb2NrIElEIHNlcXVlbmNlIG9uIHRoZSAiCisJCQkidGFwZSBpcyBpbmNvcnJlY3RcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJfQogCS8qCkBAIC0zOTMsOCArMzg2LDYgQEAKIAkJCS8qIFdyaXRpbmcgYXQgcGh5c2ljYWwgZW5kIG9mIHZvbHVtZSAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCQlkZWZhdWx0OgotCQkJUFJJTlRfRVJSKCJJbnZhbGlkIG9wIGluICVzOiVpXG4iLAotCQkJCSAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAwKTsKIAkJfQogCX0KQEAgLTQyMCw3ICs0MTEsOCBAQAogCQkJCQkJCSBpcmIsIC00KTsKIAogCQkJLyogZGF0YSBjaGVjayBpcyBwZXJtYW5lbnQsIENVIHJlY292ZXJ5IGhhcyBmYWlsZWQgKi8KLQkJCVBSSU5UX1dBUk4oIlBlcm1hbmVudCByZWFkIGVycm9yXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHJlYWQgZXJyb3Igb2NjdXJyZWQgIgorCQkJCSJ0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MjU6CiAJCQkvLyBhIHdyaXRlIGRhdGEgY2hlY2sgb2NjdXJyZWQKQEAgLTQzMywyMiArNDI1LDI2IEBACiAJCQkJCQkJIGlyYiwgLTUpOwogCiAJCQkvLyBkYXRhIGNoZWNrIGlzIHBlcm1hbmVudCwgY3UtcmVjb3ZlcnkgaGFzIGZhaWxlZAotCQkJUFJJTlRfV0FSTigiUGVybWFuZW50IHdyaXRlIGVycm9yXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHdyaXRlIGVycm9yIG9uIHRoZSAiCisJCQkJInRhcGUgY2Fubm90IGJlIHJlY292ZXJlZFxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCWNhc2UgMHgyNjoKIAkJCS8qIERhdGEgQ2hlY2sgKHJlYWQgb3Bwb3NpdGUpIG9jY3VycmVkLiAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmVhZF9vcHBvc2l0ZShkZXZpY2UsIHJlcXVlc3QpOwogCQljYXNlIDB4Mjg6CiAJCQkvKiBJRC1NYXJrIGF0IHRhcGUgc3RhcnQgY291bGRuJ3QgYmUgd3JpdHRlbiAqLwotCQkJUFJJTlRfV0FSTigiSUQtTWFyayBjb3VsZCBub3QgYmUgd3JpdHRlbi5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIldyaXRpbmcgdGhlIElELW1hcmsgIgorCQkJCSJmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MzE6CiAJCQkvKiBUYXBlIHZvaWQuIFRyaWVkIHRvIHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2UuICovCi0JCQlQUklOVF9XQVJOKCJSZWFkIGJleW9uZCBlbmQgb2YgcmVjb3JkZWQgYXJlYS5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlJlYWRpbmcgdGhlIHRhcGUgYmV5b25kIgorCQkJCSIgdGhlIGVuZCBvZiB0aGUgcmVjb3JkZWQgYXJlYSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCQljYXNlIDB4NDE6CiAJCQkvKiBSZWNvcmQgc2VxdWVuY2UgZXJyb3IuICovCi0JCQlQUklOVF9XQVJOKCJJbnZhbGlkIGJsb2NrLWlkIHNlcXVlbmNlIGZvdW5kLlxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgY29udGFpbnMgYW4gIgorCQkJCSJpbmNvcnJlY3QgYmxvY2sgSUQgc2VxdWVuY2VcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQlkZWZhdWx0OgogCQkJLyogYWxsIGRhdGEgY2hlY2tzIGZvciAzNDgwIHNob3VsZCByZXN1bHQgaW4gb25lIG9mCkBAIC00NzAsMTYgKzQ2NiwxMiBAQAogCXN3aXRjaCAoc2Vuc2VbM10pIHsKIAljYXNlIDB4MDA6CiAJCS8qIFVuaXQgY2hlY2sgd2l0aCBlcnBhIGNvZGUgMC4gUmVwb3J0IGFuZCBpZ25vcmUuICovCi0JCVBSSU5UX1dBUk4oIk5vbi1lcnJvciBzZW5zZSB3YXMgZm91bmQuICIKLQkJCSAgICJVbml0LWNoZWNrIHdpbGwgYmUgaWdub3JlZC5cbiIpOwogCQlyZXR1cm4gVEFQRV9JT19TVUNDRVNTOwogCWNhc2UgMHgyMToKIAkJLyoKIAkJICogRGF0YSBzdHJlYW1pbmcgbm90IG9wZXJhdGlvbmFsLiBDVSB3aWxsIHN3aXRjaCB0bwogCQkgKiBpbnRlcmxvY2sgbW9kZS4gUmVpc3N1ZSB0aGUgY29tbWFuZC4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkRhdGEgc3RyZWFtaW5nIG5vdCBvcGVyYXRpb25hbC4gIgotCQkJICAgIlN3aXRjaGluZyB0byBpbnRlcmxvY2stbW9kZS5cbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4MjI6CiAJCS8qCkBAIC00ODcsMTEgKzQ3OSw4IEBACiAJCSAqIGVycm9yIG9uIHRoZSBsb3dlciBpbnRlcmZhY2UsIGludGVybmFsIHBhdGggbm90IHVzYWJsZSwKIAkJICogb3IgZXJyb3IgZHVyaW5nIGNhcnRyaWRnZSBsb2FkLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiQSBwYXRoIGVxdWlwbWVudCBjaGVjayBvY2N1cnJlZC4gT25lIG9mIHRoZSAiCi0JCQkgICAiZm9sbG93aW5nIGNvbmRpdGlvbnMgb2NjdXJyZWQ6XG4iKTsKLQkJUFJJTlRfV0FSTigiZHJpdmUgYWRhcHRlciBlcnJvciwgYnVmZmVyIGVycm9yIG9uIHRoZSBsb3dlciAiCi0JCQkgICAiaW50ZXJmYWNlLCBpbnRlcm5hbCBwYXRoIG5vdCB1c2FibGUsIGVycm9yICIKLQkJCSAgICJkdXJpbmcgY2FydHJpZGdlIGxvYWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgcGF0aCBlcXVpcG1lbnQgY2hlY2sgb2NjdXJyZWQiCisJCQkiIGZvciB0aGUgdGFwZSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDI0OgogCQkvKgpAQCAtNTE0LDcgKzUwMyw2IEBACiAJCSAqIGJ1dCB0aGUgaGFyZHdhcmUgaXNuJ3QgY2FwYWJsZSB0byBkbyBpZHJjLCBvciBhIHBlcmZvcm0KIAkJICogc3Vic3lzdGVtIGZ1bmMgaXMgaXNzdWVkIGFuZCB0aGUgQ1UgaXMgbm90IG9uLWxpbmUuCiAJCSAqLwotCQlQUklOVF9XQVJOICgiRnVuY3Rpb24gaW5jb21wYXRpYmxlLiBUcnkgdG8gc3dpdGNoIG9mZiBpZHJjXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgyYToKIAkJLyoKQEAgLTU1MiwyMyArNTQwLDI2IEBACiAJCSAqIHJlYWRpbmcgdGhlIGZvcm1hdCBpZCBtYXJrIG9yIHRoYXQgdGhhdCBmb3JtYXQgc3BlY2lmaWVkCiAJCSAqIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiRHJpdmUgbm90IGNhcGFibGUgcHJvY2Vzc2luZyB0aGUgdGFwZSBmb3JtYXQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgY2Fubm90IHByb2Nlc3MgIgorCQkJInRoZSB0YXBlIGZvcm1hdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU1FRElVTVRZUEUpOwogCWNhc2UgMHgzMDoKIAkJLyogVGhlIG1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQuICovCi0JCVBSSU5UX1dBUk4oIk1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIG1lZGl1bSBpcyB3cml0ZS0iCisJCQkicHJvdGVjdGVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FQUNDRVMpOwogCWNhc2UgMHgzMjoKIAkJLy8gVGVuc2lvbiBsb3NzLiBXZSBjYW5ub3QgcmVjb3ZlciB0aGlzLCBpdCdzIGFuIEkvTyBlcnJvci4KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGxvc3QgdGFwZSB0ZW5zaW9uLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBkb2VzIG5vdCBoYXZlIHRoZSAiCisJCQkicmVxdWlyZWQgdGFwZSB0ZW5zaW9uXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzMzoKIAkJLyoKIAkJICogTG9hZCBGYWlsdXJlLiBUaGUgY2FydHJpZGdlIHdhcyBub3QgaW5zZXJ0ZWQgY29ycmVjdGx5IG9yCiAJCSAqIHRoZSB0YXBlIGlzIG5vdCB0aHJlYWRlZCBjb3JyZWN0bHkuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJDYXJ0cmlkZ2UgbG9hZCBmYWlsdXJlLiBSZWxvYWQgdGhlIGNhcnRyaWRnZSAiCi0JCQkgICAiYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBmYWlsZWQgdG8gbG9hZCIKKwkJCSIgdGhlIGNhcnRyaWRnZVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzQ6CkBAIC01NzYsOCArNTY3LDggQEAKIAkJICogVW5sb2FkIGZhaWx1cmUuIFRoZSBkcml2ZSBjYW5ub3QgbWFpbnRhaW4gdGFwZSB0ZW5zaW9uCiAJCSAqIGFuZCBjb250cm9sIHRhcGUgbW92ZW1lbnQgZHVyaW5nIGFuIHVubG9hZCBvcGVyYXRpb24uCiAJCSAqLwotCQlQUklOVF9XQVJOKCJGYWlsdXJlIGR1cmluZyBjYXJ0cmlkZ2UgdW5sb2FkLiAiCi0JCQkgICAiUGxlYXNlIHRyeSBtYW51YWxseS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQXV0b21hdGljIHVubG9hZGluZyBvZiB0aGUgdGFwZSIKKwkJCSIgY2FydHJpZGdlIGZhaWxlZFxuIik7CiAJCWlmIChyZXF1ZXN0LT5vcCA9PSBUT19SVU4pCiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2J1ZyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgc2Vuc2VbM10pOwpAQCAtNTg5LDggKzU4MCw4IEBACiAJCSAqIC0gdGhlIGNhcnRyaWRnZSBsb2FkZXIgZG9lcyBub3QgcmVzcG9uZCBjb3JyZWN0bHkKIAkJICogLSBhIGZhaWx1cmUgb2NjdXJzIGR1cmluZyBhbiBpbmRleCwgbG9hZCwgb3IgdW5sb2FkIGN5Y2xlCiAJCSAqLwotCQlQUklOVF9XQVJOKCJFcXVpcG1lbnQgY2hlY2shIFBsZWFzZSBjaGVjayB0aGUgZHJpdmUgYW5kICIKLQkJCSAgICJ0aGUgY2FydHJpZGdlIGxvYWRlci5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXF1aXBtZW50IGNoZWNrIGhhcyBvY2N1cnJlZCIKKwkJCSIgb24gdGhlIHRhcGUgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzY6CiAJCWlmIChkZXZpY2UtPmNkZXYtPmlkLmRyaXZlcl9pbmZvID09IHRhcGVfMzQ5MCkKQEAgLTYwMyw3ICs1OTQsOCBAQAogCQkgKiBUYXBlIGxlbmd0aCBlcnJvci4gVGhlIHRhcGUgaXMgc2hvcnRlciB0aGFuIHJlcG9ydGVkIGluCiAJCSAqIHRoZSBiZWdpbm5pbmctb2YtdGFwZSBkYXRhLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiVGFwZSBsZW5ndGggZXJyb3IuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGluZm9ybWF0aW9uIHN0YXRlcyBhbiIKKwkJCSIgaW5jb3JyZWN0IGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4Mzg6CiAJCS8qCkBAIC02MjAsMTIgKzYxMiwxMiBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDNhOgogCQkvKiBEcml2ZSBzd2l0Y2hlZCB0byBub3QgcmVhZHkuICovCi0JCVBSSU5UX1dBUk4oIkRyaXZlIG5vdCByZWFkeS4gVHVybiB0aGUgcmVhZHkvbm90IHJlYWR5IHN3aXRjaCAiCi0JCQkgICAidG8gcmVhZHkgcG9zaXRpb24gYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBpcyBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDNiOgogCQkvKiBNYW51YWwgcmV3aW5kIG9yIHVubG9hZC4gVGhpcyBjYXVzZXMgYW4gSS9PIGVycm9yLiAqLwotCQlQUklOVF9XQVJOKCJNZWRpdW0gd2FzIHJld291bmQgb3IgdW5sb2FkZWQgbWFudWFsbHkuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIG1lZGl1bSBoYXMgYmVlbiAiCisJCQkicmV3b3VuZCBvciB1bmxvYWRlZCBtYW51YWxseVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDI6CkBAIC02MzMsNyArNjI1LDggQEAKIAkJICogRGVncmFkZWQgbW9kZS4gQSBjb25kaXRpb24gdGhhdCBjYW4gY2F1c2UgZGVncmFkZWQKIAkJICogcGVyZm9ybWFuY2UgaXMgZGV0ZWN0ZWQuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJTdWJzeXN0ZW0gaXMgcnVubmluZyBpbiBkZWdyYWRlZCBtb2RlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBzdWJzeXN0ZW0gaXMgcnVubmluZyAiCisJCQkiaW4gZGVncmFkZWQgbW9kZVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHg0MzoKIAkJLyogRHJpdmUgbm90IHJlYWR5LiAqLwpAQCAtNjUyLDcgKzY0NSw2IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBpcyBub3QgcmVhZHkuXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9NRURJVU0pOwogCWNhc2UgMHg0NDoKIAkJLyogTG9jYXRlIEJsb2NrIHVuc3VjY2Vzc2Z1bC4gKi8KQEAgLTY2Myw3ICs2NTUsOCBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ1OgogCQkvKiBUaGUgZHJpdmUgaXMgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgY2hhbm5lbCBwYXRoLiAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgYXNzaWduZWQgZWxzZXdoZXJlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGlzIGFscmVhZHkgIgorCQkJImFzc2lnbmVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0NjoKIAkJLyoKQEAgLTY3MSwxMSArNjY0LDEyIEBACiAJCSAqIHRoZSBwb3dlciBzdXBwbHkgbWF5IGJlIHN3aXRjaGVkIG9mZiBvcgogCQkgKiB0aGUgZHJpdmUgYWRkcmVzcyBtYXkgbm90IGJlIHNldCBjb3JyZWN0bHkuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgbm90IG9uLWxpbmUuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGlzIG5vdCBvbmxpbmVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ3OgogCQkvKiBWb2x1bWUgZmVuY2VkLiBDVSByZXBvcnRzIHZvbHVtZSBpbnRlZ3JpdHkgaXMgbG9zdC4gKi8KLQkJUFJJTlRfV0FSTigiVm9sdW1lIGZlbmNlZC4gVGhlIHZvbHVtZSBpbnRlZ3JpdHkgaXMgbG9zdC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIGNvbnRyb2wgdW5pdCBoYXMgZmVuY2VkICIKKwkJCSJhY2Nlc3MgdG8gdGhlIHRhcGUgdm9sdW1lXG4iKTsKIAkJdGFwZV8zNHh4X2RlbGV0ZV9zYmlkX2Zyb20oZGV2aWNlLCAwKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0ODoKQEAgLTY4MywyMCArNjc3LDIxIEBACiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHg0OToKIAkJLyogQnVzIG91dCBjaGVjay4gQSBwYXJpdHkgY2hlY2sgZXJyb3Igb24gdGhlIGJ1cyB3YXMgZm91bmQuICovCi0JCVBSSU5UX1dBUk4oIkJ1cyBvdXQgY2hlY2suIEEgZGF0YSB0cmFuc2ZlciBvdmVyIHRoZSBidXMgIgotCQkJICAgImhhcyBiZWVuIGNvcnJ1cHRlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBwYXJpdHkgZXJyb3Igb2NjdXJyZWQgb24gdGhlICIKKwkJCSJ0YXBlIGJ1c1xuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NGE6CiAJCS8qIENvbnRyb2wgdW5pdCBlcnAgZmFpbGVkLiAqLwotCQlQUklOVF9XQVJOKCJUaGUgY29udHJvbCB1bml0IEkvTyBlcnJvciByZWNvdmVyeSBmYWlsZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkkvTyBlcnJvciByZWNvdmVyeSBmYWlsZWQgb24gIgorCQkJInRoZSB0YXBlIGNvbnRyb2wgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NGI6CiAJCS8qCiAJCSAqIENVIGFuZCBkcml2ZSBpbmNvbXBhdGlibGUuIFRoZSBkcml2ZSByZXF1ZXN0cyBtaWNyby1wcm9ncmFtCiAJCSAqIHBhdGNoZXMsIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIG9uIHRoZSBDVS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBuZWVkcyBtaWNyb3Byb2dyYW0gcGF0Y2hlcyBmcm9tIHRoZSAiCi0JCQkgICAiY29udHJvbCB1bml0LCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCByZXF1aXJlcyBhICIKKwkJCSJmaXJtd2FyZSB1cGRhdGVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDRjOgogCQkvKgpAQCAtNzIxLDggKzcxNiw4IEBACiAJCQkgKiB0aGUgYmxvY2sgdG8gYmUgd3JpdHRlbiBpcyBsYXJnZXIgdGhhbiBhbGxvd2VkIGZvcgogCQkJICogYnVmZmVyZWQgbW9kZS4KIAkJCSAqLwotCQkJUFJJTlRfV0FSTigiTWF4aW11bSBibG9jayBzaXplIGZvciBidWZmZXJlZCAiCi0JCQkJICAgIm1vZGUgZXhjZWVkZWQuXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgbWF4aW11bSBibG9jayBzaXplIgorCQkJCSIgZm9yIGJ1ZmZlcmVkIG1vZGUgaXMgZXhjZWVkZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9CVUZTKTsKIAkJfQogCQkvKiBUaGlzIGVycGEgaXMgcmVzZXJ2ZWQgZm9yIDM0ODAuICovCkBAIC03NTksMjIgKzc1NCwyMCBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NTU6CiAJCS8qIENoYW5uZWwgaW50ZXJmYWNlIHJlY292ZXJ5IChwZXJtYW5lbnQpLiAqLwotCQlQUklOVF9XQVJOKCJBIHBlcm1hbmVudCBjaGFubmVsIGludGVyZmFjZSBlcnJvciBvY2N1cnJlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBjaGFubmVsIGludGVyZmFjZSBlcnJvciBjYW5ub3QgYmUiCisJCQkiIHJlY292ZXJlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NTY6CiAJCS8qIENoYW5uZWwgcHJvdG9jb2wgZXJyb3IuICovCi0JCVBSSU5UX1dBUk4oIkEgY2hhbm5lbCBwcm90b2NvbCBlcnJvciBvY2N1cnJlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBjaGFubmVsIHByb3RvY29sIGVycm9yICIKKwkJCSJvY2N1cnJlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NTc6CiAJCWlmIChkZXZpY2UtPmNkZXYtPmlkLmRyaXZlcl9pbmZvID09IHRhcGVfMzQ4MCkgewogCQkJLyogQXR0ZW50aW9uIGludGVyY2VwdC4gKi8KLQkJCVBSSU5UX1dBUk4oIkFuIGF0dGVudGlvbiBpbnRlcmNlcHQgb2NjdXJyZWQsICIKLQkJCQkgICAid2hpY2ggd2lsbCBiZSByZWNvdmVyZWQuXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCQl9IGVsc2UgewogCQkJLyogR2xvYmFsIHN0YXR1cyBpbnRlcmNlcHQuICovCi0JCQlQUklOVF9XQVJOKCJBbiBnbG9iYWwgc3RhdHVzIGludGVyY2VwdCB3YXMgcmVjZWl2ZWQsICIKLQkJCQkgICAid2hpY2ggd2lsbCBiZSByZWNvdmVyZWQuXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCQl9CiAJY2FzZSAweDVhOgpAQCAtNzgyLDQyICs3NzUsMzEgQEAKIAkJICogVGFwZSBsZW5ndGggaW5jb21wYXRpYmxlLiBUaGUgdGFwZSBpbnNlcnRlZCBpcyB0b28gbG9uZywKIAkJICogd2hpY2ggY291bGQgY2F1c2UgZGFtYWdlIHRvIHRoZSB0YXBlIG9yIHRoZSBkcml2ZS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRhcGUgTGVuZ3RoIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIlRhcGUgbGVuZ3RoIGV4Y2VlZHMgSUJNIGVuaGFuY2VkIGNhcGFjaXR5ICIKLQkJCSJjYXJ0ZHJpZGdlIGxlbmd0aCBvciBhIG1lZGl1bVxuIik7Ci0JCVBSSU5UX1dBUk4oIndpdGggRUMtQ1NUIGlkZW50aWZpY2F0aW9uIG1hcmsgaGFzIGJlZW4gbW91bnRlZCAiCi0JCQkiaW4gYSBkZXZpY2UgdGhhdCB3cml0ZXNcbiIpOwotCQlQUklOVF9XQVJOKCIzNDgwIG9yIDM0ODAgWEYgZm9ybWF0LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQgIgorCQkJInRoZSB0YXBlIGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWI6CiAJCS8qIEZvcm1hdCAzNDgwIFhGIGluY29tcGF0aWJsZSAqLwogCQlpZiAoc2Vuc2VbMV0gJiBTRU5TRV9CRUdJTk5JTkdfT0ZfVEFQRSkKIAkJCS8qIFRoZSB0YXBlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuLiAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7Ci0JCVBSSU5UX1dBUk4oIkZvcm1hdCAzNDgwIFhGIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIk1lZGl1bSBoYXMgYmVlbiBjcmVhdGVkIGluIDM0ODAgZm9ybWF0LiAiCi0JCQkiVG8gY2hhbmdlIHRoZSBmb3JtYXQgd3JpdGVzXG4iKTsKLQkJUFJJTlRfV0FSTigibXVzdCBiZSBpc3N1ZWQgYXQgQk9ULlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIGZvcm1hdCAzNDgwIFhGXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg1YzoKIAkJLyogRm9ybWF0IDM0ODAtMiBYRiBpbmNvbXBhdGlibGUgKi8KLQkJUFJJTlRfV0FSTigiRm9ybWF0IDM0ODAtMiBYRiBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJEZXZpY2UgY2FuIG9ubHkgcmVhZCAzNDgwIG9yIDM0ODAgWEYgZm9ybWF0LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQgdGFwZSAiCisJCQkiZm9ybWF0IDM0ODAtMiBYRlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWQ6CiAJCS8qIFRhcGUgbGVuZ3RoIHZpb2xhdGlvbi4gKi8KLQkJUFJJTlRfV0FSTigiVGFwZSBMZW5ndGggVmlvbGF0aW9uXG4iKTsKLQkJUFJJTlRfV0FSTigiVGhlIG1vdW50ZWQgdGFwZSBleGNlZWRzIElCTSBFbmhhbmNlZCBDYXBhY2l0eSAiCi0JCQkiQ2FydGRyaWRnZSBTeXN0ZW0gVGFwZSBsZW5ndGguXG4iKTsKLQkJUFJJTlRfV0FSTigiVGhpcyBtYXkgY2F1c2UgZGFtYWdlIHRvIHRoZSBkcml2ZSBvciB0YXBlIHdoZW4gIgotCQkJInByb2Nlc3NpbmcgdG8gdGhlIEVPVlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIHRoZSBjdXJyZW50IHRhcGUgbGVuZ3RoXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTUVESVVNVFlQRSk7CiAJY2FzZSAweDVlOgogCQkvKiBDb21wYWN0aW9uIGFsZ29yaXRobSBpbmNvbXBhdGlibGUuICovCi0JCVBSSU5UX1dBUk4oIkNvbXBhY3Rpb24gQWxnb3JpdGhtIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIlRoZSB2b2x1bWUgaXMgcmVjb3JkZWQgdXNpbmcgYW4gaW5jb21wYXRpYmxlICIKLQkJCSJjb21wYWN0aW9uIGFsZ29yaXRobSxcbiIpOwotCQlQUklOVF9XQVJOKCJ3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZG9lcyBub3Qgc3VwcG9ydCIKKwkJCSIgdGhlIGNvbXBhY3Rpb24gYWxnb3JpdGhtXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTUVESVVNVFlQRSk7CiAKIAkJLyogVGhlIGZvbGxvd2luZyBlcnBhcyBzaG91bGQgaGF2ZSBiZWVuIGNvdmVyZWQgZWFybGllci4gKi8KQEAgLTg0OCw3ICs4MzAsNiBAQAogCSAgICAoaXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX0RFVl9FTkQpICYmCiAJICAgIChyZXF1ZXN0LT5vcCA9PSBUT19XUkkpKSB7CiAJCS8qIFdyaXRlIGF0IGVuZCBvZiB2b2x1bWUgKi8KLQkJUFJJTlRfSU5GTygiRW5kIG9mIHZvbHVtZVxuIik7IC8qIFhYWCAqLwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVOT1NQQyk7CiAJfQogCkBAIC04NjksOSArODUwLDcgQEAKIAl9CiAKIAlEQkZfRVZFTlQoNiwgInh1bmtub3duaXJxXG4iKTsKLQlQUklOVF9FUlIoIlVuZXhwZWN0ZWQgaW50ZXJydXB0LlxuIik7Ci0JUFJJTlRfRVJSKCJDdXJyZW50IG9wIGlzOiAlcyIsIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIHJlcXVlc3QsIGlyYik7CiAJcmV0dXJuIFRBUEVfSU9fU1RPUDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwppbmRleCA3MTYwNWExLi5mYzFkOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwpAQCAtOCwxMiArOCwxNSBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAKICNkZWZpbmUgVEFQRV9EQkZfQVJFQQl0YXBlXzM1OTBfZGJmCisjZGVmaW5lIEJVRlNJWkUgNTEyCS8qIHNpemUgb2YgYnVmZmVycyBmb3IgZHluYW1pYyBnZW5lcmF0ZWQgbWVzc2FnZXMgKi8KIAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgpAQCAtMzYsNyArMzksNyBAQAogICogLSBSZWFkIEFsdGVybmF0ZToJCSBpbXBsZW1lbnRlZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV8zNTkwOiAiCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgogCiBzdGF0aWMgY29uc3QgY2hhciAqdGFwZV8zNTkwX21zZ1tUQVBFXzM1OTBfTUFYX01TR10gPSB7CiAJWzB4MDBdID0gIiIsCkBAIC02NjEsOCArNjY0LDcgQEAKIAkJCWNjdysrOwogCQkJZHN0ICs9IFRBUEVCTE9DS19IU0VDX1NJWkU7CiAJCX0KLQkJaWYgKG9mZiA+IGJ2LT5idl9sZW4pCi0JCQlCVUcoKTsKKwkJQlVHX09OKG9mZiA+IGJ2LT5idl9sZW4pOwogCX0KIAljY3cgPSB0YXBlX2Njd19lbmQoY2N3LCBOT1AsIDAsIE5VTEwpOwogCURCRl9FVkVOVCg2LCAieEJSRURjY3dnXG4iKTsKQEAgLTcyNiw3ICs3MjgsNyBAQAogCX0KIAljX2luZm8tPm1lZGl1bV9zdGF0dXMgfD0gVEFQRTM5MF9NRURJVU1fTE9BREVEX01BU0s7CiAJaWYgKHNlbnNlLT5mbGFncyAmIE1TRU5TRV9DUllQVF9NQVNLKSB7Ci0JCVBSSU5UX0lORk8oIk1lZGl1bSBpcyBlbmNyeXB0ZWQgKCUwNHgpXG4iLCBzZW5zZS0+ZmxhZ3MpOworCQlEQkZfRVZFTlQoNiwgIk1lZGl1bSBpcyBlbmNyeXB0ZWQgKCUwNHgpXG4iLCBzZW5zZS0+ZmxhZ3MpOwogCQljX2luZm8tPm1lZGl1bV9zdGF0dXMgfD0gVEFQRTM5MF9NRURJVU1fRU5DUllQVEVEX01BU0s7CiAJfSBlbHNlCXsKIAkJREJGX0VWRU5UKDYsICJNZWRpdW0gaXMgbm90IGVuY3J5cHRlZCAlMDR4XG4iLCBzZW5zZS0+ZmxhZ3MpOwpAQCAtODQ3LDggKzg0OSw3IEBACiAJCXRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fUkVBRF9BVFRNU0cpOwogCX0gZWxzZSB7CiAJCURCRl9FVkVOVCgzLCAidW5zb2wuaXJxISBkZXYgZW5kOiAlMDh4XG4iLCBkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCJVbnNvbGljaXRlZCBJUlEgKERldmljZSBFbmQpIGNhdWdodC5cbiIpOwotCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCQl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiKTsKIAl9CiAJLyogY2hlY2sgbWVkaXVtIHN0YXRlICovCiAJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19NU0VOKTsKQEAgLTg3Niw4ICs4NzcsNiBAQAogCWNhc2UgU0VOU0VfQlJBX0RSRToKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfZmFpbGVkKGRldmljZSwgcmVxdWVzdCwgaXJiLCByYyk7CiAJZGVmYXVsdDoKLQkJUFJJTlRfRVJSKCJVbmtub3duIEJSQSAleCAtIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hXG4iLAotCQkJICBzZW5zZS0+YnJhKTsKIAkJQlVHKCk7CiAJCXJldHVybiBUQVBFX0lPX1NUT1A7CiAJfQpAQCAtOTEwLDcgKzkwOSw4IEBACiAJICogc2hvdWxkIHByb2NlZWQgd2l0aCB0aGUgbmV3IHRhcGUuLi4gdGhpcwogCSAqIHNob3VsZCBwcm9iYWJseSBiZSBkb25lIGluIHVzZXIgc3BhY2UhCiAJICovCi0JUFJJTlRfV0FSTigiKCVzKTogU3dhcCBUYXBlIERldmljZSFcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBtZWRpdW0gbXVzdCBiZSBsb2FkZWQgaW50byBhICIKKwkJImRpZmZlcmVudCB0YXBlIHVuaXRcbiIpOwogCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKIH0KIApAQCAtOTg1LDggKzk4NSw2IEBACiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oInJlYWRfb3Bwb3NpdGVfcmVjb3ZlcnlfY2FsbGVkX3dpdGhfb3A6ICVzXG4iLAotCQkJICAgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiAJfQogfQpAQCAtOTk4LDUwICs5OTYsNjEgQEAKIHRhcGVfMzU5MF9wcmludF9taW1fbXNnX2YwKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqc2Vuc2U7CisJY2hhciAqZXhjZXB0aW9uLCAqc2VydmljZTsKKworCWV4Y2VwdGlvbiA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisJc2VydmljZSA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWV4Y2VwdGlvbiB8fCAhc2VydmljZSkKKwkJZ290byBvdXRfbm9tZW07CiAKIAlzZW5zZSA9IChzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICopIGlyYi0+ZWN3OwogCS8qIEV4Y2VwdGlvbiBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MC5lbWMpIHsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERhdGEgZGVncmFkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRGF0YSBkZWdyYWRlZCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERhdGEgZGVncmFkZWQgaW4gcGFydGlvbiAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1wKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRGF0YSBkZWdyYWRlZCBpbiBwYXJ0aW9uICVpIiwKKwkJCXNlbnNlLT5mbXQuZjcwLm1wKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNZWRpdW0gZGVncmFkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiTWVkaXVtIGRlZ3JhZGVkIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIGRlZ3JhZGVkIGluIHBhcnRpdGlvbiAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1wKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiTWVkaXVtIGRlZ3JhZGVkIGluIHBhcnRpdGlvbiAlaSIsCisJCQlzZW5zZS0+Zm10LmY3MC5tcCk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQmxvY2sgMCBFcnJvclxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJCbG9jayAwIEVycm9yIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIEV4Y2VwdGlvbiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tZCk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIk1lZGl1bSBFeGNlcHRpb24gMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLm1kKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogTUlNIEV4TXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5lbWMpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzAuZW1jKTsKIAkJYnJlYWs7CiAJfQogCS8qIFNlcnZpY2UgTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzAuc21jKSB7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZWZlcmVuY2UgTWVkaWEgbWFpbnRlbmFuY2UgcHJvY2VkdXJlICVpXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAubWQpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVmZXJlbmNlIE1lZGlhIG1haW50ZW5hbmNlICIKKwkJCSJwcm9jZWR1cmUgJWkiLCBzZW5zZS0+Zm10LmY3MC5tZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5zbWMpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLnNtYyk7CiAJCWJyZWFrOwogCX0KKworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUYXBlIG1lZGlhIGluZm9ybWF0aW9uOiBleGNlcHRpb24gJXMsICIKKwkJInNlcnZpY2UgJXNcbiIsIGV4Y2VwdGlvbiwgc2VydmljZSk7CisKK291dF9ub21lbToKKwlrZnJlZShleGNlcHRpb24pOworCWtmcmVlKHNlcnZpY2UpOwogfQogCiAvKgpAQCAtMTA1MSwxMDggKzEwNjAsMTA4IEBACiB0YXBlXzM1OTBfcHJpbnRfaW9fc2ltX21zZ19mMShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UgIgorCQkJImltcGFjdCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBjaGFubmVsICIKKwkJCSJpbnRlcmZhY2UgMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBkZXZpY2UgcGF0aCAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBkZXZpY2UgcGF0aCAiCisJCQkiMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDU6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBsaWJyYXJ5IHBhdGggMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gbGlicmFyeSBwYXRoICIKKwkJCSIweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIG5vZGUgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gbm9kZSAweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBwYXJ0aXRpb24gMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gcGFydGl0aW9uICIKKwkJCSIweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFNJTSBFeE1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuZW1jKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLmVtYyk7CiAJfQogCS8qIFNlcnZpY2UgTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuc21jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgaW1wYWN0IGlzIHVua25vd25cbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciBpbXBhY3QgaXMgdW5rbm93biIpOwogCQlicmVhazsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIG5vdCBpbXBhY3QgY3UgcGVyZm9ybWFuY2VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIG5vdCBpbXBhY3QgY3UgIgorCQkJInBlcmZvcm1hbmNlIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGUgIgorCQkJCSIweCV4IG9uIENVIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGVzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJub2RlcyAoMHgleC0weCV4KSBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNhbm5lbCBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoIDB4JXggb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwiCisJCQkJIiBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSIKKwkJCQkiIHBhdGggMHgleCBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UiCisJCQkJIiBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxpYnJhcnkgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImxpYnJhcnkgcGF0aCAweCV4IG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbGlicmFyeSBwYXRocyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibGlicmFyeSBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBDVVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gQ1UiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogU0lNIFNlcnZpY2VNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNtYyk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuc21jKTsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiSS9PIHN1YnN5c3RlbSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uIgorCQkiICVzLCBzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworb3V0X25vbWVtOgorCWtmcmVlKGV4Y2VwdGlvbik7CisJa2ZyZWUoc2VydmljZSk7CiB9CiAKIC8qCkBAIC0xMTYyLDExMSArMTE3MSwxMDkgQEAKIHRhcGVfMzU5MF9wcmludF9kZXZfc2ltX21zZ19mMihzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UiCisJCQkiIGltcGFjdCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBvbiBjaGFubmVsICIKKwkJCSJpbnRlcmZhY2UgMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBsb2FkZXIgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gb24gbG9hZGVyIDB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIG9uIG1lc3NhZ2UgZGlzcGxheSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBvbiBtZXNzYWdlIGRpc3BsYXkiCisJCQkiIDB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gaW4gdGFwZSBwYXRoXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBpbiB0YXBlIHBhdGgiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gaW4gZHJpdmVcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIGluIGRyaXZlIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERTSU0gRXhNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLmVtYyk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5lbWMpOwogCX0KIAkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLnNtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIGltcGFjdCBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgaW1wYWN0IGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGRldmljZSBwZXJmb3JtYW5jZVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgbm90IGltcGFjdCBkZXZpY2UgIgorCQkJInBlcmZvcm1hbmNlIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjaGFubmVsIHBhdGggIgotCQkJCSAgICIweCV4IG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJjaGFubmVsIHBhdGggMHgleCBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNoYW5uZWwgcGF0aCAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgaW50ZXJmYWNlIDB4JXggIgotCQkJCSAgICJvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiaW50ZXJmYWNlIDB4JXggb24gRFYiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgaW50ZXJmYWNlcyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiaW50ZXJmYWNlcyAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciAweCV4ICIKLQkJCQkgICAib24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIiCisJCQkJIiAweCV4IG9uIERWIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciIKKwkJCQkiICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIERWXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBEViIpOwogCQlicmVhazsKIAljYXNlIDB4MDg6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbWVzc2FnZSAiCi0JCQkJICAgImRpc3BsYXkgMHgleCBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibWVzc2FnZSBkaXNwbGF5IDB4JXggb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBtZXNzYWdlICIKLQkJCQkgICAiZGlzcGxheXMgKDB4JXgtMHgleCkgb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJtZXNzYWdlIGRpc3BsYXlzICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQkgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA5OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDbGVhbiBEVlxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJDbGVhbiBEViIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEU0lNIFNlcnZpY2VNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNtYyk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuc21jKTsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV2aWNlIHN1YnN5c3RlbSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uIgorCQkiICVzLCBzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworb3V0X25vbWVtOgorCWtmcmVlKGV4Y2VwdGlvbik7CisJa2ZyZWUoc2VydmljZSk7CiB9CiAKIC8qCkBAIC0xMjgyLDQ2ICsxMjg5LDQ0IEBACiAJCXJldHVybjsKIAlpZiAoKHNlbnNlLT5tYyA+IDApICYmIChzZW5zZS0+bWMgPCBUQVBFXzM1OTBfTUFYX01TRykpIHsKIAkJaWYgKHRhcGVfMzU5MF9tc2dbc2Vuc2UtPm1jXSAhPSBOVUxMKQotCQkJUFJJTlRfV0FSTigiKCVzKTogJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgdGFwZV8zNTkwX21zZ1tzZW5zZS0+bWNdKTsKLQkJZWxzZSB7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBNZXNzYWdlIENvZGUgMHgleFxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+bWMpOwotCQl9CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBoYXMgIgorCQkJCSJpc3N1ZWQgc2Vuc2UgbWVzc2FnZSAlc1xuIiwKKwkJCQl0YXBlXzM1OTBfbXNnW3NlbnNlLT5tY10pOworCQllbHNlCisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBoYXMgIgorCQkJCSJpc3N1ZWQgYW4gdW5rbm93biBzZW5zZSBtZXNzYWdlIGNvZGUgMHgleFxuIiwKKwkJCQlzZW5zZS0+bWMpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMCkgewogCQkvKiBTdGFuZGFyZCBNZWRpYSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTRVY9JWksIE1DPSUwMngsIEVTPSV4LyV4LCAiCi0JCQkgICAiUkM9JTAyeC0lMDR4LSUwMnhcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkgICBzZW5zZS0+Zm10LmY3MC5zZXYsIHNlbnNlLT5tYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLmVtYywgc2Vuc2UtPmZtdC5mNzAuc21jLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAucmVmY29kZSwgc2Vuc2UtPmZtdC5mNzAubWlkLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAuZmlkKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIk1JTSBTRVY9JWksIE1DPSUwMngsIEVTPSV4LyV4LCAiCisJCQkiUkM9JTAyeC0lMDR4LSUwMnhcbiIsIHNlbnNlLT5mbXQuZjcwLnNldiwgc2Vuc2UtPm1jLAorCQkJc2Vuc2UtPmZtdC5mNzAuZW1jLCBzZW5zZS0+Zm10LmY3MC5zbWMsCisJCQlzZW5zZS0+Zm10LmY3MC5yZWZjb2RlLCBzZW5zZS0+Zm10LmY3MC5taWQsCisJCQlzZW5zZS0+Zm10LmY3MC5maWQpOwogCQl0YXBlXzM1OTBfcHJpbnRfbWltX21zZ19mMChkZXZpY2UsIGlyYik7CiAJCXJldHVybjsKIAl9CiAJaWYgKHNlbnNlLT5tYyA9PSAweGYxKSB7CiAJCS8qIFN0YW5kYXJkIEkvTyBTdWJzeXN0ZW0gU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IElPU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngsICIKLQkJCSAgICJNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuc2V2LAotCQkJICAgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCi0JCQkgICBzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcxLnNtYywgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiSU9TSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCwiCisJCQkiIE1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCisJCQlzZW5zZS0+Zm10LmY3MS5zZXYsIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAorCQkJc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsIHNlbnNlLT5mbXQuZjcxLnNtYywKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKIAkJdGFwZV8zNTkwX3ByaW50X2lvX3NpbV9tc2dfZjEoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMikgewogCQkvKiBTdGFuZGFyZCBEZXZpY2UgU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IERFVlNJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4LCAiCi0JCQkgICAiTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNldiwKLQkJCSAgIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAotCQkJICAgc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5zbWMsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRFVlNJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4IgorCQkJIiwgTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNldiwgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCisJCQlzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywgc2Vuc2UtPmZtdC5mNzEuc21jLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOwogCQl0YXBlXzM1OTBfcHJpbnRfZGV2X3NpbV9tc2dfZjIoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTMyOSw4ICsxMzM0LDggQEAKIAkJLyogU3RhbmRhcmQgTGlicmFyeSBTZXJ2aWNlIEluZm9ybWF0aW9uIE1lc3NhZ2UgKi8KIAkJcmV0dXJuOwogCX0KLQlQUklOVF9XQVJOKCIoJXMpOiBEZXZpY2UgTWVzc2FnZSgleClcbiIsCi0JCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5tYyk7CisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaGFzIGlzc3VlZCBhbiB1bmtub3duICIKKwkJInNlbnNlIG1lc3NhZ2UgY29kZSAleFxuIiwgc2Vuc2UtPm1jKTsKIH0KIAogc3RhdGljIGludCB0YXBlXzM1OTBfY3J5cHRfZXJyb3Ioc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsCkBAIC0xMzU1LDkgKzEzNjAsOCBAQAogCQkvKiBObyBjb25uZWN0aW9uIHRvIEVLTSAqLwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT1RDT05OKTsKIAotCVBSSU5UX0VSUigiKCVzKTogVW5hYmxlIHRvIGdldCBlbmNyeXB0aW9uIGtleSBmcm9tIEVLTVxuIiwgYnVzX2lkKTsKLQlQUklOVF9FUlIoIiglcyk6IENVPSUwMlggRFJJVkU9JTA2WCBFS009JTAyWDolMDRYXG4iLCBidXNfaWQsIGN1X3JjLAotCQlkcnZfcmMsIGVrbV9yYzEsIGVrbV9yYzIpOworCWRldl9lcnIgKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZmFpbGVkIHRvIG9idGFpbiB0aGUgIgorCQkiZW5jcnlwdGlvbiBrZXkgZnJvbSBFS01cbiIpOwogCiAJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9LRVkpOwogfQpAQCAtMTQ0Myw4ICsxNDQ3LDYgQEAKIAkJICogcHJpbnQgYWRkaXRpb25hbCBtc2cgc2luY2UgZGVmYXVsdCBtc2cKIAkJICogImRldmljZSBpbnRlcnZlbnRpb24iIGlzIG5vdCB2ZXJ5IG1lYW5pbmdmdWxsCiAJCSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBUYXBlIG9wZXJhdGlvbiB3aGVuIG1lZGl1bSBub3QgbG9hZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX1VOTE9BREVEKTsKIAkJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19DUllQVF9PRkYpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT01FRElVTSk7CkBAIC0xNDkwLDE5ICsxNDkyLDEzIEBACiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PTUVESVVNKTsKIAogCWNhc2UgMHg2MDIwOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDYXJ0cmlkZ2Ugb2Ygd3JvbmcgdHlwZSA/XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU1FRElVTVRZUEUpOwogCiAJY2FzZSAweDgwMTE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEFub3RoZXIgaG9zdCBoYXMgcmVzZXJ2ZWQgdGhlIHRhcGUgZGV2aWNlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRVBFUk0pOwogCWNhc2UgMHg4MDEzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBBbm90aGVyIGhvc3QgaGFzIHByaXZpbGVnZWQgYWNjZXNzIHRvIHRoZSAiCi0JCQkgICAidGFwZSBkZXZpY2VcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQlQUklOVF9XQVJOKCIoJXMpOiBUbyBzb2x2ZSB0aGUgcHJvYmxlbSB1bmxvYWQgdGhlIGN1cnJlbnQgIgotCQkJICAgImNhcnRyaWRnZSFcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBkaWZmZXJlbnQgaG9zdCBoYXMgcHJpdmlsZWdlZCIKKwkJCSIgYWNjZXNzIHRvIHRoZSB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVQRVJNKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CkBAIC0xNTUyLDkgKzE1NDgsNyBAQAogCX0KIAogCURCRl9FVkVOVCg2LCAieHVua25vd25pcnFcbiIpOwotCVBSSU5UX0VSUigiVW5leHBlY3RlZCBpbnRlcnJ1cHQuXG4iKTsKLQlQUklOVF9FUlIoIkN1cnJlbnQgb3AgaXM6ICVzIiwgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7Ci0JdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKIAlyZXR1cm4gVEFQRV9JT19TVE9QOwogfQogCkBAIC0xNjA5LDcgKzE2MDMsNiBAQAogCWlmIChyYykKIAkJZ290byBmYWlsX3JkY19kYXRhOwogCWlmIChyZGNfZGF0YS0+ZGF0YVszMV0gPT0gMHgxMykgewotCQlQUklOVF9JTkZPKCJEZXZpY2UgaGFzIGNyeXB0byBzdXBwb3J0XG4iKTsKIAkJZGF0YS0+Y3J5cHRfaW5mby5jYXBhYmlsaXR5IHw9IFRBUEUzOTBfQ1JZUFRfU1VQUE9SVEVEX01BU0s7CiAJCXRhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0KGRldmljZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCBhZTE4YmFmLi5mMzJlODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKgkJIFN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMjMsOCArMjUsNiBAQAogCiAjaW5jbHVkZSAidGFwZS5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfQkxPQ0s6ICIKLQogI2RlZmluZSBUQVBFQkxPQ0tfTUFYX1NFQwkxMDAKICNkZWZpbmUgVEFQRUJMT0NLX01JTl9SRVFVRVVFCTMKIApAQCAtMjc5LDggKzI3OSw2IEBACiAJdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7CiAKIAlpZiAoIWRldmljZS0+YmxrX2RhdGEuZGlzaykgewotCQlQUklOVF9FUlIoIiglcyk6IE5vIGdlbmRpc2sgdG8gY2xlYW4gdXAhXG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWdvdG8gY2xlYW51cF9xdWV1ZTsKIAl9CiAKQEAgLTMxNCw3ICszMTIsOCBAQAogCWlmICghZGV2aWNlLT5ibGtfZGF0YS5tZWRpdW1fY2hhbmdlZCkKIAkJcmV0dXJuIDA7CiAKLQlQUklOVF9JTkZPKCJEZXRlY3RpbmcgbWVkaWEgc2l6ZS4uLlxuIik7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV0ZXJtaW5pbmcgdGhlIHNpemUgb2YgdGhlIHJlY29yZGVkICIKKwkJImFyZWEuLi5cbiIpOwogCXJjID0gdGFwZV9tdG9wKGRldmljZSwgTVRGU0ZNLCAxKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTM0MSw3ICszNDAsOCBAQAogCWRldmljZS0+Ym9mID0gcmM7CiAJbnJfb2ZfYmxrcyAtPSByYzsKIAotCVBSSU5UX0lORk8oIkZvdW5kICVpIGJsb2NrcyBvbiBtZWRpYVxuIiwgbnJfb2ZfYmxrcyk7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHNpemUgb2YgdGhlIHJlY29yZGVkIGFyZWEgaXMgJWkgIgorCQkiYmxvY2tzXG4iLCBucl9vZl9ibGtzKTsKIAlzZXRfY2FwYWNpdHkoZGV2aWNlLT5ibGtfZGF0YS5kaXNrLAogCQlucl9vZl9ibGtzKihUQVBFQkxPQ0tfSFNFQ19TSVpFLzUxMikpOwogCkBAIC0zNzYsOCArMzc2LDggQEAKIAogCWlmIChkZXZpY2UtPnJlcXVpcmVkX3RhcGVtYXJrcykgewogCQlEQkZfRVZFTlQoMiwgIlRCTE9DSzogbWlzc2luZyB0YXBlbWFya3NcbiIpOwotCQlQUklOVF9FUlIoIlRCTE9DSzogUmVmdXNpbmcgdG8gb3BlbiB0YXBlIHdpdGggbWlzc2luZyIKLQkJCSIgZW5kIG9mIGZpbGUgbWFya3MuXG4iKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiT3BlbmluZyB0aGUgdGFwZSBmYWlsZWQgYmVjYXVzZSIKKwkJCSIgb2YgbWlzc2luZyBlbmQtb2YtZmlsZSBtYXJrc1xuIik7CiAJCXJjID0gLUVQRVJNOwogCQlnb3RvIHB1dF9kZXZpY2U7CiAJfQpAQCAtNDUyLDcgKzQ1Miw2IEBACiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCVBSSU5UX1dBUk4oImludmFsaWQgaW9jdGwgMHgleFxuIiwgY29tbWFuZCk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJfQogCkBAIC00NzQsNyArNDczLDYgQEAKIAogCWlmICh0YXBlYmxvY2tfbWFqb3IgPT0gMCkKIAkJdGFwZWJsb2NrX21ham9yID0gcmM7Ci0JUFJJTlRfSU5GTygidGFwZSBnZXRzIG1ham9yICVkIGZvciBibG9jayBkZXZpY2VcbiIsIHRhcGVibG9ja19tYWpvcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKaW5kZXggYmUwY2UyMi4uMzE1NjZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKQEAgLTI0LDggKzI0LDYgQEAKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogI2luY2x1ZGUgInRhcGVfY2xhc3MuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0NIQVI6ICIKLQogI2RlZmluZSBUQVBFQ0hBUl9NQUpPUgkJMAkvKiBnZXQgZHluYW1pYyBtYWpvciAqLwogCiAvKgpAQCAtMTAyLDggKzEwMCw2IEBACiAJaWYgKGJsb2NrX3NpemUgPiBNQVhfQkxPQ0tTSVpFKSB7CiAJCURCRl9FVkVOVCgzLCAiSW52YWxpZCBibG9ja3NpemUgKCV6ZCA+ICVkKVxuIiwKIAkJCWJsb2NrX3NpemUsIE1BWF9CTE9DS1NJWkUpOwotCQlQUklOVF9FUlIoIkludmFsaWQgYmxvY2tzaXplICglemQ+ICVkKVxuIiwKLQkJCWJsb2NrX3NpemUsIE1BWF9CTE9DS1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ4NSw3ICs0ODEsNiBAQAogCQlyZXR1cm4gLTE7CiAKIAl0YXBlY2hhcl9tYWpvciA9IE1BSk9SKGRldik7Ci0JUFJJTlRfSU5GTygidGFwZSBnZXRzIG1ham9yICVkIGZvciBjaGFyYWN0ZXIgZGV2aWNlc1xuIiwgTUFKT1IoZGV2KSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5Niw3ICs0OTEsNSBAQAogdm9pZAogdGFwZWNoYXJfZXhpdCh2b2lkKQogewotCVBSSU5UX0lORk8oInRhcGUgcmVsZWFzZXMgbWFqb3IgJWQgZm9yIGNoYXJhY3RlciBkZXZpY2VzXG4iLAotCQl0YXBlY2hhcl9tYWpvcik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKHRhcGVjaGFyX21ham9yLCAwKSwgMjU2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggZjliYjUxZi4uMDhjMDlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CSAgICAgLy8gZm9yIGtlcm5lbCBwYXJhbWV0ZXJzCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgkgICAgIC8vIGZvciByZXF1ZXN0aW5nIG1vZHVsZXMKQEAgLTI1LDcgKzI2LDYgQEAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0NPUkU6ICIKICNkZWZpbmUgTE9OR19CVVNZX1RJTUVPVVQgMTgwIC8qIHNlY29uZHMgKi8KIAogc3RhdGljIHZvaWQgX190YXBlX2RvX2lycSAoc3RydWN0IGNjd19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGlyYiAqKTsKQEAgLTIxNCwxMyArMjE0LDEzIEBACiAJc3dpdGNoKG5ld3N0YXRlKXsKIAljYXNlIE1TX1VOTE9BREVEOgogCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgfD0gR01UX0RSX09QRU4ofjApOwotCQlQUklOVF9JTkZPKCIoJXMpOiBUYXBlIGlzIHVubG9hZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGNhcnRyaWRnZSBoYXMgYmVlbiAiCisJCQkic3VjY2Vzc2Z1bGx5IHVubG9hZGVkXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBNU19MT0FERUQ6CiAJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyAmPSB+R01UX0RSX09QRU4ofjApOwotCQlQUklOVF9JTkZPKCIoJXMpOiBUYXBlIGhhcyBiZWVuIG1vdW50ZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSB0YXBlIGNhcnRyaWRnZSBoYXMgYmVlbiAiCisJCQkibW91bnRlZFxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8vIHByaW50IG5vdGhpbmcKQEAgLTMzMyw3ICszMzMsNiBAQAogCS8qIExldCB0aGUgZGlzY2lwbGluZSBoYXZlIGEgZ28gYXQgdGhlIGRldmljZS4gKi8KIAlkZXZpY2UtPmRpc2NpcGxpbmUgPSBkaXNjaXBsaW5lOwogCWlmICghdHJ5X21vZHVsZV9nZXQoZGlzY2lwbGluZS0+b3duZXIpKSB7Ci0JCVBSSU5UX0VSUigiQ2Fubm90IGdldCBtb2R1bGUuIE1vZHVsZSBnb25lLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzkxLDcgKzM5MCw2IEBACiB0YXBlX2dlbmVyaWNfb2ZmbGluZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlpZiAoIWRldmljZSkgewotCQlQUklOVF9FUlIoInRhcGVfZ2VuZXJpY19vZmZsaW5lOiBubyBzdWNoIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDEzLDkgKzQxMSw2IEBACiAJCQlEQkZfRVZFTlQoMywgIiglMDh4KTogU2V0IG9mZmxpbmUgZmFpbGVkICIKIAkJCQkiLSBkcml2ZSBpbiB1c2UuXG4iLAogCQkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBTZXQgb2ZmbGluZSBmYWlsZWQgIgotCQkJCSItIGRyaXZlIGluIHVzZS5cbiIsCi0JCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC00MzUsMTQgKzQzMCwxMSBAQAogCWRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0YXBlX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwotCQlQUklOVF9JTkZPICgiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCi0JCQkgICAgInRhcGUgaW5mbyBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAJZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwotCQlQUklOVF9JTkZPKCJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1vZGVzZXQgYnl0ZVxuIik7CiAJCWtmcmVlKGRldmljZSk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KQEAgLTQ5MCw3ICs0ODIsNiBAQAogCX0gZWxzZSB7CiAJCWlmIChyZW1haW4gPCAwKSB7CiAJCQlEQkZfRVZFTlQoNCwgInB1dCBkZXZpY2Ugd2l0aG91dCByZWZlcmVuY2VcbiIpOwotCQkJUFJJTlRfRVJSKCJwdXQgZGV2aWNlIHdpdGhvdXQgcmVmZXJlbmNlXG4iKTsKIAkJfSBlbHNlIHsKIAkJCURCRl9FVkVOVCg0LCAidGFwZV9mcmVlX2RldmljZSglcClcbiIsIGRldmljZSk7CiAJCQlrZnJlZShkZXZpY2UtPm1vZGVzZXRfYnl0ZSk7CkBAIC01MzgsOCArNTI5LDYgQEAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNkZXYtPmRldi5rb2JqLCAmdGFwZV9hdHRyX2dyb3VwKTsKIAlpZiAocmV0KSB7CiAJCXRhcGVfcHV0X2RldmljZShkZXZpY2UpOwotCQlQUklOVF9FUlIoInByb2JlIGZhaWxlZCBmb3IgdGFwZSBkZXZpY2UgJXNcbiIsCi0JCQkgIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJY2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gZGV2aWNlOwpAQCAtNTQ3LDcgKzUzNiw2IEBACiAJZGV2aWNlLT5jZGV2ID0gY2RldjsKIAljY3dfZGV2aWNlX2dldF9pZChjZGV2LCAmZGV2X2lkKTsKIAlkZXZpY2UtPmNkZXZfaWQgPSBkZXZpZF90b19pbnQoJmRldl9pZCk7Ci0JUFJJTlRfSU5GTygidGFwZSBkZXZpY2UgJXMgZm91bmRcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODQsNyArNTcyLDYgQEAKIAogCWRldmljZSA9IGNkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoIWRldmljZSkgewotCQlQUklOVF9FUlIoIk5vIGRldmljZSBwb2ludGVyIGluIHRhcGVfZ2VuZXJpY19yZW1vdmUhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlEQkZfTEgoMywgIiglMDh4KTogdGFwZV9nZW5lcmljX3JlbW92ZSglcClcbiIsIGRldmljZS0+Y2Rldl9pZCwgY2Rldik7CkBAIC02MTUsMTAgKzYwMiw4IEBACiAJCQkgKi8KIAkJCURCRl9FVkVOVCgzLCAiKCUwOHgpOiBEcml2ZSBpbiB1c2UgdmFuaXNoZWQhXG4iLAogCQkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBEcml2ZSBpbiB1c2UgdmFuaXNoZWQgLSAiCi0JCQkJImV4cGVjdCB0cm91YmxlIVxuIiwKLQkJCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJCVBSSU5UX1dBUk4oIlN0YXRlIHdhcyAlaVxuIiwgZGV2aWNlLT50YXBlX3N0YXRlKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgdGFwZSB1bml0IHdhcyBkZXRhY2hlZCIKKwkJCQkiIHdoaWxlIGluIHVzZVxuIik7CiAJCQl0YXBlX3N0YXRlX3NldChkZXZpY2UsIFRTX05PVF9PUEVSKTsKIAkJCV9fdGFwZV9kaXNjYXJkX3JlcXVlc3RzKGRldmljZSk7CiAJCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwpAQCAtNjM5LDggKzYyNCw3IEBACiB7CiAJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmIChkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fCAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpCi0JCUJVRygpOworCUJVR19PTihkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fCAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpOwogCiAJREJGX0xIKDYsICJ0YXBlX2FsbG9jX3JlcXVlc3QoJWQsICVkKVxuIiwgY3BsZW5ndGgsIGRhdGFzaXplKTsKIApAQCAtNzk3LDggKzc4MSw3IEBACiAJZGV2aWNlID0gKHN0cnVjdCB0YXBlX2RldmljZSAqKSBkYXRhOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGRldmljZS0+cmVxX3F1ZXVlLm5leHQsIHN0cnVjdCB0YXBlX3JlcXVlc3QsIGxpc3QpOwotCWlmIChyZXF1ZXN0LT5zdGF0dXMgIT0gVEFQRV9SRVFVRVNUX0xPTkdfQlVTWSkKLQkJQlVHKCk7CisJQlVHX09OKHJlcXVlc3QtPnN0YXR1cyAhPSBUQVBFX1JFUVVFU1RfTE9OR19CVVNZKTsKIAlEQkZfTEgoNiwgIiUwOHg6IExvbmcgYnVzeSB0aW1lb3V0LlxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKIAlfX3RhcGVfc3RhcnRfbmV4dF9yZXF1ZXN0KGRldmljZSk7CiAJZGV2aWNlLT5sYl90aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7CkBAIC04MzAsMzAgKzgxMyw2IEBACiB9CiAKIC8qCi0gKiBXcml0ZSBzZW5zZSBkYXRhIHRvIGNvbnNvbGUvZGJmCi0gKi8KLXZvaWQKLXRhcGVfZHVtcF9zZW5zZShzdHJ1Y3QgdGFwZV9kZXZpY2UqIGRldmljZSwgc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCwKLQkJc3RydWN0IGlyYiAqaXJiKQotewotCXVuc2lnbmVkIGludCAqc3B0cjsKLQotCVBSSU5UX0lORk8oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCVBSSU5UX0lORk8oIkRTVEFUIDogJTAyeCAgQ1NUQVQ6ICUwMngJQ1BBOiAlMDR4XG4iLAotCQkgICBpcmItPnNjc3cuY21kLmRzdGF0LCBpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmNwYSk7Ci0JUFJJTlRfSU5GTygiREVWSUNFOiAlc1xuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JaWYgKHJlcXVlc3QgIT0gTlVMTCkKLQkJUFJJTlRfSU5GTygiT1AJICA6ICVzXG4iLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQotCXNwdHIgPSAodW5zaWduZWQgaW50ICopIGlyYi0+ZWN3OwotCVBSSU5UX0lORk8oIlNlbnNlIGRhdGE6ICUwOFggJTA4WCAlMDhYICUwOFggXG4iLAotCQkgICBzcHRyWzBdLCBzcHRyWzFdLCBzcHRyWzJdLCBzcHRyWzNdKTsKLQlQUklOVF9JTkZPKCJTZW5zZSBkYXRhOiAlMDhYICUwOFggJTA4WCAlMDhYIFxuIiwKLQkJICAgc3B0cls0XSwgc3B0cls1XSwgc3B0cls2XSwgc3B0cls3XSk7Ci0JUFJJTlRfSU5GTygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotfQotCi0vKgogICogV3JpdGUgc2Vuc2UgZGF0YSB0byBkYmYKICAqLwogdm9pZApAQCAtMTA1MSw4ICsxMDEwLDYgQEAKIAogCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgY2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewotCQlQUklOVF9FUlIoImNvdWxkIG5vdCBnZXQgZGV2aWNlIHN0cnVjdHVyZSBmb3IgJXMgIgotCQkJICAiaW4gaW50ZXJydXB0XG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAJcmVxdWVzdCA9IChzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICopIGludHBhcm07CkBAIC0xMDY0LDEzICsxMDIxLDEzIEBACiAJCS8qIEZJWE1FOiBXaGF0IHRvIGRvIHdpdGggdGhlIHJlcXVlc3Q/ICovCiAJCXN3aXRjaCAoUFRSX0VSUihpcmIpKSB7CiAJCQljYXNlIC1FVElNRURPVVQ6Ci0JCQkJUFJJTlRfV0FSTigiKCVzKTogUmVxdWVzdCB0aW1lZCBvdXRcbiIsCisJCQkJREJGX0xIKDEsICIoJXMpOiBSZXF1ZXN0IHRpbWVkIG91dFxuIiwKIAkJCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJY2FzZSAtRUlPOgogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIC1FSU8pOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlQUklOVF9FUlIoIiglcyk6IFVuZXhwZWN0ZWQgaS9vIGVycm9yICVsaVxuIiwKKwkJCQlEQkZfTEgoMSwgIiglcyk6IFVuZXhwZWN0ZWQgaS9vIGVycm9yICVsaVxuIiwKIAkJCQkJZGV2X25hbWUoJmNkZXYtPmRldiksCiAJCQkJCVBUUl9FUlIoaXJiKSk7CiAJCX0KQEAgLTExODIsOCArMTEzOSw2IEBACiAJCWRlZmF1bHQ6CiAJCQlpZiAocmMgPiAwKSB7CiAJCQkJREJGX0VWRU5UKDYsICJ4dW5rbm93bnJjXG4iKTsKLQkJCQlQUklOVF9FUlIoIkludmFsaWQgcmV0dXJuIGNvZGUgZnJvbSBkaXNjaXBsaW5lICIKLQkJCQkgIAkiaW50ZXJydXB0IGZ1bmN0aW9uLlxuIik7CiAJCQkJX190YXBlX2VuZF9yZXF1ZXN0KGRldmljZSwgcmVxdWVzdCwgLUVJTyk7CiAJCQl9IGVsc2UgewogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIHJjKTsKQEAgLTEzMjMsNyArMTI3OCw2IEBACiBFWFBPUlRfU1lNQk9MKHRhcGVfbWVkX3N0YXRlX3NldCk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfYWxsb2NfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZnJlZV9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0wodGFwZV9kdW1wX3NlbnNlKTsKIEVYUE9SVF9TWU1CT0wodGFwZV9kdW1wX3NlbnNlX2RiZik7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZG9faW8pOwogRVhQT1JUX1NZTUJPTCh0YXBlX2RvX2lvX2FzeW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKaW5kZXggOGEzNzZhZi4uMjAyZjQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKQEAgLTIwLDggKzIwLDYgQEAKIAogI2luY2x1ZGUgInRhcGUuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX1BST0M6ICIKLQogc3RhdGljIGNvbnN0IGNoYXIgKnRhcGVfbWVkX3N0X3ZlcmJvc2VbTVNfU0laRV0gPQogewogCVtNU19VTktOT1dOXSA9ICJVTktOT1dOICIsCkBAIC0xMjgsNyArMTI2LDYgQEAKIAkJcHJvY19jcmVhdGUoInRhcGVkZXZpY2VzIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMLAogCQkJICAgICZ0YXBlX3Byb2Nfb3BzKTsKIAlpZiAodGFwZV9wcm9jX2RldmljZXMgPT0gTlVMTCkgewotCQlQUklOVF9XQVJOKCJ0YXBlOiBDYW5ub3QgcmVnaXN0ZXIgcHJvY2ZzIGVudHJ5IHRhcGVkZXZpY2VzXG4iKTsKIAkJcmV0dXJuOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCmluZGV4IDViZDU3M2QuLjFhOTQyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfU1REOiAiCi0KIC8qCiAgKiB0YXBlX3N0ZF9hc3NpZ24KICAqLwpAQCAtMzksMTYgKzM3LDE1IEBACiAJaW50IHJjOwogCiAJcmVxdWVzdCA9IChzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICopIGRhdGE7Ci0JaWYgKChkZXZpY2UgPSByZXF1ZXN0LT5kZXZpY2UpID09IE5VTEwpCi0JCUJVRygpOworCWRldmljZSA9IHJlcXVlc3QtPmRldmljZTsKKwlCVUdfT04oIWRldmljZSk7CiAKIAlEQkZfRVZFTlQoMywgIiUwOHg6IEFzc2lnbm1lbnQgdGltZW91dC4gRGV2aWNlIGJ1c3kuXG4iLAogCQkJZGV2aWNlLT5jZGV2X2lkKTsKIAlyYyA9IHRhcGVfY2FuY2VsX2lvKGRldmljZSwgcmVxdWVzdCk7CiAJaWYocmMpCi0JCVBSSU5UX0VSUigiKCVzKTogQXNzaWduIHRpbWVvdXQ6IENhbmNlbCBmYWlsZWQgd2l0aCByYyA9ICVpXG4iLAorCQlEQkZfRVZFTlQoMywgIiglcyk6IEFzc2lnbiB0aW1lb3V0OiBDYW5jZWwgZmFpbGVkIHdpdGggcmMgPSAlaVxuIiwKIAkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKLQogfQogCiBpbnQKQEAgLTgyLDggKzc5LDYgQEAKIAlkZWxfdGltZXIoJnRpbWVvdXQpOwogCiAJaWYgKHJjICE9IDApIHsKLQkJUFJJTlRfV0FSTigiJXM6IGFzc2lnbiBmYWlsZWQgLSBkZXZpY2UgbWlnaHQgYmUgYnVzeVxuIiwKLQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlEQkZfRVZFTlQoMywgIiUwOHg6IGFzc2lnbiBmYWlsZWQgLSBkZXZpY2UgbWlnaHQgYmUgYnVzeVxuIiwKIAkJCWRldmljZS0+Y2Rldl9pZCk7CiAJfSBlbHNlIHsKQEAgLTEwNSw4ICsxMDAsNiBAQAogCWlmIChkZXZpY2UtPnRhcGVfc3RhdGUgPT0gVFNfTk9UX09QRVIpIHsKIAkJREJGX0VWRU5UKDMsICIoJTA4eCk6IENhbid0IHVuYXNzaWduIGRldmljZVxuIiwKIAkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENhbid0IHVuYXNzaWduIGRldmljZSAtIGRldmljZSBnb25lXG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTIwLDggKzExMyw2IEBACiAKIAlpZiAoKHJjID0gdGFwZV9kb19pbyhkZXZpY2UsIHJlcXVlc3QpKSAhPSAwKSB7CiAJCURCRl9FVkVOVCgzLCAiJTA4eDogVW5hc3NpZ24gZmFpbGVkXG4iLCBkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCIlczogVW5hc3NpZ24gZmFpbGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJfSBlbHNlIHsKIAkJREJGX0VWRU5UKDMsICIlMDh4OiBUYXBlIHVuYXNzaWduZWRcbiIsIGRldmljZS0+Y2Rldl9pZCk7CiAJfQpAQCAtMjQyLDggKzIzMyw2IEBACiAJaWYgKGNvdW50ID4gTUFYX0JMT0NLU0laRSkgewogCQlEQkZfRVZFTlQoMywgIkludmFsaWQgYmxvY2sgc2l6ZSAoJWQgPiAlZCkgZ2l2ZW4uXG4iLAogCQkJY291bnQsIE1BWF9CTE9DS1NJWkUpOwotCQlQUklOVF9FUlIoIkludmFsaWQgYmxvY2sgc2l6ZSAoJWQgPiAlZCkgZ2l2ZW4uXG4iLAotCQkJY291bnQsIE1BWF9CTE9DS1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTYzMywxNCArNjIyLDYgQEAKIAogCWlmIChtdF9jb3VudCA8IDAgfHwgbXRfY291bnQgPiAxKSB7CiAJCURCRl9FWENFUFRJT04oNiwgInhjb20gcGFybVxuIik7Ci0JCWlmICgqZGV2aWNlLT5tb2Rlc2V0X2J5dGUgJiAweDA4KQotCQkJUFJJTlRfSU5GTygiKCVzKSBDb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgb25cbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCWVsc2UKLQkJCVBSSU5UX0lORk8oIiglcykgQ29tcHJlc3Npb24gaXMgY3VycmVudGx5IG9mZlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJUFJJTlRfSU5GTygiVXNlIDEgdG8gc3dpdGNoIGNvbXByZXNzaW9uIG9uLCAwIHRvICIKLQkJCSAgICJzd2l0Y2ggaXQgb2ZmXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYwppbmRleCBlZWZjNjYxLi4xYmJhZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vczM5MC96ZmNwZHVtcC50eHQKICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwNworICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDgKICAqIEF1dGhvcihzKTogTWljaGFlbCBIb2x6aGV1CiAgKi8KIApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlICJzY2xwLmgiCiAKICNkZWZpbmUgVFJBQ0UoeC4uLikgZGVidWdfc3ByaW50Zl9ldmVudCh6Y29yZV9kYmYsIDEsIHgpCkBAIC00OCwxMiArNDksMTkgQEAKIAl1bmlvbiBzYXZlX2FyZWEJbGNfbWFzazsKIH07CiAKK3N0cnVjdCBpcGliX2luZm8geworCXVuc2lnbmVkIGxvbmcJaXBpYjsKKwl1MzIJCWNoZWNrc3VtOworfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2luZm8gc3lzX2luZm87CiBzdGF0aWMgc3RydWN0IGRlYnVnX2luZm8gKnpjb3JlX2RiZjsKIHN0YXRpYyBpbnQgaHNhX2F2YWlsYWJsZTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9kaXI7CiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqemNvcmVfZmlsZTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9tZW1tYXBfZmlsZTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9yZWlwbF9maWxlOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICppcGxfYmxvY2s7CiAKIC8qCiAgKiBDb3B5IG1lbW9yeSBmcm9tIEhTQSB0byBrZXJuZWwgb3IgdXNlciBtZW1vcnkgKG5vdCByZWVudHJhbnQpOgpAQCAtNTI3LDYgKzUzNSwzMyBAQAogCS5yZWxlYXNlCT0gemNvcmVfbWVtbWFwX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgc3NpemVfdCB6Y29yZV9yZWlwbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKGlwbF9ibG9jaykgeworCQlkaWFnMzA4KERJQUczMDhfU0VULCBpcGxfYmxvY2spOworCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHpjb3JlX3JlaXBsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemNvcmVfcmVpcGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemNvcmVfcmVpcGxfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IHpjb3JlX3JlaXBsX3dyaXRlLAorCS5vcGVuCQk9IHpjb3JlX3JlaXBsX29wZW4sCisJLnJlbGVhc2UJPSB6Y29yZV9yZWlwbF9yZWxlYXNlLAorfTsKKwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3MzOTBfbGNfbWFzayh1bmlvbiBzYXZlX2FyZWEgKm1hcCkKIHsKQEAgLTY0NSw2ICs2ODAsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFByb3ZpZGUgSVBMIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBibG9jayBmcm9tIGVpdGhlciBIU0Egb3IgbWVtb3J5CisgKiBmb3IgZnV0dXJlIHJlaXBsCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHpjb3JlX3JlaXBsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXBpYl9pbmZvIGlwaWJfaW5mbzsKKwlpbnQgcmM7CisKKwlyYyA9IG1lbWNweV9oc2Ffa2VybmVsKCZpcGliX2luZm8sIF9fTENfRFVNUF9SRUlQTCwgc2l6ZW9mKGlwaWJfaW5mbykpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWlmIChpcGliX2luZm8uaXBpYiA9PSAwKQorCQlyZXR1cm4gMDsKKwlpcGxfYmxvY2sgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFpcGxfYmxvY2spCisJCXJldHVybiAtRU5PTUVNOworCWlmIChpcGliX2luZm8uaXBpYiA8IFpGQ1BEVU1QX0hTQV9TSVpFKQorCQlyYyA9IG1lbWNweV9oc2Ffa2VybmVsKGlwbF9ibG9jaywgaXBpYl9pbmZvLmlwaWIsIFBBR0VfU0laRSk7CisJZWxzZQorCQlyYyA9IG1lbWNweV9yZWFsKGlwbF9ibG9jaywgaXBpYl9pbmZvLmlwaWIsIFBBR0VfU0laRSk7CisJaWYgKHJjKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXBsX2Jsb2NrKTsKKwkJcmV0dXJuIHJjOworCX0KKwlpZiAoY3N1bV9wYXJ0aWFsKGlwbF9ibG9jaywgaXBsX2Jsb2NrLT5oZHIubGVuLCAwKSAhPQorCSAgICBpcGliX2luZm8uY2hlY2tzdW0pIHsKKwkJVFJBQ0UoIkNoZWNrc3VtIGRvZXMgbm90IG1hdGNoXG4iKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCQlpcGxfYmxvY2sgPSBOVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgemNvcmVfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgYXJjaDsKQEAgLTY5MCw2ICs3NTksMTAgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDsKIAorCXJjID0gemNvcmVfcmVpcGxfaW5pdCgpOworCWlmIChyYykKKwkJZ290byBmYWlsOworCiAJemNvcmVfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ6Y29yZSIgLCBOVUxMKTsKIAlpZiAoIXpjb3JlX2RpcikgewogCQlyYyA9IC1FTk9NRU07CkBAIC03MDcsOSArNzgwLDE3IEBACiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2ZpbGU7CiAJfQorCXpjb3JlX3JlaXBsX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWlwbCIsIFNfSVJVU1IsIHpjb3JlX2RpciwKKwkJCQkJCU5VTEwsICZ6Y29yZV9yZWlwbF9mb3BzKTsKKwlpZiAoIXpjb3JlX3JlaXBsX2ZpbGUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbWVtbWFwX2ZpbGU7CisJfQogCWhzYV9hdmFpbGFibGUgPSAxOwogCXJldHVybiAwOwogCitmYWlsX21lbW1hcF9maWxlOgorCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX21lbW1hcF9maWxlKTsKIGZhaWxfZmlsZToKIAlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9maWxlKTsKIGZhaWxfZGlyOgpAQCAtNzIzLDEwICs4MDQsMTUgQEAKIHsKIAlkZWJ1Z191bnJlZ2lzdGVyKHpjb3JlX2RiZik7CiAJc2NscF9zZGlhc19leGl0KCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX3JlaXBsX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX21lbW1hcF9maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9kaXIpOwogCWRpYWczMDgoRElBRzMwOF9SRUxfSFNBLCBOVUxMKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDciKTsKK01PRFVMRV9BVVRIT1IoIkNvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDA4Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oInpjb3JlIG1vZHVsZSBmb3IgemZjcGR1bXAgc3VwcG9ydCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQppbmRleCBiZDc5YmQxLi5hZGIzZGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai15ICs9IGFpcnEubyBibGFja2xpc3QubyBjaHNjLm8gY2lvLm8gY3NzLm8gY2hwLm8gaWRzZXQubyBpc2MubyBzY3N3Lm8gXAotCWZjeC5vIGl0Y3cubworCWZjeC5vIGl0Y3cubyBjcncubwogY2N3X2RldmljZS1vYmpzICs9IGRldmljZS5vIGRldmljZV9mc20ubyBkZXZpY2Vfb3BzLm8KIGNjd19kZXZpY2Utb2JqcyArPSBkZXZpY2VfaWQubyBkZXZpY2VfcGdpZC5vIGRldmljZV9zdGF0dXMubwogb2JqLXkgKz0gY2N3X2RldmljZS5vIGNtZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCmluZGV4IGZlNmNlYTEuLjY1ZDJlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCkBAIC0zNCw4ICszNCw4IEBACiAJdm9pZCAqZHJ2X2RhdGE7CiB9OwogCi1zdGF0aWMgdW5pb24gaW5kaWNhdG9yX3QgaW5kaWNhdG9yc1tNQVhfSVNDXTsKLXN0YXRpYyBzdHJ1Y3QgYWlycV90ICphaXJxc1tNQVhfSVNDXVtOUl9BSVJRU107CitzdGF0aWMgdW5pb24gaW5kaWNhdG9yX3QgaW5kaWNhdG9yc1tNQVhfSVNDKzFdOworc3RhdGljIHN0cnVjdCBhaXJxX3QgKmFpcnFzW01BWF9JU0MrMV1bTlJfQUlSUVNdOwogCiBzdGF0aWMgaW50IHJlZ2lzdGVyX2FpcnEoc3RydWN0IGFpcnFfdCAqYWlycSwgdTggaXNjKQogewpAQCAtMTMzLDYgKzEzMyw4IEBACiAJCXdoaWxlICh3b3JkKSB7CiAJCQlpZiAod29yZCAmIElORElDQVRPUl9NQVNLKSB7CiAJCQkJYWlycSA9IGFpcnFzW2lzY11baV07CisJCQkJLyogTWFrZSBzdXJlIGdjYyByZWFkcyBmcm9tIGFpcnFzIG9ubHkgb25jZS4gKi8KKwkJCQliYXJyaWVyKCk7CiAJCQkJaWYgKGxpa2VseShhaXJxKSkKIAkJCQkJYWlycS0+aGFuZGxlcigmaW5kaWNhdG9yc1tpc2NdLmJ5dGVbaV0sCiAJCQkJCQkgICAgICBhaXJxLT5kcnZfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwppbmRleCBmZTAwYmUzLi42NTY1ZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKQEAgLTMzNiw4ICszMzYsNyBAQAogCQkgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldCkKIHsKIAljaGFyICpidWY7Ci0Jc2l6ZV90IGk7Ci0Jc3NpemVfdCByYywgcmV0OworCXNzaXplX3QgcmMsIHJldCwgaTsKIAogCWlmICgqb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYwppbmRleCA5MThlNmZjLi4yMmNlNzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCkBAIC0xMDQsOCArMTA0LDkgQEAKIAlyYyA9IGRldmljZV9zY2hlZHVsZV9jYWxsYmFjayhkZXYsIGNjd2dyb3VwX3VuZ3JvdXBfY2FsbGJhY2spOwogb3V0OgogCWlmIChyYykgewotCQkvKiBSZWxlYXNlIG9ub2ZmICJsb2NrIiB3aGVuIHVuZ3JvdXBpbmcgZmFpbGVkLiAqLwotCQlhdG9taWNfc2V0KCZnZGV2LT5vbm9mZiwgMCk7CisJCWlmIChyYyAhPSAtRUFHQUlOKQorCQkJLyogUmVsZWFzZSBvbm9mZiAibG9jayIgd2hlbiB1bmdyb3VwaW5nIGZhaWxlZC4gKi8KKwkJCWF0b21pY19zZXQoJmdkZXYtPm9ub2ZmLCAwKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlyZXR1cm4gY291bnQ7CkBAIC0zMTQsMTYgKzMxNSwzMiBAQAogfQogRVhQT1JUX1NZTUJPTChjY3dncm91cF9jcmVhdGVfZnJvbV9zdHJpbmcpOwogCi1zdGF0aWMgaW50IF9faW5pdAotaW5pdF9jY3dncm91cCAodm9pZCkKK3N0YXRpYyBpbnQgY2N3Z3JvdXBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgICAgIHZvaWQgKmRhdGEpOworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNjd2dyb3VwX25iID0geworCS5ub3RpZmllcl9jYWxsID0gY2N3Z3JvdXBfbm90aWZpZXIKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfY2N3Z3JvdXAodm9pZCkKIHsKLQlyZXR1cm4gYnVzX3JlZ2lzdGVyICgmY2N3Z3JvdXBfYnVzX3R5cGUpOworCWludCByZXQ7CisKKwlyZXQgPSBidXNfcmVnaXN0ZXIoJmNjd2dyb3VwX2J1c190eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZjY3dncm91cF9idXNfdHlwZSwgJmNjd2dyb3VwX25iKTsKKwlpZiAocmV0KQorCQlidXNfdW5yZWdpc3RlcigmY2N3Z3JvdXBfYnVzX3R5cGUpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0Ci1jbGVhbnVwX2Njd2dyb3VwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfY2N3Z3JvdXAodm9pZCkKIHsKLQlidXNfdW5yZWdpc3RlciAoJmNjd2dyb3VwX2J1c190eXBlKTsKKwlidXNfdW5yZWdpc3Rlcl9ub3RpZmllcigmY2N3Z3JvdXBfYnVzX3R5cGUsICZjY3dncm91cF9uYik7CisJYnVzX3VucmVnaXN0ZXIoJmNjd2dyb3VwX2J1c190eXBlKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9jY3dncm91cCk7CkBAIC0zOTEsMjcgKzQwOCwyOCBAQAogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IHJldDsKIAotCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwogCWlmICghZGV2LT5kcml2ZXIpCi0JCXJldHVybiBjb3VudDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYgKGdkZXYtPmRldi5kcml2ZXIpOworCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOworCWdkcnYgPSB0b19jY3dncm91cGRydihkZXYtPmRyaXZlcik7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGdkcnYtPm93bmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JcmV0ID0gY291bnQ7CisKIAlpZiAodmFsdWUgPT0gMSkKLQkJY2N3Z3JvdXBfc2V0X29ubGluZShnZGV2KTsKKwkJcmV0ID0gY2N3Z3JvdXBfc2V0X29ubGluZShnZGV2KTsKIAllbHNlIGlmICh2YWx1ZSA9PSAwKQotCQljY3dncm91cF9zZXRfb2ZmbGluZShnZGV2KTsKKwkJcmV0ID0gY2N3Z3JvdXBfc2V0X29mZmxpbmUoZ2Rldik7CiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogb3V0OgogCW1vZHVsZV9wdXQoZ2Rydi0+b3duZXIpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIChyZXQgPT0gMCkgPyBjb3VudCA6IHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTQ1MywxMyArNDcxLDE4IEBACiAJc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldjsKIAlzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyICpnZHJ2OwogCisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX29ubGluZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VuZ3JvdXApOworCisJaWYgKCFkZXYtPmRyaXZlcikKKwkJcmV0dXJuIDA7CisKIAlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKIAlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYoZGV2LT5kcml2ZXIpOwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX29ubGluZSk7Ci0KLQlpZiAoZ2RydiAmJiBnZHJ2LT5yZW1vdmUpCisJaWYgKGdkcnYtPnJlbW92ZSkKIAkJZ2Rydi0+cmVtb3ZlKGdkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2OCw5ICs0OTEsMTMgQEAKIAlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OwogCXN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmdkcnY7CiAKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm47CisKIAlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKIAlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYoZGV2LT5kcml2ZXIpOwotCWlmIChnZHJ2ICYmIGdkcnYtPnNodXRkb3duKQorCisJaWYgKGdkcnYtPnNodXRkb3duKQogCQlnZHJ2LT5zaHV0ZG93bihnZGV2KTsKIH0KIApAQCAtNDgzLDYgKzUxMCwxOSBAQAogCS5zaHV0ZG93biA9IGNjd2dyb3VwX3NodXRkb3duLAogfTsKIAorCitzdGF0aWMgaW50IGNjd2dyb3VwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfVU5CSU5EX0RSSVZFUikKKwkJZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrKGRldiwgY2N3Z3JvdXBfdW5ncm91cF9jYWxsYmFjayk7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCisKIC8qKgogICogY2N3Z3JvdXBfZHJpdmVyX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIGNjdyBncm91cCBkcml2ZXIKICAqIEBjZHJpdmVyOiBkcml2ZXIgdG8gYmUgcmVnaXN0ZXJlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKaW5kZXggMTI0NmY2MS4uM2U1ZjMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiaW9hc20uaCIKQEAgLTcwNiwxMiArNzA2LDEyIEBACiAJc3RydWN0IGNocF9pZCBjaHBpZDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NQQVRILCBjaHBfcHJvY2Vzc19jcncpOworCXJldCA9IGNyd19yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1BBVEgsIGNocF9wcm9jZXNzX2Nydyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAljaHBfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2lvX2NocCIpOwogCWlmICghY2hwX3dxKSB7Ci0JCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NQQVRIKTsKKwkJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NQQVRIKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCUlOSVRfV09SSygmY2ZnX3dvcmssIGNmZ19mdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggZWJhYjZlYS4uODgzZjE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxhc20vY2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NocGlkLmg+CiAjaW5jbHVkZSA8YXNtL2Noc2MuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLSNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImNpby5oIgogI2luY2x1ZGUgImNpb19kZWJ1Zy5oIgpAQCAtNTg5LDYgKzU4OSw3IEBACiAJY2FzZSAweDAxMDI6CiAJY2FzZSAweDAxMDM6CiAJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IGNoc2NfZXJyb3JfZnJvbV9yZXNwb25zZShzZWNtX2FyZWEtPnJlc3BvbnNlLmNvZGUpOwogCX0KQEAgLTgyMCw3ICs4MjEsNyBAQAogCQkJICAgICAgImNoc2MgbWFjaGluZSBjaGVja3MhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJldCA9IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MsIGNoc2NfcHJvY2Vzc19jcncpOworCXJldCA9IGNyd19yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTLCBjaHNjX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlrZnJlZShzZWlfcGFnZSk7CiAJcmV0dXJuIHJldDsKQEAgLTgyOCw3ICs4MjksNyBAQAogCiB2b2lkIF9faW5pdCBjaHNjX2ZyZWVfc2VpX2FyZWEodm9pZCkKIHsKLQlzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MpOworCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWtmcmVlKHNlaV9wYWdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IDBhMmYyZWQuLjkzZWNhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTg0LDggKzg0LDggQEAKIAkJa2ZyZWUocHJpdmF0ZSk7CiAJfSBlbHNlIHsKIAkJc2NoLT5wcml2YXRlID0gcHJpdmF0ZTsKLQkJaWYgKHNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcykgewotCQkJc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwkJaWYgKGRldl9nZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldikpIHsKKwkJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggNjU5ZjhhNy4uMmFlYmI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL2lzYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZmN4Lmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJjaHNjLmgiCkBAIC0zOCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiYmxhY2tsaXN0LmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2hwLmgiCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKIAogZGVidWdfaW5mb190ICpjaW9fZGVidWdfbXNnX2lkOwogZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7CkBAIC00NzEsNiArNDcyLDcgQEAKIGludCBjaW9fZGlzYWJsZV9zdWJjaGFubmVsKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJY2hhciBkYmZfdHh0WzE1XTsKKwlpbnQgcmV0cnk7CiAJaW50IHJldDsKIAogCUNJT19UUkFDRV9FVkVOVCAoMiwgImRpc3NjaCIpOwpAQCAtNDgxLDE2ICs0ODMsMTcgQEAKIAlpZiAoY2lvX3VwZGF0ZV9zY2hpYihzY2gpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgIT0gMCkKLQkJLyoKLQkJICogdGhlIGRpc2FibGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZXJlIGFyZQotCQkgKiAgcmVxdWVzdHMgcGVuZGluZyBmb3IgY29tcGxldGlvbiAhCi0JCSAqLwotCQlyZXR1cm4gLUVCVVNZOwotCiAJc2NoLT5jb25maWcuZW5hID0gMDsKLQlyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpOwogCisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMzsgcmV0cnkrKykgeworCQlyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpOworCQlpZiAocmV0ID09IC1FQlVTWSkgeworCQkJc3RydWN0IGlyYiBpcmI7CisJCQlpZiAodHNjaChzY2gtPnNjaGlkLCAmaXJiKSAhPSAwKQorCQkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KIAlzcHJpbnRmIChkYmZfdHh0LCAicmV0OiVkIiwgcmV0KTsKIAlDSU9fVFJBQ0VfRVZFTlQgKDIsIGRiZl90eHQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTU3NjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqICAgQ2hhbm5lbCByZXBvcnQgaGFuZGxpbmcgY29kZQorICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KKworc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgY3J3X3NlbWFwaG9yZTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY3J3X2hhbmRsZXJfbXV0ZXgpOworc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOworCisvKioKKyAqIGNyd19yZWdpc3Rlcl9oYW5kbGVyKCkgLSByZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgorICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQorICogQGhhbmRsZXI6IGhhbmRsZXIgdG8gYmUgcmVnaXN0ZXJlZAorICoKKyAqIFJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBjcndfcmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJaW50IHJjID0gMDsKKworCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCWlmIChjcndfaGFuZGxlcnNbcnNjXSkKKwkJcmMgPSAtRUJVU1k7CisJZWxzZQorCQljcndfaGFuZGxlcnNbcnNjXSA9IGhhbmRsZXI7CisJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoKSAtIHVucmVnaXN0ZXIgYSBjaGFubmVsIHJlcG9ydCB3b3JkIGhhbmRsZXIKKyAqIEByc2M6IHJlcG9ydGluZyBzb3VyY2UgY29kZSB0byBoYW5kbGUKKyAqLwordm9pZCBjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MpCit7CisJaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQorCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCWNyd19oYW5kbGVyc1tyc2NdID0gTlVMTDsKKwltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKK30KKworLyoKKyAqIFJldHJpZXZlIENSV3MgYW5kIGNhbGwgZnVuY3Rpb24gdG8gaGFuZGxlIGV2ZW50LgorICovCitzdGF0aWMgaW50IGNyd19jb2xsZWN0X2luZm8odm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBjcncgY3J3WzJdOworCWludCBjY29kZTsKKwl1bnNpZ25lZCBpbnQgY2hhaW47CisJaW50IGlnbm9yZTsKKworcmVwZWF0OgorCWlnbm9yZSA9IGRvd25faW50ZXJydXB0aWJsZSgmY3J3X3NlbWFwaG9yZSk7CisJY2hhaW4gPSAwOworCXdoaWxlICgxKSB7CisJCWNyd19oYW5kbGVyX3QgaGFuZGxlcjsKKworCQlpZiAodW5saWtlbHkoY2hhaW4gPiAxKSkgeworCQkJc3RydWN0IGNydyB0bXBfY3J3OworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBDb2RlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSAiCisJCQkgICAgICAgInRoYW4gdHdvIGNoYWluZWQgY3J3czsgcGxlYXNlIHJlcG9ydCB0byAiCisJCQkgICAgICAgImxpbnV4MzkwQGRlLmlibS5jb20hXG4iLCBfX2Z1bmNfXyk7CisJCQljY29kZSA9IHN0Y3J3KCZ0bXBfY3J3KTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IGNydyByZXBvcnRzIHNsY3Q9JWQsIG9mbHc9JWQsICIKKwkJCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB0bXBfY3J3LnNsY3QsIHRtcF9jcncub2ZsdywKKwkJCSAgICAgICB0bXBfY3J3LmNobiwgdG1wX2Nydy5yc2MsIHRtcF9jcncuYW5jLAorCQkJICAgICAgIHRtcF9jcncuZXJjLCB0bXBfY3J3LnJzaWQpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogVGhpcyB3YXMgY3J3IG51bWJlciAleCBpbiB0aGUgIgorCQkJICAgICAgICJjaGFpblxuIiwgX19mdW5jX18sIGNoYWluKTsKKwkJCWlmIChjY29kZSAhPSAwKQorCQkJCWJyZWFrOworCQkJY2hhaW4gPSB0bXBfY3J3LmNobiA/IGNoYWluICsgMSA6IDA7CisJCQljb250aW51ZTsKKwkJfQorCQljY29kZSA9IHN0Y3J3KCZjcndbY2hhaW5dKTsKKwkJaWYgKGNjb2RlICE9IDApCisJCQlicmVhazsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNyd19pbmZvIDogQ1JXIHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgorCQkgICAgICAgImNobj0lZCwgcnNjPSVYLCBhbmM9JWQsIGVyYz0lWCwgcnNpZD0lWFxuIiwKKwkJICAgICAgIGNyd1tjaGFpbl0uc2xjdCwgY3J3W2NoYWluXS5vZmx3LCBjcndbY2hhaW5dLmNobiwKKwkJICAgICAgIGNyd1tjaGFpbl0ucnNjLCBjcndbY2hhaW5dLmFuYywgY3J3W2NoYWluXS5lcmMsCisJCSAgICAgICBjcndbY2hhaW5dLnJzaWQpOworCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLworCQlpZiAoY3J3W2NoYWluXS5vZmx3KSB7CisJCQlpbnQgaTsKKworCQkJcHJfZGVidWcoIiVzOiBjcncgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iLCBfX2Z1bmNfXyk7CisJCQltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTlJfUlNDUzsgaSsrKSB7CisJCQkJaWYgKGNyd19oYW5kbGVyc1tpXSkKKwkJCQkJY3J3X2hhbmRsZXJzW2ldKE5VTEwsIE5VTEwsIDEpOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCQljaGFpbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKKwkJCWNoYWluKys7CisJCQljb250aW51ZTsKKwkJfQorCQltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCWhhbmRsZXIgPSBjcndfaGFuZGxlcnNbY3J3W2NoYWluXS5yc2NdOworCQlpZiAoaGFuZGxlcikKKwkJCWhhbmRsZXIoJmNyd1swXSwgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwgMCk7CisJCW11dGV4X3VubG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCisJCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOworCX0KKwlnb3RvIHJlcGVhdDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpCit7CisJdXAoJmNyd19zZW1hcGhvcmUpOworfQorCisvKgorICogU2VwYXJhdGUgaW5pdGNhbGwgbmVlZGVkIGZvciBzZW1hcGhvcmUgaW5pdGlhbGl6YXRpb24gc2luY2UKKyAqIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSBjcndfbWFjaGluZV9jaGVja19pbml0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBjcndfaW5pdF9zZW1hcGhvcmUodm9pZCkKK3sKKwlpbml0X01VVEVYX0xPQ0tFRCgmY3J3X3NlbWFwaG9yZSk7CisJcmV0dXJuIDA7Cit9CitwdXJlX2luaXRjYWxsKGNyd19pbml0X3NlbWFwaG9yZSk7CisKKy8qCisgKiBNYWNoaW5lIGNoZWNrcyBmb3IgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIG11c3QgYmUgZW5hYmxlZAorICogYWZ0ZXIgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIGlzIGluaXRpYWxpemVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNyd19tYWNoaW5lX2NoZWNrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwl0YXNrID0ga3RocmVhZF9ydW4oY3J3X2NvbGxlY3RfaW5mbywgTlVMTCwgImttY2hlY2siKTsKKwlpZiAoSVNfRVJSKHRhc2spKQorCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKKwljdGxfc2V0X2JpdCgxNCwgMjgpOwkvKiBlbmFibGUgY2hhbm5lbCByZXBvcnQgTUNIICovCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoY3J3X21hY2hpbmVfY2hlY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCA4MDE5Mjg4Li4wMDg1ZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL2lzYy5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCkBAIC04Myw2ICs4MywyNSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjYWxsX2ZuX2FsbF9zY2goc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNiX2RhdGEgKmNiID0gZGF0YTsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByYyA9IDA7CisKKwlzY2ggPSBnZXRfc3ViY2hhbm5lbF9ieV9zY2hpZChzY2hpZCk7CisJaWYgKHNjaCkgeworCQlpZiAoY2ItPmZuX2tub3duX3NjaCkKKwkJCXJjID0gY2ItPmZuX2tub3duX3NjaChzY2gsIGNiLT5kYXRhKTsKKwkJcHV0X2RldmljZSgmc2NoLT5kZXYpOworCX0gZWxzZSB7CisJCWlmIChjYi0+Zm5fdW5rbm93bl9zY2gpCisJCQlyYyA9IGNiLT5mbl91bmtub3duX3NjaChzY2hpZCwgY2ItPmRhdGEpOworCX0KKworCXJldHVybiByYzsKK30KKwogaW50IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKGludCAoKmZuX2tub3duKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqLCB2b2lkICopLAogCQkJICAgICAgIGludCAoKmZuX3Vua25vd24pKHN0cnVjdCBzdWJjaGFubmVsX2lkLAogCQkJICAgICAgIHZvaWQgKiksIHZvaWQgKmRhdGEpCkBAIC05MCwxMyArMTA5LDE3IEBACiAJc3RydWN0IGNiX2RhdGEgY2I7CiAJaW50IHJjOwogCi0JY2Iuc2V0ID0gaWRzZXRfc2NoX25ldygpOwotCWlmICghY2Iuc2V0KQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZHNldF9maWxsKGNiLnNldCk7CiAJY2IuZGF0YSA9IGRhdGE7CiAJY2IuZm5fa25vd25fc2NoID0gZm5fa25vd247CiAJY2IuZm5fdW5rbm93bl9zY2ggPSBmbl91bmtub3duOworCisJY2Iuc2V0ID0gaWRzZXRfc2NoX25ldygpOworCWlmICghY2Iuc2V0KQorCQkvKiBmYWxsIGJhY2sgdG8gYnJ1dGUgZm9yY2Ugc2Nhbm5pbmcgaW4gY2FzZSBvZiBvb20gKi8KKwkJcmV0dXJuIGZvcl9lYWNoX3N1YmNoYW5uZWwoY2FsbF9mbl9hbGxfc2NoLCAmY2IpOworCisJaWRzZXRfZmlsbChjYi5zZXQpOworCiAJLyogUHJvY2VzcyByZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogCXJjID0gYnVzX2Zvcl9lYWNoX2RldigmY3NzX2J1c190eXBlLCBOVUxMLCAmY2IsIGNhbGxfZm5fa25vd25fc2NoKTsKIAlpZiAocmMpCkBAIC0yNzIsNyArMjk1LDcgQEAKIAkgKiB0aGUgc3ViY2hhbm5lbCBkcml2ZXIgY2FuIGRlY2lkZSBpdHNlbGYgd2hlbiBpdCB3YW50cyB0byBpbmZvcm0KIAkgKiB1c2Vyc3BhY2Ugb2YgaXRzIGV4aXN0ZW5jZS4KIAkgKi8KLQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMSk7CiAJY3NzX3VwZGF0ZV9zc2RfaW5mbyhzY2gpOwogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGNzc19zY2hfZGV2aWNlX3JlZ2lzdGVyKHNjaCk7CkBAIC0yODcsNyArMzEwLDcgQEAKIAkJICogYSBmaXR0aW5nIGRyaXZlciBtb2R1bGUgbWF5IGJlIGxvYWRlZCBiYXNlZCBvbiB0aGUKIAkJICogbW9kYWxpYXMuCiAJCSAqLwotCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNTEwLDYgKzUzMywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHJlcHJvYmVfYWZ0ZXJfaWRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KKwl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKKwkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKG5lZWRfcmVwcm9iZSkKKwkJY3NzX3NjaGVkdWxlX3JlcHJvYmUoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhyZXByb2JlX2lkbGVfd29yaywgcmVwcm9iZV9hZnRlcl9pZGxlKTsKKwogLyogV29yayBmdW5jdGlvbiB1c2VkIHRvIHJlcHJvYmUgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KIHN0YXRpYyB2b2lkIHJlcHJvYmVfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQogewpAQCAtNTE3LDEwICs1NTEsMTIgQEAKIAogCUNJT19NU0dfRVZFTlQoNCwgInJlcHJvYmUgc3RhcnRcbiIpOwogCi0JbmVlZF9yZXByb2JlID0gMDsKIAkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KLQl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKLQkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpICE9IDApIHsKKwkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZyZXByb2JlX2lkbGVfd29yayk7CisJCXJldHVybjsKKwl9CisJbmVlZF9yZXByb2JlID0gMDsKIAlyZXQgPSBmb3JfZWFjaF9zdWJjaGFubmVsX3N0YWdlZChOVUxMLCByZXByb2JlX3N1YmNoYW5uZWwsIE5VTEwpOwogCiAJQ0lPX01TR19FVkVOVCg0LCAicmVwcm9iZSBkb25lIChyYz0lZCwgbmVlZF9yZXByb2JlPSVkKVxuIiwgcmV0LApAQCAtNjE5LDcgKzY1NSw3IEBACiAJCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmV4dF9jc3NpZC5jc3NpZCA9IGNzcy0+Y3NzaWQ7CiAJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfU01QCi0JCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gc3RhcCgpOwogI2Vsc2UKIAkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSAwOwogI2VuZGlmCkBAIC03NjUsNyArODAxLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19TQ0gsIGNzc19wcm9jZXNzX2Nydyk7CisJcmV0ID0gY3J3X3JlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19TQ0gsIGNzc19wcm9jZXNzX2Nydyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTg0NSw3ICs4ODEsNyBAQAogb3V0X2J1czoKIAlidXNfdW5yZWdpc3RlcigmY3NzX2J1c190eXBlKTsKIG91dDoKLQlzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MpOworCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWNoc2NfZnJlZV9zZWlfYXJlYSgpOwogCWtmcmVlKHNsb3dfc3ViY2hhbm5lbF9zZXQpOwogCXByX2FsZXJ0KCJUaGUgQ1NTIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpdGggIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggMjNkNTc1Mi4uYzRkMmY2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtNDU3LDEyICs0NTcsMTMgQEAKIAlyZXR1cm4gKHJldCA9PSAwKSA/IC1FTk9ERVYgOiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyBpbnQgb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKQogCQljY3dfZGV2aWNlX3JlbW92ZV9kaXNjb25uZWN0ZWQoY2Rldik7Ci0JZWxzZSBpZiAoY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+c2V0X29mZmxpbmUpCi0JCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2Rldik7CisJZWxzZSBpZiAoY2Rldi0+b25saW5lICYmIGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnNldF9vZmZsaW5lKQorCQlyZXR1cm4gY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvbmxpbmVfc3RvcmVfcmVjb2dfYW5kX29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKQEAgLTUzMCwxMyArNTMxLDEwIEBACiAJCWdvdG8gb3V0OwogCXN3aXRjaCAoaSkgewogCWNhc2UgMDoKLQkJb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKGNkZXYpOwotCQlyZXQgPSBjb3VudDsKKwkJcmV0ID0gb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKGNkZXYpOwogCQlicmVhazsKIAljYXNlIDE6CiAJCXJldCA9IG9ubGluZV9zdG9yZV9oYW5kbGVfb25saW5lKGNkZXYsIGZvcmNlKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXQgPSBjb3VudDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTU0NSw3ICs1NDMsNyBAQAogCWlmIChjZGV2LT5kcnYpCiAJCW1vZHVsZV9wdXQoY2Rldi0+ZHJ2LT5vd25lcik7CiAJYXRvbWljX3NldCgmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDApOwotCXJldHVybiByZXQ7CisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGNvdW50OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNjgxLDM1ICs2NzksMjIgQEAKIAlyZXR1cm4gZGV2ID8gdG9fY2N3ZGV2KGRldikgOiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZAotY2N3X2RldmljZV9hZGRfY2hhbmdlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKLQotCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKLQljZGV2ID0gcHJpdi0+Y2RldjsKLQlpZiAoZGV2aWNlX2FkZCgmY2Rldi0+ZGV2KSkgewotCQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwotCQlyZXR1cm47Ci0JfQotCXNldF9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpOwotfQotCi12b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJaW50IHJldDsKIAogCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKIAljZGV2ID0gcHJpdi0+Y2RldjsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCi0JY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOwotCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkgICAgIGNjd19kZXZpY2VfYWRkX2NoYW5nZWQpOwotCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwlpZiAodGVzdF9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpKSB7CisJCWRldmljZV9yZWxlYXNlX2RyaXZlcigmY2Rldi0+ZGV2KTsKKwkJcmV0ID0gZGV2aWNlX2F0dGFjaCgmY2Rldi0+ZGV2KTsKKwkJV0FSTl9PTihyZXQgPT0gLUVOT0RFVik7CisJfQogfQogCiBzdGF0aWMgdm9pZApAQCAtNzk5LDcgKzc4NCw3IEBACiAJCXJldHVybjsKIAlvdGhlcl9zY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCS8qIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50ICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGlzY29ubmVjdGVkIGRldmljZSAwLiV4LiUwNHggZmFpbGVkICIKIAkJCSAgICAgICIocmV0PSVkKSFcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLApAQCAtODMwLDcgKzgxNSw3IEBACiAJICogVHJ5IHRvIG1vdmUgdGhlIGNjdyBkZXZpY2UgdG8gaXRzIG5ldyBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCBmcm9tIG9ycGhhbmFnZSAiCiAJCQkgICAgICAiZmFpbGVkIChyZXQ9JWQpIVxuIiwKQEAgLTg5Nyw3ICs4ODIsOCBAQAogCSAqIGNjdyBkZXZpY2UgY2FuIHRha2UgaXRzIHBsYWNlIG9uIHRoZSBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldik7CisJcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldiwKKwkJRFBNX09SREVSX05PTkUpOwogCWlmIChyZXQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRldmljZSAwLiV4LiUwNHggdG8gb3JwaGFuYWdlIGZhaWxlZCAiCiAJCQkgICAgICAiKHJldD0lZCkhXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKQEAgLTk4MSw3ICs5NjcsNyBAQAogCSAqIE5vdyB3ZSBrbm93IHRoaXMgc3ViY2hhbm5lbCB3aWxsIHN0YXksIHdlIGNhbiB0aHJvdwogCSAqIG91ciBkZWxheWVkIHVldmVudC4KIAkgKi8KLQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKIAkvKiBtYWtlIGl0IGtub3duIHRvIHRoZSBzeXN0ZW0gKi8KIAlyZXQgPSBjY3dfZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwpAQCAtMTAzNCw4ICsxMDIwLDYgQEAKIHZvaWQKIGlvX3N1YmNoYW5uZWxfcmVjb2dfZG9uZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwotCiAJaWYgKGNzc19pbml0X2RvbmUgPT0gMCkgewogCQljZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lID0gMTsKIAkJcmV0dXJuOwpAQCAtMTA0Niw3ICsxMDMwLDYgQEAKIAkJLyogUmVtb3ZlIGRldmljZSBmb3VuZCBub3Qgb3BlcmF0aW9uYWwuICovCiAJCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKIAkJCWJyZWFrOwotCQlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKIAkJCSAgICAgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKTsKIAkJcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwpAQCAtMTEyOSw3ICsxMTEyLDcgQEAKIAkgKiBUcnkgdG8gbW92ZSB0aGUgY2N3IGRldmljZSB0byBpdHMgbmV3IHN1YmNoYW5uZWwuCiAJICogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQKIAkgKi8KLQlyYyA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJcmMgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJbXV0ZXhfdW5sb2NrKCZzY2gtPnJlZ19tdXRleCk7CiAJaWYgKHJjKSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IHRvIHN1YmNoYW5uZWwgIgpAQCAtMTI0Myw3ICsxMjI2LDcgQEAKIAkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuIFRoaXMgaGFwcGVucyBmb3IgYWxsIGVhcmx5CiAJCSAqIGRldmljZXMsIGUuZy4gdGhlIGNvbnNvbGUuCiAJCSAqLwotCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCQljZGV2LT5kZXYuZ3JvdXBzID0gY2N3ZGV2X2F0dHJfZ3JvdXBzOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmY2Rldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IDBmMmU2M2UuLjg1ZTAxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtODAsNyArODAsNyBAQAogCiBpbnQgY2N3X2RldmljZV9jYW5jZWxfaGFsdF9jbGVhcihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIAotdm9pZCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgY2N3X2RldmljZV9kb191bmJpbmRfYmluZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiB2b2lkIGNjd19kZXZpY2VfbW92ZV90b19vcnBoYW5hZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICopOwogaW50IGNjd19kZXZpY2VfaXNfb3JwaGFuKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDhkZjVlYWEuLjg3YjRiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkgICAgY2Rldi0+aWQuZGV2X3R5cGUgIT0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfdHlwZSB8fAogCSAgICBjZGV2LT5pZC5kZXZfbW9kZWwgIT0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfbW9kZWwpIHsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkgICAgIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcpOworCQkJICAgICBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKTsKIAkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zNjYsNyArMzY2LDcgQEAKIAl9CiAJLyogRHJpdmVyIGRvZXNuJ3Qgd2FudCBkZXZpY2UgYmFjay4gKi8KIAljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOwotCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKTsKKwlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywgY2N3X2RldmljZV9kb191bmJpbmRfYmluZCk7CiAJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogfQogCkBAIC03MjgsNyArNzI4LDcgQEAKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwogCi0JY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfTk9UX09QRVI7CisJY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCWNzc19zY2hlZHVsZV9ldmFsKHNjaC0+c2NoaWQpOwogfQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCS8qCiAJICogQW4gaW50ZXJydXB0IGluIHN0YXRlIG9mZmxpbmUgbWVhbnMgYSBwcmV2aW91cyBkaXNhYmxlIHdhcyBub3QKLQkgKiBzdWNjZXNzZnVsLiBUcnkgYWdhaW4uCisJICogc3VjY2Vzc2Z1bCAtIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2UgdHJ5IHRvIGRpc2FibGUgYWdhaW4uCiAJICovCiAJY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzY2gpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwppbmRleCBlYWJjYzQyLi4xNTE3NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwpAQCAtNjgwLDcgKzY4MCw3IEBACiAJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUpCiAJCXJldHVybiAtRUlPOwogCWlmICghc2Nzd19pc190bSgmc2NoLT5zY2hpYi5zY3N3KSB8fAotCSAgICAhKHNjc3dfYWN0bCgmc2NoLT5zY2hpYi5zY3N3KSB8IFNDU1dfQUNUTF9TVEFSVF9QRU5EKSkKKwkgICAgIShzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgJiBTQ1NXX0FDVExfU1RBUlRfUEVORCkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBjaW9fdG1faW50cmcoc2NoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKaW5kZXggNDJmMmIwOS4uMTNiY2I4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKQEAgLTE4Niw2ICsxODYsOSBAQAogCS8qIGlucHV0IGJ1ZmZlciBhY2tub3dsZWRnZW1lbnQgZmxhZyAqLwogCWludCBwb2xsaW5nOwogCisJLyogZmlyc3QgQUNLJ2VkIGJ1ZmZlciAqLworCWludCBhY2tfc3RhcnQ7CisKIAkvKiBob3cgbXVjaCBzYmFscyBhcmUgYWNrbm93bGVkZ2VkIHdpdGggcWVic20gKi8KIAlpbnQgYWNrX2NvdW50OwogCkBAIC0yMzQsNyArMjM3LDcgQEAKIAlpbnQgZmlyc3RfdG9fY2hlY2s7CiAKIAkvKiBmaXJzdF90b19jaGVjayBvZiB0aGUgbGFzdCB0aW1lICovCi0JaW50IGxhc3RfbW92ZV9mdGM7CisJaW50IGxhc3RfbW92ZTsKIAogCS8qIGJlZ2lubmluZyBwb3NpdGlvbiBmb3IgY2FsbGluZyB0aGUgcHJvZ3JhbSAqLwogCWludCBmaXJzdF90b19raWNrOwpAQCAtMjQ0LDcgKzI0Nyw2IEBACiAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCiAJLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KIAl1bnNpZ25lZCBpbnQgcWRpb19lcnJvcjsKQEAgLTM1NCw3ICszNTYsNyBAQAogCQkgIGludCBhdXRvX2Fjayk7CiB2b2lkIHFkaW9fY2hlY2tfb3V0Ym91bmRfYWZ0ZXJfdGhpbmludChzdHJ1Y3QgcWRpb19xICpxKTsKIGludCBxZGlvX2luYm91bmRfcV9tb3ZlZChzdHJ1Y3QgcWRpb19xICpxKTsKLXZvaWQgcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKTsKK3ZvaWQgcWRpb19raWNrX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSk7CiB2b2lkIHFkaW9fc3RvcF9wb2xsaW5nKHN0cnVjdCBxZGlvX3EgKnEpOwogaW50IHFkaW9fc2lnYV9zeW5jX3Eoc3RydWN0IHFkaW9fcSAqcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggZGE3YWZiMC4uZTM0MzRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTYzLDggKzYzLDkgQEAKIAlzZXFfcHJpbnRmKG0sICJkZXZpY2Ugc3RhdGUgaW5kaWNhdG9yOiAlZFxuIiwgKih1MzIgKilxLT5pcnFfcHRyLT5kc2NpKTsKIAlzZXFfcHJpbnRmKG0sICJucl91c2VkOiAlZFxuIiwgYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSk7CiAJc2VxX3ByaW50ZihtLCAiZnRjOiAlZFxuIiwgcS0+Zmlyc3RfdG9fY2hlY2spOwotCXNlcV9wcmludGYobSwgImxhc3RfbW92ZV9mdGM6ICVkXG4iLCBxLT5sYXN0X21vdmVfZnRjKTsKKwlzZXFfcHJpbnRmKG0sICJsYXN0X21vdmU6ICVkXG4iLCBxLT5sYXN0X21vdmUpOwogCXNlcV9wcmludGYobSwgInBvbGxpbmc6ICVkXG4iLCBxLT51LmluLnBvbGxpbmcpOworCXNlcV9wcmludGYobSwgImFjayBzdGFydDogJWRcbiIsIHEtPnUuaW4uYWNrX3N0YXJ0KTsKIAlzZXFfcHJpbnRmKG0sICJhY2sgY291bnQ6ICVkXG4iLCBxLT51LmluLmFja19jb3VudCk7CiAJc2VxX3ByaW50ZihtLCAic2xzYiBidWZmZXIgc3RhdGVzOlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDAgICAgICB8OCAgICAgIHwxNiAgICAgfDI0ICAgICB8MzIgICAgIHw0MCAgICAgfDQ4ICAgICB8NTYgIDYzfFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCAxMGNiMGY4Li45ZThhMjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTM4MCwxMSArMzgwLDExIEBACiAKIAkvKiBzaG93IHRoZSBjYXJkIHRoYXQgd2UgYXJlIG5vdCBwb2xsaW5nIGFueW1vcmUgKi8KIAlpZiAoaXNfcWVic20ocSkpIHsKLQkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklULAorCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklULAogCQkJICAgICAgIHEtPnUuaW4uYWNrX2NvdW50KTsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwogCX0gZWxzZQotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CisJCXNldF9idWZfc3RhdGUocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFubm91bmNlX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCkBAIC00MTksMTUgKzQxOSwxNSBAQAogCQlpZiAoIXEtPnUuaW4ucG9sbGluZykgewogCQkJcS0+dS5pbi5wb2xsaW5nID0gMTsKIAkJCXEtPnUuaW4uYWNrX2NvdW50ID0gY291bnQ7Ci0JCQlxLT5sYXN0X21vdmVfZnRjID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJCQlxLT51LmluLmFja19zdGFydCA9IHEtPmZpcnN0X3RvX2NoZWNrOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJLyogZGVsZXRlIHRoZSBwcmV2aW91cyBBQ0sncyAqLwotCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJCXNldF9idWZfc3RhdGVzKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCiAJCQkgICAgICAgcS0+dS5pbi5hY2tfY291bnQpOwogCQlxLT51LmluLmFja19jb3VudCA9IGNvdW50OwotCQlxLT5sYXN0X21vdmVfZnRjID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gcS0+Zmlyc3RfdG9fY2hlY2s7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQzOSwxNCArNDM5LDEzIEBACiAJaWYgKHEtPnUuaW4ucG9sbGluZykgewogCQkvKiByZXNldCB0aGUgcHJldmlvdXMgQUNLIGJ1dCBmaXJzdCBzZXQgdGhlIG5ldyBvbmUgKi8KIAkJc2V0X2J1Zl9zdGF0ZShxLCBuZXcsIFNMU0JfUF9JTlBVVF9BQ0spOwotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7Ci0JfQotCWVsc2UgeworCQlzZXRfYnVmX3N0YXRlKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOworCX0gZWxzZSB7CiAJCXEtPnUuaW4ucG9sbGluZyA9IDE7Ci0JCXNldF9idWZfc3RhdGUocSwgcS0+Zmlyc3RfdG9fY2hlY2ssIFNMU0JfUF9JTlBVVF9BQ0spOworCQlzZXRfYnVmX3N0YXRlKHEsIG5ldywgU0xTQl9QX0lOUFVUX0FDSyk7CiAJfQogCi0JcS0+bGFzdF9tb3ZlX2Z0YyA9IG5ldzsKKwlxLT51LmluLmFja19zdGFydCA9IG5ldzsKIAljb3VudC0tOwogCWlmICghY291bnQpCiAJCXJldHVybjsKQEAgLTQ1NSw3ICs0NTQsNyBAQAogCSAqIE5lZWQgdG8gY2hhbmdlIGFsbCBQUklNRUQgYnVmZmVycyB0byBOT1RfSU5JVCwgb3RoZXJ3aXNlCiAJICogd2UncmUgbG9vc2luZyBpbml0aWF0aXZlIGluIHRoZSB0aGluaW50IGNvZGUuCiAJICovCi0Jc2V0X2J1Zl9zdGF0ZXMocSwgbmV4dF9idWYocS0+Zmlyc3RfdG9fY2hlY2spLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+Zmlyc3RfdG9fY2hlY2ssIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKIAkJICAgICAgIGNvdW50KTsKIH0KIApAQCAtNTIzLDcgKzUyMiw4IEBACiAKIAlidWZuciA9IGdldF9pbmJvdW5kX2J1ZmZlcl9mcm9udGllcihxKTsKIAotCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlX2Z0YykgfHwgcS0+cWRpb19lcnJvcikgeworCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwogCQlpZiAoIW5lZWRfc2lnYV9zeW5jKHEpICYmICFwY2lfb3V0X3N1cHBvcnRlZChxKSkKIAkJCXEtPnUuaW4udGltZXN0YW1wID0gZ2V0X3VzZWNzKCk7CiAKQEAgLTU3MCwyOSArNTcwLDMwIEBACiAJfQogfQogCi12b2lkIHFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKK3ZvaWQgcWRpb19raWNrX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQlpbnQgY291bnQsIHN0YXJ0LCBlbmQ7Ci0KLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuaW5ib3VuZF9oYW5kbGVyKTsKLQotCXN0YXJ0ID0gcS0+Zmlyc3RfdG9fa2ljazsKLQllbmQgPSBxLT5maXJzdF90b19jaGVjazsKLQlpZiAoZW5kID49IHN0YXJ0KQotCQljb3VudCA9IGVuZCAtIHN0YXJ0OwotCWVsc2UKLQkJY291bnQgPSBlbmQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gc3RhcnQ7Ci0KLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2loIHM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwlpbnQgc3RhcnQgPSBxLT5maXJzdF90b19raWNrOworCWludCBlbmQgPSBxLT5maXJzdF90b19jaGVjazsKKwlpbnQgY291bnQ7CiAKIAlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfQUNUSVZFKSkKIAkJcmV0dXJuOwogCi0JcS0+aGFuZGxlcihxLT5pcnFfcHRyLT5jZGV2LCBxLT5xZGlvX2Vycm9yLCBxLT5uciwKLQkJICAgc3RhcnQsIGNvdW50LCBxLT5pcnFfcHRyLT5pbnRfcGFybSk7CisJY291bnQgPSBzdWJfYnVmKGVuZCwgc3RhcnQpOworCisJaWYgKHEtPmlzX2lucHV0X3EpIHsKKwkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcik7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOworCX0gZWxzZSB7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IG5yOiUxZCIsIHEtPm5yKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwl9CisKKwlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLCBzdGFydCwgY291bnQsCisJCSAgIHEtPmlycV9wdHItPmludF9wYXJtKTsKIAogCS8qIGZvciB0aGUgbmV4dCB0aW1lICovCi0JcS0+Zmlyc3RfdG9fa2ljayA9IHEtPmZpcnN0X3RvX2NoZWNrOworCXEtPmZpcnN0X3RvX2tpY2sgPSBlbmQ7CiAJcS0+cWRpb19lcnJvciA9IDA7CiB9CiAKQEAgLTYwMyw3ICs2MDQsNyBAQAogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAotCXFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIocSk7CisJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKIAlpZiAoIXFkaW9faW5ib3VuZF9xX2RvbmUocSkpCiAJCS8qIG1lYW5zIHBvbGwgdGltZSBpcyBub3QgeWV0IG92ZXIgKi8KQEAgLTY5OCwyMSArNjk5LDIxIEBACiAKIAlidWZuciA9IGdldF9vdXRib3VuZF9idWZmZXJfZnJvbnRpZXIocSk7CiAKLQlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZV9mdGMpIHx8IHEtPnFkaW9fZXJyb3IpIHsKLQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IGJ1Zm5yOworCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAib3V0IG1vdmVkOiUxZCIsIHEtPm5yKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBxZGlvX2tpY2tfb3V0Ym91bmRfcShzdHJ1Y3QgcWRpb19xICpxKQorc3RhdGljIGludCBxZGlvX2tpY2tfb3V0Ym91bmRfcShzdHJ1Y3QgcWRpb19xICpxKQogewogCXVuc2lnbmVkIGludCBidXN5X2JpdDsKIAlpbnQgY2M7CiAKIAlpZiAoIW5lZWRfc2lnYV9vdXQocSkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13OiUxZCIsIHEtPm5yKTsKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuc2lnYV9vdXQpOwpAQCAtNzI0LDc1ICs3MjUsMzcgQEAKIAljYXNlIDI6CiAJCWlmIChidXN5X2JpdCkgewogCQkJREJGX0VSUk9SKCIlNHggY2MyIFJFUDolMWQiLCBTQ0hfTk8ocSksIHEtPm5yKTsKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYyB8IFFESU9fRVJST1JfU0lHQV9CVVNZOwotCQl9IGVsc2UgewotCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtdyBjYzI6JTFkIiwKLQkJCQkgICAgICBxLT5ucik7Ci0JCQlxLT5xZGlvX2Vycm9yID0gY2M7Ci0JCX0KKwkJCWNjIHw9IFFESU9fRVJST1JfU0lHQV9CVVNZOworCQl9IGVsc2UKKwkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXcgY2MyOiUxZCIsIHEtPm5yKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCWNhc2UgMzoKIAkJREJGX0VSUk9SKCIlNHggU0lHQS1XOiUxZCIsIFNDSF9OTyhxKSwgY2MpOwotCQlxLT5xZGlvX2Vycm9yID0gY2M7CiAJCWJyZWFrOwogCX0KLX0KLQotc3RhdGljIHZvaWQgcWRpb19raWNrX291dGJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKLXsKLQlpbnQgc3RhcnQsIGVuZCwgY291bnQ7Ci0KLQlzdGFydCA9IHEtPmZpcnN0X3RvX2tpY2s7Ci0JZW5kID0gcS0+bGFzdF9tb3ZlX2Z0YzsKLQlpZiAoZW5kID49IHN0YXJ0KQotCQljb3VudCA9IGVuZCAtIHN0YXJ0OwotCWVsc2UKLQkJY291bnQgPSBlbmQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gc3RhcnQ7Ci0KLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2lja291dGg6ICUxZCIsIHEtPm5yKTsKLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOwotCi0JaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX0FDVElWRSkpCi0JCXJldHVybjsKLQotCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKLQkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwotCi0JLyogZm9yIHRoZSBuZXh0IHRpbWU6ICovCi0JcS0+Zmlyc3RfdG9fa2ljayA9IHEtPmxhc3RfbW92ZV9mdGM7Ci0JcS0+cWRpb19lcnJvciA9IDA7CisJcmV0dXJuIGNjOwogfQogCiBzdGF0aWMgdm9pZCBfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhzdHJ1Y3QgcWRpb19xICpxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGFza2xldF9vdXRib3VuZCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKLQogCUJVR19PTihhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpIDwgMCk7CiAKIAlpZiAocWRpb19vdXRib3VuZF9xX21vdmVkKHEpKQotCQlxZGlvX2tpY2tfb3V0Ym91bmRfaGFuZGxlcihxKTsKKwkJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX1pGQ1BfUUZNVCkgeworCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fWkZDUF9RRk1UKQogCQlpZiAoIXBjaV9vdXRfc3VwcG9ydGVkKHEpICYmICFxZGlvX291dGJvdW5kX3FfZG9uZShxKSkKLQkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwotCQlyZXR1cm47Ci0JfQorCQkJZ290byBzY2hlZDsKIAogCS8qIGJhaWwgb3V0IGZvciBIaXBlclNvY2tldHMgdW5pY2FzdCBxdWV1ZXMgKi8KIAlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX0lRRElPX1FGTVQgJiYgIW11bHRpY2FzdF9vdXRib3VuZChxKSkKIAkJcmV0dXJuOwogCiAJaWYgKChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCkgJiYKLQkgICAgKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpID4gUURJT19JUURJT19QT0xMX0xWTCkgewotCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKLQkJcmV0dXJuOwotCX0KKwkgICAgKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpID4gUURJT19JUURJT19QT0xMX0xWTCkKKwkJZ290byBzY2hlZDsKIAogCWlmIChxLT51Lm91dC5wY2lfb3V0X2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTgxMCw2ICs3NzMsMTIgQEAKIAkJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z190bF9vdXRfdGltZXIpOwogCQl9CiAJfQorCXJldHVybjsKKworc2NoZWQ6CisJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CisJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiB9CiAKIC8qIG91dGJvdW5kIHRhc2tsZXQgKi8KQEAgLTgyMiw2ICs3OTEsOSBAQAogdm9pZCBxZGlvX291dGJvdW5kX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcWRpb19xICpxID0gKHN0cnVjdCBxZGlvX3EgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CiAJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiB9CiAKQEAgLTg2Myw2ICs4MzUsOSBAQAogCWludCBpOwogCXN0cnVjdCBxZGlvX3EgKnE7CiAKKwlpZiAodW5saWtlbHkoaXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCXJldHVybjsKKwogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5wY2lfaW50KTsKIAogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCkBAIC0xMDY1LDggKzEwNDAsOSBAQAogICogQGNkZXY6IGFzc29jaWF0ZWQgY2N3IGRldmljZQogICogQGhvdzogdXNlIGhhbHQgb3IgY2xlYXIgdG8gc2h1dGRvd24KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHFkaW9fc2h1dGRvd24oKSBmb3IgQGNkZXYgd2l0aCBtZXRob2QgQGhvdwotICogYW5kIG9uIHN1Y2Nlc3MgcWRpb19mcmVlKCkgZm9yIEBjZGV2LgorICogVGhpcyBmdW5jdGlvbiBjYWxscyBxZGlvX3NodXRkb3duKCkgZm9yIEBjZGV2IHdpdGggbWV0aG9kIEBob3cuCisgKiBhbmQgcWRpb19mcmVlKCkuIFRoZSBxZGlvX2ZyZWUoKSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZCBzaW5jZQorICogIWlycV9wdHIgaXMgYWxyZWFkeSBjaGVja2VkLgogICovCiBpbnQgcWRpb19jbGVhbnVwKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgaG93KQogewpAQCAtMTA3Nyw4ICsxMDUzLDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyYyA9IHFkaW9fc2h1dGRvd24oY2RldiwgaG93KTsKLQlpZiAocmMgPT0gMCkKLQkJcmMgPSBxZGlvX2ZyZWUoY2Rldik7CisKKwlxZGlvX2ZyZWUoY2Rldik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWRpb19jbGVhbnVwKTsKQEAgLTEwOTAsMTEgKzEwNjYsMTEgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCi0JCXRhc2tsZXRfZGlzYWJsZSgmcS0+dGFza2xldCk7CisJCXRhc2tsZXRfa2lsbCgmcS0+dGFza2xldCk7CiAKIAlmb3JfZWFjaF9vdXRwdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkgewotCQl0YXNrbGV0X2Rpc2FibGUoJnEtPnRhc2tsZXQpOwogCQlkZWxfdGltZXIoJnEtPnUub3V0LnRpbWVyKTsKKwkJdGFza2xldF9raWxsKCZxLT50YXNrbGV0KTsKIAl9CiB9CiAKQEAgLTExMTIsNiArMTA4OCw3IEBACiAJaWYgKCFpcnFfcHRyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCUJVR19PTihpcnFzX2Rpc2FibGVkKCkpOwogCURCRl9FVkVOVCgicXNodXRkb3duOiU0eCIsIGNkZXYtPnByaXZhdGUtPnNjaGlkLnNjaF9ubyk7CiAKIAltdXRleF9sb2NrKCZpcnFfcHRyLT5zZXR1cF9tdXRleCk7CkBAIC0xMTI0LDYgKzExMDEsMTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UgaXMgZ29pbmcgZG93bi4gU2NoZWR1bGluZyB0aGUgcXVldWUKKwkgKiB0YXNrbGV0cyBpcyBmb3JiaWRkZW4gZnJvbSBoZXJlIG9uLgorCSAqLworCXFkaW9fc2V0X3N0YXRlKGlycV9wdHIsIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpOworCiAJdGlxZGlvX3JlbW92ZV9pbnB1dF9xdWV1ZXMoaXJxX3B0cik7CiAJcWRpb19zaHV0ZG93bl9xdWV1ZXMoY2Rldik7CiAJcWRpb19zaHV0ZG93bl9kZWJ1Z19lbnRyaWVzKGlycV9wdHIsIGNkZXYpOwpAQCAtMTQwMyw5ICsxMzg2LDggQEAKIAlzd2l0Y2ggKGlycV9wdHItPnN0YXRlKSB7CiAJY2FzZSBRRElPX0lSUV9TVEFURV9TVE9QUEVEOgogCWNhc2UgUURJT19JUlFfU1RBVEVfRVJSOgotCQltdXRleF91bmxvY2soJmlycV9wdHItPnNldHVwX211dGV4KTsKLQkJcWRpb19zaHV0ZG93bihjZGV2LCBRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7Ci0JCXJldHVybiAtRUlPOworCQlyYyA9IC1FSU87CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXFkaW9fc2V0X3N0YXRlKGlycV9wdHIsIFFESU9fSVJRX1NUQVRFX0FDVElWRSk7CiAJCXJjID0gMDsKQEAgLTE0NDIsMTAgKzE0MjQsMTAgQEAKICAqIEBidWZucjogZmlyc3QgYnVmZmVyIHRvIHByb2Nlc3MKICAqIEBjb3VudDogaG93IG1hbnkgYnVmZmVycyBhcmUgZW1wdGllZAogICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfaW5ib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAotCQkJICAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGhhbmRsZV9pbmJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCisJCQkgIGludCBidWZuciwgaW50IGNvdW50KQogewotCWludCB1c2VkLCBjYywgZGlmZjsKKwlpbnQgdXNlZCwgZGlmZjsKIAogCWlmICghcS0+dS5pbi5wb2xsaW5nKQogCQlnb3RvIHNldDsKQEAgLTE0NTYsMTkgKzE0MzgsMTggQEAKIAkJcS0+dS5pbi5wb2xsaW5nID0gMDsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwogCQlnb3RvIHNldDsKLQl9IGVsc2UgaWYgKGJ1Zl9pbl9iZXR3ZWVuKHEtPmxhc3RfbW92ZV9mdGMsIGJ1Zm5yLCBjb3VudCkpIHsKKwl9IGVsc2UgaWYgKGJ1Zl9pbl9iZXR3ZWVuKHEtPnUuaW4uYWNrX3N0YXJ0LCBidWZuciwgY291bnQpKSB7CiAJCWlmIChpc19xZWJzbShxKSkgewotCQkJLyogcGFydGlhbCBvdmVyd3JpdGUsIGp1c3QgdXBkYXRlIGxhc3RfbW92ZV9mdGMgKi8KKwkJCS8qIHBhcnRpYWwgb3ZlcndyaXRlLCBqdXN0IHVwZGF0ZSBhY2tfc3RhcnQgKi8KIAkJCWRpZmYgPSBhZGRfYnVmKGJ1Zm5yLCBjb3VudCk7Ci0JCQlkaWZmID0gc3ViX2J1ZihkaWZmLCBxLT5sYXN0X21vdmVfZnRjKTsKKwkJCWRpZmYgPSBzdWJfYnVmKGRpZmYsIHEtPnUuaW4uYWNrX3N0YXJ0KTsKIAkJCXEtPnUuaW4uYWNrX2NvdW50IC09IGRpZmY7CiAJCQlpZiAocS0+dS5pbi5hY2tfY291bnQgPD0gMCkgewogCQkJCXEtPnUuaW4ucG9sbGluZyA9IDA7CiAJCQkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwotCQkJCS8qIFRPRE86IG11c3Qgd2Ugc2V0IGxhc3RfbW92ZV9mdGMgdG8gc29tZXRoaW5nIG1lYW5pbmdmdWw/ICovCiAJCQkJZ290byBzZXQ7CiAJCQl9Ci0JCQlxLT5sYXN0X21vdmVfZnRjID0gYWRkX2J1ZihxLT5sYXN0X21vdmVfZnRjLCBkaWZmKTsKKwkJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gYWRkX2J1ZihxLT51LmluLmFja19zdGFydCwgZGlmZik7CiAJCX0KIAkJZWxzZQogCQkJLyogdGhlIG9ubHkgQUNLIHdpbGwgYmUgZGVsZXRlZCwgc28gc3RvcCBwb2xsaW5nICovCkBAIC0xNDgzLDEzICsxNDY0LDExIEBACiAKIAkvKiBubyBuZWVkIHRvIHNpZ25hbCBhcyBsb25nIGFzIHRoZSBhZGFwdGVyIGhhZCBmcmVlIGJ1ZmZlcnMgKi8KIAlpZiAodXNlZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCWlmIChuZWVkX3NpZ2FfaW4ocSkpIHsKLQkJY2MgPSBxZGlvX3NpZ2FfaW5wdXQocSk7Ci0JCWlmIChjYykKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYzsKLQl9CisJaWYgKG5lZWRfc2lnYV9pbihxKSkKKwkJcmV0dXJuIHFkaW9fc2lnYV9pbnB1dChxKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xNDk5LDExICsxNDc4LDExIEBACiAgKiBAYnVmbnI6IGZpcnN0IGJ1ZmZlciB0byBwcm9jZXNzCiAgKiBAY291bnQ6IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIGZpbGxlZAogICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKLQkJCSAgICBpbnQgYnVmbnIsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgaGFuZGxlX291dGJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCisJCQkgICBpbnQgYnVmbnIsIGludCBjb3VudCkKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXRlOwotCWludCB1c2VkOworCWludCB1c2VkLCByYyA9IDA7CiAKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcik7CiAKQEAgLTE1MTgsMjcgKzE0OTcsMjYgQEAKIAogCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCkgewogCQlpZiAobXVsdGljYXN0X291dGJvdW5kKHEpKQotCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCQllbHNlCiAJCQlpZiAoKHEtPmlycV9wdHItPnNzcWRfZGVzYy5tbXdjID4gMSkgJiYKIAkJCSAgICAoY291bnQgPiAxKSAmJgogCQkJICAgIChjb3VudCA8PSBxLT5pcnFfcHRyLT5zc3FkX2Rlc2MubW13YykpIHsKIAkJCQkvKiBleHBsb2l0IGVuaGFuY2VkIFNJR0EgKi8KIAkJCQlxLT51Lm91dC51c2VfZW5oX3NpZ2EgPSAxOwotCQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJKiBPbmUgc2lnYS13IHBlciBidWZmZXIgcmVxdWlyZWQgZm9yIHVuaWNhc3QKIAkJCQkqIEhpcGVyU29ja2V0cy4KIAkJCQkqLwogCQkJCXEtPnUub3V0LnVzZV9lbmhfc2lnYSA9IDA7Ci0JCQkJd2hpbGUgKGNvdW50LS0pCi0JCQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCXdoaWxlIChjb3VudC0tKSB7CisJCQkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQkJCWlmIChyYykKKwkJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCX0KLQotCQkvKiByZXBvcnQgQ0M9MiBjb25kaXRpb25zIHN5bmNocm9ub3VzbHkgKi8KLQkJaWYgKHEtPnFkaW9fZXJyb3IpCi0JCQlfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhxKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNTUwLDE0ICsxNTI4LDE0IEBACiAJLyogdHJ5IHRvIGZhc3QgcmVxdWV1ZSBidWZmZXJzICovCiAJZ2V0X2J1Zl9zdGF0ZShxLCBwcmV2X2J1ZihidWZuciksICZzdGF0ZSwgMCk7CiAJaWYgKHN0YXRlICE9IFNMU0JfQ1VfT1VUUFVUX1BSSU1FRCkKLQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJZWxzZSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJmYXN0LXJlcSIpOwogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZmFzdF9yZXF1ZXVlKTsKIAl9CiBvdXQ6Ci0JLyogRml4bWU6IGNvdWxkIHdhaXQgZm9yZXZlciBpZiBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi8KIAl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMTU5NiwxNCArMTU3NCwxMiBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNhbGxmbGFncyAmIFFESU9fRkxBR19TWU5DX0lOUFVUKQotCQloYW5kbGVfaW5ib3VuZChpcnFfcHRyLT5pbnB1dF9xc1txX25yXSwgY2FsbGZsYWdzLCBidWZuciwKLQkJCSAgICAgICBjb3VudCk7CisJCXJldHVybiBoYW5kbGVfaW5ib3VuZChpcnFfcHRyLT5pbnB1dF9xc1txX25yXSwKKwkJCQkgICAgICBjYWxsZmxhZ3MsIGJ1Zm5yLCBjb3VudCk7CiAJZWxzZSBpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1NZTkNfT1VUUFVUKQotCQloYW5kbGVfb3V0Ym91bmQoaXJxX3B0ci0+b3V0cHV0X3FzW3FfbnJdLCBjYWxsZmxhZ3MsIGJ1Zm5yLAotCQkJCWNvdW50KTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCQlyZXR1cm4gaGFuZGxlX291dGJvdW5kKGlycV9wdHItPm91dHB1dF9xc1txX25yXSwKKwkJCQkgICAgICAgY2FsbGZsYWdzLCBidWZuciwgY291bnQpOworCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG9fUURJTyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKaW5kZXggYzA4MzU2Yi4uMThkNTRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKQEAgLTExNyw3ICsxMTcsNiBAQAogCXEtPm1hc2sgPSAxIDw8ICgzMSAtIGkpOwogCXEtPm5yID0gaTsKIAlxLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX3N0b3JhZ2VfbGlzdHMoc3RydWN0IHFkaW9fcSAqcSwgc3RydWN0IHFkaW9faXJxICppcnFfcHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKaW5kZXggOGU5MGUxNC4uYzY1NWQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCkBAIC0zMSw2ICszMSw3IEBACiAKIC8qIGxpc3Qgb2YgdGhpbiBpbnRlcnJ1cHQgaW5wdXQgcXVldWVzICovCiBzdGF0aWMgTElTVF9IRUFEKHRpcV9saXN0KTsKK0RFRklORV9NVVRFWCh0aXFfbGlzdF9sb2NrKTsKIAogLyogYWRhcHRlciBsb2NhbCBzdW1tYXJ5IGluZGljYXRvciAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgKnRpcWRpb19hbHNpOwpAQCAtOTUsMTIgKzk2LDExIEBACiAJaWYgKCFjc3NfcWRpb19vbWl0X3N2cyAmJiBpcnFfcHRyLT5zaWdhX2ZsYWcuc3luYykKIAkJY3NzX3FkaW9fb21pdF9zdnMgPSAxOwogCi0JZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkgeworCW11dGV4X2xvY2soJnRpcV9saXN0X2xvY2spOworCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCiAJCWxpc3RfYWRkX3JjdSgmcS0+ZW50cnksICZ0aXFfbGlzdCk7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCX0KKwltdXRleF91bmxvY2soJnRpcV9saXN0X2xvY2spOwogCXhjaGcoaXJxX3B0ci0+ZHNjaSwgMSk7Ci0JdGFza2xldF9zY2hlZHVsZSgmdGlxZGlvX3Rhc2tsZXQpOwogfQogCiAvKgpAQCAtMTE4LDcgKzExOCwxMCBAQAogCQkvKiBpZiBlc3RhYmxpc2ggdHJpZ2dlcmVkIGFuIGVycm9yICovCiAJCWlmICghcSB8fCAhcS0+ZW50cnkucHJldiB8fCAhcS0+ZW50cnkubmV4dCkKIAkJCWNvbnRpbnVlOworCisJCW11dGV4X2xvY2soJnRpcV9saXN0X2xvY2spOwogCQlsaXN0X2RlbF9yY3UoJnEtPmVudHJ5KTsKKwkJbXV0ZXhfdW5sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKIAkJc3luY2hyb25pemVfcmN1KCk7CiAJfQogfQpAQCAtMTU1LDE1ICsxNTgsMTUgQEAKIAkgKi8KIAlxZGlvX2NoZWNrX291dGJvdW5kX2FmdGVyX3RoaW5pbnQocSk7CiAKLWFnYWluOgogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAotCXFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIocSk7CisJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKIAlpZiAoIXRpcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3ApOwotCQlnb3RvIGFnYWluOworCQlpZiAobGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiAJfQogCiAJcWRpb19zdG9wX3BvbGxpbmcocSk7CkBAIC0xNzMsNyArMTc2LDggQEAKIAkgKi8KIAlpZiAoIXRpcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3AyKTsKLQkJZ290byBhZ2FpbjsKKwkJaWYgKGxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogCX0KIH0KIApAQCAtMzY2LDEwICszNzAsMTEgQEAKIAogdm9pZCBfX2V4aXQgdGlxZGlvX3VucmVnaXN0ZXJfdGhpbmludHModm9pZCkKIHsKLQl0YXNrbGV0X2Rpc2FibGUoJnRpcWRpb190YXNrbGV0KTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZ0aXFfbGlzdCkpOwogCiAJaWYgKHRpcWRpb19hbHNpKSB7CiAJCXMzOTBfdW5yZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdCh0aXFkaW9fYWxzaSwgUURJT19BSVJRX0lTQyk7CiAJCWlzY191bnJlZ2lzdGVyKFFESU9fQUlSUV9JU0MpOwogCX0KKwl0YXNrbGV0X2tpbGwoJnRpcWRpb190YXNrbGV0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKaW5kZXggY2IyMmI5Ny4uNjViNmE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKQEAgLTEyOCw4ICsxMjgsNyBAQAogCWlmIChsID09IHpkZXYtPmxpc3QucHJldikKIAkJcmV0dXJuOwogCS8qIE1vdmUgemRldiBiZWhpbmQgbCAqLwotCWxpc3RfZGVsKCZ6ZGV2LT5saXN0KTsKLQlsaXN0X2FkZCgmemRldi0+bGlzdCwgbCk7CisJbGlzdF9tb3ZlKCZ6ZGV2LT5saXN0LCBsKTsKIH0KIAogLyoqCkBAIC0xNTcsOCArMTU2LDcgQEAKIAlpZiAobCA9PSB6ZGV2LT5saXN0Lm5leHQpCiAJCXJldHVybjsKIAkvKiBNb3ZlIHpkZXYgYmVmb3JlIGwgKi8KLQlsaXN0X2RlbCgmemRldi0+bGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmemRldi0+bGlzdCwgbCk7CisJbGlzdF9tb3ZlX3RhaWwoJnpkZXYtPmxpc3QsIGwpOwogfQogCiBzdGF0aWMgdm9pZCB6Y3J5cHRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCmluZGV4IGU3YTFlMjIuLmMyMGQ0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCkBAIC03ODEsOCArNzgxLDcgQEAKIAkJLyogU2lnbmFsIHBlbmRpbmcuICovCiAJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CiBvdXRfZnJlZToKLQltZW1zZXQoYXBfbXNnLm1lc3NhZ2UsIDB4MCwgYXBfbXNnLmxlbmd0aCk7Ci0Ja2ZyZWUoYXBfbXNnLm1lc3NhZ2UpOworCWt6ZnJlZShhcF9tc2cubWVzc2FnZSk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvZWJjZGljLmMgYi9kcml2ZXJzL3MzOTAvZWJjZGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5Yzk4ZGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL2ViY2RpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9lYmNkaWMuYwotICogICAgRUNCRElDIC0+IEFTQ0lJLCBBU0NJSSAtPiBFQ0JESUMgY29udmVyc2lvbiB0YWJsZXMuCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk4IElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0vKgotICogQVNDSUkgLT4gRUJDRElDCi0gKi8KLV9fdTggX2FzY2ViY1syNTZdID0KLXsKLSAvKjAwICBOTCAgICBTSCAgICBTWCAgICBFWCAgICBFVCAgICBOUSAgICBBSyAgICBCTCAqLwotICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDM3LCAweDJELCAweDJFLCAweDJGLAotIC8qMDggIEJTICAgIEhUICAgIExGICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgIDB4MTYsIDB4MDUsIDB4MTUsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gLyoxMCAgREwgICAgRDEgICAgRDIgICAgRDMgICAgRDQgICAgTksgICAgU04gICAgRUIgKi8KLSAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgzQywgMHgxNSwgMHgzMiwgMHgyNiwKLSAvKjE4ICBDTiAgICBFTSAgICBTQiAgICBFQyAgICBGUyAgICBHUyAgICBSUyAgICBVUyAqLwotICAgICAweDE4LCAweDE5LCAweDNGLCAweDI3LCAweDFDLCAweDFELCAweDFFLCAweDFGLAotIC8qMjAgIFNQICAgICAhICAgICAiICAgICAjICAgICAkICAgICAlICAgICAmICAgICAnICovCi0gICAgIDB4NDAsIDB4NUEsIDB4N0YsIDB4N0IsIDB4NUIsIDB4NkMsIDB4NTAsIDB4N0QsCi0gLyoyOCAgICggICAgICkgICAgICogICAgICsgICAgICwgICAgIC0gICAgLiAgICAgIC8gKi8KLSAgICAgMHg0RCwgMHg1RCwgMHg1QywgMHg0RSwgMHg2QiwgMHg2MCwgMHg0QiwgMHg2MSwKLSAvKjMwICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAqLwotICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LAotIC8qMzggICA4ICAgICA5ICAgICA6ICAgICA7ICAgICA8ICAgICA9ICAgICA+ICAgICA/ICovCi0gICAgIDB4RjgsIDB4RjksIDB4N0EsIDB4NUUsIDB4NEMsIDB4N0UsIDB4NkUsIDB4NkYsCi0gLyo0MCAgIEAgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgMHg3QywgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNywKLSAvKjQ4ICAgSCAgICAgSSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAqLwotICAgICAweEM4LCAweEM5LCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LAotIC8qNTAgICBQICAgICBRICAgICBSICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICovCi0gICAgIDB4RDcsIDB4RDgsIDB4RDksIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsCi0gLyo1OCAgIFggICAgIFkgICAgIFogICAgIFsgICAgIFwgICAgIF0gICAgIF4gICAgIF8gKi8KLSAgICAgMHhFNywgMHhFOCwgMHhFOSwgMHhBRCwgMHhFMCwgMHhCRCwgMHg1RiwgMHg2RCwKLSAvKjYwICAgYCAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAqLwotICAgICAweDc5LCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAotIC8qNjggICBoICAgICBpICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICovCi0gICAgIDB4ODgsIDB4ODksIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCi0gLyo3MCAgIHAgICAgIHEgICAgIHIgICAgIHMgICAgIHQgICAgIHUgICAgIHYgICAgIHcgKi8KLSAgICAgMHg5NywgMHg5OCwgMHg5OSwgMHhBMiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwKLSAvKjc4ICAgeCAgICAgeSAgICAgeiAgICAgeyAgICAgfCAgICAgfSAgICAgfiAgICBETCAqLwotICAgICAweEE3LCAweEE4LCAweEE5LCAweEMwLCAweDRGLCAweEQwLCAweEExLCAweDA3LAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweEZGCi19OwotCi0vKgotICogRUJDRElDIC0+IEFTQ0lJCi0gKi8KLV9fdTggX2ViY2FzY1syNTZdID0KLXsKLSAvKiAweDAwICAgTlVMICAgU09IICAgU1RYICAgRVRYICAqU0VMICAgIEhUICAqUk5MICAgREVMICovCi0gICAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNywgMHgwOSwgMHgwNywgMHg3RiwKLSAvKiAweDA4ICAgLUdFICAtU1BTICAtUlBUICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAvKiAweDEwICAgRExFICAgREMxICAgREMyICAgREMzICAtUkVTICAgLU5MICAgIEJTICAtUE9DCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUVOUCAgLT5MRiAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MDcsIDB4MEEsIDB4MDgsIDB4MDcsCi0gLyogMHgxOCAgIENBTiAgICBFTSAgLVVCUyAgLUNVMSAgLUlGUyAgLUlHUyAgLUlSUyAgLUlUQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JVVMgKi8KLSAgICAgICAgICAweDE4LCAweDE5LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4MjAgICAtRFMgIC1TT1MgICAgRlMgIC1XVVMgIC1CWVAgICAgTEYgICBFVEIgICBFU0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSU5QICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxQywgMHgwNywgMHgwNywgMHgwQSwgMHgxNywgMHgxQiwKLSAvKiAweDI4ICAgLVNBICAtU0ZFICAgLVNNICAtQ1NQICAtTUZBICAgRU5RICAgQUNLICAgQkVMCi0gICAgICAgICAgICAgICAgICAgICAgIC1TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA1LCAweDA2LCAweDA3LAotIC8qIDB4MzAgIC0tLS0gIC0tLS0gICBTWU4gICAtSVIgICAtUFAgIC1UUk4gIC1OQlMgICBFT1QgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDE2LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA0LAotIC8qIDB4MzggIC1TQlMgICAtSVQgIC1SRkYgIC1DVTMgICBEQzQgICBOQUsgIC0tLS0gICBTVUIgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDE0LCAweDE1LCAweDA3LCAweDFBLAotIC8qIDB4NDAgICAgU1AgICBSU1AgICAgICAgICAgIIHkICAgICAgICAgICAgICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyMCwgMHhGRiwgMHg4MywgMHg4NCwgMHg4NSwgMHhBMCwgMHgwNywgMHg4NiwKLSAvKiAweDQ4ICAgICAgICAgICAgICAgICAgICAgICAuICAgICA8ICAgICAoICAgICArICAgICB8ICovCi0gICAgICAgICAgMHg4NywgMHhBNCwgMHg5QiwgMHgyRSwgMHgzQywgMHgyOCwgMHgyQiwgMHg3QywKLSAvKiAweDUwICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHgyNiwgMHg4MiwgMHg4OCwgMHg4OSwgMHg4QSwgMHhBMSwgMHg4QywgMHgwNywKLSAvKiAweDU4ICAgICAgICAgICCB3yAgICAgISAgICAgJCAgICAgKiAgICAgKSAgICAgOyAgICAgICAqLwotICAgICAgICAgIDB4OEQsIDB4RTEsIDB4MjEsIDB4MjQsIDB4MkEsIDB4MjksIDB4M0IsIDB4QUEsCi0gLyogMHg2MCAgICAgLSAgICAgLyAgLS0tLSAgICAggcQgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDJELCAweDJGLCAweDA3LCAweDhFLCAweDA3LCAweDA3LCAweDA3LCAweDhGLAotIC8qIDB4NjggICAgICAgICAgICAgIC0tLS0gICAgICwgICAgICUgICAgIF8gICAgID4gICAgID8gKi8gCi0gICAgICAgICAgMHg4MCwgMHhBNSwgMHgwNywgMHgyQywgMHgyNSwgMHg1RiwgMHgzRSwgMHgzRiwKLSAvKiAweDcwICAtLS0tICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgwNywgMHg5MCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweDc4ICAgICAqICAgICBgICAgICA6ICAgICAjICAgICBAICAgICAnICAgICA9ICAgICAiICovCi0gICAgICAgICAgMHg3MCwgMHg2MCwgMHgzQSwgMHgyMywgMHg0MCwgMHgyNywgMHgzRCwgMHgyMiwKLSAvKiAweDgwICAgICAqICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgICAgICAgMHgwNywgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLSAvKiAweDg4ICAgICBoICAgICBpICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHhBRSwgMHhBRiwgMHgwNywgMHgwNywgMHgwNywgMHhGMSwKLSAvKiAweDkwICAgICCBsCAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbyAgICAgcCAqLwotICAgICAgICAgIDB4RjgsIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsIDB4NzAsCi0gLyogMHg5OCAgICAgcSAgICAgciAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4QTYsIDB4QTcsIDB4OTEsIDB4MDcsIDB4OTIsIDB4MDcsCi0gLyogMHhBMCAgICAgICAgICAgfiAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAgICAgeCAqLwotICAgICAgICAgIDB4RTYsIDB4N0UsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0gLyogMHhBOCAgICAgeSAgICAgeiAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4QUQsIDB4QUIsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHhCMCAgICAgXiAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAggacgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDVFLCAweDlDLCAweDlELCAweEZBLCAweDA3LCAweDA3LCAweDA3LCAweEFDLAotIC8qIDB4QjggICAgICAgIC0tLS0gICAgIFsgICAgIF0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweEFCLCAweDA3LCAweDVCLCAweDVELCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4QzAgICAgIHsgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgICAgICAweDdCLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAotIC8qIDB4QzggICAgIEggICAgIEkgIC0tLS0gICAgICAgICAgIIH2ICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg0OCwgMHg0OSwgMHgwNywgMHg5MywgMHg5NCwgMHg5NSwgMHhBMiwgMHgwNywKLSAvKiAweEQwICAgICB9ICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPICAgICBQICovCi0gICAgICAgICAgMHg3RCwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKLSAvKiAweEQ4ICAgICBRICAgICBSICAtLS0tICAgICAgICAgICCB/CAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4NTEsIDB4NTIsIDB4MDcsIDB4OTYsIDB4ODEsIDB4OTcsIDB4QTMsIDB4OTgsCi0gLyogMHhFMCAgICAgXCAgICAgICAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAgICAgWCAqLwotICAgICAgICAgIDB4NUMsIDB4RjYsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCi0gLyogMHhFOCAgICAgWSAgICAgWiAgICAgICAgLS0tLSAgICAggdYgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDU5LCAweDVBLCAweEZELCAweDA3LCAweDk5LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4RjAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KLSAgICAgICAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotIC8qIDB4RjggICAgIDggICAgIDkgIC0tLS0gIC0tLS0gICAgIIHcICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgzOCwgMHgzOSwgMHgwNywgMHgwNywgMHg5QSwgMHgwNywgMHgwNywgMHgwNwotfTsKLQotLyoKLSAqIEVCQ0RJQyAoY2FwaXRhbHMpIC0+IEFTQ0lJIChzbWFsbCBjYXNlKQotICovCi1fX3U4IF9lYmNhc2NfcmVkdWNlX2Nhc2VbMjU2XSA9Ci17Ci0gLyogMHgwMCAgIE5VTCAgIFNPSCAgIFNUWCAgIEVUWCAgKlNFTCAgICBIVCAgKlJOTCAgIERFTCAqLwotICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDcsIDB4MDksIDB4MDcsIDB4N0YsCi0KLSAvKiAweDA4ICAgLUdFICAtU1BTICAtUlBUICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLQotIC8qIDB4MTAgICBETEUgICBEQzEgICBEQzIgICBEQzMgIC1SRVMgICAtTkwgICAgQlMgIC1QT0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRU5QICAtPkxGICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgwNywgMHgwQSwgMHgwOCwgMHgwNywKLQotIC8qIDB4MTggICBDQU4gICAgRU0gIC1VQlMgIC1DVTEgIC1JRlMgIC1JR1MgIC1JUlMgIC1JVEIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSVVTICovCi0gICAgICAgICAgMHgxOCwgMHgxOSwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4MjAgICAtRFMgIC1TT1MgICAgRlMgIC1XVVMgIC1CWVAgICAgTEYgICBFVEIgICBFU0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSU5QICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxQywgMHgwNywgMHgwNywgMHgwQSwgMHgxNywgMHgxQiwKLQotIC8qIDB4MjggICAtU0EgIC1TRkUgICAtU00gIC1DU1AgIC1NRkEgICBFTlEgICBBQ0sgICBCRUwKLSAgICAgICAgICAgICAgICAgICAgICAgLVNXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDcsCi0KLSAvKiAweDMwICAtLS0tICAtLS0tICAgU1lOICAgLUlSICAgLVBQICAtVFJOICAtTkJTICAgRU9UICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxNiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNCwKLQotIC8qIDB4MzggIC1TQlMgICAtSVQgIC1SRkYgIC1DVTMgICBEQzQgICBOQUsgIC0tLS0gICBTVUIgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDE0LCAweDE1LCAweDA3LCAweDFBLAotCi0gLyogMHg0MCAgICBTUCAgIFJTUCAgICAgICAgICAggeQgICAgICAgICAgICAgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDIwLCAweEZGLCAweDgzLCAweDg0LCAweDg1LCAweEEwLCAweDA3LCAweDg2LAotCi0gLyogMHg0OCAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgPCAgICAgKCAgICAgKyAgICAgfCAqLwotICAgICAgICAgIDB4ODcsIDB4QTQsIDB4OUIsIDB4MkUsIDB4M0MsIDB4MjgsIDB4MkIsIDB4N0MsCi0KLSAvKiAweDUwICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHgyNiwgMHg4MiwgMHg4OCwgMHg4OSwgMHg4QSwgMHhBMSwgMHg4QywgMHgwNywKLQotIC8qIDB4NTggICAgICAgICAgIIHfICAgICAhICAgICAkICAgICAqICAgICApICAgICA7ICAgICAgICovCi0gICAgICAgICAgMHg4RCwgMHhFMSwgMHgyMSwgMHgyNCwgMHgyQSwgMHgyOSwgMHgzQiwgMHhBQSwKLQotIC8qIDB4NjAgICAgIC0gICAgIC8gIC0tLS0gICAgIIHEICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyRCwgMHgyRiwgMHgwNywgMHg4NCwgMHgwNywgMHgwNywgMHgwNywgMHg4RiwKLQotIC8qIDB4NjggICAgICAgICAgICAgIC0tLS0gICAgICwgICAgICUgICAgIF8gICAgID4gICAgID8gKi8gCi0gICAgICAgICAgMHg4MCwgMHhBNSwgMHgwNywgMHgyQywgMHgyNSwgMHg1RiwgMHgzRSwgMHgzRiwKLQotIC8qIDB4NzAgIC0tLS0gICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDA3LCAweDkwLCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHg3OCAgICAgKiAgICAgYCAgICAgOiAgICAgIyAgICAgQCAgICAgJyAgICAgPSAgICAgIiAqLwotICAgICAgICAgIDB4NzAsIDB4NjAsIDB4M0EsIDB4MjMsIDB4NDAsIDB4MjcsIDB4M0QsIDB4MjIsCi0KLSAvKiAweDgwICAgICAqICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgICAgICAgMHgwNywgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQotIC8qIDB4ODggICAgIGggICAgIGkgICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDY4LCAweDY5LCAweEFFLCAweEFGLCAweDA3LCAweDA3LCAweDA3LCAweEYxLAotCi0gLyogMHg5MCAgICAggbAgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gICAgIHAgKi8KLSAgICAgICAgICAweEY4LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotCi0gLyogMHg5OCAgICAgcSAgICAgciAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4QTYsIDB4QTcsIDB4OTEsIDB4MDcsIDB4OTIsIDB4MDcsCi0KLSAvKiAweEEwICAgICAgICAgICB+ICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICAgICB4ICovCi0gICAgICAgICAgMHhFNiwgMHg3RSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKLQotIC8qIDB4QTggICAgIHkgICAgIHogICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDc5LCAweDdBLCAweEFELCAweEFCLCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHhCMCAgICAgXiAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAggacgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDVFLCAweDlDLCAweDlELCAweEZBLCAweDA3LCAweDA3LCAweDA3LCAweEFDLAotCi0gLyogMHhCOCAgICAgICAgLS0tLSAgICAgWyAgICAgXSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4QUIsIDB4MDcsIDB4NUIsIDB4NUQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEMwICAgICB7ICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICovCi0gICAgICAgICAgMHg3QiwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQotIC8qIDB4QzggICAgIEggICAgIEkgIC0tLS0gICAgICAgICAgIIH2ICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHgwNywgMHg5MywgMHg5NCwgMHg5NSwgMHhBMiwgMHgwNywKLQotIC8qIDB4RDAgICAgIH0gICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gICAgIFAgKi8KLSAgICAgICAgICAweDdELCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotCi0gLyogMHhEOCAgICAgUSAgICAgUiAgLS0tLSAgICAgICAgICAggfwgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDcxLCAweDcyLCAweDA3LCAweDk2LCAweDgxLCAweDk3LCAweEEzLCAweDk4LAotCi0gLyogMHhFMCAgICAgXCAgICAgICAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAgICAgWCAqLwotICAgICAgICAgIDB4NUMsIDB4RjYsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0KLSAvKiAweEU4ICAgICBZICAgICBaICAgICAgICAtLS0tICAgICCB1iAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4RkQsIDB4MDcsIDB4OTQsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEYwICAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICovCi0gICAgICAgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQotIC8qIDB4RjggICAgIDggICAgIDkgIC0tLS0gIC0tLS0gICAgIIHcICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgzOCwgMHgzOSwgMHgwNywgMHgwNywgMHg4MSwgMHgwNywgMHgwNywgMHgwNwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDYzODJjMDQuLjk2ZWRkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAKIG9iai0kKENPTkZJR19TTVNHSVVDVikgKz0gc21zZ2l1Y3Yubwogb2JqLSQoQ09ORklHX0xDUykgKz0gbGNzLm8gY3UzMDg4Lm8KIG9iai0kKENPTkZJR19DTEFXKSArPSBjbGF3Lm8gY3UzMDg4Lm8KLXFldGgteSArPSBxZXRoX2NvcmVfc3lzLm8gcWV0aF9jb3JlX21haW4ubyBxZXRoX2NvcmVfbXBjLm8gcWV0aF9jb3JlX29mZmwubworcWV0aC15ICs9IHFldGhfY29yZV9zeXMubyBxZXRoX2NvcmVfbWFpbi5vIHFldGhfY29yZV9tcGMubwogb2JqLSQoQ09ORklHX1FFVEgpICs9IHFldGgubwogcWV0aF9sMi15ICs9IHFldGhfbDJfbWFpbi5vCiBvYmotJChDT05GSUdfUUVUSF9MMikgKz0gcWV0aF9sMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IDY2NjlhZGYuLjMwYTQzY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC0zNDgsNiArMzQ4LDggQEAKICAgICAgICAgcmM9Y2xhd19od190eCggc2tiLCBkZXYsIDEgKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2socF9jaC0+Y2RldiksIHNhdmVmbGFncyk7CiAJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJjbGF3dHglZCIsIHJjKTsKKwlpZiAocmMpCisJCXJjID0gTkVUREVWX1RYX0JVU1k7CiAgICAgICAgIHJldHVybiByYzsKIH0gICAvKiAgZW5kIG9mIGNsYXdfdHggKi8KIApAQCAtMTAzMSw3ICsxMDMzLDcgQEAKIHBhZ2VzX3RvX29yZGVyX29mX21hZyhpbnQgbnVtX29mX3BhZ2VzKQogewogCWludAlvcmRlcl9vZl9tYWc9MTsJCS8qIGFzc3VtZSAyIHBhZ2VzICovCi0JaW50CW51bXA9MjsKKwlpbnQJbnVtcDsKIAogCUNMQVdfREJGX1RFWFRfKDUsIHRyYWNlLCAicGFnZXMlZCIsIG51bV9vZl9wYWdlcyk7CiAJaWYgKG51bV9vZl9wYWdlcyA9PSAxKSAgIHtyZXR1cm4gMDsgfSAgLyogbWFnbml0dWRlIG9mIDAgPSAxIHBhZ2UgKi8KQEAgLTExODUsMzcgKzExODcsMzEgQEAKIAlkZXZfd2FybihkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIGRpc2Nvbm5lY3RlZFxuIiwKIAkJbmRldi0+bmFtZSk7CiAKLSAgICAgICAgaWYgKHNlbnNlICYgMHg0MCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MDEpIHsKKwlpZiAoc2Vuc2UgJiAweDQwKSB7CisJCWlmIChzZW5zZSAmIDB4MDEpIHsKIAkJCWRldl93YXJuKGRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGZvciIKIAkJCQkiICVzIGhhcyBiZWVuIHJlc2V0XG4iLAogCQkJCW5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZW5zZSAmIDB4MjApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDA0KSB7CisJCX0KKwl9IGVsc2UgaWYgKHNlbnNlICYgMHgyMCkgeworCQlpZiAoc2Vuc2UgJiAweDA0KSB7CiAJCQlkZXZfd2FybihkZXYsICJBIGRhdGEgc3RyZWFtaW5nIHRpbWVvdXQgb2NjdXJyZWQiCiAJCQkJIiBmb3IgJXNcbiIsCiAJCQkJbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgIHsKLQkJCWRldl93YXJuKGRldiwgIkEgZGF0YSB0cmFuc2ZlciBwYXJpdHkgZXJyb3Igb2NjdXJyZWQiCi0JCQkJIiBmb3IgJXNcbiIsCi0JCQkJbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbnNlICYgMHgxMCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MjApIHsKKwkJfSBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKIAkJCWRldl93YXJuKGRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGZvciAlcyIKIAkJCQkiIGlzIGZhdWx0eVxuIiwKIAkJCQluZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0JCQlkZXZfd2FybihkZXYsICJBIHJlYWQgZGF0YSBwYXJpdHkgZXJyb3Igb2NjdXJyZWQiCisJCX0gZWxzZSB7CisJCQlkZXZfd2FybihkZXYsICJBIGRhdGEgdHJhbnNmZXIgcGFyaXR5IGVycm9yIG9jY3VycmVkIgogCQkJCSIgZm9yICVzXG4iLAogCQkJCW5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQl9CisJfSBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKKwkJZGV2X3dhcm4oZGV2LCAiQSByZWFkIGRhdGEgcGFyaXR5IGVycm9yIG9jY3VycmVkIgorCQkJIiBmb3IgJXNcbiIsCisJCQluZGV2LT5uYW1lKTsKKwl9CiAKIH0gICAvKiAgICBlbmQgb2YgY2N3X2NoZWNrX3VuaXRfY2hlY2sgICAgKi8KIApAQCAtMTI1Miw3ICsxMjQ4LDcgQEAKIAkJCWJyZWFrOwogCX0KIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9ICAgIC8qICAgIGVuZCBvZiBmaW5kX2xpbmsgICAgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM2NCw3ICsxMzYwLDEwIEBACiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF93cml0ZV9mcmVlX2NoYWluPXBfdGhpc19jY3ctPm5leHQ7CiAgICAgICAgICAgICAgICAgcF90aGlzX2Njdy0+bmV4dD1OVUxMOwogICAgICAgICAgICAgICAgIC0tcHJpdnB0ci0+d3JpdGVfZnJlZV9jb3VudDsgLyogLTEgKi8KLSAgICAgICAgICAgICAgICBieXRlc0luVGhpc0J1ZmZlcj1sZW5fb2ZfZGF0YTsKKwkJaWYgKGxlbl9vZl9kYXRhID49IHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKQorCQkJYnl0ZXNJblRoaXNCdWZmZXIgPSBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJZWxzZQorCQkJYnl0ZXNJblRoaXNCdWZmZXIgPSBsZW5fb2ZfZGF0YTsKICAgICAgICAgICAgICAgICBtZW1jcHkoIHBfdGhpc19jY3ctPnBfYnVmZmVyLHBEYXRhQWRkcmVzcywgYnl0ZXNJblRoaXNCdWZmZXIpOwogICAgICAgICAgICAgICAgIGxlbl9vZl9kYXRhLT1ieXRlc0luVGhpc0J1ZmZlcjsKICAgICAgICAgICAgICAgICBwRGF0YUFkZHJlc3MrPSh1bnNpZ25lZCBsb25nKWJ5dGVzSW5UaGlzQnVmZmVyOwpAQCAtMjUxNSw3ICsyNTE0LDYgQEAKIAlwX2RldiA9ICZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldjsKIAlwX2VudiA9IHByaXZwdHItPnBfZW52OwogICAgICAgICBwX3RoaXNfY2N3PXByaXZwdHItPnBfcmVhZF9hY3RpdmVfZmlyc3Q7Ci0gICAgICAgIGk9MDsKIAl3aGlsZSAocF90aGlzX2NjdyE9TlVMTCAmJiBwX3RoaXNfY2N3LT5oZWFkZXIuZmxhZyE9Q0xBV19QRU5ESU5HKSB7CiAJCXBhY2tfb2ZmID0gMDsKIAkJcCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwppbmRleCBmMjljNzA4Li40ZGVkOWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKQEAgLTQxMCw5ICs0MTAsOCBAQAogCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJCQlnb3RvIGFnYWluOwogCX0KLQlibG9ja19sZW4gLT0gMjsKLQlpZiAoYmxvY2tfbGVuID4gMCkgewotCQkqKChfX3UxNiAqKXNrYi0+ZGF0YSkgPSBibG9ja19sZW47CisJaWYgKGJsb2NrX2xlbiA+IDIpIHsKKwkJKigoX191MTYgKilza2ItPmRhdGEpID0gYmxvY2tfbGVuIC0gMjsKIAkJY3RjbV91bnBhY2tfc2tiKGNoLCBza2IpOwogCX0KICBhZ2FpbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCmluZGV4IDhmMmE4ODguLjc3ZjQwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwpAQCAtMTA1LDcgKzEwNSw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJcHNrYi0+cHJvdG9jb2wgPSBudG9ocyhoZWFkZXItPnR5cGUpOwotCQlpZiAoaGVhZGVyLT5sZW5ndGggPD0gTExfSEVBREVSX0xFTkdUSCkgeworCQlpZiAoKGhlYWRlci0+bGVuZ3RoIDw9IExMX0hFQURFUl9MRU5HVEgpIHx8CisJCSAgICAobGVuIDw9IExMX0hFQURFUl9MRU5HVEgpKSB7CiAJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19JTExFR0FMU0laRSkpIHsKIAkJCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKIAkJCQkJIiVzKCVzKTogSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCglZCwlZCkiCkBAIC0xNjcsMTEgKzE2OCw5IEBACiAJCWlmIChsZW4gPiAwKSB7CiAJCQlza2JfcHVsbChwc2tiLCBoZWFkZXItPmxlbmd0aCk7CiAJCQlpZiAoc2tiX3RhaWxyb29tKHBza2IpIDwgTExfSEVBREVSX0xFTkdUSCkgewotCQkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX09WRVJSVU4pKSB7Ci0JCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCi0JCQkJCQkiT3ZlcnJ1biBpbiBjdGNtX3VucGFja19za2IiKTsKLQkJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47Ci0JCQkJfQorCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCisJCQkJCSJPdmVycnVuIGluIGN0Y21fdW5wYWNrX3NrYiIpOworCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19PVkVSUlVOOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYl9wdXQocHNrYiwgTExfSEVBREVSX0xFTkdUSCk7CkBAIC05MDYsMTEgKzkwNSwxMSBAQAogCX0KIAogCWlmIChjdGNtX3Rlc3RfYW5kX3NldF9idXN5KGRldikpCi0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChjdGNtX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKaW5kZXggM2RiNWY4NC4uNzgxZTE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpAQCAtMzkzLDcgKzM5Myw2IEBACiAJCX0gZWxzZSB7CiAJCQkvKiB0aGVyZSBhcmUgcHJvYmxlbXMuLi5iYWlsIG91dAkgICAgKi8KIAkJCS8qIHRoZXJlIG1heSBiZSBhIHN0YXRlIG1pc21hdGNoIHNvIHJlc3RhcnQgKi8KLQkJCWdycC0+cG9ydF9wZXJzaXN0ID0gMTsKIAkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCQkJZ3JwLT5hbGxvY2NoYW5fY2FsbGJhY2tfcmV0cmllcyA9IDA7CiAJCX0KQEAgLTY5OSwxMSArNjk4LDkgQEAKIAlyZXR1cm47CiAKIGRvbmU6Ci0JaWYgKHJjICE9IDApIHsKLQkJZ3JwLT5pbl9zd2VlcCA9IDA7Ci0JCWN0Y21fY2xlYXJfYnVzeV9kbyhkZXYpOwotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKLQl9CisJZ3JwLT5pbl9zd2VlcCA9IDA7CisJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7CisJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CiAKIAlyZXR1cm47CiB9CkBAIC0xMTE4LDcgKzExMTUsNiBAQAogCiAJCWlmICh1bmxpa2VseShmc21fZ2V0c3RhdGUoZ3JwLT5mc20pICE9IE1QQ0dfU1RBVEVfUkVBRFkpKQogCQkJCQlnb3RvIGRvbmU7Ci0JCXBkdV9sYXN0X3NlZW4gPSAwOwogCQl3aGlsZSAoKHBza2ItPmxlbiA+IDApICYmICFwZHVfbGFzdF9zZWVuKSB7CiAJCQljdXJyX3BkdSA9IChzdHJ1Y3QgcGR1ICopcHNrYi0+ZGF0YTsKIApAQCAtMTM5Niw4ICsxMzkyLDcgQEAKIAkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJaWYgKChncnAtPnNhdmVkX3N0YXRlICE9IE1QQ0dfU1RBVEVfUkVTRVQpIHx8CiAJCS8qIGRlYWxsb2NfY2hhbm5lbCBoYXMgYmVlbiBjYWxsZWQgKi8KLQkJCSgoZ3JwLT5zYXZlZF9zdGF0ZSA9PSBNUENHX1NUQVRFX1JFU0VUKSAmJgotCQkJCQkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKSkKKwkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKQogCQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOwogCiAJd2NoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CkBAIC0xOTE3LDEwICsxOTEyLDggQEAKIAogCWlmIChwcml2KQogCQlncnAgPSBwcml2LT5tcGNnOwotCWlmIChncnAgPT0gTlVMTCkgewotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwlpZiAoZ3JwID09IE5VTEwpCiAJCXJldHVybjsKLQl9CiAKIAlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspCXsKIAkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggMDgzZjc4Ny4uYTQ1YmMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCkBAIC0xMjU5LDcgKzEyNjAsNiBAQAogCXN0cnVjdCBpbl9kZXZpY2UgKmluNF9kZXY7CiAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBkYXRhOwotCWRhZW1vbml6ZSgicmVnaXBtIik7CiAKIAlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKIAkJcmV0dXJuIDA7CkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCWlmIChza2IgPT0gTlVMTCkgewogCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChjYXJkLT5zdGF0ZSAhPSBERVZfU1RBVEVfVVApIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJY2FyZC0+dHhfYnVmZmVyID0gbGNzX2dldF9idWZmZXIoJmNhcmQtPndyaXRlKTsKIAkJaWYgKGNhcmQtPnR4X2J1ZmZlciA9PSBOVUxMKSB7CiAJCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlyYyA9IC1FQlVTWTsKKwkJCXJjID0gTkVUREVWX1RYX0JVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQogCQljYXJkLT50eF9idWZmZXItPmNhbGxiYWNrID0gbGNzX3R4YnVmZmVyX2NiOwpAQCAtMTc1MywxMSArMTc1MywxMCBAQAogCXN0cnVjdCBsY3NfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGNzX2NhcmQsIGtlcm5lbF90aHJlYWRfc3RhcnRlcik7CiAJTENTX0RCRl9URVhUKDUsIHRyYWNlLCAia3JudGhyZCIpOwogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19yZWNvdmVyeSwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CisJCWt0aHJlYWRfcnVuKGxjc19yZWNvdmVyeSwgY2FyZCwgImxjc19yZWNvdmVyIik7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLAotCQkJCSh2b2lkICopIGNhcmQsIFNJR0NITEQpOworCQlrdGhyZWFkX3J1bihsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLCBjYXJkLCAicmVnaXBtIik7CiAjZW5kaWYKIH0KIApAQCAtMjI2OSw3ICsyMjY4LDYgQEAKICAgICAgICAgaW50IHJjOwogCiAJY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgcHRyOwotCWRhZW1vbml6ZSgibGNzX3JlY292ZXIiKTsKIAogCUxDU19EQkZfVEVYVCg0LCB0cmFjZSwgInJlY292ZXIxIik7CiAJaWYgKCFsY3NfZG9fcnVuX3RocmVhZChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKaW5kZXggMWJhNDUwOS4uYmU3MTZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKQEAgLTEzMTIsNyArMTMxMiw3IEBACiAKIAlpZiAobmV0aXVjdl90ZXN0X2FuZF9zZXRfYnVzeShkZXYpKSB7CiAJCUlVQ1ZfREJGX1RFWFQoZGF0YSwgMiwgIkVCVVNZIGZyb20gbmV0aXVjdl90eFxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJcmMgPSBuZXRpdWN2X3RyYW5zbWl0X3NrYihwcml2cHRyLT5jb25uLCBza2IpICE9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCBlMGM0NTU3Li40NDdlMWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogCXVuc2lnbmVkIGludCBzZ19za2JzX3J4OwogCXVuc2lnbmVkIGludCBzZ19mcmFnc19yeDsKIAl1bnNpZ25lZCBpbnQgc2dfYWxsb2NfcGFnZV9yeDsKKwl1bnNpZ25lZCBpbnQgdHhfY3N1bTsKIH07CiAKIC8qIFJvdXRpbmcgc3R1ZmYgKi8KQEAgLTQwMyw3ICs0MDQsNiBAQAogLyogcG9zc2libGUgdHlwZXMgb2YgcWV0aCBsYXJnZV9zZW5kIHN1cHBvcnQgKi8KIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHsKIAlRRVRIX0xBUkdFX1NFTkRfTk8sCi0JUUVUSF9MQVJHRV9TRU5EX0VERFAsCiAJUUVUSF9MQVJHRV9TRU5EX1RTTywKIH07CiAKQEAgLTgzOCwxMSArODM4LDkgQEAKIGludCBxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBza19idWZmICosIGludCwgaW50KTsKIGludCBxZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICosIHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3Qoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50LAotCQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICosIGludCwgaW50KTsKKwkJCXN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQsIGludCwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQkgICAgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosCi0JCSAgICBpbnQsIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKKwkJICAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQpOwogaW50IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiB2b2lkIHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCXN0cnVjdCBldGh0b29sX3N0YXRzICosIHU2NCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCBkMWI1YmViLi5jODI3ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CkBAIC0yNiw3ICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJxZXRoX2NvcmUuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgogCiBzdHJ1Y3QgcWV0aF9kYmZfaW5mbyBxZXRoX2RiZltRRVRIX0RCRl9JTkZPU10gPSB7CiAJLyogZGVmaW5lIGRiZiAtIE5hbWUsIFBhZ2VzLCBBcmVhcywgTWF4bGVuLCBMZXZlbCwgVmlldywgSGFuZGxlICovCkBAIC0yODUsMTcgKzI4Myw2IEBACiAJCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKIAljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwogCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfRUREUDoKLQkJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJTkVUSUZfRl9IV19DU1VNOwotCQl9IGVsc2UgewotCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCQlORVRJRl9GX0hXX0NTVU0pOwotCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJfQotCQlicmVhazsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9UU086CiAJCWlmIChxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfVFNPKSkgewogCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfApAQCAtOTU2LDcgKzk0Myw2IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKIAl9Ci0JcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKGJ1Zik7CiAJZm9yIChpID0gMDsgaSA8IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCk7ICsraSkgewogCQlpZiAoYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciAmJiBidWYtPmlzX2hlYWRlcltpXSkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLApAQCAtMTY5MCw3ICsxNjc2LDcgQEAKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHkgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGV2ZW50X3RpbWVvdXQ7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInNlbmRjdGwiKTsKQEAgLTE3MTUsOSArMTcwMSwxMCBAQAogCXFldGhfcHJlcGFyZV9jb250cm9sX2RhdGEoY2FyZCwgbGVuLCBpb2IpOwogCiAJaWYgKElTX0lQQShpb2ItPmRhdGEpKQotCQl0aW1lb3V0ID0gamlmZmllcyArIFFFVEhfSVBBX1RJTUVPVVQ7CisJCWV2ZW50X3RpbWVvdXQgPSBRRVRIX0lQQV9USU1FT1VUOwogCWVsc2UKLQkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX1RJTUVPVVQ7CisJCWV2ZW50X3RpbWVvdXQgPSBRRVRIX1RJTUVPVVQ7CisJdGltZW91dCA9IGppZmZpZXMgKyBldmVudF90aW1lb3V0OwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgIm5vaXJxcG5kIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKQEAgLTE3NDUsNyArMTczMiw3IEBACiAJaWYgKChjbWQtPmhkci5jb21tYW5kID09IElQQV9DTURfU0VUSVApICYmCiAJICAgIChjbWQtPmhkci5wcm90X3ZlcnNpb24gPT0gUUVUSF9QUk9UX0lQVjQpKSB7CiAJCWlmICghd2FpdF9ldmVudF90aW1lb3V0KHJlcGx5LT53YWl0X3EsCi0JCSAgICBhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSwgdGltZW91dCkpCisJCSAgICBhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSwgZXZlbnRfdGltZW91dCkpCiAJCQlnb3RvIHRpbWVfZXJyOwogCX0gZWxzZSB7CiAJCXdoaWxlICghYXRvbWljX3JlYWQoJnJlcGx5LT5yZWNlaXZlZCkpIHsKQEAgLTI2OTMsNDAgKzI2ODAsMjEgQEAKIAkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGludCBxZGlvX2VycikKIHsKIAlpbnQgc2JhbGYxNSA9IGJ1ZmZlci0+YnVmZmVyLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmY7Ci0JaW50IGNjID0gcWRpb19lcnIgJiAzOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImhkc25kZXJyIik7CiAJcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwgcWRpb19lcnIsICJxb3V0ZXJyIik7Ci0Jc3dpdGNoIChjYykgewotCWNhc2UgMDoKLQkJaWYgKHFkaW9fZXJyKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAibG5rZmFpbCIpOwotCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0eCAlMDJ4IiwKLQkJCQkgICAgICAgKHUxNilxZGlvX2VyciwgKHU4KXNiYWxmMTUpOwotCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JCX0KKworCWlmICghcWRpb19lcnIpCiAJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTk9ORTsKLQljYXNlIDI6Ci0JCWlmIChxZGlvX2VyciAmIFFESU9fRVJST1JfU0lHQV9CVVNZKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAiU0lHQWNjMkIiKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQ7Ci0JCX0KLQkJaWYgKChzYmFsZjE1ID49IDE1KSAmJiAoc2JhbGYxNSA8PSAzMSkpCi0JCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX1JFVFJZOwotCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0xJTktfRkFJTFVSRTsKLQkJLyogbG9vayBhdCBxZGlvX2Vycm9yIGFuZCBzYmFsZiAxNSAqLwotCWNhc2UgMToKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgIlNJR0FjYzEiKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JY2FzZSAzOgotCWRlZmF1bHQ6Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJTSUdBY2MzIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfS0lDS19JVDsKLQl9CisKKwlpZiAoKHNiYWxmMTUgPj0gMTUpICYmIChzYmFsZjE1IDw9IDMxKSkKKwkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9SRVRSWTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJsbmtmYWlsIik7CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiUwNHggJTAyeCIsCisJCSAgICAgICAodTE2KXFkaW9fZXJyLCAodTgpc2JhbGYxNSk7CisJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7CiB9CiAKIC8qCkBAIC0yODYyLDEwICsyODMwLDE0IEBACiAJCQlxZXRoX2dldF9taWNyb3MoKSAtCiAJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CiAJaWYgKHJjKSB7CisJCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CisJCS8qIGlnbm9yZSB0ZW1wb3JhcnkgU0lHQSBlcnJvcnMgd2l0aG91dCBidXN5IGNvbmRpdGlvbiAqLworCQlpZiAocmMgPT0gUURJT19FUlJPUl9TSUdBX1RBUkdFVCkKKwkJCXJldHVybjsKIAkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZsdXNoYnVmIik7CiAJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiIGVyciVkIiwgcmMpOwogCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiVzIiwgQ0FSRF9EREVWX0lEKHF1ZXVlLT5jYXJkKSk7Ci0JCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CisKIAkJLyogdGhpcyBtdXN0IG5vdCBoYXBwZW4gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIGlmIGl0CiAJCSAqIGhhcHBlbnMgc29tZXRoaW5nIGlzIHJlYWxseSB3cm9uZyAtPiByZWNvdmVyICovCiAJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkocXVldWUtPmNhcmQpOwpAQCAtMjk0MCwxMyArMjkxMiw3IEBACiAJfQogCWZvciAoaSA9IGZpcnN0X2VsZW1lbnQ7IGkgPCAoZmlyc3RfZWxlbWVudCArIGNvdW50KTsgKytpKSB7CiAJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1tpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JCS8qd2Ugb25seSBoYW5kbGUgdGhlIEtJQ0tfSVQgZXJyb3IgYnkgZG9pbmcgYSByZWNvdmVyeSAqLwotCQlpZiAocWV0aF9oYW5kbGVfc2VuZF9lcnJvcihjYXJkLCBidWZmZXIsIHFkaW9fZXJyb3IpCi0JCQkJPT0gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQpewotCQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwotCQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKLQkJCXJldHVybjsKLQkJfQorCQlxZXRoX2hhbmRsZV9zZW5kX2Vycm9yKGNhcmQsIGJ1ZmZlciwgcWRpb19lcnJvcik7CiAJCXFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihxdWV1ZSwgYnVmZmVyKTsKIAl9CiAJYXRvbWljX3N1Yihjb3VudCwgJnF1ZXVlLT51c2VkX2J1ZmZlcnMpOwpAQCAtMzE4NywxMSArMzE1Myw5IEBACiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCiAJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlzdHJ1Y3QgcWV0aF9oZHIgKmhkciwgaW50IGVsZW1lbnRzX25lZWRlZCwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsIGludCBvZmZzZXQsIGludCBoZF9sZW4pCisJCWludCBvZmZzZXQsIGludCBoZF9sZW4pCiB7CiAJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7Ci0JaW50IGJ1ZmZlcnNfbmVlZGVkID0gMDsKLQlpbnQgZmx1c2hfY250ID0gMDsKIAlpbnQgaW5kZXg7CiAKIAkvKiBzcGluIHVudGlsIHdlIGdldCB0aGUgcXVldWUgLi4uICovCkBAIC0zMjA2LDI3ICszMTcwLDExIEBACiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKQogCQlnb3RvIG91dDsKLQlpZiAoY3R4ID09IE5VTEwpCi0JCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQorCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQogCQkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JZWxzZSB7Ci0JCWJ1ZmZlcnNfbmVlZGVkID0gcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQocXVldWUsCi0JCQkJCQkJCQljdHgpOwotCQlpZiAoYnVmZmVyc19uZWVkZWQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KLQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIGJ1ZmZlcnNfbmVlZGVkKSAlCi0JCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KIAlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCWlmIChjdHggPT0gTlVMTCkgewotCQlxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCBvZmZzZXQsIGhkX2xlbik7Ci0JCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIDEpOwotCX0gZWxzZSB7Ci0JCWZsdXNoX2NudCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSwgY3R4LCBpbmRleCk7Ci0JCVdBUk5fT04oYnVmZmVyc19uZWVkZWQgIT0gZmx1c2hfY250KTsKLQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBpbmRleCwgZmx1c2hfY250KTsKLQl9CisJcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgb2Zmc2V0LCBoZF9sZW4pOworCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIDEpOwogCXJldHVybiAwOwogb3V0OgogCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CkBAIC0zMjM2LDcgKzMxODQsNyBAQAogCiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpoZHIsCi0JCWludCBlbGVtZW50c19uZWVkZWQsIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQorCQlpbnQgZWxlbWVudHNfbmVlZGVkKQogewogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwogCWludCBzdGFydF9pbmRleDsKQEAgLTMyNjIsNTMgKzMyMTAsMzIgQEAKIAlxZXRoX3N3aXRjaF90b19wYWNraW5nX2lmX25lZWRlZChxdWV1ZSk7CiAJaWYgKHF1ZXVlLT5kb19wYWNrKSB7CiAJCWRvX3BhY2sgPSAxOwotCQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJCS8qIGRvZXMgcGFja2V0IGZpdCBpbiBjdXJyZW50IGJ1ZmZlcj8gKi8KLQkJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0KLQkJCSAgICBidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsKSA8IGVsZW1lbnRzX25lZWRlZCkgewotCQkJCS8qIC4uLiBubyAtPiBzZXQgc3RhdGUgUFJJTUVEICovCi0JCQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSwKLQkJCQkJUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJCWZsdXNoX2NvdW50Kys7Ci0JCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQotCQkJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCi0JCQkJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKLQkJCQkvKiB3ZSBkaWQgYSBzdGVwIGZvcndhcmQsIHNvIGNoZWNrIGJ1ZmZlciBzdGF0ZQotCQkJCSAqIGFnYWluICovCi0JCQkJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPQotCQkJCQkJUUVUSF9RRElPX0JVRl9FTVBUWSl7Ci0JCQkJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgc3RhcnRfaW5kZXgsCisJCS8qIGRvZXMgcGFja2V0IGZpdCBpbiBjdXJyZW50IGJ1ZmZlcj8gKi8KKwkJaWYgKChRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkgLQorCQkgICAgYnVmZmVyLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkgPCBlbGVtZW50c19uZWVkZWQpIHsKKwkJCS8qIC4uLiBubyAtPiBzZXQgc3RhdGUgUFJJTUVEICovCisJCQlhdG9taWNfc2V0KCZidWZmZXItPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7CisJCQlmbHVzaF9jb3VudCsrOworCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQorCQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKKwkJCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKKwkJCS8qIHdlIGRpZCBhIHN0ZXAgZm9yd2FyZCwgc28gY2hlY2sgYnVmZmVyIHN0YXRlCisJCQkgKiBhZ2FpbiAqLworCQkJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPQorCQkJICAgIFFFVEhfUURJT19CVUZfRU1QVFkpIHsKKwkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIHN0YXJ0X2luZGV4LAogCQkJCQkJCSAgIGZsdXNoX2NvdW50KTsKLQkJCQkJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLAorCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwKIAkJCQkJCVFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIGVsZW1lbnRzIChpbmNsdWRpbmcgZm9sbG93aW5nCi0JCQkgKiBmcmVlIGJ1ZmZlcnMpIHRvIGhhbmRsZSBlZGRwIGNvbnRleHQgKi8KLQkJCWlmIChxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChxdWV1ZSwgY3R4KQotCQkJCTwgMCkgewotCQkJCXJjID0gLUVCVVNZOwotCQkJCWdvdG8gb3V0OworCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCX0KIAl9Ci0JaWYgKGN0eCA9PSBOVUxMKQotCQl0bXAgPSBxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCAtMSwgMCk7Ci0JZWxzZSB7Ci0JCXRtcCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSwgY3R4LAotCQkJCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwpOwotCQlpZiAodG1wIDwgMCkgewotCQkJcmMgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KKwl0bXAgPSBxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCAtMSwgMCk7CiAJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPSAocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyB0bXApICUKIAkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAJZmx1c2hfY291bnQgKz0gdG1wOwotb3V0OgogCWlmIChmbHVzaF9jb3VudCkKIAkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBzdGFydF9pbmRleCwgZmx1c2hfY291bnQpOwogCWVsc2UgaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKQpAQCAtNDMyNyw2ICs0MjU0LDcgQEAKIC8qIDMwICoveyJ0eCBjb3VudCJ9LAogCXsidHggZG9fUURJTyB0aW1lIn0sCiAJeyJ0eCBkb19RRElPIGNvdW50In0sCisJeyJ0eCBjc3VtIn0sCiB9OwogCiBpbnQgcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDM3OCw2ICs0MzA2LDcgQEAKIAlkYXRhWzMwXSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfY250OwogCWRhdGFbMzFdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3RpbWU7CiAJZGF0YVszMl0gPSBjYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fY250OworCWRhdGFbMzNdID0gY2FyZC0+cGVyZl9zdGF0cy50eF9jc3VtOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCmluZGV4IDQwODAxMjYuLmU2OWRlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKQEAgLTEsNjk5ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3Ci0gKiAgICBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4sCi0gKgkJIEZyYW5rIEJsYXNjaGthIDxmcmFuay5ibGFzY2hrYUBkZS5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPG5ldC9pcC5oPgotI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KLQotI2luY2x1ZGUgInFldGhfY29yZS5oIgotI2luY2x1ZGUgInFldGhfY29yZV9tcGMuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgotCi1pbnQgcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWludCBpbmRleCA9IHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsOwotCWludCBlbGVtZW50c19uZWVkZWQgPSBjdHgtPm51bV9lbGVtZW50czsKLQlpbnQgZWxlbWVudHNfaW5fYnVmZmVyOwotCWludCBza2JzX2luX2J1ZmZlcjsKLQlpbnQgYnVmZmVyc19uZWVkZWQgPSAwOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjYmZjIik7Ci0Jd2hpbGUgKGVsZW1lbnRzX25lZWRlZCA+IDApIHsKLQkJYnVmZmVyc19uZWVkZWQrKzsKLQkJaWYgKGF0b21pY19yZWFkKCZxdWV1ZS0+YnVmc1tpbmRleF0uc3RhdGUpICE9Ci0JCQkJUUVUSF9RRElPX0JVRl9FTVBUWSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJZWxlbWVudHNfaW5fYnVmZmVyID0gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCi0JCQkJICAgICBxdWV1ZS0+YnVmc1tpbmRleF0ubmV4dF9lbGVtZW50X3RvX2ZpbGw7Ci0JCXNrYnNfaW5fYnVmZmVyID0gZWxlbWVudHNfaW5fYnVmZmVyIC8gY3R4LT5lbGVtZW50c19wZXJfc2tiOwotCQllbGVtZW50c19uZWVkZWQgLT0gc2tic19pbl9idWZmZXIgKiBjdHgtPmVsZW1lbnRzX3Blcl9za2I7Ci0JCWluZGV4ID0gKGluZGV4ICsgMSkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KLQlyZXR1cm4gYnVmZmVyc19uZWVkZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9mcmVlX2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZjdHgiKTsKLQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fcGFnZXM7ICsraSkKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWN0eC0+cGFnZXNbaV0pOwotCWtmcmVlKGN0eC0+cGFnZXMpOwotCWtmcmVlKGN0eC0+ZWxlbWVudHMpOwotCWtmcmVlKGN0eCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2dldF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWF0b21pY19pbmMoJmN0eC0+cmVmY250KTsKLX0KLQotdm9pZCBxZXRoX2VkZHBfcHV0X2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjdHgtPnJlZmNudCkgPT0gMCkKLQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9lZGRwX3B1dF9jb250ZXh0KTsKLQotdm9pZCBxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImVkZHByY3R4Iik7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZidWYtPmN0eF9saXN0KSkgewotCQlyZWYgPSBsaXN0X2VudHJ5KGJ1Zi0+Y3R4X2xpc3QubmV4dCwKLQkJCQkgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSwgbGlzdCk7Ci0JCXFldGhfZWRkcF9wdXRfY29udGV4dChyZWYtPmN0eCk7Ci0JCWxpc3RfZGVsKCZyZWYtPmxpc3QpOwotCQlrZnJlZShyZWYpOwotCX0KLX0KLQotc3RhdGljIGludCBxZXRoX2VkZHBfYnVmX3JlZl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlICpyZWY7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZWRkcHJmY3giKTsKLQlyZWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlZiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlxZXRoX2VkZHBfZ2V0X2NvbnRleHQoY3R4KTsKLQlyZWYtPmN0eCA9IGN0eDsKLQlsaXN0X2FkZF90YWlsKCZyZWYtPmxpc3QsICZidWYtPmN0eF9saXN0KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHFldGhfZWRkcF9maWxsX2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiA9IE5VTEw7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXI7Ci0JaW50IGVsZW1lbnRzID0gY3R4LT5udW1fZWxlbWVudHM7Ci0JaW50IGVsZW1lbnQgPSAwOwotCWludCBmbHVzaF9jbnQgPSAwOwotCWludCBtdXN0X3JlZmNudCA9IDE7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZpYnUiKTsKLQl3aGlsZSAoZWxlbWVudHMgPiAwKSB7Ci0JCWJ1ZiA9ICZxdWV1ZS0+YnVmc1tpbmRleF07Ci0JCWlmIChhdG9taWNfcmVhZCgmYnVmLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgewotCQkJLyogbm9ybWFsbHkgdGhpcyBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSB3ZSBjaGVja2VkIGZvcgotCQkJICogYXZhaWxhYmxlIGVsZW1lbnRzIGluIHFldGhfY2hlY2tfZWxlbWVudHNfZm9yX2NvbnRleHQKLQkJCSAqLwotCQkJaWYgKGVsZW1lbnQgPT0gMCkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJZWxzZSB7Ci0JCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGQgb25seSBwYXJ0aWFsbHkgZmlsbCIKLQkJCQkJImVkZHAgYnVmZmVyIVxuIik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQkJLyogY2hlY2sgaWYgdGhlIHdob2xlIG5leHQgc2tiIGZpdHMgaW50byBjdXJyZW50IGJ1ZmZlciAqLwotCQlpZiAoKFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkgLQotCQkJCQlidWYtPm5leHRfZWxlbWVudF90b19maWxsKQotCQkJCTwgY3R4LT5lbGVtZW50c19wZXJfc2tiKXsKLQkJCS8qIG5vIC0+IGdvIHRvIG5leHQgYnVmZmVyICovCi0JCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQlpbmRleCA9IChpbmRleCArIDEpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQkJCWZsdXNoX2NudCsrOwotCQkJLyogbmV3IGJ1ZmZlciwgc28gd2UgaGF2ZSB0byBhZGQgY3R4IHRvIGJ1ZmZlcidjdHhfbGlzdAotCQkJICogYW5kIGluY3JlbWVudCBjdHgncyByZWZjbnQgKi8KLQkJCW11c3RfcmVmY250ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChtdXN0X3JlZmNudCkgewotCQkJbXVzdF9yZWZjbnQgPSAwOwotCQkJaWYgKHFldGhfZWRkcF9idWZfcmVmX2NvbnRleHQoYnVmLCBjdHgpKSB7Ci0JCQkJZ290byBvdXRfY2hlY2s7Ci0JCQl9Ci0JCX0KLQkJYnVmZmVyID0gYnVmLT5idWZmZXI7Ci0JCS8qIGZpbGwgb25lIHNrYiBpbnRvIGJ1ZmZlciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5lbGVtZW50c19wZXJfc2tiOyArK2kpIHsKLQkJCWlmIChjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmxlbmd0aCAhPSAwKSB7Ci0JCQkJYnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGxdLgotCQkJCWFkZHIgPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmFkZHI7Ci0JCQkJYnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGxdLgotCQkJCWxlbmd0aCA9IGN0eC0+ZWxlbWVudHNbZWxlbWVudF0ubGVuZ3RoOwotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlmbGFncyA9IGN0eC0+ZWxlbWVudHNbZWxlbWVudF0uZmxhZ3M7Ci0JCQkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwotCQkJfQotCQkJZWxlbWVudCsrOwotCQkJZWxlbWVudHMtLTsKLQkJfQotCX0KLW91dF9jaGVjazoKLQlpZiAoIXF1ZXVlLT5kb19wYWNrKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsYmZucCIpOwotCQkvKiBzZXQgc3RhdGUgdG8gUFJJTUVEIC0+IHdpbGwgYmUgZmx1c2hlZCAqLwotCQlpZiAoYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+IDApIHsKLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWZsdXNoX2NudCsrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImZpbGxiZnBhIik7Ci0JCWlmIChidWYtPm5leHRfZWxlbWVudF90b19maWxsID49Ci0JCQkJUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSkgewotCQkJLyoKLQkJCSAqIHBhY2tlZCBidWZmZXIgaWYgZnVsbCAtPiBzZXQgc3RhdGUgUFJJTUVECi0JCQkgKiAtPiB3aWxsIGJlIGZsdXNoZWQKLQkJCSAqLwotCQkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJZmx1c2hfY250Kys7Ci0JCX0KLQl9Ci1vdXQ6Ci0JcmV0dXJuIGZsdXNoX2NudDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2hkcnMoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwgaW50IGRhdGFfbGVuKQotewotCXU4ICpwYWdlOwotCWludCBwYWdlX3JlbWFpbmRlcjsKLQlpbnQgcGFnZV9vZmZzZXQ7Ci0JaW50IHBrdF9sZW47Ci0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50OwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjcnNoIik7Ci0JcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JcGFnZV9vZmZzZXQgPSBjdHgtPm9mZnNldCAlIFBBR0VfU0laRTsKLQllbGVtZW50ID0gJmN0eC0+ZWxlbWVudHNbY3R4LT5udW1fZWxlbWVudHNdOwotCXBrdF9sZW4gPSBlZGRwLT5uaGwgKyBlZGRwLT50aGwgKyBkYXRhX2xlbjsKLQkvKiBGSVhNRTogbGF5ZXIyIGFuZCBWTEFOICEhISAqLwotCWlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpCi0JCXBrdF9sZW4gKz0gRVRIX0hMRU47Ci0JaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQlwa3RfbGVuICs9IFZMQU5fSExFTjsKLQkvKiBkb2VzIGNvbXBsZXRlIHBhY2tldCBmaXQgaW4gY3VycmVudCBwYWdlID8gKi8KLQlwYWdlX3JlbWFpbmRlciA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwotCWlmIChwYWdlX3JlbWFpbmRlciA8IChzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIHBrdF9sZW4pKSB7Ci0JCS8qIG5vIC0+IGdvIHRvIHN0YXJ0IG9mIG5leHQgcGFnZSAqLwotCQljdHgtPm9mZnNldCArPSBwYWdlX3JlbWFpbmRlcjsKLQkJcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JCXBhZ2Vfb2Zmc2V0ID0gMDsKLQl9Ci0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgJmVkZHAtPnFoLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JZWxlbWVudC0+YWRkciA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQllbGVtZW50LT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQljdHgtPm9mZnNldCArPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQlwYWdlX29mZnNldCArPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQkvKiBhZGQgbWFjIGhlYWRlciAoPykgKi8KLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5tYWMsIEVUSF9ITEVOKTsKLQkJZWxlbWVudC0+bGVuZ3RoICs9IEVUSF9ITEVOOwotCQljdHgtPm9mZnNldCArPSBFVEhfSExFTjsKLQkJcGFnZV9vZmZzZXQgKz0gRVRIX0hMRU47Ci0JfQotCS8qIGFkZCBWTEFOIHRhZyAqLwotCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgewotCQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAmZWRkcC0+dmxhbiwgVkxBTl9ITEVOKTsKLQkJZWxlbWVudC0+bGVuZ3RoICs9IFZMQU5fSExFTjsKLQkJY3R4LT5vZmZzZXQgKz0gVkxBTl9ITEVOOwotCQlwYWdlX29mZnNldCArPSBWTEFOX0hMRU47Ci0JfQotCS8qIGFkZCBuZXR3b3JrIGhlYWRlciAqLwotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICh1OCAqKSZlZGRwLT5uaCwgZWRkcC0+bmhsKTsKLQllbGVtZW50LT5sZW5ndGggKz0gZWRkcC0+bmhsOwotCWVkZHAtPm5oX2luX2N0eCA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQljdHgtPm9mZnNldCArPSBlZGRwLT5uaGw7Ci0JcGFnZV9vZmZzZXQgKz0gZWRkcC0+bmhsOwotCS8qIGFkZCB0cmFuc3BvcnQgaGVhZGVyICovCi0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgKHU4ICopJmVkZHAtPnRoLCBlZGRwLT50aGwpOwotCWVsZW1lbnQtPmxlbmd0aCArPSBlZGRwLT50aGw7Ci0JZWRkcC0+dGhfaW5fY3R4ID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCWN0eC0+b2Zmc2V0ICs9IGVkZHAtPnRobDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AoY2hhciAqZHN0LCBzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsCi0JCWludCBsZW4sIF9fd3N1bSAqaGNzdW0pCi17Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKLQlpbnQgbGVmdF9pbl9mcmFnOwotCWludCBjb3B5X2xlbjsKLQl1OCAqc3JjOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjZHRjIik7Ci0JaWYgKHNrYl9zaGluZm8oZWRkcC0+c2tiKS0+bnJfZnJhZ3MgPT0gMCkgewotCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChlZGRwLT5za2IsIGVkZHAtPnNrYl9vZmZzZXQsCi0JCQkJCQkgZHN0LCBsZW4pOwotCQkqaGNzdW0gPSBjc3VtX3BhcnRpYWwoZWRkcC0+c2tiLT5kYXRhICsgZWRkcC0+c2tiX29mZnNldCwgbGVuLAotCQkJCSAgICAgICpoY3N1bSk7Ci0JCWVkZHAtPnNrYl9vZmZzZXQgKz0gbGVuOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChsZW4gPiAwKSB7Ci0JCQlpZiAoZWRkcC0+ZnJhZyA8IDApIHsKLQkJCQkvKiB3ZSdyZSBpbiBza2ItPmRhdGEgKi8KLQkJCQlsZWZ0X2luX2ZyYWcgPSAoZWRkcC0+c2tiLT5sZW4gLQotCQkJCQkJZWRkcC0+c2tiLT5kYXRhX2xlbikKLQkJCQkJCS0gZWRkcC0+c2tiX29mZnNldDsKLQkJCQlzcmMgPSBlZGRwLT5za2ItPmRhdGEgKyBlZGRwLT5za2Jfb2Zmc2V0OwotCQkJfSBlbHNlIHsKLQkJCQlmcmFnID0gJnNrYl9zaGluZm8oZWRkcC0+c2tiKS0+ZnJhZ3NbCi0JCQkJCWVkZHAtPmZyYWddOwotCQkJCWxlZnRfaW5fZnJhZyA9IGZyYWctPnNpemUgLSBlZGRwLT5mcmFnX29mZnNldDsKLQkJCQlzcmMgPSAodTggKikoKHBhZ2VfdG9fcGZuKGZyYWctPnBhZ2UpIDw8Ci0JCQkJCVBBR0VfU0hJRlQpICsgZnJhZy0+cGFnZV9vZmZzZXQgKwotCQkJCQllZGRwLT5mcmFnX29mZnNldCk7Ci0JCQl9Ci0JCQlpZiAobGVmdF9pbl9mcmFnIDw9IDApIHsKLQkJCQllZGRwLT5mcmFnKys7Ci0JCQkJZWRkcC0+ZnJhZ19vZmZzZXQgPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY29weV9sZW4gPSBtaW4obGVmdF9pbl9mcmFnLCBsZW4pOwotCQkJbWVtY3B5KGRzdCwgc3JjLCBjb3B5X2xlbik7Ci0JCQkqaGNzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBjb3B5X2xlbiwgKmhjc3VtKTsKLQkJCWRzdCArPSBjb3B5X2xlbjsKLQkJCWVkZHAtPmZyYWdfb2Zmc2V0ICs9IGNvcHlfbGVuOwotCQkJZWRkcC0+c2tiX29mZnNldCArPSBjb3B5X2xlbjsKLQkJCWxlbiAtPSBjb3B5X2xlbjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2RhdGFfdGNwKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbiwgX193c3VtIGhjc3VtKQotewotCXU4ICpwYWdlOwotCWludCBwYWdlX3JlbWFpbmRlcjsKLQlpbnQgcGFnZV9vZmZzZXQ7Ci0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50OwotCWludCBmaXJzdF9sYXAgPSAxOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjc2R0Iik7Ci0JcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JcGFnZV9vZmZzZXQgPSBjdHgtPm9mZnNldCAlIFBBR0VfU0laRTsKLQllbGVtZW50ID0gJmN0eC0+ZWxlbWVudHNbY3R4LT5udW1fZWxlbWVudHNdOwotCXdoaWxlIChkYXRhX2xlbikgewotCQlwYWdlX3JlbWFpbmRlciA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwotCQlpZiAocGFnZV9yZW1haW5kZXIgPCBkYXRhX2xlbikgewotCQkJcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AocGFnZSArIHBhZ2Vfb2Zmc2V0LCBlZGRwLAotCQkJCQkJcGFnZV9yZW1haW5kZXIsICZoY3N1bSk7Ci0JCQllbGVtZW50LT5sZW5ndGggKz0gcGFnZV9yZW1haW5kZXI7Ci0JCQlpZiAoZmlyc3RfbGFwKQotCQkJCWVsZW1lbnQtPmZsYWdzID0gU0JBTF9GTEFHU19GSVJTVF9GUkFHOwotCQkJZWxzZQotCQkJCWVsZW1lbnQtPmZsYWdzID0gU0JBTF9GTEFHU19NSURETEVfRlJBRzsKLQkJCWN0eC0+bnVtX2VsZW1lbnRzKys7Ci0JCQllbGVtZW50Kys7Ci0JCQlkYXRhX2xlbiAtPSBwYWdlX3JlbWFpbmRlcjsKLQkJCWN0eC0+b2Zmc2V0ICs9IHBhZ2VfcmVtYWluZGVyOwotCQkJcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JCQlwYWdlX29mZnNldCA9IDA7Ci0JCQllbGVtZW50LT5hZGRyID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCQl9IGVsc2UgewotCQkJcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AocGFnZSArIHBhZ2Vfb2Zmc2V0LCBlZGRwLAotCQkJCQkJZGF0YV9sZW4sICZoY3N1bSk7Ci0JCQllbGVtZW50LT5sZW5ndGggKz0gZGF0YV9sZW47Ci0JCQlpZiAoIWZpcnN0X2xhcCkKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9GUkFHOwotCQkJY3R4LT5udW1fZWxlbWVudHMrKzsKLQkJCWN0eC0+b2Zmc2V0ICs9IGRhdGFfbGVuOwotCQkJZGF0YV9sZW4gPSAwOwotCQl9Ci0JCWZpcnN0X2xhcCA9IDA7Ci0JfQotCSgoc3RydWN0IHRjcGhkciAqKWVkZHAtPnRoX2luX2N0eCktPmNoZWNrID0gY3N1bV9mb2xkKGhjc3VtKTsKLX0KLQotc3RhdGljIF9fd3N1bSBxZXRoX2VkZHBfY2hlY2tfdGNwNF9oZHIoc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgZGF0YV9sZW4pCi17Ci0JX193c3VtIHBoY3N1bTsgLyogcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBja3Q0Iik7Ci0JZWRkcC0+dGgudGNwLmguY2hlY2sgPSAwOwotCS8qIGNvbXB1dGUgcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCXBoY3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChlZGRwLT5uaC5pcDQuaC5zYWRkciwgZWRkcC0+bmguaXA0LmguZGFkZHIsCi0JCQkJICAgIGVkZHAtPnRobCArIGRhdGFfbGVuLCBJUFBST1RPX1RDUCwgMCk7Ci0JLyogY29tcHV0ZSBjaGVja3N1bSBvZiB0Y3AgaGVhZGVyICovCi0JcmV0dXJuIGNzdW1fcGFydGlhbCgmZWRkcC0+dGgsIGVkZHAtPnRobCwgcGhjc3VtKTsKLX0KLQotc3RhdGljIF9fd3N1bSBxZXRoX2VkZHBfY2hlY2tfdGNwNl9oZHIoc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgZGF0YV9sZW4pCi17Ci0JX19iZTMyIHByb3RvOwotCV9fd3N1bSBwaGNzdW07IC8qIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2t0NiIpOwotCWVkZHAtPnRoLnRjcC5oLmNoZWNrID0gMDsKLQkvKiBjb21wdXRlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJmVkZHAtPm5oLmlwNi5oLnNhZGRyLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIDApOwotCXBoY3N1bSA9IGNzdW1fcGFydGlhbCgmZWRkcC0+bmguaXA2LmguZGFkZHIsCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgcGhjc3VtKTsKLQlwcm90byA9IGh0b25sKElQUFJPVE9fVENQKTsKLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJnByb3RvLCBzaXplb2YodTMyKSwgcGhjc3VtKTsKLQlyZXR1cm4gcGhjc3VtOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfZWRkcF9kYXRhICpxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShzdHJ1Y3QgcWV0aF9oZHIgKnFoLAotCQl1OCAqbmgsIHU4IG5obCwgdTggKnRoLCB1OCB0aGwpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjcmRhIik7Ci0JZWRkcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSksIEdGUF9BVE9NSUMpOwotCWlmIChlZGRwKSB7Ci0JCWVkZHAtPm5obCA9IG5obDsKLQkJZWRkcC0+dGhsID0gdGhsOwotCQltZW1jcHkoJmVkZHAtPnFoLCBxaCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCQltZW1jcHkoJmVkZHAtPm5oLCBuaCwgbmhsKTsKLQkJbWVtY3B5KCZlZGRwLT50aCwgdGgsIHRobCk7Ci0JCWVkZHAtPmZyYWcgPSAtMTsgLyogaW5pdGlhbGx5IHdlJ3JlIGluIHNrYi0+ZGF0YSAqLwotCX0KLQlyZXR1cm4gZWRkcDsKLX0KLQotc3RhdGljIHZvaWQgX19xZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwKQotewotCXN0cnVjdCB0Y3BoZHIgKnRjcGg7Ci0JaW50IGRhdGFfbGVuOwotCV9fd3N1bSBoY3N1bTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwZnRjcCIpOwotCWVkZHAtPnNrYl9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIGVkZHAtPm5obCArIGVkZHAtPnRobDsKLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCWVkZHAtPnNrYl9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpOwotCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCQllZGRwLT5za2Jfb2Zmc2V0ICs9IFZMQU5fSExFTjsKLQl9Ci0JdGNwaCA9IHRjcF9oZHIoZWRkcC0+c2tiKTsKLQl3aGlsZSAoZWRkcC0+c2tiX29mZnNldCA8IGVkZHAtPnNrYi0+bGVuKSB7Ci0JCWRhdGFfbGVuID0gbWluKChpbnQpc2tiX3NoaW5mbyhlZGRwLT5za2IpLT5nc29fc2l6ZSwKLQkJCSAgICAgICAoaW50KShlZGRwLT5za2ItPmxlbiAtIGVkZHAtPnNrYl9vZmZzZXQpKTsKLQkJLyogcHJlcGFyZSBxZGlvIGhkciAqLwotCQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCQllZGRwLT5xaC5oZHIubDIucGt0X2xlbmd0aCA9IGRhdGFfbGVuICsgRVRIX0hMRU4gKwotCQkJCQkJICAgICBlZGRwLT5uaGwgKyBlZGRwLT50aGw7Ci0JCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCQkJZWRkcC0+cWguaGRyLmwyLnBrdF9sZW5ndGggKz0gVkxBTl9ITEVOOwotCQl9IGVsc2UKLQkJCWVkZHAtPnFoLmhkci5sMy5sZW5ndGggPSBkYXRhX2xlbiArIGVkZHAtPm5obCArCi0JCQkJCQkgZWRkcC0+dGhsOwotCQkvKiBwcmVwYXJlIGlwIGhkciAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJCWVkZHAtPm5oLmlwNC5oLnRvdF9sZW4gPSBodG9ucyhkYXRhX2xlbiArIGVkZHAtPm5obCArCi0JCQkJCQkgZWRkcC0+dGhsKTsKLQkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0gMDsKLQkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0KLQkJCQlpcF9mYXN0X2NzdW0oKHU4ICopJmVkZHAtPm5oLmlwNC5oLAotCQkJCQkJZWRkcC0+bmguaXA0LmguaWhsKTsKLQkJfSBlbHNlCi0JCQllZGRwLT5uaC5pcDYuaC5wYXlsb2FkX2xlbiA9IGh0b25zKGRhdGFfbGVuICsKLQkJCQkJCQkJZWRkcC0+dGhsKTsKLQkJLyogcHJlcGFyZSB0Y3AgaGRyICovCi0JCWlmIChkYXRhX2xlbiA9PSAoZWRkcC0+c2tiLT5sZW4gLSBlZGRwLT5za2Jfb2Zmc2V0KSkgewotCQkJLyogbGFzdCBzZWdtZW50IC0+IHNldCBGSU4gYW5kIFBTSCBmbGFncyAqLwotCQkJZWRkcC0+dGgudGNwLmguZmluID0gdGNwaC0+ZmluOwotCQkJZWRkcC0+dGgudGNwLmgucHNoID0gdGNwaC0+cHNoOwotCQl9Ci0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDRfaGRyKGVkZHAsIGRhdGFfbGVuKTsKLQkJZWxzZQotCQkJaGNzdW0gPSBxZXRoX2VkZHBfY2hlY2tfdGNwNl9oZHIoZWRkcCwgZGF0YV9sZW4pOwotCQkvKiBmaWxsIHRoZSBuZXh0IHNlZ21lbnQgaW50byB0aGUgY29udGV4dCAqLwotCQlxZXRoX2VkZHBfY3JlYXRlX3NlZ21lbnRfaGRycyhjdHgsIGVkZHAsIGRhdGFfbGVuKTsKLQkJcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2RhdGFfdGNwKGN0eCwgZWRkcCwgZGF0YV9sZW4sIGhjc3VtKTsKLQkJaWYgKGVkZHAtPnNrYl9vZmZzZXQgPj0gZWRkcC0+c2tiLT5sZW4pCi0JCQlicmVhazsKLQkJLyogcHJlcGFyZSBoZWFkZXJzIGZvciBuZXh0IHJvdW5kICovCi0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJCWVkZHAtPm5oLmlwNC5oLmlkID0gaHRvbnMobnRvaHMoZWRkcC0+bmguaXA0LmguaWQpICsgMSk7Ci0JCWVkZHAtPnRoLnRjcC5oLnNlcSA9IGh0b25sKG50b2hsKGVkZHAtPnRoLnRjcC5oLnNlcSkgKwotCQkJZGF0YV9sZW4pOwotCX0KLX0KLQotc3RhdGljIGludCBxZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpxaGRyKQotewotCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCA9IE5VTEw7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZpY3giKTsKLQkvKiBjcmVhdGUgb3VyIHNlZ21lbnRhdGlvbiBoZWFkZXJzIGFuZCBjb3B5IG9yaWdpbmFsIGhlYWRlcnMgKi8KLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCWVkZHAgPSBxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShxaGRyLAotCQkJCQkJICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwKLQkJCQkJCSAgaXBfaGRybGVuKHNrYiksCi0JCQkJCQkgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHRjcF9oZHJsZW4oc2tiKSk7Ci0JZWxzZQotCQllZGRwID0gcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEocWhkciwKLQkJCQkJCSAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCi0JCQkJCQkgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHRjcF9oZHJsZW4oc2tiKSk7Ci0KLQlpZiAoZWRkcCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJlZGRwZmNubSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaWYgKHFoZHItPmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JCW1lbWNweSgmZWRkcC0+bWFjLCBldGhfaGRyKHNrYiksIEVUSF9ITEVOKTsKLQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCQllZGRwLT52bGFuWzBdID0gc2tiLT5wcm90b2NvbDsKLQkJCWVkZHAtPnZsYW5bMV0gPSBodG9ucyh2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCX0KLQl9Ci0JLyogdGhlIG5leHQgZmxhZ3Mgd2lsbCBvbmx5IGJlIHNldCBvbiB0aGUgbGFzdCBzZWdtZW50ICovCi0JZWRkcC0+dGgudGNwLmguZmluID0gMDsKLQllZGRwLT50aC50Y3AuaC5wc2ggPSAwOwotCWVkZHAtPnNrYiA9IHNrYjsKLQkvKiBiZWdpbiBzZWdtZW50YXRpb24gYW5kIGZpbGwgY29udGV4dCAqLwotCV9fcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3AoY3R4LCBlZGRwKTsKLQlrZnJlZShlZGRwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NhbGNfbnVtX3BhZ2VzKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbikKLXsKLQlpbnQgc2tic19wZXJfcGFnZTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2FucCIpOwotCS8qIGNhbiB3ZSBwdXQgbXVsdGlwbGUgc2ticyBpbiBvbmUgcGFnZT8gKi8KLQlza2JzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgKyBoZHJfbGVuKTsKLQlpZiAoc2tic19wZXJfcGFnZSA+IDEpIHsKLQkJY3R4LT5udW1fcGFnZXMgPSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpIC8KLQkJCQkgc2tic19wZXJfcGFnZSArIDE7Ci0JCWN0eC0+ZWxlbWVudHNfcGVyX3NrYiA9IDE7Ci0JfSBlbHNlIHsKLQkJLyogbm8gLT4gaG93IG1hbnkgZWxlbWVudHMgcGVyIHNrYj8gKi8KLQkJY3R4LT5lbGVtZW50c19wZXJfc2tiID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgKyBoZHJfbGVuICsKLQkJCQkgICAgIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVDsKLQkJY3R4LT5udW1fcGFnZXMgPSBjdHgtPmVsZW1lbnRzX3Blcl9za2IgKgotCQkJCSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpOwotCX0KLQljdHgtPm51bV9lbGVtZW50cyA9IGN0eC0+ZWxlbWVudHNfcGVyX3NrYiAqCi0JCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoCi0JCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQl1OCAqYWRkcjsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjZyIpOwotCS8qIGNyZWF0ZSB0aGUgY29udGV4dCBhbmQgYWxsb2NhdGUgcGFnZXMgKi8KLQljdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY24xIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQljdHgtPnR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQlxZXRoX2VkZHBfY2FsY19udW1fcGFnZXMoY3R4LCBza2IsIGhkcl9sZW4pOwotCWlmIChjdHgtPmVsZW1lbnRzX3Blcl9za2IgPiBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY2lzIik7Ci0JCWtmcmVlKGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQljdHgtPnBhZ2VzID0ga2NhbGxvYyhjdHgtPm51bV9wYWdlcywgc2l6ZW9mKHU4ICopLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4LT5wYWdlcyA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMiIpOwotCQlrZnJlZShjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX3BhZ2VzOyArK2kpIHsKLQkJYWRkciA9ICh1OCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKGFkZHIgPT0gTlVMTCkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY24zIik7Ci0JCQljdHgtPm51bV9wYWdlcyA9IGk7Ci0JCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQljdHgtPnBhZ2VzW2ldID0gYWRkcjsKLQl9Ci0JY3R4LT5lbGVtZW50cyA9IGtjYWxsb2MoY3R4LT5udW1fZWxlbWVudHMsCi0JCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCksIEdGUF9BVE9NSUMpOwotCWlmIChjdHgtPmVsZW1lbnRzID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY240Iik7Ci0JCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCS8qIHJlc2V0IG51bV9lbGVtZW50czsgd2lsbCBiZSBpbmNyZW1lbnRlZCBhZ2FpbiBpbiBmaWxsX2J1ZmZlciB0bwotCSAqIHJlZmxlY3QgbnVtYmVyIG9mIGFjdHVhbGx5IHVzZWQgZWxlbWVudHMgKi8KLQljdHgtPm51bV9lbGVtZW50cyA9IDA7Ci0JcmV0dXJuIGN0eDsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X3RjcCgKLQkJc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJc3RydWN0IHFldGhfaGRyICpxaGRyKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjdCIpOwotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoY2FyZCwgc2tiLAotCQkJCQkJKHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsKLQkJCQkJCWlwX2hkcmxlbihza2IpICsKLQkJCQkJCXRjcF9oZHJsZW4oc2tiKSkpOwotCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCi0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKLQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArCi0JCQl0Y3BfaGRybGVuKHNrYikpOwotCWVsc2UKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNldGNwaW52Iik7Ci0KLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNyZWRkcG5sIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlpZiAocWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3AoY3R4LCBza2IsIHFoZHIpKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcHRmZSIpOwotCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlhdG9taWNfc2V0KCZjdHgtPnJlZmNudCwgMSk7Ci0JcmV0dXJuIGN0eDsKLX0KLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpxaGRyLAotCQl1bnNpZ25lZCBjaGFyIHNrX3Byb3RvY29sKQotewotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjIik7Ci0Jc3dpdGNoIChza19wcm90b2NvbCkgewotCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCXJldHVybiBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfdGNwKGNhcmQsIHNrYiwgcWhkcik7Ci0JZGVmYXVsdDoKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImVkZHBpbnZwIik7Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KTsKLQotdm9pZCBxZXRoX3Rzb19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIsCi0JCXN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHFldGhfaGRyX3RzbyAqaGRyID0gKHN0cnVjdCBxZXRoX2hkcl90c28gKilxaGRyOwotCXN0cnVjdCB0Y3BoZHIgKnRjcGggPSB0Y3BfaGRyKHNrYik7Ci0Jc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAidHNvZmhkciIpOwotCi0JLypmaXggaGVhZGVyIHRvIFRTTyB2YWx1ZXMgLi4uKi8KLQloZHItPmhkci5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX1RTTzsKLQkvKnNldCB2YWx1ZXMgd2hpY2ggYXJlIGZpeCBmb3IgdGhlIGZpcnN0IGFwcHJvYWNoIC4uLiovCi0JaGRyLT5leHQuaGRyX3RvdF9sZW4gPSAoX191MTYpIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfZXh0X3Rzbyk7Ci0JaGRyLT5leHQuaW1iX2hkcl9ubyAgPSAxOwotCWhkci0+ZXh0Lmhkcl90eXBlICAgID0gMTsKLQloZHItPmV4dC5oZHJfdmVyc2lvbiA9IDE7Ci0JaGRyLT5leHQuaGRyX2xlbiAgICAgPSAyODsKLQkvKmluc2VydCBub24tZml4IHZhbHVlcyAqLwotCWhkci0+ZXh0Lm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7Ci0JaGRyLT5leHQuZGdfaGRyX2xlbiA9IChfX3UxNikoaXBoLT5paGwqNCArIHRjcGgtPmRvZmYqNCk7Ci0JaGRyLT5leHQucGF5bG9hZF9sZW4gPSAoX191MTYpKHNrYi0+bGVuIC0gaGRyLT5leHQuZGdfaGRyX2xlbiAtCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7Ci0JdGNwaC0+Y2hlY2sgPSAwOwotCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpIHsKLQkJaXA2aC0+cGF5bG9hZF9sZW4gPSAwOwotCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCi0JCQkJCSAgICAgICAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JfSBlbHNlIHsKLQkJLypPU0Egd2FudCB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIC4uLiovCi0JCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCi0JCQkJCSAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JCWlwaC0+dG90X2xlbiA9IDA7Ci0JCWlwaC0+Y2hlY2sgPSAwOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfdHNvX2ZpbGxfaGVhZGVyKTsKLQotdm9pZCBxZXRoX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgdGxlbjsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJdGxlbiA9IG50b2hzKGlwX2hkcihza2IpLT50b3RfbGVuKSAtIChpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwotCQlzd2l0Y2ggKGlwX2hkcihza2IpLT5wcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7Ci0JCXN3aXRjaCAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcikgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF90eF9jc3VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAppbmRleCA4NmJmN2RmLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3Ci0gKiAgICBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4sCi0gKgkJIEZyYW5rIEJsYXNjaGthIDxmcmFuay5ibGFzY2hrYUBkZS5pYm0uY29tPgotICovCi0KLSNpZm5kZWYgX19RRVRIX0NPUkVfT0ZGTF9IX18KLSNkZWZpbmUgX19RRVRIX0NPUkVfT0ZGTF9IX18KLQotc3RydWN0IHFldGhfZWRkcF9lbGVtZW50IHsKLQl1MzIgZmxhZ3M7Ci0JdTMyIGxlbmd0aDsKLQl2b2lkICphZGRyOwotfTsKLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0IHsKLQlhdG9taWNfdCByZWZjbnQ7Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgdHlwZTsKLQlpbnQgbnVtX3BhZ2VzOwkJCSAgICAvKiAjIG9mIGFsbG9jYXRlZCBwYWdlcyAqLwotCXU4ICoqcGFnZXM7CQkJICAgIC8qIHBvaW50ZXJzIHRvIHBhZ2VzICovCi0JaW50IG9mZnNldDsJCQkgICAgLyogb2Zmc2V0IGluIGN0eCBkdXJpbmcgY3JlYXRpb24gKi8KLQlpbnQgbnVtX2VsZW1lbnRzOwkJICAgIC8qICMgb2YgcmVxdWlyZWQgJ1NCQUxFcycgKi8KLQlzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgKmVsZW1lbnRzOyAvKiBhcnJheSBvZiAnU0JBTEVzJyAqLwotCWludCBlbGVtZW50c19wZXJfc2tiOwkJICAgIC8qICMgb2YgJ1NCQUxFcycgcGVyIHNrYiAqKi8KLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eDsKLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfZGF0YSB7Ci0Jc3RydWN0IHFldGhfaGRyIHFoOwotCXN0cnVjdCBldGhoZHIgbWFjOwotCV9fYmUxNiB2bGFuWzJdOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBpcGhkciBoOwotCQkJdTggb3B0aW9uc1s0MF07Ci0JCX0gaXA0OwotCQlzdHJ1Y3QgewotCQkJc3RydWN0IGlwdjZoZHIgaDsKLQkJfSBpcDY7Ci0JfSBuaDsKLQl1OCBuaGw7Ci0Jdm9pZCAqbmhfaW5fY3R4OwkvKiBhZGRyZXNzIG9mIG5oIHdpdGhpbiB0aGUgY3R4ICovCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJc3RydWN0IHRjcGhkciBoOwotCQkJdTggb3B0aW9uc1s0MF07Ci0JCX0gdGNwOwotCX0gdGg7Ci0JdTggdGhsOwotCXZvaWQgKnRoX2luX2N0eDsJLyogYWRkcmVzcyBvZiB0aCB3aXRoaW4gdGhlIGN0eCAqLwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHNrYl9vZmZzZXQ7Ci0JaW50IGZyYWc7Ci0JaW50IGZyYWdfb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWV4dGVybiBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dChzdHJ1Y3QgcWV0aF9jYXJkICosCi0JCSBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgdW5zaWduZWQgY2hhcik7Ci1leHRlcm4gdm9pZCBxZXRoX2VkZHBfcHV0X2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICopOwotZXh0ZXJuIGludCBxZXRoX2VkZHBfZmlsbF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKiwgaW50KTsKLWV4dGVybiB2b2lkIHFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKik7Ci1leHRlcm4gaW50IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICopOwotCi12b2lkIHFldGhfdHNvX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfaGRyICosCi0JCXN0cnVjdCBza19idWZmICopOwotdm9pZCBxZXRoX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLSNlbmRpZiAvKiBfX1FFVEhfQ09SRV9FRERQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwppbmRleCBjMjZlODQyLi41Njg0NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwpAQCAtNDI3LDggKzQyNyw2IEBACiAJc3dpdGNoIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpIHsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9OTzoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJubyIpOwotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiRUREUCIpOwogCWNhc2UgUUVUSF9MQVJHRV9TRU5EX1RTTzoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJUU08iKTsKIAlkZWZhdWx0OgpAQCAtNDQ5LDggKzQ0Nyw2IEBACiAJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKIAlpZiAoIXN0cmNtcCh0bXAsICJubyIpKSB7CiAJCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIkVERFAiKSkgewotCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CiAJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIlRTTyIpKSB7CiAJCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfVFNPOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAwN2FiOGE1Li4xNzIwMzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogCiAjaW5jbHVkZSAicWV0aF9jb3JlLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKIAogc3RhdGljIGludCBxZXRoX2wyX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTMyOCw2ICszMjcsMTAgQEAKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQ7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImFpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiYWlkUkVDIik7CisJCXJldHVybjsKKwl9CiAJaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF92bGFuX3ZpZCksIEdGUF9BVE9NSUMpOwogCWlmIChpZCkgewogCQlpZC0+dmlkID0gdmlkOwpAQCAtMzQ0LDYgKzM0NywxMCBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImtpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCXJldHVybjsKKwl9CiAJc3Bpbl9sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmNhcmQtPnZpZF9saXN0LCBsaXN0KSB7CiAJCWlmIChpZC0+dmlkID09IHZpZCkgewpAQCAtMzc5LDcgKzM4Niw4IEBACiAJCQlkZXZfY2xvc2UoY2FyZC0+ZGV2KTsKIAkJCXJ0bmxfdW5sb2NrKCk7CiAJCX0KLQkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wKSB7CisJCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCB8fAorCQkJcmVjb3ZlcnlfbW9kZSkgewogCQkJX191OCAqbWFjID0gJmNhcmQtPmRldi0+ZGV2X2FkZHJbMF07CiAJCQlyYyA9IHFldGhfbDJfc2VuZF9kZWxtYWMoY2FyZCwgbWFjKTsKIAkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiTGVyciVkIiwgcmMpOwpAQCAtMzg4LDcgKzM5Niw4IEBACiAJfQogCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1NPRlRTRVRVUCkgewogCQlxZXRoX2wyX3Byb2Nlc3NfdmxhbnMoY2FyZCwgMSk7Ci0JCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCkKKwkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wIHx8CisJCQlyZWNvdmVyeV9tb2RlKQogCQkJcWV0aF9sMl9kZWxfYWxsX21jKGNhcmQpOwogCQlxZXRoX2NsZWFyX2lwYWNtZF9saXN0KGNhcmQpOwogCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfSEFSRFNFVFVQOwpAQCAtNTkzLDYgKzYwMiwxMCBAQAogCX0KIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMywgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwogCVFFVEhfREJGX0hFWChUUkFDRSwgMywgYWRkci0+c2FfZGF0YSwgT1NBX0FERFJfTEVOKTsKKwlpZiAocWV0aF93YWl0X2Zvcl90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtY1JFQyIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KIAlyYyA9IHFldGhfbDJfc2VuZF9kZWxtYWMoY2FyZCwgJmNhcmQtPmRldi0+ZGV2X2FkZHJbMF0pOwogCWlmICghcmMpCiAJCXJjID0gcWV0aF9sMl9zZW5kX3NldG1hYyhjYXJkLCBhZGRyLT5zYV9kYXRhKTsKQEAgLTYwOCw2ICs2MjEsOSBAQAogCQlyZXR1cm4gOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG11bHRpIik7CisJaWYgKHFldGhfdGhyZWFkc19ydW5uaW5nKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSkKKwkJcmV0dXJuOwogCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKIAlzcGluX2xvY2tfYmgoJmNhcmQtPm1jbG9jayk7CiAJZm9yIChkbSA9IGRldi0+bWNfbGlzdDsgZG07IGRtID0gZG0tPm5leHQpCkBAIC02MzQsOCArNjUwLDYgQEAKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzCiAJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CiAJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CiAJaW50IGRhdGFfb2Zmc2V0ID0gLTE7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CiAJaW50IGhkX2xlbiA9IDA7CkBAIC02NTUsMTQgKzY2OSwxMCBAQAogCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlpZiAoc2tiX2lzX2dzbyhza2IpKQotCQlsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7Ci0KIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJaGRyID0gKHN0cnVjdCBxZXRoX2hkciAqKXNrYi0+ZGF0YTsKIAllbHNlIHsKLQkJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJiAoIWxhcmdlX3NlbmQpICYmCi0JCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSkgeworCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewogCQkJbmV3X3NrYiA9IHNrYjsKIAkJCWRhdGFfb2Zmc2V0ID0gRVRIX0hMRU47CiAJCQloZF9sZW4gPSBFVEhfSExFTjsKQEAgLTY4OSw1OSArNjk5LDI2IEBACiAJCX0KIAl9CiAKLQlpZiAobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfRUREUCkgewotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoY2FyZCwgbmV3X3NrYiwgaGRyLAotCQkJCQkJc2tiLT5zay0+c2tfcHJvdG9jb2wpOwotCQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJCVFFVEhfREJGX01FU1NBR0UoMiwgImNvdWxkIG5vdCBjcmVhdGUgZWRkcCBjb250ZXh0XG4iKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQotCX0gZWxzZSB7Ci0JCWVsZW1lbnRzID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCisJZWxlbWVudHMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKIAkJCQkJCWVsZW1lbnRzX25lZWRlZCk7Ci0JCWlmICghZWxlbWVudHMpIHsKLQkJCWlmIChkYXRhX29mZnNldCA+PSAwKQotCQkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9CisJaWYgKCFlbGVtZW50cykgeworCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKKwkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOworCQlnb3RvIHR4X2Ryb3A7CiAJfQogCi0JaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgJiYKLQkgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQotCQlxZXRoX3R4X2NzdW0obmV3X3NrYik7Ci0KIAlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSBlbGVtZW50cywgY3R4KTsKKwkJCQkJIGVsZW1lbnRzKTsKIAllbHNlCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCWVsZW1lbnRzLCBjdHgsIGRhdGFfb2Zmc2V0LCBoZF9sZW4pOworCQkJCQllbGVtZW50cywgZGF0YV9vZmZzZXQsIGhkX2xlbik7CiAJaWYgKCFyYykgewogCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2J5dGVzOwogCQlpZiAobmV3X3NrYiAhPSBza2IpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgewotCQkJaWYgKGxhcmdlX3NlbmQgIT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7Ci0JCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwotCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKLQkJCX0KLQkJCWlmIChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyA+IDApIHsKLQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCsrOwotCQkJCS8qIG5yX2ZyYWdzICsgc2tiLT5kYXRhICovCi0JCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9Ci0JCQkJCXNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMTsKLQkJCX0KLQkJfQotCi0JCWlmIChjdHggIT0gTlVMTCkgewotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJfQogCX0gZWxzZSB7Ci0JCWlmIChjdHggIT0gTlVMTCkKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCiAJCWlmIChkYXRhX29mZnNldCA+PSAwKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CiAKQEAgLTg3OCwzMCArODU1LDggQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sMl9ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7Ci0JCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCX0KLQl9IGVsc2UgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBxZXRoX2wyX2V0aHRvb2xfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgPSBxZXRoX2NvcmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3RhdHNfY291bnQgPSBxZXRoX2NvcmVfZ2V0X3N0YXRzX2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggM2QwNDkyMC4uMGJhMzgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0xOSwxNSArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAicWV0aF9sMy5oIgotI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCiAKIHN0YXRpYyBpbnQgcWV0aF9sM19zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOwogc3RhdGljIGludCBxZXRoX2wzX3JlY292ZXIodm9pZCAqKTsKQEAgLTEwMzgsNyArMTAzOCw3IEBACiAJcmMgPSBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKIAlpZiAocmMpIHsKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgY291bGRuJ3Qgc2V0IGFkYXB0ZXIgcGFyYW1ldGVyczogIgotCQkJIjB4JXhcbiIsIGNhcmQtPmdkZXYtPmRldi5idXNfaWQsIHJjKTsKKwkJCSIweCV4XG4iLCBkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUykpIHsKQEAgLTE4MzgsNiArMTgzOCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImtpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCXJldHVybjsKKwl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7CiAJLyogdW5yZWdpc3RlciBJUCBhZGRyZXNzZXMgb2YgdmxhbiBkZXZpY2UgKi8KIAlxZXRoX2wzX2ZyZWVfdmxhbl9hZGRyZXNzZXMoY2FyZCwgdmlkKTsKQEAgLTIxMDEsNiArMjEwNSw5IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCisJCXJldHVybjsKIAlxZXRoX2wzX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CiAJcWV0aF9sM19hZGRfbXVsdGljYXN0X2lwdjQoY2FyZCk7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgpAQCAtMjU3NywxMiArMjU4NCw2MyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfaGRyICpxaGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBxZXRoX2hkcl90c28gKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHJfdHNvICopcWhkcjsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCisJLypmaXggaGVhZGVyIHRvIFRTTyB2YWx1ZXMgLi4uKi8KKwloZHItPmhkci5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX1RTTzsKKwkvKnNldCB2YWx1ZXMgd2hpY2ggYXJlIGZpeCBmb3IgdGhlIGZpcnN0IGFwcHJvYWNoIC4uLiovCisJaGRyLT5leHQuaGRyX3RvdF9sZW4gPSAoX191MTYpIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfZXh0X3Rzbyk7CisJaGRyLT5leHQuaW1iX2hkcl9ubyAgPSAxOworCWhkci0+ZXh0Lmhkcl90eXBlICAgID0gMTsKKwloZHItPmV4dC5oZHJfdmVyc2lvbiA9IDE7CisJaGRyLT5leHQuaGRyX2xlbiAgICAgPSAyODsKKwkvKmluc2VydCBub24tZml4IHZhbHVlcyAqLworCWhkci0+ZXh0Lm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJaGRyLT5leHQuZGdfaGRyX2xlbiA9IChfX3UxNikoaXBoLT5paGwqNCArIHRjcGgtPmRvZmYqNCk7CisJaGRyLT5leHQucGF5bG9hZF9sZW4gPSAoX191MTYpKHNrYi0+bGVuIC0gaGRyLT5leHQuZGdfaGRyX2xlbiAtCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7CisJdGNwaC0+Y2hlY2sgPSAwOworCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpIHsKKwkJaXA2aC0+cGF5bG9hZF9sZW4gPSAwOworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCisJCQkJCSAgICAgICAwLCBJUFBST1RPX1RDUCwgMCk7CisJfSBlbHNlIHsKKwkJLypPU0Egd2FudCB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIC4uLiovCisJCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCQkJCSAwLCBJUFBST1RPX1RDUCwgMCk7CisJCWlwaC0+dG90X2xlbiA9IDA7CisJCWlwaC0+Y2hlY2sgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCit7CisJX193c3VtIGNzdW07CisJaW50IG9mZnNldDsKKworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpKTsKKwlvZmZzZXQgPSBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKTsKKwlCVUdfT04ob2Zmc2V0ID49IHNrYl9oZWFkbGVuKHNrYikpOworCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKTsKKworCW9mZnNldCArPSBza2ItPmNzdW1fb2Zmc2V0OworCUJVR19PTihvZmZzZXQgKyBzaXplb2YoX19zdW0xNikgPiBza2JfaGVhZGxlbihza2IpKTsKKwkqKF9fc3VtMTYgKikoc2tiLT5kYXRhICsgb2Zmc2V0KSA9IGNzdW1fZm9sZChjc3VtKTsKK30KKwogc3RhdGljIGludCBxZXRoX2wzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCByYzsKIAl1MTYgKnRhZzsKIAlzdHJ1Y3QgcWV0aF9oZHIgKmhkciA9IE5VTEw7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CisJaW50IGVsZW1zOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBOVUxMOwogCWludCBpcHYgPSBxZXRoX2dldF9pcF92ZXJzaW9uKHNrYik7CkBAIC0yNTkxLDggKzI2NDksOCBAQAogCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwogCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwogCWludCBkYXRhX29mZnNldCA9IC0xOworCWludCBucl9mcmFnczsKIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYKIAkgICAgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpICYmCkBAIC0yNjE1LDYgKzI2NzMsMTIgQEAKIAogCWlmIChza2JfaXNfZ3NvKHNrYikpCiAJCWxhcmdlX3NlbmQgPSBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQ7CisJZWxzZQorCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQkJcWV0aF90eF9jc3VtKHNrYik7CisJCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCQljYXJkLT5wZXJmX3N0YXRzLnR4X2NzdW0rKzsKKwkJfQogCiAJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJiAoIWxhcmdlX3NlbmQpICYmCiAJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApKSB7CkBAIC0yNjYxLDEyICsyNzI1LDEzIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJLyogZml4IGhhcmR3YXJlIGxpbWl0YXRpb246IGFzIGxvbmcgYXMgd2UgZG8gbm90IGhhdmUgc2JhbAotCSAqIGNoYWluaW5nIHdlIGNhbiBub3Qgc2VuZCBsb25nIGZyYWcgbGlzdHMgc28gd2UgdGVtcG9yYXJ5Ci0JICogc3dpdGNoIHRvIEVERFAKKwkgKiBjaGFpbmluZyB3ZSBjYW4gbm90IHNlbmQgbG9uZyBmcmFnIGxpc3RzCiAJICovCiAJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCi0JCSgoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAyKSA+IDE2KSkKLQkJbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCSAgICAoKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMikgPiAxNikpIHsKKwkJaWYgKHNrYl9saW5lYXJpemUobmV3X3NrYikpCisJCQlnb3RvIHR4X2Ryb3A7CisJfQogCiAJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCiAJICAgIChjYXN0X3R5cGUgPT0gUlROX1VOU1BFQykpIHsKQEAgLTI2ODksMzcgKzI3NTQsMjIgQEAKIAkJfQogCX0KIAotCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9FRERQKSB7Ci0JCS8qIG5ld19za2IgaXMgbm90IG93bmVkIGJ5IGEgc29ja2V0IHNvIHdlIHVzZSBza2IgdG8gZ2V0Ci0JCSAqIHRoZSBwcm90b2NvbAotCQkgKi8KLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIG5ld19za2IsIGhkciwKLQkJCQkJCXNrYi0+c2stPnNrX3Byb3RvY29sKTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJjb3VsZCBub3QgY3JlYXRlIGVkZHAgY29udGV4dFxuIik7Ci0JCQlnb3RvIHR4X2Ryb3A7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgZWxlbXMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKKwllbGVtcyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLAogCQkJCQkJIGVsZW1lbnRzX25lZWRlZCk7Ci0JCWlmICghZWxlbXMpIHsKLQkJCWlmIChkYXRhX29mZnNldCA+PSAwKQotCQkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9Ci0JCWVsZW1lbnRzX25lZWRlZCArPSBlbGVtczsKKwlpZiAoIWVsZW1zKSB7CisJCWlmIChkYXRhX29mZnNldCA+PSAwKQorCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CisJCWdvdG8gdHhfZHJvcDsKIAl9Ci0KLQlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSAmJgotCSAgICAobmV3X3NrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQotCQlxZXRoX3R4X2NzdW0obmV3X3NrYik7CisJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3M7CiAKIAlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSBlbGVtZW50c19uZWVkZWQsIGN0eCk7CisJCQkJCSBlbGVtZW50c19uZWVkZWQpOwogCWVsc2UKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3QoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKLQkJCQkJZWxlbWVudHNfbmVlZGVkLCBjdHgsIGRhdGFfb2Zmc2V0LCAwKTsKKwkJCQkJZWxlbWVudHNfbmVlZGVkLCBkYXRhX29mZnNldCwgMCk7CiAKIAlpZiAoIXJjKSB7CiAJCWNhcmQtPnN0YXRzLnR4X3BhY2tldHMrKzsKQEAgLTI3MzEsMjIgKzI3ODEsMTMgQEAKIAkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOwogCQkJfQotCQkJaWYgKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzID4gMCkgeworCQkJaWYgKG5yX2ZyYWdzKSB7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3NlbnQrKzsKIAkJCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLwotCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPQotCQkJCQlza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDE7CisJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9IG5yX2ZyYWdzICsgMTsKIAkJCX0KIAkJfQotCi0JCWlmIChjdHggIT0gTlVMTCkgewotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJfQogCX0gZWxzZSB7Ci0JCWlmIChjdHggIT0gTlVMTCkKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCiAJCWlmIChkYXRhX29mZnNldCA+PSAwKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CiAKQEAgLTI4NDEsNyArMjg4Miw3IEBACiAJaWYgKGRhdGEpIHsKIAkJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pIHsKIAkJCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKQotCQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCQkJCXJldHVybiAtRVBFUk07CiAJCQllbHNlCiAJCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaCBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzlmOGI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKLSAqICAgUy8zOTAgZGF0YSBkZWZpbml0aW9ucyBmb3IgbWFjaGluZSBjaGVjayBwcm9jZXNzaW5nCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgKGFkbHVuZ0BkZS5pYm0uY29tKQotICovCi0KLSNpZm5kZWYgX19zMzkwbWFjaF9oCi0jZGVmaW5lIF9fczM5MG1hY2hfaAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBtY2kgewotCV9fdTMyICAgc2QgICAgICAgICAgICAgIDogIDE7IC8qIDAwIHN5c3RlbSBkYW1hZ2UgKi8KLQlfX3UzMiAgIHBkICAgICAgICAgICAgICA6ICAxOyAvKiAwMSBpbnN0cnVjdGlvbi1wcm9jZXNzaW5nIGRhbWFnZSAqLwotCV9fdTMyICAgc3IgICAgICAgICAgICAgIDogIDE7IC8qIDAyIHN5c3RlbSByZWNvdmVyeSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8xIDogIDE7IC8qIDAzICovCi0JX191MzIgICBjZCAgICAgICAgICAgICAgOiAgMTsgLyogMDQgdGltaW5nLWZhY2lsaXR5IGRhbWFnZSAqLwotCV9fdTMyICAgZWQgICAgICAgICAgICAgIDogIDE7IC8qIDA1IGV4dGVybmFsIGRhbWFnZSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8yIDogIDE7IC8qIDA2ICovCi0JX191MzIgICBkZyAgICAgICAgICAgICAgOiAgMTsgLyogMDcgZGVncmFkYXRpb24gKi8KLQlfX3UzMiAgIHcgICAgICAgICAgICAgICA6ICAxOyAvKiAwOCB3YXJuaW5nIHBlbmRpbmcgKi8KLQlfX3UzMiAgIGNwICAgICAgICAgICAgICA6ICAxOyAvKiAwOSBjaGFubmVsLXJlcG9ydCBwZW5kaW5nICovCi0JX191MzIgICBzcCAgICAgICAgICAgICAgOiAgMTsgLyogMTAgc2VydmljZS1wcm9jZXNzb3IgZGFtYWdlICovCi0JX191MzIgICBjayAgICAgICAgICAgICAgOiAgMTsgLyogMTEgY2hhbm5lbC1zdWJzeXN0ZW0gZGFtYWdlICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzMgOiAgMjsgLyogMTItMTMgKi8KLQlfX3UzMiAgIGIgICAgICAgICAgICAgICA6ICAxOyAvKiAxNCBiYWNrZWQgdXAgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNCA6ICAxOyAvKiAxNSAqLwotCV9fdTMyICAgc2UgICAgICAgICAgICAgIDogIDE7IC8qIDE2IHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KLQlfX3UzMiAgIHNjICAgICAgICAgICAgICA6ICAxOyAvKiAxNyBzdG9yYWdlIGVycm9yIGNvcnJlY3RlZCAqLwotCV9fdTMyICAga2UgICAgICAgICAgICAgIDogIDE7IC8qIDE4IHN0b3JhZ2Uta2V5IGVycm9yIHVuY29ycmVjdGVkICovCi0JX191MzIgICBkcyAgICAgICAgICAgICAgOiAgMTsgLyogMTkgc3RvcmFnZSBkZWdyYWRhdGlvbiAqLwotCV9fdTMyICAgd3AgICAgICAgICAgICAgIDogIDE7IC8qIDIwIHBzdyBtd3AgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIG1zICAgICAgICAgICAgICA6ICAxOyAvKiAyMSBwc3cgbWFzayBhbmQga2V5IHZhbGlkaXR5ICovCi0JX191MzIgICBwbSAgICAgICAgICAgICAgOiAgMTsgLyogMjIgcHN3IHByb2dyYW0gbWFzayBhbmQgY2MgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGlhICAgICAgICAgICAgICA6ICAxOyAvKiAyMyBwc3cgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB2YWxpZGl0eSAqLwotCV9fdTMyICAgZmEgICAgICAgICAgICAgIDogIDE7IC8qIDI0IGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzIHZhbGlkaXR5ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzUgOiAgMTsgLyogMjUgKi8KLQlfX3UzMiAgIGVjICAgICAgICAgICAgICA6ICAxOyAvKiAyNiBleHRlcm5hbCBkYW1hZ2UgY29kZSB2YWxpZGl0eSAqLwotCV9fdTMyICAgZnAgICAgICAgICAgICAgIDogIDE7IC8qIDI3IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBnciAgICAgICAgICAgICAgOiAgMTsgLyogMjggZ2VuZXJhbCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgY3IgICAgICAgICAgICAgIDogIDE7IC8qIDI5IGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNiA6ICAxOyAvKiAzMCAqLwotCV9fdTMyICAgc3QgICAgICAgICAgICAgIDogIDE7IC8qIDMxIHN0b3JhZ2UgbG9naWNhbCB2YWxpZGl0eSAqLwotCV9fdTMyICAgaWUgICAgICAgICAgICAgIDogIDE7IC8qIDMyIGluZGlyZWN0IHN0b3JhZ2UgZXJyb3IgKi8KLQlfX3UzMiAgIGFyICAgICAgICAgICAgICA6ICAxOyAvKiAzMyBhY2Nlc3MgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGRhICAgICAgICAgICAgICA6ICAxOyAvKiAzNCBkZWxheWVkIGFjY2VzcyBleGNlcHRpb24gKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNyA6ICA3OyAvKiAzNS00MSAqLwotCV9fdTMyICAgcHIgICAgICAgICAgICAgIDogIDE7IC8qIDQyIHRvZCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZjICAgICAgICAgICAgICA6ICAxOyAvKiA0MyBmcCBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBhcCAgICAgICAgICAgICAgOiAgMTsgLyogNDQgYW5jaWxsYXJ5IHJlcG9ydCAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF84IDogIDE7IC8qIDQ1ICovCi0JX191MzIgICBjdCAgICAgICAgICAgICAgOiAgMTsgLyogNDYgY3B1IHRpbWVyIHZhbGlkaXR5ICovCi0JX191MzIgICBjYyAgICAgICAgICAgICAgOiAgMTsgLyogNDcgY2xvY2sgY29tcGFyYXRvciB2YWxpZGl0eSAqLwotCV9fdTMyCXRvX2JlX2RlZmluZWRfOSA6IDE2OyAvKiA0Ny02MyAqLwotfTsKLQotLyoKLSAqIENoYW5uZWwgUmVwb3J0IFdvcmQKLSAqLwotc3RydWN0IGNydyB7Ci0JX191MzIgcmVzMSAgICA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KLQlfX3UzMiBzbGN0ICAgIDogIDE7ICAgLyogc29saWNpdGVkICovCi0JX191MzIgb2ZsdyAgICA6ICAxOyAgIC8qIG92ZXJmbG93ICovCi0JX191MzIgY2huICAgICA6ICAxOyAgIC8qIGNoYWluZWQgKi8KLQlfX3UzMiByc2MgICAgIDogIDQ7ICAgLyogcmVwb3J0aW5nIHNvdXJjZSBjb2RlICovCi0JX191MzIgYW5jICAgICA6ICAxOyAgIC8qIGFuY2lsbGFyeSByZXBvcnQgKi8KLQlfX3UzMiByZXMyICAgIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLwotCV9fdTMyIGVyYyAgICAgOiAgNjsgICAvKiBlcnJvci1yZWNvdmVyeSBjb2RlICovCi0JX191MzIgcnNpZCAgICA6IDE2OyAgIC8qIHJlcG9ydGluZy1zb3VyY2UgSUQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi10eXBlZGVmIHZvaWQgKCpjcndfaGFuZGxlcl90KShzdHJ1Y3QgY3J3ICosIHN0cnVjdCBjcncgKiwgaW50KTsKLQotZXh0ZXJuIGludCBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcik7Ci1leHRlcm4gdm9pZCBzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYyk7Ci0KLSNkZWZpbmUgTlJfUlNDUyAxNgotCi0jZGVmaW5lIENSV19SU0NfTU9OSVRPUiAgMHgyICAvKiBtb25pdG9yaW5nIGZhY2lsaXR5ICovCi0jZGVmaW5lIENSV19SU0NfU0NIICAgICAgMHgzICAvKiBzdWJjaGFubmVsICovCi0jZGVmaW5lIENSV19SU0NfQ1BBVEggICAgMHg0ICAvKiBjaGFubmVsIHBhdGggKi8KLSNkZWZpbmUgQ1JXX1JTQ19DT05GSUcgICAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KLSNkZWZpbmUgQ1JXX1JTQ19DU1MgICAgICAweEIgIC8qIGNoYW5uZWwgc3Vic3lzdGVtICovCi0KLSNkZWZpbmUgQ1JXX0VSQ19FVkVOVCAgICAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KLSNkZWZpbmUgQ1JXX0VSQ19BVkFJTCAgICAweDAxIC8qIGF2YWlsYWJsZSAqLwotI2RlZmluZSBDUldfRVJDX0lOSVQgICAgIDB4MDIgLyogaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJST1IgICAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLwotI2RlZmluZSBDUldfRVJDX0lQQVJNICAgIDB4MDQgLyogaW5zdGFsbGVkIHBhcm0gaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJNICAgICAweDA1IC8qIHRlcm1pbmFsICovCi0jZGVmaW5lIENSV19FUkNfUEVSUk4gICAgMHgwNiAvKiBwZXJtLiBlcnJvciwgZmFjLiBub3QgaW5pdCAqLwotI2RlZmluZSBDUldfRVJDX1BFUlJJICAgIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19QTU9EICAgICAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncgKQotewotCWludCBjY29kZTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkic3RjcncgMCglMilcblx0IgotCQkiaXBtICUwXG5cdCIKLQkJInNybCAlMCwyOFxuXHQiCi0JCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKLQkJOiAiYSIgKHBjcncpCi0JCTogImNjIiApOwotCXJldHVybiBjY29kZTsKLX0KLQotI2RlZmluZSBFRF9FVFJfU1lOQwkxMgkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN5bmMgY2hlY2sgKi8KLSNkZWZpbmUgRURfRVRSX1NXSVRDSAkxMwkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN3aXRjaCB0byBsb2NhbCAqLwotCi0jZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCi0jZGVmaW5lIEVEX1NUUF9JU0xBTkQJNgkvKiBFeHRlcm5hbCBkYW1hZ2UgU1RQIGlzbGFuZCBjaGVjayAqLwotCi1zdHJ1Y3QgcHRfcmVnczsKLQotdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwotdm9pZCBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmIC8qIF9fczM5MG1hY2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYwppbmRleCBmMDhlMTY5Li43ZTMwZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2kyYy5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlicC0+d2FpdGluZyA9IDE7CiAJYWRkX3dhaXRfcXVldWUoJmJwLT53cSwgJndhaXQpOwogCXdoaWxlIChsaW1pdC0tID4gMCkgewotCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJbG9uZyB2YWw7CiAKIAkJdmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCiAJCQkJYnAtPndxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jCmluZGV4IGE5YTk4OTMuLmU2ZDFmYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMKQEAgLTM4LDkgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotCi0jZGVmaW5lIE1BSk9SX05SCUpTRkRfTUFKT1IKLQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCmluZGV4IDI5ZGM3MzUuLjEyNGY2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwpAQCAtNTEsNiArNTEsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJPUEVOUFJPTSBDb25maWd1cmF0aW9uIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoU1VOX09QRU5QUk9NX01JTk9SKTsKIAogLyogUHJpdmF0ZSBkYXRhIGtlcHQgYnkgdGhlIGRyaXZlciBmb3IgZWFjaCBkZXNjcmlwdG9yLiAqLwogdHlwZWRlZiBzdHJ1Y3Qgb3BlbnByb21fcHJpdmF0ZV9kYXRhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTQwMDB0LmMgYi9kcml2ZXJzL3Njc2kvYTQwMDB0LmMKaW5kZXggZDRiZGEyMC4uNjFhZjNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2E0MDAwdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hNDAwMHQuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIEE0MDAwVF9TQ1NJX0FERFIgMHhkZDAwNDAKIAotc3RhdGljIGludCBfX2RldmluaXQgYTQwMDB0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGE0MDAwdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNjEsNyArNjEsOCBAQAogCWhvc3RkYXRhLT5kY250bF9leHRyYSA9IEVBXzcxMDsKIAogCS8qIGFuZCByZWdpc3RlciB0aGUgY2hpcCAqLwotCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmYTQwMDB0X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmE0MDAwdF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImE0MDAwdC1zY3NpOiBObyBob3N0IGRldGVjdGVkOyAiCiAJCQkJImJvYXJkIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT9cbiIpOwpAQCAtNzgsNyArNzksNyBAQAogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJcmV0dXJuIDA7CkBAIC05Myw5ICs5NCw5IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwpAQCAtMTA4LDI1ICsxMDksMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJhNDAwMHQtc2NzaSIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBhNDAwMHRfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGE0MDAwdF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgICAgICAgICAgPSAiYTQwMDB0LXNjc2kiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgICAgICAgICA9IGE0MDAwdF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChhNDAwMHRfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhNDAwMHRfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWE0MDAwdF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImE0MDAwdC1zY3NpIiwKIAkJCS0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGE0MDAwdF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIoYTQwMDB0X3Njc2lfZGV2aWNlKTsKIAl9CiAKQEAgLTEzNiw3ICsxMzksNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGE0MDAwdF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhNDAwMHRfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhNDAwMHRfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDkzYjYxZjEuLjA0NzFmODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IF9faW5pdCBOQ1I1MzgwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCBmbGFncykKIHsKIAlpbnQgaTsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCAyMWZlMDdmLi5hZDdhMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogI2VuZGlmCiAKIAotaW50IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCitpbnQgX19pbml0IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCiB7CiAJc3RhdGljIGludCBjYWxsZWQgPSAwOwogCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMKaW5kZXggZDg1OGYzZC4uNTc5OWNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYnZtZTYwMDBfc2NzaV9kZXZpY2U7CiAKIHN0YXRpYyBfX2RldmluaXQgaW50Ci1idm1lNjAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitidm1lNjAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNTgsNyArNTgsOCBAQAogCWhvc3RkYXRhLT5jdGVzdDdfZXh0cmEgPSBDVEVTVDdfVFQxOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsIGRldik7CisJaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ2bWU2MDAwLXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC03Myw3ICs3NCw3IEBACiAJCWdvdG8gb3V0X3B1dF9ob3N0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTg3LDkgKzg4LDkgQEAKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQKLWJ2bWU2MDAwX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorYnZtZTYwMDBfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKQEAgLTEwMCwyNSArMTAxLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBidm1lNjAwMF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJidm1lNjAwMC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IGJ2bWU2MDAwX3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJ2bWU2MDAwX3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJidm1lNjAwMC1zY3NpIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGJ2bWU2MDAwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYnZtZTYwMDBfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWJ2bWU2MDAwX3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYnZtZTYwMDAtc2NzaSIsCiAJCQkJCQkJICAgICAgIC0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogCQlyZXR1cm4gUFRSX0VSUihidm1lNjAwMF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xMjgsNyArMTMxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBidm1lNjAwMF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihidm1lNjAwMF9zY3NpX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChidm1lNjAwMF9zY3NpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2kuaCBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpLmgKaW5kZXggZmRlNmU0Yy4uYTdjZjU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2kuaAorKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaS5oCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8c2NzaS9saWJpc2NzaV90Y3AuaD4KIAogLyogZnJvbSBjeGdiMyBMTEQgKi8KQEAgLTExMyw2ICsxMTQsMjYgQEAKIAlzdHJ1Y3QgY3hnYjNpX2Nvbm4gKmNjb25uOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgY3hnYjNpX3Rhc2tfZGF0YSAtIHByaXZhdGUgaXNjc2kgdGFzayBkYXRhCisgKgorICogQG5yX2ZyYWdzOgkjIG9mIGNvYWxlc2NlZCBwYWdlIGZyYWdzIChmcm9tIHNjc2kgc2dsKQorICogQGZyYWdzOgljb2FsZXNjZWQgcGFnZSBmcmFncyAoZnJvbSBzY3NpIHNnbCkKKyAqIEBza2I6CXR4IHBkdSBza2IKKyAqIEBvZmZzZXQ6CWRhdGEgb2Zmc2V0IGZvciB0aGUgbmV4dCBwZHUKKyAqIEBjb3VudDoJbWF4LiBwb3NzaWJsZSBwZHUgcGF5bG9hZAorICogQHNnb2Zmc2V0OglvZmZzZXQgdG8gdGhlIGZpcnN0IHNnIGVudHJ5IGZvciBhIGdpdmVuIG9mZnNldAorICovCisjZGVmaW5lIE1BWF9QRFVfRlJBR1MJKChVTFAyX01BWF9QRFVfUEFZTE9BRCArIDUxMiAtIDEpIC8gNTEyKQorc3RydWN0IGN4Z2IzaV90YXNrX2RhdGEgeworCXVuc2lnbmVkIHNob3J0IG5yX2ZyYWdzOworCXNrYl9mcmFnX3QgZnJhZ3NbTUFYX1BEVV9GUkFHU107CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgc2dvZmZzZXQ7Cit9OworCiBpbnQgY3hnYjNpX2lzY3NpX2luaXQodm9pZCk7CiB2b2lkIGN4Z2IzaV9pc2NzaV9jbGVhbnVwKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCmluZGV4IDA4ZjNhMDkuLmE4M2QzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCkBAIC02MzksMTAgKzYzOSwxMSBAQAogCXdyaXRlX3VubG9jaygmY3hnYjNpX2RkcF9yd2xvY2spOwogCiAJZGRwX2xvZ19pbmZvKCJucHBvZHMgJXUgKDB4JXggfiAweCV4KSwgYml0cyAldSwgbWFzayAweCV4LDB4JXggIgotCQkJInBrdCAldSwldS5cbiIsCisJCQkicGt0ICV1LyV1LCAldS8ldS5cbiIsCiAJCQlwcG1heCwgZGRwLT5sbGltaXQsIGRkcC0+dWxpbWl0LCBkZHAtPmlkeF9iaXRzLAogCQkJZGRwLT5pZHhfbWFzaywgZGRwLT5yc3ZkX3RhZ19tYXNrLAotCQkJZGRwLT5tYXhfdHhzeiwgZGRwLT5tYXhfcnhzeik7CisJCQlkZHAtPm1heF90eHN6LCB1aW5mby5tYXhfdHhzeiwKKwkJCWRkcC0+bWF4X3J4c3osIHVpbmZvLm1heF9yeHN6KTsKIAlyZXR1cm4gMDsKIAogZnJlZV9kZHBfbWFwOgpAQCAtNjU0LDggKzY1NSw4IEBACiAgKiBjeGdiM2lfYWRhcHRlcl9kZHBfaW5pdCAtIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIncyBkZHAgcmVzb3VyY2UKICAqIEB0ZGV2OiB0M2NkZXYgYWRhcHRlcgogICogQHRmb3JtYXQ6IHRhZyBmb3JtYXQKLSAqIEB0eHN6OiBtYXggdHggcGt0IHNpemUsIGZpbGxlZCBpbiBieSB0aGlzIGZ1bmMuCi0gKiBAcnhzejogbWF4IHJ4IHBrdCBzaXplLCBmaWxsZWQgaW4gYnkgdGhpcyBmdW5jLgorICogQHR4c3o6IG1heCB0eCBwZHUgcGF5bG9hZCBzaXplLCBmaWxsZWQgaW4gYnkgdGhpcyBmdW5jLgorICogQHJ4c3o6IG1heCByeCBwZHUgcGF5bG9hZCBzaXplLCBmaWxsZWQgaW4gYnkgdGhpcyBmdW5jLgogICogaW5pdGlhbGl6ZSB0aGUgZGRwIHBhZ2Vwb2QgbWFuYWdlciBmb3IgYSBnaXZlbiBhZGFwdGVyIGlmIG5lZWRlZCBhbmQKICAqIHNldHVwIHRoZSB0YWcgZm9ybWF0IGZvciBhIGdpdmVuIGlzY3NpIGVudGl0eQogICovCkBAIC02ODUsMTAgKzY4NiwxMiBAQAogCQkgICAgICB0Zm9ybWF0LT5zd19iaXRzLCB0Zm9ybWF0LT5yc3ZkX2JpdHMsCiAJCSAgICAgIHRmb3JtYXQtPnJzdmRfc2hpZnQsIHRmb3JtYXQtPnJzdmRfbWFzayk7CiAKLQkqdHhzeiA9IGRkcC0+bWF4X3R4c3o7Ci0JKnJ4c3ogPSBkZHAtPm1heF9yeHN6OwotCWRkcF9sb2dfaW5mbygiZGRwIG1heCBwa3Qgc2l6ZTogJXUsICV1LlxuIiwKLQkJICAgICBkZHAtPm1heF90eHN6LCBkZHAtPm1heF9yeHN6KTsKKwkqdHhzeiA9IG1pbl90KHVuc2lnbmVkIGludCwgVUxQMl9NQVhfUERVX1BBWUxPQUQsCisJCQlkZHAtPm1heF90eHN6IC0gSVNDU0lfUERVX05PTlBBWUxPQURfTEVOKTsKKwkqcnhzeiA9IG1pbl90KHVuc2lnbmVkIGludCwgVUxQMl9NQVhfUERVX1BBWUxPQUQsCisJCQlkZHAtPm1heF9yeHN6IC0gSVNDU0lfUERVX05PTlBBWUxPQURfTEVOKTsKKwlkZHBfbG9nX2luZm8oIm1heCBwYXlsb2FkIHNpemU6ICV1LyV1LCAldS8ldS5cbiIsCisJCSAgICAgKnR4c3osIGRkcC0+bWF4X3R4c3osICpyeHN6LCBkZHAtPm1heF9yeHN6KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGN4Z2IzaV9hZGFwdGVyX2RkcF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5oIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfZGRwLmgKaW5kZXggZjY3NTgwNy4uM2ZhYWU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfZGRwLmgKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfZGRwLmgKQEAgLTg3LDggKzg3LDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqKmdsX3NrYjsKIH07CiAKKyNkZWZpbmUgSVNDU0lfUERVX05PTlBBWUxPQURfTEVOCTMxMiAvKiBiaHMoNDgpICsgYWhzKDI1NikgKyBkaWdlc3QoOCkgKi8KICNkZWZpbmUgVUxQMl9NQVhfUEtUX1NJWkUJMTYyMjQKLSNkZWZpbmUgVUxQMl9NQVhfUERVX1BBWUxPQUQJKFVMUDJfTUFYX1BLVF9TSVpFIC0gSVNDU0lfUERVX05PTlBBWUxPQURfTUFYKQorI2RlZmluZSBVTFAyX01BWF9QRFVfUEFZTE9BRAkoVUxQMl9NQVhfUEtUX1NJWkUgLSBJU0NTSV9QRFVfTk9OUEFZTE9BRF9MRU4pCiAjZGVmaW5lIFBQT0RfUEFHRVNfTUFYCQk0CiAjZGVmaW5lIFBQT0RfUEFHRVNfU0hJRlQJMgkvKiA0IHBhZ2VzIHBlciBwb2QgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaW5pdC5jCmluZGV4IDA5MWVjYjQuLjFjZTlmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pbml0LmMKQEAgLTEyLDggKzEyLDggQEAKICNpbmNsdWRlICJjeGdiM2kuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUgICAgICAgICAiY3hnYjNpIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuMC4wIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1bi4gMSwgMjAwOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjAuMSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKYW4uIDIwMDkiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSA9CiAJIkNoZWxzaW8gUzN4eCBpU0NTSSBEcml2ZXIgIiBEUlZfTU9EVUxFX05BTUUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCmluZGV4IGQ4MzQ2NGIuLmZhMmE0NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYwpAQCAtMzY0LDcgKzM2NCw4IEBACiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmN4Z2IzaV9pc2NzaV90cmFuc3BvcnQsIHNob3N0LAogCQkJCQkgIGNtZHNfbWF4LAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2spLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2spICsKKwkJCQkJICBzaXplb2Yoc3RydWN0IGN4Z2IzaV90YXNrX2RhdGEpLAogCQkJCQkgIGluaXRpYWxfY21kc24sIElTQ1NJX01BWF9UQVJHRVQpOwogCWlmICghY2xzX3Nlc3Npb24pCiAJCXJldHVybiBOVUxMOwpAQCAtNDAyLDE3ICs0MDMsMTUgQEAKIHsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgY3hnYjNpX2Nvbm4gKmNjb25uID0gdGNwX2Nvbm4tPmRkX2RhdGE7Ci0JdW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCwgVUxQMl9NQVhfUERVX1BBWUxPQUQsCi0JCQkJIGNjb25uLT5oYmEtPnNuaWMtPnR4X21heF9zaXplIC0KLQkJCQkgSVNDU0lfUERVX05PTlBBWUxPQURfTUFYKTsKKwl1bnNpZ25lZCBpbnQgbWF4ID0gbWF4KDUxMiAqIE1BWF9TS0JfRlJBR1MsIFNLQl9UWF9IRUFEUk9PTSk7CiAKKwltYXggPSBtaW4oY2Nvbm4tPmhiYS0+c25pYy0+dHhfbWF4X3NpemUsIG1heCk7CiAJaWYgKGNvbm4tPm1heF94bWl0X2RsZW5ndGgpCi0JCWNvbm4tPm1heF94bWl0X2RsZW5ndGggPSBtaW5fdCh1bnNpZ25lZCBpbnQsCi0JCQkJCQljb25uLT5tYXhfeG1pdF9kbGVuZ3RoLCBtYXgpOworCQljb25uLT5tYXhfeG1pdF9kbGVuZ3RoID0gbWluKGNvbm4tPm1heF94bWl0X2RsZW5ndGgsIG1heCk7CiAJZWxzZQogCQljb25uLT5tYXhfeG1pdF9kbGVuZ3RoID0gbWF4OwogCWFsaWduX3BkdV9zaXplKGNvbm4tPm1heF94bWl0X2RsZW5ndGgpOwotCWN4Z2IzaV9sb2dfaW5mbygiY29ubiAweCVwLCBtYXggeG1pdCAldS5cbiIsCisJY3hnYjNpX2FwaV9kZWJ1ZygiY29ubiAweCVwLCBtYXggeG1pdCAldS5cbiIsCiAJCQkgY29ubiwgY29ubi0+bWF4X3htaXRfZGxlbmd0aCk7CiAJcmV0dXJuIDA7CiB9CkBAIC00MjcsOSArNDI2LDcgQEAKIHsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgY3hnYjNpX2Nvbm4gKmNjb25uID0gdGNwX2Nvbm4tPmRkX2RhdGE7Ci0JdW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCwgVUxQMl9NQVhfUERVX1BBWUxPQUQsCi0JCQkJIGNjb25uLT5oYmEtPnNuaWMtPnJ4X21heF9zaXplIC0KLQkJCQkgSVNDU0lfUERVX05PTlBBWUxPQURfTUFYKTsKKwl1bnNpZ25lZCBpbnQgbWF4ID0gY2Nvbm4tPmhiYS0+c25pYy0+cnhfbWF4X3NpemU7CiAKIAlhbGlnbl9wZHVfc2l6ZShtYXgpOwogCWlmIChjb25uLT5tYXhfcmVjdl9kbGVuZ3RoKSB7CkBAIC00MzksOCArNDM2LDcgQEAKIAkJCQkJIGNvbm4tPm1heF9yZWN2X2RsZW5ndGgsIG1heCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gbWluX3QodW5zaWduZWQgaW50LAotCQkJCQkJY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCwgbWF4KTsKKwkJY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCA9IG1pbihjb25uLT5tYXhfcmVjdl9kbGVuZ3RoLCBtYXgpOwogCQlhbGlnbl9wZHVfc2l6ZShjb25uLT5tYXhfcmVjdl9kbGVuZ3RoKTsKIAl9IGVsc2UKIAkJY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCA9IG1heDsKQEAgLTg0NCw3ICs4NDAsNyBAQAogCS5wcm9jX25hbWUJCT0gImN4Z2IzaSIsCiAJLnF1ZXVlY29tbWFuZAkJPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2FuX3F1ZXVlCQk9IDEyOCAqIChJU0NTSV9ERUZfWE1JVF9DTURTX01BWCAtIDEpLAorCS5jYW5fcXVldWUJCT0gQ1hHQjNJX1NDU0lfUURFUFRIX0RGTFQgLSAxLAogCS5zZ190YWJsZXNpemUJCT0gU0dfQUxMLAogCS5tYXhfc2VjdG9ycwkJPSAweEZGRkYsCiAJLmNtZF9wZXJfbHVuCQk9IElTQ1NJX0RFRl9DTURfUEVSX0xVTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYwppbmRleCBhODY1ZjFmLi5kZTNiM2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCkBAIC0yMywxOSArMjMsMTkgQEAKICNpbmNsdWRlICJjeGdiM2lfZGRwLmgiCiAKICNpZmRlZiBfX0RFQlVHX0MzQ05fQ09OTl9fCi0jZGVmaW5lIGMzY25fY29ubl9kZWJ1ZyAgICAgICAgIGN4Z2IzaV9sb2dfaW5mbworI2RlZmluZSBjM2NuX2Nvbm5fZGVidWcJCWN4Z2IzaV9sb2dfZGVidWcKICNlbHNlCiAjZGVmaW5lIGMzY25fY29ubl9kZWJ1ZyhmbXQuLi4pCiAjZW5kaWYKIAogI2lmZGVmIF9fREVCVUdfQzNDTl9UWF9fCi0jZGVmaW5lIGMzY25fdHhfZGVidWcgICAgICAgICBjeGdiM2lfbG9nX2RlYnVnCisjZGVmaW5lIGMzY25fdHhfZGVidWcJCWN4Z2IzaV9sb2dfZGVidWcKICNlbHNlCiAjZGVmaW5lIGMzY25fdHhfZGVidWcoZm10Li4uKQogI2VuZGlmCiAKICNpZmRlZiBfX0RFQlVHX0MzQ05fUlhfXwotI2RlZmluZSBjM2NuX3J4X2RlYnVnICAgICAgICAgY3hnYjNpX2xvZ19kZWJ1ZworI2RlZmluZSBjM2NuX3J4X2RlYnVnCQljeGdiM2lfbG9nX2RlYnVnCiAjZWxzZQogI2RlZmluZSBjM2NuX3J4X2RlYnVnKGZtdC4uLikKICNlbmRpZgpAQCAtNDcsOSArNDcsOSBAQAogbW9kdWxlX3BhcmFtKGN4Z2IzX3Jjdl93aW4sIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGN4Z2IzX3Jjdl93aW4sICJUQ1AgcmVjZWl2ZSB3aW5kb3cgaW4gYnl0ZXMgKGRlZmF1bHQ9MjU2S0IpIik7CiAKLXN0YXRpYyBpbnQgY3hnYjNfc25kX3dpbiA9IDY0ICogMTAyNDsKK3N0YXRpYyBpbnQgY3hnYjNfc25kX3dpbiA9IDEyOCAqIDEwMjQ7CiBtb2R1bGVfcGFyYW0oY3hnYjNfc25kX3dpbiwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoY3hnYjNfc25kX3dpbiwgIlRDUCBzZW5kIHdpbmRvdyBpbiBieXRlcyAoZGVmYXVsdD02NEtCKSIpOworTU9EVUxFX1BBUk1fREVTQyhjeGdiM19zbmRfd2luLCAiVENQIHNlbmQgd2luZG93IGluIGJ5dGVzIChkZWZhdWx0PTEyOEtCKSIpOwogCiBzdGF0aWMgaW50IGN4Z2IzX3J4X2NyZWRpdF90aHJlcyA9IDEwICogMTAyNDsKIG1vZHVsZV9wYXJhbShjeGdiM19yeF9jcmVkaXRfdGhyZXMsIGludCwgMDY0NCk7CkBAIC0zMDEsOCArMzAxLDggQEAKIHN0YXRpYyB2b2lkIHNrYl9lbnRhaWwoc3RydWN0IHMzX2Nvbm4gKmMzY24sIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgICBpbnQgZmxhZ3MpCiB7Ci0JQ1hHQjNfU0tCX0NCKHNrYiktPnNlcSA9IGMzY24tPndyaXRlX3NlcTsKLQlDWEdCM19TS0JfQ0Ioc2tiKS0+ZmxhZ3MgPSBmbGFnczsKKwlza2JfdGNwX3NlcShza2IpID0gYzNjbi0+d3JpdGVfc2VxOworCXNrYl9mbGFncyhza2IpID0gZmxhZ3M7CiAJX19za2JfcXVldWVfdGFpbCgmYzNjbi0+d3JpdGVfcXVldWUsIHNrYik7CiB9CiAKQEAgLTQ1NywxMiArNDU3LDkgQEAKICAqIFRoZSBudW1iZXIgb2YgV1JzIG5lZWRlZCBmb3IgYW4gc2tiIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBmcmFnbWVudHMKICAqIGluIHRoZSBza2IgYW5kIHdoZXRoZXIgaXQgaGFzIGFueSBwYXlsb2FkIGluIGl0cyBtYWluIGJvZHkuICBUaGlzIG1hcHMgdGhlCiAgKiBsZW5ndGggb2YgdGhlIGdhdGhlciBsaXN0IHJlcHJlc2VudGVkIGJ5IGFuIHNrYiBpbnRvIHRoZSAjIG9mIG5lY2Vzc2FyeSBXUnMuCi0gKgotICogVGhlIG1heC4gbGVuZ3RoIG9mIGFuIHNrYiBpcyBjb250cm9sbGVkIGJ5IHRoZSBtYXggcGR1IHNpemUgd2hpY2ggaXMgfjE2Sy4KLSAqIEFsc28sIGFzc3VtZSB0aGUgbWluLiBmcmFnbWVudCBsZW5ndGggaXMgdGhlIHNlY3RvciBzaXplICg1MTIpLCB0aGVuIGFkZAotICogZXh0cmEgZnJhZ21lbnQgY291bnRzIGZvciBpc2NzaSBiaHMgYW5kIHBheWxvYWQgcGFkZGluZy4KKyAqIFRoZSBleHRyYSB0d28gZnJhZ21lbnRzIGFyZSBmb3IgaXNjc2kgYmhzIGFuZCBwYXlsb2FkIHBhZGRpbmcuCiAgKi8KLSNkZWZpbmUgU0tCX1dSX0xJU1RfU0laRQkoMTYzODQvNTEyICsgMykKKyNkZWZpbmUgU0tCX1dSX0xJU1RfU0laRQkoTUFYX1NLQl9GUkFHUyArIDIpCiBzdGF0aWMgdW5zaWduZWQgaW50IHNrYl93cnNbU0tCX1dSX0xJU1RfU0laRV0gX19yZWFkX21vc3RseTsKIAogc3RhdGljIHZvaWQgczNfaW5pdF93cl90YWIodW5zaWduZWQgaW50IHdyX2xlbikKQEAgLTQ4NSw3ICs0ODIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfd3JfbGlzdChzdHJ1Y3QgczNfY29ubiAqYzNjbikKIHsKLQljM2NuLT53cl9wZW5kaW5nX2hlYWQgPSBOVUxMOworCWMzY24tPndyX3BlbmRpbmdfaGVhZCA9IGMzY24tPndyX3BlbmRpbmdfdGFpbCA9IE5VTEw7CiB9CiAKIC8qCkBAIC00OTYsNyArNDkzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbnF1ZXVlX3dyKHN0cnVjdCBzM19jb25uICpjM2NuLAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlza2Jfd3JfZGF0YShza2IpID0gTlVMTDsKKwlza2JfdHhfd3JfbmV4dChza2IpID0gTlVMTDsKIAogCS8qCiAJICogV2Ugd2FudCB0byB0YWtlIGFuIGV4dHJhIHJlZmVyZW5jZSBzaW5jZSBib3RoIHVzIGFuZCB0aGUgZHJpdmVyCkBAIC01MDksMTAgKzUwNiwyMiBAQAogCWlmICghYzNjbi0+d3JfcGVuZGluZ19oZWFkKQogCQljM2NuLT53cl9wZW5kaW5nX2hlYWQgPSBza2I7CiAJZWxzZQotCQlza2Jfd3JfZGF0YShza2IpID0gc2tiOworCQlza2JfdHhfd3JfbmV4dChjM2NuLT53cl9wZW5kaW5nX3RhaWwpID0gc2tiOwogCWMzY24tPndyX3BlbmRpbmdfdGFpbCA9IHNrYjsKIH0KIAorc3RhdGljIGludCBjb3VudF9wZW5kaW5nX3dycyhzdHJ1Y3QgczNfY29ubiAqYzNjbikKK3sKKwlpbnQgbiA9IDA7CisJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGMzY24tPndyX3BlbmRpbmdfaGVhZDsKKworCXdoaWxlIChza2IpIHsKKwkJbiArPSBza2ItPmNzdW07CisJCXNrYiA9IHNrYl90eF93cl9uZXh0KHNrYik7CisJfQorCXJldHVybiBuOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpwZWVrX3dyKGNvbnN0IHN0cnVjdCBzM19jb25uICpjM2NuKQogewogCXJldHVybiBjM2NuLT53cl9wZW5kaW5nX2hlYWQ7CkBAIC01MjksOCArNTM4LDggQEAKIAogCWlmIChsaWtlbHkoc2tiKSkgewogCQkvKiBEb24ndCBib3RoZXIgY2xlYXJpbmcgdGhlIHRhaWwgKi8KLQkJYzNjbi0+d3JfcGVuZGluZ19oZWFkID0gc2tiX3dyX2RhdGEoc2tiKTsKLQkJc2tiX3dyX2RhdGEoc2tiKSA9IE5VTEw7CisJCWMzY24tPndyX3BlbmRpbmdfaGVhZCA9IHNrYl90eF93cl9uZXh0KHNrYik7CisJCXNrYl90eF93cl9uZXh0KHNrYikgPSBOVUxMOwogCX0KIAlyZXR1cm4gc2tiOwogfQpAQCAtNTQzLDEzICs1NTIsMTQgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1ha2VfdHhfZGF0YV93cihzdHJ1Y3QgczNfY29ubiAqYzNjbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBpbnQgbGVuKQorCQkJCSAgIGludCBsZW4sIGludCByZXFfY29tcGxldGlvbikKIHsKIAlzdHJ1Y3QgdHhfZGF0YV93ciAqcmVxOwogCiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAlyZXEgPSAoc3RydWN0IHR4X2RhdGFfd3IgKilfX3NrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyZXEpKTsKLQlyZXEtPndyX2hpID0gaHRvbmwoVl9XUl9PUChGV19XUk9QQ09ERV9PRkxEX1RYX0RBVEEpKTsKKwlyZXEtPndyX2hpID0gaHRvbmwoVl9XUl9PUChGV19XUk9QQ09ERV9PRkxEX1RYX0RBVEEpIHwKKwkJCShyZXFfY29tcGxldGlvbiA/IEZfV1JfQ09NUEwgOiAwKSk7CiAJcmVxLT53cl9sbyA9IGh0b25sKFZfV1JfVElEKGMzY24tPnRpZCkpOwogCXJlcS0+c25kc2VxID0gaHRvbmwoYzNjbi0+c25kX254dCk7CiAJLyogbGVuIGluY2x1ZGVzIHRoZSBsZW5ndGggb2YgYW55IEhXIFVMUCBhZGRpdGlvbnMgKi8KQEAgLTU5Miw3ICs2MDIsNyBAQAogCiAJaWYgKHVubGlrZWx5KGMzY24tPnN0YXRlID09IEMzQ05fU1RBVEVfQ09OTkVDVElORyB8fAogCQkgICAgIGMzY24tPnN0YXRlID09IEMzQ05fU1RBVEVfQ0xPU0VfV0FJVF8xIHx8Ci0JCSAgICAgYzNjbi0+c3RhdGUgPT0gQzNDTl9TVEFURV9BQk9SVElORykpIHsKKwkJICAgICBjM2NuLT5zdGF0ZSA+PSBDM0NOX1NUQVRFX0FCT1JUSU5HKSkgewogCQljM2NuX3R4X2RlYnVnKCJjM2NuIDB4JXAsIGluIGNsb3Npbmcgc3RhdGUgJXUuXG4iLAogCQkJICAgICAgYzNjbiwgYzNjbi0+c3RhdGUpOwogCQlyZXR1cm4gMDsKQEAgLTYxNSw3ICs2MjUsNyBAQAogCQlpZiAoYzNjbi0+d3JfYXZhaWwgPCB3cnNfbmVlZGVkKSB7CiAJCQljM2NuX3R4X2RlYnVnKCJjM2NuIDB4JXAsIHNrYiBsZW4gJXUvJXUsIGZyYWcgJXUsICIKIAkJCQkgICAgICAid3IgJWQgPCAldS5cbiIsCi0JCQkJICAgICAgYzNjbiwgc2tiLT5sZW4sIHNrYi0+ZGF0YWxlbiwgZnJhZ3MsCisJCQkJICAgICAgYzNjbiwgc2tiLT5sZW4sIHNrYi0+ZGF0YV9sZW4sIGZyYWdzLAogCQkJCSAgICAgIHdyc19uZWVkZWQsIGMzY24tPndyX2F2YWlsKTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MjcsMjAgKzYzNywyNCBAQAogCQljM2NuLT53cl91bmFja2VkICs9IHdyc19uZWVkZWQ7CiAJCWVucXVldWVfd3IoYzNjbiwgc2tiKTsKIAotCQlpZiAobGlrZWx5KENYR0IzX1NLQl9DQihza2IpLT5mbGFncyAmIEMzQ0JfRkxBR19ORUVEX0hEUikpIHsKLQkJCWxlbiArPSB1bHBfZXh0cmFfbGVuKHNrYik7Ci0JCQltYWtlX3R4X2RhdGFfd3IoYzNjbiwgc2tiLCBsZW4pOwotCQkJYzNjbi0+c25kX254dCArPSBsZW47Ci0JCQlpZiAoKHJlcV9jb21wbGV0aW9uCi0JCQkgICAgICYmIGMzY24tPndyX3VuYWNrZWQgPT0gd3JzX25lZWRlZCkKLQkJCSAgICB8fCAoQ1hHQjNfU0tCX0NCKHNrYiktPmZsYWdzICYgQzNDQl9GTEFHX0NPTVBMKQotCQkJICAgIHx8IGMzY24tPndyX3VuYWNrZWQgPj0gYzNjbi0+d3JfbWF4IC8gMikgewotCQkJCXN0cnVjdCB3b3JrX3JlcXVlc3RfaGRyICp3ciA9IGNwbGhkcihza2IpOworCQljM2NuX3R4X2RlYnVnKCJjM2NuIDB4JXAsIGVucXVldWUsIHNrYiBsZW4gJXUvJXUsIGZyYWcgJXUsICIKKwkJCQkid3IgJWQsIGxlZnQgJXUsIHVuYWNrICV1LlxuIiwKKwkJCQljM2NuLCBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwgZnJhZ3MsCisJCQkJd3JzX25lZWRlZCwgYzNjbi0+d3JfYXZhaWwsIGMzY24tPndyX3VuYWNrZWQpOwogCi0JCQkJd3ItPndyX2hpIHw9IGh0b25sKEZfV1JfQ09NUEwpOworCisJCWlmIChsaWtlbHkoc2tiX2ZsYWdzKHNrYikgJiBDM0NCX0ZMQUdfTkVFRF9IRFIpKSB7CisJCQlpZiAoKHJlcV9jb21wbGV0aW9uICYmCisJCQkJYzNjbi0+d3JfdW5hY2tlZCA9PSB3cnNfbmVlZGVkKSB8fAorCQkJICAgIChza2JfZmxhZ3Moc2tiKSAmIEMzQ0JfRkxBR19DT01QTCkgfHwKKwkJCSAgICBjM2NuLT53cl91bmFja2VkID49IGMzY24tPndyX21heCAvIDIpIHsKKwkJCQlyZXFfY29tcGxldGlvbiA9IDE7CiAJCQkJYzNjbi0+d3JfdW5hY2tlZCA9IDA7CiAJCQl9Ci0JCQlDWEdCM19TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJj0gfkMzQ0JfRkxBR19ORUVEX0hEUjsKKwkJCWxlbiArPSB1bHBfZXh0cmFfbGVuKHNrYik7CisJCQltYWtlX3R4X2RhdGFfd3IoYzNjbiwgc2tiLCBsZW4sIHJlcV9jb21wbGV0aW9uKTsKKwkJCWMzY24tPnNuZF9ueHQgKz0gbGVuOworCQkJc2tiX2ZsYWdzKHNrYikgJj0gfkMzQ0JfRkxBR19ORUVEX0hEUjsKIAkJfQogCiAJCXRvdGFsX3NpemUgKz0gc2tiLT50cnVlc2l6ZTsKQEAgLTczNSw4ICs3NDksMTEgQEAKIAlpZiAodW5saWtlbHkoYzNjbl9mbGFnKGMzY24sIEMzQ05fQUNUSVZFX0NMT1NFX05FRURFRCkpKQogCQkvKiB1cHBlciBsYXllciBoYXMgcmVxdWVzdGVkIGNsb3NpbmcgKi8KIAkJc2VuZF9hYm9ydF9yZXEoYzNjbik7Ci0JZWxzZSBpZiAoYzNjbl9wdXNoX3R4X2ZyYW1lcyhjM2NuLCAxKSkKKwllbHNlIHsKKwkJaWYgKHNrYl9xdWV1ZV9sZW4oJmMzY24tPndyaXRlX3F1ZXVlKSkKKwkJCWMzY25fcHVzaF90eF9mcmFtZXMoYzNjbiwgMSk7CiAJCWN4Z2IzaV9jb25uX3R4X29wZW4oYzNjbik7CisJfQogfQogCiBzdGF0aWMgaW50IGRvX2FjdF9lc3RhYmxpc2goc3RydWN0IHQzY2RldiAqY2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEwODIsOCArMTA5OSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlDWEdCM19TS0JfQ0Ioc2tiKS0+c2VxID0gbnRvaGwoaGRyX2NwbC0+c2VxKTsKLQlDWEdCM19TS0JfQ0Ioc2tiKS0+ZmxhZ3MgPSAwOworCXNrYl90Y3Bfc2VxKHNrYikgPSBudG9obChoZHJfY3BsLT5zZXEpOworCXNrYl9mbGFncyhza2IpID0gMDsKIAogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJX19za2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgY3BsX2lzY3NpX2hkcikpOwpAQCAtMTEwMywxMiArMTEyMCwxMiBAQAogCQlnb3RvIGFib3J0X2Nvbm47CiAKIAlza2JfdWxwX21vZGUoc2tiKSA9IFVMUDJfRkxBR19EQVRBX1JFQURZOwotCXNrYl91bHBfcGR1bGVuKHNrYikgPSBudG9ocyhkZHBfY3BsLmxlbik7Ci0Jc2tiX3VscF9kZGlnZXN0KHNrYikgPSBudG9obChkZHBfY3BsLnVscF9jcmMpOworCXNrYl9yeF9wZHVsZW4oc2tiKSA9IG50b2hzKGRkcF9jcGwubGVuKTsKKwlza2JfcnhfZGRpZ2VzdChza2IpID0gbnRvaGwoZGRwX2NwbC51bHBfY3JjKTsKIAlzdGF0dXMgPSBudG9obChkZHBfY3BsLmRkcF9zdGF0dXMpOwogCiAJYzNjbl9yeF9kZWJ1Zygicnggc2tiIDB4JXAsIGxlbiAldSwgcGR1bGVuICV1LCBkZHAgc3RhdHVzIDB4JXguXG4iLAotCQkgICAgICBza2IsIHNrYi0+bGVuLCBza2JfdWxwX3BkdWxlbihza2IpLCBzdGF0dXMpOworCQkgICAgICBza2IsIHNrYi0+bGVuLCBza2JfcnhfcGR1bGVuKHNrYiksIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgKDEgPDwgUlhfRERQX1NUQVRVU19IQ1JDX1NISUZUKSkKIAkJc2tiX3VscF9tb2RlKHNrYikgfD0gVUxQMl9GTEFHX0hDUkNfRVJST1I7CkBAIC0xMTI2LDcgKzExNDMsNyBAQAogCX0gZWxzZSBpZiAoc3RhdHVzICYgKDEgPDwgUlhfRERQX1NUQVRVU19ERFBfU0hJRlQpKQogCQlza2JfdWxwX21vZGUoc2tiKSB8PSBVTFAyX0ZMQUdfREFUQV9ERFBFRDsKIAotCWMzY24tPnJjdl9ueHQgPSBudG9obChkZHBfY3BsLnNlcSkgKyBza2JfdWxwX3BkdWxlbihza2IpOworCWMzY24tPnJjdl9ueHQgPSBudG9obChkZHBfY3BsLnNlcSkgKyBza2JfcnhfcGR1bGVuKHNrYik7CiAJX19wc2tiX3RyaW0oc2tiLCBsZW4pOwogCV9fc2tiX3F1ZXVlX3RhaWwoJmMzY24tPnJlY2VpdmVfcXVldWUsIHNrYik7CiAJY3hnYjNpX2Nvbm5fcGR1X3JlYWR5KGMzY24pOwpAQCAtMTE1MSwxMiArMTE2OCwyNyBAQAogICogUHJvY2VzcyBhbiBhY2tub3dsZWRnbWVudCBvZiBXUiBjb21wbGV0aW9uLiAgQWR2YW5jZSBzbmRfdW5hIGFuZCBzZW5kIHRoZQogICogbmV4dCBiYXRjaCBvZiB3b3JrIHJlcXVlc3RzIGZyb20gdGhlIHdyaXRlIHF1ZXVlLgogICovCitzdGF0aWMgdm9pZCBjaGVja193cl9pbnZhcmlhbnRzKHN0cnVjdCBzM19jb25uICpjM2NuKQoreworCWludCBwZW5kaW5nID0gY291bnRfcGVuZGluZ193cnMoYzNjbik7CisKKwlpZiAodW5saWtlbHkoYzNjbi0+d3JfYXZhaWwgKyBwZW5kaW5nICE9IGMzY24tPndyX21heCkpCisJCWN4Z2IzaV9sb2dfZXJyb3IoIlRJRCAldTogY3JlZGl0IGltYmFsYW5jZTogYXZhaWwgJXUsICIKKwkJCQkicGVuZGluZyAldSwgdG90YWwgc2hvdWxkIGJlICV1XG4iLAorCQkJCWMzY24tPnRpZCwgYzNjbi0+d3JfYXZhaWwsIHBlbmRpbmcsCisJCQkJYzNjbi0+d3JfbWF4KTsKK30KKwogc3RhdGljIHZvaWQgcHJvY2Vzc193cl9hY2soc3RydWN0IHMzX2Nvbm4gKmMzY24sIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGNwbF93cl9hY2sgKmhkciA9IGNwbGhkcihza2IpOwogCXVuc2lnbmVkIGludCBjcmVkaXRzID0gbnRvaHMoaGRyLT5jcmVkaXRzKTsKIAl1MzIgc25kX3VuYSA9IG50b2hsKGhkci0+c25kX3VuYSk7CiAKKwljM2NuX3R4X2RlYnVnKCIldSBXUiBjcmVkaXRzLCBhdmFpbCAldSwgdW5hY2sgJXUsIFRJRCAldSwgc3RhdGUgJXUuXG4iLAorCQkJY3JlZGl0cywgYzNjbi0+d3JfYXZhaWwsIGMzY24tPndyX3VuYWNrZWQsCisJCQljM2NuLT50aWQsIGMzY24tPnN0YXRlKTsKKwogCWMzY24tPndyX2F2YWlsICs9IGNyZWRpdHM7CiAJaWYgKGMzY24tPndyX3VuYWNrZWQgPiBjM2NuLT53cl9tYXggLSBjM2NuLT53cl9hdmFpbCkKIAkJYzNjbi0+d3JfdW5hY2tlZCA9IGMzY24tPndyX21heCAtIGMzY24tPndyX2F2YWlsOwpAQCAtMTE3MSw2ICsxMjAzLDE3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAodW5saWtlbHkoY3JlZGl0cyA8IHAtPmNzdW0pKSB7CisJCQlzdHJ1Y3QgdHhfZGF0YV93ciAqdyA9IGNwbGhkcihwKTsKKwkJCWN4Z2IzaV9sb2dfZXJyb3IoIlRJRCAldSBnb3QgJXUgV1IgY3JlZGl0cyBuZWVkICV1LCAiCisJCQkJCSAibGVuICV1LCBtYWluIGJvZHkgJXUsIGZyYWdzICV1LCAiCisJCQkJCSAic2VxICMgJXUsIEFDSyB1bmEgJXUsIEFDSyBueHQgJXUsICIKKwkJCQkJICJXUl9BVkFJTCAldSwgV1JzIHBlbmRpbmcgJXVcbiIsCisJCQkJCSBjM2NuLT50aWQsIGNyZWRpdHMsIHAtPmNzdW0sIHAtPmxlbiwKKwkJCQkJIHAtPmxlbiAtIHAtPmRhdGFfbGVuLAorCQkJCQkgc2tiX3NoaW5mbyhwKS0+bnJfZnJhZ3MsCisJCQkJCSBudG9obCh3LT5zbmRzZXEpLCBzbmRfdW5hLAorCQkJCQkgbnRvaGwoaGRyLT5zbmRfbnh0KSwgYzNjbi0+d3JfYXZhaWwsCisJCQkJCSBjb3VudF9wZW5kaW5nX3dycyhjM2NuKSAtIGNyZWRpdHMpOwogCQkJcC0+Y3N1bSAtPSBjcmVkaXRzOwogCQkJYnJlYWs7CiAJCX0gZWxzZSB7CkBAIC0xMTgwLDE1ICsxMjIzLDI0IEBACiAJCX0KIAl9CiAKLQlpZiAodW5saWtlbHkoYmVmb3JlKHNuZF91bmEsIGMzY24tPnNuZF91bmEpKSkKKwljaGVja193cl9pbnZhcmlhbnRzKGMzY24pOworCisJaWYgKHVubGlrZWx5KGJlZm9yZShzbmRfdW5hLCBjM2NuLT5zbmRfdW5hKSkpIHsKKwkJY3hnYjNpX2xvZ19lcnJvcigiVElEICV1LCB1bmV4cGVjdGVkIHNlcXVlbmNlICMgJXUgaW4gV1JfQUNLICIKKwkJCQkgInNuZF91bmEgJXVcbiIsCisJCQkJIGMzY24tPnRpZCwgc25kX3VuYSwgYzNjbi0+c25kX3VuYSk7CiAJCWdvdG8gb3V0X2ZyZWU7CisJfQogCiAJaWYgKGMzY24tPnNuZF91bmEgIT0gc25kX3VuYSkgewogCQljM2NuLT5zbmRfdW5hID0gc25kX3VuYTsKIAkJZHN0X2NvbmZpcm0oYzNjbi0+ZHN0X2NhY2hlKTsKIAl9CiAKLQlpZiAoc2tiX3F1ZXVlX2xlbigmYzNjbi0+d3JpdGVfcXVldWUpICYmIGMzY25fcHVzaF90eF9mcmFtZXMoYzNjbiwgMCkpCisJaWYgKHNrYl9xdWV1ZV9sZW4oJmMzY24tPndyaXRlX3F1ZXVlKSkgeworCQlpZiAoYzNjbl9wdXNoX3R4X2ZyYW1lcyhjM2NuLCAwKSkKKwkJCWN4Z2IzaV9jb25uX3R4X29wZW4oYzNjbik7CisJfSBlbHNlCiAJCWN4Z2IzaV9jb25uX3R4X29wZW4oYzNjbik7CiBvdXRfZnJlZToKIAlfX2tmcmVlX3NrYihza2IpOwpAQCAtMTQ1Miw3ICsxNTA0LDcgQEAKIAkJCSAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKIAlCVUdfT04oYzNjbi0+Y2RldiAhPSBjZGV2KTsKLQljM2NuLT53cl9tYXggPSBjM2NuLT53cl9hdmFpbCA9IFQzQ19EQVRBKGNkZXYpLT5tYXhfd3JzOworCWMzY24tPndyX21heCA9IGMzY24tPndyX2F2YWlsID0gVDNDX0RBVEEoY2RldiktPm1heF93cnMgLSAxOwogCWMzY24tPndyX3VuYWNrZWQgPSAwOwogCWMzY24tPm1zc19pZHggPSBzZWxlY3RfbXNzKGMzY24sIGRzdF9tdHUoZHN0KSk7CiAKQEAgLTE2NzEsOSArMTcyMywxNyBAQAogCQlnb3RvIG91dF9lcnI7CiAJfQogCi0JZXJyID0gLUVQSVBFOwogCWlmIChjM2NuLT5lcnIpIHsKIAkJYzNjbl90eF9kZWJ1ZygiYzNjbiAweCVwLCBlcnIgJWQuXG4iLCBjM2NuLCBjM2NuLT5lcnIpOworCQllcnIgPSAtRVBJUEU7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlpZiAoYzNjbi0+d3JpdGVfc2VxIC0gYzNjbi0+c25kX3VuYSA+PSBjeGdiM19zbmRfd2luKSB7CisJCWMzY25fdHhfZGVidWcoImMzY24gMHglcCwgc25kICV1IC0gJXUgPiAldS5cbiIsCisJCQkJYzNjbiwgYzNjbi0+d3JpdGVfc2VxLCBjM2NuLT5zbmRfdW5hLAorCQkJCWN4Z2IzX3NuZF93aW4pOworCQllcnIgPSAtRUFHQUlOOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmggYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmgKaW5kZXggZDIzMTU2OS4uNjM0NGI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuaApAQCAtMTc4LDI1ICsxNzgsMzMgQEAKICAqIEBmbGFnOglzZWUgQzNDQl9GTEFHXyogYmVsb3cKICAqIEB1bHBfbW9kZToJVUxQIG1vZGUvc3VibW9kZSBvZiBza19idWZmCiAgKiBAc2VxOgl0Y3Agc2VxdWVuY2UgbnVtYmVyCi0gKiBAZGRpZ2VzdDoJcGR1IGRhdGEgZGlnZXN0Ci0gKiBAcGR1bGVuOglyZWNvdmVyZWQgcGR1IGxlbmd0aAotICogQHdyX2RhdGE6CXNjcmF0Y2ggYXJlYSBmb3IgdHggd3IKICAqLworc3RydWN0IGN4Z2IzX3NrYl9yeF9jYiB7CisJX191MzIgZGRpZ2VzdDsJCQkvKiBkYXRhIGRpZ2VzdCAqLworCV9fdTMyIHBkdWxlbjsJCQkvKiByZWNvdmVyZWQgcGR1IGxlbmd0aCAqLworfTsKKworc3RydWN0IGN4Z2IzX3NrYl90eF9jYiB7CisJc3RydWN0IHNrX2J1ZmYgKndyX25leHQ7CS8qIG5leHQgd3IgKi8KK307CisKIHN0cnVjdCBjeGdiM19za2JfY2IgewogCV9fdTggZmxhZ3M7CiAJX191OCB1bHBfbW9kZTsKIAlfX3UzMiBzZXE7Ci0JX191MzIgZGRpZ2VzdDsKLQlfX3UzMiBwZHVsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKndyX2RhdGE7CisJdW5pb24geworCQlzdHJ1Y3QgY3hnYjNfc2tiX3J4X2NiIHJ4OworCQlzdHJ1Y3QgY3hnYjNfc2tiX3R4X2NiIHR4OworCX07CiB9OwogCiAjZGVmaW5lIENYR0IzX1NLQl9DQihza2IpCSgoc3RydWN0IGN4Z2IzX3NrYl9jYiAqKSYoKHNrYiktPmNiWzBdKSkKLQorI2RlZmluZSBza2JfZmxhZ3Moc2tiKQkJKENYR0IzX1NLQl9DQihza2IpLT5mbGFncykKICNkZWZpbmUgc2tiX3VscF9tb2RlKHNrYikJKENYR0IzX1NLQl9DQihza2IpLT51bHBfbW9kZSkKLSNkZWZpbmUgc2tiX3VscF9kZGlnZXN0KHNrYikJKENYR0IzX1NLQl9DQihza2IpLT5kZGlnZXN0KQotI2RlZmluZSBza2JfdWxwX3BkdWxlbihza2IpCShDWEdCM19TS0JfQ0Ioc2tiKS0+cGR1bGVuKQotI2RlZmluZSBza2Jfd3JfZGF0YShza2IpCShDWEdCM19TS0JfQ0Ioc2tiKS0+d3JfZGF0YSkKKyNkZWZpbmUgc2tiX3RjcF9zZXEoc2tiKQkoQ1hHQjNfU0tCX0NCKHNrYiktPnNlcSkKKyNkZWZpbmUgc2tiX3J4X2RkaWdlc3Qoc2tiKQkoQ1hHQjNfU0tCX0NCKHNrYiktPnJ4LmRkaWdlc3QpCisjZGVmaW5lIHNrYl9yeF9wZHVsZW4oc2tiKQkoQ1hHQjNfU0tCX0NCKHNrYiktPnJ4LnBkdWxlbikKKyNkZWZpbmUgc2tiX3R4X3dyX25leHQoc2tiKQkoQ1hHQjNfU0tCX0NCKHNrYiktPnR4LndyX25leHQpCiAKIGVudW0gYzNjYl9mbGFncyB7CiAJQzNDQl9GTEFHX05FRURfSERSID0gMSA8PCAwLAkvKiBwYWNrZXQgbmVlZHMgYSBUWF9EQVRBX1dSIGhlYWRlciAqLwpAQCAtMjE3LDYgKzIyNSw3IEBACiAvKiBmb3IgVFg6IGEgc2tiIG11c3QgaGF2ZSBhIGhlYWRyb29tIG9mIGF0IGxlYXN0IFRYX0hFQURFUl9MRU4gYnl0ZXMgKi8KICNkZWZpbmUgVFhfSEVBREVSX0xFTiBcCiAJCShzaXplb2Yoc3RydWN0IHR4X2RhdGFfd3IpICsgc2l6ZW9mKHN0cnVjdCBzZ2Vfb3BhcXVlX2hkcikpCisjZGVmaW5lIFNLQl9UWF9IRUFEUk9PTQkJU0tCX01BWF9IRUFEKFRYX0hFQURFUl9MRU4pCiAKIC8qCiAgKiBnZXQgYW5kIHNldCBwcml2YXRlIGlwIGZvciBpc2NzaSB0cmFmZmljCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCmluZGV4IGNlN2NlOGMuLjE3MTE1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCkBAIC0zMiw2ICszMiwxMCBAQAogI2RlZmluZSBjeGdiM2lfdHhfZGVidWcoZm10Li4uKQogI2VuZGlmCiAKKy8qIGFsd2F5cyBhbGxvY2F0ZSByb29tcyBmb3IgQUhTICovCisjZGVmaW5lIFNLQl9UWF9QRFVfSEVBREVSX0xFTglcCisJKHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSArIElTQ1NJX01BWF9BSFNfU0laRSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2tiX2V4dHJhX2hlYWRyb29tOwogc3RhdGljIHN0cnVjdCBwYWdlICpwYWRfcGFnZTsKIAogLyoKQEAgLTE0NiwxMiArMTUwLDEzIEBACiAKIHZvaWQgY3hnYjNpX2Nvbm5fY2xlYW51cF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQogewotCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBjeGdiM2lfdGFza19kYXRhICp0ZGF0YSA9IHRhc2stPmRkX2RhdGEgKworCQkJCQlzaXplb2Yoc3RydWN0IGlzY3NpX3RjcF90YXNrKTsKIAogCS8qIG5ldmVyIHJlYWNoZWQgdGhlIHhtaXQgdGFzayBjYWxsb3V0ICovCi0JaWYgKHRjcF90YXNrLT5kZF9kYXRhKQotCQlrZnJlZV9za2IodGNwX3Rhc2stPmRkX2RhdGEpOwotCXRjcF90YXNrLT5kZF9kYXRhID0gTlVMTDsKKwlpZiAodGRhdGEtPnNrYikKKwkJX19rZnJlZV9za2IodGRhdGEtPnNrYik7CisJbWVtc2V0KHRkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGN4Z2IzaV90YXNrX2RhdGEpKTsKIAogCS8qIE1OQyAtIERvIHdlIG5lZWQgYSBjaGVjayBpbiBjYXNlIHRoaXMgaXMgY2FsbGVkIGJ1dAogCSAqIGN4Z2IzaV9jb25uX2FsbG9jX3BkdSBoYXMgbmV2ZXIgYmVlbiBjYWxsZWQgb24gdGhlIHRhc2sgKi8KQEAgLTE1OSwyOCArMTY0LDEwMiBAQAogCWlzY3NpX3RjcF9jbGVhbnVwX3Rhc2sodGFzayk7CiB9CiAKLS8qCi0gKiBXZSBkbyBub3Qgc3VwcG9ydCBhaHMgeWV0Ci0gKi8KK3N0YXRpYyBpbnQgc2dsX3NlZWtfb2Zmc2V0KHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2djbnQsCisJCQkJdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50ICpvZmYsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICoqc2dwKQoreworCWludCBpOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ2NudCwgaSkgeworCQlpZiAob2Zmc2V0IDwgc2ctPmxlbmd0aCkgeworCQkJKm9mZiA9IG9mZnNldDsKKwkJCSpzZ3AgPSBzZzsKKwkJCXJldHVybiAwOworCQl9CisJCW9mZnNldCAtPSBzZy0+bGVuZ3RoOworCX0KKwlyZXR1cm4gLUVGQVVMVDsKK30KKworc3RhdGljIGludCBzZ2xfcmVhZF90b19mcmFncyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dvZmZzZXQsCisJCQkJdW5zaWduZWQgaW50IGRsZW4sIHNrYl9mcmFnX3QgKmZyYWdzLAorCQkJCWludCBmcmFnX21heCkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YWxlbiA9IGRsZW47CisJdW5zaWduZWQgaW50IHNnbGVuID0gc2ctPmxlbmd0aCAtIHNnb2Zmc2V0OworCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZShzZyk7CisJaW50IGk7CisKKwlpID0gMDsKKwlkbyB7CisJCXVuc2lnbmVkIGludCBjb3B5OworCisJCWlmICghc2dsZW4pIHsKKwkJCXNnID0gc2dfbmV4dChzZyk7CisJCQlpZiAoIXNnKSB7CisJCQkJY3hnYjNpX2xvZ19lcnJvcigiJXMsIHNnIE5VTEwsIGxlbiAldS8ldS5cbiIsCisJCQkJCQkgX19mdW5jX18sIGRhdGFsZW4sIGRsZW4pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJc2dvZmZzZXQgPSAwOworCQkJc2dsZW4gPSBzZy0+bGVuZ3RoOworCQkJcGFnZSA9IHNnX3BhZ2Uoc2cpOworCisJCX0KKwkJY29weSA9IG1pbihkYXRhbGVuLCBzZ2xlbik7CisJCWlmIChpICYmIHBhZ2UgPT0gZnJhZ3NbaSAtIDFdLnBhZ2UgJiYKKwkJICAgIHNnb2Zmc2V0ICsgc2ctPm9mZnNldCA9PQorCQkJZnJhZ3NbaSAtIDFdLnBhZ2Vfb2Zmc2V0ICsgZnJhZ3NbaSAtIDFdLnNpemUpIHsKKwkJCWZyYWdzW2kgLSAxXS5zaXplICs9IGNvcHk7CisJCX0gZWxzZSB7CisJCQlpZiAoaSA+PSBmcmFnX21heCkgeworCQkJCWN4Z2IzaV9sb2dfZXJyb3IoIiVzLCB0b28gbWFueSBwYWdlcyAldSwgIgorCQkJCQkJICJkbGVuICV1LlxuIiwgX19mdW5jX18sCisJCQkJCQkgZnJhZ19tYXgsIGRsZW4pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlmcmFnc1tpXS5wYWdlID0gcGFnZTsKKwkJCWZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ID0gc2ctPm9mZnNldCArIHNnb2Zmc2V0OworCQkJZnJhZ3NbaV0uc2l6ZSA9IGNvcHk7CisJCQlpKys7CisJCX0KKwkJZGF0YWxlbiAtPSBjb3B5OworCQlzZ29mZnNldCArPSBjb3B5OworCQlzZ2xlbiAtPSBjb3B5OworCX0gd2hpbGUgKGRhdGFsZW4pOworCisJcmV0dXJuIGk7Cit9CisKIGludCBjeGdiM2lfY29ubl9hbGxvY19wZHUoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHU4IG9wY29kZSkKIHsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CiAJc3RydWN0IGlzY3NpX3RjcF90YXNrICp0Y3BfdGFzayA9IHRhc2stPmRkX2RhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgY3hnYjNpX3Rhc2tfZGF0YSAqdGRhdGEgPSB0YXNrLT5kZF9kYXRhICsgc2l6ZW9mKCp0Y3BfdGFzayk7CisJc3RydWN0IHNjc2lfY21uZCAqc2MgPSB0YXNrLT5zYzsKKwlpbnQgaGVhZHJvb20gPSBTS0JfVFhfUERVX0hFQURFUl9MRU47CiAKKwl0Y3BfdGFzay0+ZGRfZGF0YSA9IHRkYXRhOwogCXRhc2stPmhkciA9IE5VTEw7Ci0JLyogYWx3YXlzIGFsbG9jYXRlIHJvb21zIGZvciBBSFMgKi8KLQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpICsgSVNDU0lfTUFYX0FIU19TSVpFICsKLQkJCVRYX0hFQURFUl9MRU4sICBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikKKworCS8qIHdyaXRlIGNvbW1hbmQsIG5lZWQgdG8gc2VuZCBkYXRhIHBkdXMgKi8KKwlpZiAoc2tiX2V4dHJhX2hlYWRyb29tICYmIChvcGNvZGUgPT0gSVNDU0lfT1BfU0NTSV9EQVRBX09VVCB8fAorCSAgICAob3Bjb2RlID09IElTQ1NJX09QX1NDU0lfQ01EICYmCisJICAgIChzY3NpX2JpZGlfY21uZChzYykgfHwgc2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpKSkpCisJCWhlYWRyb29tICs9IG1pbihza2JfZXh0cmFfaGVhZHJvb20sIGNvbm4tPm1heF94bWl0X2RsZW5ndGgpOworCisJdGRhdGEtPnNrYiA9IGFsbG9jX3NrYihUWF9IRUFERVJfTEVOICsgaGVhZHJvb20sIEdGUF9BVE9NSUMpOworCWlmICghdGRhdGEtPnNrYikKIAkJcmV0dXJuIC1FTk9NRU07CisJc2tiX3Jlc2VydmUodGRhdGEtPnNrYiwgVFhfSEVBREVSX0xFTik7CiAKIAljeGdiM2lfdHhfZGVidWcoInRhc2sgMHglcCwgb3Bjb2RlIDB4JXgsIHNrYiAweCVwLlxuIiwKLQkJCXRhc2ssIG9wY29kZSwgc2tiKTsKKwkJCXRhc2ssIG9wY29kZSwgdGRhdGEtPnNrYik7CiAKLQl0Y3BfdGFzay0+ZGRfZGF0YSA9IHNrYjsKLQlza2JfcmVzZXJ2ZShza2IsIFRYX0hFQURFUl9MRU4pOwotCXRhc2stPmhkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopc2tiLT5kYXRhOwotCXRhc2stPmhkcl9tYXggPSBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcik7CisJdGFzay0+aGRyID0gKHN0cnVjdCBpc2NzaV9oZHIgKil0ZGF0YS0+c2tiLT5kYXRhOworCXRhc2stPmhkcl9tYXggPSBTS0JfVFhfUERVX0hFQURFUl9MRU47CiAKIAkvKiBkYXRhX291dCB1c2VzIHNjc2lfY21kJ3MgaXR0ICovCiAJaWYgKG9wY29kZSAhPSBJU0NTSV9PUF9TQ1NJX0RBVEFfT1VUKQpAQCAtMTkyLDEzICsyNzEsMTMgQEAKIGludCBjeGdiM2lfY29ubl9pbml0X3BkdShzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2sgKnRjcF90YXNrID0gdGFzay0+ZGRfZGF0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3Rhc2stPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOwotCXN0cnVjdCBwYWdlICpwZzsKKwlzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2sgKnRjcF90YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgY3hnYjNpX3Rhc2tfZGF0YSAqdGRhdGEgPSB0Y3BfdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGRhdGEtPnNrYjsKIAl1bnNpZ25lZCBpbnQgZGF0YWxlbiA9IGNvdW50OwogCWludCBpLCBwYWRsZW4gPSBpc2NzaV9wYWRkaW5nKGNvdW50KTsKLQlza2JfZnJhZ190ICpmcmFnOworCXN0cnVjdCBwYWdlICpwZzsKIAogCWN4Z2IzaV90eF9kZWJ1ZygidGFzayAweCVwLDB4JXAsIG9mZnNldCAldSwgY291bnQgJXUsIHNrYiAweCVwLlxuIiwKIAkJCXRhc2ssIHRhc2stPnNjLCBvZmZzZXQsIGNvdW50LCBza2IpOwpAQCAtMjA5LDkwICsyODgsOTQgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAodGFzay0+c2MpIHsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQkJc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYjsKLQkJdW5zaWduZWQgaW50IHNnb2Zmc2V0ID0gb2Zmc2V0OwotCQlzdHJ1Y3QgcGFnZSAqc2dwZzsKLQkJdW5zaWduZWQgaW50IHNnbGVuOworCQlzdHJ1Y3Qgc2NzaV9kYXRhX2J1ZmZlciAqc2RiID0gc2NzaV9vdXQodGFzay0+c2MpOworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gTlVMTDsKKwkJaW50IGVycjsKIAotCQlzZGIgPSBzY3NpX291dCh0YXNrLT5zYyk7Ci0JCXNnID0gc2RiLT50YWJsZS5zZ2w7Ci0KLQkJZm9yX2VhY2hfc2coc2RiLT50YWJsZS5zZ2wsIHNnLCBzZGItPnRhYmxlLm5lbnRzLCBpKSB7Ci0JCQljeGdiM2lfdHhfZGVidWcoInNnICVkLCBwYWdlIDB4JXAsIGxlbiAldSBvZmZzZXQgJXVcbiIsCi0JCQkJCWksIHNnX3BhZ2Uoc2cpLCBzZy0+bGVuZ3RoLCBzZy0+b2Zmc2V0KTsKLQotCQkJaWYgKHNnb2Zmc2V0IDwgc2ctPmxlbmd0aCkKLQkJCQlicmVhazsKLQkJCXNnb2Zmc2V0IC09IHNnLT5sZW5ndGg7CisJCXRkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CisJCXRkYXRhLT5jb3VudCA9IGNvdW50OworCQllcnIgPSBzZ2xfc2Vla19vZmZzZXQoc2RiLT50YWJsZS5zZ2wsIHNkYi0+dGFibGUubmVudHMsCisJCQkJCXRkYXRhLT5vZmZzZXQsICZ0ZGF0YS0+c2dvZmZzZXQsICZzZyk7CisJCWlmIChlcnIgPCAwKSB7CisJCQljeGdiM2lfbG9nX3dhcm4oInRwZHUsIHNnbCAldSwgYmFkIG9mZnNldCAldS8ldS5cbiIsCisJCQkJCXNkYi0+dGFibGUubmVudHMsIHRkYXRhLT5vZmZzZXQsCisJCQkJCXNkYi0+bGVuZ3RoKTsKKwkJCXJldHVybiBlcnI7CiAJCX0KLQkJc2dwZyA9IHNnX3BhZ2Uoc2cpOwotCQlzZ2xlbiA9IHNnLT5sZW5ndGggLSBzZ29mZnNldDsKKwkJZXJyID0gc2dsX3JlYWRfdG9fZnJhZ3Moc2csIHRkYXRhLT5zZ29mZnNldCwgdGRhdGEtPmNvdW50LAorCQkJCQl0ZGF0YS0+ZnJhZ3MsIE1BWF9QRFVfRlJBR1MpOworCQlpZiAoZXJyIDwgMCkgeworCQkJY3hnYjNpX2xvZ193YXJuKCJ0cGR1LCBzZ2wgJXUsIGJhZCBvZmZzZXQgJXUgKyAldS5cbiIsCisJCQkJCXNkYi0+dGFibGUubmVudHMsIHRkYXRhLT5vZmZzZXQsCisJCQkJCXRkYXRhLT5jb3VudCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCXRkYXRhLT5ucl9mcmFncyA9IGVycjsKIAotCQlkbyB7Ci0JCQlpbnQgaiA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCQl1bnNpZ25lZCBpbnQgY29weTsKKwkJaWYgKHRkYXRhLT5ucl9mcmFncyA+IE1BWF9TS0JfRlJBR1MgfHwKKwkJICAgIChwYWRsZW4gJiYgdGRhdGEtPm5yX2ZyYWdzID09IE1BWF9TS0JfRlJBR1MpKSB7CisJCQljaGFyICpkc3QgPSBza2ItPmRhdGEgKyB0YXNrLT5oZHJfbGVuOworCQkJc2tiX2ZyYWdfdCAqZnJhZyA9IHRkYXRhLT5mcmFnczsKIAotCQkJaWYgKCFzZ2xlbikgewotCQkJCXNnID0gc2dfbmV4dChzZyk7Ci0JCQkJc2dwZyA9IHNnX3BhZ2Uoc2cpOwotCQkJCXNnb2Zmc2V0ID0gMDsKLQkJCQlzZ2xlbiA9IHNnLT5sZW5ndGg7Ci0JCQkJKytpOworCQkJLyogZGF0YSBmaXRzIGluIHRoZSBza2IncyBoZWFkcm9vbSAqLworCQkJZm9yIChpID0gMDsgaSA8IHRkYXRhLT5ucl9mcmFnczsgaSsrLCBmcmFnKyspIHsKKwkJCQljaGFyICpzcmMgPSBrbWFwX2F0b21pYyhmcmFnLT5wYWdlLAorCQkJCQkJCUtNX1NPRlRJUlEwKTsKKworCQkJCW1lbWNweShkc3QsIHNyYytmcmFnLT5wYWdlX29mZnNldCwgZnJhZy0+c2l6ZSk7CisJCQkJZHN0ICs9IGZyYWctPnNpemU7CisJCQkJa3VubWFwX2F0b21pYyhzcmMsIEtNX1NPRlRJUlEwKTsKIAkJCX0KLQkJCWNvcHkgPSBtaW4oc2dsZW4sIGRhdGFsZW4pOwotCQkJaWYgKGogJiYgc2tiX2Nhbl9jb2FsZXNjZShza2IsIGosIHNncGcsCi0JCQkJCQkgIHNnLT5vZmZzZXQgKyBzZ29mZnNldCkpIHsKLQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ogLSAxXS5zaXplICs9IGNvcHk7Ci0JCQl9IGVsc2UgewotCQkJCWdldF9wYWdlKHNncGcpOwotCQkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGosIHNncGcsCi0JCQkJCQkgICBzZy0+b2Zmc2V0ICsgc2dvZmZzZXQsIGNvcHkpOworCQkJaWYgKHBhZGxlbikgeworCQkJCW1lbXNldChkc3QsIDAsIHBhZGxlbik7CisJCQkJcGFkbGVuID0gMDsKIAkJCX0KLQkJCXNnb2Zmc2V0ICs9IGNvcHk7Ci0JCQlzZ2xlbiAtPSBjb3B5OwotCQkJZGF0YWxlbiAtPSBjb3B5OwotCQl9IHdoaWxlIChkYXRhbGVuKTsKKwkJCXNrYl9wdXQoc2tiLCBjb3VudCArIHBhZGxlbik7CisJCX0gZWxzZSB7CisJCQkvKiBkYXRhIGZpdCBpbnRvIGZyYWdfbGlzdCAqLworCQkJZm9yIChpID0gMDsgaSA8IHRkYXRhLT5ucl9mcmFnczsgaSsrKQorCQkJCWdldF9wYWdlKHRkYXRhLT5mcmFnc1tpXS5wYWdlKTsKKworCQkJbWVtY3B5KHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsIHRkYXRhLT5mcmFncywKKwkJCQlzaXplb2Yoc2tiX2ZyYWdfdCkgKiB0ZGF0YS0+bnJfZnJhZ3MpOworCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IHRkYXRhLT5ucl9mcmFnczsKKwkJCXNrYi0+bGVuICs9IGNvdW50OworCQkJc2tiLT5kYXRhX2xlbiArPSBjb3VudDsKKwkJCXNrYi0+dHJ1ZXNpemUgKz0gY291bnQ7CisJCX0KKwogCX0gZWxzZSB7CiAJCXBnID0gdmlydF90b19wYWdlKHRhc2stPmRhdGEpOwogCi0JCXdoaWxlIChkYXRhbGVuKSB7Ci0JCQlpID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQotCQkJZ2V0X3BhZ2UocGcpOwotCQkJZnJhZy0+cGFnZSA9IHBnOwotCQkJZnJhZy0+cGFnZV9vZmZzZXQgPSAwOwotCQkJZnJhZy0+c2l6ZSA9IG1pbigodW5zaWduZWQgaW50KVBBR0VfU0laRSwgZGF0YWxlbik7Ci0KLQkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKLQkJCWRhdGFsZW4gLT0gZnJhZy0+c2l6ZTsKLQkJCXBnKys7Ci0JCX0KKwkJZ2V0X3BhZ2UocGcpOworCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCAwLCBwZywgb2Zmc2V0X2luX3BhZ2UodGFzay0+ZGF0YSksCisJCQkJCWNvdW50KTsKKwkJc2tiLT5sZW4gKz0gY291bnQ7CisJCXNrYi0+ZGF0YV9sZW4gKz0gY291bnQ7CisJCXNrYi0+dHJ1ZXNpemUgKz0gY291bnQ7CiAJfQogCiAJaWYgKHBhZGxlbikgewogCQlpID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCQlmcmFnLT5wYWdlID0gcGFkX3BhZ2U7Ci0JCWZyYWctPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJZnJhZy0+c2l6ZSA9IHBhZGxlbjsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOworCQlnZXRfcGFnZShwYWRfcGFnZSk7CisJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MsIHBhZF9wYWdlLCAwLAorCQkJCSBwYWRsZW4pOworCisJCXNrYi0+ZGF0YV9sZW4gKz0gcGFkbGVuOworCQlza2ItPnRydWVzaXplICs9IHBhZGxlbjsKKwkJc2tiLT5sZW4gKz0gcGFkbGVuOwogCX0KIAotCWRhdGFsZW4gPSBjb3VudCArIHBhZGxlbjsKLQlza2ItPmRhdGFfbGVuICs9IGRhdGFsZW47Ci0Jc2tiLT50cnVlc2l6ZSArPSBkYXRhbGVuOwotCXNrYi0+bGVuICs9IGRhdGFsZW47CiAJcmV0dXJuIDA7CiB9CiAKIGludCBjeGdiM2lfY29ubl94bWl0X3BkdShzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2sgKnRjcF90YXNrID0gdGFzay0+ZGRfZGF0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3Rhc2stPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubiA9IHRhc2stPmNvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGN4Z2IzaV9jb25uICpjY29ubiA9IHRjcF9jb25uLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBjeGdiM2lfdGFza19kYXRhICp0ZGF0YSA9IHRjcF90YXNrLT5kZF9kYXRhOworCXN0cnVjdCBza19idWZmICpza2IgPSB0ZGF0YS0+c2tiOwogCXVuc2lnbmVkIGludCBkYXRhbGVuOwogCWludCBlcnI7CiAKQEAgLTMwMCwxMyArMzgzLDE0IEBACiAJCXJldHVybiAwOwogCiAJZGF0YWxlbiA9IHNrYi0+ZGF0YV9sZW47Ci0JdGNwX3Rhc2stPmRkX2RhdGEgPSBOVUxMOworCXRkYXRhLT5za2IgPSBOVUxMOwogCWVyciA9IGN4Z2IzaV9jM2NuX3NlbmRfcGR1cyhjY29ubi0+Y2VwLT5jM2NuLCBza2IpOwotCWN4Z2IzaV90eF9kZWJ1ZygidGFzayAweCVwLCBza2IgMHglcCwgbGVuICV1LyV1LCBydiAlZC5cbiIsCi0JCQl0YXNrLCBza2IsIHNrYi0+bGVuLCBza2ItPmRhdGFfbGVuLCBlcnIpOwogCWlmIChlcnIgPiAwKSB7CiAJCWludCBwZHVsZW4gPSBlcnI7CiAKKwljeGdiM2lfdHhfZGVidWcoInRhc2sgMHglcCwgc2tiIDB4JXAsIGxlbiAldS8ldSwgcnYgJWQuXG4iLAorCQkJdGFzaywgc2tiLCBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwgZXJyKTsKKwogCQlpZiAodGFzay0+Y29ubi0+aGRyZGdzdF9lbikKIAkJCXBkdWxlbiArPSBJU0NTSV9ESUdFU1RfU0laRTsKIAkJaWYgKGRhdGFsZW4gJiYgdGFzay0+Y29ubi0+ZGF0YWRnc3RfZW4pCkBAIC0zMjUsMTIgKzQwOSwxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAkvKiByZXNldCBza2IgdG8gc2VuZCB3aGVuIHdlIGFyZSBjYWxsZWQgYWdhaW4gKi8KLQl0Y3BfdGFzay0+ZGRfZGF0YSA9IHNrYjsKKwl0ZGF0YS0+c2tiID0gc2tiOwogCXJldHVybiAtRUFHQUlOOwogfQogCiBpbnQgY3hnYjNpX3BkdV9pbml0KHZvaWQpCiB7CisJaWYgKFNLQl9UWF9IRUFEUk9PTSA+ICg1MTIgKiBNQVhfU0tCX0ZSQUdTKSkKKwkJc2tiX2V4dHJhX2hlYWRyb29tID0gU0tCX1RYX0hFQURST09NOwogCXBhZF9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXBhZF9wYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM2Niw3ICs0NTIsOSBAQAogCXNrYiA9IHNrYl9wZWVrKCZjM2NuLT5yZWNlaXZlX3F1ZXVlKTsKIAl3aGlsZSAoIWVyciAmJiBza2IpIHsKIAkJX19za2JfdW5saW5rKHNrYiwgJmMzY24tPnJlY2VpdmVfcXVldWUpOwotCQlyZWFkICs9IHNrYl91bHBfcGR1bGVuKHNrYik7CisJCXJlYWQgKz0gc2tiX3J4X3BkdWxlbihza2IpOworCQljeGdiM2lfcnhfZGVidWcoImNvbm4gMHglcCwgY24gMHglcCwgcnggc2tiIDB4JXAsIHBkdWxlbiAldS5cbiIsCisJCQkJY29ubiwgYzNjbiwgc2tiLCBza2JfcnhfcGR1bGVuKHNrYikpOwogCQllcnIgPSBjeGdiM2lfY29ubl9yZWFkX3BkdV9za2IoY29ubiwgc2tiKTsKIAkJX19rZnJlZV9za2Ioc2tiKTsKIAkJc2tiID0gc2tiX3BlZWsoJmMzY24tPnJlY2VpdmVfcXVldWUpOwpAQCAtMzc3LDYgKzQ2NSwxMSBAQAogCQljeGdiM2lfYzNjbl9yeF9jcmVkaXRzKGMzY24sIHJlYWQpOwogCX0KIAljb25uLT5yeGRhdGFfb2N0ZXRzICs9IHJlYWQ7CisKKwlpZiAoZXJyKSB7CisJCWN4Z2IzaV9sb2dfaW5mbygiY29ubiAweCVwIHJ4IGZhaWxlZCBlcnIgJWQuXG4iLCBjb25uLCBlcnIpOworCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwl9CiB9CiAKIHZvaWQgY3hnYjNpX2Nvbm5fdHhfb3BlbihzdHJ1Y3QgczNfY29ubiAqYzNjbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5oIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmgKaW5kZXggYTNmNjg1Yy4uMDc3MGIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmgKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmgKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZpbmUgVUxQMl9GTEFHX0RDUkNfRVJST1IJCTB4MjAKICNkZWZpbmUgVUxQMl9GTEFHX1BBRF9FUlJPUgkJMHg0MAogCi12b2lkIGN4Z2IzaV9jb25uX2Nsb3Npbmcoc3RydWN0IHMzX2Nvbm4gKik7Cit2b2lkIGN4Z2IzaV9jb25uX2Nsb3Npbmcoc3RydWN0IHMzX2Nvbm4gKmMzY24pOwogdm9pZCBjeGdiM2lfY29ubl9wZHVfcmVhZHkoc3RydWN0IHMzX2Nvbm4gKmMzY24pOwogdm9pZCBjeGdiM2lfY29ubl90eF9vcGVuKHN0cnVjdCBzM19jb25uICpjM2NuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNfdHJhbnNwb3J0X2Zjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2ZjX3RyYW5zcG9ydF9mY29lLmMKaW5kZXggYmY3ZmU2Zi4uODg2Mjc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNfdHJhbnNwb3J0X2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY190cmFuc3BvcnRfZmNvZS5jCkBAIC0zMywxOSArMzMsMTkgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoZmNvZV90cmFuc3BvcnRzX2xvY2spOwogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X2RlZmF1bHQgLSByZXR1cm5zIHB0ciB0byB0aGUgZGVmYXVsdCB0cmFuc3BvcnQgZmNvZV9zdwotICoqLworICogZmNvZV90cmFuc3BvcnRfZGVmYXVsdCgpIC0gUmV0dXJucyBwdHIgdG8gdGhlIGRlZmF1bHQgdHJhbnNwb3J0IGZjb2Vfc3cKKyAqLwogc3RydWN0IGZjb2VfdHJhbnNwb3J0ICpmY29lX3RyYW5zcG9ydF9kZWZhdWx0KHZvaWQpCiB7CiAJcmV0dXJuICZmY29lX3N3X3RyYW5zcG9ydDsKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF90b19wY2lkZXYgLSBnZXQgdGhlIHBjaSBkZXYgZnJvbSBhIG5ldGRldgorICogZmNvZV90cmFuc3BvcnRfdG9fcGNpZGV2KCkgLSBnZXQgdGhlIHBjaSBkZXYgZnJvbSBhIG5ldGRldgogICogQG5ldGRldjogdGhlIG5ldGRldiB0aGF0IHBjaSBkZXYgd2lsbCBiZSByZXRyaXZlZCBmcm9tCiAgKgogICogUmV0dXJuczogTlVMTCBvciB0aGUgY29ycnNwb25kaW5nIHBjaV9kZXYKLSAqKi8KKyAqLwogc3RydWN0IHBjaV9kZXYgKmZjb2VfdHJhbnNwb3J0X3BjaWRldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCWlmICghbmV0ZGV2LT5kZXYucGFyZW50KQpAQCAtNTQsMTggKzU0LDE3IEBACiB9CiAKIC8qKgotICogZmNvZV90cmFuc3BvcnRfZGV2aWNlX2xvb2t1cCAtIGZpbmQgb3V0IG5ldGRldiBpcyBtYW5hZ2VkIGJ5IHRoZQotICogdHJhbnNwb3J0Ci0gKiBhc3NpZ24gYSB0cmFuc3BvcnQgdG8gYSBkZXZpY2UKKyAqIGZjb2VfdHJhbnNwb3J0X2RldmljZV9sb29rdXAoKSAtIExvb2t1cCBhIHRyYW5zcG9ydAogICogQG5ldGRldjogdGhlIG5ldGRldiB0aGUgdHJhbnNwb3J0IHRvIGJlIGF0dGFjaGVkIHRvCiAgKgogICogVGhpcyB3aWxsIGxvb2sgZm9yIGV4aXN0aW5nIG9mZmxvYWQgZHJpdmVyLCBpZiBub3QgZm91bmQsIGl0IGZhbGxzIGJhY2sgdG8KICAqIHRoZSBkZWZhdWx0IHN3IGhiYSAoZmNvZV9zdykgYXMgaXRzIGZjb2UgdHJhbnNwb3J0LgogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KLXN0YXRpYyBzdHJ1Y3QgZmNvZV90cmFuc3BvcnRfaW50ZXJuYWwgKmZjb2VfdHJhbnNwb3J0X2RldmljZV9sb29rdXAoCi0Jc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorICovCitzdGF0aWMgc3RydWN0IGZjb2VfdHJhbnNwb3J0X2ludGVybmFsICoKK2Zjb2VfdHJhbnNwb3J0X2RldmljZV9sb29rdXAoc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0LAorCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBmY29lX3RyYW5zcG9ydF9pbnRlcm5hbCAqdGk7CiAKQEAgLTgxLDE0ICs4MCwxNCBAQAogCXJldHVybiBOVUxMOwogfQogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9kZXZpY2VfYWRkIC0gYXNzaWduIGEgdHJhbnNwb3J0IHRvIGEgZGV2aWNlCisgKiBmY29lX3RyYW5zcG9ydF9kZXZpY2VfYWRkKCkgLSBBc3NpZ24gYSB0cmFuc3BvcnQgdG8gYSBkZXZpY2UKICAqIEBuZXRkZXY6IHRoZSBuZXRkZXYgdGhlIHRyYW5zcG9ydCB0byBiZSBhdHRhY2hlZCB0bwogICoKICAqIFRoaXMgd2lsbCBsb29rIGZvciBleGlzdGluZyBvZmZsb2FkIGRyaXZlciwgaWYgbm90IGZvdW5kLCBpdCBmYWxscyBiYWNrIHRvCiAgKiB0aGUgZGVmYXVsdCBzdyBoYmEgKGZjb2Vfc3cpIGFzIGl0cyBmY29lIHRyYW5zcG9ydC4KICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgZmNvZV90cmFuc3BvcnRfZGV2aWNlX2FkZChzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQsCiAJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewpAQCAtMTIzLDE0ICsxMjIsMTQgQEAKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9kZXZpY2VfcmVtb3ZlIC0gcmVtb3ZlIGEgZGV2aWNlIGZyb20gaXRzIHRyYW5zcG9ydAorICogZmNvZV90cmFuc3BvcnRfZGV2aWNlX3JlbW92ZSgpIC0gUmVtb3ZlIGEgZGV2aWNlIGZyb20gaXRzIHRyYW5zcG9ydAogICogQG5ldGRldjogdGhlIG5ldGRldiB0aGUgdHJhbnNwb3J0IHRvIGJlIGF0dGFjaGVkIHRvCiAgKgotICogdGhpcyByZW1vdmVzIHRoZSBkZXZpY2UgZnJvbSB0aGUgdHJhbnNwb3J0IHNvIHRoZSBnaXZlbiB0cmFuc3BvcnQgd2lsbAorICogVGhpcyByZW1vdmVzIHRoZSBkZXZpY2UgZnJvbSB0aGUgdHJhbnNwb3J0IHNvIHRoZSBnaXZlbiB0cmFuc3BvcnQgd2lsbAogICogbm90IG1hbmFnZSB0aGlzIGRldmljZSBhbnkgbW9yZQogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX3RyYW5zcG9ydF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdCwKIAkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTE1NSwxMyArMTU0LDEzIEBACiB9CiAKIC8qKgotICogZmNvZV90cmFuc3BvcnRfZGV2aWNlX3JlbW92ZV9hbGwgLSByZW1vdmUgYWxsIGZyb20gdHJhbnNwb3J0IGRldmxpc3QKKyAqIGZjb2VfdHJhbnNwb3J0X2RldmljZV9yZW1vdmVfYWxsKCkgLSBSZW1vdmUgYWxsIGZyb20gdHJhbnNwb3J0IGRldmxpc3QKICAqCi0gKiB0aGlzIHJlbW92ZXMgdGhlIGRldmljZSBmcm9tIHRoZSB0cmFuc3BvcnQgc28gdGhlIGdpdmVuIHRyYW5zcG9ydCB3aWxsCisgKiBUaGlzIHJlbW92ZXMgdGhlIGRldmljZSBmcm9tIHRoZSB0cmFuc3BvcnQgc28gdGhlIGdpdmVuIHRyYW5zcG9ydCB3aWxsCiAgKiBub3QgbWFuYWdlIHRoaXMgZGV2aWNlIGFueSBtb3JlCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBzdGF0aWMgdm9pZCBmY29lX3RyYW5zcG9ydF9kZXZpY2VfcmVtb3ZlX2FsbChzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQpCiB7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0X2ludGVybmFsICp0aSwgKnRtcDsKQEAgLTE3NSwxOCArMTc0LDE4IEBACiB9CiAKIC8qKgotICogZmNvZV90cmFuc3BvcnRfbWF0Y2ggLSB1c2UgdGhlIGJ1cyBkZXZpY2UgbWF0Y2ggZnVuY3Rpb24gdG8gbWF0Y2ggdGhlIGh3Ci0gKiBAdDogdGhlIGZjb2UgdHJhbnNwb3J0Ci0gKiBAbmV0ZGV2OgorICogZmNvZV90cmFuc3BvcnRfbWF0Y2goKSAtIFVzZSB0aGUgYnVzIGRldmljZSBtYXRjaCBmdW5jdGlvbiB0byBtYXRjaCB0aGUgaHcKKyAqIEB0OiBUaGUgZmNvZSB0cmFuc3BvcnQgdG8gY2hlY2sKKyAqIEBuZXRkZXY6IFRoZSBuZXRkZXYgdG8gbWF0Y2ggYWdhaW5zdAogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgZ2l2bmUgdHJhbnNwb3J0IHdhbnRzIHRvIG1hbmFnZSB0aGUKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gdHJhbnNwb3J0IHdhbnRzIHRvIG1hbmFnZSB0aGUKICAqIGlucHV0IG5ldGRldi4gaWYgdGhlIHRyYW5zcG9ydHMgaW1wbGVtZW50cyB0aGUgbWF0Y2ggZnVuY3Rpb24sIGl0IHdpbGwgYmUKICAqIGNhbGxlZCwgby53LiB3ZSBqdXN0IGNvbXBhcmUgdGhlIHBjaSB2ZW5kb3IgYW5kIGRldmljZSBpZC4KICAqCiAgKiBSZXR1cm5zOiB0cnVlIGZvciBtYXRjaCB1cAotICoqLworICovCiBzdGF0aWMgYm9vbCBmY29lX3RyYW5zcG9ydF9tYXRjaChzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQsCi0JCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAkvKiBtYXRjaCB0cmFuc3BvcnQgYnkgdmVuZG9yIGFuZCBkZXZpY2UgaWQgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpOwpAQCAtMjEwLDE3ICsyMDksMTcgQEAKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9sb29rdXAgLSBjaGVjayBpZiB0aGUgdHJhbnNwb3J0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZAorICogZmNvZV90cmFuc3BvcnRfbG9va3VwKCkgLSBDaGVjayBpZiB0aGUgdHJhbnNwb3J0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZAogICogQHQ6IHRoZSB0cmFuc3BvcnQgdG8gYmUgbG9va2VkIHVwCiAgKgogICogVGhpcyBjb21wYXJlcyB0aGUgcGFyZW50IGRldmljZSAocGNpKSB2ZW5kb3IgYW5kIGRldmljZSBpZAogICoKICAqIFJldHVybnM6IE5VTEwgaWYgbm90IGZvdW5kCiAgKgotICogVE9ETyAtIHJldHVybiBkZWZhdWx0IHN3IHRyYW5zcG9ydCBpZiBubyBvdGhlciB0cmFuc3BvcnQgaXMgZm91bmQKLSAqKi8KLXN0YXRpYyBzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKmZjb2VfdHJhbnNwb3J0X2xvb2t1cCgKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorICogVE9ETzogcmV0dXJuIGRlZmF1bHQgc3cgdHJhbnNwb3J0IGlmIG5vIG90aGVyIHRyYW5zcG9ydCBpcyBmb3VuZAorICovCitzdGF0aWMgc3RydWN0IGZjb2VfdHJhbnNwb3J0ICoKK2Zjb2VfdHJhbnNwb3J0X2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdDsKIApAQCAtMjM5LDExICsyMzgsMTEgQEAKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9yZWdpc3RlciAtIGFkZHMgYSBmY29lIHRyYW5zcG9ydCB0byB0aGUgZmNvZSB0cmFuc3BvcnRzIGxpc3QKKyAqIGZjb2VfdHJhbnNwb3J0X3JlZ2lzdGVyKCkgLSBBZGRzIGEgZmNvZSB0cmFuc3BvcnQgdG8gdGhlIGZjb2UgdHJhbnNwb3J0cyBsaXN0CiAgKiBAdDogcHRyIHRvIHRoZSBmY29lIHRyYW5zcG9ydCB0byBiZSBhZGRlZAogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogaW50IGZjb2VfdHJhbnNwb3J0X3JlZ2lzdGVyKHN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdCkKIHsKIAlzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnR0OwpAQCAtMjU5LDkgKzI1OCw2IEBACiAJbGlzdF9hZGRfdGFpbCgmdC0+bGlzdCwgJmZjb2VfdHJhbnNwb3J0cyk7CiAJbXV0ZXhfdW5sb2NrKCZmY29lX3RyYW5zcG9ydHNfbG9jayk7CiAKLQltdXRleF9pbml0KCZ0LT5kZXZsb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmdC0+ZGV2bGlzdCk7Ci0KIAlwcmludGsoS0VSTl9ERUJVRyAiZmNvZV90cmFuc3BvcnRfcmVnaXN0ZXI6JXNcbiIsIHQtPm5hbWUpOwogCiAJcmV0dXJuIDA7CkBAIC0yNjksMTEgKzI2NSwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV90cmFuc3BvcnRfcmVnaXN0ZXIpOwogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X3VucmVnaXN0ZXIgLSByZW1vdmUgdGhlIHRyYW5wb3J0IGZybyB0aGUgZmNvZSB0cmFuc3BvcnRzIGxpc3QKKyAqIGZjb2VfdHJhbnNwb3J0X3VucmVnaXN0ZXIoKSAtIFJlbW92ZSB0aGUgdHJhbnBvcnQgZnJvIHRoZSBmY29lIHRyYW5zcG9ydHMgbGlzdAogICogQHQ6IHB0ciB0byB0aGUgZmNvZSB0cmFuc3BvcnQgdG8gYmUgcmVtb3ZlZAogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogaW50IGZjb2VfdHJhbnNwb3J0X3VucmVnaXN0ZXIoc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0KQogewogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdHQsICp0bXA7CkBAIC0yOTQsOCArMjkwLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfdHJhbnNwb3J0X3VucmVnaXN0ZXIpOwogCi0vKgotICogZmNvZV9sb2FkX3RyYW5zcG9ydF9kcml2ZXIgLSBsb2FkIGFuIG9mZmxvYWQgZHJpdmVyIGJ5IGFsaWFzIG5hbWUKKy8qKgorICogZmNvZV9sb2FkX3RyYW5zcG9ydF9kcml2ZXIoKSAtIExvYWQgYW4gb2ZmbG9hZCBkcml2ZXIgYnkgYWxpYXMgbmFtZQogICogQG5ldGRldjogdGhlIHRhcmdldCBuZXQgZGV2aWNlCiAgKgogICogUmVxdWVzdHMgZm9yIGFuIG9mZmxvYWQgZHJpdmVyIG1vZHVsZSBhcyB0aGUgZmNvZSB0cmFuc3BvcnQsIGlmIGZhaWxzLCBpdApAQCAtMzA3LDcgKzMwMyw3IEBACiAgKiAJMy4gcHVyZSBodyBmY29lIGhiYSBtYXkgbm90IGhhdmUgbmV0ZGV2CiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBpbnQgZmNvZV9sb2FkX3RyYW5zcG9ydF9kcml2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpOwpAQCAtMzM1LDE0ICszMzEsMTQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfbG9hZF90cmFuc3BvcnRfZHJpdmVyKTsKIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9hdHRhY2ggLSBsb2FkIHRyYW5zcG9ydCB0byBmY29lCisgKiBmY29lX3RyYW5zcG9ydF9hdHRhY2goKSAtIExvYWQgdHJhbnNwb3J0IHRvIGZjb2UKICAqIEBuZXRkZXY6IHRoZSBuZXRkZXYgdGhlIHRyYW5zcG9ydCB0byBiZSBhdHRhY2hlZCB0bwogICoKICAqIFRoaXMgd2lsbCBsb29rIGZvciBleGlzdGluZyBvZmZsb2FkIGRyaXZlciwgaWYgbm90IGZvdW5kLCBpdCBmYWxscyBiYWNrIHRvCiAgKiB0aGUgZGVmYXVsdCBzdyBoYmEgKGZjb2Vfc3cpIGFzIGl0cyBmY29lIHRyYW5zcG9ydC4KICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIGludCBmY29lX3RyYW5zcG9ydF9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQ7CkBAIC0zNzMsMTEgKzM2OSwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV90cmFuc3BvcnRfYXR0YWNoKTsKIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9yZWxlYXNlIC0gdW5sb2FkIHRyYW5zcG9ydCBmcm9tIGZjb2UKKyAqIGZjb2VfdHJhbnNwb3J0X3JlbGVhc2UoKSAtIFVubG9hZCB0cmFuc3BvcnQgZnJvbSBmY29lCiAgKiBAbmV0ZGV2OiB0aGUgbmV0IGRldmljZSBvbiB3aGljaCBmY29lIGlzIHRvIGJlIHJlbGVhc2VkCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBpbnQgZmNvZV90cmFuc3BvcnRfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdDsKQEAgLTQxMCwxMiArNDA2LDEyIEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX3RyYW5zcG9ydF9yZWxlYXNlKTsKIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9pbml0IC0gaW5pdGlhbGl6ZXMgZmNvZSB0cmFuc3BvcnQgbGF5ZXIKKyAqIGZjb2VfdHJhbnNwb3J0X2luaXQoKSAtIEluaXRpYWxpemVzIGZjb2UgdHJhbnNwb3J0IGxheWVyCiAgKgogICogVGhpcyBwcmVwYXJlcyBmb3IgdGhlIGZjb2UgdHJhbnNwb3J0IGxheWVyCiAgKgogICogUmV0dXJuczogbm9uZQotICoqLworICovCiBpbnQgX19pbml0IGZjb2VfdHJhbnNwb3J0X2luaXQodm9pZCkKIHsKIAlJTklUX0xJU1RfSEVBRCgmZmNvZV90cmFuc3BvcnRzKTsKQEAgLTQyNCwxMiArNDIwLDEzIEBACiB9CiAKIC8qKgotICogZmNvZV90cmFuc3BvcnRfZXhpdCAtIGNsZWFucyB1cCB0aGUgZmNvZSB0cmFuc3BvcnQgbGF5ZXIKKyAqIGZjb2VfdHJhbnNwb3J0X2V4aXQoKSAtIENsZWFucyB1cCB0aGUgZmNvZSB0cmFuc3BvcnQgbGF5ZXIKKyAqCiAgKiBUaGlzIGNsZWFucyB1cCB0aGUgZmNvZSB0cmFuc3BvcnQgbGF5ZXIuIHJlbW92aW5nIGFueSB0cmFuc3BvcnQgb24gdGhlIGxpc3QsCiAgKiBub3RlIHRoYXQgdGhlIHRyYW5zcG9ydCBkZXN0cm95IGZ1bmMgaXMgbm90IGNhbGxlZCBoZXJlLgogICoKICAqIFJldHVybnM6IG5vbmUKLSAqKi8KKyAqLwogaW50IF9fZXhpdCBmY29lX3RyYW5zcG9ydF9leGl0KHZvaWQpCiB7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0LCAqdG1wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9zdy5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9zdy5jCmluZGV4IGRjNGNkNWUuLmRhMjEwZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2Vfc3cuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3N3LmMKQEAgLTEwNCwxOSArMTA0LDE5IEBACiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAogfTsKIAotLyoKLSAqIGZjb2Vfc3dfbHBvcnRfY29uZmlnIC0gc2V0cyB1cCB0aGUgZmNfbHBvcnQKKy8qKgorICogZmNvZV9zd19scG9ydF9jb25maWcoKSAtIHNldHMgdXAgdGhlIGZjX2xwb3J0CiAgKiBAbHA6IHB0ciB0byB0aGUgZmNfbHBvcnQKICAqIEBzaG9zdDogcHRyIHRvIHRoZSBwYXJlbnQgc2NzaSBob3N0CiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoKICAqLwogc3RhdGljIGludCBmY29lX3N3X2xwb3J0X2NvbmZpZyhzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewogCWludCBpID0gMDsKIAotCWxwLT5saW5rX3N0YXR1cyA9IDA7CisJbHAtPmxpbmtfdXAgPSAwOworCWxwLT5xZnVsbCA9IDA7CiAJbHAtPm1heF9yZXRyeV9jb3VudCA9IDM7CiAJbHAtPmVfZF90b3YgPSAyICogMTAwMDsJLyogRkMtRlMgZGVmYXVsdCAqLwogCWxwLT5yX2FfdG92ID0gMiAqIDIgKiAxMDAwOwpAQCAtMTM2LDE2ICsxMzYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGZjb2Vfc3dfbmV0ZGV2X2NvbmZpZyAtIHNldHMgdXAgZmNvZV9zb2Z0YyBmb3IgbHBvcnQgYW5kIG5ldHdvcmsKLSAqIHJlbGF0ZWQgcHJvcGVydGllcworLyoqCisgKiBmY29lX3N3X25ldGRldl9jb25maWcoKSAtIFNldCB1cCBuZXRkZXYgZm9yIFNXIEZDb0UKICAqIEBscCA6IHB0ciB0byB0aGUgZmNfbHBvcnQKICAqIEBuZXRkZXYgOiBwdHIgdG8gdGhlIGFzc29jaWF0ZWQgbmV0ZGV2aWNlIHN0cnVjdAogICoKICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGZjb2Vfc3dfbHBvcnRfY29uZmlnKCkgYXMgaXQgd2lsbCB1c2UgbHBvcnQgbXV0ZXgKICAqCiAgKiBSZXR1cm5zIDogMCBmb3Igc3VjY2VzcwotICoKICAqLwogc3RhdGljIGludCBmY29lX3N3X25ldGRldl9jb25maWcoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTE4MSw5ICsxNzksOCBAQAogCWlmIChmY19zZXRfbWZzKGxwLCBtZnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxwLT5saW5rX3N0YXR1cyA9IH5GQ19QQVVTRSAmIH5GQ19MSU5LX1VQOwogCWlmICghZmNvZV9saW5rX29rKGxwKSkKLQkJbHAtPmxpbmtfc3RhdHVzIHw9IEZDX0xJTktfVVA7CisJCWxwLT5saW5rX3VwID0gMTsKIAogCS8qIG9mZmxvYWQgZmVhdHVyZXMgc3VwcG9ydCAqLwogCWlmIChmYy0+cmVhbF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykKQEAgLTE5MSw2ICsxODgsNyBAQAogCiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlKTsKKwlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlX2FjdGl2ZSA9IDA7CiAKIAkvKiBzZXR1cCBTb3VyY2UgTWFjIEFkZHJlc3MgKi8KIAltZW1jcHkoZmMtPmN0bF9zcmNfYWRkciwgZmMtPnJlYWxfZGV2LT5kZXZfYWRkciwKQEAgLTIyNCwxNiArMjIyLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBmY29lX3N3X3Nob3N0X2NvbmZpZyAtIHNldHMgdXAgZmNfbHBvcnQtPmhvc3QKKy8qKgorICogZmNvZV9zd19zaG9zdF9jb25maWcoKSAtIFNldHMgdXAgZmNfbHBvcnQtPmhvc3QKICAqIEBscCA6IHB0ciB0byB0aGUgZmNfbHBvcnQKICAqIEBzaG9zdCA6IHB0ciB0byB0aGUgYXNzb2NpYXRlZCBzY3NpIGhvc3QKICAqIEBkZXYgOiBkZXZpY2UgYXNzb2NpYXRlZCB0byBzY3NpIGhvc3QKICAqCi0gKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBmY29lX3N3X2xwb3J0X2NvbmZpZykgYW5kIGZjb2Vfc3dfbmV0ZGV2X2NvbmZpZygpCisgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBmY29lX3N3X2xwb3J0X2NvbmZpZygpIGFuZCBmY29lX3N3X25ldGRldl9jb25maWcoKQogICoKICAqIFJldHVybnMgOiAwIGZvciBzdWNjZXNzCi0gKgogICovCiBzdGF0aWMgaW50IGZjb2Vfc3dfc2hvc3RfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTI2MSw4ICsyNTgsOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogZmNvZV9zd19lbV9jb25maWcgLSBhbGxvY2F0ZXMgZW0gZm9yIHRoaXMgbHBvcnQKKy8qKgorICogZmNvZV9zd19lbV9jb25maWcoKSAtIGFsbG9jYXRlcyBlbSBmb3IgdGhpcyBscG9ydAogICogQGxwOiB0aGUgcG9ydCB0aGF0IGVtIGlzIHRvIGFsbG9jYXRlZCBmb3IKICAqCiAgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzCkBAIC0yNzksOCArMjc2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGZjb2Vfc3dfZGVzdHJveSAtIEZDb0Ugc29mdHdhcmUgSEJBIHRlYXItZG93biBmdW5jdGlvbgorLyoqCisgKiBmY29lX3N3X2Rlc3Ryb3koKSAtIEZDb0Ugc29mdHdhcmUgSEJBIHRlYXItZG93biBmdW5jdGlvbgogICogQG5ldGRldjogcHRyIHRvIHRoZSBhc3NvY2lhdGVkIG5ldF9kZXZpY2UKICAqCiAgKiBSZXR1cm5zOiAwIGlmIGxpbmsgaXMgT0sgZm9yIHVzZSBieSBGQ29FLgpAQCAtMzAxLDcgKzI5OCw3IEBACiAJaWYgKCFscCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlmYyA9IGZjb2Vfc29mdGMobHApOworCWZjID0gbHBvcnRfcHJpdihscCk7CiAKIAkvKiBMb2dvdXQgb2YgdGhlIGZhYnJpYyAqLwogCWZjX2ZhYnJpY19sb2dvZmYobHApOwpAQCAtMzUzLDggKzM1MCw4IEBACiAJLmZyYW1lX3NlbmQgPSBmY29lX3htaXQsCiB9OwogCi0vKgotICogZmNvZV9zd19jcmVhdGUgLSB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGZjb2UgaW50ZXJmYWNlCisvKioKKyAqIGZjb2Vfc3dfY3JlYXRlKCkgLSB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGZjb2UgaW50ZXJmYWNlCiAgKiBAbmV0ZGV2OiBwb2ludGVyIHRoZSBhc3NvY2lhdGVkIG5ldGRldmljZQogICoKICAqIENyZWF0ZXMgZmNfbHBvcnQgc3RydWN0IGFuZCBzY3NpX2hvc3QgZm9yIGxwb3J0LCBjb25maWd1cmVzIGxwb3J0CkBAIC00NDAsOCArNDM3LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qCi0gKiBmY29lX3N3X21hdGNoIC0gdGhlIGZjb2Ugc3cgdHJhbnNwb3J0IG1hdGNoIGZ1bmN0aW9uCisvKioKKyAqIGZjb2Vfc3dfbWF0Y2goKSAtIFRoZSBGQ29FIFNXIHRyYW5zcG9ydCBtYXRjaCBmdW5jdGlvbgogICoKICAqIFJldHVybnMgOiBmYWxzZSBhbHdheXMKICAqLwpAQCAtNDYxLDggKzQ1OCw4IEBACiAJLmRldmljZSA9IDB4ZmZmZiwKIH07CiAKLS8qCi0gKiBmY29lX3N3X2luaXQgLSByZWdpc3RlcnMgZmNvZV9zd190cmFuc3BvcnQKKy8qKgorICogZmNvZV9zd19pbml0KCkgLSBSZWdpc3RlcnMgZmNvZV9zd190cmFuc3BvcnQKICAqCiAgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzCiAgKi8KQEAgLTQ3MSwxNyArNDY4LDIyIEBACiAJLyogYXR0YWNoIHRvIHNjc2kgdHJhbnNwb3J0ICovCiAJc2NzaV90cmFuc3BvcnRfZmNvZV9zdyA9CiAJCWZjX2F0dGFjaF90cmFuc3BvcnQoJmZjb2Vfc3dfdHJhbnNwb3J0X2Z1bmN0aW9uKTsKKwogCWlmICghc2NzaV90cmFuc3BvcnRfZmNvZV9zdykgewogCQlwcmludGsoS0VSTl9FUlIgImZjb2Vfc3dfaW5pdDpmY19hdHRhY2hfdHJhbnNwb3J0KCkgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisJbXV0ZXhfaW5pdCgmZmNvZV9zd190cmFuc3BvcnQuZGV2bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmZjb2Vfc3dfdHJhbnNwb3J0LmRldmxpc3QpOworCiAJLyogcmVnaXN0ZXIgc3cgdHJhbnNwb3J0ICovCiAJZmNvZV90cmFuc3BvcnRfcmVnaXN0ZXIoJmZjb2Vfc3dfdHJhbnNwb3J0KTsKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGZjb2Vfc3dfZXhpdCAtIHVucmVnaXN0ZXJzIGZjb2Vfc3dfdHJhbnNwb3J0CisvKioKKyAqIGZjb2Vfc3dfZXhpdCgpIC0gVW5yZWdpc3RlcnMgZmNvZV9zd190cmFuc3BvcnQKICAqCiAgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYwppbmRleCBlNDE5ZjQ4Li41NTQ4YmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCkBAIC00OSw2ICs0OSw3IEBACiBzdGF0aWMgaW50IGRlYnVnX2Zjb2U7CiAKICNkZWZpbmUgRkNPRV9NQVhfUVVFVUVfREVQVEggIDI1NgorI2RlZmluZSBGQ09FX0xPV19RVUVVRV9ERVBUSCAgMzIKIAogLyogZGVzdGluYXRpb24gYWRkcmVzcyBtb2RlICovCiAjZGVmaW5lIEZDT0VfR1dfQUREUl9NT0RFCSAgICAweDAwCkBAIC02OSw4ICs3MCw2IEBACiAKIC8qIEZ1bmN0aW9uIFByb3RvdHllcyAqLwogc3RhdGljIGludCBmY29lX2NoZWNrX3dhaXRfcXVldWUoc3RydWN0IGZjX2xwb3J0ICopOwotc3RhdGljIHZvaWQgZmNvZV9pbnNlcnRfd2FpdF9xdWV1ZV9oZWFkKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKLXN0YXRpYyB2b2lkIGZjb2VfaW5zZXJ0X3dhaXRfcXVldWUoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIHZvaWQgZmNvZV9yZWN2X2Zsb2dpKHN0cnVjdCBmY29lX3NvZnRjICosIHN0cnVjdCBmY19mcmFtZSAqLCB1OCAqKTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyBpbnQgZmNvZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVsb25nLCB2b2lkICopOwpAQCAtOTEsMTMgKzkwLDEzIEBACiB9OwogCiAvKioKLSAqIGZjb2VfY3JlYXRlX3BlcmNwdV9kYXRhIC0gY3JlYXRlcyB0aGUgYXNzb2NpYXRlZCBjcHUgZGF0YQorICogZmNvZV9jcmVhdGVfcGVyY3B1X2RhdGEoKSAtIGNyZWF0ZXMgdGhlIGFzc29jaWF0ZWQgY3B1IGRhdGEKICAqIEBjcHU6IGluZGV4IGZvciB0aGUgY3B1IHdoZXJlIGZjb2UgY3B1IGRhdGEgd2lsbCBiZSBjcmVhdGVkCiAgKgogICogY3JlYXRlIHBlcmNwdSBzdGF0cyBibG9jaywgZnJvbSBjcHUgYWRkIG5vdGlmaWVyCiAgKgogICogUmV0dXJuczogbm9uZQotICoqLworICovCiBzdGF0aWMgdm9pZCBmY29lX2NyZWF0ZV9wZXJjcHVfZGF0YShpbnQgY3B1KQogewogCXN0cnVjdCBmY19scG9ydCAqbHA7CkBAIC0xMTUsMTMgKzExNCwxMyBAQAogfQogCiAvKioKLSAqIGZjb2VfZGVzdHJveV9wZXJjcHVfZGF0YSAtIGRlc3Ryb3lzIHRoZSBhc3NvY2lhdGVkIGNwdSBkYXRhCisgKiBmY29lX2Rlc3Ryb3lfcGVyY3B1X2RhdGEoKSAtIGRlc3Ryb3lzIHRoZSBhc3NvY2lhdGVkIGNwdSBkYXRhCiAgKiBAY3B1OiBpbmRleCBmb3IgdGhlIGNwdSB3aGVyZSBmY29lIGNwdSBkYXRhIHdpbGwgZGVzdHJveWVkCiAgKgogICogZGVzdHJveSBwZXJjcHUgc3RhdHMgYmxvY2sgY2FsbGVkIGJ5IGNwdSBhZGQvcmVtb3ZlIG5vdGlmaWVyCiAgKgogICogUmV0dW5zOiBub25lCi0gKiovCisgKi8KIHN0YXRpYyB2b2lkIGZjb2VfZGVzdHJveV9wZXJjcHVfZGF0YShpbnQgY3B1KQogewogCXN0cnVjdCBmY19scG9ydCAqbHA7CkBAIC0xMzcsNyArMTM2LDcgQEAKIH0KIAogLyoqCi0gKiBmY29lX2NwdV9jYWxsYmFjayAtIGZjb2UgY3B1IGhvdHBsdWcgZXZlbnQgY2FsbGJhY2sKKyAqIGZjb2VfY3B1X2NhbGxiYWNrKCkgLSBmY29lIGNwdSBob3RwbHVnIGV2ZW50IGNhbGxiYWNrCiAgKiBAbmZiOiBjYWxsYmFjayBkYXRhIGJsb2NrCiAgKiBAYWN0aW9uOiBldmVudCB0cmlnZ2VyaW5nIHRoZSBjYWxsYmFjawogICogQGhjcHU6IGluZGV4IGZvciB0aGUgY3B1IG9mIHRoaXMgZXZlbnQKQEAgLTE0NSw3ICsxNDQsNyBAQAogICogdGhpcyBjcmVhdGVzIG9yIGRlc3Ryb3lzIHBlciBjcHUgZGF0YSBmb3IgZmNvZQogICoKICAqIFJldHVybnMgTk9USUZZX09LIGFsd2F5cy4KLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCQkgICAgIHZvaWQgKmhjcHUpCiB7CkBAIC0xNjYsNyArMTY1LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogLyoqCi0gKiBmY29lX3JjdiAtIHRoaXMgaXMgdGhlIGZjb2UgcmVjZWl2ZSBmdW5jdGlvbiBjYWxsZWQgYnkgTkVUX1JYX1NPRlRJUlEKKyAqIGZjb2VfcmN2KCkgLSB0aGlzIGlzIHRoZSBmY29lIHJlY2VpdmUgZnVuY3Rpb24gY2FsbGVkIGJ5IE5FVF9SWF9TT0ZUSVJRCiAgKiBAc2tiOiB0aGUgcmVjZWl2ZSBza2IKICAqIEBkZXY6IGFzc29jaWF0ZWQgbmV0IGRldmljZQogICogQHB0eXBlOiBjb250ZXh0CkBAIC0xNzUsNyArMTc0LDcgQEAKICAqIHRoaXMgZnVuY3Rpb24gd2lsbCByZWNlaXZlIHRoZSBwYWNrZXQgYW5kIGJ1aWxkIGZjIGZyYW1lIGFuZCBwYXNzIGl0IHVwCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBpbnQgZmNvZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpvbGRkZXYpCiB7CkBAIC0yNjUsMTEgKzI2NCwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV9yY3YpOwogCiAvKioKLSAqIGZjb2Vfc3RhcnRfaW8gLSBwYXNzIHRvIG5ldGRldiB0byBzdGFydCB4bWl0IGZvciBmY29lCisgKiBmY29lX3N0YXJ0X2lvKCkgLSBwYXNzIHRvIG5ldGRldiB0byBzdGFydCB4bWl0IGZvciBmY29lCiAgKiBAc2tiOiB0aGUgc2tiIHRvIGJlIHhtaXR0ZWQKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZjb2Vfc3RhcnRfaW8oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmM7CkBAIC0yODMsMTIgKzI4MiwxMiBAQAogfQogCiAvKioKLSAqIGZjb2VfZ2V0X3BhZ2VkX2NyY19lb2YgLSBpbiBjYXNlIHdlIG5lZWQgYWxsb2MgYSBwYWdlIGZvciBjcmNfZW9mCisgKiBmY29lX2dldF9wYWdlZF9jcmNfZW9mKCkgLSBpbiBjYXNlIHdlIG5lZWQgYWxsb2MgYSBwYWdlIGZvciBjcmNfZW9mCiAgKiBAc2tiOiB0aGUgc2tiIHRvIGJlIHhtaXR0ZWQKICAqIEB0bGVuOiB0b3RhbCBsZW4KICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgZmNvZV9nZXRfcGFnZWRfY3JjX2VvZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbikKIHsKIAlzdHJ1Y3QgZmNvZV9wZXJjcHVfcyAqZnBzOwpAQCAtMzI2LDEzICszMjUsMTIgQEAKIH0KIAogLyoqCi0gKiBmY29lX2ZjX2NyYyAtIGNhbGN1bGF0ZXMgRkMgQ1JDIGluIHRoaXMgZmNvZSBza2IKKyAqIGZjb2VfZmNfY3JjKCkgLSBjYWxjdWxhdGVzIEZDIENSQyBpbiB0aGlzIGZjb2Ugc2tiCiAgKiBAZnA6IHRoZSBmY19mcmFtZSBjb250YWluZyBkYXRhIHRvIGJlIGNoZWNrc3VtbWVkCiAgKgogICogVGhpcyB1c2VzIGNyYzMyKCkgdG8gY2FsY3VsYXRlIHRoZSBjcmMgZm9yIGZjIGZyYW1lCiAgKiBSZXR1cm4gICA6IDMyIGJpdCBjcmMKLSAqCi0gKiovCisgKi8KIHUzMiBmY29lX2ZjX2NyYyhzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBmcF9za2IoZnApOwpAQCAtMzYzLDEzICszNjEsMTIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfZmNfY3JjKTsKIAogLyoqCi0gKiBmY29lX3htaXQgLSBGQ29FIGZyYW1lIHRyYW5zbWl0IGZ1bmN0aW9uCisgKiBmY29lX3htaXQoKSAtIEZDb0UgZnJhbWUgdHJhbnNtaXQgZnVuY3Rpb24KICAqIEBscDoJdGhlIGFzc29jaWF0ZWQgbG9jYWwgcG9ydAogICogQGZwOiB0aGUgZmNfZnJhbWUgdG8gYmUgdHJhbnNtaXR0ZWQKICAqCiAgKiBSZXR1cm4gICA6IDAgZm9yIHN1Y2Nlc3MKLSAqCi0gKiovCisgKi8KIGludCBmY29lX3htaXQoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKIAlpbnQgd2xlbiwgcmMgPSAwOwpAQCAtMzg5LDcgKzM4Niw3IEBACiAKIAlXQVJOX09OKChmcl9sZW4oZnApICUgc2l6ZW9mKHUzMikpICE9IDApOwogCi0JZmMgPSBmY29lX3NvZnRjKGxwKTsKKwlmYyA9IGxwb3J0X3ByaXYobHApOwogCS8qCiAJICogaWYgaXQgaXMgYSBmbG9naSB0aGVuIHdlIG5lZWQgdG8gbGVhcm4gZ3ctYWRkcgogCSAqIGFuZCBteSBvd24gZmNpZApAQCAtNDM5LDcgKzQzNiw3IEBACiAJaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkgewogCQlza2JfZnJhZ190ICpmcmFnOwogCQlpZiAoZmNvZV9nZXRfcGFnZWRfY3JjX2VvZihza2IsIHRsZW4pKSB7Ci0JCQlrZnJlZShza2IpOworCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAtIDFdOwpAQCAtNTAyLDIxICs0OTksMjIgQEAKIAkJcmMgPSBmY29lX3N0YXJ0X2lvKHNrYik7CiAKIAlpZiAocmMpIHsKLQkJZmNvZV9pbnNlcnRfd2FpdF9xdWV1ZShscCwgc2tiKTsKKwkJc3Bpbl9sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCQlfX3NrYl9xdWV1ZV90YWlsKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOworCQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKIAkJaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiA+IEZDT0VfTUFYX1FVRVVFX0RFUFRIKQotCQkJZmNfcGF1c2UobHApOworCQkJbHAtPnFmdWxsID0gMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfeG1pdCk7CiAKLS8qCi0gKiBmY29lX3BlcmNwdV9yZWNlaXZlX3RocmVhZCAtIHJlY3YgdGhyZWFkIHBlciBjcHUKKy8qKgorICogZmNvZV9wZXJjcHVfcmVjZWl2ZV90aHJlYWQoKSAtIHJlY3YgdGhyZWFkIHBlciBjcHUKICAqIEBhcmc6IHB0ciB0byB0aGUgZmNvZSBwZXIgY3B1IHN0cnVjdAogICoKICAqIFJldHVybjogMCBmb3Igc3VjY2VzcwotICoKICAqLwogaW50IGZjb2VfcGVyY3B1X3JlY2VpdmVfdGhyZWFkKHZvaWQgKmFyZykKIHsKQEAgLTUzMyw3ICs1MzEsNyBAQAogCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKIAlzdHJ1Y3QgZmNvZV9oZHIgKmhwOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAxOSk7CisJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIApAQCAtNjU4LDcgKzY1Niw3IEBACiB9CiAKIC8qKgotICogZmNvZV9yZWN2X2Zsb2dpIC0gZmxvZ2kgcmVjZWl2ZSBmdW5jdGlvbgorICogZmNvZV9yZWN2X2Zsb2dpKCkgLSBmbG9naSByZWNlaXZlIGZ1bmN0aW9uCiAgKiBAZmM6IGFzc29jaWF0ZWQgZmNvZV9zb2Z0YwogICogQGZwOiB0aGUgcmVjaWV2ZWQgZnJhbWUKICAqIEBzYTogdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoaXMgZmxvZ2kKQEAgLTY2Nyw3ICs2NjUsNyBAQAogICogbWFjIGFkZHJlc3MgZm9yIHRoZSBpbml0aWF0b3IsIGVpdGVociBPVUkgYmFzZWQgb3IgR1cgYmFzZWQuCiAgKgogICogUmV0dXJuczogbm9uZQotICoqLworICovCiBzdGF0aWMgdm9pZCBmY29lX3JlY3ZfZmxvZ2koc3RydWN0IGZjb2Vfc29mdGMgKmZjLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLCB1OCAqc2EpCiB7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CkBAIC03MTUsMzIgKzcxMywyMyBAQAogfQogCiAvKioKLSAqIGZjb2Vfd2F0Y2hkb2cgLSBmY29lIHRpbWVyIGNhbGxiYWNrCisgKiBmY29lX3dhdGNoZG9nKCkgLSBmY29lIHRpbWVyIGNhbGxiYWNrCiAgKiBAdnA6CiAgKgotICogVGhpcyBjaGVja3MgdGhlIHBlbmRpbmcgcXVldWUgbGVuZ3RoIGZvciBmY29lIGFuZCBwdXQgZmNvZSB0byBiZSBwYXVzZWQgc3RhdGUKKyAqIFRoaXMgY2hlY2tzIHRoZSBwZW5kaW5nIHF1ZXVlIGxlbmd0aCBmb3IgZmNvZSBhbmQgc2V0IGxwb3J0IHFmdWxsCiAgKiBpZiB0aGUgRkNPRV9NQVhfUVVFVUVfREVQVEggaXMgcmVhY2hlZC4gVGhpcyBpcyBkb25lIGZvciBhbGwgZmNfbHBvcnQgb24gdGhlCiAgKiBmY29lX2hvc3RsaXN0LgogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogdm9pZCBmY29lX3dhdGNoZG9nKHVsb25nIHZwKQogewotCXN0cnVjdCBmY19scG9ydCAqbHA7CiAJc3RydWN0IGZjb2Vfc29mdGMgKmZjOwotCWludCBwYXVzZWQgPSAwOwogCiAJcmVhZF9sb2NrKCZmY29lX2hvc3RsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmMsICZmY29lX2hvc3RsaXN0LCBsaXN0KSB7Ci0JCWxwID0gZmMtPmxwOwotCQlpZiAobHApIHsKLQkJCWlmIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gPiBGQ09FX01BWF9RVUVVRV9ERVBUSCkKLQkJCQlwYXVzZWQgPSAxOwotCQkJaWYgKGZjb2VfY2hlY2tfd2FpdF9xdWV1ZShscCkgPAkgRkNPRV9NQVhfUVVFVUVfREVQVEgpIHsKLQkJCQlpZiAocGF1c2VkKQotCQkJCQlmY191bnBhdXNlKGxwKTsKLQkJCX0KLQkJfQorCQlpZiAoZmMtPmxwKQorCQkJZmNvZV9jaGVja193YWl0X3F1ZXVlKGZjLT5scCk7CiAJfQogCXJlYWRfdW5sb2NrKCZmY29lX2hvc3RsaXN0X2xvY2spOwogCkBAIC03NTAsOTYgKzczOSw2NCBAQAogCiAKIC8qKgotICogZmNvZV9jaGVja193YWl0X3F1ZXVlIC0gcHV0IHRoZSBza2IgaW50byBmY29lIHBlbmRpbmcgeG1pdCBxdWV1ZQorICogZmNvZV9jaGVja193YWl0X3F1ZXVlKCkgLSBwdXQgdGhlIHNrYiBpbnRvIGZjb2UgcGVuZGluZyB4bWl0IHF1ZXVlCiAgKiBAbHA6IHRoZSBmY19wb3J0IGZvciB0aGlzIHNrYgogICogQHNrYjogdGhlIGFzc29jaWF0ZWQgc2tiIHRvIGJlIHhtaXR0ZWQKICAqCiAgKiBUaGlzIGVtcHRpZXMgdGhlIHdhaXRfcXVldWUsIGRlcXVldWUgdGhlIGhlYWQgb2YgdGhlIHdhaXRfcXVldWUgcXVldWUKICAqIGFuZCBjYWxscyBmY29lX3N0YXJ0X2lvKCkgZm9yIGVhY2ggcGFja2V0LCBpZiBhbGwgc2tiIGhhdmUgYmVlbgotICogdHJhbnNtaXR0ZWQsIHJldHVybiAwIGlmIGEgZXJyb3Igb2NjdXJzLCB0aGVuIHJlc3RvcmUgd2FpdF9xdWV1ZSBhbmQKLSAqIHRyeSBhZ2FpbiBsYXRlci4KKyAqIHRyYW5zbWl0dGVkLCByZXR1cm4gcWxlbiBvciAtMSBpZiBhIGVycm9yIG9jY3VycywgdGhlbiByZXN0b3JlCisgKiB3YWl0X3F1ZXVlIGFuZCAgdHJ5IGFnYWluIGxhdGVyLgogICoKICAqIFRoZSB3YWl0X3F1ZXVlIGlzIHVzZWQgd2hlbiB0aGUgc2tiIHRyYW5zbWl0IGZhaWxzLiBza2Igd2lsbCBnbwogICogaW4gdGhlIHdhaXRfcXVldWUgd2hpY2ggd2lsbCBiZSBlbXB0aWVkIGJ5IHRoZSB0aW1lIGZ1bmN0aW9uIE9SCiAgKiBieSB0aGUgbmV4dCBza2IgdHJhbnNtaXQuCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBzdGF0aWMgaW50IGZjb2VfY2hlY2tfd2FpdF9xdWV1ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewotCWludCByYywgdW5wYXVzZSA9IDA7Ci0JaW50IHBhdXNlZCA9IDA7CisJc3RydWN0IGZjb2Vfc29mdGMgKmZjID0gbHBvcnRfcHJpdihscCk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJaW50IHJjID0gLTE7CiAKLQlmYyA9IGZjb2Vfc29mdGMobHApOwogCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUpCisJCWdvdG8gb3V0OworCWZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMTsKIAotCS8qCi0JICogaXMgdGhpcyBpbnRlcmZhY2UgcGF1c2VkPwotCSAqLwotCWlmIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gPiBGQ09FX01BWF9RVUVVRV9ERVBUSCkKLQkJcGF1c2VkID0gMTsKLQlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuKSB7Ci0JCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSkpICE9IE5VTEwpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwotCQkJcmMgPSBmY29lX3N0YXJ0X2lvKHNrYik7Ci0JCQlpZiAocmMpIHsKLQkJCQlmY29lX2luc2VydF93YWl0X3F1ZXVlX2hlYWQobHAsIHNrYik7Ci0JCQkJcmV0dXJuIHJjOwotCQkJfQotCQkJc3Bpbl9sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCXdoaWxlIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4pIHsKKwkJLyoga2VlcCBxbGVuID4gMCB1bnRpbCBmY29lX3N0YXJ0X2lvIHN1Y2NlZWRzICovCisJCWZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbisrOworCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlKTsKKworCQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwkJcmMgPSBmY29lX3N0YXJ0X2lvKHNrYik7CisJCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKworCQlpZiAocmMpIHsKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUsIHNrYik7CisJCQkvKiB1bmRvIHRlbXBvcmFyeSBpbmNyZW1lbnQgYWJvdmUgKi8KKwkJCWZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbi0tOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiA8IEZDT0VfTUFYX1FVRVVFX0RFUFRIKQotCQkJdW5wYXVzZSA9IDE7CisJCS8qIHVuZG8gdGVtcG9yYXJ5IGluY3JlbWVudCBhYm92ZSAqLworCQlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4tLTsKIAl9CisKKwlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuIDwgRkNPRV9MT1dfUVVFVUVfREVQVEgpCisJCWxwLT5xZnVsbCA9IDA7CisJZmMtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUgPSAwOworCXJjID0gZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuOworb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwotCWlmICgodW5wYXVzZSkgJiYgKHBhdXNlZCkpCi0JCWZjX3VucGF1c2UobHApOwotCXJldHVybiBmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW47CisJcmV0dXJuIHJjOwogfQogCiAvKioKLSAqIGZjb2VfaW5zZXJ0X3dhaXRfcXVldWVfaGVhZCAtIHB1dHMgc2tiIHRvIGZjb2UgcGVuZGluZyBxdWV1ZSBoZWFkCi0gKiBAbHA6IHRoZSBmY19wb3J0IGZvciB0aGlzIHNrYgotICogQHNrYjogdGhlIGFzc29jaWF0ZWQgc2tiIHRvIGJlIHhtaXR0ZWQKLSAqCi0gKiBSZXR1cm5zOiBub25lCi0gKiovCi1zdGF0aWMgdm9pZCBmY29lX2luc2VydF93YWl0X3F1ZXVlX2hlYWQoc3RydWN0IGZjX2xwb3J0ICpscCwKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7Ci0KLQlmYyA9IGZjb2Vfc29mdGMobHApOwotCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKLQlfX3NrYl9xdWV1ZV9oZWFkKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOwotCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwotfQotCi0vKioKLSAqIGZjb2VfaW5zZXJ0X3dhaXRfcXVldWUgLSBwdXQgdGhlIHNrYiBpbnRvIGZjb2UgcGVuZGluZyBxdWV1ZSB0YWlsCi0gKiBAbHA6IHRoZSBmY19wb3J0IGZvciB0aGlzIHNrYgotICogQHNrYjogdGhlIGFzc29jaWF0ZWQgc2tiIHRvIGJlIHhtaXR0ZWQKLSAqCi0gKiBSZXR1cm5zOiBub25lCi0gKiovCi1zdGF0aWMgdm9pZCBmY29lX2luc2VydF93YWl0X3F1ZXVlKHN0cnVjdCBmY19scG9ydCAqbHAsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7Ci0KLQlmYyA9IGZjb2Vfc29mdGMobHApOwotCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKLQlfX3NrYl9xdWV1ZV90YWlsKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOwotCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwotfQotCi0vKioKLSAqIGZjb2VfZGV2X3NldHVwIC0gc2V0dXAgbGluayBjaGFuZ2Ugbm90aWZpY2F0aW9uIGludGVyZmFjZQotICoKLSAqKi8KLXN0YXRpYyB2b2lkIGZjb2VfZGV2X3NldHVwKHZvaWQpCisgKiBmY29lX2Rldl9zZXR1cCgpIC0gc2V0dXAgbGluayBjaGFuZ2Ugbm90aWZpY2F0aW9uIGludGVyZmFjZQorICovCitzdGF0aWMgdm9pZCBmY29lX2Rldl9zZXR1cCgpCiB7CiAJLyoKIAkgKiBoZXJlIHNldHVwIGEgaW50ZXJmYWNlIHNwZWNpZmljIHdkIHRpbWUgdG8KQEAgLTg0OSwxNSArODA2LDE1IEBACiB9CiAKIC8qKgotICogZmNvZV9kZXZfc2V0dXAgLSBjbGVhbnVwIGxpbmsgY2hhbmdlIG5vdGlmaWNhdGlvbiBpbnRlcmZhY2UKLSAqKi8KKyAqIGZjb2VfZGV2X3NldHVwKCkgLSBjbGVhbnVwIGxpbmsgY2hhbmdlIG5vdGlmaWNhdGlvbiBpbnRlcmZhY2UKKyAqLwogc3RhdGljIHZvaWQgZmNvZV9kZXZfY2xlYW51cCh2b2lkKQogewogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZmY29lX25vdGlmaWVyKTsKIH0KIAogLyoqCi0gKiBmY29lX2RldmljZV9ub3RpZmljYXRpb24gLSBuZXRkZXYgZXZlbnQgbm90aWZpY2F0aW9uIGNhbGxiYWNrCisgKiBmY29lX2RldmljZV9ub3RpZmljYXRpb24oKSAtIG5ldGRldiBldmVudCBub3RpZmljYXRpb24gY2FsbGJhY2sKICAqIEBub3RpZmllcjogY29udGV4dCBvZiB0aGUgbm90aWZpY2F0aW9uCiAgKiBAZXZlbnQ6IHR5cGUgb2YgZXZlbnQKICAqIEBwdHI6IGZpeGVkIGFycmF5IGZvciBvdXRwdXQgcGFyc2VkIGlmbmFtZQpAQCAtODY1LDcgKzgyMiw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgZXRoZXJuZXQgZHJpdmVyIGluIGNhc2Ugb2YgbGluayBjaGFuZ2UgZXZlbnQKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgZmNvZV9kZXZpY2Vfbm90aWZpY2F0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXIsCiAJCQkJICAgIHVsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CkBAIC04NzMsNyArODMwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSBwdHI7CiAJc3RydWN0IGZjb2Vfc29mdGMgKmZjOwogCXN0cnVjdCBmY29lX2Rldl9zdGF0cyAqc3RhdHM7Ci0JdTE2IG5ld19zdGF0dXM7CisJdTMyIG5ld19saW5rX3VwOwogCXUzMiBtZnM7CiAJaW50IHJjID0gTk9USUZZX09LOwogCkBAIC04OTAsMTcgKzg0NywxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQluZXdfc3RhdHVzID0gbHAtPmxpbmtfc3RhdHVzOworCW5ld19saW5rX3VwID0gbHAtPmxpbmtfdXA7CiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX0RPV046CiAJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKLQkJbmV3X3N0YXR1cyAmPSB+RkNfTElOS19VUDsKKwkJbmV3X2xpbmtfdXAgPSAwOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9VUDoKIAljYXNlIE5FVERFVl9DSEFOR0U6Ci0JCW5ld19zdGF0dXMgJj0gfkZDX0xJTktfVVA7Ci0JCWlmICghZmNvZV9saW5rX29rKGxwKSkKLQkJCW5ld19zdGF0dXMgfD0gRkNfTElOS19VUDsKKwkJbmV3X2xpbmtfdXAgPSAhZmNvZV9saW5rX29rKGxwKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgogCQltZnMgPSBmYy0+cmVhbF9kZXYtPm10dSAtCkBAIC05MDgsMTcgKzg2MywxNSBAQAogCQkJIHNpemVvZihzdHJ1Y3QgZmNvZV9jcmNfZW9mKSk7CiAJCWlmIChtZnMgPj0gRkNfTUlOX01BWF9GUkFNRSkKIAkJCWZjX3NldF9tZnMobHAsIG1mcyk7Ci0JCW5ld19zdGF0dXMgJj0gfkZDX0xJTktfVVA7Ci0JCWlmICghZmNvZV9saW5rX29rKGxwKSkKLQkJCW5ld19zdGF0dXMgfD0gRkNfTElOS19VUDsKKwkJbmV3X2xpbmtfdXAgPSAhZmNvZV9saW5rX29rKGxwKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfUkVHSVNURVI6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUZDX0RCRygidW5rbm93biBldmVudCAlbGQgY2FsbCIsIGV2ZW50KTsKIAl9Ci0JaWYgKGxwLT5saW5rX3N0YXR1cyAhPSBuZXdfc3RhdHVzKSB7Ci0JCWlmICgobmV3X3N0YXR1cyAmIEZDX0xJTktfVVApID09IEZDX0xJTktfVVApCisJaWYgKGxwLT5saW5rX3VwICE9IG5ld19saW5rX3VwKSB7CisJCWlmIChuZXdfbGlua191cCkKIAkJCWZjX2xpbmt1cChscCk7CiAJCWVsc2UgewogCQkJc3RhdHMgPSBscC0+ZGV2X3N0YXRzW3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC05MzMsMTIgKzg4NiwxMiBAQAogfQogCiAvKioKLSAqIGZjb2VfaWZfdG9fbmV0ZGV2IC0gcGFyc2UgYSBuYW1lIGJ1ZmZlciB0byBnZXQgbmV0ZGV2CisgKiBmY29lX2lmX3RvX25ldGRldigpIC0gcGFyc2UgYSBuYW1lIGJ1ZmZlciB0byBnZXQgbmV0ZGV2CiAgKiBAaWZuYW1lOiBmaXhlZCBhcnJheSBmb3Igb3V0cHV0IHBhcnNlZCBpZm5hbWUKICAqIEBidWZmZXI6IGluY29taW5nIGJ1ZmZlciB0byBiZSBjb3BpZWQKICAqCiAgKiBSZXR1cm5zOiBOVUxMIG9yIHB0ciB0byBuZXRkZWl2ZQotICoqLworICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmZjb2VfaWZfdG9fbmV0ZGV2KGNvbnN0IGNoYXIgKmJ1ZmZlcikKIHsKIAljaGFyICpjcDsKQEAgLTk1NSwxMyArOTA4LDEzIEBACiB9CiAKIC8qKgotICogZmNvZV9uZXRkZXZfdG9fbW9kdWxlX293bmVyIC0gZmluZHMgb3V0IHRoZSBuaWMgZHJpdmUgbW9kZHVsZSBvZiB0aGUgbmV0ZGV2CisgKiBmY29lX25ldGRldl90b19tb2R1bGVfb3duZXIoKSAtIGZpbmRzIG91dCB0aGUgbmljIGRyaXZlIG1vZGR1bGUgb2YgdGhlIG5ldGRldgogICogQG5ldGRldjogdGhlIHRhcmdldCBuZXRkZXYKICAqCiAgKiBSZXR1cm5zOiBwdHIgdG8gdGhlIHN0cnVjdCBtb2R1bGUsIE5VTEwgZm9yIGZhaWx1cmUKLSAqKi8KLXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpmY29lX25ldGRldl90b19tb2R1bGVfb3duZXIoCi0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKKyAqLworc3RhdGljIHN0cnVjdCBtb2R1bGUgKgorZmNvZV9uZXRkZXZfdG9fbW9kdWxlX293bmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCkBAIC05NzksMTIgKzkzMiwxNCBAQAogfQogCiAvKioKLSAqIGZjb2VfZXRoZHJ2X2dldCAtIGhvbGRzIHRoZSBuaWMgZHJpdmVyIG1vZHVsZSBieSAgdHJ5X21vZHVsZV9nZXQoKSBmb3IKLSAqIHRoZSBjb3JyZXNwb25kaW5nIG5ldGRldi4KKyAqIGZjb2VfZXRoZHJ2X2dldCgpIC0gSG9sZCB0aGUgRXRoZXJuZXQgZHJpdmVyCiAgKiBAbmV0ZGV2OiB0aGUgdGFyZ2V0IG5ldGRldgogICoKKyAqIEhvbGRzIHRoZSBFdGhlcm5ldCBkcml2ZXIgbW9kdWxlIGJ5IHRyeV9tb2R1bGVfZ2V0KCkgZm9yCisgKiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYuCisgKgogICogUmV0dXJuczogMCBmb3Igc3VjY3NzcwotICoqLworICovCiBzdGF0aWMgaW50IGZjb2VfZXRoZHJ2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwpAQCAtOTk5LDEyICs5NTQsMTQgQEAKIH0KIAogLyoqCi0gKiBmY29lX2V0aGRydl9nZXQgLSByZWxlYXNlcyB0aGUgbmljIGRyaXZlciBtb2R1bGUgYnkgbW9kdWxlX3B1dCBmb3IKLSAqIHRoZSBjb3JyZXNwb25kaW5nIG5ldGRldi4KKyAqIGZjb2VfZXRoZHJ2X3B1dCgpIC0gUmVsZWFzZSB0aGUgRXRoZXJuZXQgZHJpdmVyCiAgKiBAbmV0ZGV2OiB0aGUgdGFyZ2V0IG5ldGRldgogICoKKyAqIFJlbGVhc2VzIHRoZSBFdGhlcm5ldCBkcml2ZXIgbW9kdWxlIGJ5IG1vZHVsZV9wdXQgZm9yCisgKiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYuCisgKgogICogUmV0dXJuczogMCBmb3Igc3VjY3NzcwotICoqLworICovCiBzdGF0aWMgaW50IGZjb2VfZXRoZHJ2X3B1dChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwpAQCAtMTAyMCwxMiArOTc3LDEyIEBACiB9CiAKIC8qKgotICogZmNvZV9kZXN0cm95LSBoYW5kbGVzIHRoZSBkZXN0cm95IGZyb20gc3lzZnMKKyAqIGZjb2VfZGVzdHJveSgpIC0gaGFuZGxlcyB0aGUgZGVzdHJveSBmcm9tIHN5c2ZzCiAgKiBAYnVmZmVyOiBleHBjdGVkIHRvIGJlIGEgZXRoIGlmIG5hbWUKICAqIEBrcDogYXNzb2NpYXRlZCBrZXJuZWwgcGFyYW0KICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgZmNvZV9kZXN0cm95KGNvbnN0IGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CiAJaW50IHJjOwpAQCAtMTA1OCwxMiArMTAxNSwxMiBAQAogfQogCiAvKioKLSAqIGZjb2VfY3JlYXRlIC0gaGFuZGxlcyB0aGUgY3JlYXRlIGNhbGwgZnJvbSBzeXNmcworICogZmNvZV9jcmVhdGUoKSAtIEhhbmRsZXMgdGhlIGNyZWF0ZSBjYWxsIGZyb20gc3lzZnMKICAqIEBidWZmZXI6IGV4cGN0ZWQgdG8gYmUgYSBldGggaWYgbmFtZQogICogQGtwOiBhc3NvY2lhdGVkIGtlcm5lbCBwYXJhbQogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX2NyZWF0ZShjb25zdCBjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWludCByYzsKQEAgLTExMDQsOCArMTA2MSw4IEBACiBfX01PRFVMRV9QQVJNX1RZUEUoZGVzdHJveSwgInN0cmluZyIpOwogTU9EVUxFX1BBUk1fREVTQyhkZXN0cm95LCAiRGVzdHJveSBmY29lIHBvcnQiKTsKIAotLyoKLSAqIGZjb2VfbGlua19vayAtIGNoZWNrIGlmIGxpbmsgaXMgb2sgZm9yIHRoZSBmY19scG9ydAorLyoqCisgKiBmY29lX2xpbmtfb2soKSAtIENoZWNrIGlmIGxpbmsgaXMgb2sgZm9yIHRoZSBmY19scG9ydAogICogQGxwOiBwdHIgdG8gdGhlIGZjX2xwb3J0CiAgKgogICogQW55IHBlcm1hbmVudGx5LWRpc3F1YWxpZnlpbmcgY29uZGl0aW9ucyBoYXZlIGJlZW4gcHJldmlvdXNseSBjaGVja2VkLgpAQCAtMTEyMCw3ICsxMDc3LDcgQEAKICAqLwogaW50IGZjb2VfbGlua19vayhzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewotCXN0cnVjdCBmY29lX3NvZnRjICpmYyA9IGZjb2Vfc29mdGMobHApOworCXN0cnVjdCBmY29lX3NvZnRjICpmYyA9IGxwb3J0X3ByaXYobHApOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBmYy0+cmVhbF9kZXY7CiAJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQgPSB7IEVUSFRPT0xfR1NFVCB9OwogCWludCByYyA9IDA7CkBAIC0xMTQ5LDkgKzExMDYsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV9saW5rX29rKTsKIAotLyoKLSAqIGZjb2VfcGVyY3B1X2NsZWFuIC0gZnJlZXMgc2tiIG9mIHRoZSBjb3JyZXNwb25kaW5nIGxwb3J0IGZyb20gdGhlIHBlcgotICogY3B1IHF1ZXVlLgorLyoqCisgKiBmY29lX3BlcmNwdV9jbGVhbigpIC0gQ2xlYXIgdGhlIHBlbmRpbmcgc2ticyBmb3IgYW4gbHBvcnQKICAqIEBscDogdGhlIGZjX2xwb3J0CiAgKi8KIHZvaWQgZmNvZV9wZXJjcHVfY2xlYW4oc3RydWN0IGZjX2xwb3J0ICpscCkKQEAgLTExODUsMTEgKzExNDEsMTEgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfcGVyY3B1X2NsZWFuKTsKIAogLyoqCi0gKiBmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUgLSBkZXF1ZXVlIHNrYiBhbmQgZnJlZSBpdAorICogZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKCkgLSBEZXF1ZXVlIGEgc2tiIGFuZCBmcmVlIGl0CiAgKiBAbHA6IHRoZSBjb3JyZXNwb25kaW5nIGZjX2xwb3J0CiAgKgogICogUmV0dXJuczogbm9uZQotICoqLworICovCiB2b2lkIGZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewogCXN0cnVjdCBmY29lX3NvZnRjICAqZmMgPSBscG9ydF9wcml2KGxwKTsKQEAgLTEyMDYsMjEgKzExNjIsMjEgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZSk7CiAKIC8qKgotICogbGliZmNfaG9zdF9hbGxvYyAtIGFsbG9jYXRlIGEgU2NzaV9Ib3N0IHdpdGggcm9vbSBmb3IgdGhlIGZjX2xwb3J0CisgKiBsaWJmY19ob3N0X2FsbG9jKCkgLSBBbGxvY2F0ZSBhIFNjc2lfSG9zdCB3aXRoIHJvb20gZm9yIHRoZSBmY19scG9ydAogICogQHNodDogcHRyIHRvIHRoZSBzY3NpIGhvc3QgdGVtcGwKICAqIEBwcml2X3NpemU6IHNpemUgb2YgcHJpdmF0ZSBkYXRhIGFmdGVyIGZjX2xwb3J0CiAgKgogICogUmV0dXJuczogcHRyIHRvIFNjc2lfSG9zdAotICogVE9ETyAtIHRvIGxpYmZjPworICogVE9ETzogdG8gbGliZmM/CiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IFNjc2lfSG9zdCAqbGliZmNfaG9zdF9hbGxvYygKLQlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQsIGludCBwcml2X3NpemUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBTY3NpX0hvc3QgKgorbGliZmNfaG9zdF9hbGxvYyhzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQsIGludCBwcml2X3NpemUpCiB7CiAJcmV0dXJuIHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZihzdHJ1Y3QgZmNfbHBvcnQpICsgcHJpdl9zaXplKTsKIH0KIAogLyoqCi0gKiBmY29lX2hvc3RfYWxsb2MgLSBhbGxvY2F0ZSBhIFNjc2lfSG9zdCB3aXRoIHJvb20gZm9yIHRoZSBmY29lX3NvZnRjCisgKiBmY29lX2hvc3RfYWxsb2MoKSAtIEFsbG9jYXRlIGEgU2NzaV9Ib3N0IHdpdGggcm9vbSBmb3IgdGhlIGZjb2Vfc29mdGMKICAqIEBzaHQ6IHB0ciB0byB0aGUgc2NzaSBob3N0IHRlbXBsCiAgKiBAcHJpdl9zaXplOiBzaXplIG9mIHByaXZhdGUgZGF0YSBhZnRlciBmY19scG9ydAogICoKQEAgLTEyMzIsOCArMTE4OCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX2hvc3RfYWxsb2MpOwogCi0vKgotICogZmNvZV9yZXNldCAtIHJlc2V0cyB0aGUgZmNvZQorLyoqCisgKiBmY29lX3Jlc2V0KCkgLSBSZXNldHMgdGhlIGZjb2UKICAqIEBzaG9zdDogc2hvc3QgdGhlIHJlc2V0IGlzIGZyb20KICAqCiAgKiBSZXR1cm5zOiBhbHdheXMgMApAQCAtMTI0Niw4ICsxMjAyLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfcmVzZXQpOwogCi0vKgotICogZmNvZV93d25fZnJvbV9tYWMgLSBjb252ZXJ0cyA0OC1iaXQgSUVFRSBNQUMgYWRkcmVzcyB0byA2NC1iaXQgRkMgV1dOLgorLyoqCisgKiBmY29lX3d3bl9mcm9tX21hYygpIC0gQ29udmVydHMgNDgtYml0IElFRUUgTUFDIGFkZHJlc3MgdG8gNjQtYml0IEZDIFdXTi4KICAqIEBtYWM6IG1hYyBhZGRyZXNzCiAgKiBAc2NoZW1lOiBjaGVjayBwb3J0CiAgKiBAcG9ydDogcG9ydCBpbmRpY2F0b3IgZm9yIGNvbnZlcnRpbmcKQEAgLTEyODYsMTQgKzEyNDIsMTUgQEAKIAlyZXR1cm4gd3duOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV93d25fZnJvbV9tYWMpOwotLyoKLSAqIGZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjIC0gZmluZCB0aGUgY29ycmVzcG9uZGluZyBscG9ydCBieSBhIGdpdmVuIGRldmljZQorCisvKioKKyAqIGZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKCkgLSBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGxwb3J0IGJ5IGEgZ2l2ZW4gZGV2aWNlCiAgKiBAZGV2aWNlOiB0aGlzIGlzIGN1cnJlbnRseSBwdHIgdG8gbmV0X2RldmljZQogICoKICAqIFJldHVybnM6IE5VTEwgb3IgdGhlIGxvY2F0ZWQgZmNvZV9zb2Z0YwogICovCi1zdGF0aWMgc3RydWN0IGZjb2Vfc29mdGMgKmZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKAotCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IGZjb2Vfc29mdGMgKgorZmNvZV9ob3N0bGlzdF9sb29rdXBfc29mdGMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CiAKQEAgLTEzMDgsOCArMTI2NSw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qCi0gKiBmY29lX2hvc3RsaXN0X2xvb2t1cCAtIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgbHBvcnQgYnkgbmV0ZGV2CisvKioKKyAqIGZjb2VfaG9zdGxpc3RfbG9va3VwKCkgLSBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGxwb3J0IGJ5IG5ldGRldgogICogQG5ldGRldjogcHRyIHRvIG5ldF9kZXZpY2UKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCkBAIC0xMzI0LDggKzEyODEsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV9ob3N0bGlzdF9sb29rdXApOwogCi0vKgotICogZmNvZV9ob3N0bGlzdF9hZGQgLSBhZGQgYSBscG9ydCB0byBscG9ydHMgbGlzdAorLyoqCisgKiBmY29lX2hvc3RsaXN0X2FkZCgpIC0gQWRkIGEgbHBvcnQgdG8gbHBvcnRzIGxpc3QKICAqIEBscDogcHRyIHRvIHRoZSBmY19scG9ydCB0byBiYWRkZWQKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCkBAIC0xMzM2LDcgKzEyOTMsNyBAQAogCiAJZmMgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9zb2Z0YyhmY29lX25ldGRldihscCkpOwogCWlmICghZmMpIHsKLQkJZmMgPSBmY29lX3NvZnRjKGxwKTsKKwkJZmMgPSBscG9ydF9wcml2KGxwKTsKIAkJd3JpdGVfbG9ja19iaCgmZmNvZV9ob3N0bGlzdF9sb2NrKTsKIAkJbGlzdF9hZGRfdGFpbCgmZmMtPmxpc3QsICZmY29lX2hvc3RsaXN0KTsKIAkJd3JpdGVfdW5sb2NrX2JoKCZmY29lX2hvc3RsaXN0X2xvY2spOwpAQCAtMTM0NSw4ICsxMzAyLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfaG9zdGxpc3RfYWRkKTsKIAotLyoKLSAqIGZjb2VfaG9zdGxpc3RfcmVtb3ZlIC0gcmVtb3ZlIGEgbHBvcnQgZnJvbSBscG9ydHMgbGlzdAorLyoqCisgKiBmY29lX2hvc3RsaXN0X3JlbW92ZSgpIC0gcmVtb3ZlIGEgbHBvcnQgZnJvbSBscG9ydHMgbGlzdAogICogQGxwOiBwdHIgdG8gdGhlIGZjX2xwb3J0IHRvIGJhZGRlZAogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKQEAgLTEzNjYsMTIgKzEzMjMsMTIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfaG9zdGxpc3RfcmVtb3ZlKTsKIAogLyoqCi0gKiBmY29lX2xpYmZjX2NvbmZpZyAtIHNldHMgdXAgbGliZmMgcmVsYXRlZCBwcm9wZXJ0aWVzIGZvciBscG9ydAorICogZmNvZV9saWJmY19jb25maWcoKSAtIHNldHMgdXAgbGliZmMgcmVsYXRlZCBwcm9wZXJ0aWVzIGZvciBscG9ydAogICogQGxwOiBwdHIgdG8gdGhlIGZjX2xwb3J0CiAgKiBAdHQ6IGxpYmZjIGZ1bmN0aW9uIHRlbXBsYXRlCiAgKgogICogUmV0dXJucyA6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogaW50IGZjb2VfbGliZmNfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZSAqdHQpCiB7CiAJLyogU2V0IHRoZSBmdW5jdGlvbiBwb2ludGVycyBzZXQgYnkgdGhlIExMREQgKi8KQEAgLTEzODksMTQgKzEzNDYsMTQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfbGliZmNfY29uZmlnKTsKIAogLyoqCi0gKiBmY29lX2luaXQgLSBmY29lIG1vZHVsZSBsb2FkaW5nIGluaXRpYWxpemF0aW9uCisgKiBmY29lX2luaXQoKSAtIGZjb2UgbW9kdWxlIGxvYWRpbmcgaW5pdGlhbGl6YXRpb24KICAqCiAgKiBJbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKiAxLiBXaWxsIGNyZWF0ZSBmYyB0cmFuc3BvcnQgc29mdHdhcmUgc3RydWN0dXJlCiAgKiAyLiBpbml0aWFsaXplIHRoZSBsaW5rIGxpc3Qgb2YgcG9ydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQotICoqLworICovCiBzdGF0aWMgaW50IF9faW5pdCBmY29lX2luaXQodm9pZCkKIHsKIAlpbnQgY3B1OwpAQCAtMTQzMyw3ICsxMzkwLDYgQEAKIAkJCX0gZWxzZSB7CiAJCQkJZmNvZV9wZXJjcHVbY3B1XSA9IE5VTEw7CiAJCQkJa2ZyZWUocCk7Ci0KIAkJCX0KIAkJfQogCX0KQEAgLTE0NDMsMTEgKzEzOTksOSBAQAogCSAqLwogCWZjb2VfZGV2X3NldHVwKCk7CiAKLQlpbml0X3RpbWVyKCZmY29lX3RpbWVyKTsKLQlmY29lX3RpbWVyLmRhdGEgPSAwOwotCWZjb2VfdGltZXIuZnVuY3Rpb24gPSBmY29lX3dhdGNoZG9nOwotCWZjb2VfdGltZXIuZXhwaXJlcyA9IChqaWZmaWVzICsgKDEwICogSFopKTsKLQlhZGRfdGltZXIoJmZjb2VfdGltZXIpOworCXNldHVwX3RpbWVyKCZmY29lX3RpbWVyLCBmY29lX3dhdGNoZG9nLCAwKTsKKworCW1vZF90aW1lcigmZmNvZV90aW1lciwgamlmZmllcyArICgxMCAqIEhaKSk7CiAKIAkvKiBpbml0aWF0bGl6ZSB0aGUgZmNvZSB0cmFuc3BvcnQgKi8KIAlmY29lX3RyYW5zcG9ydF9pbml0KCk7CkBAIC0xNDU5LDEwICsxNDEzLDEwIEBACiBtb2R1bGVfaW5pdChmY29lX2luaXQpOwogCiAvKioKLSAqIGZjb2VfZXhpdCAtIGZjb2UgbW9kdWxlIHVubG9hZGluZyBjbGVhbnVwCisgKiBmY29lX2V4aXQoKSAtIGZjb2UgbW9kdWxlIHVubG9hZGluZyBjbGVhbnVwCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKLSAqKi8KKyAqLwogc3RhdGljIHZvaWQgX19leGl0IGZjb2VfZXhpdCh2b2lkKQogewogCXUzMiBpZHg7CkBAIC0xNDgzLDcgKzE0MzcsNyBAQAogCSAqLwogCWRlbF90aW1lcl9zeW5jKCZmY29lX3RpbWVyKTsKIAotCS8qIHJlbGVhc2VzIHRoZSBhc3NvY2FpdGVkIGZjb2UgdHJhbnNwb3J0IGZvciBlYWNoIGxwb3J0ICovCisJLyogcmVsZWFzZXMgdGhlIGFzc29jaWF0ZWQgZmNvZSB0cmFuc3BvcnQgZm9yIGVhY2ggbHBvcnQgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmMsIHRtcCwgJmZjb2VfaG9zdGxpc3QsIGxpc3QpCiAJCWZjb2VfdHJhbnNwb3J0X3JlbGVhc2UoZmMtPnJlYWxfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCmluZGV4IGE0OGU0OTkuLjM0YmU4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYworKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKQEAgLTEyNTEsNiArMTI1MSw3IEBACiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUzMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTYwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MjEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQyMTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwppbmRleCBhMWE1MTFiLi5lZDFlNzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCkBAIC0xNTczLDkgKzE1NzMsNiBAQAogCXZmY19jbWQtPnJlc3BfbGVuID0gc2l6ZW9mKHZmY19jbWQtPnJzcCk7CiAJdmZjX2NtZC0+Y2FuY2VsX2tleSA9ICh1bnNpZ25lZCBsb25nKWNtbmQtPmRldmljZS0+aG9zdGRhdGE7CiAJdmZjX2NtZC0+dGd0X3Njc2lfaWQgPSBycG9ydC0+cG9ydF9pZDsKLQlpZiAoKHJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyAmIEZDX0NPU19DTEFTUzMpICYmCi0JICAgIChmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKHZob3N0LT5ob3N0KSAmIEZDX0NPU19DTEFTUzMpKQotCQl2ZmNfY21kLT5mbGFncyA9IElCTVZGQ19DTEFTU18zX0VSUjsKIAl2ZmNfY21kLT5pdS54ZmVyX2xlbiA9IHNjc2lfYnVmZmxlbihjbW5kKTsKIAlpbnRfdG9fc2NzaWx1bihjbW5kLT5kZXZpY2UtPmx1biwgJnZmY19jbWQtPml1Lmx1bik7CiAJbWVtY3B5KHZmY19jbWQtPml1LmNkYiwgY21uZC0+Y21uZCwgY21uZC0+Y21kX2xlbik7CkBAIC0zMjY2LDYgKzMyNjMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltZW1zZXQodGd0LCAwLCBzaXplb2YoKnRndCkpOwogCXRndC0+c2NzaV9pZCA9IHNjc2lfaWQ7CiAJdGd0LT5uZXdfc2NzaV9pZCA9IHNjc2lfaWQ7CiAJdGd0LT52aG9zdCA9IHZob3N0OwpAQCAtMzU3Niw5ICszNTc0LDE4IEBACiBzdGF0aWMgdm9pZCBpYm12ZmNfdGd0X2FkZF9ycG9ydChzdHJ1Y3QgaWJtdmZjX3RhcmdldCAqdGd0KQogewogCXN0cnVjdCBpYm12ZmNfaG9zdCAqdmhvc3QgPSB0Z3QtPnZob3N0OwotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHRndC0+cnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChycG9ydCkgeworCQl0Z3RfZGJnKHRndCwgIlNldHRpbmcgcnBvcnQgcm9sZXNcbiIpOworCQlmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHJwb3J0LCB0Z3QtPmlkcy5yb2xlcyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHZob3N0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJaWJtdmZjX3NldF90Z3RfYWN0aW9uKHRndCwgSUJNVkZDX1RHVF9BQ1RJT05fTk9ORSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodmhvc3QtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCiAJdGd0X2RiZyh0Z3QsICJBZGRpbmcgcnBvcnRcbiIpOwogCXJwb3J0ID0gZmNfcmVtb3RlX3BvcnRfYWRkKHZob3N0LT5ob3N0LCAwLCAmdGd0LT5pZHMpOwogCXNwaW5fbG9ja19pcnFzYXZlKHZob3N0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuaCBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuaAppbmRleCA4N2RhZmQwLi5iMjFlMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5oCkBAIC0zMiw3ICszMiw3IEBACiAjZGVmaW5lIElCTVZGQ19EUklWRVJfVkVSU0lPTgkJIjEuMC40IgogI2RlZmluZSBJQk1WRkNfRFJJVkVSX0RBVEUJCSIoTm92ZW1iZXIgMTQsIDIwMDgpIgogCi0jZGVmaW5lIElCTVZGQ19ERUZBVUxUX1RJTUVPVVQJMTUKKyNkZWZpbmUgSUJNVkZDX0RFRkFVTFRfVElNRU9VVAk2MAogI2RlZmluZSBJQk1WRkNfSU5JVF9USU1FT1VUCQkxMjAKICNkZWZpbmUgSUJNVkZDX01BWF9SRVFVRVNUU19ERUZBVUxUCTEwMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCmluZGV4IDc0ZDA3ZDEuLmM5YWE3NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCkBAIC00MzIsNiArNDMyLDcgQEAKIAkJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgY21kLT5kZXZpY2UsCiAJCQkJICAgICAgICAgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSAiCiAJCQkJICAgICAgICAgICAgImZvciBpbmRpcmVjdCB0YWJsZVxuIik7CisJCQlzY3NpX2RtYV91bm1hcChjbWQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGFzaTcwMC5jIGIvZHJpdmVycy9zY3NpL2xhc2k3MDAuYwppbmRleCA0YTRlNjk1Li5mMjNjNGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGFzaTcwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9sYXNpNzAwLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiAJaG9zdGRhdGEgPSBremFsbG9jKHNpemVvZigqaG9zdGRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhvc3RkYXRhKSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBob3N0IGRhdGFcbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaG9zdCBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Rpc2MuYwppbmRleCBkZDE1NjRjLi5lNTc1NTZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Rpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZGlzYy5jCkBAIC02NCw3ICs2NCw3IEBACiBzdGF0aWMgdm9pZCBmY19kaXNjX3Jlc3RhcnQoc3RydWN0IGZjX2Rpc2MgKik7CiAKIC8qKgotICogZmNfZGlzY19sb29rdXBfcnBvcnQgLSBsb29rdXAgYSByZW1vdGUgcG9ydCBieSBwb3J0X2lkCisgKiBmY19kaXNjX2xvb2t1cF9ycG9ydCgpIC0gbG9va3VwIGEgcmVtb3RlIHBvcnQgYnkgcG9ydF9pZAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGhvc3QgcG9ydCBpbnN0YW5jZQogICogQHBvcnRfaWQ6IHJlbW90ZSBwb3J0IHBvcnRfaWQgdG8gbWF0Y2gKICAqLwpAQCAtOTIsNyArOTIsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2Nfc3RvcF9ycG9ydHMgLSBkZWxldGUgYWxsIHRoZSByZW1vdGUgcG9ydHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBscG9ydAorICogZmNfZGlzY19zdG9wX3Jwb3J0cygpIC0gZGVsZXRlIGFsbCB0aGUgcmVtb3RlIHBvcnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbHBvcnQKICAqIEBkaXNjOiBUaGUgZGlzY292ZXJ5IGpvYiB0byBzdG9wIHJwb3J0cyBvbgogICoKICAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoYXQgdGhlIGxwb3J0IG11dGV4IGlzIGxvY2tlZCBiZWZvcmUKQEAgLTExNyw3ICsxMTcsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2NfcnBvcnRfY2FsbGJhY2sgLSBFdmVudCBoYW5kbGVyIGZvciBycG9ydCBldmVudHMKKyAqIGZjX2Rpc2NfcnBvcnRfY2FsbGJhY2soKSAtIEV2ZW50IGhhbmRsZXIgZm9yIHJwb3J0IGV2ZW50cwogICogQGxwb3J0OiBUaGUgbHBvcnQgd2hpY2ggaXMgcmVjZWl2aW5nIHRoZSBldmVudAogICogQHJwb3J0OiBUaGUgcnBvcnQgd2hpY2ggdGhlIGV2ZW50IGhhcyBvY2N1cmVkIG9uCiAgKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VyZWQKQEAgLTE1MSw3ICsxNTEsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2NfcmVjdl9yc2NuX3JlcSAtIEhhbmRsZSBSZWdpc3RlcmVkIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24gKFJTQ04pCisgKiBmY19kaXNjX3JlY3ZfcnNjbl9yZXEoKSAtIEhhbmRsZSBSZWdpc3RlcmVkIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24gKFJTQ04pCiAgKiBAc3A6IEN1cnJlbnQgc2VxdWVuY2Ugb2YgdGhlIFJTQ04gZXhjaGFuZ2UKICAqIEBmcDogUlNDTiBGcmFtZQogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGhvc3QgcG9ydCBpbnN0YW5jZQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCQlsaXN0X2RlbCgmZHAtPnBlZXJzKTsKIAkJCXJwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2xvb2t1cChscG9ydCwgZHAtPmlkcy5wb3J0X2lkKTsKIAkJCWlmIChycG9ydCkgewotCQkJCXJkYXRhID0gUlBPUlRfVE9fUFJJVihycG9ydCk7CisJCQkJcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAkJCQlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKIAkJCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJwb3J0KTsKIAkJCX0KQEAgLTI2NSw3ICsyNjUsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2NfcmVjdl9yZXEgLSBIYW5kbGUgaW5jb21pbmcgcmVxdWVzdHMKKyAqIGZjX2Rpc2NfcmVjdl9yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyByZXF1ZXN0cwogICogQHNwOiBDdXJyZW50IHNlcXVlbmNlIG9mIHRoZSByZXF1ZXN0IGV4Y2hhbmdlCiAgKiBAZnA6IFRoZSBmcmFtZQogICogQGxwb3J0OiBUaGUgRkMgbG9jYWwgcG9ydApAQCAtMjk0LDcgKzI5NCw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19yZXN0YXJ0IC0gUmVzdGFydCBkaXNjb3ZlcnkKKyAqIGZjX2Rpc2NfcmVzdGFydCgpIC0gUmVzdGFydCBkaXNjb3ZlcnkKICAqIEBscG9ydDogRkMgZGlzY292ZXJ5IGNvbnRleHQKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHRoZSBkaXNjIG11dGV4CkBAIC0zMjIsNyArMzIyLDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX3N0YXJ0IC0gRmlicmUgQ2hhbm5lbCBUYXJnZXQgZGlzY292ZXJ5CisgKiBmY19kaXNjX3N0YXJ0KCkgLSBGaWJyZSBDaGFubmVsIFRhcmdldCBkaXNjb3ZlcnkKICAqIEBscG9ydDogRkMgbG9jYWwgcG9ydAogICoKICAqIFJldHVybnMgbm9uLXplcm8gaWYgZGlzY292ZXJ5IGNhbm5vdCBiZSBzdGFydGVkLgpAQCAtMzgzLDcgKzM4Myw3IEBACiB9OwogCiAvKioKLSAqIGZjX2Rpc2NfbmV3X3RhcmdldCAtIEhhbmRsZSBuZXcgdGFyZ2V0IGZvdW5kIGJ5IGRpc2NvdmVyeQorICogZmNfZGlzY19uZXdfdGFyZ2V0KCkgLSBIYW5kbGUgbmV3IHRhcmdldCBmb3VuZCBieSBkaXNjb3ZlcnkKICAqIEBscG9ydDogRkMgbG9jYWwgcG9ydAogICogQHJwb3J0OiBUaGUgcHJldmlvdXMgRkMgcmVtb3RlIHBvcnQgKE5VTEwgaWYgbmV3IHJlbW90ZSBwb3J0KQogICogQGlkczogSWRlbnRpZmllcnMgZm9yIHRoZSBuZXcgRkMgcmVtb3RlIHBvcnQKQEAgLTM5Niw3ICszOTYsNyBAQAogCQkJICAgICAgc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzICppZHMpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGRpc2MtPmxwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpycDsKKwlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGE7CiAJaW50IGVycm9yID0gMDsKIAogCWlmIChycG9ydCAmJiBpZHMtPnBvcnRfbmFtZSkgewpAQCAtNDMwLDE1ICs0MzAsMTUgQEAKIAkJCQlkcC5pZHMucG9ydF9uYW1lID0gaWRzLT5wb3J0X25hbWU7CiAJCQkJZHAuaWRzLm5vZGVfbmFtZSA9IGlkcy0+bm9kZV9uYW1lOwogCQkJCWRwLmlkcy5yb2xlcyA9IGlkcy0+cm9sZXM7Ci0JCQkJcnBvcnQgPSBmY19ycG9ydF9yb2d1ZV9jcmVhdGUoJmRwKTsKKwkJCQlycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUoJmRwKTsKIAkJCX0KIAkJCWlmICghcnBvcnQpCiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQl9CiAJCWlmIChycG9ydCkgewotCQkJcnAgPSBycG9ydC0+ZGRfZGF0YTsKLQkJCXJwLT5vcHMgPSAmZmNfZGlzY19ycG9ydF9vcHM7Ci0JCQlycC0+cnBfc3RhdGUgPSBSUE9SVF9TVF9JTklUOworCQkJcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwkJCXJkYXRhLT5vcHMgPSAmZmNfZGlzY19ycG9ydF9vcHM7CisJCQlyZGF0YS0+cnBfc3RhdGUgPSBSUE9SVF9TVF9JTklUOwogCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ2luKHJwb3J0KTsKIAkJfQogCX0KQEAgLTQ0NiwyMCArNDQ2LDIwIEBACiB9CiAKIC8qKgotICogZmNfZGlzY19kZWxfdGFyZ2V0IC0gRGVsZXRlIGEgdGFyZ2V0CisgKiBmY19kaXNjX2RlbF90YXJnZXQoKSAtIERlbGV0ZSBhIHRhcmdldAogICogQGRpc2M6IEZDIGRpc2NvdmVyeSBjb250ZXh0CiAgKiBAcnBvcnQ6IFRoZSByZW1vdGUgcG9ydCB0byBiZSByZW1vdmVkCiAgKi8KIHN0YXRpYyB2b2lkIGZjX2Rpc2NfZGVsX3RhcmdldChzdHJ1Y3QgZmNfZGlzYyAqZGlzYywgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gUlBPUlRfVE9fUFJJVihycG9ydCk7CisJc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJbGlzdF9kZWwoJnJkYXRhLT5wZWVycyk7CiAJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihycG9ydCk7CiB9CiAKIC8qKgotICogZmNfZGlzY19kb25lIC0gRGlzY292ZXJ5IGhhcyBiZWVuIGNvbXBsZXRlZAorICogZmNfZGlzY19kb25lKCkgLSBEaXNjb3ZlcnkgaGFzIGJlZW4gY29tcGxldGVkCiAgKiBAZGlzYzogRkMgZGlzY292ZXJ5IGNvbnRleHQKICAqLwogc3RhdGljIHZvaWQgZmNfZGlzY19kb25lKHN0cnVjdCBmY19kaXNjICpkaXNjKQpAQCAtNDc5LDcgKzQ3OSw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19lcnJvciAtIEhhbmRsZSBlcnJvciBvbiBkTlMgcmVxdWVzdAorICogZmNfZGlzY19lcnJvcigpIC0gSGFuZGxlIGVycm9yIG9uIGROUyByZXF1ZXN0CiAgKiBAZGlzYzogRkMgZGlzY292ZXJ5IGNvbnRleHQKICAqIEBmcDogVGhlIGZyYW1lIHBvaW50ZXIKICAqLwpAQCAtNTE5LDcgKzUxOSw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19ncG5fZnRfcmVxIC0gU2VuZCBHZXQgUG9ydCBOYW1lcyBieSBGQy00IHR5cGUgKEdQTl9GVCkgcmVxdWVzdAorICogZmNfZGlzY19ncG5fZnRfcmVxKCkgLSBTZW5kIEdldCBQb3J0IE5hbWVzIGJ5IEZDLTQgdHlwZSAoR1BOX0ZUKSByZXF1ZXN0CiAgKiBAbHBvcnQ6IEZDIGRpc2NvdmVyeSBjb250ZXh0CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhhdCB0aGUgZGlzY19tdXRleCBpcyBsb2NrZWQKQEAgLTU1Myw3ICs1NTMsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2NfZ3BuX2Z0X3BhcnNlIC0gUGFyc2UgdGhlIGxpc3Qgb2YgSURzIGFuZCBuYW1lcyByZXN1bHRpbmcgZnJvbSBhIHJlcXVlc3QKKyAqIGZjX2Rpc2NfZ3BuX2Z0X3BhcnNlKCkgLSBQYXJzZSB0aGUgbGlzdCBvZiBJRHMgYW5kIG5hbWVzIHJlc3VsdGluZyBmcm9tIGEgcmVxdWVzdAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGhvc3QgcG9ydCBpbnN0YW5jZQogICogQGJ1ZjogR1BOX0ZUIHJlc3BvbnNlIGJ1ZmZlcgogICogQGxlbjogc2l6ZSBvZiByZXNwb25zZSBidWZmZXIKQEAgLTYxNyw3ICs2MTcsNyBAQAogCiAJCWlmICgoZHAuaWRzLnBvcnRfaWQgIT0gZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSkgJiYKIAkJICAgIChkcC5pZHMucG9ydF9uYW1lICE9IGxwb3J0LT53d3BuKSkgewotCQkJcnBvcnQgPSBmY19ycG9ydF9yb2d1ZV9jcmVhdGUoJmRwKTsKKwkJCXJwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSgmZHApOwogCQkJaWYgKHJwb3J0KSB7CiAJCQkJcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAkJCQlyZGF0YS0+b3BzID0gJmZjX2Rpc2NfcnBvcnRfb3BzOwpAQCAtNjU4LDcgKzY1OCwxMCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotLyoKKy8qKgorICogZmNfZGlzY190aW1lb3V0KCkgLSBSZXRyeSBoYW5kbGVyIGZvciB0aGUgZGlzYyBjb21wb25lbnQKKyAqIEB3b3JrOiBTdHJ1Y3R1cmUgaG9sZGluZyBkaXNjIG9iaiB0aGF0IG5lZWRzIHJldHJ5IGRpc2NvdmVyeQorICoKICAqIEhhbmRsZSByZXRyeSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgcmVtb3RlIHBvcnRzLgogICovCiBzdGF0aWMgdm9pZCBmY19kaXNjX3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNjczLDcgKzY3Niw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19ncG5fZnRfcmVzcCAtIEhhbmRsZSBhIHJlc3BvbnNlIGZyYW1lIGZyb20gR2V0IFBvcnQgTmFtZXMgKEdQTl9GVCkKKyAqIGZjX2Rpc2NfZ3BuX2Z0X3Jlc3AoKSAtIEhhbmRsZSBhIHJlc3BvbnNlIGZyYW1lIGZyb20gR2V0IFBvcnQgTmFtZXMgKEdQTl9GVCkKICAqIEBzcDogQ3VycmVudCBzZXF1ZW5jZSBvZiBHUE5fRlQgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBscF9hcmc6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCkBAIC03MTIsOSArNzE1LDcgQEAKIAkJCSAgICAgICBmcl9sZW4oZnApKTsKIAkJfSBlbHNlIGlmIChudG9ocyhjcC0+Y3RfY21kKSA9PSBGQ19GU19BQ0MpIHsKIAotCQkJLyoKLQkJCSAqIEFjY2VwdGVkLiAgUGFyc2UgcmVzcG9uc2UuCi0JCQkgKi8KKwkJCS8qIEFjY2VwdGVkLCBwYXJzZSB0aGUgcmVzcG9uc2UuICovCiAJCQlidWYgPSBjcCArIDE7CiAJCQlsZW4gLT0gc2l6ZW9mKCpjcCk7CiAJCX0gZWxzZSBpZiAobnRvaHMoY3AtPmN0X2NtZCkgPT0gRkNfRlNfUkpUKSB7CkBAIC03NDYsNyArNzQ3LDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX3NpbmdsZSAtIERpc2NvdmVyIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIHRhcmdldAorICogZmNfZGlzY19zaW5nbGUoKSAtIERpc2NvdmVyIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIHRhcmdldAogICogQGxwb3J0OiBGQyBsb2NhbCBwb3J0CiAgKiBAZHA6IFRoZSBwb3J0IHRvIHJlZGlzY292ZXIKICAqCkBAIC03NjksNyArNzcwLDcgQEAKIAlpZiAocnBvcnQpCiAJCWZjX2Rpc2NfZGVsX3RhcmdldChkaXNjLCBycG9ydCk7CiAKLQluZXdfcnBvcnQgPSBmY19ycG9ydF9yb2d1ZV9jcmVhdGUoZHApOworCW5ld19ycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUoZHApOwogCWlmIChuZXdfcnBvcnQpIHsKIAkJcmRhdGEgPSBuZXdfcnBvcnQtPmRkX2RhdGE7CiAJCXJkYXRhLT5vcHMgPSAmZmNfZGlzY19ycG9ydF9vcHM7CkBAIC03ODIsNyArNzgzLDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX3N0b3AgLSBTdG9wIGRpc2NvdmVyeSBmb3IgYSBnaXZlbiBscG9ydAorICogZmNfZGlzY19zdG9wKCkgLSBTdG9wIGRpc2NvdmVyeSBmb3IgYSBnaXZlbiBscG9ydAogICogQGxwb3J0OiBUaGUgbHBvcnQgdGhhdCBkaXNjb3Zlcnkgc2hvdWxkIHN0b3AgZm9yCiAgKi8KIHZvaWQgZmNfZGlzY19zdG9wKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCkBAIC03OTYsNyArNzk3LDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX3N0b3BfZmluYWwgLSBTdG9wIGRpc2NvdmVyeSBmb3IgYSBnaXZlbiBscG9ydAorICogZmNfZGlzY19zdG9wX2ZpbmFsKCkgLSBTdG9wIGRpc2NvdmVyeSBmb3IgYSBnaXZlbiBscG9ydAogICogQGxwb3J0OiBUaGUgbHBvcnQgdGhhdCBkaXNjb3Zlcnkgc2hvdWxkIHN0b3AgZm9yCiAgKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIGRpc2NvdmVyeSBoYXMgYmVlbgpAQCAtODA5LDcgKzgxMCw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19pbml0IC0gSW5pdGlhbGl6ZSB0aGUgZGlzY292ZXJ5IGJsb2NrCisgKiBmY19kaXNjX2luaXQoKSAtIEluaXRpYWxpemUgdGhlIGRpc2NvdmVyeSBibG9jawogICogQGxwb3J0OiBGQyBsb2NhbCBwb3J0CiAgKi8KIGludCBmY19kaXNjX2luaXQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCmluZGV4IDY2ZGIwOGEuLjUwNTgyNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYwpAQCAtMzIsOCArMzIsNiBAQAogI2luY2x1ZGUgPHNjc2kvbGliZmMuaD4KICNpbmNsdWRlIDxzY3NpL2ZjX2VuY29kZS5oPgogCi0jZGVmaW5lCSAgRkNfREVGX1JfQV9UT1YgICAgICAoMTAgKiAxMDAwKSAvKiByZXNvdXJjZSBhbGxvY2F0aW9uIHRpbWVvdXQgKi8KLQogLyoKICAqIGZjX2V4Y2hfZGVidWcgY2FuIGJlIHNldCBpbiBkZWJ1Z2dlciBvciBhdCBjb21waWxlIHRpbWUgdG8gZ2V0IG1vcmUgbG9ncy4KICAqLwpAQCAtNjI3LDcgKzYyNSw2IEBACiB7CiAJc3RydWN0IGZjX2V4Y2ggKmVwOwogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwotCXUxNiByeGlkOwogCiAJZXAgPSBtcC0+bHAtPnR0LmV4Y2hfZ2V0KG1wLT5scCwgZnApOwogCWlmIChlcCkgewpAQCAtNjU0LDE4ICs2NTEsNiBAQAogCQlpZiAoKG50b2gyNChmaC0+ZmhfZl9jdGwpICYgRkNfRkNfU0VRX0lOSVQpID09IDApCiAJCQllcC0+ZXNiX3N0YXQgJj0gfkVTQl9TVF9TRVFfSU5JVDsKIAotCQkvKgotCQkgKiBTZXQgdGhlIHJlc3BvbmRlciBJRCBpbiB0aGUgZnJhbWUgaGVhZGVyLgotCQkgKiBUaGUgb2xkIG9uZSBzaG91bGQndmUgYmVlbiAweGZmZmYuCi0JCSAqIElmIGl0IGlzbid0LCBkb24ndCBhc3NpZ24gb25lLgotCQkgKiBJbmNvbWluZyBiYXNpYyBsaW5rIHNlcnZpY2UgZnJhbWVzIG1heSBzcGVjaWZ5Ci0JCSAqIGEgcmVmZXJlbmNlZCBSWF9JRC4KLQkJICovCi0JCWlmIChmaC0+ZmhfdHlwZSAhPSBGQ19UWVBFX0JMUykgewotCQkJcnhpZCA9IG50b2hzKGZoLT5maF9yeF9pZCk7Ci0JCQlXQVJOX09OKHJ4aWQgIT0gRkNfWElEX1VOS05PV04pOwotCQkJZmgtPmZoX3J4X2lkID0gaHRvbnMoZXAtPnJ4aWQpOwotCQl9CiAJCWZjX2V4Y2hfaG9sZChlcCk7CS8qIGhvbGQgZm9yIGNhbGxlciAqLwogCQlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwkvKiBsb2NrIGZyb20gZXhjaF9nZXQgKi8KIAl9CkBAIC02NzcsOCArNjYyLDggQEAKICAqIElmIGZjX3BmX3JqdF9yZWFzb24gaXMgRkNfUkpUX05PTkUgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSBhIGhvbGQKICAqIG9uIHRoZSBlcCB0aGF0IHNob3VsZCBiZSByZWxlYXNlZCBieSB0aGUgY2FsbGVyLgogICovCi1zdGF0aWMgZW51bSBmY19wZl9yanRfcmVhc29uCi1mY19zZXFfbG9va3VwX3JlY2lwKHN0cnVjdCBmY19leGNoX21nciAqbXAsIHN0cnVjdCBmY19mcmFtZSAqZnApCitzdGF0aWMgZW51bSBmY19wZl9yanRfcmVhc29uIGZjX3NlcV9sb29rdXBfcmVjaXAoc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKKwkJCQkJCSBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAJc3RydWN0IGZjX2V4Y2ggKmVwID0gTlVMTDsKQEAgLTk5Niw5ICs5ODEsOSBAQAogICogU2VuZCBCTFMgUmVqZWN0LgogICogVGhpcyBpcyBmb3IgcmVqZWN0aW5nIEJBX0FCVFMgb25seS4KICAqLwotc3RhdGljIHZvaWQKLWZjX2V4Y2hfc2VuZF9iYV9yanQoc3RydWN0IGZjX2ZyYW1lICpyeF9mcCwgZW51bSBmY19iYV9yanRfcmVhc29uIHJlYXNvbiwKLQkJICAgIGVudW0gZmNfYmFfcmp0X2V4cGxhbiBleHBsYW4pCitzdGF0aWMgdm9pZCBmY19leGNoX3NlbmRfYmFfcmp0KHN0cnVjdCBmY19mcmFtZSAqcnhfZnAsCisJCQkJZW51bSBmY19iYV9yanRfcmVhc29uIHJlYXNvbiwKKwkJCQllbnVtIGZjX2JhX3JqdF9leHBsYW4gZXhwbGFuKQogewogCXN0cnVjdCBmY19mcmFtZSAqZnA7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqcnhfZmg7CkBAIC0xMDk2LDcgKzEwODEsNyBAQAogCQlhcC0+YmFfaGlnaF9zZXFfY250ID0gZmgtPmZoX3NlcV9jbnQ7CiAJCWFwLT5iYV9sb3dfc2VxX2NudCA9IGh0b25zKHNwLT5jbnQpOwogCX0KLQlzcCA9IGZjX3NlcV9zdGFydF9uZXh0KHNwKTsKKwlzcCA9IGZjX3NlcV9zdGFydF9uZXh0X2xvY2tlZChzcCk7CiAJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsKIAlmY19zZXFfc2VuZF9sYXN0KHNwLCBmcCwgRkNfUkNUTF9CQV9BQ0MsIEZDX1RZUEVfQkxTKTsKIAlmY19mcmFtZV9mcmVlKHJ4X2ZwKTsKQEAgLTE0ODAsMTAgKzE0NjUsMTEgQEAKICAqIElmIHNpZCBpcyBub24temVybywgcmVzZXQgb25seSBleGNoYW5nZXMgd2Ugc291cmNlIGZyb20gdGhhdCBGSUQuCiAgKiBJZiBkaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIGRlc3RpbmVkIHRvIHRoYXQgRklELgogICovCi12b2lkIGZjX2V4Y2hfbWdyX3Jlc2V0KHN0cnVjdCBmY19leGNoX21nciAqbXAsIHUzMiBzaWQsIHUzMiBkaWQpCit2b2lkIGZjX2V4Y2hfbWdyX3Jlc2V0KHN0cnVjdCBmY19scG9ydCAqbHAsIHUzMiBzaWQsIHUzMiBkaWQpCiB7CiAJc3RydWN0IGZjX2V4Y2ggKmVwOwogCXN0cnVjdCBmY19leGNoICpuZXh0OworCXN0cnVjdCBmY19leGNoX21nciAqbXAgPSBscC0+ZW1wOwogCiAJc3Bpbl9sb2NrX2JoKCZtcC0+ZW1fbG9jayk7CiByZXN0YXJ0OgpAQCAtMTYwNyw3ICsxNTkzLDcgQEAKIAlpZiAoSVNfRVJSKGZwKSkgewogCQlpbnQgZXJyID0gUFRSX0VSUihmcCk7CiAKLQkJaWYgKGVyciA9PSAtRkNfRVhfQ0xPU0VEKQorCQlpZiAoZXJyID09IC1GQ19FWF9DTE9TRUQgfHwgZXJyID09IC1GQ19FWF9USU1FT1VUKQogCQkJZ290byBjbGVhbnVwOwogCQlGQ19EQkcoIkNhbm5vdCBwcm9jZXNzIFJSUSwgYmVjYXVzZSBvZiBmcmFtZSBlcnJvciAlZFxuIiwgZXJyKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCmluZGV4IDQwNGU2M2YuLjJhNjMxZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogfQogCiAvKioKLSAqIGZjX2ZjcF9wa3RfcmVsZWFzZSAtIHJlbGVhc2UgaG9sZCBvbiBzY3NpX3BrdCBwYWNrZXQKKyAqIGZjX2ZjcF9wa3RfcmVsZWFzZSgpIC0gcmVsZWFzZSBob2xkIG9uIHNjc2lfcGt0IHBhY2tldAogICogQGZzcDoJZmNwIHBhY2tldCBzdHJ1Y3QKICAqCiAgKiBUaGlzIGlzIHVzZWQgYnkgdXBwZXIgbGF5ZXIgc2NzaSBkcml2ZXIuCkBAIC0xODMsOCArMTgzLDcgQEAKIH0KIAogLyoqCi0gKiBmY19mY3BfcGt0X2Rlc3RvcnkgLSByZWxlYXNlIGhvbGQgb24gc2NzaV9wa3QgcGFja2V0Ci0gKgorICogZmNfZmNwX3BrdF9kZXN0b3J5KCkgLSByZWxlYXNlIGhvbGQgb24gc2NzaV9wa3QgcGFja2V0CiAgKiBAc2VxOgkJZXhjaGFuZ2Ugc2VxdWVuY2UKICAqIEBmc3A6CWZjcCBwYWNrZXQgc3RydWN0CiAgKgpAQCAtMTk5LDcgKzE5OCw3IEBACiB9CiAKIC8qKgotICogZmNfZmNwX2xvY2tfcGt0IC0gbG9jayBhIHBhY2tldCBhbmQgZ2V0IGEgcmVmIHRvIGl0LgorICogZmNfZmNwX2xvY2tfcGt0KCkgLSBsb2NrIGEgcGFja2V0IGFuZCBnZXQgYSByZWYgdG8gaXQuCiAgKiBAZnNwOglmY3AgcGFja2V0CiAgKgogICogV2Ugc2hvdWxkIG9ubHkgcmV0dXJuIGVycm9yIGlmIHdlIHJldHVybiBhIGNvbW1hbmQgdG8gc2NzaS1tbCBiZWZvcmUKQEAgLTI5MSw5ICsyOTAsNyBAQAogCWJ1ZiA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCAwKTsKIAogCWlmIChvZmZzZXQgKyBsZW4gPiBmc3AtPmRhdGFfbGVuKSB7Ci0JCS8qCi0JCSAqIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbgotCQkgKi8KKwkJLyogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCiAJCWlmICgoZnJfZmxhZ3MoZnApICYgRkNQSEZfQ1JDX1VOQ0hFQ0tFRCkgJiYKIAkJICAgIGZjX2ZyYW1lX2NyY19jaGVjayhmcCkpCiAJCQlnb3RvIGNyY19lcnI7CkBAIC0zODcsOCArMzg0LDggQEAKIAkJZmNfZmNwX2NvbXBsZXRlX2xvY2tlZChmc3ApOwogfQogCi0vKgotICogZmNfZmNwX3NlbmRfZGF0YSAtICBTZW5kIFNDU0kgZGF0YSB0byB0YXJnZXQuCisvKioKKyAqIGZjX2ZjcF9zZW5kX2RhdGEoKSAtICBTZW5kIFNDU0kgZGF0YSB0byB0YXJnZXQuCiAgKiBAZnNwOiBwdHIgdG8gZmNfZmNwX3BrdAogICogQHNwOiBwdHIgdG8gdGhpcyBzZXF1ZW5jZQogICogQG9mZnNldDogc3RhcnRpbmcgb2Zmc2V0IGZvciB0aGlzIGRhdGEgcmVxdWVzdApAQCAtNjEwLDggKzYwNyw4IEBACiAJfQogfQogCi0vKgotICogZmNfZmNwX3JlZHVjZV9jYW5fcXVldWUgLSBkcm9wIGNhbl9xdWV1ZQorLyoqCisgKiBmY19mY3BfcmVkdWNlX2Nhbl9xdWV1ZSgpIC0gZHJvcCBjYW5fcXVldWUKICAqIEBscDogbHBvcnQgdG8gZHJvcCBxdWV1ZWluZyBmb3IKICAqCiAgKiBJZiB3ZSBhcmUgZ2V0dGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgdGhlbiB3ZSBtYXkKQEAgLTY0Miw5ICs2MzksMTEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAotLyoKLSAqIGV4Y2ggbWdyIGNhbGxzIHRoaXMgcm91dGluZSB0byBwcm9jZXNzIHNjc2kKLSAqIGV4Y2hhbmdlcy4KKy8qKgorICogZmNfZmNwX3JlY3YoKSAtIFJldmVpdmUgRkNQIGZyYW1lcworICogQHNlcTogVGhlIHNlcXVlbmNlIHRoZSBmcmFtZSBpcyBvbgorICogQGZwOiBUaGUgRkMgZnJhbWUKKyAqIEBhcmc6IFRoZSByZWxhdGVkIEZDUCBwYWNrZXQKICAqCiAgKiBSZXR1cm4gICA6IE5vbmUKICAqIENvbnRleHQgIDogY2FsbGVkIGZyb20gU29mdCBJUlEgY29udGV4dApAQCAtODMyLDcgKzgzMSw3IEBACiB9CiAKIC8qKgotICogZmNfZmNwX2NvbXBsZXRlX2xvY2tlZCAtIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2YgYSBmY3AgcGFja2V0CisgKiBmY19mY3BfY29tcGxldGVfbG9ja2VkKCkgLSBjb21wbGV0ZSBwcm9jZXNzaW5nIG9mIGEgZmNwIHBhY2tldAogICogQGZzcDoJZmNwIHBhY2tldAogICoKICAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIGlmIGEgdGltZXIgaXMgcGVuZGluZy4gVGhlIHBhY2tldCBsb2NrIG11c3QgYmUKQEAgLTkwMCw3ICs4OTksNyBAQAogfQogCiAvKioKLSAqIGZjX2ZjcF9jbGVhbnVwX2VhY2hfY21kIC0gcnVuIGZuIG9uIGVhY2ggYWN0aXZlIGNvbW1hbmQKKyAqIGZjX2ZjcF9jbGVhbnVwX2VhY2hfY21kKCkgLSBDbGVhbnVwIGFjdGl2ZSBjb21tYWRzCiAgKiBAbHA6CQlsb2dpY2FsIHBvcnQKICAqIEBpZDoJCXRhcmdldCBpZAogICogQGx1bjoJbHVuCkBAIC05NTIsNyArOTUxLDcgQEAKIH0KIAogLyoqCi0gKiBmY19mY3BfcGt0X3NlbmQgLSBzZW5kIGEgZmNwIHBhY2tldCB0byB0aGUgbG93ZXIgbGV2ZWwuCisgKiBmY19mY3BfcGt0X3NlbmQoKSAtIHNlbmQgYSBmY3AgcGFja2V0IHRvIHRoZSBsb3dlciBsZXZlbC4KICAqIEBscDoJCWZjIGxwb3J0CiAgKiBAZnNwOglmYyBwYWNrZXQuCiAgKgpAQCAtMTYyMSw3ICsxNjIwLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGZjX2ZjcF9scG9ydF9xdWV1ZV9yZWFkeShzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewogCS8qIGxvY2sgPyAqLwotCXJldHVybiAobHAtPnN0YXRlID09IExQT1JUX1NUX1JFQURZKSAmJiAobHAtPmxpbmtfc3RhdHVzICYgRkNfTElOS19VUCk7CisJcmV0dXJuIChscC0+c3RhdGUgPT0gTFBPUlRfU1RfUkVBRFkpICYmIGxwLT5saW5rX3VwICYmICFscC0+cWZ1bGw7CiB9CiAKIC8qKgpAQCAtMTcyNyw3ICsxNzI2LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfcXVldWVjb21tYW5kKTsKIAogLyoqCi0gKiBmY19pb19jb21wbCAtICBIYW5kbGUgcmVzcG9uc2VzIGZvciBjb21wbGV0ZWQgY29tbWFuZHMKKyAqIGZjX2lvX2NvbXBsKCkgLSAgSGFuZGxlIHJlc3BvbnNlcyBmb3IgY29tcGxldGVkIGNvbW1hbmRzCiAgKiBAZnNwOglzY3NpIHBhY2tldAogICoKICAqIFRyYW5zbGF0ZXMgYSBlcnJvciB0byBhIExpbnV4IFNDU0kgZXJyb3IuCkBAIC0xODEwLDEyICsxODA5LDEyIEBACiAJCXNjX2NtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwogCQlicmVhazsKIAljYXNlIEZDX0RBVEFfVU5EUlVOOgotCQlpZiAoZnNwLT5jZGJfc3RhdHVzID09IDApIHsKKwkJaWYgKChmc3AtPmNkYl9zdGF0dXMgPT0gMCkgJiYgIShmc3AtPnJlcV9mbGFncyAmIEZDX1NSQl9SRUFEKSkgewogCQkJLyoKIAkJCSAqIHNjc2kgc3RhdHVzIGlzIGdvb2QgYnV0IHRyYW5zcG9ydCBsZXZlbAotCQkJICogdW5kZXJydW4uIGZvciByZWFkIGl0IHNob3VsZCBiZSBhbiBlcnJvcj8/CisJCQkgKiB1bmRlcnJ1bi4KIAkJCSAqLwotCQkJc2NfY21kLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IGZzcC0+Y2RiX3N0YXR1czsKKwkJCXNjX2NtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIHNjc2kgZ290IHVuZGVycnVuLCB0aGlzIGlzIGFuIGVycm9yCkBAIC0xODU3LDcgKzE4NTYsNyBAQAogfQogCiAvKioKLSAqIGZjX2ZjcF9jb21wbGV0ZSAtIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2YgYSBmY3AgcGFja2V0CisgKiBmY19mY3BfY29tcGxldGUoKSAtIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2YgYSBmY3AgcGFja2V0CiAgKiBAZnNwOglmY3AgcGFja2V0CiAgKgogICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgaWYgYSBmc3AgdGltZXIgaXMgcGVuZGluZy4KQEAgLTE4NzQsOSArMTg3MywxMCBAQAogRVhQT1JUX1NZTUJPTChmY19mY3BfY29tcGxldGUpOwogCiAvKioKLSAqIGZjX2VoX2Fib3J0IC0gQWJvcnQgYSBjb21tYW5kLi4uZnJvbSBzY3NpIGhvc3QgdGVtcGxhdGUKKyAqIGZjX2VoX2Fib3J0KCkgLSBBYm9ydCBhIGNvbW1hbmQKICAqIEBzY19jbWQ6CXNjc2kgY29tbWFuZCB0byBhYm9ydAogICoKKyAqIEZyb20gc2NzaSBob3N0IHRlbXBsYXRlLgogICogc2VuZCBBQlRTIHRvIHRoZSB0YXJnZXQgZGV2aWNlICBhbmQgd2FpdCBmb3IgdGhlIHJlc3BvbnNlCiAgKiBzY19jbWQgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZC4KICAqLwpAQCAtMTg5MCw3ICsxODkwLDcgQEAKIAlscCA9IHNob3N0X3ByaXYoc2NfY21kLT5kZXZpY2UtPmhvc3QpOwogCWlmIChscC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkpCiAJCXJldHVybiByYzsKLQllbHNlIGlmICghKGxwLT5saW5rX3N0YXR1cyAmIEZDX0xJTktfVVApKQorCWVsc2UgaWYgKCFscC0+bGlua191cCkKIAkJcmV0dXJuIHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUobHAtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtMTkyMCw3ICsxOTIwLDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfZWhfYWJvcnQpOwogCiAvKioKLSAqIGZjX2VoX2RldmljZV9yZXNldDogUmVzZXQgYSBzaW5nbGUgTFVOCisgKiBmY19laF9kZXZpY2VfcmVzZXQoKSBSZXNldCBhIHNpbmdsZSBMVU4KICAqIEBzY19jbWQ6CXNjc2kgY29tbWFuZAogICoKICAqIFNldCBmcm9tIHNjc2kgaG9zdCB0ZW1wbGF0ZSB0byBzZW5kIHRtIGNtZCB0byB0aGUgdGFyZ2V0IGFuZCB3YWl0IGZvciB0aGUKQEAgLTE5NzMsNyArMTk3Myw3IEBACiBFWFBPUlRfU1lNQk9MKGZjX2VoX2RldmljZV9yZXNldCk7CiAKIC8qKgotICogZmNfZWhfaG9zdF9yZXNldCAtIFRoZSByZXNldCBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBwb3J0cyBvbiB0aGUgaG9zdC4KKyAqIGZjX2VoX2hvc3RfcmVzZXQoKSAtIFRoZSByZXNldCBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBwb3J0cyBvbiB0aGUgaG9zdC4KICAqIEBzY19jbWQ6CXNjc2kgY29tbWFuZAogICovCiBpbnQgZmNfZWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzY19jbWQpCkBAIC0xOTk5LDcgKzE5OTksNyBAQAogRVhQT1JUX1NZTUJPTChmY19laF9ob3N0X3Jlc2V0KTsKIAogLyoqCi0gKiBmY19zbGF2ZV9hbGxvYyAtIGNvbmZpZ3VyZSBxdWV1ZSBkZXB0aAorICogZmNfc2xhdmVfYWxsb2MoKSAtIGNvbmZpZ3VyZSBxdWV1ZSBkZXB0aAogICogQHNkZXY6CXNjc2kgZGV2aWNlCiAgKgogICogQ29uZmlndXJlcyBxdWV1ZSBkZXB0aCBiYXNlZCBvbiBob3N0J3MgY21kX3Blcl9sZW4uIElmIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKaW5kZXggMGI5YmRiMS4uMmFlNTBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3Jwb3J0X2NhbGxiYWNrIC0gRXZlbnQgaGFuZGxlciBmb3IgcnBvcnQgZXZlbnRzCisgKiBmY19scG9ydF9ycG9ydF9jYWxsYmFjaygpIC0gRXZlbnQgaGFuZGxlciBmb3IgcnBvcnQgZXZlbnRzCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB3aGljaCBpcyByZWNlaXZpbmcgdGhlIGV2ZW50CiAgKiBAcnBvcnQ6IFRoZSBycG9ydCB3aGljaCB0aGUgZXZlbnQgaGFzIG9jY3VyZWQgb24KICAqIEBldmVudDogVGhlIGV2ZW50IHRoYXQgb2NjdXJlZApAQCAtMTk1LDcgKzE5NSw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfc3RhdGUgLSBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyB0aGUgbHBvcnQncyBzdGF0ZQorICogZmNfbHBvcnRfc3RhdGUoKSAtIFJldHVybiBhIHN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSBscG9ydCdzIHN0YXRlCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB3aG9zZSBzdGF0ZSBpcyB0byBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcKICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmZjX2xwb3J0X3N0YXRlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCkBAIC0yMDksNyArMjA5LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9wdHBfc2V0dXAgLSBDcmVhdGUgYW4gcnBvcnQgZm9yIHBvaW50LXRvLXBvaW50IG1vZGUKKyAqIGZjX2xwb3J0X3B0cF9zZXR1cCgpIC0gQ3JlYXRlIGFuIHJwb3J0IGZvciBwb2ludC10by1wb2ludCBtb2RlCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB0byBhdHRhY2ggdGhlIHB0cCBycG9ydCB0bwogICogQGZpZDogVGhlIEZJRCBvZiB0aGUgcHRwIHJwb3J0CiAgKiBAcmVtb3RlX3d3cG46IFRoZSBXV1BOIG9mIHRoZSBwdHAgcnBvcnQKQEAgLTIzMiw3ICsyMzIsNyBAQAogCQlscG9ydC0+cHRwX3JwID0gTlVMTDsKIAl9CiAKLQlscG9ydC0+cHRwX3JwID0gZmNfcnBvcnRfcm9ndWVfY3JlYXRlKCZkcCk7CisJbHBvcnQtPnB0cF9ycCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUoJmRwKTsKIAogCWxwb3J0LT50dC5ycG9ydF9sb2dpbihscG9ydC0+cHRwX3JwKTsKIApAQCAtMjUwLDcgKzI1MCw3IEBACiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscCA9IHNob3N0X3ByaXYoc2hvc3QpOwogCi0JaWYgKChscC0+bGlua19zdGF0dXMgJiBGQ19MSU5LX1VQKSA9PSBGQ19MSU5LX1VQKQorCWlmIChscC0+bGlua191cCkKIAkJZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9PTkxJTkU7CiAJZWxzZQogCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX09GRkxJTkU7CkBAIC0zNTEsNyArMzUxLDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X3JsaXJfcmVxIC0gSGFuZGxlIHJlY2VpdmVkIFJlZ2lzdGVyZWQgTGluayBJbmNpZGVudCBSZXBvcnQuCisgKiBmY19scG9ydF9yZWN2X3JsaXJfcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgUmVnaXN0ZXJlZCBMaW5rIEluY2lkZW50IFJlcG9ydC4KICAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgUkxJUgogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBSTElSIGV4Y2hhbmdlCiAgKiBAZnA6IFJMSVIgcmVxdWVzdCBmcmFtZQpAQCAtMzcwLDcgKzM3MCw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfcmVjdl9lY2hvX3JlcSAtIEhhbmRsZSByZWNlaXZlZCBFQ0hPIHJlcXVlc3QKKyAqIGZjX2xwb3J0X3JlY3ZfZWNob19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBFQ0hPIHJlcXVlc3QKICAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgRUNITwogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBFQ0hPIGV4Y2hhbmdlCiAgKiBAZnA6IEVDSE8gcmVxdWVzdCBmcmFtZQpAQCAtNDEyLDcgKzQxMiw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfcmVjdl9lY2hvX3JlcSAtIEhhbmRsZSByZWNlaXZlZCBSZXF1ZXN0IE5vZGUgSUQgZGF0YSByZXF1ZXN0CisgKiBmY19scG9ydF9yZWN2X2VjaG9fcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgUmVxdWVzdCBOb2RlIElEIGRhdGEgcmVxdWVzdAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBSTklECiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFJOSUQgZXhjaGFuZ2UKICAqIEBmcDogUk5JRCByZXF1ZXN0IGZyYW1lCkBAIC00NzksNyArNDc5LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X2FkaXNjX3JlcSAtIEhhbmRsZSByZWNlaXZlZCBBZGRyZXNzIERpc2NvdmVyeSBSZXF1ZXN0CisgKiBmY19scG9ydF9yZWN2X2FkaXNjX3JlcSgpIC0gSGFuZGxlIHJlY2VpdmVkIEFkZHJlc3MgRGlzY292ZXJ5IFJlcXVlc3QKICAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgQURJU0MKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgQURJU0MgZXhjaGFuZ2UKICAqIEBmcDogQURJU0MgcmVxdWVzdCBmcmFtZQpAQCAtNTI5LDcgKzUyOSw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfcmVjdl9sb2dvX3JlcSAtIEhhbmRsZSByZWNlaXZlZCBmYWJyaWMgTE9HTyByZXF1ZXN0CisgKiBmY19scG9ydF9yZWN2X2xvZ29fcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgZmFicmljIExPR08gcmVxdWVzdAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBMT0dPCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIExPR08gZXhjaGFuZ2UKICAqIEBmcDogTE9HTyByZXF1ZXN0IGZyYW1lCkBAIC01NDYsNyArNTQ2LDcgQEAKIH0KIAogLyoqCi0gKiBmY19mYWJyaWNfbG9naW4gLSBTdGFydCB0aGUgbHBvcnQgc3RhdGUgbWFjaGluZQorICogZmNfZmFicmljX2xvZ2luKCkgLSBTdGFydCB0aGUgbHBvcnQgc3RhdGUgbWFjaGluZQogICogQGxwb3J0OiBUaGUgbHBvcnQgdGhhdCBzaG91bGQgbG9nIGludG8gdGhlIGZhYnJpYwogICoKICAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZApAQCAtNTY4LDcgKzU2OCw3IEBACiBFWFBPUlRfU1lNQk9MKGZjX2ZhYnJpY19sb2dpbik7CiAKIC8qKgotICogZmNfbGlua3VwIC0gSGFuZGxlciBmb3IgdHJhbnNwb3J0IGxpbmt1cCBldmVudHMKKyAqIGZjX2xpbmt1cCgpIC0gSGFuZGxlciBmb3IgdHJhbnNwb3J0IGxpbmt1cCBldmVudHMKICAqIEBscG9ydDogVGhlIGxwb3J0IHdob3NlIGxpbmsgaXMgdXAKICAqLwogdm9pZCBmY19saW5rdXAoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKQEAgLTU3Nyw4ICs1NzcsOCBAQAogCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSk7CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotCWlmICgobHBvcnQtPmxpbmtfc3RhdHVzICYgRkNfTElOS19VUCkgIT0gRkNfTElOS19VUCkgewotCQlscG9ydC0+bGlua19zdGF0dXMgfD0gRkNfTElOS19VUDsKKwlpZiAoIWxwb3J0LT5saW5rX3VwKSB7CisJCWxwb3J0LT5saW5rX3VwID0gMTsKIAogCQlpZiAobHBvcnQtPnN0YXRlID09IExQT1JUX1NUX1JFU0VUKQogCQkJZmNfbHBvcnRfZW50ZXJfZmxvZ2kobHBvcnQpOwpAQCAtNTg4LDcgKzU4OCw3IEBACiBFWFBPUlRfU1lNQk9MKGZjX2xpbmt1cCk7CiAKIC8qKgotICogZmNfbGlua2Rvd24gLSBIYW5kbGVyIGZvciB0cmFuc3BvcnQgbGlua2Rvd24gZXZlbnRzCisgKiBmY19saW5rZG93bigpIC0gSGFuZGxlciBmb3IgdHJhbnNwb3J0IGxpbmtkb3duIGV2ZW50cwogICogQGxwb3J0OiBUaGUgbHBvcnQgd2hvc2UgbGluayBpcyBkb3duCiAgKi8KIHZvaWQgZmNfbGlua2Rvd24oc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKQEAgLTU5Nyw4ICs1OTcsOCBAQAogCUZDX0RFQlVHX0xQT1JUKCJMaW5rIGlzIGRvd24gZm9yIHBvcnQgKCU2eClcbiIsCiAJCSAgICAgICBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpKTsKIAotCWlmICgobHBvcnQtPmxpbmtfc3RhdHVzICYgRkNfTElOS19VUCkgPT0gRkNfTElOS19VUCkgewotCQlscG9ydC0+bGlua19zdGF0dXMgJj0gfihGQ19MSU5LX1VQKTsKKwlpZiAobHBvcnQtPmxpbmtfdXApIHsKKwkJbHBvcnQtPmxpbmtfdXAgPSAwOwogCQlmY19scG9ydF9lbnRlcl9yZXNldChscG9ydCk7CiAJCWxwb3J0LT50dC5mY3BfY2xlYW51cChscG9ydCk7CiAJfQpAQCAtNjA3LDQ4ICs2MDcsMjUgQEAKIEVYUE9SVF9TWU1CT0woZmNfbGlua2Rvd24pOwogCiAvKioKLSAqIGZjX3BhdXNlIC0gUGF1c2UgdGhlIGZsb3cgb2YgZnJhbWVzCi0gKiBAbHBvcnQ6IFRoZSBscG9ydCB0byBiZSBwYXVzZWQKLSAqLwotdm9pZCBmY19wYXVzZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQotewotCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JbHBvcnQtPmxpbmtfc3RhdHVzIHw9IEZDX1BBVVNFOwotCW11dGV4X3VubG9jaygmbHBvcnQtPmxwX211dGV4KTsKLX0KLUVYUE9SVF9TWU1CT0woZmNfcGF1c2UpOwotCi0vKioKLSAqIGZjX3VucGF1c2UgLSBVbnBhdXNlIHRoZSBmbG93IG9mIGZyYW1lcwotICogQGxwb3J0OiBUaGUgbHBvcnQgdG8gYmUgdW5wYXVzZWQKLSAqLwotdm9pZCBmY191bnBhdXNlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCi17Ci0JbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKLQlscG9ydC0+bGlua19zdGF0dXMgJj0gfihGQ19QQVVTRSk7Ci0JbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotfQotRVhQT1JUX1NZTUJPTChmY191bnBhdXNlKTsKLQotLyoqCi0gKiBmY19mYWJyaWNfbG9nb2ZmIC0gTG9nb3V0IG9mIHRoZSBmYWJyaWMKKyAqIGZjX2ZhYnJpY19sb2dvZmYoKSAtIExvZ291dCBvZiB0aGUgZmFicmljCiAgKiBAbHBvcnQ6CSAgICAgIGZjX2xwb3J0IHBvaW50ZXIgdG8gbG9nb2ZmIHRoZSBmYWJyaWMKICAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKgkwIGZvciBzdWNjZXNzLCAtMSBmb3IgZmFpbHVyZQotICoqLworICovCiBpbnQgZmNfZmFicmljX2xvZ29mZihzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCWxwb3J0LT50dC5kaXNjX3N0b3BfZmluYWwobHBvcnQpOwogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAJZmNfbHBvcnRfZW50ZXJfbG9nbyhscG9ydCk7CiAJbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbHBvcnQtPnJldHJ5X3dvcmspOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmY19mYWJyaWNfbG9nb2ZmKTsKIAogLyoqCi0gKiBmY19scG9ydF9kZXN0cm95IC0gdW5yZWdpc3RlciBhIGZjX2xwb3J0CisgKiBmY19scG9ydF9kZXN0cm95KCkgLSB1bnJlZ2lzdGVyIGEgZmNfbHBvcnQKICAqIEBscG9ydDoJICAgICAgZmNfbHBvcnQgcG9pbnRlciB0byB1bnJlZ2lzdGVyCiAgKgogICogUmV0dXJuIHZhbHVlOgpAQCAtNjU4LDI2ICs2MzUsMjUgQEAKICAqIGNsZWFuLXVwIGFsbCB0aGUgYWxsb2NhdGVkIG1lbW9yeQogICogYW5kIGZyZWUgdXAgb3RoZXIgc3lzdGVtIHJlc291cmNlcy4KICAqCi0gKiovCisgKi8KIGludCBmY19scG9ydF9kZXN0cm95KHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7CiAJbHBvcnQtPnR0LmZyYW1lX3NlbmQgPSBmY19mcmFtZV9kcm9wOwogCWxwb3J0LT50dC5mY3BfYWJvcnRfaW8obHBvcnQpOwotCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydC0+ZW1wLCAwLCAwKTsKKwlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIDApOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmY19scG9ydF9kZXN0cm95KTsKIAogLyoqCi0gKiBmY19zZXRfbWZzIC0gc2V0cyB1cCB0aGUgbWZzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmY19scG9ydAorICogZmNfc2V0X21mcygpIC0gc2V0cyB1cCB0aGUgbWZzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmY19scG9ydAogICogQGxwb3J0OiBmY19scG9ydCBwb2ludGVyIHRvIHVucmVnaXN0ZXIKICAqIEBtZnM6IHRoZSBuZXcgbWZzIGZvciBmY19scG9ydAogICoKICAqIFNldCBtZnMgZm9yIHRoZSBnaXZlbiBmY19scG9ydCB0byB0aGUgbmV3IG1mcy4KICAqCiAgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MKLSAqCi0gKiovCisgKi8KIGludCBmY19zZXRfbWZzKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHUzMiBtZnMpCiB7CiAJdW5zaWduZWQgaW50IG9sZF9tZnM7CkBAIC03MDYsNyArNjgyLDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfc2V0X21mcyk7CiAKIC8qKgotICogZmNfbHBvcnRfZGlzY19jYWxsYmFjayAtIENhbGxiYWNrIGZvciBkaXNjb3ZlcnkgZXZlbnRzCisgKiBmY19scG9ydF9kaXNjX2NhbGxiYWNrKCkgLSBDYWxsYmFjayBmb3IgZGlzY292ZXJ5IGV2ZW50cwogICogQGxwb3J0OiBGQyBsb2NhbCBwb3J0CiAgKiBAZXZlbnQ6IFRoZSBkaXNjb3ZlcnkgZXZlbnQKICAqLwpAQCAtNzMxLDcgKzcwNyw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcmVhZHkgLSBFbnRlciB0aGUgcmVhZHkgc3RhdGUgYW5kIHN0YXJ0IGRpc2NvdmVyeQorICogZmNfcnBvcnRfZW50ZXJfcmVhZHkoKSAtIEVudGVyIHRoZSByZWFkeSBzdGF0ZSBhbmQgc3RhcnQgZGlzY292ZXJ5CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0aGF0IGlzIHJlYWR5CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC03NDgsNyArNzI0LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X2Zsb2dpX3JlcSAtIFJlY2VpdmUgYSBGTE9HSSByZXF1ZXN0CisgKiBmY19scG9ydF9yZWN2X2Zsb2dpX3JlcSgpIC0gUmVjZWl2ZSBhIEZMT0dJIHJlcXVlc3QKICAqIEBzcF9pbjogVGhlIHNlcXVlbmNlIHRoZSBGTE9HSSBpcyBvbgogICogQHJ4X2ZwOiBUaGUgZnJhbWUgdGhlIEZMT0dJIGlzIGluCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB0aGF0IHJlY2lldmVkIHRoZSByZXF1ZXN0CkBAIC04MzgsNyArODE0LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X3JlcSAtIFRoZSBnZW5lcmljIGxwb3J0IHJlcXVlc3QgaGFuZGxlcgorICogZmNfbHBvcnRfcmVjdl9yZXEoKSAtIFRoZSBnZW5lcmljIGxwb3J0IHJlcXVlc3QgaGFuZGxlcgogICogQGxwb3J0OiBUaGUgbHBvcnQgdGhhdCByZWNlaXZlZCB0aGUgcmVxdWVzdAogICogQHNwOiBUaGUgc2VxdWVuY2UgdGhlIHJlcXVlc3QgaXMgb24KICAqIEBmcDogVGhlIGZyYW1lIHRoZSByZXF1ZXN0IGlzIGluCkBAIC05MzQsNyArOTEwLDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZXNldCAtIFJlc2V0IGFuIGxwb3J0CisgKiBmY19scG9ydF9yZXNldCgpIC0gUmVzZXQgYW4gbHBvcnQKICAqIEBscG9ydDogVGhlIGxwb3J0IHdoaWNoIHNob3VsZCBiZSByZXNldAogICoKICAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCB0aGUKQEAgLTk0Miw2ICs5MTgsNyBAQAogICovCiBpbnQgZmNfbHBvcnRfcmVzZXQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmxwb3J0LT5yZXRyeV93b3JrKTsKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCWZjX2xwb3J0X2VudGVyX3Jlc2V0KGxwb3J0KTsKIAltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7CkBAIC05NTAsNyArOTI3LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfbHBvcnRfcmVzZXQpOwogCiAvKioKLSAqIGZjX3Jwb3J0X2VudGVyX3Jlc2V0IC0gUmVzZXQgdGhlIGxvY2FsIHBvcnQKKyAqIGZjX3Jwb3J0X2VudGVyX3Jlc2V0KCkgLSBSZXNldCB0aGUgbG9jYWwgcG9ydAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgdG8gYmUgcmVzZXQKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTk3MywxNiArOTUwLDE2IEBACiAKIAlscG9ydC0+dHQuZGlzY19zdG9wKGxwb3J0KTsKIAotCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydC0+ZW1wLCAwLCAwKTsKKwlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIDApOwogCWZjX2hvc3RfZmFicmljX25hbWUobHBvcnQtPmhvc3QpID0gMDsKIAlmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpID0gMDsKIAotCWlmICgobHBvcnQtPmxpbmtfc3RhdHVzICYgRkNfTElOS19VUCkgPT0gRkNfTElOS19VUCkKKwlpZiAobHBvcnQtPmxpbmtfdXApCiAJCWZjX2xwb3J0X2VudGVyX2Zsb2dpKGxwb3J0KTsKIH0KIAogLyoqCi0gKiBmY19scG9ydF9lcnJvciAtIEhhbmRsZXIgZm9yIGFueSBlcnJvcnMKKyAqIGZjX2xwb3J0X2Vycm9yKCkgLSBIYW5kbGVyIGZvciBhbnkgZXJyb3JzCiAgKiBAbHBvcnQ6IFRoZSBmY19scG9ydCBvYmplY3QKICAqIEBmcDogVGhlIGZyYW1lIHBvaW50ZXIKICAqCkBAIC0xMDI5LDggKzEwMDYsOCBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3JmdF9pZF9yZXNwIC0gSGFuZGxlIHJlc3BvbnNlIHRvIFJlZ2lzdGVyIEZpYnJlCi0gKgkJCSAgQ2hhbm5lbCBUeXBlcyBieSBJRCAoUlBOX0lEKSByZXF1ZXN0CisgKiBmY19scG9ydF9yZnRfaWRfcmVzcCgpIC0gSGFuZGxlIHJlc3BvbnNlIHRvIFJlZ2lzdGVyIEZpYnJlCisgKgkJCSAgICBDaGFubmVsIFR5cGVzIGJ5IElEIChSUE5fSUQpIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBSUE5fSUQgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBscF9hcmc6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCkBAIC0xMDUzLDE3ICsxMDMwLDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBSRlRfSUQgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9SRlRfSUQpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFJGVF9JRCByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAljdCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmN0KSk7CiAKQEAgLTEwODEsOCArMTA1OCw4IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfcnBuX2lkX3Jlc3AgLSBIYW5kbGUgcmVzcG9uc2UgdG8gUmVnaXN0ZXIgUG9ydAotICoJCQkgIE5hbWUgYnkgSUQgKFJQTl9JRCkgcmVxdWVzdAorICogZmNfbHBvcnRfcnBuX2lkX3Jlc3AoKSAtIEhhbmRsZSByZXNwb25zZSB0byBSZWdpc3RlciBQb3J0CisgKgkJCSAgICBOYW1lIGJ5IElEIChSUE5fSUQpIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBSUE5fSUQgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBscF9hcmc6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCkBAIC0xMTA1LDE3ICsxMDgyLDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBSUE5fSUQgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9SUE5fSUQpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFJQTl9JRCByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAljdCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmN0KSk7CiAJaWYgKGZoICYmIGN0ICYmIGZoLT5maF90eXBlID09IEZDX1RZUEVfQ1QgJiYKQEAgLTExMzMsNyArMTExMCw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfc2NyX3Jlc3AgLSBIYW5kbGUgcmVzcG9uc2UgdG8gU3RhdGUgQ2hhbmdlIFJlZ2lzdGVyIChTQ1IpIHJlcXVlc3QKKyAqIGZjX2xwb3J0X3Njcl9yZXNwKCkgLSBIYW5kbGUgcmVzcG9uc2UgdG8gU3RhdGUgQ2hhbmdlIFJlZ2lzdGVyIChTQ1IpIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBTQ1IgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBscF9hcmc6IEZpYnJlIENoYW5uZWwgbHBvcnQgcG9ydCBpbnN0YW5jZSB0aGF0IHNlbnQgdGhlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0CkBAIC0xMTU1LDE3ICsxMTMyLDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBTQ1IgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9TQ1IpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFNDUiByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQykKIAkJZmNfbHBvcnRfZW50ZXJfcmVhZHkobHBvcnQpOwpAQCAtMTE3OSw3ICsxMTU2LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9lbnRlcl9zY3IgLSBTZW5kIGEgU3RhdGUgQ2hhbmdlIFJlZ2lzdGVyIChTQ1IpIHJlcXVlc3QKKyAqIGZjX2xwb3J0X2VudGVyX3NjcigpIC0gU2VuZCBhIFN0YXRlIENoYW5nZSBSZWdpc3RlciAoU0NSKSByZXF1ZXN0CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byByZWdpc3RlciBmb3Igc3RhdGUgY2hhbmdlcwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtMTIwNiw3ICsxMTgzLDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9lbnRlcl9yZnRfaWQgLSBSZWdpc3RlciBGQzQtdHlwZXMgd2l0aCB0aGUgbmFtZSBzZXJ2ZXIKKyAqIGZjX2xwb3J0X2VudGVyX3JmdF9pZCgpIC0gUmVnaXN0ZXIgRkM0LXR5cGVzIHdpdGggdGhlIG5hbWUgc2VydmVyCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byByZWdpc3RlcgogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtMTI0OCw3ICsxMjI1LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9yZnRfaWQgLSBSZWdpc3RlciBwb3J0IG5hbWUgd2l0aCB0aGUgbmFtZSBzZXJ2ZXIKKyAqIGZjX3Jwb3J0X2VudGVyX3JmdF9pZCgpIC0gUmVnaXN0ZXIgcG9ydCBuYW1lIHdpdGggdGhlIG5hbWUgc2VydmVyCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byByZWdpc3RlcgogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtMTI4MSw3ICsxMjU4LDcgQEAKIH07CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfZG5zIC0gQ3JlYXRlIGEgcnBvcnQgdG8gdGhlIG5hbWUgc2VydmVyCisgKiBmY19ycG9ydF9lbnRlcl9kbnMoKSAtIENyZWF0ZSBhIHJwb3J0IHRvIHRoZSBuYW1lIHNlcnZlcgogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVxdWVzdGluZyBhIHJwb3J0IGZvciB0aGUgbmFtZSBzZXJ2ZXIKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTEzMDQsNyArMTI4MSw3IEBACiAKIAlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfRE5TKTsKIAotCXJwb3J0ID0gZmNfcnBvcnRfcm9ndWVfY3JlYXRlKCZkcCk7CisJcnBvcnQgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKCZkcCk7CiAJaWYgKCFycG9ydCkKIAkJZ290byBlcnI7CiAKQEAgLTEzMTgsNyArMTI5NSw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfdGltZW91dCAtIEhhbmRsZXIgZm9yIHRoZSByZXRyeV93b3JrIHRpbWVyLgorICogZmNfbHBvcnRfdGltZW91dCgpIC0gSGFuZGxlciBmb3IgdGhlIHJldHJ5X3dvcmsgdGltZXIuCiAgKiBAd29yazogVGhlIHdvcmsgc3RydWN0IG9mIHRoZSBmY19scG9ydAogICovCiBzdGF0aWMgdm9pZCBmY19scG9ydF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTEzNTksNyArMTMzNiw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfbG9nb19yZXNwIC0gSGFuZGxlIHJlc3BvbnNlIHRvIExPR08gcmVxdWVzdAorICogZmNfbHBvcnRfbG9nb19yZXNwKCkgLSBIYW5kbGUgcmVzcG9uc2UgdG8gTE9HTyByZXF1ZXN0CiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gTE9HTyBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQogICogQGxwX2FyZzogRmlicmUgQ2hhbm5lbCBscG9ydCBwb3J0IGluc3RhbmNlIHRoYXQgc2VudCB0aGUgTE9HTyByZXF1ZXN0CkBAIC0xMzgxLDE3ICsxMzU4LDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBMT0dPIHJlc3BvbnNlXG4iKTsKIAorCWlmIChJU19FUlIoZnApKSB7CisJCWZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7CisJCWdvdG8gZXJyOworCX0KKwogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfTE9HTykgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgTE9HTyByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQykKIAkJZmNfbHBvcnRfZW50ZXJfcmVzZXQobHBvcnQpOwpAQCAtMTQwNSw3ICsxMzgyLDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9sb2dvIC0gTG9nb3V0IG9mIHRoZSBmYWJyaWMKKyAqIGZjX3Jwb3J0X2VudGVyX2xvZ28oKSAtIExvZ291dCBvZiB0aGUgZmFicmljCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byBiZSBsb2dnZWQgb3V0CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC0xNDM3LDcgKzE0MTQsNyBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X2Zsb2dpX3Jlc3AgLSBIYW5kbGUgcmVzcG9uc2UgdG8gRkxPR0kgcmVxdWVzdAorICogZmNfbHBvcnRfZmxvZ2lfcmVzcCgpIC0gSGFuZGxlIHJlc3BvbnNlIHRvIEZMT0dJIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBGTE9HSSBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQogICogQGxwX2FyZzogRmlicmUgQ2hhbm5lbCBscG9ydCBwb3J0IGluc3RhbmNlIHRoYXQgc2VudCB0aGUgRkxPR0kgcmVxdWVzdApAQCAtMTQ2NSwxNyArMTQ0MiwxNyBAQAogCiAJRkNfREVCVUdfTFBPUlQoIlJlY2VpdmVkIGEgRkxPR0kgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9GTE9HSSkgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgRkxPR0kgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7Ci0JCWdvdG8gZXJyOwotCX0KLQogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAJZGlkID0gbnRvaDI0KGZoLT5maF9kX2lkKTsKIAlpZiAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkgPT0gRUxTX0xTX0FDQyAmJiBkaWQgIT0gMCkgewpAQCAtMTUzMiw3ICsxNTA5LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9mbG9naSAtIFNlbmQgYSBGTE9HSSByZXF1ZXN0IHRvIHRoZSBmYWJyaWMgbWFuYWdlcgorICogZmNfcnBvcnRfZW50ZXJfZmxvZ2koKSAtIFNlbmQgYSBGTE9HSSByZXF1ZXN0IHRvIHRoZSBmYWJyaWMgbWFuYWdlcgogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgdG8gYmUgbG9nZ2VkIGluIHRvIHRoZSBmYWJyaWMKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKaW5kZXggZTc4MGQ4Yy4uZGFlNjUxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKQEAgLTgxLDYgKzgxLDcgQEAKIAkJCQkgICBzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICopOwogc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3Ioc3RydWN0IGZjX3Jwb3J0ICosIHN0cnVjdCBmY19mcmFtZSAqKTsKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KHN0cnVjdCBmY19ycG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CiBzdGF0aWMgdm9pZCBmY19ycG9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmZjX3Jwb3J0X3N0YXRlX25hbWVzW10gPSB7CkBAIC0xNDUsNyArMTQ2LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9zdGF0ZSAtIHJldHVybiBhIHN0cmluZyBmb3IgdGhlIHN0YXRlIHRoZSBycG9ydCBpcyBpbgorICogZmNfcnBvcnRfc3RhdGUoKSAtIHJldHVybiBhIHN0cmluZyBmb3IgdGhlIHN0YXRlIHRoZSBycG9ydCBpcyBpbgogICogQHJwb3J0OiBUaGUgcnBvcnQgd2hvc2Ugc3RhdGUgd2Ugd2FudCB0byBnZXQgYSBzdHJpbmcgZm9yCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpmY19ycG9ydF9zdGF0ZShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQpAQCAtMTYwLDcgKzE2MSw3IEBACiB9CiAKIC8qKgotICogZmNfc2V0X3Jwb3J0X2xvc3NfdG1vIC0gU2V0IHRoZSByZW1vdGUgcG9ydCBsb3NzIHRpbWVvdXQgaW4gc2Vjb25kcy4KKyAqIGZjX3NldF9ycG9ydF9sb3NzX3RtbygpIC0gU2V0IHRoZSByZW1vdGUgcG9ydCBsb3NzIHRpbWVvdXQgaW4gc2Vjb25kcy4KICAqIEBycG9ydDogUG9pbnRlciB0byBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHN0cnVjdHVyZQogICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwogICovCkBAIC0xNzQsMTIgKzE3NSwxMiBAQAogRVhQT1JUX1NZTUJPTChmY19zZXRfcnBvcnRfbG9zc190bW8pOwogCiAvKioKLSAqIGZjX3Bsb2dpX2dldF9tYXhmcmFtZSAtIEdldCBtYXggcGF5bG9hZCBmcm9tIHRoZSBjb21tb24gc2VydmljZSBwYXJhbWV0ZXJzCisgKiBmY19wbG9naV9nZXRfbWF4ZnJhbWUoKSAtIEdldCBtYXggcGF5bG9hZCBmcm9tIHRoZSBjb21tb24gc2VydmljZSBwYXJhbWV0ZXJzCiAgKiBAZmxwOiBGTE9HSSBwYXlsb2FkIHN0cnVjdHVyZQogICogQG1heHZhbDogdXBwZXIgbGltaXQsIG1heSBiZSBsZXNzIHRoYW4gd2hhdCBpcyBpbiB0aGUgc2VydmljZSBwYXJhbWV0ZXJzCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWZjX3Bsb2dpX2dldF9tYXhmcmFtZShzdHJ1Y3QgZmNfZWxzX2Zsb2dpICpmbHAsIHVuc2lnbmVkIGludCBtYXh2YWwpCitzdGF0aWMgdW5zaWduZWQgaW50IGZjX3Bsb2dpX2dldF9tYXhmcmFtZShzdHJ1Y3QgZmNfZWxzX2Zsb2dpICpmbHAsCisJCQkJCSAgdW5zaWduZWQgaW50IG1heHZhbCkKIHsKIAl1bnNpZ25lZCBpbnQgbWZzOwogCkBAIC0xOTcsNyArMTk4LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9zdGF0ZV9lbnRlciAtIENoYW5nZSB0aGUgcnBvcnQncyBzdGF0ZQorICogZmNfcnBvcnRfc3RhdGVfZW50ZXIoKSAtIENoYW5nZSB0aGUgcnBvcnQncyBzdGF0ZQogICogQHJwb3J0OiBUaGUgcnBvcnQgd2hvc2Ugc3RhdGUgc2hvdWxkIGNoYW5nZQogICogQG5ldzogVGhlIG5ldyBzdGF0ZSBvZiB0aGUgcnBvcnQKICAqCkBAIC0yMTQsNiArMjE1LDcgQEAKIAogc3RhdGljIHZvaWQgZmNfcnBvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CisJdTMyIHBvcnRfaWQ7CiAJc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2LCBldmVudF93b3JrKTsKIAllbnVtIGZjX3Jwb3J0X2V2ZW50IGV2ZW50OwpAQCAtMjc5LDE0ICsyODEsMTggQEAKIAkJCXJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2sobHBvcnQsIHJwb3J0LCBldmVudCk7CiAJCWlmICh0cmFuc19zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfUk9HVUUpCiAJCQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKLQkJZWxzZQorCQllbHNlIHsKKwkJCXBvcnRfaWQgPSBycG9ydC0+cG9ydF9pZDsKIAkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShycG9ydCk7CisJCQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIHBvcnRfaWQpOworCQkJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCBwb3J0X2lkLCAwKTsKKwkJfQogCX0gZWxzZQogCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiB9CiAKIC8qKgotICogZmNfcnBvcnRfbG9naW4gLSBTdGFydCB0aGUgcmVtb3RlIHBvcnQgbG9naW4gc3RhdGUgbWFjaGluZQorICogZmNfcnBvcnRfbG9naW4oKSAtIFN0YXJ0IHRoZSByZW1vdGUgcG9ydCBsb2dpbiBzdGF0ZSBtYWNoaW5lCiAgKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKICAqCiAgKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrIGhlbGQuIFRoaXMKQEAgLTMwOSw3ICszMTUsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X2xvZ29mZiAtIExvZ29mZiBhbmQgcmVtb3ZlIGFuIHJwb3J0CisgKiBmY19ycG9ydF9sb2dvZmYoKSAtIExvZ29mZiBhbmQgcmVtb3ZlIGFuIHJwb3J0CiAgKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gYmUgcmVtb3ZlZAogICoKICAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sgaGVsZC4gVGhpcwpAQCAtMzQ3LDcgKzM1Myw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcmVhZHkgLSBUaGUgcnBvcnQgaXMgcmVhZHkKKyAqIGZjX3Jwb3J0X2VudGVyX3JlYWR5KCkgLSBUaGUgcnBvcnQgaXMgcmVhZHkKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGlzIHJlYWR5CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC0zNjYsNyArMzcyLDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF90aW1lb3V0IC0gSGFuZGxlciBmb3IgdGhlIHJldHJ5X3dvcmsgdGltZXIuCisgKiBmY19ycG9ydF90aW1lb3V0KCkgLSBIYW5kbGVyIGZvciB0aGUgcmV0cnlfd29yayB0aW1lci4KICAqIEB3b3JrOiBUaGUgd29yayBzdHJ1Y3Qgb2YgdGhlIGZjX3Jwb3J0X2xpYmZjX3ByaXYKICAqCiAgKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrIGhlbGQuIFRoaXMKQEAgLTQwNSw1OSArNDExLDc1IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZXJyb3IgLSBIYW5kbGVyIGZvciBhbnkgZXJyb3JzCisgKiBmY19ycG9ydF9lcnJvcigpIC0gRXJyb3IgaGFuZGxlciwgY2FsbGVkIG9uY2UgcmV0cmllcyBoYXZlIGJlZW4gZXhoYXVzdGVkCiAgKiBAcnBvcnQ6IFRoZSBmY19ycG9ydCBvYmplY3QKICAqIEBmcDogVGhlIGZyYW1lIHBvaW50ZXIKICAqCi0gKiBJZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSBhIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZQotICogdGhlbiB3YWl0IGZvciBoYWxmIGEgc2Vjb25kIGFuZCByZXRyeSwgb3RoZXJ3aXNlIHJldHJ5Ci0gKiBpbW1lZGlhdGVseS4KLSAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlCiAgKiBjYWxsaW5nIHRoaXMgcm91dGluZQogICovCiBzdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcihzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOwogCiAJRkNfREVCVUdfUlBPUlQoIkVycm9yICVsZCBpbiBzdGF0ZSAlcywgcmV0cmllcyAlZFxuIiwKIAkJICAgICAgIFBUUl9FUlIoZnApLCBmY19ycG9ydF9zdGF0ZShycG9ydCksIHJkYXRhLT5yZXRyaWVzKTsKIAotCWlmICghZnAgfHwgUFRSX0VSUihmcCkgPT0gLUZDX0VYX1RJTUVPVVQpIHsKLQkJLyoKLQkJICogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSwgb3IgdGhlIGV4Y2hhbmdlIHRpbWVkIG91dC4KLQkJICogIFJldHJ5IGFmdGVyIGRlbGF5Ci0JCSAqLwotCQlpZiAocmRhdGEtPnJldHJpZXMgPCByZGF0YS0+bG9jYWxfcG9ydC0+bWF4X3JldHJ5X2NvdW50KSB7Ci0JCQlyZGF0YS0+cmV0cmllcysrOwotCQkJaWYgKCFmcCkKLQkJCQlkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQkJCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZGF0YS0+cmV0cnlfd29yaywgZGVsYXkpOwotCQl9IGVsc2UgewotCQkJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKLQkJCWNhc2UgUlBPUlRfU1RfUExPR0k6Ci0JCQljYXNlIFJQT1JUX1NUX1BSTEk6Ci0JCQljYXNlIFJQT1JUX1NUX0xPR086Ci0JCQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfRkFJTEVEOwotCQkJCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsCi0JCQkJCSAgICZyZGF0YS0+ZXZlbnRfd29yayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFJQT1JUX1NUX1JUVjoKLQkJCQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFJQT1JUX1NUX05PTkU6Ci0JCQljYXNlIFJQT1JUX1NUX1JFQURZOgotCQkJY2FzZSBSUE9SVF9TVF9JTklUOgotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKKwljYXNlIFJQT1JUX1NUX1BMT0dJOgorCWNhc2UgUlBPUlRfU1RfUFJMSToKKwljYXNlIFJQT1JUX1NUX0xPR086CisJCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX0ZBSUxFRDsKKwkJcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwKKwkJCSAgICZyZGF0YS0+ZXZlbnRfd29yayk7CisJCWJyZWFrOworCWNhc2UgUlBPUlRfU1RfUlRWOgorCQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7CisJCWJyZWFrOworCWNhc2UgUlBPUlRfU1RfTk9ORToKKwljYXNlIFJQT1JUX1NUX1JFQURZOgorCWNhc2UgUlBPUlRfU1RfSU5JVDoKKwkJYnJlYWs7CiAJfQogfQogCiAvKioKLSAqIGZjX3Jwb3J0X3Bsb2dpX3JlY3ZfcmVzcCAtIEhhbmRsZSBpbmNvbWluZyBFTFMgUExPR0kgcmVzcG9uc2UKKyAqIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KCkgLSBFcnJvciBoYW5kbGVyIHdoZW4gcmV0cmllcyBhcmUgZGVzaXJlZAorICogQHJwb3J0OiBUaGUgZmNfcnBvcnQgb2JqZWN0CisgKiBAZnA6IFRoZSBmcmFtZSBwb2ludGVyCisgKgorICogSWYgdGhlIGVycm9yIHdhcyBhbiBleGNoYW5nZSB0aW1lb3V0IHJldHJ5IGltbWVkaWF0ZWx5LAorICogb3RoZXJ3aXNlIHdhaXQgZm9yIEVfRF9UT1YuCisgKgorICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZQorICogY2FsbGluZyB0aGlzIHJvdXRpbmUKKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3JfcmV0cnkoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGRlbGF5ID0gRkNfREVGX0VfRF9UT1Y7CisKKwkvKiBtYWtlIHN1cmUgdGhpcyBpc24ndCBhbiBGQ19FWF9DTE9TRUQgZXJyb3IsIG5ldmVyIHJldHJ5IHRob3NlICovCisJaWYgKFBUUl9FUlIoZnApID09IC1GQ19FWF9DTE9TRUQpCisJCXJldHVybiBmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCisJaWYgKHJkYXRhLT5yZXRyaWVzIDwgcmRhdGEtPmxvY2FsX3BvcnQtPm1heF9yZXRyeV9jb3VudCkgeworCQlGQ19ERUJVR19SUE9SVCgiRXJyb3IgJWxkIGluIHN0YXRlICVzLCByZXRyeWluZ1xuIiwKKwkJCSAgICAgICBQVFJfRVJSKGZwKSwgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwkJcmRhdGEtPnJldHJpZXMrKzsKKwkJLyogbm8gYWRkaXRpb25hbCBkZWxheSBvbiBleGNoYW5nZSB0aW1lb3V0cyAqLworCQlpZiAoUFRSX0VSUihmcCkgPT0gLUZDX0VYX1RJTUVPVVQpCisJCQlkZWxheSA9IDA7CisJCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkYXRhLT5yZXRyeV93b3JrLCBkZWxheSk7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm4gZmNfcnBvcnRfZXJyb3IocnBvcnQsIGZwKTsKK30KKworLyoqCisgKiBmY19ycG9ydF9wbG9naV9yZWN2X3Jlc3AoKSAtIEhhbmRsZSBpbmNvbWluZyBFTFMgUExPR0kgcmVzcG9uc2UKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUExPR0kgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBycF9hcmc6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKQEAgLTQ4MywxNyArNTA1LDE3IEBACiAJRkNfREVCVUdfUlBPUlQoIlJlY2VpdmVkIGEgUExPR0kgcmVzcG9uc2UgZnJvbSBwb3J0ICglNngpXG4iLAogCQkgICAgICAgcnBvcnQtPnBvcnRfaWQpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKHJkYXRhLT5ycF9zdGF0ZSAhPSBSUE9SVF9TVF9QTE9HSSkgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgUExPR0kgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7Ci0JCWdvdG8gZXJyOwotCX0KLQogCW9wID0gZmNfZnJhbWVfcGF5bG9hZF9vcChmcCk7CiAJaWYgKG9wID09IEVMU19MU19BQ0MgJiYKIAkgICAgKHBscCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKnBscCkpKSAhPSBOVUxMKSB7CkBAIC01MjIsNyArNTQ0LDcgQEAKIAkJZWxzZQogCQkJZmNfcnBvcnRfZW50ZXJfcHJsaShycG9ydCk7CiAJfSBlbHNlCi0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAKIG91dDoKIAlmY19mcmFtZV9mcmVlKGZwKTsKQEAgLTUzMiw3ICs1NTQsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X2VudGVyX3Bsb2dpIC0gU2VuZCBQb3J0IExvZ2luIChQTE9HSSkgcmVxdWVzdCB0byBwZWVyCisgKiBmY19ycG9ydF9lbnRlcl9wbG9naSgpIC0gU2VuZCBQb3J0IExvZ2luIChQTE9HSSkgcmVxdWVzdCB0byBwZWVyCiAgKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gc2VuZCBQTE9HSSB0bwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtNTUyLDIwICs1NzQsMjAgQEAKIAlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IEZDX01JTl9NQVhfUEFZTE9BRDsKIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2Yoc3RydWN0IGZjX2Vsc19mbG9naSkpOwogCWlmICghZnApIHsKLQkJZmNfcnBvcnRfZXJyb3IocnBvcnQsIGZwKTsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKIAkJcmV0dXJuOwogCX0KIAlyZGF0YS0+ZV9kX3RvdiA9IGxwb3J0LT5lX2RfdG92OwogCiAJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcnBvcnQsIGZwLCBFTFNfUExPR0ksCiAJCQkJICBmY19ycG9ydF9wbG9naV9yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCWVsc2UKIAkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CiB9CiAKIC8qKgotICogZmNfcnBvcnRfcHJsaV9yZXNwIC0gUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVzcG9uc2UgaGFuZGxlcgorICogZmNfcnBvcnRfcHJsaV9yZXNwKCkgLSBQcm9jZXNzIExvZ2luIChQUkxJKSByZXNwb25zZSBoYW5kbGVyCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBSTEkgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBycF9hcmc6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKQEAgLTU5MiwxNyArNjE0LDE3IEBACiAJRkNfREVCVUdfUlBPUlQoIlJlY2VpdmVkIGEgUFJMSSByZXNwb25zZSBmcm9tIHBvcnQgKCU2eClcbiIsCiAJCSAgICAgICBycG9ydC0+cG9ydF9pZCk7CiAKKwlpZiAoSVNfRVJSKGZwKSkgeworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCQlnb3RvIGVycjsKKwl9CisKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX1BSTEkpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFBSTEkgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7Ci0JCWdvdG8gZXJyOwotCX0KLQogCW9wID0gZmNfZnJhbWVfcGF5bG9hZF9vcChmcCk7CiAJaWYgKG9wID09IEVMU19MU19BQ0MpIHsKIAkJcHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpwcCkpOwpAQCAtNjM1LDcgKzY1Nyw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfbG9nb19yZXNwIC0gTG9nb3V0IChMT0dPKSByZXNwb25zZSBoYW5kbGVyCisgKiBmY19ycG9ydF9sb2dvX3Jlc3AoKSAtIExvZ291dCAoTE9HTykgcmVzcG9uc2UgaGFuZGxlcgogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBMT0dPIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCiAgKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CkBAIC02NTcsNyArNjc5LDcgQEAKIAkJICAgICAgIHJwb3J0LT5wb3J0X2lkKTsKIAogCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtNjg0LDcgKzcwNiw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcHJsaSAtIFNlbmQgUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVxdWVzdCB0byBwZWVyCisgKiBmY19ycG9ydF9lbnRlcl9wcmxpKCkgLSBTZW5kIFByb2Nlc3MgTG9naW4gKFBSTEkpIHJlcXVlc3QgdG8gcGVlcgogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgUFJMSSB0bwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtNzA3LDE5ICs3MjksMTkgQEAKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqcHApKTsKIAlpZiAoIWZwKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19QUkxJLAogCQkJCSAgZmNfcnBvcnRfcHJsaV9yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCWVsc2UKIAkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CiB9CiAKIC8qKgotICogZmNfcnBvcnRfZWxzX3J0dl9yZXNwIC0gUmVxdWVzdCBUaW1lb3V0IFZhbHVlIHJlc3BvbnNlIGhhbmRsZXIKKyAqIGZjX3Jwb3J0X2Vsc19ydHZfcmVzcCgpIC0gUmVxdWVzdCBUaW1lb3V0IFZhbHVlIHJlc3BvbnNlIGhhbmRsZXIKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUlRWIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCiAgKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CkBAIC03NDIsMTcgKzc2NCwxNyBAQAogCUZDX0RFQlVHX1JQT1JUKCJSZWNlaXZlZCBhIFJUViByZXNwb25zZSBmcm9tIHBvcnQgKCU2eClcbiIsCiAJCSAgICAgICBycG9ydC0+cG9ydF9pZCk7CiAKKwlpZiAoSVNfRVJSKGZwKSkgeworCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlnb3RvIGVycjsKKwl9CisKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX1JUVikgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgUlRWIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgJXNcbiIsCiAJCSAgICAgICBmY19ycG9ydF9zdGF0ZShycG9ydCkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoSVNfRVJSKGZwKSkgewotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOwotCQlnb3RvIGVycjsKLQl9Ci0KIAlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOwogCWlmIChvcCA9PSBFTFNfTFNfQUNDKSB7CiAJCXN0cnVjdCBmY19lbHNfcnR2X2FjYyAqcnR2OwpAQCAtNzg1LDcgKzgwNyw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcnR2IC0gU2VuZCBSZXF1ZXN0IFRpbWVvdXQgVmFsdWUgKFJUVikgcmVxdWVzdCB0byBwZWVyCisgKiBmY19ycG9ydF9lbnRlcl9ydHYoKSAtIFNlbmQgUmVxdWVzdCBUaW1lb3V0IFZhbHVlIChSVFYpIHJlcXVlc3QgdG8gcGVlcgogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgUlRWIHRvCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC04MDQsMTkgKzgyNiwxOSBAQAogCiAJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfcnR2KSk7CiAJaWYgKCFmcCkgewotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcnBvcnQsIGZwLCBFTFNfUlRWLAogCQkJCSAgICAgZmNfcnBvcnRfcnR2X3Jlc3AsIHJwb3J0LCBscG9ydC0+ZV9kX3RvdikpCi0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJZWxzZQogCQlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9sb2dvIC0gU2VuZCBMb2dvdXQgKExPR08pIHJlcXVlc3QgdG8gcGVlcgorICogZmNfcnBvcnRfZW50ZXJfbG9nbygpIC0gU2VuZCBMb2dvdXQgKExPR08pIHJlcXVlc3QgdG8gcGVlcgogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgTE9HTyB0bwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtODM1LDIwICs4NTcsMjAgQEAKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2xvZ28pKTsKIAlpZiAoIWZwKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19MT0dPLAogCQkJCSAgZmNfcnBvcnRfbG9nb19yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCWVsc2UKIAkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CiB9CiAKIAogLyoqCi0gKiBmY19ycG9ydF9yZWN2X3JlcSAtIFJlY2VpdmUgYSByZXF1ZXN0IGZyb20gYSBycG9ydAorICogZmNfcnBvcnRfcmVjdl9yZXEoKSAtIFJlY2VpdmUgYSByZXF1ZXN0IGZyb20gYSBycG9ydAogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQTE9HSSBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQogICogQHJwX2FyZzogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydApAQCAtOTA5LDcgKzkzMSw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEgLSBIYW5kbGUgaW5jb21pbmcgUG9ydCBMb2dpbiAoUExPR0kpIHJlcXVlc3QKKyAqIGZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKCkgLSBIYW5kbGUgaW5jb21pbmcgUG9ydCBMb2dpbiAoUExPR0kpIHJlcXVlc3QKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBQTE9HSQogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQTE9HSSBleGNoYW5nZQogICogQGZwOiBQTE9HSSByZXF1ZXN0IGZyYW1lCkBAIC0xMDMxLDcgKzEwNTMsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEgLSBIYW5kbGUgaW5jb21pbmcgUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVxdWVzdAorICogZmNfcnBvcnRfcmVjdl9wcmxpX3JlcSgpIC0gSGFuZGxlIGluY29taW5nIFByb2Nlc3MgTG9naW4gKFBSTEkpIHJlcXVlc3QKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBQUkxJCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBSTEkgZXhjaGFuZ2UKICAqIEBmcDogUFJMSSByZXF1ZXN0IGZyYW1lCkBAIC0xMTgyLDcgKzEyMDQsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEgLSBIYW5kbGUgaW5jb21pbmcgUHJvY2VzcyBMb2dvdXQgKFBSTE8pIHJlcXVlc3QKKyAqIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBQcm9jZXNzIExvZ291dCAoUFJMTykgcmVxdWVzdAogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRoYXQgaW5pdGlhdGVkIFBSTE8KICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUFJMTyBleGNoYW5nZQogICogQGZwOiBQUkxPIHJlcXVlc3QgZnJhbWUKQEAgLTEyMTMsNyArMTIzNSw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfcmVjdl9sb2dvX3JlcSAtIEhhbmRsZSBpbmNvbWluZyBMb2dvdXQgKExPR08pIHJlcXVlc3QKKyAqIGZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBMb2dvdXQgKExPR08pIHJlcXVlc3QKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBMT0dPCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIExPR08gZXhjaGFuZ2UKICAqIEBmcDogTE9HTyByZXF1ZXN0IGZyYW1lCkBAIC0xMjQ5LDYgKzEyNzEsOSBAQAogCiBpbnQgZmNfcnBvcnRfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogeworCWlmICghbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSkKKwkJbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSA9IGZjX3Jwb3J0X3JvZ3VlX2NyZWF0ZTsKKwogCWlmICghbHBvcnQtPnR0LnJwb3J0X2xvZ2luKQogCQlscG9ydC0+dHQucnBvcnRfbG9naW4gPSBmY19ycG9ydF9sb2dpbjsKIApAQCAtMTI4NSw3ICsxMzEwLDcgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAKLQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQtPmVtcCwgMCwgcnBvcnQtPnBvcnRfaWQpOwotCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydC0+ZW1wLCBycG9ydC0+cG9ydF9pZCwgMCk7CisJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCAwLCBycG9ydC0+cG9ydF9pZCk7CisJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCBycG9ydC0+cG9ydF9pZCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3Jwb3J0X3Rlcm1pbmF0ZV9pbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IDI1N2MyNDEuLjgwOWQzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0xOTk4LDYgKzE5OTgsOCBAQAogCWlmICghc2hvc3QtPmNhbl9xdWV1ZSkKIAkJc2hvc3QtPmNhbl9xdWV1ZSA9IElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYOwogCisJaWYgKCFzaG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0KQorCQlzaG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0ID0gaXNjc2lfZWhfY21kX3RpbWVkX291dDsKIAlyZXR1cm4gc2NzaV9hZGRfaG9zdChzaG9zdCwgcGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ob3N0X2FkZCk7CkBAIC0yMDIwLDcgKzIwMjIsNiBAQAogCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKHNodCwgc2l6ZW9mKHN0cnVjdCBpc2NzaV9ob3N0KSArIGRkX2RhdGFfc2l6ZSk7CiAJaWYgKCFzaG9zdCkKIAkJcmV0dXJuIE5VTEw7Ci0Jc2hvc3QtPnRyYW5zcG9ydHQtPmVoX3RpbWVkX291dCA9IGlzY3NpX2VoX2NtZF90aW1lZF9vdXQ7CiAKIAlpZiAocWRlcHRoID4gSVNDU0lfTUFYX0NNRF9QRVJfTFVOIHx8IHFkZXB0aCA8IDEpIHsKIAkJaWYgKHFkZXB0aCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggYThmMzBiZC4uYTczMDI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC01MjU4LDYgKzUyNTgsNyBAQAogCQkJc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJa2ZyZWUoZWxzX2RhdGEpOwogCQlyZXR1cm47CiAJfQogCW1lbWNweShlbHNfZGF0YS0+d3dwbiwgJm5kbHAtPm5scF9wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYwppbmRleCBiMjY0YjQ5Li5iNWZiZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXZtZTE2eF9zY3NpX2RldmljZTsKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQKLW12bWUxNnhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXZtZTE2eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqIGhvc3QgPSBOVUxMOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGE7CkBAIC02NCw3ICs2NCw4IEBACiAJaG9zdGRhdGEtPmN0ZXN0N19leHRyYSA9IENURVNUN19UVDE7CiAKIAkvKiBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJm12bWUxNnhfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLCBkZXYpOworCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmbXZtZTE2eF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgIm12bWUxNngtc2NzaTogTm8gaG9zdCBkZXRlY3RlZDsgIgogCQkJCSJib2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0/XG4iKTsKQEAgLTg4LDcgKzg5LDcgQEAKIAkJb3V0X2JlMzIoMHhmZmY0MjAyYywgdik7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXJldHVybiAwOwpAQCAtMTAyLDkgKzEwMyw5IEBACiB9CiAKIHN0YXRpYyBfX2RldmV4aXQgaW50Ci1tdm1lMTZ4X2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorbXZtZTE2eF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAkvKiBEaXNhYmxlIHNjc2kgY2hpcCBpbnRzICovCkBAIC0xMjMsMjUgKzEyNCwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXZtZTE2eF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJtdm1lMTZ4LXNjc2kiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gbXZtZTE2eF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AobXZtZTE2eF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12bWUxNnhfc2NzaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIm12bWUxNngtc2NzaSIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgICAgICAgID0gbXZtZTE2eF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChtdm1lMTZ4X2RldmljZV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXZtZTE2eF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAltdm1lMTZ4X3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibXZtZTE2eC1zY3NpIiwKIAkJCQkJCQkgICAgICAtMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihtdm1lMTZ4X3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIobXZtZTE2eF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xNTEsNyArMTU0LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtdm1lMTZ4X3Njc2lfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG12bWUxNnhfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG12bWUxNnhfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDMzYTNjMTMuLmVlOWQ0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMjQ0LDEyICsyNDQsNiBAQAogCQlpZiAoaGEtPm9wdHJvbV9zdGF0ZSAhPSBRTEFfU1dBSVRJTkcpCiAJCQlicmVhazsKIAotCQlpZiAoc3RhcnQgJiAweGZmZikgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJJbnZhbGlkIHN0YXJ0IHJlZ2lvbiAweCV4LzB4JXguXG4iLCBzdGFydCwgc2l6ZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCiAJCWhhLT5vcHRyb21fcmVnaW9uX3N0YXJ0ID0gc3RhcnQ7CiAJCWhhLT5vcHRyb21fcmVnaW9uX3NpemUgPSBzdGFydCArIHNpemUgPiBoYS0+b3B0cm9tX3NpemUgPwogCQkgICAgaGEtPm9wdHJvbV9zaXplIC0gc3RhcnQgOiBzaXplOwpAQCAtMzAzLDggKzI5Nyw3IEBACiAJCWVsc2UgaWYgKHN0YXJ0ID09IChoYS0+Zmx0X3JlZ2lvbl9ib290ICogNCkgfHwKIAkJICAgIHN0YXJ0ID09IChoYS0+Zmx0X3JlZ2lvbl9mdyAqIDQpKQogCQkJdmFsaWQgPSAxOwotCQllbHNlIGlmICgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmCi0JCSAgICBzdGFydCA9PSAoaGEtPmZsdF9yZWdpb25fdnBkX252cmFtICogNCkpCisJCWVsc2UgaWYgKElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKQogCQkgICAgdmFsaWQgPSAxOwogCQlpZiAoIXZhbGlkKSB7CiAJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCkBAIC0xMjY1LDEzICsxMjU4LDYgQEAKIAkgICAgdGVzdF9iaXQoRkNQT1JUX1VQREFURV9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpCiAJCW1zbGVlcCgxMDAwKTsKIAotCWlmIChoYS0+bXFlbmFibGUpIHsKLQkJaWYgKHFsYTI1eHhfZGVsZXRlX3F1ZXVlcyh2aGEsIDApICE9IFFMQV9TVUNDRVNTKQotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSJRdWV1ZSBkZWxldGUgZmFpbGVkLlxuIik7Ci0JCXZoYS0+cmVxX3F1ZXNbMF0gPSBoYS0+cmVxX3FfbWFwWzBdLT5pZDsKLQl9Ci0KIAlxbGEyNHh4X2Rpc2FibGVfdnAodmhhKTsKIAogCWZjX3JlbW92ZV9ob3N0KHZoYS0+aG9zdCk7CkBAIC0xMjkzLDYgKzEyNzksMTIgQEAKIAkJICAgIHZoYS0+aG9zdF9ubywgdmhhLT52cF9pZHgsIHZoYSkpOwogICAgICAgICB9CiAKKwlpZiAoaGEtPm1xZW5hYmxlKSB7CisJCWlmIChxbGEyNXh4X2RlbGV0ZV9xdWV1ZXModmhhLCAwKSAhPSBRTEFfU1VDQ0VTUykKKwkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCQkiUXVldWUgZGVsZXRlIGZhaWxlZC5cbiIpOworCX0KKwogCXNjc2lfaG9zdF9wdXQodmhhLT5ob3N0KTsKIAlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJ2cG9ydCAlZCBkZWxldGVkXG4iLCBpZCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggMDIzZWU3Ny4uZTBjNWJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMjEzNSw2ICsyMTM1LDcgQEAKIC8qIFdvcmsgZXZlbnRzLiAgKi8KIGVudW0gcWxhX3dvcmtfdHlwZSB7CiAJUUxBX0VWVF9BRU4sCisJUUxBX0VWVF9JRENfQUNLLAogfTsKIAogCkBAIC0yMTQ5LDYgKzIxNTAsMTAgQEAKIAkJCWVudW0gZmNfaG9zdF9ldmVudF9jb2RlIGNvZGU7CiAJCQl1MzIgZGF0YTsKIAkJfSBhZW47CisJCXN0cnVjdCB7CisjZGVmaW5lIFFMQV9JRENfQUNLX1JFR1MJNworCQkJdWludDE2X3QgbWJbUUxBX0lEQ19BQ0tfUkVHU107CisJCX0gaWRjX2FjazsKIAl9IHU7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGV2dGJsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGV2dGJsLmgKaW5kZXggZDc4ZDM1ZS4uZDZlYTY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RldnRibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZXZ0YmwuaApAQCAtNzIsNyArNzIsNyBAQAogCSJRTEEyNDYyIiwJIlN1biBQQ0ktWCAyLjAgdG8gNEdiIEZDLCBEdWFsIENoYW5uZWwiLAkvKiAweDE0MSAqLwogCSJRTEUyNDYwIiwJIlN1biBQQ0ktRXhwcmVzcyB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxNDIgKi8KIAkiUUxFMjQ2MiIsCSJTdW4gUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTQzICovCi0JIlFFTTI0NjIiCSJTZXJ2ZXIgSS9PIE1vZHVsZSA0R2IgRkMsIER1YWwgQ2hhbm5lbCIsCS8qIDB4MTQ0ICovCisJIlFFTTI0NjIiLAkiU2VydmVyIEkvTyBNb2R1bGUgNEdiIEZDLCBEdWFsIENoYW5uZWwiLAkvKiAweDE0NCAqLwogCSJRTEUyNDQwIiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDE0NSAqLwogCSJRTEUyNDY0IiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgUXVhZCBDaGFubmVsIiwJCS8qIDB4MTQ2ICovCiAJIlFMQTI0NDAiLAkiUENJLVggMi4wIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkJLyogMHgxNDcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKaW5kZXggN2FiYjA0NS4uZmZmZjQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKQEAgLTE0MDIsNiArMTQwMiw4IEBACiAjZGVmaW5lIE1CQV9JRENfTk9USUZZCQkweDgxMDEKICNkZWZpbmUgTUJBX0lEQ19USU1FX0VYVAkweDgxMDIKIAorI2RlZmluZSBNQkNfSURDX0FDSwkJMHgxMDEKKwogc3RydWN0IG52cmFtXzgxeHggewogCS8qIE5WUkFNIGhlYWRlci4gKi8KIAl1aW50OF90IGlkWzRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IGEzMzZiNGIuLjZkZTI4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTcyLDYgKzcyLDcgQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYWJvcnRfYWxsX2NtZHMoc2NzaV9xbGFfaG9zdF90ICosIGludCk7CiBleHRlcm4gaW50IHFsYTJ4MDBfcG9zdF9hZW5fd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBlbnVtCiAgICAgZmNfaG9zdF9ldmVudF9jb2RlLCB1MzIpOworZXh0ZXJuIGludCBxbGEyeDAwX3Bvc3RfaWRjX2Fja193b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHVpbnQxNl90ICopOwogCiBleHRlcm4gdm9pZCBxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjX3BvcnRfdCAqKTsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqcWxhMngwMF9jcmVhdGVfaG9zdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICosCkBAIC0yNjYsNiArMjY3LDggQEAKIAogZXh0ZXJuIGludCBxbGE4NHh4X3ZlcmlmeV9jaGlwKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHVpbnQxNl90ICopOwogCitleHRlcm4gaW50IHFsYTgxeHhfaWRjX2FjayhzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QgKik7CisKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfaXNyLmMgc291cmNlIGZpbGUuCiAgKi8KQEAgLTM3NiwxMCArMzc5LDggQEAKIAogLyogR2xvYmEgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgbXVsdGktcSAqLwogZXh0ZXJuIGludCBxbGEyNXh4X3JlcXVlc3RfaXJxKHN0cnVjdCByc3BfcXVlICopOwotZXh0ZXJuIGludCBxbGEyNXh4X2luaXRfcmVxX3F1ZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzdHJ1Y3QgcmVxX3F1ZSAqLAotCXVpbnQ4X3QpOwotZXh0ZXJuIGludCBxbGEyNXh4X2luaXRfcnNwX3F1ZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzdHJ1Y3QgcnNwX3F1ZSAqLAotCXVpbnQ4X3QpOworZXh0ZXJuIGludCBxbGEyNXh4X2luaXRfcmVxX3F1ZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzdHJ1Y3QgcmVxX3F1ZSAqKTsKK2V4dGVybiBpbnQgcWxhMjV4eF9pbml0X3JzcF9xdWUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3RydWN0IHJzcF9xdWUgKik7CiBleHRlcm4gaW50IHFsYTI1eHhfY3JlYXRlX3JlcV9xdWUoc3RydWN0IHFsYV9od19kYXRhICosIHVpbnQxNl90LCB1aW50OF90LAogCXVpbnQxNl90LCB1aW50OF90LCB1aW50OF90KTsKIGV4dGVybiBpbnQgcWxhMjV4eF9jcmVhdGVfcnNwX3F1ZShzdHJ1Y3QgcWxhX2h3X2RhdGEgKiwgdWludDE2X3QsIHVpbnQ4X3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCBmNjM2OGExLi44N2Y5YWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTEyMjYsOSArMTIyNiw4IEBACiAJCQlpY2ItPmZpcm13YXJlX29wdGlvbnNfMiB8PQogCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoQklUXzE4KTsKIAotCQlpY2ItPmZpcm13YXJlX29wdGlvbnNfMiB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKEJJVF8yMik7CisJCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIofkJJVF8yMik7CiAJCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoQklUXzIzKTsKLQkJaGEtPnJzcF9xX21hcFswXS0+b3B0aW9ucyA9IGljYi0+ZmlybXdhcmVfb3B0aW9uc18yOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjVtcS5yZXFfcV9pbiwgMCk7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjVtcS5yZXFfcV9vdXQsIDApOwpAQCAtMTMwOSw4ICsxMzA4LDEyIEBACiAKIAlERUJVRyhwcmludGsoInNjc2koJWxkKTogSXNzdWUgaW5pdCBmaXJtd2FyZS5cbiIsIHZoYS0+aG9zdF9ubykpOwogCi0JaWYgKGhhLT5mbGFncy5ucGl2X3N1cHBvcnRlZCkKKwlpZiAoaGEtPmZsYWdzLm5waXZfc3VwcG9ydGVkKSB7CisJCWlmIChoYS0+b3BlcmF0aW5nX21vZGUgPT0gTE9PUCkKKwkJCWhhLT5tYXhfbnBpdl92cG9ydHMgPSBNSU5fTVVMVElfSURfRkFCUklDIC0gMTsKIAkJbWlkX2luaXRfY2ItPmNvdW50ID0gY3B1X3RvX2xlMTYoaGEtPm1heF9ucGl2X3Zwb3J0cyk7CisJfQorCiAKIAltaWRfaW5pdF9jYi0+b3B0aW9ucyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQklUXzEpOwogCkBAIC0yNjExLDYgKzI2MTQsNyBAQAogCXBvcnRfaWRfdAl3cmFwLCBueHRfZF9pZDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdnAsICpiYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnR2cDsKIAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIApAQCAtMjcxMCw3ICsyNzE0LDcgQEAKIAkJLyogQnlwYXNzIHZpcnR1YWwgcG9ydHMgb2YgdGhlIHNhbWUgaG9zdC4gKi8KIAkJZm91bmQgPSAwOwogCQlpZiAoaGEtPm51bV92aG9zdHMpIHsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkodnAsICZoYS0+dnBfbGlzdCwgbGlzdCkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZwLCB0dnAsICZoYS0+dnBfbGlzdCwgbGlzdCkgewogCQkJCWlmIChuZXdfZmNwb3J0LT5kX2lkLmIyNCA9PSB2cC0+ZF9pZC5iMjQpIHsKIAkJCQkJZm91bmQgPSAxOwogCQkJCQlicmVhazsKQEAgLTI4MzMsNiArMjgzNyw3IEBACiAJdWludDE2X3QgZmlyc3RfbG9vcF9pZDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdnA7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnR2cDsKIAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIApAQCAtMjg1Nyw3ICsyODYyLDcgQEAKIAkJLyogQ2hlY2sgZm9yIGxvb3AgSUQgYmVpbmcgYWxyZWFkeSBpbiB1c2UuICovCiAJCWZvdW5kID0gMDsKIAkJZmNwb3J0ID0gTlVMTDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cCwgJmhhLT52cF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdnAtPnZwX2ZjcG9ydHMsIGxpc3QpIHsKIAkJCQlpZiAoZmNwb3J0LT5sb29wX2lkID09IGRldi0+bG9vcF9pZCAmJgogCQkJCQkJCQlmY3BvcnQgIT0gZGV2KSB7CkBAIC0zMjkyLDYgKzMyOTcsNyBAQAogCXVpbnQ4X3QgICAgICAgIHN0YXR1cyA9IDA7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZwOworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp0dnA7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CiAKIAlpZiAodmhhLT5mbGFncy5vbmxpbmUpIHsKQEAgLTMzMDcsNyArMzMxMyw3IEBACiAJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKIAkJCXFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZoYSwgMCk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodnAsIHR2cCwgJmhhLT52cF9saXN0LCBsaXN0KQogCQkJICAgICAgIHFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZwLCAwKTsKIAkJfSBlbHNlIHsKIAkJCWlmICghYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSkKQEAgLTM0MDQsNyArMzQxMCw3IEBACiAJCURFQlVHKHByaW50ayhLRVJOX0lORk8KIAkJCQkicWxhMngwMF9hYm9ydF9pc3AoJWxkKTogc3VjY2VlZGVkLlxuIiwKIAkJCQl2aGEtPmhvc3Rfbm8pKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cCwgJmhhLT52cF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJCWlmICh2cC0+dnBfaWR4KQogCQkJCXFsYTJ4MDBfdnBfYWJvcnRfaXNwKHZwKTsKIAkJfQpAQCAtMzQyOSw3ICszNDM1LDcgQEAKIHN0YXRpYyBpbnQKIHFsYTJ4MDBfcmVzdGFydF9pc3Aoc2NzaV9xbGFfaG9zdF90ICp2aGEpCiB7Ci0JdWludDhfdAkJc3RhdHVzID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKIAl1aW50MzJfdCB3YWl0X3RpbWU7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CkBAIC0zNDkzLDcgKzM0OTksNyBAQAogCQlyc3AgPSBoYS0+cnNwX3FfbWFwW2ldOwogCQlpZiAocnNwKSB7CiAJCQlyc3AtPm9wdGlvbnMgJj0gfkJJVF8wOwotCQkJcmV0ID0gcWxhMjV4eF9pbml0X3JzcF9xdWUoYmFzZV92aGEsIHJzcCwgcnNwLT5vcHRpb25zKTsKKwkJCXJldCA9IHFsYTI1eHhfaW5pdF9yc3BfcXVlKGJhc2VfdmhhLCByc3ApOwogCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykKIAkJCQlERUJVRzJfMTcocHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkiJXMgUnNwIHF1ZTolZCBpbml0IGZhaWxlZFxuIiwgX19mdW5jX18sCkBAIC0zNTA3LDcgKzM1MTMsNyBAQAogCQlpZiAocmVxKSB7CiAJCS8qIENsZWFyIG91dHN0YW5kaW5nIGNvbW1hbmRzIGFycmF5LiAqLwogCQkJcmVxLT5vcHRpb25zICY9IH5CSVRfMDsKLQkJCXJldCA9IHFsYTI1eHhfaW5pdF9yZXFfcXVlKGJhc2VfdmhhLCByZXEsIHJlcS0+b3B0aW9ucyk7CisJCQlyZXQgPSBxbGEyNXh4X2luaXRfcmVxX3F1ZShiYXNlX3ZoYSwgcmVxKTsKIAkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpCiAJCQkJREVCVUcyXzE3KHByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJIiVzIFJlcSBxdWU6JWQgaW5pdCBmYWlsZWRcbiIsIF9fZnVuY19fLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IGUyOGFkODEuLmYyNTBlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTI2Niw2ICsyNjYsNDAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitxbGE4MXh4X2lkY19ldmVudChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDE2X3QgYWVuLCB1aW50MTZfdCBkZXNjcikKK3sKKwlzdGF0aWMgY2hhciAqZXZlbnRbXSA9CisJCXsgIkNvbXBsZXRlIiwgIlJlcXVlc3QgTm90aWZpY2F0aW9uIiwgIlRpbWUgRXh0ZW5zaW9uIiB9OworCWludCBydmFsOworCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnMjQgPSAmdmhhLT5ody0+aW9iYXNlLT5pc3AyNDsKKwl1aW50MTZfdCBfX2lvbWVtICp3cHRyOworCXVpbnQxNl90IGNudCwgdGltZW91dCwgbWJbUUxBX0lEQ19BQ0tfUkVHU107CisKKwkvKiBTZWVkIGRhdGEgLS0gbWFpbGJveDEgLT4gbWFpbGJveDcuICovCisJd3B0ciA9ICh1aW50MTZfdCBfX2lvbWVtICopJnJlZzI0LT5tYWlsYm94MTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFFMQV9JRENfQUNLX1JFR1M7IGNudCsrLCB3cHRyKyspCisJCW1iW2NudF0gPSBSRF9SRUdfV09SRCh3cHRyKTsKKworCURFQlVHMihwcmludGsoInNjc2koJWxkKTogSW50ZXItRHJpdmVyIENvbW11Y2F0aW9uICVzIC0tICIKKwkgICAgIiUwNHggJTA0eCAlMDR4ICUwNHggJTA0eCAlMDR4ICUwNHguXG4iLCB2aGEtPmhvc3Rfbm8sCisJICAgIGV2ZW50W2FlbiAmIDB4ZmZdLAorCSAgICBtYlswXSwgbWJbMV0sIG1iWzJdLCBtYlszXSwgbWJbNF0sIG1iWzVdLCBtYls2XSkpOworCisJLyogQWNrbm93bGVkZ2VtZW50IG5lZWRlZD8gW05vdGlmeSAmJiBub24temVybyB0aW1lb3V0XS4gKi8KKwl0aW1lb3V0ID0gKGRlc2NyID4+IDgpICYgMHhmOworCWlmIChhZW4gIT0gTUJBX0lEQ19OT1RJRlkgfHwgIXRpbWVvdXQpCisJCXJldHVybjsKKworCURFQlVHMihwcmludGsoInNjc2koJWxkKTogSW50ZXItRHJpdmVyIENvbW11Y2F0aW9uICVzIC0tICIKKwkgICAgIkFDSyB0aW1lb3V0PSVkLlxuIiwgdmhhLT5ob3N0X25vLCBldmVudFthZW4gJiAweGZmXSwgdGltZW91dCkpOworCisJcnZhbCA9IHFsYTJ4MDBfcG9zdF9pZGNfYWNrX3dvcmsodmhhLCBtYik7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCB2aGEtPmh3LAorCQkgICAgIklEQyBmYWlsZWQgdG8gcG9zdCBBQ0suXG4iKTsKK30KKwogLyoqCiAgKiBxbGEyeDAwX2FzeW5jX2V2ZW50KCkgLSBQcm9jZXNzIGF5bmNocm9ub3VzIGV2ZW50cy4KICAqIEBoYTogU0NTSSBkcml2ZXIgSEEgY29udGV4dApAQCAtNzE0LDIxICs3NDgsOSBAQAogCQkgICAgIiUwNHggJTA0eCAlMDR4XG4iLCB2aGEtPmhvc3Rfbm8sIG1iWzFdLCBtYlsyXSwgbWJbM10pKTsKIAkJYnJlYWs7CiAJY2FzZSBNQkFfSURDX0NPTVBMRVRFOgotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEludGVyLURyaXZlciBDb21tdWNhdGlvbiAiCi0JCSAgICAiQ29tcGxldGUgLS0gJTA0eCAlMDR4ICUwNHhcbiIsIHZoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLAotCQkgICAgbWJbM10pKTsKLQkJYnJlYWs7CiAJY2FzZSBNQkFfSURDX05PVElGWToKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBJbnRlci1Ecml2ZXIgQ29tbXVjYXRpb24gIgotCQkgICAgIlJlcXVlc3QgTm90aWZpY2F0aW9uIC0tICUwNHggJTA0eCAlMDR4XG4iLCB2aGEtPmhvc3Rfbm8sCi0JCSAgICBtYlsxXSwgbWJbMl0sIG1iWzNdKSk7Ci0JCS8qKioqIE1haWxib3ggcmVnaXN0ZXJzIDQgLSA3IHZhbGlkISEhICovCi0JCWJyZWFrOwogCWNhc2UgTUJBX0lEQ19USU1FX0VYVDoKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBJbnRlci1Ecml2ZXIgQ29tbXVjYXRpb24gIgotCQkgICAgIlRpbWUgRXh0ZW5zaW9uIC0tICUwNHggJTA0eCAlMDR4XG4iLCB2aGEtPmhvc3Rfbm8sIG1iWzFdLAotCQkgICAgbWJbMl0sIG1iWzNdKSk7Ci0JCS8qKioqIE1haWxib3ggcmVnaXN0ZXJzIDQgLSA3IHZhbGlkISEhICovCisJCXFsYTgxeHhfaWRjX2V2ZW50KHZoYSwgbWJbMF0sIG1iWzFdKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNzA3LDcgKzE3MjksNiBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGE7CiAJc3RydWN0IHJzcF9xdWUgKnJzcDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZzsKLQl1aW50MTZfdCBtc2l4X2Rpc2FibGVkX2hjY3IgPSAwOwogCiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewpAQCAtMTcyMCwxNyArMTc0MSw4IEBACiAKIAlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAKLQltc2l4X2Rpc2FibGVkX2hjY3IgPSByc3AtPm9wdGlvbnM7Ci0JaWYgKCFyc3AtPmlkKQotCQltc2l4X2Rpc2FibGVkX2hjY3IgJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMihCSVRfMjIpOwotCWVsc2UKLQkJbXNpeF9kaXNhYmxlZF9oY2NyICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoQklUXzYpOwotCiAJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHJzcCk7CiAKLQlpZiAoIW1zaXhfZGlzYWJsZWRfaGNjcikKLQkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwotCiAJc3Bpbl91bmxvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggZjk0ZmZiYi4uNGFhYjdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMjY4NSw2ICsyNjg1LDcgQEAKIAl1aW50MTZfdCBzdGF0ID0gbGUxNl90b19jcHUocnB0aWRfZW50cnktPnZwX2lkeCk7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc2NzaV9xbGFfaG9zdF90ICp2cDsKKwlzY3NpX3FsYV9ob3N0X3QgKnR2cDsKIAogCWlmIChycHRpZF9lbnRyeS0+ZW50cnlfc3RhdHVzICE9IDApCiAJCXJldHVybjsKQEAgLTI3MTAsNyArMjcxMSw3IEBACiAJCWlmIChNU0Ioc3RhdCkgPT0gMSkKIAkJCXJldHVybjsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpCiAJCQlpZiAodnBfaWR4ID09IHZwLT52cF9pZHgpCiAJCQkJYnJlYWs7CiAJCWlmICghdnApCkBAIC0zMDkwLDggKzMwOTEsNyBAQAogfQogCiBpbnQKLXFsYTI1eHhfaW5pdF9yZXFfcXVlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCi0JdWludDhfdCBvcHRpb25zKQorcWxhMjV4eF9pbml0X3JlcV9xdWUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSkKIHsKIAlpbnQgcnZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzEwMSw3ICszMTAxLDcgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAogCW1jcC0+bWJbMF0gPSBNQkNfSU5JVElBTElaRV9NVUxUSVE7Ci0JbWNwLT5tYlsxXSA9IG9wdGlvbnM7CisJbWNwLT5tYlsxXSA9IHJlcS0+b3B0aW9uczsKIAltY3AtPm1iWzJdID0gTVNXKExTRChyZXEtPmRtYSkpOwogCW1jcC0+bWJbM10gPSBMU1coTFNEKHJlcS0+ZG1hKSk7CiAJbWNwLT5tYls2XSA9IE1TVyhNU0QocmVxLT5kbWEpKTsKQEAgLTMxMjgsNyArMzEyOCw3IEBACiAJbWNwLT50b3YgPSA2MDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotCWlmICghKG9wdGlvbnMgJiBCSVRfMCkpIHsKKwlpZiAoIShyZXEtPm9wdGlvbnMgJiBCSVRfMCkpIHsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5yZXFfcV9pbiwgMCk7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+cmVxX3Ffb3V0LCAwKTsKIAl9CkBAIC0zMTQyLDggKzMxNDIsNyBAQAogfQogCiBpbnQKLXFsYTI1eHhfaW5pdF9yc3BfcXVlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIHN0cnVjdCByc3BfcXVlICpyc3AsCi0JdWludDhfdCBvcHRpb25zKQorcWxhMjV4eF9pbml0X3JzcF9xdWUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgc3RydWN0IHJzcF9xdWUgKnJzcCkKIHsKIAlpbnQgcnZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzE1Myw3ICszMTUyLDcgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAogCW1jcC0+bWJbMF0gPSBNQkNfSU5JVElBTElaRV9NVUxUSVE7Ci0JbWNwLT5tYlsxXSA9IG9wdGlvbnM7CisJbWNwLT5tYlsxXSA9IHJzcC0+b3B0aW9uczsKIAltY3AtPm1iWzJdID0gTVNXKExTRChyc3AtPmRtYSkpOwogCW1jcC0+bWJbM10gPSBMU1coTFNEKHJzcC0+ZG1hKSk7CiAJbWNwLT5tYls2XSA9IE1TVyhNU0QocnNwLT5kbWEpKTsKQEAgLTMxNzgsNyArMzE3Nyw3IEBACiAJbWNwLT50b3YgPSA2MDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotCWlmICghKG9wdGlvbnMgJiBCSVRfMCkpIHsKKwlpZiAoIShyc3AtPm9wdGlvbnMgJiBCSVRfMCkpIHsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5yc3BfcV9vdXQsIDApOwogCQlXUlRfUkVHX0RXT1JEKCZyZWctPnJzcF9xX2luLCAwKTsKIAl9CkBAIC0zMTkzLDMgKzMxOTIsMjkgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAoraW50CitxbGE4MXh4X2lkY19hY2soc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90ICptYikKK3sKKwlpbnQgcnZhbDsKKwltYnhfY21kX3QgbWM7CisJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisKKwlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKworCW1jcC0+bWJbMF0gPSBNQkNfSURDX0FDSzsKKwltZW1jcHkoJm1jcC0+bWJbMV0sIG1iLCBRTEFfSURDX0FDS19SRUdTICogc2l6ZW9mKHVpbnQxNl90KSk7CisJbWNwLT5vdXRfbWIgPSBNQlhfN3xNQlhfNnxNQlhfNXxNQlhfNHxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKKwltY3AtPmluX21iID0gTUJYXzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IDA7CisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4ICgleCkuXG4iLCBfX2Z1bmNfXywKKwkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOworCX0gZWxzZSB7CisJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCX0KKworCXJldHVybiBydmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCmluZGV4IGY1MzE3OWM0Li43ODVjNjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCkBAIC02OSw5ICs2OSwxMCBAQAogcWxhMjR4eF9maW5kX3Zob3N0X2J5X25hbWUoc3RydWN0IHFsYV9od19kYXRhICpoYSwgdWludDhfdCAqcG9ydF9uYW1lKQogewogCXNjc2lfcWxhX2hvc3RfdCAqdmhhOworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp0dmhhOwogCiAJLyogTG9jYXRlIG1hdGNoaW5nIGRldmljZSBpbiBkYXRhYmFzZS4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZoYSwgJmhhLT52cF9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZoYSwgdHZoYSwgJmhhLT52cF9saXN0LCBsaXN0KSB7CiAJCWlmICghbWVtY21wKHBvcnRfbmFtZSwgdmhhLT5wb3J0X25hbWUsIFdXTl9TSVpFKSkKIAkJCXJldHVybiB2aGE7CiAJfQpAQCAtMTk0LDExICsxOTUsMTEgQEAKIHZvaWQKIHFsYTJ4MDBfYWxlcnRfYWxsX3ZwcyhzdHJ1Y3QgcnNwX3F1ZSAqcnNwLCB1aW50MTZfdCAqbWIpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICp2aGE7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEsICp0dmhhOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSByc3AtPmh3OwogCWludCBpID0gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodmhhLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmhhLCB0dmhhLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHZoYS0+dnBfaWR4KSB7CiAJCQlzd2l0Y2ggKG1iWzBdKSB7CiAJCQljYXNlIE1CQV9MSVBfT0NDVVJSRUQ6CkBAIC0zMDAsNiArMzAxLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXNjc2lfcWxhX2hvc3RfdCAqdnA7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnR2cDsKIAogCWlmICh2aGEtPnZwX2lkeCkKIAkJcmV0dXJuOwpAQCAtMzA4LDcgKzMxMCw3IEBACiAKIAljbGVhcl9iaXQoVlBfRFBDX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodnAsICZoYS0+dnBfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHZwLT52cF9pZHgpCiAJCQlyZXQgPSBxbGEyeDAwX2RvX2RwY192cCh2cCk7CiAJfQpAQCAtMzk2LDcgKzM5OCw3IEBACiAKIAlxbGEyeDAwX3N0YXJ0X3RpbWVyKHZoYSwgcWxhMngwMF90aW1lciwgV0FUQ0hfSU5URVJWQUwpOwogCi0JbWVtc2V0KHZoYS0+cmVxX3F1ZXMsIDAsIHNpemVvZih2aGEtPnJlcV9xdWVzKSAqIFFMQV9NQVhfSE9TVF9RVUVTKTsKKwltZW1zZXQodmhhLT5yZXFfcXVlcywgMCwgc2l6ZW9mKHZoYS0+cmVxX3F1ZXMpKTsKIAl2aGEtPnJlcV9xdWVzWzBdID0gaGEtPnJlcV9xX21hcFswXS0+aWQ7CiAJaG9zdC0+Y2FuX3F1ZXVlID0gaGEtPnJlcV9xX21hcFswXS0+bGVuZ3RoICsgMTI4OwogCWhvc3QtPnRoaXNfaWQgPSAyNTU7CkBAIC00NzEsNyArNDczLDcgQEAKIAogCWlmIChyZXEpIHsKIAkJcmVxLT5vcHRpb25zIHw9IEJJVF8wOwotCQlyZXQgPSBxbGEyNXh4X2luaXRfcmVxX3F1ZSh2aGEsIHJlcSwgcmVxLT5vcHRpb25zKTsKKwkJcmV0ID0gcWxhMjV4eF9pbml0X3JlcV9xdWUodmhhLCByZXEpOwogCX0KIAlpZiAocmV0ID09IFFMQV9TVUNDRVNTKQogCQlxbGEyNXh4X2ZyZWVfcmVxX3F1ZSh2aGEsIHJlcSk7CkBAIC00ODYsNyArNDg4LDcgQEAKIAogCWlmIChyc3ApIHsKIAkJcnNwLT5vcHRpb25zIHw9IEJJVF8wOwotCQlyZXQgPSBxbGEyNXh4X2luaXRfcnNwX3F1ZSh2aGEsIHJzcCwgcnNwLT5vcHRpb25zKTsKKwkJcmV0ID0gcWxhMjV4eF9pbml0X3JzcF9xdWUodmhhLCByc3ApOwogCX0KIAlpZiAocmV0ID09IFFMQV9TVUNDRVNTKQogCQlxbGEyNXh4X2ZyZWVfcnNwX3F1ZSh2aGEsIHJzcCk7CkBAIC01MDIsNyArNTA0LDcgQEAKIAogCXJlcS0+b3B0aW9ucyB8PSBCSVRfMzsKIAlyZXEtPnFvcyA9IHFvczsKLQlyZXQgPSBxbGEyNXh4X2luaXRfcmVxX3F1ZSh2aGEsIHJlcSwgcmVxLT5vcHRpb25zKTsKKwlyZXQgPSBxbGEyNXh4X2luaXRfcmVxX3F1ZSh2aGEsIHJlcSk7CiAJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykKIAkJREVCVUcyXzE3KHByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pKTsKIAkvKiByZXN0b3JlIG9wdGlvbnMgYml0ICovCkBAIC02MzIsNyArNjM0LDcgQEAKIAlyZXEtPm1heF9xX2RlcHRoID0gaGEtPnJlcV9xX21hcFswXS0+bWF4X3FfZGVwdGg7CiAJbXV0ZXhfdW5sb2NrKCZoYS0+dnBvcnRfbG9jayk7CiAKLQlyZXQgPSBxbGEyNXh4X2luaXRfcmVxX3F1ZShiYXNlX3ZoYSwgcmVxLCBvcHRpb25zKTsKKwlyZXQgPSBxbGEyNXh4X2luaXRfcmVxX3F1ZShiYXNlX3ZoYSwgcmVxKTsKIAlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQltdXRleF9sb2NrKCZoYS0+dnBvcnRfbG9jayk7CkBAIC03MTAsNyArNzEyLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIHF1ZV9mYWlsZWQ7CiAKLQlyZXQgPSBxbGEyNXh4X2luaXRfcnNwX3F1ZShiYXNlX3ZoYSwgcnNwLCBvcHRpb25zKTsKKwlyZXQgPSBxbGEyNXh4X2luaXRfcnNwX3F1ZShiYXNlX3ZoYSwgcnNwKTsKIAlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQltdXRleF9sb2NrKCZoYS0+dnBvcnRfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGMxMWY4NzIuLjNkZGZhODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0yMjIyLDEwICsyMjIyLDYgQEAKIHsKIAljaGFyCW5hbWVbMTZdOwogCi0JaGEtPmluaXRfY2Jfc2l6ZSA9IHNpemVvZihpbml0X2NiX3QpOwotCWlmIChJU19RTEEyWFhYX01JRFRZUEUoaGEpKQotCQloYS0+aW5pdF9jYl9zaXplID0gc2l6ZW9mKHN0cnVjdCBtaWRfaW5pdF9jYl8yNHh4KTsKLQogCWhhLT5pbml0X2NiID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBoYS0+aW5pdF9jYl9zaXplLAogCQkmaGEtPmluaXRfY2JfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhhLT5pbml0X2NiKQpAQCAtMjUyMiw2ICsyNTE4LDE5IEBACiAJcmV0dXJuIHFsYTJ4MDBfcG9zdF93b3JrKHZoYSwgZSwgMSk7CiB9CiAKK2ludAorcWxhMngwMF9wb3N0X2lkY19hY2tfd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhLCB1aW50MTZfdCAqbWIpCit7CisJc3RydWN0IHFsYV93b3JrX2V2dCAqZTsKKworCWUgPSBxbGEyeDAwX2FsbG9jX3dvcmsodmhhLCBRTEFfRVZUX0lEQ19BQ0ssIDEpOworCWlmICghZSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CisKKwltZW1jcHkoZS0+dS5pZGNfYWNrLm1iLCBtYiwgUUxBX0lEQ19BQ0tfUkVHUyAqIHNpemVvZih1aW50MTZfdCkpOworCXJldHVybiBxbGEyeDAwX3Bvc3Rfd29yayh2aGEsIGUsIDEpOworfQorCiBzdGF0aWMgdm9pZAogcWxhMngwMF9kb193b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpCiB7CkBAIC0yNTM5LDYgKzI1NDgsOSBAQAogCQkJZmNfaG9zdF9wb3N0X2V2ZW50KHZoYS0+aG9zdCwgZmNfZ2V0X2V2ZW50X251bWJlcigpLAogCQkJICAgIGUtPnUuYWVuLmNvZGUsIGUtPnUuYWVuLmRhdGEpOwogCQkJYnJlYWs7CisJCWNhc2UgUUxBX0VWVF9JRENfQUNLOgorCQkJcWxhODF4eF9pZGNfYWNrKHZoYSwgZS0+dS5pZGNfYWNrLm1iKTsKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChlLT5mbGFncyAmIFFMQV9FVlRfRkxBR19GUkVFKQogCQkJa2ZyZWUoZSk7CkBAIC0yNTUyLDcgKzI1NjQsNyBAQAogdm9pZCBxbGEyeDAwX3JlbG9naW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSkKIHsKIAlmY19wb3J0X3QgICAgICAgKmZjcG9ydDsKLQl1aW50OF90ICAgICAgICAgc3RhdHVzOworCWludCBzdGF0dXM7CiAJdWludDE2X3QgICAgICAgIG5leHRfbG9vcGlkID0gMDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCmluZGV4IDljM2I2OTQuLjI4NDgyNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKQEAgLTY4NCw3ICs2ODQsNyBAQAogCQkgICAgImVuZD0weCV4IHNpemU9MHgleC5cbiIsIGxlMzJfdG9fY3B1KHJlZ2lvbi0+Y29kZSksIHN0YXJ0LAogCQkgICAgbGUzMl90b19jcHUocmVnaW9uLT5lbmQpID4+IDIsIGxlMzJfdG9fY3B1KHJlZ2lvbi0+c2l6ZSkpKTsKIAotCQlzd2l0Y2ggKGxlMzJfdG9fY3B1KHJlZ2lvbi0+Y29kZSkpIHsKKwkJc3dpdGNoIChsZTMyX3RvX2NwdShyZWdpb24tPmNvZGUpICYgMHhmZikgewogCQljYXNlIEZMVF9SRUdfRlc6CiAJCQloYS0+Zmx0X3JlZ2lvbl9mdyA9IHN0YXJ0OwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCBjZmE0YzExLi5hNzcyZWFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCkBAIC03LDcgKzcsNyBAQAogLyoKICAqIERyaXZlciB2ZXJzaW9uCiAgKi8KLSNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDAtazIiCisjZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjAwLWs0IgogCiAjZGVmaW5lIFFMQV9EUklWRVJfTUFKT1JfVkVSCTgKICNkZWZpbmUgUUxBX0RSSVZFUl9NSU5PUl9WRVIJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA5NDBkYzMyLi5iODJmZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtMTA0MCwxMiArMTA0MCwxMSBAQAogCQkJCWFjdGlvbiA9IEFDVElPTl9GQUlMOwogCQkJYnJlYWs7CiAJCWNhc2UgQUJPUlRFRF9DT01NQU5EOgorCQkJYWN0aW9uID0gQUNUSU9OX0ZBSUw7CiAJCQlpZiAoc3NoZHIuYXNjID09IDB4MTApIHsgLyogRElGICovCiAJCQkJZGVzY3JpcHRpb24gPSAiVGFyZ2V0IERhdGEgSW50ZWdyaXR5IEZhaWx1cmUiOwotCQkJCWFjdGlvbiA9IEFDVElPTl9GQUlMOwogCQkJCWVycm9yID0gLUVJTFNFUTsKLQkJCX0gZWxzZQotCQkJCWFjdGlvbiA9IEFDVElPTl9SRVRSWTsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE5PVF9SRUFEWToKIAkJCS8qIElmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVjb21pbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCA2NjUwNWJiLi44ZjRkZTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0zMTcsNiArMzE3LDcgQEAKIAlyZXR1cm4gc2RldjsKIAogb3V0X2RldmljZV9kZXN0cm95OgorCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0RFTCk7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBkNTc1NjZiLi40OTcwYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiBzdGF0aWMgdm9pZCBzZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfZGlzayAqLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7CiBzdGF0aWMgdm9pZCBzZF9wcmludF9yZXN1bHQoc3RydWN0IHNjc2lfZGlzayAqLCBpbnQpOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNkX2luZGV4X2xvY2spOwogc3RhdGljIERFRklORV9JREEoc2RfaW5kZXhfaWRhKTsKIAogLyogVGhpcyBzZW1hcGhvcmUgaXMgdXNlZCB0byBtZWRpYXRlIHRoZSAwLT4xIHJlZmVyZW5jZSBnZXQgaW4gdGhlCkBAIC0xMTY2LDIzICsxMTY3LDE5IEBACiAJCS8qCiAJCSAqIFRoZSBkZXZpY2UgZG9lcyBub3Qgd2FudCB0aGUgYXV0b21hdGljIHN0YXJ0IHRvIGJlIGlzc3VlZC4KIAkJICovCi0JCWlmIChzZGtwLT5kZXZpY2UtPm5vX3N0YXJ0X29uX2FkZCkgeworCQlpZiAoc2RrcC0+ZGV2aWNlLT5ub19zdGFydF9vbl9hZGQpCiAJCQlicmVhazsKLQkJfQogCi0JCS8qCi0JCSAqIElmIG1hbnVhbCBpbnRlcnZlbnRpb24gaXMgcmVxdWlyZWQsIG9yIHRoaXMgaXMgYW4KLQkJICogYWJzZW50IFVTQiBzdG9yYWdlIGRldmljZSwgYSBzcGludXAgaXMgbWVhbmluZ2xlc3MuCi0JCSAqLwotCQlpZiAoc2Vuc2VfdmFsaWQgJiYKLQkJICAgIHNzaGRyLnNlbnNlX2tleSA9PSBOT1RfUkVBRFkgJiYKLQkJICAgIHNzaGRyLmFzYyA9PSA0ICYmIHNzaGRyLmFzY3EgPT0gMykgewotCQkJYnJlYWs7CQkvKiBtYW51YWwgaW50ZXJ2ZW50aW9uIHJlcXVpcmVkICovCi0KLQkJLyoKLQkJICogSXNzdWUgY29tbWFuZCB0byBzcGluIHVwIGRyaXZlIHdoZW4gbm90IHJlYWR5Ci0JCSAqLwotCQl9IGVsc2UgaWYgKHNlbnNlX3ZhbGlkICYmIHNzaGRyLnNlbnNlX2tleSA9PSBOT1RfUkVBRFkpIHsKKwkJaWYgKHNlbnNlX3ZhbGlkICYmIHNzaGRyLnNlbnNlX2tleSA9PSBOT1RfUkVBRFkpIHsKKwkJCWlmIChzc2hkci5hc2MgPT0gNCAmJiBzc2hkci5hc2NxID09IDMpCisJCQkJYnJlYWs7CS8qIG1hbnVhbCBpbnRlcnZlbnRpb24gcmVxdWlyZWQgKi8KKwkJCWlmIChzc2hkci5hc2MgPT0gNCAmJiBzc2hkci5hc2NxID09IDB4YikKKwkJCQlicmVhazsJLyogc3RhbmRieSAqLworCQkJaWYgKHNzaGRyLmFzYyA9PSA0ICYmIHNzaGRyLmFzY3EgPT0gMHhjKQorCQkJCWJyZWFrOwkvKiB1bmF2YWlsYWJsZSAqLworCQkJLyoKKwkJCSAqIElzc3VlIGNvbW1hbmQgdG8gc3BpbiB1cCBkcml2ZSB3aGVuIG5vdCByZWFkeQorCQkJICovCiAJCQlpZiAoIXNwaW50aW1lKSB7CiAJCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiU3Bpbm5pbmcgdXAgZGlzay4uLiIpOwogCQkJCWNtZFswXSA9IFNUQVJUX1NUT1A7CkBAIC0xOTE0LDcgKzE5MTEsOSBAQAogCQlpZiAoIWlkYV9wcmVfZ2V0KCZzZF9pbmRleF9pZGEsIEdGUF9LRVJORUwpKQogCQkJZ290byBvdXRfcHV0OwogCisJCXNwaW5fbG9jaygmc2RfaW5kZXhfbG9jayk7CiAJCWVycm9yID0gaWRhX2dldF9uZXcoJnNkX2luZGV4X2lkYSwgJmluZGV4KTsKKwkJc3Bpbl91bmxvY2soJnNkX2luZGV4X2xvY2spOwogCX0gd2hpbGUgKGVycm9yID09IC1FQUdBSU4pOwogCiAJaWYgKGVycm9yKQpAQCAtMTkzNiw3ICsxOTM1LDkgQEAKIAlyZXR1cm4gMDsKIAogIG91dF9mcmVlX2luZGV4OgorCXNwaW5fbG9jaygmc2RfaW5kZXhfbG9jayk7CiAJaWRhX3JlbW92ZSgmc2RfaW5kZXhfaWRhLCBpbmRleCk7CisJc3Bpbl91bmxvY2soJnNkX2luZGV4X2xvY2spOwogIG91dF9wdXQ6CiAJcHV0X2Rpc2soZ2QpOwogIG91dF9mcmVlOgpAQCAtMTk4Niw3ICsxOTg3LDkgQEAKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGRldik7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBzZGtwLT5kaXNrOwogCQorCXNwaW5fbG9jaygmc2RfaW5kZXhfbG9jayk7CiAJaWRhX3JlbW92ZSgmc2RfaW5kZXhfaWRhLCBzZGtwLT5pbmRleCk7CisJc3Bpbl91bmxvY2soJnNkX2luZGV4X2xvY2spOwogCiAJZGlzay0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlwdXRfZGlzayhkaXNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggOGYwYmQzZi4uYjRlZjJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJY2FzZSBCTEtUUkFDRVNFVFVQOgogCQlyZXR1cm4gYmxrX3RyYWNlX3NldHVwKHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLAogCQkJCSAgICAgICBzZHAtPmRpc2stPmRpc2tfbmFtZSwKLQkJCQkgICAgICAgc2RwLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LmRldnQsCisJCQkJICAgICAgIE1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwgc2RwLT5pbmRleCksCiAJCQkJICAgICAgIChjaGFyICopYXJnKTsKIAljYXNlIEJMS1RSQUNFU1RBUlQ6CiAJCXJldHVybiBibGtfdHJhY2Vfc3RhcnRzdG9wKHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCAxKTsKQEAgLTExNTQsNyArMTE1NCw2IEBACiBzdGF0aWMgaW50CiBzZ19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG1vZGUpCiB7Ci0JaW50IHJldHZhbDsKIAlTZ19kZXZpY2UgKnNkcDsKIAlTZ19mZCAqc2ZwOwogCkBAIC0xMTYzLDggKzExNjIsNyBAQAogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19mYXN5bmM6ICVzLCBtb2RlPSVkXG4iLAogCQkJCSAgIHNkcC0+ZGlzay0+ZGlza19uYW1lLCBtb2RlKSk7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBtb2RlLCAmc2ZwLT5hc3luY19xcCk7Ci0JcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG1vZGUsICZzZnAtPmFzeW5jX3FwKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3phbG9uLmMgYi9kcml2ZXJzL3Njc2kvemFsb24uYwppbmRleCBhOGQ2MWE2Li45N2YzMTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvemFsb24uYworKysgYi9kcml2ZXJzL3Njc2kvemFsb24uYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCWdvdG8gZmFpbDsKIAogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgbmNyNTNjOHh4X2ludHIsIElSUUZfU0hBUkVELCAiemFsb24iLCBob3N0KSkgewotCSAgZGV2X3ByaW50ayhLRVJOX0VSUiwgZGV2LCAiaXJxIHByb2JsZW0gd2l0aCAlZCwgZGV0YWNoaW5nXG4gIiwKKwkgIGRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPmRldiwgImlycSBwcm9ibGVtIHdpdGggJWQsIGRldGFjaGluZ1xuICIsCiAJCSAgICAgZGV2LT5pcnEpOwogCQlnb3RvIGZhaWw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDBkOTM0YmYuLmI0YjM5ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTIwODMsNiArMjA4MywyMCBAQAogCiAJc2VyaWFsODI1MF9zZXRfbWN0cmwoJnVwLT5wb3J0LCB1cC0+cG9ydC5tY3RybCk7CiAKKwkvKiBTZXJpYWwgb3ZlciBMYW4gKFNvTCkgaGFjazoKKwkgICBJbnRlbCA4MjU3eCBHaWdhYml0IGV0aGVybmV0IGNoaXBzIGhhdmUgYQorCSAgIDE2NTUwIGVtdWxhdGlvbiwgdG8gYmUgdXNlZCBmb3IgU2VyaWFsIE92ZXIgTGFuLgorCSAgIFRob3NlIGNoaXBzIHRha2UgYSBsb25nZXIgdGltZSB0aGFuIGEgbm9ybWFsCisJICAgc2VyaWFsIGRldmljZSB0byBzaWduYWxpemUgdGhhdCBhIHRyYW5zbWlzc2lvbgorCSAgIGRhdGEgd2FzIHF1ZXVlZC4gRHVlIHRvIHRoYXQsIHRoZSBhYm92ZSB0ZXN0IGdlbmVyYWxseQorCSAgIGZhaWxzLiBPbmUgc29sdXRpb24gd291bGQgYmUgdG8gZGVsYXkgdGhlIHJlYWRpbmcgb2YKKwkgICBpaXIuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlbGlhYmxlLCBzaW5jZSB0aGUgdGltZW91dAorCSAgIGlzIHZhcmlhYmxlLiBTbywgbGV0J3MganVzdCBkb24ndCB0ZXN0IGlmIHdlIHJlY2VpdmUKKwkgICBUWCBpcnEuIFRoaXMgd2F5LCB3ZSdsbCBuZXZlciBlbmFibGUgVUFSVF9CVUdfVFhFTi4KKwkgKi8KKwlpZiAodXAtPnBvcnQuZmxhZ3MgJiBVUEZfTk9fVFhFTl9URVNUKQorCQlnb3RvIGRvbnRfdGVzdF90eF9lbjsKKwogCS8qCiAJICogRG8gYSBxdWljayB0ZXN0IHRvIHNlZSBpZiB3ZSByZWNlaXZlIGFuCiAJICogaW50ZXJydXB0IHdoZW4gd2UgZW5hYmxlIHRoZSBUWCBpcnEuCkBAIC0yMTAyLDYgKzIxMTYsNyBAQAogCQl1cC0+YnVncyAmPSB+VUFSVF9CVUdfVFhFTjsKIAl9CiAKK2RvbnRfdGVzdF90eF9lbjoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggNTM2ZDhlNS4uNTMzZjgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC03OTgsNiArNzk4LDIxIEBACiAJcmV0dXJuIHNldHVwX3BvcnQocHJpdiwgcG9ydCwgYmFyLCBvZmZzZXQsIGJvYXJkLT5yZWdfc2hpZnQpOwogfQogCitzdGF0aWMgaW50IHNraXBfdHhfZW5fc2V0dXAoc3RydWN0IHNlcmlhbF9wcml2YXRlICpwcml2LAorCQkJY29uc3Qgc3RydWN0IHBjaXNlcmlhbF9ib2FyZCAqYm9hcmQsCisJCQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgaWR4KQoreworCXBvcnQtPmZsYWdzIHw9IFVQRl9OT19UWEVOX1RFU1Q7CisJcHJpbnRrKEtFUk5fREVCVUcgInNlcmlhbDgyNTA6IHNraXBwaW5nIFR4RW4gdGVzdCBmb3IgZGV2aWNlICIKKwkJCSAgIlslMDR4OiUwNHhdIHN1YnN5c3RlbSBbJTA0eDolMDR4XVxuIiwKKwkJCSAgcHJpdi0+ZGV2LT52ZW5kb3IsCisJCQkgIHByaXYtPmRldi0+ZGV2aWNlLAorCQkJICBwcml2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IsCisJCQkgIHByaXYtPmRldi0+c3Vic3lzdGVtX2RldmljZSk7CisKKwlyZXR1cm4gcGNpX2RlZmF1bHRfc2V0dXAocHJpdiwgYm9hcmQsIHBvcnQsIGlkeCk7Cit9CisKIC8qIFRoaXMgc2hvdWxkIGJlIGluIGxpbnV4L3BjaV9pZHMuaCAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NCU01PRFVMQVJJTwkweDEyNEIKICNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9TQlNNT0RVTEFSSU8JMHgxMjRCCkBAIC04NjQsNiArODc5LDI3IEBACiAJCS5pbml0CQk9IHBjaV9pbnRlbGk5NjBuaV9pbml0LAogCQkuc2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAsCiAJfSwKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTdYX1NPTCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuc2V0dXAJCT0gc2tpcF90eF9lbl9zZXR1cCwKKwl9LAorCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzNMX1NPTCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuc2V0dXAJCT0gc2tpcF90eF9lbl9zZXR1cCwKKwl9LAorCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzNFX1NPTCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuc2V0dXAJCT0gc2tpcF90eF9lbl9zZXR1cCwKKwl9LAogCS8qCiAJICogSVRFCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IDg5MzYyZDcuLjhmNThmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCkBAIC04NzcsNiArODc3LDEwIEBACiAJCX0KIAl9CiAKKwkvKiBTYXZlIGN1cnJlbnQgQ1NSIGZvciBjb21wYXJpc29uIGluIGF0bWVsX3Rhc2tsZXRfZnVuYygpICovCisJYXRtZWxfcG9ydC0+aXJxX3N0YXR1c19wcmV2ID0gVUFSVF9HRVRfQ1NSKHBvcnQpOworCWF0bWVsX3BvcnQtPmlycV9zdGF0dXMgPSBhdG1lbF9wb3J0LT5pcnFfc3RhdHVzX3ByZXY7CisKIAkvKgogCSAqIEZpbmFsbHksIGVuYWJsZSB0aGUgc2VyaWFsIHBvcnQKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX2RyaXZlci5jCmluZGV4IDkyMTg3ZTIuLmFjNzljYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYwpAQCAtODQsNiArODQsOCBAQAogCWJyZC0+cGNpX2RldiA9IHBkZXY7CiAJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lFX0RFVklDRV9JRF9ORU9fNF9JQk0pCiAJCWJyZC0+bWF4cG9ydHMgPSA0OworCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0RJR0lfTkVPXzgpCisJCWJyZC0+bWF4cG9ydHMgPSA4OwogCWVsc2UKIAkJYnJkLT5tYXhwb3J0cyA9IDI7CiAKQEAgLTIxMiw2ICsyMTQsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSV9ERVZJQ0VfSURfTkVPXzJSSjQ1KSwgMCwgMCwgMiB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSV9ERVZJQ0VfSURfTkVPXzJSSjQ1UFJJKSwgMCwgMCwgMyB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSUVfREVWSUNFX0lEX05FT180X0lCTSksIDAsIDAsIDQgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ESUdJLCBQQ0lfREVWSUNFX0lEX0RJR0lfTkVPXzgpLCAwLCAwLCA1IH0sCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGpzbV9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggNTU3YjU0YS4uZGJmNTM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCX0gd2hpbGUgKCEoc3RhdHVzICYgU0N4U1JfVER4RShwb3J0KSkpOwogCiAJc2NpX2luKHBvcnQsIFNDeFNSKTsgICAgICAgICAgICAvKiBEdW1teSByZWFkICovCi0Jc2NpX291dChwb3J0LCBTQ3hTUiwgU0N4U1JfVER4RV9DTEVBUihwb3J0KSk7CisJc2NpX291dChwb3J0LCBTQ3hTUiwgU0N4U1JfVER4RV9DTEVBUihwb3J0KSAmIH5TQ3hTUl9URU5EKHBvcnQpKTsKIAlzY2lfb3V0KHBvcnQsIFNDeFREUiwgYyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0NPTlNPTEVfUE9MTCB8fCBDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFICovCkBAIC0yNjMsNiArMjYzLDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2lfaW5pdF9waW5zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZykKIHsKQEAgLTI4NCw3ICsyODUsOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJcmV0dXJuIFNDSUZfVFhST09NX01BWCAtIChzY2lfaW4ocG9ydCwgU0NURkRSKSAmIDB4ZmYpOwpAQCAtMTA5NSw2ICsxMDk3LDcgQEAKIAkJCQkgdW5zaWduZWQgY291bnQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzZXJpYWxfY29uc29sZV9wb3J0LT5wb3J0OworCXVuc2lnbmVkIHNob3J0IGJpdHM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtMTEwMyw2ICsxMTA2LDExIEBACiAKIAkJc2NpX3BvbGxfcHV0X2NoYXIocG9ydCwgKnMrKyk7CiAJfQorCisJLyogd2FpdCB1bnRpbCBmaWZvIGlzIGVtcHR5IGFuZCBsYXN0IGJpdCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLworCWJpdHMgPSBTQ3hTUl9URHhFKHBvcnQpIHwgU0N4U1JfVEVORChwb3J0KTsKKwl3aGlsZSAoKHNjaV9pbihwb3J0LCBTQ3hTUikgJiBiaXRzKSAhPSBiaXRzKQorCQljcHVfcmVsYXgoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2VyaWFsX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCAzNTk5ODI4Li5kMGFhODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfSDgzMDA3KSB8fCBkZWZpbmVkKENPTkZJR19IODMwNjgpCiAjaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+CkBAIC0xMjYsMTQgKzEyNiwxNSBAQAogIyBkZWZpbmUgU0NTUFRSMQkweGZmZTEwMDI0CS8qIDE2IGJpdCBTQ0lGICovCiAjIGRlZmluZSBTQ0lGX09SRVIJMHgwMDAxCQkvKiBPdmVycnVuIGVycm9yIGJpdCAqLwogIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KQkweDNhCS8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSxSRUlFPTEgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogIyBkZWZpbmUgU0NTUFRSMAkweGZmZWEwMDI0CS8qIDE2IGJpdCBTQ0lGICovCiAjIGRlZmluZSBTQ1NQVFIxCTB4ZmZlYjAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjIJMHhmZmVjMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NTUFRSMwkweGZmZWQwMDI0CS8qIDE2IGJpdCBTQ0lGICovCiAjIGRlZmluZSBTQ1NQVFI0CTB4ZmZlZTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjUJMHhmZmVmMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NJRl9PUEVSCTB4MDAwMQkJLyogT3ZlcnJ1biBlcnJvciBiaXQgKi8KKyMgZGVmaW5lIFNDSUZfT1JFUgkweDAwMDEJCS8qIE92ZXJydW4gZXJyb3IgYml0ICovCiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpCTB4M2EJLyogVElFPTAsUklFPTAsVEU9MSxSRT0xLFJFSUU9MSAqLwogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpIHx8IFwKQEAgLTE4Miw2ICsxODMsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSAgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikgIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQogI2RlZmluZSBTQ0lfQ1RSTF9GTEFHU19SRUlFIDB4MDggLyogNzc1MCBTQ0lGICovCiAjZWxzZQpAQCAtNDEzLDcgKzQxNSw4IEBACiBTQ0lGX0ZOUyhTQ0ZDUiwgICAgICAgICAgICAgICAgICAgICAgMHgwYywgIDgsIDB4MTgsIDE2KQogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiBTQ0lGX0ZOUyhTQ0ZEUiwJCQkgICAgIDB4MGUsIDE2LCAweDFDLCAxNikKIFNDSUZfRk5TKFNDVEZEUiwJCSAgICAgMHgwZSwgMTYsIDB4MUMsIDE2KQogU0NJRl9GTlMoU0NSRkRSLAkJICAgICAweDBlLCAxNiwgMHgyMCwgMTYpCkBAIC02NDQsNyArNjQ3LDggQEAKIAkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYTAwMDApCkBAIC03NDYsNyArNzUwLDggQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoY2xrKzE2KmJwcykvKDE2KmJwcyktMSkKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwppbmRleCA0NWEyOTlmLi5lMDlkM2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKQEAgLTE0MzgsMTIgKzE0MzgsMTIgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogS2V5Ym9hcmQgYXQgTU1JTyAweCVsbHggKGlycSA9ICVkKSAiCiAJCSAgICAgICAiaXMgYSAlc1xuIiwKLQkJICAgICAgIG9wLT5kZXYuYnVzX2lkLAorCQkgICAgICAgZGV2X25hbWUoJm9wLT5kZXYpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdXBbMF0ucG9ydC5tYXBiYXNlLAogCQkgICAgICAgb3AtPmlycXNbMF0sIHN1bnppbG9nX3R5cGUoJnVwWzBdLnBvcnQpKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1vdXNlIGF0IE1NSU8gMHglbGx4IChpcnEgPSAlZCkgIgogCQkgICAgICAgImlzIGEgJXNcbiIsCi0JCSAgICAgICBvcC0+ZGV2LmJ1c19pZCwKKwkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzFdLnBvcnQubWFwYmFzZSwKIAkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFsxXS5wb3J0KSk7CiAJCWtibV9pbnN0Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMuYyBiL2RyaXZlcnMvc2gvaW50Yy5jCmluZGV4IDU4ZDI0YzUuLjIyNjlmYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvaW50Yy5jCisrKyBiL2RyaXZlcnMvc2gvaW50Yy5jCkBAIC01NjgsNiArNTY4LDEwIEBACiAJaWYgKCFkYXRhWzBdICYmIGRhdGFbMV0pCiAJCXByaW1hcnkgPSAxOwogCisJaWYgKCFkYXRhWzBdICYmICFkYXRhWzFdKQorCQlwcl93YXJuaW5nKCJpbnRjOiBtaXNzaW5nIHVuaXF1ZSBpcnEgbWFzayBmb3IgIgorCQkJICAgImlycSAlZCAodmVjdCAweCUwNHgpXG4iLCBpcnEsIGlycTJldnQoaXJxKSk7CisKIAlkYXRhWzBdID0gZGF0YVswXSA/IGRhdGFbMF0gOiBpbnRjX21hc2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAxKTsKIAlkYXRhWzFdID0gZGF0YVsxXSA/IGRhdGFbMV0gOiBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAxKTsKIApAQCAtNjQxLDYgKzY0NSwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciAqaW50Y19ldnQyaXJxX3RhYmxlOworCit1bnNpZ25lZCBpbnQgaW50Y19ldnQyaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgaW50IGlycSA9IGV2dDJpcnEodmVjdG9yKTsKKworCWlmIChpbnRjX2V2dDJpcnFfdGFibGUgJiYgaW50Y19ldnQyaXJxX3RhYmxlW2lycV0pCisJCWlycSA9IGludGNfZXZ0MmlycV90YWJsZVtpcnFdOworCisJcmV0dXJuIGlycTsKK30KIAogdm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpCiB7CkBAIC03MDUsOCArNzIwLDQwIEBACiAKIAlCVUdfT04oayA+IDI1Nik7IC8qIF9JTlRDX0FERFJfRSgpIGFuZCBfSU5UQ19BRERSX0QoKSBhcmUgOCBiaXRzICovCiAKKwkvKiBrZWVwIHRoZSBmaXJzdCB2ZWN0b3Igb25seSBpZiBzYW1lIGVudW0gaXMgdXNlZCBtdWx0aXBsZSB0aW1lcyAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKIAkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOworCQlpbnQgZmlyc3RfaXJxID0gZXZ0MmlycSh2ZWN0LT52ZWN0KTsKKworCQlpZiAoIXZlY3QtPmVudW1faWQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGsgPSBpICsgMTsgayA8IGRlc2MtPm5yX3ZlY3RvcnM7IGsrKykgeworCQkJc3RydWN0IGludGNfdmVjdCAqdmVjdDIgPSBkZXNjLT52ZWN0b3JzICsgazsKKworCQkJaWYgKHZlY3QtPmVudW1faWQgIT0gdmVjdDItPmVudW1faWQpCisJCQkJY29udGludWU7CisKKwkJCXZlY3QyLT5lbnVtX2lkID0gMDsKKworCQkJaWYgKCFpbnRjX2V2dDJpcnFfdGFibGUpCisJCQkJaW50Y19ldnQyaXJxX3RhYmxlID0gYWxsb2NfYm9vdG1lbShOUl9JUlFTKTsKKworCQkJaWYgKCFpbnRjX2V2dDJpcnFfdGFibGUpIHsKKwkJCQlwcl93YXJuaW5nKCJpbnRjOiBjYW5ub3QgYWxsb2NhdGUgZXZ0MmlycSFcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpbnRjX2V2dDJpcnFfdGFibGVbZXZ0MmlycSh2ZWN0Mi0+dmVjdCldID0gZmlyc3RfaXJxOworCQl9CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIHZlY3RvcnMgb25lIGJ5IG9uZSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKKwkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOworCisJCWlmICghdmVjdC0+ZW51bV9pZCkKKwkJCWNvbnRpbnVlOwogCiAJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwppbmRleCA2M2YwZGUyLi5jYWIxYWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKKysrIGIvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCkBAIC0xLDE2ICsxLDEwIEBACiAvKgogICogQ29yZSBtYXBsZSBidXMgZnVuY3Rpb25hbGl0eQogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWRyaWFuIE1jTWVuYW1pbgorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgQWRyaWFuIE1jTWVuYW1pbgogICogIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDggUGF1bCBNdW5kdAotICoKLSAqIEJhc2VkIG9uIDIuNCBjb2RlIGJ5OgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBZQUVHQVNISSBUYWtlc2hpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMSBZQUVHQVNISSBUYWtlc2hpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIE0uIFIuIEJyb3duCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdWwgTXVuZHQKLSAqCi0gKiBhbmQgb3RoZXJzLgogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0zMiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2FzaWMuaD4KIAotTU9EVUxFX0FVVEhPUigiWWFlZ2FzaGkgVGFrZXNoaSwgUGF1bCBNdW5kdCwgTS4gUi4gQnJvd24sIEFkcmlhbiBNY01lbmFtaW4iKTsKK01PRFVMRV9BVVRIT1IoIkFkcmlhbiBNY01lbmFtaW4gPGFkcmlhbkBtY21lbi5kZW1vbi5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTWFwbGUgYnVzIGRyaXZlciBmb3IgRHJlYW1jYXN0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tTRUdBLCBEcmVhbWNhc3QvTWFwbGV9fSIpOwpAQCAtNDksNyArNDMsNyBAQAogLyogbXV0ZXggdG8gcHJvdGVjdCBxdWV1ZSBvZiB3YWl0aW5nIHBhY2tldHMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgobWFwbGVfd2xpc3RfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX2R1bW15X2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZTsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIG1hcGxlX2J1czsKIHN0YXRpYyBpbnQgc3ViZGV2aWNlX21hcFtNQVBMRV9QT1JUU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWFwbGVfc2VuZGJ1ZiwgKm1hcGxlX3NlbmRwdHIsICptYXBsZV9sYXN0cHRyOwpAQCAtNjIsOCArNTYsOSBAQAogCWludCB1bml0OwogfTsKIAotc3RhdGljIGJvb2wgY2hlY2tlZFs0XTsKLXN0YXRpYyBzdHJ1Y3QgbWFwbGVfZGV2aWNlICpiYXNldW5pdHNbNF07CitzdGF0aWMgYm9vbCBjaGVja2VkW01BUExFX1BPUlRTXTsKK3N0YXRpYyBib29sIGVtcHR5W01BUExFX1BPUlRTXTsKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZGV2aWNlICpiYXNldW5pdHNbTUFQTEVfUE9SVFNdOwogCiAvKioKICAqIG1hcGxlX2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgbWFwbGUgZHJpdmVyCkBAIC05NywxMiArOTIsMjAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogLyogc2V0IGhhcmR3YXJlIHJlZ2lzdGVycyB0byBlbmFibGUgbmV4dCByb3VuZCBvZiBkbWEgKi8KLXN0YXRpYyB2b2lkIG1hcGxlYnVzX2RtYV9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgbWFwbGVfZG1hX3Jlc2V0KHZvaWQpCiB7CiAJY3RybF9vdXRsKE1BUExFX01BR0lDLCBNQVBMRV9SRVNFVCk7CiAJLyogc2V0IHRyaWcgdHlwZSB0byAwIGZvciBzb2Z0d2FyZSB0cmlnZ2VyLCAxIGZvciBoYXJkd2FyZSAoVkJMQU5LKSAqLwogCWN0cmxfb3V0bCgxLCBNQVBMRV9UUklHVFlQRSk7Ci0JY3RybF9vdXRsKE1BUExFXzJNQlBTIHwgTUFQTEVfVElNRU9VVCg1MDAwMCksIE1BUExFX1NQRUVEKTsKKwkvKgorCSogTWFwbGUgc3lzdGVtIHJlZ2lzdGVyCisJKiBiaXRzIDMxIC0gMTYJdGltZW91dCBpbiB1bml0cyBvZiAyMG5zZWMKKwkqIGJpdCAxMgloYXJkIHRyaWdnZXIgLSBzZXQgMCB0byBrZWVwIHJlc3BvbmRpbmcgdG8gVkJMQU5LCisJKiBiaXRzIDkgLSA4CXNldCAwMCBmb3IgMiBNYnBzLCAwMSBmb3IgMSBNYnBzCisJKiBiaXRzIDMgLSAwCWRlbGF5IChpbiAxLjNtcykgYmV0d2VlbiBWQkxBTksgYW5kIHN0YXJ0IG9mIERNQQorCSogbWF4IGRlbGF5IGlzIDExCisJKi8KKwljdHJsX291dGwoTUFQTEVfMk1CUFMgfCBNQVBMRV9USU1FT1VUKDB4RkZGRiksIE1BUExFX1NQRUVEKTsKIAljdHJsX291dGwoUEhZU0FERFIobWFwbGVfc2VuZGJ1ZiksIE1BUExFX0RNQUFERFIpOwogCWN0cmxfb3V0bCgxLCBNQVBMRV9FTkFCTEUpOwogfQpAQCAtMTM0LDIxICsxMzcsMTYgQEAKIHsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OwogCXN0cnVjdCBtYXBsZXEgKm1xOwotCWlmICghZGV2KQotCQlyZXR1cm47CisKIAltZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7CiAJbXEgPSBtZGV2LT5tcTsKLQlpZiAobXEpIHsKLQkJaWYgKG1xLT5yZWN2YnVmZGNzcCkKLQkJCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbXEtPnJlY3ZidWZkY3NwKTsKLQkJa2ZyZWUobXEpOwotCQltcSA9IE5VTEw7Ci0JfQorCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbXEtPnJlY3ZidWYpOworCWtmcmVlKG1xKTsKIAlrZnJlZShtZGV2KTsKIH0KIAogLyoqCi0gKiBtYXBsZV9hZGRfcGFja2V0IC0gYWRkIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIHRoZSBxdWV1ZQorICogbWFwbGVfYWRkX3BhY2tldCAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgbWFwbGUgYnVzIHF1ZXVlCiAgKiBAbWRldjogbWFwbGUgZGV2aWNlCiAgKiBAZnVuY3Rpb246IGZ1bmN0aW9uIG9uIGRldmljZSBiZWluZyBxdWVyaWVkCiAgKiBAY29tbWFuZDogbWFwbGUgY29tbWFuZCB0byBhZGQKQEAgLTE1OCwyMyArMTU2LDEyIEBACiBpbnQgbWFwbGVfYWRkX3BhY2tldChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sIHUzMiBjb21tYW5kLAogCXNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCiB7Ci0JaW50IGxvY2tpbmcsIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAJdm9pZCAqc2VuZGJ1ZiA9IE5VTEw7CiAKLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkvKiBib3VuY2UgaWYgZGV2aWNlIGFscmVhZHkgbG9ja2VkICovCi0JbG9ja2luZyA9IG11dGV4X2lzX2xvY2tlZCgmbWRldi0+bXEtPm11dGV4KTsKLQlpZiAobG9ja2luZykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW11dGV4X2xvY2soJm1kZXYtPm1xLT5tdXRleCk7Ci0KIAlpZiAobGVuZ3RoKSB7Ci0JCXNlbmRidWYgPSBrbWFsbG9jKGxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOworCQlzZW5kYnVmID0ga3phbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzZW5kYnVmKSB7Ci0JCQltdXRleF91bmxvY2soJm1kZXYtPm1xLT5tdXRleCk7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTE4Nyw4NCArMTc0LDM2IEBACiAJCW1lbWNweShzZW5kYnVmICsgNCwgZGF0YSwgKGxlbmd0aCAtIDEpICogNCk7CiAJbWRldi0+bXEtPnNlbmRidWYgPSBzZW5kYnVmOwogCi0JbGlzdF9hZGQoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwotb3V0OgorCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwogCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2FkZF9wYWNrZXQpOwogCi0vKioKLSAqIG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzIC0gYWRkIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIHRoZSBxdWV1ZQotICogQG1kZXY6IG1hcGxlIGRldmljZQotICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBvbiBkZXZpY2UgYmVpbmcgcXVlcmllZAotICogQGNvbW1hbmQ6IG1hcGxlIGNvbW1hbmQgdG8gYWRkCi0gKiBAbGVuZ3RoOiBsZW5ndGggb2YgY29tbWFuZCBzdHJpbmcgKGluIDMyIGJpdCB3b3JkcykKLSAqIEBkYXRhOiByZW1haW5kZXIgb2YgY29tbWFuZCBzdHJpbmcKLSAqCi0gKiBTYW1lIGFzIG1hcGxlX2FkZF9wYWNrZXQoKSwgYnV0IHdhaXRzIGZvciB0aGUgbG9jayB0byBiZWNvbWUgZnJlZS4KLSAqLwotaW50IG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHUzMiBmdW5jdGlvbiwKLQl1MzIgY29tbWFuZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgbG9ja2luZywgcmV0ID0gMDsKLQl2b2lkICpzZW5kYnVmID0gTlVMTDsKLQotCWxvY2tpbmcgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm1kZXYtPm1xLT5tdXRleCk7Ci0JaWYgKGxvY2tpbmcpIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGxlbmd0aCkgewotCQlzZW5kYnVmID0ga21hbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzZW5kYnVmKSB7Ci0JCQltdXRleF91bmxvY2soJm1kZXYtPm1xLT5tdXRleCk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJKChfX2JlMzIgKilzZW5kYnVmKVswXSA9IGNwdV90b19iZTMyKGZ1bmN0aW9uKTsKLQl9Ci0KLQltZGV2LT5tcS0+Y29tbWFuZCA9IGNvbW1hbmQ7Ci0JbWRldi0+bXEtPmxlbmd0aCA9IGxlbmd0aDsKLQlpZiAobGVuZ3RoID4gMSkKLQkJbWVtY3B5KHNlbmRidWYgKyA0LCBkYXRhLCAobGVuZ3RoIC0gMSkgKiA0KTsKLQltZGV2LT5tcS0+c2VuZGJ1ZiA9IHNlbmRidWY7Ci0KLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQlsaXN0X2FkZCgmbWRldi0+bXEtPmxpc3QsICZtYXBsZV93YWl0cSk7Ci0JbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFwbGVfYWRkX3BhY2tldF9zbGVlcHMpOwotCiBzdGF0aWMgc3RydWN0IG1hcGxlcSAqbWFwbGVfYWxsb2NxKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCiB7CiAJc3RydWN0IG1hcGxlcSAqbXE7CiAKLQltcSA9IGttYWxsb2Moc2l6ZW9mKCptcSksIEdGUF9LRVJORUwpOworCW1xID0ga3phbGxvYyhzaXplb2YoKm1xKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtcSkKIAkJZ290byBmYWlsZWRfbm9tZW07CiAKKwlJTklUX0xJU1RfSEVBRCgmbXEtPmxpc3QpOwogCW1xLT5kZXYgPSBtZGV2OwotCW1xLT5yZWN2YnVmZGNzcCA9IGttZW1fY2FjaGVfemFsbG9jKG1hcGxlX3F1ZXVlX2NhY2hlLCBHRlBfS0VSTkVMKTsKLQltcS0+cmVjdmJ1ZiA9ICh2b2lkICopIFAyU0VHQUREUihtcS0+cmVjdmJ1ZmRjc3ApOworCW1xLT5yZWN2YnVmID0ga21lbV9jYWNoZV96YWxsb2MobWFwbGVfcXVldWVfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghbXEtPnJlY3ZidWYpCiAJCWdvdG8gZmFpbGVkX3AyOwotCS8qCi0JICogbW9zdCBkZXZpY2VzIGRvIG5vdCBuZWVkIHRoZSBtdXRleCAtIGJ1dAotCSAqIGFueXRoaW5nIHRoYXQgaW5qZWN0cyBibG9jayByZWFkcyBvciB3cml0ZXMKLQkgKiB3aWxsIHJlbHkgb24gaXQKLQkgKi8KLQltdXRleF9pbml0KCZtcS0+bXV0ZXgpOworCW1xLT5yZWN2YnVmLT5idWYgPSAmKChtcS0+cmVjdmJ1Zi0+YnVmeClbMF0pOwogCiAJcmV0dXJuIG1xOwogCiBmYWlsZWRfcDI6CiAJa2ZyZWUobXEpOwogZmFpbGVkX25vbWVtOgorCWRldl9lcnIoJm1kZXYtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSAoJWQsICVkKVxuIiwKKwkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI3MiwxMiArMjExLDE2IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAorCS8qIHplcm8gdGhpcyBvdXQgdG8gYXZvaWQga29iaiBzdWJzeXN0ZW0KKwkqIHRoaW5raW5nIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCAqLworCiAJbWRldiA9IGt6YWxsb2Moc2l6ZW9mKCptZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZGV2KQogCQlyZXR1cm4gTlVMTDsKIAogCW1kZXYtPnBvcnQgPSBwb3J0OwogCW1kZXYtPnVuaXQgPSB1bml0OworCiAJbWRldi0+bXEgPSBtYXBsZV9hbGxvY3EobWRldik7CiAKIAlpZiAoIW1kZXYtPm1xKSB7CkBAIC0yODYsMTkgKzIyOSwxNCBAQAogCX0KIAltZGV2LT5kZXYuYnVzID0gJm1hcGxlX2J1c190eXBlOwogCW1kZXYtPmRldi5wYXJlbnQgPSAmbWFwbGVfYnVzOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kZXYtPm1hcGxlX3dhaXQpOwogCXJldHVybiBtZGV2OwogfQogCiBzdGF0aWMgdm9pZCBtYXBsZV9mcmVlX2RldihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmICghbWRldikKLQkJcmV0dXJuOwotCWlmIChtZGV2LT5tcSkgewotCQlpZiAobWRldi0+bXEtPnJlY3ZidWZkY3NwKQotCQkJa21lbV9jYWNoZV9mcmVlKG1hcGxlX3F1ZXVlX2NhY2hlLAotCQkJCW1kZXYtPm1xLT5yZWN2YnVmZGNzcCk7Ci0JCWtmcmVlKG1kZXYtPm1xKTsKLQl9CisJa21lbV9jYWNoZV9mcmVlKG1hcGxlX3F1ZXVlX2NhY2hlLCBtZGV2LT5tcS0+cmVjdmJ1Zik7CisJa2ZyZWUobWRldi0+bXEpOwogCWtmcmVlKG1kZXYpOwogfQogCkBAIC0zMjAsNyArMjU4LDcgQEAKIAltYXBsZV9sYXN0cHRyID0gbWFwbGVfc2VuZHB0cjsKIAogCSptYXBsZV9zZW5kcHRyKysgPSAocG9ydCA8PCAxNikgfCBsZW4gfCAweDgwMDAwMDAwOwotCSptYXBsZV9zZW5kcHRyKysgPSBQSFlTQUREUihtcS0+cmVjdmJ1Zik7CisJKm1hcGxlX3NlbmRwdHIrKyA9IFBIWVNBRERSKG1xLT5yZWN2YnVmLT5idWYpOwogCSptYXBsZV9zZW5kcHRyKysgPQogCSAgICBtcS0+Y29tbWFuZCB8ICh0byA8PCA4KSB8IChmcm9tIDw8IDE2KSB8IChsZW4gPDwgMjQpOwogCXdoaWxlIChsZW4tLSA+IDApCkBAIC0zMzMsMjAgKzI3MSwyOCBAQAogCWludCBpLCBtYXBsZV9wYWNrZXRzID0gMDsKIAlzdHJ1Y3QgbWFwbGVxICptcSwgKm5tcTsKIAorCWlmICghbWFwbGVfZG1hX2RvbmUoKSkKKwkJcmV0dXJuOworCisJLyogZGlzYWJsZSBETUEgKi8KKwljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKKwogCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKQotCQlyZXR1cm47CisJCWdvdG8gZmluaXNoOworCiAJbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJm1hcGxlX3dhaXRxKSB8fCAhbWFwbGVfZG1hX2RvbmUoKSkgeworCWlmIChsaXN0X2VtcHR5KCZtYXBsZV93YWl0cSkpIHsKIAkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkJcmV0dXJuOworCQlnb3RvIGZpbmlzaDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwogCW1hcGxlX2xhc3RwdHIgPSBtYXBsZV9zZW5kYnVmOwogCW1hcGxlX3NlbmRwdHIgPSBtYXBsZV9zZW5kYnVmOwotCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1xLCBubXEsICZtYXBsZV93YWl0cSwgbGlzdCkgewogCQltYXBsZV9idWlsZF9ibG9jayhtcSk7Ci0JCWxpc3RfbW92ZSgmbXEtPmxpc3QsICZtYXBsZV9zZW50cSk7CisJCWxpc3RfZGVsX2luaXQoJm1xLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmbXEtPmxpc3QsICZtYXBsZV9zZW50cSk7CiAJCWlmIChtYXBsZV9wYWNrZXRzKysgPiBNQVBMRV9NQVhQQUNLRVRTKQogCQkJYnJlYWs7CiAJfQpAQCAtMzU2LDEwICszMDIsMTMgQEAKIAkJCWRtYV9jYWNoZV9zeW5jKDAsIG1hcGxlX3NlbmRidWYgKyBpICogUEFHRV9TSVpFLAogCQkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKIAl9CisKK2ZpbmlzaDoKKwltYXBsZV9kbWFfcmVzZXQoKTsKIH0KIAogLyogY2hlY2sgaWYgdGhlcmUgaXMgYSBkcml2ZXIgcmVnaXN0ZXJlZCBsaWtlbHkgdG8gbWF0Y2ggdGhpcyBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgY2hlY2tfbWF0Y2hpbmdfbWFwbGVfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IG1hcGxlX2NoZWNrX21hdGNoaW5nX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAogCQkJCQl2b2lkICpkZXZwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RyaXZlciAqbWFwbGVfZHJ2OwpAQCAtMzc0LDEwICszMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXBsZV9kZXRhY2hfZHJpdmVyKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCiB7Ci0JaWYgKCFtZGV2KQotCQlyZXR1cm47CiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1kZXYtPmRldik7Ci0JbWRldiA9IE5VTEw7CiB9CiAKIC8qIHByb2Nlc3MgaW5pdGlhbCBNQVBMRV9DT01NQU5EX0RFVklORk8gZm9yIGVhY2ggZGV2aWNlIG9yIHBvcnQgKi8KQEAgLTM4NSw5ICszMzEsOSBAQAogewogCWNoYXIgKnAsICpyZWN2YnVmOwogCXVuc2lnbmVkIGxvbmcgZnVuY3Rpb247Ci0JaW50IG1hdGNoZWQsIHJldHZhbDsKKwlpbnQgbWF0Y2hlZCwgZXJyb3I7CiAKLQlyZWN2YnVmID0gbWRldi0+bXEtPnJlY3ZidWY7CisJcmVjdmJ1ZiA9IG1kZXYtPm1xLT5yZWN2YnVmLT5idWY7CiAJLyogY29weSB0aGUgZGF0YSBhcyBpbmRpdmlkdWFsIGVsZW1lbnRzIGluCiAJKiBjYXNlIG9mIG1lbW9yeSBvcHRpbWlzYXRpb24gKi8KIAltZW1jcHkoJm1kZXYtPmRldmluZm8uZnVuY3Rpb24sIHJlY3ZidWYgKyA0LCA0KTsKQEAgLTM5NSw3ICszNDEsNiBAQAogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5hcmVhX2NvZGUsIHJlY3ZidWYgKyAyMCwgMSk7CiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLmNvbm5lY3Rvcl9kaXJlY3Rpb24sIHJlY3ZidWYgKyAyMSwgMSk7CiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbmFtZVswXSwgcmVjdmJ1ZiArIDIyLCAzMCk7Ci0JbWVtY3B5KCZtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbGljZW5jZVswXSwgcmVjdmJ1ZiArIDUyLCA2MCk7CiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLnN0YW5kYnlfcG93ZXIsIHJlY3ZidWYgKyAxMTIsIDIpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5tYXhfcG93ZXIsIHJlY3ZidWYgKyAxMTQsIDIpOwogCW1lbWNweShtZGV2LT5wcm9kdWN0X25hbWUsIG1kZXYtPmRldmluZm8ucHJvZHVjdF9uYW1lLCAzMCk7CkBAIC00MTQsNDMgKzM1OSwzOSBAQAogCQllbHNlCiAJCQlicmVhazsKIAotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZSBkZXRlY3RlZDogJXNcbiIsCi0JCW1kZXYtPnByb2R1Y3RfbmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgZGV2aWNlOiAlc1xuIiwgbWRldi0+cHJvZHVjdF9saWNlbmNlKTsKLQogCWZ1bmN0aW9uID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbik7CiAKKwlkZXZfaW5mbygmbWRldi0+ZGV2LCAiZGV0ZWN0ZWQgJXM6IGZ1bmN0aW9uIDB4JWxYOiBhdCAoJWQsICVkKVxuIiwKKwkJbWRldi0+cHJvZHVjdF9uYW1lLCBmdW5jdGlvbiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisKIAlpZiAoZnVuY3Rpb24gPiAweDIwMCkgewogCQkvKiBEbyB0aGlzIHNpbGVudGx5IC0gYXMgbm90IGEgcmVhbCBkZXZpY2UgKi8KIAkJZnVuY3Rpb24gPSAwOwotCQltZGV2LT5kcml2ZXIgPSAmbWFwbGVfZHVtbXlfZHJpdmVyOwotCQlzcHJpbnRmKG1kZXYtPmRldi5idXNfaWQsICIlZDowLnBvcnQiLCBtZGV2LT5wb3J0KTsKKwkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZTsKKwkJZGV2X3NldF9uYW1lKCZtZGV2LT5kZXYsICIlZDowLnBvcnQiLCBtZGV2LT5wb3J0KTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiTWFwbGUgYnVzIGF0ICglZCwgJWQpOiBGdW5jdGlvbiAweCVsWFxuIiwKLQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKLQogCQltYXRjaGVkID0KIAkJCWJ1c19mb3JfZWFjaF9kcnYoJm1hcGxlX2J1c190eXBlLCBOVUxMLCBtZGV2LAotCQkJCWNoZWNrX21hdGNoaW5nX21hcGxlX2RyaXZlcik7CisJCQkJbWFwbGVfY2hlY2tfbWF0Y2hpbmdfZHJpdmVyKTsKIAogCQlpZiAobWF0Y2hlZCA9PSAwKSB7CiAJCQkvKiBEcml2ZXIgZG9lcyBub3QgZXhpc3QgeWV0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIk5vIG1hcGxlIGRyaXZlciBmb3VuZC5cbiIpOwotCQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX2R1bW15X2RyaXZlcjsKKwkJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJubyBkcml2ZXIgZm91bmRcbiIpOworCQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZTsKIAkJfQotCQlzcHJpbnRmKG1kZXYtPmRldi5idXNfaWQsICIlZDowJWQuJWxYIiwgbWRldi0+cG9ydCwKLQkJCW1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKKwkJZGV2X3NldF9uYW1lKCZtZGV2LT5kZXYsICIlZDowJWQuJWxYIiwgbWRldi0+cG9ydCwKKwkJCSAgICAgbWRldi0+dW5pdCwgZnVuY3Rpb24pOwogCX0KKwogCW1kZXYtPmZ1bmN0aW9uID0gZnVuY3Rpb247CiAJbWRldi0+ZGV2LnJlbGVhc2UgPSAmbWFwbGVfcmVsZWFzZV9kZXZpY2U7Ci0JcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZtZGV2LT5kZXYpOwotCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkiTWFwbGUgYnVzOiBBdHRlbXB0IHRvIHJlZ2lzdGVyIGRldmljZSIKLQkJIiAoJXgsICV4KSBmYWlsZWQuXG4iLAotCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKworCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCWVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZtZGV2LT5kZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIGRldmljZSBhdCIKKwkJCSIgKCVkLCAlZCksIHdpdGggZXJyb3IgMHglWFxuIiwgbWRldi0+dW5pdCwKKwkJCW1kZXYtPnBvcnQsIGVycm9yKTsKIAkJbWFwbGVfZnJlZV9kZXYobWRldik7CiAJCW1kZXYgPSBOVUxMOwogCQlyZXR1cm47CkBAIC00NjIsNyArNDAzLDcgQEAKICAqIHBvcnQgYW5kIHVuaXQgdGhlbiByZXR1cm4gMSAtIGFsbG93cyBpZGVudGlmaWNhdGlvbgogICogb2Ygd2hpY2ggZGV2aWNlcyBuZWVkIHRvIGJlIGF0dGFjaGVkIG9yIGRldGFjaGVkCiAgKi8KLXN0YXRpYyBpbnQgZGV0YWNoX21hcGxlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKnBvcnRwdHIpCitzdGF0aWMgaW50IGNoZWNrX21hcGxlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKnBvcnRwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RldmljZV9zcGVjaWZ5ICpkczsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OwpAQCAtNDc3LDIxICs0MTgsMjUgQEAKIHN0YXRpYyBpbnQgc2V0dXBfbWFwbGVfY29tbWFuZHMoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICppZ25vcmVkKQogewogCWludCBhZGQ7Ci0Jc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVfZGV2ID0gdG9fbWFwbGVfZGV2KGRldmljZSk7Ci0KLQlpZiAoKG1hcGxlX2Rldi0+aW50ZXJ2YWwgPiAwKQotCSAgICAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX2Rldi0+d2hlbikpIHsKLQkJLyogYm91bmNlIGlmIHdlIGNhbm5vdCBsb2NrICovCi0JCWFkZCA9IG1hcGxlX2FkZF9wYWNrZXQobWFwbGVfZGV2LAotCQkJYmUzMl90b19jcHUobWFwbGVfZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKSwKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2ID0gdG9fbWFwbGVfZGV2KGRldmljZSk7CisJaWYgKG1kZXYtPmludGVydmFsID4gMCAmJiBhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCAmJgorCQl0aW1lX2FmdGVyKGppZmZpZXMsIG1kZXYtPndoZW4pKSB7CisJCS8qIGJvdW5jZSBpZiB3ZSBjYW5ub3QgYWRkICovCisJCWFkZCA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwKKwkJCWJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pLAogCQkJTUFQTEVfQ09NTUFORF9HRVRDT05ELCAxLCBOVUxMKTsKIAkJaWYgKCFhZGQpCi0JCQltYXBsZV9kZXYtPndoZW4gPSBqaWZmaWVzICsgbWFwbGVfZGV2LT5pbnRlcnZhbDsKKwkJCW1kZXYtPndoZW4gPSBqaWZmaWVzICsgbWRldi0+aW50ZXJ2YWw7CiAJfSBlbHNlIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbWFwbGVfcG5wX3RpbWUpKQotCQkJLyogVGhpcyB3aWxsIGFsc28gYm91bmNlICovCi0JCQltYXBsZV9hZGRfcGFja2V0KG1hcGxlX2RldiwgMCwKLQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJLyogRW5zdXJlIHdlIGRvbid0IGhhdmUgYmxvY2sgcmVhZHMgYW5kIGRldmluZm8KKwkJCSogY2FsbHMgaW50ZXJmZXJpbmcgd2l0aCBvbmUgYW5vdGhlciAtIHNvIGZsYWcgdGhlCisJCQkqIGRldmljZSBhcyBidXN5ICovCisJCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDApIHsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKwkJCQltYXBsZV9hZGRfcGFja2V0KG1kZXYsIDAsCisJCQkJCU1BUExFX0NPTU1BTkRfREVWSU5GTywgMCwgTlVMTCk7CisJCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDk5LDI5ICs0NDQsNTAgQEAKIC8qIFZCTEFOSyBib3R0b20gaGFsZiAtIGltcGxlbWVudGVkIHZpYSB3b3JrcXVldWUgKi8KIHN0YXRpYyB2b2lkIG1hcGxlX3ZibGFua19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSB8fCAhbWFwbGVfZG1hX2RvbmUoKSkKKwlpbnQgeCwgbG9ja2luZzsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCisJaWYgKCFtYXBsZV9kbWFfZG9uZSgpKQogCQlyZXR1cm47CiAKIAljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKIAorCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKQorCQlnb3RvIGZpbmlzaDsKKworCS8qCisJKiBTZXQgdXAgZXNzZW50aWFsIGNvbW1hbmRzIC0gdG8gZmV0Y2ggZGF0YSBhbmQKKwkqIGNoZWNrIGRldmljZXMgYXJlIHN0aWxsIHByZXNlbnQKKwkqLwogCWJ1c19mb3JfZWFjaF9kZXYoJm1hcGxlX2J1c190eXBlLCBOVUxMLCBOVUxMLAotCQkJIHNldHVwX21hcGxlX2NvbW1hbmRzKTsKKwkJc2V0dXBfbWFwbGVfY29tbWFuZHMpOwogCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbWFwbGVfcG5wX3RpbWUpKQorCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkgeworCQkvKgorCQkqIFNjYW4gdGhlIGVtcHR5IHBvcnRzIC0gYnVzIGlzIGZsYWtleSBhbmQgbWF5IGhhdmUKKwkJKiBtaXMtcmVwb3J0ZWQgZW1wdHluZXNzCisJCSovCisJCWZvciAoeCA9IDA7IHggPCBNQVBMRV9QT1JUUzsgeCsrKSB7CisJCQlpZiAoY2hlY2tlZFt4XSAmJiBlbXB0eVt4XSkgeworCQkJCW1kZXYgPSBiYXNldW5pdHNbeF07CisJCQkJaWYgKCFtZGV2KQorCQkJCQlicmVhazsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKwkJCQlsb2NraW5nID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLAorCQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJCWlmICghbG9ja2luZykKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCiAJCW1hcGxlX3BucF90aW1lID0gamlmZmllcyArIE1BUExFX1BOUF9JTlRFUlZBTDsKLQotCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfd2FpdHEpICYmIGxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkgewotCQltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCQltYXBsZV9zZW5kKCk7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKIAl9CiAKLQltYXBsZWJ1c19kbWFfcmVzZXQoKTsKK2ZpbmlzaDoKKwltYXBsZV9zZW5kKCk7CiB9CiAKLS8qIGhhbmRsZSBkZXZpY2VzIGFkZGVkIHZpYSBob3RwbHVncyAtIHBsYWNpbmcgdGhlbSBvbiBxdWV1ZSBmb3IgREVWSU5GTyovCisvKiBoYW5kbGUgZGV2aWNlcyBhZGRlZCB2aWEgaG90cGx1Z3MgLSBwbGFjaW5nIHRoZW0gb24gcXVldWUgZm9yIERFVklORk8gKi8KIHN0YXRpYyB2b2lkIG1hcGxlX21hcF9zdWJ1bml0cyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCBpbnQgc3VibWFzaykKIHsKIAlpbnQgcmV0dmFsLCBrLCBkZXZjaGVjazsKQEAgLTUzMyw3ICs0OTksNyBAQAogCQlkcy51bml0ID0gayArIDE7CiAJCXJldHZhbCA9CiAJCSAgICBidXNfZm9yX2VhY2hfZGV2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgJmRzLAotCQkJCSAgICAgZGV0YWNoX21hcGxlX2RldmljZSk7CisJCQkJICAgICBjaGVja19tYXBsZV9kZXZpY2UpOwogCQlpZiAocmV0dmFsKSB7CiAJCQlzdWJtYXNrID0gc3VibWFzayA+PiAxOwogCQkJY29udGludWU7CkBAIC01NDMsNiArNTA5LDcgQEAKIAkJCW1kZXZfYWRkID0gbWFwbGVfYWxsb2NfZGV2KG1kZXYtPnBvcnQsIGsgKyAxKTsKIAkJCWlmICghbWRldl9hZGQpCiAJCQkJcmV0dXJuOworCQkJYXRvbWljX3NldCgmbWRldl9hZGQtPmJ1c3ksIDEpOwogCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2X2FkZCwgMCwgTUFQTEVfQ09NTUFORF9ERVZJTkZPLAogCQkJCTAsIE5VTEwpOwogCQkJLyogbWFyayB0aGF0IHdlIGFyZSBjaGVja2luZyBzdWIgZGV2aWNlcyAqLwpAQCAtNTY0LDI3ICs1MzEsNDUgQEAKIH0KIAogLyogaGFuZGxlIGVtcHR5IHBvcnQgb3IgaG90cGx1ZyByZW1vdmFsICovCi1zdGF0aWMgdm9pZCBtYXBsZV9yZXNwb25zZV9ub25lKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsCi0JCQkJc3RydWN0IG1hcGxlcSAqbXEpCitzdGF0aWMgdm9pZCBtYXBsZV9yZXNwb25zZV9ub25lKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCiB7Ci0JaWYgKG1kZXYtPnVuaXQgIT0gMCkgewotCQlsaXN0X2RlbCgmbXEtPmxpc3QpOwotCQltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJNYXBsZSBidXMgZGV2aWNlIGRldGFjaGluZyBhdCAoJWQsICVkKVxuIiwKLQkJICAgICAgIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCW1hcGxlX2NsZWFuX3N1Ym1hcChtZGV2KTsKKworCWlmIChsaWtlbHkobWRldi0+dW5pdCAhPSAwKSkgeworCQkvKgorCQkqIEJsb2NrIGRldmljZXMgcGxheSB1cAorCQkqIGFuZCBnaXZlIHRoZSBpbXByZXNzaW9uIHRoZXkgaGF2ZQorCQkqIGJlZW4gcmVtb3ZlZCBldmVuIHdoZW4gc3RpbGwgaW4gcGxhY2Ugb3IKKwkJKiB0cmlwIHRoZSBtdGQgbGF5ZXIgd2hlbiB0aGV5IGhhdmUKKwkJKiByZWFsbHkgZ29uZSAtIHRoaXMgY29kZSB0cmFwcyB0aGF0IGV2ZW50dWFsaXR5CisJCSogYW5kIGVuc3VyZXMgd2UgYXJlbid0IG92ZXJsb2FkZWQgd2l0aCB1c2VsZXNzCisJCSogZXJyb3IgbWVzc2FnZXMKKwkJKi8KKwkJaWYgKG1kZXYtPmNhbl91bmxvYWQpIHsKKwkJCWlmICghbWRldi0+Y2FuX3VubG9hZChtZGV2KSkgeworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDIpOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJkZXRhY2hpbmcgZGV2aWNlIGF0ICglZCwgJWQpXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CiAJCW1hcGxlX2RldGFjaF9kcml2ZXIobWRldik7CiAJCXJldHVybjsKLQl9Ci0JaWYgKCFzdGFydGVkIHx8ICFmdWxsc2NhbikgewotCQlpZiAoY2hlY2tlZFttZGV2LT5wb3J0XSA9PSBmYWxzZSkgewotCQkJY2hlY2tlZFttZGV2LT5wb3J0XSA9IHRydWU7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJObyBtYXBsZSBkZXZpY2VzIGF0dGFjaGVkIgotCQkJCSIgdG8gcG9ydCAlZFxuIiwgbWRldi0+cG9ydCk7CisJfSBlbHNlIHsKKwkJaWYgKCFzdGFydGVkIHx8ICFmdWxsc2NhbikgeworCQkJaWYgKGNoZWNrZWRbbWRldi0+cG9ydF0gPT0gZmFsc2UpIHsKKwkJCQljaGVja2VkW21kZXYtPnBvcnRdID0gdHJ1ZTsKKwkJCQllbXB0eVttZGV2LT5wb3J0XSA9IHRydWU7CisJCQkJZGV2X2luZm8oJm1kZXYtPmRldiwgIm5vIGRldmljZXMiCisJCQkJCSIgdG8gcG9ydCAlZFxuIiwgbWRldi0+cG9ydCk7CisJCQl9CisJCQlyZXR1cm47CiAJCX0KLQkJcmV0dXJuOwogCX0KLQltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7CisJLyogU29tZSBoYXJkd2FyZSBkZXZpY2VzIGdlbmVyYXRlIGZhbHNlIGRldGFjaCBtZXNzYWdlcyBvbiB1bml0IDAgKi8KKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIH0KIAogLyogcHJlcHJvY2VzcyBob3RwbHVncyBvciBzY2FucyAqLwpAQCAtNTk5LDggKzU4NCwxMSBAQAogCQl9IGVsc2UgewogCQkJaWYgKG1kZXYtPnVuaXQgIT0gMCkKIAkJCQltYXBsZV9hdHRhY2hfZHJpdmVyKG1kZXYpOworCQkJaWYgKG1kZXYtPnVuaXQgPT0gMCkgeworCQkJCWVtcHR5W21kZXYtPnBvcnRdID0gZmFsc2U7CisJCQkJbWFwbGVfYXR0YWNoX2RyaXZlcihtZGV2KTsKKwkJCX0KIAkJfQotCQlyZXR1cm47CiAJfQogCWlmIChtZGV2LT51bml0ID09IDApIHsKIAkJc3VibWFzayA9IHJlY3ZidWZbMl0gJiAweDFGOwpAQCAtNjExLDYgKzU5OSwxNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2VfZmlsZWVycihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB2b2lkICpyZWN2YnVmKQoreworCWlmIChtZGV2LT5maWxlZXJyX2hhbmRsZXIpIHsKKwkJbWRldi0+ZmlsZWVycl9oYW5kbGVyKG1kZXYsIHJlY3ZidWYpOworCQlyZXR1cm47CisJfSBlbHNlCisJCWRldl93YXJuKCZtZGV2LT5kZXYsICJkZXZpY2UgYXQgKCVkLCAlZCkgcmVwb3J0cyIKKwkJCSJmaWxlIGVycm9yIDB4JVhcbiIsIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsCisJCQkoKGludCAqKXJlY3ZidWYpWzFdKTsKK30KKwogc3RhdGljIHZvaWQgbWFwbGVfcG9ydF9yZXNjYW4odm9pZCkKIHsKIAlpbnQgaTsKQEAgLTYyMSwxMiArNjIwLDYgQEAKIAkJaWYgKGNoZWNrZWRbaV0gPT0gZmFsc2UpIHsKIAkJCWZ1bGxzY2FuID0gMDsKIAkJCW1kZXYgPSBiYXNldW5pdHNbaV07Ci0JCQkvKgotCQkJICogIHRlc3QgbG9jayBpbiBjYXNlIHNjYW4gaGFzIGZhaWxlZAotCQkJICogIGJ1dCBkZXZpY2UgaXMgc3RpbGwgbG9ja2VkCi0JCQkgKi8KLQkJCWlmIChtdXRleF9pc19sb2NrZWQoJm1kZXYtPm1xLT5tdXRleCkpCi0JCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwogCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLCBNQVBMRV9DT01NQU5EX0RFVklORk8sCiAJCQkJMCwgTlVMTCk7CiAJCX0KQEAgLTYzNyw3ICs2MzAsNyBAQAogc3RhdGljIHZvaWQgbWFwbGVfZG1hX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBtYXBsZXEgKm1xLCAqbm1xOwotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OwogCWNoYXIgKnJlY3ZidWY7CiAJZW51bSBtYXBsZV9jb2RlIGNvZGU7CiAKQEAgLTY0Niw0MyArNjM5LDU2IEBACiAJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAJaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1xLCBubXEsICZtYXBsZV9zZW50cSwgbGlzdCkgewotCQkJcmVjdmJ1ZiA9IG1xLT5yZWN2YnVmOworCQkJbWRldiA9IG1xLT5kZXY7CisJCQlyZWN2YnVmID0gbXEtPnJlY3ZidWYtPmJ1ZjsKKwkJCWRtYV9jYWNoZV9zeW5jKCZtZGV2LT5kZXYsIHJlY3ZidWYsIDB4NDAwLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CiAJCQljb2RlID0gcmVjdmJ1ZlswXTsKLQkJCWRldiA9IG1xLT5kZXY7CiAJCQlrZnJlZShtcS0+c2VuZGJ1Zik7Ci0JCQltdXRleF91bmxvY2soJm1xLT5tdXRleCk7CiAJCQlsaXN0X2RlbF9pbml0KCZtcS0+bGlzdCk7Ci0KIAkJCXN3aXRjaCAoY29kZSkgewogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9OT05FOgotCQkJCW1hcGxlX3Jlc3BvbnNlX25vbmUoZGV2LCBtcSk7CisJCQkJbWFwbGVfcmVzcG9uc2Vfbm9uZShtZGV2KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9ERVZJTkZPOgotCQkJCW1hcGxlX3Jlc3BvbnNlX2RldmluZm8oZGV2LCByZWN2YnVmKTsKKwkJCQltYXBsZV9yZXNwb25zZV9kZXZpbmZvKG1kZXYsIHJlY3ZidWYpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0RBVEFUUkY6Ci0JCQkJaWYgKGRldi0+Y2FsbGJhY2spCi0JCQkJCWRldi0+Y2FsbGJhY2sobXEpOworCQkJCWlmIChtZGV2LT5jYWxsYmFjaykKKwkJCQkJbWRldi0+Y2FsbGJhY2sobXEpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0ZJTEVFUlI6CisJCQkJbWFwbGVfcmVzcG9uc2VfZmlsZWVycihtZGV2LCByZWN2YnVmKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9BR0FJTjoKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQkFEQ01EOgogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9CQURGVU5DOgotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJICAgICAgICJNYXBsZSBub24tZmF0YWwgZXJyb3IgMHglWFxuIiwKLQkJCQkgICAgICAgY29kZSk7CisJCQkJZGV2X3dhcm4oJm1kZXYtPmRldiwgIm5vbi1mYXRhbCBlcnJvciIKKwkJCQkJIiAweCVYIGF0ICglZCwgJWQpXG4iLCBjb2RlLAorCQkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9BTExJTkZPOgotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJICAgICAgICJNYXBsZSAtIGV4dGVuZGVkIGRldmljZSBpbmZvcm1hdGlvbiIKLQkJCQkJIiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJleHRlbmRlZCIKKwkJCQkiIGRldmljZSBpbmZvcm1hdGlvbiByZXF1ZXN0IGZvciAoJWQsICVkKSIKKwkJCQkiIGJ1dCBjYWxsIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIG1kZXYtPnBvcnQsCisJCQkJbWRldi0+dW5pdCk7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfT0s6CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CkBAIC02OTksMjAgKzcwNSwxOSBAQAogCQlpZiAoIWZ1bGxzY2FuKQogCQkJbWFwbGVfcG9ydF9yZXNjYW4oKTsKIAkJLyogbWFyayB0aGF0IHdlIGhhdmUgYmVlbiB0aHJvdWdoIHRoZSBmaXJzdCBzY2FuICovCi0JCWlmIChzdGFydGVkID09IDApCi0JCQlzdGFydGVkID0gMTsKKwkJc3RhcnRlZCA9IDE7CiAJfQotCW1hcGxlYnVzX2RtYV9yZXNldCgpOworCW1hcGxlX3NlbmQoKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IG1hcGxlYnVzX2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IG1hcGxlX2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCS8qIExvYWQgZXZlcnl0aGluZyBpbnRvIHRoZSBib3R0b20gaGFsZiAqLwogCXNjaGVkdWxlX3dvcmsoJm1hcGxlX2RtYV9wcm9jZXNzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZWJ1c192YmxhbmtfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZV92YmxhbmtfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzY2hlZHVsZV93b3JrKCZtYXBsZV92YmxhbmtfcHJvY2Vzcyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNzIwLDE0ICs3MjUsMTQgQEAKIAogc3RhdGljIGludCBtYXBsZV9zZXRfZG1hX2ludGVycnVwdF9oYW5kbGVyKHZvaWQpCiB7Ci0JcmV0dXJuIHJlcXVlc3RfaXJxKEhXX0VWRU5UX01BUExFX0RNQSwgbWFwbGVidXNfZG1hX2ludGVycnVwdCwKLQkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgRE1BIiwgJm1hcGxlX2R1bW15X2RyaXZlcik7CisJcmV0dXJuIHJlcXVlc3RfaXJxKEhXX0VWRU5UX01BUExFX0RNQSwgbWFwbGVfZG1hX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgRE1BIiwgJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFwbGVfc2V0X3ZibGFua19pbnRlcnJ1cHRfaGFuZGxlcih2b2lkKQogewotCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9WU1lOQywgbWFwbGVidXNfdmJsYW5rX2ludGVycnVwdCwKLQkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgVkJMQU5LIiwgJm1hcGxlX2R1bW15X2RyaXZlcik7CisJcmV0dXJuIHJlcXVlc3RfaXJxKEhXX0VWRU5UX1ZTWU5DLCBtYXBsZV92YmxhbmtfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCwgIm1hcGxlIGJ1cyBWQkxBTksiLCAmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlKTsKIH0KIAogc3RhdGljIGludCBtYXBsZV9nZXRfZG1hX2J1ZmZlcih2b2lkKQpAQCAtNzQwLDcgKzc0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWF0Y2hfbWFwbGVfYnVzX2RyaXZlcihzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCitzdGF0aWMgaW50IG1hcGxlX21hdGNoX2J1c19kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2cHRyLAogCQkJCSAgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydnB0cikKIHsKIAlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptYXBsZV9kcnYgPSB0b19tYXBsZV9kcml2ZXIoZHJ2cHRyKTsKQEAgLTc2NSwyMiArNzcwLDI0IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX2R1bW15X2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIG1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSA9IHsKIAkuZHJ2ID0gewotCQkubmFtZSA9ICJtYXBsZV9kdW1teV9kcml2ZXIiLAorCQkubmFtZSA9ICJtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UiLAogCQkuYnVzID0gJm1hcGxlX2J1c190eXBlLAogCX0sCiB9OwotCisvKioKKyAqIG1hcGxlX2J1c190eXBlIC0gY29yZSBtYXBsZSBidXMgc3RydWN0dXJlCisgKi8KIHN0cnVjdCBidXNfdHlwZSBtYXBsZV9idXNfdHlwZSA9IHsKIAkubmFtZSA9ICJtYXBsZSIsCi0JLm1hdGNoID0gbWF0Y2hfbWFwbGVfYnVzX2RyaXZlciwKKwkubWF0Y2ggPSBtYXBsZV9tYXRjaF9idXNfZHJpdmVyLAogCS51ZXZlbnQgPSBtYXBsZV9idXNfdWV2ZW50LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2J1c190eXBlKTsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2UgbWFwbGVfYnVzID0gewotCS5idXNfaWQgPSAibWFwbGUiLAorCS5pbml0X25hbWUgPSAibWFwbGUiLAogCS5yZWxlYXNlID0gbWFwbGVfYnVzX3JlbGVhc2UsCiB9OwogCkBAIC03ODgsNyArNzk1LDggQEAKIHsKIAlpbnQgcmV0dmFsLCBpOwogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXZbTUFQTEVfUE9SVFNdOwotCWN0cmxfb3V0bCgwLCBNQVBMRV9TVEFURSk7CisKKwljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmbWFwbGVfYnVzKTsKIAlpZiAocmV0dmFsKQpAQCAtNzk4LDM2ICs4MDYsMzMgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfZGV2aWNlOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZtYXBsZV9kdW1teV9kcml2ZXIuZHJ2KTsKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZS5kcnYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gY2xlYW51cF9idXM7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1hcGxlIGJ1cyBkbWEgKi8KIAlyZXR2YWwgPSBtYXBsZV9nZXRfZG1hX2J1ZmZlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIk1hcGxlIGJ1czogRmFpbGVkIHRvIGFsbG9jYXRlIE1hcGxlIERNQSBidWZmZXJzXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiZmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXJzXG4iKTsKIAkJZ290byBjbGVhbnVwX2Jhc2ljOwogCX0KIAogCS8qIHNldCB1cCBETUEgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlyZXR2YWwgPSBtYXBsZV9zZXRfZG1hX2ludGVycnVwdF9oYW5kbGVyKCk7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzOiBGYWlsZWQgdG8gZ3JhYiBtYXBsZSBETUEgSVJRXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiYnVzIGZhaWxlZCB0byBncmFiIG1hcGxlICIKKwkJCSJETUEgSVJRXG4iKTsKIAkJZ290byBjbGVhbnVwX2RtYTsKIAl9CiAKIAkvKiBzZXQgdXAgVkJMQU5LIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0dmFsID0gbWFwbGVfc2V0X3ZibGFua19pbnRlcnJ1cHRfaGFuZGxlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgYnVzOiBGYWlsZWQgdG8gZ3JhYiBWQkxBTksgSVJRXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiYnVzIGZhaWxlZCB0byBncmFiIFZCTEFOSyBJUlFcbiIpOwogCQlnb3RvIGNsZWFudXBfaXJxOwogCX0KIAotCW1hcGxlX3F1ZXVlX2NhY2hlID0KLQkgICAga21lbV9jYWNoZV9jcmVhdGUoIm1hcGxlX3F1ZXVlX2NhY2hlIiwgMHg0MDAsIDAsCi0JCQkgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCW1hcGxlX3F1ZXVlX2NhY2hlID0gS01FTV9DQUNIRShtYXBsZV9idWZmZXIsIFNMQUJfSFdDQUNIRV9BTElHTik7CiAKIAlpZiAoIW1hcGxlX3F1ZXVlX2NhY2hlKQogCQlnb3RvIGNsZWFudXBfYm90aGlycXM7CkBAIC04MzgsMjMgKzg0MywyMyBAQAogCS8qIHNldHVwIG1hcGxlIHBvcnRzICovCiAJZm9yIChpID0gMDsgaSA8IE1BUExFX1BPUlRTOyBpKyspIHsKIAkJY2hlY2tlZFtpXSA9IGZhbHNlOworCQllbXB0eVtpXSA9IGZhbHNlOwogCQltZGV2W2ldID0gbWFwbGVfYWxsb2NfZGV2KGksIDApOwotCQliYXNldW5pdHNbaV0gPSBtZGV2W2ldOwogCQlpZiAoIW1kZXZbaV0pIHsKIAkJCXdoaWxlIChpLS0gPiAwKQogCQkJCW1hcGxlX2ZyZWVfZGV2KG1kZXZbaV0pOwogCQkJZ290byBjbGVhbnVwX2NhY2hlOwogCQl9CisJCWJhc2V1bml0c1tpXSA9IG1kZXZbaV07CisJCWF0b21pY19zZXQoJm1kZXZbaV0tPmJ1c3ksIDEpOwogCQltYXBsZV9hZGRfcGFja2V0KG1kZXZbaV0sIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywgMCwgTlVMTCk7CiAJCXN1YmRldmljZV9tYXBbaV0gPSAwOwogCX0KIAotCS8qIHNldHVwIG1hcGxlYnVzIGhhcmR3YXJlICovCi0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7Ci0JLyogaW5pdGlhbCBkZXRlY3Rpb24gKi8KKwltYXBsZV9wbnBfdGltZSA9IGppZmZpZXMgKyBIWjsKKwkvKiBwcmVwYXJlIGluaXRpYWwgcXVldWUgKi8KIAltYXBsZV9zZW5kKCk7Ci0JbWFwbGVfcG5wX3RpbWUgPSBqaWZmaWVzOwotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGJ1cyBjb3JlIG5vdyByZWdpc3RlcmVkLlxuIik7CisJZGV2X2luZm8oJm1hcGxlX2J1cywgImJ1cyBjb3JlIG5vdyByZWdpc3RlcmVkXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC04NzEsNyArODc2LDcgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBtYXBsZV9zZW5kYnVmLCBNQVBMRV9ETUFfUEFHRVMpOwogCiBjbGVhbnVwX2Jhc2ljOgotCWRyaXZlcl91bnJlZ2lzdGVyKCZtYXBsZV9kdW1teV9kcml2ZXIuZHJ2KTsKKwlkcml2ZXJfdW5yZWdpc3RlcigmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlLmRydik7CiAKIGNsZWFudXBfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZtYXBsZV9idXNfdHlwZSk7CkBAIC04ODAsNyArODg1LDcgQEAKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWFwbGVfYnVzKTsKIAogY2xlYW51cDoKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJNYXBsZSBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIC8qIFB1c2ggaW5pdCB0byBsYXRlciB0byBlbnN1cmUgaGFyZHdhcmUgZ2V0cyBkZXRlY3RlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYyBiL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMKaW5kZXggNGQwMjgyYi4uMmQ5ZTdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYworKysgYi9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jCkBAIC0yMiw3ICsyMiw3IEBACiBzdGF0aWMgaW50IHN1cGVyaHl3YXlfZGV2aWNlczsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2Ugc3VwZXJoeXdheV9idXNfZGV2aWNlID0gewotCS5idXNfaWQgPSAic3VwZXJoeXdheSIsCisJLmluaXRfbmFtZSA9ICJzdXBlcmh5d2F5IiwKIH07CiAKIHN0YXRpYyB2b2lkIHN1cGVyaHl3YXlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtODMsNyArODMsNyBAQAogCWRldi0+aWQuaWQJCT0gZGV2LT52Y3IubW9kX2lkOwogCiAJc3ByaW50ZihkZXYtPm5hbWUsICJTdXBlckh5d2F5IGRldmljZSAlMDR4IiwgZGV2LT5pZC5pZCk7Ci0Jc3ByaW50ZihkZXYtPmRldi5idXNfaWQsICIlMDJ4Iiwgc3VwZXJoeXdheV9kZXZpY2VzKTsKKwlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTAyeCIsIHN1cGVyaHl3YXlfZGV2aWNlcyk7CiAKIAlzdXBlcmh5d2F5X2RldmljZXMrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwppbmRleCA1NmZmM2U2Li4xMmU0NDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJc3BpID0gbXNnLT5zcGk7CiAKIAlkZXZfZGJnKG1hc3Rlci0+ZGV2LnBhcmVudCwgInN0YXJ0IG1lc3NhZ2UgJXAgZm9yICVzXG4iLAotCQkJbXNnLCBzcGktPmRldi5idXNfaWQpOworCQkJbXNnLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAogCS8qIHNlbGVjdCBjaGlwIGlmIGl0J3Mgbm90IHN0aWxsIGFjdGl2ZSAqLwogCWlmIChhcy0+c3RheSkgewpAQCAtNjI3LDcgKzYyNyw3IEBACiAJCWlmICghYXNkKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG5wY3NfcGluLCBzcGktPmRldi5idXNfaWQpOworCQlyZXQgPSBncGlvX3JlcXVlc3QobnBjc19waW4sIGRldl9uYW1lKCZzcGktPmRldikpOwogCQlpZiAocmV0KSB7CiAJCQlrZnJlZShhc2QpOwogCQkJcmV0dXJuIHJldDsKQEAgLTY2OCw3ICs2NjgsNyBAQAogCWFzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAKIAlkZXZfZGJnKGNvbnRyb2xsZXIsICJuZXcgbWVzc2FnZSAlcCBzdWJtaXR0ZWQgZm9yICVzXG4iLAotCQkJbXNnLCBzcGktPmRldi5idXNfaWQpOworCQkJbXNnLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAogCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZtc2ctPnRyYW5zZmVycykpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwMyw3ICs4MDMsNyBAQAogCWFzLT5jbGsgPSBjbGs7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWVsX3NwaV9pbnRlcnJ1cHQsIDAsCi0JCQlwZGV2LT5kZXYuYnVzX2lkLCBtYXN0ZXIpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIG1hc3Rlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5tYXBfcmVnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwppbmRleCAzYjk3ODAzLi42OGM3N2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm1wcy0+cXVldWUpOwogCiAJbXBzLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJbWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAobXBzLT53b3JrcXVldWUgPT0gTlVMTCkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZnJlZV9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwppbmRleCA0NTRhMjcxLi4xYzY1ZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKQEAgLTEwMDMsNyArMTAwMyw3IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIChyLT5lbmQgLSByLT5zdGFydCkgKyAxLAotCQkJcGRldi0+ZGV2LmJ1c19pZCkpIHsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKSkgewogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gZXJyMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggYmFiNmZmMC4uNjBiNTM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKICNpZmRlZglWRVJCT1NFCiAJCQlwcl9kZWJ1ZygiJXM6IHdyaXRlLSVkID0lMDR4XG4iLAotCQkJCQlzcGktPmRldi5idXNfaWQsIGJpdHMsIHZhbCk7CisJCQkJCWRldl9uYW1lKCZzcGktPmRldiksIGJpdHMsIHZhbCk7CiAjZW5kaWYKIAkJCWlmICh3YWl0X3V3aXJlX2Nzcl9mbGFnKENTUkIsIDAsIDApKQogCQkJCWdvdG8gZWlvOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQlzdGF0dXMgKz0gYnl0ZXM7CiAjaWZkZWYJVkVSQk9TRQogCQkJcHJfZGVidWcoIiVzOiByZWFkLSVkID0lMDR4XG4iLAotCQkJCQlzcGktPmRldi5idXNfaWQsIGJpdHMsIHZhbCk7CisJCQkJCWRldl9uYW1lKCZzcGktPmRldiksIGJpdHMsIHZhbCk7CiAjZW5kaWYKIAogCQl9CkBAIC0zMzEsNyArMzMxLDcgQEAKIAl1d2lyZSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCiAJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgPiAzKSB7Ci0JCXByX2RlYnVnKCIlczogY3MlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCwgc3BpLT5jaGlwX3NlbGVjdCk7CisJCXByX2RlYnVnKCIlczogY3MlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldiksIHNwaS0+Y2hpcF9zZWxlY3QpOwogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCWJpdHMgPSA4OwogCiAJaWYgKGJpdHMgPiAxNikgewotCQlwcl9kZWJ1ZygiJXM6IHdvcmRzaXplICVkP1xuIiwgc3BpLT5kZXYuYnVzX2lkLCBiaXRzKTsKKwkJcHJfZGVidWcoIiVzOiB3b3Jkc2l6ZSAlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldiksIGJpdHMpOwogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMzc4LDcgKzM3OCw3IEBACiAJCWh6ID0gdC0+c3BlZWRfaHo7CiAKIAlpZiAoIWh6KSB7Ci0JCXByX2RlYnVnKCIlczogemVybyBzcGVlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCk7CisJCXByX2RlYnVnKCIlczogemVybyBzcGVlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldikpOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNDA2LDcgKzQwNiw3IEBACiAJfQogCWlmIChkaXYxX2lkeCA9PSA0KSB7CiAJCXByX2RlYnVnKCIlczogbG93ZXN0IGNsb2NrICVsZCwgbmVlZCAlZFxuIiwKLQkJCXNwaS0+ZGV2LmJ1c19pZCwgcmF0ZSAvIDEwIC8gOCwgaHopOworCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgcmF0ZSAvIDEwIC8gOCwgaHopOwogCQlzdGF0dXMgPSAtRURPTTsKIAkJZ290byBkb25lOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jIGIvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKaW5kZXggMDE0YmVjYi4uYzhiMGJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSwKLQkJCQlwZGV2LT5kZXYuYnVzX2lkKSkgeworCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKSkgewogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBkMGZjNGNhLi5lYzI0ZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC0xMzMzLDcgKzEzMzMsNyBAQAogCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcyk7CiAJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQlkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNDYyLDcgKzE0NjIsNyBAQAogCQlkcnZfZGF0YS0+bWFza19zciA9IFNTU1JfVElOVCB8IFNTU1JfUkZTIHwgU1NTUl9URlMgfCBTU1NSX1JPUjsKIAl9CiAKLQlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2X25hbWUoZGV2KSwgZHJ2X2RhdGEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgSVJRICVkXG4iLCBzc3AtPmlycSk7CiAJCWdvdG8gb3V0X2Vycm9yX21hc3Rlcl9hbGxvYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCmluZGV4IDdmZWEzY2YuLjM0MTBiMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwpAQCAtMTE2MCw4ICsxMTYwLDggQEAKIAogCS8qIGluaXQgbWVzc2FnZXMgd29ya3F1ZXVlICovCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcyk7Ci0JZHJ2X2RhdGEtPndvcmtxdWV1ZSA9Ci0JICAgIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX2dwaW8uYwppbmRleCA0OTY5OGNhLi5kMjg2NmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBnZXRtaXNvKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFNQSV9NSVNPX0dQSU8pOworCXJldHVybiAhIWdwaW9fZ2V0X3ZhbHVlKFNQSV9NSVNPX0dQSU8pOwogfQogCiAjdW5kZWYgcGRhdGEKQEAgLTE5MSw3ICsxOTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc3BpLT5jb250cm9sbGVyX3N0YXRlKSB7Ci0JCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChjcywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJaWYgKHN0YXR1cykKIAkJCXJldHVybiBzdGF0dXM7CiAJCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmluZGV4IDI2OWE1NWUuLjA0ODBkOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+d29yaywgcHVtcF9tZXNzYWdlcyk7CiAJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQlkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNTI1LDcgKzE1MjUsOCBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9ub19pcnFyZXM7CiAJfQotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgc3BpX2ludCwgSVJRRl9ESVNBQkxFRCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnEsIHNwaV9pbnQsIElSUUZfRElTQUJMRUQsCisJCQkgICAgIGRldl9uYW1lKGRldiksIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIGNhbm5vdCBnZXQgSVJRICglZClcbiIsIHN0YXR1cyk7CiAJCWdvdG8gZXJyX25vX2lycXJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCmluZGV4IGFjMGUzZTQuLjQ0YTJiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwpAQCAtNjM3LDcgKzYzNyw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm1wYzgzeHhfc3BpLT5xdWV1ZSk7CiAKIAltcGM4M3h4X3NwaS0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCW1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKG1wYzgzeHhfc3BpLT53b3JrcXVldWUgPT0gTlVMTCkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZnJlZV9pcnE7CkBAIC02NDksNyArNjQ5LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgIiVzOiBNUEM4M3h4IFNQSSBDb250cm9sbGVyIGRyaXZlciBhdCAweCVwIChpcnEgPSAlZClcbiIsCi0JICAgICAgIGRldi0+ZGV2LmJ1c19pZCwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOworCSAgICAgICBkZXZfbmFtZSgmZGV2LT5kZXYpLCBtcGM4M3h4X3NwaS0+YmFzZSwgbXBjODN4eF9zcGktPmlycSk7CiAKIAlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jIGIvZHJpdmVycy9zcGkvc3BpX3R4eDkuYwppbmRleCAyMjk2ZjM3Li4yOWNiYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKQEAgLTQwNCw3ICs0MDQsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXhpdDsKIAotCWMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwljLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoIWMtPndvcmtxdWV1ZSkKIAkJZ290byBleGl0X2J1c3k7CiAJYy0+bGFzdF9jaGlwc2VsZWN0ID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2kuYyBiL2RyaXZlcnMvc3NiL3BjaS5jCmluZGV4IGM5NThhYzEuLjQwZWE0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjaS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjaS5jCkBAIC01NjQsNiArNTY0LDcgQEAKIHN0YXRpYyBpbnQgc3NiX3BjaV9zcHJvbV9nZXQoc3RydWN0IHNzYl9idXMgKmJ1cywKIAkJCSAgICAgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pCiB7CisJY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqZmFsbGJhY2s7CiAJaW50IGVyciA9IC1FTk9NRU07CiAJdTE2ICpidWY7CiAKQEAgLTU4MywxMiArNTg0LDIzIEBACiAJCWJ1cy0+c3Byb21fc2l6ZSA9IFNTQl9TUFJPTVNJWkVfV09SRFNfUjQ7CiAJCXNwcm9tX2RvX3JlYWQoYnVzLCBidWYpOwogCQllcnIgPSBzcHJvbV9jaGVja19jcmMoYnVmLCBidXMtPnNwcm9tX3NpemUpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyKSB7CisJCQkvKiBBbGwgQ1JDIGF0dGVtcHRzIGZhaWxlZC4KKwkJCSAqIE1heWJlIHRoZXJlIGlzIG5vIFNQUk9NIG9uIHRoZSBkZXZpY2U/CisJCQkgKiBJZiB3ZSBoYXZlIGEgZmFsbGJhY2ssIHVzZSB0aGF0LiAqLworCQkJZmFsbGJhY2sgPSBzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKCk7CisJCQlpZiAoZmFsbGJhY2spIHsKKwkJCQltZW1jcHkoc3Byb20sIGZhbGxiYWNrLCBzaXplb2YoKnNwcm9tKSk7CisJCQkJZXJyID0gMDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQogCQkJc3NiX3ByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXQVJOSU5HOiBJbnZhbGlkIgogCQkJCSAgICIgU1BST00gQ1JDIChjb3JydXB0IFNQUk9NKVxuIik7CisJCX0KIAl9CiAJZXJyID0gc3Byb21fZXh0cmFjdChidXMsIHNwcm9tLCBidWYsIGJ1cy0+c3Byb21fc2l6ZSk7CiAKK291dF9mcmVlOgogCWtmcmVlKGJ1Zik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3Nwcm9tLmMgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCmluZGV4IDM2NjhlZGIuLjg5NDMwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3Nwcm9tLmMKKysrIGIvZHJpdmVycy9zc2Ivc3Byb20uYwpAQCAtMTQsNiArMTQsOSBAQAogI2luY2x1ZGUgInNzYl9wcml2YXRlLmgiCiAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKmZhbGxiYWNrX3Nwcm9tOworCisKIHN0YXRpYyBpbnQgc3Byb20yaGV4KGNvbnN0IHUxNiAqc3Byb20sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAJCSAgICAgc2l6ZV90IHNwcm9tX3NpemVfd29yZHMpCiB7CkBAIC0xMzEsMyArMTM0LDM2IEBACiAJCXJldHVybiByZXM7CiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQorCisvKioKKyAqIHNzYl9hcmNoX3NldF9mYWxsYmFja19zcHJvbSAtIFNldCBhIGZhbGxiYWNrIFNQUk9NIGZvciB1c2UgaWYgbm8gU1BST00gaXMgZm91bmQuCisgKgorICogQHNwcm9tOiBUaGUgU1BST00gZGF0YSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXIuCisgKgorICogV2l0aCB0aGlzIGZ1bmN0aW9uIHRoZSBhcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb24gbWF5IHJlZ2lzdGVyIGEgZmFsbGJhY2sKKyAqIFNQUk9NIGRhdGEgc3RydWN0dXJlLiBUaGUgZmFsbGJhY2sgaXMgb25seSB1c2VkIGZvciBQQ0kgYmFzZWQgU1NCIGRldmljZXMsCisgKiB3aGVyZSBubyB2YWxpZCBTUFJPTSBjYW4gYmUgZm91bmQgaW4gdGhlIHNoYWRvdyByZWdpc3RlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHdlaXJkIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGEgaGFsZi1hc3NlZCBTU0IgZGV2aWNlCisgKiBoYXJkd2lyZWQgdG8gdGhlaXIgUENJIGJ1cy4KKyAqCisgKiBOb3RlIHRoYXQgaXQgZG9lcyBvbmx5IHdvcmsgd2l0aCBQQ0kgYXR0YWNoZWQgU1NCIGRldmljZXMuIFBDTUNJQSBkZXZpY2VzIGN1cnJlbnRseQorICogZG9uJ3QgdXNlIHRoaXMgZmFsbGJhY2suCisgKiBBcmNoaXRlY3R1cmVzIG11c3QgcHJvdmlkZSB0aGUgU1BST00gZm9yIG5hdGl2ZSBTU0IgZGV2aWNlcyBhbnl3YXksCisgKiBzbyB0aGUgZmFsbGJhY2sgYWxzbyBpc24ndCB1c2VkIGZvciBuYXRpdmUgZGV2aWNlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYXJjaGl0ZWN0dXJlIGNvZGUsIG9ubHkuIFNvIGl0IGlzIG5vdCBleHBvcnRlZC4KKyAqLworaW50IHNzYl9hcmNoX3NldF9mYWxsYmFja19zcHJvbShjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzcHJvbSkKK3sKKwlpZiAoZmFsbGJhY2tfc3Byb20pCisJCXJldHVybiAtRUVYSVNUOworCWZhbGxiYWNrX3Nwcm9tID0gc3Byb207CisKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3NiX2dldF9mYWxsYmFja19zcHJvbSh2b2lkKQoreworCXJldHVybiBmYWxsYmFja19zcHJvbTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmggYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCmluZGV4IGViYzMyZDguLjU3ZmE0ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJICAgICBpbnQgKCpzcHJvbV9jaGVja19jcmMpKGNvbnN0IHUxNiAqc3Byb20sIHNpemVfdCBzaXplKSwKIAkJCSAgICAgaW50ICgqc3Byb21fd3JpdGUpKHN0cnVjdCBzc2JfYnVzICpidXMsIGNvbnN0IHUxNiAqc3Byb20pKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHZvaWQpOwogCiAKIC8qIGNvcmUuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCBjZTZiYWRkLi4yMTFhZjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNzMsOCArNzMsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYmVuZXQvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2FzdXNfb2xlZC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IDlkZGNjMmIuLjQ3YTU2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTE5LDcgKzE5LDYgQEAKIG9iai0kKENPTkZJR19PVFVTKQkJKz0gb3R1cy8KIG9iai0kKENPTkZJR19SVDI4NjApCQkrPSBydDI4NjAvCiBvYmotJChDT05GSUdfUlQyODcwKQkJKz0gcnQyODcwLwotb2JqLSQoQ09ORklHX0JFTkVUKQkJKz0gYmVuZXQvCiBvYmotJChDT05GSUdfQ09NRURJKQkJKz0gY29tZWRpLwogb2JqLSQoQ09ORklHX0FTVVNfT0xFRCkJCSs9IGFzdXNfb2xlZC8KIG9iai0kKENPTkZJR19QQU5FTCkJCSs9IHBhbmVsLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY4MDYwNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotY29uZmlnIEJFTkVUCi0JdHJpc3RhdGUgIlNlcnZlckVuZ2luZXMgMTBHYiBOSUMgLSBCbGFkZUVuZ2luZSIKLQlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCi0Jc2VsZWN0IElORVRfTFJPCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyB0aGUgTklDIGZ1bmN0aW9uYWxpdHkgZm9yIFNlcnZlckVuZ2luZXMKLQkgIDEwR2IgbmV0d29yayBhZGFwdGVyIEJsYWRlRW5naW5lIChFQyAzMjEwKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9NQUlOVEFJTkVSUyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9NQUlOVEFJTkVSUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVjZTM0MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvTUFJTlRBSU5FUlMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVNFUlZFUiBFTkdJTkVTIDEwR2JlIE5JQyAtIEJMQURFLUVOR0lORQotUDoJU3ViYnUgU2VldGhhcmFtYW4KLU06CXN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbQotTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQotUzoJU3VwcG9ydGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MGI5MjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIwotIyBNYWtlZmlsZSB0byBidWlsZCB0aGUgbmV0d29yayBkcml2ZXIgZm9yIFNlcnZlckVuZ2luZSdzIEJsYWRlRW5naW5lCi0jCi1vYmotJChDT05GSUdfQkVORVQpICs9IGJlbmV0Lm8KLQotYmVuZXQteSA6PSAgYmVfaW5pdC5vIFwKLQkJCWJlX2ludC5vIFwKLQkJCWJlX25ldGlmLm8gXAotCQkJYmVfZXRodG9vbC5vIFwKLQkJCWZ1bmNvYmoubyBcCi0JCQljcS5vIFwKLQkJCWVxLm8gXAotCQkJbXB1Lm8gXAotCQkJZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MWRmYjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVRPRE86Ci0JLSByZW1vdmUgd3JhcHBlcnMgYXJvdW5kIGNvbW1vbiBpb3dyaXRlIGZ1bmN0aW9ucwotCS0gZnVsbCBuZXRkZXYgYXVkaXQgb2YgY29tbW9uIHByb2JsZW1zL2lzc3VlcwotCi1QbGVhc2Ugc2VuZCBhbGwgcGF0Y2hlcyBhbmQgcXVlc3Rpb25zIHRvIFN1YmJ1IFNlZXRoYXJhbWFuCi08c3ViYnVzQHNlcnZlcmVuZ2luZXMuY29tPiBhbmQgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9hc3luY21lc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9hc3luY21lc2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNzc5YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYXN5bmNtZXNnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fYXN5bmNtZXNnX2FtYXBfaF9fCi0jZGVmaW5lIF9fYXN5bmNtZXNnX2FtYXBfaF9fCi0jaW5jbHVkZSAiZndjbWRfY29tbW9uLmgiCi0KLS8qIC0tLSBBU1lOQ19FVkVOVF9DT0RFUyAtLS0gKi8KLSNkZWZpbmUgQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFICAgICAoMSkKLSNkZWZpbmUgQVNZTkNfRVZFTlRfQ09ERV9JU0NTSSAgICAgICAgICAoMikKLQotLyogLS0tIEFTWU5DX0xJTktfU1RBVEVTIC0tLSAqLwotI2RlZmluZSBBU1lOQ19FVkVOVF9MSU5LX0RPV04gICAgICAgICAgICgwKQkvKiBMaW5rIERvd24gb24gYSBwb3J0ICovCi0jZGVmaW5lIEFTWU5DX0VWRU5UX0xJTktfVVAgICAgICAgICAgICAgKDEpCS8qIExpbmsgVXAgb24gYSBwb3J0ICovCi0KLS8qCi0gKiBUaGUgbGFzdCA0IGJ5dGVzIG9mIHRoZSBhc3luYyBldmVudHMgaGF2ZSB0aGlzIGNvbW1vbiBmb3JtYXQuICBJdCBhbGxvd3MKLSAqIHRoZSBkcml2ZXIgdG8gZGlzdGluZ3Vpc2ggW2xpbmtdTUNDX0NRX0VOVFJZWy9saW5rXSBzdHJ1Y3RzIGZyb20KLSAqIGFzeW5jaHJvbm91cyBldmVudHMuICBCb3RoIGFycml2ZSBvbiB0aGUgc2FtZSBjb21wbGV0aW9uIHF1ZXVlLiAgVGhpcwotICogc3RydWN0dXJlIGFsc28gY29udGFpbnMgdGhlIGNvbW1vbiBmaWVsZHMgdXNlZCB0byBkZWNvZGUgdGhlIGFzeW5jIGV2ZW50LgotICovCi1zdHJ1Y3QgQkVfQVNZTkNfRVZFTlRfVFJBSUxFUl9BTUFQIHsKLQl1OCByc3ZkMFs4XTsJLyogRFdPUkQgMCAqLwotCXU4IGV2ZW50X2NvZGVbOF07CS8qIERXT1JEIDAgKi8KLQl1OCBldmVudF90eXBlWzhdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbNl07CS8qIERXT1JEIDAgKi8KLQl1OCBhc3luY19ldmVudDsJLyogRFdPUkQgMCAqLwotCXU4IHZhbGlkOwkJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBBU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qCi0gKiBBcHBsaWNhYmxlIGluIEluaXRpYXRvciwgVGFyZ2V0IGFuZCBOSUMgbW9kZXMuCi0gKiBBIGxpbmsgc3RhdGUgYXN5bmMgZXZlbnQgaXMgc2VlbiBieSBhbGwgZGV2aWNlIGRyaXZlcnMgYXMgc29vbiB0aGV5Ci0gKiBjcmVhdGUgYW4gTUNDIHJpbmcuIFRoZXJlYWZ0ZXIsIGFueXRpbWUgdGhlIGxpbmsgc3RhdHVzIGNoYW5nZXMgdGhlCi0gKiBkcml2ZXJzIHdpbGwgcmVjZWl2ZSBhIGxpbmsgc3RhdGUgYXN5bmMgZXZlbnQuIE5vdGlmaWNhdGlvbnMgY29udGludWUgdG8KLSAqIGJlIHNlbnQgdW50aWwgYSBkcml2ZXIgZGVzdHJveXMgaXRzIE1DQyByaW5nLiBBIGxpbmsgZG93biBldmVudCBpcwotICogcmVwb3J0ZWQgd2hlbiBlaXRoZXIgcG9ydCBsb3NlcyBsaW5rLiBBIGxpbmsgdXAgZXZlbnQgaXMgcmVwb3J0ZWQKLSAqIHdoZW4gZWl0aGVyIHBvcnQgcmVnYWlucyBsaW5rLiBXaGVuIEJFJ3MgZmFpbG92ZXIgbWVjaGFuaXNtIGlzIGVuYWJsZWQsIGEKLSAqIGxpbmsgZG93biBvbiB0aGUgYWN0aXZlIHBvcnQgY2F1c2VzIHRyYWZmaWMgdG8gYmUgZGl2ZXJ0ZWQgdG8gdGhlIHN0YW5kYnkKLSAqIHBvcnQgYnkgdGhlIEJFJ3MgQVJNIGZpcm13YXJlIChhc3N1bWluZyB0aGUgc3RhbmRieSBwb3J0IGhhcyBsaW5rKS4gSW4KLSAqIHRoaXMgY2FzZSwgdGhlIHN0YW5keSBwb3J0IGFzc3VtZXMgdGhlIGFjdGl2ZSBzdGF0dXMuIE5vdGU6IHdoZW4gbGluayBpcwotICogcmVzdG9yZWQgb24gdGhlIGZhaWxlZCBwb3J0LCB0cmFmZmljIGNvbnRpbnVlcyBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZQotICogcG9ydC4gVGhlIEFSTSBmaXJtd2FyZSBkb2VzIG5vdCBhdHRlbXB0IHRvICdmYWlsIGJhY2snIHRyYWZmaWMgdG8KLSAqIHRoZSByZXN0b3JlZCBwb3J0LgotICovCi1zdHJ1Y3QgQkVfQVNZTkNfRVZFTlRfTElOS19TVEFURV9BTUFQIHsKLQl1OCBwb3J0MF9saW5rX3N0YXR1c1s4XTsKLQl1OCBwb3J0MV9saW5rX3N0YXR1c1s4XTsKLQl1OCBhY3RpdmVfcG9ydFs4XTsKLQl1OCByc3ZkMFs4XTsJLyogRFdPUkQgMCAqLwotCXU4IHBvcnQwX2R1cGxleFs4XTsKLQl1OCBwb3J0MF9zcGVlZFs4XTsKLQl1OCBwb3J0MV9kdXBsZXhbOF07Ci0JdTggcG9ydDFfc3BlZWRbOF07Ci0JdTggcG9ydDBfZmF1bHRbOF07Ci0JdTggcG9ydDFfZmF1bHRbOF07Ci0JdTggcnN2ZDFbMl1bOF07CS8qIERXT1JEIDIgKi8KLQlzdHJ1Y3QgQkVfQVNZTkNfRVZFTlRfVFJBSUxFUl9BTUFQIHRyYWlsZXI7Ci19IF9fcGFja2VkOwotc3RydWN0IEFTWU5DX0VWRU5UX0xJTktfU1RBVEVfQU1BUCB7Ci0JdTMyIGR3WzRdOwotfTsKLSNlbmRpZiAvKiBfX2FzeW5jbWVzZ19hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2NtLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfY20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdhMWRmZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfY20uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fYmVfY21fYW1hcF9oX18KLSNkZWZpbmUgX19iZV9jbV9hbWFwX2hfXwotI2luY2x1ZGUgImJlX2NvbW1vbi5oIgotI2luY2x1ZGUgImV0eF9jb250ZXh0LmgiCi0jaW5jbHVkZSAibXB1X2NvbnRleHQuaCIKLQotLyoKLSAqIC0tLSBDRVZfV0FURVJNQVJLX0VOVU0gLS0tCi0gKiBDUS9FUSBXYXRlcm1hcmsgRW5jb2RpbmdzLiBFbmNvZGVkIGFzIG51bWJlciBvZiBmcmVlIGVudHJpZXMgaW4KLSAqIFF1ZXVlIHdoZW4gV2F0ZXJtYXJrIGlzIHJlYWNoZWQuCi0gKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzAgICAgICAgICgwKQkvKiBXYXRlcm1hcmsgd2hlbiBRdWV1ZSBmdWxsICovCi0jZGVmaW5lIENFVl9XTUFSS18xNiAgICAgICAoMSkJLyogV2F0ZXJtYXJrIGF0IDE2IGZyZWUgZW50cmllcyAqLwotI2RlZmluZSBDRVZfV01BUktfMzIgICAgICAgKDIpCS8qIFdhdGVybWFyayBhdCAzMiBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzQ4ICAgICAgICgzKQkvKiBXYXRlcm1hcmsgYXQgNDggZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS182NCAgICAgICAoNCkJLyogV2F0ZXJtYXJrIGF0IDY0IGZyZWUgZW50cmllcyAqLwotI2RlZmluZSBDRVZfV01BUktfODAgICAgICAgKDUpCS8qIFdhdGVybWFyayBhdCA4MCBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzk2ICAgICAgICg2KQkvKiBXYXRlcm1hcmsgYXQgOTYgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18xMTIgICAgICAoNykJLyogV2F0ZXJtYXJrIGF0IDExMiBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzEyOCAgICAgICg4KQkvKiBXYXRlcm1hcmsgYXQgMTI4IGZyZWUgZW50cmllcyAqLwotI2RlZmluZSBDRVZfV01BUktfMTQ0ICAgICAgKDkpCS8qIFdhdGVybWFyayBhdCAxNDQgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18xNjAgICAgICAoMTApCS8qIFdhdGVybWFyayBhdCAxNjAgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18xNzYgICAgICAoMTEpCS8qIFdhdGVybWFyayBhdCAxNzYgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18xOTIgICAgICAoMTIpCS8qIFdhdGVybWFyayBhdCAxOTIgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18yMDggICAgICAoMTMpCS8qIFdhdGVybWFyayBhdCAyMDggZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18yMjQgICAgICAoMTQpCS8qIFdhdGVybWFyayBhdCAyMjQgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18yNDAgICAgICAoMTUpCS8qIFdhdGVybWFyayBhdCAyNDAgZnJlZSBlbnRyaWVzICovCi0KLS8qCi0gKiAtLS0gQ1FfQ05UX0VOVU0gLS0tCi0gKiBDb21wbGV0aW9uIFF1ZXVlIENvdW50IEVuY29kaW5ncy4KLSAqLwotI2RlZmluZSBDRVZfQ1FfQ05UXzI1NiAgICAgICAgICAgICAgICAgICgwKQkvKiBDUSBoYXMgMjU2IGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX0NRX0NOVF81MTIgICAgICAgICAgICAgICAgICAoMSkJLyogQ1EgaGFzIDUxMiBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9DUV9DTlRfMTAyNCAgICAgICAgICAgICAgICAgKDIpCS8qIENRIGhhcyAxMDI0IGVudHJpZXMgKi8KLQotLyoKLSAqIC0tLSBFUV9DTlRfRU5VTSAtLS0KLSAqIEV2ZW50IFF1ZXVlIENvdW50IEVuY29kaW5ncy4KLSAqLwotI2RlZmluZSBDRVZfRVFfQ05UXzI1NiAgICAgKDApCS8qIEVRIGhhcyAyNTYgZW50cmllcyAoMTYtYnl0ZSBFUUVzIG9ubHkpICovCi0jZGVmaW5lIENFVl9FUV9DTlRfNTEyICAgICAoMSkJLyogRVEgaGFzIDUxMiBlbnRyaWVzICgxNi1ieXRlIEVRRXMgb25seSkgKi8KLSNkZWZpbmUgQ0VWX0VRX0NOVF8xMDI0ICAgICgyKQkvKiBFUSBoYXMgMTAyNCBlbnRyaWVzICg0LWJ5dGUgb3IgKi8KLQkJCQkvKiAxNi1ieXRlIEVRRXMgb25seSkgKi8KLSNkZWZpbmUgQ0VWX0VRX0NOVF8yMDQ4ICAgICgzKQkvKiBFUSBoYXMgMjA0OCBlbnRyaWVzICg0LWJ5dGUgb3IgKi8KLQkJCQkvKiAxNi1ieXRlIEVRRXMgb25seSkgKi8KLSNkZWZpbmUgQ0VWX0VRX0NOVF80MDk2ICAgICg0KQkvKiBFUSBoYXMgNDA5NiBlbnRyaWVzICg0LWJ5dGUgRVFFcyBvbmx5KSAqLwotCi0vKgotICogLS0tIEVRX1NJWkVfRU5VTSAtLS0KLSAqIEV2ZW50IFF1ZXVlIEVudHJ5IFNpemUgRW5jb2RpbmcuCi0gKi8KLSNkZWZpbmUgQ0VWX0VRX1NJWkVfNCAgICAgICAgICAgICAgICAgICAoMCkJLyogRVFFIGlzIDQgYnl0ZXMgKi8KLSNkZWZpbmUgQ0VWX0VRX1NJWkVfMTYgICAgICAgICAgICAgICAgICAoMSkJLyogRVFFIGlzIDE2IGJ5dGVzICovCi0KLS8qCi0gKiBDb21wbGV0aW9uIFF1ZXVlIENvbnRleHQgVGFibGUgRW50cnkuIENvbnRhaW5zIHRoZSBzdGF0ZSBvZiBhIENRLgotICogTG9jYXRlZCBpbiBSQU0gd2l0aGluIHRoZSBDRVYgYmxvY2suCi0gKi8KLXN0cnVjdCBCRV9DUV9DT05URVhUX0FNQVAgewotCXU4IENpZHhbMTFdOwkvKiBEV09SRCAwICovCi0JdTggV2F0ZXJtYXJrWzRdOwkvKiBEV09SRCAwICovCi0JdTggTm9EZWxheTsJCS8qIERXT1JEIDAgKi8KLQl1OCBFUElkeFsxMV07CS8qIERXT1JEIDAgKi8KLQl1OCBDb3VudFsyXTsJLyogRFdPUkQgMCAqLwotCXU4IHZhbGlkOwkJLyogRFdPUkQgMCAqLwotCXU4IFNvbEV2ZW50OwkvKiBEV09SRCAwICovCi0JdTggRXZlbnRhYmxlOwkvKiBEV09SRCAwICovCi0JdTggUGlkeFsxMV07CS8qIERXT1JEIDEgKi8KLQl1OCBQRFsxMF07CQkvKiBEV09SRCAxICovCi0JdTggRVFJRFs3XTsJCS8qIERXT1JEIDEgKi8KLQl1OCBGdW5jOwkJLyogRFdPUkQgMSAqLwotCXU4IFdNRTsJCS8qIERXT1JEIDEgKi8KLQl1OCBTdGFsbGVkOwkJLyogRFdPUkQgMSAqLwotCXU4IEFybWVkOwkJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBDUV9DT05URVhUX0FNQVAgewotCXUzMiBkd1syXTsKLX07Ci0KLS8qCi0gKiBFdmVudCBRdWV1ZSBDb250ZXh0IFRhYmxlIEVudHJ5LiBDb250YWlucyB0aGUgc3RhdGUgb2YgYW4gRVEuCi0gKiBMb2NhdGVkIGluIFJBTSBpbiB0aGUgQ0VWIGJsb2NrLgotICovCi1zdHJ1Y3QgQkVfRVFfQ09OVEVYVF9BTUFQIHsKLQl1OCBDaWR4WzEzXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzJdOwkvKiBEV09SRCAwICovCi0JdTggRnVuYzsJCS8qIERXT1JEIDAgKi8KLQl1OCBFUElkeFsxM107CS8qIERXT1JEIDAgKi8KLQl1OCB2YWxpZDsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMTsJCS8qIERXT1JEIDAgKi8KLQl1OCBTaXplOwkJLyogRFdPUkQgMCAqLwotCXU4IFBpZHhbMTNdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDJbM107CS8qIERXT1JEIDEgKi8KLQl1OCBQRFsxMF07CQkvKiBEV09SRCAxICovCi0JdTggQ291bnRbM107CS8qIERXT1JEIDEgKi8KLQl1OCBTb2xFdmVudDsJLyogRFdPUkQgMSAqLwotCXU4IFN0YWxsZWQ7CQkvKiBEV09SRCAxICovCi0JdTggQXJtZWQ7CQkvKiBEV09SRCAxICovCi0JdTggV2F0ZXJtYXJrWzRdOwkvKiBEV09SRCAyICovCi0JdTggV01FOwkJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQzWzNdOwkvKiBEV09SRCAyICovCi0JdTggRXZlbnRWZWN0WzZdOwkvKiBEV09SRCAyICovCi0JdTggcnN2ZDRbMl07CS8qIERXT1JEIDIgKi8KLQl1OCBEZWxheVs4XTsJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQ1WzZdOwkvKiBEV09SRCAyICovCi0JdTggVE1SOwkJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQ2OwkJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQ3WzMyXTsJLyogRFdPUkQgMyAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBFUV9DT05URVhUX0FNQVAgewotCXUzMiBkd1s0XTsKLX07Ci0KLSNlbmRpZiAvKiBfX2JlX2NtX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNjNkYzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2JlX2NvbW1vbl9hbWFwX2hfXwotI2RlZmluZSBfX2JlX2NvbW1vbl9hbWFwX2hfXwotCi0vKiBQaHlzaWNhbCBBZGRyZXNzLiAqLwotc3RydWN0IEJFX1BIWVNfQUREUl9BTUFQIHsKLQl1OCBsb1szMl07CQkvKiBEV09SRCAwICovCi0JdTggaGlbMzJdOwkJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQSFlTX0FERFJfQU1BUCB7Ci0JdTMyIGR3WzJdOwotfTsKLQotLyogVmlydHVhbCBBZGRyZXNzLiAqLwotc3RydWN0IEJFX1ZJUlRfQUREUl9BTUFQIHsKLQl1OCBsb1szMl07CQkvKiBEV09SRCAwICovCi0JdTggaGlbMzJdOwkJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBWSVJUX0FERFJfQU1BUCB7Ci0JdTMyIGR3WzJdOwotfTsKLQotLyogU2NhdHRlciBnYXRoZXIgZWxlbWVudC4gKi8KLXN0cnVjdCBCRV9TR0VfQU1BUCB7Ci0JdTggYWRkcl9oaVszMl07CS8qIERXT1JEIDAgKi8KLQl1OCBhZGRyX2xvWzMyXTsJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMiAqLwotCXU4IGxlblsxNl07CQkvKiBEV09SRCAzICovCi0JdTggcnN2ZDFbMTZdOwkvKiBEV09SRCAzICovCi19IF9fcGFja2VkOwotc3RydWN0IFNHRV9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi0jZW5kaWYgLyogX19iZV9jb21tb25fYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9ldGh0b29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfZXRodG9vbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjdhZjg1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9ldGh0b29sLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIGJlX2V0aHRvb2wuYwotICoKLSAqIAlUaGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBldGh0b29sIGNhbiB1c2UKLSAqIAl0byB0YWxrIHRvIHRoZSBkcml2ZXIgYW5kIHRoZSBCRSBIL1cuCi0gKi8KLQotI2luY2x1ZGUgImJlbmV0LmgiCi0KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGJlbmV0X2dzdHJpbmdzX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKLS8qIG5ldF9kZXZpY2Vfc3RhdHMgKi8KLQkicnhfcGFja2V0cyIsCi0JInR4X3BhY2tldHMiLAotCSJyeF9ieXRlcyIsCi0JInR4X2J5dGVzIiwKLQkicnhfZXJyb3JzIiwKLQkidHhfZXJyb3JzIiwKLQkicnhfZHJvcHBlZCIsCi0JInR4X2Ryb3BwZWQiLAotCSJtdWx0aWNhc3QiLAotCSJjb2xsaXNpb25zIiwKLQkicnhfbGVuZ3RoX2Vycm9ycyIsCi0JInJ4X292ZXJfZXJyb3JzIiwKLQkicnhfY3JjX2Vycm9ycyIsCi0JInJ4X2ZyYW1lX2Vycm9ycyIsCi0JInJ4X2ZpZm9fZXJyb3JzIiwKLQkicnhfbWlzc2VkX2Vycm9ycyIsCi0JInR4X2Fib3J0ZWRfZXJyb3JzIiwKLQkidHhfY2Fycmllcl9lcnJvcnMiLAotCSJ0eF9maWZvX2Vycm9ycyIsCi0JInR4X2hlYXJ0YmVhdF9lcnJvcnMiLAotCSJ0eF93aW5kb3dfZXJyb3JzIiwKLQkicnhfY29tcHJlc3NlZCIsCi0JInRjX2NvbXByZXNzZWQiLAotLyogQkUgZHJpdmVyIFN0YXRzICovCi0JImJlc190eF9yZXFzIiwKLQkiYmVzX3R4X2ZhaWxzIiwKLQkiYmVzX2Z3ZF9yZXFzIiwKLQkiYmVzX3R4X3dyYnMiLAotCSJiZXNfaW50ZXJydXB0cyIsCi0JImJlc19ldmVudHMiLAotCSJiZXNfdHhfZXZlbnRzIiwKLQkiYmVzX3J4X2V2ZW50cyIsCi0JImJlc190eF9jb21wbCIsCi0JImJlc19yeF9jb21wbCIsCi0JImJlc19ldGhyeF9wb3N0X2ZhaWwiLAotCSJiZXNfODAyXzNfZHJvcHBlZF9mcmFtZXMiLAotCSJiZXNfODAyXzNfbWFsZm9ybWVkX2ZyYW1lcyIsCi0JImJlc19yeF9taXNjX3BrdHMiLAotCSJiZXNfZXRoX3R4X3JhdGUiLAotCSJiZXNfZXRoX3J4X3JhdGUiLAotCSJOdW0gUGFja2V0cyBjb2xsZWN0ZWQiLAotCSJOdW0gVGltZXMgRmx1c2hlZCIsCi19OwotCi0jZGVmaW5lIE5FVF9ERVZfU1RBVFNfTEVOIFwKLQkoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKS9zaXplb2YodW5zaWduZWQgbG9uZykpCi0KLSNkZWZpbmUgQkVORVRfU1RBVFNfTEVOICBBUlJBWV9TSVpFKGJlbmV0X2dzdHJpbmdzX3N0YXRzKQotCi1zdGF0aWMgdm9pZAotYmVfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCi0Jc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIGJlX2RyaXZlcl9uYW1lLCAzMik7Ci0Jc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBiZV9kcnZyX3ZlciwgMzIpOwotCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgYmVfZndfdmVyLCAzMik7Ci0Jc3RyY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSk7Ci0JZHJ2aW5mby0+dGVzdGluZm9fbGVuID0gMDsKLQlkcnZpbmZvLT5yZWdkdW1wX2xlbiA9IDA7Ci0JZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWJlX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbGVzY2UpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQotCWNvYWxlc2NlLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGFkYXB0ZXItPm1heF9yeF9jb2FsOwotCi0JY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+Y3VyX2VxZDsKLQljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaGlnaCA9IGFkYXB0ZXItPm1heF9lcWQ7Ci0JY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2xvdyA9IGFkYXB0ZXItPm1pbl9lcWQ7Ci0KLQljb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3MgPSBhZGFwdGVyLT5jdXJfZXFkOwotCWNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2Vjc19oaWdoID0gYWRhcHRlci0+bWF4X2VxZDsKLQljb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfbG93ID0gYWRhcHRlci0+bWluX2VxZDsKLQotCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBhZGFwdGVyLT5lbmFibGVfYWljOwotCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfdHhfY29hbGVzY2UgPSBhZGFwdGVyLT5lbmFibGVfYWljOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzZXQgaW50ZXJydXAgY29hbGVzY2luZyBkZWxheSAqYXMgd2VsbCBhcyoKLSAqIHRoZSBudW1iZXIgb2YgcGt0cyB0byBjb2FsZXNjZSBmb3IgTFJPLgotICovCi1zdGF0aWMgaW50Ci1iZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWxlc2NlKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0Jc3RydWN0IGJlX2VxX29iamVjdCAqZXFfb2JqZWN0cDsKLQl1MzIgbWF4LCBtaW4sIGN1cjsKLQlpbnQgc3RhdHVzOwotCi0JYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBjb2FsZXNjZS0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7Ci0JaWYgKGFkYXB0ZXItPm1heF9yeF9jb2FsID49IEJFX0xST19NQVhfUEtUUykKLQkJYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBCRV9MUk9fTUFYX1BLVFM7Ci0KLQlpZiAoYWRhcHRlci0+ZW5hYmxlX2FpYyA9PSAwICYmCi0JCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPT0gMSkgewotCQkvKiBpZiBBSUMgaXMgYmVpbmcgdHVybmVkIG9uIG5vdywgc3RhcnQgd2l0aCBhbiBFUUQgb2YgMCAqLwotCQlhZGFwdGVyLT5jdXJfZXFkID0gMDsKLQl9Ci0JYWRhcHRlci0+ZW5hYmxlX2FpYyA9IGNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7Ci0KLQkvKiByb3VuZCBvZmYgdG8gbmVhcmVzdCBtdWx0aXBsZSBvZiA4ICovCi0JbWF4ID0gKCgoY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2ggKyA0KSA+PiAzKSA8PCAzKTsKLQltaW4gPSAoKChjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfbG93ICsgNCkgPj4gMykgPDwgMyk7Ci0JY3VyID0gKCgoY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzICsgNCkgPj4gMykgPDwgMyk7Ci0KLQlpZiAoYWRhcHRlci0+ZW5hYmxlX2FpYykgewotCQkvKiBhY2NlcHQgbG93IGFuZCBoaWdoIGlmIEFJQyBpcyBlbmFibGVkICovCi0JCWlmIChtYXggPiBNQVhfRVFEKQotCQkJbWF4ID0gTUFYX0VRRDsKLQkJaWYgKG1pbiA+IG1heCkKLQkJCW1pbiA9IG1heDsKLQkJYWRhcHRlci0+bWF4X2VxZCA9IG1heDsKLQkJYWRhcHRlci0+bWluX2VxZCA9IG1pbjsKLQkJaWYgKGFkYXB0ZXItPmN1cl9lcWQgPiBtYXgpCi0JCQlhZGFwdGVyLT5jdXJfZXFkID0gbWF4OwotCQlpZiAoYWRhcHRlci0+Y3VyX2VxZCA8IG1pbikKLQkJCWFkYXB0ZXItPmN1cl9lcWQgPSBtaW47Ci0JfSBlbHNlIHsKLQkJLyogYWNjZXB0IHNwZWNpZmllZCBjb2FsZXNjZV91c2VjcyBvbmx5IGlmIEFJQyBpcyBkaXNhYmxlZCAqLwotCQlpZiAoY3VyID4gTUFYX0VRRCkKLQkJCWN1ciA9IE1BWF9FUUQ7Ci0JCWVxX29iamVjdHAgPSAmcG5vYi0+ZXZlbnRfcV9vYmo7Ci0JCXN0YXR1cyA9Ci0JCSAgICBiZV9lcV9tb2RpZnlfZGVsYXkoJnBub2ItPmZuX29iaiwgMSwgJmVxX29iamVjdHAsICZjdXIsCi0JCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlpZiAoc3RhdHVzID09IEJFX1NVQ0NFU1MpCi0JCQlhZGFwdGVyLT5jdXJfZXFkID0gY3VyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBiZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0JcmV0dXJuIGFkYXB0ZXItPnJ4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgYmVfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCi0JaWYgKGRhdGEpCi0JCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwotCWVsc2UKLQkJYWRhcHRlci0+cnhfY3N1bSA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWJlX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSkKLXsKLQlzd2l0Y2ggKHN0cmluZ3NldCkgewotCWNhc2UgRVRIX1NTX1NUQVRTOgotCQltZW1jcHkoZGF0YSwgKmJlbmV0X2dzdHJpbmdzX3N0YXRzLAotCQkgICAgICAgc2l6ZW9mKGJlbmV0X2dzdHJpbmdzX3N0YXRzKSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBiZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlyZXR1cm4gQkVORVRfU1RBVFNfTEVOOwotfQotCi1zdGF0aWMgdm9pZAotYmVfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHVpbnQ2NF90ICpkYXRhKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0JaW50IGk7Ci0KLQliZW5ldF9nZXRfc3RhdHMobmV0ZGV2KTsKLQotCWZvciAoaSA9IDA7IGkgPD0gTkVUX0RFVl9TVEFUU19MRU47IGkrKykKLQkJZGF0YVtpXSA9ICgodW5zaWduZWQgbG9uZyAqKSZhZGFwdGVyLT5iZW5ldF9zdGF0cylbaV07Ci0KLQlkYXRhW2ldID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfdHhfcmVxczsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc190eF9mYWlsczsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19md2RfcmVxczsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc190eF93cmJzOwotCi0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfaW50czsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19ldmVudHM7Ci0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfdHhfZXZlbnRzOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X2V2ZW50czsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc190eF9jb21wbDsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9jb21wbDsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19ldGhyeF9wb3N0X2ZhaWw7Ci0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfODAyXzNfZHJvcHBlZF9mcmFtZXM7Ci0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfODAyXzNfbWFsZm9ybWVkX2ZyYW1lczsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9taXNjX3BrdHM7Ci0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfZXRoX3R4X3JhdGU7Ci0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfZXRoX3J4X3JhdGU7Ci0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfcnhfY29hbDsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9mbHVzaDsKLQotfQotCi1zdGF0aWMgaW50IGJlX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCi17Ci0JZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKLQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCXJldHVybiAwOwotfQotCi0vKiBHZXQgdGhlIFJpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwbm9iICovCi1zdGF0aWMgdm9pZAotYmVfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JLyogUHJlIFNldCBNYXhpbXMgKi8KLQlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IHBub2ItPnJ4X3FfbGVuOwotCXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSByaW5nLT5yeF9taW5pX21heF9wZW5kaW5nOwotCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmc7Ci0JcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBwbm9iLT50eF9xX2xlbjsKLQotCS8qIEN1cnJlbnQgaGFyZHdhcmUgU2V0dGluZ3MgICAgICAgICAgICAgICAgKi8KLQlyaW5nLT5yeF9wZW5kaW5nID0gYXRvbWljX3JlYWQoJnBub2ItPnJ4X3FfcG9zdGVkKTsKLQlyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSByaW5nLT5yeF9taW5pX3BlbmRpbmc7Ci0JcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IHJpbmctPnJ4X2p1bWJvX3BlbmRpbmc7Ci0JcmluZy0+dHhfcGVuZGluZyA9IGF0b21pY19yZWFkKCZwbm9iLT50eF9xX3VzZWQpOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1iZV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplY21kKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlib29sIHJ4ZmMsIHR4ZmM7Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGJlX2V0aF9nZXRfZmxvd19jb250cm9sKCZwbm9iLT5mbl9vYmosICZ0eGZjLCAmcnhmYyk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgcGF1c2UgZnJhbWUgc2V0dGluZ3NcbiIpOwotCQkvKiByZXR1cm4gZGVmYXVsdHMgKi8KLQkJZWNtZC0+cnhfcGF1c2UgPSAxOwotCQllY21kLT50eF9wYXVzZSA9IDA7Ci0JCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh0eGZjID09IHRydWUpCi0JCWVjbWQtPnR4X3BhdXNlID0gMTsKLQllbHNlCi0JCWVjbWQtPnR4X3BhdXNlID0gMDsKLQotCWlmIChyeGZjID09IHRydWUpCi0JCWVjbWQtPnJ4X3BhdXNlID0gMTsKLQllbHNlCi0JCWVjbWQtPnJ4X3BhdXNlID0gMDsKLQotCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLX0KLQotc3RhdGljIGludAotYmVfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZWNtZCkKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JYm9vbCB0eGZjLCByeGZjOwotCWludCBzdGF0dXM7Ci0KLQlpZiAoZWNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZWNtZC0+dHhfcGF1c2UpCi0JCXR4ZmMgPSB0cnVlOwotCWVsc2UKLQkJdHhmYyA9IGZhbHNlOwotCi0JaWYgKGVjbWQtPnJ4X3BhdXNlKQotCQlyeGZjID0gdHJ1ZTsKLQllbHNlCi0JCXJ4ZmMgPSBmYWxzZTsKLQotCXN0YXR1cyA9IGJlX2V0aF9zZXRfZmxvd19jb250cm9sKCZwbm9iLT5mbl9vYmosIHR4ZmMsIHJ4ZmMpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJVbmFibGUgdG8gc2V0IHBhdXNlIGZyYW1lIHNldHRpbmdzXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzID0gewotCS5nZXRfc2V0dGluZ3MgPSBiZV9nZXRfc2V0dGluZ3MsCi0JLmdldF9kcnZpbmZvID0gYmVfZ2V0X2RydmluZm8sCi0JLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuZ2V0X2NvYWxlc2NlID0gYmVfZ2V0X2NvYWxlc2NlLAotCS5zZXRfY29hbGVzY2UgPSBiZV9zZXRfY29hbGVzY2UsCi0JLmdldF9yaW5ncGFyYW0gPSBiZV9nZXRfcmluZ3BhcmFtLAotCS5nZXRfcGF1c2VwYXJhbSA9IGJlX2dldF9wYXVzZXBhcmFtLAotCS5zZXRfcGF1c2VwYXJhbSA9IGJlX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bSA9IGJlX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IGJlX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAotCS5nZXRfc3RyaW5ncyA9IGJlX2dldF9zdHJpbmdzLAotCS5nZXRfc3RhdHNfY291bnQgPSBiZV9nZXRfc3RhdHNfY291bnQsCi0JLmdldF9ldGh0b29sX3N0YXRzID0gYmVfZ2V0X2V0aHRvb2xfc3RhdHMsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYTAyNmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2luaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDEzODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSAiYmVuZXQuaCIKLQotI2RlZmluZSAgRFJWUl9WRVJTSU9OICAiMS4wLjcyOCIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJlX2RldmljZV9pZF90YWJsZVtdID0gewotCXtQQ0lfREVWSUNFKDB4MTlhMiwgMHgwMjAxKX0sCi0JezB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVfZGV2aWNlX2lkX3RhYmxlKTsKLQotTU9EVUxFX1ZFUlNJT04oRFJWUl9WRVJTSU9OKTsKLQotI2RlZmluZSBEUlZfREVTQ1JJUFRJT04gIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUgTmV0d29yayBEcml2ZXIgVmVyc2lvbiAiCi0KLU1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04gRFJWUl9WRVJTSU9OKTsKLU1PRFVMRV9BVVRIT1IoIlNlcnZlckVuZ2luZXMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBtc2l4ID0gMTsKLW1vZHVsZV9wYXJhbShtc2l4LCB1aW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MobXNpeCwgIlVzZSBNU0kteCBpbnRlcnJ1cHRzIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnhidWZfc2l6ZSA9IDIwNDg7CS8qIERlZmF1bHQgUlggZnJhZyBzaXplICovCi1tb2R1bGVfcGFyYW0ocnhidWZfc2l6ZSwgdWludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJ4YnVmX3NpemUsICJTaXplIG9mIGJ1ZmZlcnMgdG8gaG9sZCBSeCBkYXRhIik7Ci0KLWNvbnN0IGNoYXIgYmVfZHJ2cl92ZXJbXSA9IERSVlJfVkVSU0lPTjsKLWNoYXIgYmVfZndfdmVyWzMyXTsJCS8qIEYvVyB2ZXJzaW9uIGZpbGxlZCBpbiBieSBiZV9wcm9iZSAqLwotY2hhciBiZV9kcml2ZXJfbmFtZVtdID0gImJlbmV0IjsKLQotLyoKLSAqIE51bWJlciBvZiBlbnRyaWVzIGluIGVhY2ggcXVldWUuCi0gKi8KLSNkZWZpbmUgRVZFTlRfUV9MRU4JCTEwMjQKLSNkZWZpbmUgRVRIX1RYUV9MRU4JCTIwNDgKLSNkZWZpbmUgRVRIX1RYQ1FfTEVOCQkxMDI0Ci0jZGVmaW5lIEVUSF9SWFFfTEVOCQkxMDI0CS8qIERvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIHZhbHVlICovCi0jZGVmaW5lIEVUSF9VQ19SWENRX0xFTgkJMTAyNAotI2RlZmluZSBFVEhfQkNfUlhDUV9MRU4JCTI1NgotI2RlZmluZSBNQ0NfUV9MRU4gICAgICAgICAgICAgICA2NAkvKiB0b3RhbCBzaXplIG5vdCB0byBleGNlZWQgOCBwYWdlcyAqLwotI2RlZmluZSBNQ0NfQ1FfTEVOICAgICAgICAgICAgICAyNTYKLQotLyogQml0IG1hc2sgZGVzY3JpYmluZyBldmVudHMgb2YgaW50ZXJlc3QgdG8gYmUgdHJhY2VkICovCi11bnNpZ25lZCBpbnQgdHJhY2VfbGV2ZWw7Ci0KLXN0YXRpYyBpbnQKLWluaXRfcGNpX2JlX2Z1bmN0aW9uKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQl1NjQgcGE7Ci0KLQkvKiBDU1IgKi8KLQlwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKLQlhZGFwdGVyLT5jc3JfdmEgPSBpb3JlbWFwX25vY2FjaGUocGEsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpOwotCWlmIChhZGFwdGVyLT5jc3JfdmEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBEb29yIEJlbGwgKi8KLQlwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKLQlhZGFwdGVyLT5kYl92YSA9IGlvcmVtYXBfbm9jYWNoZShwYSwgKDEyOCAqIDEwMjQpKTsKLQlpZiAoYWRhcHRlci0+ZGJfdmEgPT0gTlVMTCkgewotCQlpb3VubWFwKGFkYXB0ZXItPmNzcl92YSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIFBDSSAqLwotCXBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCWFkYXB0ZXItPnBjaV92YSA9IGlvcmVtYXBfbm9jYWNoZShwYSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7Ci0JaWYgKGFkYXB0ZXItPnBjaV92YSA9PSBOVUxMKSB7Ci0JCWlvdW5tYXAoYWRhcHRlci0+Y3NyX3ZhKTsKLQkJaW91bm1hcChhZGFwdGVyLT5kYl92YSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW50ZXJydXB0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEV2ZW50Ci0gICBxdWV1ZSBJRCBmb3IgdGhlIGdpdmVuIE5ldE9iamVjdAotKi8KLXZvaWQgYmVfZW5hYmxlX2VxX2ludHIoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IENRX0RCX0FNQVAgY3FkYjsKLQljcWRiLmR3WzBdID0gMDsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgZXZlbnQsICZjcWRiLCAxKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgcmVhcm0sICZjcWRiLCAxKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgbnVtX3BvcHBlZCwgJmNxZGIsIDApOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBxaWQsICZjcWRiLCBwbm9iLT5ldmVudF9xX2lkKTsKLQlQRF9XUklURSgmcG5vYi0+Zm5fb2JqLCBjcV9kYiwgY3FkYi5kd1swXSk7Ci19Ci0KLS8qCi0gICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgY29ycmVzcG9uZGluZyB0byB0aGUgRXZlbnQKLSAgIHF1ZXVlIElEIGZvciB0aGUgZ2l2ZW4gTmV0T2JqZWN0Ci0qLwotdm9pZCBiZV9kaXNhYmxlX2VxX2ludHIoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IENRX0RCX0FNQVAgY3FkYjsKLQljcWRiLmR3WzBdID0gMDsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgZXZlbnQsICZjcWRiLCAxKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgcmVhcm0sICZjcWRiLCAwKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgbnVtX3BvcHBlZCwgJmNxZGIsIDApOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBxaWQsICZjcWRiLCBwbm9iLT5ldmVudF9xX2lkKTsKLQlQRF9XUklURSgmcG5vYi0+Zm5fb2JqLCBjcV9kYiwgY3FkYi5kd1swXSk7Ci19Ci0KLS8qCi0gICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgZnJvbSB0aGUgIG5ldHdvcmsgZnVuY3Rpb24KLSAgICBvZiB0aGUgQmxhZGVFbmdpbmUuIFVzZSB0aGUgZnVuY3Rpb24gYmVfZGlzYWJsZV9lcV9pbnRyKCkKLSAgICB0byBlbmFibGUgdGhlIGludGVycnVwdCBmcm9tIHRoZSBldmVudCBxdWV1ZSBvZiBvbmx5IG9uZSBzcGVjaWZpYwotICAgIE5ldE9iamVjdAotKi8KLXZvaWQgYmVfZW5hYmxlX2ludHIoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IFBDSUNGR19IT1NUX1RJTUVSX0lOVF9DVFJMX0NTUl9BTUFQIGN0cmw7Ci0JdTMyIGhvc3RfaW50cjsKLQotCWN0cmwuZHdbMF0gPSBQQ0lDRkcxX1JFQUQoJnBub2ItPmZuX29iaiwgaG9zdF90aW1lcl9pbnRfY3RybCk7Ci0JaG9zdF9pbnRyID0gQU1BUF9HRVRfQklUU19QVFIoUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSLAotCQkJCQkJCWhvc3RpbnRyLCBjdHJsLmR3KTsKLQlpZiAoIWhvc3RfaW50cikgewotCQlBTUFQX1NFVF9CSVRTX1BUUihQQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1IsCi0JCQlob3N0aW50ciwgY3RybC5kdywgMSk7Ci0JCVBDSUNGRzFfV1JJVEUoJnBub2ItPmZuX29iaiwgaG9zdF90aW1lcl9pbnRfY3RybCwKLQkJCWN0cmwuZHdbMF0pOwotCX0KLX0KLQotLyoKLSAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGludGVycnVwdCBmcm9tIHRoZSBuZXR3b3JrIGZ1bmN0aW9uIG9mCi0gICB0aGUgQmxhZGVFbmdpbmUuICBVc2UgdGhlIGZ1bmN0aW9uIGJlX2Rpc2FibGVfZXFfaW50cigpIHRvCi0gICBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgZnJvbSB0aGUgZXZlbnQgcXVldWUgb2Ygb25seSBvbmUgc3BlY2lmaWMgTmV0T2JqZWN0Ci0qLwotdm9pZCBiZV9kaXNhYmxlX2ludHIoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0KLQlzdHJ1Y3QgUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSX0FNQVAgY3RybDsKLQl1MzIgaG9zdF9pbnRyOwotCWN0cmwuZHdbMF0gPSBQQ0lDRkcxX1JFQUQoJnBub2ItPmZuX29iaiwgaG9zdF90aW1lcl9pbnRfY3RybCk7Ci0JaG9zdF9pbnRyID0gQU1BUF9HRVRfQklUU19QVFIoUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSLAotCQkJCQkJCWhvc3RpbnRyLCBjdHJsLmR3KTsKLQlpZiAoaG9zdF9pbnRyKSB7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKFBDSUNGR19IT1NUX1RJTUVSX0lOVF9DVFJMX0NTUiwgaG9zdGludHIsCi0JCQljdHJsLmR3LCAwKTsKLQkJUENJQ0ZHMV9XUklURSgmcG5vYi0+Zm5fb2JqLCBob3N0X3RpbWVyX2ludF9jdHJsLAotCQkJY3RybC5kd1swXSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGJlX2VuYWJsZV9tc2l4KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCWludCBpLCByZXQ7Ci0KLQlpZiAoIW1zaXgpCi0JCXJldHVybiAtMTsKLQotCWZvciAoaSA9IDA7IGkgPCBCRV9NQVhfUkVRX01TSVhfVkVDVE9SUzsgaSsrKQotCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0uZW50cnkgPSBpOwotCi0JcmV0ID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKLQkJQkVfTUFYX1JFUV9NU0lYX1ZFQ1RPUlMpOwotCi0JaWYgKHJldCA9PSAwKQotCQlhZGFwdGVyLT5tc2l4X2VuYWJsZWQgPSAxOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYmVfcmVnaXN0ZXJfaXNyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAotCQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcG5vYi0+bmV0ZGV2OwotCWludCBpbnR4ID0gMCwgcjsKLQotCW5ldGRldi0+aXJxID0gYWRhcHRlci0+cGRldi0+aXJxOwotCXIgPSBiZV9lbmFibGVfbXNpeChhZGFwdGVyKTsKLQotCWlmIChyID09IDApIHsKLQkJciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3IsCi0JCQkJYmVfaW50LCBJUlFGX1NIQVJFRCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJNU0lYIFJlcXVlc3QgSVJRIGZhaWxlZCAtIEVycm5vICVkXG4iLCByKTsKLQkJCWludHggPSAxOwotCQkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKLQkJCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IDA7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnR4ID0gMTsKLQl9Ci0KLQlpZiAoaW50eCkgewotCQlyID0gcmVxdWVzdF9pcnEobmV0ZGV2LT5pcnEsIGJlX2ludCwgSVJRRl9TSEFSRUQsCi0JCQkJbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJJTlR4IFJlcXVlc3QgSVJRIGZhaWxlZCAtIEVycm5vICVkXG4iLCByKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQlhZGFwdGVyLT5pc3JfcmVnaXN0ZXJlZCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJlX3VucmVnaXN0ZXJfaXNyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXZwOwotCWlmIChhZGFwdGVyLT5pc3JfcmVnaXN0ZXJlZCkgewotCQlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7Ci0JCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yLCBuZXRkZXYpOwotCQkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKLQkJCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlmcmVlX2lycShuZXRkZXYtPmlycSwgbmV0ZGV2KTsKLQkJfQotCQlhZGFwdGVyLT5pc3JfcmVnaXN0ZXJlZCA9IDA7Ci0JfQotfQotCi0vKgotICAgIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSBGbHVzaCBDb21wbGV0aW9ucyB0aGF0IGFyZSBpc3N1ZWQgYnkgdGhlCi0gICAgQVJNIEYvVywgd2hlbiBhIFJlY3YgUmluZyBpcyBkZXN0cm95ZWQuICBBIGZsdXNoIGNvbXBsZXRpb24gaXMKLSAgICBpZGVudGlmaWVkIHdoZW4gYSBSeCBDT21wbCBkZXNjcmlwdG9yIGhhcyB0aGUgdGNwY2tzdW0gYW5kIHVkcGNrc3VtCi0gICAgc2V0IGFuZCB0aGUgcGt0c2l6ZSBpcyAzMi4gIFRoZXNlIGNvbXBsZXRpb25zIGFyZSByZWNlaXZlZCBvbiB0aGUKLSAgICBSeCBDb21wbGV0aW9uIFF1ZXVlLgotKi8KLXN0YXRpYyB1MzIgYmVfcHJvY2Vzc19yeF9mbHVzaF9jbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBFVEhfUlhfQ09NUExfQU1BUCAqcnhjcDsKLQl1bnNpZ25lZCBpbnQgaSA9IDA7Ci0Jd2hpbGUgKChyeGNwID0gYmVfZ2V0X3J4X2NtcGwocG5vYikpICE9IE5VTEwpIHsKLQkJYmVfbm90aWZ5X2NtcGwocG5vYiwgMSwgcG5vYi0+cnhfY3FfaWQsIDEpOwotCQlpKys7Ci0JfQotCXJldHVybiBpOwotfQotCi1zdGF0aWMgdm9pZCBiZV90eF9xX2NsZWFuKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXdoaWxlIChhdG9taWNfcmVhZCgmcG5vYi0+dHhfcV91c2VkKSkKLQkJcHJvY2Vzc19vbmVfdHhfY29tcGwocG5vYiwgdHhfY29tcGxfbGFzdHdyYl9pZHhfZ2V0KHBub2IpKTsKLX0KLQotc3RhdGljIHZvaWQgYmVfcnhfcV9jbGVhbihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpZiAocG5vYi0+cnhfY3R4dCkgewotCQlpbnQgaTsKLQkJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcnhfcGFnZV9pbmZvOwotCQlmb3IgKGkgPSAwOyBpIDwgcG5vYi0+cnhfcV9sZW47IGkrKykgewotCQkJcnhfcGFnZV9pbmZvID0gJihwbm9iLT5yeF9wYWdlX2luZm9baV0pOwotCQkJaWYgKCFwbm9iLT5yeF9wZ19zaGFyZWQgfHwgcnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldCkgewotCQkJCXBjaV91bm1hcF9wYWdlKHBub2ItPmFkYXB0ZXItPnBkZXYsCi0JCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKHJ4X3BhZ2VfaW5mbywgYnVzKSwKLQkJCQkJICAgICAgIHBub2ItPnJ4X2J1Zl9zaXplLAotCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCX0KLQkJCWlmIChyeF9wYWdlX2luZm8tPnBhZ2UpCi0JCQkJcHV0X3BhZ2UocnhfcGFnZV9pbmZvLT5wYWdlKTsKLQkJCW1lbXNldChyeF9wYWdlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JCX0KLQkJcG5vYi0+cnhfcGdfaW5mb19oZCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBiZV9kZXN0cm95X25ldG9iaihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbnQgc3RhdHVzOwotCi0JaWYgKHBub2ItPnR4X3FfY3JlYXRlZCkgewotCQlzdGF0dXMgPSBiZV9ldGhfc3FfZGVzdHJveSgmcG5vYi0+dHhfcV9vYmopOwotCQlwbm9iLT50eF9xX2NyZWF0ZWQgPSAwOwotCX0KLQotCWlmIChwbm9iLT5yeF9xX2NyZWF0ZWQpIHsKLQkJc3RhdHVzID0gYmVfZXRoX3JxX2Rlc3Ryb3koJnBub2ItPnJ4X3Ffb2JqKTsKLQkJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCQlzdGF0dXMgPSBiZV9ldGhfcnFfZGVzdHJveV9vcHRpb25zKCZwbm9iLT5yeF9xX29iaiwgMCwKLQkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwotCQkJQlVHX09OKHN0YXR1cyk7Ci0JCX0KLQkJcG5vYi0+cnhfcV9jcmVhdGVkID0gMDsKLQl9Ci0KLQliZV9wcm9jZXNzX3J4X2ZsdXNoX2NtcGwocG5vYik7Ci0KLQlpZiAocG5vYi0+dHhfY3FfY3JlYXRlZCkgewotCQlzdGF0dXMgPSBiZV9jcV9kZXN0cm95KCZwbm9iLT50eF9jcV9vYmopOwotCQlwbm9iLT50eF9jcV9jcmVhdGVkID0gMDsKLQl9Ci0KLQlpZiAocG5vYi0+cnhfY3FfY3JlYXRlZCkgewotCQlzdGF0dXMgPSBiZV9jcV9kZXN0cm95KCZwbm9iLT5yeF9jcV9vYmopOwotCQlwbm9iLT5yeF9jcV9jcmVhdGVkID0gMDsKLQl9Ci0KLQlpZiAocG5vYi0+bWNjX3FfY3JlYXRlZCkgewotCQlzdGF0dXMgPSBiZV9tY2NfcmluZ19kZXN0cm95KCZwbm9iLT5tY2NfcV9vYmopOwotCQlwbm9iLT5tY2NfcV9jcmVhdGVkID0gMDsKLQl9Ci0JaWYgKHBub2ItPm1jY19jcV9jcmVhdGVkKSB7Ci0JCXN0YXR1cyA9IGJlX2NxX2Rlc3Ryb3koJnBub2ItPm1jY19jcV9vYmopOwotCQlwbm9iLT5tY2NfY3FfY3JlYXRlZCA9IDA7Ci0JfQotCi0JaWYgKHBub2ItPmV2ZW50X3FfY3JlYXRlZCkgewotCQlzdGF0dXMgPSBiZV9lcV9kZXN0cm95KCZwbm9iLT5ldmVudF9xX29iaik7Ci0JCXBub2ItPmV2ZW50X3FfY3JlYXRlZCA9IDA7Ci0JfQotCWJlX2Z1bmN0aW9uX2NsZWFudXAoJnBub2ItPmZuX29iaik7Ci19Ci0KLS8qCi0gKiBmcmVlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgcG5vYgotICogQ2FsbGVkIGF0IHRoZSB0aW1lIG9mIG1vZHVsZSBjbGVhbnVwIGFzIHdlbGwgYSBhbnkgZXJyb3IgZHVyaW5nCi0gKiBtb2R1bGUgaW5pdC4gIFNvbWUgcmVzb3VyY2VzIG1heSBiZSBwYXJ0aWFsbHkgYWxsb2NhdGVkIGluIGEgTmV0T2JqLgotICovCi1zdGF0aWMgdm9pZCBuZXRvYmplY3RfY2xlYW51cChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXZwOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JCWJlX3dhaXRfbmljX3R4X2NtcGx4X2NtcGwocG5vYik7Ci0JCWJlX2Rpc2FibGVfZXFfaW50cihwbm9iKTsKLQl9Ci0KLQliZV91bnJlZ2lzdGVyX2lzcihhZGFwdGVyKTsKLQotCWlmIChhZGFwdGVyLT50YXNrbGV0X3N0YXJ0ZWQpIHsKLQkJdGFza2xldF9raWxsKCYoYWRhcHRlci0+c3RzX2hhbmRsZXIpKTsKLQkJYWRhcHRlci0+dGFza2xldF9zdGFydGVkID0gMDsKLQl9Ci0JaWYgKHBub2ItPmZuX29ial9jcmVhdGVkKQotCQliZV9kaXNhYmxlX2ludHIocG5vYik7Ci0KLQlpZiAoYWRhcHRlci0+ZGV2X3N0YXRlICE9IEJFX0RFVl9TVEFURV9OT05FKQotCQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwotCi0JaWYgKHBub2ItPmZuX29ial9jcmVhdGVkKQotCQliZV9kZXN0cm95X25ldG9iaihwbm9iKTsKLQotCWFkYXB0ZXItPm5ldF9vYmogPSBOVUxMOwotCWFkYXB0ZXItPm5ldGRldnAgPSBOVUxMOwotCi0JYmVfcnhfcV9jbGVhbihwbm9iKTsKLQlpZiAocG5vYi0+cnhfY3R4dCkgewotCQlrZnJlZShwbm9iLT5yeF9wYWdlX2luZm8pOwotCQlrZnJlZShwbm9iLT5yeF9jdHh0KTsKLQl9Ci0KLQliZV90eF9xX2NsZWFuKHBub2IpOwotCWtmcmVlKHBub2ItPnR4X2N0eHQpOwotCi0JaWYgKHBub2ItPm1jY19xKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPm1jY19xX3NpemUsCi0JCQlwbm9iLT5tY2NfcSwgcG5vYi0+bWNjX3FfYnVzKTsKLQotCWlmIChwbm9iLT5tY2Nfd3JiX2N0eHQpCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcG5vYi0+bWNjX3dyYl9jdHh0LAotCQkJICAgZ2V0X29yZGVyKHBub2ItPm1jY193cmJfY3R4dF9zaXplKSk7Ci0KLQlpZiAocG5vYi0+bWNjX2NxKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPm1jY19jcV9zaXplLAotCQkJcG5vYi0+bWNjX2NxLCBwbm9iLT5tY2NfY3FfYnVzKTsKLQotCWlmIChwbm9iLT5ldmVudF9xKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPmV2ZW50X3Ffc2l6ZSwKLQkJCXBub2ItPmV2ZW50X3EsIHBub2ItPmV2ZW50X3FfYnVzKTsKLQotCWlmIChwbm9iLT50eF9jcSkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT50eF9jcV9zaXplLAotCQkJcG5vYi0+dHhfY3EsIHBub2ItPnR4X2NxX2J1cyk7Ci0KLQlpZiAocG5vYi0+dHhfcSkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT50eF9xX3NpemUsCi0JCQlwbm9iLT50eF9xLCBwbm9iLT50eF9xX2J1cyk7Ci0KLQlpZiAocG5vYi0+cnhfcSkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT5yeF9xX3NpemUsCi0JCQlwbm9iLT5yeF9xLCBwbm9iLT5yeF9xX2J1cyk7Ci0KLQlpZiAocG5vYi0+cnhfY3EpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+cnhfY3Ffc2l6ZSwKLQkJCXBub2ItPnJ4X2NxLCBwbm9iLT5yeF9jcV9idXMpOwotCi0KLQlpZiAocG5vYi0+bWJfcHRyKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPm1iX3NpemUsIHBub2ItPm1iX3B0ciwKLQkJCXBub2ItPm1iX2J1cyk7Ci0KLQlmcmVlX25ldGRldihuZXRkZXYpOwotfQotCi0KLXN0YXRpYyBpbnQgYmVfbm9iX3JpbmdfYWxsb2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JdTMyIHNpemU7Ci0KLQkvKiBNYWlsIGJveCByZDsgbWFpbGJveCBwb2ludGVyIG5lZWRzIHRvIGJlIDE2IGJ5dGUgYWxpZ25lZCAqLwotCXBub2ItPm1iX3NpemUgPSBzaXplb2Yoc3RydWN0IE1DQ19NQUlMQk9YX0FNQVApICsgMTY7Ci0JcG5vYi0+bWJfcHRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+bWJfc2l6ZSwKLQkJCQkmcG5vYi0+bWJfYnVzKTsKLQlpZiAoIXBub2ItPm1iX2J1cykKLQkJcmV0dXJuIC0xOwotCW1lbXNldChwbm9iLT5tYl9wdHIsIDAsIHBub2ItPm1iX3NpemUpOwotCXBub2ItPm1iX3JkLnZhID0gUFRSX0FMSUdOKHBub2ItPm1iX3B0ciwgMTYpOwotCXBub2ItPm1iX3JkLnBhID0gUFRSX0FMSUdOKHBub2ItPm1iX2J1cywgMTYpOwotCXBub2ItPm1iX3JkLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgTUNDX01BSUxCT1hfQU1BUCk7Ci0JLyoKLQkgKiBFdmVudCBxdWV1ZQotCSAqLwotCXBub2ItPmV2ZW50X3FfbGVuID0gRVZFTlRfUV9MRU47Ci0JcG5vYi0+ZXZlbnRfcV9zaXplID0gcG5vYi0+ZXZlbnRfcV9sZW4gKiBzaXplb2Yoc3RydWN0IEVRX0VOVFJZX0FNQVApOwotCXBub2ItPmV2ZW50X3EgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT5ldmVudF9xX3NpemUsCi0JCQkJJnBub2ItPmV2ZW50X3FfYnVzKTsKLQlpZiAoIXBub2ItPmV2ZW50X3FfYnVzKQotCQlyZXR1cm4gLTE7Ci0JbWVtc2V0KHBub2ItPmV2ZW50X3EsIDAsIHBub2ItPmV2ZW50X3Ffc2l6ZSk7Ci0JLyoKLQkgKiBFdGggVFggcXVldWUKLQkgKi8KLQlwbm9iLT50eF9xX2xlbiA9IEVUSF9UWFFfTEVOOwotCXBub2ItPnR4X3FfcG9ydCA9IDA7Ci0JcG5vYi0+dHhfcV9zaXplID0gIHBub2ItPnR4X3FfbGVuICogc2l6ZW9mKHN0cnVjdCBFVEhfV1JCX0FNQVApOwotCXBub2ItPnR4X3EgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT50eF9xX3NpemUsCi0JCQkJJnBub2ItPnR4X3FfYnVzKTsKLQlpZiAoIXBub2ItPnR4X3FfYnVzKQotCQlyZXR1cm4gLTE7Ci0JbWVtc2V0KHBub2ItPnR4X3EsIDAsIHBub2ItPnR4X3Ffc2l6ZSk7Ci0JLyoKLQkgKiBFdGggVFggQ29tcGwgcXVldWUKLQkgKi8KLQlwbm9iLT50eGNxX2xlbiA9IEVUSF9UWENRX0xFTjsKLQlwbm9iLT50eF9jcV9zaXplID0gcG5vYi0+dHhjcV9sZW4gKiBzaXplb2Yoc3RydWN0IEVUSF9UWF9DT01QTF9BTUFQKTsKLQlwbm9iLT50eF9jcSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPnR4X2NxX3NpemUsCi0JCQkJJnBub2ItPnR4X2NxX2J1cyk7Ci0JaWYgKCFwbm9iLT50eF9jcV9idXMpCi0JCXJldHVybiAtMTsKLQltZW1zZXQocG5vYi0+dHhfY3EsIDAsIHBub2ItPnR4X2NxX3NpemUpOwotCS8qCi0JICogRXRoIFJYIHF1ZXVlCi0JICovCi0JcG5vYi0+cnhfcV9sZW4gPSBFVEhfUlhRX0xFTjsKLQlwbm9iLT5yeF9xX3NpemUgPSAgcG5vYi0+cnhfcV9sZW4gKiBzaXplb2Yoc3RydWN0IEVUSF9SWF9EX0FNQVApOwotCXBub2ItPnJ4X3EgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT5yeF9xX3NpemUsCi0JCQkJJnBub2ItPnJ4X3FfYnVzKTsKLQlpZiAoIXBub2ItPnJ4X3FfYnVzKQotCQlyZXR1cm4gLTE7Ci0JbWVtc2V0KHBub2ItPnJ4X3EsIDAsIHBub2ItPnJ4X3Ffc2l6ZSk7Ci0JLyoKLQkgKiBFdGggVW5pY2FzdCBSWCBDb21wbCBxdWV1ZQotCSAqLwotCXBub2ItPnJ4X2NxX2xlbiA9IEVUSF9VQ19SWENRX0xFTjsKLQlwbm9iLT5yeF9jcV9zaXplID0gIHBub2ItPnJ4X2NxX2xlbiAqCi0JCQlzaXplb2Yoc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQKTsKLQlwbm9iLT5yeF9jcSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPnJ4X2NxX3NpemUsCi0JCQkJJnBub2ItPnJ4X2NxX2J1cyk7Ci0JaWYgKCFwbm9iLT5yeF9jcV9idXMpCi0JCXJldHVybiAtMTsKLQltZW1zZXQocG5vYi0+cnhfY3EsIDAsIHBub2ItPnJ4X2NxX3NpemUpOwotCi0JLyogVFggcmVzb3VyY2VzICovCi0Jc2l6ZSA9IHBub2ItPnR4X3FfbGVuICogc2l6ZW9mKHZvaWQgKiopOwotCXBub2ItPnR4X2N0eHQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChwbm9iLT50eF9jdHh0ID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCS8qIFJYIHJlc291cmNlcyAqLwotCXNpemUgPSBwbm9iLT5yeF9xX2xlbiAqIHNpemVvZih2b2lkICopOwotCXBub2ItPnJ4X2N0eHQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChwbm9iLT5yeF9jdHh0ID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCXNpemUgPSAocG5vYi0+cnhfcV9sZW4gKiBzaXplb2Yoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbykpOwotCXBub2ItPnJ4X3BhZ2VfaW5mbyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBub2ItPnJ4X3BhZ2VfaW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlhZGFwdGVyLT5ldGhfc3RhdHNwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IEZXQ01EX0VUSF9HRVRfU1RBVElTVElDUyksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKGFkYXB0ZXItPmV0aF9zdGF0c3AgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCXBub2ItPnJ4X2J1Zl9zaXplID0gcnhidWZfc2l6ZTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBiZV9uZXRfb2JqZWN0IGZvciBzdWJzZXF1ZW50Ci0gICAgbmV0d29yayBvcGVyYXRpb25zLgotCi0gICAgQmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGRyaXZlciAgbXVzdCBoYXZlIGFsbG9jYXRlZAotICAgIHNwYWNlIGZvciB0aGUgTmV0T2JqZWN0IHN0cnVjdHVyZSwgaW5pdGlhbGl6ZWQgdGhlIHN0cnVjdHVyZSwKLSAgICBhbGxvY2F0ZWQgRE1BYWJsZSBtZW1vcnkgZm9yIGFsbCB0aGUgbmV0d29yayBxdWV1ZXMgdGhhdCBmb3JtCi0gICAgcGFydCBvZiB0aGUgTmV0T2JqZWN0IGFuZCBwb3B1bGF0ZWQgdGhlIHN0YXJ0IGFkZHJlc3MgKHZpcnR1YWwpCi0gICAgYW5kIG51bWJlciBvZiBlbnRyaWVzIGFsbG9jYXRlZCBmb3IgZWFjaCBxdWV1ZSBpbiB0aGUgTmV0T2JqZWN0IHN0cnVjdHVyZS4KLQotICAgIFRoZSBkcml2ZXIgbXVzdCBhbHNvIGhhdmUgYWxsb2NhdGVkIG1lbW9yeSB0byBob2xkIHRoZQotICAgIG1haWxib3ggc3RydWN0dXJlIChNQ0NfTUFJTEJPWCkgYW5kIHBvc3QgdGhlIHBoeXNpY2FsIGFkZHJlc3MsCi0gICAgdmlydHVhbCBhZGRyZXNzZXMgYW5kIHRoZSBzaXplIG9mIHRoZSBtYWlsYm94IG1lbW9yeSBpbiB0aGUKLSAgICBOZXRPYmoubWJfcmQuICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IEJFQ0xJQiBmb3IKLSAgICBpbml0aWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZW1iZWRkZWQgTUNDIHByb2Nlc3Nvci4gQkVDTElCCi0gICAgdXNlcyB0aGUgbWFpbGJveCB1bnRpbCBNQ0MgcmluZ3MgYXJlIGNyZWF0ZWQgZm9yICBtb3JlICBlZmZpY2llbnQKLSAgICBjb21tdW5pY2F0aW9uIHdpdGggdGhlIE1DQyBwcm9jZXNzb3IuCi0KLSAgICBJZiB0aGUgZHJpdmVyIHdhbnRzIHRvIGNyZWF0ZSBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZSBmb3IgbW9yZQotICAgIHRoYW4gb25lIHByb3RlY3Rpb24gZG9tYWluLCBpdCBjYW4gY2FsbCBiZV9jcmVhdGVfbmV0b2JqKCkKLSAgICBtdWx0aXBsZSB0aW1lcyAgb25jZSBmb3IgZWFjaCBwcm90ZWN0aW9uIGRvbWFpbi4gIEEgTWF4aW11bSBvZgotICAgIDMyIHByb3RlY3Rpb24gZG9tYWlucyBhcmUgc3VwcG9ydGVkLgotCi0qLwotc3RhdGljIGludAotYmVfY3JlYXRlX25ldG9iaihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgdTggX19pb21lbSAqY3NyX3ZhLAotCXU4IF9faW9tZW0gKmRiX3ZhLCB1OCBfX2lvbWVtICpwY2lfdmEpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0JYm9vbCAgZXZlbnRhYmxlID0gZmFsc2UsIHR4X25vX2RlbGF5ID0gZmFsc2UsIHJ4X25vX2RlbGF5ID0gZmFsc2U7Ci0Jc3RydWN0IGJlX2VxX29iamVjdCAqZXFfb2JqZWN0cCA9IE5VTEw7Ci0Jc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiA9ICZwbm9iLT5mbl9vYmo7Ci0Jc3RydWN0IHJpbmdfZGVzYyByZDsKLQl1MzIgc2V0X3J4YnVmX3NpemU7Ci0JdTMyIHR4X2NtcGxfd20gPSBDRVZfV01BUktfOTY7CS8qIDB4ZmZmZmZmZmYgdG8gZGlzYWJsZSAqLwotCXUzMiByeF9jbXBsX3dtID0gQ0VWX1dNQVJLXzE2MDsJLyogMHhmZmZmZmZmZiB0byBkaXNhYmxlICovCi0JdTMyIGVxX2RlbGF5ID0gMDsgLyogZGVsYXkgaW4gOHVzZWMgdW5pdHMuIDB4ZmZmZmZmZmYgdG8gZGlzYWJsZSAqLwotCi0JbWVtc2V0KCZyZCwgMCwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpKTsKLQotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX29iamVjdF9jcmVhdGUoY3NyX3ZhLCBkYl92YSwgcGNpX3ZhLAotCQkJQkVfRlVOQ1RJT05fVFlQRV9ORVRXT1JLLCAmcG5vYi0+bWJfcmQsIHBmb2IpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykKLQkJcmV0dXJuIHN0YXR1czsKLQlwbm9iLT5mbl9vYmpfY3JlYXRlZCA9IHRydWU7Ci0KLQlpZiAodHhfY21wbF93bSA9PSAweGZmZmZmZmZmKQotCQl0eF9ub19kZWxheSA9IHRydWU7Ci0JaWYgKHJ4X2NtcGxfd20gPT0gMHhmZmZmZmZmZikKLQkJcnhfbm9fZGVsYXkgPSB0cnVlOwotCS8qCi0JICogbm93IGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IHJpbmdzCi0JICogRXZlbnQgUXVldWUgZmlyc3QuCi0JICovCi0JaWYgKHBub2ItPmV2ZW50X3FfbGVuKSB7Ci0JCXJkLnZhID0gcG5vYi0+ZXZlbnRfcTsKLQkJcmQucGEgPSBwbm9iLT5ldmVudF9xX2J1czsKLQkJcmQubGVuZ3RoID0gcG5vYi0+ZXZlbnRfcV9zaXplOwotCi0JCXN0YXR1cyA9IGJlX2VxX2NyZWF0ZShwZm9iLCAmcmQsIDQsIHBub2ItPmV2ZW50X3FfbGVuLAotCQkJCSh1MzIpIC0xLAkvKiBDRVZfV01BUktfKiBvciAtMSAqLwotCQkJCWVxX2RlbGF5LAkvKiBpbiA4dXMgdW5pdHMsIG9yIC0xICovCi0JCQkJJnBub2ItPmV2ZW50X3Ffb2JqKTsKLQkJaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQkJZ290byBlcnJvcl9yZXQ7Ci0JCXBub2ItPmV2ZW50X3FfaWQgPSBwbm9iLT5ldmVudF9xX29iai5lcV9pZDsKLQkJcG5vYi0+ZXZlbnRfcV9jcmVhdGVkID0gMTsKLQkJZXZlbnRhYmxlID0gdHJ1ZTsKLQkJZXFfb2JqZWN0cCA9ICZwbm9iLT5ldmVudF9xX29iajsKLQl9Ci0JLyoKLQkgKiBOb3cgRXRoIFR4IENvbXBsLiBxdWV1ZS4KLQkgKi8KLQlpZiAocG5vYi0+dHhjcV9sZW4pIHsKLQkJcmQudmEgPSBwbm9iLT50eF9jcTsKLQkJcmQucGEgPSBwbm9iLT50eF9jcV9idXM7Ci0JCXJkLmxlbmd0aCA9IHBub2ItPnR4X2NxX3NpemU7Ci0KLQkJc3RhdHVzID0gYmVfY3FfY3JlYXRlKHBmb2IsICZyZCwKLQkJCXBub2ItPnR4Y3FfbGVuICogc2l6ZW9mKHN0cnVjdCBFVEhfVFhfQ09NUExfQU1BUCksCi0JCQlmYWxzZSwJLyogc29saWN0ZWQgZXZlbnRzLCAgKi8KLQkJCXR4X25vX2RlbGF5LAkvKiBub2RlbGF5ICAqLwotCQkJdHhfY21wbF93bSwJLyogV2F0ZXJtYXJrIGVuY29kaW5ncyAqLwotCQkJZXFfb2JqZWN0cCwgJnBub2ItPnR4X2NxX29iaik7Ci0JCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykKLQkJCWdvdG8gZXJyb3JfcmV0OwotCi0JCXBub2ItPnR4X2NxX2lkID0gcG5vYi0+dHhfY3Ffb2JqLmNxX2lkOwotCQlwbm9iLT50eF9jcV9jcmVhdGVkID0gMTsKLQl9Ci0JLyoKLQkgKiBFdGggVHggcXVldWUKLQkgKi8KLQlpZiAocG5vYi0+dHhfcV9sZW4pIHsKLQkJc3RydWN0IGJlX2V0aF9zcV9wYXJhbWV0ZXJzIGV4X3BhcmFtcyA9IHsgMCB9OwotCQl1MzIgdHlwZTsKLQotCQlpZiAocG5vYi0+dHhfcV9wb3J0KSB7Ci0JCQkvKiBUWFEgdG8gYmUgYm91bmQgdG8gYSBzcGVjaWZpYyBwb3J0ICovCi0JCQl0eXBlID0gQkVfRVRIX1RYX1JJTkdfVFlQRV9CT1VORDsKLQkJCWV4X3BhcmFtcy5wb3J0ID0gcG5vYi0+dHhfcV9wb3J0IC0gMTsKLQkJfSBlbHNlCi0JCQl0eXBlID0gQkVfRVRIX1RYX1JJTkdfVFlQRV9TVEFOREFSRDsKLQotCQlyZC52YSA9IHBub2ItPnR4X3E7Ci0JCXJkLnBhID0gcG5vYi0+dHhfcV9idXM7Ci0JCXJkLmxlbmd0aCA9IHBub2ItPnR4X3Ffc2l6ZTsKLQotCQlzdGF0dXMgPSBiZV9ldGhfc3FfY3JlYXRlX2V4KHBmb2IsICZyZCwKLQkJCQlwbm9iLT50eF9xX2xlbiAqIHNpemVvZihzdHJ1Y3QgRVRIX1dSQl9BTUFQKSwKLQkJCQl0eXBlLCAyLCAmcG5vYi0+dHhfY3Ffb2JqLAotCQkJCSZleF9wYXJhbXMsICZwbm9iLT50eF9xX29iaik7Ci0KLQkJaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQkJZ290byBlcnJvcl9yZXQ7Ci0KLQkJcG5vYi0+dHhfcV9pZCA9IHBub2ItPnR4X3Ffb2JqLmJpZDsKLQkJcG5vYi0+dHhfcV9jcmVhdGVkID0gMTsKLQl9Ci0JLyoKLQkgKiBOb3cgRXRoIFJ4IGNvbXBsLiBxdWV1ZS4gIEFsd2F5cyBuZWVkZWQuCi0JICovCi0JcmQudmEgPSBwbm9iLT5yeF9jcTsKLQlyZC5wYSA9IHBub2ItPnJ4X2NxX2J1czsKLQlyZC5sZW5ndGggPSBwbm9iLT5yeF9jcV9zaXplOwotCi0Jc3RhdHVzID0gYmVfY3FfY3JlYXRlKHBmb2IsICZyZCwKLQkJCXBub2ItPnJ4X2NxX2xlbiAqIHNpemVvZihzdHJ1Y3QgRVRIX1JYX0NPTVBMX0FNQVApLAotCQkJZmFsc2UsCS8qIHNvbGljdGVkIGV2ZW50cywgICovCi0JCQlyeF9ub19kZWxheSwJLyogbm9kZWxheSAgKi8KLQkJCXJ4X2NtcGxfd20sCS8qIFdhdGVybWFyayBlbmNvZGluZ3MgKi8KLQkJCWVxX29iamVjdHAsICZwbm9iLT5yeF9jcV9vYmopOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykKLQkJZ290byBlcnJvcl9yZXQ7Ci0KLQlwbm9iLT5yeF9jcV9pZCA9IHBub2ItPnJ4X2NxX29iai5jcV9pZDsKLQlwbm9iLT5yeF9jcV9jcmVhdGVkID0gMTsKLQotCXN0YXR1cyA9IGJlX2V0aF9ycV9zZXRfZnJhZ19zaXplKHBmb2IsIHBub2ItPnJ4X2J1Zl9zaXplLAotCQkJKHUzMiAqKSAmc2V0X3J4YnVmX3NpemUpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQliZV9ldGhfcnFfZ2V0X2ZyYWdfc2l6ZShwZm9iLCAodTMyICopICZwbm9iLT5yeF9idWZfc2l6ZSk7Ci0JCWlmICgocG5vYi0+cnhfYnVmX3NpemUgIT0gMjA0OCkgJiYgKHBub2ItPnJ4X2J1Zl9zaXplICE9IDQwOTYpCi0JCSAgICAmJiAocG5vYi0+cnhfYnVmX3NpemUgIT0gODE5MikpCi0JCQlnb3RvIGVycm9yX3JldDsKLQl9IGVsc2UgewotCQlpZiAocG5vYi0+cnhfYnVmX3NpemUgIT0gc2V0X3J4YnVmX3NpemUpCi0JCQlwbm9iLT5yeF9idWZfc2l6ZSA9IHNldF9yeGJ1Zl9zaXplOwotCX0KLQkvKgotCSAqIEV0aCBSWCBxdWV1ZS4gYmVfZXRoX3JxX2NyZWF0ZSgpIGFsd2F5cyBhc3N1bWVzIDIgcGFnZXMgc2l6ZQotCSAqLwotCXJkLnZhID0gcG5vYi0+cnhfcTsKLQlyZC5wYSA9IHBub2ItPnJ4X3FfYnVzOwotCXJkLmxlbmd0aCA9IHBub2ItPnJ4X3Ffc2l6ZTsKLQotCXN0YXR1cyA9IGJlX2V0aF9ycV9jcmVhdGUocGZvYiwgJnJkLCAmcG5vYi0+cnhfY3Ffb2JqLAotCQkJICAgICAmcG5vYi0+cnhfY3Ffb2JqLCAmcG5vYi0+cnhfcV9vYmopOwotCi0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQlnb3RvIGVycm9yX3JldDsKLQotCXBub2ItPnJ4X3FfaWQgPSBwbm9iLT5yeF9xX29iai5yaWQ7Ci0JcG5vYi0+cnhfcV9jcmVhdGVkID0gMTsKLQotCXJldHVybiBCRV9TVUNDRVNTOwkvKiBBbGwgcmVxdWlyZWQgcXVldWVzIGNyZWF0ZWQuICovCi0KLWVycm9yX3JldDoKLQliZV9kZXN0cm95X25ldG9iaihwbm9iKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGJlX25vYl9yaW5nX2luaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JaW50IHN0YXR1czsKLQotCXBub2ItPmV2ZW50X3FfdGwgPSAwOwotCi0JcG5vYi0+dHhfcV9oZCA9IDA7Ci0JcG5vYi0+dHhfcV90bCA9IDA7Ci0KLQlwbm9iLT50eF9jcV90bCA9IDA7Ci0KLQlwbm9iLT5yeF9jcV90bCA9IDA7Ci0KLQltZW1zZXQocG5vYi0+ZXZlbnRfcSwgMCwgcG5vYi0+ZXZlbnRfcV9zaXplKTsKLQltZW1zZXQocG5vYi0+dHhfY3EsIDAsIHBub2ItPnR4X2NxX3NpemUpOwotCW1lbXNldChwbm9iLT50eF9jdHh0LCAwLCBwbm9iLT50eF9xX2xlbiAqIHNpemVvZih2b2lkICoqKSk7Ci0JbWVtc2V0KHBub2ItPnJ4X2N0eHQsIDAsIHBub2ItPnJ4X3FfbGVuICogc2l6ZW9mKHZvaWQgKikpOwotCXBub2ItPnJ4X3BnX2luZm9faGQgPSAwOwotCXBub2ItPnJ4X3FfaGQgPSAwOwotCWF0b21pY19zZXQoJnBub2ItPnJ4X3FfcG9zdGVkLCAwKTsKLQotCXN0YXR1cyA9IGJlX2NyZWF0ZV9uZXRvYmoocG5vYiwgYWRhcHRlci0+Y3NyX3ZhLCBhZGFwdGVyLT5kYl92YSwKLQkJCQlhZGFwdGVyLT5wY2lfdmEpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykKLQkJcmV0dXJuIC0xOwotCi0JYmVfcG9zdF9ldGhfcnhfYnVmZnMocG5vYik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhc3luYyBjYWxsYmFjayBmb3IgbGluayBzdGF0dXMgKi8KLXN0YXRpYyB2b2lkCi1iZV9saW5rX3N0YXR1c19hc3luY19jYWxsYmFjayh2b2lkICpjb250ZXh0LCB1MzIgZXZlbnRfY29kZSwgdm9pZCAqZXZlbnQpCi17Ci0Jc3RydWN0IEFTWU5DX0VWRU5UX0xJTktfU1RBVEVfQU1BUCAqbGlua19zdGF0dXMgPSBldmVudDsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRleHQ7Ci0JYm9vbCBsaW5rX2VuYWJsZSA9IGZhbHNlOwotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iOwotCXN0cnVjdCBBU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVAgKmFzeW5jX3RyYWlsZXI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQl1MzIgYXN5bmNfZXZlbnRfY29kZSwgYXN5bmNfZXZlbnRfdHlwZSwgYWN0aXZlX3BvcnQ7Ci0JdTMyIHBvcnQwX2xpbmtfc3RhdHVzLCBwb3J0MV9saW5rX3N0YXR1cywgcG9ydDBfZHVwbGV4LCBwb3J0MV9kdXBsZXg7Ci0JdTMyIHBvcnQwX3NwZWVkLCBwb3J0MV9zcGVlZDsKLQotCWlmIChldmVudF9jb2RlICE9IEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURSkgewotCQkvKiBOb3Qgb3VyIGV2ZW50IHRvIGhhbmRsZSAqLwotCQlyZXR1cm47Ci0JfQotCWFzeW5jX3RyYWlsZXIgPSAoc3RydWN0IEFTWU5DX0VWRU5UX1RSQUlMRVJfQU1BUCAqKQotCSAgICAoKHU4ICopIGV2ZW50ICsgc2l6ZW9mKHN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCkgLQotCSAgICAgc2l6ZW9mKHN0cnVjdCBBU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVApKTsKLQotCWFzeW5jX2V2ZW50X2NvZGUgPSBBTUFQX0dFVF9CSVRTX1BUUihBU1lOQ19FVkVOVF9UUkFJTEVSLCBldmVudF9jb2RlLAotCQkJCQkgICAgIGFzeW5jX3RyYWlsZXIpOwotCUJVR19PTihhc3luY19ldmVudF9jb2RlICE9IEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURSk7Ci0KLQlwbm9iID0gYWRhcHRlci0+bmV0X29iajsKLQluZXRkZXYgPSBwbm9iLT5uZXRkZXY7Ci0KLQkvKiBEZXRlcm1pbmUgaWYgdGhpcyBldmVudCBpcyBhIHN3aXRjaCBWTEQgb3IgYSBwaHlzaWNhbCBsaW5rIGV2ZW50ICovCi0JYXN5bmNfZXZlbnRfdHlwZSA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX1RSQUlMRVIsIGV2ZW50X3R5cGUsCi0JCQkJCSAgICAgYXN5bmNfdHJhaWxlcik7Ci0JYWN0aXZlX3BvcnQgPSBBTUFQX0dFVF9CSVRTX1BUUihBU1lOQ19FVkVOVF9MSU5LX1NUQVRFLAotCQkJCQlhY3RpdmVfcG9ydCwgbGlua19zdGF0dXMpOwotCXBvcnQwX2xpbmtfc3RhdHVzID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfTElOS19TVEFURSwKLQkJCQkJICAgICAgcG9ydDBfbGlua19zdGF0dXMsIGxpbmtfc3RhdHVzKTsKLQlwb3J0MV9saW5rX3N0YXR1cyA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX0xJTktfU1RBVEUsCi0JCQkJCSAgICAgIHBvcnQxX2xpbmtfc3RhdHVzLCBsaW5rX3N0YXR1cyk7Ci0JcG9ydDBfZHVwbGV4ID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfTElOS19TVEFURSwKLQkJCQkJIHBvcnQwX2R1cGxleCwgbGlua19zdGF0dXMpOwotCXBvcnQxX2R1cGxleCA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX0xJTktfU1RBVEUsCi0JCQkJCSBwb3J0MV9kdXBsZXgsIGxpbmtfc3RhdHVzKTsKLQlwb3J0MF9zcGVlZCA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX0xJTktfU1RBVEUsCi0JCQkJCXBvcnQwX3NwZWVkLCBsaW5rX3N0YXR1cyk7Ci0JcG9ydDFfc3BlZWQgPSBBTUFQX0dFVF9CSVRTX1BUUihBU1lOQ19FVkVOVF9MSU5LX1NUQVRFLAotCQkJCQlwb3J0MV9zcGVlZCwgbGlua19zdGF0dXMpOwotCWlmIChhc3luY19ldmVudF90eXBlID09IE5UV0tfTElOS19UWVBFX1ZJUlRVQUwpIHsKLQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfbGlua19jaGFuZ2VfdmlydHVhbCsrOwotCQlpZiAoYWRhcHRlci0+YmVfbGlua19zdHMtPmFjdGl2ZV9wb3J0ICE9IGFjdGl2ZV9wb3J0KSB7Ci0JCQlkZXZfbm90aWNlKCZuZXRkZXYtPmRldiwKLQkJCSAgICAgICAiQWN0aXZlIHBvcnQgY2hhbmdlZCBkdWUgdG8gVkxEIG9uIHN3aXRjaFxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfbm90aWNlKCZuZXRkZXYtPmRldiwgIkxpbmsgc3RhdHVzIHVwZGF0ZVxuIik7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX2xpbmtfY2hhbmdlX3BoeXNpY2FsKys7Ci0JCWlmIChhZGFwdGVyLT5iZV9saW5rX3N0cy0+YWN0aXZlX3BvcnQgIT0gYWN0aXZlX3BvcnQpIHsKLQkJCWRldl9ub3RpY2UoJm5ldGRldi0+ZGV2LAotCQkJICAgICAgICJBY3RpdmUgcG9ydCBjaGFuZ2VkIGR1ZSB0byBwb3J0IGxpbmsiCi0JCQkgICAgICAgIiBzdGF0dXMgY2hhbmdlXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9ub3RpY2UoJm5ldGRldi0+ZGV2LCAiTGluayBzdGF0dXMgdXBkYXRlXG4iKTsKLQkJfQotCX0KLQotCW1lbXNldChhZGFwdGVyLT5iZV9saW5rX3N0cywgMCwgc2l6ZW9mKGFkYXB0ZXItPmJlX2xpbmtfc3RzKSk7Ci0KLQlpZiAoKHBvcnQwX2xpbmtfc3RhdHVzID09IEFTWU5DX0VWRU5UX0xJTktfVVApIHx8Ci0JICAgIChwb3J0MV9saW5rX3N0YXR1cyA9PSBBU1lOQ19FVkVOVF9MSU5LX1VQKSkgewotCQlpZiAoKGFkYXB0ZXItPnBvcnQwX2xpbmtfc3RzID09IEJFX1BPUlRfTElOS19ET1dOKSAmJgotCQkgICAgKGFkYXB0ZXItPnBvcnQxX2xpbmtfc3RzID09IEJFX1BPUlRfTElOS19ET1dOKSkgewotCQkJLyogRWFybGllciBib3RoIHRoZSBwb3J0cyBhcmUgZG93biBTbyBsaW5rIGlzIHVwICovCi0JCQlsaW5rX2VuYWJsZSA9IHRydWU7Ci0JCX0KLQotCQlpZiAocG9ydDBfbGlua19zdGF0dXMgPT0gQVNZTkNfRVZFTlRfTElOS19VUCkgewotCQkJYWRhcHRlci0+cG9ydDBfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfVVA7Ci0JCQlhZGFwdGVyLT5iZV9saW5rX3N0cy0+bWFjMF9kdXBsZXggPSBwb3J0MF9kdXBsZXg7Ci0JCQlhZGFwdGVyLT5iZV9saW5rX3N0cy0+bWFjMF9zcGVlZCA9IHBvcnQwX3NwZWVkOwotCQkJaWYgKGFjdGl2ZV9wb3J0ID09IE5UV0tfUE9SVF9BKQotCQkJCWFkYXB0ZXItPmJlX2xpbmtfc3RzLT5hY3RpdmVfcG9ydCA9IDA7Ci0JCX0gZWxzZQotCQkJYWRhcHRlci0+cG9ydDBfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfRE9XTjsKLQotCQlpZiAocG9ydDFfbGlua19zdGF0dXMgPT0gQVNZTkNfRVZFTlRfTElOS19VUCkgewotCQkJYWRhcHRlci0+cG9ydDFfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfVVA7Ci0JCQlhZGFwdGVyLT5iZV9saW5rX3N0cy0+bWFjMV9kdXBsZXggPSBwb3J0MV9kdXBsZXg7Ci0JCQlhZGFwdGVyLT5iZV9saW5rX3N0cy0+bWFjMV9zcGVlZCA9IHBvcnQxX3NwZWVkOwotCQkJaWYgKGFjdGl2ZV9wb3J0ID09IE5UV0tfUE9SVF9CKQotCQkJCWFkYXB0ZXItPmJlX2xpbmtfc3RzLT5hY3RpdmVfcG9ydCA9IDE7Ci0JCX0gZWxzZQotCQkJYWRhcHRlci0+cG9ydDFfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfRE9XTjsKLQotCQlwcmludGsoS0VSTl9JTkZPICJMaW5rIFByb3BlcnRpZXMgZm9yICVzOlxuIiwgbmV0ZGV2LT5uYW1lKTsKLQkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiTGluayBQcm9wZXJ0aWVzOlxuIik7Ci0JCWJlX3ByaW50X2xpbmtfaW5mbyhhZGFwdGVyLT5iZV9saW5rX3N0cyk7Ci0KLQkJaWYgKCFsaW5rX2VuYWJsZSkKLQkJCXJldHVybjsKLQkJLyoKLQkJICogQm90aCBwb3J0cyB3ZXJlIGRvd24gcHJldmlvdXNseSwgYnV0IGF0bGVhc3Qgb25lIG9mCi0JCSAqIHRoZW0gaGFzIGNvbWUgdXAgaWYgdGhpcyBuZXRkZXZpY2UncyBjYXJyaWVyIGlzIG5vdCB1cCwKLQkJICogdGhlbiBpbmRpY2F0ZSB0byBzdGFjawotCQkgKi8KLQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7Ci0JCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCS8qIE5vdyBib3RoIHRoZSBwb3J0cyBhcmUgZG93bi4gVGVsbCB0aGUgc3RhY2sgYWJvdXQgaXQgKi8KLQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJCb3RoIHBvcnRzIGFyZSBkb3duXG4iKTsKLQlhZGFwdGVyLT5wb3J0MF9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19ET1dOOwotCWFkYXB0ZXItPnBvcnQxX2xpbmtfc3RzID0gQkVfUE9SVF9MSU5LX0RPV047Ci0JaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBiZV9tY2NfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iOwotCi0JcG5vYiA9IGFkYXB0ZXItPm5ldF9vYmo7Ci0JLyoKLQkgKiBDcmVhdGUgdGhlIE1DQyByaW5nIHNvIHRoYXQgYWxsIGZ1cnRoZXIgY29tbXVuaWNhdGlvbiB3aXRoCi0JICogTUNDIGNhbiBnbyB0aHJ1IHRoZSByaW5nLiB3ZSBkbyB0aGlzIGF0IHRoZSBlbmQgc2luY2UKLQkgKiB3ZSBkbyBub3Qgd2FudCB0byBiZSBkZWFsaW5nIHdpdGggaW50ZXJydXB0cyB1bnRpbCB0aGUKLQkgKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4KLQkgKi8KLQlwbm9iLT5tY2NfcV9sZW4gPSBNQ0NfUV9MRU47Ci0JcG5vYi0+bWNjX3Ffc2l6ZSA9IHBub2ItPm1jY19xX2xlbiAqIHNpemVvZihzdHJ1Y3QgTUNDX1dSQl9BTUFQKTsKLQlwbm9iLT5tY2NfcSA9ICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT5tY2NfcV9zaXplLAotCQkJCSZwbm9iLT5tY2NfcV9idXMpOwotCWlmICghcG5vYi0+bWNjX3FfYnVzKQotCQlyZXR1cm4gLTE7Ci0JLyoKLQkgKiBzcGFjZSBmb3IgTUNDIFdSQiBjb250ZXh0Ci0JICovCi0JcG5vYi0+bWNjX3dyYl9jdHh0TGVuID0gTUNDX1FfTEVOOwotCXBub2ItPm1jY193cmJfY3R4dF9zaXplID0gIHBub2ItPm1jY193cmJfY3R4dExlbiAqCi0JCXNpemVvZihzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0KTsKLQlwbm9iLT5tY2Nfd3JiX2N0eHQgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKLQkJZ2V0X29yZGVyKHBub2ItPm1jY193cmJfY3R4dF9zaXplKSk7Ci0JaWYgKHBub2ItPm1jY193cmJfY3R4dCA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0JLyoKLQkgKiBTcGFjZSBmb3IgTUNDIGNvbXBsLiByaW5nCi0JICovCi0JcG5vYi0+bWNjX2NxX2xlbiA9IE1DQ19DUV9MRU47Ci0JcG5vYi0+bWNjX2NxX3NpemUgPSBwbm9iLT5tY2NfY3FfbGVuICogc2l6ZW9mKHN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCk7Ci0JcG5vYi0+bWNjX2NxID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+bWNjX2NxX3NpemUsCi0JCQkJJnBub2ItPm1jY19jcV9idXMpOwotCWlmICghcG5vYi0+bWNjX2NxX2J1cykKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi0vKgotICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgTUNDIHJlcXVlc3QgYW5kIGNvbXBsZXRpb24gcmluZyByZXF1aXJlZAotICAgIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFSTSBwcm9jZXNzb3IuICBUaGUgY2FsbGVyIG11c3QgaGF2ZQotICAgIGFsbG9jYXRlZCByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5IGZvciB0aGUgTUNDIHJpbmcgYW5kIE1DQwotICAgIGNvbXBsZXRpb24gcmluZyBhbmQgcG9zdGVkIHRoZSB2aXJ0dWFsIGFkZHJlc3MgYW5kIG51bWJlciBvZgotICAgIGVudHJpZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbWVtYmVycyAobWNjX3EgYW5kIG1jY19jcSkgaW4gdGhlCi0gICAgTmV0T2JqZWN0IHN0cnV0dXJlLgotCi0gICAgV2hlbiB0aGlzIGNhbGwgaXMgY29tcGxldGVkLCBhbGwgZnVydGhlciBjb21tdW5pY2F0aW9uIHdpdGgKLSAgICBBUk0gd2lsbCBzd2l0Y2ggZnJvbSBtYWlsYm94IHRvIHRoaXMgcmluZy4KLQotICAgIHBub2IJLSBQb2ludGVyIHRvIHRoZSBOZXRPYmplY3Qgc3RydWN0dXJlLiBUaGlzIE5ldE9iamVjdCBzaG91bGQKLQkJICBoYXZlIGJlZW4gY3JlYXRlZCB1c2luZyBhIHByZXZpb3VzIGNhbGwgdG8gYmVfY3JlYXRlX25ldG9iaigpCi0qLwotaW50IGJlX2NyZWF0ZV9tY2NfcmluZ3Moc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHJpbmdfZGVzYyByZDsKLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iID0gJnBub2ItPmZuX29iajsKLQotCW1lbXNldCgmcmQsIDAsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSk7Ci0JaWYgKHBub2ItPm1jY19jcV9sZW4pIHsKLQkJcmQudmEgPSBwbm9iLT5tY2NfY3E7Ci0JCXJkLnBhID0gcG5vYi0+bWNjX2NxX2J1czsKLQkJcmQubGVuZ3RoID0gcG5vYi0+bWNjX2NxX3NpemU7Ci0KLQkJc3RhdHVzID0gYmVfY3FfY3JlYXRlKHBmb2IsICZyZCwKLQkJCXBub2ItPm1jY19jcV9sZW4gKiBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKSwKLQkJCWZhbHNlLAkvKiBzb2xpY3RlZCBldmVudHMsICAqLwotCQkJdHJ1ZSwJLyogbm9kZWxheSAgKi8KLQkJCTAsCS8qIDAgV2F0ZXJtYXJrIHNpbmNlIE5vZGVsYXkgaXMgdHJ1ZSAqLwotCQkJJnBub2ItPmV2ZW50X3Ffb2JqLAotCQkJJnBub2ItPm1jY19jcV9vYmopOwotCi0JCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykKLQkJCXJldHVybiBzdGF0dXM7Ci0KLQkJcG5vYi0+bWNjX2NxX2lkID0gcG5vYi0+bWNjX2NxX29iai5jcV9pZDsKLQkJcG5vYi0+bWNjX2NxX2NyZWF0ZWQgPSAxOwotCX0KLQlpZiAocG5vYi0+bWNjX3FfbGVuKSB7Ci0JCXJkLnZhID0gcG5vYi0+bWNjX3E7Ci0JCXJkLnBhID0gcG5vYi0+bWNjX3FfYnVzOwotCQlyZC5sZW5ndGggPSBwbm9iLT5tY2NfcV9zaXplOwotCi0JCXN0YXR1cyA9IGJlX21jY19yaW5nX2NyZWF0ZShwZm9iLCAmcmQsCi0JCQkJcG5vYi0+bWNjX3FfbGVuICogc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApLAotCQkJCXBub2ItPm1jY193cmJfY3R4dCwgcG5vYi0+bWNjX3dyYl9jdHh0TGVuLAotCQkJCSZwbm9iLT5tY2NfY3Ffb2JqLCAmcG5vYi0+bWNjX3Ffb2JqKTsKLQotCQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpCi0JCQlyZXR1cm4gc3RhdHVzOwotCi0JCXBub2ItPm1jY19xX2NyZWF0ZWQgPSAxOwotCX0KLQlyZXR1cm4gQkVfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBiZV9tY2NfaW5pdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgcjsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYjsKLQotCXBub2IgPSBhZGFwdGVyLT5uZXRfb2JqOwotCW1lbXNldChwbm9iLT5tY2NfcSwgMCwgcG5vYi0+bWNjX3Ffc2l6ZSk7Ci0JcG5vYi0+bWNjX3FfaGQgPSAwOwotCi0JbWVtc2V0KHBub2ItPm1jY193cmJfY3R4dCwgMCwgcG5vYi0+bWNjX3dyYl9jdHh0X3NpemUpOwotCi0JbWVtc2V0KHBub2ItPm1jY19jcSwgMCwgcG5vYi0+bWNjX2NxX3NpemUpOwotCXBub2ItPm1jY19jcV90bCA9IDA7Ci0KLQlyID0gYmVfY3JlYXRlX21jY19yaW5ncyhhZGFwdGVyLT5uZXRfb2JqKTsKLQlpZiAociAhPSBCRV9TVUNDRVNTKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyOwotCi0JYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpZiAoIWFkYXB0ZXIpCi0JCXJldHVybjsKLQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlwbm9iID0gKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICopYWRhcHRlci0+bmV0X29iajsKLQotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KLQlpZiAocG5vYikgewotCQkvKiBVbnJlZ2lzdGVyIGFzeW5jIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsaW5rIHN0YXR1cyB1cGRhdGVzICovCi0JCWlmIChwbm9iLT5tY2NfcV9jcmVhdGVkKQotCQkJYmVfbWNjX2FkZF9hc3luY19ldmVudF9jYWxsYmFjaygmcG5vYi0+bWNjX3Ffb2JqLAotCQkJCQkJCQlOVUxMLCBOVUxMKTsKLQkJbmV0b2JqZWN0X2NsZWFudXAoYWRhcHRlciwgcG5vYik7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPmNzcl92YSkKLQkJaW91bm1hcChhZGFwdGVyLT5jc3JfdmEpOwotCWlmIChhZGFwdGVyLT5kYl92YSkKLQkJaW91bm1hcChhZGFwdGVyLT5kYl92YSk7Ci0JaWYgKGFkYXB0ZXItPnBjaV92YSkKLQkJaW91bm1hcChhZGFwdGVyLT5wY2lfdmEpOwotCi0JcGNpX3JlbGVhc2VfcmVnaW9ucyhhZGFwdGVyLT5wZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UoYWRhcHRlci0+cGRldik7Ci0KLQlrZnJlZShhZGFwdGVyLT5iZV9saW5rX3N0cyk7Ci0Ja2ZyZWUoYWRhcHRlci0+ZXRoX3N0YXRzcCk7Ci0KLQlpZiAoYWRhcHRlci0+dGltZXJfY3R4dC5nZXRfc3RhdHNfdGltZXIuZnVuY3Rpb24pCi0JCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT50aW1lcl9jdHh0LmdldF9zdGF0c190aW1lcik7Ci0Ja2ZyZWUoYWRhcHRlcik7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1Yi1zeXN0ZW0gd2hlbiBpdCBmaW5kcyBhIFBDSQotICogZGV2aWNlIHdpdGggZGV2L3ZlbmRvciBJRHMgdGhhdCBtYXRjaCB3aXRoIG9uZSBvZiBvdXIgZGV2aWNlcy4KLSAqIEFsbCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgaW4gdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkZXZfaWQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTl9SRVNQT05TRV9QQVlMT0FEIGdldF9md3Y7Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2I7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQotCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXJyb3I7Ci0KLQlzdGF0dXMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGJlX2RyaXZlcl9uYW1lKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGVycm9yX3BjaV9yZXE7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlhZGFwdGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJlX2FkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoYWRhcHRlciA9PSBOVUxMKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfYWRhcHRlcjsKLQl9Ci0JYWRhcHRlci0+ZGV2X3N0YXRlID0gQkVfREVWX1NUQVRFX05PTkU7Ci0JYWRhcHRlci0+cGRldiA9IHBkZXY7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwotCi0JYWRhcHRlci0+ZW5hYmxlX2FpYyA9IDE7Ci0JYWRhcHRlci0+bWF4X2VxZCA9IE1BWF9FUUQ7Ci0JYWRhcHRlci0+bWluX2VxZCA9IDA7Ci0JYWRhcHRlci0+Y3VyX2VxZCA9IDA7Ci0KLQlzdGF0dXMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKLQlpZiAoIXN0YXR1cykgewotCQlhZGFwdGVyLT5kbWFfNjRiaXRfY2FwID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlhZGFwdGVyLT5kbWFfNjRiaXRfY2FwID0gZmFsc2U7Ci0JCXN0YXR1cyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHNldCBQQ0kgRE1BIE1hc2tcbiIpOwotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JfQotCi0Jc3RhdHVzID0gaW5pdF9wY2lfYmVfZnVuY3Rpb24oYWRhcHRlciwgcGRldik7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBQQ0kgQkFSU1xuIik7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQliZV90cmFjZV9zZXRfbGV2ZWwoRExfQUxXQVlTIHwgRExfRVJSKTsKLQotCWFkYXB0ZXItPmJlX2xpbmtfc3RzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IEJFX0xJTktfU1RBVFVTKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKGFkYXB0ZXItPmJlX2xpbmtfc3RzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBmb3IgbGluayBzdGF0dXMgIgotCQkgICAgICAgImJ1ZmZlciBmYWlsZWRcbiIpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eHFfbG9jayk7Ci0KLQluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGJlX25ldF9vYmplY3QpKTsKLQlpZiAobmV0ZGV2ID09IE5VTEwpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQlwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlhZGFwdGVyLT5uZXRfb2JqID0gcG5vYjsKLQlhZGFwdGVyLT5uZXRkZXZwID0gbmV0ZGV2OwotCXBub2ItPmFkYXB0ZXIgPSBhZGFwdGVyOwotCXBub2ItPm5ldGRldiA9IG5ldGRldjsKLQotCXN0YXR1cyA9IGJlX25vYl9yaW5nX2FsbG9jKGFkYXB0ZXIsIHBub2IpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJZ290byBjbGVhbnVwOwotCi0Jc3RhdHVzID0gYmVfbm9iX3JpbmdfaW5pdChhZGFwdGVyLCBwbm9iKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWdvdG8gY2xlYW51cDsKLQotCWJlX3J4Zl9tYWNfYWRkcmVzc19yZWFkX3dyaXRlKCZwbm9iLT5mbl9vYmosIGZhbHNlLCBmYWxzZSwgZmFsc2UsCi0JCWZhbHNlLCBmYWxzZSwgbmV0ZGV2LT5kZXZfYWRkciwgTlVMTCwgTlVMTCk7Ci0KLQluZXRkZXYtPmluaXQgPSAmYmVuZXRfaW5pdDsKLQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQotCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJihhZGFwdGVyLT5wZGV2LT5kZXYpKTsKLQotCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJnBub2ItPm5hcGksIGJlX3BvbGwsIDY0KTsKLQotCS8qIGlmIHRoZSByeF9mcmFnIHNpemUgaWYgMkssIG9uZSBwYWdlIGlzIHNoYXJlZCBhcyB0d28gUlggZnJhZ3MgKi8KLQlwbm9iLT5yeF9wZ19zaGFyZWQgPQotCQkocG5vYi0+cnhfYnVmX3NpemUgPD0gUEFHRV9TSVpFIC8gMikgPyB0cnVlIDogZmFsc2U7Ci0JaWYgKHBub2ItPnJ4X2J1Zl9zaXplICE9IHJ4YnVmX3NpemUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkNvdWxkIG5vdCBzZXQgUnggYnVmZmVyIHNpemUgdG8gJWQuIFVzaW5nICVkXG4iLAotCQkJCSAgICAgICByeGJ1Zl9zaXplLCBwbm9iLT5yeF9idWZfc2l6ZSk7Ci0JCXJ4YnVmX3NpemUgPSBwbm9iLT5yeF9idWZfc2l6ZTsKLQl9Ci0KLQl0YXNrbGV0X2luaXQoJihhZGFwdGVyLT5zdHNfaGFuZGxlciksIGJlX3Byb2Nlc3NfaW50ciwKLQkJICAgICAodW5zaWduZWQgbG9uZylhZGFwdGVyKTsKLQlhZGFwdGVyLT50YXNrbGV0X3N0YXJ0ZWQgPSAxOwotCXNwaW5fbG9ja19pbml0KCYoYWRhcHRlci0+aW50X2xvY2spKTsKLQotCXN0YXR1cyA9IGJlX3JlZ2lzdGVyX2lzcihhZGFwdGVyLCBwbm9iKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWdvdG8gY2xlYW51cDsKLQotCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwotCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gQkVfTFJPX01BWF9QS1RTOwotCi0JbWVtc2V0KCZnZXRfZnd2LCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTl9SRVNQT05TRV9QQVlMT0FEKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQmxhZGVFbmdpbmUgRHJpdmVyIHZlcnNpb246JXMuICIKLQkgICAgICAgIkNvcHlyaWdodCBTZXJ2ZXJFbmdpbmVzLCBDb3Jwb3JhdGlvbiAyMDA1IC0gMjAwOFxuIiwKLQkJCSAgICAgICBiZV9kcnZyX3Zlcik7Ci0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fZ2V0X2Z3X3ZlcnNpb24oJnBub2ItPmZuX29iaiwgJmdldF9md3YsIE5VTEwsCi0JCQkJCSAgICBOVUxMKTsKLQlpZiAoc3RhdHVzID09IEJFX1NVQ0NFU1MpIHsKLQkJc3RybmNweShiZV9md192ZXIsIGdldF9md3YuZmlybXdhcmVfdmVyc2lvbl9zdHJpbmcsIDMyKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQmxhZGVFbmdpbmUgRmlybXdhcmUgVmVyc2lvbjolc1xuIiwKLQkJICAgICAgIGdldF9md3YuZmlybXdhcmVfdmVyc2lvbl9zdHJpbmcpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBnZXQgQkUgRmlybXdhcmUgVmVyc2lvblxuIik7Ci0JfQotCi0Jc2VtYV9pbml0KCZhZGFwdGVyLT5nZXRfZXRoX3N0YXRfc2VtLCAwKTsKLQlpbml0X3RpbWVyKCZhZGFwdGVyLT50aW1lcl9jdHh0LmdldF9zdGF0c190aW1lcik7Ci0JYXRvbWljX3NldCgmYWRhcHRlci0+dGltZXJfY3R4dC5nZXRfc3RhdF9mbGFnLCAwKTsKLQlhZGFwdGVyLT50aW1lcl9jdHh0LmdldF9zdGF0c190aW1lci5mdW5jdGlvbiA9Ci0JICAgICZiZV9nZXRfc3RhdHNfdGltZXJfaGFuZGxlcjsKLQotCXN0YXR1cyA9IGJlX21jY19jcmVhdGUoYWRhcHRlcik7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCWdvdG8gY2xlYW51cDsKLQlzdGF0dXMgPSBiZV9tY2NfaW5pdChhZGFwdGVyKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJZ290byBjbGVhbnVwOwotCi0KLQlzdGF0dXMgPSBiZV9tY2NfYWRkX2FzeW5jX2V2ZW50X2NhbGxiYWNrKCZhZGFwdGVyLT5uZXRfb2JqLT5tY2NfcV9vYmosCi0JCQkgYmVfbGlua19zdGF0dXNfYXN5bmNfY2FsbGJhY2ssICh2b2lkICopYWRhcHRlcik7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImFkZF9hc3luY19ldmVudF9jYWxsYmFjayBmYWlsZWQiKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkxpbmsgc3RhdHVzIGNoYW5nZXMgbWF5IG5vdCBiZSByZWZsZWN0ZWRcbiIpOwotCX0KLQotCXN0YXR1cyA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJZ290byBjbGVhbnVwOwotCWJlX3VwZGF0ZV9saW5rX3N0YXR1cyhhZGFwdGVyKTsKLQlhZGFwdGVyLT5kZXZfc3RhdGUgPSBCRV9ERVZfU1RBVEVfSU5JVDsKLQlyZXR1cm4gMDsKLQotY2xlYW51cDoKLQliZV9yZW1vdmUocGRldik7Ci0JcmV0dXJuIHN0YXR1czsKLWVycm9yX2FkYXB0ZXI6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLWVycm9yX3BjaV9yZXE6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotZXJyb3I6Ci0JcHJpbnRrKEtFUk5fRVJSICJCbGFkZUVuZ2luZSBpbml0YWxpemF0aW9uIGZhaWxlZFxuIik7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIEdldCB0aGUgY3VycmVudCBsaW5rIHN0YXR1cyBhbmQgcHJpbnQgdGhlIHN0YXR1cyBvbiBjb25zb2xlCi0gKi8KLXZvaWQgYmVfdXBkYXRlX2xpbmtfc3RhdHVzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBhZGFwdGVyLT5uZXRfb2JqOwotCi0Jc3RhdHVzID0gYmVfcnhmX2xpbmtfc3RhdHVzKCZwbm9iLT5mbl9vYmosIGFkYXB0ZXItPmJlX2xpbmtfc3RzLCBOVUxMLAotCQkJTlVMTCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyA9PSBCRV9TVUNDRVNTKSB7Ci0JCWlmIChhZGFwdGVyLT5iZV9saW5rX3N0cy0+bWFjMF9zcGVlZCAmJgotCQkgICAgYWRhcHRlci0+YmVfbGlua19zdHMtPm1hYzBfZHVwbGV4KQotCQkJYWRhcHRlci0+cG9ydDBfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfVVA7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPnBvcnQwX2xpbmtfc3RzID0gQkVfUE9SVF9MSU5LX0RPV047Ci0KLQkJaWYgKGFkYXB0ZXItPmJlX2xpbmtfc3RzLT5tYWMxX3NwZWVkICYmCi0JCSAgICBhZGFwdGVyLT5iZV9saW5rX3N0cy0+bWFjMV9kdXBsZXgpCi0JCQlhZGFwdGVyLT5wb3J0MV9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19VUDsKLQkJZWxzZQotCQkJYWRhcHRlci0+cG9ydDFfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfRE9XTjsKLQotCQlkZXZfaW5mbygmcG5vYi0+bmV0ZGV2LT5kZXYsICJMaW5rIFByb3BlcnRpZXM6XG4iKTsKLQkJYmVfcHJpbnRfbGlua19pbmZvKGFkYXB0ZXItPmJlX2xpbmtfc3RzKTsKLQkJcmV0dXJuOwotCX0KLQlkZXZfaW5mbygmcG5vYi0+bmV0ZGV2LT5kZXYsICJDb3VsZCBub3QgZ2V0IGxpbmsgc3RhdHVzXG4iKTsKLQlyZXR1cm47Ci19Ci0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIHZvaWQKLWJlX3BtX2NsZWFudXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JICAgICAgc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0JbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0KLQliZV93YWl0X25pY190eF9jbXBseF9jbXBsKHBub2IpOwotCWJlX2Rpc2FibGVfZXFfaW50cihwbm9iKTsKLQotCWlmIChhZGFwdGVyLT50YXNrbGV0X3N0YXJ0ZWQpIHsKLQkJdGFza2xldF9raWxsKCZhZGFwdGVyLT5zdHNfaGFuZGxlcik7Ci0JCWFkYXB0ZXItPnRhc2tsZXRfc3RhcnRlZCA9IDA7Ci0JfQotCi0JYmVfdW5yZWdpc3Rlcl9pc3IoYWRhcHRlcik7Ci0JYmVfZGlzYWJsZV9pbnRyKHBub2IpOwotCi0JYmVfdHhfcV9jbGVhbihwbm9iKTsKLQliZV9yeF9xX2NsZWFuKHBub2IpOwotCi0JYmVfZGVzdHJveV9uZXRvYmoocG5vYik7Ci19Ci0KLXN0YXRpYyBpbnQgYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSAgYWRhcHRlci0+bmV0ZGV2cDsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlhZGFwdGVyLT5kZXZfcG1fc3RhdGUgPSBhZGFwdGVyLT5kZXZfc3RhdGU7Ci0JYWRhcHRlci0+ZGV2X3N0YXRlID0gQkVfREVWX1NUQVRFX1NVU1BFTkQ7Ci0KLQluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKLQkJYmVfcG1fY2xlYW51cChhZGFwdGVyLCBwbm9iLCBuZXRkZXYpOwotCi0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIDMsIDEpOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCA0LCAxKTsJLyogRDMgQ29sZCA9IDQgKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJlX3VwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gYWRhcHRlci0+bmV0X29iajsKLQotCWlmIChwbm9iLT5udW1fdmxhbnMgIT0gMCkKLQkJYmVfcnhmX3ZsYW5fY29uZmlnKCZwbm9iLT5mbl9vYmosIGZhbHNlLCBwbm9iLT5udW1fdmxhbnMsCi0JCQlwbm9iLT52bGFuX3RhZywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLX0KLQotc3RhdGljIGludCBiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9ICBhZGFwdGVyLT5uZXRkZXZwOwotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKLQotCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCAzLCAwKTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgNCwgMCk7CS8qIDQgaXMgRDMgY29sZCAqLwotCi0JbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCWJlX3J4Zl9tYWNfYWRkcmVzc19yZWFkX3dyaXRlKCZwbm9iLT5mbl9vYmosIGZhbHNlLCBmYWxzZSwKLQkJCWZhbHNlLCB0cnVlLCBmYWxzZSwgbmV0ZGV2LT5kZXZfYWRkciwgTlVMTCwgTlVMTCk7Ci0KLQkJc3RhdHVzID0gYmVfbm9iX3JpbmdfaW5pdChhZGFwdGVyLCBwbm9iKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCi0JCXRhc2tsZXRfaW5pdCgmKGFkYXB0ZXItPnN0c19oYW5kbGVyKSwgYmVfcHJvY2Vzc19pbnRyLAotCQkJICAgICAodW5zaWduZWQgbG9uZylhZGFwdGVyKTsKLQkJYWRhcHRlci0+dGFza2xldF9zdGFydGVkID0gMTsKLQotCQlpZiAoYmVfcmVnaXN0ZXJfaXNyKGFkYXB0ZXIsIHBub2IpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYmVfcmVnaXN0ZXJfaXNyIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQotCQlzdGF0dXMgPSBiZV9tY2NfaW5pdChhZGFwdGVyKTsKLQkJaWYgKHN0YXR1cyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYmVfbWNjX2luaXQgZmFpbGVkXG4iKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJYmVfdXBkYXRlX2xpbmtfc3RhdHVzKGFkYXB0ZXIpOwotCQkvKgotCQkgKiBSZWdpc3RlciBhc3luYyBjYWxsIGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIGxpbmsKLQkJICogc3RhdHVzIHVwZGF0ZXMKLQkJICovCi0JCXN0YXR1cyA9IGJlX21jY19hZGRfYXN5bmNfZXZlbnRfY2FsbGJhY2soCi0JCQkJJmFkYXB0ZXItPm5ldF9vYmotPm1jY19xX29iaiwKLQkJCQliZV9saW5rX3N0YXR1c19hc3luY19jYWxsYmFjaywgKHZvaWQgKilhZGFwdGVyKTsKLQkJaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZGRfYXN5bmNfZXZlbnRfY2FsbGJhY2sgZmFpbGVkIik7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIkxpbmsgc3RhdHVzIGNoYW5nZXMgbWF5IG5vdCBiZSByZWZsZWN0ZWRcbiIpOwotCQl9Ci0JCWJlX2VuYWJsZV9pbnRyKHBub2IpOwotCQliZV9lbmFibGVfZXFfaW50cihwbm9iKTsKLQkJYmVfdXAoYWRhcHRlcik7Ci0JfQotCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKLQlhZGFwdGVyLT5kZXZfc3RhdGUgPSBhZGFwdGVyLT5kZXZfcG1fc3RhdGU7Ci0JcmV0dXJuIDA7Ci0KLX0KLQotI2VuZGlmCi0KLS8qIFdhaXQgdW50aWwgbm8gbW9yZSBwZW5kaW5nIHRyYW5zbWl0cyAgKi8KLXZvaWQgYmVfd2FpdF9uaWNfdHhfY21wbHhfY21wbChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbnQgaTsKLQotCS8qIFdhaXQgZm9yIDIwdXMgKiA1MDAwMCAoPSAxcykgYW5kIG5vIG1vcmUgKi8KLQlpID0gMDsKLQl3aGlsZSAoKHBub2ItPnR4X3FfdGwgIT0gcG5vYi0+dHhfcV9oZCkgJiYgKGkgPCA1MDAwMCkpIHsKLQkJKytpOwotCQl1ZGVsYXkoMjApOwotCX0KLQotCS8qIENoZWNrIGZvciBubyBtb3JlIHBlbmRpbmcgdHJhbnNtaXRzICovCi0JaWYgKGkgPj0gNTAwMDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkRpZCBub3QgcmVjZWl2ZSBjb21wbGV0aW9ucyBmb3IgYWxsIFRYIHJlcXVlc3RzXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiZV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBiZV9kcml2ZXJfbmFtZSwKLQkuaWRfdGFibGUgPSBiZV9kZXZpY2VfaWRfdGFibGUsCi0JLnByb2JlID0gYmVfcHJvYmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPSBiZV9zdXNwZW5kLAotCS5yZXN1bWUgPSBiZV9yZXN1bWUsCi0jZW5kaWYKLQkucmVtb3ZlID0gYmVfcmVtb3ZlCi19OwotCi0vKgotICogTW9kdWxlIGluaXQgZW50cnkgcG9pbnQuIFJlZ2lzdGVycyBvdXIgb3VyIGRldmljZSBhbmQgcmV0dXJuLgotICogT3VyIHByb2JlIHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBkZXZpY2UgaXMgZm91bmQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGJlX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChyeGJ1Zl9zaXplICE9IDgxOTIgJiYgcnhidWZfc2l6ZSAhPSA0MDk2ICYmIHJ4YnVmX3NpemUgIT0gMjA0OCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiVW5zdXBwb3J0ZWQgcmVjZWl2ZSBidWZmZXIgc2l6ZSAoJWQpIHJlcXVlc3RlZFxuIiwKLQkJICAgICAgIHJ4YnVmX3NpemUpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiTXVzdCBiZSAyMDQ4LCA0MDk2IG9yIDgxOTIuIERlZmF1bHRpbmcgdG8gMjA0OFxuIik7Ci0JCXJ4YnVmX3NpemUgPSAyMDQ4OwotCX0KLQotCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJlX2RyaXZlcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1tb2R1bGVfaW5pdChiZV9pbml0X21vZHVsZSk7Ci0KLS8qCi0gKiBiZV9leGl0X21vZHVsZSAtIERyaXZlciBFeGl0IENsZWFudXAgUm91dGluZQotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgYmVfZXhpdF9tb2R1bGUodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJlX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9leGl0KGJlX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9pbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9pbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JhOTVkMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfaW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgotCi0jaW5jbHVkZSAiYmVuZXQuaCIKLQotLyogbnVtYmVyIG9mIGJ5dGVzIG9mIFJYIGZyYW1lIHRoYXQgYXJlIGNvcGllZCB0byBza2ItPmRhdGEgKi8KLSNkZWZpbmUgQkVfSERSX0xFTiA2NAotCi0jZGVmaW5lIE5FVElGX1JYKHNrYikgbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKQotI2RlZmluZSBWTEFOX0FDQ0VMX1JYKHNrYiwgcG5vYiwgdnQpIFwKLQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgcG5vYi0+dmxhbl9ncnAsIHZ0KQotCi0vKgotICAgIFRoaXMgZnVuY3Rpb24gbm90aWZpZXMgQmxhZGVFbmdpbmUgb2YgdGhlIG51bWJlciBvZiBjb21wbGV0aW9uCi0gICAgZW50cmllcyBwcm9jZXNzZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGNvbXBsZXRpb24gcXVldWUgYnkgd3JpdGluZwotICAgIHRoZSBudW1iZXIgb2YgcG9wcGVkIGVudHJpZXMgdG8gdGhlIGRvb3IgYmVsbC4KLQotICAgIHBub2IJLSBQb2ludGVyIHRvIHRoZSBOZXRPYmplY3Qgc3RydWN0dXJlCi0gICAgbgkJLSBOdW1iZXIgb2YgY29tcGxldGlvbiBlbnRyaWVzIHByb2Nlc3NlZAotICAgIGNxX2lkCS0gUXVldWUgSUQgb2YgdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIHdoaWNoIG5vdGlmaWNhdGlvbgotCQkJaXMgYmVpbmcgZG9uZS4KLSAgICByZV9hcm0JLSAxICAtIHJlYXJtIHRoZSBjb21wbGV0aW9uIHJpbmcgdG8gZ2VuZXJhdGUgYW4gZXZlbnQuCi0JCS0gMCAgLSBkb250IHJlYXJtIHRoZSBjb21wbGV0aW9uIHJpbmcgdG8gZ2VuZXJhdGUgYW4gZXZlbnQKLSovCi12b2lkIGJlX25vdGlmeV9jbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLCBpbnQgbiwgaW50IGNxX2lkLCBpbnQgcmVfYXJtKQotewotCXN0cnVjdCBDUV9EQl9BTUFQIGNxZGI7Ci0KLQljcWRiLmR3WzBdID0gMDsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgcWlkLCAmY3FkYiwgY3FfaWQpOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCByZWFybSwgJmNxZGIsIHJlX2FybSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIG51bV9wb3BwZWQsICZjcWRiLCBuKTsKLQlQRF9XUklURSgmcG5vYi0+Zm5fb2JqLCBjcV9kYiwgY3FkYi5kd1swXSk7Ci19Ci0KLS8qCi0gKiBhZGRzIGFkZGl0aW9uYWwgcmVjZWl2ZSBmcmFncyBpbmRpY2F0ZWQgYnkgQkUgc3RhcnRpbmcgZnJvbSBnaXZlbgotICogZnJhZyBpbmRleCAoZmkpIHRvIHNwZWNpZmllZCBza2IncyBmcmFnIGxpc3QKLSAqLwotc3RhdGljIHZvaWQKLWFkZF9za2JfZnJhZ3Moc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsIHN0cnVjdCBza19idWZmICpza2IsCi0JICAgICAgdTMyIG5yZXNpZCwgdTMyIGZpKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQl1MzIgc2tfZnJhZ19pZHgsIG47Ci0Jc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcnhfcGFnZV9pbmZvOwotCXUzMiBmcmFnX3N6ID0gcG5vYi0+cnhfYnVmX3NpemU7Ci0KLQlza19mcmFnX2lkeCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0Jd2hpbGUgKG5yZXNpZCkgewotCQlpbmRleF9pbmMoJmZpLCBwbm9iLT5yeF9xX2xlbik7Ci0KLQkJcnhfcGFnZV9pbmZvID0gKHN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKilwbm9iLT5yeF9jdHh0W2ZpXTsKLQkJcG5vYi0+cnhfY3R4dFtmaV0gPSBOVUxMOwotCQlpZiAoKHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQpIHx8Ci0JCSAgICAocG5vYi0+cnhfcGdfc2hhcmVkID09IGZhbHNlKSkgewotCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIocnhfcGFnZV9pbmZvLCBidXMpLAotCQkJCSAgICAgICBmcmFnX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQl9Ci0KLQkJbiA9IG1pbihucmVzaWQsIGZyYWdfc3opOwotCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW3NrX2ZyYWdfaWR4XS5wYWdlID0gcnhfcGFnZV9pbmZvLT5wYWdlOwotCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW3NrX2ZyYWdfaWR4XS5wYWdlX29mZnNldAotCQkgICAgPSByeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0OwotCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW3NrX2ZyYWdfaWR4XS5zaXplID0gbjsKLQotCQlza19mcmFnX2lkeCsrOwotCQlza2ItPmxlbiArPSBuOwotCQlza2ItPmRhdGFfbGVuICs9IG47Ci0JCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKLQkJbnJlc2lkIC09IG47Ci0KLQkJbWVtc2V0KHJ4X3BhZ2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZV9yeF9wYWdlX2luZm8pKTsKLQkJYXRvbWljX2RlYygmcG5vYi0+cnhfcV9wb3N0ZWQpOwotCX0KLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIGluY29taW5nIG5pYyBwYWNrZXRzIG92ZXIgdmFyaW91cyBSeCBxdWV1ZXMuCi0gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBhZGFwdGVyLCB0aGUgY3VycmVudCBSeCBzdGF0dXMgZGVzY3JpcHRvcgotICogZW50cnkgYW5kIHRoZSBSeCBjb21wbGV0aW9uIHF1ZXVlIElEIGFzIGFyZ3VtZW50LgotICovCi1zdGF0aWMgaW5saW5lIGludCBwcm9jZXNzX25pY19yeF9jb21wbGV0aW9uKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLAotCQkJCQkgICAgc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQICpyeGNwKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCB1ZHBja3NtLCB0Y3Bja3NtOwotCWludCBuOwotCXUzMiBucmVzaWQsIGZpOwotCXUzMiBmcmFnX3N6ID0gcG5vYi0+cnhfYnVmX3NpemU7Ci0JdTggKnZhOwotCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnJ4X3BhZ2VfaW5mbzsKLQl1MzIgbnVtZnJhZ3MsIHZ0cCwgdnRtLCB2bGFuX3RhZywgcGt0c2l6ZTsKLQotCWZpID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBmcmFnbmR4LCByeGNwKTsKLQlCVUdfT04oZmkgPj0gKGludClwbm9iLT5yeF9xX2xlbik7Ci0JQlVHX09OKGZpIDwgMCk7Ci0KLQlyeF9wYWdlX2luZm8gPSAoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqKXBub2ItPnJ4X2N0eHRbZmldOwotCUJVR19PTighcnhfcGFnZV9pbmZvLT5wYWdlKTsKLQlwbm9iLT5yeF9jdHh0W2ZpXSA9IE5VTEw7Ci0KLQkvKgotCSAqIElmIG9uZSBwYWdlIGlzIHVzZWQgcGVyIGZyYWdtZW50IG9yIGlmIHRoaXMgaXMgdGhlIHNlY29uZCBoYWxmIG9mCi0JICogIG9mIHRoZSBwYWdlLCB1bm1hcCB0aGUgcGFnZSBoZXJlCi0JICovCi0JaWYgKChyeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0KSB8fCAocG5vYi0+cnhfcGdfc2hhcmVkID09IGZhbHNlKSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKHJ4X3BhZ2VfaW5mbywgYnVzKSwgZnJhZ19zeiwKLQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCX0KLQotCWF0b21pY19kZWMoJnBub2ItPnJ4X3FfcG9zdGVkKTsKLQl1ZHBja3NtID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCB1ZHBja3NtLCByeGNwKTsKLQl0Y3Bja3NtID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCB0Y3Bja3NtLCByeGNwKTsKLQlwa3RzaXplID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBwa3RzaXplLCByeGNwKTsKLQkvKgotCSAqIGdldCByaWQgb2YgUlggZmx1c2ggY29tcGxldGlvbnMgZmlyc3QuCi0JICovCi0JaWYgKCh0Y3Bja3NtKSAmJiAodWRwY2tzbSkgJiYgKHBrdHNpemUgPT0gMzIpKSB7Ci0JCXB1dF9wYWdlKHJ4X3BhZ2VfaW5mby0+cGFnZSk7Ci0JCW1lbXNldChyeF9wYWdlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JCXJldHVybiAwOwotCX0KLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHBub2ItPm5ldGRldiwgQkVfSERSX0xFTiArIE5FVF9JUF9BTElHTik7Ci0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWRldl9pbmZvKCZwbm9iLT5uZXRkZXYtPmRldiwgImFsbG9jX3NrYigpIGZhaWxlZFxuIik7Ci0JCXB1dF9wYWdlKHJ4X3BhZ2VfaW5mby0+cGFnZSk7Ci0JCW1lbXNldChyeF9wYWdlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JCWdvdG8gZnJlZV9mcmFnczsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwotCi0Jc2tiLT5kZXYgPSBwbm9iLT5uZXRkZXY7Ci0KLQluID0gbWluKHBrdHNpemUsIGZyYWdfc3opOwotCi0JdmEgPSBwYWdlX2FkZHJlc3MocnhfcGFnZV9pbmZvLT5wYWdlKSArIHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7Ci0JcHJlZmV0Y2godmEpOwotCi0Jc2tiLT5sZW4gPSBuOwotCXNrYi0+ZGF0YV9sZW4gPSBuOwotCWlmIChuIDw9IEJFX0hEUl9MRU4pIHsKLQkJbWVtY3B5KHNrYi0+ZGF0YSwgdmEsIG4pOwotCQlwdXRfcGFnZShyeF9wYWdlX2luZm8tPnBhZ2UpOwotCQlza2ItPmRhdGFfbGVuIC09IG47Ci0JCXNrYi0+dGFpbCArPSBuOwotCX0gZWxzZSB7Ci0KLQkJLyogU2V0dXAgdGhlIFNLQiB3aXRoIHBhZ2UgYnVmZmVyIGluZm9ybWF0aW9uICovCi0JCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSA9IHJ4X3BhZ2VfaW5mby0+cGFnZTsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCi0JCS8qIENvcHkgdGhlIGhlYWRlciBpbnRvIHRoZSBza2JfZGF0YSAqLwotCQltZW1jcHkoc2tiLT5kYXRhLCB2YSwgQkVfSERSX0xFTik7Ci0JCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgPQotCQkgICAgcnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldCArIEJFX0hEUl9MRU47Ci0JCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSA9IG4gLSBCRV9IRFJfTEVOOwotCQlza2ItPmRhdGFfbGVuIC09IEJFX0hEUl9MRU47Ci0JCXNrYi0+dGFpbCArPSBCRV9IRFJfTEVOOwotCX0KLQltZW1zZXQocnhfcGFnZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbykpOwotCW5yZXNpZCA9IHBrdHNpemUgLSBuOwotCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcG5vYi0+bmV0ZGV2KTsKLQotCWlmICgodGNwY2tzbSB8fCB1ZHBja3NtKSAmJiBhZGFwdGVyLT5yeF9jc3VtKQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWVsc2UKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCS8qCi0JICogaWYgd2UgaGF2ZSBtb3JlIGJ5dGVzIGxlZnQsIHRoZSBmcmFtZSBoYXMgYmVlbgotCSAqIGdpdmVuIHRvIHVzIGluIG11bHRpcGxlIGZyYWdtZW50cy4gIFRoaXMgaGFwcGVucwotCSAqIHdpdGggSnVtYm8gZnJhbWVzLiBBZGQgdGhlIHJlbWFpbmluZyBmcmFnbWVudHMgdG8KLQkgKiBza2ItPmZyYWdzW10gYXJyYXkuCi0JICovCi0JaWYgKG5yZXNpZCkKLQkJYWRkX3NrYl9mcmFncyhwbm9iLCBza2IsIG5yZXNpZCwgZmkpOwotCi0JLyogdXBkYXRlIHRoZSB0aGUgdHJ1ZSBzaXplIG9mIHRoZSBza2IuICovCi0Jc2tiLT50cnVlc2l6ZSA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKLQotCS8qCi0JICogSWYgYSA4MDIuMyBmcmFtZSBvciA4MDIuMiBMTEMgZnJhbWUKLQkgKiAoaS5lKSBjb250YWlucyBsZW5ndGggZmllbGQgaW4gTUFDIEhkcgotCSAqIGFuZCBmcmFtZSBsZW4gaXMgZ3JlYXRlciB0aGFuIDY0IGJ5dGVzCi0JICovCi0JaWYgKCgoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF84MDJfMikpIHx8Ci0JICAgICAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF84MDJfMykpKQotCSAgICAmJiAocGt0c2l6ZSA+IEJFX0hEUl9MRU4pKSB7Ci0JCS8qCi0JCSAqIElmIHRoZSBsZW5ndGggZ2l2ZW4gaW4gTWFjIEhkciBpcyBsZXNzIHRoYW4gZnJhbWUgc2l6ZQotCQkgKiBFcnJhbmVvdXMgZnJhbWUsIERyb3AgaXQKLQkJICovCi0JCWlmICgobnRvaHMoKih1MTYgKikgKHZhICsgMTIpKSArIEVUSF9ITEVOKSA8IHBrdHNpemUpIHsKLQkJCS8qIEluY3JlbWVudCBOb24gRXRoZXIgdHlwZSBJSSBmcmFtZXMgZHJvcHBlZCAqLwotCQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfODAyXzNfZHJvcHBlZF9mcmFtZXMrKzsKLQotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQkvKgotCQkgKiBlbHNlIGlmIHRoZSBsZW5ndGggZ2l2ZW4gaW4gTWFjIEhkciBpcyBncmVhdGVyIHRoYW4KLQkJICogZnJhbWUgc2l6ZSwgc2hvdWxkIG5vdCBiZSBzZWVpbmcgdGhpcyBzb3J0IG9mIGZyYW1lcwotCQkgKiBkdW1wIHRoZSBwa3QgYW5kIHBhc3MgdG8gc3RhY2sKLQkJICovCi0JCWVsc2UgaWYgKChudG9ocygqKHUxNiAqKSAodmEgKyAxMikpICsgRVRIX0hMRU4pID4gcGt0c2l6ZSkgewotCQkJLyogSW5jcmVtZW50IE5vbiBFdGhlciB0eXBlIElJIGZyYW1lcyBtYWxmb3JtZWQgKi8KLQkJCWFkYXB0ZXItPmJlX3N0YXQuYmVzXzgwMl8zX21hbGZvcm1lZF9mcmFtZXMrKzsKLQkJfQotCX0KLQotCXZ0cCA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdnRwLCByeGNwKTsKLQl2dG0gPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHZ0bSwgcnhjcCk7Ci0JaWYgKHZ0cCAmJiB2dG0pIHsKLQkJLyogVmxhbiB0YWcgcHJlc2VudCBpbiBwa3QgYW5kIEJFIGZvdW5kCi0JCSAqIHRoYXQgdGhlIHRhZyBtYXRjaGVkIGFuIGVudHJ5IGluIFZMQU4gdGFibGUKLQkJICovCi0JCWlmICghcG5vYi0+dmxhbl9ncnAgfHwgcG5vYi0+bnVtX3ZsYW5zID09IDApIHsKLQkJCS8qIEJ1dCB3ZSBoYXZlIG5vIFZMQU5zIGNvbmZpZ3VyZWQuCi0JCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBEcm9wIHRoZSBwYWNrZXQuCi0JCQkgKi8KLQkJCWRldl9pbmZvKCZwbm9iLT5uZXRkZXYtPmRldiwKLQkJCSAgICAgICAiQmxhZGVFbmdpbmU6IFVuZXhwZWN0ZWQgdmxhbiB0YWdnZWQgcGFja2V0XG4iKTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJLyogcGFzcyB0aGUgVkxBTiBwYWNrZXQgdG8gc3RhY2sgKi8KLQkJdmxhbl90YWcgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHZsYW5fdGFnLCByeGNwKTsKLQkJVkxBTl9BQ0NFTF9SWChza2IsIHBub2IsIGJlMTZfdG9fY3B1KHZsYW5fdGFnKSk7Ci0KLQl9IGVsc2UgewotCQlORVRJRl9SWChza2IpOwotCX0KLQlyZXR1cm4gMDsKLQotZnJlZV9mcmFnczoKLQkvKiBmcmVlIGFsbCBmcmFncyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgcnhjcCAqLwotCW51bWZyYWdzID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBudW1mcmFncywgcnhjcCk7Ci0Jd2hpbGUgKG51bWZyYWdzLS0gPiAxKSB7Ci0JCWluZGV4X2luYygmZmksIHBub2ItPnJ4X3FfbGVuKTsKLQotCQlyeF9wYWdlX2luZm8gPSAoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqKQotCQkgICAgcG5vYi0+cnhfY3R4dFtmaV07Ci0JCXBub2ItPnJ4X2N0eHRbZmldID0gKHZvaWQgKilOVUxMOwotCQlpZiAocnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldCB8fCAhcG5vYi0+cnhfcGdfc2hhcmVkKSB7Ci0JCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihyeF9wYWdlX2luZm8sIGJ1cyksCi0JCQkJICAgICAgIGZyYWdfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCX0KLQotCQlwdXRfcGFnZShyeF9wYWdlX2luZm8tPnBhZ2UpOwotCQltZW1zZXQocnhfcGFnZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbykpOwotCQlhdG9taWNfZGVjKCZwbm9iLT5yeF9xX3Bvc3RlZCk7Ci0JfQotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX25pY19yeF9jb21wbGV0aW9uX2xybyhzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwKLQkJCQkJICBzdHJ1Y3QgRVRIX1JYX0NPTVBMX0FNQVAgKnJ4Y3ApCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgcnhfZnJhZ3NbQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRV07Ci0JdW5zaWduZWQgaW50IHVkcGNrc20sIHRjcGNrc207Ci0JdTMyIG51bWZyYWdzLCB2bGFuZiwgdnRtLCB2bGFuX3RhZywgbnJlc2lkOwotCXUxNiB2bGFudDsKLQl1bnNpZ25lZCBpbnQgZmksIGlkeCwgbjsKLQlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpyeF9wYWdlX2luZm87Ci0JdTMyIGZyYWdfc3ogPSBwbm9iLT5yeF9idWZfc2l6ZSwgcGt0c2l6ZTsKLQlib29sIHJ4X2NvYWwgPSAoYWRhcHRlci0+bWF4X3J4X2NvYWwgPD0gMSkgPyAwIDogMTsKLQl1OCBlcnIsICp2YTsKLQlfX3dzdW0gY3N1bSA9IDA7Ci0KLQlpZiAoQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBpcHNlYywgcnhjcCkpIHsKLQkJLyogIERyb3AgdGhlIHBrdCBhbmQgbW92ZSB0byB0aGUgbmV4dCBjb21wbGV0aW9uLiAgKi8KLQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfcnhfbWlzY19wa3RzKys7Ci0JCXJldHVybjsKLQl9Ci0JZXJyID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBlcnIsIHJ4Y3ApOwotCWlmIChlcnIgfHwgIXJ4X2NvYWwpIHsKLQkJLyogV2Ugd29uJ3QgY29hbGVzY2UgUnggcGt0cyBpZiB0aGUgZXJyIGJpdCBzZXQuCi0JCSAqIHRha2UgdGhlIHBhdGggb2Ygbm9ybWFsIGNvbXBsZXRpb24gcHJvY2Vzc2luZyAqLwotCQlwcm9jZXNzX25pY19yeF9jb21wbGV0aW9uKHBub2IsIHJ4Y3ApOwotCQlyZXR1cm47Ci0JfQotCi0JZmkgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIGZyYWduZHgsIHJ4Y3ApOwotCUJVR19PTihmaSA+PSAoaW50KXBub2ItPnJ4X3FfbGVuKTsKLQlCVUdfT04oZmkgPCAwKTsKLQlyeF9wYWdlX2luZm8gPSAoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqKXBub2ItPnJ4X2N0eHRbZmldOwotCUJVR19PTighcnhfcGFnZV9pbmZvLT5wYWdlKTsKLQlwbm9iLT5yeF9jdHh0W2ZpXSA9ICh2b2lkICopTlVMTDsKLQkvKiAgSWYgb25lIHBhZ2UgaXMgdXNlZCBwZXIgZnJhZ21lbnQgb3IgaWYgdGhpcyBpcyB0aGUKLQkgKiBzZWNvbmQgaGFsZiBvZiB0aGUgcGFnZSwgdW5tYXAgdGhlIHBhZ2UgaGVyZQotCSAqLwotCWlmIChyeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0IHx8ICFwbm9iLT5yeF9wZ19zaGFyZWQpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihyeF9wYWdlX2luZm8sIGJ1cyksCi0JCQkgICAgICAgZnJhZ19zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQl9Ci0KLQludW1mcmFncyA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgbnVtZnJhZ3MsIHJ4Y3ApOwotCXVkcGNrc20gPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHVkcGNrc20sIHJ4Y3ApOwotCXRjcGNrc20gPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHRjcGNrc20sIHJ4Y3ApOwotCXZsYW5fdGFnID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCB2bGFuX3RhZywgcnhjcCk7Ci0JdmxhbnQgPSBiZTE2X3RvX2NwdSh2bGFuX3RhZyk7Ci0JdmxhbmYgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHZ0cCwgcnhjcCk7Ci0JdnRtID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCB2dG0sIHJ4Y3ApOwotCXBrdHNpemUgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHBrdHNpemUsIHJ4Y3ApOwotCi0JYXRvbWljX2RlYygmcG5vYi0+cnhfcV9wb3N0ZWQpOwotCi0JaWYgKHRjcGNrc20gJiYgdWRwY2tzbSAmJiBwa3RzaXplID09IDMyKSB7Ci0JCS8qIGZsdXNoIGNvbXBsZXRpb24gZW50cmllcyAqLwotCQlwdXRfcGFnZShyeF9wYWdlX2luZm8tPnBhZ2UpOwotCQltZW1zZXQocnhfcGFnZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbykpOwotCQlyZXR1cm47Ci0JfQotCS8qIE9ubHkgb25lIG9mIHVkcGNrc3VtIGFuZCB0Y3Bja3N1bSBjYW4gYmUgc2V0ICovCi0JQlVHX09OKHVkcGNrc20gJiYgdGNwY2tzbSk7Ci0KLQkvKiBqdW1ibyBmcmFtZXMgY291bGQgY29tZSBpbiBtdWx0aXBsZSBmcmFnbWVudHMgKi8KLQlCVUdfT04obnVtZnJhZ3MgIT0gKChwa3RzaXplICsgKGZyYWdfc3ogLSAxKSkgLyBmcmFnX3N6KSk7Ci0JbiA9IG1pbihwa3RzaXplLCBmcmFnX3N6KTsKLQlucmVzaWQgPSBwa3RzaXplIC0gbjsJLyogd2lsbCBiZSB1c2VmdWwgZm9yIGp1bWJvIHBrdHMgKi8KLQlpZHggPSAwOwotCi0JdmEgPSBwYWdlX2FkZHJlc3MocnhfcGFnZV9pbmZvLT5wYWdlKSArIHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7Ci0JcHJlZmV0Y2godmEpOwotCXJ4X2ZyYWdzW2lkeF0ucGFnZSA9IHJ4X3BhZ2VfaW5mby0+cGFnZTsKLQlyeF9mcmFnc1tpZHhdLnBhZ2Vfb2Zmc2V0ID0gKHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQpOwotCXJ4X2ZyYWdzW2lkeF0uc2l6ZSA9IG47Ci0JbWVtc2V0KHJ4X3BhZ2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZV9yeF9wYWdlX2luZm8pKTsKLQotCS8qIElmIHdlIGdvdCBtdWx0aXBsZSBmcmFnbWVudHMsIHdlIGhhdmUgbW9yZSBkYXRhLiAqLwotCXdoaWxlIChucmVzaWQpIHsKLQkJaWR4Kys7Ci0JCWluZGV4X2luYygmZmksIHBub2ItPnJ4X3FfbGVuKTsKLQotCQlyeF9wYWdlX2luZm8gPSAoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqKXBub2ItPnJ4X2N0eHRbZmldOwotCQlwbm9iLT5yeF9jdHh0W2ZpXSA9ICh2b2lkICopTlVMTDsKLQkJaWYgKHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQgfHwgIXBub2ItPnJ4X3BnX3NoYXJlZCkgewotCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIocnhfcGFnZV9pbmZvLCBidXMpLAotCQkJCSAgICAgICBmcmFnX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQl9Ci0KLQkJbiA9IG1pbihucmVzaWQsIGZyYWdfc3opOwotCQlyeF9mcmFnc1tpZHhdLnBhZ2UgPSByeF9wYWdlX2luZm8tPnBhZ2U7Ci0JCXJ4X2ZyYWdzW2lkeF0ucGFnZV9vZmZzZXQgPSAocnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldCk7Ci0JCXJ4X2ZyYWdzW2lkeF0uc2l6ZSA9IG47Ci0KLQkJbnJlc2lkIC09IG47Ci0JCW1lbXNldChyeF9wYWdlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JCWF0b21pY19kZWMoJnBub2ItPnJ4X3FfcG9zdGVkKTsKLQl9Ci0KLQlpZiAobGlrZWx5KCEodmxhbmYgJiYgdnRtKSkpIHsKLQkJbHJvX3JlY2VpdmVfZnJhZ3MoJnBub2ItPmxyb19tZ3IsIHJ4X2ZyYWdzLAotCQkJCSAgcGt0c2l6ZSwgcGt0c2l6ZSwKLQkJCQkgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY3N1bSwgY3N1bSk7Ci0JfSBlbHNlIHsKLQkJLyogVmxhbiB0YWcgcHJlc2VudCBpbiBwa3QgYW5kIEJFIGZvdW5kCi0JCSAqIHRoYXQgdGhlIHRhZyBtYXRjaGVkIGFuIGVudHJ5IGluIFZMQU4gdGFibGUKLQkJICovCi0JCWlmICh1bmxpa2VseSghcG5vYi0+dmxhbl9ncnAgfHwgcG5vYi0+bnVtX3ZsYW5zID09IDApKSB7Ci0JCQkvKiBCdXQgd2UgaGF2ZSBubyBWTEFOcyBjb25maWd1cmVkLgotCQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRHJvcCB0aGUgcGFja2V0LgotCQkJICovCi0JCQlkZXZfaW5mbygmcG5vYi0+bmV0ZGV2LT5kZXYsCi0JCQkgICAgICAgIkJsYWRlRW5naW5lOiBVbmV4cGVjdGVkIHZsYW4gdGFnZ2VkIHBhY2tldFxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogcGFzcyB0aGUgVkxBTiBwYWNrZXQgdG8gc3RhY2sgKi8KLQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX2ZyYWdzKCZwbm9iLT5scm9fbWdyLAotCQkJCQkgICAgICAgcnhfZnJhZ3MsIHBrdHNpemUsIHBrdHNpemUsCi0JCQkJCSAgICAgICBwbm9iLT52bGFuX2dycCwgdmxhbnQsCi0JCQkJCSAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWNzdW0sCi0JCQkJCSAgICAgICBjc3VtKTsKLQl9Ci0KLQlhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9jb2FsKys7Ci19Ci0KLXN0cnVjdCBFVEhfUlhfQ09NUExfQU1BUCAqYmVfZ2V0X3J4X2NtcGwoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQICpyeGNwID0gJnBub2ItPnJ4X2NxW3Bub2ItPnJ4X2NxX3RsXTsKLQl1MzIgdmFsaWQsIGN0OwotCi0JdmFsaWQgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHZhbGlkLCByeGNwKTsKLQlpZiAodmFsaWQgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQljdCA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgY3QsIHJ4Y3ApOwotCWlmIChjdCAhPSAwKSB7Ci0JCS8qIEludmFsaWQgY2h1dGUgIy4gdHJlYXQgYXMgZXJyb3IgKi8KLQkJQU1BUF9TRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBlcnIsIHJ4Y3AsIDEpOwotCX0KLQotCWJlX2Fkdl9yeGNxX3RsKHBub2IpOwotCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdmFsaWQsIHJ4Y3AsIDApOwotCXJldHVybiByeGNwOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfcnhfcmF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiB1cGRhdGUgdGhlIHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLwotCWlmICgoamlmZmllcyAtIGFkYXB0ZXItPmV0aF9yeF9qaWZmaWVzKSA+IDIgKiAoSFopKSB7Ci0JCXUzMiByOwotCQlyID0gYWRhcHRlci0+ZXRoX3J4X2J5dGVzIC8KLQkJICAgICgoamlmZmllcyAtIGFkYXB0ZXItPmV0aF9yeF9qaWZmaWVzKSAvIChIWikpOwotCQlyID0gKHIgLyAxMDAwMDAwKTsJLyogTUIvU2VjICovCi0KLQkJLyogTWVnYSBCaXRzL1NlYyAqLwotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19ldGhfcnhfcmF0ZSA9IChyICogOCk7Ci0JCWFkYXB0ZXItPmV0aF9yeF9qaWZmaWVzID0gamlmZmllczsKLQkJYWRhcHRlci0+ZXRoX3J4X2J5dGVzID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcHJvY2Vzc19yeF9jb21wbGV0aW9ucyhzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgaW50IG1heF93b3JrKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlzdHJ1Y3QgRVRIX1JYX0NPTVBMX0FNQVAgKnJ4Y3A7Ci0JdTMyIG5jID0gMDsKLQl1bnNpZ25lZCBpbnQgcGt0c2l6ZTsKLQotCXdoaWxlIChtYXhfd29yayAmJiAocnhjcCA9IGJlX2dldF9yeF9jbXBsKHBub2IpKSkgewotCQlwcmVmZXRjaChyeGNwKTsKLQkJcGt0c2l6ZSA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgcGt0c2l6ZSwgcnhjcCk7Ci0JCXByb2Nlc3NfbmljX3J4X2NvbXBsZXRpb25fbHJvKHBub2IsIHJ4Y3ApOwotCQlhZGFwdGVyLT5ldGhfcnhfYnl0ZXMgKz0gcGt0c2l6ZTsKLQkJdXBkYXRlX3J4X3JhdGUoYWRhcHRlcik7Ci0JCW5jKys7Ci0JCW1heF93b3JrLS07Ci0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X2NvbXBsKys7Ci0JfQotCWlmIChsaWtlbHkoYWRhcHRlci0+bWF4X3J4X2NvYWwgPiAxKSkgewotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9mbHVzaCsrOwotCQlscm9fZmx1c2hfYWxsKCZwbm9iLT5scm9fbWdyKTsKLQl9Ci0KLQkvKiBSZWZpbGwgdGhlIHF1ZXVlICovCi0JaWYgKGF0b21pY19yZWFkKCZwbm9iLT5yeF9xX3Bvc3RlZCkgPCA5MDApCi0JCWJlX3Bvc3RfZXRoX3J4X2J1ZmZzKHBub2IpOwotCi0JcmV0dXJuIG5jOwotfQotCi1zdGF0aWMgc3RydWN0IEVUSF9UWF9DT01QTF9BTUFQICpiZV9nZXRfdHhfY21wbChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlzdHJ1Y3QgRVRIX1RYX0NPTVBMX0FNQVAgKnR4Y3AgPSAmcG5vYi0+dHhfY3FbcG5vYi0+dHhfY3FfdGxdOwotCXUzMiB2YWxpZDsKLQotCXZhbGlkID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1RYX0NPTVBMLCB2YWxpZCwgdHhjcCk7Ci0JaWYgKHZhbGlkID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JQU1BUF9TRVRfQklUU19QVFIoRVRIX1RYX0NPTVBMLCB2YWxpZCwgdHhjcCwgMCk7Ci0JYmVfYWR2X3R4Y3FfdGwocG5vYik7Ci0JcmV0dXJuIHR4Y3A7Ci0KLX0KLQotdm9pZCBwcm9jZXNzX29uZV90eF9jb21wbChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgdTMyIGVuZF9pZHgpCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCWludCBjdXJfaW5kZXgsIHR4X3dyYnNfY29tcGxldGVkID0gMDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXU2NCBidXNhZGRyLCBwYSwgcGFfbG8sIHBhX2hpOwotCXN0cnVjdCBFVEhfV1JCX0FNQVAgKndyYjsKLQl1MzIgZnJhZ19sZW4sIGxhc3RfaW5kZXgsIGo7Ci0KLQlsYXN0X2luZGV4ID0gdHhfY29tcGxfbGFzdHdyYl9pZHhfZ2V0KHBub2IpOwotCUJVR19PTihsYXN0X2luZGV4ICE9IGVuZF9pZHgpOwotCXBub2ItPnR4X2N0eHRbcG5vYi0+dHhfcV90bF0gPSBOVUxMOwotCWRvIHsKLQkJY3VyX2luZGV4ID0gcG5vYi0+dHhfcV90bDsKLQkJd3JiID0gJnBub2ItPnR4X3FbY3VyX2luZGV4XTsKLQkJcGFfaGkgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfV1JCLCBmcmFnX3BhX2hpLCB3cmIpOwotCQlwYV9sbyA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9XUkIsIGZyYWdfcGFfbG8sIHdyYik7Ci0JCWZyYWdfbGVuID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1dSQiwgZnJhZ19sZW4sIHdyYik7Ci0JCWJ1c2FkZHIgPSAocGFfaGkgPDwgMzIpIHwgcGFfbG87Ci0JCWlmIChidXNhZGRyICE9IDApIHsKLQkJCXBhID0gbGU2NF90b19jcHUoYnVzYWRkcik7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIHBhLAotCQkJCQkgZnJhZ19sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQl9Ci0JCWlmIChjdXJfaW5kZXggPT0gbGFzdF9pbmRleCkgewotCQkJc2tiID0gKHN0cnVjdCBza19idWZmICopcG5vYi0+dHhfY3R4dFtjdXJfaW5kZXhdOwotCQkJQlVHX09OKCFza2IpOwotCQkJZm9yIChqID0gMDsgaiA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGorKykgewotCQkJCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7Ci0JCQkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdOwotCQkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCSAgICAgICAodWxvbmcpIGZyYWctPnBhZ2UsIGZyYWctPnNpemUsCi0JCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCX0KLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcG5vYi0+dHhfY3R4dFtjdXJfaW5kZXhdID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCUJVR19PTihwbm9iLT50eF9jdHh0W2N1cl9pbmRleF0pOwotCQl9Ci0JCXR4X3dyYnNfY29tcGxldGVkKys7Ci0JCWJlX2Fkdl90eHFfdGwocG5vYik7Ci0JfSB3aGlsZSAoY3VyX2luZGV4ICE9IGxhc3RfaW5kZXgpOwotCWF0b21pY19zdWIodHhfd3Jic19jb21wbGV0ZWQsICZwbm9iLT50eF9xX3VzZWQpOwotfQotCi0vKiB0aGVyZSBpcyBubyBuZWVkIHRvIHRha2UgYW4gU01QIGxvY2sgaGVyZSBzaW5jZSBjdXJyZW50bHkKLSAqIHdlIGhhdmUgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIHRhc2tsZXQgdGhhdCBkb2VzIGNvbXBsZXRpb24KLSAqIHByb2Nlc3NpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIHByb2Nlc3NfbmljX3R4X2NvbXBsZXRpb25zKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlzdHJ1Y3QgRVRIX1RYX0NPTVBMX0FNQVAgKnR4Y3A7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBub2ItPm5ldGRldjsKLQl1MzIgZW5kX2lkeCwgbnVtX3Byb2Nlc3NlZCA9IDA7Ci0KLQlhZGFwdGVyLT5iZV9zdGF0LmJlc190eF9ldmVudHMrKzsKLQotCXdoaWxlICgodHhjcCA9IGJlX2dldF90eF9jbXBsKHBub2IpKSkgewotCQllbmRfaWR4ID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1RYX0NPTVBMLCB3cmJfaW5kZXgsIHR4Y3ApOwotCQlwcm9jZXNzX29uZV90eF9jb21wbChwbm9iLCBlbmRfaWR4KTsKLQkJbnVtX3Byb2Nlc3NlZCsrOwotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc190eF9jb21wbCsrOwotCX0KLQliZV9ub3RpZnlfY21wbChwbm9iLCBudW1fcHJvY2Vzc2VkLCBwbm9iLT50eF9jcV9pZCwgMSk7Ci0JLyoKLQkgKiBXZSBnb3QgVHggY29tcGxldGlvbnMgYW5kIGhhdmUgdXNhYmxlIFdSQnMuCi0JICogSWYgdGhlIG5ldGRldidzIHF1ZXVlIGhhcyBiZWVuIHN0b3BwZWQKLQkgKiBiZWNhdXNlIHdlIGhhZCBydW4gb3V0IG9mIFdSQnMsIHdha2UgaXQgbm93LgotCSAqLwotCXNwaW5fbG9jaygmYWRhcHRlci0+dHhxX2xvY2spOwotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikKLQkgICAgJiYgYXRvbWljX3JlYWQoJnBub2ItPnR4X3FfdXNlZCkgPCBwbm9iLT50eF9xX2xlbiAvIDIpIHsKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwotCX0KLQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhxX2xvY2spOwotfQotCi1zdGF0aWMgdTMyIHBvc3RfcnhfYnVmZnMoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsIHN0cnVjdCBsaXN0X2hlYWQgKnJ4YmwpCi17Ci0JdTMyIG5wb3N0ZWQgPSAwOwotCXN0cnVjdCBFVEhfUlhfRF9BTUFQICpyeGQgPSBOVUxMOwotCXN0cnVjdCBiZV9yZWN2X2J1ZmZlciAqcnhicDsKLQl2b2lkICoqcnhfY3R4cDsKLQlzdHJ1Y3QgUlFfREJfQU1BUCBycWRiOwotCi0JcnhfY3R4cCA9IHBub2ItPnJ4X2N0eHQ7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkocnhibCkgJiYKLQkgICAgICAgKHJ4X2N0eHBbcG5vYi0+cnhfcV9oZF0gPT0gTlVMTCkgJiYgbnBvc3RlZCA8IDI1NSkgewotCi0JCXJ4YnAgPSBsaXN0X2ZpcnN0X2VudHJ5KHJ4YmwsIHN0cnVjdCBiZV9yZWN2X2J1ZmZlciwgcnhiX2xpc3QpOwotCQlsaXN0X2RlbCgmcnhicC0+cnhiX2xpc3QpOwotCQlyeGQgPSBwbm9iLT5yeF9xICsgcG5vYi0+cnhfcV9oZDsKLQkJQU1BUF9TRVRfQklUU19QVFIoRVRIX1JYX0QsIGZyYWdwYV9sbywgcnhkLCByeGJwLT5yeGJfcGFfbG8pOwotCQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfUlhfRCwgZnJhZ3BhX2hpLCByeGQsIHJ4YnAtPnJ4Yl9wYV9oaSk7Ci0KLQkJcnhfY3R4cFtwbm9iLT5yeF9xX2hkXSA9IHJ4YnAtPnJ4Yl9jdHh0OwotCQliZV9hZHZfcnhxX2hkKHBub2IpOwotCQlucG9zdGVkKys7Ci0JfQotCi0JaWYgKG5wb3N0ZWQpIHsKLQkJLyogTm93IHByZXNzIHRoZSBkb29yIGJlbGwgdG8gbm90aWZ5IEJsYWRlRW5naW5lLiAqLwotCQlycWRiLmR3WzBdID0gMDsKLQkJQU1BUF9TRVRfQklUU19QVFIoUlFfREIsIG51bVBvc3RlZCwgJnJxZGIsIG5wb3N0ZWQpOwotCQlBTUFQX1NFVF9CSVRTX1BUUihSUV9EQiwgcnEsICZycWRiLCBwbm9iLT5yeF9xX2lkKTsKLQkJUERfV1JJVEUoJnBub2ItPmZuX29iaiwgZXJ4X3JxX2RiLCBycWRiLmR3WzBdKTsKLQl9Ci0JYXRvbWljX2FkZChucG9zdGVkLCAmcG5vYi0+cnhfcV9wb3N0ZWQpOwotCXJldHVybiBucG9zdGVkOwotfQotCi12b2lkIGJlX3Bvc3RfZXRoX3J4X2J1ZmZzKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQl1MzIgbnVtX2J1ZnMsIHI7Ci0JdTY0IGJ1c2FkZHIgPSAwLCB0bXBfcGE7Ci0JdTMyIG1heF9idWZzLCBwZ19oZDsKLQl1MzIgZnJhZ19zaXplOwotCXN0cnVjdCBiZV9yZWN2X2J1ZmZlciAqcnhicDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4Ymw7Ci0Jc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcnhfcGFnZV9pbmZvOwotCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKLQl1MzIgcGFnZV9vcmRlciA9IDA7Ci0JZ2ZwX3QgYWxsb2NfZmxhZ3MgPSBHRlBfQVRPTUlDOwotCi0JQlVHX09OKCFhZGFwdGVyKTsKLQotCW1heF9idWZzID0gNjQ7CQkvKiBzaG91bGQgYmUgZXZlbiAjIDw9IDI1NS4gKi8KLQotCWZyYWdfc2l6ZSA9IHBub2ItPnJ4X2J1Zl9zaXplOwotCXBhZ2Vfb3JkZXIgPSBnZXRfb3JkZXIoZnJhZ19zaXplKTsKLQotCWlmIChmcmFnX3NpemUgPT0gODE5MikKLQkJYWxsb2NfZmxhZ3MgfD0gKGdmcF90KSBfX0dGUF9DT01QOwotCS8qCi0JICogRm9ybSBhIGxpbmtlZCBsaXN0IG9mIFJFQ1ZfQlVGRkZFUiBzdHJ1Y3R1cmUgdG8gYmUgYmUgcG9zdGVkLgotCSAqIFdlIHdpbGwgcG9zdCBldmVuIG51bWJlciBvZiBidWZmZXIgc28gdGhhdCBwYWdlcyBjYW4gYmUKLQkgKiBzaGFyZWQuCi0JICovCi0JSU5JVF9MSVNUX0hFQUQoJnJ4YmwpOwotCi0JZm9yIChudW1fYnVmcyA9IDA7IG51bV9idWZzIDwgbWF4X2J1ZnMgJiYKLQkJIXBub2ItPnJ4X3BhZ2VfaW5mb1twbm9iLT5yeF9wZ19pbmZvX2hkXS5wYWdlOyArK251bV9idWZzKSB7Ci0KLQkJcnhicCA9ICZwbm9iLT5ldGhfcnhfYnVmc1tudW1fYnVmc107Ci0JCXBnX2hkID0gcG5vYi0+cnhfcGdfaW5mb19oZDsKLQkJcnhfcGFnZV9pbmZvID0gJnBub2ItPnJ4X3BhZ2VfaW5mb1twZ19oZF07Ci0KLQkJaWYgKCFwYWdlKSB7Ci0JCQlwYWdlID0gYWxsb2NfcGFnZXMoYWxsb2NfZmxhZ3MsIHBhZ2Vfb3JkZXIpOwotCQkJaWYgKHVubGlrZWx5KHBhZ2UgPT0gTlVMTCkpIHsKLQkJCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19ldGhyeF9wb3N0X2ZhaWwrKzsKLQkJCQlwbm9iLT5yeGJ1Zl9wb3N0X2ZhaWwrKzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXBub2ItPnJ4YnVmX3Bvc3RfZmFpbCA9IDA7Ci0JCQlidXNhZGRyID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIHBhZ2UsIDAsCi0JCQkJCSAgICAgICBmcmFnX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlyeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJCXJ4X3BhZ2VfaW5mby0+cGFnZSA9IHBhZ2U7Ci0JCQkvKgotCQkJICogSWYgd2UgYXJlIHNoYXJpbmcgYSBwYWdlIGFtb25nIHR3byBza2JzLAotCQkJICogYWxsb2MgYSBuZXcgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgotCQkJICovCi0JCQlpZiAocG5vYi0+cnhfcGdfc2hhcmVkID09IGZhbHNlKQotCQkJCXBhZ2UgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQlyeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0ICs9IGZyYWdfc2l6ZTsKLQkJCXJ4X3BhZ2VfaW5mby0+cGFnZSA9IHBhZ2U7Ci0JCQkvKgotCQkJICogV2UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIGFsbG9jZWQgcGFnZSwKLQkJCSAqIEFsbG9jIGEgbmV3IG9uZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24KLQkJCSAqLwotCQkJcGFnZSA9IE5VTEw7Ci0JCX0KLQkJcnhicC0+cnhiX2N0eHQgPSAodm9pZCAqKXJ4X3BhZ2VfaW5mbzsKLQkJaW5kZXhfaW5jKCZwbm9iLT5yeF9wZ19pbmZvX2hkLCBwbm9iLT5yeF9xX2xlbik7Ci0KLQkJcGNpX3VubWFwX2FkZHJfc2V0KHJ4X3BhZ2VfaW5mbywgYnVzLCBidXNhZGRyKTsKLQkJdG1wX3BhID0gYnVzYWRkciArIHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7Ci0JCXJ4YnAtPnJ4Yl9wYV9sbyA9ICh0bXBfcGEgJiAweEZGRkZGRkZGKTsKLQkJcnhicC0+cnhiX3BhX2hpID0gKHRtcF9wYSA+PiAzMik7Ci0JCXJ4YnAtPnJ4Yl9sZW4gPSBmcmFnX3NpemU7Ci0JCWxpc3RfYWRkX3RhaWwoJnJ4YnAtPnJ4Yl9saXN0LCAmcnhibCk7Ci0JfQkJCS8qIEVuZCBvZiBmb3IgKi8KLQotCXIgPSBwb3N0X3J4X2J1ZmZzKHBub2IsICZyeGJsKTsKLQlCVUdfT04ociAhPSBudW1fYnVmcyk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogSW50ZXJydXB0IHNlcnZpY2UgZm9yIG5ldHdvcmsgZnVuY3Rpb24uICBXZSBqdXN0IHNjaGVkdWxlIHRoZQotICogdGFza2xldCB3aGljaCBkb2VzIGFsbCBjb21wbGV0aW9uIHByb2Nlc3NpbmcuCi0gKi8KLWlycXJldHVybl90IGJlX2ludChpbnQgaXJxLCB2b2lkICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldjsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXUzMiBpc3I7Ci0KLQlpc3IgPSBDU1JfUkVBRCgmcG5vYi0+Zm5fb2JqLCBjZXYuaXNyMSk7Ci0JaWYgKHVubGlrZWx5KCFpc3IpKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlzcGluX2xvY2soJmFkYXB0ZXItPmludF9sb2NrKTsKLQlhZGFwdGVyLT5pc3IgfD0gaXNyOwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5pbnRfbG9jayk7Ci0KLQlhZGFwdGVyLT5iZV9zdGF0LmJlc19pbnRzKys7Ci0KLQl0YXNrbGV0X3NjaGVkdWxlKCZhZGFwdGVyLT5zdHNfaGFuZGxlcik7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKgotICogUG9sbCBmdW5jdGlvbiBjYWxsZWQgYnkgTkFQSSB3aXRoIGEgd29yayBidWRnZXQuCi0gKiBXZSBwcm9jZXNzIGFzIG1hbnkgVUMuIEJDIGFuZCBNQyByZWNlaXZlIGNvbXBsZXRpb25zCi0gKiBhcyB0aGUgYnVkZ2V0IGFsbG93cyBhbmQgcmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mCi0gKiBSWCBzdHN0dXRzZXMgcHJvY2Vzc2VkLgotICovCi1pbnQgYmVfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPQotCQkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBiZV9uZXRfb2JqZWN0LCBuYXBpKTsKLQl1MzIgd29ya19kb25lOwotCi0JcG5vYi0+YWRhcHRlci0+YmVfc3RhdC5iZXNfcG9sbHMrKzsKLQl3b3JrX2RvbmUgPSBwcm9jZXNzX3J4X2NvbXBsZXRpb25zKHBub2IsIGJ1ZGdldCk7Ci0JQlVHX09OKHdvcmtfZG9uZSA+IGJ1ZGdldCk7Ci0KLQkvKiBBbGwgY29uc3VtZWQgKi8KLQlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQkvKiBlbmFibGUgaW50ciAqLwotCQliZV9ub3RpZnlfY21wbChwbm9iLCB3b3JrX2RvbmUsIHBub2ItPnJ4X2NxX2lkLCAxKTsKLQl9IGVsc2UgewotCQkvKiBNb3JlIHRvIGJlIGNvbnN1bWVkOyBjb250aW51ZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQkJYmVfbm90aWZ5X2NtcGwocG5vYiwgd29ya19kb25lLCBwbm9iLT5yeF9jcV9pZCwgMCk7Ci0JfQotCXJldHVybiB3b3JrX2RvbmU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgRVFfRU5UUllfQU1BUCAqZ2V0X2V2ZW50KHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBFUV9FTlRSWV9BTUFQICplcXAgPSAmKHBub2ItPmV2ZW50X3FbcG5vYi0+ZXZlbnRfcV90bF0pOwotCWlmICghQU1BUF9HRVRfQklUU19QVFIoRVFfRU5UUlksIFZhbGlkLCBlcXApKQotCQlyZXR1cm4gTlVMTDsKLQliZV9hZHZfZXFfdGwocG5vYik7Ci0JcmV0dXJuIGVxcDsKLX0KLQotLyoKLSAqIFByb2Nlc3NlcyBhbGwgdmFsaWQgZXZlbnRzIGluIHRoZSBldmVudCByaW5nIGFzc29jaWF0ZWQgd2l0aCBnaXZlbgotICogTmV0T2JqZWN0LiAgQWxzbywgbm90aWZpZXMgQkUgdGhlIG51bWJlciBvZiBldmVudHMgcHJvY2Vzc2VkLgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBwcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0Jc3RydWN0IEVRX0VOVFJZX0FNQVAgKmVxcDsKLQl1MzIgcmlkLCBudW1fZXZlbnRzID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcG5vYi0+bmV0ZGV2OwotCi0Jd2hpbGUgKChlcXAgPSBnZXRfZXZlbnQocG5vYikpICE9IE5VTEwpIHsKLQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfZXZlbnRzKys7Ci0JCXJpZCA9IEFNQVBfR0VUX0JJVFNfUFRSKEVRX0VOVFJZLCBSZXNvdXJjZUlELCBlcXApOwotCQlpZiAocmlkID09IHBub2ItPnJ4X2NxX2lkKSB7Ci0JCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9ldmVudHMrKzsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZwbm9iLT5uYXBpKTsKLQkJfSBlbHNlIGlmIChyaWQgPT0gcG5vYi0+dHhfY3FfaWQpIHsKLQkJCXByb2Nlc3NfbmljX3R4X2NvbXBsZXRpb25zKHBub2IpOwotCQl9IGVsc2UgaWYgKHJpZCA9PSBwbm9iLT5tY2NfY3FfaWQpIHsKLQkJCWJlX21jY19wcm9jZXNzX2NxKCZwbm9iLT5tY2NfcV9vYmosIDEpOwotCQl9IGVsc2UgewotCQkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LAotCQkJCQkiSW52YWxpZCBFUSBSZXNvdXJjZUlEICVkXG4iLCByaWQpOwotCQl9Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0VOVFJZLCBWYWxpZCwgZXFwLCAwKTsKLQkJQU1BUF9TRVRfQklUU19QVFIoRVFfRU5UUlksIFJlc291cmNlSUQsIGVxcCwgMCk7Ci0JCW51bV9ldmVudHMrKzsKLQl9Ci0JcmV0dXJuIG51bV9ldmVudHM7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9lcWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IGJlX2VxX29iamVjdCAqZXFfb2JqZWN0cDsKLQotCS8qIHVwZGF0ZSBvbmNlIGEgc2Vjb25kICovCi0JaWYgKChqaWZmaWVzIC0gYWRhcHRlci0+aXBzX2ppZmZpZXMpID4gMSAqIChIWikpIHsKLQkJLyogT25lIHNlY29uZCBlbGFwc2VkIHNpbmNlIGxhc3QgdXBkYXRlICAqLwotCQl1MzIgciwgbmV3X2VxZCA9IC0xOwotCQlyID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfaW50cyAtIGFkYXB0ZXItPmJlX3N0YXQuYmVzX3ByZXZfaW50czsKLQkJciA9IHIgLyAoKGppZmZpZXMgLSBhZGFwdGVyLT5pcHNfamlmZmllcykgLyAoSFopKTsKLQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfaXBzID0gcjsKLQkJYWRhcHRlci0+aXBzX2ppZmZpZXMgPSBqaWZmaWVzOwotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19wcmV2X2ludHMgPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19pbnRzOwotCQlpZiAociA+IElQU19ISV9XTSAmJiBhZGFwdGVyLT5jdXJfZXFkIDwgYWRhcHRlci0+bWF4X2VxZCkKLQkJCW5ld19lcWQgPSAoYWRhcHRlci0+Y3VyX2VxZCArIDgpOwotCQlpZiAociA8IElQU19MT19XTSAmJiBhZGFwdGVyLT5jdXJfZXFkID4gYWRhcHRlci0+bWluX2VxZCkKLQkJCW5ld19lcWQgPSAoYWRhcHRlci0+Y3VyX2VxZCAtIDgpOwotCQlpZiAoYWRhcHRlci0+ZW5hYmxlX2FpYyAmJiBuZXdfZXFkICE9IC0xKSB7Ci0JCQllcV9vYmplY3RwID0gJnBub2ItPmV2ZW50X3Ffb2JqOwotCQkJc3RhdHVzID0gYmVfZXFfbW9kaWZ5X2RlbGF5KCZwbm9iLT5mbl9vYmosIDEsCi0JCQkJCQkgICAgJmVxX29iamVjdHAsICZuZXdfZXFkLCBOVUxMLAotCQkJCQkJICAgIE5VTEwsIE5VTEwpOwotCQkJaWYgKHN0YXR1cyA9PSBCRV9TVUNDRVNTKQotCQkJCWFkYXB0ZXItPmN1cl9lcWQgPSBuZXdfZXFkOwotCQl9Ci0JfQotfQotCi0vKgotICAgIFRoaXMgZnVuY3Rpb24gbm90aWZpZXMgQmxhZGVFbmdpbmUgb2YgaG93IG1hbnkgZXZlbnRzIHdlcmUgcHJvY2Vzc2VkCi0gICAgZnJvbSB0aGUgZXZlbnQgcXVldWUgYnkgcmluZ2luZyB0aGUgY29ycmVzcG9uZGluZyBkb29yIGJlbGwgYW5kCi0gICAgb3B0aW9uYWxseSByZS1hcm1zIHRoZSBldmVudCBxdWV1ZS4KLSAgICBuCQktIG51bWJlciBvZiBldmVudHMgcHJvY2Vzc2VkCi0gICAgcmVfYXJtCS0gMSAtIHJlLWFybSB0aGUgRVEsIDAgLSBkbyBub3QgcmUtYXJtIHRoZSBFUQotCi0qLwotc3RhdGljIHZvaWQgYmVfbm90aWZ5X2V2ZW50KHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLCBpbnQgbiwgaW50IHJlX2FybSkKLXsKLQlzdHJ1Y3QgQ1FfREJfQU1BUCBlcWRiOwotCWVxZGIuZHdbMF0gPSAwOwotCi0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHFpZCwgJmVxZGIsIHBub2ItPmV2ZW50X3FfaWQpOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCByZWFybSwgJmVxZGIsIHJlX2FybSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIGV2ZW50LCAmZXFkYiwgMSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIG51bV9wb3BwZWQsICZlcWRiLCBuKTsKLQkvKgotCSAqIFVuZGVyIHNvbWUgc2l0dWF0aW9ucyB3ZSBzZWUgYW4gaW50ZXJydXB0IGFuZCBubyB2YWxpZAotCSAqIEVRIGVudHJ5LiAgVG8ga2VlcCBnb2luZywgd2UgbmVlZCB0byByaW5nIHRoZSBEQiBldmVuIGlmCi0JICogbnVtUE9zdGVkIGlzIDAuCi0JICovCi0JUERfV1JJVEUoJnBub2ItPmZuX29iaiwgY3FfZGIsIGVxZGIuZHdbMF0pOwotCXJldHVybjsKLX0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHRoZSB0YXNrbGV0IHNjaGVkdWxlZCBieSBJU1IuICBBbGwgcmVhbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZwotICogaXMgZG9uZSBoZXJlLgotICovCi12b2lkIGJlX3Byb2Nlc3NfaW50cih1bnNpZ25lZCBsb25nIGNvbnRleHQpCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGJlX2FkYXB0ZXIgKiljb250ZXh0OwotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gYWRhcHRlci0+bmV0X29iajsKLQl1MzIgaXNyLCBuOwotCXVsb25nIGZsYWdzID0gMDsKLQotCWlzciA9IGFkYXB0ZXItPmlzcjsKLQotCS8qCi0JICogd2UgY3JlYXRlIG9ubHkgb25lIE5JQyBldmVudCBxdWV1ZSBpbiBMaW51eC4gRXZlbnQgaXMKLQkgKiBleHBlY3RlZCBvbmx5IGluIHRoZSBmaXJzdCBldmVudCBxdWV1ZQotCSAqLwotCUJVR19PTihpc3IgJiAweGZmZmZmZmZlKTsKLQlpZiAoKGlzciAmIDEpID09IDApCi0JCXJldHVybjsJCS8qIG5vdCBvdXIgaW50ZXJydXB0ICovCi0JbiA9IHByb2Nlc3NfZXZlbnRzKHBub2IpOwotCS8qCi0JICogQ2xlYXIgdGhlIGV2ZW50IGJpdC4gYWRhcHRlci0+aXNyIGlzICBzZXQgYnkKLQkgKiBoYXJkIGludGVycnVwdC4gIFByZXZlbnQgcmFjZSB3aXRoIGxvY2suCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmludF9sb2NrLCBmbGFncyk7Ci0JYWRhcHRlci0+aXNyICY9IH4xOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmludF9sb2NrLCBmbGFncyk7Ci0JYmVfbm90aWZ5X2V2ZW50KHBub2IsIG4sIDEpOwotCS8qCi0JICogSWYgcHJldmlvdXMgYWxsb2NhdGlvbiBhdHRlbXB0cyBoYWQgZmFpbGVkIGFuZAotCSAqIEJFIGhhcyB1c2VkIHVwIGFsbCBwb3N0ZWQgYnVmZmVycywgcG9zdCBSWCBidWZmZXJzIGhlcmUKLQkgKi8KLQlpZiAocG5vYi0+cnhidWZfcG9zdF9mYWlsICYmIGF0b21pY19yZWFkKCZwbm9iLT5yeF9xX3Bvc3RlZCkgPT0gMCkKLQkJYmVfcG9zdF9ldGhfcnhfYnVmZnMocG5vYik7Ci0JdXBkYXRlX2VxZChhZGFwdGVyLCBwbm9iKTsKLQlyZXR1cm47Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfbmV0aWYuYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9uZXRpZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjhkYWY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9uZXRpZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBiZV9uZXRpZi5jCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgZW50cnkgcG9pbnRzIG9mIGRyaXZlcnMgc2VlbiBieSB0Y3AvaXAgc3RhY2suCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgImJlbmV0LmgiCi0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgotCi0vKiBTdHJpbmdzIHRvIHByaW50IExpbmsgcHJvcGVydGllcyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmxpbmtfc3BlZWRbXSA9IHsKLQkiSW52YWxpZCBsaW5rIFNwZWVkIFZhbHVlIiwKLQkiMTAgTWJwcyIsCi0JIjEwMCBNYnBzIiwKLQkiMSBHYnBzIiwKLQkiMTAgR2JwcyIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpsaW5rX2R1cGxleFtdID0gewotCSJJbnZhbGlkIER1cGxleCBWYWx1ZSIsCi0JIkhhbGYgRHVwbGV4IiwKLQkiRnVsbCBEdXBsZXgiCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqbGlua19zdGF0ZVtdID0gewotCSIiLAotCSIoYWN0aXZlKSIKLX07Ci0KLXZvaWQgYmVfcHJpbnRfbGlua19pbmZvKHN0cnVjdCBCRV9MSU5LX1NUQVRVUyAqbG5rX3N0YXR1cykKLXsKLQl1MTYgc2ksIGRpLCBhaTsKLQotCS8qIFBvcnQgMCAqLwotCWlmIChsbmtfc3RhdHVzLT5tYWMwX3NwZWVkICYmIGxua19zdGF0dXMtPm1hYzBfZHVwbGV4KSB7Ci0JCS8qIFBvcnQgaXMgdXAgYW5kIHJ1bm5pbmcgKi8KLQkJc2kgPSAobG5rX3N0YXR1cy0+bWFjMF9zcGVlZCA8IDUpID8gbG5rX3N0YXR1cy0+bWFjMF9zcGVlZCA6IDA7Ci0JCWRpID0gKGxua19zdGF0dXMtPm1hYzBfZHVwbGV4IDwgMykgPwotCQkgICAgbG5rX3N0YXR1cy0+bWFjMF9kdXBsZXggOiAwOwotCQlhaSA9IChsbmtfc3RhdHVzLT5hY3RpdmVfcG9ydCA9PSAwKSA/IDEgOiAwOwotCQlwcmludGsoS0VSTl9JTkZPICJQb3J0Tm8uIDA6IFNwZWVkIC0gJXMgJXMgJXNcbiIsCi0JCSAgICAgICBsaW5rX3NwZWVkW3NpXSwgbGlua19kdXBsZXhbZGldLCBsaW5rX3N0YXRlW2FpXSk7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIlBvcnROby4gMDogRG93blxuIik7Ci0KLQkvKiBQb3J0IDEgKi8KLQlpZiAobG5rX3N0YXR1cy0+bWFjMV9zcGVlZCAmJiBsbmtfc3RhdHVzLT5tYWMxX2R1cGxleCkgewotCQkvKiBQb3J0IGlzIHVwIGFuZCBydW5uaW5nICovCi0JCXNpID0gKGxua19zdGF0dXMtPm1hYzFfc3BlZWQgPCA1KSA/IGxua19zdGF0dXMtPm1hYzFfc3BlZWQgOiAwOwotCQlkaSA9IChsbmtfc3RhdHVzLT5tYWMxX2R1cGxleCA8IDMpID8KLQkJICAgIGxua19zdGF0dXMtPm1hYzFfZHVwbGV4IDogMDsKLQkJYWkgPSAobG5rX3N0YXR1cy0+YWN0aXZlX3BvcnQgPT0gMCkgPyAxIDogMDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUG9ydE5vLiAxOiBTcGVlZCAtICVzICVzICVzXG4iLAotCQkgICAgICAgbGlua19zcGVlZFtzaV0sIGxpbmtfZHVwbGV4W2RpXSwgbGlua19zdGF0ZVthaV0pOwotCX0gZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJQb3J0Tm8uIDE6IERvd25cbiIpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50Ci1iZV9nZXRfZnJhZ19oZWFkZXIoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZywgdm9pZCAqKm1hY19oZHIsCi0JCSAgIHZvaWQgKippcF9oZHIsIHZvaWQgKip0Y3B1ZHBfaGRyLAotCQkgICB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgZXRoaGRyICplaDsKLQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZlaDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQl1OCAqdmEgPSBwYWdlX2FkZHJlc3MoZnJhZy0+cGFnZSkgKyBmcmFnLT5wYWdlX29mZnNldDsKLQl1bnNpZ25lZCBsb25nIGxsX2hsZW47Ci0KLQkvKiBmaW5kIHRoZSBtYWMgaGVhZGVyLCBhYm9ydCBpZiBub3QgSVB2NCAqLwotCi0JcHJlZmV0Y2godmEpOwotCWVoID0gKHN0cnVjdCBldGhoZHIgKil2YTsKLQkqbWFjX2hkciA9IGVoOwotCWxsX2hsZW4gPSBFVEhfSExFTjsKLQlpZiAoZWgtPmhfcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCWlmIChlaC0+aF9wcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJCXZlaCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKil2YTsKLQkJCWlmICh2ZWgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApKQotCQkJCXJldHVybiAtMTsKLQotCQkJbGxfaGxlbiArPSBWTEFOX0hMRU47Ci0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQ7Ci0KLQlpcGggPSAoc3RydWN0IGlwaGRyICopKHZhICsgbGxfaGxlbik7Ci0JKmlwX2hkciA9IGlwaDsKLQlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKLQkJcmV0dXJuIC0xOwotCSpoZHJfZmxhZ3MgfD0gTFJPX1RDUDsKLQkqdGNwdWRwX2hkciA9ICh1OCAqKSAoKmlwX2hkcikgKyAoaXBoLT5paGwgPDwgMik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3I7Ci0KLQlpZiAoYWRhcHRlci0+ZGV2X3N0YXRlIDwgQkVfREVWX1NUQVRFX0lOSVQpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JbHJvX21nciA9ICZwbm9iLT5scm9fbWdyOwotCWxyb19tZ3ItPmRldiA9IG5ldGRldjsKLQotCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPm1heF9kZXNjID0gQkVfTUFYX0xST19ERVNDUklQVE9SUzsKLQlscm9fbWdyLT5scm9fYXJyID0gcG5vYi0+bHJvX2Rlc2M7Ci0JbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gYmVfZ2V0X2ZyYWdfaGVhZGVyOwotCWxyb19tZ3ItPm1heF9hZ2dyID0gYWRhcHRlci0+bWF4X3J4X2NvYWw7Ci0JbHJvX21nci0+ZnJhZ19hbGlnbl9wYWQgPSAyOwotCWlmIChscm9fbWdyLT5tYXhfYWdnciA+IE1BWF9TS0JfRlJBR1MpCi0JCWxyb19tZ3ItPm1heF9hZ2dyID0gTUFYX1NLQl9GUkFHUzsKLQotCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gQkVfTFJPX01BWF9QS1RTOwotCi0JYmVfdXBkYXRlX2xpbmtfc3RhdHVzKGFkYXB0ZXIpOwotCi0JLyoKLQkgKiBTZXQgY2FycmllciBvbiBvbmx5IGlmIFBoeXNpY2FsIExpbmsgdXAKLQkgKiBFaXRoZXIgb2YgdGhlIHBvcnQgbGluayBzdGF0dXMgdXAgc2lnbmlmaWVzIHRoaXMKLQkgKi8KLQlpZiAoKGFkYXB0ZXItPnBvcnQwX2xpbmtfc3RzID09IEJFX1BPUlRfTElOS19VUCkgfHwKLQkgICAgKGFkYXB0ZXItPnBvcnQxX2xpbmtfc3RzID09IEJFX1BPUlRfTElOS19VUCkpIHsKLQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKLQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwotCX0KLQotCWFkYXB0ZXItPmRldl9zdGF0ZSA9IEJFX0RFVl9TVEFURV9PUEVOOwotCW5hcGlfZW5hYmxlKCZwbm9iLT5uYXBpKTsKLQliZV9lbmFibGVfaW50cihwbm9iKTsKLQliZV9lbmFibGVfZXFfaW50cihwbm9iKTsKLQkvKgotCSAqIFJYIGNvbXBsZXRpb24gcXVldWUgbWF5IGJlIGluIGRpcy1hcm1lZCBzdGF0ZS4gQXJtIGl0LgotCSAqLwotCWJlX25vdGlmeV9jbXBsKHBub2IsIDAsIHBub2ItPnJ4X2NxX2lkLCAxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJlbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQlzeW5jaHJvbml6ZV9pcnEobmV0ZGV2LT5pcnEpOwotCi0JYmVfd2FpdF9uaWNfdHhfY21wbHhfY21wbChwbm9iKTsKLQlhZGFwdGVyLT5kZXZfc3RhdGUgPSBCRV9ERVZfU1RBVEVfSU5JVDsKLQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCi0JYWRhcHRlci0+cG9ydDBfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfRE9XTjsKLQlhZGFwdGVyLT5wb3J0MV9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19ET1dOOwotCWJlX2Rpc2FibGVfaW50cihwbm9iKTsKLQliZV9kaXNhYmxlX2VxX2ludHIocG5vYik7Ci0JbmFwaV9kaXNhYmxlKCZwbm9iLT5uYXBpKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0dGluZyBhIE1hYyBBZGRyZXNzIGZvciBCRQotICogVGFrZXMgbmV0ZGV2IGFuZCBhIHZvaWQgcG9pbnRlciBhcyBhcmd1bWVudHMuCi0gKiBUaGUgcG9pbnRlciBob2xkcyB0aGUgbmV3IGFkZHJlcyB0byBiZSB1c2VkLgotICovCi1zdGF0aWMgaW50IGJlbmV0X3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCWJlX3J4Zl9tYWNfYWRkcmVzc19yZWFkX3dyaXRlKCZwbm9iLT5mbl9vYmosIDAsIDAsIGZhbHNlLCB0cnVlLCBmYWxzZSwKLQkJCQluZXRkZXYtPmRldl9hZGRyLCBOVUxMLCBOVUxMKTsKLQkvKgotCSAqIFNpbmNlIHdlIGFyZSBkb2luZyBBY3RpdmUtUGFzc2l2ZSBmYWlsb3ZlciwgYm90aAotCSAqIHBvcnRzIHNob3VsZCBoYXZlIG1hdGNoaW5nIE1BQyBhZGRyZXNzZXMgZXZlcnl0aW1lLgotCSAqLwotCWJlX3J4Zl9tYWNfYWRkcmVzc19yZWFkX3dyaXRlKCZwbm9iLT5mbl9vYmosIDEsIDAsIGZhbHNlLCB0cnVlLCBmYWxzZSwKLQkJCQkgICAgICBuZXRkZXYtPmRldl9hZGRyLCBOVUxMLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGJlX2dldF9zdGF0c190aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgY29udGV4dCkKLXsKLQlzdHJ1Y3QgYmVfdGltZXJfY3R4dCAqY3R4dCA9IChzdHJ1Y3QgYmVfdGltZXJfY3R4dCAqKWNvbnRleHQ7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmN0eHQtPmdldF9zdGF0X2ZsYWcpKSB7Ci0JCWF0b21pY19kZWMoJmN0eHQtPmdldF9zdGF0X2ZsYWcpOwotCQl1cCgodm9pZCAqKWN0eHQtPmdldF9zdGF0X3NlbV9hZGRyKTsKLQl9Ci0JZGVsX3RpbWVyKCZjdHh0LT5nZXRfc3RhdHNfdGltZXIpOwotCXJldHVybjsKLX0KLQotdm9pZCBiZV9nZXRfc3RhdF9jYih2b2lkICpjb250ZXh0LCBpbnQgc3RhdHVzLAotCQkgICAgc3RydWN0IE1DQ19XUkJfQU1BUCAqb3B0aW9uYWxfd3JiKQotewotCXN0cnVjdCBiZV90aW1lcl9jdHh0ICpjdHh0ID0gKHN0cnVjdCBiZV90aW1lcl9jdHh0ICopY29udGV4dDsKLQkvKgotCSAqIGp1c3QgdXAgdGhlIHNlbWFwaG9yZSBpZiB0aGUgZ2V0X3N0YXRfZmxhZwotCSAqIHJlYWRzIDEuIHNvIHRoYXQgdGhlIHdhaXRlciBjYW4gY29udGludWUuCi0JICogSWYgaXQgaXMgMCwgdGhlbiBpdCB3YXMgaGFuZGxlZCBieSB0aGUgdGltZXIgaGFuZGxlci4KLQkgKi8KLQlkZWxfdGltZXIoJmN0eHQtPmdldF9zdGF0c190aW1lcik7Ci0JaWYgKGF0b21pY19yZWFkKCZjdHh0LT5nZXRfc3RhdF9mbGFnKSkgewotCQlhdG9taWNfZGVjKCZjdHh0LT5nZXRfc3RhdF9mbGFnKTsKLQkJdXAoKHZvaWQgKiljdHh0LT5nZXRfc3RhdF9zZW1fYWRkcik7Ci0JfQotfQotCi1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYmVuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQl1NjQgcGE7Ci0Jc3RydWN0IGJlX3RpbWVyX2N0eHQgKmN0eHQgPSAmYWRhcHRlci0+dGltZXJfY3R4dDsKLQotCWlmIChhZGFwdGVyLT5kZXZfc3RhdGUgIT0gQkVfREVWX1NUQVRFX09QRU4pIHsKLQkJLyogUmV0dXJuIHByZXZpb3VzbHkgcmVhZCBzdGF0cyAqLwotCQlyZXR1cm4gJihhZGFwdGVyLT5iZW5ldF9zdGF0cyk7Ci0JfQotCS8qIEdldCBQaHlzaWNhbCBBZGRyICovCi0JcGEgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5ldGhfc3RhdHNwLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgRldDTURfRVRIX0dFVF9TVEFUSVNUSUNTKSwKLQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCWN0eHQtPmdldF9zdGF0X3NlbV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpJmFkYXB0ZXItPmdldF9ldGhfc3RhdF9zZW07Ci0JYXRvbWljX2luYygmY3R4dC0+Z2V0X3N0YXRfZmxhZyk7Ci0KLQliZV9yeGZfcXVlcnlfZXRoX3N0YXRpc3RpY3MoJnBub2ItPmZuX29iaiwgYWRhcHRlci0+ZXRoX3N0YXRzcCwKLQkJCQkgICAgY3B1X3RvX2xlNjQocGEpLCBiZV9nZXRfc3RhdF9jYiwgY3R4dCwKLQkJCQkgICAgTlVMTCk7Ci0KLQljdHh0LT5nZXRfc3RhdHNfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWN0eHQ7Ci0JbW9kX3RpbWVyKCZjdHh0LT5nZXRfc3RhdHNfdGltZXIsIChqaWZmaWVzICsgKEhaICogMikpKTsKLQlkb3duKCh2b2lkICopY3R4dC0+Z2V0X3N0YXRfc2VtX2FkZHIpOwkvKiBjYWxsYmFjayB3aWxsIHVuYmxvY2sgdXMgKi8KLQotCS8qIEFkZGluZyBwb3J0MCBhbmQgcG9ydDEgc3RhdHMuICovCi0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfcGFja2V0cyA9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMHJlY3ZkdG90YWxmcmFtZXMgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDFyZWN2ZHRvdGFsZnJhbWVzOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnR4X3BhY2tldHMgPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDB4bWl0dW5pY2FzdGZyYW1lcyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMXhtaXR1bmljYXN0ZnJhbWVzOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnR4X2J5dGVzID0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAweG1pdGJ5dGVzbHNkICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxeG1pdGJ5dGVzbHNkOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnJ4X2Vycm9ycyA9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMGNyY2Vycm9ycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMWNyY2Vycm9yczsKLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy5yeF9lcnJvcnMgKz0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwYWxpZ25tZW50c3ltZXJycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMWFsaWdubWVudHN5bWVycnM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfZXJyb3JzICs9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMGlucmFuZ2VsZW5lcnJvcnMgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDFpbnJhbmdlbGVuZXJyb3JzOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnJ4X2J5dGVzID0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwcmVjdmR0b3RhbGJ5dGVzTFNEICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxcmVjdmR0b3RhbGJ5dGVzTFNEOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnJ4X2NyY19lcnJvcnMgPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDBjcmNlcnJvcnMgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDFjcmNlcnJvcnM7Ci0KLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy50eF9wYWNrZXRzICs9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMHhtaXRtdWx0aWNhc3RmcmFtZXMgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDF4bWl0bXVsdGljYXN0ZnJhbWVzOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnR4X3BhY2tldHMgKz0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAweG1pdGJyb2FkY2FzdGZyYW1lcyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMXhtaXRicm9hZGNhc3RmcmFtZXM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMudHhfZXJyb3JzID0gMDsKLQotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLm11bHRpY2FzdCA9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMHhtaXRtdWx0aWNhc3RmcmFtZXMgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDF4bWl0bXVsdGljYXN0ZnJhbWVzOwotCi0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfZmlmb19lcnJvcnMgPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDByeGZpZm9vdmVyZmxvd2Ryb3BwZWQgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDFyeGZpZm9vdmVyZmxvd2Ryb3BwZWQ7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfZnJhbWVfZXJyb3JzID0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwYWxpZ25tZW50c3ltZXJycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMWFsaWdubWVudHN5bWVycnM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMGlucmFuZ2VsZW5lcnJvcnMgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDFpbnJhbmdlbGVuZXJyb3JzOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwb3V0cmFuZ2VlcnJvcnMgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDFvdXRyYW5nZWVycm9yczsKLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzICs9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMGZyYW1ldG9vbG9uZ2Vycm9ycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMWZyYW1ldG9vbG9uZ2Vycm9yczsKLQotCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgKHVsb25nKSBhZGFwdGVyLT5ldGhfc3RhdHNwLAotCQkJIHNpemVvZihzdHJ1Y3QgRldDTURfRVRIX0dFVF9TVEFUSVNUSUNTKSwKLQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCXJldHVybiAmKGFkYXB0ZXItPmJlbmV0X3N0YXRzKTsKLQotfQotCi1zdGF0aWMgdm9pZCBiZV9zdGFydF90eChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgdTMyIG5wb3N0ZWQpCi17Ci0jZGVmaW5lIENTUl9FVEhfTUFYX1NRUE9TVFMgMjU1Ci0Jc3RydWN0IFNRX0RCX0FNQVAgc3FkYjsKLQotCXNxZGIuZHdbMF0gPSAwOwotCi0JQU1BUF9TRVRfQklUU19QVFIoU1FfREIsIGNpZCwgJnNxZGIsIHBub2ItPnR4X3FfaWQpOwotCXdoaWxlIChucG9zdGVkKSB7Ci0JCWlmIChucG9zdGVkID4gQ1NSX0VUSF9NQVhfU1FQT1NUUykgewotCQkJQU1BUF9TRVRfQklUU19QVFIoU1FfREIsIG51bVBvc3RlZCwgJnNxZGIsCi0JCQkJCSAgQ1NSX0VUSF9NQVhfU1FQT1NUUyk7Ci0JCQlucG9zdGVkIC09IENTUl9FVEhfTUFYX1NRUE9TVFM7Ci0JCX0gZWxzZSB7Ci0JCQlBTUFQX1NFVF9CSVRTX1BUUihTUV9EQiwgbnVtUG9zdGVkLCAmc3FkYiwgbnBvc3RlZCk7Ci0JCQlucG9zdGVkID0gMDsKLQkJfQotCQlQRF9XUklURSgmcG5vYi0+Zm5fb2JqLCBldHhfc3FfZGIsIHNxZGIuZHdbMF0pOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX3R4X3JhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JLyogdXBkYXRlIHRoZSByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KLQlpZiAoKGppZmZpZXMgLSBhZGFwdGVyLT5ldGhfdHhfamlmZmllcykgPiAyICogKEhaKSkgewotCQl1MzIgcjsKLQkJciA9IGFkYXB0ZXItPmV0aF90eF9ieXRlcyAvCi0JCSAgICAoKGppZmZpZXMgLSBhZGFwdGVyLT5ldGhfdHhfamlmZmllcykgLyAoSFopKTsKLQkJciA9IChyIC8gMTAwMDAwMCk7CS8qIE0gYnl0ZXMvcyAqLwotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19ldGhfdHhfcmF0ZSA9IChyICogOCk7IC8qIE0gYml0cy9zICovCi0JCWFkYXB0ZXItPmV0aF90eF9qaWZmaWVzID0gamlmZmllczsKLQkJYWRhcHRlci0+ZXRoX3R4X2J5dGVzID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgd3JiX2NudF9pbl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgY250ID0gMDsKLQl3aGlsZSAoc2tiKSB7Ci0JCWlmIChza2ItPmxlbiA+IHNrYi0+ZGF0YV9sZW4pCi0JCQljbnQrKzsKLQkJY250ICs9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCXNrYiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OwotCX0KLQlCVUdfT04oY250ID4gQkVfTUFYX1RYX0ZSQUdfQ09VTlQpOwotCXJldHVybiBjbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyYl9maWxsKHN0cnVjdCBFVEhfV1JCX0FNQVAgKndyYiwgdTY0IGFkZHIsIGludCBsZW4pCi17Ci0JQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgZnJhZ19wYV9oaSwgd3JiLCBhZGRyID4+IDMyKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBmcmFnX3BhX2xvLCB3cmIsIGFkZHIgJiAweEZGRkZGRkZGKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBmcmFnX2xlbiwgd3JiLCBsZW4pOwotfQotCi1zdGF0aWMgdm9pZCB3cmJfZmlsbF9leHRyYShzdHJ1Y3QgRVRIX1dSQl9BTUFQICp3cmIsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQl3cmItPmR3WzJdID0gMDsKLQl3cmItPmR3WzNdID0gMDsKLQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBjcmMsIHdyYiwgMSk7Ci0JaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPiAxICYmIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpIHsKLQkJQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgbHNvLCB3cmIsIDEpOwotCQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBsc29fbXNzLCB3cmIsCi0JCQkJICBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKLQl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJdTggcHJvdG8gPSAoKHN0cnVjdCBpcGhkciAqKWlwX2hkcihza2IpKS0+cHJvdG9jb2w7Ci0JCWlmIChwcm90byA9PSBJUFBST1RPX1RDUCkKLQkJCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIHRjcGNzLCB3cmIsIDEpOwotCQllbHNlIGlmIChwcm90byA9PSBJUFBST1RPX1VEUCkKLQkJCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIHVkcGNzLCB3cmIsIDEpOwotCX0KLQlpZiAocG5vYi0+dmxhbl9ncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIHZsYW4sIHdyYiwgMSk7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIHZsYW5fdGFnLCB3cmIsIHZsYW5fdHhfdGFnX2dldChza2IpKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cmJfY29weV9leHRyYShzdHJ1Y3QgRVRIX1dSQl9BTUFQICp0bywKLQkJCQkgIHN0cnVjdCBFVEhfV1JCX0FNQVAgKmZyb20pCi17Ci0KLQl0by0+ZHdbMl0gPSBmcm9tLT5kd1syXTsKLQl0by0+ZHdbM10gPSBmcm9tLT5kd1szXTsKLX0KLQotLyogUmV0dXJucyB0aGUgYWN0dWFsIGNvdW50IG9mIHdyYnMgdXNlZCBpbmNsdWRpbmcgYSBwb3NzaWJsZSBkdW1teSAqLwotc3RhdGljIGludCBjb3B5X3NrYl90b190eHEoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB1MzIgd3JiX2NudCwgdTMyICpjb3BpZWQpCi17Ci0JdTY0IGJ1c2FkZHI7Ci0Jc3RydWN0IEVUSF9XUkJfQU1BUCAqd3JiID0gTlVMTCwgKmZpcnN0ID0gTlVMTDsKLQl1MzIgaTsKLQlib29sIGR1bW15ID0gdHJ1ZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBub2ItPmFkYXB0ZXItPnBkZXY7Ci0KLQlpZiAod3JiX2NudCAmIDEpCi0JCXdyYl9jbnQrKzsKLQllbHNlCi0JCWR1bW15ID0gZmFsc2U7Ci0KLQlhdG9taWNfYWRkKHdyYl9jbnQsICZwbm9iLT50eF9xX3VzZWQpOwotCi0Jd2hpbGUgKHNrYikgewotCQlpZiAoc2tiLT5sZW4gPiBza2ItPmRhdGFfbGVuKSB7Ci0JCQlpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCQkJYnVzYWRkciA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgbGVuLAotCQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJYnVzYWRkciA9IGNwdV90b19sZTY0KGJ1c2FkZHIpOwotCQkJd3JiID0gJnBub2ItPnR4X3FbcG5vYi0+dHhfcV9oZF07Ci0JCQlpZiAoZmlyc3QgPT0gTlVMTCkgewotCQkJCXdyYl9maWxsX2V4dHJhKHdyYiwgc2tiLCBwbm9iKTsKLQkJCQlmaXJzdCA9IHdyYjsKLQkJCX0gZWxzZSB7Ci0JCQkJd3JiX2NvcHlfZXh0cmEod3JiLCBmaXJzdCk7Ci0JCQl9Ci0JCQl3cmJfZmlsbCh3cmIsIGJ1c2FkZHIsIGxlbik7Ci0JCQliZV9hZHZfdHhxX2hkKHBub2IpOwotCQkJKmNvcGllZCArPSBsZW47Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7Ci0JCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0KLQkJCSAgICAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQkJCWJ1c2FkZHIgPSBwY2lfbWFwX3BhZ2UocGRldiwgZnJhZy0+cGFnZSwKLQkJCQkJICAgICAgIGZyYWctPnBhZ2Vfb2Zmc2V0LCBmcmFnLT5zaXplLAotCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlidXNhZGRyID0gY3B1X3RvX2xlNjQoYnVzYWRkcik7Ci0JCQl3cmIgPSAmcG5vYi0+dHhfcVtwbm9iLT50eF9xX2hkXTsKLQkJCWlmIChmaXJzdCA9PSBOVUxMKSB7Ci0JCQkJd3JiX2ZpbGxfZXh0cmEod3JiLCBza2IsIHBub2IpOwotCQkJCWZpcnN0ID0gd3JiOwotCQkJfSBlbHNlIHsKLQkJCQl3cmJfY29weV9leHRyYSh3cmIsIGZpcnN0KTsKLQkJCX0KLQkJCXdyYl9maWxsKHdyYiwgYnVzYWRkciwgZnJhZy0+c2l6ZSk7Ci0JCQliZV9hZHZfdHhxX2hkKHBub2IpOwotCQkJKmNvcGllZCArPSBmcmFnLT5zaXplOwotCQl9Ci0JCXNrYiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OwotCX0KLQotCWlmIChkdW1teSkgewotCQl3cmIgPSAmcG5vYi0+dHhfcVtwbm9iLT50eF9xX2hkXTsKLQkJQlVHX09OKGZpcnN0ID09IE5VTEwpOwotCQl3cmJfY29weV9leHRyYSh3cmIsIGZpcnN0KTsKLQkJd3JiX2ZpbGwod3JiLCAwLCAwKTsKLQkJYmVfYWR2X3R4cV9oZChwbm9iKTsKLQl9Ci0JQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgY29tcGxldGUsIHdyYiwgMSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgbGFzdCwgd3JiLCAxKTsKLQlyZXR1cm4gd3JiX2NudDsKLX0KLQotLyogRm9yIGVhY2ggc2tiIHRyYW5zbWl0dGVkLCB0eF9jdHh0IHN0b3JlcyB0aGUgbnVtIG9mIHdyYnMgaW4gdGhlCi0gKiBzdGFydCBpbmRleCBhbmQgc2tiIHBvaW50ZXIgaW4gdGhlIGVuZCBpbmRleAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfdHhfd3JiX2luZm9fcmVtZW1iZXIoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIGludCB3cmJfY250LAotCQkJCQkgICB1MzIgc3RhcnQpCi17Ci0JKih1MzIgKikgKCZwbm9iLT50eF9jdHh0W3N0YXJ0XSkgPSB3cmJfY250OwotCWluZGV4X2Fkdigmc3RhcnQsIHdyYl9jbnQgLSAxLCBwbm9iLT50eF9xX2xlbik7Ci0JcG5vYi0+dHhfY3R4dFtzdGFydF0gPSBza2I7Ci19Ci0KLXN0YXRpYyBpbnQgYmVuZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0JdTMyIHdyYl9jbnQsIGNvcGllZCA9IDA7Ci0JdTMyIHN0YXJ0ID0gcG5vYi0+dHhfcV9oZDsKLQotCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3R4X3JlcXMrKzsKLQotCXdyYl9jbnQgPSB3cmJfY250X2luX3NrYihza2IpOwotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+dHhxX2xvY2spOwotCWlmICgocG5vYi0+dHhfcV9sZW4gLSAyIC0gYXRvbWljX3JlYWQoJnBub2ItPnR4X3FfdXNlZCkpIDw9IHdyYl9jbnQpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShwbm9iLT5uZXRkZXYpOwotCQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+dHhxX2xvY2spOwotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc190eF9mYWlscysrOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT50eHFfbG9jayk7Ci0KLQl3cmJfY250ID0gY29weV9za2JfdG9fdHhxKHBub2IsIHNrYiwgd3JiX2NudCwgJmNvcGllZCk7Ci0JYmVfdHhfd3JiX2luZm9fcmVtZW1iZXIocG5vYiwgc2tiLCB3cmJfY250LCBzdGFydCk7Ci0KLQliZV9zdGFydF90eChwbm9iLCB3cmJfY250KTsKLQotCWFkYXB0ZXItPmV0aF90eF9ieXRlcyArPSBjb3BpZWQ7Ci0JYWRhcHRlci0+YmVfc3RhdC5iZXNfdHhfd3JicyArPSB3cmJfY250OwotCXVwZGF0ZV90eF9yYXRlKGFkYXB0ZXIpOwotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGRyaXZlciBlbnRyeSBwb2ludCB0byBjaGFuZ2UgdGhlIG10dSBvZiB0aGUgZGV2aWNlCi0gKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MgYW5kIGVycm5vIGZvciBmYWlsdXJlLgotICovCi1zdGF0aWMgaW50IGJlbmV0X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCi17Ci0JLyoKLQkgKiBCRSBzdXBwb3J0cyBqdW1ibyBmcmFtZSBzaXplIHVwdG8gOTAwMCBieXRlcyBpbmNsdWRpbmcgdGhlIGxpbmsgbGF5ZXIKLQkgKiBoZWFkZXIuIENvbnNpZGVyaW5nIHRoZSBkaWZmZXJlbnQgdmFyaWFudHMgb2YgZnJhbWUgZm9ybWF0cyBwb3NzaWJsZQotCSAqIGxpa2UgVkxBTiwgU05BUC9MTEMsIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIGZvciBNVFUgaXMgODk3NCBieXRlcwotCSAqLwotCi0JaWYgKG5ld19tdHUgPCAoRVRIX1pMRU4gKyBFVEhfRkNTX0xFTikgfHwgKG5ld19tdHUgPiBCRV9NQVhfTVRVKSkgewotCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJJbnZhbGlkIE1UVSByZXF1ZXN0ZWQuICIKLQkJCSAgICAgICAiTXVzdCBiZSBiZXR3ZWVuICVkIGFuZCAlZCBieXRlc1xuIiwKLQkJCQkgICAgICAgKEVUSF9aTEVOICsgRVRIX0ZDU19MRU4pLCBCRV9NQVhfTVRVKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIk1UVSBjaGFuZ2VkIGZyb20gJWQgdG8gJWRcbiIsCi0JCQkJCQluZXRkZXYtPm10dSwgbmV3X210dSk7Ci0JbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgZHJpdmVyIGVudHJ5IHBvaW50IHRvIHJlZ2lzdGVyIGEgdmxhbiB3aXRoIHRoZSBkZXZpY2UKLSAqLwotc3RhdGljIHZvaWQgYmVuZXRfdmxhbl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCXN0cnVjdCB2bGFuX2dyb3VwICpncnApCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JYmVfZGlzYWJsZV9lcV9pbnRyKHBub2IpOwotCXBub2ItPnZsYW5fZ3JwID0gZ3JwOwotCXBub2ItPm51bV92bGFucyA9IDA7Ci0JYmVfZW5hYmxlX2VxX2ludHIocG5vYik7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBkcml2ZXIgZW50cnkgcG9pbnQgdG8gYWRkIGEgdmxhbiB2bGFuX2lkCi0gKiB3aXRoIHRoZSBkZXZpY2UgbmV0ZGV2Ci0gKi8KLXN0YXRpYyB2b2lkIGJlbmV0X3ZsYW5fYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmxhbl9pZCkKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlpZiAocG5vYi0+bnVtX3ZsYW5zID09IChCRV9OVU1fVkxBTl9TVVBQT1JURUQgLSAxKSkgewotCQkvKiBubyAgd2F5IHRvIHJldHVybiBhbiBlcnJvciAqLwotCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsCi0JCSAgICAgICAiQmxhZGVFbmdpbmU6IENhbm5vdCBjb25maWd1cmUgbW9yZSB0aGFuICVkIFZsYW5zXG4iLAotCQkJICAgICAgIEJFX05VTV9WTEFOX1NVUFBPUlRFRCk7Ci0JCXJldHVybjsKLQl9Ci0JLyogVGhlIG5ldyB2bGFuIHRhZyB3aWxsIGJlIGluIHRoZSBzbG90IGluZGljYXRlZCBieSBudW1fdmxhbnMuICovCi0JcG5vYi0+dmxhbl90YWdbcG5vYi0+bnVtX3ZsYW5zKytdID0gdmxhbl9pZDsKLQliZV9yeGZfdmxhbl9jb25maWcoJnBub2ItPmZuX29iaiwgZmFsc2UsIHBub2ItPm51bV92bGFucywKLQkJCSAgIHBub2ItPnZsYW5fdGFnLCBOVUxMLCBOVUxMLCBOVUxMKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGRyaXZlciBlbnRyeSBwb2ludCB0byByZW1vdmUgYSB2bGFuIHZsYW5faWQKLSAqIHdpdGggdGhlIGRldmljZSBuZXRkZXYKLSAqLwotc3RhdGljIHZvaWQgYmVuZXRfdmxhbl9yZW1fdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2bGFuX2lkKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXUzMiBpLCB2YWx1ZTsKLQotCS8qCi0JICogSW4gQmxhZGUgRW5naW5lLCB3ZSBzdXBwb3J0IDMyIHZsYW4gdGFnIGZpbHRlcnMgYWNyb3NzIGJvdGggcG9ydHMuCi0JICogVG8gcHJvZ3JhbSBhIHZsYW4gdGFnLCB0aGUgUlhGX1JUUFJfQ1NSIHJlZ2lzdGVyIGlzIHVzZWQuCi0JICogRWFjaCAzMi1iaXQgdmFsdWUgb2YgUlhGX1JURFJfQ1NSIGNhbiBhZGRyZXNzIDIgdmxhbiB0YWcgZW50cmllcy4KLQkgKiBUaGUgVmxhbiB0YWJsZSBpcyBvZiBkZXB0aCAxNi4gdGh1cyB3ZSBzdXBwb3J0IDMyIHRhZ3MuCi0JICovCi0KLQl2YWx1ZSA9IHZsYW5faWQgfCBWTEFOX1ZBTElEX0JJVDsKLQlmb3IgKGkgPSAwOyBpIDwgQkVfTlVNX1ZMQU5fU1VQUE9SVEVEOyBpKyspIHsKLQkJaWYgKHBub2ItPnZsYW5fdGFnW2ldID09IHZsYW5faWQpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBCRV9OVU1fVkxBTl9TVVBQT1JURUQpCi0JCXJldHVybjsKLQkvKiBOb3cgY29tcGFjdCB0aGUgdmxhbiB0YWcgYXJyYXkgYnkgcmVtb3ZpbmcgaG9sZSBjcmVhdGVkLiAqLwotCXdoaWxlICgoaSArIDEpIDwgQkVfTlVNX1ZMQU5fU1VQUE9SVEVEKSB7Ci0JCXBub2ItPnZsYW5fdGFnW2ldID0gcG5vYi0+dmxhbl90YWdbaSArIDFdOwotCQlpKys7Ci0JfQotCWlmICgoaSArIDEpID09IEJFX05VTV9WTEFOX1NVUFBPUlRFRCkKLQkJcG5vYi0+dmxhbl90YWdbaV0gPSAodTE2KSAweDA7Ci0JcG5vYi0+bnVtX3ZsYW5zLS07Ci0JYmVfcnhmX3ZsYW5fY29uZmlnKCZwbm9iLT5mbl9vYmosIGZhbHNlLCBwbm9iLT5udW1fdmxhbnMsCi0JCQkgICBwbm9iLT52bGFuX3RhZywgTlVMTCwgTlVMTCwgTlVMTCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBwcm9ncmFtIG11bHRpY2FzdAotICogYWRkcmVzcyBpbiB0aGUgbXVsdGljYXN0IGZpbHRlciBvZiB0aGUgQVNJQy4KLSAqLwotc3RhdGljIHZvaWQgYmVfc2V0X211bHRpY2FzdF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7Ci0JdTggbWFjX2FkZHJbMzJdW0VUSF9BTEVOXTsKLQlpbnQgaTsKLQotCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCS8qIHNldCBCRSBpbiBNdWx0aWNhc3QgcHJvbWlzY3VvdXMgKi8KLQkJYmVfcnhmX211bHRpY2FzdF9jb25maWcoJnBub2ItPmZuX29iaiwgdHJ1ZSwgMCwgTlVMTCwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdCwgaSA9IDA7IG1jX3B0cjsKLQkgICAgIG1jX3B0ciA9IG1jX3B0ci0+bmV4dCwgaSsrKSB7Ci0JCW1lbWNweSgmbWFjX2FkZHJbaV1bMF0sIG1jX3B0ci0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQl9Ci0KLQkvKiByZXNldCB0aGUgcHJvbWlzY3VvdXMgbW9kZSBhbHNvLiAqLwotCWJlX3J4Zl9tdWx0aWNhc3RfY29uZmlnKCZwbm9iLT5mbl9vYmosIGZhbHNlLCBpLAotCQkJCSZtYWNfYWRkclswXVswXSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBkcml2ZXIgZW50cnkgcG9pbnQgdG8gc2V0IG11bHRpY2FzdCBsaXN0Ci0gKiB3aXRoIHRoZSBkZXZpY2UgbmV0ZGV2LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0bwotICogc2V0IHByb21pc2N1b3VzIG1vZGUgb3IgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUKLSAqIG9yIG11bHRpY2FzdCBtb2RlLi4uLgotICovCi1zdGF0aWMgdm9pZCBiZW5ldF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCWJlX3J4Zl9wcm9taXNjdW91cygmcG5vYi0+Zm5fb2JqLCAxLCAxLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQl9IGVsc2UgewotCQliZV9yeGZfcHJvbWlzY3VvdXMoJnBub2ItPmZuX29iaiwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCWJlX3NldF9tdWx0aWNhc3RfZmlsdGVyKG5ldGRldik7Ci0JfQotfQotCi1pbnQgYmVuZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0KLQlldGhlcl9zZXR1cChuZXRkZXYpOwotCi0JbmV0ZGV2LT5vcGVuID0gJmJlbmV0X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gJmJlbmV0X2Nsb3NlOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gJmJlbmV0X3htaXQ7Ci0KLQluZXRkZXYtPmdldF9zdGF0cyA9ICZiZW5ldF9nZXRfc3RhdHM7Ci0KLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZiZW5ldF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0KLQluZXRkZXYtPmNoYW5nZV9tdHUgPSAmYmVuZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZiZW5ldF9zZXRfbWFjX2FkZHI7Ci0KLQluZXRkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBiZW5ldF92bGFuX3JlZ2lzdGVyOwotCW5ldGRldi0+dmxhbl9yeF9hZGRfdmlkID0gYmVuZXRfdmxhbl9hZGRfdmlkOwotCW5ldGRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGJlbmV0X3ZsYW5fcmVtX3ZpZDsKLQotCW5ldGRldi0+ZmVhdHVyZXMgPQotCSAgICBORVRJRl9GX1NHIHwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9UU08gfAotCSAgICBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwgTkVUSUZfRl9JUF9DU1VNOwotCi0JbmV0ZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwotCi0JLyogSWYgZGV2aWNlIGlzIERBQyBDYXBhYmxlLCBzZXQgdGhlIEhJR0hETUEgZmxhZyBmb3IgbmV0ZGV2aWNlLiAqLwotCWlmIChhZGFwdGVyLT5kbWFfNjRiaXRfY2FwKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQotCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZiZV9ldGh0b29sX29wcyk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVuZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZW5ldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWExZjA4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZW5ldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLSNpZm5kZWYgX0JFTkVUX0hfCi0jZGVmaW5lIF9CRU5FVF9IXwotCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KLSNpbmNsdWRlICJod2xpYi5oIgotCi0jZGVmaW5lIF9TQV9NT0RVTEVfTkFNRSAibmV0LWRyaXZlciIKLQotI2RlZmluZSBWTEFOX1ZBTElEX0JJVAkJMHg4MDAwCi0jZGVmaW5lIEJFX05VTV9WTEFOX1NVUFBPUlRFRAkzMgotI2RlZmluZSBCRV9QT1JUX0xJTktfRE9XTiAgICAgICAwMDAwCi0jZGVmaW5lIEJFX1BPUlRfTElOS19VUCAgICAgICAgIDAwMDEKLSNkZWZpbmUJQkVfTUFYX1RYX0ZSQUdfQ09VTlQJCSgzMCkKLQotLyogRmxhZyBiaXRzIGZvciBzZW5kIG9wZXJhdGlvbiAqLwotI2RlZmluZSBJUENTICAgICAgICAgICAgKDEgPDwgMCkJLyogRW5hYmxlIElQIGNoZWNrc3VtIG9mZmxvYWQgKi8KLSNkZWZpbmUgVURQQ1MgICAgICAgICAgICgxIDw8IDEpCS8qIEVuYWJsZSBVRFAgY2hlY2tzdW0gb2ZmbG9hZCAqLwotI2RlZmluZSBUQ1BDUyAgICAgICAgICAgKDEgPDwgMikJLyogRW5hYmxlIFRDUCBjaGVja3N1bSBvZmZsb2FkICovCi0jZGVmaW5lIExTTyAgICAgICAgICAgICAoMSA8PCAzKQkvKiBFbmFibGUgTGFyZ2UgU2VnbWVudCAgb2ZmbG9hZCAqLwotI2RlZmluZSBFVEhWTEFOICAgICAgICAgKDEgPDwgNCkJLyogRW5hYmxlIFZMQU4gaW5zZXJ0ICovCi0jZGVmaW5lIEVUSEVWRU5UICAgICAgICAoMSA8PCA1KQkvKiBHZW5lcmF0ZSAgZXZlbnQgb24gY29tcGxldGlvbiAqLwotI2RlZmluZSBFVEhDT01QTEVURSAgICAgKDEgPDwgNikJLyogR2VuZXJhdGUgY29tcGxldGlvbiB3aGVuIGRvbmUgKi8KLSNkZWZpbmUgSVBTRUMgICAgICAgICAgICgxIDw8IDcpCS8qIEVuYWJsZSBJUFNFQyAqLwotI2RlZmluZSBGT1JXQVJEICAgICAgICAgKDEgPDwgOCkJLyogU2VuZCB0aGUgcGFja2V0IGluIGZvcndhcmRpbmcgcGF0aCAqLwotI2RlZmluZSBGSU4gICAgICAgICAgICAgKDEgPDwgOSkJLyogSXNzdWUgRklOIHNlZ21lbnQgKi8KLQotI2RlZmluZSBCRV9NQVhfTVRVCTg5NzQKLQotI2RlZmluZSBCRV9NQVhfTFJPX0RFU0NSSVBUT1JTCQkJOAotI2RlZmluZSBCRV9MUk9fTUFYX1BLVFMJCQkJNjQKLSNkZWZpbmUgQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRQkJCTYKLQotZXh0ZXJuIGNvbnN0IGNoYXIgYmVfZHJ2cl92ZXJbXTsKLWV4dGVybiBjaGFyIGJlX2Z3X3ZlcltdOwotZXh0ZXJuIGNoYXIgYmVfZHJpdmVyX25hbWVbXTsKLQotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBiZV9ldGh0b29sX29wczsKLQotI2RlZmluZSBCRV9ERVZfU1RBVEVfTk9ORSAwCi0jZGVmaW5lIEJFX0RFVl9TVEFURV9JTklUIDEKLSNkZWZpbmUgQkVfREVWX1NUQVRFX09QRU4gMgotI2RlZmluZSBCRV9ERVZfU1RBVEVfU1VTUEVORCAzCi0KLS8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgcGh5c2ljYWwgZnJhZ21lbnRzIHRvIHVzZQotICogZm9yIERNQWluZyBkYXRhIGZyb20gTklDLgotICovCi1zdHJ1Y3QgYmVfcmVjdl9idWZmZXIgewotCXN0cnVjdCBsaXN0X2hlYWQgcnhiX2xpc3Q7CS8qIGZvciBtYWludGFpbmluZyBhIGxpbmtlZCBsaXN0ICovCi0Jdm9pZCAqcnhiX3ZhOwkJLyogYnVmZmVyIHZpcnR1YWwgYWRkcmVzcyAqLwotCXUzMiByeGJfcGFfbG87CQkvKiBsb3cgcGFydCBvZiBwaHlzaWNhbCBhZGRyZXNzICovCi0JdTMyIHJ4Yl9wYV9oaTsJCS8qIGhpZ2ggcGFydCBvZiBwaHlzaWNhbCBhZGRyZXNzICovCi0JdTMyIHJ4Yl9sZW47CQkvKiBsZW5ndGggb2YgcmVjdiBidWZmZXIgKi8KLQl2b2lkICpyeGJfY3R4dDsJCS8qIGNvbnRleHQgZm9yIE9TTSBkcml2ZXIgdG8gdXNlICovCi19OwotCi0vKgotICogZnJhZ21lbnQgbGlzdCB0byBkZXNjcmliZSBzY2F0dGVyZWQgZGF0YS4KLSAqLwotc3RydWN0IGJlX3R4X2ZyYWdfbGlzdCB7Ci0JdTMyIHR4Yl9sZW47CQkvKiBTaXplIG9mIHRoaXMgZnJhZ21lbnQgKi8KLQl1MzIgdHhiX3BhX2xvOwkJLyogTG93ZXIgMzIgYml0cyBvZiA2NCBiaXQgcGh5c2ljYWwgYWRkciAqLwotCXUzMiB0eGJfcGFfaGk7CQkvKiBIaWdoZXIgMzIgYml0cyBvZiA2NCBiaXQgcGh5c2ljYWwgYWRkciAqLwotfTsKLQotc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JZG1hX2FkZHJfdCBidXM7Ci0JdTE2IHBhZ2Vfb2Zmc2V0OwotfTsKLQotLyoKLSAqICBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgbWFpbiB0cmFja2luZyBzdHJ1Y3R1cmUgZm9yIGEgTklDIGludGVyZmFjZS4KLSAqLwotc3RydWN0IGJlX25ldF9vYmplY3QgewotCS8qIE1DQyBSaW5nIC0gdXNlZCB0byBzZW5kIGZ3Y21kcyB0byBlbWJlZGRlZCBBUk0gcHJvY2Vzc29yICovCi0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqbWNjX3E7CS8qIFZBIG9mIHRoZSBzdGFydCBvZiB0aGUgcmluZyAqLwotCXUzMiBtY2NfcV9sZW47CQkJLyogIyBvZiBXUkIgZW50cmllcyBpbiB0aGlzIHJpbmcgKi8KLQl1MzIgbWNjX3Ffc2l6ZTsKLQl1MzIgbWNjX3FfaGQ7CQkJLyogTUNDIHJpbmcgaGVhZCAqLwotCXU4IG1jY19xX2NyZWF0ZWQ7CQkvKiBmbGFnIHRvIGhlbHAgY2xlYW51cCAqLwotCXN0cnVjdCBiZV9tY2Nfb2JqZWN0IG1jY19xX29iajsJLyogQkVDTElCJ3MgTUNDIHJpbmcgT2JqZWN0ICovCi0JZG1hX2FkZHJfdCBtY2NfcV9idXM7CQkvKiBETUEnYmxlIGJ1cyBhZGRyZXNzICovCi0KLQkvKiBNQ0MgQ29tcGxldGlvbiBSaW5nIC0gRlcgcmVzcG9uc2VzIHRvIGZ3Y21kcyBzZW50IGZyb20gTUNDIHJpbmcgKi8KLQlzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVAgKm1jY19jcTsgLyogVkEgb2YgdGhlIHN0YXJ0IG9mIHRoZSByaW5nICovCi0JdTMyIG1jY19jcV9sZW47CQkJLyogIyBvZiBjb21wbC4gZW50cmllcyBpbiB0aGlzIHJpbmcgKi8KLQl1MzIgbWNjX2NxX3NpemU7Ci0JdTMyIG1jY19jcV90bDsJCQkvKiBjb21wbC4gcmluZyB0YWlsICovCi0JdTggbWNjX2NxX2NyZWF0ZWQ7CQkvKiBmbGFnIHRvIGhlbHAgY2xlYW51cCAqLwotCXN0cnVjdCBiZV9jcV9vYmplY3QgbWNjX2NxX29iajsJLyogQkVDTElCJ3MgTUNDIGNvbXBsLiByaW5nIG9iamVjdCAqLwotCXUzMiBtY2NfY3FfaWQ7CQkJLyogTUNDIHJpbmcgSUQgKi8KLQlkbWFfYWRkcl90IG1jY19jcV9idXM7CQkvKiBETUEnYmxlIGJ1cyBhZGRyZXNzICovCi0KLQlzdHJ1Y3QgcmluZ19kZXNjIG1iX3JkOwkJLyogUkQgZm9yIE1DQ19NQUlMX0JPWCAqLwotCXZvaWQgKm1iX3B0cjsJCQkvKiBtYWlsYm94IHB0ciB0byBiZSBmcmVlZCAgKi8KLQlkbWFfYWRkcl90IG1iX2J1czsJCS8qIERNQSdibGUgYnVzIGFkZHJlc3MgKi8KLQl1MzIgbWJfc2l6ZTsKLQotCS8qIEJFQ2xpYiB1c2VzIGFuIGFycmF5IG9mIGNvbnRleHQgb2JqZWN0cyB0byB0cmFjayBvdXRzdGFuZGluZwotCSAqIHJlcXVlc3RzIHRvIHRoZSBNQ0MuICBXZSBuZWVkIGFsbG9jYXRlIHRoZSBzYW1lIG51bWJlciBvZgotCSAqIGNvbmV4dCBlbnRyaWVzIGFzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgTUNDIFdSQiByaW5nCi0JICovCi0JdTMyIG1jY193cmJfY3R4dF9zaXplOwotCXZvaWQgKm1jY193cmJfY3R4dDsJCS8qIHBvaW50ZXIgdG8gdGhlIGNvbnRleHQgYXJlYSAqLwotCXUzMiBtY2Nfd3JiX2N0eHRMZW47CQkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY29udGV4dCAqLwotCS8qCi0JICogTklDIHNlbmQgcmVxdWVzdCByaW5nIC0gdXNlZCBmb3IgeG1pdHRpbmcgcmF3IGV0aGVyIGZyYW1lcy4KLQkgKi8KLQlzdHJ1Y3QgRVRIX1dSQl9BTUFQICp0eF9xOwkvKiBWQSBvZiB0aGUgc3RhcnQgb2YgdGhlIHJpbmcgKi8KLQl1MzIgdHhfcV9sZW47CQkJLyogIyBpZiBlbnRyaWVzIGluIHRoZSBzZW5kIHJpbmcgKi8KLQl1MzIgdHhfcV9zaXplOwotCXUzMiB0eF9xX2hkOwkJCS8qIEhlYWQgaW5kZXguIE5leHQgcmVxLiBnb2VzIGhlcmUgKi8KLQl1MzIgdHhfcV90bDsJCQkvKiBUYWlsIGluZHguIG9sZGVzdCBvdXRzdGFuZGluZyByZXEuICovCi0JdTggdHhfcV9jcmVhdGVkOwkJLyogZmxhZyB0byBoZWxwIGNsZWFudXAgKi8KLQlzdHJ1Y3QgYmVfZXRoc3Ffb2JqZWN0IHR4X3Ffb2JqOy8qIEJFQ0xJQidzIHNlbmQgUSBoYW5kbGUgKi8KLQlkbWFfYWRkcl90IHR4X3FfYnVzOwkJLyogRE1BJ2JsZSBidXMgYWRkcmVzcyAqLwotCXUzMiB0eF9xX2lkOwkJCS8qIHNlbmQgcXVldWUgcmluZyBJRCAqLwotCXUzMiB0eF9xX3BvcnQ7CQkJLyogMCBubyBiaW5kaW5nLCAxIHBvcnQgQSwgIDIgcG9ydCBCICovCi0JYXRvbWljX3QgdHhfcV91c2VkOwkJLyogIyBvZiBXUkJzIHVzZWQgKi8KLQkvKiBwdHIgdG8gYW4gYXJyYXkgaW4gd2hpY2ggd2Ugc3RvcmUgY29udGV4dCBpbmZvIGZvciBlYWNoIHNlbmQgcmVxLiAqLwotCXZvaWQgKip0eF9jdHh0OwotCS8qCi0JICogTklDIFNlbmQgY29tcGwuIHJpbmcgLSBjb21wbGV0aW9uIHN0YXR1cyBmb3IgYWxsIE5JQyBmcmFtZXMgeG1pdHRlZC4KLQkgKi8KLQlzdHJ1Y3QgRVRIX1RYX0NPTVBMX0FNQVAgKnR4X2NxOy8qIFZBIG9mIHN0YXJ0IG9mIHRoZSByaW5nICovCi0JdTMyIHR4Y3FfbGVuOwkJCS8qICMgb2YgZW50cmllcyBpbiB0aGUgcmluZyAqLwotCXUzMiB0eF9jcV9zaXplOwotCS8qCi0JICogaW5kZXggaW50byBjb21wbCByaW5nIHdoZXJlIHRoZSBob3N0IGV4cGVjdHMgbmV4dCBjb21wbGV0aW9uIGVudHJ5Ci0JICovCi0JdTMyIHR4X2NxX3RsOwotCXUzMiB0eF9jcV9pZDsJCQkvKiBjb21wbGV0aW9uIHF1ZXVlIGlkICovCi0JdTggdHhfY3FfY3JlYXRlZDsJCS8qIGZsYWcgdG8gaGVscCBjbGVhbnVwICovCi0Jc3RydWN0IGJlX2NxX29iamVjdCB0eF9jcV9vYmo7Ci0JZG1hX2FkZHJfdCB0eF9jcV9idXM7CQkvKiBETUEnYmxlIGJ1cyBhZGRyZXNzICovCi0JLyoKLQkgKiBFdmVudCBRdWV1ZSAtIGFsbCBjb21wbGV0aW9uIGVudHJpZXMgcG9zdCBldmVudHMgaGVyZS4KLQkgKi8KLQlzdHJ1Y3QgRVFfRU5UUllfQU1BUCAqZXZlbnRfcTsJLyogVkEgb2Ygc3RhcnQgb2YgZXZlbnQgcXVldWUgKi8KLQl1MzIgZXZlbnRfcV9sZW47CQkvKiAjIG9mIGVudHJpZXMgKi8KLQl1MzIgZXZlbnRfcV9zaXplOwotCXUzMiBldmVudF9xX3RsOwkJCS8qIFRhaWwgb2YgdGhlIGV2ZW50IHF1ZXVlICovCi0JdTMyIGV2ZW50X3FfaWQ7CQkJLyogRXZlbnQgcXVldWUgSUQgKi8KLQl1OCBldmVudF9xX2NyZWF0ZWQ7CQkvKiBmbGFnIHRvIGhlbHAgY2xlYW51cCAqLwotCXN0cnVjdCBiZV9lcV9vYmplY3QgZXZlbnRfcV9vYmo7IC8qIFF1ZXVlIGhhbmRsZSAqLwotCWRtYV9hZGRyX3QgZXZlbnRfcV9idXM7CQkvKiBETUEnYmxlIGJ1cyBhZGRyZXNzICovCi0JLyoKLQkgKiBOSUMgcmVjZWl2ZSBxdWV1ZSAtIERhdGEgYnVmZmVycyB0byBiZSB1c2VkIGZvciByZWNlaXZpbmcgdW5pY2FzdCwKLQkgKiBicm9hZGNhc3QgYW5kIG11bHRpLWNhc3QgZnJhbWVzICBhcmUgcG9zdGVkIGhlcmUuCi0JICovCi0Jc3RydWN0IEVUSF9SWF9EX0FNQVAgKnJ4X3E7CS8qIFZBIG9mIHN0YXJ0IG9mIHRoZSBxdWV1ZSAqLwotCXUzMiByeF9xX2xlbjsJCQkvKiAjIG9mIGVudHJpZXMgKi8KLQl1MzIgcnhfcV9zaXplOwotCXUzMiByeF9xX2hkOwkJCS8qIEhlYWQgb2YgdGhlIHF1ZXVlICovCi0JYXRvbWljX3QgcnhfcV9wb3N0ZWQ7CQkvKiBudW1iZXIgb2YgcG9zdGVkIGJ1ZmZlcnMgKi8KLQl1MzIgcnhfcV9pZDsJCQkvKiBxdWV1ZSBJRCAqLwotCXU4IHJ4X3FfY3JlYXRlZDsJCS8qIGZsYWcgdG8gaGVscCBjbGVhbnVwICovCi0Jc3RydWN0IGJlX2V0aHJxX29iamVjdCByeF9xX29iajsJLyogTklDIFJYIHF1ZXVlIGhhbmRsZSAqLwotCWRtYV9hZGRyX3QgcnhfcV9idXM7CQkvKiBETUEnYmxlIGJ1cyBhZGRyZXNzICovCi0JLyoKLQkgKiBQb2ludGVyIHRvIGFuIGFycmF5IG9mIG9wYXF1ZSBjb250ZXh0IG9iamVjdCBmb3IgdXNlIGJ5IE9TTSBkcml2ZXIKLQkgKi8KLQl2b2lkICoqcnhfY3R4dDsKLQkvKgotCSAqIE5JQyB1bmljYXN0IFJYIGNvbXBsZXRpb24gcXVldWUgLSBhbGwgdW5pY2FzdCBldGhlciBmcmFtZSBjb21wbGV0aW9uCi0JICogc3RhdHVzZXMgZnJvbSBCRSBjb21lIGhlcmUuCi0JICovCi0Jc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQICpyeF9jcTsJLyogVkEgb2Ygc3RhcnQgb2YgdGhlIHF1ZXVlICovCi0JdTMyIHJ4X2NxX2xlbjsJCS8qICMgb2YgZW50cmllcyAqLwotCXUzMiByeF9jcV9zaXplOwotCXUzMiByeF9jcV90bDsJCQkvKiBUYWlsIG9mIHRoZSBxdWV1ZSAqLwotCXUzMiByeF9jcV9pZDsJCQkvKiBxdWV1ZSBJRCAqLwotCXU4IHJ4X2NxX2NyZWF0ZWQ7CQkvKiBmbGFnIHRvIGhlbHAgY2xlYW51cCAqLwotCXN0cnVjdCBiZV9jcV9vYmplY3QgcnhfY3Ffb2JqOwkvKiBxdWV1ZSBoYW5kbGUgKi8KLQlkbWFfYWRkcl90IHJ4X2NxX2J1czsJCS8qIERNQSdibGUgYnVzIGFkZHJlc3MgKi8KLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0IGZuX29iajsJLyogZnVuY3Rpb24gb2JqZWN0ICAgKi8KLQlib29sCWZuX29ial9jcmVhdGVkOwotCXUzMiByeF9idWZfc2l6ZTsJCS8qIFNpemUgb2YgdGhlIFJYIGJ1ZmZlcnMgKi8KLQotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7Ci0Jc3RydWN0IGJlX3JlY3ZfYnVmZmVyIGV0aF9yeF9idWZzWzI1Nl07CS8qIHRvIHBhc3MgUnggYnVmZmVyCi0JCQkJCQkJICAgYWRkcmVzc2VzICovCi0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXI7CS8qIFBvaW50ZXIgdG8gT1NNIGFkYXB0ZXIgKi8KLQl1MzIgZGV2bm87CQkvKiBPU00sIG5ldHdvcmsgZGV2IG5vLiAqLwotCXUzMiB1c2VfcG9ydDsJCS8qIEN1cnJlbnQgYWN0aXZlIHBvcnQgKi8KLQlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpyeF9wYWdlX2luZm87CS8qIEFycmF5IG9mIFJ4IGJ1ZiBwYWdlcyAqLwotCXUzMiByeF9wZ19pbmZvX2hkOwkvKiBIZWFkIG9mIHF1ZXVlICovCi0JaW50IHJ4YnVmX3Bvc3RfZmFpbDsJLyogUnhCdWZmIHBvc3RpbmcgZmFpbCBjb3VudCAqLwotCWJvb2wgcnhfcGdfc2hhcmVkOwkvKiBJcyBhbiBhbGxvY3N0ZWQgcGFnZSBzaGFyZWQgYXMgdHdvIGZyYWdzID8gKi8KLQlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbl9ncnA7Ci0JdTMyIG51bV92bGFuczsJCS8qIE51bWJlciBvZiB2bGFucyBpbiBCRSdzIGZpbHRlciAqLwotCXUxNiB2bGFuX3RhZ1tCRV9OVU1fVkxBTl9TVVBQT1JURURdOyAvKiB2bGFucyBjdXJyZW50bHkgY29uZmlndXJlZCAqLwotCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwotCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOwotCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Rlc2NbQkVfTUFYX0xST19ERVNDUklQVE9SU107Ci19OwotCi0jZGVmaW5lIE5FVF9GSChucCkgICAgICAgKCYobnApLT5mbl9vYmopCi0KLS8qCi0gKiBCRSBkcml2ZXIgc3RhdGlzdGljcy4KLSAqLwotc3RydWN0IGJlX2RydnJfc3RhdCB7Ci0JdTMyIGJlc190eF9yZXFzOwkvKiBudW1iZXIgb2YgVFggcmVxdWVzdHMgaW5pdGlhdGVkICovCi0JdTMyIGJlc190eF9mYWlsczsJLyogbnVtYmVyIG9mIFRYIHJlcXVlc3RzIHRoYXQgZmFpbGVkICovCi0JdTMyIGJlc19md2RfcmVxczsJLyogbnVtYmVyIG9mIHNlbmQgcmVxcyB0aHJvdWdoIGZvcndhcmRpbmcgaS9mICovCi0JdTMyIGJlc190eF93cmJzOwkvKiBudW1iZXIgb2YgdHggV1JCcyB1c2VkICovCi0KLQl1MzIgYmVzX2ludHM7CQkvKiBudW1iZXIgb2YgaW50ZXJydXB0cyAqLwotCXUzMiBiZXNfcG9sbHM7CQkvKiBudW1iZXIgb2YgdGltZXMgTkFQSSBjYWxsZWQgcG9sbCBmdW5jdGlvbiAqLwotCXUzMiBiZXNfZXZlbnRzOwkJLyogdG90YWwgZXZldCBlbnRyaWVzIHByb2Nlc3NlZCAqLwotCXUzMiBiZXNfdHhfZXZlbnRzOwkvKiBudW1iZXIgb2YgdHggY29tcGxldGlvbiBldmVudHMgICovCi0JdTMyIGJlc19yeF9ldmVudHM7CS8qIG51bWJlciBvZiB1Y2FzdCByeCBjb21wbGV0aW9uIGV2ZW50cyAgKi8KLQl1MzIgYmVzX3R4X2NvbXBsOwkvKiBudW1iZXIgb2YgdHggY29tcGxldGlvbiBlbnRyaWVzIHByb2Nlc3NlZCAqLwotCXUzMiBiZXNfcnhfY29tcGw7CS8qIG51bWJlciBvZiByeCBjb21wbGV0aW9uIGVudHJpZXMKLQkJCQkgICBwcm9jZXNzZWQgKi8KLQl1MzIgYmVzX2V0aHJ4X3Bvc3RfZmFpbDsJLyogbnVtYmVyIG9mIGV0aHJ4IGJ1ZmZlciBhbGxvYwotCQkJCQkgICBmYWlsdXJlcyAqLwotCS8qCi0JICogbnVtYmVyIG9mIG5vbiBldGhlciB0eXBlIElJIGZyYW1lcyBkcm9wcGVkIHdoZXJlCi0JICogZnJhbWUgbGVuID4gbGVuZ3RoIGZpZWxkIG9mIE1hYyBIZHIKLQkgKi8KLQl1MzIgYmVzXzgwMl8zX2Ryb3BwZWRfZnJhbWVzOwotCS8qCi0JICogbnVtYmVyIG9mIG5vbiBldGhlciB0eXBlIElJIGZyYW1lcyBtYWxmb3JtZWQgd2hlcmUKLQkgKiBpbiBmcmFtZSBsZW4gPCBsZW5ndGggZmllbGQgb2YgTWFjIEhkcgotCSAqLwotCXUzMiBiZXNfODAyXzNfbWFsZm9ybWVkX2ZyYW1lczsKLQl1MzIgYmVzX2lwczsJCS8qICBpbnRlcnJ1cHRzIC8gc2VjICovCi0JdTMyIGJlc19wcmV2X2ludHM7CS8qIGJlc19pbnRzIGF0IGxhc3QgSVBTIGNhbGN1bGF0aW9uICAqLwotCXUxNiBiZXNfZXRoX3R4X3JhdGU7CS8qICBFVEggVFggcmF0ZSAtIE1iL3NlYyAqLwotCXUxNiBiZXNfZXRoX3J4X3JhdGU7CS8qICBFVEggUlggcmF0ZSAtIE1iL3NlYyAqLwotCXUzMiBiZXNfcnhfY29hbDsJLyogTnVtIHBrdHMgY29hbGFzY2VkICovCi0JdTMyIGJlc19yeF9mbHVzaDsJLyogTnVtIHRpbWVzIGNvYWxhc2NlZCAqLwotCXUzMiBiZXNfbGlua19jaGFuZ2VfcGh5c2ljYWw7CS8qTnVtIG9mIHRpbWVzIHBoeXNpY2FsIGxpbmsgY2hhbmdlZCAqLwotCXUzMiBiZXNfbGlua19jaGFuZ2VfdmlydHVhbDsJLypOdW0gb2YgdGltZXMgdmlydHVhbCBsaW5rIGNoYW5nZWQgKi8KLQl1MzIgYmVzX3J4X21pc2NfcGt0czsJLyogTWlzYyBwa3RzIHJlY2VpdmVkICovCi19OwotCi0vKiBNYXhpbXVtIGludGVycnVwdCBkZWxheSAoaW4gbWljcm9zZWNvbmRzKSBhbGxvd2VkICovCi0jZGVmaW5lIE1BWF9FUUQJCQkJMTIwCi0KLS8qCi0gKiB0aW1lciB0byBwcmV2ZW50IHN5c3RlbSBzaHV0ZG93biBoYW5nIGZvciBldmVyIGlmIGgvdyBzdG9wcyByZXNwb25kaW5nCi0gKi8KLXN0cnVjdCBiZV90aW1lcl9jdHh0IHsKLQlhdG9taWNfdCBnZXRfc3RhdF9mbGFnOwotCXN0cnVjdCB0aW1lcl9saXN0IGdldF9zdGF0c190aW1lcjsKLQl1bnNpZ25lZCBsb25nIGdldF9zdGF0X3NlbV9hZGRyOwotfSA7Ci0KLS8qIFRoaXMgc3RydWN0dXJlIGlzIHRoZSBtYWluIEJsYWRlRW5naW5lIGRyaXZlciBjb250ZXh0LiAgKi8KLXN0cnVjdCBiZV9hZGFwdGVyIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2cDsKLQlzdHJ1Y3QgYmVfZHJ2cl9zdGF0IGJlX3N0YXQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgYmVuZXRfc3RhdHM7Ci0KLQkvKiBQQ0kgQkFSIG1hcHBlZCBhZGRyZXNzZXMgKi8KLQl1OCBfX2lvbWVtICpjc3JfdmE7CS8qIENTUiAqLwotCXU4IF9faW9tZW0gKmRiX3ZhOwkvKiBEb29yICBCZWxsICAqLwotCXU4IF9faW9tZW0gKnBjaV92YTsJLyogUENJIENvbmZpZyAqLwotCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHN0c19oYW5kbGVyOwotCXN0cnVjdCB0aW1lcl9saXN0IGNxX3RpbWVyOwotCXNwaW5sb2NrX3QgaW50X2xvY2s7CS8qIHRvIHByb3RlY3QgdGhlIGlzciBmaWVsZCBpbiBhZGFwdGVyICovCi0KLQlzdHJ1Y3QgRldDTURfRVRIX0dFVF9TVEFUSVNUSUNTICpldGhfc3RhdHNwOwotCS8qCi0JICogVGhpcyB3aWxsIGVuYWJsZSB0aGUgdXNlIG9mIGV0aHRvb2wgdG8gZW5hYmxlIG9yIGRpc2FibGUKLQkgKiBDaGVja3N1bSBvbiBSeCBwa3RzIHRvIGJlIG9iZXllZCBvciBkaXNvYmV5ZWQuCi0JICogSWYgdGhpcyBpcyB0cnVlID0gMSwgdGhlbiB3aGF0ZXZlciBpcyB0aGUgY2hlY2tzdW0gb24gdGhlCi0JICogUmVjZWl2ZWQgcGt0IGFzIHBlciBCRSwgaXQgd2lsbCBiZSBnaXZlbiB0byB0aGUgc3RhY2suCi0JICogRWxzZSB0aGUgc3RhY2sgd2lsbCByZSBjYWxjdWxhdGUgaXQuCi0JICovCi0JYm9vbCByeF9jc3VtOwotCS8qCi0JICogVGhpcyB3aWxsIGVuYWJsZSB0aGUgdXNlIG9mIGV0aHRvb2wgdG8gZW5hYmxlIG9yIGRpc2FibGUKLQkgKiBDb2FsZXNlIG9uIFJ4IHBrdHMgdG8gYmUgb2JleWVkIG9yIGRpc29iZXllZC4KLQkgKiBJZiB0aGlzIGlzIGdyYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxNiB0aGVuIGNvYWxhc2NpbmcKLQkgKiBpcyBlbmFibGVkIGVsc2UgaXQgaXMgZGlzYWJsZWQKLQkgKi8KLQl1MzIgbWF4X3J4X2NvYWw7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CS8qIFBvaW50ZXIgdG8gT1MncyBQQ0kgZHZpY2UgKi8KLQotCXNwaW5sb2NrX3QgdHhxX2xvY2s7CS8qIHRvIHN0b3Avd2FrZSBxdWV1ZSBiYXNlZCBvbiB0eF9xX3VzZWQgKi8KLQotCXUzMiBpc3I7CQkvKiBjb3B5IG9mIEludHIgc3RhdHVzIHJlZy4gKi8KLQotCXUzMiBwb3J0MF9saW5rX3N0czsJLyogUG9ydCAwIGxpbmsgc3RhdHVzICovCi0JdTMyIHBvcnQxX2xpbmtfc3RzOwkvKiBwb3J0IDEgbGlzdCBzdGF0dXMgKi8KLQlzdHJ1Y3QgQkVfTElOS19TVEFUVVMgKmJlX2xpbmtfc3RzOwotCi0JLyogcG9pbnRlciB0byB0aGUgZmlyc3QgbmV0b2JqZWN0IG9mIHRoaXMgYWRhcHRlciAqLwotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpuZXRfb2JqOwotCi0JLyogIEZsYWdzIHRvIGluZGljYXRlIHdoYXQgdG8gY2xlYW4gdXAgKi8KLQlib29sIHRhc2tsZXRfc3RhcnRlZDsKLQlib29sIGlzcl9yZWdpc3RlcmVkOwotCS8qCi0JICogYWRhcHRpdmUgaW50ZXJydXB0IGNvYWxlc2NpbmcgKEFJQykgcmVsYXRlZAotCSAqLwotCWJvb2wgZW5hYmxlX2FpYzsJLyogMSBpZiBBSUMgaXMgZW5hYmxlZCAqLwotCXUxNiBtaW5fZXFkOwkJLyogbWluaW11bSBFUSBkZWxheSBpbiB1c2VjICovCi0JdTE2IG1heF9lcWQ7CQkvKiBtaW5pbXVtIEVRIGRlbGF5IGluIHVzZWMgKi8KLQl1MTYgY3VyX2VxZDsJCS8qIGN1cnJlbnQgRVEgZGVsYXkgaW4gdXNlYyAqLwotCS8qCi0JICogYm9vayBrZWVwaW5nIGZvciBpbnRlcnJ1cHQgLyBzZWMgYW5kIFRYL1JYIHJhdGUgY2FsY3VsYXRpb24KLQkgKi8KLQl1bG9uZyBpcHNfamlmZmllczsJLyogamlmZmllcyBhdCBsYXN0IElQUyBjYWxjICovCi0JdTMyIGV0aF90eF9ieXRlczsKLQl1bG9uZyBldGhfdHhfamlmZmllczsKLQl1MzIgZXRoX3J4X2J5dGVzOwotCXVsb25nIGV0aF9yeF9qaWZmaWVzOwotCi0Jc3RydWN0IHNlbWFwaG9yZSBnZXRfZXRoX3N0YXRfc2VtOwotCi0JLyogdGltZXIgY3R4dCB0byBwcmV2ZW50IHNodXRkb3duIGhhbmdpbmcgZHVlIHRvIHVuLXJlc3BvbnNpdmUgQkUgKi8KLQlzdHJ1Y3QgYmVfdGltZXJfY3R4dCB0aW1lcl9jdHh0OwotCi0jZGVmaW5lIEJFX01BWF9NU0lYX1ZFQ1RPUlMgICAgICAgICAgICAgMzIKLSNkZWZpbmUgQkVfTUFYX1JFUV9NU0lYX1ZFQ1RPUlMgICAgICAgICAxIC8qIG9ubHkgb25lIEVRIGluIExpbnV4IGRyaXZlciAqLwotCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tCRV9NQVhfTVNJWF9WRUNUT1JTXTsKLQlib29sIG1zaXhfZW5hYmxlZDsKLQlib29sIGRtYV82NGJpdF9jYXA7CS8qIHRoZSBEZXZpY2UgREFDIGNhcGFibGUgIG9yIG5vdCAqLwotCXU4IGRldl9zdGF0ZTsJLyogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRldmljZSAqLwotCXU4IGRldl9wbV9zdGF0ZTsgLyogVGhlIFN0YXRlIG9mIGRldmljZSBiZWZvcmUgZ29pbmcgdG8gc3VzcGVuZCAqLwotfTsKLQotLyoKLSAqIEV2ZXJ5IHNlY29uZCB3ZSBsb29rIGF0IHRoZSBpbnRzL3NlYyBhbmQgYWRqdXN0IGVxX2RlbGF5Ci0gKiBiZXR3ZWVuIGFkYXB0ZXItPm1pbl9lcWQgYW5kIGFkYXB0ZXItPm1heF9lcWQgdG8ga2VlcCB0aGUgaW50cy9zZWMgYmV0d2VlbgotICogSVBTX0hJX1dNIGFuZCBJUFNfTE9fV00uCi0gKi8KLSNkZWZpbmUgSVBTX0hJX1dNCTE4MDAwCi0jZGVmaW5lIElQU19MT19XTQk4MDAwCi0KLQotc3RhdGljIGlubGluZSB2b2lkIGluZGV4X2Fkdih1MzIgKmluZGV4LCB1MzIgdmFsLCAgdTMyIGxpbWl0KQotewotCUJVR19PTihsaW1pdCAmIChsaW1pdC0xKSk7Ci0JKmluZGV4ID0gKCppbmRleCArIHZhbCkgJiAobGltaXQgLSAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluZGV4X2luYyh1MzIgKmluZGV4LCB1MzIgbGltaXQpCi17Ci0JQlVHX09OKGxpbWl0ICYgKGxpbWl0LTEpKTsKLQkqaW5kZXggPSAoKmluZGV4ICsgMSkgJiAobGltaXQgLSAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX2Fkdl9lcV90bChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbmRleF9pbmMoJnBub2ItPmV2ZW50X3FfdGwsIHBub2ItPmV2ZW50X3FfbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX2Fkdl90eHFfaGQoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JaW5kZXhfaW5jKCZwbm9iLT50eF9xX2hkLCBwbm9iLT50eF9xX2xlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZV9hZHZfdHhxX3RsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWluZGV4X2luYygmcG5vYi0+dHhfcV90bCwgcG5vYi0+dHhfcV9sZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfYWR2X3R4Y3FfdGwoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JaW5kZXhfaW5jKCZwbm9iLT50eF9jcV90bCwgcG5vYi0+dHhjcV9sZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfYWR2X3J4cV9oZChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbmRleF9pbmMoJnBub2ItPnJ4X3FfaGQsIHBub2ItPnJ4X3FfbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX2Fkdl9yeGNxX3RsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWluZGV4X2luYygmcG5vYi0+cnhfY3FfdGwsIHBub2ItPnJ4X2NxX2xlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHR4X2NvbXBsX2xhc3R3cmJfaWR4X2dldChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlyZXR1cm4gKHBub2ItPnR4X3FfdGwgKyAqKHUzMiAqKSZwbm9iLT50eF9jdHh0W3Bub2ItPnR4X3FfdGxdIC0gMSkKLQkJICAgICYgKHBub2ItPnR4X3FfbGVuIC0gMSk7Ci19Ci0KLWludCBiZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotaW50IGJlX2V0aHRvb2xfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICopOwotc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJlbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXZvaWQgYmVfcHJvY2Vzc19pbnRyKHVuc2lnbmVkIGxvbmcgY29udGV4dCk7Ci1pcnFyZXR1cm5fdCBiZV9pbnQoaW50IGlycSwgdm9pZCAqZGV2KTsKLXZvaWQgYmVfcG9zdF9ldGhfcnhfYnVmZnMoc3RydWN0IGJlX25ldF9vYmplY3QgKik7Ci12b2lkIGJlX2dldF9zdGF0X2NiKHZvaWQgKiwgaW50LCBzdHJ1Y3QgTUNDX1dSQl9BTUFQICopOwotdm9pZCBiZV9nZXRfc3RhdHNfdGltZXJfaGFuZGxlcih1bnNpZ25lZCBsb25nKTsKLXZvaWQgYmVfd2FpdF9uaWNfdHhfY21wbHhfY21wbChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqKTsKLXZvaWQgYmVfcHJpbnRfbGlua19pbmZvKHN0cnVjdCBCRV9MSU5LX1NUQVRVUyAqKTsKLXZvaWQgYmVfdXBkYXRlX2xpbmtfc3RhdHVzKHN0cnVjdCBiZV9hZGFwdGVyICopOwotdm9pZCBiZV9pbml0X3Byb2NmcyhzdHJ1Y3QgYmVfYWRhcHRlciAqKTsKLXZvaWQgYmVfY2xlYW51cF9wcm9jZnMoc3RydWN0IGJlX2FkYXB0ZXIgKik7Ci1pbnQgYmVfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKLXN0cnVjdCBFVEhfUlhfQ09NUExfQU1BUCAqYmVfZ2V0X3J4X2NtcGwoc3RydWN0IGJlX25ldF9vYmplY3QgKik7Ci12b2lkIGJlX25vdGlmeV9jbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICosIGludCwgaW50LCBpbnQpOwotdm9pZCBiZV9lbmFibGVfaW50cihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqKTsKLXZvaWQgYmVfZW5hYmxlX2VxX2ludHIoc3RydWN0IGJlX25ldF9vYmplY3QgKik7Ci12b2lkIGJlX2Rpc2FibGVfaW50cihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqKTsKLXZvaWQgYmVfZGlzYWJsZV9lcV9pbnRyKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICopOwotaW50IGJlX3NldF91Y19tYWNfYWRyKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICosIHU4LCB1OCwgdTgsCi0JCSAgICB1OCAqLCBtY2Nfd3JiX2NxZV9jYWxsYmFjaywgdm9pZCAqKTsKLWludCBiZV9nZXRfZmxvd19jdGwoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcEZuT2JqLCBib29sICosIGJvb2wgKik7Ci12b2lkIHByb2Nlc3Nfb25lX3R4X2NvbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLCB1MzIgZW5kX2lkeCk7Ci0KLSNlbmRpZiAvKiBfQkVORVRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZXN0YXR1cy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Jlc3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YzdhNGI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZXN0YXR1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLSNpZm5kZWYgX0JFU1RBVFVTX0hfCi0jZGVmaW5lIF9CRVNUQVRVU19IXwotCi0jZGVmaW5lIEJFX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBMKQotLyoKLSAqIE1lc3NhZ2VJZDogQkVfUEVORElORwotICogIFRoZSBCbGFkZUVuZ2luZSBEcml2ZXIgY2FsbCBzdWNjZWVkZWQsIGFuZCBwZW5kZWQgb3BlcmF0aW9uLgotICovCi0jZGVmaW5lIEJFX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDcwMDAxTCkKLSNkZWZpbmUgQkVfU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgICAgKEJFX1BFTkRJTkcpCi0vKgotICogTWVzc2FnZUlkOiBCRV9OT1RfT0sKLSAqICBBbiBlcnJvciBvY2N1cnJlZC4KLSAqLwotI2RlZmluZSBCRV9OT1RfT0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhFMDA3MDAwMkwpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfU1lTVEVNX1JFU09VUkNFUwotICogIEluc3VmZmljaWVudCBob3N0IHN5c3RlbSByZXNvdXJjZXMgZXhpc3QgdG8gY29tcGxldGUgdGhlIEFQSS4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfU1lTVEVNX1JFU09VUkNFUyAgICAgICAoMHhFMDA3MDAwM0wpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfQ0hJUF9SRVNPVVJDRVMKLSAqICBJbnN1ZmZpY2llbnQgY2hpcCByZXNvdXJjZXMgZXhpc3QgdG8gY29tcGxldGUgdGhlIEFQSS4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfQ0hJUF9SRVNPVVJDRVMgICAgICAgICAoMHhFMDA3MDAwNEwpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfTk9fUkVTT1VSQ0UKLSAqICBJbnN1ZmZpY2llbnQgcmVzb3VyY2VzIHRvIGNvbXBsZXRlIHJlcXVlc3QuCi0gKi8KLSNkZWZpbmUgQkVfU1RBVFVTX05PX1JFU09VUkNFICAgICAgICAgICAgKDB4RTAwNzAwMDVMKQotLyoKLSAqIE1lc3NhZ2VJZDogQkVfU1RBVFVTX0JVU1kKLSAqICBSZXNvdXJjZSBpcyBjdXJyZW50bHkgYnVzeS4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfQlVTWSAgICAgICAgICAgICAgICAgICAoMHhFMDA3MDAwNkwpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIKLSAqICBJbnZhbGlkIFBhcmFtZXRlciBpbiByZXF1ZXN0LgotICovCi0jZGVmaW5lIEJFX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUiAgICAgICgweEUwMDAwMDA3TCkKLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX1NUQVRVU19OT1RfU1VQUE9SVEVECi0gKiAgUmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgotICovCi0jZGVmaW5lIEJFX1NUQVRVU19OT1RfU1VQUE9SVEVEICAgICAgICAgICgweEUwMDAwMDBETCkKLQotLyoKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICBFIFQgSCBFIFIgTiBFIFQgICBTIFQgQSBUIFUgUwotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotLyoKLSAqIE1lc3NhZ2VJZDogQkVfRVRIX1RYX0VSUk9SCi0gKiAgVGhlIEV0aGVybmV0IGRldmljZSBkcml2ZXIgZmFpbGVkIHRvIHRyYW5zbWl0IGEgcGFja2V0LgotICovCi0jZGVmaW5lIEJFX0VUSF9UWF9FUlJPUiAgICAgICAgICAgICAgICAgICgweEUwMDcwMTAxTCkKLQotLyoKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICBTIEggQSBSIEUgRCAgIFMgVCBBIFQgVSBTCi0gKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfVkJEX0lOVkFMSURfVkVSU0lPTgotICogIFRoZSBkZXZpY2UgZHJpdmVyIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZSBWQkQuCi0gKi8KLSNkZWZpbmUgQkVfU1RBVFVTX0lOVkFMSURfVkVSU0lPTiAgICAoMHhFMDA3MDQwMkwpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfRE9NQUlOX0RFTklFRAotICogIFRoZSBvcGVyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGR1ZSB0byBpbnN1ZmZpY2llbnQgYWNjZXNzCi0gKiAgcmlnaHRzIGZvciB0aGUgcmVxdWVzdGluZyBkb21haW4uCi0gKi8KLSNkZWZpbmUgQkVfU1RBVFVTX0RPTUFJTl9ERU5JRUQgICAgICAgICAgKDB4RTAwNzA0MDNMKQotLyoKLSAqIE1lc3NhZ2VJZDogQkVfU1RBVFVTX1RDUF9OT1RfU1RBUlRFRAotICogIFRoZSBlbWJlZGRlZCBUQ1AvSVAgc3RhY2sgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQuCi0gKi8KLSNkZWZpbmUgQkVfU1RBVFVTX1RDUF9OT1RfU1RBUlRFRCAgICAgICAgKDB4RTAwNzA0MDlMKQotLyoKLSAqIE1lc3NhZ2VJZDogQkVfU1RBVFVTX05PX01DQ19XUkIKLSAqICBObyBmcmVlIE1DQyBXUkIgYXJlIGF2YWlsYWJsZSBmb3IgcG9zdGluZyB0aGUgcmVxdWVzdC4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfTk9fTUNDX1dSQiAgICAgICAgICAgICAgICAgKDB4RTAwNzA0MTRMKQotCi0jZW5kaWYgLyogX0JFU1RBVFVTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Nldi5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Nldi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDk5NjkyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9jZXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fY2V2X2FtYXBfaF9fCi0jZGVmaW5lIF9fY2V2X2FtYXBfaF9fCi0jaW5jbHVkZSAiZXAuaCIKLQotLyoKLSAqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAwLiBUaGUgZmlyc3Qgb2YgZm91ciBhcHBsaWNhdGlvbgotICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGludGVycnVwdHMKLSAqIGZvciBFdmVudCBRdWV1ZXMgRVEwIHRocm91Z2ggRVEzMS4KLSAqLwotc3RydWN0IEJFX0NFVl9JU1IwX0NTUl9BTUFQIHsKLQl1OCBpbnRlcnJ1cHQwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDI7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDU7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTA7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxMTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTM7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxNDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDE1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTY7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxNzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDE4OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTk7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQyMDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDIxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MjI7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQyMzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDI0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MjU7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQyNjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDI3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Mjg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQyOTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDMwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MzE7CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgQ0VWX0lTUjBfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qCi0gKiBIb3N0IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMS4gVGhlIHNlY29uZCBvZiBmb3VyIGFwcGxpY2F0aW9uCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycy4gVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgaW50ZXJydXB0cwotICogZm9yIEV2ZW50IFF1ZXVlcyBFUTMyIHRocm91Z2ggRVE2My4KLSAqLwotc3RydWN0IEJFX0NFVl9JU1IxX0NTUl9BTUFQIHsKLQl1OCBpbnRlcnJ1cHQzMjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDMzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MzQ7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQzNTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDM2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Mzc7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQzODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDM5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDA7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0MTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDQyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDM7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0NDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDQ1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDY7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0NzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDQ4OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDk7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ1MDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDUxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NTI7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ1MzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDU0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NTU7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ1NjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDU3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NTg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ1OTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDYwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NjE7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ2MjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDYzOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IENFVl9JU1IxX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotLyoKLSAqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAyLiBUaGUgdGhpcmQgb2YgZm91ciBhcHBsaWNhdGlvbgotICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGludGVycnVwdHMKLSAqIGZvciBFdmVudCBRdWV1ZXMgRVE2NCB0aHJvdWdoIEVROTUuCi0gKi8KLXN0cnVjdCBCRV9DRVZfSVNSMl9DU1JfQU1BUCB7Ci0JdTggaW50ZXJydXB0NjQ7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ2NTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDY2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Njc7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ2ODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDY5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NzA7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3MTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDcyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NzM7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3NDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDc1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NzY7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3NzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDc4OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Nzk7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ4MDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDgxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0ODI7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ4MzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDg0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0ODU7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ4NjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDg3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0ODg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ4OTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDkwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0OTE7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ5MjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDkzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0OTQ7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ5NTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBDRVZfSVNSMl9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAzLiBUaGUgZm91cnRoIG9mIGZvdXIgYXBwbGljYXRpb24KLSAqIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBpbnRlcnJ1cHRzCi0gKiBmb3IgRXZlbnQgUXVldWVzIEVROTYgdGhyb3VnaCBFUTEyNy4KLSAqLwotc3RydWN0IEJFX0NFVl9JU1IzX0NTUl9BTUFQIHsKLQl1OCBpbnRlcnJ1cHQ5NjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDk3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0OTg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ5OTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwMDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwMTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwMjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwMzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwNDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwNTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwNjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwNzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEwOTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExMDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExMTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExMjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExMzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExNDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExNTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExNjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExNzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExOTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyMDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyMTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyMjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyMzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyNDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyNTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyNjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDEyNzsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBDRVZfSVNSM19DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogIENvbXBsZXRpb25zIGFuZCBFdmVudHMgYmxvY2sgUmVnaXN0ZXJzLiAgKi8KLXN0cnVjdCBCRV9DRVZfQ1NSTUFQX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzMyXTsJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQyWzMyXTsJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQzWzMyXTsJLyogRFdPUkQgMyAqLwotCXN0cnVjdCBCRV9DRVZfSVNSMF9DU1JfQU1BUCBpc3IwOwotCXN0cnVjdCBCRV9DRVZfSVNSMV9DU1JfQU1BUCBpc3IxOwotCXN0cnVjdCBCRV9DRVZfSVNSMl9DU1JfQU1BUCBpc3IyOwotCXN0cnVjdCBCRV9DRVZfSVNSM19DU1JfQU1BUCBpc3IzOwotCXU4IHJzdmQ0WzMyXTsJLyogRFdPUkQgOCAqLwotCXU4IHJzdmQ1WzMyXTsJLyogRFdPUkQgOSAqLwotCXU4IHJzdmQ2WzMyXTsJLyogRFdPUkQgMTAgKi8KLQl1OCByc3ZkN1szMl07CS8qIERXT1JEIDExICovCi0JdTggcnN2ZDhbMzJdOwkvKiBEV09SRCAxMiAqLwotCXU4IHJzdmQ5WzMyXTsJLyogRFdPUkQgMTMgKi8KLQl1OCByc3ZkMTBbMzJdOwkvKiBEV09SRCAxNCAqLwotCXU4IHJzdmQxMVszMl07CS8qIERXT1JEIDE1ICovCi0JdTggcnN2ZDEyWzMyXTsJLyogRFdPUkQgMTYgKi8KLQl1OCByc3ZkMTNbMzJdOwkvKiBEV09SRCAxNyAqLwotCXU4IHJzdmQxNFszMl07CS8qIERXT1JEIDE4ICovCi0JdTggcnN2ZDE1WzMyXTsJLyogRFdPUkQgMTkgKi8KLQl1OCByc3ZkMTZbMzJdOwkvKiBEV09SRCAyMCAqLwotCXU4IHJzdmQxN1szMl07CS8qIERXT1JEIDIxICovCi0JdTggcnN2ZDE4WzMyXTsJLyogRFdPUkQgMjIgKi8KLQl1OCByc3ZkMTlbMzJdOwkvKiBEV09SRCAyMyAqLwotCXU4IHJzdmQyMFszMl07CS8qIERXT1JEIDI0ICovCi0JdTggcnN2ZDIxWzMyXTsJLyogRFdPUkQgMjUgKi8KLQl1OCByc3ZkMjJbMzJdOwkvKiBEV09SRCAyNiAqLwotCXU4IHJzdmQyM1szMl07CS8qIERXT1JEIDI3ICovCi0JdTggcnN2ZDI0WzMyXTsJLyogRFdPUkQgMjggKi8KLQl1OCByc3ZkMjVbMzJdOwkvKiBEV09SRCAyOSAqLwotCXU4IHJzdmQyNlszMl07CS8qIERXT1JEIDMwICovCi0JdTggcnN2ZDI3WzMyXTsJLyogRFdPUkQgMzEgKi8KLQl1OCByc3ZkMjhbMzJdOwkvKiBEV09SRCAzMiAqLwotCXU4IHJzdmQyOVszMl07CS8qIERXT1JEIDMzICovCi0JdTggcnN2ZDMwWzE5Ml07CS8qIERXT1JEIDM0ICovCi0JdTggcnN2ZDMxWzE5Ml07CS8qIERXT1JEIDQwICovCi0JdTggcnN2ZDMyWzE2MF07CS8qIERXT1JEIDQ2ICovCi0JdTggcnN2ZDMzWzE2MF07CS8qIERXT1JEIDUxICovCi0JdTggcnN2ZDM0WzE2MF07CS8qIERXT1JEIDU2ICovCi0JdTggcnN2ZDM1Wzk2XTsJLyogRFdPUkQgNjEgKi8KLQl1OCByc3ZkMzZbMTkyXVszMl07CS8qIERXT1JEIDY0ICovCi19IF9fcGFja2VkOwotc3RydWN0IENFVl9DU1JNQVBfQU1BUCB7Ci0JdTMyIGR3WzI1Nl07Ci19OwotCi0jZW5kaWYgLyogX19jZXZfYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9jcS5jIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2NxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MDQ1ODYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2NxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotI2luY2x1ZGUgImh3bGliLmgiCi0jaW5jbHVkZSAiYmVzdGF0dXMuaCIKLQotLyoKLSAqIENvbXBsZXRpb24gUXVldWUgT2JqZWN0cwotICovCi0vKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgICAgICAgICAgICAgIFAgVSBCIEwgSSBDICBSIE8gVSBUIEkgTiBFIFMKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGNyZWF0ZXMgYSBjb21wbGV0aW9uIHF1ZXVlIGJhc2VkIG9uIHRoZSBjbGllbnQgY29tcGxldGlvbgotICAgIHF1ZXVlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0KLQotICAgIEZ1bmN0aW9uT2JqZWN0ICAgICAgLSBIYW5kbGUgdG8gYSBmdW5jdGlvbiBvYmplY3QKLSAgICBDcUJhc2VWYSAgICAgICAgICAgIC0gQmFzZSBWQSBmb3IgYSB0aGUgQ1EgcmluZwotICAgIE51bUVudHJpZXMgICAgICAgICAgLSBDRVZfQ1FfQ05UXyogdmFsdWVzCi0gICAgc29sRXZlbnRFbmFibGUgICAgICAtIDAgPSBBbGwgQ1FFcyBjYW4gZ2VuZXJhdGUgRXZlbnRzIGlmIENRIGlzIGV2ZW50YWJsZQotCQkJMSA9IG9ubHkgQ1FFcyB3aXRoIHNvbGljaXRlZCBiaXQgc2V0IGFyZSBldmVudGFibGUKLSAgICBldmVudGFibGUgICAgICAgICAgIC0gRXZlbnRhYmxlIENRLCBnZW5lcmF0ZXMgaW50ZXJydXB0cy4KLSAgICBub2RlbGF5ICAgICAgICAgICAgIC0gMSA9IEZvcmNlIGludGVycnVwdCwgcmVsZXZlbnQgaWYgQ1EgZXZlbnRhYmxlLgotCQkJSW50ZXJydXB0IGlzIGFzc2VydGVkIGltbWVkaWF0ZWx5IGFmdGVyIEVRRQotCQkJd3JpdGUgaXMgY29uZmlybWVkLCByZWdhcmRsZXNzIG9mIEVRIFRpbWVyCi0JCQlvciB3YXRlcm1hcmsgc2V0dGluZ3MuCi0gICAgd21lICAgICAgICAgICAgICAgICAtIEVuYWJsZSB3YXRlcm1hcmsgYmFzZWQgY29hbGVzY2luZwotICAgIHdtVGhyZXNoICAgICAgICAgICAgLSBIaWdoIHdhdGVybWFyayhDUSBmdWxsbmVzcyBhdCB3aGljaCBldmVudAotCQkJb3IgaW50ZXJydXB0IHNob3VsZCBiZSBhc3NlcnRlZCkuICBUaGVzZSBhcmUgdGhlCi0JCQlDRVZfV0FURVJNQVJLIGVuY29kZWQgdmFsdWVzLgotICAgIEVxT2JqZWN0ICAgICAgICAgICAgLSBFUSBIYW5kbGUgdG8gYXNzaWduIHRvIHRoaXMgQ1EKLSAgICBwcENxT2JqZWN0ICAgICAgICAgIC0gSW50ZXJuYWwgQ1EgSGFuZGxlIHJldHVybmVkLgotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYSB1c2VmdWwgZXJyb3IgY29kZSBpcwotCXJldHVybmVkLgotCi0gICAgSVJRTCA8IERJU1BBVENIX0xFVkVMCi0KLSovCi1pbnQgYmVfY3FfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0Jc3RydWN0IHJpbmdfZGVzYyAqcmQsIHUzMiBsZW5ndGgsIGJvb2wgc29saWNpdGVkX2V2ZW50YWJsZSwKLQlib29sIG5vX2RlbGF5LCB1MzIgd21fdGhyZXNoLAotCXN0cnVjdCBiZV9lcV9vYmplY3QgKmVxX29iamVjdCwgc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0KQotewotCWludCBzdGF0dXMgPSBCRV9TVUNDRVNTOwotCXUzMiBudW1fZW50cmllc19lbmNvZGluZzsKLQl1MzIgbnVtX2VudHJpZXMgPSBsZW5ndGggLyBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKTsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0NRX0NSRUFURSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JdTMyIG47Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0JQVNTRVJUKHJkKTsKLQlBU1NFUlQoY3Ffb2JqZWN0KTsKLQlBU1NFUlQobGVuZ3RoICUgc2l6ZW9mKHN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCkgPT0gMCk7Ci0KLQlzd2l0Y2ggKG51bV9lbnRyaWVzKSB7Ci0JY2FzZSAyNTY6Ci0JCW51bV9lbnRyaWVzX2VuY29kaW5nID0gQ0VWX0NRX0NOVF8yNTY7Ci0JCWJyZWFrOwotCWNhc2UgNTEyOgotCQludW1fZW50cmllc19lbmNvZGluZyA9IENFVl9DUV9DTlRfNTEyOwotCQlicmVhazsKLQljYXNlIDEwMjQ6Ci0JCW51bV9lbnRyaWVzX2VuY29kaW5nID0gQ0VWX0NRX0NOVF8xMDI0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JCXJldHVybiBCRV9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7Ci0JfQotCi0JLyoKLQkgKiBBbGwgY3EgZW50cmllcyBhbGwgdGhlIHNhbWUgc2l6ZS4gIFVzZSBpU0NTSSB2ZXJzaW9uCi0JICogYXMgYSB0ZXN0IGZvciB0aGUgcHJvcGVyIHJkIGxlbmd0aC4KLQkgKi8KLQltZW1zZXQoY3Ffb2JqZWN0LCAwLCBzaXplb2YoKmNxX29iamVjdCkpOwotCi0JYXRvbWljX3NldCgmY3Ffb2JqZWN0LT5yZWZfY291bnQsIDApOwotCWNxX29iamVjdC0+cGFyZW50X2Z1bmN0aW9uID0gcGZvYjsKLQljcV9vYmplY3QtPmVxX29iamVjdCA9IGVxX29iamVjdDsKLQljcV9vYmplY3QtPm51bV9lbnRyaWVzID0gbnVtX2VudHJpZXM7Ci0JLyogc2F2ZSBmb3IgTUNDIGNxIHByb2Nlc3NpbmcgKi8KLQljcV9vYmplY3QtPnZhID0gcmQtPnZhOwotCi0JLyogbWFwIGludG8gVVQuICovCi0JbGVuZ3RoID0gbnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCUFTU0VSVCh3cmIpOwotCQlUUkFDRShETF9FUlIsICJObyBmcmVlIE1DQyBXUkJzIGluIGNyZWF0ZSBFUS4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fQ1FfQ1JFQVRFKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5udW1fcGFnZXMgPSBQQUdFU19TUEFOTkVEKE9GRlNFVF9JTl9QQUdFKHJkLT52YSksCi0JCQkJCQkJCQlsZW5ndGgpOwotCi0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgdmFsaWQsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgMSk7Ci0JbiA9IHBmb2ItPnBjaV9mdW5jdGlvbl9udW1iZXI7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgRnVuYywgJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBuKTsKLQotCW4gPSAoZXFfb2JqZWN0ICE9IE5VTEwpOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0NPTlRFWFQsIEV2ZW50YWJsZSwKLQkJCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG4pOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0NPTlRFWFQsIEFybWVkLCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIDEpOwotCi0JbiA9IGVxX29iamVjdCA/IGVxX29iamVjdC0+ZXFfaWQgOiAwOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0NPTlRFWFQsIEVRSUQsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgQ291bnQsCi0JCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG51bV9lbnRyaWVzX2VuY29kaW5nKTsKLQotCW4gPSAwOyAvKiBQcm90ZWN0aW9uIERvbWFpbiBpcyBhbHdheXMgMCBpbiAgTGludXggIGRyaXZlciAqLwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0NPTlRFWFQsIFBELCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG4pOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0NPTlRFWFQsIE5vRGVsYXksCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBub19kZWxheSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgU29sRXZlbnQsCi0JCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIHNvbGljaXRlZF9ldmVudGFibGUpOwotCi0JbiA9ICh3bV90aHJlc2ggIT0gMHhGRkZGRkZGRik7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgV01FLCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG4pOwotCi0JbiA9IChuID8gd21fdGhyZXNoIDogMCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgV2F0ZXJtYXJrLAotCQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0JLyogQ3JlYXRlIGEgcGFnZSBsaXN0IGZvciB0aGUgRldDTUQuICovCi0JYmVfcmRfdG9fcGFfbGlzdChyZCwgZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzLAotCQkJICBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5wYWdlcykpOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlUUkFDRShETF9FUlIsICJNQ0MgdG8gY3JlYXRlIENRIGZhaWxlZC4iKTsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogUmVtZW1iZXIgdGhlIENRIGlkLiAqLwotCWNxX29iamVjdC0+Y3FfaWQgPSBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLmNxX2lkOwotCi0JLyogaW5zZXJ0IHRoaXMgY3EgaW50byBlcV9vYmplY3QgcmVmZXJlbmNlICovCi0JaWYgKGVxX29iamVjdCkgewotCQlhdG9taWNfaW5jKCZlcV9vYmplY3QtPnJlZl9jb3VudCk7Ci0JCWxpc3RfYWRkX3RhaWwoJmNxX29iamVjdC0+Y3FsaXN0X2Zvcl9lcSwKLQkJCQkJJmVxX29iamVjdC0+Y3FfbGlzdF9oZWFkKTsKLQl9Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0KLSAgICBEZWZlcmVuY2VzIHRoZSBnaXZlbiBvYmplY3QuIE9uY2UgdGhlIG9iamVjdCdzIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0bwotICAgIHplcm8sIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkIGFuZCBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGhlbGQgYnkgdGhpcyBvYmplY3QKLSAgICBhcmUgcmVsZWFzZWQuICBUaGUgb24tY2hpcCBjb250ZXh0IGlzIGFsc28gZGVzdHJveWVkIGFsb25nIHdpdGggdGhlIHF1ZXVlCi0gICAgSUQsIGFuZCBhbnkgbWFwcGluZ3MgbWFkZSBpbnRvIHRoZSBVVC4KLQotICAgIGNxX29iamVjdCAgICAgICAgICAgIC0gQ1EgaGFuZGxlIHJldHVybmVkIGZyb20gY3Ffb2JqZWN0X2NyZWF0ZS4KLQotICAgIHJldHVybnMgdGhlIGN1cnJlbnQgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBvYmplY3QKLQotICAgIElSUUw6IElSUUwgPCBESVNQQVRDSF9MRVZFTAotKi8KLWludCBiZV9jcV9kZXN0cm95KHN0cnVjdCBiZV9jcV9vYmplY3QgKmNxX29iamVjdCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQotCS8qIE5vdGhpbmcgc2hvdWxkIHJlZmVyZW5jZSB0aGlzIENRIGF0IHRoaXMgcG9pbnQuICovCi0JQVNTRVJUKGF0b21pY19yZWFkKCZjcV9vYmplY3QtPnJlZl9jb3VudCkgPT0gMCk7Ci0KLQkvKiBTZW5kIGZ3Y21kIHRvIGRlc3Ryb3kgdGhlIENRLiAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3JpbmdfZGVzdHJveShjcV9vYmplY3QtPnBhcmVudF9mdW5jdGlvbiwKLQkJICAgICBjcV9vYmplY3QtPmNxX2lkLCBGV0NNRF9SSU5HX1RZUEVfQ1EsCi0JCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCUFTU0VSVChzdGF0dXMgPT0gMCk7Ci0KLQkvKiBSZW1vdmUgcmVmZXJlbmNlIGlmIHRoaXMgaXMgYW4gZXZlbnRhYmxlIENRLiAqLwotCWlmIChjcV9vYmplY3QtPmVxX29iamVjdCkgewotCQlhdG9taWNfZGVjKCZjcV9vYmplY3QtPmVxX29iamVjdC0+cmVmX2NvdW50KTsKLQkJbGlzdF9kZWwoJmNxX29iamVjdC0+Y3FsaXN0X2Zvcl9lcSk7Ci0JfQotCXJldHVybiBCRV9TVUNDRVNTOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZGVzY3JpcHRvcnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9kZXNjcmlwdG9ycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGE0MzhjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9kZXNjcmlwdG9ycy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2Rlc2NyaXB0b3JzX2FtYXBfaF9fCi0jZGVmaW5lIF9fZGVzY3JpcHRvcnNfYW1hcF9oX18KLQotLyoKLSAqIC0tLSBJUENfTk9ERV9JRF9FTlVNIC0tLQotICogSVBDIHByb2Nlc3NvciBpZCB2YWx1ZXMKLSAqLwotI2RlZmluZSBUUE9TVF9OT0RFX0lEICAgICAgICAgICAgICAgICAgICgwKQkvKiBUUE9TVCBJRCAqLwotI2RlZmluZSBUUFJFX05PREVfSUQgICAgICAgICAgICAgICAgICAgICgxKQkvKiBUUFJFIElEICovCi0jZGVmaW5lIFRYVUxQMF9OT0RFX0lEICAgICAgICAgICAgICAgICAgKDIpCS8qIFRYVUxQMCBJRCAqLwotI2RlZmluZSBUWFVMUDFfTk9ERV9JRCAgICAgICAgICAgICAgICAgICgzKQkvKiBUWFVMUDEgSUQgKi8KLSNkZWZpbmUgVFhVTFAyX05PREVfSUQgICAgICAgICAgICAgICAgICAoNCkJLyogVFhVTFAyIElEICovCi0jZGVmaW5lIFJYVUxQMF9OT0RFX0lEICAgICAgICAgICAgICAgICAgKDUpCS8qIFJYVUxQMCBJRCAqLwotI2RlZmluZSBSWFVMUDFfTk9ERV9JRCAgICAgICAgICAgICAgICAgICg2KQkvKiBSWFVMUDEgSUQgKi8KLSNkZWZpbmUgUlhVTFAyX05PREVfSUQgICAgICAgICAgICAgICAgICAoNykJLyogUlhVTFAyIElEICovCi0jZGVmaW5lIE1QVV9OT0RFX0lEICAgICAgICAgICAgICAgICAgICAgKDE1KQkvKiBNUFUgSUQgKi8KLQotLyoKLSAqIC0tLSBNQUNfSURfRU5VTSAtLS0KLSAqIE1lYW5pbmcgb2YgdGhlIG1hY19pZCBmaWVsZCBpbiByeHBwX2V0aF9kCi0gKi8KLSNkZWZpbmUgUE9SVDBfSE9TVF9NQUMwICAgICgwKSAgLyogUEQgMCwgUG9ydCAwLCBob3N0IG5ldHdvcmtpbmcsIE1BQyAwLiAqLwotI2RlZmluZSBQT1JUMF9IT1NUX01BQzEgICAgKDEpCS8qIFBEIDAsIFBvcnQgMCwgaG9zdCBuZXR3b3JraW5nLCBNQUMgMS4gKi8KLSNkZWZpbmUgUE9SVDBfU1RPUkFHRV9NQUMwICgyKQkvKiBQRCAwLCBQb3J0IDAsIGhvc3Qgc3RvcmFnZSwgTUFDIDAuICovCi0jZGVmaW5lIFBPUlQwX1NUT1JBR0VfTUFDMSAoMykJLyogUEQgMCwgUG9ydCAwLCBob3N0IHN0b3JhZ2UsIE1BQyAxLiAqLwotI2RlZmluZSBQT1JUMV9IT1NUX01BQzAgICAgKDQpCS8qIFBEIDAsIFBvcnQgMSBob3N0IG5ldHdvcmtpbmcsIE1BQyAwLiAqLwotI2RlZmluZSBQT1JUMV9IT1NUX01BQzEgICAgKDUpCS8qIFBEIDAsIFBvcnQgMSBob3N0IG5ldHdvcmtpbmcsIE1BQyAxLiAqLwotI2RlZmluZSBQT1JUMV9TVE9SQUdFX01BQzAgKDYpCS8qIFBEIDAsIFBvcnQgMSBob3N0IHN0b3JhZ2UsIE1BQyAwLiAqLwotI2RlZmluZSBQT1JUMV9TVE9SQUdFX01BQzEgKDcpCS8qIFBEIDAsIFBvcnQgMSBob3N0IHN0b3JhZ2UsIE1BQyAxLiAqLwotI2RlZmluZSBGSVJTVF9WTV9NQUMgICAgICAgKDgpCS8qIFBEIDEgTUFDLiBQcm90ZWN0aW9uIGRvbWFpbnMgaGF2ZSBJRHMgKi8KLQkJCQkvKiBmcm9tIDB4OC0weDI2LCBvbmUgcGVyIFBELiAqLwotI2RlZmluZSBMQVNUX1ZNX01BQyAgICAgICAgKDM4KQkvKiBQRCAzMSBNQUMuICovCi0jZGVmaW5lIE1HTVRfTUFDICAgICAgICAgICAoMzkpCS8qIE1hbmFnZW1lbnQgcG9ydCBNQUMuICovCi0jZGVmaW5lIE1BUkJMRV9NQUMwICAgICAgICAoNTkpCS8qIFVzZWQgZm9yIGZsdXNoaW5nIGZ1bmN0aW9uIDAgcmVjZWl2ZSAqLwotCQkJCSAgLyoKLQkJCQkgICAqIHF1ZXVlcyBiZWZvcmUgcmUtdXNpbmcgYSB0b3JuLWRvd24KLQkJCQkgICAqIHJlY2VpdmUgcmluZy4gdGhlIERBID0KLQkJCQkgICAqIDAwLTAwLTAwLTAwLTAwLTAwLCBhbmQgdGhlIE1TQiBvZiB0aGUKLQkJCQkgICAqIFNBID0gMDAKLQkJCQkgICAqLwotI2RlZmluZSBNQVJCTEVfTUFDMSAgICAgICAgKDYwKQkvKiBVc2VkIGZvciBmbHVzaGluZyBmdW5jdGlvbiAxIHJlY2VpdmUgKi8KLQkJCQkgIC8qCi0JCQkJICAgKiBxdWV1ZXMgYmVmb3JlIHJlLXVzaW5nIGEgdG9ybi1kb3duCi0JCQkJICAgKiByZWNlaXZlIHJpbmcuIHRoZSBEQSA9Ci0JCQkJICAgKiAwMC0wMC0wMC0wMC0wMC0wMCwgYW5kIHRoZSBNU0Igb2YgdGhlCi0JCQkJICAgKiBTQSAhPSAwMAotCQkJCSAgICovCi0jZGVmaW5lIE5VTExfTUFDICAgICAgICAgICAoNjEpCS8qIFByb21pc2N1b3VzIG1vZGUsIGluZGljYXRlcyBubyBtYXRjaCAqLwotI2RlZmluZSBNQ0FTVF9NQUMgICAgICAgICAgKDYyKQkvKiBNdWx0aWNhc3QgbWF0Y2guICovCi0jZGVmaW5lIEJDQVNUX01BVENIICAgICAgICAoNjMpCS8qIEJyb2FkY2FzdCBtYXRjaC4gKi8KLQotI2VuZGlmIC8qIF9fZGVzY3JpcHRvcnNfYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9kb29yYmVsbHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9kb29yYmVsbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUwY2M0ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZG9vcmJlbGxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2Rvb3JiZWxsc19hbWFwX2hfXwotI2RlZmluZSBfX2Rvb3JiZWxsc19hbWFwX2hfXwotCi0vKiBUaGUgVFgvUkRNQSBzZW5kIHF1ZXVlIGRvb3JiZWxsLiAqLwotc3RydWN0IEJFX1NRX0RCX0FNQVAgewotCXU4IGNpZFsxMV07CQkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbNV07CS8qIERXT1JEIDAgKi8KLQl1OCBudW1Qb3N0ZWRbMTRdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgU1FfREJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogVGhlIHJlY2VpdmUgcXVldWUgZG9vcmJlbGwuICovCi1zdHJ1Y3QgQkVfUlFfREJfQU1BUCB7Ci0JdTggcnFbMTBdOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzEzXTsJLyogRFdPUkQgMCAqLwotCXU4IEludmFsaWRhdGU7CS8qIERXT1JEIDAgKi8KLQl1OCBudW1Qb3N0ZWRbOF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUlFfREJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqIFRoZSBDUS9FUSBkb29yYmVsbC4gU29mdHdhcmUgTVVTVCBzZXQgcmVzZXJ2ZWQgZmllbGRzIGluIHRoaXMKLSAqIGRlc2NyaXB0b3IgdG8gemVybywgb3RoZXJ3aXNlIChDRVYpIGhhcmR3YXJlIHdpbGwgbm90IGV4ZWN1dGUgdGhlCi0gKiBkb29yYmVsbCAoZmxhZ2dpbmcgYSBiYWRfZGJfcWlkIGVycm9yIGluc3RlYWQpLgotICovCi1zdHJ1Y3QgQkVfQ1FfREJfQU1BUCB7Ci0JdTggcWlkWzEwXTsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs0XTsJLyogRFdPUkQgMCAqLwotCXU4IHJlYXJtOwkJLyogRFdPUkQgMCAqLwotCXU4IGV2ZW50OwkJLyogRFdPUkQgMCAqLwotCXU4IG51bV9wb3BwZWRbMTNdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbM107CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgQ1FfREJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotc3RydWN0IEJFX1RQTV9SUV9EQl9BTUFQIHsKLQl1OCBxaWRbMTBdOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzZdOwkvKiBEV09SRCAwICovCi0JdTggbnVtUG9zdGVkWzExXTsJLyogRFdPUkQgMCAqLwotCXU4IG1zc19jbnRbNV07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgVFBNX1JRX0RCX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qCi0gKiBQb3N0IFdSQiBRdWV1ZSBEb29yYmVsbCBSZWdpc3RlciB1c2VkIGJ5IHRoZSBob3N0IFN0b3JhZ2Ugc3RhY2sKLSAqIHRvIG5vdGlmeSB0aGUgY29udHJvbGxlciBvZiBhIHBvc3RlZCBXb3JrIFJlcXVlc3QgQmxvY2sKLSAqLwotc3RydWN0IEJFX1dSQl9QT1NUX0RCX0FNQVAgewotCXU4IHdyYl9jaWRbMTBdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbNl07CS8qIERXT1JEIDAgKi8KLQl1OCB3cmJfaW5kZXhbOF07CS8qIERXT1JEIDAgKi8KLQl1OCBudW1iZXJQb3N0ZWRbOF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgV1JCX1BPU1RfREJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqIFVwZGF0ZSBEZWZhdWx0IFBEVSBRdWV1ZSBEb29yYmVsbCBSZWdpc3RlciB1c2VkIHRvIGNvbW11bmljYXRlCi0gKiB0byB0aGUgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXIgaGFzIHN0b3BwZWQgcHJvY2Vzc2luZyB0aGUgcXVldWUKLSAqIGFuZCB3aGVyZSBpbiB0aGUgcXVldWUgaXQgc3RvcHBlZCwgdGhpcyBpcwotICogYSBDUSBFbnRyeSBUeXBlLiBVc2VkIGJ5IHN0b3JhZ2UgZHJpdmVyLgotICovCi1zdHJ1Y3QgQkVfREVGQVVMVF9QRFVfREJfQU1BUCB7Ci0JdTggcWlkWzEwXTsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs0XTsJLyogRFdPUkQgMCAqLwotCXU4IHJlYXJtOwkJLyogRFdPUkQgMCAqLwotCXU4IGV2ZW50OwkJLyogRFdPUkQgMCAqLwotCXU4IGNxcHJvY1sxNF07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBERUZBVUxUX1BEVV9EQl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBNYW5hZ2VtZW50IENvbW1hbmQgYW5kIENvbnRyb2xsZXIgZGVmYXVsdCBmcmFnbWVudCByaW5nICovCi1zdHJ1Y3QgQkVfTUNDX0RCX0FNQVAgewotCXU4IHJpZFsxMV07CQkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbNV07CS8qIERXT1JEIDAgKi8KLQl1OCBudW1Qb3N0ZWRbMTRdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgTUNDX0RCX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qCi0gKiBVc2VkIGZvciBib290c3RyYXBwaW5nIHRoZSBIb3N0IGludGVyZmFjZS4gVGhpcyByZWdpc3RlciBpcwotICogdXNlZCBmb3IgZHJpdmVyIGNvbW11bmljYXRpb24gd2l0aCB0aGUgTVBVIHdoZW4gbm8gTUNDIFJpbmdzIGV4aXN0LgotICogVGhlIHNvZnR3YXJlIG11c3Qgd3JpdGUgdGhpcyByZWdpc3RlciB0d2ljZSB0byBwb3N0IGFueSBNQ0MKLSAqIGNvbW1hbmQuIEZpcnN0LCBpdCB3cml0ZXMgdGhlIHJlZ2lzdGVyIHdpdGggaGk9MSBhbmQgdGhlIHVwcGVyIGJpdHMgb2YKLSAqIHRoZSAgcGh5c2ljYWwgYWRkcmVzcyBmb3IgdGhlIE1DQ19NQUlMQk9YIHN0cnVjdHVyZS4gIFNvZnR3YXJlIG11c3QgcG9sbAotICogdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGlzIGlzIGFja25vd2xlZGdlZC4gIFRoZW4sIHNvdHdhcmUgd3JpdGVzIHRoZQotICogcmVnaXN0ZXIgd2l0aCBoaT0wIHdpdGggdGhlIGxvd2VyIGJpdHMgaW4gdGhlIGFkZHJlc3MuICBJdCBtdXN0Ci0gKiBwb2xsIHRoZSByZWFkeSBiaXQgdW50aWwgdGhlIE1DQyBjb21tYW5kIGlzIGNvbXBsZXRlLiAgVXBvbiBjb21wbGV0aW9uLAotICogdGhlIE1DQ19NQUlMQk9YIHdpbGwgY29udGFpbiBhIHZhbGlkIGNvbXBsZXRpb24gcXVldWUgIGVudHJ5LgotICovCi1zdHJ1Y3QgQkVfTVBVX01BSUxCT1hfREJfQU1BUCB7Ci0JdTggcmVhZHk7CQkvKiBEV09SRCAwICovCi0JdTggaGk7CQkvKiBEV09SRCAwICovCi0JdTggYWRkcmVzc1szMF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgTVBVX01BSUxCT1hfREJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqICBUaGlzIGlzIHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBkb29yYmVsbCByZWdpc3RlciBtYXAuIE5vdGUgdGhhdAotICogIHdoaWxlIHRoaXMgbWFwIHNob3dzIGRvb3JiZWxscyBmb3IgYWxsIEJsYWRlIEVuZ2luZSBzdXBwb3J0ZWQKLSAqICBwcm90b2NvbHMsIG5vdCBhbGwgb2YgdGhlc2UgbWF5IGJlIHZhbGlkIGluIGEgZ2l2ZW4gZnVuY3Rpb24gb3IKLSAqICBwcm90ZWN0aW9uIGRvbWFpbi4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBhcHBsaWNhdGlvbgotICogIGFjY2Vzc2luZyB0aGUgZG9vcmJlbGxzIHRvIGtub3cgd2hpY2ggYXJlIHZhbGlkLiBFYWNoIGRvb3JiZWxsCi0gKiAgb2NjdXBpZXMgMzIgYnl0ZXMgb2Ygc3BhY2UsIGJ1dCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwKLSAqICBvbmx5IHRoZSBmaXJzdCA0IGJ5dGVzIHNob3VsZCBiZSB3cml0dGVuLiAgVGhlcmUgYXJlIDMyIGluc3RhbmNlcwotICogIG9mIHRoZXNlIGRvb3JiZWxscyBmb3IgdGhlIGhvc3QgYW5kIDMxIHZpcnR1YWwgbWFjaGluZXMgcmVzcGVjdGl2ZWx5LgotICogIFRoZSBob3N0IGFuZCBWTXMgd2lsbCBvbmx5IG1hcCB0aGUgZG9vcmJlbGwgcGFnZXMgYmVsb25naW5nIHRvIGl0cwotICogIHByb3RlY3Rpb24gZG9tYWluLiBJdCB3aWxsIG5vdCBiZSBhYmxlIHRvIHRvdWNoIHRoZSBkb29yYmVsbHMgZm9yCi0gKiAgYW5vdGhlciBWTS4gVGhlIGRvb3JiZWxscyBhcmUgdGhlIG9ubHkgcmVnaXN0ZXJzIGRpcmVjdGx5IGFjY2Vzc2libGUKLSAqICBieSBhIHZpcnR1YWwgbWFjaGluZS4gU2ltaWxhcmx5LCB0aGVyZSBhcmUgNTExIGFkZGl0aW9uYWwKLSAqICBkb29yYmVsbHMgZm9yIFJETUEgcHJvdGVjdGlvbiBkb21haW5zLiBQRCAwIGZvciBSRE1BIHNoYXJlcwotICogIHRoZSBzYW1lIHBoeXNpY2FsIHByb3RlY3Rpb24gZG9tYWluIGRvb3JiZWxsIHBhZ2UgYXMgRVRIL2lTQ1NJLgotICoKLSAqLwotc3RydWN0IEJFX1BST1RFQ1RJT05fRE9NQUlOX0RCTUFQX0FNQVAgewotCXU4IHJzdmQwWzUxMl07CS8qIERXT1JEIDAgKi8KLQlzdHJ1Y3QgQkVfU1FfREJfQU1BUCByZG1hX3NxX2RiOwotCXU4IHJzdmQxWzddWzMyXTsJLyogRFdPUkQgMTcgKi8KLQlzdHJ1Y3QgQkVfV1JCX1BPU1RfREJfQU1BUCBpc2NzaV93cmJfcG9zdF9kYjsKLQl1OCByc3ZkMls3XVszMl07CS8qIERXT1JEIDI1ICovCi0Jc3RydWN0IEJFX1NRX0RCX0FNQVAgZXR4X3NxX2RiOwotCXU4IHJzdmQzWzddWzMyXTsJLyogRFdPUkQgMzMgKi8KLQlzdHJ1Y3QgQkVfUlFfREJfQU1BUCByZG1hX3JxX2RiOwotCXU4IHJzdmQ0WzddWzMyXTsJLyogRFdPUkQgNDEgKi8KLQlzdHJ1Y3QgQkVfREVGQVVMVF9QRFVfREJfQU1BUCBpc2NzaV9kZWZhdWx0X3BkdV9kYjsKLQl1OCByc3ZkNVs3XVszMl07CS8qIERXT1JEIDQ5ICovCi0Jc3RydWN0IEJFX1RQTV9SUV9EQl9BTUFQIHRwbV9ycV9kYjsKLQl1OCByc3ZkNls3XVszMl07CS8qIERXT1JEIDU3ICovCi0Jc3RydWN0IEJFX1JRX0RCX0FNQVAgZXJ4X3JxX2RiOwotCXU4IHJzdmQ3WzddWzMyXTsJLyogRFdPUkQgNjUgKi8KLQlzdHJ1Y3QgQkVfQ1FfREJfQU1BUCBjcV9kYjsKLQl1OCByc3ZkOFs3XVszMl07CS8qIERXT1JEIDczICovCi0Jc3RydWN0IEJFX01DQ19EQl9BTUFQIG1wdV9tY2NfZGI7Ci0JdTggcnN2ZDlbN11bMzJdOwkvKiBEV09SRCA4MSAqLwotCXN0cnVjdCBCRV9NUFVfTUFJTEJPWF9EQl9BTUFQIG1jY19ib290c3RyYXBfZGI7Ci0JdTggcnN2ZDEwWzkzNV1bMzJdOwkvKiBEV09SRCA4OSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQUk9URUNUSU9OX0RPTUFJTl9EQk1BUF9BTUFQIHsKLQl1MzIgZHdbMTAyNF07Ci19OwotCi0jZW5kaWYgLyogX19kb29yYmVsbHNfYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9lcC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2VwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZmNmNjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2VwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZXBfYW1hcF9oX18KLSNkZWZpbmUgX19lcF9hbWFwX2hfXwotCi0vKiBHZW5lcmFsIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9FUF9DT05UUk9MX0NTUl9BTUFQIHsKLQl1OCBtMF9SeFBidWY7CS8qIERXT1JEIDAgKi8KLQl1OCBtMV9SeFBidWY7CS8qIERXT1JEIDAgKi8KLQl1OCBtMl9SeFBidWY7CS8qIERXT1JEIDAgKi8KLQl1OCBmZl9lbjsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFsyN107CS8qIERXT1JEIDAgKi8KLQl1OCBDUFVfcmVzZXQ7CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgRVBfQ09OVFJPTF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogU2VtYXBob3JlIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX0VQX1NFTUFQSE9SRV9DU1JfQU1BUCB7Ci0JdTggdmFsdWVbMzJdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IEVQX1NFTUFQSE9SRV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogRW1iZWRkZWQgUHJvY2Vzc29yIFNwZWNpZmljIFJlZ2lzdGVycy4gKi8KLXN0cnVjdCBCRV9FUF9DU1JNQVBfQU1BUCB7Ci0Jc3RydWN0IEJFX0VQX0NPTlRST0xfQ1NSX0FNQVAgZXBfY29udHJvbDsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDEgKi8KLQl1OCByc3ZkMVszMl07CS8qIERXT1JEIDIgKi8KLQl1OCByc3ZkMlszMl07CS8qIERXT1JEIDMgKi8KLQl1OCByc3ZkM1szMl07CS8qIERXT1JEIDQgKi8KLQl1OCByc3ZkNFszMl07CS8qIERXT1JEIDUgKi8KLQl1OCByc3ZkNVs4XVsxMjhdOwkvKiBEV09SRCA2ICovCi0JdTggcnN2ZDZbMzJdOwkvKiBEV09SRCAzOCAqLwotCXU4IHJzdmQ3WzMyXTsJLyogRFdPUkQgMzkgKi8KLQl1OCByc3ZkOFszMl07CS8qIERXT1JEIDQwICovCi0JdTggcnN2ZDlbMzJdOwkvKiBEV09SRCA0MSAqLwotCXU4IHJzdmQxMFszMl07CS8qIERXT1JEIDQyICovCi0Jc3RydWN0IEJFX0VQX1NFTUFQSE9SRV9DU1JfQU1BUCBlcF9zZW1hcGhvcmU7Ci0JdTggcnN2ZDExWzMyXTsJLyogRFdPUkQgNDQgKi8KLQl1OCByc3ZkMTJbMTldWzMyXTsJLyogRFdPUkQgNDUgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgRVBfQ1NSTUFQX0FNQVAgewotCXUzMiBkd1s2NF07Ci19OwotCi0jZW5kaWYgLyogX19lcF9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2VxLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI5MmNjZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXEuYworKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0jaW5jbHVkZSAiaHdsaWIuaCIKLSNpbmNsdWRlICJiZXN0YXR1cy5oIgotLyoKLSAgICBUaGlzIHJvdXRpbmUgY3JlYXRlcyBhbiBldmVudCBxdWV1ZSBiYXNlZCBvbiB0aGUgY2xpZW50IGNvbXBsZXRpb24KLSAgICBxdWV1ZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotCi0gICAgRnVuY3Rpb25PYmplY3QgICAgICAtIEhhbmRsZSB0byBhIGZ1bmN0aW9uIG9iamVjdAotICAgIEVxQmFzZVZhICAgICAgICAgICAgLSBCYXNlIFZBIGZvciBhIHRoZSBFUSByaW5nCi0gICAgU2l6ZUVuY29kaW5nICAgICAgICAtIFRoZSBlbmNvZGVkIHNpemUgZm9yIHRoZSBFUSBlbnRyaWVzLiBUaGlzIHZhbHVlIGlzCi0JCQllaXRoZXIgQ0VWX0VRX1NJWkVfNCBvciBDRVZfRVFfU0laRV8xNgotICAgIE51bUVudHJpZXMgICAgICAgICAgLSBDRVZfQ1FfQ05UXyogdmFsdWVzLgotICAgIFdhdGVybWFyayAgICAgICAgICAgLSBFbmFibGVzIHdhdGVybWFyayBiYXNlZCBjb2FsZXNjaW5nLiAgVGhpcyBwYXJhbWV0ZXIKLQkJCW11c3QgYmUgb2YgdGhlIHR5cGUgQ0VWX1dNQVJLXyogaWYgd2F0ZXJtYXJrcwotCQkJYXJlIGVuYWJsZWQuICBJZiB3YXRlcm1hcmtzIHRvIHRvIGJlIGRpc2FibGVkCi0JCQl0aGlzIHZhbHVlIHNob3VsZCBiZS0xLgotICAgIFRpbWVyRGVsYXkgICAgICAgICAgLSBJZiBhIHRpbWVyIGRlbGF5IGlzIGVuYWJsZWQgdGhpcyB2YWx1ZSBzaG91bGQgYmUgdGhlCi0JCQl0aW1lIG9mIHRoZSBkZWxheSBpbiA4IG1pY3Jvc2Vjb25kIHVuaXRzLiAgSWYKLQkJCWRlbGF5cyBhcmUgbm90IHVzZWQgdGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlCi0JCQlzZXQgdG8gLTEuCi0gICAgcHBFcU9iamVjdCAgICAgICAgICAtIEludGVybmFsIEVRIEhhbmRsZSByZXR1cm5lZC4KLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwsIG90aGVyd2lzZSBhIHVzZWZ1bCBlcnJvciBjb2RlCi0JaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLSovCi1pbnQKLWJlX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlzdHJ1Y3QgcmluZ19kZXNjICpyZCwgdTMyIGVxZV9zaXplLCB1MzIgbnVtX2VudHJpZXMsCi0JCXUzMiB3YXRlcm1hcmssCS8qIENFVl9XTUFSS18qIG9yIC0xICovCi0JCXUzMiB0aW1lcl9kZWxheSwJLyogaW4gOHVzIHVuaXRzLCBvciAtMSAqLwotCQlzdHJ1Y3QgYmVfZXFfb2JqZWN0ICplcV9vYmplY3QpCi17Ci0JaW50IHN0YXR1cyA9IEJFX1NVQ0NFU1M7Ci0JdTMyIG51bV9lbnRyaWVzX2VuY29kaW5nLCBlcWVfc2l6ZV9lbmNvZGluZywgbGVuZ3RoOwotCXN0cnVjdCBGV0NNRF9DT01NT05fRVFfQ1JFQVRFICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQl1MzIgbjsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlBU1NFUlQocmQpOwotCUFTU0VSVChlcV9vYmplY3QpOwotCi0Jc3dpdGNoIChudW1fZW50cmllcykgewotCWNhc2UgMjU2OgotCQludW1fZW50cmllc19lbmNvZGluZyA9IENFVl9FUV9DTlRfMjU2OwotCQlicmVhazsKLQljYXNlIDUxMjoKLQkJbnVtX2VudHJpZXNfZW5jb2RpbmcgPSBDRVZfRVFfQ05UXzUxMjsKLQkJYnJlYWs7Ci0JY2FzZSAxMDI0OgotCQludW1fZW50cmllc19lbmNvZGluZyA9IENFVl9FUV9DTlRfMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSAyMDQ4OgotCQludW1fZW50cmllc19lbmNvZGluZyA9IENFVl9FUV9DTlRfMjA0ODsKLQkJYnJlYWs7Ci0JY2FzZSA0MDk2OgotCQludW1fZW50cmllc19lbmNvZGluZyA9IENFVl9FUV9DTlRfNDA5NjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCQlyZXR1cm4gQkVfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOwotCX0KLQotCXN3aXRjaCAoZXFlX3NpemUpIHsKLQljYXNlIDQ6Ci0JCWVxZV9zaXplX2VuY29kaW5nID0gQ0VWX0VRX1NJWkVfNDsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJZXFlX3NpemVfZW5jb2RpbmcgPSBDRVZfRVFfU0laRV8xNjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCQlyZXR1cm4gQkVfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOwotCX0KLQotCWlmICgoZXFlX3NpemUgPT0gNCAmJiBudW1fZW50cmllcyA8IDEwMjQpIHx8Ci0JICAgIChlcWVfc2l6ZSA9PSAxNiAmJiBudW1fZW50cmllcyA9PSA0MDk2KSkgewotCQlUUkFDRShETF9FUlIsICJCYWQgRVEgc2l6ZS4gZXFlX3NpemU6JWQgbnVtX2VudHJpZXM6JWQiLAotCQkgICAgICBlcWVfc2l6ZSwgbnVtX2VudHJpZXMpOwotCQlBU1NFUlQoMCk7Ci0JCXJldHVybiBCRV9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7Ci0JfQotCi0JbWVtc2V0KGVxX29iamVjdCwgMCwgc2l6ZW9mKCplcV9vYmplY3QpKTsKLQotCWF0b21pY19zZXQoJmVxX29iamVjdC0+cmVmX2NvdW50LCAwKTsKLQllcV9vYmplY3QtPnBhcmVudF9mdW5jdGlvbiA9IHBmb2I7Ci0JZXFfb2JqZWN0LT5lcV9pZCA9IDB4RkZGRkZGRkY7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZXFfb2JqZWN0LT5jcV9saXN0X2hlYWQpOwotCi0JbGVuZ3RoID0gbnVtX2VudHJpZXMgKiBlcWVfc2l6ZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCUFTU0VSVCh3cmIpOwotCQlUUkFDRShETF9FUlIsICJObyBmcmVlIE1DQyBXUkJzIGluIGNyZWF0ZSBFUS4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fRVFfQ1JFQVRFKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5udW1fcGFnZXMgPSBQQUdFU19TUEFOTkVEKE9GRlNFVF9JTl9QQUdFKHJkLT52YSksCi0JCQkJCQkJCQlsZW5ndGgpOwotCW4gPSBwZm9iLT5wY2lfZnVuY3Rpb25fbnVtYmVyOwotCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIEZ1bmMsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0KLQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCB2YWxpZCwgJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAxKTsKLQotCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIFNpemUsCi0JCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIGVxZV9zaXplX2VuY29kaW5nKTsKLQotCW4gPSAwOyAvKiBQcm90ZWN0aW9uIERvbWFpbiBpcyBhbHdheXMgMCBpbiAgTGludXggIGRyaXZlciAqLwotCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIFBELCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG4pOwotCi0JLyogTGV0IHRoZSBjYWxsZXIgQVJNIHRoZSBFUSB3aXRoIHRoZSBkb29yYmVsbC4gKi8KLQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBBcm1lZCwgJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAwKTsKLQotCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIENvdW50LCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsCi0JCQkJCW51bV9lbnRyaWVzX2VuY29kaW5nKTsKLQotCW4gPSBwZm9iLT5wY2lfZnVuY3Rpb25fbnVtYmVyICogMzI7Ci0JQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgRXZlbnRWZWN0LAotCQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0JaWYgKHdhdGVybWFyayAhPSAtMSkgewotCQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBXTUUsCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAxKTsKLQkJQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgV2F0ZXJtYXJrLAotCQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgd2F0ZXJtYXJrKTsKLQkJQVNTRVJUKHdhdGVybWFyayA8PSBDRVZfV01BUktfMjQwKTsKLQl9IGVsc2UKLQkJQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgV01FLAotCQkJCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIDApOwotCWlmICh0aW1lcl9kZWxheSAhPSAtMSkgewotCQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBUTVIsCi0JCQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgMSk7Ci0KLQkJQVNTRVJUKHRpbWVyX2RlbGF5IDw9IDI1MCk7CS8qIG1heCB2YWx1ZSBhY2NvcmRpbmcgdG8gRUFTICovCi0JCXRpbWVyX2RlbGF5ID0gbWluKHRpbWVyX2RlbGF5LCAodTMyKTI1MCk7Ci0KLQkJQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgRGVsYXksCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCB0aW1lcl9kZWxheSk7Ci0JfSBlbHNlIHsKLQkJQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgVE1SLAotCQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgMCk7Ci0JfQotCS8qIENyZWF0ZSBhIHBhZ2UgbGlzdCBmb3IgdGhlIEZXQ01ELiAqLwotCWJlX3JkX3RvX3BhX2xpc3QocmQsIGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5wYWdlcywKLQkJCSAgQVJSQVlfU0laRShmd2NtZC0+cGFyYW1zLnJlcXVlc3QucGFnZXMpKTsKLQotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJCU5VTEwsIE5VTEwsIGZ3Y21kLCBOVUxMKTsKLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHRvIGNyZWF0ZSBFUSBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIEdldCB0aGUgRVEgaWQuICBUaGUgTVBVIGFsbG9jYXRlcyB0aGUgSURzLiAqLwotCWVxX29iamVjdC0+ZXFfaWQgPSBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLmVxX2lkOwotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICAgIERlZmVyZW5jZXMgdGhlIGdpdmVuIG9iamVjdC4gT25jZSB0aGUgb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvCi0gICAgemVybywgdGhlIG9iamVjdCBpcyBkZXN0cm95ZWQgYW5kIGFsbCByZXNvdXJjZXMgdGhhdCBhcmUgaGVsZCBieSB0aGlzCi0gICAgb2JqZWN0IGFyZSByZWxlYXNlZC4gIFRoZSBvbi1jaGlwIGNvbnRleHQgaXMgYWxzbyBkZXN0cm95ZWQgYWxvbmcgd2l0aAotICAgIHRoZSBxdWV1ZSBJRCwgYW5kIGFueSBtYXBwaW5ncyBtYWRlIGludG8gdGhlIFVULgotCi0gICAgZXFfb2JqZWN0ICAgICAgICAgICAgLSBFUSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBlcV9vYmplY3RfY3JlYXRlLgotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYSB1c2VmdWwgZXJyb3IgY29kZQotCWlzIHJldHVybmVkLgotCi0gICAgSVJRTDogSVJRTCA8IERJU1BBVENIX0xFVkVMCi0qLwotaW50IGJlX2VxX2Rlc3Ryb3koc3RydWN0IGJlX2VxX29iamVjdCAqZXFfb2JqZWN0KQotewotCWludCBzdGF0dXMgPSAwOwotCi0JQVNTRVJUKGF0b21pY19yZWFkKCZlcV9vYmplY3QtPnJlZl9jb3VudCkgPT0gMCk7Ci0JLyogbm8gQ1FzIHNob3VsZCByZWZlcmVuY2UgdGhpcyBFUSBub3cgKi8KLQlBU1NFUlQobGlzdF9lbXB0eSgmZXFfb2JqZWN0LT5jcV9saXN0X2hlYWQpKTsKLQotCS8qIFNlbmQgZndjbWQgdG8gZGVzdHJveSB0aGUgRVEuICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcmluZ19kZXN0cm95KGVxX29iamVjdC0+cGFyZW50X2Z1bmN0aW9uLAotCQkJICAgICBlcV9vYmplY3QtPmVxX2lkLCBGV0NNRF9SSU5HX1RZUEVfRVEsCi0JCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCUFTU0VSVChzdGF0dXMgPT0gMCk7Ci0KLQlyZXR1cm4gQkVfU1VDQ0VTUzsKLX0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX2VxX21vZGlmeV9kZWxheQotICogICBDaGFuZ2VzIHRoZSBFUSBkZWxheSBmb3IgYSBncm91cCBvZiBFUXMuCi0gKiBudW1fZXEgICAgICAgICAgICAgLSBUaGUgbnVtYmVyIG9mIEVRcyBpbiB0aGUgZXFfYXJyYXkgdG8gYWRqdXN0LgotICogCQkJVGhpcyBhbHNvIGlzIHRoZSBudW1iZXIgb2YgZGVsYXkgdmFsdWVzIGluCi0gKiAJCQl0aGUgZXFfZGVsYXlfYXJyYXkuCi0gKiBlcV9hcnJheSAgICAgICAgICAgLSBBcnJheSBvZiBzdHJ1Y3QgYmVfZXFfb2JqZWN0IHBvaW50ZXJzIHRvIGFkanVzdC4KLSAqIGVxX2RlbGF5X2FycmF5ICAgICAtIEFycmF5IG9mICJudW1fZXEiIHRpbWVyIGRlbGF5cyBpbiB1bml0cwotICogCQkJb2YgbWljcm9zZWNvbmRzLiBUaGUgYmVfZXFfcXVlcnlfZGVsYXlfcmFuZ2UKLSAqIAkJCWZ3Y21kIHJldHVybnMgdGhlIHJlc29sdXRpb24gYW5kIHJhbmdlIG9mCi0gKiAgICAgICAgICAgICAgICAgICAgICBsZWdhbCBFUSBkZWxheXMuCi0gKiBjYiAgICAgICAgICAgLQotICogY2JfY29udGV4dCAgIC0KLSAqIHFfY3R4dCAgICAgICAgICAgICAtIE9wdGlvbmFsLiBQb2ludGVyIHRvIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQKLSAqIAkJCXN0cnVjdC4gSWYgdGhlIE1DQyBXUkIgcmluZyBpcyBmdWxsLCB0aGlzCi0gKiAJCQlzdHJ1Y3R1cmUgaXMgdXNlZCB0byBxdWV1ZSB0aGUgb3BlcmF0aW9uLiBJdAotICogICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBwb3N0ZWQgdG8gdGhlIE1DQyByaW5nIHdoZW4gc3BhY2UKLSAqICAgICAgICAgICAgICAgICAgICAgIGJlY29tZXMgYXZhaWxhYmxlLiBBbGwgcXVldWVkIGNvbW1hbmRzIHdpbGwKLSAqICAgICAgICAgICAgICAgICAgICAgIGJlIHBvc3RlZCB0byB0aGUgcmluZyBpbiB0aGUgb3JkZXIgdGhleSBhcmUKLSAqICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkLiBJdCBpcyBhbHdheXMgdmFsaWQgdG8gcGFzcyBhIHBvaW50ZXIgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgIGEgZ2VuZXJpYyBiZV9nZW5lcmljX3FfY250eHQuIEhvd2V2ZXIsCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgc3BlY2lmaWMgY29udGV4dCBzdHJ1Y3RzCi0gKiAgICAgICAgICAgICAgICAgICAgICBhcmUgZ2VuZXJhbGx5IHNtYWxsZXIgdGhhbiB0aGUgZ2VuZXJpYyBzdHJ1Y3QuCi0gKiByZXR1cm4gcGVuZF9zdGF0dXMgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLgotICogCQkJQkVfUEVORElORyAocG9zdGl2ZSB2YWx1ZSkgaWYgdGhlIEZXQ01ECi0gKiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uIGlzIHBlbmRpbmcuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQKLWJlX2VxX21vZGlmeV9kZWxheShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICB1MzIgbnVtX2VxLCBzdHJ1Y3QgYmVfZXFfb2JqZWN0ICoqZXFfYXJyYXksCi0JCSAgIHUzMiAqZXFfZGVsYXlfYXJyYXksIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAotCQkgICB2b2lkICpjYl9jb250ZXh0LCBzdHJ1Y3QgYmVfZXFfbW9kaWZ5X2RlbGF5X3FfY3R4dCAqcV9jdHh0KQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fTU9ESUZZX0VRX0RFTEFZICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKmdlbl9jdHh0ID0gTlVMTDsKLQl1MzIgaTsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlpZiAocV9jdHh0ICYmIGNiKSB7Ci0JCQl3cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAmcV9jdHh0LT53cmJfaGVhZGVyOwotCQkJZ2VuX2N0eHQgPSAoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICopIHFfY3R4dDsKLQkJCWdlbl9jdHh0LT5jb250ZXh0LmJ5dGVzID0gc2l6ZW9mKCpxX2N0eHQpOwotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCQlnb3RvIEVycm9yOwotCQl9Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fTU9ESUZZX0VRX0RFTEFZKTsKLQotCUFTU0VSVChudW1fZXEgPiAwKTsKLQlBU1NFUlQobnVtX2VxIDw9IEFSUkFZX1NJWkUoZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmRlbGF5KSk7Ci0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV9lcSA9IG51bV9lcTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VxOyBpKyspIHsKLQkJZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmRlbGF5W2ldLmVxX2lkID0gZXFfYXJyYXlbaV0tPmVxX2lkOwotCQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QuZGVsYXlbaV0uZGVsYXlfaW5fbWljcm9zZWNvbmRzID0KLQkJICAgIGVxX2RlbGF5X2FycmF5W2ldOwotCX0KLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgZ2VuX2N0eHQsCi0JCQljYiwgY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXRoLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXRoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NDFiNjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2V0aC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNpbmNsdWRlICJod2xpYi5oIgotI2luY2x1ZGUgImJlc3RhdHVzLmgiCi0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX2V0aF9zcV9jcmVhdGVfZXgKLSAqICAgQ3JlYXRlcyBhbiBldGhlcm5ldCBzZW5kIHJpbmcgLSBleHRlbmRlZCB2ZXJzaW9uIHdpdGgKLSAqICAgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLgotICogcGZvYiAtCi0gKiByZCAgICAgICAgICAgICAtIHJpbmcgYWRkcmVzcwotICogbGVuZ3RoX2luX2J5dGVzIC0KLSAqIHR5cGUgICAgICAgICAgICAtIFRoZSB0eXBlIG9mIHJpbmcgdG8gY3JlYXRlLgotICogdWxwICAgICAgICAgICAgIC0gVGhlIHJlcXVlc3RlZCBVTFAgbnVtYmVyIGZvciB0aGUgcmluZy4KLSAqIAkJICAgICBUaGlzIHNob3VsZCBiZSB6ZXJvIGJhc2VkLCBpLmUuIDAsMSwyLiBUaGlzIG11c3QKLSAqIAkJICAgICBiZSB2YWxpZCBOSUMgVUxQIGJhc2VkIG9uIHRoZSBmaXJtd2FyZSBjb25maWcuCi0gKiAgICAgICAgICAgICAgICAgICBBbGwgZG9vcmJlbGxzIGZvciB0aGlzIHJpbmcgbXVzdCBiZSBzZW50IHRvCi0gKiAgICAgICAgICAgICAgICAgICB0aGlzIFVMUC4gVGhlIGZpcnN0IG5ldHdvcmsgcmluZyBhbGxvY2F0ZWQgZm9yCi0gKiAgICAgICAgICAgICAgICAgICBlYWNoIFVMUCBhcmUgaGlnaGVyIHBlcmZvcm1hbmNlIHRoYW4gc3Vic2VxdWVudCByaW5ncy4KLSAqIGNxX29iamVjdCAgICAgICAtIGNxIG9iamVjdCBmb3IgY29tcGxldGlvbnMKLSAqIGV4X3BhcmFtZXRlcnMgICAtIEFkZGl0aW9uYWwgcGFyYW1ldGVycyAodGhhdCBtYXkgaW5jcmVhc2UgaW4KLSAqIAkJICAgICBmdXR1cmUgcmV2aXNpb25zKS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgb25seSB1c2VkCi0gKiAJCSAgICAgZm9yIGNlcnRhaW4gcmluZyB0eXBlcyAtLSBzZWUKLSAqICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiZV9ldGhfc3FfcGFyYW1ldGVycyBmb3IgZGV0YWlscy4KLSAqIGV0aF9zcSAgICAgICAgICAtCi0gKiByZXR1cm4gc3RhdHVzICAgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQKLWJlX2V0aF9zcV9jcmVhdGVfZXgoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwgc3RydWN0IHJpbmdfZGVzYyAqcmQsCi0JCXUzMiBsZW5ndGgsIHUzMiB0eXBlLCB1MzIgdWxwLCBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3QsCi0JCXN0cnVjdCBiZV9ldGhfc3FfcGFyYW1ldGVycyAqZXhfcGFyYW1ldGVycywKLQkJc3RydWN0IGJlX2V0aHNxX29iamVjdCAqZXRoX3NxKQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fRVRIX1RYX0NSRUFURSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdTMyIG47Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0JQVNTRVJUKHJkKTsKLQlBU1NFUlQoZXRoX3NxKTsKLQlBU1NFUlQoZXhfcGFyYW1ldGVycyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCW1lbXNldChldGhfc3EsIDAsIHNpemVvZigqZXRoX3NxKSk7Ci0KLQlldGhfc3EtPnBhcmVudF9mdW5jdGlvbiA9IHBmb2I7Ci0JZXRoX3NxLT5iaWQgPSAweEZGRkZGRkZGOwotCWV0aF9zcS0+Y3Ffb2JqZWN0ID0gY3Ffb2JqZWN0OwotCi0JLyogVHJhbnNsYXRlIGh3bGliIGludGVyZmFjZSB0byBhcm0gaW50ZXJmYWNlLiAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQkVfRVRIX1RYX1JJTkdfVFlQRV9GT1JXQVJESU5HOgotCQl0eXBlID0gRVRIX1RYX1JJTkdfVFlQRV9GT1JXQVJESU5HOwotCQlicmVhazsKLQljYXNlIEJFX0VUSF9UWF9SSU5HX1RZUEVfU1RBTkRBUkQ6Ci0JCXR5cGUgPSBFVEhfVFhfUklOR19UWVBFX1NUQU5EQVJEOwotCQlicmVhazsKLQljYXNlIEJFX0VUSF9UWF9SSU5HX1RZUEVfQk9VTkQ6Ci0JCUFTU0VSVChleF9wYXJhbWV0ZXJzLT5wb3J0IDwgMik7Ci0JCXR5cGUgPSBFVEhfVFhfUklOR19UWVBFX0JPVU5EOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlUUkFDRShETF9FUlIsICJJbnZhbGlkIGV0aCB0eCByaW5nIHR5cGU6JWQiLCB0eXBlKTsKLQkJcmV0dXJuIEJFX05PVF9PSzsKLQkJYnJlYWs7Ci0JfQotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCUFTU0VSVCh3cmIpOwotCQlUUkFDRShETF9FUlIsICJObyBmcmVlIE1DQyBXUkJzIGluIGNyZWF0ZSBFUS4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIE5JQyBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBjb25maWcuICovCi0JQVNTRVJUKHBmb2ItPmZ3X2NvbmZpZy5uaWNfdWxwX21hc2spOwotCi0JLyoKLQkgKiBUaGUgdWxwIHBhcmFtZXRlciBtdXN0IHNlbGVjdCBhIHZhbGlkIE5JQyBVTFAKLQkgKiBmb3IgdGhlIGN1cnJlbnQgY29uZmlnLgotCSAqLwotCUFTU0VSVCgoMSA8PCB1bHApICYgcGZvYi0+ZndfY29uZmlnLm5pY191bHBfbWFzayk7Ci0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX0VUSF9UWF9DUkVBVEUpOwotCWZ3Y21kLT5oZWFkZXIucmVxdWVzdC5wb3J0X251bWJlciA9IGV4X3BhcmFtZXRlcnMtPnBvcnQ7Ci0KLQlBTUFQX1NFVF9CSVRTX1BUUihFVFhfQ09OVEVYVCwgcGRfaWQsCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAwKTsKLQotCW4gPSBiZV9yaW5nX2xlbmd0aF90b19lbmNvZGluZyhsZW5ndGgsIHNpemVvZihzdHJ1Y3QgRVRIX1dSQl9BTUFQKSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoRVRYX0NPTlRFWFQsIHR4X3Jpbmdfc2l6ZSwKLQkJCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBuKTsKLQotCUFNQVBfU0VUX0JJVFNfUFRSKEVUWF9DT05URVhULCBjcV9pZF9zZW5kLAotCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBjcV9vYmplY3QtPmNxX2lkKTsKLQotCW4gPSBwZm9iLT5wY2lfZnVuY3Rpb25fbnVtYmVyOwotCUFNQVBfU0VUX0JJVFNfUFRSKEVUWF9DT05URVhULCBmdW5jLCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG4pOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnR5cGUgPSB0eXBlOwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC51bHBfbnVtICA9ICgxIDw8IHVscCk7Ci0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV9wYWdlcyA9IERJVl9ST1VORF9VUChsZW5ndGgsIFBBR0VfU0laRSk7Ci0JQVNTRVJUKFBBR0VTX1NQQU5ORUQocmQtPnZhLCByZC0+bGVuZ3RoKSA+PQotCQkJCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5udW1fcGFnZXMpOwotCi0JLyogQ3JlYXRlIGEgcGFnZSBsaXN0IGZvciB0aGUgRldDTUQuICovCi0JYmVfcmRfdG9fcGFfbGlzdChyZCwgZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzLAotCQkJICBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5wYWdlcykpOwotCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlUUkFDRShETF9FUlIsICJNQ0MgdG8gY3JlYXRlIGV0eCBxdWV1ZSBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIHNhdmUgdGhlIGJ1dGxlciBJRCAqLwotCWV0aF9zcS0+YmlkID0gZndjbWQtPnBhcmFtcy5yZXNwb25zZS5jaWQ7Ci0KLQkvKiBhZGQgYSByZWZlcmVuY2UgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQ1EgKi8KLQlhdG9taWNfaW5jKCZjcV9vYmplY3QtPnJlZl9jb3VudCk7Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgZGVzdHJveXMgYW4gZXRoZXJuZXQgc2VuZCBxdWV1ZQotCi0gICAgRXRoU3EgLSBFdGhTcSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBFdGhTcUNyZWF0ZQotCi0gICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIEJFX1NVQ0NFU1MuCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGZyZWVzIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRXRoU3FDcmVhdGUgZm9yIHRoZSBFdGhTcSBPYmplY3QuCi0KLSovCi1pbnQgYmVfZXRoX3NxX2Rlc3Ryb3koc3RydWN0IGJlX2V0aHNxX29iamVjdCAqZXRoX3NxKQotewotCWludCBzdGF0dXMgPSAwOwotCi0JLyogU2VuZCBmd2NtZCB0byBkZXN0cm95IHRoZSBxdWV1ZS4gKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9yaW5nX2Rlc3Ryb3koZXRoX3NxLT5wYXJlbnRfZnVuY3Rpb24sIGV0aF9zcS0+YmlkLAotCQkgICAgIEZXQ01EX1JJTkdfVFlQRV9FVEhfVFgsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCUFTU0VSVChzdGF0dXMgPT0gMCk7Ci0KLQkvKiBEZXJlZmVuY2UgYW55IGFzc29jaWF0ZWQgQ1FzLiAqLwotCWF0b21pY19kZWMoJmV0aF9zcS0+Y3Ffb2JqZWN0LT5yZWZfY291bnQpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0vKgotICAgIFRoaXMgcm91dGluZSBhdHRlbXB0cyB0byBzZXQgdGhlIHRyYW5zbWl0IGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzLgotCi0gICAgRnVuY3Rpb25PYmplY3QgICAgICAtIEhhbmRsZSB0byBhIGZ1bmN0aW9uIG9iamVjdAotCi0gICAgdHhmY19lbmFibGUgICAgICAgICAtIHRyYW5zbWl0IGZsb3cgY29udHJvbCBlbmFibGUgLSB0cnVlIGZvcgotCQkJICBlbmFibGUsIGZhbHNlIGZvciBkaXNhYmxlCi0KLSAgICByeGZjX2VuYWJsZSAgICAgICAgIC0gcmVjZWl2ZSBmbG93IGNvbnRyb2wgZW5hYmxlIC0gdHJ1ZSBmb3IKLQkJCQllbmFibGUsIGZhbHNlIGZvciBkaXNhYmxlCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhIHVzZWZ1bCBpbnQgZXJyb3IKLSAgICBjb2RlIGlzIHJldHVybmVkLgotCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotCi0gICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgZmFpbHMgaW4gbm9uLXByaXZpbGVnZWQgbWFjaGluZSBjb250ZXh0LgotKi8KLWludAotYmVfZXRoX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCWJvb2wgdHhmY19lbmFibGUsIGJvb2wgcnhmY19lbmFibGUpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9TRVRfRkxPV19DT05UUk9MICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlUUkFDRShETF9FUlIsICJNQ0Mgd3JiIHBlZWsgZmFpbGVkLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBlcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9TRVRfRkxPV19DT05UUk9MKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5yeF9mbG93X2NvbnRyb2wgPSByeGZjX2VuYWJsZTsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QudHhfZmxvd19jb250cm9sID0gdHhmY19lbmFibGU7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJCU5VTEwsIE5VTEwsIGZ3Y21kLCBOVUxMKTsKLQotCWlmIChzdGF0dXMgIT0gMCkgewotCQlUUkFDRShETF9FUlIsICJzZXQgZmxvdyBjb250cm9sIGZ3Y21kIGZhaWxlZC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGF0dGVtcHRzIHRvIGdldCB0aGUgdHJhbnNtaXQgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMuCi0KLSAgICBwZm9iICAgICAgLSBIYW5kbGUgdG8gYSBmdW5jdGlvbiBvYmplY3QKLQotICAgIHR4ZmNfZW5hYmxlICAgICAgICAgLSB0cmFuc21pdCBmbG93IGNvbnRyb2wgZW5hYmxlIC0gdHJ1ZSBmb3IKLQkJCWVuYWJsZSwgZmFsc2UgZm9yIGRpc2FibGUKLQotICAgIHJ4ZmNfZW5hYmxlICAgICAgICAgLSByZWNlaXZlIGZsb3cgY29udHJvbCBlbmFibGUgLSB0cnVlIGZvciBlbmFibGUsCi0JCQlmYWxzZSBmb3IgZGlzYWJsZQotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYSB1c2VmdWwgaW50IGVycm9yIGNvZGUKLQkJCWlzIHJldHVybmVkLgotCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotCi0gICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgZmFpbHMgaW4gbm9uLXByaXZpbGVnZWQgbWFjaGluZSBjb250ZXh0LgotKi8KLWludAotYmVfZXRoX2dldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCWJvb2wgKnR4ZmNfZW5hYmxlLCBib29sICpyeGZjX2VuYWJsZSkKLXsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GTE9XX0NPTlRST0wgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX0dFVF9GTE9XX0NPTlRST0wpOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgImdldCBmbG93IGNvbnRyb2wgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCSp0eGZjX2VuYWJsZSA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UudHhfZmxvd19jb250cm9sOwotCSpyeGZjX2VuYWJsZSA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UucnhfZmxvd19jb250cm9sOwotCi1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOiBiZV9ldGhfc2V0X3FvcwotICogICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGV0aGVybmV0IHRyYW5zbWl0IFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKQotICogICBjaGFyYWN0ZXJpc3RpY3Mgb2YgQmxhZGVFbmdpbmUgZm9yIHRoZSBkb21haW4uIEFsbCBldGhlcm5ldAotICogICB0cmFuc21pdCByaW5ncyBvZiB0aGUgZG9tYWluIHdpbGwgZXZlbmx5IHNoYXJlIHRoZSBiYW5kd2lkdGguCi0gKiAgIFRoZSBleGVjZXB0aW9uIHRvIHNoYXJpbmcgaXMgdGhlIGhvc3QgcHJpbWFyeSAoc3VwZXIpIGV0aGVybmV0Ci0gKiAgIHRyYW5zbWl0IHJpbmcgYXMgd2VsbCBhcyB0aGUgaG9zdCBldGhlcm5ldCBmb3J3YXJkaW5nIHJpbmcKLSAqICAgZm9yIG1pc3NlZCBvZmZsb2FkIGRhdGEuCi0gKiBwZm9iIC0KLSAqIG1heF9icHMgICAgICAgICAtIHRoZSBtYXhpbXVtIGJpdHMgcGVyIHNlY29uZCBpbiB1bml0cyBvZgotICogCQkJMTAgTWJwcyAodmFsaWQgMC0xMDApCi0gKiBtYXhfcHBzICAgICAgICAgLSB0aGUgbWF4aW11bSBwYWNrZXRzIHBlciBzZWNvbmQgaW4gdW5pdHMKLSAqIAkJCW9mIDEgS3BwcyAoMCBpbmRpY2F0ZXMgbm8gbGltaXQpCi0gKiByZXR1cm4gc3RhdHVzICAgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQKLWJlX2V0aF9zZXRfcW9zKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsIHUzMiBtYXhfYnBzLCB1MzIgbWF4X3BwcykKLXsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX1NFVF9RT1MgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX1NFVF9RT1MpOwotCi0JLyogU2V0IGZpZWxkcyBpbiBmd2NtZCAqLwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5tYXhfYml0c19wZXJfc2Vjb25kX05JQyA9IG1heF9icHM7Ci0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm1heF9wYWNrZXRzX3Blcl9zZWNvbmRfTklDID0gbWF4X3BwczsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QudmFsaWRfZmxhZ3MgPSBRT1NfQklUU19OSUMgfCBRT1NfUEtUU19OSUM7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJCU5VTEwsIE5VTEwsIGZ3Y21kLCBOVUxMKTsKLQotCWlmIChzdGF0dXMgIT0gMCkKLQkJVFJBQ0UoRExfRVJSLCAibmV0d29yayBzZXQgcW9zIGZ3Y21kIGZhaWxlZC4iKTsKLQotZXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX2V0aF9nZXRfcW9zCi0gKiAgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBldGhlcm5ldCB0cmFuc21pdCBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykKLSAqICAgY2hhcmFjdGVyaXN0aWNzIGZvciB0aGUgZG9tYWluLgotICogbWF4X2JwcyAgICAgICAgIC0gdGhlIG1heGltdW0gYml0cyBwZXIgc2Vjb25kIGluIHVuaXRzIG9mCi0gKiAJCQkxMCBNYnBzICh2YWxpZCAwLTEwMCkKLSAqIG1heF9wcHMgICAgICAgICAtIHRoZSBtYXhpbXVtIHBhY2tldHMgcGVyIHNlY29uZCBpbiB1bml0cyBvZgotICogCQkJMSBLcHBzICgwIGluZGljYXRlcyBubyBsaW1pdCkKLSAqIHJldHVybiBzdGF0dXMgICAtIEJFX1NVQ0NFU1MgKDApIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludAotYmVfZXRoX2dldF9xb3Moc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwgdTMyICptYXhfYnBzLCB1MzIgKm1heF9wcHMpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfUU9TICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlUUkFDRShETF9FUlIsICJNQ0Mgd3JiIHBlZWsgZmFpbGVkLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBlcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9HRVRfUU9TKTsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgIm5ldHdvcmsgZ2V0IHFvcyBmd2NtZCBmYWlsZWQuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JKm1heF9icHMgPSBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLm1heF9iaXRzX3Blcl9zZWNvbmRfTklDOwotCSptYXhfcHBzID0gZndjbWQtPnBhcmFtcy5yZXNwb25zZS5tYXhfcGFja2V0c19wZXJfc2Vjb25kX05JQzsKLQotZXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX2V0aF9zZXRfZnJhbWVfc2l6ZQotICogICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGV0aGVybmV0IG1heGltdW0gZnJhbWUgc2l6ZS4gVGhlIHByZXZpb3VzCi0gKiAgIHZhbHVlcyBhcmUgcmV0dXJuZWQuCi0gKiBwZm9iIC0KLSAqIHR4X2ZyYW1lX3NpemUgICAtIG1heGltdW0gdHJhbnNtaXQgZnJhbWUgc2l6ZSBpbiBieXRlcwotICogcnhfZnJhbWVfc2l6ZSAgIC0gbWF4aW11bSByZWNlaXZlIGZyYW1lIHNpemUgaW4gYnl0ZXMKLSAqIHJldHVybiBzdGF0dXMgICAtIEJFX1NVQ0NFU1MgKDApIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludAotYmVfZXRoX3NldF9mcmFtZV9zaXplKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgICAgIHUzMiAqdHhfZnJhbWVfc2l6ZSwgdTMyICpyeF9mcmFtZV9zaXplKQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fU0VUX0ZSQU1FX1NJWkUgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX1NFVF9GUkFNRV9TSVpFKTsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubWF4X3R4X2ZyYW1lX3NpemUgPSAqdHhfZnJhbWVfc2l6ZTsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubWF4X3J4X2ZyYW1lX3NpemUgPSAqcnhfZnJhbWVfc2l6ZTsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJCU5VTEwsIE5VTEwsIGZ3Y21kLCBOVUxMKTsKLQotCWlmIChzdGF0dXMgIT0gMCkgewotCQlUUkFDRShETF9FUlIsICJuZXR3b3JrIHNldCBmcmFtZSBzaXplIGZ3Y21kIGZhaWxlZC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkqdHhfZnJhbWVfc2l6ZSA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UuY2hpcF9tYXhfdHhfZnJhbWVfc2l6ZTsKLQkqcnhfZnJhbWVfc2l6ZSA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UuY2hpcF9tYXhfcnhfZnJhbWVfc2l6ZTsKLQotZXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgY3JlYXRlcyBhIEV0aGVybmV0IHJlY2VpdmUgcmluZy4KLQotICAgIHBmb2IgICAgICAtIGhhbmRsZSB0byBhIGZ1bmN0aW9uIG9iamVjdAotICAgIHJxX2Jhc2VfdmEgICAgICAgICAgICAtIGJhc2UgVkEgZm9yIHRoZSBkZWZhdWx0IHJlY2VpdmUgcmluZy4gdGhpcyBtdXN0IGJlCi0JCQlleGFjdGx5IDhLIGluIGxlbmd0aCBhbmQgY29udGluZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LgotICAgIGNxX29iamVjdCAgICAgICAgICAgIC0gaGFuZGxlIHRvIGEgcHJldmlvdXNseSBjcmVhdGVkIENRIHRvIGJlIGFzc29jaWF0ZWQKLQkJCXdpdGggdGhlIFJRLgotICAgIHBwX2V0aF9ycSAgICAgICAgICAgICAtIHBvaW50ZXIgdG8gYW4gb3BxYXVlIGhhbmRsZSB3aGVyZSBhbiBldGgKLQkJCXJlY2VpdmUgb2JqZWN0IGlzIHJldHVybmVkLgotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgLCBvdGhlcndpc2UgYSB1c2VmdWwKLSAgICBpbnQgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KLQotICAgIElSUUw6IDwgRElTUEFUQ0hfTEVWRUwKLSAgICB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIHN0cnVjdCBiZV9ldGhycV9vYmplY3QgKm9iamVjdC4KLSAgICB0aGVyZSBtdXN0IGJlIG5vIG1vcmUgdGhhbiAxIG9mIHRoZXNlIHBlciBmdW5jdGlvbiBvYmplY3QsIHVubGVzcyB0aGUKLSAgICBmdW5jdGlvbiBvYmplY3Qgc3VwcG9ydHMgUlNTIChpcyBuZXR3b3JraW5nIGFuZCBvbiB0aGUgaG9zdCkuCi0gICAgdGhlIHJxX2Jhc2VfdmEgbXVzdCBwb2ludCB0byBhIGJ1ZmZlciBvZiBleGFjdGx5IDhLLgotICAgIHRoZSBlcng6Omhvc3RfY3FpZCAob3IgaG9zdF9zdG9yX2NxaWQpIHJlZ2lzdGVyIGFuZCBlcng6OnJpbmdfcGFnZSByZWdpc3RlcnMKLSAgICB3aWxsIGJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUgb24gcmV0dXJuCi0qLwotaW50Ci1iZV9ldGhfcnFfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCQlzdHJ1Y3QgcmluZ19kZXNjICpyZCwgc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0LAotCQkJc3RydWN0IGJlX2NxX29iamVjdCAqYmNtY19jcV9vYmplY3QsCi0JCQlzdHJ1Y3QgYmVfZXRocnFfb2JqZWN0ICpldGhfcnEpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0VUSF9SWF9DUkVBVEUgKmZ3Y21kID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQkvKiBNUFUgd2lsbCBzZXQgdGhlICAqLwotCUFTU0VSVChyZCk7Ci0JQVNTRVJUKGV0aF9ycSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCWV0aF9ycS0+cGFyZW50X2Z1bmN0aW9uID0gcGZvYjsKLQlldGhfcnEtPmNxX29iamVjdCA9IGNxX29iamVjdDsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlUUkFDRShETF9FUlIsICJNQ0Mgd3JiIHBlZWsgZmFpbGVkLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9FVEhfUlhfQ1JFQVRFKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5udW1fcGFnZXMgPSAyOwkvKiByZXF1aXJlZCBsZW5ndGggKi8KLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY3FfaWQgPSBjcV9vYmplY3QtPmNxX2lkOwotCi0JaWYgKGJjbWNfY3Ffb2JqZWN0KQotCQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QuYmNtY19jcV9pZCA9IGJjbWNfY3Ffb2JqZWN0LT5jcV9pZDsKLQllbHNlCi0JCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5iY21jX2NxX2lkID0gMHhGRkZGOwotCi0JLyogQ3JlYXRlIGEgcGFnZSBsaXN0IGZvciB0aGUgRldDTUQuICovCi0JYmVfcmRfdG9fcGFfbGlzdChyZCwgZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzLAotCQkJICBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5wYWdlcykpOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlUUkFDRShETF9FUlIsICJmd2NtZCB0byBtYXAgZXRoIHJ4cSBmcmFncyBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIFNhdmUgdGhlIHJpbmcgSUQgZm9yIGNsZWFudXAuICovCi0JZXRoX3JxLT5yaWQgPSBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLmlkOwotCi0JYXRvbWljX2luYygmY3Ffb2JqZWN0LT5yZWZfY291bnQpOwotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSBkZXN0cm95cyBhbiBFdGhlcm5ldCByZWNlaXZlIHF1ZXVlCi0KLSAgICBldGhfcnEgLSBldGhlcm5ldCByZWNlaXZlIHF1ZXVlIGhhbmRsZSByZXR1cm5lZCBmcm9tIGV0aF9ycV9jcmVhdGUKLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBvbiBzdWNjZXNzIGFuZCBhbiBhcHByb3ByaWF0ZSBpbnQgb24gZmFpbHVyZS4KLQotICAgIFRoaXMgZnVuY3Rpb24gZnJlZXMgcmVzb3VyY3MgYWxsb2NhdGVkIGJ5IEV0aFJxQ3JlYXRlLgotICAgIFRoZSBlcng6Omhvc3RfY3FpZCAob3IgaG9zdF9zdG9yX2NxaWQpIHJlZ2lzdGVyIGFuZCBlcng6OnJpbmdfcGFnZQotICAgIHJlZ2lzdGVycyB3aWxsIGJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUgb24gcmV0dXJuCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotKi8KLQotc3RhdGljIHZvaWQgYmVfZXRoX3JxX2Rlc3Ryb3lfaW50ZXJuYWxfY2Iodm9pZCAqY29udGV4dCwgaW50IHN0YXR1cywKLQkJCQkJIHN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYikKLXsKLQlzdHJ1Y3QgYmVfZXRocnFfb2JqZWN0ICpldGhfcnEgPSAoc3RydWN0IGJlX2V0aHJxX29iamVjdCAqKSBjb250ZXh0OwotCi0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCVRSQUNFKERMX0VSUiwgIkRlc3Ryb3kgZXRoIHJxIGZhaWxlZCBpbiBpbnRlcm5hbCBjYWxsYmFjay5cbiIpOwotCX0gZWxzZSB7Ci0JCS8qIERlcmVmZXJlbmNlIGFueSBDUXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcXVldWUuICovCi0JCWF0b21pY19kZWMoJmV0aF9ycS0+Y3Ffb2JqZWN0LT5yZWZfY291bnQpOwotCX0KLQotCXJldHVybjsKLX0KLQotaW50IGJlX2V0aF9ycV9kZXN0cm95KHN0cnVjdCBiZV9ldGhycV9vYmplY3QgKmV0aF9ycSkKLXsKLQlpbnQgc3RhdHVzID0gQkVfU1VDQ0VTUzsKLQotCS8qIFNlbmQgZndjbWQgdG8gZGVzdHJveSB0aGUgUlEuICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcmluZ19kZXN0cm95KGV0aF9ycS0+cGFyZW50X2Z1bmN0aW9uLAotCQkJZXRoX3JxLT5yaWQsIEZXQ01EX1JJTkdfVFlQRV9FVEhfUlgsIE5VTEwsIE5VTEwsCi0JCQliZV9ldGhfcnFfZGVzdHJveV9pbnRlcm5hbF9jYiwgZXRoX3JxKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX2V0aF9ycV9kZXN0cm95X29wdGlvbnMKLSAqICAgRGVzdHJveXMgYW4gZXRoZXJuZXQgcmVjZWl2ZSByaW5nIHdpdGggZmluZXIgZ3JhbnVsYXJpdHkgb3B0aW9ucwotICogICB0aGFuIHRoZSBzdGFuZGFyZCBiZV9ldGhfcnFfZGVzdHJveSgpIEFQSSBmdW5jdGlvbi4KLSAqIGV0aF9ycSAgICAgICAgICAgLQotICogZmx1c2ggICAgICAgICAgICAtIFNldCB0byAxIHRvIGZsdXNoIHRoZSByaW5nLCBzZXQgdG8gMCB0byBieXBhc3MgdGhlIGZsdXNoCi0gKiBjYiAgICAgICAgICAgICAgIC0gQ2FsbGJhY2sgZnVuY3Rpb24gb24gY29tcGxldGlvbgotICogY2JfY29udGV4dCAgICAgICAtIENhbGxiYWNrIGNvbnRleHQKLSAqIHJldHVybiBzdGF0dXMgICAgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotaW50Ci1iZV9ldGhfcnFfZGVzdHJveV9vcHRpb25zKHN0cnVjdCBiZV9ldGhycV9vYmplY3QgKmV0aF9ycSwgYm9vbCBmbHVzaCwKLQkJbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9SSU5HX0RFU1RST1kgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSBCRV9TVUNDRVNTOwotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXBmb2IgPSBldGhfcnEtPnBhcmVudF9mdW5jdGlvbjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JVFJBQ0UoRExfSU5GTywgIkRlc3Ryb3kgZXRoX3JxIHJpbmcgaWQ6JWQsIGZsdXNoOiVkIiwgZXRoX3JxLT5yaWQsCi0JICAgICAgZmx1c2gpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCUFTU0VSVCh3cmIpOwotCQlUUkFDRShETF9FUlIsICJObyBmcmVlIE1DQyBXUkJzIGluIGRlc3Ryb3kgZXRoX3JxIHJpbmcuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIEVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX1JJTkdfREVTVFJPWSk7Ci0KLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QuaWQgPSBldGhfcnEtPnJpZDsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QucmluZ190eXBlID0gRldDTURfUklOR19UWVBFX0VUSF9SWDsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QuYnlwYXNzX2ZsdXNoID0gKCgwID09IGZsdXNoKSA/IDEgOiAwKTsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgY2IsIGNiX2NvbnRleHQsCi0JCQliZV9ldGhfcnFfZGVzdHJveV9pbnRlcm5hbF9jYiwgZXRoX3JxLCBmd2NtZCwgTlVMTCk7Ci0KLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MgJiYgc3RhdHVzICE9IEJFX1BFTkRJTkcpIHsKLQkJVFJBQ0UoRExfRVJSLCAiZXRoX3JxIHJpbmcgZGVzdHJveSBmYWlsZWQuIGlkOiVkLCBmbHVzaDolZCIsCi0JCSAgICAgIGV0aF9ycS0+cmlkLCBmbHVzaCk7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSBxdWVyaWVzIHRoZSBmcmFnIHNpemUgZm9yIGVyeC4KLQotICAgIHBmb2IgICAgICAtIGhhbmRsZSB0byBhIGZ1bmN0aW9uIG9iamVjdAotCi0gICAgZnJhZ19zaXplX2J5dGVzICAgICAgIC0gZXJ4IGZyYWcgc2l6ZSBpbiBieXRlcyB0aGF0IGlzL3dhcyBzZXQuCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhIHVzZWZ1bCBpbnQgZXJyb3IKLSAgICBjb2RlIGlzIHJldHVybmVkLgotCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotCi0qLwotaW50Ci1iZV9ldGhfcnFfZ2V0X2ZyYWdfc2l6ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLCB1MzIgKmZyYWdfc2l6ZV9ieXRlcykKLXsKLQlzdHJ1Y3QgRldDTURfRVRIX0dFVF9SWF9GUkFHX1NJWkUgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCUFTU0VSVChmcmFnX3NpemVfYnl0ZXMpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHdyYiBwZWVrIGZhaWxlZC4iKTsKLQkJcmV0dXJuIEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgRVRIX0dFVF9SWF9GUkFHX1NJWkUpOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCU5VTEwsIE5VTEwsIGZ3Y21kLCBOVUxMKTsKLQotCWlmIChzdGF0dXMgIT0gMCkgewotCQlUUkFDRShETF9FUlIsICJnZXQgZnJhZyBzaXplIGZ3Y21kIGZhaWxlZC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkqZnJhZ19zaXplX2J5dGVzID0gMSA8PCBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLmFjdHVhbF9mcmFnc2l6ZV9sb2cyOwotCi1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSBhdHRlbXB0cyB0byBzZXQgdGhlIGZyYWcgc2l6ZSBmb3IgZXJ4LiAgSWYgdGhlIGZyYWcgc2l6ZSBpcwotICAgIGFscmVhZHkgc2V0LCB0aGUgYXR0ZW1wdCBmYWlscyBhbmQgdGhlIGN1cnJlbnQgZnJhZyBzaXplIGlzIHJldHVybmVkLgotCi0gICAgcGZvYiAgICAgIC0gSGFuZGxlIHRvIGEgZnVuY3Rpb24gb2JqZWN0Ci0KLSAgICBmcmFnX3NpemUgICAgICAgLSBFcnggZnJhZyBzaXplIGluIGJ5dGVzIHRoYXQgaXMvd2FzIHNldC4KLQotICAgIGN1cnJlbnRfZnJhZ19zaXplX2J5dGVzICAgIC0gUG9pbnRlciB0byBsb2NhdGlvbiB3aGVyZSBjdXJycmVudCBmcmFnCi0JCQkJIGlzIHRvIGJlIHJ0dXJuZWQKLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgb3RoZXJ3aXNlIGEgdXNlZnVsIGludCBlcnJvcgotICAgIGNvZGUgaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMOiA8IERJU1BBVENIX0xFVkVMCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBmYWlscyBpbiBub24tcHJpdmlsZWdlZCBtYWNoaW5lIGNvbnRleHQuCi0qLwotaW50Ci1iZV9ldGhfcnFfc2V0X2ZyYWdfc2l6ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJdTMyIGZyYWdfc2l6ZSwgdTMyICpmcmFnX3NpemVfYnl0ZXMpCi17Ci0Jc3RydWN0IEZXQ01EX0VUSF9TRVRfUlhfRlJBR19TSVpFICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlBU1NFUlQoZnJhZ19zaXplX2J5dGVzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgRVRIX1NFVF9SWF9GUkFHX1NJWkUpOwotCi0JQVNTRVJUKGZyYWdfc2l6ZSA+PSAxMjggJiYgZnJhZ19zaXplIDw9IDE2ICogMTAyNCk7Ci0KLQkvKiBUaGlzIGlzIHRoZSBsb2cyIG9mIHRoZSBmcmFnc2l6ZS4gIFRoaXMgaXMgbm90IHRoZSBleGFjdAotCSAqIEVSWCBlbmNvZGluZy4gKi8KLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubmV3X2ZyYWdzaXplX2xvZzIgPSBfX2lsb2cyX3UzMihmcmFnX3NpemUpOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCU5VTEwsIE5VTEwsIGZ3Y21kLCBOVUxMKTsKLQotCWlmIChzdGF0dXMgIT0gMCkgewotCQlUUkFDRShETF9FUlIsICJzZXQgZnJhZyBzaXplIGZ3Y21kIGZhaWxlZC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkqZnJhZ19zaXplX2J5dGVzID0gMSA8PCBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLmFjdHVhbF9mcmFnc2l6ZV9sb2cyOwotZXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi0vKgotICAgIFRoaXMgcm91dGluZSBnZXRzIG9yIHNldHMgYSBtYWMgYWRkcmVzcyBmb3IgYSBkb21haW4KLSAgICBnaXZlbiB0aGUgcG9ydCBhbmQgbWFjLgotCi0gICAgRnVuY3Rpb25PYmplY3QgIC0gRnVuY3Rpb24gb2JqZWN0IGhhbmRsZS4KLSAgICBwb3J0MSAgICAgICAgICAgLSBTZXQgdG8gVFJVRSBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgc2V0L2dldCB0aGUgUG9ydCAxCi0JCQlhZGRyZXNzLiAgT25seSB0aGUgaG9zdCBtYXkgc2V0IHRoaXMgdG8gVFJVRS4KLSAgICBtYWMxICAgICAgICAgICAgLSBTZXQgdG8gVFJVRSBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgc2V0L2dldCB0aGUKLQkJCU1BQyAxIGFkZHJlc3MuICBPbmx5IHRoZSBob3N0IG1heSBzZXQgdGhpcyB0byBUUlVFLgotICAgIHdyaXRlICAgICAgICAgICAtIFNldCB0byBUUlVFIGlmIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIHRoZSBtYWMgYWRkcmVzcy4KLSAgICBtYWNfYWRkcmVzcyAgICAgIC0gQnVmZmVyIG9mIHRoZSBtYWMgYWRkcmVzcyB0byByZWFkIG9yIHdyaXRlLgotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYSB1c2VmdWwgaW50IGlzIHJldHVybmVkLgotCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotKi8KLWludCBiZV9yeGZfbWFjX2FkZHJlc3NfcmVhZF93cml0ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlib29sIHBvcnQxLAkvKiBWTSBtdXN0IGFsd2F5cyBzZXQgdG8gZmFsc2UgKi8KLQkJYm9vbCBtYWMxLAkvKiBWTSBtdXN0IGFsd2F5cyBzZXQgdG8gZmFsc2UgKi8KLQkJYm9vbCBtZ210LCBib29sIHdyaXRlLAotCQlib29sIHBlcm1hbmVudCwgdTggKm1hY19hZGRyZXNzLAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwJLyogb3B0aW9uYWwgKi8KLQkJdm9pZCAqY2JfY29udGV4dCkJLyogb3B0aW9uYWwgKi8KLXsKLQlpbnQgc3RhdHVzID0gQkVfU1VDQ0VTUzsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NQUNfUVVFUlkgKnF1ZXJ5OwotCQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTUFDX1NFVCAqc2V0OwotCX0gZndjbWQgPSB7TlVMTH07Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQl1MzIgdHlwZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCXN0cnVjdCBiZV9tY2Nfd3JiX3Jlc3BvbnNlX2NvcHkgcmM7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCUFTU0VSVChtYWNfYWRkcmVzcyk7Ci0KLQlBU1NFUlQocG9ydDEgPT0gZmFsc2UpOwotCUFTU0VSVChtYWMxID09IGZhbHNlKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlUUkFDRShETF9FUlIsICJNQ0Mgd3JiIHBlZWsgZmFpbGVkLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBFcnJvcjsKLQl9Ci0KLQlpZiAobWdtdCkgewotCQl0eXBlID0gTUFDX0FERFJFU1NfVFlQRV9NQU5BR0VNRU5UOwotCX0gZWxzZSB7Ci0JCWlmIChwZm9iLT50eXBlID09IEJFX0ZVTkNUSU9OX1RZUEVfTkVUV09SSykKLQkJCXR5cGUgPSBNQUNfQUREUkVTU19UWVBFX05FVFdPUks7Ci0JCWVsc2UKLQkJCXR5cGUgPSBNQUNfQUREUkVTU19UWVBFX1NUT1JBR0U7Ci0JfQotCi0JaWYgKHdyaXRlKSB7Ci0JCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcKLQkJICogcmVxdWVzdC9yZXNwb25zZSBzaXplcy4KLQkJICovCi0JCWZ3Y21kLnNldCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwKLQkJCQkJICAgICAgIHdyYiwgQ09NTU9OX05UV0tfTUFDX1NFVCk7Ci0KLQkJZndjbWQuc2V0LT5wYXJhbXMucmVxdWVzdC5pbnZhbGlkYXRlID0gMDsKLQkJZndjbWQuc2V0LT5wYXJhbXMucmVxdWVzdC5tYWMxID0gKG1hYzEgPyAxIDogMCk7Ci0JCWZ3Y21kLnNldC0+cGFyYW1zLnJlcXVlc3QucG9ydCA9IChwb3J0MSA/IDEgOiAwKTsKLQkJZndjbWQuc2V0LT5wYXJhbXMucmVxdWVzdC50eXBlID0gdHlwZTsKLQotCQkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBzZXQuICovCi0JCWZ3Y21kLnNldC0+cGFyYW1zLnJlcXVlc3QubWFjLlNpemVPZlN0cnVjdHVyZSA9Ci0JCQkgICAgc2l6ZW9mKGZ3Y21kLnNldC0+cGFyYW1zLnJlcXVlc3QubWFjKTsKLQkJbWVtY3B5KGZ3Y21kLnNldC0+cGFyYW1zLnJlcXVlc3QubWFjLk1BQ0FkZHJlc3MsCi0JCQltYWNfYWRkcmVzcywgRVRIX0FMRU4pOwotCi0JCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0JCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsCi0JCQkJY2IsIGNiX2NvbnRleHQsIE5VTEwsIE5VTEwsIGZ3Y21kLnNldCwgTlVMTCk7Ci0KLQl9IGVsc2UgewotCi0JCS8qCi0JCSAqIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcKLQkJICogcmVxdWVzdC9yZXNwb25zZSBzaXplcy4KLQkJICovCi0JCWZ3Y21kLnF1ZXJ5ID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLAotCQkJCQkgICAgICAgd3JiLCBDT01NT05fTlRXS19NQUNfUVVFUlkpOwotCi0JCWZ3Y21kLnF1ZXJ5LT5wYXJhbXMucmVxdWVzdC5tYWMxID0gKG1hYzEgPyAxIDogMCk7Ci0JCWZ3Y21kLnF1ZXJ5LT5wYXJhbXMucmVxdWVzdC5wb3J0ID0gKHBvcnQxID8gMSA6IDApOwotCQlmd2NtZC5xdWVyeS0+cGFyYW1zLnJlcXVlc3QudHlwZSA9IHR5cGU7Ci0JCWZ3Y21kLnF1ZXJ5LT5wYXJhbXMucmVxdWVzdC5wZXJtYW5lbnQgPSBwZXJtYW5lbnQ7Ci0KLQkJcmMubGVuZ3RoID0gRklFTERfU0laRU9GKHN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NQUNfUVVFUlksCi0JCQkJCQlwYXJhbXMucmVzcG9uc2UubWFjLk1BQ0FkZHJlc3MpOwotCQlyYy5md2NtZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTUFDX1FVRVJZLAotCQkJCQkJcGFyYW1zLnJlc3BvbnNlLm1hYy5NQUNBZGRyZXNzKTsKLQkJcmMudmEgPSBtYWNfYWRkcmVzczsKLQkJLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKHdpdGggYSBjb3B5IGZvciB0aGUgcmVzcG9uc2UpICovCi0JCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIGNiLAotCQkJCWNiX2NvbnRleHQsIE5VTEwsIE5VTEwsIGZ3Y21kLnF1ZXJ5LCAmcmMpOwotCX0KLQotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgIm1hYyBzZXQvcXVlcnkgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIHdyaXRlcyBkYXRhIHRvIGNvbnRleHQgbWVtb3J5LgotCi0gICAgcGZvYiAgLSBGdW5jdGlvbiBvYmplY3QgaGFuZGxlLgotICAgIG1hY190YWJsZSAgICAgLSBTZXQgdG8gdGhlIDEyOC1iaXQgbXVsdGljYXN0IGFkZHJlc3MgaGFzaCB0YWJsZS4KLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgb3RoZXJ3aXNlIGEgdXNlZnVsIGludCBpcyByZXR1cm5lZC4KLQotICAgIElSUUw6IDwgRElTUEFUQ0hfTEVWRUwKLSovCi0KLWludCBiZV9yeGZfbXVsdGljYXN0X2NvbmZpZyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlib29sIHByb21pc2N1b3VzLCB1MzIgbnVtLCB1OCAqbWFjX3RhYmxlLAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwJLyogb3B0aW9uYWwgKi8KLQkJdm9pZCAqY2JfY29udGV4dCwKLQkJc3RydWN0IGJlX211bHRpY2FzdF9xX2N0eHQgKnFfY3R4dCkKLXsKLQlpbnQgc3RhdHVzID0gQkVfU1VDQ0VTUzsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVCAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0Jc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICpnZW5lcmljX2N0eHQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCUFTU0VSVChudW0gPD0gQVJSQVlfU0laRShmd2NtZC0+cGFyYW1zLnJlcXVlc3QubWFjKSk7Ci0KLQlpZiAobnVtID4gQVJSQVlfU0laRShmd2NtZC0+cGFyYW1zLnJlcXVlc3QubWFjKSkgewotCQlUUkFDRShETF9FUlIsICJUb28gbWFueSBtdWx0aWNhc3QgYWRkcmVzc2VzLiBCRSBzdXBwb3J0cyAlZC4iLAotCQkgICAgICAoaW50KSBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5tYWMpKTsKLQkJcmV0dXJuIEJFX05PVF9PSzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlpZiAocV9jdHh0ICYmIGNiKSB7Ci0JCQl3cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAmcV9jdHh0LT53cmJfaGVhZGVyOwotCQkJZ2VuZXJpY19jdHh0ID0gKHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqKSBxX2N0eHQ7Ci0JCQlnZW5lcmljX2N0eHQtPmNvbnRleHQuYnl0ZXMgPSBzaXplb2YoKnFfY3R4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJCWdvdG8gRXJyb3I7Ci0JCX0KLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9OVFdLX01VTFRJQ0FTVF9TRVQpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnByb21pc2N1b3VzID0gcHJvbWlzY3VvdXM7Ci0JaWYgKCFwcm9taXNjdW91cykgewotCQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubnVtX21hYyA9IG51bTsKLQkJaWYgKG51bSA+IDApIHsKLQkJCUFTU0VSVChtYWNfdGFibGUpOwotCQkJbWVtY3B5KGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5tYWMsCi0JCQkJCQltYWNfdGFibGUsIEVUSF9BTEVOICogbnVtKTsKLQkJfQotCX0KLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgZ2VuZXJpY19jdHh0LAotCQkJY2IsIGNiX2NvbnRleHQsIE5VTEwsIE5VTEwsIGZ3Y21kLCBOVUxMKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlUUkFDRShETF9FUlIsICJtdWx0aWNhc3QgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGFkZHMgb3IgcmVtb3ZlcyBhIHZsYW4gdGFnIGZyb20gdGhlIHJ4ZiB0YWJsZS4KLQotICAgIEZ1bmN0aW9uT2JqZWN0ICAtIEZ1bmN0aW9uIG9iamVjdCBoYW5kbGUuCi0gICAgVkxhblRhZyAgICAgICAgIC0gVkxhbiB0YWcgdG8gYWRkIG9yIHJlbW92ZS4KLSAgICBBZGQgICAgICAgICAgICAgLSBTZXQgdG8gVFJVRSBpZiB0aGlzIHdpbGwgYWRkIGEgdmxhbiB0YWcKLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgb3RoZXJ3aXNlIGEgdXNlZnVsIGludCBpcyByZXR1cm5lZC4KLQotICAgIElSUUw6IDwgRElTUEFUQ0hfTEVWRUwKLSovCi1pbnQgYmVfcnhmX3ZsYW5fY29uZmlnKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCWJvb2wgcHJvbWlzY3VvdXMsIHUzMiBudW0sIHUxNiAqdmxhbl90YWdfYXJyYXksCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAkvKiBvcHRpb25hbCAqLwotCQl2b2lkICpjYl9jb250ZXh0LAotCQlzdHJ1Y3QgYmVfdmxhbl9xX2N0eHQgKnFfY3R4dCkJLyogb3B0aW9uYWwgKi8KLXsKLQlpbnQgc3RhdHVzID0gQkVfU1VDQ0VTUzsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfVkxBTl9DT05GSUcgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqZ2VuZXJpY19jdHh0ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlpZiAobnVtID4gQVJSQVlfU0laRShmd2NtZC0+cGFyYW1zLnJlcXVlc3Qudmxhbl90YWcpKSB7Ci0JCVRSQUNFKERMX0VSUiwgIlRvbyBtYW55IFZMQU4gdGFncy4iKTsKLQkJcmV0dXJuIEJFX05PVF9PSzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlpZiAocV9jdHh0ICYmIGNiKSB7Ci0JCQl3cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAmcV9jdHh0LT53cmJfaGVhZGVyOwotCQkJZ2VuZXJpY19jdHh0ID0gKHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqKSBxX2N0eHQ7Ci0JCQlnZW5lcmljX2N0eHQtPmNvbnRleHQuYnl0ZXMgPSBzaXplb2YoKnFfY3R4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJCWdvdG8gRXJyb3I7Ci0JCX0KLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9OVFdLX1ZMQU5fQ09ORklHKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5wcm9taXNjdW91cyA9IHByb21pc2N1b3VzOwotCWlmICghcHJvbWlzY3VvdXMpIHsKLQkJZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV92bGFuID0gbnVtOwotCi0JCWlmIChudW0gPiAwKSB7Ci0JCQlBU1NFUlQodmxhbl90YWdfYXJyYXkpOwotCQkJbWVtY3B5KGZ3Y21kLT5wYXJhbXMucmVxdWVzdC52bGFuX3RhZywgdmxhbl90YWdfYXJyYXksCi0JCQkJICBudW0gKiBzaXplb2Yodmxhbl90YWdfYXJyYXlbMF0pKTsKLQkJfQotCX0KLQotCS8qIFBvc3QgdGhlIGNvbW1hZG4gKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBnZW5lcmljX2N0eHQsCi0JCQljYiwgY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgInZsYW4gZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLQotaW50IGJlX3J4Zl9saW5rX3N0YXR1cyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlzdHJ1Y3QgQkVfTElOS19TVEFUVVMgKmxpbmtfc3RhdHVzLAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkJdm9pZCAqY2JfY29udGV4dCwKLQkJc3RydWN0IGJlX2xpbmtfc3RhdHVzX3FfY3R4dCAqcV9jdHh0KQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICpnZW5lcmljX2N0eHQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9yZXNwb25zZV9jb3B5IHJjOwotCi0JQVNTRVJUKGxpbmtfc3RhdHVzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCi0JaWYgKCF3cmIpIHsKLQkJaWYgKHFfY3R4dCAmJiBjYikgewotCQkJd3JiID0gKHN0cnVjdCBNQ0NfV1JCX0FNQVAgKikgJnFfY3R4dC0+d3JiX2hlYWRlcjsKLQkJCWdlbmVyaWNfY3R4dCA9IChzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKikgcV9jdHh0OwotCQkJZ2VuZXJpY19jdHh0LT5jb250ZXh0LmJ5dGVzID0gc2l6ZW9mKCpxX2N0eHQpOwotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCQlnb3RvIEVycm9yOwotCQl9Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLAotCQkJCQkgICAgICAgQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlkpOwotCi0JcmMubGVuZ3RoID0gRklFTERfU0laRU9GKHN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWSwKLQkJCQkJcGFyYW1zLnJlc3BvbnNlKTsKLQlyYy5md2NtZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlksCi0JCQkJCXBhcmFtcy5yZXNwb25zZSk7Ci0JcmMudmEgPSBsaW5rX3N0YXR1czsKLQkvKiBQb3N0IG9yIHF1ZXVlIHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIGdlbmVyaWNfY3R4dCwKLQkJCWNiLCBjYl9jb250ZXh0LCBOVUxMLCBOVUxMLCBmd2NtZCwgJnJjKTsKLQotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgImxpbmsgc3RhdHVzIGZ3Y21kIGZhaWxlZC4iKTsKLQkJZ290byBFcnJvcjsKLQl9Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1pbnQKLWJlX3J4Zl9xdWVyeV9ldGhfc3RhdGlzdGljcyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICAgc3RydWN0IEZXQ01EX0VUSF9HRVRfU1RBVElTVElDUyAqdmFfZm9yX2Z3Y21kLAotCQkgICAgdTY0IHBhX2Zvcl9md2NtZCwgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCi0JCSAgICB2b2lkICpjYl9jb250ZXh0LAotCQkgICAgc3RydWN0IGJlX25vbmVtYmVkZGVkX3FfY3R4dCAqcV9jdHh0KQotewotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICpnZW5lcmljX2N0eHQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCUFTU0VSVCh2YV9mb3JfZndjbWQpOwotCUFTU0VSVChwYV9mb3JfZndjbWQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0KLQlpZiAoIXdyYikgewotCQlpZiAocV9jdHh0ICYmIGNiKSB7Ci0JCQl3cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAmcV9jdHh0LT53cmJfaGVhZGVyOwotCQkJZ2VuZXJpY19jdHh0ID0gKHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqKSBxX2N0eHQ7Ci0JCQlnZW5lcmljX2N0eHQtPmNvbnRleHQuYnl0ZXMgPSBzaXplb2YoKnFfY3R4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJCWdvdG8gRXJyb3I7Ci0JCX0KLQl9Ci0KLQlUUkFDRShETF9JTkZPLCAiUXVlcnkgZXRoIHN0YXRzLiBmd2NtZCB2YTolcCBwYToweCUwOHhfJTA4eCIsCi0JICAgICAgdmFfZm9yX2Z3Y21kLCB1cHBlcl8zMl9iaXRzKHBhX2Zvcl9md2NtZCksICh1MzIpcGFfZm9yX2Z3Y21kKTsKLQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQl2YV9mb3JfZndjbWQgPSBCRV9QUkVQQVJFX05PTkVNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwKLQkJCSAgdmFfZm9yX2Z3Y21kLCBwYV9mb3JfZndjbWQsIEVUSF9HRVRfU1RBVElTVElDUyk7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIGdlbmVyaWNfY3R4dCwKLQkJY2IsIGNiX2NvbnRleHQsIE5VTEwsIE5VTEwsIHZhX2Zvcl9md2NtZCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAiZXRoIHN0YXRzIGZ3Y21kIGZhaWxlZC4iKTsKLQkJZ290byBFcnJvcjsKLQl9Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1pbnQKLWJlX3J4Zl9wcm9taXNjdW91cyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICBib29sIGVuYWJsZV9wb3J0MCwgYm9vbCBlbmFibGVfcG9ydDEsCi0JCSAgIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0LAotCQkgICBzdHJ1Y3QgYmVfcHJvbWlzY3VvdXNfcV9jdHh0ICpxX2N0eHQpCi17Ci0Jc3RydWN0IEZXQ01EX0VUSF9QUk9NSVNDVU9VUyAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICpnZW5lcmljX2N0eHQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0KLQlpZiAoIXdyYikgewotCQlpZiAocV9jdHh0ICYmIGNiKSB7Ci0JCQl3cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAmcV9jdHh0LT53cmJfaGVhZGVyOwotCQkJZ2VuZXJpY19jdHh0ID0gKHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqKSBxX2N0eHQ7Ci0JCQlnZW5lcmljX2N0eHQtPmNvbnRleHQuYnl0ZXMgPSBzaXplb2YoKnFfY3R4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJCWdvdG8gRXJyb3I7Ci0JCX0KLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIEVUSF9QUk9NSVNDVU9VUyk7Ci0KLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QucG9ydDBfcHJvbWlzY3VvdXMgPSBlbmFibGVfcG9ydDA7Ci0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBvcnQxX3Byb21pc2N1b3VzID0gZW5hYmxlX3BvcnQxOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBnZW5lcmljX2N0eHQsCi0JCQljYiwgY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyA8IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAicHJvbWlzY3VvdXMgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLQotLyoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX3J4Zl9maWx0ZXJfY29uZmlnCi0gKiAgIENvbmZpZ3VyZXMgQmxhZGVFbmdpbmUgZXRoZXJuZXQgcmVjZWl2ZSBmaWx0ZXIgc2V0dGluZ3MuCi0gKiBwZm9iICAgIC0KLSAqIHNldHRpbmdzICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIHJlcXVlc3RlZCBmaWx0ZXIgc2V0dGluZ3MuCi0gKiAJCQlUaGUgcmVzcG9uc2UgZnJvbSBCbGFkZUVuZ2luZSB3aWxsIGJlIHBsYWNlZCBiYWNrCi0gKiAJCQlpbiB0aGlzIHN0cnVjdHVyZS4KLSAqIGNiICAgICAgICAgICAgICAgICAtIG9wdGlvbmFsCi0gKiBjYl9jb250ZXh0ICAgICAgICAgLSBvcHRpb25hbAotICogcV9jdHh0ICAgICAgICAgICAgIC0gT3B0aW9uYWwuIFBvaW50ZXIgdG8gYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBzdHJ1Y3QuCi0gKiAJCQlJZiB0aGUgTUNDIFdSQiByaW5nIGlzIGZ1bGwsIHRoaXMgc3RydWN0dXJlIGlzCi0gKiAJCQl1c2VkIHRvIHF1ZXVlIHRoZSBvcGVyYXRpb24uIEl0IHdpbGwgYmUgcG9zdGVkCi0gKiAJCQl0byB0aGUgTUNDIHJpbmcgd2hlbiBzcGFjZSBiZWNvbWVzIGF2YWlsYWJsZS4gQWxsCi0gKiAgICAgICAgICAgICAgICAgICAgICBxdWV1ZWQgY29tbWFuZHMgd2lsbCBiZSBwb3N0ZWQgdG8gdGhlIHJpbmcgaW4KLSAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBvcmRlciB0aGV5IGFyZSByZWNlaXZlZC4gSXQgaXMgYWx3YXlzIHZhbGlkCi0gKiAgICAgICAgICAgICAgICAgICAgICB0byBwYXNzIGEgcG9pbnRlciB0byBhIGdlbmVyaWMKLSAqICAgICAgICAgICAgICAgICAgICAgIGJlX2dlbmVyaWNfcV9jdHh0LiBIb3dldmVyLCB0aGUgc3BlY2lmaWMKLSAqICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgc3RydWN0cyBhcmUgZ2VuZXJhbGx5IHNtYWxsZXIgdGhhbgotICogICAgICAgICAgICAgICAgICAgICAgdGhlIGdlbmVyaWMgc3RydWN0LgotICogcmV0dXJuIHBlbmRfc3RhdHVzIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4KLSAqIAkJCUJFX1BFTkRJTkcgKHBvc3RpdmUgdmFsdWUpIGlmIHRoZSBGV0NNRAotICogICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbiBpcyBwZW5kaW5nLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQKLWJlX3J4Zl9maWx0ZXJfY29uZmlnKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgICAgc3RydWN0IE5UV0tfUlhfRklMVEVSX1NFVFRJTkdTICpzZXR0aW5ncywKLQkJICAgICBtY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwgdm9pZCAqY2JfY29udGV4dCwKLQkJICAgICBzdHJ1Y3QgYmVfcnhmX2ZpbHRlcl9xX2N0eHQgKnFfY3R4dCkKLXsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfUlhfRklMVEVSICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKmdlbmVyaWNfY3R4dCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCXN0cnVjdCBiZV9tY2Nfd3JiX3Jlc3BvbnNlX2NvcHkgcmM7Ci0KLQlBU1NFUlQoc2V0dGluZ3MpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0KLQlpZiAoIXdyYikgewotCQlpZiAocV9jdHh0ICYmIGNiKSB7Ci0JCQl3cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAmcV9jdHh0LT53cmJfaGVhZGVyOwotCQkJZ2VuZXJpY19jdHh0ID0gKHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqKSBxX2N0eHQ7Ci0JCQlnZW5lcmljX2N0eHQtPmNvbnRleHQuYnl0ZXMgPSBzaXplb2YoKnFfY3R4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJCWdvdG8gRXJyb3I7Ci0JCX0KLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9OVFdLX1JYX0ZJTFRFUik7Ci0JbWVtY3B5KCZmd2NtZC0+cGFyYW1zLnJlcXVlc3QsIHNldHRpbmdzLCBzaXplb2YoKnNldHRpbmdzKSk7Ci0KLQlyYy5sZW5ndGggPSBGSUVMRF9TSVpFT0Yoc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUiwKLQkJCQkJcGFyYW1zLnJlc3BvbnNlKTsKLQlyYy5md2NtZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfUlhfRklMVEVSLAotCQkJCQlwYXJhbXMucmVzcG9uc2UpOwotCXJjLnZhID0gc2V0dGluZ3M7Ci0JLyogUG9zdCBvciBxdWV1ZSB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBnZW5lcmljX2N0eHQsCi0JCQljYiwgY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgZndjbWQsICZyYyk7Ci0KLQlpZiAoc3RhdHVzIDwgMCkgewotCQlUUkFDRShETF9FUlIsICJSWEYvRVJYIGZpbHRlciBjb25maWcgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXR4X2NvbnRleHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ldHhfY29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTRmYmU1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ldHhfY29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2V0eF9jb250ZXh0X2FtYXBfaF9fCi0jZGVmaW5lIF9fZXR4X2NvbnRleHRfYW1hcF9oX18KLQotLyogRVRYIHJpbmcgIGNvbnRleHQgc3RydWN0dXJlLiAqLwotc3RydWN0IEJFX0VUWF9DT05URVhUX0FNQVAgewotCXU4IHR4X2NpZHhbMTFdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbNV07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsxNl07CS8qIERXT1JEIDAgKi8KLQl1OCB0eF9waWR4WzExXTsJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQyOwkJLyogRFdPUkQgMSAqLwotCXU4IHR4X3Jpbmdfc2l6ZVs0XTsJLyogRFdPUkQgMSAqLwotCXU4IHBkX2lkWzVdOwkvKiBEV09SRCAxICovCi0JdTggcGRfaWRfbm90X3ZhbGlkOwkvKiBEV09SRCAxICovCi0JdTggY3FfaWRfc2VuZFsxMF07CS8qIERXT1JEIDEgKi8KLQl1OCByc3ZkM1szMl07CS8qIERXT1JEIDIgKi8KLQl1OCByc3ZkNFszMl07CS8qIERXT1JEIDMgKi8KLQl1OCBjdXJfYnl0ZXNbMzJdOwkvKiBEV09SRCA0ICovCi0JdTggbWF4X2J5dGVzWzMyXTsJLyogRFdPUkQgNSAqLwotCXU4IHRpbWVfc3RhbXBbMzJdOwkvKiBEV09SRCA2ICovCi0JdTggcnN2ZDVbMTFdOwkvKiBEV09SRCA3ICovCi0JdTggZnVuYzsJCS8qIERXT1JEIDcgKi8KLQl1OCByc3ZkNlsyMF07CS8qIERXT1JEIDcgKi8KLQl1OCBjdXJfdHhkX2NvdW50WzMyXTsJLyogRFdPUkQgOCAqLwotCXU4IG1heF90eGRfY291bnRbMzJdOwkvKiBEV09SRCA5ICovCi0JdTggcnN2ZDdbMzJdOwkvKiBEV09SRCAxMCAqLwotCXU4IHJzdmQ4WzMyXTsJLyogRFdPUkQgMTEgKi8KLQl1OCByc3ZkOVszMl07CS8qIERXT1JEIDEyICovCi0JdTggcnN2ZDEwWzMyXTsJLyogRFdPUkQgMTMgKi8KLQl1OCByc3ZkMTFbMzJdOwkvKiBEV09SRCAxNCAqLwotCXU4IHJzdmQxMlszMl07CS8qIERXT1JEIDE1ICovCi19IF9fcGFja2VkOwotc3RydWN0IEVUWF9DT05URVhUX0FNQVAgewotCXUzMiBkd1sxNl07Ci19OwotCi0jZW5kaWYgLyogX19ldHhfY29udGV4dF9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z1bmNvYmouYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9mdW5jb2JqLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNTdlYjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z1bmNvYmouYworKysgL2Rldi9udWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0jaW5jbHVkZSAiaHdsaWIuaCIKLSNpbmNsdWRlICJiZXN0YXR1cy5oIgotCi0KLWludAotYmVfZnVuY3Rpb25faW50ZXJuYWxfcXVlcnlfZmlybXdhcmVfY29uZmlnKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCQkJICAgc3RydWN0IEJFX0ZJUk1XQVJFX0NPTkZJRyAqY29uZmlnKQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fRklSTVdBUkVfQ09ORklHICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0Jc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSByYzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRyk7Ci0KLQlyYy5sZW5ndGggPSBGSUVMRF9TSVpFT0Yoc3RydWN0IEZXQ01EX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcsCi0JCQkJCXBhcmFtcy5yZXNwb25zZSk7Ci0JcmMuZndjbWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IEZXQ01EX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcsCi0JCQkJCXBhcmFtcy5yZXNwb25zZSk7Ci0JcmMudmEgPSBjb25maWc7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsCi0JCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGZ3Y21kLCAmcmMpOwotZXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgZnVuY3Rpb24gb2JqZWN0IGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbgotICAgIHByb3ZpZGVkIGJ5IHVwcGVyIGxheWVyIGRyaXZlcnMuCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1Mgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgaW50IG9uIGZhaWx1cmUuCi0KLSAgICBBIGZ1bmN0aW9uIG9iamVjdCByZXByZXNlbnRzIGEgc2luZ2xlIEJsYWRlRW5naW5lIChsb2dpY2FsKSBQQ0kgZnVuY3Rpb24uCi0gICAgVGhhdCBpcyBhIGZ1bmN0aW9uIG9iamVjdCBlaXRoZXIgcmVwcmVzZW50cwotICAgIHRoZSBuZXR3b3JraW5nIHNpZGUgb2YgQmxhZGVFbmdpbmUgb3IgdGhlIGlTQ1NJIHNpZGUgb2YgQmxhZGVFbmdpbmUuCi0KLSAgICBUaGlzIHJvdXRpbmUgd2lsbCBhbHNvIGRldGVjdCBhbmQgY3JlYXRlIGFuIGFwcHJvcHJpYXRlIFBEIG9iamVjdCBmb3IgdGhlCi0gICAgUENJIGZ1bmN0aW9uIGFzIG5lZWRlZC4KLSovCi1pbnQKLWJlX2Z1bmN0aW9uX29iamVjdF9jcmVhdGUodTggX19pb21lbSAqY3NyX3ZhLCB1OCBfX2lvbWVtICpkYl92YSwKLQkJdTggX19pb21lbSAqcGNpX3ZhLCB1MzIgZnVuY3Rpb25fdHlwZSwKLQkJc3RydWN0IHJpbmdfZGVzYyAqbWFpbGJveCwgc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlpbnQgc3RhdHVzOwotCi0JQVNTRVJUKHBmb2IpOwkvKiBub3QgYSBtYWdpYyBhc3NlcnQgKi8KLQlBU1NFUlQoZnVuY3Rpb25fdHlwZSA8PSAyKTsKLQotCVRSQUNFKERMX0lORk8sICJDcmVhdGUgZnVuY3Rpb24gb2JqZWN0LiB0eXBlOiVzIG9iamVjdDoweCVwIiwKLQkgICAgICAoZnVuY3Rpb25fdHlwZSA9PSBCRV9GVU5DVElPTl9UWVBFX0lTQ1NJID8gImlTQ1NJIiA6Ci0JICAgICAgIChmdW5jdGlvbl90eXBlID09IEJFX0ZVTkNUSU9OX1RZUEVfTkVUV09SSyA/ICJOZXR3b3JrIiA6Ci0JCSJBcm0iKSksIHBmb2IpOwotCi0JbWVtc2V0KHBmb2IsIDAsIHNpemVvZigqcGZvYikpOwotCi0JcGZvYi0+dHlwZSA9IGZ1bmN0aW9uX3R5cGU7Ci0JcGZvYi0+Y3NyX3ZhID0gY3NyX3ZhOwotCXBmb2ItPmRiX3ZhID0gZGJfdmE7Ci0JcGZvYi0+cGNpX3ZhID0gcGNpX3ZhOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnBmb2ItPmNxX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZwZm9iLT5wb3N0X2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZwZm9iLT5tY2NfY29udGV4dF9sb2NrKTsKLQotCi0JcGZvYi0+cGNpX2Z1bmN0aW9uX251bWJlciA9IDE7Ci0KLQotCXBmb2ItPmVtdWxhdGUgPSBmYWxzZTsKLQlUUkFDRShETF9OT1RFLCAiTm9uLWVtdWxhdGlvbiBtb2RlIik7Ci0Jc3RhdHVzID0gYmVfZHJpdmVfUE9TVChwZm9iKTsKLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJVFJBQ0UoRExfRVJSLCAiQmxhZGVFbmdpbmUgUE9TVCBmYWlsZWQuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSB0aGUgbWFpbGJveCAqLwotCXN0YXR1cyA9IGJlX21wdV9pbml0X21haWxib3gocGZvYiwgbWFpbGJveCk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCVRSQUNFKERMX0VSUiwgIkZhaWxlZCB0byBpbml0aWFsaXplIG1haWxib3guIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qCi0JICogQ2FjaGUgdGhlIGZpcm13YXJlIGNvbmZpZyBmb3IgQVNTRVJUcyBpbiBod2NsaWIgYW5kIGxhdGVyCi0JICogZHJpdmVyIHF1ZXJpZXMuCi0JICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25faW50ZXJuYWxfcXVlcnlfZmlybXdhcmVfY29uZmlnKHBmb2IsCi0JCQkJCSAgICAgICAmcGZvYi0+ZndfY29uZmlnKTsKLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJVFJBQ0UoRExfRVJSLCAiRmFpbGVkIHRvIHF1ZXJ5IGZpcm13YXJlIGNvbmZpZy4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQkvKiBObyBjbGVhbnVwIG5lY2Vzc2FyeSAqLwotCQlUUkFDRShETF9FUlIsICJGYWlsZWQgdG8gY3JlYXRlIGZ1bmN0aW9uLiIpOwotCQltZW1zZXQocGZvYiwgMCwgc2l6ZW9mKCpwZm9iKSk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgb24gYSBnaXZlbiBmdW5jdGlvbiBvYmplY3QuIE9uY2UKLSAgICB0aGUgcmVmZXJlbmNlIGNvdW50IGZhbGxzIHRvIHplcm8sIHRoZSBmdW5jdGlvbiBvYmplY3QgaXMgZGVzdHJveWVkIGFuZCBhbGwKLSAgICByZXNvdXJjZXMgaGVsZCBhcmUgZnJlZWQuCi0KLSAgICBGdW5jdGlvbk9iamVjdCAgICAgIC0gVGhlIGZ1bmN0aW9uIG9iamVjdCB0byBkcm9wIHRoZSByZWZlcmVuY2UgdG8uCi0qLwotaW50IGJlX2Z1bmN0aW9uX29iamVjdF9kZXN0cm95KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0JVFJBQ0UoRExfSU5GTywgIkRlc3Ryb3kgcGZvYi4gT2JqZWN0OjB4JXAiLAotCSAgICAgIHBmb2IpOwotCi0KLQlBU1NFUlQocGZvYi0+bWNjID09IE5VTEwpOwotCi0JcmV0dXJuIEJFX1NVQ0NFU1M7Ci19Ci0KLWludCBiZV9mdW5jdGlvbl9jbGVhbnVwKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdTMyIGlzcjsKLQl1MzIgaG9zdF9pbnRyOwotCXN0cnVjdCBQQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1JfQU1BUCBjdHJsOwotCi0KLQlpZiAocGZvYi0+dHlwZSA9PSBCRV9GVU5DVElPTl9UWVBFX05FVFdPUkspIHsKLQkJc3RhdHVzID0gYmVfcnhmX211bHRpY2FzdF9jb25maWcocGZvYiwgZmFsc2UsIDAsCi0JCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJQVNTRVJUKHN0YXR1cyA9PSBCRV9TVUNDRVNTKTsKLQl9Ci0JLyogVkxBTiAqLwotCXN0YXR1cyA9IGJlX3J4Zl92bGFuX2NvbmZpZyhwZm9iLCBmYWxzZSwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JQVNTRVJUKHN0YXR1cyA9PSBCRV9TVUNDRVNTKTsKLQkvKgotCSAqIE1DQyBRdWV1ZSAtLSBTd2l0Y2hlcyB0byBtYWlsYm94IG1vZGUuICBNYXkgd2FudCB0byBkZXN0cm95Ci0JICogYWxsIGJ1dCB0aGUgTUNDIENRIGJlZm9yZSB0aGlzIGNhbGwgaWYgcG9sbGluZyBDUSBpcyBtdWNoIGJldHRlcgotCSAqIHBlcmZvcm1hbmNlIHRoYW4gcG9sbGluZyBtYWlsYm94IHJlZ2lzdGVyLgotCSAqLwotCWlmIChwZm9iLT5tY2MpCi0JCXN0YXR1cyA9IGJlX21jY19yaW5nX2Rlc3Ryb3kocGZvYi0+bWNjKTsKLQkvKgotCSAqIElmIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBjbGVhciBhbnkgQ0VWIGludGVycnVwdCBhc3NlcnRpb25zIHRoYXQKLQkgKiBmaXJlZCBhZnRlciB3ZSBzdG9wcGVkIHByb2Nlc3NpbmcgRVFzLgotCSAqLwotCWN0cmwuZHdbMF0gPSBQQ0lDRkcxX1JFQUQocGZvYiwgaG9zdF90aW1lcl9pbnRfY3RybCk7Ci0JaG9zdF9pbnRyID0gQU1BUF9HRVRfQklUU19QVFIoUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSLAotCQkJCQkJCWhvc3RpbnRyLCBjdHJsLmR3KTsKLQlpZiAoIWhvc3RfaW50cikKLQkJaWYgKHBmb2ItPnR5cGUgPT0gQkVfRlVOQ1RJT05fVFlQRV9ORVRXT1JLKQotCQkJaXNyID0gQ1NSX1JFQUQocGZvYiwgY2V2LmlzcjEpOwotCQllbHNlCi0JCQlpc3IgPSBDU1JfUkVBRChwZm9iLCBjZXYuaXNyMCk7Ci0JZWxzZQotCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gKi8KLQkJVFJBQ0UoRExfRVJSLCAiZnVuY3Rpb25fY2xlYW51cCBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZW5hYmxlZCIpOwotCS8qIEZ1bmN0aW9uIG9iamVjdCBkZXN0cm95ICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fb2JqZWN0X2Rlc3Ryb3kocGZvYik7Ci0JQVNTRVJUKHN0YXR1cyA9PSBCRV9TVUNDRVNTKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLQotdm9pZCAqCi1iZV9mdW5jdGlvbl9wcmVwYXJlX2VtYmVkZGVkX2Z3Y21kKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiLCB1MzIgcGF5bGRfbGVuLCB1MzIgcmVxdWVzdF9sZW5ndGgsCi0JdTMyIHJlc3BvbnNlX2xlbmd0aCwgdTMyIG9wY29kZSwgdTMyIHN1YnN5c3RlbSkKLXsKLQlzdHJ1Y3QgRldDTURfUkVRVUVTVF9IRUFERVIgKmhlYWRlciA9IE5VTEw7Ci0JdTMyIG47Ci0KLQlBU1NFUlQod3JiKTsKLQotCW4gPSBvZmZzZXRvZihzdHJ1Y3QgQkVfTUNDX1dSQl9BTUFQLCBwYXlsb2FkKS84OwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19XUkIsIGVtYmVkZGVkLCB3cmIsIDEpOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19XUkIsIHBheWxvYWRfbGVuZ3RoLCB3cmIsIG1pbihwYXlsZF9sZW4sIG4pKTsKLQloZWFkZXIgPSAoc3RydWN0IEZXQ01EX1JFUVVFU1RfSEVBREVSICopKCh1OCAqKXdyYiArIG4pOwotCi0JaGVhZGVyLT50aW1lb3V0ID0gMDsKLQloZWFkZXItPmRvbWFpbiA9IDA7Ci0JaGVhZGVyLT5yZXF1ZXN0X2xlbmd0aCA9IG1heChyZXF1ZXN0X2xlbmd0aCwgcmVzcG9uc2VfbGVuZ3RoKTsKLQloZWFkZXItPm9wY29kZSA9IG9wY29kZTsKLQloZWFkZXItPnN1YnN5c3RlbSA9IHN1YnN5c3RlbTsKLQotCXJldHVybiBoZWFkZXI7Ci19Ci0KLXZvaWQgKgotYmVfZnVuY3Rpb25fcHJlcGFyZV9ub25lbWJlZGRlZF9md2NtZChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiwKLQl2b2lkICpmd2NtZF92YSwgdTY0IGZ3Y21kX3BhLAotCXUzMiBwYXlsZF9sZW4sCi0JdTMyIHJlcXVlc3RfbGVuZ3RoLAotCXUzMiByZXNwb25zZV9sZW5ndGgsCi0JdTMyIG9wY29kZSwgdTMyIHN1YnN5c3RlbSkKLXsKLQlzdHJ1Y3QgRldDTURfUkVRVUVTVF9IRUFERVIgKmhlYWRlciA9IE5VTEw7Ci0JdTMyIG47Ci0Jc3RydWN0IE1DQ19XUkJfUEFZTE9BRF9BTUFQICpwbHA7Ci0KLQlBU1NFUlQod3JiKTsKLQlBU1NFUlQoZndjbWRfdmEpOwotCi0JaGVhZGVyID0gKHN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiAqKSBmd2NtZF92YTsKLQotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19XUkIsIGVtYmVkZGVkLCB3cmIsIDApOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19XUkIsIHBheWxvYWRfbGVuZ3RoLCB3cmIsIHBheWxkX2xlbik7Ci0KLQkvKgotCSAqIEFzc3VtZSBvbmUgZnJhZ21lbnQuIFRoZSBjYWxsZXIgbWF5IG92ZXJyaWRlIHRoZSBTR0wgYnkKLQkgKiByZXdyaXRpbmcgdGhlIDB0aCBsZW5ndGggYW5kIGFkZGluZyBtb3JlIGVudHJpZXMuICBUaGV5Ci0JICogd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSBzZ2VfY291bnQuCi0JICovCi0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1dSQiwgc2dlX2NvdW50LCB3cmIsIDEpOwotCi0JbiA9IG9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfV1JCX0FNQVAsIHBheWxvYWQpLzg7Ci0JcGxwID0gKHN0cnVjdCBNQ0NfV1JCX1BBWUxPQURfQU1BUCAqKSgodTggKil3cmIgKyBuKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfV1JCX1BBWUxPQUQsIHNnbFswXS5sZW5ndGgsIHBscCwgcGF5bGRfbGVuKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfV1JCX1BBWUxPQUQsIHNnbFswXS5wYV9sbywgcGxwLCAodTMyKWZ3Y21kX3BhKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfV1JCX1BBWUxPQUQsIHNnbFswXS5wYV9oaSwgcGxwLAotCQkJCQl1cHBlcl8zMl9iaXRzKGZ3Y21kX3BhKSk7Ci0KLQloZWFkZXItPnRpbWVvdXQgPSAwOwotCWhlYWRlci0+ZG9tYWluID0gMDsKLQloZWFkZXItPnJlcXVlc3RfbGVuZ3RoID0gbWF4KHJlcXVlc3RfbGVuZ3RoLCByZXNwb25zZV9sZW5ndGgpOwotCWhlYWRlci0+b3Bjb2RlID0gb3Bjb2RlOwotCWhlYWRlci0+c3Vic3lzdGVtID0gc3Vic3lzdGVtOwotCi0JcmV0dXJuIGhlYWRlcjsKLX0KLQotc3RydWN0IE1DQ19XUkJfQU1BUCAqCi1iZV9mdW5jdGlvbl9wZWVrX21jY193cmIoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCXUzMiBvZmZzZXQ7Ci0KLQlpZiAocGZvYi0+bWNjKQotCQl3cmIgPSBfYmVfbXB1X3BlZWtfcmluZ193cmIocGZvYi0+bWNjLCBmYWxzZSk7Ci0JZWxzZSB7Ci0JCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfTUFJTEJPWF9BTUFQLCB3cmIpLzg7Ci0JCXdyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICgodTggKikgcGZvYi0+bWFpbGJveC52YSArCi0JCQkJb2Zmc2V0KTsKLQl9Ci0KLQlpZiAod3JiKQotCQltZW1zZXQod3JiLCAwLCBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkpOwotCi0JcmV0dXJuIHdyYjsKLX0KLQotI2lmIGRlZmluZWQoQkVfREVCVUcpCi12b2lkIGJlX2Z1bmN0aW9uX2RlYnVnX3ByaW50X3dyYihzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsIHZvaWQgKm9wdGlvbmFsX2Z3Y21kX3ZhLAotCQlzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICp3cmJfY29udGV4dCkKLXsKLQotCXN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiAqaGVhZGVyID0gTlVMTDsKLQl1OCBlbWJlZGRlZDsKLQl1MzIgbjsKLQotCWVtYmVkZGVkID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX1dSQiwgZW1iZWRkZWQsIHdyYik7Ci0KLQlpZiAoZW1iZWRkZWQpIHsKLQkJbiA9IG9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfV1JCX0FNQVAsIHBheWxvYWQpLzg7Ci0JCWhlYWRlciA9IChzdHJ1Y3QgRldDTURfUkVRVUVTVF9IRUFERVIgKikoKHU4ICopd3JiICsgbik7Ci0JfSBlbHNlIHsKLQkJaGVhZGVyID0gKHN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiAqKSBvcHRpb25hbF9md2NtZF92YTsKLQl9Ci0KLQkvKiBTYXZlIHRoZSBjb21wbGV0ZWQgY291bnQgYmVmb3JlIHBvc3RpbmcgZm9yIGEgZGVidWcgYXNzZXJ0LiAqLwotCi0JaWYgKGhlYWRlcikgewotCQl3cmJfY29udGV4dC0+b3Bjb2RlID0gaGVhZGVyLT5vcGNvZGU7Ci0JCXdyYl9jb250ZXh0LT5zdWJzeXN0ZW0gPSBoZWFkZXItPnN1YnN5c3RlbTsKLQotCX0gZWxzZSB7Ci0JCXdyYl9jb250ZXh0LT5vcGNvZGUgPSAwOwotCQl3cmJfY29udGV4dC0+c3Vic3lzdGVtID0gMDsKLQl9Ci19Ci0jZWxzZQotI2RlZmluZSBiZV9mdW5jdGlvbl9kZWJ1Z19wcmludF93cmIoYV8sIGJfLCBjXywgZF8pCi0jZW5kaWYKLQotaW50Ci1iZV9mdW5jdGlvbl9wb3N0X21jY193cmIoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiLAotCQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKnFfY3R4dCwKLQkJbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQsCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGludGVybmFsX2NiLAotCQl2b2lkICppbnRlcm5hbF9jYl9jb250ZXh0LCB2b2lkICpvcHRpb25hbF9md2NtZF92YSwKLQkJc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSAqcmMpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICp3cmJfY29udGV4dCA9IE5VTEw7Ci0JdTY0ICpwOwotCi0JaWYgKHFfY3R4dCkgewotCQkvKiBJbml0aWFsaXplIGNvbnRleHQuICAgICAgICAgKi8KLQkJcV9jdHh0LT5jb250ZXh0LmludGVybmFsX2NiID0gaW50ZXJuYWxfY2I7Ci0JCXFfY3R4dC0+Y29udGV4dC5pbnRlcm5hbF9jYl9jb250ZXh0ID0gaW50ZXJuYWxfY2JfY29udGV4dDsKLQkJcV9jdHh0LT5jb250ZXh0LmNiID0gY2I7Ci0JCXFfY3R4dC0+Y29udGV4dC5jYl9jb250ZXh0ID0gY2JfY29udGV4dDsKLQkJaWYgKHJjKSB7Ci0JCQlxX2N0eHQtPmNvbnRleHQuY29weS5sZW5ndGggPSByYy0+bGVuZ3RoOwotCQkJcV9jdHh0LT5jb250ZXh0LmNvcHkuZndjbWRfb2Zmc2V0ID0gcmMtPmZ3Y21kX29mZnNldDsKLQkJCXFfY3R4dC0+Y29udGV4dC5jb3B5LnZhID0gcmMtPnZhOwotCQl9IGVsc2UKLQkJCXFfY3R4dC0+Y29udGV4dC5jb3B5Lmxlbmd0aCA9IDA7Ci0KLQkJcV9jdHh0LT5jb250ZXh0Lm9wdGlvbmFsX2Z3Y21kX3ZhID0gb3B0aW9uYWxfZndjbWRfdmE7Ci0KLQkJLyogUXVldWUgdGhpcyByZXF1ZXN0ICovCi0JCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3F1ZXVlX21jY193cmIocGZvYiwgcV9jdHh0KTsKLQotCQlnb3RvIEVycm9yOwotCX0KLQkvKgotCSAqIEFsbG9jYXRlIGEgV1JCIGNvbnRleHQgc3RydWN0IHRvIGhvbGQgdGhlIGNhbGxiYWNrIHBvaW50ZXJzLAotCSAqIHN0YXR1cywgZXRjLiAgVGhpcyBpcyByZXF1aXJlZCBpZiBjb21tYW5kcyBjb21wbGV0ZSBvdXQgb2Ygb3JkZXIuCi0JICovCi0Jd3JiX2NvbnRleHQgPSBfYmVfbWNjX2FsbG9jYXRlX3dyYl9jb250ZXh0KHBmb2IpOwotCWlmICghd3JiX2NvbnRleHQpIHsKLQkJVFJBQ0UoRExfV0FSTiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNQ0MgV1JCIGNvbnRleHQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19TWVNURU1fUkVTT1VSQ0VTOwotCQlnb3RvIEVycm9yOwotCX0KLQkvKiBJbml0aWFsaXplIGNvbnRleHQuICovCi0JbWVtc2V0KHdyYl9jb250ZXh0LCAwLCBzaXplb2YoKndyYl9jb250ZXh0KSk7Ci0Jd3JiX2NvbnRleHQtPmludGVybmFsX2NiID0gaW50ZXJuYWxfY2I7Ci0Jd3JiX2NvbnRleHQtPmludGVybmFsX2NiX2NvbnRleHQgPSBpbnRlcm5hbF9jYl9jb250ZXh0OwotCXdyYl9jb250ZXh0LT5jYiA9IGNiOwotCXdyYl9jb250ZXh0LT5jYl9jb250ZXh0ID0gY2JfY29udGV4dDsKLQlpZiAocmMpIHsKLQkJd3JiX2NvbnRleHQtPmNvcHkubGVuZ3RoID0gcmMtPmxlbmd0aDsKLQkJd3JiX2NvbnRleHQtPmNvcHkuZndjbWRfb2Zmc2V0ID0gcmMtPmZ3Y21kX29mZnNldDsKLQkJd3JiX2NvbnRleHQtPmNvcHkudmEgPSByYy0+dmE7Ci0JfSBlbHNlCi0JCXdyYl9jb250ZXh0LT5jb3B5Lmxlbmd0aCA9IDA7Ci0Jd3JiX2NvbnRleHQtPndyYiA9IHdyYjsKLQotCS8qCi0JICogQ29weSB0aGUgY29udGV4dCBwb2ludGVyIGludG8gdGhlIFdSQiBvcGFxdWUgdGFnIGZpZWxkLgotCSAqIFZlcmlmeSBhc3N1bXB0aW9uIG9mIDY0LWJpdCB0YWcgd2l0aCBhIGNvbXBpbGUgdGltZSBhc3NlcnQuCi0JICovCi0JcCA9ICh1NjQgKikgKCh1OCAqKXdyYiArIG9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfV1JCX0FNQVAsIHRhZykvOCk7Ci0JKnAgPSAodTY0KShzaXplX3Qpd3JiX2NvbnRleHQ7Ci0KLQkvKiBQcmludCBpbmZvIGFib3V0IHRoaXMgRldDTUQgZm9yIGRlYnVnIGJ1aWxkcy4gKi8KLQliZV9mdW5jdGlvbl9kZWJ1Z19wcmludF93cmIocGZvYiwgd3JiLCBvcHRpb25hbF9md2NtZF92YSwgd3JiX2NvbnRleHQpOwotCi0JLyoKLQkgKiBpc3N1ZSB0aGUgV1JCIHRvIHRoZSBNUFUgYXMgYXBwcm9wcmlhdGUKLQkgKi8KLQlpZiAocGZvYi0+bWNjKSB7Ci0JCS8qCi0JCSAqIHdlJ3JlIGluIFdSQiBtb2RlLCBwYXNzIHRvIHRoZSBtY2MgbGF5ZXIKLQkJICovCi0JCXN0YXR1cyA9IF9iZV9tcHVfcG9zdF93cmJfcmluZyhwZm9iLT5tY2MsIHdyYiwgd3JiX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIHdlJ3JlIGluIG1haWxib3ggbW9kZQotCQkgKi8KLQkJc3RhdHVzID0gX2JlX21wdV9wb3N0X3dyYl9tYWlsYm94KHBmb2IsIHdyYiwgd3JiX2NvbnRleHQpOwotCi0JCS8qIG1haWxib3ggbW9kZSBhbHdheXMgY29tcGxldGVzIHN5bmNocm9ub3VzbHkgKi8KLQkJQVNTRVJUKHN0YXR1cyAhPSBCRV9TVEFUVVNfUEVORElORyk7Ci0JfQotCi1FcnJvcjoKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLWludAotYmVfZnVuY3Rpb25fcmluZ19kZXN0cm95KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCXUzMiBpZCwgdTMyIHJpbmdfdHlwZSwgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCi0JCXZvaWQgKmNiX2NvbnRleHQsIG1jY193cmJfY3FlX2NhbGxiYWNrIGludGVybmFsX2NiLAotCQl2b2lkICppbnRlcm5hbF9jYl9jb250ZXh0KQotewotCi0Jc3RydWN0IEZXQ01EX0NPTU1PTl9SSU5HX0RFU1RST1kgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JVFJBQ0UoRExfSU5GTywgIkRlc3Ryb3kgcmluZyBpZDolZCB0eXBlOiVkIiwgaWQsIHJpbmdfdHlwZSk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJQVNTRVJUKHdyYik7Ci0JCVRSQUNFKERMX0VSUiwgIk5vIGZyZWUgTUNDIFdSQnMgaW4gZGVzdHJveSByaW5nLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9SSU5HX0RFU1RST1kpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmlkID0gaWQ7Ci0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnJpbmdfdHlwZSA9IHJpbmdfdHlwZTsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgY2IsIGNiX2NvbnRleHQsCi0JCQkJaW50ZXJuYWxfY2IsIGludGVybmFsX2NiX2NvbnRleHQsIGZ3Y21kLCBOVUxMKTsKLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MgJiYgc3RhdHVzICE9IEJFX1BFTkRJTkcpIHsKLQkJVFJBQ0UoRExfRVJSLCAiUmluZyBkZXN0cm95IGZ3Y21kIGZhaWxlZC4gaWQ6JWQgcmluZ190eXBlOiVkIiwKLQkJCWlkLCByaW5nX3R5cGUpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQKLWJlX3JkX3RvX3BhX2xpc3Qoc3RydWN0IHJpbmdfZGVzYyAqcmQsIHN0cnVjdCBQSFlTX0FERFIgKnBhX2xpc3QsIHUzMiBtYXhfbnVtKQotewotCXUzMiBudW1fcGFnZXMgPSBQQUdFU19TUEFOTkVEKHJkLT52YSwgcmQtPmxlbmd0aCk7Ci0JdTMyIGkgPSAwOwotCXU2NCBwYSA9IHJkLT5wYTsKLQlfX2xlNjQgbGVwYTsKLQotCUFTU0VSVChwYV9saXN0KTsKLQlBU1NFUlQocGEpOwotCi0JZm9yIChpID0gMDsgaSA8IG1pbihudW1fcGFnZXMsIG1heF9udW0pOyBpKyspIHsKLQkJbGVwYSA9IGNwdV90b19sZTY0KHBhKTsKLQkJcGFfbGlzdFtpXS5sbyA9ICh1MzIpbGVwYTsKLQkJcGFfbGlzdFtpXS5oaSA9IHVwcGVyXzMyX2JpdHMobGVwYSk7Ci0JCXBhICs9IFBBR0VfU0laRTsKLQl9Ci19Ci0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfZnVuY3Rpb25fZ2V0X2Z3X3ZlcnNpb24KLSAqICAgUmV0cmlldmVzIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIG9uIHRoZSBhZHBhdGVyLiBJZiB0aGUgY2FsbGJhY2sgaXMKLSAqICAgTlVMTCB0aGlzIGNhbGwgZXhlY3V0ZXMgc3luY2hyb25vdXNseS4gSWYgdGhlIGNhbGxiYWNrIGlzIG5vdCBOVUxMLAotICogICB0aGUgcmV0dXJuZWQgc3RhdHVzIHdpbGwgYmUgQkVfUEVORElORyBpZiB0aGUgY29tbWFuZCB3YXMgaXNzdWVkCi0gKiAgIHN1Y2Nlc3NmdWxseS4KLSAqIHBmb2IgICAgLQotICogZnd2ICAgICAgICAgLSBQb2ludGVyIHRvIHJlc3BvbnNlIGJ1ZmZlciBpZiBjYWxsYmFjayBpcyBOVUxMLgotICogY2IgICAgICAgICAgIC0gQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBGV0NNRCBjb21wbGV0ZXMuCi0gKiBjYl9jb250ZXh0ICAgLSBQYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgotICogcmV0dXJuIHBlbmRfc3RhdHVzIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4KLSAqIAkJCUJFX1BFTkRJTkcgKHBvc3RpdmUgdmFsdWUpIGlmIHRoZSBGV0NNRAotICogICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbiBpcyBwZW5kaW5nLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQKLWJlX2Z1bmN0aW9uX2dldF9md192ZXJzaW9uKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCXN0cnVjdCBGV0NNRF9DT01NT05fR0VUX0ZXX1ZFUlNJT05fUkVTUE9OU0VfUEFZTE9BRCAqZnd2LAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwgdm9pZCAqY2JfY29udGV4dCkKLXsKLQlpbnQgc3RhdHVzID0gQkVfU1VDQ0VTUzsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCXN0cnVjdCBGV0NNRF9DT01NT05fR0VUX0ZXX1ZFUlNJT04gKmZ3Y21kID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0Jc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSByYzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIEVycm9yOwotCX0KLQotCWlmICghY2IgJiYgIWZ3dikgewotCQlUUkFDRShETF9FUlIsICJjYWxsYmFjayBhbmQgcmVzcG9uc2UgYnVmZmVyIE5VTEwhIik7Ci0JCXN0YXR1cyA9IEJFX05PVF9PSzsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9HRVRfRldfVkVSU0lPTik7Ci0KLQlyYy5sZW5ndGggPSBGSUVMRF9TSVpFT0Yoc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTiwKLQkJCQkJcGFyYW1zLnJlc3BvbnNlKTsKLQlyYy5md2NtZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GV19WRVJTSU9OLAotCQkJCQlwYXJhbXMucmVzcG9uc2UpOwotCXJjLnZhID0gZnd2OwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBjYiwKLQkJCQljYl9jb250ZXh0LCBOVUxMLCBOVUxMLCBmd2NtZCwgJnJjKTsKLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLWludAotYmVfZnVuY3Rpb25fcXVldWVfbWNjX3dyYihzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJICBzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKnFfY3R4dCkKLXsKLQlpbnQgc3RhdHVzOwotCi0JQVNTRVJUKHFfY3R4dCk7Ci0KLQkvKgotCSAqIGlzc3VlIHRoZSBXUkIgdG8gdGhlIE1QVSBhcyBhcHByb3ByaWF0ZQotCSAqLwotCWlmIChwZm9iLT5tY2MpIHsKLQotCQkvKiBXZSdyZSBpbiByaW5nIG1vZGUuICBRdWV1ZSB0aGlzIGl0ZW0uICovCi0JCXBmb2ItPm1jYy0+YmFja2xvZ19sZW5ndGgrKzsKLQkJbGlzdF9hZGRfdGFpbCgmcV9jdHh0LT5jb250ZXh0Lmxpc3QsICZwZm9iLT5tY2MtPmJhY2tsb2cpOwotCQlzdGF0dXMgPSBCRV9QRU5ESU5HOwotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IEJFX05PVF9PSzsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDZlMGQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZndjbWRfY29tbW9uX2FtYXBfaF9fCi0jZGVmaW5lIF9fZndjbWRfY29tbW9uX2FtYXBfaF9fCi0jaW5jbHVkZSAiaG9zdF9zdHJ1Y3QuaCIKLQotLyogLS0tIFBIWV9MSU5LX0RVUExFWF9FTlVNIC0tLSAqLwotI2RlZmluZSBQSFlfTElOS19EVVBMRVhfTk9ORSAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfTElOS19EVVBMRVhfSEFMRiAgICAgICAgICAgICgxKQotI2RlZmluZSBQSFlfTElOS19EVVBMRVhfRlVMTCAgICAgICAgICAgICgyKQotCi0vKiAtLS0gUEhZX0xJTktfU1BFRURfRU5VTSAtLS0gKi8KLSNkZWZpbmUgUEhZX0xJTktfU1BFRURfWkVSTyAgICAgICAgICAgICAoMCkJLyogTm8gbGluay4gKi8KLSNkZWZpbmUgUEhZX0xJTktfU1BFRURfMTBNQlBTICAgICAgICAgICAoMSkJLyogMTAgTWJwcyAqLwotI2RlZmluZSBQSFlfTElOS19TUEVFRF8xMDBNQlBTICAgICAgICAgICgyKQkvKiAxMDAgTWJwcyAqLwotI2RlZmluZSBQSFlfTElOS19TUEVFRF8xR0JQUyAgICAgICAgICAgICgzKQkvKiAxIEdicHMgKi8KLSNkZWZpbmUgUEhZX0xJTktfU1BFRURfMTBHQlBTICAgICAgICAgICAoNCkJLyogMTAgR2JwcyAqLwotCi0vKiAtLS0gUEhZX0xJTktfRkFVTFRfRU5VTSAtLS0gKi8KLSNkZWZpbmUgUEhZX0xJTktfRkFVTFRfTk9ORSAgICAgICAgICAgICAoMCkJLyogTm8gZmF1bHQgc3RhdHVzCi0JCQkJCQkJYXZhaWxhYmxlIG9yIGRldGVjdGVkICovCi0jZGVmaW5lIFBIWV9MSU5LX0ZBVUxUX0xPQ0FMICAgICAgICAgICAgKDEpCS8qIExvY2FsIGZhdWx0IGRldGVjdGVkICovCi0jZGVmaW5lIFBIWV9MSU5LX0ZBVUxUX1JFTU9URSAgICAgICAgICAgKDIpCS8qIFJlbW90ZSBmYXVsdCBkZXRlY3RlZCAqLwotCi0vKiAtLS0gQkVfVUxQX01BU0sgLS0tICovCi0jZGVmaW5lIEJFX1VMUDBfTUFTSyAgICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIEJFX1VMUDFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDIpCi0jZGVmaW5lIEJFX1VMUDJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDQpCi0KLS8qIC0tLSBOVFdLX0FDVElWRV9QT1JUIC0tLSAqLwotI2RlZmluZSBOVFdLX1BPUlRfQSAgICAgICAgICAgICAgICAgICAgICgwKQkvKiBQb3J0IEEgaXMgY3VycmVudGx5IGFjdGl2ZSAqLwotI2RlZmluZSBOVFdLX1BPUlRfQiAgICAgICAgICAgICAgICAgICAgICgxKQkvKiBQb3J0IEIgaXMgY3VycmVudGx5IGFjdGl2ZSAqLwotI2RlZmluZSBOVFdLX05PX0FDVElWRV9QT1JUICAgICAgICAgICAgICgxNSkJLyogQm90aCBwb3J0cyBoYXZlIGxvc3QgbGluayAqLwotCi0vKiAtLS0gTlRXS19MSU5LX1RZUEUgLS0tICovCi0jZGVmaW5lIE5UV0tfTElOS19UWVBFX1BIWVNJQ0FMICAgICAgICAgKDApCS8qIGxpbmsgdXAvZG93biBldmVudAotCQkJCQkJICAgYXBwbGllcyB0byBCbGFkZUVuZ2luZSdzCi0JCQkJCQkgICBQaHlzaWNhbCBQb3J0cwotCQkJCQkJICAgKi8KLSNkZWZpbmUgTlRXS19MSU5LX1RZUEVfVklSVFVBTCAgICAgICAgICAoMSkJLyogVmlydHVhbCBsaW5rIHVwL2Rvd24gZXZlbnQKLQkJCQkJCSAgIHJlcG9ydGVkIGJ5IEJsYWRlRXhjaGFuZ2UuCi0JCQkJCQkgICBUaGlzIGFwcGxpZXMgb25seSB3aGVuIHRoZQotCQkJCQkJICAgVkxEIGZlYXR1cmUgaXMgZW5hYmxlZAotCQkJCQkJICAgKi8KLQotLyoKLSAqIC0tLSBGV0NNRF9NQUNfVFlQRV9FTlVNIC0tLQotICogVGhpcyBlbnVtIGRlZmluZXMgdGhlIHR5cGVzIG9mIE1BQyBhZGRyZXNzZXMgaW4gdGhlIFJYRiBNQUMgQWRkcmVzcyBUYWJsZS4KLSAqLwotI2RlZmluZSBNQUNfQUREUkVTU19UWVBFX1NUT1JBR0UgICAgICAgICgwKQkvKiBTdG9yYWdlIE1BQyBBZGRyZXNzICovCi0jZGVmaW5lIE1BQ19BRERSRVNTX1RZUEVfTkVUV09SSyAgICAgICAgKDEpCS8qIE5ldHdvcmsgTUFDIEFkZHJlc3MgKi8KLSNkZWZpbmUgTUFDX0FERFJFU1NfVFlQRV9QRCAgICAgICAgICAgICAoMikJLyogUHJvdGVjdGlvbiBEb21haW4gTUFDIEFkZHIgKi8KLSNkZWZpbmUgTUFDX0FERFJFU1NfVFlQRV9NQU5BR0VNRU5UICAgICAoMykJLyogTWFuYWdtZW50IE1BQyBBZGRyZXNzICovCi0KLQotLyogLS0tIEZXQ01EX1JJTkdfVFlQRV9FTlVNIC0tLSAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfRVRIX1JYICAgICAgICAgICgxKQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05fRVRIX1JYX0NSRUFURS4gKi8KLSNkZWZpbmUgRldDTURfUklOR19UWVBFX0VUSF9UWCAgICAgICAgICAoMikJLyogUmluZyBjcmVhdGVkIHdpdGggKi8KLQkJCQkJLyogRldDTURfQ09NTU9OX0VUSF9UWF9DUkVBVEUuICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9JU0NTSV9XUkJRICAgICAgKDMpCS8qIFJpbmcgY3JlYXRlZCB3aXRoICovCi0JCQkJCS8qIEZXQ01EX0NPTU1PTl9JU0NTSV9XUkJRX0NSRUFURS4gKi8KLSNkZWZpbmUgRldDTURfUklOR19UWVBFX0lTQ1NJX0RFRlEgICAgICAoNCkJLyogUmluZyBjcmVhdGVkIHdpdGggKi8KLQkJCQkJLyogRldDTURfQ09NTU9OX0lTQ1NJX0RFRlFfQ1JFQVRFLiAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfVFBNX1dSQlEgICAgICAgICg1KQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05fVFBNX1dSQlFfQ1JFQVRFLiAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfVFBNX0RFRlEgICAgICAgICg2KQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05UUE1fVERFRlFfQ1JFQVRFLiAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfVFBNX1JRICAgICAgICAgICg3KQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05fVFBNX1JRX0NSRUFURS4gKi8KLSNkZWZpbmUgRldDTURfUklOR19UWVBFX01DQyAgICAgICAgICAgICAoOCkJLyogUmluZyBjcmVhdGVkIHdpdGggKi8KLQkJCQkJLyogRldDTURfQ09NTU9OX01DQ19DUkVBVEUuICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9DUSAgICAgICAgICAgICAgKDkpCS8qIFJpbmcgY3JlYXRlZCB3aXRoICovCi0JCQkJCS8qIEZXQ01EX0NPTU1PTl9DUV9DUkVBVEUuICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9FUSAgICAgICAgICAgICAgKDEwKQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05fRVFfQ1JFQVRFLiAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfUVAgICAgICAgICAgICAgICgxMSkJLyogUmluZyBjcmVhdGVkIHdpdGggKi8KLQkJCQkJLyogRldDTURfUkRNQV9RUF9DUkVBVEUuICovCi0KLQotLyogLS0tIEVUSF9UWF9SSU5HX1RZUEVfRU5VTSAtLS0gKi8KLSNkZWZpbmUgRVRIX1RYX1JJTkdfVFlQRV9GT1JXQVJESU5HICAgICAoMSkJLyogRXRoZXJuZXQgcmluZyBmb3IKLQkJCQkJCSAgIGZvcndhcmRpbmcgcGFja2V0cyAqLwotI2RlZmluZSBFVEhfVFhfUklOR19UWVBFX1NUQU5EQVJEICAgICAgICgyKQkvKiBFdGhlcm5ldCByaW5nIGZvciBzZW5kaW5nCi0JCQkJCQkgICBuZXR3b3JrIHBhY2tldHMuICovCi0jZGVmaW5lIEVUSF9UWF9SSU5HX1RZUEVfQk9VTkQgICAgICAgICAgKDMpCS8qIEV0aGVybmV0IHJpbmcgYm91bmQgdG8gdGhlCi0JCQkJCQkgICBwb3J0IHNwZWNpZmllZCBpbiB0aGUgY29tbWFuZAotCQkJCQkJICAgaGVhZGVyLnBvcnRfbnVtYmVyIGZpZWxkLgotCQkJCQkJICAgUmluZ3Mgb2YgdGhpcyB0eXBlIGFyZQotCQkJCQkJICAgTk9UIHN1YmplY3QgdG8gdGhlCi0JCQkJCQkgICBmYWlsb3ZlciBsb2dpYyBpbXBsZW1lbnRlZAotCQkJCQkJICAgaW4gdGhlIEJsYWRlRW5naW5lLgotCQkJCQkJICAgKi8KLQotLyogLS0tIEZXQ01EX0NPTU1PTl9RT1NfVFlQRV9FTlVNIC0tLSAqLwotI2RlZmluZSBRT1NfQklUU19OSUMgICAgICAgICAgICAgICAgICAgICgxKQkvKiBtYXhfYml0c19wZXJfc2Vjb25kX05JQyAqLwotCQkJCQkJICAvKiBmaWVsZCBpcyB2YWxpZC4gICovCi0jZGVmaW5lIFFPU19QS1RTX05JQyAgICAgICAgICAgICAgICAgICAgKDIpCS8qIG1heF9wYWNrZXRzX3Blcl9zZWNvbmRfTklDICovCi0JCQkJCQkgIC8qIGZpZWxkIGlzIHZhbGlkLiAgKi8KLSNkZWZpbmUgUU9TX0lPUFNfSVNDU0kgICAgICAgICAgICAgICAgICAoNCkJLyogbWF4X2lvc19wZXJfc2Vjb25kX2lTQ1NJICovCi0JCQkJCQkgIC8qZmllbGQgaXMgdmFsaWQuICAqLwotI2RlZmluZSBRT1NfVkxBTl9UQUcgICAgICAgICAgICAgICAgICAgICg4KQkvKiBkb21haW5fVkxBTl90YWcgZmllbGQKLQkJCQkJCSAgIGlzIHZhbGlkLiAqLwotI2RlZmluZSBRT1NfRkFCUklDX0lEICAgICAgICAgICAgICAgICAgICgxNikJLyogZmFicmljX2RvbWFpbl9JRCBmaWVsZAotCQkJCQkJICAgaXMgdmFsaWQuICovCi0jZGVmaW5lIFFPU19PRU1fUEFSQU1TICAgICAgICAgICAgICAgICAgKDMyKQkvKiBxb3NfcGFyYW1zX29lbSBmaWVsZAotCQkJCQkJICAgaXMgdmFsaWQuICovCi0jZGVmaW5lIFFPU19UUFVUX0lTQ1NJICAgICAgICAgICAgICAgICAgKDY0KQkvKiBtYXhfYnl0ZXNfcGVyX3NlY29uZF9pU0NTSQotCQkJCQkJICAgZmllbGQgIGlzIHZhbGlkLiAgKi8KLQotCi0vKgotICogLS0tIEZBSUxPVkVSX0NPTkZJR19FTlVNIC0tLQotICogRmFpbG92ZXIgY29uZmlndXJhdGlvbiBzZXR0aW5nIHVzZWQgaW4gRldDTURfQ09NTU9OX0ZPUkNFX0ZBSUxPVkVSCi0gKi8KLSNkZWZpbmUgRkFJTE9WRVJfQ09ORklHX05PX0NIQU5HRSAgICAgICAoMCkJLyogTm8gY2hhbmdlIHRvIGF1dG9tYXRpYyAqLwotCQkJCQkJICAvKiBwb3J0IGZhaWxvdmVyIHNldHRpbmcuICovCi0jZGVmaW5lIEZBSUxPVkVSX0NPTkZJR19PTiAgICAgICAgICAgICAgKDEpCS8qIEF1dG9tYXRpYyBwb3J0IGZhaWxvdmVyCi0JCQkJCQkgICBvbiBsaW5rIGRvd24gIGlzIGVuYWJsZWQuICovCi0jZGVmaW5lIEZBSUxPVkVSX0NPTkZJR19PRkYgICAgICAgICAgICAgKDIpCS8qIEF1dG9tYXRpYyBwb3J0IGZhaWxvdmVyCi0JCQkJCQkgICBvbiBsaW5rIGRvd24gaXMgZGlzYWJsZWQuICovCi0KLS8qCi0gKiAtLS0gRkFJTE9WRVJfUE9SVF9FTlVNIC0tLQotICogRmFpbG92ZXIgcG9ydCBzZXR0aW5nIHVzZWQgaW4gRldDTURfQ09NTU9OX0ZPUkNFX0ZBSUxPVkVSCi0gKi8KLSNkZWZpbmUgRkFJTE9WRVJfUE9SVF9BICAgICAgICAgICAgICAgICAoMCkJLyogU2VsZWN0cyBwb3J0IEEuICovCi0jZGVmaW5lIEZBSUxPVkVSX1BPUlRfQiAgICAgICAgICAgICAgICAgKDEpCS8qIFNlbGVjdHMgcG9ydCBCLiAqLwotI2RlZmluZSBGQUlMT1ZFUl9QT1JUX05PTkUgICAgICAgICAgICAgICgxNSkJLyogTm8gcG9ydCBjaGFuZ2UgcmVxdWVzdGVkLiAqLwotCi0KLS8qCi0gKiAtLS0gTUdNVF9GTEFTSFJPTV9PUENPREUgLS0tCi0gKiBGbGFzaCBST00gb3BlcmF0aW9uIGNvZGUKLSAqLwotI2RlZmluZSBNR01UX0ZMQVNIUk9NX09QQ09ERV9GTEFTSCAgICAgICgxKQkvKiBDb21taXQgZG93bmxvYWRlZCBkYXRhCi0JCQkJCQkgICB0byBGbGFzaCBST00gKi8KLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUENPREVfU0FWRSAgICAgICAoMikJLyogU2F2ZSBkb3dubG9hZGVkIGRhdGEgdG8KLQkJCQkJCSAgIEFSTSdzIEREUiAtIGRvIG5vdCBmbGFzaCAqLwotI2RlZmluZSBNR01UX0ZMQVNIUk9NX09QQ09ERV9DTEVBUiAgICAgICgzKQkvKiBFcmFzZSBzcGVjaWZpZWQgY29tcG9uZW50Ci0JCQkJCQkgICBmcm9tIEZsYXNoUk9NICovCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BDT0RFX1JFUE9SVCAgICAgKDQpCS8qIFJlYWQgc3BlY2lmaWVkIGNvbXBvbmVudAotCQkJCQkJICAgZnJvbSBGbGFzaCBST00gKi8KLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUENPREVfSU1BR0VfSU5GTyAoNSkJLyogUmV0dXJucyBzaXplIG9mIGEKLQkJCQkJCSAgIGNvbXBvbmVudCAqLwotCi0vKgotICogLS0tIE1HTVRfRkxBU0hST01fT1BUWVBFIC0tLQotICogRmxhc2ggUk9NIG9wZXJhdGlvbiB0eXBlCi0gKi8KLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUFRZUEVfQ09ERV9GSVJNV0FSRSAoMCkJLyogSW5jbHVkZXMgQVJNIGZpcm13YXJlLAotCQkJCQkJICAgSVBTZWMgKG9wdGlvbmFsKSBhbmQgRVAKLQkJCQkJCSAgIGZpcm13YXJlICAqLwotI2RlZmluZSBNR01UX0ZMQVNIUk9NX09QVFlQRV9DT0RFX1JFREJPT1QgKDEpCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BUWVBFX0NPREVfQklPUyAgKDIpCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BUWVBFX0NPREVfUFhFX0JJT1MgKDMpCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BUWVBFX0NPREVfQ1RSTFMgKDQpCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BUWVBFX0NGR19JUFNFQyAgKDUpCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BUWVBFX0NGR19JTkkgICAgKDYpCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BUWVBFX1JPTV9PRkZTRVRfU1BFQ0lGSUVEICg3KQotCi0vKgotICogLS0tIEZMQVNIUk9NX1RZUEUgLS0tCi0gKiBGbGFzaCBST00gbWFudWZhY3R1cmVycyBzdXBwb3J0ZWQgaW4gdGhlIGYvdwotICovCi0jZGVmaW5lIElOVEVMICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFNQQU5TSU9OICAgICAgICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIE1JQ1JPTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpCi0KLS8qIC0tLSBERFJfQ0FTX1RZUEUgLS0tICovCi0jZGVmaW5lIENBU18zICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIENBU180ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIENBU181ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpCi0KLS8qIC0tLSBERFJfU0laRV9UWVBFIC0tLSAqLwotI2RlZmluZSBTSVpFXzI1Nk1CICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBTSVpFXzUxMk1CICAgICAgICAgICAgICAgICAgICAgICgxKQotCi0vKiAtLS0gRERSX01PREVfVFlQRSAtLS0gKi8KLSNkZWZpbmUgRERSX05PX0VDQyAgICAgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgRERSX0VDQyAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKLQotLyogLS0tIElOVEVSRkFDRV8xMEdCX1RZUEUgLS0tICovCi0jZGVmaW5lIENYNF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFhGUF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgKDEpCi0KLS8qIC0tLSBCRV9DSElQX01BWF9NVFUgLS0tICovCi0jZGVmaW5lIENISVBfTUFYX01UVSAgICAgICAgICAgICAgICAgICAgKDkwMDApCi0KLS8qIC0tLSBYQVVJX1NUQVRFX0VOVU0gLS0tICovCi0jZGVmaW5lIFhBVUlfU1RBVEVfRU5BQkxFICAgICAgICAgICAgICAgKDApCS8qIFRoaXMgTVVTVCBiZSB0aGUgZGVmYXVsdAotCQkJCQkJICAgdmFsdWUgZm9yIGFsbCByZXF1ZXN0cwotCQkJCQkJICAgd2hpY2ggc2V0L2NoYW5nZQotCQkJCQkJICAgZXF1YWxpemF0aW9uIHBhcmFtZXRlci4gICovCi0jZGVmaW5lIFhBVUlfU1RBVEVfRElTQUJMRSAgICAgICAgICAgICAgKDI1NSkJLyogVGhlIFhBVUkgZm9yIGJvdGggcG9ydHMKLQkJCQkJCSAgIG1heSBiZSBkaXNhYmxlZCBmb3IgRU1JCi0JCQkJCQkgICB0ZXN0cy4gVGhlcmUgaXMgbm8KLQkJCQkJCSAgIHByb3Zpc2lvbiBmb3IgdHVybmluZyBvZmYKLQkJCQkJCSAgIGluZGl2aWR1YWwgcG9ydHMuCi0JCQkJCQkgICAqLwotLyogLS0tIEJFX0FTSUNfUkVWSVNJT04gLS0tICovCi0jZGVmaW5lIEJFX0FTSUNfUkVWX0EwICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIEJFX0FTSUNfUkVWX0ExICAgICAgICAgICAgICAgICAgKDIpCi0KLSNlbmRpZiAvKiBfX2Z3Y21kX2NvbW1vbl9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2NvbW1vbl9ibWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfY29tbW9uX2JtYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAwN2NmMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfY29tbW9uX2JtYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZndjbWRfY29tbW9uX2JtYXBfaF9fCi0jZGVmaW5lIF9fZndjbWRfY29tbW9uX2JtYXBfaF9fCi0jaW5jbHVkZSAiZndjbWRfdHlwZXNfYm1hcC5oIgotI2luY2x1ZGUgImZ3Y21kX2hkcl9ibWFwLmgiCi0KLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLSAgIC8qIFBoeXNpY2FsIEFkZHJlc3MuICovCi1zdHJ1Y3QgUEhZU19BRERSIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1MzIgbG87CS8qIERXT1JEIDAgKi8KLQkJCXUzMiBoaTsJLyogRFdPUkQgMSAqLwotCQl9IF9fcGFja2VkOwkvKiB1bm5hbWVkIHN0cnVjdCAqLwotCQl1MzIgZHdbMl07CS8qIGR3b3JkIHVuaW9uICovCi0JfTsJCQkvKiB1bm5hbWVkIHVuaW9uICovCi19IF9fcGFja2VkIDsKLQotCi0jZWxzZQotICAgLyogUGh5c2ljYWwgQWRkcmVzcy4gKi8KLXN0cnVjdCBQSFlTX0FERFIgewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXUzMiBsbzsJLyogRFdPUkQgMCAqLwotCQkJdTMyIGhpOwkvKiBEV09SRCAxICovCi0JCX0gX19wYWNrZWQ7CS8qIHVubmFtZWQgc3RydWN0ICovCi0JCXUzMiBkd1syXTsJLyogZHdvcmQgdW5pb24gKi8KLQl9OwkJCS8qIHVubmFtZWQgdW5pb24gKi8KLX0gX19wYWNrZWQgOwotCi1zdHJ1Y3QgQkVfTElOS19TVEFUVVMgewotCXU4IG1hYzBfZHVwbGV4OwotCXU4IG1hYzBfc3BlZWQ7Ci0JdTggbWFjMV9kdXBsZXg7Ci0JdTggbWFjMV9zcGVlZDsKLQl1OCBtZ210X21hY19kdXBsZXg7Ci0JdTggbWdtdF9tYWNfc3BlZWQ7Ci0JdTggYWN0aXZlX3BvcnQ7Ci0JdTggcnN2ZDA7Ci0JdTggbWFjMF9mYXVsdDsKLQl1OCBtYWMxX2ZhdWx0OwotCXUxNiByc3ZkMTsKLX0gX19wYWNrZWQ7Ci0jZW5kaWYKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE3MF9SRVFVRVNUIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi11bmlvbiBMSU5LX1NUQVRVU19RVUVSWV9QQVJBTVMgewotCXN0cnVjdCBCRV9MSU5LX1NUQVRVUyByZXNwb25zZTsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTcwX1JFUVVFU1QgcmVxdWVzdDsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgUXVlcmllcyB0aGUgdGhlIGxpbmsgc3RhdHVzIGZvciBhbGwgcG9ydHMuICBUaGUgdmFsaWQgdmFsdWVzIGJlbG93Ci0gKiAgRE8gTk9UIGluZGljYXRlIHRoYXQgIGEgcGFydGljdWxhciBkdXBsZXggb3Igc3BlZWQgaXMgc3VwcG9ydGVkIGJ5Ci0gKiAgQmxhZGVFbmdpbmUuIFRoZXNlIGVudW1lcmF0aW9ucyBzaW1wbHkgIGxpc3QgYWxsIHBvc3NpYmxlIGR1cGxleGVzCi0gKiAgYW5kIHNwZWVkcyBmb3IgYW55IHBvcnQuIENvbnN1bHQgQmxhZGVFbmdpbmUgcHJvZHVjdCAgZG9jdW1lbnRhdGlvbgotICogIGZvciB0aGUgc3VwcG9ydGVkIHBhcmFtZXRlcnMuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWSB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBMSU5LX1NUQVRVU19RVUVSWV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE3MV9SRVFVRVNUIHsKLQl1OCB0eXBlOwotCXU4IHBvcnQ7Ci0JdTggbWFjMTsKLQl1OCBwZXJtYW5lbnQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTcyX1JFU1BPTlNFIHsKLQlzdHJ1Y3QgTUFDX0FERFJFU1NfRk9STUFUIG1hYzsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIE5UV0tfTUFDX1FVRVJZX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE3MV9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE3Ml9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qIFF1ZXJpZXMgb25lIE1BQyBhZGRyZXNzLiAgKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NQUNfUVVFUlkgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gTlRXS19NQUNfUVVFUllfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBNQUNfU0VUX1BBUkFNU19JTiB7Ci0JdTggdHlwZTsKLQl1OCBwb3J0OwotCXU4IG1hYzE7Ci0JdTggaW52YWxpZGF0ZTsKLQlzdHJ1Y3QgTUFDX0FERFJFU1NfRk9STUFUIG1hYzsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBNQUNfU0VUX1BBUkFNU19PVVQgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIE1BQ19TRVRfUEFSQU1TIHsKLQlzdHJ1Y3QgTUFDX1NFVF9QQVJBTVNfSU4gcmVxdWVzdDsKLQlzdHJ1Y3QgTUFDX1NFVF9QQVJBTVNfT1VUIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogU2V0cyBhIE1BQyBhZGRyZXNzLiAgKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NQUNfU0VUIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIE1BQ19TRVRfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLS8qIE1BQyBhZGRyZXNzIGxpc3QuICovCi1zdHJ1Y3QgTlRXS19NVUxUSUNBU1RfTUFDX0xJU1QgewotCXU4IGJ5dGVbNl07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVF9SRVFVRVNUX1BBWUxPQUQgewotCXUxNiBudW1fbWFjOwotCXU4IHByb21pc2N1b3VzOwotCXU4IHJzdmQwOwotCXN0cnVjdCBOVFdLX01VTFRJQ0FTVF9NQUNfTElTVCBtYWNbMzJdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE3NF9SRVNQT05TRSB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTczX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX01VTFRJQ0FTVF9TRVRfUkVRVUVTVF9QQVlMT0FEIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE3NF9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgU2V0cyBtdWx0aWNhc3QgYWRkcmVzcyBoYXNoLiBUaGUgTVBVIHdpbGwgbWVyZ2UgdGhlIE1BQyBhZGRyZXNzIGxpc3RzCi0gKiAgZnJvbSBhbGwgY2xpZW50cywgIGluY2x1ZGluZyB0aGUgbmV0d29ya2luZyBhbmQgc3RvcmFnZSBmdW5jdGlvbnMuCi0gKiAgVGhpcyBjb21tYW5kIG1heSBmYWlsIGlmIHRoZSBmaW5hbCBtZXJnZWQgIGxpc3Qgb2YgTUFDIGFkZHJlc3NlcyBleGNlZWRzCi0gKiAgMzIgZW50cmllcy4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX01VTFRJQ0FTVF9TRVQgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTczX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfVkxBTl9DT05GSUdfUkVRVUVTVF9QQVlMT0FEIHsKLQl1MTYgbnVtX3ZsYW47Ci0JdTggcHJvbWlzY3VvdXM7Ci0JdTggcnN2ZDA7Ci0JdTE2IHZsYW5fdGFnWzMyXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xNzZfUkVTUE9OU0UgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzE3NV9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19WTEFOX0NPTkZJR19SRVFVRVNUX1BBWUxPQUQgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTc2X1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBTZXRzIFZMQU4gdGFnIGZpbHRlci4gVGhlIE1QVSB3aWxsIG1lcmdlIHRoZSBWTEFOIHRhZyBsaXN0IGZyb20gYWxsCi0gKiAgY2xpZW50cywgaW5jbHVkaW5nICB0aGUgbmV0d29ya2luZyBhbmQgc3RvcmFnZSBmdW5jdGlvbnMuIFRoaXMgY29tbWFuZAotICogIG1heSBmYWlsIGlmIHRoZSBmaW5hbCB2bGFuX3RhZyBhcnJheSAgKGZyb20gYWxsIGZ1bmN0aW9ucykgaXMgbG9uZ2VyCi0gKiAgdGhhbiAzMiBlbnRyaWVzLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfVkxBTl9DT05GSUcgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTc1X1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgUklOR19ERVNUUk9ZX1JFUVVFU1QgewotCXUxNiByaW5nX3R5cGU7Ci0JdTE2IGlkOwotCXU4IGJ5cGFzc19mbHVzaDsKLQl1OCByc3ZkMDsKLQl1MTYgcnN2ZDE7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTkwX1JFU1BPTlNFIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8xODlfUEFSQU1TIHsKLQlzdHJ1Y3QgUklOR19ERVNUUk9ZX1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTkwX1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLS8qCi0gKiAgQ29tbWFuZCBmb3IgZGVzdHJveWluZyBhbnkgcmluZy4gVGhlIGNvbm5lY3Rpb24ocykgdXNpbmcgdGhlIHJpbmcgc2hvdWxkCi0gKiAgYmUgcXVpZXNjZWQgIGJlZm9yZSBkZXN0cm95aW5nIHRoZSByaW5nLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX1JJTkdfREVTVFJPWSB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8xODlfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOTJfUkVRVUVTVCB7Ci0JdTE2IG51bV9wYWdlczsKLQl1MTYgcnN2ZDA7Ci0Jc3RydWN0IENRX0NPTlRFWFRfQU1BUCBjb250ZXh0OwotCXN0cnVjdCBQSFlTX0FERFIgcGFnZXNbNF07Ci19IF9fcGFja2VkIDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5M19SRVNQT05TRSB7Ci0JdTE2IGNxX2lkOwotfSBfX3BhY2tlZCA7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzE5MV9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOTJfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOTNfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkIDsKLQotLyoKLSAqICBDb21tYW5kIGZvciBjcmVhdGluZyBhIGNvbXBsZXRpb24gcXVldWUuIEEgQ29tcGxldGlvbiBRdWV1ZSBtdXN0IHNwYW4KLSAqICBhdCBsZWFzdCAxIHBhZ2UgYW5kICBhdCBtb3N0IDQgcGFnZXMuIEVhY2ggY29tcGxldGlvbiBxdWV1ZSBlbnRyeQotICogIGlzIDE2IGJ5dGVzIHJlZ2FyZGxlc3Mgb2YgQ1EgZW50cnkgZm9ybWF0LiAgVGh1cyB0aGUgcmluZyBtdXN0IGJlCi0gKiAgYXQgbGVhc3QgMjU2IGVudHJpZXMgZGVlcCAoY29ycmVzcG9uZGluZyB0byAxIHBhZ2UpIGFuZCBjYW4gYmUgYXQKLSAqICAgbW9zdCAxMDI0IGVudHJpZXMgZGVlcCAoY29ycmVzcG9uZGluZyB0byA0IHBhZ2VzKS4gVGhlIG51bWJlciBvZgotICogIHBhZ2VzIHBvc3RlZCBtdXN0ICBjb250YWluIHRoZSBDUSByaW5nIHNpemUgYXMgZW5jb2RlZCBpbiB0aGUgY29udGV4dC4KLSAqCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fQ1FfQ1JFQVRFIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzE5MV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZCA7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOThfUkVRVUVTVCB7Ci0JdTE2IG51bV9wYWdlczsKLQl1MTYgcnN2ZDA7Ci0Jc3RydWN0IEVRX0NPTlRFWFRfQU1BUCBjb250ZXh0OwotCXN0cnVjdCBQSFlTX0FERFIgcGFnZXNbOF07Ci19IF9fcGFja2VkIDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5OV9SRVNQT05TRSB7Ci0JdTE2IGVxX2lkOwotfSBfX3BhY2tlZCA7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzE5N19QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOThfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOTlfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkIDsKLQotLyoKLSAqICBDb21tYW5kIGZvciBjcmVhdGluZyBhIGV2ZW50IHF1ZXVlLiBBbiBFdmVudCBRdWV1ZSBtdXN0IHNwYW4gYXQgbGVhc3QKLSAqICAxIHBhZ2UgYW5kIGF0IG1vc3QgIDggcGFnZXMuIFRoZSBudW1iZXIgb2YgcGFnZXMgcG9zdGVkIG11c3QgY29udGFpbgotICogIHRoZSBFUSByaW5nLiBUaGUgcmluZyBpcyBkZWZpbmVkIGJ5ICB0aGUgc2l6ZSBvZiB0aGUgRVEgZW50cmllcyAoZW5jb2RlZAotICogIGluIHRoZSBjb250ZXh0KSBhbmQgdGhlIG51bWJlciBvZiBFUSBlbnRyaWVzIChhbHNvICBlbmNvZGVkIGluIHRoZQotICogIGNvbnRleHQpLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0VRX0NSRUFURSB7Ci0JdW5pb24gIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTk3X1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkIDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwMV9SRVFVRVNUIHsKLQl1MTYgY3FfaWQ7Ci0JdTE2IGJjbWNfY3FfaWQ7Ci0JdTE2IG51bV9wYWdlczsKLQl1MTYgcnN2ZDA7Ci0Jc3RydWN0IFBIWVNfQUREUiBwYWdlc1syXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMDJfUkVTUE9OU0UgewotCXUxNiBpZDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIwMF9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMDFfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMDJfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIENvbW1hbmQgZm9yIGNyZWF0aW5nIEV0aGVybmV0IHJlY2VpdmUgcmluZy4gIEFuIEVSWCByaW5nIGNvbnRhaW5zIEVUSF9SWF9ECi0gKiAgZW50cmllcyAoOCAgYnl0ZXMgZWFjaCkuIEFuIEVSWCByaW5nIG11c3QgYmUgMTAyNCBlbnRyaWVzIGRlZXAKLSAqICAoY29ycmVzcG9uZGluZyB0byAyIHBhZ2VzKS4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9FVEhfUlhfQ1JFQVRFIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIwMF9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwNF9SRVFVRVNUIHsKLQl1MTYgbnVtX3BhZ2VzOwotCXU4IHVscF9udW07Ci0JdTggdHlwZTsKLQlzdHJ1Y3QgRVRYX0NPTlRFWFRfQU1BUCBjb250ZXh0OwotCXN0cnVjdCBQSFlTX0FERFIgcGFnZXNbOF07Ci19IF9fcGFja2VkIDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwNV9SRVNQT05TRSB7Ci0JdTE2IGNpZDsKLQl1OCB1bHBfbnVtOwotCXU4IHJzdmQwOwotfSBfX3BhY2tlZCA7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIwM19QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMDRfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMDVfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkIDsKLQotLyoKLSAqICBDb21tYW5kIGZvciBjcmVhdGluZyBhbiBFdGhlcm5ldCB0cmFuc21pdCByaW5nLiAgQW4gRVRYIHJpbmcgY29udGFpbnMKLSAqICBFVEhfV1JCIGVudHJpZXMgKDE2ICBieXRlcyBlYWNoKS4gQW4gRVRYIHJpbmcgbXVzdCBiZSBhdCBsZWFzdCAyNTYKLSAqICBlbnRyaWVzIGRlZXAgKGNvcnJlc3BvbmRpbmcgdG8gMSBwYWdlKSAgYW5kIGF0IG1vc3QgMmsgZW50cmllcyBkZWVwCi0gKiAgKGNvcnJlc3BvbmRpbmcgdG8gOCBwYWdlcykuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fRVRIX1RYX0NSRUFURSB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yMDNfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQgOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjIyX1JFUVVFU1QgewotCXUxNiBudW1fcGFnZXM7Ci0JdTE2IHJzdmQwOwotCXN0cnVjdCBNQ0NfUklOR19DT05URVhUX0FNQVAgY29udGV4dDsKLQlzdHJ1Y3QgUEhZU19BRERSIHBhZ2VzWzhdOwotfSBfX3BhY2tlZCA7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMjNfUkVTUE9OU0UgewotCXUxNiBpZDsKLX0gX19wYWNrZWQgOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yMjFfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjIyX1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjIzX1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZCA7Ci0KLS8qCi0gKiAgQ29tbWFuZCBmb3IgY3JlYXRpbmcgdGhlIE1DQyByaW5nLiBBbiBNQ0MgcmluZyBtdXN0IGJlIGF0IGxlYXN0IDE2Ci0gKiAgZW50cmllcyBkZWVwICAoY29ycmVzcG9uZGluZyB0byAxIHBhZ2UpIGFuZCBhdCBtb3N0IDEyOCBlbnRyaWVzIGRlZXAKLSAqICAoY29ycmVzcG9uZGluZyB0byA4IHBhZ2VzKS4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9NQ0NfQ1JFQVRFIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIyMV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZCA7Ci0KLXN0cnVjdCBHRVRfUU9TX0lOIHsKLQl1MzIgcW9zX3BhcmFtc19yc3ZkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEdFVF9RT1NfT1VUIHsKLQl1MzIgbWF4X2JpdHNfcGVyX3NlY29uZF9OSUM7Ci0JdTMyIG1heF9wYWNrZXRzX3Blcl9zZWNvbmRfTklDOwotCXUzMiBtYXhfaW9zX3Blcl9zZWNvbmRfaVNDU0k7Ci0JdTMyIG1heF9ieXRlc19wZXJfc2Vjb25kX2lTQ1NJOwotCXUxNiBkb21haW5fVkxBTl90YWc7Ci0JdTE2IGZhYnJpY19kb21haW5fSUQ7Ci0JdTMyIHFvc19wYXJhbXNfb2VtWzRdOwotfSBfX3BhY2tlZDsKLQotdW5pb24gR0VUX1FPU19QQVJBTVMgewotCXN0cnVjdCBHRVRfUU9TX0lOIHJlcXVlc3Q7Ci0Jc3RydWN0IEdFVF9RT1NfT1VUIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogUU9TL0JhbmR3aWR0aCBzZXR0aW5ncyBwZXIgZG9tYWluLiBBcHBsaWNhYmxlIG9ubHkgaW4gVk1zLiAgKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fR0VUX1FPUyB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBHRVRfUU9TX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgU0VUX1FPU19JTiB7Ci0JdTMyIHZhbGlkX2ZsYWdzOwotCXUzMiBtYXhfYml0c19wZXJfc2Vjb25kX05JQzsKLQl1MzIgbWF4X3BhY2tldHNfcGVyX3NlY29uZF9OSUM7Ci0JdTMyIG1heF9pb3NfcGVyX3NlY29uZF9pU0NTSTsKLQl1MzIgbWF4X2J5dGVzX3Blcl9zZWNvbmRfaVNDU0k7Ci0JdTE2IGRvbWFpbl9WTEFOX3RhZzsKLQl1MTYgZmFicmljX2RvbWFpbl9JRDsKLQl1MzIgcW9zX3BhcmFtc19vZW1bNF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgU0VUX1FPU19PVVQgewotCXUzMiBxb3NfcGFyYW1zX3JzdmQ7Ci19IF9fcGFja2VkOwotCi11bmlvbiBTRVRfUU9TX1BBUkFNUyB7Ci0Jc3RydWN0IFNFVF9RT1NfSU4gcmVxdWVzdDsKLQlzdHJ1Y3QgU0VUX1FPU19PVVQgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKiBRT1MvQmFuZHdpZHRoIHNldHRpbmdzIHBlciBkb21haW4uIEFwcGxpY2FibGUgb25seSBpbiBWTXMuICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9TRVRfUU9TIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIFNFVF9RT1NfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBTRVRfRlJBTUVfU0laRV9JTiB7Ci0JdTMyIG1heF90eF9mcmFtZV9zaXplOwotCXUzMiBtYXhfcnhfZnJhbWVfc2l6ZTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBTRVRfRlJBTUVfU0laRV9PVVQgewotCXUzMiBjaGlwX21heF90eF9mcmFtZV9zaXplOwotCXUzMiBjaGlwX21heF9yeF9mcmFtZV9zaXplOwotfSBfX3BhY2tlZDsKLQotdW5pb24gU0VUX0ZSQU1FX1NJWkVfUEFSQU1TIHsKLQlzdHJ1Y3QgU0VUX0ZSQU1FX1NJWkVfSU4gcmVxdWVzdDsKLQlzdHJ1Y3QgU0VUX0ZSQU1FX1NJWkVfT1VUIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogU2V0IGZyYW1lIHNpemUgY29tbWFuZC4gT25seSBob3N0IGRvbWFpbiBtYXkgaXNzdWUgdGhpcyBjb21tYW5kLiAgKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fU0VUX0ZSQU1FX1NJWkUgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gU0VUX0ZSQU1FX1NJWkVfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGT1JDRV9GQUlMT1ZFUl9JTiB7Ci0JdTMyIG1vdmVfdG9fcG9ydDsKLQl1MzIgZmFpbG92ZXJfY29uZmlnOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIzMV9SRVNQT05TRSB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjMwX1BBUkFNUyB7Ci0Jc3RydWN0IEZPUkNFX0ZBSUxPVkVSX0lOIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIzMV9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgVXNlIHRoaXMgY29tbWFuZCB0byBjb250cm9sIGZhaWxvdmVyIGluIEJsYWRlRW5naW5lLiBJdCBtYXkgYmUgdXNlZAotICogIHRvIGZhaWxiYWNrIHRvIGEgIHJlc3RvcmVkIHBvcnQgb3IgdG8gZm9yY2libHkgbW92ZSB0cmFmZmljIGZyb20KLSAqICBvbmUgcG9ydCB0byBhbm90aGVyLiBJdCBtYXkgYWxzbyBiZSB1c2VkICB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUKLSAqICBhdXRvbWF0aWMgZmFpbG92ZXIgZmVhdHVyZS4gVGhpcyBjb21tYW5kIGNhbiBvbmx5IGJlIGlzc3VlZCBieSAgZG9tYWluCi0gKiAgMC4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9GT1JDRV9GQUlMT1ZFUiB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yMzBfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDBfUkVRVUVTVCB7Ci0JdTY0IGNvbnRleHQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjQxX1JFU1BPTlNFIHsKLQl1NjQgY29udGV4dDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIzOV9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDBfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDFfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCBieSBjbGllbnRzIGFzIGEgbm8tb3BlcmF0aW9uIHJlcXVlc3QuIFR5cGljYWwKLSAqICB1c2VzIGZvciBkcml2ZXJzICBhcmUgYXMgYSBoZWFydGJlYXQgbWVjaGFuaXNtLCBvciBkZWZlcnJlZCBwcm9jZXNzaW5nCi0gKiAgY2F0YWx5c3QuIFRoZSBBUk0gd2lsbCBhbHdheXMgIGNvbXBsZXRlIHRoaXMgY29tbWFuZCB3aXRoIGEgZ29vZCBjb21wbGV0aW9uLgotICogIFRoZSA2NC1iaXQgcGFyYW1ldGVyIGlzIG5vdCB0b3VjaGVkIGJ5IHRoZSAgQVJNIHByb2Nlc3Nvci4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9OT1AgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjM5X1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgTlRXS19SWF9GSUxURVJfU0VUVElOR1MgewotCXU4IHByb21pc2N1b3VzOwotCXU4IGlwX2Nrc3VtOwotCXU4IHRjcF9ja3N1bTsKLQl1OCB1ZHBfY2tzdW07Ci0JdTggcGFzc19lcnI7Ci0JdTggcGFzc19ja2VycjsKLQl1OCBzdHJpcF9jcmM7Ci0JdTggbWNhc3RfZW47Ci0JdTggYmNhc3RfZW47Ci0JdTggbWNhc3RfcHJvbWlzY3VvdXNfZW47Ci0JdTggdW5pY2FzdF9lbjsKLQl1OCB2bGFuX3Byb21pc2N1b3VzOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjQyX1BBUkFNUyB7Ci0Jc3RydWN0IE5UV0tfUlhfRklMVEVSX1NFVFRJTkdTIHJlcXVlc3Q7Ci0Jc3RydWN0IE5UV0tfUlhfRklMVEVSX1NFVFRJTkdTIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBtb2RpZnkgdGhlIGV0aGVybmV0IHJlY2VpdmUgZmlsdGVyIGNvbmZpZ3VyYXRpb24uCi0gKiAgT25seSBkb21haW4gMCAgbmV0d29yayBmdW5jdGlvbiBkcml2ZXJzIG1heSBpc3N1ZSB0aGlzIGNvbW1hbmQuIFRoZQotICogIGFwcGxpZWQgY29uZmlndXJhdGlvbiBpcyByZXR1cm5lZCBpbiAgdGhlIHJlc3BvbnNlIHBheWxvYWQuIE5vdGU6Ci0gKiAgU29tZSByZWNlaXZlIHBhY2tldCBmaWx0ZXIgc2V0dGluZ3MgYXJlIGdsb2JhbCBvbiAgQmxhZGVFbmdpbmUgYW5kCi0gKiAgY2FuIGFmZmVjdCBib3RoIHRoZSBzdG9yYWdlIGFuZCBuZXR3b3JrIGZ1bmN0aW9uIGNsaWVudHMgdGhhdCB0aGUKLSAqICAgQmxhZGVFbmdpbmUgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHNlcnZlLiBBZGRpdGlvbmFseSwgZGVwZW5kaW5nCi0gKiAgb24gdGhlIHJldmlzaW9uIG9mICBCbGFkZUVuZ2luZSwgc29tZSBldGhlcm5ldCByZWNlaXZlIGZpbHRlciBzZXR0aW5ncwotICogIGFyZSBkZXBlbmRlbnQgb24gb3RoZXJzLiBJZiBhICBkZXBlbmRlbmN5IGV4aXN0cyBiZXR3ZWVuIHNldHRpbmdzCi0gKiAgZm9yIHRoZSBCbGFkZUVuZ2luZSByZXZpc2lvbiwgYW5kIHRoZSBjb21tYW5kIHJlcXVlc3QgIHNldHRpbmdzIGRvCi0gKiAgbm90IG1lZXQgdGhlIGRlcGVuZGVuY3kgcmVxdWlyZW1lbnQsIHRoZSBpbnZhbGlkIHNldHRpbmdzIHdpbGwgbm90Ci0gKiAgYmUgIGFwcGxpZWQgZGVzcGl0ZSB0aGUgY29tYW5kIHN1Y2NlZWRpbmcuIEZvciBleGFtcGxlOiBhIGRyaXZlciBtYXkKLSAqICByZXF1ZXN0IHRvIGVuYWJsZSAgYnJvYWRjYXN0IHBhY2tldHMsIGJ1dCBub3QgZW5hYmxlIG11bHRpY2FzdCBwYWNrZXRzLgotICogIE9uIGVhcmx5IHJldmlzaW9ucyBvZiBCbGFkZUVuZ2luZSwgIHRoZXJlIG1heSBiZSBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuCi0gKiAgYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgZmlsdGVycywgc28gYnJvYWRjYXN0IGNvdWxkICBub3QgYmUgZW5hYmxlZAotICogIHdpdGhvdXQgZW5hYmxpbmcgbXVsdGljYXN0LiBJbiB0aGlzIHNjZW5hcmlvLCB0aGUgY29tYW5kIHdvdWxkIHN0aWxsCi0gKiAgIHN1Y2NlZWQsIGJ1dCB0aGUgcmVzcG9uc2UgcGF5bG9hZCB3b3VsZCBpbmRpY2F0ZSB0aGUgcHJldmlvdXNseQotICogIGNvbmZpZ3VyZWQgYnJvYWRjYXN0ICBhbmQgbXVsdGljYXN0IHNldHRpbmcuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19SWF9GSUxURVIgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjQyX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDRfUkVRVUVTVCB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTl9SRVNQT05TRV9QQVlMT0FEIHsKLQl1OCBmaXJtd2FyZV92ZXJzaW9uX3N0cmluZ1szMl07Ci0JdTggZndfb25fZmxhc2hfdmVyc2lvbl9zdHJpbmdbMzJdOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjQzX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0NF9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTl9SRVNQT05TRV9QQVlMT0FEIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogVGhpcyBjb21hbmQgcmV0cmlldmVzIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLiAgKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fR0VUX0ZXX1ZFUlNJT04gewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjQzX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjQ2X1JFUVVFU1QgewotCXUxNiB0eF9mbG93X2NvbnRyb2w7Ci0JdTE2IHJ4X2Zsb3dfY29udHJvbDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDdfUkVTUE9OU0UgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzI0NV9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDZfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDdfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFRoaXMgY29tYW5kIGlzIHVzZWQgdG8gcHJvZ3JhbSBCbGFkZUVuZ2luZSBmbG93IGNvbnRyb2wgYmVoYXZpb3IuCi0gKiAgT25seSB0aGUgaG9zdCAgbmV0d29ya2luZyBkcml2ZXIgaXMgYWxsb3dlZCB0byB1c2UgdGhpcyBjb21hbmQuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fU0VUX0ZMT1dfQ09OVFJPTCB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNDVfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDlfUkVRVUVTVCB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI1MF9SRVNQT05TRSB7Ci0JdTE2IHR4X2Zsb3dfY29udHJvbDsKLQl1MTYgcnhfZmxvd19jb250cm9sOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjQ4X1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0OV9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI1MF9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qIFRoaXMgY29tYW5kIGlzIHVzZWQgdG8gcmVhZCBCbGFkZUVuZ2luZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MuICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRkxPV19DT05UUk9MIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzI0OF9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEVRX0RFTEFZX1BBUkFNUyB7Ci0JdTMyIGVxX2lkOwotCXUzMiBkZWxheV9pbl9taWNyb3NlY29uZHM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjU3X1JFUVVFU1QgewotCXUzMiBudW1fZXE7Ci0JdTMyIHJzdmQwOwotCXN0cnVjdCBFUV9ERUxBWV9QQVJBTVMgZGVsYXlbMTZdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI1OF9SRVNQT05TRSB7Ci0JdTMyIGRlbGF5X3Jlc29sdXRpb25faW5fbWljcm9zZWNvbmRzOwotCXUzMiBkZWxheV9tYXhfaW5fbWljcm9zZWNvbmRzOwotfSBfX3BhY2tlZDsKLQotdW5pb24gTU9ESUZZX0VRX0RFTEFZX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI1N19SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI1OF9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qIFRoaXMgY29tYW5kIGNoYW5nZXMgdGhlIEVRIGRlbGF5IGZvciBhIGdpdmVuIHNldCBvZiBFUXMuICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9NT0RJRllfRVFfREVMQVkgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gTU9ESUZZX0VRX0RFTEFZX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjYwX1JFUVVFU1QgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBCRV9GSVJNV0FSRV9DT05GSUcgewotCXUxNiBiZV9jb25maWdfbnVtYmVyOwotCXUxNiBhc2ljX3JldmlzaW9uOwotCXUzMiBuaWNfdWxwX21hc2s7Ci0JdTMyIHR1bHBfbWFzazsKLQl1MzIgaXNjc2lfdWxwX21hc2s7Ci0JdTMyIHJkbWFfdWxwX21hc2s7Ci0JdTMyIHJzdmQwWzRdOwotCXUzMiBldGhfdHhfaWRfc3RhcnQ7Ci0JdTMyIGV0aF90eF9pZF9jb3VudDsKLQl1MzIgZXRoX3J4X2lkX3N0YXJ0OwotCXUzMiBldGhfcnhfaWRfY291bnQ7Ci0JdTMyIHRwbV93cmJxX2lkX3N0YXJ0OwotCXUzMiB0cG1fd3JicV9pZF9jb3VudDsKLQl1MzIgdHBtX2RlZnFfaWRfc3RhcnQ7Ci0JdTMyIHRwbV9kZWZxX2lkX2NvdW50OwotCXUzMiBpc2NzaV93cmJxX2lkX3N0YXJ0OwotCXUzMiBpc2NzaV93cmJxX2lkX2NvdW50OwotCXUzMiBpc2NzaV9kZWZxX2lkX3N0YXJ0OwotCXUzMiBpc2NzaV9kZWZxX2lkX2NvdW50OwotCXUzMiByZG1hX3FwX2lkX3N0YXJ0OwotCXUzMiByZG1hX3FwX2lkX2NvdW50OwotCXUzMiByc3ZkMVs4XTsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzI1OV9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNjBfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBCRV9GSVJNV0FSRV9DT05GSUcgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFRoaXMgY29tYW5kIHF1ZXJpZXMgdGhlIGN1cnJlbnQgZmlybXdhcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotICogICBUaGUgc3RhdGljICBjb25maWd1cmF0aW9uIHR5cGUgaXMgZGVmaW5lZCBieSBiZV9jb25maWdfbnVtYmVyLiBUaGlzCi0gKiAgZGlmZmVyZW50aWF0ZXMgZGlmZmVyZW50ICBCbGFkZUVuZ2luZSBidWlsZHMsIHN1Y2ggYXMgaVNDU0kgSW5pdGlhdG9yCi0gKiAgdmVyc3VzIGlTQ1NJIFRhcmdldC4gIEZvciBhIGdpdmVuIHN0YXRpYyAgY29uZmlndXJhdGlvbiwgdGhlIFVwcGVyCi0gKiAgTGF5ZXIgUHJvdG9jb2wgKFVMUCkgcHJvY2Vzc29ycyBtYXkgYmUgcmVjb25maWd1cmVkIHRvIHN1cHBvcnQgIGRpZmZlcmVudAotICogIHByb3RvY29scy4gRWFjaCBVTFAgcHJvY2Vzc29yIHN1cHBvcnRzIG9uZSBvciBtb3JlIHByb3RvY29scy4gVGhlCi0gKiAgbWFza3MgIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvcnMgYXJlIGNvbmZpZ3VyZWQgZm9yIGVhY2ggcHJvdG9jb2wuCi0gKiAgIEZvciBhIGdpdmVuIHN0YXRpYyAgY29uZmlndXJhdGlvbiwgdGhlIG51bWJlciBvZiBUQ1AgY29ubmVjdGlvbnMKLSAqICBzdXBwb3J0ZWQgZm9yIGVhY2ggcHJvdG9jb2wgbWF5IHZhcnkuIFRoZSAgKl9pZF9zdGFydCBhbmQgKl9pZF9jb3VudAotICogIHZhcmlhYmxlcyBkZWZpbmUgYSBsaW5lYXIgcmFuZ2Ugb2YgSURzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgIGVhY2gKLSAqICBzdXBwb3J0ZWQgcHJvdG9jb2wuIFRoZSAqX2lkX2NvdW50IG1heSBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8gYWxsb2NhdGUKLSAqICB0aGUgIGFwcHJvcHJpYXRlIG51bWJlciBvZiBjb25uZWN0aW9uIHJlc291cmNlcy4gVGhlICpfaWRfc3RhcnQgbWF5Ci0gKiAgYmUgdXNlZCB0byBtYXAgdGhlICBhcmJpdHJhcnkgcmFuZ2Ugb2YgSURzIHRvIGEgemVyby1iYXNlZCByYW5nZQotICogIG9mIGluZGljZXMuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fRklSTVdBUkVfQ09ORklHIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzI1OV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9QT1JUX0VRVUFMSVpBVElPTl9QQVJBTVMgewotCXUzMiBlbXBoX2xldl9zZWxfcG9ydDA7Ci0JdTMyIGVtcGhfbGV2X3NlbF9wb3J0MTsKLQl1OCB4YXVpX3ZvX3NlbDsKLQl1OCB4YXVpX3N0YXRlOwotCXUxNiByc3ZkMDsKLQl1MzIgeGF1aV9lcV92ZWN0b3I7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjYyX1JFUVVFU1QgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzI2MV9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNjJfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fUE9SVF9FUVVBTElaQVRJT05fUEFSQU1TIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBUaGlzIGNvbWFuZCBjYW4gYmUgdXNlZCB0byByZWFkIFhBVUkgZXF1YWxpemF0aW9uIHBhcmFtZXRlcnMuIFRoZQotICogIEFSTSBmaXJtd2FyZSBhcHBsaWVzICBkZWZhdWx0IGVxdWFsaXphdGlvbiBwYXJhbWV0ZXJzIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAqICBUaGVzZSBwYXJhbWV0ZXJzIG1heSBiZSAgY3VzdG9tZXItc3BlY2lmaWMgd2hlbiBkZXJpdmVkIGZyb20gdGhlCi0gKiAgU0VFUFJPTS4gU2VlIFNFRVBST01fREFUQSBmb3IgZXF1YWxpemF0aW9uICBzcGVjaWZpYyBmaWVsZHMuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fR0VUX1BPUlRfRVFVQUxJWkFUSU9OIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzI2MV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI2NF9SRVNQT05TRSB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjYzX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9QT1JUX0VRVUFMSVpBVElPTl9QQVJBTVMgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjY0X1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBUaGlzIGNvbWFuZCBjYW4gYmUgdXNlZCB0byBzZXQgWEFVSSBlcXVhbGl6YXRpb24gcGFyYW1ldGVycy4gVGhlIEFSTQotICogIGZpcm13YXJlIGFwcGxpZXMgIGRlZmF1bHQgZXF1YWxpemF0aW9uIHBhcmFtZXRlcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICogIFRoZXNlIHBhcmFtZXRlcnMgbWF5IGJlICBjdXN0b21lci1zcGVjaWZpYyB3aGVuIGRlcml2ZWQgZnJvbSB0aGUKLSAqICBTRUVQUk9NLiBTZWUgU0VFUFJPTV9EQVRBIGZvciBlcXVhbGl6YXRpb24gIHNwZWNpZmljIGZpZWxkcy4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9TRVRfUE9SVF9FUVVBTElaQVRJT04gewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjYzX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi0jZW5kaWYgLyogX19md2NtZF9jb21tb25fYm1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9ldGhfYm1hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2V0aF9ibWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNGIxNzkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2V0aF9ibWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2Z3Y21kX2V0aF9ibWFwX2hfXwotI2RlZmluZSBfX2Z3Y21kX2V0aF9ibWFwX2hfXwotI2luY2x1ZGUgImZ3Y21kX2hkcl9ibWFwLmgiCi0jaW5jbHVkZSAiZndjbWRfdHlwZXNfYm1hcC5oIgotCi1zdHJ1Y3QgTUlCX0VUSF9TVEFUSVNUSUNTX1BBUkFNU19JTiB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEJFX1JYRl9TVEFUUyB7Ci0JdTMyIHAwcmVjdmR0b3RhbGJ5dGVzTFNEOwkvKiBEV09SRCAwICovCi0JdTMyIHAwcmVjdmR0b3RhbGJ5dGVzTVNEOwkvKiBEV09SRCAxICovCi0JdTMyIHAwcmVjdmR0b3RhbGZyYW1lczsJLyogRFdPUkQgMiAqLwotCXUzMiBwMHJlY3ZkdW5pY2FzdGZyYW1lczsJLyogRFdPUkQgMyAqLwotCXUzMiBwMHJlY3ZkbXVsdGljYXN0ZnJhbWVzOwkvKiBEV09SRCA0ICovCi0JdTMyIHAwcmVjdmRicm9hZGNhc3RmcmFtZXM7CS8qIERXT1JEIDUgKi8KLQl1MzIgcDBjcmNlcnJvcnM7CS8qIERXT1JEIDYgKi8KLQl1MzIgcDBhbGlnbm1lbnRzeW1lcnJzOwkvKiBEV09SRCA3ICovCi0JdTMyIHAwcGF1c2VmcmFtZXNyZWN2ZDsJLyogRFdPUkQgOCAqLwotCXUzMiBwMGNvbnRyb2xmcmFtZXNyZWN2ZDsJLyogRFdPUkQgOSAqLwotCXUzMiBwMGlucmFuZ2VsZW5lcnJvcnM7CS8qIERXT1JEIDEwICovCi0JdTMyIHAwb3V0cmFuZ2VlcnJvcnM7CS8qIERXT1JEIDExICovCi0JdTMyIHAwZnJhbWV0b29sb25nZXJyb3JzOwkvKiBEV09SRCAxMiAqLwotCXUzMiBwMGRyb3BwZWRhZGRyZXNzbWF0Y2g7CS8qIERXT1JEIDEzICovCi0JdTMyIHAwZHJvcHBlZHZsYW5taXNtYXRjaDsJLyogRFdPUkQgMTQgKi8KLQl1MzIgcDBpcGRyb3BwZWR0b29zbWFsbDsJLyogRFdPUkQgMTUgKi8KLQl1MzIgcDBpcGRyb3BwZWR0b29zaG9ydDsJLyogRFdPUkQgMTYgKi8KLQl1MzIgcDBpcGRyb3BwZWRoZHJ0b29zbWFsbDsJLyogRFdPUkQgMTcgKi8KLQl1MzIgcDB0Y3Bkcm9wcGVkbGVuOwkvKiBEV09SRCAxOCAqLwotCXUzMiBwMGRyb3BwZWRydW50OwkvKiBEV09SRCAxOSAqLwotCXUzMiBwMHJlY3ZkNjQ7CQkvKiBEV09SRCAyMCAqLwotCXUzMiBwMHJlY3ZkNjVfMTI3OwkvKiBEV09SRCAyMSAqLwotCXUzMiBwMHJlY3ZkMTI4XzI1NjsJLyogRFdPUkQgMjIgKi8KLQl1MzIgcDByZWN2ZDI1Nl81MTE7CS8qIERXT1JEIDIzICovCi0JdTMyIHAwcmVjdmQ1MTJfMTAyMzsJLyogRFdPUkQgMjQgKi8KLQl1MzIgcDByZWN2ZDE1MThfMTUyMjsJLyogRFdPUkQgMjUgKi8KLQl1MzIgcDByZWN2ZDE1MjJfMjA0NzsJLyogRFdPUkQgMjYgKi8KLQl1MzIgcDByZWN2ZDIwNDhfNDA5NTsJLyogRFdPUkQgMjcgKi8KLQl1MzIgcDByZWN2ZDQwOTZfODE5MTsJLyogRFdPUkQgMjggKi8KLQl1MzIgcDByZWN2ZDgxOTJfOTIxNjsJLyogRFdPUkQgMjkgKi8KLQl1MzIgcDByY3ZkaXBja3NtZXJyczsJLyogRFdPUkQgMzAgKi8KLQl1MzIgcDByZWN2ZHRjcGNrc21lcnJzOwkvKiBEV09SRCAzMSAqLwotCXUzMiBwMHJlY3ZkdWRwY2tzbWVycnM7CS8qIERXT1JEIDMyICovCi0JdTMyIHAwcmVjdmRub25yc3NwYWNrZXRzOwkvKiBEV09SRCAzMyAqLwotCXUzMiBwMHJlY3ZkaXBwYWNrZXRzOwkvKiBEV09SRCAzNCAqLwotCXUzMiBwMHJlY3ZkY2h1dGUxcGFja2V0czsJLyogRFdPUkQgMzUgKi8KLQl1MzIgcDByZWN2ZGNodXRlMnBhY2tldHM7CS8qIERXT1JEIDM2ICovCi0JdTMyIHAwcmVjdmRjaHV0ZTNwYWNrZXRzOwkvKiBEV09SRCAzNyAqLwotCXUzMiBwMHJlY3ZkaXBzZWNwYWNrZXRzOwkvKiBEV09SRCAzOCAqLwotCXUzMiBwMHJlY3ZkbWFuYWdlbWVudHBhY2tldHM7CS8qIERXT1JEIDM5ICovCi0JdTMyIHAweG1pdGJ5dGVzbHNkOwkvKiBEV09SRCA0MCAqLwotCXUzMiBwMHhtaXRieXRlc21zZDsJLyogRFdPUkQgNDEgKi8KLQl1MzIgcDB4bWl0dW5pY2FzdGZyYW1lczsJLyogRFdPUkQgNDIgKi8KLQl1MzIgcDB4bWl0bXVsdGljYXN0ZnJhbWVzOwkvKiBEV09SRCA0MyAqLwotCXUzMiBwMHhtaXRicm9hZGNhc3RmcmFtZXM7CS8qIERXT1JEIDQ0ICovCi0JdTMyIHAweG1pdHBhdXNlZnJhbWVzOwkvKiBEV09SRCA0NSAqLwotCXUzMiBwMHhtaXRjb250cm9sZnJhbWVzOwkvKiBEV09SRCA0NiAqLwotCXUzMiBwMHhtaXQ2NDsJCS8qIERXT1JEIDQ3ICovCi0JdTMyIHAweG1pdDY1XzEyNzsJLyogRFdPUkQgNDggKi8KLQl1MzIgcDB4bWl0MTI4XzI1NjsJLyogRFdPUkQgNDkgKi8KLQl1MzIgcDB4bWl0MjU2XzUxMTsJLyogRFdPUkQgNTAgKi8KLQl1MzIgcDB4bWl0NTEyXzEwMjM7CS8qIERXT1JEIDUxICovCi0JdTMyIHAweG1pdDE1MThfMTUyMjsJLyogRFdPUkQgNTIgKi8KLQl1MzIgcDB4bWl0MTUyMl8yMDQ3OwkvKiBEV09SRCA1MyAqLwotCXUzMiBwMHhtaXQyMDQ4XzQwOTU7CS8qIERXT1JEIDU0ICovCi0JdTMyIHAweG1pdDQwOTZfODE5MTsJLyogRFdPUkQgNTUgKi8KLQl1MzIgcDB4bWl0ODE5Ml85MjE2OwkvKiBEV09SRCA1NiAqLwotCXUzMiBwMHJ4Zmlmb292ZXJmbG93ZHJvcHBlZDsJLyogRFdPUkQgNTcgKi8KLQl1MzIgcDBpcHNlY2xvb2t1cGZhaWxlZGRyb3BwZWQ7CS8qIERXT1JEIDU4ICovCi0JdTMyIHAxcmVjdmR0b3RhbGJ5dGVzTFNEOwkvKiBEV09SRCA1OSAqLwotCXUzMiBwMXJlY3ZkdG90YWxieXRlc01TRDsJLyogRFdPUkQgNjAgKi8KLQl1MzIgcDFyZWN2ZHRvdGFsZnJhbWVzOwkvKiBEV09SRCA2MSAqLwotCXUzMiBwMXJlY3ZkdW5pY2FzdGZyYW1lczsJLyogRFdPUkQgNjIgKi8KLQl1MzIgcDFyZWN2ZG11bHRpY2FzdGZyYW1lczsJLyogRFdPUkQgNjMgKi8KLQl1MzIgcDFyZWN2ZGJyb2FkY2FzdGZyYW1lczsJLyogRFdPUkQgNjQgKi8KLQl1MzIgcDFjcmNlcnJvcnM7CS8qIERXT1JEIDY1ICovCi0JdTMyIHAxYWxpZ25tZW50c3ltZXJyczsJLyogRFdPUkQgNjYgKi8KLQl1MzIgcDFwYXVzZWZyYW1lc3JlY3ZkOwkvKiBEV09SRCA2NyAqLwotCXUzMiBwMWNvbnRyb2xmcmFtZXNyZWN2ZDsJLyogRFdPUkQgNjggKi8KLQl1MzIgcDFpbnJhbmdlbGVuZXJyb3JzOwkvKiBEV09SRCA2OSAqLwotCXUzMiBwMW91dHJhbmdlZXJyb3JzOwkvKiBEV09SRCA3MCAqLwotCXUzMiBwMWZyYW1ldG9vbG9uZ2Vycm9yczsJLyogRFdPUkQgNzEgKi8KLQl1MzIgcDFkcm9wcGVkYWRkcmVzc21hdGNoOwkvKiBEV09SRCA3MiAqLwotCXUzMiBwMWRyb3BwZWR2bGFubWlzbWF0Y2g7CS8qIERXT1JEIDczICovCi0JdTMyIHAxaXBkcm9wcGVkdG9vc21hbGw7CS8qIERXT1JEIDc0ICovCi0JdTMyIHAxaXBkcm9wcGVkdG9vc2hvcnQ7CS8qIERXT1JEIDc1ICovCi0JdTMyIHAxaXBkcm9wcGVkaGRydG9vc21hbGw7CS8qIERXT1JEIDc2ICovCi0JdTMyIHAxdGNwZHJvcHBlZGxlbjsJLyogRFdPUkQgNzcgKi8KLQl1MzIgcDFkcm9wcGVkcnVudDsJLyogRFdPUkQgNzggKi8KLQl1MzIgcDFyZWN2ZDY0OwkJLyogRFdPUkQgNzkgKi8KLQl1MzIgcDFyZWN2ZDY1XzEyNzsJLyogRFdPUkQgODAgKi8KLQl1MzIgcDFyZWN2ZDEyOF8yNTY7CS8qIERXT1JEIDgxICovCi0JdTMyIHAxcmVjdmQyNTZfNTExOwkvKiBEV09SRCA4MiAqLwotCXUzMiBwMXJlY3ZkNTEyXzEwMjM7CS8qIERXT1JEIDgzICovCi0JdTMyIHAxcmVjdmQxNTE4XzE1MjI7CS8qIERXT1JEIDg0ICovCi0JdTMyIHAxcmVjdmQxNTIyXzIwNDc7CS8qIERXT1JEIDg1ICovCi0JdTMyIHAxcmVjdmQyMDQ4XzQwOTU7CS8qIERXT1JEIDg2ICovCi0JdTMyIHAxcmVjdmQ0MDk2XzgxOTE7CS8qIERXT1JEIDg3ICovCi0JdTMyIHAxcmVjdmQ4MTkyXzkyMTY7CS8qIERXT1JEIDg4ICovCi0JdTMyIHAxcmN2ZGlwY2tzbWVycnM7CS8qIERXT1JEIDg5ICovCi0JdTMyIHAxcmVjdmR0Y3Bja3NtZXJyczsJLyogRFdPUkQgOTAgKi8KLQl1MzIgcDFyZWN2ZHVkcGNrc21lcnJzOwkvKiBEV09SRCA5MSAqLwotCXUzMiBwMXJlY3Zkbm9ucnNzcGFja2V0czsJLyogRFdPUkQgOTIgKi8KLQl1MzIgcDFyZWN2ZGlwcGFja2V0czsJLyogRFdPUkQgOTMgKi8KLQl1MzIgcDFyZWN2ZGNodXRlMXBhY2tldHM7CS8qIERXT1JEIDk0ICovCi0JdTMyIHAxcmVjdmRjaHV0ZTJwYWNrZXRzOwkvKiBEV09SRCA5NSAqLwotCXUzMiBwMXJlY3ZkY2h1dGUzcGFja2V0czsJLyogRFdPUkQgOTYgKi8KLQl1MzIgcDFyZWN2ZGlwc2VjcGFja2V0czsJLyogRFdPUkQgOTcgKi8KLQl1MzIgcDFyZWN2ZG1hbmFnZW1lbnRwYWNrZXRzOwkvKiBEV09SRCA5OCAqLwotCXUzMiBwMXhtaXRieXRlc2xzZDsJLyogRFdPUkQgOTkgKi8KLQl1MzIgcDF4bWl0Ynl0ZXNtc2Q7CS8qIERXT1JEIDEwMCAqLwotCXUzMiBwMXhtaXR1bmljYXN0ZnJhbWVzOwkvKiBEV09SRCAxMDEgKi8KLQl1MzIgcDF4bWl0bXVsdGljYXN0ZnJhbWVzOwkvKiBEV09SRCAxMDIgKi8KLQl1MzIgcDF4bWl0YnJvYWRjYXN0ZnJhbWVzOwkvKiBEV09SRCAxMDMgKi8KLQl1MzIgcDF4bWl0cGF1c2VmcmFtZXM7CS8qIERXT1JEIDEwNCAqLwotCXUzMiBwMXhtaXRjb250cm9sZnJhbWVzOwkvKiBEV09SRCAxMDUgKi8KLQl1MzIgcDF4bWl0NjQ7CQkvKiBEV09SRCAxMDYgKi8KLQl1MzIgcDF4bWl0NjVfMTI3OwkvKiBEV09SRCAxMDcgKi8KLQl1MzIgcDF4bWl0MTI4XzI1NjsJLyogRFdPUkQgMTA4ICovCi0JdTMyIHAxeG1pdDI1Nl81MTE7CS8qIERXT1JEIDEwOSAqLwotCXUzMiBwMXhtaXQ1MTJfMTAyMzsJLyogRFdPUkQgMTEwICovCi0JdTMyIHAxeG1pdDE1MThfMTUyMjsJLyogRFdPUkQgMTExICovCi0JdTMyIHAxeG1pdDE1MjJfMjA0NzsJLyogRFdPUkQgMTEyICovCi0JdTMyIHAxeG1pdDIwNDhfNDA5NTsJLyogRFdPUkQgMTEzICovCi0JdTMyIHAxeG1pdDQwOTZfODE5MTsJLyogRFdPUkQgMTE0ICovCi0JdTMyIHAxeG1pdDgxOTJfOTIxNjsJLyogRFdPUkQgMTE1ICovCi0JdTMyIHAxcnhmaWZvb3ZlcmZsb3dkcm9wcGVkOwkvKiBEV09SRCAxMTYgKi8KLQl1MzIgcDFpcHNlY2xvb2t1cGZhaWxlZGRyb3BwZWQ7CS8qIERXT1JEIDExNyAqLwotCXUzMiBweGRyb3BwZWRub3BidWY7CS8qIERXT1JEIDExOCAqLwotCXUzMiBweGRyb3BwZWRub3R4cGI7CS8qIERXT1JEIDExOSAqLwotCXUzMiBweGRyb3BwZWRub2lwc2VjYnVmOwkvKiBEV09SRCAxMjAgKi8KLQl1MzIgcHhkcm9wcGVkbm9lcnhkZXNjcjsJLyogRFdPUkQgMTIxICovCi0JdTMyIHB4ZHJvcHBlZG5vdHByZWRlc2NyOwkvKiBEV09SRCAxMjIgKi8KLQl1MzIgcHhyZWN2ZG1hbmFnZW1lbnRwb3J0cGFja2V0czsJLyogRFdPUkQgMTIzICovCi0JdTMyIHB4cmVjdmRtYW5hZ2VtZW50cG9ydGJ5dGVzOwkvKiBEV09SRCAxMjQgKi8KLQl1MzIgcHhyZWN2ZG1hbmFnZW1lbnRwb3J0cGF1c2VmcmFtZXM7CS8qIERXT1JEIDEyNSAqLwotCXUzMiBweHJlY3ZkbWFuYWdlbWVudHBvcnRlcnJvcnM7CS8qIERXT1JEIDEyNiAqLwotCXUzMiBweHhtaXRtYW5hZ2VtZW50cG9ydHBhY2tldHM7CS8qIERXT1JEIDEyNyAqLwotCXUzMiBweHhtaXRtYW5hZ2VtZW50cG9ydGJ5dGVzOwkvKiBEV09SRCAxMjggKi8KLQl1MzIgcHh4bWl0bWFuYWdlbWVudHBvcnRwYXVzZTsJLyogRFdPUkQgMTI5ICovCi0JdTMyIHB4eG1pdG1hbmFnZW1lbnRwb3J0cnhmaWZvb3ZlcmZsb3c7CS8qIERXT1JEIDEzMCAqLwotCXUzMiBweHJlY3ZkaXBzZWNpcGNrc21lcnJzOwkvKiBEV09SRCAxMzEgKi8KLQl1MzIgcHhyZWN2ZHRjcHNlY2lwY2tzbWVycnM7CS8qIERXT1JEIDEzMiAqLwotCXUzMiBweHJlY3ZkdWRwc2VjaXBja3NtZXJyczsJLyogRFdPUkQgMTMzICovCi0JdTMyIHB4aXBzZWNydW50OwkvKiBEV09SRCAxMzQgKi8KLQl1MzIgcHhpcHNlY2FkZHJlc3NtaXNtYXRjaGRyb3BwZWQ7CS8qIERXT1JEIDEzNSAqLwotCXUzMiBweGlwc2VjcnhmaWZvb3ZlcmZsb3dkcm9wcGVkOwkvKiBEV09SRCAxMzYgKi8KLQl1MzIgcHhpcHNlY2ZyYW1lc3Rvb2xvbmc7CS8qIERXT1JEIDEzNyAqLwotCXUzMiBweGlwc2VjdG90YWxpcGZyYW1lczsJLyogRFdPUkQgMTM4ICovCi0JdTMyIHB4aXBzZWNpcHRvb3NtYWxsOwkvKiBEV09SRCAxMzkgKi8KLQl1MzIgcHhpcHNlY2lwdG9vc2hvcnQ7CS8qIERXT1JEIDE0MCAqLwotCXUzMiBweGlwc2VjaXBoZHJ0b29zbWFsbDsJLyogRFdPUkQgMTQxICovCi0JdTMyIHB4aXBzZWN0Y3BoZHJiYWQ7CS8qIERXT1JEIDE0MiAqLwotCXUzMiBweHJlY3ZkaXBzZWNjaHV0ZTE7CS8qIERXT1JEIDE0MyAqLwotCXUzMiBweHJlY3ZkaXBzZWNjaHV0ZTI7CS8qIERXT1JEIDE0NCAqLwotCXUzMiBweHJlY3ZkaXBzZWNjaHV0ZTM7CS8qIERXT1JEIDE0NSAqLwotCXUzMiBweGRyb3BwZWQ3ZnJhZ3M7CS8qIERXT1JEIDE0NiAqLwotCXUzMiBweGRyb3BwZWRmcmFnczsJLyogRFdPUkQgMTQ3ICovCi0JdTMyIHB4ZHJvcHBlZGludmFsaWRmcmFncmluZzsJLyogRFdPUkQgMTQ4ICovCi0JdTMyIHB4bnVtZm9yd2FyZGVkcGFja2V0czsJLyogRFdPUkQgMTQ5ICovCi19IF9fcGFja2VkOwotCi11bmlvbiBNSUJfRVRIX1NUQVRJU1RJQ1NfUEFSQU1TIHsKLQlzdHJ1Y3QgTUlCX0VUSF9TVEFUSVNUSUNTX1BBUkFNU19JTiByZXF1ZXN0OwotCXN0cnVjdCBCRV9SWEZfU1RBVFMgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFF1ZXJ5IGV0aGVybmV0IHN0YXRpc3RpY3MuIEFsbCBkb21haW5zIG1heSBpc3N1ZSB0aGlzIGNvbW1hbmQuIFRoZQotICogIGhvc3QgZG9tYWluIGRyaXZlcnMgIG1heSBvcHRpb25hbGx5IHJlc2V0IGludGVybmFsIHN0YXRpc3RpYyBjb3VudGVycwotICogIHdpdGggYSBxdWVyeS4KLSAqLwotc3RydWN0IEZXQ01EX0VUSF9HRVRfU1RBVElTVElDUyB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBNSUJfRVRIX1NUQVRJU1RJQ1NfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLQotc3RydWN0IEZXQ01EX0VUSF9BTk9OXzE3NV9SRVFVRVNUIHsKLQl1OCBwb3J0MF9wcm9taXNjdW91czsKLQl1OCBwb3J0MV9wcm9taXNjdW91czsKLQl1MTYgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfRVRIX0FOT05fMTc2X1JFU1BPTlNFIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9FVEhfQU5PTl8xNzRfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfRVRIX0FOT05fMTc1X1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfRVRIX0FOT05fMTc2X1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogRW5hYmxlcy9EaXNhYmxlcyBwcm9taXNjdW91cyBldGhlcm5ldCByZWNlaXZlIG1vZGUuICAqLwotc3RydWN0IEZXQ01EX0VUSF9QUk9NSVNDVU9VUyB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9FVEhfQU5PTl8xNzRfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9FVEhfQU5PTl8xNzhfUkVRVUVTVCB7Ci0JdTMyIG5ld19mcmFnc2l6ZV9sb2cyOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0VUSF9BTk9OXzE3OV9SRVNQT05TRSB7Ci0JdTMyIGFjdHVhbF9mcmFnc2l6ZV9sb2cyOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfRVRIX0FOT05fMTc3X1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0VUSF9BTk9OXzE3OF9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0VUSF9BTk9OXzE3OV9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgU2V0cyB0aGUgRXRoZXJuZXQgUlggZnJhZ21lbnQgc2l6ZS4gT25seSBob3N0IChkb21haW4gMCkgbmV0d29ya2luZwotICogIGRyaXZlcnMgbWF5IGlzc3VlICB0aGlzIGNvbW1hbmQuICBUaGlzIGNhbGwgd2lsbCBmYWlsIGZvciBub24taG9zdAotICogIHByb3RlY3Rpb24gZG9tYWlucy4gSW4gdGhpcyBzaXR1YXRpb24gdGhlICBNQ0MgQ1Egc3RhdHVzIHdpbGwgaW5kaWNhdGUKLSAqICBhIGZhaWx1cmUgZHVlIHRvIGluc3VmZmljaWVudCBwcml2aWxlZGdlcy4gVGhlIHJlc3BvbnNlICBzaG91bGQgYmUKLSAqICBpZ25vcmVkLCBhbmQgdGhlIGRyaXZlciBzaG91bGQgdXNlIHRoZSBGV0NNRF9FVEhfR0VUX0ZSQUdfU0laRSB0bwotICogIHF1ZXJ5IHRoZSAgZXhpc3RpbmcgZXRoZXJuZXQgcmVjZWl2ZSBmcmFnbWVudCBzaXplLiBJdCBtdXN0IHVzZSB0aGlzCi0gKiAgZnJhZ21lbnQgc2l6ZSBmb3IgYWxsICBmcmFnbWVudHMgaW4gdGhlIGV0aGVybmV0IHJlY2VpdmUgcmluZy4gIElmCi0gKiAgdGhlIGNvbW1hbmQgc3VjY2VlZHMsIHRoZSBkcml2ZXIgbXVzdCB1c2UgdGhlICBmcmFnIHNpemUgaW5kaWNhdGVkCi0gKiAgaW4gdGhlIGNvbW1hbmQgcmVzcG9uc2Ugc2luY2UgdGhlIHJlcXVlc3RlZCBmcmFnIHNpemUgbWF5IG5vdCBiZSAgYXBwbGllZAotICogIHVudGlsIHRoZSBuZXh0IHJlYm9vdC4gV2hlbiB0aGUgcmVxdWVzdGVkIGZyYWdzaXplIG1hdGNoZXMgdGhlIHJlc3BvbnNlCi0gKiAgIGZyYWdzaXplLCB0aGlzIGluZGljYXRlcyB0aGUgcmVxdWVzdCB3YXMgYXBwbGllZCBpbW1lZGlhdGVseS4KLSAqLwotc3RydWN0IEZXQ01EX0VUSF9TRVRfUlhfRlJBR19TSVpFIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0VUSF9BTk9OXzE3N19QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0VUSF9BTk9OXzE4MV9SRVFVRVNUIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfRVRIX0FOT05fMTgyX1JFU1BPTlNFIHsKLQl1MzIgYWN0dWFsX2ZyYWdzaXplX2xvZzI7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9FVEhfQU5PTl8xODBfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfRVRIX0FOT05fMTgxX1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfRVRIX0FOT05fMTgyX1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBRdWVyaWVzIHRoZSBFdGhlcm5ldCBSWCBmcmFnbWVudCBzaXplLiBBbGwgZG9tYWlucyBtYXkgaXNzdWUgdGhpcwotICogIGNvbW1hbmQuICBUaGUgZHJpdmVyICBzaG91bGQgY2FsbCB0aGlzIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIHRoZSBtaW5pbXVtCi0gKiAgcmVxdWlyZWQgZnJhZ21lbnQgc2l6ZSBmb3IgdGhlIGV0aGVybmV0ICBSWCByaW5nIGJ1ZmZlcnMuIERyaXZlcnMKLSAqICBtYXkgY2hvb3NlIHRvIHVzZSBhIGxhcmdlciBzaXplIGZvciBlYWNoIGZyYWdtZW50IGJ1ZmZlciwgYnV0ICBCbGFkZUVuZ2luZQotICogIHdpbGwgdXNlIHVwIHRvIHRoZSBjb25maWd1cmVkIG1pbmltdW0gcmVxdWlyZWQgZnJhZ3NpemUgaW4gZWFjaCBldGhlcm5ldAotICogICByZWNlaXZlIGZyYWdtZW50IGJ1ZmZlci4gRm9yIGV4YW1wbGUsIGlmIHRoZSBldGhlcm5ldCByZWNlaXZlIGZyYWdtZW50Ci0gKiAgc2l6ZSBpcyAgY29uZmlndXJlZCB0byA0a0IsIGFuZCBhIGRyaXZlciB1c2VzIDhrQiBmcmFnbWVudHMsIGEgNmtCCi0gKiAgZXRoZXJuZXQgcGFja2V0IHJlY2VpdmVkIGJ5ICBCbGFkZUVuZ2luZSB3aWxsIGJlIHNwbGl0IGFjY3Jvc3MgdHdvCi0gKiAgb2YgdGhlIGRyaXZlcidzIHJlY2VpdmUgZnJhbWdlbnRzICg0a0IgaW4gb25lICBmcmFnbWVudCBidWZmZXIsIGFuZAotICogIDJrQiBpbiB0aGUgc3Vic2VxdWVudCBmcmFnbWVudCBidWZmZXIpLgotICovCi1zdHJ1Y3QgRldDTURfRVRIX0dFVF9SWF9GUkFHX1NJWkUgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfRVRIX0FOT05fMTgwX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi0jZW5kaWYgLyogX19md2NtZF9ldGhfYm1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9oZHJfYm1hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2hkcl9ibWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YjQ1MzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2hkcl9ibWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZndjbWRfaGRyX2JtYXBfaF9fCi0jZGVmaW5lIF9fZndjbWRfaGRyX2JtYXBfaF9fCi0KLXN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiB7Ci0JdTggb3Bjb2RlOwotCXU4IHN1YnN5c3RlbTsKLQl1OCBwb3J0X251bWJlcjsKLQl1OCBkb21haW47Ci0JdTMyIHRpbWVvdXQ7Ci0JdTMyIHJlcXVlc3RfbGVuZ3RoOwotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9SRVNQT05TRV9IRUFERVIgewotCXU4IG9wY29kZTsKLQl1OCBzdWJzeXN0ZW07Ci0JdTggcnN2ZDA7Ci0JdTggZG9tYWluOwotCXU4IHN0YXR1czsKLQl1OCBhZGRpdGlvbmFsX3N0YXR1czsKLQl1MTYgcnN2ZDE7Ci0JdTMyIHJlc3BvbnNlX2xlbmd0aDsKLQl1MzIgYWN0dWFsX3Jlc3BvbnNlX2xlbmd0aDsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgVGhlIGZpcm13YXJlL2RyaXZlciBvdmVyd3JpdGVzIHRoZSBpbnB1dCBGV0NNRF9SRVFVRVNUX0hFQURFUiB3aXRoCi0gKiAgdGhlIG91dHB1dCAgRldDTURfUkVTUE9OU0VfSEVBREVSLgotICovCi11bmlvbiBGV0NNRF9IRUFERVIgewotCXN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9SRVNQT05TRV9IRUFERVIgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0jZW5kaWYgLyogX19md2NtZF9oZHJfYm1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9tY2MuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9tY2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlY2E4Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfbWNjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZndjbWRfbWNjX2FtYXBfaF9fCi0jZGVmaW5lIF9fZndjbWRfbWNjX2FtYXBfaF9fCi0jaW5jbHVkZSAiZndjbWRfb3Bjb2Rlcy5oIgotLyoKLSAqIFdoZXJlIGFwcGxpY2FibGUsIGEgV1JCLCBtYXkgY29udGFpbiBhIGxpc3Qgb2YgU2NhdHRlci1nYXRoZXIgZWxlbWVudHMuCi0gKiBFYWNoIGVsZW1lbnQgc3VwcG9ydHMgYSA2NCBiaXQgYWRkcmVzcyBhbmQgYSAzMmJpdCBsZW5ndGggZmllbGQuCi0gKi8KLXN0cnVjdCBCRV9NQ0NfU0dFX0FNQVAgewotCXU4IHBhX2xvWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHBhX2hpWzMyXTsJLyogRFdPUkQgMSAqLwotCXU4IGxlbmd0aFszMl07CS8qIERXT1JEIDIgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgTUNDX1NHRV9BTUFQIHsKLQl1MzIgZHdbM107Ci19OwotLyoKLSAqIFRoZSBkZXNpZ24gb2YgYW4gTUNDX1NHRSBhbGxvd3MgdXAgdG8gMTkgZWxlbWVudHMgdG8gYmUgZW1iZWRkZWQKLSAqIGluIGEgV1JCLCBzdXBwb3J0aW5nIDY0S0IgZGF0YSB0cmFuc2ZlcnMgKGFzc3VtaW5nIGEgNEtCIHBhZ2Ugc2l6ZSkuCi0gKi8KLXN0cnVjdCBCRV9NQ0NfV1JCX1BBWUxPQURfQU1BUCB7Ci0JdW5pb24gewotCQlzdHJ1Y3QgQkVfTUNDX1NHRV9BTUFQIHNnbFsxOV07Ci0JCXU4IGVtYmVkZGVkWzU5XVszMl07CS8qIERXT1JEIDAgKi8KLQl9OwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNQ0NfV1JCX1BBWUxPQURfQU1BUCB7Ci0JdTMyIGR3WzU5XTsKLX07Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE1DQyBDb21tYW5kIFdSQiBmb3IgY29tbWFuZHMKLSAqIHNlbnQgdG8gdGhlIE1hbmFnZW1lbnQgUHJvY2Vzc2luZyBVbml0IChNUFUpLiBTZWUgc2VjdGlvbgotICogZm9yIHVzYWdlIGluIGVtYmVkZGVkIGFuZCBub24tZW1iZWRkZWQgbW9kZXMuCi0gKi8KLXN0cnVjdCBCRV9NQ0NfV1JCX0FNQVAgewotCXU4IGVtYmVkZGVkOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMl07CS8qIERXT1JEIDAgKi8KLQl1OCBzZ2VfY291bnRbNV07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsxNl07CS8qIERXT1JEIDAgKi8KLQl1OCBzcGVjaWFsWzhdOwkvKiBEV09SRCAwICovCi0JdTggcGF5bG9hZF9sZW5ndGhbMzJdOwkvKiBEV09SRCAxICovCi0JdTggdGFnWzJdWzMyXTsJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQyWzMyXTsJLyogRFdPUkQgNCAqLwotCXN0cnVjdCBCRV9NQ0NfV1JCX1BBWUxPQURfQU1BUCBwYXlsb2FkOwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNQ0NfV1JCX0FNQVAgewotCXUzMiBkd1s2NF07Ci19OwotCi0vKiAgVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBNQ0MgQ29tcGxldGlvbiBxdWV1ZSBlbnRyeSAgKi8KLXN0cnVjdCBCRV9NQ0NfQ1FfRU5UUllfQU1BUCB7Ci0JdTggY29tcGxldGlvbl9zdGF0dXNbMTZdOwkvKiBEV09SRCAwICovCi0JdTggZXh0ZW5kZWRfc3RhdHVzWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IG1jY190YWdbMl1bMzJdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDBbMjddOwkvKiBEV09SRCAzICovCi0JdTggY29uc3VtZWQ7CS8qIERXT1JEIDMgKi8KLQl1OCBjb21wbGV0ZWQ7CS8qIERXT1JEIDMgKi8KLQl1OCBocGlfYnVmZmVyX2NvbXBsZXRpb247CS8qIERXT1JEIDMgKi8KLQl1OCBhc3luY19ldmVudDsJLyogRFdPUkQgMyAqLwotCXU4IHZhbGlkOwkJLyogRFdPUkQgMyAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCB7Ci0JdTMyIGR3WzRdOwotfTsKLQotLyogTWFpbGJveCBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIE1QVSBkdXJpbmcgYm9vdHN0cmFwICovCi1zdHJ1Y3QgQkVfTUNDX01BSUxCT1hfQU1BUCB7Ci0Jc3RydWN0IEJFX01DQ19XUkJfQU1BUCB3cmI7Ci0Jc3RydWN0IEJFX01DQ19DUV9FTlRSWV9BTUFQIGNxOwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNQ0NfTUFJTEJPWF9BTUFQIHsKLQl1MzIgZHdbNjhdOwotfTsKLQotI2VuZGlmIC8qIF9fZndjbWRfbWNjX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfb3Bjb2Rlcy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX29wY29kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNkNTY5My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfb3Bjb2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19md2NtZF9vcGNvZGVzX2FtYXBfaF9fCi0jZGVmaW5lIF9fZndjbWRfb3Bjb2Rlc19hbWFwX2hfXwotCi0vKgotICogLS0tIEZXQ01EX1NVQlNZU1RFTVMgLS0tCi0gKiBUaGUgY29tbWFuZHMgYXJlIGdyb3VwZWQgaW50byB0aGUgZm9sbG93aW5nIHN1YnN5c3RlbXMuIFRoZSBzdWJzeXN0ZW0KLSAqIGNvZGUgYWxvbmcgd2l0aCB0aGUgb3Bjb2RlIHVuaXF1ZWx5IGlkZW50aWZ5IGEgcGFydGljdWxhciBmd2NtZC4KLSAqLwotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fUlNWRCAgKDApCS8qIFRoaXMgc3Vic3lzdGVtIGlzIHJlc2VydmVkLiBJdCBpcyAqLwotCQkJCQkJICAvKiBuZXZlciB1c2VkLiAqLwotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fQ09NTU9OICgxKQkvKiBDTURzIGluIHRoaXMgZ3JvdXAgYXJlIGNvbW1vbiB0bwotCQkJCQkqIGFsbCBzdWJzeXN0ZW1zLiBTZWUKLQkJCQkJKiBDT01NT05fU1VCU1lTVEVNX09QQ09ERVMgZm9yIG9wY29kZXMKLQkJCQkJKiBhbmQgQ29tbW9uIEhvc3QgQ29uZmlndXJhdGlvbiBDTURzCi0JCQkJCSogZm9yIHRoZSBGV0NNRCBkZXNjcmlwdGlvbnMuCi0JCQkJCSovCi0jZGVmaW5lIEZXQ01EX1NVQlNZU1RFTV9DT01NT05fSVNDU0kgICAgKDIpIC8qIENNRHMgaW4gdGhpcyBncm91cCBhcmUgKi8KLQkJCQkJLyoKLQkJCQkJKiBjb21tb24gdG8gSW5pdGlhdG9yIGFuZCBUYXJnZXQuIFNlZQotCQkJCQkqIENPTU1PTl9JU0NTSV9TVUJTWVNURU1fT1BDT0RFUyBhbmQKLQkJCQkJKiBDb21tb24gaVNDU0kgSW5pdGlhdG9yIGFuZCBUYXJnZXQKLQkJCQkJKiBDTURzIGZvciB0aGUgY29tbWFuZCBkZXNjcmlwdGlvbnMuCi0JCQkJCSovCi0jZGVmaW5lIEZXQ01EX1NVQlNZU1RFTV9FVEggICAgICAgICAgICAgKDMpCS8qIFRoaXMgc3Vic3lzdGVtIGlzIHVzZWQgdG8KLQkJCQkJCWV4ZWN1dGUgIEV0aGVybmV0IGNvbW1hbmRzLiAgKi8KLQotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fVFBNICAgICAgICAgICAgICg0KQkvKiBUaGlzIHN1YnN5c3RlbSBpcyB1c2VkCi0JCQkJCQkgdG8gZXhlY3V0ZSBUUE0gIGNvbW1hbmRzLiAgKi8KLSNkZWZpbmUgRldDTURfU1VCU1lTVEVNX1BYRV9VTkRJICAgICAgICAoNSkJLyogVGhpcyBzdWJzeXN0ZW0gaXMgdXNlZAotCQkJCQkJKiB0byBleGVjdXRlIFBYRQotCQkJCQkJKiBhbmQgVU5ESSBzcGVjaWZpYyBjb21tYW5kcy4KLQkJCQkJCSovCi0KLSNkZWZpbmUgRldDTURfU1VCU1lTVEVNX0lTQ1NJX0lOSSAgICAgICAoNikJLyogVGhpcyBzdWJzeXN0ZW0gaXMgdXNlZCB0bwotCQkJCQkJZXhlY3V0ZSBJU0NTSSBJbml0aWF0b3IKLQkJCQkJCXNwZWNpZmljIGNvbW1hbmRzLgotCQkJCQkJKi8KLSNkZWZpbmUgRldDTURfU1VCU1lTVEVNX0lTQ1NJX1RHVCAgICAgICAoNykJLyogVGhpcyBzdWJzeXN0ZW0gaXMgdXNlZAotCQkJCQkJdG8gZXhlY3V0ZSBpU0NTSSBUYXJnZXQKLQkJCQkJCXNwZWNpZmljIGNvbW1hbmRzLmJldHdlZW4KLQkJCQkJCVBUTCBhbmQgQVJNIGZpcm13YXJlLgotCQkJCQkJKi8KLSNkZWZpbmUgRldDTURfU1VCU1lTVEVNX01JTElfUFRMICAgICAgICAoOCkJLyogVGhpcyBzdWJzeXN0ZW0gaXMgdXNlZCB0bwotCQkJCQkJZXhlY3V0ZSBpU0NTSSBUYXJnZXQgc3BlY2lmaWMKLQkJCQkJCWNvbW1hbmRzLmJldHdlZW4gTUlMSQotCQkJCQkJYW5kIFBUTC4gICovCi0jZGVmaW5lIEZXQ01EX1NVQlNZU1RFTV9NSUxJX1RNRCAgICAgICAgKDkpCS8qIFRoaXMgc3Vic3lzdGVtIGlzIHVzZWQgdG8KLQkJCQkJCWV4ZWN1dGUgaVNDU0kgVGFyZ2V0IHNwZWNpZmljCi0JCQkJCQljb21tYW5kcyBiZXR3ZWVuIE1JTEkKLQkJCQkJCWFuZCBUTUQuICAqLwotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fUFJPWFkgICAgICAgICAgICgxMSkJLyogVGhpcyBzdWJzeXN0ZW0gaXMgdXNlZAotCQkJCQkJdG8gZXhlY3V0ZSBwcm94aWVkIGNvbW1hbmRzCi0JCQkJCQl3aXRoaW4gdGhlIGhvc3QgYXQgdGhlCi0JCQkJCQlleHBsaWNpdCByZXF1ZXN0IG9mIGEKLQkJCQkJCW5vbiBwcml2aWxlZGdlZCBkb21haW4uCi0JCQkJCQlUaGlzICdzdWJzeXN0ZW0nIGlzIGVudGlyZWx5Ci0JCQkJCQl2aXJ0dWFsIGZyb20gdGhlIGNvbnRyb2xsZXIKLQkJCQkJCWFuZCBmaXJtd2FyZSBwZXJzcGVjdGl2ZSBhcwotCQkJCQkJaXQgaXMgaW1wbGVtZW50ZWQgaW4gaG9zdAotCQkJCQkJZHJpdmVycy4KLQkJCQkJCSovCi0KLS8qCi0gKiAtLS0gQ09NTU9OX1NVQlNZU1RFTV9PUENPREVTIC0tLQotICogVGhlc2Ugb3Bjb2RlcyBhcmUgY29tbW9uIHRvIGJvdGggbmV0d29ya2luZyBhbmQgc3RvcmFnZSBQQ0kKLSAqIGZ1bmN0aW9ucy4gVGhleSBhcmUgdXNlZCB0byByZXNlcnZlIHJlc291cmNlcyBhbmQgY29uZmlndXJlCi0gKiBCbGFkZUVuZ2luZS4gVGhlc2Ugb3Bjb2RlcyBhbGwgdXNlIHRoZSBGV0NNRF9TVUJTWVNURU1fQ09NTU9OCi0gKiBzdWJzeXN0ZW0gY29kZS4KLSAqLwotI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTUFDX1FVRVJZICAgICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX05UV0tfTUFDX1FVRVJZICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX05UV0tfTUFDX1NFVCAgICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVCAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9OVFdLX1ZMQU5fQ09ORklHICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlkgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fUkVBRF9GTEFTSFJPTSAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fV1JJVEVfRkxBU0hST00gKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fUVVFUllfTUFYX0ZXQ01EX0JVRkZFUl9TSVpFICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0FERF9QQUdFX1RBQkxFUyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9SRU1PVkVfUEFHRV9UQUJMRVMgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fUklOR19ERVNUUk9ZICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fQ1FfQ1JFQVRFICAgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fRVFfQ1JFQVRFICAgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fRVRIX1JYX0NSRUFURSAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fRVRIX1RYX0NSRUFURSAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fSVNDU0lfREVGUV9DUkVBVEUgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fSVNDU0lfV1JCUV9DUkVBVEUgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fTUNDX0NSRUFURSAgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fSkVMTF9DT05GSUcgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fRk9SQ0VfRkFJTE9WRVIgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fQUREX1RFTVBMQVRFX0hFQURFUl9CVUZGRVJTICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1JFTU9WRV9URU1QTEFURV9IRUFERVJfQlVGRkVSUyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9QT1NUX1pFUk9fQlVGRkVSICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0dFVF9RT1MgICAgICAgICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1NFVF9RT1MgICAgICAgICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1RDUF9HRVRfU1RBVElTVElDUyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9TRUVQUk9NX1JFQUQgICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9UQ1BfU1RBVEVfUVVFUlkgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fR0VUX0NOVExfQVRUUklCVVRFUyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9OT1AgICAgICAgICAgICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUiAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9HRVRfRldfVkVSU0lPTiAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9TRVRfRkxPV19DT05UUk9MICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0dFVF9GTE9XX0NPTlRST0wgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fU0VUX1RDUF9QQVJBTUVURVJTICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1NFVF9GUkFNRV9TSVpFICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0dFVF9GQVQgICAgICAgICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX01PRElGWV9FUV9ERUxBWSAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fRU5BQkxFX0RJU0FCTEVfRE9NQUlOUyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9HRVRfRE9NQUlOX0NPTkZJRyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9TRVRfVkxEX0NPTkZJRyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9HRVRfVkxEX0NPTkZJRyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9HRVRfUE9SVF9FUVVBTElaQVRJT04gKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fU0VUX1BPUlRfRVFVQUxJWkFUSU9OICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1JFRF9DT05GSUcgICAgICgxKQotI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTUFDX1NFVCAgICAgICgyKQotI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVCAoMykKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1ZMQU5fQ09ORklHICAoNCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX0xJTktfU1RBVFVTX1FVRVJZICg1KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1JFQURfRkxBU0hST00gICAgICg2KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1dSSVRFX0ZMQVNIUk9NICAgICg3KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1FVRVJZX01BWF9GV0NNRF9CVUZGRVJfU0laRSAoOCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9BRERfUEFHRV9UQUJMRVMgICAoOSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9SRU1PVkVfUEFHRV9UQUJMRVMgKDEwKQotI2RlZmluZSBPUENPREVfQ09NTU9OX1JJTkdfREVTVFJPWSAgICAgICgxMSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUgICAgICAgICAoMTIpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfQ1JFQVRFICAgICAgICAgKDEzKQotI2RlZmluZSBPUENPREVfQ09NTU9OX0VUSF9SWF9DUkVBVEUgICAgICgxNCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FVEhfVFhfQ1JFQVRFICAgICAoMTUpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTkVUX1JFU0VSVkVEMCAgICAgKDE2KQkvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBPUENPREVfQ09NTU9OX05FVF9SRVNFUlZFRDEgICAgICgxNykJLyogUmVzZXJ2ZWQgKi8KLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9ORVRfUkVTRVJWRUQyICAgICAoMTgpCS8qIFJlc2VydmVkICovCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9DUkVBVEUgKDE5KQotI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfQ1JFQVRFICgyMCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NQ0NfQ1JFQVRFICAgICAgICAoMjEpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fSkVMTF9DT05GSUcgICAgICAgKDIyKQotI2RlZmluZSBPUENPREVfQ09NTU9OX0ZPUkNFX0ZBSUxPVkVSICAgICgyMykKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9BRERfVEVNUExBVEVfSEVBREVSX0JVRkZFUlMgKDI0KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1JFTU9WRV9URU1QTEFURV9IRUFERVJfQlVGRkVSUyAoMjUpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fUE9TVF9aRVJPX0JVRkZFUiAgKDI2KQotI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9RT1MgICAgICAgICAgICgyNykKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfUU9TICAgICAgICAgICAoMjgpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fVENQX0dFVF9TVEFUSVNUSUNTICgyOSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRUVQUk9NX1JFQUQgICAgICAoMzApCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fVENQX1NUQVRFX1FVRVJZICAgKDMxKQotI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9DTlRMX0FUVFJJQlVURVMgKDMyKQotI2RlZmluZSBPUENPREVfQ09NTU9OX05PUCAgICAgICAgICAgICAgICgzMykKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUiAgICAoMzQpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0ZXX1ZFUlNJT04gICAgKDM1KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9GTE9XX0NPTlRST0wgICgzNikKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfRkxPV19DT05UUk9MICAoMzcpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fU0VUX1RDUF9QQVJBTUVURVJTICgzOCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfRlJBTUVfU0laRSAgICAoMzkpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0ZBVCAgICAgICAgICAgKDQwKQotI2RlZmluZSBPUENPREVfQ09NTU9OX01PRElGWV9FUV9ERUxBWSAgICg0MSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcgICAoNDIpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fRU5BQkxFX0RJU0FCTEVfRE9NQUlOUyAoNDMpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0RPTUFJTl9DT05GSUcgKDQ0KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9WTERfQ09ORklHICAgICg0NSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfVkxEX0NPTkZJRyAgICAoNDYpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX1BPUlRfRVFVQUxJWkFUSU9OICg0NykKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfUE9SVF9FUVVBTElaQVRJT04gKDQ4KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1JFRF9DT05GSUcgICAgICAgICg0OSkKLQotCi0KLS8qCi0gKiAtLS0gRVRIX1NVQlNZU1RFTV9PUENPREVTIC0tLQotICogVGhlc2Ugb3Bjb2RlcyBhcmUgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIEV0aGVybmV0IGludGVyZmFjZXMuIFRoZXNlCi0gKiBvcGNvZGVzIGFsbCB1c2UgdGhlIEZXQ01EX1NVQlNZU1RFTV9FVEggc3Vic3lzdGVtIGNvZGUuCi0gKi8KLSNkZWZpbmUgT1BDT0RFX0VUSF9SU1NfQ09ORklHICAgICAgICAgICAoMSkKLSNkZWZpbmUgT1BDT0RFX0VUSF9BQ1BJX0NPTkZJRyAgICAgICAgICAoMikKLSNkZWZpbmUgU1VCU1lTVEVNX0VUSF9SU1NfQ09ORklHICAgICAgICAoMykKLSNkZWZpbmUgU1VCU1lTVEVNX0VUSF9BQ1BJX0NPTkZJRyAgICAgICAoMykKLSNkZWZpbmUgT1BDT0RFX0VUSF9QUk9NSVNDVU9VUyAgICAgICAgICAoMykKLSNkZWZpbmUgU1VCU1lTVEVNX0VUSF9QUk9NSVNDVU9VUyAgICAgICAoMykKLSNkZWZpbmUgU1VCU1lTVEVNX0VUSF9HRVRfU1RBVElTVElDUyAgICAoMykKLSNkZWZpbmUgU1VCU1lTVEVNX0VUSF9HRVRfUlhfRlJBR19TSVpFICAoMykKLSNkZWZpbmUgU1VCU1lTVEVNX0VUSF9TRVRfUlhfRlJBR19TSVpFICAoMykKLSNkZWZpbmUgT1BDT0RFX0VUSF9HRVRfU1RBVElTVElDUyAgICAgICAoNCkKLSNkZWZpbmUgT1BDT0RFX0VUSF9HRVRfUlhfRlJBR19TSVpFICAgICAoNSkKLSNkZWZpbmUgT1BDT0RFX0VUSF9TRVRfUlhfRlJBR19TSVpFICAgICAoNikKLQotCi0KLQotCi0vKgotICogLS0tIE1DQ19TVEFUVVNfQ09ERSAtLS0KLSAqIFRoZXNlIGFyZSB0aGUgZ2xvYmFsIHN0YXR1cyBjb2RlcyB1c2VkIGJ5IGFsbCBzdWJzeXN0ZW1zCi0gKi8KLSNkZWZpbmUgTUNDX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAoMCkJLyogSW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bAotCQkJCQkJY29tcGxldGlvbiBvZiAgdGhlIGNvbW1hbmQgKi8KLSNkZWZpbmUgTUNDX1NUQVRVU19JTlNVRkZJQ0lFTlRfUFJJVklMRUdFUyAoMSkJLyogVGhlIGNsaWVudCBkb2VzIG5vdCBoYXZlCi0JCQkJCQlzdWZmaWNpZW50IHByaXZpbGVnZXMgdG8KLQkJCQkJCWV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KLSNkZWZpbmUgTUNDX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUiAgICAoMikJLyogQSBwYXJhbWV0ZXIgaW4gdGhlIGNvbW1hbmQKLQkJCQkJCXdhcyBpbnZhbGlkLiBUaGUgZXh0ZW5kZWQKLQkJCQkJCXN0YXR1cyBjb250YWlucyB0aGUgaW5kZXgKLQkJCQkJCW9mIHRoZSBwYXJhbWV0ZXIgKi8KLSNkZWZpbmUgTUNDX1NUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTICgzKQkvKiBUaGVyZSBhcmUgaW5zdWZmaWNpZW50Ci0JCQkJCQljaGlwIHJlc291cmNlcyB0byBleGVjdXRlCi0JCQkJCQl0aGUgY29tbWFuZCAqLwotI2RlZmluZSBNQ0NfU1RBVFVTX1FVRVVFX0ZMVVNISU5HICAgICAgICg0KQkvKiBUaGUgY29tbWFuZCBpcyBjb21wbGV0aW5nCi0JCQkJCQliZWNhdXNlIHRoZSBxdWV1ZSB3YXMKLQkJCQkJCWdldHRpbmcgZmx1c2hlZCAqLwotI2RlZmluZSBNQ0NfU1RBVFVTX0RNQV9GQUlMRUQgICAgICAgICAgICg1KQkvKiBUaGUgY29tbWFuZCBpcyBjb21wbGV0aW5nCi0JCQkJCQl3aXRoIGEgRE1BIGVycm9yICovCi0KLS8qCi0gKiAtLS0gTUdNVF9FUlJPUl9DT0RFUyAtLS0KLSAqIEVycm9yIENvZGVzIHJldHVybmVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIEZXQ01EIHJlc3BvbnNlIGhlYWRlcgotICovCi0jZGVmaW5lIE1HTVRfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgKDApCS8qIFRoZSBGV0NNRCBjb21wbGV0ZWQKLQkJCQkJCXdpdGhvdXQgZXJyb3JzICovCi0jZGVmaW5lIE1HTVRfU1RBVFVTX0ZBSUxFRCAgICAgICAgICAgICAgKDEpCS8qIEVycm9yIHN0YXR1cyBpbiB0aGUgU3RhdHVzCi0JCQkJCQlmaWVsZCBvZiAgdGhlCi0JCQkJCQlzdHJ1Y3QgRldDTURfUkVTUE9OU0VfSEVBREVSICovCi0jZGVmaW5lIE1HTVRfU1RBVFVTX0lMTEVHQUxfUkVRVUVTVCAgICAgKDIpCS8qIEludmFsaWQgRldDTUQgb3Bjb2RlICovCi0jZGVmaW5lIE1HTVRfU1RBVFVTX0lMTEVHQUxfRklFTEQgICAgICAgKDMpCS8qIEludmFsaWQgcGFyYW1ldGVyIGluCi0JCQkJCQl0aGUgRldDTUQgIHBheWxvYWQgKi8KLQotI2VuZGlmIC8qIF9fZndjbWRfb3Bjb2Rlc19hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX3R5cGVzX2JtYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF90eXBlc19ibWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMjE3YWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX3R5cGVzX2JtYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19md2NtZF90eXBlc19ibWFwX2hfXwotI2RlZmluZSBfX2Z3Y21kX3R5cGVzX2JtYXBfaF9fCi0KLS8qIE1BQyBhZGRyZXNzIGZvcm1hdCAgKi8KLXN0cnVjdCBNQUNfQUREUkVTU19GT1JNQVQgewotCXUxNiBTaXplT2ZTdHJ1Y3R1cmU7Ci0JdTggTUFDQWRkcmVzc1s2XTsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZiAvKiBfX2Z3Y21kX3R5cGVzX2JtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvaG9zdF9zdHJ1Y3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ob3N0X3N0cnVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGU2NzIyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ob3N0X3N0cnVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19ob3N0X3N0cnVjdF9hbWFwX2hfXwotI2RlZmluZSBfX2hvc3Rfc3RydWN0X2FtYXBfaF9fCi0jaW5jbHVkZSAiYmVfY20uaCIKLSNpbmNsdWRlICJiZV9jb21tb24uaCIKLSNpbmNsdWRlICJkZXNjcmlwdG9ycy5oIgotCi0vKiAtLS0gRVFfQ09NUExFVElPTl9NQUpPUl9DT0RFX0VOVU0gLS0tICovCi0jZGVmaW5lIEVRX01BSk9SX0NPREVfQ09NUExFVElPTiAgICAgICAgKDApCS8qIENvbXBsZXRpb24gZXZlbnQgb24gYSAqLwotCQkJCQkJICAvKiBxY29tcGxldGlvbiB1ZXVlLiAqLwotI2RlZmluZSBFUV9NQUpPUl9DT0RFX0VUSCAgICAgICAgICAgICAgICgxKQkvKiBBZmZpbGlhdGVkIEV0aGVybmV0IEV2ZW50LiAqLwotI2RlZmluZSBFUV9NQUpPUl9DT0RFX1JFU0VSVkVEICAgICAgICAgICgyKQkvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBFUV9NQUpPUl9DT0RFX1JETUEgICAgICAgICAgICAgICgzKQkvKiBBZmZpbGlhdGVkIFJETUEgRXZlbnQuICovCi0jZGVmaW5lIEVRX01BSk9SX0NPREVfSVNDU0kgICAgICAgICAgICAgKDQpCS8qIEFmZmlsaWF0ZWQgSVNDU0kgRXZlbnQgKi8KLSNkZWZpbmUgRVFfTUFKT1JfQ09ERV9VTkFGRklMSUFURUQgICAgICAoNSkJLyogVW5hZmZpbGlhdGVkIEV2ZW50ICovCi0KLS8qIC0tLSBFUV9DT01QTEVUSU9OX01JTk9SX0NPREVfRU5VTSAtLS0gKi8KLSNkZWZpbmUgRVFfTUlOT1JfQ09ERV9DT01QTEVUSU9OICAgICAgICAoMCkJLyogQ29tcGxldGlvbiBldmVudCBvbiBhICovCi0JCQkJCQkgIC8qIGNvbXBsZXRpb24gcXVldWUuICovCi0jZGVmaW5lIEVRX01JTk9SX0NPREVfT1RIRVIgICAgICAgICAgICAgKDEpCS8qIE90aGVyIEV2ZW50IChUQkQpLiAqLwotCi0vKiBRdWV1ZSBFbnRyeSBEZWZpbml0aW9uIGZvciBhbGwgNCBieXRlIGV2ZW50IHF1ZXVlIHR5cGVzLiAqLwotc3RydWN0IEJFX0VRX0VOVFJZX0FNQVAgewotCXU4IFZhbGlkOwkJLyogRFdPUkQgMCAqLwotCXU4IE1ham9yQ29kZVszXTsJLyogRFdPUkQgMCAqLwotCXU4IE1pbm9yQ29kZVsxMl07CS8qIERXT1JEIDAgKi8KLQl1OCBSZXNvdXJjZUlEWzE2XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBFUV9FTlRSWV9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKgotICogLS0tIEVUSF9FVkVOVF9DT0RFIC0tLQotICogVGhlc2UgY29kZXMgYXJlIHJldHVybmVkIGJ5IHRoZSBNUFUgd2hlbiBvbmUgb2YgdGhlc2UgZXZlbnRzIGhhcyBvY2N1cnJlZCwKLSAqIGFuZCB0aGUgZXZlbnQgaXMgY29uZmlndXJlZCB0byByZXBvcnQgdG8gYW4gRXZlbnQgUXVldWUgd2hlbiBhbiBldmVudAotICogaXMgZGV0ZWN0ZWQuCi0gKi8KLSNkZWZpbmUgRVRIX0VRX0xJTktfU1RBVFVTICAgICAgICAgICAgICAoMCkJLyogTGluayBzdGF0dXMgY2hhbmdlIGV2ZW50ICovCi0JCQkJCQkgIC8qIGRldGVjdGVkLiAqLwotI2RlZmluZSBFVEhfRVFfV0FURVJNQVJLICAgICAgICAgICAgICAgICgxKQkvKiB3YXRlcm1hcmsgZXZlbnQgZGV0ZWN0ZWQuICovCi0jZGVmaW5lIEVUSF9FUV9NQUdJQ19QS1QgICAgICAgICAgICAgICAgKDIpCS8qIG1hZ2ljIHBrdCBldmVudCBkZXRlY3RlZC4gKi8KLSNkZWZpbmUgRVRIX0VRX0FDUElfUEtUMCAgICAgICAgICAgICAgICAoMykJLyogQUNQSSBpbnRlcmVzdGluZyBwYWNrZXQgKi8KLQkJCQkJCSAgLyogZGV0ZWN0ZWQuICovCi0jZGVmaW5lIEVUSF9FUV9BQ1BJX1BLVDEgICAgICAgICAgICAgICAgKDMpCS8qIEFDUEkgaW50ZXJlc3RpbmcgcGFja2V0ICovCi0JCQkJCQkgIC8qIGRldGVjdGVkLiAqLwotI2RlZmluZSBFVEhfRVFfQUNQSV9QS1QyICAgICAgICAgICAgICAgICgzKQkvKiBBQ1BJIGludGVyZXN0aW5nIHBhY2tldCAqLwotCQkJCQkJICAvKiBkZXRlY3RlZC4gKi8KLSNkZWZpbmUgRVRIX0VRX0FDUElfUEtUMyAgICAgICAgICAgICAgICAoMykJLyogQUNQSSBpbnRlcmVzdGluZyBwYWNrZXQgKi8KLQkJCQkJCSAgLyogZGV0ZWN0ZWQuICovCi0KLS8qCi0gKiAtLS0gRVRIX1RYX0NPTVBMX1NUQVRVU19FTlVNIC0tLQotICogU3RhdHVzIGNvZGVzIGNvbnRhaW5lZCBpbiBFdGhlcm5ldCBUWCBjb21wbGV0aW9uIGRlc2NyaXB0b3JzLgotICovCi0jZGVmaW5lIEVUSF9DT01QX1ZBTElEICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIEVUSF9DT01QX0VSUk9SICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIEVUSF9DT01QX0lOVkFMSUQgICAgICAgICAgICAgICAgKDE1KQotCi0vKgotICogLS0tIEVUSF9UWF9DT01QTF9QT1JUX0VOVU0gLS0tCi0gKiBQb3J0IGluZGljYXRvciBjb250YWluZWQgaW4gRXRoZXJuZXQgVFggY29tcGxldGlvbiBkZXNjcmlwdG9ycy4KLSAqLwotI2RlZmluZSBFVEhfQ09NUF9QT1JUMCAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBFVEhfQ09NUF9QT1JUMSAgICAgICAgICAgICAgICAgICgxKQotI2RlZmluZSBFVEhfQ09NUF9NR01UICAgICAgICAgICAgICAgICAgICgyKQotCi0vKgotICogLS0tIEVUSF9UWF9DT01QTF9DVF9FTlVNIC0tLQotICogQ29tcGxldGlvbiB0eXBlIGluZGljYXRvciBjb250YWluZWQgaW4gRXRoZXJuZXQgVFggY29tcGxldGlvbiBkZXNjcmlwdG9ycy4KLSAqLwotI2RlZmluZSBFVEhfQ09NUF9FVEggICAgICAgICAgICAgICAgICAgICgwKQotCi0vKgotICogV29yayByZXF1ZXN0IGJsb2NrIHRoYXQgdGhlIGRyaXZlciBpc3N1ZXMgdG8gdGhlIGNoaXAgZm9yCi0gKiBFdGhlcm5ldCB0cmFuc21pc3Npb25zLiBBbGwgY29udHJvbCBmaWVsZHMgbXVzdCBiZSB2YWxpZCBpbiBlYWNoIFdSQiBmb3IKLSAqIGEgbWVzc2FnZS4gVGhlIGNvbnRyb2xsZXIsIGFzIHNwZWNpZmllZCBieSB0aGUgZmxhZ3MsIG9wdGlvbmFsbHkgd3JpdGVzCi0gKiBhbiBlbnRyeSB0byB0aGUgQ29tcGxldGlvbiBSaW5nIGFuZCBnZW5lcmF0ZSBhbiBldmVudC4KLSAqLwotc3RydWN0IEJFX0VUSF9XUkJfQU1BUCB7Ci0JdTggZnJhZ19wYV9oaVszMl07CS8qIERXT1JEIDAgKi8KLQl1OCBmcmFnX3BhX2xvWzMyXTsJLyogRFdPUkQgMSAqLwotCXU4IGNvbXBsZXRlOwkvKiBEV09SRCAyICovCi0JdTggZXZlbnQ7CQkvKiBEV09SRCAyICovCi0JdTggY3JjOwkJLyogRFdPUkQgMiAqLwotCXU4IGZvcndhcmQ7CQkvKiBEV09SRCAyICovCi0JdTggaXBzZWM7CQkvKiBEV09SRCAyICovCi0JdTggbWdtdDsJCS8qIERXT1JEIDIgKi8KLQl1OCBpcGNzOwkJLyogRFdPUkQgMiAqLwotCXU4IHVkcGNzOwkJLyogRFdPUkQgMiAqLwotCXU4IHRjcGNzOwkJLyogRFdPUkQgMiAqLwotCXU4IGxzbzsJCS8qIERXT1JEIDIgKi8KLQl1OCBsYXN0OwkJLyogRFdPUkQgMiAqLwotCXU4IHZsYW47CQkvKiBEV09SRCAyICovCi0JdTggZGJnWzNdOwkJLyogRFdPUkQgMiAqLwotCXU4IGhhc2hfdmFsWzNdOwkvKiBEV09SRCAyICovCi0JdTggbHNvX21zc1sxNF07CS8qIERXT1JEIDIgKi8KLQl1OCBmcmFnX2xlblsxNl07CS8qIERXT1JEIDMgKi8KLQl1OCB2bGFuX3RhZ1sxNl07CS8qIERXT1JEIDMgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgRVRIX1dSQl9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi0vKiBUaGlzIGlzIGFuIEV0aGVybmV0IHRyYW5zbWl0IGNvbXBsZXRpb24gZGVzY3JpcHRvciAqLwotc3RydWN0IEJFX0VUSF9UWF9DT01QTF9BTUFQIHsKLQl1OCB1c2VyX2J5dGVzWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IG53aF9ieXRlc1s4XTsJLyogRFdPUkQgMCAqLwotCXU4IGxzbzsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs3XTsJLyogRFdPUkQgMCAqLwotCXU4IHdyYl9pbmRleFsxNl07CS8qIERXT1JEIDEgKi8KLQl1OCBjdFsyXTsJCS8qIERXT1JEIDEgKi8KLQl1OCBwb3J0WzJdOwkJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQxWzhdOwkvKiBEV09SRCAxICovCi0JdTggc3RhdHVzWzRdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDJbMTZdOwkvKiBEV09SRCAyICovCi0JdTggcmluZ2lkWzExXTsJLyogRFdPUkQgMiAqLwotCXU4IGhhc2hfdmFsWzRdOwkvKiBEV09SRCAyICovCi0JdTggdmFsaWQ7CQkvKiBEV09SRCAyICovCi0JdTggcnN2ZDNbMzJdOwkvKiBEV09SRCAzICovCi19IF9fcGFja2VkOwotc3RydWN0IEVUSF9UWF9DT01QTF9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi0vKiBFdGhlcm5ldCBSZWNlaXZlIEJ1ZmZlciBkZXNjcmlwdG9yICovCi1zdHJ1Y3QgQkVfRVRIX1JYX0RfQU1BUCB7Ci0JdTggZnJhZ3BhX2hpWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IGZyYWdwYV9sb1szMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgRVRIX1JYX0RfQU1BUCB7Ci0JdTMyIGR3WzJdOwotfTsKLQotLyogVGhpcyBpcyBhbiBFdGhlcm5ldCBSZWNlaXZlIENvbXBsZXRpb24gRGVzY3JpcHRvciAqLwotc3RydWN0IEJFX0VUSF9SWF9DT01QTF9BTUFQIHsKLQl1OCB2bGFuX3RhZ1sxNl07CS8qIERXT1JEIDAgKi8KLQl1OCBwa3RzaXplWzE0XTsJLyogRFdPUkQgMCAqLwotCXU4IHBvcnQ7CQkvKiBEV09SRCAwICovCi0JdTggcnN2ZDA7CQkvKiBEV09SRCAwICovCi0JdTggZXJyOwkJLyogRFdPUkQgMSAqLwotCXU4IHJzc2hwOwkJLyogRFdPUkQgMSAqLwotCXU4IGlwZjsJCS8qIERXT1JEIDEgKi8KLQl1OCB0Y3BmOwkJLyogRFdPUkQgMSAqLwotCXU4IHVkcGY7CQkvKiBEV09SRCAxICovCi0JdTggaXBja3NtOwkJLyogRFdPUkQgMSAqLwotCXU4IHRjcGNrc207CQkvKiBEV09SRCAxICovCi0JdTggdWRwY2tzbTsJCS8qIERXT1JEIDEgKi8KLQl1OCBtYWNkc3RbNl07CS8qIERXT1JEIDEgKi8KLQl1OCB2dHA7CQkvKiBEV09SRCAxICovCi0JdTggdnRtOwkJLyogRFdPUkQgMSAqLwotCXU4IGZyYWduZHhbMTBdOwkvKiBEV09SRCAxICovCi0JdTggY3RbMl07CQkvKiBEV09SRCAxICovCi0JdTggaXBzZWM7CQkvKiBEV09SRCAxICovCi0JdTggbnVtZnJhZ3NbM107CS8qIERXT1JEIDEgKi8KLQl1OCByc3ZkMVszMV07CS8qIERXT1JEIDIgKi8KLQl1OCB2YWxpZDsJCS8qIERXT1JEIDIgKi8KLQl1OCByc3NoYXNoWzMyXTsJLyogRFdPUkQgMyAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBFVEhfUlhfQ09NUExfQU1BUCB7Ci0JdTMyIGR3WzRdOwotfTsKLQotI2VuZGlmIC8qIF9faG9zdF9zdHJ1Y3RfYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9od2xpYi5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2h3bGliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZWRmNGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2h3bGliLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotI2lmbmRlZiBfX2h3bGliX2hfXwotI2RlZmluZSBfX2h3bGliX2hfXwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQotI2luY2x1ZGUgInJlZ21hcC5oIgkJLyogc3JjZ2VuIGFycmF5IG1hcCBvdXRwdXQgKi8KLQotI2luY2x1ZGUgImFzeW5jbWVzZy5oIgotI2luY2x1ZGUgImZ3Y21kX29wY29kZXMuaCIKLSNpbmNsdWRlICJwb3N0X2NvZGVzLmgiCi0jaW5jbHVkZSAiZndjbWRfbWNjLmgiCi0KLSNpbmNsdWRlICJmd2NtZF90eXBlc19ibWFwLmgiCi0jaW5jbHVkZSAiZndjbWRfY29tbW9uX2JtYXAuaCIKLSNpbmNsdWRlICJmd2NtZF9ldGhfYm1hcC5oIgotI2luY2x1ZGUgImJlc3RhdHVzLmgiCi0vKgotICoKLSAqIE1hY3JvcyBmb3IgcmVhZGluZy93cml0aW5nIGEgcHJvdGVjdGlvbiBkb21haW4gb3IgQ1NSIHJlZ2lzdGVycwotICogaW4gQmxhZGVFbmdpbmUuCi0gKi8KLSNkZWZpbmUgUERfUkVBRChmbywgZmllbGQpCWlvcmVhZDMyKChmbyktPmRiX3ZhICsgXAotCQlvZmZzZXRvZihzdHJ1Y3QgQkVfUFJPVEVDVElPTl9ET01BSU5fREJNQVBfQU1BUCwgZmllbGQpLzgpCi0KLSNkZWZpbmUgUERfV1JJVEUoZm8sIGZpZWxkLCB2YWwpIGlvd3JpdGUzMih2YWwsIChmbyktPmRiX3ZhICsgXAotCQlvZmZzZXRvZihzdHJ1Y3QgQkVfUFJPVEVDVElPTl9ET01BSU5fREJNQVBfQU1BUCwgZmllbGQpLzgpCi0KLSNkZWZpbmUgQ1NSX1JFQUQoZm8sIGZpZWxkKQlpb3JlYWQzMigoZm8pLT5jc3JfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9CTEFERV9FTkdJTkVfQ1NSTUFQX0FNQVAsIGZpZWxkKS84KQotCi0jZGVmaW5lIENTUl9XUklURShmbywgZmllbGQsIHZhbCkJaW93cml0ZTMyKHZhbCwgKGZvKS0+Y3NyX3ZhICsgXAotCQlvZmZzZXRvZihzdHJ1Y3QgQkVfQkxBREVfRU5HSU5FX0NTUk1BUF9BTUFQLCBmaWVsZCkvOCkKLQotI2RlZmluZSBQQ0lDRkcwX1JFQUQoZm8sIGZpZWxkKQlpb3JlYWQzMigoZm8pLT5wY2lfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9QQ0lDRkcwX0NTUk1BUF9BTUFQLCBmaWVsZCkvOCkKLQotI2RlZmluZSBQQ0lDRkcwX1dSSVRFKGZvLCBmaWVsZCwgdmFsKQlpb3dyaXRlMzIodmFsLCAoZm8pLT5wY2lfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9QQ0lDRkcwX0NTUk1BUF9BTUFQLCBmaWVsZCkvOCkKLQotI2RlZmluZSBQQ0lDRkcxX1JFQUQoZm8sIGZpZWxkKQlpb3JlYWQzMigoZm8pLT5wY2lfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9QQ0lDRkcxX0NTUk1BUF9BTUFQLCBmaWVsZCkvOCkKLQotI2RlZmluZSBQQ0lDRkcxX1dSSVRFKGZvLCBmaWVsZCwgdmFsKQlpb3dyaXRlMzIodmFsLCAoZm8pLT5wY2lfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9QQ0lDRkcxX0NTUk1BUF9BTUFQLCBmaWVsZCkvOCkKLQotI2lmZGVmIEJFX0RFQlVHCi0jZGVmaW5lIEFTU0VSVChjKSAgICAgICBCVUdfT04oIShjKSk7Ci0jZWxzZQotI2RlZmluZSBBU1NFUlQoYykKLSNlbmRpZgotCi0vKiBkZWJ1ZyBsZXZlbHMgKi8KLWVudW0gQkVfREVCVUdfTEVWRUxTIHsKLQlETF9BTFdBWVMgPSAwLAkJLyogY2Fubm90IGJlIG1hc2tlZCAqLwotCURMX0VSUiA9IDB4MSwJCS8qIGVycm9ycyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlETF9XQVJOID0gMHgyLAkJLyogc29tZXRoaW5nIHF1ZXN0aW9uYWJsZS4KLQkJCQkgICByZWNvdmVyYWJsZSBlcnJvcnMgKi8KLQlETF9OT1RFID0gMHg0LAkJLyogaW5mcmVxdWVudCwgaW1wb3J0YW50IGRlYnVnIGluZm8gKi8KLQlETF9JTkZPID0gMHg4LAkJLyogZGVidWcgaW5mb3JtYXRpb24gKi8KLQlETF9WRVJCT1NFID0gMHgxMCwJLyogZGV0YWlsZWQgaW5mbywgc3VjaCBhcyBidWZmZXIgdHJhY2VzICovCi0JQkVfRExfTUlOX1ZBTFVFID0gMHgxLAkvKiB0aGlzIGlzIHRoZSBtaW4gdmFsdWUgdXNlZCAqLwotCUJFX0RMX01BWF9WQUxVRSA9IDB4ODAJLyogdGhpcyBpcyB0aGUgaGlnaGVzZXQgdmFsdWUgdXNlZCAqLwotfSA7Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgdHJhY2VfbGV2ZWw7Ci0KLSNkZWZpbmUgVFJBQ0UobG0sIGZtdCwgYXJncy4uLikgIHsJCQkJXAotCQlpZiAodHJhY2VfbGV2ZWwgJiBsbSkgewkJCQlcCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIkJFOiAlczolZCBcbiIgZm10LAlcCi0JCQlfX0ZJTEVfXyAsIF9fTElORV9fICwgIyMgYXJncyk7CQlcCi0JCX0JCQkJCQlcCi0JfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZV90cmFjZV9zZXRfbGV2ZWwodW5zaWduZWQgaW50IGxldmVsKQotewotCXVuc2lnbmVkIGludCBvbGRfbGV2ZWwgPSB0cmFjZV9sZXZlbDsKLQl0cmFjZV9sZXZlbCA9IGxldmVsOwotCXJldHVybiBvbGRfbGV2ZWw7Ci19Ci0KLSNkZWZpbmUgYmVfdHJhY2VfZ2V0X2xldmVsKCkgCXRyYWNlX2xldmVsCi0vKgotICogUmV0dXJucyBudW1iZXIgb2YgcGFnZXMgc3Bhbm5lZCBieSB0aGUgc2l6ZSBvZiBkYXRhCi0gKiBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4KLSAqLwotI2RlZmluZSBQQUdFU19TUEFOTkVEKF9hZGRyZXNzLCBfc2l6ZSkgXAotICAgKCh1MzIpKCgoKHNpemVfdCkoX2FkZHJlc3MpICYgKFBBR0VfU0laRSAtIDEpKSArIFwKLQkJKF9zaXplKSArIChQQUdFX1NJWkUgLSAxKSkgPj4gUEFHRV9TSElGVCkpCi0vKiBCeXRlIG9mZnNldCBpbnRvIHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYWRkcmVzcyAqLwotI2RlZmluZSBPRkZTRVRfSU5fUEFHRShfYWRkcl8pICgoc2l6ZV90KShfYWRkcl8pICYgKFBBR0VfU0laRS0xKSkKLQotLyoKLSAqIGNpcmN1bGFyIHN1YnRyYWN0LgotICogUmV0dXJucyBhIC0gYiBhc3N1bWluZyBhIGNpcmN1bGFyIG51bWJlciBzeXN0ZW0sIHdoZXJlIGEgYW5kIGIgYXJlCi0gKiBpbiByYW5nZSAoMCwgbWF4VmFsdWUtMSkuIElmIGE9PWIsIHplcm8gaXMgcmV0dXJuZWQgc28gdGhlCi0gKiBoaWdoZXN0IHZhbHVlIHBvc3NpYmxlIHdpdGggdGhpcyBzdWJ0cmFjdGlvbiBpcyBtYXhWYWx1ZS0xLgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBiZV9zdWJjKHUzMiBhLCB1MzIgYiwgdTMyIG1heCkKLXsKLQlBU1NFUlQoYSA8PSBtYXggJiYgYiA8PSBtYXgpOwotCUFTU0VSVChtYXggPiAwKTsKLQlyZXR1cm4gYSA+PSBiID8gKGEgLSBiKSA6IChtYXggLSBiICsgYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGJlX2FkZGModTMyIGEsIHUzMiBiLCB1MzIgbWF4KQotewotCUFTU0VSVChhIDwgbWF4KTsKLQlBU1NFUlQobWF4ID4gMCk7Ci0JcmV0dXJuIChtYXggLSBhID4gYikgPyAoYSArIGIpIDogKGIgKyBhIC0gbWF4KTsKLX0KLQotLyogZGVzY3JpcHRvciBmb3IgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHVzZWQgZm9yIHJpbmcgKi8KLXN0cnVjdCByaW5nX2Rlc2MgewotCXUzMiBsZW5ndGg7CS8qIGxlbmd0aCBpbiBieXRlcyAqLwotCXZvaWQgKnZhOyAJLyogdmlydHVhbCBhZGRyZXNzICovCi0JdTY0IHBhOwkJLyogYnVzIGFkZHJlc3MgKi8KLX0gOwotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgcmluZyBzaGFyZWQgYmV0d2VlbiBoYXJkd2FyZQotICogYW5kIHNvZnR3YXJlLiAgRWFjaCByaW5nIGlzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIGluIHRoZSB1bmNhY2hlZAotICogZXh0ZW5zaW9uIGFuZCBtYXBwZWQgaW50byBCbGFkZUVuZ2luZSdzIHVuaWZpZWQgdGFibGUuCi0gKi8KLXN0cnVjdCBtcF9yaW5nIHsKLQl1MzIgcGFnZXM7CQkvKiBxdWV1ZSBzaXplIGluIHBhZ2VzICovCi0JdTMyIGlkOwkJCS8qIHF1ZXVlIGlkIGFzc2lnbmVkIGJ5IGJla2xpYiAqLwotCXUzMiBudW07CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gcXVldWUgKi8KLQl1MzIgY2lkeDsJCS8qIGNvbnN1bWVyIGluZGV4ICovCi0JdTMyIHBpZHg7CQkvKiBwcm9kdWNlciBpbmRleCAtLSBub3QgdXNlZCBieSBtb3N0IHJpbmdzICovCi0JdTMyIGl0ZW1TaXplOwkJLyogc2l6ZSBpbiBieXRlcyBvZiBvbmUgb2JqZWN0ICovCi0KLQl2b2lkICp2YTsJCS8qIFRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHJpbmcuCi0JCQkJICAgVGhpcyBzaG91bGQgYmUgbGFzdCB0byBhbGxvdyAzMiAmIDY0Ci0JCQkJICAgYml0IGRlYnVnZ2VyIGV4dGVuc2lvbnMgdG8gd29yay4gKi8KLX0gOwotCi0vKi0tLS0tLS0tLS0tICBhbWFwIGJpdCBmaWxlZCBnZXQgLyBzZXQgbWFjcm9zIGFuZCBmdW5jdGlvbnMgLS0tLS0qLwotLyoKLSAqIFN0cnVjdHVyZXMgZGVmaW5lZCBpbiB0aGUgbWFwIGhlYWRlciBmaWxlcyAodW5kZXIgZncvYW1hcC8pIHdpdGggbmFtZXMKLSAqIGluIHRoZSBmb3JtYXQgQkVfPG5hbWU+X0FNQVAgYXJlIHBzZXVkbyBzdHJ1Y3R1cmVzIHdpdGggbWVtYmVycwotICogb2YgdHlwZSB1OC4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdGVtcGxhdGVzIHRoYXQgYXJlIHVzZWQgaW4KLSAqIGNvbmp1bnRpb24gd2l0aCB0aGUgc3RydWN0dXJlcyB3aXRoIG5hbWVzIGluIHRoZSBmb3JtYXQKLSAqIDxuYW1lPl9BTUFQIHRvIGNhbGN1bGF0ZSB0aGUgYml0IG1hc2tzIGFuZCBiaXQgb2Zmc2V0cyB0byBnZXQgb3Igc2V0Ci0gKiBiaXQgZmllbGRzIGluIHN0cnVjdHVyZXMuIFRoZSBzdHJ1Y3R1cmVzIDxuYW1lPl9BTUFQIGFyZSBhcnJheXMKLSAqIG9mIDMyIGJpdHMgd29yZHMgYW5kIGhhdmUgdGhlIGNvcnJlY3Qgc2l6ZS4gIFRoZSBmb2xsb3dpbmcgbWFjcm9zCi0gKiBwcm92aWRlIGNvbnZlbmllbnQgd2F5cyB0byBnZXQgYW5kIHNldCB0aGUgdmFyaW91cyBtZW1iZXJzCi0gKiBpbiB0aGUgc3RydWN0dXJlcyB3aXRob3V0IHVzaW5nIHN0cnVjY3R1cmVzIHdpdGggYml0IGZpZWxkcy4KLSAqIEFsd2F5cyB1c2UgdGhlIG1hY3JvcyBBTUFQX0dFVF9CSVRTX1BUUiBhbmQgQU1BUF9TRVRfQklUU19QVFIKLSAqIG1hY3JvcyB0byBleHRyYWN0IGFuZCBzZXQgdmFyaW91cyBtZW1iZXJzLgotICovCi0KLS8qCi0gKiBSZXR1cm5zIHRoZSBhIGJpdCBtYXNrIGZvciB0aGUgcmVnaXN0ZXIgdGhhdCBpcyBOT1Qgc2hpZnRlZCBpbnRvIGxvY2F0aW9uLgotICogVGhhdCBtZWFucyByZXR1cm4gdmFsdWVzIGFsd2F5cyBsb29rIGxpa2U6IDB4MSwgMHhGRiwgMHg3RkYsIGV0Yy4uLgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBhbWFwX21hc2sodTMyIGJpdF9zaXplKQotewotCXJldHVybiBiaXRfc2l6ZSA9PSAzMiA/IDB4RkZGRkZGRkYgOiAoMSA8PCBiaXRfc2l6ZSkgLSAxOwotfQotCi0jZGVmaW5lIEFNQVBfQklUX01BU0soX3N0cnVjdF8sIGZpZWxkKSAgICAgICBcCi0JYW1hcF9tYXNrKEFNQVBfQklUX1NJWkUoX3N0cnVjdF8sIGZpZWxkKSkKLQotLyoKLSAqIG5vbi1vcHRpbWl6ZWQgc2V0IGJpdHMgZnVuY3Rpb24uIEZpcnN0IGNsZWFycyB0aGUgYml0cyBhbmQgdGhlbiBhc3NpZ25zIHRoZW0uCi0gKiBUaGlzIGRvZXMgbm90IHJlcXVpcmUga25vd2xlZGdlIG9mIHRoZSBwYXJ0aWN1bGFyIERXT1JEIHlvdSBhcmUgc2V0dGluZy4KLSAqIGUuZy4gQU1BUF9TRVRfQklUU19QVFIgKHN0cnVjdCwgZmllbGQxLCAmY29udGV4dE1lbW9yeSwgMTIzKTsKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1hbWFwX3NldCh2b2lkICpwdHIsIHUzMiBkd19vZmZzZXQsIHUzMiBtYXNrLCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCi17Ci0JdTMyICpkdyA9ICh1MzIgKilwdHI7Ci0JKihkdyArIGR3X29mZnNldCkgJj0gfihtYXNrIDw8IG9mZnNldCk7Ci0JKihkdyArIGR3X29mZnNldCkgfD0gKG1hc2sgJiB2YWx1ZSkgPDwgb2Zmc2V0OwotfQotCi0jZGVmaW5lIEFNQVBfU0VUX0JJVFNfUFRSKF9zdHJ1Y3RfLCBmaWVsZCwgX3N0cnVjdFB0cl8sIHZhbCkJXAotCWFtYXBfc2V0KF9zdHJ1Y3RQdHJfLCBBTUFQX1dPUkRfT0ZGU0VUKF9zdHJ1Y3RfLCBmaWVsZCksXAotCQlBTUFQX0JJVF9NQVNLKF9zdHJ1Y3RfLCBmaWVsZCksCQkJXAotCQlBTUFQX0JJVF9PRkZTRVQoX3N0cnVjdF8sIGZpZWxkKSwgdmFsKQotLyoKLSAqIE5vbi1vcHRpbWl6ZWQgcm91dGluZSB0aGF0IGdldHMgdGhlIGJpdHMgd2l0aG91dCBrbm93aW5nIHRoZSBjb3JyZWN0IERXT1JELgotICogZS5nLiBmaWVsZFZhbHVlID0gQU1BUF9HRVRfQklUU19QVFIgKHN0cnVjdCwgZmllbGQxLCAmY29udGV4dE1lbW9yeSk7Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyCi1hbWFwX2dldCh2b2lkICpwdHIsIHUzMiBkd19vZmZzZXQsIHUzMiBtYXNrLCB1MzIgb2Zmc2V0KQotewotCXUzMiAqZHcgPSAodTMyICopcHRyOwotCXJldHVybiBtYXNrICYgKCooZHcgKyBkd19vZmZzZXQpID4+IG9mZnNldCk7Ci19Ci0jZGVmaW5lIEFNQVBfR0VUX0JJVFNfUFRSKF9zdHJ1Y3RfLCBmaWVsZCwgX3N0cnVjdFB0cl8pCQkJXAotCWFtYXBfZ2V0KF9zdHJ1Y3RQdHJfLCBBTUFQX1dPUkRfT0ZGU0VUKF9zdHJ1Y3RfLCBmaWVsZCksCVwKLQkJQU1BUF9CSVRfTUFTSyhfc3RydWN0XywgZmllbGQpLAkJCQlcCi0JCUFNQVBfQklUX09GRlNFVChfc3RydWN0XywgZmllbGQpKQotCi0vKiBSZXR1cm5zIDAtMzEgcmVwcmVzZW50aW5nIGJpdCBvZmZzZXQgd2l0aGluIGEgRFdPUkQgb2YgYSBiaXRmaWVsZC4gKi8KLSNkZWZpbmUgQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3RfLCBmaWVsZCkgICAgICAgICAgICAgICAgICBcCi0JKG9mZnNldG9mKHN0cnVjdCBCRV8gIyMgX3N0cnVjdF8gIyMgX0FNQVAsIGZpZWxkKSAlIDMyKQotCi0vKiBSZXR1cm5zIDAtbiByZXByZXNlbnRpbmcgRFdPUkQgb2Zmc2V0IG9mIGJpdGZpZWxkIHdpdGhpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBBTUFQX1dPUkRfT0ZGU0VUKF9zdHJ1Y3RfLCBmaWVsZCkgIFwKLQkJICAob2Zmc2V0b2Yoc3RydWN0IEJFXyAjIyBfc3RydWN0XyAjIyBfQU1BUCwgZmllbGQpLzMyKQotCi0vKiBSZXR1cm5zIHNpemUgb2YgYml0ZmllbGQgaW4gYml0cy4gKi8KLSNkZWZpbmUgQU1BUF9CSVRfU0laRShfc3RydWN0XywgZmllbGQpIFwKLQkJc2l6ZW9mKCgoc3RydWN0IEJFXyAjIyBfc3RydWN0XyAjIyBfQU1BUCopMCktPmZpZWxkKQotCi1zdHJ1Y3QgYmVfbWNjX3dyYl9yZXNwb25zZV9jb3B5IHsKLQl1MTYgbGVuZ3RoOwkJLyogYnl0ZXMgaW4gcmVzcG9uc2UgKi8KLQl1MTYgZndjbWRfb2Zmc2V0OwkvKiBvZmZzZXQgd2l0aGluIHRoZSB3cmIgb2YgdGhlIHJlc3BvbnNlICovCi0Jdm9pZCAqdmE7CQkvKiB1c2VyJ3MgdmEgdG8gY29weSByZXNwb25zZSBpbnRvICovCi0KLX0gOwotdHlwZWRlZiB2b2lkICgqbWNjX3dyYl9jcWVfY2FsbGJhY2spICh2b2lkICpjb250ZXh0LCBpbnQgc3RhdHVzLAotCQkJCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKm9wdGlvbmFsX3dyYik7Ci1zdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0IHsKLQotCW1jY193cmJfY3FlX2NhbGxiYWNrIGludGVybmFsX2NiOwkvKiBGdW5jdGlvbiB0byBjYWxsIG9uCi0JCQkJCQljb21wbGV0aW9uICovCi0Jdm9pZCAqaW50ZXJuYWxfY2JfY29udGV4dDsJLyogUGFyYW1ldGVyIHRvIHBhc3MKLQkJCQkJCSAgIHRvIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KLQotCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiOwkvKiBGdW5jdGlvbiB0byBjYWxsIG9uIGNvbXBsZXRpb24gKi8KLQl2b2lkICpjYl9jb250ZXh0OwkvKiBQYXJhbWV0ZXIgdG8gcGFzcyB0byBjb21wbGV0aW9uIGZ1bmN0aW9uICovCi0KLQlpbnQgKnVzZXJzX2ZpbmFsX3N0YXR1czsJLyogcG9pbnRlciB0byBhIGxvY2FsCi0JCQkJCQl2YXJpYWJsZSBmb3Igc3luY2hyb25vdXMKLQkJCQkJCWNvbW1hbmRzICovCi0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiOwkvKiBwb2ludGVyIHRvIG9yaWdpbmFsIHdyYiBmb3IgZW1iZWRkZWQKLQkJCQkJCWNvbW1hbmRzIG9ubHkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CS8qIGxpbmtzIGNvbnRleHQgc3RydWN0cyB0b2dldGhlciBpbgotCQkJCSAgIGZyZWUgbGlzdCAqLwotCi0Jc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSBjb3B5OwkvKiBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvcHkKLQkJCQkJICAgZW1iZWRkZWQgcmVzcG9uc2UgdG8gdXNlcidzIHZhICovCi0KLSNpZiBkZWZpbmVkKEJFX0RFQlVHKQotCXUxNiBzdWJzeXN0ZW0sIG9wY29kZTsJLyogVHJhY2sgdGhpcyBGV0NNRCBmb3IgZGVidWcgYnVpbGRzLiAqLwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKnJpbmdfd3JiOwotCXUzMiBjb25zdW1lZF9jb3VudDsKLSNlbmRpZgotfSA7Ci0KLS8qCi0gICAgUmVwcmVzZW50cyBhIGZ1bmN0aW9uIG9iamVjdCBmb3IgbmV0d29yayBvciBzdG9yYWdlLiAgVGhpcwotICAgIGlzIHVzZWQgdG8gbWFuYWdlIHBlci1mdW5jdGlvbiByZXNvdXJjZXMgbGlrZSBNQ0MgQ1FzLCBldGMuCi0qLwotc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCB7Ci0KLQl1MzIgbWFnaWM7CQkvKiE8IG1hZ2ljIGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24uICovCi0KLQkvKiBQQ0kgQkFSIG1hcHBlZCBhZGRyZXNzZXMgKi8KLQl1OCBfX2lvbWVtICpjc3JfdmE7CS8qIENTUiAqLwotCXU4IF9faW9tZW0gKmRiX3ZhOwkvKiBEb29yIEJlbGwgKi8KLQl1OCBfX2lvbWVtICpwY2lfdmE7CS8qIFBDSSBjb25maWcgc3BhY2UgKi8KLQl1MzIgZW11bGF0ZTsJCS8qIGlmIHNldCwgTVBVIGlzIG5vdCBhdmFpbGFibGUuCi0JCQkJICBFbXVsYXRlIGV2ZXJ5dGhpbmcuICAgICAqLwotCXUzMiBwZW5kX3F1ZXVlX2RyaXZpbmc7CS8qIGlmIHNldCwgZHJpdmUgdGhlIHF1ZXVlZCBXUkJzCi0JCQkJICAgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBXUkIgbG9jayAqLwotCi0Jc3BpbmxvY2tfdCBwb3N0X2xvY2s7CS8qIGxvY2sgZm9yIHZlcmlmeWluZyBvbmUgdGhyZWFkIHBvc3Rpbmcgd3JicyAqLwotCXNwaW5sb2NrX3QgY3FfbG9jazsJLyogbG9jayBmb3IgdmVyaWZ5aW5nIG9uZSB0aHJlYWQKLQkJCQkgICBwcm9jZXNzaW5nIGNxICovCi0Jc3BpbmxvY2tfdCBtY2NfY29udGV4dF9sb2NrOwkvKiBsb2NrIGZvciBwcm90ZWN0aW5nIG1jYwotCQkJCQkgICBjb250ZXh0IGZyZWUgbGlzdCAqLwotCXVuc2lnbmVkIGxvbmcgcG9zdF9pcnE7Ci0JdW5zaWduZWQgbG9uZyBjcV9pcnE7Ci0KLQl1MzIgdHlwZTsKLQl1MzIgcGNpX2Z1bmN0aW9uX251bWJlcjsKLQotCXN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2M7CS8qIG1jYyByaW5ncy4gKi8KLQotCXN0cnVjdCB7Ci0JCXN0cnVjdCBNQ0NfTUFJTEJPWF9BTUFQICp2YTsJLyogVkEgdG8gdGhlIG1haWxib3ggKi8KLQkJdTY0IHBhOwkvKiBQQSB0byB0aGUgbWFpbGJveCAqLwotCQl1MzIgbGVuZ3RoOwkvKiBieXRlIGxlbmd0aCBvZiBtYWlsYm94ICovCi0KLQkJLyogT25lIGRlZmF1bHQgY29udGV4dCBzdHJ1Y3QgdXNlZCBmb3IgcG9zdGluZyBhdAotCQkgKiBsZWFzdCBvbmUgTUNDX1dSQgotCQkgKi8KLQkJc3RydWN0IGJlX21jY193cmJfY29udGV4dCBkZWZhdWx0X2NvbnRleHQ7Ci0JCWJvb2wgZGVmYXVsdF9jb250ZXh0X2FsbG9jYXRlZDsKLQl9IG1haWxib3g7Ci0KLQlzdHJ1Y3QgewotCi0JCS8qIFdha2Ugb24gbGFucyBjb25maWd1cmVkLiAqLwotCQl1MzIgd29sX2JpdG1hc2s7CS8qIGJpdHMgMCwxLDIsMyBhcmUgc2V0IGlmCi0JCQkJCSAgIGNvcnJlc3BvbmRpbmcgaW5kZXggaXMgZW5hYmxlZCAqLwotCX0gY29uZmlnOwotCi0KLQlzdHJ1Y3QgQkVfRklSTVdBUkVfQ09ORklHIGZ3X2NvbmZpZzsKLX0gOwotCi0vKgotICAgICAgUmVwcmVzZW50cyBhbiBFdmVudCBRdWV1ZQotKi8KLXN0cnVjdCBiZV9lcV9vYmplY3QgewotCXUzMiBtYWdpYzsKLQlhdG9taWNfdCByZWZfY291bnQ7Ci0KLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwYXJlbnRfZnVuY3Rpb247Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGVxX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjcV9saXN0X2hlYWQ7Ci0KLQl1MzIgZXFfaWQ7Ci0Jdm9pZCAqY2JfY29udGV4dDsKLQotfSA7Ci0KLS8qCi0gICAgTWFuYWdlcyBhIGNvbXBsZXRpb24gcXVldWUKLSovCi1zdHJ1Y3QgYmVfY3Ffb2JqZWN0IHsKLQl1MzIgbWFnaWM7Ci0JYXRvbWljX3QgcmVmX2NvdW50OwotCi0Jc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGFyZW50X2Z1bmN0aW9uOwotCXN0cnVjdCBiZV9lcV9vYmplY3QgKmVxX29iamVjdDsKLQotCXN0cnVjdCBsaXN0X2hlYWQgY3FfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGNxbGlzdF9mb3JfZXE7Ci0KLQl2b2lkICp2YTsKLQl1MzIgbnVtX2VudHJpZXM7Ci0KLQl2b2lkICpjYl9jb250ZXh0OwotCi0JdTMyIGNxX2lkOwotCi19IDsKLQotLyoKLSAgICBNYW5hZ2VzIGFuIGV0aGVybmV0IHNlbmQgcXVldWUKLSovCi1zdHJ1Y3QgYmVfZXRoc3Ffb2JqZWN0IHsKLQl1MzIgbWFnaWM7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwYXJlbnRfZnVuY3Rpb247Ci0Jc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0OwotCXUzMiBiaWQ7Ci0KLX0gOwotCi0vKgotQGJyaWVmCi0gICAgTWFuYWdlcyBhbiBldGhlcm5ldCByZWNlaXZlIHF1ZXVlCi0qLwotc3RydWN0IGJlX2V0aHJxX29iamVjdCB7Ci0JdTMyIG1hZ2ljOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwYXJlbnRfZnVuY3Rpb247Ci0JdTMyIHJpZDsKLQlzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3Q7Ci0Jc3RydWN0IGJlX2NxX29iamVjdCAqcnNzX2NxX29iamVjdFs0XTsKLQotfSA7Ci0KLS8qCi0gICAgTWFuYWdlcyBhbiBNQ0MKLSovCi10eXBlZGVmIHZvaWQgKCptY2NfYXN5bmNfZXZlbnRfY2FsbGJhY2spICh2b2lkICpjb250ZXh0LCB1MzIgZXZlbnRfY29kZSwKLQkJCQl2b2lkICpldmVudCk7Ci1zdHJ1Y3QgYmVfbWNjX29iamVjdCB7Ci0JdTMyIG1hZ2ljOwotCi0Jc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGFyZW50X2Z1bmN0aW9uOwotCXN0cnVjdCBsaXN0X2hlYWQgbWNjX2xpc3Q7Ci0KLQlzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3Q7Ci0KLQkvKiBBc3luYyBldmVudCBjYWxsYmFjayBmb3IgTUNDIENRLiAqLwotCW1jY19hc3luY19ldmVudF9jYWxsYmFjayBhc3luY19jYjsKLQl2b2lkICphc3luY19jb250ZXh0OwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqYmFzZTsKLQkJdTMyIG51bTsKLQkJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2hlYWQ7Ci0JfSB3cmJfY29udGV4dDsKLQotCXN0cnVjdCB7Ci0JCXN0cnVjdCByaW5nX2Rlc2MgKnJkOwotCQlzdHJ1Y3QgbXBfcmluZyByaW5nOwotCX0gc3E7Ci0KLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgbXBfcmluZyByaW5nOwotCX0gY3E7Ci0KLQl1MzIgcHJvY2Vzc2luZzsJCS8qIGZsYWcgaW5kaWNhdGluZyB0aGF0IG9uZSB0aHJlYWQKLQkJCQkgICBpcyBwcm9jZXNzaW5nIENRICovCi0JdTMyIHJlYXJtOwkJLyogZG9vcmJlbGwgcmVhcm0gc2V0dGluZyB0byBtYWtlCi0JCQkJICAgc3VyZSB0aGUgYWN0aXZlIHByb2Nlc3NpbmcgdGhyZWFkICovCi0JLyogcmVhcm1zIHRoZSBDUSBpZiBhbnkgb2YgdGhlIHRocmVhZHMgcmVxdWVzdGVkIGl0LiAqLwotCi0Jc3RydWN0IGxpc3RfaGVhZCBiYWNrbG9nOwotCXUzMiBiYWNrbG9nX2xlbmd0aDsKLQl1MzIgZHJpdmluZ19iYWNrbG9nOwotCXUzMiBjb25zdW1lZF9pbmRleDsKLQotfSA7Ci0KLQotLyogUXVldWUgY29udGV4dCBoZWFkZXIgLS0gdGhlIHJlcXVpcmVkIHNvZnR3YXJlIGluZm9ybWF0aW9uIGZvcgotICogcXVldWVpbmcgYSBXUkIuCi0gKi8KLXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCB7Ci0JbWNjX3dyYl9jcWVfY2FsbGJhY2sgaW50ZXJuYWxfY2I7CS8qIEZ1bmN0aW9uIHRvIGNhbGwgb24KLQkJCQkJCSAgIGNvbXBsZXRpb24gKi8KLQl2b2lkICppbnRlcm5hbF9jYl9jb250ZXh0OwkvKiBQYXJhbWV0ZXIgdG8gcGFzcwotCQkJCQkJICAgdG8gY29tcGxldGlvbiBmdW5jdGlvbiAqLwotCi0JbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2I7CS8qIEZ1bmN0aW9uIHRvIGNhbGwgb24gY29tcGxldGlvbiAqLwotCXZvaWQgKmNiX2NvbnRleHQ7CS8qIFBhcmFtZXRlciB0byBwYXNzIHRvIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KLQotCXN0cnVjdCBiZV9tY2Nfd3JiX3Jlc3BvbnNlX2NvcHkgY29weTsJLyogT3B0aW9uYWwgcGFyYW1ldGVycyB0byBjb3B5Ci0JCQkJCSAgIGVtYmVkZGVkIHJlc3BvbnNlIHRvIHVzZXIncyB2YSAqLwotCXZvaWQgKm9wdGlvbmFsX2Z3Y21kX3ZhOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQl1MzIgYnl0ZXM7Ci19IDsKLQotLyoKLSAqIENvbW1vbiBNQ0MgV1JCIGhlYWRlciB0aGF0IGFsbCBjb21tYW5kcyByZXF1aXJlLgotICovCi1zdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgewotCXU4IHJzdmRbb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19XUkJfQU1BUCwgcGF5bG9hZCkvOF07Ci19IDsKLQotLyoKLSAqIEFsbCBub24gZW1iZWRkZWQgY29tbWFuZHMgc3VwcG9ydGVkIGJ5IGh3bGliIGZ1bmN0aW9ucyBvbmx5IGFsbG93Ci0gKiAxIFNHRS4gIFRoaXMgcXVldWUgY29udGV4dCBoYW5kbGVzIHRoZW0gYWxsLgotICovCi1zdHJ1Y3QgYmVfbm9uZW1iZWRkZWRfcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgTUNDX1NHRV9BTUFQIHNnZVsxXTsKLX0gOwotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBzcGVjaWZpYyBxdWV1ZSBzdHJ1Y3QgZm9yIGVhY2ggY29tbWFuZC4KLSAqICBUaGUgdXNlciBjb3VsZCBhbHdheXMgcHJvdmlkZSBhIGJlX2dlbmVyaWNfcV9jdHh0IGJ1dCB0aGlzIGlzIGEKLSAqICByYXRoZXIgbGFyZ2Ugc3RydWN0LiAgQnkgdXNpbmcgdGhlIHNwZWNpZmljIHN0cnVjdCwgbWVtb3J5IGNvbnN1bXB0aW9uCi0gKiAgY2FuIGJlIHJlZHVjZWQuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1zdHJ1Y3QgYmVfbGlua19zdGF0dXNfcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlkgZndjbWQ7Ci19IDsKLQotc3RydWN0IGJlX211bHRpY2FzdF9xX2N0eHQgewotCXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCBjb250ZXh0OwotCXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB3cmJfaGVhZGVyOwotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NVUxUSUNBU1RfU0VUIGZ3Y21kOwotfSA7Ci0KLQotc3RydWN0IGJlX3ZsYW5fcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfVkxBTl9DT05GSUcgZndjbWQ7Ci19IDsKLQotc3RydWN0IGJlX3Byb21pc2N1b3VzX3FfY3R4dCB7Ci0Jc3RydWN0IGJlX3F1ZXVlX2RyaXZlcl9jb250ZXh0IGNvbnRleHQ7Ci0Jc3RydWN0IGJlX21jY193cmJfaGVhZGVyIHdyYl9oZWFkZXI7Ci0Jc3RydWN0IEZXQ01EX0VUSF9QUk9NSVNDVU9VUyBmd2NtZDsKLX0gOwotCi1zdHJ1Y3QgYmVfZm9yY2VfZmFpbG92ZXJfcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0ZPUkNFX0ZBSUxPVkVSIGZ3Y21kOwotfSA7Ci0KLQotc3RydWN0IGJlX3J4Zl9maWx0ZXJfcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfUlhfRklMVEVSIGZ3Y21kOwotfSA7Ci0KLXN0cnVjdCBiZV9lcV9tb2RpZnlfZGVsYXlfcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX01PRElGWV9FUV9ERUxBWSBmd2NtZDsKLX0gOwotCi0vKgotICogVGhlIGdlbmVyaWMgY29udGV4dCBpcyB0aGUgbGFyZ2VzdCBzaXplIHRoYXQgd291bGQgYmUgcmVxdWlyZWQuCi0gKiBJdCBpcyB0aGUgc29mdHdhcmUgY29udGV4dCBwbHVzIGFuIGVudGlyZSBXUkIuCi0gKi8KLXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCB7Ci0Jc3RydWN0IGJlX3F1ZXVlX2RyaXZlcl9jb250ZXh0IGNvbnRleHQ7Ci0Jc3RydWN0IGJlX21jY193cmJfaGVhZGVyIHdyYl9oZWFkZXI7Ci0Jc3RydWN0IE1DQ19XUkJfUEFZTE9BRF9BTUFQIHBheWxvYWQ7Ci19IDsKLQotLyoKLSAqIFR5cGVzIGZvciB0aGUgQkVfUVVFVUVfQ09OVEVYVCBvYmplY3QuCi0gKi8KLSNkZWZpbmUgQkVfUVVFVUVfSU5WQUxJRAkoMCkKLSNkZWZpbmUgQkVfUVVFVUVfTElOS19TVEFUVVMJKDB4QTAwNikKLSNkZWZpbmUgQkVfUVVFVUVfRVRIX1NUQVRTCSgweEEwMDcpCi0jZGVmaW5lIEJFX1FVRVVFX1RQTV9TVEFUUwkoMHhBMDA4KQotI2RlZmluZSBCRV9RVUVVRV9UQ1BfU1RBVFMJKDB4QTAwOSkKLSNkZWZpbmUgQkVfUVVFVUVfTVVMVElDQVNUCSgweEEwMEEpCi0jZGVmaW5lIEJFX1FVRVVFX1ZMQU4JCSgweEEwMEIpCi0jZGVmaW5lIEJFX1FVRVVFX1JTUwkJKDB4QTAwQykKLSNkZWZpbmUgQkVfUVVFVUVfRk9SQ0VfRkFJTE9WRVIJKDB4QTAwRCkKLSNkZWZpbmUgQkVfUVVFVUVfUFJPTUlTQ1VPVVMJKDB4QTAwRSkKLSNkZWZpbmUgQkVfUVVFVUVfV0FLRV9PTl9MQU4JKDB4QTAwRikKLSNkZWZpbmUgQkVfUVVFVUVfTk9QCQkoMHhBMDEwKQotCi0vKiAtLS0gQkVfRlVOQ1RJT05fRU5VTSAtLS0gKi8KLSNkZWZpbmUgQkVfRlVOQ1RJT05fVFlQRV9JU0NTSSAgICAgICAgICAoMCkKLSNkZWZpbmUgQkVfRlVOQ1RJT05fVFlQRV9ORVRXT1JLICAgICAgICAoMSkKLSNkZWZpbmUgQkVfRlVOQ1RJT05fVFlQRV9BUk0gICAgICAgICAgICAoMikKLQotLyogLS0tIEJFX0VUSF9UWF9SSU5HX1RZUEVfRU5VTSAtLS0gKi8KLSNkZWZpbmUgQkVfRVRIX1RYX1JJTkdfVFlQRV9GT1JXQVJESU5HICAoMSkgCS8qIEV0aGVyIHJpbmcgZm9yIGZvcndhcmRpbmcgKi8KLSNkZWZpbmUgQkVfRVRIX1RYX1JJTkdfVFlQRV9TVEFOREFSRCAgICAoMikJLyogRXRoZXIgcmluZyBmb3Igc2VuZGluZyAqLwotCQkJCQkJLyogbmV0d29yayBwYWNrZXRzLiAqLwotI2RlZmluZSBCRV9FVEhfVFhfUklOR19UWVBFX0JPVU5EICAgICAgICgzKQkvKiBFdGhlcm5ldCByaW5nIGZvciBzZW5kaW5nICovCi0JCQkJCQkvKiBuZXR3b3JrIHBhY2tldHMsIGJvdW5kICovCi0JCQkJCQkvKiB0byBhIHBoeXNpY2FsIHBvcnQuICovCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICBBUEkgTUFDUk9TCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgQkVfRldDTURfTkFNRShfc2hvcnRfbmFtZV8pICAgICBzdHJ1Y3QgRldDTURfIyNfc2hvcnRfbmFtZV8KLSNkZWZpbmUgQkVfT1BDT0RFX05BTUUoX3Nob3J0X25hbWVfKSAgICBPUENPREVfIyNfc2hvcnRfbmFtZV8KLSNkZWZpbmUgQkVfU1VCU1lTVEVNX05BTUUoX3Nob3J0X25hbWVfKSBTVUJTWVNURU1fIyNfc2hvcnRfbmFtZV8KLQotCi0jZGVmaW5lIEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQoX3Bmb2JfLCBfd3JiXywgX3Nob3J0X25hbWVfKQlcCi0JKChCRV9GV0NNRF9OQU1FKF9zaG9ydF9uYW1lXykgKikJCQkJXAotCWJlX2Z1bmN0aW9uX3ByZXBhcmVfZW1iZWRkZWRfZndjbWQoX3Bmb2JfLCBfd3JiXywJXAotCQlzaXplb2YoQkVfRldDTURfTkFNRShfc2hvcnRfbmFtZV8pKSwJCVwKLQkJRklFTERfU0laRU9GKEJFX0ZXQ01EX05BTUUoX3Nob3J0X25hbWVfKSwgcGFyYW1zLnJlcXVlc3QpLCBcCi0JCUZJRUxEX1NJWkVPRihCRV9GV0NNRF9OQU1FKF9zaG9ydF9uYW1lXyksIHBhcmFtcy5yZXNwb25zZSksIFwKLQkJQkVfT1BDT0RFX05BTUUoX3Nob3J0X25hbWVfKSwJCQkJXAotCQlCRV9TVUJTWVNURU1fTkFNRShfc2hvcnRfbmFtZV8pKSk7Ci0KLSNkZWZpbmUgQkVfUFJFUEFSRV9OT05FTUJFRERFRF9GV0NNRChfcGZvYl8sIF93cmJfLCBfaXZhXywgX2lwYV8sIF9zaG9ydF9uYW1lXylcCi0JKChCRV9GV0NNRF9OQU1FKF9zaG9ydF9uYW1lXykgKikJCQkJXAotCWJlX2Z1bmN0aW9uX3ByZXBhcmVfbm9uZW1iZWRkZWRfZndjbWQoX3Bmb2JfLCBfd3JiXywgKF9pdmFfKSwgKF9pcGFfKSwgXAotCQlzaXplb2YoQkVfRldDTURfTkFNRShfc2hvcnRfbmFtZV8pKSwJCVwKLQkJRklFTERfU0laRU9GKEJFX0ZXQ01EX05BTUUoX3Nob3J0X25hbWVfKSwgcGFyYW1zLnJlcXVlc3QpLCBcCi0JCUZJRUxEX1NJWkVPRihCRV9GV0NNRF9OQU1FKF9zaG9ydF9uYW1lXyksIHBhcmFtcy5yZXNwb25zZSksIFwKLQkJQkVfT1BDT0RFX05BTUUoX3Nob3J0X25hbWVfKSwJCQkJXAotCQlCRV9TVUJTWVNURU1fTkFNRShfc2hvcnRfbmFtZV8pKSk7Ci0KLWludCBiZV9mdW5jdGlvbl9vYmplY3RfY3JlYXRlKHU4IF9faW9tZW0gKmNzcl92YSwgdTggX19pb21lbSAqZGJfdmEsCi0JdTggX19pb21lbSAqcGNpX3ZhLCB1MzIgZnVuY3Rpb25fdHlwZSwgc3RydWN0IHJpbmdfZGVzYyAqbWFpbGJveF9yZCwKLQkgIHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpOwotCi1pbnQgYmVfZnVuY3Rpb25fb2JqZWN0X2Rlc3Ryb3koc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYik7Ci1pbnQgYmVfZnVuY3Rpb25fY2xlYW51cChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKTsKLQotCi1pbnQgYmVfZnVuY3Rpb25fZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GV19WRVJTSU9OX1JFU1BPTlNFX1BBWUxPQUQgKmZ3X3ZlcnNpb24sCi0JbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQpOwotCi0KLWludCBiZV9lcV9tb2RpZnlfZGVsYXkoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJICAgdTMyIG51bV9lcSwgc3RydWN0IGJlX2VxX29iamVjdCAqKmVxX2FycmF5LAotCQkgICB1MzIgKmVxX2RlbGF5X2FycmF5LCBtY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkJICAgdm9pZCAqY2JfY29udGV4dCwKLQkJICAgc3RydWN0IGJlX2VxX21vZGlmeV9kZWxheV9xX2N0eHQgKnFfY3R4dCk7Ci0KLQotCi1pbnQgYmVfZXFfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JICAgICBzdHJ1Y3QgcmluZ19kZXNjICpyZCwgdTMyIGVxZV9zaXplLCB1MzIgbnVtX2VudHJpZXMsCi0JICAgICB1MzIgd2F0ZXJtYXJrLCB1MzIgdGltZXJfZGVsYXksIHN0cnVjdCBiZV9lcV9vYmplY3QgKmVxX29iamVjdCk7Ci0KLWludCBiZV9lcV9kZXN0cm95KHN0cnVjdCBiZV9lcV9vYmplY3QgKmVxKTsKLQotaW50IGJlX2NxX2NyZWF0ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCXN0cnVjdCByaW5nX2Rlc2MgKnJkLCB1MzIgbGVuZ3RoLAotCWJvb2wgc29saWNpdGVkX2V2ZW50YWJsZSwgYm9vbCBub19kZWxheSwKLQl1MzIgd21fdGhyZXNoLCBzdHJ1Y3QgYmVfZXFfb2JqZWN0ICplcV9vYmplY3QsCi0Jc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0KTsKLQotaW50IGJlX2NxX2Rlc3Ryb3koc3RydWN0IGJlX2NxX29iamVjdCAqY3EpOwotCi1pbnQgYmVfbWNjX3JpbmdfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgIHN0cnVjdCByaW5nX2Rlc2MgKnJkLCB1MzIgbGVuZ3RoLAotCQkgICBzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICpjb250ZXh0X2FycmF5LAotCQkgICB1MzIgbnVtX2NvbnRleHRfZW50cmllcywKLQkJICAgc3RydWN0IGJlX2NxX29iamVjdCAqY3EsIHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MpOwotaW50IGJlX21jY19yaW5nX2Rlc3Ryb3koc3RydWN0IGJlX21jY19vYmplY3QgKm1jY19vYmplY3QpOwotCi1pbnQgYmVfbWNjX3Byb2Nlc3NfY3Eoc3RydWN0IGJlX21jY19vYmplY3QgKm1jY19vYmplY3QsIGJvb2wgcmVhcm0pOwotCi1pbnQgYmVfbWNjX2FkZF9hc3luY19ldmVudF9jYWxsYmFjayhzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjX29iamVjdCwKLQkJbWNjX2FzeW5jX2V2ZW50X2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0KTsKLQotaW50IGJlX3BjaV9zb2Z0X3Jlc2V0KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpOwotCi0KLWludCBiZV9kcml2ZV9QT1NUKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpOwotCi0KLWludCBiZV9ldGhfc3FfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCXN0cnVjdCByaW5nX2Rlc2MgKnJkLCB1MzIgbGVuZ3RoX2luX2J5dGVzLAotCQl1MzIgdHlwZSwgdTMyIHVscCwgc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0LAotCQlzdHJ1Y3QgYmVfZXRoc3Ffb2JqZWN0ICpldGhfc3EpOwotCi1zdHJ1Y3QgYmVfZXRoX3NxX3BhcmFtZXRlcnMgewotCXUzMiBwb3J0OwotCXUzMiByc3ZkMFsyXTsKLX0gOwotCi1pbnQgYmVfZXRoX3NxX2NyZWF0ZV9leChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICAgc3RydWN0IHJpbmdfZGVzYyAqcmQsIHUzMiBsZW5ndGhfaW5fYnl0ZXMsCi0JCSAgICB1MzIgdHlwZSwgdTMyIHVscCwgc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0LAotCQkgICAgc3RydWN0IGJlX2V0aF9zcV9wYXJhbWV0ZXJzICpleF9wYXJhbWV0ZXJzLAotCQkgICAgc3RydWN0IGJlX2V0aHNxX29iamVjdCAqZXRoX3NxKTsKLWludCBiZV9ldGhfc3FfZGVzdHJveShzdHJ1Y3QgYmVfZXRoc3Ffb2JqZWN0ICpldGhfc3EpOwotCi1pbnQgYmVfZXRoX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCWJvb2wgdHhmY19lbmFibGUsIGJvb2wgcnhmY19lbmFibGUpOwotCi1pbnQgYmVfZXRoX2dldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCWJvb2wgKnR4ZmNfZW5hYmxlLCBib29sICpyeGZjX2VuYWJsZSk7Ci1pbnQgYmVfZXRoX3NldF9xb3Moc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwgdTMyIG1heF9icHMsIHUzMiBtYXhfcHBzKTsKLQotaW50IGJlX2V0aF9nZXRfcW9zKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsIHUzMiAqbWF4X2JwcywgdTMyICptYXhfcHBzKTsKLQotaW50IGJlX2V0aF9zZXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICAgICB1MzIgKnR4X2ZyYW1lX3NpemUsIHUzMiAqcnhfZnJhbWVfc2l6ZSk7Ci0KLWludCBiZV9ldGhfcnFfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSBzdHJ1Y3QgcmluZ19kZXNjICpyZCwgc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0LAotCQkgc3RydWN0IGJlX2NxX29iamVjdCAqYmNtY19jcV9vYmplY3QsCi0JCSBzdHJ1Y3QgYmVfZXRocnFfb2JqZWN0ICpldGhfcnEpOwotCi1pbnQgYmVfZXRoX3JxX2Rlc3Ryb3koc3RydWN0IGJlX2V0aHJxX29iamVjdCAqZXRoX3JxKTsKLQotaW50IGJlX2V0aF9ycV9kZXN0cm95X29wdGlvbnMoc3RydWN0IGJlX2V0aHJxX29iamVjdCAqZXRoX3JxLCBib29sIGZsdXNoLAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwgdm9pZCAqY2JfY29udGV4dCk7Ci1pbnQgYmVfZXRoX3JxX3NldF9mcmFnX3NpemUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJdTMyIG5ld19mcmFnX3NpemVfYnl0ZXMsIHUzMiAqYWN0dWFsX2ZyYWdfc2l6ZV9ieXRlcyk7Ci1pbnQgYmVfZXRoX3JxX2dldF9mcmFnX3NpemUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCQkJCXUzMiAqZnJhZ19zaXplX2J5dGVzKTsKLQotdm9pZCAqYmVfZnVuY3Rpb25fcHJlcGFyZV9lbWJlZGRlZF9md2NtZChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICBzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsCi0JCSAgIHUzMiBwYXlsb2FkX2xlbmd0aCwgdTMyIHJlcXVlc3RfbGVuZ3RoLAotCQkgICB1MzIgcmVzcG9uc2VfbGVuZ3RoLCB1MzIgb3Bjb2RlLCB1MzIgc3Vic3lzdGVtKTsKLXZvaWQgKmJlX2Z1bmN0aW9uX3ByZXBhcmVfbm9uZW1iZWRkZWRfZndjbWQoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsIHZvaWQgKmZ3Y21kX2hlYWRlcl92YSwgdTY0IGZ3Y21kX2hlYWRlcl9wYSwKLQl1MzIgcGF5bG9hZF9sZW5ndGgsIHUzMiByZXF1ZXN0X2xlbmd0aCwgdTMyIHJlc3BvbnNlX2xlbmd0aCwKLQl1MzIgb3Bjb2RlLCB1MzIgc3Vic3lzdGVtKTsKLQotCi1zdHJ1Y3QgTUNDX1dSQl9BTUFQICoKLWJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKTsKLQotaW50IGJlX3J4Zl9tYWNfYWRkcmVzc19yZWFkX3dyaXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JICAgICAgYm9vbCBwb3J0MSwgYm9vbCBtYWMxLCBib29sIG1nbXQsCi0JICAgICAgYm9vbCB3cml0ZSwgYm9vbCBwZXJtYW5lbnQsIHU4ICptYWNfYWRkcmVzcywKLQkgICAgICBtY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkgICAgICB2b2lkICpjYl9jb250ZXh0KTsKLQotaW50IGJlX3J4Zl9tdWx0aWNhc3RfY29uZmlnKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCQlib29sIHByb21pc2N1b3VzLCB1MzIgbnVtLCB1OCAqbWFjX3RhYmxlLAotCQkJbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCi0JCQl2b2lkICpjYl9jb250ZXh0LAotCQkJc3RydWN0IGJlX211bHRpY2FzdF9xX2N0eHQgKnFfY3R4dCk7Ci0KLWludCBiZV9yeGZfdmxhbl9jb25maWcoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkgICBib29sIHByb21pc2N1b3VzLCB1MzIgbnVtLCB1MTYgKnZsYW5fdGFnX2FycmF5LAotCSAgIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0LAotCSAgIHN0cnVjdCBiZV92bGFuX3FfY3R4dCAqcV9jdHh0KTsKLQotCi1pbnQgYmVfcnhmX2xpbmtfc3RhdHVzKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgIHN0cnVjdCBCRV9MSU5LX1NUQVRVUyAqbGlua19zdGF0dXMsCi0JCSAgIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAotCQkgICB2b2lkICpjYl9jb250ZXh0LAotCQkgICBzdHJ1Y3QgYmVfbGlua19zdGF0dXNfcV9jdHh0ICpxX2N0eHQpOwotCi0KLWludCBiZV9yeGZfcXVlcnlfZXRoX3N0YXRpc3RpY3Moc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJc3RydWN0IEZXQ01EX0VUSF9HRVRfU1RBVElTVElDUyAqdmFfZm9yX2Z3Y21kLAotCQl1NjQgcGFfZm9yX2Z3Y21kLCBtY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkJdm9pZCAqY2JfY29udGV4dCwKLQkJc3RydWN0IGJlX25vbmVtYmVkZGVkX3FfY3R4dCAqcV9jdHh0KTsKLQotaW50IGJlX3J4Zl9wcm9taXNjdW91cyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICBib29sIGVuYWJsZV9wb3J0MCwgYm9vbCBlbmFibGVfcG9ydDEsCi0JCSAgIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0LAotCQkgICBzdHJ1Y3QgYmVfcHJvbWlzY3VvdXNfcV9jdHh0ICpxX2N0eHQpOwotCi0KLWludCBiZV9yeGZfZmlsdGVyX2NvbmZpZyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICAgIHN0cnVjdCBOVFdLX1JYX0ZJTFRFUl9TRVRUSU5HUyAqc2V0dGluZ3MsCi0JCSAgICAgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCi0JCSAgICAgdm9pZCAqY2JfY29udGV4dCwKLQkJICAgICBzdHJ1Y3QgYmVfcnhmX2ZpbHRlcl9xX2N0eHQgKnFfY3R4dCk7Ci0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBpbnRlcm5hbCBmdW5jdGlvbnMgdXNlZCBieSBod2xpYgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotCi1pbnQgYmVfZnVuY3Rpb25fcmluZ19kZXN0cm95KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgICAgICB1MzIgaWQsIHUzMiByaW5nX3R5cGUsIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAotCQkgICAgICAgdm9pZCAqY2JfY29udGV4dCwKLQkJICAgICAgIG1jY193cmJfY3FlX2NhbGxiYWNrIGludGVybmFsX2NiLAotCQkgICAgICAgdm9pZCAqaW50ZXJuYWxfY2FsbGJhY2tfY29udGV4dCk7Ci0KLWludCBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiLAotCQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKnFfY3R4dCwKLQkJbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQsCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGludGVybmFsX2NiLAotCQl2b2lkICppbnRlcm5hbF9jYl9jb250ZXh0LCB2b2lkICpvcHRpb25hbF9md2NtZF92YSwKLQkJc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSAqcmVzcG9uc2VfY29weSk7Ci0KLWludCBiZV9mdW5jdGlvbl9xdWV1ZV9tY2Nfd3JiKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCQkgIHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqcV9jdHh0KTsKLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE1DQyBRVUVVRQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotaW50IGJlX21wdV9pbml0X21haWxib3goc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwgc3RydWN0IHJpbmdfZGVzYyAqcmQpOwotCi0KLXN0cnVjdCBNQ0NfV1JCX0FNQVAgKgotX2JlX21wdV9wZWVrX3Jpbmdfd3JiKHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MsIGJvb2wgZHJpdmluZ19xdWV1ZSk7Ci0KLXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKgotX2JlX21jY19hbGxvY2F0ZV93cmJfY29udGV4dChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKTsKLQotdm9pZCBfYmVfbWNjX2ZyZWVfd3JiX2NvbnRleHQoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCSBzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICpjb250ZXh0KTsKLQotaW50IF9iZV9tcHVfcG9zdF93cmJfbWFpbGJveChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCSBzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsIHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKndyYl9jb250ZXh0KTsKLQotaW50IF9iZV9tcHVfcG9zdF93cmJfcmluZyhzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjLAotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiwgc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqd3JiX2NvbnRleHQpOwotCi12b2lkIGJlX2RyaXZlX21jY193cmJfcXVldWUoc3RydWN0IGJlX21jY19vYmplY3QgKm1jYyk7Ci0KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFJpbmcgU2l6ZXMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgaW5saW5lIHUzMiBiZV9yaW5nX2VuY29kaW5nX3RvX2xlbmd0aCh1MzIgZW5jb2RpbmcsIHUzMiBvYmplY3Rfc2l6ZSkKLXsKLQotCUFTU0VSVChlbmNvZGluZyAhPSAxKTsJLyogMSBpcyByc3ZkICovCi0JQVNTRVJUKGVuY29kaW5nIDwgMTYpOwotCUFTU0VSVChvYmplY3Rfc2l6ZSA+IDApOwotCi0JaWYgKGVuY29kaW5nID09IDApCS8qIDMyayBkZWVwICovCi0JCWVuY29kaW5nID0gMTY7Ci0KLQlyZXR1cm4gKDEgPDwgKGVuY29kaW5nIC0gMSkpICogb2JqZWN0X3NpemU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXUzMiBiZV9yaW5nX2xlbmd0aF90b19lbmNvZGluZyh1MzIgbGVuZ3RoX2luX2J5dGVzLCB1MzIgb2JqZWN0X3NpemUpCi17Ci0KLQl1MzIgY291bnQsIGVuY29kaW5nOwotCi0JQVNTRVJUKG9iamVjdF9zaXplID4gMCk7Ci0JQVNTRVJUKGxlbmd0aF9pbl9ieXRlcyAlIG9iamVjdF9zaXplID09IDApOwotCi0JY291bnQgPSBsZW5ndGhfaW5fYnl0ZXMgLyBvYmplY3Rfc2l6ZTsKLQotCUFTU0VSVChjb3VudCA+IDEpOwotCUFTU0VSVChjb3VudCA8PSAzMiAqIDEwMjQpOwotCUFTU0VSVChsZW5ndGhfaW5fYnl0ZXMgPD0gOCAqIFBBR0VfU0laRSk7IC8qIG1heCByaW5nIHNpemUgaW4gVVQgKi8KLQotCWVuY29kaW5nID0gX19pbG9nMl91MzIoY291bnQpICsgMTsKLQotCWlmIChlbmNvZGluZyA9PSAxNikKLQkJZW5jb2RpbmcgPSAwOwkvKiAzMmsgZGVlcCAqLwotCi0JcmV0dXJuIGVuY29kaW5nOwotfQotCi12b2lkIGJlX3JkX3RvX3BhX2xpc3Qoc3RydWN0IHJpbmdfZGVzYyAqcmQsIHN0cnVjdCBQSFlTX0FERFIgKnBhX2xpc3QsCi0JCQkJCQl1MzIgbWF4X251bSk7Ci0jZW5kaWYgLyogX19od2xpYl9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHUuYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY5Y2MxMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvbXB1LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImh3bGliLmgiCi0jaW5jbHVkZSAiYmVzdGF0dXMuaCIKLQotc3RhdGljCi1pbmxpbmUgdm9pZCBtcF9yaW5nX2NyZWF0ZShzdHJ1Y3QgbXBfcmluZyAqcmluZywgdTMyIG51bSwgdTMyIHNpemUsIHZvaWQgKnZhKQotewotCUFTU0VSVChyaW5nKTsKLQltZW1zZXQocmluZywgMCwgc2l6ZW9mKHN0cnVjdCBtcF9yaW5nKSk7Ci0JcmluZy0+bnVtID0gbnVtOwotCXJpbmctPnBhZ2VzID0gRElWX1JPVU5EX1VQKG51bSAqIHNpemUsIFBBR0VfU0laRSk7Ci0JcmluZy0+aXRlbVNpemUgPSBzaXplOwotCXJpbmctPnZhID0gdmE7Ci19Ci0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW50ZXJmYWNlIGZvciAyIGluZGV4IHJpbmdzLiBpLmUuIGNvbnN1bWVyL3Byb2R1Y2VyIHJpbmdzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLS8qIFJldHVybnMgbnVtYmVyIGl0ZW1zIHBlbmRpbmcgb24gcmluZy4gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIG1wX3JpbmdfbnVtX3BlbmRpbmcoc3RydWN0IG1wX3JpbmcgKnJpbmcpCi17Ci0JQVNTRVJUKHJpbmcpOwotCWlmIChyaW5nLT5udW0gPT0gMCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGJlX3N1YmMocmluZy0+cGlkeCwgcmluZy0+Y2lkeCwgcmluZy0+bnVtKTsKLX0KLQotLyogUmV0dXJucyBudW1iZXIgaXRlbXMgZnJlZSBvbiByaW5nLiAqLwotc3RhdGljIGlubGluZSB1MzIgbXBfcmluZ19udW1fZW1wdHkoc3RydWN0IG1wX3JpbmcgKnJpbmcpCi17Ci0JQVNTRVJUKHJpbmcpOwotCXJldHVybiByaW5nLT5udW0gLSAxIC0gbXBfcmluZ19udW1fcGVuZGluZyhyaW5nKTsKLX0KLQotLyogQ29uc3VtZSAxIGl0ZW0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtcF9yaW5nX2NvbnN1bWUoc3RydWN0IG1wX3JpbmcgKnJpbmcpCi17Ci0JQVNTRVJUKHJpbmcpOwotCUFTU0VSVChyaW5nLT5waWR4ICE9IHJpbmctPmNpZHgpOwotCi0JcmluZy0+Y2lkeCA9IGJlX2FkZGMocmluZy0+Y2lkeCwgMSwgcmluZy0+bnVtKTsKLX0KLQotLyogUHJvZHVjZSAxIGl0ZW0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtcF9yaW5nX3Byb2R1Y2Uoc3RydWN0IG1wX3JpbmcgKnJpbmcpCi17Ci0JQVNTRVJUKHJpbmcpOwotCXJpbmctPnBpZHggPSBiZV9hZGRjKHJpbmctPnBpZHgsIDEsIHJpbmctPm51bSk7Ci19Ci0KLS8qIENvbnN1bWUgY291bnQgaXRlbXMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtcF9yaW5nX2NvbnN1bWVfbXVsdGlwbGUoc3RydWN0IG1wX3JpbmcgKnJpbmcsIHUzMiBjb3VudCkKLXsKLQlBU1NFUlQocmluZyk7Ci0JQVNTRVJUKG1wX3JpbmdfbnVtX3BlbmRpbmcocmluZykgPj0gY291bnQpOwotCXJpbmctPmNpZHggPSBiZV9hZGRjKHJpbmctPmNpZHgsIGNvdW50LCByaW5nLT5udW0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKm1wX3JpbmdfaXRlbShzdHJ1Y3QgbXBfcmluZyAqcmluZywgdTMyIGluZGV4KQotewotCUFTU0VSVChyaW5nKTsKLQlBU1NFUlQoaW5kZXggPCByaW5nLT5udW0pOwotCUFTU0VSVChyaW5nLT5pdGVtU2l6ZSA+IDApOwotCXJldHVybiAodTggKikgcmluZy0+dmEgKyBpbmRleCAqIHJpbmctPml0ZW1TaXplOwotfQotCi0vKiBQdHIgdG8gcHJvZHVjZSBpdGVtICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKm1wX3JpbmdfcHJvZHVjZXJfcHRyKHN0cnVjdCBtcF9yaW5nICpyaW5nKQotewotCUFTU0VSVChyaW5nKTsKLQlyZXR1cm4gbXBfcmluZ19pdGVtKHJpbmcsIHJpbmctPnBpZHgpOwotfQotCi0vKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhlIHJpbmcuCi0gKiBUaGlzIGlzIHVzZWQgZm9yIHJpbmdzIHdpdGggMSBpbmRleC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkICptcF9yaW5nX2N1cnJlbnQoc3RydWN0IG1wX3JpbmcgKnJpbmcpCi17Ci0JQVNTRVJUKHJpbmcpOwotCUFTU0VSVChyaW5nLT5waWR4ID09IDApOwkvKiBub3QgdXNlZCAqLwotCi0JcmV0dXJuIG1wX3JpbmdfaXRlbShyaW5nLCByaW5nLT5jaWR4KTsKLX0KLQotLyoKLSAqIEluY3JlbWVudCBpbmRleCBmb3IgcmluZ3Mgd2l0aCBvbmx5IDEgaW5kZXguCi0gKiBUaGlzIGlzIHVzZWQgZm9yIHJpbmdzIHdpdGggMSBpbmRleC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkICptcF9yaW5nX25leHQoc3RydWN0IG1wX3JpbmcgKnJpbmcpCi17Ci0JQVNTRVJUKHJpbmcpOwotCUFTU0VSVChyaW5nLT5udW0gPiAwKTsKLQlBU1NFUlQocmluZy0+cGlkeCA9PSAwKTsJLyogbm90IHVzZWQgKi8KLQotCXJpbmctPmNpZHggPSBiZV9hZGRjKHJpbmctPmNpZHgsIDEsIHJpbmctPm51bSk7Ci0JcmV0dXJuIG1wX3JpbmdfY3VycmVudChyaW5nKTsKLX0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgd2FpdHMgZm9yIGEgcHJldmlvdXNseSBwb3N0ZWQgbWFpbGJveCBXUkIgdG8gYmUgY29tcGxldGVkLgotICAgIFNwZWNpZmljYWxseSBpdCB3YWl0cyBmb3IgdGhlIG1haWxib3ggdG8gc2F5IHRoYXQgaXQncyByZWFkeSB0byBhY2NlcHQKLSAgICBtb3JlIGRhdGEgYnkgc2V0dGluZyB0aGUgTFNCIG9mIHRoZSBtYWlsYm94IHBkIHJlZ2lzdGVyIHRvIDEuCi0KLSAgICBwY29udHJvbGxlciAgICAgIC0gVGhlIGZ1bmN0aW9uIG9iamVjdCB0byBwb3N0IHRoaXMgZGF0YSB0bwotCi0gICAgSVJRTCA8IERJU1BBVENIX0xFVkVMCi0qLwotc3RhdGljIHZvaWQgYmVfbWNjX21haWxib3hfd2FpdChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCXN0cnVjdCBNUFVfTUFJTEJPWF9EQl9BTUFQIG1haWxib3hfZGI7Ci0JdTMyIGkgPSAwOwotCXUzMiByZWFkeTsKLQotCWlmIChwZm9iLT5lbXVsYXRlKSB7Ci0JCS8qIE5vIHdhaXRpbmcgZm9yIG1haWxib3ggaW4gZW11bGF0ZWQgbW9kZS4gKi8KLQkJcmV0dXJuOwotCX0KLQotCW1haWxib3hfZGIuZHdbMF0gPSBQRF9SRUFEKHBmb2IsIG1jY19ib290c3RyYXBfZGIpOwotCXJlYWR5ID0gQU1BUF9HRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIHJlYWR5LCAmbWFpbGJveF9kYik7Ci0KLQl3aGlsZSAocmVhZHkgPT0gZmFsc2UpIHsKLQkJaWYgKCgrK2kgJiAweDNGRkZGKSA9PSAwKSB7Ci0JCQlUUkFDRShETF9XQVJOLCAiV2FpdGluZyBmb3IgbWFpbGJveCByZWFkeSAtICVkayBwb2xscyIsCi0JCQkJCQkJCWkgLyAxMDAwKTsKLQkJfQotCQl1ZGVsYXkoMSk7Ci0JCW1haWxib3hfZGIuZHdbMF0gPSBQRF9SRUFEKHBmb2IsIG1jY19ib290c3RyYXBfZGIpOwotCQlyZWFkeSA9IEFNQVBfR0VUX0JJVFNfUFRSKE1QVV9NQUlMQk9YX0RCLCByZWFkeSwgJm1haWxib3hfZGIpOwotCX0KLX0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgdGVsbHMgdGhlIE1DQyBtYWlsYm94IHRoYXQgdGhlcmUgaXMgZGF0YSB0byBwcm9jZXNzZWQKLSAgICBpbiB0aGUgbWFpbGJveC4gSXQgZG9lcyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoZQotICAgIG1haWxib3ggbG9jYXRpb24gYW5kIGNsZWFyaW5nIHRoZSBMU0IuICBUaGlzIHJvdXRpbmUgcmV0dXJucyBpbW1lZGlhdGVseQotICAgIGFuZCBkb2VzIG5vdCB3YWl0IGZvciB0aGUgV1JCIHRvIGJlIHByb2Nlc3NlZC4KLQotICAgIHBjb250cm9sbGVyICAgICAgLSBUaGUgZnVuY3Rpb24gb2JqZWN0IHRvIHBvc3QgdGhpcyBkYXRhIHRvCi0KLSAgICBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLQotKi8KLXN0YXRpYyB2b2lkIGJlX21jY19tYWlsYm94X25vdGlmeShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCXN0cnVjdCBNUFVfTUFJTEJPWF9EQl9BTUFQIG1haWxib3hfZGI7Ci0JdTMyIHBhOwotCi0JQVNTRVJUKHBmb2ItPm1haWxib3gucGEpOwotCUFTU0VSVChwZm9iLT5tYWlsYm94LnZhKTsKLQotCS8qIElmIGVtdWxhdGVkLCBkbyBub3QgcmluZyB0aGUgbWFpbGJveCAqLwotCWlmIChwZm9iLT5lbXVsYXRlKSB7Ci0JCVRSQUNFKERMX1dBUk4sICJNUFUgZGlzYWJsZWQuIFNraXBwaW5nIG1haWxib3ggbm90aWZ5LiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZm9ybSB0aGUgaGlnaGVyIGJpdHMgaW4gdGhlIGFkZHJlc3MgKi8KLQltYWlsYm94X2RiLmR3WzBdID0gMDsJLyogaW5pdCAqLwotCUFNQVBfU0VUX0JJVFNfUFRSKE1QVV9NQUlMQk9YX0RCLCBoaSwgJm1haWxib3hfZGIsIDEpOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1QVV9NQUlMQk9YX0RCLCByZWFkeSwgJm1haWxib3hfZGIsIDApOwotCi0JLyogYml0cyAzNCB0byA2MyAqLwotCXBhID0gKHUzMikgKHBmb2ItPm1haWxib3gucGEgPj4gMzQpOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1QVV9NQUlMQk9YX0RCLCBhZGRyZXNzLCAmbWFpbGJveF9kYiwgcGEpOwotCi0JLyogV2FpdCBmb3IgdGhlIE1QVSB0byBiZSByZWFkeSAqLwotCWJlX21jY19tYWlsYm94X3dhaXQocGZvYik7Ci0KLQkvKiBSaW5nIGRvb3JiZWxsIDFzdCB0aW1lICovCi0JUERfV1JJVEUocGZvYiwgbWNjX2Jvb3RzdHJhcF9kYiwgbWFpbGJveF9kYi5kd1swXSk7Ci0KLQkvKiBXYWl0IGZvciAxc3Qgd3JpdGUgdG8gYmUgYWNrbm93bGVkZ2VkLiAqLwotCWJlX21jY19tYWlsYm94X3dhaXQocGZvYik7Ci0KLQkvKiBsb3dlciBiaXRzIDMwIGJpdHMgZnJvbSA0dGggYml0IChiaXRzIDQgdG8gMzMpKi8KLQlwYSA9ICh1MzIpIChwZm9iLT5tYWlsYm94LnBhID4+IDQpICYgMHgzRkZGRkZGRjsKLQotCUFNQVBfU0VUX0JJVFNfUFRSKE1QVV9NQUlMQk9YX0RCLCBoaSwgJm1haWxib3hfZGIsIDApOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1QVV9NQUlMQk9YX0RCLCByZWFkeSwgJm1haWxib3hfZGIsIDApOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1QVV9NQUlMQk9YX0RCLCBhZGRyZXNzLCAmbWFpbGJveF9kYiwgcGEpOwotCi0JLyogUmluZyBkb29yYmVsbCAybmQgdGltZSAqLwotCVBEX1dSSVRFKHBmb2IsIG1jY19ib290c3RyYXBfZGIsIG1haWxib3hfZGIuZHdbMF0pOwotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSB0ZWxscyB0aGUgTUNDIG1haWxib3ggdGhhdCB0aGVyZSBpcyBkYXRhIHRvIHByb2Nlc3NlZAotICAgIGluIHRoZSBtYWlsYm94LiBJdCBkb2VzIHRoaXMgYnkgc2V0dGluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmb3IgdGhlCi0gICAgbWFpbGJveCBsb2NhdGlvbiBhbmQgY2xlYXJpbmcgdGhlIExTQi4gIFRoaXMgcm91dGluZSBzcGlucyB1bnRpbCB0aGUKLSAgICBNUFUgd3JpdGVzIGEgMSBpbnRvIHRoZSBMU0IgaW5kaWNhdGluZyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkCi0gICAgYW5kIGlzIHJlYWR5IHRvIGJlIHByb2Nlc3NlZC4KLQotICAgIHBjb250cm9sbGVyICAgICAgLSBUaGUgZnVuY3Rpb24gb2JqZWN0IHRvIHBvc3QgdGhpcyBkYXRhIHRvCi0KLSAgICBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLSovCi1zdGF0aWMgdm9pZAotYmVfbWNjX21haWxib3hfbm90aWZ5X2FuZF93YWl0KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0JLyoKLQkgKiBOb3RpZnkgaXQKLQkgKi8KLQliZV9tY2NfbWFpbGJveF9ub3RpZnkocGZvYik7Ci0JLyoKLQkgKiBOb3cgd2FpdCBmb3IgY29tcGxldGlvbiBvZiBXUkIKLQkgKi8KLQliZV9tY2NfbWFpbGJveF93YWl0KHBmb2IpOwotfQotCi12b2lkCi1iZV9tY2NfcHJvY2Vzc19jcWUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCQlzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVAgKmNxZSkKLXsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICp3cmJfY29udGV4dCA9IE5VTEw7Ci0JdTMyIG9mZnNldCwgc3RhdHVzOwotCXU4ICpwOwotCi0JQVNTRVJUKGNxZSk7Ci0JLyoKLQkgKiBBIGNvbW1hbmQgY29tcGxldGVkLiAgQ29tbWFuZHMgY29tcGxldGUgb3V0LW9mLW9yZGVyLgotCSAqIERldGVybWluZSB3aGljaCBjb21tYW5kIGNvbXBsZXRlZCBmcm9tIHRoZSBUQUcuCi0JICovCi0Jb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19DUV9FTlRSWV9BTUFQLCBtY2NfdGFnKS84OwotCXAgPSAodTggKikgY3FlICsgb2Zmc2V0OwotCXdyYl9jb250ZXh0ID0gKHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKikodm9pZCAqKShzaXplX3QpKCoodTY0ICopcCk7Ci0JQVNTRVJUKHdyYl9jb250ZXh0KTsKLQotCS8qCi0JICogUGVyZm9ybSBhIHJlc3BvbnNlIGNvcHkgaWYgcmVxdWVzdGVkLgotCSAqIE9ubHkgY29weSBkYXRhIGlmIHRoZSBGV0NNRCBpcyBzdWNjZXNzZnVsLgotCSAqLwotCXN0YXR1cyA9IEFNQVBfR0VUX0JJVFNfUFRSKE1DQ19DUV9FTlRSWSwgY29tcGxldGlvbl9zdGF0dXMsIGNxZSk7Ci0JaWYgKHN0YXR1cyA9PSBNR01UX1NUQVRVU19TVUNDRVNTICYmIHdyYl9jb250ZXh0LT5jb3B5Lmxlbmd0aCA+IDApIHsKLQkJQVNTRVJUKHdyYl9jb250ZXh0LT53cmIpOwotCQlBU1NFUlQod3JiX2NvbnRleHQtPmNvcHkudmEpOwotCQlwID0gKHU4ICopd3JiX2NvbnRleHQtPndyYiArCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19XUkJfQU1BUCwgcGF5bG9hZCkvODsKLQkJbWVtY3B5KHdyYl9jb250ZXh0LT5jb3B5LnZhLAotCQkJICAodTggKilwICsgd3JiX2NvbnRleHQtPmNvcHkuZndjbWRfb2Zmc2V0LAotCQkJICB3cmJfY29udGV4dC0+Y29weS5sZW5ndGgpOwotCX0KLQotCWlmIChzdGF0dXMpCi0JCXN0YXR1cyA9IEJFX05PVF9PSzsKLQkvKiBpbnRlcm5hbCBjYWxsYmFjayAqLwotCWlmICh3cmJfY29udGV4dC0+aW50ZXJuYWxfY2IpIHsKLQkJd3JiX2NvbnRleHQtPmludGVybmFsX2NiKHdyYl9jb250ZXh0LT5pbnRlcm5hbF9jYl9jb250ZXh0LAotCQkJCQkJc3RhdHVzLCB3cmJfY29udGV4dC0+d3JiKTsKLQl9Ci0KLQkvKiBjYWxsYmFjayAqLwotCWlmICh3cmJfY29udGV4dC0+Y2IpIHsKLQkJd3JiX2NvbnRleHQtPmNiKHdyYl9jb250ZXh0LT5jYl9jb250ZXh0LAotCQkJCQkgICAgICBzdGF0dXMsIHdyYl9jb250ZXh0LT53cmIpOwotCX0KLQkvKiBGcmVlIHRoZSBjb250ZXh0IHN0cnVjdHVyZSAqLwotCV9iZV9tY2NfZnJlZV93cmJfY29udGV4dChwZm9iLCB3cmJfY29udGV4dCk7Ci19Ci0KLXZvaWQgYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjKQotewotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IgPSBOVUxMOwotCWludCBzdGF0dXMgPSBCRV9QRU5ESU5HOwotCXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqcV9jdHh0OwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYjsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICpxdWV1ZV93cmI7Ci0JdTMyIGxlbmd0aCwgcGF5bG9hZF9sZW5ndGgsIHNnZV9jb3VudCwgZW1iZWRkZWQ7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0JQlVJTERfQlVHX09OKChzaXplb2Yoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0KSA8Ci0JCQkgIHNpemVvZihzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQpICsKLQkJCQkJc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApKSk7Ci0JcGZvYiA9IG1jYy0+cGFyZW50X2Z1bmN0aW9uOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAobWNjLT5kcml2aW5nX2JhY2tsb2cpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQkJaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQkvKiBBY3F1aXJlIHRoZSBmbGFnIHRvIGxpbWl0IDEgdGhyZWFkIHRvIHJlZHJpdmUgcG9zdHMuICovCi0JbWNjLT5kcml2aW5nX2JhY2tsb2cgPSAxOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZtY2MtPmJhY2tsb2cpKSB7Ci0JCXdyYiA9IF9iZV9tcHVfcGVla19yaW5nX3dyYihtY2MsIHRydWUpOwkvKiBEcml2aW5nIHRoZSBxdWV1ZSAqLwotCQlpZiAoIXdyYikKLQkJCWJyZWFrOwkvKiBObyBzcGFjZSBpbiB0aGUgcmluZyB5ZXQuICovCi0JCS8qIEdldCB0aGUgbmV4dCBxdWV1ZWQgZW50cnkgdG8gcHJvY2Vzcy4gKi8KLQkJcV9jdHh0ID0gbGlzdF9maXJzdF9lbnRyeSgmbWNjLT5iYWNrbG9nLAotCQkJCXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCwgY29udGV4dC5saXN0KTsKLQkJbGlzdF9kZWwoJnFfY3R4dC0+Y29udGV4dC5saXN0KTsKLQkJcGZvYi0+bWNjLT5iYWNrbG9nX2xlbmd0aC0tOwotCQkvKgotCQkgKiBDb21wdXRlIHRoZSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIFdSQi4KLQkJICogU2luY2UgdGhlIHF1ZXVlIGVsZW1lbnQgbWF5IGJlIHNtYWxsZXIgdGhhbgotCQkgKiB0aGUgY29tcGxldGUgV1JCLCBjb3B5IG9ubHkgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4KLQkJICovCi0JCXF1ZXVlX3dyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICZxX2N0eHQtPndyYl9oZWFkZXI7Ci0JCWVtYmVkZGVkID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX1dSQiwgZW1iZWRkZWQsIHF1ZXVlX3dyYik7Ci0JCWlmIChlbWJlZGRlZCkgewotCQkJcGF5bG9hZF9sZW5ndGggPSBBTUFQX0dFVF9CSVRTX1BUUihNQ0NfV1JCLAotCQkJCQkJcGF5bG9hZF9sZW5ndGgsIHF1ZXVlX3dyYik7Ci0JCQlsZW5ndGggPSBzaXplb2Yoc3RydWN0IGJlX21jY193cmJfaGVhZGVyKSArCi0JCQkJCQkJCXBheWxvYWRfbGVuZ3RoOwotCQl9IGVsc2UgewotCQkJc2dlX2NvdW50ID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX1dSQiwgc2dlX2NvdW50LAotCQkJCQkJCQlxdWV1ZV93cmIpOwotCQkJQVNTRVJUKHNnZV9jb3VudCA9PSAxKTsgLyogb25seSAxIGZyYWcuICovCi0JCQlsZW5ndGggPSBzaXplb2Yoc3RydWN0IGJlX21jY193cmJfaGVhZGVyKSArCi0JCQkgICAgc2dlX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBNQ0NfU0dFX0FNQVApOwotCQl9Ci0KLQkJLyoKLQkJICogVHJ1bmNhdGUgdGhlIGxlbmd0aCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUKLQkJICogcXVldWUgZWxlbWVudC4gIFNvbWUgZWxlbWVudHMgdGhhdCBoYXZlIG91dHB1dCBwYXJhbWV0ZXJzCi0JCSAqIGNhbiBiZSBzbWFsbGVyIHRoYW4gdGhlIHBheWxvYWRfbGVuZ3RoIGZpZWxkIHdvdWxkCi0JCSAqIGluZGljYXRlLiAgV2UgcmVhbGx5IG9ubHkgbmVlZCB0byBjb3B5IHRoZSByZXF1ZXN0Ci0JCSAqIHBhcmFtZXRlcnMsIG5vdCB0aGUgcmVzcG9uc2UuCi0JCSAqLwotCQlsZW5ndGggPSBtaW4obGVuZ3RoLCAodTMyKSAocV9jdHh0LT5jb250ZXh0LmJ5dGVzIC0KLQkJCW9mZnNldG9mKHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCwgd3JiX2hlYWRlcikpKTsKLQotCQkvKiBDb3B5IHRoZSBxdWV1ZSBlbGVtZW50IFdSQiBpbnRvIHRoZSByaW5nLiAqLwotCQltZW1jcHkod3JiLCAmcV9jdHh0LT53cmJfaGVhZGVyLCBsZW5ndGgpOwotCi0JCS8qIFBvc3QgdGhlIHdyYi4gIFRoaXMgc2hvdWxkIG5vdCBmYWlsIGFzc3VtaW5nIHdlIGhhdmUKLQkJICogZW5vdWdoIGNvbnRleHQgc3RydWN0cy4gKi8KLQkJc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwKLQkJCSAgIHFfY3R4dC0+Y29udGV4dC5jYiwgcV9jdHh0LT5jb250ZXh0LmNiX2NvbnRleHQsCi0JCQkgICBxX2N0eHQtPmNvbnRleHQuaW50ZXJuYWxfY2IsCi0JCQkgICBxX2N0eHQtPmNvbnRleHQuaW50ZXJuYWxfY2JfY29udGV4dCwKLQkJCSAgIHFfY3R4dC0+Y29udGV4dC5vcHRpb25hbF9md2NtZF92YSwKLQkJCSAgICZxX2N0eHQtPmNvbnRleHQuY29weSk7Ci0KLQkJaWYgKHN0YXR1cyA9PSBCRV9TVUNDRVNTKSB7Ci0JCQkvKgotCQkJICogU3luY2hyb25vdXMgY29tcGxldGlvbi4gU2luY2UgaXQgd2FzIHF1ZXVlZCwKLQkJCSAqIHdlIHdpbGwgaW52b2tlIHRoZSBjYWxsYmFjay4KLQkJCSAqIFRvIHRoZSB1c2VyLCB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0LgotCQkJICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCQkJaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQkJCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQkJCX0KLQotCQkJQVNTRVJUKHFfY3R4dC0+Y29udGV4dC5jYik7Ci0KLQkJCXFfY3R4dC0+Y29udGV4dC5jYigKLQkJCQlxX2N0eHQtPmNvbnRleHQuY2JfY29udGV4dCwKLQkJCQkJCUJFX1NVQ0NFU1MsIE5VTEwpOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSBCRV9QRU5ESU5HKSB7Ci0JCQkvKgotCQkJICogQW5vdGhlciByZXNvdXJjZSBmYWlsZWQuICBTaG91bGQgbmV2ZXIgaGFwcGVuCi0JCQkgKiBpZiB3ZSBoYXZlIHN1ZmZpY2llbnQgTUNDX1dSQl9DT05URVhUIHN0cnVjdHMuCi0JCQkgKiBSZXR1cm4gdG8gaGVhZCBvZiB0aGUgcXVldWUuCi0JCQkgKi8KLQkJCVRSQUNFKERMX1dBUk4sICJGYWlsZWQgdG8gcG9zdCBhIHF1ZXVlZCBXUkIuIDB4JXgiLAotCQkJICAgICAgc3RhdHVzKTsKLQkJCWxpc3RfYWRkKCZxX2N0eHQtPmNvbnRleHQubGlzdCwgJm1jYy0+YmFja2xvZyk7Ci0JCQlwZm9iLT5tY2MtPmJhY2tsb2dfbGVuZ3RoKys7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIEZyZWUgdGhlIGZsYWcgdG8gbGltaXQgMSB0aHJlYWQgdG8gcmVkcml2ZSBwb3N0cy4gKi8KLQltY2MtPmRyaXZpbmdfYmFja2xvZyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBhc3NlcnRzIHRoYXQgdGhlIFdSQiB3YXMgY29uc3VtZWQgaW4gb3JkZXIuICovCi0jaWZkZWYgQkVfREVCVUcKLXUzMiBiZV9tY2Nfd3JiX2NvbnN1bWVkX2luX29yZGVyKHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MsCi0JCQkJCXN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCAqY3FlKQotewotCXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKndyYl9jb250ZXh0ID0gTlVMTDsKLQl1MzIgd3JiX2luZGV4OwotCXUzMiB3cmJfY29uc3VtZWRfaW5fb3JkZXI7Ci0JdTMyIG9mZnNldDsKLQl1OCAqcDsKLQotCUFTU0VSVChjcWUpOwotCS8qCi0JICogQSBjb21tYW5kIGNvbXBsZXRlZC4gIENvbW1hbmRzIGNvbXBsZXRlIG91dC1vZi1vcmRlci4KLQkgKiBEZXRlcm1pbmUgd2hpY2ggY29tbWFuZCBjb21wbGV0ZWQgZnJvbSB0aGUgVEFHLgotCSAqLwotCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfQ1FfRU5UUllfQU1BUCwgbWNjX3RhZykvODsKLQlwID0gKHU4ICopIGNxZSArIG9mZnNldDsKLQl3cmJfY29udGV4dCA9IChzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICopKHZvaWQgKikoc2l6ZV90KSgqKHU2NCAqKXApOwotCi0JQVNTRVJUKHdyYl9jb250ZXh0KTsKLQotCXdyYl9pbmRleCA9ICh1MzIpICgoKHU2NCkoc2l6ZV90KXdyYl9jb250ZXh0LT5yaW5nX3dyYiAtCi0JCSh1NjQpKHNpemVfdCltY2MtPnNxLnJpbmcudmEpIC8gc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApKTsKLQotCUFTU0VSVCh3cmJfaW5kZXggPCBtY2MtPnNxLnJpbmcubnVtKTsKLQotCXdyYl9jb25zdW1lZF9pbl9vcmRlciA9ICh1MzIpICh3cmJfaW5kZXggPT0gbWNjLT5jb25zdW1lZF9pbmRleCk7Ci0JbWNjLT5jb25zdW1lZF9pbmRleCA9IGJlX2FkZGMobWNjLT5jb25zdW1lZF9pbmRleCwgMSwgbWNjLT5zcS5yaW5nLm51bSk7Ci0JcmV0dXJuIHdyYl9jb25zdW1lZF9pbl9vcmRlcjsKLX0KLSNlbmRpZgotCi1pbnQgYmVfbWNjX3Byb2Nlc3NfY3Eoc3RydWN0IGJlX21jY19vYmplY3QgKm1jYywgYm9vbCByZWFybSkKLXsKLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVAgKmNxZTsKLQlzdHJ1Y3QgQ1FfREJfQU1BUCBkYjsKLQlzdHJ1Y3QgbXBfcmluZyAqY3FfcmluZyA9ICZtY2MtPmNxLnJpbmc7Ci0Jc3RydWN0IG1wX3JpbmcgKm1wX3JpbmcgPSAmbWNjLT5zcS5yaW5nOwotCXUzMiBudW1fcHJvY2Vzc2VkID0gMDsKLQl1MzIgY29uc3VtZWQgPSAwLCB2YWxpZCwgY29tcGxldGVkLCBjcWVfY29uc3VtZWQsIGFzeW5jX2V2ZW50OwotCi0JcGZvYiA9IG1jYy0+cGFyZW50X2Z1bmN0aW9uOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPmNxX2xvY2ssIHBmb2ItPmNxX2lycSk7Ci0KLQkvKgotCSAqIFZlcmlmeSB0aGF0IG9ubHkgb25lIHRocmVhZCBpcyBwcm9jZXNzaW5nIHRoZSBDUSBhdCBvbmNlLgotCSAqIFdlIGNhbm5vdCBob2xkIHRoZSBsb2NrIHdoaWxlIHByb2Nlc3NpbmcgdGhlIENRIGR1ZSB0bwotCSAqIHRoZSBjYWxsYmFja3MgaW50byB0aGUgT1MuICBUaGVyZWZvcmUsIHRoaXMgZmxhZyBpcyB1c2VkCi0JICogdG8gY29udHJvbCBpdC4gIElmIGFueSBvZiB0aGUgdGhyZWFkcyB3YW50IHRvCi0JICogcmVhcm0gdGhlIENRLCB3ZSBuZWVkIHRvIGhvbm9yIHRoYXQuCi0JICovCi0JaWYgKG1jYy0+cHJvY2Vzc2luZyAhPSAwKSB7Ci0JCW1jYy0+cmVhcm0gPSBtY2MtPnJlYXJtIHx8IHJlYXJtOwotCQlnb3RvIEVycm9yOwotCX0gZWxzZSB7Ci0JCW1jYy0+cHJvY2Vzc2luZyA9IDE7CS8qIGxvY2sgcHJvY2Vzc2luZyBmb3IgdGhpcyB0aHJlYWQuICovCi0JCW1jYy0+cmVhcm0gPSByZWFybTsJLyogc2V0IG91ciByZWFybSBzZXR0aW5nICovCi0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+Y3FfbG9jaywgcGZvYi0+Y3FfaXJxKTsKLQotCWNxZSA9IG1wX3JpbmdfY3VycmVudChjcV9yaW5nKTsKLQl2YWxpZCA9IEFNQVBfR0VUX0JJVFNfUFRSKE1DQ19DUV9FTlRSWSwgdmFsaWQsIGNxZSk7Ci0Jd2hpbGUgKHZhbGlkKSB7Ci0KLQkJaWYgKG51bV9wcm9jZXNzZWQgPj0gOCkgewotCQkJLyogY29hbGVzY2UgZG9vcmJlbGxzLCBidXQgZnJlZSBzcGFjZSBpbiBjcQotCQkJICogcmluZyB3aGlsZSBwcm9jZXNzaW5nLiAqLwotCQkJZGIuZHdbMF0gPSAwOwkvKiBjbGVhciAqLwotCQkJQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHFpZCwgJmRiLCBjcV9yaW5nLT5pZCk7Ci0JCQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgcmVhcm0sICZkYiwgZmFsc2UpOwotCQkJQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIGV2ZW50LCAmZGIsIGZhbHNlKTsKLQkJCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBudW1fcG9wcGVkLCAmZGIsCi0JCQkJCQkJbnVtX3Byb2Nlc3NlZCk7Ci0JCQludW1fcHJvY2Vzc2VkID0gMDsKLQotCQkJUERfV1JJVEUocGZvYiwgY3FfZGIsIGRiLmR3WzBdKTsKLQkJfQotCi0JCWFzeW5jX2V2ZW50ID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX0NRX0VOVFJZLCBhc3luY19ldmVudCwgY3FlKTsKLQkJaWYgKGFzeW5jX2V2ZW50KSB7Ci0JCQkvKiBUaGlzIGlzIGFuIGFzeW5jaHJvbm91cyBldmVudC4gKi8KLQkJCXN0cnVjdCBBU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVAgKmFzeW5jX3RyYWlsZXIgPQotCQkJICAgIChzdHJ1Y3QgQVNZTkNfRVZFTlRfVFJBSUxFUl9BTUFQICopCi0JCQkgICAgKCh1OCAqKSBjcWUgKyBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKSAtCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgQVNZTkNfRVZFTlRfVFJBSUxFUl9BTUFQKSk7Ci0JCQl1MzIgZXZlbnRfY29kZTsKLQkJCWFzeW5jX2V2ZW50ID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfVFJBSUxFUiwKLQkJCQkJCWFzeW5jX2V2ZW50LCBhc3luY190cmFpbGVyKTsKLQkJCUFTU0VSVChhc3luY19ldmVudCA9PSAxKTsKLQotCi0JCQl2YWxpZCA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX1RSQUlMRVIsCi0JCQkJCQl2YWxpZCwgYXN5bmNfdHJhaWxlcik7Ci0JCQlBU1NFUlQodmFsaWQgPT0gMSk7Ci0KLQkJCS8qIENhbGwgdGhlIGFzeW5jIGV2ZW50IGhhbmRsZXIgaWYgaXQgaXMgaW5zdGFsbGVkLiAqLwotCQkJaWYgKG1jYy0+YXN5bmNfY2IpIHsKLQkJCQlldmVudF9jb2RlID0KLQkJCQkJQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfVFJBSUxFUiwKLQkJCQkJCWV2ZW50X2NvZGUsIGFzeW5jX3RyYWlsZXIpOwotCQkJCW1jYy0+YXN5bmNfY2IobWNjLT5hc3luY19jb250ZXh0LAotCQkJCQkgICAgKHUzMikgZXZlbnRfY29kZSwgKHZvaWQgKikgY3FlKTsKLQkJCX0KLQotCQl9IGVsc2UgewotCQkJLyogVGhpcyBpcyBhIGNvbXBsZXRpb24gZW50cnkuICovCi0KLQkJCS8qIE5vIHZtIGZvcndhcmRpbmcgaW4gdGhpcyBkcml2ZXIuICovCi0KLQkJCWNxZV9jb25zdW1lZCA9IEFNQVBfR0VUX0JJVFNfUFRSKE1DQ19DUV9FTlRSWSwKLQkJCQkJCWNvbnN1bWVkLCBjcWUpOwotCQkJaWYgKGNxZV9jb25zdW1lZCkgewotCQkJCS8qCi0JCQkJICogQSBjb21tYW5kIG9uIHRoZSBNQ0MgcmluZyB3YXMgY29uc3VtZWQuCi0JCQkJICogVXBkYXRlIHRoZSBjb25zdW1lciBpbmRleC4KLQkJCQkgKiBUaGVzZSBvY2N1ciBpbiBvcmRlci4KLQkJCQkgKi8KLQkJCQlBU1NFUlQoYmVfbWNjX3dyYl9jb25zdW1lZF9pbl9vcmRlcihtY2MsIGNxZSkpOwotCQkJCWNvbnN1bWVkKys7Ci0JCQl9Ci0KLQkJCWNvbXBsZXRlZCA9IEFNQVBfR0VUX0JJVFNfUFRSKE1DQ19DUV9FTlRSWSwKLQkJCQkJY29tcGxldGVkLCBjcWUpOwotCQkJaWYgKGNvbXBsZXRlZCkgewotCQkJCS8qIEEgY29tbWFuZCBjb21wbGV0ZWQuICBVc2UgdGFnIHRvCi0JCQkJICogZGV0ZXJtaW5lIHdoaWNoIGNvbW1hbmQuICAqLwotCQkJCWJlX21jY19wcm9jZXNzX2NxZShwZm9iLCBjcWUpOwotCQkJfQotCQl9Ci0KLQkJLyogUmVzZXQgdGhlIENRRSAqLwotCQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfQ1FfRU5UUlksIHZhbGlkLCBjcWUsIGZhbHNlKTsKLQkJbnVtX3Byb2Nlc3NlZCsrOwotCi0JCS8qIFVwZGF0ZSBvdXIgdHJhY2tpbmcgZm9yIHRoZSBDUSByaW5nLiAqLwotCQljcWUgPSBtcF9yaW5nX25leHQoY3FfcmluZyk7Ci0JCXZhbGlkID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX0NRX0VOVFJZLCB2YWxpZCwgY3FlKTsKLQl9Ci0KLQlUUkFDRShETF9JTkZPLCAibnVtX3Byb2Nlc3NlZDoweCV4LCBhbmQgY29uc3VtZWQ6MHgleCIsCi0JICAgICAgbnVtX3Byb2Nlc3NlZCwgY29uc3VtZWQpOwotCS8qCi0JICogR3JhYiB0aGUgQ1EgbG9jayB0byBzeW5jaHJvbml6ZSB0aGUgInJlYXJtIiBzZXR0aW5nIGZvcgotCSAqIHRoZSBkb29yYmVsbCwgYW5kIGZvciBjbGVhcmluZyB0aGUgInByb2Nlc3NpbmciIGZsYWcuCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPmNxX2xvY2ssIHBmb2ItPmNxX2lycSk7Ci0KLQkvKgotCSAqIFJlYXJtIHRoZSBjcS4gIFRoaXMgaXMgZG9uZSBiYXNlZCBvbiB0aGUgZ2xvYmFsIG1jYy0+cmVhcm0KLQkgKiBmbGFnIHdoaWNoIGNvbWJpbmVzIHRoZSByZWFybSBwYXJhbWV0ZXIgZnJvbSB0aGUgY3VycmVudAotCSAqIGNhbGwgdG8gcHJvY2Vzc19jcSBhbmQgYW55IG90aGVyIHRocmVhZHMKLQkgKiB0aGF0IHRyaWVkIHRvIHByb2Nlc3MgdGhlIENRIHdoaWxlIHRoaXMgb25lIHdhcyBhY3RpdmUuCi0JICogVGhpcyBoYW5kbGVzIHRoZSBzaXR1YXRpb24gd2hlcmUgYSBzeW5jLiBmd2NtZCB3YXMgcHJvY2Vzc2luZwotCSAqIHRoZSBDUSB3aGlsZSB0aGUgaW50ZXJydXB0L2RwYyB0cmllcyB0byBwcm9jZXNzIGl0LgotCSAqIFRoZSBzeW5jIHByb2Nlc3MgZ2V0cyB0byBjb250aW51ZSAtLSBidXQgaXQgaXMgbm93Ci0JICogcmVzcG9uc2libGUgZm9yIHRoZSByZWFybWluZy4KLQkgKi8KLQlpZiAobnVtX3Byb2Nlc3NlZCA+IDAgfHwgbWNjLT5yZWFybSA9PSB0cnVlKSB7Ci0JCWRiLmR3WzBdID0gMDsJLyogY2xlYXIgKi8KLQkJQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHFpZCwgJmRiLCBjcV9yaW5nLT5pZCk7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCByZWFybSwgJmRiLCBtY2MtPnJlYXJtKTsKLQkJQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIGV2ZW50LCAmZGIsIGZhbHNlKTsKLQkJQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIG51bV9wb3BwZWQsICZkYiwgbnVtX3Byb2Nlc3NlZCk7Ci0KLQkJUERfV1JJVEUocGZvYiwgY3FfZGIsIGRiLmR3WzBdKTsKLQl9Ci0JLyoKLQkgKiBVcGRhdGUgdGhlIGNvbnN1bWVyIGluZGV4IGFmdGVyIHJpbmdpbmcgdGhlIENRIGRvb3JiZWxsLgotCSAqIFdlIGRvbid0IHdhbnQgYW5vdGhlciB0aHJlYWQgdG8gcG9zdCBtb3JlIFdSQnMgYmVmb3JlIHdlCi0JICogaGF2ZSBDUSBzcGFjZSBhdmFpbGFibGUuCi0JICovCi0JbXBfcmluZ19jb25zdW1lX211bHRpcGxlKG1wX3JpbmcsIGNvbnN1bWVkKTsKLQotCS8qIENsZWFyIHRoZSBwcm9jZXNzaW5nIGZsYWcuICovCi0JbWNjLT5wcm9jZXNzaW5nID0gMDsKLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+Y3FfbG9jaywgcGZvYi0+Y3FfaXJxKTsKLQkvKgotCSAqIFVzZSB0aGUgbG9jYWwgdmFyaWFibGUgdG8gZGV0ZWN0IGlmIHRoZSBjdXJyZW50IHRocmVhZAotCSAqIGhvbGRzIHRoZSBXUkIgcG9zdCBsb2NrLiAgSWYgcmVhcm0gaXMgZmFsc2UsIHRoaXMgaXMKLQkgKiBlaXRoZXIgYSBzeW5jaHJvbm91cyBjb21tYW5kLCBvciB0aGUgdXBwZXIgbGF5ZXIgZHJpdmVyIGlzIHBvbGxpbmcKLQkgKiBmcm9tIGEgdGhyZWFkLiAgV2UgZG8gbm90IGRyaXZlIHRoZSBxdWV1ZSBmcm9tIHRoYXQKLQkgKiBjb250ZXh0IHNpbmNlIHRoZSBkcml2ZXIgbWF5IGhvbGQgdGhlCi0JICogd3JiIHBvc3QgbG9jayBhbHJlYWR5LgotCSAqLwotCWlmIChyZWFybSkKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShtY2MpOwotCWVsc2UKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMTsKLQotCXJldHVybiBCRV9TVUNDRVNTOwotfQotCi0vKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgICAgICAgICAgICAgIFAgVSBCIEwgSSBDICBSIE8gVSBUIEkgTiBFIFMKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGNyZWF0ZXMgYW4gTUNDIG9iamVjdC4gIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGFuIE1DQyBzZW5kIHF1ZXVlCi0gICAgYW5kIGEgQ1EgcHJpdmF0ZSB0byB0aGUgTUNDLgotCi0gICAgcGNvbnRyb2xsZXIgICAgICAtIEhhbmRsZSB0byBhIGZ1bmN0aW9uIG9iamVjdAotCi0gICAgRXFPYmplY3QgICAgICAgICAgICAtIEVRIG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB0byBkaXNwYXRjaCB0aGlzIE1DQwotCi0gICAgcHBNY2NPYmplY3QgICAgICAgICAtIFBvaW50ZXIgdG8gYW4gaW50ZXJuYWwgTWNjIE9iamVjdCByZXR1cm5lZC4KLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwsIG90aGVyd2lzZSBhIHVzZWZ1bCBlcnJvciBjb2RlCi0JaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLQotKi8KLWludAotYmVfbWNjX3JpbmdfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgIHN0cnVjdCByaW5nX2Rlc2MgKnJkLCB1MzIgbGVuZ3RoLAotCQkgICBzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICpjb250ZXh0X2FycmF5LAotCQkgICB1MzIgbnVtX2NvbnRleHRfZW50cmllcywKLQkJICAgc3RydWN0IGJlX2NxX29iamVjdCAqY3EsIHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlzdHJ1Y3QgRldDTURfQ09NTU9OX01DQ19DUkVBVEUgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCXUzMiBudW1fZW50cmllc19lbmNvZGVkLCBuLCBpOwotCXZvaWQgKnZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApICogMikgewotCQlUUkFDRShETF9FUlIsICJJbnZhbGlkIE1DQyByaW5nIGxlbmd0aDolZCIsIGxlbmd0aCk7Ci0JCXJldHVybiBCRV9OT1RfT0s7Ci0JfQotCS8qCi0JICogUmVkdWNlIHRoZSBhY3R1YWwgcmluZyBzaXplIHRvIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyCi0JICogb2YgY29udGV4dCBlbnRyaWVzLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2UgcnVuIG91dCBvZgotCSAqIHJpbmcgV1JCcyBmaXJzdCBzbyB0aGUgcXVldWluZyB3b3JrcyBjb3JyZWN0bHkuICBXZSBuZXZlcgotCSAqIHF1ZXVlIGJhc2VkIG9uIGNvbnRleHQgc3RydWN0cy4KLQkgKi8KLQlpZiAobnVtX2NvbnRleHRfZW50cmllcyArIDEgPAotCQkJbGVuZ3RoIC8gc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApIC0gMSkgewotCi0JCXUzMiBtYXhfbGVuZ3RoID0KLQkJICAgIChudW1fY29udGV4dF9lbnRyaWVzICsgMikgKiBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCk7Ci0KLQkJaWYgKGlzX3Bvd2VyX29mXzIobWF4X2xlbmd0aCkpCi0JCQlsZW5ndGggPSBfX3JvdW5kdXBfcG93X29mX3R3byhtYXhfbGVuZ3RoKzEpIC8gMjsKLQkJZWxzZQotCQkJbGVuZ3RoID0gX19yb3VuZHVwX3Bvd19vZl90d28obWF4X2xlbmd0aCkgLyAyOwotCi0JCUFTU0VSVChsZW5ndGggPD0gbWF4X2xlbmd0aCk7Ci0KLQkJVFJBQ0UoRExfV0FSTiwKLQkJCSJNQ0MgcmluZyBsZW5ndGggcmVkdWNlZCBiYXNlZCBvbiBjb250ZXh0IGVudHJpZXMuIgotCQkJIiBsZW5ndGg6JWQgd3JiczolZCBjb250ZXh0X2VudHJpZXM6JWQiLCBsZW5ndGgsCi0JCQkoaW50KSAobGVuZ3RoIC8gc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApKSwKLQkJCW51bV9jb250ZXh0X2VudHJpZXMpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JbnVtX2VudHJpZXNfZW5jb2RlZCA9Ci0JICAgIGJlX3JpbmdfbGVuZ3RoX3RvX2VuY29kaW5nKGxlbmd0aCwgc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApKTsKLQotCS8qIEluaXQgTUNDIG9iamVjdC4gKi8KLQltZW1zZXQobWNjLCAwLCBzaXplb2YoKm1jYykpOwotCW1jYy0+cGFyZW50X2Z1bmN0aW9uID0gcGZvYjsKLQltY2MtPmNxX29iamVjdCA9IGNxOwotCi0JSU5JVF9MSVNUX0hFQUQoJm1jYy0+YmFja2xvZyk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJQVNTRVJUKHdyYik7Ci0JCVRSQUNFKERMX0VSUiwgIk5vIGZyZWUgTUNDIFdSQnMgaW4gY3JlYXRlIEVRLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBlcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9NQ0NfQ1JFQVRFKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5udW1fcGFnZXMgPSBESVZfUk9VTkRfVVAobGVuZ3RoLCBQQUdFX1NJWkUpOwotCS8qCi0JICogUHJvZ3JhbSBNQ0MgcmluZyBjb250ZXh0Ci0JICovCi0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1JJTkdfQ09OVEVYVCwgcGRpZCwKLQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgMCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1JJTkdfQ09OVEVYVCwgaW52YWxpZCwKLQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgZmFsc2UpOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19SSU5HX0NPTlRFWFQsIHJpbmdfc2l6ZSwKLQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbnVtX2VudHJpZXNfZW5jb2RlZCk7Ci0KLQluID0gY3EtPmNxX2lkOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19SSU5HX0NPTlRFWFQsCi0JCQkJY3FfaWQsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0JYmVfcmRfdG9fcGFfbGlzdChyZCwgZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzLAotCQkJCUFSUkFZX1NJWkUoZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzKSk7Ci0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlUUkFDRShETF9FUlIsICJNQ0MgdG8gY3JlYXRlIENRIGZhaWxlZC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JLyoKLQkgKiBDcmVhdGUgYSBsaW5rZWQgbGlzdCBvZiBjb250ZXh0IHN0cnVjdHVyZXMKLQkgKi8KLQltY2MtPndyYl9jb250ZXh0LmJhc2UgPSBjb250ZXh0X2FycmF5OwotCW1jYy0+d3JiX2NvbnRleHQubnVtID0gbnVtX2NvbnRleHRfZW50cmllczsKLQlJTklUX0xJU1RfSEVBRCgmbWNjLT53cmJfY29udGV4dC5saXN0X2hlYWQpOwotCW1lbXNldChjb250ZXh0X2FycmF5LCAwLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQpICogbnVtX2NvbnRleHRfZW50cmllcyk7Ci0JZm9yIChpID0gMDsgaSA8IG1jYy0+d3JiX2NvbnRleHQubnVtOyBpKyspIHsKLQkJbGlzdF9hZGRfdGFpbCgmY29udGV4dF9hcnJheVtpXS5uZXh0LAotCQkJCQkmbWNjLT53cmJfY29udGV4dC5saXN0X2hlYWQpOwotCX0KLQotCS8qCi0JICoKLQkgKiBDcmVhdGUgYW4gbWNjX3JpbmcgZm9yIHRyYWNraW5nIFdSQiBodyByaW5nCi0JICovCi0JdmEgPSByZC0+dmE7Ci0JQVNTRVJUKHZhKTsKLQltcF9yaW5nX2NyZWF0ZSgmbWNjLT5zcS5yaW5nLCBsZW5ndGggLyBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCksCi0JCQkJc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApLCB2YSk7Ci0JbWNjLT5zcS5yaW5nLmlkID0gZndjbWQtPnBhcmFtcy5yZXNwb25zZS5pZDsKLQkvKgotCSAqIEluaXQgYSBtY2NfcmluZyBmb3IgdHJhY2tpbmcgdGhlIE1DQyBDUS4KLQkgKi8KLQlBU1NFUlQoY3EtPnZhKTsKLQltcF9yaW5nX2NyZWF0ZSgmbWNjLT5jcS5yaW5nLCBjcS0+bnVtX2VudHJpZXMsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKSwgY3EtPnZhKTsKLQltY2MtPmNxLnJpbmcuaWQgPSBjcS0+Y3FfaWQ7Ci0KLQkvKiBGb3JjZSB6ZXJvaW5nIG9mIENRLiAqLwotCW1lbXNldChjcS0+dmEsIDAsIGNxLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVApKTsKLQotCS8qIEluaXRpYWxpemUgZGVidWcgaW5kZXguICovCi0JbWNjLT5jb25zdW1lZF9pbmRleCA9IDA7Ci0KLQlhdG9taWNfaW5jKCZjcS0+cmVmX2NvdW50KTsKLQlwZm9iLT5tY2MgPSBtY2M7Ci0KLQlUUkFDRShETF9JTkZPLCAiTUNDIHJpbmcgY3JlYXRlZC4gaWQ6JWQgYnl0ZXM6JWQgY3FfaWQ6JWQgY3FfZW50cmllczolZCIKLQkgICAgICAiIG51bV9jb250ZXh0OiVkIiwgbWNjLT5zcS5yaW5nLmlkLCBsZW5ndGgsCi0JICAgICAgY3EtPmNxX2lkLCBjcS0+bnVtX2VudHJpZXMsIG51bV9jb250ZXh0X2VudHJpZXMpOwotCi1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgZGVzdHJveXMgYW4gTUNDIHNlbmQgcXVldWUKLQotICAgIE1jY09iamVjdCAgICAgICAgIC0gSW50ZXJuYWwgTWNjIE9iamVjdCB0byBiZSBkZXN0cm95ZWQuCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLgotCi0gICAgSVJRTCA8IERJU1BBVENIX0xFVkVMCi0KLSAgICBUaGUgY2FsbGVyIG9mIHRoaXMgcm91dGluZSBtdXN0IGVuc3VyZSB0aGF0IG5vIG90aGVyIFdSQiBtYXkgYmUgcG9zdGVkCi0gICAgdW50aWwgdGhpcyByb3V0aW5lIHJldHVybnMuCi0KLSovCi1pbnQgYmVfbWNjX3JpbmdfZGVzdHJveShzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IgPSBtY2MtPnBhcmVudF9mdW5jdGlvbjsKLQotCi0JQVNTRVJUKG1jYy0+cHJvY2Vzc2luZyA9PSAwKTsKLQotCS8qCi0JICogUmVtb3ZlIHRoZSByaW5nIGZyb20gdGhlIGZ1bmN0aW9uIG9iamVjdC4KLQkgKiBUaGlzIHRyYW5zaXRpb25zIGJhY2sgdG8gbWFpbGJveCBtb2RlLgotCSAqLwotCXBmb2ItPm1jYyA9IE5VTEw7Ci0KLQkvKiBTZW5kIGZ3Y21kIHRvIGRlc3Ryb3kgdGhlIHF1ZXVlLiAgKFVzaW5nIHRoZSBtYWlsYm94LikgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9yaW5nX2Rlc3Ryb3kobWNjLT5wYXJlbnRfZnVuY3Rpb24sIG1jYy0+c3EucmluZy5pZCwKLQkJCSAgICAgRldDTURfUklOR19UWVBFX01DQywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JQVNTRVJUKHN0YXR1cyA9PSAwKTsKLQotCS8qIFJlbGVhc2UgdGhlIFNRIHJlZmVyZW5jZSB0byB0aGUgQ1EgKi8KLQlhdG9taWNfZGVjKCZtY2MtPmNxX29iamVjdC0+cmVmX2NvdW50KTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tY2Nfd3JiX3N5bmNfY2Iodm9pZCAqY29udGV4dCwgaW50IHN0YXVzLCBzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIpCi17Ci0Jc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqd3JiX2NvbnRleHQgPQotCQkJCShzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICopIGNvbnRleHQ7Ci0JQVNTRVJUKHdyYl9jb250ZXh0KTsKLQkqd3JiX2NvbnRleHQtPnVzZXJzX2ZpbmFsX3N0YXR1cyA9IHN0YXVzOwotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSBwb3N0cyBhIGNvbW1hbmQgdG8gdGhlIE1DQyBzZW5kIHF1ZXVlCi0KLSAgICBtY2MgICAgICAgLSBJbnRlcm5hbCBNY2MgT2JqZWN0IHRvIGJlIGRlc3Ryb3llZC4KLQotICAgIHdyYiAgICAgICAgICAgICAtIHdyYiB0byBwb3N0LgotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KLQotICAgIElSUUwgPCBESVNQQVRDSF9MRVZFTCBpZiBDb21wbGV0aW9uQ2FsbGJhY2sgaXMgbm90IE5VTEwKLSAgICBJUlFMIDw9RElTUEFUQ0hfTEVWRUwgaWYgQ29tcGxldGlvbkNhbGxiYWNrIGlzICBOVUxMCi0KLSAgICBJZiB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdpdGggQ29tcGxldGlvbkNhbGxiYWNrICE9IE5VTEwgdGhlCi0gICAgY2FsbCBpcyBjb25zaWRlcmVkIHRvIGJlIGFzeW5jaHJvbm91cyBhbmQgd2lsbCByZXR1cm4gYXMgc29vbgotICAgIGFzIHRoZSBXUkIgaXMgcG9zdGVkIHRvIHRoZSBNQ0Mgd2l0aCBCRV9QRU5ESU5HLgotCi0gICAgSWYgQ29tcGxldGlvbkNhbGxiYWNrIGlzIE5VTEwsIHRoZW4gdGhpcyByb3V0aW5lIHdpbGwgbm90IHJldHVybiB1bnRpbAotICAgIGEgY29tcGxldGlvbiBmb3IgdGhpcyBNQ0MgY29tbWFuZCBoYXMgYmVlbiBwcm9jZXNzZWQuCi0gICAgSWYgY2FsbGVkIGF0IERJU1BBVENIX0xFVkVMIHRoZSBDb21wbGV0aW9uQ2FsbGJhY2sgbXVzdCBiZSBOVUxMLgotCi0gICAgVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgTVBVIGhhcyBiZWVuIGJvb3N0cmFwZWQgcGFzdAotICAgIG1haWxib3ggbW9kZS4KLQotCi0qLwotaW50Ci1fYmVfbXB1X3Bvc3Rfd3JiX3Jpbmcoc3RydWN0IGJlX21jY19vYmplY3QgKm1jYywgc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiLAotCQkJCXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKndyYl9jb250ZXh0KQotewotCi0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqcmluZ193cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSBCRV9QRU5ESU5HOwotCWludCBmaW5hbF9zdGF0dXMgPSBCRV9QRU5ESU5HOwotCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX0RCX0FNQVAgbWNjX2RiOwotCXUzMiBlbWJlZGRlZDsKLQotCUFTU0VSVChtcF9yaW5nX251bV9lbXB0eSgmbWNjLT5zcS5yaW5nKSA+IDApOwotCS8qCi0JICogSW5wdXQgd3JiIGlzIG1vc3QgbGlrZWx5IHRoZSBuZXh0IHdyYiBpbiB0aGUgcmluZywgc2luY2UgdGhlIGNsaWVudAotCSAqIGNhbiBwZWVrIGF0IHRoZSBhZGRyZXNzLgotCSAqLwotCXJpbmdfd3JiID0gbXBfcmluZ19wcm9kdWNlcl9wdHIoJm1jYy0+c3EucmluZyk7Ci0JaWYgKHdyYiAhPSByaW5nX3dyYikgewotCQkvKiBJZiBub3QgZXF1YWwsIGNvcHkgaXQgaW50byB0aGUgcmluZy4gKi8KLQkJbWVtY3B5KHJpbmdfd3JiLCB3cmIsIHNpemVvZihzdHJ1Y3QgTUNDX1dSQl9BTUFQKSk7Ci0JfQotI2lmZGVmIEJFX0RFQlVHCi0Jd3JiX2NvbnRleHQtPnJpbmdfd3JiID0gcmluZ193cmI7Ci0jZW5kaWYKLQllbWJlZGRlZCA9IEFNQVBfR0VUX0JJVFNfUFRSKE1DQ19XUkIsIGVtYmVkZGVkLCByaW5nX3dyYik7Ci0JaWYgKGVtYmVkZGVkKSB7Ci0JCS8qIGVtYmVkZGVkIGNvbW1hbmRzIHdpbGwgaGF2ZSB0aGUgcmVzcG9uc2Ugd2l0aGluIHRoZSBXUkIuICovCi0JCXdyYl9jb250ZXh0LT53cmIgPSByaW5nX3dyYjsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBub24tZW1iZWRkZWQgY29tbWFuZHMgd2lsbCBub3QgaGF2ZSB0aGUgcmVzcG9uc2UKLQkJICogd2l0aGluIHRoZSBXUkIsIGFuZCB0aGV5IG1heSBjb21wbGV0ZSBvdXQtb2Ytb3JkZXIuCi0JCSAqIFRoZSBXUkIgd2lsbCBub3QgYmUgdmFsaWQgdG8gaW5zcGVjdAotCQkgKiBkdXJpbmcgdGhlIGNvbXBsZXRpb24uCi0JCSAqLwotCQl3cmJfY29udGV4dC0+d3JiID0gTlVMTDsKLQl9Ci0JY2IgPSB3cmJfY29udGV4dC0+Y2I7Ci0KLQlpZiAoY2IgPT0gTlVMTCkgewotCQkvKiBBc3NpZ24gb3VyIGludGVybmFsIGNhbGxiYWNrIGlmIHRoaXMgaXMgYQotCQkgKiBzeW5jaHJvbm91cyBjYWxsLiAqLwotCQl3cmJfY29udGV4dC0+Y2IgPSBtY2Nfd3JiX3N5bmNfY2I7Ci0JCXdyYl9jb250ZXh0LT5jYl9jb250ZXh0ID0gd3JiX2NvbnRleHQ7Ci0JCXdyYl9jb250ZXh0LT51c2Vyc19maW5hbF9zdGF0dXMgPSAmZmluYWxfc3RhdHVzOwotCX0KLQkvKiBJbmNyZW1lbnQgcHJvZHVjZXIgaW5kZXggKi8KLQotCW1jY19kYi5kd1swXSA9IDA7CQkvKiBpbml0aWFsaXplICovCi0JQU1BUF9TRVRfQklUU19QVFIoTUNDX0RCLCByaWQsICZtY2NfZGIsIG1jYy0+c3EucmluZy5pZCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTUNDX0RCLCBudW1Qb3N0ZWQsICZtY2NfZGIsIDEpOwotCi0JbXBfcmluZ19wcm9kdWNlKCZtY2MtPnNxLnJpbmcpOwotCVBEX1dSSVRFKG1jYy0+cGFyZW50X2Z1bmN0aW9uLCBtcHVfbWNjX2RiLCBtY2NfZGIuZHdbMF0pOwotCVRSQUNFKERMX0lORk8sICJwaWR4OiAleCBhbmQgY2lkeDogJXguIiwgbWNjLT5zcS5yaW5nLnBpZHgsCi0JICAgICAgbWNjLT5zcS5yaW5nLmNpZHgpOwotCi0JaWYgKGNiID09IE5VTEwpIHsKLQkJaW50IHBvbGxzID0gMDsJLyogQXQgPj0gMSB1cyBwZXIgcG9sbCAgICovCi0JCS8qIFdhaXQgdW50aWwgdGhpcyBjb21tYW5kIGNvbXBsZXRlcywgcG9sbGluZyB0aGUgQ1EuICovCi0JCWRvIHsKLQkJCVRSQUNFKERMX0lORk8sICJGV0NNRCBzdWJtaXR0ZWQgaW4gdGhlIHBvbGwgbW9kZS4iKTsKLQkJCS8qIERvIG5vdCByZWFybSBDUSBpbiB0aGlzIGNvbnRleHQuICovCi0JCQliZV9tY2NfcHJvY2Vzc19jcShtY2MsIGZhbHNlKTsKLQotCQkJaWYgKGZpbmFsX3N0YXR1cyA9PSBCRV9QRU5ESU5HKSB7Ci0JCQkJaWYgKCgrK3BvbGxzICYgMHg3RkZGRikgPT0gMCkgewotCQkJCQlUUkFDRShETF9XQVJOLAotCQkJCQkgICAgICAiV2FybmluZyA6IHBvbGxpbmcgTUNDIENRIGZvciAlZCIKLQkJCQkJICAgICAgIm1zLiIsIHBvbGxzIC8gMTAwMCk7Ci0JCQkJfQotCi0JCQkJdWRlbGF5KDEpOwotCQkJfQotCi0JCQkvKiBmaW5hbF9zdGF0dXMgY2hhbmdlZCB3aGVuIHRoZSBjb21tYW5kIGNvbXBsZXRlcyAqLwotCQl9IHdoaWxlIChmaW5hbF9zdGF0dXMgPT0gQkVfUEVORElORyk7Ci0KLQkJc3RhdHVzID0gZmluYWxfc3RhdHVzOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0cnVjdCBNQ0NfV1JCX0FNQVAgKgotX2JlX21wdV9wZWVrX3Jpbmdfd3JiKHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MsIGJvb2wgZHJpdmluZ19xdWV1ZSkKLXsKLQkvKiBJZiB3ZSBoYXZlIHF1ZXVlZCBpdGVtcywgZG8gbm90IGFsbG93IGEgcG9zdCB0byBieXBhc3MgdGhlIHF1ZXVlLiAqLwotCWlmICghZHJpdmluZ19xdWV1ZSAmJiAhbGlzdF9lbXB0eSgmbWNjLT5iYWNrbG9nKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobXBfcmluZ19udW1fZW1wdHkoJm1jYy0+c3EucmluZykgPD0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopIG1wX3JpbmdfcHJvZHVjZXJfcHRyKCZtY2MtPnNxLnJpbmcpOwotfQotCi1pbnQKLWJlX21wdV9pbml0X21haWxib3goc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwgc3RydWN0IHJpbmdfZGVzYyAqbWFpbGJveCkKLXsKLQlBU1NFUlQobWFpbGJveCk7Ci0JcGZvYi0+bWFpbGJveC52YSA9IG1haWxib3gtPnZhOwotCXBmb2ItPm1haWxib3gucGEgPSAgY3B1X3RvX2xlNjQobWFpbGJveC0+cGEpOwotCXBmb2ItPm1haWxib3gubGVuZ3RoID0gbWFpbGJveC0+bGVuZ3RoOwotCi0JQVNTRVJUKCgodTMyKShzaXplX3QpcGZvYi0+bWFpbGJveC52YSAmIDB4ZikgPT0gMCk7Ci0JQVNTRVJUKCgodTMyKShzaXplX3QpcGZvYi0+bWFpbGJveC5wYSAmIDB4ZikgPT0gMCk7Ci0JLyoKLQkgKiBJc3N1ZSB0aGUgV1JCIHRvIHNldCBNUFUgZW5kaWFubmVzcwotCSAqLwotCXsKLQkJdTY0ICplbmRpYW5fY2hlY2sgPSAodTY0ICopIChwZm9iLT5tYWlsYm94LnZhICsKLQkJCQlvZmZzZXRvZihzdHJ1Y3QgQkVfTUNDX01BSUxCT1hfQU1BUCwgd3JiKS84KTsKLQkJKmVuZGlhbl9jaGVjayA9IDB4RkYxMjM0RkZGRjU2NzhGRlVMTDsKLQl9Ci0KLQliZV9tY2NfbWFpbGJveF9ub3RpZnlfYW5kX3dhaXQocGZvYik7Ci0KLQlyZXR1cm4gQkVfU1VDQ0VTUzsKLX0KLQotCi0vKgotICAgIFRoaXMgcm91dGluZSBwb3N0cyBhIGNvbW1hbmQgdG8gdGhlIE1DQyBtYWlsYm94LgotCi0gICAgRnVuY09iaiAgICAgICAgIC0gRnVuY3Rpb24gT2JqZWN0IHRvIHBvc3QgdGhlIFdSQiBvbiBiZWhhbGYgb2YuCi0gICAgd3JiICAgICAgICAgICAgIC0gd3JiIHRvIHBvc3QuCi0gICAgQ29tcGxldGlvbkNhbGxiYWNrICAtIEFkZHJlc3Mgb2YgYSBjYWxsYmFjayByb3V0aW5lIHRvIGludm9rZSBvbmNlIHRoZSBXUkIKLQkJCQlpcyBjb21wbGV0ZWQuCi0gICAgQ29tcGxldGlvbkNhbGxiYWNrQ29udGV4dCAtIE9wYXF1ZSBjb250ZXh0IHRvIGJlIHBhc3NlZCBkdXJpbmcgdGhlIGNhbGwgdG8KLQkJCQl0aGUgQ29tcGxldGlvbkNhbGxiYWNrLgotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMIDw9RElTUEFUQ0hfTEVWRUwgaWYgQ29tcGxldGlvbkNhbGxiYWNrIGlzICBOVUxMCi0KLSAgICBUaGlzIHJvdXRpbmUgd2lsbCBibG9jayB1bnRpbCBhIGNvbXBsZXRpb24gZm9yIHRoaXMgTUNDIGNvbW1hbmQgaGFzIGJlZW4KLSAgICBwcm9jZXNzZWQuIElmIGNhbGxlZCBhdCBESVNQQVRDSF9MRVZFTCB0aGUgQ29tcGxldGlvbkNhbGxiYWNrIG11c3QgYmUgTlVMTC4KLQotICAgIFRoaXMgcm91dGluZSBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIE1QVSBoYXMgbm90IGJlZW4gYm9vc3RyYXBlZCBwYXN0Ci0gICAgbWFpbGJveCBtb2RlLgotKi8KLWludAotX2JlX21wdV9wb3N0X3dyYl9tYWlsYm94KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JIHN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiwgc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqd3JiX2NvbnRleHQpCi17Ci0Jc3RydWN0IE1DQ19NQUlMQk9YX0FNQVAgKm1haWxib3ggPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKm1iX3dyYjsKLQlzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVAgKm1iX2NxOwotCXUzMiBvZmZzZXQsIHN0YXR1czsKLQotCUFTU0VSVChwZm9iLT5tY2MgPT0gTlVMTCk7Ci0JbWFpbGJveCA9IHBmb2ItPm1haWxib3gudmE7Ci0JQVNTRVJUKG1haWxib3gpOwotCi0Jb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19NQUlMQk9YX0FNQVAsIHdyYikvODsKLQltYl93cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAodTggKiltYWlsYm94ICsgb2Zmc2V0OwotCWlmIChtYl93cmIgIT0gd3JiKSB7Ci0JCW1lbXNldChtYWlsYm94LCAwLCBzaXplb2YoKm1haWxib3gpKTsKLQkJbWVtY3B5KG1iX3dyYiwgd3JiLCBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkpOwotCX0KLQkvKiBUaGUgY2FsbGJhY2sgY2FuIGluc3BlY3QgdGhlIGZpbmFsIFdSQiB0byBnZXQgb3V0cHV0IHBhcmFtZXRlcnMuICovCi0Jd3JiX2NvbnRleHQtPndyYiA9IG1iX3dyYjsKLQotCWJlX21jY19tYWlsYm94X25vdGlmeV9hbmRfd2FpdChwZm9iKTsKLQotCS8qIEEgY29tbWFuZCBjb21wbGV0ZWQuICBVc2UgdGFnIHRvIGRldGVybWluZSB3aGljaCBjb21tYW5kLiAqLwotCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfTUFJTEJPWF9BTUFQLCBjcSkvODsKLQltYl9jcSA9IChzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVAgKikgKCh1OCAqKW1haWxib3ggKyBvZmZzZXQpOwotCWJlX21jY19wcm9jZXNzX2NxZShwZm9iLCBtYl9jcSk7Ci0KLQlzdGF0dXMgPSBBTUFQX0dFVF9CSVRTX1BUUihNQ0NfQ1FfRU5UUlksIGNvbXBsZXRpb25fc3RhdHVzLCBtYl9jcSk7Ci0JaWYgKHN0YXR1cykKLQkJc3RhdHVzID0gQkVfTk9UX09LOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKgotX2JlX21jY19hbGxvY2F0ZV93cmJfY29udGV4dChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKmNvbnRleHQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPm1jY19jb250ZXh0X2xvY2ssIGlycSk7Ci0KLQlpZiAoIXBmb2ItPm1haWxib3guZGVmYXVsdF9jb250ZXh0X2FsbG9jYXRlZCkgewotCQkvKiBVc2UgdGhlIHNpbmdsZSBkZWZhdWx0IGNvbnRleHQgdGhhdCB3ZQotCQkgKiBhbHdheXMgaGF2ZSBhbGxvY2F0ZWQuICovCi0JCXBmb2ItPm1haWxib3guZGVmYXVsdF9jb250ZXh0X2FsbG9jYXRlZCA9IHRydWU7Ci0JCWNvbnRleHQgPSAmcGZvYi0+bWFpbGJveC5kZWZhdWx0X2NvbnRleHQ7Ci0JfSBlbHNlIGlmIChwZm9iLT5tY2MpIHsKLQkJLyogR2V0IGEgY29udGV4dCBmcm9tIHRoZSBmcmVlIGxpc3QuIElmIGFueSBhcmUgYXZhaWxhYmxlLiAqLwotCQlpZiAoIWxpc3RfZW1wdHkoJnBmb2ItPm1jYy0+d3JiX2NvbnRleHQubGlzdF9oZWFkKSkgewotCQkJY29udGV4dCA9IGxpc3RfZmlyc3RfZW50cnkoCi0JCQkJJnBmb2ItPm1jYy0+d3JiX2NvbnRleHQubGlzdF9oZWFkLAotCQkJCQkgc3RydWN0IGJlX21jY193cmJfY29udGV4dCwgbmV4dCk7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5tY2NfY29udGV4dF9sb2NrLCBpcnEpOwotCi0JcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLXZvaWQKLV9iZV9tY2NfZnJlZV93cmJfY29udGV4dChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJIHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKmNvbnRleHQpCi17Ci0JdW5zaWduZWQgbG9uZyBpcnE7Ci0KLQlBU1NFUlQoY29udGV4dCk7Ci0JLyoKLQkgKiBaZXJvIGR1cmluZyBmcmVlIHRvIHRyeSBhbmQgY2F0Y2ggYW55IGJ1Z3Mgd2hlcmUgdGhlIGNvbnRleHQKLQkgKiBpcyBhY2Nlc3NlZCBhZnRlciBhIGZyZWUuCi0JICovCi0JbWVtc2V0KGNvbnRleHQsIDAsIHNpemVvZihjb250ZXh0KSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+bWNjX2NvbnRleHRfbG9jaywgaXJxKTsKLQotCWlmIChjb250ZXh0ID09ICZwZm9iLT5tYWlsYm94LmRlZmF1bHRfY29udGV4dCkgewotCQkvKiBGcmVlIHRoZSBkZWZhdWx0IGNvbnRleHQuICovCi0JCUFTU0VSVChwZm9iLT5tYWlsYm94LmRlZmF1bHRfY29udGV4dF9hbGxvY2F0ZWQpOwotCQlwZm9iLT5tYWlsYm94LmRlZmF1bHRfY29udGV4dF9hbGxvY2F0ZWQgPSBmYWxzZTsKLQl9IGVsc2UgewotCQkvKiBBZGQgdG8gZnJlZSBsaXN0LiAqLwotCQlBU1NFUlQocGZvYi0+bWNjKTsKLQkJbGlzdF9hZGRfdGFpbCgmY29udGV4dC0+bmV4dCwKLQkJCQkmcGZvYi0+bWNjLT53cmJfY29udGV4dC5saXN0X2hlYWQpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPm1jY19jb250ZXh0X2xvY2ssIGlycSk7Ci19Ci0KLWludAotYmVfbWNjX2FkZF9hc3luY19ldmVudF9jYWxsYmFjayhzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjX29iamVjdCwKLQkJbWNjX2FzeW5jX2V2ZW50X2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0KQotewotCS8qIExvY2sgYWdhaW5zdCBhbnlvbmUgdHJ5aW5nIHRvIGNoYW5nZSB0aGUgY2FsbGJhY2svY29udGV4dCBwb2ludGVycwotCSAqIHdoaWxlIGJlaW5nIHVzZWQuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1jY19vYmplY3QtPnBhcmVudF9mdW5jdGlvbi0+Y3FfbG9jaywKLQkJbWNjX29iamVjdC0+cGFyZW50X2Z1bmN0aW9uLT5jcV9pcnEpOwotCi0JLyogQXNzaWduIHRoZSBhc3luYyBjYWxsYmFjay4gKi8KLQltY2Nfb2JqZWN0LT5hc3luY19jb250ZXh0ID0gY2JfY29udGV4dDsKLQltY2Nfb2JqZWN0LT5hc3luY19jYiA9IGNiOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNjX29iamVjdC0+cGFyZW50X2Z1bmN0aW9uLT5jcV9sb2NrLAotCQkJCQltY2Nfb2JqZWN0LT5wYXJlbnRfZnVuY3Rpb24tPmNxX2lycSk7Ci0KLQlyZXR1cm4gQkVfU1VDQ0VTUzsKLX0KLQotI2RlZmluZSBNUFVfRVBfQ09OVFJPTCAwCi0jZGVmaW5lIE1QVV9FUF9TRU1BUEhPUkUgMHhhYwotCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfd2FpdF9mb3JfUE9TVF9jb21wbGV0ZQotICogICBXYWl0cyB1bnRpbCB0aGUgQmxhZGVFbmdpbmUgUE9TVCBjb21wbGV0ZXMgKGVpdGhlciBpbiBlcnJvciBvciBzdWNjZXNzKS4KLSAqIHBmb2IgLQotICogcmV0dXJuIHN0YXR1cyAgIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4gTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbnQgYmVfd2FpdF9mb3JfUE9TVF9jb21wbGV0ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCXN0cnVjdCBNR01UX0hCQV9QT1NUX1NUQVRVU19TVFJVQ1RfQU1BUCBzdGF0dXM7Ci0JaW50IHM7Ci0JdTMyIHBvc3RfZXJyb3IsIHBvc3Rfc3RhZ2U7Ci0KLQljb25zdCB1MzIgdXNfcGVyX2xvb3AgPSAxMDAwOwkvKiAxMDAwdXMgKi8KLQljb25zdCB1MzIgcHJpbnRfZnJlcXVlbmN5X2xvb3BzID0gMTAwMDAwMCAvIHVzX3Blcl9sb29wOwotCWNvbnN0IHUzMiBtYXhfbG9vcHMgPSA2MCAqIHByaW50X2ZyZXF1ZW5jeV9sb29wczsKLQl1MzIgbG9vcHMgPSAwOwotCi0JLyoKLQkgKiBXYWl0IGZvciBhcm0gZncgaW5kaWNhdGluZyBpdCBpcyBkb25lIG9yIGEgZmF0YWwgZXJyb3IgaGFwcGVuZWQuCi0JICogTm90ZTogUE9TVCBjYW4gdGFrZSBzb21lIHRpbWUgdG8gY29tcGxldGUgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24KLQkgKiBzZXR0aW5ncyAoY29uc2lkZXIgQVJNIGF0dGVtcHRzIHRvIGFjcXVpcmUgYW4gSVAgYWRkcmVzcwotCSAqIG92ZXIgREhDUCEhISkuCi0JICoKLQkgKi8KLQlkbyB7Ci0JCXN0YXR1cy5kd1swXSA9IGlvcmVhZDMyKHBmb2ItPmNzcl92YSArIE1QVV9FUF9TRU1BUEhPUkUpOwotCQlwb3N0X2Vycm9yID0gQU1BUF9HRVRfQklUU19QVFIoTUdNVF9IQkFfUE9TVF9TVEFUVVNfU1RSVUNULAotCQkJCQkJZXJyb3IsICZzdGF0dXMpOwotCQlwb3N0X3N0YWdlID0gQU1BUF9HRVRfQklUU19QVFIoTUdNVF9IQkFfUE9TVF9TVEFUVVNfU1RSVUNULAotCQkJCQkJc3RhZ2UsICZzdGF0dXMpOwotCQlpZiAoMCA9PSAobG9vcHMgJSBwcmludF9mcmVxdWVuY3lfbG9vcHMpKSB7Ci0JCQkvKiBQcmludCBjdXJyZW50IHN0YXR1cyAqLwotCQkJVFJBQ0UoRExfSU5GTywgIlBPU1Qgc3RhdHVzID0gMHgleCAoc3RhZ2UgPSAweCV4KSIsCi0JCQkJc3RhdHVzLmR3WzBdLCBwb3N0X3N0YWdlKTsKLQkJfQotCQl1ZGVsYXkodXNfcGVyX2xvb3ApOwotCX0gd2hpbGUgKChwb3N0X2Vycm9yICE9IDEpICYmCi0JCSAocG9zdF9zdGFnZSAhPSBQT1NUX1NUQUdFX0FSTUZXX1JFQURZKSAmJgotCQkgKCsrbG9vcHMgPCBtYXhfbG9vcHMpKTsKLQotCWlmIChwb3N0X2Vycm9yID09IDEpIHsKLQkJVFJBQ0UoRExfRVJSLCAiUE9TVCBlcnJvciEgU3RhdHVzID0gMHgleCAoc3RhZ2UgPSAweCV4KSIsCi0JCSAgICAgIHN0YXR1cy5kd1swXSwgcG9zdF9zdGFnZSk7Ci0JCXMgPSBCRV9OT1RfT0s7Ci0JfSBlbHNlIGlmIChwb3N0X3N0YWdlICE9IFBPU1RfU1RBR0VfQVJNRldfUkVBRFkpIHsKLQkJVFJBQ0UoRExfRVJSLCAiUE9TVCB0aW1lLW91dCEgU3RhdHVzID0gMHgleCAoc3RhZ2UgPSAweCV4KSIsCi0JCSAgICAgIHN0YXR1cy5kd1swXSwgcG9zdF9zdGFnZSk7Ci0JCXMgPSBCRV9OT1RfT0s7Ci0JfSBlbHNlIHsKLQkJcyA9IEJFX1NVQ0NFU1M7Ci0JfQotCXJldHVybiBzOwotfQotCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfa2lja29mZl9hbmRfd2FpdF9mb3JfUE9TVAotICogICBJbnRlcmFjdHMgd2l0aCB0aGUgQmxhZGVFbmdpbmUgbWFuYWdlbWVudCBwcm9jZXNzb3IgdG8gaW5pdGlhdGUgUE9TVCwgYW5kCi0gKiAgIHN1YnNlcXVlbnRseSB3YWl0cyB1bnRpbCBQT1NUIGNvbXBsZXRlcyAoZWl0aGVyIGluIGVycm9yIG9yIHN1Y2Nlc3MpLgotICogICBUaGUgY2FsbGVyIG11c3QgYWNxdWlyZSB0aGUgcmVzZXQgc2VtYXBob3JlIGJlZm9yZSBpbml0aWF0aW5nIFBPU1QKLSAqICAgdG8gcHJldmVudCBtdWx0aXBsZSBkcml2ZXJzIGludGVyYWN0aW5nIHdpdGggdGhlIG1hbmFnZW1lbnQgcHJvY2Vzc29yLgotICogICBPbmNlIFBPU1QgaXMgY29tcGxldGUgdGhlIGNhbGxlciBtdXN0IHJlbGVhc2UgdGhlIHJlc2V0IHNlbWFwaG9yZS4KLSAqICAgQ2FsbGVycyB3aG8gb25seSB3YW50IHRvIHdhaXQgZm9yIFBPU1QgY29tcGxldGUgbWF5IGNhbGwKLSAqICAgYmVfd2FpdF9mb3JfUE9TVF9jb21wbGV0ZS4KLSAqIHBmb2IgLQotICogcmV0dXJuIHN0YXR1cyAgIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4gTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbnQKLWJlX2tpY2tvZmZfYW5kX3dhaXRfZm9yX1BPU1Qoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlzdHJ1Y3QgTUdNVF9IQkFfUE9TVF9TVEFUVVNfU1RSVUNUX0FNQVAgc3RhdHVzOwotCWludCBzOwotCi0JY29uc3QgdTMyIHVzX3Blcl9sb29wID0gMTAwMDsJLyogMTAwMHVzICovCi0JY29uc3QgdTMyIHByaW50X2ZyZXF1ZW5jeV9sb29wcyA9IDEwMDAwMDAgLyB1c19wZXJfbG9vcDsKLQljb25zdCB1MzIgbWF4X2xvb3BzID0gNSAqIHByaW50X2ZyZXF1ZW5jeV9sb29wczsKLQl1MzIgbG9vcHMgPSAwOwotCXUzMiBwb3N0X2Vycm9yLCBwb3N0X3N0YWdlOwotCi0JLyogV2FpdCBmb3IgYXJtIGZ3IGF3YWl0aW5nIGhvc3QgcmVhZHkgb3IgYSBmYXRhbCBlcnJvciBoYXBwZW5lZC4gKi8KLQlUUkFDRShETF9JTkZPLCAiV2FpdCBmb3IgQmxhZGVFbmdpbmUgcmVhZHkgdG8gUE9TVCIpOwotCWRvIHsKLQkJc3RhdHVzLmR3WzBdID0gaW9yZWFkMzIocGZvYi0+Y3NyX3ZhICsgTVBVX0VQX1NFTUFQSE9SRSk7Ci0JCXBvc3RfZXJyb3IgPSBBTUFQX0dFVF9CSVRTX1BUUihNR01UX0hCQV9QT1NUX1NUQVRVU19TVFJVQ1QsCi0JCQkJCQllcnJvciwgJnN0YXR1cyk7Ci0JCXBvc3Rfc3RhZ2UgPSBBTUFQX0dFVF9CSVRTX1BUUihNR01UX0hCQV9QT1NUX1NUQVRVU19TVFJVQ1QsCi0JCQkJCQlzdGFnZSwgJnN0YXR1cyk7Ci0JCWlmICgwID09IChsb29wcyAlIHByaW50X2ZyZXF1ZW5jeV9sb29wcykpIHsKLQkJCS8qIFByaW50IGN1cnJlbnQgc3RhdHVzICovCi0JCQlUUkFDRShETF9JTkZPLCAiUE9TVCBzdGF0dXMgPSAweCV4IChzdGFnZSA9IDB4JXgpIiwKLQkJCSAgICAgIHN0YXR1cy5kd1swXSwgcG9zdF9zdGFnZSk7Ci0JCX0KLQkJdWRlbGF5KHVzX3Blcl9sb29wKTsKLQl9IHdoaWxlICgocG9zdF9lcnJvciAhPSAxKSAmJgotCQkgKHBvc3Rfc3RhZ2UgPCBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZKSAmJgotCQkgKCsrbG9vcHMgPCBtYXhfbG9vcHMpKTsKLQotCWlmIChwb3N0X2Vycm9yID09IDEpIHsKLQkJVFJBQ0UoRExfRVJSLCAiUHJlLVBPU1QgZXJyb3IhIFN0YXR1cyA9IDB4JXggKHN0YWdlID0gMHgleCkiLAotCQkgICAgICBzdGF0dXMuZHdbMF0sIHBvc3Rfc3RhZ2UpOwotCQlzID0gQkVfTk9UX09LOwotCX0gZWxzZSBpZiAocG9zdF9zdGFnZSA9PSBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZKSB7Ci0JCWlvd3JpdGUzMihQT1NUX1NUQUdFX0hPU1RfUkRZLCBwZm9iLT5jc3JfdmEgKyBNUFVfRVBfU0VNQVBIT1JFKTsKLQotCQkvKiBXYWl0IGZvciBQT1NUIHRvIGNvbXBsZXRlICovCi0JCXMgPSBiZV93YWl0X2Zvcl9QT1NUX2NvbXBsZXRlKHBmb2IpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEVpdGhlciBhIHRpbWVvdXQgd2FpdGluZyBmb3IgaG9zdCByZWFkeSBzaWduYWwgb3IgUE9TVCBoYXMKLQkJICogbW92ZWQgYWhlYWQgd2l0aG91dCByZXF1aXJpbmcgYSBob3N0IHJlYWR5IHNpZ25hbC4KLQkJICogTWlnaHQgYXMgd2VsbCBnaXZlIFBPU1QgYSBjaGFuY2UgdG8gY29tcGxldGUKLQkJICogKG9yIHRpbWVvdXQgYWdhaW4pLgotCQkgKi8KLQkJcyA9IGJlX3dhaXRfZm9yX1BPU1RfY29tcGxldGUocGZvYik7Ci0JfQotCXJldHVybiBzOwotfQotCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfcGNpX3NvZnRfcmVzZXQKLSAqICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaXNzdWUgYSBCbGFkZUVuZ2luZSBzb2Z0IHJlc2V0LgotICogICBDYWxsZXJzIHNob3VsZCBhY3F1aXJlIHRoZSBzb2Z0IHJlc2V0IHNlbWFwaG9yZSBiZWZvcmUgY2FsbGluZyB0aGlzCi0gKiAgIGZ1bmN0aW9uLiBBZGRpdGlvbmFseSwgY2FsbGVycyBzaG91bGQgZW5zdXJlIHRoZXkgY2Fubm90IGJlIHByZS1lbXB0ZWQKLSAqICAgd2hpbGUgdGhlIHJvdXRpbmUgZXhlY3V0ZXMuIFVwb24gY29tcGxldGlvbiBvZiB0aGlzIHJvdXRpbmUsIGNhbGxlcnMKLSAqICAgc2hvdWxkIHJlbGVhc2UgdGhlIHJlc2V0IHNlbWFwaG9yZS4gVGhpcyByb3V0aW5lIGltcGxpY2l0bHkgd2FpdHMKLSAqICAgZm9yIEJsYWRlRW5naW5lIFBPU1QgdG8gY29tcGxldGUuCi0gKiBwZm9iIC0KLSAqIHJldHVybiBzdGF0dXMgICAtIEJFX1NVQ0NFU1MgKDApIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQgYmVfcGNpX3NvZnRfcmVzZXQoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlzdHJ1Y3QgUENJQ0ZHX1NPRlRfUkVTRVRfQ1NSX0FNQVAgc29mdF9yZXNldDsKLQlzdHJ1Y3QgUENJQ0ZHX09OTElORTBfQ1NSX0FNQVAgcGNpT25saW5lMDsKLQlzdHJ1Y3QgUENJQ0ZHX09OTElORTFfQ1NSX0FNQVAgcGNpT25saW5lMTsKLQlzdHJ1Y3QgRVBfQ09OVFJPTF9DU1JfQU1BUCBlcENvbnRyb2xDc3I7Ci0JaW50IHN0YXR1cyA9IEJFX1NVQ0NFU1M7Ci0JdTMyIGksIHNvZnRfcmVzZXRfYml0OwotCi0JVFJBQ0UoRExfTk9URSwgIlBDSSByZXNldC4uLiIpOwotCi0JLyogSXNzdWUgc29mdCByZXNldCAjMSB0byBnZXQgQmxhZGVFbmdpbmUgaW50byBhIGtub3duIHN0YXRlLiAqLwotCXNvZnRfcmVzZXQuZHdbMF0gPSBQQ0lDRkcwX1JFQUQocGZvYiwgc29mdF9yZXNldCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoUENJQ0ZHX1NPRlRfUkVTRVRfQ1NSLCBzb2Z0cmVzZXQsIHNvZnRfcmVzZXQuZHcsIDEpOwotCVBDSUNGRzBfV1JJVEUocGZvYiwgaG9zdF90aW1lcl9pbnRfY3RybCwgc29mdF9yZXNldC5kd1swXSk7Ci0JLyoKLQkgKiB3YWl0IHRpbCBzb2Z0IHJlc2V0IGlzIGRlYXNzZXJ0ZWQgLSBoYXJkd2FyZQotCSAqIGRlYXNzZXJ0cyBhZnRlciBzb21lIHRpbWUuCi0JICovCi0JaSA9IDA7Ci0JZG8gewotCQl1ZGVsYXkoNTApOwotCQlzb2Z0X3Jlc2V0LmR3WzBdID0gUENJQ0ZHMF9SRUFEKHBmb2IsIHNvZnRfcmVzZXQpOwotCQlzb2Z0X3Jlc2V0X2JpdCA9IEFNQVBfR0VUX0JJVFNfUFRSKFBDSUNGR19TT0ZUX1JFU0VUX0NTUiwKLQkJCQkJc29mdHJlc2V0LCBzb2Z0X3Jlc2V0LmR3KTsKLQl9IHdoaWxlIChzb2Z0X3Jlc2V0X2JpdCAgJiYgKGkrKyA8IDEwMjQpKTsKLQlpZiAoc29mdF9yZXNldF9iaXQgIT0gMCkgewotCQlUUkFDRShETF9FUlIsICJTb2Z0LXJlc2V0ICMxIGRpZCBub3QgZGVhc3NlcnQgYXMgZXhwZWN0ZWQuIik7Ci0JCXN0YXR1cyA9IEJFX05PVF9PSzsKLQkJZ290byBFcnJvcl9sYWJlbDsKLQl9Ci0JLyogTWFzayBldmVyeXRoaW5nICAqLwotCVBDSUNGRzBfV1JJVEUocGZvYiwgdWVfc3RhdHVzX2xvd19tYXNrLCAweEZGRkZGRkZGKTsKLQlQQ0lDRkcwX1dSSVRFKHBmb2IsIHVlX3N0YXR1c19oaV9tYXNrLCAweEZGRkZGRkZGKTsKLQkvKgotCSAqIFNldCBldmVyeXRoaW5nIG9mZmxpbmUgZXhjZXB0IE1QVSBJUkFNIChpdCBpcyBvZmZsaW5lIHdpdGgKLQkgKiB0aGUgc29mdC1yZXNldCwgYnV0IHNvZnQtcmVzZXQgZG9lcyBub3QgcmVzZXQgdGhlIFBDSUNGRyByZWdpc3RlcnMhKQotCSAqLwotCXBjaU9ubGluZTAuZHdbMF0gPSAwOwotCXBjaU9ubGluZTEuZHdbMF0gPSAwOwotCUFNQVBfU0VUX0JJVFNfUFRSKFBDSUNGR19PTkxJTkUxX0NTUiwgbXB1X2lyYW1fb25saW5lLAotCQkJCXBjaU9ubGluZTEuZHcsIDEpOwotCVBDSUNGRzBfV1JJVEUocGZvYiwgb25saW5lMCwgcGNpT25saW5lMC5kd1swXSk7Ci0JUENJQ0ZHMF9XUklURShwZm9iLCBvbmxpbmUxLCBwY2lPbmxpbmUxLmR3WzBdKTsKLQotCXVkZWxheSgyMDAwMCk7Ci0KLQkvKiBJc3N1ZSBzb2Z0IHJlc2V0ICMyLiAqLwotCUFNQVBfU0VUX0JJVFNfUFRSKFBDSUNGR19TT0ZUX1JFU0VUX0NTUiwgc29mdHJlc2V0LCBzb2Z0X3Jlc2V0LmR3LCAxKTsKLQlQQ0lDRkcwX1dSSVRFKHBmb2IsIGhvc3RfdGltZXJfaW50X2N0cmwsIHNvZnRfcmVzZXQuZHdbMF0pOwotCS8qCi0JICogd2FpdCB0aWwgc29mdCByZXNldCBpcyBkZWFzc2VydGVkIC0gaGFyZHdhcmUKLQkgKiBkZWFzc2VydHMgYWZ0ZXIgc29tZSB0aW1lLgotCSAqLwotCWkgPSAwOwotCWRvIHsKLQkJdWRlbGF5KDUwKTsKLQkJc29mdF9yZXNldC5kd1swXSA9IFBDSUNGRzBfUkVBRChwZm9iLCBzb2Z0X3Jlc2V0KTsKLQkJc29mdF9yZXNldF9iaXQgPSBBTUFQX0dFVF9CSVRTX1BUUihQQ0lDRkdfU09GVF9SRVNFVF9DU1IsCi0JCQkJCXNvZnRyZXNldCwgc29mdF9yZXNldC5kdyk7Ci0JfSB3aGlsZSAoc29mdF9yZXNldF9iaXQgICYmIChpKysgPCAxMDI0KSk7Ci0JaWYgKHNvZnRfcmVzZXRfYml0ICE9IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAiU29mdC1yZXNldCAjMSBkaWQgbm90IGRlYXNzZXJ0IGFzIGV4cGVjdGVkLiIpOwotCQlzdGF0dXMgPSBCRV9OT1RfT0s7Ci0JCWdvdG8gRXJyb3JfbGFiZWw7Ci0JfQotCi0KLQl1ZGVsYXkoMjAwMDApOwotCi0JLyogVGFrZSBNUFUgb3V0IG9mIHJlc2V0LiAqLwotCi0JZXBDb250cm9sQ3NyLmR3WzBdID0gaW9yZWFkMzIocGZvYi0+Y3NyX3ZhICsgTVBVX0VQX0NPTlRST0wpOwotCUFNQVBfU0VUX0JJVFNfUFRSKEVQX0NPTlRST0xfQ1NSLCBDUFVfcmVzZXQsICZlcENvbnRyb2xDc3IsIDApOwotCWlvd3JpdGUzMigodTMyKWVwQ29udHJvbENzci5kd1swXSwgcGZvYi0+Y3NyX3ZhICsgTVBVX0VQX0NPTlRST0wpOwotCi0JLyogS2lja29mZiBCRSBQT1NUIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovCi0Jc3RhdHVzID0gYmVfa2lja29mZl9hbmRfd2FpdF9mb3JfUE9TVChwZm9iKTsKLQotRXJyb3JfbGFiZWw6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfcGNpX3Jlc2V0X3JlcXVpcmVkCi0gKiAgIFRoaXMgcHJpdmF0ZSBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZGV0ZWN0IGlmIGEgaG9zdCBlbnRpdHkgaXMKLSAqICAgcmVxdWlyZWQgdG8gaXNzdWUgYSBQQ0kgc29mdCByZXNldCBhbmQgc3Vic2VxdWVudGx5IGRyaXZlCi0gKiAgIEJsYWRlRW5naW5lIFBPU1QuIFNjZW5hcmlvcyB3aGVyZSB0aGlzIGlzIHJlcXVpcmVkOgotICogICAxKSBCSU9TLWxlc3MgY29uZmlndXJhdGlvbgotICogICAyKSBIb3Qtc3dhcC9wbHVnL3Bvd2VyLW9uCi0gKiBwZm9iIC0KLSAqIHJldHVybiAgIHRydWUgaWYgYSByZXNldCBpcyByZXF1aXJlZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIGJvb2wgYmVfcGNpX3Jlc2V0X3JlcXVpcmVkKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0Jc3RydWN0IE1HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVF9BTUFQIHN0YXR1czsKLQlib29sIGRvX3Jlc2V0ID0gZmFsc2U7Ci0JdTMyIHBvc3RfZXJyb3IsIHBvc3Rfc3RhZ2U7Ci0KLQkvKgotCSAqIFJlYWQgdGhlIFBPU1Qgc3RhdHVzIHJlZ2lzdGVyCi0JICovCi0Jc3RhdHVzLmR3WzBdID0gaW9yZWFkMzIocGZvYi0+Y3NyX3ZhICsgTVBVX0VQX1NFTUFQSE9SRSk7Ci0JcG9zdF9lcnJvciA9IEFNQVBfR0VUX0JJVFNfUFRSKE1HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVCwgZXJyb3IsCi0JCQkJCQkJCSZzdGF0dXMpOwotCXBvc3Rfc3RhZ2UgPSBBTUFQX0dFVF9CSVRTX1BUUihNR01UX0hCQV9QT1NUX1NUQVRVU19TVFJVQ1QsIHN0YWdlLAotCQkJCQkJCQkmc3RhdHVzKTsKLQlpZiAocG9zdF9zdGFnZSA8PSBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZKSB7Ci0JCS8qCi0JCSAqIElmIEJsYWRlRW5naW5lIGlzIHdhaXRpbmcgZm9yIGhvc3QgcmVhZHkgaW5kaWNhdGlvbiwKLQkJICogd2Ugd2FudCB0byBkbyBhIFBDSSByZXNldC4KLQkJICovCi0JCWRvX3Jlc2V0ID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZG9fcmVzZXQ7Ci19Ci0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOiBiZV9kcml2ZV9QT1NUCi0gKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRyaXZlIEJsYWRlRW5naW5lIFBPU1QuIFRoZQotICogICBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGV5IGNhbm5vdCBiZSBwcmUtZW1wdGVkIHdoaWxlIHRoaXMgcm91dGluZSBleGVjdXRlcy4KLSAqIHBmb2IgLQotICogcmV0dXJuIHN0YXR1cyAgIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4gTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludCBiZV9kcml2ZV9QT1NUKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0JaW50IHN0YXR1czsKLQotCWlmIChmYWxzZSAhPSBiZV9wY2lfcmVzZXRfcmVxdWlyZWQocGZvYikpIHsKLQkJLyogUENJIHJlc2V0IGlzIG5lZWRlZCAoaW1wbGljaXRseSBzdGFydHMgYW5kIHdhaXRzIGZvciBQT1NUKSAqLwotCQlzdGF0dXMgPSBiZV9wY2lfc29mdF9yZXNldChwZm9iKTsKLQl9IGVsc2UgewotCQkvKiBObyBQQ0kgcmVzZXQgaXMgbmVlZGVkLCBzdGFydCBQT1NUICovCi0JCXN0YXR1cyA9IGJlX2tpY2tvZmZfYW5kX3dhaXRfZm9yX1BPU1QocGZvYik7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFmM2Y4Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvbXB1LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fbXB1X2FtYXBfaF9fCi0jZGVmaW5lIF9fbXB1X2FtYXBfaF9fCi0jaW5jbHVkZSAiZXAuaCIKLQotLyogUHJvdmlkZSBjb250cm9sIHBhcmFtZXRlcnMgZm9yIHRoZSBNYW5hZ21lbnQgUHJvY2Vzc29yIFVuaXQuICovCi1zdHJ1Y3QgQkVfTVBVX0NTUk1BUF9BTUFQIHsKLQlzdHJ1Y3QgQkVfRVBfQ1NSTUFQX0FNQVAgZXA7Ci0JdTggcnN2ZDBbMTI4XTsJLyogRFdPUkQgNjQgKi8KLQl1OCByc3ZkMVszMl07CS8qIERXT1JEIDY4ICovCi0JdTggcnN2ZDJbMTkyXTsJLyogRFdPUkQgNjkgKi8KLQl1OCByc3ZkM1sxOTJdOwkvKiBEV09SRCA3NSAqLwotCXU4IHJzdmQ0WzMyXTsJLyogRFdPUkQgODEgKi8KLQl1OCByc3ZkNVszMl07CS8qIERXT1JEIDgyICovCi0JdTggcnN2ZDZbMzJdOwkvKiBEV09SRCA4MyAqLwotCXU4IHJzdmQ3WzMyXTsJLyogRFdPUkQgODQgKi8KLQl1OCByc3ZkOFszMl07CS8qIERXT1JEIDg1ICovCi0JdTggcnN2ZDlbMzJdOwkvKiBEV09SRCA4NiAqLwotCXU4IHJzdmQxMFszMl07CS8qIERXT1JEIDg3ICovCi0JdTggcnN2ZDExWzMyXTsJLyogRFdPUkQgODggKi8KLQl1OCByc3ZkMTJbMzJdOwkvKiBEV09SRCA4OSAqLwotCXU4IHJzdmQxM1szMl07CS8qIERXT1JEIDkwICovCi0JdTggcnN2ZDE0WzMyXTsJLyogRFdPUkQgOTEgKi8KLQl1OCByc3ZkMTVbMzJdOwkvKiBEV09SRCA5MiAqLwotCXU4IHJzdmQxNlszMl07CS8qIERXT1JEIDkzICovCi0JdTggcnN2ZDE3WzMyXTsJLyogRFdPUkQgOTQgKi8KLQl1OCByc3ZkMThbMzJdOwkvKiBEV09SRCA5NSAqLwotCXU4IHJzdmQxOVszMl07CS8qIERXT1JEIDk2ICovCi0JdTggcnN2ZDIwWzMyXTsJLyogRFdPUkQgOTcgKi8KLQl1OCByc3ZkMjFbMzJdOwkvKiBEV09SRCA5OCAqLwotCXU4IHJzdmQyMlszMl07CS8qIERXT1JEIDk5ICovCi0JdTggcnN2ZDIzWzMyXTsJLyogRFdPUkQgMTAwICovCi0JdTggcnN2ZDI0WzMyXTsJLyogRFdPUkQgMTAxICovCi0JdTggcnN2ZDI1WzMyXTsJLyogRFdPUkQgMTAyICovCi0JdTggcnN2ZDI2WzMyXTsJLyogRFdPUkQgMTAzICovCi0JdTggcnN2ZDI3WzMyXTsJLyogRFdPUkQgMTA0ICovCi0JdTggcnN2ZDI4Wzk2XTsJLyogRFdPUkQgMTA1ICovCi0JdTggcnN2ZDI5WzMyXTsJLyogRFdPUkQgMTA4ICovCi0JdTggcnN2ZDMwWzMyXTsJLyogRFdPUkQgMTA5ICovCi0JdTggcnN2ZDMxWzMyXTsJLyogRFdPUkQgMTEwICovCi0JdTggcnN2ZDMyWzMyXTsJLyogRFdPUkQgMTExICovCi0JdTggcnN2ZDMzWzMyXTsJLyogRFdPUkQgMTEyICovCi0JdTggcnN2ZDM0Wzk2XTsJLyogRFdPUkQgMTEzICovCi0JdTggcnN2ZDM1WzMyXTsJLyogRFdPUkQgMTE2ICovCi0JdTggcnN2ZDM2WzMyXTsJLyogRFdPUkQgMTE3ICovCi0JdTggcnN2ZDM3WzMyXTsJLyogRFdPUkQgMTE4ICovCi0JdTggcnN2ZDM4WzMyXTsJLyogRFdPUkQgMTE5ICovCi0JdTggcnN2ZDM5WzMyXTsJLyogRFdPUkQgMTIwICovCi0JdTggcnN2ZDQwWzMyXTsJLyogRFdPUkQgMTIxICovCi0JdTggcnN2ZDQxWzEzNF1bMzJdOwkvKiBEV09SRCAxMjIgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgTVBVX0NTUk1BUF9BTUFQIHsKLQl1MzIgZHdbMjU2XTsKLX07Ci0KLSNlbmRpZiAvKiBfX21wdV9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L21wdV9jb250ZXh0LmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvbXB1X2NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlOTBmOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvbXB1X2NvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19tcHVfY29udGV4dF9hbWFwX2hfXwotI2RlZmluZSBfX21wdV9jb250ZXh0X2FtYXBfaF9fCi0KLS8qCi0gKiBNYW5hZ2VtZW50IGNvbW1hbmQgYW5kIGNvbnRyb2wgcmluZyBjb250ZXh0LiBUaGUgTVBVcyBCVExSX0NUUkwxIENTUgotICogY29udHJvbHMgdGhlIHdyaXRlYmFjayBiZWhhdmlvciBvZiB0aGUgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGluZGV4IHZhbHVlcy4KLSAqLwotc3RydWN0IEJFX01DQ19SSU5HX0NPTlRFWFRfQU1BUCB7Ci0JdTggY29uX2luZGV4WzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHJpbmdfc2l6ZVs0XTsJLyogRFdPUkQgMCAqLwotCXU4IGNxX2lkWzExXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwOwkJLyogRFdPUkQgMCAqLwotCXU4IHByb2RfaW5kZXhbMTZdOwkvKiBEV09SRCAxICovCi0JdTggcGRpZFsxNV07CS8qIERXT1JEIDEgKi8KLQl1OCBpbnZhbGlkOwkJLyogRFdPUkQgMSAqLwotCXU4IGNtZF9wZW5kaW5nX2N1cnJlbnRbN107CS8qIERXT1JEIDIgKi8KLQl1OCByc3ZkMVsyNV07CS8qIERXT1JEIDIgKi8KLQl1OCBocGlfcG9ydF9jcV9pZFsxMV07CS8qIERXT1JEIDMgKi8KLQl1OCByc3ZkMls1XTsJLyogRFdPUkQgMyAqLwotCXU4IGNtZF9wZW5kaW5nX21heFs3XTsJLyogRFdPUkQgMyAqLwotCXU4IHJzdmQzWzldOwkvKiBEV09SRCAzICovCi19IF9fcGFja2VkOwotc3RydWN0IE1DQ19SSU5HX0NPTlRFWFRfQU1BUCB7Ci0JdTMyIGR3WzRdOwotfTsKLQotI2VuZGlmIC8qIF9fbXB1X2NvbnRleHRfYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9wY2ljZmcuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9wY2ljZmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MxNTY4NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvcGNpY2ZnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX3BjaWNmZ19hbWFwX2hfXwotI2RlZmluZSBfX3BjaWNmZ19hbWFwX2hfXwotCi0vKiBWZW5kb3IgYW5kIERldmljZSBJRCBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfSURfQ1NSX0FNQVAgewotCXU4IHZlbmRvcmlkWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IGRldmljZWlkWzE2XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfSURfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIElPIEJhciBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfSU9CQVJfQ1NSX0FNQVAgewotCXU4IGlvc3BhY2U7CQkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbN107CS8qIERXT1JEIDAgKi8KLQl1OCBpb2JhclsyNF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0lPQkFSX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBNZW1vcnkgQkFSIDAgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjBfQ1NSX0FNQVAgewotCXU4IG1lbXNwYWNlOwkvKiBEV09SRCAwICovCi0JdTggdHlwZVsyXTsJCS8qIERXT1JEIDAgKi8KLQl1OCBwZjsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFsxMF07CS8qIERXT1JEIDAgKi8KLQl1OCBtZW1iYXIwWzE4XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTUVNQkFSMF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogTWVtb3J5IEJBUiAxIC0gTG93IEFkZHJlc3MgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjFfTE9fQ1NSX0FNQVAgewotCXU4IG1lbXNwYWNlOwkvKiBEV09SRCAwICovCi0JdTggdHlwZVsyXTsJCS8qIERXT1JEIDAgKi8KLQl1OCBwZjsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFsxM107CS8qIERXT1JEIDAgKi8KLQl1OCBtZW1iYXIxbG9bMTVdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NRU1CQVIxX0xPX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBNZW1vcnkgQkFSIDEgLSBIaWdoIEFkZHJlc3MgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjFfSElfQ1NSX0FNQVAgewotCXU4IG1lbWJhcjFoaVszMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX01FTUJBUjFfSElfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIE1lbW9yeSBCQVIgMiAtIExvdyBBZGRyZXNzIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19NRU1CQVIyX0xPX0NTUl9BTUFQIHsKLQl1OCBtZW1zcGFjZTsJLyogRFdPUkQgMCAqLwotCXU4IHR5cGVbMl07CQkvKiBEV09SRCAwICovCi0JdTggcGY7CQkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMTddOwkvKiBEV09SRCAwICovCi0JdTggbWVtYmFyMmxvWzExXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTUVNQkFSMl9MT19DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogTWVtb3J5IEJBUiAyIC0gSGlnaCBBZGRyZXNzIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19NRU1CQVIyX0hJX0NTUl9BTUFQIHsKLQl1OCBtZW1iYXIyaGlbMzJdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NRU1CQVIyX0hJX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBTdWJzeXN0ZW0gVmVuZG9yIGFuZCBJRCAoRnVuY3Rpb24gMCkgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX1NVQlNZU1RFTV9JRF9GMF9DU1JfQU1BUCB7Ci0JdTggc3Vic3lzX3ZlbmRvcl9pZFsxNl07CS8qIERXT1JEIDAgKi8KLQl1OCBzdWJzeXNfaWRbMTZdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19TVUJTWVNURU1fSURfRjBfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFN1YnN5c3RlbSBWZW5kb3IgYW5kIElEIChGdW5jdGlvbiAxKSBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfU1VCU1lTVEVNX0lEX0YxX0NTUl9BTUFQIHsKLQl1OCBzdWJzeXNfdmVuZG9yX2lkWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHN1YnN5c19pZFsxNl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1NVQlNZU1RFTV9JRF9GMV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogU2VtYXBob3JlIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19TRU1BUEhPUkVfQ1NSX0FNQVAgewotCXU4IGxvY2tlZDsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFszMV07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1NFTUFQSE9SRV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogU29mdCBSZXNldCBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfU09GVF9SRVNFVF9DU1JfQU1BUCB7Ci0JdTggcnN2ZDBbN107CS8qIERXT1JEIDAgKi8KLQl1OCBzb2Z0cmVzZXQ7CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsxNl07CS8qIERXT1JEIDAgKi8KLQl1OCBuZWNfbGxfcmN2ZGV0ZWN0X2lbOF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1NPRlRfUkVTRVRfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFVucmVjb3ZlcmFibGUgRXJyb3IgU3RhdHVzIChMb3cpIFJlZ2lzdGVyLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0bwotICogYW4gaW50ZXJuYWwgVW5yZWNvdmVyYWJsZSBFcnJvci4gIFRoZXNlIGFyZSBzZXQgYnkgaGFyZHdhcmUgYW5kIG1heSBiZQotICogY2xlYXJlZCBieSB3cml0aW5nIGEgb25lIHRvIHRoZSByZXNwZWN0aXZlIGJpdChzKSB0byBiZSBjbGVhcmVkLiAgQW55Ci0gKiBiaXQgYmVpbmcgc2V0IHRoYXQgaXMgYWxzbyB1bm1hc2tlZCB3aWxsIHJlc3VsdCBpbiBVbnJlY292ZXJhYmxlIEVycm9yCi0gKiBpbnRlcnJ1cHQgbm90aWZpY2F0aW9uIHRvIHRoZSBob3N0IENQVSBhbmQvb3IgU2VydmVyIE1hbmFnZW1lbnQgY2hpcAotICogYW5kIHRoZSB0cmFuc2l0aW9uaW5nIG9mIEJsYWRlRW5naW5lIHRvIGFuIE9mZmxpbmUgc3RhdGUuCi0gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0xPV19DU1JfQU1BUCB7Ci0JdTggY2V2X3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGN0eF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBkYnVmX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGVyeF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0X3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IG1wdV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBuZG1hX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHB0Y191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCByZG1hX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHJ4Zl91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCByeGlwc191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCByeHVscDBfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcnh1bHAxX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHJ4dWxwMl91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0aW1fdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggdHBvc3RfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggdHByZV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0eGlwc191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHVscDBfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAxX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHVjX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHdkbWFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAyX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGhvc3QxX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHAwX29iX2xpbmtfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcDFfb2JfbGlua191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0X2dwaW9fdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggbWJveF9uZXR3X3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IG1ib3hfc3Rvcl91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBheGdtYWMwX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGF4Z21hYzFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggbXB1X2ludHBlbmRfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19VRV9TVEFUVVNfTE9XX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBVbnJlY292ZXJhYmxlIEVycm9yIFN0YXR1cyAoSGlnaCkgUmVnaXN0ZXIuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvCi0gKiBhbiBpbnRlcm5hbCBVbnJlY292ZXJhYmxlIEVycm9yLiAgVGhlc2UgYXJlIHNldCBieSBoYXJkd2FyZSBhbmQgbWF5IGJlCi0gKiBjbGVhcmVkIGJ5IHdyaXRpbmcgYSBvbmUgdG8gdGhlIHJlc3BlY3RpdmUgYml0KHMpIHRvIGJlIGNsZWFyZWQuICBBbnkKLSAqIGJpdCBiZWluZyBzZXQgdGhhdCBpcyBhbHNvIHVubWFza2VkIHdpbGwgcmVzdWx0IGluIFVucmVjb3ZlcmFibGUgRXJyb3IKLSAqIGludGVycnVwdCBub3RpZmljYXRpb24gdG8gdGhlIGhvc3QgQ1BVIGFuZC9vciBTZXJ2ZXIgTWFuYWdlbWVudCBjaGlwOwotICogYW5kIHRoZSB0cmFuc2l0aW9uaW5nIG9mIEJsYWRlRW5naW5lIHRvIGFuIE9mZmxpbmUgc3RhdGUuCi0gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0hJX0NTUl9BTUFQIHsKLQl1OCBqdGFnX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGxwY21lbWhvc3RfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggbWdtdF9tYWNfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggbXB1X2lyYW1fdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcGNzMG9ubGluZV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBwY3Mxb25saW5lX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHBjdGwwX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHBjdGwxX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHBtZW1fdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcnJfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcnhwcF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHBiX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHR4cF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB4YXVpX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGFybV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBpcGNfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMTZdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19VRV9TVEFUVVNfSElfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFVucmVjb3ZlcmFibGUgRXJyb3IgTWFzayAoTG93KSBSZWdpc3Rlci4gRWFjaCBiaXQsIHdoZW4gc2V0IHRvIG9uZSwKLSAqIHdpbGwgbWFzayB0aGUgYXNzb2NpYXRlZCBVbnJlY292ZXJhYmxlICBFcnJvciBzdGF0dXMgYml0IGZyb20gbm90aWZpY2F0aW9uCi0gKiBvZiBVbnJlY292ZXJhYmxlIEVycm9yIHRvIHRoZSBob3N0IENQVSBhbmQvb3IgU2VydmVyIE1hbmFnbWVudCBjaGlwIGFuZCB0aGUKLSAqIHRyYW5zaXRpb25pbmcgb2YgYWxsIEJsYWRlRW5naW5lIHVuaXRzIHRvIGFuIE9mZmxpbmUgc3RhdGUuCi0gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0xPV19NQVNLX0NTUl9BTUFQIHsKLQl1OCBjZXZfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IGN0eF91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggZGJ1Zl91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggZXJ4X3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0X3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBtcHVfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IG5kbWFfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHB0Y191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcmRtYV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcnhmX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCByeGlwc191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcnh1bHAwX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCByeHVscDFfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHJ4dWxwMl91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdGltX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB0cG9zdF91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdHByZV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdHhpcHNfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHR4dWxwMF91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAxX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB1Y191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggd2RtYV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAyX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0MV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcDBfb2JfbGlua191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcDFfb2JfbGlua191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggaG9zdF9ncGlvX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBtYm94X25ldHdfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IG1ib3hfc3Rvcl91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggYXhnbWFjMF91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggYXhnbWFjMV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggbXB1X2ludHBlbmRfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfVUVfU1RBVFVTX0xPV19NQVNLX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBVbnJlY292ZXJhYmxlIEVycm9yIE1hc2sgKEhpZ2gpIFJlZ2lzdGVyLiBFYWNoIGJpdCwgd2hlbiBzZXQgdG8gb25lLAotICogd2lsbCBtYXNrIHRoZSBhc3NvY2lhdGVkIFVucmVjb3ZlcmFibGUgRXJyb3Igc3RhdHVzIGJpdCBmcm9tIG5vdGlmaWNhdGlvbgotICogb2YgVW5yZWNvdmVyYWJsZSBFcnJvciB0byB0aGUgaG9zdCBDUFUgYW5kL29yIFNlcnZlciBNYW5hZ21lbnQgY2hpcCBhbmQgdGhlCi0gKiB0cmFuc2l0aW9uaW5nIG9mIGFsbCBCbGFkZUVuZ2luZSB1bml0cyB0byBhbiBPZmZsaW5lIHN0YXRlLgotICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX1VFX1NUQVRVU19ISV9NQVNLX0NTUl9BTUFQIHsKLQl1OCBqdGFnX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBscGNtZW1ob3N0X3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBtZ210X21hY191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggbXB1X2lyYW1fdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHBjczBvbmxpbmVfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHBjczFvbmxpbmVfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHBjdGwwX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBwY3RsMV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcG1lbV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcnJfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHJ4cHBfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHR4cGJfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHR4cF91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggeGF1aV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggYXJtX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBpcGNfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzE2XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfVUVfU1RBVFVTX0hJX01BU0tfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIE9ubGluZSBDb250cm9sIFJlZ2lzdGVyIDAuIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgdmFyaW91cyB1bml0cyB3aXRoaW4KLSAqIEJsYWRlRW5naW5lIGJlaW5nIGluIGFuIE9ubGluZSBvciBPZmZsaW5lIHN0YXRlLgotICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX09OTElORTBfQ1NSX0FNQVAgewotCXU4IGNldl9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBjdHhfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggZGJ1Zl9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBlcnhfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggaG9zdF9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBtcHVfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggbmRtYV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBwdGNfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcmRtYV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCByeGZfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcnhpcHNfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcnh1bHAwX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHJ4dWxwMV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCByeHVscDJfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdGltX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHRwb3N0X29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHRwcmVfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdHhpcHNfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAwX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHR4dWxwMV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB1Y19vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB3ZG1hX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHR4dWxwMl9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0MV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBwMF9vYl9saW5rX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHAxX29iX2xpbmtfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggaG9zdF9ncGlvX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IG1ib3hfbmV0d19vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBtYm94X3N0b3Jfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggYXhnbWFjMF9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBheGdtYWMxX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IG1wdV9pbnRwZW5kX29ubGluZTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfT05MSU5FMF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogT25saW5lIENvbnRyb2wgUmVnaXN0ZXIgMS4gVGhpcyByZWdpc3RlciBjb250cm9scyB2YXJpb3VzIHVuaXRzIHdpdGhpbgotICogQmxhZGVFbmdpbmUgYmVpbmcgaW4gYW4gT25saW5lIG9yIE9mZmxpbmUgc3RhdGUuCi0gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfT05MSU5FMV9DU1JfQU1BUCB7Ci0JdTgganRhZ19vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBscGNtZW1ob3N0X29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IG1nbXRfbWFjX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IG1wdV9pcmFtX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHBjczBvbmxpbmVfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcGNzMW9ubGluZV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBwY3RsMF9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBwY3RsMV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBwbWVtX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHJyX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHJ4cHBfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdHhwYl9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHBfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggeGF1aV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBhcm1fb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggaXBjX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzE2XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfT05MSU5FMV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogSG9zdCBUaW1lciBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1JfQU1BUCB7Ci0JdTggaG9zdHRpbWVyWzI0XTsJLyogRFdPUkQgMCAqLwotCXU4IGhvc3RpbnRyOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbN107CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFNjcmF0Y2hwYWQgUmVnaXN0ZXIgKGZvciBzb2Z0d2FyZSB1c2UpLiAqLwotc3RydWN0IEJFX1BDSUNGR19TQ1JBVENIUEFEX0NTUl9BTUFQIHsKLQl1OCBzY3JhdGNocGFkWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfU0NSQVRDSFBBRF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogUENJIEV4cHJlc3MgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19QQ0lFX0NBUF9DU1JfQU1BUCB7Ci0JdTggY2FwaWRbOF07CS8qIERXT1JEIDAgKi8KLQl1OCBuZXh0Y2FwWzhdOwkvKiBEV09SRCAwICovCi0JdTggY2FwdmVyWzRdOwkvKiBEV09SRCAwICovCi0JdTggZGV2cG9ydFs0XTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzZdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1BDSUVfQ0FQX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBEZXZpY2UgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19QQ0lFX0RFVkNBUF9DU1JfQU1BUCB7Ci0JdTggcGF5bG9hZFszXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzNdOwkvKiBEV09SRCAwICovCi0JdTggbG9fbGF0WzNdOwkvKiBEV09SRCAwICovCi0JdTggbDFfbGF0WzNdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbM107CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMlszXTsJLyogRFdPUkQgMCAqLwotCXU4IHB3cl92YWx1ZVs4XTsJLyogRFdPUkQgMCAqLwotCXU4IHB3cl9zY2FsZVsyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQzWzRdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19QQ0lFX0RFVkNBUF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogUENJIEV4cHJlc3MgRGV2aWNlIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycy4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9DT05UUk9MX1NUQVRVU19DU1JfQU1BUCB7Ci0JdTggQ29yckVyclJlcG9ydEVuOwkvKiBEV09SRCAwICovCi0JdTggTm9uRmF0YWxFcnJSZXBvcnRFbjsJLyogRFdPUkQgMCAqLwotCXU4IEZhdGFsRXJyUmVwb3J0RW47CS8qIERXT1JEIDAgKi8KLQl1OCBVbnN1cHBSZXFSZXBvcnRFbjsJLyogRFdPUkQgMCAqLwotCXU4IEVuYWJsZVJlbGF4T3JkZXI7CS8qIERXT1JEIDAgKi8KLQl1OCBNYXhfUGF5bG9hZF9TaXplWzNdOwkvKiBEV09SRCAwICovCi0JdTggRXh0ZW5kVGFnRmllbGRFbmFibGU7CS8qIERXT1JEIDAgKi8KLQl1OCBQaGFudG9tRm5FbmFibGU7CS8qIERXT1JEIDAgKi8KLQl1OCBBdXhQd3JQTUVuYWJsZTsJLyogRFdPUkQgMCAqLwotCXU4IEVuYWJsZU5vU25vb3A7CS8qIERXT1JEIDAgKi8KLQl1OCBNYXhfUmVhZF9SZXFfU2l6ZVszXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwOwkJLyogRFdPUkQgMCAqLwotCXU4IENvcnJFcnJEZXRlY3Q7CS8qIERXT1JEIDAgKi8KLQl1OCBOb25GYXRhbEVyckRldGVjdDsJLyogRFdPUkQgMCAqLwotCXU4IEZhdGFsRXJyRGV0ZWN0OwkvKiBEV09SRCAwICovCi0JdTggVW5zdXBwUmVxRGV0ZWN0OwkvKiBEV09SRCAwICovCi0JdTggQXV4UHdyRGV0ZWN0OwkvKiBEV09SRCAwICovCi0JdTggVHJhbnNQZW5kaW5nOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMTBdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19QQ0lFX0NPTlRST0xfU1RBVFVTX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBMaW5rIENhcGFiaWxpdGllcyBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9MSU5LX0NBUF9DU1JfQU1BUCB7Ci0JdTggTWF4TGlua1NwZWVkWzRdOwkvKiBEV09SRCAwICovCi0JdTggTWF4TGlua1dpZHRoWzZdOwkvKiBEV09SRCAwICovCi0JdTggQVNQTVN1cHBvcnRbMl07CS8qIERXT1JEIDAgKi8KLQl1OCBMMHNFeGl0TGF0WzNdOwkvKiBEV09SRCAwICovCi0JdTggTDFFeGl0TGF0WzNdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbNl07CS8qIERXT1JEIDAgKi8KLQl1OCBQb3J0TnVtWzhdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19QQ0lFX0xJTktfQ0FQX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBMaW5rIFN0YXR1cyBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9MSU5LX1NUQVRVU19DU1JfQU1BUCB7Ci0JdTggQVNQTUN0bFsyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwOwkJLyogRFdPUkQgMCAqLwotCXU4IFJlYWRDbXBsQm5kcnk7CS8qIERXT1JEIDAgKi8KLQl1OCBMaW5rRGlzYWJsZTsJLyogRFdPUkQgMCAqLwotCXU4IFJldHJhaW5MaW5rOwkvKiBEV09SRCAwICovCi0JdTggQ29tbW9uQ2xrQ29uZmlnOwkvKiBEV09SRCAwICovCi0JdTggRXh0ZW5kU3luYzsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzhdOwkvKiBEV09SRCAwICovCi0JdTggTGlua1NwZWVkWzRdOwkvKiBEV09SRCAwICovCi0JdTggTmVnTGlua1dpZHRoWzZdOwkvKiBEV09SRCAwICovCi0JdTggTGlua1RyYWluRXJyOwkvKiBEV09SRCAwICovCi0JdTggTGlua1RyYWluOwkvKiBEV09SRCAwICovCi0JdTggU2xvdENsa0NvbmZpZzsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQyWzNdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19QQ0lFX0xJTktfU1RBVFVTX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBNU0kgQ29uZmlndXJhdGlvbiBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfTVNJX0NTUl9BTUFQIHsKLQl1OCBjYXBpZFs4XTsJLyogRFdPUkQgMCAqLwotCXU4IG5leHRwdHJbOF07CS8qIERXT1JEIDAgKi8KLQl1OCB0YWJsZXNpemVbMTFdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbM107CS8qIERXT1JEIDAgKi8KLQl1OCBmdW5jbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IGVuOwkJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTVNJX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBNU0ktWCBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfVEFCTEVfQ1NSX0FNQVAgewotCXU4IHRhYmxlYmlyWzNdOwkvKiBEV09SRCAwICovCi0JdTggb2Zmc2V0WzI5XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTVNJWF9UQUJMRV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogTVNJLVggUEJBIE9mZnNldCBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9QQkFfQ1NSX0FNQVAgewotCXU4IHBiYWJpclszXTsJLyogRFdPUkQgMCAqLwotCXU4IG9mZnNldFsyOV07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX01TSVhfUEJBX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBNU0ktWCBNZXNzYWdlIFZlY3RvciBDb250cm9sIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19NU0lYX1ZFQ1RPUl9DT05UUk9MX0NTUl9BTUFQIHsKLQl1OCB2ZWN0b3JfY29udHJvbDsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzMxXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTVNJWF9WRUNUT1JfQ09OVFJPTF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogUENJIEV4cHJlc3MgTVNJLVggTWVzc2FnZSBEYXRhIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19NU0lYX01TR19EQVRBX0NTUl9BTUFQIHsKLQl1OCBkYXRhWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzE2XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTVNJWF9NU0dfREFUQV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogUENJIEV4cHJlc3MgTVNJLVggTWVzc2FnZSBBZGRyZXNzIFJlZ2lzdGVyIC0gSGlnaCBQYXJ0LiAqLwotc3RydWN0IEJFX1BDSUNGR19NU0lYX01TR19BRERSX0hJX0NTUl9BTUFQIHsKLQl1OCBhZGRyWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTVNJWF9NU0dfQUREUl9ISV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogUENJIEV4cHJlc3MgTVNJLVggTWVzc2FnZSBBZGRyZXNzIFJlZ2lzdGVyIC0gTG93IFBhcnQuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0FERFJfTE9fQ1NSX0FNQVAgewotCXU4IHJzdmQwWzJdOwkvKiBEV09SRCAwICovCi0JdTggYWRkclszMF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX01TSVhfTVNHX0FERFJfTE9fQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8xOF9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8xOF9SU1ZEX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8xOV9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8xOV9SU1ZEX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yMF9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzI1XVszMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjBfUlNWRF9BTUFQIHsKLQl1MzIgZHdbMjZdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzIxX1JTVkRfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMTkxOV1bMzJdOwkvKiBEV09SRCAxICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzIxX1JTVkRfQU1BUCB7Ci0JdTMyIGR3WzE5MjBdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzIyX01FU1NBR0VfQU1BUCB7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lYX1ZFQ1RPUl9DT05UUk9MX0NTUl9BTUFQIHZlY19jdHJsOwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9NU0dfREFUQV9DU1JfQU1BUCBtc2dfZGF0YTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0FERFJfSElfQ1NSX0FNQVAgYWRkcl9oaTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0FERFJfTE9fQ1NSX0FNQVAgYWRkcl9sb3c7Ci19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzIyX01FU1NBR0VfQU1BUCB7Ci0JdTMyIGR3WzRdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzIzX1JTVkRfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbODk1XVszMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjNfUlNWRF9BTUFQIHsKLQl1MzIgZHdbODk2XTsKLX07Ci0KLS8qIFRoZXNlIFBDSSBDb25maWd1cmF0aW9uIFNwYWNlIHJlZ2lzdGVycyBhcmUgZm9yIHRoZSBTdG9yYWdlICBGdW5jdGlvbiBvZgotICogQmxhZGVFbmdpbmUgKEZ1bmN0aW9uIDApLiBJbiB0aGUgbWVtb3J5IG1hcCBvZiB0aGUgcmVnaXN0ZXJzIGJlbG93IHRoZWlyCi0gKiB0YWJsZSwKLSAqLwotc3RydWN0IEJFX1BDSUNGRzBfQ1NSTUFQX0FNQVAgewotCXN0cnVjdCBCRV9QQ0lDRkdfSURfQ1NSX0FNQVAgaWQ7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDFbMzJdOwkvKiBEV09SRCAyICovCi0JdTggcnN2ZDJbMzJdOwkvKiBEV09SRCAzICovCi0Jc3RydWN0IEJFX1BDSUNGR19JT0JBUl9DU1JfQU1BUCBpb2JhcjsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjBfQ1NSX0FNQVAgbWVtYmFyMDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjFfTE9fQ1NSX0FNQVAgbWVtYmFyMV9sbzsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjFfSElfQ1NSX0FNQVAgbWVtYmFyMV9oaTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjJfTE9fQ1NSX0FNQVAgbWVtYmFyMl9sbzsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjJfSElfQ1NSX0FNQVAgbWVtYmFyMl9oaTsKLQl1OCByc3ZkM1szMl07CS8qIERXT1JEIDEwICovCi0Jc3RydWN0IEJFX1BDSUNGR19TVUJTWVNURU1fSURfRjBfQ1NSX0FNQVAgc3Vic3lzdGVtX2lkOwotCXU4IHJzdmQ0WzMyXTsJLyogRFdPUkQgMTIgKi8KLQl1OCByc3ZkNVszMl07CS8qIERXT1JEIDEzICovCi0JdTggcnN2ZDZbMzJdOwkvKiBEV09SRCAxNCAqLwotCXU4IHJzdmQ3WzMyXTsJLyogRFdPUkQgMTUgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX1NFTUFQSE9SRV9DU1JfQU1BUCBzZW1hcGhvcmVbNF07Ci0Jc3RydWN0IEJFX1BDSUNGR19TT0ZUX1JFU0VUX0NTUl9BTUFQIHNvZnRfcmVzZXQ7Ci0JdTggcnN2ZDhbMzJdOwkvKiBEV09SRCAyMSAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfU0NSQVRDSFBBRF9DU1JfQU1BUCBzY3JhdGNocGFkOwotCXU4IHJzdmQ5WzMyXTsJLyogRFdPUkQgMjMgKi8KLQl1OCByc3ZkMTBbMzJdOwkvKiBEV09SRCAyNCAqLwotCXU4IHJzdmQxMVszMl07CS8qIERXT1JEIDI1ICovCi0JdTggcnN2ZDEyWzMyXTsJLyogRFdPUkQgMjYgKi8KLQl1OCByc3ZkMTNbMzJdOwkvKiBEV09SRCAyNyAqLwotCXU4IHJzdmQxNFsyXVszMl07CS8qIERXT1JEIDI4ICovCi0JdTggcnN2ZDE1WzMyXTsJLyogRFdPUkQgMzAgKi8KLQl1OCByc3ZkMTZbMzJdOwkvKiBEV09SRCAzMSAqLwotCXU4IHJzdmQxN1s4XVszMl07CS8qIERXT1JEIDMyICovCi0Jc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfTE9XX0NTUl9BTUFQIHVlX3N0YXR1c19sb3c7Ci0Jc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfSElfQ1NSX0FNQVAgdWVfc3RhdHVzX2hpOwotCXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0xPV19NQVNLX0NTUl9BTUFQIHVlX3N0YXR1c19sb3dfbWFzazsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1VFX1NUQVRVU19ISV9NQVNLX0NTUl9BTUFQIHVlX3N0YXR1c19oaV9tYXNrOwotCXN0cnVjdCBCRV9QQ0lDRkdfT05MSU5FMF9DU1JfQU1BUCBvbmxpbmUwOwotCXN0cnVjdCBCRV9QQ0lDRkdfT05MSU5FMV9DU1JfQU1BUCBvbmxpbmUxOwotCXU4IHJzdmQxOFszMl07CS8qIERXT1JEIDQ2ICovCi0JdTggcnN2ZDE5WzMyXTsJLyogRFdPUkQgNDcgKi8KLQl1OCByc3ZkMjBbMzJdOwkvKiBEV09SRCA0OCAqLwotCXU4IHJzdmQyMVszMl07CS8qIERXT1JEIDQ5ICovCi0Jc3RydWN0IEJFX1BDSUNGR19IT1NUX1RJTUVSX0lOVF9DVFJMX0NTUl9BTUFQIGhvc3RfdGltZXJfaW50X2N0cmw7Ci0JdTggcnN2ZDIyWzMyXTsJLyogRFdPUkQgNTEgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfQ0FQX0NTUl9BTUFQIHBjaWVfY2FwOwotCXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9ERVZDQVBfQ1NSX0FNQVAgcGNpZV9kZXZjYXA7Ci0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0NPTlRST0xfU1RBVFVTX0NTUl9BTUFQIHBjaWVfY29udHJvbF9zdGF0dXM7Ci0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0xJTktfQ0FQX0NTUl9BTUFQIHBjaWVfbGlua19jYXA7Ci0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0xJTktfU1RBVFVTX0NTUl9BTUFQIHBjaWVfbGlua19zdGF0dXM7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lfQ1NSX0FNQVAgbXNpOwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9UQUJMRV9DU1JfQU1BUCBtc2l4X3RhYmxlX29mZnNldDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfUEJBX0NTUl9BTUFQIG1zaXhfcGJhX29mZnNldDsKLQl1OCByc3ZkMjNbMzJdOwkvKiBEV09SRCA2MCAqLwotCXU4IHJzdmQyNFszMl07CS8qIERXT1JEIDYxICovCi0JdTggcnN2ZDI1WzMyXTsJLyogRFdPUkQgNjIgKi8KLQl1OCByc3ZkMjZbMzJdOwkvKiBEV09SRCA2MyAqLwotCXU4IHJzdmQyN1szMl07CS8qIERXT1JEIDY0ICovCi0JdTggcnN2ZDI4WzMyXTsJLyogRFdPUkQgNjUgKi8KLQl1OCByc3ZkMjlbMzJdOwkvKiBEV09SRCA2NiAqLwotCXU4IHJzdmQzMFszMl07CS8qIERXT1JEIDY3ICovCi0JdTggcnN2ZDMxWzMyXTsJLyogRFdPUkQgNjggKi8KLQl1OCByc3ZkMzJbMzJdOwkvKiBEV09SRCA2OSAqLwotCXU4IHJzdmQzM1szMl07CS8qIERXT1JEIDcwICovCi0JdTggcnN2ZDM0WzMyXTsJLyogRFdPUkQgNzEgKi8KLQl1OCByc3ZkMzVbMzJdOwkvKiBEV09SRCA3MiAqLwotCXU4IHJzdmQzNlszMl07CS8qIERXT1JEIDczICovCi0JdTggcnN2ZDM3WzMyXTsJLyogRFdPUkQgNzQgKi8KLQl1OCByc3ZkMzhbMzJdOwkvKiBEV09SRCA3NSAqLwotCXU4IHJzdmQzOVszMl07CS8qIERXT1JEIDc2ICovCi0JdTggcnN2ZDQwWzMyXTsJLyogRFdPUkQgNzcgKi8KLQl1OCByc3ZkNDFbMzJdOwkvKiBEV09SRCA3OCAqLwotCXU4IHJzdmQ0MlszMl07CS8qIERXT1JEIDc5ICovCi0JdTggcnN2ZDQzWzMyXTsJLyogRFdPUkQgODAgKi8KLQl1OCByc3ZkNDRbMzJdOwkvKiBEV09SRCA4MSAqLwotCXU4IHJzdmQ0NVszMl07CS8qIERXT1JEIDgyICovCi0JdTggcnN2ZDQ2WzMyXTsJLyogRFdPUkQgODMgKi8KLQl1OCByc3ZkNDdbMzJdOwkvKiBEV09SRCA4NCAqLwotCXU4IHJzdmQ0OFszMl07CS8qIERXT1JEIDg1ICovCi0JdTggcnN2ZDQ5WzMyXTsJLyogRFdPUkQgODYgKi8KLQl1OCByc3ZkNTBbMzJdOwkvKiBEV09SRCA4NyAqLwotCXU4IHJzdmQ1MVszMl07CS8qIERXT1JEIDg4ICovCi0JdTggcnN2ZDUyWzMyXTsJLyogRFdPUkQgODkgKi8KLQl1OCByc3ZkNTNbMzJdOwkvKiBEV09SRCA5MCAqLwotCXU4IHJzdmQ1NFszMl07CS8qIERXT1JEIDkxICovCi0JdTggcnN2ZDU1WzMyXTsJLyogRFdPUkQgOTIgKi8KLQl1OCByc3ZkNTZbODMyXTsJLyogRFdPUkQgOTMgKi8KLQl1OCByc3ZkNTdbMzJdOwkvKiBEV09SRCAxMTkgKi8KLQl1OCByc3ZkNThbMzJdOwkvKiBEV09SRCAxMjAgKi8KLQl1OCByc3ZkNTlbMzJdOwkvKiBEV09SRCAxMjEgKi8KLQl1OCByc3ZkNjBbMzJdOwkvKiBEV09SRCAxMjIgKi8KLQl1OCByc3ZkNjFbMzJdOwkvKiBEV09SRCAxMjMgKi8KLQl1OCByc3ZkNjJbMzJdOwkvKiBEV09SRCAxMjQgKi8KLQl1OCByc3ZkNjNbMzJdOwkvKiBEV09SRCAxMjUgKi8KLQl1OCByc3ZkNjRbMzJdOwkvKiBEV09SRCAxMjYgKi8KLQl1OCByc3ZkNjVbMzJdOwkvKiBEV09SRCAxMjcgKi8KLQl1OCByc3ZkNjZbNjE0NDBdOwkvKiBEV09SRCAxMjggKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjJfTUVTU0FHRV9BTUFQIG1lc3NhZ2VbMzJdOwotCXU4IHJzdmQ2N1syODY3Ml07CS8qIERXT1JEIDIxNzYgKi8KLQl1OCByc3ZkNjhbMzJdOwkvKiBEV09SRCAzMDcyICovCi0JdTggcnN2ZDY5WzEwMjNdWzMyXTsJLyogRFdPUkQgMzA3MyAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkcwX0NTUk1BUF9BTUFQIHsKLQl1MzIgZHdbNDA5Nl07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjRfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjRfUlNWRF9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjVfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjVfUlNWRF9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjZfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjZfUlNWRF9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjdfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVszMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjdfUlNWRF9BTUFQIHsKLQl1MzIgZHdbMl07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjhfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVszXVszMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjhfUlNWRF9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjlfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVszNl1bMzJdOwkvKiBEV09SRCAxICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzI5X1JTVkRfQU1BUCB7Ci0JdTMyIGR3WzM3XTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8zMF9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzE5MzBdWzMyXTsJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8zMF9SU1ZEX0FNQVAgewotCXUzMiBkd1sxOTMxXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8zMV9NRVNTQUdFX0FNQVAgewotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9WRUNUT1JfQ09OVFJPTF9DU1JfQU1BUCB2ZWNfY3RybDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0RBVEFfQ1NSX0FNQVAgbXNnX2RhdGE7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lYX01TR19BRERSX0hJX0NTUl9BTUFQIGFkZHJfaGk7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lYX01TR19BRERSX0xPX0NTUl9BTUFQIGFkZHJfbG93OwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8zMV9NRVNTQUdFX0FNQVAgewotCXUzMiBkd1s0XTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8zMl9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzg5NV1bMzJdOwkvKiBEV09SRCAxICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzMyX1JTVkRfQU1BUCB7Ci0JdTMyIGR3Wzg5Nl07Ci19OwotCi0vKiBUaGlzIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHJlZ2lzdGVyIG1hcCBpcyBmb3IgdGhlICBOZXR3b3JraW5nIEZ1bmN0aW9uIG9mCi0gKiBCbGFkZUVuZ2luZSAoRnVuY3Rpb24gMSkuCi0gKi8KLXN0cnVjdCBCRV9QQ0lDRkcxX0NTUk1BUF9BTUFQIHsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX0lEX0NTUl9BTUFQIGlkOwotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQxWzMyXTsJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQyWzMyXTsJLyogRFdPUkQgMyAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfSU9CQVJfQ1NSX0FNQVAgaW9iYXI7Ci0Jc3RydWN0IEJFX1BDSUNGR19NRU1CQVIwX0NTUl9BTUFQIG1lbWJhcjA7Ci0Jc3RydWN0IEJFX1BDSUNGR19NRU1CQVIxX0xPX0NTUl9BTUFQIG1lbWJhcjFfbG87Ci0Jc3RydWN0IEJFX1BDSUNGR19NRU1CQVIxX0hJX0NTUl9BTUFQIG1lbWJhcjFfaGk7Ci0Jc3RydWN0IEJFX1BDSUNGR19NRU1CQVIyX0xPX0NTUl9BTUFQIG1lbWJhcjJfbG87Ci0Jc3RydWN0IEJFX1BDSUNGR19NRU1CQVIyX0hJX0NTUl9BTUFQIG1lbWJhcjJfaGk7Ci0JdTggcnN2ZDNbMzJdOwkvKiBEV09SRCAxMCAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfU1VCU1lTVEVNX0lEX0YxX0NTUl9BTUFQIHN1YnN5c3RlbV9pZDsKLQl1OCByc3ZkNFszMl07CS8qIERXT1JEIDEyICovCi0JdTggcnN2ZDVbMzJdOwkvKiBEV09SRCAxMyAqLwotCXU4IHJzdmQ2WzMyXTsJLyogRFdPUkQgMTQgKi8KLQl1OCByc3ZkN1szMl07CS8qIERXT1JEIDE1ICovCi0Jc3RydWN0IEJFX1BDSUNGR19TRU1BUEhPUkVfQ1NSX0FNQVAgc2VtYXBob3JlWzRdOwotCXN0cnVjdCBCRV9QQ0lDRkdfU09GVF9SRVNFVF9DU1JfQU1BUCBzb2Z0X3Jlc2V0OwotCXU4IHJzdmQ4WzMyXTsJLyogRFdPUkQgMjEgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX1NDUkFUQ0hQQURfQ1NSX0FNQVAgc2NyYXRjaHBhZDsKLQl1OCByc3ZkOVszMl07CS8qIERXT1JEIDIzICovCi0JdTggcnN2ZDEwWzMyXTsJLyogRFdPUkQgMjQgKi8KLQl1OCByc3ZkMTFbMzJdOwkvKiBEV09SRCAyNSAqLwotCXU4IHJzdmQxMlszMl07CS8qIERXT1JEIDI2ICovCi0JdTggcnN2ZDEzWzMyXTsJLyogRFdPUkQgMjcgKi8KLQl1OCByc3ZkMTRbMl1bMzJdOwkvKiBEV09SRCAyOCAqLwotCXU4IHJzdmQxNVszMl07CS8qIERXT1JEIDMwICovCi0JdTggcnN2ZDE2WzMyXTsJLyogRFdPUkQgMzEgKi8KLQl1OCByc3ZkMTdbOF1bMzJdOwkvKiBEV09SRCAzMiAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0xPV19DU1JfQU1BUCB1ZV9zdGF0dXNfbG93OwotCXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0hJX0NTUl9BTUFQIHVlX3N0YXR1c19oaTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1VFX1NUQVRVU19MT1dfTUFTS19DU1JfQU1BUCB1ZV9zdGF0dXNfbG93X21hc2s7Ci0Jc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfSElfTUFTS19DU1JfQU1BUCB1ZV9zdGF0dXNfaGlfbWFzazsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX09OTElORTBfQ1NSX0FNQVAgb25saW5lMDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX09OTElORTFfQ1NSX0FNQVAgb25saW5lMTsKLQl1OCByc3ZkMThbMzJdOwkvKiBEV09SRCA0NiAqLwotCXU4IHJzdmQxOVszMl07CS8qIERXT1JEIDQ3ICovCi0JdTggcnN2ZDIwWzMyXTsJLyogRFdPUkQgNDggKi8KLQl1OCByc3ZkMjFbMzJdOwkvKiBEV09SRCA0OSAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1JfQU1BUCBob3N0X3RpbWVyX2ludF9jdHJsOwotCXU4IHJzdmQyMlszMl07CS8qIERXT1JEIDUxICovCi0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0NBUF9DU1JfQU1BUCBwY2llX2NhcDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfREVWQ0FQX0NTUl9BTUFQIHBjaWVfZGV2Y2FwOwotCXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9DT05UUk9MX1NUQVRVU19DU1JfQU1BUCBwY2llX2NvbnRyb2xfc3RhdHVzOwotCXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9MSU5LX0NBUF9DU1JfQU1BUCBwY2llX2xpbmtfY2FwOwotCXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9MSU5LX1NUQVRVU19DU1JfQU1BUCBwY2llX2xpbmtfc3RhdHVzOwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJX0NTUl9BTUFQIG1zaTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfVEFCTEVfQ1NSX0FNQVAgbXNpeF90YWJsZV9vZmZzZXQ7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lYX1BCQV9DU1JfQU1BUCBtc2l4X3BiYV9vZmZzZXQ7Ci0JdTggcnN2ZDIzWzY0XTsJLyogRFdPUkQgNjAgKi8KLQl1OCByc3ZkMjRbMzJdOwkvKiBEV09SRCA2MiAqLwotCXU4IHJzdmQyNVszMl07CS8qIERXT1JEIDYzICovCi0JdTggcnN2ZDI2WzMyXTsJLyogRFdPUkQgNjQgKi8KLQl1OCByc3ZkMjdbMzJdOwkvKiBEV09SRCA2NSAqLwotCXU4IHJzdmQyOFszMl07CS8qIERXT1JEIDY2ICovCi0JdTggcnN2ZDI5WzMyXTsJLyogRFdPUkQgNjcgKi8KLQl1OCByc3ZkMzBbMzJdOwkvKiBEV09SRCA2OCAqLwotCXU4IHJzdmQzMVszMl07CS8qIERXT1JEIDY5ICovCi0JdTggcnN2ZDMyWzMyXTsJLyogRFdPUkQgNzAgKi8KLQl1OCByc3ZkMzNbMzJdOwkvKiBEV09SRCA3MSAqLwotCXU4IHJzdmQzNFszMl07CS8qIERXT1JEIDcyICovCi0JdTggcnN2ZDM1WzMyXTsJLyogRFdPUkQgNzMgKi8KLQl1OCByc3ZkMzZbMzJdOwkvKiBEV09SRCA3NCAqLwotCXU4IHJzdmQzN1sxMjhdOwkvKiBEV09SRCA3NSAqLwotCXU4IHJzdmQzOFszMl07CS8qIERXT1JEIDc5ICovCi0JdTggcnN2ZDM5WzExODRdOwkvKiBEV09SRCA4MCAqLwotCXU4IHJzdmQ0MFs2MTc5Ml07CS8qIERXT1JEIDExNyAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8zMV9NRVNTQUdFX0FNQVAgbWVzc2FnZVszMl07Ci0JdTggcnN2ZDQxWzI4NjcyXTsJLyogRFdPUkQgMjE3NiAqLwotCXU4IHJzdmQ0MlszMl07CS8qIERXT1JEIDMwNzIgKi8KLQl1OCByc3ZkNDNbMTAyM11bMzJdOwkvKiBEV09SRCAzMDczICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGRzFfQ1NSTUFQX0FNQVAgewotCXUzMiBkd1s0MDk2XTsKLX07Ci0KLSNlbmRpZiAvKiBfX3BjaWNmZ19hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3Bvc3RfY29kZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9wb3N0X2NvZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMTYyMWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3Bvc3RfY29kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fcG9zdF9jb2Rlc19hbWFwX2hfXwotI2RlZmluZSBfX3Bvc3RfY29kZXNfYW1hcF9oX18KLQotLyogLS0tIE1HTVRfSEJBX1BPU1RfU1RBR0VfRU5VTSAtLS0gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9QT1dFUl9PTl9SRVNFVCAgICgwKQkvKiBTdGF0ZSBhZnRlciBhIGNvbGQgb3Igd2FybSBib290LiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZICgxKQkvKiBBUk0gYm9vdCBjb2RlIGF3YWl0aW5nIGEKLQkJCQkJCWdvLWFoZWQgZnJvbSAgdGhlIGhvc3QuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfSE9TVF9SRFkgKDIpCS8qIEhvc3QgaGFzIGdpdmVuIGdvLWFoZWQgdG8gQVJNLiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0JFX1JFU0VUICgzKQkvKiBIb3N0IHdhbnRzIHRvIHJlc2V0IGNoaXAsIHRoaXMgaXMgYSAgY2hpcAotCQkJCQkJd29ya2Fyb3VuZCAgKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9TRUVQUk9NX0NTX1NUQVJUICgyNTYpCS8qIFNFRVBST00gY2hlY2tzdW0KLQkJCQkJCXRlc3Qgc3RhcnQuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfU0VFUFJPTV9DU19ET05FICAoMjU3KQkvKiBTRUVQUk9NIGNoZWNrc3VtIHRlc3QKLQkJCQkJCQlkb25lLiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0REUl9DT05GSUdfU1RBUlQgKDUxMikJLyogRERSIGNvbmZpZ3VyYXRpb24gc3RhcnQuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfRERSX0NPTkZJR19ET05FICAoNTEzKQkvKiBERFIgY29uZmlndXJhdGlvbiBkb25lLiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0REUl9DQUxJQlJBVEVfU1RBUlQgICg3NjgpCS8qIEREUiBjYWxpYnJhdGlvbiBzdGFydC4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9ERFJfQ0FMSUJSQVRFX0RPTkUgICAoNzY5KQkvKiBERFIgY2FsaWJyYXRpb24gZG9uZS4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9ERFJfVEVTVF9TVEFSVCAgICgxMDI0KQkvKiBERFIgbWVtb3J5IHRlc3Qgc3RhcnQuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfRERSX1RFU1RfRE9ORSAgICAoMTAyNSkJLyogRERSIG1lbW9yeSB0ZXN0IGRvbmUuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfUkVEQk9PVF9JTklUX1NUQVJUICAgKDE1MzYpCS8qIFJlZGJvb3Qgc3RhcnRzIGV4ZWN1dGlvbi4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9SRURCT09UX0lOSVRfRE9ORSAoMTUzNykJLyogUmVkYm9vdCBkb25lIGV4ZWN1dGlvbi4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9GV19JTUFHRV9MT0FEX1NUQVJUICgxNzkyKQkvKiBGaXJtd2FyZSBpbWFnZSBsb2FkIHRvCi0JCQkJCQkJRERSIHN0YXJ0LiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0ZXX0lNQUdFX0xPQURfRE9ORSAgICgxNzkzKQkvKiBGaXJtd2FyZSBpbWFnZSBsb2FkCi0JCQkJCQkJdG8gRERSIGRvbmUuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfQVJNRldfU1RBUlQgICAgICAgICAgKDIwNDgpCS8qIEFSTWZ3IHJ1bnRpbWUgY29kZQotCQkJCQkJc3RhcnRzIGV4ZWN1dGlvbi4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9ESENQX1FVRVJZX1NUQVJUICAgICAoMjMwNCkJLyogREhDUCBzZXJ2ZXIgcXVlcnkgc3RhcnQuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfREhDUF9RVUVSWV9ET05FICAgICAgKDIzMDUpCS8qIERIQ1Agc2VydmVyIHF1ZXJ5IGRvbmUuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfQk9PVF9UQVJHRVRfRElTQ09WRVJZX1NUQVJUICgyNTYwKQkvKiBCb290IFRhcmdldAotCQkJCQkJRGlzY292ZXJ5IFN0YXJ0LiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0JPT1RfVEFSR0VUX0RJU0NPVkVSWV9ET05FICgyNTYxKQkvKiBCb290IFRhcmdldAotCQkJCQkJRGlzY292ZXJ5IERvbmUuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfUkNfT1BUSU9OX1NFVCAgICAgICAgKDI4MTYpCS8qIFJlbW90ZSBjb25maWd1cmF0aW9uCi0JCQkJCQlvcHRpb24gaXMgc2V0IGluICBTRUVQUk9NICAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1NXSVRDSF9MSU5LICAgICAgICAgICgyODE3KQkvKiBXYWl0IGZvciBsaW5rIHVwIG9uIHN3aXRjaCAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1NFTkRfSUNEU19NRVNTQUdFICAgICgyODE4KQkvKiBTZW5kIHRoZSBJQ0RTIG1lc3NhZ2UKLQkJCQkJCXRvIHN3aXRjaCAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1BFUkZST01fVEZUUCAgICAgICAgICgyODE5KQkvKiBEb3dubG9hZCB4bWwgdXNpbmcgVEZUUCAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1BBUlNFX1hNTCAgICAgICAgICAgICgyODIwKQkvKiBQYXJzZSBYTUwgZmlsZSAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0RPV05MT0FEX0lNQUdFICAgICAgICgyODIxKQkvKiBEb3dubG9hZCBJTUFHRSBmcm9tCi0JCQkJCQlURlRQIHNlcnZlciAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0ZMQVNIX0lNQUdFICAgICAgICAgICgyODIyKQkvKiBGbGFzaCB0aGUgSU1BR0UgKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9SQ19ET05FICAgICAgICAgICAgICAoMjgyMykJLyogUmVtb3RlIGNvbmZpZ3VyYXRpb24KLQkJCQkJCWNvbXBsZXRlICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfUkVCT09UX1NZU1RFTSAgICAgICAgKDI4MjQpCS8qIFVwZ3JhZGUgSU1BR0UgZG9uZSwKLQkJCQkJCXJlYm9vdCByZXF1aXJlZCAqLwotI2RlZmluZSBQT1NUX1NUQUdFX01BQ19BRERSRVNTICAgICAgICAgICgzMDcyKQkvKiBNQUMgQWRkcmVzcyBDaGVjayAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0FSTUZXX1JFQURZICAgICAgICAgICg0OTE1MikJLyogQVJNZncgaXMgZG9uZSB3aXRoIFBPU1QKLQkJCQkJCWFuZCByZWFkeS4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9BUk1GV19VRSAgICAgICAgICAgICAoNjE0NDApCS8qIEFSTWZ3IGhhcyBhc3NlcnRlZCBhbgotCQkJCQkJdW5yZWNvdmVyYWJsZSBlcnJvci4gVGhlCi0JCQkJCQlsb3dlciAzIGhleCBkaWdpdHMgb2YgdGhlCi0JCQkJCQlzdGFnZSBjb2RlIGlkZW50aWZ5IHRoZQotCQkJCQkJdW5pcXVlIGVycm9yIGNvZGUuCi0JCQkJCQkqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhlIE1QVSBzZW1hcGhvcmUKLSAqIHJlZ2lzdGVyIHdoZW4gdXNlZCBmb3IgUE9TVC4KLSAqLwotc3RydWN0IEJFX01HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVF9BTUFQIHsKLQl1OCBzdGFnZVsxNl07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFsxMF07CS8qIERXT1JEIDAgKi8KLQl1OCBpc2NzaV9kcml2ZXJfbG9hZGVkOwkvKiBEV09SRCAwICovCi0JdTggb3B0aW9uX3JvbV9pbnN0YWxsZWQ7CS8qIERXT1JEIDAgKi8KLQl1OCBpc2NzaV9pcF9jb25mbGljdDsJLyogRFdPUkQgMCAqLwotCXU4IGlzY3NpX25vX2lwOwkvKiBEV09SRCAwICovCi0JdTggYmFja3VwX2Z3OwkvKiBEV09SRCAwICovCi0JdTggZXJyb3I7CQkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IE1HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVF9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiAtLS0gTUdNVF9IQkFfUE9TVF9EVU1NWV9CSVRTX0VOVU0gLS0tICovCi0jZGVmaW5lIFBPU1RfQklUX0lTQ1NJX0xPQURFRCAgICAgICAgICAgKDI2KQotI2RlZmluZSBQT1NUX0JJVF9PUFRST01fSU5TVCAgICAgICAgICAgICgyNykKLSNkZWZpbmUgUE9TVF9CSVRfQkFEX0lQX0FERFIgICAgICAgICAgICAoMjgpCi0jZGVmaW5lIFBPU1RfQklUX05PX0lQX0FERFIgICAgICAgICAgICAgKDI5KQotI2RlZmluZSBQT1NUX0JJVF9CQUNLVVBfRlcgICAgICAgICAgICAgICgzMCkKLSNkZWZpbmUgUE9TVF9CSVRfRVJST1IgICAgICAgICAgICAgICAgICAoMzEpCi0KLS8qIC0tLSBNR01UX0hCQV9QT1NUX0RVTU1ZX1ZBTFVFU19FTlVNIC0tLSAqLwotI2RlZmluZSBQT1NUX0lTQ1NJX0RSSVZFUl9MT0FERUQgICAgICAgICg2NzEwODg2NCkKLSNkZWZpbmUgUE9TVF9PUFRST01fSU5TVEFMTEVEICAgICAgICAgICAoMTM0MjE3NzI4KQotI2RlZmluZSBQT1NUX0lTQ1NJX0lQX0FERFJFU1NfQ09ORkxJQ1QgICgyNjg0MzU0NTYpCi0jZGVmaW5lIFBPU1RfSVNDU0lfTk9fSVBfQUREUkVTUyAgICAgICAgKDUzNjg3MDkxMikKLSNkZWZpbmUgUE9TVF9CQUNLVVBfRldfTE9BREVEICAgICAgICAgICAoMTA3Mzc0MTgyNCkKLSNkZWZpbmUgUE9TVF9GQVRBTF9FUlJPUiAgICAgICAgICAgICAgICAoMjE0NzQ4MzY0OCkKLQotI2VuZGlmIC8qIF9fcG9zdF9jb2Rlc19hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3JlZ21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3JlZ21hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODE2YmEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9yZWdtYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19yZWdtYXBfYW1hcF9oX18KLSNkZWZpbmUgX19yZWdtYXBfYW1hcF9oX18KLSNpbmNsdWRlICJwY2ljZmcuaCIKLSNpbmNsdWRlICJlcC5oIgotI2luY2x1ZGUgImNldi5oIgotI2luY2x1ZGUgIm1wdS5oIgotI2luY2x1ZGUgImRvb3JiZWxscy5oIgotCi0vKgotICogVGhpcyBpcyB0aGUgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG1hcCBmb3IgQmxhZGVFbmdpbmUsIHNob3dpbmcKLSAqIHRoZSByZWxhdGl2ZSBzaXplIGFuZCBvZmZzZXQgb2YgZWFjaCBzdWItbW9kdWxlLiBUaGUgQ1NSIHJlZ2lzdGVycwotICogYXJlIGlkZW50aWNhbCBmb3IgdGhlIG5ldHdvcmsgYW5kIHN0b3JhZ2UgUENJIGZ1bmN0aW9ucy4gVGhlCi0gKiBDU1IgbWFwIGlzIHNob3duIGJlbG93LCBmb2xsb3dlZCBieSBkZXRhaWxzIG9mIGVhY2ggYmxvY2ssCi0gKiBpbiBzdWItc2VjdGlvbnMuICBUaGUgc3ViLXNlY3Rpb25zIGJlZ2luIHdpdGggYSBkZXNjcmlwdGlvbgotICogb2YgQ1NScyB0aGF0IGFyZSBpbnN0YW50aWF0ZWQgaW4gbXVsdGlwbGUgYmxvY2tzLgotICovCi1zdHJ1Y3QgQkVfQkxBREVfRU5HSU5FX0NTUk1BUF9BTUFQIHsKLQlzdHJ1Y3QgQkVfTVBVX0NTUk1BUF9BTUFQIG1wdTsKLQl1OCByc3ZkMFs4MTkyXTsJLyogRFdPUkQgMjU2ICovCi0JdTggcnN2ZDFbODE5Ml07CS8qIERXT1JEIDUxMiAqLwotCXN0cnVjdCBCRV9DRVZfQ1NSTUFQX0FNQVAgY2V2OwotCXU4IHJzdmQyWzgxOTJdOwkvKiBEV09SRCAxMDI0ICovCi0JdTggcnN2ZDNbODE5Ml07CS8qIERXT1JEIDEyODAgKi8KLQl1OCByc3ZkNFs4MTkyXTsJLyogRFdPUkQgMTUzNiAqLwotCXU4IHJzdmQ1WzgxOTJdOwkvKiBEV09SRCAxNzkyICovCi0JdTggcnN2ZDZbODE5Ml07CS8qIERXT1JEIDIwNDggKi8KLQl1OCByc3ZkN1s4MTkyXTsJLyogRFdPUkQgMjMwNCAqLwotCXU4IHJzdmQ4WzgxOTJdOwkvKiBEV09SRCAyNTYwICovCi0JdTggcnN2ZDlbODE5Ml07CS8qIERXT1JEIDI4MTYgKi8KLQl1OCByc3ZkMTBbODE5Ml07CS8qIERXT1JEIDMwNzIgKi8KLQl1OCByc3ZkMTFbODE5Ml07CS8qIERXT1JEIDMzMjggKi8KLQl1OCByc3ZkMTJbODE5Ml07CS8qIERXT1JEIDM1ODQgKi8KLQl1OCByc3ZkMTNbODE5Ml07CS8qIERXT1JEIDM4NDAgKi8KLQl1OCByc3ZkMTRbODE5Ml07CS8qIERXT1JEIDQwOTYgKi8KLQl1OCByc3ZkMTVbODE5Ml07CS8qIERXT1JEIDQzNTIgKi8KLQl1OCByc3ZkMTZbODE5Ml07CS8qIERXT1JEIDQ2MDggKi8KLQl1OCByc3ZkMTdbODE5Ml07CS8qIERXT1JEIDQ4NjQgKi8KLQl1OCByc3ZkMThbODE5Ml07CS8qIERXT1JEIDUxMjAgKi8KLQl1OCByc3ZkMTlbODE5Ml07CS8qIERXT1JEIDUzNzYgKi8KLQl1OCByc3ZkMjBbODE5Ml07CS8qIERXT1JEIDU2MzIgKi8KLQl1OCByc3ZkMjFbODE5Ml07CS8qIERXT1JEIDU4ODggKi8KLQl1OCByc3ZkMjJbODE5Ml07CS8qIERXT1JEIDYxNDQgKi8KLQl1OCByc3ZkMjNbMTcxNTJdWzMyXTsJLyogRFdPUkQgNjQwMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBCTEFERV9FTkdJTkVfQ1NSTUFQX0FNQVAgewotCXUzMiBkd1syMzU1Ml07Ci19OwotCi0jZW5kaWYgLyogX19yZWdtYXBfYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKaW5kZXggYTdkZTQwMS4uY2QxOWJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKQEAgLTI0OCwxMCArMjQ4LDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJmdvc25kLT5sb2NrKTsKIAlnb3NuZC0+aHdfcHRyID0gZ29zbmQtPndfaWR4ID0gZ29zbmQtPmF2YWlsID0gMDsKIAlnb3NuZC0+Y2FwdHVyaW5nID0gMDsKLQlnb3NuZC0+Y2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGdvc25kLT5jYXJkID09IE5VTEwpIHsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmZ29zbmQtPmNhcmQpOworCWlmIChyZXQgPCAwKSB7CiAJCWtmcmVlKGdvc25kKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiByZXQ7CiAJfQogCXJldCA9IHNuZF9kZXZpY2VfbmV3KGdvc25kLT5jYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGdvLAogCQkJJmdvNzAwN19zbmRfZGV2aWNlX29wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IGFiNjljMWIuLmMyNzQ3YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC0yMTY0LDE5ICsyMTY0LDIwIEBACiAJaWYgKHNjYW5fdGltZXIuZnVuY3Rpb24gIT0gTlVMTCkKIAkJZGVsX3RpbWVyKCZzY2FuX3RpbWVyKTsKIAotCWlmIChrZXlwYWRfZW5hYmxlZCkKLQkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwlpZiAocHBydCAhPSBOVUxMKSB7CisJCWlmIChrZXlwYWRfZW5hYmxlZCkKKwkJCW1pc2NfZGVyZWdpc3Rlcigma2V5cGFkX2Rldik7CiAKLQlpZiAobGNkX2VuYWJsZWQpIHsKLQkJcGFuZWxfbGNkX3ByaW50KCJceDBjTENEIGRyaXZlciAiIFBBTkVMX1ZFUlNJT04KLQkJCQkiXG51bmxvYWRlZC5ceDFiW0xjXHgxYltMYlx4MWJbTC0iKTsKLQkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJaWYgKGxjZF9lbmFibGVkKSB7CisJCQlwYW5lbF9sY2RfcHJpbnQoIlx4MGNMQ0QgZHJpdmVyICIgUEFORUxfVkVSU0lPTgorCQkJCQkiXG51bmxvYWRlZC5ceDFiW0xjXHgxYltMYlx4MWJbTC0iKTsKKwkJCW1pc2NfZGVyZWdpc3RlcigmbGNkX2Rldik7CisJCX0KKworCQkvKiBUT0RPOiBmcmVlIGFsbCBpbnB1dCBzaWduYWxzICovCisJCXBhcnBvcnRfcmVsZWFzZShwcHJ0KTsKKwkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKIAl9Ci0KLQkvKiBUT0RPOiBmcmVlIGFsbCBpbnB1dCBzaWduYWxzICovCi0KLQlwYXJwb3J0X3JlbGVhc2UocHBydCk7Ci0JcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKIAlwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKCZwYW5lbF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKaW5kZXggNzljMjI1YS4uZjYzNjI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTg3U0UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTg3U0UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVCAmJiBDT01QQVRfTkVUX0RFVl9PUFMKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IGFmNjRjZmIuLjczNzAyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC0yMzQsMjAgKzIzNCwyMSBAQAogdm9pZCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKm47CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPSBOVUxMOwogCiAJaWYgKGhjcnlwdCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKHB0ciA9IGhjcnlwdC0+YWxncy5uZXh0LCBuID0gcHRyLT5uZXh0OyBwdHIgIT0gJmhjcnlwdC0+YWxnczsKLQkgICAgIHB0ciA9IG4sIG4gPSBwdHItPm5leHQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPQotCQkJKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqKSBwdHI7Ci0JCWxpc3RfZGVsKHB0cik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHQ6IHVucmVnaXN0ZXJlZCBhbGdvcml0aG0gIgotCQkgICAgICAgIiclcycgKGRlaW5pdClcbiIsIGFsZy0+b3BzLT5uYW1lKTsKLQkJa2ZyZWUoYWxnKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocHRyLCBuLCAmaGNyeXB0LT5hbGdzKSB7CisJCWFsZyA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19hbGcsIGxpc3QpOworCQlpZiAoYWxnKSB7CisJCQlsaXN0X2RlbChwdHIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiaWVlZTgwMjExX2NyeXB0OiB1bnJlZ2lzdGVyZWQgYWxnb3JpdGhtICclcycgKGRlaW5pdClcbiIsCisJCQkgICAgICAgYWxnLT5vcHMtPm5hbWUpOworCQkJa2ZyZWUoYWxnKTsKKwkJfQogCX0KLQogCWtmcmVlKGhjcnlwdCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKaW5kZXggOTQ1MzQ5NS4uNjZkZTVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKQEAgLTYxNjEsMTAgKzYxNjEsMTAgQEAKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZydGw4MTgwX3BjaV9kcml2ZXIpOwogCXJ0bDgxODBfcHJvY19tb2R1bGVfcmVtb3ZlKCk7Ci0JaWVlZTgwMjExX2NyeXB0b19kZWluaXQoKTsKIAlpZWVlODAyMTFfY3J5cHRvX3RraXBfZXhpdCgpOwogCWllZWU4MDIxMV9jcnlwdG9fY2NtcF9leGl0KCk7CiAJaWVlZTgwMjExX2NyeXB0b193ZXBfZXhpdCgpOworCWllZWU4MDIxMV9jcnlwdG9fZGVpbml0KCk7CiAJRE1FU0coIkV4aXRpbmciKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKaW5kZXggYjAwM2Y5YS4uZjcxNmIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCkBAIC0zMTksMTYgKzMxOSwxOCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwotCWludCBlcnI7CisJaW50IG5yLCBlcnI7CiAKIAl1c2JfZ2V0X2Rldih1ZGV2KTsKIAogCS8vIDIwMDYwNjMwLjIgQ2hlY2sgdGhlIGRldmljZSBpZiBpdCBhbHJlYWR5IGJlIG9wZW5lZAotCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUoIHVkZXYsIDAgKSwKLQkJCSAgICAgIDB4MDEsIFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfREVWSUNFfFVTQl9ESVJfSU4sCi0JCQkgICAgICAweDAsIDB4NDAwLCAmbHRtcCwgNCwgSFoqMTAwICk7Ci0JaWYgKGVycikKKwluciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUoIHVkZXYsIDAgKSwKKwkJCSAgICAgMHgwMSwgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9ERVZJQ0V8VVNCX0RJUl9JTiwKKwkJCSAgICAgMHgwLCAweDQwMCwgJmx0bXAsIDQsIEhaKjEwMCApOworCWlmIChuciA8IDApIHsKKwkJZXJyID0gbnI7CiAJCWdvdG8gZXJyb3I7CisJfQogCiAJbHRtcCA9IGNwdV90b19sZTMyKGx0bXApOwogCWlmIChsdG1wKSB7ICAvLyBJcyBhbHJlYWR5IGluaXRpYWxpemVkPwpAQCAtMzM3LDggKzMzOSwxMCBAQAogCX0KIAogCWRldiA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnByaXYpLCAmd2Jzb2Z0X29wcyk7Ci0JaWYgKCFkZXYpCisJaWYgKCFkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKKwl9CiAKIAlwcml2ID0gZGV2LT5wcml2OwogCkBAIC0zNjksOSArMzczLDExIEBACiAJfQogCiAJZGV2LT5leHRyYV90eF9oZWFkcm9vbSA9IDEyOwkvKiBGSVhNRSAqLwotCWRldi0+ZmxhZ3MgPSAwOworCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQzsKKwlkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CiAKIAlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOworCWRldi0+bWF4X3NpZ25hbCA9IDEwMDsKIAlkZXYtPnF1ZXVlcyA9IDE7CiAKIAlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZ3YnNvZnRfYmFuZF8yR0h6OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90Yy90Yy5jIGIvZHJpdmVycy90Yy90Yy5jCmluZGV4IGY3N2Y2MmEuLmU1YmQ0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGMvdGMuYworKysgYi9kcml2ZXJzL3RjL3RjLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAkJCSAgICAgICBzbG90KTsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQotCQlzcHJpbnRmKHRkZXYtPmRldi5idXNfaWQsICJ0YyV4Iiwgc2xvdCk7CisJCWRldl9zZXRfbmFtZSgmdGRldi0+ZGV2LCAidGMleCIsIHNsb3QpOwogCQl0ZGV2LT5idXMgPSB0YnVzOwogCQl0ZGV2LT5kZXYucGFyZW50ID0gJnRidXMtPmRldjsKIAkJdGRldi0+ZGV2LmJ1cyA9ICZ0Y19idXNfdHlwZTsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQl0ZGV2LT52ZW5kb3JbOF0gPSAwOwogCQl0ZGV2LT5uYW1lWzhdID0gMDsKIAotCQlwcl9pbmZvKCIlczogJXMgJXMgJXNcbiIsIHRkZXYtPmRldi5idXNfaWQsIHRkZXYtPnZlbmRvciwKKwkJcHJfaW5mbygiJXM6ICVzICVzICVzXG4iLCBkZXZfbmFtZSgmdGRldi0+ZGV2KSwgdGRldi0+dmVuZG9yLAogCQkJdGRldi0+bmFtZSwgdGRldi0+ZmlybXdhcmUpOwogCiAJCWRldnNpemUgPSByZWFkYihtb2R1bGUgKyBvZmZzZXQgKyBUQ19TTE9UX1NJWkUpOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcHJvdmlkZSBzbG90IHNwYWNlICIKIAkJCSAgICAgICAiKCVkTWlCIHJlcXVpcmVkLCB1cCB0byAlZE1pQiBzdXBwb3J0ZWQpXG4iLAotCQkJICAgICAgIHRkZXYtPmRldi5idXNfaWQsIGRldnNpemUgPj4gMjAsCisJCQkgICAgICAgZGV2X25hbWUoJnRkZXYtPmRldiksIGRldnNpemUgPj4gMjAsCiAJCQkgICAgICAgbWF4KHNsb3RzaXplLCBleHRzbG90c2l6ZSkgPj4gMjApOwogCQkJa2ZyZWUodGRldik7CiAJCQlnb3RvIG91dF9lcnI7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmdGNfYnVzLmRldmljZXMpOwotCXN0cmNweSh0Y19idXMuZGV2LmJ1c19pZCwgInRjIik7CisJZGV2X3NldF9uYW1lKCZ0Y19idXMuZGV2LCAidGMiKTsKIAlkZXZpY2VfcmVnaXN0ZXIoJnRjX2J1cy5kZXYpOwogCiAJaWYgKHRjX2J1cy5pbmZvLnNsb3Rfc2l6ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vS2NvbmZpZyBiL2RyaXZlcnMvdWlvL0tjb25maWcKaW5kZXggMDRiOTU0Yy4uN2Y4NjUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3Vpby9LY29uZmlnCkBAIC01OCw2ICs1OCwyNCBAQAogCiAJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB1aW9fc214LgogCitjb25maWcgVUlPX0FFQworCXRyaXN0YXRlICJBRUMgdmlkZW8gdGltZXN0YW1wIGRldmljZSIKKwlkZXBlbmRzIG9uIFBDSQorCWRlZmF1bHQgbgorCWhlbHAKKworCSAgVUlPIGRyaXZlciBmb3IgdGhlIEFkcmllbm5lIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIFBDSSB0aW1lCisJICBjb2RlIGRldmljZS4KKworCSAgVGhpcyBkZXZpY2UgZGlmZmVycyBmcm9tIG90aGVyIFVJTyBkZXZpY2VzIHNpbmNlIGl0IHVzZXMgSS9PCisJICBwb3J0cyBpbnN0ZWFkIG9mIG1lbW9yeSBtYXBwZWQgSS9PLiBJbiBvcmRlciB0byBtYWtlIGl0CisJICBwb3NzaWJsZSBmb3IgVUlPIHRvIHdvcmsgd2l0aCB0aGlzIGRldmljZSBhIHV0aWxpdHksIHVpb3BvcnQsCisJICBjYW4gYmUgdXNlZCB0byByZWFkIGFuZCB3cml0ZSB0aGUgcG9ydHM6CisKKwkgICAgZ2l0IGNsb25lIGdpdDovL2lmdXAub3JnL3BoaWxpcHMvdWlvcG9ydC5naXQKKworCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX2FlYy4KKwogY29uZmlnIFVJT19TRVJDT1MzCiAJdHJpc3RhdGUgIkF1dG9tYXRhIFNlcmNvcyBJSUkgUENJIGNhcmQgZHJpdmVyIgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vTWFrZWZpbGUgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQppbmRleCBlNjk1NTgxLi41YzI1ODZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQpAQCAtMyw0ICszLDUgQEAKIG9iai0kKENPTkZJR19VSU9fUERSVikJKz0gdWlvX3BkcnYubwogb2JqLSQoQ09ORklHX1VJT19QRFJWX0dFTklSUSkJKz0gdWlvX3BkcnZfZ2VuaXJxLm8KIG9iai0kKENPTkZJR19VSU9fU01YKQkrPSB1aW9fc214Lm8KK29iai0kKENPTkZJR19VSU9fQUVDKQkrPSB1aW9fYWVjLm8KIG9iai0kKENPTkZJR19VSU9fU0VSQ09TMykJKz0gdWlvX3NlcmNvczMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCA0Y2E4NWExLi4wM2VmYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtNjEsNiArNjEsMTQgQEAKIH07CiAjZGVmaW5lIHRvX21hcChtYXApIGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB1aW9fbWFwLCBrb2JqKQogCitzdGF0aWMgc3NpemVfdCBtYXBfbmFtZV9zaG93KHN0cnVjdCB1aW9fbWVtICptZW0sIGNoYXIgKmJ1ZikKK3sKKwlpZiAodW5saWtlbHkoIW1lbS0+bmFtZSkpCisJCW1lbS0+bmFtZSA9ICIiOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1lbS0+bmFtZSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IG1hcF9hZGRyX3Nob3coc3RydWN0IHVpb19tZW0gKm1lbSwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBtZW0tPmFkZHIpOwpAQCAtODIsNiArOTAsOCBAQAogCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHVpb19tZW0gKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAorc3RhdGljIHN0cnVjdCBtYXBfc3lzZnNfZW50cnkgbmFtZV9hdHRyaWJ1dGUgPQorCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBtYXBfbmFtZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgbWFwX3N5c2ZzX2VudHJ5IGFkZHJfYXR0cmlidXRlID0KIAlfX0FUVFIoYWRkciwgU19JUlVHTywgbWFwX2FkZHJfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IG1hcF9zeXNmc19lbnRyeSBzaXplX2F0dHJpYnV0ZSA9CkBAIC05MCw2ICsxMDAsNyBAQAogCV9fQVRUUihvZmZzZXQsIFNfSVJVR08sIG1hcF9vZmZzZXRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphdHRyc1tdID0geworCSZuYW1lX2F0dHJpYnV0ZS5hdHRyLAogCSZhZGRyX2F0dHJpYnV0ZS5hdHRyLAogCSZzaXplX2F0dHJpYnV0ZS5hdHRyLAogCSZvZmZzZXRfYXR0cmlidXRlLmF0dHIsCkBAIC0xMzMsNiArMTQ0LDE0IEBACiB9OwogI2RlZmluZSB0b19wb3J0aW8ocG9ydGlvKSBjb250YWluZXJfb2YocG9ydGlvLCBzdHJ1Y3QgdWlvX3BvcnRpbywga29iaikKIAorc3RhdGljIHNzaXplX3QgcG9ydGlvX25hbWVfc2hvdyhzdHJ1Y3QgdWlvX3BvcnQgKnBvcnQsIGNoYXIgKmJ1ZikKK3sKKwlpZiAodW5saWtlbHkoIXBvcnQtPm5hbWUpKQorCQlwb3J0LT5uYW1lID0gIiI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcG9ydC0+bmFtZSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHBvcnRpb19zdGFydF9zaG93KHN0cnVjdCB1aW9fcG9ydCAqcG9ydCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBwb3J0LT5zdGFydCk7CkBAIC0xNTksNiArMTc4LDggQEAKIAlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCB1aW9fcG9ydCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiB9OwogCitzdGF0aWMgc3RydWN0IHBvcnRpb19zeXNmc19lbnRyeSBwb3J0aW9fbmFtZV9hdHRyaWJ1dGUgPQorCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBwb3J0aW9fbmFtZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgcG9ydGlvX3N5c2ZzX2VudHJ5IHBvcnRpb19zdGFydF9hdHRyaWJ1dGUgPQogCV9fQVRUUihzdGFydCwgU19JUlVHTywgcG9ydGlvX3N0YXJ0X3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBwb3J0aW9fc3lzZnNfZW50cnkgcG9ydGlvX3NpemVfYXR0cmlidXRlID0KQEAgLTE2Nyw2ICsxODgsNyBAQAogCV9fQVRUUihwb3J0dHlwZSwgU19JUlVHTywgcG9ydGlvX3BvcnR0eXBlX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG9ydGlvX2F0dHJzW10gPSB7CisJJnBvcnRpb19uYW1lX2F0dHJpYnV0ZS5hdHRyLAogCSZwb3J0aW9fc3RhcnRfYXR0cmlidXRlLmF0dHIsCiAJJnBvcnRpb19zaXplX2F0dHJpYnV0ZS5hdHRyLAogCSZwb3J0aW9fcG9ydHR5cGVfYXR0cmlidXRlLmF0dHIsCkBAIC02ODYsNyArNzA4LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXF1ZXN0ZWRfcGFnZXMgPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOwotCWFjdHVhbF9wYWdlcyA9IChpZGV2LT5pbmZvLT5tZW1bbWldLnNpemUgKyBQQUdFX1NJWkUgLTEpID4+IFBBR0VfU0hJRlQ7CisJYWN0dWFsX3BhZ2VzID0gKChpZGV2LT5pbmZvLT5tZW1bbWldLmFkZHIgJiB+UEFHRV9NQVNLKQorCQkJKyBpZGV2LT5pbmZvLT5tZW1bbWldLnNpemUgKyBQQUdFX1NJWkUgLTEpID4+IFBBR0VfU0hJRlQ7CiAJaWYgKHJlcXVlc3RlZF9wYWdlcyA+IGFjdHVhbF9wYWdlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19hZWMuYyBiL2RyaXZlcnMvdWlvL3Vpb19hZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzgzMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91aW8vdWlvX2FlYy5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogdWlvX2FlYy5jIC0tIHNpbXBsZSBkcml2ZXIgZm9yIEFkcmllbm5lIEVsZWN0cm9uaWNzIENvcnAgdGltZSBjb2RlIFBDSSBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQnJhbmRvbiBQaGlsaXBzIDxicmFuZG9uQGlmdXAub3JnPgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICAgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUVDIDB4YWVjYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FFQ19WSVRDTFRDIDB4NjI1MAorCisjZGVmaW5lIElOVF9FTkFCTEVfQUREUgkJMHhGQworI2RlZmluZSBJTlRfRU5BQkxFCQkweDEwCisjZGVmaW5lIElOVF9ESVNBQkxFCQkweDAKKworI2RlZmluZSBJTlRfTUFTS19BRERSCQkweDJFCisjZGVmaW5lIElOVF9NQVNLX0FMTAkJMHgzRgorCisjZGVmaW5lIElOVEFfRFJWUl9BRERSCQkweEZFCisjZGVmaW5lIElOVEFfRU5BQkxFRF9GTEFHCTB4MDgKKyNkZWZpbmUgSU5UQV9GTEFHCQkweDAxCisKKyNkZWZpbmUgTUFJTEJPWAkJCTB4MEYKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FFQywgUENJX0RFVklDRV9JRF9BRUNfVklUQ0xUQyksIH0sCisJeyAwLCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlkcyk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZWN0Y19pcnEoaW50IGlycSwgc3RydWN0IHVpb19pbmZvICpkZXZfaW5mbykKK3sKKwl2b2lkIF9faW9tZW0gKmludF9mbGFnID0gZGV2X2luZm8tPnByaXYgKyBJTlRBX0RSVlJfQUREUjsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IGlvcmVhZDgoaW50X2ZsYWcpOworCisKKwlpZiAoKHN0YXR1cyAmIElOVEFfRU5BQkxFRF9GTEFHKSAmJiAoc3RhdHVzICYgSU5UQV9GTEFHKSkgeworCQkvKiBhcHBsaWNhdGlvbiB3cml0ZXMgMHgwMCB0byAweDJGIHRvIGdldCBuZXh0IGludGVycnVwdCAqLworCQlzdGF0dXMgPSBpb3JlYWQ4KGRldl9pbmZvLT5wcml2ICsgTUFJTEJPWCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2JvYXJkX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1aW9faW5mbyAqaSkKK3sKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUENJLVRDIGJvYXJkIHZlbmRvcjogJXgleCBudW1iZXI6ICV4JXgiCisJCSIgcmV2aXNpb246ICVjJWNcbiIsCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDEpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAwKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMyksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDIpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDA2KSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwNykpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1aW9faW5mbyAqaW5mbzsKKwlpbnQgcmV0OworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1aW9faW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAiYWVjdGMiKSkKKwkJZ290byBvdXRfZGlzYWJsZTsKKworCWluZm8tPm5hbWUgPSAiYWVjdGMiOworCWluZm8tPnBvcnRbMF0uc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaWYgKCFpbmZvLT5wb3J0WzBdLnN0YXJ0KQorCQlnb3RvIG91dF9yZWxlYXNlOworCWluZm8tPnByaXYgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCFpbmZvLT5wcml2KQorCQlnb3RvIG91dF9yZWxlYXNlOworCWluZm8tPnBvcnRbMF0uc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJaW5mby0+cG9ydFswXS5wb3J0dHlwZSA9IFVJT19QT1JUX0dQSU87CisKKwlpbmZvLT52ZXJzaW9uID0gIjAuMC4xIjsKKwlpbmZvLT5pcnEgPSBwZGV2LT5pcnE7CisJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisJaW5mby0+aGFuZGxlciA9IGFlY3RjX2lycTsKKworCXByaW50X2JvYXJkX2RhdGEocGRldiwgaW5mbyk7CisJcmV0ID0gdWlvX3JlZ2lzdGVyX2RldmljZSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bm1hcDsKKworCWlvd3JpdGUzMihJTlRfRU5BQkxFLCBpbmZvLT5wcml2ICsgSU5UX0VOQUJMRV9BRERSKTsKKwlpb3dyaXRlOChJTlRfTUFTS19BTEwsIGluZm8tPnByaXYgKyBJTlRfTUFTS19BRERSKTsKKwlpZiAoIShpb3JlYWQ4KGluZm8tPnByaXYgKyBJTlRBX0RSVlJfQUREUikKKwkJCSYgSU5UQV9FTkFCTEVEX0ZMQUcpKQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhZWN0YzogaW50ZXJydXB0cyBub3QgZW5hYmxlZFxuIik7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCXBjaV9pb3VubWFwKHBkZXYsIGluZm8tPnByaXYpOworb3V0X3JlbGVhc2U6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK291dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK291dF9mcmVlOgorCWtmcmVlKGluZm8pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCByZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJaW93cml0ZTgoSU5UX0RJU0FCTEUsIGluZm8tPnByaXYgKyBJTlRfTUFTS19BRERSKTsKKwlpb3dyaXRlMzIoSU5UX0RJU0FCTEUsIGluZm8tPnByaXYgKyBJTlRfRU5BQkxFX0FERFIpOworCS8qIHJlYWQgbWFpbGJveCB0byBlbnN1cmUgYm9hcmQgZHJvcHMgaXJxICovCisJaW9yZWFkOChpbmZvLT5wcml2ICsgTUFJTEJPWCk7CisKKwl1aW9fdW5yZWdpc3Rlcl9kZXZpY2UoaW5mbyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlvdW5tYXAoaW5mby0+cHJpdik7CisKKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYWVjdGMiLAorCS5pZF90YWJsZSA9IGlkcywKKwkucHJvYmUgPSBwcm9iZSwKKwkucmVtb3ZlID0gcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWVjdGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFlY3RjX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGFlY3RjX2luaXQpOworbW9kdWxlX2V4aXQoYWVjdGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZwppbmRleCA4M2JhYmIwLi5jNmM4MTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL0tjb25maWcKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzIwCiAJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzcyMQogCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3NjMKKwlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJIyBtb3JlOgogCWRlZmF1bHQgUENJCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggYjJjZWI0YS4uODkyOTlhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAKIG9iai0kKENPTkZJR19VU0JfVTEzMl9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfSFdBX0hDRCkJKz0gaG9zdC8KK29iai0kKENPTkZJR19VU0JfSVNQMTc2MF9IQ0QpCSs9IGhvc3QvCiAKIG9iai0kKENPTkZJR19VU0JfQzY3WDAwX0hDRCkJKz0gYzY3eDAwLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKaW5kZXggNWVkNGFlMC4uNjc4OTA4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQl1c2JfZXJyKGluc3RhbmNlLT51c2JhdG0sICJyZXF1ZXN0ZWQgdHJhbnNmZXIgc2l6ZSB0b28gbGFyZ2UgKCVkLCAlZClcbiIsCiAJCQkJd2J1ZmxlbiwgcmJ1Zmxlbik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBlcnI7CiAJfQogCiAJbXV0ZXhfbG9jaygmaW5zdGFuY2UtPmNtX3NlcmlhbGl6ZSk7CkBAIC01NjUsNiArNTY1LDcgQEAKIAlkYmcoImNtICUjeCIsIGNtKTsKIGZhaWw6CiAJbXV0ZXhfdW5sb2NrKCZpbnN0YW5jZS0+Y21fc2VyaWFsaXplKTsKK2VycjoKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggMzI2ZGQ3Zi4uYjNkNWEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTM3Niw2ICsxMzc2LDE1IEBACiAJeyBVU0JfREVWSUNFKDB4MDU3MiwgMHgxMzI0KSwgLyogQ29uZXhhbnQgVVNCIE1PREVNIFJEMDItRDQwMCAqLwogCS5kcml2ZXJfaW5mbyA9IE5PX1VOSU9OX05PUk1BTCwgLyogaGFzIG5vIHVuaW9uIGRlc2NyaXB0b3IgKi8KIAl9LAorCXsgVVNCX0RFVklDRSgweDIyYjgsIDB4NjQyNSksIC8qIE1vdG9yb2xhIE1PVE9NQUdYIHBob25lcyAqLworCX0sCisJeyBVU0JfREVWSUNFKDB4MDU3MiwgMHgxMzI5KSwgLyogSHVtbWluZ2JpcmQgaHVjNTZzIChDb25leGFudCkgKi8KKwkuZHJpdmVyX2luZm8gPSBOT19VTklPTl9OT1JNQUwsIC8qIHVuaW9uIGRlc2NyaXB0b3IgbWlzcGxhY2VkIG9uCisJCQkJCSAgIGRhdGEgaW50ZXJmYWNlIGluc3RlYWQgb2YKKwkJCQkJICAgY29tbXVuaWNhdGlvbnMgaW50ZXJmYWNlLgorCQkJCQkgICBNYXliZSB3ZSBzaG91bGQgZGVmaW5lIGEgbmV3CisJCQkJCSAgIHF1aXJrIGZvciB0aGlzLiAqLworCX0sCiAKIAkvKiBjb250cm9sIGludGVyZmFjZXMgd2l0aCB2YXJpb3VzIEFULWNvbW1hbmQgc2V0cyAqLwogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDNmM2VlMTMuLmQyNzQ3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtODgwLDE2ICs4ODAsMTkgQEAKIAkJaWYgKHJjIDw9IDApCiAJCQlicmVhazsKIAotCQlpZiAodXNibHAtPmZsYWdzICYgTFBfQUJPUlQpIHsKLQkJCWlmIChzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpID09IDApIHsKKwkJaWYgKHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxNTAwKSkgPT0gMCkgeworCQkJaWYgKHVzYmxwLT5mbGFncyAmIExQX0FCT1JUKSB7CiAJCQkJZXJyID0gdXNibHBfY2hlY2tfc3RhdHVzKHVzYmxwLCBlcnIpOwogCQkJCWlmIChlcnIgPT0gMSkgewkvKiBQYXBlciBvdXQgKi8KIAkJCQkJcmMgPSAtRU5PU1BDOwogCQkJCQlicmVhazsKIAkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFByb2QgdGhlIHByaW50ZXIsIEdlbnRvbyMyNTEyMzcuICovCisJCQkJbXV0ZXhfbG9jaygmdXNibHAtPm11dCk7CisJCQkJdXNibHBfcmVhZF9zdGF0dXModXNibHAsIHVzYmxwLT5zdGF0dXNidWYpOworCQkJCW11dGV4X3VubG9jaygmdXNibHAtPm11dCk7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzY2hlZHVsZSgpOwogCQl9CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCmluZGV4IDBmNWMwNWYuLmM0MGE5YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC01MCw2ICs1MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J0bWNfZGV2aWNlc1tdID0gewogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19BUFBfU1BFQywgMywgMCksIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0FQUF9TUEVDLCAzLCAxKSwgfSwKIAl7IDAsIH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNidG1jX2RldmljZXMpOwpAQCAtMTA2LDEyICsxMDcsMTMgQEAKIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOwotCWludCByZXR2YWwgPSAtRU5PREVWOworCWludCByZXR2YWwgPSAwOwogCiAJaW50ZiA9IHVzYl9maW5kX2ludGVyZmFjZSgmdXNidG1jX2RyaXZlciwgaW1pbm9yKGlub2RlKSk7CiAJaWYgKCFpbnRmKSB7CiAJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQogCQkgICAgICAgIjogY2FuIG5vdCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLCBpbWlub3IoaW5vZGUpKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCA2ZWMzODE3Li43M2MxMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJfQogCiAJLyogdGhpcyBpc24ndCBjaGVja2luZyBmb3IgaWxsZWdhbCB2YWx1ZXMgKi8KLQlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZShkZXNjKSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKIAkJdHlwZSA9ICJDdHJsIjsKIAkJaWYgKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggNzUxM2JiMC4uZGYzYzUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAKICNkZWZpbmUJTUFYX1VTQkZTX0JVRkZFUl9TSVpFCTE2Mzg0CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvbm5lY3RlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3N0YXRpYyBpbnQgY29ubmVjdGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCXJldHVybiAoIWxpc3RfZW1wdHkoJnBzLT5saXN0KSAmJgogCQkJcHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCWtmcmVlKGFzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX25ld3BlbmRpbmcoc3RydWN0IGFzeW5jICphcykKK3N0YXRpYyB2b2lkIGFzeW5jX25ld3BlbmRpbmcoc3RydWN0IGFzeW5jICphcykKIHsKIAlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX3JlbW92ZXBlbmRpbmcoc3RydWN0IGFzeW5jICphcykKK3N0YXRpYyB2b2lkIGFzeW5jX3JlbW92ZXBlbmRpbmcoc3RydWN0IGFzeW5jICphcykKIHsKIAlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldGNvbXBsZXRlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3N0YXRpYyBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldGNvbXBsZXRlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhc3luYyAqYXMgPSBOVUxMOwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJcmV0dXJuIGFzOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0cGVuZGluZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywKK3N0YXRpYyBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldHBlbmRpbmcoc3RydWN0IGRldl9zdGF0ZSAqcHMsCiAJCQkJCSAgICAgdm9pZCBfX3VzZXIgKnVzZXJ1cmIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMwMiw3ICszMDIsNyBAQAogCiBzdGF0aWMgdm9pZCBzbm9vcF91cmIoc3RydWN0IHVyYiAqdXJiLCB2b2lkIF9fdXNlciAqdXNlcnVyYikKIHsKLQlpbnQgajsKKwl1bnNpZ25lZCBqOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogCWlmICghdXNiZnNfc25vb3ApCkBAIC0zMTEsOSArMzExLDkgQEAKIAlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRpcmVjdGlvbj0lc1xuIiwKIAkJCXVzYl91cmJfZGlyX2luKHVyYikgPyAiSU4iIDogIk9VVCIpOwogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNlcnVyYj0lcFxuIiwgdXNlcnVyYik7Ci0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPSVkXG4iLAorCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0ldVxuIiwKIAkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJhY3R1YWxfbGVuZ3RoPSVkXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiYWN0dWFsX2xlbmd0aD0ldVxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRhdGE6ICIpOwogCWZvciAoaiA9IDA7IGogPCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7ICsraikKIAkJcHJpbnRrKCIlMDJ4ICIsIGRhdGFbal0pOwpAQCAtMzU5LDExICszNTksNiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKLQlhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcyk7Ci0Jd2hpbGUgKGFzKSB7Ci0JCWZyZWVfYXN5bmMoYXMpOwotCQlhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcyk7Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2FzeW5jX29uX2ludGVyZmFjZShzdHJ1Y3QgZGV2X3N0YXRlICpwcywKQEAgLTM4MSw3ICszNzYsNyBAQAogCWRlc3Ryb3lfYXN5bmMocHMsICZoaXRsaXN0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfYWxsX2FzeW5jKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIHZvaWQgZGVzdHJveV9hbGxfYXN5bmMoc3RydWN0IGRldl9zdGF0ZSAqcHMpCiB7CiAJZGVzdHJveV9hc3luYyhwcywgJnBzLT5hc3luY19wZW5kaW5nKTsKIH0KQEAgLTUzMCw3ICs1MjUsOCBAQAogewogCWludCByZXQgPSAwOwogCi0JaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTCisJaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQKKwkgJiYgcHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0FERFJFU1MKIAkgJiYgcHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCWlmIChVU0JfVFlQRV9WRU5ET1IgPT0gKFVTQl9UWVBFX01BU0sgJiByZXF1ZXN0dHlwZSkpCkBAIC02NDMsNiArNjM5LDcgQEAKIAlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcHMtPmRldjsKIAl1bnNpZ25lZCBpbnQgaWZudW07CisJc3RydWN0IGFzeW5jICphczsKIAogCXVzYl9sb2NrX2RldmljZShkZXYpOwogCkBAIC02NjEsNiArNjU4LDEyIEBACiAJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKIAl1c2JfcHV0X2RldihkZXYpOwogCXB1dF9waWQocHMtPmRpc2NfcGlkKTsKKworCWFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKTsKKwl3aGlsZSAoYXMpIHsKKwkJZnJlZV9hc3luYyhhcyk7CisJCWFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKTsKKwl9CiAJa2ZyZWUocHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IGUxNzEwZjIuLjQwZGVlMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlzdHJ1Y3QgZXBfZGV2aWNlICplcCA9IHRvX2VwX2RldmljZShkZXYpOwogCWNoYXIgKnR5cGUgPSAidW5rbm93biI7CiAKLQlzd2l0Y2ggKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXAtPmRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQl0eXBlID0gIkNvbnRyb2wiOwogCQlicmVhazsKQEAgLTk0LDcgKzk0LDcgQEAKIAogCWluID0gKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTik7CiAKLQlzd2l0Y2ggKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXAtPmRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQlpZiAoZXAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCiAJCQlpbnRlcnZhbCA9IGVwLT5kZXNjLT5iSW50ZXJ2YWw7CkBAIC0xMzEsMTAgKzEzMSw5IEBACiAJc3RydWN0IGVwX2RldmljZSAqZXAgPSB0b19lcF9kZXZpY2UoZGV2KTsKIAljaGFyICpkaXJlY3Rpb247CiAKLQlpZiAoKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woZXAtPmRlc2MpKQogCQlkaXJlY3Rpb24gPSAiYm90aCI7Ci0JZWxzZSBpZiAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCWVsc2UgaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXAtPmRlc2MpKQogCQlkaXJlY3Rpb24gPSAiaW4iOwogCWVsc2UKIAkJZGlyZWN0aW9uID0gIm91dCI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IGM1NGZjNDAuLmE0MzAxZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0yOTgsMTkgKzI5OCw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX3BjaV9zdXNwZW5kKTsKIAogLyoqCi0gKiB1c2JfaGNkX3BjaV9yZXN1bWVfZWFybHkgLSByZXN1bWUgYSBQQ0ktYmFzZWQgSENEIGJlZm9yZSBJUlFzIGFyZSBlbmFibGVkCi0gKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlc3VtZWQKLSAqCi0gKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyAucmVzdW1lX2Vhcmx5LgotICovCi1pbnQgdXNiX2hjZF9wY2lfcmVzdW1lX2Vhcmx5KHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9oY2RfcGNpX3Jlc3VtZV9lYXJseSk7Ci0KLS8qKgogICogdXNiX2hjZF9wY2lfcmVzdW1lIC0gcG93ZXIgbWFuYWdlbWVudCByZXN1bWUgb2YgYSBQQ0ktYmFzZWQgSENECiAgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlc3VtZWQKICAqCkBAIC0zMzMsNiArMzIwLDggQEAKIAl9CiAjZW5kaWYKIAorCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CisKIAloY2QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlpZiAoaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9TVVNQRU5ERUQpIHsKIAkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDNjNzExZGI1Li44MWZhODUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTI3OSw5ICsyNzksOSBAQAogICogaGVscGVyIHJvdXRpbmUgZm9yIHJldHVybmluZyBzdHJpbmcgZGVzY3JpcHRvcnMgaW4gVVRGLTE2TEUKICAqIGlucHV0IGNhbiBhY3R1YWxseSBiZSBJU08tODg1OS0xOyBBU0NJSSBpcyBpdHMgNy1iaXQgc3Vic2V0CiAgKi8KLXN0YXRpYyBpbnQgYXNjaWkydXRmIChjaGFyICpzLCB1OCAqdXRmLCBpbnQgdXRmbWF4KQorc3RhdGljIHVuc2lnbmVkIGFzY2lpMnV0ZihjaGFyICpzLCB1OCAqdXRmLCBpbnQgdXRmbWF4KQogewotCWludCByZXR2YWw7CisJdW5zaWduZWQgcmV0dmFsOwogCiAJZm9yIChyZXR2YWwgPSAwOyAqcyAmJiB1dGZtYXggPiAxOyB1dGZtYXggLT0gMiwgcmV0dmFsICs9IDIpIHsKIAkJKnV0ZisrID0gKnMrKzsKQEAgLTMwNCwxOSArMzA0LDE1IEBACiAgKiBQcm9kdWNlcyBlaXRoZXIgYSBtYW51ZmFjdHVyZXIsIHByb2R1Y3Qgb3Igc2VyaWFsIG51bWJlciBzdHJpbmcgZm9yIHRoZQogICogdmlydHVhbCByb290IGh1YiBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbnQgcmhfc3RyaW5nICgKLQlpbnQJCWlkLAotCXN0cnVjdCB1c2JfaGNkCSpoY2QsCi0JdTgJCSpkYXRhLAotCWludAkJbGVuCi0pIHsKK3N0YXRpYyB1bnNpZ25lZCByaF9zdHJpbmcoaW50IGlkLCBzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1OCAqZGF0YSwgdW5zaWduZWQgbGVuKQorewogCWNoYXIgYnVmIFsxMDBdOwogCiAJLy8gbGFuZ3VhZ2UgaWRzCiAJaWYgKGlkID09IDApIHsKIAkJYnVmWzBdID0gNDsgICAgYnVmWzFdID0gMzsJLyogNCBieXRlcyBzdHJpbmcgZGF0YSAqLwogCQlidWZbMl0gPSAweDA5OyBidWZbM10gPSAweDA0OwkvKiBNU0ZULXNwZWFrIGZvciAiZW4tdXMiICovCi0JCWxlbiA9IG1pbiAobGVuLCA0KTsKKwkJbGVuID0gbWluX3QodW5zaWduZWQsIGxlbiwgNCk7CiAJCW1lbWNweSAoZGF0YSwgYnVmLCBsZW4pOwogCQlyZXR1cm4gbGVuOwogCkBAIC0zMzIsMTAgKzMyOCw3IEBACiAJfSBlbHNlIGlmIChpZCA9PSAzKSB7CiAJCXNucHJpbnRmIChidWYsIHNpemVvZiBidWYsICIlcyAlcyAlcyIsIGluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLAogCQkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsIGhjZC0+ZHJpdmVyLT5kZXNjcmlwdGlvbik7Ci0KLQkvLyB1bnN1cHBvcnRlZCBJRHMgLS0+ICJwcm90b2NvbCBzdGFsbCIKLQl9IGVsc2UKLQkJcmV0dXJuIC1FUElQRTsKKwl9CiAKIAlzd2l0Y2ggKGxlbikgewkJLyogQWxsIGNhc2VzIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CkBAIC0zNjAsOSArMzUzLDggQEAKIAl1OAkJdGJ1ZiBbc2l6ZW9mIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yKV0KIAkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpOwogCWNvbnN0IHU4CSpidWZwID0gdGJ1ZjsKLQlpbnQJCWxlbiA9IDA7CisJdW5zaWduZWQJbGVuID0gMDsKIAlpbnQJCXN0YXR1czsKLQlpbnQJCW47CiAJdTgJCXBhdGNoX3dha2V1cCA9IDA7CiAJdTgJCXBhdGNoX3Byb3RvY29sID0gMDsKIApAQCAtNDU2LDEwICs0NDgsMTEgQEAKIAkJCQlwYXRjaF93YWtldXAgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX0RUX1NUUklORyA8PCA4OgotCQkJbiA9IHJoX3N0cmluZyAod1ZhbHVlICYgMHhmZiwgaGNkLCB1YnVmLCB3TGVuZ3RoKTsKLQkJCWlmIChuIDwgMCkKKwkJCWlmICgod1ZhbHVlICYgMHhmZikgPCA0KQorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IHJoX3N0cmluZyh3VmFsdWUgJiAweGZmLAorCQkJCQkJaGNkLCB1YnVmLCB3TGVuZ3RoKTsKKwkJCWVsc2UgLyogdW5zdXBwb3J0ZWQgSURzIC0tPiAicHJvdG9jb2wgc3RhbGwiICovCiAJCQkJZ290byBlcnJvcjsKLQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG47CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gZXJyb3I7CkBAIC02MjksNyArNjIyLDcgQEAKIHsKIAlpbnQJCXJldHZhbDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwotCWludAkJbGVuID0gMSArICh1cmItPmRldi0+bWF4Y2hpbGQgLyA4KTsKKwl1bnNpZ25lZAlsZW4gPSAxICsgKHVyYi0+ZGV2LT5tYXhjaGlsZCAvIDgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwogCWlmIChoY2QtPnN0YXR1c191cmIgfHwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgbGVuKSB7CkBAIC05MDEsNyArODk0LDcgQEAKIAogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAotCXVzYl9kZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJdXNiX2Rldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCk7CiAJcmV0dmFsID0gdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfREVWSUNFX1NJWkUpOwogCWlmIChyZXR2YWwgIT0gc2l6ZW9mIHVzYl9kZXYtPmRlc2NyaXB0b3IpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaAppbmRleCA1Yjk0YTU2Li5mNzUwZWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKQEAgLTI1Nyw3ICsyNTcsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiBleHRlcm4gaW50IHVzYl9oY2RfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IG1zZyk7Ci1leHRlcm4gaW50IHVzYl9oY2RfcGNpX3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBpbnQgdXNiX2hjZF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBjZDUwZDg2Li5iZTg2YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTM5Miw3ICszOTIsNyBAQAogewogCXN0cnVjdCB1c2JfaHViICpodWIgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCWludCBpOworCXVuc2lnbmVkIGk7CiAJdW5zaWduZWQgbG9uZyBiaXRzOwogCiAJc3dpdGNoIChzdGF0dXMpIHsKQEAgLTEzMDUsNiArMTMwNSw3IEBACiAJCXJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQodWRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXRfZGV2aWNlX3N0YXRlKTsKIAogLyoKICAqIFdVU0IgZGV2aWNlcyBhcmUgc2ltcGxlOiB0aGV5IGhhdmUgbm8gaHVicyBiZWhpbmQsIHNvIHRoZSBtYXBwaW5nCkBAIC0yNDcxLDIwICsyNDcyLDIwIEBACiAJICovCiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgkvKiBmaXhlZCBhdCA1MTIgKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMik7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNTEyKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfSElHSDoJCS8qIGZpeGVkIGF0IDY0ICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9GVUxMOgkJLyogOCwgMTYsIDMyLCBvciA2NCAqLwogCQkvKiB0byBkZXRlcm1pbmUgdGhlIGVwMCBtYXhwYWNrZXQgc2l6ZSwgdHJ5IHRvIHJlYWQKIAkJICogdGhlIGRldmljZSBkZXNjcmlwdG9yIHRvIGdldCBiTWF4UGFja2V0U2l6ZTAgYW5kCiAJCSAqIHRoZW4gY29ycmVjdCBvdXIgaW5pdGlhbCBndWVzcy4KIAkJICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9MT1c6CQkvKiBmaXhlZCBhdCA4ICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig4KTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZ290byBmYWlsOwpAQCAtMzM5MiwxMCArMzM5MywxMCBAQAogCQl1ZGV2LT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsJLyogZm9yIGRpc2Nvbm5lY3QoKSBjYWxscyAqLwogCQlnb3RvIHJlX2VudW1lcmF0ZTsKICAgCX0KLSAgCisKKwkvKiBSZXN0b3JlIHRoZSBkZXZpY2UncyBwcmV2aW91cyBjb25maWd1cmF0aW9uICovCiAJaWYgKCF1ZGV2LT5hY3Rjb25maWcpCiAJCWdvdG8gZG9uZTsKLQogCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLCAwLAogCQkJdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIDAsCkBAIC0zNDA4LDE2ICszNDA5LDI1IEBACiAgIAl9CiAJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOwogCisJLyogUHV0IGludGVyZmFjZXMgYmFjayBpbnRvIHRoZSBzYW1lIGFsdHNldHRpbmdzIGFzIGJlZm9yZS4KKwkgKiBEb24ndCBib3RoZXIgdG8gc2VuZCB0aGUgU2V0LUludGVyZmFjZSByZXF1ZXN0IGZvciBpbnRlcmZhY2VzCisJICogdGhhdCB3ZXJlIGFscmVhZHkgaW4gYWx0c2V0dGluZyAwOyBiZXNpZGVzIGJlaW5nIHVubmVjZXNzYXJ5LAorCSAqIG1hbnkgZGV2aWNlcyBjYW4ndCBoYW5kbGUgaXQuICBJbnN0ZWFkIGp1c3QgcmVzZXQgdGhlIGhvc3Qtc2lkZQorCSAqIGVuZHBvaW50IHN0YXRlLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOwogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjOwogCi0JCS8qIHNldF9pbnRlcmZhY2UgcmVzZXRzIGhvc3Qgc2lkZSB0b2dnbGUgZXZlbgotCQkgKiBmb3IgYWx0c2V0dGluZyB6ZXJvLiAgdGhlIGludGVyZmFjZSBtYXkgaGF2ZSBubyBkcml2ZXIuCi0JCSAqLwogCQlkZXNjID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOwotCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAotCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQlpZiAoZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcgPT0gMCkgeworCQkJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKHVkZXYsIGludGYsIHRydWUpOworCQkJdXNiX2VuYWJsZV9pbnRlcmZhY2UodWRldiwgaW50ZiwgdHJ1ZSk7CisJCQlyZXQgPSAwOworCQl9IGVsc2UgeworCQkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgZGVzYy0+YkludGVyZmFjZU51bWJlciwKKwkJCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQl9CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVzdG9yZSBpbnRlcmZhY2UgJWQgIgogCQkJCSJhbHRzZXR0aW5nICVkIChlcnJvcj0lZClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IDMxZmIyMDQuLjMwYTA2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC01OSw3ICs1OSw3IEBACiAJCXJldHZhbCA9IChjdHguc3RhdHVzID09IC1FTk9FTlQgPyAtRVRJTUVET1VUIDogY3R4LnN0YXR1cyk7CiAKIAkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKLQkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0lZC8lZFxuIiwKKwkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0ldS8ldVxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sCiAJCQl1c2JfZW5kcG9pbnRfbnVtKCZ1cmItPmVwLT5kZXNjKSwKIAkJCXVzYl91cmJfZGlyX2luKHVyYikgPyAiaW4iIDogIm91dCIsCkBAIC02NTMsNyArNjUzLDcgQEAKIAkJaWYgKHJlc3VsdCA8PSAwICYmIHJlc3VsdCAhPSAtRVRJTUVET1VUKQogCQkJY29udGludWU7CiAJCWlmIChyZXN1bHQgPiAxICYmICgodTggKilidWYpWzFdICE9IHR5cGUpIHsKLQkJCXJlc3VsdCA9IC1FUFJPVE87CisJCQlyZXN1bHQgPSAtRU5PREFUQTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWJyZWFrOwpAQCAtNjk2LDggKzY5NiwxMyBAQAogCQkJVVNCX1JFUV9HRVRfREVTQ1JJUFRPUiwgVVNCX0RJUl9JTiwKIAkJCShVU0JfRFRfU1RSSU5HIDw8IDgpICsgaW5kZXgsIGxhbmdpZCwgYnVmLCBzaXplLAogCQkJVVNCX0NUUkxfR0VUX1RJTUVPVVQpOwotCQlpZiAoIShyZXN1bHQgPT0gMCB8fCByZXN1bHQgPT0gLUVQSVBFKSkKLQkJCWJyZWFrOworCQlpZiAocmVzdWx0ID09IDAgfHwgcmVzdWx0ID09IC1FUElQRSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVzdWx0ID4gMSAmJiAoKHU4ICopIGJ1ZilbMV0gIT0gVVNCX0RUX1NUUklORykgeworCQkJcmVzdWx0ID0gLUVOT0RBVEE7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc5OSwxOCArODA0LDE2IEBACiAJCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCQkic3RyaW5nIGRlc2NyaXB0b3IgMCByZWFkIGVycm9yOiAlZFxuIiwKIAkJCQllcnIpOwotCQkJZ290byBlcnJvdXQ7CiAJCX0gZWxzZSBpZiAoZXJyIDwgNCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJzdHJpbmcgZGVzY3JpcHRvciAwIHRvbyBzaG9ydFxuIik7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvdXQ7CiAJCX0gZWxzZSB7Ci0JCQlkZXYtPmhhdmVfbGFuZ2lkID0gMTsKIAkJCWRldi0+c3RyaW5nX2xhbmdpZCA9IHRidWZbMl0gfCAodGJ1ZlszXSA8PCA4KTsKIAkJCS8qIGFsd2F5cyB1c2UgdGhlIGZpcnN0IGxhbmdpZCBsaXN0ZWQgKi8KIAkJCWRldl9kYmcoJmRldi0+ZGV2LCAiZGVmYXVsdCBsYW5ndWFnZSAweCUwNHhcbiIsCiAJCQkJZGV2LT5zdHJpbmdfbGFuZ2lkKTsKIAkJfQorCisJCWRldi0+aGF2ZV9sYW5naWQgPSAxOwogCX0KIAogCWVyciA9IHVzYl9zdHJpbmdfc3ViKGRldiwgZGV2LT5zdHJpbmdfbGFuZ2lkLCBpbmRleCwgdGJ1Zik7CkBAIC0xNzE0LDcgKzE3MTcsOCBAQAogCX0KIAlrZnJlZShuZXdfaW50ZXJmYWNlcyk7CiAKLQlpZiAoY3AtPnN0cmluZyA9PSBOVUxMKQorCWlmIChjcC0+c3RyaW5nID09IE5VTEwgJiYKKwkJCSEoZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUykpCiAJCWNwLT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKGRldiwgY3AtPmRlc2MuaUNvbmZpZ3VyYXRpb24pOwogCiAJLyogTm93IHRoYXQgYWxsIHRoZSBpbnRlcmZhY2VzIGFyZSBzZXQgdXAsIHJlZ2lzdGVyIHRoZW0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IGMwNzBiMzQuLmFiOTM5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtNTQsNiArNTQsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNjM4LCAweDBhMTMpLCAuZHJpdmVyX2luZm8gPQogCSAgVVNCX1FVSVJLX1NUUklOR19GRVRDSF8yNTUgfSwKIAorCS8qIFNhaXRlayBDeWJvcmcgR29sZCBKb3lzdGljayAqLworCXsgVVNCX0RFVklDRSgweDA2YTMsIDB4MDAwNiksIC5kcml2ZXJfaW5mbyA9CisJCQlVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUyB9LAorCiAJLyogTS1TeXN0ZW1zIEZsYXNoIERpc2sgUGlvbmVlcnMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOGVjLCAweDEwMDApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwppbmRleCA0Y2MyNDU2Li5jNjY3ODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgogI2luY2x1ZGUgInVzYi5oIgogCiAvKiBBY3RpdmUgY29uZmlndXJhdGlvbiBmaWVsZHMgKi8KQEAgLTgxMyw3ICs4MTQsOCBAQAogCWlmIChpbnRmLT5zeXNmc19maWxlc19jcmVhdGVkIHx8IGludGYtPnVucmVnaXN0ZXJpbmcpCiAJCXJldHVybiAwOwogCi0JaWYgKGFsdC0+c3RyaW5nID09IE5VTEwpCisJaWYgKGFsdC0+c3RyaW5nID09IE5VTEwgJiYKKwkJCSEodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MpKQogCQlhbHQtPnN0cmluZyA9IHVzYl9jYWNoZV9zdHJpbmcodWRldiwgYWx0LT5kZXNjLmlJbnRlcmZhY2UpOwogCWlmIChhbHQtPnN0cmluZykKIAkJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnRlcmZhY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91cmIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKaW5kZXggNThiYzVlMy4uMzM3NjA1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91cmIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAlpZiAoIXVyYiB8fCB1cmItPmhjcHJpdiB8fCAhdXJiLT5jb21wbGV0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2ID0gdXJiLT5kZXY7Ci0JaWYgKCghZGV2KSB8fCAoZGV2LT5zdGF0ZSA8IFVTQl9TVEFURV9ERUZBVUxUKSkKKwlpZiAoKCFkZXYpIHx8IChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogRm9yIG5vdywgZ2V0IHRoZSBlbmRwb2ludCBmcm9tIHRoZSBwaXBlLiAgRXZlbnR1YWxseSBkcml2ZXJzCkBAIC0zNzAsNyArMzcwLDcgQEAKIAl9CiAKIAkvKiB0aGUgSS9PIGJ1ZmZlciBtdXN0IGJlIG1hcHBlZC91bm1hcHBlZCwgZXhjZXB0IHdoZW4gbGVuZ3RoPTAgKi8KLQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgMCkKKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gSU5UX01BWCkKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDMyMTlkMTMuLjc3MGIzZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0xOTEsNiArMTkxLDcgQEAKIAlib29sZWFuICJPTUFQIFVTQiBEZXZpY2UgQ29udHJvbGxlciIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUAogCXNlbGVjdCBJU1AxMzAxX09NQVAgaWYgTUFDSF9PTUFQX0gyIHx8IE1BQ0hfT01BUF9IMyB8fCBNQUNIX09NQVBfSDRfT1RHCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMgaWYgQVJDSF9PTUFQCiAJaGVscAogCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAogCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKQEAgLTI1Myw2ICsyNTQsNyBAQAogY29uZmlnIFVTQl9HQURHRVRfUFhBMjdYCiAJYm9vbGVhbiAiUFhBIDI3eCIKIAlkZXBlbmRzIG9uIEFSQ0hfUFhBICYmIFBYQTI3eAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI3eCBzZXJpZXMgWFNjYWxlIEFSTSB2NVRFIHByb2Nlc3NvcnMgaW5jbHVkZQogCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggYWJmODE5Mi4uODI2ZjNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAkJZG1hX2Rlc2MtPnN0YXR1cyA9IEFNRF9BRERCSVRTKGRtYV9kZXNjLT5zdGF0dXMsCiAJCQkJCQlVRENfRE1BX1NUUF9TVFNfQlNfSE9TVF9CVVNZLAogCQkJCQkJVURDX0RNQV9TVFBfU1RTX0JTKTsKLQkJZG1hX2Rlc2MtPmJ1ZnB0ciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRE1BX0RPTlRfVVNFKTsKKwkJZG1hX2Rlc2MtPmJ1ZnB0ciA9IGNwdV90b19sZTMyKERNQV9ET05UX1VTRSk7CiAJCXJlcS0+dGRfZGF0YSA9IGRtYV9kZXNjOwogCQlyZXEtPnRkX2RhdGFfbGFzdCA9IE5VTEw7CiAJCXJlcS0+Y2hhaW5fbGVuID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggNjViMDNlMy4uYzIyZmFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9IDAsCiAJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCi0JLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpLAogCS8qIEZJWE1FOiBJIGhhdmUgbm8gaWRlYSB3aGF0IHRvIHB1dCBoZXJlICovCiAJLmJJbnRlcnZhbCA9IDEsCiB9OwpAQCAtMTIwNywyMSArMTIwNywyMSBAQAogLyogQXZvaWQgb3Zlcmx5IGxvbmcgZXhwcmVzc2lvbnMgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2Rldl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNycSkKIHsKLQlpZiAoY3JxLT53VmFsdWUgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApKQorCWlmIChjcnEtPndWYWx1ZSA9PSBjcHVfdG9fbGUxNihVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2Rldl90ZXN0X21vZGUoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9ERVZJQ0VfVEVTVF9NT0RFKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9URVNUX01PREUpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2VwX2hhbHQoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9FTkRQT0lOVF9IQUxUKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0VORFBPSU5UX0hBTFQpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjM5LDcgKzEyMzksNyBAQAogCQkJc3RhdHVzID0gY3B1X3RvX2xlMTYodWRjLT5kZXZzdGF0dXMpOwogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlCiAJCQkJPT0gKFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFKSkgewotCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwkJCXN0YXR1cyA9IGNwdV90b19sZTE2KDApOwogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlCiAJCQkJPT0gKFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfRU5EUE9JTlQpKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwpAQCAtMTI1MCwxMiArMTI1MCwxMiBAQAogCiAJCQlzdGF0dXMgPSAwOwogCQkJaWYgKGlzX3N0YWxsZWQodWRjLCB0YXJnZXQpKQotCQkJCXN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpOworCQkJCXN0YXR1cyB8PSBjcHVfdG9fbGUxNigxKTsKIAkJfSBlbHNlCiAJCQlnb3RvIGRlbGVnYXRlOwogCiAJCS8qIFdyaXRlIGRpcmVjdGx5IHRvIHRoZSBGSUZPLiBObyBxdWV1ZWluZyBpcyBkb25lLiAqLwotCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoc2l6ZW9mKHN0YXR1cykpKQorCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KHNpemVvZihzdGF0dXMpKSkKIAkJCWdvdG8gc3RhbGw7CiAJCWVwLT5zdGF0ZSA9IERBVEFfU1RBR0VfSU47CiAJCV9fcmF3X3dyaXRldyhzdGF0dXMsIGVwLT5maWZvKTsKQEAgLTEyNzQsNyArMTI3NCw3IEBACiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwogCi0JCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkKKwkJCWlmIChjcnEtPndMZW5ndGggIT0gY3B1X3RvX2xlMTYoMCkKIAkJCQkJfHwgIWZlYXR1cmVfaXNfZXBfaGFsdChjcnEpKQogCQkJCWdvdG8gc3RhbGw7CiAJCQl0YXJnZXQgPSBnZXRfZXBfYnlfYWRkcih1ZGMsIGxlMTZfdG9fY3B1KGNycS0+d0luZGV4KSk7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQAogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgewogCQkJc3RydWN0IHVzYmFfZXAgKnRhcmdldDsKIAotCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApCisJCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KDApCiAJCQkJCXx8ICFmZWF0dXJlX2lzX2VwX2hhbHQoY3JxKSkKIAkJCQlnb3RvIHN0YWxsOwogCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCQkJICovCiAJCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX0lOOwogCQl9IGVsc2UgewotCQkJaWYgKGNycS5jcnEud0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApKQorCQkJaWYgKGNycS5jcnEud0xlbmd0aCAhPSBjcHVfdG9fbGUxNigwKSkKIAkJCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX09VVDsKIAkJCWVsc2UKIAkJCQllcC0+c3RhdGUgPSBTVEFUVVNfU1RBR0VfSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwppbmRleCA1NDk1YjE3Li45MjgxMzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLApAQCAtNzQsOCArNzQsOCBAQAogCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLwogCiAJLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLiAgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDRENfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENEQ19QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KENEQ19QUk9EVUNUX05VTSksCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCiAJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWNkY19jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKKwkJCWNwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKaW5kZXggYmViZjkxMS4uMjJjNjU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjYyNiw3ICsyNjI1LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CiAJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKIAotCXN0cmNweSh1ZGMtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZ1ZGMtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAl1ZGMtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOwogCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgICA9IGRldjsKIAl1ZGMtPmdhZGdldC5kZXYucmVsZWFzZSAgPSB1ZGNfcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCA1ZDExYzI5Li41OWU4NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC0xNDksMTYgKzE0OSwxNyBAQAogaW50IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZ1bmN0aW9uKQogewogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGZ1bmN0aW9uLT5jb25maWctPmNkZXY7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOwogCWludAkJCQlzdGF0dXMgPSAwOwogCi0Jc3Bpbl9sb2NrKCZjZGV2LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKIAkJc3RhdHVzID0gdXNiX2dhZGdldF9kaXNjb25uZWN0KGNkZXYtPmdhZGdldCk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQljZGV2LT5kZWFjdGl2YXRpb25zKys7CiAKLQlzcGluX3VubG9jaygmY2Rldi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMTMsNyArMTAxNCw3IEBACiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJKmY7CiAKLQkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGFuZCBkZXZpY2UgbGV2ZWwKKwkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGxldmVsCiAJICogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzPwogCSAqLwogCURCRyhjZGV2LCAic3VzcGVuZFxuIik7CkBAIC0xMDIzLDYgKzEwMjQsOCBAQAogCQkJCWYtPnN1c3BlbmQoZik7CiAJCX0KIAl9CisJaWYgKGNvbXBvc2l0ZS0+c3VzcGVuZCkKKwkJY29tcG9zaXRlLT5zdXNwZW5kKGNkZXYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTAzMSwxMCArMTAzNCwxMiBAQAogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwogCXN0cnVjdCB1c2JfZnVuY3Rpb24JCSpmOwogCi0JLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBhbmQgZGV2aWNlIGxldmVsCisJLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBsZXZlbAogCSAqIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcz8KIAkgKi8KIAlEQkcoY2RldiwgInJlc3VtZVxuIik7CisJaWYgKGNvbXBvc2l0ZS0+cmVzdW1lKQorCQljb21wb3NpdGUtPnJlc3VtZShjZGV2KTsKIAlpZiAoY2Rldi0+Y29uZmlnKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmNkZXYtPmNvbmZpZy0+ZnVuY3Rpb25zLCBsaXN0KSB7CiAJCQlpZiAoZi0+cmVzdW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDkwNjQ2OTYuLmE1NmIyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTE0MzcsNyArMTQzNyw3IEBACiAJCQkJCX0KIAkJCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDEpCiAJCQkJCQlidWYgWzFdID0gMDsKLQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbWluICgyLAorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW5fdCh1MzIsIDIsCiAJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCQkJCQl2YWx1ZSA9IDA7CiAJCQkJCXN0YXR1cyA9IDA7CkBAIC0xNjI2LDcgKzE2MjYsNyBAQAogCQlodWJfZGVzY3JpcHRvciAoKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRIdWJTdGF0dXM6Ci0JCSooX19sZTMyICopIGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCWJyZWFrOwogCWNhc2UgR2V0UG9ydFN0YXR1czoKIAkJaWYgKHdJbmRleCAhPSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKaW5kZXggYTM2YjExNy4uY2QwOTE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCXJldHVybiAwOwogCiAJCS8qIEJPVEg6ICAiaGlnaCBiYW5kd2lkdGgiIHdvcmtzIG9ubHkgYXQgaGlnaCBzcGVlZCAqLwotCQlpZiAoKGRlc2MtPndNYXhQYWNrZXRTaXplICYgX19jb25zdGFudF9jcHVfdG9fbGUxNigzPDwxMSkpKSB7CisJCWlmICgoZGVzYy0+d01heFBhY2tldFNpemUgJiBjcHVfdG9fbGUxNigzPDwxMSkpKSB7CiAJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQogCQkJCXJldHVybiAwOwogCQkJLyogY29uZmlndXJlIHlvdXIgaGFyZHdhcmUgd2l0aCBlbm91Z2ggYnVmZmVyaW5nISEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggMzcyNTJkMC4uZDAwNmRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2ICgweDAyMDApLAogCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfQ09NTSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCSAqIHdlIHN1cHBvcnQuICAoQXMgZG9lcyBiTnVtQ29uZmlndXJhdGlvbnMuKSAgVGhlc2UgdmFsdWVzIGNhbgogCSAqIGFsc28gYmUgb3ZlcnJpZGRlbiBieSBtb2R1bGUgcGFyYW1ldGVycy4KIAkgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoQ0RDX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoQ0RDX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2IChDRENfUFJPRFVDVF9OVU0pLAogCS8qIC5iY2REZXZpY2UgPSBmKGhhcmR3YXJlKSAqLwogCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLwogCS8qIC5pUHJvZHVjdCA9IERZTkFNSUMgKi8KQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJCWdhZGdldC0+bmFtZSwKIAkJCQlldGhfY29uZmlnX2RyaXZlci5sYWJlbCk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CisJCQljcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCmluZGV4IGMxZDM0ZGYuLjc5NTM5NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YoYWNtX2hlYWRlcl9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IKQEAgLTE1OSw3ICsxNTksNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IEdTX0xPRzJfTk9USUZZX0lOVEVSVkFMLAogfTsKIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKIAkuYkludGVydmFsID0JCUdTX0xPRzJfTk9USUZZX0lOVEVSVkFMKzQsCiB9OwogCkBAIC0yMDUsMTQgKzIwNSwxNCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBhY21faHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICphY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwppbmRleCA0YWU1Nzk5Li5lY2Y1YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBlY21fdW5pb25fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTQ4LDkgKzE0OCw5IEBACiAKIAkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCiAJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLwotCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KLQkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKLQkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCisJLndOdW1iZXJNQ0ZpbHRlcnMgPQljcHVfdG9fbGUxNigwKSwKIAkuYk51bWJlclBvd2VyRmlsdGVycyA9CTAsCiB9OwogCkBAIC0xOTIsNyArMTkyLDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMsCiB9OwogCkBAIC0yMzYsNyArMjM2LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKIH07CiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9vdXRfZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjU0LDcgKzI1NCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKaW5kZXggOGFmZmUxZC4uZWI2ZGRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19sb29wX3NpbmtfZGVzYyA9IHsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfbG9vcGJhY2tfZGVzY3NbXSA9IHsKQEAgLTM1OSw3ICszNTksNyBAQAogICogbG9vcGJhY2tfYWRkIC0gYWRkIGEgbG9vcGJhY2sgdGVzdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZGV2aWNlCiAgKiBAY2RldjogdGhlIGRldmljZSB0byBzdXBwb3J0IHRoZSBsb29wYmFjayBjb25maWd1cmF0aW9uCiAgKi8KLWludCBfX2luaXQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK2ludCBfX2luaXQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKQogewogCWludCBpZDsKIApAQCAtMzcyLDYgKzM3MiwxMCBAQAogCWxvb3BiYWNrX2ludGYuaUludGVyZmFjZSA9IGlkOwogCWxvb3BiYWNrX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IGlkOwogCisJLyogc3VwcG9ydCBhdXRvcmVzdW1lIGZvciByZW1vdGUgd2FrZXVwIHRlc3RpbmcgKi8KKwlpZiAoYXV0b3Jlc3VtZSkKKwkJc291cmNlc2lua19kcml2ZXIuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwogCS8qIHN1cHBvcnQgT1RHIHN5c3RlbXMgKi8KIAlpZiAoZ2FkZ2V0X2lzX290ZyhjZGV2LT5nYWRnZXQpKSB7CiAJCWxvb3BiYWNrX2RyaXZlci5kZXNjcmlwdG9ycyA9IG90Z19kZXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCmluZGV4IDgwYzJlN2UuLjQ2ZDYyNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2NkY19oZWFkZXJfZGVzYyksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQwkJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMjApLAorCS5iY2RDREMJCQk9IGNwdV90b19sZTE2KDB4MDEyMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBvYmV4X2NkY191bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19PQkVYX1RZUEUsCi0JLmJjZFZlcnNpb24JCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAorCS5iY2RWZXJzaW9uCQk9IGNwdV90b19sZTE2KDB4MDEwMCksCiB9OwogCiAvKiBIaWdoLVNwZWVkIFN1cHBvcnQgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MJPSBVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUJCT0gY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Igb2JleF9oc19lcF9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUJCT0gY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CkBAIC0zNjYsOSArMzY2LDkgQEAKIAkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhoc19mdW5jdGlvbik7CiAKIAkJb2JleC0+aHMub2JleF9pbiA9IHVzYl9maW5kX2VuZHBvaW50KGhzX2Z1bmN0aW9uLAotCQkJCWYtPmRlc2NyaXB0b3JzLCAmb2JleF9oc19lcF9pbl9kZXNjKTsKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJm9iZXhfaHNfZXBfaW5fZGVzYyk7CiAJCW9iZXgtPmhzLm9iZXhfb3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZnVuY3Rpb24sCi0JCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2hzX2VwX291dF9kZXNjKTsKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJm9iZXhfaHNfZXBfb3V0X2Rlc2MpOwogCX0KIAogCS8qIEF2b2lkIGxldHRpbmcgdGhpcyBnYWRnZXQgZW51bWVyYXRlIHVudGlsIHRoZSB1c2Vyc3BhY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKaW5kZXggYzA5MTZjNy4uYzFhYmViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgcG5faGVhZGVyX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjCkBAIC04Nyw3ICs4Nyw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIHBuX3Bob25ldF9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX1BIT05FVF9UWVBFLAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDE1MDUpLCAvKiA/Pz8gKi8KKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MTUwNSksIC8qID8/PyAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfcG5fZnVuY3Rpb25bXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCmluZGV4IDNhOGJiNTMuLjMyNzlhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgY2FsbF9tZ210X2Rlc2NyaXB0b3IgX19pbml0ZGF0YSA9IHsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMsCiB9OwogCkBAIC0yMzAsNyArMjMwLDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQyArIDQsCiB9Owogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yMzksNyArMjM5LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmV0aF9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CkBAIC00MzcsNyArNDM3LDcgQEAKIAkJREJHKGNkZXYsICJybmRpcyByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAogCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKIAkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKLQkJcmVxLT56ZXJvID0gMDsKKwkJcmVxLT56ZXJvID0gKHZhbHVlIDwgd19sZW5ndGgpOwogCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwogCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShjZGV2LT5nYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHZhbHVlIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKaW5kZXggZmU1Njc0ZGIuLmRiMGFhOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCkBAIC04OSwxNCArODksMTQgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3Nlcl9oc19vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzZXJfaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCmluZGV4IGRjODRkMjYuLmJmZmU5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKQEAgLTU5LDcgKzU5LDYgQEAKIAogCXN0cnVjdCB1c2JfZXAJCSppbl9lcDsKIAlzdHJ1Y3QgdXNiX2VwCQkqb3V0X2VwOwotCXN0cnVjdCB0aW1lcl9saXN0CXJlc3VtZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZfc291cmNlc2luayAqZnVuY190b19zcyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQpAQCAtNjcsMTAgKzY2LDYgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX3NvdXJjZXNpbmssIGZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGF1dG9yZXN1bWU7Ci1tb2R1bGVfcGFyYW0oYXV0b3Jlc3VtZSwgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1dG9yZXN1bWUsICJ6ZXJvLCBvciBzZWNvbmRzIGJlZm9yZSByZW1vdGUgd2FrZXVwIik7Ci0KIHN0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuOwogbW9kdWxlX3BhcmFtKHBhdHRlcm4sIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwYXR0ZXJuLCAiMCA9IGFsbCB6ZXJvZXMsIDEgPSBtb2Q2MyAiKTsKQEAgLTExOCw3ICsxMTMsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3NpbmtfZGVzYyA9IHsKQEAgLTEyNiw3ICsxMjEsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfc291cmNlX3NpbmtfZGVzY3NbXSA9IHsKQEAgLTE1NSwyMSArMTUwLDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgc291cmNlc2lua19hdXRvcmVzdW1lKHVuc2lnbmVkIGxvbmcgX2MpCi17Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gKHZvaWQgKilfYzsKLQlzdHJ1Y3QgdXNiX2dhZGdldAkqZyA9IGNkZXYtPmdhZGdldDsKLQotCS8qIE5vcm1hbGx5IHRoZSBob3N0IHdvdWxkIGJlIHdva2VuIHVwIGZvciBzb21ldGhpbmcKLQkgKiBtb3JlIHNpZ25pZmljYW50IHRoYW4ganVzdCBhIHRpbWVyIGZpcmluZzsgbGlrZWx5Ci0JICogYmVjYXVzZSBvZiBzb21lIGRpcmVjdCB1c2VyIHJlcXVlc3QuCi0JICovCi0JaWYgKGctPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7Ci0JCWludCBzdGF0dXMgPSB1c2JfZ2FkZ2V0X3dha2V1cChnKTsKLQkJREJHKGNkZXYsICIlcyAtLT4gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwotCX0KLX0KLQogc3RhdGljIGludCBfX2luaXQKIHNvdXJjZXNpbmtfYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCiB7CkBAIC0xOTgsOSArMTc4LDYgQEAKIAkJZ290byBhdXRvY29uZl9mYWlsOwogCXNzLT5vdXRfZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KIAotCXNldHVwX3RpbWVyKCZzcy0+cmVzdW1lLCBzb3VyY2VzaW5rX2F1dG9yZXN1bWUsCi0JCQkodW5zaWduZWQgbG9uZykgYy0+Y2Rldik7Ci0KIAkvKiBzdXBwb3J0IGhpZ2ggc3BlZWQgaGFyZHdhcmUgKi8KIAlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7CiAJCWhzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQpAQCAtMzU5LDcgKzMzNiw2IEBACiAKIAljZGV2ID0gc3MtPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldjsKIAlkaXNhYmxlX2VuZHBvaW50cyhjZGV2LCBzcy0+aW5fZXAsIHNzLT5vdXRfZXApOwotCWRlbF90aW1lcigmc3MtPnJlc3VtZSk7CiAJVkRCRyhjZGV2LCAiJXMgZGlzYWJsZWRcbiIsIHNzLT5mdW5jdGlvbi5uYW1lKTsKIH0KIApAQCAtNDI2LDMwICs0MDIsNiBAQAogCWRpc2FibGVfc291cmNlX3Npbmsoc3MpOwogfQogCi1zdGF0aWMgdm9pZCBzb3VyY2VzaW5rX3N1c3BlbmQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKLXsKLQlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzcyA9IGZ1bmNfdG9fc3MoZik7Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OwotCi0JaWYgKGNkZXYtPmdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCi0JCXJldHVybjsKLQotCWlmIChhdXRvcmVzdW1lKSB7Ci0JCW1vZF90aW1lcigmc3MtPnJlc3VtZSwgamlmZmllcyArIChIWiAqIGF1dG9yZXN1bWUpKTsKLQkJREJHKGNkZXYsICJzdXNwZW5kLCB3YWtldXAgaW4gJWQgc2Vjb25kc1xuIiwgYXV0b3Jlc3VtZSk7Ci0JfSBlbHNlCi0JCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHZvaWQgc291cmNlc2lua19yZXN1bWUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKLXsKLQlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzcyA9IGZ1bmNfdG9fc3MoZik7Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OwotCi0JREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCWRlbF90aW1lcigmc3MtPnJlc3VtZSk7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IHNvdXJjZXNpbmtfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQpAQCAtNDY3LDggKzQxOSw2IEBACiAJc3MtPmZ1bmN0aW9uLnVuYmluZCA9IHNvdXJjZXNpbmtfdW5iaW5kOwogCXNzLT5mdW5jdGlvbi5zZXRfYWx0ID0gc291cmNlc2lua19zZXRfYWx0OwogCXNzLT5mdW5jdGlvbi5kaXNhYmxlID0gc291cmNlc2lua19kaXNhYmxlOwotCXNzLT5mdW5jdGlvbi5zdXNwZW5kID0gc291cmNlc2lua19zdXNwZW5kOwotCXNzLT5mdW5jdGlvbi5yZXN1bWUgPSBzb3VyY2VzaW5rX3Jlc3VtZTsKIAogCXN0YXR1cyA9IHVzYl9hZGRfZnVuY3Rpb24oYywgJnNzLT5mdW5jdGlvbik7CiAJaWYgKHN0YXR1cykKQEAgLTU1OSw3ICs1MDksNyBAQAogICogc291cmNlc2lua19hZGQgLSBhZGQgYSBzb3VyY2Uvc2luayB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gdG8gYSBkZXZpY2UKICAqIEBjZGV2OiB0aGUgZGV2aWNlIHRvIHN1cHBvcnQgdGhlIGNvbmZpZ3VyYXRpb24KICAqLwotaW50IF9faW5pdCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCitpbnQgX19pbml0IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKQogewogCWludCBpZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwppbmRleCBmZTE4MzI4Li5hOWM5OGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfbWRsbV9kZXNjIG1kbG1fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTE2LDcgKzExNiw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfTURMTV9UWVBFLAogCi0JLmJjZFZlcnNpb24gPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAorCS5iY2RWZXJzaW9uID0JCWNwdV90b19sZTE2KDB4MDEwMCksCiAJLmJHVUlEID0gewogCQkweDVkLCAweDM0LCAweGNmLCAweDY2LCAweDExLCAweDE4LCAweDExLCAweGQ2LAogCQkweGEyLCAweDFhLCAweDAwLCAweDAxLCAweDAyLCAweGNhLCAweDlhLCAweDdmLApAQCAtMTQ0LDkgKzE0NCw5IEBACiAKIAkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCiAJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLwotCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KLQkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKLQkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCisJLndOdW1iZXJNQ0ZpbHRlcnMgPQljcHVfdG9fbGUxNigwKSwKIAkuYk51bWJlclBvd2VyRmlsdGVycyA9CTAsCiB9OwogCkBAIC0xODYsNyArMTg2LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zdWJzZXRfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZXRoX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCBiMTBmYTMxLi41YzAzMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC04NDcsMTMgKzg0NywxMyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAogCiAJLyogVGhlIG5leHQgdGhyZWUgdmFsdWVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9JRCksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX0lEKSwKLQkuYmNkRGV2aWNlID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhmZmZmKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9JRCksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9JRCksCisJLmJjZERldmljZSA9CQljcHVfdG9fbGUxNigweGZmZmYpLAogCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKQEAgLTkyNiw3ICs5MjYsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoMiksCiAJLmJJbnRlcnZhbCA9CQkzMiwJLy8gZnJhbWVzIC0+IDMyIG1zCiB9OwogCkBAIC05NTQsNyArOTU0LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2X3F1YWxpZmllciwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLApAQCAtOTY3LDcgKzk2Nyw3IEBACiAKIAkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCiAJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19idWxrX291dF9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogCS5iSW50ZXJ2YWwgPQkJMSwJLy8gTkFLIGV2ZXJ5IDEgdWZyYW1lCiB9OwogCkBAIC05ODgsNyArOTg4LDcgQEAKIAogCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfaW50cl9pbl9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNigyKSwKIAkuYkludGVydmFsID0JCTksCS8vIDIqKig5LTEpID0gMjU2IHVmcmFtZXMgLT4gMzIgbXMKIH07CiAKQEAgLTE3MTEsNyArMTcxMSw5IEBACiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX1BST1RFQ1RFRDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXNwaW5fbG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOwogCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyAmPSB+T19TWU5DOwkvLyBEZWZhdWx0IGlzIG5vdCB0byB3YWl0CisJc3Bpbl91bmxvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAogCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKIAkgKiBub3QgdG9vIGJpZyAqLwpAQCAtMTcyOCw4ICsxNzMwLDExIEBACiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChmc2ctPmNtbmRbMV0gJiAweDA4KQkvLyBGVUEKKwkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpIHsJLy8gRlVBCisJCQlzcGluX2xvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAkJCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyB8PSBPX1NZTkM7CisJCQlzcGluX3VubG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOworCQl9CiAJfQogCWlmIChsYmEgPj0gY3VybHVuLT5udW1fc2VjdG9ycykgewogCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwpAQCAtMjY0Niw3ICsyNjUxLDcgQEAKIAkJc3RydWN0IGJ1bGtfY3Nfd3JhcAkqY3N3ID0gYmgtPmJ1ZjsKIAogCQkvKiBTdG9yZSBhbmQgc2VuZCB0aGUgQnVsay1vbmx5IENTVyAqLwotCQljc3ctPlNpZ25hdHVyZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVVNCX0JVTEtfQ1NfU0lHKTsKKwkJY3N3LT5TaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU0JfQlVMS19DU19TSUcpOwogCQljc3ctPlRhZyA9IGZzZy0+dGFnOwogCQljc3ctPlJlc2lkdWUgPSBjcHVfdG9fbGUzMihmc2ctPnJlc2lkdWUpOwogCQljc3ctPlN0YXR1cyA9IHN0YXR1czsKQEAgLTMwODksNyArMzA5NCw3IEBACiAKIAkvKiBJcyB0aGUgQ0JXIHZhbGlkPyAqLwogCWlmIChyZXEtPmFjdHVhbCAhPSBVU0JfQlVMS19DQl9XUkFQX0xFTiB8fAotCQkJY2J3LT5TaWduYXR1cmUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCWNidy0+U2lnbmF0dXJlICE9IGNwdV90b19sZTMyKAogCQkJCVVTQl9CVUxLX0NCX1NJRykpIHsKIAkJREJHKGZzZywgImludmFsaWQgQ0JXOiBsZW4gJXUgc2lnIDB4JXhcbiIsCiAJCQkJcmVxLT5hY3R1YWwsCkBAIC0zODc5LDcgKzM4ODQsMTEgQEAKIAltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDX1NDU0k7CiAJbW9kX2RhdGEucHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIjsKIAotCWlmIChnYWRnZXRfaXNfc2goZnNnLT5nYWRnZXQpKQorCS8qIFNvbWUgcGVyaXBoZXJhbCBjb250cm9sbGVycyBhcmUga25vd24gbm90IHRvIGJlIGFibGUgdG8KKwkgKiBoYWx0IGJ1bGsgZW5kcG9pbnRzIGNvcnJlY3RseS4gIElmIG9uZSBvZiB0aGVtIGlzIHByZXNlbnQsCisJICogZGlzYWJsZSBzdGFsbHMuCisJICovCisJaWYgKGdhZGdldF9pc19zaChmc2ctPmdhZGdldCkgfHwgZ2FkZ2V0X2lzX2F0OTEoZnNnLT5nYWRnZXQpKQogCQltb2RfZGF0YS5jYW5fc3RhbGwgPSAwOwogCiAJaWYgKG1vZF9kYXRhLnJlbGVhc2UgPT0gMHhmZmZmKSB7CS8vIFBhcmFtZXRlciB3YXNuJ3Qgc2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKaW5kZXggZjNjNjcwMy4uOWQ3Yjk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwpAQCAtNDA0LDcgKzQwNCwxMCBAQAogCX0KIAlpZiAoemx0KQogCQl0bXAgfD0gRVBfUVVFVUVfSEVBRF9aTFRfU0VMOworCiAJcF9RSC0+bWF4X3BrdF9sZW5ndGggPSBjcHVfdG9fbGUzMih0bXApOworCXBfUUgtPm5leHRfZHRkX3B0ciA9IDE7CisJcF9RSC0+c2l6ZV9pb2NfaW50X3N0cyA9IDA7CiAKIAlyZXR1cm47CiB9CkBAIC0xNzk5LDcgKzE4MDIsOCBAQAogCiBvdXQ6CiAJaWYgKHJldHZhbCkKLQkJcHJpbnRrKCJnYWRnZXQgZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsCisJCSAgICAgICByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTE4NDQsNyArMTg0OCw4IEBACiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKIAotCXByaW50aygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKKwkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMjQ1Miw3ICsyNDU3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKLQlwcmludGsoIiVzIHVucmVnaXN0ZXJlZFxuIiwgZHJpdmVyX2Rlc2MpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIHVucmVnaXN0ZXJlZFxuIiwgZHJpdmVyX2Rlc2MpOwogfQogCiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmgKaW5kZXggZGQyZjE2YS4uZTg0YjNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaApAQCAtMTksNyArMTksNyBAQAogCQlzdHJ1Y3QgdXNiX2VwICppbiwgc3RydWN0IHVzYl9lcCAqb3V0KTsKIAogLyogY29uZmlndXJhdGlvbi1zcGVjaWZpYyBsaW5rdXAgKi8KLWludCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOwotaW50IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOworaW50IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKTsKK2ludCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpOwogCiAjZW5kaWYgLyogX19HX1pFUk9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwppbmRleCA2MGQzZjllLi5iOTMxMmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpAQCAtMTk5LDEwICsxOTksMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9ERVZJQ0VfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKQEAgLTI0MSw4ICsyNDEsOCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKLQkuYmNkQURDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpKSwKKwkuYmNkQURDID0JCWNwdV90b19sZTE2KDB4MDEwMCksCisJLndUb3RhbExlbmd0aCA9CQljcHVfdG9fbGUxNihVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSkpLAogCS5iSW5Db2xsZWN0aW9uID0JMSwKIAkuYmFJbnRlcmZhY2VOciA9IHsKIAkJWzBdID0JCUdNSURJX01TX0lOVEVSRkFDRSwKQEAgLTI2NSw4ICsyNjUsOCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9NU19IRUFERVJfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKLQkuYmNkTVNDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RUX01TX0hFQURFUl9TSVpFCisJLmJjZE1TQyA9CQljcHVfdG9fbGUxNigweDAxMDApLAorCS53VG90YWxMZW5ndGggPQkJY3B1X3RvX2xlMTYoVVNCX0RUX01TX0hFQURFUl9TSVpFCiAJCQkJKyAyKlVTQl9EVF9NSURJX0lOX1NJWkUKIAkJCQkrIDIqVVNCX0RUX01JRElfT1VUX1NJWkUoMSkpLAogfTsKQEAgLTEwOTksMTAgKzEwOTksOSBAQAogCQkuZGV2X2ZyZWUgPSBnbWlkaV9zbmRfZnJlZSwKIAl9OwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpIHsKLQkJRVJST1IoZGV2LCAic25kX2NhcmRfbmV3IGZhaWxlZFxuIik7Ci0JCWVyciA9IC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlFUlJPUihkZXYsICJzbmRfY2FyZF9jcmVhdGUgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAlkZXYtPmNhcmQgPSBjYXJkOwpAQCAtMTIyNyw3ICsxMjI2LDcgQEAKIAkJICovCiAJCXByX3dhcm5pbmcoIiVzOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCiAJCQlzaG9ydG5hbWUsIGdhZGdldC0+bmFtZSk7Ci0JCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg5OTk5KTsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHg5OTk5KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCA2MzQxOWM0Li5kZTAxMGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAKIAkJCQkvKiBhY3RpdmUgZW5kcG9pbnQgKi8KIAkJCQlpZiAodG1wID4gMyB8fCAoIWRldi0+ZXBbdG1wXS5kZXNjICYmIHRtcCAhPSAwKSkKIAkJCQkJZ290byBzdGFsbDsKLQkJCQlpZiAoY3RybC53SW5kZXggJiBfX2NvbnN0YW50X2NwdV90b19sZTE2KAorCQkJCWlmIChjdHJsLndJbmRleCAmIGNwdV90b19sZTE2KAogCQkJCQkJVVNCX0RJUl9JTikpIHsKIAkJCQkJaWYgKCFkZXYtPmVwW3RtcF0uaXNfaW4pCiAJCQkJCQlnb3RvIHN0YWxsOwpAQCAtMTQ4MCw3ICsxNDgwLDcgQEAKIAkJCQkJaWYgKGRldi0+ZXBbdG1wXS5pc19pbikKIAkJCQkJCWdvdG8gc3RhbGw7CiAJCQkJfQotCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KAorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigKIAkJCQkJCVVTQl9FTkRQT0lOVF9IQUxUKSkKIAkJCQkJZ290byBzdGFsbDsKIAkJCQlpZiAodG1wKQpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIAkJCQlyZXR1cm47CiAJCQljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CiAJCQkJLyogZGV2aWNlIHJlbW90ZSB3YWtldXA6IGFsd2F5cyBjbGVhciAqLwotCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpKQorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigxKSkKIAkJCQkJZ290byBzdGFsbDsKIAkJCQlWREJHKGRldiwgImNsZWFyIGRldiByZW1vdGUgd2FrZXVwXG4iKTsKIAkJCQlnb3RvIHN1Y2NlZWQ7CkBAIC0xNTE5LDcgKzE1MTksNyBAQAogCWRldi0+cmVxX2NvbmZpZyA9IChjdHJsLmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04KIAkJCQkmJiBjdHJsLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKTsKIAlpZiAodW5saWtlbHkoZGV2LT5yZXFfY29uZmlnKSkKLQkJZGV2LT5jb25maWd1cmVkID0gKGN0cmwud1ZhbHVlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkpOworCQlkZXYtPmNvbmZpZ3VyZWQgPSAoY3RybC53VmFsdWUgIT0gY3B1X3RvX2xlMTYoMCkpOwogCiAJLyogZGVsZWdhdGUgZXZlcnl0aGluZyB0byB0aGUgZ2FkZ2V0IGRyaXZlci4KIAkgKiBpdCBtYXkgcmVzcG9uZCBhZnRlciB0aGlzIGlycSBoYW5kbGVyIHJldHVybnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwppbmRleCA3N2M1ZDBhLi4xNjg2NThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJZHJpdmVyL3VzYi9nYWRnZXQvaW14X3VkYy5jCiAgKgotICoJQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgTGVlKGVlbWlrZUBnbWFpbC5jb20pCisgKglDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBMZWUgPGVlbWlrZUBnbWFpbC5jb20+CiAgKglDb3B5cmlnaHQgKEMpIDIwMDggRGFyaXVzIEF1Z3VsaXMgPGF1Z3VsaXMuZGFyaXVzQGdtYWlsLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KQEAgLTUxLDcgKzUyLDggQEAKIHZvaWQgaW14X3VkY19lbmFibGUoc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQogewogCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfRkVfRU5BIHwgQ1RSTF9BRkVfRU5BLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9GRV9FTkEgfCBDVFJMX0FGRV9FTkEsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwogfQogCkBAIC0xMjYsNyArMTI4LDggQEAKIAkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKIAkJCQlfX3Jhd193cml0ZWIoZXBfY29uZltqXSwKIAkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9EREFUKTsKLQkJCQlkbyB7fSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9EQURSKQorCQkJCWRvIHt9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlCisJCQkJCQkJCSsgVVNCX0RBRFIpCiAJCQkJCSYgREFEUl9CU1kpOwogCQkJfQogCQl9CkBAIC0xODMsNyArMTg2LDggQEAKIAkJdGVtcCA9IChFUF9ESVIoaW14X2VwKSA8PCA3KSB8IChtYXggPDwgNSkKIAkJCXwgKGlteF9lcC0+Ym1BdHRyaWJ1dGVzIDw8IDMpOwogCQlfX3Jhd193cml0ZWwodGVtcCwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKLQkJX19yYXdfd3JpdGVsKHRlbXAgfCBFUFNUQVRfRkxVU0gsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSk7CisJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgRVBTVEFUX0ZMVVNILAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKIAkJRF9JTkkoaW14X3VzYi0+ZGV2LCAiPCVzPiBlcCVkX3N0YXQgJTA4eFxuIiwgX19mdW5jX18sIGksCiAJCQlfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpKTsKIAl9CkBAIC0yNzgsMTUgKzI4MiwxOCBAQAogCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGlteF9lcC0+aW14X3VzYjsKIAlpbnQgdGVtcCwgaTsKIAotCURfRVJSKGlteF91c2ItPmRldiwgIjwlcz4gRm9yY2VkIHN0YWxsIG9uICVzXG4iLCBfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKKwlEX0VSUihpbXhfdXNiLT5kZXYsCisJCSI8JXM+IEZvcmNlZCBzdGFsbCBvbiAlc1xuIiwgX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CiAKIAlpbXhfZmx1c2goaW14X2VwKTsKIAogCS8qIFNwZWNpYWwgY2FyZSBmb3IgZXAwICovCi0JaWYgKEVQX05PKGlteF9lcCkpIHsKKwlpZiAoIUVQX05PKGlteF9lcCkpIHsKIAkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSIHwgQ1RSTF9DTURFUlJPUiwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJZG8geyB9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpICYgQ1RSTF9DTURPVkVSKTsKKwkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIgfCBDVFJMX0NNREVSUk9SLAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKKwkJZG8geyB9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpCisJCQkJCQkmIENUUkxfQ01ET1ZFUik7CiAJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCQlfX3Jhd193cml0ZWwodGVtcCAmIH5DVFJMX0NNREVSUk9SLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCX0KQEAgLTI5NiwxMiArMzAzLDEzIEBACiAJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkgKyspIHsKLQkJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOworCQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCQkJaWYgKCEodGVtcCAmIEVQU1RBVF9TVEFMTCkpCiAJIAkJCWJyZWFrOwogCSAJCXVkZWxheSgyMCk7CiAJIAl9Ci0JCWlmIChpID09IDUwKQorCQlpZiAoaSA9PSAxMDApCiAJCQlEX0VSUihpbXhfdXNiLT5kZXYsICI8JXM+IE5vbiBmaW5pc2hlZCBzdGFsbCBvbiAlc1xuIiwKIAkJCQlfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKIAl9CkBAIC0zMjUsNyArMzMzLDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAotc3RhdGljIHZvaWQgZXBfYWRkX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBlcF9hZGRfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQogewogCWlmICh1bmxpa2VseSghcmVxKSkKIAkJcmV0dXJuOwpAQCAtMzM0LDcgKzM0Myw4IEBACiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmlteF9lcC0+cXVldWUpOwogfQogCi1zdGF0aWMgdm9pZCBlcF9kZWxfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwX2RlbF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCiB7CiAJaWYgKHVubGlrZWx5KCFyZXEpKQogCQlyZXR1cm47CkBAIC0zNDMsNyArMzUzLDggQEAKIAlyZXEtPmluX3VzZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQogewogCWVwX2RlbF9yZXF1ZXN0KGlteF9lcCwgcmVxKTsKIApAQCAtNDk0LDcgKzUwNSw4IEBACiAJCQkJX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSwgcmVxLAogCQkJCWNvbXBsZXRlZCA/ICJjb21wbGV0ZWQiIDogIm5vdCBjb21wbGV0ZWQiKTsKIAkJCWlmICghRVBfTk8oaW14X2VwKSkKLQkJCQllcDBfY2hnX3N0YXQoX19mdW5jX18sIGlteF9lcC0+aW14X3VzYiwgRVAwX0lETEUpOworCQkJCWVwMF9jaGdfc3RhdChfX2Z1bmNfXywKKwkJCQkJCWlteF9lcC0+aW14X3VzYiwgRVAwX0lETEUpOwogCQl9CiAJfQogCkBAIC01MzksMTAgKzU1MSw5IEBACiAJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZpbXhfZXAtPnF1ZXVlKSkKKwlpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoaW14X2VwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgaW14X3JlcXVlc3QsIHF1ZXVlKTsKIAotCWlmIChyZXEpIHsKIAkJc3dpdGNoIChpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlKSB7CiAKIAkJY2FzZSBFUDBfSU5fREFUQV9QSEFTRToJCQkvKiBHRVRfREVTQ1JJUFRPUiAqLwpAQCAtNTYxLDYgKzU3MiwxMCBAQAogCQl9CiAJfQogCisJZWxzZQorCQlEX0VSUihpbXhfZXAtPmlteF91c2ItPmRldiwgIjwlcz4gbm8gcmVxdWVzdCBvbiAlc1xuIiwKKwkJCQkJCV9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTgzLDcgKzU5OCw4IEBACiAJCQkJIjwlcz4gbm8gc2V0dXAgcGFja2V0IHJlY2VpdmVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHN0YWxsOwogCQl9Ci0JCXUud29yZFtpXSA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKwlVU0JfRVBfRkRBVChFUF9OTyhpbXhfZXApKSk7CisJCXUud29yZFtpXSA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0ZEQVQoRVBfTk8oaW14X2VwKSkpOwogCX0KIAogCXRlbXAgPSBpbXhfZXBfZW1wdHkoaW14X2VwKTsKQEAgLTc1OSw3ICs3NzUsNyBAQAogCSovCiAJaWYgKGlteF91c2ItPnNldF9jb25maWcgJiYgIUVQX05PKGlteF9lcCkpIHsKIAkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCURfRVBYKGlteF91c2ItPmRldiwKKwkJRF9FUlIoaW14X3VzYi0+ZGV2LAogCQkJIjwlcz4gZ2FkZ2V0IHJlcGx5IHNldCBjb25maWdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzc5LDI4ICs3OTUsMjkgQEAKIAkJcmV0dXJuIC1FU0hVVERPV047CiAJfQogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCiAJLyogRGVidWcgKi8KIAlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IGVwJWQgJXMgcmVxdWVzdCBmb3IgWyVkXSBieXRlc1xuIiwKIAkJX19mdW5jX18sIEVQX05PKGlteF9lcCksCi0JCSgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSU5fREFUQV9QSEFTRSkKLQkJfHwgKEVQX05PKGlteF9lcCkgJiYgRVBfRElSKGlteF9lcCkpKSA/ICJJTiIgOiAiT1VUIiwgdXNiX3JlcS0+bGVuZ3RoKTsKKwkJKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlCisJCQkJCQkJPT0gRVAwX0lOX0RBVEFfUEhBU0UpCisJCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkKKwkJCQkJPyAiSU4iIDogIk9VVCIsIHVzYl9yZXEtPmxlbmd0aCk7CiAJZHVtcF9yZXEoX19mdW5jX18sIGlteF9lcCwgdXNiX3JlcSk7CiAKIAlpZiAoaW14X2VwLT5zdG9wcGVkKSB7CiAJCXVzYl9yZXEtPnN0YXR1cyA9IC1FU0hVVERPV047Ci0JCXJldCA9IC1FU0hVVERPV047Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVTSFVURE9XTjsKIAl9CiAKIAlpZiAocmVxLT5pbl91c2UpIHsKIAkJRF9FUlIoaW14X3VzYi0+ZGV2LAogCQkJIjwlcz4gcmVmdXNpbmcgdG8gcXVldWUgcmVxICVwIChhbHJlYWR5IHF1ZXVlZClcbiIsCiAJCQlfX2Z1bmNfXywgcmVxKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCXVzYl9yZXEtPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAl1c2JfcmVxLT5hY3R1YWwgPSAwOwogCkBAIC04MTAsNyArODI3LDcgQEAKIAkJcmV0ID0gaGFuZGxlX2VwMChpbXhfZXApOwogCWVsc2UKIAkJcmV0ID0gaGFuZGxlX2VwKGlteF9lcCk7Ci1vdXQ6CisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk5Nyw3MSArMTAxNCwzMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQorLyoKKyAqIENhbGxlZCB3aGVuIHRpbWVyIGV4cGlyZXMuCisgKiBUaW1lciBpcyBzdGFydGVkIHdoZW4gQ0ZHX0NIRyBpcyByZWNlaXZlZC4KKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NvbmZpZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9ICh2b2lkICopZGF0YTsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHU7CiAJaW50IHRlbXAsIGNmZywgaW50ZiwgYWx0OwotCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKIAotCWlmIChpbnRyICYgKElOVFJfV0FLRVVQIHwgSU5UUl9TVVNQRU5EIHwgSU5UUl9SRVNVTUUgfCBJTlRSX1JFU0VUX1NUQVJUCi0JCQl8IElOVFJfUkVTRVRfU1RPUCB8IElOVFJfQ0ZHX0NIRykpIHsKLQkJCQlkdW1wX2ludHIoX19mdW5jX18sIGludHIsIGlteF91c2ItPmRldik7Ci0JCQkJZHVtcF91c2Jfc3RhdChfX2Z1bmNfXywgaW14X3VzYik7Ci0JfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZiAoIWlteF91c2ItPmRyaXZlcikgewotCQkvKmlteF91ZGNfZGlzYWJsZShpbXhfdXNiKTsqLwotCQlnb3RvIGVuZF9pcnE7Ci0JfQorCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOworCWNmZyAgPSAodGVtcCAmIFNUQVRfQ0ZHKSA+PiA1OworCWludGYgPSAodGVtcCAmIFNUQVRfSU5URikgPj4gMzsKKwlhbHQgID0gIHRlbXAgJiBTVEFUX0FMVFNFVDsKIAotCWlmIChpbnRyICYgSU5UUl9XQUtFVVApIHsKLQkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTgotCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+cmVzdW1lKQotCQkJCWlteF91c2ItPmRyaXZlci0+cmVzdW1lKCZpbXhfdXNiLT5nYWRnZXQpOwotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7Ci0JfQorCURfUkVRKGlteF91c2ItPmRldiwKKwkJIjwlcz4gb3JpZyBjb25maWcgQz0lZCwgST0lZCwgQT0lZCAvICIKKwkJInJlcSBjb25maWcgQz0lZCwgST0lZCwgQT0lZFxuIiwKKwkJX19mdW5jX18sIGlteF91c2ItPmNmZywgaW14X3VzYi0+aW50ZiwgaW14X3VzYi0+YWx0LAorCQljZmcsIGludGYsIGFsdCk7CiAKLQlpZiAoaW50ciAmIElOVFJfU1VTUEVORCkgewotCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCi0JCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKQotCQkJCWlteF91c2ItPmRyaXZlci0+c3VzcGVuZCgmaW14X3VzYi0+Z2FkZ2V0KTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCX0KKwlpZiAoY2ZnID09IDEgfHwgY2ZnID09IDIpIHsKIAotCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVEFSVCkgewotCQlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKLQkJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgaW14X3VzYi0+ZHJpdmVyKTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCX0KLQotCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVE9QKQotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKLQotCWlmIChpbnRyICYgSU5UUl9DRkdfQ0hHKSB7Ci0JCV9fcmF3X3dyaXRlbChJTlRSX0NGR19DSEcsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7Ci0JCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOwotCQljZmcgID0gKHRlbXAgJiBTVEFUX0NGRykgPj4gNTsKLQkJaW50ZiA9ICh0ZW1wICYgU1RBVF9JTlRGKSA+PiAzOwotCQlhbHQgID0gIHRlbXAgJiBTVEFUX0FMVFNFVDsKLQotCQlEX1JFUShpbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBvcmlnIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkIC8gIgotCQkJInJlcSBjb25maWcgQz0lZCwgST0lZCwgQT0lZFxuIiwKLQkJCV9fZnVuY19fLCBpbXhfdXNiLT5jZmcsIGlteF91c2ItPmludGYsIGlteF91c2ItPmFsdCwKLQkJCWNmZywgaW50ZiwgYWx0KTsKLQotCQlpZiAoY2ZnICE9IDEgJiYgY2ZnICE9IDIpCi0JCQlnb3RvIGVuZF9pcnE7Ci0KLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0KLQkJLyogQ29uZmlnIHNldHVwICovCiAJCWlmIChpbXhfdXNiLT5jZmcgIT0gY2ZnKSB7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBjb25maWcgc3RhcnRcbiIsX19mdW5jX18pOwogCQkJdS5iUmVxdWVzdCA9IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT047CiAJCQl1LmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwKIAkJCQkJVVNCX1RZUEVfU1RBTkRBUkQgfApAQCAtMTA3MCwxNCArMTA0OCwxMCBAQAogCQkJdS53SW5kZXggPSAwOwogCQkJdS53TGVuZ3RoID0gMDsKIAkJCWlteF91c2ItPmNmZyA9IGNmZzsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAxOwogCQkJaW14X3VzYi0+ZHJpdmVyLT5zZXR1cCgmaW14X3VzYi0+Z2FkZ2V0LCAmdSk7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGNvbmZpZyBkb25lXG4iLF9fZnVuY19fKTsKIAogCQl9CiAJCWlmIChpbXhfdXNiLT5pbnRmICE9IGludGYgfHwgaW14X3VzYi0+YWx0ICE9IGFsdCkgewotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgaW50ZXJmYWNlIHN0YXJ0XG4iLF9fZnVuY19fKTsKIAkJCXUuYlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U7CiAJCQl1LmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwKIAkJCQkJICBVU0JfVFlQRV9TVEFOREFSRCB8CkBAIC0xMDg3LDIwICsxMDYxLDkyIEBACiAJCQl1LndMZW5ndGggPSAwOwogCQkJaW14X3VzYi0+aW50ZiA9IGludGY7CiAJCQlpbXhfdXNiLT5hbHQgPSBhbHQ7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMTsKIAkJCWlteF91c2ItPmRyaXZlci0+c2V0dXAoJmlteF91c2ItPmdhZGdldCwgJnUpOwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBpbnRlcmZhY2UgZG9uZVxuIixfX2Z1bmNfXyk7CiAJCX0KIAl9CiAKKwlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGlteF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBkZXY7CisJaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOworCWludCB0ZW1wOworCisJaWYgKGludHIgJiAoSU5UUl9XQUtFVVAgfCBJTlRSX1NVU1BFTkQgfCBJTlRSX1JFU1VNRSB8IElOVFJfUkVTRVRfU1RBUlQKKwkJCXwgSU5UUl9SRVNFVF9TVE9QIHwgSU5UUl9DRkdfQ0hHKSkgeworCQkJCWR1bXBfaW50cihfX2Z1bmNfXywgaW50ciwgaW14X3VzYi0+ZGV2KTsKKwkJCQlkdW1wX3VzYl9zdGF0KF9fZnVuY19fLCBpbXhfdXNiKTsKKwl9CisKKwlpZiAoIWlteF91c2ItPmRyaXZlcikKKwkJZ290byBlbmRfaXJxOworCiAJaWYgKGludHIgJiBJTlRSX1NPRikgeworCQkvKiBDb3B5IGZyb20gRnJlZXNjYWxlIEJTUC4KKwkJICAgV2UgbXVzdCBlbmFibGUgU09GIGludHIgYW5kIHNldCBDTURPVkVSLgorCQkgICBEYXRhc2hlZXQgZG9uJ3Qgc3BlY2lmaXkgdGhpcyBhY3Rpb24sIGJ1dCBpdAorCQkgICBpcyBkb25lIGluIEZyZWVzY2FsZSBCU1AsIHNvIGp1c3QgY29weSBpdC4KKwkJKi8KIAkJaWYgKGlteF91c2ItPmVwMHN0YXRlID09IEVQMF9JRExFKSB7CiAJCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCQkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCQl9CiAJfQogCisJaWYgKGludHIgJiBJTlRSX0NGR19DSEcpIHsKKwkJLyogQSB3b3JrYXJvdW5kIG9mIHNlcmlvdXMgSU1YIFVEQyBidWcuCisJCSAgIEhhbmRsaW5nIG9mIENGR19DSEcgc2hvdWxkIGJlIGRlbGF5ZWQgZm9yIHNvbWUgdGltZSwgYmVjYXVzZQorCQkgICBJTVggZG9lcyBub3QgTkFDSyB0aGUgaG9zdCB3aGVuIENGR19DSEcgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisJCSAgIFRoZXJlIGlzIG5vIHRpbWUgdG8gaGFuZGxlIGN1cnJlbnQgQ0ZHX0NIRworCQkgICBpZiBuZXh0IENGR19DSEcgb3IgU0VUVVAgcGFja2VkIGlzIHNlbmQgaW1tZWRpYXRlbHkuCisJCSAgIFdlIGhhdmUgdG8gY2xlYXIgQ0ZHX0NIRywgc3RhcnQgdGhlIHRpbWVyIGFuZAorCQkgICBOQUNLIHRoZSBob3N0IGJ5IHNldHRpbmcgQ1RSTF9DTURPVkVSCisJCSAgIGlmIGl0IHNlbmRzIGFueSBTRVRVUCBwYWNrZXQuCisJCSAgIFdoZW4gdGltZXIgZXhwaXJlcywgaGFuZGxlciBpcyBjYWxsZWQgdG8gaGFuZGxlIGNvbmZpZ3VyYXRpb24KKwkJICAgY2hhbmdlcy4gV2hpbGUgQ0ZHX0NIRyBpcyBub3QgaGFuZGxlZCAoc2V0X2NvbmZpZz0xKSwKKwkJICAgd2UgbXVzdCBOQUNLIHRoZSBob3N0IHRvIGV2ZXJ5IFNFVFVQIHBhY2tlZC4KKwkJICAgVGhpcyBkZWxheSBwcmV2ZW50cyBmcm9tIGdvaW5nIG91dCBvZiBzeW5jIHdpdGggaG9zdC4KKwkJICovCisJCV9fcmF3X3dyaXRlbChJTlRSX0NGR19DSEcsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAxOworCQltb2RfdGltZXIoJmlteF91c2ItPnRpbWVyLCBqaWZmaWVzICsgNSk7CisJCWdvdG8gZW5kX2lycTsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfV0FLRVVQKSB7CisJCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSkKKwkJCQlpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSgmaW14X3VzYi0+Z2FkZ2V0KTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfU1VTUEVORCkgeworCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCisJCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKQorCQkJCWlteF91c2ItPmRyaXZlci0+c3VzcGVuZCgmaW14X3VzYi0+Z2FkZ2V0KTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RBUlQpIHsKKwkJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJCXVkY19zdG9wX2FjdGl2aXR5KGlteF91c2IsIGlteF91c2ItPmRyaXZlcik7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCQlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJfQorCisJaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUT1ApCisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCiBlbmRfaXJxOgogCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTExMDksNiArMTE1NSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19jdHJsX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCXN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAgPSAmaW14X3VzYi0+aW14X2VwWzBdOwogCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKDApKTsKIAogCWR1bXBfZXBfaW50cihfX2Z1bmNfXywgMCwgaW50ciwgaW14X3VzYi0+ZGV2KTsKQEAgLTExMTgsMTYgKzExNjUsMTUgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCS8qIERFVlJFUSBJUlEgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KKwkvKiBERVZSRVEgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KIAlpZiAoaW50ciAmIChFUElOVFJfREVWUkVRIHwgRVBJTlRSX01ERVZSRVEpKQogCQloYW5kbGVfZXAwX2RldnJlcShpbXhfdXNiKTsKIAkvKiBTZWVtIGkuTVggaXMgbWlzc2luZyBFT0YgaW50ZXJydXB0IHNvbWV0aW1lcy4KLQkgKiBUaGVyZWZvcmUgd2UgbW9uaXRvciBib3RoIEVPRiBhbmQgRklGT19FTVBUWSBpbnRlcnJ1cHMKLQkgKiB3aGVuIHRyYW5zbWl0aW5nLCBhbmQgYm90aCBFT0YgYW5kIEZJRk9fRlVMTCB3aGVuCi0JICogcmVjZWl2aW5nIGRhdGEuCisJICogVGhlcmVmb3JlIHdlIGRvbid0IG1vbml0b3IgRU9GLgorCSAqIFdlIGNhbGwgaGFuZGxlX2VwMCgpIG9ubHkgaWYgYSByZXF1ZXN0IGlzIHF1ZXVlZCBmb3IgZXAwLgogCSAqLwotCWVsc2UgaWYgKGludHIgJiAoRVBJTlRSX0VPRiB8IEVQSU5UUl9GSUZPX0VNUFRZIHwgRVBJTlRSX0ZJRk9fRlVMTCkpCi0JCWhhbmRsZV9lcDAoJmlteF91c2ItPmlteF9lcFswXSk7CisJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKQorCQloYW5kbGVfZXAwKGlteF9lcCk7CiAKIAlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKDApKTsKIApAQCAtMTE4Niw4ICsxMjMyLDggQEAKIAkJLmVwMAkJPSAmY29udHJvbGxlci5pbXhfZXBbMF0uZXAsCiAJCS5uYW1lCQk9IGRyaXZlcl9uYW1lLAogCQkuZGV2ID0gewotCQkJIC5idXNfaWQJPSAiZ2FkZ2V0IiwKLQkJIH0sCisJCQkuaW5pdF9uYW1lCT0gImdhZGdldCIsCisJCX0sCiAJfSwKIAogCS5pbXhfZXBbMF0gPSB7CkBAIC0xMzE4LDYgKzEzNjQsNyBAQAogCiAJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgZHJpdmVyKTsKIAlpbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7CisJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CiAKIAlkcml2ZXItPnVuYmluZCgmaW14X3VzYi0+Z2FkZ2V0KTsKIAlpbXhfdXNiLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CkBAIC0xNDM1LDYgKzE0ODIsMTAgQEAKIAl1c2JfaW5pdF9kYXRhKGlteF91c2IpOwogCWlteF91ZGNfaW5pdChpbXhfdXNiKTsKIAorCWluaXRfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwlpbXhfdXNiLT50aW1lci5mdW5jdGlvbiA9IGhhbmRsZV9jb25maWc7CisJaW14X3VzYi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlteF91c2I7CisKIAlyZXR1cm4gMDsKIAogZmFpbDM6CkBAIC0xNDU3LDYgKzE1MDgsNyBAQAogCWludCBpOwogCiAJaW14X3VkY19kaXNhYmxlKGlteF91c2IpOworCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IElNWF9VU0JfTkJfRVAgKyAxOyBpKyspCiAJCWZyZWVfaXJxKGlteF91c2ItPnVzYmRfaW50W2ldLCBpbXhfdXNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCmluZGV4IDg1MDA3NjkuLmI0OGFkNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaApAQCAtMjMsNyArMjMsOCBAQAogLyogSGVscGVyIG1hY3JvcyAqLwogI2RlZmluZSBFUF9OTyhlcCkJKChlcC0+YkVuZHBvaW50QWRkcmVzcykgJiB+VVNCX0RJUl9JTikgLyogSU46MSwgT1VUOjAgKi8KICNkZWZpbmUgRVBfRElSKGVwKQkoKGVwLT5iRW5kcG9pbnRBZGRyZXNzKSAmIFVTQl9ESVJfSU4gPyAxIDogMCkKLSNkZWZpbmUgaXJxX3RvX2VwKGlycSkJKCgoaXJxKSA+PSBVU0JEX0lOVDApIHx8ICgoaXJxKSA8PSBVU0JEX0lOVDYpID8gKChpcnEpIC0gVVNCRF9JTlQwKSA6IChVU0JEX0lOVDYpKSAvKnNob3VsZCBub3QgaGFwcGVuKi8KKyNkZWZpbmUgaXJxX3RvX2VwKGlycSkJKCgoaXJxKSA+PSBVU0JEX0lOVDApIHx8ICgoaXJxKSA8PSBVU0JEX0lOVDYpIFwKKwkJPyAoKGlycSkgLSBVU0JEX0lOVDApIDogKFVTQkRfSU5UNikpIC8qc2hvdWxkIG5vdCBoYXBwZW4qLwogI2RlZmluZSBlcF90b19pcnEoZXApCShFUF9OTygoZXApKSArIFVTQkRfSU5UMCkKICNkZWZpbmUgSU1YX1VTQl9OQl9FUAk2CiAKQEAgLTU4LDYgKzU5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7CiAJc3RydWN0IGlteF9lcF9zdHJ1Y3QJCQlpbXhfZXBbSU1YX1VTQl9OQl9FUF07CiAJc3RydWN0IGNsawkJCQkqY2xrOworCXN0cnVjdCB0aW1lcl9saXN0CQkJdGltZXI7CiAJZW51bSBlcDBfc3RhdGUJCQkJZXAwc3RhdGU7CiAJc3RydWN0IHJlc291cmNlCQkJCSpyZXM7CiAJdm9pZCBfX2lvbWVtCQkJCSpiYXNlOwpAQCAtODgsOCArOTAsOCBAQAogI2RlZmluZSAgVVNCX0VQX0ZEQVQzKHgpCSgweDNGICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIGRhdGEgKi8KICNkZWZpbmUgIFVTQl9FUF9GU1RBVCh4KQkoMHg0MCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBzdGF0dXMgKi8KICNkZWZpbmUgIFVTQl9FUF9GQ1RSTCh4KQkoMHg0NCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBjb250cm9sICovCi0jZGVmaW5lICBVU0JfRVBfTFJGUCh4KQkJKDB4NDggKyAoeCoweDMwKSkgLyogVVNCIGxhc3QgcmVhZCBmcmFtZSBwb2ludGVyICovCi0jZGVmaW5lICBVU0JfRVBfTFdGUCh4KQkJKDB4NEMgKyAoeCoweDMwKSkgLyogVVNCIGxhc3Qgd3JpdGUgZnJhbWUgcG9pbnRlciAqLworI2RlZmluZSAgVVNCX0VQX0xSRlAoeCkJCSgweDQ4ICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHJkIGYuIHBvaW50ZXIgKi8KKyNkZWZpbmUgIFVTQl9FUF9MV0ZQKHgpCQkoMHg0QyArICh4KjB4MzApKSAvKiBVU0IgbGFzdCB3ciBmLiBwb2ludGVyICovCiAjZGVmaW5lICBVU0JfRVBfRkFMUk0oeCkJKDB4NTAgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gYWxhcm0gKi8KICNkZWZpbmUgIFVTQl9FUF9GUkRQKHgpCQkoMHg1NCArICh4KjB4MzApKSAvKiBVU0IgRklGTyByZWFkIHBvaW50ZXIgKi8KICNkZWZpbmUgIFVTQl9FUF9GV1JQKHgpCQkoMHg1OCArICh4KjB4MzApKSAvKiBVU0IgRklGTyB3cml0ZSBwb2ludGVyICovCkBAIC0xNzAsNyArMTcyLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfSVJRICovCiAvKiAjZGVmaW5lIERFQlVHX0VQSVJRICovCiAvKiAjZGVmaW5lIERFQlVHX0RVTVAgKi8KLSNkZWZpbmUgREVCVUdfRVJSCisvKiAjZGVmaW5lIERFQlVHX0VSUiAqLwogCiAjaWZkZWYgREVCVUdfUkVRCiAJI2RlZmluZSBEX1JFUShkZXYsIGFyZ3MuLi4pCWRldl9kYmcoZGV2LCAjIyBhcmdzKQpAQCAtMjI4LDcgKzIzMCw4IEBACiAjZW5kaWYgLyogREVCVUdfSVJRICovCiAKICNpZmRlZiBERUJVR19FUElSUQotCXN0YXRpYyB2b2lkIGR1bXBfZXBfaW50cihjb25zdCBjaGFyICpsYWJlbCwgaW50IG5yLCBpbnQgaXJxcmVnLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCisJc3RhdGljIHZvaWQgZHVtcF9lcF9pbnRyKGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgbnIsIGludCBpcnFyZWcsCisJCQkJCQkJc3RydWN0IGRldmljZSAqZGV2KQogCXsKIAkJZGV2X2RiZyhkZXYsICI8JXM+IEVQJWRfSU5UUj1bJXMlcyVzJXMlcyVzJXMlcyVzXVxuIiwgbGFiZWwsIG5yLAogCQkJKGlycXJlZyAmIEVQSU5UUl9GSUZPX0ZVTEwpID8gIiBmdWxsIiA6ICIiLApAQCAtMjQ2LDcgKzI0OSw4IEBACiAjZW5kaWYgLyogREVCVUdfSVJRICovCiAKICNpZmRlZiBERUJVR19EVU1QCi0Jc3RhdGljIHZvaWQgZHVtcF91c2Jfc3RhdChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQorCXN0YXRpYyB2b2lkIGR1bXBfdXNiX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsCisJCQkJCQlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IpCiAJewogCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfU1RBVCk7CiAKQEAgLTI1OSwxMiArMjYzLDE1IEBACiAJCQkodGVtcCAmIFNUQVRfQUxUU0VUKSk7CiAJfQogCi0Jc3RhdGljIHZvaWQgZHVtcF9lcF9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwKQorCXN0YXRpYyB2b2lkIGR1bXBfZXBfc3RhdChjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkJCXN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXApCiAJewotCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKEVQX05PKGlteF9lcCkpKTsKKwkJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0lOVFIoRVBfTk8oaW14X2VwKSkpOwogCiAJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBFUCVkX0lOVFI9WyVzJXMlcyVzJXMlcyVzJXMlc11cbiIsIGxhYmVsLCBFUF9OTyhpbXhfZXApLAorCQkJIjwlcz4gRVAlZF9JTlRSPVslcyVzJXMlcyVzJXMlcyVzJXNdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEVQSU5UUl9GSUZPX0ZVTEwpID8gIiBmdWxsIiA6ICIiLAogCQkJKHRlbXAgJiBFUElOVFJfRklGT19FTVBUWSkgPyAiIGZlbXB0eSIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0ZJRk9fRVJST1IpID8gIiBmZXJyIiA6ICIiLApAQCAtMjc1LDE4ICsyODIsMjIgQEAKIAkJCSh0ZW1wICYgRVBJTlRSX0RFVlJFUSkgPyAiIGRldnJlcSIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0VPVCkgPyAiIGVvdCIgOiAiIik7CiAKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKKwkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CiAKIAkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKLQkJCSI8JXM+IEVQJWRfU1RBVD1bJXMlcyBiY291bnQ9JWRdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfU1RBVD1bJXMlcyBiY291bnQ9JWRdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEVQU1RBVF9TSVApID8gIiBzaXAiIDogIiIsCiAJCQkodGVtcCAmIEVQU1RBVF9TVEFMTCkgPyAiIHN0YWxsIiA6ICIiLAogCQkJKHRlbXAgJiBFUFNUQVRfQkNPVU5UKSA+PiAxNik7CiAKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9GU1RBVChFUF9OTyhpbXhfZXApKSk7CisJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0ZTVEFUKEVQX05PKGlteF9lcCkpKTsKIAogCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gRVAlZF9GU1RBVD1bJXMlcyVzJXMlcyVzJXNdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfRlNUQVQ9WyVzJXMlcyVzJXMlcyVzXVxuIiwKKwkJCWxhYmVsLCBFUF9OTyhpbXhfZXApLAogCQkJKHRlbXAgJiBGU1RBVF9FUlIpID8gIiBmZXJyIiA6ICIiLAogCQkJKHRlbXAgJiBGU1RBVF9VRikgPyAiIGZ1bmRlciIgOiAiIiwKIAkJCSh0ZW1wICYgRlNUQVRfT0YpID8gIiBmb3ZlciIgOiAiIiwKQEAgLTI5NiwxOSArMzA3LDIzIEBACiAJCQkodGVtcCAmIEZTVEFUX0VNUFRZKSA/ICIgZmVtcHR5IiA6ICIiKTsKIAl9CiAKLQlzdGF0aWMgdm9pZCBkdW1wX3JlcShjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCisJc3RhdGljIHZvaWQgZHVtcF9yZXEoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCiAJewogCQlpbnQgaTsKIAogCQlpZiAoIXJlcSB8fCAhcmVxLT5idWYpIHsKLQkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsICI8JXM+IHJlcSBvciByZXEgYnVmIGlzIGZyZWVcbiIsIGxhYmVsKTsKKwkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCisJCQkJCSI8JXM+IHJlcSBvciByZXEgYnVmIGlzIGZyZWVcbiIsIGxhYmVsKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmICgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSU5fREFUQV9QSEFTRSkKKwkJaWYgKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlCisJCQk9PSBFUDBfSU5fREFUQV9QSEFTRSkKIAkJCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkgewogCi0JCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LCAiPCVzPiByZXF1ZXN0IGR1bXAgPCIsIGxhYmVsKTsKKwkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCisJCQkJCQkiPCVzPiByZXF1ZXN0IGR1bXAgPCIsIGxhYmVsKTsKIAkJCWZvciAoaSA9IDA7IGkgPCByZXEtPmxlbmd0aDsgaSsrKQogCQkJCXByaW50aygiJTAyeC0iLCAqKCh1OCAqKXJlcS0+YnVmICsgaSkpOwogCQkJcHJpbnRrKCI+XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggMzE3YjQ4Zi4uZDIwOTM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTEzMzQsNyArMTMzNCw3IEBACiAKIAlxdWFsLmJMZW5ndGggPSBzaXplb2YgcXVhbDsKIAlxdWFsLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOwotCXF1YWwuYmNkVVNCID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKTsKKwlxdWFsLmJjZFVTQiA9IGNwdV90b19sZTE2ICgweDAyMDApOwogCiAJZGVzYyA9IGRldi0+ZGV2OwogCXF1YWwuYkRldmljZUNsYXNzID0gZGVzYy0+YkRldmljZUNsYXNzOwpAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAkJCXx8IGRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKIAkJZ290byBmYWlsOwogCWRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgPSAxOwotCWRldi0+ZGV2LT5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApOworCWRldi0+ZGV2LT5iY2RVU0IgPSBjcHVfdG9fbGUxNiAoMHgwMjAwKTsKIAogCS8qIHRyaWdnZXJzIGdhZGdldGZzX2JpbmQoKTsgdGhlbiB3ZSBjYW4gZW51bWVyYXRlLiAqLwogCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IGQ1NTRiMDguLjZjZDNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC00MzIsOCArNDMyLDggQEAKIAlkZXZpY2VfYWRkKCZkZXYtPmdhZGdldC5kZXYpOwogCXJldHZhbCA9IGRyaXZlci0+YmluZCgmZGV2LT5nYWRnZXQpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKCIlczogYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLCBkZXYtPmdhZGdldC5uYW1lLAotCQkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJpbmQgdG8gZHJpdmVyICVzIC0tPiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGRldi0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CiAJCWRldmljZV9kZWwoJmRldi0+Z2FkZ2V0LmRldik7CiAKIAkJZGV2LT5kcml2ZXIgPSAwOwpAQCAtNDQ1LDggKzQ0NSw4IEBACiAJICogZm9yIHNldF9jb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgZXZlbnR1YWwgZGlzY29ubmVjdC4KIAkgKiBOT1RFOiAgdGhpcyBzaG91bGRuJ3QgcG93ZXIgdXAgdW50aWwgbGF0ZXIuCiAJICovCi0JcHJpbnRrKCIlczogcmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRldi0+Z2FkZ2V0Lm5hbWUsCi0JICAgICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKKwkgICAgICAgZGV2LT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKIAl1ZGNfZW5hYmxlKGRldik7CiAKQEAgLTU4MSw3ICs1ODEsOCBAQAogCQkJICogZGlzY2FyZCB0aGUgZXh0cmEgZGF0YS4KIAkJCSAqLwogCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQotCQkJCXByaW50aygiJXMgb3ZlcmZsb3cgJWRcbiIsIGVwLT5lcC5uYW1lLCBjb3VudCk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgb3ZlcmZsb3cgJWRcbiIsCisJCQkJICAgICAgIGVwLT5lcC5uYW1lLCBjb3VudCk7CiAJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOwogCQl9IGVsc2UgewogCQkJKmJ1ZisrID0gYnl0ZTsKQEAgLTgzMSw3ICs4MzIsOCBAQAogCQkJCQkJICAgICAgIHF1ZXVlKTsKIAogCQkJCWlmICghcmVxKSB7Ci0JCQkJCXByaW50aygiJXM6IE5VTEwgUkVRICVkXG4iLAorCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICAgICAiJXM6IE5VTEwgUkVRICVkXG4iLAogCQkJCQkgICAgICAgX19mdW5jX18sIGVwX2lkeCk7CiAJCQkJCWZsdXNoKGVwKTsKIAkJCQkJYnJlYWs7CkBAIC04NDQsNyArODQ2LDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIFRocm93IHBhY2tldCBhd2F5Li4gKi8KLQkJcHJpbnRrKCIlczogTm8gZGVzY3JpcHRvcj8hP1xuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gZGVzY3JpcHRvcj8hP1xuIiwgX19mdW5jX18pOwogCQlmbHVzaChlcCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggMTJjNmQ4My4uOTQ5OGJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0xNDIsOCArMTQyLDggQEAKIAogI2luY2x1ZGUgIm5ldDIyODAuaCIKIAotI2RlZmluZSB2YWxpZF9iaXQJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBWQUxJRF9CSVQpCi0jZGVmaW5lIGRtYV9kb25lX2llCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKKyNkZWZpbmUgdmFsaWRfYml0CWNwdV90b19sZTMyICgxIDw8IFZBTElEX0JJVCkKKyNkZWZpbmUgZG1hX2RvbmVfaWUJY3B1X3RvX2xlMzIgKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNDI1LDcgKzQyNSw3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQl0ZC0+ZG1hY291bnQgPSAwOwkvKiBub3QgVkFMSUQgKi8KLQkJdGQtPmRtYWFkZHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKKwkJdGQtPmRtYWFkZHIgPSBjcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CiAJCXRkLT5kbWFkZXNjID0gdGQtPmRtYWFkZHI7CiAJCXJlcS0+dGQgPSB0ZDsKIAl9CkBAIC03NzUsNyArNzc1LDcgQEAKIAlmaWxsX2RtYV9kZXNjIChlcCwgcmVxLCAxKTsKIAogCWlmICghdXNlX2RtYV9jaGFpbmluZykKLQkJcmVxLT50ZC0+ZG1hY291bnQgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBFTkRfT0ZfQ0hBSU4pOworCQlyZXEtPnRkLT5kbWFjb3VudCB8PSBjcHVfdG9fbGUzMiAoMSA8PCBFTkRfT0ZfQ0hBSU4pOwogCiAJc3RhcnRfcXVldWUgKGVwLCB0bXAsIHJlcS0+dGRfZG1hKTsKIH0KQEAgLTI0MDcsOSArMjQwNyw5IEBACiAKIAkJCWlmIChyZWFkbCAoJmUtPnJlZ3MtPmVwX3JzcCkKIAkJCQkJJiAoMSA8PCBTRVRfRU5EUE9JTlRfSEFMVCkpCi0JCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJCQkJc3RhdHVzID0gY3B1X3RvX2xlMzIgKDEpOwogCQkJZWxzZQotCQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJCXN0YXR1cyA9IGNwdV90b19sZTMyICgwKTsKIAogCQkJLyogZG9uJ3QgYm90aGVyIHdpdGggYSByZXF1ZXN0IG9iamVjdCEgKi8KIAkJCXdyaXRlbCAoMCwgJmRldi0+ZXByZWdzIFswXS5lcF9pcnFlbmIpOwpAQCAtMjY2Nyw3ICsyNjY3LDcgQEAKIAkJCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKIAkJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKIAkJCQlkbWFjb3VudCA9IHJlcS0+dGQtPmRtYWNvdW50OwotCQkJCWRtYWNvdW50ICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJCWRtYWNvdW50ICY9IGNwdV90b19sZTMyICgKIAkJCQkJCSgxIDw8IFZBTElEX0JJVCkKIAkJCQkJCXwgRE1BX0JZVEVfQ09VTlRfTUFTSyk7CiAJCQkJaWYgKGRtYWNvdW50ICYmIChkbWFjb3VudCAmIHZhbGlkX2JpdCkgPT0gMCkKQEAgLTI4ODEsNyArMjg4MSw3IEBACiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJdGQtPmRtYWNvdW50ID0gMDsJLyogbm90IFZBTElEICovCi0JCXRkLT5kbWFhZGRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CisJCXRkLT5kbWFhZGRyID0gY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOwogCQl0ZC0+ZG1hZGVzYyA9IHRkLT5kbWFhZGRyOwogCQlkZXYtPmVwIFtpXS5kdW1teSA9IHRkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDVhMzAzNGYuLjI5NTAwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMjI1LDEyICsyMjUsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKIAkuYkRldmljZVByb3RvY29sID0JMCwKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pLAogCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKIAkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCiAJLmlTZXJpYWxOdW1iZXIgPQlTVFJJTkdfU0VSSUFMTlVNLApAQCAtMjk5LDIwICsyOTksMjAgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMikKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VwX291dF9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKQorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIGRldl9xdWFsaWZpZXIgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QUklOVEVSLAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxCiB9OwpAQCAtMTQwNiwxNiArMTQwNiwxNiBAQAogCQkJZ2FkZ2V0LT5uYW1lKTsKIAkJLyogdW5yZWNvZ25pemVkLCBidXQgc2FmZSB1bmxlc3MgYnVsayBpcyBSRUFMTFkgcXVpcmt5ICovCiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4RkZGRik7CisJCQljcHVfdG9fbGUxNigweEZGRkYpOwogCX0KIAlzbnByaW50ZihtYW51ZmFjdHVyZXIsIHNpemVvZihtYW51ZmFjdHVyZXIpLCAiJXMgJXMgd2l0aCAlcyIsCiAJCWluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJZ2FkZ2V0LT5uYW1lKTsKIAogCWRldmljZV9kZXNjLmlkVmVuZG9yID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pOworCQljcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pOwogCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSk7CisJCWNwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pOwogCiAJLyogc3VwcG9ydCBvcHRpb25hbCB2ZW5kb3IvZGlzdHJvIGN1c3RvbWl6YXRpb24gKi8KIAlpZiAoaWRWZW5kb3IpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCmluZGV4IDliMzYyMDUuLjBjZTRlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwpAQCAtOTA0LDggKzkwNCw4IEBACiAKIAkvKiBtb3N0IElOIHN0YXR1cyBpcyB0aGUgc2FtZSwgYnV0IElTTyBjYW4ndCBzdGFsbCAqLwogCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfVFBDfFVEQ0NTX0JJX0ZURnxVRENDU19CSV9UVVIKLQkJfCAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQotCQkJPyAwIDogVURDQ1NfQklfU1NUOworCQl8IChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCT8gMCA6IFVEQ0NTX0JJX1NTVCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKaW5kZXggOTkwZjQwZi4uOGNjNjc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0yNzgsNyArMjc5LDcgQEAKIAkJZ290byBlcnJfcXVldWVzOwogCWVwcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImVwc3RhdGUiLCAwNDAwLCByb290LCB1ZGMsCiAJCQkmZXBzX2RiZ19mb3BzKTsKLQlpZiAoIXF1ZXVlcykKKwlpZiAoIWVwcykKIAkJZ290byBlcnJfZXBzOwogCiAJdWRjLT5kZWJ1Z2ZzX3Jvb3QgPSByb290OwpAQCAtNzQ3LDEzICs3NDgsMTMgQEAKIH0KIAogLyoqCi0gKiBlcF9lbmRfb3V0X3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBpbiByZXF1ZXN0CisgKiBlcF9lbmRfb3V0X3JlcSAtIEVuZHMgZW5kcG9pbnQgT1VUIHJlcXVlc3QKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgZW5kcG9pbnQgaW4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KKyAqIEVuZHMgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCiAgKi8KIHN0YXRpYyB2b2lkIGVwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKIHsKQEAgLTc2MiwxMyArNzYzLDEzIEBACiB9CiAKIC8qKgotICogZXAwX2VuZF9vdXRfcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IGluIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKKyAqIGVwMF9lbmRfb3V0X3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBPVVQgcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBjb250cm9sIGVuZHBvaW50IGluIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCisgKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCiAgKiBjb250cm9sIGVuZHBvaW50IGludG8gaWRsZSBzdGF0ZQogICovCiBzdGF0aWMgdm9pZCBlcDBfZW5kX291dF9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQpAQCAtNzc5LDEzICs3ODAsMTMgQEAKIH0KIAogLyoqCi0gKiBlcF9lbmRfaW5fcmVxIC0gRW5kcyBlbmRwb2ludCBvdXQgcmVxdWVzdAorICogZXBfZW5kX2luX3JlcSAtIEVuZHMgZW5kcG9pbnQgSU4gcmVxdWVzdAogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBlbmRwb2ludCBvdXQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KKyAqIEVuZHMgZW5kcG9pbnQgSU4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KICAqLwogc3RhdGljIHZvaWQgZXBfZW5kX2luX3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCiB7CkBAIC03OTQsMjAgKzc5NSwxOCBAQAogfQogCiAvKioKLSAqIGVwMF9lbmRfaW5fcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IG91dCByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCisgKiBlcDBfZW5kX2luX3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBJTiByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgb3V0IHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCisgKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgSU4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKICAqIGNvbnRyb2wgZW5kcG9pbnQgaW50byBzdGF0dXMgc3RhdGUKICAqLwogc3RhdGljIHZvaWQgZXAwX2VuZF9pbl9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBweGFfdWRjICp1ZGMgPSBlcC0+ZGV2OwotCi0Jc2V0X2VwMHN0YXRlKHVkYywgSU5fU1RBVFVTX1NUQUdFKTsKKwlzZXRfZXAwc3RhdGUoZXAtPmRldiwgSU5fU1RBVFVTX1NUQUdFKTsKIAllcF9lbmRfaW5fcmVxKGVwLCByZXEpOwogfQogCkBAIC0xMTY3LDcgKzExNjYsNyBAQAogCQkJCWVwX2VuZF9pbl9yZXEoZXAsIHJlcSk7CiAJCQl9IGVsc2UgewogCQkJCWVwX2VycihlcCwgImdvdCBhIHJlcXVlc3Qgb2YgJWQgYnl0ZXMgd2hpbGUiCi0JCQkJCSJpbiBzdGF0ZSBXQVRJX0FDS19TRVRfQ09ORl9JTlRFUkZcbiIsCisJCQkJCSJpbiBzdGF0ZSBXQUlUX0FDS19TRVRfQ09ORl9JTlRFUkZcbiIsCiAJCQkJCWxlbmd0aCk7CiAJCQkJZXBfZGVsX3JlcXVlc3QoZXAsIHJlcSk7CiAJCQkJcmMgPSAtRUwySExUOwpAQCAtMTIxMywzMCArMTIxMiwyNiBAQAogCXN0cnVjdCB1ZGNfdXNiX2VwCSp1ZGNfdXNiX2VwOwogCXN0cnVjdCBweGEyN3hfcmVxdWVzdAkqcmVxOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCWludAkJCXJjOworCWludAkJCXJjID0gLUVJTlZBTDsKIAogCWlmICghX2VwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJjOwogCXVkY191c2JfZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgdWRjX3VzYl9lcCwgdXNiX2VwKTsKIAllcCA9IHVkY191c2JfZXAtPnB4YV9lcDsKIAlpZiAoIWVwIHx8IGlzX2VwMChlcCkpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IHF1ZXVlZCBvbiB0aGlzIGVuZHBvaW50ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7Ci0JCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKSB7CisJCQlyZXFfZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJCQlyYyA9IDA7CiAJCQlicmVhazsKKwkJfQogCX0KIAotCXJjID0gLUVJTlZBTDsKLQlpZiAoJnJlcS0+cmVxICE9IF9yZXEpCi0JCWdvdG8gb3V0OwotCi0JcmMgPSAwOwotCXJlcV9kb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKLW91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KQEAgLTE0NzEsNiArMTQ2NiwzMiBAQAogCS5maWZvX2ZsdXNoCT0gcHhhX2VwX2ZpZm9fZmx1c2gsCiB9OwogCisvKioKKyAqIGRwbHVzX3B1bGx1cCAtIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBwdWxsdXAgcmVzaXN0b3IgdG8gRCsgcGluCisgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBAb246IDAgaWYgZGlzY29ubmVjdCBwdWxsdXAgcmVzaXN0b3IsIDEgb3RoZXJ3aXNlCisgKiBDb250ZXh0OiBhbnkKKyAqCisgKiBIYW5kbGUgRCsgcHVsbHVwIHJlc2lzdG9yLCBtYWtlIHRoZSBkZXZpY2UgdmlzaWJsZSB0byB0aGUgdXNiIGJ1cywgYW5kCisgKiBkZWNsYXJlIGl0IGFzIGEgZnVsbCBzcGVlZCB1c2IgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGRwbHVzX3B1bGx1cChzdHJ1Y3QgcHhhX3VkYyAqdWRjLCBpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXApKQorCQkJZ3Bpb19zZXRfdmFsdWUodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCwKKwkJCQkgICAgICAgIXVkYy0+bWFjaC0+Z3Bpb19wdWxsdXBfaW52ZXJ0ZWQpOworCQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfQ09OTkVDVCk7CisJfSBlbHNlIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCkpCisJCQlncGlvX3NldF92YWx1ZSh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwLAorCQkJCSAgICAgICB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwX2ludmVydGVkKTsKKwkJaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpOworCX0KKwl1ZGMtPnB1bGx1cF9vbiA9IG9uOworfQogCiAvKioKICAqIHB4YV91ZGNfZ2V0X2ZyYW1lIC0gUmV0dXJucyB1c2IgZnJhbWUgbnVtYmVyCkBAIC0xNTAwLDIxICsxNTIxLDE0NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CisKKy8qKgorICogc2hvdWxkX2VuYWJsZV91ZGMgLSBUZWxscyBpZiBVREMgc2hvdWxkIGJlIGVuYWJsZWQKKyAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIENvbnRleHQ6IGFueQorICoKKyAqIFRoZSBVREMgc2hvdWxkIGJlIGVuYWJsZWQgaWYgOgorCisgKiAgLSB0aGUgcHVsbHVwIHJlc2lzdG9yIGlzIGNvbm5lY3RlZAorICogIC0gYW5kIGEgZ2FkZ2V0IGRyaXZlciBpcyBib3VuZAorICogIC0gYW5kIHZidXMgaXMgc2Vuc2VkIChvciBubyB2YnVzIHNlbnNlIGlzIGF2YWlsYWJsZSkKKyAqCisgKiBSZXR1cm5zIDEgaWYgVURDIHNob3VsZCBiZSBlbmFibGVkLCAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHNob3VsZF9lbmFibGVfdWRjKHN0cnVjdCBweGFfdWRjICp1ZGMpCit7CisJaW50IHB1dF9vbjsKKworCXB1dF9vbiA9ICgodWRjLT5wdWxsdXBfb24pICYmICh1ZGMtPmRyaXZlcikpOworCXB1dF9vbiAmPSAoKHVkYy0+dmJ1c19zZW5zZWQpIHx8ICghdWRjLT50cmFuc2NlaXZlcikpOworCXJldHVybiBwdXRfb247Cit9CisKKy8qKgorICogc2hvdWxkX2Rpc2FibGVfdWRjIC0gVGVsbHMgaWYgVURDIHNob3VsZCBiZSBkaXNhYmxlZAorICogQHVkYzogdWRjIGRldmljZQorICogQ29udGV4dDogYW55CisgKgorICogVGhlIFVEQyBzaG91bGQgYmUgZGlzYWJsZWQgaWYgOgorICogIC0gdGhlIHB1bGx1cCByZXNpc3RvciBpcyBub3QgY29ubmVjdGVkCisgKiAgLSBvciBubyBnYWRnZXQgZHJpdmVyIGlzIGJvdW5kCisgKiAgLSBvciBubyB2YnVzIGlzIHNlbnNlZCAod2hlbiB2YnVzIHNlc2luZyBpcyBhdmFpbGFibGUpCisgKgorICogUmV0dXJucyAxIGlmIFVEQyBzaG91bGQgYmUgZGlzYWJsZWQKKyAqLworc3RhdGljIGludCBzaG91bGRfZGlzYWJsZV91ZGMoc3RydWN0IHB4YV91ZGMgKnVkYykKK3sKKwlpbnQgcHV0X29mZjsKKworCXB1dF9vZmYgPSAoKCF1ZGMtPnB1bGx1cF9vbikgfHwgKCF1ZGMtPmRyaXZlcikpOworCXB1dF9vZmYgfD0gKCghdWRjLT52YnVzX3NlbnNlZCkgJiYgKHVkYy0+dHJhbnNjZWl2ZXIpKTsKKwlyZXR1cm4gcHV0X29mZjsKK30KKworLyoqCisgKiBweGFfdWRjX3B1bGx1cCAtIE9mZmVyIG1hbnVhbCBEKyBwdWxsdXAgY29udHJvbAorICogQF9nYWRnZXQ6IHVzYiBnYWRnZXQgdXNpbmcgdGhlIGNvbnRyb2wKKyAqIEBpc19hY3RpdmU6IDAgaWYgZGlzY29ubmVjdCwgZWxzZSBjb25uZWN0IEQrIHB1bGx1cCByZXNpc3RvcgorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV0dXJucyAwIGlmIE9LLCAtRU9QTk9UU1VQUCBpZiB1ZGMgZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIEQrIHB1bGx1cAorICovCitzdGF0aWMgaW50IHB4YV91ZGNfcHVsbHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBweGFfdWRjICp1ZGMgPSB0b19nYWRnZXRfdWRjKF9nYWRnZXQpOworCisJaWYgKCFncGlvX2lzX3ZhbGlkKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXApICYmICF1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlkcGx1c19wdWxsdXAodWRjLCBpc19hY3RpdmUpOworCisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKKwlpZiAoc2hvdWxkX2Rpc2FibGVfdWRjKHVkYykpCisJCXVkY19kaXNhYmxlKHVkYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CitzdGF0aWMgdm9pZCB1ZGNfZGlzYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKKworLyoqCisgKiBweGFfdWRjX3ZidXNfc2Vzc2lvbiAtIENhbGxlZCBieSBleHRlcm5hbCB0cmFuc2NlaXZlciB0byBlbmFibGUvZGlzYWJsZSB1ZGMKKyAqIEBfZ2FkZ2V0OiB1c2IgZ2FkZ2V0CisgKiBAaXNfYWN0aXZlOiAwIGlmIHNob3VsZCBkaXNhYmxlIHRoZSB1ZGMsIDEgaWYgc2hvdWxkIGVuYWJsZQorICoKKyAqIEVuYWJsZXMgdGhlIHVkYywgYW5kIG9wdGlvbm5hbHkgYWN0aXZhdGVzIEQrIHB1bGx1cCByZXNpc3Rvci4gT3IgZGlzYWJsZXMgdGhlCisgKiB1ZGMsIGFuZCBkZWFjdGl2YXRlcyBEKyBwdWxsdXAgcmVzaXN0b3IuCisgKgorICogUmV0dXJucyAwCisgKi8KK3N0YXRpYyBpbnQgcHhhX3VkY192YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHRvX2dhZGdldF91ZGMoX2dhZGdldCk7CisKKwl1ZGMtPnZidXNfc2Vuc2VkID0gaXNfYWN0aXZlOworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CisJaWYgKHNob3VsZF9kaXNhYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZGlzYWJsZSh1ZGMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHhhX3VkY192YnVzX2RyYXcgLSBDYWxsZWQgYnkgZ2FkZ2V0IGRyaXZlciBhZnRlciBTRVRfQ09ORklHVVJBVElPTiBjb21wbGV0ZWQKKyAqIEBfZ2FkZ2V0OiB1c2IgZ2FkZ2V0CisgKiBAbUE6IGN1cnJlbnQgZHJhd24KKyAqCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBDYWxsZWQgYWZ0ZXIgYSBjb25maWd1cmF0aW9uIHdhcyBjaG9zZW4gYnkgYSBVU0IgaG9zdCwgdG8gaW5mb3JtIGhvdyBtdWNoCisgKiBjdXJyZW50IGNhbiBiZSBkcmF3biBieSB0aGUgZGV2aWNlIGZyb20gVkJ1cyBsaW5lLgorICoKKyAqIFJldHVybnMgMCBvciAtRU9QTk9UU1VQUCBpZiBubyB0cmFuc2NlaXZlciBpcyBoYW5kbGluZyB0aGUgdWRjCisgKi8KK3N0YXRpYyBpbnQgcHhhX3VkY192YnVzX2RyYXcoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCXN0cnVjdCBweGFfdWRjICp1ZGM7CisKKwl1ZGMgPSB0b19nYWRnZXRfdWRjKF9nYWRnZXQpOworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQlyZXR1cm4gb3RnX3NldF9wb3dlcih1ZGMtPnRyYW5zY2VpdmVyLCBtQSk7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHB4YV91ZGNfb3BzID0gewogCS5nZXRfZnJhbWUJPSBweGFfdWRjX2dldF9mcmFtZSwKIAkud2FrZXVwCQk9IHB4YV91ZGNfd2FrZXVwLAotCS8qIGN1cnJlbnQgdmVyc2lvbnMgbXVzdCBhbHdheXMgYmUgc2VsZi1wb3dlcmVkICovCisJLnB1bGx1cAkJPSBweGFfdWRjX3B1bGx1cCwKKwkudmJ1c19zZXNzaW9uCT0gcHhhX3VkY192YnVzX3Nlc3Npb24sCisJLnZidXNfZHJhdwk9IHB4YV91ZGNfdmJ1c19kcmF3LAogfTsKIAogLyoqCiAgKiB1ZGNfZGlzYWJsZSAtIGRpc2FibGUgdWRjIGRldmljZSBjb250cm9sbGVyCiAgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBDb250ZXh0OiBhbnkKICAqCiAgKiBEaXNhYmxlcyB0aGUgdWRjIGRldmljZSA6IGRpc2FibGVzIGNsb2NrcywgdWRjIGludGVycnVwdHMsIGNvbnRyb2wgZW5kcG9pbnQKICAqIGludGVycnVwdHMuCiAgKi8KIHN0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpCiB7CisJaWYgKCF1ZGMtPmVuYWJsZWQpCisJCXJldHVybjsKKwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IwLCAwKTsKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMSwgMCk7CiAKQEAgLTE1MjMsOCArMTY2OCw4IEBACiAKIAllcDBfaWRsZSh1ZGMpOwogCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047Ci0JaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCi0JCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVCk7CisKKwl1ZGMtPmVuYWJsZWQgPSAwOwogfQogCiAvKioKQEAgLTE1NTUsMTAgKzE3MDAsOSBAQAogCX0KIAogCS8qIFVTQiBlbmRwb2ludHMgaW5pdCAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9VU0JfRU5EUE9JTlRTOyBpKyspCi0JCWlmIChpICE9IDApCi0JCQlsaXN0X2FkZF90YWlsKCZkZXYtPnVkY191c2JfZXBbaV0udXNiX2VwLmVwX2xpc3QsCi0JCQkJCSZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlmb3IgKGkgPSAxOyBpIDwgTlJfVVNCX0VORFBPSU5UUzsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZkZXYtPnVkY191c2JfZXBbaV0udXNiX2VwLmVwX2xpc3QsCisJCQkJJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOwogfQogCiAvKioKQEAgLTE1NzAsNiArMTcxNCw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IHB4YV91ZGMgKnVkYykKIHsKKwlpZiAodWRjLT5lbmFibGVkKQorCQlyZXR1cm47CisKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMCwgMCk7CiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjEsIDApOwogCXVkY19jbGVhcl9tYXNrX1VEQ0NSKHVkYywgVURDQ1JfVURFKTsKQEAgLTE1OTgsOSArMTc0NSw3IEBACiAJLyogZW5hYmxlIGVwMCBpcnFzICovCiAJcGlvX2lycV9lbmFibGUoJnVkYy0+cHhhX2VwWzBdKTsKIAotCWRldl9pbmZvKHVkYy0+ZGV2LCAiVURDIGNvbm5lY3RpbmdcbiIpOwotCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQotCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0NPTk5FQ1QpOworCXVkYy0+ZW5hYmxlZCA9IDE7CiB9CiAKIC8qKgpAQCAtMTYxMiw2ICsxNzU3LDkgQEAKICAqIHVzYiB0cmFmZmljIGZvbGxvd3MgdW50aWwgYSBkaXNjb25uZWN0IGlzIHJlcG9ydGVkLiAgVGhlbiBhIGhvc3QgbWF5IGNvbm5lY3QKICAqIGFnYWluLCBvciB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgogICoKKyAqIE5vdGUgdGhhdCB0aGUgdWRjIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQuIENoZWNrIGZ1bmN0aW9uCisgKiBzaG91bGRfZW5hYmxlX3VkYygpLgorICoKICAqIFJldHVybnMgMCBpZiBubyBlcnJvciwgLUVJTlZBTCwgLUVOT0RFViwgLUVCVVNZIG90aGVyd2lzZQogICovCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCkBAIC0xNjMwLDYgKzE3NzgsNyBAQAogCS8qIGZpcnN0IGhvb2sgdXAgdGhlIGRyaXZlciAuLi4gKi8KIAl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCWRwbHVzX3B1bGx1cCh1ZGMsIDEpOwogCiAJcmV0dmFsID0gZGV2aWNlX2FkZCgmdWRjLT5nYWRnZXQuZGV2KTsKIAlpZiAocmV0dmFsKSB7CkBAIC0xNjQ1LDkgKzE3OTQsMjEgQEAKIAlkZXZfZGJnKHVkYy0+ZGV2LCAicmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCiAJCWRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCi0JdWRjX2VuYWJsZSh1ZGMpOworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKSB7CisJCXJldHZhbCA9IG90Z19zZXRfcGVyaXBoZXJhbCh1ZGMtPnRyYW5zY2VpdmVyLCAmdWRjLT5nYWRnZXQpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAiY2FuJ3QgYmluZCB0byB0cmFuc2NlaXZlclxuIik7CisJCQlnb3RvIHRyYW5zY2VpdmVyX2ZhaWw7CisJCX0KKwl9CisKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOwogCXJldHVybiAwOwogCit0cmFuc2NlaXZlcl9mYWlsOgorCWlmIChkcml2ZXItPnVuYmluZCkKKwkJZHJpdmVyLT51bmJpbmQoJnVkYy0+Z2FkZ2V0KTsKIGJpbmRfZmFpbDoKIAlkZXZpY2VfZGVsKCZ1ZGMtPmdhZGdldC5kZXYpOwogYWRkX2ZhaWw6CkBAIC0xNjk5LDE0ICsxODYwLDE3IEBACiAKIAlzdG9wX2FjdGl2aXR5KHVkYywgZHJpdmVyKTsKIAl1ZGNfZGlzYWJsZSh1ZGMpOworCWRwbHVzX3B1bGx1cCh1ZGMsIDApOwogCiAJZHJpdmVyLT51bmJpbmQoJnVkYy0+Z2FkZ2V0KTsKIAl1ZGMtPmRyaXZlciA9IE5VTEw7CiAKIAlkZXZpY2VfZGVsKCZ1ZGMtPmdhZGdldC5kZXYpOwotCiAJZGV2X2luZm8odWRjLT5kZXYsICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAogCQkgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJcmV0dXJuIG90Z19zZXRfcGVyaXBoZXJhbCh1ZGMtPnRyYW5zY2VpdmVyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CkBAIC0xODIzLDE0ICsxOTg3LDE0IEBACiAJc3RydWN0IHB4YTI3eF9yZXF1ZXN0CSpyZXEgPSBOVUxMOwogCWludAkJCWNvbXBsZXRlZCA9IDA7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCwgcXVldWUpOworCiAJdWRjY3NyMCA9IHVkY19lcF9yZWFkbChlcCwgVURDQ1NSKTsKIAllcF9kYmcoZXAsICJzdGF0ZT0lcywgcmVxPSVwLCB1ZGNjc3IwPTB4JTAzeCwgdWRjYmNyPSVkLCBpcnFfbXNrPSV4XG4iLAogCQlFUDBfU1ROQU1FKHVkYyksIHJlcSwgdWRjY3NyMCwgdWRjX2VwX3JlYWRsKGVwLCBVRENCQ1IpLAogCQkoZmlmb19pcnEgPDwgMSB8IG9wY19pcnEpKTsKIAotCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKLQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0LCBxdWV1ZSk7Ci0KIAlpZiAodWRjY3NyMCAmIFVEQ0NTUjBfU1NUKSB7CiAJCWVwX2RiZyhlcCwgImNsZWFyaW5nIHN0YWxsIHN0YXR1c1xuIik7CiAJCW51a2UoZXAsIC1FUElQRSk7CkBAIC0yMjEyLDcgKzIzNzYsNyBAQAogewogCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKIAlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gJm1lbW9yeTsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwLCBncGlvOwogCiAJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZWdzKQpAQCAtMjIyMyw2ICsyMzg3LDIwIEBACiAKIAl1ZGMtPmRldiA9ICZwZGV2LT5kZXY7CiAJdWRjLT5tYWNoID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdWRjLT50cmFuc2NlaXZlciA9IG90Z19nZXRfdHJhbnNjZWl2ZXIoKTsKKworCWdwaW8gPSB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwOworCWlmIChncGlvX2lzX3ZhbGlkKGdwaW8pKSB7CisJCXJldHZhbCA9IGdwaW9fcmVxdWVzdChncGlvLCAiVVNCIEQrIHB1bGx1cCIpOworCQlpZiAocmV0dmFsID09IDApCisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywKKwkJCQkgICAgICAgdWRjLT5tYWNoLT5ncGlvX3B1bGx1cF9pbnZlcnRlZCk7CisJfQorCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgcmVxdWVzdCBncGlvICVkIDogJWRcbiIsCisJCQlncGlvLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCXVkYy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHVkYy0+Y2xrKSkgewpAQCAtMjI0MCw2ICsyNDE4LDcgQEAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmdWRjLT5nYWRnZXQuZGV2KTsKIAl1ZGMtPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAl1ZGMtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBOVUxMOworCXVkYy0+dmJ1c19zZW5zZWQgPSAwOwogCiAJdGhlX2NvbnRyb2xsZXIgPSB1ZGM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdWRjKTsKQEAgLTIyNzMsMTQgKzI0NTIsMjEgQEAKIHN0YXRpYyBpbnQgX19leGl0IHB4YV91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYpCiB7CiAJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKF9kZXYpOworCWludCBncGlvID0gdWRjLT5tYWNoLT5ncGlvX3B1bGx1cDsKIAogCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIodWRjLT5kcml2ZXIpOwogCWZyZWVfaXJxKHVkYy0+aXJxLCB1ZGMpOwogCXB4YV9jbGVhbnVwX2RlYnVnZnModWRjKTsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkKKwkJZ3Bpb19mcmVlKGdwaW8pOwogCisJb3RnX3B1dF90cmFuc2NlaXZlcih1ZGMtPnRyYW5zY2VpdmVyKTsKKworCXVkYy0+dHJhbnNjZWl2ZXIgPSBOVUxMOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKF9kZXYsIE5VTEwpOwogCXRoZV9jb250cm9sbGVyID0gTlVMTDsKIAljbGtfcHV0KHVkYy0+Y2xrKTsKKwlpb3VubWFwKHVkYy0+cmVncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMTksNiArMjUwNSw4IEBACiAJfQogCiAJdWRjX2Rpc2FibGUodWRjKTsKKwl1ZGMtPnB1bGx1cF9yZXN1bWUgPSB1ZGMtPnB1bGx1cF9vbjsKKwlkcGx1c19wdWxsdXAodWRjLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM0Niw3ICsyNTM0LDkgQEAKIAkJCQllcC0+dWRjY3NyX3ZhbHVlLCBlcC0+dWRjY3JfdmFsdWUpOwogCX0KIAotCXVkY19lbmFibGUodWRjKTsKKwlkcGx1c19wdWxsdXAodWRjLCB1ZGMtPnB1bGx1cF9yZXN1bWUpOworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CiAJLyoKIAkgKiBXZSBkbyBub3QgaGFuZGxlIE9URyB5ZXQuCiAJICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCmluZGV4IDFkMWI3OTM2Li5kYjU4MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAKIC8qCiAgKiBSZWdpc3RlciBkZWZpbml0aW9ucwpAQCAtNDIxLDEwICs0MjIsMTQgQEAKICAqIEBkcml2ZXI6IGJvdW5kIGdhZGdldCAoemVybywgZ19ldGhlciwgZ19maWxlX3N0b3JhZ2UsIC4uLikKICAqIEBkZXY6IGRldmljZQogICogQG1hY2g6IG1hY2hpbmUgaW5mbywgdXNlZCB0byBhY3RpdmF0ZSBzcGVjaWZpYyBHUElPCisgKiBAdHJhbnNjZWl2ZXI6IGV4dGVybmFsIHRyYW5zY2VpdmVyIHRvIGhhbmRsZSB2YnVzIHNlbnNlIGFuZCBEKyBwdWxsdXAKICAqIEBlcDBzdGF0ZTogY29udHJvbCBlbmRwb2ludCBzdGF0ZSBtYWNoaW5lIHN0YXRlCiAgKiBAc3RhdHM6IHN0YXRpc3RpY3Mgb24gdWRjIHVzYWdlCiAgKiBAdWRjX3VzYl9lcDogYXJyYXkgb2YgdXNiIGVuZHBvaW50cyBvZmZlcmVkIGJ5IHRoZSBnYWRnZXQKICAqIEBweGFfZXA6IGFycmF5IG9mIHB4YSBhdmFpbGFibGUgZW5kcG9pbnRzCisgKiBAZW5hYmxlZDogVURDIHdhcyBlbmFibGVkIGJ5IGEgcHJldmlvdXMgdWRjX2VuYWJsZSgpCisgKiBAcHVsbHVwX29uOiBpZiBwdWxsdXAgcmVzaXN0b3IgY29ubmVjdGVkIHRvIEQrIHBpbgorICogQHB1bGx1cF9yZXN1bWU6IGlmIHB1bGx1cCByZXNpc3RvciBzaG91bGQgYmUgY29ubmVjdGVkIHRvIEQrIHBpbiBvbiByZXN1bWUKICAqIEBjb25maWc6IFVEQyBhY3RpdmUgY29uZmlndXJhdGlvbgogICogQGxhc3RfaW50ZXJmYWNlOiBVREMgaW50ZXJmYWNlIG9mIHRoZSBsYXN0IFNFVF9JTlRFUkZBQ0UgaG9zdCByZXF1ZXN0CiAgKiBAbGFzdF9hbHRlcm5hdGU6IFVEQyBhbHRzZXR0aW5nIG9mIHRoZSBsYXN0IFNFVF9JTlRFUkZBQ0UgaG9zdCByZXF1ZXN0CkBAIC00NDMsNiArNDQ4LDcgQEAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJCSpkcml2ZXI7CiAJc3RydWN0IGRldmljZQkJCQkqZGV2OwogCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2g7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcgkJCSp0cmFuc2NlaXZlcjsKIAogCWVudW0gZXAwX3N0YXRlCQkJCWVwMHN0YXRlOwogCXN0cnVjdCB1ZGNfc3RhdHMJCQlzdGF0czsKQEAgLTQ1MCw2ICs0NTYsMTAgQEAKIAlzdHJ1Y3QgdWRjX3VzYl9lcAkJCXVkY191c2JfZXBbTlJfVVNCX0VORFBPSU5UU107CiAJc3RydWN0IHB4YV9lcAkJCQlweGFfZXBbTlJfUFhBX0VORFBPSU5UU107CiAKKwl1bnNpZ25lZAkJCQllbmFibGVkOjE7CisJdW5zaWduZWQJCQkJcHVsbHVwX29uOjE7CisJdW5zaWduZWQJCQkJcHVsbHVwX3Jlc3VtZToxOworCXVuc2lnbmVkCQkJCXZidXNfc2Vuc2VkOjE7CiAJdW5zaWduZWQJCQkJY29uZmlnOjI7CiAJdW5zaWduZWQJCQkJbGFzdF9pbnRlcmZhY2U6MzsKIAl1bnNpZ25lZAkJCQlsYXN0X2FsdGVybmF0ZTozOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwppbmRleCBkMjg2MGE4Li4yYjQ2NjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJaW50CQkJaSwgY291bnQ7CiAJcm5kaXNfcXVlcnlfY21wbHRfdHlwZQkqcmVzcDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCSpzdGF0czsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkqc3RhdHM7CiAKIAlpZiAoIXIpIHJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqKSByLT5idWY7CkBAIC0xOTMsMTAgKzE5Myw3IEBACiAJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMTYpOwogCiAJbmV0ID0gcm5kaXNfcGVyX2Rldl9wYXJhbXNbY29uZmlnTnJdLmRldjsKLQlpZiAobmV0LT5nZXRfc3RhdHMpCi0JCXN0YXRzID0gbmV0LT5nZXRfc3RhdHMobmV0KTsKLQllbHNlCi0JCXN0YXRzID0gTlVMTDsKKwlzdGF0cyA9IGRldl9nZXRfc3RhdHMobmV0KTsKIAogCXN3aXRjaCAoT0lEKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwppbmRleCAzNzg3OWFmLi5mNDZhNjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCkBAIC04NywxMiArODcsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9ERVZJQ0VfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLyogLmJEZXZpY2VDbGFzcyA9IGYodXNlX2FjbSkgKi8KIAkuYkRldmljZVN1YkNsYXNzID0JMCwKIAkuYkRldmljZVByb3RvY29sID0JMCwKIAkvKiAuYk1heFBhY2tldFNpemUwID0gZihoYXJkd2FyZSkgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRU5ET1JfSUQpLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihHU19WRU5ET1JfSUQpLAogCS8qIC5pZFByb2R1Y3QgPQlmKHVzZV9hY20pICovCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJcHJfd2FybmluZygiZ3NfYmluZDogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAogCQkJZ2FkZ2V0LT5uYW1lKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCAweDAwOTkpOworCQkJY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCAweDAwOTkpOwogCX0KIAogCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKQEAgLTI1NSwxOSArMjU1LDE5IEBACiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAyOwogCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQ09NTTsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19QUk9EVUNUX0lEKTsKKwkJCQljcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CiAJfSBlbHNlIGlmICh1c2Vfb2JleCkgewogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgT0JFWCBjb25maWciOwogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMzsKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOworCQkJY3B1X3RvX2xlMTYoR1NfQ0RDX09CRVhfUFJPRFVDVF9JRCk7CiAJfSBlbHNlIHsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiR2VuZXJpYyBTZXJpYWwgY29uZmlnIjsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDE7CiAJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpOworCQkJCWNwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpOwogCX0KIAlzdHJpbmdzX2RldltTVFJJTkdfREVTQ1JJUFRJT05fSURYXS5zID0gc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKaW5kZXggNTNkNTkyOC4uMGE0ZDk5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKQEAgLTEwOTIsNyArMTA5Miw3IEBACiAJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKIAlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwOwogCi0JY29kaW5nLmR3RFRFUmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoOTYwMCk7CisJY29kaW5nLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKDk2MDApOwogCWNvZGluZy5iQ2hhckZvcm1hdCA9IDg7CiAJY29kaW5nLmJQYXJpdHlUeXBlID0gVVNCX0NEQ19OT19QQVJJVFk7CiAJY29kaW5nLmJEYXRhQml0cyA9IFVTQl9DRENfMV9TVE9QX0JJVFM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCAzNjFkOTY1Li4yZDc3MjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTEwMiwyMiArMTAyLDMyIEBACiAjaWZuZGVmCUNPTkZJR19VU0JfWkVST19ITlBURVNUCiAjZGVmaW5lIERSSVZFUl9WRU5ET1JfTlVNCTB4MDUyNQkJLyogTmV0Q2hpcCAqLwogI2RlZmluZSBEUklWRVJfUFJPRFVDVF9OVU0JMHhhNGEwCQkvKiBMaW51eC1VU0IgIkdhZGdldCBaZXJvIiAqLworI2RlZmluZSBERUZBVUxUX0FVVE9SRVNVTUUJMAogI2Vsc2UKICNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgxYTBhCQkvKiBPVEcgdGVzdCBkZXZpY2UgSURzICovCiAjZGVmaW5lIERSSVZFUl9QUk9EVUNUX05VTQkweGJhZGQKKyNkZWZpbmUgREVGQVVMVF9BVVRPUkVTVU1FCTUKICNlbmRpZgogCisvKiBJZiB0aGUgb3B0aW9uYWwgImF1dG9yZXN1bWUiIG1vZGUgaXMgZW5hYmxlZCwgaXQgcHJvdmlkZXMgZ29vZAorICogZnVuY3Rpb25hbCBjb3ZlcmFnZSBmb3IgdGhlICJVU0JDViIgdGVzdCBoYXJuZXNzIGZyb20gVVNCLUlGLgorICogSXQncyBhbHdheXMgc2V0IGlmIE9URyBtb2RlIGlzIGVuYWJsZWQuCisgKi8KK3Vuc2lnbmVkIGF1dG9yZXN1bWUgPSBERUZBVUxUX0FVVE9SRVNVTUU7Cittb2R1bGVfcGFyYW0oYXV0b3Jlc3VtZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9yZXN1bWUsICJ6ZXJvLCBvciBzZWNvbmRzIGJlZm9yZSByZW1vdGUgd2FrZXVwIik7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19WRU5ET1JfU1BFQywKIAotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMiwKIH07CiAKQEAgLTIxMiw2ICsyMjIsNDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0CWF1dG9yZXN1bWVfdGltZXI7CisKK3N0YXRpYyB2b2lkIHplcm9fYXV0b3Jlc3VtZSh1bnNpZ25lZCBsb25nIF9jKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9ICh2b2lkICopX2M7CisJc3RydWN0IHVzYl9nYWRnZXQJCSpnID0gY2Rldi0+Z2FkZ2V0OworCisJLyogdW5jb25maWd1cmVkIGRldmljZXMgY2FuJ3QgaXNzdWUgd2FrZXVwcyAqLworCWlmICghY2Rldi0+Y29uZmlnKQorCQlyZXR1cm47CisKKwkvKiBOb3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCisJICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmc7IGxpa2VseQorCSAqIGJlY2F1c2Ugb2Ygc29tZSBkaXJlY3QgdXNlciByZXF1ZXN0LgorCSAqLworCWlmIChnLT5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikgeworCQlpbnQgc3RhdHVzID0gdXNiX2dhZGdldF93YWtldXAoZyk7CisJCUlORk8oY2RldiwgIiVzIC0tPiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB6ZXJvX3N1c3BlbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWlmIChjZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm47CisKKwlpZiAoYXV0b3Jlc3VtZSkgeworCQltb2RfdGltZXIoJmF1dG9yZXN1bWVfdGltZXIsIGppZmZpZXMgKyAoSFogKiBhdXRvcmVzdW1lKSk7CisJCURCRyhjZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOworCX0gZWxzZQorCQlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIHplcm9fcmVzdW1lKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGVsX3RpbWVyKCZhdXRvcmVzdW1lX3RpbWVyKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIGludCBfX2luaXQgemVyb19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKIAlpbnQJCQlnY251bTsKQEAgLTIzOSwxNyArMjkwLDE5IEBACiAJc3RyaW5nc19kZXZbU1RSSU5HX1NFUklBTF9JRFhdLmlkID0gaWQ7CiAJZGV2aWNlX2Rlc2MuaVNlcmlhbE51bWJlciA9IGlkOwogCisJc2V0dXBfdGltZXIoJmF1dG9yZXN1bWVfdGltZXIsIHplcm9fYXV0b3Jlc3VtZSwgKHVuc2lnbmVkIGxvbmcpIGNkZXYpOworCiAJLyogUmVnaXN0ZXIgcHJpbWFyeSwgdGhlbiBzZWNvbmRhcnkgY29uZmlndXJhdGlvbi4gIE5vdGUgdGhhdAogCSAqIFNIMyBvbmx5IGFsbG93cyBvbmUgY29uZmlnLi4uCiAJICovCiAJaWYgKGxvb3BkZWZhdWx0KSB7Ci0JCWxvb3BiYWNrX2FkZChjZGV2KTsKKwkJbG9vcGJhY2tfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJCWlmICghZ2FkZ2V0X2lzX3NoKGdhZGdldCkpCi0JCQlzb3VyY2VzaW5rX2FkZChjZGV2KTsKKwkJCXNvdXJjZXNpbmtfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJfSBlbHNlIHsKLQkJc291cmNlc2lua19hZGQoY2Rldik7CisJCXNvdXJjZXNpbmtfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJCWlmICghZ2FkZ2V0X2lzX3NoKGdhZGdldCkpCi0JCQlsb29wYmFja19hZGQoY2Rldik7CisJCQlsb29wYmFja19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAl9CiAKIAlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKQEAgLTI2NSw3ICszMTgsNyBAQAogCQkgKi8KIAkJcHJfd2FybmluZygiJXM6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKIAkJCWxvbmduYW1lLCBnYWRnZXQtPm5hbWUpOwotCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4OTk5OSk7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KDB4OTk5OSk7CiAJfQogCiAKQEAgLTI3OCwxMSArMzMxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgemVyb191bmJpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWRlbF90aW1lcl9zeW5jKCZhdXRvcmVzdW1lX3RpbWVyKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciB6ZXJvX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiemVybyIsCiAJLmRldgkJPSAmZGV2aWNlX2Rlc2MsCiAJLnN0cmluZ3MJPSBkZXZfc3RyaW5ncywKIAkuYmluZAkJPSB6ZXJvX2JpbmQsCisJLnVuYmluZAkJPSB6ZXJvX3VuYmluZCwKKwkuc3VzcGVuZAk9IHplcm9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHplcm9fcmVzdW1lLAogfTsKIAogTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyYzYzYmZiLi44NDU0NzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0yNCwxMCArMjQsNyBAQAogCSAgVGhlIEVuaGFuY2VkIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKEVIQ0kpIGlzIHN0YW5kYXJkIGZvciBVU0IgMi4wCiAJICAiaGlnaCBzcGVlZCIgKDQ4MCBNYml0L3NlYywgNjAgTWJ5dGUvc2VjKSBob3N0IGNvbnRyb2xsZXIgaGFyZHdhcmUuCiAJICBJZiB5b3VyIFVTQiBob3N0IGNvbnRyb2xsZXIgc3VwcG9ydHMgVVNCIDIuMCwgeW91IHdpbGwgbGlrZWx5IHdhbnQgdG8KLQkgIGNvbmZpZ3VyZSB0aGlzIEhvc3QgQ29udHJvbGxlciBEcml2ZXIuICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIAotCSAgdGhlIHByaW1hcnkgaW1wbGVtZW50YXRpb24gb2YgRUhDSSBpcyBhIGNoaXAgZnJvbSBORUMsIHdpZGVseSBhdmFpbGFibGUKLQkgIGluIGFkZC1vbiBQQ0kgY2FyZHMsIGJ1dCBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIHRoZSB3b3JrcyBmcm9tIG90aGVyIAotCSAgdmVuZG9ycyBpbmNsdWRpbmcgSW50ZWwgYW5kIFBoaWxpcHMuICBNb3RoZXJib2FyZCBzdXBwb3J0IGlzIGFwcGVhcmluZy4KKwkgIGNvbmZpZ3VyZSB0aGlzIEhvc3QgQ29udHJvbGxlciBEcml2ZXIuCiAKIAkgIEVIQ0kgY29udHJvbGxlcnMgYXJlIHBhY2thZ2VkIHdpdGggImNvbXBhbmlvbiIgaG9zdCBjb250cm9sbGVycyAoT0hDSQogCSAgb3IgVUhDSSkgdG8gaGFuZGxlIFVTQiAxLjEgZGV2aWNlcyBjb25uZWN0ZWQgdG8gcm9vdCBodWIgcG9ydHMuICBQb3J0cwpAQCAtMTIzLDcgKzEyMCw3IEBACiAKIGNvbmZpZyBVU0JfSVNQMTc2MF9IQ0QKIAl0cmlzdGF0ZSAiSVNQIDE3NjAgSENEIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMICYmIChQQ0kgfHwgUFBDX09GKQorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFRoZSBJU1AxNzYwIGNoaXAgaXMgYSBVU0IgMi4wIGhvc3QgY29udHJvbGxlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IDQ3MjVkMTUuLmYyNjE4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTExMCw2ICsxMTAsNDIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQKK3RpbWVyX2FjdGlvbihzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGVudW0gZWhjaV90aW1lcl9hY3Rpb24gYWN0aW9uKQoreworCS8qIERvbid0IG92ZXJyaWRlIHRpbWVvdXRzIHdoaWNoIHNocmluayBvciAobGF0ZXIpIGRpc2FibGUKKwkgKiB0aGUgYXN5bmMgcmluZzsganVzdCB0aGUgSS9PIHdhdGNoZG9nLiAgTm90ZSB0aGF0IGlmIGEKKwkgKiBTSFJJTksgd2VyZSBwZW5kaW5nLCBPRkYgd291bGQgbmV2ZXIgYmUgcmVxdWVzdGVkLgorCSAqLworCWlmICh0aW1lcl9wZW5kaW5nKCZlaGNpLT53YXRjaGRvZykKKwkJCSYmICgoQklUKFRJTUVSX0FTWU5DX1NIUklOSykgfCBCSVQoVElNRVJfQVNZTkNfT0ZGKSkKKwkJCQkmIGVoY2ktPmFjdGlvbnMpKQorCQlyZXR1cm47CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoYWN0aW9uLCAmZWhjaS0+YWN0aW9ucykpIHsKKwkJdW5zaWduZWQgbG9uZyB0OworCisJCXN3aXRjaCAoYWN0aW9uKSB7CisJCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6CisJCQl0ID0gRUhDSV9JT19KSUZGSUVTOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgorCQkJdCA9IEVIQ0lfQVNZTkNfSklGRklFUzsKKwkJCWJyZWFrOworCQkvKiBjYXNlIFRJTUVSX0FTWU5DX1NIUklOSzogKi8KKwkJZGVmYXVsdDoKKwkJCS8qIGFkZCBhIGppZmZpZSBzaW5jZSB3ZSBzeW5jaCBhZ2FpbnN0IHRoZQorCQkJICogOCBLSHogdWZyYW1lIGNvdW50ZXIuCisJCQkgKi8KKwkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKKwkJCWJyZWFrOworCQl9CisJCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qCiAgKiBoYW5kc2hha2UgLSBzcGluIHJlYWRpbmcgaGMgdW50aWwgaGFuZHNoYWtlIGNvbXBsZXRlcyBvciBmYWlscwogICogQHB0cjogYWRkcmVzcyBvZiBoYyByZWdpc3RlciB0byBiZSByZWFkCkBAIC00ODUsNiArNTIxLDcgQEAKIAkgKiBwZXJpb2RpY19zaXplIGNhbiBzaHJpbmsgYnkgVVNCQ01EIHVwZGF0ZSBpZiBoY2NfcGFyYW1zIGFsbG93cy4KIAkgKi8KIAllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CisJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9pdGRfbGlzdCk7CiAJaWYgKChyZXR2YWwgPSBlaGNpX21lbV9pbml0KGVoY2ksIEdGUF9LRVJORUwpKSA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTQ5Nyw2ICs1MzQsNyBAQAogCiAJZWhjaS0+cmVjbGFpbSA9IE5VTEw7CiAJZWhjaS0+bmV4dF91ZnJhbWUgPSAtMTsKKwllaGNpLT5jbG9ja19mcmFtZSA9IC0xOwogCiAJLyoKIAkgKiBkZWRpY2F0ZSBhIHFoIGZvciB0aGUgYXN5bmMgcmluZyBoZWFkLCBzaW5jZSB3ZSBjb3VsZG4ndCB1bmxpbmsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYwppbmRleCAwNDMxMzk3Li4xMGQ1MjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIAogc3RhdGljIHZvaWQgZWhjaV9tZW1fY2xlYW51cCAoc3RydWN0IGVoY2lfaGNkICplaGNpKQogeworCWZyZWVfY2FjaGVkX2l0ZF9saXN0KGVoY2kpOwogCWlmIChlaGNpLT5hc3luYykKIAkJcWhfcHV0IChlaGNpLT5hc3luYyk7CiAJZWhjaS0+YXN5bmMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCmluZGV4IGJiMjFmYjAuLmFiYjlhNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKQEAgLTQzMiw3ICs0MzIsNiBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAJLnN1c3BlbmQgPQl1c2JfaGNkX3BjaV9zdXNwZW5kLAotCS5yZXN1bWVfZWFybHkgPQl1c2JfaGNkX3BjaV9yZXN1bWVfZWFybHksCiAJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKICNlbmRpZgogCS5zaHV0ZG93biA9IAl1c2JfaGNkX3BjaV9zaHV0ZG93biwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCmluZGV4IDM3MTJiOTIuLjE5NzZiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwpAQCAtMzMzLDEyICszMzMsNDAgQEAKIAkJdG9rZW4gPSBoYzMyX3RvX2NwdShlaGNpLCBxdGQtPmh3X3Rva2VuKTsKIAogCQkvKiBhbHdheXMgY2xlYW4gdXAgcXRkcyB0aGUgaGMgZGUtYWN0aXZhdGVkICovCisgcmV0cnlfeGFjdGVycjoKIAkJaWYgKCh0b2tlbiAmIFFURF9TVFNfQUNUSVZFKSA9PSAwKSB7CiAKIAkJCS8qIG9uIFNUQUxMLCBlcnJvciwgYW5kIHNob3J0IHJlYWRzIHRoaXMgdXJiIG11c3QKIAkJCSAqIGNvbXBsZXRlIGFuZCBhbGwgaXRzIHF0ZHMgbXVzdCBiZSByZWN5Y2xlZC4KIAkJCSAqLwogCQkJaWYgKCh0b2tlbiAmIFFURF9TVFNfSEFMVCkgIT0gMCkgeworCisJCQkJLyogcmV0cnkgdHJhbnNhY3Rpb24gZXJyb3JzIHVudGlsIHdlCisJCQkJICogcmVhY2ggdGhlIHNvZnR3YXJlIHhhY3RlcnIgbGltaXQKKwkJCQkgKi8KKwkJCQlpZiAoKHRva2VuICYgUVREX1NUU19YQUNUKSAmJgorCQkJCQkJUVREX0NFUlIodG9rZW4pID09IDAgJiYKKwkJCQkJCS0tcWgtPnhhY3RlcnJzID4gMCAmJgorCQkJCQkJIXVyYi0+dW5saW5rZWQpIHsKKwkJCQkJZWhjaV9kYmcoZWhjaSwKKwkiZGV0ZWN0ZWQgWGFjdEVyciBsZW4gJXp1LyV6dSByZXRyeSAlZFxuIiwKKwlxdGQtPmxlbmd0aCAtIFFURF9MRU5HVEgodG9rZW4pLCBxdGQtPmxlbmd0aCwKKwlRSF9YQUNURVJSX01BWCAtIHFoLT54YWN0ZXJycyk7CisKKwkJCQkJLyogcmVzZXQgdGhlIHRva2VuIGluIHRoZSBxdGQgYW5kIHRoZQorCQkJCQkgKiBxaCBvdmVybGF5ICh3aGljaCBzdGlsbCBjb250YWlucworCQkJCQkgKiB0aGUgcXRkKSBzbyB0aGF0IHdlIHBpY2sgdXAgZnJvbQorCQkJCQkgKiB3aGVyZSB3ZSBsZWZ0IG9mZgorCQkJCQkgKi8KKwkJCQkJdG9rZW4gJj0gflFURF9TVFNfSEFMVDsKKwkJCQkJdG9rZW4gfD0gUVREX1NUU19BQ1RJVkUgfAorCQkJCQkJCShFSENJX1RVTkVfQ0VSUiA8PCAxMCk7CisJCQkJCXF0ZC0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLAorCQkJCQkJCXRva2VuKTsKKwkJCQkJd21iKCk7CisJCQkJCXFoLT5od190b2tlbiA9IGNwdV90b19oYzMyKGVoY2ksIHRva2VuKTsKKwkJCQkJZ290byByZXRyeV94YWN0ZXJyOworCQkJCX0KIAkJCQlzdG9wcGVkID0gMTsKIAogCQkJLyogbWFnaWMgZHVtbXkgZm9yIHNvbWUgc2hvcnQgcmVhZHM7IHFoIHdvbid0IGFkdmFuY2UuCkBAIC00MjEsNiArNDQ5LDkgQEAKIAkJLyogcmVtb3ZlIHF0ZDsgaXQncyByZWN5Y2xlZCBhZnRlciBwb3NzaWJsZSB1cmIgY29tcGxldGlvbiAqLwogCQlsaXN0X2RlbCAoJnF0ZC0+cXRkX2xpc3QpOwogCQlsYXN0ID0gcXRkOworCisJCS8qIHJlaW5pdCB0aGUgeGFjdGVyciBjb3VudGVyIGZvciB0aGUgbmV4dCBxdGQgKi8KKwkJcWgtPnhhY3RlcnJzID0gUUhfWEFDVEVSUl9NQVg7CiAJfQogCiAJLyogbGFzdCB1cmIncyBjb21wbGV0aW9uIG1pZ2h0IHN0aWxsIG5lZWQgY2FsbGluZyAqLwpAQCAtODYyLDYgKzg5Myw3IEBACiAJaGVhZC0+cWhfbmV4dC5xaCA9IHFoOwogCWhlYWQtPmh3X25leHQgPSBkbWE7CiAKKwlxaC0+eGFjdGVycnMgPSBRSF9YQUNURVJSX01BWDsKIAlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9MSU5LRUQ7CiAJLyogcXRkIGNvbXBsZXRpb25zIHJlcG9ydGVkIGxhdGVyIGJ5IGludGVycnVwdCAqLwogfQpAQCAtMTA5NSw3ICsxMTI3LDggQEAKIAlwcmV2LT5xaF9uZXh0ID0gcWgtPnFoX25leHQ7CiAJd21iICgpOwogCi0JaWYgKHVubGlrZWx5IChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPT0gSENfU1RBVEVfSEFMVCkpIHsKKwkvKiBJZiB0aGUgY29udHJvbGxlciBpc24ndCBydW5uaW5nLCB3ZSBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0ICovCisJaWYgKHVubGlrZWx5KCFIQ19JU19SVU5OSU5HKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkpKSB7CiAJCS8qIGlmICh1bmxpa2VseSAocWgtPnJlY2xhaW0gIT0gMCkpCiAJCSAqCXRoaXMgd2lsbCByZWN1cnNlLCBwcm9iYWJseSBub3QgbXVjaAogCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggYTA4MWVlNi4uYWRhNWQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTU2Myw3ICs1NjMsNyBAQAogCS8vICAgYW5kIHRoaXMgcWggaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHVmcmFtZQogCS8vICAgKGFuZCBvdmVybGF5IHRva2VuIFNwbGl0WHN0YXRlIGlzIGZhbHNlPykKIAkvLyBUSEVOCi0JLy8gICBxaC0+aHdfaW5mbzEgfD0gX19jb25zdGFudF9jcHVfdG9faGMzMigxIDw8IDcgLyogImlnbm9yZSIgKi8pOworCS8vICAgcWgtPmh3X2luZm8xIHw9IGNwdV90b19oYzMyKDEgPDwgNyAvKiAiaWdub3JlIiAqLyk7CiAKIAkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIHBhcnQgb2YgZXZlcnkgbWljcm9mcmFtZSAqLwogCWlmICgocGVyaW9kID0gcWgtPnBlcmlvZCkgPT0gMCkKQEAgLTEwMDQsNyArMTAwNCw4IEBACiAKIAkJaXNfaW4gPSAoc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAweDEwIDogMDsKIAkJc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICY9IDB4MGY7Ci0JCXN0cmVhbS0+ZXAtPmhjcHJpdiA9IE5VTEw7CisJCWlmIChzdHJlYW0tPmVwKQorCQkJc3RyZWFtLT5lcC0+aGNwcml2ID0gTlVMTDsKIAogCQlpZiAoc3RyZWFtLT5yZXNjaGVkdWxlZCkgewogCQkJZWhjaV9pbmZvIChlaGNpLCAiZXAlZCVzLWlzbyByZXNjaGVkdWxlZCAiCkBAIC0xNTM1LDcgKzE1MzYsNyBAQAogCQkJCQlzdHJ1Y3QgZWhjaV9pdGQsIGl0ZF9saXN0KTsKIAkJCWxpc3RfbW92ZV90YWlsICgmaXRkLT5pdGRfbGlzdCwgJnN0cmVhbS0+dGRfbGlzdCk7CiAJCQlpdGQtPnN0cmVhbSA9IGlzb19zdHJlYW1fZ2V0IChzdHJlYW0pOwotCQkJaXRkLT51cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKwkJCWl0ZC0+dXJiID0gdXJiOwogCQkJaXRkX2luaXQgKGVoY2ksIHN0cmVhbSwgaXRkKTsKIAkJfQogCkBAIC0xNjQ0LDcgKzE2NDUsNyBAQAogCSh2b2lkKSBkaXNhYmxlX3BlcmlvZGljKGVoY2kpOwogCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKIAotCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CisJaWYgKHVubGlrZWx5KGxpc3RfaXNfc2luZ3VsYXIoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CiAJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKIAkJCQktPSBzdHJlYW0tPmJhbmR3aWR0aDsKIAkJZWhjaV92ZGJnIChlaGNpLApAQCAtMTY1MywxNCArMTY1NCwyNyBAQAogCQkJKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiKTsKIAl9CiAJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7Ci0JLyogT0sgdG8gcmVjeWNsZSB0aGlzIElURCBub3cgdGhhdCBpdHMgY29tcGxldGlvbiBjYWxsYmFjayByYW4uICovCi1kb25lOgotCXVzYl9wdXRfdXJiKHVyYik7Ci0JaXRkLT51cmIgPSBOVUxMOwotCWl0ZC0+c3RyZWFtID0gTlVMTDsKLQlsaXN0X21vdmUoJml0ZC0+aXRkX2xpc3QsICZzdHJlYW0tPmZyZWVfbGlzdCk7Ci0JaXNvX3N0cmVhbV9wdXQoZWhjaSwgc3RyZWFtKTsKIAorZG9uZToKKwlpdGQtPnVyYiA9IE5VTEw7CisJaWYgKGVoY2ktPmNsb2NrX2ZyYW1lICE9IGl0ZC0+ZnJhbWUgfHwgaXRkLT5pbmRleFs3XSAhPSAtMSkgeworCQkvKiBPSyB0byByZWN5Y2xlIHRoaXMgSVREIG5vdy4gKi8KKwkJaXRkLT5zdHJlYW0gPSBOVUxMOworCQlsaXN0X21vdmUoJml0ZC0+aXRkX2xpc3QsICZzdHJlYW0tPmZyZWVfbGlzdCk7CisJCWlzb19zdHJlYW1fcHV0KGVoY2ksIHN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogSFcgbWlnaHQgcmVtZW1iZXIgdGhpcyBJVEQsIHNvIHdlIGNhbid0IHJlY3ljbGUgaXQgeWV0LgorCQkgKiBNb3ZlIGl0IHRvIGEgc2FmZSBwbGFjZSB1bnRpbCBhIG5ldyBmcmFtZSBzdGFydHMuCisJCSAqLworCQlsaXN0X21vdmUoJml0ZC0+aXRkX2xpc3QsICZlaGNpLT5jYWNoZWRfaXRkX2xpc3QpOworCQlpZiAoc3RyZWFtLT5yZWZjb3VudCA9PSAyKSB7CisJCQkvKiBJZiBpc29fc3RyZWFtX3B1dCgpIHdlcmUgY2FsbGVkIGhlcmUsIHN0cmVhbQorCQkJICogd291bGQgYmUgZnJlZWQuICBJbnN0ZWFkLCBqdXN0IHByZXZlbnQgcmV1c2UuCisJCQkgKi8KKwkJCXN0cmVhbS0+ZXAtPmhjcHJpdiA9IE5VTEw7CisJCQlzdHJlYW0tPmVwID0gTlVMTDsKKwkJfQorCX0KIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xOTM0LDcgKzE5NDgsNyBAQAogCQkJCXN0cnVjdCBlaGNpX3NpdGQsIHNpdGRfbGlzdCk7CiAJCWxpc3RfbW92ZV90YWlsICgmc2l0ZC0+c2l0ZF9saXN0LCAmc3RyZWFtLT50ZF9saXN0KTsKIAkJc2l0ZC0+c3RyZWFtID0gaXNvX3N0cmVhbV9nZXQgKHN0cmVhbSk7Ci0JCXNpdGQtPnVyYiA9IHVzYl9nZXRfdXJiICh1cmIpOworCQlzaXRkLT51cmIgPSB1cmI7CiAKIAkJc2l0ZF9wYXRjaChlaGNpLCBzdHJlYW0sIHNpdGQsIHNjaGVkLCBwYWNrZXQpOwogCQlzaXRkX2xpbmsgKGVoY2ksIChuZXh0X3VmcmFtZSA+PiAzKSAlIGVoY2ktPnBlcmlvZGljX3NpemUsCkBAIC0yMDE5LDcgKzIwMzMsNyBAQAogCSh2b2lkKSBkaXNhYmxlX3BlcmlvZGljKGVoY2kpOwogCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKIAotCWlmIChsaXN0X2VtcHR5ICgmc3RyZWFtLT50ZF9saXN0KSkgeworCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZzdHJlYW0tPnRkX2xpc3QpKSB7CiAJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKIAkJCQktPSBzdHJlYW0tPmJhbmR3aWR0aDsKIAkJZWhjaV92ZGJnIChlaGNpLApAQCAtMjAzMCw3ICsyMDQ0LDYgQEAKIAlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKIAkvKiBPSyB0byByZWN5Y2xlIHRoaXMgU0lURCBub3cgdGhhdCBpdHMgY29tcGxldGlvbiBjYWxsYmFjayByYW4uICovCiBkb25lOgotCXVzYl9wdXRfdXJiKHVyYik7CiAJc2l0ZC0+dXJiID0gTlVMTDsKIAlzaXRkLT5zdHJlYW0gPSBOVUxMOwogCWxpc3RfbW92ZSgmc2l0ZC0+c2l0ZF9saXN0LCAmc3RyZWFtLT5mcmVlX2xpc3QpOwpAQCAtMjEwMSw2ICsyMTE0LDIwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyB2b2lkIGZyZWVfY2FjaGVkX2l0ZF9saXN0KHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwlzdHJ1Y3QgZWhjaV9pdGQgKml0ZCwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRkLCBuLCAmZWhjaS0+Y2FjaGVkX2l0ZF9saXN0LCBpdGRfbGlzdCkgeworCQlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0gPSBpdGQtPnN0cmVhbTsKKwkJaXRkLT5zdHJlYW0gPSBOVUxMOworCQlsaXN0X21vdmUoJml0ZC0+aXRkX2xpc3QsICZzdHJlYW0tPmZyZWVfbGlzdCk7CisJCWlzb19zdHJlYW1fcHV0KGVoY2ksIHN0cmVhbSk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgdm9pZAogc2Nhbl9wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQogewpAQCAtMjExNSwxMCArMjE0MiwxNyBAQAogCSAqIFRvdWNoZXMgYXMgZmV3IHBhZ2VzIGFzIHBvc3NpYmxlOiAgY2FjaGUtZnJpZW5kbHkuCiAJICovCiAJbm93X3VmcmFtZSA9IGVoY2ktPm5leHRfdWZyYW1lOwotCWlmIChIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCWlmIChIQ19JU19SVU5OSU5HKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkpIHsKIAkJY2xvY2sgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCk7Ci0JZWxzZQorCQljbG9ja19mcmFtZSA9IChjbG9jayA+PiAzKSAlIGVoY2ktPnBlcmlvZGljX3NpemU7CisJfSBlbHNlICB7CiAJCWNsb2NrID0gbm93X3VmcmFtZSArIG1vZCAtIDE7CisJCWNsb2NrX2ZyYW1lID0gLTE7CisJfQorCWlmIChlaGNpLT5jbG9ja19mcmFtZSAhPSBjbG9ja19mcmFtZSkgeworCQlmcmVlX2NhY2hlZF9pdGRfbGlzdChlaGNpKTsKKwkJZWhjaS0+Y2xvY2tfZnJhbWUgPSBjbG9ja19mcmFtZTsKKwl9CiAJY2xvY2sgJT0gbW9kOwogCWNsb2NrX2ZyYW1lID0gY2xvY2sgPj4gMzsKIApAQCAtMjI3Nyw2ICsyMzExLDEwIEBACiAJCQkvKiByZXNjYW4gdGhlIHJlc3Qgb2YgdGhpcyBmcmFtZSwgdGhlbiAuLi4gKi8KIAkJCWNsb2NrID0gbm93OwogCQkJY2xvY2tfZnJhbWUgPSBjbG9jayA+PiAzOworCQkJaWYgKGVoY2ktPmNsb2NrX2ZyYW1lICE9IGNsb2NrX2ZyYW1lKSB7CisJCQkJZnJlZV9jYWNoZWRfaXRkX2xpc3QoZWhjaSk7CisJCQkJZWhjaS0+Y2xvY2tfZnJhbWUgPSBjbG9ja19mcmFtZTsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCW5vd191ZnJhbWUrKzsKIAkJCW5vd191ZnJhbWUgJT0gbW9kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAppbmRleCBmYjcwNTRjYy4uNmNmZjE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTg3LDYgKzg3LDEwIEBACiAJaW50CQkJbmV4dF91ZnJhbWU7CS8qIHNjYW4gcGVyaW9kaWMsIHN0YXJ0IGhlcmUgKi8KIAl1bnNpZ25lZAkJcGVyaW9kaWNfc2NoZWQ7CS8qIHBlcmlvZGljIGFjdGl2aXR5IGNvdW50ICovCiAKKwkvKiBsaXN0IG9mIGl0ZHMgY29tcGxldGVkIHdoaWxlIGNsb2NrX2ZyYW1lIHdhcyBzdGlsbCBhY3RpdmUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNhY2hlZF9pdGRfbGlzdDsKKwl1bnNpZ25lZAkJY2xvY2tfZnJhbWU7CisKIAkvKiBwZXIgcm9vdCBodWIgcG9ydCAqLwogCXVuc2lnbmVkIGxvbmcJCXJlc2V0X2RvbmUgW0VIQ0lfTUFYX1JPT1RfUE9SVFNdOwogCkBAIC0xODYsMzkgKzE5MCw3IEBACiAJY2xlYXJfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi10aW1lcl9hY3Rpb24gKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCi17Ci0JLyogRG9uJ3Qgb3ZlcnJpZGUgdGltZW91dHMgd2hpY2ggc2hyaW5rIG9yIChsYXRlcikgZGlzYWJsZQotCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQotCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCi0JICovCi0JaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQotCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQotCQkJCSYgZWhjaS0+YWN0aW9ucykpCi0JCXJldHVybjsKLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdCAoYWN0aW9uLCAmZWhjaS0+YWN0aW9ucykpIHsKLQkJdW5zaWduZWQgbG9uZyB0OwotCi0JCXN3aXRjaCAoYWN0aW9uKSB7Ci0JCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6Ci0JCQl0ID0gRUhDSV9JT19KSUZGSUVTOwotCQkJYnJlYWs7Ci0JCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgotCQkJdCA9IEVIQ0lfQVNZTkNfSklGRklFUzsKLQkJCWJyZWFrOwotCQkvLyBjYXNlIFRJTUVSX0FTWU5DX1NIUklOSzoKLQkJZGVmYXVsdDoKLQkJCS8qIGFkZCBhIGppZmZpZSBzaW5jZSB3ZSBzeW5jaCBhZ2FpbnN0IHRoZQotCQkJICogOCBLSHogdWZyYW1lIGNvdW50ZXIuCi0JCQkgKi8KLQkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKLQl9Ci19CitzdGF0aWMgdm9pZCBmcmVlX2NhY2hlZF9pdGRfbGlzdChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yODEsNyArMjUzLDcgQEAKIAogLyoKICAqIE5vdyB0aGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIG5vdCBjb252ZXJ0ZWQgdXNpbmcgdGhlCi0gKiBfX2NvbnN0YW50X2NwdV90b19sZTMyKCkgbWFjcm8gYW55bW9yZSwgc2luY2Ugd2UgaGF2ZSB0byBzdXBwb3J0CisgKiBjcHVfdG9fbGUzMigpIG1hY3JvIGFueW1vcmUsIHNpbmNlIHdlIGhhdmUgdG8gc3VwcG9ydAogICogImR5bmFtaWMiIHN3aXRjaGluZyBiZXR3ZWVuIGJlIGFuZCBsZSBzdXBwb3J0LCBzbyB0aGF0IHRoZSBkcml2ZXIKICAqIGNhbiBiZSB1c2VkIG9uIG9uZSBzeXN0ZW0gd2l0aCBTb0MgRUhDSSBjb250cm9sbGVyIHVzaW5nIGJpZy1lbmRpYW4KICAqIGRlc2NyaXB0b3JzIGFzIHdlbGwgYXMgYSBub3JtYWwgbGl0dGxlLWVuZGlhbiBQQ0kgRUhDSSBjb250cm9sbGVyLgpAQCAtMzcwLDYgKzM0Miw5IEBACiAjZGVmaW5lCVFIX1NUQVRFX1VOTElOS19XQUlUCTQJCS8qIExJTktFRCBhbmQgb24gcmVjbGFpbSBxICovCiAjZGVmaW5lCVFIX1NUQVRFX0NPTVBMRVRJTkcJNQkJLyogZG9uJ3QgdG91Y2ggdG9rZW4uSEFMVCAqLwogCisJdTgJCQl4YWN0ZXJyczsJLyogWGFjdEVyciByZXRyeSBjb3VudGVyICovCisjZGVmaW5lCVFIX1hBQ1RFUlJfTUFYCQkzMgkJLyogWGFjdEVyciByZXRyeSBsaW1pdCAqLworCiAJLyogcGVyaW9kaWMgc2NoZWR1bGUgaW5mbyAqLwogCXU4CQkJdXNlY3M7CQkvKiBpbnRyIGJhbmR3aWR0aCAqLwogCXU4CQkJZ2FwX3VmOwkJLyogdWZyYW1lcyBzcGxpdC9jc3BsaXQgZ2FwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMKaW5kZXggMzRlMTRlZC4uZWE4YTQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZmhjaV90b19oY2QoZmhjaSktPnNlbGYuY29udHJvbGxlcjsKIAotCWZoY2ktPmRmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldi0+YnVzX2lkLCBOVUxMKTsKKwlmaGNpLT5kZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShkZXYpLCBOVUxMKTsKIAlpZiAoIWZoY2ktPmRmc19yb290KSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYwppbmRleCBiYTYyMmNjLi4wOTUxODE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAlpZiAoc3Byb3AgJiYgc3RyY21wKHNwcm9wLCAiaG9zdCIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZmaGNpX2RyaXZlciwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmZoY2lfZHJpdmVyLCBkZXYsIGRldl9uYW1lKGRldikpOwogCWlmICghaGNkKSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGNyZWF0ZSBoY2RcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY1MCw3ICs2NTAsNyBAQAogCQkJfQogCQl9CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldi0+YnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldl9uYW1lKGRldikpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGdwaW8gJWQiLCBpKTsKIAkJCWdvdG8gZXJyX2dwaW9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKaW5kZXggODU4MjIzNi4uY2JmMzBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCkBAIC00NjQsOCArNDY0LDcgQEAKIAkJCXBvcnRfaWR4IDw8IDggfCBpZmFjZV9ubywKIAkJCWtleWQsIGtleWRfbGVuLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOwogCi0JbWVtc2V0KGtleWQsIDAsIHNpemVvZigqa2V5ZCkpOwkvKiBjbGVhciBrZXlzIGV0Yy4gKi8KLQlrZnJlZShrZXlkKTsKKwlremZyZWUoa2V5ZCk7IC8qIGNsZWFyIGtleXMgZXRjLiAqLwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwppbmRleCA0ZGRhMzFiLi5hMmIzMDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCkBAIC03NzIsNyArNzcyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBQSVBFX0lOVEVSUlVQVDoKIAkJdXJiLT5pbnRlcnZhbCA9IGVwLT5wZXJpb2Q7Ci0JCWVwLT5sZW5ndGggPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCQllcC0+bGVuZ3RoID0gbWluX3QodTMyLCBlcC0+bWF4cGFja2V0LAogCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCiAJCS8qIHVyYiBzdWJtaXR0ZWQgZm9yIGFscmVhZHkgZXhpc3RpbmcgZW5kcG9pbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKaW5kZXggYWEyMTFiYS4uMTJkYjk2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKQEAgLTU2Myw3ICs1NjMsNyBAQAogKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3B0ZChzdHJ1Y3QgcHRkICpwdGQpCiB7Ci0JcHJpbnRrKCJ0ZDogJXggJWQlYyVkICVkLCVkLCVkICAleCAleCV4JXhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAidGQ6ICV4ICVkJWMlZCAlZCwlZCwlZCAgJXggJXgleCV4XG4iLAogCSAgICAgICBQVERfR0VUX0NDKHB0ZCksIFBURF9HRVRfRkEocHRkKSwKIAkgICAgICAgUFREX0RJUl9TVFIocHRkKSwgUFREX0dFVF9FUChwdGQpLAogCSAgICAgICBQVERfR0VUX0NPVU5UKHB0ZCksIFBURF9HRVRfTEVOKHB0ZCksIFBURF9HRVRfTVBTKHB0ZCksCkBAIC01NzYsNyArNTc2LDcgQEAKIAlpbnQgazsKIAogCWlmIChQVERfR0VUX0RJUihwdGQpICE9IFBURF9ESVJfSU4gJiYgUFREX0dFVF9MRU4ocHRkKSkgewotCQlwcmludGsoIi0+ICIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICItPiAiKTsKIAkJZm9yIChrID0gMDsgayA8IFBURF9HRVRfTEVOKHB0ZCk7ICsraykKIAkJCXByaW50aygiJTAyeCAiLCAoKHU4ICopIGJ1Zilba10pOwogCQlwcmludGsoIlxuIik7CkBAIC01ODgsMTMgKzU4OCwxMyBAQAogCWludCBrOwogCiAJaWYgKFBURF9HRVRfRElSKHB0ZCkgPT0gUFREX0RJUl9JTiAmJiBQVERfR0VUX0NPVU5UKHB0ZCkpIHsKLQkJcHJpbnRrKCI8LSAiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiPC0gIik7CiAJCWZvciAoayA9IDA7IGsgPCBQVERfR0VUX0NPVU5UKHB0ZCk7ICsraykKIAkJCXByaW50aygiJTAyeCAiLCAoKHU4ICopIGJ1Zilba10pOwogCQlwcmludGsoIlxuIik7CiAJfQogCWlmIChQVERfR0VUX0xBU1QocHRkKSkKLQkJcHJpbnRrKCItXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiLVxuIik7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggYjg5OWYxYS4uY2QwN2VhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAKIAlpZiAodXJiLT5kZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7CiAJCS8qIHNwbGl0ICovCi0JCXB0ZC0+ZHc1ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigweDFjKTsKKwkJcHRkLT5kdzUgPSBjcHVfdG9fbGUzMigweDFjKTsKIAogCQlpZiAocWgtPnBlcmlvZCA+PSAzMikKIAkJCXBlcmlvZCA9IHFoLT5wZXJpb2QgLyAyOwpAQCAtODE5LDYgKzgxOSwxMyBAQAogCXUzMiBhdGxfcmVncywgcGF5bG9hZDsKIAl1MzIgYnVmZnN0YXR1czsKIAorCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBlbnF1ZXVlCisJICogYSBmb2xsb3ctdXAgcGFja2V0LCB0aGUgU0tJUCByZWdpc3RlciBnZXRzIHdyaXR0ZW4gYW5kIHJlYWQgYmFjaworCSAqIGFsbW9zdCBpbW1lZGlhdGVseS4gV2l0aCBJU1AxNzYxLCB0aGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgZGVsYXkgb2YKKwkgKiAxOTVucyBiZXR3ZWVuIGEgd3JpdGUgYW5kIHN1YnNlcXVlbnQgcmVhZCAoc2VlIHNlY3Rpb24gMTUuMS4xLjMpLgorCSAqLworCW5kZWxheSgxOTUpOwogCXNraXBfbWFwID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19BVExfUFREX1NLSVBNQVBfUkVHKTsKIAogCUJVR19PTighc2tpcF9tYXApOwpAQCAtODUzLDYgKzg2MCwxMyBAQAogCXUzMiBpbnRfcmVncywgcGF5bG9hZDsKIAl1MzIgYnVmZnN0YXR1czsKIAorCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBlbnF1ZXVlCisJICogYSBmb2xsb3ctdXAgcGFja2V0LCB0aGUgU0tJUCByZWdpc3RlciBnZXRzIHdyaXR0ZW4gYW5kIHJlYWQgYmFjaworCSAqIGFsbW9zdCBpbW1lZGlhdGVseS4gV2l0aCBJU1AxNzYxLCB0aGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgZGVsYXkgb2YKKwkgKiAxOTVucyBiZXR3ZWVuIGEgd3JpdGUgYW5kIHN1YnNlcXVlbnQgcmVhZCAoc2VlIHNlY3Rpb24gMTUuMS4xLjMpLgorCSAqLworCW5kZWxheSgxOTUpOwogCXNraXBfbWFwID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19JTlRfUFREX1NLSVBNQVBfUkVHKTsKIAogCUJVR19PTighc2tpcF9tYXApOwpAQCAtMTA1NCw3ICsxMDY4LDcgQEAKIAkJCXByaXZfd3JpdGVfY29weShwcml2LCAodTMyICopJnB0ZCwgdXNiX2hjZC0+cmVncyArCiAJCQkJCWF0bF9yZWdzLCBzaXplb2YocHRkKSk7CiAKLQkJCXB0ZC5kdzAgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihQVERfVkFMSUQpOworCQkJcHRkLmR3MCB8PSBjcHVfdG9fbGUzMihQVERfVkFMSUQpOwogCQkJcHJpdl93cml0ZV9jb3B5KHByaXYsICh1MzIgKikmcHRkLCB1c2JfaGNkLT5yZWdzICsKIAkJCQkJYXRsX3JlZ3MsIHNpemVvZihwdGQpKTsKIApAQCAtMjIzNSw5ICsyMjQ5LDEwIEBACiAJa21lbV9jYWNoZV9kZXN0cm95KHFoX2NhY2hlcCk7CiB9CiAKLXN0cnVjdCB1c2JfaGNkICppc3AxNzYwX3JlZ2lzdGVyKHU2NCByZXNfc3RhcnQsIHU2NCByZXNfbGVuLCBpbnQgaXJxLAotCQl1NjQgaXJxZmxhZ3MsIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSwKLQkJdW5zaWduZWQgaW50IGRldmZsYWdzKQorc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIocGh5c19hZGRyX3QgcmVzX3N0YXJ0LCByZXNvdXJjZV9zaXplX3QgcmVzX2xlbiwKKwkJCQkgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCQkgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAorCQkJCSB1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKaW5kZXggYTlkYWVhNS4uNDYyZjQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaApAQCAtMiw5ICsyLDEwIEBACiAjZGVmaW5lIF9JU1AxNzYwX0hDRF9IXwogCiAvKiBleHBvcnRzIGZvciBpZiAqLwotc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIodTY0IHJlc19zdGFydCwgdTY0IHJlc19sZW4sIGludCBpcnEsCi0JCXU2NCBpcnFmbGFncywgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAotCQl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpOworc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIocGh5c19hZGRyX3QgcmVzX3N0YXJ0LCByZXNvdXJjZV9zaXplX3QgcmVzX2xlbiwKKwkJCQkgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCQkgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAorCQkJCSB1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpOwogaW50IGluaXRfa21lbV9vbmNlKHZvaWQpOwogdm9pZCBkZWluaXRfa21lbV9jYWNoZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwppbmRleCA0Y2Y3Y2E0Li4zZmEzYTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwpAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAjaW5jbHVkZSAiaXNwMTc2MC1oY2QuaCIKQEAgLTMwMCwzOSArMzAxLDEwMSBAQAogfTsKICNlbmRpZgogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpc3AxNzYwX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXM7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQ7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbV9yZXMpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogTWVtb3J5IHJlc291cmNlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSwgImlzcDE3NjAiKSkgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBDYW5ub3QgcmVzZXJ2ZSB0aGUgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIWlycV9yZXMpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogSVJRIHJlc291cmNlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaXJxZmxhZ3MgfD0gaXJxX3Jlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKworCWhjZCA9IGlzcDE3NjBfcmVnaXN0ZXIobWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplLCBpcnFfcmVzLT5zdGFydCwKKwkJCSAgICAgICBpcnFmbGFncywgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldiksIDApOworCWlmIChJU19FUlIoaGNkKSkgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgdGhlIEhDRCBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcHJfaW5mbygiSVNQMTc2MCBVU0IgZGV2aWNlIGluaXRpYWxpc2VkXG4iKTsKKwlyZXR1cm4gcmV0OworCitjbGVhbnVwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlzcDE3NjBfcGxhdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzcDE3NjBfcGxhdF9kcml2ZXIgPSB7CisJLnByb2JlCT0gaXNwMTc2MF9wbGF0X3Byb2JlLAorCS5yZW1vdmUJPSBpc3AxNzYwX3BsYXRfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImlzcDE3NjAiLAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBpc3AxNzYwX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIGFueV9yZXQgPSAtRU5PREVWOwogCiAJaW5pdF9rbWVtX29uY2UoKTsKIAorCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNwMTc2MF9wbGF0X2RyaXZlcik7CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2lmZGVmIENPTkZJR19QUENfT0YKIAlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlzcDE3NjBfb2ZfZHJpdmVyKTsKLQlpZiAocmV0KSB7Ci0JCWRlaW5pdF9rbWVtX2NhY2hlKCk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmICghcmV0KQorCQlhbnlfcmV0ID0gMDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QQ0kKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpc3AxNzYxX3BjaV9kcml2ZXIpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5yZWdfb2Y7CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2VuZGlmCi0JcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19QQ0kKLXVucmVnX29mOgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpc3AxNzYwX29mX2RyaXZlcik7Ci0jZW5kaWYKLQlkZWluaXRfa21lbV9jYWNoZSgpOwotCXJldHVybiByZXQ7CisJaWYgKGFueV9yZXQpCisJCWRlaW5pdF9rbWVtX2NhY2hlKCk7CisJcmV0dXJuIGFueV9yZXQ7CiB9CiBtb2R1bGVfaW5pdChpc3AxNzYwX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXNwMTc2MF9leGl0KHZvaWQpCiB7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDE3NjBfcGxhdF9kcml2ZXIpOwogI2lmZGVmIENPTkZJR19QUENfT0YKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXNwMTc2MF9vZl9kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggNWNmNWYxZS4uMjVkYjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtOTk3LDcgKzk5Nyw3IEBACiAjZGVmaW5lIFNBMTExMV9EUklWRVIJCW9oY2lfaGNkX3NhMTExMV9kcml2ZXIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfUzNDMjQxMAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfUzNDMjQxMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9TM0M2NFhYKQogI2luY2x1ZGUgIm9oY2ktczNjMjQxMC5jIgogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCW9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyCiAjZW5kaWYKQEAgLTEwNDksNyArMTA0OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogI2luY2x1ZGUgIm9oY2ktc2guYyIKICNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9zaF9kcml2ZXIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IDVkNjI1YzMuLmY5OTYxYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTQ4Nyw3ICs0ODcsNiBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAJLnN1c3BlbmQgPQl1c2JfaGNkX3BjaV9zdXNwZW5kLAotCS5yZXN1bWVfZWFybHkgPQl1c2JfaGNkX3BjaV9yZXN1bWVfZWFybHksCiAJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCBmNDZhZjdhLi5hNjhhZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTIxLDkgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvdXNiLWNvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAKICNkZWZpbmUgdmFsaWRfcG9ydChpZHgpICgoaWR4KSA9PSAxIHx8IChpZHgpID09IDIpCiAKQEAgLTM3Miw3ICszNzAsNyBAQAogCiAJdXNiX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAidXNiLWJ1cy1ob3N0Iik7CiAJaWYgKElTX0VSUih1c2JfY2xrKSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWhvc3QgY2xvY2tcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWJ1cy1ob3N0IGNsb2NrXG4iKTsKIAkJcmV0dmFsID0gLUVOT0VOVDsKIAkJZ290byBlcnJfY2xrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCmluZGV4IDc1NTQ4ZjcuLjVhYzQ4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwpAQCAtODQ1LDE0ICs4NDUsMTQgQEAKIAkJaXNfb3V0ID0gIShxdGQtPmh3X3Rva2VuICYgY3B1X3RvX2xlMzIoMSA8PCA4KSk7CiAJCWVwbnVtID0gKGxlMzJfdG9fY3B1cCgmcWgtPmh3X2luZm8xKSA+PiA4KSAmIDB4MGY7CiAJCWlmICh1bmxpa2VseSghdXNiX2dldHRvZ2dsZShxaC0+ZGV2LCBlcG51bSwgaXNfb3V0KSkpIHsKLQkJCXFoLT5od190b2tlbiAmPSB+X19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfVE9HR0xFKTsKKwkJCXFoLT5od190b2tlbiAmPSB+Y3B1X3RvX2xlMzIoUVREX1RPR0dMRSk7CiAJCQl1c2Jfc2V0dG9nZ2xlKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQsIDEpOwogCQl9CiAJfQogCiAJLyogSEMgbXVzdCBzZWUgbGF0ZXN0IHF0ZCBhbmQgcWggZGF0YSBiZWZvcmUgd2UgY2xlYXIgQUNUSVZFK0hBTFQgKi8KIAl3bWIoKTsKLQlxaC0+aHdfdG9rZW4gJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfVE9HR0xFIHwgUVREX1NUU19QSU5HKTsKKwlxaC0+aHdfdG9rZW4gJj0gY3B1X3RvX2xlMzIoUVREX1RPR0dMRSB8IFFURF9TVFNfUElORyk7CiB9CiAKIC8qIElmIGl0IHdlcmVuJ3QgZm9yIGEgY29tbW9uIHNpbGljb24gcXVpcmsgKHdyaXRpbmcgdGhlIGR1bW15IGludG8gdGhlIHFoCkBAIC05MzcsNyArOTM3LDcgQEAKIAkJc3RydWN0IGVoY2lfcWgJKnFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OwogCiAJCS8qIFMtbWFzayBpbiBhIFFIIG1lYW5zIGl0J3MgYW4gaW50ZXJydXB0IHVyYiAqLwotCQlpZiAoKHFoLT5od19pbmZvMiAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfU01BU0spKSAhPSAwKSB7CisJCWlmICgocWgtPmh3X2luZm8yICYgY3B1X3RvX2xlMzIoUUhfU01BU0spKSAhPSAwKSB7CiAKIAkJCS8qIC4uLiB1cGRhdGUgaGMtd2lkZSBwZXJpb2RpYyBzdGF0cyAoZm9yIHVzYmZzKSAqLwogCQkJb3h1X3RvX2hjZChveHUpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOwpAQCAtOTgxLDcgKzk4MSw3IEBACiBzdGF0aWMgdm9pZCBpbnRyX2Rlc2NoZWR1bGUoc3RydWN0IG94dV9oY2QgKm94dSwgc3RydWN0IGVoY2lfcWggKnFoKTsKIHN0YXRpYyBpbnQgcWhfc2NoZWR1bGUoc3RydWN0IG94dV9oY2QgKm94dSwgc3RydWN0IGVoY2lfcWggKnFoKTsKIAotI2RlZmluZSBIQUxUX0JJVCBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9TVFNfSEFMVCkKKyNkZWZpbmUgSEFMVF9CSVQgY3B1X3RvX2xlMzIoUVREX1NUU19IQUxUKQogCiAvKiBQcm9jZXNzIGFuZCBmcmVlIGNvbXBsZXRlZCBxdGRzIGZvciBhIHFoLCByZXR1cm5pbmcgVVJCcyB0byBkcml2ZXJzLgogICogQ2hhc2VzIHVwIHRvIHFoLT5od19jdXJyZW50LiAgUmV0dXJucyBudW1iZXIgb2YgY29tcGxldGlvbnMgY2FsbGVkLApAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAkJCS8qIHNob3VsZCBiZSByYXJlIGZvciBwZXJpb2RpYyB0cmFuc2ZlcnMsCiAJCQkgKiBleGNlcHQgbWF5YmUgaGlnaCBiYW5kd2lkdGggLi4uCiAJCQkgKi8KLQkJCWlmICgoX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9TTUFTSykKKwkJCWlmICgoY3B1X3RvX2xlMzIoUUhfU01BU0spCiAJCQkJCSYgcWgtPmh3X2luZm8yKSAhPSAwKSB7CiAJCQkJaW50cl9kZXNjaGVkdWxlKG94dSwgcWgpOwogCQkJCSh2b2lkKSBxaF9zY2hlZHVsZShveHUsIHFoKTsKQEAgLTEzNTAsNyArMTM1MCw3IEBACiAJfQogCiAJLyogYnkgZGVmYXVsdCwgZW5hYmxlIGludGVycnVwdCBvbiB1cmIgY29tcGxldGlvbiAqLwotCQlxdGQtPmh3X3Rva2VuIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX0lPQyk7CisJCXF0ZC0+aHdfdG9rZW4gfD0gY3B1X3RvX2xlMzIoUVREX0lPQyk7CiAJcmV0dXJuIGhlYWQ7CiAKIGNsZWFudXA6CkBAIC0xNTM5LDcgKzE1MzksNyBAQAogCS8qIHF0ZCBjb21wbGV0aW9ucyByZXBvcnRlZCBsYXRlciBieSBpbnRlcnJ1cHQgKi8KIH0KIAotI2RlZmluZQlRSF9BRERSX01BU0sJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDdmKQorI2RlZmluZQlRSF9BRERSX01BU0sJY3B1X3RvX2xlMzIoMHg3ZikKIAogLyoKICAqIEZvciBjb250cm9sL2J1bGsvaW50ZXJydXB0LCByZXR1cm4gUUggd2l0aCB0aGVzZSBURHMgYXBwZW5kZWQuCkBAIC0yMDEyLDcgKzIwMTIsNyBAQAogCSAqICAgYW5kIHRoaXMgcWggaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHVmcmFtZQogCSAqICAgKGFuZCBvdmVybGF5IHRva2VuIFNwbGl0WHN0YXRlIGlzIGZhbHNlPykKIAkgKiBUSEVOCi0JICogICBxaC0+aHdfaW5mbzEgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMigxIDw8IDcgImlnbm9yZSIpOworCSAqICAgcWgtPmh3X2luZm8xIHw9IGNwdV90b19sZTMyKDEgPDwgNyAiaWdub3JlIik7CiAJICovCiAKIAkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIHBhcnQgb2YgZXZlcnkgbWljcm9mcmFtZSAqLwpAQCAtMjA1Nyw3ICsyMDU3LDcgQEAKIAkgKiBhY3RpdmUgaGlnaCBzcGVlZCBxdWV1ZXMgbWF5IG5lZWQgYmlnZ2VyIGRlbGF5cy4uLgogCSAqLwogCWlmIChsaXN0X2VtcHR5KCZxaC0+cXRkX2xpc3QpCi0JCXx8IChfX2NvbnN0YW50X2NwdV90b19sZTMyKFFIX0NNQVNLKSAmIHFoLT5od19pbmZvMikgIT0gMCkKKwkJfHwgKGNwdV90b19sZTMyKFFIX0NNQVNLKSAmIHFoLT5od19pbmZvMikgIT0gMCkKIAkJd2FpdCA9IDI7CiAJZWxzZQogCQl3YWl0ID0gNTU7CS8qIHdvcnN0IGNhc2U6IDMgKiAxMDI0ICovCkBAIC0yMTgzLDEwICsyMTgzLDEwIEBACiAJCXFoLT5zdGFydCA9IGZyYW1lOwogCiAJCS8qIHJlc2V0IFMtZnJhbWUgYW5kIChtYXliZSkgQy1mcmFtZSBtYXNrcyAqLwotCQlxaC0+aHdfaW5mbzIgJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMih+KFFIX0NNQVNLIHwgUUhfU01BU0spKTsKKwkJcWgtPmh3X2luZm8yICY9IGNwdV90b19sZTMyKH4oUUhfQ01BU0sgfCBRSF9TTUFTSykpOwogCQlxaC0+aHdfaW5mbzIgfD0gcWgtPnBlcmlvZAogCQkJPyBjcHVfdG9fbGUzMigxIDw8IHVmcmFtZSkKLQkJCTogX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9TTUFTSyk7CisJCQk6IGNwdV90b19sZTMyKFFIX1NNQVNLKTsKIAkJcWgtPmh3X2luZm8yIHw9IGNfbWFzazsKIAl9IGVsc2UKIAkJb3h1X2RiZyhveHUsICJyZXVzZWQgcWggJXAgc2NoZWR1bGVcbiIsIHFoKTsKQEAgLTI2ODQsNyArMjY4NCw3IEBACiAJb3h1LT51cmJfbGVuID0gMDsKIAogCS8qIEZJTVhFICovCi0JaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrID0gMFVMOworCWhjZC0+c2VsZi5jb250cm9sbGVyLT5kbWFfbWFzayA9IE5VTEw7CiAKIAlpZiAob3h1LT5pc19vdGcpIHsKIAkJb3h1LT5jYXBzID0gaGNkLT5yZWdzICsgT1hVX09UR19DQVBfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oCmluZGV4IDg5MTBlMjcuLjFjMjE2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLmgKQEAgLTIzNSwyMSArMjM1LDIxIEBACiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOwogCiAvKiBtYXNrIE5ha0NudCtUIGluIHFoLT5od19hbHRfbmV4dCAqLwotI2RlZmluZSBRVERfTUFTSyBfX2NvbnN0YW50X2NwdV90b19sZTMyICh+MHgxZikKKyNkZWZpbmUgUVREX01BU0sgY3B1X3RvX2xlMzIgKH4weDFmKQogCiAjZGVmaW5lIElTX1NIT1JUX1JFQUQodG9rZW4pIChRVERfTEVOR1RIKHRva2VuKSAhPSAwICYmIFFURF9QSUQodG9rZW4pID09IDEpCiAKIC8qIFR5cGUgdGFnIGZyb20ge3FoLCBpdGQsIHNpdGQsIGZzdG59LT5od19uZXh0ICovCi0jZGVmaW5lIFFfTkVYVF9UWVBFKGRtYSkgKChkbWEpICYgX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKSkKKyNkZWZpbmUgUV9ORVhUX1RZUEUoZG1hKSAoKGRtYSkgJiBjcHVfdG9fbGUzMiAoMyA8PCAxKSkKIAogLyogdmFsdWVzIGZvciB0aGF0IHR5cGUgdGFnICovCi0jZGVmaW5lIFFfVFlQRV9RSAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IDEpCisjZGVmaW5lIFFfVFlQRV9RSAljcHVfdG9fbGUzMiAoMSA8PCAxKQogCiAvKiBuZXh0IGFzeW5jIHF1ZXVlIGVudHJ5LCBvciBwb2ludGVyIHRvIGludGVycnVwdC9wZXJpb2RpYyBRSCAqLwogI2RlZmluZQlRSF9ORVhUKGRtYSkJKGNwdV90b19sZTMyKCgodTMyKWRtYSkmfjB4MDFmKXxRX1RZUEVfUUgpCiAKIC8qIGZvciBwZXJpb2RpYy9hc3luYyBzY2hlZHVsZXMgYW5kIHF0ZCBsaXN0cywgbWFyayBlbmQgb2YgbGlzdCAqLwotI2RlZmluZQlFSENJX0xJU1RfRU5ECV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSkgLyogIm51bGwgcG9pbnRlciIgdG8gaHcgKi8KKyNkZWZpbmUJRUhDSV9MSVNUX0VORAljcHVfdG9fbGUzMigxKSAvKiAibnVsbCBwb2ludGVyIiB0byBodyAqLwogCiAvKgogICogRW50cmllcyBpbiBwZXJpb2RpYyBzaGFkb3cgdGFibGUgYXJlIHBvaW50ZXJzIHRvIG9uZSBvZiBmb3VyIGtpbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IDc1YjY5ODQuLjAzM2MyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAkgKi8KIAloY2NfcGFyYW1zID0gcmVhZGwoYmFzZSArIEVIQ0lfSENDX1BBUkFNUyk7CiAJb2Zmc2V0ID0gKGhjY19wYXJhbXMgPj4gOCkgJiAweGZmOwotCXdoaWxlIChvZmZzZXQgJiYgY291bnQtLSkgeworCXdoaWxlIChvZmZzZXQgJiYgLS1jb3VudCkgewogCQl1MzIJCWNhcDsKIAkJaW50CQltc2VjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCAzMTkwNDEyLi5mMTYyNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTY2MCw5ICs2NjAsOSBAQAogCXUxNiBhcnJheVtSOEE2NjU5N19NQVhfTlVNX1BJUEVdLCBpID0gMCwgbWluOwogCiAJbWVtc2V0KGFycmF5LCAwLCBzaXplb2YoYXJyYXkpKTsKLQlzd2l0Y2ggKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXApKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgotCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkKIAkJCWFycmF5W2krK10gPSA0OwogCQllbHNlIHsKIAkJCWFycmF5W2krK10gPSAzOwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6Ci0JCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgeworCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpIHsKIAkJCWFycmF5W2krK10gPSA2OwogCQkJYXJyYXlbaSsrXSA9IDc7CiAJCQlhcnJheVtpKytdID0gODsKQEAgLTY3OCw3ICs2NzgsNyBAQAogCQkJYXJyYXlbaSsrXSA9IDk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKLQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpCiAJCQlhcnJheVtpKytdID0gMjsKIAkJZWxzZQogCQkJYXJyYXlbaSsrXSA9IDE7CkBAIC05MjgsMTAgKzkyOCw5IEBACiAKIAlpbmZvLnBpcGVudW0gPSBnZXRfZW1wdHlfcGlwZW51bShyOGE2NjU5NywgZXApOwogCWluZm8uYWRkcmVzcyA9IGdldF91cmJfdG9fcjhhNjY1OTdfYWRkcihyOGE2NjU5NywgdXJiKTsKLQlpbmZvLmVwbnVtID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJaW5mby5lcG51bSA9IHVzYl9lbmRwb2ludF9udW0oZXApOwogCWluZm8ubWF4cGFja2V0ID0gbGUxNl90b19jcHUoZXAtPndNYXhQYWNrZXRTaXplKTsKLQlpbmZvLnR5cGUgPSBnZXRfcjhhNjY1OTdfdHlwZShlcC0+Ym1BdHRyaWJ1dGVzCi0JCQkJICAgICAgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJaW5mby50eXBlID0gZ2V0X3I4YTY2NTk3X3R5cGUodXNiX2VuZHBvaW50X3R5cGUoZXApKTsKIAlpbmZvLmJ1Zm51bSA9IGdldF9idWZudW0oaW5mby5waXBlbnVtKTsKIAlpbmZvLmJ1Zl9ic2l6ZSA9IGdldF9idWZfYnNpemUoaW5mby5waXBlbnVtKTsKIAlpZiAoaW5mby50eXBlID09IFI4QTY2NTk3X0JVTEspIHsKQEAgLTk0MSw3ICs5NDAsNyBAQAogCQlpbmZvLmludGVydmFsID0gZ2V0X2ludGVydmFsKHVyYiwgZXAtPmJJbnRlcnZhbCk7CiAJCWluZm8udGltZXJfaW50ZXJ2YWwgPSBnZXRfdGltZXJfaW50ZXJ2YWwodXJiLCBlcC0+YkludGVydmFsKTsKIAl9Ci0JaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkKIAkJaW5mby5kaXJfaW4gPSAxOwogCWVsc2UKIAkJaW5mby5kaXJfaW4gPSAwOwpAQCAtMTAxNCw2ICsxMDEzLDkgQEAKIAogCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwogCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIERUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7CisKKwlpZiAocjhhNjY1OTctPmJ1c19zdXNwZW5kZWQpCisJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkICovCkBAIC0xMzk1LDcgKzEzOTcsNyBAQAogCQkJICAgKGludCl1cmItPmlzb19mcmFtZV9kZXNjW3RkLT5pc29fY250XS5sZW5ndGgpOwogCX0gZWxzZSB7CiAJCWJ1ZiA9ICh1MTYgKikodXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQlzaXplID0gbWluKChpbnQpYnVmc2l6ZSwKKwkJc2l6ZSA9IG1pbl90KHUzMiwgYnVmc2l6ZSwKIAkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCkBAIC0xNjE1LDYgKzE2MTcsMTEgQEAKIAkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIERUQ0hFLCBJTlRFTkIyKTsKIAkJCXI4YTY2NTk3X3VzYl9kaXNjb25uZWN0KHI4YTY2NTk3LCAxKTsKIAkJfQorCQlpZiAobWFzazIgJiBCQ0hHKSB7CisJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkJDSEcsIElOVFNUUzIpOworCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgQkNIR0UsIElOVEVOQjIpOworCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJCX0KIAl9CiAKIAlpZiAobWFzazEpIHsKQEAgLTE2MzAsNiArMTYzNywxMiBAQAogCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgRFRDSEUsIElOVEVOQjEpOwogCQkJcjhhNjY1OTdfdXNiX2Rpc2Nvbm5lY3QocjhhNjY1OTcsIDApOwogCQl9CisJCWlmIChtYXNrMSAmIEJDSEcpIHsKKwkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QkNIRywgSU5UU1RTMSk7CisJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBCQ0hHRSwgSU5URU5CMSk7CisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKKwkJfQorCiAJCWlmIChtYXNrMSAmIFNJR04pIHsKIAkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+U0lHTiwgSU5UU1RTMSk7CiAJCQlzdGF0dXMgPSBnZXRfdXJiX2Vycm9yKHI4YTY2NTk3LCAwKTsKQEAgLTIxNDEsNyArMjE1NCw3IEBACiAKIAkJc3dpdGNoICh3VmFsdWUpIHsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKLQkJCXJoLT5wb3J0ICY9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOworCQkJcmgtPnBvcnQgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgogCQkJYnJlYWs7CkBAIC0yMjEzLDYgKzIyMjYsNjggQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUE0pCitzdGF0aWMgaW50IHI4YTY2NTk3X2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NyA9IGhjZF90b19yOGE2NjU5NyhoY2QpOworCWludCBwb3J0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBSOEE2NjU5N19NQVhfUk9PVF9IVUI7IHBvcnQrKykgeworCQlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKKwkJdW5zaWduZWQgbG9uZyBkdnN0Y3RyX3JlZyA9IGdldF9kdnN0Y3RyX3JlZyhwb3J0KTsKKworCQlpZiAoIShyaC0+cG9ydCAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFKSkpCisJCQljb250aW51ZTsKKworCQlkYmcoInN1c3BlbmQgcG9ydCA9ICVkIiwgcG9ydCk7CisJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIFVBQ1QsIGR2c3RjdHJfcmVnKTsJLyogc3VzcGVuZCAqLworCQlyaC0+cG9ydCB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORDsKKworCQlpZiAocmgtPmRldi0+dWRldi0+ZG9fcmVtb3RlX3dha2V1cCkgeworCQkJbXNsZWVwKDMpOwkvKiB3YWl0aW5nIGxhc3QgU09GICovCisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBSV1VQRSwgZHZzdGN0cl9yZWcpOworCQkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5CQ0hHLCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBCQ0hHRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCQl9CisJfQorCisJcjhhNjY1OTctPmJ1c19zdXNwZW5kZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjhhNjY1OTdfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcgPSBoY2RfdG9fcjhhNjY1OTcoaGNkKTsKKwlpbnQgcG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisJCXVuc2lnbmVkIGxvbmcgZHZzdGN0cl9yZWcgPSBnZXRfZHZzdGN0cl9yZWcocG9ydCk7CisKKwkJaWYgKCEocmgtPnBvcnQgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKSkKKwkJCWNvbnRpbnVlOworCisJCWRiZygicmVzdW1lIHBvcnQgPSAlZCIsIHBvcnQpOworCQlyaC0+cG9ydCAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJcmgtPnBvcnQgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDsKKwkJcjhhNjY1OTdfbWRmeShyOGE2NjU5NywgUkVTVU1FLCBSRVNVTUUgfCBVQUNULCBkdnN0Y3RyX3JlZyk7CisJCW1zbGVlcCg1MCk7CisJCXI4YTY2NTk3X21kZnkocjhhNjY1OTcsIFVBQ1QsIFJFU1VNRSB8IFVBQ1QsIGR2c3RjdHJfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorI2Vsc2UKKyNkZWZpbmUJcjhhNjY1OTdfYnVzX3N1c3BlbmQJTlVMTAorI2RlZmluZQlyOGE2NjU5N19idXNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGhjX2RyaXZlciByOGE2NjU5N19oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAogCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCByOGE2NjU5NyksCkBAIC0yMjQzLDE2ICsyMzE4LDM5IEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CXI4YTY2NTk3X2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJcjhhNjY1OTdfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kID0JCXI4YTY2NTk3X2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCXI4YTY2NTk3X2J1c19yZXN1bWUsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pCiBzdGF0aWMgaW50IHI4YTY2NTk3X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCXN0cnVjdCByOGE2NjU5NwkJKnI4YTY2NTk3ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCBwb3J0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWRpc2FibGVfY29udHJvbGxlcihyOGE2NjU5Nyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisKKwkJcmgtPnBvcnQgPSAweDAwMDAwMDAwOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHI4YTY2NTk3X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCByOGE2NjU5NwkJKnI4YTY2NTk3ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwllbmFibGVfY29udHJvbGxlcihyOGE2NjU5Nyk7CisJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwogCXJldHVybiAwOwogfQogI2Vsc2UJLyogaWYgZGVmaW5lZChDT05GSUdfUE0pICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmggYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmgKaW5kZXggZWNhY2RlNC4uZjQ5MjA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTcuaApAQCAtNTA0LDYgKzUwNCw4IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkX2RldmljZTsKIAl1bnNpZ25lZCBsb25nIGNoaWxkX2Nvbm5lY3RfbWFwWzRdOworCisJdW5zaWduZWQgYnVzX3N1c3BlbmRlZDoxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcjhhNjY1OTcgKmhjZF90b19yOGE2NjU5NyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggZTEwNmU5ZC4uYTk0OTI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOwogCiAJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9IT1NUQ1RMUkVHLCBjb250cm9sKTsKLQllcC0+bGVuZ3RoID0gbWluKChpbnQpbGVuLAorCWVwLT5sZW5ndGggPSBtaW5fdCh1MzIsIGxlbiwKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJUEFDS0VUKCJJTiVzLyVkIHFoJXAgbGVuJWRcbiIsIGVwLT5uYWtfY291bnQgPyAiL3JldHJ5IiA6ICIiLAogCQkJISF1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDApLCBlcCwgbGVuKTsKQEAgLTI1NSw3ICsyNTUsNyBAQAogCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXByZWZldGNoKGJ1Zik7CiAKLQlsZW4gPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCWxlbiA9IG1pbl90KHUzMiwgZXAtPm1heHBhY2tldCwKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAlpZiAoIShjb250cm9sICYgU0wxMUhfSENUTE1BU0tfSVNPQ0gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCmluZGV4IDIwY2M1OGIuLmU1MmI5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCkBAIC0xMTgsNyArMTE4LDkgQEAKIAl9CiAKIAlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyVzIiwgcHR5cGUsICh1cmJwLT5mc2JyID8gIiBGU0JSIiA6ICIiKSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiIEFjdGxlbj0lZCIsIHVyYnAtPnVyYi0+YWN0dWFsX2xlbmd0aCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiIEFjdGxlbj0lZCVzIiwgdXJicC0+dXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJKHVyYnAtPnFoLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgPworCQkJCSItOCIgOiAiIikpOwogCiAJaWYgKHVyYnAtPnVyYi0+dW5saW5rZWQpCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIiBVbmxpbmtlZD0lZCIsIHVyYnAtPnVyYi0+dW5saW5rZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCmluZGV4IDk0NGY3ZTAuLmNmNWU0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKQEAgLTk0Miw3ICs5NDIsNiBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAJLnN1c3BlbmQgPQl1c2JfaGNkX3BjaV9zdXNwZW5kLAotCS5yZXN1bWVfZWFybHkgPQl1c2JfaGNkX3BjaV9yZXN1bWVfZWFybHksCiAJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKICNlbmRpZgkvKiBQTSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAppbmRleCA3ZDAxYzU2Li4yNmJkMWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCkBAIC03MywxMSArNzMsMTEgQEAKICNkZWZpbmUgICBVU0JMRUdTVVBfUldDCQkweDhmMDAJLyogdGhlIFIvV0MgYml0cyAqLwogI2RlZmluZSAgIFVTQkxFR1NVUF9STwkJMHg1MDQwCS8qIFIvTyBhbmQgcmVzZXJ2ZWQgYml0cyAqLwogCi0jZGVmaW5lIFVIQ0lfUFRSX0JJVFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDBGKQotI2RlZmluZSBVSENJX1BUUl9URVJNCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMSkKLSNkZWZpbmUgVUhDSV9QVFJfUUgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAyKQotI2RlZmluZSBVSENJX1BUUl9ERVBUSAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDQpCi0jZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDApCisjZGVmaW5lIFVIQ0lfUFRSX0JJVFMJCWNwdV90b19sZTMyKDB4MDAwRikKKyNkZWZpbmUgVUhDSV9QVFJfVEVSTQkJY3B1X3RvX2xlMzIoMHgwMDAxKQorI2RlZmluZSBVSENJX1BUUl9RSAkJY3B1X3RvX2xlMzIoMHgwMDAyKQorI2RlZmluZSBVSENJX1BUUl9ERVBUSAkJY3B1X3RvX2xlMzIoMHgwMDA0KQorI2RlZmluZSBVSENJX1BUUl9CUkVBRFRICWNwdV90b19sZTMyKDB4MDAwMCkKIAogI2RlZmluZSBVSENJX05VTUZSQU1FUwkJMTAyNAkvKiBpbiB0aGUgZnJhbWUgbGlzdCBbYXJyYXldICovCiAjZGVmaW5lIFVIQ0lfTUFYX1NPRl9OVU1CRVIJMjA0NwkvKiBpbiBhbiBTT0YgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCA1NjMxZDg5Li4zZTU4MDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTQwMiw3ICs0MDIsNyBAQAogCQkvKiBPdGhlcndpc2UgYWxsIHRoZSB0b2dnbGVzIGluIHRoZSBVUkIgaGF2ZSB0byBiZSBzd2l0Y2hlZCAqLwogCQl9IGVsc2UgewogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKLQkJCQl0ZC0+dG9rZW4gXj0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCQl0ZC0+dG9rZW4gXj0gY3B1X3RvX2xlMzIoCiAJCQkJCQkJVERfVE9LRU5fVE9HR0xFKTsKIAkJCQl0b2dnbGUgXj0gMTsKIAkJCX0KQEAgLTg4Myw3ICs4ODMsNyBAQAogCiAJdWhjaV9maWxsX3RkKHRkLCAwLCBVU0JfUElEX09VVCB8IHVoY2lfZXhwbGVuKDApLCAwKTsKIAl3bWIoKTsKLQlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKKwlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CiAJcWgtPmR1bW15X3RkID0gdGQ7CiAKIAkvKiBMb3ctc3BlZWQgdHJhbnNmZXJzIGdldCBhIGRpZmZlcmVudCBxdWV1ZSwgYW5kIHdvbid0IGhvZyB0aGUgYnVzLgpAQCAtODk5LDggKzg5OSw2IEBACiAJfQogCWlmIChxaC0+c3RhdGUgIT0gUUhfU1RBVEVfQUNUSVZFKQogCQlxaC0+c2tlbCA9IHNrZWw7Ci0KLQl1cmItPmFjdHVhbF9sZW5ndGggPSAtODsJLyogQWNjb3VudCBmb3IgdGhlIFNFVFVQIHBhY2tldCAqLwogCXJldHVybiAwOwogCiBub21lbToKQEAgLTEwMDMsNyArMTAwMSw3IEBACiAJICogZmFzdCBzaWRlIGJ1dCBub3QgZW5vdWdoIHRvIGp1c3RpZnkgZGVsYXlpbmcgYW4gaW50ZXJydXB0CiAJICogbW9yZSB0aGFuIDIgb3IgMyBVUkJzLCBzbyB3ZSB3aWxsIGlnbm9yZSB0aGUgVVJCX05PX0lOVEVSUlVQVAogCSAqIGZsYWcgc2V0dGluZy4gKi8KLQl0ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOwogCiAJLyoKIAkgKiBCdWlsZCB0aGUgbmV3IGR1bW15IFREIGFuZCBhY3RpdmF0ZSB0aGUgb2xkIG9uZQpAQCAtMTAxNSw3ICsxMDEzLDcgQEAKIAogCXVoY2lfZmlsbF90ZCh0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CiAJd21iKCk7Ci0JcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CisJcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOwogCXFoLT5kdW1teV90ZCA9IHRkOwogCiAJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLApAQCAtMTMxNyw3ICsxMzE1LDcgQEAKIAl9CiAKIAkvKiBTZXQgdGhlIGludGVycnVwdC1vbi1jb21wbGV0aW9uIGZsYWcgb24gdGhlIGxhc3QgcGFja2V0LiAqLwotCXRkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CisJdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiAKIAkvKiBBZGQgdGhlIFREcyB0byB0aGUgZnJhbWUgbGlzdCAqLwogCWZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKQEAgLTE0OTQsMTEgKzE0OTIsMTAgQEAKIAogCWlmIChxaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSB7CiAKLQkJLyogdXJiLT5hY3R1YWxfbGVuZ3RoIDwgMCBtZWFucyB0aGUgc2V0dXAgdHJhbnNhY3Rpb24gZGlkbid0Ci0JCSAqIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4gIEVpdGhlciBpdCBmYWlsZWQgb3IgdGhlIFVSQiB3YXMKLQkJICogdW5saW5rZWQgZmlyc3QuICBSZWdhcmRsZXNzLCBkb24ndCBjb25mdXNlIHBlb3BsZSB3aXRoIGEKLQkJICogbmVnYXRpdmUgbGVuZ3RoLiAqLwotCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtYXgodXJiLT5hY3R1YWxfbGVuZ3RoLCAwKTsKKwkJLyogU3VidHJhY3Qgb2ZmIHRoZSBsZW5ndGggb2YgdGhlIFNFVFVQIHBhY2tldCBmcm9tCisJCSAqIHVyYi0+YWN0dWFsX2xlbmd0aC4KKwkJICovCisJCXVyYi0+YWN0dWFsX2xlbmd0aCAtPSBtaW5fdCh1MzIsIDgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCiAJLyogV2hlbiBnaXZpbmcgYmFjayB0aGUgZmlyc3QgVVJCIGluIGFuIElzb2Nocm9ub3VzIHF1ZXVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCmluZGV4IDIyOTFjNWYuLjk1ODc1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKQEAgLTIyNywxMyArMjI3LDEzIEBACiAJICogTm93IHRoYXQgdGhlIEFTTCBpcyB1cGRhdGVkLCBjb21wbGV0ZSB0aGUgcmVtb3ZhbCBvZiBhbnkKIAkgKiByZW1vdmVkIHFzZXRzLgogCSAqLwotCXNwaW5fbG9jaygmd2hjLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZ3aGMtPmxvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHFzZXQsIHQsICZ3aGMtPmFzeW5jX3JlbW92ZWRfbGlzdCwgbGlzdF9ub2RlKSB7CiAJCXFzZXRfcmVtb3ZlX2NvbXBsZXRlKHdoYywgcXNldCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJndoYy0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZ3aGMtPmxvY2spOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwppbmRleCA3ZGM4NWEwLi5kZjhiODVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCkBAIC0yNTUsMTMgKzI1NSwxMyBAQAogCSAqIE5vdyB0aGF0IHRoZSBQWkwgaXMgdXBkYXRlZCwgY29tcGxldGUgdGhlIHJlbW92YWwgb2YgYW55CiAJICogcmVtb3ZlZCBxc2V0cy4KIAkgKi8KLQlzcGluX2xvY2soJndoYy0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmd2hjLT5sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxc2V0LCB0LCAmd2hjLT5wZXJpb2RpY19yZW1vdmVkX2xpc3QsIGxpc3Rfbm9kZSkgewogCQlxc2V0X3JlbW92ZV9jb21wbGV0ZSh3aGMsIHFzZXQpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZ3aGMtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmd2hjLT5sb2NrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IDg3OGM3N2MuLmVjYTM1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9CTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0JMHgwMSwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpLAorCQkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig4KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMTk4LDcgKzE5OCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHg4MiwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAzLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig4KSwKKwkJLndNYXhQYWNrZXRTaXplID0gCWNwdV90b19sZTE2KDgpLAogCQkuYkludGVydmFsID0gCQkwLAogCQkuYlJlZnJlc2ggPSAJCTAsCiAJCS5iU3luY2hBZGRyZXNzID0gCTAsCkBAIC0yMDgsNyArMjA4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9IAkwLAogCQkuYkVuZHBvaW50QWRkcmVzcyA9IAkweDAzLAogCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDIsCi0JCS53TWF4UGFja2V0U2l6ZSA9IAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KSwKKwkJLndNYXhQYWNrZXRTaXplID0gCWNwdV90b19sZTE2KDY0KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMjE4LDcgKzIxOCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHg4NCwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJCS53TWF4UGFja2V0U2l6ZSA9IAljcHVfdG9fbGUxNig2NCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKQEAgLTQ5OSw2ICs0OTksNyBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJm1kYzgwMF9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwppbmRleCBlNDYzZGI1Li5hNjhkOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCkBAIC0xMzUsNDUgKzEzNSw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeXRoZXJtLgogCi1jb25maWcgVVNCX1BISURHRVQKLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRzIGRyaXZlcnMiCi0JZGVwZW5kcyBvbiBVU0IKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgdmFyaW91cyBkcml2ZXJzIGZvciBkZXZpY2VzIGZyb20KLQkgIFBoaWRnZXRzIGluYy4KLQotY29uZmlnIFVTQl9QSElER0VUS0lUCi0JdHJpc3RhdGUgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfUEhJREdFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFBoaWRnZXRJbnRlcmZhY2VLaXQgVVNCIGRldmljZQotCSAgZnJvbSBQaGlkZ2V0cyBJbmMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRraXQuCi0KLWNvbmZpZyBVU0JfUEhJREdFVE1PVE9SQ09OVFJPTAotCXRyaXN0YXRlICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1BISURHRVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0TW90b3JDb250cm9sIFVTQiBkZXZpY2UKLQkgIGZyb20gUGhpZGdldHMgSW5jLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0bW90b3Jjb250cm9sLgotCi1jb25maWcgVVNCX1BISURHRVRTRVJWTwotCXRyaXN0YXRlICJVU0IgUGhpZGdldFNlcnZvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfUEhJREdFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhbiAxIG9yIDQgTW90b3IgUGhpZGdldFNlcnZvIAotCSAgc2Vydm8gY29udHJvbGxlciB2ZXJzaW9uIDIuMCBvciAzLjAuCi0KLQkgIFBoaWRnZXRzIEluYy4gaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cucGhpZGdldHMuY29tLz4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRzZXJ2by4KLQogY29uZmlnIFVTQl9JRE1PVVNFCiAJdHJpc3RhdGUgIlNpZW1lbnMgSUQgVVNCIE1vdXNlIEZpbmdlcnByaW50IHNlbnNvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQppbmRleCAxMzM0ZjdiLi4wODI2YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTE4LDEwICsxOCw2IEBACiBvYmotJChDT05GSUdfVVNCX0xEKQkJKz0gbGR1c2Iubwogb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSB1c2JsZWQubwogb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IGxlZ291c2J0b3dlci5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVQpCSs9IHBoaWRnZXQubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUS0lUKQkrPSBwaGlkZ2V0a2l0Lm8KLW9iai0kKENPTkZJR19VU0JfUEhJREdFVE1PVE9SQ09OVFJPTCkJKz0gcGhpZGdldG1vdG9yY29udHJvbC5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVRTRVJWTykJKz0gcGhpZGdldHNlcnZvLm8KIG9iai0kKENPTkZJR19VU0JfUklPNTAwKQkrPSByaW81MDAubwogb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCiBvYmotJChDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SKQkrPSB0cmFuY2V2aWJyYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwppbmRleCA3YjY5MjJlLi4yMDM1MjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCWlmIChkZXYtPm9wZW5fY291bnQgPD0gMCkgewogCQlkYmcoMSwiICVzIDogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJYWR1X3JlbGVhc2VfaW50ZXJuYWwoZGV2KTsKQEAgLTM4NSw5ICszODUsOSBAQAogCQlpZiAoIWRldi0+b3Blbl9jb3VudCkJLyogLi4uIGFuZCB3ZSdyZSB0aGUgbGFzdCB1c2VyICovCiAJCQlhZHVfZGVsZXRlKGRldik7CiAJfQotCi1leGl0OgordW5sb2NrOgogCW11dGV4X3VubG9jaygmYWR1dHV4X211dGV4KTsKK2V4aXQ6CiAJZGJnKDIsIiAlcyA6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX2Z1bmNfXywgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggNzlhNzY2OC4uOWQwNjc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHg4MiB8IChlZCA8PCA1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdfbGVuZ3RoID09IDApIHsKQEAgLTE3MDIsNyArMTcwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFkZHJlc3MgPDwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gbWluKDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gbWluX3QodTMyLCAxMDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwpAQCAtMTc2Niw3ICsxNzY2LDcgQEAKICAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOwogICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzVlZDMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIFVTQiBQaGlkZ2V0cyBjbGFzcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiAgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0KLXN0cnVjdCBjbGFzcyAqcGhpZGdldF9jbGFzczsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9waGlkZ2V0KHZvaWQpCi17Ci0JcGhpZGdldF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInBoaWRnZXQiKTsKLQotCWlmIChJU19FUlIocGhpZGdldF9jbGFzcykpCi0JCXJldHVybiBQVFJfRVJSKHBoaWRnZXRfY2xhc3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3BoaWRnZXQodm9pZCkKLXsKLQljbGFzc19kZXN0cm95KHBoaWRnZXRfY2xhc3MpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChwaGlkZ2V0X2NsYXNzKTsKLQotbW9kdWxlX2luaXQoaW5pdF9waGlkZ2V0KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfcGhpZGdldCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkNvbnRhaW5lciBtb2R1bGUgZm9yIHBoaWRnZXQgY2xhc3MiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmggYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwMTE5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldHMgY2xhc3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi1leHRlcm4gc3RydWN0IGNsYXNzICpwaGlkZ2V0X2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4ZTBhOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgL2Rldi9udWxsCkBAIC0xLDc0MCArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgZHJpdmVyIDEuMAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IERhbmllbCBTYWFrZXMgPGRhbmllbEBzYWFrZXMubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgInBoaWRnZXQuaCIKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IERyaXZlciIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAwNAkweDAwNDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMTYxNgkweDAwNDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgJMHgwMDQ1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDQ3CTB4MDA1MQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OAkweDAwNTMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg0CTB4ODIwMQotCi0jZGVmaW5lIE1BWF9JTlRFUkZBQ0VTCQkJMTYKLQotI2RlZmluZSBVUkJfSU5UX1NJWkUJCQk4Ci0KLXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHsKLQlpbnQgc2Vuc29yczsKLQlpbnQgaW5wdXRzOwotCWludCBvdXRwdXRzOwotCWludCBoYXNfbGNkOwotCWludCBhbW5lc2lhYzsKLX07Ci0KLSNkZWZpbmUgaWZraXQoX3NlbnNvcnMsIF9pbnB1dHMsIF9vdXRwdXRzLCBfbGNkLCBfYW1uZXNpYWMpCQlcCi17CQkJCQkJCQkJXAotCS5zZW5zb3JzCT0gX3NlbnNvcnMsCQkJCQlcCi0JLmlucHV0cwkJPSBfaW5wdXRzLAkJCQkJXAotCS5vdXRwdXRzCT0gX291dHB1dHMsCQkJCQlcCi0JLmhhc19sY2QJPSBfbGNkLAkJCQkJCVwKLQkuYW1uZXNpYWMJPSBfYW1uZXNpYWMJCQkJCVwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF8wMDQgPSBpZmtpdCgwLCAwLCA0LCAwLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF84ODhuID0gaWZraXQoOCwgOCwgOCwgMCwgMSk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfODg4byA9IGlma2l0KDgsIDgsIDgsIDAsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzA0NyA9IGlma2l0KDAsIDQsIDcsIDEsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzg4NCA9IGlma2l0KDgsIDgsIDQsIDAsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzA4OCA9IGlma2l0KDAsIDgsIDgsIDEsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzAxNjE2ID0gaWZraXQoMCwgMTYsIDE2LCAwLCAwKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOwotCi1zdHJ1Y3QgaW50ZXJmYWNla2l0IHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXVuc2lnbmVkIGxvbmcgb3V0cHV0czsKLQlpbnQgZGV2X25vOwotCXU4IGlucHV0c1tNQVhfSU5URVJGQUNFU107Ci0JdTE2IHNlbnNvcnNbTUFYX0lOVEVSRkFDRVNdOwotCXU4IGxjZF9maWxlc19vbjsKLQotCXN0cnVjdCB1cmIgKmlycTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX25vdGlmeTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX3Jlc3VibWl0OwotCXVuc2lnbmVkIGxvbmcgaW5wdXRfZXZlbnRzOwotCXVuc2lnbmVkIGxvbmcgc2Vuc29yX2V2ZW50czsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMDQpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAwNH0sCi0Je1VTQl9ERVZJQ0VfVkVSKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgsIDAsIDB4ODE0KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF84ODhvfSwKLQl7VVNCX0RFVklDRV9WRVIoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OCwgMHgwODE1LCAweGZmZmYpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4OG59LAotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwNDcpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzA0N30sCi0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OCksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDg4fSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDE2MTYpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAxNjE2fSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODQpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4NH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1zdGF0aWMgaW50IHNldF9vdXRwdXRzKHN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCkKLXsKLQl1OCAqYnVmZmVyOwotCWludCByZXR2YWw7Ci0KLQlidWZmZXIgPSBremFsbG9jKDQsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlidWZmZXJbMF0gPSAodTgpa2l0LT5vdXRwdXRzOwotCWJ1ZmZlclsxXSA9ICh1OCkoa2l0LT5vdXRwdXRzID4+IDgpOwotCi0JZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJzZW5kaW5nIGRhdGE6IDB4JTA0eFxuIiwgKHUxNilraXQtPm91dHB1dHMpOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKLQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKLQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA0LCAyMDAwKTsKLQotCWlmIChyZXR2YWwgIT0gNCkKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIAotCQkJCXJldHZhbCk7Ci0Ja2ZyZWUoYnVmZmVyKTsKLQotCWlmIChraXQtPmlma2l0LT5hbW5lc2lhYykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZraXQtPmRvX3Jlc3VibWl0LCBIWiAvIDIpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwotfQotCi1zdGF0aWMgaW50IGNoYW5nZV9zdHJpbmcoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0LCBjb25zdCBjaGFyICpkaXNwbGF5LCB1bnNpZ25lZCBjaGFyIHJvdykKLXsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JdW5zaWduZWQgY2hhciAqZm9ybV9idWZmZXI7Ci0JaW50IHJldHZhbCA9IC1FTk9NRU07Ci0JaW50IGksaiwgbGVuLCBidWZfcHRyOwotCQotCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JZm9ybV9idWZmZXIgPSBrbWFsbG9jKDMwLCBHRlBfS0VSTkVMKTsKLQlpZiAoKCFidWZmZXIpIHx8ICghZm9ybV9idWZmZXIpKSB7Ci0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlsZW4gPSBzdHJsZW4oZGlzcGxheSk7Ci0JaWYgKGxlbiA+IDIwKQotCQlsZW4gPSAyMDsKLQotCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBMQ0QgbGluZSAlZCB0byAlc1xuIiwgcm93LCBkaXNwbGF5KTsKLQotCWZvcm1fYnVmZmVyWzBdID0gcm93ICogMHg0MCArIDB4ODA7Ci0JZm9ybV9idWZmZXJbMV0gPSAweDAyOwotCWJ1Zl9wdHIgPSAyOwotCWZvciAoaSA9IDA7IGk8bGVuOyBpKyspCi0JCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSBkaXNwbGF5W2ldOwotCi0JZm9yIChpID0gMDsgaSA8ICgyMCAtIGxlbik7IGkrKykKLQkJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MjA7Ci0JZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MDE7Ci0JZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IHJvdyAqIDB4NDAgKyAweDgwICsgc3RybGVuKGRpc3BsYXkpOwotCi0JZm9yIChpID0gMDsgaSA8IGJ1Zl9wdHI7IGkgKz0gNykgewotCQlpZiAoKGJ1Zl9wdHIgLSBpKSA+IDcpCi0JCQlsZW4gPSA3OwotCQllbHNlCi0JCQlsZW4gPSAoYnVmX3B0ciAtIGkpOwotCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCi0JCQlidWZmZXJbal0gPSBmb3JtX2J1ZmZlcltpICsgal07Ci0JCWJ1ZmZlcls3XSA9IGxlbjsKLQotCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAotCQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0JCWlmIChyZXR2YWwgPCAwKQotCQkJZ290byBleGl0OwotCX0KLQotCXJldHZhbCA9IDA7Ci1leGl0OgotCWtmcmVlKGJ1ZmZlcik7Ci0Ja2ZyZWUoZm9ybV9idWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2RlZmluZSBzZXRfbGNkX2xpbmUobnVtYmVyKQlcCi1zdGF0aWMgc3NpemVfdCBsY2RfbGluZV8jI251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQljaGFuZ2Vfc3RyaW5nKGtpdCwgYnVmLCBudW1iZXIgLSAxKTsJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQotCi0jZGVmaW5lIGxjZF9saW5lX2F0dHIobnVtYmVyKQkJCQkJCVwKLQlfX0FUVFIobGNkX2xpbmVfIyNudW1iZXIsIFNfSVdVR08sIE5VTEwsIGxjZF9saW5lXyMjbnVtYmVyKQotCi1zZXRfbGNkX2xpbmUoMSk7Ci1zZXRfbGNkX2xpbmUoMik7Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9iYWNrbGlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCWludCByZXR2YWwgPSAtRU5PTUVNOwotCQotCWJ1ZmZlciA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlZCkgPCAxKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JaWYgKGVuYWJsZWQpCi0JCWJ1ZmZlclswXSA9IDB4MDE7Ci0JYnVmZmVyWzddID0gMHgxMTsKLQotCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBiYWNrbGlnaHQgdG8gJXNcbiIsIGVuYWJsZWQgPyAib24iIDogIm9mZiIpOwotCQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCi0JCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCi0JCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZXhpdDsKLQotCXJldHZhbCA9IGNvdW50OwotZXhpdDoKLQlrZnJlZShidWZmZXIpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfbGNkX2xpbmVfYXR0cnNbXSA9IHsKLQlsY2RfbGluZV9hdHRyKDEpLAotCWxjZF9saW5lX2F0dHIoMiksCi0JX19BVFRSKGJhY2tsaWdodCwgU19JV1VHTywgTlVMTCwgc2V0X2JhY2tsaWdodCkKLX07Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9sY2RfZmlsZXMoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0KQotewotCWludCBpOwotCi0JaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7Ci0JCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiUmVtb3ZpbmcgbGNkIGZpbGVzXG4iKTsKLQotCQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9sY2RfbGluZV9hdHRycyk7IGkrKykKLQkJCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9sY2RfbGluZV9hdHRyc1tpXSk7Ci0JfQotfQotCi1zdGF0aWMgc3NpemVfdCBlbmFibGVfbGNkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBlbmFibGU7Ci0JaW50IGksIHJjOwotCQotCWlmIChraXQtPmlma2l0LT5oYXNfbGNkID09IDApCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGUpIDwgMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmICgha2l0LT5sY2RfZmlsZXNfb24pIHsKLQkJCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiQWRkaW5nIGxjZCBmaWxlc1xuIik7Ci0JCQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9sY2RfbGluZV9hdHRycyk7IGkrKykgewotCQkJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LAotCQkJCQkmZGV2X2xjZF9saW5lX2F0dHJzW2ldKTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJa2l0LT5sY2RfZmlsZXNfb24gPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7Ci0JCQlyZW1vdmVfbGNkX2ZpbGVzKGtpdCk7Ci0JCQlraXQtPmxjZF9maWxlc19vbiA9IDA7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIGNvdW50Owotb3V0OgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfbGNkX2xpbmVfYXR0cnNbaV0pOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobGNkLCBTX0lXVUdPLCBOVUxMLCBlbmFibGVfbGNkX2ZpbGVzKTsKLQotc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2lycShzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGtpdC0+ZGF0YTsKLQlpbnQgaSwgbGV2ZWwsIHNlbnNvcjsKLQlpbnQgcmV0dmFsOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCi0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJcmV0dXJuOwotCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwotCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlnb3RvIHJlc3VibWl0OwotCX0KLQotCS8qIGRpZ2l0YWwgaW5wdXRzICovCi0JaWYgKGtpdC0+aWZraXQtPmlucHV0cyA9PSAxNikgewotCQlmb3IgKGk9MDsgaSA8IDg7IGkrKykgewotCQkJbGV2ZWwgPSAoYnVmZmVyWzBdID4+IGkpICYgMTsKLQkJCWlmIChraXQtPmlucHV0c1tpXSAhPSBsZXZlbCkgewotCQkJCWtpdC0+aW5wdXRzW2ldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdChpLCAma2l0LT5pbnB1dF9ldmVudHMpOwotCQkJfQotCQkJbGV2ZWwgPSAoYnVmZmVyWzFdID4+IGkpICYgMTsKLQkJCWlmIChraXQtPmlucHV0c1s4ICsgaV0gIT0gbGV2ZWwpIHsKLQkJCQlraXQtPmlucHV0c1s4ICsgaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KDggKyBpLCAma2l0LT5pbnB1dF9ldmVudHMpOwotCQkJfQotCQl9Ci0JfQotCWVsc2UgaWYgKGtpdC0+aWZraXQtPmlucHV0cyA9PSA4KSB7Ci0JCWZvciAoaT0wOyBpIDwgODsgaSsrKSB7Ci0JCQlsZXZlbCA9IChidWZmZXJbMV0gPj4gaSkgJiAxOwotCQkJaWYgKGtpdC0+aW5wdXRzW2ldICE9IGxldmVsKSB7Ci0JCQkJa2l0LT5pbnB1dHNbaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KGksICZraXQtPmlucHV0X2V2ZW50cyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBhbmFsb2cgaW5wdXRzICovCi0JaWYgKGtpdC0+aWZraXQtPnNlbnNvcnMpIHsKLQkJc2Vuc29yID0gKGJ1ZmZlclswXSAmIDEpID8gNCA6IDA7Ci0KLQkJbGV2ZWwgPSBidWZmZXJbMl0gKyAoYnVmZmVyWzNdICYgMHgwZikgKiAyNTY7Ci0JCWlmIChsZXZlbCAhPSBraXQtPnNlbnNvcnNbc2Vuc29yXSkgewotCQkJa2l0LT5zZW5zb3JzW3NlbnNvcl0gPSBsZXZlbDsKLQkJCXNldF9iaXQoc2Vuc29yLCAma2l0LT5zZW5zb3JfZXZlbnRzKTsKLQkJfQotCQlzZW5zb3IrKzsKLQkJbGV2ZWwgPSBidWZmZXJbNF0gKyAoYnVmZmVyWzNdICYgMHhmMCkgKiAxNjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JCXNlbnNvcisrOwotCQlsZXZlbCA9IGJ1ZmZlcls1XSArIChidWZmZXJbNl0gJiAweDBmKSAqIDI1NjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JCXNlbnNvcisrOwotCQlsZXZlbCA9IGJ1ZmZlcls3XSArIChidWZmZXJbNl0gJiAweGYwKSAqIDE2OwotCQlpZiAobGV2ZWwgIT0ga2l0LT5zZW5zb3JzW3NlbnNvcl0pIHsKLQkJCWtpdC0+c2Vuc29yc1tzZW5zb3JdID0gbGV2ZWw7Ci0JCQlzZXRfYml0KHNlbnNvciwgJmtpdC0+c2Vuc29yX2V2ZW50cyk7Ci0JCX0KLQl9Ci0KLQlpZiAoa2l0LT5pbnB1dF9ldmVudHMgfHwga2l0LT5zZW5zb3JfZXZlbnRzKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fbm90aWZ5LCAwKTsKLQotcmVzdWJtaXQ6Ci0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0dmFsKQotCQllcnIoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2ludGVyZmFjZWtpdDAsIHJldHZhbCAlZCIsCi0JCQlraXQtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQlraXQtPnVkZXYtPmRldnBhdGgsIHJldHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX25vdGlmeShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlcmZhY2VraXQsIGRvX25vdGlmeS53b3JrKTsKLQlpbnQgaTsKLQljaGFyIHN5c2ZzX2ZpbGVbOF07Ci0KLQlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5pbnB1dHM7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZraXQtPmlucHV0X2V2ZW50cykpIHsKLQkJCXNwcmludGYoc3lzZnNfZmlsZSwgImlucHV0JWQiLCBpICsgMSk7Ci0JCQlzeXNmc19ub3RpZnkoJmtpdC0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKLQkJfQotCX0KLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPnNlbnNvcnM7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZraXQtPnNlbnNvcl9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJzZW5zb3IlZCIsIGkgKyAxKTsKLQkJCXN5c2ZzX25vdGlmeSgma2l0LT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19yZXN1Ym1pdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlcmZhY2VraXQsIGRvX3Jlc3VibWl0LndvcmspOwotCXNldF9vdXRwdXRzKGtpdCk7Ci19Ci0KLSNkZWZpbmUgc2hvd19zZXRfb3V0cHV0KHZhbHVlKQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X291dHB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JaW50IGVuYWJsZTsJCQkJCQkJXAotCWludCByZXR2YWw7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZSkgPCAxKQkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoZW5hYmxlKQkJCQkJCQlcCi0JCXNldF9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKTsJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQljbGVhcl9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKTsgCQkJXAotCQkJCQkJCQkJXAotCXJldHZhbCA9IHNldF9vdXRwdXRzKGtpdCk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfb3V0cHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhdGVzdF9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKSk7XAotfQotCi0jZGVmaW5lIG91dHB1dF9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIob3V0cHV0IyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAotCQlzaG93X291dHB1dCMjdmFsdWUsIHNldF9vdXRwdXQjI3ZhbHVlKQotCi1zaG93X3NldF9vdXRwdXQoMSk7Ci1zaG93X3NldF9vdXRwdXQoMik7Ci1zaG93X3NldF9vdXRwdXQoMyk7Ci1zaG93X3NldF9vdXRwdXQoNCk7Ci1zaG93X3NldF9vdXRwdXQoNSk7Ci1zaG93X3NldF9vdXRwdXQoNik7Ci1zaG93X3NldF9vdXRwdXQoNyk7Ci1zaG93X3NldF9vdXRwdXQoOCk7Ci1zaG93X3NldF9vdXRwdXQoOSk7Ci1zaG93X3NldF9vdXRwdXQoMTApOwotc2hvd19zZXRfb3V0cHV0KDExKTsKLXNob3dfc2V0X291dHB1dCgxMik7Ci1zaG93X3NldF9vdXRwdXQoMTMpOwotc2hvd19zZXRfb3V0cHV0KDE0KTsKLXNob3dfc2V0X291dHB1dCgxNSk7Ci1zaG93X3NldF9vdXRwdXQoMTYpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X291dHB1dF9hdHRyc1tdID0gewotCW91dHB1dF9hdHRyKDEpLCBvdXRwdXRfYXR0cigyKSwgb3V0cHV0X2F0dHIoMyksIG91dHB1dF9hdHRyKDQpLAotCW91dHB1dF9hdHRyKDUpLCBvdXRwdXRfYXR0cig2KSwgb3V0cHV0X2F0dHIoNyksIG91dHB1dF9hdHRyKDgpLAotCW91dHB1dF9hdHRyKDkpLCBvdXRwdXRfYXR0cigxMCksIG91dHB1dF9hdHRyKDExKSwgb3V0cHV0X2F0dHIoMTIpLAotCW91dHB1dF9hdHRyKDEzKSwgb3V0cHV0X2F0dHIoMTQpLCBvdXRwdXRfYXR0cigxNSksIG91dHB1dF9hdHRyKDE2KQotfTsKLQotI2RlZmluZSBzaG93X2lucHV0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2lucHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKLQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpa2l0LT5pbnB1dHNbdmFsdWUgLSAxXSk7CVwKLX0KLQotI2RlZmluZSBpbnB1dF9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoaW5wdXQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2lucHV0IyN2YWx1ZSwgTlVMTCkKLQotc2hvd19pbnB1dCgxKTsKLXNob3dfaW5wdXQoMik7Ci1zaG93X2lucHV0KDMpOwotc2hvd19pbnB1dCg0KTsKLXNob3dfaW5wdXQoNSk7Ci1zaG93X2lucHV0KDYpOwotc2hvd19pbnB1dCg3KTsKLXNob3dfaW5wdXQoOCk7Ci1zaG93X2lucHV0KDkpOwotc2hvd19pbnB1dCgxMCk7Ci1zaG93X2lucHV0KDExKTsKLXNob3dfaW5wdXQoMTIpOwotc2hvd19pbnB1dCgxMyk7Ci1zaG93X2lucHV0KDE0KTsKLXNob3dfaW5wdXQoMTUpOwotc2hvd19pbnB1dCgxNik7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfaW5wdXRfYXR0cnNbXSA9IHsKLQlpbnB1dF9hdHRyKDEpLCBpbnB1dF9hdHRyKDIpLCBpbnB1dF9hdHRyKDMpLCBpbnB1dF9hdHRyKDQpLAotCWlucHV0X2F0dHIoNSksIGlucHV0X2F0dHIoNiksIGlucHV0X2F0dHIoNyksIGlucHV0X2F0dHIoOCksCi0JaW5wdXRfYXR0cig5KSwgaW5wdXRfYXR0cigxMCksIGlucHV0X2F0dHIoMTEpLCBpbnB1dF9hdHRyKDEyKSwKLQlpbnB1dF9hdHRyKDEzKSwgaW5wdXRfYXR0cigxNCksIGlucHV0X2F0dHIoMTUpLCBpbnB1dF9hdHRyKDE2KQotfTsKLQotI2RlZmluZSBzaG93X3NlbnNvcih2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zZW5zb3IjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWtpdC0+c2Vuc29yc1t2YWx1ZSAtIDFdKTsJXAotfQotCi0jZGVmaW5lIHNlbnNvcl9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoc2Vuc29yIyN2YWx1ZSwgU19JUlVHTywgc2hvd19zZW5zb3IjI3ZhbHVlLCBOVUxMKQotCi1zaG93X3NlbnNvcigxKTsKLXNob3dfc2Vuc29yKDIpOwotc2hvd19zZW5zb3IoMyk7Ci1zaG93X3NlbnNvcig0KTsKLXNob3dfc2Vuc29yKDUpOwotc2hvd19zZW5zb3IoNik7Ci1zaG93X3NlbnNvcig3KTsKLXNob3dfc2Vuc29yKDgpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X3NlbnNvcl9hdHRyc1tdID0gewotCXNlbnNvcl9hdHRyKDEpLCBzZW5zb3JfYXR0cigyKSwgc2Vuc29yX2F0dHIoMyksIHNlbnNvcl9hdHRyKDQpLAotCXNlbnNvcl9hdHRyKDUpLCBzZW5zb3JfYXR0cig2KSwgc2Vuc29yX2F0dHIoNyksIHNlbnNvcl9hdHRyKDgpCi19OwotCi1zdGF0aWMgaW50IGludGVyZmFjZWtpdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdDsKLQlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7Ci0JaW50IHBpcGUsIG1heHAsIHJjID0gLUVOT01FTTsKLQlpbnQgYml0LCB2YWx1ZSwgaTsKLQotCWlma2l0ID0gKHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICopaWQtPmRyaXZlcl9pbmZvOwotCWlmICghaWZraXQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7Ci0JaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOwotCWlmICghdXNiX2VuZHBvaW50X2Rpcl9pbihlbmRwb2ludCkpCi0JCXJldHVybiAtRU5PREVWOwotCS8qCi0JICogYm1BdHRyaWJ1dGVzCi0JICovCi0JcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOwotCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCQotCWtpdCA9IGt6YWxsb2Moc2l6ZW9mKCpraXQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtpdCkKLQkJZ290byBvdXQ7Ci0KLQlraXQtPmRldl9ubyA9IC0xOwotCWtpdC0+aWZraXQgPSBpZmtpdDsKLQlraXQtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgVVJCX0lOVF9TSVpFLCBHRlBfQVRPTUlDLCAma2l0LT5kYXRhX2RtYSk7Ci0JaWYgKCFraXQtPmRhdGEpCi0JCWdvdG8gb3V0OwotCi0Ja2l0LT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICgha2l0LT5pcnEpCi0JCWdvdG8gb3V0OwotCi0Ja2l0LT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKLQlraXQtPmludGYgPSBpbnRmOwotCUlOSVRfREVMQVlFRF9XT1JLKCZraXQtPmRvX25vdGlmeSwgZG9fbm90aWZ5KTsKLQlJTklUX0RFTEFZRURfV09SSygma2l0LT5kb19yZXN1Ym1pdCwgZG9fcmVzdWJtaXQpOwotCXVzYl9maWxsX2ludF91cmIoa2l0LT5pcnEsIGtpdC0+dWRldiwgcGlwZSwga2l0LT5kYXRhLAotCQkJbWF4cCA+IFVSQl9JTlRfU0laRSA/IFVSQl9JTlRfU0laRSA6IG1heHAsCi0JCQlpbnRlcmZhY2VraXRfaXJxLCBraXQsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwotCWtpdC0+aXJxLT50cmFuc2Zlcl9kbWEgPSBraXQtPmRhdGFfZG1hOwotCWtpdC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2l0KTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZGV2aWNlX25vLCBzaXplb2YoZGV2aWNlX25vKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7Ci0gICAgICAgIH0gd2hpbGUodmFsdWUpOwotICAgICAgICBraXQtPmRldl9ubyA9IGJpdDsKLQotCWtpdC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAma2l0LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAotCQkJCSBraXQsICJpbnRlcmZhY2VraXQlZCIsIGtpdC0+ZGV2X25vKTsKLSAgICAgICAgaWYgKElTX0VSUihraXQtPmRldikpIHsKLSAgICAgICAgICAgICAgICByYyA9IFBUUl9FUlIoa2l0LT5kZXYpOwotICAgICAgICAgICAgICAgIGtpdC0+ZGV2ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotCi0JaWYgKHVzYl9zdWJtaXRfdXJiKGtpdC0+aXJxLCBHRlBfS0VSTkVMKSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZvciAoaT0wOyBpPGlma2l0LT5vdXRwdXRzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0MjsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxpZmtpdC0+aW5wdXRzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2lucHV0X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQzOwotCX0KLQotCWZvciAoaT0wOyBpPGlma2l0LT5zZW5zb3JzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X3NlbnNvcl9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0NDsKLQl9Ci0KLQlpZiAoaWZraXQtPmhhc19sY2QpIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsICZkZXZfYXR0cl9sY2QpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDQ7Ci0KLQl9Ci0KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgYXR0YWNoZWRcbiIsCi0JCQlpZmtpdC0+c2Vuc29ycywgaWZraXQtPmlucHV0cywgaWZraXQtPm91dHB1dHMpOwotCi0JcmV0dXJuIDA7Ci0KLW91dDQ6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9zZW5zb3JfYXR0cnNbaV0pOwotCi0JaSA9IGlma2l0LT5pbnB1dHM7Ci1vdXQzOgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOwotCi0JaSA9IGlma2l0LT5vdXRwdXRzOwotb3V0MjoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7Ci1vdXQ6Ci0JaWYgKGtpdCkgewotCQl1c2JfZnJlZV91cmIoa2l0LT5pcnEpOwotCQlpZiAoa2l0LT5kYXRhKQotCQkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgVVJCX0lOVF9TSVpFLCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOwotCQlpZiAoa2l0LT5kZXYpCi0JCQlkZXZpY2VfdW5yZWdpc3RlcihraXQtPmRldik7Ci0JCWlmIChraXQtPmRldl9ubyA+PSAwKQotCQkJY2xlYXJfYml0KGtpdC0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCQlrZnJlZShraXQpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQ7Ci0JaW50IGk7Ci0KLQlraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCWlmICgha2l0KQotCQlyZXR1cm47Ci0KLQl1c2Jfa2lsbF91cmIoa2l0LT5pcnEpOwotCXVzYl9mcmVlX3VyYihraXQtPmlycSk7Ci0JdXNiX2J1ZmZlcl9mcmVlKGtpdC0+dWRldiwgVVJCX0lOVF9TSVpFLCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygma2l0LT5kb19ub3RpZnkpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fcmVzdWJtaXQpOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+b3V0cHV0czsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfb3V0cHV0X2F0dHJzW2ldKTsKLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPmlucHV0czsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+c2Vuc29yczsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfc2Vuc29yX2F0dHJzW2ldKTsKLQotCWlmIChraXQtPmlma2l0LT5oYXNfbGNkKSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9hdHRyX2xjZCk7Ci0JCXJlbW92ZV9sY2RfZmlsZXMoa2l0KTsKLQl9Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihraXQtPmRldik7Ci0KLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCAlZC8lZC8lZCBkZXRhY2hlZFxuIiwKLQkJa2l0LT5pZmtpdC0+c2Vuc29ycywga2l0LT5pZmtpdC0+aW5wdXRzLCBraXQtPmlma2l0LT5vdXRwdXRzKTsKLQotCXVzYl9wdXRfZGV2KGtpdC0+dWRldik7Ci0JY2xlYXJfYml0KGtpdC0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCWtmcmVlKGtpdCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpbnRlcmZhY2VraXRfZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRraXQiLAotCS5wcm9iZSA9IGludGVyZmFjZWtpdF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IGludGVyZmFjZWtpdF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlcmZhY2VraXRfaW5pdCh2b2lkKQotewotCWludCByZXR2YWwgPSAwOwotCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpbnRlcmZhY2VraXRfZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaW50ZXJmYWNla2l0X2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmaW50ZXJmYWNla2l0X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGludGVyZmFjZWtpdF9pbml0KTsKLW1vZHVsZV9leGl0KGludGVyZmFjZWtpdF9leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODA4OGI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY1ICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldCBNb3RvckNvbnRyb2wgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSAicGhpZGdldC5oIgotCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+IgotI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgRHJpdmVyIgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0xBQgkJMHgwNmMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTU9UT1JDT05UUk9MCTB4MDA1OAotCi0jZGVmaW5lIFVSQl9JTlRfU0laRQkJCTgKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOwotCi1zdHJ1Y3QgbW90b3Jjb250cm9sIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGRldl9ubzsKLQl1OCBpbnB1dHNbNF07Ci0JczggZGVzaXJlZF9zcGVlZFsyXTsKLQlzOCBzcGVlZFsyXTsKLQlzMTYgX2N1cnJlbnRbMl07Ci0JczggYWNjZWxlcmF0aW9uWzJdOwotCXN0cnVjdCB1cmIgKmlycTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX25vdGlmeTsKLQl1bnNpZ25lZCBsb25nIGlucHV0X2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHNwZWVkX2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIGV4Y2VlZF9ldmVudHM7Ci19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX01PVE9SQ09OVFJPTCkgfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgc2V0X21vdG9yKHN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jLCBpbnQgbW90b3IpCi17Ci0JdTggKmJ1ZmZlcjsKLQlpbnQgc3BlZWQsIHNwZWVkMiwgYWNjZWxlcmF0aW9uOwotCWludCByZXR2YWw7Ci0KLQlidWZmZXIgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JYWNjZWxlcmF0aW9uID0gbWMtPmFjY2VsZXJhdGlvblttb3Rvcl0gKiAxMDsKLQkvKiAtMTI3IDw9IHNwZWVkIDw9IDEyNyAqLwotCXNwZWVkID0gKG1jLT5kZXNpcmVkX3NwZWVkW21vdG9yXSAqIDEyNykgLyAxMDA7Ci0JLyogLTB4NzMwMCA8PSBzcGVlZDIgPD0gMHg3MzAwICovCi0Jc3BlZWQyID0gKG1jLT5kZXNpcmVkX3NwZWVkW21vdG9yXSAqIDIzMCAqIDEyOCkgLyAxMDA7Ci0KLQlidWZmZXJbMF0gPSBtb3RvcjsKLQlidWZmZXJbMV0gPSBzcGVlZDsKLQlidWZmZXJbMl0gPSBhY2NlbGVyYXRpb24gPj4gODsKLQlidWZmZXJbM10gPSBhY2NlbGVyYXRpb247Ci0JYnVmZmVyWzRdID0gc3BlZWQyID4+IDg7Ci0JYnVmZmVyWzVdID0gc3BlZWQyOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKG1jLT51ZGV2LAotCQkJIHVzYl9zbmRjdHJscGlwZShtYy0+dWRldiwgMCksCi0JCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0KLQlpZiAocmV0dmFsICE9IDgpCi0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCi0JCQkJcmV0dmFsKTsKLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwotfQotCi1zdGF0aWMgdm9pZCBtb3RvcmNvbnRyb2xfaXJxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IHVyYi0+Y29udGV4dDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBtYy0+ZGF0YTsKLQlpbnQgaSwgbGV2ZWw7Ci0JaW50IHJldHZhbDsKLQlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7OwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQlyZXR1cm47Ci0JLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCi0JZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWdvdG8gcmVzdWJtaXQ7Ci0JfQotCi0JLyogZGlnaXRhbCBpbnB1dHMgKi8KLQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJbGV2ZWwgPSAoYnVmZmVyWzBdID4+IGkpICYgMTsKLQkJaWYgKG1jLT5pbnB1dHNbaV0gIT0gbGV2ZWwpIHsKLQkJCW1jLT5pbnB1dHNbaV0gPSBsZXZlbDsKLQkJCXNldF9iaXQoaSwgJm1jLT5pbnB1dF9ldmVudHMpOwotCQl9Ci0JfQotCi0JLyogbW90b3Igc3BlZWQgKi8KLQlpZiAoYnVmZmVyWzJdID09IDApIHsKLQkJZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWxldmVsID0gKChzOClidWZmZXJbNCtpXSkgKiAxMDAgLyAxMjc7Ci0JCQlpZiAobWMtPnNwZWVkW2ldICE9IGxldmVsKSB7Ci0JCQkJbWMtPnNwZWVkW2ldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdChpLCAmbWMtPnNwZWVkX2V2ZW50cyk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgaW5kZXggPSBidWZmZXJbM10gJiAxOwotCi0JCWxldmVsID0gKChzOClidWZmZXJbNF0gPDwgOCkgfCBidWZmZXJbNV07Ci0JCWxldmVsID0gbGV2ZWwgKiAxMDAgLyAyOTQ0MDsKLQkJaWYgKG1jLT5zcGVlZFtpbmRleF0gIT0gbGV2ZWwpIHsKLQkJCW1jLT5zcGVlZFtpbmRleF0gPSBsZXZlbDsKLQkJCXNldF9iaXQoaW5kZXgsICZtYy0+c3BlZWRfZXZlbnRzKTsKLQkJfQotCi0JCWxldmVsID0gKChzOClidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107Ci0JCW1jLT5fY3VycmVudFtpbmRleF0gPSBsZXZlbCAqIDEwMCAvIDE1NzI7Ci0JfQotCi0JaWYgKGJ1ZmZlclsxXSAmIDEpCi0JCXNldF9iaXQoMCwgJm1jLT5leGNlZWRfZXZlbnRzKTsKLQotCWlmIChidWZmZXJbMV0gJiAyKQotCQlzZXRfYml0KDEsICZtYy0+ZXhjZWVkX2V2ZW50cyk7Ci0KLQlpZiAobWMtPmlucHV0X2V2ZW50cyB8fCBtYy0+ZXhjZWVkX2V2ZW50cyB8fCBtYy0+c3BlZWRfZXZlbnRzKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1jLT5kb19ub3RpZnksIDApOwotCi1yZXN1Ym1pdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpCi0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsCi0JCQkiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvbW90b3Jjb250cm9sMCwgcmV0dmFsICVkXG4iLAotCQkJbWMtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQltYy0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbW90b3Jjb250cm9sLCBkb19ub3RpZnkud29yayk7Ci0JaW50IGk7Ci0JY2hhciBzeXNmc19maWxlWzhdOwotCi0JZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5pbnB1dF9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJpbnB1dCVkIiwgaSk7Ci0JCQlzeXNmc19ub3RpZnkoJm1jLT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotCi0JZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5zcGVlZF9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJzcGVlZCVkIiwgaSk7Ci0JCQlzeXNmc19ub3RpZnkoJm1jLT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotCi0JZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5leGNlZWRfZXZlbnRzKSkKLQkJCWRldl93YXJuKCZtYy0+aW50Zi0+ZGV2LAotCQkJCSJtb3RvciAjJWQgZXhjZWVkcyAxLjUgQW1wIGN1cnJlbnQgbGltaXRcbiIsIGkpOwotCX0KLX0KLQotI2RlZmluZSBzaG93X3NldF9zcGVlZCh2YWx1ZSkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9zcGVlZCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JaW50IHNwZWVkOwkJCQkJCQlcCi0JaW50IHJldHZhbDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmc3BlZWQpIDwgMSkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHNwZWVkIDwgLTEwMCB8fCBzcGVlZCA+IDEwMCkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbWMtPmRlc2lyZWRfc3BlZWRbdmFsdWVdID0gc3BlZWQ7CQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR2YWwgPSBzZXRfbW90b3IobWMsIHZhbHVlKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogY291bnQ7CQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zcGVlZCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1jLT5zcGVlZFt2YWx1ZV0pOwkJCVwKLX0KLQotI2RlZmluZSBzcGVlZF9hdHRyKHZhbHVlKSAJCQkJCQlcCi0JX19BVFRSKHNwZWVkIyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIAkJCVwKLQkJc2hvd19zcGVlZCMjdmFsdWUsIHNldF9zcGVlZCMjdmFsdWUpCi0KLXNob3dfc2V0X3NwZWVkKDApOwotc2hvd19zZXRfc3BlZWQoMSk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfYWNjZWxlcmF0aW9uKHZhbHVlKQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X2FjY2VsZXJhdGlvbiMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCAJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JaW50IGFjY2VsZXJhdGlvbjsJCQkJCQlcCi0JaW50IHJldHZhbDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmYWNjZWxlcmF0aW9uKSA8IDEpCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKGFjY2VsZXJhdGlvbiA8IDAgfHwgYWNjZWxlcmF0aW9uID4gMTAwKQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCW1jLT5hY2NlbGVyYXRpb25bdmFsdWVdID0gYWNjZWxlcmF0aW9uOwkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dmFsID0gc2V0X21vdG9yKG1jLCB2YWx1ZSk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfYWNjZWxlcmF0aW9uIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCSAJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQkJCWNoYXIgKmJ1ZikJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbWMtPmFjY2VsZXJhdGlvblt2YWx1ZV0pOwkJXAotfQotCi0jZGVmaW5lIGFjY2VsZXJhdGlvbl9hdHRyKHZhbHVlKQlcCi0JX19BVFRSKGFjY2VsZXJhdGlvbiMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCVwKLQkJc2hvd19hY2NlbGVyYXRpb24jI3ZhbHVlLCBzZXRfYWNjZWxlcmF0aW9uIyN2YWx1ZSkKLQotc2hvd19zZXRfYWNjZWxlcmF0aW9uKDApOwotc2hvd19zZXRfYWNjZWxlcmF0aW9uKDEpOwotCi0jZGVmaW5lIHNob3dfY3VycmVudCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19jdXJyZW50IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZG1BXG4iLCAoaW50KW1jLT5fY3VycmVudFt2YWx1ZV0pOwlcCi19Ci0KLSNkZWZpbmUgY3VycmVudF9hdHRyKHZhbHVlKQlcCi0JX19BVFRSKGN1cnJlbnQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2N1cnJlbnQjI3ZhbHVlLCBOVUxMKQotCi1zaG93X2N1cnJlbnQoMCk7Ci1zaG93X2N1cnJlbnQoMSk7Ci0KLSNkZWZpbmUgc2hvd19pbnB1dCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19pbnB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpbWMtPmlucHV0c1t2YWx1ZV0pOwkJXAotfQotCi0jZGVmaW5lIGlucHV0X2F0dHIodmFsdWUpCVwKLQlfX0FUVFIoaW5wdXQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2lucHV0IyN2YWx1ZSwgTlVMTCkKLQotc2hvd19pbnB1dCgwKTsKLXNob3dfaW5wdXQoMSk7Ci1zaG93X2lucHV0KDIpOwotc2hvd19pbnB1dCgzKTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyc1tdID0gewotCWlucHV0X2F0dHIoMCksCi0JaW5wdXRfYXR0cigxKSwKLQlpbnB1dF9hdHRyKDIpLAotCWlucHV0X2F0dHIoMyksCi0Jc3BlZWRfYXR0cigwKSwKLQlzcGVlZF9hdHRyKDEpLAotCWFjY2VsZXJhdGlvbl9hdHRyKDApLAotCWFjY2VsZXJhdGlvbl9hdHRyKDEpLAotCWN1cnJlbnRfYXR0cigwKSwKLQljdXJyZW50X2F0dHIoMSkKLX07Ci0KLXN0YXRpYyBpbnQgbW90b3Jjb250cm9sX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWM7Ci0JaW50IHBpcGUsIG1heHAsIHJjID0gLUVOT01FTTsKLQlpbnQgYml0LCB2YWx1ZSwgaTsKLQotCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKLQlpZiAoIXVzYl9lbmRwb2ludF9kaXJfaW4oZW5kcG9pbnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JICogYm1BdHRyaWJ1dGVzCi0JICovCi0JcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOwotCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCi0JbWMgPSBremFsbG9jKHNpemVvZigqbWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1jKQotCQlnb3RvIG91dDsKLQotCW1jLT5kZXZfbm8gPSAtMTsKLQltYy0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBVUkJfSU5UX1NJWkUsIEdGUF9BVE9NSUMsICZtYy0+ZGF0YV9kbWEpOwotCWlmICghbWMtPmRhdGEpCi0JCWdvdG8gb3V0OwotCi0JbWMtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYy0+aXJxKQotCQlnb3RvIG91dDsKLQotCW1jLT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKLQltYy0+aW50ZiA9IGludGY7Ci0JbWMtPmFjY2VsZXJhdGlvblswXSA9IG1jLT5hY2NlbGVyYXRpb25bMV0gPSAxMDsKLQlJTklUX0RFTEFZRURfV09SSygmbWMtPmRvX25vdGlmeSwgZG9fbm90aWZ5KTsKLQl1c2JfZmlsbF9pbnRfdXJiKG1jLT5pcnEsIG1jLT51ZGV2LCBwaXBlLCBtYy0+ZGF0YSwKLQkJCW1heHAgPiBVUkJfSU5UX1NJWkUgPyBVUkJfSU5UX1NJWkUgOiBtYXhwLAotCQkJbW90b3Jjb250cm9sX2lycSwgbWMsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwotCW1jLT5pcnEtPnRyYW5zZmVyX2RtYSA9IG1jLT5kYXRhX2RtYTsKLQltYy0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWMpOwotCi0JZG8gewotCQliaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKLQkJdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7Ci0JfSB3aGlsZSh2YWx1ZSk7Ci0JbWMtPmRldl9ubyA9IGJpdDsKLQotCW1jLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZtYy0+dWRldi0+ZGV2LCBNS0RFVigwLCAwKSwgbWMsCi0JCQkJIm1vdG9yY29udHJvbCVkIiwgbWMtPmRldl9ubyk7Ci0JaWYgKElTX0VSUihtYy0+ZGV2KSkgewotCQlyYyA9IFBUUl9FUlIobWMtPmRldik7Ci0JCW1jLT5kZXYgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodXNiX3N1Ym1pdF91cmIobWMtPmlycSwgR0ZQX0tFUk5FTCkpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9hdHRycyk7IGkrKykgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQyOwotCX0KLQotCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBhdHRhY2hlZFxuIik7Ci0KLQlyZXR1cm4gMDsKLW91dDI6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLW91dDoKLQlpZiAobWMpIHsKLQkJdXNiX2ZyZWVfdXJiKG1jLT5pcnEpOwotCQlpZiAobWMtPmRhdGEpCi0JCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBVUkJfSU5UX1NJWkUsIG1jLT5kYXRhLCBtYy0+ZGF0YV9kbWEpOwotCQlpZiAobWMtPmRldikKLQkJCWRldmljZV91bnJlZ2lzdGVyKG1jLT5kZXYpOwotCQlpZiAobWMtPmRldl9ubyA+PSAwKQotCQkJY2xlYXJfYml0KG1jLT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0JCWtmcmVlKG1jKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vdG9yY29udHJvbF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWM7Ci0JaW50IGk7Ci0KLQltYyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0JaWYgKCFtYykKLQkJcmV0dXJuOwotCi0JdXNiX2tpbGxfdXJiKG1jLT5pcnEpOwotCXVzYl9mcmVlX3VyYihtYy0+aXJxKTsKLQl1c2JfYnVmZmVyX2ZyZWUobWMtPnVkZXYsIFVSQl9JTlRfU0laRSwgbWMtPmRhdGEsIG1jLT5kYXRhX2RtYSk7Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrKCZtYy0+ZG9fbm90aWZ5KTsKLQotCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2F0dHJzKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUobWMtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihtYy0+ZGV2KTsKLQotCXVzYl9wdXRfZGV2KG1jLT51ZGV2KTsKLQljbGVhcl9iaXQobWMtPmRldl9ubywgJmRldmljZV9ubyk7Ci0Ja2ZyZWUobWMpOwotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgZGV0YWNoZWRcbiIpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbW90b3Jjb250cm9sX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwaGlkZ2V0bW90b3Jjb250cm9sIiwKLQkucHJvYmUgPSBtb3RvcmNvbnRyb2xfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBtb3RvcmNvbnRyb2xfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPSBpZF90YWJsZQotfTsKLQotc3RhdGljIGludCBfX2luaXQgbW90b3Jjb250cm9sX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbW90b3Jjb250cm9sX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1vdG9yY29udHJvbF9leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJm1vdG9yY29udHJvbF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChtb3RvcmNvbnRyb2xfaW5pdCk7Ci1tb2R1bGVfZXhpdChtb3RvcmNvbnRyb2xfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjZmZTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYworKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRTZXJ2byBkcml2ZXIgMS4wCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRTZXJ2byB2ZXJzaW9uIDIuMCBhbmQgMy4wIHNlcnZvIAotICogY29udHJvbGxlcnMgYXZhaWxhYmxlIGF0OiBodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8gCi0gKgotICogTm90ZSB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5wdXQgYXM6IGRlZ3JlZXMubWludXRlcwotICoKLSAqIENBVVRJT046IEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSAwIDwgZGVncmVlcyA8IDE4MCBhcyBhbnl0aGluZyBlbHNlCi0gKiBpcyBwcm9iYWJseSBiZXlvbmQgdGhlIHJhbmdlIG9mIHlvdXIgc2Vydm8gYW5kIG1heSBkYW1hZ2UgaXQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgInBoaWRnZXQuaCIKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0U2Vydm8gRHJpdmVyIgotCi0jZGVmaW5lIFZFTkRPUl9JRF9HTEFCCQkJCTB4MDZjMgotI2RlZmluZSBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRAkweDAwMzgKLSNkZWZpbmUgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSQkJMHgwMDM5Ci0KLSNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUAkJCTB4MDkyNQotI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19RVUFECTB4ODEwMQotI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19VTkkJMHg4MTA0Ci0KLSNkZWZpbmUgU0VSVk9fVkVSU0lPTl8zMAkJCTB4MDEKLSNkZWZpbmUgU0VSVk9fQ09VTlRfUVVBRAkJCTB4MDIKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Ci0JewotCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9HTEFCLCBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRCksIAotCQkuZHJpdmVyX2luZm8gPSBTRVJWT19WRVJTSU9OXzMwIHwgU0VSVk9fQ09VTlRfUVVBRCAKLQl9LAotCXsKLQkJVVNCX0RFVklDRShWRU5ET1JfSURfR0xBQiwgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSSksCi0JCS5kcml2ZXJfaW5mbyA9IFNFUlZPX1ZFUlNJT05fMzAgCi0JfSwKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCi0JCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fUVVBRCksCi0JCS5kcml2ZXJfaW5mbyA9IFNFUlZPX0NPVU5UX1FVQUQgCi0JfSwKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCi0JCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fVU5JKSwKLQkJLmRyaXZlcl9pbmZvID0gMAotCX0sCi0Je30KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgdW5zaWduZWQgbG9uZyBkZXZpY2Vfbm87Ci0KLXN0cnVjdCBwaGlkZ2V0X3NlcnZvIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGRldl9ubzsKLQl1bG9uZyB0eXBlOwotCWludCBwdWxzZVs0XTsKLQlpbnQgZGVncmVlc1s0XTsKLQlpbnQgbWludXRlc1s0XTsKLX07Ci0KLXN0YXRpYyBpbnQKLWNoYW5nZV9wb3NpdGlvbl92MzAoc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvLCBpbnQgc2Vydm9fbm8sIGludCBkZWdyZWVzLCAKLQkJCQkJCQkJaW50IG1pbnV0ZXMpCi17Ci0JaW50IHJldHZhbDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0KLQlpZiAoZGVncmVlcyA8IC0yMyB8fCBkZWdyZWVzID4gMzYyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJ1ZmZlciA9IGttYWxsb2MoNiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigmc2Vydm8tPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiBwdWxzZSA9IDAgLSA0MDk1Ci0JICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKLQkgKgotCSAqIHB1bHNlID0gYW5nbGUgKiAxMC42ICsgMjQzLjgJCi0JICovCi0Jc2Vydm8tPnB1bHNlW3NlcnZvX25vXSA9ICgoZGVncmVlcyo2MCArIG1pbnV0ZXMpKjEwNiArIDI0MzgqNjApLzYwMDsJCi0Jc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOwotCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gbWludXRlczsJCi0KLQkvKiAKLQkgKiBUaGUgUGhpZGdldFNlcnZvIHYzLjAgaXMgY29udHJvbGxlZCBieSBzZW5kaW5nIDYgYnl0ZXMsCi0JICogNCAqIDEyIGJpdHMgZm9yIGVhY2ggc2Vydm8uCi0JICoKLQkgKiBsb3cgPSBsb3dlciA4IGJpdHMgcHVsc2UKLQkgKiBoaWdoID0gaGlnaGVyIDQgYml0cyBwdWxzZQotCSAqCi0JICogb2Zmc2V0ICAgICBiaXRzCi0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiB8IDAgfCAgICAgIGxvdyAwICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCAxIHwgaGlnaCAxIHwgaGlnaCAwIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgMiB8ICAgICAgbG93IDEgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiB8IDMgfCAgICAgIGxvdyAyICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCA0IHwgaGlnaCAzIHwgaGlnaCAyIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgNSB8ICAgICAgbG93IDMgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKi8KLQotCWJ1ZmZlclswXSA9IHNlcnZvLT5wdWxzZVswXSAmIDB4ZmY7Ci0JYnVmZmVyWzFdID0gKHNlcnZvLT5wdWxzZVswXSA+PiA4ICYgMHgwZikKLQkgICAgfCAoc2Vydm8tPnB1bHNlWzFdID4+IDQgJiAweGYwKTsKLQlidWZmZXJbMl0gPSBzZXJ2by0+cHVsc2VbMV0gJiAweGZmOwotCWJ1ZmZlclszXSA9IHNlcnZvLT5wdWxzZVsyXSAmIDB4ZmY7Ci0JYnVmZmVyWzRdID0gKHNlcnZvLT5wdWxzZVsyXSA+PiA4ICYgMHgwZikKLQkgICAgfCAoc2Vydm8tPnB1bHNlWzNdID4+IDQgJiAweGYwKTsKLQlidWZmZXJbNV0gPSBzZXJ2by0+cHVsc2VbM10gJiAweGZmOwotCi0JZGV2X2RiZygmc2Vydm8tPnVkZXYtPmRldiwKLQkJImRhdGE6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQlidWZmZXJbMF0sIGJ1ZmZlclsxXSwgYnVmZmVyWzJdLAotCQlidWZmZXJbM10sIGJ1ZmZlcls0XSwgYnVmZmVyWzVdKTsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgNiwgMjAwMCk7Ci0KLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludAotY2hhbmdlX3Bvc2l0aW9uX3YyMChzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8sIGludCBzZXJ2b19ubywgaW50IGRlZ3JlZXMsCi0JCQkJCQkJCWludCBtaW51dGVzKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCi0JaWYgKGRlZ3JlZXMgPCAtMjMgfHwgZGVncmVlcyA+IDI3OCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJnNlcnZvLT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKLQkgKiBwdWxzZSA9IGFuZ2xlICsgMjMKLQkgKi8KLQlzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dPSBkZWdyZWVzICsgMjM7Ci0Jc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOwotCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gMDsKLQotCS8qCi0JICogVGhlIFBoaWRnZXRTZXJ2byB2Mi4wIGlzIGNvbnRyb2xsZWQgYnkgc2VuZGluZyB0d28gYnl0ZXMuIFRoZQotCSAqIGZpcnN0IGJ5dGUgaXMgdGhlIHNlcnZvIG51bWJlciB4b3InZWQgd2l0aCAyOgotCSAqCi0JICogc2Vydm8gMCA9IDIKLQkgKiBzZXJ2byAxID0gMwotCSAqIHNlcnZvIDIgPSAwCi0JICogc2Vydm8gMyA9IDEKLQkgKgotCSAqIFRoZSBzZWNvbmQgYnl0ZSBpcyB0aGUgcG9zaXRpb24uCi0JICovCi0KLQlidWZmZXJbMF0gPSBzZXJ2b19ubyBeIDI7Ci0JYnVmZmVyWzFdID0gc2Vydm8tPnB1bHNlW3NlcnZvX25vXTsKLQotCWRldl9kYmcoJnNlcnZvLT51ZGV2LT5kZXYsICJkYXRhOiAlMDJ4ICUwMnhcbiIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgMiwgMjAwMCk7Ci0KLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2RlZmluZSBzaG93X3NldCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2V0X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCWludCBkZWdyZWVzLCBtaW51dGVzLCByZXR2YWw7CQkJCQlcCi0Jc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JbWludXRlcyA9IDA7CQkJCQkJCVwKLQkvKiBtdXN0IGF0IGxlYXN0IGNvbnZlcnQgZGVncmVlcyAqLwkJCQlcCi0JaWYgKHNzY2FuZihidWYsICIlZC4lZCIsICZkZWdyZWVzLCAmbWludXRlcykgPCAxKSB7CQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgCQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzZXJ2by0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzApCQkJCVwKLQkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YzMChzZXJ2bywgdmFsdWUsIGRlZ3JlZXMsIAlcCi0JCQkJCQkJbWludXRlcyk7CVwKLQllbHNlIAkJCQkJCQkJXAotCQlyZXR2YWwgPSBjaGFuZ2VfcG9zaXRpb25fdjIwKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKLQkJCQkJCQltaW51dGVzKTsJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogY291bnQ7CQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKSAJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwMmRcbiIsIHNlcnZvLT5kZWdyZWVzW3ZhbHVlXSwJCVwKLQkJCQlzZXJ2by0+bWludXRlc1t2YWx1ZV0pOwkJCVwKLX0KLQotI2RlZmluZSBzZXJ2b19hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoc2Vydm8jI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQkJXAotCQlzaG93X3NlcnZvIyN2YWx1ZSwgc2V0X3NlcnZvIyN2YWx1ZSkKLXNob3dfc2V0KDApOwotc2hvd19zZXQoMSk7Ci1zaG93X3NldCgyKTsKLXNob3dfc2V0KDMpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJzW10gPSB7Ci0Jc2Vydm9fYXR0cigwKSwgc2Vydm9fYXR0cigxKSwgc2Vydm9fYXR0cigyKSwgc2Vydm9fYXR0cigzKQotfTsKLQotc3RhdGljIGludAotc2Vydm9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7Ci0JaW50IGJpdCwgdmFsdWUsIHJjOwotCWludCBzZXJ2b19jb3VudCwgaTsKLQotCWRldiA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGhpZGdldF9zZXJ2byksIEdGUF9LRVJORUwpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwotCWRldi0+dHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKLQlkZXYtPmRldl9ubyA9IC0xOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBiaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRlc3RfYW5kX3NldF9iaXQoYml0LCAmZGV2aWNlX25vKTsKLSAgICAgICAgfSB3aGlsZSAodmFsdWUpOwotCWRldi0+ZGV2X25vID0gYml0OwotCi0JZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZkZXYtPnVkZXYtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJIGRldiwgInNlcnZvJWQiLCBkZXYtPmRldl9ubyk7Ci0JaWYgKElTX0VSUihkZXYtPmRldikpIHsKLQkJcmMgPSBQVFJfRVJSKGRldi0+ZGV2KTsKLQkJZGV2LT5kZXYgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzZXJ2b19jb3VudCA9IGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMTsKLQotCWZvciAoaT0wOyBpPHNlcnZvX2NvdW50OyBpKyspIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cnNbaV0pOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDI7Ci0JfQotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCICVkLU1vdG9yIFBoaWRnZXRTZXJ2byB2JWQuMCBhdHRhY2hlZFxuIiwKLQkJc2Vydm9fY291bnQsIGRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzAgPyAzIDogMik7Ci0KLQlpZiAoIShkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwKSkKLQkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAotCQkJICJXQVJOSU5HOiB2Mi4wIG5vdCB0ZXN0ZWQhIFBsZWFzZSByZXBvcnQgaWYgaXQgd29ya3MuXG4iKTsKLQotCXJldHVybiAwOwotb3V0MjoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldi0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLW91dDoKLQlpZiAoZGV2KSB7Ci0JCWlmIChkZXYtPmRldikKLQkJCWRldmljZV91bnJlZ2lzdGVyKGRldi0+ZGV2KTsKLQkJaWYgKGRldi0+ZGV2X25vID49IDApCi0JCQljbGVhcl9iaXQoZGV2LT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0JCWtmcmVlKGRldik7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZAotc2Vydm9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7Ci0JaW50IHNlcnZvX2NvdW50LCBpOwotCi0JZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQotCWlmICghZGV2KQotCQlyZXR1cm47Ci0KLQlzZXJ2b19jb3VudCA9IGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMTsKLQotCWZvciAoaT0wOyBpPHNlcnZvX2NvdW50OyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihkZXYtPmRldik7Ci0JdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKLQotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiAlZC1Nb3RvciBQaGlkZ2V0U2Vydm8gdiVkLjAgZGV0YWNoZWRcbiIsCi0JCXNlcnZvX2NvdW50LCBkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOwotCi0JY2xlYXJfYml0KGRldi0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQlrZnJlZShkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2Vydm9fZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRzZXJ2byIsCi0JLnByb2JlID0gc2Vydm9fcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBzZXJ2b19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdAotcGhpZGdldF9zZXJ2b19pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc2Vydm9fZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXBoaWRnZXRfc2Vydm9fZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZzZXJ2b19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChwaGlkZ2V0X3NlcnZvX2luaXQpOwotbW9kdWxlX2V4aXQocGhpZGdldF9zZXJ2b19leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwppbmRleCA2M2RmZjliLi5mMjZlYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKQEAgLTQwMSw2ICs0MDEsNyBAQAogCX0KIAogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgY291bnQpKSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKIAkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggNGNmMjdjNy4uZjhkOTA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0zNywxMCArMzcsMTMgQEAKICNkZWZpbmUgTU9OX0lPQ1hfR0VUICAgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2Jpbl9nZXQpCiAjZGVmaW5lIE1PTl9JT0NYX01GRVRDSCBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX2Jpbl9tZmV0Y2gpCiAjZGVmaW5lIE1PTl9JT0NIX01GTFVTSCBfSU8oTU9OX0lPQ19NQUdJQywgOCkKKy8qICM5IHdhcyBNT05fSU9DVF9TRVRBUEkgKi8KKyNkZWZpbmUgTU9OX0lPQ1hfR0VUWCAgIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fYmluX2dldCkKIAogI2lmZGVmIENPTkZJR19DT01QQVQKICNkZWZpbmUgTU9OX0lPQ1hfR0VUMzIgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2Jpbl9nZXQzMikKICNkZWZpbmUgTU9OX0lPQ1hfTUZFVENIMzIgX0lPV1IoTU9OX0lPQ19NQUdJQywgNywgc3RydWN0IG1vbl9iaW5fbWZldGNoMzIpCisjZGVmaW5lIE1PTl9JT0NYX0dFVFgzMiAgIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fYmluX2dldDMyKQogI2VuZGlmCiAKIC8qCkBAIC05Miw3ICs5NSwyOSBAQAogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGxlbl91cmI7CS8qIExlbmd0aCBvZiBkYXRhIChzdWJtaXR0ZWQgb3IgYWN0dWFsKSAqLwogCXVuc2lnbmVkIGludCBsZW5fY2FwOwkvKiBEZWxpdmVyZWQgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCQlzdHJ1Y3QgaXNvX3JlYyB7CisJCQlpbnQgZXJyb3JfY291bnQ7CisJCQlpbnQgbnVtZGVzYzsKKwkJfSBpc287CisJfSBzOworCWludCBpbnRlcnZhbDsKKwlpbnQgc3RhcnRfZnJhbWU7CisJdW5zaWduZWQgaW50IHhmZXJfZmxhZ3M7CisJdW5zaWduZWQgaW50IG5kZXNjOwkvKiBBY3R1YWwgbnVtYmVyIG9mIElTTyBkZXNjcmlwdG9ycyAqLworfTsKKworLyoKKyAqIElTTyB2ZWN0b3IsIHBhY2tlZCBpbnRvIHRoZSBoZWFkIG9mIGRhdGEgc3RyZWFtLgorICogVGhpcyBoYXMgdG8gdGFrZSAxNiBieXRlcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW5kIG9mIGJ1ZmZlcgorICogd3JhcCBpcyBub3QgaGFwcGVuaW5nIGluIHRoZSBtaWRkbGUgb2YgYSBkZXNjcmlwdG9yLgorICovCitzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjIHsKKwlpbnQgICAgICAgICAgaXNvX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgaXNvX29mZjsKKwl1bnNpZ25lZCBpbnQgaXNvX2xlbjsKKwl1MzIgX3BhZDsKIH07CiAKIC8qIHBlciBmaWxlIHN0YXRpc3RpYyAqLwpAQCAtMTAyLDcgKzEyNyw3IEBACiB9OwogCiBzdHJ1Y3QgbW9uX2Jpbl9nZXQgewotCXN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkcjsJLyogT25seSA0OCBieXRlcywgbm90IDY0LiAqLworCXN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkcjsJLyogQ2FuIGJlIDQ4IGJ5dGVzIG9yIDY0LiAqLwogCXZvaWQgX191c2VyICpkYXRhOwogCXNpemVfdCBhbGxvYzsJCS8qIExlbmd0aCBvZiBkYXRhIChjYW4gYmUgemVybykgKi8KIH07CkBAIC0xMzEsNiArMTU2LDExIEBACiAjZGVmaW5lIFBLVF9BTElHTiAgIDY0CiAjZGVmaW5lIFBLVF9TSVpFICAgIDY0CiAKKyNkZWZpbmUgUEtUX1NaX0FQSTAgNDgJLyogQVBJIDAgKDIuNi4yMCkgc2l6ZSAqLworI2RlZmluZSBQS1RfU1pfQVBJMSA2NAkvKiBBUEkgMSBzaXplOiBleHRyYSBmaWVsZHMgKi8KKworI2RlZmluZSBJU09ERVNDX01BWCAgIDEyOAkvKiBTYW1lIG51bWJlciBhcyB1c2JmcyBhbGxvd3MsIDIwNDggYnl0ZXMuICovCisKIC8qIG1heCBudW1iZXIgb2YgVVNCIGJ1cyBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTU9OX0JJTl9NQVhfTUlOT1IgMTI4CiAKQEAgLTM2MCwxMiArMzkwLDggQEAKICAgICBjb25zdCBzdHJ1Y3QgdXJiICp1cmIsIGNoYXIgZXZfdHlwZSkKIHsKIAotCWlmICghdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmdXJiLT5lcC0+ZGVzYykgfHwgZXZfdHlwZSAhPSAnUycpCi0JCXJldHVybiAnLSc7Ci0KIAlpZiAodXJiLT5zZXR1cF9wYWNrZXQgPT0gTlVMTCkKIAkJcmV0dXJuICdaJzsKLQogCW1lbWNweShzZXR1cGIsIHVyYi0+c2V0dXBfcGFja2V0LCBTRVRVUF9MRU4pOwogCXJldHVybiAwOwogfQpAQCAtMzg3LDYgKzQxMywyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBtb25fYmluX2dldF9pc29kZXNjKGNvbnN0IHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCisgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IHVyYiAqdXJiLCBjaGFyIGV2X3R5cGUsIHVuc2lnbmVkIGludCBuZGVzYykKK3sKKwlzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjICpkcDsKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZnA7CisKKwlmcCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2M7CisJd2hpbGUgKG5kZXNjLS0gIT0gMCkgeworCQlkcCA9IChzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjICopCisJCSAgICAocnAtPmJfdmVjW29mZnNldCAvIENIVU5LX1NJWkVdLnB0ciArIG9mZnNldCAlIENIVU5LX1NJWkUpOworCQlkcC0+aXNvX3N0YXR1cyA9IGZwLT5zdGF0dXM7CisJCWRwLT5pc29fb2ZmID0gZnAtPm9mZnNldDsKKwkJZHAtPmlzb19sZW4gPSAoZXZfdHlwZSA9PSAnUycpID8gZnAtPmxlbmd0aCA6IGZwLT5hY3R1YWxfbGVuZ3RoOworCQlkcC0+X3BhZCA9IDA7CisJCWlmICgob2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjKSkgPj0gcnAtPmJfc2l6ZSkKKwkJCW9mZnNldCA9IDA7CisJCWZwKys7CisJfQorfQorCiBzdGF0aWMgdm9pZCBtb25fYmluX2V2ZW50KHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsIHN0cnVjdCB1cmIgKnVyYiwKICAgICBjaGFyIGV2X3R5cGUsIGludCBzdGF0dXMpCiB7CkBAIC0zOTYsNiArNDQyLDcgQEAKIAl1bnNpZ25lZCBpbnQgdXJiX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IG5kZXNjLCBsZW5kZXNjOwogCXVuc2lnbmVkIGNoYXIgZGlyOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CiAJY2hhciBkYXRhX3RhZyA9IDA7CkBAIC00MDcsNiArNDU0LDE5IEBACiAJLyoKIAkgKiBGaW5kIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBsZW5ndGgsIHRoZW4gYWxsb2NhdGUgc3BhY2UuCiAJICovCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSkgeworCQlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8IDApIHsKKwkJCW5kZXNjID0gMDsKKwkJfSBlbHNlIGlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID49IElTT0RFU0NfTUFYKSB7CisJCQluZGVzYyA9IElTT0RFU0NfTUFYOworCQl9IGVsc2UgeworCQkJbmRlc2MgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQl9CisJfSBlbHNlIHsKKwkJbmRlc2MgPSAwOworCX0KKwlsZW5kZXNjID0gbmRlc2Mqc2l6ZW9mKHN0cnVjdCBtb25fYmluX2lzb2Rlc2MpOworCiAJdXJiX2xlbmd0aCA9IChldl90eXBlID09ICdTJykgPwogCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggOiB1cmItPmFjdHVhbF9sZW5ndGg7CiAJbGVuZ3RoID0gdXJiX2xlbmd0aDsKQEAgLTQyOSwxMCArNDg5LDEyIEBACiAJCWRpciA9IDA7CiAJfQogCi0JaWYgKHJwLT5tbWFwX2FjdGl2ZSkKLQkJb2Zmc2V0ID0gbW9uX2J1ZmZfYXJlYV9hbGxvY19jb250aWd1b3VzKHJwLCBsZW5ndGggKyBQS1RfU0laRSk7Ci0JZWxzZQotCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jKHJwLCBsZW5ndGggKyBQS1RfU0laRSk7CisJaWYgKHJwLT5tbWFwX2FjdGl2ZSkgeworCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jX2NvbnRpZ3VvdXMocnAsCisJCQkJCQkgbGVuZ3RoICsgUEtUX1NJWkUgKyBsZW5kZXNjKTsKKwl9IGVsc2UgeworCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jKHJwLCBsZW5ndGggKyBQS1RfU0laRSArIGxlbmRlc2MpOworCX0KIAlpZiAob2Zmc2V0ID09IH4wKSB7CiAJCXJwLT5jbnRfbG9zdCsrOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycC0+Yl9sb2NrLCBmbGFncyk7CkBAIC00NTYsOSArNTE4LDMxIEBACiAJZXAtPnRzX3VzZWMgPSB0cy50dl91c2VjOwogCWVwLT5zdGF0dXMgPSBzdGF0dXM7CiAJZXAtPmxlbl91cmIgPSB1cmJfbGVuZ3RoOwotCWVwLT5sZW5fY2FwID0gbGVuZ3RoOworCWVwLT5sZW5fY2FwID0gbGVuZ3RoICsgbGVuZGVzYzsKKwllcC0+eGZlcl9mbGFncyA9IHVyYi0+dHJhbnNmZXJfZmxhZ3M7CiAKLQllcC0+ZmxhZ19zZXR1cCA9IG1vbl9iaW5fZ2V0X3NldHVwKGVwLT5zZXR1cCwgdXJiLCBldl90eXBlKTsKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkpIHsKKwkJZXAtPmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwl9IGVsc2UgaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSkgeworCQllcC0+aW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCQllcC0+c3RhcnRfZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOworCQllcC0+cy5pc28uZXJyb3JfY291bnQgPSB1cmItPmVycm9yX2NvdW50OworCQllcC0+cy5pc28ubnVtZGVzYyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJfQorCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woZXBkKSAmJiBldl90eXBlID09ICdTJykgeworCQllcC0+ZmxhZ19zZXR1cCA9IG1vbl9iaW5fZ2V0X3NldHVwKGVwLT5zLnNldHVwLCB1cmIsIGV2X3R5cGUpOworCX0gZWxzZSB7CisJCWVwLT5mbGFnX3NldHVwID0gJy0nOworCX0KKworCWlmIChuZGVzYyAhPSAwKSB7CisJCWVwLT5uZGVzYyA9IG5kZXNjOworCQltb25fYmluX2dldF9pc29kZXNjKHJwLCBvZmZzZXQsIHVyYiwgZXZfdHlwZSwgbmRlc2MpOworCQlpZiAoKG9mZnNldCArPSBsZW5kZXNjKSA+PSBycC0+Yl9zaXplKQorCQkJb2Zmc2V0IC09IHJwLT5iX3NpemU7CisJfQorCiAJaWYgKGxlbmd0aCAhPSAwKSB7CiAJCWVwLT5mbGFnX2RhdGEgPSBtb25fYmluX2dldF9kYXRhKHJwLCBvZmZzZXQsIHVyYiwgbGVuZ3RoKTsKIAkJaWYgKGVwLT5mbGFnX2RhdGEgIT0gMCkgewkvKiBZZXMsIGl0J3MgMHgwMCwgbm90ICcwJyAqLwpAQCAtNTkyLDcgKzY3Niw4IEBACiAgKiBSZXR1cm5zIHplcm8gb3IgZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQgbW9uX2Jpbl9nZXRfZXZlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCi0gICAgc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyLCB2b2lkIF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKKyAgICBzdHJ1Y3QgbW9uX2Jpbl9oZHIgX191c2VyICpoZHIsIHVuc2lnbmVkIGludCBoZHJieXRlcywKKyAgICB2b2lkIF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CkBAIC02MDksNyArNjk0LDcgQEAKIAogCWVwID0gTU9OX09GRjJIRFIocnAsIHJwLT5iX291dCk7CiAKLQlpZiAoY29weV90b191c2VyKGhkciwgZXAsIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpKSkgeworCWlmIChjb3B5X3RvX3VzZXIoaGRyLCBlcCwgaGRyYnl0ZXMpKSB7CiAJCW11dGV4X3VubG9jaygmcnAtPmZldGNoX2xvY2spOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC02NTcsNiArNzQyLDcgQEAKICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaGRyYnl0ZXMgPSBQS1RfU1pfQVBJMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKQEAgLTY3NCw4ICs3NjAsOCBAQAogCiAJZXAgPSBNT05fT0ZGMkhEUihycCwgcnAtPmJfb3V0KTsKIAotCWlmIChycC0+Yl9yZWFkIDwgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpIHsKLQkJc3RlcF9sZW4gPSBtaW4obmJ5dGVzLCBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSAtIHJwLT5iX3JlYWQpOworCWlmIChycC0+Yl9yZWFkIDwgaGRyYnl0ZXMpIHsKKwkJc3RlcF9sZW4gPSBtaW4obmJ5dGVzLCAoc2l6ZV90KShoZHJieXRlcyAtIHJwLT5iX3JlYWQpKTsKIAkJcHRyID0gKChjaGFyICopZXApICsgcnAtPmJfcmVhZDsKIAkJaWYgKHN0ZXBfbGVuICYmIGNvcHlfdG9fdXNlcihidWYsIHB0ciwgc3RlcF9sZW4pKSB7CiAJCQltdXRleF91bmxvY2soJnJwLT5mZXRjaF9sb2NrKTsKQEAgLTY4NywxMyArNzczLDEzIEBACiAJCWRvbmUgKz0gc3RlcF9sZW47CiAJfQogCi0JaWYgKHJwLT5iX3JlYWQgPj0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpIHsKKwlpZiAocnAtPmJfcmVhZCA+PSBoZHJieXRlcykgewogCQlzdGVwX2xlbiA9IGVwLT5sZW5fY2FwOwotCQlzdGVwX2xlbiAtPSBycC0+Yl9yZWFkIC0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcik7CisJCXN0ZXBfbGVuIC09IHJwLT5iX3JlYWQgLSBoZHJieXRlczsKIAkJaWYgKHN0ZXBfbGVuID4gbmJ5dGVzKQogCQkJc3RlcF9sZW4gPSBuYnl0ZXM7CiAJCW9mZnNldCA9IHJwLT5iX291dCArIFBLVF9TSVpFOwotCQlvZmZzZXQgKz0gcnAtPmJfcmVhZCAtIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpOworCQlvZmZzZXQgKz0gcnAtPmJfcmVhZCAtIGhkcmJ5dGVzOwogCQlpZiAob2Zmc2V0ID49IHJwLT5iX3NpemUpCiAJCQlvZmZzZXQgLT0gcnAtPmJfc2l6ZTsKIAkJaWYgKGNvcHlfZnJvbV9idWYocnAsIG9mZnNldCwgYnVmLCBzdGVwX2xlbikpIHsKQEAgLTcwOSw3ICs3OTUsNyBAQAogCS8qCiAJICogQ2hlY2sgaWYgd2hvbGUgcGFja2V0IHdhcyByZWFkLCBhbmQgaWYgc28sIGp1bXAgdG8gdGhlIG5leHQgb25lLgogCSAqLwotCWlmIChycC0+Yl9yZWFkID49IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpICsgZXAtPmxlbl9jYXApIHsKKwlpZiAocnAtPmJfcmVhZCA+PSBoZHJieXRlcyArIGVwLT5sZW5fY2FwKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZycC0+Yl9sb2NrLCBmbGFncyk7CiAJCW1vbl9idWZmX2FyZWFfZnJlZShycCwgUEtUX1NJWkUgKyBlcC0+bGVuX2NhcCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKQEAgLTkwOCw2ICs5OTQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTU9OX0lPQ1hfR0VUOgorCWNhc2UgTU9OX0lPQ1hfR0VUWDoKIAkJewogCQlzdHJ1Y3QgbW9uX2Jpbl9nZXQgZ2V0YjsKIApAQCAtOTE3LDggKzEwMDQsOSBAQAogCiAJCWlmIChnZXRiLmFsbG9jID4gMHgxMDAwMDAwMCkJLyogV2FudCB0byBjYXN0IHRvIHUzMiAqLwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLAotCQkJICBnZXRiLmhkciwgZ2V0Yi5kYXRhLCAodW5zaWduZWQgaW50KWdldGIuYWxsb2MpOworCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwgZ2V0Yi5oZHIsCisJCSAgICAoY21kID09IE1PTl9JT0NYX0dFVCk/IFBLVF9TWl9BUEkwOiBQS1RfU1pfQVBJMSwKKwkJICAgIGdldGIuZGF0YSwgKHVuc2lnbmVkIGludClnZXRiLmFsbG9jKTsKIAkJfQogCQlicmVhazsKIApAQCAtOTg0LDE2ICsxMDcyLDE4IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCi0JY2FzZSBNT05fSU9DWF9HRVQzMjogeworCWNhc2UgTU9OX0lPQ1hfR0VUMzI6CisJY2FzZSBNT05fSU9DWF9HRVRYMzI6CisJCXsKIAkJc3RydWN0IG1vbl9iaW5fZ2V0MzIgZ2V0YjsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmdldGIsICh2b2lkIF9fdXNlciAqKWFyZywKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9nZXQzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsCi0JCSAgICBjb21wYXRfcHRyKGdldGIuaGRyMzIpLCBjb21wYXRfcHRyKGdldGIuZGF0YTMyKSwKLQkJICAgIGdldGIuYWxsb2MzMik7CisJCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLCBjb21wYXRfcHRyKGdldGIuaGRyMzIpLAorCQkgICAgKGNtZCA9PSBNT05fSU9DWF9HRVQzMik/IFBLVF9TWl9BUEkwOiBQS1RfU1pfQVBJMSwKKwkJICAgIGNvbXBhdF9wdHIoZ2V0Yi5kYXRhMzIpLCBnZXRiLmFsbG9jMzIpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA5OTg1ZGIwLi5iNjZlODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0yMCw4ICsyMCw4IEBACiAJICBpdCdzIGJlaW5nIHVzZWQgd2l0aCwgaW5jbHVkaW5nIHRoZSBVU0IgcGVyaXBoZXJhbCByb2xlLAogCSAgb3IgdGhlIFVTQiBob3N0IHJvbGUsIG9yIGJvdGguCiAKLQkgIFRleGFzIEluc3RydW1lbnRzIHBhcnRzIHVzaW5nIHRoaXMgSVAgaW5jbHVkZSBEYVZpbmNpIDY0NHgsCi0JICBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KKwkgIFRleGFzIEluc3RydW1lbnRzIGZhbWlsaWllcyB1c2luZyB0aGlzIElQIGluY2x1ZGUgRGFWaW5jaQorCSAgKDM1eCwgNjQ0eCAuLi4pLCBPTUFQIDI0M3gsIE9NQVAgMywgYW5kIFRVU0IgNjAxMC4KIAogCSAgQW5hbG9nIERldmljZXMgcGFydHMgdXNpbmcgdGhpcyBJUCBpbmNsdWRlIEJsYWNrZmluIEJGNTR4LAogCSAgQkY1MjUgYW5kIEJGNTI3LgpAQCAtNDAsNyArNDAsNyBAQAogCWRlZmF1bHQgeSBpZiAoQkY1NHggJiYgIUJGNTQ0KQogCWRlZmF1bHQgeSBpZiAoQkY1MnggJiYgIUJGNTIyICYmICFCRjUyMykKIAotY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgorY29tbWVudCAiRGFWaW5jaSAzNXggYW5kIDY0NHggVVNCIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIEFSQ0hfREFWSU5DSQogCiBjb21tZW50ICJPTUFQIDI0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggNWE4ZmQ1ZC4uMTBkMTFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTQ4LDYgKzQ4LDkgQEAKICNpbmNsdWRlICJjcHBpX2RtYS5oIgogCiAKKyNkZWZpbmUgVVNCX1BIWV9DVFJMCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikKKyNkZWZpbmUgRE0zNTVfREVFUFNMRUVQCUlPX0FERFJFU1MoRE0zNTVfREVFUFNMRUVQX1BBRERSKQorCiAvKiBSRVZJU0lUIChQTSkgd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2VlcCB0aGUgUEhZIGluIGxvdyBwb3dlciBtb2RlIG1vc3QKICAqIG9mIHRoZSB0aW1lICgyNCBNSFogb3NjaWxsYXRvciBhbmQgUExMIG9mZiwgZXRjKSBieSBzZXR0aW5nIFBPV0VSLkQwCiAgKiBhbmQsIHdoZW4gaW4gaG9zdCBtb2RlLCBhdXRvc3VzcGVuZGluZyBpZGxlIHJvb3QgcG9ydHMuLi4gUEhZUExMT04KQEAgLTU2LDIwICs1OSwyNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29uKHZvaWQpCiB7Ci0JLyogc3RhcnQgdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgUExMICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9TRVNOREVOIHwgVVNCUEhZX1ZCRFRDVEVOIHwgVVNCUEhZX1BIWVBMTE9OLAotCQkJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIElPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpOwotCXdoaWxlICgoX19yYXdfcmVhZGwoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSkKLQkJCSYgVVNCUEhZX1BIWUNMS0dEKSA9PSAwKQorCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkvKiBwb3dlciBldmVyeXRoaW5nIHVwOyBzdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwgKi8KKwlwaHlfY3RybCAmPSB+KFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX09UR1BEV04gfCBVU0JQSFlfUEhZUERXTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX1NFU05ERU4gfCBVU0JQSFlfVkJEVENURU4gfCBVU0JQSFlfUEhZUExMT047CisJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCisJLyogd2FpdCBmb3IgUExMIHRvIGxvY2sgYmVmb3JlIHByb2NlZWRpbmcgKi8KKwl3aGlsZSAoKF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCkgJiBVU0JQSFlfUEhZQ0xLR0QpID09IDApCiAJCWNwdV9yZWxheCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29mZih2b2lkKQogewotCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBvc2NpbGxhdG9yICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX1BIWVBEV04sICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQotCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSk7CisJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFksIGl0cyBQTEwsIGFuZCB0aGUgT1RHIGJsb2NrICovCisJcGh5X2N0cmwgJj0gfihVU0JQSFlfU0VTTkRFTiB8IFVTQlBIWV9WQkRUQ1RFTiB8IFVTQlBIWV9QSFlQTExPTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfT1RHUERXTiB8IFVTQlBIWV9QSFlQRFdOOworCV9fcmF3X3dyaXRlbChwaHlfY3RybCwgVVNCX1BIWV9DVFJMKTsKIH0KIAogc3RhdGljIGludCBkbWFfb2ZmID0gMTsKQEAgLTEyNiwxMCArMTM1LDYgQEAKIH0KIAogCi0vKiBSRVZJU0lUIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgRGFWaW5jaSBjYW4gc3VwcG9ydCBmdWxsIE9URy4gICovCi0KLXN0YXRpYyBpbnQgdmJ1c19zdGF0ZSA9IC0xOwotCiAjaWZkZWYgQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECiAjZGVmaW5lCXBvcnRzdGF0ZShzdG10KQkJc3RtdAogI2Vsc2UKQEAgLTEzNywxMCArMTQyLDE5IEBACiAjZW5kaWYKIAogCi0vKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAqLworLyoKKyAqIFZCVVMgU1dJVENISU5HIElTIEJPQVJELVNQRUNJRklDIC4uLiBhdCBsZWFzdCBmb3IgdGhlIERNNjQ0NiBFVk0sCisgKiB3aGljaCBkb2Vzbid0IHdpcmUgRFJWVkJVUyB0byB0aGUgRkVUIHRoYXQgc3dpdGNoZXMgaXQuICBVbmNsZWFyCisgKiBpZiB0aGF0J3MgYSBwcm9ibGVtIHdpdGggdGhlIERNNjQ0NiBjaGlwIG9yIGp1c3Qgd2l0aCB0aGF0IGJvYXJkLgorICoKKyAqIEluIGVpdGhlciBjYXNlLCB0aGUgRE0zNTUgRVZNIGF1dG9tYXRlcyBEUlZWQlVTIHRoZSBub3JtYWwgd2F5LAorICogd2hlbiBKMTAgaXMgb3V0LCBhbmQgVEkgZG9jdW1lbnRzIGl0IGFzIGhhbmRsaW5nIE9URy4KKyAqLwogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAorc3RhdGljIGludCB2YnVzX3N0YXRlID0gLTE7CisKIC8qIEkyQyBvcGVyYXRpb25zIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGFuZCByZXF1aXJlIGEgdGFzayBjb250ZXh0LgogICogV2l0aCB1bmxvYWRlZCBzeXN0ZW1zLCB1c2luZyB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBzZWVtcyB0byBzdWZmaWNlCiAgKiB0byBzYXRpc2Z5IHRoZSAxMDBtc2VjIEFfV0FJVF9WUklTRSB0aW1lb3V0Li4uCkBAIC0xNTAsMTIgKzE2NCwxMiBAQAogCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAl2YnVzX3N0YXRlID0gIXZidXNfc3RhdGU7CiB9Ci1zdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKIAogI2VuZGlmCS8qIEVWTSAqLwogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NvdXJjZV9wb3dlcihzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uLCBpbnQgaW1tZWRpYXRlKQogeworI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAJaWYgKGlzX29uKQogCQlpc19vbiA9IDE7CiAKQEAgLTE2MywxNiArMTc3LDE3IEBACiAJCXJldHVybjsKIAl2YnVzX3N0YXRlID0gIWlzX29uOwkJLyogMC8xIHZzICItMSA9PSB1bmtub3duL2luaXQiICovCiAKLSNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZXZtKCkpIHsKKwkJc3RhdGljIERFQ0xBUkVfV09SSyhldm1fdmJ1c193b3JrLCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyk7CisKIAkJaWYgKGltbWVkaWF0ZSkKIAkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmZXZtX3ZidXNfd29yayk7CiAJfQotI2VuZGlmCiAJaWYgKGltbWVkaWF0ZSkKIAkJdmJ1c19zdGF0ZSA9IGlzX29uOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc2V0X3ZidXMoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbikKQEAgLTM3NywxOCArMzkyLDggQEAKIAl1MzIJCXJldmlzaW9uOwogCiAJbXVzYi0+bXJlZ3MgKz0gREFWSU5DSV9CQVNFX09GRlNFVDsKLSNpZiAwCi0JLyogUkVWSVNJVCB0aGVyZSdzIHNvbWV0aGluZyBvZGQgYWJvdXQgY2xvY2tpbmcsIHRoaXMKLQkgKiBkaWRuJ3QgYXBwZWFyIGRvIHRoZSBqb2IgLi4uCi0JICovCi0JbXVzYi0+Y2xvY2sgPSBjbGtfZ2V0KHBEZXZpY2UsICJ1c2IiKTsKLQlpZiAoSVNfRVJSKG11c2ItPmNsb2NrKSkKLQkJcmV0dXJuIFBUUl9FUlIobXVzYi0+Y2xvY2spOwogCi0Jc3RhdHVzID0gY2xrX2VuYWJsZShtdXNiLT5jbG9jayk7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCXJldHVybiAtRU5PREVWOwotI2VuZGlmCisJY2xrX2VuYWJsZShtdXNiLT5jbG9jayk7CiAKIAkvKiByZXR1cm5zIHplcm8gaWYgZS5nLiBub3QgY2xvY2tlZCAqLwogCXJldmlzaW9uID0gbXVzYl9yZWFkbCh0aWJhc2UsIERBVklOQ0lfVVNCX1ZFUlNJT05fUkVHKTsKQEAgLTQwMSw2ICs0MDYsMTcgQEAKIAltdXNiLT5ib2FyZF9zZXRfdmJ1cyA9IGRhdmluY2lfc2V0X3ZidXM7CiAJZGF2aW5jaV9zb3VyY2VfcG93ZXIobXVzYiwgMCwgMSk7CiAKKwkvKiBkbTM1NSBFVk0gc3dhcHMgRCsvRC0gZm9yIHNpZ25hbCBpbnRlZ3JpdHksIGFuZAorCSAqIGlzIGNsb2NrZWQgZnJvbSB0aGUgbWFpbiAyNCBNSHogY3J5c3RhbC4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19kYXZpbmNpX2RtMzU1X2V2bSgpKSB7CisJCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkJcGh5X2N0cmwgJj0gfigzIDw8IDkpOworCQlwaHlfY3RybCB8PSBVU0JQSFlfREFUQVBPTDsKKwkJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCX0KKwogCS8qIHJlc2V0IHRoZSBjb250cm9sbGVyICovCiAJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRywgMHgxKTsKIApAQCAtNDExLDggKzQyNyw3IEBACiAKIAkvKiBOT1RFOiAgaXJxcyBhcmUgaW4gbWl4ZWQgbW9kZSwgbm90IGJ5cGFzcyB0byBwdXJlLW11c2IgKi8KIAlwcl9kZWJ1ZygiRGFWaW5jaSBPVEcgcmV2aXNpb24gJTA4eCBwaHkgJTAzeCBjb250cm9sICUwMnhcbiIsCi0JCXJldmlzaW9uLCBfX3Jhd19yZWFkbCgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKSwKKwkJcmV2aXNpb24sIF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCksCiAJCW11c2JfcmVhZGIodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRykpOwogCiAJbXVzYi0+aXNyID0gZGF2aW5jaV9pbnRlcnJ1cHQ7CkBAIC00NTMsNSArNDY4LDggQEAKIAl9CiAKIAlwaHlfb2ZmKCk7CisKKwljbGtfZGlzYWJsZShtdXNiLT5jbG9jayk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKaW5kZXggN2ZiNjIzOC4uMDQ2Yzg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKQEAgLTE1LDE0ICsxNSwyMSBAQAogICovCiAKIC8qIEludGVncmF0ZWQgaGlnaHNwZWVkL290ZyBQSFkgKi8KLSNkZWZpbmUJVVNCUEhZX0NUTF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDM0KQotI2RlZmluZQlVU0JQSFlfUEhZQ0xLR0QJCSgxIDw8IDgpCi0jZGVmaW5lCVVTQlBIWV9TRVNOREVOCQkoMSA8PCA3KQkvKiB2KHNlc3NfZW5kKSBjb21wYXJhdG9yICovCi0jZGVmaW5lCVVTQlBIWV9WQkRUQ1RFTgkJKDEgPDwgNikJLyogdihidXMpIGNvbXBhcmF0b3IgKi8KLSNkZWZpbmUJVVNCUEhZX1BIWVBMTE9OCQkoMSA8PCA0KQkvKiBvdmVycmlkZSBwbGwgc3VzcGVuZCAqLwotI2RlZmluZQlVU0JQSFlfQ0xLTzFTRUwJCSgxIDw8IDMpCi0jZGVmaW5lCVVTQlBIWV9PU0NQRFdOCQkoMSA8PCAyKQotI2RlZmluZQlVU0JQSFlfUEhZUERXTgkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCUEhZX0NUTF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDM0KQorI2RlZmluZSBVU0JQSFlfREFUQVBPTAkJQklUKDExKQkvKiAoZG0zNTUpIHN3aXRjaCBEKy9ELSAqLworI2RlZmluZSBVU0JQSFlfUEhZQ0xLR0QJCUJJVCg4KQorI2RlZmluZSBVU0JQSFlfU0VTTkRFTgkJQklUKDcpCS8qIHYoc2Vzc19lbmQpIGNvbXBhcmF0b3IgKi8KKyNkZWZpbmUgVVNCUEhZX1ZCRFRDVEVOCQlCSVQoNikJLyogdihidXMpIGNvbXBhcmF0b3IgKi8KKyNkZWZpbmUgVVNCUEhZX1ZCVVNTRU5TCQlCSVQoNSkJLyogKGRtMzU1LHJvKSBpcyB2YnVzID4gMC41ViAqLworI2RlZmluZSBVU0JQSFlfUEhZUExMT04JCUJJVCg0KQkvKiBvdmVycmlkZSBwbGwgc3VzcGVuZCAqLworI2RlZmluZSBVU0JQSFlfQ0xLTzFTRUwJCUJJVCgzKQorI2RlZmluZSBVU0JQSFlfT1NDUERXTgkJQklUKDIpCisjZGVmaW5lIFVTQlBIWV9PVEdQRFdOCQlCSVQoMSkKKyNkZWZpbmUgVVNCUEhZX1BIWVBEV04JCUJJVCgwKQorCisjZGVmaW5lIERNMzU1X0RFRVBTTEVFUF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDQ4KQorI2RlZmluZSBEUlZWQlVTX0ZPUkNFCQlCSVQoMikKKyNkZWZpbmUgRFJWVkJVU19PVkVSUklERQlCSVQoMSkKIAogLyogRm9yIG5vdyBpbmNsdWRlIHVzYiBPVEcgbW9kdWxlIHJlZ2lzdGVycyBoZXJlICovCiAjZGVmaW5lIERBVklOQ0lfVVNCX1ZFUlNJT05fUkVHCQkweDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCAyY2MzNGZhLi4zMzhjZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAKIHVuc2lnbmVkIG11c2JfZGVidWc7Ci1tb2R1bGVfcGFyYW0obXVzYl9kZWJ1ZywgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBtdXNiX2RlYnVnLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbWVzc2FnZSBsZXZlbC4gRGVmYXVsdCA9IDAiKTsKIAogI2RlZmluZSBEUklWRVJfQVVUSE9SICJNZW50b3IgR3JhcGhpY3MsIFRleGFzIEluc3RydW1lbnRzLCBOb2tpYSIKQEAgLTc2Nyw4ICs3NjcsOSBAQAogI2lmZGVmIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRAogCQljYXNlIE9UR19TVEFURV9BX0hPU1Q6CiAJCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKG11c2JfdG9faGNkKG11c2IpKTsKIAkJCW11c2Jfcm9vdF9kaXNjb25uZWN0KG11c2IpOwotCQkJaWYgKG11c2ItPmFfd2FpdF9iY29uICE9IDApCisJCQlpZiAobXVzYi0+YV93YWl0X2Jjb24gIT0gMCAmJiBpc19vdGdfZW5hYmxlZChtdXNiKSkKIAkJCQltdXNiX3BsYXRmb3JtX3RyeV9pZGxlKG11c2IsIGppZmZpZXMKIAkJCQkJKyBtc2Vjc190b19qaWZmaWVzKG11c2ItPmFfd2FpdF9iY29uKSk7CiAJCQlicmVhazsKQEAgLTE4MTUsNyArMTgxNiw3IEBACiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAJZGV2aWNlX3JlbW92ZV9maWxlKG11c2ItPmNvbnRyb2xsZXIsICZkZXZfYXR0cl9tb2RlKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX3ZidXMpOwotI2lmZGVmIENPTkZJR19VU0JfTVVTQl9PVEcKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX3NycCk7CiAjZW5kaWYKICNlbmRpZgpAQCAtMjA2Myw3ICsyMDY0LDcgQEAKICNpZmRlZiBDT05GSUdfU1lTRlMKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX21vZGUpOwogCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfdmJ1cyk7Ci0jaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwogCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfc3JwKTsKICNlbmRpZgogI2VuZGlmCkBAIC0yMjQzLDEwICsyMjQ0LDEwIEBACiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXVzYl9kcml2ZXIsIG11c2JfcHJvYmUpOwogfQogCi0vKiBtYWtlIHVzIGluaXQgYWZ0ZXIgdXNiY29yZSBhbmQgYmVmb3JlIHVzYgotICogZ2FkZ2V0IGFuZCBob3N0LXNpZGUgZHJpdmVycyBzdGFydCB0byByZWdpc3RlcgorLyogbWFrZSB1cyBpbml0IGFmdGVyIHVzYmNvcmUgYW5kIGkyYyAodHJhbnNjZWl2ZXJzLCByZWd1bGF0b3JzLCBldGMpCisgKiBhbmQgYmVmb3JlIHVzYiBnYWRnZXQgYW5kIGhvc3Qtc2lkZSBkcml2ZXJzIHN0YXJ0IHRvIHJlZ2lzdGVyCiAgKi8KLXN1YnN5c19pbml0Y2FsbChtdXNiX2luaXQpOworZnNfaW5pdGNhbGwobXVzYl9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG11c2JfY2xlYW51cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggNjMwOTQ2YS4uZWZiMzliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC0zMzEsNyArMzMxLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWNvbnRyb2w7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWluX2J1bGs7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCW91dF9idWxrOwkvKiBvZiBtdXNiX3FoICovCi0Jc3RydWN0IG11c2JfcWgJCSpwZXJpb2RpY1szMl07CS8qIHRyZWUgb2YgaW50ZXJydXB0K2lzbyAqLwogI2VuZGlmCiAKIAkvKiBjYWxsZWQgd2l0aCBJUlFzIGJsb2NrZWQ7IE9OL25vbnplcm8gaW1wbGllcyBzdGFydGluZyBhIHNlc3Npb24sCkBAIC00NzksMTAgKzQ3OCwxMSBAQAogc3RhdGljIGlubGluZSBpbnQgbXVzYl9yZWFkX2ZpZm9zaXplKHN0cnVjdCBtdXNiICptdXNiLAogCQlzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHU4IGVwbnVtKQogeworCXZvaWQgKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJdTggcmVnID0gMDsKIAogCS8qIHJlYWQgZnJvbSBjb3JlIHVzaW5nIGluZGV4ZWQgbW9kZWwgKi8KLQlyZWcgPSBtdXNiX3JlYWRiKGh3X2VwLT5yZWdzLCAweDEwICsgTVVTQl9GSUZPU0laRSk7CisJcmVnID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9FUF9PRkZTRVQoZXBudW0sIE1VU0JfRklGT1NJWkUpKTsKIAkvKiAwJ3MgcmV0dXJuZWQgd2hlbiBubyBtb3JlIGVuZHBvaW50cyAqLwogCWlmICghcmVnKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTUwOSw2ICs1MDksNyBAQAogewogCW11c2ItPmVuZHBvaW50c1swXS5tYXhfcGFja2V0X3N6X3R4ID0gTVVTQl9FUDBfRklGT1NJWkU7CiAJbXVzYi0+ZW5kcG9pbnRzWzBdLm1heF9wYWNrZXRfc3pfcnggPSBNVVNCX0VQMF9GSUZPU0laRTsKKwltdXNiLT5lbmRwb2ludHNbMF0uaXNfc2hhcmVkX2ZpZm8gPSB0cnVlOwogfQogI2VuZGlmIC8qIENPTkZJR19CTEFDS0ZJTiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggNGVhMzA1My4uYzdlYmQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXF1ZXN0ID0gJnJlcS0+cmVxdWVzdDsKIAlzdHJ1Y3QgbXVzYl9lcAkJKm11c2JfZXAgPSAmbXVzYi0+ZW5kcG9pbnRzW2VwbnVtXS5lcF9vdXQ7CiAJdm9pZCBfX2lvbWVtCQkqZXBpbyA9IG11c2ItPmVuZHBvaW50c1tlcG51bV0ucmVnczsKLQl1MTYJCQlmaWZvX2NvdW50ID0gMDsKKwl1bnNpZ25lZAkJZmlmb19jb3VudCA9IDA7CiAJdTE2CQkJbGVuID0gbXVzYl9lcC0+cGFja2V0X3N6OwogCiAJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKTsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogCQkJCQlsZW4sIGZpZm9fY291bnQsCiAJCQkJCW11c2JfZXAtPnBhY2tldF9zeik7CiAKLQkJCWZpZm9fY291bnQgPSBtaW4obGVuLCBmaWZvX2NvdW50KTsKKwkJCWZpZm9fY291bnQgPSBtaW5fdCh1bnNpZ25lZCwgbGVuLCBmaWZvX2NvdW50KTsKIAogI2lmZGVmCUNPTkZJR19VU0JfVFVTQl9PTUFQX0RNQQogCQkJaWYgKHR1c2JfZG1hX29tYXAoKSAmJiBtdXNiX2VwLT5kbWEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IGEwMzVjZWMuLjQ5OWM0MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpAQCAtNjQsMTEgKzY0LDggQEAKICAqCiAgKiAtIERNQSAoTWVudG9yL09NQVApIC4uLmhhcyBhdCBsZWFzdCB0b2dnbGUgdXBkYXRlIHByb2JsZW1zCiAgKgotICogLSBTdGlsbCBubyB0cmFmZmljIHNjaGVkdWxpbmcgY29kZSB0byBtYWtlIE5BS2luZyBmb3IgYnVsayBvciBjb250cm9sCi0gKiAgIHRyYW5zZmVycyB1bmFibGUgdG8gc3RhcnZlIG90aGVyIHJlcXVlc3RzOyBvciB0byBtYWtlIGVmZmljaWVudCB1c2UKLSAqICAgb2YgaGFyZHdhcmUgd2l0aCBwZXJpb2RpYyB0cmFuc2ZlcnMuICAoTm90ZSB0aGF0IG5ldHdvcmsgZHJpdmVycwotICogICBjb21tb25seSBwb3N0IGJ1bGsgcmVhZHMgdGhhdCBzdGF5IHBlbmRpbmcgZm9yIGEgbG9uZyB0aW1lOyB0aGVzZQotICogICB3b3VsZCBtYWtlIHZlcnkgdmlzaWJsZSB0cm91YmxlLikKKyAqIC0gWzIzLWZlYi0yMDA5XSBtaW5pbWFsIHRyYWZmaWMgc2NoZWR1bGluZyB0byBhdm9pZCBidWxrIFJYIHBhY2tldAorICogICBzdGFydmF0aW9uIC4uLiBub3RoaW5nIHlldCBmb3IgVFgsIGludGVycnVwdCwgb3IgYnVsay4KICAqCiAgKiAtIE5vdCB0ZXN0ZWQgd2l0aCBITlAsIGJ1dCBzb21lIFNSUCBwYXRocyBzZWVtIHRvIGJlaGF2ZS4KICAqCkBAIC04OCwxMSArODUsOCBAQAogICoKICAqIENPTlRST0wgdHJhbnNmZXJzIGFsbCBnbyB0aHJvdWdoIGVwMC4gIEJVTEsgb25lcyBnbyB0aHJvdWdoIGRlZGljYXRlZCBJTgogICogYW5kIE9VVCBlbmRwb2ludHMgLi4uIGhhcmR3YXJlIGlzIGRlZGljYXRlZCBmb3IgdGhvc2UgImFzeW5jIiBxdWV1ZShzKS4KLSAqCiAgKiAoWWVzLCBidWxrIF9jb3VsZF8gdXNlIG1vcmUgb2YgdGhlIGVuZHBvaW50cyB0aGFuIHRoYXQsIGFuZCB3b3VsZCBldmVuCi0gKiBiZW5lZml0IGZyb20gaXQgLi4uIG9uZSByZW1vdGUgZGV2aWNlIG1heSBlYXNpbHkgYmUgTkFLaW5nIHdoaWxlIG90aGVycwotICogbmVlZCB0byBwZXJmb3JtIHRyYW5zZmVycyBpbiB0aGF0IHNhbWUgZGlyZWN0aW9uLiAgVGhlIHNhbWUgdGhpbmcgY291bGQKLSAqIGJlIGRvbmUgaW4gc29mdHdhcmUgdGhvdWdoLCBhc3N1bWluZyBkbWEgY29vcGVyYXRlcy4pCisgKiBiZW5lZml0IGZyb20gaXQuKQogICoKICAqIElOVEVSVVBQVCBhbmQgSVNPQ0hST05PVVMgdHJhbnNmZXJzIGFyZSBzY2hlZHVsZWQgdG8gdGhlIG90aGVyIGVuZHBvaW50cy4KICAqIFNvIGZhciB0aGF0IHNjaGVkdWxpbmcgaXMgYm90aCBkdW1iIGFuZCBvcHRpbWlzdGljOiAgdGhlIGVuZHBvaW50IHdpbGwgYmUKQEAgLTIwMSw4ICsxOTUsOSBAQAogCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoJCS8qIGJ1bGssIGludGVycnVwdCAqLwotCQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkvKiBhY3R1YWxfbGVuZ3RoIG1heSBiZSBub256ZXJvIG9uIHJldHJ5IHBhdGhzICovCisJCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJfQogCiAJREJHKDQsICJxaCAlcCB1cmIgJXAgZGV2JWQgZXAlZCVzJXMsIGh3X2VwICVkLCAlcC8lZFxuIiwKQEAgLTMzNSwxNiArMzMwLDExIEBACiBzdGF0aWMgc3RydWN0IG11c2JfcWggKgogbXVzYl9naXZlYmFjayhzdHJ1Y3QgbXVzYl9xaCAqcWgsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKIHsKLQlpbnQJCQlpc19pbjsKIAlzdHJ1Y3QgbXVzYl9od19lcAkqZXAgPSBxaC0+aHdfZXA7CiAJc3RydWN0IG11c2IJCSptdXNiID0gZXAtPm11c2I7CisJaW50CQkJaXNfaW4gPSB1c2JfcGlwZWluKHVyYi0+cGlwZSk7CiAJaW50CQkJcmVhZHkgPSBxaC0+aXNfcmVhZHk7CiAKLQlpZiAoZXAtPmlzX3NoYXJlZF9maWZvKQotCQlpc19pbiA9IDE7Ci0JZWxzZQotCQlpc19pbiA9IHVzYl9waXBlaW4odXJiLT5waXBlKTsKLQogCS8qIHNhdmUgdG9nZ2xlIGVhZ2VybHksIGZvciBwYXJhbm9pYSAqLwogCXN3aXRjaCAocWgtPnR5cGUpIHsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CkBAIC00MDAsNyArMzkwLDYgQEAKIAkJCSAqIGRlLWFsbG9jYXRlZCBpZiBpdCdzIHRyYWNrZWQgYW5kIGFsbG9jYXRlZDsKIAkJCSAqIGFuZCB3aGVyZSB3ZSdkIHVwZGF0ZSB0aGUgc2NoZWR1bGUgdHJlZS4uLgogCQkJICovCi0JCQltdXNiLT5wZXJpb2RpY1tlcC0+ZXBudW1dID0gTlVMTDsKIAkJCWtmcmVlKHFoKTsKIAkJCXFoID0gTlVMTDsKIAkJCWJyZWFrOwpAQCAtNDMyLDcgKzQyMSw3IEBACiAJZWxzZQogCQlxaCA9IG11c2JfZ2l2ZWJhY2socWgsIHVyYiwgdXJiLT5zdGF0dXMpOwogCi0JaWYgKHFoICYmIHFoLT5pc19yZWFkeSAmJiAhbGlzdF9lbXB0eSgmcWgtPmhlcC0+dXJiX2xpc3QpKSB7CisJaWYgKHFoICE9IE5VTEwgJiYgcWgtPmlzX3JlYWR5KSB7CiAJCURCRyg0LCAiLi4uIG5leHQgZXAlZCAlY1ggdXJiICVwXG4iLAogCQkJCWh3X2VwLT5lcG51bSwgaXNfaW4gPyAnUicgOiAnVCcsCiAJCQkJbmV4dF91cmIocWgpKTsKQEAgLTk0Miw4ICs5MzEsOCBAQAogCXN3aXRjaCAobXVzYi0+ZXAwX3N0YWdlKSB7CiAJY2FzZSBNVVNCX0VQMF9JTjoKIAkJZmlmb19kZXN0ID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7Ci0JCWZpZm9fY291bnQgPSBtaW4obGVuLCAoKHUxNikgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAotCQkJCQktIHVyYi0+YWN0dWFsX2xlbmd0aCkpKTsKKwkJZmlmb19jb3VudCA9IG1pbl90KHNpemVfdCwgbGVuLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQorCQkJCSAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCWlmIChmaWZvX2NvdW50IDwgbGVuKQogCQkJdXJiLT5zdGF0dXMgPSAtRU9WRVJGTE9XOwogCkBAIC05NzYsMTAgKzk2NSw5IEBACiAJCX0KIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIE1VU0JfRVAwX09VVDoKLQkJZmlmb19jb3VudCA9IG1pbihxaC0+bWF4cGFja2V0LCAoKHUxNikKLQkJCQkodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCi0JCQkJLSB1cmItPmFjdHVhbF9sZW5ndGgpKSk7Ci0KKwkJZmlmb19jb3VudCA9IG1pbl90KHNpemVfdCwgcWgtPm1heHBhY2tldCwKKwkJCQkgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQorCQkJCSAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCWlmIChmaWZvX2NvdW50KSB7CiAJCQlmaWZvX2Rlc3QgPSAodTggKikgKHVyYi0+dHJhbnNmZXJfYnVmZmVyCiAJCQkJCSsgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKQEAgLTEwNTEsNyArMTAzOSw4IEBACiAKIAkJLyogTk9URTogIHRoaXMgY29kZSBwYXRoIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBQQVVTRSBhCiAJCSAqIGNvbnRyb2wgdHJhbnNmZXIsIGlmIGFub3RoZXIgb25lIGlzIHF1ZXVlZCwgc28gdGhhdAotCQkgKiBlcDAgaXMgbW9yZSBsaWtlbHkgdG8gc3RheSBidXN5LgorCQkgKiBlcDAgaXMgbW9yZSBsaWtlbHkgdG8gc3RheSBidXN5LiAgVGhhdCdzIGFscmVhZHkgZG9uZQorCQkgKiBmb3IgYnVsayBSWCB0cmFuc2ZlcnMuCiAJCSAqCiAJCSAqIGlmIChxaC0+cmluZy5uZXh0ICE9ICZtdXNiLT5jb250cm9sKSwgdGhlbgogCQkgKiB3ZSBoYXZlIGEgY2FuZGlkYXRlLi4uIE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvcgpAQCAtMTE2MSw3ICsxMTUwLDggQEAKIAlzdHJ1Y3QgdXJiCQkqdXJiOwogCXN0cnVjdCBtdXNiX2h3X2VwCSpod19lcCA9IG11c2ItPmVuZHBvaW50cyArIGVwbnVtOwogCXZvaWQgX19pb21lbQkJKmVwaW8gPSBod19lcC0+cmVnczsKLQlzdHJ1Y3QgbXVzYl9xaAkJKnFoID0gaHdfZXAtPm91dF9xaDsKKwlzdHJ1Y3QgbXVzYl9xaAkJKnFoID0gaHdfZXAtPmlzX3NoYXJlZF9maWZvID8gaHdfZXAtPmluX3FoCisJCQkJCQkJICAgIDogaHdfZXAtPm91dF9xaDsKIAl1MzIJCQlzdGF0dXMgPSAwOwogCXZvaWQgX19pb21lbQkJKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJc3RydWN0IGRtYV9jaGFubmVsCSpkbWE7CkBAIC0xMjAyLDYgKzExOTIsNyBAQAogCQkvKiBOT1RFOiAgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKIAkJICogdHJhbnNmZXIsIGlmIHRoZXJlJ3Mgc29tZSBvdGhlciAobm9ucGVyaW9kaWMpIHR4IHVyYgogCQkgKiB0aGF0IGNvdWxkIHVzZSB0aGlzIGZpZm8uICAoZG1hIGNvbXBsaWNhdGVzIGl0Li4uKQorCQkgKiBUaGF0J3MgYWxyZWFkeSBkb25lIGZvciBidWxrIFJYIHRyYW5zZmVycy4KIAkJICoKIAkJICogaWYgKGJ1bGsgJiYgcWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+b3V0X2J1bGspLCB0aGVuCiAJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCkBAIC0xMzA4LDcgKzEyOTksOCBAQAogCQkgKiBwYWNrZXRzIGJlZm9yZSB1cGRhdGluZyBUWENTUiAuLi4gb3RoZXIgZG9jcyBkaXNhZ3JlZSAuLi4KIAkJICovCiAJCS8qIFBJTzogIHN0YXJ0IG5leHQgcGFja2V0IGluIHRoaXMgVVJCICovCi0JCXdMZW5ndGggPSBtaW4ocWgtPm1heHBhY2tldCwgKHUxNikgd0xlbmd0aCk7CisJCWlmICh3TGVuZ3RoID4gcWgtPm1heHBhY2tldCkKKwkJCXdMZW5ndGggPSBxaC0+bWF4cGFja2V0OwogCQltdXNiX3dyaXRlX2ZpZm8oaHdfZXAsIHdMZW5ndGgsIGJ1Zik7CiAJCXFoLT5zZWdzaXplID0gd0xlbmd0aDsKIApAQCAtMTM2Miw2ICsxMzU0LDUwIEBACiAKICNlbmRpZgogCisvKiBTY2hlZHVsZSBuZXh0IFFIIGZyb20gbXVzYi0+aW5fYnVsayBhbmQgbW92ZSB0aGUgY3VycmVudCBxaCB0bworICogdGhlIGVuZDsgYXZvaWRzIHN0YXJ2YXRpb24gZm9yIG90aGVyIGVuZHBvaW50cy4KKyAqLworc3RhdGljIHZvaWQgbXVzYl9idWxrX3J4X25ha190aW1lb3V0KHN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9od19lcCAqZXApCit7CisJc3RydWN0IGRtYV9jaGFubmVsCSpkbWE7CisJc3RydWN0IHVyYgkJKnVyYjsKKwl2b2lkIF9faW9tZW0JCSptYmFzZSA9IG11c2ItPm1yZWdzOworCXZvaWQgX19pb21lbQkJKmVwaW8gPSBlcC0+cmVnczsKKwlzdHJ1Y3QgbXVzYl9xaAkJKmN1cl9xaCwgKm5leHRfcWg7CisJdTE2CQkJcnhfY3NyOworCisJbXVzYl9lcF9zZWxlY3QobWJhc2UsIGVwLT5lcG51bSk7CisJZG1hID0gaXNfZG1hX2NhcGFibGUoKSA/IGVwLT5yeF9jaGFubmVsIDogTlVMTDsKKworCS8qIGNsZWFyIG5hayB0aW1lb3V0IGJpdCAqLworCXJ4X2NzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENTUik7CisJcnhfY3NyIHw9IE1VU0JfUlhDU1JfSF9XWkNfQklUUzsKKwlyeF9jc3IgJj0gfk1VU0JfUlhDU1JfREFUQUVSUk9SOworCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsIHJ4X2Nzcik7CisKKwljdXJfcWggPSBmaXJzdF9xaCgmbXVzYi0+aW5fYnVsayk7CisJaWYgKGN1cl9xaCkgeworCQl1cmIgPSBuZXh0X3VyYihjdXJfcWgpOworCQlpZiAoZG1hX2NoYW5uZWxfc3RhdHVzKGRtYSkgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKKwkJCWRtYS0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0NPUkVfQUJPUlQ7CisJCQltdXNiLT5kbWFfY29udHJvbGxlci0+Y2hhbm5lbF9hYm9ydChkbWEpOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGRtYS0+YWN0dWFsX2xlbjsKKwkJCWRtYS0+YWN0dWFsX2xlbiA9IDBMOworCQl9CisJCW11c2Jfc2F2ZV90b2dnbGUoZXAsIDEsIHVyYik7CisKKwkJLyogbW92ZSBjdXJfcWggdG8gZW5kIG9mIHF1ZXVlICovCisJCWxpc3RfbW92ZV90YWlsKCZjdXJfcWgtPnJpbmcsICZtdXNiLT5pbl9idWxrKTsKKworCQkvKiBnZXQgdGhlIG5leHQgcWggZnJvbSBtdXNiLT5pbl9idWxrICovCisJCW5leHRfcWggPSBmaXJzdF9xaCgmbXVzYi0+aW5fYnVsayk7CisKKwkJLyogc2V0IHJ4X3JlaW5pdCBhbmQgc2NoZWR1bGUgdGhlIG5leHQgcWggKi8KKwkJZXAtPnJ4X3JlaW5pdCA9IDE7CisJCW11c2Jfc3RhcnRfdXJiKG11c2IsIDEsIG5leHRfcWgpOworCX0KK30KKwogLyoKICAqIFNlcnZpY2UgYW4gUlggaW50ZXJydXB0IGZvciB0aGUgZ2l2ZW4gSU4gZW5kcG9pbnQ7IGRvY3MgY292ZXIgYnVsaywgaXNvLAogICogYW5kIGhpZ2gtYmFuZHdpZHRoIElOIHRyYW5zZmVyIGNhc2VzLgpAQCAtMTQyNSwxOCArMTQ2MSwyNiBAQAogCX0gZWxzZSBpZiAocnhfY3NyICYgTVVTQl9SWENTUl9EQVRBRVJST1IpIHsKIAogCQlpZiAoVVNCX0VORFBPSU5UX1hGRVJfSVNPQyAhPSBxaC0+dHlwZSkgewotCQkJLyogTk9URSB0aGlzIGNvZGUgcGF0aCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gUEFVU0UgYQotCQkJICogdHJhbnNmZXIsIGlmIHRoZXJlJ3Mgc29tZSBvdGhlciAobm9ucGVyaW9kaWMpIHJ4IHVyYgotCQkJICogdGhhdCBjb3VsZCB1c2UgdGhpcyBmaWZvLiAgKGRtYSBjb21wbGljYXRlcyBpdC4uLikKLQkJCSAqCi0JCQkgKiBpZiAoYnVsayAmJiBxaC0+cmluZy5uZXh0ICE9ICZtdXNiLT5pbl9idWxrKSwgdGhlbgotCQkJICogd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IKLQkJCSAqLwogCQkJREJHKDYsICJSWCBlbmQgJWQgTkFLIHRpbWVvdXRcbiIsIGVwbnVtKTsKKworCQkJLyogTk9URTogTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yLCBzbyB3ZSB3YW50IHRvCisJCQkgKiBjb250aW51ZS4gIEV4Y2VwdCAuLi4gaWYgdGhlcmUncyBhIHJlcXVlc3QgZm9yCisJCQkgKiBhbm90aGVyIFFILCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHN0YXJ2aW5nIGl0LgorCQkJICoKKwkJCSAqIERldmljZXMgbGlrZSBFdGhlcm5ldCBhbmQgc2VyaWFsIGFkYXB0ZXJzIGtlZXAKKwkJCSAqIHJlYWRzIHBvc3RlZCBhdCBhbGwgdGltZXMsIHdoaWNoIHdpbGwgc3RhcnZlCisJCQkgKiBvdGhlciBkZXZpY2VzIHdpdGhvdXQgdGhpcyBsb2dpYy4KKwkJCSAqLworCQkJaWYgKHVzYl9waXBlYnVsayh1cmItPnBpcGUpCisJCQkJCSYmIHFoLT5tdXggPT0gMQorCQkJCQkmJiAhbGlzdF9pc19zaW5ndWxhcigmbXVzYi0+aW5fYnVsaykpIHsKKwkJCQltdXNiX2J1bGtfcnhfbmFrX3RpbWVvdXQobXVzYiwgaHdfZXApOworCQkJCXJldHVybjsKKwkJCX0KIAkJCW11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcG51bSk7Ci0JCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLAotCQkJCQlNVVNCX1JYQ1NSX0hfV1pDX0JJVFMKLQkJCQkJfCBNVVNCX1JYQ1NSX0hfUkVRUEtUKTsKKwkJCXJ4X2NzciB8PSBNVVNCX1JYQ1NSX0hfV1pDX0JJVFM7CisJCQlyeF9jc3IgJj0gfk1VU0JfUlhDU1JfREFUQUVSUk9SOworCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgcnhfY3NyKTsKIAogCQkJZ290byBmaW5pc2g7CiAJCX0gZWxzZSB7CkBAIC0xNzE1LDMxICsxNzU5LDI3IEBACiAKIAkvKiBlbHNlLCBwZXJpb2RpYyB0cmFuc2ZlcnMgZ2V0IG11eGVkIHRvIG90aGVyIGVuZHBvaW50cyAqLwogCi0JLyogRklYTUUgdGhpcyBkb2Vzbid0IGNvbnNpZGVyIGRpcmVjdGlvbiwgc28gaXQgY2FuIG9ubHkKLQkgKiB3b3JrIGZvciBvbmUgaGFsZiBvZiB0aGUgZW5kcG9pbnQgaGFyZHdhcmUsIGFuZCBhc3N1bWVzCi0JICogdGhlIHByZXZpb3VzIGNhc2VzIGhhbmRsZWQgYWxsIG5vbi1zaGFyZWQgZW5kcG9pbnRzLi4uCi0JICovCi0KLQkvKiB3ZSBrbm93IHRoaXMgcWggaGFzbid0IGJlZW4gc2NoZWR1bGVkLCBzbyBhbGwgd2UgbmVlZCB0byBkbworCS8qCisJICogV2Uga25vdyB0aGlzIHFoIGhhc24ndCBiZWVuIHNjaGVkdWxlZCwgc28gYWxsIHdlIG5lZWQgdG8gZG8KIAkgKiBpcyBjaG9vc2Ugd2hpY2ggaGFyZHdhcmUgZW5kcG9pbnQgdG8gcHV0IGl0IG9uIC4uLgogCSAqCiAJICogUkVWSVNJVCB3aGF0IHdlIHJlYWxseSB3YW50IGhlcmUgaXMgYSByZWd1bGFyIHNjaGVkdWxlIHRyZWUKLQkgKiBsaWtlIGUuZy4gT0hDSSB1c2VzLCBidXQgZm9yIG5vdyBtdXNiLT5wZXJpb2RpYyBpcyBqdXN0IGFuCi0JICogYXJyYXkgb2YgdGhlIF9zaW5nbGVfIGxvZ2ljYWwgZW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIGEKLQkgKiBnaXZlbiBwaHlzaWNhbCBvbmUgKGlkZW50aXR5IG1hcHBpbmcgbG9naWNhbC0+cGh5c2ljYWwpLgotCSAqCi0JICogdGhhdCBzaW1wbGlzdGljIGFwcHJvYWNoIG1ha2VzIFRUIHNjaGVkdWxpbmcgYSBsb3Qgc2ltcGxlcjsKLQkgKiB0aGVyZSBpcyBub25lLCBhbmQgdGh1cyBub25lIG9mIGl0cyBjb21wbGV4aXR5Li4uCisJICogbGlrZSBlLmcuIE9IQ0kgdXNlcy4KIAkgKi8KIAliZXN0X2RpZmYgPSA0MDk2OwogCWJlc3RfZW5kID0gLTE7CiAKLQlmb3IgKGVwbnVtID0gMTsgZXBudW0gPCBtdXNiLT5ucl9lbmRwb2ludHM7IGVwbnVtKyspIHsKKwlmb3IgKGVwbnVtID0gMSwgaHdfZXAgPSBtdXNiLT5lbmRwb2ludHMgKyAxOworCQkJZXBudW0gPCBtdXNiLT5ucl9lbmRwb2ludHM7CisJCQllcG51bSsrLCBod19lcCsrKSB7CiAJCWludAlkaWZmOwogCi0JCWlmIChtdXNiLT5wZXJpb2RpY1tlcG51bV0pCisJCWlmIChpc19pbiB8fCBod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKKwkJCWlmIChod19lcC0+aW5fcWggICE9IE5VTEwpCisJCQkJY29udGludWU7CisJCX0gZWxzZQlpZiAoaHdfZXAtPm91dF9xaCAhPSBOVUxMKQogCQkJY29udGludWU7Ci0JCWh3X2VwID0gJm11c2ItPmVuZHBvaW50c1tlcG51bV07CisKIAkJaWYgKGh3X2VwID09IG11c2ItPmJ1bGtfZXApCiAJCQljb250aW51ZTsKIApAQCAtMTc2MCw2ICsxODAwLDE3IEBACiAJCQloZWFkID0gJm11c2ItPmluX2J1bGs7CiAJCWVsc2UKIAkJCWhlYWQgPSAmbXVzYi0+b3V0X2J1bGs7CisKKwkJLyogRW5hYmxlIGJ1bGsgUlggTkFLIHRpbWVvdXQgc2NoZW1lIHdoZW4gYnVsayByZXF1ZXN0cyBhcmUKKwkJICogbXVsdGlwbGV4ZWQuICBUaGlzIHNjaGVtZSBkb2VuJ3Qgd29yayBpbiBoaWdoIHNwZWVkIHRvIGZ1bGwKKwkJICogc3BlZWQgc2NlbmFyaW8gYXMgTkFLIGludGVycnVwdHMgYXJlIG5vdCBjb21pbmcgZnJvbSBhCisJCSAqIGZ1bGwgc3BlZWQgZGV2aWNlIGNvbm5lY3RlZCB0byBhIGhpZ2ggc3BlZWQgZGV2aWNlLgorCQkgKiBOQUsgdGltZW91dCBpbnRlcnZhbCBpcyA4ICgxMjggdWZyYW1lIG9yIDE2bXMpIGZvciBIUyBhbmQKKwkJICogNCAoOCBmcmFtZSBvciA4bXMpIGZvciBGUyBkZXZpY2UuCisJCSAqLworCQlpZiAoaXNfaW4gJiYgcWgtPmRldikKKwkJCXFoLT5pbnR2X3JlZyA9CisJCQkJKFVTQl9TUEVFRF9ISUdIID09IHFoLT5kZXYtPnNwZWVkKSA/IDggOiA0OwogCQlnb3RvIHN1Y2Nlc3M7CiAJfSBlbHNlIGlmIChiZXN0X2VuZCA8IDApIHsKIAkJcmV0dXJuIC1FTk9TUEM7CkBAIC0xNzY4LDcgKzE4MTksNiBAQAogCWlkbGUgPSAxOwogCXFoLT5tdXggPSAwOwogCWh3X2VwID0gbXVzYi0+ZW5kcG9pbnRzICsgYmVzdF9lbmQ7Ci0JbXVzYi0+cGVyaW9kaWNbYmVzdF9lbmRdID0gcWg7CiAJREJHKDQsICJxaCAlcCBwZXJpb2RpYyBzbG90ICVkXG4iLCBxaCwgYmVzdF9lbmQpOwogc3VjY2VzczoKIAlpZiAoaGVhZCkgewpAQCAtMTg2NywxOSArMTkxNywyMSBAQAogCX0KIAlxaC0+dHlwZV9yZWcgPSB0eXBlX3JlZzsKIAotCS8qIHByZWNvbXB1dGUgcnhpbnRlcnZhbC90eGludGVydmFsIHJlZ2lzdGVyICovCi0JaW50ZXJ2YWwgPSBtaW4oKHU4KTE2LCBlcGQtPmJJbnRlcnZhbCk7CS8qIGxvZyBlbmNvZGluZyAqLworCS8qIFByZWNvbXB1dGUgUlhJTlRFUlZBTC9UWElOVEVSVkFMIHJlZ2lzdGVyICovCiAJc3dpdGNoIChxaC0+dHlwZSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgotCQkvKiBmdWxsc3BlZWQgdXNlcyBsaW5lYXIgZW5jb2RpbmcgKi8KLQkJaWYgKFVTQl9TUEVFRF9GVUxMID09IHVyYi0+ZGV2LT5zcGVlZCkgewotCQkJaW50ZXJ2YWwgPSBlcGQtPmJJbnRlcnZhbDsKLQkJCWlmICghaW50ZXJ2YWwpCi0JCQkJaW50ZXJ2YWwgPSAxOworCQkvKgorCQkgKiBGdWxsL2xvdyBzcGVlZHMgdXNlIHRoZSAgbGluZWFyIGVuY29kaW5nLAorCQkgKiBoaWdoIHNwZWVkIHVzZXMgdGhlIGxvZ2FyaXRobWljIGVuY29kaW5nLgorCQkgKi8KKwkJaWYgKHVyYi0+ZGV2LT5zcGVlZCA8PSBVU0JfU1BFRURfRlVMTCkgeworCQkJaW50ZXJ2YWwgPSBtYXhfdCh1OCwgZXBkLT5iSW50ZXJ2YWwsIDEpOworCQkJYnJlYWs7CiAJCX0KIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6Ci0JCS8qIGlzbyBhbHdheXMgdXNlcyBsb2cgZW5jb2RpbmcgKi8KKwkJLyogSVNPIGFsd2F5cyB1c2VzIGxvZ2FyaXRobWljIGVuY29kaW5nICovCisJCWludGVydmFsID0gbWluX3QodTgsIGVwZC0+YkludGVydmFsLCAxNik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFJFVklTSVQgd2UgYWN0dWFsbHkgd2FudCB0byB1c2UgTkFLIGxpbWl0cywgaGludGluZyB0byB0aGUKQEAgLTE4OTAsMTMgKzE5NDIsMTEgQEAKIAkJICoKIAkJICogVGhlIGRvd25zaWRlIG9mIGRpc2FibGluZyB0aGlzIGlzIHRoYXQgdHJhbnNmZXIgc2NoZWR1bGluZwogCQkgKiBnZXRzIFZFUlkgdW5mYWlyIGZvciBub25wZXJpb2RpYyB0cmFuc2ZlcnM7IGEgbWlzYmVoYXZpbmcKLQkJICogcGVyaXBoZXJhbCBjb3VsZCBtYWtlIHRoYXQgaHVydC4gIE9yIGZvciByZWFkcywgb25lIHRoYXQncwotCQkgKiBwZXJmZWN0bHkgbm9ybWFsOiAgbmV0d29yayBhbmQgb3RoZXIgZHJpdmVycyBrZWVwIHJlYWRzCi0JCSAqIHBvc3RlZCBhdCBhbGwgdGltZXMsIGhhdmluZyBvbmUgcGVuZGluZyBmb3IgYSB3ZWVrIHNob3VsZAotCQkgKiBiZSBwZXJmZWN0bHkgc2FmZS4KKwkJICogcGVyaXBoZXJhbCBjb3VsZCBtYWtlIHRoYXQgaHVydC4gIFRoYXQncyBwZXJmZWN0bHkgbm9ybWFsCisJCSAqIGZvciByZWFkcyBmcm9tIG5ldHdvcmsgb3Igc2VyaWFsIGFkYXB0ZXJzIC4uLiBzbyB3ZSBoYXZlCisJCSAqIHBhcnRpYWwgTkFLbGltaXQgc3VwcG9ydCBmb3IgYnVsayBSWC4KIAkJICoKLQkJICogVGhlIHVwc2lkZSBvZiBkaXNhYmxpbmcgaXQgaXMgYXZvaWRuZyB0cmFuc2ZlciBzY2hlZHVsaW5nCi0JCSAqIGNvZGUgdG8gcHV0IHRoaXMgYXNpZGUgZm9yIHdoaWxlLgorCQkgKiBUaGUgdXBzaWRlIG9mIGRpc2FibGluZyBpdCBpcyBzaW1wbGVyIHRyYW5zZmVyIHNjaGVkdWxpbmcuCiAJCSAqLwogCQlpbnRlcnZhbCA9IDA7CiAJfQpAQCAtMjAzNyw5ICsyMDg3LDkgQEAKIAkJZ290byBkb25lOwogCiAJLyogQW55IFVSQiBub3QgYWN0aXZlbHkgcHJvZ3JhbW1lZCBpbnRvIGVuZHBvaW50IGhhcmR3YXJlIGNhbiBiZQotCSAqIGltbWVkaWF0ZWx5IGdpdmVuIGJhY2suICBTdWNoIGFuIFVSQiBtdXN0IGJlIGF0IHRoZSBoZWFkIG9mIGl0cworCSAqIGltbWVkaWF0ZWx5IGdpdmVuIGJhY2s7IHRoYXQncyBhbnkgVVJCIG5vdCBhdCB0aGUgaGVhZCBvZiBhbgogCSAqIGVuZHBvaW50IHF1ZXVlLCB1bmxlc3Mgc29tZWRheSB3ZSBnZXQgcmVhbCBETUEgcXVldWVzLiAgQW5kIGV2ZW4KLQkgKiB0aGVuLCBpdCBtaWdodCBub3QgYmUga25vd24gdG8gdGhlIGhhcmR3YXJlLi4uCisJICogaWYgaXQncyBhdCB0aGUgaGVhZCwgaXQgbWlnaHQgbm90IGJlIGtub3duIHRvIHRoZSBoYXJkd2FyZS4uLgogCSAqCiAJICogT3RoZXJ3aXNlIGFib3J0IGN1cnJlbnQgdHJhbnNmZXIsIHBlbmRpbmcgZG1hLCBldGMuOyB1cmItPnN0YXR1cwogCSAqIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZC4gIFRoaXMgaXMgYSBzeW5jaHJvbm91cyBhYm9ydDsgaXQnZCBiZQpAQCAtMjA3OCw2ICsyMTI4LDE1IEBACiAJCXFoLT5pc19yZWFkeSA9IDA7CiAJCV9fbXVzYl9naXZlYmFjayhtdXNiLCB1cmIsIDApOwogCQlxaC0+aXNfcmVhZHkgPSByZWFkeTsKKworCQkvKiBJZiBub3RoaW5nIGVsc2UgKHVzdWFsbHkgbXVzYl9naXZlYmFjaykgaXMgdXNpbmcgaXQKKwkJICogYW5kIGl0cyBVUkIgbGlzdCBoYXMgZW1wdGllZCwgcmVjeWNsZSB0aGlzIHFoLgorCQkgKi8KKwkJaWYgKHJlYWR5ICYmIGxpc3RfZW1wdHkoJnFoLT5oZXAtPnVyYl9saXN0KSkgeworCQkJcWgtPmhlcC0+aGNwcml2ID0gTlVMTDsKKwkJCWxpc3RfZGVsKCZxaC0+cmluZyk7CisJCQlrZnJlZShxaCk7CisJCX0KIAl9IGVsc2UKIAkJcmV0ID0gbXVzYl9jbGVhbnVwX3VyYih1cmIsIHFoLCB1cmItPnBpcGUgJiBVU0JfRElSX0lOKTsKIGRvbmU6CkBAIC0yMDkzLDE1ICsyMTUyLDE2IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJc3RydWN0IG11c2IJCSptdXNiID0gaGNkX3RvX211c2IoaGNkKTsKIAl1OAkJCWlzX2luID0gZXBudW0gJiBVU0JfRElSX0lOOwotCXN0cnVjdCBtdXNiX3FoCQkqcWggPSBoZXAtPmhjcHJpdjsKLQlzdHJ1Y3QgdXJiCQkqdXJiLCAqdG1wOworCXN0cnVjdCBtdXNiX3FoCQkqcWg7CisJc3RydWN0IHVyYgkJKnVyYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpzY2hlZDsKIAotCWlmICghcWgpCi0JCXJldHVybjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKKwlxaCA9IGhlcC0+aGNwcml2OworCWlmIChxaCA9PSBOVUxMKQorCQlnb3RvIGV4aXQ7CisKIAlzd2l0Y2ggKHFoLT50eXBlKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQlzY2hlZCA9ICZtdXNiLT5jb250cm9sOwpAQCAtMjEzNSwxMyArMjE5NSwyOCBAQAogCiAJCS8qIGNsZWFudXAgKi8KIAkJbXVzYl9jbGVhbnVwX3VyYih1cmIsIHFoLCB1cmItPnBpcGUgJiBVU0JfRElSX0lOKTsKLQl9IGVsc2UKLQkJdXJiID0gTlVMTDsKIAotCS8qIHRoZW4ganVzdCBudWtlIGFsbCB0aGUgb3RoZXJzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2Zyb20odXJiLCB0bXAsICZoZXAtPnVyYl9saXN0LCB1cmJfbGlzdCkKLQkJbXVzYl9naXZlYmFjayhxaCwgdXJiLCAtRVNIVVRET1dOKTsKKwkJLyogVGhlbiBudWtlIGFsbCB0aGUgb3RoZXJzIC4uLiBhbmQgYWR2YW5jZSB0aGUKKwkJICogcXVldWUgb24gaHdfZXAgKGUuZy4gYnVsayByaW5nKSB3aGVuIHdlJ3JlIGRvbmUuCisJCSAqLworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmhlcC0+dXJiX2xpc3QpKSB7CisJCQl1cmIgPSBuZXh0X3VyYihxaCk7CisJCQl1cmItPnN0YXR1cyA9IC1FU0hVVERPV047CisJCQltdXNiX2FkdmFuY2Vfc2NoZWR1bGUobXVzYiwgdXJiLCBxaC0+aHdfZXAsIGlzX2luKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEp1c3QgZW1wdHkgdGhlIHF1ZXVlOyB0aGUgaGFyZHdhcmUgaXMgYnVzeSB3aXRoCisJCSAqIG90aGVyIHRyYW5zZmVycywgYW5kIHNpbmNlICFxaC0+aXNfcmVhZHkgbm90aGluZworCQkgKiB3aWxsIGFjdGl2YXRlIGFueSBvZiB0aGVzZSBhcyBpdCBhZHZhbmNlcy4KKwkJICovCisJCXdoaWxlICghbGlzdF9lbXB0eSgmaGVwLT51cmJfbGlzdCkpCisJCQlfX211c2JfZ2l2ZWJhY2sobXVzYiwgbmV4dF91cmIocWgpLCAtRVNIVVRET1dOKTsKIAorCQloZXAtPmhjcHJpdiA9IE5VTEw7CisJCWxpc3RfZGVsKCZxaC0+cmluZyk7CisJCWtmcmVlKHFoKTsKKwl9CitleGl0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKaW5kZXggZTBlOWNlNS4uYmY2NzdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAkJZGVzYy0+YkRlc2NMZW5ndGggPSA5OwogCQlkZXNjLT5iRGVzY3JpcHRvclR5cGUgPSAweDI5OwogCQlkZXNjLT5iTmJyUG9ydHMgPSAxOwotCQlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwkJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IGNwdV90b19sZTE2KAogCQkJCSAgMHgwMDAxCS8qIHBlci1wb3J0IHBvd2VyIHN3aXRjaGluZyAqLwogCQkJCXwgMHgwMDEwCS8qIG5vIG92ZXJjdXJyZW50IHJlcG9ydGluZyAqLwogCQkJCSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IGVlNTViNDQuLmFhODg0ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC00Myw3ICs0Myw3IEBACiAKIGNvbmZpZyBUV0w0MDMwX1VTQgogCXRyaXN0YXRlICJUV0w0MDMwIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKKwlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRSAmJiBSRUdVTEFUT1JfVFdMNDAzMAogCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgVVNCIE9URyB0cmFuc2NlaXZlciBvbiBUV0w0MDMwCkBAIC01MSw0ICs1MSwxMiBAQAogCSAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cywKIAkgIGluIGhvc3QgbW9kZSwgbG93IHNwZWVkLgogCitjb25maWcgTk9QX1VTQl9YQ0VJVgorCXRyaXN0YXRlICJOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlciIKKwlzZWxlY3QgVVNCX09UR19VVElMUworCWhlbHAKKwkgdGhpcyBkcml2ZXIgaXMgdG8gYmUgdXNlZCBieSBhbGwgdGhlIHVzYiB0cmFuc2NlaXZlciB3aGljaCBhcmUgZWl0aGVyCisJIGJ1aWx0LWluIHdpdGggdXNiIGlwIG9yIHdoaWNoIGFyZSBhdXRvbm9tb3VzIGFuZCBkb2Vzbid0IHJlcXVpcmUgYW55CisJIHBoeSBwcm9ncmFtbWluZyBzdWNoIGFzIElTUDF4MDQgZXRjLgorCiBlbmRpZiAjIFVTQiB8fCBPVEcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQppbmRleCBkNzNjN2NmLi4yMDgxNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogb2JqLSQoQ09ORklHX1VTQl9HUElPX1ZCVVMpCSs9IGdwaW9fdmJ1cy5vCiBvYmotJChDT05GSUdfSVNQMTMwMV9PTUFQKQkrPSBpc3AxMzAxX29tYXAubwogb2JqLSQoQ09ORklHX1RXTDQwMzBfVVNCKQkrPSB0d2w0MDMwLXVzYi5vCitvYmotJChDT05GSUdfTk9QX1VTQl9YQ0VJVikJKz0gbm9wLXVzYi14Y2Vpdi5vCiAKIGNjZmxhZ3MtJChDT05GSUdfVVNCX0RFQlVHKQkrPSAtRERFQlVHCiBjY2ZsYWdzLSQoQ09ORklHX1VTQl9HQURHRVRfREVCVUcpICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYyBiL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYwppbmRleCA2M2E2MDM2Li4xYzI2Yzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKQEAgLTM0LDYgKzM1LDcgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yICAgICAgICp2YnVzX2RyYXc7CiAJaW50CQkJdmJ1c19kcmF3X2VuYWJsZWQ7CiAJdW5zaWduZWQJCW1BOworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKIAogCkBAIC03NiwyNCArNzgsMjYgQEAKIAlncGlvX3ZidXMtPm1BID0gbUE7CiB9CiAKLS8qIFZCVVMgY2hhbmdlIElSUSBoYW5kbGVyICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb192YnVzX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBpc192YnVzX3Bvd2VyZWQoc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gKnBkYXRhKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkYXRhOwotCXN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBncGlvX3ZidXNfZGF0YSAqZ3Bpb192YnVzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGdwaW8sIHZidXM7CisJaW50IHZidXM7CiAKIAl2YnVzID0gZ3Bpb19nZXRfdmFsdWUocGRhdGEtPmdwaW9fdmJ1cyk7CiAJaWYgKHBkYXRhLT5ncGlvX3ZidXNfaW52ZXJ0ZWQpCiAJCXZidXMgPSAhdmJ1czsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIlZCVVMgJXMgKGdhZGdldDogJXMpXG4iLAotCQl2YnVzID8gInN1cHBsaWVkIiA6ICJpbmFjdGl2ZSIsCi0JCWdwaW9fdmJ1cy0+b3RnLmdhZGdldCA/IGdwaW9fdmJ1cy0+b3RnLmdhZGdldC0+bmFtZSA6ICJub25lIik7CisJcmV0dXJuIHZidXM7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fdmJ1c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEgKmdwaW9fdmJ1cyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEsIHdvcmspOworCXN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSA9IGdwaW9fdmJ1cy0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCWludCBncGlvOwogCiAJaWYgKCFncGlvX3ZidXMtPm90Zy5nYWRnZXQpCi0JCXJldHVybiBJUlFfSEFORExFRDsKKwkJcmV0dXJuOwogCiAJLyogUGVyaXBoZXJhbCBjb250cm9sbGVycyB3aGljaCBtYW5hZ2UgdGhlIHB1bGx1cCB0aGVtc2VsdmVzIHdvbid0IGhhdmUKIAkgKiBncGlvX3B1bGx1cCBjb25maWd1cmVkIGhlcmUuICBJZiBpdCdzIGNvbmZpZ3VyZWQgaGVyZSwgd2UnbGwgZG8gd2hhdApAQCAtMTAxLDcgKzEwNSw3IEBACiAJICogdGhhdCBtYXkgY29tcGxpY2F0ZSB1c2JfZ2FkZ2V0X3ssZGlzfWNvbm5lY3QoKSBzdXBwb3J0LgogCSAqLwogCWdwaW8gPSBwZGF0YS0+Z3Bpb19wdWxsdXA7Ci0JaWYgKHZidXMpIHsKKwlpZiAoaXNfdmJ1c19wb3dlcmVkKHBkYXRhKSkgewogCQlncGlvX3ZidXMtPm90Zy5zdGF0ZSA9IE9UR19TVEFURV9CX1BFUklQSEVSQUw7CiAJCXVzYl9nYWRnZXRfdmJ1c19jb25uZWN0KGdwaW9fdmJ1cy0+b3RnLmdhZGdldCk7CiAKQEAgLTEyMSw2ICsxMjUsMjEgQEAKIAkJdXNiX2dhZGdldF92YnVzX2Rpc2Nvbm5lY3QoZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KTsKIAkJZ3Bpb192YnVzLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOwogCX0KK30KKworLyogVkJVUyBjaGFuZ2UgSVJRIGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRhdGE7CisJc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGdwaW9fdmJ1c19kYXRhICpncGlvX3ZidXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIlZCVVMgJXMgKGdhZGdldDogJXMpXG4iLAorCQlpc192YnVzX3Bvd2VyZWQocGRhdGEpID8gInN1cHBsaWVkIiA6ICJpbmFjdGl2ZSIsCisJCWdwaW9fdmJ1cy0+b3RnLmdhZGdldCA/IGdwaW9fdmJ1cy0+b3RnLmdhZGdldC0+bmFtZSA6ICJub25lIik7CisKKwlpZiAoZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KQorCQlzY2hlZHVsZV93b3JrKCZncGlvX3ZidXMtPndvcmspOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjU3LDYgKzI3Niw3IEBACiAJCQlpcnEsIGVycik7CiAJCWdvdG8gZXJyX2lycTsKIAl9CisJSU5JVF9XT1JLKCZncGlvX3ZidXMtPndvcmssIGdwaW9fdmJ1c193b3JrKTsKIAogCS8qIG9ubHkgYWN0aXZlIHdoZW4gYSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCAqLwogCWVyciA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJmdwaW9fdmJ1cy0+b3RnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTMzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYworICoKKyAqIE5PUCBVU0IgdHJhbnNjZWl2ZXIgZm9yIGFsbCBVU0IgdHJhbnNjZWl2ZXIgd2hpY2ggYXJlIGVpdGhlciBidWlsdC1pbgorICogaW50byBVU0IgSVAgb3Igd2hpY2ggYXJlIG1vc3RseSBhdXRvbm9tb3VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogQWpheSBLdW1hciBHdXB0YSA8YWpheS5ndXB0YUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogQ3VycmVudCBzdGF0dXM6CisgKiAJdGhpcyBpcyB0byBhZGQgIm5vcCIgdHJhbnNjZWl2ZXIgZm9yIGFsbCB0aG9zZSBwaHkgd2hpY2ggaXMKKyAqIAlhdXRvbm9tb3VzIHN1Y2ggYXMgaXNwMTUwNCBldGMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorCitzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiB7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcglvdGc7CisJc3RydWN0IGRldmljZQkJKmRldjsKK307CisKK3N0YXRpYyB1NjQgbm9wX3hjZWl2X2RtYW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9wX3hjZWl2X2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAibm9wX3VzYl94Y2VpdiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmbm9wX3hjZWl2X2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BXzMyQklUX01BU0ssCisJCS5wbGF0Zm9ybV9kYXRhICAgICAgICAgID0gTlVMTCwKKwl9LAorfTsKKwordm9pZCB1c2Jfbm9wX3hjZWl2X3JlZ2lzdGVyKHZvaWQpCit7CisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmbm9wX3hjZWl2X2RldmljZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIHVzYiBub3AgdHJhbnNjZWl2ZXJcbiIpOworCQlyZXR1cm47CisJfQorfQorCit2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZub3BfeGNlaXZfZGV2aWNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiAqeGNlaXZfdG9fbm9wKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgbm9wX3VzYl94Y2Vpdiwgb3RnKTsKK30KKworc3RhdGljIGludCBub3Bfc2V0X3N1c3BlbmQoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCwgaW50IHN1c3BlbmQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm9wX3NldF9wZXJpcGhlcmFsKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngsCisJCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYgKm5vcDsKKworCWlmICgheCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlub3AgPSB4Y2Vpdl90b19ub3AoeCk7CisKKwlpZiAoIWdhZGdldCkgeworCQlub3AtPm90Zy5nYWRnZXQgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlub3AtPm90Zy5nYWRnZXQgPSBnYWRnZXQ7CisJbm9wLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vcF9zZXRfaG9zdChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdCkKK3sKKwlzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiAqbm9wOworCisJaWYgKCF4KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5vcCA9IHhjZWl2X3RvX25vcCh4KTsKKworCWlmICghaG9zdCkgeworCQlub3AtPm90Zy5ob3N0ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbm9wLT5vdGcuaG9zdCA9IGhvc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5vcF91c2JfeGNlaXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgbm9wX3VzYl94Y2Vpdgkqbm9wOworCWludCBlcnI7CisKKwlub3AgPSBremFsbG9jKHNpemVvZiAqbm9wLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5vcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlub3AtPmRldgkJPSAmcGRldi0+ZGV2OworCW5vcC0+b3RnLmRldgkJPSBub3AtPmRldjsKKwlub3AtPm90Zy5sYWJlbAkJPSAibm9wLXhjZWl2IjsKKwlub3AtPm90Zy5zdGF0ZQkJPSBPVEdfU1RBVEVfVU5ERUZJTkVEOworCW5vcC0+b3RnLnNldF9ob3N0CT0gbm9wX3NldF9ob3N0OworCW5vcC0+b3RnLnNldF9wZXJpcGhlcmFsCT0gbm9wX3NldF9wZXJpcGhlcmFsOworCW5vcC0+b3RnLnNldF9zdXNwZW5kCT0gbm9wX3NldF9zdXNwZW5kOworCisJZXJyID0gb3RnX3NldF90cmFuc2NlaXZlcigmbm9wLT5vdGcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgdHJhbnNjZWl2ZXIsIGVycjogJWRcbiIsCisJCQllcnIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbm9wKTsKKworCXJldHVybiAwOworZXhpdDoKKwlrZnJlZShub3ApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG5vcF91c2JfeGNlaXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYgKm5vcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJb3RnX3NldF90cmFuc2NlaXZlcihOVUxMKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKG5vcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbm9wX3VzYl94Y2Vpdl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG5vcF91c2JfeGNlaXZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChub3BfdXNiX3hjZWl2X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm5vcF91c2JfeGNlaXYiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm9wX3VzYl94Y2Vpdl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmbm9wX3VzYl94Y2Vpdl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG5vcF91c2JfeGNlaXZfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBub3BfdXNiX3hjZWl2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmbm9wX3VzYl94Y2Vpdl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobm9wX3VzYl94Y2Vpdl9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpub3BfdXNiX3hjZWl2Iik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyBJbmMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTk9QIFVTQiBUcmFuc2NlaXZlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKaW5kZXggNDE2ZTQ0MS4uZDk0NzhkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAKIC8qIFJlZ2lzdGVyIGRlZmluZXMgKi8KQEAgLTI0Niw2ICsyNDgsMTEgQEAKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCW90ZzsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCisJLyogVFdMNDAzMCBpbnRlcm5hbCBVU0IgcmVndWxhdG9yIHN1cHBsaWVzICovCisJc3RydWN0IHJlZ3VsYXRvcgkqdXNiMXY1OworCXN0cnVjdCByZWd1bGF0b3IJKnVzYjF2ODsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp1c2IzdjE7CisKIAkvKiBmb3IgdmJ1cyByZXBvcnRpbmcgd2l0aCBpcnFzIGRpc2FibGVkICovCiAJc3BpbmxvY2tfdAkJbG9jazsKIApAQCAtNDM0LDYgKzQ0MSwxOCBAQAogCiAJcHdyID0gdHdsNDAzMF91c2JfcmVhZCh0d2wsIFBIWV9QV1JfQ1RSTCk7CiAJaWYgKG9uKSB7CisJCXJlZ3VsYXRvcl9lbmFibGUodHdsLT51c2IzdjEpOworCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiMXY4KTsKKwkJLyoKKwkJICogRGlzYWJsaW5nIHVzYjN2MSByZWd1bGF0b3IgKD0gd3JpdGluZyAwIHRvIFZVU0IzVjFfREVWX0dSUAorCQkgKiBpbiB0d2w0MDMwKSByZXNldHMgdGhlIFZVU0JfREVESUNBVEVEMiByZWdpc3Rlci4gVGhpcyByZXNldAorCQkgKiBlbmFibGVzIFZVU0IzVjFfU0xFRVAgYml0IHRoYXQgcmVtYXBzIHVzYjN2MSBBQ1RJVkUgc3RhdGUgdG8KKwkJICogU0xFRVAuIFdlIHdvcmsgYXJvdW5kIHRoaXMgYnkgY2xlYXJpbmcgdGhlIGJpdCBhZnRlciB1c3YzdjEKKwkJICogaXMgcmUtYWN0aXZhdGVkLiBUaGlzIGVuc3VyZXMgdGhhdCBWVVNCM1YxIGlzIHJlYWxseSBhY3RpdmUuCisJCSAqLworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwKKwkJCQkJCQlWVVNCX0RFRElDQVRFRDIpOworCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiMXY1KTsKIAkJcHdyICY9IH5QSFlfUFdSX1BIWVBXRDsKIAkJV0FSTl9PTih0d2w0MDMwX3VzYl93cml0ZV92ZXJpZnkodHdsLCBQSFlfUFdSX0NUUkwsIHB3cikgPCAwKTsKIAkJdHdsNDAzMF91c2Jfd3JpdGUodHdsLCBQSFlfQ0xLX0NUUkwsCkBAIC00NDMsNiArNDYyLDkgQEAKIAl9IGVsc2UgIHsKIAkJcHdyIHw9IFBIWV9QV1JfUEhZUFdEOwogCQlXQVJOX09OKHR3bDQwMzBfdXNiX3dyaXRlX3ZlcmlmeSh0d2wsIFBIWV9QV1JfQ1RSTCwgcHdyKSA8IDApOworCQlyZWd1bGF0b3JfZGlzYWJsZSh0d2wtPnVzYjF2NSk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHR3bC0+dXNiMXY4KTsKKwkJcmVndWxhdG9yX2Rpc2FibGUodHdsLT51c2IzdjEpOwogCX0KIH0KIApAQCAtNDY4LDcgKzQ5MCw3IEBACiAJdHdsLT5hc2xlZXAgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0d2w0MDMwX3VzYl9sZG9faW5pdChzdHJ1Y3QgdHdsNDAzMF91c2IgKnR3bCkKK3N0YXRpYyBpbnQgdHdsNDAzMF91c2JfbGRvX2luaXQoc3RydWN0IHR3bDQwMzBfdXNiICp0d2wpCiB7CiAJLyogRW5hYmxlIHdyaXRpbmcgdG8gcG93ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIDB4QzAsIFBST1RFQ1RfS0VZKTsKQEAgLTQ4MCwyMCArNTAyLDQ1IEBACiAJLyogaW5wdXQgdG8gVlVTQjNWMSBMRE8gaXMgZnJvbSBWQkFULCBub3QgVkJVUyAqLwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDE0LCBWVVNCX0RFRElDQVRFRDEpOwogCi0JLyogdHVybiBvbiAzLjFWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDIwLCBWVVNCM1YxX0RFVl9HUlApOworCS8qIEluaXRpYWxpemUgMy4xViByZWd1bGF0b3IgKi8KKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjNWMV9ERVZfR1JQKTsKKworCXR3bC0+dXNiM3YxID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInVzYjN2MSIpOworCWlmIChJU19FUlIodHdsLT51c2IzdjEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCM1YxX1RZUEUpOwogCi0JLyogdHVybiBvbiAxLjVWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDIwLCBWVVNCMVY1X0RFVl9HUlApOworCS8qIEluaXRpYWxpemUgMS41ViByZWd1bGF0b3IgKi8KKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWNV9ERVZfR1JQKTsKKworCXR3bC0+dXNiMXY1ID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInVzYjF2NSIpOworCWlmIChJU19FUlIodHdsLT51c2IxdjUpKQorCQlnb3RvIGZhaWwxOworCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjVfVFlQRSk7CiAKLQkvKiB0dXJuIG9uIDEuOFYgcmVndWxhdG9yICovCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDB4MjAsIFZVU0IxVjhfREVWX0dSUCk7CisJLyogSW5pdGlhbGl6ZSAxLjhWIHJlZ3VsYXRvciAqLworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY4X0RFVl9HUlApOworCisJdHdsLT51c2IxdjggPSByZWd1bGF0b3JfZ2V0KHR3bC0+ZGV2LCAidXNiMXY4Iik7CisJaWYgKElTX0VSUih0d2wtPnVzYjF2OCkpCisJCWdvdG8gZmFpbDI7CisKIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWOF9UWVBFKTsKIAogCS8qIGRpc2FibGUgYWNjZXNzIHRvIHBvd2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAwLCBQUk9URUNUX0tFWSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDI6CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2NSk7CisJdHdsLT51c2IxdjUgPSBOVUxMOworZmFpbDE6CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjN2MSk7CisJdHdsLT51c2IzdjEgPSBOVUxMOworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgc3NpemVfdCB0d2w0MDMwX3VzYl92YnVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtNTk4LDcgKzY0NSw3IEBACiB7CiAJc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHR3bDQwMzBfdXNiCSp0d2w7Ci0JaW50CQkJc3RhdHVzOworCWludAkJCXN0YXR1cywgZXJyOwogCiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwbGF0Zm9ybV9kYXRhIG5vdCBhdmFpbGFibGVcbiIpOwpAQCAtNjIyLDcgKzY2OSwxMiBAQAogCS8qIGluaXQgc3BpbmxvY2sgZm9yIHdvcmtxdWV1ZSAqLwogCXNwaW5fbG9ja19pbml0KCZ0d2wtPmxvY2spOwogCi0JdHdsNDAzMF91c2JfbGRvX2luaXQodHdsKTsKKwllcnIgPSB0d2w0MDMwX3VzYl9sZG9faW5pdCh0d2wpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibGRvIGluaXQgZmFpbGVkXG4iKTsKKwkJa2ZyZWUodHdsKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJb3RnX3NldF90cmFuc2NlaXZlcigmdHdsLT5vdGcpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHdsKTsKQEAgLTY4OCw2ICs3NDAsOSBAQAogCXR3bDQwMzBfdXNiX2NsZWFyX2JpdHModHdsLCBQT1dFUl9DVFJMLCBQT1dFUl9DVFJMX09UR19FTkFCKTsKIAogCXR3bDQwMzBfcGh5X3Bvd2VyKHR3bCwgMCk7CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2NSk7CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2OCk7CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjN2MSk7CiAKIAlrZnJlZSh0d2wpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IGIzNjFmMDUuLmE2NWY5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC0xMTYsMTQgKzExNiwxNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGlnaV9hY2NlbGVwb3J0LgogCi1jb25maWcgVVNCX1NFUklBTF9DUDIxMDEKLQl0cmlzdGF0ZSAiVVNCIENQMjEwMSBVQVJUIEJyaWRnZSBDb250cm9sbGVyIgorY29uZmlnIFVTQl9TRVJJQUxfQ1AyMTBYCisJdHJpc3RhdGUgIlVTQiBDUDIxMHggZmFtaWx5IG9mIFVBUlQgQnJpZGdlIENvbnRyb2xsZXJzIgogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQ1AyMTAxL0NQMjEwMiBiYXNlZCBVU0IgdG8gUlMyMzIKLQkgIGNvbnZlcnRlci4KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQ1AyMTAxL0NQMjEwMi9DUDIxMDMgYmFzZWQgVVNCCisJICB0byBSUzIzMiBjb252ZXJ0ZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjcDIxMDEuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3AyMTB4LgogCiBjb25maWcgVVNCX1NFUklBTF9DWVBSRVNTX004CiAJdHJpc3RhdGUgIlVTQiBDeXByZXNzIE04IFVTQiBTZXJpYWwgRHJpdmVyIgpAQCAtNDcyLDYgKzQ3MiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3RpNjg1OC4KIAorY29uZmlnIFVTQl9TRVJJQUxfUVVBTENPTU0KKwl0cmlzdGF0ZSAiVVNCIFF1YWxjb21tIFNlcmlhbCBtb2RlbSIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUXVhbGNvbW0gVVNCIG1vZGVtIGRldmljZS4gIFRoZXNlIGFyZQorCSAgdXN1YWxseSB3aXJlbGVzcyBjZWxsdWxhciBtb2RlbXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHFjc2VyaWFsLgorCiBjb25maWcgVVNCX1NFUklBTF9TUENQOFg1CiAJdHJpc3RhdGUgIlVTQiBTUENQOHg1IFVTQiBUbyBTZXJpYWwgRHJpdmVyIgogCWhlbHAKQEAgLTUxNSw2ICs1MjQsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpZXJyYS4KIAorY29uZmlnIFVTQl9TRVJJQUxfU1lNQk9MCisJdHJpc3RhdGUgIlVTQiBTeW1ib2wgQmFyY29kZSBkcml2ZXIgKHNlcmlhbCBtb2RlKSIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFN5bWJvbCBVU0IgQmFyY29kZSBkZXZpY2UKKwkgIGluIHNlcmlhbCBlbXVsYXRpb24gbW9kZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3ltYm9sc2VyaWFsLgorCiBjb25maWcgVVNCX1NFUklBTF9USQogCXRyaXN0YXRlICJVU0IgVEkgMzQxMC81MDUyIFNlcmlhbCBEcml2ZXIiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCmluZGV4IGI3NWJlOTEuLjY2NjE5YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYpCQkrPSBhcmszMTE2Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTikJCQkrPSBiZWxraW5fc2Eubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEpCQkJKz0gY2gzNDEubwotb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxKQkJCSs9IGNwMjEwMS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9DUDIxMFgpCQkJKz0gY3AyMTB4Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSykJCSs9IGN5YmVyamFjay5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004KQkJKz0gY3lwcmVzc19tOC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9ERUJVRykJCQkrPSB1c2JfZGVidWcubwpAQCAtNDUsMTAgKzQ1LDEyIEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PUFRJT04pCQkJKz0gb3B0aW9uLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX09USTY4NTgpCQkrPSBvdGk2ODU4Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMykJCQkrPSBwbDIzMDMubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0pCQkrPSBxY3NlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TQUZFKQkJCSs9IHNhZmVfc2VyaWFsLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJKQkJKz0gc2llbWVuc19tcGkubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MpCQkrPSBzaWVycmEubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSkJCSs9IHNwY3A4eDUubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MKQkJCSs9IHN5bWJvbHNlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9USSkJCQkrPSB0aV91c2JfMzQxMF81MDUyLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1ZJU09SKQkJCSs9IHZpc29yLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCkJCSs9IHdoaXRlaGVhdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCmluZGV4IGY2MWUzY2EuLmFiNGNjMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAyMDA3LCBGcmFuayBBIEtpbmdzd29vZCA8ZnJhbmtAa2luZ3N3b29kLWNvbnN1bHRpbmcuY28udWs+CisgKiBDb3B5cmlnaHQgMjAwNywgV2VybmVyIENvcm5lbGl1cyA8d2VybmVyQGNvcm5lbGl1cy1jb25zdWx0LmRlPgorICogQ29weXJpZ2h0IDIwMDksIEJvcmlzIEhhamR1ayA8Ym9yaXNAaGFqZHVrLm9yZz4KICAqCiAgKiBjaDM0MS5jIGltcGxlbWVudHMgYSBzZXJpYWwgcG9ydCBkcml2ZXIgZm9yIHRoZSBXaW5jaGlwaGVhZCBDSDM0MS4KICAqCkBAIC0yMSw5ICsyMywzOSBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KIAotI2RlZmluZSBERUZBVUxUX0JBVURfUkFURSAyNDAwCisjZGVmaW5lIERFRkFVTFRfQkFVRF9SQVRFIDk2MDAKICNkZWZpbmUgREVGQVVMVF9USU1FT1VUICAgMTAwMAogCisvKiBmbGFncyBmb3IgSU8tQml0cyAqLworI2RlZmluZSBDSDM0MV9CSVRfUlRTICgxIDw8IDYpCisjZGVmaW5lIENIMzQxX0JJVF9EVFIgKDEgPDwgNSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGludGVycnVwdCBwaXBlIGRlZmluaXRpb25zICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYWx3YXlzIDQgaW50ZXJydXB0IGJ5dGVzICovCisvKiBmaXJzdCBpcnEgYnl0ZSBub3JtYWxseSAweDA4ICovCisvKiBzZWNvbmQgaXJxIGJ5dGUgYmFzZSAweDdkICsgYmVsb3cgKi8KKy8qIHRoaXJkIGlycSBieXRlIGJhc2UgMHg5NCArIGJlbG93ICovCisvKiBmb3VydGggaXJxIGJ5dGUgbm9ybWFsbHkgMHhlZSAqLworCisvKiBzZWNvbmQgaW50ZXJydXB0IGJ5dGUgKi8KKyNkZWZpbmUgQ0gzNDFfTVVMVF9TVEFUIDB4MDQgLyogbXVsdGlwbGUgc3RhdHVzIHNpbmNlIGxhc3QgaW50ZXJydXB0IGV2ZW50ICovCisKKy8qIHN0YXR1cyByZXR1cm5lZCBpbiB0aGlyZCBpbnRlcnJ1cHQgYW5zd2VyIGJ5dGUsIGludmVydGVkIGluIGRhdGEKKyAgIGZyb20gaXJxICovCisjZGVmaW5lIENIMzQxX0JJVF9DVFMgMHgwMQorI2RlZmluZSBDSDM0MV9CSVRfRFNSIDB4MDIKKyNkZWZpbmUgQ0gzNDFfQklUX1JJICAweDA0CisjZGVmaW5lIENIMzQxX0JJVF9EQ0QgMHgwOAorI2RlZmluZSBDSDM0MV9CSVRTX01PREVNX1NUQVQgMHgwZiAvKiBhbGwgYml0cyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGJhdWRyYXRlIGNhbGN1bGF0aW9uIGZhY3RvciAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENIMzQxX0JBVURCQVNFX0ZBQ1RPUiAxNTMyNjIwODAwCisjZGVmaW5lIENIMzQxX0JBVURCQVNFX0RJVk1BWCAzCisKIHN0YXRpYyBpbnQgZGVidWc7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKQEAgLTM0LDkgKzY2LDEyIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCiBzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSB7Ci0JdW5zaWduZWQgYmF1ZF9yYXRlOwotCXU4IGR0cjsKLQl1OCBydHM7CisJc3BpbmxvY2tfdCBsb2NrOyAvKiBhY2Nlc3MgbG9jayAqLworCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OyAvKiB3YWl0IHF1ZXVlIGZvciBtb2RlbSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBiYXVkX3JhdGU7IC8qIHNldCBiYXVkIHJhdGUgKi8KKwl1OCBsaW5lX2NvbnRyb2w7IC8qIHNldCBsaW5lIGNvbnRyb2wgdmFsdWUgUlRTL0RUUiAqLworCXU4IGxpbmVfc3RhdHVzOyAvKiBhY3RpdmUgc3RhdHVzIG9mIG1vZGVtIGNvbnRyb2wgaW5wdXRzICovCisJdTggbXVsdGlfc3RhdHVzX2NoYW5nZTsgLyogc3RhdHVzIGNoYW5nZWQgbXVsdGlwbGUgc2luY2UgbGFzdCBjYWxsICovCiB9OwogCiBzdGF0aWMgaW50IGNoMzQxX2NvbnRyb2xfb3V0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4IHJlcXVlc3QsCkBAIC03MiwzNyArMTA3LDI4IEBACiB7CiAJc2hvcnQgYSwgYjsKIAlpbnQgcjsKKwl1bnNpZ25lZCBsb25nIGZhY3RvcjsKKwlzaG9ydCBkaXZpc29yOwogCiAJZGJnKCJjaDM0MV9zZXRfYmF1ZHJhdGUoJWQpIiwgcHJpdi0+YmF1ZF9yYXRlKTsKLQlzd2l0Y2ggKHByaXYtPmJhdWRfcmF0ZSkgewotCWNhc2UgMjQwMDoKLQkJYSA9IDB4ZDkwMTsKLQkJYiA9IDB4MDAzODsKLQkJYnJlYWs7Ci0JY2FzZSA0ODAwOgotCQlhID0gMHg2NDAyOwotCQliID0gMHgwMDFmOwotCQlicmVhazsKLQljYXNlIDk2MDA6Ci0JCWEgPSAweGIyMDI7Ci0JCWIgPSAweDAwMTM7Ci0JCWJyZWFrOwotCWNhc2UgMTkyMDA6Ci0JCWEgPSAweGQ5MDI7Ci0JCWIgPSAweDAwMGQ7Ci0JCWJyZWFrOwotCWNhc2UgMzg0MDA6Ci0JCWEgPSAweDY0MDM7Ci0JCWIgPSAweDAwMGE7Ci0JCWJyZWFrOwotCWNhc2UgMTE1MjAwOgotCQlhID0gMHhjYzAzOwotCQliID0gMHgwMDA4OwotCQlicmVhazsKLQlkZWZhdWx0OgorCisJaWYgKCFwcml2LT5iYXVkX3JhdGUpCiAJCXJldHVybiAtRUlOVkFMOworCWZhY3RvciA9IChDSDM0MV9CQVVEQkFTRV9GQUNUT1IgLyBwcml2LT5iYXVkX3JhdGUpOworCWRpdmlzb3IgPSBDSDM0MV9CQVVEQkFTRV9ESVZNQVg7CisKKwl3aGlsZSAoKGZhY3RvciA+IDB4ZmZmMCkgJiYgZGl2aXNvcikgeworCQlmYWN0b3IgPj49IDM7CisJCWRpdmlzb3ItLTsKIAl9CiAKKwlpZiAoZmFjdG9yID4gMHhmZmYwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZhY3RvciA9IDB4MTAwMDAgLSBmYWN0b3I7CisJYSA9IChmYWN0b3IgJiAweGZmMDApIHwgZGl2aXNvcjsKKwliID0gZmFjdG9yICYgMHhmZjsKKwogCXIgPSBjaDM0MV9jb250cm9sX291dChkZXYsIDB4OWEsIDB4MTMxMiwgYSk7CiAJaWYgKCFyKQogCQlyID0gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweDlhLCAweDBmMmMsIGIpOwpAQCAtMTEwLDE5ICsxMzYsMTggQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGludCBjaDM0MV9zZXRfaGFuZHNoYWtlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYpCitzdGF0aWMgaW50IGNoMzQxX3NldF9oYW5kc2hha2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggY29udHJvbCkKIHsKLQlkYmcoImNoMzQxX3NldF9oYW5kc2hha2UoJWQsJWQpIiwgcHJpdi0+ZHRyLCBwcml2LT5ydHMpOwotCXJldHVybiBjaDM0MV9jb250cm9sX291dChkZXYsIDB4YTQsCi0JCX4oKHByaXYtPmR0cj8xPDw1OjApfChwcml2LT5ydHM/MTw8NjowKSksIDApOworCWRiZygiY2gzNDFfc2V0X2hhbmRzaGFrZSgweCUwMngpIiwgY29udHJvbCk7CisJcmV0dXJuIGNoMzQxX2NvbnRyb2xfb3V0KGRldiwgMHhhNCwgfmNvbnRyb2wsIDApOwogfQogCi1zdGF0aWMgaW50IGNoMzQxX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY2gzNDFfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdikKIHsKIAljaGFyICpidWZmZXI7CiAJaW50IHI7CiAJY29uc3QgdW5zaWduZWQgc2l6ZSA9IDg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiY2gzNDFfZ2V0X3N0YXR1cygpIik7CiAKQEAgLTEzNCwxMCArMTU5LDE1IEBACiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCS8qIE5vdCBoYXZpbmcgdGhlIGRhdGFzaGVldCBmb3IgdGhlIENIMzQxLCB3ZSBpZ25vcmUgdGhlIGJ5dGVzIHJldHVybmVkCi0JICogZnJvbSB0aGUgZGV2aWNlLiBSZXR1cm4gZXJyb3IgaWYgdGhlIGRldmljZSBkaWQgbm90IHJlc3BvbmQgaW4gdGltZS4KLQkgKi8KLQlyID0gMDsKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdGF0dXMgaWYgYXZhaWxhYmxlICovCisJaWYgKHIgPT0gMikgeworCQlyID0gMDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9zdGF0dXMgPSAofigqYnVmZmVyKSkgJiBDSDM0MV9CSVRTX01PREVNX1NUQVQ7CisJCXByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2UgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCXIgPSAtRVBST1RPOwogCiBvdXQ6CWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHI7CkBAIC0xODAsNyArMjEwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleHBlY3QgMHhmZiAweGVlICovCi0JciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2KTsKKwlyID0gY2gzNDFfZ2V0X3N0YXR1cyhkZXYsIHByaXYpOwogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTE5MiwxMiArMjIyLDEyIEBACiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKGRldiwgcHJpdik7CisJciA9IGNoMzQxX3NldF9oYW5kc2hha2UoZGV2LCBwcml2LT5saW5lX2NvbnRyb2wpOwogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKIAkvKiBleHBlY3QgMHg5ZiAweGVlICovCi0JciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2KTsKKwlyID0gY2gzNDFfZ2V0X3N0YXR1cyhkZXYsIHByaXYpOwogCiBvdXQ6CWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHI7CkBAIC0yMTYsOSArMjQ2LDEwIEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJcHJpdi0+YmF1ZF9yYXRlID0gREVGQVVMVF9CQVVEX1JBVEU7Ci0JcHJpdi0+ZHRyID0gMTsKLQlwcml2LT5ydHMgPSAxOworCXByaXYtPmxpbmVfY29udHJvbCA9IENIMzQxX0JJVF9SVFMgfCBDSDM0MV9CSVRfRFRSOwogCiAJciA9IGNoMzQxX2NvbmZpZ3VyZShzZXJpYWwtPmRldiwgcHJpdik7CiAJaWYgKHIgPCAwKQpAQCAtMjMxLDYgKzI2MiwzNSBAQAogCXJldHVybiByOwogfQogCitzdGF0aWMgdm9pZCBjaDM0MV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNfY2ZsYWc7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwlkYmcoIiVzIC0gc2h1dHRpbmcgZG93biB1cmJzIiwgX19mdW5jX18pOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCisJaWYgKHR0eSkgeworCQljX2NmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCQlpZiAoY19jZmxhZyAmIEhVUENMKSB7CisJCQkvKiBkcm9wIERUUiBhbmQgUlRTICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcHJpdi0+bGluZV9jb250cm9sID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCWNoMzQxX3NldF9oYW5kc2hha2UocG9ydC0+c2VyaWFsLT5kZXYsIDApOworCQl9CisJfQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworfQorCisKIC8qIG9wZW4gdGhpcyBkZXZpY2UsIHNldCBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgY2gzNDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCXN0cnVjdCBmaWxlICpmaWxwKQpAQCAtMjQyLDE0ICszMDIsMTMgQEAKIAlkYmcoImNoMzQxX29wZW4oKSIpOwogCiAJcHJpdi0+YmF1ZF9yYXRlID0gREVGQVVMVF9CQVVEX1JBVEU7Ci0JcHJpdi0+ZHRyID0gMTsKLQlwcml2LT5ydHMgPSAxOworCXByaXYtPmxpbmVfY29udHJvbCA9IENIMzQxX0JJVF9SVFMgfCBDSDM0MV9CSVRfRFRSOwogCiAJciA9IGNoMzQxX2NvbmZpZ3VyZShzZXJpYWwtPmRldiwgcHJpdik7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JciA9IGNoMzQxX3NldF9oYW5kc2hha2Uoc2VyaWFsLT5kZXYsIHByaXYpOworCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKHNlcmlhbC0+ZGV2LCBwcml2LT5saW5lX2NvbnRyb2wpOwogCWlmIChyKQogCQlnb3RvIG91dDsKIApAQCAtMjU3LDYgKzMxNiwxNiBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAorCWRiZygiJXMgLSBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLCBfX2Z1bmNfXyk7CisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJciA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiwiCisJCQkiIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcik7CisJCWNoMzQxX2Nsb3NlKHR0eSwgcG9ydCwgTlVMTCk7CisJCXJldHVybiAtRVBST1RPOworCX0KKwogCXIgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbih0dHksIHBvcnQsIGZpbHApOwogCiBvdXQ6CXJldHVybiByOwpAQCAtMjcwLDQ2ICszMzksMjI0IEBACiB7CiAJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgYmF1ZF9yYXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoImNoMzQxX3NldF90ZXJtaW9zKCkiKTsKIAorCWlmICghdHR5IHx8ICF0dHktPnRlcm1pb3MpCisJCXJldHVybjsKKwogCWJhdWRfcmF0ZSA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAKLQlzd2l0Y2ggKGJhdWRfcmF0ZSkgewotCWNhc2UgMjQwMDoKLQljYXNlIDQ4MDA6Ci0JY2FzZSA5NjAwOgotCWNhc2UgMTkyMDA6Ci0JY2FzZSAzODQwMDoKLQljYXNlIDExNTIwMDoKLQkJcHJpdi0+YmF1ZF9yYXRlID0gYmF1ZF9yYXRlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYmcoIlJhdGUgJWQgbm90IHN1cHBvcnRlZCwgdXNpbmcgJWQiLAotCQkJYmF1ZF9yYXRlLCBERUZBVUxUX0JBVURfUkFURSk7Ci0JCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOworCXByaXYtPmJhdWRfcmF0ZSA9IGJhdWRfcmF0ZTsKKworCWlmIChiYXVkX3JhdGUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IChDSDM0MV9CSVRfRFRSIHwgQ0gzNDFfQklUX1JUUyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJY2gzNDFfc2V0X2JhdWRyYXRlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2KTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfihDSDM0MV9CSVRfRFRSIHwgQ0gzNDFfQklUX1JUUyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQljaDM0MV9zZXRfYmF1ZHJhdGUocG9ydC0+c2VyaWFsLT5kZXYsIHByaXYpOworCWNoMzQxX3NldF9oYW5kc2hha2UocG9ydC0+c2VyaWFsLT5kZXYsIHByaXYtPmxpbmVfY29udHJvbCk7CiAKIAkvKiBVbmltcGxlbWVudGVkOgogCSAqIChjZmxhZyAmIENTSVpFKSA6IGRhdGEgYml0cyBbNSwgOF0KIAkgKiAoY2ZsYWcgJiBQQVJFTkIpIDogcGFyaXR5IHtOT05FLCBFVkVOLCBPRER9CiAJICogKGNmbGFnICYgQ1NUT1BCKSA6IHN0b3AgYml0cyBbMSwgMl0KIAkgKi8KK30KIAotCSAvKiBDb3B5IGJhY2sgdGhlIG9sZCBoYXJkd2FyZSBzZXR0aW5ncyAqLwotCSB0dHlfdGVybWlvc19jb3B5X2h3KHR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpOwotCSAvKiBBbmQgcmUtZW5jb2RlIHdpdGggdGhlIG5ldyBiYXVkICovCi0JIHR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZF9yYXRlLCBiYXVkX3JhdGUpOworc3RhdGljIGludCBjaDM0MV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggY29udHJvbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENIMzQxX0JJVF9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENIMzQxX0JJVF9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNIMzQxX0JJVF9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNIMzQxX0JJVF9EVFI7CisJY29udHJvbCA9IHByaXYtPmxpbmVfY29udHJvbDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY2gzNDFfc2V0X2hhbmRzaGFrZShwb3J0LT5zZXJpYWwtPmRldiwgY29udHJvbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoMzQxX3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgYWN0dWFsX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAoJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLAorCQkgICAgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmIChhY3R1YWxfbGVuZ3RoID49IDQpIHsKKwkJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9zdGF0dXMgPSAofihkYXRhWzJdKSkgJiBDSDM0MV9CSVRTX01PREVNX1NUQVQ7CisJCWlmICgoZGF0YVsxXSAmIENIMzQxX01VTFRfU1RBVCkpCisJCQlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwl9CisKK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9tb2RlbV9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBhcmcpCit7CisJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBwcmV2c3RhdHVzOworCXU4IHN0YXR1czsKKwl1OCBjaGFuZ2VkOworCXU4IG11bHRpX2NoYW5nZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByZXZzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIW11bHRpX2NoYW5nZSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwkJbXVsdGlfY2hhbmdlID0gcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCWNoYW5nZWQgPSBwcmV2c3RhdHVzIF4gc3RhdHVzOworCisJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfUkkpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX0RTUikpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfRENEKSkgfHwKKwkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY2hhbmdlZCAmIENIMzQxX0JJVF9DVFMpKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHJldnN0YXR1cyA9IHN0YXR1czsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLypzdGF0aWMgaW50IGNoMzQxX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCovCitzdGF0aWMgaW50IGNoMzQxX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJZGJnKCIlcyAoJWQpIGNtZCA9IDB4JTA0eCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7CisJCXJldHVybiB3YWl0X21vZGVtX2luZm8ocG9ydCwgYXJnKTsKKworCWRlZmF1bHQ6CisJCWRiZygiJXMgbm90IHN1cHBvcnRlZCA9IDB4JTA0eCIsIF9fZnVuY19fLCBjbWQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IGNoMzQxX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggbWNyOworCXU4IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJZGJnKCIlcyAoJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCW1jciA9IHByaXYtPmxpbmVfY29udHJvbDsKKwlzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXN1bHQgPSAoKG1jciAmIENIMzQxX0JJVF9EVFIpCQk/IFRJT0NNX0RUUiA6IDApCisJCSAgfCAoKG1jciAmIENIMzQxX0JJVF9SVFMpCT8gVElPQ01fUlRTIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0NUUykJPyBUSU9DTV9DVFMgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfRFNSKQk/IFRJT0NNX0RTUiA6IDApCisJCSAgfCAoKHN0YXR1cyAmIENIMzQxX0JJVF9SSSkJPyBUSU9DTV9SSSAgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfRENEKQk/IFRJT0NNX0NEICA6IDApOworCisJZGJnKCIlcyAtIHJlc3VsdCA9ICV4IiwgX19mdW5jX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbnQgY2gzNDFfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBOVUxMOworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2OworCisJc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisKKwkvKnJlY29uZmlndXJlIGNoMzQxIHNlcmlhbCBwb3J0IGFmdGVyIGJ1cy1yZXNldCovCisJY2gzNDFfY29uZmlndXJlKGRldiwgcHJpdik7CisKKwl1c2Jfc2VyaWFsX3Jlc3VtZShpbnRmKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2gzNDFfZHJpdmVyID0gewogCS5uYW1lCQk9ICJjaDM0MSIsCiAJLnByb2JlCQk9IHVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lCT0gY2gzNDFfcmVzZXRfcmVzdW1lLAogCS5pZF90YWJsZQk9IGlkX3RhYmxlLAogCS5ub19keW5hbWljX2lkCT0gMSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPQkxLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjaDM0MV9kZXZpY2UgPSB7CkBAIC0zMTcsMTIgKzU2NCwxNyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAiY2gzNDEtdWFydCIsCiAJfSwKLQkuaWRfdGFibGUgICAgICAgICA9IGlkX3RhYmxlLAotCS51c2JfZHJpdmVyICAgICAgID0gJmNoMzQxX2RyaXZlciwKLQkubnVtX3BvcnRzICAgICAgICA9IDEsCi0JLm9wZW4gICAgICAgICAgICAgPSBjaDM0MV9vcGVuLAotCS5zZXRfdGVybWlvcyAgICAgID0gY2gzNDFfc2V0X3Rlcm1pb3MsCi0JLmF0dGFjaCAgICAgICAgICAgPSBjaDM0MV9hdHRhY2gsCisJLmlkX3RhYmxlICAgICAgICAgID0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgICAgICAgID0gJmNoMzQxX2RyaXZlciwKKwkubnVtX3BvcnRzICAgICAgICAgPSAxLAorCS5vcGVuICAgICAgICAgICAgICA9IGNoMzQxX29wZW4sCisJLmNsb3NlICAgICAgICAgICAgID0gY2gzNDFfY2xvc2UsCisJLmlvY3RsICAgICAgICAgICAgID0gY2gzNDFfaW9jdGwsCisJLnNldF90ZXJtaW9zICAgICAgID0gY2gzNDFfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ICAgICAgICAgID0gY2gzNDFfdGlvY21nZXQsCisJLnRpb2Ntc2V0ICAgICAgICAgID0gY2gzNDFfdGlvY21zZXQsCisJLnJlYWRfaW50X2NhbGxiYWNrID0gY2gzNDFfcmVhZF9pbnRfY2FsbGJhY2ssCisJLmF0dGFjaCAgICAgICAgICAgID0gY2gzNDFfYXR0YWNoLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY2gzNDFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCnNpbWlsYXJpdHkgaW5kZXggODQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpyZW5hbWUgdG8gZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDAyN2Y0YjcuLmU4ZDUxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiB0aGFua3MgdG8gS2FybCBIaXJhbW90byBrYXJsQGhpcmFtb3RvLm9yZy4gUlRTQ1RTIGhhcmR3YXJlIGZsb3cKICAqIGNvbnRyb2wgdGhhbmtzIHRvIE11bmlyIE5hc3NhciBuYXNzYXJtdUByZWFsLXRpbWUuY29tCiAgKgotICogT3V0c3RhbmRpbmcgSXNzdWVzOgotICogIEJ1ZmZlcnMgYXJlIG5vdCBmbHVzaGVkIHdoZW4gdGhlIHBvcnQgaXMgb3BlbmVkLgotICogIE11bHRpcGxlIGNhbGxzIHRvIHdyaXRlKCkgbWF5IGZhaWwgd2l0aCAiUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTMxLDcgKzI3LDcgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjA3IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMDgiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJTaWxpY29uIExhYnMgQ1AyMTAxL0NQMjEwMiBSUzIzMiBzZXJpYWwgYWRhcHRvciBkcml2ZXIiCiAKIC8qCkBAIC00MiwxNyArMzgsMjEgQEAKIHN0YXRpYyB2b2lkIGNwMjEwMV9jbGVhbnVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKik7CiBzdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLAogCQkJCQkJCXN0cnVjdCBmaWxlKik7Ci1zdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50ICpjZmxhZ3AsIHVuc2lnbmVkIGludCAqYmF1ZHApOwogc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKIAkJCQkJCQlzdHJ1Y3Qga3Rlcm1pb3MqKTsKIHN0YXRpYyBpbnQgY3AyMTAxX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKIAkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqLAorCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBzdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICosIGludCk7CiBzdGF0aWMgaW50IGNwMjEwMV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICopOwogc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICopOwogCi0KIHN0YXRpYyBpbnQgZGVidWc7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKQEAgLTc5LDYgKzc5LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNEEpIH0sIC8qIFdlc3QgTW91bnRhaW4gUmFkaW8gUklHYmxhc3RlciBQJlAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNEIpIH0sIC8qIFdlc3QgTW91bnRhaW4gUmFkaW8gUklHdGFsayAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE1RSkgfSwgLyogSGVsaWNvbW0gSVAtTGluayAxMjIwLURWTSAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE5RikgfSwgLyogTUpTIFVTQiBUb3NsaW5rIFN3aXRjaGVyICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUE2KSB9LCAvKiBUaGlua09wdGljcyBXYXZJdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFBQykgfSwgLyogTVNEIERhc2ggSGF3ayAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFDOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgQmFieS1KVEFHICovCkBAIC05MCw2ICs5MSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBjNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzNDEpIH0sIC8qIFNpZW1lbnMgTUMzNVBVIEdQUlMgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzQTgpIH0sIC8qIEFtYmVyIFdpcmVsZXNzIEFNQjI1NjAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NkUpIH0sIC8qIEJFSSBVU0IgU2Vuc29yIEludGVyZmFjZSAoVkNQKSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MSkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RjAwMSkgfSwgLyogRWxhbiBEaWdpdGFsIFN5c3RlbXMgVVNCc2NvcGU1MCAqLwpAQCAtMjI0LDcgKzIyNiw3IEBACiAJa2ZyZWUoYnVmKTsKIAogCWlmIChyZXN1bHQgIT0gc2l6ZSkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCisJCWRiZygiJXMgLSBVbmFibGUgdG8gc2VuZCBjb25maWcgcmVxdWVzdCwgIgogCQkJCSJyZXF1ZXN0PTB4JXggc2l6ZT0lZCByZXN1bHQ9JWRcbiIsCiAJCQkJX19mdW5jX18sIHJlcXVlc3QsIHNpemUsIHJlc3VsdCk7CiAJCXJldHVybiAtRVBST1RPOwpAQCAtMjc1LDcgKzI3Nyw3IEBACiAJa2ZyZWUoYnVmKTsKIAogCWlmICgoc2l6ZSA+IDIgJiYgcmVzdWx0ICE9IHNpemUpIHx8IHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gc2VuZCByZXF1ZXN0LCAiCisJCWRiZygiJXMgLSBVbmFibGUgdG8gc2VuZCByZXF1ZXN0LCAiCiAJCQkJInJlcXVlc3Q9MHgleCBzaXplPSVkIHJlc3VsdD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgcmVxdWVzdCwgc2l6ZSwgcmVzdWx0KTsKIAkJcmV0dXJuIC1FUFJPVE87CkBAIC0zMDAsNiArMzAyLDQ3IEBACiAJcmV0dXJuIGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIHJlcXVlc3QsICZkYXRhLCAyKTsKIH0KIAorLyoKKyAqIGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZQorICogUXVhbnRpc2VzIHRoZSBiYXVkIHJhdGUgYXMgcGVyIEFOMjA1IFRhYmxlIDEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUodW5zaWduZWQgaW50IGJhdWQpIHsKKwlpZiAgICAgIChiYXVkIDw9IDU2KSAgICAgICBiYXVkID0gMDsKKwllbHNlIGlmIChiYXVkIDw9IDMwMCkgICAgICBiYXVkID0gMzAwOworCWVsc2UgaWYgKGJhdWQgPD0gNjAwKSAgICAgIGJhdWQgPSA2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjAwKSAgICAgYmF1ZCA9IDEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxODAwKSAgICAgYmF1ZCA9IDE4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDAwKSAgICAgYmF1ZCA9IDI0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0MDAwKSAgICAgYmF1ZCA9IDQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0ODAzKSAgICAgYmF1ZCA9IDQ4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3MjA3KSAgICAgYmF1ZCA9IDcyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA5NjEyKSAgICAgYmF1ZCA9IDk2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDQyOCkgICAgYmF1ZCA9IDE0NDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTYwNjIpICAgIGJhdWQgPSAxNjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE5MjUwKSAgICBiYXVkID0gMTkyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyODkxMikgICAgYmF1ZCA9IDI4ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMzg2MDEpICAgIGJhdWQgPSAzODQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDUxNTU4KSAgICBiYXVkID0gNTEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjI4MCkgICAgYmF1ZCA9IDU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTgwNTMpICAgIGJhdWQgPSA1NzYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY0MTExKSAgICBiYXVkID0gNjQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3NzYwOCkgICAgYmF1ZCA9IDc2ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTE3MDI4KSAgIGJhdWQgPSAxMTUyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjkzNDcpICAgYmF1ZCA9IDEyODAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE1Njg2OCkgICBiYXVkID0gMTUzNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjM3ODMyKSAgIGJhdWQgPSAyMzA0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNTQyMzQpICAgYmF1ZCA9IDI1MDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI3MzA2NikgICBiYXVkID0gMjU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDkxNTIwKSAgIGJhdWQgPSA0NjA4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjcxMzgpICAgYmF1ZCA9IDUwMDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY3MDI1NCkgICBiYXVkID0gNTc2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTA1MzI1NykgIGJhdWQgPSA5MjE2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDc0NTYwKSAgYmF1ZCA9IDEyMjg4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDU3NjAwKSAgYmF1ZCA9IDE4NDMyMDA7CisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgYmF1ZCA9IDM2ODY0MDA7CisJcmV0dXJuIGJhdWQ7Cit9CisKIHN0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKQEAgLTMzMCwxMCArMzczLDEyIEBACiAJfQogCiAJLyogQ29uZmlndXJlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSAqLwotCWNwMjEwMV9nZXRfdGVybWlvcyh0dHkpOworCWNwMjEwMV9nZXRfdGVybWlvcyh0dHksIHBvcnQpOwogCiAJLyogU2V0IHRoZSBEVFIgYW5kIFJUUyBwaW5zIGxvdyAqLwotCWNwMjEwMV90aW9jbXNldCh0dHksIE5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7CisJY3AyMTAxX3Rpb2Ntc2V0X3BvcnQodHR5ID8gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YQorCQkJOiBwb3J0LAorCQlOVUxMLCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNzUsOSArNDIwLDMxIEBACiAgKiBmcm9tIHRoZSBkZXZpY2UsIGNvcnJlY3RzIGFueSB1bnN1cHBvcnRlZCB2YWx1ZXMsIGFuZCBjb25maWd1cmVzIHRoZQogICogdGVybWlvcyBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhlIGRldmljZQogICovCi1zdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3MgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBiYXVkOworCisJaWYgKHR0eSkgeworCQljcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydCh0dHktPmRyaXZlcl9kYXRhLAorCQkJJnR0eS0+dGVybWlvcy0+Y19jZmxhZywgJmJhdWQpOworCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOworCX0KKworCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJCWNmbGFnID0gMDsKKwkJY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQocG9ydCwgJmNmbGFnLCAmYmF1ZCk7CisJfQorfQorCisvKgorICogY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQKKyAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIGNwMjEwMV9nZXRfdGVybWlvcyB3aGljaCBhbHdheXMgdXNlcyBhICZ1c2Jfc2VyaWFsX3BvcnQuCisgKi8KK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50ICpjZmxhZ3AsIHVuc2lnbmVkIGludCAqYmF1ZHApCit7CiAJdW5zaWduZWQgaW50IGNmbGFnLCBtb2RlbV9jdGxbNF07CiAJdW5zaWduZWQgaW50IGJhdWQ7CiAJdW5zaWduZWQgaW50IGJpdHM7CkBAIC0zODcsMTIgKzQ1NCwxMiBAQAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwgJmJhdWQsIDIpOwogCS8qIENvbnZlcnQgdG8gYmF1ZHJhdGUgKi8KIAlpZiAoYmF1ZCkKLQkJYmF1ZCA9IEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQ7CisJCWJhdWQgPSBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUoKEJBVURfUkFURV9HRU5fRlJFUSArIGJhdWQvMikvIGJhdWQpOwogCiAJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19mdW5jX18sIGJhdWQpOworCSpiYXVkcCA9IGJhdWQ7CiAKLQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwotCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gKmNmbGFncDsKIAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CiAJY2ZsYWcgJj0gfkNTSVpFOwpAQCAtNDk4LDcgKzU2NSw3IEBACiAJCWNmbGFnICY9IH5DUlRTQ1RTOwogCX0KIAotCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IGNmbGFnOworCSpjZmxhZ3AgPSBjZmxhZzsKIH0KIAogc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC01MTYsNDYgKzU4MywxNiBAQAogCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOwogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCW9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWJhdWQgPSBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUodHR5X2dldF9iYXVkX3JhdGUodHR5KSk7CiAKIAkvKiBJZiB0aGUgYmF1ZCByYXRlIGlzIHRvIGJlIHVwZGF0ZWQqLwotCWlmIChiYXVkICE9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcykpIHsKLQkJc3dpdGNoIChiYXVkKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSA2MDA6Ci0JCWNhc2UgMTIwMDoKLQkJY2FzZSAxODAwOgotCQljYXNlIDI0MDA6Ci0JCWNhc2UgNDgwMDoKLQkJY2FzZSA3MjAwOgotCQljYXNlIDk2MDA6Ci0JCWNhc2UgMTQ0MDA6Ci0JCWNhc2UgMTkyMDA6Ci0JCWNhc2UgMjg4MDA6Ci0JCWNhc2UgMzg0MDA6Ci0JCWNhc2UgNTU4NTQ6Ci0JCWNhc2UgNTc2MDA6Ci0JCWNhc2UgMTE1MjAwOgotCQljYXNlIDEyNzExNzoKLQkJY2FzZSAyMzA0MDA6Ci0JCWNhc2UgNDYwODAwOgotCQljYXNlIDkyMTYwMDoKLQkJY2FzZSAzNjg2NDAwOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliYXVkID0gOTYwMDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGJhdWQpIHsKLQkJCWRiZygiJXMgLSBTZXR0aW5nIGJhdWQgcmF0ZSB0byAlZCBiYXVkIiwgX19mdW5jX18sCi0JCQkJCWJhdWQpOwotCQkJaWYgKGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfQkFVRFJBVEUsCi0JCQkJCQkoQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZCkpKSB7Ci0JCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3QgIgotCQkJCQkJInN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwotCQkJCWJhdWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpOwotCQkJfQorCWlmIChiYXVkICE9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcykgJiYgYmF1ZCAhPSAwKSB7CisJCWRiZygiJXMgLSBTZXR0aW5nIGJhdWQgcmF0ZSB0byAlZCBiYXVkIiwgX19mdW5jX18sCisJCQkJYmF1ZCk7CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX0JBVURSQVRFLAorCQkJCQkoKEJBVURfUkFURV9HRU5fRlJFUSArIGJhdWQvMikgLyBiYXVkKSkpIHsKKwkJCWRiZygiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJCQliYXVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKTsKIAkJfQogCX0KIAkvKiBSZXBvcnQgYmFjayB0aGUgcmVzdWx0aW5nIGJhdWQgcmF0ZSAqLwpAQCAtNTg3LDE0ICs2MjQsMTQgQEAKIAkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA5IiwgX19mdW5jX18pOwogCQkJYnJlYWs7Ki8KIAkJZGVmYXVsdDoKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgImNwMjEwMSBkcml2ZXIgZG9lcyBub3QgIgorCQkJZGJnKCJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKIAkJCQkJInN1cHBvcnQgdGhlIG51bWJlciBvZiBiaXRzIHJlcXVlc3RlZCwiCiAJCQkJCSIgdXNpbmcgOCBiaXQgbW9kZVxuIik7CiAJCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBkYXRhIGJpdHMgcmVxdWVzdGVkICIKKwkJCWRiZygiTnVtYmVyIG9mIGRhdGEgYml0cyByZXF1ZXN0ZWQgIgogCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjExLDcgKzY0OCw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJQYXJpdHkgbW9kZSBub3Qgc3VwcG9ydGVkICIKKwkJCWRiZygiUGFyaXR5IG1vZGUgbm90IHN1cHBvcnRlZCAiCiAJCQkJCSJieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjI2LDcgKzY2Myw3IEBACiAJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fZnVuY19fKTsKIAkJfQogCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBzdG9wIGJpdHMgcmVxdWVzdGVkICIKKwkJCWRiZygiTnVtYmVyIG9mIHN0b3AgYml0cyByZXF1ZXN0ZWQgIgogCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjYwLDYgKzY5NywxMiBAQAogCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIGNwMjEwMV90aW9jbXNldF9wb3J0KHBvcnQsIGZpbGUsIHNldCwgY2xlYXIpOworfQorCitzdGF0aWMgaW50IGNwMjEwMV90aW9jbXNldF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CiAJdW5zaWduZWQgaW50IGNvbnRyb2wgPSAwOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTY4NCw3ICs3MjcsNiBAQAogCWRiZygiJXMgLSBjb250cm9sID0gMHglLjR4IiwgX19mdW5jX18sIGNvbnRyb2wpOwogCiAJcmV0dXJuIGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9DT05UUk9MLCAmY29udHJvbCwgMik7Ci0KIH0KIAogc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBmOTJmNGQ3Li5kY2M4N2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNjYzLDYgKzY2MywxMSBAQAogCXsgVVNCX0RFVklDRShBTFRJMl9WSUQsIEFMVEkyX04zX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIERJRUJPTERfQkNTX1NFOTIzX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTkRJX0hVQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEFUTUVMX1ZJRCwgU1RLNTQxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoREVfVklELCBTVEJfUElEKSB9LAorCXsgVVNCX0RFVklDRShERV9WSUQsIFdIVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEFESV9WSUQsIEFESV9HTklDRV9QSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAogCXsgfSwJCQkJCS8qIE9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLwogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC0xOTMzLDE4ICsxOTM4LDE2IEBACiAJCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50LwogCQkgICBOLkIuIHBhY2tldCBtYXkgYmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBvbmNlLCBidXQgZGlmZmVyZW5jZXMKIAkJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLwotCQlpZiAocHJpdiAhPSBOVUxMKSB7Ci0JCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQgKyAwXSAmCi0JCQkJCQkJRlRESV9TVEFUVVNfQjBfTUFTSzsKLQkJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7Ci0JCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0KLQkJCQkJbmV3X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwotCQkJCXByaXYtPnByZXZfc3RhdHVzID0gbmV3X3N0YXR1czsKLQkJCX0KKwkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0ICsgMF0gJgorCQkJCQkJRlRESV9TVEFUVVNfQjBfTUFTSzsKKwkJaWYgKG5ld19zdGF0dXMgIT0gcHJpdi0+cHJldl9zdGF0dXMpIHsKKwkJCXByaXYtPmRpZmZfc3RhdHVzIHw9CisJCQkJbmV3X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7CiAJCX0KIAotCQlsZW5ndGggPSBtaW4oUEtUU1osIHVyYi0+YWN0dWFsX2xlbmd0aC1wYWNrZXRfb2Zmc2V0KS0yOworCQlsZW5ndGggPSBtaW5fdCh1MzIsIFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKIAkJaWYgKGxlbmd0aCA8IDApIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIHBhY2tldCBsZW5ndGg6ICVkXG4iLAogCQkJCV9fZnVuY19fLCBsZW5ndGgrMik7CkBAIC0yMjg5LDExICsyMjkyLDggQEAKIAkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAogCQkJICAgMCwgMCwKIAkJCSAgIGJ1ZiwgMSwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGJnKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCi0JCQkgICAgcmV0KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWJyZWFrOwogCWNhc2UgRlQ4VTIzMkFNOgogCWNhc2UgRlQyMzJCTToKQEAgLTIzMDgsMTUgKzIzMDgsMTEgQEAKIAkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAwLCBwcml2LT5pbnRlcmZhY2UsCiAJCQkJICAgYnVmLCAyLCBXRFJfVElNRU9VVCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkYmcoIiVzIENvdWxkIG5vdCBnZXQgbW9kZW0gc3RhdHVzIG9mIGRldmljZSAtIGVycjogJWQiLCBfX2Z1bmNfXywKLQkJCSAgICByZXQpOworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwogCX0KIAogCXJldHVybiAgKGJ1ZlswXSAmIEZURElfU0lPX0RTUl9NQVNLID8gVElPQ01fRFNSIDogMCkgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCBlMzAwYzg0Li5kYWFmNjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtODkzLDYgKzg5MywyNiBAQAogI2RlZmluZSBESUVCT0xEX0JDU19TRTkyM19QSUQJMHhmYjk5CiAKIC8qCisgKiBBdG1lbCBTVEs1NDEKKyAqLworI2RlZmluZSBBVE1FTF9WSUQJCTB4MDNlYiAvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgU1RLNTQxX1BJRAkJMHgyMTA5IC8qIFppZ2JlZSBDb250cm9sbGVyICovCisKKy8qCisgKiBEcmVzZGVuIEVsZWt0cm9uaWMgU2Vuc29yIFRlcm1pbmFsIEJvYXJkCisgKi8KKyNkZWZpbmUgREVfVklECQkJMHgxY2YxIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBTVEJfUElECQkJMHgwMDAxIC8qIFNlbnNvciBUZXJtaW5hbCBCb2FyZCAqLworI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCisKKy8qCisgKiBCbGFja2ZpbiBnbklDRSBKVEFHCisgKiBodHRwOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1odzpqdGFnOmduaWNlCisgKi8KKyNkZWZpbmUgQURJX1ZJRCAJCTB4MDQ1NgorI2RlZmluZSBBRElfR05JQ0VfUElEIAkJMHhGMDAwCisKKy8qCiAgKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCiAgKiAgIGJSZXF1ZXN0OiAgICAgICBGVERJX0UyX1JFQUQKICAqICAgd1ZhbHVlOiAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDgxNDkwOWYuLjlkNTdjYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMTc3LDE0ICsxNzcsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IGksIGMgPSAwLCByOwogCi0jaWZkZWYgQ09ORklHX1BNCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGFuIGF1dG9yZXN1bWUsIGRvbid0IHN1Ym1pdCBVUkJzLgotCSAqIFRoZXkgd2lsbCBiZSBzdWJtaXR0ZWQgaW4gdGhlIG9wZW4gZnVuY3Rpb24gaW5zdGVhZC4KLQkgKi8KLQlpZiAoc2VyaWFsLT5kZXYtPmF1dG9fcG0pCi0JCXJldHVybiAwOwotI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgcG9ydC0+cmVhZF91cmIpIHsKQEAgLTE5Niw2ICsxODgsNyBAQAogCiAJcmV0dXJuIGMgPyAtRUlPIDogMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUpOwogCiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAxMzJiZTc0Li5lZjkyMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTc4LDYgKzc4LDcgQEAKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkIGlwYXFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGlwYXFfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBpcGFxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCkBAIC01NzIsMTUgKzU3MywxMCBAQAogCS5kZXNjcmlwdGlvbiA9CQkiUG9ja2V0UEMgUERBIiwKIAkudXNiX2RyaXZlciA9IAkJJmlwYXFfZHJpdmVyLAogCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAotCS8qCi0JICogc29tZSBkZXZpY2VzIGhhdmUgYW4gZXh0cmEgZW5kcG9pbnQsIHdoaWNoCi0JICogbXVzdCBiZSBpZ25vcmVkIGFzIGl0IHdvdWxkIG1ha2UgdGhlIGNvcmUKLQkgKiBjcmVhdGUgYSBzZWNvbmQgcG9ydCB3aGljaCBvb3BzZXMgd2hlbiB1c2VkCi0JICovCi0JLm51bV9wb3J0cyA9CQkxLAogCS5vcGVuID0JCQlpcGFxX29wZW4sCiAJLmNsb3NlID0JCWlwYXFfY2xvc2UsCiAJLmF0dGFjaCA9CQlpcGFxX3N0YXJ0dXAsCisJLmNhbGNfbnVtX3BvcnRzID0JaXBhcV9jYWxjX251bV9wb3J0cywKIAkuc2h1dGRvd24gPQkJaXBhcV9zaHV0ZG93biwKIAkud3JpdGUgPQkJaXBhcV93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQlpcGFxX3dyaXRlX3Jvb20sCkBAIC05NTYsMTQgKzk1Miw0OSBAQAogfQogCiAKK3N0YXRpYyBpbnQgaXBhcV9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCS8qCisJICogc29tZSBkZXZpY2VzIGhhdmUgMyBlbmRwb2ludHMsIHRoZSAzcmQgb2Ygd2hpY2gKKwkgKiBtdXN0IGJlIGlnbm9yZWQgYXMgaXQgd291bGQgbWFrZSB0aGUgY29yZQorCSAqIGNyZWF0ZSBhIHNlY29uZCBwb3J0IHdoaWNoIG9vcHNlcyB3aGVuIHVzZWQKKwkgKi8KKwlpbnQgaXBhcV9udW1fcG9ydHMgPSAxOworCisJZGJnKCIlcyAtIG51bWJlcm9mZW5kcG9pbnRzOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJKGludClzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwkvKgorCSAqIGEgZmV3IGRldmljZXMgaGF2ZSA0IGVuZHBvaW50cywgc2VlbWluZ2x5IFlha3VtYSBkZXZpY2VzLAorCSAqIGFuZCB3ZSBuZWVkIHRoZSBzZWNvbmQgcGFpciwgc28gbGV0IHRoZW0gaGF2ZSAyIHBvcnRzCisJICoKKwkgKiBUT0RPOiBjYW4gd2UgZHJvcCBwb3J0IDEgPworCSAqLworCWlmIChzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyA+IDMpIHsKKwkJaXBhcV9udW1fcG9ydHMgPSAyOworCX0KKworCXJldHVybiBpcGFxX251bV9wb3J0czsKK30KKworCiBzdGF0aWMgaW50IGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCS8qCisJCSAqIEZJWE1FOiBIUCBpUGFxIHJ4MzcxNSwgcG9zc2libHkgb3RoZXJzLCBoYXZlIDEgY29uZmlnIHRoYXQKKwkJICogaXMgbGFiZWxlZCBhcyAyCisJCSAqLworCiAJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisJZGJnKCIlcyAtIGlQQVEgbW9kdWxlIGNvbmZpZ3VyZWQgZm9yICVkIHBvcnRzIiwKKwkJX19GVU5DVElPTl9fLCBzZXJpYWwtPm51bV9wb3J0cyk7CisKIAlyZXR1cm4gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24oc2VyaWFsLT5kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCA5ODc4YzBmLi4wMGRhYThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTE1MDcsNyArMTUwNyw3IEBACiAJfSBlbHNlIHsKIAkJZGV2X3dhcm4oJnNlcmlhbC0+aW50ZXJmYWNlLT5kZXYsCiAJCQkgInVuc3VwcG9ydGVkIGVuZHBvaW50IHR5cGUgJXhcbiIsCi0JCQkgZXBfZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spOworCQkJIHVzYl9lbmRwb2ludF90eXBlKGVwX2Rlc2MpKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCmluZGV4IGNlYTMyNmYuLjgzOTU4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPcHRpY29uIFVTQiBiYXJjb2RlIHRvIHNlcmlhbCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IC0gMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA4IC0gMjAwOSBOb3ZlbGwgSW5jLgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CkBAIC00MCw4ICs0MSwxMiBAQAogCWJvb2wgdGhyb3R0bGVkOwogCWJvb2wgYWN0dWFsbHlfdGhyb3R0bGVkOwogCWJvb2wgcnRzOworCWludCBvdXRzdGFuZGluZ191cmJzOwogfTsKIAorLyogbWF4IG51bWJlciBvZiB3cml0ZSB1cmJzIGluIGZsaWdodCAqLworI2RlZmluZSBVUkJfVVBQRVJfTElNSVQJNAorCiBzdGF0aWMgdm9pZCBvcHRpY29uX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1cmItPmNvbnRleHQ7CkBAIC0xMDYsNyArMTExLDYgQEAKIAkJCQkJcHJpdi0+cnRzID0gZmFsc2U7CiAJCQkJZWxzZQogCQkJCQlwcml2LT5ydHMgPSB0cnVlOwotCQkJCS8qIEZJWE1FIGNoYW5nZSB0aGUgUlRTIGxldmVsICovCiAJCQl9IGVsc2UgewogCQkJZGV2X2RiZygmcHJpdi0+dWRldi0+ZGV2LAogCQkJCSJVbmtub3duIGRhdGEgcGFja2V0IHJlY2VpdmVkIGZyb20gdGhlIGRldmljZToiCkBAIC0xODgsNiArMTkyLDEyMCBAQAogCXVzYl9raWxsX3VyYihwcml2LT5idWxrX3JlYWRfdXJiKTsKIH0KIAorc3RhdGljIHZvaWQgb3B0aWNvbl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXJiLT5jb250ZXh0OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaWYgKHN0YXR1cykKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwktLXByaXYtPm91dHN0YW5kaW5nX3VyYnM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocHJpdi0+cG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5vdXRzdGFuZGluZ191cmJzID4gVVJCX1VQUEVSX0xJTUlUKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisJcHJpdi0+b3V0c3RhbmRpbmdfdXJicysrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWJ1ZmZlciA9IGttYWxsb2MoY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQljb3VudCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfbm9fYnVmZmVyOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOworCQljb3VudCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfbm9fdXJiOworCX0KKworCW1lbWNweShidWZmZXIsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGJ1ZmZlcik7CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCSAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgYnVmZmVyLCBjb3VudCwgb3B0aWNvbl93cml0ZV9idWxrX2NhbGxiYWNrLCBwcml2KTsKKworCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCSAgICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQljb3VudCA9IHN0YXR1czsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCisJICogcmVhbGx5IGZyZWUgaXQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0ICovCisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwlyZXR1cm4gY291bnQ7CitlcnJvcjoKKwl1c2JfZnJlZV91cmIodXJiKTsKK2Vycm9yX25vX3VyYjoKKwlrZnJlZShidWZmZXIpOworZXJyb3Jfbm9fYnVmZmVyOgorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLS1wcml2LT5vdXRzdGFuZGluZ191cmJzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qCisJICogV2UgcmVhbGx5IGNhbiB0YWtlIGFsbW9zdCBhbnl0aGluZyB0aGUgdXNlciB0aHJvd3MgYXQgdXMKKwkgKiBidXQgbGV0J3MgcGljayBhIG5pY2UgYmlnIG51bWJlciB0byB0ZWxsIHRoZSB0dHkKKwkgKiBsYXllciB0aGF0IHdlIGhhdmUgbG90cyBvZiBmcmVlIHNwYWNlLCB1bmxlc3Mgd2UgZG9uJ3QuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCAqIDIgLyAzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDIwNDg7Cit9CisKIHN0YXRpYyB2b2lkIG9wdGljb25fdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTIyMyw2ICszNDEsNjcgQEAKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIH0KIAorc3RhdGljIGludCBvcHRpY29uX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5ydHMpCisJCXJlc3VsdCA9IFRJT0NNX1JUUzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gJXgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2LAorCQkJICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzZXJpYWwpCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZ0bXAsIDB4MDAsIHNpemVvZih0bXApKTsKKworCS8qIGZha2UgZW11bGF0ZSBhIDE2NTUwIHVhcnQgdG8gbWFrZSB1c2Vyc3BhY2UgY29kZSBoYXBweSAqLworCXRtcC50eXBlCQk9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lCQk9IHByaXYtPnNlcmlhbC0+bWlub3I7CisJdG1wLnBvcnQJCT0gMDsKKwl0bXAuaXJxCQkJPSAwOworCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUJPSAxMDI0OworCXRtcC5iYXVkX2Jhc2UJCT0gOTYwMDsKKwl0bXAuY2xvc2VfZGVsYXkJCT0gNSpIWjsKKwl0bXAuY2xvc2luZ193YWl0CT0gMzAqSFo7CisKKwlpZiAoY29weV90b191c2VyKHNlcmlhbCwgJnRtcCwgc2l6ZW9mKCpzZXJpYWwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKHByaXYsCisJCQkJICAgICAgIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKIHN0YXRpYyBpbnQgb3B0aWNvbl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdjsKQEAgLTMwNiwxMSArNDg1LDM3IEBACiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOwogfQogCitzdGF0aWMgaW50IG9wdGljb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCXVzYl9raWxsX3VyYihwcml2LT5idWxrX3JlYWRfdXJiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpY29uX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJaW50IHJlc3VsdDsKKworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCkKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+YnVsa19yZWFkX3VyYiwgR0ZQX05PSU8pOworCWVsc2UKKwkJcmVzdWx0ID0gMDsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb3B0aWNvbl9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJIm9wdGljb24iLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQlvcHRpY29uX3N1c3BlbmQsCisJLnJlc3VtZSA9CW9wdGljb25fcmVzdW1lLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwpAQCAtMzI2LDkgKzUzMSwxMyBAQAogCS5hdHRhY2ggPQkJb3B0aWNvbl9zdGFydHVwLAogCS5vcGVuID0JCQlvcHRpY29uX29wZW4sCiAJLmNsb3NlID0JCW9wdGljb25fY2xvc2UsCisJLndyaXRlID0JCW9wdGljb25fd3JpdGUsCisJLndyaXRlX3Jvb20gPSAJCW9wdGljb25fd3JpdGVfcm9vbSwKIAkuc2h1dGRvd24gPQkJb3B0aWNvbl9zaHV0ZG93biwKIAkudGhyb3R0bGUgPSAJCW9wdGljb25fdGhyb3R0bGUsCiAJLnVudGhyb3R0bGUgPQkJb3B0aWNvbl91bnRocm90dGxlLAorCS5pb2N0bCA9CQlvcHRpY29uX2lvY3RsLAorCS50aW9jbWdldCA9CQlvcHRpY29uX3Rpb2NtZ2V0LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb3B0aWNvbl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggYmZkMGI2OC4uZDU2MGMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtNjIsNiArNjIsOCBAQAogc3RhdGljIGludCAgb3B0aW9uX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CiBzdGF0aWMgaW50ICBvcHRpb25fc2VuZF9zZXR1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIG9wdGlvbl9zdXNwZW5kKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgIG9wdGlvbl9yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiAKIC8qIFZlbmRvciBhbmQgcHJvZHVjdCBJRHMgKi8KICNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JRAkJCTB4MEFGMApAQCAtODksNiArOTEsNyBAQAogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0dUCQkweDcwNDEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9FWAkJMHg3MDYxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfS09JX01PREVNCQkweDcxMDAKKyNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RNMzgwX01PREVNCQkweDcyMDEKIAogI2RlZmluZSBIVUFXRUlfVkVORE9SX0lECQkJMHgxMkQxCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0U2MDAJCQkweDEwMDEKQEAgLTE5Nyw2ICsyMDAsNyBAQAogLyogT1ZBVElPTiBQUk9EVUNUUyAqLwogI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9NQzcyNwkJMHg0MTAwCiAjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX01DOTUwRAkJMHg0NDAwCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1U3MjcJCTB4NTAxMAogCiAvKiBGVVRVUkUgTk9WQVRFTCBQUk9EVUNUUyAqLwogI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FVkRPX0ZVTExTUEVFRAkwWDYwMDAKQEAgLTI4OCwxMyArMjkyLDEzIEBACiAKIC8qIFpURSBQUk9EVUNUUyAqLwogI2RlZmluZSBaVEVfVkVORE9SX0lECQkJCTB4MTlkMgorI2RlZmluZSBaVEVfUFJPRFVDVF9NRjYyMgkJCTB4MDAwMQogI2RlZmluZSBaVEVfUFJPRFVDVF9NRjYyOAkJCTB4MDAxNQogI2RlZmluZSBaVEVfUFJPRFVDVF9NRjYyNgkJCTB4MDAzMQogI2RlZmluZSBaVEVfUFJPRFVDVF9DRE1BX1RFQ0gJCQkweGZmZmUKIAotLyogRXJpY3Nzb24gcHJvZHVjdHMgKi8KLSNkZWZpbmUgRVJJQ1NTT05fVkVORE9SX0lECQkJMHgwYmRiCi0jZGVmaW5lIEVSSUNTU09OX1BST0RVQ1RfRjM1MDdHCQkJMHgxOTAwCisjZGVmaW5lIEJFTlFfVkVORE9SX0lECQkJCTB4MDRhNQorI2RlZmluZSBCRU5RX1BST0RVQ1RfSDEwCQkJMHg0MDY4CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCkBAIC0zMjEsNiArMzI1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9HVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9FWCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTU9ERU0pIH0sCisJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0dUTTM4MF9NT0RFTSkgfSwKIAl7IFVTQl9ERVZJQ0UoUVVBTlRBX1ZFTkRPUl9JRCwgUVVBTlRBX1BST0RVQ1RfUTEwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoUVVBTlRBX1ZFTkRPUl9JRCwgUVVBTlRBX1BST0RVQ1RfUTExMSkgfSwKIAl7IFVTQl9ERVZJQ0UoUVVBTlRBX1ZFTkRPUl9JRCwgUVVBTlRBX1BST0RVQ1RfR0xYKSB9LApAQCAtNDExLDYgKzQxNiw3IEBACiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VVODcwRCkgfSwgLyogTm92YXRlbCBFVTg1MEQvRVU4NjBEL0VVODcwRCAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9NQzk1MEQpIH0sIC8qIE5vdmF0ZWwgTUM5MzBEL01DOTUwRCAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9NQzcyNykgfSwgLyogTm92YXRlbCBNQzcyNy9VNzI3L1VTQjcyNyAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzI3KSB9LCAvKiBOb3ZhdGVsIE1DNzI3L1U3MjcvVVNCNzI3ICovCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VWRE9fRlVMTFNQRUVEKSB9LCAvKiBOb3ZhdGVsIEVWRE8gcHJvZHVjdCAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9IU1BBX0ZVTExTUEVFRCkgfSwgLyogTm92YXRlbCBIU1BBIHByb2R1Y3QgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRVZET19FTUJFRERFRF9GVUxMU1BFRUQpIH0sIC8qIE5vdmF0ZWwgRVZETyBFbWJlZGRlZCBwcm9kdWN0ICovCkBAIC00MzgsNyArNDQ0LDYgQEAKIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIERFTExfUFJPRFVDVF81NTIwX01JTklDQVJEX0NJTkdVTEFSKSB9LAkvKiBEZWxsIFdpcmVsZXNzIEhTRFBBIDU1MjAgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTg2MEQgKi8KIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIERFTExfUFJPRFVDVF81NTIwX01JTklDQVJEX0dFTkVSSUNfTCkgfSwJLyogRGVsbCBXaXJlbGVzcyBIU0RQQSA1NTIwICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTUyMF9NSU5JQ0FSRF9HRU5FUklDX0kpIH0sCS8qIERlbGwgV2lyZWxlc3MgNTUyMCBWb2RhIEkgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNEUEEpIE1pbmljYXJkICovCi0JeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxNDcpIH0sCQkJCQkvKiBEZWxsIFdpcmVsZXNzIDU1MzAgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNQQSkgTWluaS1DYXJkICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTczMF9NSU5JQ0FSRF9TUFJJTlQpIH0sCS8qIERlbGwgV2lyZWxlc3MgNTczMCBNb2JpbGUgQnJvYWRiYW5kIEVWRE8vSFNQQSBNaW5pLUNhcmQgKi8KIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIERFTExfUFJPRFVDVF81NzMwX01JTklDQVJEX1RFTFVTKSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU3MzAgTW9iaWxlIEJyb2FkYmFuZCBFVkRPL0hTUEEgTWluaS1DYXJkICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTczMF9NSU5JQ0FSRF9WWlcpIH0sIAkvKiBEZWxsIFdpcmVsZXNzIDU3MzAgTW9iaWxlIEJyb2FkYmFuZCBFVkRPL0hTUEEgTWluaS1DYXJkICovCkBAIC01MDYsMTAgKzUxMSwxMiBAQAogCXsgVVNCX0RFVklDRShRVUFMQ09NTV9WRU5ET1JfSUQsIDB4NjYxMyl9LCAvKiBPbmRhIEg2MDAvWlRFIE1GMzMwICovCiAJeyBVU0JfREVWSUNFKE1BWE9OX1ZFTkRPUl9JRCwgMHg2MjgwKSB9LCAvKiBCUDMtVVNCICYgQlAzLUVYVCBIU0RQQSAqLwogCXsgVVNCX0RFVklDRShURUxJVF9WRU5ET1JfSUQsIFRFTElUX1BST0RVQ1RfVUM4NjRFKSB9LAorCXsgVVNCX0RFVklDRShaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9NRjYyMikgfSwKIAl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfTUY2MjYpIH0sCiAJeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX01GNjI4KSB9LAogCXsgVVNCX0RFVklDRShaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9DRE1BX1RFQ0gpIH0sCi0JeyBVU0JfREVWSUNFKEVSSUNTU09OX1ZFTkRPUl9JRCwgRVJJQ1NTT05fUFJPRFVDVF9GMzUwN0cpIH0sCisJeyBVU0JfREVWSUNFKEJFTlFfVkVORE9SX0lELCBCRU5RX1BST0RVQ1RfSDEwKSB9LAorCXsgVVNCX0RFVklDRSgweDFkYTUsIDB4NDUxNSkgfSwgLyogQmVuUSBIMjAgKi8KIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgb3B0aW9uX2lkcyk7CkBAIC01MTgsNiArNTI1LDggQEAKIAkubmFtZSAgICAgICA9ICJvcHRpb24iLAogCS5wcm9iZSAgICAgID0gdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCAgICA9IHVzYl9zZXJpYWxfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IHVzYl9zZXJpYWxfcmVzdW1lLAogCS5pZF90YWJsZSAgID0gb3B0aW9uX2lkcywKIAkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKQEAgLTU0Niw2ICs1NTUsOCBAQAogCS5hdHRhY2ggICAgICAgICAgICA9IG9wdGlvbl9zdGFydHVwLAogCS5zaHV0ZG93biAgICAgICAgICA9IG9wdGlvbl9zaHV0ZG93biwKIAkucmVhZF9pbnRfY2FsbGJhY2sgPSBvcHRpb25faW5zdGF0X2NhbGxiYWNrLAorCS5zdXNwZW5kICAgICAgICAgICA9IG9wdGlvbl9zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgICAgICA9IG9wdGlvbl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IGRlYnVnOwpAQCAtODE2LDEwICs4MjcsMTAgQEAKIAkJCQlyZXFfcGt0LT5iUmVxdWVzdFR5cGUsIHJlcV9wa3QtPmJSZXF1ZXN0KTsKIAkJfQogCX0gZWxzZQotCQlkYmcoIiVzOiBlcnJvciAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQllcnIoIiVzOiBlcnJvciAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyBJUlEgZGF0YSAqLwotCWlmIChzdGF0dXMgIT0gLUVTSFVURE9XTikgeworCWlmIChzdGF0dXMgIT0gLUVTSFVURE9XTiAmJiBzdGF0dXMgIT0gLUVOT0VOVCkgewogCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAoZXJyKQpAQCAtODM4LDcgKzg0OSw2IEBACiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCiAJZm9yIChpID0gMDsgaSA8IE5fT1VUX1VSQjsgaSsrKSB7CiAJCXRoaXNfdXJiID0gcG9ydGRhdGEtPm91dF91cmJzW2ldOwogCQlpZiAodGhpc191cmIgJiYgIXRlc3RfYml0KGksICZwb3J0ZGF0YS0+b3V0X2J1c3kpKQpAQCAtMTEwMCwxNCArMTExMCwxMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBvcHRpb25fc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIHN0b3BfcmVhZF93cml0ZV91cmJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IGksIGo7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOwotCiAJLyogU3RvcCByZWFkaW5nL3dyaXRpbmcgdXJicyAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CkBAIC0xMTE3LDYgKzExMjUsMTcgQEAKIAkJZm9yIChqID0gMDsgaiA8IE5fT1VUX1VSQjsgaisrKQogCQkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5vdXRfdXJic1tqXSk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBvcHRpb25fc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlzdG9wX3JlYWRfd3JpdGVfdXJicyhzZXJpYWwpOwogCiAJLyogTm93IGZyZWUgdGhlbSAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CkBAIC0xMTQ3LDYgKzExNjYsNjYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgb3B0aW9uX3N1c3BlbmQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJZGJnKCIlcyBlbnRlcmVkIiwgX19mdW5jX18pOworCXN0b3BfcmVhZF93cml0ZV91cmJzKHNlcmlhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGVyciwgaSwgajsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisKKwlkYmcoIiVzIGVudGVyZWQiLCBfX2Z1bmNfXyk7CisJLyogZ2V0IHRoZSBpbnRlcnJ1cHQgVVJCcyByZXN1Ym1pdHRlZCB1bmNvbmRpdGlvbmFsbHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlpZiAoIXBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKKwkJCWRiZygiJXM6IE5vIGludGVycnVwdCBVUkIgZm9yIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfTk9JTyk7CisJCWRiZygiU3VibWl0dGVkIGludGVycnVwdCBVUkIgZm9yIHBvcnQgJWQgKHJlc3VsdCAlZCkiLCBpLCBlcnIpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZXJyKCIlczogRXJyb3IgJWQgZm9yIGludGVycnVwdCBVUkIgb2YgcG9ydCVkIiwKKwkJCQkgX19mdW5jX18sIGVyciwgaSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJLyogd2FsayBhbGwgcG9ydHMgKi8KKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKKworCQkvKiBza2lwIGNsb3NlZCBwb3J0cyAqLworCQlpZiAoIXBvcnQtPnBvcnQuY291bnQpIHsKKwkJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7IGorKykgeworCQkJdXJiID0gcG9ydGRhdGEtPmluX3VyYnNbal07CisJCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9OT0lPKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisJCQkJZXJyKCIlczogRXJyb3IgJWQgZm9yIGJ1bGsgVVJCICVkIiwKKwkJCQkJIF9fZnVuY19fLCBlcnIsIGkpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisJfQorCXJldHVybiAwOworfQorCiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkNmIwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogUXVhbGNvbW0gU2VyaWFsIFVTQiBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKGMpIDIwMDggUVVBTENPTU0gSW5jb3Jwb3JhdGVkLgorICoJQ29weXJpZ2h0IChjKSAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKglDb3B5cmlnaHQgKGMpIDIwMDkgTm92ZWxsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUXVhbGNvbW0gSW5jIgorI2RlZmluZSBEUklWRVJfREVTQyAiUXVhbGNvbW0gVVNCIFNlcmlhbCBkcml2ZXIiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjExKX0sCS8qIEFjZXIgR29iaSBRREwgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMTIpfSwJLyogQWNlciBHb2JpIE1vZGVtIERldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNmMCwgMHgxZjFkKX0sCS8qIEhQIHVuMjQwMCBHb2JpIE1vZGVtIERldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNmMCwgMHgyMDFkKX0sCS8qIEhQIHVuMjQwMCBHb2JpIFFETCBEZXZpY2UgKi8KKwl7IH0JCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcWNkcml2ZXIgPSB7CisJLm5hbWUJCQk9ICJxY3NlcmlhbCIsCisJLnByb2JlCQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0CQk9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJCT0gaWRfdGFibGUsCisJLnN1c3BlbmQJCT0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUJCQk9IHVzYl9zZXJpYWxfcmVzdW1lLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZAk9IHRydWUsCit9OworCitzdGF0aWMgaW50IHFjcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXR2YWwgPSAtRU5PREVWOworCV9fdTggbmludGY7CisJX191OCBpZm51bTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwluaW50ZiA9IHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7CisJZGJnKCJOdW0gSW50ZXJmYWNlcyA9ICVkIiwgbmludGYpOworCWlmbnVtID0gc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJZGJnKCJUaGlzIEludGVyZmFjZSA9ICVkIiwgaWZudW0pOworCisJc3dpdGNoIChuaW50ZikgeworCWNhc2UgMToKKwkJLyogUURMIG1vZGUgKi8KKwkJaWYgKHNlcmlhbC0+aW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyA9PSAyKSB7CisJCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmOworCisJCQlpbnRmID0gJnNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nWzFdOworCQkJaWYgKGludGYtPmRlc2MuYk51bUVuZHBvaW50cyA9PSAyKSB7CisJCQkJaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX2luKCZpbnRmLT5lbmRwb2ludFswXS5kZXNjKSAmJgorCQkJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoJmludGYtPmVuZHBvaW50WzFdLmRlc2MpKSB7CisJCQkJCWRiZygiUURMIHBvcnQgZm91bmQiKTsKKwkJCQkJcmV0dmFsID0gdXNiX3NldF9pbnRlcmZhY2Uoc2VyaWFsLT5kZXYsIGlmbnVtLCAxKTsKKwkJCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCQkJIkNvdWxkIG5vdCBzZXQgaW50ZXJmYWNlLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlyZXR2YWwpOworCQkJCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCQkJfQorCQkJCQlyZXR1cm4gcmV0dmFsOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgNDoKKwkJLyogQ29tcG9zaXRlIG1vZGUgKi8KKwkJaWYgKGlmbnVtID09IDIpIHsKKwkJCWRiZygiTW9kZW0gcG9ydCBmb3VuZCIpOworCQkJcmV0dmFsID0gdXNiX3NldF9pbnRlcmZhY2Uoc2VyaWFsLT5kZXYsIGlmbnVtLCAwKTsKKwkJCWlmIChyZXR2YWwgPCAwKSB7CisJCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCQkJIkNvdWxkIG5vdCBzZXQgaW50ZXJmYWNlLCBlcnJvciAlZFxuIiwKKwkJCQkJcmV0dmFsKTsKKwkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJfQorCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkidW5rbm93biBudW1iZXIgb2YgaW50ZXJmYWNlczogJWRcbiIsIG5pbnRmKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBxY2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgICAgID0gVEhJU19NT0RVTEUsCisJCS5uYW1lICAgICAgPSAicWNzZXJpYWwiLAorCX0sCisJLmRlc2NyaXB0aW9uICAgICAgICAgPSAiUXVhbGNvbW0gVVNCIG1vZGVtIiwKKwkuaWRfdGFibGUgICAgICAgICAgICA9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyICAgICAgICAgID0gJnFjZHJpdmVyLAorCS5udW1fcG9ydHMgICAgICAgICAgID0gMSwKKwkucHJvYmUgICAgICAgICAgICAgICA9IHFjcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBxY2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmcWNkZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnFjZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcWNkZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcWNleGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnFjZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnFjZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQocWNpbml0KTsKK21vZHVsZV9leGl0KHFjZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiM2NiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBTeW1ib2wgVVNCIGJhcmNvZGUgdG8gc2VyaWFsIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5vdmVsbCBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRSgweDA1ZTAsIDB4MDYwMCkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGRldmljZSBpbmZvcm1hdGlvbiAqLworc3RydWN0IHN5bWJvbF9wcml2YXRlIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJdW5zaWduZWQgY2hhciAqaW50X2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICppbnRfdXJiOworCWludCBidWZmZXJfc2l6ZTsKKwl1OCBiSW50ZXJ2YWw7CisJdTggaW50X2FkZHJlc3M7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBwcm90ZWN0cyB0aGUgZm9sbG93aW5nIGZsYWdzICovCisJYm9vbCB0aHJvdHRsZWQ7CisJYm9vbCBhY3R1YWxseV90aHJvdHRsZWQ7CisJYm9vbCBydHM7Cit9OworCitzdGF0aWMgdm9pZCBzeW1ib2xfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBwcml2LT5wb3J0OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCByZXN1bHQ7CisJaW50IGF2YWlsYWJsZV9yb29tID0gMDsKKwlpbnQgZGF0YV9sZW5ndGg7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkgICAgICBkYXRhKTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAxKSB7CisJCWRhdGFfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMTsKKworCQkvKgorCQkgKiBEYXRhIGZyb20gdGhlIGRldmljZSBjb21lcyB3aXRoIGEgMSBieXRlIGhlYWRlcjoKKwkJICoKKwkJICogPHNpemUgb2YgZGF0YT5kYXRhLi4uCisJCSAqIAlUaGlzIGlzIHJlYWwgZGF0YSB0byBiZSBzZW50IHRvIHRoZSB0dHkgbGF5ZXIKKwkJICogd2UgcHJldHR5IG11Y2gganVzdCBpZ25vcmUgdGhlIHNpemUgYW5kIHNlbmQgZXZlcnl0aGluZworCQkgKiBlbHNlIHRvIHRoZSB0dHkgbGF5ZXIuCisJCSAqLworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJYXZhaWxhYmxlX3Jvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksCisJCQkJCQkJZGF0YV9sZW5ndGgpOworCQkJaWYgKGF2YWlsYWJsZV9yb29tKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksICZkYXRhWzFdLAorCQkJCQkJICAgICAgIGF2YWlsYWJsZV9yb29tKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCisJCQkiSW1wcm9wZXIgYW1tb3VudCBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSwgIgorCQkJIiVkIGJ5dGVzIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9CisKK2V4aXQ6CisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCBpZiB3ZSBzaG91bGQgKi8KKwlpZiAoIXByaXYtPnRocm90dGxlZCkgeworCQl1c2JfZmlsbF9pbnRfdXJiKHByaXYtPmludF91cmIsIHByaXYtPnVkZXYsCisJCQkJIHVzYl9yY3ZpbnRwaXBlKHByaXYtPnVkZXYsCisJCQkJIAkJcHJpdi0+aW50X2FkZHJlc3MpLAorCQkJCSBwcml2LT5pbnRfYnVmZmVyLCBwcml2LT5idWZmZXJfc2l6ZSwKKwkJCQkgc3ltYm9sX2ludF9jYWxsYmFjaywgcHJpdiwgcHJpdi0+YkludGVydmFsKTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkgICAgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfSBlbHNlCisJCXByaXYtPmFjdHVhbGx5X3Rocm90dGxlZCA9IHRydWU7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworfQorCitzdGF0aWMgaW50IHN5bWJvbF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnRocm90dGxlZCA9IGZhbHNlOworCXByaXYtPmFjdHVhbGx5X3Rocm90dGxlZCA9IGZhbHNlOworCXByaXYtPnBvcnQgPSBwb3J0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogRm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzIHRoZSBkYXRhCisJICogdGhyb3VnaCwgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlCisJICogd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4KKwkgKi8KKwlpZiAodHR5KQorCQl0dHktPmxvd19sYXRlbmN5ID0gMTsKKworCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJdXNiX2ZpbGxfaW50X3VyYihwcml2LT5pbnRfdXJiLCBwcml2LT51ZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKHByaXYtPnVkZXYsIHByaXYtPmludF9hZGRyZXNzKSwKKwkJCSBwcml2LT5pbnRfYnVmZmVyLCBwcml2LT5idWZmZXJfc2l6ZSwKKwkJCSBzeW1ib2xfaW50X2NhbGxiYWNrLCBwcml2LCBwcml2LT5iSW50ZXJ2YWwpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBzaHV0ZG93biBvdXIgdXJicyAqLworCXVzYl9raWxsX3VyYihwcml2LT5pbnRfdXJiKTsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHN5bWJvbF91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnRocm90dGxlZCA9IGZhbHNlOworCXByaXYtPmFjdHVhbGx5X3Rocm90dGxlZCA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXByaXYtPmludF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKK30KKworc3RhdGljIGludCBzeW1ib2xfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcG9ydC0+ZGV2OworCisJLyoKKwkgKiBSaWdodCBub3cgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29tbWFuZHMKKwkgKiBtb3N0IHVzZXJzcGFjZSB0b29scyB3YW50IHRvIHNlZSBmb3IgdGhpcyBkcml2ZXIsCisJICogc28ganVzdCBsb2cgdGhlIHRoaW5ncy4KKwkgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ1NFUkdFVExTUjoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IFRJT0NTRVJHRVRMU1JcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ0dTRVJJQUxcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NNSVdBSVQ6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DTUlXQUlUXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IFRJT0NHSUNPVU5UXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9pbmZvKGRldiwgIiVzOiB1bmtub3duICglZClcbiIsIF9fZnVuY19fLCBjbWQpOworCX0KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IHN5bWJvbF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcG9ydC0+ZGV2OworCisJLyogVE9ETyAqLworCS8qIHByb2JhYmx5IGp1c3QgbmVlZCB0byBzaGFkb3cgd2hhdGV2ZXIgd2FzIHNlbnQgdG8gdXMgaGVyZSAqLworCWRldl9pbmZvKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisKKwkvKiBUT0RPICovCisJLyogcHJvYmFibHkganVzdCBuZWVkIHRvIHNoYWRvdyB3aGF0ZXZlciB3YXMgc2VudCB0byB1cyBoZXJlICovCisJZGV2X2luZm8oZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW1ib2xfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmOworCWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWJvb2wgaW50X2luX2ZvdW5kID0gZmFsc2U7CisKKwkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXByaXYtPnNlcmlhbCA9IHNlcmlhbDsKKwlwcml2LT5wb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXByaXYtPnVkZXYgPSBzZXJpYWwtPmRldjsKKworCS8qIGZpbmQgb3VyIGludGVycnVwdCBlbmRwb2ludCAqLworCWludGYgPSBzZXJpYWwtPmludGVyZmFjZS0+YWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaW50Zi0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKworCQllbmRwb2ludCA9ICZpbnRmLT5lbmRwb2ludFtpXS5kZXNjOworCQlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKQorCQkJY29udGludWU7CisKKwkJcHJpdi0+aW50X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+aW50X3VyYikgeworCQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcHJpdi0+YnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpICogMjsKKwkJcHJpdi0+aW50X2J1ZmZlciA9IGttYWxsb2MocHJpdi0+YnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYtPmludF9idWZmZXIpIHsKKwkJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXByaXYtPmludF9hZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCXByaXYtPmJJbnRlcnZhbCA9IGVuZHBvaW50LT5iSW50ZXJ2YWw7CisKKwkJLyogc2V0IHVwIG91ciBpbnQgdXJiICovCisJCXVzYl9maWxsX2ludF91cmIocHJpdi0+aW50X3VyYiwgcHJpdi0+dWRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUocHJpdi0+dWRldiwKKwkJCQkgCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJIHByaXYtPmludF9idWZmZXIsIHByaXYtPmJ1ZmZlcl9zaXplLAorCQkJCSBzeW1ib2xfaW50X2NhbGxiYWNrLCBwcml2LCBwcml2LT5iSW50ZXJ2YWwpOworCisJCWludF9pbl9mb3VuZCA9IHRydWU7CisJCWJyZWFrOworCQl9CisKKwlpZiAoIWludF9pbl9mb3VuZCkgeworCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsCisJCQkiRXJyb3IgLSB0aGUgcHJvcGVyIGVuZHBvaW50cyB3ZXJlIG5vdCBmb3VuZCFcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBwcml2KTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJdXNiX2ZyZWVfdXJiKHByaXYtPmludF91cmIpOworCWtmcmVlKHByaXYtPmludF9idWZmZXIpOworCWtmcmVlKHByaXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHN5bWJvbF9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwl1c2Jfa2lsbF91cmIocHJpdi0+aW50X3VyYik7CisJdXNiX2ZyZWVfdXJiKHByaXYtPmludF91cmIpOworCWtmcmVlKHByaXYtPmludF9idWZmZXIpOworCWtmcmVlKHByaXYpOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHN5bWJvbF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJCSJzeW1ib2wiLAorCS5wcm9iZSA9CQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JCXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgc3ltYm9sX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJInN5bWJvbCIsCisJfSwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPSAJCSZzeW1ib2xfZHJpdmVyLAorCS5udW1fcG9ydHMgPQkJMSwKKwkuYXR0YWNoID0JCXN5bWJvbF9zdGFydHVwLAorCS5vcGVuID0JCQlzeW1ib2xfb3BlbiwKKwkuY2xvc2UgPQkJc3ltYm9sX2Nsb3NlLAorCS5zaHV0ZG93biA9CQlzeW1ib2xfc2h1dGRvd24sCisJLnRocm90dGxlID0gCQlzeW1ib2xfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJc3ltYm9sX3VudGhyb3R0bGUsCisJLmlvY3RsID0gCQlzeW1ib2xfaW9jdGwsCisJLnRpb2NtZ2V0ID0gCQlzeW1ib2xfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gCQlzeW1ib2xfdGlvY21zZXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzeW1ib2xfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZzeW1ib2xfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc3ltYm9sX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZzeW1ib2xfZGV2aWNlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3ltYm9sX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc3ltYm9sX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZzeW1ib2xfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoc3ltYm9sX2luaXQpOworbW9kdWxlX2V4aXQoc3ltYm9sX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggY2ZjZmQ1YS4uNzQyYTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0yMDQsNiArMjA0LDExIEBACiAJCWdvdG8gYmFpbG91dF9rcmVmX3B1dDsKIAl9CiAKKwlpZiAocG9ydC0+c2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBiYWlsb3V0X2tyZWZfcHV0OworCX0KKwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnBvcnQtPm11dGV4KSkgewogCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CiAJCWdvdG8gYmFpbG91dF9rcmVmX3B1dDsKQEAgLTEwNjcsNiArMTA3Miw4IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAlpbnQgaSwgciA9IDA7CiAKKwlzZXJpYWwtPnN1c3BlbmRpbmcgPSAxOworCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJaWYgKHBvcnQpCkBAIC0xMDgzLDEwICsxMDkwLDE1IEBACiBpbnQgdXNiX3NlcmlhbF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IHJ2OwogCisJc2VyaWFsLT5zdXNwZW5kaW5nID0gMDsKIAlpZiAoc2VyaWFsLT50eXBlLT5yZXN1bWUpCi0JCXJldHVybiBzZXJpYWwtPnR5cGUtPnJlc3VtZShzZXJpYWwpOwotCXJldHVybiAwOworCQlydiA9IHNlcmlhbC0+dHlwZS0+cmVzdW1lKHNlcmlhbCk7CisJZWxzZQorCQlydiA9IHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUoc2VyaWFsKTsKKworCXJldHVybiBydjsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX3NlcmlhbF9yZXN1bWUpOwogCkBAIC0xMjIyLDcgKzEyMzQsNiBAQAogCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCByZWFkX2J1bGtfY2FsbGJhY2spOwogCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCB3cml0ZV9idWxrX2NhbGxiYWNrKTsKIAlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgc2h1dGRvd24pOwotCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCByZXN1bWUpOwogfQogCiBpbnQgdXNiX3NlcmlhbF9yZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRyaXZlcikKQEAgLTEyMzAsNiArMTI0MSw5IEBACiAJLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBCS0wgaGVsZCAqLwogCWludCByZXR2YWw7CiAKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJZml4dXBfZ2VuZXJpYyhkcml2ZXIpOwogCiAJaWYgKCFkcml2ZXItPmRlc2NyaXB0aW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCmluZGV4IDlkZjY4ODcuLjhhMzcyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKQEAgLTIsOCArMiw4IEBACiAjIFVTQiBTdG9yYWdlIGRyaXZlciBjb25maWd1cmF0aW9uCiAjCiAKLWNvbW1lbnQgIk5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7IgotY29tbWVudCAic2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24iCitjb21tZW50ICJOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IgorY29tbWVudCAiYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8iCiAJZGVwZW5kcyBvbiBVU0IKIAogY29uZmlnIFVTQl9TVE9SQUdFCkBAIC0zMiwyMSArMzIsMjUgQEAKIAkgIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLgogCiBjb25maWcgVVNCX1NUT1JBR0VfREFUQUZBQgotCWJvb2wgIkRhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBjZXJ0YWluIERhdGFmYWIgQ29tcGFjdEZsYXNoIHJlYWRlcnMuCiAJICBEYXRhZmFiIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LmRhdGFmYWJ1c2EuY29tLz4uCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1kYXRhZmFiLgorCiBjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTQotCWJvb2wgIkZyZWVjb20gVVNCL0FUQVBJIEJyaWRnZSBzdXBwb3J0IgorCXRyaXN0YXRlICJGcmVlY29tIFVTQi9BVEFQSSBCcmlkZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIEZyZWVjb20gVVNCIHRvIElERS9BVEFQSSBhZGFwdG9yLgogCSAgRnJlZWNvbSBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5mcmVlY29tLmRlLz4uCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1mcmVlY29tLgorCiBjb25maWcgVVNCX1NUT1JBR0VfSVNEMjAwCi0JYm9vbCAiSVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0IgorCXRyaXN0YXRlICJJU0QtMjAwIFVTQi9BVEEgQnJpZGdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFVTQiBNYXNzIFN0b3JlIGRldmljZXMgYmFzZWQKQEAgLTYxLDggKzY1LDEwIEBACiAJICAtIEN5USd2ZSBDUTgwNjBBIENEUlcgZHJpdmUKIAkgIC0gUGxhbmV4IGVYdHJlbWUgRHJpdmUgUlgtMjVIVSBVU0ItSURFIGNhYmxlIChub3QgbW9kZWwgUlgtMjVVKQogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtaXNkMjAwLgorCiBjb25maWcgVVNCX1NUT1JBR0VfVVNCQVQKLQlib29sICJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCBzdG9yYWdlIGRldmljZXMKQEAgLTgyLDMwICs4OCwzOCBAQAogCSAgLSBSQ0EgTFlSQSBNUDMgcG9ydGFibGUKIAkgIC0gU2FuZGlzayBJbWFnZU1hdGUgU0REUi0wNWIKIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLXVzYmF0LgorCiBjb25maWcgVVNCX1NUT1JBR0VfU0REUjA5Ci0JYm9vbCAiU2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnQiCisJdHJpc3RhdGUgIlNhbkRpc2sgU0REUi0wOSAoYW5kIG90aGVyIFNtYXJ0TWVkaWEsIGluY2x1ZGluZyBEUENNKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFNhbmRpc2sgU0REUi0wOQogCSAgU21hcnRNZWRpYSByZWFkZXIgaW4gdGhlIFVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyLgogCSAgQWxzbyB3b3JrcyBmb3IgdGhlIE1pY3JvdGVjaCBaaW8hIENvbXBhY3RGbGFzaC9TbWFydE1lZGlhIHJlYWRlci4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLXNkZHIwOS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX1NERFI1NQotCWJvb2wgIlNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHN1cHBvcnQiCisJdHJpc3RhdGUgIlNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgU2FuZGlzayBTRERSLTU1CiAJICBTbWFydE1lZGlhIHJlYWRlciBpbiB0aGUgVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1zZGRyNTUuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9KVU1QU0hPVAotCWJvb2wgIkxleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyIgorCXRyaXN0YXRlICJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlciIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdAogCSAgVVNCIENvbXBhY3RGbGFzaCByZWFkZXIuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1qdW1wc2hvdC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQQotCWJvb2wgIk9seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiT2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIE9seW1wdXMgTUFVU0ItMTAKQEAgLTExNCw4ICsxMjgsMTAgQEAKIAkgIFRoZXNlIGRldmljZXMgYXJlIGJhc2VkIG9uIHRoZSBBbGF1ZGEgY2hpcCBhbmQgc3VwcG9ydCBib3RoCiAJICBYRCBhbmQgU21hcnRNZWRpYSBjYXJkcy4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWFsYXVkYS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX09ORVRPVUNICi0JYm9vbCAiU3VwcG9ydCBPbmVUb3VjaCBCdXR0b24gb24gTWF4dG9yIEhhcmQgRHJpdmVzIgorCXRyaXN0YXRlICJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXMiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWRlcGVuZHMgb24gSU5QVVQ9eSB8fCBJTlBVVD1VU0JfU1RPUkFHRQogCWhlbHAKQEAgLTEyNyw4ICsxNDMsMTAgQEAKIAkgIHRoaXMgaW5wdXQgaW4gYW55IGtleWJpbmRpbmcgc29mdHdhcmUuIChlLmcuIGdub21lJ3Mga2V5Ym9hcmQgc2hvcnQtCiAJICBjdXRzKQogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtb25ldG91Y2guCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9LQVJNQQotCWJvb2wgIlN1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXIiCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXIiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgUmlvIEthcm1hCkBAIC0xMzksOCArMTU3LDEwIEBACiAJICBvbiB0aGUgcmVzdWx0aW5nIHNjc2kgZGV2aWNlIG5vZGUgcmV0dXJucyB0aGUgS2FybWEgdG8gbm9ybWFsCiAJICBvcGVyYXRpb24uCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1rYXJtYS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IKLQlib29sICJTQVQgZW11bGF0aW9uIG9uIEN5cHJlc3MgVVNCL0FUQSBCcmlkZ2Ugd2l0aCBBVEFDQiIKKwl0cmlzdGF0ZSAiU0FUIGVtdWxhdGlvbiBvbiBDeXByZXNzIFVTQi9BVEEgQnJpZGdlIHdpdGggQVRBQ0IiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFNBVCAoYXRhIHBhc3MgdGhyb3VnaCkgb24gZGV2aWNlcyBiYXNlZApAQCAtMTUwLDYgKzE3MCw4IEBACiAJICBJZiB5b3Ugc2F5IG5vIGhlcmUgeW91ciBkZXZpY2Ugd2lsbCBzdGlsbCB3b3JrIHdpdGggdGhlIHN0YW5kYXJkIHVzYgogCSAgbWFzcyBzdG9yYWdlIGNsYXNzLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtY3lwcmVzcy4KKwogY29uZmlnIFVTQl9MSUJVU1VBTAogCWJvb2wgIlRoZSBzaGFyZWQgdGFibGUgb2YgY29tbW9uIChvciB1c3VhbCkgc3RvcmFnZSBkZXZpY2VzIgogCWRlcGVuZHMgb24gVVNCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQppbmRleCBiMzIwNjkzLi41YmU1NGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKQEAgLTEwLDIxICsxMCwzNiBAQAogb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFKQkrPSB1c2Itc3RvcmFnZS5vCiAKIHVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRykJKz0gZGVidWcubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKQkrPSBzaHV0dGxlX3VzYmF0Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkpCSs9IHNkZHIwOS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KQkrPSBzZGRyNTUubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00pCSs9IGZyZWVjb20ubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkJKz0gaXNkMjAwLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCKQkrPSBkYXRhZmFiLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCkJKz0ganVtcHNob3QubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkJKz0gYWxhdWRhLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkJKz0gb25ldG91Y2gubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BKQkrPSBrYXJtYS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgKz0gY3lwcmVzc19hdGFjYi5vCiAKIHVzYi1zdG9yYWdlLW9ianMgOj0Jc2NzaWdsdWUubyBwcm90b2NvbC5vIHRyYW5zcG9ydC5vIHVzYi5vIFwKIAkJCWluaXRpYWxpemVycy5vIHNpZXJyYV9tcy5vIG9wdGlvbl9tcy5vICQodXNiLXN0b3JhZ2Utb2JqLXkpCiAKLWlmbmVxICgkKENPTkZJR19VU0JfTElCVVNVQUwpLCkKLQlvYmotJChDT05GSUdfVVNCKQkrPSBsaWJ1c3VhbC5vCitpZmVxICgkKENPTkZJR19VU0JfTElCVVNVQUwpLCkKKwl1c2Itc3RvcmFnZS1vYmpzCSs9IHVzdWFsLXRhYmxlcy5vCitlbHNlCisJb2JqLSQoQ09ORklHX1VTQikJKz0gbGlidXN1YWwubyB1c3VhbC10YWJsZXMubwogZW5kaWYKKworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkJKz0gdW1zLWFsYXVkYS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgKz0gdW1zLWN5cHJlc3Mubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpCSs9IHVtcy1kYXRhZmFiLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKQkrPSB1bXMtZnJlZWNvbS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwKQkrPSB1bXMtaXNkMjAwLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCkJKz0gdW1zLWp1bXBzaG90Lm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSkJCSs9IHVtcy1rYXJtYS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpCSs9IHVtcy1vbmV0b3VjaC5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KQkrPSB1bXMtc2RkcjA5Lm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUpCSs9IHVtcy1zZGRyNTUubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKQkJKz0gdW1zLXVzYmF0Lm8KKwordW1zLWFsYXVkYS1vYmpzCQk6PSBhbGF1ZGEubwordW1zLWN5cHJlc3Mtb2Jqcwk6PSBjeXByZXNzX2F0YWNiLm8KK3Vtcy1kYXRhZmFiLW9ianMJOj0gZGF0YWZhYi5vCit1bXMtZnJlZWNvbS1vYmpzCTo9IGZyZWVjb20ubwordW1zLWlzZDIwMC1vYmpzCQk6PSBpc2QyMDAubwordW1zLWp1bXBzaG90LW9ianMJOj0ganVtcHNob3QubwordW1zLWthcm1hLW9ianMJCTo9IGthcm1hLm8KK3Vtcy1vbmV0b3VjaC1vYmpzCTo9IG9uZXRvdWNoLm8KK3Vtcy1zZGRyMDktb2JqcwkJOj0gc2RkcjA5Lm8KK3Vtcy1zZGRyNTUtb2JqcwkJOj0gc2RkcjU1Lm8KK3Vtcy11c2JhdC1vYmpzCQk6PSBzaHV0dGxlX3VzYmF0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCmluZGV4IDhkMzcxMWEuLjY3ZWRjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwpAQCAtMzEsNiArMzEsOCBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CkBAIC0zOSw3ICs0MSw3OSBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJhbGF1ZGEuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFsYXVkYS1iYXNlZCBjYXJkIHJlYWRlcnMiKTsKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBTdGF0dXMgYnl0ZXMKKyAqLworI2RlZmluZSBBTEFVREFfU1RBVFVTX0VSUk9SCQkweDAxCisjZGVmaW5lIEFMQVVEQV9TVEFUVVNfUkVBRFkJCTB4NDAKKworLyoKKyAqIENvbnRyb2wgb3Bjb2RlcyAoZm9yIHJlcXVlc3QgZmllbGQpCisgKi8KKyNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TVEFUVVMJMHgwOAorI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NUQVRVUwkweDk4CisjZGVmaW5lIEFMQVVEQV9BQ0tfWERfTUVESUFfQ0hBTkdFCTB4MGEKKyNkZWZpbmUgQUxBVURBX0FDS19TTV9NRURJQV9DSEFOR0UJMHg5YQorI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NJRwkJMHg4NgorI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NJRwkJMHg5NgorCisvKgorICogQnVsayBjb21tYW5kIGlkZW50aXR5IChieXRlIDApCisgKi8KKyNkZWZpbmUgQUxBVURBX0JVTEtfQ01ECQkJMHg0MAorCisvKgorICogQnVsayBvcGNvZGVzIChieXRlIDEpCisgKi8KKyNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1JFRFVfREFUQQkweDg1CisjZGVmaW5lIEFMQVVEQV9CVUxLX1JFQURfQkxPQ0sJCTB4OTQKKyNkZWZpbmUgQUxBVURBX0JVTEtfRVJBU0VfQkxPQ0sJCTB4YTMKKyNkZWZpbmUgQUxBVURBX0JVTEtfV1JJVEVfQkxPQ0sJCTB4YjQKKyNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1NUQVRVUzIJCTB4YjcKKyNkZWZpbmUgQUxBVURBX0JVTEtfUkVTRVRfTUVESUEJCTB4ZTAKKworLyoKKyAqIFBvcnQgdG8gb3BlcmF0ZSBvbiAoYnl0ZSA4KQorICovCisjZGVmaW5lIEFMQVVEQV9QT1JUX1hECQkJMHgwMAorI2RlZmluZSBBTEFVREFfUE9SVF9TTQkJCTB4MDEKKworLyoKKyAqIExCQSBhbmQgUEJBIGFyZSB1bnNpZ25lZCBpbnRzLiBTcGVjaWFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBVTkRFRiAgICAweGZmZmYKKyNkZWZpbmUgU1BBUkUgICAgMHhmZmZlCisjZGVmaW5lIFVOVVNBQkxFIDB4ZmZmZAorCitzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8geworCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7CQkvKiB0b3RhbCBtZWRpYSBzaXplIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IHBhZ2VzaXplOwkJLyogcGFnZSBzaXplIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZTsJCS8qIG51bWJlciBvZiBwYWdlcyBwZXIgYmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgdXpvbmVzaXplOwkJLyogbnVtYmVyIG9mIHVzYWJsZSBibG9ja3MgcGVyIHpvbmUgKi8KKwl1bnNpZ25lZCBpbnQgem9uZXNpemU7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHBlciB6b25lICovCisJdW5zaWduZWQgaW50IGJsb2NrbWFzazsJCS8qIG1hc2sgdG8gZ2V0IHBhZ2UgZnJvbSBhZGRyZXNzICovCisKKwl1bnNpZ25lZCBjaGFyIHBhZ2VzaGlmdDsKKwl1bnNpZ25lZCBjaGFyIGJsb2Nrc2hpZnQ7CisJdW5zaWduZWQgY2hhciB6b25lc2hpZnQ7CisKKwl1MTYgKipsYmFfdG9fcGJhOwkJLyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi8KKwl1MTYgKipwYmFfdG9fbGJhOwkJLyogcGh5c2ljYWwgdG8gbG9naWNhbCBibG9jayBtYXAgKi8KK307CisKK3N0cnVjdCBhbGF1ZGFfaW5mbyB7CisJc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHBvcnRbMl07CisJaW50IHdyX2VwOwkJCS8qIGVuZHBvaW50IHRvIHdyaXRlIGRhdGEgb3V0IG9mICovCisKKwl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCit9OwogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKTw8OCApICkKICNkZWZpbmUgTFNCX29mKHMpICgocykmMHhGRikKQEAgLTUyLDYgKzEyNiw0OCBAQAogI2RlZmluZSBQQkFfSEkocGJhKSAocGJhID4+IDMpCiAjZGVmaW5lIFBCQV9aT05FKHBiYSkgKHBiYSA+PiAxMSkKIAorc3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGFsYXVkYV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfYWxhdWRhLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhbGF1ZGFfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgYWxhdWRhX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9hbGF1ZGEuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiAvKgogICogTWVkaWEgaGFuZGxpbmcKICAqLwpAQCAtMzA3LDcgKzQyMyw4IEBACiAJCWRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOwogCW1lZGlhX2luZm8gPSBhbGF1ZGFfY2FyZF9maW5kX2lkKGRhdGFbMV0pOwogCWlmIChtZWRpYV9pbmZvID09IE5VTEwpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfaW5pdF9tZWRpYTogVW5yZWNvZ25pc2VkIG1lZGlhIHNpZ25hdHVyZTogIgorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiYWxhdWRhX2luaXRfbWVkaWE6IFVucmVjb2duaXNlZCBtZWRpYSBzaWduYXR1cmU6ICIKIAkJCSIlMDJYICUwMlggJTAyWCAlMDJYXG4iLAogCQkJZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CkBAIC01MTgsNyArNjM1LDggQEAKIAogCQkvKiBjaGVjayBldmVuIHBhcml0eSAqLwogCQlpZiAocGFyaXR5W2RhdGFbNl0gXiBkYXRhWzddXSkgewotCQkJcHJpbnRrKCJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiYWxhdWRhX3JlYWRfbWFwOiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCiAJCQkgICAgICAgIiAoJTAyWCAlMDJYKVxuIiwgaSwgZGF0YVs2XSwgZGF0YVs3XSk7CiAJCQlwYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CiAJCQljb250aW51ZTsKQEAgLTUzOCwxMyArNjU2LDE2IEBACiAJCSAqLwogCiAJCWlmIChsYmFfb2Zmc2V0ID49IHV6b25lc2l6ZSkgewotCQkJcHJpbnRrKCJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiYWxhdWRhX3JlYWRfbWFwOiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCiAJCQkgICAgICAgbGJhX3JlYWwsIGJsb2NrbnVtKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKGxiYV90b19wYmFbbGJhX29mZnNldF0gIT0gVU5ERUYpIHsKLQkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBMQkEgJWQgc2VlbiBmb3IgUEJBICVkIGFuZCAlZFxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiYWxhdWRhX3JlYWRfbWFwOiAiCisJCQkgICAgICAgIkxCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAogCQkJICAgICAgIGxiYV9yZWFsLCBsYmFfdG9fcGJhW2xiYV9vZmZzZXRdLCBibG9ja251bSk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNzEyLDEzICs4MzMsMTUgQEAKIAlpZiAocGJhID09IDEpIHsKIAkJLyogTWF5YmUgaXQgaXMgaW1wb3NzaWJsZSB0byB3cml0ZSB0byBQQkEgMS4KIAkJICAgRmFrZSBzdWNjZXNzLCBidXQgZG9uJ3QgZG8gYW55dGhpbmcuICovCi0JCXByaW50aygiYWxhdWRhX3dyaXRlX2xiYTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJhbGF1ZGFfd3JpdGVfbGJhOiBhdm9pZCB3cml0aW5nIHRvIHBiYSAxXG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogCX0KIAogCW5ld19wYmEgPSBhbGF1ZGFfZmluZF91bnVzZWRfcGJhKCZNRURJQV9JTkZPKHVzKSwgem9uZSk7CiAJaWYgKCFuZXdfcGJhKSB7Ci0JCXByaW50aygiYWxhdWRhX3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiYWxhdWRhX3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KIApAQCAtODE4LDcgKzk0MSw3IEBACiAJbGVuID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSkgKiAocGFnZXNpemUgKyA2NCk7CiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWxhdWRhX3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC05MTEsNyArMTAzNCw3IEBACiAJbGVuID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSkgKiBwYWdlc2l6ZTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KIApAQCAtOTIxLDcgKzEwNDQsNyBAQAogCSAqLwogCWJsb2NrYnVmZmVyID0ga21hbGxvYygocGFnZXNpemUgKyA2NCkgKiBibG9ja3NpemUsIEdGUF9OT0lPKTsKIAlpZiAoYmxvY2tidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlrZnJlZShidWZmZXIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KQEAgLTk5MSw3ICsxMTE0LDcgQEAKIC8qCiAgKiBJbml0aWFsaXplIGFsYXVkYV9pbmZvIHN0cnVjdCBhbmQgZmluZCB0aGUgZGF0YS13cml0ZSBlbmRwb2ludAogICovCi1pbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGFsYXVkYV9pbmZvICppbmZvOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHNldHRpbmcgPSB1cy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZzsKQEAgLTEwMTMsNyArMTEzNiw3IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQogCi1pbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy0+ZXh0cmE7CkBAIC0xMTIxLDMgKzEyNDQsNDggQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KIAorc3RhdGljIGludCBhbGF1ZGFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBhbGF1ZGFfdXNiX2lkcykgKyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiQWxhdWRhIENvbnRyb2wvQnVsayI7CisJdXMtPnRyYW5zcG9ydCA9IGFsYXVkYV90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWFsYXVkYSIsCisJLnByb2JlID0JYWxhdWRhX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWFsYXVkYV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbGF1ZGFfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmFsYXVkYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxhdWRhX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYWxhdWRhX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFsYXVkYV9pbml0KTsKK21vZHVsZV9leGl0KGFsYXVkYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzAwZjg3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgQWxhdWRhLWJhc2VkIGNhcmQgcmVhZGVycwotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAgKGMpIDIwMDUgRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4KLSAqCi0gKiBTZWUgYWxhdWRhLmMgZm9yIG1vcmUgZXhwbGFuYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX0FMQVVEQV9ICi0jZGVmaW5lIF9VU0JfQUxBVURBX0gKLQotLyoKLSAqIFN0YXR1cyBieXRlcwotICovCi0jZGVmaW5lIEFMQVVEQV9TVEFUVVNfRVJST1IJCTB4MDEKLSNkZWZpbmUgQUxBVURBX1NUQVRVU19SRUFEWQkJMHg0MAotCi0vKgotICogQ29udHJvbCBvcGNvZGVzIChmb3IgcmVxdWVzdCBmaWVsZCkKLSAqLwotI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NUQVRVUwkweDA4Ci0jZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU1RBVFVTCTB4OTgKLSNkZWZpbmUgQUxBVURBX0FDS19YRF9NRURJQV9DSEFOR0UJMHgwYQotI2RlZmluZSBBTEFVREFfQUNLX1NNX01FRElBX0NIQU5HRQkweDlhCi0jZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU0lHCQkweDg2Ci0jZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU0lHCQkweDk2Ci0KLS8qCi0gKiBCdWxrIGNvbW1hbmQgaWRlbnRpdHkgKGJ5dGUgMCkKLSAqLwotI2RlZmluZSBBTEFVREFfQlVMS19DTUQJCQkweDQwCi0KLS8qCi0gKiBCdWxrIG9wY29kZXMgKGJ5dGUgMSkKLSAqLwotI2RlZmluZSBBTEFVREFfQlVMS19HRVRfUkVEVV9EQVRBCTB4ODUKLSNkZWZpbmUgQUxBVURBX0JVTEtfUkVBRF9CTE9DSwkJMHg5NAotI2RlZmluZSBBTEFVREFfQlVMS19FUkFTRV9CTE9DSwkJMHhhMwotI2RlZmluZSBBTEFVREFfQlVMS19XUklURV9CTE9DSwkJMHhiNAotI2RlZmluZSBBTEFVREFfQlVMS19HRVRfU1RBVFVTMgkJMHhiNwotI2RlZmluZSBBTEFVREFfQlVMS19SRVNFVF9NRURJQQkJMHhlMAotCi0vKgotICogUG9ydCB0byBvcGVyYXRlIG9uIChieXRlIDgpCi0gKi8KLSNkZWZpbmUgQUxBVURBX1BPUlRfWEQJCQkweDAwCi0jZGVmaW5lIEFMQVVEQV9QT1JUX1NNCQkJMHgwMQotCi0vKgotICogTEJBIGFuZCBQQkEgYXJlIHVuc2lnbmVkIGludHMuIFNwZWNpYWwgdmFsdWVzLgotICovCi0jZGVmaW5lIFVOREVGICAgIDB4ZmZmZgotI2RlZmluZSBTUEFSRSAgICAweGZmZmUKLSNkZWZpbmUgVU5VU0FCTEUgMHhmZmZkCi0KLWludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gewotCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7CQkvKiB0b3RhbCBtZWRpYSBzaXplIGluIGJ5dGVzICovCi0JdW5zaWduZWQgaW50IHBhZ2VzaXplOwkJLyogcGFnZSBzaXplIGluIGJ5dGVzICovCi0JdW5zaWduZWQgaW50IGJsb2Nrc2l6ZTsJCS8qIG51bWJlciBvZiBwYWdlcyBwZXIgYmxvY2sgKi8KLQl1bnNpZ25lZCBpbnQgdXpvbmVzaXplOwkJLyogbnVtYmVyIG9mIHVzYWJsZSBibG9ja3MgcGVyIHpvbmUgKi8KLQl1bnNpZ25lZCBpbnQgem9uZXNpemU7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHBlciB6b25lICovCi0JdW5zaWduZWQgaW50IGJsb2NrbWFzazsJCS8qIG1hc2sgdG8gZ2V0IHBhZ2UgZnJvbSBhZGRyZXNzICovCi0KLQl1bnNpZ25lZCBjaGFyIHBhZ2VzaGlmdDsKLQl1bnNpZ25lZCBjaGFyIGJsb2Nrc2hpZnQ7Ci0JdW5zaWduZWQgY2hhciB6b25lc2hpZnQ7Ci0KLQl1MTYgKipsYmFfdG9fcGJhOwkJLyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi8KLQl1MTYgKipwYmFfdG9fbGJhOwkJLyogcGh5c2ljYWwgdG8gbG9naWNhbCBibG9jayBtYXAgKi8KLX07Ci0KLXN0cnVjdCBhbGF1ZGFfaW5mbyB7Ci0Jc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHBvcnRbMl07Ci0JaW50IHdyX2VwOwkJCS8qIGVuZHBvaW50IHRvIHdyaXRlIGRhdGEgb3V0IG9mICovCi0KLQl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKLQl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCi0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCi19OwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuYwppbmRleCA4OThlNjdkLi5jODQ0NzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuYwpAQCAtMTksNiArMTksNyBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CkBAIC0yOSw2ICszMCw0OSBAQAogI2luY2x1ZGUgInNjc2lnbHVlLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJTQVQgc3VwcG9ydCBmb3IgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZXMgd2l0aCBBVEFDQiIpOworTU9EVUxFX0FVVEhPUigiTWF0dGhpZXUgQ2FzdGV0IDxjYXN0ZXQubWF0dGhpZXVAZnJlZS5mcj4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgY3lwcmVzc191c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfY3lwcmVzcy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY3lwcmVzc191c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBjeXByZXNzX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9jeXByZXNzLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogLyoKICAqIEFUQUNCIGlzIGEgcHJvdG9jb2wgdXNlZCBvbiBjeXByZXNzIHVzYjwtPmF0YSBicmlkZ2UgdG8KICAqIHNlbmQgcmF3IEFUQSBjb21tYW5kIG92ZXIgbWFzcyBzdG9yYWdlCkBAIC0zNiw3ICs4MCw3IEBACiAgKiBNb3JlIGluZm8gdGhhdCBiZSBmb3VuZCBvbiBjeTdjNjgzMTBfOC5wZGYgYW5kIGN5N2M2ODMwMGNfOC5wZGYKICAqIGRhdGFzaGVldCBmcm9tIGN5cHJlc3MuY29tLgogICovCi12b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXVuc2lnbmVkIGNoYXIgc2F2ZV9jbW5kW01BWF9DT01NQU5EX1NJWkVdOwogCkBAIC0xMzMsMTkgKzE3NywxOCBAQAogCiAJCS8qIGJ1aWxkIHRoZSBjb21tYW5kIGZvcgogCQkgKiByZWFkaW5nIHRoZSBBVEEgcmVnaXN0ZXJzICovCi0JCXNjc2lfZWhfcHJlcF9jbW5kKHNyYiwgJnNlcywgTlVMTCwgMCwgMCk7Ci0JCXNyYi0+c2RiLmxlbmd0aCA9IHNpemVvZihyZWdzKTsKLQkJc2dfaW5pdF9vbmUoJnNlcy5zZW5zZV9zZ2wsIHJlZ3MsIHNyYi0+c2RiLmxlbmd0aCk7Ci0JCXNyYi0+c2RiLnRhYmxlLnNnbCA9ICZzZXMuc2Vuc2Vfc2dsOwotCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwotCQlzcmItPnNkYi50YWJsZS5uZW50cyA9IDE7CisJCXNjc2lfZWhfcHJlcF9jbW5kKHNyYiwgJnNlcywgTlVMTCwgMCwgc2l6ZW9mKHJlZ3MpKTsKKwogCQkvKiB3ZSB1c2UgdGhlIHNhbWUgY29tbWFuZCBhcyBiZWZvcmUsIGJ1dCB3ZSBzZXQKIAkJICogdGhlIHJlYWQgdGFza2ZpbGUgYml0LCBmb3Igbm90IGV4ZWN1dGluZyBhdGFjYiBjb21tYW5kLAogCQkgKiBidXQgcmVhZGluZyByZWdpc3RlciBzZWxlY3RlZCBpbiBzcmItPmNtbmRbNF0KIAkJICovCisJCXNyYi0+Y21kX2xlbiA9IDE2OworCQlzcmItPmNtbmQgPSBzZXMuY21uZDsKIAkJc3JiLT5jbW5kWzJdID0gMTsKIAogCQl1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQoc3JiLCB1cyk7CisJCW1lbWNweShyZWdzLCBzcmItPnNlbnNlX2J1ZmZlciwgc2l6ZW9mKHJlZ3MpKTsKIAkJdG1wX3Jlc3VsdCA9IHNyYi0+cmVzdWx0OwogCQlzY3NpX2VoX3Jlc3RvcmVfY21uZChzcmIsICZzZXMpOwogCQkvKiB3ZSBmYWlsIHRvIGdldCByZWdpc3RlcnMsIHJlcG9ydCBpbnZhbGlkIGNvbW1hbmQgKi8KQEAgLTE2Miw4ICsyMDUsOCBAQAogCiAJCS8qIFhYWCB3ZSBzaG91bGQgZ2VuZXJhdGUgc2ssIGFzYywgYXNjcSBmcm9tIHN0YXR1cyBhbmQgZXJyb3IKIAkJICogcmVncwotCQkgKiAoc2VlIDExLjEgRXJyb3IgdHJhbnNsYXRpb24grSBBVEEgZGV2aWNlIGVycm9yIHRvIFNDU0kgZXJyb3IgbWFwKQotCQkgKiBhbmQgYXRhX3RvX3NlbnNlX2Vycm9yIGZyb20gbGliYXRhLgorCQkgKiAoc2VlIDExLjEgRXJyb3IgdHJhbnNsYXRpb24gQVRBIGRldmljZSBlcnJvciB0byBTQ1NJIGVycm9yCisJCSAqICBtYXAsIGFuZCBhdGFfdG9fc2Vuc2VfZXJyb3IgZnJvbSBsaWJhdGEuKQogCQkgKi8KIAogCQkvKiBTZW5zZSBkYXRhIGlzIGN1cnJlbnQgYW5kIGZvcm1hdCBpcyBkZXNjcmlwdG9yLiAqLwpAQCAtMTk4LDMgKzI0MSw0OCBAQAogCWlmIChzcmItPmNtbmRbMF0gPT0gQVRBXzEyKQogCQlzcmItPmNtZF9sZW4gPSAxMjsKIH0KKworCitzdGF0aWMgaW50IGN5cHJlc3NfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBjeXByZXNzX3VzYl9pZHMpICsgY3lwcmVzc191bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnByb3RvY29sX25hbWUgPSAiVHJhbnNwYXJlbnQgU0NTSSB3aXRoIEN5cHJlc3MgQVRBQ0IiOworCXVzLT5wcm90b19oYW5kbGVyID0gY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN5cHJlc3NfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtY3lwcmVzcyIsCisJLnByb2JlID0JY3lwcmVzc19wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQljeXByZXNzX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGN5cHJlc3NfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmN5cHJlc3NfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGN5cHJlc3NfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGN5cHJlc3NfaW5pdCk7Cittb2R1bGVfZXhpdChjeXByZXNzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYwppbmRleCAxN2YxYWUyLi4yYjZlNTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYwpAQCAtNDksNiArNDksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtNTgsMTIgKzU5LDY1IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImRhdGFmYWIuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERhdGFmYWIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJKaW1taWUgTWF5ZmllbGQgPG1heWZpZWxkK2RhdGFmYWJAc2Fja2hlYWRzLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RydWN0IGRhdGFmYWJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7CS8qIHRvdGFsIHNlY3RvciBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcgICBzc2l6ZTsJCS8qIHNlY3RvciBzaXplIGluIGJ5dGVzICovCisJc2lnbmVkIGNoYXIJbHVuOwkJLyogdXNlZCBmb3IgZHVhbC1zbG90IHJlYWRlcnMgKi8KKworCS8qIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0ICovCisJdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKIAogc3RhdGljIGludCBkYXRhZmFiX2RldGVybWluZV9sdW4oc3RydWN0IHVzX2RhdGEgKnVzLAogCQkJCSBzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvKTsKIAogCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBkYXRhZmFiX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkYXRhZmFiX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGRhdGFmYWJfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2RhdGFmYWIuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiBzdGF0aWMgaW5saW5lIGludAogZGF0YWZhYl9idWxrX3JlYWQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKSB7CiAJaWYgKGxlbiA9PSAwKQpAQCAtNTAwLDcgKzU1NCw3IEBACiAKIC8vIFRyYW5zcG9ydCBmb3IgdGhlIERhdGFmYWIgTURDRkUtQgogLy8KLWludCBkYXRhZmFiX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm87CiAJaW50IHJjOwpAQCAtNjY1LDMgKzcxOSw0OSBAQAogCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQorCitzdGF0aWMgaW50IGRhdGFmYWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBkYXRhZmFiX3VzYl9pZHMpICsgZGF0YWZhYl91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJEYXRhZmFiIEJ1bGstT25seSI7CisJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMTsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRhdGFmYWJfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtZGF0YWZhYiIsCisJLnByb2JlID0JZGF0YWZhYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlkYXRhZmFiX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRhdGFmYWJfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmRhdGFmYWJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRhdGFmYWJfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZkYXRhZmFiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRhdGFmYWJfaW5pdCk7Cittb2R1bGVfZXhpdChkYXRhZmFiX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlM2YyNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qIERyaXZlciBmb3IgRGF0YWZhYiBNRENGRS1CIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmcpCi0gKgotICogU2VlIGRhdGFmYWIuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9EQVRBRkFCX01EQ0ZFX0JfSAotI2RlZmluZSBfVVNCX0RBVEFGQUJfTURDRkVfQl9ICi0KLWV4dGVybiBpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QgZGF0YWZhYl9pbmZvIHsKLQl1bnNpZ25lZCBsb25nICAgc2VjdG9yczsJLy8gdG90YWwgc2VjdG9yIGNvdW50Ci0JdW5zaWduZWQgbG9uZyAgIHNzaXplOwkJLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKLQlzaWduZWQgY2hhcglsdW47CQkvLyB1c2VkIGZvciBkdWFsLXNsb3QgcmVhZGVycwotCQotCS8vIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0Ci0JdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKLQl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOwkvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKLQl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsJLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCmluZGV4IDczYWM3MjYuLjU0Y2M5NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCkBAIC0yNiw2ICsyNiw3IEBACiAgKiAoaHR0cDovL3d3dy5mcmVlY29tLmRlLykKICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KIApAQCAtMzMsNyArMzQsMTAgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiZnJlZWNvbS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIEJyb3duIDx1c2Itc3RvcmFnZUBkYXZpZGIub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHCiBzdGF0aWMgdm9pZCBwZHVtcCAodm9pZCAqLCBpbnQpOwpAQCAtMTAzLDYgKzEwNyw0NyBAQAogI2RlZmluZSBGQ01fUEFDS0VUX0xFTkdUSAkJNjQKICNkZWZpbmUgRkNNX1NUQVRVU19QQUNLRVRfTEVOR1RICTQKIAorc3RhdGljIGludCBpbml0X2ZyZWVjb20oc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBmcmVlY29tX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9mcmVlY29tLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBmcmVlY29tX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGZyZWVjb21fdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2ZyZWVjb20uaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKwogc3RhdGljIGludAogZnJlZWNvbV9yZWFkZGF0YSAoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMsCiAJCXVuc2lnbmVkIGludCBpcGlwZSwgdW5zaWduZWQgaW50IG9waXBlLCBpbnQgY291bnQpCkBAIC0xNzMsNyArMjE4LDcgQEAKICAqIFRyYW5zcG9ydCBmb3IgdGhlIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yLgogICoKICAqLwotaW50IGZyZWVjb21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgZnJlZWNvbV9jYl93cmFwICpmY2I7CiAJc3RydWN0IGZyZWVjb21fc3RhdHVzICAqZnN0OwpAQCAtMzc3LDggKzQyMiw3IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQogCi1pbnQKLWZyZWVjb21faW5pdCAoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBpbml0X2ZyZWVjb20oc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXN1bHQ7CiAJY2hhciAqYnVmZmVyID0gdXMtPmlvYnVmOwpAQCAtNDE3LDcgKzQ2MSw3IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQogCi1pbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXByaW50ayAoS0VSTl9DUklUICJmcmVlY29tIHJlc2V0IGNhbGxlZFxuIik7CiAKQEAgLTQ3OSwzICs1MjMsNDggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IGZyZWVjb21fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBmcmVlY29tX3VzYl9pZHMpICsgZnJlZWNvbV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkZyZWVjb20iOworCXVzLT50cmFuc3BvcnQgPSBmcmVlY29tX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfZnJlZWNvbV9yZXNldDsKKwl1cy0+bWF4X2x1biA9IDA7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBmcmVlY29tX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWZyZWVjb20iLAorCS5wcm9iZSA9CWZyZWVjb21fcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JZnJlZWNvbV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmcmVlY29tX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZmcmVlY29tX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmcmVlY29tX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmZnJlZWNvbV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChmcmVlY29tX2luaXQpOworbW9kdWxlX2V4aXQoZnJlZWNvbV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZDBmZTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yCi0gKgotICogRnJlZWNvbSB2MC4xOgotICoKLSAqIEZpcnN0IHJlbGVhc2UKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+Ci0gKgotICogU2VlIGZyZWVjb20uYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX0ZSRUVDT01fVVNCX0gKLSNkZWZpbmUgX0ZSRUVDT01fVVNCX0gKLQotZXh0ZXJuIGludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCmluZGV4IDM4M2FiZjIuLjg4MmM1N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwpAQCAtNDQsNiArNDQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KQEAgLTU3LDcgKzU4LDUzIEBACiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInNjc2lnbHVlLmgiCi0jaW5jbHVkZSAiaXNkMjAwLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDIik7CitNT0RVTEVfQVVUSE9SKCJCavZybiBTdGVuYmVyZyA8Ympvcm5AaGF4eC5zZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBpc2QyMDBfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaXNkMjAwX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGlzZDIwMF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfaXNkMjAwLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisjdW5kZWYgVVNVQUxfREVWCiAKIAogLyogVGltZW91dCBkZWZpbmVzIChpbiBTZWNvbmRzKSAqLwpAQCAtMTUxOCw3ICsxNTY1LDcgQEAKICAqIEluaXRpYWxpemF0aW9uIGZvciB0aGUgSVNEMjAwIAogICovCiAKLWludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKQogewogCVVTX0RFQlVHUCgiSVNEMjAwIEluaXRpYWxpemF0aW9uLi4uXG4iKTsKIApAQCAtMTU0OSw3ICsxNTk2LDcgQEAKICAqCiAgKi8KIAotdm9pZCBpc2QyMDBfYXRhX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBpc2QyMDBfYXRhX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHNlbmRUb1RyYW5zcG9ydCA9IDEsIG9yaWdfYnVmZmxlbjsKIAl1bmlvbiBhdGFfY2RiIGF0YUNkYjsKQEAgLTE1NzAsMyArMTYxNyw0NyBAQAogCiAJaXNkMjAwX3NyYl9zZXRfYnVmZmxlbihzcmIsIG9yaWdfYnVmZmxlbik7CiB9CisKK3N0YXRpYyBpbnQgaXNkMjAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gaXNkMjAwX3VzYl9pZHMpICsgaXNkMjAwX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKKwl1cy0+cHJvdG9faGFuZGxlciA9IGlzZDIwMF9hdGFfY29tbWFuZDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlzZDIwMF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1pc2QyMDAiLAorCS5wcm9iZSA9CWlzZDIwMF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlpc2QyMDBfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXNkMjAwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZpc2QyMDBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlzZDIwMF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmlzZDIwMF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpc2QyMDBfaW5pdCk7Cittb2R1bGVfZXhpdChpc2QyMDBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEzNWY0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyogSGVhZGVyIEZpbGUgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMKLSAqCi0gKiBGaXJzdCByZWxlYXNlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gKHN1cHBvcnRAaW4tc3lzdGVtLmNvbSkKLSAqCi0gKiBTZWUgaXNkMjAwLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX0lTRDIwMF9ICi0jZGVmaW5lIF9VU0JfSVNEMjAwX0gKLQotZXh0ZXJuIHZvaWQgaXNkMjAwX2F0YV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCmluZGV4IGRmNjdmMTMuLjFjNjk0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC01NSw5ICs1Niw2MSBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJqdW1wc2hvdC5oIgogCiAKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBMZXhhciBcIkp1bXBzaG90XCIgQ29tcGFjdCBGbGFzaCByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIkppbW1pZSBNYXlmaWVsZCA8bWF5ZmllbGQrdXNiQHNhY2toZWFkcy5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGp1bXBzaG90X3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9qdW1wc2hvdC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwganVtcHNob3RfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYganVtcHNob3RfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKworc3RydWN0IGp1bXBzaG90X2luZm8geworICAgdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7ICAgICAvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KKyAgIHVuc2lnbmVkIGxvbmcgICBzc2l6ZTsgICAgICAgLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKworICAgLyogdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQgKi8KKyAgIHVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7CisgICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOyAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7ICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCit9OworCiBzdGF0aWMgaW5saW5lIGludCBqdW1wc2hvdF9idWxrX3JlYWQoc3RydWN0IHVzX2RhdGEgKnVzLAogCQkJCSAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtNDI5LDcgKzQ4Miw3IEBACiAKIC8vIFRyYW5zcG9ydCBmb3IgdGhlIExleGFyICdKdW1wc2hvdCcKIC8vCi1pbnQganVtcHNob3RfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQganVtcHNob3RfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBqdW1wc2hvdF9pbmZvICppbmZvOwogCWludCByYzsKQEAgLTU5MiwzICs2NDUsNDkgQEAKIAlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KKworc3RhdGljIGludCBqdW1wc2hvdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGp1bXBzaG90X3VzYl9pZHMpICsganVtcHNob3RfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiTGV4YXIgSnVtcHNob3QgQ29udHJvbC9CdWxrIjsKKwl1cy0+dHJhbnNwb3J0ID0ganVtcHNob3RfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMTsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGp1bXBzaG90X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWp1bXBzaG90IiwKKwkucHJvYmUgPQlqdW1wc2hvdF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlqdW1wc2hvdF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBqdW1wc2hvdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmanVtcHNob3RfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGp1bXBzaG90X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmanVtcHNob3RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoanVtcHNob3RfaW5pdCk7Cittb2R1bGVfZXhpdChqdW1wc2hvdF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliYWM5ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKiBEcml2ZXIgZm9yIExleGFyICJKdW1wc2hvdCIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBKaW1taWUgTWF5ZmllbGQgKG1heWZpZWxkK3VzYkBzYWNraGVhZHMub3JnKQotICoKLSAqIFNlZSBqdW1wc2hvdC5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX0pVTVBTSE9UX0gKLSNkZWZpbmUgX1VTQl9KVU1QU0hPVF9ICi0KLWV4dGVybiBpbnQganVtcHNob3RfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotc3RydWN0IGp1bXBzaG90X2luZm8gewotICAgdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7ICAgICAvLyB0b3RhbCBzZWN0b3IgY291bnQKLSAgIHVuc2lnbmVkIGxvbmcgICBzc2l6ZTsgICAgICAgLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKLSAKLSAgIC8vIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0Ci0gICB1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OwotICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsgICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKLSAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOyAgLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMKaW5kZXggMGQ3OWFlNS4uNzk1M2Q5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYwpAQCAtMTgsNiArMTgsOCBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CkBAIC0yNSw3ICsyNywxMCBAQAogI2luY2x1ZGUgInVzYi5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAia2FybWEuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFJpbyBLYXJtYSIpOworTU9EVUxFX0FVVEhPUigiQm9iIENvcGVsYW5kIDxtZUBib2Jjb3BlbGFuZC5jb20+LCBLZWl0aCBCZW5uZXR0IDxrZWl0aEBtY3Muc3QtYW5kLmFjLnVrPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjZGVmaW5lIFJJT19QUkVGSVggIlJJT1BceDAwIgogI2RlZmluZSBSSU9fUFJFRklYX0xFTiA1CkBAIC0zNiwxMyArNDEsNTMgQEAKICNkZWZpbmUgUklPX0xFQVZFX1NUT1JBR0UgMHgyCiAjZGVmaW5lIFJJT19SRVNFVCAweEMKIAotZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhICopOwotCiBzdHJ1Y3Qga2FybWFfZGF0YSB7CiAJaW50IGluX3N0b3JhZ2U7CiAJY2hhciAqcmVjdjsKIH07CiAKK3N0YXRpYyBpbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBrYXJtYV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGthcm1hX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGthcm1hX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9rYXJtYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIC8qCiAgKiBTZW5kIGNvbW1hbmRzIHRvIFJpbyBLYXJtYS4KICAqCkBAIC0xMDQsNyArMTQ5LDcgQEAKICAqIFRyYXAgU1RBUlRfU1RPUCBhbmQgUkVBRF8xMCB0byBsZWF2ZS9yZS1lbnRlciBzdG9yYWdlIG1vZGUuCiAgKiBFdmVyeXRoaW5nIGVsc2UgaXMgcHJvcGFnYXRlZCB0byB0aGUgbm9ybWFsIGJ1bGsgbGF5ZXIuCiAgKi8KLWludCByaW9fa2FybWFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCByaW9fa2FybWFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXQ7CiAJc3RydWN0IGthcm1hX2RhdGEgKmRhdGEgPSAoc3RydWN0IGthcm1hX2RhdGEgKikgdXMtPmV4dHJhOwpAQCAtMTMzLDcgKzE3OCw3IEBACiAJa2ZyZWUoZGF0YS0+cmVjdik7CiB9CiAKLWludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qga2FybWFfZGF0YSAqZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrYXJtYV9kYXRhKSwgR0ZQX05PSU8pOwpAQCAtMTUzLDMgKzE5OCw0OCBAQAogb3V0OgogCXJldHVybiByZXQ7CiB9CisKK3N0YXRpYyBpbnQga2FybWFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBrYXJtYV91c2JfaWRzKSArIGthcm1hX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiUmlvIEthcm1hL0J1bGsiOworCXVzLT50cmFuc3BvcnQgPSByaW9fa2FybWFfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2FybWFfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMta2FybWEiLAorCS5wcm9iZSA9CWthcm1hX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWthcm1hX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGthcm1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZrYXJtYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQga2FybWFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZrYXJtYV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChrYXJtYV9pbml0KTsKK21vZHVsZV9leGl0KGthcm1hX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTYwOTcyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfS0FSTUFfVVNCX0gKLSNkZWZpbmUgX0tBUk1BX1VTQl9ICi0KLWV4dGVybiBpbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgcmlvX2thcm1hX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCmluZGV4IGY5NzBiMjcuLmZlM2ZmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKQEAgLTM4LDM3ICszOCw2IEBACiBzdGF0aWMgaW50IHVzdV9wcm9iZV90aHJlYWQodm9pZCAqYXJnKTsKIAogLyoKLSAqIFRoZSB0YWJsZS4KLSAqLwotI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCi0JCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSx1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCi0JCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCi17IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLGJjZERldmljZU1heCksIFwKLSAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KLQotI2RlZmluZSBDT01QTElBTlRfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKLQkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCi0JCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCi17IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncykgfQotCi0jZGVmaW5lIFVTVUFMX0RFVih1c2VQcm90bywgdXNlVHJhbnMsIHVzZVR5cGUpIFwKLXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIHVzZVByb3RvLCB1c2VUcmFucyksIFwKLSAgLmRyaXZlcl9pbmZvID0gKCh1c2VUeXBlKTw8MjQpIH0KLQotc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RvcmFnZV91c2JfaWRzIFtdID0gewotIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIKLQl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLSN1bmRlZiBVU1VBTF9ERVYKLSN1bmRlZiBVTlVTVUFMX0RFVgotI3VuZGVmIENPTVBMSUFOVF9ERVYKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHN0b3JhZ2VfdXNiX2lkcyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChzdG9yYWdlX3VzYl9pZHMpOwotCi0vKgogICogQHR5cGU6IHRoZSBtb2R1bGUgdHlwZSBhcyBhbiBpbnRlZ2VyCiAgKi8KIHZvaWQgdXNiX3VzdWFsX3NldF9wcmVzZW50KGludCB0eXBlKQpAQCAtMTY3LDcgKzEzNiw3IEBACiAJLm5hbWUgPQkJImxpYnVzdWFsIiwKIAkucHJvYmUgPQl1c3VfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c3VfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCisJLmlkX3RhYmxlID0JdXNiX3N0b3JhZ2VfdXNiX2lkcywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKaW5kZXggYzdiZjg5NS4uMzgwMjMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwpAQCAtMzUsOSArMzUsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KICNpbmNsdWRlICJ1c2IuaCIKLSNpbmNsdWRlICJvbmV0b3VjaC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK01PRFVMRV9ERVNDUklQVElPTigiTWF4dG9yIFVTQiBPbmVUb3VjaCBoYXJkIGRyaXZlIGJ1dHRvbiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk5pY2sgU2lsbGlrIDxuLnNpbGxpa0B0ZW1wbGUuZWR1PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIE9ORVRPVUNIX1BLVF9MRU4gICAgICAgIDB4MDIKKyNkZWZpbmUgT05FVE9VQ0hfQlVUVE9OICAgICAgICAgS0VZX1BST0cxCisKK3N0YXRpYyBpbnQgb25ldG91Y2hfY29ubmVjdF9pbnB1dChzdHJ1Y3QgdXNfZGF0YSAqc3MpOwogc3RhdGljIHZvaWQgb25ldG91Y2hfcmVsZWFzZV9pbnB1dCh2b2lkICpvbmV0b3VjaF8pOwogCiBzdHJ1Y3QgdXNiX29uZXRvdWNoIHsKQEAgLTUyLDYgKzU5LDQ2IEBACiAJdW5zaWduZWQgaW50IGlzX29wZW46MTsKIH07CiAKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgb25ldG91Y2hfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX29uZXRvdWNoLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvbmV0b3VjaF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBvbmV0b3VjaF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfb25ldG91Y2guaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiBzdGF0aWMgdm9pZCB1c2Jfb25ldG91Y2hfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX29uZXRvdWNoICpvbmV0b3VjaCA9IHVyYi0+Y29udGV4dDsKQEAgLTEyNyw3ICsxNzQsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1pbnQgb25ldG91Y2hfY29ubmVjdF9pbnB1dChzdHJ1Y3QgdXNfZGF0YSAqc3MpCitzdGF0aWMgaW50IG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQoc3RydWN0IHVzX2RhdGEgKnNzKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc3MtPnB1c2JfZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKQEAgLTIzNiwzICsyODMsNDYgQEAKIAkJCQlvbmV0b3VjaC0+ZGF0YSwgb25ldG91Y2gtPmRhdGFfZG1hKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgb25ldG91Y2hfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBvbmV0b3VjaF91c2JfaWRzKSArIG9uZXRvdWNoX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwkvKiBVc2UgZGVmYXVsdCB0cmFuc3BvcnQgYW5kIHByb3RvY29sICovCisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvbmV0b3VjaF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1vbmV0b3VjaCIsCisJLnByb2JlID0Jb25ldG91Y2hfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0Jb25ldG91Y2hfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgb25ldG91Y2hfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJm9uZXRvdWNoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvbmV0b3VjaF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJm9uZXRvdWNoX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9uZXRvdWNoX2luaXQpOworbW9kdWxlX2V4aXQob25ldG91Y2hfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYzdhYTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIF9PTkVUT1VDSF9IXwotI2RlZmluZSBfT05FVE9VQ0hfSF8KLQotI2RlZmluZSBPTkVUT1VDSF9QS1RfTEVOICAgICAgICAweDAyCi0jZGVmaW5lIE9ORVRPVUNIX0JVVFRPTiAgICAgICAgIEtFWV9QUk9HMQotCi1pbnQgb25ldG91Y2hfY29ubmVjdF9pbnB1dChzdHJ1Y3QgdXNfZGF0YSAqc3MpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYwppbmRleCBiZTQ0MWQ4Li5mYzMxMGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCkBAIC0xMjEsNiArMTIxLDcgQEAKIAkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KIAl1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHNyYiwgdXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfdHJhbnNwYXJlbnRfc2NzaV9jb21tYW5kKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTY2F0dGVyLWdhdGhlciB0cmFuc2ZlciBidWZmZXIgYWNjZXNzIHJvdXRpbmVzCkBAIC0xOTksNiArMjAwLDcgQEAKIAkvKiBSZXR1cm4gdGhlIGFtb3VudCBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLwogCXJldHVybiBjbnQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYpOwogCiAvKiBTdG9yZSB0aGUgY29udGVudHMgb2YgYnVmZmVyIGludG8gc3JiJ3MgdHJhbnNmZXIgYnVmZmVyIGFuZCBzZXQgdGhlCiAgKiBTQ1NJIHJlc2lkdWUuCkBAIC0yMTUsMyArMjE3LDQgQEAKIAlpZiAoYnVmbGVuIDwgc2NzaV9idWZmbGVuKHNyYikpCiAJCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSBidWZsZW4pOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3Jfc2V0X3hmZXJfYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwppbmRleCA3MjdjNTA2Li40Y2EzYjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCkBAIC0xMzUsNiArMTM1LDEyIEBACiAJCWlmIChzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5tYXhfc2VjdG9ycyA+IG1heF9zZWN0b3JzKQogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsCiAJCQkJCSAgICAgIG1heF9zZWN0b3JzKTsKKwl9IGVsc2UgaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9UQVBFKSB7CisJCS8qIFRhcGVzIG5lZWQgbXVjaCBoaWdoZXIgbWF4X3NlY3RvciBsaW1pdHMsIHNvIGp1c3QKKwkJICogcmFpc2UgaXQgdG8gdGhlIG1heGltdW0gcG9zc2libGUgKDQgR0IgLyA1MTIpIGFuZAorCQkgKiBsZXQgdGhlIHF1ZXVlIHNlZ21lbnQgc2l6ZSBzb3J0IG91dCB0aGUgcmVhbCBsaW1pdC4KKwkJICovCisJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAweDdGRkZGRik7CiAJfQogCiAJLyogU29tZSBVU0IgaG9zdCBjb250cm9sbGVycyBjYW4ndCBkbyBETUE7IHRoZXkgaGF2ZSB0byB1c2UgUElPLgpAQCAtNTYzLDQgKzU2OSw0IEBACiAJWzddCT0gMHgwYSwJCQkgICAgLyogYWRkaXRpb25hbCBsZW5ndGggKi8KIAlbMTJdCT0gMHgyNAkJCSAgICAvKiBJbnZhbGlkIEZpZWxkIGluIENEQiAqLwogfTsKLQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3Jfc2Vuc2VfaW52YWxpZENEQik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwppbmRleCA1MzFhZTVjLi5hYjVmOWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKQEAgLTQxLDYgKzQxLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTUxLDcgKzUyLDUzIEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInNkZHIwOS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJBbmRyaWVzIEJyb3V3ZXIgPGFlYkBjd2kubmw+LCBSb2JlcnQgQmFydWNoIDxhdXRvcGhpbGVAc3RhcmJhbmQubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKK3N0YXRpYyBpbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitzdGF0aWMgaW50IHVzYl9zdG9yX3NkZHIwOV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgc2RkcjA5X3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9zZGRyMDkuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNkZHIwOV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBzZGRyMDlfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgogCiAKICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQpAQCAtNzIzLDcgKzc3MCw3IEBACiAJbGVuID0gbWluKHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSkgKiBpbmZvLT5wYWdlc2l6ZTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC04MzgsNyArODg1LDggQEAKIAlpZiAocGJhID09IFVOREVGKSB7CiAJCXBiYSA9IHNkZHIwOV9maW5kX3VudXNlZF9wYmEoaW5mbywgbGJhKTsKIAkJaWYgKCFwYmEpIHsKLQkJCXByaW50aygic2RkcjA5X3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDlfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCQlpbmZvLT5wYmFfdG9fbGJhW3BiYV0gPSBsYmE7CkBAIC04NDksNyArODk3LDcgQEAKIAlpZiAocGJhID09IDEpIHsKIAkJLyogTWF5YmUgaXQgaXMgaW1wb3NzaWJsZSB0byB3cml0ZSB0byBQQkEgMS4KIAkJICAgRmFrZSBzdWNjZXNzLCBidXQgZG9uJ3QgZG8gYW55dGhpbmcuICovCi0JCXByaW50aygic2RkcjA5OiBhdm9pZCB3cml0aW5nIHRvIHBiYSAxXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5OiBhdm9pZCB3cml0aW5nIHRvIHBiYSAxXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05NTQsNyArMTAwMiw3IEBACiAJYmxvY2tsZW4gPSAocGFnZWxlbiA8PCBpbmZvLT5ibG9ja3NoaWZ0KTsKIAlibG9ja2J1ZmZlciA9IGttYWxsb2MoYmxvY2tsZW4sIEdGUF9OT0lPKTsKIAlpZiAoIWJsb2NrYnVmZmVyKSB7Ci0JCXByaW50aygic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtOTY1LDcgKzEwMTMsNyBAQAogCWxlbiA9IG1pbihzZWN0b3JzLCAodW5zaWduZWQgaW50KSBpbmZvLT5ibG9ja3NpemUpICogaW5mby0+cGFnZXNpemU7CiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJa2ZyZWUoYmxvY2tidWZmZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xMTEyLDcgKzExNjAsNyBAQAogCiAJaWYgKHJlc3VsdCkgewogCQlVU19ERUJVR1AoIlJlc3VsdCBvZiByZWFkX2RldmljZUlEIGlzICVkXG4iLCByZXN1bHQpOwotCQlwcmludGsoInNkZHIwOTogY291bGQgbm90IHJlYWQgY2FyZCBpbmZvXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5OiBjb3VsZCBub3QgcmVhZCBjYXJkIGluZm9cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTExNTMsNyArMTIwMSw3IEBACiAJCXNwcmludGYoYmx1cmJ0eHQgKyBzdHJsZW4oYmx1cmJ0eHQpLAogCQkJIiwgV1AiKTsKIAotCXByaW50aygiJXNcbiIsIGJsdXJidHh0KTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlc1xuIiwgYmx1cmJ0eHQpOwogCiAJcmV0dXJuIGNhcmRpbmZvOwogfQpAQCAtMTE4NCw3ICsxMjMyLDcgQEAKIAlhbGxvY19sZW4gPSAoYWxsb2NfYmxvY2tzIDw8IENPTlRST0xfU0hJRlQpOwogCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NfbGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3JlYWRfbWFwOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3JlYWRfbWFwOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmVzdWx0ID0gLTE7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xMTk4LDcgKzEyNDYsNyBAQAogCWluZm8tPnBiYV90b19sYmEgPSBrbWFsbG9jKG51bWJsb2NrcypzaXplb2YoaW50KSwgR0ZQX05PSU8pOwogCiAJaWYgKGluZm8tPmxiYV90b19wYmEgPT0gTlVMTCB8fCBpbmZvLT5wYmFfdG9fbGJhID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXN1bHQgPSAtMTsKIAkJZ290byBkb25lOwogCX0KQEAgLTEyMzgsNyArMTI4Niw4IEBACiAJCQlpZiAocHRyW2pdICE9IDApCiAJCQkJZ290byBub256OwogCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7Ci0JCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZ1xuIiwgaSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmdcbiIsCisJCSAgICAgICBpKTsKIAkJY29udGludWU7CiAKIAlub256OgpAQCAtMTI1MSw3ICsxMzAwLDggQEAKIAlub25mZjoKIAkJLyogbm9ybWFsIFBCQXMgc3RhcnQgd2l0aCBzaXggRkZzICovCiAJCWlmIChqIDwgNikgewotCQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nOiAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmc6ICIKIAkJCSAgICAgICAicmVzZXJ2ZWQgYXJlYSA9ICUwMlglMDJYJTAyWCUwMlggIgogCQkJICAgICAgICJkYXRhIHN0YXR1cyAlMDJYIGJsb2NrIHN0YXR1cyAlMDJYXG4iLAogCQkJICAgICAgIGksIHB0clswXSwgcHRyWzFdLCBwdHJbMl0sIHB0clszXSwKQEAgLTEyNjEsNyArMTMxMSw4IEBACiAJCX0KIAogCQlpZiAoKHB0cls2XSA+PiA0KSAhPSAweDAxKSB7Ci0JCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBpbnZhbGlkIGFkZHJlc3MgZmllbGQgIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IFBCQSAlZCBoYXMgaW52YWxpZCBhZGRyZXNzIGZpZWxkICIKIAkJCSAgICAgICAiJTAyWCUwMlgvJTAyWCUwMlhcbiIsCiAJCQkgICAgICAgaSwgcHRyWzZdLCBwdHJbN10sIHB0clsxMV0sIHB0clsxMl0pOwogCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwpAQCAtMTI3MCw3ICsxMzIxLDggQEAKIAogCQkvKiBjaGVjayBldmVuIHBhcml0eSAqLwogCQlpZiAocGFyaXR5W3B0cls2XSBeIHB0cls3XV0pIHsKLQkJCXByaW50aygic2RkcjA5OiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgogCQkJICAgICAgICIgKCUwMlggJTAyWClcbiIsIGksIHB0cls2XSwgcHRyWzddKTsKIAkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKIAkJCWNvbnRpbnVlOwpAQCAtMTI4OSw3ICsxMzQxLDggQEAKIAkJICovCiAKIAkJaWYgKGxiYSA+PSAxMDAwKSB7Ci0JCQlwcmludGsoInNkZHIwOTogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKIAkJCSAgICAgICBsYmEsIGkpOwogCQkJZ290byBwb3NzaWJseV9lcmFzZTsKIAkJfQpAQCAtMTI5Nyw3ICsxMzUwLDggQEAKIAkJbGJhICs9IDEwMDAqKGkvMHg0MDApOwogCiAJCWlmIChpbmZvLT5sYmFfdG9fcGJhW2xiYV0gIT0gVU5ERUYpIHsKLQkJCXByaW50aygic2RkcjA5OiBMQkEgJWQgc2VlbiBmb3IgUEJBICVkIGFuZCAlZFxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBMQkEgJWQgc2VlbiBmb3IgUEJBICVkIGFuZCAlZFxuIiwKIAkJCSAgICAgICBsYmEsIGluZm8tPmxiYV90b19wYmFbbGJhXSwgaSk7CiAJCQlnb3RvIHBvc3NpYmx5X2VyYXNlOwogCQl9CkBAIC0xMzk5LDcgKzE0NTMsNyBAQAogICogdW51c3VhbCBkZXZpY2VzIGxpc3QgYnV0IGNhbGxlZCBmcm9tIGhlcmUgdGhlbiBMVU4gMCBvZiB0aGUgY29tYm8gcmVhZGVyCiAgKiBpcyBub3QgcmVjb2duaXplZC4gQnV0IEkgZG8gbm90IGtub3cgd2hhdCBwcmVjaXNlbHkgdGhlc2UgY2FsbHMgZG8uCiAgKi8KLWludAorc3RhdGljIGludAogdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cy0+aW9idWY7CkBAIC0xNDQ5LDcgKzE1MDMsNyBAQAogLyoKICAqIFRyYW5zcG9ydCBmb3IgdGhlIE1pY3JvdGVjaCBEUENNLVVTQgogICovCi1pbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGRwY21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXQ7CiAKQEAgLTE0OTEsNyArMTU0NSw3IEBACiAvKgogICogVHJhbnNwb3J0IGZvciB0aGUgU2FuZGlzayBTRERSLTA5CiAgKi8KLWludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlbnNla2V5ID0gMCwgc2Vuc2Vjb2RlID0gMDsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBoYXZlZmFrZXNlbnNlID0gMDsKQEAgLTE2OTAsNyArMTc0NCw2MCBAQAogLyoKICAqIEluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBzZGRyMDkgc3ViZHJpdmVyCiAgKi8KLWludAorc3RhdGljIGludAogdXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CiAJcmV0dXJuIHNkZHIwOV9jb21tb25faW5pdCh1cyk7CiB9CisKK3N0YXRpYyBpbnQgc2RkcjA5X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gc2RkcjA5X3VzYl9pZHMpICsgc2RkcjA5X3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwlpZiAodXMtPnByb3RvY29sID09IFVTX1BSX0RQQ01fVVNCKSB7CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sL0J1bGstRVVTQi9TRERSMDkiOworCQl1cy0+dHJhbnNwb3J0ID0gZHBjbV90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAxOworCX0gZWxzZSB7CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJFVVNCL1NERFIwOSI7CisJCXVzLT50cmFuc3BvcnQgPSBzZGRyMDlfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwl9CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZGRyMDlfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtc2RkcjA5IiwKKwkucHJvYmUgPQlzZGRyMDlfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0Jc2RkcjA5X3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkZHIwOV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmc2RkcjA5X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZGRyMDlfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZGRyMDlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2RkcjA5X2luaXQpOworbW9kdWxlX2V4aXQoc2RkcjA5X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MDExNzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qIERyaXZlciBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBSb2JlcnQgQmFydWNoIChhdXRvcGhpbGVAZG9sLm5ldCkKLSAqICAgKGMpIDIwMDIgQW5kcmllcyBCcm91d2VyIChhZWJAY3dpLm5sKQotICoKLSAqIFNlZSBzZGRyMDkuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX0VVU0JfU0REUjA5X0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX0VVU0JfU0REUjA5X0gKLQotLyogU2FuZGlzayBTRERSLTA5IHN0dWZmICovCi0KLWV4dGVybiBpbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHVzYl9zdG9yX3NkZHIwOV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLS8qIE1pY3JvdGVjaCBEUENNLVVTQiBzdHVmZiAqLwotCi1leHRlcm4gaW50IGRwY21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCmluZGV4IDBkOGRmNzUuLjQ0ZGZlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYwpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC0zMyw3ICszNCw0OCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzZGRyNTUuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiU2ltb24gTXVudG9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHNkZHI1NV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjU1LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzZGRyNTVfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgc2RkcjU1X3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9zZGRyNTUuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKIAogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKTw8OCApICkKQEAgLTUxMyw3ICs1NTUsOCBAQAogfQogCiAKLWludCBzZGRyNTVfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CitzdGF0aWMgaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcwMyw3ICs3NDYsOSBAQAogCQkKIAkJaWYgKGluZm8tPmxiYV90b19wYmFbbGJhICsgem9uZSAqIDEwMDBdICE9IE5PVF9BTExPQ0FURUQgJiYKIAkJICAgICFpbmZvLT5mb3JjZV9yZWFkX29ubHkpIHsKLQkJCXByaW50aygic2RkcjU1OiBtYXAgaW5jb25zaXN0ZW5jeSBhdCBMQkEgJTA0WFxuIiwgbGJhICsgem9uZSAqIDEwMDApOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyNTU6IG1hcCBpbmNvbnNpc3RlbmN5IGF0IExCQSAlMDRYXG4iLAorCQkJICAgICAgIGxiYSArIHpvbmUgKiAxMDAwKTsKIAkJCWluZm8tPmZvcmNlX3JlYWRfb25seSA9IDE7CiAJCX0KIApAQCAtNzMyLDcgKzc3Nyw3IEBACiAvKgogICogVHJhbnNwb3J0IGZvciB0aGUgU2FuZGlzayBTRERSLTU1CiAgKi8KLWludCBzZGRyNTVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBzZGRyNTVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXN1bHQ7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXNwb25zZVs4XSA9IHsKQEAgLTkyOSwzICs5NzQsNDkgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsgLy8gRklYTUU6IHNlbnNlIGJ1ZmZlcj8KIH0KIAorCitzdGF0aWMgaW50IHNkZHI1NV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIHNkZHI1NV91c2JfaWRzKSArIHNkZHI1NV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNERFI1NSI7CisJdXMtPnRyYW5zcG9ydCA9IHNkZHI1NV90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHNkZHI1NV9yZXNldDsKKwl1cy0+bWF4X2x1biA9IDA7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZGRyNTVfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtc2RkcjU1IiwKKwkucHJvYmUgPQlzZGRyNTVfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0Jc2RkcjU1X3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkZHI1NV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmc2RkcjU1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZGRyNTVfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZGRyNTVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2RkcjU1X2luaXQpOworbW9kdWxlX2V4aXQoc2RkcjU1X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTVhMDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qIERyaXZlciBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMiBTaW1vbiBNdW50b24KLSAqCi0gKiBTZWUgc2RkcjU1LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfU0hVVFRMRV9FVVNCX1NERFI1NV9ICi0jZGVmaW5lIF9VU0JfU0hVVFRMRV9FVVNCX1NERFI1NV9ICi0KLS8qIFNhbmRpc2sgU0REUi01NSBzdHVmZiAqLwotCi1leHRlcm4gaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBzZGRyNTVfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCmluZGV4IGFlNmQ2NDgxLi5iNjJhMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwpAQCAtNDIsNiArNDIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgogCkBAIC01Miw3ICs1MywxMDAgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU0NNIE1pY3Jvc3lzdGVtcyAoYS5rLmEuIFNodXR0bGUpIFVTQi1BVEFQSSBjYWJsZSIpOworTU9EVUxFX0FVVEhPUigiRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4sIFJvYmVydCBCYXJ1Y2ggPGF1dG9waGlsZUBzdGFyYmFuZC5uZXQ+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIFN1cHBvcnRlZCBkZXZpY2UgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfREVWX0hQODIwMAkweDAxCisjZGVmaW5lIFVTQkFUX0RFVl9GTEFTSAkJMHgwMgorCisjZGVmaW5lIFVTQkFUX0VQUF9QT1JUCQkweDEwCisjZGVmaW5lIFVTQkFUX0VQUF9SRUdJU1RFUgkweDMwCisjZGVmaW5lIFVTQkFUX0FUQQkJMHg0MAorI2RlZmluZSBVU0JBVF9JU0EJCTB4NTAKKworLyogQ29tbWFuZHMgKG5lZWQgdG8gYmUgbG9naWNhbGx5IE9SJ2Qgd2l0aCBhbiBhY2Nlc3MgdHlwZSAqLworI2RlZmluZSBVU0JBVF9DTURfUkVBRF9SRUcJCTB4MDAKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFRwkJMHgwMQorI2RlZmluZSBVU0JBVF9DTURfUkVBRF9CTE9DSwkweDAyCisjZGVmaW5lIFVTQkFUX0NNRF9XUklURV9CTE9DSwkweDAzCisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1JFQURfQkxPQ0sJMHgwNAorI2RlZmluZSBVU0JBVF9DTURfQ09ORF9XUklURV9CTE9DSwkweDA1CisjZGVmaW5lIFVTQkFUX0NNRF9XUklURV9SRUdTCTB4MDcKKworLyogQ29tbWFuZHMgKHRoZXNlIGRvbid0IG5lZWQgYW4gYWNjZXNzIHR5cGUpICovCisjZGVmaW5lIFVTQkFUX0NNRF9FWEVDX0NNRAkweDgwCisjZGVmaW5lIFVTQkFUX0NNRF9TRVRfRkVBVAkweDgxCisjZGVmaW5lIFVTQkFUX0NNRF9VSU8JCTB4ODIKKworLyogTWV0aG9kcyBvZiBhY2Nlc3NpbmcgVUlPIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQkFUX1VJT19SRUFECTEKKyNkZWZpbmUgVVNCQVRfVUlPX1dSSVRFCTAKKworLyogUXVhbGlmaWVyIGJpdHMgKi8KKyNkZWZpbmUgVVNCQVRfUVVBTF9GQ1EJMHgyMAkvKiBmdWxsIGNvbXBhcmUgKi8KKyNkZWZpbmUgVVNCQVRfUVVBTF9BTFEJMHgxMAkvKiBhdXRvIGxvYWQgc3ViY291bnQgKi8KKworLyogVVNCQVQgRmxhc2ggTWVkaWEgc3RhdHVzIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX05PTkUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DRgkxCisKKy8qIFVTQkFUIEZsYXNoIE1lZGlhIGNoYW5nZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9TQU1FCTAKKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfQ0hBTkdFRAkxCisKKy8qIFVTQkFUIEFUQSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0RBVEEgICAgICAweDEwICAvKiByZWFkL3dyaXRlIGRhdGEgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0ZFQVRVUkVTICAweDExICAvKiBzZXQgZmVhdHVyZXMgKFcpICovCisjZGVmaW5lIFVTQkFUX0FUQV9FUlJPUiAgICAgMHgxMSAgLyogZXJyb3IgKFIpICovCisjZGVmaW5lIFVTQkFUX0FUQV9TRUNDTlQgICAgMHgxMiAgLyogc2VjdG9yIGNvdW50IChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9TRUNOVU0gICAgMHgxMyAgLyogc2VjdG9yIG51bWJlciAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfTEJBX01FICAgIDB4MTQgIC8qIGN5bGluZGVyIGxvdyAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfTEJBX0hJICAgIDB4MTUgIC8qIGN5bGluZGVyIGhpZ2ggKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0RFVklDRSAgICAweDE2ICAvKiBoZWFkL2RldmljZSBzZWxlY3Rpb24gKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NUQVRVUyAgICAweDE3ICAvKiBkZXZpY2Ugc3RhdHVzIChSKSAqLworI2RlZmluZSBVU0JBVF9BVEFfQ01EICAgICAgIDB4MTcgIC8qIGRldmljZSBjb21tYW5kIChXKSAqLworI2RlZmluZSBVU0JBVF9BVEFfQUxUU1RBVFVTIDB4MEUgIC8qIHN0YXR1cyAobm8gY2xlYXIgSVJRKSAoUikgKi8KKworLyogVVNCQVQgVXNlciBJL08gRGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0VQQUQJCTB4ODAgLyogRW5hYmxlIFBlcmlwaGVyYWwgQ29udHJvbCBTaWduYWxzICovCisjZGVmaW5lIFVTQkFUX1VJT19DRFQJCTB4NDAgLyogQ2FyZCBEZXRlY3QgKFJlYWQgT25seSkgKi8KKwkJCQkgICAgIC8qIENEVCA9IEFDS0QgJiAhVUkxICYgIVVJMCAqLworI2RlZmluZSBVU0JBVF9VSU9fMQkJMHgyMCAvKiBJL08gMSAqLworI2RlZmluZSBVU0JBVF9VSU9fMAkJMHgxMCAvKiBJL08gMCAqLworI2RlZmluZSBVU0JBVF9VSU9fRVBQX0FUQQkweDA4IC8qIDE9RVBQIG1vZGUsIDA9QVRBIG1vZGUgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1VJMQkJMHgwNCAvKiBJbnB1dCAxICovCisjZGVmaW5lIFVTQkFUX1VJT19VSTAJCTB4MDIgLyogSW5wdXQgMCAqLworI2RlZmluZSBVU0JBVF9VSU9fSU5UUl9BQ0sJMHgwMSAvKiBJbnRlcnJ1cHQgKEFUQS9JU0EpL0Fja25vd2xlZGdlIChFUFApICovCisKKy8qIFVTQkFUIFVzZXIgSS9PIEVuYWJsZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0RSVlJTVAkweDgwIC8qIFJlc2V0IFBlcmlwaGVyYWwgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0FDS0QJCTB4NDAgLyogRW5hYmxlIENhcmQgRGV0ZWN0ICovCisjZGVmaW5lIFVTQkFUX1VJT19PRTEJCTB4MjAgLyogSS9PIDEgc2V0PW91dHB1dC9jbHI9aW5wdXQgKi8KKwkJCQkgICAgIC8qIElmIEFDS0Q9MSwgc2V0IE9FMSB0byAxIGFsc28uICovCisjZGVmaW5lIFVTQkFUX1VJT19PRTAJCTB4MTAgLyogSS9PIDAgc2V0PW91dHB1dC9jbHI9aW5wdXQgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0FEUFJTVAkweDAxIC8qIFJlc2V0IFNDTSBjaGlwICovCisKKy8qIFVTQkFUIEZlYXR1cmVzICovCisjZGVmaW5lIFVTQkFUX0ZFQVRfRVRFTgkweDgwCS8qIEV4dGVybmFsIHRyaWdnZXIgZW5hYmxlICovCisjZGVmaW5lIFVTQkFUX0ZFQVRfVTEJMHgwOAorI2RlZmluZSBVU0JBVF9GRUFUX1UwCTB4MDQKKyNkZWZpbmUgVVNCQVRfRkVBVF9FVDEJMHgwMgorI2RlZmluZSBVU0JBVF9GRUFUX0VUMgkweDAxCisKK3N0cnVjdCB1c2JhdF9pbmZvIHsKKwlpbnQgZGV2aWNldHlwZTsKKworCS8qIFVzZWQgZm9yIEZsYXNoIHJlYWRlcnMgb25seSAqLworCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsgICAgIC8qIHRvdGFsIHNlY3RvciBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcgc3NpemU7ICAgICAgIC8qIHNlY3RvciBzaXplIGluIGJ5dGVzICovCisKKwl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsgICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7ICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCit9OwogCiAjZGVmaW5lIHNob3J0X3BhY2soTFNCLE1TQikgKCAoKHUxNikoTFNCKSkgfCAoICgodTE2KShNU0IpKTw8OCApICkKICNkZWZpbmUgTFNCX29mKHMpICgocykmMHhGRikKQEAgLTYzLDYgKzE1Nyw0OCBAQAogc3RhdGljIGludCB1c2JhdF9mbGFzaF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKIHN0YXRpYyBpbnQgdXNiYXRfaHA4MjAwZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogCitzdGF0aWMgaW50IGluaXRfdXNiYXRfY2Qoc3RydWN0IHVzX2RhdGEgKnVzKTsKK3N0YXRpYyBpbnQgaW5pdF91c2JhdF9mbGFzaChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYmF0X3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF91c2JhdC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiYXRfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgdXNiYXRfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKIC8qCiAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBwcm9kdWNlIGFuIEFUQSByZWFkL3dyaXRlIHNlY3RvcnMgY29tbWFuZAogICogVXNlIGNtZD0weDIwIGZvciByZWFkLCBjbWQ9MHgzMCBmb3Igd3JpdGUKQEAgLTE2ODQsMzcgKzE4MjAsNjEgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KIAotaW50IGluaXRfdXNiYXRfY2Qoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBpbml0X3VzYmF0X2NkKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlyZXR1cm4gaW5pdF91c2JhdCh1cywgVVNCQVRfREVWX0hQODIwMCk7CiB9CiAKLQotaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBpbml0X3VzYmF0X2ZsYXNoKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlyZXR1cm4gaW5pdF91c2JhdCh1cywgVVNCQVRfREVWX0ZMQVNIKTsKIH0KIAotaW50IGluaXRfdXNiYXRfcHJvYmUoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCB1c2JhdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0JcmV0dXJuIGluaXRfdXNiYXQodXMsIDApOworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSB1c2JhdF91c2JfaWRzKSArIHVzYmF0X3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwkvKiBUaGUgYWN0dWFsIHRyYW5zcG9ydCB3aWxsIGJlIGRldGVybWluZWQgbGF0ZXIgYnkgdGhlCisJICogaW5pdGlhbGl6YXRpb24gcm91dGluZTsgdGhpcyBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuCisJICovCisJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNodXR0bGUgVVNCQVQiOworCXVzLT50cmFuc3BvcnQgPSB1c2JhdF9mbGFzaF90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMTsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAotLyoKLSAqIERlZmF1bHQgdHJhbnNwb3J0IGZ1bmN0aW9uLiBBdHRlbXB0cyB0byBkZXRlY3Qgd2hpY2ggdHJhbnNwb3J0IGZ1bmN0aW9uCi0gKiBzaG91bGQgYmUgY2FsbGVkLCBtYWtlcyBpdCB0aGUgbmV3IGRlZmF1bHQsIGFuZCBjYWxscyBpdC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxsZWQuIE91ciB1c2JhdF9pbml0KCkgZnVuY3Rpb24gZGV0ZWN0cyB0aGUKLSAqIGRldmljZSB0eXBlIGFuZCBjaGFuZ2VzIHRoZSB1cy0+dHJhbnNwb3J0IHB0ciB0byB0aGUgdHJhbnNwb3J0IGZ1bmN0aW9uCi0gKiByZWxldmFudCB0byB0aGUgZGV2aWNlLgotICogSG93ZXZlciwgd2UnbGwgc3VwcG9ydCB0aGlzIGltcG9zc2libGUoPykgY2FzZSBhbnl3YXkuCi0gKi8KLWludCB1c2JhdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiYXRfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtdXNiYXQiLAorCS5wcm9iZSA9CXVzYmF0X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CXVzYmF0X3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYmF0X2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgdXNiYXRfaW5mbyopICh1cy0+ZXh0cmEpOwotCi0JaWYgKHVzYmF0X3NldF90cmFuc3BvcnQodXMsIGluZm8sIDApKQotCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwotCi0JcmV0dXJuIHVzLT50cmFuc3BvcnQoc3JiLCB1cyk7CQorCXJldHVybiB1c2JfcmVnaXN0ZXIoJnVzYmF0X2RyaXZlcik7CiB9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JhdF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYmF0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYmF0X2luaXQpOworbW9kdWxlX2V4aXQodXNiYXRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGJmYzQzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qIERyaXZlciBmb3IgU0NNIE1pY3Jvc3lzdGVtcyBVU0ItQVRBUEkgY2FibGUKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQotICogICAoYykgMjAwNCwgMjAwNSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgotICoKLSAqIFNlZSBzaHV0dGxlX3VzYmF0LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfU0hVVFRMRV9VU0JBVF9ICi0jZGVmaW5lIF9VU0JfU0hVVFRMRV9VU0JBVF9ICi0KLS8qIFN1cHBvcnRlZCBkZXZpY2UgdHlwZXMgKi8KLSNkZWZpbmUgVVNCQVRfREVWX0hQODIwMAkweDAxCi0jZGVmaW5lIFVTQkFUX0RFVl9GTEFTSAkJMHgwMgotCi0jZGVmaW5lIFVTQkFUX0VQUF9QT1JUCQkweDEwCi0jZGVmaW5lIFVTQkFUX0VQUF9SRUdJU1RFUgkweDMwCi0jZGVmaW5lIFVTQkFUX0FUQQkJMHg0MAotI2RlZmluZSBVU0JBVF9JU0EJCTB4NTAKLQotLyogQ29tbWFuZHMgKG5lZWQgdG8gYmUgbG9naWNhbGx5IE9SJ2Qgd2l0aCBhbiBhY2Nlc3MgdHlwZSAqLwotI2RlZmluZSBVU0JBVF9DTURfUkVBRF9SRUcJCTB4MDAKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFRwkJMHgwMQotI2RlZmluZSBVU0JBVF9DTURfUkVBRF9CTE9DSwkweDAyCi0jZGVmaW5lIFVTQkFUX0NNRF9XUklURV9CTE9DSwkweDAzCi0jZGVmaW5lIFVTQkFUX0NNRF9DT05EX1JFQURfQkxPQ0sJMHgwNAotI2RlZmluZSBVU0JBVF9DTURfQ09ORF9XUklURV9CTE9DSwkweDA1Ci0jZGVmaW5lIFVTQkFUX0NNRF9XUklURV9SRUdTCTB4MDcKLQotLyogQ29tbWFuZHMgKHRoZXNlIGRvbid0IG5lZWQgYW4gYWNjZXNzIHR5cGUpICovCi0jZGVmaW5lIFVTQkFUX0NNRF9FWEVDX0NNRAkweDgwCi0jZGVmaW5lIFVTQkFUX0NNRF9TRVRfRkVBVAkweDgxCi0jZGVmaW5lIFVTQkFUX0NNRF9VSU8JCTB4ODIKLQotLyogTWV0aG9kcyBvZiBhY2Nlc3NpbmcgVUlPIHJlZ2lzdGVyICovCi0jZGVmaW5lIFVTQkFUX1VJT19SRUFECTEKLSNkZWZpbmUgVVNCQVRfVUlPX1dSSVRFCTAKLQotLyogUXVhbGlmaWVyIGJpdHMgKi8KLSNkZWZpbmUgVVNCQVRfUVVBTF9GQ1EJMHgyMAkvKiBmdWxsIGNvbXBhcmUgKi8KLSNkZWZpbmUgVVNCQVRfUVVBTF9BTFEJMHgxMAkvKiBhdXRvIGxvYWQgc3ViY291bnQgKi8KLQotLyogVVNCQVQgRmxhc2ggTWVkaWEgc3RhdHVzIHR5cGVzICovCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX05PTkUJMAotI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DRgkxCi0KLS8qIFVTQkFUIEZsYXNoIE1lZGlhIGNoYW5nZSB0eXBlcyAqLwotI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9TQU1FCTAKLSNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfQ0hBTkdFRAkxCi0KLS8qIFVTQkFUIEFUQSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0RBVEEgICAgICAweDEwICAvKiByZWFkL3dyaXRlIGRhdGEgKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0ZFQVRVUkVTICAweDExICAvKiBzZXQgZmVhdHVyZXMgKFcpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9FUlJPUiAgICAgMHgxMSAgLyogZXJyb3IgKFIpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9TRUNDTlQgICAgMHgxMiAgLyogc2VjdG9yIGNvdW50IChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9TRUNOVU0gICAgMHgxMyAgLyogc2VjdG9yIG51bWJlciAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfTEJBX01FICAgIDB4MTQgIC8qIGN5bGluZGVyIGxvdyAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfTEJBX0hJICAgIDB4MTUgIC8qIGN5bGluZGVyIGhpZ2ggKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0RFVklDRSAgICAweDE2ICAvKiBoZWFkL2RldmljZSBzZWxlY3Rpb24gKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NUQVRVUyAgICAweDE3ICAvKiBkZXZpY2Ugc3RhdHVzIChSKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfQ01EICAgICAgIDB4MTcgIC8qIGRldmljZSBjb21tYW5kIChXKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfQUxUU1RBVFVTIDB4MEUgIC8qIHN0YXR1cyAobm8gY2xlYXIgSVJRKSAoUikgKi8KLQotLyogVVNCQVQgVXNlciBJL08gRGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0VQQUQJCTB4ODAgLyogRW5hYmxlIFBlcmlwaGVyYWwgQ29udHJvbCBTaWduYWxzICovCi0jZGVmaW5lIFVTQkFUX1VJT19DRFQJCTB4NDAgLyogQ2FyZCBEZXRlY3QgKFJlYWQgT25seSkgKi8KLQkJCQkgICAgIC8qIENEVCA9IEFDS0QgJiAhVUkxICYgIVVJMCAqLwotI2RlZmluZSBVU0JBVF9VSU9fMQkJMHgyMCAvKiBJL08gMSAqLwotI2RlZmluZSBVU0JBVF9VSU9fMAkJMHgxMCAvKiBJL08gMCAqLwotI2RlZmluZSBVU0JBVF9VSU9fRVBQX0FUQQkweDA4IC8qIDE9RVBQIG1vZGUsIDA9QVRBIG1vZGUgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1VJMQkJMHgwNCAvKiBJbnB1dCAxICovCi0jZGVmaW5lIFVTQkFUX1VJT19VSTAJCTB4MDIgLyogSW5wdXQgMCAqLwotI2RlZmluZSBVU0JBVF9VSU9fSU5UUl9BQ0sJMHgwMSAvKiBJbnRlcnJ1cHQgKEFUQS9JU0EpL0Fja25vd2xlZGdlIChFUFApICovCi0KLS8qIFVTQkFUIFVzZXIgSS9PIEVuYWJsZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0RSVlJTVAkweDgwIC8qIFJlc2V0IFBlcmlwaGVyYWwgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0FDS0QJCTB4NDAgLyogRW5hYmxlIENhcmQgRGV0ZWN0ICovCi0jZGVmaW5lIFVTQkFUX1VJT19PRTEJCTB4MjAgLyogSS9PIDEgc2V0PW91dHB1dC9jbHI9aW5wdXQgKi8KLQkJCQkgICAgIC8qIElmIEFDS0Q9MSwgc2V0IE9FMSB0byAxIGFsc28uICovCi0jZGVmaW5lIFVTQkFUX1VJT19PRTAJCTB4MTAgLyogSS9PIDAgc2V0PW91dHB1dC9jbHI9aW5wdXQgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0FEUFJTVAkweDAxIC8qIFJlc2V0IFNDTSBjaGlwICovCi0KLS8qIFVTQkFUIEZlYXR1cmVzICovCi0jZGVmaW5lIFVTQkFUX0ZFQVRfRVRFTgkweDgwCS8qIEV4dGVybmFsIHRyaWdnZXIgZW5hYmxlICovCi0jZGVmaW5lIFVTQkFUX0ZFQVRfVTEJMHgwOAotI2RlZmluZSBVU0JBVF9GRUFUX1UwCTB4MDQKLSNkZWZpbmUgVVNCQVRfRkVBVF9FVDEJMHgwMgotI2RlZmluZSBVU0JBVF9GRUFUX0VUMgkweDAxCi0KLWV4dGVybiBpbnQgdXNiYXRfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpbml0X3VzYmF0X2ZsYXNoKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGluaXRfdXNiYXRfcHJvYmUoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotc3RydWN0IHVzYmF0X2luZm8gewotCWludCBkZXZpY2V0eXBlOwotCi0JLyogVXNlZCBmb3IgRmxhc2ggcmVhZGVycyBvbmx5ICovCi0JdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCi0JdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KLQotCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggZmI2NWQyMjEuLmQ0OGM4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwpAQCAtMjIwLDYgKzIyMCw3IEBACiAJCXN0YXR1cyA9IHVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aDsKIAlyZXR1cm4gc3RhdHVzOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfY29udHJvbF9tc2cpOwogCiAvKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiB1c2JfY2xlYXJfaGFsdCgpIHRoYXQgYWxsb3dzIGVhcmx5IHRlcm1pbmF0aW9uIGFuZAogICogZG9lc24ndCByZWFkIHRoZSBzdGF0dXMgZnJvbSB0aGUgZGV2aWNlIC0tIHRoaXMgaXMgYmVjYXVzZSBzb21lIGRldmljZXMKQEAgLTI1NCw2ICsyNTUsNyBAQAogCVVTX0RFQlVHUCgiJXM6IHJlc3VsdCA9ICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfY2xlYXJfaGFsdCk7CiAKIAogLyoKQEAgLTM1Miw2ICszNTQsNyBAQAogCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgc2l6ZSwgcmVzdWx0LAogCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIpOwogCiAvKgogICogUmVjZWl2ZSBvbmUgaW50ZXJydXB0IGJ1ZmZlciwgd2l0aG91dCB0aW1lb3V0cywgYnV0IGFsbG93aW5nIGVhcmx5CkBAIC00MDcsNiArNDEwLDcgQEAKIAlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIGxlbmd0aCwgcmVzdWx0LCAKIAkJCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zik7CiAKIC8qCiAgKiBUcmFuc2ZlciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QgdmlhIGJ1bGsgdHJhbnNmZXIKQEAgLTQ3NCw2ICs0NzgsNyBAQAogCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSBwYXJ0aWFsKTsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYnVsa19zcmIpOwogCiAvKgogICogVHJhbnNmZXIgYW4gZW50aXJlIFNDU0kgY29tbWFuZCdzIHdvcnRoIG9mIGRhdGEgcGF5bG9hZCBvdmVyIHRoZSBidWxrCkBAIC01MDksNiArNTE0LDcgQEAKIAkJKnJlc2lkdWFsID0gbGVuZ3RoX2xlZnQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2cpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRyYW5zcG9ydCByb3V0aW5lcwpAQCAtOTQwLDYgKzk0Niw3IEBACiAJCXVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHBpcGUpOwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQ0JfdHJhbnNwb3J0KTsKIAogLyoKICAqIEJ1bGsgb25seSB0cmFuc3BvcnQKQEAgLTExNTYsNiArMTE2Myw3IEBACiAJLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBidXQgaWYgd2UgZG8sIHdlJ3JlIGluIHRyb3VibGUgKi8KIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQnVsa190cmFuc3BvcnQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlc2V0IHJvdXRpbmVzCkBAIC0xMjMwLDYgKzEyMzgsNyBAQAogCQkJCSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCiAJCQkJIDAsIHVzLT5pZm51bSwgdXMtPmlvYnVmLCBDQl9SRVNFVF9DTURfU0laRSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9DQl9yZXNldCk7CiAKIC8qIFRoaXMgaXNzdWVzIGEgQnVsay1vbmx5IFJlc2V0IHRvIHRoZSBkZXZpY2UgaW4gcXVlc3Rpb24sIGluY2x1ZGluZwogICogY2xlYXJpbmcgdGhlIHN1YnNlcXVlbnQgZW5kcG9pbnQgaGFsdHMgdGhhdCBtYXkgb2NjdXIuCkBAIC0xMjQyLDYgKzEyNTEsNyBAQAogCQkJCSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCiAJCQkJIDAsIHVzLT5pZm51bSwgTlVMTCwgMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9CdWxrX3Jlc2V0KTsKIAogLyogSXNzdWUgYSBVU0IgcG9ydCByZXNldCB0byB0aGUgZGV2aWNlLiAgVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkCiAgKiB1cy0+ZGV2X211dGV4LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgKc2ltaWxhcml0eSBpbmRleCA2MCUKY29weSBmcm9tIGRyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCmNvcHkgdG8gZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCmluZGV4IGZiYWRhODkuLjhjNDEyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBBbGF1ZGEtYmFzZWQgY2FyZCByZWFkZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTksNyArMTUsMTcgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NZUFJFU1NfQVRBQ0JfSF8KLSNkZWZpbmUgX0NZUFJFU1NfQVRBQ0JfSF8KLWV4dGVybiB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA1ODQsIDB4MDAwOCwgMHgwMTAyLCAweDAxMDIsCisJCSJGdWppZmlsbSIsCisJCSJEUEMtUjEgKEFsYXVkYSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsCisJCSJPbHltcHVzIiwKKwkJIk1BVVNCLTEwIChBbGF1ZGEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiZTZkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKQEAgLTAsMCArMSwzNCBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIGRldmljZXMgYmFzZWQgb24gdGhlIEN5cHJlc3MgVVNCL0FUQSBicmlkZ2UKKyAqCXdpdGggc3VwcG9ydCBmb3IgQVRBQ0IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCX01PRFVMRSkKKworLyogQ1k3QzY4MzAwIDogc3VwcG9ydCBhdGFjYiAqLworVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMCwgMHgwMDAwLCAweDk5OTksCisJCSJDeXByZXNzIiwKKwkJIkN5cHJlc3MgQVQyTFAiLAorCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKy8qIENZN0M2ODMxMCA6IHN1cHBvcnQgYXRhY2IgYW5kIGF0YWNiMiAqLworVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMSwgMHgwMDAwLCAweDk5OTksCisJCSJDeXByZXNzIiwKKwkJIkN5cHJlc3MgSVNELTMwMExQIiwKKwkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RhdGFmYWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI5OGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RhdGFmYWIuaApAQCAtMCwwICsxLDk4IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIERhdGFmYWIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQl9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAorCQkiRGF0YWZhYiIsCisJCSJNRENGRS1CIFVTQiBDRiBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgRGF0YWZhYi1iYXNlZCBkZXZpY2VzIG1heSBvciBtYXkgbm90IHdvcmsKKyAqIHVzaW5nIHRoZSBjdXJyZW50IGRyaXZlci4uLnRoZSAweGZmZmYgaXMgYXJiaXRyYXJ5IHNpbmNlIEkKKyAqIGRvbid0IGtub3cgd2hhdCBkZXZpY2UgdmVyc2lvbnMgZXhpc3QgZm9yIHRoZXNlIGd1eXMuCisgKgorICogVGhlIDB4YTAwMyBhbmQgMHhhMDA0IGRldmljZXMgaW4gcGFydGljdWxhciBJJ20gY3VyaW91cyBhYm91dC4KKyAqIEknbSB0b2xkIHRoZXkgZXhpc3QgYnV0IHNvIGZhciBub2JvZHkgaGFzIGNvbWUgZm9yd2FyZCB0byBzYXkgdGhhdAorICogdGhleSB3b3JrIHdpdGggdGhpcyBkcml2ZXIuICBHaXZlbiB0aGUgc3VjY2VzcyB3ZSd2ZSBoYWQgZ2V0dGluZworICogb3RoZXIgRGF0YWZhYi1iYXNlZCBjYXJkcyBvcGVyYXRpb25hbCB3aXRoIHRoaXMgZHJpdmVyLCBJJ3ZlIGRlY2lkZWQKKyAqIHRvIGxlYXZlIHRoZXNlIHR3byBkZXZpY2VzIGluIHRoZSBsaXN0LgorICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDEsIDB4MDAwMCwgMHhmZmZmLAorCQkiU0lJRy9EYXRhZmFiIiwKKwkJIlNJSUcvRGF0YWZhYiBNZW1vcnkgU3RpY2srQ0YgUmVhZGVyL1dyaXRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKiBSZXBvcnRlZCBieSBKb3NlZiBSZWlzaW5nZXIgPGpvc2VmLnJlaXNpbmdlckBuZXRjb2xvZ25lLmRlPiAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAyLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJNRDIvTUQzIERpc2sgZW5jbG9zdXJlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMywgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA0LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDUsIDB4MDAwMCwgMHhmZmZmLAorCQkiUE5ZL0RhdGFmYWIiLAorCQkiUE5ZL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNiwgMHgwMDAwLCAweGZmZmYsCisJCSJTaW1wbGUgVGVjaC9EYXRhZmFiIiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZyA8b2xoQHN1c2UuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCisJCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKiBSZXBvcnRlZCBieSBGZWxpeCBNb2VsbGVyIDxmZWxpeEBkZXJrbGVja3MuZGU+CisgKiBpbiBHZXJtYW55IHRoaXMgaXMgc29sZCBieSBIYW1hIHdpdGggdGhlIHByb2R1Y3RudW1iZXIgNDY5NTIKKyAqIGFzICJEdWFsU2xvdCBDb21wYWN0Rmxhc2goVE0pICYgTVN0aWNrIERyaXZlIFVTQiIKKyAqLworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwYiwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhRmFiIFN5c3RlbXMgSW5jLiIsCisJCSJVU0IgQ0YrTVMiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkFjb21kYXRhIiwKKwkJIkNGIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IDUwZGMzM2EuLjFjMWY2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtNTMsNiArNTMsMTEgQEAKICAqIGFzIG9wcG9zZWQgdG8gZGV2aWNlcyB0aGF0IGRvIHNvbWV0aGluZyBzdHJhbmdlbHkgb3Igd3JvbmdseS4KICAqLwogCisjaWYgIWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgJiYgXAorCQkhZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5X01PRFVMRSkKKyNkZWZpbmUgTk9fU0REUjA5CisjZW5kaWYKKwogLyogcGF0Y2ggc3VibWl0dGVkIGJ5IFZpdmlhbiBCcmVnaWVyIDxWaXZpYW4uQnJlZ2llckBpbWFnLmZyPgogICovCiBVTlVTVUFMX0RFViggIDB4MDNlYiwgMHgyMDAyLCAweDAxMDAsIDB4MDEwMCwKQEAgLTgwLDE4ICs4NSw2IEBACiAJCSJDRC1Xcml0ZXIrIiwKIAkJVVNfU0NfODA3MCwgVVNfUFJfQ0IsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMjA3LCAweDAwMDEsIDB4MDAwMSwKLQkJIkhQIiwKLQkJIkNELVdyaXRlcisgODIwMGUiLAotCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCi0KLVVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAzMDcsIDB4MDAwMSwgMHgwMDAxLAotCQkiSFAiLAotCQkiQ0QtV3JpdGVyKyBDRC00ZSIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBCZW4gRWZyb3MgPGJlbkBwYy1kb2N0b3IuY29tPiAqLwogVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDcwYywgMHgwMDAwLCAweDAwMDAsCiAJCSJIUCIsCkBAIC0yMjYsNyArMjE5LDcgQEAKIAkJVVNfRkxfTUFYX1NFQ1RPUlNfNjQgKSwKIAogLyogUmVwb3J0ZWQgYnkgTWFudWVsIE9zZG9iYSA8bWFudWVsLm9zZG9iYUB0dS1pbG1lbmF1LmRlPiAqLwotVU5VU1VBTF9ERVYoIDB4MDQyMSwgMHgwNDkyLCAweDA0NTIsIDB4MDQ1MiwKK1VOVVNVQUxfREVWKCAweDA0MjEsIDB4MDQ5MiwgMHgwNDUyLCAweDk5OTksCiAJCSJOb2tpYSIsCiAJCSJOb2tpYSA2MjMzIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCkBAIC0yNDYsMTIgKzIzOSw3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKLQkJIk1pY3JvdGVjaCIsCi0JCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDAgKSwKLSNlbHNlCisjaWZkZWYgTk9fU0REUjA5CiBVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKIAkJIk1pY3JvdGVjaCIsCiAJCSJDYW1lcmFNYXRlIiwKQEAgLTI4OCwxMyArMjc2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PVF9MT0NLQUJMRSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi1VTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKLQkJIlJpbyIsCi0JCSJSaW8gS2FybWEiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9LQVJNQSwgcmlvX2thcm1hX2luaXQsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFRhbWFzIEtlcmVjc2VuIDxrZXJlY3NlbkBiaWdmb290LmNvbT4KICAqIE9idmlvdXNseSB0aGUgUFJPTSBoYXMgbm90IGJlZW4gY3VzdG9taXplZCBieSB0aGUgVkFSOwogICogdGhlIFZlbmRvciBhbmQgUHJvZHVjdCBzdHJpbmcgZGVzY3JpcHRvcnMgYXJlOgpAQCAtMzc1LDIyICszNTYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0NCLCBOVUxMLAogCQlVU19GTF9NQVhfU0VDVE9SU19NSU4pLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IKLS8qIENZN0M2ODMwMCA6IHN1cHBvcnQgYXRhY2IgKi8KLVVOVVNVQUxfREVWKCAgMHgwNGI0LCAweDY4MzAsIDB4MDAwMCwgMHg5OTk5LAotCQkiQ3lwcmVzcyIsCi0JCSJDeXByZXNzIEFUMkxQIiwKLQkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCTApLAotCi0vKiBDWTdDNjgzMTAgOiBzdXBwb3J0IGF0YWNiIGFuZCBhdGFjYjIgKi8KLVVOVVNVQUxfREVWKCAgMHgwNGI0LCAweDY4MzEsIDB4MDAwMCwgMHg5OTk5LAotCQkiQ3lwcmVzcyIsCi0JCSJDeXByZXNzIElTRC0zMDBMUCIsCi0JCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLAotCQkwKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBTaW1vbiBMZXZpdHQgPHNpbW9uQHdoYXR0Zi5jb20+CiAgKiBUaGlzIGVudHJ5IG5lZWRzIFN1YiBhbmQgUHJvdG8gZmllbGRzICovCiBVTlVTVUFMX0RFViggIDB4MDRiOCwgMHgwNjAxLCAweDAxMDAsIDB4MDEwMCwKQEAgLTQ2NywyMCArNDMyLDcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2V1c2NzaV9pbml0LCAKIAkJVVNfRkxfU0NNX01VTFRfVEFSRyApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwMywgMHgwMDAwLCAweDk5OTksCi0JCSJTYW5kaXNrIiwKLQkJIkltYWdlTWF0ZSBTRERSMDkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotCi0vKiBUaGlzIGVudHJ5IGlzIGZyb20gQW5kcmllcy5Ccm91d2VyQGN3aS5ubCAqLwotVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCi0JCSJTQ00gTWljcm9zeXN0ZW1zIiwKLQkJImVVU0IgU21hcnRNZWRpYSAvIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQsCi0JCTApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAogCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCiAJCSJlVVNCIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKQEAgLTUzNSwxNCArNDg3LDYgQEAKIAkJIkNELVJXIERldmljZSIsCiAJCVVTX1NDXzgwMjAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAotVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MTAxMCwgMHgwMDAwLCAweDk5OTksCi0JCSJTaHV0dGxlL1NDTSIsCi0JCSJVU0JBVC0wMiIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2ZsYXNoLAotCQlVU19GTF9TSU5HTEVfTFVOKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBEbWl0cnkgS2hseXN0b3YgPGFkbWluaW11c0BnbWFpbC5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4MDRlOCwgMHg1MDdjLCAweDAyMjAsIDB4MDIyMCwKIAkJIlNhbXN1bmciLApAQCAtNjQ1LDE0ICs1ODksNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYiwgMHgwMTAwLCAweDAxMTAsCi0JCSJTb255IiwKLQkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KIC8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZywgPG9saEBzdXNlLmRlPiBTdVNFIEJ1Z3ppbGxhICM0OTA0OSAqLwogVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYywgMHgwNTAxLCAweDIwMDAsCiAJCSJTb255IiwKQEAgLTc0OSwxMyArNjg1LDYgQEAKIAkJIlNpbGljb24gTWVkaWEgUi9XIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotVU5VU1VBTF9ERVYoICAweDA1ODQsIDB4MDAwOCwgMHgwMTAyLCAweDAxMDIsCi0JCSJGdWppZmlsbSIsCi0JCSJEUEMtUjEgKEFsYXVkYSkiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFJURSA8cmFzemlsa2lAeWFuZGV4LnJ1PiAqLwogVU5VU1VBTF9ERVYoICAweDA1OGYsIDB4NjM4NywgMHgwMTQxLCAweDAxNDEsCiAJCSJKZXRGbGFzaCIsCkBAIC03OTgsMzIgKzcyNyw2IEBACiAJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCiAJCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAwMzEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlVTQi9JREUgQnJpZGdlIChBVEEvQVRBUEkpIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDMwMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHg1NzAxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJVU0IgU3RvcmFnZSBBZGFwdGVyIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgU3ZlbiBBbmRlcnNvbiA8c3Zlbi1saW51eEBhbmRlcnNvbi5kZT4KICAqIFRoZXJlIGFyZSBhdCBsZWFzdCBmb3VyIFByb2R1Y3RJRHMgdXNlZCBmb3IgaVBvZHMsIHNvIEkgYWRkZWQgMHgxMjAyIGFuZAogICogMHgxMjA0LiBUaGV5IGp1c3QgbmVlZCB0aGUgVVNfRkxfRklYX0NBUEFDSVRZLiBBcyB0aGUgYmNkRGV2aWNlIGFwcGVhcnMKQEAgLTg3NywxNCArNzgwLDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9wdGlvbl9tc19pbml0LAogCQkwKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAotVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDEsCi0JCSJMZXhhciIsCi0JCSJKdW1wc2hvdCBVU0IgQ0YgUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfSlVNUFNIT1QsIE5VTEwsCi0JCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBCbGFrZSBNYXRoZW55IDxibWF0aGVueUBwdXJkdWUuZWR1PiAqLwogVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4YjAwMiwgMHgwMDAwLCAweDAxMTMsCiAJCSJMZXhhciIsCkBAIC05MDcsMTMgKzgwMiwxMyBAQAogCQkiR2VuZXN5cyBMb2dpYyIsCiAJCSJVU0IgdG8gSURFIE9wdGljYWwiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJVVNfRkxfR09fU0xPVyB8IFVTX0ZMX01BWF9TRUNUT1JTXzY0ICksCisJCVVTX0ZMX0dPX1NMT1cgfCBVU19GTF9NQVhfU0VDVE9SU182NCB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKIFVOVVNVQUxfREVWKCAgMHgwNWUzLCAweDA3MDIsIDB4MDAwMCwgMHhmZmZmLAogCQkiR2VuZXN5cyBMb2dpYyIsCiAJCSJVU0IgdG8gSURFIERpc2siLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJVVNfRkxfR09fU0xPVyB8IFVTX0ZMX01BWF9TRUNUT1JTXzY0ICksCisJCVVTX0ZMX0dPX1NMT1cgfCBVU19GTF9NQVhfU0VDVE9SU182NCB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4MDVlMywgMHgwNzIzLCAweDk0NTEsIDB4OTQ1MSwKQEAgLTkzNSwxNCArODMwLDYgQEAKIAkJIkZsb3BweSBEcml2ZSIsCiAJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsIDAgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNjZiLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiT2x5bXB1cyIsCi0JCSJDYW1lZGlhIE1BVVNCLTIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERhcnNlbiBMdSA8ZGFyc2VuQG1pY3JvLmVlLm50aHUuZWR1LnR3PiAqLwogVU5VU1VBTF9ERVYoIDB4MDY2ZiwgMHg4MDAwLCAweDAwMDEsIDB4MDAwMSwKIAkJIlNpZ21hVGVsIiwKQEAgLTk1MSw3ICs4MzgsOSBAQAogCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKIAogLyogUmVwb3J0ZWQgYnkgUmljaGFyZCAtPVtdPS0gPG1pY3JvX2ZseWVyQGhvdG1haWwuY29tPiAqLwotVU5VU1VBTF9ERVYoIDB4MDY3YiwgMHgyNTA3LCAweDAxMDAsIDB4MDEwMCwKKy8qIENoYW5nZSB0byBiY2REZXZpY2VNaW4gKDB4MDEwMCB0byAweDAwMDEpIHJlcG9ydGVkIGJ5CisgKiBUaG9tYXMgQmFydG9zaWsgPHRiYXJ0ZGV2QGdteC10b3BtYWlsLmRlPiAqLworVU5VU1VBTF9ERVYoIDB4MDY3YiwgMHgyNTA3LCAweDAwMDEsIDB4MDEwMCwKIAkJIlByb2xpZmljIFRlY2hub2xvZ3kgSW5jLiIsCiAJCSJNYXNzIFN0b3JhZ2UgRGV2aWNlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCkBAIC0xMDQxLDM1ICs5MzAsMTIgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFItMDViIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfZmxhc2gsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLSNlbmRpZgotCiBVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwKIAkJIlNhbmRpc2siLAogCQkiSW1hZ2VNYXRlIFNERFItMTIiLAogCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDIwMCwgMHgwMDAwLCAweDk5OTksCi0JCSJTYW5kaXNrIiwKLQkJIkltYWdlTWF0ZSBTRERSLTA5IiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAotCQkwKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLVVOVVNVQUxfREVWKCAgMHgwN2FiLCAweGZjMDEsIDB4MDAwMCwgMHg5OTk5LAotCQkiRnJlZWNvbSIsCi0JCSJVU0ItSURFIiwKLQkJVVNfU0NfUUlDLCBVU19QUl9GUkVFQ09NLCBmcmVlY29tX2luaXQsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEVlcm8gVm9sb3RpbmVuIDxlZXJvQHBpbmctdmlpbmkub3JnPiAqLwogVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmNjZCwgMHgwMDAwLCAweDk5OTksCiAJCSJGcmVlY29tIFRlY2hub2xvZ2llcyIsCkBAIC0xMDg5LDEyICs5NTUsNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsCiAJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAotCQkiTWljcm90ZWNoIiwKLQkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAogCQkiTWljcm90ZWNoIiwKIAkJIkNhbWVyYU1hdGUiLApAQCAtMTEwMiwxMDggKzk2Myw2IEBACiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotVU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsCi0JCSJPbHltcHVzIiwKLQkJIk1BVVNCLTEwIChBbGF1ZGEpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDAgKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAotCQkiRGF0YWZhYiIsCi0JCSJNRENGRS1CIFVTQiBDRiBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIERhdGFmYWItYmFzZWQgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrCi0gKiB1c2luZyB0aGUgY3VycmVudCBkcml2ZXIuLi50aGUgMHhmZmZmIGlzIGFyYml0cmFyeSBzaW5jZSBJCi0gKiBkb24ndCBrbm93IHdoYXQgZGV2aWNlIHZlcnNpb25zIGV4aXN0IGZvciB0aGVzZSBndXlzLgotICoKLSAqIFRoZSAweGEwMDMgYW5kIDB4YTAwNCBkZXZpY2VzIGluIHBhcnRpY3VsYXIgSSdtIGN1cmlvdXMgYWJvdXQuCi0gKiBJJ20gdG9sZCB0aGV5IGV4aXN0IGJ1dCBzbyBmYXIgbm9ib2R5IGhhcyBjb21lIGZvcndhcmQgdG8gc2F5IHRoYXQKLSAqIHRoZXkgd29yayB3aXRoIHRoaXMgZHJpdmVyLiAgR2l2ZW4gdGhlIHN1Y2Nlc3Mgd2UndmUgaGFkIGdldHRpbmcKLSAqIG90aGVyIERhdGFmYWItYmFzZWQgY2FyZHMgb3BlcmF0aW9uYWwgd2l0aCB0aGlzIGRyaXZlciwgSSd2ZSBkZWNpZGVkCi0gKiB0byBsZWF2ZSB0aGVzZSB0d28gZGV2aWNlcyBpbiB0aGUgbGlzdC4KLSAqLwotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAxLCAweDAwMDAsIDB4ZmZmZiwKLQkJIlNJSUcvRGF0YWZhYiIsCi0JCSJTSUlHL0RhdGFmYWIgTWVtb3J5IFN0aWNrK0NGIFJlYWRlci9Xcml0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLS8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYi9Vbmtub3duIiwKLQkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMywgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNCwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCi0JCSJQTlkvRGF0YWZhYiIsCi0JCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNiwgMHgwMDAwLCAweGZmZmYsCi0JCSJTaW1wbGUgVGVjaC9EYXRhZmFiIiwKLQkJIlNpbXBsZSBUZWNoL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotI2VuZGlmCi0JCQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLS8qIENvbnRyaWJ1dGVkIGJ5IFBldGVyIFdhZWNodGxlciAqLwotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKLQkJIkRhdGFmYWIiLAotCQkiTURTTS1CIHJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfRklYX0lOUVVJUlkgKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLS8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZyA8b2xoQHN1c2UuZGU+ICovCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCi0JCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLS8qIFNNIHBhcnQgLSBhZWIgPEFuZHJpZXMuQnJvdXdlckBjd2kubmw+ICovCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCi0JCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotLyogUmVwb3J0ZWQgYnkgRmVsaXggTW9lbGxlciA8ZmVsaXhAZGVya2xlY2tzLmRlPgotICogaW4gR2VybWFueSB0aGlzIGlzIHNvbGQgYnkgSGFtYSB3aXRoIHRoZSBwcm9kdWN0bnVtYmVyIDQ2OTUyCi0gKiBhcyAiRHVhbFNsb3QgQ29tcGFjdEZsYXNoKFRNKSAmIE1TdGljayBEcml2ZSBVU0IiCi0gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMGIsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YUZhYiBTeXN0ZW1zIEluYy4iLAotCQkiVVNCIENGK01TIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi0jZW5kaWYKLQogLyogRGF0YWZhYiBLRUNGLVVTQiAvIFNhZ2F0ZWsgRENTLUNGIC8gU2ltcGxldGVjaCBGbGFzaGxpbmsgVUNGLTEwMAogICogT25seSByZXZpc2lvbiAxLjEzIHRlc3RlZCAoc2FtZSBmb3IgYWxsIG9mIHRoZSBhYm92ZSBkZXZpY2VzLAogICogYmFzZWQgb24gdGhlIERhdGFmYWIgREYtVUctMDcgY2hpcCkuICBOZWVkZWQgZm9yIFVTX0ZMX0ZJWF9JTlFVSVJZLgpAQCAtMTM5MCw2ICsxMTQ5LDE2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQkwICksCiAKKy8qIFJlcG9ydGVkIGJ5IEphbiBEdW1vbiA8ai5kdW1vbkBvcHRpb24uY29tPgorICogVGhpcyBkZXZpY2UgKHdyb25nbHkpIGhhcyBhIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UgZGVzY3JpcHRvci4KKyAqIFRoZSBlbnRyeSBpcyBuZWVkZWQgc28gdXNiLXN0b3JhZ2UgY2FuIGJpbmQgdG8gaXQncyBtYXNzLXN0b3JhZ2UKKyAqIGludGVyZmFjZSBhcyBhbiBpbnRlcmZhY2UgZHJpdmVyICovCitVTlVTVUFMX0RFViggMHgwYWYwLCAweDc1MDEsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDA0MzEgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggMHgwYmMyLCAweDMwMTAsIDB4MDAwMCwgMHgwMDAwLAogCQkiU2VhZ2F0ZSIsCkBAIC0xMzk3LDI5ICsxMTY2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NBTkVfU0VOU0UgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiQVRJIiwKLQkJIlVTQiBDYWJsZSAyMDUiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIkNGIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIlNNIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQogVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzMxMCwgMHgwMDAwLCAweDk5OTksCiAJCSJNYXh0b3IiLAogCQkiVVNCIHRvIFNBVEEiLApAQCAtMTQzNiwyMyArMTE4Miw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLS8qIFN1Ym1pdHRlZCBieTogTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Ci0gKiBOZWVkZWQgZm9yIE9uZVRvdWNoIGV4dGVuc2lvbiB0byB1c2Itc3RvcmFnZQotICoKLSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAotCVVOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMDAsIDB4MDAwMCwgMHg5OTk5LAotCQkJIk1heHRvciIsCi0JCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKLQkJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAotCQkJMCksCi0JVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAxMCwgMHgwMDAwLCAweDk5OTksCi0JCQkiTWF4dG9yIiwKLQkJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAotCQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCi0JCQkwKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgSm9yaXMgU3RydXl2ZSA8am9yaXNAc3RydXl2ZS5iZT4gKi8KIFVOVVNVQUxfREVWKCAweDBkOTYsIDB4NDEwYSwgMHgwMDAxLCAweGZmZmYsCiAJCSJNZWRpb24iLApAQCAtMjEwNSwxNCArMTgzNCw2IEBACiAJCSJNaWNybyBNaW5pIDFHQiIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLVVOVVNVQUxfREVWKCAgMHg1NWFhLCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LCAKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFI1NSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgQW5kcmV3IFNpbW1vbnMgPGFuZHJldy5zaW1tb25zQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHhlZDA2LCAweDQ1MDAsIDB4MDAwMSwgMHgwMDAxLAogCQkiRGF0YVN0b3IiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZnJlZWNvbS5oCnNpbWlsYXJpdHkgaW5kZXggNjclCmNvcHkgZnJvbSBkcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaApjb3B5IHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmgKaW5kZXggZmJhZGE4OS4uMzc1ODY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2ZyZWVjb20uaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCisJCSJGcmVlY29tIiwKKwkJIlVTQi1JREUiLAorCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGluaXRfZnJlZWNvbSwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk5ZGRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDBfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKKwkJIlNvbnkiLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiQVRJIiwKKwkJIlVTQiBDYWJsZSAyMDUiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKY29weSB0byBkcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaAppbmRleCBmYmFkYTg5Li4yZTU0OWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBMZXhhciAiSnVtcHNob3QiIENvbXBhY3QgRmxhc2ggcmVhZGVyCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTksNyArMTUsMTMgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NZUFJFU1NfQVRBQ0JfSF8KLSNkZWZpbmUgX0NZUFJFU1NfQVRBQ0JfSF8KLWV4dGVybiB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVF9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNWRjLCAweDAwMDEsIDB4MDAwMCwgMHgwMDAxLAorCQkiTGV4YXIiLAorCQkiSnVtcHNob3QgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0pVTVBTSE9ULCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmgKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCmluZGV4IGZiYWRhODkuLjEyYWUzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIFJpbyBLYXJtYQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKKwkJIlJpbyIsCisJCSJSaW8gS2FybWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9LQVJNQSwgcmlvX2thcm1hX2luaXQsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkzMDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBNYXh0b3IgT25lVG91Y2ggVVNCIGhhcmQgZHJpdmUncyBidXR0b24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0hfTU9EVUxFKQorCisvKiBTdWJtaXR0ZWQgYnk6IE5pY2sgU2lsbGlrIDxuLnNpbGxpa0B0ZW1wbGUuZWR1PgorICogTmVlZGVkIGZvciBPbmVUb3VjaCBleHRlbnNpb24gdG8gdXNiLXN0b3JhZ2UKKyAqLworVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAwMCwgMHgwMDAwLCAweDk5OTksCisJCSJNYXh0b3IiLAorCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDEwLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1heHRvciIsCisJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWI1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaApAQCAtMCwwICsxLDU2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUjA5IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworLyogVGhpcyBlbnRyeSBpcyBmcm9tIEFuZHJpZXMuQnJvdXdlckBjd2kubmwgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAorCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCisJCSJlVVNCIFNtYXJ0TWVkaWEgLyBDb21wYWN0Rmxhc2ggQWRhcHRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA2NmIsIDB4MDEwNSwgMHgwMTAwLCAweDAxMDAsCisJCSJPbHltcHVzIiwKKwkJIkNhbWVkaWEgTUFVU0ItMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4MWVmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTVfTU9EVUxFKQorCisvKiBDb250cmlidXRlZCBieSBQZXRlciBXYWVjaHRsZXIgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJEYXRhZmFiIiwKKwkJIk1EU00tQiByZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkFjb21kYXRhIiwKKwkJIlNNIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDU1YWEsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSNTUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlODY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDIwNywgMHgwMDAxLCAweDAwMDEsCisJCSJIUCIsCisJCSJDRC1Xcml0ZXIrIDgyMDBlIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMzA3LCAweDAwMDEsIDB4MDAwMSwKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgQ0QtNGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2h1dHRsZS9TQ00iLAorCQkiVVNCQVQtMDIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCA0YmVjZjQ5Li44MDYwYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CiAgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCi0gKiAgIChjKSAyMDAzIEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKiAgIChjKSAyMDAzLTIwMDkgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdSkKICAqCiAgKiBJbml0aWFsIHdvcmsgYnk6CiAgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQpAQCAtNjYsMzkgKzY2LDYgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0jaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotI2luY2x1ZGUgInNkZHIwOS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotI2luY2x1ZGUgInNkZHI1NS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLSNpbmNsdWRlICJmcmVlY29tLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi0jaW5jbHVkZSAiaXNkMjAwLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotI2luY2x1ZGUgImRhdGFmYWIuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAotI2luY2x1ZGUgImp1bXBzaG90LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gKLSNpbmNsdWRlICJvbmV0b3VjaC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotI2luY2x1ZGUgImFsYXVkYS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi0jaW5jbHVkZSAia2FybWEuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0jaW5jbHVkZSAiY3lwcmVzc19hdGFjYi5oIgotI2VuZGlmCiAjaW5jbHVkZSAic2llcnJhX21zLmgiCiAjaW5jbHVkZSAib3B0aW9uX21zLmgiCiAKQEAgLTExOCwzNiArODUsOCBAQAogCiAvKgogICogVGhlIGVudHJpZXMgaW4gdGhpcyB0YWJsZSBjb3JyZXNwb25kLCBsaW5lIGZvciBsaW5lLAotICogd2l0aCB0aGUgZW50cmllcyBvZiB1c191bnVzdWFsX2Rldl9saXN0W10uCisgKiB3aXRoIHRoZSBlbnRyaWVzIGluIHVzYl9zdG9yYWdlX3VzYl9pZHNbXSwgZGVmaW5lZCBpbiB1c3VhbC10YWJsZXMuYy4KICAqLwotI2lmbmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCi0KLSNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLSNkZWZpbmUgQ09NUExJQU5UX0RFVglVTlVTVUFMX0RFVgotCi0jZGVmaW5lIFVTVUFMX0RFVih1c2VQcm90bywgdXNlVHJhbnMsIHVzZVR5cGUpIFwKLXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIHVzZVByb3RvLCB1c2VUcmFucyksIFwKLSAgLmRyaXZlcl9pbmZvID0gKFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0KLSMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCi0jdW5kZWYgVU5VU1VBTF9ERVYKLSN1bmRlZiBDT01QTElBTlRfREVWCi0jdW5kZWYgVVNVQUxfREVWCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNCX0xJQlVTVUFMICovCi0KLS8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGV2aWNlcyB3ZSByZWNvZ25pemUsIGFsb25nIHdpdGggdGhlaXIgZmxhZyBkYXRhICovCiAKIC8qIFRoZSB2ZW5kb3IgbmFtZSBzaG91bGQgYmUga2VwdCBhdCBlaWdodCBjaGFyYWN0ZXJzIG9yIGxlc3MsIGFuZAogICogdGhlIHByb2R1Y3QgbmFtZSBzaG91bGQgYmUga2VwdCBhdCAxNiBjaGFyYWN0ZXJzIG9yIGxlc3MuIElmIGEgZGV2aWNlCkBAIC0xNzksMTggKzExOCwxNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHVzX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKICMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiIAotIwl1bmRlZiBVTlVTVUFMX0RFVgotIwl1bmRlZiBDT01QTElBTlRfREVWCi0jCXVuZGVmIFVTVUFMX0RFVgotCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IE5VTEwgfQorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIENPTVBMSUFOVF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKwogCiAjaWZkZWYgQ09ORklHX1BNCS8qIE1pbmltYWwgc3VwcG9ydCBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lICovCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMDcsOCArMTQ1LDkgQEAKIAltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3Jfc3VzcGVuZCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIyMSw4ICsxNjAsOSBAQAogCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXN1bWUpOwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMzUsNiArMTc1LDcgQEAKIAkgKiB0aGUgZGV2aWNlICovCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXNldF9yZXN1bWUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKQEAgLTI0Myw3ICsxODQsNyBAQAogICogYSBVU0IgcG9ydCByZXNldCwgd2hldGhlciBmcm9tIHRoaXMgZHJpdmVyIG9yIGEgZGlmZmVyZW50IG9uZS4KICAqLwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yNTMsOCArMTk0LDkgQEAKIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3ByZV9yZXNldCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIApAQCAtMjY5LDYgKzIxMSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Bvc3RfcmVzZXQpOwogCiAvKgogICogZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlIHRha2VzIGFuIHVuc2lnbmVkIGNoYXIgYXJyYXkgKHdoaWNoIG11c3QKQEAgLTMxMSw2ICsyNTQsNyBAQAogCiAJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKGRhdGEsIGRhdGFfbGVuLCB1cy0+c3JiKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbGxfaW5xdWlyeV9yZXNwb25zZSk7CiAKIHN0YXRpYyBpbnQgdXNiX3N0b3JfY29udHJvbF90aHJlYWQodm9pZCAqIF9fdXMpCiB7CkBAIC01NTEsMjAgKzQ5NSwxMyBAQAogCQkJdmlkLCBwaWQsIGYpOwogfQogCi0vKiBGaW5kIGFuIHVudXN1YWxfZGV2IGRlc2NyaXB0b3IgKGFsd2F5cyBzdWNjZWVkcyBpbiB0aGUgY3VycmVudCBjb2RlKSAqLwotc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiAqZmluZF91bnVzdWFsKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBpbnQgaWRfaW5kZXggPSBpZCAtIHN0b3JhZ2VfdXNiX2lkczsKLQlyZXR1cm4gJnVzX3VudXN1YWxfZGV2X2xpc3RbaWRfaW5kZXhdOwotfQotCiAvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgc3RyaW5nIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLAorCQlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1cy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2MgPQogCQkmdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0Jc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldiA9IGZpbmRfdW51c3VhbChpZCk7CiAKIAkvKiBTdG9yZSB0aGUgZW50cmllcyAqLwogCXVzLT51bnVzdWFsX2RldiA9IHVudXN1YWxfZGV2OwpAQCAtNjI5LDcgKzU2Niw3IEBACiB9CiAKIC8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgZ2V0X3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3dpdGNoICh1cy0+cHJvdG9jb2wpIHsKIAljYXNlIFVTX1BSX0NCOgpAQCAtNjUxLDEwMCArNTg4LDExIEBACiAJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydDsKIAkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0JY2FzZSBVU19QUl9VU0JBVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNodXR0bGUgVVNCQVQiOwotCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLQljYXNlIFVTX1BSX0VVU0JfU0REUjA5OgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0JY2FzZSBVU19QUl9TRERSNTU6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHNkZHI1NV9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAwOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KLQljYXNlIFVTX1BSX0RQQ01fVVNCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCi0JY2FzZSBVU19QUl9GUkVFQ09NOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBmcmVlY29tX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0JY2FzZSBVU19QUl9EQVRBRkFCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi0JY2FzZSBVU19QUl9KVU1QU0hPVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0ganVtcHNob3RfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotCWNhc2UgVVNfUFJfQUxBVURBOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQotCWNhc2UgVVNfUFJfS0FSTUE6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSByaW9fa2FybWFfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlRyYW5zcG9ydDogJXNcbiIsIHVzLT50cmFuc3BvcnRfbmFtZSk7Ci0KLQkvKiBmaXggZm9yIHNpbmdsZS1sdW4gZGV2aWNlcyAqLwotCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKLQkJdXMtPm1heF9sdW4gPSAwOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHByb3RvY29sIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBnZXRfcHJvdG9jb2woc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN3aXRjaCAodXMtPnN1YmNsYXNzKSB7CiAJY2FzZSBVU19TQ19SQkM6CkBAIC03NzksMjYgKzYyNyw3IEBACiAJCXVzLT5wcm90b2NvbF9uYW1lID0gIlVuaWZvcm0gRmxvcHB5IEludGVyZmFjZSAoVUZJKSI7CiAJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdWZpX2NvbW1hbmQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotCWNhc2UgVVNfU0NfSVNEMjAwOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKLQkJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWNhc2UgVVNfU0NfQ1lQX0FUQUNCOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7Ci0JCXVzLT5wcm90b19oYW5kbGVyID0gY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHBpcGUgc2V0dGluZ3MgKi8KQEAgLTg0NiwxMiArNjc1LDEyIEBACiAJdXMtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzLT5wdXNiX2RldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAl1cy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXMtPnB1c2JfZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAJaWYgKGVwX2ludCkgewogCQl1cy0+cmVjdl9pbnRyX3BpcGUgPSB1c2JfcmN2aW50cGlwZSh1cy0+cHVzYl9kZXYsCi0JCQllcF9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQkJdXNiX2VuZHBvaW50X251bShlcF9pbnQpKTsKIAkJdXMtPmVwX2JJbnRlcnZhbCA9IGVwX2ludC0+YkludGVydmFsOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMTIsMTcgKzg0MSwxNSBAQAogfQogCiAKLS8qIFByb2JlIHRvIHNlZSBpZiB3ZSBjYW4gZHJpdmUgYSBuZXdseS1jb25uZWN0ZWQgVVNCIGRldmljZSAqLwotc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKy8qIEZpcnN0IHBhcnQgb2YgZ2VuZXJhbCBVU0IgbWFzcy1zdG9yYWdlIHByb2JpbmcgKi8KK2ludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXM7CiAJaW50IHJlc3VsdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwotCi0JaWYgKHVzYl91c3VhbF9jaGVja190eXBlKGlkLCBVU0JfVVNfVFlQRV9TVE9SKSkKLQkJcmV0dXJuIC1FTlhJTzsKIAogCVVTX0RFQlVHUCgiVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UgZGV0ZWN0ZWRcbiIpOwogCkBAIC0xMDQxLDcgKzg2OCw3IEBACiAJICogQWxsb3cgMTYtYnl0ZSBDREJzIGFuZCB0aHVzID4gMlRCCiAJICovCiAJaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKLQl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CisJKnB1cyA9IHVzID0gaG9zdF90b191cyhob3N0KTsKIAltZW1zZXQodXMsIDAsIHNpemVvZihzdHJ1Y3QgdXNfZGF0YSkpOwogCW11dGV4X2luaXQoJih1cy0+ZGV2X211dGV4KSk7CiAJaW5pdF9jb21wbGV0aW9uKCZ1cy0+Y21uZF9yZWFkeSk7CkBAIC0xMDU0LDI0ICs4ODEsNDYgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKIAotCS8qCi0JICogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzCi0JICoKLQkgKiBpZF9pbmRleCBpcyBjYWxjdWxhdGVkIGluIHRoZSBkZWNsYXJhdGlvbiB0byBiZSB0aGUgaW5kZXggbnVtYmVyCi0JICogb2YgdGhlIG1hdGNoIGZyb20gdGhlIHVzYl9kZXZpY2VfaWQgdGFibGUsIHNvIHdlIGNhbiBmaW5kIHRoZQotCSAqIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHByaXZhdGUgdGFibGUuCi0JICovCi0JcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCk7CisJLyogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzICovCisJcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCwgdW51c3VhbF9kZXYpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwogCi0JLyogR2V0IHRoZSB0cmFuc3BvcnQsIHByb3RvY29sLCBhbmQgcGlwZSBzZXR0aW5ncyAqLwotCXJlc3VsdCA9IGdldF90cmFuc3BvcnQodXMpOwotCWlmIChyZXN1bHQpCisJLyogR2V0IHN0YW5kYXJkIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgc2V0dGluZ3MgKi8KKwlnZXRfdHJhbnNwb3J0KHVzKTsKKwlnZXRfcHJvdG9jb2wodXMpOworCisJLyogR2l2ZSB0aGUgY2FsbGVyIGEgY2hhbmNlIHRvIGZpbGwgaW4gc3BlY2lhbGl6ZWQgdHJhbnNwb3J0CisJICogb3IgcHJvdG9jb2wgc2V0dGluZ3MuCisJICovCisJcmV0dXJuIDA7CisKK0JhZERldmljZToKKwlVU19ERUJVR1AoInN0b3JhZ2VfcHJvYmUoKSBmYWlsZWRcbiIpOworCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Byb2JlMSk7CisKKy8qIFNlY29uZCBwYXJ0IG9mIGdlbmVyYWwgVVNCIG1hc3Mtc3RvcmFnZSBwcm9iaW5nICovCitpbnQgdXNiX3N0b3JfcHJvYmUyKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOworCWludCByZXN1bHQ7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgaGF2ZSBib3RoIGJlZW4gc2V0ICovCisJaWYgKCF1cy0+dHJhbnNwb3J0IHx8ICF1cy0+cHJvdG9faGFuZGxlcikgeworCQlyZXN1bHQgPSAtRU5YSU87CiAJCWdvdG8gQmFkRGV2aWNlOwotCXJlc3VsdCA9IGdldF9wcm90b2NvbCh1cyk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBCYWREZXZpY2U7CisJfQorCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKwlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOworCisJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KKwlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pCisJCXVzLT5tYXhfbHVuID0gMDsKKworCS8qIEZpbmQgdGhlIGVuZHBvaW50cyBhbmQgY2FsY3VsYXRlIHBpcGUgdmFsdWVzICovCiAJcmVzdWx0ID0gZ2V0X3BpcGVzKHVzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKQEAgLTEwODAsNyArOTI5LDcgQEAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyh1cyk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7Ci0JcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKKwlyZXN1bHQgPSBzY3NpX2FkZF9ob3N0KHVzX3RvX2hvc3QodXMpLCAmdXMtPnB1c2JfaW50Zi0+ZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UKIAkJCSJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOwpAQCAtMTEwOCw5ICs5NTcsMTAgQEAKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9wcm9iZTIpOwogCi0vKiBIYW5kbGUgYSBkaXNjb25uZWN0IGV2ZW50IGZyb20gdGhlIFVTQiBjb3JlICovCi1zdGF0aWMgdm9pZCBzdG9yYWdlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCisvKiBIYW5kbGUgYSBVU0IgbWFzcy1zdG9yYWdlIGRpc2Nvbm5lY3QgKi8KK3ZvaWQgdXNiX3N0b3JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCkBAIC0xMTE4LDYgKzk2OCw0MiBAQAogCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHVzKTsKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfZGlzY29ubmVjdCk7CisKKy8qIFRoZSBtYWluIHByb2JlIHJvdXRpbmUgZm9yIHN0YW5kYXJkIGRldmljZXMgKi8KK3N0YXRpYyBpbnQgc3RvcmFnZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwkvKgorCSAqIElmIGxpYnVzdWFsIGlzIGNvbmZpZ3VyZWQsIGxldCBpdCBkZWNpZGUgd2hldGhlciBhIHN0YW5kYXJkCisJICogZGV2aWNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHVzYi1zdG9yYWdlIG9yIGJ5IHViLgorCSAqIElmIHRoZSBkZXZpY2UgaXNuJ3Qgc3RhbmRhcmQgKGlzIGhhbmRsZWQgYnkgYSBzdWJkcml2ZXIKKwkgKiBtb2R1bGUpIHRoZW4gZG9uJ3QgYWNjZXB0IGl0LgorCSAqLworCWlmICh1c2JfdXN1YWxfY2hlY2tfdHlwZShpZCwgVVNCX1VTX1RZUEVfU1RPUikgfHwKKwkJCXVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKGludGYpKQorCQlyZXR1cm4gLUVOWElPOworCisJLyoKKwkgKiBDYWxsIHRoZSBnZW5lcmFsIHByb2JlIHByb2NlZHVyZXMuCisJICoKKwkgKiBUaGUgdW51c3VhbF9kZXZfbGlzdCBhcnJheSBpcyBwYXJhbGxlbCB0byB0aGUgdXNiX3N0b3JhZ2VfdXNiX2lkcworCSAqIHRhYmxlLCBzbyB3ZSB1c2UgdGhlIGluZGV4IG9mIHRoZSBpZCBlbnRyeSB0byBmaW5kIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgdW51c3VhbF9kZXZzIGVudHJ5LgorCSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gdXNiX3N0b3JhZ2VfdXNiX2lkcykgKyB1c191bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogTm8gc3BlY2lhbCB0cmFuc3BvcnQgb3IgcHJvdG9jb2wgc2V0dGluZ3MgaW4gdGhlIG1haW4gbW9kdWxlICovCisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgpAQCAtMTEyNiwxNSArMTAxMiwxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zdG9yYWdlX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNiLXN0b3JhZ2UiLAogCS5wcm9iZSA9CXN0b3JhZ2VfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQlzdG9yYWdlX2Rpc2Nvbm5lY3QsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPQlzdG9yYWdlX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXN0b3JhZ2VfcmVzdW1lLAotCS5yZXNldF9yZXN1bWUgPQlzdG9yYWdlX3Jlc2V0X3Jlc3VtZSwKLSNlbmRpZgotCS5wcmVfcmVzZXQgPQlzdG9yYWdlX3ByZV9yZXNldCwKLQkucG9zdF9yZXNldCA9CXN0b3JhZ2VfcG9zdF9yZXNldCwKLQkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiX3N0b3JhZ2VfdXNiX2lkcywKIAkuc29mdF91bmJpbmQgPQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggNjVlNjc0ZS4uMjYwOWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC0xNzcsNCArMTc3LDI1IEBACiAjZGVmaW5lIHNjc2lfdW5sb2NrKGhvc3QpCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAjZGVmaW5lIHNjc2lfbG9jayhob3N0KQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAKKy8qIEdlbmVyYWwgcm91dGluZXMgcHJvdmlkZWQgYnkgdGhlIHVzYi1zdG9yYWdlIHN0YW5kYXJkIGNvcmUgKi8KKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworI2Vsc2UKKyNkZWZpbmUgdXNiX3N0b3Jfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHVzYl9zdG9yX3Jlc3VtZQkJTlVMTAorI2RlZmluZSB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTIoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGJkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcworICogVXN1YWwgVGFibGVzIEZpbGUgZm9yIHVzYi1zdG9yYWdlIGFuZCBsaWJ1c3VhbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfdXN1YWwuaD4KKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCisjZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9CisKKyNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoreyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAorICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3RvcmFnZV91c2JfaWRzKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9zdG9yYWdlX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBDT01QTElBTlRfREVWCisjdW5kZWYgVVNVQUxfREVWCisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzIHRvIGlnbm9yZQorICovCitzdHJ1Y3QgaWdub3JlX2VudHJ5IHsKKwl1MTYJdmlkLCBwaWQsIGJjZG1pbiwgYmNkbWF4OworfTsKKworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAorewkJCQkJXAorCS52aWQJPSBpZF92ZW5kb3IsCQlcCisJLnBpZCAJPSBpZF9wcm9kdWN0LAkJXAorCS5iY2RtaW4JPSBiY2REZXZpY2VNaW4sCQlcCisJLmJjZG1heCA9IGJjZERldmljZU1heCwJCVwKK30KKworc3RhdGljIHN0cnVjdCBpZ25vcmVfZW50cnkgaWdub3JlX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKworLyogUmV0dXJuIGFuIGVycm9yIGlmIGEgZGV2aWNlIGlzIGluIHRoZSBpZ25vcmVfaWRzIGxpc3QgKi8KK2ludCB1c2JfdXN1YWxfaWdub3JlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1bnNpZ25lZCB2aWQsIHBpZCwgYmNkOworCXN0cnVjdCBpZ25vcmVfZW50cnkgKnA7CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl2aWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJYmNkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJZm9yIChwID0gaWdub3JlX2lkczsgcC0+dmlkOyArK3ApIHsKKwkJaWYgKHAtPnZpZCA9PSB2aWQgJiYgcC0+cGlkID09IHBpZCAmJgorCQkJCXAtPmJjZG1pbiA8PSBiY2QgJiYgcC0+YmNkbWF4ID49IGJjZCkKKwkJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3VzdWFsX2lnbm9yZV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCBiZTc2MDg0Li42MGJhNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtNDEwLDcgKzQxMCw5IEBACiAJfQogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWluZm8oIlVTQiBTa2VsZXRvbiBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQlNrZWwtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCSAiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsCisJCSBpbnRlcmZhY2UtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC00NDEsNyArNDQzLDcgQEAKIAkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOwogCi0JaW5mbygiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBTa2VsZXRvbiAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKIH0KIAogc3RhdGljIHZvaWQgc2tlbF9kcmF3X2Rvd24oc3RydWN0IHVzYl9za2VsICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKaW5kZXggMTMzNWNiZS4uMjVlYWU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwpAQCAtNjM4LDggKzYzOCw3IEBACiAJdXNiX3B1dF9pbnRmKGlmYWNlKTsKIAlrZnJlZShjYmFmLT5idWZmZXIpOwogCS8qIHBhcmFub2lhOiBjbGVhbiB1cCBjcnlwdG8ga2V5cyAqLwotCW1lbXNldChjYmFmLCAwLCBzaXplb2YoKmNiYWYpKTsKLQlrZnJlZShjYmFmKTsKKwlremZyZWUoY2JhZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjYmFmX2lkX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKaW5kZXggOGUxODE0MS4uZjBhYWMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwpAQCAtODg5LDYgKzg4OSw4IEBACiAJaWYgKHVzYl9kZXYtPnd1c2IgPT0gMCB8fCB1c2JfZGV2LT5kZXZudW0gPT0gMSkKIAkJcmV0dXJuOwkJLyogc2tpcCBub24gd3VzYiBhbmQgd3VzYiBSSHMgKi8KIAorCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpOworCiAJd3VzYmhjID0gd3VzYmhjX2dldF9ieV91c2JfZGV2KHVzYl9kZXYpOwogCWlmICh3dXNiaGMgPT0gTlVMTCkKIAkJZ290byBlcnJvcl9ub2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGY0YWEyOGUuLjgxMThkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMzEyLDYgKzMxMiw3IEBACiAJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgMCk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYWRkcjA7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0RFRkFVTFQpOwogCXVzYl9lcDBfcmVpbml0KHVzYl9kZXYpOwogCiAJLyogU2V0IG5ldyAoYXV0aGVudGljYXRlZCkgYWRkcmVzcy4gKi8KQEAgLTMyNyw2ICszMjgsNyBAQAogCXJlc3VsdCA9IHd1c2Jfc2V0X2Rldl9hZGRyKHd1c2JoYywgd3VzYl9kZXYsIG5ld19hZGRyZXNzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcl9hZGRyOworCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKIAl1c2JfZXAwX3JlaW5pdCh1c2JfZGV2KTsKIAl1c2JfZGV2LT5hdXRoZW50aWNhdGVkID0gMTsKIGVycm9yX2FkZHI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS14ZmVyLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93YS14ZmVyLmMKaW5kZXggMjM4YTk2YS4uNjEzYTVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EteGZlci5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXhmZXIuYwpAQCAtOTIxLDggKzkyMSwxMCBAQAogCXJlc3VsdCA9IC1FTk9ERVY7CiAJLyogRklYTUU6IHNlZ21lbnRhdGlvbiBicm9rZW4gLS0ga2lsbHMgRFdBICovCiAJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CQkvKiBnZXQgYSBXVVNCIGRldiAqLwotCWlmICh1cmItPmRldiA9PSBOVUxMKQorCWlmICh1cmItPmRldiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CiAJCWdvdG8gZXJyb3JfZGV2X2dvbmU7CisJfQogCXd1c2JfZGV2ID0gX193dXNiX2Rldl9nZXRfYnlfdXNiX2Rldih3dXNiaGMsIHVyYi0+ZGV2KTsKIAlpZiAod3VzYl9kZXYgPT0gTlVMTCkgewogCQltdXRleF91bmxvY2soJnd1c2JoYy0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IGJmMGFmNjYuLmZiMTk4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTEwNTQsMTAgKzEwNTQsNyBAQAogCiBjb25maWcgRkJfSTgxMAogCXRyaXN0YXRlICJJbnRlbCA4MTAvODE1IHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUENJICYmIFg4Nl8zMgotCXNlbGVjdCBBR1AKLQlzZWxlY3QgQUdQX0lOVEVMCi0Jc2VsZWN0IEZCCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgRkIgJiYgUENJICYmIFg4Nl8zMiAmJiBBR1BfSU5URUwKIAlzZWxlY3QgRkJfTU9ERV9IRUxQRVJTCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKQEAgLTExMjAsMTAgKzExMTcsNyBAQAogCiBjb25maWcgRkJfSU5URUwKIAl0cmlzdGF0ZSAiSW50ZWwgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85NDVHLzk0NUdNLzk2NUcvOTY1R00gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBQQ0kgJiYgWDg2Ci0Jc2VsZWN0IEZCCi0Jc2VsZWN0IEFHUAotCXNlbGVjdCBBR1BfSU5URUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBGQiAmJiBQQ0kgJiYgWDg2ICYmIEFHUF9JTlRFTAogCXNlbGVjdCBGQl9NT0RFX0hFTFBFUlMKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdGFmYi5jIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCmluZGV4IDgwNTg1NzIuLjAxODg1MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCQl0dF9kbWFzbmQuY3RybCA9IERNQVNORF9DVFJMX09GRjsKIAkJdWRlbGF5KDIwKTsJCS8qIHdhaXQgYSB3aGlsZSBmb3IgdGhpbmdzIHRvIHNldHRsZSBkb3duICovCiAJfQotCW1vbm9fbW9uaSA9IChtZnAucGFyX2R0X3JlZyAmIDB4ODApID09IDA7CisJbW9ub19tb25pID0gKHN0X21mcC5wYXJfZHRfcmVnICYgMHg4MCkgPT0gMDsKIAogCXR0X2dldF9wYXIoJnBhcik7CiAJdHRfZW5jb2RlX3ZhcigmYXRhZmJfcHJlZGVmaW5lZFswXSwgJnBhcik7CkBAIC0yMDM1LDcgKzIwMzUsNyBAQAogCQl0dF9kbWFzbmQuY3RybCA9IERNQVNORF9DVFJMX09GRjsKIAkJdWRlbGF5KDIwKTsJCS8qIHdhaXQgYSB3aGlsZSBmb3IgdGhpbmdzIHRvIHNldHRsZSBkb3duICovCiAJfQotCW1vbm9fbW9uaSA9IChtZnAucGFyX2R0X3JlZyAmIDB4ODApID09IDA7CisJbW9ub19tb25pID0gKHN0X21mcC5wYXJfZHRfcmVnICYgMHg4MCkgPT0gMDsKIAogCXN0c3RlX2dldF9wYXIoJnBhcik7CiAJc3RzdGVfZW5jb2RlX3ZhcigmYXRhZmJfcHJlZGVmaW5lZFswXSwgJnBhcik7CkBAIC0yMDg2LDIwICsyMDg2LDIwIEBACiAJCXJldHVybjsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQltZnAudGltX2N0X2IgPSAweDEwOwotCW1mcC5hY3RpdmVfZWRnZSB8PSA4OwotCW1mcC50aW1fY3RfYiA9IDA7Ci0JbWZwLnRpbV9kdF9iID0gMHhmMDsKLQltZnAudGltX2N0X2IgPSA4OwotCXdoaWxlIChtZnAudGltX2R0X2IgPiAxKQkvKiBUT1MgZG9lcyBpdCB0aGlzIHdheSwgZG9uJ3QgYXNrIHdoeSAqLworCXN0X21mcC50aW1fY3RfYiA9IDB4MTA7CisJc3RfbWZwLmFjdGl2ZV9lZGdlIHw9IDg7CisJc3RfbWZwLnRpbV9jdF9iID0gMDsKKwlzdF9tZnAudGltX2R0X2IgPSAweGYwOworCXN0X21mcC50aW1fY3RfYiA9IDg7CisJd2hpbGUgKHN0X21mcC50aW1fZHRfYiA+IDEpCS8qIFRPUyBkb2VzIGl0IHRoaXMgd2F5LCBkb24ndCBhc2sgd2h5ICovCiAJCTsKLQluZXcgPSBtZnAudGltX2R0X2I7CisJbmV3ID0gc3RfbWZwLnRpbV9kdF9iOwogCWRvIHsKIAkJdWRlbGF5KExJTkVfREVMQVkpOwogCQlvbGQgPSBuZXc7Ci0JCW5ldyA9IG1mcC50aW1fZHRfYjsKKwkJbmV3ID0gc3RfbWZwLnRpbV9kdF9iOwogCX0gd2hpbGUgKG9sZCAhPSBuZXcpOwotCW1mcC50aW1fY3RfYiA9IDB4MTA7CisJc3RfbWZwLnRpbV9jdF9iID0gMHgxMDsKIAl1ZGVsYXkoU1lOQ19ERUxBWSk7CiAKIAlpZiAoYXRhcmlfc3dpdGNoZXMgJiBBVEFSSV9TV0lUQ0hfT1ZTQ19JS0JEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKaW5kZXggZTZlMjk5Zi4uMzVlOGViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCkBAIC0xODUzLDEzICsxODUzLDE0IEBACiAgKiAgSW5pdGlhbGlzYXRpb24KICAqLwogCi0jaWZkZWYgQ09ORklHX1BQQ19QTUFDCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDX19kaXNhYmxlZAogc3RhdGljIHZvaWQgYXR5MTI4X2Vhcmx5X3Jlc3VtZSh2b2lkICpkYXRhKQogewogICAgICAgICBzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIgPSBkYXRhOwogCiAJaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCiAJCXJldHVybjsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwYXItPnBkZXYpOwogCWF0eTEyOF9kb19yZXN1bWUocGFyLT5wZGV2KTsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiB9CkBAIC0xOTA3LDcgKzE5MDgsMTQgQEAKIAkJLyogSW5kaWNhdGUgc2xlZXAgY2FwYWJpbGl0eSAqLwogCQlpZiAocGFyLT5jaGlwX2dlbiA9PSByYWdlX00zKSB7CiAJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9ERVZJQ0VfQ0FOX1dBS0UsIE5VTEwsIDAsIDEpOworI2lmIDAgLyogRGlzYWJsZSB0aGUgZWFybHkgdmlkZW8gcmVzdW1lIGhhY2sgZm9yIG5vdyBhcyBpdCdzIGNhdXNpbmcgcHJvYmxlbXMsIGFtb25nCisgICAgICAgKiBvdGhlcnMgd2Ugbm93IHJlbHkgb24gdGhlIFBDSSBjb3JlIHJlc3RvcmluZyB0aGUgY29uZmlnIHNwYWNlIGZvciB1cywgd2hpY2gKKyAgICAgICAqIGlzbid0IHRoZSBjYXNlIHdpdGggdGhhdCBoYWNrLCBhbmQgdGhhdCBjb2RlIHBhdGggY2F1c2VzIHZhcmlvdXMgdGhpbmdzIHRvCisgICAgICAgKiBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIG9mZiB3aGlsZSB0aGV5IHNob3VsZG4ndC4gSSdtIGxlYXZpbmcgdGhlIGNvZGUgaW4KKyAgICAgICAqIGFzIGl0IGNhbiBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworICAgICAgICovCiAJCQlwbWFjX3NldF9lYXJseV92aWRlb19yZXN1bWUoYXR5MTI4X2Vhcmx5X3Jlc3VtZSwgcGFyKTsKKyNlbmRpZgogCQl9CiAKIAkJLyogRmluZCBkZWZhdWx0IG1vZGUgKi8KQEAgLTIzNjUsNyArMjM3Myw2IEBACiBzdGF0aWMgdm9pZCBhdHkxMjhfc2V0X3N1c3BlbmQoc3RydWN0IGF0eTEyOGZiX3BhciAqcGFyLCBpbnQgc3VzcGVuZCkKIHsKIAl1MzIJcG1ndDsKLQl1MTYJcHdyX2NvbW1hbmQ7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwYXItPnBkZXY7CiAKIAlpZiAoIXBhci0+cG1fcmVnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwppbmRleCBjYTVmMGRjLi5jNmQ3Y2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwpAQCAtMjUwNyw2ICsyNTA3LDI1IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFBDX09GICovCiAKK3N0YXRpYyB2b2lkIHJhZGVvbmZiX3doYWNrX3Bvd2VyX3N0YXRlKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgcGNpX3Bvd2VyX3Qgc3RhdGUpCit7CisJdTE2IHB3cl9jbWQ7CisKKwlmb3IgKDs7KSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJpbmZvLT5wZGV2LAorCQkJCSAgICAgcmluZm8tPnBtX3JlZytQQ0lfUE1fQ1RSTCwKKwkJCQkgICAgICZwd3JfY21kKTsKKwkJaWYgKHB3cl9jbWQgJiAyKQorCQkJYnJlYWs7CisJCXB3cl9jbWQgPSAocHdyX2NtZCAmIH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKSB8IDI7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChyaW5mby0+cGRldiwKKwkJCQkgICAgICByaW5mby0+cG1fcmVnK1BDSV9QTV9DVFJMLAorCQkJCSAgICAgIHB3cl9jbWQpOworCQltc2xlZXAoNTAwKTsKKwl9CisJcmluZm8tPnBkZXYtPmN1cnJlbnRfc3RhdGUgPSBzdGF0ZTsKK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX3NldF9zdXNwZW5kKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IHN1c3BlbmQpCiB7CiAJdTMyIHRtcDsKQEAgLTI1NTgsNiArMjU3NywxMSBAQAogCQkvKiBTd2l0Y2ggUENJIHBvd2VyIG1hbmFnZW1lbnQgdG8gRDIuICovCiAJCXBjaV9kaXNhYmxlX2RldmljZShyaW5mby0+cGRldik7CiAJCXBjaV9zYXZlX3N0YXRlKHJpbmZvLT5wZGV2KTsKKwkJLyogVGhlIGNoaXAgc2VlbXMgdG8gbmVlZCB1cyB0byB3aGFjayB0aGUgUE0gcmVnaXN0ZXIKKwkJICogcmVwZWF0ZWRseSB1bnRpbCBpdCBzdGlja3MuIFdlIGRvIHRoYXQgLXByaW9yLSB0bworCQkgKiBjYWxsaW5nIHBjaV9zZXRfcG93ZXJfc3RhdGUoKQorCQkgKi8KKwkJcmFkZW9uZmJfd2hhY2tfcG93ZXJfc3RhdGUocmluZm8sIFBDSV9EMik7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUocmluZm8tPnBkZXYsIFBDSV9EMik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiICglcyk6IHN3aXRjaGluZyB0byBEMCBzdGF0ZS4uLlxuIiwKQEAgLTI3NjIsMTIgKzI3ODYsMTMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFBDX09GCisjaWZkZWYgQ09ORklHX1BQQ19PRl9fZGlzYWJsZWQKIHN0YXRpYyB2b2lkIHJhZGVvbmZiX2Vhcmx5X3Jlc3VtZSh2b2lkICpkYXRhKQogewogICAgICAgICBzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8gPSBkYXRhOwogCiAJcmluZm8tPm5vX3NjaGVkdWxlID0gMTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShyaW5mby0+cGRldik7CiAJcmFkZW9uZmJfcGNpX3Jlc3VtZShyaW5mby0+cGRldik7CiAJcmluZm8tPm5vX3NjaGVkdWxlID0gMDsKIH0KQEAgLTI4MzQsNyArMjg1OSwxNCBAQAogCQkgKi8KIAkJaWYgKHJpbmZvLT5wbV9tb2RlICE9IHJhZGVvbl9wbV9ub25lKSB7CiAJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9ERVZJQ0VfQ0FOX1dBS0UsIHJpbmZvLT5vZl9ub2RlLCAwLCAxKTsKKyNpZiAwIC8qIERpc2FibGUgdGhlIGVhcmx5IHZpZGVvIHJlc3VtZSBoYWNrIGZvciBub3cgYXMgaXQncyBjYXVzaW5nIHByb2JsZW1zLCBhbW9uZworICAgICAgICogb3RoZXJzIHdlIG5vdyByZWx5IG9uIHRoZSBQQ0kgY29yZSByZXN0b3JpbmcgdGhlIGNvbmZpZyBzcGFjZSBmb3IgdXMsIHdoaWNoCisgICAgICAgKiBpc24ndCB0aGUgY2FzZSB3aXRoIHRoYXQgaGFjaywgYW5kIHRoYXQgY29kZSBwYXRoIGNhdXNlcyB2YXJpb3VzIHRoaW5ncyB0bworICAgICAgICogYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBvZmYgd2hpbGUgdGhleSBzaG91bGRuJ3QuIEknbSBsZWF2aW5nIHRoZSBjb2RlIGluCisgICAgICAgKiBhcyBpdCBjYW4gYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAgICAgICAqLwogCQkJcG1hY19zZXRfZWFybHlfdmlkZW9fcmVzdW1lKHJhZGVvbmZiX2Vhcmx5X3Jlc3VtZSwgcmluZm8pOworI2VuZGlmCiAJCX0KIAogI2lmIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwppbmRleCA2MmJkNDQ0Li4zNzhmMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC00NTcsNyArNDU3LDcgQEAKIAogLyogQVUxMTAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBfX2luaXQgYXUxMTAwZmJfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVnc19yZXM7CkBAIC00NzUsNyArNDc1LDcgQEAKIAogCWZiZGV2LT5wYW5lbCA9ICZrbm93bl9sY2RfcGFuZWxzW2Rydl9pbmZvLnBhbmVsX2lkeF07CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCAodm9pZCopZmJkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgKHZvaWQgKilmYmRldik7CiAKIAkvKiBBbGxvY2F0ZSByZWdpb24gZm9yIG91ciByZWdpc3RlcnMgYW5kIG1hcCB0aGVtICovCiAJaWYgKCEocmVnc19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UodG9fcGxhdGZvcm1fZGV2aWNlKGRldiksCkBAIC01ODMsMTkgKzU4MywxOSBAQAogCQlmYl9kZWFsbG9jX2NtYXAoJmZiZGV2LT5pbmZvLmNtYXApOwogCX0KIAlrZnJlZShmYmRldik7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxMTAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBOVUxMOwogCiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZmJkZXYgPSAoc3RydWN0IGF1MTEwMGZiX2RldmljZSopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWZiZGV2ID0gKHN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogI2lmICFkZWZpbmVkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19MT0dPKQogCWF1MTEwMGZiX2ZiX2JsYW5rKFZFU0FfUE9XRVJET1dOLCAmZmJkZXYtPmluZm8pOwpAQCAtNjIwLDkgKzYyMCw5IEBACiBzdGF0aWMgdTMyIHN5c19jbGtzcmM7CiBzdGF0aWMgc3RydWN0IGF1MTEwMGZiX3JlZ3MgZmJyZWdzOwogCi1pbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIWZiZGV2KQogCQlyZXR1cm4gMDsKQEAgLTY0MSw5ICs2NDEsOSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIWZiZGV2KQogCQlyZXR1cm4gMDsKQEAgLTY2MywxMCArNjYzLDExIEBACiAjZGVmaW5lIGF1MTEwMGZiX2Rydl9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTExMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MTEwMC1sY2QiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTExMDBmYl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImF1MTEwMC1sY2QiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBhdTExMDBmYl9kcnZfcHJvYmUsCiAgICAgICAgIC5yZW1vdmUJCT0gYXUxMTAwZmJfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZAk9IGF1MTEwMGZiX2Rydl9zdXNwZW5kLApAQCAtNzUzLDEyICs3NTQsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CiB9CiAKIHZvaWQgX19leGl0IGF1MTEwMGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKIAogCWtmcmVlKGRydl9pbmZvLm9wdF9tb2RlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwppbmRleCAwM2U1N2VmLi4wZDk2ZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCkBAIC0xNjIyLDcgKzE2MjIsNyBAQAogCiAvKiBBVTEyMDAgTENEIGNvbnRyb2xsZXIgZGV2aWNlIGRyaXZlciAqLwogCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTIwMGZiX2RldmljZSAqZmJkZXY7CiAJdW5zaWduZWQgbG9uZyBwYWdlOwpAQCAtMTY0NSw3ICsxNjQ1LDcgQEAKIAkJLyogQWxsb2NhdGUgdGhlIGZyYW1lYnVmZmVyIHRvIHRoZSBtYXhpbXVtIHNjcmVlbiBzaXplICovCiAJCWZiZGV2LT5mYl9sZW4gPSAod2luLT53W3BsYW5lXS54cmVzICogd2luLT53W3BsYW5lXS55cmVzICogYnBwKSAvIDg7CiAKLQkJZmJkZXYtPmZiX21lbSA9IGRtYV9hbGxvY19ub25jb2hlcmVudChkZXYsCisJCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoJmRldi0+ZGV2LAogCQkJCVBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCiAJCQkJJmZiZGV2LT5mYl9waHlzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFmYmRldi0+ZmJfbWVtKSB7CkBAIC0xNzE1LDcgKzE3MTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwogCWludCBwbGFuZTsKQEAgLTE3MzMsNyArMTczMyw4IEBACiAJCS8qIENsZWFuIHVwIGFsbCBwcm9iZSBkYXRhICovCiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiZGV2LT5mYl9pbmZvKTsKIAkJaWYgKGZiZGV2LT5mYl9tZW0pCi0JCQlkbWFfZnJlZV9ub25jb2hlcmVudChkZXYsIFBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCisJCQlkbWFfZnJlZV9ub25jb2hlcmVudCgmZGV2LT5kZXYsCisJCQkJCVBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCiAJCQkJCWZiZGV2LT5mYl9tZW0sIGZiZGV2LT5mYl9waHlzKTsKIAkJaWYgKGZiZGV2LT5mYl9pbmZvLmNtYXAubGVuICE9IDApCiAJCQlmYl9kZWFsbG9jX2NtYXAoJmZiZGV2LT5mYl9pbmZvLmNtYXApOwpAQCAtMTc0NywyMiArMTc0OCwyNCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIHN0YXRlKQogewogCS8qIFRPRE8gKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTEyMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MTIwMC1sY2QiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMjAwZmJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTEyMDAtbGNkIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxMjAwZmJfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxMjAwZmJfZHJ2X3JlbW92ZSwKICNpZmRlZiBDT05GSUdfUE0KQEAgLTE5MDYsMTIgKzE5MDksMTIgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUG93ZXIgbWFuYWdlbWVudCBkZXZpY2UgZW50cnkgZm9yIHRoZSBhdTEyMDBmYiBsb2FkZWQuXG4iKTsKIAkjZW5kaWYKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF1MTIwMGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXUxMjAwZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKaW5kZXggYTI0ZTY4MC4uMmU5NDAxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwpAQCAtOTkzLDYgKzk5Myw3IEBACiAJc3RydWN0IGk4MTBmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlpbnQgbGluZV9sZW5ndGgsIHZpZG1lbSwgbW9kZV92YWxpZCA9IDAsIHJldHZhbCA9IDA7CiAJdTMyIHZ5cmVzID0gdmFyLT55cmVzX3ZpcnR1YWwsIHZ4cmVzID0gdmFyLT54cmVzX3ZpcnR1YWw7CisKIAkvKgogCSAqICBNZW1vcnkgbGltaXQKIAkgKi8KQEAgLTEwMDIsMTIgKzEwMDMsMTIgQEAKIAlpZiAodmlkbWVtID4gcGFyLT5mYi5zaXplKSB7CiAJCXZ5cmVzID0gcGFyLT5mYi5zaXplL2xpbmVfbGVuZ3RoOwogCQlpZiAodnlyZXMgPCB2YXItPnlyZXMpIHsKLQkJCXZ5cmVzID0geXJlczsKKwkJCXZ5cmVzID0gaW5mby0+dmFyLnlyZXM7CiAJCQl2eHJlcyA9IHBhci0+ZmIuc2l6ZS92eXJlczsKIAkJCXZ4cmVzIC89IHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gMzsKIAkJCWxpbmVfbGVuZ3RoID0gZ2V0X2xpbmVfbGVuZ3RoKHBhciwgdnhyZXMsIAogCQkJCQkJICAgICAgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JCQl2aWRtZW0gPSBsaW5lX2xlbmd0aCAqIHlyZXM7CisJCQl2aWRtZW0gPSBsaW5lX2xlbmd0aCAqIGluZm8tPnZhci55cmVzOwogCQkJaWYgKHZ4cmVzIDwgdmFyLT54cmVzKSB7CiAJCQkJcHJpbnRrKCJpODEwZmI6IHJlcXVpcmVkIHZpZGVvIG1lbW9yeSwgIgogCQkJCSAgICAgICAiJWQgYnl0ZXMsIGZvciAlZHglZC0lZCAodmlydHVhbCkgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9sb2dvL2xvZ29fbGludXhfY2x1dDIyNC5wcG0gYi9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nb19saW51eF9jbHV0MjI0LnBwbQppbmRleCAzYzE0ZTQzLi5kZTkzZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nb19saW51eF9jbHV0MjI0LnBwbQorKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nb19saW51eF9jbHV0MjI0LnBwbQpAQCAtMSwxNjA0ICsxLDI4MjggQEAKIFAzCi0jIFN0YW5kYXJkIDIyNC1jb2xvciBMaW51eCBsb2dvCi04MCA4MAorMTQ1IDExMwogMjU1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDYgICA2ICAgNiAgIDYgICA2ICAgNiAgMTAgIDEwICAxMCAgMTAgIDEwICAxMAotIDEwICAxMCAgMTAgICA2ICAgNiAgIDYgICA2ICAgNiAgIDYgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDEwICAxMCAgMTAgIDE0ICAxNCAgMTQKLSAyMiAgMjIgIDIyICAyNiAgMjYgIDI2ICAzMCAgMzAgIDMwICAzNCAgMzQgIDM0Ci0gMzAgIDMwICAzMCAgMzAgIDMwICAzMCAgMjYgIDI2ICAyNiAgMTggIDE4ICAxOAotIDE0ICAxNCAgMTQgIDEwICAxMCAgMTAgICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDYgICA2ICAgNiAgMTQgIDE0ICAxNCAgMjYgIDI2ICAyNiAgNDIgIDQyICA0MgotIDU0ICA1NCAgNTQgIDY2ICA2NiAgNjYgIDc4ICA3OCAgNzggIDc4ICA3OCAgNzgKLSA3OCAgNzggIDc4ICA3NCAgNzQgIDc0ICA2NiAgNjYgIDY2ICA1NCAgNTQgIDU0Ci0gNDIgIDQyICA0MiAgMjYgIDI2ICAyNiAgMTggIDE4ICAxOCAgMTAgIDEwICAxMAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDEgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAyMiAgMjIgIDIyICA0MiAgNDIgIDQyICA2NiAgNjYgIDY2ICA4NiAgODYgIDg2Ci0gNjYgIDY2ICA2NiAgMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMjIgIDIyICAyMgotIDI2ICAyNiAgMjYgIDM0ICAzNCAgMzQgIDU0ICA1NCAgNTQgIDY2ICA2NiAgNjYKLSA4NiAgODYgIDg2ICA3MCAgNzAgIDcwICA0NiAgNDYgIDQ2ICAyNiAgMjYgIDI2Ci0gMTQgIDE0ICAxNCAgIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMCAgMjYgIDI2ICAyNgotIDUwICA1MCAgNTAgIDgyICA4MiAgODIgIDU4ICA1OCAgNTggICA2ICAgNiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICA2ICAgNiAgIDYgIDU0ICA1NCAgNTQgIDg2ICA4NiAgODYgIDY2ICA2NiAgNjYKLSAzOCAgMzggIDM4ICAxOCAgMTggIDE4ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAyMiAgMjIgIDIyICA1MCAgNTAgIDUwCi0gNzggIDc4ICA3OCAgMzQgIDM0ICAzNCAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDYgICA2ICAgNiAgNzAgIDcwICA3MAotIDc4ICA3OCAgNzggIDQ2ICA0NiAgNDYgIDIyICAyMiAgMjIgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICA2ICAgNiAgIDYgIDE4ICAxOCAgMTggIDQyICA0MiAgNDIgIDgyICA4MiAgODIKLSAyNiAgMjYgIDI2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDE0ICAxNCAgMTQKLSA0NiAgNDYgIDQ2ICAzNCAgMzQgIDM0ICAgNiAgIDYgICA2ICAgMiAgIDIgICA2Ci0gNDIgIDQyICA0MiAgNzggIDc4ICA3OCAgNDIgIDQyICA0MiAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMCAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gMTAgIDEwICAxMCAgMzAgIDMwICAzMCAgNjYgIDY2ICA2NiAgNTggIDU4ICA1OAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMjYgIDI2ICAyNgotIDg2ICA4NiAgODYgMTAxIDEwMSAxMDEgIDQ2ICA0NiAgNDYgIDEwICAxMCAgMTAKLSAgMiAgIDIgICA2ICA1OCAgNTggIDU4ICA3MCAgNzAgIDcwICAzNCAgMzQgIDM0Ci0gMTAgIDEwICAxMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAxNCAgMTQgIDE0ICA0MiAgNDIgIDQyICA4NiAgODYgIDg2ICAxMCAgMTAgIDEwCi0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzMCAgMzAgIDMwCi0gOTQgIDk0ICA5NCAgOTQgIDk0ICA5NCAgNTggIDU4ICA1OCAgMjYgIDI2ICAyNgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDc4ICA3OCAgNzggIDU0ICA1NCAgNTQKLSAyMiAgMjIgIDIyICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDIyICAyMiAgMjIgIDYyICA2MiAgNjIgIDYyICA2MiAgNjIgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDI2ICAyNiAgMjYKLSA1NCAgNTQgIDU0ICAzOCAgMzggIDM4ICAxOCAgMTggIDE4ICAxMCAgMTAgIDEwCi0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgMzQgIDM0ICAzNCAgODIgIDgyICA4MgotIDM4ICAzOCAgMzggIDE0ICAxNCAgMTQgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMzAgIDMwICAzMCAgNzggIDc4ICA3OCAgMzAgIDMwICAzMCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTAgIDEwICAxMAotIDEwICAxMCAgMTAgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA3OCAgNzggIDc4Ci0gNTAgIDUwICA1MCAgMTggIDE4ICAxOCAgIDYgICA2ICAgNiAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzOCAgMzggIDM4ICA4NiAgODYgIDg2ICAxNCAgMTQgIDE0ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDU0ICA1NCAgNTQKLSA2NiAgNjYgIDY2ICAyNiAgMjYgIDI2ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTQgIDE0ICAxNAotIDQyICA0MiAgNDIgIDgyICA4MiAgODIgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgNiAgIDYgICA2ICAxMCAgMTAgIDEwICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICA2ICAgNiAgIDYKLSAxNCAgMTQgIDE0ICAxMCAgMTAgIDEwICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTggIDE4ICAxOAotIDgyICA4MiAgODIgIDM0ICAzNCAgMzQgIDEwICAxMCAgMTAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gNDYgIDQ2ICA0NiAgODYgIDg2ICA4NiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICA2ICAgNiAgIDYgICA2ICAgNiAgIDYgIDIyICAyMiAgMjIgIDM0ICAzNCAgMzQKLSAgNiAgIDYgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTggIDE4ICAxOCAgMzQgIDM0ICAzNAotIDEwICAxMCAgMTAgIDUwICA1MCAgNTAgIDIyICAyMiAgMjIgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAxMCAgMTAgIDEwCi0gODYgIDg2ICA4NiAgNDIgIDQyICA0MiAgMTQgIDE0ICAxNCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSA0NiAgNDYgIDQ2ICA4NiAgODYgIDg2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gMzggIDM4ICAzOCAxMTYgMTE2IDExNiAgOTQgIDk0ICA5NCAgMjIgIDIyICAyMgotIDIyICAyMiAgMjIgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAxNCAgMTQgIDE0ICA4NiAgODYgIDg2IDEzOCAxMzggMTM4IDE2MiAxNjIgMTYyCi0xNTQgMTU0IDE1NCAgMzggIDM4ICAzOCAgMjYgIDI2ICAyNiAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA4NiAgODYgIDg2ICA0NiAgNDYgIDQ2ICAxNCAgMTQgIDE0ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTQgIDE0ICAxNAotIDQ2ICA0NiAgNDYgIDg2ICA4NiAgODYgICAyICAgMiAgIDYgIDE0ICAxNCAgMTQKLTEzNCAxMzQgMTM0IDE5OCAxOTggMTk4IDE5NSAxOTUgMTk1IDExNiAxMTYgMTE2Ci0gMTAgIDEwICAxMCAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDYgICA2ICAgNgotMTAxICA5OCAgODkgMTg3IDE4NyAxODcgMjEwIDIxMCAyMTAgMjE4IDIxOCAyMTgKLTIxNCAyMTQgMjE0IDEzNCAxMzQgMTM0ICAxNCAgMTQgIDE0ICAgNiAgIDYgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDg2ICA4NiAgODYgIDUwICA1MCAgNTAgIDE4ICAxOCAgMTggICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gNDYgIDQ2ICA0NiAgODYgIDg2ICA4NiAgIDIgICAyICAgNiAgNTQgIDU0ICA1NAotMjE4IDIxOCAyMTggMTk1IDE5NSAxOTUgMjI2IDIyNiAyMjYgMjQ2IDI0NiAyNDYKLSA1OCAgNTggIDU4ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzMCAgMzAgIDMwCi0yMTAgMjEwIDIxMCAyNTMgMjUzIDI1MyAxNzQgMTc0IDE3NCAxMjMgMTIzIDEyMwotMjIxIDIyMSAyMjEgMjM0IDIzNCAyMzQgIDc0ICA3NCAgNzQgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNzAgIDcwICA3MCAgNTggIDU4ICA1OCAgMjIgIDIyICAyMiAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSA0NiAgNDYgIDQ2ICA4MiAgODIgIDgyICAgMiAgIDIgICA2IDEwNiAxMDYgMTA2Ci0xNzAgMTcwIDE3MCAgMjYgIDI2ICAyNiAgODYgIDg2ICA4NiAyMjYgMjI2IDIyNgotMTIzIDEyMyAxMjMgIDEwICAxMCAgMTAgIDE0ICAxNCAgMTQgIDQ2ICA0NiAgNDYKLTIzMSAyMzEgMjMxIDE5MCAxOTAgMTkwICAgNiAgIDYgICA2ICA3MCAgNzAgIDcwCi0gOTAgIDkwICA5MCAyMzggMjM4IDIzOCAxNTggMTU4IDE1OCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA3MCAgNzAgIDcwICA1OCAgNTggIDU4ICAyMiAgMjIgIDIyICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTQgIDE0ICAxNAotIDQyICA0MiAgNDIgIDg2ICA4NiAgODYgICA2ICAgNiAgIDYgMTE2IDExNiAxMTYKLTEwNiAxMDYgMTA2ICAgNiAgIDYgICA2ICA3MCAgNzAgIDcwIDE0OSAxNDkgMTQ5Ci0xMjggMTI4IDEyOCAgMTggIDE4ICAxOCAgMzggIDM4ICAzOCAgNTQgIDU0ICA1NAotMjIxIDIyMSAyMjEgMTA2IDEwNiAxMDYgICAyICAgMiAgIDYgIDE0ICAxNCAgMTQKLSA0NiAgNDYgIDQ2IDE5MCAxOTAgMTkwIDE5OCAxOTggMTk4ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDc0ICA3NCAgNzQgIDYyICA2MiAgNjIgIDIyICAyMiAgMjIgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMCAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gNDIgIDQyICA0MiAgOTQgIDk0ICA5NCAgMTQgIDE0ICAxNCAxMDEgMTAxIDEwMQotMTI4IDEyOCAxMjggICAyICAgMiAgIDYgIDE4ICAxOCAgMTggMTE2IDExNiAxMTYKLTExOCAgOTggIDQ2IDEyMSAgOTIgICA4IDEyMSAgOTIgICA4ICA5OCAgNzggIDEwCi0xNjIgMTYyIDE2MiAxMDYgMTA2IDEwNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgMTk1IDE5NSAxOTUgMTk1IDE5NSAxOTUgICA2ICAgNiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNzQgIDc0ICA3NCAgNjIgIDYyICA2MiAgMjIgIDIyICAyMiAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDEgICAwICAgMCAgIDEKLSAgMCAgIDAgICAxICAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzOCAgMzggIDM4ICA5MCAgOTAgIDkwICAxNCAgMTQgIDE0ICA1OCAgNTggIDU4Ci0yMTAgMjEwIDIxMCAgMjYgIDI2ICAyNiAgNTQgIDM4ICAgNiAxNTQgMTE0ICAxMAotMjI2IDE3MCAgMTEgMjM2IDE4NiAgMTEgMjI1IDE3NSAgMTUgMTg0IDE0NCAgMTIKLTIxNSAxNzQgIDE1IDE3NSAxNDYgIDYxICAzNyAgMjYgICA5ICAgMiAgIDIgICA2Ci0gNzAgIDcwICA3MCAyNDYgMjQ2IDI0NiAxMzggMTM4IDEzOCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA3MCAgNzAgIDcwICA2NiAgNjYgIDY2ICAyNiAgMjYgIDI2ICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDM4ICAzOCAgMzggIDg2ICA4NiAgODYgIDE0ICAxNCAgMTQgIDEwICAxMCAgMTAKLTE5NSAxOTUgMTk1IDE4OCAxNjQgMTE1IDE5MiAxMzMgICA5IDIyNSAxNzUgIDE1Ci0yMzkgMTgyICAxMyAyMzQgMTkwICAxMCAyMzIgMTk1ICAxNiAyMzIgMjAwICAzMAotMjQ1IDIwNyAgNDUgMjQxIDIwOCAgMTkgMjMyIDE5NSAgMTYgMTg0IDE0NCAgMTIKLTIxOCAxOTQgMTM0IDIxMSAyMDYgMTg2ICA0MiAgNDIgIDQyICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDUwICA1MCAgNTAgIDc0ICA3NCAgNzQgIDMwICAzMCAgMzAgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMzQgIDM0ICAzNCAgODYgIDg2ICA4NiAgMTQgIDE0ICAxNCAgIDIgICAyICAgNgotMTIxICA4NyAgMjUgMTkyIDEzMyAgIDkgMjE5IDE2MiAgMTAgMjM5IDE4MiAgMTMKLTIzNiAxODYgIDExIDIzMiAxOTUgIDE2IDI0MSAyMDggIDE5IDI0NCAyMTQgIDU0Ci0yNDYgMjE4ICA2MCAyNDYgMjE4ICAzOCAyNDYgMjE1ICAyMCAyNDEgMjA4ICAxOQotMjQxIDIwOCAgMTkgMjI2IDE4NCAgMTMgMTIxICA4NyAgMjUgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNTAgIDUwICA1MCAgODIgIDgyICA4MiAgMzQgIDM0ICAzNCAgMTAgIDEwICAxMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzNCAgMzQgIDM0ICA4MiAgODIgIDgyICAzMCAgMzAgIDMwICA2MSAgNDIgICA2Ci0xODAgMTIzICAgNyAyMDYgMTQ1ICAxMCAyMzAgMTc0ICAxMSAyMzkgMTgyICAxMwotMjM0IDE5MCAgMTAgMjM4IDIwMiAgMTUgMjQxIDIwOCAgMTkgMjQ2IDIxOCAgNzQKLTI0NiAyMTggIDM4IDI0NiAyMTUgIDIwIDI0NiAyMTUgIDIwIDI0NiAyMTUgIDIwCi0yMjYgMTg0ICAxMyAyMTUgMTc0ICAxNSAxODQgMTQ0ICAxMiAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAyNiAgMjYgIDI2ICA5NCAgOTQgIDk0ICA0MiAgNDIgIDQyICAxNCAgMTQgIDE0Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDMwICAzMCAgMzAgIDc4ICA3OCAgNzggIDUwICA1MCAgNTAgMTA0ICA2OSAgIDYKLTE5MiAxMzMgICA5IDIxNiAxNTggIDEwIDIzNiAxNzggIDEyIDIzNiAxODYgIDExCi0yMzIgMTk1ICAxNiAyNDEgMjA4ICAxOSAyNDQgMjE0ICA1NCAyNDUgMjE1ICA0MwotMjQ2IDIxNSAgMjAgMjQ2IDIxNSAgMjAgMjQxIDIwOCAgMTkgMTk4IDE1NSAgMTAKLTIwMCAxNDQgIDExIDIxNiAxNTggIDEwIDE1NiAxMTggIDEwICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICA2ICAgNiAgIDYgIDkwICA5MCAgOTAgIDU0ICA1NCAgNTQgIDE4ICAxOCAgMTgKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMzAgIDMwICAzMCAgNzggIDc4ICA3OCAgNDYgIDQ2ICA0NiAgMjIgIDIyICAyMgotMTM3ICA5MiAgIDYgMjEwIDE2MiAgMTAgMjM5IDE4MiAgMTMgMjM4IDE5MCAgMTAKLTIzOCAyMDIgIDE1IDI0MSAyMDggIDE5IDI0NiAyMTUgIDIwIDI0NiAyMTUgIDIwCi0yNDEgMjA4ICAxOSAyMDMgMTY2ICAxNyAxODUgMTMzICAxMSAyMTAgMTUwICAxMAotMjE2IDE1OCAgMTAgMjEwIDE1MCAgMTAgMTAyICA3OCAgMTAgICAyICAgMiAgIDYKLSAgNiAgIDYgICA2ICA1NCAgNTQgIDU0ICAxNCAgMTQgIDE0ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgNjIgIDYyICA2MiAgNzQgIDc0ICA3NCAgMzAgIDMwICAzMAotIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzNCAgMzQgIDM0ICA3OCAgNzggIDc4ICA1MCAgNTAgIDUwICAgNiAgIDYgICA2Ci0gOTQgIDcwICAzMCAxMzkgMTAyICAxNSAxOTAgMTQ2ICAxMyAyMjYgMTg0ICAxMwotMjMyIDIwMCAgMzAgMjMyIDE5NSAgMTYgMjE1IDE3NCAgMTUgMTkwIDE0NiAgMTMKLTE2OCAxMjIgIDEwIDE5MiAxMzMgICA5IDIxMCAxNTAgIDEwIDIxMyAxNTQgIDExCi0yMDIgMTUwICAzNCAxODIgMTU3IDEwNiAxMDEgIDk4ICA4OSAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDc4ICA3OCAgNzggMTE2IDExNiAxMTYgIDU4ICA1OCAgNTgKLSAgMiAgIDIgICA2ICAyMiAgMjIgIDIyICA5MCAgOTAgIDkwICA0NiAgNDYgIDQ2Ci0gMTggIDE4ICAxOCAgIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDM4ICAzOCAgMzggIDg2ICA4NiAgODYgIDUwICA1MCAgNTAgICA2ICAgNiAgIDYKLTEyOCAxMjggMTI4IDE3NCAxNTQgMTE0IDE1NiAxMDcgIDExIDE2OCAxMjIgIDEwCi0xOTggMTU1ICAxMCAxODQgMTQ0ICAxMiAxOTcgMTM4ICAxMSAyMDAgMTQ0ICAxMQotMjA2IDE0NSAgMTAgMjA2IDE0NSAgMTAgMTk3IDEzOCAgMTEgMTg4IDE2NCAxMTUKLTE5NSAxOTUgMTk1IDE5OCAxOTggMTk4IDE3NCAxNzQgMTc0ICAxNCAgMTQgIDE0Ci0gIDIgICAyICAgNiAgMjIgIDIyICAyMiAxMTYgMTE2IDExNiAxMTYgMTE2IDExNgotIDIyICAyMiAgMjIgICAyICAgMiAgIDYgIDc0ICA3NCAgNzQgIDcwICA3MCAgNzAKLSAzMCAgMzAgIDMwICAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxOCAgMTggIDE4Ci0gNTAgIDUwICA1MCAxMDEgMTAxIDEwMSAgMjYgIDI2ICAyNiAgMTAgIDEwICAxMAotMTM4IDEzOCAxMzggMTkwIDE5MCAxOTAgMTc0IDE1NCAxMTQgMTU2IDEwNyAgMTEKLTE5NyAxMzggIDExIDIwMCAxNDQgIDExIDE5NyAxMzggIDExIDE5MiAxMzMgICA5Ci0xODAgMTIzICAgNyAxOTAgMTQyICAzNCAxOTAgMTc4IDE0NCAxODcgMTg3IDE4NwotMjAyIDIwMiAyMDIgMjIxIDIyMSAyMjEgMjE0IDIxNCAyMTQgIDY2ICA2NiAgNjYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA1MCAgNTAgIDUwICA2MiAgNjIgIDYyCi0gIDYgICA2ICAgNiAgIDIgICAyICAgNiAgMTAgIDEwICAxMCAgOTAgIDkwICA5MAotIDUwICA1MCAgNTAgIDE4ICAxOCAgMTggICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAgIDM0ICAzNCAgMzQKLSA3NCAgNzQgIDc0ICA3NCAgNzQgIDc0ICAgMiAgIDIgICA2ICAgNiAgIDYgICA2Ci0xNDQgMTQ0IDE0NCAxOTggMTk4IDE5OCAxOTAgMTkwIDE5MCAxNzggMTY2IDE0NgotMTU0IDEyMSAgNjAgMTU2IDEwNyAgMTEgMTU2IDEwNyAgMTEgMTY4IDEyNCAgNDQKLTE3NCAxNTQgMTE0IDE4NyAxODcgMTg3IDE5MCAxOTAgMTkwIDIxMCAyMTAgMjEwCi0yNDYgMjQ2IDI0NiAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAxODIgMTgyIDE4MgotICA2ICAgNiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA2MiAgNjIgIDYyCi0gNzQgIDc0ICA3NCAgMzQgIDM0ICAzNCAgMTQgIDE0ICAxNCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgMTAgIDEwICAxMCAgMjIgIDIyICAyMiAgNTQgIDU0ICA1NAotIDk0ICA5NCAgOTQgIDE4ICAxOCAgMTggICAyICAgMiAgIDYgIDQ2ICA0NiAgNDYKLTIzNCAyMzQgMjM0IDIyMSAyMjEgMjIxIDE5MCAxOTAgMTkwIDE5MCAxOTAgMTkwCi0xOTAgMTkwIDE5MCAxODcgMTg3IDE4NyAxODcgMTg3IDE4NyAxOTAgMTkwIDE5MAotMTkwIDE5MCAxOTAgMTk1IDE5NSAxOTUgMjE0IDIxNCAyMTQgMjQyIDI0MiAyNDIKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0gODIgIDgyICA4MiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDE0ICAxNCAgMTQKLSA4NiAgODYgIDg2ICA1NCAgNTQgIDU0ICAyMiAgMjIgIDIyICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAxOCAgMTggIDE4ICA0NiAgNDYgIDQ2ICA5MCAgOTAgIDkwCi0gNDYgIDQ2ICA0NiAgMTggIDE4ICAxOCAgIDYgICA2ICAgNiAxODIgMTgyIDE4MgotMjUzIDI1MyAyNTMgMjQ2IDI0NiAyNDYgMjA2IDIwNiAyMDYgMTkwIDE5MCAxOTAKLTE5MCAxOTAgMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTAgMTkwCi0yMDYgMjA2IDIwNiAyMzEgMjMxIDIzMSAyNTAgMjUwIDI1MCAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTIwMiAyMDIgMjAyICAxNCAgMTQgIDE0ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDQyICA0MiAgNDIgIDg2ICA4NiAgODYgIDQyICA0MiAgNDIgIDE4ICAxOCAgMTgKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDE0ICAxNCAgMTQgIDM4ICAzOCAgMzggIDc0ICA3NCAgNzQgIDY2ICA2NiAgNjYKLSAgMiAgIDIgICA2ICAgNiAgIDYgICA2ICA5MCAgOTAgIDkwIDI1MCAyNTAgMjUwCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzggMjM4IDIzOCAxOTggMTk4IDE5OAotMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTAgMTk1IDE5NSAxOTUgMjIxIDIyMSAyMjEKLTI0NiAyNDYgMjQ2IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgIDgyICA4MiAgODIgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgNzggIDc4ICA3OCAgNzAgIDcwICA3MCAgMzQgIDM0ICAzNAotIDE0ICAxNCAgMTQgICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gMzQgIDM0ICAzNCAgNjYgIDY2ICA2NiAgNzggIDc4ICA3OCAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgIDE4ICAxOCAgMTggMjE4IDIxOCAyMTggMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI0NiAyNDYgMjQ2Ci0yMjYgMjI2IDIyNiAyMzEgMjMxIDIzMSAyNDYgMjQ2IDI0NiAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAxNzggMTc4IDE3OCAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAxOCAgMTggIDE4ICA5MCAgOTAgIDkwICA2MiAgNjIgIDYyCi0gMzAgIDMwICAzMCAgMTAgIDEwICAxMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAgIDI2ICAyNiAgMjYKLSA1OCAgNTggIDU4ICA5MCAgOTAgIDkwICAxOCAgMTggIDE4ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAxMTAgMTEwIDExMCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDIzMSAyMzEgMjMxICAxOCAgMTggIDE4ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDE4ICAxOCAgMTggIDk0ICA5NCAgOTQKLSA1NCAgNTQgIDU0ICAyNiAgMjYgIDI2ICAxMCAgMTAgIDEwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMjIgIDIyICAyMiAgNTAgIDUwICA1MAotIDkwICA5MCAgOTAgIDI2ICAyNiAgMjYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAxNCAgMTQgIDE0IDE5NSAxOTUgMTk1IDI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUwIDI1MCAyNTAgMjQyIDI0MiAyNDIgIDU0ICA1NCAgNTQgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMzggIDM4ICAzOAotIDg2ICA4NiAgODYgIDUwICA1MCAgNTAgIDIyICAyMiAgMjIgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICAzOCAgMzggIDM4ICA4MiAgODIgIDgyCi0gMzQgIDM0ICAzNCAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDQyICA0MiAgNDIgMTk1IDE5NSAxOTUgMjQ2IDI0NiAyNDYgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwCi0yNDIgMjQyIDI0MiAyNDIgMjQyIDI0MiAyNTAgMjUwIDI1MCAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwIDI0NiAyNDYgMjQ2IDIzOCAyMzggMjM4Ci0yMjYgMjI2IDIyNiAyMzEgMjMxIDIzMSAxMDEgMTAxIDEwMSAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gMzggIDM4ICAzOCAgODIgIDgyICA4MiAgNDIgIDQyICA0MiAgMTQgIDE0ICAxNAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDEwICAxMCAgMTAgIDI2ICAyNiAgMjYgIDYyICA2MiAgNjIgIDY2ICA2NiAgNjYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgNiAgIDYgICA2Ci0gNzAgIDcwICA3MCAxNzAgMTcwIDE3MCAyMDYgMjA2IDIwNiAyMzQgMjM0IDIzNAotMjQ2IDI0NiAyNDYgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjM4IDIzOCAyMzgKLTIyNiAyMjYgMjI2IDIzMSAyMzEgMjMxIDIzOCAyMzggMjM4IDI1MCAyNTAgMjUwCi0yNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNDYgMjQ2IDI0NiAyMzEgMjMxIDIzMQotMjE0IDIxNCAyMTQgMjA2IDIwNiAyMDYgMjAyIDIwMiAyMDIgMjAyIDIwMiAyMDIKLTE5OCAxOTggMTk4IDIwMiAyMDIgMjAyIDE4MiAxODIgMTgyICAxOCAgMTggIDE4Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA2MiAgNjIgIDYyICA2NiAgNjYgIDY2ICAzMCAgMzAgIDMwCi0gMTAgIDEwICAxMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gMTQgIDE0ICAxNCAgNDIgIDQyICA0MiAgODIgIDgyICA4MiAgMTggIDE4ICAxOAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDEwICAxMCAgMTAKLSA5NCAgOTQgIDk0IDE4MiAxODIgMTgyIDIxOCAyMTggMjE4IDI0MiAyNDIgMjQyCi0yNTAgMjUwIDI1MCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTAgMjUwIDI1MAotMjM0IDIzNCAyMzQgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI0NiAyNDYgMjQ2Ci0yMzggMjM4IDIzOCAyMjYgMjI2IDIyNiAyMTAgMjEwIDIxMCAyMDIgMjAyIDIwMgotMTk1IDE5NSAxOTUgMTk1IDE5NSAxOTUgMjEwIDIxMCAyMTAgMTU4IDE1OCAxNTgKLSAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICA1MCAgNTAgIDUwICAxNCAgMTQgIDE0Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDg2ICA4NiAgODYgIDQ2ICA0NiAgNDYKLSAxOCAgMTggIDE4ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYKLSAyMiAgMjIgIDIyICA1NCAgNTQgIDU0ICA3MCAgNzAgIDcwICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgMTAgIDEwICAxMCAgIDIgICAyICAgNiAgMjIgIDIyICAyMgotMTY2IDE2NiAxNjYgMjMxIDIzMSAyMzEgMjUwIDI1MCAyNTAgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwCi0yNDIgMjQyIDI0MiAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI0NiAyNDYgMjQ2Ci0yMzEgMjMxIDIzMSAyMDYgMjA2IDIwNiAxOTggMTk4IDE5OCAyMjYgMjI2IDIyNgotIDk0ICA5NCAgOTQgICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDM4ICAzOCAgMzgKLSAzMCAgMzAgIDMwICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgNjIgIDYyICA2MiAgNjYgIDY2ICA2NgotIDI2ICAyNiAgMjYgIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDMwICAzMCAgMzAgIDc0ICA3NCAgNzQgIDUwICA1MCAgNTAgICAyICAgMiAgIDYKLSAyNiAgMjYgIDI2ICAyNiAgMjYgIDI2ICAgMiAgIDIgICA2IDEwNiAxMDYgMTA2Ci0yMzggMjM4IDIzOCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI0NiAyNDYgMjQ2IDIxOCAyMTggMjE4IDIwMiAyMDIgMjAyCi0yMTAgMjEwIDIxMCAgMTQgIDE0ICAxNCAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDMwICAzMCAgMzAgIDIyICAyMiAgMjIgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAxOCAgMTggIDE4ICA4NiAgODYgIDg2Ci0gNDIgIDQyICA0MiAgMTQgIDE0ICAxNCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gNDIgIDQyICA0MiAgOTAgIDkwICA5MCAgMjIgIDIyICAyMiAgIDIgICAyICAgNgotIDQyICA0MiAgNDIgICAyICAgMiAgIDYgIDE4ICAxOCAgMTggMjE4IDIxOCAyMTgKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUwIDI1MCAyNTAgMjIxIDIyMSAyMjEKLTIxOCAyMTggMjE4IDEwMSAxMDEgMTAxICAgMiAgIDIgICA2ICAxNCAgMTQgIDE0Ci0gMTggIDE4ICAxOCAgMzggIDM4ICAzOCAgMTAgIDEwICAxMCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDc4ICA3OCAgNzgKLSA1OCAgNTggIDU4ICAyMiAgMjIgIDIyICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDE4ICAxOCAgMTgKLSA1NCAgNTQgIDU0ICA4MiAgODIgIDgyICAgMiAgIDIgICA2ICAyNiAgMjYgIDI2Ci0gMjIgIDIyICAyMiAgIDIgICAyICAgNiAxMjMgMTIzIDEyMyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTAgMjUwIDI1MAotMjM4IDIzOCAyMzggMTk4IDE5OCAxOTggICA2ICAgNiAgIDYgIDM4ICAzOCAgMzgKLSA1OCAgNTggIDU4ICAyNiAgMjYgIDI2ICAzOCAgMzggIDM4ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgNDYgIDQ2ICA0NgotIDc4ICA3OCAgNzggIDMwICAzMCAgMzAgIDEwICAxMCAgMTAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMCAgMzAgIDMwICAzMAotIDc0ICA3NCAgNzQgIDU4ICA1OCAgNTggICAyICAgMiAgIDYgIDQyICA0MiAgNDIKLSAgMiAgIDIgICA2ICAyMiAgMjIgIDIyIDIzMSAyMzEgMjMxIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUwIDI1MCAyNTAKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNDYgMjQ2IDI0NiAgNDYgIDQ2ICA0NiAgMzggIDM4ICAzOAotIDQyICA0MiAgNDIgIDE0ICAxNCAgMTQgIDM4ICAzOCAgMzggIDE0ICAxNCAgMTQKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgNiAgIDYgICA2Ci0gODYgIDg2ICA4NiAgNDYgIDQ2ICA0NiAgMTQgIDE0ICAxNCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICA0MiAgNDIgIDQyCi0gOTAgIDkwICA5MCAgMTggIDE4ICAxOCAgMTggIDE4ICAxOCAgMjYgIDI2ICAyNgotICAyICAgMiAgIDYgMTE2IDExNiAxMTYgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTAgMjUwIDI1MCAyMzggMjM4IDIzOAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzICA5NCAgOTQgIDk0ICAgNiAgIDYgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTAgIDEwICAxMCAgMzQgIDM0ICAzNAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA3NCAgNzQgIDc0ICA1OCAgNTggIDU4ICAyMiAgMjIgIDIyICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDEwICAxMCAgMTAgIDI2ICAyNiAgMjYgIDY2ICA2NiAgNjYKLSA4MiAgODIgIDgyICAgMiAgIDIgICA2ICAzOCAgMzggIDM4ICAgNiAgIDYgICA2Ci0gMTQgIDE0ICAxNCAyMTAgMjEwIDIxMCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI0NiAyNDYgMjQ2IDI0MiAyNDIgMjQyCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMTQ0IDE0NCAxNDQgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA0NiAgNDYgIDQ2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDQyICA0MiAgNDIgIDc0ICA3NCAgNzQgIDMwICAzMCAgMzAgIDEwICAxMCAgMTAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDYgICA2ICAgNiAgMTQgIDE0ICAxNCAgNDIgIDQyICA0MiAgOTAgIDkwICA5MAotIDI2ICAyNiAgMjYgICA2ICAgNiAgIDYgIDQyICA0MiAgNDIgICAyICAgMiAgIDYKLSA3NCAgNzQgIDc0IDI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjQyIDI0MiAyNDIgMjQyIDI0MiAyNDIKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAxODIgMTgyIDE4MiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDQ2ICA0NiAgNDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gMTAgIDEwICAxMCAgODYgIDg2ICA4NiAgMzggIDM4ICAzOCAgMTAgIDEwICAxMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAxMCAgMTAgIDEwICAyNiAgMjYgIDI2ICA2NiAgNjYgIDY2ICA4MiAgODIgIDgyCi0gIDIgICAyICAgNiAgMjIgIDIyICAyMiAgMTggIDE4ICAxOCAgIDIgICAyICAgNgotMTQ5IDE0OSAxNDkgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzQgMjM0IDIzNCAyNDIgMjQyIDI0MgotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIwNiAyMDYgMjA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMzggIDM4ICAzOAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgNiAgIDYgICA2ICA4NiAgODYgIDg2ICA0NiAgNDYgIDQ2ICAxNCAgMTQgIDE0Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDE4ICAxOCAgMTggIDQ2ICA0NiAgNDYgIDg2ICA4NiAgODYgIDE4ICAxOCAgMTgKLSAgMiAgIDIgICA2ICAzNCAgMzQgIDM0ICAxMCAgMTAgIDEwICAgNiAgIDYgICA2Ci0yMTAgMjEwIDIxMCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzNCAyMzQgMjM0IDI0MiAyNDIgMjQyCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjIxIDIyMSAyMjEgICA2ICAgNiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgNiAgIDYgICA2ICAzMCAgMzAgIDMwCi0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDgyICA4MiAgODIgIDU0ICA1NCAgNTQgIDE4ICAxOCAgMTgKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMjYgIDI2ICAyNiAgNjYgIDY2ICA2NiAgNjIgIDYyICA2MiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDM4ICAzOCAgMzggIDEwICAxMCAgMTAgIDI2ICAyNiAgMjYKLTIzOCAyMzggMjM4IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjMxIDIzMSAyMzEgMjM4IDIzOCAyMzgKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDEwICAxMCAgMTAgIDMwICAzMCAgMzAKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgNjYgIDY2ICA2NiAgNTggIDU4ICA1OCAgMjIgIDIyICAyMgotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzOCAgMzggIDM4ICA3OCAgNzggIDc4ICAgNiAgIDYgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgNDYgIDQ2ICA0NiAgMTQgIDE0ICAxNCAgNDIgIDQyICA0MgotMjQ2IDI0NiAyNDYgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAyNDIgMjQyIDI0MgotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzNCAyMzQgMjM0ICAxMCAgMTAgIDEwCi0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgMjIgIDIyICAyMiAgMTQgIDE0ICAxNAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA2NiAgNjYgIDY2ICA2MiAgNjIgIDYyICAyMiAgMjIgIDIyCi0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMTggIDE4ICAxOAotIDUwICA1MCAgNTAgIDc0ICA3NCAgNzQgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAxNCAgMTQgIDE0ICA3MCAgNzAgIDcwICAzNCAgMzQgIDM0ICA2MiAgNjIgIDYyCi0yNTAgMjUwIDI1MCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzMSAyMzEgMjMxIDI0NiAyNDYgMjQ2Ci0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjM0IDIzNCAyMzQgIDE0ICAxNCAgMTQKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzMCAgMzAgIDMwICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDY2ICA2NiAgNjYgIDYyICA2MiAgNjIgIDIyICAyMiAgMjIKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxOCAgMTggIDE4Ci0gNTQgIDU0ICA1NCAgNjIgIDYyICA2MiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDMwICAzMCAgMzAgIDQ2ICA0NiAgNDYgIDcwICA3MCAgNzAKLTI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjMxIDIzMSAyMzEgMjQ2IDI0NiAyNDYKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMjYgMjI2IDIyNiAgMTAgIDEwICAxMAotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDMwICAzMCAgMzAgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgNjYgIDY2ICA2NiAgNTggIDU4ICA1OCAgMjIgIDIyICAyMgotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDIyICAyMiAgMjIKLSA1OCAgNTggIDU4ICA2MiAgNjIgIDYyICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgMzAgIDMwICAzMCAgNzggIDc4ICA3OAotMjUwIDI1MCAyNTAgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAyNDYgMjQ2IDI0NgotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIwNiAyMDYgMjA2ICAgMiAgIDIgICA2Ci0gMjIgIDIyICAyMiAgMzQgIDM0ICAzNCAgMTggIDE0ICAgNiAgMjIgIDIyICAyMgotIDI2ICAyNiAgMjYgIDE4ICAxOCAgMTggICA2ICAgNiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA4MiAgODIgIDgyICA1NCAgNTQgIDU0ICAxOCAgMTggIDE4Ci0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMjYgIDI2ICAyNgotIDYyICA2MiAgNjIgMTA2IDEwNiAxMDYgIDc0ICA1NCAgMTQgMTg1IDEzMyAgMTEKLTIxMCAxNjIgIDEwIDEyMSAgOTIgICA4ICAgNiAgIDYgICA2ICA2MiAgNjIgIDYyCi0yMzggMjM4IDIzOCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzMSAyMzEgMjMxIDI0NiAyNDYgMjQ2Ci0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMTU4IDE1OCAxNTggIDE4ICAxOCAgMTgKLSAxNCAgMTQgIDE0ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDYgICA2ICAgNiAgMTggIDE4ICAxOCAgNjYgIDY2ICA2NiAgMzggIDM4ICAzOAotICA2ICAgNiAgIDYgIDk0ICA5NCAgOTQgIDUwICA1MCAgNTAgIDE4ICAxOCAgMTgKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYKLSAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAxOCAgMTggIDE4ICAzOCAgMzggIDM4Ci0gNzggIDc4ICA3OCAxNDIgMTM0IDEwNiAyMTYgMTU4ICAxMCAyNDIgMTg2ICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMTU2IDExOCAgMTAgIDEwICAxMCAgMTAKLSA5MCAgOTAgIDkwIDIzOCAyMzggMjM4IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjMxIDIzMSAyMzEgMjUwIDI1MCAyNTAKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI0NiAyMzAgMTkwCi0yMzggMjA0ICA5MSAyMzggMjA0ICA5MSAxODEgMTQyICA0NCAgMzcgIDI2ICAgOQotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzOCAgMzggIDM4ICA0NiAgNDYgIDQ2Ci0gMjYgIDI2ICAyNiAxMDYgMTA2IDEwNiAgNTQgIDU0ICA1NCAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMTQgIDE0ICAxNCAgMjIgIDIyICAyMgotIDMwICAzMCAgMzAgIDM4ICAzOCAgMzggIDUwICA1MCAgNTAgIDcwICA3MCAgNzAKLTEwNiAxMDYgMTA2IDE5MCAxNDIgIDM0IDIyNiAxNzAgIDExIDI0MiAxODYgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAxNTQgMTE0ICAxMAotICA2ICAgNiAgIDYgIDc0ICA3NCAgNzQgMjI2IDIyNiAyMjYgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAyNTAgMjUwIDI1MAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjI4IDE4NCAgNjIKLTI0MSAxOTYgIDE0IDI0MSAyMDggIDE5IDIzMiAxOTUgIDE2ICAzOCAgMzAgIDEwCi0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDMwICAzMCAgMzAgIDI2ICAyNiAgMjYKLTIwMyAxNjYgIDE3IDE1NCAxNDIgIDkwICA2NiAgNjYgIDY2ICAyNiAgMjYgIDI2Ci0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAxOCAgMTggIDE4ICAzOCAgMzggIDM4ICA1OCAgNTggIDU4Ci0gNzggIDc4ICA3OCAgODYgIDg2ICA4NiAxMDEgMTAxIDEwMSAxMjMgMTIzIDEyMwotMTc1IDE0NiAgNjEgMjEwIDE1MCAgMTAgMjM0IDE3NCAgMTMgMjQ2IDE4NiAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDIzOCAxOTAgIDEwCi0xMDIgIDc4ICAxMCAgIDIgICAyICAgNiAgNDYgIDQ2ICA0NiAxOTggMTk4IDE5OAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzNCAyMzQgMjM0IDI0MiAyNDIgMjQyCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMjQgMTc4ICA2MgotMjQyIDE4NiAgMTQgMjQxIDE5NiAgMTQgMjEwIDE2NiAgMTAgIDIyICAxOCAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDYgICA2ICAgNiAxMjEgIDkyICAgOAotMjM4IDIwMiAgMTUgMjMyIDE5NSAgMTYgIDgyICA4MiAgODIgIDM0ICAzNCAgMzQKLSAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDE0ICAxNCAgMTQgIDM4ICAzOCAgMzggIDcwICA3MCAgNzAgMTU0IDEyMiAgNDYKLTE5MCAxNDIgIDM0IDIwMCAxNDQgIDExIDE5NyAxMzggIDExIDE5NyAxMzggIDExCi0yMTMgMTU0ICAxMSAyMjYgMTcwICAxMSAyNDIgMTg2ICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTIyNSAxNzUgIDE1ICA0NiAgMzIgICA2ICAgMiAgIDIgICA2ICAyMiAgMjIgIDIyCi0xNTggMTU4IDE1OCAyNTAgMjUwIDI1MCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwIDI0MiAyNDIgMjQyIDIyNCAxNzggIDYyCi0yMzkgMTgyICAxMyAyMzYgMTg2ICAxMSAyMTMgMTU0ICAxMSAgNDYgIDMyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA2MSAgNDIgICA2IDIyNSAxNzUgIDE1Ci0yMzggMTkwICAxMCAyMzYgMTg2ICAxMSAxMTIgMTAwICA3OCAgNDIgIDQyICA0MgotIDE0ICAxNCAgMTQgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMjIgIDIyICAyMiAgNTQgIDU0ICA1NCAxNTQgMTIyICA0NiAyMTMgMTU0ICAxMQotMjI2IDE3MCAgMTEgMjMwIDE3NCAgMTEgMjI2IDE3MCAgMTEgMjI2IDE3MCAgMTEKLTIzNiAxNzggIDEyIDI0MiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQxIDE5NiAgMTQgMTg0IDE0NCAgMTIgIDEwICAxMCAgMTAgICAyICAgMiAgIDYKLSAgNiAgIDYgICA2IDExNiAxMTYgMTE2IDI0MiAyNDIgMjQyIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjMxIDIzMSAyMzEgMTk4IDE5OCAxOTggMjE0IDE3MCAgNTQKLTIzNiAxNzggIDEyIDIzNiAxNzggIDEyIDIxMCAxNTAgIDEwIDEzNyAgOTIgICA2Ci0gMTggIDE0ICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICA2ICAgNiAgIDYgIDcwICA0NyAgIDYgMjAwIDE0NCAgMTEgMjM2IDE3OCAgMTIKLTIzOSAxODIgIDEzIDIzOSAxODIgIDEzIDEyNCAxMTIgIDg4ICA1OCAgNTggIDU4Ci0gMjIgIDIyICAyMiAgIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzMCAgMzAgIDMwICA3MCAgNzAgIDcwIDE4MCAxMzMgIDM2IDIyNiAxNzAgIDExCi0yMzkgMTgyICAxMyAyNDIgMTg2ICAxNCAyNDIgMTg2ICAxNCAyNDYgMTg2ICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyMzIgMTk1ICAxNiAgOTggIDcwICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDY2ICA2NiAgNjYgMjIxIDIyMSAyMjEKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyMDYgMjA2IDIwNiAxOTggMTk4IDE5OCAyMTQgMTY2ICA1OAotMjMwIDE3NCAgMTEgMjMwIDE3NCAgMTEgMjE2IDE1OCAgMTAgMTkyIDEzMyAgIDkKLTE2MyAxMTAgICA4IDExNiAgODEgICA4IDEwMiAgNzggIDEwIDExNiAgODEgICA4Ci0xNjcgMTE0ICAgNyAxOTcgMTM4ICAxMSAyMjYgMTcwICAxMSAyMzkgMTgyICAxMwotMjQyIDE4NiAgMTQgMjQyIDE4NiAgMTQgMTYyIDE0NiAgOTQgIDc4ICA3OCAgNzgKLSAzNCAgMzQgIDM0ICAxNCAgMTQgIDE0ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDMwICAzMCAgMzAgIDc4ICA3OCAgNzggMTkwIDE0MiAgMzQgMjI2IDE3MCAgMTEKLTIzOSAxODIgIDEzIDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0MSAxOTYgIDE0IDIwMyAxNjYgIDE3ICAyMiAgMTggICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMzggIDM4ICAzOAotMjE4IDIxOCAyMTggMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MCAyNTAgMjUwIDIwNiAyMDYgMjA2IDE5OCAxOTggMTk4IDIwMiAxNjIgIDY5Ci0yMjYgMTcwICAxMSAyMzYgMTc4ICAxMiAyMjQgMTY2ICAxMCAyMTAgMTUwICAxMAotMjAwIDE0NCAgMTEgMTk3IDEzOCAgMTEgMTkyIDEzMyAgIDkgMTk3IDEzOCAgMTEKLTIxMCAxNTAgIDEwIDIyNiAxNzAgIDExIDI0MiAxODYgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTg2ICAxNCAyMjUgMTc1ICAxNSAxMjQgMTEyICA4OAotIDYyICA2MiAgNjIgIDMwICAzMCAgMzAgIDE0ICAxNCAgMTQgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMzAgIDMwICAzMCAgNzggIDc4ICA3OCAxNzQgMTM1ICA1MCAyMjQgMTY2ICAxMAotMjM5IDE4MiAgMTMgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQxIDE5NiAgMTQgMTM5IDEwMiAgMTUKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNzggIDc4ICA3OCAyNTAgMjUwIDI1MCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUwIDI1MCAyNTAgMjE0IDIxNCAyMTQgMTk4IDE5OCAxOTggMTkwIDE1MCAgNDYKLTIxOSAxNjIgIDEwIDIzNiAxNzggIDEyIDIzNCAxNzQgIDEzIDIyNCAxNjYgIDEwCi0yMTYgMTU4ICAxMCAyMTMgMTU0ICAxMSAyMTMgMTU0ICAxMSAyMTYgMTU4ICAxMAotMjI2IDE3MCAgMTEgMjM5IDE4MiAgMTMgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0MiAxODYgIDE0IDIwNiAxNjIgIDQyCi0xMDEgMTAxIDEwMSAgNTggIDU4ICA1OCAgMzAgIDMwICAzMCAgMTQgIDE0ICAxNAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzMCAgMzAgIDMwICA3NCAgNzQgIDc0IDE3NCAxMzUgIDUwIDIxNiAxNTggIDEwCi0yMzYgMTc4ICAxMiAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDEgMTk2ICAxNCAyMjYgMTg0ICAxMwotIDYxICA0MiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAyMiAgMjIgIDIyIDIzOCAyMzggMjM4IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyMjYgMjI2IDIyNiAxODcgMTg3IDE4NyAxODAgMTMzICAzNgotMjE2IDE1OCAgMTAgMjM2IDE3OCAgMTIgMjM5IDE4MiAgMTMgMjM2IDE3OCAgMTIKLTIzMCAxNzQgIDExIDIyNiAxNzAgIDExIDIyNiAxNzAgIDExIDIzMCAxNzQgIDExCi0yMzYgMTc4ICAxMiAyNDIgMTg2ICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE4NiAgMTQgMjM5IDE4MiAgMTMKLTIwNiAxNjIgIDQyIDEwNiAxMDYgMTA2ICA2NiAgNjYgIDY2ICAzNCAgMzQgIDM0Ci0gMTQgIDE0ICAxNCAgIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDI2ICAyNiAgMjYgIDcwICA3MCAgNzAgMTYzIDEzMyAgNjcgMjEzIDE1NCAgMTEKLTIzNiAxNzggIDEyIDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0MSAxOTYgIDE0Ci0xOTAgMTQ2ICAxMyAgMTggIDE0ICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDQ2ICA0NiAgNDYgMjQ2IDI0NiAyNDYgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDIyMSAyMjEgMjIxICA4NiAgODYgIDg2IDE1NiAxMDcgIDExCi0yMTYgMTU4ICAxMCAyMzYgMTc4ICAxMiAyNDIgMTg2ICAxNCAyNDYgMTg2ICAxNAotMjQyIDE4NiAgMTQgMjM5IDE4MiAgMTMgMjM5IDE4MiAgMTMgMjQyIDE4NiAgMTQKLTI0MiAxODYgIDE0IDI0NiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQyIDE4NiAgMTQgMjI1IDE3NSAgMTUgMTQyIDEyMiAgNzIgIDY2ICA2NiAgNjYKLSAzMCAgMzAgIDMwICAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMjYgIDI2ICAyNiAgNzAgIDcwICA3MCAxNjMgMTMzICA2NyAyMTAgMTUwICAxMAotMjM2IDE3OCAgMTIgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTIzMiAxOTUgIDE2IDEyMSAgOTIgICA4ICAzNCAgMzQgIDM0IDEwNiAxMDYgMTA2Ci0yMjEgMjIxIDIyMSAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjQyIDI0MiAyNDIgIDgyICA4MiAgODIgIDE4ICAxNCAgIDYgMTYzIDExMCAgIDgKLTIxNiAxNTggIDEwIDIzNiAxNzggIDEyIDI0MiAxODYgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDIgMTg2ICAxNCAxNjMgMTMzICA2NwotIDQ2ICA0NiAgNDYgIDE4ICAxOCAgMTggICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzMCAgMzAgIDMwICA3OCAgNzggIDc4IDE2MyAxMzMgIDY3IDIxMCAxNTAgIDEwCi0yMzYgMTc4ICAxMiAyNDYgMTg2ICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQxIDE5NiAgMTQgMjE1IDE3NCAgMTUgMTkwIDE3OCAxNDQgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIxOCAyMTggMjE4Ci0gNTggIDU4ICA1OCAgIDIgICAyICAgNiAgMjIgIDE4ICAgNiAxNjcgMTE0ICAgNwotMjE2IDE1OCAgMTAgMjM2IDE3OCAgMTIgMjQ2IDE4NiAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxODYgIDE0IDI0MiAxODYgIDE0IDE5MCAxNTAgIDQ2Ci0gNTQgIDU0ICA1NCAgMjIgIDIyICAyMiAgIDYgICA2ICAgNiAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTQgIDE0ICAxNAotIDM4ICAzOCAgMzggIDg2ICA4NiAgODYgMTgwIDEzMyAgMzYgMjEzIDE1NCAgMTEKLTIzNiAxNzggIDEyIDI0NiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyMzIgMTk1ICAxNiAxOTAgMTQ2ICAxMyAyMTQgMjE0IDIxNAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUwIDI1MCAyNTAgMTcwIDE3MCAxNzAgIDI2ICAyNiAgMjYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzNyAgMjYgICA5IDE2MyAxMTAgICA4Ci0yMTkgMTYyICAxMCAyMzkgMTgyICAxMyAyNDYgMTg2ICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE4NiAgMTQgMjM2IDE3OCAgMTIgMjI0IDE2NiAgMTAgMTQyIDEyMiAgNzIKLSA0NiAgNDYgIDQ2ICAxOCAgMTggIDE4ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxOCAgMTggIDE4Ci0gNTAgIDUwICA1MCAxMDkgMTA2ICA5NSAxOTIgMTMzICAgOSAyMjQgMTY2ICAxMAotMjQyIDE4NiAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0MiAxODYgIDE0IDIyNiAxODQgIDEzIDIxMCAxNjIgIDEwIDE0MiAxMTAgIDQ2Ci0yMjYgMjI2IDIyNiAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0xOTggMTk4IDE5OCAgNjYgIDY2ICA2NiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDUwICAzNCAgIDYgMTU2IDEwNyAgMTEKLTIxOSAxNjIgIDEwIDIzOSAxODIgIDEzIDI0NiAxODYgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0MiAxODYgIDE0Ci0yMzQgMTc0ICAxMyAyMTMgMTU0ICAxMSAxNTQgMTIyICA0NiAgNjYgIDY2ICA2NgotIDMwICAzMCAgMzAgIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDIyICAyMiAgMjIKLSA1OCAgNTggIDU4IDE1NCAxMjEgIDYwIDIwNiAxNDUgIDEwIDIzNCAxNzQgIDEzCi0yNDIgMTg2ICAxNCAyNDYgMTg2ICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE4NiAgMTQgMjM2IDE3OCAgMTIgMjEwIDE2MiAgMTAgMTYzIDExMCAgIDgKLSA2MSAgNDIgICA2IDEzOCAxMzggMTM4IDIxOCAyMTggMjE4IDI1MCAyNTAgMjUwCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTAgMjUwIDI1MAotMjQyIDI0MiAyNDIgMjEwIDIxMCAyMTAgMTQ0IDE0NCAxNDQgIDY2ICA2NiAgNjYKLSAgNiAgIDYgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgNjEgIDQyICAgNiAxNjMgMTEwICAgOAotMjE2IDE1OCAgMTAgMjM2IDE3OCAgMTIgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjM5IDE4MiAgMTMgMjMwIDE3NCAgMTEgMjE2IDE1OCAgMTAKLTE5MCAxNDIgIDM0IDEyNCAxMTIgIDg4ICA3MCAgNzAgIDcwICAzOCAgMzggIDM4Ci0gMTggIDE4ICAxOCAgIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMjIgIDIyICAyMgotIDYyICA2MiAgNjIgMTY4IDEyNCAgNDQgMjA2IDE0NSAgMTAgMjI0IDE2NiAgMTAKLTIzNiAxNzggIDEyIDIzOSAxODIgIDEzIDI0MiAxODYgIDE0IDI0MiAxODYgIDE0Ci0yNDYgMTg2ICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyMzYgMTc4ICAxMiAyMTYgMTU4ICAxMCAxNzUgMTE4ICAgNgotIDgwICA1NCAgIDcgICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDMwICAzMCAgMzAKLSA1NCAgNTQgIDU0ICA2MiAgNjIgIDYyICA1MCAgNTAgIDUwICAzOCAgMzggIDM4Ci0gMTQgIDE0ICAxNCAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgNiAgIDYgICA2ICA4MCAgNTQgICA3IDE2NyAxMTQgICA3Ci0yMTMgMTU0ICAxMSAyMzYgMTc4ICAxMiAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0MiAxODYgIDE0IDIzOSAxODIgIDEzIDIzOSAxODIgIDEzCi0yMzAgMTc0ICAxMSAyMTAgMTUwICAxMCAxNzQgMTM1ICA1MCAxMjQgMTEyICA4OAotIDgyICA4MiAgODIgIDU0ICA1NCAgNTQgIDM0ICAzNCAgMzQgIDE4ICAxOCAgMTgKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxOCAgMTggIDE4Ci0gNTAgIDUwICA1MCAxNTggMTE4ICAzNiAxOTIgMTMzICAgOSAyMDAgMTQ0ICAxMQotMjE2IDE1OCAgMTAgMjE5IDE2MiAgMTAgMjI0IDE2NiAgMTAgMjI2IDE3MCAgMTEKLTIzMCAxNzQgIDExIDIzNiAxNzggIDEyIDIzOSAxODIgIDEzIDIzOSAxODIgIDEzCi0yNDIgMTg2ICAxNCAyNDYgMTg2ICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxODYgIDE0IDIzMCAxNzQgIDExIDIxMCAxNTAgIDEwIDE2MyAxMTAgICA4Ci0xMDQgIDY5ICAgNiAgMTAgIDEwICAxMCAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDkxICA2MCAgIDYgMTY3IDExNCAgIDcKLTIwNiAxNDUgIDEwIDIzMCAxNzQgIDExIDI0MiAxODYgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTg2ICAxNCAyNDIgMTg2ICAxNAotMjM5IDE4MiAgMTMgMjMwIDE3NCAgMTEgMjI0IDE2NiAgMTAgMjEzIDE1NCAgMTEKLTE4MCAxMzMgIDM2IDEyNCAxMTIgIDg4ICA4NiAgODYgIDg2ICA1OCAgNTggIDU4Ci0gMzggIDM4ICAzOCAgMjIgIDIyICAyMiAgMTAgIDEwICAxMCAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSAzNCAgMzQgIDM0ICA3MCAgNzAgIDcwIDEzOCAxMTAgIDUwIDE1OCAxMTggIDM2Ci0xNjcgMTE0ICAgNyAxODAgMTIzICAgNyAxOTIgMTMzICAgOSAxOTcgMTM4ICAxMQotMjAwIDE0NCAgMTEgMjA2IDE0NSAgMTAgMjEzIDE1NCAgMTEgMjE5IDE2MiAgMTAKLTIyNCAxNjYgIDEwIDIzMCAxNzQgIDExIDIzOSAxODIgIDEzIDI0MiAxODYgIDE0Ci0yNDYgMTg2ICAxNCAyNDYgMTg2ICAxNCAyNDYgMTg2ICAxNCAyNDYgMTg2ICAxNAotMjM5IDE4MiAgMTMgMjE2IDE1OCAgMTAgMTg1IDEzMyAgMTEgMTUyICA5OSAgIDYKLTEwNCAgNjkgICA2ICAxOCAgMTQgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDYgICA2ICAgNiAgODAgIDU0ICAgNyAxNTIgIDk5ICAgNgotMTkyIDEzMyAgIDkgMjE5IDE2MiAgMTAgMjM2IDE3OCAgMTIgMjM5IDE4MiAgMTMKLTI0NiAxODYgIDE0IDI0MiAxODYgIDE0IDIzOSAxODIgIDEzIDIzNiAxNzggIDEyCi0yMjQgMTY2ICAxMCAyMDYgMTQ1ICAxMCAxOTIgMTMzICAgOSAxNTQgMTIxICA2MAotIDk0ICA5NCAgOTQgIDYyICA2MiAgNjIgIDQyICA0MiAgNDIgIDIyICAyMiAgMjIKLSAxNCAgMTQgIDE0ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDE4ICAxOCAgMTggIDM0ICAzNCAgMzQgIDU4ICA1OCAgNTggIDc4ICA3OCAgNzgKLTEwMSAgOTggIDg5IDEyNCAxMTIgIDg4IDE0MiAxMTAgIDQ2IDE1NiAxMDcgIDExCi0xNjMgMTEwICAgOCAxNjcgMTE0ICAgNyAxNzUgMTE4ICAgNiAxODAgMTIzICAgNwotMTg1IDEzMyAgMTEgMTk3IDEzOCAgMTEgMjEwIDE1MCAgMTAgMjE5IDE2MiAgMTAKLTIyNiAxNzAgIDExIDIzNiAxNzggIDEyIDIzNiAxNzggIDEyIDIzNCAxNzQgIDEzCi0yMTkgMTYyICAxMCAxOTcgMTM4ICAxMSAxNjMgMTEwICAgOCAxMzAgIDgzICAgNgotIDkxICA2MCAgIDYgIDEwICAxMCAgMTAgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAxOCAgMTggIDE4ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4Ci0gMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4ICAzOAotIDM4ICAzOCAgMzggIDM4ICAzOCAgMzggIDI2ICAyNiAgMjYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgNiAgIDYgICA2ICA3MCAgNDcgICA2IDEzNyAgOTIgICA2Ci0xNzUgMTE4ICAgNiAyMDAgMTQ0ICAxMSAyMTkgMTYyICAxMCAyMzAgMTc0ICAxMQotMjM0IDE3NCAgMTMgMjMwIDE3NCAgMTEgMjE5IDE2MiAgMTAgMjEwIDE1MCAgMTAKLTE5MiAxMzMgICA5IDE2MyAxMTAgICA4IDEyNCAxMTIgIDg4ICA4MiAgODIgIDgyCi0gNTAgIDUwICA1MCAgMzAgIDMwICAzMCAgMTQgIDE0ICAxNCAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDYgICA2ICAgNiAgMTQgIDE0ICAxNCAgMjIgIDIyICAyMiAgMzQgIDM0ICAzNAotIDQyICA0MiAgNDIgIDU4ICA1OCAgNTggIDc0ICA3NCAgNzQgIDg2ICA4NiAgODYKLTEwMSAgOTggIDg5IDEyMiAxMDIgIDcwIDEzMCAgOTggIDQ2IDEyMSAgODcgIDI1Ci0xMzcgIDkyICAgNiAxNTIgIDk5ICAgNiAxNjMgMTEwICAgOCAxODAgMTIzICAgNwotMTg1IDEzMyAgMTEgMTk3IDEzOCAgMTEgMjA2IDE0NSAgMTAgMjAwIDE0NCAgMTEKLTE4MCAxMjMgICA3IDE1NiAxMDcgIDExIDEzMCAgODMgICA2IDEwNCAgNjkgICA2Ci0gNTAgIDM0ICAgNiAgNTQgIDU0ICA1NCAxMTAgMTEwIDExMCAxMDEgIDk4ICA4OQotIDg2ICA4NiAgODYgIDgyICA4MiAgODIgIDc4ICA3OCAgNzggIDc4ICA3OCAgNzgKLSA3OCAgNzggIDc4ICA3OCAgNzggIDc4ICA3OCAgNzggIDc4ICA3OCAgNzggIDc4Ci0gNzggIDc4ICA3OCAgODIgIDgyICA4MiAgODYgIDg2ICA4NiAgOTQgIDk0ICA5NAotMTA2IDEwNiAxMDYgMTAxIDEwMSAxMDEgIDg2ICA2NiAgMzQgMTI0ICA4MCAgIDYKLTE1NiAxMDcgIDExIDE4MCAxMjMgICA3IDE5MiAxMzMgICA5IDIwMCAxNDQgIDExCi0yMDYgMTQ1ICAxMCAyMDAgMTQ0ICAxMSAxOTIgMTMzICAgOSAxNzUgMTE4ICAgNgotMTM5IDEwMiAgMTUgMTA5IDEwNiAgOTUgIDcwICA3MCAgNzAgIDQyICA0MiAgNDIKLSAyMiAgMjIgIDIyICAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxMCAgMTAgIDEwCi0gMTQgIDE0ICAxNCAgMjIgIDIyICAyMiAgMzAgIDMwICAzMCAgMzggIDM4ICAzOAotIDUwICA1MCAgNTAgIDYyICA2MiAgNjIgIDc0ICA3NCAgNzQgIDkwICA5MCAgOTAKLTEwMSAgOTggIDg5IDExMiAxMDAgIDc4IDEyMSAgODcgIDI1IDEyNCAgODAgICA2Ci0xMzcgIDkyICAgNiAxNTIgIDk5ICAgNiAxNTIgIDk5ICAgNiAxNTIgIDk5ICAgNgotMTM4ICA4NiAgIDYgMTI0ICA4MCAgIDYgIDk4ICA3MCAgIDYgIDg2ICA2NiAgMzAKLTEwMSAgOTggIDg5ICA4MiAgODIgIDgyICA1OCAgNTggIDU4ICA0NiAgNDYgIDQ2Ci0gMzggIDM4ICAzOCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzNAotIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQKLSAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzOCAgMzggIDM4ICA0MiAgNDIgIDQyCi0gNTQgIDU0ICA1NCAgODIgIDgyICA4MiAgOTQgIDg2ICA3NiAgOTEgIDYwICAgNgotMTM0ICA4NiAgIDYgMTU2IDEwNyAgMTEgMTY3IDExNCAgIDcgMTc1IDExOCAgIDYKLTE3NSAxMTggICA2IDE2NyAxMTQgICA3IDE1MiAgOTkgICA2IDEyMSAgODcgIDI1Ci0xMDEgIDk4ICA4OSAgNjIgIDYyICA2MiAgMzQgIDM0ICAzNCAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAgNiAgIDYgICA2ICAxMCAgMTAgIDEwCi0gMTggIDE4ICAxOCAgMjIgIDIyICAyMiAgMzAgIDMwICAzMCAgNDIgIDQyICA0MgotIDUwICA1MCAgNTAgIDY2ICA2NiAgNjYgIDg2ICA4NiAgODYgMTAxICA5OCAgODkKLTEwNiAgODYgIDU4ICA5OCAgNzAgICA2IDEwNCAgNjkgICA2IDEwNCAgNjkgICA2Ci0xMDQgIDY5ICAgNiAgOTEgIDYwICAgNiAgODIgIDYyICAzNCAgOTAgIDkwICA5MAotIDYyICA2MiAgNjIgIDM4ICAzOCAgMzggIDIyICAyMiAgMjIgIDE0ICAxNCAgMTQKLSAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDEwCi0gMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgIDYgICA2ICAgNiAgMTAgIDEwICAxMAotIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDE0ICAxNCAgMTQKLSAyMiAgMjIgIDIyICA0MiAgNDIgIDQyICA3MCAgNzAgIDcwICA4OSAgODEgIDY2Ci0gODAgIDU0ICAgNyAxMDQgIDY5ICAgNiAxMjQgIDgwICAgNiAxMzcgIDkyICAgNgotMTM0ICA4NiAgIDYgMTE2ICA4MSAgIDggMTAwICA4MiAgNTIgIDg2ICA4NiAgODYKLSA1OCAgNTggIDU4ICAzMCAgMzAgIDMwICAxNCAgMTQgIDE0ICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxMCAgMTAgIDEwICAxNCAgMTQgIDE0Ci0gMTggIDE4ICAxOCAgMjYgIDI2ICAyNiAgMzggIDM4ICAzOCAgNTQgIDU0ICA1NAotIDcwICA3MCAgNzAgIDg2ICA4NiAgODYgIDk0ICA4NiAgNzYgIDg5ICA4MSAgNjYKLSA4OSAgODEgIDY2ICA4NiAgODYgIDg2ICA3NCAgNzQgIDc0ICA1MCAgNTAgIDUwCi0gMzAgIDMwICAzMCAgMTQgIDE0ICAxNCAgIDYgICA2ICAgNiAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICA2ICAgNiAgIDYgIDE4ICAxOCAgMTggIDM0ICAzNCAgMzQgIDU4ICA1OCAgNTgKLSA4MiAgODIgIDgyICA4OSAgODEgIDY2ICA4OSAgODEgIDY2ICA4OSAgODEgIDY2Ci0gOTQgIDg2ICA2NiAgOTQgIDg2ICA3NiAgNzQgIDc0ICA3NCAgNTAgIDUwICA1MAotIDI2ICAyNiAgMjYgIDE0ICAxNCAgMTQgICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICAxOCAgMTggIDE4Ci0gMzAgIDMwICAzMCAgMzggIDM4ICAzOCAgNDYgIDQ2ICA0NiAgNTQgIDU0ICA1NAotIDUwICA1MCAgNTAgIDQyICA0MiAgNDIgIDMwICAzMCAgMzAgIDE4ICAxOCAgMTgKLSAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMTQgIDE0ICAxNCAgMjYgIDI2ICAyNgotIDM4ICAzOCAgMzggIDUwICA1MCAgNTAgIDU4ICA1OCAgNTggIDU4ICA1OCAgNTgKLSA1NCAgNTQgIDU0ICA0MiAgNDIgIDQyICAzMCAgMzAgIDMwICAxOCAgMTggIDE4Ci0gMTAgIDEwICAxMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYKLSAgNiAgIDYgICA2ICAxMCAgMTAgIDEwICAxNCAgMTQgIDE0ICAxOCAgMTggIDE4Ci0gMTggIDE4ICAxOCAgMTQgIDE0ICAxNCAgMTAgIDEwICAxMCAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMTQgIDE0ICAxNCAgMTggIDE4ICAxOCAgMjIgIDIyICAyMiAgMjIgIDIyICAyMgotIDE4ICAxOCAgMTggIDE0ICAxNCAgMTQgIDEwICAxMCAgMTAgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzIDQgNCAgNiA3IDcKKzggMTAgMTAgIDggMTAgMTAgIDYgOCA4ICA2IDcgNyAgMyA0IDQgIDIgMiAyCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDQgNSA1ICAxNyAxOCAxNworMjcgMjkgMjggIDM1IDM3IDM2ICA0MCA0MyA0MSAgNDMgNDUgNDMgIDQwIDQzIDQxICAzNyAzOSAzNworMzIgMzQgMzMgIDI3IDMwIDI5ICAyMyAyNSAyNCAgMTcgMjEgMjEgIDE1IDE4IDE4ICAxMiAxNSAxNQorMTEgMTMgMTMgIDggMTAgMTAgIDYgNyA3ICAzIDQgNCAgMSAxIDEgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDEzIDEzIDEzICAzMiAzNCAzMyAgNDkgNTEgNDggIDYwIDYwIDU2ICA1OCA1OSA1NQorNTUgNTcgNTQgIDU1IDU2IDUzICA0OSA1MSA0OCAgNDMgNDUgNDMgIDM5IDQwIDM5ICAzMyAzNyAzNQorMjggMzEgMzAgIDIzIDI3IDI2ICAyMCAyMyAyMyAgMTcgMjAgMjAgIDE0IDE3IDE3ICAxMyAxNiAxNgorMTEgMTQgMTQgIDEwIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgNiA3IDcKKzIgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNiA3IDcgIDEyIDE1IDE1CisxMiAxNSAxNSAgOCA5IDkgIDIgMyAzICAwIDAgMCAgMSAxIDEgIDI1IDI3IDI2Cis1NSA1NiA1MyAgNjggNzAgNjUgIDY1IDY2IDYxICA2NSA2NiA2MSAgNjMgNjQgNjAgIDYzIDY0IDYwCis1OCA1OSA1NSAgNTEgNTIgNTAgIDQ3IDQ4IDQ2ICA0MSA0MiA0MiAgMzUgMzcgMzYgIDMwIDMyIDMxCisyNiAyOCAyNyAgMjAgMjQgMjQgIDE4IDIyIDIyICAxNiAxOSAxOSAgMTQgMTcgMTcgIDEzIDE2IDE2CisxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMAorOCA5IDkgIDYgOCA4ICAzIDMgMyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDYgNyA3ICAyMCAyNCAyNCAgMjMgMjcgMjYKKzIzIDI3IDI2ICAxOCAyMiAyMiAgMTEgMTMgMTMgIDIzIDI0IDI0ICA2MSA2MyA1NyAgNzIgNzMgNjcKKzcyIDczIDY3ICA2OCA3MCA2NSAgNjggNzAgNjUgIDY4IDcwIDY1ICA2MyA2NCA2MCAgNTggNTkgNTUKKzU1IDU2IDUzICA0NyA0OCA0NiAgNDEgNDIgNDIgIDM1IDM3IDM2ICAzMCAzMiAzMSAgMjYgMjggMjcKKzIwIDI0IDI0ICAxOCAyMiAyMiAgMTYgMjAgMjAgIDE1IDE5IDE5ICAxNCAxNyAxNyAgMTMgMTYgMTYKKzEyIDE1IDE1ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMQorOCAxMCAxMCAgOCA5IDkgIDcgOSA5ICA2IDcgNyAgMSAyIDIgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEgMSAxICA0IDUgNSAgNSA2IDUgIDQgNSA1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTUgMTkgMTkgIDQwIDQxIDM5ICA1MyA1NSA0NworMzMgMzYgMzQgIDI3IDMwIDI5ICA1MSA1MiA1MCAgNzIgNzMgNjcgIDcyIDczIDY3ICA3MiA3MyA2NworNzIgNzMgNjcgIDY4IDcwIDY1ICA2OCA3MCA2NSAgNjMgNjQgNjAgIDU4IDU5IDU1ICA1MSA1MiA1MAorNDcgNDggNDYgIDQwIDQzIDQxICAzMyAzNyAzNSAgMzAgMzIgMzEgIDI2IDI4IDI3ICAyMCAyNCAyNAorMTggMjIgMjIgIDE3IDIxIDIxICAxNiAxOSAxOSAgMTQgMTggMTggIDE0IDE3IDE3ICAxMyAxNyAxNworMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEzIDEzICAxMCAxMiAxMgorOSAxMSAxMSAgOCAxMCAxMCAgOCA5IDkgIDcgOSA5ICA2IDggOCAgMyA0IDQKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzIgMiAyICA2IDggOCAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIKKzYgOCA4ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAyMCAyMyAyMyAgNzEgNzEgNTcgIDEzMSAxMjcgOTMKKzExNSAxMTMgODIgIDYzIDY0IDYwICA3MiA3MyA2NyAgNzIgNzMgNjcgIDcyIDczIDY3ICA3MiA3MyA2NworNjggNzAgNjUgIDY1IDY2IDYxICA2MSA2MyA1NyAgNTUgNTcgNTQgIDQ5IDUxIDQ4ICA0MyA0NSA0MworMzkgNDAgMzkgIDMzIDM2IDM0ICAyOCAzMSAzMCAgMjMgMjcgMjYgIDIwIDI0IDI0ICAyMCAyMyAyMworMTcgMjEgMjEgIDE2IDIwIDIwICAxNSAxOSAxOSAgMTUgMTggMTggIDE0IDE4IDE4ICAxNCAxNyAxNworMTMgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDExIDE0IDE0ICAxMCAxMyAxMworMTAgMTIgMTIgIDkgMTEgMTEgIDggMTAgMTAgIDcgOSA5ICA3IDkgOSAgNiA4IDgKKzQgNSA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxIDEgMSAgNiA3IDcKKzEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIKKzEwIDEyIDEyICAzIDQgNCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxOCAyMiAyMiAgNzEgNzEgNTcgIDE0NCAxMzkgOTkKKzg0IDgzIDcyICA2OCA3MCA2NSAgNzIgNzMgNjcgIDcyIDczIDY3ICA2OCA3MCA2NSAgNjUgNjYgNjEKKzYzIDY0IDYwICA1NSA1NyA1NCAgNTEgNTIgNTAgIDQ3IDQ4IDQ2ICA0MCA0MyA0MSAgMzUgMzcgMzYKKzMwIDMyIDMxICAyNyAyOSAyOCAgMjMgMjcgMjYgIDIwIDI0IDI0ICAxOCAyMiAyMiAgMTcgMjEgMjEKKzE2IDIwIDIwICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOCAxOCAgMTQgMTggMTgKKzE0IDE3IDE3ICAxMyAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTEgMTQgMTQKKzEwIDEzIDEzICA5IDEyIDEyICA5IDExIDExICA4IDEwIDEwICA3IDkgOSAgNiA4IDgKKzYgOCA4ICAzIDQgNCAgMCAwIDAgIDIgMiAyICA4IDEwIDEwICAxMCAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICAxMSAxMyAxMyAgMzYgMzggMzUgIDYxIDYxIDUzICA0OCA0OSA0NQorMTAgMTIgMTIgIDcgOSA5ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE1IDE5IDE5ICA2MSA2MSA1MyAgODQgODMgNzIKKzY4IDcwIDY1ICA3MiA3MyA2NyAgNjggNzAgNjUgIDY4IDcwIDY1ICA2MyA2NCA2MCAgNTggNTkgNTUKKzUxIDUyIDUwICA0NyA0OCA0NiAgNDEgNDIgNDIgIDM3IDM5IDM3ICAzMiAzNSAzMyAgMjggMzEgMzAKKzIzIDI3IDI2ICAyMCAyNCAyNCAgMjAgMjMgMjMgIDE4IDIyIDIyICAxNyAyMSAyMSAgMTcgMjEgMjEKKzE3IDIxIDIxICAxNyAyMSAyMSAgMTcgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMTkgMTkKKzE1IDE4IDE4ICAxNCAxOCAxOCAgMTMgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTUgMTUKKzExIDE0IDE0ICAxMCAxMyAxMyAgOSAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgNyA5IDkKKzYgOCA4ICA2IDggOCAgNSA2IDUgIDkgMTEgMTEgIDEwIDEyIDEyICAxMCAxMiAxMgorMTkgMjAgMTggIDgyIDgxIDYyICAxNDkgMTQ1IDEwMyAgMTYwIDE1NCAxMDYgIDE0MiAxMzcgOTQgIDk2IDk1IDY5CisxMCAxMiAxMiAgMTAgMTIgMTIgIDEgMSAxICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTAgMTIgMTIgIDQ0IDQ2IDQzICA2OCA3MCA2NQorNzIgNzMgNjcgIDY4IDcwIDY1ICA2OCA3MCA2NSAgNjMgNjQgNjAgIDU1IDU3IDU0ICA0OSA1MSA0OAorNDMgNDUgNDMgIDM5IDQwIDM5ICAzMyAzNyAzNSAgMzAgMzIgMzEgIDI2IDI4IDI3ICAyMyAyNyAyNgorMjAgMjQgMjQgIDE4IDIyIDIyICAxOCAyMiAyMiAgMTggMjIgMjIgIDE4IDIyIDIyICAyMCAyMyAyMworMjAgMjQgMjQgIDIzIDI1IDI0ICAyMyAyNSAyNCAgMjIgMjQgMjMgIDIwIDIzIDIzICAxOCAyMiAyMgorMTcgMjAgMjAgIDE1IDE5IDE5ICAxNSAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTEgMTQgMTQgIDExIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgOCA5IDkKKzcgOSA5ICA3IDkgOSAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgNzEgNzEgNTcKKzE2NCAxNTkgMTExICAxODYgMTgyIDEyOCAgMTg2IDE4MiAxMjggIDE3MSAxNjUgMTE3ICAxNTEgMTQ3IDk4ICA5NiA5NSA2OQorMTAgMTIgMTIgIDEwIDEyIDEyICAzIDMgMyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDggMTAgMTAgIDYzIDY0IDYwICA2OCA3MCA2NQorNzIgNzMgNjcgIDY4IDcwIDY1ICA2MyA2NCA2MCAgNTUgNTcgNTQgIDQ3IDQ4IDQ2ICA0MCA0MyA0MQorMzMgMzcgMzUgIDMwIDMyIDMxICAyNyAyOSAyOCAgMjMgMjcgMjYgIDIwIDI0IDI0ICAyMCAyMyAyMworMTggMjIgMjIgIDE4IDIyIDIyICAyMCAyMyAyMiAgMjEgMjUgMjMgIDIzIDI3IDI2ICAyNyAyOSAyOAorMjggMzEgMzAgIDMxIDMzIDMxICAzMSAzMyAzMSAgMzEgMzMgMzEgIDI4IDMxIDMwICAyNiAyOCAyNworMjMgMjUgMjQgIDIwIDIzIDIyICAxNiAyMCAyMCAgMTUgMTggMTggIDE0IDE3IDE3ICAxMyAxNiAxNgorMTIgMTUgMTUgIDExIDE0IDE0ICAxMCAxMyAxMyAgMTAgMTIgMTIgIDkgMTEgMTEgIDggMTAgMTAKKzEwIDEyIDEyICAxMCAxMyAxMyAgMTAgMTIgMTIgIDEyIDE0IDE0ICA5NiA5NSA2OSAgMTY1IDE2MSAxMDkKKzE4NiAxODIgMTI4ICAxOTIgMTg3IDEzNCAgMTkyIDE4NyAxMzQgIDE3NiAxNzEgMTI2ICAxNjAgMTU0IDEwNiAgMTAzIDEwMSA3NworMTAgMTIgMTIgIDEwIDEyIDEyICA1IDYgNSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDM1IDM3IDM2ICA2OCA3MCA2NSAgNzIgNzMgNjcKKzY4IDcwIDY1ICA2NSA2NiA2MSAgNTggNTkgNTUgIDQ5IDUxIDQ4ICA0MCA0MyA0MSAgMzMgMzcgMzUKKzI4IDMxIDMwICAyMyAyNyAyNiAgMjAgMjQgMjQgIDIwIDIzIDIzICAxOCAyMiAyMiAgMTggMjIgMjIKKzE4IDIyIDIyICAyMCAyMyAyMyAgMjMgMjcgMjYgIDI3IDMwIDI5ICAzMiAzNSAzMyAgMzcgMzkgMzcKKzQwIDQzIDQxICA0NCA0NiA0MyAgNDYgNDcgNDMgIDQ0IDQ2IDQzICA0MCA0MyA0MSAgMzYgMzggMzUKKzMxIDMzIDMxICAyNyAyOSAyOCAgMjIgMjQgMjMgIDE3IDIxIDIxICAxNSAxOCAxOCAgMTQgMTcgMTcKKzEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxMyAxMyAgMTMgMTYgMTYKKzEzIDE2IDE2ICAxMSAxNCAxNCAgMTAgMTIgMTIgIDc5IDc4IDYyICAxNDIgMTM3IDk0ICAxNjQgMTU5IDExMQorMTc4IDE3NCAxMjggIDE5MiAxODcgMTM0ICAxOTIgMTg3IDEzNCAgMTc2IDE3MSAxMjYgIDE2MCAxNTQgMTA2ICA5NiA5NSA2OQorMTAgMTIgMTIgIDEwIDEyIDEyICA2IDcgNyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDU1IDU3IDU0ICA2OCA3MCA2NSAgNzIgNzMgNjcKKzY4IDcwIDY1ICA2MyA2NCA2MCAgNTUgNTYgNTMgIDQzIDQ1IDQzICAzNSAzNyAzNiAgMjggMzEgMzAKKzIzIDI3IDI2ICAyMCAyNCAyNCAgMTggMjIgMjIgIDE3IDIxIDIxICAxNyAyMSAyMSAgMTcgMjEgMjEKKzIwIDI0IDI0ICAyNSAyNyAyNiAgMzEgMzMgMzEgIDM4IDM5IDM3ICA0NiA0NyA0MyAgNTMgNTUgNDcKKzYxIDYxIDUzICA2NiA2NSA1NSAgNjYgNjUgNTUgIDY2IDY1IDU1ICA2MSA2MSA1MyAgNTMgNTUgNDcKKzQ2IDQ3IDQzICAzNyAzOSAzNyAgMzAgMzMgMzAgIDI0IDI2IDI0ICAxNyAyMSAyMSAgMTUgMTggMTgKKzEzIDE3IDE3ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEzIDE2IDE2ICAxNCAxOCAxOCAgMTQgMTggMTgKKzE0IDE3IDE3ICAxMiAxNSAxNSAgMzAgMzEgMjggIDExOCAxMTYgNzYgIDEzNCAxMzEgOTYgIDE2MCAxNTQgMTA2CisxNzQgMTcwIDEyMSAgMTc4IDE3NCAxMjggIDE3OCAxNzQgMTI4ICAxNzEgMTY1IDExNyAgMTUxIDE0NyA5OCAgOTYgOTUgNjkKKzEwIDEyIDEyICAxMCAxMiAxMiAgNiA4IDggIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA2MyA2NCA2MCAgNjggNzAgNjUgIDY4IDcwIDY1Cis2NSA2NiA2MSAgNTggNTkgNTUgIDQ5IDUxIDQ4ICAzOSA0MCAzOSAgMzAgMzIgMzEgIDIzIDI3IDI2CisyMCAyNCAyNCAgMTggMjIgMjIgIDE3IDIxIDIxICAxNiAyMCAyMCAgMTcgMjEgMjEgIDIwIDIzIDIzCisyNSAyNyAyNiAgMzIgMzUgMzMgIDQzIDQ0IDQxICA1MyA1NSA0NyAgNjYgNjUgNTUgIDc1IDc1IDYxCis4MiA4MSA2MiAgODQgODMgNzIgIDg3IDg2IDcyICA4NyA4NiA3MiAgODIgODEgNjIgIDc1IDc1IDYxCis2NiA2NSA1NSAgNTMgNTUgNDcgIDQwIDQxIDM5ICAzMSAzMyAzMSAgMjMgMjUgMjQgIDE3IDIwIDIwCisxNCAxOCAxOCAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTMgMTcgMTcgIDE0IDE4IDE4CisxNCAxOCAxOCAgMTMgMTYgMTYgIDQ2IDQ3IDQzICA5NiA5NSA2OSAgMTI1IDEyMiA4NyAgMTQyIDEzNyA5NAorMTYwIDE1NCAxMDYgIDE2NSAxNjEgMTA5ICAxNjQgMTU5IDExMSAgMTU1IDE0OSAxMDkgIDE0MiAxMzcgOTQgIDc1IDc1IDYxCisxMCAxMiAxMiAgMTAgMTIgMTIgIDYgOCA4ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNjAgNjAgNTYgIDY4IDcwIDY1ICA2OCA3MCA2NQorNjMgNjQgNjAgIDU1IDU3IDU0ICA0NiA0NyA0NSAgMzUgMzcgMzYgIDI3IDMwIDI5ICAyMyAyNSAyNAorMTggMjIgMjIgIDE3IDIxIDIxICAxNiAyMCAyMCAgMTcgMjEgMjEgIDE4IDIyIDIyICAyMyAyNyAyNgorMzEgMzMgMzEgIDQzIDQ0IDQxICA1NSA1NiA1MyAgNzEgNzEgNTcgIDg0IDgzIDcyICA5MiA5MSA3MgorMTAzIDEwMSA3NyAgOTIgOTEgNzIgIDgyIDgxIDYyICA4MiA4MSA2MiAgODcgODYgNzIgIDkyIDkxIDcyCis4NCA4MyA3MiAgNzEgNzEgNTcgIDU1IDU2IDUzICA0MyA0NCA0MSAgMzAgMzMgMzAgIDIyIDI0IDIzCisxNiAxOSAxOSAgMTQgMTcgMTcgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTMgMTYgMTYgIDE0IDE4IDE4CisxNCAxOCAxOCAgMTQgMTcgMTcgIDQzIDQ0IDQxICA4MiA4MSA2MiAgMTE4IDExNiA3NiAgMTI1IDEyMiA4NworMTQyIDEzNyA5NCAgMTQ0IDEzOSA5OSAgMTQ0IDEzOSA5OSAgMTM0IDEzMSA5NiAgMTE4IDExNiA3NiAgNTMgNTUgNDcKKzEwIDEyIDEyICAxMCAxMiAxMiAgNiA4IDggIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA0NyA0OCA0NiAgNjMgNjQgNjAgIDYzIDY0IDYwCis1NSA1NyA1NCAgNDkgNTEgNDggIDQwIDQzIDQxICAzMiAzNCAzMyAgMjYgMjggMjcgIDIwIDI0IDI0CisxOCAyMiAyMiAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNyAyMSAyMSAgMjAgMjQgMjQgIDI4IDMxIDMwCis0MCA0MSAzOSAgNTMgNTUgNDcgIDc1IDc1IDYxICA5MCA4OSA3MyAgODcgODYgNzIgIDQ4IDQ5IDQ1CisxNCAxNCAxMyAgMiAyIDIgIDEgMiAyICAxIDEgMSAgMSAxIDEgIDIgMiAyCisxOSAyMCAxOCAgNDMgNDQgNDEgIDY2IDY1IDU1ICA1MyA1NSA0NyAgMzggMzkgMzcgIDI2IDI4IDI3CisxOCAyMiAyMiAgMTQgMTggMTggIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEzIDE3IDE3CisxNCAxOCAxOCAgMTQgMTggMTggIDMwIDMxIDI4ICA2NiA2NSA1NSAgOTYgOTUgNjkgIDEwMyAxMDEgNzcKKzExOCAxMTYgNzYgIDExOCAxMTYgNzYgIDExOCAxMTYgNzYgIDExOCAxMTYgNzYgIDEwMyAxMDEgNzcgIDM2IDM4IDM1CisxMCAxMiAxMiAgMTAgMTIgMTIgIDYgNyA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMjggMzEgMzAgIDU1IDU3IDU0ICA1MSA1MiA1MAorNDkgNTEgNDggIDQxIDQyIDQyICAzNSAzNyAzNiAgMjggMzEgMzAgIDIzIDI3IDI2ICAyMCAyMyAyMworMTcgMjEgMjEgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTggMjIgMjIgIDIzIDI3IDI2ICAzMyAzNiAzNAorNDggNDkgNDUgIDcxIDcxIDU3ICA4MiA4MSA2MiAgNDMgNDQgNDEgIDggOSA5ICA2IDcgNworNiA3IDcgIDYgNyA3ICA2IDcgNyAgNSA2IDUgIDQgNSA1ICAzIDQgNAorMiAzIDMgIDEgMiAyICA0IDUgNCAgMzYgMzggMzUgIDQ4IDQ5IDQ1ICAzMiAzNSAzMworMjEgMjUgMjMgIDE2IDE5IDE5ICAxMyAxNyAxNyAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNiAxNgorMTQgMTggMTggIDE0IDE4IDE4ICAxNiAxOCAxNiAgMzYgMzggMzUgIDYxIDYxIDUzICA4MiA4MSA2MgorOTYgOTUgNjkgIDk2IDk1IDY5ICA5NiA5NSA2OSAgOTYgOTUgNjkgIDc5IDc4IDYyICAxOSAyMCAxOAorMTAgMTIgMTIgIDEwIDEyIDEyICA0IDUgNSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDEzIDEzIDEzICA0NiA0NyA0NSAgNDMgNDUgNDMKKzQwIDQzIDQxICAzNSAzNyAzNiAgMzAgMzIgMzEgIDIzIDI3IDI2ICAyMCAyNCAyNCAgMTggMjIgMjIKKzE3IDIxIDIxICAxNiAyMCAyMCAgMTcgMjEgMjEgIDIwIDIzIDIzICAyNyAzMCAyOSAgNDAgNDEgMzkKKzYxIDYxIDUzICA1MyA1NSA0NyAgMTYgMTcgMTYgIDkgMTEgMTEgIDEwIDEyIDEyICAxMCAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgOCA5IDkKKzYgOCA4ICA1IDYgNSAgNCA1IDUgIDIgMyAzICAxOSAyMCAxOCAgMzggMzkgMzcKKzI2IDI4IDI3ICAxNyAyMSAyMSAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTUgMTUKKzEzIDE3IDE3ICAxNCAxOCAxOCAgMTIgMTUgMTUgIDEzIDEyIDcgIDMwIDMxIDI4ICA0NiA0NyA0MworNTMgNTUgNDcgIDY2IDY1IDU1ICA2NiA2NSA1NSAgNTMgNTUgNDcgIDM2IDM4IDM1ICAxMCAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICAyIDMgMyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxICAzMyAzNyAzNSAgMzUgMzcgMzYKKzMyIDM1IDMzICAyOCAzMSAzMCAgMjMgMjcgMjYgIDIwIDI0IDI0ICAxOCAyMiAyMiAgMTcgMjEgMjEKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTcgMjEgMjEgIDIxIDI1IDIzICAzMSAzMyAzMSAgNDQgNDYgNDMKKzMxIDMzIDMxICAxMSAxMyAxMyAgMTIgMTQgMTQgIDEyIDE1IDE1ICAxMyAxNiAxNiAgMTQgMTcgMTcKKzE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTQgMTQKKzExIDEzIDEzICA5IDExIDExICA4IDEwIDEwICA2IDggOCAgNCA1IDUgIDE3IDE4IDE3CiszMCAzMyAzMCAgMjAgMjMgMjIgIDE1IDE4IDE4ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDEyIDE0IDE0CisxMyAxNiAxNiAgMTQgMTcgMTcgIDE0IDE4IDE4ICAxMSAxMiAxMSAgNyA3IDUgIDE2IDE3IDEyCisyMSAyMiAyMCAgMzAgMzEgMjggIDI1IDI3IDI1ICAyMSAyMiAyMCAgMTQgMTQgMTMgIDEwIDEyIDEyCisxMCAxMiAxMiAgOSAxMSAxMSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTggMjIgMjIgIDI3IDMwIDI5CisyNyAyOSAyOCAgNDAgNDEgMzkgIDUzIDU1IDQ3ICA1MyA1NSA0NyAgNTMgNTUgNDcgIDQ2IDQ3IDQzCisyNSAyNyAyNSAgMTYgMjAgMjAgIDE3IDIxIDIxICAyMyAyNSAyNCAgMzEgMzMgMzEgIDIwIDIwIDIwCisxMiAxNSAxNSAgMTQgMTcgMTcgIDE1IDE5IDE5ICAxNiAyMCAyMCAgMTcgMjEgMjEgIDE4IDIyIDIyCisxOCAyMiAyMiAgMTggMjIgMjIgIDE4IDIyIDIyICAxNyAyMSAyMSAgMTcgMjEgMjEgIDE2IDE5IDE5CisxNSAxOCAxOCAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMCAxMiAxMiAgOCAxMCAxMCAgNiA4IDgKKzIxIDIyIDIxICAyMiAyNCAyMyAgMTUgMTkgMTkgIDEzIDE3IDE3ICAxMyAxNiAxNiAgMTIgMTUgMTUKKzEyIDE1IDE1ICAxMyAxNyAxNyAgMTQgMTggMTggIDE0IDE4IDE4ICAxMyAxNSAxNCAgMTAgOSA2Cis3IDcgNSAgNyA3IDUgIDcgNyA1ICA5IDExIDExICAxMCAxMiAxMiAgMTAgMTIgMTIKKzEwIDEyIDEyICA2IDcgNyAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTYgMTcgMTIgIDgyIDgxIDYyCisxMTggMTE2IDc2ICAxMTggMTE2IDc2ICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2CisxMTggMTE2IDc2ICA5NiA5NSA2OSAgNTMgNTUgNDcgIDIyIDI0IDIzICAxNCAxNyAxNyAgMTMgMTYgMTYKKzE1IDE5IDE5ICAxNyAyMSAyMSAgMTggMjIgMjIgIDIwIDI0IDI0ICAyMCAyNCAyNCAgMjMgMjcgMjYKKzIzIDI3IDI2ICAyMyAyNyAyNiAgMjMgMjcgMjYgIDIzIDI3IDI2ICAyMyAyNyAyNiAgMjAgMjQgMjQKKzIwIDIzIDIzICAxNyAyMSAyMSAgMTYgMTkgMTkgIDE0IDE3IDE3ICAxMiAxNSAxNSAgMTAgMTIgMTIKKzkgMTEgMTEgIDIwIDIzIDIyICAxNiAxOSAxOSAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTEgMTQgMTQgIDEzIDE2IDE2ICAxNCAxNyAxNyAgMTQgMTggMTggIDE0IDE3IDE3ICAxMiAxNSAxNQorMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMgorOSAxMSAxMSAgMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDUzIDU1IDQ3ICAxNjEgMTU2IDk2CisxNjEgMTU2IDk2ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2ICA5NiA5NSA2OSAgMjEgMjIgMjAgIDE2IDE5IDE5CisxOCAyMiAyMiAgMjAgMjQgMjQgIDIzIDI3IDI2ICAyMyAyNyAyNiAgMjYgMjggMjcgIDI3IDMwIDI5CisyNyAzMCAyOSAgMTggMjIgMjIgIDEyIDE0IDE0ICA4IDEwIDEwICA5IDExIDExICAxNyAyMSAyMQorMjMgMjcgMjYgIDIzIDI3IDI2ICAyMCAyNCAyNCAgMTggMjIgMjIgIDE2IDIwIDIwICAxNCAxNyAxNworMTIgMTQgMTQgIDE0IDE3IDE3ICAxNiAyMCAyMCAgMTQgMTcgMTcgIDEzIDE3IDE3ICAxMyAxNiAxNgorMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNyAxNyAgMTQgMTggMTggIDE0IDE3IDE3ICAxMyAxNiAxNgorMTEgMTMgMTMgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMgorNCA1IDUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDEzIDEyIDcgIDExOCAxMTYgNzYgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDE2MSAxNTYgOTYgIDExOCAxMTYgNzYgIDMwIDMxIDI4CisyMCAyNCAyNCAgMjMgMjcgMjYgIDI3IDMwIDI5ICAyOCAzMSAzMCAgMzAgMzIgMzEgIDIzIDI3IDI2CisxNiAxOSAxOSAgMTcgMjEgMjEgIDEyIDE1IDE1ICA5IDExIDExICAxMCAxMiAxMiAgOSAxMSAxMQorMjAgMjQgMjQgIDI4IDMxIDMwICAyNiAyOCAyNyAgMjMgMjcgMjYgIDIwIDI0IDI0ICAxNyAyMSAyMQorMTUgMTkgMTkgIDEzIDE2IDE2ICAxNiAxOSAxOSAgMTQgMTggMTggIDE0IDE3IDE3ICAxMyAxNiAxNgorMTIgMTUgMTUgIDExIDE0IDE0ICAxMyAxNiAxNiAgMTQgMTcgMTcgIDE0IDE4IDE4ICAxNCAxNyAxNworMTIgMTUgMTUgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICA4IDkgOQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDgyIDgxIDYyICAxNjEgMTU2IDk2ICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzMgMjMzIDEwMCAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTE4IDExNiA3NgorMjcgMjkgMjggIDI3IDMwIDI5ICAzMCAzMiAzMSAgMzAgMzIgMzEgIDIzIDI3IDI2ICAyMCAyNCAyNAorMjYgMjggMjcgIDE3IDIxIDIxICA2IDcgNyAgNzIgNzMgNjcgIDE0NSAxNDEgMTA1ICAxNSAxNSAxNQorMTQgMTcgMTcgIDMzIDM3IDM1ICAzMCAzMiAzMSAgMjggMzEgMzAgIDI2IDI4IDI3ICAyMyAyNyAyNgorMjAgMjMgMjMgIDE2IDIwIDIwICAxNSAxOSAxOSAgMTQgMTggMTggIDE0IDE3IDE3ICAxMyAxNiAxNgorMTIgMTUgMTUgIDExIDE0IDE0ICAxMiAxNSAxNSAgMTMgMTcgMTcgIDE0IDE4IDE4ICAxNCAxNyAxNworMTMgMTYgMTYgIDExIDEzIDEzICAxMCAxMiAxMiAgMTAgMTIgMTIgIDkgMTEgMTEgIDEgMSAxCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAxNiAxNyAxMiAgMTYxIDE1NiA5NiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjQzIDI0MiAxMjAgIDIzNSAyMzQgMTE3ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAxNjEgMTU2IDk2Cis4MiA4MSA2MiAgMjggMzEgMzAgIDI4IDMxIDMwICAyNyAzMCAyOSAgMjggMzEgMzAgIDMwIDMyIDMxCiszMyAzNyAzNSAgMTMgMTYgMTYgIDMgMyAzICAxMDUgMTA0IDkyICAyMTAgMjA4IDE1OCAgMTIgMTQgMTQKKzE3IDIxIDIxICAzMyAzNyAzNSAgMzMgMzcgMzUgIDMyIDM1IDMzICAzMCAzMiAzMSAgMjcgMzAgMjkKKzIzIDI3IDI2ICAyMCAyMyAyMyAgMTcgMjAgMjAgIDE1IDE4IDE4ICAxNCAxOCAxOCAgMTMgMTcgMTcKKzEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEzIDE2IDE2ICAxNCAxNyAxNyAgMTQgMTggMTgKKzEzIDE3IDE3ICAxMiAxNSAxNSAgMTAgMTIgMTIgIDEwIDEyIDEyICAzIDQgNCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDk2IDk1IDY5ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyNDQgMjQ0IDEzMgorMjQxIDI0MSAxNDMgIDI0MyAyNDIgMTIwICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisxNjEgMTU2IDk2ICA0NiA0NyA0MyAgMzIgMzUgMzMgIDMzIDM3IDM1ICAzMyAzNyAzNSAgMzMgMzcgMzUKKzQwIDQzIDQxICAyMyAyNyAyNiAgMSAxIDEgIDIgMiAyICAyNCAyNiAyNCAgMTQgMTcgMTcKKzIzIDI3IDI2ICAzMyAzNyAzNSAgMzMgMzcgMzUgIDMzIDM3IDM1ICAzMyAzNyAzNSAgMzAgMzIgMzEKKzI3IDMwIDI5ICAyMyAyNyAyNiAgMjAgMjMgMjMgIDE1IDE4IDE4ICAxNCAxOCAxOCAgMTQgMTcgMTcKKzEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEyIDE1IDE1ICAxMyAxNyAxNyAgMTQgMTcgMTcKKzE0IDE3IDE3ICAxMyAxNiAxNiAgMTEgMTMgMTMgIDYgOCA4ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMTYgMTcgMTIgIDE2MSAxNTYgOTYgIDIzMCAyMjkgODIgIDIzNSAyMzQgMTE3ICAyMzkgMjM5IDE3MAorMjM5IDIzOSAxNzAgIDIzNiAyMzYgMTAxICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAxMTggMTE2IDc2ICAzMyAzNyAzNSAgMzMgMzcgMzUgIDM3IDM5IDM3ICAzNyAzOSAzNworNDMgNDUgNDMgIDQ5IDUxIDQ4ICAyMCAyNCAyNCAgOCAxMCAxMCAgMTcgMjAgMjAgIDM1IDM3IDM2CiszMyAzNyAzNSAgNDAgNDMgNDEgIDM3IDM5IDM3ICAzNSAzNyAzNiAgMzMgMzcgMzUgIDMzIDM3IDM1CiszMCAzMiAzMSAgMjcgMzAgMjkgIDIzIDI3IDI2ICAxNSAxOSAxOSAgMTQgMTggMTggIDE0IDE3IDE3CisxMyAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTMgMTYgMTYgIDE0IDE3IDE3CisxNCAxNyAxNyAgMTMgMTcgMTcgIDExIDE0IDE0ICA0IDUgNSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDk2IDk1IDY5ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcKKzI0MSAyNDEgMTQzICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAzNiAzOCAzNSAgMzMgMzcgMzUgIDMzIDM3IDM1ICAzMyAzNyAzNQorMzcgMzkgMzcgIDQ3IDQ4IDQ2ICA1NSA1NyA1NCAgNTUgNTcgNTQgIDQ5IDUxIDQ4ICA0MyA0NSA0MworNDMgNDUgNDMgIDQzIDQ1IDQzICA0MCA0MyA0MSAgNDAgNDMgNDEgIDM3IDM5IDM3ICAzMyAzNyAzNQorMzMgMzcgMzUgIDI4IDMxIDMwICAyNiAyOCAyNyAgMTYgMjAgMjAgIDE1IDE4IDE4ICAxNCAxOCAxOAorMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEyIDE1IDE1ICAxMyAxNyAxNworMTQgMTcgMTcgIDE0IDE3IDE3ICA4IDEwIDEwICA1IDcgNyAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTYgMTcgMTIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDI0MyAyNDIgMTIwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI0NiAyNDYgMTIzICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICA2NiA2NSA1NSAgMzAgMzIgMzEgIDMyIDM1IDMzICAzMyAzNyAzNQorMzMgMzcgMzUgIDM3IDM5IDM3ICA0MCA0MyA0MSAgNDcgNDggNDYgIDQ5IDUxIDQ4ICA1MSA1MiA1MAorNTUgNTcgNTQgIDU1IDU3IDU0ICA1MSA1MiA1MCAgNDcgNDggNDYgIDQzIDQ1IDQzICAzOSA0MCAzOQorMzMgMzcgMzUgIDMwIDMyIDMxICAyNiAyOCAyNyAgMTcgMjEgMjEgIDE1IDE5IDE5ICAxNCAxOCAxOAorMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTQgMTQgIDExIDE0IDE0ICAxMyAxNiAxNgorMTQgMTcgMTcgIDEyIDE1IDE1ICA3IDkgOSAgNiA4IDggIDEgMSAxICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzk2IDk1IDY5ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICA5NiA5NSA2OSAgMjcgMzAgMjkgIDI4IDMxIDMwICAzMCAzMiAzMQorMzMgMzcgMzUgIDQwIDQzIDQxICA0NiA0NyA0NSAgNTUgNTcgNTQgIDYzIDY0IDYwICA3MiA3MyA2NworNzIgNzMgNjcgIDcyIDczIDY3ICA3MiA3MyA2NyAgNjUgNjYgNjEgIDU1IDU3IDU0ICA0NyA0OCA0NgorMzkgNDAgMzkgIDMyIDM1IDMzICAyNyAzMCAyOSAgMTcgMjEgMjEgIDE1IDE5IDE5ICAxNSAxOCAxOAorMTQgMTggMTggIDEzIDE3IDE3ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDExIDE0IDE0ICAxMiAxNCAxNAorMTMgMTYgMTYgIDkgMTEgMTEgIDcgOSA5ICA5IDExIDExICA2NiA2NSA1NSAgMTE1IDExMyA4MgorMjEgMjIgMjAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTMgMTIgNworMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjM2IDIzNiAxMDEgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjQ2IDI0NiAxMjMKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDExOCAxMTYgNzYgIDIzIDI3IDI2ICAyNiAyOCAyNyAgMzIgMzUgMzMKKzUxIDUyIDUwICA5MCA4OSA3MyAgMTEwIDEwOSA5NCAgMTQ1IDE0MSAxMDUgIDE2OCAxNjMgMTIwICAxNzcgMTcyIDEzNQorMTc3IDE3MiAxMzUgIDE4OCAxODQgMTQ2ICAxODggMTg0IDE0NiAgMTgxIDE3NiAxMzcgIDE5NCAxOTEgMTQ4ICAxODggMTg0IDE0NgorMTg0IDE3OSAxNDkgIDE4OCAxODQgMTQ2ICAxODggMTg0IDE0NiAgMTU2IDE1MSAxMTEgIDE3NyAxNzIgMTM1ICAxODEgMTc2IDEzNworMTc3IDE3MiAxMzUgIDE2OCAxNjMgMTIwICAxNjggMTYzIDEyMCAgMTU4IDE1MyAxMTIgIDE1NiAxNTEgMTExICAxNTggMTUzIDExMgorMTU2IDE1MSAxMTEgIDE1OCAxNTMgMTEyICAxNzcgMTcyIDEzNSAgMTg4IDE4NCAxNDYgIDE4OCAxODQgMTQ2ICAxOTQgMTg5IDE0NgorMzYgMzggMzUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODIgODEgNjIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDI0NCAyNDQgMTMyICAyNTEgMjUxIDE4NyAgMjQ0IDI0NCAxMzIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDE2MSAxNTYgOTYgIDgyIDgxIDYyCis5NiA5NSA2OSAgMjMwIDIyOSA4MiAgMTgxIDE3OCAxMDMgIDExMCAxMDkgOTQgIDE1NiAxNTEgMTExICAxODggMTg0IDE0NgorMTg4IDE4NCAxNDYgIDE5NyAxOTMgMTU0ICAxODggMTg0IDE0NiAgMTg0IDE4MSAxMzYgIDE4OCAxODQgMTQ2ICAxNjggMTYzIDEyMAorMTY4IDE2MyAxMjAgIDE3OCAxNzQgMTI4ICAxNTYgMTUxIDExMSAgMTU4IDE1MyAxMTIgIDE3NCAxNzAgMTIxICAxNTYgMTUxIDExMQorMTU2IDE1MSAxMTEgIDE1OCAxNTMgMTEyICAxNTYgMTUxIDExMSAgMTY4IDE2MyAxMjAgIDE3OCAxNzQgMTI4ICAxODEgMTc2IDEzNworMTc2IDE3MSAxMjYgIDE3OCAxNzQgMTI4ICAxODQgMTgxIDEzNiAgMTc2IDE3MSAxMjYgIDE3OCAxNzQgMTI4ICAxODQgMTgxIDEzNgorMTc2IDE3MSAxMjYgIDE3OCAxNzQgMTI4ICAxODQgMTgxIDEzNiAgMTY0IDE1OSAxMTEgIDE1NSAxNDkgMTA5ICA5NiA5NSA2OQorMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAyIDIgMSAgMTYxIDE1NiA5NgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjQ0IDI0NCAxMzIgIDI0NCAyNDQgMTMyICAyMzYgMjM2IDEwMSAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgNDYgNDcgNDMgIDgyIDgxIDYyCisxNTggMTUzIDExMiAgMTk3IDE5MyAxNTQgIDE5NCAxODkgMTQ2ICAxODQgMTgxIDEzNiAgMTg4IDE4NCAxNDYgIDE2OCAxNjMgMTIwCisxNTYgMTUxIDExMSAgMTM3IDEzMyAxMDAgIDEzMSAxMjcgOTMgIDEzNyAxMzMgMTAwICAxMzcgMTMzIDEwMCAgMTU4IDE1MyAxMTIKKzEyMSAxMTkgODcgIDEzNyAxMzMgMTAwICAxNTYgMTUxIDExMSAgMTQ1IDE0MSAxMDUgIDk5IDk4IDgwICA4NCA4MyA3MgorNjMgNjQgNjAgIDUyIDUzIDQ5ICA0MCA0MyA0MSAgMzMgMzYgMzQgIDM2IDM4IDM1ICAzNiAzOCAzNQorMzggMzkgMzcgIDQzIDQ0IDQxICA0MyA0NCA0MSAgNDYgNDcgNDMgIDQ4IDQ5IDQ1ICA0OCA0OSA0NQorNDYgNDcgNDMgIDM2IDM4IDM1ICAzMCAzMSAyOCAgMTkgMjAgMTggIDYgNyA3ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzNiAzOCAzNSAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjQ2IDI0NiAxMjMgIDIzNiAyMzYgMTAxICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICA1MyA1NSA0NyAgMTIxIDExOSA4NworMTc2IDE3MSAxMjYgIDE3MSAxNjUgMTE3ICAxNjEgMTU2IDk2ICA4MiA4MSA2MiAgNTMgNTUgNDcgIDMzIDM3IDM1CiszOSA0MCAzOSAgNjMgNjQgNjAgIDk5IDk4IDgwICAxMjEgMTE5IDg3ICAxMzcgMTMzIDEwMCAgMTc3IDE3MiAxMzUKKzE3NiAxNzEgMTI2ICAxODQgMTgxIDEzNiAgMTMxIDEyNyA5MyAgMTMxIDEyNyA5MyAgMTEwIDEwOSA5NCAgODQgODMgNzIKKzUxIDUyIDUwICAzOSA0MCAzOSAgMjcgMjkgMjggIDE4IDIyIDIyICAxNiAxOSAxOSAgMTUgMTkgMTkKKzE1IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTQgMTQKKzEwIDEzIDEzICA5IDEyIDEyICA5IDExIDExICA4IDkgOSAgNyA5IDkgIDEgMSAxCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDExOCAxMTYgNzYgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzNiAyMzYgMTAxICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICA5NiA5NSA2OSAgNzEgNzEgNTcKKzM2IDM4IDM1ICAxMTggMTE2IDc2ICAxMTggMTE2IDc2ICAxMiAxNSAxNSAgMTUgMTggMTggIDIwIDI0IDI0CiszMyAzNyAzNSAgNTUgNTYgNTMgIDg0IDgzIDcyICAxMTAgMTA5IDk0ICAxNDUgMTQxIDEwNSAgMTEwIDEwOSA5NAorMTY4IDE2MyAxMjAgIDEyMSAxMTkgODcgIDE1NiAxNTEgMTExICAxMzEgMTI3IDkzICA4NyA4NiA3MiAgNjEgNjMgNTcKKzQ3IDQ4IDQ2ICAyOCAzMSAzMCAgMTggMjIgMjIgIDE1IDE5IDE5ICAxNSAxOCAxOCAgMTUgMTkgMTkKKzE1IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE3IDE3ICAxMyAxNiAxNiAgMTIgMTUgMTUKKzExIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgNyA5IDkgIDMgMyAzCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMSAxIDAgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDE2MSAxNTYgOTYKKzE2MSAxNTYgOTYgIDIzMCAyMjkgODIgIDExOCAxMTYgNzYgIDExIDE0IDE0ICAxNCAxNyAxNyAgMTggMjIgMjIKKzI3IDMwIDI5ICA0MCA0MyA0MSAgNjAgNjAgNTYgIDg0IDgzIDcyICAxMDUgMTA0IDkyICAxMTAgMTA5IDk0CisxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICA5OSA5OCA4MCAgOTAgODkgNzMgIDY4IDcwIDY1ICA0NyA0OCA0NgorMzIgMzQgMzMgIDIzIDI1IDI0ICAyMCAyMyAyMyAgMTcgMjEgMjEgIDE1IDE5IDE5ICAxNCAxNyAxNworMTUgMTkgMTkgIDE1IDE4IDE4ICAxNCAxOCAxOCAgMTMgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTEgMTQgMTQgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA3IDkgOSAgNCA1IDUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxNiAxNyAxMiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTE4IDExNiA3NiAgMTEgMTMgMTMgIDEzIDE2IDE2ICAxNSAxOSAxOQorMjAgMjQgMjQgIDMwIDMyIDMxICA0MCA0MyA0MSAgNTEgNTIgNTAgIDYzIDY0IDYwICA3MiA3MyA2NworNjUgNjYgNjEgIDY1IDY2IDYxICA2NSA2NiA2MSAgNTUgNTcgNTQgIDQ2IDQ3IDQ1ICAzMyAzNyAzNQorMjcgMjkgMjggIDIwIDI0IDI0ICAxNyAyMSAyMSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNSAxOSAxOQorMTUgMTkgMTkgIDE1IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTEgMTQgMTQgIDEwIDEzIDEzICA5IDEyIDEyICA4IDEwIDEwICA3IDkgOSAgNiA3IDcKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA1MyA1NSA0NyAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMTYxIDE1NiA5NiAgMTE4IDExNiA3NiAgNTMgNTUgNDcgIDEwIDEzIDEzICAxMiAxNSAxNSAgMTQgMTcgMTcKKzE3IDIwIDIwICAyMCAyNCAyNCAgMjcgMjkgMjggIDMyIDM0IDMzICAzNyAzOSAzNyAgNDAgNDMgNDEKKzQzIDQ1IDQzICA0MSA0MiA0MiAgMzUgMzcgMzYgIDMwIDMyIDMxICAyOCAzMSAzMCAgMjMgMjcgMjYKKzIwIDIzIDIzICAxNyAyMSAyMSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMTkgMTkKKzE1IDE5IDE5ICAxNSAxOSAxOSAgMTQgMTggMTggIDE0IDE3IDE3ICAxMyAxNiAxNiAgMTIgMTUgMTUKKzExIDE0IDE0ICAxMCAxMyAxMyAgOSAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgMTAgMTIgMTIKKzEgMSAxICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4MiA4MSA2MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTYxIDE1NiA5NgorMTE4IDExNiA3NiAgODIgODEgNjIgIDEzIDE0IDEyICAxMCAxMyAxMyAgMTIgMTUgMTUgIDEzIDE3IDE3CisxNSAxOSAxOSAgMTYgMjAgMjAgIDIwIDIzIDIzICAyMCAyNCAyNCAgMjMgMjcgMjYgIDI2IDI4IDI3CisyNiAyOCAyNyAgMjYgMjggMjcgIDIzIDI3IDI2ICAxOCAyMiAyMiAgMjAgMjMgMjMgIDE3IDIxIDIxCisxNyAyMSAyMSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDE5IDE5CisxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNCAxNyAxNyAgMTMgMTcgMTcgIDEzIDE2IDE2CisxMiAxNSAxNSAgMTIgMTQgMTQgIDEyIDE0IDE0ICAxMiAxNCAxNCAgMTIgMTQgMTQgIDIzIDI0IDI0Cis2IDggOCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTE4IDExNiA3NiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTYxIDE1NiA5NiAgMTE4IDExNiA3NgorNzEgNzEgNTcgIDEzIDE0IDEyICA5IDEyIDEyICAxMCAxMyAxMyAgMTIgMTUgMTUgIDEzIDE3IDE3CisxNSAxOCAxOCAgMTUgMTkgMTkgIDE2IDIwIDIwICAxNyAyMSAyMSAgMTcgMjEgMjEgIDE4IDIyIDIyCisxOCAyMiAyMiAgMTggMjIgMjIgIDE3IDIxIDIxICAxNiAxOSAxOSAgMTUgMTggMTggIDE0IDE4IDE4CisxNiAxOSAxOSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNCAxOCAxOCAgMTYgMjAgMjAgIDIzIDI1IDI0CisxNyAyMSAyMSAgMjUgMjcgMjYgIDQ3IDQ4IDQ2ICA0NyA0OCA0NiAgNTEgNTIgNTAgIDcyIDczIDY3CiszMyAzNiAzNCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTE4IDExNiA3NiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTE4IDExNiA3NiAgMTE4IDExNiA3NiAgNDYgNDcgNDMKKzkgMTEgMTEgIDkgMTEgMTEgIDEwIDEyIDEyICAxMSAxMyAxMyAgMTIgMTUgMTUgIDE0IDE3IDE3CisxNSAxOCAxOCAgMTUgMTkgMTkgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNSAxOSAxOSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNSAxOSAxOSAgMTYgMjAgMjAgIDIwIDI0IDI0ICA1NSA1NiA1MyAgMzIgMzQgMzMgIDg0IDgzIDcyCis5MCA4OSA3MyAgMTEwIDEwOSA5NCAgMTEwIDEwOSA5NCAgMTA1IDEwNCA5MiAgMTEwIDEwOSA5NCAgMTEwIDEwOSA5NAorNzIgNzMgNjcgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDk2IDk1IDY5ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2ICA4MiA4MSA2MiAgMTYgMTcgMTIgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTIgMTIgIDEwIDEzIDEzICAxMiAxNCAxNCAgMTMgMTYgMTYgIDE0IDE4IDE4CisxNSAxOSAxOSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAxOSAxOSAgMzMgMzYgMzQgIDk5IDk4IDgwICAxNTYgMTUxIDExMSAgMTQ1IDE0MSAxMDUgIDE4NCAxNzkgMTQ5CisxNjggMTYzIDEyMCAgMTg0IDE3OSAxNDkgIDE3NyAxNzIgMTM1ICAxNTYgMTUxIDExMSAgMTQ1IDE0MSAxMDUgIDExMCAxMDkgOTQKKzkwIDg5IDczICAyIDIgMiAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA3MSA3MSA1NyAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NgorMTE4IDExNiA3NiAgODIgODEgNjIgIDMwIDMxIDI4ICA5IDExIDExICA5IDExIDExICA5IDExIDExCisxMCAxMiAxMiAgMTAgMTMgMTMgIDExIDE0IDE0ICAxMyAxNiAxNiAgMTQgMTcgMTcgIDE1IDE4IDE4CisxNSAxOSAxOSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxOCAyMiAyMiAgNTggNTkgNTUgIDEzNyAxMzMgMTAwICAxOTcgMTkzIDE1NCAgMjE0IDIxMiAxNTggIDIxMCAyMDggMTU4CisxOTcgMTkzIDE1NCAgMTg0IDE3OSAxNDkgIDE4NCAxNzkgMTQ5ICAxMzcgMTMzIDEwMCAgMTEwIDEwOSA5NCAgOTkgOTggODAKKzg0IDgzIDcyICAxMCAxMCA5ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE2IDE3IDEyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAxNjEgMTU2IDk2CisxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2ICA3MSA3MSA1NworMjEgMjIgMjAgIDEyIDE0IDE0ICAxMSAxMyAxMyAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMyAxMworMTEgMTMgMTMgIDEyIDE1IDE1ICAxMyAxNiAxNiAgMTQgMTcgMTcgIDE0IDE4IDE4ICAxNSAxOSAxOQorMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNyAyMSAyMQorMjMgMjcgMjYgIDg0IDgzIDcyICAxODQgMTc5IDE0OSAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxODQgMTc5IDE0OQorMTg0IDE3OSAxNDkgIDE1NiAxNTEgMTExICAxMTAgMTA5IDk0ICA4NCA4MyA3MiAgNjMgNjQgNjAgIDUxIDUyIDUwCisxOCAyMiAyMiAgNiA4IDggIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDExOCAxMTYgNzYgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDE2MSAxNTYgOTYgIDE2MSAxNTYgOTYKKzE2MSAxNTYgOTYgIDE2MSAxNTYgOTYgIDExOCAxMTYgNzYgIDUzIDU1IDQ3ICAyMCAyMyAyMiAgMTYgMTkgMTkKKzEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQKKzEyIDE1IDE1ICAxMyAxNiAxNiAgMTQgMTcgMTcgIDE1IDE5IDE5ICAxNiAyMCAyMCAgMTcgMjEgMjEKKzIzIDI3IDI2ICAxOCAyMiAyMiAgMjAgMjQgMjQgIDIzIDI3IDI2ICAzMCAzMiAzMSAgMTcgMjEgMjEKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzIzIDI3IDI2ICAzMyAzNyAzNSAgMTM3IDEzMyAxMDAgIDE1NiAxNTEgMTExICAxNTggMTUzIDExMiAgMTA1IDEwNCA5MgorMTA1IDEwNCA5MiAgNjggNzAgNjUgIDM5IDQwIDM5ICAxOCAyMiAyMiAgMTIgMTQgMTQgIDEyIDE1IDE1Cis5IDExIDExICA0IDUgNSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTYgMTcgMTIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDE2MSAxNTYgOTYgIDExOCAxMTYgNzYgIDExOCAxMTYgNzYKKzExOCAxMTYgNzYgIDY2IDY1IDU1ICA0MyA0NSA0MyAgMzIgMzQgMzMgIDI1IDI3IDI2ICAyMCAyMyAyMgorMTcgMjAgMjAgIDE1IDE4IDE4ICAxNCAxNyAxNyAgMTUgMTggMTggIDEzIDE2IDE2ICAxNCAxNyAxNworMTQgMTggMTggIDE2IDIwIDIwICAzMiAzNCAzMyAgNTUgNTcgNTQgIDU4IDU5IDU1ICA3MiA3MyA2NworMTA1IDEwNCA5MiAgNTUgNTcgNTQgIDY1IDY2IDYxICA2MyA2NCA2MCAgNDAgNDMgNDEgIDMzIDM3IDM1Cis0MSA0MiA0MiAgMjAgMjQgMjQgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNyAyMSAyMSAgMjYgMjggMjcgIDMwIDMyIDMxICAzNSAzNyAzNiAgNjggNzAgNjUgIDM5IDQwIDM5CisyMyAyNyAyNiAgMTUgMTggMTggIDEzIDE2IDE2ICAxMSAxNCAxNCAgOSAxMiAxMiAgOCAxMCAxMAorNyA5IDkgIDYgNyA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMzYgMzggMzUKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDk2IDk1IDY5ICAzMCAzMSAyOCAgNDkgNTEgNDgKKzkwIDg5IDczICA2OCA3MCA2NSAgNTUgNTcgNTQgIDQ3IDQ4IDQ2ICA0NyA0OCA0NiAgNDMgNDUgNDMKKzMyIDM0IDMzICA0MyA0NSA0MyAgNDMgNDUgNDMgIDIzIDI3IDI2ICAyNSAyNyAyNiAgNDAgNDMgNDEKKzQwIDQzIDQxICA5MCA4OSA3MyAgMTEwIDEwOSA5NCAgMTQ1IDE0MSAxMDUgIDE1NiAxNTEgMTExICAxNTYgMTUxIDExMQorMTg0IDE3OSAxNDkgIDE4NCAxNzkgMTQ5ICAxNzcgMTcyIDEzNSAgMTg0IDE3OSAxNDkgIDEzNyAxMzMgMTAwICA4NCA4MyA3MgorMTA1IDEwNCA5MiAgNjMgNjQgNjAgIDQ5IDUxIDQ4ICA0NyA0OCA0NiAgMjggMzEgMzAgIDE4IDIyIDIyCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTggMjIgMjIgIDE1IDE5IDE5CisxMyAxNiAxNiAgMTIgMTUgMTUgIDExIDE0IDE0ICAxMCAxMyAxMyAgOSAxMiAxMiAgOSAxMSAxMQorOCAxMCAxMCAgNiA4IDggIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMzAgMzEgMjggIDIzMCAyMjkgODIgIDcxIDcxIDU3ICAyIDIgMSAgMCAwIDAgIDU4IDU5IDU1CisxMDUgMTA0IDkyICA4NCA4MyA3MiAgNjUgNjYgNjEgIDg0IDgzIDcyICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0CisxNDUgMTQxIDEwNSAgMTA1IDEwNCA5MiAgMTEwIDEwOSA5NCAgMTEwIDEwOSA5NCAgODQgODMgNzIgIDExMCAxMDkgOTQKKzE1OCAxNTMgMTEyICAxOTcgMTkzIDE1NCAgMTk3IDE5MyAxNTQgIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQKKzE5NyAxOTMgMTU0ICAxODQgMTc5IDE0OSAgMTQ1IDE0MSAxMDUgIDEzNyAxMzMgMTAwICAxMDUgMTA0IDkyICA0NyA0OCA0NgorMjAgMjMgMjMgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTYgMjAgMjAgIDE2IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE0IDE4IDE4ICAxNCAxNyAxNworMTMgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNCAxNCAgMTIgMTQgMTQgIDEzIDEzIDEzICAxMyAxMyAxMworMTMgMTMgMTMgIDEyIDEyIDEyICAxMCAxMCA5ICA2IDcgNyAgMiAyIDIgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAxIDEgMCAgMCAwIDAgIDAgMCAwICA2NSA2NiA2MQorMTA1IDEwNCA5MiAgODQgODMgNzIgIDg0IDgzIDcyICAxMTAgMTA5IDk0ICAxODQgMTc5IDE0OSAgMjEwIDIwOCAxNTgKKzIxMCAyMDggMTU4ICAyMTAgMjA4IDE1OCAgMjE0IDIxMiAxNTggIDE5NyAxOTMgMTU0ICAyMTQgMjEyIDE1OCAgMjEwIDIwOCAxNTgKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgODQgODMgNzIKKzI2IDI4IDI3ICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOCAxOCAgMTQgMTggMTgKKzEzIDE3IDE3ICAxMyAxNiAxNiAgMTUgMTUgMTUgIDE0IDE0IDEzICAxNCAxNCAxMyAgMTQgMTQgMTMKKzEzIDEzIDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyICAxMiAxMiAxMiAgMyA0IDQKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDcyIDczIDY3CisxMDUgMTA0IDkyICA5OSA5OCA4MCAgODQgODMgNzIgIDk5IDk4IDgwICAxNzcgMTcyIDEzNSAgMTk3IDE5MyAxNTQKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAxOTcgMTkzIDE1NCAgOTkgOTggODAKKzIzIDI3IDI2ICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOCAxOCAgMTQgMTggMTgKKzE0IDE3IDE3ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNSAxNSAxNSAgMTQgMTQgMTMKKzE0IDE0IDEzICAxMyAxMyAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMiAgMTIgMTIgMTIKKzMgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg0IDgzIDcyCisxMTAgMTA5IDk0ICA5OSA5OCA4MCAgNzIgNzMgNjcgIDYzIDY0IDYwICA5OSA5OCA4MCAgMTc3IDE3MiAxMzUKKzE4NCAxNzkgMTQ5ICAyMTAgMjA4IDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgMTg0IDE3OSAxNDkgIDE3NyAxNzIgMTM1ICAxMTAgMTA5IDk0ICAzMyAzNyAzNQorMTcgMjEgMjEgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTYgMjAgMjAgIDE2IDIwIDIwICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNCAxOCAxOAorMTUgMTggMTggIDE4IDE5IDE4ICAxOCAxOSAxOCAgMTcgMTcgMTcgIDE2IDE2IDE2ICAxNSAxNSAxNQorMTQgMTQgMTMgIDEzIDEzIDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyICAxMiAxMiAxMgorMTAgMTAgOSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDIgMiAyICAxMDUgMTA0IDkyCisxMDggMTA3IDkzICA5OSA5OCA4MCAgNzIgNzMgNjcgIDYzIDY0IDYwICA1MSA1MiA1MCAgODcgODYgNzIKKzEwNSAxMDQgOTIgIDExMCAxMDkgOTQgIDEwOCAxMDcgOTMgIDE1NiAxNTEgMTExICAxODQgMTc5IDE0OSAgMTg0IDE3OSAxNDkKKzE5NyAxOTMgMTU0ICAxOTcgMTkzIDE1NCAgMTk3IDE5MyAxNTQgIDE4NCAxNzkgMTQ5ICAxODQgMTc5IDE0OSAgMTc3IDE3MiAxMzUKKzE5NyAxOTMgMTU0ICAxNTYgMTUxIDExMSAgMTc3IDE3MiAxMzUgIDE4NCAxNzkgMTQ5ICAxNjggMTYzIDEyMCAgMTM3IDEzMyAxMDAKKzE0NSAxNDEgMTA1ICAxMTAgMTA5IDk0ICA5OSA5OCA4MCAgNDcgNDggNDYgIDU1IDU3IDU0ICAxNSAxOSAxOQorMTYgMTkgMTkgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTcgMjAgMjAgIDE3IDIxIDIxICAxNiAyMCAyMCAgMTYgMTkgMTkgIDE1IDE5IDE5ICAxNiAxOSAxOQorMjAgMjAgMjAgIDIxIDIyIDIxICAyMCAyMCAyMCAgMTkgMjAgMTkgIDE4IDE5IDE4ICAxNiAxNiAxNgorMTUgMTUgMTUgIDE0IDE0IDEzICAxMyAxMyAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDQgNSA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA1OCA1OSA1NSAgMTEwIDEwOSA5NAorMTA1IDEwNCA5MiAgOTAgODkgNzMgIDcyIDczIDY3ICA1NSA1NyA1NCAgNDMgNDUgNDMgIDM5IDQwIDM5Cis0MyA0NSA0MyAgNDYgNDcgNDUgIDQzIDQ1IDQzICA2OCA3MCA2NSAgNjUgNjYgNjEgIDYzIDY0IDYwCisxMDggMTA3IDkzICA3MiA3MyA2NyAgMTA1IDEwNCA5MiAgOTAgODkgNzMgIDcyIDczIDY3ICA0MCA0MyA0MQorNzIgNzMgNjcgIDY4IDcwIDY1ICA2OCA3MCA2NSAgNTggNTkgNTUgIDYzIDY0IDYwICA0OSA1MSA0OAorNDMgNDUgNDMgIDMzIDM2IDM0ICAyNyAzMCAyOSAgMjAgMjQgMjQgIDE2IDIwIDIwICAxNSAxOSAxOQorMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTYgMTkgMTkgIDE2IDIwIDIwICAxNiAyMCAyMAorMTcgMjEgMjEgIDIwIDI0IDI0ICAyMCAyMyAyMiAgMTcgMjEgMjEgIDE3IDIwIDIwICAyMCAyMCAyMAorMjEgMjIgMjEgIDIxIDIyIDIxICAyMSAyMiAyMSAgMjEgMjIgMjEgIDIwIDIwIDIwICAxOCAxOSAxOAorMTYgMTYgMTYgIDE1IDE1IDE1ICAxMyAxMyAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEwIDEwIDkgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMjEgMjIgMjEgIDExMCAxMDkgOTQgIDExMCAxMDkgOTQKKzEwNSAxMDQgOTIgIDg0IDgzIDcyICA2OCA3MCA2NSAgNTEgNTIgNTAgIDQxIDQyIDQyICAzMyAzNyAzNQorMjggMzEgMzAgIDIzIDI3IDI2ICAyMCAyMyAyMyAgMTggMjIgMjIgIDE3IDIwIDIwICAyNSAyNyAyNgorMjYgMjggMjcgIDI3IDMwIDI5ICAyNSAyNyAyNiAgMjAgMjMgMjMgIDIzIDI3IDI2ICAzMCAzMiAzMQorMjAgMjQgMjQgIDE3IDIxIDIxICAxOCAyMiAyMiAgMTUgMTkgMTkgIDI2IDI4IDI3ICAyMCAyMyAyMworMTQgMTggMTggIDE1IDE5IDE5ICAxNSAxOCAxOCAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOQorMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNiAxOSAxOQorMTYgMjAgMjAgIDIyIDI0IDIzICAyNCAyNiAyNCAgMjIgMjQgMjMgIDIwIDIzIDIyICAyMiAyNCAyMworMjQgMjYgMjQgIDI0IDI2IDI0ICAyMyAyNCAyNCAgMjIgMjQgMjMgIDIxIDIyIDIxICAxOSAyMCAxOQorMTcgMTcgMTcgIDE1IDE1IDE1ICAxNCAxNCAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICAyIDIgMiAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMiAyIDIgIDk5IDk4IDgwICAxMTAgMTA5IDk0ICAxMDggMTA3IDkzCisxMDUgMTA0IDkyICA4NCA4MyA3MiAgNjMgNjQgNjAgIDQ5IDUxIDQ4ICAzOSA0MCAzOSAgMzIgMzQgMzMKKzI3IDMwIDI5ICAyMyAyNSAyNCAgMjAgMjMgMjMgIDE3IDIwIDIwICAxNSAxOSAxOSAgMTQgMTggMTgKKzE0IDE3IDE3ICAxMyAxNyAxNyAgMTMgMTcgMTcgIDEzIDE3IDE3ICAxMyAxNyAxNyAgMTMgMTcgMTcKKzE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcKKzE0IDE4IDE4ICAxNCAxOCAxOCAgMTQgMTggMTggIDE0IDE4IDE4ICAxNSAxOCAxOCAgMTUgMTkgMTkKKzE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkKKzE1IDE5IDE5ICAxNyAyMSAyMSAgMjcgMjkgMjggIDI2IDI4IDI3ICAyNSAyNyAyNiAgMjUgMjcgMjYKKzI3IDI5IDI4ICAyNyAyOSAyOCAgMjYgMjggMjcgIDI0IDI2IDI0ICAyMSAyMiAyMSAgMjAgMjAgMjAKKzE4IDE5IDE4ICAxNiAxNiAxNiAgMTQgMTQgMTMgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgNCA1IDUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDUxIDUyIDUwICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICAxMDUgMTA0IDkyCis5MCA4OSA3MyAgNzIgNzMgNjcgIDU1IDU3IDU0ICA0MyA0NSA0MyAgMzUgMzcgMzYgIDMwIDMyIDMxCisyNiAyOCAyNyAgMjAgMjQgMjQgIDE3IDIxIDIxICAxNiAxOSAxOSAgMTUgMTggMTggIDE0IDE3IDE3CisxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2CisxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNyAxNyAgMTMgMTcgMTcgIDE0IDE3IDE3CisxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxOCAxOCAgMTQgMTggMTggIDE0IDE4IDE4CisxNSAxOCAxOCAgMTUgMTggMTggIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5CisxNSAxOSAxOSAgMTUgMTkgMTkgIDI3IDI5IDI4ICAzMiAzNCAzMyAgMjggMzEgMzAgIDI3IDI5IDI4CiszMCAzMiAzMSAgMzAgMzIgMzEgIDMwIDMxIDI4ICAyNiAyOCAyNyAgMjMgMjQgMjQgIDIxIDIyIDIxCisxOSAyMCAxOSAgMTYgMTYgMTYgIDE0IDE0IDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDYgNyA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAzIDMgMyAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDEwIDEwIDkgIDEwOCAxMDcgOTMgIDExMCAxMDkgOTQgIDEwOCAxMDcgOTMgIDk5IDk4IDgwCis4NCA4MyA3MiAgNjMgNjQgNjAgIDQ5IDUxIDQ4ICA0MCA0MyA0MSAgMzMgMzYgMzQgIDI3IDMwIDI5CisyMyAyNyAyNiAgMTggMjIgMjIgIDE3IDIwIDIwICAxNSAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2CisxMyAxNiAxNiAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1CisxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2CisxMyAxNyAxNyAgMTMgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE4IDE4CisxNCAxOCAxOCAgMTQgMTggMTggIDE1IDE4IDE4ICAxNSAxOCAxOCAgMTUgMTkgMTkgIDE1IDE5IDE5CisxNSAxOSAxOSAgMTUgMTkgMTkgIDE3IDIxIDIxICAzMyAzNiAzNCAgMzIgMzQgMzMgIDMxIDMzIDMxCiszMyAzNiAzNCAgMzMgMzYgMzQgIDMxIDMzIDMxICAyNyAyOSAyOCAgMjUgMjcgMjYgIDIxIDIyIDIxCisxOSAyMCAxOSAgMTcgMTcgMTcgIDE1IDE1IDE1ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDggOCA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDYzIDY0IDYwICAxMzcgMTMzIDEwMCAgNDMgNDUgNDMgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDY4IDcwIDY1ICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICAxMDUgMTA0IDkyICA4NCA4MyA3MgorNjggNzAgNjUgIDU1IDU3IDU0ICA0MyA0NSA0MyAgMzUgMzcgMzYgIDMwIDMyIDMxICAyNiAyOCAyNworMjAgMjQgMjQgIDE3IDIxIDIxICAxNiAxOSAxOSAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNQorMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNiAxNgorMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTcgMTcgIDEzIDE3IDE3ICAxNCAxNyAxNworMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxOCAxOCAgMTQgMTggMTggIDE0IDE4IDE4ICAxNSAxOCAxOAorMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMjAgMjQgMjQgIDMyIDM0IDMzICAzNSAzNyAzNgorMzcgMzkgMzcgIDM1IDM3IDM2ICAzMyAzNiAzNCAgMzAgMzIgMzEgIDI2IDI4IDI3ICAyMiAyNCAyMworMjAgMjAgMjAgIDE3IDE3IDE3ICAxNSAxNSAxNSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICA4IDggNyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMSAxIDEgIDk5IDk4IDgwICAxODQgMTc5IDE0OSAgMTg0IDE3OSAxNDkgIDY4IDcwIDY1ICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE1IDE1IDE1ICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICAxMDggMTA3IDkzICA5OSA5OCA4MCAgNzIgNzMgNjcKKzYxIDYzIDU3ICA0OSA1MSA0OCAgMzkgNDAgMzkgIDMzIDM2IDM0ICAyNyAzMCAyOSAgMjMgMjUgMjQKKzE4IDIyIDIyICAxNiAxOSAxOSAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTUgMTUKKzExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQKKzExIDE0IDE0ICAxMSAxNCAxNCAgMTIgMTQgMTQgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUKKzEyIDE1IDE1ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYKKzEzIDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxOCAxOCAgMTQgMTggMTgKKzE0IDE4IDE4ICAxNSAxOCAxOCAgMTUgMTkgMTkgIDE1IDE5IDE5ICAzMCAzMiAzMSAgMzggMzkgMzcKKzM5IDQwIDM5ICAzOSA0MCAzOSAgMzUgMzcgMzYgIDMxIDMzIDMxICAyNyAyOSAyOCAgMjIgMjQgMjMKKzIwIDIwIDIwICAxNyAxNyAxNyAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgOCA4IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMyAzIDMKKzExMCAxMDkgOTQgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OCAgMTg0IDE3OSAxNDkgIDY4IDcwIDY1ICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzY4IDcwIDY1ICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICAxMDUgMTA0IDkyICA4NCA4MyA3MiAgNjUgNjYgNjEKKzUxIDUyIDUwICA0MyA0NSA0MyAgMzUgMzcgMzYgIDMwIDMyIDMxICAyNSAyNyAyNiAgMjAgMjMgMjMKKzE3IDIwIDIwICAxNSAxOCAxOCAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTEgMTQgMTQKKzExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTMgMTMgIDExIDEzIDEzICAxMSAxMyAxMyAgMTEgMTMgMTMKKzExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQKKzEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNiAxNiAgMTMgMTYgMTYKKzEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTcgMTcgIDEzIDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcKKzE0IDE4IDE4ICAxNCAxOCAxOCAgMTQgMTggMTggIDE2IDE5IDE5ICAzNyAzOSAzNyAgNDEgNDIgNDIKKzQxIDQyIDQyICA0MSA0MiA0MiAgMzggMzkgMzcgIDMyIDM0IDMzICAyNyAyOSAyOCAgMjMgMjQgMjQKKzIxIDIyIDIxICAxNyAxNyAxNyAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgOCA4IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxMSAxMSAxMSAgMTM3IDEzMyAxMDAKKzE5NyAxOTMgMTU0ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDE4NCAxNzkgMTQ5ICAzMSAzMyAzMSAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEyIDEyIDEyCisxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICAxMDUgMTA0IDkyICA5MCA4OSA3MyAgNzIgNzMgNjcgIDU4IDU5IDU1Cis0NiA0NyA0NSAgMzcgMzkgMzcgIDMxIDMzIDMxICAyNiAyOCAyNyAgMjAgMjQgMjQgIDE3IDIxIDIxCisxNSAxOCAxOCAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNCAxNCAgMTEgMTMgMTMgIDExIDEzIDEzCisxMCAxMyAxMyAgMTAgMTMgMTMgIDEwIDEzIDEzICAxMCAxMyAxMyAgMTAgMTMgMTMgIDEwIDEzIDEzCisxMCAxMyAxMyAgMTAgMTMgMTMgIDExIDEzIDEzICAxMSAxMyAxMyAgMTEgMTQgMTQgIDExIDE0IDE0CisxMSAxNCAxNCAgMTEgMTQgMTQgIDEyIDE0IDE0ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1CisxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTcgMTcgIDEzIDE3IDE3CisxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE4IDE4ICAyMyAyNyAyNiAgNDEgNDIgNDIgIDQxIDQyIDQyCis0MyA0NSA0MyAgNDEgNDIgNDIgIDM5IDQwIDM5ICAzMyAzNiAzNCAgMjcgMjkgMjggIDIzIDI0IDI0CisyMSAyMiAyMSAgMTcgMTcgMTcgIDE1IDE1IDE1ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDYgNyA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAyNyAyOSAyOCAgMTY4IDE2MyAxMjAgIDIxMCAyMDggMTU4CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxMzcgMTMzIDEwMCAgMSAxIDEgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA2MCA2MCA1NgorMTEwIDEwOSA5NCAgMTA1IDEwNCA5MiAgMTA1IDEwNCA5MiAgODQgODMgNzIgIDY1IDY2IDYxICA1MSA1MiA1MAorNDAgNDMgNDEgIDMzIDM2IDM0ICAyNyAzMCAyOSAgMjMgMjUgMjQgIDE4IDIyIDIyICAxNiAxOSAxOQorMTQgMTcgMTcgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDEwIDEzIDEzICAxMCAxMyAxMworMTAgMTMgMTMgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMyAxMyAgMTAgMTMgMTMgIDEwIDEzIDEzICAxMSAxMyAxMworMTEgMTMgMTMgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMiAxNSAxNQorMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNgorMTMgMTcgMTcgIDEzIDE3IDE3ICAxNCAxNyAxNyAgMzIgMzQgMzMgIDQzIDQ1IDQzICA0MyA0NSA0MworNDMgNDUgNDMgIDQzIDQ1IDQzICAzOSA0MCAzOSAgMzMgMzYgMzQgIDI3IDI5IDI4ICAyMyAyNCAyNAorMjEgMjIgMjEgIDE3IDE3IDE3ICAxNSAxNSAxNSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICA2IDcgNyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDEgMSAxICA2OCA3MCA2NSAgMTg0IDE3OSAxNDkgIDIxMCAyMDggMTU4ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAxODQgMTc5IDE0OSAgMzcgMzkgMzcgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA2IDcgNyAgMTA1IDEwNCA5MgorMTA1IDEwNCA5MiAgMTA1IDEwNCA5MiAgOTkgOTggODAgIDcyIDczIDY3ICA1OCA1OSA1NSAgNDYgNDcgNDUKKzM1IDM3IDM2ICAzMCAzMiAzMSAgMjUgMjcgMjYgIDIwIDIzIDIzICAxNiAxOSAxOSAgMTQgMTcgMTcKKzEyIDE1IDE1ICAxMiAxNCAxNCAgMTEgMTMgMTMgIDEwIDEzIDEzICAxMCAxMiAxMiAgMTAgMTIgMTIKKzEwIDEyIDEyICAxMCAxMiAxMiAgOSAxMiAxMiAgOSAxMiAxMiAgOSAxMiAxMiAgOSAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMyAxMworMTAgMTMgMTMgIDEwIDEzIDEzICAxMSAxMyAxMyAgMTEgMTMgMTMgIDExIDE0IDE0ICAxMSAxNCAxNAorMTEgMTQgMTQgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNiAxNgorMTMgMTYgMTYgIDEzIDE2IDE2ICAxNyAyMCAyMCAgNDEgNDIgNDIgIDQ2IDQ3IDQ1ICA0NiA0NyA0NQorNDYgNDcgNDUgIDQzIDQ1IDQzICA0MCA0MSAzOSAgMzMgMzYgMzQgIDI3IDI5IDI4ICAyMyAyNCAyNAorMjAgMjAgMjAgIDE3IDE3IDE3ICAxNSAxNSAxNSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICA0IDUgNSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTUgMTUgMTUgIDExMCAxMDkgOTQgIDE5NyAxOTMgMTU0ICAyMTQgMjEyIDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyMzkgMjM5IDE3MCAgMTg0IDE3OSAxNDkgIDg0IDgzIDcyICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDQ3IDQ4IDQ2ICAxMDUgMTA0IDkyCisxMDUgMTA0IDkyICA5OSA5OCA4MCAgODQgODMgNzIgIDY4IDcwIDY1ICA1MSA1MiA1MCAgNDAgNDMgNDEKKzMyIDM0IDMzICAyNyAyOSAyOCAgMjIgMjQgMjMgIDE3IDIxIDIxICAxNSAxOCAxOCAgMTMgMTYgMTYKKzEyIDE1IDE1ICAxMSAxMyAxMyAgMTAgMTMgMTMgIDEwIDEyIDEyICA5IDEyIDEyICA5IDEyIDEyCis5IDEyIDEyICA5IDEyIDEyICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDEyIDEyICA5IDEyIDEyICA5IDEyIDEyICA5IDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIKKzEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTMgMTMgIDEwIDEzIDEzICAxMCAxMyAxMyAgMTEgMTMgMTMKKzExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDEyIDE0IDE0ICAxMiAxNSAxNSAgMTIgMTUgMTUKKzEyIDE1IDE1ICAxMyAxNiAxNiAgMjggMzEgMzAgIDQzIDQ1IDQzICA0NyA0OCA0NiAgNDcgNDggNDYKKzQ3IDQ4IDQ2ICA0MyA0NSA0MyAgNDAgNDEgMzkgIDMzIDM2IDM0ICAyNyAyOSAyOCAgMjIgMjQgMjMKKzIwIDIwIDIwICAxNyAxNyAxNyAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgMyA0IDQgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxIDEgMSAgNjAgNjAgNTYKKzE3NyAxNzIgMTM1ICAxOTcgMTkzIDE1NCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzE4NCAxNzkgMTQ5ICAxMTAgMTA5IDk0ICAzIDQgNCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxICA5OSA5OCA4MCAgMTA1IDEwNCA5MgorOTkgOTggODAgIDg3IDg2IDcyICA4NCA4MyA3MiAgNjMgNjQgNjAgIDQ2IDQ3IDQ1ICAzNSAzNyAzNgorMzAgMzIgMzEgIDI1IDI3IDI2ICAxOCAyMiAyMiAgMTYgMTkgMTkgIDE0IDE3IDE3ICAxMiAxNSAxNQorMTEgMTQgMTQgIDEwIDEzIDEzICA5IDEyIDEyICA5IDEyIDEyICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDEyIDEyICA5IDEyIDEyCis5IDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMyAxMyAgMTAgMTMgMTMKKzEwIDEzIDEzICAxMSAxMyAxMyAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTIgMTUgMTUKKzEyIDE1IDE1ICAxNCAxNyAxNyAgNDEgNDIgNDIgIDQ3IDQ4IDQ2ICA0OSA1MSA0OCAgNTEgNTIgNTAKKzQ3IDQ4IDQ2ICA0MyA0NSA0MyAgNDAgNDEgMzkgIDMzIDM2IDM0ICAyNyAyOSAyOCAgMjIgMjQgMjMKKzE5IDIwIDE5ICAxNiAxNiAxNiAgMTQgMTQgMTMgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgMiAyIDIgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDIzIDI0IDI0ICAxMzcgMTMzIDEwMCAgMTg0IDE3OSAxNDkKKzIxMCAyMDggMTU4ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkKKzExMCAxMDkgOTQgIDEzIDEzIDEzICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDMwIDMyIDMxICAxMDUgMTA0IDkyICA5OSA5OCA4MAorODQgODMgNzIgIDg0IDgzIDcyICA3MiA3MyA2NyAgNTUgNTcgNTQgIDQxIDQyIDQyICAzMiAzNCAzMworMjcgMjkgMjggIDIwIDI0IDI0ICAxNyAyMCAyMCAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNCAxNAorMTAgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDEyIDEyICA5IDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyCisxMCAxMyAxMyAgMTAgMTMgMTMgIDEwIDEzIDEzICAxMSAxMyAxMyAgMTEgMTQgMTQgIDExIDE0IDE0CisxMSAxNCAxNCAgMjcgMjkgMjggIDU1IDU2IDUzICA3MiA3MyA2NyAgNTEgNTIgNTAgIDUxIDUyIDUwCis0OSA1MSA0OCAgNDMgNDUgNDMgIDM5IDQwIDM5ICAzMiAzNCAzMyAgMjYgMjggMjcgIDIxIDIyIDIxCisxOSAyMCAxOSAgMTYgMTYgMTYgIDE4IDE5IDE3ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDEgMSAxICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgOCA4IDcgIDg0IDgzIDcyICAxODQgMTc5IDE0OSAgMTk3IDE5MyAxNTQgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDE0NSAxNDEgMTA1CisxOSAyMCAxOSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDE0IDE0IDEzICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNzIgNzMgNjcgIDEwNSAxMDQgOTIgIDg0IDgzIDcyCis3MiA3MyA2NyAgODQgODMgNzIgIDY4IDcwIDY1ICA0OSA1MSA0OCAgMzkgNDAgMzkgIDMwIDMyIDMxCisyNSAyNyAyNiAgMTggMjIgMjIgIDE1IDE4IDE4ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDExIDEzIDEzCisxMCAxMiAxMiAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMiAxMiAgOSAxMiAxMiAgOSAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTMgMTMgIDEwIDEzIDEzICAxMSAxMyAxMworMTMgMTYgMTYgIDQxIDQyIDQyICA5OSA5OCA4MCAgMTU4IDE1MyAxMTIgIDY1IDY2IDYxICA1MSA1MiA1MAorNDkgNTEgNDggIDQzIDQ1IDQzICAzOSA0MCAzOSAgMzEgMzMgMzEgIDI1IDI3IDI2ICAyMSAyMiAyMQorMjEgMjIgMjEgIDY4IDcwIDY1ICA1NSA1NiA1MyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDExIDExIDExICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzIDMgMworNjMgNjQgNjAgIDE1OCAxNTMgMTEyICAxODQgMTc5IDE0OSAgMjEwIDIwOCAxNTggIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDEzNyAxMzMgMTAwICAyNyAyOSAyOAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzIxIDIyIDIxICAxMTAgMTA5IDk0ICA1IDYgNSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAxMyAxMyAxMyAgMTA1IDEwNCA5MiAgOTAgODkgNzMgIDcyIDczIDY3Cis2OCA3MCA2NSAgODQgODMgNzIgIDYzIDY0IDYwICA0NiA0NyA0NSAgMzUgMzcgMzYgIDI3IDI5IDI4CisyMiAyNCAyMyAgMTcgMjAgMjAgIDE0IDE3IDE3ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEyIDEyCisxMCAxMiAxMiAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMiAxMiAgOSAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMyAxMyAgMTAgMTMgMTMKKzMwIDMyIDMxICA0NyA0OCA0NiAgMTc3IDE3MiAxMzUgIDIxMCAyMDggMTU4ICAxMzcgMTMzIDEwMCAgNTUgNTYgNTMKKzQ5IDUxIDQ4ICA0MyA0NSA0MyAgMzggMzkgMzcgIDMxIDMzIDMxICAyNSAyNyAyNiAgMjIgMjQgMjMKKzExMCAxMDkgOTQgIDE4NCAxNzkgMTQ5ICA2MyA2NCA2MCAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDggOSA5ICAwIDAgMCAgMSAxIDEgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDIxIDIyIDIxICAxMDUgMTA0IDkyCisxODQgMTc5IDE0OSAgMjEwIDIwOCAxNTggIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDE4NCAxNzkgMTQ5ICAxNDUgMTQxIDEwNSAgMjMgMjQgMjQgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorNjggNzAgNjUgIDE4NCAxNzkgMTQ5ICAxMDUgMTA0IDkyICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDUxIDUyIDUwICA5OSA5OCA4MCAgODQgODMgNzIgIDYzIDY0IDYwCis2OCA3MCA2NSAgNzIgNzMgNjcgIDU1IDU3IDU0ICA0MSA0MiA0MiAgMzIgMzQgMzMgIDI1IDI3IDI2CisyMCAyMyAyMyAgMTYgMTkgMTkgIDEzIDE2IDE2ICAxMiAxNCAxNCAgMTAgMTMgMTMgIDEwIDEyIDEyCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDEyIDEyICA5IDEyIDEyICAxMCAxMiAxMiAgMTcgMjAgMjAKKzQ2IDQ3IDQ1ICA3MiA3MyA2NyAgMjEwIDIwOCAxNTggIDI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgNjMgNjQgNjAKKzQ5IDUxIDQ4ICA0MyA0NSA0MyAgMzcgMzkgMzcgIDMwIDMyIDMxICAyNCAyNiAyNCAgMTA1IDEwNCA5MgorMjEwIDIwOCAxNTggIDE5NyAxOTMgMTU0ICA0NyA0OCA0NiAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDYgNyA3ICAzMyAzNiAzNCAgNDggNDkgNDUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4IDggNyAgMjMgMjQgMjQgIDU1IDU2IDUzICAxMTAgMTA5IDk0CisyMTAgMjA4IDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDExMCAxMDkgOTQgIDIwIDIwIDIwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxMTAgMTA5IDk0ICAyNTEgMjUxIDE4NyAgMjEwIDIwOCAxNTggIDQ3IDQ4IDQ2ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAxIDEgMSAgOTAgODkgNzMgIDkwIDg5IDczICA3MiA3MyA2NyAgNTUgNTYgNTMKKzcyIDczIDY3ICA2OCA3MCA2NSAgNTEgNTIgNTAgIDM3IDM5IDM3ICAyOCAzMSAzMCAgMjMgMjUgMjQKKzE3IDIxIDIxICAxNSAxOCAxOCAgMTIgMTUgMTUgIDExIDE0IDE0ICAxMCAxMyAxMyAgOSAxMiAxMgorOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMSAxMSAgOSAxMSAxMSAgOSAxMSAxMSAgOSAxMiAxMiAgMTMgMTYgMTYgIDQxIDQyIDQyCis0OSA1MSA0OCAgMTEwIDEwOSA5NCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTA1IDEwNCA5MgorNDkgNTEgNDggIDQzIDQ1IDQzICAzNSAzNyAzNiAgMzAgMzEgMjggIDQ3IDQ4IDQ2ICAxOTcgMTkzIDE1NAorMjUxIDI1MSAxODcgIDE5NyAxOTMgMTU0ICAzMSAzMyAzMSAgMTIgMTIgMTIgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDUxIDUyIDUwICAxODQgMTc5IDE0OSAgNzIgNzMgNjcgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAyIDIgMgorMTEgMTEgMTEgIDIxIDIyIDIxICAzMCAzMiAzMSAgNDAgNDEgMzkgIDYwIDYwIDU2ICAxNDUgMTQxIDEwNQorMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTQgMjEyIDE1OAorMTg0IDE3OSAxNDkgIDExMCAxMDkgOTQgIDEzIDEzIDEzICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA0IDUgNCAgNjEgNjEgNTMgIDQ4IDQ5IDQ1ICAzIDQgMworMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTU2IDE1MSAxMTEgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDExIDExIDExICAwIDAgMAorMCAwIDAgIDI2IDI4IDI3ICA5OSA5OCA4MCAgODQgODMgNzIgIDYwIDYwIDU2ICA0MyA0NSA0MworNzIgNzMgNjcgIDY1IDY2IDYxICA0OSA1MSA0OCAgMzUgMzcgMzYgIDI3IDI5IDI4ICAyMCAyNCAyNAorMTcgMjAgMjAgIDE0IDE3IDE3ICAxMiAxNSAxNSAgMTEgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExCis5IDExIDExICA5IDExIDExICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICAxMSAxMyAxMyAgMzcgMzkgMzcgIDQ3IDQ4IDQ2Cis1MSA1MiA1MCAgMTg0IDE3OSAxNDkgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDE0NSAxNDEgMTA1Cis0NyA0OCA0NiAgNDEgNDIgNDIgIDM1IDM3IDM2ICAyNyAyOSAyOCAgMTM3IDEzMyAxMDAgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMTk3IDE5MyAxNTQgIDE5IDIwIDE5ICAxMiAxMiAxMiAgMTIgMTIgMTIgIDEyIDEyIDEyCisyNyAyOSAyOCAgMTg0IDE3OSAxNDkgIDIxNCAyMTIgMTU4ICA2MyA2NCA2MCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEgMSAxICA2IDcgNyAgMTYgMTYgMTYgIDI0IDI2IDI0CiszMCAzMiAzMSAgMzggMzkgMzcgIDQ3IDQ4IDQ2ICA1NSA1NyA1NCAgNjggNzAgNjUgIDExMCAxMDkgOTQKKzE5NyAxOTMgMTU0ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgMTg0IDE3OSAxNDkKKzEwNSAxMDQgOTIgIDggOCA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDY1IDY2IDYxICAxODQgMTc5IDE0OSAgMTU2IDE1MSAxMTEKKzMwIDMyIDMxICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE2OCAxNjMgMTIwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxMTAgMTA5IDk0ICAwIDAgMAorMCAwIDAgIDYwIDYwIDU2ICA4NCA4MyA3MiAgNjggNzAgNjUgIDUxIDUyIDUwICAzOCAzOSAzNworODQgODMgNzIgIDYzIDY0IDYwICA0MyA0NSA0MyAgMzMgMzYgMzQgIDI1IDI3IDI2ICAyMCAyMyAyMgorMTUgMTggMTggIDEzIDE2IDE2ICAxMiAxNCAxNCAgMTAgMTMgMTMgIDkgMTIgMTIgIDkgMTEgMTEKKzkgMTEgMTEgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzkgMTEgMTEgIDkgMTEgMTEgIDEwIDEyIDEyICAzMyAzNiAzNCAgNDYgNDcgNDUgIDUxIDUyIDUwCis3MiA3MyA2NyAgMjEwIDIwOCAxNTggIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDE3NyAxNzIgMTM1Cis0NyA0OCA0NiAgNDEgNDIgNDIgIDM1IDM3IDM2ICAzNyAzOSAzNyAgMTg0IDE3OSAxNDkgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMTk3IDE5MyAxNTQgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMTAgMTA5IDk0ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDM3IDM5IDM3ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAyMSAyMiAyMCAgMiAyIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzQgNSA1ICAxMiAxMiAxMiAgMjEgMjIgMjEgIDI1IDI3IDI2ICAzMCAzMiAzMSAgMzggMzkgMzcKKzQ2IDQ3IDQ1ICA1NSA1NiA1MyAgNjAgNjAgNTYgIDY1IDY2IDYxICA2OCA3MCA2NSAgMTA1IDEwNCA5MgorMTEwIDEwOSA5NCAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAxOTcgMTkzIDE1NCAgMTg0IDE3OSAxNDkgIDg0IDgzIDcyCisyIDIgMiAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTMgMTMgMTMgIDE4NCAxNzkgMTQ5ICAyNTEgMjUxIDE4NworMTk3IDE5MyAxNTQgIDQzIDQ0IDQxICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTQ1IDE0MSAxMDUgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICA0MyA0NSA0MworMiAyIDIgIDg0IDgzIDcyICA3MiA3MyA2NyAgNTggNTkgNTUgIDQxIDQyIDQyICAzOCAzOSAzNworNzIgNzMgNjcgIDU4IDU5IDU1ICA0MSA0MiA0MiAgMzEgMzMgMzEgIDI1IDI3IDI2ICAxOCAyMiAyMgorMTQgMTcgMTcgIDEyIDE1IDE1ICAxMiAxNCAxNCAgMTAgMTIgMTIgIDkgMTIgMTIgIDkgMTEgMTEKKzkgMTEgMTEgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDkgMTIgMTIgIDMxIDMzIDMxICA0MyA0NSA0MyAgNDkgNTEgNDggIDU1IDU2IDUzCisxMTAgMTA5IDk0ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTY4IDE2MyAxMjAKKzQ3IDQ4IDQ2ICA0MSA0MiA0MiAgMzMgMzYgMzQgIDYzIDY0IDYwICAxOTcgMTkzIDE1NCAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMiAgMTYgMTYgMTYKKzE5NyAxOTMgMTU0ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIwIDIwIDIwICAwIDAgMCAgMiAyIDEKKzEwOCAxMDcgOTMgIDExMCAxMDkgOTQgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEgMSAxICA0IDUgNSAgMTEgMTEgMTEgIDE4IDE5IDE4CisyMiAyNCAyMyAgMjYgMjggMjcgIDMyIDM0IDMzICAzOSA0MCAzOSAgNDYgNDcgNDUgIDUxIDUyIDUwCis1NSA1NyA1NCAgNjAgNjAgNTYgIDYzIDY0IDYwICA2MyA2NCA2MCAgNjMgNjQgNjAgIDU4IDU5IDU1Cis2MyA2NCA2MCAgOTkgOTggODAgIDE0NSAxNDEgMTA1ICAxMzcgMTMzIDEwMCAgNDMgNDUgNDMgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMyA0IDMgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDExMCAxMDkgOTQgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDI1IDI3IDI2ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis5OSA5OCA4MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDE1NiAxNTEgMTExCisyNSAyNyAyNiAgODQgODMgNzIgIDY1IDY2IDYxICA0NyA0OCA0NiAgMzIgMzQgMzMgIDM5IDQwIDM5Cis3MiA3MyA2NyAgNTUgNTcgNTQgIDQwIDQxIDM5ICAzMCAzMiAzMSAgMjMgMjUgMjQgIDE4IDIyIDIyCisxNCAxNyAxNyAgMTIgMTUgMTUgIDExIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOSAxMSAxMQorOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOSAxMSAxMSAgMjggMzEgMzAgIDQxIDQyIDQyICA0NyA0OCA0NiAgNTUgNTYgNTMgIDU4IDU5IDU1CisxMzcgMTMzIDEwMCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjEwIDIwOCAxNTggIDEzNyAxMzMgMTAwCis0NyA0OCA0NiAgNDAgNDEgMzkgIDMyIDM0IDMzICA3NSA3NSA2MSAgMTg0IDE3OSAxNDkgIDIzOSAyMzkgMTcwCisyNTEgMjUxIDE4NyAgMTc3IDE3MiAxMzUgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIgIDQzIDQ0IDQxCisxOTcgMTkzIDE1NCAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxMCAxMCA5ICAwIDAgMCAgODQgODMgNzIKKzI1MSAyNTEgMTg3ICA4NCA4MyA3MiAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMSAxIDEKKzYgNyA3ICAxMSAxMSAxMSAgMTcgMTcgMTcgIDIwIDIwIDIwICAyMyAyNCAyNCAgMjcgMjkgMjgKKzMyIDM0IDMzICAzOCAzOSAzNyAgNDMgNDUgNDMgIDQ3IDQ4IDQ2ICA1MSA1MiA1MCAgNTUgNTYgNTMKKzU4IDU5IDU1ICA1OCA1OSA1NSAgNTUgNTcgNTQgIDU1IDU2IDUzICA0NyA0OCA0NiAgNDEgNDIgNDIKKzM1IDM3IDM2ICAzMSAzMyAzMSAgNDcgNDggNDYgIDE0IDE0IDEzICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA2NiA2NSA1NSAgOTkgOTggODAgIDIwIDIwIDIwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNDMgNDUgNDMgIDIxNCAyMTIgMTU4CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDE0NSAxNDEgMTA1ICAzIDMgMyAgMCAwIDAgIDAgMCAwCis0OCA0OSA0NSAgMTg0IDE3OSAxNDkgIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDE3NyAxNzIgMTM1Cis4NCA4MyA3MiAgNzIgNzMgNjcgIDU1IDU2IDUzICAzOSA0MCAzOSAgMjYgMjggMjcgIDM5IDQwIDM5Cis2OCA3MCA2NSAgNTEgNTIgNTAgIDM5IDQwIDM5ICAyOCAzMSAzMCAgMjIgMjQgMjMgIDE3IDIwIDIwCisxNCAxNyAxNyAgMTIgMTQgMTQgIDEwIDEzIDEzICA5IDExIDExICA5IDExIDExICA5IDExIDExCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCisyNyAyOSAyOCAgNDAgNDEgMzkgIDQ2IDQ3IDQ1ICA1MSA1MiA1MCAgNTUgNTcgNTQgIDYzIDY0IDYwCisxMzEgMTI3IDkzICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDE5NyAxOTMgMTU0ICAxNjggMTYzIDEyMCAgOTYgOTUgNjkKKzQ3IDQ4IDQ2ICA0MCA0MSAzOSAgMzIgMzQgMzMgIDcxIDcxIDU3ICAxNDUgMTQxIDEwNSAgMTg0IDE3OSAxNDkKKzE4NCAxNzkgMTQ5ICAxMzEgMTI3IDkzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyICA0OCA0OSA0NQorMTY4IDE2MyAxMjAgIDE4NCAxNzkgMTQ5ICAxNTYgMTUxIDExMSAgNiA3IDcgIDE0IDE0IDEzICAxNzcgMTcyIDEzNQorMjM5IDIzOSAxNzAgIDQwIDQxIDM5ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAzIDMgMyAgNiA3IDcgIDExIDExIDExICAxNiAxNiAxNgorMTggMTkgMTggIDIxIDIyIDIxICAyMyAyNCAyNCAgMjcgMjkgMjggIDMyIDM0IDMzICAzNyAzOSAzNworNDEgNDIgNDIgIDQzIDQ1IDQzICA0NyA0OCA0NiAgNTEgNTIgNTAgIDUxIDUyIDUwICA1MSA1MiA1MAorNTEgNTIgNTAgIDQ5IDUxIDQ4ICA0NiA0NyA0NSAgNDAgNDEgMzkgIDMyIDM0IDMzICAyNSAyNyAyNgorMjAgMjAgMjAgIDE0IDE0IDEzICAyIDIgMiAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDMzIDM2IDM0ICAxOTcgMTkzIDE1NCAgMTg0IDE3OSAxNDkKKzQxIDQyIDQyICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzIDMgMyAgMTg0IDE3OSAxNDkKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDQ4IDQ5IDQ1ICAwIDAgMCAgMCAwIDAKKzE2IDE3IDEyICAxMjEgMTE5IDg3ICAxNzcgMTcyIDEzNSAgMTk0IDE4OSAxNDYgIDE4OCAxODQgMTQ2ICAxNDUgMTQxIDEwNQorODIgODEgNjIgIDYzIDY0IDYwICA0NiA0NyA0NSAgMzEgMzMgMzEgIDIxIDIyIDIxICAzNSAzNyAzNgorNjggNzAgNjUgIDUxIDUyIDUwICAzNyAzOSAzNyAgMjcgMzAgMjkgIDIyIDI0IDIzICAxNyAyMCAyMAorMTMgMTYgMTYgIDEyIDE0IDE0ICAxMCAxMyAxMyAgOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgMjUgMjcgMjYKKzM4IDM5IDM3ICA0MyA0NSA0MyAgNTEgNTIgNTAgIDU1IDU2IDUzICA2MCA2MCA1NiAgNjMgNjQgNjAKKzkyIDkxIDcyICAxNTggMTUzIDExMiAgMTc2IDE3MSAxMjYgIDE3MSAxNjUgMTE3ICAxNDkgMTQzIDk4ICA4MiA4MSA2MgorNDQgNDYgNDMgIDM4IDM5IDM3ICAzMCAzMiAzMSAgNzEgNzEgNTcgIDEzMSAxMjcgOTMgIDE2MCAxNTQgMTA2CisxNDkgMTQzIDk4ICA4MiA4MSA2MiAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMiAgNDYgNDcgNDMKKzEyMSAxMTkgODcgIDEzNCAxMzEgOTYgIDk2IDk1IDY5ICA3IDcgNiAgMzggMzkgMzcgIDEzMSAxMjcgOTMKKzE0NSAxNDEgMTA1ICAxMiAxMyAxMiAgMCAwIDAgIDEgMSAxICAzIDMgMyAgNiA3IDcKKzEwIDEwIDkgIDEyIDEyIDEyICAxNCAxNCAxMyAgMTYgMTYgMTYgIDE4IDE5IDE4ICAyMSAyMiAyMQorMjIgMjQgMjMgIDI2IDI4IDI3ICAzMCAzMSAyOCAgMzMgMzYgMzQgIDM3IDM5IDM3ICA0MCA0MSAzOQorNDEgNDIgNDIgIDQzIDQ1IDQzICA0NiA0NyA0NSAgNDYgNDcgNDUgIDQ2IDQ3IDQ1ICA0MyA0NSA0MworNDEgNDIgNDIgIDM3IDM5IDM3ICAzMSAzMyAzMSAgMjYgMjggMjcgIDIxIDIyIDIxICAxNiAxNiAxNgorNiA3IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzcgMTcyIDEzNSAgMjUxIDI1MSAxODcKKzE5NyAxOTMgMTU0ICAyNyAyOSAyOCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTEwIDEwOSA5NAorMjM5IDIzOSAxNzAgIDIzOSAyMzkgMTcwICAxODQgMTc5IDE0OSAgODcgODYgNzIgIDIgMiAxICAwIDAgMAorMSAxIDEgIDgyIDgxIDYyICAxNDIgMTM3IDk0ICAxNjUgMTYxIDEwOSAgMTY1IDE2MSAxMDkgIDEzMSAxMjcgOTMKKzc1IDc1IDYxICA1NSA1NiA1MyAgMzcgMzkgMzcgIDI1IDI3IDI2ICAxOSAyMCAxOSAgMzIgMzQgMzMKKzY1IDY2IDYxICA0OSA1MSA0OCAgMzUgMzcgMzYgIDI3IDI5IDI4ICAyMCAyMyAyMyAgMTYgMTkgMTkKKzEzIDE2IDE2ICAxMyAxMyAxMyAgMTAgMTIgMTIgIDkgMTEgMTEgIDggMTAgMTAgIDggMTAgMTAKKzggOSA5ICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICAyMiAyNCAyMyAgMzUgMzcgMzYKKzQxIDQyIDQyICA0NyA0OCA0NiAgNTUgNTYgNTMgIDU4IDU5IDU1ICA2MyA2NCA2MCAgNjUgNjYgNjEKKzcxIDcxIDU3ICAxMzEgMTI3IDkzICAxNjAgMTU0IDEwNiAgMTYwIDE1NCAxMDYgIDE0MiAxMzcgOTQgIDgyIDgxIDYyCis0NiA0NyA0MyAgNDAgNDEgMzkgIDMzIDM2IDM0ICA2NiA2NSA1NSAgMTI1IDEyMiA4NyAgMTQ5IDE0MyA5OAorMTQyIDEzNyA5NCAgODIgODEgNjIgIDE3IDE3IDE3ICAxOCAxOSAxNyAgMTQgMTQgMTMgIDQ2IDQ3IDQzCisxMTggMTE2IDc2ICAxMjUgMTIyIDg3ICA5NiA5NSA2OSAgMTYgMTcgMTIgIDcxIDcxIDU3ICAxMDMgMTAxIDc3Cis4MiA4MSA2MiAgMTEgMTEgMTEgIDExIDExIDExICAxMyAxMyAxMyAgMTQgMTQgMTMgIDE0IDE0IDEzCisxNSAxNSAxNSAgMTYgMTYgMTYgIDE3IDE3IDE3ICAxOSAyMCAxOSAgMjEgMjIgMjEgIDIzIDI0IDI0CisyNiAyOCAyNyAgMjcgMjkgMjggIDMxIDMzIDMxICAzMyAzNiAzNCAgMzUgMzcgMzYgIDM4IDM5IDM3CiszOSA0MCAzOSAgMzkgNDAgMzkgIDM4IDM5IDM3ICAzNyAzOSAzNyAgMzUgMzcgMzYgIDMxIDMzIDMxCisyNyAyOSAyOCAgMjQgMjYgMjQgIDIxIDIyIDIxICAxNyAxNyAxNyAgMTIgMTIgMTIgIDIgMiAyCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDY4IDcwIDY1ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDE1NiAxNTEgMTExICAyIDIgMSAgMCAwIDAgIDAgMCAwICA0MyA0NCA0MQorMTc3IDE3MiAxMzUgIDE4NCAxNzkgMTQ5ICAxNTggMTUzIDExMiAgMTAzIDEwMSA3NyAgMTkgMjAgMTggIDAgMCAwCiswIDAgMCAgNDYgNDcgNDMgIDEzMSAxMjcgOTMgIDE2MCAxNTQgMTA2ICAxNjAgMTU0IDEwNiAgMTMxIDEyNyA5MworNzEgNzEgNTcgIDQzIDQ1IDQzICAzMCAzMiAzMSAgMjEgMjIgMjEgIDE2IDE2IDE2ICAyNiAyOCAyNworNjMgNjQgNjAgIDQ3IDQ4IDQ2ICAzNSAzNyAzNiAgMjYgMjggMjcgIDIwIDIzIDIzICAxNiAxOSAxOQorMTMgMTYgMTYgIDEzIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMAorNyA5IDkgIDcgOSA5ICA4IDkgOSAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgMjAgMjAgMjAgIDMzIDM2IDM0ICA0MCA0MSAzOQorNDYgNDcgNDUgIDUxIDUyIDUwICA1NSA1NyA1NCAgNjAgNjAgNTYgIDYzIDY0IDYwICA2NSA2NiA2MQorNjYgNjUgNTUgIDExOCAxMTYgNzYgIDE1MSAxNDcgOTggIDE2NSAxNjEgMTA5ICAxNTEgMTQ3IDk4ICAxMjEgMTE5IDg3Cis5NiA5NSA2OSAgOTYgOTUgNjkgIDk2IDk1IDY5ICAxMDMgMTAxIDc3ICAxNDIgMTM3IDk0ICAxNTEgMTQ3IDk4CisxNDIgMTM3IDk0ICAxMDMgMTAxIDc3ICA4MiA4MSA2MiAgODIgODEgNjIgIDgyIDgxIDYyICA5NiA5NSA2OQorMTMxIDEyNyA5MyAgMTQyIDEzNyA5NCAgMTAzIDEwMSA3NyAgNDYgNDcgNDMgIDk2IDk1IDY5ICAxMTggMTE2IDc2Cis3MSA3MSA1NyAgMTQgMTQgMTMgIDE0IDE0IDEzICAxNSAxNSAxNSAgMTUgMTUgMTUgIDE2IDE2IDE2CisxNiAxNiAxNiAgMTcgMTcgMTcgIDE4IDE5IDE4ICAyMCAyMCAyMCAgMjEgMjIgMjEgIDIzIDI0IDI0CisyNSAyNyAyNiAgMjcgMjkgMjggIDMwIDMxIDI4ICAzMCAzMiAzMSAgMzEgMzMgMzEgIDMxIDMzIDMxCiszMSAzMyAzMSAgMzEgMzMgMzEgIDMwIDMxIDI4ICAyNyAyOSAyOCAgMjUgMjcgMjYgIDIyIDI0IDIzCisyMCAyMCAyMCAgMTYgMTYgMTYgIDEzIDEzIDEzICA2IDcgNyAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorNTggNTkgNTUgIDY4IDcwIDY1ICA4IDggNyAgMCAwIDAgIDEwIDEwIDkgIDIxMCAyMDggMTU4CisyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDM4IDM5IDM3ICAwIDAgMCAgMCAwIDAgIDggOCA3CisxMDMgMTAxIDc3ICAxNDkgMTQzIDk4ICAxNDkgMTQzIDk4ICAxMTggMTE2IDc2ICA0MCA0MSAzOSAgMjUgMjcgMjUKKzUzIDU1IDQ3ICA4MiA4MSA2MiAgMTQ0IDEzOSA5OSAgMTY1IDE2MSAxMDkgIDE2NSAxNjEgMTA5ICAxNDIgMTM3IDk0Cis3MSA3MSA1NyAgMzUgMzcgMzYgIDI0IDI2IDI0ICAxOCAxOSAxOCAgMTUgMTUgMTUgIDIyIDI0IDIzCis2MyA2NCA2MCAgNDYgNDcgNDUgIDMzIDM2IDM0ICAyNiAyOCAyNyAgMjAgMjMgMjIgIDE3IDE4IDE3CisxMiAxNSAxNSAgMTEgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA4IDEwIDEwCis3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgOCA5IDkgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDE2IDE2IDE2ICAzMCAzMSAyOCAgMzUgMzcgMzYgIDQxIDQyIDQyCis0NyA0OCA0NiAgNTUgNTYgNTMgIDU4IDU5IDU1ICA2MyA2NCA2MCAgNjUgNjYgNjEgIDY1IDY2IDYxCis2MSA2MSA1MyAgMTAzIDEwMSA3NyAgMTUxIDE0NyA5OCAgMTcxIDE2NSAxMTcgIDE3MSAxNjUgMTE3ICAxNjggMTYzIDEyMAorMTU4IDE1MyAxMTIgIDE1OCAxNTMgMTEyICAxNTUgMTQ5IDEwOSAgMTUxIDE0NyA5OCAgMTUxIDE0NyA5OCAgMTYwIDE1NCAxMDYKKzE1MSAxNDcgOTggIDE0OSAxNDMgOTggIDE0MiAxMzcgOTQgIDE0OSAxNDMgOTggIDE0OSAxNDMgOTggIDE0OSAxNDMgOTgKKzE1NSAxNDkgMTA5ICAxNTEgMTQ3IDk4ICAxMzEgMTI3IDkzICAxMDMgMTAxIDc3ICAxMjUgMTIyIDg3ICAxMTggMTE2IDc2Cis3MSA3MSA1NyAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTcgMTcgMTcgIDE3IDE3IDE3CisxNyAxNyAxNyAgMTcgMTcgMTcgIDE4IDE5IDE4ICAxOSAyMCAxOSAgMjAgMjAgMjAgIDIxIDIyIDIxCisyMyAyNCAyNCAgMjQgMjYgMjQgIDI1IDI3IDI2ICAyNiAyOCAyNyAgMjYgMjggMjcgIDI2IDI4IDI3CisyNSAyNyAyNiAgMjQgMjYgMjQgIDIyIDI0IDIzICAyMSAyMiAyMSAgMTkgMjAgMTkgIDE2IDE2IDE2CisxNCAxNCAxMyAgOCA4IDcgIDEgMSAxICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMjAgMjAgMjAgIDE4NCAxNzkgMTQ5ICAxNjggMTYzIDEyMCAgMjEgMjIgMjEgIDAgMCAwICAxMDUgMTA0IDkyCisxNzcgMTcyIDEzNSAgMTQ1IDE0MSAxMDUgIDcxIDcxIDU3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis2NiA2NSA1NSAgMTMxIDEyNyA5MyAgMTUxIDE0NyA5OCAgMTQyIDEzNyA5NCAgMTE4IDExNiA3NiAgMTIxIDExOSA4NworMTQ1IDE0MSAxMDUgIDE1OCAxNTMgMTEyICAxNzYgMTcxIDEyNiAgMTc4IDE3NCAxMjggIDE3NiAxNzEgMTI2ICAxNDkgMTQ1IDEwMworOTYgOTUgNjkgIDMxIDMzIDMxICAyMSAyMiAyMSAgMTYgMTYgMTYgIDE0IDE0IDEzICAxOCAxOSAxOAorNjAgNjAgNTYgIDQ2IDQ3IDQ1ICAzMyAzNiAzNCAgMjUgMjcgMjYgIDIxIDIyIDIxICAxNSAxOCAxOAorMTIgMTUgMTUgIDExIDEzIDEzICA5IDExIDExICA4IDEwIDEwICA4IDEwIDEwICA4IDkgOQorNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5ICA4IDkgOQorOCA5IDkgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDEwIDEyIDEyICAyNiAyOCAyNyAgMzEgMzMgMzEgIDM4IDM5IDM3ICA0MyA0NSA0MworNTEgNTIgNTAgIDU1IDU2IDUzICA2MCA2MCA1NiAgNjMgNjQgNjAgIDY1IDY2IDYxICA2OCA3MCA2NQorNjMgNjQgNjAgIDk2IDk1IDY5ICAxNTggMTUzIDExMiAgMTc4IDE3NCAxMjggIDE4OCAxODQgMTQ2ICAxOTQgMTg5IDE0NgorMTk0IDE4OSAxNDYgIDE4OCAxODQgMTQ2ICAxODQgMTgxIDEzNiAgMTc2IDE3MSAxMjYgIDE3MSAxNjUgMTE3ICAxNzMgMTY3IDExMQorMTczIDE2NyAxMTEgIDE2NSAxNjEgMTA5ICAxNzEgMTY1IDExNyAgMTc0IDE3MCAxMjEgIDE3NiAxNzEgMTI2ICAxNzggMTc0IDEyOAorMTc4IDE3NCAxMjggIDE3NCAxNzAgMTIxICAxNjAgMTU0IDEwNiAgMTQ5IDE0MyA5OCAgMTQ5IDE0MyA5OCAgMTI1IDEyMiA4NworNzEgNzEgNTcgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTcgMTcgMTcgIDE3IDE3IDE3ICAxNyAxNyAxNworMTcgMTcgMTcgIDE3IDE3IDE3ICAxNyAxNyAxNyAgMTggMTkgMTggIDE5IDIwIDE5ICAyMCAyMCAyMAorMjEgMjIgMjEgIDIxIDIyIDIxICAyMSAyMiAyMSAgMjIgMjQgMjMgIDIxIDIyIDIxICAyMSAyMiAyMQorMjEgMjIgMjEgIDE5IDIwIDE5ICAxOCAxOSAxOCAgMTYgMTYgMTYgIDE0IDE0IDEzICAxMSAxMSAxMQorMyAzIDMgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAxMDUgMTA0IDkyICAxOTcgMTkzIDE1NCAgMTEwIDEwOSA5NCAgOSA5IDggIDM2IDM4IDM1CisxMjEgMTE5IDg3ICAxMzEgMTI3IDkzICA5NiA5NSA2OSAgMTggMTkgMTcgIDMwIDMxIDI4ICA2NiA2NSA1NQorOTYgOTUgNjkgIDE0MiAxMzcgOTQgIDE2MCAxNTQgMTA2ICAxNjAgMTU0IDEwNiAgMTYwIDE1NCAxMDYgIDE2OCAxNjMgMTIwCisxODQgMTgxIDEzNiAgMTk0IDE5MSAxNDggIDE5NyAxOTMgMTU0ICAxOTcgMTkzIDE1NCAgMTk0IDE4OSAxNDYgIDE2OCAxNjMgMTIwCisxMjUgMTIyIDg3ICA0NiA0NyA0MyAgMTggMTkgMTggIDE1IDE1IDE1ICAxMyAxMyAxMyAgMTQgMTQgMTMKKzU1IDU3IDU0ICA0MyA0NSA0MyAgMzIgMzQgMzMgIDI1IDI3IDI2ICAxOCAyMiAyMiAgMTcgMTcgMTcKKzEyIDE0IDE0ICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgOCA5IDkgIDcgOSA5Cis2IDggOCAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5Cis3IDkgOSAgOCA5IDkgIDggOSA5ICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICAzMiAzNCAzMyAgNDEgNDIgNDIgIDM1IDM3IDM2ICAzOSA0MCAzOSAgMzcgMzkgMzcKKzM1IDM3IDM2ICA1NSA1NyA1NCAgNjAgNjAgNTYgIDYzIDY0IDYwICA2NSA2NiA2MSAgNjUgNjYgNjEKKzYxIDYzIDU3ICAxMTUgMTEzIDgyICAxNjggMTYzIDEyMCAgMTk0IDE5MSAxNDggIDIwNCAyMDEgMTU1ICAyMTAgMjA4IDE1OAorMjEwIDIwOCAxNTggIDIxMCAyMDggMTU4ICAxOTcgMTkzIDE1NCAgMTk0IDE4OSAxNDYgIDE4NiAxODIgMTI4ICAxNzYgMTcxIDEyNgorMTc0IDE3MCAxMjEgIDE3NiAxNzEgMTI2ICAxODYgMTgyIDEyOCAgMTkwIDE4NiAxMzYgIDE5NCAxOTEgMTQ4ICAxOTcgMTkzIDE1NAorMTk3IDE5MyAxNTQgIDE4OCAxODQgMTQ2ICAxODEgMTc2IDEzNyAgMTc0IDE3MCAxMjEgIDE2NSAxNjEgMTA5ICAxNDIgMTM3IDk0Cis4MiA4MSA2MiAgMjQgMjYgMjQgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2CisxNyAxNyAxNyAgMTcgMTcgMTcgIDE3IDE3IDE3ICAxNyAxNyAxNyAgMTggMTkgMTggIDE5IDIwIDE5CisxOSAyMCAxOSAgMTkgMjAgMTkgIDIwIDIwIDIwICAxOSAyMCAxOSAgMTkgMjAgMTkgIDE4IDE5IDE4CisxNyAxNyAxNyAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMiAxMiAxMiAgNiA3IDcgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDE3IDE4IDE3ICAxMzcgMTMzIDEwMCAgMTE1IDExMyA4MiAgNTMgNTUgNDcgIDE5IDIwIDE4CisxMDMgMTAxIDc3ICAxNDQgMTM5IDk5ICAxMzcgMTMzIDEwMCAgMTE1IDExMyA4MiAgMTM3IDEzMyAxMDAgIDE1NiAxNTEgMTExCisxNTggMTUzIDExMiAgMTY0IDE1OSAxMTEgIDE3MSAxNjUgMTE3ICAxNzQgMTcwIDEyMSAgMTc4IDE3NCAxMjggIDE5NCAxODkgMTQ2CisyMDQgMjAxIDE1NSAgMjE0IDIxMiAxNTggIDIxNCAyMTIgMTU4ICAyMTQgMjEyIDE1OCAgMjEwIDIwOCAxNTggIDE4OCAxODQgMTQ2CisxNTggMTUzIDExMiAgODcgODYgNzIgIDE3IDE3IDE3ICAxMyAxMyAxMyAgMTMgMTMgMTMgIDE1IDE1IDE1Cis1NSA1NiA1MyAgNDMgNDUgNDMgIDMyIDM0IDMzICAyNCAyNiAyNCAgMTcgMjAgMjAgIDE2IDE2IDE2CisxMiAxNCAxNCAgMTAgMTIgMTIgIDggMTAgMTAgIDggMTAgMTAgIDcgOSA5ICA2IDggOAorNiA4IDggIDYgOCA4ICA2IDggOCAgNyA5IDkgIDcgOSA5ICA3IDkgOQorNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDggOSA5ICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICAxMTAgMTA5IDk0ICA4NCA4MyA3MiAgNDkgNTEgNDggIDI2IDI4IDI3ICA4IDEwIDEwCis4IDkgOSAgNTEgNTIgNTAgIDU4IDU5IDU1ICA2MyA2NCA2MCAgNjMgNjQgNjAgIDYzIDY0IDYwCis2NiA2NSA1NSAgMTM0IDEzMSA5NiAgMTgxIDE3NiAxMzcgIDIxMCAyMDggMTU4ICAyMTQgMjEyIDE1OCAgMjM5IDIzOSAxNzAKKzIzOSAyMzkgMTcwICAyMjQgMjIzIDE1OSAgMjEwIDIwOCAxNTggIDIwNCAyMDEgMTU1ICAxOTQgMTg5IDE0NiAgMTg2IDE4MiAxMjgKKzE4NiAxODIgMTI4ICAxODQgMTgxIDEzNiAgMTk0IDE4OSAxNDYgIDIwNCAyMDEgMTU1ICAyMTAgMjA4IDE1OCAgMjEwIDIwOCAxNTgKKzIxMCAyMDggMTU4ICAyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQgIDE5MCAxODYgMTM2ICAxNzYgMTcxIDEyNiAgMTU1IDE0OSAxMDkKKzExOCAxMTYgNzYgIDM2IDM4IDM1ICAxNSAxNSAxNSAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNgorMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNyAxNyAxNworMTcgMTcgMTcgIDE3IDE3IDE3ICAxNyAxNyAxNyAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNSAxNSAxNQorMTMgMTMgMTMgIDEyIDEyIDEyICA4IDggNyAgMiAyIDIgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgNTMgNTUgNDcgIDEwMyAxMDEgNzcgIDk2IDk1IDY5ICA1MyA1NSA0NworMTAzIDEwMSA3NyAgMTU4IDE1MyAxMTIgIDE3NyAxNzIgMTM1ICAxODQgMTc5IDE0OSAgMTg4IDE4NCAxNDYgIDE5NyAxOTMgMTU0CisxOTQgMTg5IDE0NiAgMTkwIDE4NiAxMzYgIDE4NCAxODEgMTM2ICAxODQgMTgxIDEzNiAgMTk0IDE4OSAxNDYgIDIxMCAyMDggMTU4CisyMTQgMjEyIDE1OCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjI0IDIyMyAxNTkgIDIwNCAyMDEgMTU1CisxNzcgMTcyIDEzNSAgMTIxIDExOSA4NyAgMzAgMzEgMjggIDEzIDEzIDEzICAxMiAxMiAxMiAgMzkgNDAgMzkKKzYwIDYwIDU2ICA0MyA0NSA0MyAgMzIgMzQgMzMgIDIzIDI1IDI0ICAxOCAxOSAxOCAgMTMgMTYgMTYKKzEzIDEzIDEzICA5IDExIDExICA4IDEwIDEwICA4IDkgOSAgNiA4IDggIDYgOCA4Cis2IDggOCAgNiA4IDggIDYgOCA4ICA2IDggOCAgNiA4IDggIDcgOSA5Cis3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5Cis3IDkgOSAgOCA5IDkgIDggOSA5ICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCisxNCAxNyAxNyAgMTk3IDE5MyAxNTQgIDE1OCAxNTMgMTEyICA1NSA1NyA1NCAgNyA5IDkgIDcgOSA5Cis4IDEwIDEwICA1MSA1MiA1MCAgNTggNTkgNTUgIDYwIDYwIDU2ICA2MyA2NCA2MCAgNjMgNjQgNjAKKzcxIDcxIDU3ICAxNTUgMTQ5IDEwOSAgMTk0IDE5MSAxNDggIDIxNCAyMTIgMTU4ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxMCAyMDggMTU4ICAxOTcgMTkzIDE1NCAgMTkwIDE4NiAxMzYKKzE5MCAxODYgMTM2ICAxOTQgMTg5IDE0NiAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4ICAyMjQgMjIzIDE1OSAgMjM5IDIzOSAxNzAKKzIzOSAyMzkgMTcwICAyMjQgMjIzIDE1OSAgMjEwIDIwOCAxNTggIDIwNCAyMDEgMTU1ICAxOTAgMTg2IDEzNiAgMTY0IDE1OSAxMTEKKzEyNSAxMjIgODcgIDQwIDQxIDM5ICAxNSAxNSAxNSAgMTUgMTUgMTUgIDE1IDE1IDE1ICAxNSAxNSAxNQorMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNgorMTYgMTYgMTYgIDE2IDE2IDE2ICAxNSAxNSAxNSAgMTQgMTQgMTMgIDEzIDEzIDEzICAxMiAxMiAxMgorOCA5IDkgIDMgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMjEgMjIgMjAgIDk2IDk1IDY5ICAxMjUgMTIyIDg3ICAxMjEgMTE5IDg3CisxNDQgMTM5IDk5ICAxNzcgMTcyIDEzNSAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAyMTQgMjEyIDE1OCAgMjE0IDIxMiAxNTgKKzIxMCAyMDggMTU4ICAyMDQgMjAxIDE1NSAgMTk0IDE5MSAxNDggIDE5NCAxODkgMTQ2ICAyMDQgMjAxIDE1NSAgMjE0IDIxMiAxNTgKKzIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTgKKzE4OCAxODQgMTQ2ICAxNDUgMTQxIDEwNSAgNTMgNTUgNDcgIDEyIDEyIDEyICAxNSAxNSAxNSAgNjMgNjQgNjAKKzYzIDY0IDYwICA0MSA0MiA0MiAgMzEgMzMgMzEgIDIzIDI0IDI0ICAxNyAxOCAxNyAgMTIgMTUgMTUKKzExIDEzIDEzICA5IDExIDExICA4IDkgOSAgNyA5IDkgIDYgOCA4ICA2IDggOAorNiA3IDcgIDYgNyA3ICA2IDggOCAgNiA4IDggIDYgOCA4ICA2IDggOAorNiA4IDggIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOQorNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5ICA4IDggNworNDMgNDUgNDMgIDI1MSAyNTEgMTg3ICAxNTYgMTUxIDExMSAgOCAxMCAxMCAgNyA5IDkgIDcgOSA5CisyMSAyMiAyMSAgNTEgNTIgNTAgIDU1IDU2IDUzICA1NSA1NyA1NCAgNTggNTkgNTUgIDU4IDU5IDU1Cis3NSA3NSA2MSAgMTU4IDE1MyAxMTIgIDE5NyAxOTMgMTU0ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTQgMjEyIDE1OCAgMjA0IDIwMSAxNTUgIDE5NCAxODkgMTQ2CisxOTAgMTg2IDEzNiAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwICAyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQgIDE3NiAxNzEgMTI2CisxMjUgMTIyIDg3ICAzNiAzOCAzNSAgMTQgMTQgMTMgIDE0IDE0IDEzICAxNSAxNSAxNSAgMTUgMTUgMTUKKzE1IDE1IDE1ICAxNSAxNSAxNSAgMTUgMTUgMTUgIDE1IDE1IDE1ICAxNSAxNSAxNSAgMTUgMTUgMTUKKzE1IDE1IDE1ICAxNCAxNCAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMCAxMCA5ICAzIDQgNAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgNyA3IDUgIDcxIDcxIDU3ICAxMzEgMTI3IDkzICAxNTggMTUzIDExMgorMTc3IDE3MiAxMzUgIDE5NyAxOTMgMTU0ICAyMTQgMjEyIDE1OCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjM4IDIzNyAxNjggIDIxMCAyMDggMTU4ICAyMDQgMjAxIDE1NSAgMTk3IDE5MyAxNTQgIDIwNCAyMDEgMTU1ICAyMTQgMjEyIDE1OAorMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTQgMjEyIDE1OAorMTk3IDE5MyAxNTQgIDE1NiAxNTEgMTExICA2NiA2NSA1NSAgMTIgMTIgMTIgIDM3IDM5IDM3ICA1OCA1OSA1NQorNTggNTkgNTUgIDQxIDQyIDQyICAzMSAzMyAzMSAgMjIgMjQgMjMgIDE3IDE3IDE3ICAxMiAxNCAxNAorMTAgMTIgMTIgIDggMTAgMTAgIDYgOCA4ICA2IDggOCAgNiA3IDcgIDYgNyA3Cis2IDcgNyAgNSA3IDcgIDYgNyA3ICA2IDcgNyAgNiA4IDggIDYgOCA4Cis2IDggOCAgNiA4IDggIDYgOCA4ICA3IDkgOSAgNyA5IDkgIDcgOSA5Cis3IDkgOSAgNiA4IDggIDYgOCA4ICA2IDggOCAgNiA4IDggIDYgOCA4Cis2MSA2MyA1NyAgMTk3IDE5MyAxNTQgIDE2IDE5IDE5ICA2IDggOCAgNiA4IDggIDggOSA5Cis0MSA0MiA0MiAgNDcgNDggNDYgIDUxIDUyIDUwICA1MSA1MiA1MCAgNTUgNTYgNTMgIDU1IDU2IDUzCis3MSA3MSA1NyAgMTU4IDE1MyAxMTIgIDE5NyAxOTMgMTU0ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwICAyMTQgMjEyIDE1OCAgMjA0IDIwMSAxNTUgIDE5NCAxODkgMTQ2CisxOTAgMTg2IDEzNiAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMjQgMjIzIDE1OSAgMjA0IDIwMSAxNTUgIDE3NyAxNzIgMTM1CisxMjEgMTE5IDg3ICAzMCAzMSAyOCAgMTMgMTMgMTMgIDE0IDE0IDEzICAxNCAxNCAxMyAgMTQgMTQgMTMKKzE0IDE0IDEzICAxNCAxNCAxMyAgMTUgMTUgMTUgIDE1IDE1IDE1ICAxNCAxNCAxMyAgMTMgMTMgMTMKKzEyIDEyIDEyICAxMiAxMiAxMiAgMTAgMTAgOSAgNCA1IDUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDQ4IDQ5IDQ1ICAxMzEgMTI3IDkzICAxNzQgMTcwIDEyMQorMTk0IDE4OSAxNDYgIDIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAyMDQgMjAxIDE1NSAgMTk3IDE5MyAxNTQgIDIwNCAyMDEgMTU1ICAyMTAgMjA4IDE1OAorMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwICAyMTQgMjEyIDE1OAorMTk0IDE5MSAxNDggIDE1NiAxNTEgMTExICA3MSA3MSA1NyAgMTkgMjAgMTkgIDUxIDUyIDUwICA1MSA1MiA1MAorNTEgNTIgNTAgIDQxIDQyIDQyICAzMCAzMiAzMSAgMjEgMjIgMjEgIDE3IDE3IDE3ICAxMyAxMyAxMworOSAxMSAxMSAgOCA5IDkgIDYgOCA4ICA2IDcgNyAgNiA3IDcgIDUgNyA3Cis1IDYgNSAgNSA2IDUgIDUgNyA3ICA1IDcgNyAgNiA3IDcgIDYgNyA3Cis2IDggOCAgNiA4IDggIDYgOCA4ICA2IDcgNyAgNiA3IDcgIDYgNyA3Cis2IDcgNyAgNiA4IDggIDYgOCA4ICA2IDggOCAgNiA4IDggIDYgOCA4Cis1NSA1NiA1MyAgNDMgNDUgNDMgIDYgOCA4ICA2IDggOCAgNiA4IDggIDQ3IDQ4IDQ2Cis2MCA2MCA1NiAgNDcgNDggNDYgIDQ2IDQ3IDQ1ICA0NyA0OCA0NiAgMzggMzkgMzcgIDEwIDEyIDEyCis2NiA2NSA1NSAgMTQ1IDE0MSAxMDUgIDE5NyAxOTMgMTU0ICAyMTQgMjEyIDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIyNCAyMjMgMTU5ICAyMTAgMjA4IDE1OCAgMTk0IDE5MSAxNDggIDE4NCAxODEgMTM2CisxODQgMTgxIDEzNiAgMTk0IDE4OSAxNDYgIDIwNCAyMDEgMTU1ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE4MSAxNzYgMTM3CisxMTUgMTEzIDgyICAyMSAyMiAyMCAgMTMgMTMgMTMgIDEzIDEzIDEzICAxMyAxMyAxMyAgMTMgMTMgMTMKKzE0IDE0IDEzICAxMyAxMyAxMyAgMTMgMTMgMTMgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTEgMTEgMTEKKzEwIDEwIDkgIDYgNyA3ICAxIDEgMSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMiAyIDEgIDY2IDY1IDU1ICAxNDQgMTM5IDk5ICAxNzggMTc0IDEyOAorMjA0IDIwMSAxNTUgIDIxNCAyMTIgMTU4ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAyMDQgMjAxIDE1NSAgMTk0IDE5MSAxNDggIDE5NyAxOTMgMTU0ICAyMDQgMjAxIDE1NQorMjE0IDIxMiAxNTggIDIzOSAyMzkgMTcwICAyMzkgMjM5IDE3MCAgMjM5IDIzOSAxNzAgIDIxNCAyMTIgMTU4ICAyMTAgMjA4IDE1OAorMTg0IDE4MSAxMzYgIDE0OSAxNDUgMTAzICA2NiA2NSA1NSAgNDEgNDIgNDIgIDQ3IDQ4IDQ2ICA0NiA0NyA0NQorNDMgNDUgNDMgIDM5IDQwIDM5ICAyOCAzMSAzMCAgMjEgMjIgMjEgIDE2IDE2IDE2ICAxMCAxMiAxMgorOCAxMCAxMCAgNiA4IDggIDYgNyA3ICA2IDcgNyAgNSA2IDUgIDUgNiA1Cis1IDYgNSAgNSA2IDUgIDUgNiA1ICA1IDYgNSAgNSA3IDcgIDUgNyA3Cis2IDcgNyAgNiA3IDcgIDYgNyA3ICA1IDcgNyAgNSA3IDcgIDUgNyA3Cis1IDcgNyAgNiA3IDcgIDYgNyA3ICA2IDcgNyAgNiA3IDcgIDYgOCA4Cis2IDggOCAgNiA4IDggIDYgNyA3ICA2IDcgNyAgNDYgNDcgNDUgIDE1NiAxNTEgMTExCisxMDUgMTA0IDkyICA1OCA1OSA1NSAgNDMgNDUgNDMgIDMyIDM0IDMzICA2IDggOCAgNiA4IDgKKzQ5IDUxIDQ4ICAxMjUgMTIyIDg3ICAxODEgMTc2IDEzNyAgMjA0IDIwMSAxNTUgIDIxNCAyMTIgMTU4ICAyMzkgMjM5IDE3MAorMjM5IDIzOSAxNzAgIDIxNCAyMTIgMTU4ICAyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQgIDE4MSAxNzYgMTM3ICAxNzYgMTcxIDEyNgorMTc2IDE3MSAxMjYgIDE4NCAxODEgMTM2ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxNzcgMTcyIDEzNQorOTkgOTggODAgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIgIDEzIDEzIDEzICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICAxMSAxMSAxMSAgMTEgMTEgMTEgIDggOSA5ICA0IDUgNQorMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMSAxIDAgIDYxIDYxIDUzICAxNDIgMTM3IDk0ICAxODEgMTc2IDEzNworMjA0IDIwMSAxNTUgIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAxOTcgMTkzIDE1NCAgMTkwIDE4NiAxMzYgIDE4NCAxODEgMTM2ICAxODggMTg0IDE0NgorMTk3IDE5MyAxNTQgIDIwNCAyMDEgMTU1ICAyMTAgMjA4IDE1OCAgMjEwIDIwOCAxNTggIDIwNCAyMDEgMTU1ICAxOTQgMTg5IDE0NgorMTc2IDE3MSAxMjYgIDEzNCAxMzEgOTYgIDY2IDY1IDU1ICA0MyA0NSA0MyAgNDEgNDIgNDIgIDM5IDQwIDM5CiszNSAzNyAzNiAgMzMgMzYgMzQgIDI3IDI5IDI4ICAyMCAyMCAyMCAgMTUgMTUgMTUgIDkgMTEgMTEKKzggOSA5ICA2IDcgNyAgNSA2IDUgIDUgNiA1ICA0IDUgNSAgNCA1IDUKKzQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1ICA1IDYgNSAgNCA1IDUKKzQgNSA1ICA1IDYgNSAgNCA1IDUgIDUgNiA1ICA1IDYgNSAgNSA2IDUKKzUgNyA3ICA1IDcgNyAgNSA3IDcgIDUgNyA3ICA1IDcgNyAgNSA3IDcKKzYgNyA3ICA2IDcgNyAgNiA3IDcgIDI4IDMxIDMwICAxODQgMTc5IDE0OSAgMTg0IDE3OSAxNDkKKzE0NSAxNDEgMTA1ICA4NCA4MyA3MiAgMjcgMjkgMjggIDUgNyA3ICA1IDYgNSAgMTYgMTYgMTYKKzQzIDQ0IDQxICA5NiA5NSA2OSAgMTU4IDE1MyAxMTIgIDE4OCAxODQgMTQ2ICAyMDQgMjAxIDE1NSAgMjEwIDIwOCAxNTgKKzIwNCAyMDEgMTU1ICAxOTcgMTkzIDE1NCAgMTg0IDE3OSAxNDkgIDE3NyAxNzIgMTM1ICAxNjggMTYzIDEyMCAgMTY0IDE1OSAxMTEKKzE2NCAxNTkgMTExICAxNzQgMTcwIDEyMSAgMTg0IDE4MSAxMzYgIDE5NyAxOTMgMTU0ICAyMTQgMjEyIDE1OCAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgMTc3IDE3MiAxMzUKKzcxIDcxIDU3ICAxMSAxMSAxMSAgMTIgMTIgMTIgIDExIDExIDExICAxMSAxMSAxMSAgMTEgMTEgMTEKKzEwIDEwIDkgIDEwIDEwIDkgIDggOCA3ICAzIDQgNCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMzEgMzMgMzEgIDEyMSAxMTkgODcgIDE3NiAxNzEgMTI2CisxOTcgMTkzIDE1NCAgMjE0IDIxMiAxNTggIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE5NCAxODkgMTQ2ICAxNzggMTc0IDEyOCAgMTc0IDE3MCAxMjEgIDE3NiAxNzEgMTI2CisxNzcgMTcyIDEzNSAgMTgxIDE3NiAxMzcgIDE4NCAxNzkgMTQ5ICAxODQgMTc5IDE0OSAgMTgxIDE3NiAxMzcgIDE3OCAxNzQgMTI4CisxNTggMTUzIDExMiAgMTIxIDExOSA4NyAgNTMgNTUgNDcgIDM3IDM5IDM3ICAzMyAzNiAzNCAgMzAgMzIgMzEKKzI3IDI5IDI4ICAyNSAyNyAyNiAgMjQgMjYgMjQgIDE5IDIwIDE5ICAxMyAxMyAxMyAgOCAxMCAxMAorNiA4IDggIDYgNyA3ICA1IDYgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNQorNCA1IDUgIDQgNSA1ICA0IDUgNSAgMyA0IDQgIDMgNCA0ICA0IDUgNQorNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNQorNSA2IDUgIDUgNiA1ICA1IDYgNSAgNSA2IDUgIDUgNiA1ICA1IDYgNQorNSA2IDUgIDUgNiA1ICAxMiAxNCAxNCAgMTQ1IDE0MSAxMDUgIDE4NCAxNzkgMTQ5ICAxNzcgMTcyIDEzNQorOTAgODkgNzMgIDIxIDIyIDIxICA1IDYgNSAgNSA2IDUgIDQgNSA1ICAzNyAzOSAzNworMzggMzkgMzcgIDYxIDYxIDUzICAxMzQgMTMxIDk2ICAxNjggMTYzIDEyMCAgMTg0IDE4MSAxMzYgIDE4OCAxODQgMTQ2CisxODQgMTc5IDE0OSAgMTc3IDE3MiAxMzUgIDE2OCAxNjMgMTIwICAxNjQgMTU5IDExMSAgMTU1IDE0OSAxMDkgIDE1MSAxNDcgOTgKKzE1MSAxNDcgOTggIDE2NCAxNTkgMTExICAxNzYgMTcxIDEyNiAgMTg0IDE3OSAxNDkgIDIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MAorMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxMCAyMDggMTU4ICAxNTggMTUzIDExMgorNDYgNDcgNDMgIDEwIDEwIDkgIDEwIDEwIDkgIDEwIDEwIDkgIDggOSA5ICA4IDkgOQorNiA3IDcgIDMgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDEzIDEyIDcgIDgyIDgxIDYyICAxNTggMTUzIDExMgorMTg4IDE4NCAxNDYgIDIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjI0IDIyMyAxNTkgIDIwNCAyMDEgMTU1ICAxODQgMTgxIDEzNiAgMTcxIDE2NSAxMTcgIDE2NCAxNTkgMTExICAxNjAgMTU0IDEwNgorMTU4IDE1MyAxMTIgIDE2NCAxNTkgMTExICAxNjggMTYzIDEyMCAgMTY4IDE2MyAxMjAgIDE2OCAxNjMgMTIwICAxNjQgMTU5IDExMQorMTQyIDEzNyA5NCAgOTYgOTUgNjkgIDQzIDQ0IDQxICAyNyAyOSAyOCAgMjYgMjggMjcgIDIzIDI0IDI0CisyMSAyMiAyMSAgMTggMTkgMTggIDE3IDE3IDE3ICAxOCAxOSAxOCAgMTMgMTMgMTMgIDggOCA3Cis2IDcgNyAgNSA2IDUgIDQgNSA1ICAzIDQgNCAgMyA0IDQgIDMgNCA0CiszIDQgNCAgMyA0IDQgIDMgMyAzICAzIDMgMyAgMyA0IDQgIDMgNCA0CiszIDQgNCAgMyA0IDQgIDQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1Cis0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1Cis0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1Cis0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgMzEgMzMgMzEgIDY1IDY2IDYxCiszNyAzOSAzNyAgMzggMzkgMzcgIDk2IDk1IDY5ICAxNDQgMTM5IDk5ICAxNjggMTYzIDEyMCAgMTc0IDE3MCAxMjEKKzE2OCAxNjMgMTIwICAxNjQgMTU5IDExMSAgMTU1IDE0OSAxMDkgIDE0OSAxNDUgMTAzICAxNDkgMTQzIDk4ICAxNDIgMTM3IDk0CisxNDkgMTQzIDk4ICAxNTEgMTQ3IDk4ICAxNjQgMTU5IDExMSAgMTc3IDE3MiAxMzUgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OAorMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDE5NyAxOTMgMTU0ICAxMzcgMTMzIDEwMAorMjQgMjYgMjQgIDggOSA5ICA4IDkgOSAgOCA4IDcgIDYgNyA3ICAyIDIgMgorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA0NiA0NyA0MyAgMTI1IDEyMiA4NworMTc2IDE3MSAxMjYgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MAorMjE0IDIxMiAxNTggIDE5NyAxOTMgMTU0ICAxODEgMTc2IDEzNyAgMTY0IDE1OSAxMTEgIDE1MSAxNDcgOTggIDE0OSAxNDMgOTgKKzE0OSAxNDMgOTggIDE0OSAxNDMgOTggIDE0OSAxNDUgMTAzICAxNTUgMTQ5IDEwOSAgMTYwIDE1NCAxMDYgIDE0OSAxNDMgOTgKKzExOCAxMTYgNzYgIDgyIDgxIDYyICAzMCAzMSAyOCAgMjEgMjIgMjEgIDE5IDIwIDE5ICAxNyAxNyAxNworMTQgMTQgMTMgIDEyIDEyIDEyICAxMCAxMCA5ICAxMiAxMiAxMiAgMTAgMTIgMTIgIDYgOCA4Cis0IDUgNSAgMyA0IDQgIDMgNCA0ICAzIDQgNCAgMyAzIDMgIDMgMyAzCiszIDMgMyAgMyAzIDMgIDMgMyAzICAzIDMgMyAgMiAzIDMgIDIgMyAzCiszIDQgNCAgMyA0IDQgIDMgNCA0ICAzIDQgNCAgMyA0IDQgIDQgNSA1Cis0IDUgNSAgMyA0IDQgIDMgNCA0ICAzIDQgNCAgMyA0IDQgIDMgNCA0Cis0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1Cis0IDUgNSAgMyA0IDQgIDMgNCA0ICAyMyAyNCAyNCAgMTEwIDEwOSA5NCAgNzIgNzMgNjcKKzM5IDQwIDM5ICAyMiAyNCAyMyAgNDYgNDcgNDMgIDEwMyAxMDEgNzcgIDE0MiAxMzcgOTQgIDE1NSAxNDkgMTA5CisxNjAgMTU0IDEwNiAgMTU1IDE0OSAxMDkgIDE0OSAxNDMgOTggIDE0MiAxMzcgOTQgIDE0MiAxMzcgOTQgIDE0MiAxMzcgOTQKKzE0MiAxMzcgOTQgIDE0OSAxNDMgOTggIDE1NSAxNDkgMTA5ICAxNzYgMTcxIDEyNiAgMTg0IDE3OSAxNDkgIDIxMCAyMDggMTU4CisyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTQgMjEyIDE1OCAgMTg0IDE3OSAxNDkgIDEwNSAxMDQgOTIKKzEwIDEwIDkgIDYgNyA3ICAzIDQgNCAgMSAxIDEgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxMiAxMiA5ICA4MiA4MSA2MgorMTQ5IDE0NSAxMDMgIDE4MSAxNzYgMTM3ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIxNCAyMTIgMTU4ICAyMTQgMjEyIDE1OAorMjEwIDIwOCAxNTggIDE5NyAxOTMgMTU0ICAxNzcgMTcyIDEzNSAgMTU4IDE1MyAxMTIgIDE0OSAxNDMgOTggIDE0MiAxMzcgOTQKKzE0MiAxMzcgOTQgIDE0MiAxMzcgOTQgIDE0OSAxNDMgOTggIDE1MSAxNDcgOTggIDE1MSAxNDcgOTggIDEzMSAxMjcgOTMKKzEwMyAxMDEgNzcgIDcxIDcxIDU3ICAyMiAyNCAyMyAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMSAxMSAxMQorOCA5IDkgIDYgNyA3ICA2IDcgNyAgNCA1IDUgIDggOSA5ICA2IDcgNworNCA1IDUgIDMgMyAzICAzIDMgMyAgMyAzIDMgIDMgMyAzICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDMgMworMiAzIDMgIDIgMyAzICAyIDMgMyAgMyA0IDQgIDMgNCA0ICAzIDQgNAorMyA0IDQgIDMgNCA0ICAzIDMgMyAgMyA0IDQgIDMgNCA0ICAzIDQgNAorMyA0IDQgIDMgNCA0ICAzIDQgNCAgMyA0IDQgIDMgNCA0ICAzIDQgNAorMyA0IDQgIDMgNCA0ICAyMSAyMiAyMSAgMTQ1IDE0MSAxMDUgIDE0NSAxNDEgMTA1ICA3MiA3MyA2NworMTcgMTggMTcgIDMgNCA0ICAyMSAyMiAyMCAgNjYgNjUgNTUgIDExOCAxMTYgNzYgIDE0MiAxMzcgOTQKKzE0OSAxNDMgOTggIDE1MSAxNDcgOTggIDE0OSAxNDMgOTggIDE0MiAxMzcgOTQgIDE0MiAxMzcgOTQgIDE0MiAxMzcgOTQKKzE0MiAxMzcgOTQgIDE0OSAxNDMgOTggIDE1NSAxNDkgMTA5ICAxNjggMTYzIDEyMCAgMTg0IDE3OSAxNDkgIDIxMCAyMDggMTU4CisyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgMTc3IDE3MiAxMzUgIDcxIDcxIDU3CiszIDMgMyAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzNiAzOCAzNQorMTE1IDExMyA4MiAgMTU4IDE1MyAxMTIgIDE4MSAxNzYgMTM3ICAxOTcgMTkzIDE1NCAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4CisyMDQgMjAxIDE1NSAgMTg4IDE4NCAxNDYgIDE3NyAxNzIgMTM1ICAxNjQgMTU5IDExMSAgMTQ5IDE0NSAxMDMgIDE0MiAxMzcgOTQKKzE0MiAxMzcgOTQgIDE0MiAxMzcgOTQgIDE0OSAxNDMgOTggIDE1MSAxNDcgOTggIDE0OSAxNDMgOTggIDEyNSAxMjIgODcKKzk2IDk1IDY5ICA2MSA2MSA1MyAgMTYgMTcgMTIgIDggOSA5ICA4IDggNyAgNiA3IDcKKzQgNSA1ICAzIDQgNCAgMyAzIDMgIDMgMyAzICAzIDMgMyAgNSA2IDUKKzMgNCA0ICAyIDMgMyAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIKKzIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMSAyIDIKKzIgMiAyICAyIDIgMiAgMiAzIDMgIDIgMyAzICAyIDMgMyAgMiAzIDMKKzMgMyAzICAzIDMgMyAgMyAzIDMgIDMgMyAzICAzIDMgMyAgMyAzIDMKKzMgMyAzICAyIDMgMyAgMiAzIDMgIDMgNCA0ICAzIDQgNCAgMyA0IDQKKzMgNCA0ICAzIDQgNCAgMyA0IDQgIDggOSA5ICA4IDggNyAgMyAzIDMKKzMgMyAzICAzIDMgMyAgOSA5IDggIDM2IDM4IDM1ICA4MiA4MSA2MiAgMTE4IDExNiA3NgorMTQyIDEzNyA5NCAgMTUxIDE0NyA5OCAgMTUxIDE0NyA5OCAgMTUxIDE0NyA5OCAgMTQ5IDE0MyA5OCAgMTQ5IDE0MyA5OAorMTQ5IDE0MyA5OCAgMTUxIDE0NyA5OCAgMTYwIDE1NCAxMDYgIDE3NiAxNzEgMTI2ICAxODggMTg0IDE0NiAgMjEwIDIwOCAxNTgKKzIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxMCAyMDggMTU4ICAxNTYgMTUxIDExMSAgMzEgMzMgMzEKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDcgNyA1Cis2NiA2NSA1NSAgMTI1IDEyMiA4NyAgMTU4IDE1MyAxMTIgIDE4MSAxNzYgMTM3ICAxOTQgMTg5IDE0NiAgMTk3IDE5MyAxNTQKKzE5NyAxOTMgMTU0ICAxODQgMTc5IDE0OSAgMTc3IDE3MiAxMzUgIDE2OCAxNjMgMTIwICAxNTYgMTUxIDExMSAgMTUxIDE0NyA5OAorMTUxIDE0NyA5OCAgMTUxIDE0NyA5OCAgMTUxIDE0NyA5OCAgMTYxIDE1NiA5NiAgMTQ5IDE0MyA5OCAgMTE4IDExNiA3NgorODIgODEgNjIgIDUzIDU1IDQ3ICAxMiAxMiA5ICA0IDUgNSAgMyA0IDQgIDMgMyAzCiszIDMgMyAgMyAzIDMgIDIgMiAyICAyIDIgMiAgMSAxIDEgIDEgMiAyCiszIDMgMyAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAyIDIgIDEgMiAyCisxIDIgMiAgMSAyIDIgIDEgMiAyICAyIDIgMiAgMiAyIDIgIDIgMyAzCisyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMyAgMiAyIDIgIDIgMiAyCisyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMyAgMiAzIDMgIDIgMyAzCisyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMyAgMiAzIDMgIDMgMyAzCiszIDMgMyAgMyAzIDMgIDcyIDczIDY3ICA2MSA2MSA1MyAgNTMgNTUgNDcgIDk2IDk1IDY5CisxMzEgMTI3IDkzICAxNTEgMTQ3IDk4ICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxNTEgMTQ3IDk4ICAxNTEgMTQ3IDk4CisxNjEgMTU2IDk2ICAxNjAgMTU0IDEwNiAgMTY0IDE1OSAxMTEgIDE3NyAxNzIgMTM1ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTgKKzIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjI0IDIyMyAxNTkgIDE5NyAxOTMgMTU0ICAxMzEgMTI3IDkzICA5IDkgOAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzI0IDI2IDI0ICA4MiA4MSA2MiAgMTMxIDEyNyA5MyAgMTY0IDE1OSAxMTEgIDE3OCAxNzQgMTI4ICAxODggMTg0IDE0NgorMTg4IDE4NCAxNDYgIDE4OCAxODQgMTQ2ICAxODEgMTc2IDEzNyAgMTc2IDE3MSAxMjYgIDE2OCAxNjMgMTIwICAxNjQgMTU5IDExMQorMTYwIDE1NCAxMDYgIDE2MCAxNTQgMTA2ICAxNjAgMTU0IDEwNiAgMTYwIDE1NCAxMDYgIDE1MSAxNDcgOTggIDEyNSAxMjIgODcKKzgyIDgxIDYyICA2MSA2MSA1MyAgMTIgMTIgOSAgMyAzIDMgIDMgMyAzICAyIDIgMgorMiAyIDIgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDAgMCAwICAwIDAgMAorMCAwIDAgIDIgMiAyICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDIgMiAgMSAyIDIgIDEgMiAyICAxIDIgMgorMSAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMgorMiAzIDMgIDIgMyAzICAyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMworMiAzIDMgIDMwIDMyIDMxICA3MiA3MyA2NyAgMzEgMzMgMzEgIDM2IDM4IDM1ICA4MiA4MSA2MgorMTE4IDExNiA3NiAgMTQ5IDE0MyA5OCAgMTYxIDE1NiA5NiAgMTYxIDE1NiA5NiAgMTYxIDE1NiA5NiAgMTYwIDE1NCAxMDYKKzE2NSAxNjEgMTA5ICAxNjUgMTYxIDEwOSAgMTc2IDE3MSAxMjYgIDE4OCAxODQgMTQ2ICAyMDQgMjAxIDE1NSAgMjE0IDIxMiAxNTgKKzIzOSAyMzkgMTcwICAyMzkgMjM5IDE3MCAgMjE0IDIxMiAxNTggIDE4NCAxNzkgMTQ5ICA4MiA4MSA2MiAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisyIDIgMiAgNDMgNDQgNDEgIDk2IDk1IDY5ICAxMzEgMTI3IDkzICAxNjAgMTU0IDEwNiAgMTc2IDE3MSAxMjYKKzE4NCAxODEgMTM2ICAxODQgMTgxIDEzNiAgMTg0IDE4MSAxMzYgIDE4MSAxNzYgMTM3ICAxNzggMTc0IDEyOCAgMTc0IDE3MCAxMjEKKzE3MSAxNjUgMTE3ICAxNzMgMTY3IDExMSAgMTczIDE2NyAxMTEgIDE3MyAxNjcgMTExICAxNjAgMTU0IDEwNiAgMTMxIDEyNyA5MworOTYgOTUgNjkgIDY2IDY1IDU1ICAxNiAxNyAxMiAgMiAyIDIgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAyIDIgIDEgMiAyICAxIDIgMiAgMSAyIDIgIDEgMiAyICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMTAgOSA2ICAzMCAzMSAyOCAgNzEgNzEgNTcKKzExOCAxMTYgNzYgIDE0OSAxNDMgOTggIDE2NSAxNjEgMTA5ICAxNjUgMTYxIDEwOSAgMTY1IDE2MSAxMDkgIDE3MyAxNjcgMTExCisxNzMgMTY3IDExMSAgMTc2IDE3MSAxMjYgIDE4NCAxODEgMTM2ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIyNCAyMjMgMTU5CisyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxMCAyMDggMTU4ICAxNjggMTYzIDEyMCAgNDAgNDEgMzkgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDEzIDEyIDcgIDYxIDYxIDUzICA5NiA5NSA2OSAgMTMxIDEyNyA5MyAgMTYwIDE1NCAxMDYKKzE3NiAxNzEgMTI2ICAxODQgMTgxIDEzNiAgMTg0IDE4MSAxMzYgIDE4OCAxODQgMTQ2ICAxODQgMTgxIDEzNiAgMTg0IDE4MSAxMzYKKzE4NCAxODEgMTM2ICAxODYgMTgyIDEyOCAgMTg2IDE4MiAxMjggIDE3OCAxNzQgMTI4ICAxNzQgMTcwIDEyMSAgMTQ5IDE0NSAxMDMKKzExOCAxMTYgNzYgIDgyIDgxIDYyICAyMSAyMiAyMCAgMSAxIDEgIDEgMSAxICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDIgMgorMSAyIDIgIDEgMiAyICAxIDIgMiAgMSAyIDIgIDEgMiAyICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMyAzIDMgIDMwIDMxIDI4ICA2NiA2NSA1NQorMTE4IDExNiA3NiAgMTQ5IDE0MyA5OCAgMTY1IDE2MSAxMDkgIDE3MyAxNjcgMTExICAxNzMgMTY3IDExMSAgMTc0IDE3MCAxMjEKKzE4NiAxODIgMTI4ICAxOTAgMTg2IDEzNiAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMTk3IDE5MyAxNTQgIDEzNyAxMzMgMTAwICAxMiAxMiA5ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMzAgMzEgMjggIDcxIDcxIDU3ICAxMDMgMTAxIDc3ICAxMzQgMTMxIDk2CisxNjQgMTU5IDExMSAgMTc2IDE3MSAxMjYgIDE4NCAxODEgMTM2ICAxODggMTg0IDE0NiAgMTk0IDE4OSAxNDYgIDE5NyAxOTMgMTU0CisxOTcgMTkzIDE1NCAgMTk3IDE5MyAxNTQgIDE5NCAxOTEgMTQ4ICAxOTQgMTg5IDE0NiAgMTkwIDE4NiAxMzYgIDE3NiAxNzEgMTI2CisxNDUgMTQxIDEwNSAgMTAzIDEwMSA3NyAgNDAgNDEgMzkgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDIgMiAgMSAyIDIKKzEgMiAyICAxIDIgMiAgMSAyIDIgIDEgMiAyICAxIDIgMiAgMSAyIDIKKzEgMiAyICAxIDIgMiAgMSAyIDIgIDEgMiAyICAzMCAzMSAyOCAgNzEgNzEgNTcKKzExOCAxMTYgNzYgIDE2MCAxNTQgMTA2ICAxNzMgMTY3IDExMSAgMTc4IDE3NCAxMjggIDE4NiAxODIgMTI4ICAxOTAgMTg2IDEzNgorMTk0IDE5MSAxNDggIDIwNCAyMDEgMTU1ICAyMTAgMjA4IDE1OCAgMjI0IDIyMyAxNTkgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAxODQgMTc5IDE0OSAgODQgODMgNzIgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgNSA1IDMgIDQzIDQ0IDQxICA4MiA4MSA2MiAgMTAzIDEwMSA3NworMTQyIDEzNyA5NCAgMTY1IDE2MSAxMDkgIDE3OCAxNzQgMTI4ICAxOTAgMTg2IDEzNiAgMTk3IDE5MyAxNTQgIDIwNCAyMDEgMTU1CisyMTAgMjA4IDE1OCAgMjEwIDIwOCAxNTggIDIxMCAyMDggMTU4ICAyMTAgMjA4IDE1OCAgMjEwIDIwOCAxNTggIDE5NyAxOTMgMTU0CisxNzcgMTcyIDEzNSAgMTQ1IDE0MSAxMDUgIDc5IDc4IDYyICA1IDQgMyAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMiAyICAxIDIgMiAgMzAgMzEgMjggIDgyIDgxIDYyCisxNDIgMTM3IDk0ICAxNjUgMTYxIDEwOSAgMTc4IDE3NCAxMjggIDE5MCAxODYgMTM2ICAxOTQgMTkxIDE0OCAgMjA0IDIwMSAxNTUKKzIxMCAyMDggMTU4ICAyMTQgMjEyIDE1OCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgMTY4IDE2MyAxMjAgIDM2IDM4IDM1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxNiAxNyAxMiAgNTMgNTUgNDcgIDgyIDgxIDYyCisxMTggMTE2IDc2ICAxNTEgMTQ3IDk4ICAxNzEgMTY1IDExNyAgMTg0IDE4MSAxMzYgIDE5NCAxOTEgMTQ4ICAyMTAgMjA4IDE1OAorMjE0IDIxMiAxNTggIDIyNCAyMjMgMTU5ICAyMzkgMjM5IDE3MCAgMjM5IDIzOSAxNzAgIDIyNCAyMjMgMTU5ICAyMTQgMjEyIDE1OAorMTk3IDE5MyAxNTQgIDE3NiAxNzEgMTI2ICAxMTUgMTEzIDgyICAyNCAyNiAyNCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgNDAgNDEgMzkgIDEwMyAxMDEgNzcKKzE1MSAxNDcgOTggIDE3NiAxNzEgMTI2ICAxOTAgMTg2IDEzNiAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAyMTQgMjEyIDE1OAorMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjM5IDIzOSAxNzAgIDE5NyAxOTMgMTU0ICAxMTAgMTA5IDk0ICAzIDQgMyAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDMwIDMxIDI4ICA2NiA2NSA1NQorOTYgOTUgNjkgIDEyNSAxMjIgODcgIDE2MCAxNTQgMTA2ICAxNzggMTc0IDEyOCAgMTk0IDE4OSAxNDYgIDIwNCAyMDEgMTU1CisyMTQgMjEyIDE1OCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwCisyMTAgMjA4IDE1OCAgMTg4IDE4NCAxNDYgIDE0OSAxNDUgMTAzICA2MSA2MSA1MyAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgNjEgNjEgNTMgIDEzMSAxMjcgOTMKKzE2NCAxNTkgMTExICAxODQgMTgxIDEzNiAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzIxMCAyMDggMTU4ICAxNjggMTYzIDEyMCAgNDMgNDQgNDEgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNCAzIDIgIDM2IDM4IDM1Cis3MSA3MSA1NyAgOTYgOTUgNjkgIDE0MiAxMzcgOTQgIDE2NSAxNjEgMTA5ICAxODQgMTgxIDEzNiAgMTk3IDE5MyAxNTQKKzIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzIxNCAyMTIgMTU4ICAxOTcgMTkzIDE1NCAgMTY4IDE2MyAxMjAgIDEwMyAxMDEgNzcgIDcgNyA1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDgyIDgxIDYyICAxNDIgMTM3IDk0CisxNzQgMTcwIDEyMSAgMTk0IDE4OSAxNDYgIDIxMCAyMDggMTU4ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIyNCAyMjMgMTU5CisxODQgMTc5IDE0OSAgOTkgOTggODAgIDMgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA3IDcgNQorNDMgNDQgNDEgIDgyIDgxIDYyICAxMTggMTE2IDc2ICAxNDIgMTM3IDk0ICAxNzEgMTY1IDExNyAgMTkwIDE4NiAxMzYKKzIwNCAyMDEgMTU1ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzIxNCAyMTIgMTU4ICAxOTcgMTkzIDE1NCAgMTc0IDE3MCAxMjEgIDEyNSAxMjIgODcgIDMwIDMxIDI4ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMyA0IDMgIDgyIDgxIDYyICAxNDkgMTQzIDk4CisxNzYgMTcxIDEyNiAgMTk0IDE5MSAxNDggIDIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIwNCAyMDEgMTU1CisxNDUgMTQxIDEwNSAgMzAgMzEgMjggIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTAgOSA2ICA0NiA0NyA0MyAgODIgODEgNjIgIDExOCAxMTYgNzYgIDE0OSAxNDMgOTggIDE3NCAxNzAgMTIxCisxOTQgMTg5IDE0NiAgMjEwIDIwOCAxNTggIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIyNCAyMjMgMTU5CisyMTAgMjA4IDE1OCAgMTk0IDE5MSAxNDggIDE3NCAxNzAgMTIxICAxMzQgMTMxIDk2ICA1MyA1NSA0NyAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDcgNyA1ICA5NiA5NSA2OSAgMTQ5IDE0MyA5OAorMTc2IDE3MSAxMjYgIDE5NCAxOTEgMTQ4ICAyMTAgMjA4IDE1OCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxMCAyMDggMTU4ICAxNzcgMTcyIDEzNQorNzUgNzUgNjEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAxMCA5IDYgIDQ2IDQ3IDQzICA4MiA4MSA2MiAgMTE4IDExNiA3NiAgMTQ5IDE0MyA5OAorMTc2IDE3MSAxMjYgIDE5NCAxOTEgMTQ4ICAyMTAgMjA4IDE1OCAgMjE0IDIxMiAxNTggIDIxNCAyMTIgMTU4ICAyMTAgMjA4IDE1OAorMTk3IDE5MyAxNTQgIDE4NCAxODEgMTM2ICAxNjQgMTU5IDExMSAgMTMxIDEyNyA5MyAgNTMgNTUgNDcgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA3IDcgNSAgOTYgOTUgNjkgIDE0OSAxNDMgOTgKKzE3NCAxNzAgMTIxICAxOTQgMTg5IDE0NiAgMjA0IDIwMSAxNTUgIDIxNCAyMTIgMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxMCAyMDggMTU4ICAxODQgMTc5IDE0OSAgMTEwIDEwOSA5NAorMTIgMTIgOSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAxMCA5IDYgIDQzIDQ0IDQxICA4MiA4MSA2MiAgMTE1IDExMyA4MgorMTQ0IDEzOSA5OSAgMTY4IDE2MyAxMjAgIDE4OCAxODQgMTQ2ICAxOTcgMTkzIDE1NCAgMTk3IDE5MyAxNTQgIDE5NCAxODkgMTQ2CisxODQgMTgxIDEzNiAgMTc0IDE3MCAxMjEgIDE1MSAxNDcgOTggIDExOCAxMTYgNzYgIDM2IDM4IDM1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNCAzIDIgIDgyIDgxIDYyICAxNDIgMTM3IDk0CisxNzEgMTY1IDExNyAgMTg2IDE4MiAxMjggIDE5NCAxOTEgMTQ4ICAyMTAgMjA4IDE1OCAgMjE0IDIxMiAxNTggIDIyNCAyMjMgMTU5CisyMzkgMjM5IDE3MCAgMjI0IDIyMyAxNTkgIDIxMCAyMDggMTU4ICAxODQgMTc5IDE0OSAgMTM3IDEzMyAxMDAgIDM2IDM4IDM1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNyA3IDUgIDM2IDM4IDM1ICA3MSA3MSA1NworMTAzIDEwMSA3NyAgMTMxIDEyNyA5MyAgMTU1IDE0OSAxMDkgIDE2OCAxNjMgMTIwICAxNjggMTYzIDEyMCAgMTY4IDE2MyAxMjAKKzE2NCAxNTkgMTExICAxNDkgMTQzIDk4ICAxMjUgMTIyIDg3ICA4MiA4MSA2MiAgMTMgMTIgNyAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA2MSA2MSA1MyAgMTI1IDEyMiA4NworMTYwIDE1NCAxMDYgIDE3NCAxNzAgMTIxICAxODQgMTgxIDEzNiAgMTk0IDE4OSAxNDYgIDIwNCAyMDEgMTU1ICAyMTAgMjA4IDE1OAorMjEwIDIwOCAxNTggIDIwNCAyMDEgMTU1ICAxODQgMTc5IDE0OSAgMTQ1IDE0MSAxMDUgIDYxIDYxIDUzICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzIDMgMiAgMzAgMzEgMjgKKzYxIDYxIDUzICA4MiA4MSA2MiAgMTAzIDEwMSA3NyAgMTIxIDExOSA4NyAgMTI1IDEyMiA4NyAgMTI1IDEyMiA4NworMTE4IDExNiA3NiAgMTAzIDEwMSA3NyAgNzkgNzggNjIgIDI0IDI2IDI0ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAyNSAyNyAyNSAgOTYgOTUgNjkKKzE0MiAxMzcgOTQgIDE2MCAxNTQgMTA2ICAxNzEgMTY1IDExNyAgMTc4IDE3NCAxMjggIDE4NCAxODEgMTM2ICAxODQgMTgxIDEzNgorMTgxIDE3NiAxMzcgIDE3NyAxNzIgMTM1ICAxNDUgMTQxIDEwNSAgNzUgNzUgNjEgIDUgNSAzICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE2IDE3IDEyICA0MCA0MSAzOSAgNjEgNjEgNTMgIDcxIDcxIDU3ICA3MSA3MSA1NyAgNzEgNzEgNTcKKzY2IDY1IDU1ICA0MyA0NCA0MSAgMTIgMTIgOSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxICA0NiA0NyA0MworOTYgOTUgNjkgIDEyNSAxMjIgODcgIDE0MiAxMzcgOTQgIDE0OSAxNDUgMTAzICAxNTUgMTQ5IDEwOSAgMTU1IDE0OSAxMDkKKzE0NSAxNDEgMTA1ICAxMjEgMTE5IDg3ICA2NiA2NSA1NSAgNyA3IDUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAxIDEgMSAgMTYgMTcgMTIgIDI0IDI2IDI0ICAyNSAyNyAyNSAgMTkgMjAgMTgKKzcgNyA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMiAyIDEKKzI1IDI3IDI1ICA2MSA2MSA1MyAgODIgODEgNjIgIDk2IDk1IDY5ICA5NiA5NSA2OSAgODIgODEgNjIKKzYxIDYxIDUzICAyNSAyNyAyNSAgMiAyIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDUgNiA1ICAxMyAxMiA3ICAxMCA5IDYgIDMgNCAzCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvX2xpbnV4X3ZnYTE2LnBwbSBiL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvX2xpbnV4X3ZnYTE2LnBwbQppbmRleCAxODUwYzE1Li4xMmFjM2E1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9sb2dvL2xvZ29fbGludXhfdmdhMTYucHBtCisrKyBiL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvX2xpbnV4X3ZnYTE2LnBwbQpAQCAtMSwxNjA0ICsxLDI3MzkgQEAKIFAzCi0jIFN0YW5kYXJkIDE2LWNvbG9yIExpbnV4IGxvZ28KLTgwIDgwCisxNDIgMTE0CiAyNTUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTE3MCAxNzAgMTcwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTE3MCAxNzAgMTcwICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDI1NSAyNTUgMjU1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwIDE3MCAxNzAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0yNTUgMjU1IDI1NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0xNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgMTcwIDE3MAotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTI1NSAyNTUgMjU1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDI1NSAyNTUgMjU1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAxNzAgMTcwIDE3MCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAxNzAgMTcwIDE3MCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAxNzAgMTcwCi0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0xNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0xNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgMTcwIDE3MAotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMTcwIDE3MCAxNzAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0xNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgIDg1ICA4NSAgODUgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0xNzAgMTcwIDE3MCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTE3MCAxNzAgMTcwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1IDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLSA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDI1NSA4NSAgMTcwIDg1IDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSAyNTUgODUKKzI1NSA4NSA4NSAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAxNzAgODUgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwCis4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgODUgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMTcwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzE3MCA4NSAwICA4NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgODUgMCAgMTcwIDg1IDAgIDg1IDI1NSA4NQorMTcwIDg1IDAgIDE3MCA4NSAwICAwIDE3MCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMTcwIDAgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDg1IDAgIDI1NSAyNTUgODUKKzg1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDE3MCA4NSAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMAorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAxNzAgODUgMAorMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorODUgMjU1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NQorMTcwIDg1IDAgIDE3MCA4NSAwICAwIDE3MCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDE3MCA4NSAwICA4NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICA4NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNzAgODUgMCAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDg1IDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMTcwIDAKKzE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgODUgMAorMTcwIDg1IDAgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAyNTUgODUgODUKKzg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDg1IDg1IDg1ICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMCAxNzAgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSAyNTUgODUKKzI1NSA4NSA4NSAgODUgMjU1IDg1ICA4NSA4NSA4NSAgMjU1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDI1NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCisxNzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDI1NSAyNTUgODUKKzE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgODUgMCAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCA4NSAwICAwIDE3MCAwCiswIDAgMCAgMTcwIDg1IDAgIDE3MCA4NSAwICAwIDE3MCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzE3MCA4NSAwICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzg1IDI1NSA4NSAgMTcwIDg1IDAgIDAgMTcwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDE3MCAwICAxNzAgODUgMCAgMjU1IDI1NSA4NQorODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMAorODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDg1IDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgODUgMjU1IDg1CisxNzAgODUgMCAgMTcwIDg1IDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCA4NSAwCiswIDE3MCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUKKzI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCA4NSAwICA4NSAyNTUgODUgIDE3MCA4NSAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDI1NSAyNTUgODUgIDg1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisxNzAgODUgMCAgMTcwIDg1IDAgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgODUgMjU1IDg1CisxNzAgODUgMCAgMTcwIDg1IDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCA4NSAwICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICA4NSAyNTUgODUKKzE3MCA4NSAwICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDg1IDAKKzAgMTcwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSAyNTUgODUgIDI1NSAyNTUgODUKKzE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgODUgMjU1IDg1ICAxNzAgODUgMAorMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDAgMTcwIDAgIDE3MCA4NSAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgODUgMAorMCAxNzAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDAgMTcwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMjU1IDI1NSAyNTUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUKKzE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDI1NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgMTcwIDg1IDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCA4NSAwICA4NSAyNTUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgMjU1IDg1ICAyNTUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDI1NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMjU1IDI1NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgMjU1IDg1ICAyNTUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCis4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSAyNTUgODUgIDE3MCA4NSAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NQorODUgODUgODUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMjU1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDg1IDg1Cis4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDg1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NQorMjU1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgODUgODUgIDg1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUKKzg1IDI1NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgODUgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwCisxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAKKzg1IDg1IDg1ICAyNTUgODUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzg1IDI1NSA4NSAgMjU1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAyNTUgODUgODUgIDg1IDI1NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDI1NSA4NSAgMjU1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorODUgODUgODUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CisxNzAgODUgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CisxNzAgODUgMCAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAxNzAgMCAgODUgODUgODUKKzE3MCA4NSAwICA4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgODUgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDI1NSA4NSAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgMTcwIDg1IDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDg1IDAKKzg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwppbmRleCAzYTNmODBmLi4wNTczZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWFnYmFmYl9wYXIpLCBkZXYpOwogCWlmICghaW5mbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldl9uYW1lKGRldikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciBtYXBcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2M7CiAJfQpAQCAtMTczLDggKzE3Myw5IEBACiAJLyogUmVxdWVzdCB0aGUgSS9PIE1FTSByZXNvdXJjZS4gICovCiAJc3RhcnQgPSB0ZGV2LT5yZXNvdXJjZS5zdGFydDsKIAlsZW4gPSB0ZGV2LT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2LT5idXNfaWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwgZGV2LT5idXNfaWQpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldl9uYW1lKGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2NtYXA7CiAJfQpAQCAtMTgzLDcgKzE4NCw3IEBACiAJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBzdGFydDsKIAlwYXItPm1taW8gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJaWYgKCFwYXItPm1taW8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3Jlc291cmNlOwogCX0KQEAgLTE5NCw3ICsxOTUsNyBAQAogCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5zbWVtX3N0YXJ0LAogCQkJCQkgICAgaW5mby0+Zml4LnNtZW1fbGVuKTsKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX21taW9fbWFwOwogCX0KQEAgLTIwNSwxNCArMjA2LDE0IEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWdvdG8gZXJyX3NtZW1fbWFwOwogCX0KIAogCWdldF9kZXZpY2UoZGV2KTsKIAogCXByX2luZm8oImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYXQgJXNcbiIsCi0JCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2LT5idXNfaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldl9uYW1lKGRldikpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKaW5kZXggOWI4MDU5Ny4uOTg3NDg3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgcG1hZ2JiZmJfcGFyKSwgZGV2KTsKIAlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yNjcsNyArMjY3LDcgQEAKIAogCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgbWFwXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KQEAgLTI4MCw4ICsyODAsOSBAQAogCS8qIFJlcXVlc3QgdGhlIEkvTyBNRU0gcmVzb3VyY2UuICAqLwogCXN0YXJ0ID0gdGRldi0+cmVzb3VyY2Uuc3RhcnQ7CiAJbGVuID0gdGRldi0+cmVzb3VyY2UuZW5kIC0gc3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldi0+YnVzX2lkKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsIGRldi0+YnVzX2lkKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXZfbmFtZShkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsCisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9jbWFwOwogCX0KQEAgLTI5MCw3ICsyOTEsNyBAQAogCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gc3RhcnQ7CiAJcGFyLT5tbWlvID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwogCWlmICghcGFyLT5tbWlvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAl9CkBAIC0zMDEsNyArMzAyLDcgQEAKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IHN0YXJ0ICsgUE1BR0JfQl9GQk1FTTsKIAlwYXItPnNtZW0gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbik7CiAJaWYgKCFwYXItPnNtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfbW1pb19tYXA7CiAJfQpAQCAtMzE2LDcgKzMxNyw3IEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWdvdG8gZXJyX3NtZW1fbWFwOwogCX0KIApAQCAtMzI4LDcgKzMyOSw3IEBACiAJCSBwYXItPm9zYzEgLyAxMDAwLCBwYXItPm9zYzEgJSAxMDAwKTsKIAogCXByX2luZm8oImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYXQgJXNcbiIsCi0JCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2LT5idXNfaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldl9uYW1lKGRldikpOwogCXByX2luZm8oImZiJWQ6IE9zYzA6ICVzLCBPc2MxOiAlcywgT3NjJXUgc2VsZWN0ZWRcbiIsCiAJCWluZm8tPm5vZGUsIGZyZXEwLCBwYXItPm9zYzEgPyBmcmVxMSA6ICJkaXNhYmxlZCIsCiAJCXBhci0+b3NjMSAhPSAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwppbmRleCA4N2Y4MjZlLi5lMDBjMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wczNmYi5jCkBAIC0xMjEzLDcgKzEyMTMsNyBAQAogCWRldi0+Y29yZS5kcml2ZXJfZGF0YSA9IGluZm87CiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICIlcyAlcywgdXNpbmcgJXUgS2lCIG9mIHZpZGVvIG1lbW9yeVxuIiwKLQkJIGRldl9kcml2ZXJfc3RyaW5nKGluZm8tPmRldiksIGluZm8tPmRldi0+YnVzX2lkLAorCQkgZGV2X2RyaXZlcl9zdHJpbmcoaW5mby0+ZGV2KSwgZGV2X25hbWUoaW5mby0+ZGV2KSwKIAkJIGluZm8tPmZpeC5zbWVtX2xlbiA+PiAxMCk7CiAKIAl0YXNrID0ga3RocmVhZF9ydW4ocHMzZmJkLCBpbmZvLCBERVZJQ0VfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwppbmRleCAwYTBmZDQ4Li41M2Y4ZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNpbmNsdWRlIDxtYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaD4KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KQEAgLTE4OCw3ICsxODgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHZyMmZiX21hcDsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogc3RhdGljIHVuc2lnbmVkIGludCBzaGRtYSA9IFBWUjJfQ0FTQ0FERV9DSEFOOwogc3RhdGljIHVuc2lnbmVkIGludCBwdnIyZG1hID0gT05DSElQX05SX0RNQV9DSEFOTkVMUzsKICNlbmRpZgpAQCAtMjA3LDcgKzIwNyw3IEBACiBzdGF0aWMgaW50IHB2cjJfaW5pdF9jYWJsZSh2b2lkKTsKIHN0YXRpYyBpbnQgcHZyMl9nZXRfcGFyYW0oY29uc3Qgc3RydWN0IHB2cjJfcGFyYW1zICpwLCBjb25zdCBjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwsIGludCBzaXplKTsKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiBzdGF0aWMgc3NpemVfdCBwdnIyZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CiAjZW5kaWYKQEAgLTIxOCw3ICsyMTgsNyBAQAogCS5mYl9ibGFuawk9IHB2cjJmYl9ibGFuaywKIAkuZmJfY2hlY2tfdmFyCT0gcHZyMmZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3Bhcgk9IHB2cjJmYl9zZXRfcGFyLAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAkuZmJfd3JpdGUJPSBwdnIyZmJfd3JpdGUsCiAjZW5kaWYKIAkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCkBAIC02NzEsNyArNjcxLDcgQEAKIAlyZXR1cm4gY2FibGVfdHlwZTsKIH0KIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIHN0YXRpYyBzc2l6ZV90IHB2cjJmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewpAQCAtNzQzLDcgKzc0Myw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotI2VuZGlmIC8qIENPTkZJR19TSF9ETUEgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFZSMl9ETUEgKi8KIAogLyoqCiAgKiBwdnIyZmJfY29tbW9uX2luaXQKQEAgLTg5Myw3ICs4OTMsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAlpZiAocmVxdWVzdF9kbWEocHZyMmRtYSwgInB2cjIiKSAhPSAwKSB7CiAJCWZyZWVfaXJxKEhXX0VWRU5UX1ZTWU5DLCAwKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTkxNSw3ICs5MTUsNyBAQAogCX0KIAogCWZyZWVfaXJxKEhXX0VWRU5UX1ZTWU5DLCAwKTsKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAJZnJlZV9kbWEocHZyMmRtYSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCA0OGZmNzAxLi4yNTUyYjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC0yMjMwLDcgKzIyMzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YWZiX3Byb2JlLAotCS5yZW1vdmUgCT0gcHhhZmJfcmVtb3ZlLAorCS5yZW1vdmUgCT0gX19kZXZleGl0X3AocHhhZmJfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHB4YWZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFmYl9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IDBlMmI4ZmQuLjkyZWEwYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC0zMyw2ICszMyw4IEBACiAJc3RydWN0IGZiX2luZm8gaW5mbzsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJc3RydWN0IGZiX2RlZmVycmVkX2lvIGRlZmlvOworCXVuc2lnbmVkIGxvbmcgZnJhbWVfZW5kOworCXdhaXRfcXVldWVfaGVhZF90IGZyYW1lX2VuZF93YWl0OwogfTsKIAogc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgewpAQCAtMjI2LDcgKzIyOCwxMCBAQAogc3RhdGljIGlycXJldHVybl90IHNoX21vYmlsZV9sY2RjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiAqY2g7CiAJdW5zaWduZWQgbG9uZyB0bXA7CisJaW50IGlzX3N1YjsKKwlpbnQgazsKIAogCS8qIGFja25vd2xlZGdlIGludGVycnVwdCAqLwogCXRtcCA9IGxjZGNfcmVhZChwcml2LCBfTERJTlRSKTsKQEAgLTIzNCw4ICsyMzksMjQgQEAKIAl0bXAgfD0gMHgwMDAwMDBmZiBeIExESU5UUl9GUzsgLyogc3RhdHVzIGluIGxvdyA4ICovCiAJbGNkY193cml0ZShwcml2LCBfTERJTlRSLCB0bXApOwogCi0JLyogZGlzYWJsZSBjbG9ja3MgKi8KLQlzaF9tb2JpbGVfbGNkY19jbGtfb2ZmKHByaXYpOworCS8qIGZpZ3VyZSBvdXQgaWYgdGhpcyBpbnRlcnJ1cHQgaXMgZm9yIG1haW4gb3Igc3ViIGxjZCAqLworCWlzX3N1YiA9IChsY2RjX3JlYWQocHJpdiwgX0xEU1IpICYgKDEgPDwgMTApKSA/IDEgOiAwOworCisJLyogd2FrZSB1cCBjaGFubmVsIGFuZCBkaXNhYmxlIGNsb2NrcyovCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKKwkJY2ggPSAmcHJpdi0+Y2hba107CisKKwkJaWYgKCFjaC0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc19zdWIgPT0gbGNkY19jaGFuX2lzX3N1YmxjZChjaCkpIHsKKwkJCWNoLT5mcmFtZV9lbmQgPSAxOworCQkJd2FrZV91cCgmY2gtPmZyYW1lX2VuZF93YWl0KTsKKworCQkJc2hfbW9iaWxlX2xjZGNfY2xrX29mZihwcml2KTsKKwkJfQorCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNDQ2LDIyICs0NjcsMjkgQEAKIHsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiAqY2g7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZwkqYm9hcmRfY2ZnOwotCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCBrOwogCi0JLyogdGVsbCB0aGUgYm9hcmQgY29kZSB0byBkaXNhYmxlIHRoZSBwYW5lbCAqLworCS8qIGNsZWFuIHVwIGRlZmVycmVkIGlvIGFuZCBhc2sgYm9hcmQgY29kZSB0byBkaXNhYmxlIHBhbmVsICovCiAJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hba107CisKKwkJLyogZGVmZXJyZWQgaW8gbW9kZToKKwkJICogZmx1c2ggZnJhbWUsIGFuZCB3YWl0IGZvciBmcmFtZSBlbmQgaW50ZXJydXB0CisJCSAqIGNsZWFuIHVwIGRlZmVycmVkIGlvIGFuZCBlbmFibGUgY2xvY2sKKwkJICovCisJCWlmIChjaC0+aW5mby5mYmRlZmlvKSB7CisJCQljaC0+ZnJhbWVfZW5kID0gMDsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2gtPmluZm8uZGVmZXJyZWRfd29yaywgMCk7CisJCQl3YWl0X2V2ZW50KGNoLT5mcmFtZV9lbmRfd2FpdCwgY2gtPmZyYW1lX2VuZCk7CisJCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKCZjaC0+aW5mbyk7CisJCQljaC0+aW5mby5mYmRlZmlvID0gTlVMTDsKKwkJCXNoX21vYmlsZV9sY2RjX2Nsa19vbihwcml2KTsKKwkJfQorCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKIAkJaWYgKGJvYXJkX2NmZy0+ZGlzcGxheV9vZmYpCiAJCQlib2FyZF9jZmctPmRpc3BsYXlfb2ZmKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSk7CiAKLQkJLyogY2xlYW51cCBkZWZlcnJlZCBpbyBpZiBTWVMgYnVzICovCi0JCXRtcCA9IGNoLT5jZmcuc3lzX2J1c19jZmcuZGVmZXJyZWRfaW9fbXNlYzsKLQkJaWYgKGNoLT5sZG10MXJfdmFsdWUgJiAoMSA8PCAxMikgJiYgdG1wKSB7Ci0JCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKCZjaC0+aW5mbyk7Ci0JCQljaC0+aW5mby5mYmRlZmlvID0gTlVMTDsKLQkJfQogCX0KIAogCS8qIHN0b3AgdGhlIGxjZGMgKi8KQEAgLTY1NCw2ICs2ODIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlzaF9tb2JpbGVfbGNkY19zdG9wKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzaF9tb2JpbGVfbGNkY19zdGFydChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9tb2JpbGVfbGNkY19kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gc2hfbW9iaWxlX2xjZGNfc3VzcGVuZCwKKwkucmVzdW1lID0gc2hfbW9iaWxlX2xjZGNfcmVzdW1lLAorfTsKKwogc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoX21vYmlsZV9sY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC02ODksNyArNzM3LDcgQEAKIAl9CiAKIAllcnJvciA9IHJlcXVlc3RfaXJxKGksIHNoX21vYmlsZV9sY2RjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICBwZGV2LT5kZXYuYnVzX2lkLCBwcml2KTsKKwkJCSAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcHJpdik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IGlycVxuIik7CiAJCWdvdG8gZXJyMTsKQEAgLTcwOSw2ICs3NTcsNyBAQAogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGVcbiIpOwogCQkJZ290byBlcnIxOwogCQl9CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmNoW2ldLmZyYW1lX2VuZF93YWl0KTsKIAogCQlzd2l0Y2ggKHBkYXRhLT5jaFtpXS5jaGFuKSB7CiAJCWNhc2UgTENEQ19DSEFOX01BSU5MQ0Q6CkBAIC04NjIsNiArOTExLDcgQEAKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gInNoX21vYmlsZV9sY2RjX2ZiIiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucG0JCT0gJnNoX21vYmlsZV9sY2RjX2Rldl9wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gc2hfbW9iaWxlX2xjZGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzaF9tb2JpbGVfbGNkY19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwppbmRleCA3YmFmMmRkLi5hMWViMDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTc1MSw3ICs3NTEsNyBAQAogCX0KIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgJnRtaW9mYl9pcnEsIElSUUZfRElTQUJMRUQsCi0JCQkJCWRldi0+ZGV2LmJ1c19pZCwgaW5mbyk7CisJCQkJCWRldl9uYW1lKCZkZXYtPmRldiksIGluZm8pOwogCiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfcmVxdWVzdF9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvdzEtZ3Bpby5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL3cxLWdwaW8uYwppbmRleCA5ZTExMzhhLi5hNDExNzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvdzEtZ3Bpby5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy93MS1ncGlvLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHsKIAlzdHJ1Y3QgdzFfZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRhdGE7CiAKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUocGRhdGEtPnBpbik7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5waW4pID8gMSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHcxX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL0tjb25maWcgYi9kcml2ZXJzL3cxL3NsYXZlcy9LY29uZmlnCmluZGV4IDhkMGIxZmIuLjFmNTEzNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvc2xhdmVzL0tjb25maWcKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvS2NvbmZpZwpAQCAtMTYsNiArMTYsMTIgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCAxLXdpcmUKIAkgIHNpbXBsZSA2NGJpdCBtZW1vcnkgcm9tKGRzMjQwMS9kczI0MTEvZHMxOTkwKikgdG8geW91ciB3aXJlLgogCitjb25maWcgVzFfU0xBVkVfRFMyNDMxCisJdHJpc3RhdGUgIjFrYiBFRVBST00gZmFtaWx5IHN1cHBvcnQgKERTMjQzMSkiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSAxLXdpcmUKKwkgIDFrYiBFRVBST00gZmFtaWx5IGRldmljZSAoRFMyNDMxKQorCiBjb25maWcgVzFfU0xBVkVfRFMyNDMzCiAJdHJpc3RhdGUgIjRrYiBFRVBST00gZmFtaWx5IHN1cHBvcnQgKERTMjQzMykiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9zbGF2ZXMvTWFrZWZpbGUgYi9kcml2ZXJzL3cxL3NsYXZlcy9NYWtlZmlsZQppbmRleCA5OTBmNDAwLi5mMWY1MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3NsYXZlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3cxL3NsYXZlcy9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX1cxX1NMQVZFX1RIRVJNKQkrPSB3MV90aGVybS5vCiBvYmotJChDT05GSUdfVzFfU0xBVkVfU01FTSkJKz0gdzFfc21lbS5vCitvYmotJChDT05GSUdfVzFfU0xBVkVfRFMyNDMxKQkrPSB3MV9kczI0MzEubwogb2JqLSQoQ09ORklHX1cxX1NMQVZFX0RTMjQzMykJKz0gdzFfZHMyNDMzLm8KIG9iai0kKENPTkZJR19XMV9TTEFWRV9EUzI3NjApCSs9IHcxX2RzMjc2MC5vCiBvYmotJChDT05GSUdfVzFfU0xBVkVfQlEyNzAwMCkJKz0gdzFfYnEyNzAwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MzMuYyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMy5jCmluZGV4IDg1OGMxNmEuLjEzOTQ0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMy5jCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMy5jCkBAIC0xNTYsNiArMTU2LDkgQEAKICAqLwogc3RhdGljIGludCB3MV9mMjNfd3JpdGUoc3RydWN0IHcxX3NsYXZlICpzbCwgaW50IGFkZHIsIGludCBsZW4sIGNvbnN0IHU4ICpkYXRhKQogeworI2lmZGVmIENPTkZJR19XMV9TTEFWRV9EUzI0MzNfQ1JDCisJc3RydWN0IHcxX2YyM19kYXRhICpmMjMgPSBzbC0+ZmFtaWx5X2RhdGE7CisjZW5kaWYKIAl1OCB3cmJ1Zls0XTsKIAl1OCByZGJ1ZltXMV9QQUdFX1NJWkUgKyAzXTsKIAl1OCBlcyA9IChhZGRyICsgbGVuIC0gMSkgJiAweDFmOwpAQCAtMTk2LDcgKzE5OSw5IEBACiAKIAkvKiBSZXNldCB0aGUgYnVzIHRvIHdha2UgdXAgdGhlIEVFUFJPTSAodGhpcyBtYXkgbm90IGJlIG5lZWRlZCkgKi8KIAl3MV9yZXNldF9idXMoc2wtPm1hc3Rlcik7Ci0KKyNpZmRlZiBDT05GSUdfVzFfU0xBVkVfRFMyNDMzX0NSQworCWYyMy0+dmFsaWRjcmMgJj0gfigxIDw8IChhZGRyID4+IFcxX1BBR0VfQklUUykpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAwOWEzZDU1Li41NWY2NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC00MDYsNyArNDA2LDcgQEAKIAktLS1oZWxwLS0tCiAJICBIYXJkd2FyZSBkcml2ZXIgZm9yIHRoZSBpbnRlbCBUQ08gdGltZXIgYmFzZWQgd2F0Y2hkb2cgZGV2aWNlcy4KIAkgIFRoZXNlIGRyaXZlcnMgYXJlIGluY2x1ZGVkIGluIHRoZSBJbnRlbCA4MjgwMSBJL08gQ29udHJvbGxlcgotCSAgSHViIGZhbWlseSAoZnJvbSBJQ0gwIHVwIHRvIElDSDgpIGFuZCBpbiB0aGUgSW50ZWwgNjMwMEVTQgorCSAgSHViIGZhbWlseSAoZnJvbSBJQ0gwIHVwIHRvIElDSDEwKSBhbmQgaW4gdGhlIEludGVsIDYzeHhFU0IKIAkgIGNvbnRyb2xsZXIgaHViLgogCiAJICBUaGUgVENPIChUb3RhbCBDb3N0IG9mIE93bmVyc2hpcCkgdGltZXIgaXMgYSB3YXRjaGRvZyB0aW1lcgpAQCAtOTQwLDIxICs5NDAsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd2R0LgogCi1jb25maWcgV0RUXzUwMQotCWJvb2wgIldEVDUwMSBmZWF0dXJlcyIKLQlkZXBlbmRzIG9uIFdEVAotCWhlbHAKLQkgIFNheWluZyBZIGhlcmUgYW5kIGNyZWF0aW5nIGEgY2hhcmFjdGVyIHNwZWNpYWwgZmlsZSAvZGV2L3RlbXBlcmF0dXJlCi0JICB3aXRoIG1ham9yIG51bWJlciAxMCBhbmQgbWlub3IgbnVtYmVyIDEzMSAoIm1hbiBta25vZCIpIHdpbGwgZ2l2ZQotCSAgeW91IGEgdGhlcm1vbWV0ZXIgaW5zaWRlIHlvdXIgY29tcHV0ZXI6IHJlYWRpbmcgZnJvbQotCSAgL2Rldi90ZW1wZXJhdHVyZSB5aWVsZHMgb25lIGJ5dGUsIHRoZSB0ZW1wZXJhdHVyZSBpbiBkZWdyZWVzCi0JICBGYWhyZW5oZWl0LiBUaGlzIHdvcmtzIG9ubHkgaWYgeW91IGhhdmUgYSBXRFQ1MDFQIHdhdGNoZG9nIGJvYXJkCi0JICBpbnN0YWxsZWQuCi0KLQkgIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgRmFuIFRhY2hvbWV0ZXIgb24gdGhlIFdEVDUwMVAsIHRoZW4geW91Ci0JICBjYW4gZG8gdGhpcyB2aWEgdGhlIHRhY2hvbWV0ZXIgcGFyYW1ldGVyLiBPbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYQotCSAgZmFuIHRhY2hvbWV0ZXIgYWN0dWFsbHkgc2V0IHVwLgotCiAjCiAjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYwppbmRleCAzZTU3YWE0Li40ZDE4Yzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglBY3F1aXJlIFNpbmdsZSBCb2FyZCBDb21wdXRlciBXYXRjaGRvZyBUaW1lciBkcml2ZXIKICAqCi0gKiAgICAgIEJhc2VkIG9uIHdkdC5jLiBPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CisgKglCYXNlZCBvbiB3ZHQuYy4gT3JpZ2luYWwgY29weXJpZ2h0IG1lc3NhZ2VzOgogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKICAqCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQEAgLTE3LDkgKzE3LDkgQEAKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTUgICAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCi0gKiAgICAgIDE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KLSAqICAgICAgICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0gKiAgICAgICAgICBDYW4ndCBhZGQgdGltZW91dCAtIGRyaXZlciBkb2Vzbid0IGFsbG93IGNoYW5naW5nIHZhbHVlCisgKgkxNC1EZWMtMjAwMSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+CisgKgkgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKyAqCSAgICBDYW4ndCBhZGQgdGltZW91dCAtIGRyaXZlciBkb2Vzbid0IGFsbG93IGNoYW5naW5nIHZhbHVlCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCmluZGV4IGExZDc4NTYuLjgyNGQwNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKQEAgLTEzOCw3ICsxMzgsOSBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwogCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKLQkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX01BR0lDQ0xPU0UsCisJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8CisJCQkgICBXRElPRl9TRVRUSU1FT1VUIHwKKwkJCSAgIFdESU9GX01BR0lDQ0xPU0UsCiAJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKIAkJLmlkZW50aXR5ID0gV0FUQ0hET0dfTkFNRSwKIAl9OwpAQCAtMjU5LDcgKzI2MSw4IEBACiAJCWdvdG8gdW5yZWdfc3RvcDsKIAl9CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmIChhZHZ3ZHRfc2V0X2hlYXJ0YmVhdCh0aW1lb3V0KSkgewogCQlhZHZ3ZHRfc2V0X2hlYXJ0YmVhdChXQVRDSERPR19USU1FT1VUKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCmluZGV4IDJhNzY5MGUuLjkzN2E4MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYwpAQCAtNjAsNyArNjAsNyBAQAogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsICZ2YWwpOwogCXZhbCAmPSB+MHgzRjsJLyogTWFzayBjb3VudCAqLwotCXZhbCB8PSAoMTw8MjUpIHwgYWxpX3RpbWVvdXRfYml0czsKKwl2YWwgfD0gKDEgPDwgMjUpIHwgYWxpX3RpbWVvdXRfYml0czsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsIHZhbCk7CiAKIAlzcGluX3VubG9jaygmYWxpX2xvY2spOwpAQCAtNzksOCArNzksOCBAQAogCXNwaW5fbG9jaygmYWxpX2xvY2spOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsICZ2YWwpOwotCXZhbCAmPSB+MHgzRjsJLyogTWFzayBjb3VudCB0byB6ZXJvIChkaXNhYmxlZCkgKi8KLQl2YWwgJj0gfigxPDwyNSk7LyogYW5kIGZvciBzYWZldHkgbWFzayB0aGUgcmVzZXQgZW5hYmxlICovCisJdmFsICY9IH4weDNGOwkJLyogTWFzayBjb3VudCB0byB6ZXJvIChkaXNhYmxlZCkgKi8KKwl2YWwgJj0gfigxIDw8IDI1KTsJLyogYW5kIGZvciBzYWZldHkgbWFzayB0aGUgcmVzZXQgZW5hYmxlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhbGlfcGNpLCAweENDLCB2YWwpOwogCiAJc3Bpbl91bmxvY2soJmFsaV9sb2NrKTsKQEAgLTg5LDcgKzg5LDcgQEAKIC8qCiAgKglhbGlfa2VlcGFsaXZlCS0Jc2VuZCBhIGtlZXBhbGl2ZSB0byB0aGUgd2F0Y2hkb2cKICAqCi0gKiAgICAgIFNlbmQgYSBrZWVwYWxpdmUgdG8gdGhlIHRpbWVyIChhY3R1YWxseSB3ZSByZXN0YXJ0IHRoZSB0aW1lcikuCisgKglTZW5kIGEga2VlcGFsaXZlIHRvIHRoZSB0aW1lciAoYWN0dWFsbHkgd2UgcmVzdGFydCB0aGUgdGltZXIpLgogICovCiAKIHN0YXRpYyB2b2lkIGFsaV9rZWVwYWxpdmUodm9pZCkKQEAgLTEwOSwxMSArMTA5LDExIEBACiAJaWYgKHQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIGlmICh0IDwgNjApCi0JCWFsaV90aW1lb3V0X2JpdHMgPSB0fCgxPDw2KTsKKwkJYWxpX3RpbWVvdXRfYml0cyA9IHR8KDEgPDwgNik7CiAJZWxzZSBpZiAodCA8IDM2MDApCi0JCWFsaV90aW1lb3V0X2JpdHMgPSAodC82MCl8KDE8PDcpOworCQlhbGlfdGltZW91dF9iaXRzID0gKHQgLyA2MCl8KDEgPDwgNyk7CiAJZWxzZSBpZiAodCA8IDE4MDAwKQotCQlhbGlfdGltZW91dF9iaXRzID0gKHQvMzAwKXwoMTw8Nil8KDE8PDcpOworCQlhbGlfdGltZW91dF9iaXRzID0gKHQgLyAzMDApfCgxIDw8IDYpfCgxIDw8IDcpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEzOCw3ICsxMzgsNyBAQAogICovCiAKIHN0YXRpYyBzc2l6ZV90IGFsaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCi0JCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCisJCQkJCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLwogCWlmIChsZW4pIHsKQEAgLTM0OCw5ICszNDgsOSBAQAogCS8qIFRpbWVyIGJpdHMgKi8KIAl3ZG9nICY9IH4weDNGOwogCS8qIElzc3VlZCBldmVudHMgKi8KLQl3ZG9nICY9IH4oKDE8PDI3KXwoMTw8MjYpfCgxPDwyNSl8KDE8PDI0KSk7CisJd2RvZyAmPSB+KCgxIDw8IDI3KXwoMSA8PCAyNil8KDEgPDwgMjUpfCgxIDw8IDI0KSk7CiAJLyogTm8gbW9uaXRvciBiaXRzICovCi0Jd2RvZyAmPSB+KCgxPDwxNil8KDE8PDEzKXwoMTw8MTIpfCgxPDwxMSl8KDE8PDEwKXwoMTw8OSkpOworCXdkb2cgJj0gfigoMSA8PCAxNil8KDEgPDwgMTMpfCgxIDw8IDEyKXwoMSA8PCAxMSl8KDEgPDwgMTApfCgxIDw8IDkpKTsKIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhDQywgd2RvZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCmluZGV4IGEwNDVlZjguLjkwZjk4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYwpAQCAtMzU1LDcgKzM1NSw4IEBACiAJYWxpbTcxMDFfcG11ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9JRF9BTF9NNzEwMSwKIAkJTlVMTCk7CiAJaWYgKCFhbGltNzEwMV9wbXUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFMaSBNNzEwMSBQTVUgbm90IHByZXNlbnQgLSBXRFQgbm90IHNldFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiQUxpIE03MTAxIFBNVSBub3QgcHJlc2VudCAtIFdEVCBub3Qgc2V0XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTM5OSw3ICs0MDAsOCBAQAogCiAJcmMgPSBtaXNjX3JlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQl3ZHRfbWlzY2Rldi5taW5vciwgcmMpOwogCQlnb3RvIGVycl9vdXRfcmVib290OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYwppbmRleCA1NTMxNjkxLi5lMzVkNTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hdDkxcm05MjAwX3dkdC5jCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogc3RhdGljIGludCBhdDkxX3dkdF9zZXR0aW1lb3V0KGludCBuZXdfdGltZSkKIHsKIAkvKgotCSAqIEFsbCBjb3VudGluZyBvY2N1cnMgYXQgU0xPV19DTE9DSyAvIDEyOCA9IDAuMjU2IEh6CisJICogQWxsIGNvdW50aW5nIG9jY3VycyBhdCBTTE9XX0NMT0NLIC8gMTI4ID0gMjU2IEh6CiAJICoKIAkgKiBTaW5jZSBXRFYgaXMgYSAxNi1iaXQgY291bnRlciwgdGhlIG1heGltdW0gcGVyaW9kIGlzCi0JICogNjU1MzYgLyAwLjI1NiA9IDI1NiBzZWNvbmRzLgorCSAqIDY1NTM2IC8gMjU2ID0gMjU2IHNlY29uZHMuCiAJICovCiAJaWYgKChuZXdfdGltZSA8PSAwKSB8fCAobmV3X3RpbWUgPiBXRFRfTUFYX1RJTUUpKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFzYW05X3dkdC5jCmluZGV4IGIxZGEyODcuLjQzNWIwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yMDAsNyArMjAxLDcgQEAKICAqIFBhdCB0aGUgd2F0Y2hkb2cgd2hlbmV2ZXIgZGV2aWNlIGlzIHdyaXR0ZW4gdG8uCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGF0OTFfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLAotICAgICAgbG9mZl90ICpwcG9zKQorCQkJCQkJCQlsb2ZmX3QgKnBwb3MpCiB7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwppbmRleCAwODRkZmU5Li40MTA3MGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwpAQCAtMSwxMyArMSwxMyBAQAogLyogY3B3ZC5jIC0gZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciBoYXJkd2FyZSB3YXRjaGRvZwogICogdGltZXJzIGZvdW5kIG9uIFN1biBNaWNyb3N5c3RlbXMgQ1AxNDAwIGFuZCBDUDE1MDAgYm9hcmRzLgogICoKLSAqIFRoaXMgZGV2aWNlIHN1cHBvcnRzIGJvdGggdGhlIGdlbmVyaWMgTGludXggd2F0Y2hkb2cgCisgKiBUaGlzIGRldmljZSBzdXBwb3J0cyBib3RoIHRoZSBnZW5lcmljIExpbnV4IHdhdGNoZG9nCiAgKiBpbnRlcmZhY2UgYW5kIFNvbGFyaXMtY29tcGF0aWJsZSBpb2N0bHMgYXMgYmVzdCBpdCBpcwogICogYWJsZS4KICAqCiAgKiBOT1RFOiAJQ1AxNDAwIHN5c3RlbXMgYXBwZWFyIHRvIGhhdmUgYSBkZWZlY3RpdmUgaW50cl9tYXNrCiAgKiAJCQlyZWdpc3RlciBvbiB0aGUgUExELCBwcmV2ZW50aW5nIHRoZSBkaXNhYmxpbmcgb2YKLSAqIAkJCXRpbWVyIGludGVycnVwdHMuICBXZSB1c2UgYSB0aW1lciB0byBwZXJpb2RpY2FsbHkgCisgKiAJCQl0aW1lciBpbnRlcnJ1cHRzLiAgV2UgdXNlIGEgdGltZXIgdG8gcGVyaW9kaWNhbGx5CiAgKiAJCQlyZXNldCAnc3RvcHBlZCcgd2F0Y2hkb2dzIG9uIGFmZmVjdGVkIHBsYXRmb3Jtcy4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgRXJpYyBCcm93ZXIgKGVicm93ZXJAdXNhLm5ldCkKQEAgLTI4LDEwICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAjaW5jbHVkZSA8YXNtL3dhdGNoZG9nLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUJImNwd2QiCkBAIC00Myw4ICs0Miw4IEBACiAjZGVmaW5lIFdEX0JMSU1JVAkweEZGRkYKIAogI2RlZmluZSBXRDBfTUlOT1IJMjEyCi0jZGVmaW5lIFdEMV9NSU5PUgkyMTMJCi0jZGVmaW5lIFdEMl9NSU5PUgkyMTQJCisjZGVmaW5lIFdEMV9NSU5PUgkyMTMKKyNkZWZpbmUgV0QyX01JTk9SCTIxNAogCiAvKiBJbnRlcm5hbCBkcml2ZXIgZGVmaW5pdGlvbnMuICAqLwogI2RlZmluZSBXRDBfSUQJCQkwCkBAIC05MSwxNiArOTAsMTYgQEAKIAogc3RhdGljIHN0cnVjdCBjcHdkICpjcHdkX2RldmljZTsKIAotLyogU3VuIHVzZXMgQWx0ZXJhIFBMRCBFUEY4ODIwQVRDMTQ0LTQgCisvKiBTdW4gdXNlcyBBbHRlcmEgUExEIEVQRjg4MjBBVEMxNDQtNAogICogcHJvdmlkaW5nIHRocmVlIGhhcmR3YXJlIHdhdGNoZG9nczoKICAqCi0gKiAJMSkgUklDIC0gc2VuZHMgYW4gaW50ZXJydXB0IHdoZW4gdHJpZ2dlcmVkCi0gKiAJMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQotICogCTMpIFBPUiAtIGFzc2VydHMgUE9SX0JfUkVTRVQgd2hlbiB0cmlnZ2VyZWQsIHJlc2V0cyBDUFUsIGJhY2twbGFuZSwgYm9hcmQKKyAqIDEpIFJJQyAtIHNlbmRzIGFuIGludGVycnVwdCB3aGVuIHRyaWdnZXJlZAorICogMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQorICogMykgUE9SIC0gYXNzZXJ0cyBQT1JfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVSwgYmFja3BsYW5lLCBib2FyZAogICoKICAqKiogVGltZXIgcmVnaXN0ZXIgYmxvY2sgZGVmaW5pdGlvbiAoc3RydWN0IHdkX3RpbWVyX3JlZ2JsaykKICAqCi0gKiBkY250ciBhbmQgbGltaXQgcmVnaXN0ZXJzIChoYWxmd29yZCBhY2Nlc3MpOiAgICAgIAorICogZGNudHIgYW5kIGxpbWl0IHJlZ2lzdGVycyAoaGFsZndvcmQgYWNjZXNzKToKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHwgMTUgfCAuLi58IDEgfCAwIHwKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwOCw3ICsxMDcsOCBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLQogICogZGNudHIgLSAJQ3VycmVudCAxNi1iaXQgZG93bmNvdW50ZXIgdmFsdWUuCiAgKiAJCQlXaGVuIGRvd25jb3VudGVyIHJlYWNoZXMgJzAnIHdhdGNoZG9nIGV4cGlyZXMuCi0gKiAJCQlSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgcmVzZXRzIGRvd25jb3VudGVyIHdpdGggJ2xpbWl0JyB2YWx1ZS4KKyAqIAkJCVJlYWRpbmcgdGhpcyByZWdpc3RlciByZXNldHMgZG93bmNvdW50ZXIgd2l0aAorICogCQkJJ2xpbWl0JyB2YWx1ZS4KICAqIGxpbWl0IC0gCTE2LWJpdCBjb3VudGRvd24gdmFsdWUgaW4gMS8xMHRoIHNlY29uZCBpbmNyZW1lbnRzLgogICogCQkJV3JpdGluZyB0aGlzIHJlZ2lzdGVyIGJlZ2lucyBjb3VudGRvd24gd2l0aCBpbnB1dCB2YWx1ZS4KICAqIAkJCVJlYWRpbmcgZnJvbSB0aGlzIHJlZ2lzdGVyIGRvZXMgbm90IGFmZmVjdCBjb3VudGVyLgpAQCAtMTU4LDExICsxNTgsMTEgQEAKIHN0YXRpYyBpbnQgd2QxX3RpbWVvdXQgPSAwOwogc3RhdGljIGludCB3ZDJfdGltZW91dCA9IDA7CiAKLW1vZHVsZV9wYXJhbQkod2QwX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QwX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMF90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzAgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QxX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QxX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMV90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzEgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QyX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QyX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMl90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzIgdGltZW91dCBpbiAxLzEwc2VjcyIpOwogCiBNT0RVTEVfQVVUSE9SKCJFcmljIEJyb3dlciA8ZWJyb3dlckB1c2EubmV0PiIpOwpAQCAtMjAxLDkgKzIwMSw5IEBACiBzdGF0aWMgdm9pZCBjcHdkX3RvZ2dsZWludHIoc3RydWN0IGNwd2QgKnAsIGludCBpbmRleCwgaW50IGVuYWJsZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGN1cnJlZ3MgPSBjcHdkX3JlYWRiKHAtPnJlZ3MgKyBQTERfSU1BU0spOwotCXVuc2lnbmVkIGNoYXIgc2V0cmVncyA9IAotCQkoaW5kZXggPT0gLTEpID8gCi0JCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDogCisJdW5zaWduZWQgY2hhciBzZXRyZWdzID0KKwkJKGluZGV4ID09IC0xKSA/CisJCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDoKIAkJKHAtPmRldnNbaW5kZXhdLmludHJfbWFzayk7CiAKIAlpZiAoZW5hYmxlID09IFdEX0lOVFJfT04pCkBAIC0zMDMsMjQgKzMwMywyNCBAQAogCXVuc2lnbmVkIGNoYXIgcmV0ICA9IFdEX1NUT1BQRUQ7CiAKIAkvKiBkZXRlcm1pbmUgU1RPUFBFRCAqLwotCWlmICghc3RhdCkgCisJaWYgKCFzdGF0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogZGV0ZXJtaW5lIEVYUElSRUQgdnMgRlJFRVJVTiB2cyBSVU5OSU5HICovCiAJZWxzZSBpZiAoV0RfU19FWFBJUkVEICYgc3RhdCkgewogCQlyZXQgPSBXRF9FWFBJUkVEOwotCX0gZWxzZSBpZihXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CisJfSBlbHNlIGlmIChXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CiAJCWlmIChpbnRyICYgcC0+ZGV2c1tpbmRleF0uaW50cl9tYXNrKSB7CiAJCQlyZXQgPSBXRF9GUkVFUlVOOwogCQl9IGVsc2UgewogCQkJLyogRnVkZ2UgV0RfRVhQSVJFRCBzdGF0dXMgZm9yIGRlZmVjdGl2ZSBDUDE0MDAtLQotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIGFuIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0VYUElSRUQuCiAJCQkgKgotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIG5vIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0ZSRUVSVU4uCiAJCQkgKi8KQEAgLTMyOSw3ICszMjksOCBAQAogCQkJCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpIHsKIAkJCQkJcmV0ID0gV0RfRVhQSVJFRDsKIAkJCQl9IGVsc2UgewotCQkJCQkvKiB3ZSBjb3VsZCBhcyB3ZWxsIHByZXRlbmQgd2UgYXJlIGV4cGlyZWQgKi8KKwkJCQkJLyogd2UgY291bGQgYXMgd2VsbCBwcmV0ZW5kCisJCQkJCSAqIHdlIGFyZSBleHBpcmVkICovCiAJCQkJCXJldCA9IFdEX0ZSRUVSVU47CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTM0Miw3ICszNDMsNyBAQAogCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpCiAJCXJldCB8PSBXRF9TRVJWSUNFRDsKIAotCXJldHVybihyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjcHdkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0zNjcsMjIgKzM2OCwyMiBAQAogCXN0cnVjdCBjcHdkICpwID0gY3B3ZF9kZXZpY2U7CiAKIAlsb2NrX2tlcm5lbCgpOwotCXN3aXRjaChpbWlub3IoaW5vZGUpKSB7Ci0JCWNhc2UgV0QwX01JTk9SOgotCQljYXNlIFdEMV9NSU5PUjoKLQkJY2FzZSBXRDJfTUlOT1I6Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGltaW5vcihpbm9kZSkpIHsKKwljYXNlIFdEMF9NSU5PUjoKKwljYXNlIFdEMV9NSU5PUjoKKwljYXNlIFdEMl9NSU5PUjoKKwkJYnJlYWs7CiAKLQkJZGVmYXVsdDoKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAtRU5PREVWOworCWRlZmF1bHQ6CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogUmVnaXN0ZXIgSVJRIG9uIGZpcnN0IG9wZW4gb2YgZGV2aWNlICovCiAJaWYgKCFwLT5pbml0aWFsaXplZCkgewotCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsIAorCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgSVJRICVkXG4iLAogCQkJCXAtPmlycSk7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtNDAwLDggKzQwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3B3ZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgCi0JCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgY3B3ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQsCkBAIC00MDksNiArNDA5LDcgQEAKIAkJLmlkZW50aXR5CQk9IERSSVZFUl9OQU1FLAogCX07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGluZGV4ID0gaW1pbm9yKGlub2RlKSAtIFdEMF9NSU5PUjsKIAlzdHJ1Y3QgY3B3ZCAqcCA9IGNwd2RfZGV2aWNlOwogCWludCBzZXRvcHQgPSAwOwpAQCAtNDQyLDcgKzQ0Myw3IEBACiAJCQljcHdkX3N0YXJ0dGltZXIocCwgaW5kZXgpOwogCQl9IGVsc2UgewogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0JCisJCX0KIAkJYnJlYWs7CiAKIAkvKiBTb2xhcmlzLWNvbXBhdGlibGUgSU9DVExzICovCkBAIC00NTgsNyArNDU5LDcgQEAKIAogCWNhc2UgV0lPQ1NUT1A6CiAJCWlmIChwLT5lbmFibGVkKQotCQkJcmV0dXJuKC1FSU5WQUwpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY3B3ZF9zdG9wdGltZXIocCwgaW5kZXgpOwogCQlicmVhazsKQEAgLTQ4MSw3ICs0ODIsNyBAQAogCWNhc2UgV0lPQ1NUT1A6CiAJY2FzZSBXSU9DR1NUQVQ6CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJ2YWwgPSBjcHdkX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcnZhbCA9IGNwd2RfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCkBAIC00OTMsNyArNDk0LDcgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgCitzdGF0aWMgc3NpemVfdCBjcHdkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTUwOCwyMCArNTA5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNwd2RfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCitzdGF0aWMgc3NpemVfdCBjcHdkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkuaW9jdGwgPQljcHdkX2lvY3RsLAotCS5jb21wYXRfaW9jdGwgPQljcHdkX2NvbXBhdF9pb2N0bCwKLQkub3BlbiA9CQljcHdkX29wZW4sCi0JLndyaXRlID0JY3B3ZF93cml0ZSwKLQkucmVhZCA9CQljcHdkX3JlYWQsCi0JLnJlbGVhc2UgPQljcHdkX3JlbGVhc2UsCisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS51bmxvY2tlZF9pb2N0bCA9CWNwd2RfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9CQljcHdkX2NvbXBhdF9pb2N0bCwKKwkub3BlbiA9CQkJY3B3ZF9vcGVuLAorCS53cml0ZSA9CQljcHdkX3dyaXRlLAorCS5yZWFkID0JCQljcHdkX3JlYWQsCisJLnJlbGVhc2UgPQkJY3B3ZF9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgY3B3ZF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwppbmRleCAyZTEzNjAyLi5jNTFkMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNkZWZpbmUgTU9EVUxFX05BTUUgIkRBVklOQ0ktV0RUOiAiCiAKQEAgLTc1LDkgKzc1LDkgQEAKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCiAJLyogcHV0IHdhdGNoZG9nIGluIHNlcnZpY2Ugc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVEwLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCwgd2R0X2Jhc2UgKyBXRFRDUik7CiAJLyogcHV0IHdhdGNoZG9nIGluIGFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTEsIHdkdF9iYXNlICsgV0RUQ1IpOworCWlvd3JpdGUzMihXREtFWV9TRVExLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTkwLDI5ICs5MCwyOSBAQAogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKIAkvKiBkaXNhYmxlLCBpbnRlcm5hbCBjbG9jayBzb3VyY2UgKi8KLQlkYXZpbmNpX3dyaXRlbCgwLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVENSKTsKIAkvKiByZXNldCB0aW1lciwgc2V0IG1vZGUgdG8gNjQtYml0IHdhdGNoZG9nLCBhbmQgdW5yZXNldCAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVEdDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVEdDUik7CiAJdGdjciA9IFRJTU1PREVfNjRCSVRfV0RPRyB8IFRJTTEyUlNfVU5SRVNFVCB8IFRJTTM0UlNfVU5SRVNFVDsKLQlkYXZpbmNpX3dyaXRlbCh0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOworCWlvd3JpdGUzMih0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOwogCS8qIGNsZWFyIGNvdW50ZXIgcmVncyAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMTIpOwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMzQpOworCWlvd3JpdGUzMigwLCB3ZHRfYmFzZSArIFRJTTEyKTsKKwlpb3dyaXRlMzIoMCwgd2R0X2Jhc2UgKyBUSU0zNCk7CiAJLyogc2V0IHRpbWVvdXQgcGVyaW9kICovCiAJdGltZXJfbWFyZ2luID0gKCgodTY0KWhlYXJ0YmVhdCAqIENMT0NLX1RJQ0tfUkFURSkgJiAweGZmZmZmZmZmKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOwogCXRpbWVyX21hcmdpbiA9ICgoKHU2NCloZWFydGJlYXQgKiBDTE9DS19USUNLX1JBVEUpID4+IDMyKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOwogCS8qIGVuYWJsZSBydW4gY29udGludW91c2x5ICovCi0JZGF2aW5jaV93cml0ZWwoRU5BTU9ERTEyX1BFUklPRElDLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKEVOQU1PREUxMl9QRVJJT0RJQywgd2R0X2Jhc2UgKyBUQ1IpOwogCS8qIE9uY2UgdGhlIFdEVCBpcyBpbiBwcmUtYWN0aXZlIHN0YXRlIHdyaXRlIHRvCiAJICogVElNMTIsIFRJTTM0LCBQUkQxMiwgUFJEMzQsIFRDUiwgVEdDUiwgV0RUQ1IgYXJlCiAJICogd3JpdGUgcHJvdGVjdGVkIChleGNlcHQgZm9yIHRoZSBXREtFWSBmaWVsZCkKIAkgKi8KIAkvKiBwdXQgd2F0Y2hkb2cgaW4gcHJlLWFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTAgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCB8IFdERU4sIHdkdF9iYXNlICsgV0RUQ1IpOwogCS8qIHB1dCB3YXRjaGRvZyBpbiBhY3RpdmUgc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVExIHwgV0RFTiwgd2R0X2Jhc2UgKyBXRFRDUik7CisJaW93cml0ZTMyKFdES0VZX1NFUTEgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTE5NywxNyArMTk3LDE2IEBACiB7CiAJaW50IHJldCA9IDAsIHNpemU7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAogCWlmIChoZWFydGJlYXQgPCAxIHx8IGhlYXJ0YmVhdCA+IE1BWF9IRUFSVEJFQVQpCiAJCWhlYXJ0YmVhdCA9IERFRkFVTFRfSEVBUlRCRUFUOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkiRGFWaW5jaSBXYXRjaGRvZyBUaW1lcjogaGVhcnRiZWF0ICVkIHNlY1xuIiwgaGVhcnRiZWF0KTsKKwlkZXZfaW5mbyhkZXYsICJoZWFydGJlYXQgJWQgc2VjXG4iLCBoZWFydGJlYXQpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkJImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC0yMTUsMjAgKzIxNCwyNiBAQAogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAKIAlpZiAod2R0X21lbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCXdkdF9iYXNlID0gKHZvaWQgX19pb21lbSAqKShyZXMtPnN0YXJ0KTsKKworCXdkdF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoIXdkdF9iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZGF2aW5jaV93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CiAJCWtmcmVlKHdkdF9tZW0pOwogCX0gZWxzZSB7CiAJCXNldF9iaXQoV0RUX0RFVklDRV9JTklURUQsICZ3ZHRfc3RhdHVzKTsKIAl9CiAKKwlpb3VubWFwKHdkdF9iYXNlKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKaW5kZXggYTE3MWZjNi4uOWFkZDM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwpAQCAtOCwxOSArOCwxOSBAQAogICoJQmFzZWQgb24gd2R0LmMuCiAgKglPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKKyAqCShjKSBDb3B5cmlnaHQgMTk5Ni0xOTk3IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgICBOZWl0aGVyIEFsYW4gQ294IG5vciBDeW1ydU5ldCBMdGQuIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQotICogICAgICB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKLSAqICAgICAgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoJTmVpdGhlciBBbGFuIENveCBub3IgQ3ltcnVOZXQgTHRkLiBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKKyAqCXdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZAorICoJIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKLSAqICAgICAgKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgorICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgogICovCiAKIC8qIENoYW5nZWxvZzoKQEAgLTM3LDcgKzM3LDcgQEAKICAqCWFkZCBleHBlY3RfY2xvc2Ugc3VwcG9ydAogICoKICAqIDIwMDIuMDUuMzAgLSBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KLSAqIAlBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCisgKglBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCiAgKi8KIAogLyoKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWlmIChpcnEgPT0gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiOiBpbnRlcnJ1cHQgZGlzYWJsZWRcbiIpOwogCi0JZXVyd2R0X3dyaXRlX3JlZyhXRFRfVElNRVJfQ0ZHLCBpcnE8PDQpOworCWV1cndkdF93cml0ZV9yZWcoV0RUX1RJTUVSX0NGRywgaXJxIDw8IDQpOwogCiAJZXVyd2R0X3dyaXRlX3JlZyhXRFRfVU5JVF9TRUwsIFdEVF9VTklUX1NFQ1MpOwkvKiB3ZSB1c2Ugc2Vjb25kcyAqLwogCWV1cndkdF9zZXRfdGltZW91dCgwKTsJLyogdGhlIGRlZmF1bHQgdGltZW91dCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9nZWZfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2dlZl93ZHQuYwppbmRleCBmMGMyYjdhLi43MzRkOTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2dlZl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2dlZl93ZHQuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJYnVzX2NsayA9IDEzMzsgLyogaW4gTUh6ICovCiAKIAlmcmVxID0gZnNsX2dldF9zeXNfZnJlcSgpOwotCWlmIChmcmVxID4gMCkKKwlpZiAoZnJlcSAhPSAtMSkKIAkJYnVzX2NsayA9IGZyZXE7CiAKIAkvKiBNYXAgZGV2aWNlcyByZWdpc3RlcnMgaW50byBtZW1vcnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYwppbmRleCA2Nzk5YTZkLi45YWNmMDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCkBAIC0zNCwxMSArMzQsMTUgQEAKIAogc3RhdGljIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsKIG1vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzLiAxPD0gdGltZW91dCA8PTEzMSwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19USU1FT1VUKSAiLiIpOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LAorCSJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMuIDE8PSB0aW1lb3V0IDw9MTMxLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfVElNRU9VVCkgIi4iKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsCisJIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2ZsYWdzOwpAQCAtMjY5LDcgKzI3Myw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJWX05BTUUsIC0xLCBOVUxMLCAwKTsKKwlnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSVl9OQU1FLAorCQkJCQkJCQktMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UpKSB7CiAJCXJldCA9IFBUUl9FUlIoZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlKTsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKaW5kZXggNzYzYzFlYS4uNmNmMTU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwpAQCAtNDcsNiArNDcsNyBAQAogI2RlZmluZSBQQ0lfQklPUzMyX1BBUkFHUkFQSF9MRU4JMTYKICNkZWZpbmUgUENJX1JPTV9CQVNFMQkJCTB4MDAwRjAwMDAKICNkZWZpbmUgUk9NX1NJWkUJCQkweDEwMDAwCisjZGVmaW5lIEhQV0RUX1ZFUlNJT04JCQkiMS4wMSIKIAogc3RydWN0IGJpb3MzMl9zZXJ2aWNlX2RpciB7CiAJdTMyIHNpZ25hdHVyZTsKQEAgLTEzMCwxNyArMTMxLDE0IEBACiBzdGF0aWMgc3RydWN0IGNtbl9yZWdpc3RlcnMgY21uX3JlZ3M7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHdkdF9kZXZpY2VzW10gPSB7Ci0JewotCSAudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9DT01QQVEsCi0JIC5kZXZpY2UgPSAweEIyMDMsCi0JIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAotCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKLQl9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NPTVBBUSwgMHhCMjAzKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0hQLCAweDMzMDYpIH0sCiAJezB9LAkJCS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwd2R0X2RldmljZXMpOwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGFzbWlubGluZV9jYWxsKHN0cnVjdCBjbW5fcmVnaXN0ZXJzICpwaTg2UmVncywgdW5zaWduZWQgbG9uZyAqcFJvbUVudHJ5KTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgYXNtaW5saW5lX2NhbGwoc3RydWN0IGNtbl9yZWdpc3RlcnMgKnBpODZSZWdzLAorCQkJCQkJdW5zaWduZWQgbG9uZyAqcFJvbUVudHJ5KTsKIAogI2lmbmRlZiBDT05GSUdfWDg2XzY0CiAvKiAtLTMyIEJpdCBCaW9zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC02MDUsNyArNjAzLDcgQEAKIC8qCiAgKglLZXJuZWwgaW50ZXJmYWNlcwogICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocHdkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHB3ZHRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS53cml0ZSA9IGhwd2R0X3dyaXRlLApAQCAtNzA0LDEwICs3MDIsMTEgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPCi0JCSJocCBXYXRjaGRvZyBUaW1lciBEcml2ZXI6IDEuMDAiCisJCSJocCBXYXRjaGRvZyBUaW1lciBEcml2ZXI6ICVzIgogCQkiLCB0aW1lciBtYXJnaW46ICVkIHNlY29uZHMgKG5vd2F5b3V0PSVkKSIKIAkJIiwgYWxsb3cga2VybmVsIGR1bXA6ICVzIChkZWZhdWx0ID0gMC9PRkYpLlxuIiwKLQkJc29mdF9tYXJnaW4sIG5vd2F5b3V0LCAoYWxsb3dfa2R1bXAgPT0gMCkgPyAiT0ZGIiA6ICJPTiIpOworCQlIUFdEVF9WRVJTSU9OLCBzb2Z0X21hcmdpbiwgbm93YXlvdXQsCisJCShhbGxvd19rZHVtcCA9PSAwKSA/ICJPRkYiIDogIk9OIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtNzU3LDYgKzc1Niw3IEBACiBNT0RVTEVfQVVUSE9SKCJUb20gTWluZ2FyZWxsaSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJocCB3YXRjaGRvZyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEhQV0RUX1ZFUlNJT04pOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwogCiBtb2R1bGVfcGFyYW0oc29mdF9tYXJnaW4sIGludCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKaW5kZXggNzRmOTUxYy4uMmRiZTgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYwpAQCAtMTMsNyArMTMsNyBAQAogICoKICAqCVRoZSB0aW1lciBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZm9sbG93aW5nIEkvTyBjb250cm9sbGVyIGh1YnM6CiAgKgkoU2VlIHRoZSBpbnRlbCBkb2N1bWVudGF0aW9uIG9uIGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tLikKLSAqCTYzMDBFU0IgY2hpcCA6IGRvY3VtZW50IG51bWJlciAzMDA2NDEtMDAzCisgKgk2MzAwRVNCIGNoaXAgOiBkb2N1bWVudCBudW1iZXIgMzAwNjQxLTAwNAogICoKICAqICAyMDA0WVlaWiBSb3NzIEJpcm8KICAqCUluaXRpYWwgdmVyc2lvbiAwLjAxCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIEVTQl9WRVJTSU9OICIwLjAzIgorI2RlZmluZSBFU0JfVkVSU0lPTiAiMC4wNCIKICNkZWZpbmUgRVNCX01PRFVMRV9OQU1FICJpNjMwMEVTQiB0aW1lciIKICNkZWZpbmUgRVNCX0RSSVZFUl9OQU1FIEVTQl9NT0RVTEVfTkFNRSAiLCB2IiBFU0JfVkVSU0lPTgogI2RlZmluZSBQRlggRVNCX01PRFVMRV9OQU1FICI6ICIKQEAgLTgxLDYgKzgxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZXNiX3BjaTsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB0cmlnZ2VyZWQ7IC8qIFRoZSBzdGF0dXMgb2YgdGhlIHdhdGNoZG9nIHVwb24gYm9vdCAqLwogc3RhdGljIGNoYXIgZXNiX2V4cGVjdF9jbG9zZTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplc2JfcGxhdGZvcm1fZGV2aWNlOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwogLyogMzAgc2VjIGRlZmF1bHQgaGVhcnRiZWF0ICgxIDwgaGVhcnRiZWF0IDwgMioxMDIzKSAqLwpAQCAtMTE0LDEzICsxMTUsMTggQEAKIAl3cml0ZWIoRVNCX1VOTE9DSzIsIEVTQl9SRUxPQURfUkVHKTsKIH0KIAotc3RhdGljIHZvaWQgZXNiX3RpbWVyX3N0YXJ0KHZvaWQpCitzdGF0aWMgaW50IGVzYl90aW1lcl9zdGFydCh2b2lkKQogewogCXU4IHZhbDsKIAorCXNwaW5fbG9jaygmZXNiX2xvY2spOworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisJd3JpdGV3KEVTQl9XRFRfUkVMT0FELCBFU0JfUkVMT0FEX1JFRyk7CiAJLyogRW5hYmxlIG9yIEVuYWJsZSArIExvY2s/ICovCiAJdmFsID0gMHgwMiB8IChub3dheW91dCA/IDB4MDEgOiAweDAwKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZXNiX3BjaSwgRVNCX0xPQ0tfUkVHLCB2YWwpOworCXNwaW5fdW5sb2NrKCZlc2JfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZXNiX3RpbWVyX3N0b3Aodm9pZCkKQEAgLTIwNyw3ICsyMTMsNiBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogUmVsb2FkIGFuZCBhY3RpdmF0ZSB0aW1lciAqLwotCWVzYl90aW1lcl9rZWVwYWxpdmUoKTsKIAllc2JfdGltZXJfc3RhcnQoKTsKIAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKQEAgLTI0MCw3ICsyNDUsOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQllc2JfZXhwZWN0X2Nsb3NlID0gMDsKIAotCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUKKwkJCSAqIG1hZ2ljIGNoYXJhY3RlciAqLwogCQkJZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgewogCQkJCWNoYXIgYzsKIAkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQpAQCAtMjkyLDcgKzI5OCw2IEBACiAJCX0KIAogCQlpZiAobmV3X29wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7Ci0JCQllc2JfdGltZXJfa2VlcGFsaXZlKCk7CiAJCQllc2JfdGltZXJfc3RhcnQoKTsKIAkJCXJldHZhbCA9IDA7CiAJCX0KQEAgLTMxOSwxOSArMzI0LDYgQEAKIH0KIAogLyoKLSAqICAgICAgTm90aWZ5IHN5c3RlbQotICovCi0KLXN0YXRpYyBpbnQgZXNiX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAotCQkJCQl1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKLXsKLQlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQotCQllc2JfdGltZXJfc3RvcCgpOwkvKiBUdXJuIHRoZSBXRFQgb2ZmICovCi0KLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLS8qCiAgKiAgICAgIEtlcm5lbCBJbnRlcmZhY2VzCiAgKi8KIApAQCAtMzUwLDEwICszNDIsNiBAQAogCS5mb3BzID0gJmVzYl9mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBlc2Jfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBlc2Jfbm90aWZ5X3N5cywKLX07Ci0KIC8qCiAgKiBEYXRhIGZvciBQQ0kgZHJpdmVyIGludGVyZmFjZQogICoKQEAgLTM3Miw3ICszNjAsNyBAQAogICogICAgICBJbml0ICYgZXhpdCByb3V0aW5lcwogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9faW5pdCBlc2JfZ2V0ZGV2aWNlKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2RldmluaXQgZXNiX2dldGRldmljZSh2b2lkKQogewogCXU4IHZhbDE7CiAJdW5zaWduZWQgc2hvcnQgdmFsMjsKQEAgLTQ0Myw3ICs0MzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlc2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTQ1OSwxOSArNDQ3LDEzIEBACiAJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMTxoZWFydGJlYXQ8MjA0NiwgdXNpbmcgJWRcbiIsCiAJCQkJCQkJCWhlYXJ0YmVhdCk7CiAJfQotCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZXNiX25vdGlmaWVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmVzYl9taXNjZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJCQkJCVdBVENIRE9HX01JTk9SLCByZXQpOwotCQlnb3RvIGVycl9ub3RpZmllcjsKKwkJZ290byBlcnJfdW5tYXA7CiAJfQogCWVzYl90aW1lcl9zdG9wKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyBQRlgKQEAgLTQ3OSw4ICs0NjEsNiBAQAogCQkJCQkJQkFTRUFERFIsIGhlYXJ0YmVhdCwgbm93YXlvdXQpOwogCXJldHVybiAwOwogCi1lcnJfbm90aWZpZXI6Ci0JdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVzYl9ub3RpZmllcik7CiBlcnJfdW5tYXA6CiAJaW91bm1hcChCQVNFQUREUik7CiAvKiBlcnJfcmVsZWFzZTogKi8KQEAgLTQ5Miw3ICs0NzIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB3YXRjaGRvZ19jbGVhbnVwKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBlc2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvKiBTdG9wIHRoZSB0aW1lciBiZWZvcmUgd2UgbGVhdmUgKi8KIAlpZiAoIW5vd2F5b3V0KQpAQCAtNTAwLDExICs0ODAsNTggQEAKIAogCS8qIERlcmVnaXN0ZXIgKi8KIAltaXNjX2RlcmVnaXN0ZXIoJmVzYl9taXNjZGV2KTsKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZXNiX25vdGlmaWVyKTsKIAlpb3VubWFwKEJBU0VBRERSKTsKIAlwY2lfcmVsZWFzZV9yZWdpb24oZXNiX3BjaSwgMCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGVzYl9wY2kpOwogCXBjaV9kZXZfcHV0KGVzYl9wY2kpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlc2Jfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWVzYl90aW1lcl9zdG9wKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVzYl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlICAgICAgICAgID0gZXNiX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKGVzYl9yZW1vdmUpLAorCS5zaHV0ZG93biAgICAgICA9IGVzYl9zaHV0ZG93biwKKwkuZHJpdmVyICAgICAgICAgPSB7CisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgICA9IEVTQl9NT0RVTEVfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2F0Y2hkb2dfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiSW50ZWwgNjMwMEVTQiBXYXRjaERvZyBUaW1lciBEcml2ZXIgdiVzXG4iLAorCQlFU0JfVkVSU0lPTik7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVzYl9wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllc2JfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShFU0JfTU9EVUxFX05BTUUsCisJCQkJCQkJCS0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKGVzYl9wbGF0Zm9ybV9kZXZpY2UpKSB7CisJCWVyciA9IFBUUl9FUlIoZXNiX3BsYXRmb3JtX2RldmljZSk7CisJCWdvdG8gdW5yZWdfcGxhdGZvcm1fZHJpdmVyOworCX0KKworCXJldHVybiAwOworCit1bnJlZ19wbGF0Zm9ybV9kcml2ZXI6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVzYl9wbGF0Zm9ybV9kcml2ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3YXRjaGRvZ19jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZXNiX3BsYXRmb3JtX2RldmljZSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVzYl9wbGF0Zm9ybV9kcml2ZXIpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXRjaGRvZyBNb2R1bGUgVW5sb2FkZWQuXG4iKTsKIH0KIAogbW9kdWxlX2luaXQod2F0Y2hkb2dfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jCmluZGV4IDI0NzRlYmMuLmQzYzBmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCWludGVsIFRDTyB2ZW5kb3Igc3BlY2lmaWMgd2F0Y2hkb2cgZHJpdmVyIHN1cHBvcnQKICAqCi0gKgkoYykgQ29weXJpZ2h0IDIwMDYtMjAwOCBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPi4KKyAqCShjKSBDb3B5cmlnaHQgMjAwNi0yMDA5IFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+LgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogI2RlZmluZSBEUlZfTkFNRQkiaVRDT192ZW5kb3Jfc3VwcG9ydCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMDIiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAzIgogI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKIAogLyogSW5jbHVkZXMgKi8KQEAgLTQ3LDcgKzQ3LDggQEAKIAogc3RhdGljIGludCB2ZW5kb3JzdXBwb3J0OwogbW9kdWxlX3BhcmFtKHZlbmRvcnN1cHBvcnQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZlbmRvcnN1cHBvcnQsICJpVENPIHZlbmRvciBzcGVjaWZpYyBzdXBwb3J0IG1vZGUsIGRlZmF1bHQ9MCAobm9uZSksIDE9U3VwZXJNaWNybyBQZW50MywgMj1TdXBlck1pY3JvIFBlbnQ0KyIpOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3JzdXBwb3J0LCAiaVRDTyB2ZW5kb3Igc3BlY2lmaWMgc3VwcG9ydCBtb2RlLCBkZWZhdWx0PSIKKwkJCSIwIChub25lKSwgMT1TdXBlck1pY3JvIFBlbnQzLCAyPVN1cGVyTWljcm8gUGVudDQrIik7CiAKIC8qCiAgKglWZW5kb3IgU3BlY2lmaWMgU3VwcG9ydApAQCAtNzcsNiArNzgsMjYgQEAKICAqCSAgICAyMC42IHNlY29uZHMuCiAgKi8KIAorc3RhdGljIHZvaWQgc3VwZXJtaWNyb19vbGRfcHJlX3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWNwaWJhc2UpCit7CisJdW5zaWduZWQgbG9uZyB2YWwzMjsKKworCS8qIEJpdCAxMzogVENPX0VOIC0+IDAgPSBEaXNhYmxlcyBUQ08gbG9naWMgZ2VuZXJhdGluZyBhbiBTTUkjICovCisJdmFsMzIgPSBpbmwoU01JX0VOKTsKKwl2YWwzMiAmPSAweGZmZmZkZmZmOwkvKiBUdXJuIG9mZiBTTUkgY2xlYXJpbmcgd2F0Y2hkb2cgKi8KKwlvdXRsKHZhbDMyLCBTTUlfRU4pOwkvKiBOZWVkZWQgdG8gYWN0aXZhdGUgd2F0Y2hkb2cgKi8KK30KKworc3RhdGljIHZvaWQgc3VwZXJtaWNyb19vbGRfcHJlX3N0b3AodW5zaWduZWQgbG9uZyBhY3BpYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDMyOworCisJLyogQml0IDEzOiBUQ09fRU4gLT4gMSA9IEVuYWJsZXMgdGhlIFRDTyBsb2dpYyB0byBnZW5lcmF0ZSBTTUkjICovCisJdmFsMzIgPSBpbmwoU01JX0VOKTsKKwl2YWwzMiB8PSAweDAwMDAyMDAwOwkvKiBUdXJuIG9uIFNNSSBjbGVhcmluZyB3YXRjaGRvZyAqLworCW91dGwodmFsMzIsIFNNSV9FTik7CS8qIE5lZWRlZCB0byBkZWFjdGl2YXRlIHdhdGNoZG9nICovCit9CisKIHN0YXRpYyB2b2lkIHN1cGVybWljcm9fb2xkX3ByZV9rZWVwYWxpdmUodW5zaWduZWQgbG9uZyBhY3BpYmFzZSkKIHsKIAkvKiBSZWxvYWQgVENPIFRpbWVyIChkb25lIGluIGlUQ09fd2R0X2tlZXBhbGl2ZSkgKyAqLwpAQCAtMjI4LDE0ICsyNDksMTggQEAKIHZvaWQgaVRDT192ZW5kb3JfcHJlX3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWNwaWJhc2UsCiAJCQkgICB1bnNpZ25lZCBpbnQgaGVhcnRiZWF0KQogewotCWlmICh2ZW5kb3JzdXBwb3J0ID09IFNVUEVSTUlDUk9fTkVXX0JPQVJEKQorCWlmICh2ZW5kb3JzdXBwb3J0ID09IFNVUEVSTUlDUk9fT0xEX0JPQVJEKQorCQlzdXBlcm1pY3JvX29sZF9wcmVfc3RhcnQoYWNwaWJhc2UpOworCWVsc2UgaWYgKHZlbmRvcnN1cHBvcnQgPT0gU1VQRVJNSUNST19ORVdfQk9BUkQpCiAJCXN1cGVybWljcm9fbmV3X3ByZV9zdGFydChoZWFydGJlYXQpOwogfQogRVhQT1JUX1NZTUJPTChpVENPX3ZlbmRvcl9wcmVfc3RhcnQpOwogCiB2b2lkIGlUQ09fdmVuZG9yX3ByZV9zdG9wKHVuc2lnbmVkIGxvbmcgYWNwaWJhc2UpCiB7Ci0JaWYgKHZlbmRvcnN1cHBvcnQgPT0gU1VQRVJNSUNST19ORVdfQk9BUkQpCisJaWYgKHZlbmRvcnN1cHBvcnQgPT0gU1VQRVJNSUNST19PTERfQk9BUkQpCisJCXN1cGVybWljcm9fb2xkX3ByZV9zdG9wKGFjcGliYXNlKTsKKwllbHNlIGlmICh2ZW5kb3JzdXBwb3J0ID09IFNVUEVSTUlDUk9fTkVXX0JPQVJEKQogCQlzdXBlcm1pY3JvX25ld19wcmVfc3RvcCgpOwogfQogRVhQT1JUX1NZTUJPTChpVENPX3ZlbmRvcl9wcmVfc3RvcCk7CkBAIC0yODEsNyArMzA2LDggQEAKIG1vZHVsZV9pbml0KGlUQ09fdmVuZG9yX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGlUQ09fdmVuZG9yX2V4aXRfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4sIFIuIFNlcmV0bnkgPGxrcGF0Y2hlc0BwYXlwYy5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiwgIgorCQkiUi4gU2VyZXRueSA8bGtwYXRjaGVzQHBheXBjLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgVENPIFZlbmRvciBTcGVjaWZpYyBXYXRjaERvZyBUaW1lciBEcml2ZXIgU3VwcG9ydCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCmluZGV4IDViMzk1YTQuLjY0ODI1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKQEAgLTEsNyArMSw3IEBACiAvKgotICoJaW50ZWwgVENPIFdhdGNoZG9nIERyaXZlciAoVXNlZCBpbiBpODI4MDEgYW5kIGk2MzAwRVNCIGNoaXBzZXRzKQorICoJaW50ZWwgVENPIFdhdGNoZG9nIERyaXZlciAoVXNlZCBpbiBpODI4MDEgYW5kIGk2M3h4RVNCIGNoaXBzZXRzKQogICoKLSAqCShjKSBDb3B5cmlnaHQgMjAwNi0yMDA4IFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+LgorICoJKGMpIENvcHlyaWdodCAyMDA2LTIwMDkgV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4uCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTYzLDcgKzYzLDcgQEAKIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAjZGVmaW5lIERSVl9OQU1FCSJpVENPX3dkdCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMDQiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjA1IgogI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKIAogLyogSW5jbHVkZXMgKi8KQEAgLTIzNiwxNiArMjM2LDE2IEBACiAKIC8qIEFkZHJlc3MgZGVmaW5pdGlvbnMgZm9yIHRoZSBUQ08gKi8KIC8qIFRDTyBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUJVENPQkFTRQkJaVRDT193ZHRfcHJpdmF0ZS5BQ1BJQkFTRSArIDB4NjAKKyNkZWZpbmUgVENPQkFTRQkJaVRDT193ZHRfcHJpdmF0ZS5BQ1BJQkFTRSArIDB4NjAKIC8qIFNNSSBDb250cm9sIGFuZCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU01JX0VOCQlpVENPX3dkdF9wcml2YXRlLkFDUElCQVNFICsgMHgzMAorI2RlZmluZSBTTUlfRU4JCWlUQ09fd2R0X3ByaXZhdGUuQUNQSUJBU0UgKyAweDMwCiAKICNkZWZpbmUgVENPX1JMRAkJVENPQkFTRSArIDB4MDAJLyogVENPIFRpbWVyIFJlbG9hZCBhbmQgQ3Vyci4gVmFsdWUgKi8KICNkZWZpbmUgVENPdjFfVE1SCVRDT0JBU0UgKyAweDAxCS8qIFRDT3YxIFRpbWVyIEluaXRpYWwgVmFsdWUJKi8KLSNkZWZpbmUJVENPX0RBVF9JTglUQ09CQVNFICsgMHgwMgkvKiBUQ08gRGF0YSBJbiBSZWdpc3RlcgkJKi8KLSNkZWZpbmUJVENPX0RBVF9PVVQJVENPQkFTRSArIDB4MDMJLyogVENPIERhdGEgT3V0IFJlZ2lzdGVyCSovCi0jZGVmaW5lCVRDTzFfU1RTCVRDT0JBU0UgKyAweDA0CS8qIFRDTzEgU3RhdHVzIFJlZ2lzdGVyCQkqLwotI2RlZmluZQlUQ08yX1NUUwlUQ09CQVNFICsgMHgwNgkvKiBUQ08yIFN0YXR1cyBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgVENPX0RBVF9JTglUQ09CQVNFICsgMHgwMgkvKiBUQ08gRGF0YSBJbiBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgVENPX0RBVF9PVVQJVENPQkFTRSArIDB4MDMJLyogVENPIERhdGEgT3V0IFJlZ2lzdGVyCSovCisjZGVmaW5lIFRDTzFfU1RTCVRDT0JBU0UgKyAweDA0CS8qIFRDTzEgU3RhdHVzIFJlZ2lzdGVyCQkqLworI2RlZmluZSBUQ08yX1NUUwlUQ09CQVNFICsgMHgwNgkvKiBUQ08yIFN0YXR1cyBSZWdpc3RlcgkJKi8KICNkZWZpbmUgVENPMV9DTlQJVENPQkFTRSArIDB4MDgJLyogVENPMSBDb250cm9sIFJlZ2lzdGVyCSovCiAjZGVmaW5lIFRDTzJfQ05UCVRDT0JBU0UgKyAweDBhCS8qIFRDTzIgQ29udHJvbCBSZWdpc3RlcgkqLwogI2RlZmluZSBUQ092Ml9UTVIJVENPQkFTRSArIDB4MTIJLyogVENPdjIgVGltZXIgSW5pdGlhbCBWYWx1ZQkqLwpAQCAtMjczLDcgKzI3Myw5IEBACiAjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAzMAkvKiAzMCBzZWMgZGVmYXVsdCBoZWFydGJlYXQgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOyAgLyogaW4gc2Vjb25kcyAqLwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgyPGhlYXJ0YmVhdDwzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMjxoZWFydGJlYXQ8MzkgKFRDTyB2MSkgb3IgNjEzIChUQ08gdjIpLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CkBAIC0zMzgsNyArMzQwLDYgQEAKIHN0YXRpYyBpbnQgaVRDT193ZHRfc3RhcnQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCXVuc2lnbmVkIGxvbmcgdmFsMzI7CiAKIAlzcGluX2xvY2soJmlUQ09fd2R0X3ByaXZhdGUuaW9fbG9jayk7CiAKQEAgLTM0NywxNSArMzQ4LDExIEBACiAJLyogZGlzYWJsZSBjaGlwc2V0J3MgTk9fUkVCT09UIGJpdCAqLwogCWlmIChpVENPX3dkdF91bnNldF9OT19SRUJPT1RfYml0KCkpIHsKIAkJc3Bpbl91bmxvY2soJmlUQ09fd2R0X3ByaXZhdGUuaW9fbG9jayk7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgcmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCisJCQkJCSJyZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQkvKiBCaXQgMTM6IFRDT19FTiAtPiAwID0gRGlzYWJsZXMgVENPIGxvZ2ljIGdlbmVyYXRpbmcgYW4gU01JIyAqLwotCXZhbDMyID0gaW5sKFNNSV9FTik7Ci0JdmFsMzIgJj0gMHhmZmZmZGZmZjsJLyogVHVybiBvZmYgU01JIGNsZWFyaW5nIHdhdGNoZG9nICovCi0Jb3V0bCh2YWwzMiwgU01JX0VOKTsKLQogCS8qIEZvcmNlIHRoZSB0aW1lciB0byBpdHMgcmVsb2FkIHZhbHVlIGJ5IHdyaXRpbmcgdG8gdGhlIFRDT19STEQKIAkgICByZWdpc3RlciAqLwogCWlmIChpVENPX3dkdF9wcml2YXRlLmlUQ09fdmVyc2lvbiA9PSAyKQpAQCAtMzc4LDcgKzM3NSw2IEBACiBzdGF0aWMgaW50IGlUQ09fd2R0X3N0b3Aodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCXVuc2lnbmVkIGxvbmcgdmFsMzI7CiAKIAlzcGluX2xvY2soJmlUQ09fd2R0X3ByaXZhdGUuaW9fbG9jayk7CiAKQEAgLTM5MCwxMSArMzg2LDYgQEAKIAlvdXR3KHZhbCwgVENPMV9DTlQpOwogCXZhbCA9IGludyhUQ08xX0NOVCk7CiAKLQkvKiBCaXQgMTM6IFRDT19FTiAtPiAxID0gRW5hYmxlcyB0aGUgVENPIGxvZ2ljIHRvIGdlbmVyYXRlIFNNSSMgKi8KLQl2YWwzMiA9IGlubChTTUlfRU4pOwotCXZhbDMyIHw9IDB4MDAwMDIwMDA7Ci0Jb3V0bCh2YWwzMiwgU01JX0VOKTsKLQogCS8qIFNldCB0aGUgTk9fUkVCT09UIGJpdCB0byBwcmV2ZW50IGxhdGVyIHJlYm9vdHMsIGp1c3QgZm9yIHN1cmUgKi8KIAlpVENPX3dkdF9zZXRfTk9fUkVCT09UX2JpdCgpOwogCkBAIC02NDksNiArNjQwLDcgQEAKIAlpbnQgcmV0OwogCXUzMiBiYXNlX2FkZHJlc3M7CiAJdW5zaWduZWQgbG9uZyBSQ0JBOworCXVuc2lnbmVkIGxvbmcgdmFsMzI7CiAKIAkvKgogCSAqICAgICAgRmluZCB0aGUgQUNQSS9QTSBiYXNlIEkvTyBhZGRyZXNzIHdoaWNoIGlzIHRoZSBiYXNlCkBAIC02ODAsNyArNjcyLDggQEAKIAogCS8qIENoZWNrIGNoaXBzZXQncyBOT19SRUJPT1QgYml0ICovCiAJaWYgKGlUQ09fd2R0X3Vuc2V0X05PX1JFQk9PVF9iaXQoKSAmJiBpVENPX3ZlbmRvcl9jaGVja19ub3JlYm9vdF9vbigpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgcmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCisJCQkJCSJyZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOwogCQlyZXQgPSAtRU5PREVWOwkvKiBDYW5ub3QgcmVzZXQgTk9fUkVCT09UIGJpdCAqLwogCQlnb3RvIG91dDsKIAl9CkBAIC02OTUsNiArNjg4LDEwIEBACiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KKwkvKiBCaXQgMTM6IFRDT19FTiAtPiAwID0gRGlzYWJsZXMgVENPIGxvZ2ljIGdlbmVyYXRpbmcgYW4gU01JIyAqLworCXZhbDMyID0gaW5sKFNNSV9FTik7CisJdmFsMzIgJj0gMHhmZmZmZGZmZjsJLyogVHVybiBvZmYgU01JIGNsZWFyaW5nIHdhdGNoZG9nICovCisJb3V0bCh2YWwzMiwgU01JX0VOKTsKIAogCS8qIFRoZSBUQ08gSS9PIHJlZ2lzdGVycyByZXNpZGUgaW4gYSAzMi1ieXRlIHJhbmdlIHBvaW50ZWQgdG8KIAkgICBieSB0aGUgVENPQkFTRSB2YWx1ZSAqLwpAQCAtNzIzLDggKzcyMCw5IEBACiAJICAgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKGlUQ09fd2R0X3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQlpVENPX3dkdF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX0hFQVJUQkVBVCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAyIDwgaGVhcnRiZWF0IDwgMzkgKFRDTyB2MSkgb3IgNjEzIChUQ08gdjIpLCB1c2luZyAlZFxuIiwKLQkJCQkJCQloZWFydGJlYXQpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDIgPCBoZWFydGJlYXQgPCAzOSAoVENPIHYxKSAiCisJCQkJIm9yIDYxMyAoVENPIHYyKSwgdXNpbmcgJWRcbiIsIGhlYXJ0YmVhdCk7CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmaVRDT193ZHRfbWlzY2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMKaW5kZXggYWZiOGFmMy4uY2MxMzNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYwpAQCAtMTg4LDggKzE4OCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dGIoaW50IHZhbCwgaW50IHJlZykKIHsKLSAgICAgICBvdXRiKHJlZywgUkVHKTsKLSAgICAgICBvdXRiKHZhbCwgVkFMKTsKKwlvdXRiKHJlZywgUkVHKTsKKwlvdXRiKHZhbCwgVkFMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc3VwZXJpb19pbncoaW50IHJlZykKQEAgLTIwNCwxMCArMjA0LDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dHcoaW50IHZhbCwgaW50IHJlZykKIHsKLSAgICAgICBvdXRiKHJlZysrLCBSRUcpOwotICAgICAgIG91dGIodmFsID4+IDgsIFZBTCk7Ci0gICAgICAgb3V0YihyZWcsIFJFRyk7Ci0gICAgICAgb3V0Yih2YWwsIFZBTCk7CisJb3V0YihyZWcrKywgUkVHKTsKKwlvdXRiKHZhbCA+PiA4LCBWQUwpOworCW91dGIocmVnLCBSRUcpOworCW91dGIodmFsLCBWQUwpOwogfQogCiAvKiB3YXRjaGRvZyB0aW1lciBoYW5kbGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYwppbmRleCAwYjc5OGZkLi43NGM5MmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bWFjaC90aW1leC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy10aW1lci5oPgogCiAjZGVmaW5lIFdEVF9ERUZBVUxUX1RJTUUJNQkvKiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKaW5kZXggZGI5MTg5Mi4uNDY1ZmUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYwpAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogCiAKLSNkZWZpbmUgR1BUX01PREVfV0RUCQkoMTw8MTUpCi0jZGVmaW5lIEdQVF9NT0RFX0NFCQkoMTw8MTIpCisjZGVmaW5lIEdQVF9NT0RFX1dEVAkJKDEgPDwgMTUpCisjZGVmaW5lIEdQVF9NT0RFX0NFCQkoMSA8PCAxMikKICNkZWZpbmUgR1BUX01PREVfTVNfVElNRVIJKDB4NCkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCmluZGV4IDExMzBhZDYuLjE1MTJhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqCUJhc2VkIG9uIHRoZSBTb2Z0RG9nIGRyaXZlcjoKICAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKLSAqIAkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCmluZGV4IDNhY2NlNjIuLjUzOWI2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqCQkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuNGctc3lzdGVtcy5iaXoKICAqCi0gKiAJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jCmluZGV4IDE0YTMzOWYuLmU4MTQ0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMKQEAgLTE2LDExICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9vcmlvbjV4X3dkdC5oPgogCiAvKgogICogV2F0Y2hkb2cgdGltZXIgYmxvY2sgcmVnaXN0ZXJzLgpAQCAtMjksMTIgKzMxLDE0IEBACiAjZGVmaW5lICBXRFRfRU4JCQkweDAwMTAKICNkZWZpbmUgV0RUX1ZBTAkJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMjQpCiAKLSNkZWZpbmUgV0RUX01BWF9EVVJBVElPTgkoMHhmZmZmZmZmZiAvIE9SSU9ONVhfVENMSykKKyNkZWZpbmUgV0RUX01BWF9DWUNMRV9DT1VOVAkweGZmZmZmZmZmCiAjZGVmaW5lIFdEVF9JTl9VU0UJCTAKICNkZWZpbmUgV0RUX09LX1RPX0NMT1NFCQkxCiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKLXN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gIFdEVF9NQVhfRFVSQVRJT047CS8qIChzZWNvbmRzKSAqLworc3RhdGljIGludCBoZWFydGJlYXQgPSAtMTsJCS8qIG1vZHVsZSBwYXJhbWV0ZXIgKHNlY29uZHMpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHdkdF9tYXhfZHVyYXRpb247CS8qIChzZWNvbmRzKSAqLworc3RhdGljIHVuc2lnbmVkIGludCB3ZHRfdGNsazsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdkdF9zdGF0dXM7CiBzdGF0aWMgc3BpbmxvY2tfdCB3ZHRfbG9jazsKIApAQCAtNDUsNyArNDksNyBAQAogCXNwaW5fbG9jaygmd2R0X2xvY2spOwogCiAJLyogU2V0IHdhdGNoZG9nIGR1cmF0aW9uICovCi0Jd3JpdGVsKE9SSU9ONVhfVENMSyAqIGhlYXJ0YmVhdCwgV0RUX1ZBTCk7CisJd3JpdGVsKHdkdF90Y2xrICogaGVhcnRiZWF0LCBXRFRfVkFMKTsKIAogCS8qIENsZWFyIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCAqLwogCXJlZyA9IHJlYWRsKEJSSURHRV9DQVVTRSk7CkBAIC04Nyw3ICs5MSw3IEBACiBzdGF0aWMgaW50IG9yaW9uNXhfd2R0X2dldF90aW1lbGVmdChpbnQgKnRpbWVfbGVmdCkKIHsKIAlzcGluX2xvY2soJndkdF9sb2NrKTsKLQkqdGltZV9sZWZ0ID0gcmVhZGwoV0RUX1ZBTCkgLyBPUklPTjVYX1RDTEs7CisJKnRpbWVfbGVmdCA9IHJlYWRsKFdEVF9WQUwpIC8gd2R0X3RjbGs7CiAJc3Bpbl91bmxvY2soJndkdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1Nyw3ICsxNjEsNyBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKLQkJaWYgKHRpbWUgPD0gMCB8fCB0aW1lID4gV0RUX01BWF9EVVJBVElPTikgeworCQlpZiAodGltZSA8PSAwIHx8IHRpbWUgPiB3ZHRfbWF4X2R1cmF0aW9uKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIwOSwyMyArMjEzLDY5IEBACiAJLmZvcHMJCT0gJm9yaW9uNXhfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvcmlvbjV4X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlpZiAocGRhdGEpIHsKKwkJd2R0X3RjbGsgPSBwZGF0YS0+dGNsazsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIk9yaW9uNXggV2F0Y2hkb2cgbWlzc2VzIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAob3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQpCisJCXJldHVybiAtRUJVU1k7CisJb3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJd2R0X21heF9kdXJhdGlvbiA9IFdEVF9NQVhfQ1lDTEVfQ09VTlQgLyB3ZHRfdGNsazsKKwlpZiAoaGVhcnRiZWF0IDw9IDAgfHwgaGVhcnRiZWF0ID4gd2R0X21heF9kdXJhdGlvbikKKwkJaGVhcnRiZWF0ID0gd2R0X21heF9kdXJhdGlvbjsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJPcmlvbjV4IFdhdGNoZG9nIFRpbWVyOiBJbml0aWFsIHRpbWVvdXQgJWQgc2VjJXNcbiIsCisJCQkJaGVhcnRiZWF0LCBub3dheW91dCA/ICIsIG5vd2F5b3V0IiA6ICIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgb3Jpb241eF93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pbml0KCZ3ZHRfbG9jayk7CisJaWYgKHRlc3RfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKSkgeworCQl3ZHRfZGlzYWJsZSgpOworCQljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOworCX0KIAotCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOwotCWlmIChyZXQgPT0gMCkKLQkJcHJpbnRrKCJPcmlvbjV4IFdhdGNoZG9nIFRpbWVyOiBoZWFydGJlYXQgJWQgc2VjXG4iLAotCQkJCQkJCQloZWFydGJlYXQpOworCXJldCA9IG1pc2NfZGVyZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJaWYgKCFyZXQpCisJCW9yaW9uNXhfd2R0X21pc2NkZXYucGFyZW50ID0gTlVMTDsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9yaW9uNXhfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb3Jpb241eF93ZHRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvcmlvbjV4X3dkdF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAib3Jpb241eF93ZHQiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJndkdF9sb2NrKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kcml2ZXIpOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgb3Jpb241eF93ZHRfZXhpdCh2b2lkKQogewotCW1pc2NfZGVyZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9yaW9uNXhfd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG9yaW9uNXhfd2R0X2luaXQpOwpAQCAtMjM1LDggKzI4NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk9yaW9uNXggUHJvY2Vzc29yIFdhdGNoZG9nIik7CiAKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzICIKLQkJCQkJX19NT0RVTEVfU1RSSU5HKFdEVF9NQVhfRFVSQVRJT04pICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIik7CiAKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYwppbmRleCA0ODRjMjE1Li4xYTJiOTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCkBAIC01MzYsNyArNTM2LDggQEAKIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBjODc0MTNfbWlzY2Rldik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlXQVRDSERPR19NSU5PUiwgcmV0KTsKIAkJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBjODc0MTNfbm90aWZpZXIpOwogCQlyZXR1cm4gcmV0OwpAQCAtNTc0LDcgKzU3NSw4IEBACiBtb2R1bGVfaW5pdChwYzg3NDEzX2luaXQpOwogbW9kdWxlX2V4aXQocGM4NzQxM19leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPiwgTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCIpOworTU9EVUxFX0FVVEhPUigiU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPiwgIgorCQkiTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQzg3NDEzIFdEVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwppbmRleCA5ZTEzMzFhLi5hYTk1MTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwpAQCAtMjQsMjUgKzI0LDI1IEBACiAgKgkJdmVyc2lvbiByZXBvcnRpbmcuICBBZGRlZCByZWFkIHJvdXRpbmUgZm9yIHRlbXBlcmF0dXJlLgogICoJCVJlbW92ZWQgc29tZSBleHRyYSBkZWZpbmVzLCBhZGRlZCBhbiBhdXRvZGV0ZWN0IFJldmlzaW9uCiAgKgkJcm91dGluZS4KLSAqIDk2MTAwNiAgICAgICBSZXZpc2VkIHNvbWUgZG9jdW1lbnRhdGlvbiwgZml4ZWQgc29tZSBjb3NtZXRpYyBidWdzLiAgTWFkZQotICogICAgICAgICAgICAgIGRyaXZlcnMgdG8gcGFuaWMgdGhlIHN5c3RlbSBpZiBpdCdzIG92ZXJoZWF0aW5nIGF0IGJvb3R1cC4KKyAqIDk2MTAwNglSZXZpc2VkIHNvbWUgZG9jdW1lbnRhdGlvbiwgZml4ZWQgc29tZSBjb3NtZXRpYyBidWdzLiAgTWFkZQorICoJCWRyaXZlcnMgdG8gcGFuaWMgdGhlIHN5c3RlbSBpZiBpdCdzIG92ZXJoZWF0aW5nIGF0IGJvb3R1cC4KICAqIDk2MTExOAlDaGFuZ2VkIHNvbWUgdmVyYmlhZ2Ugb24gc29tZSBvZiB0aGUgb3V0cHV0LCB0aWRpZWQgdXAKICAqCQljb2RlIGJpdHMsIGFuZCBhZGRlZCBjb21wYXRpYmlsaXR5IHRvIDIuMS54LgotICogOTcwOTEyICAgICAgIEVuYWJsZWQgYm9hcmQgb24gb3BlbiBhbmQgZGlzYWJsZSBvbiBjbG9zZS4KKyAqIDk3MDkxMglFbmFibGVkIGJvYXJkIG9uIG9wZW4gYW5kIGRpc2FibGUgb24gY2xvc2UuCiAgKiA5NzExMDcJVG9vayBhY2NvdW50IG9mIHJlY2VudCBWRlMgY2hhbmdlcyAoYnJva2UgcmVhZCkuCi0gKiA5NzEyMTAgICAgICAgRGlzYWJsZSBib2FyZCBvbiBpbml0aWFsaXNhdGlvbiBpbiBjYXNlIGJvYXJkIGFscmVhZHkgdGlja2luZy4KLSAqIDk3MTIyMiAgICAgICBDaGFuZ2VkIG9wZW4vY2xvc2UgZm9yIHRlbXBlcmF0dXJlIGhhbmRsaW5nCi0gKiAgICAgICAgICAgICAgTWljaGFlbCBNZXNrZXMgPG1lc2tlc0BkZWJpYW4ub3JnPi4KLSAqIDk4MDExMiAgICAgICBVc2VkIG1pbm9yIG51bWJlcnMgZnJvbSBpbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAotICogOTkwNDAzICAgICAgIENsZWFyIHJlc2V0IHN0YXR1cyBhZnRlciByZWFkaW5nIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGluCi0gKiAgICAgICAgICAgICAgcGN3ZF9zaG93cHJldnN0YXRlKCkuIFtNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT5dCisgKiA5NzEyMTAJRGlzYWJsZSBib2FyZCBvbiBpbml0aWFsaXNhdGlvbiBpbiBjYXNlIGJvYXJkIGFscmVhZHkgdGlja2luZy4KKyAqIDk3MTIyMglDaGFuZ2VkIG9wZW4vY2xvc2UgZm9yIHRlbXBlcmF0dXJlIGhhbmRsaW5nCisgKgkJTWljaGFlbCBNZXNrZXMgPG1lc2tlc0BkZWJpYW4ub3JnPi4KKyAqIDk4MDExMglVc2VkIG1pbm9yIG51bWJlcnMgZnJvbSBpbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorICogOTkwNDAzCUNsZWFyIHJlc2V0IHN0YXR1cyBhZnRlciByZWFkaW5nIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGluCisgKgkJcGN3ZF9zaG93cHJldnN0YXRlKCkuIFtNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT5dCiAgKiA5OTA2MDUJTWFkZSBjaGFuZ2VzIHRvIGNvZGUgdG8gc3VwcG9ydCBGaXJtd2FyZSAxLjIyYSwgYWRkZWQKICAqCQlmYWlybHkgdXNlbGVzcyBwcm9jIGVudHJ5LgogICogOTkwNjEwCXJlbW92ZWQgc2FpZCB1c2VsZXNzIHByb2MgY29kZSBmb3IgdGhlIG1lcmdlIDxhbGFuPgogICogMDAwNDAzCVJlbW92ZWQgbGFzdCB0cmFjZXMgb2YgcHJvYyBjb2RlLiA8ZGF2ZWo+CiAgKiAwMTEyMTQJQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZQogICoJCUNPTkZJR19XQVRDSERPR19OT1dBWU9VVCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+Ci0gKiAgICAgICAgICAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKKyAqCQlBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAogICovCiAKIC8qCkBAIC03Niw4ICs3Niw3IEBACiAjZGVmaW5lIFdBVENIRE9HX0RSSVZFUl9OQU1FICJJU0EtUEMgV2F0Y2hkb2ciCiAjZGVmaW5lIFdBVENIRE9HX05BTUUgInBjd2QiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIiAoIiBXQVRDSERPR19EQVRFICIpXG4iCi0jZGVmaW5lIFdEX1ZFUiBXQVRDSERPR19WRVJTSU9OICIgKCIgV0FUQ0hET0dfREFURSAiKSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIlxuIgogCiAvKgogICogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgUENXRF9SRVZJU0lPTl9CIHdhcyByZW1vdmVkIGJlY2F1c2UgQSBhbmQgQgpAQCAtMjAwLDcgKzE5OSw5IEBACiAjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMiA8PSBoZWFydGJlYXQgPD0gNzIwMCBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMiA8PSBoZWFydGJlYXQgPD0gNzIwMCBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTIzOSw3ICsyNDAsOCBAQAogCX0KIAogCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgY21kPTB4JTAyeDogcG9ydDA9MHglMDJ4IGxhc3RfcG9ydDA9MHglMDJ4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciAiCisJCQkiY21kPTB4JTAyeDogcG9ydDA9MHglMDJ4IGxhc3RfcG9ydDA9MHglMDJ4XG4iLAogCQkJY21kLCBwb3J0MCwgbGFzdF9wb3J0MCk7CiAKIAlyZXR1cm4gcG9ydDA7CkBAIC0zMzksMTAgKzM0MSwxMiBAQAogCQkJCQkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyKTsKIAllbHNlIGlmIChwY3dkX3ByaXZhdGUucmV2aXNpb24gPT0gUENXRF9SRVZJU0lPTl9DKSB7CiAJCXBjd2RfZ2V0X2Zpcm13YXJlKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJJU0EtUEMgV2F0Y2hkb2cgKFJFVi5DKSBkZXRlY3RlZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmUgdmVyc2lvbjogJXMpXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSVNBLVBDIFdhdGNoZG9nIChSRVYuQykgZGV0ZWN0ZWQgYXQgcG9ydCAiCisJCQkiMHglMDR4IChGaXJtd2FyZSB2ZXJzaW9uOiAlcylcbiIsCiAJCQlwY3dkX3ByaXZhdGUuaW9fYWRkciwgcGN3ZF9wcml2YXRlLmZ3X3Zlcl9zdHIpOwogCQlvcHRpb25fc3dpdGNoZXMgPSBwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogIgorCQkJIlRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCQlvcHRpb25fc3dpdGNoZXMsCiAJCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKIAkJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgwOCkgPyAiT04iIDogIk9GRiIpKTsKQEAgLTM1OCw3ICszNjIsOCBAQAogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVGVtcGVyYXR1cmUgT3B0aW9uIERldGVjdGVkXG4iKTsKIAogCWlmIChwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9DQVJEUkVTRVQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQcmV2aW91cyByZWJvb3Qgd2FzIGNhdXNlZCBieSB0aGUgY2FyZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiUHJldmlvdXMgcmVib290IHdhcyBjYXVzZWQgYnkgdGhlIGNhcmRcbiIpOwogCiAJaWYgKHBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX09WRVJIRUFUKSB7CiAJCXByaW50ayhLRVJOX0VNRVJHIFBGWApAQCAtODcxLDcgKzg3Niw3IEBACiAJY2FyZHNfZm91bmQrKzsKIAlpZiAoY2FyZHNfZm91bmQgPT0gMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInYlcyBLZW4gSG9sbGlzIChrZW5qaUBiaXRnYXRlLmNvbSlcbiIsCi0JCQkJCQkJCVdEX1ZFUik7CisJCQkJCQkJV0FUQ0hET0dfVkVSU0lPTik7CiAKIAlpZiAoY2FyZHNfZm91bmQgPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgMSBkZXZpY2VcbiIpOwpAQCAtMTAyNiw3ICsxMDMxLDggQEAKIG1vZHVsZV9pbml0KHBjd2RfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQocGN3ZF9jbGVhbnVwX21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIktlbiBIb2xsaXMgPGtlbmppQGJpdGdhdGUuY29tPiwgV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iKTsKK01PRFVMRV9BVVRIT1IoIktlbiBIb2xsaXMgPGtlbmppQGJpdGdhdGUuY29tPiwgIgorCQkiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQmVya3NoaXJlIElTQS1QQyBXYXRjaGRvZyBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKFdBVENIRE9HX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCmluZGV4IDVkNzY0MjIuLjY5OGY1MWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCkBAIC0yNCw3ICsyNCw4IEBACiAgKglBIGJlbGxzIGFuZCB3aGlzdGxlcyBkcml2ZXIgaXMgYXZhaWxhYmxlIGZyb206CiAgKglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvd2ltL3Bjd2QvcGN3ZF9wY2kvCiAgKgotICoJTW9yZSBpbmZvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmJlcmtwcm9kLmNvbS8gb3IgaHR0cDovL3d3dy5wY3dhdGNoZG9nLmNvbS8KKyAqCU1vcmUgaW5mbyBhdmFpbGFibGUgYXQKKyAqCWh0dHA6Ly93d3cuYmVya3Byb2QuY29tLyBvciBodHRwOi8vd3d3LnBjd2F0Y2hkb2cuY29tLwogICovCiAKIC8qCkBAIC01MSwxMSArNTIsMTAgQEAKIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAjZGVmaW5lIFdBVENIRE9HX1ZFUlNJT04gIjEuMDMiCi0jZGVmaW5lIFdBVENIRE9HX0RBVEUgIjIxIEphbiAyMDA3IgogI2RlZmluZSBXQVRDSERPR19EUklWRVJfTkFNRSAiUENJLVBDIFdhdGNoZG9nIgogI2RlZmluZSBXQVRDSERPR19OQU1FICJwY3dkX3BjaSIKICNkZWZpbmUgUEZYIFdBVENIRE9HX05BTUUgIjogIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiICgiIFdBVENIRE9HX0RBVEUgIilcbiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIlxuIgogCiAvKiBTdHVmZiBmb3IgdGhlIFBDSSBJRCdzICAqLwogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1FVSUNLTE9HSUMKQEAgLTc2LDcgKzc2LDggQEAKICNkZWZpbmUgV0RfUENJX1RUUlAJCTB4MDQJLyogVGVtcGVyYXR1cmUgVHJpcCBzdGF0dXMgKi8KICNkZWZpbmUgV0RfUENJX1JMMkEJCTB4MDgJLyogUmVsYXkgMiBBY3RpdmUgKi8KICNkZWZpbmUgV0RfUENJX1JMMUEJCTB4MTAJLyogUmVsYXkgMSBBY3RpdmUgKi8KLSNkZWZpbmUgV0RfUENJX1IyRFMJCTB4NDAJLyogUmVsYXkgMiBEaXNhYmxlIFRlbXBlcmF0dXJlLXRyaXAvcmVzZXQgKi8KKyNkZWZpbmUgV0RfUENJX1IyRFMJCTB4NDAJLyogUmVsYXkgMiBEaXNhYmxlIFRlbXBlcmF0dXJlLXRyaXAgLworCQkJCQkJCQkJcmVzZXQgKi8KICNkZWZpbmUgV0RfUENJX1JMWTIJCTB4ODAJLyogQWN0aXZhdGUgUmVsYXkgMiBvbiB0aGUgYm9hcmQgKi8KIC8qIFBvcnQgMiA6IENvbnRyb2wgU3RhdHVzICMyICovCiAjZGVmaW5lIFdEX1BDSV9XRElTCQkweDEwCS8qIFdhdGNoZG9nIERpc2FibGUgKi8KQEAgLTExNCwxMiArMTE1LDE4IEBACiBzdGF0aWMgaW50IHRlbXBfcGFuaWM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc19hY3RpdmU7CiBzdGF0aWMgY2hhciBleHBlY3RfcmVsZWFzZTsKLXN0YXRpYyBzdHJ1Y3QgewkJCQkvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBQQ0ktUEMgd2F0Y2hkb2cgY2FyZCAqLwotCWludCBzdXBwb3J0c190ZW1wOwkJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBoYXMgYSB0ZW1wZXJhdHVyZSBkZXZpY2UgKi8KLQlpbnQgYm9vdF9zdGF0dXM7CQkvKiBUaGUgY2FyZCdzIGJvb3Qgc3RhdHVzICovCi0JdW5zaWduZWQgbG9uZyBpb19hZGRyOwkJLyogVGhlIGNhcmRzIEkvTyBhZGRyZXNzICovCi0Jc3BpbmxvY2tfdCBpb19sb2NrOwkJLyogdGhlIGxvY2sgZm9yIGlvIG9wZXJhdGlvbnMgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJCS8qIHRoZSBQQ0ktZGV2aWNlICovCisvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBQQ0ktUEMgd2F0Y2hkb2cgY2FyZCAqLworc3RhdGljIHN0cnVjdCB7CisJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBoYXMgYSB0ZW1wZXJhdHVyZSBkZXZpY2UgKi8KKwlpbnQgc3VwcG9ydHNfdGVtcDsKKwkvKiBUaGUgY2FyZCdzIGJvb3Qgc3RhdHVzICovCisJaW50IGJvb3Rfc3RhdHVzOworCS8qIFRoZSBjYXJkcyBJL08gYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsKKwkvKiB0aGUgbG9jayBmb3IgaW8gb3BlcmF0aW9ucyAqLworCXNwaW5sb2NrX3QgaW9fbG9jazsKKwkvKiB0aGUgUENJLWRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogfSBwY2lwY3dkX3ByaXZhdGU7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC0xMzAsMTQgKzEzNywxOCBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsOiAwPVF1aWV0LCAxPVZlcmJvc2UsIDI9RGVidWcgKGRlZmF1bHQ9MCkiKTsKIAotI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9IGRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPQorCQkJCQkJZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAvKgogICoJSW50ZXJuYWwgZnVuY3Rpb25zCkBAIC0xNDgsOCArMTU5LDggQEAKIAlpbnQgZ290X3Jlc3BvbnNlLCBjb3VudDsKIAogCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nIGZvbGxvd2luZyBkYXRhIGNtZD0weCUwMnggbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAotCQljbWQsICptc2IsICpsc2IpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInNlbmRpbmcgZm9sbG93aW5nIGRhdGEgIgorCQkiY21kPTB4JTAyeCBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsIGNtZCwgKm1zYiwgKmxzYik7CiAKIAlzcGluX2xvY2soJnBjaXBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAkvKiBJZiBhIGNvbW1hbmQgcmVxdWlyZXMgZGF0YSBpdCBzaG91bGQgYmUgd3JpdHRlbiBmaXJzdC4KQEAgLTE2NiwxNyArMTc3LDIwIEBACiAJICogdGhlIFdSU1AgYml0IGluIHBvcnQgMiBhbmQgZ2l2ZSBpdCBhIG1heC4gdGltZW91dCBvZgogCSAqIFBDSV9DT01NQU5EX1RJTUVPVVQgdG8gcHJvY2VzcyAqLwogCWdvdF9yZXNwb25zZSA9IGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMikgJiBXRF9QQ0lfV1JTUDsKLQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgUENJX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOyBjb3VudCsrKSB7CisJZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFBDSV9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsKKwkJCQkJCQkJY291bnQrKykgewogCQltZGVsYXkoMSk7CiAJCWdvdF9yZXNwb25zZSA9IGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMikgJiBXRF9QQ0lfV1JTUDsKIAl9CiAKIAlpZiAoZGVidWcgPj0gREVCVUcpIHsKIAkJaWYgKGdvdF9yZXNwb25zZSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ0aW1lIHRvIHByb2Nlc3MgY29tbWFuZCB3YXM6ICVkIG1zXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkJInRpbWUgdG8gcHJvY2VzcyBjb21tYW5kIHdhczogJWQgbXNcbiIsCiAJCQkJY291bnQpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJjYXJkIGRpZCBub3QgcmVzcG9uZCBvbiBjb21tYW5kIVxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkiY2FyZCBkaWQgbm90IHJlc3BvbmQgb24gY29tbWFuZCFcbiIpOwogCQl9CiAJfQogCkBAIC0xODksNyArMjAzLDggQEAKIAkJaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyA2KTsKIAogCQlpZiAoZGVidWcgPj0gREVCVUcpCi0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciBjbWQ9MHglMDJ4OiBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciAiCisJCQkJImNtZD0weCUwMng6IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwKIAkJCQljbWQsICptc2IsICpsc2IpOwogCX0KIApAQCAtMjE4LDcgKzIzMyw4IEBACiAJY2hhciBmd192ZXJfc3RyWzIwXTsJCS8qIFRoZSBjYXJkcyBmaXJtd2FyZSB2ZXJzaW9uICovCiAJaW50IG9wdGlvbl9zd2l0Y2hlczsKIAotCWdvdF9md19yZXYgPSBzZW5kX2NvbW1hbmQoQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKKwlnb3RfZndfcmV2ID0gc2VuZF9jb21tYW5kKENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwKKwkJCQkJCQkJJmZ3X3Jldl9taW5vcik7CiAJaWYgKGdvdF9md19yZXYpCiAJCXNwcmludGYoZndfdmVyX3N0ciwgIiV1LiUwMnUiLCBmd19yZXZfbWFqb3IsIGZ3X3Jldl9taW5vcik7CiAJZWxzZQpAQCAtMjI3LDIzICsyNDMsMjcgQEAKIAkvKiBHZXQgc3dpdGNoIHNldHRpbmdzICovCiAJb3B0aW9uX3N3aXRjaGVzID0gcGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgY2FyZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmU6ICVzKSAlcyB0ZW1wIG9wdGlvblxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgY2FyZCBhdCBwb3J0ICIKKwkJIjB4JTA0eCAoRmlybXdhcmU6ICVzKSAlcyB0ZW1wIG9wdGlvblxuIiwKIAkJKGludCkgcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIsIGZ3X3Zlcl9zdHIsCiAJCShwY2lwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCA/ICJ3aXRoIiA6ICJ3aXRob3V0IikpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQlvcHRpb25fc3dpdGNoZXMsCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfQ0FSRFJFU0VUKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJldmlvdXMgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUgV2F0Y2hkb2cgY2FyZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiUHJldmlvdXMgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUgV2F0Y2hkb2cgY2FyZFxuIik7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfT1ZFUkhFQVQpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJDYXJkIHNlbnNlZCBhIENQVSBPdmVyaGVhdFxuIik7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBwcmV2aW91cyB0cmlwIGRldGVjdGVkIC0gQ29sZCBib290IG9yIHJlc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJObyBwcmV2aW91cyB0cmlwIGRldGVjdGVkIC0gQ29sZCBib290IG9yIHJlc2V0XG4iKTsKIH0KIAogc3RhdGljIGludCBwY2lwY3dkX3N0YXJ0KHZvaWQpCkBAIC0yODMsNyArMzAzLDggQEAKIAlzcGluX3VubG9jaygmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCiAJaWYgKCEoc3RhdF9yZWcgJiBXRF9QQ0lfV0RJUykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzY0LDcgKzM4NSw4IEBACiAJfQogCiAJLyogY2xlYXIgdHJpcCBzdGF0dXMgJiBMRUQgYW5kIGtlZXAgbW9kZSBvZiByZWxheSAyICovCi0Jb3V0Yl9wKChjb250cm9sX3N0YXR1cyAmIFdEX1BDSV9SMkRTKSB8IFdEX1BDSV9XVFJQLCBwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOworCW91dGJfcCgoY29udHJvbF9zdGF0dXMgJiBXRF9QQ0lfUjJEUykgfCBXRF9QQ0lfV1RSUCwKKwkJCQkJCXBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CiAKIAkvKiBjbGVhciByZXNldCBjb3VudGVyICovCiAJbXNiID0gMDsKQEAgLTQzNyw3ICs0NTksOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQlleHBlY3RfcmVsZWFzZSA9IDA7CiAKLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlCisJCQkgKiBtYWdpYyBjaGFyYWN0ZXIgKi8KIAkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKIAkJCQljaGFyIGM7CiAJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKQEAgLTUzMSw3ICs1NTQsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChuZXdfaGVhcnRiZWF0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcGNpcGN3ZF9rZWVwYWxpdmUoKTsKIAkJLyogRmFsbCAqLwpAQCAtNTYwLDcgKzU4Myw4IEBACiAJLyogL2Rldi93YXRjaGRvZyBjYW4gb25seSBiZSBvcGVuZWQgb25jZSAqLwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZpc19hY3RpdmUpKSB7CiAJCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQXR0ZW1wdCB0byBvcGVuIGFscmVhZHkgb3BlbmVkIGRldmljZS5cbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSJBdHRlbXB0IHRvIG9wZW4gYWxyZWFkeSBvcGVuZWQgZGV2aWNlLlxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC01NzgsNyArNjAyLDggQEAKIAlpZiAoZXhwZWN0X3JlbGVhc2UgPT0gNDIpIHsKIAkJcGNpcGN3ZF9zdG9wKCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQlwY2lwY3dkX2tlZXBhbGl2ZSgpOwogCX0KIAlleHBlY3RfcmVsZWFzZSA9IDA7CkBAIC02MjEsNyArNjQ2LDggQEAKICAqCU5vdGlmeSBzeXN0ZW0KICAqLwogCi1zdGF0aWMgaW50IHBjaXBjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQorc3RhdGljIGludCBwY2lwY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkJCQkJCXZvaWQgKnVudXNlZCkKIHsKIAlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQogCQlwY2lwY3dkX3N0b3AoKTsJLyogVHVybiB0aGUgV0RUIG9mZiAqLwpAQCAtNzIyLDM0ICs3NDgsMzggQEAKIAogCS8qIElmIGhlYXJ0YmVhdCA9IDAgdGhlbiB3ZSB1c2UgdGhlIGhlYXJ0YmVhdCBmcm9tIHRoZSBkaXAtc3dpdGNoZXMgKi8KIAlpZiAoaGVhcnRiZWF0ID09IDApCi0JCWhlYXJ0YmVhdCA9IGhlYXJ0YmVhdF90YmxbKHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpICYgMHgwNyldOworCQloZWFydGJlYXQgPQorCQkJaGVhcnRiZWF0X3RibFsocGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCkgJiAweDA3KV07CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmIChwY2lwY3dkX3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQlwY2lwY3dkX3NldF9oZWFydGJlYXQoV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCiAJCQlXQVRDSERPR19IRUFSVEJFQVQpOwogCX0KIAogCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcGNpcGN3ZF9ub3RpZmllcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCi0JCQlyZXQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2VfcmVnaW9uOwogCX0KIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCkgewogCQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwY2lwY3dkX3RlbXBfbWlzY2Rldik7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCi0JCQkJVEVNUF9NSU5PUiwgcmV0KTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uICIKKwkJCQkibWlub3I9JWQgKGVycj0lZClcbiIsIFRFTVBfTUlOT1IsIHJldCk7CiAJCQlnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9yZWJvb3Q7CiAJCX0KIAl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwY2lwY3dkX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CiAJCWdvdG8gZXJyX291dF9taXNjX2RlcmVnaXN0ZXI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCmluZGV4IGFmYjA4OTYuLjA1MmZlNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKQEAgLTUxLDEyICs1MSwxMSBAQAogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KICN1bmRlZiBkYmcKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGZvcm1hdCAiXG4iICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IGlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGZvcm1hdCAiXG4iICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogLyogTW9kdWxlIGFuZCBWZXJzaW9uIEluZm9ybWF0aW9uICovCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAyIgotI2RlZmluZSBEUklWRVJfREFURSAiMjEgSmFuIDIwMDciCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+IgogI2RlZmluZSBEUklWRVJfREVTQyAiQmVya3NoaXJlIFVTQi1QQyBXYXRjaGRvZyBkcml2ZXIiCiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCkBAIC03MywxNCArNzIsMTggQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwogCi0jZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0gZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLworI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9CisJCQkJCQlkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogLyogVGhlIHZlbmRvciBhbmQgcHJvZHVjdCBpZCdzIGZvciB0aGUgVVNCLVBDIFdhdGNoZG9nIGNhcmQgKi8KICNkZWZpbmUgVVNCX1BDV0RfVkVORE9SX0lECTB4MGM5OApAQCAtOTEsMjAgKzk0LDIxIEBACiAJeyBVU0JfREVWSUNFKFVTQl9QQ1dEX1ZFTkRPUl9JRCwgVVNCX1BDV0RfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfcGN3ZF90YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX3Bjd2RfdGFibGUpOwogCiAvKiBhY2NvcmRpbmcgdG8gZG9jdW1lbnRhdGlvbiBtYXguIHRpbWUgdG8gcHJvY2VzcyBhIGNvbW1hbmQgZm9yIHRoZSBVU0IKICAqIHdhdGNoZG9nIGNhcmQgaXMgMTAwIG9yIDIwMCBtcywgc28gd2UgZ2l2ZSBpdCAyNTAgbXMgdG8gZG8gaXQncyBqb2IgKi8KICNkZWZpbmUgVVNCX0NPTU1BTkRfVElNRU9VVAkyNTAKIAogLyogV2F0Y2hkb2cncyBpbnRlcm5hbCBjb21tYW5kcyAqLwotI2RlZmluZSBDTURfUkVBRF9URU1QCQkJMHgwMgkvKiBSZWFkIFRlbXBlcmF0dXJlOyBSZS10cmlnZ2VyIFdhdGNoZG9nICovCisjZGVmaW5lIENNRF9SRUFEX1RFTVAJCQkweDAyCS8qIFJlYWQgVGVtcGVyYXR1cmU7CisJCQkJCQkJUmUtdHJpZ2dlciBXYXRjaGRvZyAqLwogI2RlZmluZSBDTURfVFJJR0dFUgkJCUNNRF9SRUFEX1RFTVAKICNkZWZpbmUgQ01EX0dFVF9TVEFUVVMJCQkweDA0CS8qIEdldCBTdGF0dXMgSW5mb3JtYXRpb24gKi8KICNkZWZpbmUgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OCTB4MDgJLyogR2V0IEZpcm13YXJlIFZlcnNpb24gKi8KICNkZWZpbmUgQ01EX0dFVF9ESVBfU1dJVENIX1NFVFRJTkdTCTB4MGMJLyogR2V0IERpcCBTd2l0Y2ggU2V0dGluZ3MgKi8KICNkZWZpbmUgQ01EX1JFQURfV0FUQ0hET0dfVElNRU9VVAkweDE4CS8qIFJlYWQgQ3VycmVudCBXYXRjaGRvZyBUaW1lICovCi0jZGVmaW5lIENNRF9XUklURV9XQVRDSERPR19USU1FT1VUCTB4MTkJLyogV3JpdGUgQ3VycmVudCBXYXRjaGRvZyBUaW1lICovCisjZGVmaW5lIENNRF9XUklURV9XQVRDSERPR19USU1FT1VUCTB4MTkJLyogV3JpdGUgQ3VycmVudCBXYXRjaGRvZ1RpbWUgKi8KICNkZWZpbmUgQ01EX0VOQUJMRV9XQVRDSERPRwkJMHgzMAkvKiBFbmFibGUgLyBEaXNhYmxlIFdhdGNoZG9nICovCiAjZGVmaW5lIENNRF9ESVNBQkxFX1dBVENIRE9HCQlDTURfRU5BQkxFX1dBVENIRE9HCiAKQEAgLTEyOSwyMyArMTMzLDM2IEBACiAKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiBzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkJLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CQkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCS8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CiAKLQl1bnNpZ25lZCBpbnQJCWludGVyZmFjZV9udW1iZXI7CS8qIHRoZSBpbnRlcmZhY2UgbnVtYmVyIHVzZWQgZm9yIGNtZCdzICovCisJLyogdGhlIGludGVyZmFjZSBudW1iZXIgdXNlZCBmb3IgY21kJ3MgKi8KKwl1bnNpZ25lZCBpbnQJCWludGVyZmFjZV9udW1iZXI7CiAKLQl1bnNpZ25lZCBjaGFyCQkqaW50cl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHRvIGludHIgZGF0YSAqLwotCWRtYV9hZGRyX3QJCWludHJfZG1hOwkJLyogdGhlIGRtYSBhZGRyZXNzIGZvciB0aGUgaW50ciBidWZmZXIgKi8KLQlzaXplX3QJCQlpbnRyX3NpemU7CQkvKiB0aGUgc2l6ZSBvZiB0aGUgaW50ciBidWZmZXIgKi8KLQlzdHJ1Y3QgdXJiCQkqaW50cl91cmI7CQkvKiB0aGUgdXJiIHVzZWQgZm9yIHRoZSBpbnRyIHBpcGUgKi8KKwkvKiB0aGUgYnVmZmVyIHRvIGludHIgZGF0YSAqLworCXVuc2lnbmVkIGNoYXIJCSppbnRyX2J1ZmZlcjsKKwkvKiB0aGUgZG1hIGFkZHJlc3MgZm9yIHRoZSBpbnRyIGJ1ZmZlciAqLworCWRtYV9hZGRyX3QJCWludHJfZG1hOworCS8qIHRoZSBzaXplIG9mIHRoZSBpbnRyIGJ1ZmZlciAqLworCXNpemVfdAkJCWludHJfc2l6ZTsKKwkvKiB0aGUgdXJiIHVzZWQgZm9yIHRoZSBpbnRyIHBpcGUgKi8KKwlzdHJ1Y3QgdXJiCQkqaW50cl91cmI7CiAKLQl1bnNpZ25lZCBjaGFyCQljbWRfY29tbWFuZDsJCS8qIFRoZSBjb21tYW5kIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLwotCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX21zYjsJCS8qIFRoZSBkYXRhIE1TQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KLQl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9sc2I7CQkvKiBUaGUgZGF0YSBMU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCi0JYXRvbWljX3QJCWNtZF9yZWNlaXZlZDsJCS8qIHRydWUgaWYgd2UgcmVjZWl2ZWQgYSByZXBvcnQgYWZ0ZXIgYSBjb21tYW5kICovCisJLyogVGhlIGNvbW1hbmQgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2NvbW1hbmQ7CisJLyogVGhlIGRhdGEgTVNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLworCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX21zYjsKKwkvKiBUaGUgZGF0YSBMU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbHNiOworCS8qIHRydWUgaWYgd2UgcmVjZWl2ZWQgYSByZXBvcnQgYWZ0ZXIgYSBjb21tYW5kICovCisJYXRvbWljX3QJCWNtZF9yZWNlaXZlZDsKIAotCWludAkJCWV4aXN0czsJCQkvKiBXZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgZXhpc3RzICovCi0Jc3RydWN0IG11dGV4CQltdHg7CQkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwkvKiBXZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgZXhpc3RzICovCisJaW50CQkJZXhpc3RzOworCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IG11dGV4CQltdHg7CiB9Owogc3RhdGljIHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZF9kZXZpY2U7CiAKQEAgLTE1Myw3ICsxNzAsOCBAQAogc3RhdGljIERFRklORV9NVVRFWChkaXNjb25uZWN0X211dGV4KTsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIHVzYl9wY3dkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KQEAgLTE2Nyw3ICsxODUsOCBAQAogCiBzdGF0aWMgdm9pZCB1c2JfcGN3ZF9pbnRyX2RvbmUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCA9IChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QgPQorCQkJCShzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXNiX3Bjd2QtPmludHJfYnVmZmVyOwogCWludCByZXR2YWw7CiAKQEAgLTE3OCwxMSArMTk3LDEzIEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCiAJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOwogCQlnb3RvIHJlc3VibWl0OwogCX0KIApAQCAtMTk5LDIyICsyMjAsMjMgQEAKIHJlc3VibWl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgcmVzdWJtaXQgaW50ciwgdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAotCQkJcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgcmVzdWJtaXQgaW50ciwgIgorCQkJInVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwgcmV0dmFsKTsKIH0KIAotc3RhdGljIGludCB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCB1bnNpZ25lZCBjaGFyIGNtZCwKLQl1bnNpZ25lZCBjaGFyICptc2IsIHVuc2lnbmVkIGNoYXIgKmxzYikKK3N0YXRpYyBpbnQgdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJdW5zaWduZWQgY2hhciBjbWQsIHVuc2lnbmVkIGNoYXIgKm1zYiwgdW5zaWduZWQgY2hhciAqbHNiKQogewogCWludCBnb3RfcmVzcG9uc2UsIGNvdW50OwogCXVuc2lnbmVkIGNoYXIgYnVmWzZdOwogCi0JLyogV2Ugd2lsbCBub3Qgc2VuZCBhbnkgY29tbWFuZHMgaWYgdGhlIFVTQiBQQ1dEIGRldmljZSBkb2VzIG5vdCBleGlzdCAqLworCS8qIFdlIHdpbGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIGlmIHRoZSBVU0IgUENXRCBkZXZpY2UgZG9lcworCSAqIG5vdCBleGlzdCAqLwogCWlmICgoIXVzYl9wY3dkKSB8fCAoIXVzYl9wY3dkLT5leGlzdHMpKQogCQlyZXR1cm4gLTE7CiAKLQkvKiBUaGUgVVNCIFBDIFdhdGNoZG9nIHVzZXMgYSA2IGJ5dGUgcmVwb3J0IGZvcm1hdC4gVGhlIGJvYXJkIGN1cnJlbnRseSB1c2VzCi0JICogb25seSAzIG9mIHRoZSBzaXggYnl0ZXMgb2YgdGhlIHJlcG9ydC4gKi8KKwkvKiBUaGUgVVNCIFBDIFdhdGNoZG9nIHVzZXMgYSA2IGJ5dGUgcmVwb3J0IGZvcm1hdC4KKwkgKiBUaGUgYm9hcmQgY3VycmVudGx5IHVzZXMgb25seSAzIG9mIHRoZSBzaXggYnl0ZXMgb2YgdGhlIHJlcG9ydC4gKi8KIAlidWZbMF0gPSBjbWQ7CQkJLyogQnl0ZSAwID0gQ01EICovCiAJYnVmWzFdID0gKm1zYjsJCQkvKiBCeXRlIDEgPSBEYXRhIE1TQiAqLwogCWJ1ZlsyXSA9ICpsc2I7CQkJLyogQnl0ZSAyID0gRGF0YSBMU0IgKi8KQEAgLTIyOSwxMiArMjUxLDE0IEBACiAJCQlISURfUkVRX1NFVF9SRVBPUlQsIEhJRF9EVF9SRVBPUlQsCiAJCQkweDAyMDAsIHVzYl9wY3dkLT5pbnRlcmZhY2VfbnVtYmVyLCBidWYsIHNpemVvZihidWYpLAogCQkJVVNCX0NPTU1BTkRfVElNRU9VVCkgIT0gc2l6ZW9mKGJ1ZikpIHsKLQkJZGJnKCJ1c2JfcGN3ZF9zZW5kX2NvbW1hbmQ6IGVycm9yIGluIHVzYl9jb250cm9sX21zZyBmb3IgY21kIDB4JXggMHgleCAweCV4XG4iLCBjbWQsICptc2IsICpsc2IpOworCQlkYmcoInVzYl9wY3dkX3NlbmRfY29tbWFuZDogZXJyb3IgaW4gdXNiX2NvbnRyb2xfbXNnIGZvciAiCisJCQkJImNtZCAweCV4IDB4JXggMHgleFxuIiwgY21kLCAqbXNiLCAqbHNiKTsKIAl9CiAJLyogd2FpdCB0aWxsIHRoZSB1c2IgY2FyZCBwcm9jZXNzZWQgdGhlIGNvbW1hbmQsCiAJICogd2l0aCBhIG1heC4gdGltZW91dCBvZiBVU0JfQ09NTUFORF9USU1FT1VUICovCiAJZ290X3Jlc3BvbnNlID0gMDsKLQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgVVNCX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOyBjb3VudCsrKSB7CisJZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFVTQl9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsKKwkJCQkJCQkJY291bnQrKykgewogCQltZGVsYXkoMSk7CiAJCWlmIChhdG9taWNfcmVhZCgmdXNiX3Bjd2QtPmNtZF9yZWNlaXZlZCkpCiAJCQlnb3RfcmVzcG9uc2UgPSAxOwpAQCAtMjU2LDEwICsyODAsMTIgQEAKIAlpbnQgcmV0dmFsOwogCiAJLyogRW5hYmxlIFdhdGNoZG9nICovCi0JcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRU5BQkxFX1dBVENIRE9HLCAmbXNiLCAmbHNiKTsKKwlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9FTkFCTEVfV0FUQ0hET0csCisJCQkJCQkJCSZtc2IsICZsc2IpOwogCiAJaWYgKChyZXR2YWwgPT0gMCkgfHwgKGxzYiA9PSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZW5hYmxlIGF0dGVtcHRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBlbmFibGUgYXR0ZW1wdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTI3MywxMCArMjk5LDEyIEBACiAJaW50IHJldHZhbDsKIAogCS8qIERpc2FibGUgV2F0Y2hkb2cgKi8KLQlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9ESVNBQkxFX1dBVENIRE9HLCAmbXNiLCAmbHNiKTsKKwlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9ESVNBQkxFX1dBVENIRE9HLAorCQkJCQkJCQkmbXNiLCAmbHNiKTsKIAogCWlmICgocmV0dmFsID09IDApIHx8IChsc2IgIT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzA4LDcgKzMzNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwgaW50ICp0ZW1wZXJhdHVyZSkKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJCQkJCQlpbnQgKnRlbXBlcmF0dXJlKQogewogCXVuc2lnbmVkIGNoYXIgbXNiLCBsc2I7CiAKQEAgLTMyMyw3ICszNTIsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYl9wY3dkX2dldF90aW1lbGVmdChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsIGludCAqdGltZV9sZWZ0KQorc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGltZWxlZnQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLAorCQkJCQkJCQlpbnQgKnRpbWVfbGVmdCkKIHsKIAl1bnNpZ25lZCBjaGFyIG1zYiwgbHNiOwogCkBAIC0zNDEsNyArMzcxLDcgQEAKICAqLwogCiBzdGF0aWMgc3NpemVfdCB1c2JfcGN3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCi0JCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCisJCQkJCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLwogCWlmIChsZW4pIHsKQEAgLTM1Miw3ICszODIsOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQlleHBlY3RfcmVsZWFzZSA9IDA7CiAKLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlCisJCQkgKiBtYWdpYyBjaGFyYWN0ZXIgKi8KIAkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKIAkJCQljaGFyIGM7CiAJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKQEAgLTQzMSw3ICs0NjIsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHVzYl9wY3dkX3NldF9oZWFydGJlYXQodXNiX3Bjd2RfZGV2aWNlLCBuZXdfaGVhcnRiZWF0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJdXNiX3Bjd2Rfa2VlcGFsaXZlKHVzYl9wY3dkX2RldmljZSk7CiAJCS8qIEZhbGwgKi8KQEAgLTQ3NSw3ICs1MDYsOCBAQAogCWlmIChleHBlY3RfcmVsZWFzZSA9PSA0MikgewogCQl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkX2RldmljZSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQl1c2JfcGN3ZF9rZWVwYWxpdmUodXNiX3Bjd2RfZGV2aWNlKTsKIAl9CiAJZXhwZWN0X3JlbGVhc2UgPSAwOwpAQCAtNTE1LDcgKzU0Nyw4IEBACiAgKglOb3RpZnkgc3lzdGVtCiAgKi8KIAotc3RhdGljIGludCB1c2JfcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IHVzYl9wY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkJCQkJCXZvaWQgKnVudXNlZCkKIHsKIAlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQogCQl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkX2RldmljZSk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KQEAgLTU3OCw3ICs2MTEsOCBAQAogICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKICAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCiAgKi8KLXN0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CkBAIC02MDIsMTYgKzYzNiwxNSBAQAogCiAJLyogY2hlY2sgb3V0IHRoYXQgd2UgaGF2ZSBhIEhJRCBkZXZpY2UgKi8KIAlpZiAoIShpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfSElEKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGUgZGV2aWNlIGlzbid0IGEgSHVtYW4gSW50ZXJmYWNlIERldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJUaGUgZGV2aWNlIGlzbid0IGEgSHVtYW4gSW50ZXJmYWNlIERldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnQ6IGl0IGhhcyB0byBiZSBJbnRlcnJ1cHQgJiBJTiAqLwogCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50WzBdLmRlc2M7CiAKLQlpZiAoISgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgotCSAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkpIHsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKSB7CiAJCS8qIHdlIGRpZG4ndCBmaW5kIGEgSW50ZXJydXB0IGVuZHBvaW50IHdpdGggZGlyZWN0aW9uIElOICovCiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkbid0IGZpbmQgYW4gSU5UUiAmIElOIGVuZHBvaW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MzQsMTAgKzY2NywxMiBAQAogCXVzYl9wY3dkLT51ZGV2ID0gdWRldjsKIAl1c2JfcGN3ZC0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwogCXVzYl9wY3dkLT5pbnRlcmZhY2VfbnVtYmVyID0gaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCXVzYl9wY3dkLT5pbnRyX3NpemUgPSAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA+IDggPyBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpIDogOCk7CisJdXNiX3Bjd2QtPmludHJfc2l6ZSA9IChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID4gOCA/CisJCQkJbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6IDgpOwogCiAJLyogc2V0IHVwIHRoZSBtZW1vcnkgYnVmZmVyJ3MgKi8KLQl1c2JfcGN3ZC0+aW50cl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHVzYl9wY3dkLT5pbnRyX3NpemUsIEdGUF9BVE9NSUMsICZ1c2JfcGN3ZC0+aW50cl9kbWEpOworCXVzYl9wY3dkLT5pbnRyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgdXNiX3Bjd2QtPmludHJfc2l6ZSwKKwkJCQkJR0ZQX0FUT01JQywgJnVzYl9wY3dkLT5pbnRyX2RtYSk7CiAJaWYgKCF1c2JfcGN3ZC0+aW50cl9idWZmZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiT3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC02NzEsNyArNzA2LDggQEAKIAl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkKTsKIAogCS8qIEdldCB0aGUgRmlybXdhcmUgVmVyc2lvbiAqLwotCWdvdF9md19yZXYgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CisJZ290X2Z3X3JldiA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLAorCQkJCQkJJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CiAJaWYgKGdvdF9md19yZXYpCiAJCXNwcmludGYoZndfdmVyX3N0ciwgIiV1LiUwMnUiLCBmd19yZXZfbWFqb3IsIGZ3X3Jldl9taW5vcik7CiAJZWxzZQpAQCAtNjgxLDkgKzcxNywxMSBAQAogCQlmd192ZXJfc3RyKTsKIAogCS8qIEdldCBzd2l0Y2ggc2V0dGluZ3MgKi8KLQl1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUywgJmR1bW15LCAmb3B0aW9uX3N3aXRjaGVzKTsKKwl1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUywgJmR1bW15LAorCQkJCQkJCSZvcHRpb25fc3dpdGNoZXMpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQlvcHRpb25fc3dpdGNoZXMsCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CkBAIC02OTIsMzAgKzczMCwzNSBAQAogCWlmIChoZWFydGJlYXQgPT0gMCkKIAkJaGVhcnRiZWF0ID0gaGVhcnRiZWF0X3RibFsob3B0aW9uX3N3aXRjaGVzICYgMHgwNyldOwogCi0JLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAodXNiX3Bjd2Rfc2V0X2hlYXJ0YmVhdCh1c2JfcGN3ZCwgaGVhcnRiZWF0KSkgewogCQl1c2JfcGN3ZF9zZXRfaGVhcnRiZWF0KHVzYl9wY3dkLCBXQVRDSERPR19IRUFSVEJFQVQpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKIAkJCVdBVENIRE9HX0hFQVJUQkVBVCk7CiAJfQogCiAJcmV0dmFsID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ1c2JfcGN3ZF9ub3RpZmllcik7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAogCQkJcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAlyZXR2YWwgPSBtaXNjX3JlZ2lzdGVyKCZ1c2JfcGN3ZF90ZW1wZXJhdHVyZV9taXNjZGV2KTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVRFTVBfTUlOT1IsIHJldHZhbCk7CiAJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX3JlYm9vdDsKIAl9CiAKIAlyZXR2YWwgPSBtaXNjX3JlZ2lzdGVyKCZ1c2JfcGN3ZF9taXNjZGV2KTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVdBVENIRE9HX01JTk9SLCByZXR2YWwpOwogCQlnb3RvIGVycl9vdXRfbWlzY19kZXJlZ2lzdGVyOwogCX0KQEAgLTgwMSw3ICs4NDQsNyBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUEZYIERSSVZFUl9ERVNDICIgdiIgRFJJVkVSX1ZFUlNJT04gIiAoIiBEUklWRVJfREFURSAiKVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJJVkVSX0RFU0MgIiB2IiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IDZkOWYzZDQuLjY0MTM1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKQEAgLTU0LDIyICs1NCwyMiBAQAogCiAvKiBXRFRJTV9DVFJMIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBDT1VOVF9FTkFCICAgICAxCi0jZGVmaW5lIFJFU0VUX0NPVU5UICAgICgxPDwxKQotI2RlZmluZSBERUJVR19FTiAgICAgICAoMTw8MikKKyNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDEgPDwgMSkKKyNkZWZpbmUgREVCVUdfRU4gICAgICAgKDEgPDwgMikKIAogLyogV0RUSU1fTUNUUkwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1SMF9JTlQgICAgICAgIDEKICN1bmRlZiAgUkVTRVRfQ09VTlQwCi0jZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxPDwyKQotI2RlZmluZSBTVE9QX0NPVU5UMCAgICAoMTw8MikKLSNkZWZpbmUgTV9SRVMxICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIE1fUkVTMiAgICAgICAgICgxPDw0KQotI2RlZmluZSBSRVNGUkMxICAgICAgICAoMTw8NSkKLSNkZWZpbmUgUkVTRlJDMiAgICAgICAgKDE8PDYpCisjZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxIDw8IDIpCisjZGVmaW5lIFNUT1BfQ09VTlQwICAgICgxIDw8IDIpCisjZGVmaW5lIE1fUkVTMSAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIE1fUkVTMiAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFJFU0ZSQzEgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFJFU0ZSQzIgICAgICAgICgxIDw8IDYpCiAKIC8qIFdEVElNX0VNUiBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRVhUX01BVENIMCAgICAgIDEKLSNkZWZpbmUgTUFUQ0hfT1VUUFVUX0hJR0ggKDI8PDQpCS8qYSBNQVRDSF9DVFJMIHNldHRpbmcgKi8KKyNkZWZpbmUgTUFUQ0hfT1VUUFVUX0hJR0ggKDIgPDwgNCkJLyphIE1BVENIX0NUUkwgc2V0dGluZyAqLwogCiAvKiBXRFRJTV9SRVMgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIFdET0dfUkVTRVQgICAgICAxCS8qIHJlYWQgb25seSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCmluZGV4IDU3MDI3ZjQuLmY2Y2NjYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKQEAgLTE3LDEyMSArMTcsMTI3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CQkvKiBGb3IgbW9kdWxlIHNwZWNpZmljIGl0ZW1zICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4JCS8qIEZvciBuZXcgbW9kdWxlcGFyYW0ncyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CQkvKiBGb3Igc3RhbmRhcmQgdHlwZXMgKGxpa2Ugc2l6ZV90KSAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CQkvKiBGb3IgdGhlIC1FTk9ERVYvLi4uIHZhbHVlcyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkJLyogRm9yIHByaW50ay9wYW5pYy8uLi4gKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgkJCS8qIEZvciBmaWxlIG9wZXJhdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CQkvKiBGb3IgTU9EVUxFX0FMSUFTX01JU0NERVYKKwkJCQkJCQkoV0FUQ0hET0dfTUlOT1IpICovCisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4JCS8qIEZvciB0aGUgd2F0Y2hkb2cgc3BlY2lmaWMgaXRlbXMgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkJLyogRm9yIF9faW5pdC9fX2V4aXQvLi4uICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CS8qIEZvciBwbGF0Zm9ybV9kcml2ZXIgZnJhbWV3b3JrICovCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JCS8qIEZvciBzcGluX2xvY2svc3Bpbl91bmxvY2svLi4uICovCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgkJLyogRm9yIGNvcHlfdG9fdXNlci9wdXRfdXNlci8uLi4gKi8KIAotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9pbnRlZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvaW50ZWcuaD4JLyogRm9yIHRoZSBXYXRjaGRvZyByZWdpc3RlcnMgKi8KIAotI2RlZmluZSBNQVhfVElNRU9VVAkJCTIwCi0jZGVmaW5lIFJDMzI0MzRfV0RUX0lOVEVSVkFMCQkoMTUgKiBIWikKKyNkZWZpbmUgUEZYIEtCVUlMRF9NT0ROQU1FICI6ICIKIAotI2RlZmluZSBWRVJTSU9OICIwLjIiCisjZGVmaW5lIFZFUlNJT04gIjEuMCIKIAogc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IGNvbXBsZXRpb24gc3RvcDsKLQlpbnQgcnVubmluZzsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQlpbnQgcXVldWU7Ci0JaW50IGRlZmF1bHRfdGlja3M7CiAJdW5zaWduZWQgbG9uZyBpbnVzZTsKKwlzcGlubG9ja190IGlvX2xvY2s7CiB9IHJjMzI0MzRfd2R0X2RldmljZTsKIAogc3RhdGljIHN0cnVjdCBpbnRlZyBfX2lvbWVtICp3ZHRfcmVnOwotc3RhdGljIGludCB0aWNrcyA9IDEwMCAqIEhaOwogCiBzdGF0aWMgaW50IGV4cGVjdF9jbG9zZTsKLXN0YXRpYyBpbnQgdGltZW91dDsKKworLyogQm9hcmQgaW50ZXJuYWwgY2xvY2sgc3BlZWQgaW4gSHosCisgKiB0aGUgd2F0Y2hkb2cgdGltZXIgdGlja3MgYXQuICovCitleHRlcm4gdW5zaWduZWQgaW50IGlkdF9jcHVfZnJlcTsKKworLyogdHJhbnNsYXRlIHd0Y29tcGFyZSB2YWx1ZSB0byBzZWNvbmRzIGFuZCB2aWNlIHZlcnNhICovCisjZGVmaW5lIFdUQ09NUDJTRUMoeCkJKHggLyBpZHRfY3B1X2ZyZXEpCisjZGVmaW5lIFNFQzJXVENPTVAoeCkJKHggKiBpZHRfY3B1X2ZyZXEpCisKKy8qIFVzZSBhIGRlZmF1bHQgdGltZW91dCBvZiAyMHMuIFRoaXMgc2hvdWxkIGJlCisgKiBzYWZlIGZvciBDUFUgY2xvY2sgc3BlZWRzIHVwIHRvIDQwME1IeiwgYXMKKyAqICgoMiBeIDMyKSAtIDEpIC8gKDQwME1IeiAvIDIpID0gMjFzLiAgKi8KKyNkZWZpbmUgV0FUQ0hET0dfVElNRU9VVCAyMAorCitzdGF0aWMgaW50IHRpbWVvdXQgPSBXQVRDSERPR19USU1FT1VUOworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IHZhbHVlLCBpbiBzZWNvbmRzIChkZWZhdWx0PSIKKwkJV0FUQ0hET0dfVElNRU9VVCAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKIAlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKKy8qIGFwcGx5IG9yIGFuZCBuYW5kIG1hc2tzIHRvIGRhdGEgcmVhZCBmcm9tIGFkZHIgYW5kIHdyaXRlIGJhY2sgKi8KKyNkZWZpbmUgU0VUX0JJVFMoYWRkciwgb3IsIG5hbmQpIFwKKwl3cml0ZWwoKHJlYWRsKCZhZGRyKSB8IG9yKSAmIH5uYW5kLCAmYWRkcikKKworc3RhdGljIGludCByYzMyNDM0X3dkdF9zZXQoaW50IG5ld190aW1lb3V0KQoreworCWludCBtYXhfdG8gPSBXVENPTVAyU0VDKCh1MzIpLTEpOworCisJaWYgKG5ld190aW1lb3V0IDwgMCB8fCBuZXdfdGltZW91dCA+IG1heF90bykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCIsCisJCQltYXhfdG8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdGltZW91dCA9IG5ld190aW1lb3V0OworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXdyaXRlbChTRUMyV1RDT01QKHRpbWVvdXQpLCAmd2R0X3JlZy0+d3Rjb21wYXJlKTsKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3N0YXJ0KHZvaWQpCiB7Ci0JdTMyIHZhbDsKKwl1MzIgb3IsIG5hbmQ7CiAKLQlpZiAoIXJjMzI0MzRfd2R0X2RldmljZS5pbnVzZSkgewotCQl3cml0ZWwoMCwgJndkdF9yZWctPnd0Y291bnQpOworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOwogCi0JCXZhbCA9IFJDMzI0MzRfRVJSX1dSRTsKLQkJd3JpdGVsKHJlYWRsKCZ3ZHRfcmVnLT5lcnJjcykgfCB2YWwsICZ3ZHRfcmVnLT5lcnJjcyk7CisJLyogemVybyB0aGUgY291bnRlciBiZWZvcmUgZW5hYmxpbmcgKi8KKwl3cml0ZWwoMCwgJndkdF9yZWctPnd0Y291bnQpOwogCi0JCXZhbCA9IFJDMzI0MzRfV1RDX0VOOwotCQl3cml0ZWwocmVhZGwoJndkdF9yZWctPnd0YykgfCB2YWwsICZ3ZHRfcmVnLT53dGMpOwotCX0KLQlyYzMyNDM0X3dkdF9kZXZpY2UucnVubmluZysrOworCS8qIGRvbid0IGdlbmVyYXRlIGEgbm9uLW1hc2thYmxlIGludGVycnVwdCwKKwkgKiBkbyBhIHdhcm0gcmVzZXQgaW5zdGVhZCAqLworCW5hbmQgPSAxIDw8IFJDMzI0MzRfRVJSX1dORTsKKwlvciA9IDEgPDwgUkMzMjQzNF9FUlJfV1JFOworCisJLyogcmVzZXQgdGhlIEVSUkNTIHRpbWVvdXQgYml0IGluIGNhc2UgaXQncyBzZXQgKi8KKwluYW5kIHw9IDEgPDwgUkMzMjQzNF9FUlJfV1RPOworCisJU0VUX0JJVFMod2R0X3JlZy0+ZXJyY3MsIG9yLCBuYW5kKTsKKworCS8qIHNldCB0aGUgdGltZW91dCAoZWl0aGVyIGRlZmF1bHQgb3IgYmFzZWQgb24gbW9kdWxlIHBhcmFtKSAqLworCXJjMzI0MzRfd2R0X3NldCh0aW1lb3V0KTsKKworCS8qIHJlc2V0IFdUQyB0aW1lb3V0IGJpdCBhbmQgZW5hYmxlIFdEVCAqLworCW5hbmQgPSAxIDw8IFJDMzI0MzRfV1RDX1RPOworCW9yID0gMSA8PCBSQzMyNDM0X1dUQ19FTjsKKworCVNFVF9CSVRTKHdkdF9yZWctPnd0Yywgb3IsIG5hbmQpOworCisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiU3RhcnRlZCB3YXRjaGRvZyB0aW1lci5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9zdG9wKHZvaWQpCiB7Ci0JdTMyIHZhbDsKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKIAotCWlmIChyYzMyNDM0X3dkdF9kZXZpY2UucnVubmluZykgeworCS8qIERpc2FibGUgV0RUICovCisJU0VUX0JJVFMod2R0X3JlZy0+d3RjLCAwLCAxIDw8IFJDMzI0MzRfV1RDX0VOKTsKIAotCQl2YWwgPSB+UkMzMjQzNF9XVENfRU47Ci0JCXdyaXRlbChyZWFkbCgmd2R0X3JlZy0+d3RjKSAmIHZhbCwgJndkdF9yZWctPnd0Yyk7Ci0KLQkJdmFsID0gflJDMzI0MzRfRVJSX1dSRTsKLQkJd3JpdGVsKHJlYWRsKCZ3ZHRfcmVnLT5lcnJjcykgJiB2YWwsICZ3ZHRfcmVnLT5lcnJjcyk7Ci0KLQkJcmMzMjQzNF93ZHRfZGV2aWNlLnJ1bm5pbmcgPSAwOwotCX0KKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXByaW50ayhLRVJOX0lORk8gUEZYICJTdG9wcGVkIHdhdGNoZG9nIHRpbWVyLlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3NldChpbnQgbmV3X3RpbWVvdXQpCitzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9waW5nKHZvaWQpCiB7Ci0JdTMyIGNtcCA9IG5ld190aW1lb3V0ICogSFo7Ci0JdTMyIHN0YXRlLCB2YWw7Ci0KLQl0aW1lb3V0ID0gbmV3X3RpbWVvdXQ7Ci0JLyoKLQkgKiBzdG9yZSBhbmQgZGlzYWJsZSBXVEMKLQkgKi8KLQlzdGF0ZSA9ICh1MzIpKHJlYWRsKCZ3ZHRfcmVnLT53dGMpICYgUkMzMjQzNF9XVENfRU4pOwotCXZhbCA9IH5SQzMyNDM0X1dUQ19FTjsKLQl3cml0ZWwocmVhZGwoJndkdF9yZWctPnd0YykgJiB2YWwsICZ3ZHRfcmVnLT53dGMpOwotCisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CiAJd3JpdGVsKDAsICZ3ZHRfcmVnLT53dGNvdW50KTsKLQl3cml0ZWwoY21wLCAmd2R0X3JlZy0+d3Rjb21wYXJlKTsKLQotCS8qCi0JICogcmVzdG9yZSBXVEMKLQkgKi8KLQotCXdyaXRlbChyZWFkbCgmd2R0X3JlZy0+d3RjKSB8IHN0YXRlLCAmd2R0X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3Jlc2V0KHZvaWQpCi17Ci0JdGlja3MgPSByYzMyNDM0X3dkdF9kZXZpY2UuZGVmYXVsdF90aWNrczsKLX0KLQotc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfdXBkYXRlKHVuc2lnbmVkIGxvbmcgdW51c2VkKQotewotCWlmIChyYzMyNDM0X3dkdF9kZXZpY2UucnVubmluZykKLQkJdGlja3MtLTsKLQotCXdyaXRlbCgwLCAmd2R0X3JlZy0+d3Rjb3VudCk7Ci0KLQlpZiAocmMzMjQzNF93ZHRfZGV2aWNlLnF1ZXVlICYmIHRpY2tzKQotCQltb2RfdGltZXIoJnJjMzI0MzRfd2R0X2RldmljZS50aW1lciwKLQkJCWppZmZpZXMgKyBSQzMyNDM0X1dEVF9JTlRFUlZBTCk7Ci0JZWxzZQotCQljb21wbGV0ZSgmcmMzMjQzNF93ZHRfZGV2aWNlLnN0b3ApOworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcmMzMjQzNF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE0MiwxOSArMTQ4LDIyIEBACiAJaWYgKG5vd2F5b3V0KQogCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCisJcmMzMjQzNF93ZHRfc3RhcnQoKTsKKwlyYzMyNDM0X3dkdF9waW5nKCk7CisKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKIHN0YXRpYyBpbnQgcmMzMjQzNF93ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZiAoZXhwZWN0X2Nsb3NlICYmIG5vd2F5b3V0ID09IDApIHsKKwlpZiAoZXhwZWN0X2Nsb3NlID09IDQyKSB7CiAJCXJjMzI0MzRfd2R0X3N0b3AoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBkaXNhYmxpbmcgd2F0Y2hkb2cgdGltZXJcbiIpOwogCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fQ1JJVCBLQlVJTERfTU9ETkFNRQotCQkJIjogZGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkuIFdEVCB3aWxsIG5vdCBzdG9wICFcbiIpOwotCisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJkZXZpY2UgY2xvc2VkIHVuZXhwZWN0ZWRseS4gV0RUIHdpbGwgbm90IHN0b3AhXG4iKTsKKwkJcmMzMjQzNF93ZHRfcGluZygpOworCX0KIAljbGVhcl9iaXQoMCwgJnJjMzI0MzRfd2R0X2RldmljZS5pbnVzZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzQsMTAgKzE4MywxMCBAQAogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCiAJCQkJCXJldHVybiAtRUZBVUxUOwogCQkJCWlmIChjID09ICdWJykKLQkJCQkJZXhwZWN0X2Nsb3NlID0gMTsKKwkJCQkJZXhwZWN0X2Nsb3NlID0gNDI7CiAJCQl9CiAJCX0KLQkJcmMzMjQzNF93ZHRfdXBkYXRlKDApOworCQlyYzMyNDM0X3dkdF9waW5nKCk7CiAJCXJldHVybiBsZW47CiAJfQogCXJldHVybiAwOwpAQCAtMTk2LDE5ICsyMDUsMTYgQEAKIAkJLmlkZW50aXR5ID0JCSJSQzMyNDM0X1dEVCBXYXRjaGRvZyIsCiAJfTsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgotCQlyYzMyNDM0X3dkdF9yZXNldCgpOworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgogCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKLQkJdmFsdWUgPSByZWFkbCgmd2R0X3JlZy0+d3Rjb3VudCk7CisJCXZhbHVlID0gMDsKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFsdWUsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKLQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAljYXNlIFdESU9DX1NFVE9QVElPTlM6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMjE4LDE4ICsyMjQsMjAgQEAKIAkJCWJyZWFrOwogCQljYXNlIFdESU9TX0RJU0FCTEVDQVJEOgogCQkJcmMzMjQzNF93ZHRfc3RvcCgpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJcmMzMjQzNF93ZHRfcGluZygpOworCQlicmVhazsKIAljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3RpbWVvdXQsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAobmV3X3RpbWVvdXQgPCAxKQorCQlpZiAocmMzMjQzNF93ZHRfc2V0KG5ld190aW1lb3V0KSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAobmV3X3RpbWVvdXQgPiBNQVhfVElNRU9VVCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyYzMyNDM0X3dkdF9zZXQobmV3X3RpbWVvdXQpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CiAJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJnRpbWVvdXQsIHNpemVvZihpbnQpKTsKIAlkZWZhdWx0OgpAQCAtMjM5LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjMzI0MzRfd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYzMyNDM0X3dkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gcmMzMjQzNF93ZHRfd3JpdGUsCkBAIC0yNTQsNDYgKzI2Miw0NSBAQAogCS5mb3BzCT0gJnJjMzI0MzRfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSA9IEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQotCQkiOiBXYXRjaGRvZyBUaW1lciB2ZXJzaW9uICIgVkVSU0lPTiAiLCB0aW1lciBtYXJnaW46ICVkIHNlY1xuIjsKK3N0YXRpYyBjaGFyIGJhbm5lcltdIF9fZGV2aW5pdGRhdGEgPSBLRVJOX0lORk8gUEZYCisJCSJXYXRjaGRvZyBUaW1lciB2ZXJzaW9uICIgVkVSU0lPTiAiLCB0aW1lciBtYXJnaW46ICVkIHNlY1xuIjsKIAotc3RhdGljIGludCByYzMyNDM0X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgcmMzMjQzNF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAotCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmI1MDBfd2R0X3JlcyIpOworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmI1MzJfd2R0X3JlcyIpOwogCWlmICghcikgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSJmYWlsZWQgdG8gcmV0cmlldmUgcmVzb3VyY2VzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJldHJpZXZlIHJlc291cmNlc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXdkdF9yZWcgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKIAlpZiAoIXdkdF9yZWcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiZmFpbGVkIHRvIHJlbWFwIEkvTyByZXNvdXJjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVtYXAgSS9PIHJlc291cmNlc1xuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JcmV0ID0gbWlzY19yZWdpc3RlcigmcmMzMjQzNF93ZHRfbWlzY2Rldik7CisJc3Bpbl9sb2NrX2luaXQoJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKIAotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJImZhaWxlZCB0byByZWdpc3RlciB3YXRjaGRvZyBkZXZpY2VcbiIpOwotCQlnb3RvIHVubWFwOworCS8qIE1ha2Ugc3VyZSB0aGUgd2F0Y2hkb2cgaXMgbm90IHJ1bm5pbmcgKi8KKwlyYzMyNDM0X3dkdF9zdG9wKCk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2U7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJaWYgKHJjMzI0MzRfd2R0X3NldCh0aW1lb3V0KSkgeworCQlyYzMyNDM0X3dkdF9zZXQoV0FUQ0hET0dfVElNRU9VVCk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkidGltZW91dCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIsCisJCQlXVENPTVAyU0VDKCh1MzIpLTEpKTsKIAl9CiAKLQlpbml0X2NvbXBsZXRpb24oJnJjMzI0MzRfd2R0X2RldmljZS5zdG9wKTsKLQlyYzMyNDM0X3dkdF9kZXZpY2UucXVldWUgPSAwOwotCi0JY2xlYXJfYml0KDAsICZyYzMyNDM0X3dkdF9kZXZpY2UuaW51c2UpOwotCi0Jc2V0dXBfdGltZXIoJnJjMzI0MzRfd2R0X2RldmljZS50aW1lciwgcmMzMjQzNF93ZHRfdXBkYXRlLCAwTCk7Ci0KLQlyYzMyNDM0X3dkdF9kZXZpY2UuZGVmYXVsdF90aWNrcyA9IHRpY2tzOwotCi0JcmMzMjQzNF93ZHRfc3RhcnQoKTsKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdF9taXNjZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVnaXN0ZXIgd2F0Y2hkb2cgZGV2aWNlXG4iKTsKKwkJZ290byB1bm1hcDsKKwl9CiAKIAlwcmludGsoYmFubmVyLCB0aW1lb3V0KTsKIApAQCAtMzA0LDM1ICszMTEsMzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHJjMzI0MzRfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgcmMzMjQzNF93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaWYgKHJjMzI0MzRfd2R0X2RldmljZS5xdWV1ZSkgewotCQlyYzMyNDM0X3dkdF9kZXZpY2UucXVldWUgPSAwOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyYzMyNDM0X3dkdF9kZXZpY2Uuc3RvcCk7Ci0JfQogCW1pc2NfZGVyZWdpc3RlcigmcmMzMjQzNF93ZHRfbWlzY2Rldik7Ci0KIAlpb3VubWFwKHdkdF9yZWcpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJjMzI0MzRfd2R0ID0gewotCS5wcm9iZQk9IHJjMzI0MzRfd2R0X3Byb2JlLAotCS5yZW1vdmUgPSByYzMyNDM0X3dkdF9yZW1vdmUsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicmMzMjQzNF93ZHQiLAorc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyYzMyNDM0X3dkdF9zdG9wKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJjMzI0MzRfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcmMzMjQzNF93ZHRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChyYzMyNDM0X3dkdF9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHJjMzI0MzRfd2R0X3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkJLm5hbWUgPSAicmMzMjQzNF93ZHQiLAogCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJjMzI0MzRfd2R0X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdCk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcmMzMjQzNF93ZHRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJjMzI0MzRfd2R0X2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcmMzMjQzNF93ZHQpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyYzMyNDM0X3dkdF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChyYzMyNDM0X3dkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCAwOWNiMTgzLi4xZThmMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogCiAvKiBSSU8gdXNlcyB0aGUgTmF0U2VtaSBTdXBlciBJL08gcG93ZXIgbWFuYWdlbWVudCBsb2dpY2FsIGRldmljZQpAQCAtODYsOCArODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJpb3dkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyByaW93ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQsCkBAIC0xNDcsNyArMTQ1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgcmlvd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3Qgcmlvd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3Qgcmlvd2QgKnAgPSByaW93ZF9kZXZpY2U7CiAKQEAgLTE2MCwxMiArMTU5LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJpb3dkX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9CW5vX2xsc2VlaywKLQkuaW9jdGwgPQlyaW93ZF9pb2N0bCwKLQkub3BlbiA9CQlyaW93ZF9vcGVuLAotCS53cml0ZSA9CXJpb3dkX3dyaXRlLAotCS5yZWxlYXNlID0Jcmlvd2RfcmVsZWFzZSwKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CQlub19sbHNlZWssCisJLnVubG9ja2VkX2lvY3RsID0Jcmlvd2RfaW9jdGwsCisJLm9wZW4gPQkJCXJpb3dkX29wZW4sCisJLndyaXRlID0JCXJpb3dkX3dyaXRlLAorCS5yZWxlYXNlID0JCXJpb3dkX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugcmlvd2RfbWlzY2RldiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYwppbmRleCBmMWFlMzcyOS4uY2NlMTk4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYwpAQCAtNTksOCArNTksOCBAQAogc3RhdGljIGludCB3ZHRfZ3BpX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKndkdF9ncGlfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwKIAkJCQkJCWNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKLXN0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CitzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitzdGF0aWMgaW50IF9fZXhpdCB3ZHRfZ3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCiAKIHN0YXRpYyBjb25zdCBjaGFyIHdkdF9ncGlfbmFtZVtdID0gIndkdF9ncGkiOwpAQCAtMzQ2LDEwICszNDYsOSBAQAogfQogCiAvKiBObyBob3RwbHVnZ2luZyBvbiB0aGUgcGxhdGZvcm0gYnVzIC0gdXNlIF9faW5pdCAqLwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkdikKIHsKIAlpbnQgcmVzOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBjb25zdCBwZHYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmVzb3VyY2UKIAkJKiBjb25zdCByciA9IHdkdF9ncGlfZ2V0X3Jlc291cmNlKHBkdiwgV0RUX1JFU09VUkNFX1JFR1MsCiAJCQkJCQkgIElPUkVTT1VSQ0VfTUVNKSwKQEAgLTM3NCw3ICszNzMsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmVzOwogCkBAIC0zODcsMTUgKzM4NiwxMyBAQAogCiAKIC8qIERldmljZSBkcml2ZXIgaW5pdCAmIGV4aXQgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB3ZHRfZ3BpX2RyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKSB3ZHRfZ3BpX25hbWUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2d0X2dwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gd2R0X2dwaV9uYW1lLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gd2R0X2dwaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKLQkuc2h1dGRvd24JPSBOVUxMLAotCS5zdXNwZW5kCT0gTlVMTCwKLQkucmVzdW1lCQk9IE5VTEwsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3ZHRfZ3BpX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX2luaXRfbW9kdWxlKHZvaWQpCkBAIC00MDMsMTIgKzQwMCwxMiBAQAogCWF0b21pY19zZXQoJm9wZW5jbnQsIDEpOwogCWlmICh0aW1lb3V0ID4gTUFYX1RJTUVPVVRfU0VDT05EUykKIAkJdGltZW91dCA9IE1BWF9USU1FT1VUX1NFQ09ORFM7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHdkdF9ncGlfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHdkdF9ncGlfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYTExMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYwppbmRleCBlMTliNDU3Li41YmQ3ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKglXYXRjaGRvZyBkcml2ZXIgZm9yIHRoZSBTQTExeDAvUFhBMnh4CiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDIwMDAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+Ci0gKiAgICAgICAgICBCYXNlZCBvbiBTb2Z0RG9nIGRyaXZlciBieSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICoJKGMpIENvcHlyaWdodCAyMDAwIE9sZWcgRHJva2luIDxncmVlbkBjcmltZWEuZWR1PgorICoJICAgIEJhc2VkIG9uIFNvZnREb2cgZHJpdmVyIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDAgICAgICAgICAgIE9sZWcgRHJva2luIDxncmVlbkBjcmltZWEuZWR1PgogICoKLSAqICAgICAgMjcvMTEvMjAwMCBJbml0aWFsIHJlbGVhc2UKKyAqCTI3LzExLzIwMDAgSW5pdGlhbCByZWxlYXNlCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYwppbmRleCAzMjY2ZGFhYWUuLmQxYzM5MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCTYweHggU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIFRpbWVyIGRyaXZlciBmb3IgTGludXggMi4yLngKICAqCi0gKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KKyAqCUJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwppbmRleCBhZTc0ZjZiLi5iNmU2Nzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwpAQCAtNCwxMiArNCwxMiBAQAogICoJKGMpIENvcHlyaWdodCAyMDA1IFdlYmNvbiwgSW5jLgogICoKICAqCUJhc2VkIG9uIGliNzAwd2R0LmMsIHdoaWNoIGlzIGJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkCi0gKiAgICAgIG9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCW9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDEgQ2hhcmxlcyBIb3dlcyA8Y2hvd2VzQHZzb2wubmV0PgogICoKLSAqICAgICAgQmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gYWNxdWlyZXdkdC5jIHdoaWNoCi0gKiAgICAgICBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCUJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIGFjcXVpcmV3ZHQuYyB3aGljaAorICoJaXMgYmFzZWQgb24gd2R0LmMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAwLTIwMDEgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGxpbnV4Lm9yZy5wbD4KICAqCkBAIC0zMCw5ICszMCw5IEBACiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgotICogICAgICAxNC1EZWMtMjAwMSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+Ci0gKiAgICAgICAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLSAqICAgICAgICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAorICoJMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICoJICAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorICoJICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCmluZGV4IDA2NTUzZGUuLmU0NjdkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCkBAIC0zNSw3ICszNSw4IEBACiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAjZGVmaW5lIEVQWEMzX1dBVENIRE9HX0NUTF9SRUcgMHgxZWUgLyogd3JpdGUgMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZSAqLwogI2RlZmluZSBFUFhDM19XQVRDSERPR19QRVRfUkVHIDB4MWVmIC8qIHdyaXRlIGFueXRoaW5nIHRvIHBldCBvbmNlIGVuYWJsZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCmluZGV4IDIzZGEzY2MuLmI1ZTE5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYwpAQCAtNzEsNyArNzEsNyBAQAogI2RlZmluZSBVQVJUMl9JUlEJMHgwNAkvKiBTZXJpYWwxICovCiAvKiA1IC03IGFyZSByZXNlcnZlZCAqLwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFBGWCBTQzEyMDBfTU9EVUxFX1ZFUjsKK3N0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBQRlggU0MxMjAwX01PRFVMRV9WRVI7CiBzdGF0aWMgaW50IHRpbWVvdXQgPSAxOwogc3RhdGljIGludCBpbyA9IC0xOwogc3RhdGljIGludCBpb19sZW4gPSAyOwkJLyogZm9yIG5vbiBwbHVnIGFuZCBwbGF5ICovCkBAIC0zOTIsNyArMzkyLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKCIlc1xuIiwgYmFubmVyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgYmFubmVyKTsKIAogI2lmIGRlZmluZWQgQ09ORklHX1BOUAogCWlmIChpc2FwbnApIHsKQEAgLTQ3Nyw2ICs0NzcsNyBAQAogbW9kdWxlX2V4aXQoc2MxMjAwd2R0X2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IHdhdGNoZG9nIGNvbXBvbmVudCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKAorCSJEcml2ZXIgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IHdhdGNoZG9nIGNvbXBvbmVudCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKaW5kZXggYTJiNmMxMC4uNTJiNjNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NjNTIwX3dkdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqCUFNRCBFbGFuIFNDNTIwIHByb2Nlc3NvciBXYXRjaGRvZyBUaW1lciBkcml2ZXIKICAqCi0gKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveCwKLSAqICAgICAgICAgICBhbmQgc2JjNjB4eHdkdC5jIGJ5IEpha29iIE9lc3RlcmdhYXJkIDxqYWtvYkB1bnRob3VnaHQubmV0PgorICoJQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294LAorICoJICAgICBhbmQgc2JjNjB4eHdkdC5jIGJ5IEpha29iIE9lc3RlcmdhYXJkIDxqYWtvYkB1bnRob3VnaHQubmV0PgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICoJVGhlIGF1dGhvcnMgZG8gTk9UIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZSB3YXJyYW50eSBmb3IKICAqCWFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkICJBUy1JUyIgaW4KLSAqICAgICAgdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCisgKgl0aGUgaG9wZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDEgICAgU2NvdHQgSmVubmluZ3MgPGxpbnV4ZHJpdmVyc0Bvcm8ubmV0PgogICogICAgICAgICAgIDkvMjcgLSAyMDAxICAgICAgW0luaXRpYWwgcmVsZWFzZV0KQEAgLTQzOCw2ICs0MzgsNyBAQAogbW9kdWxlX2V4aXQoc2M1MjBfd2R0X3VubG9hZCk7CiAKIE1PRFVMRV9BVVRIT1IoIlNjb3R0IGFuZCBCaWxsIEplbm5pbmdzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3Igd2F0Y2hkb2cgdGltZXIgaW4gQU1EIFwiRWxhblwiIFNDNTIwIHVQcm9jZXNzb3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigKKwkiRHJpdmVyIGZvciB3YXRjaGRvZyB0aW1lciBpbiBBTUQgXCJFbGFuXCIgU0M1MjAgdVByb2Nlc3NvciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCmluZGV4IDJlNTZjYWQuLjhhMWYwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKQEAgLTIsNyArMiw3IEBACiAgKglTTXNDIDM3Qjc4NyBXYXRjaGRvZyBUaW1lciBkcml2ZXIgZm9yIExpbnV4IDIuNi54LngKICAqCiAgKglCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqICAgICAgIGFuZCBzb21lIG90aGVyIGV4aXN0aW5nIGRyaXZlcnMKKyAqCWFuZCBzb21lIG90aGVyIGV4aXN0aW5nIGRyaXZlcnMKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTEsNyArMTEsNyBAQAogICoKICAqCVRoZSBhdXRob3JzIGRvIE5PVCBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUgd2FycmFudHkgZm9yCiAgKglhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZCAiQVMtSVMiIGluCi0gKiAgICAgIHRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgorICoJdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCiAgKgogICoJKEMpIENvcHlyaWdodCAyMDAzLTIwMDYgIFN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4KICAqCkBAIC0yMiwxOSArMjIsMTkgQEAKICAqCiAgKiAgVGhlb3J5IG9mIG9wZXJhdGlvbjoKICAqCi0gKiAgICAgIEEgV2F0Y2hkb2cgVGltZXIgKFdEVCkgaXMgYSBoYXJkd2FyZSBjaXJjdWl0IHRoYXQgY2FuCi0gKiAgICAgIHJlc2V0IHRoZSBjb21wdXRlciBzeXN0ZW0gaW4gY2FzZSBvZiBhIHNvZnR3YXJlIGZhdWx0LgotICogICAgICBZb3UgcHJvYmFibHkga25ldyB0aGF0IGFscmVhZHkuCisgKglBIFdhdGNoZG9nIFRpbWVyIChXRFQpIGlzIGEgaGFyZHdhcmUgY2lyY3VpdCB0aGF0IGNhbgorICoJcmVzZXQgdGhlIGNvbXB1dGVyIHN5c3RlbSBpbiBjYXNlIG9mIGEgc29mdHdhcmUgZmF1bHQuCisgKglZb3UgcHJvYmFibHkga25ldyB0aGF0IGFscmVhZHkuCiAgKgotICogICAgICBVc3VhbGx5IGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIG5vdGlmeSB0aGUga2VybmVsIFdEVCBkcml2ZXIKLSAqICAgICAgdmlhIHRoZSAvZGV2L3dhdGNoZG9nIHNwZWNpYWwgZGV2aWNlIGZpbGUgdGhhdCB1c2Vyc3BhY2UgaXMKLSAqICAgICAgc3RpbGwgYWxpdmUsIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLiAgV2hlbiBzdWNoIGEgbm90aWZpY2F0aW9uCi0gKiAgICAgIG9jY3VycywgdGhlIGRyaXZlciB3aWxsIHVzdWFsbHkgdGVsbCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cKLSAqICAgICAgdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLCBhbmQgdGhhdCB0aGUgd2F0Y2hkb2cgc2hvdWxkIHdhaXQKLSAqICAgICAgZm9yIHlldCBhbm90aGVyIGxpdHRsZSB3aGlsZSB0byByZXNldCB0aGUgc3lzdGVtLgotICogICAgICBJZiB1c2Vyc3BhY2UgZmFpbHMgKFJBTSBlcnJvciwga2VybmVsIGJ1Zywgd2hhdGV2ZXIpLCB0aGUKLSAqICAgICAgbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsCi0gKiAgICAgIHJlc2V0IHRoZSBzeXN0ZW0gKGNhdXNpbmcgYSByZWJvb3QpIGFmdGVyIHRoZSB0aW1lb3V0IG9jY3Vycy4KKyAqCVVzdWFsbHkgYSB1c2Vyc3BhY2UgZGFlbW9uIHdpbGwgbm90aWZ5IHRoZSBrZXJuZWwgV0RUIGRyaXZlcgorICoJdmlhIHRoZSAvZGV2L3dhdGNoZG9nIHNwZWNpYWwgZGV2aWNlIGZpbGUgdGhhdCB1c2Vyc3BhY2UgaXMKKyAqCXN0aWxsIGFsaXZlLCBhdCByZWd1bGFyIGludGVydmFscy4gIFdoZW4gc3VjaCBhIG5vdGlmaWNhdGlvbgorICoJb2NjdXJzLCB0aGUgZHJpdmVyIHdpbGwgdXN1YWxseSB0ZWxsIHRoZSBoYXJkd2FyZSB3YXRjaGRvZworICoJdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLCBhbmQgdGhhdCB0aGUgd2F0Y2hkb2cgc2hvdWxkIHdhaXQKKyAqCWZvciB5ZXQgYW5vdGhlciBsaXR0bGUgd2hpbGUgdG8gcmVzZXQgdGhlIHN5c3RlbS4KKyAqCUlmIHVzZXJzcGFjZSBmYWlscyAoUkFNIGVycm9yLCBrZXJuZWwgYnVnLCB3aGF0ZXZlciksIHRoZQorICoJbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsCisgKglyZXNldCB0aGUgc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCiAgKgogICogQ3JlYXRlIGRldmljZSB3aXRoOgogICogIG1rbm9kIC9kZXYvd2F0Y2hkb2cgYyAxMCAxMzAKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKIAkJbmV3X3RpbWVvdXQgPSB0aW1lb3V0OwogCQlpZiAodW5pdCA9PSBVTklUX01JTlVURSkKLQkJCSAgbmV3X3RpbWVvdXQgKj0gNjA7CisJCQluZXdfdGltZW91dCAqPSA2MDsKIAkJcmV0dXJuIHB1dF91c2VyKG5ld190aW1lb3V0LCB1YXJnLmkpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYwppbmRleCA3MjA0Zjk2Li5lYmNjOWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKglTb2Z0RG9nCTAuMDc6CUEgU29mdHdhcmUgV2F0Y2hkb2cgRGV2aWNlCiAgKgotICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAorICoJCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzIsNyArMzMsNyBAQAogICoJQWRkZWQgV0RJT0NfR0VUVElNRU9VVCBhbmQgV0RJT0NfU0VUVElNT1VULgogICoKICAqICAyMDAyMDUzMCBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KLSAqICAJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgorICoJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCmluZGV4IDNjN2FhNDEuLmE5YzdmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTdoZl93ZHQuYwpAQCAtNDYyLDYgKzQ2Miw3IEBACiBtb2R1bGVfZXhpdCh3ZHRfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwgU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwgIgorCQkiU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigidzgzNjk3aGYvaGcgV0RUIGRyaXZlciIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMKaW5kZXggYWRhOGFkOC4uODgzYjVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jCkBAIC0yLDcgKzIsNyBAQAogICoJdzgzNjk3dWcvdWYgV0RUIGRyaXZlcgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwOCBGbGVtbWluZyBGcmFuc2VuIDxmZkBucnZpc3NpbmcubmV0PgotICogICAgICAgICAgICAgIHJldXNlZCBvcmlnaW5hbCBjb2RlIHRvIHN1cG9wcnQgdzgzNjk3dWcvdWYuCisgKgkJcmV1c2VkIG9yaWdpbmFsIGNvZGUgdG8gc3VwcG9ydCB3ODM2OTd1Zy91Zi4KICAqCiAgKglCYXNlZCBvbiB3ODM2MjdoZl93ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYwogICoJd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCkBAIC03OSw3ICs3OSw3IEBACiAJCQkJCQkJKHNhbWUgYXMgRUZFUikgKi8KICNkZWZpbmUgV0RUX0VGRFIgKFdEVF9FRklSKzEpIC8qIEV4dGVuZGVkIEZ1bmN0aW9uIERhdGEgUmVnaXN0ZXIgKi8KIAotc3RhdGljIHZvaWQgdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKHZvaWQpCitzdGF0aWMgaW50IHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBjaGFyIHZlcnNpb247CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIFc4MzY5N1VHL1VGIGNvdWxkIGJlIGZvdW5kXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlvdXRiX3AoMHgwNywgV0RUX0VGRVIpOyAvKiBwb2ludCB0byBsb2dpY2FsIGRldmljZSBudW1iZXIgcmVnICovCkBAIC0xMTAsNiArMTEwLDggQEAKIAlvdXRiX3AoMHgzMCwgV0RUX0VGRVIpOyAvKiBzZWxlY3QgQ1IzMCAqLwogCWMgPSBpbmJfcChXRFRfRUZEUik7CiAJb3V0Yl9wKGMgfHwgMHgwMSwgV0RUX0VGRFIpOyAvKiBzZXQgYml0IDAgdG8gYWN0aXZhdGUgR1BJTzIgKi8KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3ODM2OTd1Z191bnNlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQpAQCAtMTE3LDExICsxMTksMTQgQEAKIAlvdXRiX3AoMHhBQSwgV0RUX0VGRVIpOyAvKiBMZWF2ZSBleHRlbmRlZCBmdW5jdGlvbiBtb2RlICovCiB9CiAKLXN0YXRpYyB2b2lkIHc4MzY5N3VnX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgdzgzNjk3dWdfaW5pdCh2b2lkKQogeworCWludCByZXQ7CiAJdW5zaWduZWQgY2hhciB0OwogCi0JdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJcmV0ID0gdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OwogCiAJb3V0Yl9wKDB4RjYsIFdEVF9FRkVSKTsgLyogU2VsZWN0IENSRjYgKi8KIAl0ID0gaW5iX3AoV0RUX0VGRFIpOyAgICAvKiByZWFkIENSRjYgKi8KQEAgLTEzNywxMyArMTQyLDE1IEBACiAJb3V0Yl9wKHQsIFdEVF9FRkRSKTsgICAgLyogV3JpdGUgYmFjayB0byBDUkY1ICovCiAKIAl3ODM2OTd1Z191bnNlbGVjdF93ZF9yZWdpc3RlcigpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3ZHRfY3RybChpbnQgdGltZW91dCkKIHsKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCi0JdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJaWYgKHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpIDwgMCkKKwkJcmV0dXJuOwogCiAJb3V0Yl9wKDB4RjQsIFdEVF9FRkVSKTsgICAgLyogU2VsZWN0IENSRjQgKi8KIAlvdXRiX3AodGltZW91dCwgV0RUX0VGRFIpOyAvKiBXcml0ZSBUaW1lb3V0IGNvdW50ZXIgdG8gQ1JGNCAqLwpAQCAtMzQ3LDcgKzM1NCw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXc4MzY5N3VnX2luaXQoKTsKKwlyZXQgPSB3ODM2OTd1Z19pbml0KCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIHVucmVnX3JlZ2lvbnM7CiAKIAlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CiAJaWYgKHJldCAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKaW5kZXggMjUyNWRhNS4uMDU2MDE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAod2R0X3NldF90aW1lb3V0KG5ld190aW1lb3V0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJd2R0X2tlZXBhbGl2ZSgpOwogCQkvKiBGYWxsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oIGIvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaAppbmRleCBkYjM0ODUzLi4wZTNhNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2Q1MDFwLmgKQEAgLTExLDkgKzExLDkgQEAKICAqCiAgKglodHRwOi8vd3d3LmN5bXJ1Lm5ldAogICoKLSAqCVRoaXMgZHJpdmVyIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkCi0gKgloZXJlaW4gYnkgcmVmZXJlbmNlLiBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIHdpdGhvdXQgd2FycmFudHkgb3IKLSAqCXN1cHBvcnQuCisgKglUaGlzIGRyaXZlciBpcyBwcm92aWRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKglpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4gVGhlIGRyaXZlciBpcyBwcm92aWRlZCB3aXRob3V0CisgKgl3YXJyYW50eSBvciBzdXBwb3J0LgogICoKICAqCVJlbGVhc2UgMC4wNC4KICAqCkBAIC0zOSwxMyArMzksMTMgQEAKIC8qIHByb2dyYW1tYWJsZSBvdXRwdXRzOiAqLwogI2RlZmluZSBXRFRfUFJPR09VVAkJKGlvKzE1KQkvKiB3cj1lbmFibGUsIHJkPWRpc2FibGUgKi8KIAotCQkJCQkJCQkvKiBGQU4gNTAxIDUwMCAqLwotI2RlZmluZSBXRENfU1JfV0NDUgkJMQkvKiBBY3RpdmUgbG93ICovCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9UR09PRAkJMgkJCQkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfSVNPSTAJCTQJCQkJLyogIFggICBYICAgWCAgKi8KLSNkZWZpbmUgV0RDX1NSX0lTSUkxCQk4CQkJCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9GQU5HT09ECQkxNgkJCQkvKiAgWCAgIC0gICAtICAqLwotI2RlZmluZSBXRENfU1JfUFNVT1ZFUgkJMzIJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfUFNVVU5EUgkJNjQJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfSVJRCQkxMjgJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICBYICAqLworCQkJCQkJCSAvKiBGQU4gNTAxIDUwMCAqLworI2RlZmluZSBXRENfU1JfV0NDUgkJMQkvKiBBY3RpdmUgbG93ICovIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9UR09PRAkJMgkJCSAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfSVNPSTAJCTQJCQkgLyogIFggICBYICAgWCAgKi8KKyNkZWZpbmUgV0RDX1NSX0lTSUkxCQk4CQkJIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9GQU5HT09ECQkxNgkJCSAvKiAgWCAgIC0gICAtICAqLworI2RlZmluZSBXRENfU1JfUFNVT1ZFUgkJMzIJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfUFNVVU5EUgkJNjQJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfSVJRCQkxMjgJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICBYICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ZHQuYwppbmRleCBlZGRiOTE4Li4zYmJlZmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICoJSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UgV0RUNTAwLzUwMSBkcml2ZXIKKyAqCUluZHVzdHJpYWwgQ29tcHV0ZXIgU291cmNlIFdEVDUwMSBkcml2ZXIKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKICAqCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQEAgLTgyLDE0ICs4MiwxNiBAQAogbW9kdWxlX3BhcmFtKGlycSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiV0RUIGlycSAoZGVmYXVsdD0xMSkiKTsKIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiAvKiBTdXBwb3J0IGZvciB0aGUgRmFuIFRhY2hvbWV0ZXIgb24gdGhlIFdEVDUwMS1QICovCiBzdGF0aWMgaW50IHRhY2hvbWV0ZXI7Ci0KIG1vZHVsZV9wYXJhbSh0YWNob21ldGVyLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0YWNob21ldGVyLAogCQkiV0RUNTAxLVAgRmFuIFRhY2hvbWV0ZXIgc3VwcG9ydCAoMD1kaXNhYmxlLCBkZWZhdWx0PTApIik7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKworc3RhdGljIGludCB0eXBlID0gNTAwOworbW9kdWxlX3BhcmFtKHR5cGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHR5cGUsCisJCSJXRFQ1MDEtUCBDYXJkIHR5cGUgKDUwMCBvciA1MDEgLCBkZWZhdWx0PTUwMCkiKTsKIAogLyoKICAqCVByb2dyYW1taW5nIHN1cHBvcnQKQEAgLTE1OCw3ICsxNjAsNyBAQAogICoJcmVsb2FkaW5nIHRoZSBjYXNjYWRlIGNvdW50ZXIuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfcGluZyh2b2lkKQorc3RhdGljIHZvaWQgd2R0X3Bpbmcodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwpAQCAtMTY5LDcgKzE3MSw2IEBACiAJd2R0X2N0cl9sb2FkKDEsIHdkX2hlYXJ0YmVhdCk7CS8qIEhlYXJ0YmVhdCAqLwogCW91dGJfcCgwLCBXRFRfREMpOwkJLyogRW5hYmxlIHdhdGNoZG9nICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xOTMsNyArMTk0LDYgQEAKIAogLyoqCiAgKgl3ZHRfZ2V0X3N0YXR1czoKLSAqCUBzdGF0dXM6CQl0aGUgbmV3IHN0YXR1cy4KICAqCiAgKglFeHRyYWN0IHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSBhIFdEVCB3YXRjaGRvZyBkZXZpY2UuIFRoZXJlIGFyZQogICoJc2V2ZXJhbCBib2FyZCB2YXJpYW50cyBzbyB3ZSBoYXZlIHRvIGtub3cgd2hpY2ggYml0cyBhcmUgdmFsaWQuIFNvbWUKQEAgLTIwMiwzNiArMjAyLDM1IEBACiAgKgl3ZSB0aGVuIG1hcCB0aGUgYml0cyBvbnRvIHRoZSBzdGF0dXMgaW9jdGwgZmxhZ3MuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfZ2V0X3N0YXR1cyhpbnQgKnN0YXR1cykKK3N0YXRpYyBpbnQgd2R0X2dldF9zdGF0dXModm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIG5ld19zdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwogCW5ld19zdGF0dXMgPSBpbmJfcChXRFRfU1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7CiAKLQkqc3RhdHVzID0gMDsKIAlpZiAobmV3X3N0YXR1cyAmIFdEQ19TUl9JU09JMCkKLQkJKnN0YXR1cyB8PSBXRElPRl9FWFRFUk4xOworCQlzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMTsKIAlpZiAobmV3X3N0YXR1cyAmIFdEQ19TUl9JU0lJMSkKLQkJKnN0YXR1cyB8PSBXRElPRl9FWFRFUk4yOwotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9UR09PRCkpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7Ci0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VPVkVSKSkKLQkJKnN0YXR1cyB8PSBXRElPRl9QT1dFUk9WRVI7Ci0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VVTkRSKSkKLQkJKnN0YXR1cyB8PSBXRElPRl9QT1dFUlVOREVSOwotCWlmICh0YWNob21ldGVyKSB7Ci0JCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCi0JCQkqc3RhdHVzIHw9IFdESU9GX0ZBTkZBVUxUOworCQlzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMjsKKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9UR09PRCkpCisJCQlzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7CisJCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCisJCQlzdGF0dXMgfD0gV0RJT0ZfUE9XRVJPVkVSOworCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQorCQkJc3RhdHVzIHw9IFdESU9GX1BPV0VSVU5ERVI7CisJCWlmICh0YWNob21ldGVyKSB7CisJCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQorCQkJCXN0YXR1cyB8PSBXRElPRl9GQU5GQVVMVDsKKwkJfQogCX0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogLyoqCiAgKgl3ZHRfZ2V0X3RlbXBlcmF0dXJlOgogICoKQEAgLTIzOSw3ICsyMzgsNyBAQAogICoJZmFyZW5oZWl0LiBJdCB3YXMgZGVzaWduZWQgYnkgYW4gaW1wZXJpYWwgbWVhc3VyZW1lbnQgbHVkZGl0ZS4KICAqLwogCi1zdGF0aWMgaW50IHdkdF9nZXRfdGVtcGVyYXR1cmUoaW50ICp0ZW1wZXJhdHVyZSkKK3N0YXRpYyBpbnQgd2R0X2dldF90ZW1wZXJhdHVyZSh2b2lkKQogewogCXVuc2lnbmVkIHNob3J0IGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI0NywxMCArMjQ2LDE4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJndkdF9sb2NrLCBmbGFncyk7CiAJYyA9IGluYl9wKFdEVF9SVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKLQkqdGVtcGVyYXR1cmUgPSAoYyAqIDExIC8gMTUpICsgNzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKGMgKiAxMSAvIDE1KSArIDc7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKworc3RhdGljIHZvaWQgd2R0X2RlY29kZV81MDEoaW50IHN0YXR1cykKK3sKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfVEdPT0QpKQorCQlwcmludGsoS0VSTl9DUklUICJPdmVyaGVhdCBhbGFybS4oJWQpXG4iLCBpbmJfcChXRFRfUlQpKTsKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCisJCXByaW50ayhLRVJOX0NSSVQgIlBTVSBvdmVyIHZvbHRhZ2UuXG4iKTsKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCisJCXByaW50ayhLRVJOX0NSSVQgIlBTVSB1bmRlciB2b2x0YWdlLlxuIik7Cit9CiAKIC8qKgogICoJd2R0X2ludGVycnVwdDoKQEAgLTI3NSwxOCArMjgyLDEzIEBACiAKIAlwcmludGsoS0VSTl9DUklUICJXRFQgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfVEdPT0QpKQotCQlwcmludGsoS0VSTl9DUklUICJPdmVyaGVhdCBhbGFybS4oJWQpXG4iLCBpbmJfcChXRFRfUlQpKTsKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCi0JCXByaW50ayhLRVJOX0NSSVQgIlBTVSBvdmVyIHZvbHRhZ2UuXG4iKTsKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCi0JCXByaW50ayhLRVJOX0NSSVQgIlBTVSB1bmRlciB2b2x0YWdlLlxuIik7Ci0JaWYgKHRhY2hvbWV0ZXIpIHsKLQkJaWYgKCEoc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiUG9zc2libGUgZmFuIGZhdWx0LlxuIik7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCXdkdF9kZWNvZGVfNTAxKHN0YXR1cyk7CisJCWlmICh0YWNob21ldGVyKSB7CisJCQlpZiAoIShzdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCisJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiUG9zc2libGUgZmFuIGZhdWx0LlxuIik7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAlpZiAoIShzdGF0dXMgJiBXRENfU1JfV0NDUikpIHsKICNpZmRlZiBTT0ZUV0FSRV9SRUJPT1QKICNpZmRlZiBPTkxZX1RFU1RJTkcKQEAgLTM2NiwxNyArMzY4LDE4IEBACiAKIAkvKiBBZGQgb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGNhcmQgd2UgaGF2ZSAqLwogCWlkZW50Lm9wdGlvbnMgfD0gKFdESU9GX0VYVEVSTjF8V0RJT0ZfRVhURVJOMik7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlpZGVudC5vcHRpb25zIHw9IChXRElPRl9PVkVSSEVBVHxXRElPRl9QT1dFUlVOREVSfFdESU9GX1BPV0VST1ZFUik7Ci0JaWYgKHRhY2hvbWV0ZXIpCi0JCWlkZW50Lm9wdGlvbnMgfD0gV0RJT0ZfRkFORkFVTFQ7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJaWRlbnQub3B0aW9ucyB8PSAoV0RJT0ZfT1ZFUkhFQVR8V0RJT0ZfUE9XRVJVTkRFUnwKKwkJCQkJCQlXRElPRl9QT1dFUk9WRVIpOworCQlpZiAodGFjaG9tZXRlcikKKwkJCWlkZW50Lm9wdGlvbnMgfD0gV0RJT0ZfRkFORkFVTFQ7CisJfQogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CiAJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOwogCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgotCQl3ZHRfZ2V0X3N0YXR1cygmc3RhdHVzKTsKKwkJc3RhdHVzID0gd2R0X2dldF9zdGF0dXMoKTsKIAkJcmV0dXJuIHB1dF91c2VyKHN0YXR1cywgcCk7CiAJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgogCQlyZXR1cm4gcHV0X3VzZXIoMCwgcCk7CkBAIC00NDYsNyArNDQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiAvKioKICAqCXdkdF90ZW1wX3JlYWQ6CiAgKglAZmlsZTogZmlsZSBoYW5kbGUgdG8gdGhlIHdhdGNoZG9nIGJvYXJkCkBAIC00NjEsMTAgKzQ2Myw3IEBACiBzdGF0aWMgc3NpemVfdCB3ZHRfdGVtcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnB0cikKIHsKLQlpbnQgdGVtcGVyYXR1cmU7Ci0KLQlpZiAod2R0X2dldF90ZW1wZXJhdHVyZSgmdGVtcGVyYXR1cmUpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlpbnQgdGVtcGVyYXR1cmUgPSB3ZHRfZ2V0X3RlbXBlcmF0dXJlKCk7CiAKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgJnRlbXBlcmF0dXJlLCAxKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00OTcsNyArNDk2LDYgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCiAvKioKICAqCW5vdGlmeV9zeXM6CkBAIC01MzksNyArNTM3LDYgQEAKIAkuZm9wcwk9ICZ3ZHRfZm9wcywKIH07CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X3RlbXBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCkBAIC01NTMsNyArNTUwLDYgQEAKIAkubmFtZQk9ICJ0ZW1wZXJhdHVyZSIsCiAJLmZvcHMJPSAmd2R0X3RlbXBfZm9wcywKIH07Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogLyoKICAqCVRoZSBXRFQgY2FyZCBuZWVkcyB0byBsZWFybiBhYm91dCBzb2Z0IHNodXRkb3ducyBpbiBvcmRlciB0bwpAQCAtNTc3LDkgKzU3Myw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2V4aXQodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLworCWlmICh0eXBlID09IDUwMSkKKwkJbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwogCWZyZWVfaXJxKGlycSwgTlVMTCk7CiAJcmVsZWFzZV9yZWdpb24oaW8sIDgpOwpAQCAtNTk3LDEyICs1OTIsMTcgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKHR5cGUgIT0gNTAwICYmIHR5cGUgIT0gNTAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAid2R0OiB1bmtub3duIGNhcmQgdHlwZSAnJWQnLlxuIiwgdHlwZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZTsKIAkgICBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAod2R0X3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQl3ZHRfc2V0X2hlYXJ0YmVhdChXRF9USU1PKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwIDwgaGVhcnRiZWF0IDwgNjU1MzYsIHVzaW5nICVkXG4iLAotCQkJV0RfVElNTyk7CisJCXByaW50ayhLRVJOX0lORk8gIndkdDogaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgIgorCQkJIjAgPCBoZWFydGJlYXQgPCA2NTUzNiwgdXNpbmcgJWRcbiIsIFdEX1RJTU8pOwogCX0KIAogCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDgsICJ3ZHQ1MDFwIikpIHsKQEAgLTYyNSwxNSArNjI1LDE0IEBACiAJCWdvdG8gb3V0aXJxOwogCX0KIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JcmV0ID0gbWlzY19yZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIndkdDogY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCi0JCQkJCQkJVEVNUF9NSU5PUiwgcmV0KTsKLQkJZ290byBvdXRyYnQ7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAid2R0OiBjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiAiCisJCQkJIm9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLCBURU1QX01JTk9SLCByZXQpOworCQkJZ290byBvdXRyYnQ7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKIAlpZiAocmV0KSB7CkBAIC02NDMsMjggKzY0MiwyNSBAQAogCQlnb3RvIG91dG1pc2M7CiAJfQogCi0JcmV0ID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICJXRFQ1MDAvNTAxLVAgZHJpdmVyIDAuMTAgYXQgMHglMDR4IChJbnRlcnJ1cHQgJWQpLiBoZWFydGJlYXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiV0RUNTAwLzUwMS1QIGRyaXZlciAwLjEwICIKKwkJImF0IDB4JTA0eCAoSW50ZXJydXB0ICVkKS4gaGVhcnRiZWF0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAogCQlpbywgaXJxLCBoZWFydGJlYXQsIG5vd2F5b3V0KTsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCXByaW50ayhLRVJOX0lORk8gIndkdDogRmFuIFRhY2hvbWV0ZXIgaXMgJXNcbiIsCisJaWYgKHR5cGUgPT0gNTAxKQorCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IEZhbiBUYWNob21ldGVyIGlzICVzXG4iLAogCQkJCSh0YWNob21ldGVyID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIikpOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCi0KLW91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiBvdXRtaXNjOgotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOworCWlmICh0eXBlID09IDUwMSkKKwkJbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwogb3V0cmJ0OgotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CiBvdXRpcnE6CiAJZnJlZV9pcnEoaXJxLCBOVUxMKTsKIG91dHJlZzoKIAlyZWxlYXNlX3JlZ2lvbihpbywgOCk7Ci0JZ290byBvdXQ7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogbW9kdWxlX2luaXQod2R0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMKaW5kZXggNjBlMjhkNC4uOTBlZjcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmICh3ZHQ5Nzdfc2V0X3RpbWVvdXQobmV3X3RpbWVvdXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl3ZHQ5Nzdfa2VlcGFsaXZlKCk7CiAJCS8qIEZhbGwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggOWI5MTYxNy4uNTY4OTJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTQ1LDYgKzQ1LDEzIEBACiAJCSAgICAgICBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KKwllcnIgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5fc3VzcGVuZDogc3lzZGV2X3N1c3BlbmQgZmFpbGVkOiAlZFxuIiwKKwkJCWVycik7CisJCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CisJCXJldHVybiBlcnI7CisJfQogCiAJeGVuX21tX3Bpbl9hbGwoKTsKIAlnbnR0YWJfc3VzcGVuZCgpOwpAQCAtNjEsNiArNjgsNyBAQAogCWdudHRhYl9yZXN1bWUoKTsKIAl4ZW5fbW1fdW5waW5fYWxsKCk7CiAKKwlzeXNkZXZfcmVzdW1lKCk7CiAJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKIAogCWlmICghKmNhbmNlbGxlZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy96b3Jyby96b3Jyby5jIGIvZHJpdmVycy96b3Jyby96b3Jyby5jCmluZGV4IGExNTg1ZDYuLmQ0NWZiMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvem9ycm8vem9ycm8uYworKysgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgWm9ycm8gYnVzICovCiAgICAgSU5JVF9MSVNUX0hFQUQoJnpvcnJvX2J1cy5kZXZpY2VzKTsKLSAgICBzdHJjcHkoem9ycm9fYnVzLmRldi5idXNfaWQsICJ6b3JybyIpOworICAgIGRldl9zZXRfbmFtZSgmem9ycm9fYnVzLmRldiwgInpvcnJvIik7CiAgICAgZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIoJnpvcnJvX2J1cy5kZXYpOwogICAgIGlmIChlcnJvcikgewogCXByX2VycigiWm9ycm86IEVycm9yIHJlZ2lzdGVyaW5nIHpvcnJvX2J1c1xuIik7CkBAIC0xNjcsNyArMTY3LDcgQEAKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSh6b3Jyb19maW5kX3BhcmVudF9yZXNvdXJjZSh6KSwgJnotPnJlc291cmNlKSkKIAkgICAgcHJfZXJyKCJab3JybzogQWRkcmVzcyBzcGFjZSBjb2xsaXNpb24gb24gZGV2aWNlICVzICVwUlxuIiwKIAkJICAgei0+bmFtZSwgJnotPnJlc291cmNlKTsKLQlzcHJpbnRmKHotPmRldi5idXNfaWQsICIlMDJ4IiwgaSk7CisJZGV2X3NldF9uYW1lKCZ6LT5kZXYsICIlMDJ4IiwgaSk7CiAJei0+ZGV2LnBhcmVudCA9ICZ6b3Jyb19idXMuZGV2OwogCXotPmRldi5idXMgPSAmem9ycm9fYnVzX3R5cGU7CiAJZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIoJnotPmRldik7CmRpZmYgLS1naXQgYS9maXJtd2FyZS8zY29tL3R5cGhvb24uYmluLmloZXggYi9maXJtd2FyZS8zY29tL3R5cGhvb24uYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhODNiZQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlLzNjb20vdHlwaG9vbi5iaW4uaWhleApAQCAtMCwwICsxLDI4MTkgQEAKKzoxMDAwMDAwMDU0NTk1MDQ4NEY0RjRFMDAwMjAwMDAwMDA5MDAwMDAwQjQKKzoxMDAwMTAwMDAwMDBGRkZGQ0I5OUIxRDQ0Q0I4RDA0QjMyMDJENEVFRTQKKzoxMDAwMjAwMDczN0UwQjEzOUJDMEFFRjQ0MDAxMDAwMEU4RkMwMDAwOUYKKzoxMDAwMzAwMDAwMDBGRkZGMzkwMDAwRUEwNTAwMDBFQTA0MDAwMEVBQzIKKzoxMDAwNDAwMDAzMDAwMEVBMDIwMDAwRUEwMTAwMDBFQTMyMDIwMEVBQ0UKKzoxMDAwNTAwMEM1MTQwMEVBMDcwMDJERTkwRTAwQTBFMTAwMTAwRkUxMzEKKzoxMDAwNjAwMEQwMjA5RkU1MTJGRjJGRTFGRUZGRkZFQTAxMDA4MEUwQjQKKzoxMDAwNzAwMDA0MjA4MUU0MDEwMDUwRTFGQ0ZGRkYxQTBFRjBBMEUxMzIKKzoxMDAwODAwMDAwQTBBMEUxMEVCMEEwRTEwMDAwQTBFM0E4MTA5RkU1NTEKKzoxMDAwOTAwMDAwMDA4MUU1QTQxMDlGRTUwMDAwODFFNTAxMTZBMEUzQzIKKzoxMDAwQTAwMDAwMDA5MUU1MDEwMDgwRTMwMDAwODFFNUQ3MDBBMEUzQjYKKzoxMDAwQjAwMDAwRjAyMUUxODhEMDlGRTVEQjAwQTBFMzAwRjAyMUUxMjIKKzoxMDAwQzAwMDdDRDA5RkU1RDIwMEEwRTMwMEYwMjFFMTc0RDA5RkU1NTEKKzoxMDAwRDAwMEQxMDBBMEUzMDBGMDIxRTE2Q0QwOUZFNTlCMTQwMEVCODAKKzoxMDAwRTAwMEQzMDBBMEUzMDBGMDIxRTE2MEQwOUZFNTYwMDA5RkU1MzAKKzoxMDAwRjAwMDYwMTA5RkU1NjAyMDlGRTVEQkZGRkZFQjVDMDA5RkU1NjQKKzoxMDAxMDAwMDVDMTA5RkU1MDAyMEEwRTNEN0ZGRkZFQjU0MDA5RkU1QzQKKzoxMDAxMTAwMDU0MTA5RkU1RDRGRkZGRUIwQTAwQTBFMTBCRjBBMEUxMzMKKzoxMDAxMjAwMEQzMTBBMEUzMDFGMDIxRTFENEZGRkZFQjNDQTA5RkU1NTkKKzoxMDAxMzAwMDFBRkYyRkUxQzZGRkZGRUExNTIxRkZGRjBDMDAxMDAwOTgKKzoxMDAxNDAwMDFDMDAxMDAwM0MzODAwODBGQzM3MDA4MEZDM0YwMDgwMjEKKzoxMDAxNTAwMDdDMzQwMDgwODAwRjAwMDA4MDMwMDA4MEFEREVBRERFOUEKKzoxMDAxNjAwMEIwQkIwMDAwMjRBQjIwNDA0ODI5MDAwMDI4MDUwMDgwRDcKKzoxMDAxNzAwMEJEQkEyMTQwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwQTkKKzoxMDAxODAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMDU4NTcwMDAwQzIKKzoxMDAxOTAwMDg2NEIwMDAwNjAwMUZGRkZCMEI1MDcxQzEyNEQwMDI0MjQKKzoxMDAxQTAwMDI4NjgwMDI4MUVEMDM4MUMxMDQ5MDRGMDdCRkQyOTY4RkYKKzoxMDAxQjAwMEMwNDYwODYwMDAyODE1RDAzODAxMEQ0OTQwMTgxOTIzQTEKKzoxMDAxQzAwMERCMDFDMDE4NDE2QjgwMjkwQ0QyMDEzMTQxNjMyODY4RTIKKzoxMDAxRDAwMEMxNjlDMDQ2Mjk2MDM5MDc0MTYwMDQ2MkM3NjJCMEJDOEEKKzoxMDAxRTAwMDA4QkMxODQ3MjAxQ0ZBRTdFODE3MDA4MEVFMDUwMDAwNUQKKzoxMDAxRjAwMEEwMUMwMDgwMDI0OTBBNjhDMDQ2QzI2MTA4NjA3MDQ3QkUKKzoxMDAyMDAwMEU4MTcwMDgwNzA0NzAwMDA3MDQ3MDAwMDcwNDcwMDAwNEEKKzoxMDAyMTAwMDAwMDAwRkUxMDAxMEEwRTFDMDEwODFFMzAxRjAyMUUxMzYKKzoxMDAyMjAwMDFFRkYyRkUxMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxOTIKKzoxMDAyMzAwMEMwMDA4MEUzMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxOEMKKzoxMDAyNDAwMEMwMDBDMEUzMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxM0MKKzoxMDAyNTAwMDQwMDA4MEUzMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxRUMKKzoxMDAyNjAwMDgwMDAxMEUzODAwMDgwRTMwMEYwMjFFMTAwMDAwMDEyMzQKKzoxMDAyNzAwMDFFRkYyRkUxMDAwMDUwRTMwMDAwMEZFMTgwMDBDMDEzREIKKzoxMDAyODAwMDAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMTgwMDBDMEUzM0MKKzoxMDAyOTAwMDAwRjAyMUUxMUVGRjJGRTE5MTAwMDBFMDFFRkYyRkUxQTEKKzoxMDAyQTAwMDAxMjA4MEUwMDEwMDgwRTAxRUZGMkZFMTgwQjUwODRGQjMKKzoxMDAyQjAwMDY0MjgwNEQzNjQyMDM4NjMwMDIwQzA0MzAzRTAzODYzMUIKKzoxMDAyQzAwMDA0NDkwNUYwMDFGQjc4NjNCODYzODBCQzA4QkMxODQ3OUIKKzoxMDAyRDAwMDY4MEUwMDgwODgxMzAwMDA4MEI0MTA0QjAwMjIxRjZCNTIKKzoxMDAyRTAwMDY0MkYwM0QyMDk2ODA5Njg0OTA4MDJEMjEwMUM4MEJDMzcKKzoxMDAyRjAwMDcwNDcxOTFDREI2QjRGNkJCQjQyMDVEMjQwNjgwMDA0OTIKKzoxMDAzMDAwMDAwMEMxODE4Qzg2M0YxRTc0MTY4MDU0QjE5NDM0MTYwQjgKKzoxMDAzMTAwMDA0NDhDMTZCMDEzMUMxNjMwMjIwRThFNzY4MEUwMDgwMjgKKzoxMDAzMjAwMDAwMDAwMDgwMEMyQjAwODA5MEI1MDcxQzE1NEMwMDIwQUQKKzoxMDAzMzAwMDIxNkI2NDI5MEJEMkI5NkU0OTA4MDhEMzIxNkNBMjZCREEKKzoxMDAzNDAwMDkxNDIwN0QyRkExRDM5MzI1MjhCODkxODIxNjQ5MEJDMzAKKzoxMDAzNTAwMDA4QkMxODQ3Nzg2QTM5NkJDMDQ2NDg2MjM4NkIwMkYwQUYKKzoxMDAzNjAwMDJERkUzODFDMDJGMEU4RkEwMTIwQkIyMzFCMDFFMTE4MjYKKzoxMDAzNzAwMEM4NzMwNTQ5MEE2QzEyMTgwQTY0MDQ0OThBNkQxMjE4NzgKKzoxMDAzODAwMDhBNjVFNEU3NjgwRTAwODAwQzJCMDA4MEE0MkEwMDgwQjgKKzoxMDAzOTAwMDgwQjQwQTQ4QzA2RDAyMjMxODQwMDk0QTAwMjEwMDI4OTEKKzoxMDAzQTAwMDAzRDBEMTYzMTE2NDgwQkM3MDQ3MDY0ODA3Njg3QjFDOEEKKzoxMDAzQjAwMDAzNjAwQTJGRjdEMzAxNjBGM0U3MDAwMEE0MkEwMDgwNEUKKzoxMDAzQzAwMDY4MEUwMDgwRTAwMTAwODA3MDQ3MDIwNDEyMEMwMDBDRUYKKzoxMDAzRDAwMDEwMTgwQTA0MTIwQzA5MEM1MTE4MDgxODAxMEMwNUQwNDkKKzoxMDAzRTAwMDAxMDQwOTBDMDAwQzA4MTgwMTBDRjlEMTAwMDQwMDBDRTAKKzoxMDAzRjAwMDcwNDc4MEI0MDAyMjAwMjkxOEQwNEYwODdCMUUwMDJGQzAKKzoxMDA0MDAwMDA2RDAwNzg4QkExODAyMzAxRjFDMDEzQjAwMkZGOEQxMTQKKzoxMDA0MTAwMDQ5MDgwM0QzMDA4ODAwMDYwMDBFODIxODEwMEMwNUQwOEUKKzoxMDA0MjAwMDEwMDQwMDBDMTEwQzQyMTgxMDBDRjlEMTEwMDQwMDBDMkYKKzoxMDA0MzAwMDgwQkM3MDQ3ODBCNTgzODlDNzg5RkIxODA3OEFGQjE4ODEKKzoxMDA0NDAwMDQ3OEFGQjE4NDA3QTAwMDJDNzE4MzgwQzA1RDAzODA0RDgKKzoxMDA0NTAwMDAwMEMzQjBDQzcxODM4MENGOUQxMDgxQzExMUNGRkY3MTUKKzoxMDA0NjAwMEM4RkYwMTFDMzgxQ0ZGRjdCMEZGODBCQzA4QkMxODQ3NTAKKzoxMDA0NzAwMDkwQjUwMjIzODI2ODFBNDAwMDI3MDAyQTBGRDAwQTRBNEEKKzoxMDA0ODAwMDkzNjkwMTMzOTM2MTBBNjg4QjY4OUExODAwNjgxQzE4OTUKKzoxMDA0OTAwMDU3ODEwOTY5MTAxQ0ZGRjdBQ0ZGQzA0MzYwODEzODFDMEQKKzoxMDA0QTAwMDkwQkMwOEJDMTg0NzAwMDAwQzJCMDA4MDkwQjUwNDIzQkEKKzoxMDA0QjAwMDgyNjgxQTQwMDAyNzAwMkExMUQwNEE2ODUyMDkwRUQzRDgKKzoxMDA0QzAwMDA5NEExMzZBMDEzMzEzNjJDQjY4MDI2ODlDMTgwMTIzM0UKKzoxMDA0RDAwMDlCMDcwODNBMUE0MzEyNjgwMEYwMkVGODIwODIzODFDNTUKKzoxMDA0RTAwMDkwQkMwOEJDMTg0NzAwMDAwQzJCMDA4MDkwQjU4MDIzRkUKKzoxMDA0RjAwMDgyNjgxQTQwMDAyNDAwMkExNUQwNEE2ODkyMDkxMkQzNTMKKzoxMDA1MDAwMDBCNEFEMzY5MDEzM0QzNjFDQjY4MDI2ODlGMTgwMTIzN0EKKzoxMDA1MTAwMDlCMDcwODNBMUE0MzEyNjgwMEYwMEVGODAwMjgwMEQxMzEKKzoxMDA1MjAwMDA0NDhDMDQ2Rjg4MDIwMUM5MEJDMDhCQzE4NDcwMDAwNTYKKzoxMDA1MzAwMDBDMkIwMDgwRkZGRjAwMDBCMEI1MTQxQzA1MUMwRjFDMjUKKzoxMDA1NDAwMDM4NjlCOTY4NDExODM4NjhGRkY3NTNGRkMwNDMwMTA0QTAKKzoxMDA1NTAwMDA5MEMyMDFDRkZGNzM5RkYwNDFDQjg2ODc5Njk0MDE4QTIKKzoxMDA1NjAwMDY5Njg4ODQyMENEMjJBNjgxMjE4MDkxQTEwMUMwMEYwMTcKKzoxMDA1NzAwMDA1RjlDMDQzMDEwNDA5MEMyMDFDRkZGNzI2RkYwNDFDRTkKKzoxMDA1ODAwMEUwNDMwMDA0MDAwQ0IwQkMwOEJDMTg0NzgwQjUwNzFDNTEKKzoxMDA1OTAwMEI4NkJDMDA4MUFEM0I4NkFGOTZCNDAxODc5NkMwMEYwRDAKKzoxMDA1QTAwMEVERjhDMDQzMDEwNDA5MEMwQTQ4MDdEMDIwMjNCOTY5QkIKKzoxMDA1QjAwMDE5NDNCOTYxMDE2QjAxMzEwMTYzMDdFMEZGMjMwMTMzODYKKzoxMDA1QzAwMEI5NjkxOTQzQjk2MTQxNkEwMTMxNDE2MjAwMjA4MEJDQjcKKzoxMDA1RDAwMDA4QkMxODQ3MEMyQjAwODA4MEI1MDcxQ0I4NkI0MTA5N0MKKzoxMDA1RTAwMDFDRDNDMDA4MUFEM0Y4MUQzOTMwMDA3QjA2MjgxNUQxNUEKKzoxMDA1RjAwMDM4MUMwMEYwNTNGODAxMUMwQTQ4MDdEMDQwMjNCOTY5QTEKKzoxMDA2MDAwMDE5NDNCOTYxODE2QjAxMzE4MTYzMDdFMDAxMjM5QjAyQ0EKKzoxMDA2MTAwMEI5NjkxOTQzQjk2MUMxNkEwMTMxQzE2MjAwMjA4MEJDNjYKKzoxMDA2MjAwMDA4QkMxODQ3MEMyQjAwODBCMEI1MDcxQ0I4NkI4MTA5QkIKKzoxMDA2MzAwMDJDRDNDMDA4MkFEM0Y4MUQzOTMwMDA3QjExMjgyNUQxQ0UKKzoxMDA2NDAwMEI4NkEzOTZDNDAxODAxMjM5QjA3MDYzMDE4NDMwMDY4Q0MKKzoxMDA2NTAwMDA1MDQyRDBDMEY0QzExRDAzODFDMDBGMDFGRjgwMDI4OTkKKzoxMDA2NjAwMDBDRDBBODQyMDJEMTBDNEI5ODQyMDdEMDgwMjNCODY5MjUKKzoxMDA2NzAwMDE4NDNCODYxNjA2QjAxMzA2MDYzMDdFMDAxMjM1QjAyREYKKzoxMDA2ODAwMEI4NjkxODQzQjg2MUEwNkEwMTMwQTA2MjAwMjBCMEJDMEMKKzoxMDA2OTAwMDA4QkMxODQ3MEMyQjAwODBGRkZGMDAwMEYwQjVGRkIwMkUKKzoxMDA2QTAwMDk5QjAwNDFDRTA2QjYxNkMwOTE4MDNBQTg1MThBMzZBNTEKKzoxMDA2QjAwMDAwMjA4QTA4MDEzMjk3OTIwN0QwODIwMDlGNTgwM0FFMkIKKzoxMDA2QzAwMEI3NTA5NzlBMDEzMDgyNDJGN0Q4NjA2QTAxMjM5QjA3OUUKKzoxMDA2RDAwMDA0MzAxODQzMDA2OEMwNDYwMjkwMDJBRjNGODgwM0E4NjgKKzoxMDA2RTAwMEZGRjc4N0ZFQzA0MzAxMDQwOTBDMzgxQ0ZGRjc2REZFQkQKKzoxMDA2RjAwMDA3MUNFMDZCQTE2QzQwMTg2MTZBMDEyMzlCMDcwODMxNUQKKzoxMDA3MDAwMDE5NDMwOTY4QzA0NjAxOTEwMUE5MDk4ODAxMzE4ODQyNEQKKzoxMDA3MTAwMDBDRDJBMjZBMTIxODA5MUExMDFDMDBGMDJGRjhDMDQzNUMKKzoxMDA3MjAwMDAxMDQwOTBDMzgxQ0ZGRjc1MEZFMDcxQ0E4ODlFOTg5NTEKKzoxMDA3MzAwMDA4MTgyOThBMDgxODY5OEEwODE4Njk3QTA5MDIwODE4QTUKKzoxMDA3NDAwMEExNkM2MjZDODkxQTBBMDQxMjBDMTEwMjEyMEExMTQzN0MKKzoxMDA3NTAwMDA5MDQwOTBDMDkxODA4MEMwNUQwMDgwNDAwMEMwOTBDNDAKKzoxMDA3NjAwMDQxMTgwODBDRjlEMTM4MUNGRkY3MkZGRUMwNDMwMDA0RDQKKzoxMDA3NzAwMDAwMEM3RkIwMTlCMEYwQkMwOEJDMTg0N0IwQjQwMDIyMjAKKzoxMDA3ODAwMDAwMjkyRUQwODMwNzlCMEZEQzAwNDcxODA0MjVFRjFCQTAKKzoxMDA3OTAwMEJGMDdCRjBGRkYwMDgwMDg4MDAwNTkxODAzMzE4OTA4ODgKKzoxMDA3QTAwMDREMUUwMkM4RTE0MEExNDA2QjFFMDAyRDA5RDAwQzA0NzMKKzoxMDA3QjAwMDI0MENBMjE4MDkwQzhBMTgwMkM4MUMxQzAxM0IwMDJDMkUKKzoxMDA3QzAwMEY1RDFCOTQwMDgxQ0Y4NDAwMTA0MDkwQzg5MTgwMDBDNDcKKzoxMDA3RDAwMDQyMTgxMDBDMDVEMDEwMDQwMDBDMTEwQzQyMTgxMDBDMUIKKzoxMDA3RTAwMEY5RDExMDA0MDAwQ0IwQkM3MDQ3MDAwMDkwQjQwMDIwOTgKKzoxMDA3RjAwMDAxMjcxMTQ5NDIwMDEyMThEMjAwNTMxODlDNjgwMTIzQTYKKzoxMDA4MDAwMDlCMDcyMzQzMUI2ODFCMDMxQjBCOEE1ODEyMDMxMjBCMDUKKzoxMDA4MTAwMDkzNDIwQ0QxMDEzMDA0MjhFQ0QzMDg0OEMwNkEwMTAzOEMKKzoxMDA4MjAwMDA5MEIwNzQ4MDA2RjAwMDMwMDBCODE0MjAyRDAzODFDRkYKKzoxMDA4MzAwMDkwQkM3MDQ3MDAyMEZCRTdBODAzMDA4MDAwNDAxNDQwRjQKKzoxMDA4NDAwMDY4MEUwMDgwOThCNDE0NEFDMDQ2MDA5MjgzMDAxMzQ4OTIKKzoxMDA4NTAwMEMwNTgwNzAzM0YwQjEyNDhDMDU4MDIwMzEyMEIxMTQ4M0YKKzoxMDA4NjAwMEMwNTgwMDAzMDAwQjEwNENFNDU4MDEyMzlCMDcyMzQzOUUKKzoxMDA4NzAwMDFCNjg5QjAwQ0MwMDAxMjE5ODQyMDFEMTA4MUMwOUUwQjMKKzoxMDA4ODAwMDk4NDIwM0Q5MTAxQURBMUI4MDE4MDBFMDE4MUE4NDQyMjMKKzoxMDA4OTAwMEY0RDMwMDIwOThCQzcwNDc1NTU1NTU1NTIwMDQwMDgwNkUKKzoxMDA4QTAwMDI4MDQwMDgwMDgwNDAwODAxODA0MDA4MDgwQjQxMzA0MjkKKzoxMDA4QjAwMDAwRDAwMTNBODAwMDBCMUMxMzQ5MEY1OEMwNDYzQjYwMjIKKzoxMDA4QzAwMDBCNThDMDQ2NUE2MDBBNTgwODMyMTA0QjFCNTg5QTQyQkYKKzoxMDA4RDAwMDAxRDMwRjRBMTI1ODBGNEIxRjU4MDEyMzlCMDczQjQzNkMKKzoxMDA4RTAwMDFCNjg5QjAwMTcwMzNGMEI5RjQyMDZEMTBBNDhDMTY4NTMKKzoxMDA4RjAwMDAxMzFDMTYwMDEyMDgwQkM3MDQ3MDg0QjFCNThDMDQ2QzUKKzoxMDA5MDAwMDFBNjAwQTUwMDAyMEY2RTcwODA0MDA4MDI4MDQwMDgwREUKKzoxMDA5MTAwMDIwMDQwMDgwMTgwNDAwODBBMDgyMjA0MDEwMDQwMDgwODEKKzoxMDA5MjAwMEZGNUYyREU5NDhGRUZGRUIwMUI2QTBFMzAxQjE4QkUyQ0EKKzoxMDA5MzAwMDAyOEFBMEUzMDE3QUEwRTMwMUE5QTBFMzAxNTZBMEUzQTMKKzoxMDA5NDAwMEM4NjA5RkU1Qzg5MDlGRTUxNDQwOUJFNTAwMDA1NEUzMTQKKzoxMDA5NTAwMDJDMDAwMDBBMDMwQTE0RTMxMTAwMDAwQTBDMDA5NkU1QkIKKzoxMDA5NjAwMDAwMDA1MEUzMjEwMDAwMEEwMTBBMTRFMzA1MDAwMDBBMTgKKzoxMDA5NzAwMDFDMDA5NkU1MDEwQUMwRTMxQzAwODZFNTFDMDA4NUU1MjUKKzoxMDA5ODAwMDE0NzA4NUU1MDYwMDAwRUEwMjBBMTRFMzA0MDAwMDBBNzgKKzoxMDA5OTAwMDFDMDA5NkU1MDIwQUMwRTMxQzAwODZFNTFDMDA4NUU1MDQKKzoxMDA5QTAwMDE0ODA4NUU1MDEwOTE0RTMwNDAwMDAwQTFDMDA5NkU1QTMKKzoxMDA5QjAwMDAxMDlDMEUzMUMwMDg2RTUxQzAwODVFNTE0QTA4NUU1NUYKKzoxMDA5QzAwMDAyMDAxNEUzNDAwMDAwMUIwMTAwMTRFMzU0MDAwMDFCNkMKKzoxMDA5RDAwMDAyMEIxNEUzNjcwMDAwMUIwMTBCMTRFMzIwMDAwMDFCNTMKKzoxMDA5RTAwMDE4MDA5OUU1MDEwMDgwRTIxODAwODlFNUQ1RkZGRkVBQ0IKKzoxMDA5RjAwMDFDMDA5NkU1MDEwQUMwRTMxQzAwODZFNTFDMDA4NUU1QTUKKzoxMDBBMDAwMDE0NzA4NUU1RTFGRkZGRUFGRjVGQkRFODA0RjA1RUUyRjgKKzoxMDBBMTAwMDY4MEUwMDgwMDg4MzIwNDAxMDEwMUZFNTE0MzA5MUU1MTcKKzoxMDBBMjAwMDAwMjBDM0UxMTQyMDgxRTUwMTE2QTBFMzBDMjA4MUU1M0MKKzoxMDBBMzAwMDBCMTJBMEUzMDAwMDgxRTUxODEwOUZFNUIwMjREMUUxN0UKKzoxMDBBNDAwMDAxMjA4MkUyQjAyNEMxRTEzQzIwOTFFNTAwMDA4MkUxNzYKKzoxMDBBNTAwMDNDMDA4MUU1MUVGRjJGRTFBMDgyMjA0MEZGRkZGRkVBNUUKKzoxMDBBNjAwMEZFRkZGRkVBMDEwQkEwRTMwMTE2QTBFMzE0MDA4MUU1RkQKKzoxMDBBNzAwMDAwMUE4MUUxMjQyMDkxRTU3MDAwMUZFNTAwMDAwMDAwQ0MKKzoxMDBBODAwMDI0MjA4MEU1MjgxMDkxRTUwMDAwMDAwMDI4MTA4MEU1NzIKKzoxMDBBOTAwMDJDMjA5MEU1MDEyMDgyRTIyQzIwODBFNTNGMDAwMUUyM0QKKzoxMDBBQTAwMDNGMDA1MEUzMUVGRjJGMTExODAwOUZFNTAwMTA5MEU1NTYKKzoxMDBBQjAwMDAxMTA4MUUyMDAxMDgwRTUwMjE4QTBFMzBCMDJBMEUzMjAKKzoxMDBBQzAwMDAwMTA4MEU1MUVGRjJGRTEzMDA0MDA4MDAxMDZBMEUzNDYKKzoxMDBBRDAwMDAxMDE4MEUyMDAxMDkwRTUwMTA4MTFFMzBCMTBBMEUzOTIKKzoxMDBBRTAwMDAyMTk4MUUyMDUwMDAwMUEwMDIwOTBFNTQyMjhCMEUxRDkKKzoxMDBBRjAwMDA1MDAwMDFBMDAwMDkwRTUwMjBDMTBFMzAyMDAwMDBBNTUKKzoxMDBCMDAwMDA2MDdBMEUzNEMxMTgwRTUwMzAwMDBFQTBDMDA5RkU1MTYKKzoxMDBCMTAwMDAwMDAwMDAwNDAxMDgwRTVGRkZGRkZFQUZFRkZGRkVBNTMKKzoxMDBCMjAwMDAwMDAwMDgwMDEwNkEwRTMwMTAxODBFMjAwMTA5MEU1RDIKKzoxMDBCMzAwMDAxMDgxMUUzMEMxMEEwRTMwMjE5ODFFMjA1MDAwMDFBN0MKKzoxMDBCNDAwMDAwMjA5MEU1NDIyOEIwRTEwNTAwMDAxQTAwMDA5MEU1ODEKKzoxMDBCNTAwMDAyMEMxMEUzMDIwMDAwMEEwNjA3QTBFMzRDMTE4MEU1MzYKKzoxMDBCNjAwMDAzMDAwMEVBNEMwMDFGRTUwMDAwMDAwMDQwMTA4MEU1OTMKKzoxMDBCNzAwMEZGRkZGRkVBRkVGRkZGRUEwMjFCQTBFMzAxMDZBMEUzN0UKKzoxMDBCODAwMDE0MTA4MEU1MUVGRjJGRTE4MDIxMUZFNTE0MzA5MkU1NEYKKzoxMDBCOTAwMDAwMDAwMDAwMDAzMDgwRTUxQzAwOTJFNTAwMDAwMDAwMkQKKzoxMDBCQTAwMDAwMDA4MUU1MDAxMEEwRTMxNDEwODJFNTAxMDZBMEUzMzcKKzoxMDBCQjAwMDFDMTA4MkU1MEMxMDgwRTUxQzEwOTJFNTAwMDAwMDAwN0UKKzoxMDBCQzAwMDFDMTA4MEU1MUVGRjJGRTFDMDIxMUZFNTAwMDAwMDAwODIKKzoxMDBCRDAwMDFDMTA4MkU1MDExNkEwRTMxNDAwODJFNTBDMDA4MUU1RkIKKzoxMDBCRTAwMDFDMDA5MkU1MDAwMDAwMDAxQzAwODFFNTFFRkYyRkUxQzMKKzoxMDBCRjAwMDgwQjUwRjFDMzgxQzAwRjAxN0Y4MDAyODAyRDAzODFDRjQKKzoxMDBDMDAwMDAwRjA5MkY4MDAyMDgwQkMwOEJDMTg0NzgwQjUwRjFDOEIKKzoxMDBDMTAwMDM4MUMwMEYwMDlGODAwMjgwMkQwMzgxQzAwRjA4NEY4RDUKKzoxMDBDMjAwMDAwMjA4MEJDMDhCQzE4NDdGMEI0MDc2ODNBNzhEMjA3QTcKKzoxMDBDMzAwMEQyMEYwMDI0MDAyQTAzRDBGRjIyMDEzMjQyNjAwMEUwREMKKzoxMDBDNDAwMDQ0NjAzQTdCN0I3QjFCMDIxQTQzODEyQTA4RDEwMTIzMzMKKzoxMDBDNTAwMDVCMDI0MjY4MUE0MzQyNjAwNDIyQkYxODgyNjAwMEUwQ0YKKzoxMDBDNjAwMDg0NjAzQTdCN0I3QjFCMDIxQTQzMDgyQTA2RDEwNjIzNDkKKzoxMDBDNzAwMDQxNjgxOTQzNDE2MDgxNjgwRTMxM0NFMEMxMjNEQjAwQ0IKKzoxMDBDODAwMDlBNDIwM0QxNDE2ODI0NEIxOTQzM0VFMDIzNEI5QTQyRDgKKzoxMDBDOTAwMDA0RDEwMTIzMUIwMzQxNjgxOTQzMzZFMDEzMDIxMjBBRjEKKzoxMDBDQTAwMDEyMDYxMjBFMUE0MzEyMDQxMjBDMkUzQTFDNEI5QTQyRDAKKzoxMDBDQjAwMDJERDgwMTI1NDI2ODE1NDM0NTYwQkE3QkZCN0IxQjAyOUEKKzoxMDBDQzAwMDFBNDMxODRCOUE0MjIyRDFGQjFEMDkzMzQ0Q0I5QjA3OTAKKzoxMDBDRDAwMERCMEVEQTQwNUI0MjIwMzM5RTQwMTY0MzAzMkUxOEQxRDAKKzoxMDBDRTAwMDM5N0Q3QjdEMUIwMjE5NDMwODI5MDdEMTA0MjEyOTQzNDMKKzoxMDBDRjAwMDQxNjA4MTY4MTYzMTgxNjAwMTIxMEFFMEMxMjNEQjAwNzcKKzoxMDBEMDAwMDk5NDIwNEQxMDEyMTg5MDMyOTQzNDE2MDAwRTA4NDYwQjQKKzoxMDBEMTAwMDAwMjEwODFDRjBCQzcwNDcwMjQwMDAwMDgxODAwMDAwRTgKKzoxMDBEMjAwMEFFMDUwMDAwQUFBQTAwMDA4MEI0NDI2OEQxMDgzRkQzRjMKKzoxMDBEMzAwMDAxNjg4MzY4NTkxODAyMzk4Rjc4M0YwNzNGMEYwNTJGRTQKKzoxMDBENDAwMDAzRDFEQTFEMEQzMkMyNjAwNUUwQkYwMERCMTlDMzYwQkMKKzoxMDBENTAwMDA4MjMxQTQzNDI2MDhBNzgxMjA3MTIwRjkyMDAwMjYxMzgKKzoxMDBENjAwMDBBNzk0Qjc5MUIwMjFBNDMxMzAyMTIwQTEyMDYxMjBFNTkKKzoxMDBENzAwMDFBNDMxMjA0MTIwQzQyNjFDQTdBMDYyQTAzRDExMDIzQzQKKzoxMDBEODAwMDQyNjgxQTQzMTBFMDExMkEwM0QxMjAyMzQyNjgxQTQzMTMKKzoxMDBEOTAwMDBBRTAzMzJBMDNEMTQwMjM0MjY4MUE0MzA0RTAzMjJBOEUKKzoxMDBEQTAwMDAzRDE4MDIzNDI2ODFBNDM0MjYwQzk3QUMwNDYwMTc2NjMKKzoxMDBEQjAwMDgwQkM3MDQ3MEE3OEMwNDYwMjYwNEI3ODFCMDIxQTQzMTkKKzoxMDBEQzAwMDAyNjA4Qjc4MUIwNDFBNDMwMjYwQzk3ODA5MDYxMTQzM0MKKzoxMDBERDAwMDAxNjA3MDQ3ODBCNTA3MUM0ODY4ODAwOTI2RDNCODZBNEYKKzoxMDBERTAwMEM5Njg0MDE4MDEyMzlCMDcwMjMwMTg0MzAwNjgwMDA0QkIKKzoxMDBERjAwMDAwMEMxMTIzOUIwMjk4NDIxOEQxNzg2QTM5NkJDMDQ2QzcKKzoxMDBFMDAwMDQ4NjIzODZCMDJGMERBRjgzODFDMDFGMDk1RkQwMTIwRDkKKzoxMDBFMTAwMDA3NDlDMDQ2Qzg3MzA3NDk0QTZDMTIxODRBNjQwNjQ5MTQKKzoxMDBFMjAwMDhBNkQxMjE4OEE2NTgwQkMwOEJDMTg0NzAwMjBGQUU3NTIKKzoxMDBFMzAwMDE4MUEwMDgwMEMyQjAwODBBNDJBMDA4MDgxMDcxOUQwOEEKKzoxMDBFNDAwMDgwMDg4MDAwMDEyMzlCMDcwMTFEMTg0MzAwNjgxOTQzOTcKKzoxMDBFNTAwMDA5NjgwMjAyMTIwRTEyMDYwMDBBRkYyMzFCMDQxODQwNDIKKzoxMDBFNjAwMDEwNDMwQTBBMTIwNjEyMEUxMDQzMDkwMjFCMEExOTQwMDcKKzoxMDBFNzAwMDA4NDM3MDQ3MDEyMzlCMDcxODQzMDA2ODAxMDYwMjAyREMKKzoxMDBFODAwMEZGMjMxQjA0MUE0MDExNDMwMjBBMUIwQTFBNDAxMTQzOTQKKzoxMDBFOTAwMDAwMEUwODQzRURFNzAwMDBGMEI1MDQyMzgxNkIxOTQwMTQKKzoxMDBFQTAwMDAwMjIwMDI5NDZEMEM3MUQzOTM3Mzk3QjMzMjkwMUQwQUMKKzoxMDBFQjAwMDMyMjkzRkQxMDE2QkMwNDY0QTY1QzQxRDJEMzRDRDFEN0EKKzoxMDBFQzAwMDJEMzUwMDIyOTMwMEU2NThDMDQ2RUU1MDAxMzIwNzJBMjUKKzoxMDBFRDAwMEY4RDM4MjZBQzA0NjRBNjM4MjZBQzA0NjhBNjI3QThCQzUKKzoxMDBFRTAwMENCMUQzOTMzNUE4MzQwNkFDMDQ2NDg2MjEyNDgwMTI3RjUKKzoxMDBFRjAwMDQyNjgwMDJBMTBEMUMyNjgwMDJBMTNEMTQyNjkwMDJBMzAKKzoxMDBGMDAwMDBERDEwMTYxQzE2MDAxNkEwMjI5MDJEMzIwMzAwNzcxNEQKKzoxMDBGMTAwMDBDRTAwMEYwMTNGODA5RTBDMjY4MDAyQTAyRDEwMTYxNzgKKzoxMDBGMjAwMEMxNjAwM0UwMDI2OUMwNDY1MTY1MDE2MTM4MUNGMEJDMzQKKzoxMDBGMzAwMDA4QkMxODQ3MTAxQ0ZBRTc2QzA2MDA4MDgwQjUxRTQ5RjMKKzoxMDBGNDAwMDAwMjJDQjY4MDAyQjM0RDBDODFERjkzMDgzNjJDQjY4RjcKKzoxMDBGNTAwMDlCNkFDMDQ2QzM2MkNGNjk3QjAwREYxOTdGMDIxNzRCRDMKKzoxMDBGNjAwMEZGMThGRjM3NjUzNzgzNjMwNzYzQ0IxREZGMzM1QTMzQTEKKzoxMDBGNzAwMDFBNzJDQjY5MDAyQjAxRDBDQTYxMDFFMDAxMjNDQjYxNTkKKzoxMDBGODAwMDBGMUNDOTY4NDk2QTA5ODkwMTMxNDE2M0Y4MURGRjMwQTYKKzoxMDBGOTAwMDNBMzA0MjYwMDI4MjgyNjBDMjYwMzgxQzAwRjBDRUZBQjEKKzoxMDBGQTAwMDM4NkEwMTMwMzg2MjM4MUMwMEYwMEFGODgwQkMwOEJDOEUKKzoxMDBGQjAwMDE4NDcxMDFDRkFFNzAwMDA2QzA2MDA4MEFDQUIyMDQwMUMKKzoxMDBGQzAwMEYwQjUwNzFDRjkxREY5MzE4ODZBQzIxRDJEMzIwMTIzQzUKKzoxMDBGRDAwMDlCMDcwODMyMUE0M0M4NkExMjY4MTIwNDEyMEM4MDE4NjAKKzoxMDBGRTAwMDgyNzlDMzc5MUIwMjFBNDMxMzAyMTIwQTEyMDYxMjBFRTcKKzoxMDBGRjAwMDFBNDMxMjA0MTIwQzAyMzg5MjA0OTIwQzAwMjYyNTRENUEKKzoxMDEwMDAwMEVDMURGRjM0M0EzNDAwMkEwNEQwMjA4QTAxMjM5QjAyQ0QKKzoxMDEwMTAwMDE4NDMyQkUwMDEyMzlCMDdDMjFEMEQzMjFBNDMxMjY4QUYKKzoxMDEwMjAwMDEyMDQxMjMwMTg0MzAwNjgwMDA0MDAwQzEwNDMwMzFDMjMKKzoxMDEwMzAwMEY4MURGRjMwNEEzMDgyNzhDODZCMTkxQzAyRjAwMkY4QTQKKzoxMDEwNDAwMDAwMjgwNERBMjA4QUZGMjMwMTMzMTg0MzBFRTBGOTFEM0IKKzoxMDEwNTAwMEZGMzEzQTMxMDg2MDAxMDQwOTBDMzgxQzAwRjAxQ0Y4MUIKKzoxMDEwNjAwMDAwMjgxNEQxMjA4QTAxMjM1QjAyMTg0MzIwODIyMThBQTAKKzoxMDEwNzAwMDM4MUMwMEYwQTJGQkU4NjgwMTIzOUIwNzU0MzAxODQzOUEKKzoxMDEwODAwMDAwNjhDMDQ2RTg2MDMwMUNGMEJDMDhCQzE4NDcwMTIwNkUKKzoxMDEwOTAwMEZBRTcwMDAwNkMwNjAwODBGOEI1MDcxQ0ZDMURGOTM0NjcKKzoxMDEwQTAwMEEwNkJBNjZBQzUxRDBEMzUzODQ4QzA2QTRCMDA1OTE4OUIKKzoxMDEwQjAwMDQ5MDE0MjE4MDEyMDgwMDcxMDQzMDA2ODAwMDQwMDBDMTkKKzoxMDEwQzAwMDAwOTAwMTIzOUIwN0QwMUQwNTMwMTg0MzAwNjgzODFDOTEKKzoxMDEwRDAwMDI5MUMwMEYwQzJGQUE4ODg0MTA3MDFEMDAwMjA1MUUwODUKKzoxMDEwRTAwMDI5ODkwOTE4NjA2QjgxNDJGOEQ4Njk4OUVBODg4OTE4Q0EKKzoxMDEwRjAwMDgxNDJGM0Q4MDA5ODAxMjgyNUQxRTA2QUYxNkI0MDE4QUQKKzoxMDExMDAwMDcxNkNGQTFEQ0QzMjAxRjAzM0Y5RkExREZGMzIzQTMyMUIKKzoxMDExMTAwMEUwNkE1MTY5NDAxOEMzMUQwMzMzMDAyMDgxMDA1RTU4MDYKKzoxMDExMjAwMEM5MTlGRjMxMDEzMTRFNjEwMTMwMDQyOEY2RDNFMDZBNUMKKzoxMDExMzAwMDUxNjk0MDE4QzExRDA1MzEwMDIwMDAyMjQzMDBDQTUyRTgKKzoxMDExNDAwMDAxMzAwNjI4RkFEMzI5MUMxMTRBMDAyMEZGRjdBRUZCMTQKKzoxMDExNTAwMDAxMjI1MjA0NjA2QjAyNDMwMTIwMjE2QkZGRjdBNkZCQzIKKzoxMDExNjAwMDAxMjI1MjA0NjA2QjAyNDMwMDIwRTE2QUZGRjc5RUZCRkMKKzoxMDExNzAwMEExNkIwODRBMDEyMEZGRjc5OUZCMDMyMDA2NDlDMDQ2RUUKKzoxMDExODAwMDQ4NjIwMTIwRjhCQzA4QkMxODQ3MDAwMDRDMkEwMDgwQzcKKzoxMDExOTAwMDU0MDAwMzAwMTQwMDBGMDA2QzA3MDA4MEYwQjU4REIwMDAKKzoxMDExQTAwMDAwMjBCNTRBRDUxREY5MzU2ODYyMDEyMDAwMDVCMzQ5MTQKKzoxMDExQjAwMEMwNDYwODYwQTg2QUM0MUQyRDM0QjE0OEMwNkFENzFENTYKKzoxMDExQzAwMEZGMzczQTM3Mzk2ODRCMDA1OTE4NDkwMTQwMTgwMTIzNTUKKzoxMDExRDAwMDlCMDdDMTFEMDUzMTE5NDMwOTY4MDgzMDE4NDMwMDY4OTEKKzoxMDExRTAwMEMwNDYwOTkwRkYyMzFCMDIxODQwMDAwQTBBOTAwQTk4ODMKKzoxMDExRjAwMEE0NEUwMTI4NTlEMTI4NkJBMjY4ODAxOEEyNEEyMTY5RkYKKzoxMDEyMDAwMDA5MDQwOTBDMDFGMDI2RjkyODZCNzk2OTQwMThDMTFEMDEKKzoxMDEyMTAwMDA1MzEwMDIwODIwMDk4NEJEMzE4RkYzMzAxMzM1QjY5RkUKKzoxMDEyMjAwMEMwNDY4QjUwMDEzMDA0MjhGNEQzMDAyMDMxMUM4MjAwQ0EKKzoxMDEyMzAwMDU2MTgwMTIzOUIwNzMzNDMxQjY4MDRBRUIzNTAwMTMwOUIKKzoxMDEyNDAwMDAzMjhGNEQzMDAyMDA4OTA5MDQ5NDIwMDhCNUFCMjVBRTgKKzoxMDEyNTAwMDkzNDIxM0QwOEU0OEMxODkwMTMxQzE4MUI4NjgwMDI4RkEKKzoxMDEyNjAwMDAzRDEzODhBMTAyMzE4NDM3MUUwMzg4QTQwMjMxODQzODkKKzoxMDEyNzAwMDZERTAwMEYwMTFGOTAxRjA2N0ZGRjVFMDAxMzAwNjI4OUMKKzoxMDEyODAwMEUzRDMwODk4MDAyODBDRDFCODY4NDExQ0I5NjAwMDI4NDUKKzoxMDEyOTAwMDAzRDEzODhBMDEyMzE4NDMwMkUwMzg4QTA0MjMxODQzMTMKKzoxMDEyQTAwMDM4ODI3ODY4MDEzMDc4NjA2MkUwMEE5ODAyMjg1RkQxNUQKKzoxMDEyQjAwMDA5OTg0MDBDNzNEMzAxMjM5QjA3RTAxRDAxMzAxODQzQUMKKzoxMDEyQzAwMDAwNjhFMTFEMEQzMTE5NDMwOTY4NDAxODBDMzgwMDA0MEQKKzoxMDEyRDAwMDAwMEMwMDIxOEEwMDZCNEJENjE4MDEyMzlCMDczMzQzNzcKKzoxMDEyRTAwMDFCNjgwNEFFQjM1MDAxMzEwMzI5RjNEMzAwMjE4MzFFRTAKKzoxMDEyRjAwMDBDOTM2ODRBMTY2QkMwNDYwQjk2OEEwMDBDOUI5QjE4OTEKKzoxMDEzMDAwMDBCOUU5RTE5MDEyMzlCMDczMzQzMUI2ODZFNDZCMzUwMDcKKzoxMDEzMTAwMDAxMzEwNDI5RjFEMzY5NDY4QjFDMDc5MzAwMjEwODkxMDAKKzoxMDEzMjAwMDA0QUU0QTAwMDc5QjlCNUFCMjVBOTM0MjExRDA1ODQ4QzgKKzoxMDEzMzAwMEMxODkwMTMxQzE4MUY4Njg0MTFDRjk2MDAwMjgwM0QxREQKKzoxMDEzNDAwMDM4OEEyMDIzMTg0MzAyRTAzODhBODAyMzE4NDMzODgyRTEKKzoxMDEzNTAwMDhGRTcwMTMxMDYyOUU0RDMwODk5MDAyOTBERDFGOTY4RjYKKzoxMDEzNjAwMDRBMUNGQTYwMDAyOTA0RDEzOThBMDIyMzE5NDMwM0UwOTgKKzoxMDEzNzAwMDBDRTAzOThBMDgyMzE5NDMzOTgyMjk2QjA4MTgwMTIzQTQKKzoxMDEzODAwMDlCMDcwMTM4MTg0MzAwNjhDMDQ2MjA3NjAxMjM5QjA3NUQKKzoxMDEzOTAwMEUwMUQxMTMwMTg0MzAwNjgwMTA2MDkwRTAwRTAxOUUwNTUKKzoxMDEzQTAwMDM1NDgyQTZCQzA0NkVBNjIwNDI5NEZEMTAxMjFDNjFEODcKKzoxMDEzQjAwMEZGMzY1QTM2MzE3MjBBOTkwMjI5MUVEMTA5OTkwOTBFNEYKKzoxMDEzQzAwMDQ5MDYxQUQxRTExRDA1MzExOTQzMDk2ODA5MDYwOTBFQkMKKzoxMDEzRDAwMDA4MzkxQUUwMDEyMzlCMDdFMDFEMDEzMDE4NDMwMDY4MUIKKzoxMDEzRTAwMEUxMUQwRDMxMTk0MzA5Njg0MDE4MDAwNDAwMENGOTY4MkIKKzoxMDEzRjAwMDRBMUNGQTYwMDAyOUJDRDFCNkU3MDEyMzlCMDdFMTFEMTYKKzoxMDE0MDAwMDA1MzExOTQzMDk2ODA5MDYwOTBFQTE2MEU4NkFDMDQ2NUEKKzoxMDE0MTAwMDIwNjAyMDFDRkZGNzg4RkMyMDdFMzMyODAxRDAzMjI4NzIKKzoxMDE0MjAwMDExRDEwMTIxMTQ0Q0MwNDZGOTYwQjk2MDIwMUMwMEYwQjQKKzoxMDE0MzAwMDg1RjgyODZCQTk2QUMwNDY4ODYyMjAxQ0ZGRjdDMEZEQUEKKzoxMDE0NDAwMDAwMjgxMUQxMEVFMDAwMjAzMDcyMTFFMDMzMjkwMUQwQzQKKzoxMDE0NTAwMDMyMjkwREQxMDcxQzAwRjA3MUY4MzgxQ0ZGRjdCMEZERTAKKzoxMDE0NjAwMDAwMjgwMUQxMDFGMDcwRkUwREIwRjBCQzA4QkMxODQ3OTcKKzoxMDE0NzAwMDAwRjAxMkY4RjZFNzAwMDA2QzA2MDA4MDAwMDAwMEIwRjMKKzoxMDE0ODAwMDRDMkEwMDgwQUNBQjIwNDA0MDA3MDA4MDgyMDcwMDgwREYKKzoxMDE0OTAwMDBDMkIwMDgwNkMwNzAwODBGMEI1MjU0ODQxNjgwMTMxQjUKKzoxMDE0QTAwMDQxNjAyNDRGRjkxREY5MzEwMDI0ODg2QUZBNjhDMDQ2NkEKKzoxMDE0QjAwMDk0NjEwNDIyRkI2OEMwNDZEQTYwMTAyMkZCNjhDMDQ2RDMKKzoxMDE0QzAwMDlBNjFGQTFERkYzMjVBMzIxMzdBMUI0QTAwMkIwQkQwNTUKKzoxMDE0RDAwMDE1OEEyRTBBMzYwMjMzMjMyQjQwOUIwMDFFNDNDQzIzNTEKKzoxMDE0RTAwMDJCNDA5QjA4MzM0MzEzODIxMjhBRkI2OEMwNDZEQTgzODEKKzoxMDE0RjAwMDRBNkJGQjY4QzA0NkRBODEwQTZCQzA0NjgyNjJDNDYyRUUKKzoxMDE1MDAwMEMzMUQzOTMzNEE2QkMwNDY1QTgzMDQyMzAyNjgxQTQzMDkKKzoxMDE1MTAwMDAyNjA4ODZBMDFGMDMyRkFGODY4MDEyMzlCMDc1NDMwQjAKKzoxMDE1MjAwMDE4NDMwMDY4QzA0NkY4NjBGMEJDMDhCQzE4NDcwMDAwQ0IKKzoxMDE1MzAwMDBDMkIwMDgwNkMwNjAwODBBQzA3MDA4MDgwQjVDMTFEQkMKKzoxMDE1NDAwMEY5MzE4QTZBMDEyMzlCMDdEMTFENDUzMTE5NDMwOTY4ODYKKzoxMDE1NTAwMDBCMDYxQjBFMDEyN0MxMURGRjMxNEEzMTMzMkIwNUQxNkMKKzoxMDE1NjAwMDhCNzAwMTFDMTAxQzAwRjAwRkY4MDZFMDMyMkIwOEQxMjQKKzoxMDE1NzAwMDhCNzAwMTFDMTAxQzAwRjAzQ0Y4MzgxQzgwQkMwOEJDQUYKKzoxMDE1ODAwMDE4NDcwMDIwODg3MEY5RTc5MEI0Q0ExREY5MzIzMzI3NTQKKzoxMDE1OTAwMENDMURGRjM0NEEzNEQzNkFDMDQ2QTc3MEZGMzE0MTMxQjUKKzoxMDE1QTAwMDA3NkNDMDQ2NEY2MUZCMTgzOTFDOUYxRTAxMjM5QjA3MjcKKzoxMDE1QjAwMEZDMUMyMzQzMUI2ODFCMDYxQjBFOUIwMDFCMDQxQjBDRkYKKzoxMDE1QzAwMEM5MTgwODMxMDE2NDAxMjM5QjA3QjkxQzE5NDMwOTY4MzQKKzoxMDE1RDAwMDM0MzAwMTc2RjgxRDAxMzAxODQzMDA2ODAwMDRCOTFENEQKKzoxMDE1RTAwMDE5NDNEMDYzMDk2ODA5MDQwOTBDMDg0M0QwNjM5MEJDMEYKKzoxMDE1RjAwMDcwNDdCMEI1Q0ExREY5MzJDNTFEMkQzNTMyMjBDRjFEM0IKKzoxMDE2MDAwMEZGMzc0QTM3RDM2QUMwNDZCODcwQ0MxREZGMzQzQTM0MkUKKzoxMDE2MTAwMEU4NjhDMDQ2NjA2MTEwMzBFODYwNjA2OUMwMTg4NzFFRTUKKzoxMDE2MjAwMDAxMjM5QjA3MzgxRDE4NDMwMDY4MDAwNEI5MUMxOTQzQTcKKzoxMDE2MzAwMEQwNjMwOTY4MDkwNDA5MEMwODQzRDA2M0Y4MUQwMzMwMUUKKzoxMDE2NDAwMEZGRjdGQ0ZCMjA2MkY4MUQwNzMwRkZGN0Y3RkI2MDYyMzUKKzoxMDE2NTAwMDAwMjAyODc2QjBCQzA4QkMxODQ3RjdCNTgxQjAwMTk4QzcKKzoxMDE2NjAwMEM3MURGOTM3Qjg2QTAxMjM5QjA3RDQxRDA1MzQyMzQzRUUKKzoxMDE2NzAwMDFDNjhGRjIzRkUzMzIzNDA3RjZCM0YwNDNCNDMwQjYwMUEKKzoxMDE2ODAwMDM0MzAxQzFDODAyMzIzNDAwMTlGRkYzNzQxMzcwMDJCM0YKKzoxMDE2OTAwMDNDRDAwQzIzMDA5MzAwMjM5RDAwQUUxODM2Njk2RDE4RDIKKzoxMDE2QTAwMDZFNjEwMTMzMDUyQkY3RDMwMDIzOUQwMEFFMTg3NjZBRDcKKzoxMDE2QjAwMDZEMThBRTYyMDEzMzA1MkJGN0QzMDE5QkZGMzM1MTMzMTUKKzoxMDE2QzAwMDlCNzgzMzJCMEVEMTAxMjM5QjA3QzUxRDAxMzUyQjQzN0UKKzoxMDE2RDAwMDFCNjhDMDQ2NEI4MTAxMjM5QjA3QzUxRDBEMzUyQjQzNUQKKzoxMDE2RTAwMDFCNjgxNkUwN0I2OUMwNDY0QjgxMDEyMzlCMDdDNTFEMjMKKzoxMDE2RjAwMDBEMzUyQjQzMUI2ODdENjk1RDFCMDEyMzlCMDdDNjFEQjAKKzoxMDE3MDAwMDAxMzYzMzQzMUI2OEVCMTgwQzNCMDJFMDAwMjMwMDkzQzcKKzoxMDE3MTAwMDRCODFDQjgwNjMwOTQ5RDMwMTIzOUIwN0M0MUQwNTM0NEEKKzoxMDE3MjAwMDIzNDMxQjY4QzA0NjBCODEwMTIzOUIwN0M0MUQwRDM0NTYKKzoxMDE3MzAwMDIzNDMxQjY4MEM4OTFCMUIwMDlDMUMxQjAxMjM5QjA3NUMKKzoxMDE3NDAwMDA4MzAxODQzMDA2ODIwMTg4ODgwMzg2QTA0MEVGRjIzODgKKzoxMDE3NTAwMDFCMDQwMzQwMUIwQTFDNDNGRjIzMUIwMjAzNDAxQjAyMDQKKzoxMDE3NjAwMDIzNDMwMDA2MTg0M0M4NjA3ODZBMDcwRUZGMjMxQjA0NTIKKzoxMDE3NzAwMDAzNDAxQjBBMUY0M0ZGMjMxQjAyMDM0MDFCMDIzQjQzODIKKzoxMDE3ODAwMDAwMDYxODQzMDg2MUQwNkJDMDQ2Qzg2MzkwNkJDMDQ2MjIKKzoxMDE3OTAwMDA4NjQ1MDZDQzA0NjQ4NjQxMDZDQzA0Njg4NjREMDZDQzUKKzoxMDE3QTAwMEMwNDZDODY0OTA2Q0MwNDYwODY1MDJFMDAwMjMwQjgxMDcKKzoxMDE3QjAwMDhCODAwNEIwRjBCQzA4QkMxODQ3MDBCNTBGNEE5Mzg5NzEKKzoxMDE3QzAwMDAxMzM5MzgxQzIxREY5MzIwNDIzOTA2QUMwNDZDMzYwN0QKKzoxMDE3RDAwMDEwMjM4MzYxQ0IwQTAxRDMxODIzODM2MUMxODM1MTZCMkEKKzoxMDE3RTAwMEMwNDZDMTgxNTE2QkMyMUQzOTMyNTE4MzA0MjMwMTY4NDcKKzoxMDE3RjAwMDE5NDMwMTYwMDFGMEMyRjgwOEJDMTg0NzBDMkIwMDgwQTcKKzoxMDE4MDAwMEIwQjUxQjRDMjA2QTAyMjgxQkQyMDAyMEU3MUQxOTM3RjcKKzoxMDE4MTAwMDM4NzFFMTY4RTAxREY5MzAwMDI5MTVEMDQyNkEwMDJBQ0MKKzoxMDE4MjAwMDEyRDEwMTI1MEFFMEZGRjc4OUZCMDAyODA5RDEyMDZBQkYKKzoxMDE4MzAwMDAyMjgwMEQzM0Q3MUUwNjgwMDI4MDJEMDM4NzkwMDI4RTIKKzoxMDE4NDAwMEYxRDBCMEJDMDhCQzE4NDc0MDZBMDAyOEY5RDEwMDI5ODMKKzoxMDE4NTAwMEY3RDE2MDY5MDAyODA0RDAwNjQ4MDA2ODAzRjBBOEZDQUUKKzoxMDE4NjAwMEVGRTc2MDY4MDAyOEVDRDAwMEYwNUFGOEU5RTcwMDAwRTQKKzoxMDE4NzAwMDZDMDYwMDgwMzQwNDAwODBCMEI1MDcxQzIwMjNCODY4RDMKKzoxMDE4ODAwMDE4NDAwMTI0MDAyNTAwMjgwQkQxMzg2QTAwMjgwM0QxMTQKKzoxMDE4OTAwMDI4MUNCMEJDMDhCQzE4NDcxRjQ4MDE2RTAxMzEwMTY2MDYKKzoxMDE4QTAwMDAzRTA0ODY4QzQyMzE4NDAwM0QxMzg2QTAwRjAwQ0ZDRjgKKzoxMDE4QjAwMDJGRTAzODFDMDBGMDFDRkMzODFDMDBGMDdCRkFCODY4RTQKKzoxMDE4QzAwMEMwMDgwMkQzMzg2QTAwRjBEMUZCQjg2ODM5NkFDMDQ2NTQKKzoxMDE4RDAwMDg4NjAzODZBQzA0NkM1NjAxMDQ4NDE2ODAwMjkxMUQxNDcKKzoxMDE4RTAwMEMxNjgwMDI5MDlEMTQxNjkwMDI5MDZEMTM5NkFDMDQ2NzkKKzoxMDE4RjAwMDgxNjA0MTYwMDBGMDE0RjgwQkUwMzk2QUMwNDY4MTYwRjUKKzoxMDE5MDAwMDQxNjAwNkUwMzk2QTgyNjhDMDQ2RDE2MDM5NkFDMDQ2RTMKKzoxMDE5MTAwMDgxNjAyMDFDQkRFNzAwMDBBNDJBMDA4MDZDMDYwMDgwQzYKKzoxMDE5MjAwMDkwQjUwQjRDNjc2ODAwMkYwRkQwMzgxQzAwRjAxMkY4RjAKKzoxMDE5MzAwMDAwMjgwQUQxNjA2OEMwNjhDMDQ2NjA2MDM4MUMwMEYwQUEKKzoxMDE5NDAwMEMzRkIwMDIwOTBCQzA4QkMxODQ3MDEyMEZBRTcwMDAwNDgKKzoxMDE5NTAwMDZDMDYwMDgwRjBCNTA3MUNGRTFENDkzNjMwNzg0MDAwNEIKKzoxMDE5NjAwMEMwMTk4NThCMzM0QzM0NEI5RDQyM0NEMDM4MUMyMTFDMTQKKzoxMDE5NzAwMDJBMUMwMEYwMURGOTMxNDg4MDZBNTgyMTY5NDM0MDE4M0IKKzoxMDE5ODAwMDAxMjM5QjA3MTg0MzAwNjgwMDA0MDAwQzJDNEQwMTI4MUMKKzoxMDE5OTAwMDFBRDEzMDc4QzAxOUMxMUQxOTMxMDg3QTNBNjg4MDE4RjcKKzoxMDE5QTAwMDA5N0JFQTFEMjEzMjAwRjBFM0ZDMzA3OEMwMTkyMDMwQjkKKzoxMDE5QjAwMDAwNzkzOTY4NDAxOEMxMUQwNTMxMDAyMDAwMjM0MjAwMUMKKzoxMDE5QzAwMDhCNTIwMTMwMDYyOEZBRDNBMDg4NDEwNzBCRDEyMTg5MTgKKzoxMDE5RDAwMDA5MTg3ODY4MDAwNDAwMEM4MTQyMDREODYxODlFMjg4MDMKKzoxMDE5RTAwMDg5MTg4MTQyMDNEOTAwMjBGMEJDMDhCQzE4NDcyMTFDOEIKKzoxMDE5RjAwMDE0NEEwMDIwRkVGNzVBRkYwMTIyNTIwNDc4NjgwMjQzN0QKKzoxMDFBMDAwMDAxMjAzOTY4RkVGNzUyRkYwMTIyNTIwNDc4NjgwMjQzMzAKKzoxMDFBMTAwMDAwMjAzOTY4RkVGNzRBRkYwQjQ5MEM0QTAxMjBGRUY3MDcKKzoxMDFBMjAwMDQ1RkYwMTIwRTkxRDE5MzE0ODcxMDIyMUVBMURGOTMyRjMKKzoxMDFBMzAwMDUxNjJEOUU3MjhBQzIwNDBGRkZGMDAwMDRDMkEwMDgwMEIKKzoxMDFBNDAwMDZDMDYwMDgwNTQwMDAzMDAxNEFDMjA0MDE0MDAwNzAwMTIKKzoxMDFBNTAwMEYwQjU4M0IwMDAyMTRGNDhDMjFERjkzMjUxNjIwMTIxMTcKKzoxMDFBNjAwMEM5MDQ0RDRBQzA0NjExNjBDMTFEMTkzMTQ5NzkwMDI5ODgKKzoxMDFBNzAwMDA0RDE0QTQ4MDA2ODAzRjA5QkZCODdFMDQ1NDg0NzY4NkIKKzoxMDFBODAwMEZDMUQ0OTM0MjE3ODQ4MDBDMDE5ODA4QjQ0NEE5MjZBNzEKKzoxMDFBOTAwMDU4MjM1ODQzMTUxODAxMjM5QjA3RUExRDA1MzIxQTQzQTIKKzoxMDFBQTAwMDEyNjgwODM1MkI0MzFENjhGRjIzMUIwMjJCNDAxQjBBQkQKKzoxMDFBQjAwMDNDNEQwMTJCMjREMUM4MTlDMTFEMTkzMTA4N0EzQTY4NEYKKzoxMDFBQzAwMDgwMTgzOTRBMDk3QjAwRjBDNUZDMjA3OEMwMTkyMDMwMDUKKzoxMDFBRDAwMDAwNzkzOTY4NDExODAwMjA4MjAwNTMxOTlCNkU2RTQ2QzgKKzoxMDFBRTAwMEIzNTAwMTMwMDMyOEY3RDNDQTFEMDUzMjY5NDYwMDIwRTAKKzoxMDFBRjAwMDQzMDBDRDVBQzA0NkQ1NTIwMTMwMDYyOEY4RDMyREUwMTgKKzoxMDFCMDAwMDAyMkIyQkQxMTEwQTI5RDMwMDIxOEEwMDUzMTk5QjZFNzUKKzoxMDFCMTAwMDZFNDZCMzUwMDEzMTAzMjlGN0QzMjE3ODQ5MDBDOTE5MjIKKzoxMDFCMjAwMDA5OEYzQTY4OEIxODZBNDYwMDIxNEQwMDU2NUJDMDQ2MDMKKzoxMDFCMzAwMDVFNTMwMTMxMDYyOUY4RDMxOTQ5OEE2QTEzMTgxQTZEQzAKKzoxMDFCNDAwMDAwOUQ1NTQwMTk0QUQ2Njg3NTQwMUQ2NTg5NkEwODE4NzgKKzoxMDFCNTAwMDQxNkQwMjlCNTk0MDkyNjk1MTQwNDE2NTIwNzg0MTFFNzgKKzoxMDFCNjAwMDIxNzAwMDI4MEREMDM4MUNGRkY3RjRGRTAwMjgwREQxOUQKKzoxMDFCNzAwMDA4NEE1MDY4QzA2OEMwNDY1MDYwMzgxQzAwRjBBNEZBOUIKKzoxMDFCODAwMDAyRTAzODFDMDBGMDczRkEwMUYwREVGQTAzQjBGMEJDOUEKKzoxMDFCOTAwMDA4QkMxODQ3NkMwNjAwODAwMDAwMDBCMDM4MDQwMDgwQzQKKzoxMDFCQTAwMDRDMkEwMDgwQUNBQjIwNDA5NDA2MDA4MDA4ODMyMDQwODMKKzoxMDFCQjAwMEYwQjU4MkIwNjk0QjlGNkE1ODIzNUE0M0JBMThDMzFEQzcKKzoxMDFCQzAwMDQ5MzMxRjc4MDEyMzlCMDdENDFEMDEzNDIzNDMxRDY4MkIKKzoxMDFCRDAwMDQzNjgxQzA0MDEyMzlCMDdENjFEMDUzNjMzNDMxQjY4NEQKKzoxMDFCRTAwMDFDNDM0MjIzMUM0MzBDNjBGRjI2MzYwMjJFNDAwMTIzNzcKKzoxMDFCRjAwMDVCMDI5RTQyNzREMTZCMEMyQkQzQzMxOTIwMzMxQjc5MkIKKzoxMDFDMDAwMEMwNDY0QjgxN0IwMDFCMTgxQjhGNEM4OTFCMUJDQjgwNTQKKzoxMDFDMTAwMDAwMjRBNjAwMDE5NkIzMThERTFEMDkzNjAxMjM5QjA3OTgKKzoxMDFDMjAwMDMzNDMxQjY4MDE5RTc2MTg3MzYxMDEzNDA1MkNGMEQzOTEKKzoxMDFDMzAwMDAwMjRBNjAwMDA5NkIzMThERTFEMUQzNjAxMjM5QjA3NjUKKzoxMDFDNDAwMDMzNDMxQjY4MDA5RTc2MThCMzYyMDEzNDA1MkNGMEQzMzEKKzoxMDFDNTAwMDA2RTAwMDIzNEI4MUNCODA0MDIzOUM0MzBDNjAyMzFDNzcKKzoxMDFDNjAwMDZCMEU0QUQzQzMxOTIwMzMxQjc5MTAzMzBCODE3QjAwRDEKKzoxMDFDNzAwMDFCMTgxQjhGMEY4OURCMUI4QjgwMDEyMzlCMDdENDFEMzcKKzoxMDFDODAwMDM1MzQyMzQzMUI2OEMwNDZDQjYzMDEyMzlCMDdENDFEMTcKKzoxMDFDOTAwMDMxMzQyMzQzMUI2OEMwNDYwQjY0QUIwRTIxRDIwMTIzQjEKKzoxMDFDQTAwMDlCMDdENDFEM0QzNDIzNDMxQjY4QzA0NjRCNjQwMTIzNkUKKzoxMDFDQjAwMDlCMDdENDFEMzkzNDIzNDMxQjY4QzA0NjhCNjQwMTIzMjIKKzoxMDFDQzAwMDlCMDdENDFENDUzNDIzNDMxQjY4QzA0NkNCNjQwMTIzQzYKKzoxMDFDRDAwMDlCMDdENDFENDEzNDIzNDMxQjY4QzA0NjBCNjUwMEUwQkQKKzoxMDFDRTAwMDBGRTBGQjFGMDEzQjFCMDQxQjBDMDc2OEZGMTgwMzY5NzcKKzoxMDFDRjAwMDA4MUMzOTFDMDBGMDM0RjgyQ0UwMDAyMzBCODE4QjgwODkKKzoxMDFEMDAwMDI4RTAwMDIzOEI4MDBCODFDMzE5MjAzMzFCN0FDMDQ2NDcKKzoxMDFEMTAwMDRCODE3QjAwMTgxODAwOEVDMDQ2Qzg4MDAwMjA4NzAwQzkKKzoxMDFEMjAwMEJCMThEQzFEMDkzNDAxMjM5QjA3MjM0MzFCNjg3RjE4NjQKKzoxMDFEMzAwMDdCNjEwMTMwMDUyOEYyRDMwMDIwODcwMEJCMThEQzFEMzEKKzoxMDFENDAwMDFEMzQwMTIzOUIwNzIzNDMxQjY4N0YxOEJCNjIwMTMwQUUKKzoxMDFENTAwMDA1MjhGMkQzMDJCMEYwQkMwOEJDMTg0NzRDMkEwMDgwMUEKKzoxMDFENjAwMDgwQjQxRjFDM0IwQzE4RDIxNzZEMTE0QkMwNDZERjYwQUUKKzoxMDFENzAwMDUyNkRDMDQ2MUE2MUM3NjAxQTY5QzA0NjAyNjFEODY4RDAKKzoxMDFEODAwMEMwNDYwODgwRDg2ODAwMEM0ODgwMTg2OUMwNDY4ODgwMjIKKzoxMDFEOTAwMDE4NjkwMDBDQzg4MDgwQkM3MDQ3NEE4ODEyMDQwQjg4MDAKKzoxMDFEQTAwMDFBNDNDMjYwOEE4OEM5ODgwOTA0MTE0MzAxNjFGMkU3QjUKKzoxMDFEQjAwMDJDMDcwMDgwRjFCNTg4QjAwMDIyMDg5ODAwNkEwODlCQzMKKzoxMDFEQzAwMDk5Njg0OTBBMDJEMzAxMjdGRjAzMDBFMDAwMjcwMzhCMkIKKzoxMDFERDAwMDAwMkIxOUQwQTM0OTg5NkExQzFDNTgyMzYzNDNDOTE4RDYKKzoxMDFERTAwMDAxMjM5QjA3NTgzOTE5NDMwOTY4MDkwNDA5MEMwMjI5ODIKKzoxMDFERjAwMDAyRDEwODIzMUY0MzA3RTA0MThCMDAyOTAyRDAwQzIzQTYKKzoxMDFFMDAwMDFGNDMwMUUwMDQyMzFGNDM4MzhBMDAyQjE4RDA5NTQ5MDgKKzoxMDFFMTAwMDg5NkExQzFDNTgyMzYzNDNDOTE4MDEyMzlCMDc1ODM5M0UKKzoxMDFFMjAwMDE5NDMwOTY4MDkwNDA5MEMwMjI5MDFEMTBGNDMwN0UwOEQKKzoxMDFFMzAwMEMxOEEwMDI5MDJEMDAzMjMxRjQzMDFFMDAxMjMxRjQzNkQKKzoxMDFFNDAwMEMxMUQzOTMxMDc5MTRCODkwQzg5MUMxOTI0MDQyNDBDQkMKKzoxMDFFNTAwMDA4OUQyRDY4QzA0NjAxOTVDOTg4N0QwODFBRDMxQTFDQjMKKzoxMDFFNjAwMEMzMUQxOTMzMUE3MjA3OUE5Mjg5QzA0NjFBNzMwNzlBQ0EKKzoxMDFFNzAwMDEyODlDMDQ2MDI4NjA0ODc4MjhBMDEzQTgyODMwMTIyM0YKKzoxMDFFODAwMDE5NzEwODlCMUI2ODVCMTg1Qjc4OUIwMDFCMDQxQjBDN0IKKzoxMDFFOTAwMDA4MzM1OTE4QkIwODQ3RDMwNzlCNUI4OTg1MTgwNjk1RkIKKzoxMDFFQTAwMDIwMzUyQjcyMDc5QjlCODlDMDQ2MkI3MzA3OUIxQjg5OTAKKzoxMDFFQjAwMDJFMUM1NTAwMkQxODA1OTUyQjg2MDAyQTAxRDBDMzhBQUIKKzoxMDFFQzAwMDAwRTA4MzhBMDEzQjA1OURDMDQ2QUI4MzMxNzE2NTRCQzEKKzoxMDFFRDAwMDlENkEwNTlCOUU4QjU4MjM3MzQzRUIxOEREMUQwMTM1Q0UKKzoxMDFFRTAwMDAxMjM5QjA3MkI0MzFENjgyQjBFNUIwNjAxRDEwODMxOTQKKzoxMDFFRjAwMDAwRTAxMDMxODEyMzVCMDIxRDQwOUQ0MjAzRDFFMzFGQUUKKzoxMDFGMDAwMDA1M0IxQzA0MjQwQzA1OUJDMDQ2MUM4NzA4OUIxQjY4RDIKKzoxMDFGMTAwMDFCMTkxMDNCOUI3QjA2OUQ0MDM1MkI3MDJCNzgwMjMzQTEKKzoxMDFGMjAwMEUzMUExQzA0MjQwQzAxMzJCQjA4OUIwNzZERDA4MzE4RjQKKzoxMDFGMzAwMDIwMzMwNDkzMTk3MjAxOUI1RDE4MDEyMzlCMDcyQjQzRTcKKzoxMDFGNDAwMDFCNjgxQjA3MUIwRjlCMDAwNDlFQzA0NjMzNzMwMDk1NDQKKzoxMDFGNTAwMDJCNzgxQjA3MUIwRjlCMDAwNDlEQzA0NjJCNzMwMDlEMTUKKzoxMDFGNjAwMEVCNzhBRDc4MUIwMjFENDMyQjAyMkQwQTJEMDYyRDBFOUEKKzoxMDFGNzAwMDJCNDM1NTAwMkQxODJCODYwNDlCQzA0NjU5NzIwNDlCOTkKKzoxMDFGODAwMDFCN0IyRTFDMDQ5REMwNDY2QjczMzM4RUMwNDY3Mzg2MkMKKzoxMDFGOTAwMDAwOUQyQjc4MUIwNzFCMEY5QjAwMUIwNDFCMEM1OTE4NjMKKzoxMDFGQTAwMDA0MjUzRDQwMEVEMDM0ODcwMzhCMDEzQkIzODMxMzFDQzMKKzoxMDFGQjAwMDFCMTgyMDMzMTk3MTAxOUI1QjE4NUI3ODlCMDA1OTE4MjMKKzoxMDFGQzAwMDA4MzEwMTMyM0IwOTM3RDMwMDJEMDFEMDQzOEIwMEUwQUIKKzoxMDFGRDAwMDAzOEI1NTAwMkQxODAxM0JBQjgzODMxODAzOTMyMDMzRUIKKzoxMDFGRTAwMDE5NzEyMDRCOUQ2QTUzMDAxQjE4MDI5MzlFOEI1ODIzMzYKKzoxMDFGRjAwMDczNDNFQjE4REQxRDAxMzUwMTIzOUIwNzJCNDMxRDY4M0YKKzoxMDIwMDAwMDJCMEU1QjA2MDJEMTA4MzEwMUUwMTVFMDEwMzE4MTIzNkYKKzoxMDIwMTAwMDVCMDIxRDQwOUQ0MjAzRDFFMzFGMDUzQjFDMDQyNDBDQzEKKzoxMDIwMjAwMDAyOUJDMDQ2MUM4NzA4OUIxQjY4MUIxOTEwM0I5QjdCQUYKKzoxMDIwMzAwMDAzOUM0MDM0MjM3MDAxMzIwNzlCQzA0NkQ5ODA1MTFFNTcKKzoxMDIwNDAwMEMzMUQ0OTMzMTk3MDA3NjEwNDJBMDZEMjA2NDk1MzAwOUIKKzoxMDIwNTAwMDFCMTg5OTgzMDEzMjA0MkFGOUQzMDlCMEYwQkMwOEJDREIKKzoxMDIwNjAwMDE4NDcwMDAwNEMyQTAwODBGRkZGMDAwMDcwNDc4MEI1MzEKKzoxMDIwNzAwMDhDQjAwNzFDMTI0ODAxNjgwMTMxMDE2MDM4NjhDMDQ2MDUKKzoxMDIwODAwMDAwOTA3ODY4QzA0NjAxOTBCODY4QzA0NjAyOTAwRDQ4M0MKKzoxMDIwOTAwMDQxNjhDOTY4QzA0NjQxNjAzODFDMDBGMDRGRjhCODY4MTQKKzoxMDIwQTAwMDQwMDkwNkQzMTAyMzAyOTgxODQzMDI5MDY4NDYwMkYwQjQKKzoxMDIwQjAwMEUxRkY2ODQ2MDJGMDlBRkUwQ0IwODBCQzA4QkMxODQ3RUQKKzoxMDIwQzAwMDBDMkIwMDgwNkMwNjAwODAwMEI1OENCMDAxNjhDMDQ2MDcKKzoxMDIwRDAwMDAwOTE0MTY4MDU0QjE5NDMwMTkxMDBGMDJGRjg2ODQ2QzMKKzoxMDIwRTAwMDAyRjA4NEZFMENCMDA4QkMxODQ3MDAwMDAwMDAwMEEwRkQKKzoxMDIwRjAwMDAyNkEwMzY4QzA0NjEzNjA0MDY4QzA0NjUwNjA0MDMyQzAKKzoxMDIxMDAwMDQ4NjhDMDQ2OTA4MEM4NjhDMDQ2RDA4MDQ4NjlDMDQ2Q0MKKzoxMDIxMTAwMDEwODE4ODY4QzA0NjUwODEwODdFQzA0NjkwNzMwODY5NjcKKzoxMDIxMjAwMEMwNDY5MDgxNzA0NzA0NDkwODY4MDAyODAwRDE3MDQ3NzQKKzoxMDIxMzAwMEMyNjhDMDQ2MEE2MEZBRTc2QzA2MDA4MDAyNDkwQTY4NzUKKzoxMDIxNDAwMEMwNDZDMjYwMDg2MDcwNDc2QzA2MDA4MEIwQjQwMDIyRDAKKzoxMDIxNTAwMDEyNEY3QzdGMDEzNDdDNzcwMzIzRkMxRDE5MzQzODYyRDUKKzoxMDIxNjAwMDc5NjIyMzcyMEU0QzI1Njg2QjBDMDVEMjIzNjgxQjBDMTgKKzoxMDIxNzAwMDEwRDEyNDY4QTMwQTBERDMwMTIzMEE0RkMwNDZGQjYyODUKKzoxMDIxODAwMDA5NEYwQTRCQzA0NkRGNjA5OTYwNTg2MDEwMUMxODYwMDgKKzoxMDIxOTAwMDAxMzJGQkU3MTAxQzM4NjQwMTMyRkJFNzAwMDAwMDgwQ0QKKzoxMDIxQTAwMDAwMDAxMDQwQzAwMDE4MDAwMjgxMDAwMDQwMDExODAwMkIKKzoxMDIxQjAwMEYwQjU0NzRGMzg2ODQ3NEU0NzREMDcyMzVCMDJFQzE4OTAKKzoxMDIxQzAwMDAwMjgxREQxMjA2QjAxMzAyMDYzNDQ0OUMwNDYwODYwQkYKKzoxMDIxRDAwMDQzNDg0MTY5MDAyOTEzRDBDMTFENjkzMTA5N0IwMDI5OTkKKzoxMDIxRTAwMDBFRDAwMTIzOUIwNzAxNkQxOTQzMDk2OEMwNDY4MTYxMjgKKzoxMDIxRjAwMEMyNjk5MTQyMDREMEYxNkMwMTMxRjE2NDAxRjA1MEZFRUEKKzoxMDIyMDAwMDM4NjgwMTI4MTdEMTM3NDg0MTY5MDAyOTEzRDBDMTFEMEEKKzoxMDIyMTAwMDY5MzEwOTdCMDAyOTBFRDAwMTIzOUIwNzAxNkQxOTQzMDkKKzoxMDIyMjAwMDA5NjhDMDQ2ODE2MUMyNjk5MTQyMDREMEYxNkMwMTMxRjQKKzoxMDIyMzAwMEYxNjQwMUYwMzVGRTM4NjgwMjI4MkZEMUJCMjMxQjAxNjEKKzoxMDIyNDAwMEVFMTg3MDdCMDAyODAzRDAwMDIwNzA3MzAwRjA0QUZENjgKKzoxMDIyNTAwMDMwN0IwMDI4MDJEMDc4NjgwMkYwQUFGRjFCMjNEQjAxNDQKKzoxMDIyNjAwMEU4MThDMDhCMDQyNjA2NDBFMDZBQjA0MjE0RDBGODY4MzMKKzoxMDIyNzAwMDAxMzBGODYwMTkyODExRDMxQjQ4MDE3QjAwMjkwREQxQ0EKKzoxMDIyODAwMEZGMzA0MTMwNDA3ODAwMjgwOEQxQjg2ODAyRjA5MEZGNTQKKzoxMDIyOTAwMDAwMjBGODYwRTY2MjAxRTAwMDIwRjg2MDM4NjgwMzI4NUEKKzoxMDIyQTAwMDBCRDFFQzFENzkzNEUwNkI4MDA4MDJEMzAyMjAwMkYwRTAKKzoxMDIyQjAwMDA3RkMwMjIzRTA2Qjk4NDNFMDYzMzg2ODAxMzAzODYwMjQKKzoxMDIyQzAwMDAzMjgwMUQ5MDAyMDM4NjBGMEJDMDhCQzE4NDcwMDAwODIKKzoxMDIyRDAwMDNDMDQwMDgwQTA4MjIwNDA2ODBFMDA4MDQwMDExODAwNkQKKzoxMDIyRTAwMDY0MkQwMDgwRTQyQzAwODAyODA1MDA4MEIwQjQxRDQ4RDcKKzoxMDIyRjAwMDg0OEExRDRBMTM4QUMxMUQwOTMxMDEyNzlDNDIwM0QxREEKKzoxMDIzMDAwMDQzOEE1NDhBQTM0MjEwRDAwQjc4MDAyQjBERDA0Qjc4MEYKKzoxMDIzMTAwMDAwMkIwQUQwNDQ4QjkzOEE5QzQyMDREQzEzNEJDMDQ2QUEKKzoxMDIzMjAwMDVGNjA5NzgyMDFFMDAxMzM5MzgyQzM4QjVDMUNDNDgzOUUKKzoxMDIzMzAwMDg0OEJBMzQyMEVEQjg0OEEwNThCMDAyM0FDNDIwNURBMzIKKzoxMDIzNDAwMDQ0OEFDNThBQUM0MjAxREE0QjcwMDBFMDRGNzA0MzgyODgKKzoxMDIzNTAwMDgzODJDMzgzNDE4QUMwNDY1MTgyODA4QUMwNDYxMDgyRUMKKzoxMDIzNjAwMEIwQkM3MDQ3RTgwRTAwODAzQzA0MDA4MDQwMDExODAwQkIKKzoxMDIzNzAwMEY3QjU5MUIwNkI0Njg0MUUxMjk5MTQyOTFBRDkwMDIwMjIKKzoxMDIzODAwMDgxMDA2NzU4QzA0NjU3NTAwMTMwMDAwNjAwMEUxMDI4RTMKKzoxMDIzOTAwMEY2RDMwMDIxMDUyMDg3MDBENjU5NEYxQzNEMDYyRDBFOEYKKzoxMDIzQTAwMDBGMUNCRjAwREU1MTI5MUMwMTMwMDAwNjAwMEUxMDI4NTIKKzoxMDIzQjAwMEYxRDMwOUUwMDAyMDgxMDA2MzU4QzA0NjUzNTAwMTMwM0EKKzoxMDIzQzAwMDAwMDYwMDBFMDYyOEY2RDMwMDIwRTA3MDIwNzI2MDcyMkUKKzoxMDIzRDAwMEEwNzIyMDczNjA3MzEyOTkxNDI5MzdEOTY5NDY4RTFDMzQKKzoxMDIzRTAwMDkxNzgwOTA3MDkwRjg5MDAxNDM5MEQwNjJEMTYwMDI3NjkKKzoxMDIzRjAwMDAwMkQxQkRERjAxOTEwQTkwMEYwM0RGODAwMjgwRUQwQ0IKKzoxMDI0MDAwMDAwMjAxMEE5MDk3ODAwMjkwOUREMDAyMjM5MTg3MjU0MkEKKzoxMDI0MTAwMDAxMzAwMDA2MDAwRTEwQTkwOTc4ODg0MkY2REIxMEE4RUEKKzoxMDI0MjAwMDAwNzgzODE4MDcwNjNGMEVBRjQyRTNEQjY4NDZFMjFEMkUKKzoxMDI0MzAwMDBEMzIwMDIxQUIwODVGMUMwOEQwOEIwMEM0NThDMDQ2ODkKKzoxMDI0NDAwMEQ0NTAwMTMxMDkwNjA5MEU4RjQyRjZEODE0QjBGMEJDMDEKKzoxMDI0NTAwMDA4QkMxODQ3OTBCNDg3MUUwMDIwODkwODRCMUMwOEQwODAKKzoxMDI0NjAwMDgxMDA1NDU4QzA0NjdDNTAwMTMwMDAwNjAwMEU4MzQyNjMKKzoxMDI0NzAwMEY2RDg5MEJDNzA0NzgwQjQwMjc4RDIwNkQyMEUwMDIzMDIKKzoxMDI0ODAwMDAxMjcwMTJBMDFEQzBGNzAxMUUwNDA3OEMwNDYwODcwNzYKKzoxMDI0OTAwMDE0MkEwNEQxMDg0ODAxN0EwMTMxMDE3MjA3RTAwMjJBQTYKKzoxMDI0QTAwMDA1RDAwNTJBMDNEMDA2MkEwMUQwMTUyQTAyRDExODFDMEUKKzoxMDI0QjAwMDgwQkM3MDQ3MzgxQ0ZCRTdFMDgyMjA0MDAwQjUwRjQ4MjUKKzoxMDI0QzAwMDAxMjMxQjA2NDE2OTk5NDMxQTA5NDE2MUQxNjAwMDIxMkEKKzoxMDI0RDAwMEExMjI1MjAzOTE2MTE5MUMwOTRBQzA0NjExNjAxQjIzQjUKKzoxMDI0RTAwMERCMDFDMDE4ODA2OTAwMjgwM0QwMDJGMDYxRkUwOEJDM0YKKzoxMDI0RjAwMDE4NDcwNDQ4NDE4ODAxMzE0MTgwRjhFNzY4MEUwMDgwQTAKKzoxMDI1MDAwMDAwMDAwMEIwRTA4MjIwNDA3MDQ3MDAwMEYwQjU4NkIwQzcKKzoxMDI1MTAwMDk1NEFEMDY4RDcxRDc5MzcwMTI4MDlEMTM4ODkwMDI4MTQKKzoxMDI1MjAwMDA2RDFEMDZGMDIyMzAxNjg5OTQzMDE2MDE0MjAzODgxREQKKzoxMDI1MzAwMDhFNEM2MTZBOEU0OEMzNkI1OTE4QzE2M0EwNkExOTIzMTcKKzoxMDI1NDAwMERCMDFENDE4QTA2MjIxNkEwOTAzMDkwQjgxNDIwNUQxN0QKKzoxMDI1NTAwMDAxMjA0MDA0ODc0OUMwNDYwODYwRjNFMEJCOEE1ODFDNEMKKzoxMDI1NjAwMEI4ODIzRDhCMDEyMDAwMjFBQjQyMDREQkQzMUQ4OTMzQUYKKzoxMDI1NzAwMDU4NzBCOTgyRjk4MzMzMjM5QjAxRDMxODA1OTM1QjY5QTMKKzoxMDI1ODAwMDBGMkI3M0QyMDAyMTdDNEZDMDQ2Mzk2MTIxNkE4QTY4QzMKKzoxMDI1OTAwMDEyMDQxMjBDNEI2ODFFMEMzNjA0RkQxRjA5M0QwMDJFNjAKKzoxMDI1QTAwMDA1RDEzQjJBMDNEMzAxMjNEQjAyOUE0MjAxRDlBODczNDgKKzoxMDI1QjAwMEM4RTAwMTIzOUIwNzA4MzExOTQzMDk2OEMwNDYwMzkxMEQKKzoxMDI1QzAwMDAzQTkwOTg4MDEzMTA5MDQwOTBDNzk4MjQ5MDkwNTMxRjcKKzoxMDI1RDAwMDA5MDYwOTBFNjk0RUMwNDYwMjk2Njk0ODQzNkFDMDQ2MUMKKzoxMDI1RTAwMDAxOTM4MzZBQzA0NjAwOTNDMjFEMTEzMjgwNjkwMDAzQzMKKzoxMDI1RjAwMDAwMEI5MjY4QjMwNzFBNDMxMjY4OTA0MjAxRDEwMTIwODAKKzoxMDI2MDAwMDBERTA5MDQyMDVEOTAwOUIxODFBMDE5QkQyMUE4MjE4M0UKKzoxMDI2MTAwMDAwRTAxMjFBMDEyMDA5MDE5MTQyMDBEMzAwMjAwMTI4OTQKKzoxMDI2MjAwMDY1RDE1MTQ5MjA2OTAwMjg2MkQwMDU5OTQ4NjkwMTMwNzcKKzoxMDI2MzAwMDQ4NjEwMjIwMjE2QUMwNDYwODYwMDBGMEE3RkM3ODYzNjgKKzoxMDI2NDAwMEJFNjA0OTQ5MjI2QUEzNkJEMzE4NjY2QkIzNDIwMEQ5QjYKKzoxMDI2NTAwMDIyNkJDMDQ2QkE2MkJBNkEwQzMyRkE2MjAwMjJGQTYxOTAKKzoxMDI2NjAwMDAzQUE1Mjg4RDIwOTAzRDMwMTIyMDBFMDdCRTAwMEUwRjQKKzoxMDI2NzAwMDAwMjI3QTYwN0E2OEMwNDYwMjYwNzg4QTQxNEU2MDI4RkIKKzoxMDI2ODAwMDA0RENCMDgzNzg4QUMwNDZGMDgzMDhFMDYwMjBCMDgzMjEKKzoxMDI2OTAwMDc5OEFGODZBNDIxODYzNkI5QTQyMDNEOEYxODMwMDIyNjAKKzoxMDI2QTAwMDNBNjMwNUUwMjE2QkMwNDYzOTYzNjE2QjA4MUFGMDgzMTkKKzoxMDI2QjAwMDJENDk3ODZCNDI2OEMwNDZCQTYwODI2OEMwNDZGQTYwQUQKKzoxMDI2QzAwMDAyNjlDMDQ2N0E2MTQwNjlDMDQ2Qjg2MTJFNEJDODE4OUQKKzoxMDI2RDAwMDA0OTAwMEYwMzdGOTA0OTgwMEYwODhGODAwRjBGNkZBNUEKKzoxMDI2RTAwMDc4OEFGMThCODg0MjA0RDFGOTZBMDgxODA0RTAzOEUwNEUKKzoxMDI2RjAwMDMyRTAzQTZCMTAxODQwMUE4MTA3MDJEMDgwMDg4MDAwM0YKKzoxMDI3MDAwMDA0MzA2MTZCMDkxQUEyNkI5MTQyMDBEMjIwNkJDMDQ2NjMKKzoxMDI3MTAwMDIwNjJFODdCMDAyODA4RDAwMDIyRUE3MzA1OTk0ODY5MDYKKzoxMDI3MjAwMDAxMzg0ODYxNzg2QjAwRjA3M0ZBMTg0ODgwNkE4MDA2QjcKKzoxMDI3MzAwMDgwMEUwMTI4MEFEMTIwNkEwMDAzMDAwQjBCNENBMTZBMEQKKzoxMDI3NDAwMDg4NDIwM0QwMDZCMEYwQkMwOEJDMTg0NzAxMjA0MDA0MDIKKzoxMDI3NTAwMDA4NDlDMDQ2MDg2MDA2RTBFMDY4MDAyODAxRDAwMEYwQTMKKzoxMDI3NjAwMEI1RkEwMTIwQTg3M0VERTc2ODBFMDA4MDAwNDAxNDQwMjAKKzoxMDI3NzAwMEE0MkEwMDgwMDAwMDAwQjAyODFBMDA4MDU1NTU1NTU1NDUKKzoxMDI3ODAwMEE4MDMwMDgwNjgxQTAwODBDNDBCMDAwMDAwMDAxMDQwRkQKKzoxMDI3OTAwMDgwQjUwNzFDNzg2QTQwODlGRjIxMDEzMTAxNDAxMDQ4NEIKKzoxMDI3QTAwMDAyRDE4MTZDMDEzMTgxNjQ3OTZBNDk4OTQ5MEIwMkQyNzUKKzoxMDI3QjAwMDQxNkMwMTMxNDE2NDBCNDg0MTZBMDEzMTQxNjI3ODZBRTAKKzoxMDI3QzAwMDM5NkJDMDQ2NDg2MjM4NkIwMEYwRjhGQjM4MUMwMEYwRUIKKzoxMDI3RDAwMEIzRjgwMTIwMDQ0OUMwNDZDODczODBCQzA4QkMxODQ3NDAKKzoxMDI3RTAwMEE0MkEwMDgwQTA4MjIwNDAxODFBMDA4MEY4QjUwNzFDOTcKKzoxMDI3RjAwMDAwMjJGOTFENjEzMTBEMUM3ODZBQzA0NjAwOTA0MDg5QTUKKzoxMDI4MDAwMDAzMEMwMUQyNDAwQTAzRDIzODFDRkZGN0MxRkY2N0UwNzYKKzoxMDI4MTAwMDM1NDhDMDZCMDAwOTFGRDMwODc4NDAwODFDRDIwMDIwM0YKKzoxMDI4MjAwMDQzMDBDQzVBMzE0RTlFMTkzMzIzOUIwMUYzMTgxQjg4NjkKKzoxMDI4MzAwMDlDNDIwRUQwQjg2OTM5NkJDMDQ2ODg2MUY4NjgzOTZCMjQKKzoxMDI4NDAwMEMwNDZDODYwMzgxQzAwRjAyN0Y5MzgxQzAwRjA3NEY4NDYKKzoxMDI4NTAwMDQ2RTAwMTMwMDMyOEUzREIwMjIwNDMwMDVDMThFNDg4RjMKKzoxMDI4NjAwMDIyNEU5RTE5MzMyMzlCMDFGMzE4MUI4ODlDNDIwM0QxRUYKKzoxMDI4NzAwMDAxMjMwMTM4RDg0MkYwREMwMTIzRDg0MkM0RDAxQjRFREEKKzoxMDI4ODAwMDBCMjMxQjAyRjAxODQwNjkwMDI4MjREMDdENjMwMDk4QjgKKzoxMDI4OTAwMDQwODkwMDBDMUZEMjAwMjQyRDIzOUIwMUYwMThDMDZCMkYKKzoxMDI4QTAwMDM1MUMwMDI4MTdEMEZFMUQyRDM2QTIwMDUyMTkyRDIzRUQKKzoxMDI4QjAwMDlCMDFEMjE4RDI2QjM4MUMzMTFDMDJGMDdCRkMwMTI4MjIKKzoxMDI4QzAwMDBFRDAwMTM0QTAwMDQwMTkyRDIzOUIwMUMwMThDMDZCMEQKKzoxMDI4RDAwMDAwMjhFQUQxMDFFMDAxMkEwMkQwMzgxQzAwRjAwOEY4RjMKKzoxMDI4RTAwMEY4QkMwOEJDMTg0NzAwMDBFODFBMDA4MDY4MEUwMDgwOTkKKzoxMDI4RjAwMDgwQjUwNzFDQjg2OTM5NkJDMDQ2ODg2MUY4NjgzOTZCQzgKKzoxMDI5MDAwMEMwNDZDODYwNzg2QTQwODkwMTBDMEVEMjQwMEEwQ0QzRDgKKzoxMDI5MTAwMDM4Njg0MDA4MDJEMzM4MUMwMkYwMENGQzM4MUMwMEYwNjgKKzoxMDI5MjAwMEJCRjgzODFDMDBGMDA4RjgwMkUwMzgxQ0ZGRjczMEZGNTUKKzoxMDI5MzAwMDAxMjA4MEJDMDhCQzE4NDcwMTIxMDA2QjQwNkFDMDQ2REEKKzoxMDI5NDAwMDAxNjA3MDQ3QjBCNEMxMUQzOTMxMDk4Qjg5MDgwOTA0OTEKKzoxMDI5NTAwMDA5MEM4NDZBQzIxRDYxMzIwMDIwMDAyOTBDREQ4NzAwNDkKKzoxMDI5NjAwMDNEMTkwMTIzOUIwNzJCNDMxQjY4QzA0NkQzNTEwMTMwRkYKKzoxMDI5NzAwMDAwMDQwMDBDODg0MkYyREJCMEJDNzA0N0YwQjVBMEIwOTgKKzoxMDI5ODAwMDAxMjM5QjA3QzExRDIxMzExOTQzMDk2OEMwNDYwQjkxRTIKKzoxMDI5OTAwMEMxMUQ1MzMxMTk0MzFGOTEwOTY4MDFBRkZBMUQzOTMyMjYKKzoxMDI5QTAwMDFFOTIxN0FCNTk4MDNBNDkwMTIzOUIwNzBBNkExMzQzQzkKKzoxMDI5QjAwMENDMUQxMTM0ODk2OTA5MDMwOTBCMjI2OUU1NjhDMDQ2RjkKKzoxMDI5QzAwMDFEOTVGQzFEMzkzNDY0OEI2NDA5MDUzNDI0MDYyNDBFREUKKzoxMDI5RDAwMDFDOTQ1NjFBMUI5NjFDOUMyRTRBQzA0NjAwOTIwMTI2MzcKKzoxMDI5RTAwMDFEOUQxQTY4OTE0MjAxRDEzMjFDMEJFMDkxNDIwM0Q5MUUKKzoxMDI5RjAwMDUyMUIxQjlFQjUxODAwRTA1NTFBMDEyMjI0MDFBQzQyNUYKKzoxMDJBMDAwMDAwRDMwMDIyMDEyQUU2RDE5MTA3MDE0MzA5NjhDMDQ2OUMKKzoxMDJBMTAwMDM5NjA5MzA3MDExRDE5NDMwOTY4QzA0Njc5NjBDMTFEREIKKzoxMDJBMjAwMDAxMzExOTQzMDk2OEMwNDZCOTYwMUY5OTA5NjgxRTlBQTcKKzoxMDJBMzAwMEMwNDY1MTgzQzExRDFEMzExOTQzMDk2OEMwNDYzODYzMjIKKzoxMDJBNDAwMDc5NjJDMTFEMTEzMTE5NDMwOTY4QzA0NkI5NjFDMTFEQzAKKzoxMDJBNTAwMDA1MzExOTQzMDk2OEMwNDZGOTYwQzExRDE3MzExOTQzOTIKKzoxMDJBNjAwMDA5NjhDMDQ2Rjk4MzBFMzAxODQzMDA2OEMwNDZGODgxRjMKKzoxMDJBNzAwMDM4Njg0MDA4MDJEMzM4MUMwMkYwNUNGQjM4MUMwMEYwQjgKKzoxMDJBODAwMDBCRjgzODFDRkZGNzU4RkYyMEIwRjBCQzA4QkMxODQ3MDMKKzoxMDJBOTAwMEE4MDMwMDgwNTU1NTU1NTVGOEI1MDcxQ0Y4MUQzOTMwNjkKKzoxMDJBQTAwMDQxOEIzOTRBOTE0MjAwREQ0MjgzNDI4QkMwNDYwMDkyRkQKKzoxMDJBQjAwMDAxMjAzQTFEMDZDQUJCNkEwMkYwMEVGRjMzNEFDMDQ2MjcKKzoxMDJBQzAwMDAwOTIzMzRFMzA2QTMzNENFMTZENDExODM4NkJDMzFEQjAKKzoxMDJBRDAwMDA1MzMwMTIwNzI2QTAyRjBGQkZFRTA2RDE4MzAwMDI1MUMKKzoxMDJBRTAwMEIxNkE4MTQyMDFEOEU1NjUwMEUwRTA2NTJGMjM5QjAxRDIKKzoxMDJBRjAwMDIwMUNFMTZERTQxODIyNjg5MjAwMjc0QkMwNDY5OTUwRDMKKzoxMDJCMDAwMDI2NDhDMTZCNEEwODA1RDM0OTA4NDkwMEMxNjMwMTIwMjIKKzoxMDJCMTAwMDAxRjBENkZGMjI0QTFGNDhDMTFEODkzMTBCNzgwMDJCRDYKKzoxMDJCMjAwMDAyRDA0OTc4MDAyOTAwRDExRTRBQzA0NjAwOTIyMDY4OTAKKzoxMDJCMzAwMDgwMDAxOTRCQzMxODA1Q0VDMTFEMTEzMTAxMjAwMkYwRDAKKzoxMDJCNDAwMEM3RkUxNDQ4MjE2ODAxMzEyMTYwMTcyOTAwRDMyNTYwOTAKKzoxMDJCNTAwMDM5NkJDMDQ2MEQ2NTc5NkEzQTZCQzA0NjUxNjIzMzIzQzIKKzoxMDJCNjAwMDlCMDFDMDE4ODE2ODAwMjkwM0QxMzk2QkMwNDY4MTYwODAKKzoxMDJCNzAwMDA0RTAzOTZCQzI2OEMwNDYxMTY1Mzk2QkMwNDZDMTYwNUMKKzoxMDJCODAwMEY4QkMwOEJDMTg0NzAwMDBFQTA1MDAwMDE4MDAxNDAyNTEKKzoxMDJCOTAwMDdDMjkwMDgwNjgwRTAwODA0NDgyMjA0MEU4MEUwMDgwN0UKKzoxMDJCQTAwMDA0MDAwMDAyMDQwMDAwMDNGMEI1MTE0RUZGMjUwMTM1QkEKKzoxMDJCQjAwMDEwNEZDMDQ2MzU2MDc4NjkwMTM4Nzg2MUJDNjgwMDJDRDgKKzoxMDJCQzAwMDEwRDAyMDZEQzA0NkI4NjAyMDFDMDBGMDIxRjgyMDFDRjkKKzoxMDJCRDAwMDAwRjAwNEZBMDg0ODgwNkEwMDBDMDAwN0U5RDFGMEJDNTQKKzoxMDJCRTAwMDA4QkMxODQ3MDU0OEMxNzkwMTMxQzE3MUY3RTcwMDAwRjkKKzoxMDJCRjAwMDAwMDAwMEIwMjgxQjAwODAwMDAwMTA0MEEwODIyMDQwOTAKKzoxMDJDMDAwMDAxMjA4MDAzMDE0OUMwNDYwODYwNzA0NzAwMDAwMEIwMDEKKzoxMDJDMTAwMDkwQjUwNzFDMzg2OEMwMDgwOUQzMUQ0ODAxNkEwMTM5RkUKKzoxMDJDMjAwMDAxNjIyMDMwMDA3OTAwMjgwMUQwRkVGN0U5RkQwMTIzODAKKzoxMDJDMzAwMDlCMDdGODFEMUQzMDE4NDMwMDY4MTY0QzYxNkE4MTQyREQKKzoxMDJDNDAwMDIxRDEwMTFDMTk0MzA5NjgwOTA0MDkwQzAxMjkxQUQxNzEKKzoxMDJDNTAwMDAwRjAyMkY4NjA2MjYwNkEyMTZBODg0MjA1RDAwMTIxOTIKKzoxMDJDNjAwMDg5MDcwMTQzMDk2ODA5MDRGMkQwNTEyMTg5MDM2MjZBODYKKzoxMDJDNzAwMDIzNkI5QTQyMDJEMTYwNkJBMjZCODAxQTA0MzhDODYwNDEKKzoxMDJDODAwMDkwQkMwOEJDMTg0NzAwMjA3OTZBQzA0NjA4NjBGN0U3ODYKKzoxMDJDOTAwMDZDMDYwMDgwRTgxQTAwODAwMTIzOUIwN0MxMUQwMTMxRUEKKzoxMDJDQTAwMDE5NDMwOTY4MDkwNDA5MEMwODE4MEQzMDgxMDcwMkQwN0UKKzoxMDJDQjAwMDgwMDg4MDAwMDQzMDA0NDk4QTZCMTIxODRCNkI5QTQyREEKKzoxMDJDQzAwMDAwRDkwODZCNzA0NzAwMDBFODFBMDA4MDAwQjUwNDQ4N0UKKzoxMDJDRDAwMEMwNjgxMDI4MDFEMzAwRjAwNUY4MDhCQzE4NDcwMDAwQjAKKzoxMDJDRTAwMEU4MUEwMDgwODhCNTBDNEYzODc5MDAyODExRDEwQjQ5QkIKKzoxMDJDRjAwMDEwMjAwMkYwRjVGRDAwMjgwQkQwMDEyMDM4NzEwODRBQTEKKzoxMDJEMDAwMEMwNDYwMDkyMDc0ODQyNjgwNzRCMDE2ODAwMjAwMkYwNjUKKzoxMDJEMTAwMERGRkQ4OEJDMDhCQzE4NDdGODFBMDA4MEY1MkNGRkZGQkYKKzoxMDJEMjAwMDEwMDAzNTAyN0MyOTAwODA0NDgwMjA0MDkwQjUwMTIwQUQKKzoxMDJEMzAwMDQwMDIxMDQ5QzA0NjA4NjAwRjRGMTAyMUY4MUQzRDMwNzkKKzoxMDJENDAwMDAyRjA0Q0ZDMTkyM0RCMDFGQzE4RTA2ODAwMjgwMUQwREMKKzoxMDJENTAwMDAwRjAxNEY4MDAyMEM5MjMxQjAxRjkxODA4NzFFMDY4N0QKKzoxMDJENjAwMDEwMjgwNEQzMDEyMEJCMjMxQjAxRjkxODQ4NzM5MEJDMjEKKzoxMDJENzAwMDA4QkMxODQ3MDAwMDAwQjA2ODBFMDA4MEY4QjUzNzQ4NUUKKzoxMDJEODAwMDE5MjNEQjAxQzExOEM5NjgzNTREMTAyOTAwRDkxMDIxNUMKKzoxMDJEOTAwMDY5NjIzMjQ4QzE2QzAwNkU4MTQyMDdEOTA4MUEwNzA5N0UKKzoxMDJEQTAwMDAwMjQ2ODZBQjg0MjEyRDIwNzFDMTBFMDgxNDIyQUQyN0QKKzoxMDJEQjAwMDJDNEE1MjZCMTAxQTA3MDk2ODZBQjg0MjA1RDkwQzA5RTcKKzoxMDJEQzAwMDM5MTk4ODQyMDNEMkM0MUIwMUUwMDAyNDA3MUMzRTE5QjQKKzoxMDJERDAwMDMwMDEyNTQ5MDJGMDg0RkQwMDI4M0REMDIzNDgwMDJDMTUKKzoxMDJERTAwMDFBRDExRTQ5M0EwMTZGNjIwOTZFOEMxODFENEQ2QjZCMkEKKzoxMDJERjAwMEEzNDIwMEQ4RTQxQTFFNEIxQTQzMDA5MkVBNkE1MTE4MDMKKzoxMDJFMDAwMDJBNkIwMzFDMjBFMDFCNDgwMTZCMDEzMTAxNjMwMDIwODkKKzoxMDJFMTAwMDY4NjJGOEJDMDhCQzE4NDcxMDQ5MjQwMTNGMDExMTIyMjAKKzoxMDJFMjAwMDUyMDUzQTQzNkU2MjAwOTIwRTRERUE2QTA5NkU1MTE4REQKKzoxMDJFMzAwMDAzMUMwNjFDMDAyMDJBNkIwMkYwNEFGRDBDNEEyMjQzQTgKKzoxMDJFNDAwMDAwOTJCQjE5RTk2QTJBNkIwMDIwMDJGMDQxRkQwMzQ4OTkKKzoxMDJFNTAwMEMwNDYwNDY2MDBGMDEwRjgwMTIwREFFNzY4MEUwMDgwMzIKKzoxMDJFNjAwMDI4MUIwMDgwN0MyOTAwODA1RDJFRkZGRjQ0ODAyMDQwQ0QKKzoxMDJFNzAwMDAwMDAzNjAyQTA4MjIwNDAwNDQ4MDE2RTA0NEE4MDMwREYKKzoxMDJFODAwMEQxNjAwMjIzQzE2QjE5NDNDMTYzNzA0NzY4MEUwMDgwOTMKKzoxMDJFOTAwMDkwRUUyMDQwRjBCNTg0QjAwMTIwODAwMjFDNDlDMDQ2NkQKKzoxMDJFQTAwMDA4NjAwMDI3MUI0RTMzMjM5QjAxRjUxODY4NkEwMDI4MzEKKzoxMDJFQjAwMDFERDkxOTRDNjg0NjEwMjEwMkYwOTBGQjY4NDYwMEYwQkQKKzoxMDJFQzAwMDMzRjgwMDI4MDREMDE1NDk0ODY5MDEzMDQ4NjEwQUUwMDgKKzoxMDJFRDAwMDEzNDk2MDdCMDEzMDYwNzM4ODc5MDEzMDg4NzExMTQ4MzMKKzoxMDJFRTAwMDAwNjgwMkYwNjVGOTY4NkEwMTM3Qjg0MkUyRDhCQjIzOEUKKzoxMDJFRjAwMDFCMDFGMDE4ODE3QjAwMjkwM0QwMDAyMTgxNzNGRkY3QUIKKzoxMDJGMDAwMDA1RkJGRkY3RTNGRTA0QjBGMEJDMDhCQzE4NDcwMDAwNjcKKzoxMDJGMTAwMDAwMDAwMEIwNjgwRTAwODBCMDgyMjA0MDA4ODMyMDQwOEUKKzoxMDJGMjAwMEEwODIyMDQwNTgwNDAwODA5MEI0MTc0RjE5MjNEQjAxODEKKzoxMDJGMzAwMEY5MTgwMDIyQ0I2ODAwMkIyM0QwMDEzQkNCNjAzMzIzNTAKKzoxMDJGNDAwMDlCMDFGRjE4QkI2OTFDNkRDMDQ2QkM2MTA0NjhDMDQ2OEMKKzoxMDJGNTAwMDVDNjA0NDY4QzA0NjlDNjA4NDY4QzA0NjFDNjFDMDY4NzAKKzoxMDJGNjAwMEMwNDY1ODYxMUE2NTA4Njk0MjFDMEE2MTAwMjgwM0QwRUUKKzoxMDJGNzAwMDM4NkFDMDQ2MDM2NTAwRTBGQjYxM0I2MjE4MUM5MEJDRTgKKzoxMDJGODAwMDcwNDcxMDFDRkJFNzAwMDA2ODBFMDA4MDBBNEEzMzIzREMKKzoxMDJGOTAwMDlCMDFEMTE4Qzg2OTE5MjNEQjAxRDIxODEzNjkwMDJCRDIKKzoxMDJGQTAwMDA2RDAwMTNCMTM2MUNBNjkxMjZEQzA0NkNBNjE3MDQ3MDEKKzoxMDJGQjAwMDAwMjExMTYxRkJFNzAwMDA2ODBFMDA4MDA2NEExMTY5REMKKzoxMDJGQzAwMDRCMUMxMzYxNDAzMjAwMjkwMUQwRDE2OTAwRTAwMDIxN0YKKzoxMDJGRDAwMDAxNjVEMDYxNzA0NzAwMDBFODFBMDA4MDA2NEFEMTY4OTgKKzoxMDJGRTAwMDRCMUNEMzYwNDAzMjAwMjkwMUQwOTE2OTAwRTAwMDIxRTAKKzoxMDJGRjAwMDAxNjU5MDYxNzA0NzAwMDBFODFBMDA4MDkwQjQwMDIxREMKKzoxMDMwMDAwMDBGNEE5Nzg5OTI2QTRCMDAxQjE4OUI4QTAwMkIxMkQwOUIKKzoxMDMwMTAwMEJCNDIxMERDMUMxQzU4MjM2MzQzRDMxOERDMUY0OTNDMDMKKzoxMDMwMjAwMDAxMjM5QjA3MjM0MzFCNjgxQjA2MUIwRTAzMkIwMkQwQTcKKzoxMDMwMzAwMDAwMjA5MEJDNzA0NzAxMzEwNDI5RTREMzAxMjBGOEU3NTcKKzoxMDMwNDAwMDRDMkEwMDgwRjdCNTg2QjAzRDRBMDcxQ0QxNjk4RjQwRjUKKzoxMDMwNTAwMDAzMUMxNDZBRTM0MDVGNDAwNzlFOEU0MDc3NDBDRjQwRDgKKzoxMDMwNjAwMDk0NjlDMDQ2MDU5NDAzMUNBMzQwMDAyNTE0NjlDMDQ2MUEKKzoxMDMwNzAwMDA0OTQwMDJDNUREOTFDMUMzMjRFMjY0Mzk0NjlFNjQwMTIKKzoxMDMwODAwMDMzMUMwMzk2NTM2QUMwNDYwMjkzRDI2QUMwNDYwMTkyMkIKKzoxMDMwOTAwMEJCMDAwMjlBRDI1ODEzMUMwNTlDRTM0MDAzOUNBMzQyMzgKKzoxMDMwQTAwMDNFRDE4QTQwQ0E0MDE0MUM2MzAwMUIxOTVCMDEwMTlBN0YKKzoxMDMwQjAwMEQyMTgwMTIzOUIwN0Q2MUQwMTM2MzM0MzFCNjgxQjA2MUMKKzoxMDMwQzAwMDFCMEUwMzJCMkNEMTAxMjM5QjA3RDYxRDUxMzYzMzQzRjYKKzoxMDMwRDAwMDFCNjgwNzlFMUU0MDAwOTYwMTIzOUIwN0Q2MUQ0OTM2OUMKKzoxMDMwRTAwMDMzNDMxQjY4ODM0MjFCRDEwMTIzOUIwN0Q2MUQ0RDM2RkEKKzoxMDMwRjAwMDMzNDMxQjY4MDA5RUIzNDIxMkQxMDEyMzlCMDcxQTQzM0UKKzoxMDMxMDAwMDEyNjgxMjA0MTIwQzA4OUIzMjJCMDREMTAyMkEwN0QxMzgKKzoxMDMxMTAwMDIwMDQwMDE0MEZFMDA4OUIzMzJCMDFEMTAxMkFGN0QwQzMKKzoxMDMxMjAwMDA0OUEwMTM3OTc0MjAwRDMwMDI3MDQ5QTAxMzVBQTQyMzYKKzoxMDMxMzAwMEFFRDgwMDIwQzA0MzA5QjBGMEJDMDhCQzE4NDcwMDAwNUUKKzoxMDMxNDAwMDRDMkEwMDgwMDAwMDAwODBGMEI1Mjc0RDY4NjkwMDI4RjcKKzoxMDMxNTAwMDA2RDAyNjQ4MDA2ODAyRjAyQkY4RjBCQzA4QkMxODQ3REYKKzoxMDMxNjAwMDIzNEMwMDI2QTA2ODIzNEYwMDI4MTZEMDBGRTAyODZBQzEKKzoxMDMxNzAwMDAyMjgwMkQzMDEyMDM4NzEwRkUwQTY2MEZERjdERUZFQzEKKzoxMDMxODAwMDAwMjhFQUQxMjg2QTAyMjgwMUQzMDEyMDM4NzFFODY4QjIKKzoxMDMxOTAwMDAwMjgwMkQwMzg3OTAwMjhFOUQwNjg2ODAwMjgxQkQwQzAKKzoxMDMxQTAwMDAxMjBBMDYwRkVGN0JDRkIwMDI4RDZEMTY4NjgwMDI4OEIKKzoxMDMxQjAwMEY2RDExMUUwMDAyOEQwRDEyODZBMDIyODAyRDMwMTIwREMKKzoxMDMxQzAwMDM4NzFDQUU3QTY2MEZERjdCOUZFMDAyOEM1RDEyODZBQTQKKzoxMDMxRDAwMDAyMjgwMUQzMDEyMDM4NzFFODY4MDAyOEJERDAzODc5NzEKKzoxMDMxRTAwMDAwMjhFN0QwQjlFNzAwMDA2QzA2MDA4MDVDMDQwMDgwOEUKKzoxMDMxRjAwMDRDMkEwMDgwOEMwNjAwODA3MDQ3MDAwMDcwNDcwMDAwNTkKKzoxMDMyMDAwMDcwNDcwMDAwOTBCNTQwMjAxRDQ5QzA0NjA4NjAwMUYwOUQKKzoxMDMyMTAwMDlERkMwMzIzMUIwNzQxNjgxOTQwMEMwRjYxMDEwOTFCMkEKKzoxMDMyMjAwMDg5MDAxODRBOEYxODAxMjEzOTgwODE2QUMwNDY3OTY1NjIKKzoxMDMyMzAwMDQxNkFDMDQ2Nzk2N0I5NkNGQTZDODkxOEI5NjQwMDIxOTMKKzoxMDMyNDAwMEY5NjRCQTZCM0I2REQyMThCQTYzMzk2NTQyNkEyMDMyQjEKKzoxMDMyNTAwMDUxNzE3OTZEN0E2RkQyNkRDMDQ2MTE2MEZDRjdDQUZGNkIKKzoxMDMyNjAwMDIwMDEwOTQ5NDAxODE5MjNEQjAxQzAxODQxNkIwMTM5QkQKKzoxMDMyNzAwMDQxNjM3ODZGMDFGMEM2RkI5MEJDMDhCQzE4NDcwMDAwQTIKKzoxMDMyODAwMDAwMDAwMEIwNUMyQjAwODBBMDFDMDA4MEYwQjU0MDIwNDYKKzoxMDMyOTAwMDEyNDlDMDQ2MDg2MDAxRjA1OUZDMDcxQzQwNjgwMzIzMkUKKzoxMDMyQTAwMDFCMDcxODQwMDYwRjcwMDE4MDFCODAwMDBDNDk0NDE4NTIKKzoxMDMyQjAwMEI4NkFDMDQ2NjA2NTc4NkFDMDQ2NjA2NzgwNkYwNTFENjEKKzoxMDMyQzAwMEU1NjNCOTY5MjgxQzAyRjA4OUY5MzgxQzIxMUMzMjFDRkQKKzoxMDMyRDAwMDJCMUMwMEYwMjBGOEYwQkMwOEJDMTg0NzAwMDAwMEIwMjAKKzoxMDMyRTAwMDVDMkIwMDgwRjBCNTRCNkY5QjZGMUYxRENGNjMwNTY4OTMKKzoxMDMyRjAwMDAwMjM4NDY5QTQwODA4RDA5QzAwMkU1OUMwNDYzRTUxODIKKzoxMDMzMDAwMDg0NjlBNDA4MDEzMzlDNDJGNkQ4M0IxQzAwRjAwM0Y4MDIKKzoxMDMzMTAwMEYwQkMwOEJDMTg0N0ZGQjU4MUIwMDQxQzFEMUMwRjFDNzUKKzoxMDMzMjAwMDQ2NDgwMTY5MDEzMTAxNjFGOTFENTEzMUJENjUwMDkxQzYKKzoxMDMzMzAwMDIwMUNGREY3NURGQ0Y4NkQ0MDA5MzZEMkI4NkQwNjdCQTgKKzoxMDMzNDAwMDQzN0IxQjAyMUU0MzE3MjE0OTAyMDE3MzBCMEE0MzczN0YKKzoxMDMzNTAwMDAwOTkyMDFDRkRGNzRDRkNCODZEQzA0NjA2NzMzMzBBN0IKKzoxMDMzNjAwMDQzNzNGODZENDAwOTIwRDI2MDY4MDEwNDA5MEMwMzk4OEEKKzoxMDMzNzAwMDAxRjBDQ0ZDNjA2ODMyNEIxODQzNjA2MDIwMUMwMUYwMDcKKzoxMDMzODAwMDM1RkQwMDI1N0Q2MEJENjAzRDY0N0Q2NDIwMUNGQ0Y3M0IKKzoxMDMzOTAwMDMxRkYzODg4NDAyMzE4NDMzODgwN0Q2MjI5NDhDMDQ2NzEKKzoxMDMzQTAwMEI4NjIzODFDMDBGMEEwRkI0NEUwMjA2ODAxMjM5QjA3QjIKKzoxMDMzQjAwMDA4MzgxODQzMDA2OEMwNDY3ODY0NjA2ODAyMDQxMjBDM0MKKzoxMDMzQzAwMDc4NkUwMTI2QzExRDBEMzE4QTQyMDJEMjNBNjQwODFDNzIKKzoxMDMzRDAwMDBFRTA0MTE5ODk4OUYwMjMxOTQwMDkwOTg5MDA0MDE4MzQKKzoxMDMzRTAwMEY4NjBGOTYxNjE2ODA5MDQwOTBDODE0MjE2RDIzOTY0RjgKKzoxMDMzRjAwMDYzNjgxOTA0MDkwQzQwMUEwMzMwODAwODgyMDBBMDYxMzgKKzoxMDM0MDAwMDIwNjgwOTE4OUIxODYzNjBDMzFGMDUzQjM4MUMwMEYwMzcKKzoxMDM0MTAwMEI2RkE3RTgwMjAxQzAwRjBCRkZCMEJFMEI5NjgwODFBRUEKKzoxMDM0MjAwMDAwMjU3ODYyQkQ2MjM4MUMwMEYwM0NGQzIwMUMzOTFDNzEKKzoxMDM0MzAwMDAwRjA2NEY4MDVCMEYwQkMwOEJDMTg0NzBDMkIwMDgwMDUKKzoxMDM0NDAwMDAwMDAwMDgwMDEwMDAwQzBGMEI1MDQxQzBGMUMzODZDQTcKKzoxMDM0NTAwMEY5NkIwRDE4MjE2ODQxMTgwMDIwQTI2OTAwMkEwQkQ5QzgKKzoxMDM0NjAwMDgyMDA1NjE4MDEyMzlCMDczMzQzMUI2OEMwNDZBQjUwQUMKKzoxMDM0NzAwMEEyNjkwMTMwODI0MkYzRDg3ODZFRjk2QjA5MTg4OTg5MDQKKzoxMDM0ODAwMEYwMjMxOTQwMDkwOTg5MDA0MDE4Rjg2MEY5NjEyMDY4QTMKKzoxMDM0OTAwMDAxMjM5QjA3MDgzODE4NDMwMTY4Nzg2Q0ZDRjc5NUZGRjcKKzoxMDM0QTAwMDc4NjQ2MDY4MDEwNDA5MENGODY4ODE0MjE5RDIzOTY0QjMKKzoxMDM0QjAwMDYzNjgxOTA0MDkwQzQwMUEwMzMwODAwODgyMDBBMDYxNzcKKzoxMDM0QzAwMDIwNjgwOTE4OUIxODYzNjBDMzFGMDUzQjM4MUMwMEYwNzcKKzoxMDM0RDAwMDU2RkEwMTIwNzg4MDIwMUMwMEYwNUVGQkYwQkMwOEJDOEUKKzoxMDM0RTAwMDE4NDdCOTY4MDgxQTc4NjIwMDIwQjg2MjM4MUMwMEYwRTIKKzoxMDM0RjAwMEQ5RkIyMDFDMzkxQzAwRjAwMUY4RUZFN0YwQjU4NEIwQ0YKKzoxMDM1MDAwMDA0MUMwRjFDOEU0ODQxNjkwMTMxNDE2MTAzMjAwMDA3RjIKKzoxMDM1MTAwMDYxNjgwODQwMDYwRjBBMDQxMjBDMjA2ODExMThGQjY4NDUKKzoxMDM1MjAwMEQyMUE3QjY4OUQxQUMzMUYwNTNCMzgxQzJBMUMwMEYwNjkKKzoxMDM1MzAwMDI2RkEwMDIwNzg4MDIwMUMwMEYwMkVGQjYwNjg0MDE5REQKKzoxMDM1NDAwMDAxMDQwOTBDNjA2MDMwMUMwMUYwRTBGQjdENEUwQjIzOTAKKzoxMDM1NTAwMDFCMDJGMDE4MDA2OTAwMjgxOUQwMDAyNTJEMjM5QjAxQkIKKzoxMDM1NjAwMEYwMThDMDY4MDAyODEyRDBBQTAwOTIxOTJEMjM5QjAxRTAKKzoxMDM1NzAwMEQyMThEMjY4MjAxQzM5MUMwMUYwMUNGRTAxMzVBODAwQUQKKzoxMDM1ODAwMDgwMTkyRDIzOUIwMUMwMThDMDY4MDAyOEVDRDFGODZCNkUKKzoxMDM1OTAwMDAxMUY4QTFDRkE2M0ZBNjg3RDZDMDBGMEJCRjlDMDQzMTYKKzoxMDM1QTAwMDAxMDQwOTBDMjgxQ0ZDRjcxMEZGMDM5MEY5NkIzQTZFMUMKKzoxMDM1QjAwMDhFMTgyMDY4MTIxODAxOTI3QTZFOEQxODExMTgwMjkxRDcKKzoxMDM1QzAwMEM4MUQwOTMwRTA2MEIxODgwODAyMDkwQTA5MDYwOTBFMjEKKzoxMDM1RDAwMDA4NDMwMDA0MDAwQzc4NjE2ODY4MDEwRUZGMjIxMjA0QTEKKzoxMDM1RTAwMDAyNDAxMjBBMTE0M0ZGMjIxMjAyMDI0MDEyMDIxMTQzNEEKKzoxMDM1RjAwMDAwMDYwODQzMzg2MUE4ODkwOTIzMUIwMjE4NDBCODYxRjYKKzoxMDM2MDAwMEE4ODk5ODQzQTg4MUE4ODkwMjk5QzA0Njg4ODEwMDIwOEEKKzoxMDM2MTAwMDcwODBCMDgwNzA4MTY4NjAyODgyQjk2RTMwMUNGQ0Y3QzEKKzoxMDM2MjAwMEU4RkUzODg2RkE2OTMwMUMyOTFDRkNGNzAzRkY3ODg2MEYKKzoxMDM2MzAwMDNEOEU3ODhFMDM5OUZDRjdDOEZFMDA5MDYwNjgwMDA0MDgKKzoxMDM2NDAwMDAwMEMzOTZFNDExQTA5MDQwOTBDN0E2RTgyMUExMzA0QUYKKzoxMDM2NTAwMDFCMEMxQTAyMUIwQTFBNDMxNjA0MzYwQ0JBNjg4MjQyNjMKKzoxMDM2NjAwMDAxRDIwMDIwMDBFMDEwMUFCODYwMDgwMjA5MTIwOTA2MTEKKzoxMDM2NzAwMDA5MEUwODQzMDEwNDA5MEMwMTk4QzA0NjQxODAyODFDMkEKKzoxMDM2ODAwMEZDRjdBM0ZFMDUxQzAwOTgzMTFDRkNGNzlFRkUwNjFDRUYKKzoxMDM2OTAwMDc4NjkwMDA0MDAwQzAxMDIwMDBBMDg0MzAxMDQwOTBDQzcKKzoxMDM2QTAwMDAxOThDMDQ2ODE4MDI4MUNGQ0Y3OEZGRTc5NjkwMTMxQTIKKzoxMDM2QjAwMEMwNDM3OTYxMDE5QUMwNDY1MDgxMzg2OTAxMEVGRjIyRUEKKzoxMDM2QzAwMDEyMDQwMjQwMTIwQTExNDNGRjIyMTIwMjAyNDAxMjAyQTcKKzoxMDM2RDAwMDExNDMwMDA2MDE0MzMwMUNGQ0Y3NzdGRTM5Njk3QTY4MTQKKzoxMDM2RTAwMDg5MTgzOTYxQjk2ODAwMjkwOUQxMDI5OTg5ODlCQTY5QUIKKzoxMDM2RjAwMDExNDMwMjlBQzA0NjkxODFCOTY5RkNGNzY2RkUyMDgyQTcKKzoxMDM3MDAwMDAwMjA2MDgyRjg2RDQxMDgxNkQzODAwQTBBRDM2MDY4RjEKKzoxMDM3MTAwMDEwMzgwMTA0MDkwQzA4MDIwOTBBMDg0MzIxNjhDMDQ2NTAKKzoxMDM3MjAwMDA4ODIwOUUwNjA2ODBDMzgwMTA0MDkwQzA4MDIwOTBBRTMKKzoxMDM3MzAwMDA4NDMyMTY4QzA0Njg4ODEwNEIwRjBCQzA4QkMxODQ3MjMKKzoxMDM3NDAwMDBDMkIwMDgwNjgwRTAwODBGMUI1ODRCMDZFNEQyODY5QTYKKzoxMDM3NTAwMDAxMjIwNDk5OEE0MDkwNDMyODYxMDQ5ODQzMDExODFBNzEKKzoxMDM3NjAwMDgwMDAxNjFDNjk0OTQ0MThFMDZCQzA0NjAwOTBBMDY4QjAKKzoxMDM3NzAwMDAwMjgwMUQxMDAyNjI2RTA2NTQ4NDE2OTAxMzE0MTYxRjgKKzoxMDM3ODAwMDA0OThGQ0Y3MDlGRDA3MUMwM0QxMjg2OTMwNDMyODYxMjAKKzoxMDM3OTAwMEI1RTBBMDY4NjU2OEE4NDIwMEQyMDUxQ0ExNkNBOTQyRUEKKzoxMDM3QTAwMDE2RDI0MDFBNjI2QTEwMUEwMDI2NjA2MkE2NjBBNjYyRUIKKzoxMDM3QjAwMDIwODg0ODIzMTg0MzIwODAwRDFDMDlEMTM4MUNGQ0Y3QjEKKzoxMDM3QzAwMDE5RkQwMzIwNjA4MDY2NjAyMDFDMDBGMDhERjk5NkUwRjIKKzoxMDM3RDAwMEUxNjgzODY4MDkxOEMzMUYwNTNCMjAxQzAyMzkyQTFDMDAKKzoxMDM3RTAwMDAwRjBDREY4MzgxQzAwRjBEN0Y5RTA2ODQ2MTk3ODY4ODkKKzoxMDM3RjAwMDMwNDM3ODYwMDQ5ODMxMUMwMUYwODhGQTIxNkUwMDk4RkIKKzoxMDM4MDAwMDA4MTgwMTkwNzAxQTAwMDQwMDBDNjE2RTcxMUEwQTA0MDUKKzoxMDM4MTAwMDEyMEMxMTAyMTIwQTExNDMwOTA0MDkwQzAyOTEwMTAyNEYKKzoxMDM4MjAwMDAwMEEwODQzMDEwNDA5MEMwMTk4QzA0NjQxODAyMDhFMUIKKzoxMDM4MzAwMEZDRjdDQkZEMDYxQzYwOEUwMjk5RkNGN0M2RkQwMzkwRDkKKzoxMDM4NDAwMDYwNjkwMTA0MDkwQzA4MDIwOTBBMDg0MzAxMDQwOTBDMTMKKzoxMDM4NTAwMDAxOThDMDQ2ODE4MDMwMUNGQ0Y3QjdGRDYxNjkwMTMxRDkKKzoxMDM4NjAwMEMwNDM2MTYxMDE5OUMwNDY0ODgxNjA2RTAwOTk0NjE4NjUKKzoxMDM4NzAwMDIwNjkwMTBFRkYyMjEyMDQwMjQwMTIwQTExNDNGRjIyQTYKKzoxMDM4ODAwMDEyMDIwMjQwMTIwMjExNDMwMDA2MDE0MzcxNjAwMzk4QzQKKzoxMDM4OTAwMEZDRjc5QkZEMjE2OTQ5MTkyMTYxQTE2ODQ5MUJBMTYwQzEKKzoxMDM4QTAwMDA2RDFCMTg5QTI2OTExNDNCMTgxQTE2OUZDRjc4REZERUYKKzoxMDM4QjAwMDM4ODI2MTZFMzg2ODA5MTgwRTMxRjk2MEUyNjgwMDk5NDMKKzoxMDM4QzAwMDA0MzgwMEYwNENGODAyMjA3ODgyRTA2RDQxMDgxNkQzRUQKKzoxMDM4RDAwMDgwMEEwQUQzNzg2ODEwMzgwMTA0MDkwQzA4MDIwOTBBMjIKKzoxMDM4RTAwMDA4NDMzOTY4QzA0NkM4ODEwOUUwNzg2ODBDMzgwMTA0OEIKKzoxMDM4RjAwMDA5MEMwODAyMDkwQTA4NDMzOTY4QzA0NjQ4ODEwNUIwMjYKKzoxMDM5MDAwMEYwQkMwOEJDMTg0NzAwMDBEMDJDMDA4MDVDMkIwMDgwNjUKKzoxMDM5MTAwMDBDMkIwMDgwRjdCNTAzMUMwRjFDMDAyMDFDNjgyNjA0MkMKKzoxMDM5MjAwMDMxMUMxRDFERkNGNzUxRkQ0MEM3MDI5QUQxMUM4OTA4QUUKKzoxMDM5MzAwMDAxMzk0QTFFMDI5MjAwMjkwREQwMjEwQzEwQ0QyMjA0MUIKKzoxMDM5NDAwMDBBNDMxMTFDMTYxQ0ZDRjc0MEZENDBDNzAyOTk0QTFFOTEKKzoxMDM5NTAwMDAyOTIwMDI5RjFEMTAzQjBGMEJDMDhCQzE4NDc4MDA4REUKKzoxMDM5NjAwMDgwMDA4OTA4ODkwMDAzMzI5MzA4NUExRTAwMkIwNUQwNzUKKzoxMDM5NzAwMDA4QzkwOEMwMTMxQzAxM0EwMDJCRjlEMTcwNDdGRkI1RTQKKzoxMDM5ODAwMDg2QjAxNzFDMDAyNjA2OTg4MDZDQzAxQjA2OTlDMDQ2OUUKKzoxMDM5OTAwMDg4NjQwMTIwQzAwNTA2OTk4OTZCQzA0NjAxOTEwNjk5OEIKKzoxMDM5QTAwMDRDNkI2N0UwMjE2OEMwNDYwMjkxNjE2OEMwNDYwMzkxOTQKKzoxMDM5QjAwMEExNjhDMDQ2MDQ5MTAyQTk0OTg4Qjk0MjA4RDIwMkFENjMKKzoxMDM5QzAwMDZEODgwMkE5NDk4ODdGMUEwMDIxMDJBQjU5ODAxOUUwNEQKKzoxMDM5RDAwMDAyQTk0OTg4QzkxQjAyQUI1OTgwM0QxQzAwMjcwMTIxNUYKKzoxMDM5RTAwMDQ5MDYwNzlCOUEwNzkyMEYwREQwRUIwNkRCMEUwOEQwMTUKKzoxMDM5RjAwMDFFMkIwOEQzMUUyQjAyRDEwMzJBMDREMTAxRTAwMjJBNzgKKzoxMDNBMDAwMDAxRDMwMTI2MDAyMTI5NDMwMTQzMEExQzAwOTEwMDIwMTMKKzoxMDNBMTAwMDAzOTkwNDlBMDc5QjAxRjA1QkZGMDc5OTQ5MTkwNzkxRTUKKzoxMDNBMjAwMDAwMkUwQUQwMUQ0QUMwNDYwMDkyMUQ0ODAxNkQ0MjZEMEQKKzoxMDNBMzAwMDAwMjAwNzlCMDFGMDRDRkYwMDI2MDJBODQwODgwMDI4QzgKKzoxMDNBNDAwMDBDRDAwMzk4NDAxOTAzOTAwMjk4QzA0NjIwNjAwMzk4NTgKKzoxMDNBNTAwMEMwNDY2MDYwMDQ5OEMwNDZBMDYwMDNFMDAxOTgwMTM4NDkKKzoxMDNBNjAwMDAxOTAxMDM0MDY5OEMwNDY0NDYzMDE5ODA2OTlDMDQ2RjgKKzoxMDNBNzAwMDg4NjMwMDIwMDAyRjAyRDAwMTk5MDAyOTkyRDEwOTRBQzEKKzoxMDNBODAwMEMwNDYwMDkyMDY0ODAxNkQ0MjZEMDAyMDA5OUIwMUYwN0UKKzoxMDNBOTAwMDFGRkYwQUIwRjBCQzA4QkMxODQ3MDAwMDAxMDAwMDAyN0MKKzoxMDNBQTAwMDdDMjkwMDgwMDQwMDUzMDI5MEI1MEMxQzA3MUMzODY4NjgKKzoxMDNBQjAwMDAxMjM5QjA3MDgzODE4NDMwMTY4Mzg4QUZDRjc4NUZDMDYKKzoxMDNBQzAwMEMwNDNGOTY4QzA0NjA4ODA3ODhBMzk2ODA4MUEzODYwQTcKKzoxMDNBRDAwMDM4MUMwMUYwOEJGOTM4MUNGQ0Y3OENGQjIwMUNGRkY3MUQKKzoxMDNBRTAwMDMzRkU5MEJDMDhCQzE4NDc4MEI1MDE4ODhBMDkyMUQzRjEKKzoxMDNBRjAwMENBMDkxRkQyOEEwODFERDMwMDIxMDE4MDQxODA0NzZGNjcKKzoxMDNCMDAwMDQwNkRGQTFEMTkzMjUxNzFGQTZEQzA0NjEwNjAzQTZFNUYKKzoxMDNCMTAwMEMwNDYxMDYwMEM0OEMwNDY4MTYzQzE2QjQ5MDg0OTAwMkIKKzoxMDNCMjAwMEMxNjMwMTIwMDBGMENDRkYzODFDMDBGMDZCRkY4MEJDQUIKKzoxMDNCMzAwMDA4QkMxODQ3ODAyMzE5NDMwMTgwMDE4ODQ5MDlGNkQyM0YKKzoxMDNCNDAwMDAwRjBCMEY4RjNFNzAwMDBFODBFMDA4MEYwQjUwNzFDQzUKKzoxMDNCNTAwMDEwMUMwRDFDMDAyNDVFMUUwMDJCMTlEMDAxNjhDMDQ2RUQKKzoxMDNCNjAwMDM5NjA0MTg4MEMxOTQxNjhDMDQ2Nzk2MDgxNjhDMDQ2NTcKKzoxMDNCNzAwMEI5NjBDMTY4QzA0NkY5NjAxMDMwMTAzN0U5NkE4MTQyMDcKKzoxMDNCODAwMDAyRDgyODFDMDBGMEVDRkYzMTFDMDEzRTAwMjlFNUQxRDEKKzoxMDNCOTAwMDIwMUNGMEJDMDhCQzE4NDcwMDIxQzE2MTA1NDkwQTY4MTcKKzoxMDNCQTAwMDAwMkEwMUQxMDg2MDAyRTA0QTY4QzA0NkQwNjE0ODYwM0UKKzoxMDNCQjAwMDcwNDcwMDAwRDAyQzAwODAwMzQ5MDg2ODAwMjgwMkQwMUMKKzoxMDNCQzAwMEMyNjlDMDQ2MEE2MDcwNDdEMDJDMDA4MDAwMjE4MTY3MUUKKzoxMDNCRDAwMDA1NDk4QTY4MDAyQTAxRDE4ODYwMDJFMENBNjhDMDQ2QTcKKzoxMDNCRTAwMDkwNjdDODYwNzA0NzAwMDBEMDJDMDA4MDAzNDk4ODY4NDcKKzoxMDNCRjAwMDAwMjgwMkQwODI2RkMwNDY4QTYwNzA0N0QwMkMwMDgwQjcKKzoxMDNDMDAwMDAwQjU4MDIwMTM0OUMwNDYwODYwRkZGN0Q1RkYwMDI4QTMKKzoxMDNDMTAwMDFCRDAwMzIzMUIwNzQxNjgxOTQwMEEwRjUxMDE4OTFBNjEKKzoxMDNDMjAwMDg5MDAwRDRCQzkxODRCODgwMDJCMDREMTExMUNGRkY3REMKKzoxMDNDMzAwMDNCRkYwOEJDMTg0NzAxMkIwMkQxRkZGNzA1RkNGOEU3NTIKKzoxMDNDNDAwMDAyMkJGNkQxRkZGNzRFRkJGM0U3MDQ0ODAxNkQwMTMxN0IKKzoxMDNDNTAwMDAxNjVFRUU3MDAwMDAwQjA1QzJCMDA4MEEwODIyMDQwRjAKKzoxMDNDNjAwMDAwQjUyMDIwMEQ0OUMwNDYwODYwRkZGN0JGRkYwMDI4QkYKKzoxMDNDNzAwMDBFRDAwMTg4MjAyMzE5NDMwMTgwMDE4ODEwMjM5OTQzMjUKKzoxMDNDODAwMDAxODAwMTg4MDkwQTAxRDNGRkY3MkVGRjA4QkMxODQ3RkQKKzoxMDNDOTAwMDAzNDgwMTZEMDEzMTAxNjVGOEU3MDAwMDAwMDAwMEIwNDQKKzoxMDNDQTAwMEEwODIyMDQwOThCNTA3MUMyMjQ4QzA0NjAwOTAyMjQ4QjgKKzoxMDNDQjAwMEMzMUQ0MTMzNDE2RDgyNkQ4MDZDMDAwMzAwMEI5QzY4MTUKKzoxMDNDQzAwMDAxMjM5QjA3MjM0MzFCNjg5ODQyMDBEMTBDRTA5ODQyRDQKKzoxMDNDRDAwMDAzRDkxMDFBNTkxQTQxMTgwMEUwMTkxQTAxMjAxMDI5QTUKKzoxMDNDRTAwMDAwRDgwMDIwMDAyODFGRDA3ODZBRjk2QUMwNDYwODYwMTIKKzoxMDNDRjAwMEI4NkFGOTZBQzA0NjQ4NjAxMDRBQzA0NjAwOTJGQjZBM0EKKzoxMDNEMDAwMDBGNDg0MjZEMDMyMDM5NkEwMUYwRTJGRDM4ODgxMDIzMjQKKzoxMDNEMTAwMDE4NDMzODgwMzg4ODQwMjM5ODQzMzg4MDM4MUNGRkY3OTAKKzoxMDNEMjAwMDU1RkY5OEJDMDhCQzE4NDczODg4NDAyMzE4NDMzODgwOTIKKzoxMDNEMzAwMEY3RTcwMDAwNTU1NTU1NTVBODAzMDA4MDA4MDAxMTAyMEIKKzoxMDNENDAwMDdDMjkwMDgwQjBCNTQwMjAyQzQ5QzA0NjA4NjAwMEYwQjYKKzoxMDNENTAwMEZERkUwNzFDNDA2ODAzMjMxQjA3MTg0MDA1MEY2ODAxODAKKzoxMDNENjAwMDQwMUI4MDAwMjY0OTQ0MTgyMDg4MDIyMzE4NDMyMDgwRTUKKzoxMDNENzAwMDIwODg0MTA4MzREMzQwMDg0MDAwMjA4MEEwNkNFMTZDQ0EKKzoxMDNEODAwMDQwMThBMDY0MDAyMEUwNjRBMTZCMjI2RDg5MThBMTYzMzMKKzoxMDNEOTAwMDIwNjVCODZBQzA0NjYwNjUwMzIzMUIwNzc4NjgxODQwMzEKKzoxMDNEQTAwMDc4NjA2MTY4MzYzMTk0MjkwNEQ4MzgyMzE4NDM3ODYwRTQKKzoxMDNEQjAwMDM4MjAwM0UwOTQyMzE4NDM3ODYwOTQyMEI4NjEzOTY4NzAKKzoxMDNEQzAwMDc4NjgwMjA0MTIwQzIwMUNDQjFGMDUzQkZGRjdEN0ZEQkYKKzoxMDNERDAwMDAyMjA2MDgwMzgxQ0ZGRjdERkZFQjBCQzA4QkMxODQ3MkIKKzoxMDNERTAwMDM4MUNGQ0Y3MDdGQTI4MDEwNjQ5NDAxODE5MjNEQjAxQTMKKzoxMDNERjAwMEMwMTg0MTZCMDEzOTQxNjNFRkU3MDAwMDAwMDAwMEIwREIKKzoxMDNFMDAwMDVDMkIwMDgwQTAxQzAwODA5MEI1MDAyNzBGNEMwREUwQkIKKzoxMDNFMTAwMDQyNkIwMTNBNDI2MzAwMkEwNURDMDI2QkMwNDY0MjYzRjIKKzoxMDNFMjAwMEMwNkEwMUYwQzZGOTAxMzcwQjJGMDdEMjM4MDEwMDE5MUIKKzoxMDNFMzAwMDMzMjM5QjAxQzAxODgxNkEwMDI5RTlEMTAxMjA0MDA2ODMKKzoxMDNFNDAwMDAzNDlDMDQ2MDg2MDkwQkMwOEJDMTg0NzY4MEUwMDgwNTMKKzoxMDNFNTAwMDAwMDAwMEIwMTA0OEMxNjgwMTMxQzE2MDBGNDlDODY4NTYKKzoxMDNFNjAwMDAxMjgxN0QxQzgxRDc5MzAwMjg5MDAyQTEyRDAwMTNBRTEKKzoxMDNFNzAwMDAyODEwMjg5MDAyQTBERDE0Mjg5MDAyQTA4RDFDOTZGMjYKKzoxMDNFODAwMDAyMjMwQTY4MUE0MzBBNjAwNDIxMDE4MTAxMjEwMEUwMkIKKzoxMDNFOTAwMDAwMjE0MTgxNzA0NzAwMDAwODgzMjA0MDY4MEUwMDgwQTcKKzoxMDNFQTAwMEIwQjUwNzFDMDEyM0Y4MUQ2OTMwMDM3MzFFNDhDMjFERkQKKzoxMDNFQjAwMDc5MzI1NDhBNjExQzUxODJENThBMDAyMUFDNDIwNERCREMKKzoxMDNFQzAwMEM0MUQ4OTM0NjM3MDUxODJEMTgzMDEyMzlCMDczQTZERUQKKzoxMDNFRDAwMDFBNDMxMjY4QzA0NkJBNjFGQjY5OUE0MjA2RDFGODZDNkYKKzoxMDNFRTAwMDEyNDlDMDQ2MDg2MEIwQkMwOEJDMTg0Nzc5NjE0MTY5RjYKKzoxMDNFRjAwMEZBNkM5MTQzNDE2MTAxMjAwMDA1QzE2MDM4NjkwMjI4RDQKKzoxMDNGMDAwMEYxRDBCODY5Rjk2OTQxMUEwMUQ1Nzg2RDQxMTgzODFDQUEKKzoxMDNGMTAwMDAwRjAwRUY4Rjk2OTA5MThGOTYxNzg2RDgxNDJFMkQzNzEKKzoxMDNGMjAwMDA4MUFGODYxREZFNzAwMDA2ODBFMDA4MDAwMDAwMEIwQUEKKzoxMDNGMzAwMEY4QjUwNDFDMEYxQ0ZGMjMyMTMzOUY0MjAxRDlGRjI3MzIKKzoxMDNGNDAwMDIxMzdFMTZFMzgxQzAxRjBDQkZDMkQ0RDAwMjgxM0QxMzgKKzoxMDNGNTAwMEUwMUQ0OTMwMDE3QTAxMjMxOTQzMDE3MjI5NEFDMDQ2MDQKKzoxMDNGNjAwMDAwOTIyOTQ4MDE2RDQyNkQwMDIwMkIxQzAxRjBCMEZDMkQKKzoxMDNGNzAwMDAwMjBGOEJDMDhCQzE4NDcyMDY5MDEzMDIwNjEyMzQ5QTMKKzoxMDNGODAwMEM4MURCOTMwMDI2QjkyMDA1MTE4QzAzMTBGNjEwMTZCMkUKKzoxMDNGOTAwMDAxMzE4OTA3ODkwRjAxNjMyMDZCQzIxOTYxNkQ4QTQyNjMKKzoxMDNGQTAwMDAzRDgyMzIyMTIwNTNBNDMwNUUwMDkxQTdFMUEwN0QxRTUKKzoxMDNGQjAwMDIzMjIxMjA1MEE0MzAwOTI2MTZFMDkxOEEyNkUxMEUwRDYKKzoxMDNGQzAwMDExMjI1MjA1MEE0MzAwOTI2MTZFMDkxODAwMjBBMjZFNjgKKzoxMDNGRDAwMDJCMUMwMUYwN0RGQzIzMjIxMjA1MzI0MzAwOTI2MTZFRkUKKzoxMDNGRTAwMEEyNkUwMDIwMkIxQzAxRjA3M0ZDMjA2QkMwMTkwMDA5OEQKKzoxMDNGRjAwMDAwMDE2MTZEODE0MjAwRDg0MDFBMjA2MzM4MUNCOEU3ODcKKzoxMDQwMDAwMDQ0ODAyMDQwMDQwMDFCMDI3QzI5MDA4MDY4MEUwMDgwNTAKKzoxMDQwMTAwMDgwQjUwMTIwQzAwMzBENDlDMDQ2MDg2MDBDNDlDODFEODkKKzoxMDQwMjAwMDQ5MzAwMjdBMDAyNzAwMkEwM0QwMDc3MjA4MUNGRkY3RTQKKzoxMDQwMzAwMDM3RkYwODQ5QzgxRDQ5MzAwMjdBMDAyQTAzRDAwNzcyQTkKKzoxMDQwNDAwMDA4MUNGRkY3MkRGRjgwQkMwOEJDMTg0NzAwMDAwMEIwMUIKKzoxMDQwNTAwMDY0MkQwMDgwRTQyQzAwODA5MEI1MDcxQzEwMjAxODQ5QzYKKzoxMDQwNjAwMEMwNDYwODYwRjg2ODAxMzBGODYwMTY0OEM0MURCOTM0Q0QKKzoxMDQwNzAwMDYxNkI4OTAwMDkxOEMwMzEwOTY5N0E2ODkyMDBEMjE5MDgKKzoxMDQwODAwMDUxNjQ2MTZCODkwMDA4MThDMDMwMDE2OTc4Njg4MDAwNEMKKzoxMDQwOTAwMEMwMTlDMDZCMDFGMEEyRkEwMTIzNzg2ODU4NDA3ODYwMUIKKzoxMDQwQTAwMDYwNkIwMTMwODAwNzgwMEY2MDYzRjgxRDE5MzA0MDc5MjQKKzoxMDQwQjAwMDAwMjgwMkQxMzgxQzAwRjAwN0Y4OTBCQzA4QkMxODQ3NTMKKzoxMDQwQzAwMDAwMDAwMEIwNjgwRTAwODA5MEI1MDcxQzM5NDhDMDY4MzkKKzoxMDQwRDAwMDAwMjgwNUQwQjg2QUMwNjg4MDA5MDFEMzAyMjAwMEUwM0EKKzoxMDQwRTAwMDc4NkZGQ0Y3NTlGODA0MUMwNkQxMDEyMEY5MUQxOTMxMkQKKzoxMDQwRjAwMDA4NzE5MEJDMDhCQzE4NDdGODZDMkY0OUMwNDYwODYwOEUKKzoxMDQxMDAwMEJBNkEzODFDMjExQzAwRjA1OUY4Njc2MjAwMjgwM0QxRjQKKzoxMDQxMTAwMDIwMUMwMEYwMEJGREVDRTdGOTZEMDk2ODA5MTgwOTA5OEUKKzoxMDQxMjAwMDA5MDE3QTZEOEE0MjAwRDg4OTFBQTE2MkI5Njg4OTAwQUEKKzoxMDQxMzAwMEM5MTk0QTZDMDAyQTA3RDA0QTZDMTIxQTRBNjQ4MDA4Q0UKKzoxMDQxNDAwMDgwMDBCOTZBMDgxOEI4NjIzODY4Qjk2QTgwMDBDMDE5NzYKKzoxMDQxNTAwMDQyNkI5MTQyMEVEMzAwMjE0MTY0Qjg2QTM5Njg4OTAwRUMKKzoxMDQxNjAwMEM5MTk0OTZCNDAxQUI4NjJCOTY4ODkwMEM5MTlDOTZCODUKKzoxMDQxNzAwMDQwMThCODYyQjg2ODgxMDBDOTE5NDk2QzAwMjlCOEQxRTMKKzoxMDQxODAwMEI5NkFGQTZCOTE0MkI0RDAzQTZDOTE0MkIxRDAwMTIzMzIKKzoxMDQxOTAwMDU4NDBCODYwODAwMEMwMTlDMDZCQzA0NkI4NjJGODY4NkIKKzoxMDQxQTAwMDAwMjgwMUQwMDEzOEY4NjAzODY5MDAyOEExRDAwMTM4MTIKKzoxMDQxQjAwMDM4NjE5RUU3NjgxOTAwODAwMDAwMDBCMEY3QjU5MEIwNDQKKzoxMDQxQzAwMDA0MUMwRDFDMDAyMDA1OTAwMjkwMDAyMjAxOTJGOTQ4NjkKKzoxMDQxRDAwMEMwNkFDMDQ2QTg2MUEwNjg4MTAwMDkxOTQ5NkJDMDQ2NDEKKzoxMDQxRTAwMDIwNjBFMTYyMTI5QUQwNjhDMDQ2QTg2MDEyOUE1MTc4QTUKKzoxMDQxRjAwMEMwNDYwQzkxRjA0OEMwNDYwMzkwRDcxRDA5MzdFMDZBQ0QKKzoxMDQyMDAwMEMxMUIwOTA5RTMxRDE5MzMwQzlBQzA0NjBGOTNFQjRCRjAKKzoxMDQyMTAwMEMwNDYwRTkzOTE0MjAxRDNCODQyMjFEOEUxNjgwMjI5RTkKKzoxMDQyMjAwMDFFRDIwMTIwMEY5OUMwNDY0ODcxMDAyMDAzOTkwMUYwNjkKKzoxMDQyMzAwMDU3RkIwMDI4MDNEMTBFOUJEODZCMDEzMEQ4NjMwMTIwQjcKKzoxMDQyNDAwMDgwMDYwMDI3Njg2MEFGNjFERDRBQzA0NjAwOTJERDQ4MDUKKzoxMDQyNTAwMDAxNkQ0MjZEREM0QjAwMjAwMUYwM0FGQjM4MUM1Q0UzNDEKKzoxMDQyNjAwMEI4NDIwM0Q4MjAxQzAwRjA3QkZDMDcxQ0Q3NDhDMDY4NkMKKzoxMDQyNzAwMDAwMjg2NEQwMzg3ODQwMDc0MDBGMDMyODYwRDEwNTk4QTMKKzoxMDQyODAwMDAxMzAwMDA2MDAwRTA1OTAzODc4RjAyMzE4NDA1OEQxMTAKKzoxMDQyOTAwMEUwNkFDMDFCMDAwOTBDOTk4ODQyMDJEMkUwNjgwMjI4M0IKKzoxMDQyQTAwMDA1RDNDQjQ5ODg2ODAwRjA4M0ZGMDYxQzA2RDEwMzlCMjkKKzoxMDQyQjAwMDI4MUMzOTFDMjIxQzAwRjA4QkZDMTZFMTJFNjJGODY4QzkKKzoxMDQyQzAwMDAwMjgwREQwQjg4OTAwMjgwM0QwQzE0OUM5NjgwMEYwODIKKzoxMDQyRDAwMDcwRkZGODg5MDAyODAzRDBCRDQ5Qzk2ODAwRjA2OUZGNjQKKzoxMDQyRTAwMDdBNjhDMDQ2NzI2MUI5NjhDMDQ2QjE2MTMwMUNCODQ5OEQKKzoxMDQyRjAwMDA5NjgwMEYwNUVGRjAwMjgxN0QxMzAxQ0I0NDk0OTY4RjYKKzoxMDQzMDAwMDAwRjA1N0ZGMTAzN0UwNkFCODQyMDNEODIwMUMwMEYwRDUKKzoxMDQzMTAwMDI3RkMwNzFDNjg2OEFGNEIxODQzNjg2MDAwMjBBODYxNDEKKzoxMDQzMjAwMEFDMjNBODY4OTg0M0E4NjBCMEUwQTg2OUE4MjgwMUQyODcKKzoxMDQzMzAwMEE4MjBBODYxMTAzN0UwNkFCODQyNkNEODlDRTBBNUUwREMKKzoxMDQzNDAwMEE0RTAxMDI4NjhEMTAzMjMxQjA3Njg2ODE4NDAwMTBGRjgKKzoxMDQzNTAwMDQ4MDE0MDFBODAwMEEwNEE4MjE4MDE5Mjc4ODg0MjBCRDYKKzoxMDQzNjAwMDMxRDM4MjBCMkZEMzlENDhDMDQ2MDM5MDAyMjAwMTlBN0YKKzoxMDQzNzAwMEMwNDYxMDgwNzg4ODAwMDUwMDBEMDE5QUMwNDY1MDYwNDQKKzoxMDQzODAwMEI4NjgwMTlBQzA0NjkwNjA3ODY4MDE5QUMwNDYxMDYyODkKKzoxMDQzOTAwMDAwMjAwMTlBQzA0NjkwNjQwMTlBQzA0NjkwNjM4ODAyNEEKKzoxMDQzQTAwMDhGNDk0MDE4MDE5QUMwNDY1MDYzMDE5QTUwNjgzNjMwRDAKKzoxMDQzQjAwMDk0MjgwMUQ4MzgyMDAwRTA5NDIwQTg2MTEwMzdFMDZBRTIKKzoxMDQzQzAwMEI4NDIyOEQ4NThFMDdBODg5MjBCMDNEMzg1NDhDMDQ2NzMKKzoxMDQzRDAwMDAzOTAyM0UwMDEyMjEyMDMwMjQwODM0QjFERDAwMzkzN0MKKzoxMDQzRTAwMDAwMDUwMDBEMDE5QUMwNDY1MDYwQjg2ODAxOUFDMDQ2QTkKKzoxMDQzRjAwMDkwNjA3ODY4MDE5QUMwNDYxMDYyMDAyMDAxOUFDMDQ2MTkKKzoxMDQ0MDAwMDkwNjQwMTlBQzA0NjkwNjM4ODAyNzU0OTQwMTgwMTlBRTkKKzoxMDQ0MTAwMEMwNDY1MDYzMDJFMDMzRTAyQUUwMDM5MzAxMjAwRjk5ODUKKzoxMDQ0MjAwMEMwNDY0ODcxMTI5QTUwNzgwNTk5NDMxQTBCOTMxMDM3NzkKKzoxMDQ0MzAwMEUwNkFCODQyMDNEODIwMUMwMEYwOTJGQjA3MUMwMTlBRTYKKzoxMDQ0NDAwMDUwNkI5MTZCMDkwMTQwMTgwQjlCMjExQzNBMUNGRkY3MjQKKzoxMDQ0NTAwMDdERkIwMTlBQzA0NkQwNjQwMTlBMEI5QkMwNDYxMzY1NTAKKzoxMDQ0NjAwMDAxMjM1QjA2Njg2ODE4NDM2ODYwMDAyMEE4NjEwREUwQkUKKzoxMDQ0NzAwMDEwMzdFMDZBQjg0MjAzRDgyMDFDMDBGMDcxRkIwNzFDMUIKKzoxMDQ0ODAwMDM4Nzg0MDA3NDAwRjAzMjgwMEQxRjhFNkE4NjkwMzk5NUYKKzoxMDQ0OTAwMDAxRjAyNkZBMDAyODJBRDEzODFDMjExQzAwRjA3OUZCRjMKKzoxMDQ0QTAwMEE4Njg4MDA5MDREMzMwMUM0OTQ5NDk2ODAwRjA4MUZFOUUKKzoxMDQ0QjAwMDQxNDkwMDIwMDFGMDE0RkEwMDI4MDREMTBFOUJEODZCNkEKKzoxMDQ0QzAwMDAxMzBEODYzMTFFMDAxMjAwRjk5QzA0NjQ4NzE4MDA2ODEKKzoxMDQ0RDAwMDAwMjc2ODYwQUY2MTNBNEFDMDQ2MDA5MjM5NDgwMTZERDIKKzoxMDQ0RTAwMDQyNkQzOTRCMDAyMDAxRjBGM0Y5MDAyMDE1RTIwNTk4RTgKKzoxMDQ0RjAwMDBDOTkwODFBMDAwNDAwMEMwQzkwMEI5MDBDOTgwMDI4RTIKKzoxMDQ1MDAwMDAzRDAwMTIwMEY5OUMwNDY0ODcxMjg2OEMwNDYwNDkwMjYKKzoxMDQ1MTAwMDAwMjYwMDIwMDg5MDAwMjIwQTkyMEM5ODAxMzgwRDkwODUKKzoxMDQ1MjAwMEEzRTA3ODg4OEExQjEyMDQxMjBDOTA0MjA1REQwNzkyRTIKKzoxMDQ1MzAwMDgwMUEwMDA0MDAwQzA4OTAwMEUwMDc5MDA4OTgwMDI4RkEKKzoxMDQ1NDAwMDA3RDEwRDk4MEE5QTkwNDIwN0REMDc5ODMwMTg4ODQyRTMKKzoxMDQ1NTAwMDAzRDgwMTIwNDAwNTA2OTAxQ0UwMTEyMDQwMDUwNjkwN0MKKzoxMDQ1NjAwMEE4Njg4QzIzMTg0MDAyRDEyMDQ4QzA0NjA2OTBCMTA3QTUKKzoxMDQ1NzAwMDg5MEYwRkQwMDc5OEMwMDZDMDBFMDhEMDFFMjgwOURCOEYKKzoxMDQ1ODAwMDFFMjgwMkQxMDMyOTA1RDEwMUUwMDIyOTAyRDMwMTIwMEUKKzoxMDQ1OTAwMDAyOTBERUU3MEE5QTAwMkEwNEQxMDEyM0RCMDUwNjk4N0YKKzoxMDQ1QTAwMDE4NDMwNjkwMDc5ODA2OTkwODQzMDIxQzAwOTAwNDk4NDcKKzoxMDQ1QjAwMDgzMTkxREUwRTgwRTAwODAwMTQ5RkZGRjI4MEYwMDgwRUQKKzoxMDQ1QzAwMDA0MDAxMjAyN0MyOTAwODA0NDgwMjA0MDY4MTkwMDgwODkKKzoxMDQ1RDAwMDYwMDQwMDgwMDAwMDAwODA1QzJCMDA4MDU1MzJGRkZGRUIKKzoxMDQ1RTAwMEFDNUUyMTQwMEQzREZGRkZDRDMxRkZGRjAwMDAzMjAyRTgKKzoxMDQ1RjAwMDAwMjAzQTFEMDZDQTAxRjA2QkY5MDc5ODM2MTgwMjk4OTgKKzoxMDQ2MDAwMDAwMjgxNkQwQTg2ODhDMjMxODQwMDREMTA5MjM1QjA0MjUKKzoxMDQ2MTAwMDA2OTgxODQzMDY5MDA2OThDMjRBMDI0MzAwOTIwNDk4RUUKKzoxMDQ2MjAwMDgzMTlDMTQ4MDE2RDQyNkQwMDIwMDFGMDUxRjkwMDIwNEQKKzoxMDQ2MzAwMDAyOTAwODk4MDAyODBCRDEwQjlCMDEzQjBCOTMxMDM3N0QKKzoxMDQ2NDAwMEUwNkFCODQyMENEODIwMUMwMEYwOEFGQTA3MUMwN0UwODgKKzoxMDQ2NTAwMDc4NjgwNzlBODAxODc4NjA3ODg4MDc5QTgwMUE3ODgwMzYKKzoxMDQ2NjAwMDBBOUE1MDFDMDIwNDEyMEMwQTkyMEM5ODBBOUE4MjQyNkUKKzoxMDQ2NzAwMDAzREFBOTY5QjE0MjAwRDk1M0U3QTg2OUIwNDI2QkQxMDYKKzoxMDQ2ODAwMEE4NjgwMTA5NjlEMjA4OUEwMDJBNTZEMDBDOTkwQTlBOUEKKzoxMDQ2OTAwMDhBNDIzRURCQjEwNzg5MEYwQ0QwMDg5QUQyMDZEMjBFQUYKKzoxMDQ2QTAwMDBCRDAxRTJBMDZEQjFFMkEwMkQxMDMyOTA1RDAwMUUwMDkKKzoxMDQ2QjAwMDAyMjkwMkQyMDI5OTAwMjkyMUQwMDg5QUMwNDYwMDkyMEMKKzoxMDQ2QzAwMDA0OTg4MzE5MDAyMDNBMUQwNkNBMDFGMDAxRjkwODk4RTAKKzoxMDQ2RDAwMDM2MThBODY4OEMyMzE4NDAwMkQwMDEyMDQwMDYwMEUwNUMKKzoxMDQ2RTAwMDkyNDgwMTIyMDI0MzAwOTIwNDk4ODMxOThFNDgwMTZEN0EKKzoxMDQ2RjAwMDQyNkQwMDIwMDFGMEVDRjgwMDIwMDI5MDE1RTA4QzIzQzAKKzoxMDQ3MDAwMDE4NDAwMkQwMDEyMDQwMDYwMEUwODg0ODA4OUEwMjQzODEKKzoxMDQ3MTAwMDAwRTAwODlBQzA0NjAwOTIwNDk4ODMxOTAwMjAzQTFERDAKKzoxMDQ3MjAwMDA2Q0EwMUYwRDVGODA4OTgzNjE4MTAzN0UwNkFCODQyODIKKzoxMDQ3MzAwMDAzRDgyMDFDMDBGMDE0RkEwNzFDNjg2ODgwMEU2QkQyQTYKKzoxMDQ3NDAwMDBBOThDMDQ2MDk5MDBDOTk4ODQyNUNEQTBEOTgwOTk5M0MKKzoxMDQ3NTAwMDg4NDIwM0QwN0E4ODFFRTA1RkUwNUVFMDc4ODgwMTIyMUMKKzoxMDQ3NjAwMDUyMDYwMjQzQTk2ODhDMjMxOTQwMDJEMTA5MjM1QjA0MzUKKzoxMDQ3NzAwMDFBNDNCMTA3ODkwRjBFRDBDMzA2REIwRTA4RDAxRTJCREIKKzoxMDQ3ODAwMDA5REIxRTJCMDJEMTAzMjkwNUQxMDFFMDAyMjkwMkQzNDYKKzoxMDQ3OTAwMDAxMjEwMjkxMDIxQzA5OTgwMDI4MDJEMTAxMjNEQjA1QTYKKzoxMDQ3QTAwMDFBNDMwMDkyMDQ5ODgzMTkwMDIwM0ExRDA2Q0EwMUYwQUEKKzoxMDQ3QjAwMDhGRjg3ODg4ODYxOTEwMzcwMjk4MDAyODE0RDBBODY4RDYKKzoxMDQ3QzAwMDhDMjMxODQwMDJEMDAxMjA0MDA2MDBFMDU3NDgwMTIyMDcKKzoxMDQ3RDAwMDAyNDMwMDkyMDQ5ODgzMTk1MzQ4MDE2RDQyNkQwMDIwRjIKKzoxMDQ3RTAwMDAxRjA3NkY4MDAyMDAyOTBFMDZBQjg0MjAzRDgyMDFDNUQKKzoxMDQ3RjAwMDAwRjBCNkY5MDcxQzA5OTgwMTMwMDAwNDAwMEMwOTkwN0MKKzoxMDQ4MDAwMDBDOTk4ODQyQTJEQjY4NjgzMDQzMDEwNDA5MEM2ODYwOTcKKzoxMDQ4MTAwMEU4NkEwMEYwN0JGQTI4RTAyN0UwQTg2ODAwMDkxNEQzRDIKKzoxMDQ4MjAwMDY4Njg4MDBFMTVEMjAxOUEwMDJBMTJEMDAxOUE1MDZCNDYKKzoxMDQ4MzAwMDBCOUIyMTFDM0ExQ0ZGRjc4OUY5MDE5QUMwNDY5MDY0MzIKKzoxMDQ4NDAwMDAxOUEwQjlCQzA0NjkzNjMwM0UwRTg2QTMxMUMwMEYwQjkKKzoxMDQ4NTAwMDVERkE2ODY4MzA0MzY4NjBBODY5QjA0MjA1RDkwMDA0MTEKKzoxMDQ4NjAwMDAwMEM4MDFCMDBGMEVFRjlBRTYxQTg2ODhDMjMxODQwQTQKKzoxMDQ4NzAwMDBCRDAyRjRBQzA0NjAwOTIwNDk4QzMxRjA1M0IyQTQ4MUMKKzoxMDQ4ODAwMDAxNkQ0MjZEMDAyMDAxRjAyM0Y4MDEyMzlCMDcyMDZEOEMKKzoxMDQ4OTAwMDE4NDMwMDY4QzA0NkEwNjFFMTY5ODE0MjEyRDAyMjY5RDQKKzoxMDQ4QTAwMDAyMkEwRkQyNDExQTAxRDU2MDZENDExODIwMUNGRkY3NzIKKzoxMDQ4QjAwMDNGRkJFMTY5NDAxOEUwNjE2MTZEODg0MjI0RDM0MDFBRjIKKzoxMDQ4QzAwMEUwNjEyMUUwODE0MjFGRDEyMDY5MDIyODFDRDIwMTIwMzEKKzoxMDQ4RDAwMDYwNjExODQ4NDE2OUUyNkMwQTQzNDI2MTgxNjlFMzZDOTYKKzoxMDQ4RTAwMDk5NDM4MTYxMDEyMTA5MDVDQTYwODA2OUMwNDYwODYxNTgKKzoxMDQ4RjAwMDhCMDIyMDZEMTg0MzAwNjhDMDQ2QTA2MUUxNjk4MTQyQzcKKzoxMDQ5MDAwMDAyRDAyMDFDRkZGN0NDRkEyODFDMDBGMDBGRjkwQzk4RkQKKzoxMDQ5MTAwMDA1OTk0MDE4MDAwMTEwMzA2ODYxMTNCMEYwQkMwOEJDNjQKKzoxMDQ5MjAwMDE4NDcwMDAwMDEwMDAwMDI3QzI5MDA4MDAwMDAxMjAyRUMKKzoxMDQ5MzAwMDA0MDA1MjAyNjgwRTAwODBGMEI1NDAyMDJENDlDMDQ2QTgKKzoxMDQ5NDAwMDA4NjAwMEYwMDNGOTA3MUM4MTY5NDQ2QUEwNkYwMEYwNTkKKzoxMDQ5NTAwMDQ1RkUwMDIwRTExRDE5MzE0ODcxNzk2OEM5MEUwOUQzNUYKKzoxMDQ5NjAwMEY4NkEwMDAxMjQ0OTQwMTgyNDRCQzAxODAxNjgwMTM5MzUKKzoxMDQ5NzAwMDAxNjAzNkUwRTE2RDA5NjgyMjZFQzA0NjExNjAyMDRFOEMKKzoxMDQ5ODAwMEY1MUQ3OTM1MDEyM0U5NkIxOTQzRTk2M0I5NkFFMjZERDUKKzoxMDQ5OTAwMEMwNDYxMTYwQjk2QTIyNkVDMDQ2MTE2MDYxNjkwMDI5ODMKKzoxMDQ5QTAwMDA0RDFBOTZCMDEzMUE5NjMwODI5MDdEM0E4NjMwMTIwQTkKKzoxMDQ5QjAwMDAwRjA4NkY4RTg2QjQwMDg0MDAwRTg2Mzc4Njg4MTBFRjQKKzoxMDQ5QzAwMDBGRDIwQjIzMUIwMkYxMThDOTY4MDAyOTA2RDAwMDA4N0EKKzoxMDQ5RDAwMDA0RDIyMDFDMzkxQzAwRjA0M0Y4MDJFMDM4MUMwMEYwMUYKKzoxMDQ5RTAwMDA1RkEzODFDRkJGNzA2RkMyMDFDMDBGMDBCRjhGMEJDQTUKKzoxMDQ5RjAwMDA4QkMxODQ3MDAwMDAwQjBBMDFDMDA4MEI0MEMwMDAwRTgKKzoxMDRBMDAwMDY4MEUwMDgwODBCNTA3MUNGODFEMTkzMDAxNzkwMDI5NTcKKzoxMDRBMTAwMDA0RDAwMDIxMDE3MTM4MUNGRkY3NTZGQkY4NjgwMjI4MEEKKzoxMDRBMjAwMDBERDBCODY4ODAwMEMyMTk1MDZDMDAyODExRDBCODZBNDcKKzoxMDRBMzAwMDQxNzgwOTAxMTAzMTUyNkIxMDFBODg0MjA1RDMzODFDOTUKKzoxMDRBNDAwMEZGRjc0MkZCODBCQzA4QkMxODQ3MzgxQ0ZGRjcyOEZBNjgKKzoxMDRBNTAwMEY4RTc3ODY4ODAwMEMwMTlDMDZCQzA0NkI4NjJGMUU3MUIKKzoxMDRBNjAwMEIwQjU4N0IwMEYxQzgwNkZDMDQ2MDA5MDAwMjQxMzRENzYKKzoxMDRBNzAwMDBCMjMxQjAyRTgxODgwNjkwMDI4MTdEMDY5NDZBMjAwQTIKKzoxMDRBODAwMDUyMTkwQjIzMUIwMkQyMTg5MjY5MzgxQzAwRjA5MkZCQkEKKzoxMDRBOTAwMDAwMjgwOUQxMDEzNEEwMDA0MDE5MEIyMzFCMDJDMDE4QzMKKzoxMDRBQTAwMDgwNjkwMDI4RUFEMTAxRTAwMTI4MDJEMDM4MUMwMEYwMUEKKzoxMDRBQjAwMDlERjkwN0IwQjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwMjQKKzoxMDRBQzAwMEI4QjVDMjA3RDIwRjE2NEMxNjQ5MDFEMDA4MjIwOEUwMkIKKzoxMDRBRDAwMDgyMDgwNUQzMEMyMkE0MTgwQjY4REYxRDE1MzcwM0UwRUMKKzoxMDRBRTAwMDFDMjIwQjY4REYxRDA5MzcwRjRCMUQ3ODAwMkQxM0QwREEKKzoxMDRBRjAwMDVCNzgwMDJCMTBEMDAxMjM1QjA2MUE0MzAwMjgwMUQxRkMKKzoxMDRCMDAwMDVCMDgxQTQzMDA5MjRBNjgwMTIwMzkxQzIzMUMwMEYwRkMKKzoxMDRCMTAwMERGRkVCOEJDMDhCQzE4NDcwMzIzMUIwNjFBNDNGMUU3QTUKKzoxMDRCMjAwMDkwRUUyMDQwN0MyOTAwODBGODBFMDA4MDAwMjFDMTYxQjkKKzoxMDRCMzAwMDA1NDk4QTY4MDAyQTAxRDE4ODYwMDJFMENBNjhDMDQ2MzcKKzoxMDRCNDAwMEQwNjFDODYwNzA0NzAwMDAyODBGMDA4MDAzNDk4ODY4NjIKKzoxMDRCNTAwMDAwMjgwMkQwQzI2OUMwNDY4QTYwNzA0NzI4MEYwMDgwRDIKKzoxMDRCNjAwMDAxMUMwMTIzODg2ODU4NDA4ODYwQ0E2ODAxM0FDQTYwRkQKKzoxMDRCNzAwMDBBNjkwMTNBODAwMDBBNjE0MjE4RDA2QjUzNkJDMDQ2NDMKKzoxMDRCODAwMENCNjIwQjY4OUIwMDU5MTg0OTZDNTM2Q0M5MTg1MTY0NkYKKzoxMDRCOTAwMDcwNDc4QTY4OTIwMDUyMThEMzZCODM0MjE3RDFEMDFEOTgKKzoxMDRCQTAwMDNEMzAwQTY4OTIwMDUyMTg1MjZDMDM2ODlBMUEwMjYwRUIKKzoxMDRCQjAwMDAxMjM4ODY4NTg0MDg4NjBDQTY4MDEzMkNBNjAwQTY5NUYKKzoxMDRCQzAwMDAxMzI4MDAwNDAxODBBNjE0MDZCQzA0NkM4NjI3MDQ3REQKKzoxMDRCRDAwMEI4QjUwNDFDMUQxQzE3MUMwODFDMzkxQ0ZGRjdEOUZGOTUKKzoxMDRCRTAwMDAwMjAyOTFDMDBGMDdDRkUwMTIwRjkxRDE5MzE0ODcxQkMKKzoxMDRCRjAwMDgwMDY2MDYwMDAyMEEwNjEwNjRBQzA0NjAwOTIwNjQ4MTgKKzoxMDRDMDAwMDAxNkQ0MjZEMDU0QjAwMjAwMEYwNjJGRUI4QkMwOEJDOEYKKzoxMDRDMTAwMDE4NDcwMDAwMDQwMDEyMDI3QzI5MDA4MDQ0ODAyMDQwRDQKKzoxMDRDMjAwMDA2NDkwQTY4MTAxODA4NjAwMTIzNUIwMjk4NDIwM0Q5RkMKKzoxMDRDMzAwMDAzNDkwQTc5MDEzMjBBNzE3MDQ3MDAwMEU0MkQwMDgwQUYKKzoxMDRDNDAwMEEwODIyMDQwODAwODgwMDAwNjQ5MEE2ODEwMTgwODYwODkKKzoxMDRDNTAwMDAxMjM1QjAyOTg0MjAzRDkwMzQ5MEE3OTAxMzIwQTcxQTAKKzoxMDRDNjAwMDcwNDcwMDAwRTQyRDAwODBBMDgyMjA0MDAzMzA4MDA4QkYKKzoxMDRDNzAwMDgwMDAwNjQ5MEE2ODEwMTgwODYwMDEyMzVCMDI5ODQyMDgKKzoxMDRDODAwMDAzRDkwMzQ5MEE3OTAxMzIwQTcxNzA0N0U0MkQwMDgwODMKKzoxMDRDOTAwMEEwODIyMDQwMDI0ODQxNzkwMTMxNDE3MTcwNDcwMDAwRjMKKzoxMDRDQTAwMEEwODIyMDQwOTBCNDgyMDAxNzRCOUE1ODhCMDcwMkQwMDQKKzoxMDRDQjAwMDg5MDgwQjFEMDFFMDg5MDhDQjFDMTE2OUQ3NjgxMjRDQ0IKKzoxMDRDQzAwMDgwMDAyMDU4NDA2OEI5NDIwM0QxODE0MjE5RDkxMTY4NDcKKzoxMDRDRDAwMDE3RTAwMDI0Qjk0MjA5RDk4MTQyMTJEOTExNjg3ODFBMjMKKzoxMDRDRTAwMDAwRDUwMzMwODAxMDk4NDIwQkQ4MDdFMDgxNDIwNUQ4RTgKKzoxMDRDRjAwMDc4MUEwMEQ1MDMzMDgwMTA5ODQyMDJEODIwMUM5MEJDNEUKKzoxMDREMDAwMDcwNDdDODFEMDUzMEZBRTc3MDA0MDA4MDgwQjU4MDAwNDgKKzoxMDREMTAwMDBGNEExNzU4ODgwNzAyRDA4ODA4MDQzMDAxRTA4ODA4MzUKKzoxMDREMjAwMDAzMzAzOTY5N0E2ODkxNDIwOUQ5Mzk2OEMwNDYzOTYxRDYKKzoxMDREMzAwMEY5Njg3QTY4OTE0MjAyRDkzOTY4QzA0NkY5NjA4MTAwMDEKKzoxMDRENDAwMDM4NjkwMEYwRDFGRDM4NjE4MEJDMDhCQzE4NDcwMDAwMEMKKzoxMDRENTAwMDcwMDQwMDgwOTBCNTAzMjEwOTA3MDE0MDBDMEYwMTA0ODUKKzoxMDRENjAwMDA5MEMwMTIyOTIwNzAyNDBBMzAwMUM0RkZGNTg4OTA3M0IKKzoxMDRENzAwMDg5MEYwMDA0MDAwQzgwMDgwMDI5MDBEMDAxMzAwMDJBQUYKKzoxMDREODAwMDAxRDAwMjMwMDBFMDAzMzBGOTY4N0E2ODkxNDIwMkQ5MUMKKzoxMDREOTAwMDM5NjhDMDQ2Rjk2MDgxMDBGODY4MDBGMEE1RkRGODYwNDgKKzoxMDREQTAwMDBGNDgwMDY5MDAyODA1RDAwMTIwQTA0MDAyRDAyMDFDMzcKKzoxMDREQjAwMEZFRjdDQUZDMEI0OUM4MUQxOTMwMDM3OTAwMjIwMDJCRUQKKzoxMDREQzAwMDA1RDEwOTQ5QzgxRDE5MzAwMzc5MDAyQjAzRDAwMjcxQTAKKzoxMDRERDAwMDA4MUNGRkY3NzlGOTkwQkMwOEJDMTg0NzcwMDQwMDgwRTQKKzoxMDRERTAwMEQwMkMwMDgwNjQyRDAwODBFNDJDMDA4MEIwQjUyQjQ5Q0QKKzoxMDRERjAwMDA5NzkwMDI5MDNEMTQxNjgyOTRCMTk0MzQxNjA4MTY4MzEKKzoxMDRFMDAwMDQ5MDgwMkQzMDkyMTA5MDQwMUUwMEQyMTA5MDQwQ0M4NTUKKzoxMDRFMTAwMDA4MzgxOTQzODc2OEJCMEEwM0QzNDM2ODVCMDgwMEQzOEIKKzoxMDRFMjAwMDAxMzE0MDY4MDMyMzFCMDcxODQwMDcwRkY4MDAxRDRDOTEKKzoxMDRFMzAwMDAwMTkyMzY4QzAxODUwMzAwMDc5MDEyODEwRDE2MDY4MkIKKzoxMDRFNDAwMDAxMjgwREQwMTAxQzAwRjA3MUY4MzgwMTAwMTkxOTIzNDkKKzoxMDRFNTAwMERCMDFDMDE4NDE2QjAxMzk0MTYzQjBCQzA4QkMxODQ3ODUKKzoxMDRFNjAwMDM4MDEwMDE5MTkyM0RCMDFDMDE4MDM2QjVEMUMwNTYzQjEKKzoxMDRFNzAwMEJEMDIyRDE5REIwMEVCMTg4MDMzMTk2M0RBNjI4MTZCRjgKKzoxMDRFODAwMDAxMzE4MTYzMDEyMUI5NDAyMjY4MTE0MzIxNjAwMTZCMjYKKzoxMDRFOTAwMDgwMjlFMkQzMDAyMTAxNjNERkU3MDAwMDI4MEYwMDgwQjIKKzoxMDRFQTAwMDAwMDAwMDgwQTAxQzAwODBGMEI1MUY0RTcwNjgwMDI4MzQKKzoxMDRFQjAwMDM2RDEwMDI0QjE2ODQ4MUNDOTAwODkxOUIwNjAzMjY4MzUKKzoxMDRFQzAwMDg5MTg2MDMxMEQ3QjA4MjgwMEQzQjQ2MDI4MDE4MDE5NEYKKzoxMDRFRDAwMDE5MjNEQjAxQzAxODg3NkIwMDJGMjFEMEMxNkE0QjFDM0UKKzoxMDRFRTAwMEFBMDI5MjE5QzkwMDUxMTg4MDMxQzM2MkNBNkEwOTZCQkIKKzoxMDRFRjAwMDAxM0Y4NzYzODAyQjAwRDNDNDYyMDAyRjA2RDEwMTI3QjYKKzoxMDRGMDAwMEFGNDAzQjFDREI0MzM3NjgzQjQwMzM2MDQzNkIwMTNCQTYKKzoxMDRGMTAwMDQzNjMxMDFDMzcxQzAwRjAwOUY4Nzg2ODAwMjhDOUQwREEKKzoxMDRGMjAwMEYwQkMwOEJDMTg0NzAwMDBBMDFDMDA4MEYwQjVDRDBGRjUKKzoxMDRGMzAwMEVEMDcwMTI0MDAyNzJFNEIyRTRBMDAyRDFERDBEODZBRTQKKzoxMDRGNDAwMDAxMzBEODYyMTAxQzUyNjkwMDJBMTJEMDAyNjk1MzFDMjkKKzoxMDRGNTAwMDkyMDAxMjE4MDM2MTkxNjE0MTY5MDEzMTQxNjEwMjY5NTYKKzoxMDRGNjAwMDBGMkEwMEQzMDc2MTBGMjkwMEQzNDQ2MEYwQkMwOEJDQUUKKzoxMDRGNzAwMDE4NDcwODFDRkZGN0VFRkVGOEU3MTU2OTZFMUNBRDAwMzgKKzoxMDRGODAwMEFEMTgxNjYxQTk2MTU1NjkwMTM1NTU2MTE2NjkwRjJFNzUKKzoxMDRGOTAwMDAwRDMxNzYxMEYyRDAwRDM1NDYwOEMwMkE0MEExNjRGNjIKKzoxMDRGQTAwMDNBNkZGRDY4RjkxRDc5MzEwMTJEMENEMURCNkQ1QjA4N0QKKzoxMDRGQjAwMDA5RDMwQjg5MDAyQjA2RDFGRDZGMDMzQjJFNjgzMzQwQ0MKKzoxMDRGQzAwMDJCNjAxNDIzMEI4MTEwNjA4MDA3ODAwQTIwNDMwMzA0QTgKKzoxMDRGRDAwMDAwRDAwMTM4NTA2MDA5NkEwODMyOTE0MjAwRDgwNzRBNkYKKzoxMDRGRTAwMDAwMEQwMkQzNTEyMDgwMDM4MjYxM0E2N0JFRTcwMDAwQzIKKzoxMDRGRjAwMEE0MkEwMDgwQTAxQzAwODA2ODBFMDA4MDI0QTcyMDQwMDYKKzoxMDUwMDAwMEIwQjUwMDI4MDREMTAxMjBDMDA1MTY0OUMwNDYwODYwOEIKKzoxMDUwMTAwMDE1NEMwMDI1Njc2OTAwMkYxNkQwRTA2ODQxMUM4MDAwMDAKKzoxMDUwMjAwMDAwMTlFMTYwODA2OTAxM0ZGRkY3OTRGRUUwNjgwRjI4RjYKKzoxMDUwMzAwMDAwRDNFNTYwRTA2ODgwMDAwMDE5ODA2OTAwMDgwMUQzQjIKKzoxMDUwNDAwMDAwMkZFQUQxNjc2MTAzRTAwODQ4MDE2RDAxMzEwMTY1NzUKKzoxMDUwNTAwMDY1NjAyMDY4MDAyODAxRDBGRkY3MjZGRkIwQkMwOEJDQkYKKzoxMDUwNjAwMDE4NDcwMDAwMDAwMDAwQjBBMDFDMDA4MEEwODIyMDQwNzMKKzoxMDUwNzAwMDAwMjA3MDQ3QjBCNDEwMjM4MjY4MTM0MDAwMjEwMDJCMzkKKzoxMDUwODAwMDE1RDAwQzRCMUE0MDEyMDE4MTI0MTQ0MzAyNjgxNTY4OTQKKzoxMDUwOTAwMDEzMUQ4MENCMUI2ODA0M0EwMjYwMjBDMjgwQzIwOEMyODQKKzoxMDUwQTAwMDE0NjA0MjY4MDEyMzlCMDcwNDMyMUE0MzQyNjAwODFDQzMKKzoxMDUwQjAwMEIwQkM3MDQ3MDBGMEZGMEZGMEI0ODI2ODUzMDkzNEQzREUKKzoxMDUwQzAwMDFCNEIxQTQwMTIwMTgxMjYxNjQzMDM2ODFENjgxRjFERTEKKzoxMDUwRDAwMDEwQ0YzRjY4MDQzQjAzNjAyMEMzMTBDMzgwQzMxRTYwMzEKKzoxMDUwRTAwMDQzNjgxRjFEMDEyMzlCMDczQjQzNDM2MENCNkIxODFGODUKKzoxMDUwRjAwMEM4NjM4MENCODBDMDFDNjgxRjFEMDMxRDA0NjAzODFDNjIKKzoxMDUxMDAwMDNGNjhDMDQ2MUY2MDFGMUQ0MzY4MUMwNDI0MEM4MTIzOTgKKzoxMDUxMTAwMDIzNDMzQjYwNDA2ODAwMEMwMDA0MTA0Mzc4NjAwODZFMzUKKzoxMDUxMjAwMDA0MzAwODY2NDg2RTA0MzA0ODY2MDAyMEYwQkM3MDQ3QzIKKzoxMDUxMzAwMDAwRjBGRjBGODBCNDgxNkEwMTIzOUIwN0NBMUQwNTMyNkUKKzoxMDUxNDAwMDFBNDMxMjY4Q0YxRDAxMzczQjQzMUI2OEMwNDZDQjYwMzIKKzoxMDUxNTAwMDAxMjM5QjA3MEYxRDNCNDMxQjY4QzA0NjhCNjAwMTIzNDcKKzoxMDUxNjAwMDlCMDcwQjQzMUI2ODBDQzEwMjYyMDE2QkMwNDYwQTYyQkQKKzoxMDUxNzAwMDA0MjM4MTY5MTk0MzgxNjEwMjZCQzA0NjkxNjE4MTZBOTAKKzoxMDUxODAwMDA0MzE4MTYyMDI2QkMwNDY5MTYyQzExRDM5MzE0QThCODQKKzoxMDUxOTAwMDA0M0E0QTgzNDk4QjAyNkI0MDMyNTE4M0MxODkwNDM5RjYKKzoxMDUxQTAwMEMxODFDMTY4MDA2QkMwNDZDMTYwMDAyMDgwQkM3MDQ3RUYKKzoxMDUxQjAwMDAwNDcwODQ3MTA0NzE4NDcyMDQ3Mjg0NzMwNDczODQ3RDcKKzoxMDUxQzAwMDMwNDAyREU5MENDMDlERTUwQzQ4QTBFMTI0NDhCMEUxMzkKKzoxMDUxRDAwMDFFMDAwMDBBMDFDMDRDRTIxODQwQTBFMzY0NTE5RkU1QTQKKzoxMDUxRTAwMDk0NTAyMEUwMDA1MDkwRTUxNDQwOTBFNTAwMzA4NUU1QjMKKzoxMDUxRjAwMDA0QzA4NUU1MDgxMDg1RTUwQzIwODVFNTEwMTA5MEU1RDQKKzoxMDUyMDAwMDEwNTA4NUUyMDEwMDU1RTEwQzUwOTA1NTA0MDA1NUUxMjUKKzoxMDUyMTAwMDA1MDAwMDBBMDQxMDkwRTUwMDUwODBFNTAwNTA4MUU1OEIKKzoxMDUyMjAwMDAwMDBBMEUzMzA0MEJERTgxRUZGMkZFMTAwMzA5M0U1MTEKKzoxMDUyMzAwMDA4MjA5MEU1MDEzMTgzRTMwMjM2ODNFMzAzMDA1NUUxNjIKKzoxMDUyNDAwMDE0MzA4MEU1RjJGRkZGMUEwMTAwQTBFM0Y0RkZGRkVBNEIKKzoxMDUyNTAwMDAxMDYxQ0UzRjFGRkZGMEFFQzEwOUZFNTAyQzZDQ0UzNTgKKzoxMDUyNjAwMDU0MjA5MUU1RTQzMDlGRTU1MDEwOTFFNUQ5RkZGRkVBMjUKKzoxMDUyNzAwMEYwNDcyREU5MjBDMDlERTUwQzY4QTBFMTI2NjhCMEUxNkIKKzoxMDUyODAwMDI1MDAwMDBBMTg0MEEwRTNCODUwOUZFNTk0MDAwMEUwMTQKKzoxMDUyOTAwMDA1MDA4MEUwMDg0MDkwRTUwNDgwOTBFNTAwNzBBMEUzMDAKKzoxMDUyQTAwMDFGQzBBMEUzMDJDNDhDRTMwMDUwOTBFNTEwOTA5MEU1OEQKKzoxMDUyQjAwMDE0QTA5MEU1MDAzMDg1RTUwNEMwODVFNTA4MTA4NUU1N0IKKzoxMDUyQzAwMDBDMjA4NUU1MTA1MDg1RTIwOTAwNTVFMTBDNTA5MDU1MDEKKzoxMDUyRDAwMDBBMDA1NUUxMTUwMDAwMEEwMzcwMTdFMjIwMTA4MUUyNzAKKzoxMDUyRTAwMDIwMzA4M0UyMEEwMDAwMEEwMDYwOTZFMjAxNzA4N0UyNDMKKzoxMDUyRjAwMDA5MDAwMDBBMjA2MDQ2RTIyMDAwNTZFM0VDRkZGRkNBRTYKKzoxMDUzMDAwMDAwNzBBMEUzMDFDMDQ2RTIwMkM0OENFMzAwNjBBMEUzQTkKKzoxMDUzMTAwMEU3RkZGRkVBMDA1MDg4RTVGMkZGRkZFQTAwMTBBMEUzOTQKKzoxMDUzMjAwMDAwNTA4MEU1MDEwMEEwRTFGMDQ3QkRFODFFRkYyRkUxM0QKKzoxMDUzMzAwMDAwQTA5NEU1MEEwMDU1RTExNEEwODBFNUU1RkZGRjFBRkUKKzoxMDUzNDAwMDAxMTBBMEUzRjVGRkZGRUFBODAzMDA4MDdDMjkwMDgwOUMKKzoxMDUzNTAwMDAwODAyMDQwNjg4MjlGRTUwQjkyQTBFMzY0QTI5RkU1NTUKKzoxMDUzNjAwMDU4QjA5QUU1MEVGMEEwRTE1NEIwOUFFNTFFRkYyRkUxODcKKzoxMDUzNzAwMDNGNDAyREU5MDAwMDRGRTExRjAwMDBFMjEyMDA1MEUzMjIKKzoxMDUzODAwMDU0MDAwMDBBMDAwMDBGRTE4MDAwQzBFMzAwRjAyMUUxQkEKKzoxMDUzOTAwMDA0NTBBMEUzMDA0MDk5RTUwOTAwMDBFQTAyMDAxNEUzOEMKKzoxMDUzQTAwMDUzMDAwMDFCODAwMDE0RTM1OTAwMDAxQjIwMDAxNEUzOEQKKzoxMDUzQjAwMDU5MDAwMDFCMDIwNzE0RTM1OTAwMDAxQjAxMDYxNEUzMDcKKzoxMDUzQzAwMDU5MDAwMDFCMDgwMDE0RTM0NTAwMDAxQjAyMDUxNEUzMEMKKzoxMDUzRDAwMDRBMDAwMDFCMDIwODE0RTM0QjAwMDAxQkU1MEUxNEUzMTcKKzoxMDUzRTAwMDA3MDAwMDBBMDQyMDk4RTUwQzEwOThFNTA0MzA1MkUyMEEKKzoxMDUzRjAwMDNDMzBBMEIzMDQzMDg4RTUwMjAwOTFFNzBGRTBBMEUxNjMKKzoxMDU0MDAwMDEwRkYyRkUxMDE1MDU1RTIwMzAwMDAwQTAwNDA5OUU1MkEKKzoxMDU0MTAwMDBDMDA5QUU1MDAwMDE0RTExQkZGMkYxMTA4MDA5QUU1MkIKKzoxMDU0MjAwMDAwMDAxNEUxMEIwMDAwMEEwMTBDMTRFMzk4MDE5RjE1MjEKKzoxMDU0MzAwMDBGRTBBMDExMTBGRjJGMTEwMjA0MTRFMzhDMDE5RjE1M0YKKzoxMDU0NDAwMDBGRTBBMDExMTBGRjJGMTEwMTA5MTRFMzgwMDE5RjE1MzcKKzoxMDU0NTAwMDBGRTBBMDExMTBGRjJGMTEwNDAwOUFFNTAwMDAxNEUxRTUKKzoxMDU0NjAwMDE2MDAwMDBBNTRFMDhGRTIwNDAwMTRFMzQwMDA5QTE1OEQKKzoxMDU0NzAwMDEwRkYyRjExMDIwQTE0RTM0NDAwOUExNTEwRkYyRjExOTgKKzoxMDU0ODAwMDAyMDkxNEUzNDgwMDlBMTUxMEZGMkYxMTAxMDIxNEUzREEKKzoxMDU0OTAwMDRDMDA5QTE1MTBGRjJGMTEwMTA0MTRFMzUwMDA5QTE1QzcKKzoxMDU0QTAwMDEwRkYyRjExMDEwQTE0RTMyMTAwMDAxQjAyMDAxNEUzNzYKKzoxMDU0QjAwMDBFMDAwMDFCMTAwMDlBRTUwMDAwMTRFMTFDMDAwMDFCMDgKKzoxMDU0QzAwMDAwNDA5OUU1MDQ1MEEwRTMwMDQwOTRFMjFCRkYyRjExMzcKKzoxMDU0RDAwMDNGNDBCREU4MDRGMDVFRTJDMDAwODBFMzAwRjA2MUUxMUYKKzoxMDU0RTAwMEZBRkZGRkVBMTgwMDlBRTUxQzEwOUFFNTExRkYyRkUxNzgKKzoxMDU0RjAwMDU0QjA5QUU1MUMxMDlBRTUxNDAwOUFFNTExRkYyRkUxQ0IKKzoxMDU1MDAwMDIwMTA5QUU1MDAwMEEwRTMxMUZGMkZFMTI0MTA5QUU1OTYKKzoxMDU1MTAwMDExRkYyRkUxMjgxMDlBRTUxMUZGMkZFMTJDMTA5QUU1RDkKKzoxMDU1MjAwMDExRkYyRkUxMzAxMDlBRTUxMUZGMkZFMTM0MTA5QUU1QjkKKzoxMDU1MzAwMDExRkYyRkUxRkVGRkZGRUEzOEUwOUFFNTNDMTA5QUU1MDMKKzoxMDU1NDAwMDE4MDA5QUU1MTFGRjJGRTEzOEUwOUFFNTNDMTA5QUU1NDIKKzoxMDU1NTAwMDE0MDA5QUU1MTFGRjJGRTE2NDIwOUZFNTAwMzA5MkU1RTkKKzoxMDU1NjAwMDAwMzA1M0UwMEEwMDAwQkEwMDMwODJFNTBDMDA5MkU1RkEKKzoxMDU1NzAwMDA4MzA5MkU1MDAxMDkxRTIwMzAwMDAwQTAzMTA4MEU3NzIKKzoxMDU1ODAwMDA0MzA1M0UyM0MzMEEwQjMwODMwODJFNTAxMDBBMEUzRDAKKzoxMDU1OTAwMDFFRkYyRkUxM0MxMDlGRTUwMDAwOTFFNTAxMDA4MEUyMzUKKzoxMDU1QTAwMDAwMDA4MUU1MDAwMEEwRTNGOEZGRkZFQTEwMDA5RkU1OUUKKzoxMDU1QjAwMDA4MTA5MEU1MDQxMDUxRTIzQzEwQTBCMzA4MTA4MEU1RkIKKzoxMDU1QzAwMDFFRkYyRkUxRTQyRDAwODBDQzA0MDA4MDcxMkJGRkZGMzMKKzoxMDU1RDAwMEQxM0RGRkZGQzkyQkZGRkZBMDgyMjA0MEM5MUM4OTA4RDUKKzoxMDU1RTAwMDg5MDAwMTIzODU0QTVCMDcxODQzMTM2ODVCMTgxMzYwMjEKKzoxMDU1RjAwMDAwMUY4MUEzNUIxQTE4NDcwNDIwQTBFNTA0MjBBMEU1NDIKKzoxMDU2MDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RjYKKzoxMDU2MTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RTYKKzoxMDU2MjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RDYKKzoxMDU2MzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QzYKKzoxMDU2NDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QjYKKzoxMDU2NTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QTYKKzoxMDU2NjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1OTYKKzoxMDU2NzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1ODYKKzoxMDU2ODAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NzYKKzoxMDU2OTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NjYKKzoxMDU2QTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NTYKKzoxMDU2QjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NDYKKzoxMDU2QzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MzYKKzoxMDU2RDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MjYKKzoxMDU2RTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MTYKKzoxMDU2RjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDYKKzoxMDU3MDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RjUKKzoxMDU3MTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RTUKKzoxMDU3MjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RDUKKzoxMDU3MzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QzUKKzoxMDU3NDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QjUKKzoxMDU3NTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QTUKKzoxMDU3NjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1OTUKKzoxMDU3NzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1ODUKKzoxMDU3ODAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NzUKKzoxMDU3OTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NjUKKzoxMDU3QTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NTUKKzoxMDU3QjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NDUKKzoxMDU3QzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MzUKKzoxMDU3RDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MjUKKzoxMDU3RTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MTUKKzoxMDU3RjAwMDA0MjBBMEU1MDQyMEEwRTUxRUZGMkZFMUU0MkQwMDgwOTkKKzoxMDU4MDAwMDk4MDA5RkU1OTgxMDlGRTUwMTIwNDBFMDk0MzA5RkU1QzcKKzoxMDU4MTAwMDAwMDA5MUU1MDMwMDUwRTEwMzAwMDAxQTA0MTA4MUUyNEEKKzoxMDU4MjAwMDA0MjA1MkUyMDAwMDAwMEFGOEZGRkZFQTc4MDA5RkU1M0EKKzoxMDU4MzAwMDAwMjA4MEU1NzQwMDlGRTU3NDEwOUZFNTAxMjA0MEUwQTIKKzoxMDU4NDAwMDYwMzA5RkU1MDAwMDkxRTUwMzAwNTBFMTAzMDAwMDFBN0QKKzoxMDU4NTAwMDA0MTA4MUUyMDQyMDUyRTIwMDAwMDAwQUY4RkZGRkVBOEYKKzoxMDU4NjAwMDUwMDA5RkU1MDAyMDgwRTU0QzAwOUZFNTRDMTA5RkU1MkYKKzoxMDU4NzAwMDAxMjA0MEUwMkMzMDlGRTUwMDAwOTFFNTAzMDA1MEUxNUQKKzoxMDU4ODAwMDAzMDAwMDFBMDQxMDgxRTIwNDIwNTJFMjAwMDAwMDBBMjIKKzoxMDU4OTAwMEY4RkZGRkVBMjgwMDlGRTUwMDIwODBFNTFFRkYyRkUxQ0EKKzoxMDU4QTAwMDdDMzQwMDgwODAzMDAwODBBRERFQURERUMwMDQwMDgwM0UKKzoxMDU4QjAwMEZDMzcwMDgwODAzNDAwODBDNDA0MDA4MEZDM0YwMDgwRkUKKzoxMDU4QzAwMDQwMzgwMDgwQzgwNDAwODA3ODQ3MDAwMDcxRUFGRkVBOTEKKzoxMDU4RDAwMDc4NDcwMDAwMzlGRUZGRUE3ODQ3MDAwMDYzRkVGRkVBRTAKKzoxMDU4RTAwMDc4NDcwMDAwMUJGRkZGRUE3ODQ3MDAwMDZCRUFGRkVBRjkKKzoxMDU4RjAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDA4MDI4MDQwMDAwRkUKKzoxMDU5MDAwMEY4M0QwMDAwMDAwMTAwODAwMEZGMDAwMDAwMDAwMDAwRTIKKzoxMDU5MTAwMEI5MEJGRkZGMDAwMDAwMDBENTBCRkZGRjAzRkYwNjU0OEIKKzoxMDU5MjAwMDAzMDAwMDAwNzUwNEZGRkYwMDAwMDAwMEExMDVGRkZGNTkKKzoxMDU5MzAwMDA0RkYwNzU0MDMwMDAwMDBCNTA0RkZGRjAwMDAwMDAwNEYKKzoxMDU5NDAwMEYxMDVGRkZGMDVGRjA1NTQwMzAwMDAwMDM5MDRGRkZGQzgKKzoxMDU5NTAwMDAwMDAwMDAwNTUwNUZGRkYwMUZGMDQwMDAzMDAwMDAwRTgKKzoxMDU5NjAwMDQxMThGRkZGMDAwMDAwMDA2MTBFRkZGRjAyRkYwMjA4NjgKKzoxMDU5NzAwMDAwMDAwMDAwQTEwMkZGRkYwMDAwMDAwMEYxMDJGRkZGOTUKKzoxMDU5ODAwMEZGRkYwMTQ0MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU5OTAwMDlEMERGRkZGMDYwMEZGMDAwMDAwMDAwMDNENTBGRkZGQ0YKKzoxMDU5QTAwMDgxNTBGRkZGMDAwMDAwMDBGRkZGRkYwMDAwMDAwMDAwMkIKKzoxMDU5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRjAwRUEKKzoxMDU5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDU5RDAwMEZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4MDUwMDgwRUEKKzoxMDU5RjAwMDExNzUyMTQwMUI3NTIxNDAzMTc1MjE0MDQ5NzUyMTQwQTkKKzoxMDVBMDAwMDU1NzUyMTQwNjM3NTIxNDA3RDc1MjE0MEE5NzUyMTQwNjAKKzoxMDVBMTAwMDZENzYyMTQwQzU3NjIxNDBEMzc2MjE0MERENzYyMTQwNDgKKzoxMDVBMjAwMEU3NzYyMTQwOTk3NzIxNDBBNzc3MjE0MEI1NzcyMTQwM0IKKzoxMDVBMzAwMDYxNzgyMTQwNUY3QzIxNDBFOTdDMjE0MDg5N0QyMTQwQzMKKzoxMDVBNDAwMEJEN0UyMTQwQzk3RTIxNDAyOTdGMjE0MDhEN0YyMTQwOUMKKzoxMDVBNTAwMEI5N0YyMTQwREQ3RjIxNDAxRDgwMjE0MDQ1ODAyMTQwQ0MKKzoxMDVBNjAwMDhEODAyMTQwOUQ4MDIxNDBDNTgwMjE0MEQ1ODAyMTQwRUUKKzoxMDVBNzAwMDFEODEyMTQwNUI4MTIxNDBCMTgxMjE0MDExODIyMTQwNjMKKzoxMDVBODAwMDFCODIyMTQwMUY4MjIxNDA4RDgyMjE0MEQ5ODIyMTQwRUEKKzoxMDVBOTAwMDMxODMyMTQwNkQ4MzIxNDBEMTgzMjE0MDA5ODQyMTQwRkQKKzoxMDVBQTAwMDE5ODQyMTQwNTE4NDIxNDA2MTg0MjE0MDc1ODQyMTQwMjIKKzoxMDVBQjAwMDlEODQyMTQwQTc4NDIxNDBCMTg0MjE0MDE1ODUyMTQwNDcKKzoxMDVBQzAwMDQ1ODUyMTQwNTE4NTIxNDBDNTg1MjE0MENGODUyMTQwMTQKKzoxMDVBRDAwMEQ5ODUyMTQwRTM4NTIxNDBFRDg1MjE0MEY3ODUyMTQwOEUKKzoxMDVBRTAwMDAxODYyMTQwMEI4NjIxNDAxNTg2MjE0MDAxODkyMTQwRjUKKzoxMDVBRjAwMDFGODYyMTQwMjk4NjIxNDAzMzg2MjE0MDNEODYyMTQwNTIKKzoxMDVCMDAwMDY1ODYyMTQwNkY4NjIxNDBEMTg2MjE0MERCODYyMTQwNzkKKzoxMDVCMTAwMEU1ODYyMTQwRUY4NjIxNDBGOTg2MjE0MDlENzQyMTQwOTEKKzoxMDVCMjAwMDAzODcyMTQwNjk4NzIxNDBCNTg3MjE0MEY5ODcyMTQwQkIKKzoxMDVCMzAwMDA5ODgyMTQwOUQ3NDIxNDA1NTg4MjE0MDU5ODgyMTQwODEKKzoxMDVCNDAwMDVEODgyMTQwQjU4ODIxNDBERDg4MjE0MEU5ODgyMTQwRDkKKzoxMDVCNTAwMEVEODgyMTQwRjE4ODIxNDBGNTg4MjE0MEY5ODgyMTQwRDUKKzoxMDVCNjAwMEZEODgyMTQwMkQ4NTIxNDA4OTg1MjE0MDlENzQyMTQwNUIKKzoxMDVCNzAwMDlENzQyMTQwMEQ4OTIxNDA5RDc0MjE0MEUxNzQyMTQwOTQKKzoxMDVCODAwMDlENzQyMTQwOUQ3NDIxNDA5RDc0MjE0MDlENzQyMTQwNEQKKzoxMDVCOTAwMDlENzQyMTQwOUQ3NDIxNDA2Qjc4MjE0MEY1N0IyMTQwMEMKKzoxMDVCQTAwMDMxN0MyMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDVCQjAwMDAwMDAwMDAwNUMwMTE4NDA1ODAxMTg0MDI0QTMyMDQwNTgKKzoxMDVCQzAwMDI0QTcyMDQwMDAwMDAwMDAwMDAwMDAwMDZDMDExODQwRTUKKzoxMDVCRDAwMDY4MDExODQwMjQ4MzIwNDAyNEEzMjA0MDAwMDAwMDAwRDYKKzoxMDVCRTAwMDAwMDAwMDAwN0MwMTE4NDA3ODAxMTg0MDAwMDAwMDAwMEYKKzoxMDVCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDMDExODQwQzAKKzoxMDVDMDAwMDg4MDExODQwMjRBOTIwNDAyNEFCMjA0MDAwMDAwMDAwNTcKKzoxMDVDMTAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMTIwMDE4MDAxMjAwNDAKKzoxMDVDMjAwMDBDMDAxMjAwMUMwMDEyMDAyNEE4MjA0MEE0QTgyMDQwNTAKKzoxMDVDMzAwMEE0QTgyMDQwMjRBOTIwNDAwMDAwMDAwMEQxQTgyMTQwQjEKKzoxMDVDNDAwMDJEQUEyMTQwMDAwMDAwMDA4OTcwMjE0MEM5QTEyMTQwRjcKKzoxMDVDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwNDMKKzoxMDVDNjAwMDU3ODkyMTQwRDFBODIxNDBDNTJGRkZGRjA1MjFGRkZGMDMKKzoxMDVDNzAwMEVGMjBGRkZGNTlBNzIxNDAzNDJFMDA4MDQ4MkUwMDgwREUKKzoxMDVDODAwMDVDMkUwMDgwMzAzMzNBMzEzMTNBMzEzMTAwMzAzNzJGRDkKKzoxMDVDOTAwMDMyMzMyRjMwMzEwMDMwMzAzMDMwMzEzNTM2MzkwMDQzMzcKKzoxMDVDQTAwMDZGNzA3OTcyNjk2NzY4NzQyMDI4NjMyOTIwMzIzMDMwRjgKKzoxMDVDQjAwMDMxMjAzMzQzNkY2RDIwNDM2RjcyNzA2RjcyNjE3NDY5NkUKKzoxMDVDQzAwMDZGNkUwQTAwMDgxMDAwMDMwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDVDRDAwMDAwMDAwMDAwOEM1M0ZGRkYyN0YwN0RGRDAwMDEwMDAyNTMKKzoxMDVDRTAwMERBMEU4MjAwMDE0MDY0MDQ2NDJEMDA4MEU0MkMwMDgwMDAKKzoxMDVDRjAwMDY5M0VGRkZGQzk0RkZGRkZENTI0RkZGRkM5M0JGRkZGRjAKKzoxMDVEMDAwMDI5M0NGRkZGMTkxQUZGRkY2NTExRkZGRkNDNTNGRkZGNkUKKzoxMDVEMTAwMDIxNDBGRkZGODk3MDIxNDA0OTcyMjE0MEQ5M0ZGRkZGOTgKKzoxMDVEMjAwMDIxOUEyMTQwODUyNEZGRkY2NDUzRkZGRjhDNTNGRkZGMUUKKzoxMDVEMzAwMDAwMDAwMDAwRkZGRjAwMDA4MDMwMDA4MDAwMDAwMDAwMzUKKzoxMDVENDAwMEZGRkYwMDAwMDAwMDIwNDBCMDUwMDAwMDdCMEUwMDAwNkMKKzoxMDVENTAwMDAwNkUyMTQwMDAwMDAwMDAwMDAwMDAwMEVEODkyMTQwOUQKKzoxMDVENjAwMDhCODkyMTQwQTU4QzIxNDAwNThEMjE0MENEOEQyMTQwN0UKKzoxMDVENzAwMDhCOEIyMTQwQTk4RTIxNDAxNThGMjE0MDY5OEIyMTQwQkEKKzoxMDVEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDVEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDVEQTAwMDAwMDAwMDAwNTlCRDIxNDBDMUJEMjE0MDJEQkUyMTQwNTEKKzoxMDVEQjAwMDAwMjAwQTRBMEIyMzFCMDJEMTE4MkQyMzlCMDFEMzE4NjQKKzoxMDVEQzAwMDg4NjFEODYwRDg2MzgwMzJDODYwMDg2MTQ4NjFEMDYyNTkKKzoxMDVERDAwMDAzNDhDMDQ2NDg2MDg4NjA3MDQ3MDAwMDY4MEUwMDgwMzUKKzoxMDVERTAwMEZFMDMwMDAwRjBCNTg0QjAwQzFDMDUxQzAwMjMwMDkzREEKKzoxMDVERjAwMEZGRjdERUZGNjg0OTBCMjMxQjAyQ0YxODc4NjgyODQwQTUKKzoxMDVFMDAwMDAwMjJGODYwM0E2MUJBNjgyMjQwN0E2MTBDMUM0MTA5QUMKKzoxMDVFMTAwMDAzRDI1MTA5MDFEMjgwMEEwMkQzNjA0ODAwRjBDMkY4Q0YKKzoxMDVFMjAwMDAxMjBGOTY4NDkwOTAzRDI3OTY5NDkwOTAwRDIwMDIwQTMKKzoxMDVFMzAwMDAwMDYwMDBFMDNGMEQ0RkFGODY4MDAyODcwRDAwMDIzQTIKKzoxMDVFNDAwMDAyOTMwMTkzNTQ0QTAxMjMxODQzRjg2MDAwMjBENTFEQTIKKzoxMDVFNTAwMDc5MzUwMzk1MDEyNDAwMjE0RjRERkE2ODIyNDAzOUQwNEQKKzoxMDVFNjAwMDhBMDA1MjE4OTIwMDRFNEI5QjVDMUUxQzgzNDIwNEQwNDkKKzoxMDVFNzAwMDRCNEJEMzE4NUI3ODgzNDIyQ0QxNDk0QkQyMThEMzc4NDMKKzoxMDVFODAwMDAzOURFRDZBQUI0MjAyRDkwMzlEQzA0NkVCNjI1MzY4QTUKKzoxMDVFOTAwMDVCMDgwMUQzMDEyMzAwOTM4NjQyMEFEMTk1NjgwMjlCRDcKKzoxMDVFQTAwMDVFMUMwMjk2OUIwMDNDNEU5RTE5MEIyMzFCMDJGMzE4QUUKKzoxMDVFQjAwMDlENjE1Mzc4ODM0MjBERDFEMjY4MDE5QjVEMUMwMTk1OTEKKzoxMDVFQzAwMDlCMDAzNTRENUQxOTJEMjM5QjAxRUIxOERBNjAzQTY5NzMKKzoxMDVFRDAwMDAxMzIzQTYxNjQwMDAxMzEwQjI5QkREMzAxMzAwOTI4MzgKKzoxMDVFRTAwMEI4RDMwMDIwMDI5Qjk5MDAyQjRBODkxODBCMjMxQjAyNzAKKzoxMDVFRjAwMEM5MTg4ODYxMDE5Qjk5MDA4OTE4MkQyMzlCMDFDOTE4MzUKKzoxMDVGMDAwMEM4NjAwMDlCMDAyQjBDRDE4MTAwODkxODBCMjMxQjAyNTkKKzoxMDVGMTAwMEM5MThDQjY5QzA0NjhCNjEwMTMwMEIyOEY0RDMwOEUwNjcKKzoxMDVGMjAwMDA3RTAwMzlERTg2QTMwMjgwM0QyMzAyMDAzOURDMDQ2NzUKKzoxMDVGMzAwMEU4NjIxOTRBNzg2OTAwMjgyQUQwMDAyMTAxMjMxODQzMTEKKzoxMDVGNDAwMDc4NjEwMDIwMDEyNDAwMjIxMzRFN0I2OTIzNDAxMEQwODkKKzoxMDVGNTAwMDkzMDA5QjE4OUIwMDEyNEQ1QjE5OUQ3ODg1NDIwOEQxRDgKKzoxMDVGNjAwMDFENjkwQjFDOUIwMDlFMTkyRDIzOUIwMUYzMThERDYzRkIKKzoxMDVGNzAwMDAxMzE2NDAwMDEzMjBCMkFFNkQzMDEzMDA5MjhFMUQzNTQKKzoxMDVGODAwMDAwMjA4OTAwMDQ0QTg5MTgyRDIzOUIwMUM5MThDODYzODEKKzoxMDVGOTAwMDA0QjBGMEJDMDhCQzE4NDc2ODBFMDA4MDMwNTNGRkZGMDcKKzoxMDVGQTAwMDAwMDEwMDgwMDA0NzA4NDcxMDQ3MTg0Nzc4NDdDMDQ2NUYKKzoxMDVGQjAwMDE4QzA5RkU1MUNGRjJGRTE3ODQ3QzA0NjEwQzA5RkU1NDEKKzoxMDVGQzAwMDFDRkYyRkUxNzg0N0MwNDYwOEMwOUZFNTFDRkYyRkUxNkEKKzoxMDVGRDAwMDM4NTJGRkZGODg1MUZGRkZENUIwMjE0MEYwQjUwNDIwQjMKKzoxMDVGRTAwMDFBNDkwMTI1MDg2MDFBNEZCQjIzMUIwMUY4MTgwNTczRDUKKzoxMDVGRjAwMDE4NDg0MTZCMkMwNTAwMjA3QTZFMTc0QjhBNDIxREQwNDEKKzoxMDYwMDAwMDE5N0IwMDI5MTdEMUQ5MURGRjMxM0EzMTQ5NzgxRTFDNUYKKzoxMDYwMTAwMDAwMjkxMEQxQjA2MDEwMjA3MDYwMTA0QTEwNDlGRkY3QkQKKzoxMDYwMjAwMEMzRkYwMDI4MDdEMDM1NzMwNDIzQjg2OTE4NDNCODYxNEIKKzoxMDYwMzAwMDIwNjEwMEYwMTdGOEYwQkMwOEJDMTg0NzE4NzMwNDIzNUYKKzoxMDYwNDAwMEI4Njk5ODQzQjg2MTIwNjFGNUU3MDAwMDAwMDAwMEIwMkUKKzoxMDYwNTAwMDY4MEUwMDgwMDAwMTE4NDAyODA1MDA4MDIwNTVGRkZGRDEKKzoxMDYwNjAwMDdENzEyMTQwRjhCNTE1NEYzOTZDMTU0ODQwNkUwQzFBRkEKKzoxMDYwNzAwMDE0NEU3MTY4MTQ0REExNDIwNkQ4MTQ0QTBBNDMwMDkyODYKKzoxMDYwODAwMEI5NkIwOTE4RkE2QjExRTAxMTIyNTIwNTIyNDMwMDkyRjQKKzoxMDYwOTAwMEI5NkIwOTE4MDAyMEZBNkIyQjFDRkZGNzhERkY3MDY4OTUKKzoxMDYwQTAwMDAwMUIwQTRBMDI0MzAwOTJCOTZCRkE2QjAwMjAyQjFDQkEKKzoxMDYwQjAwMEZGRjc4MkZGRjhCQzA4QkMxODQ3MDAwMDdDMjkwMDgwNkQKKzoxMDYwQzAwMDY4MEUwMDgwMjgwNTAwODA0NDgwMjA0MDAwMDAzNzAyRDAKKzoxMDYwRDAwMEYwQjUyQjRGQjg2ODc5NjhDMDE5MjAzMDI5NEFGRkY3MEUKKzoxMDYwRTAwMDYzRkYwMTIwQzAwMjI4NDlDMDQ2MDg2MEI5NjgzODFDMTcKKzoxMDYwRjAwMDI2NEQwMDI0MjY0RUVGMUQ3OTM3MDAyOTMxRDEzMTY4MTUKKzoxMDYxMDAwMDBBNzgxMjBBMDNEMjA0NzNGMEJDMDhCQzE4NDc0OTc4MTUKKzoxMDYxMTAwMDAwMjkwQ0QxMDUxQzQwNjgwMEYwM0VGOTMwNjgwMEYwMDEKKzoxMDYxMjAwMDY3RjgwMDI4MjZEMTJDNzNGRkY3NThGRjIyRTAwOTAxRjkKKzoxMDYxMzAwMDA3MUM0MTYwMDgxQzE3NEExNzQ5RkZGNzM1RkYwMDI4NjQKKzoxMDYxNDAwMDA3RDEzQzczMDQyM0E4Njk5ODQzOTkwNEE4NjEwODYxQTYKKzoxMDYxNTAwMERBRTcxMDIwMDBGMDIwRjkxMDIwQjg2MEZGRjc4MkZGODYKKzoxMDYxNjAwMEQyRTcwNTFDNDA2ODAwRjAxN0Y5MzA2ODAwRjA0MEY4RUQKKzoxMDYxNzAwMDAwMjhEOEQwMDIyM0Y4NkIxODQzRjg2M0M0RTcwMDAwNjYKKzoxMDYxODAwMDI4MDUwMDgwQTU1NUZGRkYwMDAwMDBCMDY4MEUwMDgwQzQKKzoxMDYxOTAwMEU0MDEwMDgwMjA1NUZGRkY3RDcxMjE0MDkwQjUwMTIwNzIKKzoxMDYxQTAwMDQwMDMxMDQ5MDAyNzA4NjAwRjRDRTAxREZGMzAzQTMwRDMKKzoxMDYxQjAwMDQ3NzBFMDY5ODAwMDAwMTkwMDY5MDBGMEQ3RjhFMDY5RDUKKzoxMDYxQzAwMDAwMjgwMUQwRTc2MTAxRTAwMTIwRTA2MTA3NDgwMjIzRDcKKzoxMDYxRDAwMEMxNkIxOTQzQzE2MzI3NzNGRkY3MDBGRjkwQkMwOEJDNzQKKzoxMDYxRTAwMDE4NDcwMDAwMDAwMDAwQjAyODA1MDA4MEU4MEUwMDgwN0QKKzoxMDYxRjAwMDgwQjU4NEIwMDcxQzc4ODg2RDI4MDNEQjM4MUMwMEYwNUMKKzoxMDYyMDAwMEY3RjgxN0UwODAwMDBENDkwOTU4MzgxQ0ZGRjdDQkZFNUUKKzoxMDYyMTAwMDAwMjgwRkQxMzk3OEM5MDkwQ0QzNjk0NjM4MUMwMEYwMjEKKzoxMDYyMjAwMENGRjg2ODQ2MDAyMTAwRjAwQkY4MDAyODAxRDEwMTIwQ0EKKzoxMDYyMzAwMDAwRTAwMDIwMDRCMDgwQkMwOEJDMTg0N0U4MDEwMDgwRTIKKzoxMDYyNDAwMEYwQjU4MkIwMDIxQzQxNEJERDFERkYzNTNBMzUyRjc4ODkKKzoxMDYyNTAwMDAwMkYwMUQwMDAyNzAwRTAwMTI3MkY3MDJGNzhGQjAwQ0UKKzoxMDYyNjAwMERCMTk1QjAxM0E0RkRDMTk0MDc4MDAwMUM3MUQwOTM3ODMKKzoxMDYyNzAwMDAwMjA4MzAwRDY1OEMwNDZFNjUwMDEzMDA0MjhGOEQzRTkKKzoxMDYyODAwMDAwMjkwRkQwMDAyMkJCMDgwMTkzODM0MjBCRDkxMzFDQjUKKzoxMDYyOTAwMDlCMDBDQjU4ODYwMEEzNTEwMTlCMDEzMDAxMzI4MzQyMDEKKzoxMDYyQTAwMEY1RDgwMEUwMTAyNzJCNDgwMjZEODA2RTJBNDk4MjQyMDMKKzoxMDYyQjAwMDAzRDg4MjFBQ0I2QzlBMUEwMEUwMTIxQUJBNDIwNUQ4OTcKKzoxMDYyQzAwMDI2NDg4MTZCMDEzMTgxNjMwMTIwMzdFMEMzMTlDQTZDMTQKKzoxMDYyRDAwMDkzNDIwOEQ4MjI0QTNBNDMwMDkyMEExQzQ5NkMwOTE4OTIKKzoxMDYyRTAwMDkyNkMyMzFDMTJFMDE2MUEwMDk2MUI0OTQ5NkMwOTE4N0YKKzoxMDYyRjAwMDE5NDg4MjZDMDMyMDIzMUNGRkY3NUVGRUI4MUIxODRBNjYKKzoxMDYzMDAwMDAyNDMwMDkyQTMxOTE0NDg4MjZDNDE2QzAzMjBGRkY3RUEKKzoxMDYzMTAwMDUzRkUwMTIwMEQ0OUMwNDY2ODcwOEE2OTkyMDA1MjE4RTgKKzoxMDYzMjAwMDE3NjE4QTY5MDAyQTAyRDAwMDI3OEY2MTAwRTA4ODYxMjYKKzoxMDYzMzAwMDBDNDgwMjIzQzE2QjE5NDNDMTYzMDAyMDAxMjcwQTQ5OUQKKzoxMDYzNDAwMEMwNDY0RjczMDJCMEYwQkMwOEJDMTg0NzI4MDUwMDgwNTcKKzoxMDYzNTAwMDUwQkEyMDQwNjgwRTAwODA3QzI5MDA4MEEwODIyMDQwMzYKKzoxMDYzNjAwMDAwMDAxOTAyRTgwRTAwODAxODFBMDA4MDA3NDk4QTZFQTIKKzoxMDYzNzAwMDEwMTgwNzRBRDI2QzEzMDQxQjBDODM0MjAwRDg4MDFBRjEKKzoxMDYzODAwMDg4NjY4ODZFMDM0OUMwNDY0ODYxNzA0NzY4MEUwMDgwODEKKzoxMDYzOTAwMDdDMjkwMDgwOTBFRTIwNDAwNjQ5NEE2RTEwMTgwNjRBN0IKKzoxMDYzQTAwMDEyNkM4MjQyMDBEODgwMUE0ODY2NDg2RTAzNDlDMDQ2ODMKKzoxMDYzQjAwMDA4NjE3MDQ3NjgwRTAwODA3QzI5MDA4MDkwRUUyMDQwQzQKKzoxMDYzQzAwMDA1MjIwQTYwODI4OEMwNDY4QTgwMDAyMjRBNzA0MDg4N0UKKzoxMDYzRDAwMEMwNDY0ODgwQ0E4MDhBNjBDQTYwNzA0NzA1MjIwMjYwNTEKKzoxMDYzRTAwMDAwMjI4MjgwNDI3MDQxODBDMjgwODI2MEMyNjA3MDQ3MTkKKzoxMDYzRjAwMDgwQjU4NEIwMDcxQzBFNDg0MTZCMDEzMTQxNjM2OTQ2OEEKKzoxMDY0MDAwMDM4MUNGRkY3RERGRjM4NjhDMDQ2MDA5MDQ1MjAwMEFCMjAKKzoxMDY0MTAwMDE4NzAwMTI3REY4MDY4NDYwMDIxRkZGNzExRkYwMDI4NzAKKzoxMDY0MjAwMDAxRDEzODFDMDBFMDAwMjAwNEIwODBCQzA4QkMxODQ3MzMKKzoxMDY0MzAwMEEwODIyMDQwMDBCNTg0QjBDMTg4MDk0QUMwNDY5MTgxM0QKKzoxMDY0NDAwMDY5NDZGRkY3QkRGRjAxMjA0MDAyMDFBQjU4ODA2ODQ2NTYKKzoxMDY0NTAwMDAwMjFGRkY3RjVGRTAxMjAwNEIwMDhCQzE4NDcwMDAwM0EKKzoxMDY0NjAwMEU4MEUwMDgwMDBCNUZGRjdDM0ZGMDhCQzE4NDcwMTIwMDUKKzoxMDY0NzAwMDAzNDlDMDQ2MDg3MUExMjE0OTAzODg2MDAwMjA3MDQ3ODQKKzoxMDY0ODAwMDI4MEYwMDgwMDAyMDA0NDlDMDQ2MDg3MUZGMjFBMTIyODYKKzoxMDY0OTAwMDUyMDMwMTMxOTE2MDcwNDcyODBGMDA4MDAyMjBBMTIxMzIKKzoxMDY0QTAwMDQ5MDM4ODYwMDAyMDcwNDcwMTIwNDAwMkExMjE0OTAzNzAKKzoxMDY0QjAwMDg4NjAwMDIwNzA0N0MwODhDMDA2QzAwRUExMjE0OTAzMzMKKzoxMDY0QzAwMDQ4NjEwMjQ5QzA0NkM4NjMwMDIwNzA0N0U4MUEwMDgwNEUKKzoxMDY0RDAwMDgwQjU4NEIwMDg0OTBGNkI2OTQ2RkZGNzcxRkZGODA2NzUKKzoxMDY0RTAwMEMwMEUwMUFCNTg4MDY4NDYwMDIxRkZGN0E5RkUwMTIwQ0QKKzoxMDY0RjAwMDA0QjA4MEJDMDhCQzE4NDc4MDAwMTQ0MDgwQjU4NUIwNEIKKzoxMDY1MDAwMDA3MUM2OTQ2MzgxQ0ZGRjc1QkZGRjg4ODA0QTkwM0YwRjUKKzoxMDY1MTAwMEM5RkYwMUFCNTg4MDAxQTg0MDg4MDAyODBGRDAwMUE4MEUKKzoxMDY1MjAwMDQwODg4MDA4MDMzODgwMDgwMTMwMDQzQjU4NzAwNDk4ODQKKzoxMDY1MzAwMDAxNjhDMDQ2MDI5MTQwNjhDMDQ2MDM5MDA1RTAwMEE4OEIKKzoxMDY1NDAwMDAwNzg0MDIzMTg0MzAwQUIxODcwMDQ5OEMxMUQwMTMxMzYKKzoxMDY1NTAwMDY4NDZGRkY3NzVGRTAxMjAwNUIwODBCQzA4QkMxODQ3RUYKKzoxMDY1NjAwMDkwQjU4NEIwMTQ0RjM5N0IwMDI5MjBEMUY5MURGRjMxM0IKKzoxMDY1NzAwMDNBMzE0OTc4MDAyOTFBRDExMDQ5MDUyMjAwOTIwODIyOUYKKzoxMDY1ODAwMDAwQUI1QTgwOTg4MDA2MjAwMEFCNTg3MDAwMjREQzgwNTUKKzoxMDY1OTAwMDA4NjhDMDQ2MDI5MDQ4NjhDMDQ2MDM5MDAxMjAzODczREUKKzoxMDY1QTAwMDY4NDYwODMxRkZGNzRDRkUwMDI4MDBEMDNDNzMwNEIwNjkKKzoxMDY1QjAwMDkwQkMwOEJDMTg0NzAwMDAyODA1MDA4MEE0MkEwMDgwNzEKKzoxMDY1QzAwMDkwQjU4NEIwMDcxQzY5NDYzODFDRkZGN0Y5RkVCQTY4MUQKKzoxMDY1RDAwMDBENEMwRTQ4MDAyQTA1RDEwRDQ5RkZGN0U0RkMwMDI4QjgKKzoxMDY1RTAwMDBDREEwNUUwQjk4ODBCNEJGRkY3REZGQzAwMjgwNURBNzEKKzoxMDY1RjAwMDAxQUI1QzgwNjg0NjAwMjFGRkY3MjJGRTAwMjAwNEIwNUEKKzoxMDY2MDAwMDkwQkMwOEJDMTg0NzAwMDBGRkZGMDAwMDBENzYyMTQwMzkKKzoxMDY2MTAwMEMxQkQyMTQwNTlCRDIxNDAwMEI1QzA4ODAzRjAyRUZGMDcKKzoxMDY2MjAwMDAwMjAwOEJDMTg0NzAwQjVGRkY3RTJGRTA4QkMxODQ3NzkKKzoxMDY2MzAwMDAwQjVGRkY3RERGRTA4QkMxODQ3MDBCNTAxMUMwMjIwQkQKKzoxMDY2NDAwMDAwRjAwMkY4MDhCQzE4NDdCMEI1QzZCMDA3MUMwODFDMUIKKzoxMDY2NTAwMDY5NDZGRkY3QjVGRTIxNDhGRkY3QTRGQzA0MUMyMDRBNTkKKzoxMDY2NjAwMDAwMjEzODFDRkZGN0EwRkMwMDI4MjdEMDA0QTkxRDRBRjAKKzoxMDY2NzAwMDM4MUNGRkY3OTlGQzA0QTgwMDIzMDEyRjA2RDEwQ0FBQUYKKzoxMDY2ODAwMDAyMzIwMDIxMTM2MDAxMzExMDI5RkJEMzAxNjgwNDI5NzMKKzoxMDY2OTAwMDA0RDk4OTA4MDMzOTg5MDgwMTMxMDBFMDE5MUMwMEFCQ0QKKzoxMDY2QTAwMDU5NzAwNkE5MDk3OEMwNDZEOTgwMDA2OEMwNDYwMjkwOTIKKzoxMDY2QjAwMDA3OThDMDQ2MDM5MDA0MzMwOEFEMDJFMDQ1MjAwMEFCQzQKKzoxMDY2QzAwMDE4NzAwOTQ5MjAxQ0ZGRjc2RUZDNjg0NjI5MUNGRkY3NkIKKzoxMDY2RDAwMEI3RkQwMTIwNDZCMEIwQkMwOEJDMTg0NzI0MDJGRkZGM0MKKzoxMDY2RTAwMDU5QjEyMTQwOURBRjIxNDAzQzAyRkZGRjAwQjUwMTFDODQKKzoxMDY2RjAwMDAyMjAwMEYwMTBGODA4QkMxODQ3MDBCNTAxMUMwMTIwNkEKKzoxMDY3MDAwMEZGRjdBMkZGMDhCQzE4NDcwMEI1MDExQzAxMjAwMEYwRUMKKzoxMDY3MTAwMDAyRjgwOEJDMTg0N0YwQjVDN0IwMDQxQzBGMUMzODFDQTEKKzoxMDY3MjAwMDAxQTlGRkY3NERGRTIxNDhGRkY3M0NGQzAwOTA3ODc4NjcKKzoxMDY3MzAwMDAwMDFCQTY4MDQzMEZDMkEyNUQ4RkYyMzA5MzM5ODQyQTcKKzoxMDY3NDAwMDIxRDgxOTJDMUZEOEZEODhGODY4QzA0NjA1OTBGOTFEN0UKKzoxMDY3NTAwMDA5MzEwNkFCMDAyMDdFNzgwMDJFMERERDQwQzk0MEMzMTQKKzoxMDY3NjAwMDQwQzk0MEMzNDBDOTQwQzM0MEM5NDBDMzAxMzAwMDA0RDAKKzoxMDY3NzAwMDAwMEM3RTc4ODY0MkYxREMyMDFDMDVBOTJCMUNGRkY3NUIKKzoxMDY3ODAwMDIxRkMwMDI4MDVEMDAxQTgwMDc4NDAyMzE4NDMwMUFCNjQKKzoxMDY3OTAwMDE4NzAwNzQ5MDA5OEZGRjcwNkZDMDAyMTAxQThGRkY3RDEKKzoxMDY3QTAwMDRGRkQwMTIwNDdCMEYwQkMwOEJDMTg0NzI0MDJGRkZGOTIKKzoxMDY3QjAwMDNDMDJGRkZGMDBCNUZGRjcxQkZFMDhCQzE4NDdGMEI1MTEKKzoxMDY3QzAwMEM2QjAwNzFDRkM4ODI1NEQ2ODY4MDEzMDY5NDY2ODYwQzIKKzoxMDY3RDAwMDM4MUNGRkY3RjVGRDEwMkMwOEQzMDBBODAwNzg0MDIzRTMKKzoxMDY3RTAwMDE4NDMwMEFCMTg3MDAyMjBEODgwMTdFMDc4Nzg4MjAwMzgKKzoxMDY3RjAwMEZCMUQwOTMzMDAyMEI5NjgwMDJBMTVEOTQwQ0IwRjFDQjYKKzoxMDY4MDAwMDAxMzFCRTQyMEREMDAwQUExMjc4NDAyMzFBNDMwMEFCREEKKzoxMDY4MTAwMDFBNzAwNDIyREE4MDAyOTAwMzkxMDQzMzY4NDYwMDIxNDIKKzoxMDY4MjAwMDE1RTAwMTMwOTA0MkU5RDMwMEFCNUM3MDAyOTQ2OTY4RDYKKzoxMDY4MzAwMEMwNDYwMzkxQTIwMDAwMjAxMDMzMDAyQTA1RDkwRjFDODYKKzoxMDY4NDAwMDgwQzMwMTMwMDEzMTkwNDJGOUQzNjg0NjA0QTlGRkY3QjMKKzoxMDY4NTAwMEY3RkMwMTIwNDZCMEYwQkMwOEJDMTg0NzlDMDMwMDgwNDAKKzoxMDY4NjAwMDkwQjQyMzQ4MDA2ODAxMjE0MjA5MDBEMzAwMjEwMDI3ODkKKzoxMDY4NzAwMDNBMUM0MzBCMDBEMjAyMjIxMTQzMUU0QTIwMjREMzY4NDMKKzoxMDY4ODAwMDAxMkIyRUQxODAwQTAwRDIwMDI0MEM0MzIwMUMxQjIzOTQKKzoxMDY4OTAwMERCMDFEMTE4ODk4QjA5MEIwMEQyMDQyNzM4NDNEMTZGNTMKKzoxMDY4QTAwMDA5NjgwOTBBMDdEMkQxMUQ3OTMxMDk2ODA5NjgwOTBBRkUKKzoxMDY4QjAwMDAxRDMwODIzMTg0M0UzMjMxQjAxRDExODg5NzkwMzI5NDUKKzoxMDY4QzAwMDAyRDFGRjIzMDEzMzE4NDMwQjQ5MDk2QTEwMjI0QjBBRjYKKzoxMDY4RDAwMDAwRDIwMDIyMTA0Mzg5MDc4OTBGODkwMTA4NDM5MEJDMjgKKzoxMDY4RTAwMDcwNDc0MDBDMDBEMjAwMjQwQzQzMjAxQ0VDRTcwMDAwNTEKKzoxMDY4RjAwMDAwMDAxMDQwNjgwRTAwODBDMDAwMTg0MEYwQjUzQTRDMEYKKzoxMDY5MDAwMDIwMUMwNEYwMDdGQTM5NDhFMzIzMUIwMUM3MThCOTc5QTIKKzoxMDY5MTAwMDM3NEVDNTFENzkzNTA2Mjk2MkQyMDJBMzVCNUM1QjAwNDgKKzoxMDY5MjAwMDlGNDQwMDFDMDMwRTFFMzc0RTU1MDEyMEI4NzEwMDIwRjUKKzoxMDY5MzAwMEIwNjBGRkY3OTVGRjA1MjM5ODQzMDBGMDZGRjgwQ0UwNzcKKzoxMDY5NDAwMEZGRjc4RUZGQzAwODA2RDNCMDY4NDExQ0IxNjAwQTI4NkIKKzoxMDY5NTAwMDAzRDkwNDIwMDBFMDAyMjBCODcxNjQyMjIwMUMyQkUwM0YKKzoxMDY5NjAwMDA2MUNDMDZGODAyMzAxNjgxOTQzMDE2MDAzMjBCODcxQzEKKzoxMDY5NzAwMDIwMUMyMDRBMDAyMTA0RjA5OUY5RjA2RjA0MjMwMTY4REIKKzoxMDY5ODAwMDk5NDMwMTYwMjg2ODAxNjgxOTQzMDE2MEYwQkMwOEJDQTQKKzoxMDY5OTAwMDE4NDcwNTIxQjk3MTI5NjgwNDIzMEE2ODlBNDMwQTYwRDcKKzoxMDY5QTAwMEMwNkYwMTY4MTk0MzAxNjBGRkY3NUFGRjA4MjMxODQzQkQKKzoxMDY5QjAwMDAwRjAzNEY4MjAxQzEwNEEwMDIxMDRGMDc3RjlFNUU3RDQKKzoxMDY5QzAwMEZGRjc0RUZGMDQyMzE4NDMwMEYwMjhGOERFRTcwMDIwMEQKKzoxMDY5RDAwMDI5Njg2MDIzMEE2ODlBNDMwQTYwRkZGN0UzRkFENUU3NUIKKzoxMDY5RTAwMDA2MjBCODcxRDJFNzAwMDBBOTc5MjE0MDY4MEUwMDgwMjYKKzoxMDY5RjAwMDlDMDMwMDgwMzA3NTAwMDAxMDI3MDAwMDAwQjUwMDIwQzcKKzoxMDZBMDAwMDA0NDlDMDQ2ODg3MTA0NDgwMTIyMDAyMTA0RjA0RUY5NkYKKzoxMDZBMTAwMDA4QkMxODQ3OTgxQzAwODBBOTc5MjE0MDkwQjUwNzFDMzQKKzoxMDZBMjAwMDMxNDgwMDY4NzkwODAzRDMxMDIzMDExQzk5NDMwMUUwMjEKKzoxMDZBMzAwMDEwMjEwMTQzMkQ0Q0UyNjgwMTJBMDVEMTIyNzkwMDJBNTgKKzoxMDZBNDAwMDAyRDAwMTIzOUIwMjE5NDM4MTQyMDJEMDAxMjAwMDA1OUMKKzoxMDZBNTAwMDAxNjBFMDY4MDEyODIwRDExQjIzREIwMUUwMTg4MDhCNTYKKzoxMDZBNjAwMEY5MDgwNEQzMDEyM0RCMDIwMTFDOTk0MzAxRTAwMTIxNTEKKzoxMDZBNzAwMEM5MDI4MTQyMDJEMDAwMjAwMkYwMUFGQjM4MDkwN0QzNzQKKzoxMDZBODAwMEUwNkY4MDIzMDE2ODk5NDMwMTYwRTAxODAwNjgwMEUwMkUKKzoxMDZBOTAwMEUwNkY4MDIzMDE2ODE5NDMwMTYwMTU0ODAxNkE3ODA5OTUKKzoxMDZBQTAwMDAzRDNGRjIwMDEzMDA4NDMwM0UwRkYyMzA4MUMwMTMzMTgKKzoxMDZBQjAwMDk4NDM4MDA4ODAwMEJBMDk5MjA3OTIwRjEwNDM4ODQyRDkKKzoxMDZBQzAwMDAyRDAwQzQ5QzA0NjA4NjJFMTY4MDEyOTA4RDE3OTBBNjAKKzoxMDZBRDAwMDA2RDNGRjIzMDQzMzE4NDAwMzI4MDFEMUZGRjc4RUZGQUMKKzoxMDZBRTAwMDkwQkMwOEJDMTg0NzAwMDAwMDAwMTA0MDY4MEUwMDgwRjEKKzoxMDZBRjAwMEMwMDAxODQwQzAwMDE4MDA4MEI1RkZGN0IxRkU4MDA5NDMKKzoxMDZCMDAwMDFCRDIwRjQ4RTMyMzFCMDFDMTE4NEE3OTAwMkExNEQxNzQKKzoxMDZCMTAwMDAxMjI0QTcxMDAyNzgwMzAwMDY4NjAyMzAxNjg5OTQzOTAKKzoxMDZCMjAwMDAxNjAwODQ4MDZFMDAyMjAwMkYwOENGQzA3MjAwMkYwMTkKKzoxMDZCMzAwMDVCRkMzODFDRkZGNzM2RkFGNUU3ODBCQzA4QkMxODQ3NDkKKzoxMDZCNDAwMDY4MEUwMDgwRjQwMUZGRkYwMEI1ODRCMDY5NDZGRkY3Q0UKKzoxMDZCNTAwMDM3RkNGRkY3ODVGRTAxQUI1ODgwMDg0ODAwNjhDMDQ2NDcKKzoxMDZCNjAwMDAyOTAwNzQ4MDA2QUMwNDYwMzkwNjg0NjAwMjFGRkY3N0MKKzoxMDZCNzAwMDY3RkIwMTIwMDRCMDA4QkMxODQ3MDAwMDAwMDAxMDQwNkIKKzoxMDZCODAwMEMwMDAxODQwODBCNTg0QjAwNzFDNjk0NjM4MUNGRkY3NjgKKzoxMDZCOTAwMDE3RkNGODg4RkZGNzQyRkZGRkY3NjJGRTAxQUI1ODgwNTEKKzoxMDZCQTAwMDY4NDYwMDIxRkZGNzRDRkIwMTIwMDRCMDgwQkMwOEJDMDQKKzoxMDZCQjAwMDE4NDdCMEI1QzZCMEM3ODg2OTQ2RkZGNzAxRkMwMTI0ODUKKzoxMDZCQzAwMDFBNEI5RjQyMEFEOTAwQTgwMDc4NDAyMzE4NDMwMEFCMTMKKzoxMDZCRDAwMDE4NzAwMjIwRDg4MDY4NDYwMDIxMjBFMDE0NDhGRkY3OTIKKzoxMDZCRTAwMEUxRjkwNTFDMTM0QTM4MUMwNEE5RkZGN0RERjkxMjQ5MjUKKzoxMDZCRjAwMDI4MUNGRkY3RDhGOTAxMkYwNkQxMENBOTAwMjAwMDIyOEMKKzoxMDZDMDAwMDBBNjAwMTMwMTAyOEZCRDMxMDIwMDBBQjU4NzAwNDk4QTQKKzoxMDZDMTAwMEMwNDYwMjkwMDU5OEMwNDYwMzkwNjg0NjA2QTlGRkY3NTMKKzoxMDZDMjAwMDBGRkIyMDFDNDZCMEIwQkMwOEJDMTg0N0ZGMDEwMDAwOTkKKzoxMDZDMzAwMDI0MDJGRkZGOURBRjIxNDAzQzAyRkZGRkYwQjVDNkIwMkMKKzoxMDZDNDAwMDA3MUM2OTQ2MzgxQ0ZGRjdCQkZCRkM4ODc4NzgwMTI1RDgKKzoxMDZDNTAwMDEwMjgwMUQxMTkyQzA5RDkwMEE4MDA3ODQwMjMxODQzMjUKKzoxMDZDNjAwMDAwQUIxODcwMDIyMEQ4ODAwNDMzMjdFMEI4NjhDMDQ2MTMKKzoxMDZDNzAwMDA0OTBGODY4QzA0NjA1OTAwNkFBRkIxRDA5MzMwMDIxNjAKKzoxMDZDODAwMDc4NzgwMDI4MERERDAwMjA0MENCNDBDMjAxMzAwMDA0QTAKKzoxMDZDOTAwMDAwMEMwNDI4RjhEQjQ4MUMwMTA0MDkwQzc4Nzg4ODQyQjEKKzoxMDZDQTAwMEYxREMwQjQ4RkZGNzdFRjkwNzFDMEE0QTIwMUMwNEE5RjcKKzoxMDZDQjAwMEZGRjc3QUY5MDg0OTM4MUNGRkY3NzVGOTY4NDYwMDIxOTMKKzoxMDZDQzAwMEZGRjdCRUZBMjgxQzQ2QjBGMEJDMDhCQzE4NDcwMDAwMEQKKzoxMDZDRDAwMDI0MDJGRkZGQzVBRjIxNDAzQzAyRkZGRkYwQjU4NEIwQTYKKzoxMDZDRTAwMDA0MUMwMDI3RTY4OEEyNjg0NzQ5MDg3OTAwMjgwOEQwRDQKKzoxMDZDRjAwMDAwMkUwMUQwMDEyRTAxRDEwMTI3MDFFMDA0MkUwMEQxODgKKzoxMDZEMDAwMDAzMjYwMTI1NDE0ODA1MkU2NkQyMDJBMzlCNUQ1QjAwNDgKKzoxMDZEMTAwMDlGNDQwMDFDMDMwNjA4MEMxMDAwMDU4MDAwMjMwM0UwQkMKKzoxMDZEMjAwMDA1ODAwNUUwMDAyMzAzODA0MzgwMDZFMDAwMjMwMzgwMDQKKzoxMDZEMzAwMDQ1ODAwMkUwRkYyMzAxMzMwMzgwQ0IxRDc5MzM5RTg5MTgKKzoxMDZENDAwMDAxMjM1QjAyOUU0MjAyREJEMjA3RDIwRjAwRTAwMTIyNDgKKzoxMDZENTAwMDZEMjM1QjAxQzkxODg5ODhGRjIzRTEzMzk5NDMwMTIzMUYKKzoxMDZENjAwMDE5NDMwNjg4RkYzMzlFNDIwREQxRkYyMEUxMzAwODQzQ0UKKzoxMDZENzAwMDAwMkEwNEQxMDEyMzlCMDI5ODQzMDExQzIwRTAwMTIxMzkKKzoxMDZEODAwMDg5MDIwMTQzMUNFMDAxMkUwQUQxNDA4ODAxMjgwNEQxNjgKKzoxMDZEOTAwMDYwMjMxOTQzMDAyQTEzRDAwQ0UwMjAyMzE5NDMwRkUwOEQKKzoxMDZEQTAwMDAwMkUwREQxNDA4ODAxMjgwOEQxRkYyMzgxMzMxOTQzREIKKzoxMDZEQjAwMDAwMkEwNUQwMDEyMzlCMDIxOTQzMDFFMDgwMjMxOTQzRDcKKzoxMDZEQzAwMDA0MjAwMkYwNzVGOTA5MjE0OTAyMDAyMDAyRjA3MEY5NEYKKzoxMDZERDAwMDAwMkYwMkQxMDAyMDEyRTBGRkU3Njk0NjIwMUNGRkY3RDgKKzoxMDZERTAwMEVGRkEwMEE4MDA3ODQwMjMxODQzMDBBQjE4NzAwMjIwODcKKzoxMDZERjAwMEQ4ODA2ODQ2MDAyMTA0MzNGRkY3MjJGQTI4MUMwNEIwMkIKKzoxMDZFMDAwMEYwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MDg4MUMwMDgwOTkKKzoxMDZFMTAwMEMwODg1MTIxODkwMzA4NjIwMDIwNzA0NzgwQjUxNjRGNTEKKzoxMDZFMjAwMEY4NjgwMTI4MDdEMTM3MjM5QjAxRjgxODQwOEE4MDIxOTAKKzoxMDZFMzAwMDAxNDMxQjIwMDdFMDZEMjM1QjAxRjgxODgwOEIwMTIxQzMKKzoxMDZFNDAwMDQ5MDMwMTQzMTAyMDAyRjAzM0Y5MDEyMDcxMjM1QjAxNTMKKzoxMDZFNTAwMEY5MTgwODgwNDg4MDFCMjNEQjAxRjgxODgwOEIwMTIzNzgKKzoxMDZFNjAwMDFCMDM5ODQzNDEyMTA5MDIwMTQzMDAyMDAyRjAyMEY5NEQKKzoxMDZFNzAwMDAwMjA4MEJDMDhCQzE4NDc2ODBFMDA4MDgwQjUxNzRGMDIKKzoxMDZFODAwMEY4NjgwMTI4MDhEMTM3MjM5QjAxRjgxODQwOEE4MDIzMkQKKzoxMDZFOTAwMDk4NDMwMTFDMUIyMDA4RTA2RDIzNUIwMUY4MTg4MDhCRDAKKzoxMDZFQTAwMDAxMjM1QjAzOTg0MzAxMUMxMDIwMDJGMDAxRjlGRjIwMkQKKzoxMDZFQjAwMDcxMjM1QjAxRjkxODAxMzAwODgwMUIyM0RCMDFGODE4RUUKKzoxMDZFQzAwMDgwOEI0MTIzMUIwMjk4NDMwOTIxNDkwMjAxNDMwMDIwODIKKzoxMDZFRDAwMDAyRjBFRUY4MDAyMDgwQkMwOEJDMTg0NzY4MEUwMDgwNjUKKzoxMDZFRTAwMDgwQjU4NEIwMDg0OUNGNkE2OTQ2RkZGNzY5RkFCODA1RUEKKzoxMDZFRjAwMDgwMEQwMUFCNTg4MDY4NDYwMDIxRkZGN0ExRjkwMTIwMDEKKzoxMDZGMDAwMDA0QjA4MEJDMDhCQzE4NDc0MDAwMTQ0MEMwODg5RjIzRDAKKzoxMDZGMTAwMDE4NDAwNTQ5Qzk2QTFCMjM1QjAxMTk0MDA4NDMwMzQ5MEUKKzoxMDZGMjAwMEMwNDZDODYyMDAyMDcwNDc0MDAwMTQ0MDQwMDAxNDAwNzIKKzoxMDZGMzAwMDgwQjU4NEIwMEQ0OTBGNkEwMTJGMDFEMUZGMDMwN0UwMkUKKzoxMDZGNDAwMDAyMkYwMUQxM0YwMzAzRTAwMDJGMDFEMTAxMjdGRjAyRUYKKzoxMDZGNTAwMDY5NDZGRkY3MzVGQTAxQUI1RjgwNjg0NjAwMjFGRkY3MEQKKzoxMDZGNjAwMDZGRjkwMTIwMDRCMDgwQkMwOEJDMTg0NzAwMjAxNDQwMTEKKzoxMDZGNzAwMEMyODhBMTIwNDAwMzAwMjEwMTIzNUIwMzlBNDIwMUQxNzIKKzoxMDZGODAwMDAyMjIwNEUwMDEyM0RCMDM5QTQyMDJEMTAxMjIwMjYyQzEKKzoxMDZGOTAwMDAwRTAwMTYyMDgxQzcwNDc5MEI1ODRCMDA3MUMwMkYwNDUKKzoxMDZGQTAwMDlGRjg2OTQ2MDQxQzM4MUNGRkY3MEFGQTAxQUI1QzgwQTUKKzoxMDZGQjAwMDA5NEZGODZEQzA0NjAyOTA2ODQ2MDAyMUZGRjc0MEY5N0UKKzoxMDZGQzAwMEY4NkRDMDA3QzAwRjA1NDlDMDQ2Qzg2MjAxMjAwNEIwNzMKKzoxMDZGRDAwMDkwQkMwOEJDMTg0NzAwMDBBNDJBMDA4MDY4MUMwMDgwRjAKKzoxMDZGRTAwMEMwODgwMjQ5QzA0NjQ4NjEwMDIwNzA0NzgwMDAxNDAwRjQKKzoxMDZGRjAwMDAwQjU4NEIwNjk0NkZGRjdFM0Y5MDY0OEMwNjgwMUFCMDUKKzoxMDcwMDAwMDU4ODA2ODQ2MDAyMUZGRjcxQkY5MDEyMDA0QjAwOEJDMzYKKzoxMDcwMTAwMDE4NDcwMDAwODAwMDE0NDBDMDg4MDI0OUMwNDZDODYwN0MKKzoxMDcwMjAwMDAwMjA3MDQ3ODAwMDE0MDA4MEI1ODRCMDY5NDY4NzY4RUUKKzoxMDcwMzAwMEZGRjdDNkY5MjAyRjA3RDI3ODAwMEM0OTQwMTgxQjIzMTAKKzoxMDcwNDAwMERCMDFDMDE4ODA4QjA2RTAwMEE4MDA3ODQwMjMxODQzQkQKKzoxMDcwNTAwMDAwQUIxODcwMDIyMDAxQUI1ODgwNjg0NjAwMjFGRkY3OTIKKzoxMDcwNjAwMEVGRjgwMTIwMDRCMDgwQkMwOEJDMTg0NzY4MEUwMDgwMEYKKzoxMDcwNzAwMDAwQjU4NEIwQzE4ODgyNjgyMDJBMDREMjEwMUMwMkYwQjYKKzoxMDcwODAwMDE3RjgwMDIwMTBFMDY5NDZGRkY3OUFGOTAwQTgwMDc4ODkKKzoxMDcwOTAwMDQwMjMxODQzMDBBQjE4NzAwMjIwRDg4MDY4NDYwMDIxQjYKKzoxMDcwQTAwMDA0MzNGRkY3Q0RGODAxMjAwNEIwMDhCQzE4NDc5MEI1QjEKKzoxMDcwQjAwMDg0QjBDNzg4Njk0NkZGRjc4M0Y5MTA0OEZFRjc3MkZGNkUKKzoxMDcwQzAwMDAyMjAzOTFDMDJGMEYyRkYwMDI4MDZEMDAyMjAzOTFDRjEKKzoxMDcwRDAwMDAyRjAzNkZGMDFBQjU4ODAwMkUwNDUyMDAwQUIxODcwOEIKKzoxMDcwRTAwMDA3NDkyMDFDRkVGNzVGRkY2ODQ2MDAyMUZGRjdBOEY4NUMKKzoxMDcwRjAwMDAxMjAwNEIwOTBCQzA4QkMxODQ3MDAwMDI0MDJGRkZGMjgKKzoxMDcxMDAwMDNDMDJGRkZGQjBCNTg0QjBDNzg4Njk0Njg0NjhGRkY3Q0EKKzoxMDcxMTAwMDU3RjkxMDQ4RkVGNzQ2RkYwRjRBMDIyMDM5MUNGRUY3QzgKKzoxMDcxMjAwMDQzRkYwMDI4MDZEMDBENEIwMjIwMzkxQzIyMUNGRUY3MUQKKzoxMDcxMzAwMDNDRkYwMkUwNDUyMDAwQUIxODcwMDk0OTI4MUNGRUY3MEYKKzoxMDcxNDAwMDMyRkY2ODQ2MDAyMUZGRjc3QkY4MDEyMDA0QjBCMEJDOTUKKzoxMDcxNTAwMDA4QkMxODQ3MjQwMkZGRkY1OUIxMjE0MDU5QjAyMTQwMTMKKzoxMDcxNjAwMDNDMDJGRkZGMDBCNUZGRjc0M0Y5MDhCQzE4NDcwMDIwQjkKKzoxMDcxNzAwMDcwNDc4MEI0QzI4ODE5NEJBMTIxNDkwMzAwMkEwM0QxNkEKKzoxMDcxODAwMDE4NkIxMDIzOTg0MzA0RTAwMTJBMDREMTE4NkIxMDIzRDQKKzoxMDcxOTAwMDE4NDM0ODYxMUZFMDAyMkExREQxQzI2ODg3NjgwMDIwOTkKKzoxMDcxQTAwMDNCMUNDMzQwREIwN0RCMEY5QjAyMDM0MzBCNjEwMTMwMzkKKzoxMDcxQjAwMDAwMDQwMDBDMjAyOEYzREIwMDIwMTMxQ0MzNDBEQjA3NzUKKzoxMDcxQzAwMERCMEY5QjAyQzcxRDE5MzczQjQzMEI2MTAxMzAwMDA0RTUKKzoxMDcxRDAwMDAwMEMyMDI4RjFEQjAwMjA4MEJDNzA0NzgwMDAxNDQwQTgKKzoxMDcxRTAwMDgwQjRDMjg4ODE2ODEwMDIxMjBBMTA0MzAyMDQxMjBDOTMKKzoxMDcxRjAwMDBDNDhDMDQ2MDI2MDBDNEJDMDQ2MUE4MDBBMEMxNzAyQUQKKzoxMDcyMDAwMDEyMTIzQTQzMTIwNDEyMEM0MjYwNUE4MDA5MDQwOTBDMEIKKzoxMDcyMTAwMDBBMDIwOTBBMTE0MzA5MDQwOTBDODE2MDk5ODAwMDIwQkYKKzoxMDcyMjAwMDgwQkM3MDQ3NDAwMDE0MDAyODFCMDA4MEIwQjU4NEIwQkIKKzoxMDcyMzAwMDEzNDkwQTY4MTIwNDEyMEMxMzAyMTIxMjEzNDM0QTY4MEIKKzoxMDcyNDAwMDEyMDQxMjBDMUYxQzEzMDIxMjEyMTM0Mzg5NjgwOTA0NDIKKzoxMDcyNTAwMDA5MEMwQTAyMDkxMjExNDMwQzA0MjQwQzY5NDYxRDFDNzYKKzoxMDcyNjAwMEZGRjdBRUY4MDFBQjVGODAyODA0MjA0MzAyOTA2ODQ2MjgKKzoxMDcyNzAwMDAwMjFGRUY3RTVGRjAxMjAwNEIwQjBCQzA4QkMxODQ3QjAKKzoxMDcyODAwMDQwMDAxNDQwQzE4ODgyNjgwODAyMDkwQTA4NDMwMDA0Q0IKKzoxMDcyOTAwMDAwMEMwQTQ5QzA0NkM4NjAxMDBDMDMwMjAwMTIxODQzRDMKKzoxMDcyQTAwMDAwMDQwMDBDMDg2MTEwMDQwMDBDMDIwMjAwMEExMDQzRTQKKzoxMDcyQjAwMDAwMDQwMDBDNDg2MTAwMjA3MDQ3MDAwMDQwMDAxNDAwRUEKKzoxMDcyQzAwMDkwQjU4NEIwMTY0QkQ5NjgwOTA0MDkwQzBBMDIwOTEyNUEKKzoxMDcyRDAwMDExNDMxQTY5MTIwNDEyMEMxNzAyMTIxMjNBNDM1QjY5MjUKKzoxMDcyRTAwMDFCMDQxQjBDMUYwMjFCMTIzQjQzMUYwNDNGMEMwNTIzRjYKKzoxMDcyRjAwMDAwOTM4NDg4MDFBQjFDODAwMDI0MDQzQjVDNzA0MDg4QjAKKzoxMDczMDAwMDAwQUI1ODgwRDk4MDEwMDQzODQzMDI5MDAzOTQ2ODQ2M0IKKzoxMDczMTAwMDAwMjFGRUY3OTVGRjAxMjAwNEIwOTBCQzA4QkMxODQ3N0YKKzoxMDczMjAwMDQwMDAxNDQwMDBCNTg0QjAwQjQ5OEE2QTA1MjEwMDkxRTEKKzoxMDczMzAwMDgxODgwMUFCMTk4MDAwMjEwNDNCNTk3MDQwODgwMEFCNjMKKzoxMDczNDAwMDU4ODBEQTgwMDI5MTAzOTE2ODQ2RkVGNzc5RkYwMTIwQTgKKzoxMDczNTAwMDA0QjAwOEJDMTg0NzAwMDBDMDAwMTQ0MEMwODgwMjQ5QUYKKzoxMDczNjAwMEMwNDY4ODYyMDAyMDcwNDdDMDAwMTQwMDAwQjU4NEIwOTkKKzoxMDczNzAwMDBCNDkwQTZBMDUyMTAwOTE4MTg4MDFBQjE5ODAwMDIxMUYKKzoxMDczODAwMDA0M0I1OTcwNDA4ODAwQUI1ODgwREE4MDAyOTEwMzkxMjkKKzoxMDczOTAwMDY4NDZGRUY3NTVGRjAxMjAwNEIwMDhCQzE4NDcwMDAwRkUKKzoxMDczQTAwMEMwMDAxNDQwQzA4ODAyNDlDMDQ2MDg2MjAwMjA3MDQ3RUYKKzoxMDczQjAwMEMwMDAxNDAwMDBCNUMwODgwMjQ5RkVGN0Y0RkQwMDIwQUIKKzoxMDczQzAwMDA4QkMxODQ3NzUwMkZGRkYwMEI1ODRCMDY5NDZGRUY3OTgKKzoxMDczRDAwMEY3RkYwNjQ4MDA2QjAxQUI1ODgwNjg0NjAwMjFGRUY3QjYKKzoxMDczRTAwMDJGRkYwMTIwMDRCMDA4QkMxODQ3MDAwMDY4MEUwMDgwODEKKzoxMDczRjAwMDAwQjVGRUY3RkRGRjA4QkMxODQ3MDBCNUZFRjdGOEZGMjMKKzoxMDc0MDAwMDA4QkMxODQ3MDBCNUZFRjdGM0ZGMDhCQzE4NDc4MEI1NjUKKzoxMDc0MTAwMDA3MUMxMDQ4RkVGN0M2RkQwMTIwNDAwMkExMjE0OTAzQzgKKzoxMDc0MjAwMDg4NjAwMDIxMEM0OEMwNDYwMTcxMEM0ODAyNjg1MjBDNkIKKzoxMDc0MzAwMDA1RDIwMjY4MTIwQzA2RDEwMDY4ODAwQTAzRDMwODQ4RkUKKzoxMDc0NDAwMEMwNDZDNzYwMDJFMDA3NDhDMDQ2MDc2NDA4MUM4MEJDMEQKKzoxMDc0NTAwMDA4QkMxODQ3RDU5NDIxNDAyODBGMDA4MDAwMDAxMDQwMzgKKzoxMDc0NjAwMDQwMDExODAwMDAwMDAwODAwMEI1MDEyMDAzNDlDMDQ2MUIKKzoxMDc0NzAwMDA4NzIxMjIwRkZGN0NCRkYwOEJDMTg0Nzg4MUMwMDgwNTkKKzoxMDc0ODAwMDAwQjUwMTIwMDM0OUMwNDY0ODcyMTUyMEZGRjdCRkZGMzEKKzoxMDc0OTAwMDA4QkMxODQ3ODgxQzAwODAwMEI1MDFGMEY5RkYwMTIwRTYKKzoxMDc0QTAwMDA4QkMxODQ3ODBCNTg0QjAwNzFDRjg4ODAyRjBGRUY4QzUKKzoxMDc0QjAwMDAwMjgwQ0QxNjk0NjM4MUNGRUY3ODJGRjA2NDgwMUFCNTQKKzoxMDc0QzAwMDU4ODA2ODQ2MDAyMUZFRjdCQkZFMDEyMDAwRTAwMDIwNDYKKzoxMDc0RDAwMDA0QjA4MEJDMDhCQzE4NDdGRkZGMDAwMDgwQjU4NEIwMzIKKzoxMDc0RTAwMDY5NDZGRUY3NkRGRjAxMjcwMUFCNUY4MDA5NDg4MTg5N0UKKzoxMDc0RjAwMDA5MDRDMjg5MTE0MzAyOTE4MTg4MDkwNEMwODgwODQzQTQKKzoxMDc1MDAwMDAzOTA2ODQ2MDAyMUZFRjc5QkZFMzgxQzA0QjA4MEJDNDcKKzoxMDc1MTAwMDA4QkMxODQ3NEMyQTAwODAwMEI1RkVGNzY5RkYwOEJDN0MKKzoxMDc1MjAwMDE4NDcwMEI1RkVGNzY0RkYwOEJDMTg0NzAwQjVGRUY3MjIKKzoxMDc1MzAwMDVGRkYwOEJDMTg0NzAwQjVGRUY3NUFGRjA4QkMxODQ3QTQKKzoxMDc1NDAwMDAwQjVGRUY3NTVGRjA4QkMxODQ3MDBCNUZFRjc1MEZGMjEKKzoxMDc1NTAwMDA4QkMxODQ3MDBCNUZFRjc0QkZGMDhCQzE4NDcwMEI1M0MKKzoxMDc1NjAwMEZFRjc0NkZGMDhCQzE4NDcwMEI1RkVGNzQxRkYwOEJDMTAKKzoxMDc1NzAwMDE4NDcwMEI1RkVGNzNDRkYwOEJDMTg0NzAwQjVGRUY3RkEKKzoxMDc1ODAwMDM3RkYwOEJDMTg0NzAwQjVGRUY3MzJGRjA4QkMxODQ3QTQKKzoxMDc1OTAwMDAwQjU4Q0IwMDhBOUZFRjcxM0ZGNjk0NjA4QTgwMkYwRjEKKzoxMDc1QTAwMEE5RkYwMjIwMDhBQjU4NzA2OTQ2MDhBOEZFRjc0OEZFRkMKKzoxMDc1QjAwMDAxMjAwQ0IwMDhCQzE4NDcwMEI1RkVGNzE5RkYwOEJDNDUKKzoxMDc1QzAwMDE4NDc5MEI1ODRCMDA3MUM2OTQ2MzgxQ0ZFRjdGOEZFRDIKKzoxMDc1RDAwMEZBODgxMjQ5MDEyNEM4MUQ4OTMwMDAyQTBGRDAwNDcwOEUKKzoxMDc1RTAwMDQ0NzBCODY4MDAwQzgwMzFDODgyQjg2OEMwNDYwODgzMEYKKzoxMDc1RjAwMEY4NjgwMDBDNDg4M0Y4NjhDMDQ2ODg4MzAyRTAwMDIxRTAKKzoxMDc2MDAwMDAxNzA0MTcwMDY0ODAxQUI1ODgwNjg0NjAwMjFGRUY3QzIKKzoxMDc2MTAwMDE3RkUyMDFDMDRCMDkwQkMwOEJDMTg0NzY4MEUwMDgwMDAKKzoxMDc2MjAwMEZGRkYwMDAwMDBCNUZFRjdFM0ZFMDhCQzE4NDcwMEI1RjkKKzoxMDc2MzAwMEZFRjdERUZFMDhCQzE4NDcwMEI1RkVGN0Q5RkUwOEJDMTEKKzoxMDc2NDAwMDE4NDcwMEI1RkVGN0Q0RkUwOEJDMTg0NzAwQjVGRUY3OTIKKzoxMDc2NTAwMENGRkUwOEJDMTg0NzkwQjU4NEIwMDcxQzY5NDYzODFDOUIKKzoxMDc2NjAwMEZFRjdBRUZFRjg4ODAzMjRFNDA0MDQ0MzAzMjNEQjA0OUUKKzoxMDc2NzAwMDlDNDIwMkQzMEY0QjlDNDIwNkQ5MEY0ODAxQUI1ODgwNjUKKzoxMDc2ODAwMDY4NDYwMDIxRkVGN0RDRkQwMTIwODAwNzIwNDMwMDY4RUEKKzoxMDc2OTAwMDAwMjEwMEFCNTk3MEZBODhDMDQ2REE4MDAyOTAwMzkxNEQKKzoxMDc2QTAwMDY4NDYwNDMzRkVGN0NDRkQwMTIwMDRCMDkwQkMwOEJDNTIKKzoxMDc2QjAwMDE4NDcwMDAwRTAwMDE4MDBGRkZGMDAwMDgwQjU4NEIwMEMKKzoxMDc2QzAwMDA3MUM2OTQ2MzgxQ0ZFRjc3QkZFRjg4ODAzMjNEQjA0QTEKKzoxMDc2RDAwMDE4NDM5ODQyMDJEMzBBNEI5ODQyMDhEOTA5NDgwMUFCOTMKKzoxMDc2RTAwMDU4ODA2ODQ2MDAyMUZFRjdBQkZEMDEyMDAzRTBCOTY4MzEKKzoxMDc2RjAwMEMwNDYwMTYwMDAyMDA0QjA4MEJDMDhCQzE4NDcwMDAwRjAKKzoxMDc3MDAwMEUwMDAxODAwRkZGRjAwMDA4MEI1ODZCMDAyQTlGRUY3NzgKKzoxMDc3MTAwMDU3RkUwMTI3MDJBQjVGNzAwMDIwRDg4MDBBNDg0MTY4RkQKKzoxMDc3MjAwMEMwNDYwNDkxODE2OEMwNDYwNTkxQzE2OEMwNDYwMDkxNzkKKzoxMDc3MzAwMDQwNjlDMDQ2MDE5MDY5NDYwMkE4RkVGNzgxRkQzODFDRTkKKzoxMDc3NDAwMDA2QjA4MEJDMDhCQzE4NDc2ODE5MDA4MDAwQjVDMTY4NDUKKzoxMDc3NTAwMDgwNjhGRUY3NDdGQjAwMjAwOEJDMTg0NzAwMjA3MDQ3RjAKKzoxMDc3NjAwMDkwQjU4NEIwMDQxQzBGMUM2ODQ2NTAyMUZFRjczNkZFMEQKKzoxMDc3NzAwMDAxQUI1QzgwMDI5NzY4NDYwMDIxRkVGNzYxRkQwNEIwMTIKKzoxMDc3ODAwMDkwQkMwOEJDMTg0NzgwQjU4NEIwMDcxQzY4NDY1MTIxREUKKzoxMDc3OTAwMEZFRjcyNEZFMDFBQjVGODA2ODQ2MDAyMUZFRjc1MEZEMzYKKzoxMDc3QTAwMDA0QjA4MEJDMDhCQzE4NDcwMDIwNzA0NzAwMjA3MDQ3MTgKKzoxMDc3QjAwMDkwQjU4NEIwMDAyNzEyNDkwOTY4MTI0QTEyNkIxMDIzNTEKKzoxMDc3QzAwMDFBNDAwMTI0MDAyQTAwRDAwMTI3OEEwQzAzRDMzQTA0NkUKKzoxMDc3RDAwMDEyMEMwMjI3MTc0M0M5MEMwM0QzMzkwNDA5MEMwNDI3RTAKKzoxMDc3RTAwMDBGNDM2OTQ2RkVGN0VDRkQwMUFCNUY4MDY4NDYwMDIxNjAKKzoxMDc3RjAwMEZFRjcyNkZEMjAxQzA0QjA5MEJDMDhCQzE4NDcwMDAwMTIKKzoxMDc4MDAwMDAwMDAxMDQwQzAwMDE4NDAwMEI1ODRCMDY5NDZGRUY3ODMKKzoxMDc4MTAwMEQ3RkQwNjQ4QzA2RDAxQUI1ODgwNjg0NjAwMjFGRUY3RDEKKzoxMDc4MjAwMDBGRkQwMTIwMDRCMDA4QkMxODQ3MDAwMEE0MkEwMDgwMDYKKzoxMDc4MzAwMDAwQjVGRUY3RERGRDA4QkMxODQ3NzA0NzAwMjA3MDQ3MTMKKzoxMDc4NDAwMDAwMjA3MDQ3MDAyMDcwNDcwMDIwNzA0NzAwMjA3MDQ3REMKKzoxMDc4NTAwMDAwMjA3MDQ3MDBCNUZFRjdDQkZEMDhCQzE4NDcwMDAwQkMKKzoxMDc4NjAwMDgwQjU4NUIwMDFBOUZFRjdBQkZEMDAyMDAxQUI1ODcwRDMKKzoxMDc4NzAwMDBDNDlDOTY4MDEyNzAxMjkwMkQxMDM5NzA0OTcwMUUwNDcKKzoxMDc4ODAwMDAzOTcwNDkwNjg0NjAxRjAzM0ZEMDJBQjAwOThDMDQ2QjAKKzoxMDc4OTAwMDU4ODAwMDIxMDFBOEZFRjdEM0ZDMzgxQzA1QjA4MEJDM0QKKzoxMDc4QTAwMDA4QkMxODQ3NjgwRTAwODA3MDQ3MDQ0OTAwMjAwMDIyNzkKKzoxMDc4QjAwMDBBNzAwMTMwMDEzMTY4MjhGQUQzNzA0N0EwODIyMDQwNTUKKzoxMDc4QzAwMDAwMjI4ODQyMDNEMzQwMUEwMTMyODg0MkZCRDIxMDFDQTYKKzoxMDc4RDAwMDcwNDc4ODQyMDJEMzQwMUE4ODQyRkNEMjcwNDc5MEI0NjUKKzoxMDc4RTAwMDAxMUNGRjI3MDQyOTI3REEwMDIwMTQ0QTQzMDAxQjE4MzMKKzoxMDc4RjAwMERCMDBENDU4NjMwQzFBRDI0QjAwNTkxOEM5MDA1NzU4RjIKKzoxMDc5MDAwMDQzMDAxQjE4REIwMEQ3NTA4OTE4OUExODRGNjhDMDQ2RUYKKzoxMDc5MTAwMDU3NjA4QjY4QzA0NjkzNjAwQjY5QzA0NjEzNjE0QjY5MjIKKzoxMDc5MjAwMEMwNDY1MzYxQzk2OEMwNDZEMTYwOTBCQzcwNDcwMTMwMDEKKzoxMDc5MzAwMDAwMDYwMDBFMDQyOEQ5REIzODFDRjZFNzQwQUIyMDQwRDcKKzoxMDc5NDAwMEY3QjVDNEIwMDQxQzAwMjA0NjlBMTEyMTExNDA2RUQwMzYKKzoxMDc5NTAwMDAwMjc3OTAwQzkxOUM5MDA1NzRBNTE1ODQ5MEMwM0QyNjgKKzoxMDc5NjAwMDAxMzAwMDA2MDAwRTA0RTA3OTFDMEYwNjNGMEUwNDJGQzQKKzoxMDc5NzAwMEVGREIwMDI4NUJEMDAwMjYwMDIyMDA5MjQwMjMwMDIxOEMKKzoxMDc5ODAwMDAwMjAwMkFBMDBGMDg4RkEwNEE5MDAyMDgyMDA4QTU4ODgKKzoxMDc5OTAwMDEyMDYxMjBFQTI0MjAzRDE3MjFDMTYwNjM2MEUwNEUwMjUKKzoxMDc5QTAwMDAxMzAwMDA2MDAwRTEwMjhGMERCMDAyRTNERDAwNDJDMjQKKzoxMDc5QjAwMDNFRDE4MDAwMDg1ODQwMDE4MDBEMDAyMjAwOTIxMDIzMjMKKzoxMDc5QzAwMDAwMjEwMkFBMDBGMDY4RkEwMDIxMDE5MTAyQTgwNTk5OUQKKzoxMDc5RDAwMDQ5MEM4OTA1MjlEMEMxNjgwQTA2MTIwRTQ1OUI5QTQyQjYKKzoxMDc5RTAwMDExRDFDMDY4NDAwMTg2MEQwMDIyMDA5MjBDMjMwMDIxQjUKKzoxMDc5RjAwMDMwMUMwMkFBMDBGMDUwRkEwMTk5MDI5RDQ4MUMwMTA2QjEKKzoxMDdBMDAwMDA5MEUwMTkxMEVFMDQ4MDE4NjBEMDAyMjAwOTIxMDIzMUMKKzoxMDdBMTAwMDAwMjEzMDFDMDJBQTAwRjAzRkZBMDJBODA1OTk0OTBDODcKKzoxMDdBMjAwMDg5MDVEOEQxMDE5OTAwMjkwRkQxRkYyMDNERTA0MEUwMjAKKzoxMDdBMzAwMDgwMDAwODU4NDAwMTg2MEQwMDIyMDA5MjBDMjMwMDIxOEUKKzoxMDdBNDAwMDMwMUMwMkFBMDBGMDI4RkEwMjlEMDEyMDAwMDQ0NjlBODgKKzoxMDdBNTAwMDEwNDM3OTAwQzkxOUM5MDAxNzRBQzA0NjUwNTAzMDFDNUMKKzoxMDdBNjAwMDhFMTg3MDYwMTAyMDA0MkMwMEQwMEMyMDA0MUNCMDYwMTQKKzoxMDdBNzAwMDAwMjAyMDIxNDY5QTExNDAyMDI5MDBEMDI4MUMzMDYxODYKKzoxMDdBODAwMDI4MTlGRjIxRkYzMDA4MzAwOTMxRkZGNzE5RkY0MzAxQTIKKzoxMDdBOTAwMDE4MThDMDAwMDAxQjcwNjEwMDIwNTAyMTQ2OUExMTQwNDgKKzoxMDdBQTAwMDUwMjkwMEQxMjgxQ0YwNjAzODFDNDdCMEYwQkMwOEJDM0QKKzoxMDdBQjAwMDE4NDdGRjIwRjlFNzAwMDA0MEFCMjA0MDgwQjQwMDIzQzYKKzoxMDdBQzAwMDAwMjIwMDI5MDZEOTg3NUM3QjQwMUIwNjFCMEUwMTMyNzEKKzoxMDdBRDAwMDhBNDJGOEQzRDg0MzAwMDYwMDBFODBCQzcwNDdGMEI1NDgKKzoxMDdBRTAwMEM2QjAwNDI4MDdEQTQxMDAwOTE4QzkwMDQ1OTE0MTRBODcKKzoxMDdBRjAwMDUxNTg0QjBDMDJEMjAwMjBDMDQzNzZFMDAxMjM1QjA0QjYKKzoxMDdCMDAwMDE5NDA0MzAwMTgxOEMwMDAzQTRBMTQxODAwMjk2MUQwREYKKzoxMDdCMTAwMDAwMjEwMjkxMjA2OUExNjg0NTE4MzBEMEZGMjE2ODFFMUMKKzoxMDdCMjAwMDA5MzFGRkY3Q0RGRTYxNjg0MDE4MDE5MDAxOTg4MTQyNEMKKzoxMDdCMzAwMDAyRDFBNjY4QUYxQjA5RTAwMDI2RkYyMTI4MUMwOTMxRUQKKzoxMDdCNDAwMEZGRjdDN0ZFMDcxQzAxRDFGRjI3MDkzNzAwMjIwMDkyNkIKKzoxMDdCNTAwMDAxOTgzMTFDMDNBQTNCMUMwMEYwOUVGOTAzQTgzOTFDQjQKKzoxMDdCNjAwMEZGRjdBQ0ZGQzA0MzAyOTk0ODQwMDEwNjA5MEUwMjkxOUQKKzoxMDdCNzAwMEVEMUJBMDY4QTg0MjAwRDEwMDI1MDAyRENFRDgwMjk5QTcKKzoxMDdCODAwMENGNDMwMDIyMDA5MjBDMjMwMDIxNjA2ODAzQUEwMEYwN0EKKzoxMDdCOTAwMDgzRjkyMDY5QzA0NjAzOTAwNTk4MDAwQTAwMDIzOTA2NUYKKzoxMDdCQTAwMDA5MEUwODQzMDU5MEZGMjMxQjAyOTg0MzA1OTAwQzIxMDIKKzoxMDdCQjAwMDAzQThGRkY3ODNGRkZGMjMxQjAyMDU5OTk5NDMwMDA2RTMKKzoxMDdCQzAwMDAwMEUwMDAyMDg0MzA1OTAwQzIzMDAyMTYwNjgwM0FBMDAKKzoxMDdCRDAwMDAwRjBDQUY5MDAyMDQ1OTkwNjRBQzA0NjUwNTBDMTQzRkEKKzoxMDdCRTAwMDYxNjBBMTYwRTE2MDIxNjE2MTYxNDZCMEYwQkMwOEJDRTgKKzoxMDdCRjAwMDE4NDcwMDAwNDBBQjIwNDBCMEI0NEM0MjAwMjkwMERCRTUKKzoxMDdDMDAwMDBDMUMwMDI3RkY0MzA0MjgyMURBMTI0RDQzMDAxODE4RUEKKzoxMDdDMTAwMEMwMDA0MDE5MDEyQTA1RDAwMjJBMDlEMDAzMkExNkQxMzIKKzoxMDdDMjAwMDAxNjkwQkUwMDAyOTEyREIwMjY5OEE0MjBGRDMwNUUwRUIKKzoxMDdDMzAwMDAwMjkwN0RBQzE2OEExNDIwOUQzMDkxQkMxNjBDMDY4RTUKKzoxMDdDNDAwMEIwQkM3MDQ3QzE2ODA5MTkwMjY5OTE0MkY2RDkzODFDNjUKKzoxMDdDNTAwMEY2RTcwMDAwNDBBQjIwNDBGMEI1ODRCMDE3MUMwRDFDQzcKKzoxMDdDNjAwMDAwMjEwMjkxNDIwMDEyMThEMjAwMkM0OThCNTgxQjA2QTkKKzoxMDdDNzAwMDFCMEUwMTkzMDAyM0RCNDMwNDI4MDJEQTAxOTg0MDA4MUQKKzoxMDdDODAwMDAxRDIxODFDNDZFMDU0MThFMDY4QzIxOTIxNjk4QTQyRTIKKzoxMDdDOTAwMDAwRDkwRjFBMDAyRjNDRDlBMDY4RTE2ODQwMThGRjIxRDUKKzoxMDdDQTAwMDA5MzFGRkY3MERGRTYxNjg0NjE4QTA2OEUxNjg0MDE4QzkKKzoxMDdDQjAwMEZGMjEwOTMxRkZGNzBERkVDMjE5RkYyMTA5MzE4QTQyNjgKKzoxMDdDQzAwMDE0RDkwMTlBQzA0NjAwOTIwQjFBMDM5MzAxMUMzMDFDNzAKKzoxMDdDRDAwMDJBMUMwMEYwRTFGOEUwNjgwMzlCQzAxOEUwNjAwMzlCRjkKKzoxMDdDRTAwMDVEMTlGRjFBMDI5ODE4MTgwMjkwMTBFMDAxOUFDMDQ2MTgKKzoxMDdDRjAwMDAwOTIwMTFDMzAxQzJBMUMzQjFDMDBGMENERjhFMDY4RUYKKzoxMDdEMDAwMEMwMTlFRDE5RTA2MDAyOThDMDE5MDI5MDAwMjcwMDJGRjkKKzoxMDdEMTAwMEMyRDgwMjk4MDRCMEYwQkMwOEJDMTg0NzQwQUIyMDQwNjEKKzoxMDdEMjAwMEYwQjU4M0IwMTcxQzBEMUMwMDIxMDE5MTQyMDAxMjE4MDAKKzoxMDdEMzAwMEQyMDAwMjkyMzA0OThBNTgxMjA2MTIwRTAwMjRFNDQzRkYKKzoxMDdENDAwMDA0MjgwMURBNTAwOTAxRDIyMDFDNTFFMDAyOUE1NDE4OEIKKzoxMDdENTAwMEUwNjhDMjE5NjA2OTgyNDIwMUQ5MjI2OTg3MUEwMDJGM0UKKzoxMDdENjAwMDQ1RDkyNTRFQTA2OEUxNjg0MDE4RkYyMTA5MzFGRkY3ODkKKzoxMDdENzAwMEE3RkQ2MTY4NDAxODAwOTBBMDY4RTE2ODQwMThGRjIxRTUKKzoxMDdEODAwMDA5MzFGRkY3QTZGRDAyOUFCMTU4MDEyMzVCMDQxOTQzOUMKKzoxMDdEOTAwMEIxNTBDMTE5RkYyMjA5MzI5MTQyMTNEOTEzMUEwMTFDQTMKKzoxMDdEQTAwMDAwOTgyQTFDMUUxQzAwRjBERkY4RTA2ODgwMTk3NTE5ODUKKzoxMDdEQjAwMEUwNjAyMTY5ODg0MjAwRDkyMDYxQkYxQjAxOTgzMDE4MUEKKzoxMDdEQzAwMDAxOTAxMkUwMDExQzAwOUUzMDFDMkExQzNCMUMwMEYwOUMKKzoxMDdERDAwMENCRjhFMDY4QzAxOUVEMTlFMDYwMjE2OTg4NDIwMEQ5NEMKKzoxMDdERTAwMDIwNjEwMTk4QzAxOTAxOTAwMDI3MDAyRkI5RDgwMTk4OEYKKzoxMDdERjAwMDAzQjBGMEJDMDhCQzE4NDc0MEFCMjA0MEIwQjVDM0IwREUKKzoxMDdFMDAwMDBDMUMwMDI3RkE0MzA0MjgwNkRBNDEwMDA5MThDOTAwQUYKKzoxMDdFMTAwMDE0NDg0NTU4NkIwQzA0RDIxMDFDNDNCMEIwQkMwOEJDQ0QKKzoxMDdFMjAwMDE4NDc2MjA5MUJEMzAwMjIwMDkyMDgxODQwNjgwQzIzRUYKKzoxMDdFMzAwMDAwMjEwMUFBMDBGMDMwRjgxMTJDMEREMDEyMkMwREQwMjkKKzoxMDdFNDAwMDEzMkMwNUQwMTQyQzBBRDEwMzk4MDAwNDA3MEUwNkUwNjkKKzoxMDdFNTAwMDAzOTgwNzA2M0YwRTAyRTAwMTlGMDBFMDAyOUYzODFDRDYKKzoxMDdFNjAwMERCRTcwMDAwNDBBQjIwNDAwMzQ5MDAyMDAwMjIwQTU0MTkKKzoxMDdFNzAwMDAxMzA2MDI4RkJEMzcwNDc0MEFCMjA0MDAwQjUwMkYwRDIKKzoxMDdFODAwMDZGRkE1NzIwMDJGMENDRjkwMkYwNDBGOTAwMEFGQkQzNTgKKzoxMDdFOTAwMDAyRjA0RUZBMDhCQzE4NDdGMEI1ODJCMDA3OUQxNDFDREEKKzoxMDdFQTAwMDFGMUMzMDRBRDI2RjIwMjMxNjY4OUU0MzE2NjAzMzFDNzUKKzoxMDdFQjAwMEZGMjIwMTMyMkE0MDQwMDIwODQzMDUwQTA2MUMwMDBDM0EKKzoxMDdFQzAwMDAxOTAwMDJBMjBEMDAyRjA0QkZBNTMyMDAyRjBBOEY5Q0EKKzoxMDdFRDAwMDAxOThDMDQ2MDA5MDAyRjBBM0Y5MjgxQzAyRjBBMEY5MTYKKzoxMDdFRTAwMDMwMUMwMkYwOURGOTAyRjAyM0ZBRkZGN0M3RkYwMkYwMDEKKzoxMDdFRjAwMDM3RkE1NDIwMDJGMDk0RjkwMDk4MDJGMDkxRjkyODFDMDYKKzoxMDdGMDAwMDAyRjA4RUY5MzAxQzE0RTAwMkYwMkFGQTUyMjAwMkYwM0UKKzoxMDdGMTAwMDg3RjkwMTk4MDJGMDg0RjkyODFDMDJGMDgxRjkzMDFDREQKKzoxMDdGMjAwMDAyRjA3RUY5MDAyMDAyRjA3QkY5MDAyMDAyRjA3OEY5REYKKzoxMDdGMzAwMDAwMjAwMkYwNzVGOTAwMjAwMkYwNzJGOTAwMkYwNUQ5MzcKKzoxMDdGNDAwMDAyRjBFNEY4MjA3MDAxMzQwMTNGRjlEMTAyRjBGMEY5QjkKKzoxMDdGNTAwMDA0NEFEMDZGMjAyMzAxNjgxOTQzMDE2MDAyQjBGMEJDQ0QKKzoxMDdGNjAwMDA4QkMxODQ3NjgwRTAwODBGMEI1ODJCMDE0MUMxRjFDQjYKKzoxMDdGNzAwMDQyMDIwQTQzMTUxQzAxMjg1NEQwMkM0OUM4NkYyMDIzMDMKKzoxMDdGODAwMDAyNjg5QTQzMDI2MEM4NkY0MDIzMDE2ODE5NDMwMTYwODgKKzoxMDdGOTAwMDAyRjBFNkY5NTMyMDAyRjA0M0Y5MjgwQzA2MUMwMkYwMjcKKzoxMDdGQTAwMDNGRjkyODBBMDE5MDAwOTAwMkYwM0FGOTI4MUMwMkYwRUIKKzoxMDdGQjAwMDM3RjkwMkYwQkRGOUZGRjc2MUZGMDJGMEQxRjk4NDIwMzMKKzoxMDdGQzAwMDAyRjAyRUY5MzAxQzAyRjAyQkY5MDA5ODAyRjAyOEY5OEIKKzoxMDdGRDAwMDI4MUMwMkYwMjVGOTAwMkYwNUQ5MjA3ODAxMzQwMkYwODEKKzoxMDdGRTAwMDFGRjkwMTNGRjlEMTAyRjBBM0Y5MDJGMEI5Rjk4MzIwOUEKKzoxMDdGRjAwMDAyRjAxNkY5MzAxQzAyRjAxM0Y5MDE5ODAyRjAxMEY5QTIKKzoxMDgwMDAwMDI4MUMwMkYwMERGOTAyRjA5M0Y5RkZGNzM3RkYwNzQ5M0EKKzoxMDgwMTAwMEM4NkY0MDIzMDI2ODlBNDMwMjYwQzg2RjIwMjMwMTY4M0EKKzoxMDgwMjAwMDE5NDMwMTYwMDJCMEYwQkMwOEJDMTg0NzY4MEUwMDgwMUMKKzoxMDgwMzAwMDcwNDcwMDAwODBCNTAxRjA4RkY4MDY0RkMwNDZGODYwMjkKKzoxMDgwNDAwMDAxRjBGMkY4Nzg4MDAxRjBCMUY4Mzg3MTgwQkMwOEJDMUEKKzoxMDgwNTAwMDE4NDcwMDAwNjgwRTAwODAwMEI1MDFGMDA1RjkwMjQ5REMKKzoxMDgwNjAwMEMwNDYwODgwMDhCQzE4NDc2ODBFMDA4MDBCNDhDMTY4RUQKKzoxMDgwNzAwMDAxMjkxMUQxQzE2RjAyMjMwQTY4MUE0MzBBNjBDMTZGMzYKKzoxMDgwODAwMDgwMjMwQTY4MUE0MzBBNjBDMTE4MDg2ODgyMjMwMjY4QkMKKzoxMDgwOTAwMDFBNDMwMjYwMDAyMDA4ODE3MDQ3MDAwMDY4MEUwMDgwQ0IKKzoxMDgwQTAwMEYwQjQ0QTQ5Q0ExRDlEMzIwMDIwMDAyNzgzMDBENzUwRjIKKzoxMDgwQjAwMDAxMzAxNzI4RkFEMzQ2NEMwMDIwODIwMEE3NTAwMTMwMjcKKzoxMDgwQzAwMDIwMjhGQUQzNDM0QTAwMjA4MzAwRDc1MDAxMzAyMDI4Q0IKKzoxMDgwRDAwMEZBRDNBNzYxOTc2MTRGNjU4RjY1M0Y0REMwNDYyRjYwMEEKKzoxMDgwRTAwMDZGNjBBRjYwQUY2MUVGNjAyRjYxNkY2MTAwMjBDMTAwMTIKKzoxMDgwRjAwMDA5MTg0OTAxMzU0QkM5MTg4NjAwQ0IxREY5MzMzNDRDOUEKKzoxMDgxMDAwMDM0MTlFMzYzMTEyMzVCMDFDQjE4NjM2MzBEMjM5QjAxRDcKKzoxMDgxMTAwMENCMThCNDE4RTM2MzIzMjM1QjAxQzkxODYxNjMwMTMwRjIKKzoxMDgxMjAwMDAyMjhFNERCMjk0OEMxMURGOTMxMjk0Q0MwNDZBMTYyNkYKKzoxMDgxMzAwMDYxNkIwRDIzOUIwMUUxNjJDMTE4OTE2MjUxNkJDMDQ2RDYKKzoxMDgxNDAwMEQxNjIwODIxRTE2NDI1NDlDMDQ2MjE2NTI0NDkwQjY5QjMKKzoxMDgxNTAwMEMwNDY2MzY1QzMxRDREMzNFMzY1MjU2NjhCNjhDMDQ2MjUKKzoxMDgxNjAwMDYzNjZDQjY4QzA0NkEzNjYxRTRCQzA0NkUzNjYyNzY3QkUKKzoxMDgxNzAwMDBCMjNEQjAxQzMxOEEzNjc2NzY3MDEyNkUzMUQ2OTMzN0YKKzoxMDgxODAwMDY2NjFFNzYxMUY3MzAyMjNEMzY0MTc0QkMwNDYxMzY1MTIKKzoxMDgxOTAwMENCNjlDMDQ2NTM2NUMzMUQ1MTMzRDM2NTJCMUQxMzY2OTAKKzoxMDgxQTAwMDRCNjlDMDQ2NTM2Njg5NjlDMDQ2OTE2NjBGNDlDMDQ2MEYKKzoxMDgxQjAwMEQxNjYxNjY3MEYyM0RCMDFDMDE4OTA2NzU2NjdENzYxMzkKKzoxMDgxQzAwMEQwMUQ2OTMwNTY2MTA3NzNGMEJDNzA0NzY4MEUwMDgwOUYKKzoxMDgxRDAwMEU0MkMwMDgwNjQyRDAwODA5MEVFMjA0MDMwMDExODAwRDcKKzoxMDgxRTAwMDdDMjkwMDgwMDA1NUZGRkYzODAxMTgwMDEwNTVGRkZGNjMKKzoxMDgxRjAwMDkwQjQwMDIxMUU0QUJCMjMxQjAxRDcxOEY5NzMxOTIzMjEKKzoxMDgyMDAwMERCMDFEMDE4MDEyNENEMjMxQjAxRDMxOEMxNjExQzcwRTAKKzoxMDgyMTAwMDMzMjM5QjAxRDMxODk5NjBCOTczNTk2MTJGMjM5QjAxQjQKKzoxMDgyMjAwMEQzMTgxOTYwMTM0QjUxMjdCRjAzMDM2MzNCNjA4NDY5NjQKKzoxMDgyMzAwMEU0MTg0NDYzMDQzQzdDNjAwMTI0RTQwMjg0NjMwRTRDMzMKKzoxMDgyNDAwMEMwNDZCQzYwMDQ2QkMwNDY0NDYyODQ2OUU0MTgwQjRCQjIKKzoxMDgyNTAwMEUzMThGQjYwMDM2QkMwNDY4MzYyNDM2QUMwNDYwMzYyNTcKKzoxMDgyNjAwMEMxNjM1MTY0OTE2NEQxNjVEMTY2OTBCQzcwNDcwMDAwRDAKKzoxMDgyNzAwMDY4MEUwMDgwMDAwMDIwNDBGQzA3MDAwMEZDRjdGRkZGQjQKKzoxMDgyODAwMDkwQjQwMDIyMUI0OUM5MjMxQjAxQzgxODAyNzEwMTIwQTgKKzoxMDgyOTAwMEJCMjMxQjAxQ0IxODU4NzMxNzQ4MDMxQzAwMjdEQzFEOTgKKzoxMDgyQTAwMEMxMzQxQzY1MjMxQzAxMzczRjJGRjhEMzFBNjUxOTIzRUQKKzoxMDgyQjAwMERCMDFDRjE4MzMyMzlCMDFDQjE4M0E2MTk4NjE0MDIwMzIKKzoxMDgyQzAwMEY4NjBEQTYxMUE2MkNBNjQwQTY2MEM0OEMwNDZDMjYwODUKKzoxMDgyRDAwMDBCNDgwMDZCQzAwNkMwMEVGODYzMEE0ODAxNjhDMDQ2MzAKKzoxMDgyRTAwMDE5ODA0MTY4QzA0NjU5ODA4MDY4QzA0Njk4ODA5MEJDMUIKKzoxMDgyRjAwMDcwNDcwMDAwNjgwRTAwODA5MEJDMjA0MDkwRUUyMDQwNDcKKzoxMDgzMDAwMDgwMDAxNDQwNDAwMDE0NDAwMDIwMEE0OUMwNDYwODczMTEKKzoxMDgzMTAwMENCMURGRjMzM0EzMzg4NjFDODYxMTg3MDA2NEFDMDQ2RTYKKzoxMDgzMjAwMDEwNjU1MDY2OTA2NjA4NzA1ODcwQkIyMzFCMDFEMTE4MDkKKzoxMDgzMzAwMDA4NzM3MDQ3MjgwNTAwODA2ODBFMDA4MEYwQjQyRjQ5NEMKKzoxMDgzNDAwMDJGNEFDMDQ2MTE2MTAxMjM5QjAyQzgxODUwNjEyRDQ4NzUKKzoxMDgzNTAwMEMwNDYxMDYyREIwMEMzMTg1MzYyMDAyMzEzNjM1MzYzRUIKKzoxMDgzNjAwMDI5NEEyQTRGRDQxREZGMzRGQTM0MTRDNzA4M0YzQjYxMTEKKzoxMDgzNzAwMDFDMUY3QzYxMjY0RkMwNDYzOTYwQjg2MTc5NjFGODYyODQKKzoxMDgzODAwMDNCNjM3QjY0QkE2NEZBNjUyMjRGRkUxREY5MzYyMjREQzkKKzoxMDgzOTAwMEVDMUQ3OTM0MjY2MjUxMjZCNjAzMzc2MTI0NkFDMDQ2NDMKKzoxMDgzQTAwMDc0NjEyRjY3MUQ0RDA5Mjc3RjA0RUMxRDc1MzQ3QzYwQjcKKzoxMDgzQjAwMDNENjAxQjRDQzA0NjNDNjFFNjFENzUzNjdFNjExOTRGMjEKKzoxMDgzQzAwMEMwNDY3QzYwM0Q2MDBGMUMwMDIxRkYyNDAxMzQxRDFDNTEKKzoxMDgzRDAwMDhCMDBGRDUwMDEzMUExNDJGQUQzMDExQzAwMjAwMTI3N0UKKzoxMDgzRTAwMEZGMDI4MzAwQ0Q1MDAxMzBCODQyRkFEMzAwMjA4MTAwNTMKKzoxMDgzRjAwMDU1NTAwMTMwODAyOEZBRDNGMEJDNzA0NzI0QTMyMDQwQTgKKzoxMDg0MDAwMDQwMDExODAwMjQ4MzIwNDAyNEE5MjA0MDgwMDExODAwNDYKKzoxMDg0MTAwMEE4MDMwMDgwMjRBNzIwNDA2ODBFMDA4MDI0QTgyMDQwRTQKKzoxMDg0MjAwMEE0QTgyMDQwMDgwNDAwODBCOEI1MkM0OEZERjdCQUZEODgKKzoxMDg0MzAwMDAxMjAyQjQ5MEE2ODUyMEMwNkQyMEE2ODEyMEMwMkQxOUMKKzoxMDg0NDAwMDBBNjg5MjBBMDBEMjAwMjAwNDA2MjQwRTI1NEFENzFEOEQKKzoxMDg0NTAwMDBEMzcwMDIzMDAyMDlEMDA3ODUxMDEzMzA0MkJGQUQzRkYKKzoxMDg0NjAwMDAxMjczRjA1NTA2MUY4NjBEMDYxRjg2MTAwMjNEQjQzQ0MKKzoxMDg0NzAwMDkzNjEzQjYxMTM2MjNCNjIwMDI3MUI0QjhENjhDMDQ2RDIKKzoxMDg0ODAwMDAwOTU4RDY5QzA0NjAwOTUwMDJDMEJEMERENkJDMDQ2NzEKKzoxMDg0OTAwMDAwOTU5RDZCQzA0NjAwOTU1RDZCQzA0NjAwOTUxRDZCQjkKKzoxMDg0QTAwMEMwNDYwMDk1MDEzNzQwMkZFOEQzMDAyNzZDNDYwMTIzRDIKKzoxMDg0QjAwMDVCMDcxQzQzMDFFMDIwNjAwMTM3MEQ2ODJCMDkwMkQyRTUKKzoxMDg0QzAwMDgwMkZGOEQzMDFFMDgwMkYwM0QzMDg0OTRCNkUwMTMzOEUKKzoxMDg0RDAwMDRCNjZEMDYyQjhCQzA4QkMxODQ3MDAwMEY0MDFGRkZGMkYKKzoxMDg0RTAwMDAwMDAxMDQwNjgwRTAwODAwMDAxMTg0MEEwODIyMDQwNkIKKzoxMDg0RjAwMDkwQjQwMDIxMEU0RjBGNEEwMDIwNEMwMTY0MUFBNDAwRDIKKzoxMDg1MDAwMEEzMTg1ODYwOTg2MDE4NjQ1ODY0MTA1MzU4ODBDQzAwQzEKKzoxMDg1MTAwMEU0MTk5ODY3REM2MjAxMzEwMzI5RUVEMzA2NDlDMDQ2QUQKKzoxMDg1MjAwMDA4NjA0ODYwODg2MEM4NjAwODYxOTBCQzcwNDcwMDAwQkYKKzoxMDg1MzAwMEFDNjYyMTQwNUMyQjAwODBEMDJDMDA4MDY0MjEwNTQ4NzMKKzoxMDg1NDAwMEMwNDYwMTYzMDAyMUM5NDM0MTYzODE2MzAwMjFDMTYzQzcKKzoxMDg1NTAwMDAxNjQ3MDQ3NjgwRTAwODA4MEI0MDEyMDQwMDIwQTQ5MUYKKzoxMDg1NjAwMEMwNDYwODYwM0MyMDQ4NjA4ODYwMDg0OEMwNDZDODYwMzMKKzoxMDg1NzAwMDAwMjAwNzRBODcwMENCNjhDMDQ2REE1MTAxMzAxMDI4MzYKKzoxMDg1ODAwMEY4RDM4MEJDNzA0NzAwMDBFNDJEMDA4MEY0MkQwMDgwRkIKKzoxMDg1OTAwMDVENENGRkZGMTI0OTEzNDg2NzIzOUIwMUNBMTgwNkMwQjAKKzoxMDg1QTAwMDA4MzgxMTRCQ0ExOEMxNjA4MjYwMDE2MTBGNDkxMDQ4MzgKKzoxMDg1QjAwMEE3MjM5QjAxQ0ExODA2QzAwODM4MEU0QkNBMThDMTYwMTEKKzoxMDg1QzAwMDgyNjAwMTYxMEM0ODBENDk2NzIzOUIwMUMyMTgwNUMxRjcKKzoxMDg1RDAwMDA4MzkwNTRCQzIxOEM4NjA4QTYwMDg2MTcwNDcwMDAwRkUKKzoxMDg1RTAwMEFDMUUyMTQwNDgyRTAwODBGQzFGMDAwMEFDRUUyMDQwNTUKKzoxMDg1RjAwMDM0MkUwMDgwRkMyRjAwMDBBQzNFMjE0MDVDMkUwMDgwMTkKKzoxMDg2MDAwMDkwQjQwMDIxNDA0QzAwMjAwQTAxMTIxOTE5MjNEQjAxMEIKKzoxMDg2MTAwMEQyMThEMDYyMTA2MzUwNjM5MDYzMDEzMTAzMjlGM0QzMDEKKzoxMDg2MjAwMDNBNDlDMDQ2MDg2MzQ4NjM4ODYzMjA2MDAxMjFFMzFEMUUKKzoxMDg2MzAwMDU5MzM2MDYwMTk3MTE4NzI5ODcxOTg3MjU5NzE1ODcyMzMKKzoxMDg2NDAwMEQ4NzFEODcyRTIxRDQ5MzIxMTczMTk3MDkwNzM5ODcwMDUKKzoxMDg2NTAwMDUxNzM1OTcwRDA3M0Q4NzAxMTcxMTE3MjkwNzE5MDcyRkEKKzoxMDg2NjAwMDUwNzE1MDcyRDA3MUQwNzIxODczMDIyMkU3MUQ2OTM3QjEKKzoxMDg2NzAwMDNBNzA5OTczQkE3MDU4NzM3ODcwRDg3M0Y4NzAzOTcxMEEKKzoxMDg2ODAwMDNBNzJCOTcxQjk3Mjc4NzE3QTcyRjk3MUY5NzIzOTczOTMKKzoxMDg2OTAwMEUzMUQ3OTMzMUE3MEI5NzM5OTcwNzg3MzVBNzBGOTczNEUKKzoxMDg2QTAwMEQ5NzAxQTcxMUE3Mjk5NzE5QTcyNTg3MTVBNzJEOTcxNzUKKzoxMDg2QjAwMERBNzIxOTczRTcxRDg5MzczQTcwOTk3M0I5NzA1ODczNzQKKzoxMDg2QzAwMDdBNzBEOTczRjk3MDM5NzEzQTcyQjk3MUI5NzI3ODcxNzcKKzoxMDg2RDAwMDdBNzJGOTcxRjk3MjNBNzNFMzFEOTkzMzFBNzBCOTczQUEKKzoxMDg2RTAwMDlBNzA3ODczNUE3MEY5NzNEQTcwMTk3MTFBNzI5OTcxRjUKKzoxMDg2RjAwMDk5NzI1ODcxNUE3MkQ5NzFEOTcyMjA2MUUwNjA2MDYxQzMKKzoxMDg3MDAwMEEwNjA5MEJDNzA0NzAwMDBBMDFDMDA4MEU4MTkwMDgwQTkKKzoxMDg3MTAwMDgxMjAwMDAyMDE0OUMwNDY4ODYyNzA0N0MwMDAxNDAwRjEKKzoxMDg3MjAwMDA5NDkwQTRCQzgxODA0M0JDOTE4MDg2MDAwMjFDMjFEM0EKKzoxMDg3MzAwMDI5MzJDMjYxMTAxQzAxMzEwODI5RjhEM0MxMUYyOTM5MUYKKzoxMDg3NDAwMDAwMjBDODYxNzA0NzAwMDA2ODBFMDA4MDg0MDkwMDAwQTYKKzoxMDg3NTAwMDA2NDgwNzQ5QzA0NjA4ODA0ODgwMDAyMDg4ODBDODgwQjUKKzoxMDg3NjAwMDg4NjAwNDQ5QzA0NjQ4NjE4ODYxNzA0N0ZGRkYwMDAwODcKKzoxMDg3NzAwMDRDMkEwMDgwNkMwNjAwODAwMDIxMDY0OEMyMUQxOTMyNzgKKzoxMDg3ODAwMEMxNjAwMTYxQzE2MTAxNjIxMTcxRkYzMDAxMzA0MTYyNUMKKzoxMDg3OTAwMDcwNDcwMDAwNkMwNjAwODAwOTQ4MEE0QkMwNDYxODYwMEMKKzoxMDg3QTAwMDAwMjFDMjFENEQzMkMyNjAxMDFDMDEzMTE0MjlGOEQzQzIKKzoxMDg3QjAwMEMxMUY0RDM5MDAyMEM4NjA1ODYwOTg2MDcwNDcwMDAwQTQKKzoxMDg3QzAwMEQ4MDcwMDgwNkMwNjAwODAwMEI1MEI0OTBCNDhGREY3MDgKKzoxMDg3RDAwMEVBRkIwQjQ4MDA2QTAxMjNEQjAzOTg0MzA5NDlDMDQ2QzIKKzoxMDg3RTAwMDA4NjIwOTQ4QzE2ODAxMjkwNEQxQzA2RjgwMjMwMTY4NkIKKzoxMDg3RjAwMDE5NDMwMTYwMDhCQzE4NDdDMUJEMjE0MDc1OTgyMTQwNEMKKzoxMDg4MDAwMEMwMDAxODQwQzAwMDE4MDA2ODBFMDA4MDAwQjUwRjQ4NzYKKzoxMDg4MTAwMEMxNjgwMTI5MDREMUMwNkY4MDIzMDE2ODk5NDMwMTYwQjgKKzoxMDg4MjAwMDBCNEIwQzQ4MEM0QTAwMjFGREY3QkZGQjBCNDg0MThENTgKKzoxMDg4MzAwMDAxMzE0MTg1MDAyMUMxODUwOTQ4MDA2QTAxMjNEQjAzMUMKKzoxMDg4NDAwMDE4NDMwODQ5QzA0NjA4NjIwOEJDMTg0NzY4MEUwMDgwRjMKKzoxMDg4NTAwMDU5QkQyMTQwNzU5ODIxNDBCODBCMDAwMDAwMDAwMDgwRjAKKzoxMDg4NjAwMEMwMDAxODQwQzAwMDE4MDBGMEI1MUI0QzEwMjZFMDY4OEUKKzoxMDg4NzAwMDAxMjgwOEQxNjA4ODAwMjgwNUQxMjA3OTAwMjgwMkQxN0MKKzoxMDg4ODAwMDE5MjBBMDY3MDBFMEE2NjcwMDIwMDcyMzVCMDJFNTE4MTcKKzoxMDg4OTAwMEMxNDNFODYxNjk2MjU5MDhBMTI3N0YwMzc5NjAwRjIxMEMKKzoxMDg4QTAwMDc5NjBFMTFEQjkzMTA4NzEwMTIwQjg2MDQwMDJCODYwRkIKKzoxMDg4QjAwMDAwRjA0Q0ZBMDBGMEYwRkEwNDIwQjg2MDA3MjA3ODYxNkMKKzoxMDg4QzAwMDdFNjAxQjIzREIwMUUwMThDMDhCMDQyMzE4NDBFODYyQTQKKzoxMDg4RDAwMEYwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MDkwQjQwMjFDNzEKKzoxMDg4RTAwMDAwMjBGRjIzMDEzMzlBNDIwOEQwMDEyOTAwRDEwMTIwNDIKKzoxMDg4RjAwMDAwMkEwMUQxMDIyMzE4NDM5MEJDNzA0NzFCNEFENzY4NTUKKzoxMDg5MDAwMDFBNEIxOTc5MUMxQzM3MjM5QjAxRTMxODAxMkYwREQxMzkKKzoxMDg5MTAwMDU3ODgwMDJGMEFEMTAwMjkwQUQxNTk4QjBBMDkwMEQzQTAKKzoxMDg5MjAwMDAyMjA0OTA5RThEMzAxMjMxODQzRTVFNzAwMjkwM0QwRDEKKzoxMDg5MzAwMDk4OEE4MDA3ODAwRkRGRTc2RDIzNUIwMUQxMTg4QTg4NTIKKzoxMDg5NDAwMEZGMjcwMTM3MTc0MDBBNDlDOTg4MDNEMDRCMEEwMUQzRDIKKzoxMDg5NTAwMDAzMjBEMUU3MTMwQTAzRDMwQjBBMDFEMzAyMjBDQkU3OEMKKzoxMDg5NjAwMEQyMDlDOUQzQzkwOUM3RDMwMTIwQzVFNzY4MEUwMDgwNjEKKzoxMDg5NzAwMDA4MUMwMDgwRjBCNUMxQjAwMTIwMDAwNzUyNDlDMDQ2NzQKKzoxMDg5ODAwMDA4NjA1MjQ4NDI2OTQwMERBMTIxNDkwMzQ4NjA1MDQ4OUYKKzoxMDg5OTAwMEMwNkE1MDRCMTg0MzAwMjEwMzAzMUIwQjRFNEMyNzZGM0EKKzoxMDg5QTAwMDNEMDMyRDBCRTcxRDc5MzdBQjQyMUNEMEUzMUQ3OTMzMTYKKzoxMDg5QjAwMDFCNkFDMDQ2NDA5MzAxMjM5QjA3MDM0MzFCNjhDQzAwRkUKKzoxMDg5QzAwMDZFNDYzMzUxMDEyMzlCMDcwNjFEMzM0MzFCNjg2QzQ0REQKKzoxMDg5RDAwMDYzNjAwODMwMDEzMTQwOUI4MzQyMDBEODNGNDgwMzAzNjUKKzoxMDg5RTAwMDFCMEJBQjQyRTdEMTAwMjAwMTIzMUIwMzEzNDAzQzRDN0YKKzoxMDg5RjAwMDAzRDA2MzZBMDEzMzYzNjIwOUUwMTMwQjAzRDMyMzZBNzQKKzoxMDhBMDAwMDAxMzMyMzYyMDNFMDM3NEI1QzZEMDEzNDVDNjUwMDI5NjAKKzoxMDhBMTAwMDA5RDAwMzFDREMwMDIzMUM2QjQ0NUM2ODAxMzAyMzBENkYKKzoxMDhBMjAwMDAxRDI4ODQyRjVEMTMwNEMyNTY4NkIwQzA1RDIyMzY4MDEKKzoxMDhBMzAwMDFCMEMwOEQxMjQ2OEEzMEEwNUQzMjAyNDJCNEJDMDQ2NjUKKzoxMDhBNDAwMDVDNjIwMDI0NUM2MjI1NEIyMzRDNTEyNkI2MDMyMzY3RUQKKzoxMDhBNTAwMDMzNjEzRDZBQzA0Njc1NjEwMjI1QTEyNjc2MDM3NTYwQzMKKzoxMDhBNjAwMDAxMjVCNTYwRTYxREI5MzYzNTcxODg0MjIxRDAyNTFDMzcKKzoxMDhBNzAwMEMzMDA2QzQ2RTQ1ODJFNkY2QjQ0MzQ2MDVCNjgyQzZGMDcKKzoxMDhBODAwMEMwNDY2MzYwMkI2RjA4MzMyQjY3M0M2QUEzNDIwMkQzNTYKKzoxMDhBOTAwMDEyNEJDMDQ2MkI2NzAzMUNEQjAwNkI0NDVDNjgwMTMwNDMKKzoxMDhBQTAwMDIzMEQwNEQzNTEyNEE0MDMyQjZGQzA0NkEzNjE4ODQyMzUKKzoxMDhBQjAwMERFRDExMDBCMDNEMzBFNDkwMTIwRkRGNzc0RkE0MUIwNEIKKzoxMDhBQzAwMEYwQkMwOEJDMTg0NzAwMDAwMDAwMDBCMDAwMDExNDQwRDIKKzoxMDhBRDAwMDAwNDAxNDQwMDAwMDIwNDA2ODBFMDA4MDI0QTcyMDQwODEKKzoxMDhBRTAwMEE0MkEwMDgwQTA4MjIwNDAwMDAwMTA0MEMwMDAxODAwOEUKKzoxMDhBRjAwMEM5NEZGRkZGRjBCNDAwMjEwMDIzMDcyMjA2MjQ0NzRGOEYKKzoxMDhCMDAwMEMwNDYzQzYxM0E2MTAxMzMyMDJCRjlEMzA0MjUzRDYxMTUKKzoxMDhCMTAwMDA1MjMzQjYxM0M2MTNBNjEzQzYxM0E2MTNENjEzQjYxRTcKKzoxMDhCMjAwMDNGNERBQjZGREUwODAyMjMxRTQwMDQyMzMzNDMzQjYxRkQKKzoxMDhCMzAwMDA1MjMzMzQzM0I2MUFCNkY5RTA4MDIyMzFFNDAwNDIzOTEKKzoxMDhCNDAwMDMzNDMzQjYxMDUyMzMzNDMzQjYxQUI2RjVFMDgwMjIzMzQKKzoxMDhCNTAwMDFFNDAwNDIzMzM0MzNCNjEwNTIzMzM0MzNCNjEwMjIzMUYKKzoxMDhCNjAwMEFFNkYxRTQwMDQyMzMzNDMzQjYxMDUyMzMzNDMzQjYxMTcKKzoxMDhCNzAwMEFCNkY1RDAwMDIyMzFENDAwNDIzMkI0MzNCNjEwNTIzQTMKKzoxMDhCODAwMDJCNDMzQjYxQzUwODAyMjMxRDQwMDQyMzJCNDMzQjYxNUIKKzoxMDhCOTAwMDA1MjMyQjQzM0I2MTg1MDgwMjIzMUQ0MDA0MjMyQjQzRkYKKzoxMDhCQTAwMDNCNjEwNTIzMkI0MzNCNjE0NTA4MDIyMzFENDAwNDIzMDEKKzoxMDhCQjAwMDJCNDMzQjYxMDUyMzJCNDMzQjYxMDIyNTA1NDAwNDIzRTYKKzoxMDhCQzAwMDJCNDMzQjYxMDUyMzJCNDMzQjYxNDAwMDAyMjMxODQwQUMKKzoxMDhCRDAwMDA0MjMwMzQzM0I2MTA1MjMxODQzMzg2MTAwMjUzRDYxQUQKKzoxMDhCRTAwMDAxMjMzQjYxM0Q2MTNCNjEwMDIwM0Q2MTBENEIxQjY5RjEKKzoxMDhCRjAwMDQ5MDAxRTFDMDIyMzMzNDAxOTQzMDEyMzNCNjEwMTMwMEQKKzoxMDhDMDAwMDEwMjhGMkQzMDIyMDM4NjEwMzIwMzg2MTNDNjEzQTYxQjgKKzoxMDhDMTAwMDNDNjEzQTYxMzg2MTQ4MDhGMEJDNzA0NzgwMDAxNDAwM0MKKzoxMDhDMjAwMDY4MEUwMDgwODAwMDE0NDBGMEI0MDAyNDA3MjMwNjI3NUIKKzoxMDhDMzAwMDQ0NEFDMDQ2MTc2MTEzNjEwMTM0MjAyQ0Y5RDMwNDI2M0QKKzoxMDhDNDAwMDE2NjEwNTI0MTQ2MTE3NjEwNzIzMTM2MTE2NjExNDYxMEQKKzoxMDhDNTAwMDE3NjExMzYxM0M0QjlCNkZERDA4MDIyMzFENDAyQjFDRTkKKzoxMDhDNjAwMDMzNDMxMzYxMjU0MzE1NjEzNzRCOUI2RjlEMDgwMjIzRTYKKzoxMDhDNzAwMDFENDAyQjFDMzM0MzEzNjEyNTQzMTU2MTMyNEI5QjZGMDEKKzoxMDhDODAwMDVEMDgwMjIzMUQ0MDJCMUMzMzQzMTM2MTI1NDMxNTYxRUUKKzoxMDhDOTAwMDJENEI5RDZGMDIyMzFENDAyQjFDMzM0MzEzNjEyNTQzMzUKKzoxMDhDQTAwMDE1NjEyOTRCOUI2RjVEMDAwMjIzMUQ0MDJCMUMzMzQzMzQKKzoxMDhDQjAwMDEzNjEyNTQzMTU2MUM1MDgwMjIzMUQ0MDJCMUMzMzQzNTYKKzoxMDhDQzAwMDEzNjEyNTQzMTU2MTg1MDgwMjIzMUQ0MDJCMUMzMzQzODYKKzoxMDhDRDAwMDEzNjEyNTQzMTU2MTQ1MDgwMjIzMUQ0MDJCMUMzMzQzQjYKKzoxMDhDRTAwMDEzNjEyNTQzMTU2MTAyMjUwNTQwMkIxQzMzNDMxMzYxOTUKKzoxMDhDRjAwMDI1NDMxNTYxNDAwMDAyMjMxODQwMDMxQzMzNDMxMzYxRDAKKzoxMDhEMDAwMDIwNDMxMDYxMTc2MTA3MjMxMzYxMTY2MTE0NjE0QzAwNDEKKzoxMDhEMTAwMDAwMjAwRjIxMjUxQ0NENDAwMjIzMUQ0MDA0MjMyQjQzOUUKKzoxMDhEMjAwMDEzNjEwNTIzMkI0MzEzNjEwMTMwMDEzOTEwMjhGMUQzNUUKKzoxMDhEMzAwMDE3NjEwNzIzMTM2MTE3NjExMzYxMDMyMDEwNjFGMEJDRjEKKzoxMDhENDAwMDcwNDcwMDAwODAwMDE0MDA2ODBFMDA4MEYwQjU0RjREQTEKKzoxMDhENTAwMDA4MjEwMjIwMkExQ0ZERjcyN0Y5NEQ0QzcxMjM1QjAxRTUKKzoxMDhENjAwMEU3MTgzODgwMUEyMTAyMjAyQTFDRkRGNzFERjk3ODgwQTcKKzoxMDhENzAwMDIwNzkwMDI4MEJEMDAwMjAzODgwRTA2ODAxMjgxMEQxMkQKKzoxMDhEODAwMDQ0NDgwMDY4MDEyMzlCMDIxODQzOTkwMjA4NjBFMDY4ODgKKzoxMDhEOTAwMDAxMjgwNkQxNjA4ODAwMjgwM0QxRjkyMTEyMjBGRkY3QUQKKzoxMDhEQTAwMDQzRkYwMTIxQzkwMzAwMjBGRkY3M0VGRjAwMjU3RDI2NzgKKzoxMDhEQjAwMEY2MDAwMEUwMDEzNTAwMjBGRkY3OUNGRTAwMEMwMUQzMTcKKzoxMDhEQzAwMEI1NDJGN0QzMDAyNTA1RTAwMzIxMDkwMzAwMjBGRkY3OTIKKzoxMDhERDAwMDJCRkYwMTM1MDAyMEZGRjc4REZFNDAwQjAxRDJCNTQyN0QKKzoxMDhERTAwMEYyRDMwNDIwRkZGNzg2RkVGRjIzRTEzMzk4NDMwMTIxRUQKKzoxMDhERjAwMDAxNDMzODg4RkYyMzAxMzM5ODQyMDNEMTJGMjM1QjAxQkQKKzoxMDhFMDAwMDE5NDMxNkUwMDEyODA5RDE3ODg4MDEyODAzRDEyMzIzQ0EKKzoxMDhFMTAwMDVCMDExOTQzMERFMDIwMjMxOTQzMEFFMDAwMjgwOEQxMjMKKzoxMDhFMjAwMDc4ODgwMTI4MDNEMTBCMjNEQjAxMTk0MzAxRTA4MDIzNUIKKzoxMDhFMzAwMDE5NDMwNDIwRkZGN0Y4RkUwOTIxNDkwMjAwMjBGRkY3M0IKKzoxMDhFNDAwMEYzRkVFMDY4MDAyODBDRDEwMDIxMUIyMEZGRjdFQ0ZFQTgKKzoxMDhFNTAwMDFBMjBGRkY3NEZGRTAxMjFDOTAzMDE0MzFBMjBGRkY3MzMKKzoxMDhFNjAwMEUzRkUwMDI3MDNFMDA4MkYwMUQzMEYyRjA4RDkzODFDOTkKKzoxMDhFNzAwMEZGRjc0MEZFNzkwMDA5MTkxQjIzREIwMUM5MTg4ODgzMUQKKzoxMDhFODAwMDAxMzcyMDJGRUZEM0YwQkMwOEJDMTg0N0VEQUYyMTQwQ0QKKzoxMDhFOTAwMDY4MEUwMDgwMDAwMDEwNDA4MUIwMTM0ODAxNjhDMDQ2OTEKKzoxMDhFQTAwMDAwOTE0MTY4QzA0NjAwOTE4MTY4QzA0NjAwOTFDMTY4NDgKKzoxMDhFQjAwMEMwNDYwMDkxMDE2OUMwNDYwMDkxNDE2OUMwNDYwMDkxRDkKKzoxMDhFQzAwMDgxNjlDMDQ2MDA5MUMxNjlDMDQ2MDA5MTAxNkFDMDQ2RUYKKzoxMDhFRDAwMDAwOTE0MTZBQzA0NjAwOTE4MTZBQzA0NjAwOTFDMDZBMTMKKzoxMDhFRTAwMEMwNDYwMDkwMDFCMDcwNDcwMDA4MTQ0MEYwQjU4M0IwNTAKKzoxMDhFRjAwMDY4NEQxQjIzREIwMUVGMThGODhCMDQyMjAyNDAwMjkyMUQKKzoxMDhGMDAwMDcxMjM1QjAxRTgxODAxODhDMDQ2MDE5MTQwODhDMDQ2ODIKKzoxMDhGMTAwMDAwOTAwMDI0MDNFMDA4MkMwMUQzMEYyQzA4RDkyMDFDNUEKKzoxMDhGMjAwMEZGRjdFOEZENjEwMDQ5MTkxQjIzREIwMUM5MTg4ODgzOUQKKzoxMDhGMzAwMDAxMzQyMDJDRUZEMzU4NENFMDY5MDAyODE1RDA1NzRFNEYKKzoxMDhGNDAwMDIwMjUwMTNENTM0OUUwNjkzMDQwMEJEMDY4MDA0MDE4QUUKKzoxMDhGNTAwMDM3MjM5QjAxQzAxODgxOEIyODFDRkZGNzY1RkVFMDY5NTEKKzoxMDhGNjAwMEIwNDNFMDYxNzYwODAwMkRFQkQxMDEyMEZGRjdDMkZEOTAKKzoxMDhGNzAwMDQ4NDlDMDQ2Rjg4M0Y4OEJDMjA4MjVEM0NBNjgwMTJBM0QKKzoxMDhGODAwMDEzRDEwQTc5MDAyQTFGRDE0OTg4MDAyOTFDRDEwMTk5REYKKzoxMDhGOTAwMDQzNEEwMDI5MDVEMDAxMjkxNkQxNTE4QkM5MDgxM0QyQTMKKzoxMDhGQTAwMDBGRTA1MThCMDkwOTBGRDIwQkUwMEE3OTAwMkEwQkQxOEYKKzoxMDhGQjAwMDZEMjM1QjAxQzkxODhBODhDOTg4MTE0MDQ5MDkwOTA3Q0UKKzoxMDhGQzAwMDAyRDEwNDIzOTg0M0Y4ODNGODhCMDQyMTAxNDAwMjlBQ0MKKzoxMDhGRDAwMDFGRDBCOThCNEEwQjI3RDM4MDA5MjVEM0ZGMjMwMTk4RDMKKzoxMDhGRTAwMDAxMzM5ODQyMjBEMDAwMjUwMDk4MDEyODAwRDEwNTAyQzUKKzoxMDhGRjAwMDAxOTgwMDI4MDJEMTAxMjM1QjAzMUQ0M0E5NDIxM0QwMkQKKzoxMDkwMDAwMDAwMjAyOTFDRkZGNzEwRkVCRDgzMDAyMEMwNDM2MDYyRDIKKzoxMDkwMTAwMDBBRTBCODhCNDAwQjA3RDIwOTIxNDkwMjAwMjBGRkY3NzQKKzoxMDkwMjAwMDAzRkUwOTIwNDAwMkI4ODNGODhCQzAwODJERDMxRDQ4RTkKKzoxMDkwMzAwMEM3NkEwMTk4MDA5OUZGRjc1MUZDQzIwN0QyMEYxQTQ5N0QKKzoxMDkwNDAwMDAzRDAwNDIzQ0Q2RDJCNDMwM0UwMDQyM0NENkQ5RDQzNUEKKzoxMDkwNTAwMDJCMUNDQjY1ODMwODAzRDMwMjIzQ0Q2RDJCNDMwM0UwODgKKzoxMDkwNjAwMDAyMjNDRDZEOUQ0MzJCMUNDQjY1NjE2QTgxNDIwQ0QwRTAKKzoxMDkwNzAwMDYwNjIwRTQ4MDAyQTAzRDBGRjIxMjEzMTM5NDMwM0UwMEEKKzoxMDkwODAwMEZGMjMyMTMzOUY0MzM5MUNDMTYyMDNCMEYwQkMwOEJDRUQKKzoxMDkwOTAwMDE4NDcwMDAwNjgwRTAwODA2ODFDMDA4MDAwMDAwMDgwRjcKKzoxMDkwQTAwMDI4MUMwMDgwNDAwMDE0NDBBNDJBMDA4MDQwMDAxNDAwQzYKKzoxMDkwQjAwMDkwQjQwMTIyMjAyODBGRDI0MzAwMEYxQzA3NDk1QzE4RUUKKzoxMDkwQzAwMDM3MjM5QjAxRTMxODlGODM4MjQwMDcyMzVCMDJDOTE4NjMKKzoxMDkwRDAwMDEwMUNDQTY5MTA0M0M4NjE5MEJDNzA0NzY4MEUwMDgwQkMKKzoxMDkwRTAwMDBCNDg0MDY5MEI0OUM5OEIwNDIyMEE0MDBBNDkwNkQwNDMKKzoxMDkwRjAwMDAxMjNEQjAyOTg0MzAxMjNDQTZEMUE0MzA1RTAwMTIzRDMKKzoxMDkxMDAwMERCMDIxODQzQ0E2RDUyMDg1MjAwQ0E2NTcwNDcwMDAwNUUKKzoxMDkxMTAwMDgwMDAxNDQwRTgxQjAwODBBNDJBMDA4MDAwQjU4NEIwQzEKKzoxMDkxMjAwMEZGRjdERUZGMDExQzA1MjAwMDkwMDAyMDAxQUIxODgwMzYKKzoxMDkxMzAwMDA0M0I1ODcwMUIyMjAwQUI1QTgwRDk4MDA1NDlDOTZEODkKKzoxMDkxNDAwMEMwNDYwMjkxMDM5MDY4NDYwMDIxRkRGNzc5RjgwNEIwMEIKKzoxMDkxNTAwMDA4QkMxODQ3QTQyQTAwODAwRjQ4MDE2ODQ5MEMwNUQyQjIKKzoxMDkxNjAwMDAxNjgwOTBDMDZEMTAwNjg4MDBBMDNEMzBCNDgwMDY4MjcKKzoxMDkxNzAwMDAwMEMwMUUwMEE0ODgwNkMwMDA0MDAwQzA5NEI5ODQyODYKKzoxMDkxODAwMDA1RDAwMjMzOTg0MjAyRDAwNzRCOTg0MjAxRDEwMTIwMEEKKzoxMDkxOTAwMDcwNDcwMDIwRkNFNzAwMDAwMDAwMTA0MDAwMDAxODQwNkQKKzoxMDkxQTAwMDAwMDAwMDgwMDQ5OTAwMDAwNzk5MDAwMDkwQjQwMTI0OTkKKzoxMDkxQjAwMDIxMUMxODQ4MDI2ODUyMEMwNkQyMDI2ODEyMEMwMkQxMTcKKzoxMDkxQzAwMDAwNjg4MDBBMDBEMjAwMjEwOTA2MDkwRTEyNEYxMzRBRDYKKzoxMDkxRDAwMDAyRDAzODY4MDAwQzAwRTA5MDZDMDAwNDAwMEMxMDRCQ0EKKzoxMDkxRTAwMDk4NDIwOEQwMDIzMzk4NDIwNUQwMEU0Qjk4NDIwMkQwRTQKKzoxMDkxRjAwMDAyM0I5ODQyMENEMTAwMjkwMkQwRjg2QTAwMEMwMEUwMzIKKzoxMDkyMDAwMEQwNkM0MDBBMDBEMjAwMjQyMDA2MDAwRTkwQkM3MDQ3QUIKKzoxMDkyMTAwMDAwMjBGQkU3MDAwMDEwNDAwMDAwMTg0MDAwMDAwMDgwMjQKKzoxMDkyMjAwMDA0OTkwMDAwMDc5OTAwMDAwQzQ4MDE2ODQ5MEMwNUQyMTgKKzoxMDkyMzAwMDAxNjgwOTBDMDVEMTAwNjg4MDBBMDJEMzA4NDg4MDY4REIKKzoxMDkyNDAwMDAxRTAwODQ4NDA2QzAwMDQwMDBDMDAyMTAzMjgwM0QwMTIKKzoxMDkyNTAwMDQwMDgwMUQzMDEyMDcwNDcwODFDRkNFNzAwMDAxMDQwQzMKKzoxMDkyNjAwMDAwMDAxODQwMDAwMDAwODBGMEI1MDEyNzFBNEMyNTY4NjYKKzoxMDkyNzAwMEZGRjc3MkZGMDMxQzE5NEEwMjIxMDEyNjE4NDgwMTJCMkYKKzoxMDkyODAwMDFCRDFDQjA0MUU2MDU1MjMwMzYwMDAyMzQzNjAwNjY4OTYKKzoxMDkyOTAwMDU1MkUxQkQxQUEyNjA2NjA0MzYwMDM2OEFBMkIxNUQxNjAKKzoxMDkyQTAwMDA5MjMwMzYwMDUyMzBGNEZDMDQ2M0I2MDAzMjMwRTRGODUKKzoxMDkyQjAwMEMwNDYzQjYwMTE2MDA3NjgwOEUwMDgyMzIzNjAwNDIzNzAKKzoxMDkyQzAwMDBBNEZDMDQ2M0I2MDExNjAwNjYwMjc2OEMwNDYyNTYwQjMKKzoxMDkyRDAwMDM4MUNGMEJDMDhCQzE4NDcwMDAwMjA0MDAwMDAyNDQwQTcKKzoxMDkyRTAwMDAwMDAyMjQwMDAwMDJBNDAwMDAwMjY0MDAwMDAyODQwRTQKKzoxMDkyRjAwMDgwQjUwNzFDRkZGNzMwRkYwMTI4MDVEMTE5NDgwMDY4MjkKKzoxMDkzMDAwMDE5NDk0OTZCMDg0MDIyRTAxODQ4MDE2ODQ5MEMwNUQyMDgKKzoxMDkzMTAwMDAxNjgwOTBDMDZEMTAwNjg4MDBBMDNEMzE0NDgwMDY4NkMKKzoxMDkzMjAwMDAwMEMwMUUwMTM0ODgwNkMwMDA0MDAwQzEyNEJDMDE4QzQKKzoxMDkzMzAwMDA4MjgwQkQyMDFBMzFCNUM1QjAwOUY0NDA1MDMwNzAzQjUKKzoxMDkzNDAwMDA3MDcwNTAzMDMyMDAyRTAwMTIwMDBFMDAwMjAwMTIxQkYKKzoxMDkzNTAwMDM4NjA4MDA3MDBEMTAwMjEwODA2MDAwRTgwQkMwOEJDRTAKKzoxMDkzNjAwMDE4NDcwMDAwMzQ2RTIxNDAwMDAwMTE0MDAwMDAxMDQwRkEKKzoxMDkzNzAwMDAwMDAxODQwMDAwMDAwODBGRTY2RkZGRkYwQjU4MkIwREMKKzoxMDkzODAwMDA3MUMwMTIwMDE5MEZGRjdFN0ZFMDEyODEzRDEzODJGQjkKKzoxMDkzOTAwMDAxRDBBODJGMDdEMTAwMjZGNjQzMzQxQ0E4MkYwMkQxRjQKKzoxMDkzQTAwMDMwMUMwMDk2MzUxQzExMjAwMDA0MDY2MjQ0NjI4NTYyNjAKKzoxMDkzQjAwMDAwOTlDMDQ2QzE2MjAwMjEwODQ4QzA0NjAxNjAzODJGQUMKKzoxMDkzQzAwMDAxRDBBODJGMDVEMTAxMjEwMTYwQTgyRjAxRDEwMzIxQ0YKKzoxMDkzRDAwMDAxNjAwMTk4MDJCMEYwQkMwOEJDMTg0NzM0NkUyMTQwMEYKKzoxMDkzRTAwMDcwNDcwMDAwNzA0NzAwMDA5MEI1MDcxQzEyNEMyMTY4QzAKKzoxMDkzRjAwMDEyNDg4MTQyMEJEMDAwMjMyMTFDRTIxREMxMzIwMEUwNDMKKzoxMDk0MDAwMDA4QzE5MTQyRkNEMzIwNjBDODIwQTA4MDY3NzIzODAxNTcKKzoxMDk0MTAwMDAwRjAxOEY4Mjc3MjBBNDhDMDQ2RTA2MDA5MkYwMERCMDgKKzoxMDk0MjAwMDAwMjdFMDE5MDE3RDAxMzEwMTc1RTA4ODAxMzBFMDgwRkQKKzoxMDk0MzAwMDAxMjA5MEJDMDhCQzE4NDcwMDAwMDA4MEVFRkZDMEQwOUYKKzoxMDk0NDAwMDA4MTAwMDAzODBCNDA4NEFEMTFEODkzMTBCN0EyMDJCMDMKKzoxMDk0NTAwMDAxRDMwMDIzMEI3MjA3MUMwODdBNDMxQzBCNzI4MDE4N0YKKzoxMDk0NjAwMDkwMzA0NzcyODBCQzcwNDcwMDAwMDA4MDA3NDkwMTIyOUQKKzoxMDk0NzAwMDEyMDQwODY4MDI0MDAxMjAwMDJBMDZEMTBBNjgxMjBDNzIKKzoxMDk0ODAwMDAyRDEwOTY4ODkwQTAwRDIwMDIwNzA0NzAwMDAxMDQwMEMKKzoxMDk0OTAwMDkwQjUwNzFDMDk0QzM4MUMyMTFDRkNGNzkxRkYzODFDQTcKKzoxMDk0QTAwMDAwRjAwRUY4MDEyM0Q4NDIwMUQxMDAwQ0UwODAwMDIxMjkKKzoxMDk0QjAwMDIwMUNGQ0Y3QzVGRTkwQkMwOEJDMTg0N0M0NjYyMTQwQzAKKzoxMDk0QzAwMEY4QjUwNzFDNzk3QTc2NDgwMDIzNzY0QzAxMjk1REQxREUKKzoxMDk0RDAwMEEyODhDMDQ2MDA5MkExODk4QTQyNzREQUZBN0EwMDJBRTgKKzoxMDk0RTAwMDE1RDA3QTZDMDAyQTEyRDA4QTQyMTBEODAwOUE1MTFDRUEKKzoxMDk0RjAwMEExODBBMTg4QzA0NjQxODE3ODZDNkI0RUMwNDZGMDgwNDcKKzoxMDk1MDAwMEEwNkE1ODIzNzk2QzU5NDM0MDE4QzExQTI4RTAyMjg4NzAKKzoxMDk1MTAwMDAxMzIxMjA0MTIwQzIyODA4QTQyMDBEQjIzODAwMDIyRDYKKzoxMDk1MjAwMDAwMjk2OURENUY0Q0E0NkE1RTRCMUQ4ODU4MjM2QjQzOUMKKzoxMDk1MzAwMEUzMThERTFEMDEzNjAxMjM5QjA3MzM0MzFCNjgxQjA2MUUKKzoxMDk1NDAwMDE1RDE1ODQ5MDA5QTAxMzI4QTgwOEE4OEMwNDY0MjgxRTIKKzoxMDk1NTAwMDA4ODgwMTMwNTQ0RUMwNDZGMDgwNTgyMDY4NDMyMTE4RDYKKzoxMDk1NjAwMDM4MUMwMEYwMzlGQkYwODgwMDA0MDAxNDk1RTA0RDRCRTYKKzoxMDk1NzAwMDAxMzUyRDA0MkQwQzFEODA4RDQyMDFEQjAwMjUxRDgwNDEKKzoxMDk1ODAwMDAxMzIxMjA0MTIxNDkxNDJDRURDODFFMEUxODhFMjg5QkEKKzoxMDk1OTAwMDkxNDIxOERBRjk3QTAwMjkyRkQwNzk2QzQ5MDQ0OTBDRTQKKzoxMDk1QTAwMDc5NjQyQUQwRTI4OTkxNDIyN0Q4RTE4ODAxMzFFMTgwQUIKKzoxMDk1QjAwMEUxODhDMDQ2ODE4MTAxMjNEQjAzNzg2QzE4NDMzQTRFNzEKKzoxMDk1QzAwMEMwNDZGMDgwMDBFMDYzRTBFMDZBNzk2QzRCMDA1OTE4MTcKKzoxMDk1RDAwMDQ5MDE0MDE4QzExRjU5MzkzODFDMDBGMDBGRkJFMDZBREYKKzoxMDk1RTAwMDc5NkM0QTAwNTIxODUyMDE4MDE4MDEzOTA5MDQwOTBDOUIKKzoxMDk1RjAwMDYwMzgwMEYwODlGQkI2RTc0QUUwNjE4ODAxMzEwOTA0NzAKKzoxMDk2MDAwMDA5MEM2MTgwRTI4OTkxNDIwMERCNjM4MDAwMjEwMDJBMUQKKzoxMDk2MTAwMDNFREQyNDRDRTQ2QTIzNEI1RDg4NkIwMDVCMTk1QjAxRTMKKzoxMDk2MjAwMEUzMThERTFEMDEzNjAxMjM5QjA3MzM0MzFCNjgxQjA2MkQKKzoxMDk2MzAwMDIwRDExQzRFRjE4ODAxMzFGMTgwRjE4OEMwNDY4MTgxMzIKKzoxMDk2NDAwMDcwODgwMTIzREIwMzAxMzAxODQzMTc0OUMwNDZDODgwRTYKKzoxMDk2NTAwMDY4MDA0MDE5NDAwMTIxMTgzODFDMDBGMENGRkE3MTg4QzkKKzoxMDk2NjAwMDRBMDA1MjE4NTIwMUYwNkE4MDE4MDBGMDRERkIwRTQ5NzIKKzoxMDk2NzAwMEM4ODg3OUU3MEI0QjAxMzUyRDA0MkQwQzVEODA5NTQyOTAKKzoxMDk2ODAwMDAxREIwMDI1NUQ4MDAxMzEwOTA0MDkxNDhBNDJDMkRDMzYKKzoxMDk2OTAwMDAxODkwMTMxMDE4MTAwMjBDMDQzRjhCQzA4QkMxODQ3OTIKKzoxMDk2QTAwMDRDMkIwMDgwNEMyQTAwODBDNDY2MjE0MEYwQjQwNjFDN0MKKzoxMDk2QjAwMDAxMjNEQjAzMzM0MDAxMjQ0NDRGMDAyMDQ0NEE0NTREM0QKKzoxMDk2QzAwMEQxMUQzOTMxMDAyQjQxRDBFMzAzRjMxQTczRDBFRTg5NTkKKzoxMDk2RDAwMDlFNDI3MUQzRUU4ODAwMkU2REQwRUQ2QTVFMUU3MzAwM0YKKzoxMDk2RTAwMDlCMTk1QjAxRUQxOEFFNjgzNjA2MzYwRTAzMkUwMkQwQ0MKKzoxMDk2RjAwMENFODkwMTM2Q0U4MTQwMzVBRDhCQUQwMDM1NEU3NjZBRDAKKzoxMDk3MDAwMEMwNDY3MDUxNTU4OTAxMzU1NTgxMzI0RUYyNkFEMjE4RTIKKzoxMDk3MTAwMDkwNjBGMjZBRDIxODkwNjNGMjZBRDIxOEQwNjNGMjZBNEIKKzoxMDk3MjAwMEQyMTgxMDY0RjI2QUQyMTg1MDY0RjI2QUQyMTg5MDY0QTcKKzoxMDk3MzAwMEYyNkFEMjE4RDA2NEYwODgwMTM4RjA4MEYwODhDMDQ2MTAKKzoxMDk3NDAwMDg4ODEyNDQ5MDAyODM5RDE0RjgwMzdFMDAwMkUzOEQ5NEMKKzoxMDk3NTAwMEFCODlCMzQyMzBEM0FCODgwMDJCMkNEMDUzODkwMTMzNzMKKzoxMDk3NjAwMDUzODEyQTFDQUQ2QTU4MjMwMTNFNzM0M0VEMThBRTY4M0QKKzoxMDk3NzAwMDM2MDYzNjBFMDMyRTAyRDBDRTg5MDEzNkNFODFBODYwODEKKzoxMDk3ODAwMDk1NkFFRDE4QTg2Mzk1NkFFRDE4RTg2Mzk1NkFFRDE4NzcKKzoxMDk3OTAwMDI4NjQ5NTZBRUQxODY4NjQ5NTZBRUQxOEE4NjQ5NTZBNUUKKzoxMDk3QTAwMEVCMThEODY0OTA4ODAxMzg5MDgwOTA4OEMwNDY0ODgxMzIKKzoxMDk3QjAwMDAwMjgwM0QxMDFFMDA0RTAwM0UwMTc4MDIwMUNGMEJDODYKKzoxMDk3QzAwMDcwNDdDQTg5MDEzMkNBODFGOUU3MDAwMEZGRkYwMDAwMzMKKzoxMDk3RDAwMDBDMkIwMDgwNEMyQTAwODAwMEI1MDAyMTQxNjAxMDQ5MEMKKzoxMDk3RTAwMDRBNjgwMDJBMTBEMUNBNjgwMDJBMDREMENBMUQxOTMyNUEKKzoxMDk3RjAwMDEyNzkwMDJBMDhEMDRBNjkwMDJBMEJEMTg4NjE0ODYxOTEKKzoxMDk4MDAwMDAwRjAxMEY4MDhCQzE4NDc0QTY5MDAyQTAyRDE4ODYxQTQKKzoxMDk4MTAwMDQ4NjFGN0U3OEE2OUMwNDY1MDYwODg2MUYyRTcwMDAwNTYKKzoxMDk4MjAwMDZDMDYwMDgwQjBCNTJBNDg0MDY5MDAyODRDRDAwODIyNTgKKzoxMDk4MzAwMEMxNjgwQTQwMDAyNzI3NEJEOTFEQjkzMTAwMkExMUQwMzEKKzoxMDk4NDAwMDA0MjIyNTRDQzA0NjBDNjEyNDRDQzA0NjRDNjIyNDRDN0EKKzoxMDk4NTAwMEMwNDY4QzYyMjM0Q0MwNDZDQzYyMjM0Q0MwNDYwQzYzOEQKKzoxMDk4NjAwMDRGNjMxMkUwMDUyMjIxNENDMDQ2MEM2MTIwNENDMDQ2REIKKzoxMDk4NzAwMDRDNjIyMDRDQzA0NjhDNjIxRjRDQzA0NkNDNjIxRjRDRDAKKzoxMDk4ODAwMEMwNDYwQzYzMUU0Q0MwNDY0QzYzNDAyNENDODI0RjgzQzAKKzoxMDk4OTAwMDFDNEYwMDIxMDAyQTBDRDk4QzAwMDUxOTZENkE3RDQwRUYKKzoxMDk4QTAwMEU0MThGRjM0MDEzNDY1NjIwMTMxOTE0MkY0RDMxMDI5ODgKKzoxMDk4QjAwMDA3RDI4QTAwRDIxOEZGMzIwMTMyNTc2MjAxMzExMDI5RDMKKzoxMDk4QzAwMEY3RDMxMTQ5MDBGMDIyRjhCMEJDMDhCQzE4NDcwMDAwREIKKzoxMDk4RDAwMDZDMDYwMDgwQUNBQjIwNDAyODAxNDAwMDAxMjM0NTY3QTYKKzoxMDk4RTAwMDg5QUJDREVGRkVEQ0JBOTg3NjU0MzIxMDIwMDE0MDAwRUYKKzoxMDk4RjAwMDY3NDUyMzAxRUZDREFCODk5OEJBRENGRTEwMzI1NDc2NzAKKzoxMDk5MDAwMEMzRDJFMUYwMzYzNjM2MzYzMDgwMjA0MEIwQjUwRjFDNzkKKzoxMDk5MTAwMDE1NERFOTFEQzkzMTE1NEMyMzFDMTU0QTAwMjBGQ0Y3RDMKKzoxMDk5MjAwMDQ0RkJFOTFERkYzMTFFMzEyMzFDMEQxQzExNEEwMTIwOEYKKzoxMDk5MzAwMEZDRjczQkZCMjkxQzIzMUMwRTRBMDAyMEZDRjczNUZCREYKKzoxMDk5NDAwMDM5MUMyMzFDMEM0QTAxMjBGQ0Y3MkZGQjAwMjEwQjQ4N0IKKzoxMDk5NTAwMEMyMUQxOTMyNTE3MTAxMjFGRjMwMDEzMDQxNjIwODFDRDIKKzoxMDk5NjAwMEIwQkMwOEJDMTg0NzAwMDBBQ0FCMjA0MDc1MDhGRkZGMzYKKzoxMDk5NzAwMDI4MDAwMzAwNDAwMDAyMDAxNDAwMDcwMDZDMDYwMDgwNkQKKzoxMDk5ODAwMEYwQjUzNzRBNTA2OTAxMjM5QjA3MDgzMDE4NDMwMDY4MzcKKzoxMDk5OTAwMDAxMDYwOTBFMzM0QjAxMjk0OUQxMUY2ODE5MUMzMjRCQUUKKzoxMDk5QTAwMDlGNDIwNEQxRkZGNzNFRkZGMEJDMDhCQzE4NDcwMDIzREMKKzoxMDk5QjAwMDlGMDBDQzU5NTU2OUVGMTkzQzYxMDEzMzA1MkJGN0QzNTIKKzoxMDk5QzAwMDAwMEEwMDAyMDIyMzE4NDM1MzY5QzA0Njk4NjA1MDY5OTgKKzoxMDk5RDAwMDA4MjNDMjY4MTM0MDI1NEZGQTFEQjkzMjAwMkIwMkQwNkMKKzoxMDk5RTAwMDA0MjMyMzRDMDFFMDA1MjMyMjRDQzA0NjE0NjE0MDI0OEIKKzoxMDk5RjAwMEQ0ODIwMDI0NTQ4MzIwNEMwMDIyMDAyQjBDRDk5NTAwRTMKKzoxMDlBMDAwMDQ2MTk3NjZBNjY0MEVEMTlGRjM1MDEzNTZFNjIwMTMyRkUKKzoxMDlBMTAwMDlBNDJGNEQzMTAyQTA3RDI5MzAwREIxOUZGMzMwMTMzQTMKKzoxMDlBMjAwMDVDNjIwMTMyMTAyQUY3RDNGRkY3NzBGRkJDRTcwMDIxMTgKKzoxMDlBMzAwMDhGMDBEQzU5NTU2OUVGMTk3QzYyMDEzMTA1MjlGN0QzOTQKKzoxMDlBNDAwMDAwMEEwMDAyMDMyMzE4NDM1MTY5QzA0Njg4NjA1MDY5MjgKKzoxMDlBNTAwMDQwNjhDMDQ2NTA2MTA5NDhGQ0Y3QTRGQUE0RTcwMDAwM0EKKzoxMDlBNjAwMDZDMDYwMDgwMzA4MDIwNDA2NzQ1MjMwMUFDQUIyMDQwNkQKKzoxMDlBNzAwMDI4MDE0MDAwMjAwMTQwMDA1QzVDNUM1QzExMzFGRkZGNkMKKzoxMDlBODAwMEYwQjUwNzFDM0I0ODNDNEMwODIxMjA2MEExODAwMDIwMTkKKzoxMDlBOTAwMDIwODFFMTgwNjA4MTM5NDhDMDQ2RTA2MDM4NDhDMDQ2OTYKKzoxMDlBQTAwMDIwNjEzODQ4QzA0NjYwNjEzNzQ4QzA0NkEwNjEzNzQ4RTkKKzoxMDlBQjAwMEMwNDZFMDYxMzY0OEMwNDYyMDYyMzY0OEMwNDY2MDYyMTMKKzoxMDlBQzAwMDM1NDhDMDQ2QTA2MjM1NDhDMDQ2RTA2MjM0NDhDMDQ2Q0EKKzoxMDlBRDAwMDIwNjMzNDQ4QzA0NjYwNjMzMzQ4QzA0NkEwNjMzMzQ4QkYKKzoxMDlBRTAwMEMwNDZFMDYzMzI0OEMwNDYyMDY0MzI0OEMwNDY2MDY0RTUKKzoxMDlBRjAwMDMxNDhDMDQ2QTA2NDMxNDhDMDQ2RTA2NDMwNDhDMDQ2QTIKKzoxMDlCMDAwMDIwNjUzMDQ5Qzg2ODAyMDQ4OTY5NEE0MEUzMUQ3OTMzRjkKKzoxMDlCMTAwMDA5MDRDOTQzQzA0MzQ4NDBFMTFEQjkzMURBNjMwODYwMTQKKzoxMDlCMjAwMDI5NEQyMTFDMkIxQzI5NEEwMDIwRkNGNzNFRkEyODRBMEIKKzoxMDlCMzAwMEUxMURCNTMxMDEyMDJCMUMwRTFDRkNGNzM2RkEyNDRBMUUKKzoxMDlCNDAwMDAwMjAzMTFDMkIxQ0ZDRjczMEZBRTExRDREMzEyQjFDODEKKzoxMDlCNTAwMDIwNEEwMTIwRkNGNzI5RkFFMDFENUQzMDAxNjgwMDI5NDgKKzoxMDlCNjAwMEZDRDA2MDZEQzA0NjM4NjUyMDZFQzA0Njc4NjVGMEJDOUMKKzoxMDlCNzAwMDA4QkMxODQ3ODAwMDA4MDA4Q0I5MjA0MDgxODE0OEJEOEUKKzoxMDlCODAwMDc5NTYyMzhDOTMwQzgyOTUxRDBFMTJDRjlCM0JDMEU5MTYKKzoxMDlCOTAwMEU2NTU3QzgyOTlGNjc4MDJEMUQ3MjU3MzcyOEMzMzEwMDIKKzoxMDlCQTAwMEY3MDNGMTQyNkM5QjRBQTc4MjhFMjNBOTkwQjE4MjhFNjMKKzoxMDlCQjAwMERDM0ZGQjI5MDA2MjIyNDU4ODJCRjE4NTEyNjFEMTczQkQKKzoxMDlCQzAwMDZFQjExMTE2MDg4MzIwNDA3NTA4RkZGRjU0MDAwMzAwOTIKKzoxMDlCRDAwMDA4MDAwMjAwMTQwMDAzMDA4MEI1MEYxQzM5MUMwMEYwQkYKKzoxMDlCRTAwMDMzRjgzODFDRkZGNzRDRkYwMzQ4MDE4OTAxMzEwMTgxMkMKKzoxMDlCRjAwMDgwQkMwOEJDMTg0NzAwMDAwQzJCMDA4MDkwQjUwNDFDRUEKKzoxMDlDMDAwMDBGMUMyMDFDMzkxQzAwRjAxRkY4RTA2ODAxMEVGRjIyMTkKKzoxMDlDMTAwMDEyMDQwMjQwMTIwQTExNDNGRjIyMTIwMjAyNDAxMjAyRjEKKzoxMDlDMjAwMDExNDMwMDA2MDg0MzM4NjUyMDY5QzA0Njc4NjU2MDY5QkQKKzoxMDlDMzAwMEMwNDZCODY1MDM0ODAxODkwMTMxMDE4MTkwQkMwOEJDNjgKKzoxMDlDNDAwMDE4NDcwMDAwMEMyQjAwODA5MEI1MDAyMjkzMDAxRjE4Q0QKKzoxMDlDNTAwMEJGNjk1QjE4NUY2MjAxMzIwNTJBRjdEMzA3N0FGQjA4RjgKKzoxMDlDNjAwMDAzRDMwMDIzOTIwMDUyMTgxMzYyMDc2QkMwNDY4RjYzMjAKKzoxMDlDNzAwMEM3NkFDMDQ2Q0Y2Mzg3NkJDMDQ2MEY2NDQ3NkJDMDQ2NTgKKzoxMDlDODAwMDRGNjQwNzZDQzA0NjhGNjRDMjZCQzA0NkNBNjRDMjg4MEEKKzoxMDlDOTAwMEMwNDYwQTgwODI3QTEyMDYwMzdBMUIwNDFBNDNDMzg4REMKKzoxMDlDQTAwMDFCMDIxQTQzNDM3QURCMDcxQTQzOEE2MDE3MUM4MzdBMjQKKzoxMDlDQjAwMDVBMDgwNUQzMTQyMjFDMUNBMzA4MDJEMjE1MjIwMEUwNjYKKzoxMDlDQzAwMDAwMjIwMDdBNDMwODEwRDNDMDA4MDJEMzg4MjAxMDQzMzIKKzoxMDlDRDAwMDAxRTA4MDIwMTA0MzNBMEExMjAyMDEyMzFBNDNDODYwQUYKKzoxMDlDRTAwMDhBNjAwODFDRkZGNzc4RkQwNUUwMzgwQTAwMDIwMzIzQUMKKzoxMDlDRjAwMDE4NDM4ODYwQ0E2MDAzNDgwMTg5MDEzMTAxODE5MEJDMjIKKzoxMDlEMDAwMDA4QkMxODQ3MEMyQjAwODBGMEI0MDI2RDE0NEMxNTFDRDUKKzoxMDlEMTAwMEU3NjlCRDQwMTMxQzI2NkFGMzQwNUQ0MDJFMUM0NTZENkIKKzoxMDlEMjAwMEJENDA2RTQwMkIxQzM1MUNGRDQwMkYxQ0JCMDA2NTZBREUKKzoxMDlEMzAwMEVCNTgwMDJCMDhEMDIzNjkwMTM3OUY0MjAwRDMwMDI3M0UKKzoxMDlENDAwMEJFMDBBRTU5MDAyRUY3RDFBNDY5QTI0MDExNDMwNTRCQzUKKzoxMDlENTAwMDE5NDNCQTAwQTk1MDQwMzA4NzgzRjBCQzcwNDcwMDAwMTcKKzoxMDlENjAwMDRDMkEwMDgwMDAwMDAwODA4MEI0MDAyMjAwMjMwMDI5REIKKzoxMDlENzAwMDA1RDkwNzc4N0E0MDAxMzAwMTMzOEI0MkY5RDNEMDQzQkIKKzoxMDlEODAwMDAwMDYwMDBFODBCQzcwNDdGMEI1MDcxQzAwMjRGRjI2QkIKKzoxMDlEOTAwMDA5MzYyMDFDMDBGMDlBRjgwMEYwQjhGOTA1MUMwMEYwMTQKKzoxMDlEQTAwMEM3RkEzRDcwMjgxQzAxMzcwMTM0QjQ0MkYxRDNGMEJDMkUKKzoxMDlEQjAwMDA4QkMxODQ3ODBCNTAwRjA5M0Y4MDBGMEE3RjkwNzFDMUQKKzoxMDlEQzAwMDAwRjBCNkZBMzgwQUY2RDM4MEJDMDhCQzE4NDdGM0I1RTEKKzoxMDlERDAwMDgyQjAwMjk4NDEwMjUzMjAwMEYwNjRGODAwRjBBOEZBMjMKKzoxMDlERTAwMEZGRjdFOEZGMDAyNDAwMjAwMTkwMkUyMDAwOTAwMDI1QkUKKzoxMDlERjAwMDAwMjcwMjk4MDEyODA0RDEwMDk4ODQ0MjAxRDMwMDI2NEMKKzoxMDlFMDAwMDA5RTAwMTk4NDExQzAxOTEwMEYwNjBGODAwRjA3RUY5MzIKKzoxMDlFMTAwMDA2MUMwMEYwOERGQUY4MDA4NjQwMzU0MzAxMzQwMTM3MDYKKzoxMDlFMjAwMDA0MkZFNkQzMDM5OTIwQzEwMzkxRkYyMzA5MzM5QzQyRjkKKzoxMDlFMzAwMERERDMwNEIwRjBCQzA4QkMxODQ3RjBCNTA0MUMwRjFDRkYKKzoxMDlFNDAwMDAxMkMyQUQwMTY0OEMwNkY0MDIzMDE2ODE5NDMwMTYwRDUKKzoxMDlFNTAwMDAwMjYyMENGQjEwMDg0MjAwMEYwMjRGODI4MUMwMEYwNTgKKzoxMDlFNjAwMERGRjkyODBBMDBGMERDRjkyODBDMDBGMEQ5RjkyODBFRjcKKzoxMDlFNzAwMDAwRjBENkY5MDBGMDVDRkEwMTM2NDIyRUU5RDM2MTAyMTcKKzoxMDlFODAwMDgzMjAwMEYwMEZGODAwRjA1M0ZBRkZGNzkzRkYwNDQ4MjcKKzoxMDlFOTAwMEMwNkY0MDIzMDE2ODk5NDMwMTYwRjBCQzA4QkMxODQ3QkIKKzoxMDlFQTAwMDY4MEUwMDgwOTBCNTA0MUMwRjFDMDBGMDU5RkEyMDFDQUQKKzoxMDlFQjAwMDAwRjBCNkY5MzgwQzAwRjBCM0Y5MzgwQTAwRjBCMEY5NDgKKzoxMDlFQzAwMDM4MUMwMEYwQURGOTkwQkMwOEJDMTg0NzAwQjUwMTFDNjcKKzoxMDlFRDAwMDU0MjBGRkY3RTdGRjAwMjAwMEYwQTJGOTA4QkMxODQ3NjQKKzoxMDlFRTAwMDAwQjUwMEYwM0RGQTU3MjAwMEYwOUFGOTA4QkMxODQ3NzkKKzoxMDlFRjAwMDkwQjUwODRGRkE2RjIwMjMxNDY4OUM0MzE0NjAyMzFDMEMKKzoxMDlGMDAwMEZGRjc2NUZGRjg2RjIwMjMwMTY4MTk0MzAxNjA5MEJDREIKKzoxMDlGMTAwMDA4QkMxODQ3NjgwRTAwODA5MEI1MDg0RkZBNkYyMDIzRTAKKzoxMDlGMjAwMDE0Njg5QzQzMTQ2MDIzMUNGRkY3ODdGRkY4NkYyMDIzRkQKKzoxMDlGMzAwMDAxNjgxOTQzMDE2MDkwQkMwOEJDMTg0NzY4MEUwMDgwOTYKKzoxMDlGNDAwMEYwQjUwNDFDMEYxQzE4NEVGMDZGMjAyMzAxNjg5OTQzRDQKKzoxMDlGNTAwMDAxNjA2MTAyNTMyMEZGRjdBNUZGMDBGMEU5RjlGRkY3NjgKKzoxMDlGNjAwMDI5RkZGODFEMDUzMDAxMkMwM0QxMjIyRjAxRDMwMDI3MzIKKzoxMDlGNzAwMDBGRTA0NDFDRkZGN0FBRkYwMEYwQzhGODA3MUMwMEYwMzAKKzoxMDlGODAwMEQ3RjkyMDFDRkZGN0EyRkYwMEYwQzBGODA1MUMwMEYwNzUKKzoxMDlGOTAwMENGRjlGMDZGMjAyMzAxNjgxOTQzMDE2MDI4MDIzODQzOEMKKzoxMDlGQTAwMEYwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MEYwQjVDMkIwRDUKKzoxMDlGQjAwMDE0MUMwRDFDMDcxQzAxMkYyRkQwNzkwMjE5NEVGMDZGQjUKKzoxMDlGQzAwMDIwMjMwMjY4OUE0MzAyNjA1MzIwRkZGNzZCRkYwMEYwRTIKKzoxMDlGRDAwMEFGRjlGRkY3RUZGRTY4NDZGRkY3RDZGRTZBNDZFODFEQzkKKzoxMDlGRTAwMDA1MzAxNDU0MjEwQTY4NDQ0MTcwNjg0NjAwOTkwQzMwQzkKKzoxMDlGRjAwMEZGRjdCQUZFMDJBQjE4NzAwMDIwNTg3MDY4NDYwQzIxQkIKKzoxMEEwMDAwMEZGRjdCMkZFMDJBQjU4NzA2OTQ2MzgxQ0ZGRjcxNUZGMjgKKzoxMEEwMTAwMEYwNkYyMDIzMDE2ODE5NDMwMTYwNDJCMEYwQkMwOEJDMTYKKzoxMEEwMjAwMDE4NDcwMDAwNjgwRTAwODBGRkI1QzJCMDA3MUMwMTJGNjIKKzoxMEEwMzAwMDAxRDEwMTIwMzZFMDZCNDYwMDIwQzQ0MzEwQzMwMTMwM0IKKzoxMEEwNDAwMDQyMjhGQkQzNjg0NjBDMzAwMzFDMDAyNDAwMkEwQUQ5OUUKKzoxMEEwNTAwMDBFODhDMDQ2MDY3MDBFODgzNjEyNDY3MDAyMzAwMjMxRjUKKzoxMEEwNjAwMDAyMzQ5NDQyRjREMzAwOTIxODFDMTExQ0ZGRjc3Q0ZFQkEKKzoxMEEwNzAwMDA0MUMwMDIwMDE5MDAyQUIxQzcwNTg3MDlENzA2ODQ2NTMKKzoxMEEwODAwMDBDMjFGRkY3NzFGRTAyQUI1ODcwNDU5QjFEMDYyRDBFOEIKKzoxMEEwOTAwMEFDNDIwM0QxNjk0NjM4MUNGRkY3M0VGRjAxMjBBQzQyQjkKKzoxMEEwQTAwMDAwRDEwMDIwNDZCMEYwQkMwOEJDMTg0N0IwQjVDMkIwMjMKKzoxMEEwQjAwMDBGMUM0MTAyMTQ0Q0UwNkYyMDIzMDI2ODlBNDMwMjYwOTcKKzoxMEEwQzAwMDUzMjBGRkY3RUZGRTAwRjAzM0Y5RkZGNzczRkU2ODQ2MDkKKzoxMEEwRDAwMEZGRjc1QUZFRTA2RjIwMjMwMTY4MTk0MzAyQUQwMTYwQ0IKKzoxMEEwRTAwMDZENzgwMDI0MDJBQjVDNzA2ODQ2MEMyMUZGRjczQ0ZFRTMKKzoxMEEwRjAwMEE4NDIwMkQxMDA5ODg3NDIwMUQzMjAxQzAwRTAwMTIwMzEKKzoxMEExMDAwMDQyQjBCMEJDMDhCQzE4NDc2ODBFMDA4MEZDNDY2MDQ3RUYKKzoxMEExMTAwMDAwMDBBMEUzQjQyMjlGRTVCNDMyOUZFNTAxMTBBMEUzNjQKKzoxMEExMjAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1MzcKKzoxMEExMzAwMDAwMTA4MkU1MDAxMDkzRTU4MTAzODBFMTAxMTBBMEUzQTcKKzoxMEExNDAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1MTcKKzoxMEExNTAwMDAwMTA4MkU1MDAxMDkzRTUwMTAzODBFMTAxMTBBMEUzMDcKKzoxMEExNjAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1RjcKKzoxMEExNzAwMDAwMTA4MkU1MDAxMDkzRTU4MTAyODBFMTAxMTBBMEUzNjgKKzoxMEExODAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1RDcKKzoxMEExOTAwMDAwMTA4MkU1MDAxMDkzRTUwMTAyODBFMTAxMTBBMEUzQzgKKzoxMEExQTAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1QjcKKzoxMEExQjAwMDAwMTA4MkU1MDAxMDkzRTU4MTAxODBFMTAxMTBBMEUzMjkKKzoxMEExQzAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1OTcKKzoxMEExRDAwMDAwMTA4MkU1MDAxMDkzRTUwMTAxODBFMTAxMTBBMEUzODkKKzoxMEExRTAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1NzcKKzoxMEExRjAwMDAwMTA4MkU1MDAxMDkzRTU4MTAwODBFMTAxMTBBMEUzRUEKKzoxMEEyMDAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1NTYKKzoxMEEyMTAwMDAwMTA4MkU1MDAxMDkzRTUwMTAwODBFMTFFRkYyRkUxQjAKKzoxMEEyMjAwMEZDNDY2MDQ3QTQyMTlGRTVBODMxOUZFNUEwMTNBMEUxNkIKKzoxMEEyMzAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1MjQKKzoxMEEyNDAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTIwMTNBMEUxRDkKKzoxMEEyNTAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1MDQKKzoxMEEyNjAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNUEwMTJBMEUxM0EKKzoxMEEyNzAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1RTQKKzoxMEEyODAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTIwMTJBMEUxOUEKKzoxMEEyOTAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1QzQKKzoxMEEyQTAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNUEwMTFBMEUxRkIKKzoxMEEyQjAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1QTQKKzoxMEEyQzAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTIwMTFBMEUxNUIKKzoxMEEyRDAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1ODQKKzoxMEEyRTAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNUEwMTBBMEUxQkMKKzoxMEEyRjAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1NjQKKzoxMEEzMDAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUxM0IKKzoxMEEzMTAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1NDMKKzoxMEEzMjAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTFFRkYyRkUxN0YKKzoxMEEzMzAwMEZDNDY2MDQ3QTAzMDlGRTUwMTEwQTBFMzAwMTA4M0U1RDQKKzoxMEEzNDAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MkQKKzoxMEEzNTAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTFFRkYyRkUxNjgKKzoxMEEzNjAwMEZDNDY2MDQ3NzAzMDlGRTUwMDEwQTBFMzAwMTA4M0U1RDUKKzoxMEEzNzAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1RkQKKzoxMEEzODAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTFFRkYyRkUxMzgKKzoxMEEzOTAwMEZDNDY2MDQ3MzQyMDlGRTUzQzMwOUZFNTAwMTBBMEUzNzkKKzoxMEEzQTAwMDAwMTA4MkU1MDAxMDgyRTUwMTEwQTBFMzAwMTA4M0U1QjMKKzoxMEEzQjAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1QkQKKzoxMEEzQzAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTFFRkYyRkUxRjgKKzoxMEEzRDAwMEY4MDAxODQwMDQwMTE4NDAwMDAxMTg0MEZDMDAxODQwMjMKKzoxMEEzRTAwMDgwQjUwMEYwMENGODAwMjczODFDMDBGMDQ3Rjg3ODFDMDYKKzoxMEEzRjAwMDA3MDQzRjBDMEMyRkY3REQ4MEJDMDhCQzE4NDcxRDQ4MzQKKzoxMEE0MDAwMDAyNjgxRDQ5OEI2OUQyMTgwMjYwMDI2NjhBNkE0MzY4MzUKKzoxMEE0MTAwMDlCMTg0MzYwOTM0MjAyRDI4MjY4MDEzMjgyNjBDMjY4MTQKKzoxMEE0MjAwMDBCNkFEMjE4QzI2MDQyNjlDQjY4RDIxODQyNjFDMjY5MTUKKzoxMEE0MzAwMDhCNjhEMjE4QzI2MTAyNjkwQjY5RDIxODAyNjE4MjY5MDUKKzoxMEE0NDAwMDBCNjhEMjE4ODI2MTAyNkJDQjY5RDIxODAyNjM0QTZBMjgKKzoxMEE0NTAwMDQzNkI5QjE4NDM2MzkzNDIwMkQyODI2QjAxMzI4MjYzNDcKKzoxMEE0NjAwMEMyNkI0QjY5RDIxOEMyNjMwMjZDQzk2QTUxMTgwMTY0OEQKKzoxMEE0NzAwMDcwNDcwMDAwQTQyQTAwODAwMDA4MTQ0MDg4QjU2OTQ2OEYKKzoxMEE0ODAwMDAwRjAxN0Y4ODEwODBBRDAwMDIwMDAyOTA3RDkwMDIyMUYKKzoxMEE0OTAwMDgzMDAwMDlGQzA0NkZBNTAwMTMwODg0MkY4RDM4OEJDNDAKKzoxMEE0QTAwMDA4QkMxODQ3MDBCNTAwRjAwNEY4MDAwNDAwMEMwOEJDMTQKKzoxMEE0QjAwMDE4NDcwMDIyMDAyODBBRDAwMTI4MEFEMDAyMjgwQ0QwMTAKKzoxMEE0QzAwMDAzMjgwMkQxMDc0ODFDMjIwODYwMTAxQzcwNDcwNjQ4NjgKKzoxMEE0RDAwMDA0RTAwNjQ4NTAyMjA4NjBGN0U3MDU0ODY4MjIwODYwNTMKKzoxMEE0RTAwMEYzRTcwMDAwMDg4MzIwNDBBNDJBMDA4MDBDMkIwMDgwQTIKKzoxMEE0RjAwMEEwODIyMDQwODBCNDAzMjJDMjgwMTU0QUMwNDY4MjYwRjgKKzoxMEE1MDAwMDE0NEExMjg4MDEzMkMyNjAwMDIwMTM0QTEzNUNDMDQ2MEMKKzoxMEE1MTAwMDBCNzAwMTMwMDEzMTA4MjhGOEQzMjAyMjBBNzAwMTMxNzQKKzoxMEE1MjAwMDAwMjAwRTRCMUY1Q0MwNDYwRjcwMDEzMDAxMzEwODI4MUYKKzoxMEE1MzAwMEY4RDMwQTcwMDEzMTAwMjAwOTRBMTM1Q0MwNDYwQjcwNDEKKzoxMEE1NDAwMDAxMzAwMTMxMDgyOEY4RDMwMDIwMDg3MDgwQkM3MDQ3MjIKKzoxMEE1NTAwMDA4MTAwMDAzNjgwRTAwODA3QzA0MDA4MDg1MDQwMDgwRTEKKzoxMEE1NjAwMDhFMDQwMDgwMDBCNTAxMjMwQTQ4QzExRDg5MzE0QjcwNUIKKzoxMEE1NzAwMDAwMjIwQTcwNjQyMTgwMzBDMTgyMDE4MzQzODM3RDIxREYKKzoxMEE1ODAwMEM5MDA4MTgzQzI4MzA0NDgwMTIyMDAyMTAwRjA4RUZCQjAKKzoxMEE1OTAwMDA4QkMxODQ3NjgwRTAwODBCNTIyRkZGRjAwQjVGRkY3MjIKKzoxMEE1QTAwMEUxRkYxMzQ4MDIyMjAwMjEwMEYwODBGQjAxMjNEODQyODIKKzoxMEE1QjAwMDBBRDExMDQ4QzExRDM5MzFDQTg4MDEzMkNBODA4MTc5NTcKKzoxMEE1QzAwMDAxMzE4MTcxRkRGNzcwRjkwQjQ4QzA2ODAxMjgwNUQxOTAKKzoxMEE1RDAwMDBBNDg3RDIyRDIwMDAwMjEwMEYwNjhGQjA4NDhGQkY3MDIKKzoxMEE1RTAwMEUxRkMwODQ4MjgyMjAwMjEwMEYwNjBGQjA4QkMxODQ3NjUKKzoxMEE1RjAwMDc5MjFGRkZGQTA4MjIwNDA2ODBFMDA4MEE1N0IyMTQwQ0EKKzoxMEE2MDAwMDk1MkNGRkZGNTkwM0ZGRkYwMEI1MTAyMDBGNDlDMDQ2RUUKKzoxMEE2MTAwMDA4NjAwRjRBMEY0ODY0MjFGQkY3QzZGQzBFNDgwMTIyNzAKKzoxMEE2MjAwMDEyMDQwMTY4MEE0MDA4MjEwMDJBMDVEMTAyNjgxMjBDQjAKKzoxMEE2MzAwMDA3RDEwMDY4ODAwQTA0RDMwODQ4QzA0NkMxNjAwOEJDM0UKKzoxMEE2NDAwMDE4NDcwNzQ4QzA0NjAxNjRGOUU3MDAwMDAwMDAwMEIwNjEKKzoxMEE2NTAwMEE1NTVGRkZGN0MyOTAwODAwMDAwMTA0MDQwMDExODAwMzQKKzoxMEE2NjAwMDAwMDAwMDgwRjhCNTI3NDgwMTIyMTIwNDAxNjgwQTQwNjIKKzoxMEE2NzAwMDA3MjEwMDJBMDVEMTAyNjgxMjBDMDZEMTAwNjg4MDBBNjEKKzoxMEE2ODAwMDAzRDMyMTQ4QzA0NkMxNjAwMkUwMjA0OEMwNDYwMTY0QUYKKzoxMEE2OTAwMDFGNDhGQkY3ODdGQzFGNDhDMTZCRkYyOUZDRDE4MTZCNkEKKzoxMEE2QTAwMDQyNkIxNjFDMEYxQzFDNEMxMDIzNjA2OTE4NDM2MDYxMjAKKzoxMEE2QjAwMEExNjk5OTQzMUQwNEExNjFFODYwQTA2OUMwNDYyODYxQjEKKzoxMEE2QzAwMDE2NEExNzQ5NjQyMEZCRjc2RkZDMTY0QUMwNDYwMDkyRjEKKzoxMEE2RDAwMDE1NEIwMDIwMzkxQzMyMUNGQkY3NkVGQzEzNDhDMTY4NzcKKzoxMEE2RTAwMDA4MjlGQ0QxMTI0OEZCRjc1REZDMTAyMzYwNjk5ODQzRjAKKzoxMEE2RjAwMDYwNjFFODYwMDEyMEUzMjMxQjAxRTExOEM4NzFGOEJDMjgKKzoxMEE3MDAwMDA4QkMxODQ3MDAwMDEwNDA0MDAxMTgwMDAwMDAwMDgwRkQKKzoxMEE3MTAwMDA0MDJGRkZGMDAwMTE4NDA2ODBFMDA4MDIwNTVGRkZGNzMKKzoxMEE3MjAwMEI1QjYyMTQwNjQwMDMwMDI0NDgwMjA0MDQwMDExODQwMEEKKzoxMEE3MzAwMEY0MDFGRkZGMDBCNUZERjcwMUZGMDY0OEZCRjczMkZDMEYKKzoxMEE3NDAwMEZERjdENkZFRkVGNzA0RjhGRUY3MTZGOEZFRjcyNEY4M0MKKzoxMEE3NTAwMDA4QkMxODQ3OTEwM0ZGRkY5MEI1RkRGNzZCRkMzNDRGMjEKKzoxMEE3NjAwMDAwMjRGOTY4RjgxRDc5MzAwMTI5MEZEMTMxNDlDMDQ2MUMKKzoxMEE3NzAwMEY5NjczMTQ5QzA0NjAxNjAzMDQ5QzA0NjBDNjA0QzYwMDEKKzoxMEE3ODAwMDhDNjBDQzYwMEM2MTRDNjE4QzYxMDRFMEY5MUQ3RDMxMDIKKzoxMEE3OTAwMEY5NjcxMkMwMDgzODAwNjg2MDIzMDE2ODE5NDMwMTYwMzYKKzoxMEE3QTAwMEY4NkYyMDIzMDE2ODE5NDMwMTYwRjg2RjQwMjMwMTY4QTYKKzoxMEE3QjAwMDk5NDMwMTYwMDBGMDU0RjhGREY3NEVGQzAwRjA1RUY5OUIKKzoxMEE3QzAwMEZERjc3M0Y4RkZGNzBDRkVGREY3MkVGRUZERjdCNkZENjMKKzoxMEE3RDAwMEZERjdDMkZFRkRGNzU0RkRGREY3MEFGREZERjc5NEZEMDAKKzoxMEE3RTAwMDAwRjAxQUZBRkRGNzlDRkZGREY3MEFGRkZERjdEMkZFMTUKKzoxMEE3RjAwMEZERjczQ0ZDRkJGN0RDRkFGRkY3OUNGRjcxMjM1QjAxRTQKKzoxMEE4MDAwMEY4MTgwNDcyNDQ3MjA3MjM1QjAyRjgxODA0NjNGODY4QUUKKzoxMEE4MTAwMDAxMjgwMkQxQTgyMEZFRjdCMUZEMDk0OEMwNDY0NDYyRDQKKzoxMEE4MjAwMDAwRjAxOEZBMDc0OEZCRjdCREZCOTBCQzA4QkMxODQ3QkUKKzoxMEE4MzAwMDY4MEUwMDgwMDAwMTExNDAwNDAxMTE0MDAwMDExMTAwNjgKKzoxMEE4NDAwMEMwMDAxODAwMTU4RjIxNDAwMEI1MDQ0OEZCRjdBQUZCOTMKKzoxMEE4NTAwMEZERjc1RUZGRkRGNzI0RkMwOEJDMTg0NzE1OTkyMTQwNjEKKzoxMEE4NjAwMEZBMjEwMzQ4QzA0NjQxNjI0MDIxNDE2MjcwNDcwMDAwMUUKKzoxMEE4NzAwMEMwMDAxODAwMDc0ODQxNjkwNzRCMTk0MzQxNjE4MjY5Q0MKKzoxMEE4ODAwMDlBNDM4MjYxMDEyMjEyMDVEMTYwODA2OUMwNDYxMDYxM0QKKzoxMEE4OTAwMDcwNDcwMDAwNjgwRTAwODBGRUFGOUExMDAwQjUwMjQ4QjUKKzoxMEE4QTAwMEZCRjc4MEZCMDhCQzE4NDdDODU3RkZGRkYwQjUyNDRDRTYKKzoxMEE4QjAwMDAxMjEwOTA0MjA2ODAxNDAwOTIwMjI0RTIyNEQwMDI5NkYKKzoxMEE4QzAwMDA1RDEyMTY4MDkwQzA0RDEyMTY4ODkwQTAxRDNGMDYwRkYKKzoxMEE4RDAwMDAwRTAyODY0MUQ0OEZCRjc2NUZCMUQ0RjFENDk4ODY5OTIKKzoxMEE4RTAwMDAxMzA4ODYxMzg3QTAwMjgwMkQxNzg3QTAwMjgxRkQwOTgKKzoxMEE4RjAwMDE5NDhGQkY3NTdGQjE5NDhGQkY3NTRGQjAwMjhGQUQxMUUKKzoxMEE5MDAwMDM4N0EwMDI4MDJEMDE2NDhGQkY3NENGQjAxMjEwOTA0RDUKKzoxMEE5MTAwMDIwNjgwMTQwMTQyMDAwMjkwNUQxMjE2ODA5MEMwNEQxQzgKKzoxMEE5MjAwMDIxNjg4OTBBMDFEM0YwNjAwMUUwMjg2NEZGRTdGRUU3QUYKKzoxMEE5MzAwMEZGRjc2NUZEMEI0OEZCRjczNUZCRkZGN0FGRkZDREU3RjIKKzoxMEE5NDAwMDAwMDAxMDQwNDAwMTE4MDAwMDAwMDA4MDA0MDJGRkZGREEKKzoxMEE5NTAwMDg4MUMwMDgwMDg4MzIwNDBGNDAxRkZGRkI1MDdGRkZGM0IKKzoxMEE5NjAwMDAwMDBGRkZGOTk5RjIxNDAwMDIwMDc0QTAxMjEwOTA1QUYKKzoxMEE5NzAwMDUwNjFDODYwRDA2MUM4NjEwMzIzREIwNDAzNEEwMTIxMzAKKzoxMEE5ODAwMEQxNjM1ODYwRkNFNzAwMDA2ODBFMDA4MEMwMDAxODAwMkEKKzoxMEE5OTAwMDgwQjVDMEIwMDEyMjAwMjEwQTIwRkNGN0QxRkYwNzFDQkUKKzoxMEE5QTAwMEZGMkYyOEQwNjk0NkZGMjIzODFDMDEzMkZERjc1NEY5RTkKKzoxMEE5QjAwMEZGMjMwMTMzOTg0MjFCRDEwRDk4MDAwOTE4RDMzODFDOEUKKzoxMEE5QzAwMEZERjc4REY4MEU0OTAxMjIxMjA0MDg2ODAyNDAwRDQ4NzcKKzoxMEE5RDAwMDA1RDEwQTY4MTIwQzA2RDEwOTY4ODkwQTAzRDMwQTQ5MEQKKzoxMEE5RTAwMEMwNDZDODYwMDJFMDA5NDlDMDQ2MDg2NEZGRjdCQ0ZGRTIKKzoxMEE5RjAwMDM4MUNGREY3NzRGODQwQjA4MEJDMDhCQzE4NDcwMDAwNTQKKzoxMEFBMDAwMDAwMDAxMDQwMDc4MDAwMDA0MDAxMTgwMDAwMDAwMDgwOTYKKzoxMEFBMTAwMDAwQjUxNzQ5MDEyMjEyMDQwODY4MDI0MDA2MjAwMDJBRTYKKzoxMEFBMjAwMDA1RDEwQTY4MTIwQzA2RDEwOTY4ODkwQTAzRDMxMTQ5QjUKKzoxMEFBMzAwMEMwNDZDODYwMDJFMDEwNDlDMDQ2MDg2NDAzMjBGRUY3MjMKKzoxMEFBNDAwMEQzRkNGQkY3MERGRjAxMjMxODQzRkJGN0U3RkZGRkY3RUMKKzoxMEFBNTAwMDgzRkVGRkY3OURGRkZGRjcwNUZFRkZGN0Y1RkVGRkY3MEIKKzoxMEFBNjAwMDA5RkZGRkY3OUJGREZGRjcyMUZGMDhCQzE4NDcwMDAwMTcKKzoxMEFBNzAwMDAwMDAxMDQwNDAwMTE4MDAwMDAwMDA4MEYwQjQ0NjRBNzkKKzoxMEFBODAwMDAxMjFDOTAzNDU0RDE5MjNEQjAxRUMxOEExNjEyODg4NzgKKzoxMEFBOTAwMDQwMDQ0MzRCQzAxODg3MUEwNDIwQUY2MDQxNEVDMDQ2QTMKKzoxMEFBQTAwMEIwNjEwODIwQzgyMzQzNDNCQjQyMjFEOTQxMDAzRDRFMzkKKzoxMEFBQjAwMEMwNDYzMTYxQjY2OTIwMjM5QjFCM0E0RUMwNDZGMzYxMDQKKzoxMEFBQzAwMDEwM0IzMzYyOEIwMEZGMUE0MDA4ODE0MjE3RDNCODIzMzIKKzoxMEFBRDAwMDQzNDNCQjQyMDhEOTQxMUUzMjRCQzA0Njk5ODFEOTgxQkMKKzoxMEFBRTAwMDQwMDAwMjM4NTg2MTBBRTAwMTMwODE0MkVGRDIwNkUwQUUKKzoxMEFBRjAwMDJDNEVCMzY5MDEzM0IzNjE0MDAwODg0MkQyRDkyQTQ5NTAKKzoxMEFCMDAwMDAwMjBBMzY5OUIwODA3RDAyODRCODcwMENCNTFBNzY5NzkKKzoxMEFCMTAwMEJGMDgwMTMwODc0MkY4RDgyMjQ5QzA0NjhBNjI4Qzg5MzIKKzoxMEFCMjAwMDU4MjA2MDQzODcxODAwMjAwMDIyMDAyQzBBREQ1ODIzOUIKKzoxMEFCMzAwMDQzNDM4QzZBRTMxODAxMzAwMDA0MDAwQzlBNjA4Qjg5NEYKKzoxMEFCNDAwMDgzNDJGNERDQ0Y2MkNDODk2MDAwMDAxOTQwMDFDNzE5NTAKKzoxMEFCNTAwMDAwMjAwMDJDMEJERDQzMDAxQjE4NUIwMUNDNkFFMzE4QkUKKzoxMEFCNjAwMDAxMzAwMDA0MDAwQzlBNjBDQjg5ODM0MkYzREM0RjYyMTEKKzoxMEFCNzAwMDAwMjAwQjY5MDAyQjA3RDk4NzAwNEI2QUMwNDZEQTUxQzkKKzoxMEFCODAwMDBCNjkwMTMwODM0MkY3RDg0OTZBODAwMDA4MTgwNDM4RkQKKzoxMEFCOTAwMDI4NjFGMEJDNzA0NzAwMDBCMEJFMjE0MDY4MEUwMDgwMDQKKzoxMEFCQTAwMDAwMDAyMDQwNEMyQTAwODAwMDAwMjA0MDAwQURERTAwNjQKKzoxMEFCQjAwMDBBNDgwMTIzMUIwNjQxNjk5OTQzMUEwOTQxNjFEMTYwODIKKzoxMEFCQzAwMDAwMjFBMTIyNTIwMzkxNjExQjIzREIwMUMwMTg4MTYxODYKKzoxMEFCRDAwMDAxMjAwMDA2NTkwNTA4NjA3MDQ3MDAwMDY4MEUwMDgwREIKKzoxMEFCRTAwMDgwQjQwMjFDMEI0ODFCMjNEQjAxQzMxODlBNjEwMTIzQUMKKzoxMEFCRjAwMDFCMDY0MjY5MUE0MzQyNjE4NzY5OUY0MzAxMjMxQjA1NzMKKzoxMEFDMDAwMDg3NjFEQTYwODA2OUMwNDYxODYxQTEyMDQwMDM4MTYxRDQKKzoxMEFDMTAwMDgwQkM3MDQ3NjgwRTAwODA4MEI1RkZGN0M5RkYwMDIwMzgKKzoxMEFDMjAwMDAwRjAyMEY4MDAyMDA5NDkwMDIyMDMwMTVGMTgzMzIzQjcKKzoxMEFDMzAwMDlCMDFGQjE4OUE2MjAxMzAwQjI4RjZEMzA0NDgwMTIyQ0QKKzoxMEFDNDAwMDAwMjEwMEYwMzNGODgwQkMwOEJDMTg0NzY4MEUwMDgwNzMKKzoxMEFDNTAwMDFEM0VGRkZGMDBCNTAyNDgwMEYwMDRGODA4QkMxODQ3OEQKKzoxMEFDNjAwMEE4NjEwMDAwODBCNDAxMjIxMjA1MEY0QkExMjE0OTAzMDUKKzoxMEFDNzAwMDAwMjgwRUQwQzg2MTE4MUM1OTY5NTMwMTE5NDM0MTYxNUQKKzoxMEFDODAwMDg3Njk5RjQzODc2MUQxNjA4MDY5QzA0NjEwNjE4MEJDM0QKKzoxMEFDOTAwMDcwNDcxODFDNUY2OTAxMjM1QjA2OUY0MzQ3NjFENzYwQkIKKzoxMEFDQTAwMDAwMjBDODYxRjNFNzAwMDA2ODBFMDA4MEIwQjQwNzFDMDQKKzoxMEFDQjAwMDAwMjAxNzRDMDMwMTFEMTkzMzIzOUIwMUVCMTg5RDZBREIKKzoxMEFDQzAwMEJENDIwNUQxMUQ2Qjk1NDIwMkQxREI2QThCNDIxQ0QwN0YKKzoxMEFDRDAwMDAxMzAwQjI4RUVEMzAwMjAwMzAxMUQxOTMzMjM5QjAxMDMKKzoxMEFDRTAwMEVCMTg5QjZBMDAyQjA5RDEwMzAxMUMxOTMzMjM5QjAxMkMKKzoxMEFDRjAwMEUzMTgxQTYzRDk2MjVBNjM5RjYyMDJFMDAxMzAwQjI4OUQKKzoxMEFEMDAwMEVBRDMwQjI4MDFEMTAwMjBDMDQzQjBCQzcwNDcwMDAwM0IKKzoxMEFEMTAwMDY4MEUwMDgwOTBCNDAxMUMwMDIyMDEyMDE2NEYwMUUwNTMKKzoxMEFEMjAwMDAwMkEwN0QxMDMwMURDMTkzMzIzOUIwMUUzMTg5QjY5MzcKKzoxMEFEMzAwMDhCNDIxMUQxMDIwMUQyMTkzMzIzOUIwMUQyMTg5MzZBOUQKKzoxMEFENDAwMEMwNDY5MzYxRDM2QUMwNDZEMzYxMTM2QkMwNDYxMzYyOTkKKzoxMEFENTAwMDUzNkJDMDQ2NTM2MjAxMjIwMTMwMEIyOEUwRDMwNzRCRUUKKzoxMEFENjAwMDAwMkEwMkQxOUE2ODhBNDIwM0QxMDAyMTk5NjA5MEJDREUKKzoxMEFENzAwMDcwNDcwMDIwQzA0M0ZBRTc2ODBFMDA4MEU4MUIwMDgwOUYKKzoxMEFEODAwMDBCMjgxN0RBMEM0OTAxMjM1QjA2OEE2OTEzNDMwMTIyNTkKKzoxMEFEOTAwMDEyMDU4QjYxMTM2MTAwMDE0MDE4MzMyMzlCMDFDMDE4MTkKKzoxMEFEQTAwMDAzNkJDMDQ2NDM2MzUzMDE4ODY5OTg0Mzg4NjExMDYxMEYKKzoxMEFEQjAwMDAxMjA3MDQ3MDAyMEZDRTc2ODBFMDA4MDkwQjQwODRBMkMKKzoxMEFEQzAwMEQwNjkwMDIxMDc0RkQzNjk4MzQyMDJEOUZDMUEyMDE4QTkKKzoxMEFERDAwMDAwRTBDMDFBMDkxODE4MUNCOTQyRjREOTkwQkM3MDQ3OTkKKzoxMEFERTAwMDAwMjAxNDQwQTg2MTAwMDA5MEI1MDcxQzAwMjQwMDJGMkIKKzoxMEFERjAwMDA0RDNGRkY3RTNGRjAxMzRCQzQyRkFEOTkwQkMwOEJDOEUKKzowNEFFMDAwMDE4NDcwMDAwRUYKKzowMDAwMDAwMUZGCisvKiB2ZXIgMDMuMDAxLjAwOCAqLworLyoKKyAqIENvcHlyaWdodCAxOTk5LTIwMDQgM0NvbSBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBvZiB0aGUgM2M5OTBpbWcuaAorICogbWljcm9jb2RlIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgM0NvbSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgM0NPTSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgUFVSQ0hBU0UgT1IgVVNFIE9GIFRIRSAzYzk5MGltZy5oCisgKiBNSUNST0NPREUgU09GVFdBUkUgV0lMTCBOT1QgQ1JFQVRFIE9SIEdJVkUgR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZCisgKiBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SIE9USEVSV0lTRSBJTiBBTlkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUworICogKFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQsIE1BU0sgV09SSywgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQpCisgKiBFTUJPRElFRCBJTiBBTlkgT1RIRVIgM0NPTSBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCisgKiBDT01CSU5BVElPTiBXSVRIIFRIRSAzYzk5MGltZy5oIE1JQ1JPQ09ERSBTT0ZUV0FSRQorICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDQ2NjEwNmYuLmM2YWY2MWIgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0zNSw3ICszNSw3IEBACiBmdy1zaGlwcGVkLSQoQ09ORklHX0NPTVBVVE9ORSkgKz0gaW50ZWxsaXBvcnQyLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19DSEVMU0lPX1QzKSArPSBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluIFwKIAkJCQkgICBjeGdiMy90M2NfcHNyYW0tMS4xLjAuYmluIFwKLQkJCQkgICBjeGdiMy90M2Z3LTcuMC4wLmJpbgorCQkJCSAgIGN4Z2IzL3QzZnctNy4xLjAuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0RWQl9UVFVTQl9CVURHRVQpICs9IHR0dXNiLWJ1ZGdldC9kc3Bib290Y29kZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRTEwMCkgKz0gZTEwMC9kMTAxbV91Y29kZS5iaW4gZTEwMC9kMTAxc191Y29kZS5iaW4gXAogCQkJICAgICBlMTAwL2QxMDJlX3Vjb2RlLmJpbgpAQCAtNDksOCArNDksMTAgQEAKIAkJCQkgICAgIHNiMTYvaW1hX2FkcGNtX2NhcHR1cmUuY3NwCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9ZTUZQQ0kpICs9IHlhbWFoYS9kczFfY3RybC5mdyB5YW1haGEvZHMxX2RzcC5mdyBcCiAJCQkJICAgeWFtYWhhL2RzMWVfY3RybC5mdworZnctc2hpcHBlZC0kKENPTkZJR19URUhVVEkpICs9IHRlaHV0aS9iZHguYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1RJR09OMykgKz0gdGlnb24vdGczLmJpbiB0aWdvbi90ZzNfdHNvLmJpbiBcCiAJCQkgICAgICAgdGlnb24vdGczX3RzbzUuYmluCitmdy1zaGlwcGVkLSQoQ09ORklHX1RZUEhPT04pICs9IDNjb20vdHlwaG9vbi5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfVVNCX0RBQlVTQikgKz0gZGFidXNiL2Zpcm13YXJlLmZ3IGRhYnVzYi9iaXRzdHJlYW0uYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1VTQl9FTUkyNikgKz0gZW1pMjYvbG9hZGVyLmZ3IGVtaTI2L2Zpcm13YXJlLmZ3IFwKIAkJCQkgIGVtaTI2L2JpdHN0cmVhbS5mdwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvV0hFTkNFIGIvZmlybXdhcmUvV0hFTkNFCmluZGV4IDUyNDExM2YuLjAwYjZlM2MgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL1dIRU5DRQorKysgYi9maXJtd2FyZS9XSEVOQ0UKQEAgLTM2OCw3ICszNjgsNyBAQAogCiBGaWxlOiBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluLmloZXgKIEZpbGU6IGN4Z2IzL3QzY19wc3JhbS0xLjEuMC5iaW4uaWhleAotZmlsZTogY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleAorZmlsZTogY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleAogCiBMaWNlbnNlOiBHUEx2MiBvciBPcGVuSUIub3JnIEJTRCBsaWNlbnNlLCBubyBzb3VyY2UgdmlzaWJsZQogCkBAIC00MzUsMyArNDM1LDYxIEBACiAgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IFRFSFVUSSAtIFRlaHV0aSBOZXR3b3JrcyAxMEcgRXRoZXJuZXQKKworRmlsZTogdGVodXRpL2JkeC5iaW4KKworTGljZW5jZToKKworIENvcHlyaWdodCAoQykgMjAwNyBUZWh1dGkgTmV0d29ya3MgTHRkLgorCisgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgYWNjb21wYW55aW5nIGl0LgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IFRZUEhPT04gLSAzY3I5OTAgc2VyaWVzIFR5cGhvb24KKworRmlsZTogM2NvbS90eXBob29uLmJpbgorCitMaWNlbmNlOgorLyoKKyAqIENvcHlyaWdodCAxOTk5LTIwMDQgM0NvbSBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBvZiB0aGUgM2M5OTBpbWcuaAorICogbWljcm9jb2RlIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgM0NvbSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgM0NPTSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgUFVSQ0hBU0UgT1IgVVNFIE9GIFRIRSAzYzk5MGltZy5oCisgKiBNSUNST0NPREUgU09GVFdBUkUgV0lMTCBOT1QgQ1JFQVRFIE9SIEdJVkUgR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZCisgKiBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SIE9USEVSV0lTRSBJTiBBTlkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUworICogKFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQsIE1BU0sgV09SSywgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQpCisgKiBFTUJPRElFRCBJTiBBTlkgT1RIRVIgM0NPTSBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCisgKiBDT01CSU5BVElPTiBXSVRIIFRIRSAzYzk5MGltZy5oIE1JQ1JPQ09ERSBTT0ZUV0FSRQorICovCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4IGIvZmlybXdhcmUvY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2MTE3OS4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTg4MSArMCwwIEBACi06MTAwMDAwMDA2MDAwNzQwMDIwMDM4MDAwMjAwMzcwMDAwMDAwMTAwMEQ2Ci06MTAwMDEwMDAwMDAwMjAwMEUxMDAwMjg0MDAwNzAwMDBFMTAwMDI4OEU3Ci06MTAwMDIwMDAwMDAxMDAwMEUwMDAwMDAwRTAwMDAwQTAwMTAwMDAwMDZFCi06MTAwMDMwMDA0NDQ0NDQ0MEUzMDAwMTgzMjAwMjAwMDAyMDAxRTAwMDJBCi06MTAwMDQwMDAyMDAxRkYxMDFGRkZEMDAwMUZGRkMwMDBFMzAwMDQzQzkxCi06MTAwMDUwMDAwMjAwMDAwMDIwMDA2OTU0MUZGRkM1ODAyMDAwNjk5QzM5Ci06MTAwMDYwMDAxRkZGQzU4NDIwMDA2OURDMUZGRkM1ODgyMDAwNkE1MDdGCi06MTAwMDcwMDAxRkZGQzU4QzIwMDAwM0MwQzAwMDAwRTQzMTAwRUEzMTNFCi06MTAwMDgwMDAwMEExMzEwMEEwMzEwMzAyMDAwMkVEMzA2RTJBMDUwMDBDCi06MTAwMDkwMDBFRDMxMDAwMjAwMDIxNjAwMTJGRkRCQzAzMDE0RkZEQTVGCi06MTAwMEEwMDBEMzBGRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzQ3Ci06MTAwMEIwMDAwRkQzMEZEMzBGMTJGRkQ1MjMwQTAwMjQwQTAwRDMwRjRBCi06MTAwMEMwMDBEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzMEZEMzI3Ci06MTAwMEQwMDAwRkQzMEYxNEZGQ0UwMzQyMUYxNEZGQ0IwMzQyMUYxMjk2Ci06MTAwMEUwMDBGRkNDQzAzMDJEMzczMDJEMzczNDJEMzczODJEMzczQ0VECi06MTAwMEYwMDAyMzNEMDE3MjMzRUQwMDAyMDAxMkZGQzRDMDMwMkYzN0UwCi06MTAwMTAwMDAwMDJGMzcxMDJGMzcyMDJGMzczMDIzM0QwMTcyMzNFRDZBCi06MTAwMTEwMDAwMDAyMDAxMkZGQkVDMDMwMjczNzAwMjczNzEwMjczN0Y0Ci06MTAwMTIwMDAyMDI3MzczMDIzM0QwMTcyMzNFRDAzMDIwMDEyRkZCOTVGCi06MTAwMTMwMDAxM0ZGQkEwQzAyMDA5MzIwMTJGRkI5MTNGRkI5MEMwMjhGCi06MTAwMTQwMDAwMDkzMjAxMkZGQjhDMDMxOTMyMDgyMjAxMkZGQjcxMzEyCi06MTAwMTUwMDBGRkI3OTMyMDEyRkZCNzE1RkZCMzE2RkZCNkMwMzBENzE1Ci06MTAwMTYwMDAyMDA1NjYwMTYwMDAxQjAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTAwMTcwMDAwNDM2MDUwMDAyMDBEMzBGRDMwRjc1MzExNDA3NDcxNDVFCi06MTAwMTgwMDAwNTMzMEMwNzA0NDM3NjMxRTYwNDM2MDU3NTM5RUQwMDc2Ci06MTAwMTkwMDAwMjAwMTJGRkE3MTVGRkEzQzAzMEQ3MjA2MDAwMDYwMEExCi06MTAwMUEwMDAwNzQ3MTQwNTMzMEMwNzA0NDMwNDNFMDU3NTM5RjAwMzczCi06MTAwMUIwMDAwMjAwMTJGRkExQzAzMDE0RkZBMUQzMEZEMzBGRDMwRjQxCi06MTAwMUMwMDA5MzQwQjQ0NDcyNDlGMkQzMEZEMzBGRDMwRjE0RkY5QjYzCi06MTAwMUQwMDA4MzQwMTRGRjlCODM0MDEyRkY5QjIzMEEwMDE0RkY5QTY1Ci06MTAwMUUwMDBEMzBGRDMwRkQzMEY5MzQwQjQ0NDcyNDlGMkQzMEZEMzNDCi06MTAwMUYwMDAwRkQzMEYxNEZGOTU4MzQwMTJGRjk1Q0EyMDgzMjA4NEVDCi06MTAwMjAwMDAyMTg1MjJCQzIyNzQzQjEwODY1MEI0NTU5NjMwQjQzM0ZECi06MTAwMjEwMDA3NDMzRjQ2M0ZGRTYwMDAwMDA2NTNGRTA2NTVGREQxMkM0Ci06MTAwMjIwMDBGRjdDQzAzMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0Q0NGCi06MTAwMjMwMDAyMzNEMDE3MjMzRUQwMzAyMDAwMDAyMDAxMkZGN0FDMDc5Ci06MTAwMjQwMDAzMjAzMkUwNTAzMDIwMDEyRkY3ODEzRkY4MTkzMjBDMEIyCi06MTAwMjUwMDAxMTAxNDkzMTAwNDgzMTAxMDIwMEMwMDAxNEZGN0UwNDQxCi06MTAwMjYwMDBEMjMxMTVGRjdEOTQ1MDE0RkY3RDA0RDMzMTE1RkY3Q0VFCi06MTAwMjcwMDA5NDUwMTRGRjdDMDRENDMxMTVGRjdDMjQ1NjAwMTRGRkU1Ci06MTAwMjgwMDA3QjA0RDUzMTE1RkY3QjI0NTYwMDEwRkY3QTAzMDAwMDU0Ci06MTAwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTAwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTAwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTAwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTAwMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTAwMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTAwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTAwMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTAwMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTAwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTAwM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTAwM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTAwM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTAwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTAwNDIwMDA2M0ZGRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMEExCi06MTAwNDQwMDAxRkZDMDAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEFCCi06MTAwNDUwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBFMzAwMDVDODA2Ci06MTAwNDYwMDAxRkZGQzAwMDFGRkZDMDAwRTMwMDA1QzgxRkZGQzAwMDQyCi06MTAwNDcwMDAxRkZGQzAxOEUzMDAwNUM4MUZGRkMwMTgxRkZGQzAxOEVBCi06MTAwNDgwMDBFMzAwMDVFMDFGRkZDMDE4MUZGRkMyODhFMzAwMDVFMDdFCi06MTAwNDkwMDAxRkZGQzI4ODFGRkZDMjg4RTMwMDA4NTAxRkZGQzI5MEUxCi06MTAwNEEwMDAxRkZGQzU3Q0UzMDAwODUwMjAwMDAwMDAyMDAwMDE2QTA3Ci06MTAwNEIwMDBFMzAwMEIzQzIwMDAwMTgwMjAwMDAxODBFMzAwMENBODM5Ci06MTAwNEMwMDAyMDAwMDIwMDIwMDAwMjAzRTMwMDBDQTgyMDAwMDIxQzEwCi06MTAwNEQwMDAyMDAwMDIyMEUzMDAwQ0FDMjAwMDAyMjAyMDAwMDIyNkI1Ci06MTAwNEUwMDBFMzAwMENCMDIwMDAwMjNDMjAwMDAyNDBFMzAwMENCODA2Ci06MTAwNEYwMDAyMDAwMDI0MDIwMDAwMjQ5RTMwMDBDQkMyMDAwMDI0QzE2Ci06MTAwNTAwMDAyMDAwMDI1MEUzMDAwQ0M4MjAwMDAyNTAyMDAwMDI1OUQ1Ci06MTAwNTEwMDBFMzAwMENDQzIwMDAwMjVDMjAwMDAyNjBFMzAwMENEODU5Ci06MTAwNTIwMDAyMDAwMDI2MDIwMDAwMjY5RTMwMDBDREMyMDAwMDI2QzY1Ci06MTAwNTMwMDAyMDAwMDI3MEUzMDAwQ0U4MjAwMDAyNzAyMDAwMDI3OTI1Ci06MTAwNTQwMDBFMzAwMENFQzIwMDAwMjhDMjAwMDAyOENFMzAwMENGODhECi06MTAwNTUwMDAyMDAwMDI5MDIwMDAwMjkzRTMwMDBDRjgyMDAwMDJBQzdGCi06MTAwNTYwMDAyMDAwMDJCMEUzMDAwQ0ZDMjAwMDAyRDAyMDAwMDJGMkM4Ci06MTAwNTcwMDBFMzAwMEQwMDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQyNEQxCi06MTAwNTgwMDAyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMjQyMDAwMDNCMERFCi06MTAwNTkwMDAyMDAwMDNCMEUzMDAwRDI0MjAwMDAzQjAyMDAwMDNCMENFCi06MTAwNUEwMDBFMzAwMEQyNDIwMDAwM0IwMjAwMDZCNzRFMzAwMEQyNDUxCi06MTAwNUIwMDAyMDAwNkI3NDIwMDA2Qjc0RTMwMDc0RTgwMDAwMDAwMEZFCi06MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDAxRkZDMDAwMEY1Ci06MTAwNUQwMDAxRkZGQzU4MDFGRkZDNjcwMjAwMDZCNzgyMDAwNkI3ODVFCi06MTAwNUUwMDBERUZGRkUwMDAwMDAwODBDREVBREJFRUYxRkZGQzI5MDc0Ci06MTAwNUYwMDAxRkZDRkUwMDFGRkZDMDg0MUZGRkM1QzAzMDAwMDAwMEFECi06MTAwNjAwMDAwMDNGRkZGRjgwNDAwMDAwMTAwMDAwMDAwODBGRkZGRkM4Ci06MTAwNjEwMDAxRkZGQzI1RDAwMEZGRkZGODA0RkZGRkY4MDAwMDAwMDQzCi06MTAwNjIwMDAwMDAwMDg4MEIwMDAwMDA1NjA1MDAwMDA2MDAwMDAwMDdECi06MTAwNjMwMDA0MDAwMDAxMTM1MDAwMDAwNDEwMDAwMDAxMDAwMDAwMUUyCi06MTAwNjQwMDAyMDAwMDAwMDAwMDAxMDAwN0ZGRkZGRkY0MDAwMDAwMEJFCi06MTAwNjUwMDAwNTAwMDAwMDgwMDAwMDE5MDQwMDAwMDAwMDAwMDgwMEYwCi06MTAwNjYwMDAxMDAwMDAwNTgwNjAwMDAwNzAwMDAwMDAyMDAwMDAwOUZDCi06MTAwNjcwMDAwMDFGRjgwMDgwMDAwMDFFQTAwMDAwMDBGODAwMDAwMDJECi06MTAwNjgwMDAwODAwMDAwMDA3RkZGRkZGMTgwMDAwMDAwMTAwODAwMUM0Ci06MTAwNjkwMDA0MjAwMDAwMDFGRkZDMjBEMUZGRkMwQ0MwMDAxMDA4MDAwCi06MTAwNkEwMDA2MDQwMDAwMDFBMDAwMDAwMEMwMDAwMDAwMDAwMzAwMDU0Ci06MTAwNkIwMDA2MDAwMDgwMDgwMDAwMDFDMDAwMTAwMDA4MDAwMDAxQTlCCi06MTAwNkMwMDA4MDAwMDAxOEZDMDAwMDAwODAwMDAwMDEwMDAwNDAwMEQ1Ci06MTAwNkQwMDA4MDAwMDQwMDAzMDAwMDAwNTAwMDAwMDNGRkZGQkZGRjg0Ci06MTAwNkUwMDAwMDAwMEZGRjFGRkZDMzkwRkZGRkYwMDAwMDAwMTZEMEI3Ci06MTAwNkYwMDAwMDAwRkZGN0E1MDAwMDAwMUZGRkM0QTAxRkZGQzQ1MUFBCi06MTAwNzAwMDAwMDAxMDAwODAwMDAwQjIwMjAyRkZGODAxRkZGQzQ0NUMwCi06MTAwNzEwMDAwMDAwMkMwMEZGRkVGRkY4MDBGRkZGRkYxRkZGQzU2ODcxCi06MTAwNzIwMDAwMDAwMjAwMEZGRkZERkZGMDAwMEZGRUYwMTAwMTEwMENECi06MTAwNzMwMDAxRkZGQzQ2MTFGRkZDM0MyMUZGRkM0MTAxRkZGQzU5MDZFCi06MTAwNzQwMDBGRkZGRUZGRjAwMDBGRkZCMUZGRkJFOTBGRkZGRjdGRjYzCi06MTAwNzUwMDAxRkZGQzA1NDAwMDBGRkZEMDAwMUZCRDAxRkZGQzVCMDBDCi06MTAwNzYwMDAxRkZGQzY2MDFGRkZDNTkxRTBGRkZFMDAwMDAwODAwMDc0Ci06MTAwNzcwMDAxRkZGQzUyQzFGRkZDNUI0MUZGRkMwNTgxRkZGQzREMEVCCi06MTAwNzgwMDAxRkZDRkZEODAwMDEwMDgxRTEwMDA2MDAwMDAwMjcxMEQ3Ci06MTAwNzkwMDAxRkZDRkUzMDFGRkNGRTcwRTEwMDAyMDAxRkZGQzUyODk5Ci06MTAwN0EwMDAxRkZGQzU0MDAwMDNEMDkwMUZGRkM1NTQyQjUwNjM4MDJFCi06MTAwN0IwMDAyQjUwNzk4MDJCNTA5MDgwMkI1MEE2ODAxRkZGQzQ1OTVFCi06MTAwN0MwMDAwMTAwMTEwRjIwMkZGRTAwMjAzMDAwODAyMDJGRkYwMDlECi06MTAwN0QwMDAwMDAwRkZGRjAwMDFGRkY4MkI1MEIyMDAyQjUwQjIwOEMxCi06MTAwN0UwMDAwMDAxMDAxMDJCNTBCMTgwMkI1MEIyODAyQjUwQkEwMDZBCi06MTAwN0YwMDAwMDAxMDAxMTJCNTBCRDI4MkI1MEJDODAyQjUwQkRBMEY4Ci06MTAwODAwMDAyMDMwMDAwMERGRkZGRTAwNTAwMDAwMDIwMEMwMDAwMEFBCi06MTAwODEwMDAwMjAwMDAwMEZGRkZGN0Y0MUZGRkMwNUMwMDBGRjgwMEFDCi06MTAwODIwMDAwNDQwMDAwMDAwMTAwMDAwMEM0MDAwMDAxQzQwMDAwMENDCi06MTAwODMwMDBFMDAwMDBBMDFGRkZDNTMwMUZGRDAwMDgxRkZGQzU0NERBCi06MTAwODQwMDAxRkZGQzU1ODFGRkZDNTZDRTEwMDA2OTBFMTAwMDZFQ0Q0Ci06MTAwODUwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTAwODYwMDAyMDEwMDA0MDIwMTAwMDQwMjAxMDAwNDAyMDE0MDA4MDg0Ci06MTAwODcwMDAyMDBDMDAwMDIwMEMwMDAwMjAwQzAwMDAyMDEwMDA0MDg0Ci06MTAwODgwMDAyMDE0MDA4MDIwMTQwMDgwMjAxNDAwODAyMDE4MDBDMDU0Ci06MTAwODkwMDAyMDFDMDEwMDIwMUMwMTAwMjAxQzAxMDAyMDIwMDE0MDIwCi06MTAwOEEwMDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzAyMDFDMDEwMDIzCi06MTAwOEIwMDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzAyMDFDMDEwMDEzCi06MTAwOEMwMDAyMDIwMDE0MDIwMjAwMTQwMjAyMDAxNDAyMDIwMDk0MDFDCi06MTAwOEQwMDAyMDIwMDk0MDIwMjAwOTQwMjAyMDA5NDAyMDI0MDk4MEIwCi06MTAwOEUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDE0Ci06MTAwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTAwOTAwMDAyMDAwNTI1NDIwMDA1MTI0MjAwMDUyNTQyMDAwNTI1NDAwCi06MTAwOTEwMDAyMDAwNTA2MDIwMDA1MDYwMjAwMDUwNjAyMDAwNEU5NDY1Ci06MTAwOTIwMDAyMDAwNEU5NDIwMDA0RThDMjAwMDRERkMyMDAwNENBMDU2Ci06MTAwOTMwMDAyMDAwNEE4ODIwMDA0ODg4MDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAwOTQwMDAyMDAwNTIyNDIwMDA1MEYwMjAwMDUxOTQyMDAwNTE5NEE3Ci06MTAwOTUwMDAyMDAwNEYzODIwMDA0RjM4MjAwMDRGMzgyMDAwNEYzOEZCCi06MTAwOTYwMDAyMDAwNEYzODIwMDA0RTg0MjAwMDRGMzgyMDAwNEJDNDE4Ci06MTAwOTcwMDAyMDAwNEEzQzIwMDA0ODM4MDAwMDAwMDAwMDAwMDAwMDMxCi06MTAwOTgwMDAyMDAwMEI3MDIwMDAzODRDMjAwMDA0QzAyMDAwNDQyQ0I0Ci06MTAwOTkwMDAyMDAwMEI2ODIwMDAzRjQwMjAwMDAzRjAyMDAwNDNFQ0MzCi06MTAwOUEwMDAyMDAwNDgxNDIwMDAzQzUwMjAwMDNCNkMyMDAwMzdDODM5Ci06MTAwOUIwMDAyMDAwMzY1NDIwMDAzM0NDMjAwMDJFRjgyMDAwMzlDQzAzCi06MTAwOUMwMDAyMDAwMkI1QzIwMDAyNzk0MjAwMDY0OEMyMDAwMjMyMDMyCi06MTAwOUQwMDAyMDAwMjAwNDIwMDAxRkI4MjAwMDFDQTQyMDAwMTdCMDE1Ci06MTAwOUUwMDAyMDAwMTRGMDIwMDAwRDhDMjAwMDBCQjQyMDAwMTBCQzVGCi06MTAwOUYwMDAyMDAwMTJBMDIwMDA0MTMwMjAwMDNDMDQyMDAwMEI3ODkxCi06MTAwQTAwMDAyMDAwMDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTAwQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTAwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTAwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTAwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTAwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTAwQTgwMDAwMDAwMDAwMDMyNjQwMDAwMDAwMDAwMDAzMjY0MDAwMDNBCi06MTAwQTkwMDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDM2Ci06MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTAwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTAwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMEY2Ci06MTAwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTAwQjAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAwQjEwMDAwMDAwMDAwMDAwNDMyMzgwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTAwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDOTQwMUM0Ci06MTAwQjQwMDA1RDk0MDI1RTk0MDM1Rjk0MDA0MzAwMDAwMDAwMDAwMDg3Ci06MTAwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTAwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDOTAwMTg4Ci06MTAwQjgwMDA1RDkwMDI1RTkwMDM1RjkwMDA1MzAwMDAwMDAwMDAwMDQzCi06MTAwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTAwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDOTQwMDA1Ci06MTAwQkMwMDAxRDkwMDE5RDk0MDI5RTk0MDM5Rjk0MDQwODk0MDUwOTJFCi06MTAwQkQwMDA5NDA2MEE5NDA3MEI5NDAwNDMwMDAwMDAwMDAwMDAwMEY0Ci06MTAwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTAwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDOTAwMUM4Ci06MTAwQzAwMDA5RDkwMDI5RTkwMDcxRDkwMDM5RjkwMDQ3ODkwMDU3OTE3Ci06MTAwQzEwMDA5MDA2N0E5MDA3N0I5MDAwNTMwMDAwMDAwMDAwMDAwMENGCi06MTAwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTAwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDOTQwMDQ0Ci06MTAwQzQwMDAxRDkwMDFERDk0MDJERTk0MDNERjk0MDQwNDk0MDUwNUY1Ci06MTAwQzUwMDA5NDA2MDY5NDA3MDc5NDA4MDg5NDA5MDk5NDBBMEE5NENDCi06MTAwQzYwMDAwQjBCOTQwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTAwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDOTAwMTA3Ci06MTAwQzgwMDBERDkwMDJERTkwMEIxRDkwMDNERjkwMDRCNDkwMDVCNTVCCi06MTAwQzkwMDA5MDA2QjY5MDA3Qjc5MDA4Qjg5MDA5Qjk5MDBBQkE5MDM0Ci06MTAwQ0EwMDAwQkJCOTAwMDUzMDAwMDAwNjNGRkZDMDAyMDAwNjkzMDg0Ci06MTAwQ0IwMDAxMEZGRkYwQTAwMDAwMDAwMjAwMDY5NTQwMEQyMzExMDJDCi06MTAwQ0MwMDBGRkZFMEEwMDAwMDAwMDAwMjAwMDY5OUMwMEQzMzExMEU0Ci06MTAwQ0QwMDBGRkZFMEEwMDAwMDAwMDAwMjAwMDY5REMwMEQ0MzExMDkzCi06MTAwQ0UwMDBGRkZFMEEwMDAwMDAwMDAwMjAwMDZBNTAwMEQ1MzExMDBECi06MTAwQ0YwMDBGRkZFMEEwMDAwMDAwMDAwNjNGRkZDMDBFMDAwMDBBMDBGCi06MTAwRDAwMDAxMkZGRjc4MjIwMDI4MjU3QzgyMTYzRkZGQzEyRkZGMzEzCi06MTAwRDEwMDAwM0U4MzAwNEVFMzAwNUMwMzA5MzIwOTQyMTk1MjI2MzFGCi06MTAwRDIwMDBGRkZDMDAwMDFGRkZEMDAwMDAwNDAwMjAxRkZGQzU4MDUzCi06MTAwRDMwMDAxRkZGQzY3MDIwMEEwMDExRkZGQjEzRkZGQjAzRTYzMTAzCi06MTAwRDQwMDAwMTAyMDAxNkZGRkExN0ZGRkFEMzBGNzc2QjA2OTA2MEM3Ci06MTAwRDUwMDBCNDY2Nzc2M0Y4NTQxNTI2NTQxOUQ5MEYxNDAwNjNGRjRECi06MTAwRDYwMDBGOTAwMDAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDZDMDA4Ci06MTAwRDcwMDBDNzFBRUYwNjBENDkxMUQ4MzBENzIwMUJFRjA1QkMyMjRBCi06MTAwRDgwMDA4NTcyQUI3NjgzNzEwNTQ1MEI5NTcyMDkzMzBDMjM3NjFBCi06MTAwRDkwMDAwMTcyM0IwNTIzM0QwODIzNzYwMUEzOUQxOUVFRkU3RERDCi06MTAwREEwMDA2MzI2QzAyMUMwRTAwMzJFMzgwRTBFNDJDOEVFMjlBNkVECi06MTAwREIwMDA3RTZENEEwNTAwODA4ODAwMzA4QzgyNzFEMTBGQzBGMEIyCi06MTAwREMwMDAwODJGMzg3RkMwRUE2M0ZGRTQ5MjEwMDM3RjBDQUJGRjZCCi06MTAwREQwMDAwRjNEMTJEQjgwMkVEQzEwMEU0RTM2QzAyMUMwNTAwM0JBCi06MTAwREUwMDAyNTM4MjIxMjAwMDUwNTQyQ0I1MDI5QTY3RTZERUEwNTYyCi06MTAwREYwMDAwMEIwODgwMDMwOENCQzc2QzA1MEE4RjNDMDgxMDY4NTU2Ci06MTAwRTAwMDAzODA1MDU0MkNBNTEyOUE2N0UwRDQ4MENEMzBGNkQ4QUJDCi06MTAwRTEwMDAwNTAwMzA4ODAwMjA4QzgyNzFEMTBGMDBDMDYxQzA1MDY1Ci06MTAwRTIwMDAwODY1Mzg3NUMwQzY2M0ZGQzBDMEIwMDM4QjM4N0JDMDhGCi06MTAwRTMwMDBENzYzRkZEMTZDMTAxMjE2RUVEODJBMjIxRTJFMjIxRDY3Ci06MTAwRTQwMDBDMEQwN0FFMTFCMkNBMDAwRDdBMDI4Q0NFOTY0ODE0ODRGCi06MTAwRTUwMDAyOUNDRTg2NDkzNDFDMUI5N0JDMTI1NjlDQzFCNjAwMEYyCi06MTAwRTYwMDAyMjJDRDAwMEQ3RDAyOENDRTk2NDgxNTQyOUNDRTg2NDY2Ci06MTAwRTcwMDA5M0JBQzFCOTdCQzEwOTY4Q0MwOUMwMjBEMTBGMDAwMDY5Ci06MTAwRTgwMDAwMDJEMjUwMjhDMzJDMDkwMEM2RjUwNjVGNTg2MjkyNDA4Ci06MTAwRTkwMDA2NzA5MDg0NzY1ODU4MkI0NDkyNzIwMEMxOEVFQzAwQzA1Ci06MTAwRUEwMDA3RjExQThGRjI4RjI4NkRCNzA3ODkzMDI2MDA1NTQxOTQxCi06MTAwRUIwMDBFRUJDMDk3OTBBMjk5MkEzNjg5MDA4MjgyMjAwMDk4OEMzCi06MTAwRUMwMDAwQzY1ODUzRjI5RjI4NTY0OTUzOTI5MTYxQTY1NTU2M0E1Ci06MTAwRUQwMDA3QUUxMDREQkEwNjAwMDAxQzBCMDIyMTYxQjhEQjQxMkMxCi06MTAwRUUwMDBFRUIxMEQ4ODE0ODIyNDBEMEQ0N0E4MjIxOEVFQUYwOTJCCi06MTAwRUYwMDBERDEwMDgyMjAyOTI5MDE4RUVBRDEyRUVBRTA4QzgwMTg1Ci06MTAwRjAwMDAwRDg4MDIwMjQyMDIxREVFQUE5MjkxMEQ4ODAyOTg5MjZCCi06MTAwRjEwMDAyMkIwMjMyREIwMjIwNDI4MTAwNkREMTAwMjQyMTIwODUwCi06MTAwRjIwMDBERDAyMjhCMDIxMDcyMjEwMEM4ODEwMDI4ODAyMEQ4OEVCCi06MTAwRjMwMDAwMjEyRUVBMThEMzMwMkREMDE4MjM0MEQ4ODAyOTg5M0Y2Ci06MTAwRjQwMDA5MkI5OTI5NDhEQjU4MjM5OUQ5NTg4QjY4RDM4OTg5NkQwCi06MTAwRjUwMDA4OEI3OTI5OTlEOTg5ODk3QzBEMDI4RjI4NTEyRUU5N0ZECi06MTAwRjYwMDAwODQ4MEJBMjcyMkQyNENGMjhGNjg1MjIxMjFCNjU1NDQ3Ci06MTAwRjcwMDBERTdBRTEwNERCQTA2MDAwMDFDMEIwNjRCRUZCMkNCMEVGCi06MTAwRjgwMDAwNzI4QjAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MERFCi06MTAwRjkwMDAwMERCQTA2NUFGRTc2M0ZFRTAyRUEwMDMyQjIwNjdEOTNFCi06MTAwRkEwMDBFMEQ0RTA2NUIxQUI4QjMyMEJGQzUwNjRDNEIyMThFRUY4Ci06MTAwRkIwMDA4NDhGMkEwOEI4MDEwOEZGMEM2NEYyQ0RDMDkyNjAwMTRBCi06MTAwRkMwMDA4QTJBRDAwMzI5MjA2N0Q0QTA2NTk0Qzk4QjMyMEJGQ0YwCi06MTAwRkQwMDA1MDY0QzQ4QzFGRUU3QjhFMkEwRkJGMDE3RkU5REM4QzJFCi06MTAwRkUwMDAzMzBDRTg1MDY0ODRCNEMwQjAwQ0E1MTE4RjU5MkIxNjkzCi06MTAwRkYwMDAxMjhBNTc4RTU4MkExNjExREJFMEFBRkE3RkFCMDFCMThDCi06MTAxMDAwMDBFQjc1Q0U1OTlFMUY4OTM3OTUxQ0FGOTg5ODFENzk4QjJCCi06MTAxMDEwMDAwODI1MTYwQzI5RUMwMTI5MTYwRjlBMTY4QTFEODUxRjIyCi06MTAxMDIwMDAyQTE2MTkyQTBBMDA3QkUzMEE3QkU5MDUyQjEyMDY3RkEwCi06MTAxMDMwMDBCQjAxQzBBMTY1QTQ2OThCMzVDMEEwQzA4MDc4RTMwNDYyCi06MTAxMDQwMDA2NEUzQjVDMEExNjVBNDU4ODkxQzI5MTYxNzBDNEE1NDNECi06MTAxMDUwMDAyQTE2MTZCQ0FBMkExNjE4NjAwMEFGMDAwMDAwODgzN0FFCi06MTAxMDYwMDA4OTM2MjgxNjE0MjkxNjE1MDhGODBDMDlFOTBDMjkxNkQyCi06MTAxMDcwMDAxMzk4MUU3OEZCMDcyODEyMTNCMDg4MjgxNjEzODkxRUIwCi06MTAxMDgwMDA5QTE4OUYxNzJBMTIxM0MwRjAyOTE2MTk3QkUzMEM3QkJDCi06MTAxMDkwMDBFOTA3OEUxNzJCMTIwODdFQkIwMUMwRjE2NUY0MDZDMDZDCi06MTAxMEEwMDBCMDJGMTIxOTg4MzUyRTEyMTI5ODE5MjgxMjExQUFFRTkzCi06MTAxMEIwMDBBRjhGNzhGQjAyMkVFQzAxOUYxMzhGMTk5RjEyQzBGMEE3Ci06MTAxMEMwMDA3QkUzMEM3RUI5MDc4OTEzMjgxMjAyNzk4QjAxQzBGMUVBCi06MTAxMEQwMDA2NUYzRDIyNTE2MTcyOTEyMTUwQzRGNTRDMEUxMkYxNkFGCi06MTAxMEUwMDAxNkJDRkYyRjE2MTgwMEYxMDQwMEVFMUEyRjEyMTRCMEQwCi06MTAxMEYwMDBFRTBFRjgxMzA5ODgwMTBGRUUwMTJGMTIxOUE4QUFBRUZGCi06MTAxMTAwMDBGRTdGRUIwMUIxQUFENUEwMkUxNjE5MkIxMjE5REE1MEM5Ci06MTAxMTEwMDAyQzEyMTg1ODE4RDNDMEQwQzA5MDJFMTIxOTA3NDgwQUE0Ci06MTAxMTIwMDAyQzEyMThEQUIwOEYzNEMwQjFBQUZGMDBDMTA0MkExMjAxCi06MTAxMTMwMDAxNjJGODYxNjJDMTIxNzAwQkIxQUIwQkIwRUJFMDE5RUNFCi06MTAxMTQwMDBDOTBCRkIxMzA1QkIwMTlCQzgyQTc0MTAyOTI0NjcyOTBFCi06MTAxMTUwMDA3MDAzOEU3NUIxOUYyRjc0MDNCMEVFMEU0RTBDNjVFRENCCi06MTAxMTYwMDAxODI4MjA2NzJEMjUwMjY1ODMxMzJBMjIxRTI5MjIxRDk3Ci06MTAxMTcwMDA3QTkxMDREQkEwNjAwMDAxQzBCMDY0QkNGQzJDQjAwNzE1Ci06MTAxMTgwMDAyOEIwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMEUzCi06MTAxMTkwMDBEQkEwNjVBRkU3NjNGQ0UxODlBQUIxOTk2NTkwOTQ4OTBBCi06MTAxMUEwMDAzNDFCRUUwODk5QUE4ODMzMUZFRTAyMDg0ODU0MjhBNDdECi06MTAxMUIwMDAyQzhFMkE4QzMyMEZFRTAyMEJDQjAxN0VCOTY0MEM0QkM1Ci06MTAxMUMwMDA1MTZGQjI1RThCMzM3NUI2NTkyQ0EwMTMwQkVFNTEwRUQ2Ci06MTAxMUQwMDBDRTAxMEUwRTQxMEMwQzQxN0VDOTQ3MkZBMDEyQjBGRjZDCi06MTAxMUUwMDA2NUYyREQ4RTM3OENBODhCMzY4RkE5N0NCMzA3N0JDOTVGCi06MTAxMUYwMDAwMjdFRkIwMUMwRDFDRUQ5ODgzNUREQjAwRThFMDg3OEQ1Ci06MTAxMjAwMDBFQjAxQjFCRDg5QTdEQUMwMEY5QjA4NzlCQjAyMkFDQ0RDCi06MTAxMjEwMDAwMURDQjBDMEIwN0RBMzA3N0FEOTAyN0NFQjAxQzBCMTdDCi06MTAxMjIwMDA2NEIxNjNDMDkxMjkyNDY3QzAyMEQxMEYwMDhCREFCMTZCCi06MTAxMjMwMDBCQjY0QjBDMDJDMjA2NzJEMjUwMjY1QzIyODFERUREQ0UzCi06MTAxMjQwMDA4QzMyMUZFREUxMERDRDAxMEZERDBDNjVEMUMxMEM0RkNFCi06MTAxMjUwMDA1MTZGRjIwMjYwMDFCOEMwOTAyOTI0NjcwOTA4NDc2NTAwCi06MTAxMjYwMDA4MjBGN0FFMTA0REJBMDYwMDAwMUMwQjA2NEJDMEEyQ0VDCi06MTAxMjcwMDBCMDA3MjhCMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQkJCCi06MTAxMjgwMDA4MDAwREJBMDY1QUZFNzYzRkJFRjhDMzMwQ0U5NTA2NEIzCi06MTAxMjkwMDA5MjA5MENFRjExQUZBRjJGMTYxNzhFRjg4NUY3REJFMDMwCi06MTAxMkEwMDA4RkY5MjUxNjEwQTVGNTdGNUIwMjJCRUMwMTBDQTg1MEQ5Ci06MTAxMkIwMDA2NTgwREQ4ODM3REFFMEFGODkyOTE2MEE3ODlCMDIyQTMzCi06MTAxMkMwMDBFQzAxOTUxNDg5MUFENUEwMjkxNjE5MkEwQTAwN0JFMzg2Ci06MTAxMkQwMDAwQTdCRTkwNTJCMTIwNDdGQkIwMUMwQTE2NUExQzE4QjZDCi06MTAxMkUwMDAzNUMwQTBDMDgwNzhFMzA0NjRFMTA0QzBBMTY0QUQ1Q0IzCi06MTAxMkYwMDA2MDAxQUQwMDAwOEUzNDE5RURCMzlFREE4QzMzMUJFRDI2Ci06MTAxMzAwMDBBQzBDNEM1NDJDRDQyQzhBMkE4QzMyMEJBQTAyMDlDOTVFCi06MTAxMzEwMDAwMTBBOTkwQzY1OUYwQjBDNEY1MTZFRjIwMjYzRkYwMjlDCi06MTAxMzIwMDA4QjMzMEJBODUwNjQ4RUZBMjlEMDEzMEJFQTUxMEE5QTFBCi06MTAxMzMwMDAwMTBBMEE0MTA5MDk0MTBBOTkwQzY1OUVFNTJCRDAxMjYwCi06MTAxMzQwMDBCMEJCNjVCMTg4QzBBMDhFMzc4Q0Q4MkIzMjA2MkZEMkE3Ci06MTAxMzUwMDAwOTdDQjMwNzdCQzkwMjdFRkIwMUMwQTE2NUFFQzM4OENGCi06MTAxMzYwMDAzNUQzQjBBRThFNzhFQjAxQjFCMzg5RDdEQUMwQUY5QjdECi06MTAxMzcwMDA3OUJCMDFCMUNBRENCMEMwQjA3M0EzMDc3QTM5MDI3QzczCi06MTAxMzgwMDBFQjAxQzBCMTY1QkU5QkMwOTAyOTI0NjdDMDIwRDEwRjdFCi06MTAxMzkwMDAwMDhBMzY4ODM3MkExNjE1MjgxNjE0MEFFQTBDMDhGODI3Ci06MTAxM0EwMDAwQzk4MUI3OEZCMDFCMEFBOUYxNThGMUIyRjE2MTkyRkM1Ci06MTAxM0IwMDAwQTAwN0JFMzBBN0JFOTA1MjgxMjA1Nzg1QjAxQzBGMThFCi06MTAxM0MwMDA2NUYwRTJBQURFOEIzNTJGMTIxOTI5MTIxMEMwNTBBRjNBCi06MTAxM0QwMDA5Rjc5RkIwMUIxRUU5RjExQzBGMDc1RTMwQTdFNTkwNUJDCi06MTAxM0UwMDAyODEyMDE3OEJCMDFDMEYxNjRGQ0VBNjAwMEI3MDAwMDdDCi06MTAxM0YwMDA3RkIzMDI2M0ZFRjY2M0ZFRjE3RkIzMDI2M0ZDNDU2M0Q1Ci06MTAxNDAwMDBGQzQwMDAwMDY0NTBBNERBMjA1ODE1QzhDMDIwRDEwRjU5Ci06MTAxNDEwMDBDMDkxNjNGRTQzQzA5MTYzRkE3M0RBMjBEQjcwQzBEMUUwCi06MTAxNDIwMDAyRTBBODBDMDlBMjkyNDY4MkM3MDA3NTgxNEI4RDJBMEJDCi06MTAxNDMwMDBEMTBGMDAwMDE5RUQ2NjAzNDgwQjk4MTAwODhCMDIwOUM0Ci06MTAxNDQwMDAyOTA4Nzk4MzAyMkI4REY4MjkxMjFBNjNGQThCMDAwMDgwCi06MTAxNDUwMDAyQTJDNzREQjQwNTgwRTQ0MkUyMjFEMkEyMjFFNjNGQkM4Ci06MTAxNDYwMDAwRkMwOTE2M0ZDRTUwMjJBMDI1ODAyNEMwQUEyMDIwNjUwCi06MTAxNDcwMDAwMDAwMDIyQTAyNTgwMjQ5MEFBMjAyMDYwMDAwREI3MDlDCi06MTAxNDgwMDBEQTIwQzBEMTJFMEE4MEMwQ0UyQzI0NjgyQzcwMDc1OEQ4Ci06MTAxNDkwMDAxNDlGQzAyMEQxMEZEOUEwNjNGQ0I2MDBDMDk0NjNGQzk4Ci06MTAxNEEwMDBBQUMwOTY2M0ZDQTVDMDk2NjNGQ0EwMDAyQTJDNzREQjNFCi06MTAxNEIwMDAzMERDNDA1QkZFMkVDMkQwMkRBNDAwMkIyMDBDNjNGRjNECi06MTAxNEMwMDA0NThGMzU4RUE3N0ZFQjAyNjNGRUJCNjNGRDU0ODkzNUU0Ci06MTAxNEQwMDA4OEQ3Nzk4QjAyNjNGRUFFNjNGRDQ3MDA2QzEwMDRDMEIxCi06MTAxNEUwMDAyMEQxMEYwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQyQjExCi06MTAxNEYwMDAyMjFFMjgyMjFEQzBBMEMwOTQyOTI0MDYyQTI1MDI3QjcyCi06MTAxNTAwMDA4OTAxREJBMEM5QjkxM0VEMjREQTIwMjhCMDAwMkNCMDgyCi06MTAxNTEwMDAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRjhFCi06MTAxNTIwMDBFN0MwMjBEMTBGMDAwMDAwNkMxMDA2MDIyNjAyMjkyMDFGCi06MTAxNTMwMDAwNkMwRTA2ODk4MDUyODlDRjk2NTgxMjAyQTYxMDIxNzk5Ci06MTAxNTQwMDBFRDE3MEEwQTRDNjVBMEYwMkI3MjlFMUFFRDEzNkZCOEM2Ci06MTAxNTUwMDAwMjYwMDBGNDJBQTIyNjY4QTAwOThCNjBEMzBGMEFCQkEwCi06MTAxNTYwMDAwQzY1QjBFNDJBNzI5RDY0QTBERTJCNjAwQzBDQkMxMUVCCi06MTAxNTcwMDAwN0NDMDgyREMyODY2RkQ5MDI2MDAwRDcxREVEMDkwRDdBCi06MTAxNTgwMDBCRDBBMkREMkEzNjhEMDA3OEY2MDBERkYwQzY1RjBDMzk0Ci06MTAxNTkwMDAyMkMyODVDMEYwNjQyMEJCMURFRDBFNjg0MzREMThFRERFCi06MTAxNUEwMDAwRDhDNkIwOENDMDI5QzIwOEE2MDA4QUExMTBEQUEwMjNGCi06MTAxNUIwMDA5QTIxODk2QTk5MjQ4ODMyOTgyNTJDNjEwNDA4Q0MxMUQzCi06MTAxNUMwMDA5QzI3MUNFQ0ZFMENCQTExQTdBQTI5QTI4NUFDQkMyRjQzCi06MTAxNUQwMDBDNENGMjk5QzI4MjlBNjg1Qzg1QTJBNkM3NERCNDA1ODk4Ci06MTAxNUUwMDAwREUyRDJBMEQxMEZEMkUwRDEwRjAwMDAyODlDRjk2NDA3Ci06MTAxNUYwMDA4MDkxMkM2MDY2ODkzMUIxQ0MwQzBDNDcyQzY0NjY2RkVECi06MTAxNjAwMDBDNjY5NzA5RTY2MUFFQ0Y0OEMzMDg5NkIwQzhDNDAwQkFBCi06MTAxNjEwMDBDQzEwMEM5OTAyMEE5OTAyOTkyMDg4NjAwODg4MTEwRDUzCi06MTAxNjIwMDA4ODAyOTgyMThDMzM5QzIzOEEzMjlBMjI4OTZBOTkyNEQxCi06MTAxNjMwMDA4ODM0OTgyNTYzRkY4MjAwMDBDQzU3REE2MERCMzBEQzA5Ci06MTAxNjQwMDA0MDU4MTRBN0MwMjBEMTBGMDBEQTYwQzBCNjU4MTUzNzMzCi06MTAxNjUwMDA2M0ZGRTUwMERBNjA1ODE1MzU2M0ZGREMwMERBMjBEQjU0Ci06MTAxNjYwMDAzMERDNDBERDUwNTgxNUI3RDJBMEQxMEY5RTEwMkI2MTUxCi06MTAxNjcwMDAwNDU4MTNDODFERUNENzhFMTAyQjYwMENDMEYwMkY2NERCCi06MTAxNjgwMDA2NjYzRkY4MDI5NjEyM0MwODg3OTgzMDI2M0ZGNzUyRTFBCi06MTAxNjkwMDAxNjAwMkM2MDY2MkI2MTA0MkNDQzAxMEMwQzQ3MkM2NENBCi06MTAxNkEwMDA2NjU4MTNCQzFERUNDQjhFMTAyQjYwMENDMEYwMkY2NDYxCi06MTAxNkIwMDA2NjYzRkY1MDZDMTAwNEMwQjdDMEExMTZFQ0M4MTVFQ0VGCi06MTAxNkMwMDBCQUQ3MjBEODQwQjgyMkMwNDAwNTM1MDI5NjcxOTU3MDJGCi06MTAxNkQwMDAwMkE0MzgwNDA0NDJDOTRCMUFFQ0FEMTlFQ0FFMjlBNjk5Ci06MTAxNkUwMDA3RUMxNDBEMzBGNkQ0QTA1MDA4MDg4MDAyMDhDMjIwQUZECi06MTAxNkYwMDA4OEEyNzJEMTBGQzA1MDA4QTUzODc1QjBFMzYzRkZENzM4Ci06MTAxNzAwMDA2QzEwMDg5MzE0OTQxMjI5MjAwNjY1NTI3MEMwNzE2OEY5Ci06MTAxNzEwMDA5ODA1MkE5Q0Y5NjVBMjgwMTZFQ0ExMjkyMTAyOEExNDU5Ci06MTAxNzIwMDAwOTA5NEM2NTkwQzc4QUEwMEE2QTUxMkFBQ0ZENjVBMEQ4Ci06MTAxNzMwMDBCQ0NDNUZEQjMwREEyMDhDMTI1ODE0NjlDMDUxOUExNDhCCi06MTAxNzQwMDBDN0JGOUJBOThFMTQyRUUyMDk2OEUwNjAyRjYyOUUxRDIwCi06MTAxNzUwMDBFQzkyNkZGODAyNjAwMDgxMkREMjI2NjhEMDA1MkYyMjBFCi06MTAxNzYwMDAwMDdERjk3NTJDNjI5REM3OTA2NEMwNkQ5QzExOEExNDMwCi06MTAxNzcwMDAyQjIwMEMyQUEwMjAwQ0JEMTFBNkREMEE0RjE0QkZBOEY3Ci06MTAxNzgwMDAwOTg4MDEyOUQyODZBRjg4Mjg4QzA5Nzk4QjU1MUZFQ0VFCi06MTAxNzkwMDA4NDBGQkYwQTJGRjJBMzY4RjAwNTI4MjIwMDdGODk0MzM3Ci06MTAxN0EwMDAyOUQyODVENDkwNjU5MDc3NjAwMDNEMDAwMDJCMjAwQ0Y1Ci06MTAxN0IwMDAxRkVDN0MwQ0JEMTFBNkREMjlEMjg2MEZCRjBBNkU5NkU4Ci06MTAxN0MwMDAxMDJGRjJBMzY4RjAwNDg4MjA3Rjg5MDUyOUQyODU2NTRGCi06MTAxN0QwMDA5MTU1REEyMDU4MTRENTYwMDAxM0RBMjBDMEI2NTgxNDk5Ci06MTAxN0UwMDBEMzYwMDAwOUMwOTA2M0ZGQjlEQTIwNTgxNEQwODkxNDdGCi06MTAxN0YwMDA4OTkxMDlGRTUwNjU1MUNDOEMxMjhEMTREQTIwREJEMDEyCi06MTAxODAwMDA4REQwOUUxMDBENkQ1MTU4MTM0MTlBMTQ2NEExRjBDN0VDCi06MTAxODEwMDA1RjhGQTE5NUE5QzA1MTBGMEY0NzlGMTI2M0ZFRkIwMDc4Ci06MTAxODIwMDBDMDkxQzBGMTI4MjAwNjJDMjA2NjI4OENGOUE3Q0MwQzhBCi06MTAxODMwMDAwQzQ3MkMyNDY2NkZDNjA4OEQxNDhERDE3MERFMDFDMDU0Ci06MTAxODQwMDA5MEREOTA2NDgxNDFDOUQyOEExMTJCMjEwNDU4MTM1MTMzCi06MTAxODUwMDA4QTE0QzBCMDJCMjQ2NjhFQTkyQUEwMjBDMTcwMUNFQzZCCi06MTAxODYwMDA1QjBFMjgxNDE1RUM1MDhFMTQ4NTU2QUMyQzlDMTMyRTUwCi06MTAxODcwMDBFQzI4QTg1NURERTA3Q0UzMDIyREVERjhEM0QwMEE3NzAzCi06MTAxODgwMDAzNkRBNDBEQjUwREMzMDVCRkY4QkQ0QTAyRTIwMENCNDZBCi06MTAxODkwMDA1NTI5MEE4OEMwQzAxQkVDNDkwQ0VGMTFBNkZGMjhGMjlECi06MTAxOEEwMDA4NUFCRUUyQ0U0Q0ZBOTg4MjhGNjg1MjkwQTgwODgxMzE5Ci06MTAxOEIwMDBBOTMzREQzMDg5MTQ3ODMzMDIyRDNERjgyODkwMjBEM0U4Ci06MTAxOEMwMDBEMDA3ODgwQ0MxNzAwODA4NDcyODk0MjAwODc3MzY2NTJGCi06MTAxOEQwMDA3RkFFODkxNDEzRUM0Mzg5OTBDMEQ0Nzc5NzNEMThFQzAwCi06MTAxOEUwMDA0MUMxQkEyNzIxMDQ4NTE0MDk5QzQwMDZDQzExODY1M0I2Ci06MTAxOEYwMDAwNDc3MTE4NTUyMEM3NzAyMEI3NzAyQzBDMDk4QTA5RDI3Ci06MTAxOTAwMDBBMThEMkI5Q0E1OTdBNDk2QTc5NUE2MDNERDAyOURBMjY5Ci06MTAxOTEwMDAyQkYyODUyQ0U0Q0YyQkJDMjAyQkY2ODUyQTJDNzQ4QjQ0Ci06MTAxOTIwMDAxMjU4MEQxMUQyQTBEMTBGMjgyMDNEQzBFMDdDODc3NzNFCi06MTAxOTMwMDAyRTI0NjcwRTBBNDc2NUEwNzMxOEVDMkI4RjIwMUNFQzMxCi06MTAxOTQwMDAxOThFMTQ4Q0M0OEVFNDA4RkYxMTA4RkYwMjBFOEUxNDQ5Ci06MTAxOTUwMDBBRUNDMUVFQzI2OUY5MTBFQ0MwMjlDOTBDMDgwMUVFQzVCCi06MTAxOTYwMDAyNDJDMjEwMjFBRUMxNjJGRDI4NUFBQkFCOEZGMkZENjQyCi06MTAxOTcwMDA4NTBFQ0MwMjI4QTRDRjJDMjUwMkMwMjBEMTBGODcxNEJECi06MTAxOTgwMDA4NzcwMDcwNzQ3NjNGRDg2MjgyMTIzQzA5OTc5OEIwMjVBCi06MTAxOTkwMDA2M0ZFQjJEREYwNjNGRUFEMDBEQTIwREIzMDhDMTJEREQ5Ci06MTAxOUEwMDA1MDU4MTRFOEQyQTBEMTBGQzBFMTYzRkY4MjhCMTQ4QzkxCi06MTAxOUIwMDAxMkRENTBDMEFBMkUwQTgwMkEyNDY4REEyMDU4MTM1MzU4Ci06MTAxOUMwMDBEMkEwRDEwRjAwNzA5NjU1MkI2MjlFNkVCODUzMURFQkJFCi06MTAxOUQwMDBGMjJERDIyNjY4RDAwNDhFMjA3REU5NDUyQTYyOURDQjY3Ci06MTAxOUUwMDBBRjJCMjEwNDJDMjA2NjU4MTJFQkMwOTAyOTI0NjY4MjZDCi06MTAxOUYwMDAxNDE4RUMwMDhGMjEwOEZGMDE5RjIxQzAyMEQxMEYwMDk3Ci06MTAxQTAwMDA4QjEwQzlCODhDQTAwQzZDNTFDQ0NDOEUyNDFGRUJFRTgzCi06MTAxQTEwMDA4REUxOUUxNDBGREQwMjlERTE4ODEwNjU4RkE5QzAyMDI1Ci06MTAxQTIwMDBEMTBGREEyMEMwQjY1ODE0NDFDMDIwRDEwRjAwMDAwMEY5Ci06MTAxQTMwMDA2QzEwMDZDMEQwMkEyMTAyOTQxMTc1QTcwRTg5MzQ3RjNDCi06MTAxQTQwMDA5NzA5OEIzNTdGQkYwNDJEMjUwMkRBRDAwQTBDNEM2NTJGCi06MTAxQTUwMDBDMTdCMTZFQkQyMUZFQkQwMjg2MjlFQzBFQTc4RTMwMjZFCi06MTAxQTYwMDA2MDAxODEyOUYyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMUU1Ci06MTAxQTcwMDA3MzJBNjI5RERFQTA2NEExNzAyQjIwMENDMDcwMENCQzg4Ci06MTAxQTgwMDAxMTA2Q0MwODI5QzI4NjI4MEEwQzc5ODMwMjYwMDE0QzExCi06MTAxQTkwMDAxOUVCQzQwOUI5MEEyOTkyQTM2ODkwMDc4ODIwMDk4ODFDCi06MTAxQUEwMDAwQzY1ODEzODI0QzI4NTFDRUJDNjY0NDEyRjg5MzEwOTNECi06MTAxQUIwMDA4QjE0MENCQjAxNkZCMTFEMkMyMDY2OUUxMEIxQ0MwQzk5Ci06MTAxQUMwMDAwQzQ3MkMyNDY2NkVDNjAyNjAwMTM0MDlGRTUwNjVFMUE1Ci06MTAxQUQwMDAyRThBMTAyQUFDMTg4OTM0QzBFNDdGOTczNjE3RUJDN0RBCi06MTAxQUUwMDBDMDgyMUJFQkM1OEMzNTlFNDE5QjQwOEIyMDk4NDU5RDQ5Ci06MTAxQUYwMDA0NDE4RUJDMzA3QkIwMjlCNDIwQzA3NDAwRjc3MTE5OEI5Ci06MTAxQjAwMDA0Mzk3NDdEN0UwN0ZDNzBCMkMyMTAyMjg0QTAwMDhDQzE3Ci06MTAxQjEwMDAwMjJDMjUwMjdFOTcwNDhCMzYyQjI1MjI3RDk3MDQ4QzgwCi06MTAxQjIwMDAzNzJDMjUyMTdDOTczQTBBQUIwMjJDMEEwMUMwODAwQTg3Ci06MTAxQjMwMDBDODM4MkEzQzIwMDgwODQyNjQ4MDgyMUNFQjk0MTlFQkM4Ci06MTAxQjQwMDA5NTI5QzY3RTAwQTA4ODAwQjA4QzAwQTA4ODAwQjA4Q0NCCi06MTAxQjUwMDAwMEEwODgwMEIwOEMyODYyOUQyREY0QTIyODhDMTgyODQzCi06MTAxQjYwMDA2NjlEODkzMDc3OTczNTFGRUI5RjhDMzM4ODMyMDQ3QkQ1Ci06MTAxQjcwMDAwQjJBMjEwNEI0NzcwNEFBMTE5RUIxOUZCMDhGMkI5RDJDCi06MTAxQjgwMDBCNTk4QjY5Q0I3MThFQjk2MDk5QzQwMDZDQzExMENBQUU4Ci06MTAxQjkwMDAwMjA4RkYwMjlGQjJDMUNDMENBQTAyOUFCNEM5NzcyQUVDCi06MTAxQkEwMDAyMDBDMUJFQjg2MENBOTExQTY5OTI4OTI4NUFCQUEyREI3Ci06MTAxQkIwMDBBNENGMDg3ODBCMjg5Njg1Q0Y1OEMwMjBEMTBGQzA4N0I2Ci06MTAxQkMwMDBDMDkwMEFDOTM4Nzk4ODAyNjNGRjc4NjNGRjZDQ0M1N0VDCi06MTAxQkQwMDBEQTIwREIzMDhDMTE1ODEzNDJDMDIwRDEwRkRBMjA1OEE0Ci06MTAxQkUwMDAxM0QzNjNGRkU4QzBBMDYzRkU4OURBMjBDMEI2NTgxM0EwCi06MTAxQkYwMDBDRjYzRkZEOTJBMkM3NDhCMTE1ODBDNUJEMkEwRDEwRjY0Ci06MTAxQzAwMDA4QTEwMkIyMTA0NTgxMjYzMUZFQjY0QzBEMDJEMjQ2NjY4Ci06MTAxQzEwMDA2M0ZFQkQwMDZDMTAwNkQ2MjAxOUVCNUYxRUVCNjEyODM5Ci06MTAxQzIwMDA2MTAyMTdFQjVFMDgwODRDNjU4MDVGOEEzMDBBNkE1MUQyCi06MTAxQzMwMDA2OUEzNTcyQjcyOUU2RUI4M0YyQTkyMjY2OEEwMDQ4QzI3Ci06MTAxQzQwMDA2MDdBQzkzNDJBNzI5RDJDNENGRUNBQUIyQjYwMENCNjRDCi06MTAxQzUwMDA0RjBDQkQxMUE3REQyOEQyODYwRUJFMEE3OEZCMjY5QzRDCi06MTAxQzYwMDAxMTJFRTJBMzJDMTYwMDY4RTAwNTJGNjIwMDdFRjkxNTA0Ci06MTAxQzcwMDAyMkQyODVDRjI1NjAwMDBEMDBEQTYwQzBCNjU4MTNBQkM0Ci06MTAxQzgwMDBDODVBNjAwMTBGMDBEQTYwNTgxM0E4NjU1MTA2REM0MDlECi06MTAxQzkwMDBEQjMwOEQzMERBNjAwRDZENTE1ODEyMUNEM0EwNjRBMDdBCi06MTAxQ0EwMDBGMzg0QTFDMDUxMDQwNDQ3NjNGRjZEMDBDMEIwMkM2MEYxCi06MTAxQ0IwMDA2Njg5MzFCMUNDMEMwQzQ3MkM2NDY2NkZDNjAyNzA5NkY1Ci06MTAxQ0MwMDAwQTJCNjEwNDU4MTIzM0MwQjAyQjY0NjY2NTUwQjQyQUU1Ci06MTAxQ0QwMDAzQzEwQzBFN0RDMjBDMEQxQzBGMDAyREYzODBGMEY0MjVCCi06MTAxQ0UwMDA2NEYwOTAxOUVCMkExOEVCMkIyODk2N0U4RDEwNkREQTk0Ci06MTAxQ0YwMDAwNTAwQTA4ODAwQzA4Q0MwQTA4OTMwMURFQjNBNzc5NzAyCi06MTAxRDAwMDA1Mzg4MzI4QzEwOEYzMzAyQ0UwQkMwMjQ5MkUxMjI2MUIzCi06MTAxRDEwMDAwNDlERTAwNDIyMTE4RDZCOUJFNTlGRTc5OEU2MUZFQjg1Ci06MTAxRDIwMDAzMDA5OTg0MDA2ODgxMTA4MjIwMjBGREQwMkMxOEQ5REZFCi06MTAxRDMwMDBFMjA4MjIwMjkyRTRCNEMyMkU2MDBDMUZFQjIwMENFOEYxCi06MTAxRDQwMDAxMUE3ODgyQzgyODVBRkVFMEMyMjBCMkJFNENGMjI4NkM0Ci06MTAxRDUwMDA4NUQyQTBEMTBGMjg2MDBDRDJBMDhDMTExOUVCMTgwQ0UxCi06MTAxRDYwMDA4RDExQTdERDJFRDI4NUE5ODgyQjg0Q0YwRUNDMEIyQzBDCi06MTAxRDcwMDBENjg1RDEwRkMwRjAwQURGMzg3RkU4MDI2M0ZGNkM2M0JECi06MTAxRDgwMDBGRjYwMDAwMDJBNkM3NEMwQjJEQzIwREQ0MDU4MTIxMUU0Ci06MTAxRDkwMDBDMEIwNjNGRjYzQzAyMEQxMEYwMDAwMDA2QzEwMDQyQ0EyCi06MTAxREEwMDAyMjFEMkEyMjFFQzA0OUQzMjAyOTMwMDYyNDM0NjhDMEFGCi06MTAxREIwMDA0MDdBQzEwNUREQTA2MDAwMDIwMEMwRDA2RTk3MzhDMDM3Ci06MTAxREMwMDA4RjJFMEE4MDJCMzAxNEMwOTYyOTM0MDYwRUJCMDIyRUFCCi06MTAxREQwMDAzMTAyMkIzNDE0N0U4MDA0MjQzNTAyREU0MDdBQzEwRTk5Ci06MTAxREUwMDBDOEFCREJEMERBMzAyQzBBMDA1ODBBNzkyRTMxMDIwRTRCCi06MTAxREYwMDAwRjRDQzhGRUMwMjBEMTBGNjg5NUY4MjgzMTAyMDgwOEEyCi06MTAxRTAwMDA0QzY1OEZFRjFBRUFFNjFDRUFFNDJCQTI5RUMwOUE3QjhGCi06MTAxRTEwMDA5QjQ2MkJDMjI2NjhCMDA0OEQzMDdCRDkzQjI5QTI5REZFCi06MTAxRTIwMDBDMEUzQ0I5Mzk0OTAxQkVBRjcyRDMxMDQ5Qjk2MDhERDE5Ci06MTAxRTMwMDAxMTBFREQwMjlEOTc5RDkxMjRDNEEyMTJFQUYzMkYzMTY5Ci06MTAxRTQwMDAwMjI4QTI5REMwRTUyRTM0MDYyODhDMzAyOEE2OUQwMkNCCi06MTAxRTUwMDBGRjAyMkYzNTAyQzAyMEQxMEZEQTMwQzBCNjU4MTMzMzNECi06MTAxRTYwMDBDMDIwRDEwRjZDMTAwNjJBMjAwNjk0MTE2OEE4MDUyOEZFCi06MTAxRTcwMDBBQ0Y5NjU4MjRGMjkyMTAyMDkwOTRDNjU5MjA2Q0M1RkI1Ci06MTAxRTgwMDBEQjMwREEyMDhDMTE1ODEyOTZDMDUxRDNBMEM3QUY5QTFDCi06MTAxRTkwMDAzQUMwRTAxOUVBQzMxREVBQzkxQUVBQzI4RjNBMTZFQTQzCi06MTAxRUEwMDBCRkIxRkI2NEIxMzUyQzYyOUU2RkM4MDI2MDAxRTkyN0E3Ci06MTAxRUIwMDBEQzMzMjc3MjI2Njg3MDA3ODgyMDA3ODgwQzY1ODFEODc0Ci06MTAxRUMwMDAyNDYyOURDMDc2NjQ0MUQwMkIyMDBDMENCQzExQTZDQ0EyCi06MTAxRUQwMDAyOEMyODZDMDlFNzg5MzAyNjAwMUM4MTlFQUIxMDlCOTg4Ci06MTAxRUUwMDAwQTI5OTJBMzk0MTA2ODkwMDc4ODIwMDk4ODBDNjU4MUJDCi06MTAxRUYwMDBCMjI0QzI4NTY0NDFBQzI5MjAwNjI5OUNGOTY0OTFERjkzCi06MTAxRjAwMDAyQzIwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjlECi06MTAxRjEwMDA2MDAxOTgwOUY4NTA2NTgxOTIxQUVBQTM4QzM2MTlFQTkzCi06MTAxRjIwMDBBMTBDODgxNDg5OTQwQzBDNDcwOUNDMTBBODk5MEE5OTIzCi06MTAxRjMwMDAwMjE4RUFCNjJBMjEwNDk5NDA5ODQxODgyQTE5RUFCNDdECi06MTAxRjQwMDAwQzg4MDIwOTg4MDI5ODQyMjgzMDJDMkMzMDEzMjkzMDQyCi06MTAxRjUwMDAxMjA0Q0MxMDA2OTkxMDBDODgxMDlGNDQwOEE4MDIwQzlCCi06MTAxRjYwMDA5OTAyMDk4ODAyOTg0MzhGMzc5RjQ1OEMzODlDNDY4OThGCi06MTAxRjcwMDAzOUMwRjE5OTQ3MTlFQUE3ODgzNTlGNEI5ODQ4MDg4OEQ2Ci06MTAxRjgwMDAxNDA5ODgwMjk4NEE4RjMwMThFQTk3NzdGNzMyQzA3NDlDCi06MTAxRjkwMDA4OTMyOEMzMzk4NEM5NzREMEY5NzQwODgyQjJFNDYxMUUxCi06MTAxRkEwMDAwNjc3MTEyQzQ2MTMyOTQ2MTIwNEFDMTExOUVBOEQwNzQ1Ci06MTAxRkIwMDBDQzAyQzE3OTA5ODgwMjk4NEUwN0NDMDIyQzQ2MTBDMDg5Ci06MTAxRkMwMDA3QUFEQkMwQ0JBMTFBNkFBMjlBMjg1MkVDNENGMDk3OTc0Ci06MTAxRkQwMDAwQjI5QTY4NTY1NTBGQ0MwMjBEMTBGMDAyQjIwMEMwQ0NFCi06MTAxRkUwMDBCQzExMDZDQzA4MkZDMjg2MDlCOTBBNkZGOTAyNjAwMTNDCi06MTAxRkYwMDAxRTI5OTJBMzY4OTAwODJGMjIwMDA5RkYwQzY1RjEwRjlCCi06MTAyMDAwMDAyRkMyODU2NEYxMDkyODIwM0QwODI4NDA2NDgwODQ4NDFCCi06MTAyMDEwMDAzNTA0ODQxNDY0NDA3Qzg1QTU3NDUzNzc4NDM2MDQ4NDI1Ci06MTAyMDIwMDAxNDY0NDA2Rjc0NTM2QzI5MzAxM0MwOEM3OTg4NjRDMDc5Ci06MTAyMDMwMDA5MDI5MjQ2NzA5MDg0NzY1ODBERDg4MjA4OUE0ODQzNUI0Ci06MTAyMDQwMDAxQUVBNkIwNDg0MTRBNDk0MEE0NDAyOTRGMDE0RUE2NjE1Ci06MTAyMDUwMDAwODg4MTEwNDg4MDI5OEYxODQzNjk4RjMwNDg0MTRBNDQzCi06MTAyMDYwMDA5OTBBOTkwMjk5RjIxQUVBNjIyOTIxMDIyNEMyODVBRERECi06MTAyMDcwMDBCODJFODRDRjI0NEMxMDI0QzY4NTBBOTkwMjI5MjUwMjQzCi06MTAyMDgwMDBDMDIwRDEwRjAwQ0M1N0RBMjBEQjMwOEMxMTU4MTIxNDRECi06MTAyMDkwMDBDMDIwRDEwRkMwOTE2M0ZGOTdEQTIwQzBCNjU4MTJBM0I5Ci06MTAyMEEwMDA2M0ZGRTEwMERBMjA1ODEyQTE2M0ZGRDg4QTEwMkIyMUM4Ci06MTAyMEIwMDAwNDU4MTEzODFERUE0MjJCMjAwQ0MwRTAyRTI0NjY4RkY0Ci06MTAyMEMwMDAzQTYzRkU1NDAwREEyMERCMzBEQzQwREQ1MDU4MTMxRDRCCi06MTAyMEQwMDBEMkEwRDEwRjJBMkM3NDhCMTE1ODBCMjNEMkEwRDEwRjcwCi06MTAyMEUwMDAyOTIxMjNDMDg4Nzk4MzAyNjNGRTJEMkExMjAwMkMyMDI3Ci06MTAyMEYwMDA2NjJCMjEwNDJDQ0MwMTBDMEM0NzJDMjQ2NjU4MTEyNThFCi06MTAyMTAwMDAxREVBMkYyQjIwMENDMEUwMkUyNDY2OEYzQTYzRkUwOEI4Ci06MTAyMTEwMDBEQTIwNTgxMjg2NjNGRjZDREEyMDVCRkYyMEQyQTBEMTUwCi06MTAyMTIwMDAwRjAwMDAwMDZDMTAwQTk1MTZDMDYxQzFCMEQ5NDAyQTlBCi06MTAyMTMwMDAyMDNEQzA0MDBCQUEwMTBBNjQzODJBMjAwNjI5MTYwNzUwCi06MTAyMTQwMDA2OEE4MDUyQ0FDRjk2NUMzM0IxREVBMTZDODQ0MkYxMkRDCi06MTAyMTUwMDAwNjY0RjI5QjI2MjEwMjFFRUExMjk2MTQwNjA2NEM2NUJFCi06MTAyMTYwMDA2MkRFMTVFQTBFNjQ0MENGOEEzNTI5MzAwMzlBMTUwQURCCi06MTAyMTcwMDA5OTBDNjQ5MEMyMkMyMDBDOEIxNTlDMTIwQ0NDMTFBNUQwCi06MTAyMTgwMDBDQzlDMTMyQ0MyODZCNEJCN0NCMzAyNjAwMkNFOEYxMkVGCi06MTAyMTkwMDAwRUZFMEEyRUUyQTM2OEUwMDgyNjIyMDAwRTY2MEM2NUY5Ci06MTAyMUEwMDA2MkJBODgxMzI4ODI4NTY0ODJCMjg5MTU2NDkwNUVEQUU3Ci06MTAyMUIwMDA4MEQ5MzA4QzIwMUVFQTBDMUZFQTBEMURFOUZBOEIxNTIwCi06MTAyMUMwMDA4REQ0RDRCMDdGQjcxOEI4OEEyOTNDMTA4NTM2MDhDNjlDCi06MTAyMUQwMDAxMTBFNjYwMjk2ODEwNTg1MTRBNUQ1MEY1NTAyOTU4MENFCi06MTAyMUUwMDAwNDE4MTQ2RDg5Mjc4ODk2MDhDQjExMDg4ODE0MEVCQjMzCi06MTAyMUYwMDAwMkE4RDgyOTlDMjAwRjg4MDI5QkExOThBMDg4OTI5QkI2Ci06MTAyMjAwMDBBMzA4ODgxNEE4RDgwRjg4MDI5OEEyMkFBQzEwQzBEMEJFCi06MTAyMjEwMDA4QTE1MUZFOUVBOEUxMjE5RTlGNjhCMTM4ODE0MkNCMjdECi06MTAyMjIwMDA4NTA5ODgwMkFGRUUwQ0FBMEIyREU0Q0YyQUI2ODUyOENCCi06MTAyMjMwMDAyNTAyQzAyMEQxMEYwMDAwMjY1MjlFMThFOUQ3NkY2OEYyCi06MTAyMjQwMDAwMjYwMDIwRDI4ODIyNjY4ODAwOTg5MjBEMzBGMDg5OTMwCi06MTAyMjUwMDAwQzY1OTFGRDJBNTI5REMwRkQ5QTExNjRBMUYzMkIyMEJCCi06MTAyMjYwMDAwQ0MxQ0EwQ0I4MTEwNTg4MDgyRDgyODYwRUJFMEE3REU1Ci06MTAyMjcwMDBDMzAyNjAwMjBBMkVFMkEzNjhFMDA4MjYyMjAwMEU2NjZFCi06MTAyMjgwMDAwQzY1NjFGQjI4ODI4NURFODA2NDgyMDcyOTIwMDY5ODIwCi06MTAyMjkwMDAxMDI5OUNGOTY0OTIwNDJDMjA2Njg4MzFCMUNDMEMwQzc2Ci06MTAyMkEwMDA0NzJDMjQ2NjZFQzYwMjYwMDFCRDA4RkQ1MDY1RDFCNzlCCi06MTAyMkIwMDAxN0U5REExQ0U5QkQxOUU5QzQyQTIxMDQ4QjJEMjgzMDVECi06MTAyMkMwMDAxMDJEMjExRDBDODgxMDBCREIwOTBBODgwMjA5ODgwMkQ5Ci06MTAyMkQwMDAwQ0JCMDI2NDQxNTU4OTEwOUI5MDk3OTE5ODkyODQzNTZDCi06MTAyMkUwMDBEOUUwNjQ0MDZGRDczMERCNDBEODMwN0Y0NzE1MjczQ0JBCi06MTAyMkYwMDAxMEJDRTkyNjMyMTY4QzM5OTZFNjlDRTc4QTM3MjgzQ0QyCi06MTAyMzAwMDAwNDJBRTYwODBCMTMxNDY0MzA0QTJBODIxNjg2Nzk5QTQ2Ci06MTAyMzEwMDA5Njk2OTc4Qzc3OEE3RDlDOTgyQjgyMTcyQzdDMjA5QTk2Ci06MTAyMzIwMDA5QTJBOUMxODlCOTk4NjdCQjAzQjI5OEMwODZEQjkyMTExCi06MTAyMzMwMDA4QkM5OTZBNTI2OTIxNjJBQUMxOEI4OTk5QkExOTZBMDhGCi06MTAyMzQwMDA4QkM3ODZDRDlCQTIyQjkyMTU5NkE0OUJBMzg2Q0IyQ0U0Ci06MTAyMzUwMDBDQzIwMjZBNjA1QzAzNDZCNDQyMDA0M0IwQzA0NDgwOTVECi06MTAyMzYwMDAwRTg4MEE3RkI3MDVDMDkwOTk4OEJDODhDMDkwMEIxQTY4Ci06MTAyMzcwMDAxMjZEQUEwNjk5ODg5OThCMjg4QzE4MUNFOUE4MUJFOTZDCi06MTAyMzgwMDBBODE2RTk5REIxREQyQTIxMUMyM0U2MTMwRDBENEYyNjY5Ci06MTAyMzkwMDBFNjEyMkQyNTFEQzA2MDg3MjA3REE5MDdDMEQwMjgwQTIwCi06MTAyM0EwMDAwMDI4MjUxRDI2RTYxNzJDRTYxNjJCRTYxNTA1RDgxMTY0Ci06MTAyM0IwMDAxQUU5OTMyOEU2MTgwQTdBMDIyQUU2MTQyOTIwMDYyOTNGCi06MTAyM0MwMDA5Q0Y5NjQ5MTA2MkEyMDBDQzA5MDFCRTk3QzBDQUQxMThECi06MTAyM0QwMDBBNUREMkNEMjg1QUJBQUMwQjAyOUE0Q0YwQ0ZDMEIyQzU4Ci06MTAyM0UwMDBENjg1REEyMDhDMTcyRDEyMDY1ODExMEREMkEwRDEwRkU4Ci06MTAyM0YwMDA4QTM1NkZBNTQ2RDgzMDhCRDU2REE5MEM4QTg2MEE4QTk2Ci06MTAyNDAwMDAxNENCQTc3QUIzMzUyODhDMTBDMDgwMjgyNDY3MDgwQjFBCi06MTAyNDEwMDA0NzY1QjExQ0RBMjBEQjMwOEMxNzU4MTEzMUQzQTBDMENFCi06MTAyNDIwMDBDMUMwRDAyREE0MDM5QzE2NjNGRDI4MDA4NjM2NjQ2MUNDCi06MTAyNDMwMDAxNjg5MTA5QjkwOTc5MTk4OTI2M0ZFQTFDMDgxNjNGRkNCCi06MTAyNDQwMDBDOThBMTZDQ0E3REEyMERCMzA4QzE3NTgxMTI1QzAyMDlBCi06MTAyNDUwMDBEMTBGREEyMEMwQjY1ODExQjU2M0ZGRTQwMERBMjA4QjQzCi06MTAyNDYwMDAxMjU4MTFCMjYzRkZEOTAwOUYxODlFMTk4QTExMkIyMUFGCi06MTAyNDcwMDAwNDU4MTA0ODhFMTk4RjE4QzBCMDJCMjQ2NjYzRkUyRkE1Ci06MTAyNDgwMDBDMDgwNjNGRTAxREEyMERCMzA4QzE3REQ1MDU4MTIyRDNFCi06MTAyNDkwMDBEMkEwRDEwRkRBMjA1ODExQTU2M0ZGQTQyRDIxMjNDMEFCCi06MTAyNEEwMDBDODdEQzMwMjYzRkUwODlGMTg4QTExMkIyMTA0MkMyMENCCi06MTAyNEIwMDA2Njk4MTlCMUNDMEMwQzQ3MkMyNDY2NTgxMDM2OEUxOTJFCi06MTAyNEMwMDA4RjE4QzBEMDJEMjQ2NjYzRkRFNTAwMDAyNjIxMjNCMEJGCi06MTAyNEQwMDA2NjA2MDY0RjI2MjUyMzY1NkVFQTI4MjA2QTdGODcwNTUzCi06MTAyNEUwMDAwODI5NDE2NDkwRkRDMEQwMUJFOTNGMTlFOTRFMjYyMDIwCi06MTAyNEYwMDAwNzIzRTYxQkIxNjYwOTdBMDIyQkU2MUEyODIwMEEyRDZCCi06MTAyNTAwMDBFNjFEMkFFNjFFMDk4ODAyMjhFNjFDODgyNjA2MDY0N0RDCi06MTAyNTEwMDAyOEU2MjA4QjI4MjZFNTNFMkJFNjIxMkQyNDA3MkMyMEJCCi06MTAyNTIwMDAwNjJBMjA2NDJDQ0NGRDY0QzA5REI0RkY2M0ZFOTUwMDk4Ci06MTAyNTMwMDAwMERCMzBEQTIwOEQxNkMwQ0UyRTBBODAyQzI0Njg4QzY5Ci06MTAyNTQwMDAxNzU4MTA3MkQyQTBEMTBGOEUxMDI2MzIxNjFGRTkxNTFGCi06MTAyNTUwMDAwNjI2MTQ4RkY2MkJFNjEyOTdFMTI3RTYxMzI4RTYxNEQ5Ci06MTAyNTYwMDBBNkZGMENGRjAyOUZFMEMxRjYyRUVDNDgyNkVDQzA2NEVCCi06MTAyNTcwMDA2RDZCODQzNUMwODA2NDREREJEOUUwREMzMERCRTBEREExCi06MTAyNTgwMDAzMEIxODgxNEU5Mjk4NkM5OEFDODI3OURGRjJDQ0MxMDUwCi06MTAyNTkwMDAyOTlDMTAyQTc2MzIyQTc2MzAwNDY0MDExQUU5MjQyNDEwCi06MTAyNUEwMDA3NjMxQUE0NDI0NzYzMzJBRDIxNjE3RTkyMTlBQjYwNzNGCi06MTAyNUIwMDA2NjAxOTZCNzg0QzNCQ0JCOTRCNTg0MzVCNERENzQ4MzFGCi06MTAyNUMwMDBCRjJEMjExRDYzRkQ4RDAwNjRBRjVFMURFOEY2MkMyMDNDCi06MTAyNUQwMDAxNjhERDIwQUNDMEMwMEQxMDQwMENDMUFBQ0JDOUMyOUJDCi06MTAyNUUwMDA2M0ZGNDYwMDJCMjEwNDZFQjgyMjJDMjA2NkI4Q0MwQzY5Ci06MTAyNUYwMDAwQzQ3MkMyNDY2QzlDNDlGMTg5RTE5OEExMTU4MEZFNUYwCi06MTAyNjAwMDA4RTE5OEYxOEMwMzQ4NzIwQzBEMDJEMjQ2NkMwNjgyNjRDCi06MTAyNjEwMDAyNDA2NjNGRUQwMDAwMDAwNkMxMDA4MjkyMDA2Mjg5Q0M4Ci06MTAyNjIwMDBGODY1ODJDMzI5MjEwMkMwQUEwOTA5NEM2NTkwRTYyQkVFCi06MTAyNjMwMDAyMDBDMTZFOERBMENCQzExQTZDQzJFQzI4NkMxRDI3RUM0Ci06MTAyNjQwMDBEMzAyNjAwMjhFMTlFOEQ2MDlCOTBBMjk5MkEzMkExNjg0Ci06MTAyNjUwMDAwMjY4OTAwNzhBMjAwOUFBMEM2NUEyNzcyOUMyODU2NEJFCi06MTAyNjYwMDA5MjcxMkI2MjlFMUFFOENDNkZCODAyNjAwMjZFMkFBMkE5Ci06MTAyNjcwMDAyNjI5MTYwMTY4QTAwODJCMjIwMDBBQkIwQzY1QjI1QzUzCi06MTAyNjgwMDAyOTYyOURDMThDNjQ5MjU0MkEyMTIwMEE4MDYwOTkxMDhECi06MTAyNjkwMDAyQzIwM0NDN0VGMDAwRjNFMDEwQjNFQjFCRDBGREIzOUQ0Ci06MTAyNkEwMDAwQkJCMDk4RjI2MERCRDExMkREQzFDMEQwRDQxMEVERDYwCi06MTAyNkIwMDAwMzhFMjdCMUREMEQwRDQxMEZFRTBDMERCQjBCMkJCQ0I2Ci06MTAyNkMwMDAxQzBCQjcwMjdFQzcxQzJDMjEyNTdCQ0IxNjJEMUFGQ0I4Ci06MTAyNkQwMDAwQ0JBMEMwREExNjAwMDA5M0UwMTA3M0VCMTc4MDk4N0Q0Ci06MTAyNkUwMDAzOTBCNzcwQTc3RUIwMjYwMDIwNjJCMjEyMzI4MjEyMTgwCi06MTAyNkYwMDBCMUJCMEIwQjRGMkIyNTIzN0I4QjI5QjBCRDJEMjUyMzg1Ci06MTAyNzAwMDBDODU1REEyMERCMzA1ODBGRjAyOTIxMDJDQzk2QzBFOEZBCi06MTAyNzEwMDAwRTlFMDIyRTI1MDJDQzU3REEyMERCMzBEQzQwNTgxMDBBCi06MTAyNzIwMDA3MEMwMjBEMTBGMkMyMDY2ODkzMUIxQ0MwQzBDNDcyQzA1Ci06MTAyNzMwMDAyNDY2NkVDNjAyNjAwMUNGMDlGRDUwNjVEMUM5MkYwQTFCCi06MTAyNzQwMDAwMTI4MzAxMTI5MjIxNDY0ODAxMTJBMjIxQjA5MEM0NDBCCi06MTAyNzUwMDAwMEMxMDQwMEZCMUEwQkFBMDIyQTI2MUIyRDMwMTBDMDUwCi06MTAyNzYwMDBBMEMwRTA4ODMwMUJFODhGOTQxMzk1MTQyNDBBMDEyNTNCCi06MTAyNzcwMDAyMDNDMkJCMDIyMDg4QzE0Nzc4NzA0QzBGMTBCRkEzODY4Ci06MTAyNzgwMDBDMEYyQzA4NDA4NTgwMTBGNUYwMTBGNEUzODA1MzU0MDc0Ci06MTAyNzkwMDAwN0VFMTBDMEYwMDg0RjM4MDhGRjEwMEZFRTAyMjhEQ0RCCi06MTAyN0EwMDBGRUMwRjAwODRGMzg4NDJCMEJBODEwMEFGRjEwMkEyMTE2Ci06MTAyN0IwMDAyMDBGODgwMjBFODgwMjA4NDQwMjE4RTg5RThGMTEwODM0Ci06MTAyN0MwMDA0NDAyMjgyMTI1MEEyQTE0MDgyODE0MDQ4ODExMEE4ODlBCi06MTAyN0QwMDAwMjJBMjEwNDk0RjA4RTIwMDRENDEwMDhFRTExMDRFRTk1Ci06MTAyN0UwMDAwMkMwNEEwNEVFMDI5RUYxODQyQTA4QUUxMTBFREUwMkY3Ci06MTAyN0YwMDA5NEY0MEE1NDExMEU0NDAyMDU1NTEwMEMxRTQwOTRGNzJGCi06MTAyODAwMDAwN0VFMTAwRTU1MDIwODU1MDJDMDgxOTVGNjg0MzNDMEJDCi06MTAyODEwMDA1MDk0RjNCMTk0OEUzMjk1Rjg5OEY5OUVGMkMwODBDMTJECi06MTAyODIwMDBFQzI0MjYxNDk4RkI5RUY1OTlGQTg1Mzg5NUZDODQzQTk5Ci06MTAyODMwMDA5NEZEOEUzQjlFRkU4ODM5OThGRjg1MzUyNUY2MTA4NEUxCi06MTAyODQwMDAzNjg1MTQyNEY2MTE4RTM3ODQxMzJFRjYxMkMwRTA2NEY4Ci06MTAyODUwMDBCMDQ5ODkzMDc3OTc0NDJCMzAxMDg4MzM4QzExMUZFOEFBCi06MTAyODYwMDA2MThEMzIyRkM2MTRDMEY0MkZDNjE1OEYyQjJFQzYxOUJBCi06MTAyODcwMDAyREM2MUEyOEM2MUIwNEFEMTEwOTk4NDAwNjg4MTEwOEY4Ci06MTAyODgwMDBERDAyMERCQjAyMThFODU2QzFEMDBEQkIwMjA4RkYwMkU1Ci06MTAyODkwMDAyRkM2MTYyQkM2MTgyODBBMEUyODE2MDIyQjIwMEM4OEM1Ci06MTAyOEEwMDAxMjFDRTg0NjBDQjkxMUE2OTkyQTkyODVBQ0JCMkVCNDJECi06MTAyOEIwMDBDRjBBODgwQjI4OTY4NUM5NzE4QjI2OEEyOTA3QkIwODAxCi06MTAyOEMwMDAyQjI2MDYwQkFBMEMwQTBBNDgyQTI1MjU2NTUwNDhDMDYzCi06MTAyOEQwMDAyMEQxMEYwMERBMjA1ODEwOTU2M0ZFMzkwMERBMjBDMEFECi06MTAyOEUwMDBCNjU4MTA5MjYzRkUyRTAwNjg5NzM4QzAyMEQxMEYwMEIyCi06MTAyOEYwMDAwMERBMjBEQjcwNTgxMDRGQzBDMEMwRDEwQURBMzkwQUE0Ci06MTAyOTAwMDBEQzM4NjVDREU0NjNGRTBEOEExMDJCMjEwNDU4MEYyMUJECi06MTAyOTEwMDBDMEUwMkUyNDY2NjNGRTI1REI0MDJBMkM3NDU4MDkxMjgxCi06MTAyOTIwMDBEMkEwRDEwRkRBMjA1ODBGMjY2M0ZDRjc2QzEwMDRDMDM4Ci06MTAyOTMwMDAyMEQxMEYwMDZDMTAwNDI3MEE4MDFDRTgzRjFERTgzRkRGCi06MTAyOTQwMDAxQUU4MTcwQzI5MTFBQTk5MkEyQ0ZDMkI5Mjg1MERBQTlBCi06MTAyOTUwMDAwMjlDQjE5QUIwQzA1MTEzRTgzQzI4OTI4NTE2RTgzODIxCi06MTAyOTYwMDAxNEU4MzlBNjI2MDQyNDBBQjg4ODI4OTY4NTIzNDY5MUI3Ci06MTAyOTcwMDBBNzY2MjU2NDlGRDEwRjAwNkMxMDBBRDYzMDI4MzAxMDRFCi06MTAyOTgwMDAyOTIwMDYyODhDRjk2NDgyOTc2ODk4MEIyQTlDRjk2NTlGCi06MTAyOTkwMDBBMUIyMDIyQTAyNTgwRjBBODkzNzFCRTgwMkM4OTE2NEMzCi06MTAyOUEwMDA1MjBFMkEyMTAyMEEwQzRDNjVDMjU1OEQzMDE5RTdGQkU0Ci06MTAyOUIwMDA3NEQ3MDUyRTIxMjM2NUUyOUEyRjkyOUUxQUU3Rjc2RkFFCi06MTAyOUMwMDBGODAyNjAwMjUwMkFBMjI2NjhBMDA4MkMyMjAwMEFDQzM1Ci06MTAyOUQwMDAwQzY1QzI0MTJBOTI5RDY0QTIzQjlBMTUxRkU3RjE4REI2Ci06MTAyOUUwMDA2N0MxRTZDOEREMkI2MjA2MThFN0VGNjRCMDA1Mjg4MEYyCi06MTAyOUYwMDAyMTdCOEI0MzJCMjAwQzE4RTdFOTBDQkMxMUE4Q0MyOUI4Ci06MTAyQTAwMDBDMjg2NzlFQjQ2MEZCRTBBMkVFMkEzNjhFMDA1MkYyMkFDCi06MTAyQTEwMDAwMDdFRjkzNzJDQzI4NTlDMTg2NEMyMkYyQjIxMkY4NzhBCi06MTAyQTIwMDA2NjBCN0IzNjBCNzkwQzZGOUQyNjZFRDI0NjJDMjAzREIzCi06MTAyQTMwMDA3QkM3NDBDRTU1NjAwMDFFMkEyMDBDQzFCMjhDMjA1OEE2Ci06MTAyQTQwMDAxMDZGOUExODY0QTI0MThENjc2M0ZGQ0ZDMEMwNjNGRjA3Ci06MTAyQTUwMDBDNUQ3QjA2M0ZGRDMwMEMwRTA2MDAwMDIyRTYwMDMwRTU0Ci06MTAyQTYwMDBEQjBDNkVCMjBFREM3MDBDRUExMUFBNkEyQUFDMjA1ODlDCi06MTAyQTcwMDAwMTk4RDdBMERBMjBEQjcwQzFDODJEMjEyMDU4MTAxNThECi06MTAyQTgwMDA4QzI2OEIyNzlBMTYwQ0JCMEM3QUIzMzQ4RjE4ODk2MzZCCi06MTAyQTkwMDA5OUYzODg2Mjk4RjI4RTY1OUVGODJENjAxMDhBMTg5REQxCi06MTAyQUEwMDAxNzY4RDcyOUMwRDA5REE5MkMyMjE4MkIyMjEzOUNBQkM0Ci06MTAyQUIwMDA5QkFBOTdBNThFNjY3RTczMDI2MDAwOTdDRjU4NjAwMDMwCi06MTAyQUMwMDAxRkRBMjA4QjE2NTgwRkRCNjVBMTM1NjNGRkJEQzA4MTZGCi06MTAyQUQwMDBDMDkwOEYxOEMwQTI5QUY5OTlGQjk4RkE5N0Y1NjNGRkY2Ci06MTAyQUUwMDBEMkRCMzBEQTIwREM0MDU4MEY3RUMwNTFENkEwQzBDMDA3Ci06MTAyQUYwMDAyQkEwMTAyQ0E0MDM5QjE3MkMxMjA4MDIyQTAyMDY2QjkxCi06MTAyQjAwMDAwMkRGNzAyRDYwMDM4RTE3OUQxNDlFMTAwQ0REMTFDMDI2Ci06MTAyQjEwMDBFMEFENkQyRERDMjA1ODAxMTc4QzE0OEIxNkFDQUMyQzVECi06MTAyQjIwMDA2NDAzOEEyNjg5MjlBQkFBMEE5OTBDOUEyNjg4NjYwOTIxCi06MTAyQjMwMDAwOTQ4MjkyNTI1MDc4ODBDOTg2NjJGMjIxOEE3RkYyRkZBCi06MTAyQjQwMDAyNjE4NjNGRTk2REEyMERCMzBEQzQwREQ1MDU4MTA3RDFECi06MTAyQjUwMDBEMkEwRDEwRkMwMzAyQzIwNjY4OTYxQjFDQzBDMEM0N0JCCi06MTAyQjYwMDAyQzI0NjY2RUM2MDI2MDAwQ0VDMDMwMDlGRDUwNjVEMEQwCi06MTAyQjcwMDBDNjhFNjc2NEUwNjk2NDcwNjZEQjYwOEMxOERGNzBEQUFCCi06MTAyQjgwMDAyMDJENjAwMzhFMTcwQ0REMTE5RTEwQUQ2RDJEREMyMDA1Ci06MTAyQjkwMDAxRUU3QTc1ODAwRjgyMzI2MThEQTIwOEIxNkRDNDAyRkYyCi06MTAyQkEwMDAyMjEzREQ1MEIxRkYyRjI2MTM1ODBGMUREMkEwRDEwRkQ1Ci06MTAyQkIwMDAwMDI4MjAzRDA4NDg0MDY1OERFNzZGOTUzRURBMzA4RDRFCi06MTAyQkMwMDBCNTZEOTkwQzhDQTgwQzhDMTRDQUNGN0NEMzJEMkFBQzczCi06MTAyQkQwMDAxMEMwOTAyOTI0NjcwOTBENDc2NEREQzU2MDAwOEUwMDkwCi06MTAyQkUwMDAyQzEyMDgwNjZCMDIyRDZDMjAwNzdGMDI4RTE3REEyMDRDCi06MTAyQkYwMDA5RTEwMUVFNzhFNTgwMDdDNjNGRjlBMDBDMDkxNjNGRjExCi06MTAyQzAwMDBEMTY1NTA4MERBMjBEQjYwREM0MDU4MEYzNUMwMjBDMDMxCi06MTAyQzEwMDBGMDJGQTQwM0QxMEZEQTIwQzBCNjU4MEZDNDYzRkZFMDMxCi06MTAyQzIwMDAwMDZGOTUwMjYzRkQ3MERBMjBEQjMwREM0MERENTBDNEJDCi06MTAyQzMwMDBFMDU4MEVCNkQyQTBEMTBGOEExNTJCMjEwNDU4MEU1NTlDCi06MTAyQzQwMDAyMzI0NjYyODYwMTA5ODE3NjNGRjI1MDBEQTIwNTgwRkE4Ci06MTAyQzUwMDBCNzYzRkZBQ0M4NThEQjMwREEyMDU4MEU5QjJBMjEwMjNDCi06MTAyQzYwMDA2NUFGOURDMDk0MDlBOTAyMjkyNTAyNjNGRjkyREIzMDVDCi06MTAyQzcwMDBEQzQwREQ1MEMwQTMyRTBBODAyQTI0NjhEQTIwNTgwRURBCi06MTAyQzgwMDBBM0QyQTBEMTBGQzAyMEQxMEZEQTIwMkIyMDBDNTgwRkQ3Ci06MTAyQzkwMDBDMDYzRkY2QzZDMTAwNDI4MjAwNkMwNjIyODhDRjg2NUE1Ci06MTAyQ0EwMDA4MTI1QzA1MEM3REYyQjIyMUJDMEUxMkEyMDZCMjkyMUMwCi06MTAyQ0IwMDAyMzAwQTEwNEIwOTkyOTI1MjNCMUFBMDBFQzFBMEJDNDYyCi06MTAyQ0MwMDAwMTBBMEE0NDJBMjQ2QjA0RTQzOTBEQ0MwMzBDQkIwMTJECi06MTAyQ0QwMDAyQjI2MUI2NDQwNjkyOTIwMEMxQkU3MzAwQzlBMTEwQjMyCi06MTAyQ0UwMDBBQTA4MkZBMjg2MUJFNzJFNkZGOTAyNjAwMEI2MEI5Qjg1Ci06MTAyQ0YwMDAwQTJCQjJBMzY4QjAwODJDMjIwMDBCQ0MwQzY1QzBBNDMwCi06MTAyRDAwMDAyQkEyODUxQ0U3NTI2NEIwOUI4ODJCMkYyMTA0MEM4OEQyCi06MTAyRDEwMDAwMjk4QjA4NDIwQzA4NTA4NDQxMTA4NDQwMjk0QjE4NDBDCi06MTAyRDIwMDAyQTA4RkYxMTk0QjQ4RTM0OUZCNzlFQjVDMDQwMURFN0FBCi06MTAyRDMwMDAyMzJFQTI4NTBEOUQwODJFRUMyODJFQTY4NTI1RDRDRjA2Ci06MTAyRDQwMDAyOTIxMDIwOTA5NEM2ODk0MUE2ODk4MjBDOTQwMkEyMTRGCi06MTAyRDUwMDAwMjY1QTAwQjJBMjIxRTJCMjIxRDdBQjEwMjY1QTA3OUUyCi06MTAyRDYwMDBDMDIwRDEwRjJDMjEyMzY1Q0ZERTYwMDAwODJFMjEyMTQ5Ci06MTAyRDcwMDAyRDIxMjM3RURCRDUyQjIyMUUyRjIyMUQyNTI1MDI3QjE0Ci06MTAyRDgwMDBGOTAxQzBCMDY0QkZDNDEzRTcwNDJDQjAwNzI4QjAwMDM5Ci06MTAyRDkwMDBEQTIwMDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUIyCi06MTAyREEwMDBBRkU3NjNGRkE2MkEyQzc0QzBCMDJDMEEwMjU4MEQ4RDIxCi06MTAyREIwMDAxQ0U3Mjg5Q0EwOEIyMDA4QkIxMTA2QkIwMjlCQTE4OUE1Ci06MTAyREMwMDAzNDk5QTI2M0ZGNzkwMDAwMjYyNDY4REEyMERCMzBEQzI2Ci06MTAyREQwMDA0MERENTA1ODBGRENEMkEwRDEwRkRBMjAyQjIwMEM1ODQ4Ci06MTAyREUwMDAwRjUzQzAyMEQxMEYwMDAwNkMxMDA2MDczRDE0QzA4MEE3Ci06MTAyREYwMDBEQzMwREI0MERBMjBDMDQ3QzAyMTIzQkMzMDAzMjgzODU4Ci06MTAyRTAwMDAwODA4NDI3NzQwMDIyRERDMDE2NDgxNTcxRUU2RTAxOTc0Ci06MTAyRTEwMDBFNkUxMjlFNjdFNkREQTA1MDA1MDg4MDAzMDhDQzBFMERFCi06MTAyRTIwMDBDMDIwMjVBMDNDMTRFNkRGQjZEMzhGQzBDMEQwMEY4N0VBCi06MTAyRTMwMDAxNDI0NDAyMjBGODk0MDk0MTA3N0Y3MDRDMDgxMDQ4MjQzCi06MTAyRTQwMDAzOEMwRjEwQjI4MTBDMDQ0QzAyMjA0NTQwMTA0RkQzOERFCi06MTAyRTUwMDAwMjUyMDEwMkZFMzgwOEREMTA4MjFDMDdFRTEwMEU2RUQxCi06MTAyRTYwMDAwMjBFREQwMjI0MkNGRUMwRTAwNEZFMzgwQUVFMTAwRTM1Ci06MTAyRTcwMDA4ODAyMEQ4ODAyOERBQjFFRTZDRjA4RDgwMjBFODgwMkFDCi06MTAyRTgwMDA5OEIwQzBFODA0MjgxMDBFNUUwMTg0QTAyNUExMjUwODkyCi06MTAyRTkwMDA0NDExMDg0NDAyMDUyNTE0MDQ1NTExMDQzNDAyQzA4MTZDCi06MTAyRUEwMDAwRThFMzk5NEIxOEZBQTg0MTA5RkI0NzU2NjBBMjZBMTNDCi06MTAyRUIwMDAxRkMwRjIwNjI2MTQ2MDAwMDcyNkExMjBDMEYyMDYyNkQ1Ci06MTAyRUMwMDAxNDA1NjUwMjBGNzcwMTA3ODczOTA1RTYxMDA3NzgxMEFBCi06MTAyRUQwMDAwODY2MDIwNjU1MDI5NUI2MjVBMTA0MEFFNjExMDg1OEFGCi06MTAyRUUwMDAxMTA4MjgwMjA4NjYwMjk2QjdDMDYwNjQ0MDU2NjQ5MEQ0Ci06MTAyRUYwMDA1MzA2N0UxMUMwRjQ4OUMyODhDMzBCMzQwQjk2NDU5OEUzCi06MTAyRjAwMDA0Nzk5NDYxOEU2Qjc5RjQxMDQ1OTExMEU5OTAyMUZFNkVBCi06MTAyRjEwMDBCNTAyMEU0NzA4RDgwMjlGNDA5ODQyMEU5OTAyQjQzODc1Ci06MTAyRjIwMDBDMUUwMEU5OTAyOTk0NDJGQTAwQzBDRjkxMTE0RTZBM0VDCi06MTAyRjMwMDAxRUU2OUJBNEZGQUU5OTJFOTI4NTI2RjRDRjBFODgwQjM5Ci06MTAyRjQwMDAyODk2ODVEMTBGMkJBMDBDMENCRTExMUNFNjlDMUZFNjA5Ci06MTAyRjUwMDA5M0FDQkJBRkVFMkRFMjg1MjZCNENGMEQzRDBCMkRFNjM1Ci06MTAyRjYwMDA4NUQxMEYwMEMwODAwNTI4Mzg3ODQ4MDI2M0ZFQTU2MzJDCi06MTAyRjcwMDBGRTk5MDAwMDZDMTAwNkMwQjBDMEE2QzBDMDY1NzBGMDFECi06MTAyRjgwMDA4ODMwQzAzMDA4ODcxNDA4ODg0MDY1ODBEM0MwRTBDMDBFCi06MTAyRjkwMDA5MUMwRDRDMDgyMjUyMDNDMEIzRjEwOTcxMjgzMUNDMEU3Ci06MTAyRkEwMDA3MDA4NTgwMTBENUQwMTA4OTczOEMwODAwQjk4MzgwN0VDCi06MTAyRkIwMDA3NzEwMDQ4ODEwMDg2ODAyMDg3NzAyQzA4MDBEOTgzOERFCi06MTAyRkMwMDAyRDNDRkUwODg4MTAwRDlFMzg4RDJCMEFFRTEwMDhFRTYxCi06MTAyRkQwMDAwMjA3RUUwMjBDQjgxMDBGREQwMjA1M0I0MDBFREQwMkM5Ci06MTAyRkUwMDA5RDQwODkyMDA0M0QxMDA4OTkxMTBEOTkwMjJEMjEwNDVFCi06MTAyRkYwMDAwOUE5MDIwOEREMTE5OTQxODcyQTA1QjkxMDBEM0QwMjgyCi06MTAzMDAwMDAwQUJCMTEwREJCMDIwODc3MDI5NzQ0MjgyMTI1ODcxMkJECi06MTAzMDEwMDAwODI4MTQwNDg4MTEwNzFFNDAwN0VFMTAwRTk5MDI3NTQ3Ci06MTAzMDIwMDA2NjA5MjYyMTFGMDYyNjE0NjAwMDA2MDAyNjIxMjAwNkI4Ci06MTAzMDMwMDAyNjE0MDg2ODAyOUI0NzA5ODgwMjk4NDYyOTIwMENEMjZBCi06MTAzMDQwMDBDMEMwODAwQzlFMTExQkU2NUQxRkU2NTRBQjk5QUZFRTJECi06MTAzMDUwMDAyREUyODUyODk0Q0YwREFEMEIyREU2ODVEMTBGMDAwMDE0Ci06MTAzMDYwMDAwMDFGRTY1MDJGRjAyMkMwMzA2NUZGMjBDMDMxNjNGRjAzCi06MTAzMDcwMDAxQkRENDA4RTUxQ0FFMDBFNzgzNjk4MTAwODc3MENCMkVFCi06MTAzMDgwMDBBQUIxQkI4RjUwMkREQzEwOThEOTlGRDg4OTUzOEY1MjhECi06MTAzMDkwMDA5OTExOTlEQjlGREE3RTgzMEFCMUNDMjU1QzEwQzk3ODNGCi06MTAzMEEwMDA2M0ZGQ0YwMDg4MTA4RDExMDhFNzBDOTc1MUFEOEREN0M1Ci06MTAzMEIwMDBGMDc4REIwMUIxRjc5RDUzOTc1Mjg4MzBDMDMwMDg4NzE0Ci06MTAzMEMwMDAxNDA4ODg0MDY0OEVDNTY1QkZBMTYzRkY5MzAwMDAwMEFCCi06MTAzMEQwMDA2QzEwMDRENzIwQjAzQTg4MjBDMDMwODIyMUNBQTE3NDc1Ci06MTAzMEUwMDAyQjFGMjk3MjA0NkQwODBGQzk4MUM5OTI4NTc1QjEzM0YwCi06MTAzMEYwMDBBMjUyN0EzQjBDNzQyQjA5NjNGRkU5MDAwMDY0OUZFQjNBCi06MTAzMTAwMDBEMTBGRDI0MEQxMEYwMDAwNkMxMDA4RDYzMEMwNzA5NTlFCi06MTAzMTEwMDAxNURBNDA4RTM5MTRFNjIzOUExNDY0RTAwMjY0NTFGOEZCCi06MTAzMTIwMDAyOTIwMDYyQTlDRjg2NUEyNUIyQTIxMDIwQTBCNEM2NTFECi06MTAzMTMwMDBCMjFCMkMzMjAwMTVFNjE5NzRDNzA1MkQyMTIzNjVEMzY3Ci06MTAzMTQwMDAyMDJFNTI5RTFBRTYxNTZGRTgwMjYwMDIxNzJBQTIyNjY4Ci06MTAzMTUwMDA2OEEwMDgyQjIyMDAwQUJCMEM2NUIyMDgyRTUyOUQxREU4Ci06MTAzMTYwMDBFNjEwNjRFMUZGOEIzODY0QjIyOTlFMTZDOEJDOEQ2OUY1Ci06MTAzMTcwMDAxRUU2MEQ2NEQwMDUyRUUwMjE3QkVCNDkyRTIwMEMxOEI1Ci06MTAzMTgwMDBFNjA3MENFRjExQThGRjI5RjI4NkMxODY3OThCNEExNzUyCi06MTAzMTkwMDBFNjA0MDdFNzBBMjc3MkEzNjg3MDA0ODgyMDc3ODkzOTU0Ci06MTAzMUEwMDAyNUYyODU2NDUyOUUyNzIxMkUwN0I3MzYwN0I5MEM2RjhBCi06MTAzMUIwMDA5RDAxRDdCMDg5Njk2RTkyNDIyODIwM0Q3Qjg3M0M4QTY5Ci06MTAzMUMwMDAxNUNEQUY2MDAwMThDMUIyOEMyMDJBMjAwQzU4MEU4QjkwCi06MTAzMUQwMDBENUEwNjRBMkE4OEI2ODYzRkZDQkMwNTA2M0ZGQzNDMEI3Ci06MTAzMUUwMDBFMDYwMDAwMjJFNjAwMzBFOUIwQzZFQjIwRURDNzAwQ0QxCi06MTAzMUYwMDBFQTExQUE2QTJBQUMyODVCRkZCNkQ3QTBEQTIwREI3MEY2Ci06MTAzMjAwMDBDMUM0MkQyMTFGNTgwRTMzOEMyNjhCMjdENEEwMENCQjk0Ci06MTAzMjEwMDAwQzdBQjMyNThBNjNDMDkwOUE1Mzg4NjI5OTU4OTg1MjYxCi06MTAzMjIwMDA4RjY1OUY1OThFNjc5RTVCOEQ2Njk3NTU5RDVBOEI2OEZCCi06MTAzMjMwMDA3QjdCNzQ4QjE1Q0VCMzYwMDAwRERBMjBEQjQwNTgwRDFDCi06MTAzMjQwMDBGRDY1QTEwOTYzRkZDQzAwREEyMERCMzA4QzE0NTgwRDNBCi06MTAzMjUwMDBBNEQ2QTBDMEMwQzBEMTlEMTUyQ0E0MDNEQTIwREI2MDg5Ci06MTAzMjYwMDBERjcwREM1MEMwRTAyNTYwMDM5RTEwMUVFNUU2MEM1REJCCi06MTAzMjcwMDAxMUFENkQyRERDMjg1QkZGM0Y4RTY2QTVBODhGNjcyOEZBCi06MTAzMjgwMDA2NDAzQUY3Rjc3RkIwMUIxRUU5RTY2OUY2NzhEMjY4QzRFCi06MTAzMjkwMDAyOUE0REQwRENDMEM5RDI2OEI2ODBDMEM0ODJDMjUyNTEzCi06MTAzMkEwMDAwN0JCMEM5QjY4NjNGRUMzMkMyMDY2ODk2MUIxQ0MwQzA0Ci06MTAzMkIwMDAwQzQ3MkMyNDY2NkVDNjAyNjAwMEI0MDlGRDUwNjVEMDMwCi06MTAzMkMwMDBBRUNCQkI4RTY5Q0JFN0RCNjBEQzUwREY3MERBMjAxRTUzCi06MTAzMkQwMDBFNUUxMkQ2MDAzQzA4MDk4MTAwQ0REMTFBRDZEMkREQzkzCi06MTAzMkUwMDAyODVCRkYyNDhCMTVDODRGOEEyNjg5MjlBNEFBOUEyNjExCi06MTAzMkYwMDAwQTk5MEMwOTA5NDgyOTI1MjU2NUIxM0JDMDIwRDEwRjQxCi06MTAzMzAwMDBEQjYwMkQ2QzI4REY3MERBMjBDMEMwMUVFNUQyOUMxMDc3Ci06MTAzMzEwMDBEQzUwNUJGRUI1NjNGRkNCMDAyRDIwM0QwRDRENDA2NUJECi06MTAzMzIwMDBEREZENkZFNTIyREEzMDhGNDU2REU5MEM4RUFBMEU4RTM5Ci06MTAzMzMwMDAxNEM5RTM3RUYzMTEyQUFDMTBDMDkwMjkyNDY3MDkwRjQ5Ci06MTAzMzQwMDA0NzY0RkREQjYwMDE0MTAwQzA5MTYzRkZFRDAwODgxNTFCCi06MTAzMzUwMDA2NTgxNENEQTIwREI2MDhDMTQ1ODBENjFDMDIwQzA5MDcwCi06MTAzMzYwMDAyOUE0MDNEMTBGREEyMEMwQjY1ODBERjA2M0ZGREUwMEE4Ci06MTAzMzcwMDA4QTE2MkIyMTA0NTgwQzg3QzBBMDJBMjQ2NjhCNjg2MzA4Ci06MTAzMzgwMDBGRjNFMDAwMDAwMkI5Q0Y5NjVCMEM1REEyMDU4MEM4QzdDCi06MTAzMzkwMDA2M0ZEOTUwMDJCMjAwQzBDQkExMUE1QUEyRkEyODZDMUEzCi06MTAzM0EwMDBDMjdGQzMwMjYwMDBGQzBEQjkwQTI5OTJBMzY4OTAwNzhFCi06MTAzM0IwMDA4QzIwMDlDQzBDNjVDMEVCMjZBMjg1NjQ2MEU1MkMyMDJFCi06MTAzM0MwMDA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NkZDNjAyNzA5NjBFCi06MTAzM0QwMDAwQURBRTAyQjIxMDQ1ODBDNkYyNzI0NjY4OTMwNzc5NzhFCi06MTAzM0UwMDA0QjE4RTU3RjFERTU4MDhBMzI4QjMzQzBGNDJDMjEwNDE1Ci06MTAzM0YwMDAwOTlFNDAwNkVFMTEwNENDMTEwRUNDMDI5RjYxQzFFMDgzCi06MTAzNDAwMDAwRUNDMDI5RDYwOEYyQjlBNjY5QjY3OUM2NDk3NjUwODIzCi06MTAzNDEwMDBGRjAyOUY2MjJGMjAwQzE4RTU2OTBDRkUxMUE1RUUyRDBFCi06MTAzNDIwMDBFMjg1QThGRjI3RjRDRjJEREMyMDJERTY4NThGMTU2NURBCi06MTAzNDMwMDBGMDkxQzAyMEQxMEYwMDAwMkEyQzc0OEIxNDU4MDY0QTNBCi06MTAzNDQwMDBEMkEwRDEwRjAwREEyMERCRTA1ODBEQjg2M0ZFRkUwMEY5Ci06MTAzNDUwMDAwMERBMjBEQjMwOEMxNDhEMTU1ODBFM0FEMkEwRDEwRjMzCi06MTAzNDYwMDAwMDAwODgxNUM4ODhEQTIwREIzMDU4MEM5NzJBMjEwMjIyCi06MTAzNDcwMDA2NUFFREFDMDk0MDlBOTAyMjkyNTAyNjNGRUNGREEyMERECi06MTAzNDgwMDAyQjIwMEM1ODBEQzM2M0ZFQzQyNzI0NjhEQTIwREIzMEUwCi06MTAzNDkwMDAyQzEyMDQyRDEyMDUyRTBBODA1ODBDOUM2M0ZDODAwMDBGCi06MTAzNEEwMDBDMDIwRDEwRkRBMjA1ODBEQTE4QTE1Q0RBMURBMjAwMzUyCi06MTAzNEIwMDAzQjAyMkMxMjA0NTgwRDBBMjdBNDAzQzAyMEQxMEYwMDkwCi06MTAzNEMwMDBDMDIwRDEwRjJBMkM3NDhCMTQ1ODA2MjdEMkEwRDEwRkZDCi06MTAzNEQwMDA2QzEwMEUyODIxMDI5NDEwMDgwODRDNjU4MzVFMUZFNUNECi06MTAzNEUwMDAyRjI5RjI5RTZGOTgwMjYwMDM2MjFERTUyQjI5RDIyNkQ4Ci06MTAzNEYwMDA2ODkwMDgyQTIyMDAwOUFBMEM2NUEzNTAyQ0YyOUQ2NDRBCi06MTAzNTAwMDBDMzRBMkIyMDBDMENCNjExQUY2NjI4NjI4NkMxRUM3ODNBCi06MTAzNTEwMDBFMzAyNjAwMzQyMTlFNTIyMDlCOTBBMjk5MkEzNjg5MERGCi06MTAzNTIwMDAwNzhBMjAwOUFBMEM2NUEzMkUyNDYyODU2NDQzMjhDMDVCCi06MTAzNTMwMDBFMTJBMzEwOUMwNzAyNzI0NjY4OTM1OUExMjk5MkE4OEIwCi06MTAzNTQwMDAzNjk5MTM5ODJCODkzNzk4MTQ5OTJDODgzODk5MTUwODJGCi06MTAzNTUwMDA1ODE0OTgxNjk4MkQ4OTM5MkEyNTA0MkUyNTFEMjkyNUI5Ci06MTAzNTYwMDAxQzI4MzAyOEMwOTIyODI0M0MyQTMwMjkwODA4NDc5ODczCi06MTAzNTcwMDAxNzA5ODkwMTJBMjQzRDJBMzExNTk5MTgwQTA5NDEwOTk4Ci06MTAzNTgwMDBBOTBDMjk5Q0VDMjkyNTFGN0U4NzE5MkQyQTAwMERBMDQ2Ci06MTAzNTkwMDA2MDAwMDgzRTAxMEEzRUIxQUQwOERBMzkwRUFBMTEwQUYwCi06MTAzNUEwMDA5OTBDMjkyNTFGMjcyMTFGMThFNTJDMDc4MTYwMDEwODg4Ci06MTAzNUIwMDAzRTAwMEQzRUIxOEEwREE4MzkyRDlDRkMyRDI1MjBDMTYxCi06MTAzNUMwMDA5MDA5ODgzNjA4REQxQzA4NzcxQzg5M0Q4QTNDMkUyNjI4Ci06MTAzNUQwMDAxMzJFMjYxNDJFMjYxNTJFMjQ2QjI5MjUyMjJBMjUyMTZBCi06MTAzNUUwMDAyODIwMTRDMEEwMjcyNTJFMkQyNTJGMDgwODQzMkQyMTgzCi06MTAzNUYwMDAxQzI4MjQxNEMwNzAyNzI1MjQyNzI1MjUyNzI1MkMyNzlGCi06MTAzNjAwMDAyNjE4MjcyNjFCMjcyNDY3MjcyNDY4MjkzMjExMjcyNUY3Ci06MTAzNjEwMDAyMzk5MTk2RUQyMTU2RDA4MEFCMUFBMDBBMTA0MDBFOTE4Ci06MTAzNjIwMDAxQTdEOUIwNTYzRkZFRTAwMDAwMDg5MTkxREU0RkRDMEIzCi06MTAzNjMwMDBFMEMwNzI5QjFEODgxMzk1MUI5RjFGOUMxRTk2MUMxQzJGCi06MTAzNjQwMDBFNTA4MjYyMDNEQzBGMDA2MDU0MDA4REIxNDA3NjYwMUFBCi06MTAzNjUwMDAwRDg4MTBDMDcxMDU3RTM4MDY3RjM4ODUxMjBCRkYxMDZCCi06MTAzNjYwMDAxNkU0RTYwQUVFMTA5NjQwMEZFRTAyMEQ1NTExQjBBRkNCCi06MTAzNjcwMDAwOUZGMTEwRkVFMDIxRkU0RjkwODU1MDIwRkVFMDJDMDE4Ci06MTAzNjgwMDBGNDlGNDE4QTIwOUY0OTk2NDg5QzRCOUI0RTlENDM5RUE4Ci06MTAzNjkwMDA0NjhEMTYxRUU0REE4QjE1QzdDRjlDNEQ5QzRDOUM0NTdECi06MTAzNkEwMDA5QzQ0MEJEODE0MEVBRTAyMERCQjEwOUU0QTlFNDIwOERECi06MTAzNkIwMDA1NTAyOTU0RjBEMTgxNDE1RTRDRDBEODgxMTA1ODgwMjlCCi06MTAzNkMwMDA5ODQ3MThFNEU4ODUyNjJFNDYxMjJFNDYxQTJFNDYyMkUyCi06MTAzNkQwMDAyNjQ2MTAyNjQ2MTgyNjQ2MjAyRjQ2MTEyRjQ2MTkyRjFCCi06MTAzNkUwMDA0NjIxMjg0NjI0Mjg0NjI2MkM0NjE0MkM0NjE1OTUxMTlBCi06MTAzNkYwMDA4QzE3MThFNEREMDUwNTQ4OEYxODA1NTUxMTA5MDY0ODkzCi06MTAzNzAwMDAyODQ2MTM4OTE0MEU2NjExMDY1NTAyMEY3RjM5MEMzRUE4Ci06MTAzNzEwMDA0MDAyRUUxMDE3RTRENjBEOTkxMTBDMjY0MDBGNjYxMUU5Ci06MTAzNzIwMDAwQjk5MDIwQzBDNDA4QjFEMDFDQzEwMDZGRjAyMjc0NkEyCi06MTAzNzMwMDAxQjI5NDYxNkMwNzAyOTMxMTYxNkU0Q0QwRUNDMDIwNUExCi06MTAzNzQwMDBGRjAyMUVFNDlDMTVFNENCMkY0NjE3MjY0NjFDQzBGMDUyCi06MTAzNzUwMDA4NjFDMkY0NjFEMkY0NjFGMkY0NjI3MjU0NjIzMEVDQzlECi06MTAzNzYwMDAwMjg1MUIyQzQ2MUUxRUU0QzQxQ0U0OEU4RjFGOENDN0QyCi06MTAzNzcwMDAyRTQ2MjVBRENDMjgyMDA2MjkyNDZBMjQzMTE3OUMyREZECi06MTAzNzgwMDAyNDI1MjM4QzFFQ0M4MTI3MjQwN0MwRDc3Rjk3MTg4RTMxCi06MTAzNzkwMDAxMTA5Mjg0MTlFMjk2NDgwOEU2NDQwOThDMDk4MDk0OTg3Ci06MTAzN0EwMDAzNjJEMjQwNjYwMDAwQjAwNjQ0MDc1QzA5ODA5NDkzNjI4Ci06MTAzN0IwMDAyRDI0MDYwMUM0MDQyRDBBQTAyRTIxMDQyODYyODUwOEE4Ci06MTAzN0MwMDBFRTExQUQ4ODI4NjY4NTg2M0Y4NDNFMkQzMjEwMDY0ODZFCi06MTAzN0QwMDAxODk4QzMwMEM0MDQwNjQ2MTgxOEU0NzgwNEM0NTMwMEJCCi06MTAzN0UwMDA2NjExMDZERDAyQThCODI3ODRDRjlEQzQwOTA2NEU5NjRGCi06MTAzN0YwMDBDNTFERTRBMzA1QTYxMTA2NDQwMjE2RTRBMDlEQzAwNjVCCi06MTAzODAwMDA0NDAyOTRDMkMwNDMwNEVFMDI5RUMxMTRFNDYzMjZGMjUzCi06MTAzODEwMDA5RDI3NDRBMjI2NkMxODI2RjY5RDY1NTA0MkMwMjBEMUYzCi06MTAzODIwMDAwRkMwOTA2M0ZGODkwMDAwNjU0RjcwQzA5OEMwRTgyRUZDCi06MTAzODMwMDAyNDA2NjNGRjdEMkQyNDA2QzA5MDYzRkY3NUNDNTdEQTA0Ci06MTAzODQwMDAyMERCMzA4QzEwNTgwQzI2QzAyMEQxMEYwMERBMjBDMEFECi06MTAzODUwMDBCNjU4MENCNjYzRkZFNTAwREEyMDU4MENCNDYzRkZEQzAxCi06MTAzODYwMDAyQTJDNzQ4QjEwNTgwNTQwRDJBMEQxMEY2QzEwMDYyODVBCi06MTAzODcwMDAyMDA2OEEzMzZGODIwMjYwMDE2MUMwNTAxM0U0NDcyOTM5Ci06MTAzODgwMDAyMTAyMTZFNDQ2Njk5MjA0MjUyNTAyRDk1MDJDMjAxNTAwCi06MTAzODkwMDA5QTI4MTRFNDQ0OEYyNjI3MjAwQjBBRkUwQzA0NzcwOThCCi06MTAzOEEwMDAyQjcxMUM2NEUxMzk4RTQyOEQ0MzZGQkMwMjYwMDE2RjQ1Ci06MTAzOEIwMDAwMEUxMDRCMEM4MDA4ODFBMDhBODA4MDhEODAyOTgyN0IwCi06MTAzOEMwMDAyQjIwMDY2OEIzMkVDRTk3MkIyMjFFMkMyMjFEMDExMTExCi06MTAzOEQwMDAwMjdCQzkwMUMwQjA2NEIwMTcyQ0IwMDcyOEIwMDBEQTcxCi06MTAzOEUwMDAyMDAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRjgyCi06MTAzOEYwMDBFN0MwMjBEMTBGMkQyMDY0NjRERkNBOEIyOUMwRjEwQkYzCi06MTAzOTAwMDBBQjBDNjZCRkMwMkIyMDBDMENCQzExQTZDQzI4QzI4NjA5Ci06MTAzOTEwMDAyRTBBMDg3OEVCNjExRUU0MjIwRUJFMEEyRUUyQTM2ODhFCi06MTAzOTIwMDBFMDA1MjgyMjAwN0U4OTRGMjlDMjg1MUVFNDJFNjQ5MDdFCi06MTAzOTMwMDA0NjFGRTQzQzlFOTBDMDg0OTg5MTI4MjAwQTk1OTMwRkRFCi06MTAzOTQwMDA4ODAyOTg5MjhFMjAwRkVFMDI5RTk0MkYyMDA3ODgyNkUwCi06MTAzOTUwMDAyRjk1MEE5ODk2OUE5NzJFMjAwNjI1MjQwNzY4RTM0MzA4Ci06MTAzOTYwMDAyOTIxMDIxQUU0MTYyREMyODVBQUJBMkREQzIwMkRDNjAzCi06MTAzOTcwMDA4NTI1QTRDRjYzRkY0RTAwMkIyMDY1Q0JCREMwQzIyQzk0Ci06MTAzOTgwMDAyNDY1QzlGNjA1RTQzMTAwMDIwMDJFNjI4MjFGRTQxRUEwCi06MTAzOTkwMDAyRDQxMDIwRkVFMDIyRTY2ODIwREU0MzEyOTIxMDI2M0QxCi06MTAzOUEwMDBGRjIzMDAwMDY0REZCODg5NDIyODIwMTYwMDkxMDQwRDJGCi06MTAzOUIwMDA4ODBDMDA4ODFBQThBODk4Mjk2M0ZGQTM4QzIwMkQzMkIwCi06MTAzOUMwMDAyMUIxQ0M5Q0QwMkIzMjIxMkEzMjIzQjRCQjJCMzYyMUZGCi06MTAzOUQwMDA3QkE5QTkyRDMyMjIyRDM2MjE2M0ZGQTBDMDIwRDEwRjUzCi06MTAzOUUwMDA5RjI3MjUyNDE1QUNCODI4NzUxQzJCMjAwNkMwQzEyRTk2Ci06MTAzOUYwMDBCQ0ZFNjRFMEFCNjhCNzc3MkRCQ0ZENjVERUM3MkQyMDRCCi06MTAzQTAwMDA2NEMwRjA2NEQwODY4RTI5MEVBRTBDNjZFMDg5QzBGMUU5Ci06MTAzQTEwMDAyODIwNUEyODhDRkUwOENGMzg2NUZFRTg2M0ZGNTgwMDNFCi06MTAzQTIwMDAwMEUwMDQ5MzEwQzA4MTBBRjMwQzAzODMzOUM3OEYwOEE4Ci06MTAzQTMwMDBEODAzMDhBODAxMDhGODBDMDgwODE5QTgzMzAzQzgwQzEzCi06MTAzQTQwMDBBOEI4Mjg3NTFDMDMwQjQ3MkIyNDE1ODMxMENCQjcwMDhGCi06MTAzQTUwMDBFMTA0QjBCQzAwQ0MxQUFDQUMwQ0RDMDI5QzI3NjU5RTI3Ci06MTAzQTYwMDA1RUMwQjIwQjk5MDIwOTA5NEYyOTI1MDI2M0ZFNTAwMDdFCi06MTAzQTcwMDAyRDIwNkEwRDJENDE2NURGN0VEQTIwQzBCMDU4MEM3MjEyCi06MTAzQTgwMDA2NEFGMThDMEYxNjNGRUVGOUYyNzYzRkZEMDJFMjIxRkEzCi06MTAzQTkwMDA2NUVFMzI2M0ZGNzkwMDAwMjgyMjFGNjU4RTI3NjNGRkUxCi06MTAzQUEwMDA2RTI1MjQwNjI1MjUwMkMwOTA2M0ZFMTk2QzEwMDY2NTVDCi06MTAzQUIwMDA3MTMzMkI0QzE4QzBDNzI5M0MxOEMwQTFDMDgwMDlBODdECi06MTAzQUMwMDAzODA4MDg0MjY0ODExMDFDRTNCMTFBRTNCMjJBQzY3RUFBCi06MTAzQUQwMDAyQTVDRkREMzBGNkRBQTA1MDBCMDg4MDA5MDhDODg0MDQ5Ci06MTAzQUUwMDBDMEEwMDg4OTQ3MUZFM0RCMDkwQjQ3MDg0QzUwMDgwREFECi06MTAzQUYwMDA1MzA0REQxMEI0Q0MwNENDMTAwRDVEMDI5RDMxMENCQjIxCi06MTAzQjAwMDAwMjlCMzA4ODQzOEUyMDk4MzUwRkVFMDI5RTMyOEQyNjIwCi06MTAzQjEwMDBEODUwQTZERDlEMjY4RTQwQzA5MDBFNUU1MDY0RTA5NzgyCi06MTAzQjIwMDAxQ0UzQzExRUUzQjAwMzhCMEJDMEY0OUZCMTlFQjAyRDBDCi06MTAzQjMwMDAyMDBBOTlCMzBDREQwMjlEQjI4RjIwMENGRjAyOUZCNEM2Ci06MTAzQjQwMDA4RTI2MkQyMDA3OUVCNjhDMjgyREI1MEE5Q0I3MjkyNEQ5Ci06MTAzQjUwMDAwNzJGMjAwNjJCMjA2NDY5RjMzOUNCQjYxREUzOTIyMzhGCi06MTAzQjYwMDAyMDE2OEREMjBCMzMwQzAwRDEwNDAwMzMxQUEzQzNCNDNBCi06MTAzQjcwMDA4RDkzMjkyMjIwMEMxM0UzOTExRkUzODgwQzJFMTFBRkEzCi06MTAzQjgwMDBFRUEzMjIyOTI0Q0YyRkUyODVEMkEwMEZERDBCMkRFNjU0Ci06MTAzQjkwMDA4NUQxMEYwMEI0OEMyRTIwMEMwQ0VCMTExRkUzODgxRDc3Ci06MTAzQkEwMDBFMzdGQUZFRUFEQkIyMkIyODUyOUU0Q0YwMkMyMEIyMjg4Ci06MTAzQkIwMDBCNjg1RDJBMEQxMEYwMDAwMkUyMDBDMENFQjExMUZFMzE0Ci06MTAzQkMwMDA3RjFDRTM3NkFGRUVBQ0JCMjJCMjg1MjlFNENGMDI4MjQ0Ci06MTAzQkQwMDAwQjIyQjY4NUQyQTBEMTBGQzBEMDBCQUQzODdEQzgwMjY0Ci06MTAzQkUwMDA2M0ZFRUM2M0ZFRTA4RTQwMjcyQzc0N0JFRTEyREE3MEVECi06MTAzQkYwMDBDMEIzMkMzQzE4REQ1MDU4MEE3N0MwOTA4ODQwNjNGRTUzCi06MTAzQzAwMDBFMzA2NkUwMjAyMkEwMjAzM0IwMkRDNDBERDUwNTgwMDRDCi06MTAzQzEwMDAwNDlBMTBEQjUwREE3MDU4MDQ1NDg4MTA2M0ZFRjYwMEUyCi06MTAzQzIwMDA2QzEwMDgyRTNDMThDMEEwOTIxNjFGRTM2ODhDNDBBRkExCi06MTAzQzMwMDAyRjBDOEM0N0MwMjMwNENCMEJEREIwN0ZCMzAyMkRCRDBFCi06MTAzQzQwMDBGOEQ5RDBDMEIwNzVDMzAyNjAwMDhEOUYxNDZEMDg0RkM1Ci06MTAzQzUwMDA4RDkwMEQ2RDM2QURBQTBENjYwQzBFQjcwQjBFQkYwQTFBCi06MTAzQzYwMDA5REYwQjg3N0I4OUZEOEYwMDA4MDg4MDA3MDhDOTcxMUNECi06MTAzQzcwMDA4NzkwOTgxMDk3MTU2OEIxMkFCMjIyNzdEMzJEODg5MTMyCi06MTAzQzgwMDBDMEQwQ0I4Rjk4OTAyNzlDMTAwMDcwODg5NzEyMDBGMEJFCi06MTAzQzkwMDA4QzlGMTM5RDkxNjQ2MEEwQzA4MTA4QkIwMzc1Q0IzOEQ1Ci06MTAzQ0EwMDA2M0ZGQTkwMEIxMjIyRUVDMTg2M0ZGQ0U4NTkyMEQ3NzM5Ci06MTAzQ0IwMDAwQzg2OTM5NzkwQTZENjdENkIwMUIxNTU5NTkyOTY5M0ZECi06MTAzQ0MwMDA4OTQyNjAwMDE3QjNDQzI5OUMxODg4MTRERDkwNzg5MzQyCi06MTAzQ0QwMDAwMjJEOURGOEQ5RDA2M0ZGQkI4OTQyREE5MDg1MTYwQzdFCi06MTAzQ0UwMDAwRDQ3MkQ0NDAyMUJFMzY3OTIzMTlCMzA4NjQzN0E5MTQ2Ci06MTAzQ0YwMDAyNjFCRTM1ODFFRTM2NTg5NTAwRTY2MDE5NjM1MEI5OTI1Ci06MTAzRDAwMDAwMjk5MzI4ODQyMEE4ODBDOTg0Mjg3NTZBN0E3OTc1NjhDCi06MTAzRDEwMDA4RjQ0QUZBRjlGNDREMTBGMUJFMzRGODk1MDk2MzUwQkIzCi06MTAzRDIwMDA5OTAyOTkzMjg4NDIwQTg4MEM5ODQyODc1NkE3QTc5NzI5Ci06MTAzRDMwMDA1NjhGNDRBRkFGOUY0NEQxMEY4OTQyNjNGRjlFMDAwMDZFCi06MTAzRDQwMDA2QzEwMDYxRkUzNTI5MzEwRDYzMDg4MzBDMDkxMDg2MzgwCi06MTAzRDUwMDA1MTA4MDg0NzA1OTgzODk4MTEyODIxMDIyOTNDRkQwODg4Ci06MTAzRDYwMDAwODRDNjU4MTU3NjU5MTU0MkE2MjAzMEEyQjUwNjVCMTRFCi06MTAzRDcwMDA3RTBBNjgxNDJFMEFGRjdDQTYwQTJDMjA1QUNDQzQyRDc5Ci06MTAzRDgwMDAwQTAyMkQyNDVBNzhFMDAyNjAwMjA4OEEyODg5MjYxODNGCi06MTAzRDkwMDBFMzQwMEE5OTBDNjU5MjAzMkUyMDBCMUNFMzNGMDhFRUNBCi06MTAzREEwMDAwQjJFRUQwMTJERTAzMjJFRTAzMzA4REQxMTBFREQwMjg5Ci06MTAzREIwMDAxRUUzMzlBRkREMEVERDAxMERDQzM3MkQyMDBDODk2MEZGCi06MTAzREMwMDBDMUUwN0I5NjIzMUFFMkY3OEI2MjJBQTAyMTlDMTI3QjJBCi06MTAzREQwMDBBMzE2REFEMEMxQjAwQjRCMzdCNEJCOEMyMDU4MEI4NzdECi06MTAzREUwMDA4QzEyREJBMENFQUI2MDAxQkYwRTRFMzcxQkUyRUMwQzk5Ci06MTAzREYwMDBEQTExQUJBQTI4QTI4NkI4RUU3OEVCMzUxRUUyRTkwRUZFCi06MTAzRTAwMDBERTBBMkVFMkEzNjhFMDA0ODgyMDdFODkyNDJCQTI4NUE2Ci06MTAzRTEwMDA2NEIwQTI4NzYyREU3MDBDNzkzNjlCMTM4ODI2OEQyN0VBCi06MTAzRTIwMDAwOTdBMEMwOEREMEM2RkFEMEU3N0QzMTA3RTdCNjk2MENDCi06MTAzRTMwMDAwMDFGQzBCMDYzRkZEODAwRDc5MDYzRkZFQjlDMTJEQTdECi06MTAzRTQwMDAyMERCNzA1ODBBRkM4QjEzOEMxMjY1QTA2RjhFNjI3RThCCi06MTAzRTUwMDA3QjQ2OUMxMjlCMTNDQzVGREEyMDhCMTAwNDRDMDI1OERCCi06MTAzRTYwMDAwQUEwRDZBMDhCMTMyNTBBMDFERTcwREEyMERDNjBERDAzCi06MTAzRTcwMDA0MDVCRkY2QjhDMTJEOUEwMkQyMDBDQzBFMDFCRTJDNzY5Ci06MTAzRTgwMDAxN0UyQ0YwQ0RBMTFBN0Q3QUJBQTJCQTI4NTJFNzRDRkRECi06MTAzRTkwMDAwQjk5MEIyOUE2ODU2M0ZGMjREQTIwREM2MERENDBERTY4Ci06MTAzRUEwMDA3MDg5MTEyODIwMDdERjUwQTk4ODI4MjQwNzVCRkVGRkFFCi06MTAzRUIwMDBEMkEwRDEwRjAwMDBEQkQwREEyMDU4MEIxQzY1NTBGM0U0Ci06MTAzRUMwMDAyQTIwMTQwQTNBNDA2NUEwRUVEQjYwREM0MEREMzBEQURGCi06MTAzRUQwMDAyMDU4MDk4RTFGRTJFRUQ2QTA2NEEwRDc4NEExODNBMDRCCi06MTAzRUUwMDAwNDA0NDcwMzA1NDc5NTExMDM2MzUxQzA1MTYzRkU2OEZECi06MTAzRUYwMDAyQzIwMDYyOENDRkQ2NDgwQTg2OEM3MDRDMDkzMjkyNDIwCi06MTAzRjAwMDAwNkMwQzE4RTY0MTlFMkE3OUUyNjlFMjk5RTI4ODk5MjJBCi06MTAzRjEwMDA5RTI3MDA5MTA0MDBDQzFBMDA5MDA0QjBDODhENjUwODVCCi06MTAzRjIwMDBFRTAxQUVDQzBEMEU1RTAxRUUxMUFFQ0NCMENDMkUwQTgxCi06MTAzRjMwMDBGRTBDMEMxOTBFQ0MzNkMwRTIwQzBDNDcwRUNDMzcyQzA0Ci06MTAzRjQwMDAyNDE2QzBCMDJCMjQwNzJDMjAwNjFCRTI5RjBBMEU0NTI2Ci06MTAzRjUwMDAwRDA4NDIyODI0MEIyRTI0MEFCNDg5MjkyNDBDN0RCODhDCi06MTAzRjYwMDA1QTI5MjAxNjBBNUQ1MkIwOUUwRUREMzYyRDI0NjQyQjkwCi06MTAzRjcwMDBDQ0ZENjVCREZCMEQwQzQ3NjRDREY1MURFMjhBODgyODlDCi06MTAzRjgwMDA4REQyMEM5QjBDMDBEMTA0MDBCQjFBQUI4ODk4Mjk2MzFFCi06MTAzRjkwMDBGRERFMDAwMDFDRTJCOTYzRkUyMDAwMDAxQ0UyQUY2M0ZFCi06MTAzRkEwMDBGRTE4OEQ2NTYzRkZBMjAwMDBEQTIwMkIyMDBDNTgwQTUyCi06MTAzRkIwMDBGODY0NUYwQkMwMjBEMTBGQzAyMEQxMEZDMDkzQzBFM0M1Ci06MTAzRkMwMDAyRTI0MTY2M0ZGOUQwMDAwNkMxMDA0QzA2MDE3RTI3MjdGCi06MTAzRkQwMDAxREUyNzVDMzgxMjkzMTAxMkEzMDA4MjkyNDBBNzhBMUZDCi06MTAzRkUwMDAwOEMzQjI3QkExNzJEMjYwRDEwRkMwQzE2NTUwNTEyNjA3Ci06MTAzRkYwMDAyNTAyMkFEMDIwMkYyMDBCMjkwQUZCMkIyMDE0MkUyMDRCCi06MTA0MDAwMDAxNTI2MjQxNTA5QkIwMTBERkYwOTI4RjExQzJCMjQxNENBCi06MTA0MDEwMDBBOEVFMkVGNTFDNjRBMEI1MkIyMjFFMjgyMjFEMDExMTJFCi06MTA0MDIwMDAwMjdCODkwMURCNjA2NEIwMTcyQ0IwMDcyOEIwMDBEQThFCi06MTA0MDMwMDAyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRjI2Ci06MTA0MDQwMDBFN0RCMzBEQzQwREQ1MERBMjA1ODAwRDgyOTIxMDIwOUI2Ci06MTA0MDUwMDAwQjRDQ0FCMkQyQTBEMTBGMDBDQzVBMkMzMDA4N0JDMTc1Ci06MTA0MDYwMDAzNzJFRDAyMDY0RTAyRDAyMkEwMjAzM0IwMkRDNDBERDIzCi06MTA0MDcwMDA1MDU4MDBDRUQyQTBEMTBGMkIyMDE0QjBCQjJCMjQxNDRCCi06MTA0MDgwMDAwQjBGNDE2NEYwODI3Q0I3Q0FDMEMxMEM5QzAyMkMyNTg2Ci06MTA0MDkwMDAwMkQyQTBEMTBGQzAyMEQxMEYyRTIwMDY2OUUyQzEyRjdECi06MTA0MEEwMDAyMTAyMEYwRjRDNjlGMUI4MjYyNDA2MjYyNTAyMkIyMjg3Ci06MTA0MEIwMDAxRTI4MjIxRDJBMjAwQjI5MjAxNTBEQUEwOTJDQTExQzFGCi06MTA0MEMwMDAyNjI0MTVBQzk5MjlBNTFDN0I4MTRBNjAwMDQ5QjBCQjA4Ci06MTA0MEQwMDAyQjI0MTQwQjBENDFDQkQ2N0NCNzAyMkMyNTAyMkIyMkFFCi06MTA0MEUwMDAxRTJFMjIxRDdCRTkwMjJCMEEwMDY0QjAxNzJDQjAwNzlDCi06MTA0MEYwMDAyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzBEMTBCODAwMDQzCi06MTA0MTAwMDBEQkEwNjVBRkU3QzAyMEQxMEYyNjI0MDZEMkEwRDEwRkQ3Ci06MTA0MTEwMDAyNjI0MDY2M0ZGQzdEQjYwMURFMjIzNjRCRjQyMkNCMDg4Ci06MTA0MTIwMDAwNzI4QjAwMERBMjAwNzg4MEEyODgyNENDMEQxMEI4MDBCCi06MTA0MTMwMDAwMERCQTA2NUFGRTcxREUyMUI2M0ZGMjQ2QzEwMDQyOEMxCi06MTA0MTQwMDAyMDA2QzA2NDZGODU2NENBNUIyOTIwMTQ3RDk3MjZEQTM3Ci06MTA0MTUwMDAyMERCMzBEQzQwMDU1RDAyNTgwMDE5MjkyMTAyMDkwQUU0Ci06MTA0MTYwMDA0Q0M4QTNDMDIwRDEwRjAwQzBCMTBCOUIwMjJCMjUwMjZECi06MTA0MTcwMDBDMDIwRDEwRjAwMDAwMjJBMDIwMzNCMDIyQzBBMDE1ODgyCi06MTA0MTgwMDAwMEM5QzlBQURBMjBEQjMwREM0MDU4MDlENTI5QTAxMUMyCi06MTA0MTkwMDBEM0EwN0U5NzA4MkMwQUZEMEM5QzAxMkNBNDExQzA1MUMxCi06MTA0MUEwMDAyRDIwMTQwNkREMDIyRDI0MTQ2M0ZGQTJEQTIwREIzMDVCCi06MTA0MUIwMDBEQzQwREQ1MEMwRTA1ODA5NTVEMkEwRDEwRjAwMDAwMDBFCi06MTA0MUMwMDA2QzEwMDYxNkUxRjYxQ0UxRjY2NTUxM0JDMEUxMTdFMTAzCi06MTA0MUQwMDBGMjI4MjEwMjhCMjAwODA4NEM2NTgwN0MyOTMyMDAwOUQ2Ci06MTA0MUUwMDA2OTUxNjk5MzczMkE2MjlFNkVBODQ4MkE3MjI2NjhBMDU0Ci06MTA0MUYwMDAwMjdBQjkzRjJBNjI5REI0NEZDQkE3MkIyMDBDMENCRDhECi06MTA0MjAwMDAxMTA2REQwODI4RDI4Njc4RkIxNTBDQkYwQTJGRjJBMzExCi06MTA0MjEwMDA2OEYwMDQ4ODIwN0Y4OTA3MkREMjg1RDMwRjY1RDA2MDkwCi06MTA0MjIwMDAyQTIxMDQxOUUyMUVEMzBGN0E5QjFEREEyMDU4MDg1MzY1Ci06MTA0MjMwMDA2MDAwMjUwMDJDMjEwNDFCRTIxOTdDQkIxNERBMjBDMDhECi06MTA0MjQwMDBCNjU4MDg0RUM5NTQ2MDAwRUZEQTIwNTgwQTM4NjAwMEFBCi06MTA0MjUwMDAwNzAwREEyMEMwQjY1ODBBMzU2NTUwRENEQzQwREIzMDk4Ci06MTA0MjYwMDA4RDMwREEyMDBENkQ1MTU4MDhBOUQzQTA2NEEwQzkxQzY3Ci06MTA0MjcwMDBFMUNDQzA1MTg0QTE4RUEwMDQwNDQ3MEUwRTQ3NjNGRjE5Ci06MTA0MjgwMDA0RjJCMjEwNEMwOEM4OTMxQzA3MERGNzAwOUY5NTAwOUFGCi06MTA0MjkwMDA4RjM4NkVCODE3MkMyMDY2QUVDQzBDMEM0NzJDMjQ2NkQ5Ci06MTA0MkEwMDA3Q0ZCMDk5RDEwNTgwOEJCOEQxMDI3MjQ2Njk0RDExRUY1Ci06MTA0MkIwMDBFMUQyQjhEQzlFRDA2NTUwNTZDMEQ3QjgzQUMwQjFDMDg0Ci06MTA0MkMwMDBGMDBDQkYzODBGMEY0MkNCRjExOUUxQjAxOEUxQjIyODYyCi06MTA0MkQwMDA5NjdFQjA0QkQzMEY2REJBMDUwMEEwODgwMEMwOEMyQzIxCi06MTA0MkUwMDAyMDBDQzAyMDFERTFCNjBDQ0YxMUE2RkYyRUYyODVBRDJCCi06MTA0MkYwMDBDQzI3QzRDRjBFNEUwQjJFRjY4NUQxMEZDMDgwMEFCODQ2Ci06MTA0MzAwMDAzODc4RDBDRDYzRkZDMTAwOEUzMDBFMEU0NzYzRkVCREZFCi06MTA0MzEwMDAyQTJDNzQyQjBBMDEwNDREMDI1ODA4QUUyRjIwMEMxMkNGCi06MTA0MzIwMDBFMUE3MENGOTExQTY5OTI4OTI4NUEyRkYyN0Y0Q0ZEMjE0Ci06MTA0MzMwMDBBMDA4NDgwQjI4OTY4NUQxMEZDMDIwRDEwRjAwMDAwMDlGCi06MTA0MzQwMDA2QzEwMDRDMDYwQ0I1NURCMzBEQzQwMDU1RDAyMDIyQUY2Ci06MTA0MzUwMDAwMjVCRkY5QjI5MjEwMjA5MDg0Q0M4ODJEMkEwRDEwRjIxCi06MTA0MzYwMDAyQjIwMTRCMEJCMkIyNDE0MEIwQzQxQ0JDNTdEQjdFQjE5Ci06MTA0MzcwMDBDMEMxMEM5QzAyMkMyNTAyRDJBMEQxMEYwMDAwMDIyQTQxCi06MTA0MzgwMDAwMjAzM0IwMjA2NkMwMkMwRDBDN0Y3MkUyMDE0MjgzMTZFCi06MTA0MzkwMDAwMTI2MjUwMjI4MjQwQTBGRUUwMTJFMjQxNDU4MDEwQ0IwCi06MTA0M0EwMDA2M0ZGQTMwMDI2MjQwNkQyQTBEMTBGMDA2QzEwMDYyOEJDCi06MTA0M0IwMDAyMTAyRDYyMDA4MDg0QzY1ODA5OTJCMjAwQzEyRTE3NzQ5Ci06MTA0M0MwMDAwQ0I4MTFBMjg4MkE4Mjg2QjU0OTdBOTMwMjYwMDA5M0JDCi06MTA0M0QwMDAxOUUxNzQwOUI5MEEyOTkyQTM2ODkwMDgyQTYyMDAwOUIwCi06MTA0M0UwMDBBQTBDNjVBMDdFMjg4Mjg1MUNFMTdGNjQ4MDc1OUM4MDc0Ci06MTA0M0YwMDBCODg3QjE0QjlCODE5QjEwNjU1MDcyQzBBN0Q5NzAyOEJDCi06MTA0NDAwMDAwQTAxQzBEMDA3OEQzODBEMEQ0MkNCREIxRkUxNjAxRUM1Ci06MTA0NDEwMDBFMTYxMkVGNjdFRDgzMEQzMEY2RDRBMDUwMDgwODgwMDBBCi06MTA0NDIwMDA5MDhDQzA4MDJGMzAwODJGNzQwMDI5NjAwQzFBRTE2MzMzCi06MTA0NDMwMDAwQzlEMTFBMkREMkNEMjg1QzAyMEFBOTkyMjk0Q0YwQzBDCi06MTA0NDQwMDBCQzBCMkNENjg1RDI4MEQxMEZDMEUwMDM4RTM4N0VBMDY1Ci06MTA0NDUwMDBDMzYzRkZCN0NDNTgyQTZDNzREQjMwREM0MDU4MDdFMUVCCi06MTA0NDYwMDBDMDIwRDEwRkRBNjA1ODA5QjE2M0ZGRTcwMDAwREQ0MERBCi06MTA0NDcwMDA4NTEwMkE2Qzc0QzBCMERDNzA1ODA4NTYyRjMwMDgyRjk1Ci06MTA0NDgwMDA3NDAwMjg2MDBDQzBGMDBDOEIxMUEyQkIyOUIyODUxMkZECi06MTA0NDkwMDBFMTRCMDk1OTBCQTI4MjJGMjRDRjI5QjY4NUQyQTBEMTk2Ci06MTA0NEEwMDAwRjAwMDAwMDZDMTAwNDI5MjAxNDI4MjAwNkIxOTkyOTVGCi06MTA0NEIwMDAyNDE0Njg4MTI0QzBBRjJDMEEwMTJCMjEwMjJDMjQwNjZECi06MTA0NEMwMDA3QkEwMDRDMEQwMkQyNTAyMDIyQTAyMDMzQjAyMDQ0QzJCCi06MTA0NEQwMDAwMkMwRDA1ODAwQkZEMkEwRDEwRkMwMjBEMTBGMDAwMDIxCi06MTA0NEUwMDA2QzEwMDQyOTMxMDFDMkI0MjkyNDBBMkEzMDExQzI4Mzc0Ci06MTA0NEYwMDA3OEExNkM3QkExNjk2NDUwNDcyQzIwMDZDMDY4NkZDNTA5Ci06MTA0NTAwMDA2MkNBNTcyRDIwMTQ3Q0Q3MjJEQTIwREIzMERDNDBERDU0Ci06MTA0NTEwMDA1MDVCRkZBNjI5MjEwMjA5MEU0Q0M4RTJDMDIwRDEwRjMyCi06MTA0NTIwMDBDMEYxMEY5RjAyMkYyNTAyQzAyMEQxMEZEQTIwREIzMDBGCi06MTA0NTMwMDBDMEMwNUJGRkRDMjgyMDE0MDY4ODAyMjgyNDE0NjNGRjE3Ci06MTA0NTQwMDBDNzI5MjAxNTFCRTExODJBMjAwQkMwQzA5QzI0MEJBQUU4Ci06MTA0NTUwMDAwOTJCQTExQzJDMjQxNUFCOTkyOUE1MUM2M0ZGOTkwMERDCi06MTA0NTYwMDBDMDIwRDEwRkRBMjBEQjMwREM0MERENTBDMEUwNTgwODNECi06MTA0NTcwMDA2N0QyQTBEMTBGMDAwMDAwNkMxMDA0Q0I1NTEzRTExM0RCCi06MTA0NTgwMDAyNTIyMUYwRDQ2MTEwNjU1MENBMzIzMjYyMjFFMjUyNjgzCi06MTA0NTkwMDAxRjA2NDQwQjI0MjYxRTczNEIxREM4NTJEMjQwRDEwRjU4Ci06MTA0NUEwMDAyODBBODBDMDQwMjQyNjFGQTgyODI4MjYxRTI4MjYxRDQ5Ci06MTA0NUIwMDBEMjQwRDEwRkMwMjBEMTBGMjQ0REY4MjQyNjFFNjNGRjE2Ci06MTA0NUMwMDBEODAwMDAwMDZDMTAwNDI4MjAwNkQ2MjA2RTg1MDI2MEZBCi06MTA0NUQwMDAwMERFMTdFMEYyMURFMEY5MTlFMEYyQzBDMUMwMjAyQUE4Ci06MTA0NUUwMDA4Q0ZDNjRBMTMyMkI2MTAyQjQ0RTBCMEI0QzY1QjBBODVECi06MTA0NUYwMDAyQjYwMEMyQTYyMDAwQ0I4MTEwNzg4MDgyRjgyODYwOUVDCi06MTA0NjAwMDBCOTBBN0ZFMzAyNjAwMDlGMjk5MkEzNjg5MDA1MDlBQTc2Ci06MTA0NjEwMDAwQzY1QTA5MzI4ODI4NTY0ODA4REI4ODkxQkUwRjc5NDhGCi06MTA0NjIwMDA4MTlCODA2NTUxNERDMEI3QjgzOEMwQTFDMEUwMDlBRUNDCi06MTA0NjMwMDAzODBFMEU0MjY0RTA0ODFBRTBENTFGRTBENjJGQTY3RTYxCi06MTA0NjQwMDBCMDRBNkRBQTA1MDA4MDg4MDA5MDhDQzBBMDJFNjAwQzM2Ci06MTA0NjUwMDAwQ0U4MTFBNzg4MkY4Mjg1QURFRTBGNEYwQjJGODY4NUIyCi06MTA0NjYwMDAyQjYwMDYyMkU0Q0Y2OEIxMkEyOTYwMTVDMEIyQzk5QTJFCi06MTA0NjcwMDBEMkEwMkQ2MTAyMkI2NDA2MENERDAyMkQ2NTAyRDEwRjQ0Ci06MTA0NjgwMDBDMEUwMDhBRTM4N0VCMEI3NjNGRkFCMDAyMjY0MDZEMjRDCi06MTA0NjkwMDBBMEQxMEYwMEQyQTBEMTBGMDBDQzU3REE2MERCMzBEQzA0Ci06MTA0NkEwMDA0MDU4MDg4RkMwMjBEMTBGREE2MDU4MDkyMDYzRkZFODE2Ci06MTA0NkIwMDAwMDI4MjIxRTI5MjIxRDc4OTkwMjI4MEEwMEMxNzZDMUVECi06MTA0NkMwMDBDMUMxRDIxQkUwQzJDMTI0QUI2QjY0ODA0Mzc4OTE0MDZFCi06MTA0NkQwMDAyQTgwMDAwQ0FGMEM2NEYwQUUwREFFMEM2NEUwQTgwMkIyCi06MTA0NkUwMDBBRjBDNjRGMEEyMDdBRTBDNjRFMDlDMkZBQ0U4NjRGMDYxCi06MTA0NkYwMDA5NjJFQUNFNzY0RTA5MDJGQUNFNjY0RjA4QTJBODAwNzNGCi06MTA0NzAwMDAwOEE4MEIwODhBMDI3QjgzMDIyQThERjhEOEEwNjVBRjFGCi06MTA0NzEwMDBCQkMwOTA2MDAwNzMwMDAwMkI2MDBDMENCODExQTc4ODIwCi06MTA0NzIwMDAyRTgyODY2RUU4NzkwOUJBMEEyQUEyQTM2OEEwMDQ4RUFFCi06MTA0NzMwMDA2MDdBRTk2QjJBODI4NTY0QTA2NTFGRTBBQUMwRTMyRTM3Ci06MTA0NzQwMDA2NDA2OUVBMTlGQTAxRkUwRDYyRTYwMEE5MkEzMEZFRUUyCi06MTA0NzUwMDAwMjlFQTI4RTYwMEZFRTAyOUVBNDJGNjAxNDdBRkY0Nzg1Ci06MTA0NzYwMDAyMkE0MTcyRjgyODVBREJFMjJFNENGMkZGQzE4MkY4NkZFCi06MTA0NzcwMDA4NTYzRkU3MDJBNkM3NEMwQjFEQzkwREQ0MDU4MDc5NUVCCi06MTA0NzgwMDAxREUwOEZDMEMxNjNGRUM0RDlBMERBNjBEQjMwREM0MDFECi06MTA0NzkwMDBERDUwQzJGMEMxRTAwOUZFMzk1ODA3RENEMkEwRDEwRkNDCi06MTA0N0EwMDBEQTYwNTgwOEUyNjNGRUYwMkNBNDE3Mjk4Mjg1MERCRTVBCi06MTA0N0IwMDAwODIyRTRDRjI5OUMxODI5ODY4NTY0NTAwQzJBNkM3NDQxCi06MTA0N0MwMDAwNDRCMDI1ODAxNjlEMkEwRDEwRkMwMjBEMTBGMDAwMEM0Ci06MTA0N0QwMDA2QzEwMDYyQjIyMUUyODIyMUQ5MzEwN0I4OTAxQzBCMDZECi06MTA0N0UwMDBDMEM5QzAzQkMxRjIwNDA2NDAxREUwNzhDMEUyQzA3NEZECi06MTA0N0YwMDAwNzQ3MDEwRTRFMDFBRDJEOUUxMUMwNDAyRTBBMTQ2NEQ0Ci06MTA0ODAwMDBCMDZFNkQwODQ0MjgyMjFEN0I4MTY1MkFCMDAwN0VBMTEwCi06MTA0ODEwMDAzQjdGQTE0NzdCNTEyMDdDQTE0OTY4QTkxNzY4QUExNDU2Ci06MTA0ODIwMDA3M0ExMTFDMDlGNzlBMTBDQzE4Qjc4QTEwN0MxQUUyOURBCi06MTA0ODMwMDAwQTFFMjlCNDAwN0NBMTJCMkFCMDA3MEJBQjBCREFCMEZGCi06MTA0ODQwMDA3REIzMDIyQUJERjhEQkEwQ0FBNTYzRkZCNDI4QjAxMDZGCi06MTA0ODUwMDA4OTExNjk4N0JCNjQ5RkI4NjNGRkRDMDA2NDdGQjQ2MzIwCi06MTA0ODYwMDBGRkQ1MDAwMDY0NkZEMEMwNDFDMUFFMkFCNDAwNjNGRjIxCi06MTA0ODcwMDBDNjJCMjEwMkNFQkUyQTIyMUQyQjIyMUU3QUIxMkE4Q0UzCi06MTA0ODgwMDAxMDdDQjEyMTdBQjkwMUMwQjBDOUI5MTNFMDQzREEyMDc0Ci06MTA0ODkwMDAyOEIwMDAyQ0IwMDcwMzg4MEEyODgyNENDMEQxMEI4MEI2Ci06MTA0OEEwMDAwMERCQTA2NUFGRTdEMjQwRDEwRjg5MTA2NTlGRDQ2M0NDCi06MTA0OEIwMDBGRkYzMDAwMDZDMTAwOEMwNzA2NDUxNzE4RjMwMjkyMTIzCi06MTA0OEMwMDAwMjBGMEY0NzE2RTAzNjA5MEM0QzY1QzA4RjhEMzAwRDc2Ci06MTA0OEQwMDA2RTUxNjhFMzAyNjAwMDg0Mjg2MjlFMUFFMDJGNkU4OEExCi06MTA0OEUwMDA1MjJBQTIyNjY4QTAwNDhCMjA3QUI5NDcyQTYyOURCMDdBCi06MTA0OEYwMDA0RUNCQUY5QTEwMkIyMDBDOUUxMTBDQkMxMUE2Q0MyOUNDCi06MTA0OTAwMDBDMjg2Qjc0ODc5OEI0MTE3RTAyNjA3QjcwQTI3NzJBM0ZBCi06MTA0OTEwMDA2ODcwMDQ4ODIwNzc4OTMwMkNDMjg1OUMxMkQ3QzA2NUM2Ci06MTA0OTIwMDBDMDYyMkMyMTA0MUFFMDVEN0NBQjIyREEyMDU4MDY5Mzg5Ci06MTA0OTMwMDA2MDAwMjkwMDJFMjEwNDFERTA1OTdFREIxOERBMjBDMDFBCi06MTA0OTQwMDBCNjU4MDY4RUM5NTg2MDAxNTZDMEMwNjNGRkNDREEyMDQ1Ci06MTA0OTUwMDA1ODA4NzY2MDAwMDZEQTIwQzBCNjU4MDg3NDY1NTEzRkUyCi06MTA0OTYwMDBEQzQwREIzMDhEMzBEQTIwMEQ2RDUxNTgwNkU4RDNBMEU1Ci06MTA0OTcwMDA2NEExMkNDMDUxMjkyMTAyODRBMThGQTAwNDA0NDcwRkY3Ci06MTA0OTgwMDAwRjQ3NjNGRjQxMkIyMTA0QzA4Qzg5MzFDMEEwMDlGOTc2Ci06MTA0OTkwMDA1MDA5OEEzODZFQjgxRTJDMjA2NkFGQ0MwQzBDNDcyQzAwCi06MTA0OUEwMDAyNDY2N0NBQjEwOUUxNDJBMTIwMDU4MDZGQThFMTRDMDlFCi06MTA0OUIwMDBEMDJEMjQ2NjhEMzBDMDkyMUJFMDEwQzFGODdGRDYwQzNDCi06MTA0OUMwMDA4NzEyOUI3MDI5NzYwMTJGNzQwODI3N0MxMDY1NTBCN0Q5Ci06MTA0OUQwMDBCODNBQzBEN0RDNzBDMDUxQzA4MDA3NTgzODA4MDg0MkM4Ci06MTA0OUUwMDA2NDgwNzkxRERGRUExOURGRUIyOUQ2N0U2QTQyMEFEMzlCCi06MTA0OUYwMDAwRjZERTkwNTAwQTA4ODAwQzA4Q0MwQTA4ODMwQzA5MjZGCi06MTA0QTAwMDA3Rjg2MzgwN0U4MEIyRjg0MDg5QjgwOTk4MUI0RTgyQ0I3Ci06MTA0QTEwMDAyMDBDQzA5MDFEREZFQTBDQzMxMUE2MzMyMjMyODVBREY1Ci06MTA0QTIwMDBDQzAyODIwQjI5QzRDRjIyMzY4NUQyQTBEMTBGOEEzMDg2Ci06MTA0QTMwMDBDMEYxN0VBRTMyMjkyMTAyNjNGRTg4MDAyQzIwMEM4RTRDCi06MTA0QTQwMDAxMUMwQjAxRERGREUwQ0NGMTFBNkZGMjJGMjg1QURDQzY4Ci06MTA0QTUwMDAyQkM0Q0YwMkVFMEIyRUY2ODVEMkEwRDEwRkMwODAwQTU4Ci06MTA0QTYwMDA1ODM4NzhEMDg2NjNGRjdBOUYxM0RCMzBEQTIwQzBDMUQ0Ci06MTA0QTcwMDBERDcwNUJGRjU3MjkyMTAyOEYxMzJBOUNGRTY1QUU0MzMwCi06MTA0QTgwMDAyNzI1MDJDMDkwNjNGRTNCOUUxNDJBMkM3NEMwQjFEQzIzCi06MTA0QTkwMDA3MERENDA1ODA2RDA4RTE0MUJERkQ4QzFGODYzRkY1QjcxCi06MTA0QUEwMDBDMDIwRDEwRjZDMTAwNjI4MjEwMjE2REZCQzA4MDg0QzZDCi06MTA0QUIwMDA2NTgyMTUyOTYyOUU2Rjk4MDI2MDAyMUMxOURGQjcyOTcyCi06MTA0QUMwMDA5MjI2Njg5MDA3OEEyMDA5QUEwQzY1QTIwQjI3NjI5RDhFCi06MTA0QUQwMDBDMENDNjQ3MjAzMkIyMTA0OEUzMUMwQTBEREEwMEVGRTc5Ci06MTA0QUUwMDA1MDBFQ0QzODZFQjgxMTJDMjA2NjJDQ0MwMTBDMEM0NzIyCi06MTA0QUYwMDAyQzI0NjY3Q0RCMDI2MDAxRUFDMEMxMjkzMDA4MUJERjgwCi06MTA0QjAwMDBBOTY0OTA5NzJGMEFGRkMwRDNCMDlFNjRFMEZENjg5MjFECi06MTA0QjEwMDAwRTY0NTA4MzJBMkM3NERCNDA1ODAwOTNEMkEwRDEwRjJFCi06MTA0QjIwMDAyQjIwMEMyNzIxMDQwQ0JDMTFBNkNDMjlDMjg2MjgwQUY0Ci06MTA0QjMwMDAwODc5ODMwMjYwMDFCOTE5REY5QTA5QjkwQTI5OTJBMzk5Ci06MTA0QjQwMDA2ODkwMDgyRTIyMDAwOUVFMEM2NUUxQTQyRUMyODU2NDRGCi06MTA0QjUwMDBFMTlFMjYyMDA3MTNERkEzNkU3QjAyNjAwMTlBMTdERjE4Ci06MTA0QjYwMDA5QTFGREZBMzE5REZEMEMwRDIyODIwMEE5M0UwOURFMTZECi06MTA0QjcwMDBBOTY5MEY4ODAyOThFMjJGOTA4MDJBOTQ4MEIxRkYwN0RDCi06MTA0QjgwMDBGRjAyOUZFMzFFREY4RTJGQzI4NUFFQkUwRkRGMEIyRjBECi06MTA0QjkwMDBDNjg1MkFFNENGNjU1RjdCQzAyMEQxMEYyRjMwMTAyOTU2Ci06MTA0QkEwMDAzMDExMkUzMDEzMDA5OTMyMDBFRDMyNjRGMEVFMkEzMENECi06MTA0QkIwMDAxNDFGREZCRDAwQUEzMjc4RUYwNTBGOUUwOTJERTQ3Rjk4Ci06MTA0QkMwMDAxRURGQkI2NkEwMDUwRjk4MDkyQTg0ODBCNEE3MThERkYyCi06MTA0QkQwMDBCOEM3NkYwMDkxMDRBRTlFRERFMDAwQUYxQTAwQzMxQUEzCi06MTA0QkUwMDA2RUUxMDUyREIyMDAwREVEMEMxRURGQjIwOEQ4MUMwNkRCCi06MTA0QkYwMDAzMzAzQUU4ODJBODQ4QjJFQjAyRTI3ODQ4QzAzRUUwMURCCi06MTA0QzAwMDAwRkVFMDIyRUI0MkU1ODAxOEY2M0ZGMDQyOTMxMDgyOUJDCi06MTA0QzEwMDAyNTA0MjgzMDE0MkUzMTA5QjA4ODY0ODBBMzJFMjQwQTdDCi06MTA0QzIwMDBDMDgxMkUzMDE2MkNCNDIzMkUyNDBCQjRFRjJGMjQwQzZECi06MTA0QzMwMDA4QzM3OEIzNjI5MjUwNERFQjBERkMwMEY4RjM5MEU4RUZFCi06MTA0QzQwMDAzOTBGRUUwMjY0RUVDOTA4OUYxMTAxQzQwNDhEMzgwQ0JGCi06MTA0QzUwMDBCODE4MDBDNDA0MENCRTE4MDBFRTExMEVERDAyQzBFMzRCCi06MTA0QzYwMDAwRUZGMDIxRURGODc5RjcxOUU3MDFFREY4NDhGMjA5OENCCi06MTA0QzcwMDA3MzlENzQwNUZGMTEwQkNENTNDMTgwOTg3NTBGREQwMjM0Ci06MTA0QzgwMDAwRUREMDI5RDcyMkEyNDY2MUVERjQ0MkY2MjlEMkFFNEY3Ci06MTA0QzkwMDBBMjJGRkMxODJGNjY5RDYzRkU3NjAwMDAwMDJGMzAxMkI1Ci06MTA0Q0EwMDAxQkRGODYwMEZBMzI3OEZGMDUwQjk4MEIyQTg0N0Y2NjlCCi06MTA0Q0IwMDBEMDA1MEI5QTBCMkRBNDgwMkEzMDExMDBBQTMyNjNGRjc1Ci06MTA0Q0MwMDA0NDJGMjQwQTlFMkI2M0ZGNTZDQzU3REEyMERCMzBEQ0JFCi06MTA0Q0QwMDA0MDU4MDcwM0MwMjBEMTBGMDBEQTIwQzBCNjU4MDc5MzEwCi06MTA0Q0UwMDA2M0ZGRTUwMERBNzA1ODA2MkJDMEEwMkEyNDY2NjNGRTM1Ci06MTA0Q0YwMDAwN0RBMjA1ODA3OEU2M0ZGQ0ZCMTY5MjgyMDBBODYyMDgzCi06MTA0RDAwMDAwOTA5NDc5OTExMjkyNDA3OTgxMDdGODEyNjkzRTAyN0U0Ci06MTA0RDEwMDBFNTBBOUFFMzg4MTA5REUxMTlERjYyOEQxMTA5NkYwMjlGCi06MTA0RDIwMDA5RkU0MkRFNDE2MDk4ODAyQzBEMzk4RTIyQTI0MDc2MzgxCi06MTA0RDMwMDBGRTUxMDAwMDFGREYyQjA4NjkxMTg4MTE4RDJCOTNFMEI1Ci06MTA0RDQwMDAwOTg4MDJDMDlGOThFNTBGREQwMjA0NzgxMTlERTJDMDNBCi06MTA0RDUwMDBGNDlGRTFDMEQ0MDk4ODAyOThFNDYzRkZDRTAwMDAwMDBDCi06MTA0RDYwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0ODUyMTBEMzgxMTg3Ci06MTA0RDcwMDAxNERGMDg4NjIyQTQyNDA4NjYwQzk2MjIwNTMzMEI5M0MwCi06MTA0RDgwMDAyMTc0M0IxM0M4NjJEMjMwRDEwRkMwMzBCQzI5OTkyMUE1Ci06MTA0RDkwMDA5OTIwOTMyMkQyMzBEMTBGMjMzREY4OTMyMTYzRkZFMzcyCi06MTA0REEwMDA2QzEwMEFENjIwOTQxODE3REVGREQ5MzBCODM4OTgxOTNGCi06MTA0REIwMDA5OTE0NjU1MjUyQzBFMUQyRTAyRTYxMDIxRERFRkEwRTU2Ci06MTA0REMwMDAwRTRDNjVFMTYzOEYzMDhFMTkwRjZGNTEyRkZDRkQ2NTFFCi06MTA0REQwMDBGMTU2OEVFMTI5RDAyMzBFOEY1MDc3RTY2QjhGMTgxRTg3Ci06MTA0REUwMDBERjM3QjBGRjBGRjQxMTBGMUYxNDY1OTBDRTE4REYzNEJBCi06MTA0REYwMDA4QzYwQThDQ0MwQjExOURFRTgyODYwMEIwOUNDMEIwRDgzCi06MTA0RTAwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQUY1Ci06MTA0RTEwMDAzODFCREYyQTBDQTkwQTI5OTI5NDdCOUIwMjYwMDA4QzI0Ci06MTA0RTIwMDAyQjYwMEM5NDE2MENCRDExQTdERDI5RDI4NkI4NDg3OUU5Ci06MTA0RTMwMDA4MzAyNjAwMEQyMTlERURBMDlCODBBMjg4MkEzOTgxNzIzCi06MTA0RTQwMDA2ODgwMDI2MDAwQTM2MDAwQTUxQURGMUU4NDE4MEFFRUM1Ci06MTA0RTUwMDAwMUNBOTgxQkRFRDE4QzE5MkJCMDAwOENDMDZFQjMxMzI1Ci06MTA0RTYwMDAxRERFQ0UwQzFDNTIwRENDMEIyREMyOTVDMEExN0VEQkRECi06MTA0RTcwMDBBRTYwMDAzODBDMEM1MzYwMDAwOTAwMDAwMDE4REYxMDExCi06MTA0RTgwMDA4QzYwQThDQ0MwQjExOURFQzQyODYwMEIwOUNDMEIwRDE2Ci06MTA0RTkwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQTY1Ci06MTA0RUEwMDAzODBDQTkwQTI5OTI5NDdFOTMwMjYzRkY3MkRBNjBDMERCCi06MTA0RUIwMDBCQTU4MDcxRTY0NTA3NDYwMDI2NjAwMDAxQURFQjc4QzkwCi06MTA0RUMwMDAxOTJBQTAwMDhDQzA2RUEzMUExOERFQjMwQzFDNTIwODVECi06MTA0RUQwMDBDQzBCMThERUZBMkJDMjk1QzBBMTc4QjMwMjYzRkYzRjVBCi06MTA0RUUwMDA2M0ZGQzkwMDBDMEM1MzYzRkYwOTg5NjA3ODk5MTgyOTg2Ci06MTA0RUYwMDBEMjg1Qzk5MjJCNzI5RTFEREVBODZFQjgyNDJERDIyNkIzCi06MTA0RjAwMDA5OTEzNjlEMDBDNjAwMDBFREE2MDU4MDcwODYwMDAxODI5Ci06MTA0RjEwMDAwMDAwODg2MDdEODkwQTlBMUEyOTcyOUQ5QzEyOTkxNTUxCi06MTA0RjIwMDBDRjk0REE2MEMwQjY1ODA3MDE2NTUxRjQ4RDE0OEMxODFGCi06MTA0RjMwMDBEQkQwOEREMERBNjAwRDZENTE1ODA1NzREM0EwOUExNDcyCi06MTA0RjQwMDA2NEExREQ4MkEwODVBMUI4QUY5RjE5MDUwNTQ3MDIwMkMzCi06MTA0RjUwMDA0Nzk1MThDMDUxNjNGRTYwMkI2MTA0QzA4Qzg5MzFDMDM1Ci06MTA0RjYwMDBBMDA5Rjk1MDA5OEEzODZFQjgxRjJDNjA2NkEyQ0MwQ0QzCi06MTA0RjcwMDAwQzQ3MkM2NDY2N0NBQjExOUYxMTlFMUI4QTE1NTgwNTRCCi06MTA0RjgwMDA4NThFMUI4RjExQzBBMDJBNjQ2NjlGMTE2NEYwRTE4OTkxCi06MTA0RjkwMDAxMzg4MTlERUYwNkRFOTE3MkY4MTAzMDA5MDhEQUVGRUE2Ci06MTA0RkEwMDAwMDgwODg5RjkyMDA5MDhDMDA4MDg4Qjg5OTAwOTA4QzM3Ci06MTA0RkIwMDA2NTUxNEU4QTEwODUxQThCMzAxRkRFOEE4ODEyMjk2MDRGCi06MTA0RkMwMDAwNzA4NTgwQTJDODI5NDJENjEwNDBFQ0MwQzJDODY5NDcwCi06MTA0RkQwMDA2RkRCM0MxQ0RFQjRBQzlDMjlDMDgwMEI1RDUwQTI5OUY5Ci06MTA0RkUwMDAwOTA5NDcyOUM0ODA2NUQwREEyRTYwMENDMEQwMUZERUM1Ci06MTA0RkYwMDA3MzBDRTgxMUE3ODgyMjgyODVBRkVFMDI0MjBCMkRFNEU0Ci06MTA1MDAwMDBDRjIyODY4NUQyQTBEMTBGOEUzMDBFMEU0NzYzRkRBNjJCCi06MTA1MDEwMDBBMjlDMEMwQzQ3MkM2NDA3N0FCNkNEOEI2MDJFNjAwQURDCi06MTA1MDIwMDAyODBBRkYwOEU4MEM2NDgxMEUxOERFOUQ4MzE2ODIxMzlGCi06MTA1MDMwMDBCMzM5MDIzMzBCMkMzNDE2MkQzNTBBQzAyMzkyMzE5RjFECi06MTA1MDQwMDAzMEMwMjA5MjMzMDhCMjAyMDhFODAyOTIzNDk4MzJDMDhECi06MTA1MDUwMDA4MDJCNjAwQzI4NjQwN0QyQTAxQ0RFNTgwQ0JFMTFBNzYwCi06MTA1MDYwMDBFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEIyREU2ODVEMThFCi06MTA1MDcwMDAwRjhCMTg4ODEzOEQzMEI4OEMwRDhGNDcwRDQ5NTBCNEE1Ci06MTA1MDgwMDA5OTA0OTkxMDBEMEQ1RjA0REQxMDA5RkYwMjlGODAwRDNBCi06MTA1MDkwMDBCQjAyOUI4MTY1NTA4RDg1MUFCODNBQzBGMUMwODAwQzY3Ci06MTA1MEEwMDBGODM4MDgwODQyNjQ4MDZCMUJERTM5MTlERTNBMjlCNkVECi06MTA1MEIwMDA3RThEMThCMERENkREQTA1MDBBMDg4MDBDMDhDQzBBMDIwCi06MTA1MEMwMDA2M0ZFRjMwMDFEREU0QjI4NjAwQTgyMTM4QjE2QzBFMERFCi06MTA1MEQwMDAyRUM0ODAwMkIyMEIwRDg4MDJCMkJCOTkyMzlGMjBDMDYwCi06MTA1MEUwMDBEMjk4MjI5RDIxMjI2MDBDMEMyRDExQTdERDI4RDI4NTlCCi06MTA1MEYwMDAwOEJCMEIxOERFMzIyQkQ2ODVBODIyMkUyNENGRDJBMEQ3Ci06MTA1MTAwMDBEMTBGOUUxQjg1MUEyQTZDNzQ4QjE4NUJGRjE3OEUxQkEwCi06MTA1MTEwMDA2M0ZFQTMwMEMwODdDMDkwMEFGOTM4Nzk4MDkyNjNGRkNDCi06MTA1MTIwMDA4NkMwMjBEMTBGOUUxQjJBNkM3NEMwQjE4RDE4NTgwNTAzCi06MTA1MTMwMDAyOThFMUI4NTFBNjNGRTdFODg2QjgyMTM4OTE2MDhCRTMyCi06MTA1MTQwMDAxMTBFQ0UwMjAyOTIwQjlFMjVCNDk5MUVERTI1OUYyMEUxCi06MTA1MTUwMDAwRTg4MDI5ODIyQzBFRjA0RDgxMTBFODgwMjk4MjRDMDRECi06MTA1MTYwMDBFNDlFMjFDMDgwRDJBMDJCNjAwQzI4NjQwNzFDREUxM0IzCi06MTA1MTcwMDAwQ0JFMTFBN0VFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQjY0Ci06MTA1MTgwMDAyREU2ODVEMTBGMDAwMDAwNkMxMDA0QzAyMEQxMEYwMDY3Ci06MTA1MTkwMDA2QzEwMDQ4NjMzQzA3MUMwMzA2MDAwMDFCMTMzMDAzMTNGCi06MTA1MUEwMDAwNDAwNzQxQTA0NjIwMTc0NjBGMUQxMEY2QzEwMDQwMkRGCi06MTA1MUIwMDAyQTAyMDMzQjAyNUJGRkY2MUREREZCMUJERTQzQzc5RjlDCi06MTA1MUMwMDA4OEIwMDlBOTAzMDk4QTAxOUFCMDJCRDEwMjc5ODAxQjAyCi06MTA1MUQwMDAxQ0RERjNDMEUwMEVFNDMxMDAwMjAwMkFDMjgyMURERUI1Ci06MTA1MUUwMDAzQjBEQUEwMjJBQzY4MjBCRTQzMUQxMEZDMUYwMEZCRkRBCi06MTA1MUYwMDAwMjBGMEY0RjJGRDUwMjBGRTQzMUQxMEY2QzEwMDQxMkE0Ci06MTA1MjAwMDBEREU5MUFEREU2QzBDMDBDRTQzMTAwMDIwMDI5QTI4MjBCCi06MTA1MjEwMDAxOERFMzExQkRFMkYyNjIxMDIwQjk5MDEwODY2MDEyOUI5Ci06MTA1MjIwMDBBNjgyMjYyNTAyMDZFNDMxMTRERTJDMTVERTI3MjM2QTI5Ci06MTA1MjMwMDA5MDIzMjYxMjg1NTAyNDI2MTEyNTI2MTMyMjJDNDBEMTk2Ci06MTA1MjQwMDAwRjAwMDAwMDZDMTAwODE2REUyNTJCMEE2NDJDMUFCNDFGCi06MTA1MjUwMDAxN0RERDUxRERERDExOERFMjIwRjJFMTEwRDJBMTFCMjVBCi06MTA1MjYwMDBFOTBFRUUxMUE4QTgwRTk5MTFBREFBQTc5OUE3RUU5RTc2Ci06MTA1MjcwMDAxNjk5MTFBQ0FBOUExNTJDODBGRjJBODBGRTI4OEQwMTYwCi06MTA1MjgwMDAyOTgwMDEwOEFBMTEyODgwMDAwQ0FBMDIwODg4MTEwOUE3Ci06MTA1MjkwMDA4ODAyMDhBQTFDQjg4ODI4MTYwMDU4MDg1RDI5NzExNkNCCi06MTA1MkEwMDA5QTEyMjkxNjAzOEExNThCMTIyQUEwODAwQkFBMjg4QjIyCi06MTA1MkIwMDAxMDU4MDg1N0Q0NzA4QzE2OEIxMzE1REUwQTBCQUIyOEM4Ci06MTA1MkMwMDAyMzVDNDE5QjE0MkJDNjI4MkMzMDgwNzJDOTE1OEMxNDhBCi06MTA1MkQwMDAyQTUwQzAyQjNBMjAwQ0FBMjg1ODA4NERDMEQxMEFERDBDCi06MTA1MkUwMDAzNzJENDU0MEI0NDRCMjU1QjIzMzc2MzlEQUIyNzc4RkIwCi06MTA1MkYwMDAxMThFMTY4ODE1QjRFRUIxODg5ODE1OUUxNjdGRTlBNDE0Ci06MTA1MzAwMDBEMTBGMDAwMDZDMTAwNEMwMjFEMTBGMDA2QzEwMDZDMDNBCi06MTA1MzEwMDA3MDFBRERBMjFFRERBRDFERERCMzFDRERCNTFCREQ5RUVCCi06MTA1MzIwMDAxM0RERTEyMjBBMDgxOEREOUYxNERERUYyODgwMkUyNDBBCi06MTA1MzMwMDA0MDAwMjgxNjAwNkQyQTcwQTM0OTI4OTA4MEMwRjE2NEFGCi06MTA1MzQwMDA4MDU5ODUxMDAwNDEwNEMwNjEwMDY2MUEwNjU1MDEwNUE4Ci06MTA1MzUwMDBGNTM5MEM1NjExMEE2NjA4MkY2Mjk2NkVGNzREMEI1RkYxCi06MTA1MzYwMDAwQTJGRjIyNDY4RjAwODEyREREMTAyNDIwODcyRjkzQkRDCi06MTA1MzcwMDAyMzYyOTUwQzQyMDJDQjM0OTIzMkMwRjI5RDMwOUYzMUIxCi06MTA1MzgwMDAwRThGMDI5RjMzMjM2Mjk1QUI1MjJGMEEwMDJGOTQ4MDE5Ci06MTA1MzkwMDAyRjI0QTAyMzNDMTAyMzY2OTUxM0REQzJCMTc3MTJEREM0Ci06MTA1M0EwMDBEMkIxNDQwNDA0NDIyNDI0MDBEMTBGMDBEMTBGRDEwRjA0Ci06MTA1M0IwMDA2QzEwMDQxQURENzkyQUEwMDA1ODAyMUI1QkZGRDMwMjhGCi06MTA1M0MwMDAyQTAyMDMzQjAyNUJGRkNGMUJERDc3QzBDNDI5QjEwMjc5Ci06MTA1M0QwMDBDOEFDMEM5QzAyMEMwQzRGMkNCNTAyMENFNDMxRDEwRjY0Ci06MTA1M0UwMDAxRURENkZDMDgwMDhFNDMxMDAwMjAwMkRFMjgyMUZERDY3Ci06MTA1M0YwMDA4MDBGREQwMjJERTY4MjA5RTQzMUQxMEY2QzEwMDQxNTE3Ci06MTA1NDAwMDBERDY3MTZERDY4QzAyMDAyRTQzMTAwMDIwMDI0NTI4MjBDCi06MTA1NDEwMDAyMjYxMDI3MzRGMDYwMkU0MzFDMDIwRDEwRjE4RERCNEJGCi06MTA1NDIwMDAxOUREQjMwODI4MDEwOTQ5MDEyOTU2ODIyODY1MDIwOEI3Ci06MTA1NDMwMDBFNDMxMTNEREE5MjI2QzcwMjM2NjFERDEwRjAwMDAwMDNBCi06MTA1NDQwMDA2QzEwMDQyOTIwMDYyODlDRjk2NDgwQTAyQTlDRkQ2NTI0Ci06MTA1NDUwMDBBMDk2OEEyODhEMjYyRjBBMDg3QUQ5MDQyQjIyMUZDOEU1Ci06MTA1NDYwMDBCRDJDMjA2NDY0QzA4MTJFMjIwOTBFQUUwQzY2RTA3ODRCCi06MTA1NDcwMDAyQjIwMEMxRURENEEwQ0JDMTFBRUNDMjhDMjg2MTlEREQ3Ci06MTA1NDgwMDA0ODc4RjMwMjYwMDBBOTA5QjkwQTI5OTJBMzY4OTAwODM0Ci06MTA1NDkwMDAyRTIyMDAwOUVFMEM2NUUwOTcyOUMyODUxRkRENTI2NEJCCi06MTA1NEEwMDA5MDhFOUY5MEMwRTQxRkRENUY5RTkxMjgyMDBBQzBFMDhGCi06MTA1NEIwMDA5RTkzMEY4ODAyOTg5Mjg4MjAwRjg4MDI5ODk0MkYyMDNDCi06MTA1NEMwMDAwNzlBOTc5RDk2MkY5NTBBMkUyNDA3MjgyMDA2MjkyMEIzCi06MTA1NEQwMDA2NDY4ODMyRjI4QzI4NTEyREQzOTI4OEMyMEEyQjIyRTYxCi06MTA1NEUwMDAyNENGMjhDNjg1QzAyMEQxMEZDMDIwRDEwRjJBMjA2QTIyCi06MTA1NEYwMDAwQTJBNDE2NUFGNTVEQTIwQzBCMDU4MDVEMzY0QUZFODM5Ci06MTA1NTAwMDBDMDIxRDEwRjY0OUZDQzFGREQyNzJEMjAxNjhGRjIwOUZCCi06MTA1NTEwMDBERDBDMDBGMTA0MDBERDFBQURBRDlEMjkyOEMyODUxMjE1Ci06MTA1NTIwMDBERDI3Mjg4QzIwQTJCMjJFMjRDRjI4QzY4NUMwMjBEMTBBCi06MTA1NTMwMDAwRkMwMjFEMTBGMDAwMDAwNkMxMDA0MjYwQTAwMUJEREYzCi06MTA1NTQwMDA2RDE1REQxODI4MjA2NTE3REQxNTI4OENGRTY0ODA5NDA0Ci06MTA1NTUwMDAwQzREMTFBREJEMkNEMkY1MkJEMkY0MkE1MTAyN0NCMUU5Ci06MTA1NTYwMDA0MjJBNTEwMkI0QkIyRUQyRjcyQkQ2RjQ3QkU5MDUyQjhECi06MTA1NTcwMDBEMkY2MkJENkY0N0NCOTJCMjlEMkY2MjlENkY1MjlENjJBCi06MTA1NTgwMDBGNDA2RTQzMTAwMDIwMDJGNzI4MkM3OUYwMDQxMDRDMDdDCi06MTA1NTkwMDA4MTAwODgxQTA5ODgwMzA4RkYwMTJGNzY4MjBBRTQzMTA2Ci06MTA1NUEwMDA2MDAwMDAwMDI2MjQ2NTJCRDJGNDhFNUEyQ0QyRjVCMDcwCi06MTA1NUIwMDBFRTlFNUE3QkNCMTYyOUQyRjYyRkQyRjcwQ0I4MEMwOUU3Ci06MTA1NUMwMDBGRjBDMDhGRjBDMEYyRjE0QzhGOTYwMDAyRjBCQ0QwQzM3Ci06MTA1NUQwMDAwRDJEMTRDRUQ2QzBFMjBFQUUwMjBFMEU0RjJFNTUwMjg5Ci06MTA1NUUwMDAwRUU0MzFEMTBGREIzMERBMjA1QkZGOTUxQkRENDI2NDI2Ci06MTA1NUYwMDBBRjVEMkE1MTAyMEM0RDExQURCRDYzRkZBOTA2RTQzMTI4Ci06MTA1NjAwMDAwMDAyMDAyRTcyODIxRkREMDAwRkVFMDIyRTc2ODIwQTRCCi06MTA1NjEwMDBFNDMxRDEwRjZDMTAwNDE2RENFMTE1RENFMkMwMzAwMzdDCi06MTA1NjIwMDBFNDMxMDAwMjAwMjQ2MjgyNzQ0NzIxMThERDMzODc1QTc2Ci06MTA1NjMwMDAwODQ4MDEyODY2ODJDRDczMTlERDMxMEMyQTExQUE5OTE4Ci06MTA1NjQwMDAyMjkyODMyOTkyODQ3MjkxMDM4MjIwQ0MyOTJCNTEwMkM5Ci06MTA1NjUwMDAwQkU0MzFDMDIwRDEwRjAwMUZERDJBMkU1MTAyMEZFRUM2Ci06MTA1NjYwMDAwMTJFNTUwMjBFRTQzMUIwMkRCMTdDOUM1QTIyNUM2MEIzCi06MTA1NjcwMDAwOEREMTEyRDU2MTlEMTBGNkMxMDBBMUFEQ0M3MUREQzdDCi06MTA1NjgwMDBDOTIzQTAwMDE5REQyMDZGMzM3OTFDREQwN0MwMjgxNTYwCi06MTA1NjkwMDBERDFGMUVERDFEMkIxQzEwRDRCMDgzRTAwMDUwODY5NTRECi06MTA1NkEwMDAxMDAwNDA4QTk0MTg2RDJBNEYwRjM1MTEwQzM0MDkyNENDCi06MTA1NkIwMDA0MDgwMEE1NjBBMjg2Mjk0MEQ1NTA5MkY1MTQwMEY0NDI0Ci06MTA1NkMwMDAxMTBCNDQwQTA4OTcwQzBGNzczNjhGNDAwRjc3MzYyMjVDCi06MTA1NkQwMDA1MTQxMDdGRjBDOUY0MEE4NzcyRjYyOTUyNzY2OTQwRkQyCi06MTA1NkUwMDA5ODBDMDI4ODM2ODc0MTA3ODgzNkIxMzMwODc3MENBRkFCCi06MTA1NkYwMDA4RjJGNjY5NTk3NDEwMzAzNDJCMTM4MDgwODQyOThFMDFFCi06MTA1NzAwMDBEMTBGMDAwMDFDREQwMzE0REQwM0JGQzUyNDQyQjU2NEM2Ci06MTA1NzEwMDAzMDU1QzA5MUMwRDAxNkREMDAwNDg4NDMyQkMwMDBDMEI2Ci06MTA1NzIwMDA0MDZEMzkzRTAwNDEwNDAwOTcxQTc3ODAxNjJGQTI5NUVDCi06MTA1NzMwMDA4RTUwQUZFRTJFRUQyMDA2RUUzNjlFNTAyREE2OTU2MEQzCi06MTA1NzQwMDAwMDFBMDAwMDc3QjAwOTgzNTA5RDUwMjNBNjk1NjAwMDkxCi06MTA1NzUwMDAwMjIzQTI5NTIyM0QyMDA2MjIzNjIyQTY5NUIxNDRCNDBBCi06MTA1NzYwMDA1NUI4QUEyOEM0MDBEMTBGMDQ4ODQzMjhDNDAwRDEwRjFCCi06MTA1NzcwMDA2QzEwMDQxNURDRUExM0RDRUFDMDQwMDRFNDMxMDAwMkRBCi06MTA1NzgwMDAwMDg4NTBDQjgxNUJGRkJDMUNEQ0U3MEMyRDExQURDQzNECi06MTA1NzkwMDAyQkMyODIyQUMyODM5NDUwN0JBQjE0MkVDMjg0MjlDMkFFCi06MTA1N0EwMDA4NTBBQkQwQzBFOTkwQzBEOTkwQzA5MjkxNDYwMDAwNTkxCi06MTA1N0IwMDAwQkE5MEMwOTI5MTQ5OTMwMTVEQzdCMkE1MTAyMEFFNDQzCi06MTA1N0MwMDAzMTJBMkNGQzU4MDA0OTJCMzIwMDFFREM3NDJCQkNGRjA0Ci06MTA1N0QwMDAyQjM2MDBDQ0I1QzhBM0QyQTBEMTBGMDBEMkEwMDRFNEQwCi06MTA1N0UwMDAzMTAwMDIwMDJERTI4MjJDNTEwMjJGQkFGRjBGREQwMUExCi06MTA1N0YwMDAyREU2ODIwQ0U0MzFEMTBGNkMxMDA0RDEwRjAwMDAwMEIzCi06MTA1ODAwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0MTNEQ0M3QzBEMTkxCi06MTA1ODEwMDAwMzIzMDkyMzMxOERDMEEwNkYzNDAyNjAwMDg5MUJEQzkzCi06MTA1ODIwMDA2MUM3Q0YxOERDQzAwQzI5MTFBOTg4MjY4MjgzMjU4Mjg0Ci06MTA1ODMwMDA4MjE5REM1QTc2NTE0NDI3NTIwMDJFODI4NTI1NUMwNDU5Ci06MTA1ODQwMDAyNTg2ODI3NUU5MDUyNTgyODQyNTg2ODI3NjU5NTQyNjI3Ci06MTA1ODUwMDA4Mjg0RDU2MDI2ODY4MjI2ODY4MzBBRTQzMTAwMDIwMDhGCi06MTA1ODYwMDAyMzkyODIyRkIxMDIwMDIxMDQwMEQ0MUEwQzQ0MDMwNEI1Ci06MTA1ODcwMDAzMzAxMjM5NjgyMEZFNDMxNjAwMDAyMDBEN0EwNzY1OUVECi06MTA1ODgwMDAyMjBBRTQzMTAwMDIwMDJFOTI4MjAwMjEwNDI4QjEwMjkzCi06MTA1ODkwMDAwMERGMUEwQ0ZGMDMwRkVFMDEyRTk2ODIwOEU0MzFEMkNFCi06MTA1OEEwMDA3MEQxMEYwMEQyNzBEMTBGQzAyMEQxMEY2QzEwMDREQjZCCi06MTA1OEIwMDAzMDg2MjAxNURDMzkyODBBMDAyODI1MDJEQTIwMjhCMDk1Ci06MTA1OEMwMDAwMDJDQjAwNzA1ODgwQTI4ODI0QzJEMEEwMTBCODAwMEE1Ci06MTA1OEQwMDBEQkEwNjVBRkU2MUFEQzMyMEE0QTBBMjlBMkEzQzdCRkQ5Ci06MTA1OEUwMDA3NjkxMDFEMTBGMkJBNkEzRDEwRjAwMDA2QzEwMDRDMDNDCi06MTA1OEYwMDBEMUM3Q0YxQkRDMkNDMEEwMThEQzI4MEMyOTExQTk4ODJCCi06MTA1OTAwMDA4Nzg1ODU4NDE5REMyNjc3NTE3OTg2NTA4RTg3QjQ1NTMyCi06MTA1OTEwMDA5NTg0NzVFOTAzODU4Njk1ODQ3NzU5NkM4Rjg2OUY4NTc0Ci06MTA1OTIwMDA5Rjg0MEFFNDMxMDAwMjAwMjM5MjgyQjQyRTAwRTEwNDM1Ci06MTA1OTMwMDAyRkIxMDIwMEQ0MUEwQzQ0MDMwNDMzMDEyMzk2ODIwRkMyCi06MTA1OTQwMDBFNDMxMEFFNDMxMDAwMjAwMjM5MjgyMDBENDFBMEM0NEFDCi06MTA1OTUwMDAwMzA0MzMwMTIzOTY4MjBGRTQzMUQyNjBEMTBGMDAwMDlCCi06MTA1OTYwMDAwQUU0MzEwMDAyMDAyMzkyODJCNDI4MDA4MTA0MjJCMUFCCi06MTA1OTcwMDAwMjAwRDQxQTBDNDQwMzA0MzMwMTIzOTY4MjAyRTQzMTVBCi06MTA1OTgwMDBEMkEwRDEwRkQ2QTA3NzUxRDZEMjYwRDEwRjAwMDAwMDlGCi06MTA1OTkwMDA2QzEwMDQyNzBBODAxQ0RDMjgxRERDMjgxQURDMDAwQzkzCi06MTA1OUEwMDAyOTExQUE5OTJBMkNGQzJCOTI4NTBEQUEwMjlDQjE5QTQ2Ci06MTA1OUIwMDBCMEMwNTExM0RDMjUyODkyODUxNkRDMjExNERDMjJBNjA4Ci06MTA1OUMwMDAyNjA0MjQwQUI4ODgyODk2ODUyMzQ2OTFBNzY2MjU2NDZDCi06MTA1OUQwMDA5RkQxMEYwMDZDMTAwNDE5REM1NTBDMkExMUE5QTk4OTVDCi06MTA1OUUwMDA5MEM0ODQ3OThCNzYxQkRDNDVBQkFDMkFDMjgzMkNDMjc1Ci06MTA1OUYwMDA4NDdBQzE2ODhBQTAyQkJDMzBEM0EwNjRBMDVFMEIyQjM0Ci06MTA1QTAwMDAwQTJDQjJBMzE5REMwRjY4QzAwNzFEREM0OUQzMEY3RDM3Ci06MTA1QTEwMDBDOTRBQTkyOTI5OUQwMTI5OTAxRjY4OTEzMjcwQTYwM0JFCi06MTA1QTIwMDBEM0EwQ0E5RTY4OTIxMEM3QUYyQUI2QTMyQTJDRkM1QkVCCi06MTA1QTMwMDBGRkFGRDIzMEQxMEYwMDAwMTNEQkVGMDNBMzAxOEMzMTk1Ci06MTA1QTQwMDAxRERCRTAwQzhDMTQwRENDMDEyQ0I2QTM2M0ZGREMwMDM1Ci06MTA1QTUwMDBDMDIwRDEwRkRBMjA1QkZGQ0VDMDIwRDEwRkMwMjBEMUYzCi06MTA1QTYwMDAwRjAwMDAwMDZDMTAwNERCMzBDMEQwMTlEQkNCREEyMDUzCi06MTA1QTcwMDAyODMwMDAyMjMwMDcwODQ4MTIwOTg4MEEyODgyNENEQ0E2Ci06MTA1QTgwMDAyMDBCODAwMDFCREJDNjBDNEExMUFCQUEyOUEyODQwOTlCCi06MTA1QTkwMDAyOTBCMjlBNjg0RDEwRjAwNkMxMDA0QzA0MTE4REJCRjZDCi06MTA1QUEwMDAxN0RCQzEwQzI2MTFBNzI3Mjc3MDMwQTg2NjI1NjI4NjUwCi06MTA1QUIwMDAwMDcxMDRBMzU1MDA0NDFBNzU0MTQ4MjI2Mjg0MTVEQjI1Ci06MTA1QUMwMDBFMjAyMzIwQkM5MjI4ODIxMTdEQkJFMDg4NDE0MDc0NDg2Ci06MTA1QUQwMDAwMTc1NDkwNUM4MzRDMDIwRDEwRkQxMEYxRERDMTVDMDk4Ci06MTA1QUUwMDBCMjhFMjAxRkRCQUQwRTBFNDNBRkVDMEZFRTBBMkJDNEJGCi06MTA1QUYwMDBBMDJERTYyNEMwMjAyQTYyODQwODA5NDcwQTk5MEIyOUIwCi06MTA1QjAwMDA2Njg0RDEwRkMwMjBEMTBGNkMxMDA0REIzMEMwRDAxOEQ4Ci06MTA1QjEwMDBEQkEyREEyMDI1MzAwMDIyMzAwNzA4NTgwQTI4ODI0QzAwCi06MTA1QjIwMDBEQzIwMEI4MDAwODkzMTcwOUUxMjFCREI5QzBDNEExMTFCCi06MTA1QjMwMDBBQkFBMjlBMjg0MDkyOTBCMjlBNjg0RDEwRjA5Qzk1MjJECi06MTA1QjQwMDA2ODUzMjYwMDkxMDQxOERCOTdDMEExMkY4MTEyMDBBQTg4Ci06MTA1QjUwMDAxQTBBRkYwMjJGODUxMjFFREI5MTBDNEQxMUFFREQyQ0FGCi06MTA1QjYwMDBEMjg0MEMyQzBCMkNENjg0RDEwRkMwODExRkRCOEVCOEI1Ci06MTA1QjcwMDA5QTBBMEE0NzAwQTEwNDJFRjExMjAwODgxQTA4RUUwMkMwCi06MTA1QjgwMDAyRUY1MTIxRERCODYwQzRDMTFBRENDMkJDMjg0MEIyQkQ5Ci06MTA1QjkwMDAwQjJCQzY4NEQxMEYwMDAwNkMxMDA0REIzMEMwRDAxOTcxCi06MTA1QkEwMDBEQjdFREEyMDI4MzAwMDIyMzAwNzA5ODgwQTI4ODI0QzYwCi06MTA1QkIwMDBEQzIwMEI4MDAwMUNEQjc5MEM0QjExQUNCQjJBQjI4NEJGCi06MTA1QkMwMDAwQTJBMEIyQUI2ODREMTBGNkMxMDA0QzA0MTE4REI3MzZCCi06MTA1QkQwMDAxNkRCNzUwQzI3MTFBNjI2MjY2MDMwQTg3MjI1MjI4NkIyCi06MTA1QkUwMDAwMDYxMDRBMzU1MDA0NDFBNzU0MTA4MjIyMjg0MDIzMjQwCi06MTA1QkYwMDAwQkQxMEYwMEMwMjBEMTBGNkMxMDA0MTVEQkNFMDI0OTcxCi06MTA1QzAwMDAxNDI5NTYxMTI0NTIxMkMwNzMwMjA4NDMwRjg4MTEwMDQwCi06MTA1QzEwMDA4MTA0MDAzNjFBQzc4RjAwNzcxQTA4NzcwMzA3NDQwMUZBCi06MTA1QzIwMDAwNjQ0MDIyNDU2MTJEMTBGNkMxMDA2QzBCMDZFMjMwMjM3Ci06MTA1QzMwMDA2MDAwQTI2NDIwOUQ4NTEwMTNEQkFBMTZEQkJFQzA0MDY1Ci06MTA1QzQwMDBBNkJBMkJBMkFFMEIxOTQxNjQ5MDVFNjg5MTU1Njg5MjdBCi06MTA1QzUwMDA0QTY4OTMzNzI5MzBGRjI4MzBGRTJBQTJBQTA4ODgxMTAzCi06MTA1QzYwMDAwQTBBNEQyQUFDRjIwOTg4MDI3NTg5NDQyQjNEMDEyOUE0Ci06MTA1QzcwMDBCMDAwMkJCMDAxMDg5OTExMEI5OTAyN0E5OTMyQjgzMzEwCi06MTA1QzgwMDAyQjJBMDBCMTQ0NzI0OUI3NjAwMDQ4MDA3RkJGMDUxNTU4Ci06MTA1QzkwMDBEQkFBNjNGRkJFMjUzQUU4NjNGRkI4MDAyNTNBRTg2MzU0Ci06MTA1Q0EwMDBGRkIxMDAwMDI1MEE2NDYzRkZBOUMwNUE2M0ZGQTQwMDg2Ci06MTA1Q0IwMDAwMDcwNUYwODI1MzRGRjA1OEMxNDJDMzRGRTcwQUYwQjg4Ci06MTA1Q0MwMDAwQThEMTQyRTNEMDEyQUU0MDEyREU0MDBEQTQwNUJGRDJCCi06MTA1Q0QwMDA1RDYzRkZBOUQxMEZEMTBGNkMxMDA0MUFEQjMyMTlEQjAxCi06MTA1Q0UwMDAyRjFDREI5NjFCREI5N0MwODBDMDcxNjAwMDBEMDAwMDhECi06MTA1Q0YwMDAwMDIyQTQzMEIxQUEyOTlDMTA3QjkxNUYyNjkyODY3OTVDCi06MTA1RDAwMDBDMjE1QzAyMDZFNjJFOTZEMDgwQUIxMjIwMDIxMDQwMEFDCi06MTA1RDEwMDA3NDFBNzY0QkRCNjNGRkVFMjI5Mjg1MEQ2MzExMDMyNTI3Ci06MTA1RDIwMDAxNDY0NUZDRkQ2NTAwMzJENDM2REQ5MDM5ODIwQjQyMjVECi06MTA1RDMwMDAwNjQ0MTQ2RDQ5MjI5ODIwOTgyMTk4MjI5ODIzOTgyNDhCCi06MTA1RDQwMDA5ODI1OTgyNjk4Mjc5ODI4OTgyOTk4MkE5ODJCOTgyQzRGCi06MTA1RDUwMDA5ODJEOTgyRTk4MkYyMjJDNDA2M0ZGOTcxRURCMTAyNzNBCi06MTA1RDYwMDBFNjgwMjdFNjgxRDEwRjAwNkMxMDA0QzA2MkMwNDExMkFBCi06MTA1RDcwMDBEQjBEMTNEQjc0MjMzMjJEMUFEQjA4MTlEQjZFMkFBMDJFCi06MTA1RDgwMDAwMDI5OTJBRTZFQTMwMjYwMDA5MTI4QUNGRTA5MEQ0MDdFCi06MTA1RDkwMDAyQzFBQzJDMkJEMERDQjM5MkIyNTE2NjQ4MDg5NUJGRjNFCi06MTA1REEwMDBBMjE1REI2OTFBREIxNDJCM0FFODBBM0EwMTU4MDU5ODY4Ci06MTA1REIwMDAyQjIxMTYwQUJCMjhEM0EwMkI1NjAwNTgwNUFGOEI1MEI5Ci06MTA1REMwMDAwQUJCMDgyQTBBMDA1ODA1QUUxNURCNjAyRDIxMDIyQ0ZCCi06MTA1REQwMDAzQUU4MEMzQzI4MDRERDAyMkQyNTAyOUM1MDU4MDVBNjBCCi06MTA1REUwMDA4QjUwQUFCQkMwQTE1ODA1QTYxQ0RCNTkyRDIxMDIwQzYzCi06MTA1REYwMDAzQzI4MDZERDAyMTNEQjU3MkQyNTAyOUMzMDU4MDU5RUZBCi06MTA1RTAwMDA4QjMwQUFCQkMwQTI1ODA1OUUyQTIxMDJDMEI0MEJBQTlGCi06MTA1RTEwMDAwMjBBMEE0RjJBMjUwMjU4MDVCMkQxMEYyNDI0MjNDM0FGCi06MTA1RTIwMDBDQzJDMjUxNjYzRkY3NjAwMThEQjRGMUNEQjRCMTlEQkVGCi06MTA1RTMwMDA0QzFCREI0QTE3REIxRjg1MjAyRTBBRkQxRkRCNEIyRDc5Ci06MTA1RTQwMDAyMDJFMjRGNDdBMjRGNDdFMjRGNDgyMEVERDAxMjRGNDNFCi06MTA1RTUwMDA4NjJFMEFGNzA3NTUyODA2REQwMkMwNzUwRUREMDEwNUZFCi06MTA1RTYwMDAwNTA2QUI1QkE5NTlDMEU4QUM1QzI0QzRBQjBFREQwMkVGCi06MTA1RTcwMDAyN0M0QUMyRTBBREZBODU1MjdCNEVDMEVERDAxMjRCNEVDCi06MTA1RTgwMDBFQkMyRTAyNzk0MkMwRUREMDIyNDk0MkIyRTBBODAwRDA5Ci06MTA1RTkwMDAwRDQ2Mjc1NDZDMjQ1NDZCMEVERDAyMkQyNDJFNjNGRTE4Ci06MTA1RUEwMDBGQzAwMDAwMDZDMTAwNEMzQTBDMEIzNUJGRjUzQzA0QUU5Ci06MTA1RUIwMDAxMkRCMjFDMzgwMjgyNjE2MjQyNjE3QzNBMUMwQjM1QjlBCi06MTA1RUMwMDBGRjRFQzAzQ0MzQTEyQTI2MTYxOURBQjYyOTkwMjAyMzFBCi06MTA1RUQwMDAyNjE3NjQ5MDhGMkEwQTMyMkIwQTAxNUJGRjQ3QzNBMjYwCi06MTA1RUUwMDAyQjBBMDE1QkZGNDVDM0IyMkIyNjE2MjMyNjE3QzJBRjMwCi06MTA1RUYwMDBDMEIxNUJGRjQxQzJGRjJGMjYxNkMwRUUyRTI2MTdDMjhGCi06MTA1RjAwMDBEMjJEMjYxNkMwQzgyQzI2MTcyNDI2MTEyQTIyMTJDN0U1Ci06MTA1RjEwMDBCMzBCQUEwMUMwQjQwQkFBMDIyQTI2MTIyOTBBQTEyOThFCi06MTA1RjIwMDAyNjE2QzE4MjI4MjYxN0MwQjMyQjI2MTEyRTIyMTIxRjM3Ci06MTA1RjMwMDBEQUNBMEZFRTAyMkUyNjEyQzNENjJEMjYxNjJBMEFBMjgwCi06MTA1RjQwMDBDMUMzMkMyNjE3NUJGRjJDMkMwQUEyMkMyNjE2QzFCNTI4Ci06MTA1RjUwMDAyQjI2MTdDMkFCMkEyNjE2QzA5NzI5MjYxNzE4REIwMzUzCi06MTA1RjYwMDAyODI2MTBEMTBGQzNBMkMwQjM1QkZGMjM2M0ZGNkUwMENFCi06MTA1RjcwMDA2QzEwMDQxQ0RBQ0UxQkRBQkIxOERBRkQxN0RBRkUxNjM5Ci06MTA1RjgwMDBEQUZFMTVEQUZFQzBFMEMwRDQxNERBQ0ExRkRBODYyMkJGCi06MTA1RjkwMDAwQTA4MkZGMjAwNkQyQTM2REFDMEQ5QzA3QzVCMDIwRkU2Ci06MTA1RkEwMDBDOTBDMUNEQUMzMEM5QzI4QThDM0E2QzIyQTM2ODAyQUI2Ci06MTA1RkIwMDAyNTg0QTRDMkE3Q0MyRDI0OEMyQjI0OEEyQjI0ODcyRUE1Ci06MTA1RkMwMDAyNDhCQjFCQjJFMzY5RjJDMzY5RTJDMzY5REIxQUMxQzNCCi06MTA1RkQwMDBEQUE1MUJEQUVCQzAyODZEMkEzM0RBQzBEOUMwN0M1QkE2Ci06MTA1RkUwMDAwMjBGQzkwQzFDREFCMzBDOUMyOEE4QzNBNkMyMkEzNjFGCi06MTA1RkYwMDA4MDJCMjU4NEE0QzJCMUJCQTdDQzJEMjQ4QzJFMjQ4QjRFCi06MTA2MDAwMDAyQTI0OEEyRTM2OUYyQzM2OUUyQzM2OURCMUFDQzA3OTIwCi06MTA2MDEwMDAxOURBQTMxQkRBREUxM0RBREIxQURBREIxOERBREQxNDlECi06MTA2MDIwMDBEQUE0MTZEQURDMDRGNDI4MTJEQURDMDQ2NjBDMDQwNUJGCi06MTA2MDMwMDAwNkEyNTJBODU4QUE1QUEzNTM5QjMwMjlBNTAwMjc4NDI4Ci06MTA2MDQwMDA4QUMwOTFDMEE1MkE4NDhDMjk4NDhCMTdEQUQ1MThEQUU2Ci06MTA2MDUwMDBEM0E3NTcyNjM2MUQyNjM2MUUyRTM2MUYxNkRBRDIxMzI0Ci06MTA2MDYwMDBEQUQyQTY1NTA0MzMwQzI4MjZDODJFNzUwMDJENTRBQzYwCi06MTA2MDcwMDAyRTU0QUIyRTU0QUEyMzI2RTYyMzI2RTUyRTI2RTdEMTVFCi06MTA2MDgwMDAwRjAwMDAwMDZDMTAwNjEzREFBRjE3REFBQTI0NzIzRDc1Ci06MTA2MDkwMDAyMjMyOTM3RjJGMEI2RDA4MDUyODMyOTM3RjhGMDI2Mzg2Ci06MTA2MEEwMDBGRkYzQzBDNEMwQjAxRURBM0ZDMDYxRDk0MDA5NjkzOUVFCi06MTA2MEIwMDAyOUU0MjA2RTQ0MDFENkIwQzMyOERGQjAyNkU0MjIwNkNFCi06MTA2MEMwMDAyRjM5MkZFNDIxQzA1MDFGREFCOTE5REFBQTE2REFBQjNBCi06MTA2MEQwMDAxOERBNzk5NDEwMkE3MjQ1OERFMDE3REFBNTlEMTExRDAyCi06MTA2MEUwMDBEQUI0NkRBOTRCRDQ1MDI1NUMwMzdBNUIxOERFNTA3NTg5Ci06MTA2MEYwMDA2QjA1MkUxMjAxMEU1RTBDMTJEQTZFMDJFMjI4MDExMUZGCi06MTA2MTAwMDAwMkFGMjIyMkQ2ODFENTQwMTNEQTZBNzQ2QjA1MjUxMkJDCi06MTA2MTEwMDAwMTA1NDUwQzAzNTMyOEIxNDVBODNFQTkzMkE3MzMyMkY3Ci06MTA2MTIwMDAzNjlEMjIzNjlFMjQzNjgwMkIzNjlGMkJFNDhCMkNFNDIyCi06MTA2MTMwMDA4QzE0REE4NDI0NDI0REMwMzAwNDE0MTRDODRDNkQwODA5Ci06MTA2MTQwMDAwNkIxMzMwNDE0MTRDODQyNjNGRkYyMDAxNkRBMTNDNDE0Ci06MTA2MTUwMDA0MEMxNTgwMDMxMDQxQURBMTNDMEIxOTNBMjAwQkIxQTJGCi06MTA2MTYwMDBCMEJCOUJBMzE4REE3ODI5ODI0RDIzODI0RTI4ODI1MzM0Ci06MTA2MTcwMDA3QTg3MUMyQzY0MDA4QzEwNkZDNDQ4MUVEQTBBMDQzRDE4Ci06MTA2MTgwMDAwQzJERTUxQzJGRTExRDJERTUxQTJGRTUxQkQxMEYwMDZECi06MTA2MTkwMDBDMDcyMTJEQTY4ODIyMDdFMjdEQjAzMDM0RjI3NjQwMDc3Ci06MTA2MUEwMDA4ODEwQzA2MTZGODQzMEMwQTAwMzE5MTQwQTU0MzkxQUQyCi06MTA2MUIwMDBEOUZEMDQ5OTBDMjlBNTFDMjlBNTFEMjlBNTFBMjlBNUQ1Ci06MTA2MUMwMDAxQkQxMEYwMDFDRDlGODA1M0IwQzJCQzUxQzJEQzExRDg0Ci06MTA2MUQwMDAyQkM1MUEyREM1MUJEMTBGMDY1NDM5MDMxRTE0MDRFRTBFCi06MTA2MUUwMDAwQzJFQTUxQzJFQTUxRDJFQTUxQTJFQTUxQkQxMEYwMDA5Ci06MTA2MUYwMDA2QzEwMDgxQUQ5RUMxNERBNEYxM0RBNTJDNzJGQzA1MEJBCi06MTA2MjAwMDAxNkRBNkMyNTY2QTgyNTY2QTkyNTY2QUEyNTY2QUIyMjNFCi06MTA2MjEwMDAzNjI5MkI0MjQ1MTlEQTEzRDgxMDFDREE2NkMwRDQ5REYyCi06MTA2MjIwMDAxMTlDMTAwMDgwODkwQjk5MEM5OUEwMjgxNjAyNUJGRjI1Ci06MTA2MjMwMDA5NTJBMzJFMzFGRDlEQzBBNUExNDlBRjQyOTMyRTRCMUMwCi06MTA2MjQwMDA5OTA5NTkxNDBBOTkwQzk5RjUyODMyRTUwODU4MTQ5OEI3Ci06MTA2MjUwMDBGNjJFMzJDRDBFNUUxNDJFRjYwNzVCRkY0NTVCRkYxMTY2Ci06MTA2MjYwMDAyMjQ2M0IxQ0Q5RDAyQUMxMDJDMUIwMEJBQTAyMUJEQUJDCi06MTA2MjcwMDAyQTBBMEE0RjJBQzUwMjJCNDYzQTU4MDQ5OTVCRkVCQUVECi06MTA2MjgwMDA1QkZFOTVDMEIwODYxMzE3RDlDNTI1MzYyREM3NEVDMDA1Ci06MTA2MjkwMDAzMDk0MTRDMDUwMTREOUNBNjAwMDQzMDAwMDdGOUYwRjhGCi06MTA2MkEwMDBCMTU1MDkxOTE0NjU5RkY0QzA1MDBBQTkwMjdGQTdFRkUwCi06MTA2MkIwMDAxOEQ5QkFEQTUwMDg1ODBBMjg4MjJDMkIwQTAwMEI4MDA5Ci06MTA2MkMwMDAwMDAwNTEwNEQyQTBDMDkxQzdBRjAwOTkxQTBBOTkwM0U3Ci06MTA2MkQwMDAyOTE2MDRDRTMzNjQyMDYzRDMyMDJCMjAwN0Q2NTA4QzlDCi06MTA2MkUwMDAxNDJBNzI4MjdDQTg1QzE4RDlBQzA4NTgwQTI4ODIyQzFGCi06MTA2MkYwMDBEQTUwMEI4MDAwRDJBMDY0M0ZEQThBMzEwQThBMTQwNDkzCi06MTA2MzAwMDBBQTAxQzgyQTJCMjIwMTBCOEIxNDA0QkIwMTdBQjk0MEM1Ci06MTA2MzEwMDBEREEwNkVBMTA4MUREOUEzMkREMjAwMERBRDBDREIzMDgwCi06MTA2MzIwMDBEQzYwMUFEOUUzMThEOTlDMEFEQTI4MDg2ODBBMUREQTUxCi06MTA2MzMwMDAxRjI4ODIzQ0FEQUEwQjgwMDA2NTJGOUJEMzIwQzBCMEU0Ci06MTA2MzQwMDA2M0ZGOUIwMENBNUNCMTU1MDA1MDA0MEEwOTE5NjNGRjQyCi06MTA2MzUwMDA0QkRDQjA2RUIxMDkxQ0Q5OTM4Q0MwRDMwRjBDQkMwQ0I0Ci06MTA2MzYwMDAxREQ5RDQxRURBMTIwRENEMjhBRUREMUVEQTExMkRFNkIwCi06MTA2MzcwMDA4MTYzRkY5QjdGQTdDRTYzRkY2QzAwMDA2QzEwMDQxQjQyCi06MTA2MzgwMDBEOTg3MjcyMjFFQzA4MDA4RTQzMTAwMDIwMDJBQjI4Mjg5Ci06MTA2MzkwMDAxOUQ5ODUwMDMxMDRDMDYxMDA2NjFBMjk5MTAyMEE2QTgwCi06MTA2M0EwMDAwMjJBQjY4MjA5RTQzMTE1RDlERjBDMzgxMUE4NTMyODI2Ci06MTA2M0IwMDAzMjgyMjQzMjg0MkE4Q0ZDNzg0MTEwMjkyMTAyMkEzNjI4Ci06MTA2M0MwMDA4Mjk3QTAwOTY5MDIyOTI1MDJEMTBGMDAyQjIxMDIyQ0Y2Ci06MTA2M0QwMDAzMjg1MEI2QjAyMkNDQ0ZDMkMzNjgyOTdDMDJCMjUwMjBECi06MTA2M0UwMDBEMTBGMDAwMDZDMTAwNkMwQzcxQkQ5NjgxQUQ5NkEwREZFCi06MTA2M0YwMDA0RTExRDcyMDg4MjA4NTIyRDk4MDA1NDUwQjAyODIwQ0JBCi06MTA2NDAwMDA5NTcyMjIyQ0Y0QzgzNDZGMkUwMjYwMDBBQjFGRDk2MDQ1Ci06MTA2NDEwMDBBOUUyQUY3RDcyRDMzNEM5M0RDMDIxMkYwQTAwMDkyRkY0Ci06MTA2NDIwMDAzODBGMEY0MkM5RjkyQUI2N0U2RDRBMDUwMDMwODgwMDQwCi06MTA2NDMwMDA5MDhDMjI3MjAwMDJFMjA4NzJEMTc0OTI3MEQyODBEMUU0Ci06MTA2NDQwMDAwRkMwNTAwMzI1Mzg3NUMwREY2M0ZGRDkwOTdEMENBRjNECi06MTA2NDUwMDBERDBERUUwQzY0MzA0RUQyMzAwRDNGMTI5NjExMkYxNjJBCi06MTA2NDYwMDAwMDJGRkMxMDBGNEYzNjI2MEEwMTI1MEEwMDA5NjUzODU3Ci06MTA2NDcwMDAwNTA1NDI2NDUwNzEyQUI2N0U2REZBMDUwMDIwODgwMDM5Ci06MTA2NDgwMDA5MDhDQzA1MEEzRDI4OTEwMjM3QzBDMDk0NDBDMjkwQTlCCi06MTA2NDkwMDAwMTAzOTUzODA1MDU0MjY0NTA1QTJBQjY3RTZENEEwNUI3Ci06MTA2NEEwMDAwMDIwODgwMDMwOENEMjgwQTdFQUJDQUE5QTcwRDEwRjU1Ci06MTA2NEIwMDBEMjgwQkM3QjlCNzBEMTBGMDAwMjNGMTRDMUQwRDIzMDgwCi06MTA2NEMwMDAwRkREMEMwRDREMzYyOThEMDhDMEYxMjUwQTAwMDlGNUE4Ci06MTA2NEQwMDAzODA1MDU0MkNBNTgyQUI2N0U2RERBMDUwMDIwODgwMEM0Ci06MTA2NEUwMDA5MDhDODk3MDYzRkYyNTAwQzA2MUMwNTAwMzY1Mzg3NUNBCi06MTA2NEYwMDBDMDg2NjNGRjgwQzBEMDAyOUQzODdEQzA5RjYzRkY5OTM2Ci06MTA2NTAwMDBDMDUwMDNGNTM4NzVDMEQwNjNGRkNBMDA2QzEwMDRENkM0Ci06MTA2NTEwMDAyMDY4NTIwRjY5NTMyNERBMjBEQjMwREM0MDU4MDBGMDQ5Ci06MTA2NTIwMDBEMkEwRDEwRkRBMjBEQjMwREM0MDU4MDBFRDlBMjQyNEQxCi06MTA2NTMwMDAyNDBFQzAyMTIyNjQwRkMwMjBEMTBGMDBCODNCQjA0QzA0Ci06MTA2NTQwMDAyQTJDNzQ4OTI0MkQyMDBFMkUyMDBGQTREREIxRUUyRUNFCi06MTA2NTUwMDAyNDBGQjBERDJEMjQwRTI4OTAwNzJEOTAwM0E0ODhCMEMxCi06MTA2NTYwMDA4OEIxREQyRDk0MDMyODk0MDc1QkZGOUU2OTUxMURDMEZGCi06MTA2NTcwMDBFMDgyMjQyQTYwMEYxOEQ5OTAyQTI0MDMyOTYwMEU4RjA0Ci06MTA2NTgwMDAyMDI5MjQwNzA4RkYwMjlGMjA5RTY0RDEwRkMwMjBEMTNDCi06MTA2NTkwMDAwRjAwMDAwMDZDMTAwNDk0MjMxOUQ5ODhDMEIzMDgzQTg2Ci06MTA2NUEwMDAxMTBCQUEwMjk5MjAxOUQ4RkQ5QTIxMjg5MjlEMTZEODdDCi06MTA2NUIwMDBGQUMwNTAyNTY0QTIyODhDMTgyODk2OUREMTBGMDAwMDlGCi06MTA2NUMwMDA2QzEwMDQyODIwNjZDMDM4MjMyNDA2Qjc4ODI4MjQ2NjY3Ci06MTA2NUQwMDBEMTBGMDAwMDZDMTAwNjAzNUEwQzBEMzYxMTBENUMxMTIyCi06MTA2NUUwMDBEODIwOEIyMjgyMjEwQ0JCMEMwNjU1MEY5QjgyMDIzMkQ1Ci06MTA2NUYwMDAwQjkyODExM0Q4RTdEOTIwQTM4RjY0NTA1MzFDRDhFM0EyCi06MTA2NjAwMDBDMEQ3MUJEOEU0QTI1NkMwRTEyOTBBMDAwNEU5MzgwOTIyCi06MTA2NjEwMDAwOTQyNzZGMzRBMDQ0MzAyQzk5RTJCQzY3RTZEQUEwNTQxCi06MTA2NjIwMDAwMDIwODgwMDMwOEM4OTgxQTk1OTA5RkEwQzY0QTA3OTZFCi06MTA2NjMwMDA5OTgxOEE4MkM4QUREMjkwRDEwRkMwNjAwMkU2Mzg3NkM3Ci06MTA2NjQwMDBEMERBNjNGRkQ0QzAyMEJDODk5OTgxOTk4MDkyODJEMTJECi06MTA2NjUwMDAwRjdGMjMwNDI5MkRGODk5ODE2NUJGRDk2M0ZGRTUwMEQ5Ci06MTA2NjYwMDAwMjhGMENBM0ZGMEYzMzEyOTMxMDAzQUEwQ0QzNDBDQjVECi06MTA2NjcwMDA5RTJCQzY3RTg2MTA2RDZBMDUwMDIwODgwMDMwOENCQzdCCi06MTA2NjgwMDA4MjI5MEEwMDA0RjMwODI0MEEwMTAzNDkzODA5MDk0MjRGCi06MTA2NjkwMDBDQTk4MkJDNjdFNkRBQTA1MDAyMDg4MDAzMDhDMEY1OTQxCi06MTA2NkEwMDAwQ0E5ODlCQzk5OTk4MTYzRkY4N0JDODk5OTgxNjNGRjkzCi06MTA2NkIwMDA4MEMwNjAwMkU2Mzg3NkQwQkE2M0ZGQjRDMDcwMDI0NzhCCi06MTA2NkMwMDAzODc3RDBEMDYzRkZDQTAwNkMxMDA0MTREOEMwQzE1MjEwCi06MTA2NkQwMDBBNDI0QzkzRTI4MjIxRDczODExOTI5MjEwMkNEOTMyQUExCi06MTA2NkUwMDAzMDAwNzVBOTEyREEyMERCMzAyQzMwMDdDMEQyNTgwMUY3Ci06MTA2NkYwMDBDNDY1M0ZERkQxMEYwMDAwMkIzMDA3MDNCQjBCREFCMEJFCi06MTA2NzAwMDA3NEIzMDIyQUJERjhEM0EwNjNGRkM2MDA2QzEwMDQyOTNECi06MTA2NzEwMDAyMDA2QzA3MDZFOTc0MTI5MjEwMkMwOEYyQTIwMTRDMDI0Ci06MTA2NzIwMDBCNjJCMjQwNjA2QUEwMjJBMjQxNDc5ODAwMjI3MjUwMjAxCi06MTA2NzMwMDAyQTIyMUUyQzIyMUQ3QUMxMEVDOEFCREEyMERCMzAyQzk3Ci06MTA2NzQwMDAwQTAwMDMzRDAyNUJGODIyNjQ1MDc1MkQyMTAyMEQwREY1Ci06MTA2NzUwMDA0Q0M5RDNDMDIwRDEwRjAwMDAyRTlDRkI2NEUwODIyRkQ3Ci06MTA2NzYwMDAyMTAyMEYwRjRDNjVGMDkxMUFEODhEMUNEODhCMjlBMkVECi06MTA2NzcwMDA5RUMwOEE3OThCNUQyQkMyMjY2OEIwMDQ4RDIwN0JEOUEwCi06MTA2NzgwMDA1MjI5QTI5REMwRjM2NDkwNEE5NzkwMUREODlFMkUyMTU1Ci06MTA2NzkwMDAwNDlEOTYwOEVFMTEwRkVFMDI5RTk3OUU5MTI3QzRBMkNCCi06MTA2N0EwMDAxOEQ4OUEyRjIxMDIyQkEyOURDMEU1MkUyNDA2MkJCQ0JGCi06MTA2N0IwMDAzMDA4RkYwMjJCQTY5RDJGMjUwMkMwMjBEMTBGMDAwMDFDCi06MTA2N0MwMDAwMDJGMzAwMDY4RjkzOERBMjBEQjMwREM0MDU4MDA0NDE0Ci06MTA2N0QwMDA2M0ZGNzcwMDAyMkEwMjJCMEEwNjU4MDBENDIyMEEwMDFGCi06MTA2N0UwMDBEMTBGNjU1MDEwMjgzMDAwNjg4OTI0MDIyQTAyMDMzQjJCCi06MTA2N0YwMDAwMkRDNDA1ODAwM0JDMDIwRDEwRkQyNzBEMTBGMDAwMDA2Ci06MTA2ODAwMDAyQTJDNzQwMzNCMDIwNDRDMDI1QkZFRjY2M0ZGM0IwMDQwCi06MTA2ODEwMDBEQjMwREM0MDJBMkM3NDVCRkVGM0MwMjBEMTBGMDAwMDdCCi06MTA2ODIwMDA2QzEwMDRDODNGODkyNjg4MjlBMzk5OTkyNjA5ODgwQ0U5Ci06MTA2ODMwMDAwODA4NDgyODI1MjVDQzUyQzAyMEQxMEZEQjQwMkEyQzNGCi06MTA2ODQwMDA3NDVCRjk0OUQyQTBEMTBGNkMxMDA0RDgyMEQ3MzA4MkU0Ci06MTA2ODUwMDAyMjBENDUxMTA1MjIwQzkyODI2NDIwNzQwNzQyMEIxMzBECi06MTA2ODYwMDBEODRDRDQyMEEzODM3MzIzMDIyNDJERjg4NTgwNzQ1MTNGCi06MTA2ODcwMDA0Q0JDODJDMDkwNkQwODE2MDA0MDg4MDA3MDhDNzczOTNGCi06MTA2ODgwMDAwM0Q3MjBDMDkxODY4MDc0MzkwMUQ0MjA3NDYxMDI2M0RCCi06MTA2ODkwMDBGRkUyQ0E5OEMwOTdDMDQxMUJEOENBQzBBMDBCOEIwQzlFCi06MTA2OEEwMDAwQjRBMzgwQTBBNDJDOUFBMUREODM5MUNEODNBMkNENjM0Ci06MTA2OEIwMDA3RUMxNDBEMzBGNkQ0QTA1MDAyMDg4MDAzMDhDOTc4MDQwCi06MTA2OEMwMDBEMjcwRDEwRkJDOEZDMEUwMEY0RTM4N0U5MEUyNjNGRkQ0Ci06MTA2OEQwMDBENkJDODI5MjgxOTI4MEMwMjA5MjgyRDEwRjAwMDAwMEFCCi06MTA2OEUwMDA2QzEwMDZDMEQ3MUNEODI5MUJEODJCMEQ0OTExRDcyMEY2Ci06MTA2OEYwMDAyQTIyMUYyODIyMUQwQTRBMEJEMjgwMDc4NjBDMkE3NkRDCi06MTA2OTAwMDAxRjI2NkM4MEM4MzQ2RjZFMDI2MDAwRDAyRjBBODAxQTc4Ci06MTA2OTEwMDBEODJGQTI5RUFBN0E3RUEzM0ZDOTNGQzBFMUMwNTAwMkYxCi06MTA2OTIwMDBFNTM4MDUwNTQyQ0E1NTJCQzY3RURCMjBEMzBGNkQ0QURDCi06MTA2OTMwMDAwNTAwMzA4ODAwQjA4QzJFNzIxREFFOUUwRUE1MEM2NDMyCi06MTA2OTQwMDA1MDhBRDI4MDJFNzYxREMwOTEyOTg0MDNEMTBGQzA1MDY5Ci06MTA2OTUwMDAwM0U1Mzg3NUQwRDM2M0ZGQ0QxNUQ4MUMwMjdFMENBNTk2Ci06MTA2OTYwMDBFRTY0MzA1NURBMzAwRTM1MTI5NjEyOTUxMTI1NUMxMDEyCi06MTA2OTcwMDAwNTQ1MzZDMDYxOTUxMEMwNTAwMjY1MzgwNTA1NDI2NDcyCi06MTA2OTgwMDA1MDg5MkJDNjdFODUxMEQzMEY2RDVBMDUwMEEwODgwMDU0Ci06MTA2OTkwMDAyMDhDQzBBMUEzRTJDMDUwMjNGQTgwMDM3MzBDMDNBNThFCi06MTA2OUEwMDAzOEFGNzMwNTA1NDI2NDUwNzIyQkM2N0U4NTExMDU0NUNDCi06MTA2OUIwMDAwQzZENUEwNTAwMjA4ODAwMzA4Q0QyODBDMEExMEU5QjNGCi06MTA2OUMwMDAwQ0FCN0JBRkJCMkI3NjFEMkE4NDAzRDEwRkQyODBDMENBCi06MTA2OUQwMDBDMUFGN0QyRDc2MUQyQzg0MDNEMTBGMDAwMDA2M0YxNDFFCi06MTA2OUUwMDBDMUUwRDIzMDBGRUUwQzBFNEUzNjJBOEQwOEMwRjEyNUQ0Ci06MTA2OUYwMDAwQTAwMEFGNTM4MDUwNTQyQ0E1QzJCQzY3RTZERUEwNTE5Ci06MTA2QTAwMDAwMDIwODgwMEEwOEMyMjcyMUQ2M0ZFRkZDMDYxQzA1MDcwCi06MTA2QTEwMDAwMzY1Mzg3NUQ4MDI2M0ZGNkI2M0ZGNjVDMDUwMDJBNTNDCi06MTA2QTIwMDAzODc1RDA4NzYzRkY4MTAwQzA2MDAzRjYzODc2RDBDQzFDCi06MTA2QTMwMDA2M0ZGQzYwMDZDMTAwNDJBMjAxNTI5MjAxNjE0RDdEOTJDCi06MTA2QTQwMDAwQTk5MENDQjlEMkUyMDBCMDRFRDA5MkJEMTFDMDlCQ0ZGCi06MTA2QTUwMDAzNkFDQUEwQ0JCMEMyQkQ1MUMwQTBBNDcyQTI0MTVDQjMyCi06MTA2QTYwMDBBMThCNDM4RjI4ODk0MkIwQTgwMDkxMDQwMDg4MUFBOEZFCi06MTA2QTcwMDBGRjBGQkIwMjlCMjc4RjI2MEZCODBDNzgzQjFBQzAyMDU0Ci06MTA2QTgwMDBEMTBGMDAwMDI5MjEwMkMwQTIwQTk5MDIyOTI1MDJDMEMzCi06MTA2QTkwMDAyMUQxMEYwMDhCMjc2M0ZGREMyQkQxMUMwQ0FBMEMwQTIxCi06MTA2QUEwMDAwQTQ3MkEyNDE1QUNCQjJCRDUxQ0M5QUU4QjQzOEMyOEI2Ci06MTA2QUIwMDA4RjQyQjBBRDAwRjEwNDAwREQxQUFEQ0MwQ0JCMDI5QkRGCi06MTA2QUMwMDAyN0RBMjBCN0VCNTgwMDE5QzAyMUQxMEY5RjI3NjNGRkE5Ci06MTA2QUQwMDBFRjAwMDAwMDZDMTAwNDI4MjAzQzY0MzA0NzA1MzA2MDUzCi06MTA2QUUwMDAwMDA3M0UwMTA1M0VCMTU2MDc2NTM5MDU0OTI4Qzc3RkI1Ci06MTA2QUYwMDBBOTMzMDMwNjQxMDc2NjAzQjE2NjA2MDY0MUE2MzM3RTQ1Ci06MTA2QjAwMDA4NzFFMjIyMTI1MjkxQUZDNzMyQjE1MDIzODBDMDk4MUI2Ci06MTA2QjEwMDA2MDAwMDYzRTAxMDIzRUIxMjQwNjQyMzkwMzIyMEFEMTNBCi06MTA2QjIwMDAwRkQyMzBEMTBGQzA1MTYzRkZDMDAwMDA2QzEwMDQxREE0Ci06MTA2QjMwMDBENzlCMjcyMjFFQzA4MDA4RTQzMTAwMDIwMDJDRDI4MjlECi06MTA2QjQwMDAxQkQ3OTkwMDMxMDRDMDYxMDA2NjFBMkJCMTAyMEM2QzhFCi06MTA2QjUwMDAwMjJDRDY4MjBCRTQzMTE5RDgxQjBDM0ExMUFBOTMyOEM3Ci06MTA2QjYwMDAzMjgyOTc4MDI1MzI4MjI0MzI4NEI0NTUyNTM2ODI3NTRDCi06MTA2QjcwMDA0MTBBMjkyMTAyMDk2OTAyMjkyNTAyRDEwRjJBMjEwMjhECi06MTA2QjgwMDAyQjMyODMwQTZBMDIyQjM2ODIyQTI1MDJEMTBGMDAwMDlCCi06MTA2QjkwMDA2QzEwMDQxREQ3ODIxOUQ3OEMyNzIyMUVDMDgwMDk3NzVDCi06MTA2QkEwMDAwMjA4RTQzMTAwMDIwMDJDRDI4MjFCRDc3RTAwMzEwNDlGCi06MTA2QkIwMDBDMDYxMDA2NjFBMkJCMTAyMEM2QzAyMkNENjgyMEJFNDY5Ci06MTA2QkMwMDAzMTE5RDgwMDBDM0ExMUFBOTMyODMyODI5NzgwMjUzMkM1Ci06MTA2QkQwMDA4MjI0MzI4NEI0NTUyNTM2ODI3NTQxMEIyQTIxMDIwQTVCCi06MTA2QkUwMDA2QTAyMkEyNTAyRDEwRjAwMkIyMTAyMkMzMjgzMEI2QjYzCi06MTA2QkYwMDAwMjJDMzY4MjJCMjUwMkQxMEYwMDAwMDA2QzEwMDQxQkUyCi06MTA2QzAwMDBENzY3MEMyQTExQUJBQTI5QTI4NkI0Mzg3OThCMjIxQjJDCi06MTA2QzEwMDBENzY0MTlENzhCMEIyQjBBMkJCMkEzMDkyOTA4NjhCMEFDCi06MTA2QzIwMDAwMjc0QjkwRDI5OUQwMTI5OTAxRjZFOTIwODIyQTI4NTM4Ci06MTA2QzMwMDBEMTBGQzAyMEQxMEZDODkyQzAyMEQxMEZEQTIwNUJFRjU2Ci06MTA2QzQwMDAzREMwMjBEMTBGMDAwMDAwNkMxMDA0MTRENzU0Mjg0MjFFCi06MTA2QzUwMDA5RTE5RDc1MTZGODgwMjYwMDBCOTI5OTIyNjY4OTAwNzYzCi06MTA2QzYwMDA4QTIwMDlBQTBDNjVBMEFCMkE0MjlEQzBEQzY0QTBBM0JGCi06MTA2QzcwMDAyQjIwMEMxOUQ3NEIwQ0JDMTFBNENDMkVDMjg2MDlCOTAxCi06MTA2QzgwMDAwQTdFRDMwMjYwMDA5OTI5OTJBMzY4OTAwNzhEMjAwOTlCCi06MTA2QzkwMDBERDBDNjVEMDhCMjVDMjg1NjQ1MDg1MkQyMTA0QzAzMDY0Ci06MTA2Q0EwMDA2RUQ4MEQyQzIwNjZCOENDMEMwQzQ3MkMyNDY2NjVDMDIxCi06MTA2Q0IwMDA3QTFBRDc1MjFDRDc1QjFERDc0ODFFRDc0RkMwODQ5ODZECi06MTA2Q0MwMDA1MTlFNTA4OTIwOUQ1NjlENTQ5MzU3OTM1NTlDNTMwQTJECi06MTA2Q0QwMDA5OTAyMUNEN0JEMUFENzY0OTk1MjhGMjY5OTVBOTg1OTkwCi06MTA2Q0UwMDA5RTU4OTM1RTlDNUQ5MzVDOUE1QjBGMEQ0ODA1REQxMTg5Ci06MTA2Q0YwMDA5RDVGQzBEODFFRDczMjBDQjkxMUE0OTkyODkyODVBRUQ5Ci06MTA2RDAwMDBCRTIzRTRDRjI4OEM0MDI4OTY4NTlGMjkyRDI0MDZDMEQ5Ci06MTA2RDEwMDAyMEQxMEYwMENBMzJEQTIwQzBCNjVCRkY4NEM3MkZEMTYyCi06MTA2RDIwMDAwRkM5MzlEQTIwNUJGRjgxQzcyRkQxMEZEQkQwNUJGRUEzCi06MTA2RDMwMDAxOTIzMjQ2NjJCMjAwQzYzRkY3NkM3MkZEMTBGQzcyRjkyCi06MTA2RDQwMDBEMTBGMDAwMDZDMTAwNEM4NUIyOTIwMDY2ODk0MUM2OEYxCi06MTA2RDUwMDA5NjA3QzAyMEQxMEZDMDIwRDEwRkRBMjBEQjMwREM0MEY1Ci06MTA2RDYwMDBERDUwMkUwQTAwNUJGRTY5RDJBMEQxMEYyRTIwMEMxODM4Ci06MTA2RDcwMDBENzBCMENFRjExQThGRjI5RjI4NkMwODg3OThCNzUxQTAyCi06MTA2RDgwMDBENzA4MEFFQTBBMkFBMkEzNjhBMDA0OEIyMDdBQjk2NDY5Ci06MTA2RDkwMDAyM0YyODU2NDMwNUUxQ0Q3MTIyQTBBODAyRDIwNjgyOUQwCi06MTA2REEwMDAyMDY3MjgyMTA0MEI5OTExMDQ4ODExMDk4ODAyMDhERDQ1Ci06MTA2REIwMDAwMkMwOTQyODRBMTAwOEREMDIxOEQ3MEE5OTMxOTgzMDg5Ci06MTA2REMwMDA4QjJCOUEzNzlEMzQwQ0JCMDI5QjMyQzBDMDlDMzU5Q0U4Ci06MTA2REQwMDAzNjJBMkM3NERCNDBDMEQzMThENkY5MjlGMjg1QThFRUU4Ci06MTA2REUwMDAyOTlDMjAyOUY2ODUyQ0U0Q0YyRDI0MDZERDQwNUJGRDZGCi06MTA2REYwMDBGOUQyQTBEMTBGREEyMERCRTA1QkZGNENDMDIwRDEwRjJECi06MTA2RTAwMDA2QzEwMEFENjMwMkEyMDA2OTQxMDI4QUNGODY1ODNGRjRGCi06MTA2RTEwMDAyQjIxMjIyNzBBMDIyQTIxMjRDQzU3MkFBQzAxMEEwQTU0Ci06MTA2RTIwMDA0RjJBMjUyNDdBQkIwMjYwMDNGNzJDMjEwMjJBMjAwQzZBCi06MTA2RTMwMDAwQzBDNEM2NUMzOEUyRTIyMTU4RDMyQzBGMTBFREQwQzZDCi06MTA2RTQwMDA2NUQ0MDQ4ODM4MUVENkQ1NjQ4M0UxOEYzN0MwQzhDMEE2Ci06MTA2RTUwMDA5NjBGQzkzOTk5MTRCNDlCOUIxMTBEOTkxMTk5MTNDOUI3Ci06MTA2RTYwMDBGQjE5RDZEMDI5OTAyMTdGOTMxMzhCMTQ4QzIwNUJGRkM0Ci06MTA2RTcwMDA2MzFFRDZDQUREQTA2NEE0MUM4RjY3NjAwMDI5OEMxMTM0Ci06MTA2RTgwMDAwQ0FEMTFBRUREMjhEMjg2MEFBQjAyNzhDQjYyMUFENkUxCi06MTA2RTkwMDBDNDBBQkEwQTJBQTJBMzY4QTAwNTJDMjIwMDdBQzk1MDAzCi06MTA2RUEwMDAyQUQyODVEREEwNjRBM0Q3MjkyMTJFMDlGOTM2MkEyMDBDCi06MTA2RUIwMDAzQzA5RjgwQzZGOEQzRUQ3RjBDQjdGMjgyMTFGMDg3MDVFCi06MTA2RUMwMDA2MDAxMEIzRTAwMDQzRUIxQkMwNENCMzlDNzRGMEJCQjg1Ci06MTA2RUQwMDAwQTA3QkIwQTBCMEM0MTA0Q0MwM0IxQ0MwQzBDNDFBQzJGCi06MTA2RUUwMDBCQkQ0QjBDMEMyN0NBMDRDMkEyMTI1N0JBQjQ2NjAwMDNECi06MTA2RUYwMDAyQ0MwQTA2M0ZGQUNENzkwNjNGRkJEMDBDMDkyQzc0RjBBCi06MTA2RjAwMDAyQzdDMTQwQzBCNDEwNEJCMDNCMUJCMEIwQjQxQUI3NEM5Ci06MTA2RjEwMDAyNDRDMTQ3OUEwMUUyQTIxMjU3NEFCMThBQ0JCMjQxQTZBCi06MTA2RjIwMDBGQzBBQkMwQzA0QzE2MDAwMDkzRTAxMDQzRUIxNDgwOUUyCi06MTA2RjMwMDA4NDM5MEI0NDBBODkyNjg4MjcwOTg4MEM3NDgzMURDMDZDCi06MTA2RjQwMDA4MDk4RDg4QzY0OUNEOThCNjY4QTY1OUJEQjlBREE5NzhCCi06MTA2RjUwMDBENTdGNzMwMjYwMDEzQUNFNUU2MDAwMTYwMDlEMTVEQTlGCi06MTA2RjYwMDAyMERCNDA1QkZFQjQ4RDE1MUVENjhENjVBMjU2OEY2NzYzCi06MTA2RjcwMDA2M0ZGQ0I5RDE1REEyMERCMzA4QzEwNUJGRTU5OEQxNTNECi06MTA2RjgwMDAxRUQ2ODdDMDUxRDZBMDhGQTdDMEMwOEE2ODk3REQ5QTQ5Ci06MTA2RjkwMDBEQzg4Njk4OTZBOThERTk5REY4QjZBOEE2OUFCN0I3N0JFCi06MTA2RkEwMDBCQjAyMkFBQzAxOUI2QTlBNjk4ODYwQzBBMDA4OEIxNDU2Ci06MTA2RkIwMDA3Nzg3MDFDMEExQzA5MDI4MjAzQzk0MTc5NTE4OTMxNjlDCi06MTA2RkMwMDBDMDUwQzAzMUMwNDQwNDg0MDEwNDM5MzgwODk5MTBDMDRECi06MTA2RkQwMDA0MjA0ODQwMTA0MzUzODA4Mzg0MDgzMkIwQkE0MTAwNzgxCi06MTA2RkUwMDA1NTEwMkEyMTFGMDk1NTAyMDU0NDAyMEIxOTQwMEEyQThGCi06MTA2RkYwMDAxNDA3OTkxMDA1ODUxMDA0MzMwMjBBODgxMTE0RDZGMzdBCi06MTA3MDAwMDAwOTU1MDIyOTIxMDQwNDMzMDIwODk5MTEwOTg4MDJDMDk0Ci06MTA3MDEwMDA5MjA5ODgwMjI5MjEyNTkzRDAwOTI5MTQwNDk5MTEwQTdCCi06MTA3MDIwMDA5OTAyMDk1NTAyOEEyMDg5MTQwOEFBMTEwQTk5MDIxQTlDCi06MTA3MDMwMDBENjZGMTRENkU3MEE5OTAyOTlEMTgzMkE5NUQ2OThEN0E0Ci06MTA3MDQwMDA4NTE4MDQzMzAyOTNENDg0MTc4MzE2OEE2NThENjZBQTQzCi06MTA3MDUwMDBDQUFEN0Q3N0RCMDFCMUFBMDdGRjBDOUE2NTlENjY4OEYyCi06MTA3MDYwMDAyNjhDMjlBNDg4MDhDQzBDOTgyNjBDMEM0ODJDMjUyNUE1Ci06MTA3MDcwMDA5RjY3MkEyMDBDQzBDMDFCRDY1MTBDQTkxMUFFOTlBQjNBCi06MTA3MDgwMDBBQjI4OTI4NTJDQjRDRjhCMTNBQjg4Mjg5Njg1NjNGREYzCi06MTA3MDkwMDBDRDAwQzA5MUMwRjBDMEIyQzBDNDg4NjAyMzIwM0M5ODJECi06MTA3MEEwMDAxMjBDM0MwMTBCM0EwMTA4ODgxNDBCODgwMTBBOUYzODI2Ci06MTA3MEIwMDAwN0ZGMTAwODk4MzlDMEEwMEM5QTM4MDc4ODEwMDhBQTUyCi06MTA3MEMwMDAxMDBBRkYwMkMwQTgwQTMzMDEwMzkzMzkyQTIxMDQyOUI4Ci06MTA3MEQwMDAyMTI1MDUzQzEwMDhDQzAyMEEzMzExMDhBQTExMDkyOTAwCi06MTA3MEUwMDAxNDAzQUEwMjA0OTkxMTBCQUEwMjJCMjExRjgzMTQwQjZCCi06MTA3MEYwMDAyQjE0MEI5OTAyMEM5OTAyOEIyMDFDRDYzQzA4QkIxMTU3Ci06MTA3MTAwMDAwM0JCMDIwQ0JCMDI4MzJBOEMyQjY0NzA4NDg4Njg5N0IzCi06MTA3MTEwMDBERDk4REM4NzY5ODg2QTk3REU5OERGODgxMkMwNzA3NzBGCi06MTA3MTIwMDA4NzAxQzA3MTlCRDE5OUQ2MEI3ODEwOUFENzE3RDZBOTMxCi06MTA3MTMwMDAwOEY4MDIwOEM4MDIwNzg4MDIxN0Q2QTU5OEQwMDczN0IyCi06MTA3MTQwMDAwMjk3RDQyODIwMEMyOTVDRkUyQjIxMjRDMEYwMUFENkVCCi06MTA3MTUwMDAxQjBDOEQxMUFFREQyQ0QyODVBQTg4MkY4NENGOEYxMzA2Ci06MTA3MTYwMDBCMEJCQUZDQzJDRDY4NTJBMjIxNTJCMjUyNEIxQUEyQTU4Ci06MTA3MTcwMDAyNjE1NjQ5MERDQzg0RjhDMjY4QjI5QTRDQzlDMjYwQzQ5Ci06MTA3MTgwMDBCQjBDMEIwQjQ4MkIyNTI1NjU1MEU4QzAyMEQxMEYwMDA4Ci06MTA3MTkwMDAwMDAwQzA3MDlCRDE5OUQ2OUFENzg4MTI5M0Q0Nzc4Nzc0Ci06MTA3MUEwMDAwRTE4RDYwMDkyMUEyODgwMjJDMDIxMDgyNzM4ODIxQTg5Ci06MTA3MUIwMDAxOEQ2OEEwQjczMTAwM0YzMDIwM0MzMDIwODMzMDI5MzM5Ci06MTA3MUMwMDBEMDYzRkY3RTAwQ0M1N0RBMjBEQjYwOEMxMDVCRkRDNEZGCi06MTA3MUQwMDAyOTIxMDI2ODk4MDY2ODk0MDNDMDIwRDEwRjJCMjIxRTMzCi06MTA3MUUwMDBDMDkwMjgyMjFEMjkyNTAyN0I4OTAxQzBCMDY0QkZFODE4Ci06MTA3MUYwMDAxM0Q1RUEyQ0IwMDcyOEIwMDBEQTIwMDM4ODBBMjg4MkM5Ci06MTA3MjAwMDA0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3NjNGRkNBMDAwMDc0Ci06MTA3MjEwMDA2OEE3NzVEQTIwREIzMERDNDBERDUwNUJGRUNBRDJBMDA3Ci06MTA3MjIwMDBEMTBGQzFGREMxOUQyOTI1MkM2MDAwMDMwMDJGMjUyQzA1Ci06MTA3MjMwMDAyRjI0NjcyNzI0NjhEQTIwREIzMDhDMTBERDUwMkUwQURCCi06MTA3MjQwMDA4MDVCRkQzMkQyQTBEMTBGQzFGOEMxQTgyQTI1MkM2M0UyCi06MTA3MjUwMDBGRkREQzg0RjhDMjY4QjI5QTRDQzlDMjYwQ0JCMEMwQkM1Ci06MTA3MjYwMDAwQjQ4MkIyNTI1MkEyQzc0REI2MDJDMTIwMDVCRkQ3NjQ1Ci06MTA3MjcwMDBEMkEwRDEwRjJBMkM3NDhCMTA1QkY2QkJEMkEwRDEwRkY5Ci06MTA3MjgwMDBEQTIwNUJGRTJBNjNGRjNDMDBEQTIwQzBCMTVCRkU2RUIxCi06MTA3MjkwMDA2NUFGMzE2M0ZCNzlEQTIwMkIyMDBDNUJGRTNENjNGRjg5Ci06MTA3MkEwMDAyMzAwMDAwMDEyRDY0RTgyMjAwMjgyNTdDODIxNjNGRkJECi06MTA3MkIwMDBGQzEyRDY0QTAzRTgzMDA0RUUzMDA1QjEzMDkzMjA5NDM2Ci06MTA3MkMwMDAyMTk1MjI2M0ZGRkMwMDAwMTBENjQ2OTEwMDkyMDE5M0E1Ci06MTA3MkQwMDAwMjk0MDMxMUQ2MUQ4MjEwMDFFQTMwQTIxMTAxRjAzMThGCi06MTA3MkUwMDBDMDQwMDRFNDE2MDAwMjAwMTFENjNGODIxMDIzNEEwMDc5Ci06MTA3MkYwMDAwMzIyMDI5MjEwMTFENjA5QzAyMTkyMTAwNEU0MzE4NEI1Ci06MTA3MzAwMDAwMzgzMDI4MjAxODEwMDAwRDIzMDAxMjMwMDAwMDAwMENCCi06MTA3MzEwMDAxMEQ2MzY5MTAwOTIwMTkzMDI5NDAzMTFENjBDODIxMDdDCi06MTA3MzIwMDAwMUVBMzBBMjExMDFGMTMxQzA0MDA0RTQxNjAwMDIwMDZDCi06MTA3MzMwMDAxMUQ2MkQ4MjEwMTNENUI0MDMyMjAyOTIxMDA0RTQzMTI5Ci06MTA3MzQwMDA4NDAzODMwMjgyMDE4MTAwMDBEMzMwMDEzMzAwMDAwMEY2Ci06MTA3MzUwMDAxMEQ2Mjc5MTAwODEwMTY1MTA0OTgxMDI2NTEwNDQ4MTkyCi06MTA3MzYwMDAwM0NGMUY5MjAxOTMwMjk0MDMxMUQ1RkE4MjEwMDFFQTEwCi06MTA3MzcwMDAzMEEyMTEwMUYyMzFDMDQwMDRFNDE2MDAwMjAwMTFENjFGCi06MTA3MzgwMDAxOTgyMTAxM0Q1OUIwMzIyMDI5MjEwMDRFNDMxODQwMzY2Ci06MTA3MzkwMDA4MzAyODIwMUMwMTA5MTAzOTEwMjkxMDE4MTAwMDBENDA3Ci06MTA3M0EwMDAzMDAxNDMwMDEyRDVDQUMwMzAyODM3NDAyODM3NDQyODVFCi06MTA3M0IwMDAzNzQ4MjgzNzRDMjMzRDAxNzIzM0VEMDMwMjAwNjNGRjQ5Ci06MTA3M0MwMDBGQzAwMDAwMDEwRDYwQjkxMDA5MjAxOTMwMjk0MDMxMTZGCi06MTA3M0QwMDBENjA5ODIxMDkyMTAxMUQ1QkM4MzEwMDMyMjAyOTIxMDlDCi06MTA3M0UwMDAxMUQ2MDYxMkQ1Q0Q5MjEwQzA0MDA0RTQxNjAwMDIwMDVBCi06MTA3M0YwMDAxMUQ1RkQ4MjEwMTNENUI1MDMyMjAyOTIxMDA0RTQzMTk5Ci06MTA3NDAwMDA4NDAzODMwMjgyMDE4MTAwMDBENTMwMDE1MzAwMDAwMDEzCi06MTA3NDEwMDA2QzEwMDI2RTMyMkZENjIwMDU2RjA0MDQzRjA0NzQ1QjlCCi06MTA3NDIwMDAyQTA1NDQwQzAwNDEwNDAwMzMxQTIyMEEwMDZENDkwRDVDCi06MTA3NDMwMDA3MzYzMDQwMzY2MENCMTIyMEYyMjExMDMxMzE0NzM2M0U4Ci06MTA3NDQwMDAwMjIyMkMwMUQxMEZDODNCRDEwRjAwMDA3MzYzMENDMDg2Ci06MTA3NDUwMDAyMUQxMEYwMDAwMDAwMDAwNDQ0OTU2MzBDMDIwRDEwRjU4Ci06MTA3NDYwMDA2QzEwMDIwMDQwMDQ2QjRDMDcwMzIzMTgwMjAyMTlEMTcwCi06MTA3NDcwMDAwRjAyMDMxOUMwMjBEMTBGNkMxMDAyMDJFQTMwRDEwRkE1Ci06MTA3NDgwMDA2QzEwMDJDQzI1MDNGMDMxNjAwMDBGMDA2RjIyMDUwMzYxCi06MTA3NDkwMDBGMTMxNjAwMDA1NkYyMzA1MDNGMjMxMDAwMjAwRDEwRkM2Ci06MTA3NEEwMDA2QzEwMDJDQzI1MDJGMDMwRDEwRjAwMDA2RjIyMDQwMkQ0Ci06MTA3NEIwMDBGMTMwRDEwRjZGMjMwNDAyRjIzMEQxMEZDMDIwRDEwRjcxCi06MTA3NEMwMDA2QzEwMDIyMjBBMjAyMzBBMDA2RDI4MEUyODM3NDAyODVCCi06MTA3NEQwMDAzNzQ0MjgzNzQ4MjgzNzRDMjMzRDAxMDMwMjAwRDEwRjk5Ci06MTA3NEUwMDA2QzEwMDIwMkU0MzFEMTBGMEEwMDQzNjg2NTZDNzM2OUM1Ci06MTA3NEYwMDA2RjIwNDY1NzIwNDQ0NTQyNTU0NzNEMzAyMDI4NDI3NTZECi06MTA3NTAwMDA2OTZDNzQyMDU0NzU2NTIwNDE3NTY3MjAzMTMyMjAzMEQ0Ci06MTA3NTEwMDAzOTNBMzQzMzNBMzAzNDIwNTA0NDU0MjAzMjMwMzAzODAxCi06MTA3NTIwMDAyMDZGNkUyMDY2NjU2QzY5NzgyRTYxNzM2OTYzNjQ2NThGCi06MTA3NTMwMDA3MzY5Njc2RTY1NzI3MzJFNjM2RjZEM0EyRjY4NkY2RDM2Ci06MTA3NTQwMDA2NTJGNjY2NTZDNjk3ODJGNzcyRjY2Nzc1RjM2MkUzMEVBCi06MTA3NTUwMDAyOTJDMjA1NjY1NzI3MzY5NkY2RTIwNTQzMzc4NzgyMDE5Ci06MTA3NTYwMDAzMDMwMzcyRTMwMzAyRTMwMzAyMDJEMjAzMTMwMzAzNzMzCi06MEM3NTcwMDAzMDMwMzAzMDEwMDcwMDAwQ0M0NEEwRDZCMgotOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4xLjAuYmluLmloZXggYi9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDJmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4CkBAIC0wLDAgKzEsMTg4NSBAQAorOjEwMDAwMDAwNjAwMDc0MDAyMDAzODAwMDIwMDM3MDAwMDAwMDEwMDBENgorOjEwMDAxMDAwMDAwMDIwMDBFMTAwMDI4NDAwMDcwMDAwRTEwMDAyODhFNworOjEwMDAyMDAwMDAwMTAwMDBFMDAwMDAwMEUwMDAwMEEwMDEwMDAwMDA2RQorOjEwMDAzMDAwNDQ0NDQ0NDBFMzAwMDE4MzIwMDIwMDAwMjAwMUUwMDAyQQorOjEwMDA0MDAwMjAwMUZGMTAxRkZGRDAwMDFGRkZDMDAwRTMwMDA0M0M5MQorOjEwMDA1MDAwMDIwMDAwMDAyMDAwNjk4ODFGRkZDMjkwMjAwMDY5RDBDNAorOjEwMDA2MDAwMUZGRkMyOTQyMDAwNkExMDFGRkZDMjk4MjAwMDZBODRGQworOjEwMDA3MDAwMUZGRkMyOUMyMDAwMDNDMEMwMDAwMEU0MzEwMEVBMzEzMQorOjEwMDA4MDAwMDBBMTMxMDBBMDMxMDMwMjAwMDJFRDMwNkUyQTA1MDAwQworOjEwMDA5MDAwRUQzMTAwMDIwMDAyMTYwMDEyRkZEQkMwMzAxNEZGREE1RgorOjEwMDBBMDAwRDMwRkQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDM0NworOjEwMDBCMDAwMEZEMzBGRDMwRjEyRkZENTIzMEEwMDI0MEEwMEQzMEY0QQorOjEwMDBDMDAwRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzBGRDMyNworOjEwMDBEMDAwMEZEMzBGMTRGRkNFMDM0MjFGMTRGRkNCMDM0MjFGMTI5NgorOjEwMDBFMDAwRkZDQ0MwMzAyRDM3MzAyRDM3MzQyRDM3MzgyRDM3M0NFRAorOjEwMDBGMDAwMjMzRDAxNzIzM0VEMDAwMjAwMTJGRkM0QzAzMDJGMzdFMAorOjEwMDEwMDAwMDAyRjM3MTAyRjM3MjAyRjM3MzAyMzNEMDE3MjMzRUQ2QQorOjEwMDExMDAwMDAwMjAwMTJGRkJFQzAzMDI3MzcwMDI3MzcxMDI3MzdGNAorOjEwMDEyMDAwMjAyNzM3MzAyMzNEMDE3MjMzRUQwMzAyMDAxMkZGQjk1RgorOjEwMDEzMDAwMTNGRkJBMEMwMjAwOTMyMDEyRkZCOTEzRkZCOTBDMDI4RgorOjEwMDE0MDAwMDA5MzIwMTJGRkI4QzAzMTkzMjA4MjIwMTJGRkI3MTMxMgorOjEwMDE1MDAwRkZCNzkzMjAxMkZGQjcxNUZGQjMxNkZGQjZDMDMwRDcxNQorOjEwMDE2MDAwMjAwNTY2MDE2MDAwMUIwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDE3MDAwMDQzNjA1MDAwMjAwRDMwRkQzMEYwNTMzMEM2RTNCMTQ3OQorOjEwMDE4MDAwMDc0NzE0MDcwNDQzNzYzMUU2MDQzNjA1MDUzMzBDNkY0MAorOjEwMDE5MDAwM0JFRDAwMDIwMDEyRkZBNjE1RkZBMzIzMEEwMEQ3MjBBMworOjEwMDFBMDAwMDcwNDQzMDQzRTA1MDUzMzBDMDc0NzE0NkYzQkYwMDM3NworOjEwMDFCMDAwMDIwMDEyRkZBMUMwMzAxNEZGQTFEMzBGRDMwRkQzMEY0MQorOjEwMDFDMDAwOTM0MEI0NDQ3MjQ5RjJEMzBGRDMwRkQzMEYxNEZGOUI2MworOjEwMDFEMDAwODM0MDE0RkY5QjgzNDAxMkZGOUIyMzBBMDAxNEZGOUE2NQorOjEwMDFFMDAwRDMwRkQzMEZEMzBGOTM0MEI0NDQ3MjQ5RjJEMzBGRDMzQworOjEwMDFGMDAwMEZEMzBGMTRGRjk1ODM0MDEyRkY5NUM5MkY4MzIwODRERQorOjEwMDIwMDAwMjE4NTIyQkMyMjc0M0IwRjg2NTBCNDU1OTYzMEI0MzNGRQorOjEwMDIxMDAwNzQzM0Y0NjNGRkU2MDAwMDY1M0ZFMTY1NUZERTEyRkZDMworOjEwMDIyMDAwN0MyMzBBMDAyODM3NDAyODM3NDQyODM3NDgyODM3NEM5MQorOjEwMDIzMDAwMjMzRDAxNzIzM0VEMDMwMjAwMDAwMjAwMTJGRjdBQzA3OQorOjEwMDI0MDAwMzIwMzJFMDUwMzAyMDAxMkZGNzgxM0ZGODE5MzIwQzBCMgorOjEwMDI1MDAwMTEwMTQ5MzEwMDQ4MzEwMTAyMDBDMDAwMTRGRjdFMDQ0MQorOjEwMDI2MDAwRDIzMTE1RkY3RDk0NTAxNEZGN0QwNEQzMzExNUZGN0NFRQorOjEwMDI3MDAwOTQ1MDE0RkY3QzA0RDQzMTE1RkY3QzI0NTYwMDE0RkZFNQorOjEwMDI4MDAwN0IwNEQ1MzExNUZGN0IyNDU2MDAxMEZGN0EwMzAwMDA1NAorOjEwMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwMDQyMDAwNjNGRkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDBBMQorOjEwMDQ0MDAwMUZGQzAwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBBQgorOjEwMDQ1MDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwRTMwMDA1QzgwNgorOjEwMDQ2MDAwMUZGRkMwMDAxRkZGQzAwMEUzMDAwNUM4MUZGRkMwMDA0MgorOjEwMDQ3MDAwMUZGRkMwMThFMzAwMDVDODFGRkZDMDE4MUZGRkMwMThFQQorOjEwMDQ4MDAwRTMwMDA1RTAxRkZGQzAxODFGRkZDMjhDRTMwMDA1RTA3QQorOjEwMDQ5MDAwMUZGRkMyOEMxRkZGQzI4Q0UzMDAwODU0MUZGRkMyOTBENQorOjEwMDRBMDAwMUZGRkM1OENFMzAwMDg1NDIwMDAwMDAwMjAwMDAxNkFGMworOjEwMDRCMDAwRTMwMDBCNTAyMDAwMDE4MDIwMDAwMTgwRTMwMDBDQkMxMQorOjEwMDRDMDAwMjAwMDAyMDAyMDAwMDIwM0UzMDAwQ0JDMjAwMDAyMUNGQworOjEwMDREMDAwMjAwMDAyMjBFMzAwMENDMDIwMDAwMjIwMjAwMDAyMjZBMQorOjEwMDRFMDAwRTMwMDBDQzQyMDAwMDIzQzIwMDAwMjQwRTMwMDBDQ0NERQorOjEwMDRGMDAwMjAwMDAyNDAyMDAwMDI0OUUzMDAwQ0QwMjAwMDAyNEMwMgorOjEwMDUwMDAwMjAwMDAyNTBFMzAwMENEQzIwMDAwMjUwMjAwMDAyNTlDMQorOjEwMDUxMDAwRTMwMDBDRTAyMDAwMDI1QzIwMDAwMjYwRTMwMDBDRUMzMQorOjEwMDUyMDAwMjAwMDAyNjAyMDAwMDI2OUUzMDAwQ0YwMjAwMDAyNkM1MQorOjEwMDUzMDAwMjAwMDAyNzBFMzAwMENGQzIwMDAwMjcwMjAwMDAyNzkxMQorOjEwMDU0MDAwRTMwMDBEMDAyMDAwMDI4QzIwMDAwMjhDRTMwMDBEMEM2MworOjEwMDU1MDAwMjAwMDAyOTAyMDAwMDI5M0UzMDAwRDBDMjAwMDAyQUM2QQorOjEwMDU2MDAwMjAwMDAyQjBFMzAwMEQxMDIwMDAwMkQwMjAwMDAyRjJCMworOjEwMDU3MDAwRTMwMDBEMTQyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMzhBOQorOjEwMDU4MDAwMjAwMDAzQjAyMDAwMDNCMEUzMDAwRDM4MjAwMDAzQjBDQQorOjEwMDU5MDAwMjAwMDAzQjBFMzAwMEQzODIwMDAwM0IwMjAwMDAzQjBCQQorOjEwMDVBMDAwRTMwMDBEMzgyMDAwMDNCMDIwMDA2QkE4RTMwMDBEMzhGNQorOjEwMDVCMDAwMjAwMDZCQTgyMDAwNkJBOEUzMDA3NTMwMDAwMDAwMDA0RAorOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwMUZGQzAwMDBGNQorOjEwMDVEMDAwMUZGRkM1OTAxRkZGQzY3MDIwMDA2QkE4MjAwMDZCQThFRQorOjEwMDVFMDAwREVGRkZFMDAwMDAwMDgwQ0RFQURCRUVGMUZGRkMyQTA2NAorOjEwMDVGMDAwMUZGQ0ZFMDAxRkZGQzA5NDFGRkZDNUMwMzAwMDAwMDA5RAorOjEwMDYwMDAwMDAzRkZGRkY4MDQwMDAwMDEwMDAwMDAwMDgwRkZGRkZDOAorOjEwMDYxMDAwMUZGRkMyNkQwMDBGRkZGRjgwNEZGRkZGODAwMDAwMDAzMworOjEwMDYyMDAwMDAwMDA4ODBCMDAwMDAwNTYwNTAwMDAwNjAwMDAwMDA3RAorOjEwMDYzMDAwNDAwMDAwMTEzNTAwMDAwMDQxMDAwMDAwMTAwMDAwMDFFMgorOjEwMDY0MDAwMjAwMDAwMDAwMDAwMTAwMDdGRkZGRkZGNDAwMDAwMDBCRQorOjEwMDY1MDAwMDUwMDAwMDA4MDAwMDAxOTA0MDAwMDAwMDAwMDA4MDBGMAorOjEwMDY2MDAwMTAwMDAwMDU4MDYwMDAwMDcwMDAwMDAwMjAwMDAwMDlGQworOjEwMDY3MDAwMDAxRkY4MDA4MDAwMDAxRUEwMDAwMDAwRjgwMDAwMDAyRAorOjEwMDY4MDAwMDdGRkZGRkYwODAwMDAwMDE4MDAwMDAwMDEwMDgwMDFDNAorOjEwMDY5MDAwNDIwMDAwMDAxRkZGQzIxRDFGRkZDMERDMDAwMTAwODBFMAorOjEwMDZBMDAwNjA0MDAwMDAxQTAwMDAwMDBDMDAwMDAwMDAwMDMwMDA1NAorOjEwMDZCMDAwNjAwMDA4MDA4MDAwMDAxQzAwMDEwMDAwODAwMDAwMUE5QgorOjEwMDZDMDAwODAwMDAwMThGQzAwMDAwMDgwMDAwMDAxMDAwMDQwMDBENQorOjEwMDZEMDAwMDMwMDAwMDA4MDAwMDQwMDUwMDAwMDAzRkZGRkJGRkY4NAorOjEwMDZFMDAwMUZGRkMzRDQwMDAwMEZGRkZGRkZGMDAwMDAwMDE2RDA3MworOjEwMDZGMDAwMDAwMEZGRjdBNTAwMDAwMDFGRkZDNEIwMUZGRkM0NjE4QQorOjEwMDcwMDAwMDAwMTAwMDgwMDAwMEIyMDIwMkZGRjgwMUZGRkM0NTVCMAorOjEwMDcxMDAwMDAwMDJDMDBGRkZFRkZGODAwRkZGRkZGMUZGRkM1Nzg2MQorOjEwMDcyMDAwMDAwMDIwMDBGRkZGREZGRjAwMDBGRkVGMDEwMDExMDBDRAorOjEwMDczMDAwMUZGRkMzRDIxRkZGQzU5MEZGRkZFRkZGMDAwMEZGRkJBRAorOjEwMDc0MDAwMUZGRkM2MzAxRkZGQkVBMEZGRkZGN0ZGMUZGRkMwNjRFMworOjEwMDc1MDAwMDAwMEZGRkQxRkZGQzYyMDAwMDFGQkQwMUZGRkM1QjAzQQorOjEwMDc2MDAwMUZGRkM2NjAxRkZGQzU5MUUwRkZGRTAwMUZGRkM1QTA3MQorOjEwMDc3MDAwMDAwMDgwMDAxRkZGQzUzQzFGRkZDNUI0MUZGRkMwNjhGRAorOjEwMDc4MDAwMUZGRkM0RDAxRkZDRkZEODAwMDEwMDgxRTEwMDA2MDA1QworOjEwMDc5MDAwMDAwMDI3MTAxRkZDRkUzMDFGRkNGRTcwRTEwMDAyMDA2RAorOjEwMDdBMDAwMUZGRkM1MzgxRkZGQzU1MDAwMDNEMDkwMUZGRkM1NjQ1MQorOjEwMDdCMDAwMkI1MDYzODAyQjUwNzk4MDJCNTA5MDgwMkI1MEE2ODAzQgorOjEwMDdDMDAwMUZGRkM0NjkwMTAwMTEwRjIwMkZGRTAwMjAzMDAwODBBMAorOjEwMDdEMDAwMjAyRkZGMDAwMDAwRkZGRjAwMDFGRkY4MkI1MEIyMDBBOAorOjEwMDdFMDAwMkI1MEIyMDgwMDAxMDAxMDJCNTBCMTgwMkI1MEIyODA2QQorOjEwMDdGMDAwMkI1MEJBMDAwMDAxMDAxMTJCNTBCRDI4MkI1MEJDODA5QgorOjEwMDgwMDAwMkI1MEJEQTAyMDMwMDAwMERGRkZGRTAwNTAwMDAwMDI5MgorOjEwMDgxMDAwMDBDMDAwMDAwMjAwMDAwMEZGRkZGN0Y0MUZGRkMwNkNFMworOjEwMDgyMDAwMDAwRkY4MDAwNDQwMDAwMDAwMTAwMDAwMEM0MDAwMDAyMQorOjEwMDgzMDAwMUM0MDAwMDBFMDAwMDBBMDFGRkZDNTQwMUZGRDAwMDg5NQorOjEwMDg0MDAwMUZGRkM1NTQxRkZGQzU2ODFGRkZDNTdDRTEwMDA2OTA1MAorOjEwMDg1MDAwRTEwMDA2RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMDg2MDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMDg3MDAwMDAwMDAwMDAyMDEwMDA0MDIwMTAwMDQwMjAxMDAwNDAyOAorOjEwMDg4MDAwMjAxNDAwODAyMDBDMDAwMDIwMEMwMDAwMjAwQzAwMDAzMAorOjEwMDg5MDAwMjAxMDAwNDAyMDE0MDA4MDIwMTQwMDgwMjAxNDAwODBDQworOjEwMDhBMDAwMjAxODAwQzAyMDFDMDEwMDIwMUMwMTAwMjAxQzAxMDA5OQorOjEwMDhCMDAwMjAyMDAxNDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzBDRgorOjEwMDhDMDAwMjAxQzAxMDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzAwMworOjEwMDhEMDAwMjAxQzAxMDAyMDIwMDE0MDIwMjAwMTQwMjAyMDAxNDA1OAorOjEwMDhFMDAwMjAyMDA5NDAyMDIwMDk0MDIwMjAwOTQwMjAyMDA5NDBFNAorOjEwMDhGMDAwMjAyNDA5ODBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNworOjEwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwMDkxMDAwMDAwMDAwMDAyMDAwNTJGQzIwMDA1MUNDMjAwMDUyRkNCRQorOjEwMDkyMDAwMjAwMDUyRkMyMDAwNTEwODIwMDA1MTA4MjAwMDUxMDhFRQorOjEwMDkzMDAwMjAwMDRGNDgyMDAwNEY0ODIwMDA0RjQwMjAwMDRFQUM4MAorOjEwMDk0MDAwMjAwMDRENTQyMDAwNEIzNDIwMDA0OTA4MDAwMDAwMDBENgorOjEwMDk1MDAwMDAwMDAwMDAyMDAwNTJDQzIwMDA1MTk4MjAwMDUyM0NBMgorOjEwMDk2MDAwMjAwMDUyM0MyMDAwNEZGMDIwMDA0RkYwMjAwMDRGRjBCQworOjEwMDk3MDAwMjAwMDRGRjAyMDAwNEZGMDIwMDA0RjM4MjAwMDRGRjBCMworOjEwMDk4MDAwMjAwMDRDNzQyMDAwNEFFNDIwMDA0OEI0MDAwMDAwMDAxRAorOjEwMDk5MDAwMDAwMDAwMDAyMDAwMEJFMDIwMDAzOEJDMjAwMDA0QzA1NAorOjEwMDlBMDAwMjAwMDQ0QTgyMDAwMEJEODIwMDAzRkI0MjAwMDAzRjAxMgorOjEwMDlCMDAwMjAwMDQ0NjgyMDAwNDg5MDIwMDAzQ0M0MjAwMDNCRTAxOAorOjEwMDlDMDAwMjAwMDM4MzgyMDAwMzZDNDIwMDAzNDM0MjAwMDJGOTQxMgorOjEwMDlEMDAwMjAwMDNBM0MyMDAwMkJGNDIwMDAyODI4MjAwMDY1MzQxOQorOjEwMDlFMDAwMjAwMDIzQjQyMDAwMjA5NDIwMDAyMDQwMjAwMDFEMkM1MworOjEwMDlGMDAwMjAwMDE4NDAyMDAwMTU3MDIwMDAwREVDMjAwMDBDMjQ3MQorOjEwMEEwMDAwMjAwMDExMzQyMDAwMTMyMDIwMDA0MUFDMjAwMDNDNzg0RAorOjEwMEExMDAwMjAwMDBCRTgyMDAwMDRDMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMEEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwMEEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMEE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwMEE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwMEE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDMyNjQwMDAwMDAwMDAwMDBDMAorOjEwMEFBMDAwMzI2NDAwMDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA1OAorOjEwMEFCMDAwNjQwMDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDBFNgorOjEwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMEIxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMyMzgwMDAwMDAwMDBERgorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMEI1MDAwMDA1Qzk0MDE1RDk0MDI1RTk0MDM1Rjk0MDA0MzAwMDA4NgorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMEI5MDAwMDA1QzkwMDE1RDkwMDI1RTkwMDM1RjkwMDA1MzAwMDA0NgorOjEwMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMEJEMDAwMDA5Qzk0MDAxRDkwMDE5RDk0MDI5RTk0MDM5Rjk0MDQ5OAorOjEwMEJFMDAwMDg5NDA1MDk5NDA2MEE5NDA3MEI5NDAwNDMwMDAwMDAzQQorOjEwMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMEMxMDAwMDA5QzkwMDE5RDkwMDI5RTkwMDcxRDkwMDM5RjkwMDQ2MAorOjEwMEMyMDAwNzg5MDA1Nzk5MDA2N0E5MDA3N0I5MDAwNTMwMDAwMDAzOQorOjEwMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwMEM1MDAwMDBEQzk0MDAxRDkwMDFERDk0MDJERTk0MDNERjk0MDQxNworOjEwMEM2MDAwMDQ5NDA1MDU5NDA2MDY5NDA3MDc5NDA4MDg5NDA5MDk1NgorOjEwMEM3MDAwOTQwQTBBOTQwQjBCOTQwMDQzMDAwMDAwMDAwMDAwMDA0QgorOjEwMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMEM5MDAwMDBEQzkwMDFERDkwMDJERTkwMEIxRDkwMDNERjkwMDREQworOjEwMENBMDAwQjQ5MDA1QjU5MDA2QjY5MDA3Qjc5MDA4Qjg5MDA5QjkwQQorOjEwMENCMDAwOTAwQUJBOTAwQkJCOTAwMDUzMDAwMDAwNjNGRkZDMDA0OQorOjEwMENDMDAwMjAwMDY5NjQxMEZGRkYwQTAwMDAwMDAwMjAwMDY5ODgwRQorOjEwMENEMDAwMDBEMjMxMTBGRkZFMEEwMDAwMDAwMDAwMjAwMDY5RDBBMQorOjEwMENFMDAwMDBEMzMxMTBGRkZFMEEwMDAwMDAwMDAwMjAwMDZBMTA0RgorOjEwMENGMDAwMDBENDMxMTBGRkZFMEEwMDAwMDAwMDAwMjAwMDZBODRDQQorOjEwMEQwMDAwMDBENTMxMTBGRkZFMEEwMDAwMDAwMDAwNjNGRkZDMDA2OAorOjEwMEQxMDAwRTAwMDAwQTAxMkZGRjc4MjIwMDI4MjU3QzgyMTYzRkY4MworOjEwMEQyMDAwRkMxMkZGRjMwM0U4MzAwNEVFMzAwNUMwMzA5MzIwOTQ0QQorOjEwMEQzMDAwMjE5NTIyNjNGRkZDMDAwMDFGRkZEMDAwMDAwNDAwMjA2QgorOjEwMEQ0MDAwMUZGRkM1OTAxRkZGQzY3MDIwMEEwMDExRkZGQjEzRkY5NQorOjEwMEQ1MDAwRkIwM0U2MzEwMTAyMDAxNkZGRkExN0ZGRkFEMzBGNzcwMworOjEwMEQ2MDAwNkIwNjkwNjBCNDY2Nzc2M0Y4NTQxNTUwNTQxOUU2MEYxQgorOjEwMEQ3MDAwMTQwMDYzRkZGOTAwMDAwMDZDMTAwNEMwMjBEMTBGMDBDNAorOjEwMEQ4MDAwNkMxMDA0QzBDNzFBRUYwNkQ4MzBCQzJCRDcyMDg1NzI3MAorOjEwMEQ5MDAwMEQ0MjExODM3MTA1NDUwQjk1NzIwMjMzMEMyMzc2MDFDOAorOjEwMERBMDAwN0IzQjA0MjMzRDA4OTM3MUEzMkQxMkVFRkUxOUVFRkU0QQorOjEwMERCMDAwQTI3NjdENjMyQzJFMEEwMDA4ODIwMjI4MEEwMTAzOEU4NworOjEwMERDMDAwMzgwRTBFNDJDOEVFMjlBNjdFNkQ0QTA1MDAyMDg4MDAyNgorOjEwMEREMDAwMzA4QzgyNzFEMTBGQzBGMDAyOEYzODdGQzBFQTYzRkY4MAorOjEwMERFMDAwRTQwMEMwRjFDMDUwMDM3RTBDQTJFRTBFM0QxMjA4ODI1QQorOjEwMERGMDAwMDIwM0Y1MzgwNTA1NDJDQjU3MjlBNjdFMkZEQzEwMEZEQworOjEwMEUwMDAwNEYzNjZERkEwNTAwMjA4ODAwMzA4Q0JDNzVDMDMwMDg2NAorOjEwMEUxMDAwRTIwODI4MEEwMTA1ODMzODAzMDM0MkM5M0UyOUE2N0U1OQorOjEwMEUyMDAwMEQ0ODBDRDMwRjZEOEEwNTAwMjA4ODAwQjA4QzgyNzFBQworOjEwMEUzMDAwRDEwRkMwNTAwOEY1Mzg3NUMwQzE2M0ZGQkJDMDYwMDI1OAorOjEwMEU0MDAwODYzODc2QzBEQTYzRkZENDZDMTAxMjE2RUVEOEMxRjg3QgorOjEwMEU1MDAwQzFFNzJCMjIxRTJDMjIxREMwRDA3QkMxMkYyOTIwMDZDQQorOjEwMEU2MDAwRDdCMDI5OUNGQUNDNTcyODIwNzAyODhDRkYyODI0NzBGMgorOjEwMEU3MDAwNjQ5MTVDMkFCMDAwMEVBODBDNjQ4MTY3MEZBOTBDNjQxMQorOjEwMEU4MDAwOTJCM0MxRTk3RUExMzk2OUFDMkY2MDAwMzYyOTIwMDZGMgorOjEwMEU5MDAwRDdEMDI5OUNGQUNDNTcyODIwNzAyODhDRkYyODI0NzBBMgorOjEwMEVBMDAwNjQ5MTM1MkFEMDAwMEVBODBDNjQ4MTY0MEZBOTBDNjRFQgorOjEwMEVCMDAwOTMxQkMxRTk3RUExMDk2OEFDMDlDMDIwRDEwRjAwMDBENQorOjEwMEVDMDAwMDAyRDI1MDI4QTMyQzA5MDBBNkY1MDY1RjVBRDI5MjRBNQorOjEwMEVEMDAwNjcwOTA4NDc2NTg1QTkyRjIwMEMxOEVFQjUwQ0ZFMTE4RgorOjEwMEVFMDAwQThFRTI4RTI4NkI0NDk3ODkzMDI2MDA1N0ExOUVFQjEzQgorOjEwMEVGMDAwMDlGOTBBMjk5MkEzNjg5MDA3ODgyMDA5ODgwQzY1ODU1QQorOjEwMEYwMDAwNjYyN0UyODU2NDc1NjA2NTU1OEU3QkMxMDREOUIwNjA0MworOjEwMEYxMDAwMDAwMUMwOTA4Qjk0MUNFRUE4MEI4ODE0OENDNDBCMEJBMgorOjEwMEYyMDAwNDdBOENDMThFRUE2MDlCQjEwMDhDQzAyOUM3MDE4RUU5RQorOjEwMEYzMDAwQTQxQ0VFQTUwOEE4MDEwQjg4MDIwQzRDMDIxQkVFQTExNAorOjEwMEY0MDAwOUM3MTBCODgwMjk4NzIyQzkwMjMyQjkwMjIwNEM4MTA1RAorOjEwMEY1MDAwMDZCQjEwMEM0QzEyMDhCQjAyMjg5MDIxMDdDQzEwMENDOQorOjEwMEY2MDAwODgxMDBDODgwMjBCODgwMjFDRUU5OThCMzMwQ0JCMDE5NQorOjEwMEY3MDAwOEMzNDBCODgwMjk4NzM5Qzk5OUM3NDhCOTU4QzM5OUI0QworOjEwMEY4MDAwNzU4ODk2OEIzODk4NzY4ODk3OUM3OTlCNzg5ODc3MUM4QgorOjEwMEY5MDAwRUU5MDI4RTI4NTBDRkMwODJEQzRDRjA4NDgwQjI4RTYwQgorOjEwMEZBMDAwODU2NTU1MEIyQjIyMUUyRDIyMUQ3QkQ5MDIyQjBBMDA5NQorOjEwMEZCMDAwNjRCRjA2MkNCMDA3MjhCMDAwREEyMDA2ODgwQTI4ODIxMQorOjEwMEZDMDAwNENDMEQxMEI4MDAwREJBMDY1QUZFNzYzRkVFQjAwMDBGNworOjEwMEZEMDAwMjkyMDcwNjU5RTlDNjAwNEU0MkEyMDcwNjVBRUMzNjA4MQorOjEwMEZFMDAwMDREQjAwMDAyRUIwMDMyQzIwNjdENEUwNjVDMTA1OEEyNQorOjEwMEZGMDAwMzI4QzMzMEFGRjUwMEM0NTU0QkM1NTY0RjRFNjE5RUVBQworOjEwMTAwMDAwNzU4ODJBMDlBOTAxMDk4ODBDNjQ4MjFCQzA5MjYwMDBCNgorOjEwMTAxMDAwREQyRUQwMDMyQTIwNjdENEUwNjVBMEQ4OEEzMjhCMzMzNgorOjEwMTAyMDAwMEFGQzUwMEI0NTU0QkM1NTY0QzRCOTE5RUU2QTg4MkFCMQorOjEwMTAzMDAwMDlBOTAxNzk4OUQ1MEJFQTUwNjRBNEREMENFRTExQzAzMQorOjEwMTA0MDAwRjAyRjE2MTMyRTE2MTY4QUU3OENFODJBMTYxMjhFRTk1MAorOjEwMTA1MDAwREZDMEFBRUE3RUFCMDFCMUNGMEJBODUwNjU4MzQyODhGRQorOjEwMTA2MDAwMzdEQkMwQUU4OTk5MUU3ODlCMDIyQkNDMDEyQjE2MUI1NworOjEwMTA3MDAwMjkxMjBFMkIwQTAwMjkxNjFBN0ZDMzA3N0ZDOTAyN0U4OAorOjEwMTA4MDAwQUIwMUMwQjE2NUI0OTg4QjM1MkYwQTAwMkEwQTAwN0FFQgorOjEwMTA5MDAwQzMwNTY0QzNDNzJGMEEwMTY1RjQ4NDJCMTIxNjJCMTZFRgorOjEwMTBBMDAwMTkwMDUxMDRDMEMxMDBDQzFBMkNDQ0ZGMkMxNjE3MEMwRgorOjEwMTBCMDAwRkMxMzJDMTYxODJCMTIxQTJBMTIxQkRDNTA1ODE4RkE4MworOjEwMTBDMDAwQzBEMEMwOTAyRTVDRjQyQzEyMTcyODEyMTgyRjEyMUJCRgorOjEwMTBEMDAwMkExMjFBMDhGRjAxMENBQTAxODgzNDA3NEMwQUFCOEJBQworOjEwMTBFMDAwMjgxMjE5MkJDNjE2MkY4NjA4MkE4NjA5MkU3NDEwMjk1NQorOjEwMTBGMDAwMjQ2NzJFNzAwMzg5NzVCMUVBMkE3NDAzQjA5OTA5NDlFRgorOjEwMTEwMDAwMEM2NTlEQjUyQjIwNjcyRDI1MDI2NUIzRjQyQjIyMUU5RgorOjEwMTExMDAwMkMyMjFEN0JDOTAxQzBCMDY0QkQ5RTJDQjAwNzI4QjAzNQorOjEwMTEyMDAwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMERCQTBBMAorOjEwMTEzMDAwNjVBRkU3NjNGRDgzODlCQUIxOTk2NTkwOTc4ODM0MUNFMAorOjEwMTE0MDAwRUUyNjk4QkE4RjMzMUVFRTFGMEY0RjU0MkZCNDJDOERGRQorOjEwMTE1MDAwMkE4QTMyMEVERDAyMENBQzAxN0RDOTY2MEE0OTUxNkY0NAorOjEwMTE2MDAwOTI2MDhBMzM3NUE2NUIyQ0IwMTMwQUVENTEwRENEMDE0OAorOjEwMTE3MDAwMEQwRDQxMEMwQzQxN0RDOTQ5MkVCMDEyQjBFRTY1RTM1NgorOjEwMTE4MDAwQzJDMEQwOEUzNzhDQjg4QTM2OEZCOTdDQTMwNzdBQzk5MworOjEwMTE5MDAwMDI3RUZCMDFDMEQxQ0VEOTg4MzUwQUFEMDIwRThFMDg4MQorOjEwMTFBMDAwNzhFQjAyMkRBQzAxODlCN0RBQzBBRjlCNzlCQjAxQjFGNgorOjEwMTFCMDAwQ0FEQ0IwQzBCMDdEQTMwNzdBRDkwMjdDRUIwMUMwQjExNAorOjEwMTFDMDAwNjRCMTVEQzA5MTI5MjQ2N0MwMjBEMTBGMDAwMDhBREE4NAorOjEwMTFEMDAwQjFBQTY0QTBCQzJFMjA2NzJEMjUwMjY1RTMwQjFGRUQ4QworOjEwMTFFMDAwRjk4QTMyMThFREZFMEZBRjAxMDhGRjBDNjVGMjg2MEE4RQorOjEwMTFGMDAwNDg1MTZGODIwMjYwMDI3REMwOTAyOTI0NjcwOTBBNDcyNgorOjEwMTIwMDAwNjVBMkYyN0JDOTAxQzBCMDY0QkNBRTJDQjAwNzI4QjBBNworOjEwMTIxMDAwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMERCQTBBRgorOjEwMTIyMDAwNjVBRkU3NjNGQzkzMDAwMDBDRTk1MDY0OTJFQjBDRUZCMAorOjEwMTIzMDAwMTFDMDgwMjgxNjExQUZCRjJGMTYxOThFRjg4QkY3REE2MAorOjEwMTI0MDAwRTA4RkY5MkIxNjEwQUJGQjdGQkIwMUIxRUEwQ0E4NTA2NQorOjEwMTI1MDAwNjU4MEQ2ODgzN0RDRTBBRjg5OTkxQzc4OUIwMjJDRUMzRQorOjEwMTI2MDAwMDEyQzE2MUIyOTEyMEMyQzBBMDAyOTE2MUE3QUUzMDdFNgorOjEwMTI3MDAwN0FFOTAyN0ZCQjAxQzBDMTY1QzJBNDhCMzUyQzBBMDA4QworOjEwMTI4MDAwMkEwQTAwN0FFMzA1NjRFMUNBMkMwQTAxNjRDRTExNjBERgorOjEwMTI5MDAwMDI4RDg4MzQxQkVERDE5OERBOEYzMzFFRURDQTBGNEZDMworOjEwMTJBMDAwNTQyRkQ0MkM4QzJBOEEzMjBFQ0MwMjBCQUIwMTBDQkJFRgorOjEwMTJCMDAwMEM2NUJGMEUwQTQ5NTE2RTkyMDI2M0ZGMDU4QTMzMEExQworOjEwMTJDMDAwQUI1MDY0QkVGRDJDRDAxMzBBRUU1MTBFQ0UwMTBFMEVCMworOjEwMTJEMDAwNDEwQzBDNDEwRUNDMEM2NUNFRTgyRkQwMTJCMEZGNjU0RQorOjEwMTJFMDAwRjI2RUMwQjA4RTM3OENEODhBMzYyRkQyMDk3Q0EzMDcxNQorOjEwMTJGMDAwN0FDOTAyN0VGQjAxQzBCMTY1QkVDNzg4MzVEQkEwQUVFRQorOjEwMTMwMDAwOEU3OEVCMDFCMUFCODlEN0RBQzBBRjlENzlEQjAxQjE0MworOjEwMTMxMDAwQ0FDMEMwN0JBMzA3N0FCOTAyN0RFQjAxQzBDMTY1Q0UwQworOjEwMTMyMDAwQTFDMDkwMjkyNDY3QzAyMEQxMEY4ODM3OEMzNjk4MTQyQgorOjEwMTMzMDAwMENFOTBDMjkxNjE0MDhGODBDOTgxRDc4RkIwNzI4MTJFNAorOjEwMTM0MDAwMTRCMDg4MjgxNjE0ODkxRDlGMTU5QjE2QzBGMDJCMTIwNworOjEwMTM1MDAwMTQyOTE2MUEyQjE2MUI4QjE0N0FFMzBCN0FFOTA2ODhDQworOjEwMTM2MDAwMTU4RTE2NzhFQjAxQzBGMTY1RjFCOTI5MTIxQTJGMTIwQQorOjEwMTM3MDAwMTE4QTM1MkUxMjFCOUExQUFGRUUyRjEyMTBDMEEwQUY5MQorOjEwMTM4MDAwOUY3OUZCMDFCMUVFOUYxMTg4MUFDMEYwOTgxMDdBRTNBMworOjEwMTM5MDAwMEE3RUE5MDUyQTEyMDE3QThCMDFDMEYxNjRGMDgxNjBFRQorOjEwMTNBMDAwMDE4Mjg5MzY4QjM3OTkxNzBCRTgwQzk4MUYwOUM5MENGNQorOjEwMTNCMDAwMjkxNjE1NzhFQjA3MjgxMjE1QjA4ODI4MTYxNUQ5QzBGQworOjEwMTNDMDAwOUExOTlFMTg4QTFGMkUxMjE1MkExNjFBMkUxNjFCREEyMworOjEwMTNEMDAwQzBDMEUwOEMxNzdGOTMwQjdGQTkwNjg4MTg4RjE5NzhGRgorOjEwMTNFMDAwRkIwMUMwRTE2NUUxM0QyOTEyMUEyRjEyMTM4QTM1MkU0NworOjEwMTNGMDAwMTIxQjlBMUJBRkVFMkYxMjEyQzBBMEFGOUY3OUZCMDFGOAorOjEwMTQwMDAwQjFFRTlGMTM4ODFCQzBGMDk4MTI3QUUzMEE3RUE5MDVGQgorOjEwMTQxMDAwMkExMjAzN0E4QjAxQzBGMTY1RjEwOTJFMTIxNjJFMTZERAorOjEwMTQyMDAwMTkyQTEyMUIwMDUxMDRDMEUxMDBFRTFBQjBFRTJFMTY2QworOjEwMTQzMDAwMTcwRUZGMTMyRjE2MTgwRkNDMDFBQ0FBMkYxMjFBMEU3RAorOjEwMTQ0MDAwQkMwMUFDRkM3RkNCMDFCMUFBMkExNjFCMkMxNjFBNjM3NworOjEwMTQ1MDAwRkM2MjAwMDA3RkIzMDI2M0ZFMzE2M0ZFMkI3RUIzMDJBOQorOjEwMTQ2MDAwNjNGQzM0NjNGQzJFMDAwMDY0NTBDMERBMjBEQkYwNThDQgorOjEwMTQ3MDAwMTVERUMwMjBEMTBGQzA5MTYzRkQ3RTAwQzA5MTYzRkFEQworOjEwMTQ4MDAwNENEQTIwREI3MEMwRDEyRTBBODBDMDlBMjkyNDY4MkM0NworOjEwMTQ5MDAwNzAwNzU4MTRDRUQyQTBEMTBGMDM0QzBCMThFRDUxREJCRQorOjEwMTRBMDAwQzBBODI4NzhDMzAyMkJDREY4RDlCMDYzRkE2NTAwMDAzNAorOjEwMTRCMDAwMkEyQzc0REI0MDU4MEU1MDYzRkFFODAwMDAwMDJEMjVGQQorOjEwMTRDMDAwMDI3QkM5MDFDMEIwNjRCMDE3MkNCMDA3MjhCMDAwREFBNQorOjEwMTREMDAwMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZCMworOjEwMTRFMDAwRTdDMDIwRDEwRkMwOTE2M0ZDMDQwMjJBMDI1ODAyNTBDOQorOjEwMTRGMDAwMEFBMjAyMDYwMDAwMDIyQTAyNTgwMjREMEFBMjAyMDZBRgorOjEwMTUwMDAwMDAwMERCNzBEQTIwQzBEMTJFMEE4MEMwOUUyOTI0NjgzQQorOjEwMTUxMDAwMkM3MDA3NTgxNEFFQzAyMEQxMEZDMDk0NjNGQkNGMDBDRAorOjEwMTUyMDAwQzA5NjYzRkJDOUMwOTY2M0ZCQzQwMDAwMkEyQzc0REIyMQorOjEwMTUzMDAwMzBEQzQwNUJGRTEzREJBMEMyQTAyQUI0MDAyRjIwMENERAorOjEwMTU0MDAwNjNGRjI3MDA4RDM1OENCNzdEQ0IwMjYzRkREMjYzRkMzMgorOjEwMTU1MDAwNzE4RjM1OEVENzdGRUIwMjYzRkRDNTYzRkM2NDAwMDA5RAorOjEwMTU2MDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNEMwMjBEMTBGMDBGQgorOjEwMTU3MDAwNkMxMDA0MkIyMjFFMjgyMjFEQzBBMEMwOTQyOTI0MDYxMgorOjEwMTU4MDAwMkEyNTAyN0I4OTAxREJBMEM5QjkxM0VEMDhEQTIwMjhERQorOjEwMTU5MDAwQjAwMDJDQjAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwMDAxMQorOjEwMTVBMDAwREJBMDY1QUZFN0MwMjBEMTBGMDAwMDAwNkMxMDA0Mjk1QworOjEwMTVCMDAwMjAwNjJBMjEwMjY4OTgwNTI4OUNGOTY1ODExQTBBMEFFMgorOjEwMTVDMDAwNEM2NUEwRjAxNkVDRkIyQjYyOUUxQUVDRjg2RkI4MDI4QgorOjEwMTVEMDAwNjAwMEYxMkFBMjI2NjhBMDA3OEIyMDBBQkIwQzY1QjAyOAorOjEwMTVFMDAwRTMyQTYyOUQ2NEEwREQyQjIwMEMwQ0JDMTFBNkNDMkQzRgorOjEwMTVGMDAwQzI4NjZGRDkwMjYwMDBENzFERUNFRjBEQkQwQTJERDI1NworOjEwMTYwMDAwQTM2OEQwMDc4RTIwMERFRTBDNjVFMEMzMjdDMjg1QzAwRAorOjEwMTYxMDAwRTA2NDcwQkIxREVDRjQ2ODQzNEQxQ0VDRjM4QTJCMENBQQorOjEwMTYyMDAwQUEwMjlBNzA4OTIwMDg5OTExMEQ5OTAyOTk3MTg4MkE0NQorOjEwMTYzMDAwOTg3NDhGMzI5Rjc1MjgyMTA0MDg4ODExOTg3NzE4RUNDOAorOjEwMTY0MDAwRTQwQ0JGMTFBNkZGMkRGMjg1QThCODJFODRDRjJERENBNworOjEwMTY1MDAwMjgyREY2ODVDODVBMkEyQzc0REI0MDU4MERFN0QyQTBGNQorOjEwMTY2MDAwRDEwRkMwMjBEMTBGMDAwMDJDOUNGOTY0QzA4RDJDMjAxQworOjEwMTY3MDAwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZGQzY2OTcwOUUwQworOjEwMTY4MDAwNjYxOEVDREE4OTMwOEYyQjA5ODk0MDBCOTkxMDA5RkYxNQorOjEwMTY5MDAwMDIwOEZGMDI5RjcwOEMyMDA4Q0MxMTBEQ0MwMjlDNzFCNworOjEwMTZBMDAwOEEzMzlBNzM4OTMyOTk3Mjg4MkE5ODc0OEYzNDlGNzUxNQorOjEwMTZCMDAwNjNGRjgyMDAwMENDNTdEQTIwREIzMERDNDA1ODE0QjhERQorOjEwMTZDMDAwQzAyMEQxMEYwMERBMjBDMEI2NTgxNTQ3NjNGRkU1MDBFRgorOjEwMTZEMDAwREEyMDU4MTU0NTYzRkZEQzAwREEyMERCMzBEQzQwREQyMgorOjEwMTZFMDAwNTA1ODE1QzdEMkEwRDEwRjJCMjEwNDU4MTNEQTFERUM4NgorOjEwMTZGMDAwQkQyQjIwMENDMEUwMkUyNDY2NjNGRjg0MkYyMTIzQzA2NQorOjEwMTcwMDAwQzg3RkMzMDI2M0ZGNzkyQzIwNjYyQjIxMDRCMUNDMEM2NworOjEwMTcxMDAwMEM0NzJDMjQ2NjU4MTNDRjFERUNCMzJCMjAwQ0MwRTBEMworOjEwMTcyMDAwMkUyNDY2NjNGRjVBMDAwMDZDMTAwNEMwQjdDMEExMTZENworOjEwMTczMDAwRUNCMDE1RUNBMkQ3MjBEODQwQjgyMkMwNDAwNTM1MDI0NQorOjEwMTc0MDAwOTY3MTk1NzAwMkE0MzgwNDA0NDJDOTRCMUFFQzk1MTk5RAorOjEwMTc1MDAwRUM5NjI5QTY3RUMxNDBEMzBGNkQ0QTA1MDA4MDg4MDAxMworOjEwMTc2MDAwMjA4QzIyMEE4OEEyNzJEMTBGQzA1MDA4QTUzODc1QjAwQgorOjEwMTc3MDAwRTM2M0ZGRDc2QzEwMDg5MzE0OTQxMjI5MjAwNjY1NTI3NgorOjEwMTc4MDAwODhDMDcxNjg5ODA1MkE5Q0Y5NjVBMjk4MTZFQzg5Mjk4OQorOjEwMTc5MDAwMjEwMjhBMTQwOTA5NEM2NTkwQzc4QUEwMEE2QTUxMkE1NQorOjEwMTdBMDAwQUNGRDY1QTBCQ0NDNUZEQjMwREEyMDhDMTI1ODE0N0MxOQorOjEwMTdCMDAwQzA1MTlBMTRDN0JGOUJBOThFMTQyRUUyMDk2OEUwNjAzRAorOjEwMTdDMDAwMkY2MjlFMURFQzdBNkZGODAyNjAwMDgxMkREMjI2Njg5MAorOjEwMTdEMDAwRDAwNTJGMjIwMDdERjk3NTJDNjI5REM3OTA2NEMwNkRFNQorOjEwMTdFMDAwOUMxMThBMTQyQjIwMEMyQUEwMjAwQ0JEMTFBNkREMEEwNgorOjEwMTdGMDAwNEYxNEJGQTgwOTg4MDEyOUQyODZBRjg4Mjg4QzA5Nzk5RgorOjEwMTgwMDAwOEI1NTFGRUM2QzBGQkYwQTJGRjJBMzY4RjAwNTI4MjIzRQorOjEwMTgxMDAwMDA3Rjg5NDMyOUQyODVENDkwNjU5MDc3NjAwMDNEMDA5MAorOjEwMTgyMDAwMDAyQjIwMEMxRkVDNjQwQ0JEMTFBNkREMjlEMjg2MEYwNQorOjEwMTgzMDAwQkYwQTZFOTYxMDJGRjJBMzY4RjAwNDg4MjA3Rjg5MDVGNgorOjEwMTg0MDAwMjlEMjg1NjU5MTY1REEyMDU4MTRFNzYwMDAxM0RBMjAwMworOjEwMTg1MDAwQzBCNjU4MTRFNTYwMDAwOUMwOTA2M0ZGQjlEQTIwNTg5QgorOjEwMTg2MDAwMTRFMjg5MTQ4OTkxMDlGRTUwNjU1MUU0OEMxMjhEMTQ5QgorOjEwMTg3MDAwREEyMERCRDA4REQwOUUxMDBENkQ1MTU4MTM1NDlBMTQ4MAorOjEwMTg4MDAwNjRBMjA4Qzc1RjhGQTE5NUE5QzA1MTBGMEY0NzlGMTI4RgorOjEwMTg5MDAwNjNGRUZCMDBDMDkxQzBGMTI4MjAwNjJDMjA2NjI4OEMzNgorOjEwMThBMDAwRjlBN0NDMEMwQzQ3MkMyNDY2NkZDNjA4OEQxNDhERDE3QgorOjEwMThCMDAwNzBERTAxQzA5MEREOTA2NDgxNTlDOUQzMkExMjAxMkJEQQorOjEwMThDMDAwMjEwNDU4MTM2NDhBMTRDMEIwMkIyNDY2OEVBOTJBQTA2MAorOjEwMThEMDAwMjAwRTI4MTQxQ0VDNDM4RDE0MTVFQzM3QzE3MDBBNzdDOAorOjEwMThFMDAwMzY4NTU2MkREQzI4QUMyQzlDMTNERUQwQTg1NTdDRDMzNQorOjEwMThGMDAwMDIyRURERjhEM0UwREE0MDA1NUIwMkRDMzA1QkZGOEFDNAorOjEwMTkwMDAwRDRBMDI4MjAwQ0I0NTVDMEQwMkIwQTg4MkYwQTgwMENGNAorOjEwMTkxMDAwOEMxMUE2Q0MyOUMyODVBRjNGQUI5OTI5QzY4NTFDRUM5QQorOjEwMTkyMDAwMkNERUYwQUM4ODJEODRDRjI4MTIwMzI5MTIwNDc4RjMyMgorOjEwMTkzMDAwMDIyRUZERjgyODkwMjBEM0UwMDc4ODBDQzE3MDA4MDgxQgorOjEwMTk0MDAwNDcyODk0MjAwODc3MzY2NTdGQUI4OTE0MTNFQzJBODlFMQorOjEwMTk1MDAwOTBDMEY0Nzc5NzQ5MUJFQzI4QzFDQTI4MjEwNDg1MTQ0QworOjEwMTk2MDAwMDk5RTQwMDZFRTExODc1MzA0ODgxMTg1NTIwRTg4MDJBNQorOjEwMTk3MDAwMEM4ODAyOUJBMDlGQTE4RjJCOURBNTk4QTQ5N0E3OTU0QgorOjEwMTk4MDAwQTYwM0ZGMDI5RkEyMkMyMDBDMUVFQzExQUVDRTBDQ0NBNQorOjEwMTk5MDAwMTEwNkNDMDgyQkMyODUyREU0Q0YyQkJDMjAyQkM2ODU4RAorOjEwMTlBMDAwMkEyQzc0OEIxMjU4MEQxNEQyQTBEMTBGMjgyMDNEQzBDMAorOjEwMTlCMDAwRTA3Qzg3N0YyRTI0NjcwRTBBNDc2NUEwN0IxQUVDMEYxOAorOjEwMTlDMDAwODgyMDFFRUJGRDhGMTQ4RUU0OEZGNDA4ODgxMTBBODg5RQorOjEwMTlEMDAwMDIwRjhGMTRBRkVFMUZFQzBBOTg5MTBGRUUwMjlFOTA0QgorOjEwMTlFMDAwMUVFQzA5QzA4MDFBRUJGQTJDRDI4NUFBQkFCOENDMjgxMgorOjEwMTlGMDAwQTRDRjJDRDY4NTJDMjEwMjJGMjA3MDBFQ0MwMkIxRkY1MworOjEwMUEwMDAwMkYyNDcwMkMyNTAyQzAyMEQxMEY4NzE0ODc3MDA3MDc2MAorOjEwMUExMDAwNDc2M0ZENkUyODIxMjNDMDk5Nzk4QjAyNjNGRTlBREQwRQorOjEwMUEyMDAwRjA2M0ZFOTUwMERBMjBEQjMwOEMxMkRENTA1ODE0RjRBMAorOjEwMUEzMDAwRDJBMEQxMEZDMEUxNjNGRjdBOEIxNDhDMTJERDUwQzBBRAorOjEwMUE0MDAwQUEyRTBBODAyQTI0NjhEQTIwNTgxMzYwRDJBMEQxMEY2NworOjEwMUE1MDAwMDA3MDk2NTUyQjYyOUU2RUI4NTMxREVCRDQyREQyMjY4NgorOjEwMUE2MDAwNjhEMDA0OEUyMDdERTk0NTJBNjI5RENCQUYyQjIxMDRFRQorOjEwMUE3MDAwMkMyMDY2NTgxMkY4QzA5MDI5MjQ2NjgyMTQxOEVCRTJENAorOjEwMUE4MDAwOEYyMTA4RkYwMTlGMjFDMDIwRDEwRjAwOEIxMEM5QjgwMgorOjEwMUE5MDAwOENBMDBDNkM1MUNDQ0M4RTI0MUZFQkQwOERFMTlFMTQwRAorOjEwMUFBMDAwMEZERDAyOURFMTg4MTA2NThGQTlDMDIwRDEwRkRBMjBEQgorOjEwMUFCMDAwQzBCNjU4MTQ0REMwMjBEMTBGMDAwMDAwNkMxMDA2Mjk4QworOjEwMUFDMDAwMjEwMkMwRDA3NTk3MTAyQTMyMDQ3RkE3MEE4QjM1N0Y3OAorOjEwMUFEMDAwQkYwNTJEMjUwMjBERDkwMjA5MEM0QzY1QzE4MjE2RUJGQworOjEwMUFFMDAwQjQxRUVCQjIyODYyOUVDMEZBNzhGMzAyNjAwMTg4MjkyNgorOjEwMUFGMDAwRTIyNjY4OTAwNzhBMjAwOUFBMEM2NUExN0EyQTYyOURDRAorOjEwMUIwMDAwREZBMDY0QTE3NzJCMjAwQzBDQkMxMUE2Q0MyOUMyODZDNworOjEwMUIxMDAwQzA4Qzc5ODMwMjYwMDE1NzE5RUJBNzA5QjkwQTI5OTI5MQorOjEwMUIyMDAwQTM2ODkwMDc4ODIwMDk4ODBDNjU4MTQzMjdDMjg1MUMxQgorOjEwMUIzMDAwRUJBOTY0NzEzQTg5MzEwOThCMTQwQ0JCMDE2RkIxMUQ5QgorOjEwMUI0MDAwMkMyMDY2OUYxMEIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2QworOjEwMUI1MDAwNjAwMTQwMDlGRjUwNjVGMTNBOEExMDJBQUMxODg5MzRCNworOjEwMUI2MDAwQzBDNDdGOTczQzE4RUJBQTFCRUJBOThGMzU5QzcxOUJENworOjEwMUI3MDAwNzA4QjIwOUQ3NDA4QkIwMjlCNzJDMDgyOTg3NTFCRUIxMgorOjEwMUI4MDAwQTUwRjA4NDA5QjczMEY4ODExOTg3NzdGRjcwQjJGMjFDMworOjEwMUI5MDAwMDIyODRBMDAwOEZGMDIyRjI1MDJDMEI0NjAwMDA0MDA5QQorOjEwMUJBMDAwMDAwMEMwQjA3RTk3MDQ4RjM2MkYyNTIyN0Q5NzA0ODhEMQorOjEwMUJCMDAwMzcyODI1MjE3Qzk3MzZDMEYxQzA5MDBBRjkzODJGM0M5MAorOjEwMUJDMDAwMjAwOTA5NDI2NDkwODYxOUVCNzYxOEVCNzcyODk2N0VGNworOjEwMUJEMDAwMDBGMDg4MDBBMDhDMDBGMDg4MDBBMDhDMDBGMDg4MDA0NQorOjEwMUJFMDAwQTA4QzJBNjI5RDJERTRBMjJBQUMxODJBNjY5RDg5MzAxOQorOjEwMUJGMDAwNzc5NzM4OEYzMzhBMzIxOEVCODAwN0JFMEIyQzIxMDQ3RAorOjEwMUMwMDAwQjRCQjA0Q0MxMTk4RTBDMDg0OThFMTg4MkI5REU1OUE4MAorOjEwMUMxMDAwRTY5RkU3MUFFQjc4MDk5RjQwMDZGRjExMEZDQzAyMEFGNgorOjEwMUMyMDAwODgwMjk4RTJDMUZDMEZDQzAyMkNFNjA0QzlCODJDMjAzMworOjEwMUMzMDAwMEMxRUVCNjcwQ0NBMTFBRUNDMDZBQTA4MjlBMjg1MkQ5MgorOjEwMUM0MDAwQzRDRjA5QjkwQjI5QTY4NUNGNUNDMDIwRDEwRkMwODFCNAorOjEwMUM1MDAwQzA5MDBGODkzOEMwODc3OTg4MDI2M0ZGNzI2M0ZGNjY3RQorOjEwMUM2MDAwMDBDQzU3REEyMERCMzBEQzQwNTgxMzREQzAyMEQxMEZCOAorOjEwMUM3MDAwREEyMDU4MTNERDYzRkZFOEMwQTA2M0ZFODJEQTIwQzBEQgorOjEwMUM4MDAwQjY1ODEzRDk2M0ZGRDkwMERCNDAyQTJDNzQ1ODBDNUE3QworOjEwMUM5MDAwRDJBMEQxMEY4QTEwMkIyMTA0NTgxMjZFMUVFQjQ0QzAyMworOjEwMUNBMDAwRDAyRDI0NjY2M0ZFQjEwMDZDMTAwNkQ2MjAxOUVCM0ZFMAorOjEwMUNCMDAwMUVFQjQxMjg2MTAyMTdFQjNFMDgwODRDNjU4MDVGOEFFNQorOjEwMUNDMDAwMzAwQTZBNTE2OUEzNTcyQjcyOUU2RUI4M0YyQTkyMjYzQQorOjEwMUNEMDAwNjhBMDA0OEM2MDdBQzkzNDJBNzI5RDJDNENGRUNBQUI3MQorOjEwMUNFMDAwMkI2MDBDQjY0RjBDQkQxMUE3REQyOEQyODYwRUJFMEFBNAorOjEwMUNGMDAwNzhGQjI2OUMxMTJFRTJBMzJDMTYwMDY4RTAwNTJGNjJDQgorOjEwMUQwMDAwMDA3RUY5MTUyMkQyODVDRjI1NjAwMDBEMDBEQTYwQzA3MworOjEwMUQxMDAwQjY1ODEzQjVDODVBNjAwMTBGMDBEQTYwNTgxM0IyNjU5RgorOjEwMUQyMDAwNTEwNkRDNDBEQjMwOEQzMERBNjAwRDZENTE1ODEyMjdFMgorOjEwMUQzMDAwRDNBMDY0QTBGMzg0QTFDMDUxMDQwNDQ3NjNGRjZEMDBFNQorOjEwMUQ0MDAwQzBCMDJDNjA2Njg5MzFCMUNDMEMwQzQ3MkM2NDY2NkYzNgorOjEwMUQ1MDAwQzYwMjcwOTYwQTJCNjEwNDU4MTIzRUMwQjAyQjY0NjYwRQorOjEwMUQ2MDAwNjU1MEI0MkEzQzEwQzBFN0RDMjBDMEQxQzBGMDAyREZDRgorOjEwMUQ3MDAwMzgwRjBGNDI2NEYwOTAxOUVCMEExOEVCMEIyODk2N0U4RgorOjEwMUQ4MDAwOEQxMDZEREEwNTAwQTA4ODAwQzA4Q0MwQTA4OTMwMURDMAorOjEwMUQ5MDAwRUIxQTc3OTc1Mzg4MzI4QzEwOEYzMzAyQ0UwQkMwMjQwNgorOjEwMURBMDAwOTJFMTIyNjEwNDlERTAwNDIyMTE4RDZCOUJFNTlGRTc4NworOjEwMURCMDAwOThFNjFGRUIxMDA5OTg0MDA2ODgxMTA4MjIwMjBGRERGMworOjEwMURDMDAwMDJDMThEOURFMjA4MjIwMjkyRTRCNEMyMkU2MDBDMUY3MworOjEwMUREMDAwRUIwMDBDRTgxMUE3ODgyQzgyODVBRkVFMEMyMjBCMkJCMAorOjEwMURFMDAwRTRDRjIyODY4NUQyQTBEMTBGMjg2MDBDRDJBMDhDMTExRQorOjEwMURGMDAwMTlFQUY4MEM4RDExQTk4OEE3REQyRUQyODUyQjg0Q0Y4NgorOjEwMUUwMDAwMEVDQzBCMkNENjg1RDEwRkMwRjAwQURGMzg3RkU4MDI0QworOjEwMUUxMDAwNjNGRjZDNjNGRjYwMDAwMDJBNkM3NEMwQjJEQzIwRERERAorOjEwMUUyMDAwNDA1ODEyMUNDMEIwNjNGRjYzQzAyMEQxMEYwMDAwMDBGNworOjEwMUUzMDAwNkMxMDA0MkMyMjFEMkEyMjFFQzA0OUQzMjAyOTMwMDZGMgorOjEwMUU0MDAwMjQzNDY4QzA0MDdBQzEwNUREQTA2MDAwMDIwMEMwRDAyMworOjEwMUU1MDAwNkU5NzM4QzA4RjJFMEE4MDJCMzAxNEMwOTYyOTM0MDYxNgorOjEwMUU2MDAwMEVCQjAyMkUzMTAyMkIzNDE0N0U4MDA0MjQzNTAyREU5OAorOjEwMUU3MDAwNDA3QUMxMEVDOEFCREJEMERBMzAyQzBBMDA1ODBBNzZBMworOjEwMUU4MDAwMkUzMTAyMEUwRjRDQzhGRUMwMjBEMTBGNjg5NUY4MjhFNQorOjEwMUU5MDAwMzEwMjA4MDg0QzY1OEZFRjFBRUFDNjFDRUFDNDJCQTI2RgorOjEwMUVBMDAwOUVDMDlBN0I5QjQ2MkJDMjI2NjhCMDA0OEQzMDdCRDk5RQorOjEwMUVCMDAwM0IyOUEyOURDMEUzQ0I5Mzk0OTAxQkVBRDcyRDMxMDQxQworOjEwMUVDMDAwOUI5NjA4REQxMTBFREQwMjlEOTc5RDkxMTJFQUQ0QzAwQworOjEwMUVEMDAwRTUyNEM0QTIyRTM0MDYyRjMxMDIyOEEyOUQwMkZGMDI1RgorOjEwMUVFMDAwMjg4QzMwMjhBNjlEMkYzNTAyQzAyMEQxMEZEQTMwQzBCMworOjEwMUVGMDAwQjY1ODEzM0RDMDIwRDEwRjZDMTAwNjI5MjAwNjY4OThGMworOjEwMUYwMDAwMDUyODlDRjk2NTgyNUQyOTIxMDIwOTA5NEM2NTkyMTAxQQorOjEwMUYxMDAwQ0Q1MURCMzBEQTIwMDQ0QzAyNTgxMkExQzA1MUQzQTBCRAorOjEwMUYyMDAwQzdBRjJBMzYwQUMwRTAxOUVBQTMxREVBQTkxRkVBQTIzMAorOjEwMUYzMDAwOEEzQTE2RUE5RkIxQUM2NEMxMzUyODYyOUU2Rjg4MDI2NgorOjEwMUY0MDAwNjAwMUYxMjlEQzMzMjk5MjI2Njg5MDA3OEIyMDA5QkJCOAorOjEwMUY1MDAwMEM2NUIxRTAyNzYyOURDMDhFNjQ3MUQ4MkIyMDBDMENGQgorOjEwMUY2MDAwQkMxMUE2Q0MyOUMyODY3OTgzMDI2MDAxRDIxOUVBOTFGQworOjEwMUY3MDAwMDlCOTBBMjk5MkEzOTcxMDY4OTAwODI4MjIwMDA5ODhCNQorOjEwMUY4MDAwMEM2NTgxQkIyN0MyODU2NDcxQjUyOTIwMDYyOTlDRjk5RgorOjEwMUY5MDAwNjQ5MUVDMkMyMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2MgorOjEwMUZBMDAwNkVDNjAyNjAwMUExMDlGODUwNjU4MTlCODgzNjg5RjRFQworOjEwMUZCMDAwMDg4QzE0QUM5OTFDRUE4MTBDOTkwMjJDMjEwNDk5NzBBQworOjEwMUZDMDAwMTlFQTk4MDgwODQ3OTk3MTg5MkEwOTg4MTAwODk5MDIxRQorOjEwMUZEMDAwMThFQTk1MDg5OTAyOTk3MjI4MzAxMzI5MzAxMjA0ODg1QQorOjEwMUZFMDAwMTAwNjk5MTAwODk5MDIyODMwMkM5QTc0MEM4ODEwMDg1MQorOjEwMUZGMDAwQzgwMjA5ODgwMjk4NzM4OTM3OTk3NTg4Mzg5ODc2OEE1MworOjEwMjAwMDAwMzlDMDgxOUE3NzFBRUE4ODg5MzU5ODdCOTk3ODA5ODk0NQorOjEwMjAxMDAwMTQwQTk5MDI5OTdBOEEzMDg5MzI3N0E3MzYxOEVBNzZCMworOjEwMjAyMDAwOEYzMzk4N0NDMDg0OTg3RDg4MkIyRTc2MTEyOTc2MTI2OAorOjEwMjAzMDAwMkY3NjEzMTlFQTcwMEE5RjQwMDZGRjExMDRDQTExMDk4RQorOjEwMjA0MDAwODgwMjBGQUEwMjk4N0VDMUY5MEZBQTAyMkE3NjEwQzA1MAorOjEwMjA1MDAwQUE2MDAwMDFDMEE2QURCRjBDQkMxMUE2Q0MyOUMyODVFOAorOjEwMjA2MDAwMkVGNENGMDlBOTBCMjlDNjg1NjU1MTA3QzAyMEQxMEZEMQorOjEwMjA3MDAwMkIyMDBDMENCQzExMDZDQzA4MjhDMjg2MDlCOTBBNkZBQgorOjEwMjA4MDAwODkwMjYwMDEyRTI5OTJBMzY4OTAwODJBMjIwMDA5QUFEOQorOjEwMjA5MDAwMEM2NUExMUYyQUMyODU2NEExMTkyODIwM0QwODI4NDA4QgorOjEwMjBBMDAwNjQ4MDhDODQzNTA0ODQxNDY0NDA4NDg1RjU3NDUzN0Y4MworOjEwMjBCMDAwODQzNjA0ODQxNDY0NDA3Nzc0NTM3NDI5MzAxM0MwOENCQworOjEwMjBDMDAwNzk4ODZDQzA5MDI5MjQ2NzA5MDg0NzY1ODBFRDg4MjBDRAorOjEwMjBEMDAwODlGNDg0MzUxRkVBNEIwNDg0MTRBNDk0MEY0NDAyOTRCOQorOjEwMjBFMDAwQTAxNEVBNDYwODg4MTEwNDg4MDI5OEExODQzNjk4QTNBRgorOjEwMjBGMDAwMDQ4NDE0QTQ5OTBGOTkwMjk5QTIxOUVBNDJBREI0Mjg1NAorOjEwMjEwMDAwQzI4NTJFNDRDRjI4OEMxMDI4QzY4NTI4MjEwMjJGMjA3NgorOjEwMjExMDAwNzAwOTg4MDJCMkZGMkYyNDcwMjgyNTAyQzAyMEQxMEYzOQorOjEwMjEyMDAwMDBDQzU3REEyMERCMzBEQzQwNTgxMjFEQzAyMEQxMEYyNAorOjEwMjEzMDAwQzA5MTYzRkY4RkRBMjBDMEI2NTgxMkFCNjNGRkUxMDA5NQorOjEwMjE0MDAwREEyMDU4MTJBOTYzRkZEODhBMTAyQjIxMDQ1ODExNDFCNAorOjEwMjE1MDAwMURFQTIwMUZFQTE5MkIyMDBDQzBFMDJFMjQ2NjhBM0FDMworOjEwMjE2MDAwNjNGRTQ4MDAwMERBMjBEQjMwREM0MERENTA1ODEzMjRFOQorOjEwMjE3MDAwRDJBMEQxMEYyQTJDNzREQjQwNTgwQjFGRDJBMEQxMEY1NAorOjEwMjE4MDAwMjkyMTIzQzA4ODc5ODMwMjYzRkUyMDJBMTIwMDJDMjA5MworOjEwMjE5MDAwNjYyQjIxMDQyQ0NDMDEwQzBDNDcyQzI0NjY1ODExMkRFNQorOjEwMjFBMDAwMURFQTBDMUZFQTA1MkIyMDBDQzBFMDJFMjQ2NjhBM0E5QgorOjEwMjFCMDAwNjNGREY4MDBEQTIwNTgxMjhDNjNGRjY0REEyMDVCRkZCRAorOjEwMjFDMDAwMUNEMkEwRDEwRjAwMDAwMDZDMTAwODk1MTVDMDYxQzE5MQorOjEwMjFEMDAwQjBEOTQwMkEyMDNEQzA0MDBCQUEwMTBBNjQzODJBMjAwOQorOjEwMjFFMDAwMDYyOTE2MDY2OEE4MDUyQ0FDRjk2NUMzM0IxREU5RjI2MworOjEwMjFGMDAwNjQ0MDA1MkYxMjA1NjRGMjlDMjYyMTAyMUVFOUVFMDZCQQorOjEwMjIwMDAwMDY0QzY1NjJFMzE1RTlFQTY0NDBEOThBMzUyOTMwMDM1MgorOjEwMjIxMDAwOUExNDBBOTkwQzY0OTBDQzJDMjAwQzhCMTQ5QzExMENGMQorOjEwMjIyMDAwQ0MxMUE1Q0M5QzEyMkNDMjg2QjRCQjdDQjMwMjYwMDIzQworOjEwMjIzMDAwRDM4RjExMEVGRTBBMkVFMkEzNjhFMDA5ODYyMEQzMEY4OQorOjEwMjI0MDAwMEU2NjBDNjU2MkJFODgxMjI4ODI4NTY0ODJCNjg5MTQ4NworOjEwMjI1MDAwNjQ5MDVFREE4MEQ5MzA4QzIwMUVFOUU4MUZFOUU5MUQyMAorOjEwMjI2MDAwRTlENjhCMTQ4REQ0RDRCMDdGQjcxOEI4OEEyOTNDMTAyNgorOjEwMjI3MDAwODUzNjA4QzYxMTBFNjYwMjk2ODEwNTg1MTRBNUQ1MEYxMAorOjEwMjI4MDAwNTUwMjk1ODAwNDE4MTQ2RDg5Mjc4ODk2MDhDQjExMDg4QgorOjEwMjI5MDAwODgxNDBFQkIwMkE4RDgyOTlDMjAwRjg4MDI5QkExOTgwNQorOjEwMjJBMDAwQTA4ODkyOUJBMzA4ODgxNEE4RDgwRjg4MDI5OEEyMkExNQorOjEwMjJCMDAwQUMxMDE5RTlENEMwQzA4RjE0MUVFOUM1ODYxMjhEMTE2NworOjEwMjJDMDAwMjg2Mjg1QUVERDA4RkYwQjJDRDRDRjI4MjEwMjJGNjZCMworOjEwMjJEMDAwODU4QjM1MkEyMDcwMDk4ODAyQUJBQTI4MjUwMjJBMjQ3QQorOjEwMjJFMDAwNzBDMDIwRDEwRjI5NTI5RTE4RTlCMTZGOTgwMjYwMDI4OAorOjEwMjJGMDAwMDgyODgyMjY2ODgwMDgyOTIyMDAwODk5MEM2NTkxRjkyRgorOjEwMjMwMDAwMkE1MjlEQzFDQTlBMTM2NEExRUYyQjIwMEMyNjIwMDZFNQorOjEwMjMxMDAwMENCODExQTU4ODJEODI4NjBFQkUwQTdEQzMwMjYwMDIwQworOjEwMjMyMDAwMDIyRUUyQTM2OEUwMDgyRjIyMDAwRUZGMEM2NUYxRjNGNQorOjEwMjMzMDAwMjg4Mjg1REU4MDY0ODFGRjk4MTAyNjZDRjk2NDYxRkYzNQorOjEwMjM0MDAwMkMyMDY2ODgzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI1QQorOjEwMjM1MDAwNjAwMUJDMDhGRDUwNjVEMUI2MTdFOUI0MTlFOTk4MUFCNworOjEwMjM2MDAwRTk5RjJDMjEwNDhCMkQyODMwMTAyRjIxMUQwQzg4MTA2MworOjEwMjM3MDAwMEJGQjA5MEM4ODAyMEE4ODAyMDlCQjAyNjQ0MTUyODlERQorOjEwMjM4MDAwMTBDMDREOUI5MDk3OTE5ODkyOEQzNUQ5RTA2NEQwNkM5OAorOjEwMjM5MDAwRDczMERCRDBEODMwN0ZENzEzMjczQzEwQkNFOTI2MzJBQQorOjEwMjNBMDAwMTY4QzM5OTZFNjlDRTc4QTM3QjQzODlBRTgwQjEzMTRGMgorOjEwMjNCMDAwNjQzMDQ5MkE4MjE2ODY3OTlBOTY5Njk3OEM3NzhBN0QxOAorOjEwMjNDMDAwOUM5ODJCODIxNzJDN0MyMDlBOUEyQTlDMTg5Qjk5ODY4MQorOjEwMjNEMDAwN0JCMDNCQjg4OTZEQjkyMThCQzk5NkE1MjY5MjE2MkE4OAorOjEwMjNFMDAwQUMxOEI4OTk5QkExOTZBMDhCQzc4NkNEOUJBMjJCOTJDNworOjEwMjNGMDAwMTU5NkE0OUJBMzg2Q0IyQ0NDMjAyNkE2MDVDMDM0NkJCNworOjEwMjQwMDAwRDQyMDBEM0IwQzBERDgwOTBFODgwQTdGQjcwNUMwOTA2QgorOjEwMjQxMDAwOTk4OEJDODhDMDkwMEIxQTEyNkRBQTA2OTk4ODk5OEI2RQorOjEwMjQyMDAwMjg4QzE4QzBEMDFCRTk4MzFDRTk4MjE2RTk3OEIxRkYxQgorOjEwMjQzMDAwMkEyMTFDMjNFNjEzMEYwRjRGMjZFNjEyMkYyNTFEN0Y5RQorOjEwMjQ0MDAwQTkwNkMwRjBDMDgwMjgyNTFEMDVGNjExMUFFOTcxOEY3NAorOjEwMjQ1MDAwMjAyQkU2MTUyQ0U2MTYyREU2MTcyNkU2MTgwQUZBMDJCQQorOjEwMjQ2MDAwMkFFNjE0MjkyMDA2Mjk5Q0Y5NjQ5MEZGMjkyMDBDOEQ2NgorOjEwMjQ3MDAwMTVDMDgwMUFFOTU3MEM5QzExQUE5OUE1Q0NEQTIwMkIxQgorOjEwMjQ4MDAwQzI4NTI4OTRDRjBCNEIwQjJCQzY4NUMwQjA4QzE2NTgzOQorOjEwMjQ5MDAwMTExNEQyQTBEMTBGOEEzNTZGQTU0OEQ4MzA4QkQ1NkRENQorOjEwMjRBMDAwQTkwQzhBODYwQThBMTRDQkE5N0FCMzM3Mjg4QzEwQzA2MworOjEwMjRCMDAwODAyODI0NjcwODBCNDc2NUIxMTJEQTIwREIzMDJDMTIyNAorOjEwMjRDMDAwMDY1ODExMzdEM0EwQzBDMUMwRDAyREE0MDM5QzE1NjNGQQorOjEwMjREMDAwRkQyNjg2MzY2NDYxMEM4OTEwQzA0RDlCOTA5NzkxOThCQgorOjEwMjRFMDAwOTI2M0ZFQTRDMDgxNjNGRkM3OEExNUNDQTdEQTIwREIwNAorOjEwMjRGMDAwMzA4QzE2NTgxMTJCQzAyMEQxMEZEQTIwQzBCNjU4MTFERAorOjEwMjUwMDAwQkE2M0ZGRTQwMERBMjA4QjExNTgxMUI3NjNGRkQ5MDBEQQorOjEwMjUxMDAwOUUxNzhBMTMyQjIxMDQ1ODEwNEY4RTE3QzBCMDJCMjRGRQorOjEwMjUyMDAwNjY2M0ZFMzRDMDgwNjNGRTA5REEyMERCMzA4QzE2REQ4MgorOjEwMjUzMDAwNTA1ODEyMzNEMkEwRDEwRkRBMjA1ODExQUI2M0ZGQTg0NAorOjEwMjU0MDAwMkQyMTIzQzBDODdEQzMwMjYzRkUwRDhBMTMyQjIxMDRGNQorOjEwMjU1MDAwMkMyMDY2OTgxN0IxQ0MwQzBDNDcyQzI0NjY1ODEwM0RFMworOjEwMjU2MDAwOEUxN0MwRDAyRDI0NjY2M0ZERUUwMDAwMjYyMTIzQjAxNworOjEwMjU3MDAwNjYwNjA2NEYyNjI1MjM2NTZFRjEyODIwNkE3Rjg3MDVBQgorOjEwMjU4MDAwMDgyOTQxNjQ5MEE1QzBEMDFCRTkxQzE5RTkyQjI2MjAxRAorOjEwMjU5MDAwMDcyM0U2MUJCMTY2MDlGQTAyMkJFNjFBMjgyMDBBMkQ0QQorOjEwMjVBMDAwRTYxRDJBRTYxRTA5ODgwMjI4RTYxQzg4MjYwNjA2NDczQworOjEwMjVCMDAwMjhFNjIwMkIyMjA4MjZFNTNFMkJFNjIxMkQyNDA3MkM5OQorOjEwMjVDMDAwMjAwNjJBMjA2NDY4QzM0N0I0NDQ2M0ZFOUVEQjMwREFFOQorOjEwMjVEMDAwMjA4RDE1QzBDRTJFMEE4MDJDMjQ2ODhDMTY1ODEwN0JCNgorOjEwMjVFMDAwRDJBMEQxMEY4RTEwMkEzMjE2MTZFOEYzMEEyQTE0ODZDQQorOjEwMjVGMDAwNjYyQkU2MTI5N0UxMjdFNjEzMjhFNjE0QUE2NjA5NjYxOQorOjEwMjYwMDAwMDI5NkUwMkVFQzQ4NjlFRDUwQzE0NjYzRkQ3QTAwMDA2OQorOjEwMjYxMDAwNjRBRkI0MTlFOEU5MjgyMDE2ODk5MjBBODgwQzAwOTE2MQorOjEwMjYyMDAwMDQwMDg4MUFBOEI4OTgyOTYzRkY5QzAwMkIyMTA0NkUyNworOjEwMjYzMDAwQjgxRTJDMjA2NkI4Q0MwQzBDNDcyQzI0NjZDOUMwOUU1MgorOjEwMjY0MDAwMTc4QTEzNTgxMDA0OEUxN0MwMzQ4RjIwQzBEMDJEMjQ0MQorOjEwMjY1MDAwNjZDMDY4MjYyNDA2NjNGRjJDMDA4RDM1QzA4MDY0RDBEOAorOjEwMjY2MDAwNEFEOUUwREMzMERCRTBERjMwMUFFOEY0QjE4OEI0RkZBRgorOjEwMjY3MDAwMTdFOEY0ODZDOTI0OURGRjhEQzgyQ0NDMTAyRDQ2MzA1OAorOjEwMjY4MDAwMDc2NzAxMkQ0NjMyMEE2NjAxMURFOEVFMjY0NjMxQUQ4OAorOjEwMjY5MDAwNkQyRDQ2MzMyNkYyMTU5N0I3OTZCNjg0QzNCQ0JCOTQwRQorOjEwMjZBMDAwQjU4RDM1Mjk5QzEwN0Q4M0MyMkYyMTFEQzE0NjYzRkQ0OAorOjEwMjZCMDAwNEIwMDAwMDA2QzEwMDYyOTIwMDYyODlDRjg2NTgyQzM5OAorOjEwMjZDMDAwMjkyMTAyMkIyMDBDMDkwOTRDNjU5MEUxMTZFOEI5MEM3MAorOjEwMjZEMDAwQkExMUE2QUEyREEyODYyQzBBMTI3REMzMDI2MDAyOTAwRQorOjEwMjZFMDAwMTlFOEI1MDlCOTBBMjk5MkEzNjg5MDA3OEMyMDA5Q0M4QQorOjEwMjZGMDAwMEM2NUMyN0MyOUEyODU2NDkyNzYyRDYyOUUxQUU4QUI5NQorOjEwMjcwMDAwNkZEODAyNjAwMjcyMkFBMjI2MjkxNjAxNjhBMDA4MkIzRgorOjEwMjcxMDAwMjIwMDBBQkIwQzY1QjI2MDI5NjI5REMxOEM2NDkyNTg4QworOjEwMjcyMDAwMkEyMTIwMEE4MDYwOTkxMDJDMjAzQ0M3RUYwMDBGM0UyMAorOjEwMjczMDAwMDEwQjNFQjFCRDBGREIzOTBCQkIwOThGMjYwREJEMTE1RgorOjEwMjc0MDAwMkREQzFDMEQwRDQxMEVERDAzOEUyN0IxREQwRDBENDE3RAorOjEwMjc1MDAwMEZFRTBDMERCQjBCMkJCQzFDMEJCNzAyN0VDNzFDMkM0OQorOjEwMjc2MDAwMjEyNTdCQ0IxNjJEMUFGQzBDQkEwQzBEQTE2MDAwMDk5QgorOjEwMjc3MDAwM0UwMTA3M0VCMTc4MDk4NzM5MEI3NzBBNzdFQjAyNjA5MworOjEwMjc4MDAwMDIwQTJDMjEyMzI4MjEyMUIxQ0MwQzBDNEYyQzI1MjMwQgorOjEwMjc5MDAwN0M4QjI5QjBDRDJEMjUyM0M4NTVEQTIwREIzMDU4MEY4RQorOjEwMjdBMDAwRkEyOTIxMDJDQzk2QzBFODBFOUUwMjJFMjUwMkNDNTdCMworOjEwMjdCMDAwREEyMERCMzBEQzQwNTgxMDdBQzAyMEQxMEYyQzIwNjZBNAorOjEwMjdDMDAwODkzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MDAxRDM1MworOjEwMjdEMDAwMDlGRDUwNjVEMUNEMkYwQTAxMkUzMDExMjkyMjE0NjQzNAorOjEwMjdFMDAwRTAxMTI4MjIxQjA5MEM0NDAwQzEwNDAwRkExQTBBODhDRgorOjEwMjdGMDAwMDIyODI2MUIyRTMwMTBDMEEwQzBCMDg4MzAxQ0U4NkUwNgorOjEwMjgwMDAwOTQxMjk1MTNDMDQxMjUyMDNDMkNDMDIyMDg4RDE0NzdDQQorOjEwMjgxMDAwODcwNTJGMEEwMTBDRkEzOEMwRjJDMDg0MDg1ODAxMEY0RQorOjEwMjgyMDAwNUYwMTBGNEIzODA1MzU0MDA3QkIxMEMwRjAwODRGMzgyQgorOjEwMjgzMDAwMDhGRjEwMEZCQjAyMjhFQ0ZFQzBGMDA4NEYzODg0MkJCNQorOjEwMjg0MDAwMEJBODEwMEFGRjEwMkEyMTIwMEY4ODAyMEI4ODAyMDgwQgorOjEwMjg1MDAwNDQwMjE4RTg3RDhGMTEwODQ0MDIyODIxMjUwQTJBMTQxMQorOjEwMjg2MDAwMDgyODE0MDQ4ODExMEE4ODAyMkEyMTA0OTRGMDhCMjA3NQorOjEwMjg3MDAwMDRFNDEwMDhCQjExMDRCQjAyQzA0QTA0QkIwMjlCRjE3NAorOjEwMjg4MDAwODQyQTA4QUIxMTBCRUIwMjk0RjQwQTU0MTEwQjQ0MDI5NgorOjEwMjg5MDAwMDU1NTEwMEQxQjQwOTRGNzA3QkIxMDBCNTUwMjA4NTU0QQorOjEwMjhBMDAwMDJDMDgxOTVGNjg0MzNDMDUwOTRGM0IxOTQ4QjMyOTU3NQorOjEwMjhCMDAwRjg5OEY5OUJGMkMwODBDMUJDMjQyNjE0OThGQjlCRjVDNAorOjEwMjhDMDAwOTlGQTg1Mzg5NUZDODQzQTk0RkQ4QjNCOUJGRTg4MzlCOAorOjEwMjhEMDAwOThGRjg1MzUyNUY2MTA4NDM2ODUxMzI0RjYxMThCMzczRAorOjEwMjhFMDAwODQxMjJCRjYxMkMwQjA2NEMwODE4OTMwNzc5NzQ2OEQ3MAorOjEwMjhGMDAwMzI4ODMzMkUzMDEwOEYxMTFDRTg0MDA5OTk0MDA2OTkxOAorOjEwMjkwMDAwMTEyQ0Y2MTRDMEM0MkNGNjE1OEMyQjJERjYxQTI4RjZCMworOjEwMjkxMDAwMUIyQkY2MTkwNEE4MTEwOTg4MDIwOEVFMDIxOUU4MzVFNAorOjEwMjkyMDAwQzE4MDA4RUUwMjA5QzkwMjI5RjYxNjJFRjYxOEMwOUVDQgorOjEwMjkzMDAwNjAwMDA0MDAwMDAwQzA5QTJGMjAwQzE4RTgyNTBDRkU0RgorOjEwMjk0MDAwMTFBOEZGQTZFRTJERTI4NTJCRjRDRjBEOUQwQjJERTZGMQorOjEwMjk1MDAwODVDODdGOEEyNjg5MjlBN0FBOUEyNjBBOTkwQzA5MDk3NworOjEwMjk2MDAwNDgyOTI1MjU2NTUwNENDMDIwRDEwRjAwQzA5QTYzRkYyRgorOjEwMjk3MDAwQzZEQTIwNTgxMDlENjNGRTM0REEyMEMwQjY1ODEwOUE4QgorOjEwMjk4MDAwNjNGRTJBMDA2ODk3MzhDMDIwRDEwRjAwMDBEQTIwREJGMAorOjEwMjk5MDAwNzA1ODEwNTdDMEIwQzBDMTBBQ0EzOTBBQ0IzODY1QkREQgorOjEwMjlBMDAwRTA2M0ZFMDk4QTEwMkIyMTA0NTgwRjJBQzBCMDJCMjRBMworOjEwMjlCMDAwNjY2M0ZFMjFEQjQwMkEyQzc0NTgwOTBGRDJBMEQxMEY4OAorOjEwMjlDMDAwREEyMDU4MEYyRjYzRkNGNzZDMTAwNEMwMjBEMTBGMDBFMQorOjEwMjlEMDAwNkMxMDA0MjkwQTgwMUVFODFEMUZFODFEMUNFN0Y1MEM3OQorOjEwMjlFMDAwMkIxMUFDQkIyQzJDRkMyREIyODUwRkNDMDI5RUQxOUNBNAorOjEwMjlGMDAwRDBDMDUxQzA3MDEzRTgxOTE0RTgxODE4RTgxNjJBQjJBQworOjEwMkEwMDAwODVBODI4MDQyNDBBMjM0NjkxQTk4NkI4QUEyQUI2ODU0RgorOjEwMkExMDAwQTk4ODI3ODQ5RjI1NjQ5RkQxMEYwMDAwNkMxMDBBRDZENworOjEwMkEyMDAwMzAyODMwMTAyOTIwMDYyODhDRjk2NDgyOUI2ODk4MEI4NgorOjEwMkEzMDAwMkE5Q0Y5NjVBMUIyMDIyQTAyNTgwRjExODkzNzFCRTdCNworOjEwMkE0MDAwREVDODkxNjQ1MjBFMkEyMTAyMEEwQzRDNjVDMjU4OEREMAorOjEwMkE1MDAwMzAxOUU3RDc3NEQ3MDUyRTIxMjM2NUUyOUUyRjkyOUU2OQorOjEwMkE2MDAwMUFFN0QzNkZGODAyNjAwMjUzMkFBMjI2NjhBMDA4MkM0NgorOjEwMkE3MDAwMjIwMDBBQ0MwQzY1QzI0NDJBOTI5RDY0QTIzRTlBMTU5QgorOjEwMkE4MDAwMUZFN0NEOEQ2N0MxRTY2NEQwMEUyQjYyMDYxOEU3Q0EzQQorOjEwMkE5MDAwNjRCMDA1Mjg4MDIxN0I4QjQyMkIyMDBDMThFN0M1MENFNQorOjEwMkFBMDAwQkMxMUE4Q0MyOUMyODY3OUVCNDUwRkJFMEEyRUUyQTM0MQorOjEwMkFCMDAwNjhFMDA0OEYyMDdFRjkzNzJDQzI4NTlDMTg2NEMyMzNFRAorOjEwMkFDMDAwMkIyMTJGODc2NjBCN0IzNjBCNzkwQzZGOUQyNjZFRDJFMAorOjEwMkFEMDAwNDYyQzIwM0Q3QkM3NDBDRTU1NjAwMDFFMkEyMDBDQzFFRAorOjEwMkFFMDAwQjI4QzIwNTgxMDc1OUExODY0QTI0NThENjc2M0ZGQ0Y4OQorOjEwMkFGMDAwQzBDMDYzRkZDNUQ3QjA2M0ZGRDMwMEMwRTA2MDAwMDI3MQorOjEwMkIwMDAwMkU2MDAzMEVEQjBDNkVCMjBFREM3MDBDRUExMUFBNkFBQQorOjEwMkIxMDAwMkFBQzIwNTgwMTk5RDdBMERBMjBEQjcwQzFDODJEMjEzQQorOjEwMkIyMDAwMjA1ODEwMUI4QzI2OEIyNzlBMTYwQ0JCMEM3QUIzMzRCQQorOjEwMkIzMDAwOEYxODg5NjM5OUYzODg2Mjk4RjI4RTY1OUVGODJENjBFQworOjEwMkI0MDAwMTA4QTE4OUQxNzY4RDcyOUMwRDA5REE5MkMyMjE4MkI1MAorOjEwMkI1MDAwMjIxMzlDQUI5QkFBOTdBNThFNjY3RTczMDI2MDAwOTc5QQorOjEwMkI2MDAwQ0Y1ODYwMDAxRkRBMjA4QjE2NTgwRkUxNjVBMTM4NjMzQgorOjEwMkI3MDAwRkZCREMwODFDMDkwOEYxOEMwQTI5QUY5OTlGQjk4RkE0NgorOjEwMkI4MDAwOTdGNTYzRkZEMkRCMzBEQTIwREM0MDU4MEY4NUMwNTE2NworOjEwMkI5MDAwRDZBMEMwQzAyQkEwMTAyQ0E0MDM5QjE3MkMxMjA4MDI5NworOjEwMkJBMDAwMkEwMjA2NkIwMkRGNzAyRDYwMDM4RTE3OUQxNDlFMTBBMworOjEwMkJCMDAwMENERDExQzBFMEFENkQyRERDMjA1ODAxMTg4QzE0OEI5QworOjEwMkJDMDAwMTZBQ0FDMkM2NDAzOEEyNjg5MjlBQkFBMEE5OTBDOUEwNAorOjEwMkJEMDAwMjY4ODY2MDkwOTQ4MjkyNTI1MDc4ODBDOTg2NjJGMjIyQQorOjEwMkJFMDAwMThBN0ZGMkYyNjE4NjNGRTk2REEyMERCMzBEQzQwRERDNQorOjEwMkJGMDAwNTA1ODEwODNEMkEwRDEwRkMwMzAyQzIwNjY4OTYxQjEwQgorOjEwMkMwMDAwQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MDAwRDJDMDMwMDk4MgorOjEwMkMxMDAwRkQ1MDY1RDBDQThFNjc2NEUwNjk2NDcwNjZEQjYwOENDNQorOjEwMkMyMDAwMThERjcwREEyMDJENjAwMzhFMTcwQ0REMTE5RTEwQURCOQorOjEwMkMzMDAwNkQyRERDMjAxRUU3ODQ1ODAwRjkyMzI2MThEQTIwOEIzRQorOjEwMkM0MDAwMTZEQzQwMkYyMjEzREQ1MEIxRkYyRjI2MTM1ODBGMjQxRQorOjEwMkM1MDAwRDJBMEQxMEYwMDI4MjAzRDA4NDg0MDY1OERFNzZGOTUzMAorOjEwMkM2MDAwM0VEQTMwOERCNTZEOTkwQzhDQTgwQzhDMTRDQUNGN0NEMworOjEwMkM3MDAwRDMyRDJBQUMxMEMwOTAyOTI0NjcwOTBENDc2NEREQzUwNworOjEwMkM4MDAwNjAwMDkyMDAyQzEyMDgwNjZCMDIyRDZDMjAwNzdGMDI1OAorOjEwMkM5MDAwOEUxN0RBMjA5RTEwMUVFNzZCNTgwMDdENjNGRjlBMDBBNgorOjEwMkNBMDAwQzA5MTYzRkZEMTAwMDAwMDY1NTA4MURBMjBEQjYwREM1OQorOjEwMkNCMDAwNDA1ODBGM0JDMDIwQzBGMDJGQTQwM0QxMEZEQTIwQzAzMgorOjEwMkNDMDAwQjY1ODBGQzk2M0ZGRTAwMDAwNkY5NTAyNjNGRDZDREEzMAorOjEwMkNEMDAwMjBEQjMwREM0MERENTBDNEUwNTgwRUJDRDJBMEQxMEY2OAorOjEwMkNFMDAwOEExNTJCMjEwNDU4MEU1QjIzMjQ2NjI4NjAxMDk4MTc0MAorOjEwMkNGMDAwNjNGRjIxMDBEQTIwNTgwRkJDNjNGRkFCQzg1OERCMzBGQworOjEwMkQwMDAwREEyMDU4MEVBMTJBMjEwMjY1QUY5Q0MwOTQwOUE5MDJCRAorOjEwMkQxMDAwMjkyNTAyNjNGRjkxREIzMERDNDBERDUwQzBBMzJFMEE4MQorOjEwMkQyMDAwODAyQTI0NjhEQTIwNTgwRUE5RDJBMEQxMEZDMDIwRDE2MQorOjEwMkQzMDAwMEZEQTIwMkIyMDBDNTgwRkM1NjNGRjZCNkMxMDA0Mjg5MgorOjEwMkQ0MDAwMjAwNkMwNjIyODhDRjg2NTgxMjVDMDUwQzdERjJCMjI4MQorOjEwMkQ1MDAwMUJDMEUxMkEyMDZCMjkyMTIzMDBBMTA0QjA5OTI5MjU1OQorOjEwMkQ2MDAwMjNCMUFBMDBFQzFBMEJDNDAxMEEwQTQ0MkEyNDZCMDRGQQorOjEwMkQ3MDAwRTQzOTBEQ0MwMzBDQkIwMTJCMjYxQjY0NDA2OTI5MjBEMAorOjEwMkQ4MDAwMEMxQkU3MEIwQzlBMTEwQkFBMDgyRkEyODYxQkU3MDk1NAorOjEwMkQ5MDAwNkZGOTAyNjAwMEI2MEI5QjBBMkJCMkEzNjhCMDA4MkMzNworOjEwMkRBMDAwMjIwMDBCQ0MwQzY1QzBBNDJCQTI4NTFERTcyRDY0QjBCRQorOjEwMkRCMDAwOUI4QzJCMjQyMTA0MERDQzAyOUNCMDg4MjBDMEM1MDgxQworOjEwMkRDMDAwODgxMTBDODgwMjk4QjE4ODJBMDg0NDExOThCNDhGMzQ2RAorOjEwMkREMDAwOTRCNzlGQjVDMDQwMUVFNkZFMkRBMjg1MEU5RTA4MjUyNQorOjEwMkRFMDAwRTRDRjJEREMyODJEQTY4NTI5MjEwMjA5MDk0QzY4OTQwMQorOjEwMkRGMDAwMUE2ODk4MjBDOTQwMkEyMTAyNjVBMDBCMkEyMjFFMkI5RQorOjEwMkUwMDAwMjIxRDdBQjEwMjY1QTA3OUMwMjBEMTBGMkMyMTIzNjU0MworOjEwMkUxMDAwQ0ZERTYwMDAwODJFMjEyMTJEMjEyMzdFREJENTJCMjI0MQorOjEwMkUyMDAwMUUyRjIyMUQyNTI1MDI3QkY5MDFDMEIwNjRCRkM0MTNFQgorOjEwMkUzMDAwRTZERjJDQjAwNzI4QjAwMERBMjAwMzg4MEEyODgyNEM4RAorOjEwMkU0MDAwQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZGQTYyQTJDNzQxRQorOjEwMkU1MDAwQzBCMDJDMEEwMjU4MEQ5NTFDRTcwMzlDQTA4QjIwMDhEQgorOjEwMkU2MDAwQkIxMTA2QkIwMjlCQTE4OTM0OTlBMjYzRkY3OTAwMDBDNAorOjEwMkU3MDAwMjYyNDY4REEyMERCMzBEQzQwREQ1MDU4MEZFMUQyQTA5OAorOjEwMkU4MDAwRDEwRkRBMjAyQjIwMEM1ODBGNThDMDIwRDEwRjAwMDA5MgorOjEwMkU5MDAwNkMxMDA2MDczRDE0QzA4MERDMzBEQjQwREEyMEMwNDdGMAorOjEwMkVBMDAwQzAyMTIzQkMzMDAzMjgzODA4MDg0Mjc3NDAwMUIxREQzNworOjEwMkVCMDAwNjQ4MTVBMUVFNkJCMTlFNkJDMjlFNjdFRDMwRjZEREFBMworOjEwMkVDMDAwMDUwMDUwODgwMDMwOENDMEUwQzAyMDI1QTAzQzE0RTZFRQorOjEwMkVEMDAwQkFCNkQzOEZDMEMwRDAwRjg3MTQyNDQwMjIwRjg5NDBDOAorOjEwMkVFMDAwOTQxMDc3RjcwNEMwODEwNDgyMzhDMEYxMEIyODEwQzAxOQorOjEwMkVGMDAwNDRDMDIyMDQ1NDAxMDRGRDM4MDI1MjAxMDJGRTM4MDg4NQorOjEwMkYwMDAwREQxMDgyMUMwN0VFMTAwRTZFMDIwRUREMDIyNDJDRkU3OAorOjEwMkYxMDAwQzBFMDA0RkUzODBBRUUxMDBFODgwMjBEODgwMjhEQUI2OAorOjEwMkYyMDAwMUVFNkFBMDhEODAyMEU4ODAyOThCMEMwRTgwNDI4MTA0RAorOjEwMkYzMDAwMEU1RTAxODRBMDI1QTEyNTA4NDQxMTA4NDQwMjA1MjU0MAorOjEwMkY0MDAwMTQwNDU1MTEwNDM0MDJDMDgxMEU4RTM5OTRCMThGQUEzNQorOjEwMkY1MDAwODQxMDlGQjQ3NTY2MEMyNkExMUZDMEYyMDYyNjE0NjA2QgorOjEwMkY2MDAwMDAwOTAwMDAyNkExMjBDMEYyMDYyNjE0MDU2NTAyMEYwNAorOjEwMkY3MDAwNzcwMTA3ODczOTA1RTYxMDA3NzgxMDA4NjYwMjA2NTVCRAorOjEwMkY4MDAwMDI5NUI2MjVBMTA0MEFFNjExMDg1ODExMDgyODAyMDg3RQorOjEwMkY5MDAwNjYwMjk2QjdDMDYwNjQ0MDU2NjQ5MDUzMDY3RTExQzBDNgorOjEwMkZBMDAwRjQ4OUMyODhDMzBCMzQwQjk2NDU5ODQ3OTk0NjE4RTZCNgorOjEwMkZCMDAwOTE5RjQxMDQ1OTExMEU5OTAyMUZFNjhGMDIwRTQ3MDg5NgorOjEwMkZDMDAwRDgwMjk4NDIwRTk5MDI5RjQwQzFFMDBFOTkwMjk5NDQ5RQorOjEwMkZEMDAwMkZBMDBDQjQzODBDRjkxMTE0RTY3RTFFRTY3NUE0RkY4MAorOjEwMkZFMDAwQUU5OTJFOTI4NTI2RjRDRjBFODgwQjI4OTY4NUQxMEZBOAorOjEwMkZGMDAwMkJBMDBDMUZFNjZGMUNFNjc2MENCRTExQUNCQkFGRUUyRgorOjEwMzAwMDAwMkRFMjg1MjZCNENGMEQzRDBCMkRFNjg1RDEwRkMwODA3NgorOjEwMzAxMDAwMDUyODM4Nzg0ODAyNjNGRUEyNjNGRTk2NkMxMDA2QzA0RAorOjEwMzAyMDAwQzA2NTcwRjE4ODMwQzAzMDA4ODcxNDc3ODcxMkMwQjA0RgorOjEwMzAzMDAwQzBBNjE5RTY2MTI5OTAyMkMwMzBDQzk3QzAzMTYwMDA0QgorOjEwMzA0MDAwMDNDMEIwQzBBNkMwRTBDMDkxQzBENEMwODIyNTIwM0M1RgorOjEwMzA1MDAwMEIzRjEwOTcxMjgzMUNDMDcwMDg1ODAxMEQ1RDAxMDhDQQorOjEwMzA2MDAwOTczOEMwODAwQjk4MzgwNzc3MTAwNDg4MTAwODY4MDJEQQorOjEwMzA3MDAwMDg3NzAyQzA4MDBEOTgzODJEM0NGRTA4ODgxMDBEOUUwMAorOjEwMzA4MDAwMzg4RDJCMEFFRTEwMDhFRTAyMDdFRTAyMENCODEwMEY3NgorOjEwMzA5MDAwREQwMjA1M0I0MDBFREQwMjlENDA4OTIwMDQzRDEwMDgwNQorOjEwMzBBMDAwOTkxMTBEOTkwMjJEMjEwNDA5QTkwMjA4REQxMTk5NDFGOAorOjEwMzBCMDAwODcyQTA1QjkxMDBEM0QwMjBBQkIxMTBEQkIwMjA4NzcyNgorOjEwMzBDMDAwMDI5NzQ0MjgyMTI1ODcxMjA4MjgxNDA0ODgxMTA3MUUxNgorOjEwMzBEMDAwNDAwN0VFMTAwRTk5MDI3NTY2MDkyNjIxMUYwNjI2MTQ3OAorOjEwMzBFMDAwNjAwMDA2MDAyNjIxMjAwNjI2MTQwODY4MDI5QjQ3MDk3NgorOjEwMzBGMDAwODgwMjk4NDYyOTIwMENEMkMwQzA4MDBDOUUxMTFCRTY4NQorOjEwMzEwMDAwMzQxRkU2MkJBQjk5QUZFRTJERTI4NTI4OTRDRjBEQURBMQorOjEwMzExMDAwMEIyREU2ODVEMTBGREQ0MEMwQTZDMEIwOEU1MUNBRTBCMAorOjEwMzEyMDAwQjJBQUIxQkIyRERDMTA4RjUwMEU3ODM2OTgxMDA4NzdGQworOjEwMzEzMDAwMEM5RkQ4OThEOTg5NTM4RjUyOTkxMTk5REI5RkRBN0VDOQorOjEwMzE0MDAwODMwOUIxQ0MyNTVDMTBDOTc3NjNGRkNGODgxMDhEMTEzRQorOjEwMzE1MDAwMDhFNzBDOTc1MUFEOEREN0YwNzhEQjAxQjFGNzlENTM5RgorOjEwMzE2MDAwOTc1Mjg4MzBDMDMwMDg4NzE0MDg4ODQwNjQ4RUQ1NjUyRgorOjEwMzE3MDAwQkVDOTYzRkVCQzAwMDAwMDZDMTAwNEQ3MjBCMDNBODhDMgorOjEwMzE4MDAwMjBDMDMwODIyMUNBQTA3NDJCMUUyOTcyMDQ2RDA4MEY0MgorOjEwMzE5MDAwQzk4MEM5OTE4NTc1QjEzM0EyNTI3QTNCMEI3NDJCMDg1MworOjEwMzFBMDAwNjNGRkU5MDA2NDlGRUNEMTBGRDI0MEQxMEYwMDAwMDAxMworOjEwMzFCMDAwNkMxMDA4RDYzMEMwNzA5NTE1REE0MDhFMzkxNEU1RkVEMworOjEwMzFDMDAwOUExNDY0RTAwMjY0NTFGQzI5MjAwNjJBOUNGODY1QTI0NgorOjEwMzFEMDAwNUYyQTIxMDIwQTBCNEM2NUIyMUYyQzMyMDAxNUU1RjQ2MAorOjEwMzFFMDAwNzRDNzA1MkQyMTIzNjVEMzI0MkU1MjlFMUFFNUYwNkY1NgorOjEwMzFGMDAwRTgwMjYwMDIxQjJBQTIyNjY4QTAwODJCMjIwMDBBQkI1NAorOjEwMzIwMDAwMEM2NUIyMEMyRTUyOUQxREU1RUI2NEUyMDM4QjM4NjQxNQorOjEwMzIxMDAwQjIyRDlFMTZDOEJDOEQ2OTFFRTVFODY0RDAwNTJFRTA2RgorOjEwMzIyMDAwMjE3QkVCNDkyRTIwMEMxOEU1RTIwQ0VGMTFBOEZGMjlCOQorOjEwMzIzMDAwRjI4NkMxODY3OThCNEExN0U1REYwN0U3MEEyNzcyQTM3MgorOjEwMzI0MDAwNjg3MDA0ODgyMDc3ODkzOTI1RjI4NTY0NTJBMjI3MjE4NQorOjEwMzI1MDAwMkUwN0I3MzYwN0I5MEM2RjlEMDFEN0IwODk2OTZFOTJGQQorOjEwMzI2MDAwNDIyODIwM0Q3Qjg3M0M4QTE1Q0RBRjYwMDAxOEMxQjI1MworOjEwMzI3MDAwOEMyMDJBMjAwQzU4MEU5MEQ1QTA2NEEyQUM4QjY4NjNEOQorOjEwMzI4MDAwRkZDQkMwNTA2M0ZGQzNDMEUwNjAwMDAyMkU2MDAzMEU5RQorOjEwMzI5MDAwOUIwQzZFQjIwRURDNzAwQ0VBMTFBQTZBMkFBQzI4NUI5OQorOjEwMzJBMDAwRkZCNkQ3QTBEQTIwREI3MEMxQzQyRDIxMUY1ODBFMzgxRAorOjEwMzJCMDAwOEMyNjhCMjdENEEwMENCQjBDN0FCMzI1OEE2M0MwOTBENAorOjEwMzJDMDAwOUE1Mzg4NjI5OTU4OTg1MjhGNjU5RjU5OEU2NzlFNUI3MgorOjEwMzJEMDAwOEQ2Njk3NTU5RDVBOEI2ODdCN0I3NDhCMTVDRUIzNjAzQQorOjEwMzJFMDAwMDAwRERBMjBEQjQwNTgwRTAyNjVBMTBENjNGRkNDMDAxMworOjEwMzJGMDAwREEyMERCMzA4QzE0NTgwREFBRDZBMEMwQzBDMEQxOURGNgorOjEwMzMwMDAwMTUyQ0E0MDNEQTIwREI2MERGNzBEQzUwQzBFMDI1NjAwMAorOjEwMzMxMDAwMDM5RTEwMUVFNUMxMEM1RDExQUQ2RDJEREMyODVCRkYxOQorOjEwMzMyMDAwM0Y4RTY2QTVBODhGNjcyODY0MDNBRjdGNzdGQjAxQjE0NgorOjEwMzMzMDAwRUU5RTY2OUY2NzhEMjY4QzI5QTRERDBEQ0MwQzlEMjYwNAorOjEwMzM0MDAwOEI2ODBDMEM0ODJDMjUyNTA3QkIwQzlCNjg2M0ZFQzNCRgorOjEwMzM1MDAwMkMyMDY2ODk2MUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDIwOQorOjEwMzM2MDAwNjAwMEI4MDlGRDUwNjVEMEIyQ0JCRjhFNjlDQkVCREJGNgorOjEwMzM3MDAwNjBEQzUwREY3MERBMjAxRUU1QkMyRDYwMDNDMDgwOTg1MQorOjEwMzM4MDAwMTAwQ0REMTFBRDZEMkREQzI4NUJGRjI0OEIxNUM5NDJCRgorOjEwMzM5MDAwOEEyNjI5MjIwOTA0QUEwODJBMjYwNjBBOTkwQzA5MDk1QworOjEwMzNBMDAwNDgyOTI1MjU2NUIxM0NDMDIwRDEwRjAwREI2MDJENkM3QworOjEwMzNCMDAwMjhERjcwREEyMEMwQzAxRUU1QUM5QzEwREM1MDVCRkUzQworOjEwMzNDMDAwQjQ2M0ZGQzcwMDJEMjAzRDBENEQ0MDY1RERGOTZGRTU2RAorOjEwMzNEMDAwMjJEQTMwOEY0NTZERTkwQzhFQUEwRThFMTRDOUUzN0U3OQorOjEwMzNFMDAwRjMxMTJBQUMxMEMwOTAyOTI0NjcwOTBGNDc2NEZERDc1OAorOjEwMzNGMDAwNjAwMTQxMDBDMDkxNjNGRkVEMDA4ODE1NjU4MTRDREFFMgorOjEwMzQwMDAwMjBEQjYwOEMxNDU4MEQ2NkMwMjBDMDkwMjlBNDAzRDEyNQorOjEwMzQxMDAwMEZEQTIwQzBCNjU4MERGNDYzRkZERTAwOEExNjJCMjFBOAorOjEwMzQyMDAwMDQ1ODBDOENDMEEwMkEyNDY2OEI2ODYzRkYzQTAwMDAwNQorOjEwMzQzMDAwMDAyQjlDRjk2NUIwQzVEQTIwNTgwQzkxNjNGRDkxMDAxMgorOjEwMzQ0MDAwMkIyMDBDMENCQTExQTVBQTJGQTI4NkMxQzI3RkMzMDJFMQorOjEwMzQ1MDAwNjAwMEZDMERCOTBBMjk5MkEzNjg5MDA3OEMyMDA5Q0M2MgorOjEwMzQ2MDAwMEM2NUMwRUIyNkEyODU2NDYwRTUyQzIwNjY4OTMxQjEyRAorOjEwMzQ3MDAwQ0MwQzBDNDcyQzI0NjY2RkM2MDI3MDk2MEFEQUUwMkIzRgorOjEwMzQ4MDAwMjEwNDU4MEM3NDI3MjQ2Njg5MzA3Nzk3NEIxOEU1NTkyNgorOjEwMzQ5MDAwMURFNTVBOEEzMjhCMzNDMEY0MkMyMTA0MDk5RTQwMDY2NAorOjEwMzRBMDAwRUUxMTA0Q0MxMTBFQ0MwMjlGNjFDMUUwMEVDQzAyOUQ0NgorOjEwMzRCMDAwNjA4RjJCOUE2NjlCNjc5QzY0OTc2NTA4RkYwMjlGNjJFQQorOjEwMzRDMDAwMkYyMDBDMThFNTQzMENGRTExQTVFRTJERTI4NUE4RkY3OAorOjEwMzREMDAwMjdGNENGMkREQzIwMkRFNjg1OEYxNTY1RjA5MUMwMjBENworOjEwMzRFMDAwRDEwRjAwMDAyQTJDNzQ4QjE0NTgwNjQzRDJBMEQxMEZBMAorOjEwMzRGMDAwMDBEQTIwREJFMDU4MERCQzYzRkVGRTAwMDBEQTIwREJDMgorOjEwMzUwMDAwMzA4QzE0OEQxNTU4MEUzRUQyQTBEMTBGMDAwMDg4MTVCNgorOjEwMzUxMDAwQzg4OERBMjBEQjMwNTgwQzlDMkEyMTAyNjVBRURBQzA1QworOjEwMzUyMDAwOTQwOUE5MDIyOTI1MDI2M0ZFQ0ZEQTIwMkIyMDBDNTgyQQorOjEwMzUzMDAwMERDNzYzRkVDNDI3MjQ2OERBMjBEQjMwMkMxMjA0MkQ2QgorOjEwMzU0MDAwMTIwNTJFMEE4MDU4MENBMTYzRkM3QzAwQzAyMEQxMEYwQworOjEwMzU1MDAwREEyMDU4MERBNThBMTVDREExREEyMDAzM0IwMjJDMTJFMgorOjEwMzU2MDAwMDQ1ODBEMEYyN0E0MDNDMDIwRDEwRjAwQzAyMEQxMEY5NQorOjEwMzU3MDAwMkEyQzc0OEIxNDU4MDYyMEQyQTBEMTBGNkMxMDBDMjg2MgorOjEwMzU4MDAwMjEwMjk0MTAwODA4NEM2NTgzNjIxRkU1MDkyOUYyOUUwOAorOjEwMzU5MDAwNkY5ODAyNjAwMzY2MURFNTA1MjlEMjI2Njg5MDA4MkEwNworOjEwMzVBMDAwMjIwMDA5QUEwQzY1QTM1NDJDRjI5RDY0QzM0RTJCMjA2MworOjEwMzVCMDAwMEMwQ0I2MTFBRjY2Mjg2Mjg2QzFFQzc4RTMwMjYwMDM5QQorOjEwMzVDMDAwNDYxOUU0RkMwOUI5MEEyOTkyQTM2ODkwMDc4QTIwMDlFMAorOjEwMzVEMDAwQUEwQzY1QTMzMjI0NjI4NTY0NDMyQ0MwRTEyQTMxMDkxOAorOjEwMzVFMDAwQzA3MDI3MjQ2Njg5MzU5QTExOTkyQTg4MzY5OTEyOThDRAorOjEwMzVGMDAwMkI4OTM3OTgxMzk5MkM4ODM4OTkxNDA4NTgxNDk4MTVFMgorOjEwMzYwMDAwOTgyRDg5MzkyQTI1MDQyRTI1MUQyOTI1MUMyODMwMjg4NgorOjEwMzYxMDAwQzA5MjI4MjQzQzJBMzAyOTA4MDg0Nzk4MTYwOTg5MDFCNQorOjEwMzYyMDAwMkEyNDNEMkEzMTE1OTkxNzBBMDk0MTA5QTkwQzI5OUMxOAorOjEwMzYzMDAwRUMyOTI1MUY3RTg3MTkyRDJBMDAwREEwNjAwMDA4M0U2OQorOjEwMzY0MDAwMDEwQTNFQjFBRDA4REEzOTBFQUExMTBBOTkwQzI5MjVGMgorOjEwMzY1MDAwMUYyQTIxMUYxOEU1MDYwQTgxNjBDMUQwOTQxQTk1MUIwNAorOjEwMzY2MDAwMDEwODNFMDAwNTNFQjE4NDA1NDgzOTg0M0MyNTlDRkM5OAorOjEwMzY3MDAwMEQ4ODM2MjkyMDE0MDhBQTFDOEQzRDI3MjYxODJFMjZEMQorOjEwMzY4MDAwMTMyRTI2MTQyRTI2MTUyNzI2MUIyRTI0NkIyNzI0Njc3RgorOjEwMzY5MDAwMjcyNDY4MDg1ODFDMDkwOTQzMjkyNDE0MjkzMjExMkFBRgorOjEwMzZBMDAwMjUyRTI4MjUyRjI3MjUyNDI3MjUyNTI3MjUyQzI3MjVBNgorOjEwMzZCMDAwMjMyNTI1MjAyNDI1MjEyRDI1MjI4NDFBMkQyMTFDODUxMgorOjEwMzZDMDAwMUI2RkQyMDI2MDAyMDlDMEEwOTkxODZEMDgwQUIxQUE0NgorOjEwMzZEMDAwMDBBMTA0MDBFOTFBN0Q5QjAyNjNGRkVFODkxOEMwODBGNworOjEwMzZFMDAwQzBFMUMwNzBDMEQyOUIxRDk1MUI5NjFDOUMxRTE2RTRBOQorOjEwMzZGMDAwRDEyQzIwM0QxNUU0RTAwQzBCNDAwRENDMDEwQkU3MzgzQworOjEwMzcwMDAwMURFNEMzMEE3NzEwMENFODM4MEI4ODEwQzBDNDlDNDEzNAorOjEwMzcxMDAwMDg3NzAyOUQ0MEIwQTgwOTg4MTE4QjIwOUM0OTlENDhEQworOjEwMzcyMDAwOTU0Qjk2NDMwODc3MDI4NjE0MThFNEQxMTVFNEI5MDgzRQorOjEwMzczMDAwNzcwMjA1QkIwMjlCNEE5QjQyOTc0Njg4MTI4NzExMDg3NQorOjEwMzc0MDAwREExNDlBNEUwRDg4MTAwRDc3MTEwODc3MDIxQUU0QUMzRQorOjEwMzc1MDAwMDZEODE0MEQ2NjEwMDg3NzAyOTc0RkM3OEY5ODREOThCQQorOjEwMzc2MDAwNEM5ODQ1ODcxNTk4NDQwNzE1MTQwRDU1MTEwQTU1MDJCNAorOjEwMzc3MDAwOTU0NzE1RTRDMThBMjYyRDQ2MTAyRDQ2MTgyRDQ2MjA2MgorOjEwMzc4MDAwMkM0NjExMkM0NjE5MkM0NjIxMkI0NjEyMkI0NjFBMjg2MgorOjEwMzc5MDAwNDYxNDI4NDYxNTJCNDYyMjg4MTYyNTQ2MjQyNTQ2MjZGQgorOjEwMzdBMDAwOEIxNzBBMEM0ODA5MEQ0ODg1MTMwRUREMTEwNUNDMTE0NQorOjEwMzdCMDAwMDgzOTQwMEJFQjM5MDI5OTEwMUVFNEIwMERDQzAyMEQxNAorOjEwMzdDMDAwNTUxMTA4MkQ0MDA2NTUwMjJFNDYxMzE2RTQ3QjBGREREOQorOjEwMzdEMDAwMTEyNTQ2MTYwODA4NDA4NTFCMDE4ODEwMERCQjAyODY3RQorOjEwMzdFMDAwNjcxREU0QTcwOTg4MDIwQ0JCMDIxOUU0NzcxQ0U0QTU1NQorOjEwMzdGMDAwMkI0NjE3MkQ0NjFCQTc2NjFCRTRBNEMwNzAyQzQ2MUM0NQorOjEwMzgwMDAwMDk4ODAyOEMxRTI4NDYxRTJCNDYyM0MwOTA4QjFEMjkzQQorOjEwMzgxMDAwNDYxRDI5NDYxRjE4RTQ5RDI5NDYyNzI4NDYyNTI5MzE5QgorOjEwMzgyMDAwMTYyRTIwMDYyOTI0NkEyNDMxMTc5NjJEMjQyNTIzODY1NgorOjEwMzgzMDAwMUNDQ0UxMjcyNDA3QzBENzA5MEU0MDY0RTA4MjlBMjlGNgorOjEwMzg0MDAwMDkyODQxNjQ4MDkxNjQ0MDlCMkQyNDA2QzA5ODA5NDk1MQorOjEwMzg1MDAwMzYyODBBQTAyNDYyODUwMUM0MDRBODQ0MjgyMTA0MjQyRgorOjEwMzg2MDAwNjY4NTA4ODgxMThFM0Y4QTNFMkQzMjEwMEVBNDE4MDBGRQorOjEwMzg3MDAwQzQwNDBFQUUxODAwRUUxMTBBQ0E1MzBFREQwMkMwRTNGNgorOjEwMzg4MDAwMEU4ODAyOThDMTFFRTQ4MjA5MDg0RTlFQzA4RTIwOTRDNAorOjEwMzg5MDAwQzM5OEM1OURDNDE4RTQ0RTFERTQ3RjA1RUUxMTBFQUEyMQorOjEwMzhBMDAwMDIwREFBMDJBOEI4Mjc4NENGOUFDMjFFRTQ0MDI0RjJDRgorOjEwMzhCMDAwOUQyN0U0QTIyNDRDMTgyNEY2OUQ2NTUwNTJDMDIwRDFDNworOjEwMzhDMDAwMEYyRDI0MDZDMEEwQzA5ODA5NDkzNjA0QTkzODYzRkYwQgorOjEwMzhEMDAwN0ZDMEEwNjNGRTA3MDAwMDY1NEY2REMwOThDMEE4MkE5NgorOjEwMzhFMDAwMjQwNjYzRkY2QjJEMjQwNkMwOTA2M0ZGNjNDQzU3REE3OAorOjEwMzhGMDAwMjBEQjMwOEMxMDU4MEMyQUMwMjBEMTBGMDBEQTIwQzBGOQorOjEwMzkwMDAwQjY1ODBDQjk2M0ZGRTUwMERBMjA1ODBDQjc2M0ZGREM0QQorOjEwMzkxMDAwMkEyQzc0OEIxMDU4MDUzOEQyQTBEMTBGNkMxMDA2MjhCMQorOjEwMzkyMDAwMjAwNjhBMzM2RjgyMDI2MDAxNjFDMDUwMTNFNDIwMjlBRgorOjEwMzkzMDAwMjEwMjE2RTQxRjY5OTIwNDI1MjUwMkQ5NTAyQzIwMTU3NgorOjEwMzk0MDAwOUEyODE0RTQxRDhGMjYyNzIwMEIwQUZFMEMwNDc3MDkwMQorOjEwMzk1MDAwMkI3MTFDNjRFMTM5OEU0MjhENDM2RkJDMDI2MDAxNkY5NAorOjEwMzk2MDAwMDBFMTA0QjBDODAwODgxQTA4QTgwODA4RDgwMjk4MjdGRgorOjEwMzk3MDAwMkIyMDA2NjhCMzJFQ0U5NzJCMjIxRTJDMjIxRDAxMTE2MAorOjEwMzk4MDAwMDI3QkM5MDFDMEIwNjRCMDE3MkNCMDA3MjhCMDAwREFDMAorOjEwMzk5MDAwMjAwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZEMQorOjEwMzlBMDAwRTdDMDIwRDEwRjJEMjA2NDY0REZDQThCMjlDMEYxMEI0MgorOjEwMzlCMDAwQUIwQzY2QkZDMDJCMjAwQzBDQkMxMUE2Q0MyOEMyODY1OQorOjEwMzlDMDAwMkUwQTA4NzhFQjYxMUVFM0ZCMEVCRTBBMkVFMkEzNjgwNgorOjEwMzlEMDAwRTAwNTI4MjIwMDdFODk0RjI5QzI4NTFFRTQwNzY0OTBGNQorOjEwMzlFMDAwNDYxRkU0MTU5RTkwQzA4NDk4OTEyODIwMEE5NTkzMEY1NQorOjEwMzlGMDAwODgwMjk4OTI4RTIwMEZFRTAyOUU5NDJGMjAwNzg4MjYzMAorOjEwM0EwMDAwMkY5NTBBOTg5NjlBOTcyRTIwMDYyNTI0MDc2OEUzNDM1NworOjEwM0ExMDAwMjkyMTAyMkFDMjg1MURFM0VFMkFBQzIwQURCRDI1RDRBMgorOjEwM0EyMDAwQ0YyQUM2ODU2M0ZGNEUwMDJFMjA2NUNCRURDMDgyMjhDRAorOjEwM0EzMDAwMjQ2NUM5RjYwNUU0MzEwMDAyMDAyQTYyODIxQkUzRjcxRgorOjEwM0E0MDAwMjk0MTAyMEJBQTAyMkE2NjgyMDlFNDMxMjkyMTAyNjM3NAorOjEwM0E1MDAwRkYyMzAwMDA2NERGQjg4RjQyMkUyMDE2MDBGMTA0MEQxMgorOjEwM0E2MDAwRUUwQzAwRUUxQUFFQUU5RTI5NjNGRkEzOEEyMDJCMzIyNQorOjEwM0E3MDAwMjFCMUFBOUFCMDI5MzIyMTI4MzIyM0I0OTkyOTM2MjFCQQorOjEwM0E4MDAwNzk4OUE5MkIzMjIyMkIzNjIxNjNGRkEwQzAyMEQxMEZDOAorOjEwM0E5MDAwOUYyNzI1MjQxNUFDQjgyODc1MUMyQjIwMDZDMEMxMkVFNQorOjEwM0FBMDAwQkNGRTY0RTBBQjY4Qjc3NzJEQkNGRDY1REVDNzJEMjA5QQorOjEwM0FCMDAwNjRDMEYwNjREMDg2OEUyOTBFQUUwQzY2RTA4OUMwRjEzOQorOjEwM0FDMDAwMjgyMDVBMjg4Q0ZFMDhDRjM4NjVGRUU4NjNGRjU4MDA4RQorOjEwM0FEMDAwMDBFMDA0OTMxMEMwODEwQUYzMEMwMzgzMzlDNzhGMDhGOAorOjEwM0FFMDAwRDgwMzA4QTgwMTA4RjgwQzA4MDgxOUE4MzMwM0M4MEM2MworOjEwM0FGMDAwQThCODI4NzUxQzAzMEI0NzJCMjQxNTgzMTBDQkI3MDBERgorOjEwM0IwMDAwRTEwNEIwQkMwMENDMUFBQ0FDMENEQzAyOUMyNzY1OUU3NgorOjEwM0IxMDAwNUVDMEIyMEI5OTAyMDkwOTRGMjkyNTAyNjNGRTUwMDBDRAorOjEwM0IyMDAwMkQyMDZBMEQyRDQxNjVERjdFREEyMEMwQjA1ODBDNzU1RQorOjEwM0IzMDAwNjRBRjE4QzBGMTYzRkVFRjlGMjc2M0ZGRDAyRTIyMUZGMgorOjEwM0I0MDAwNjVFRTMyNjNGRjc5MDAwMDI4MjIxRjY1OEUyNzYzRkYzMAorOjEwM0I1MDAwNkUyNTI0MDYyNTI1MDJDMDkwNjNGRTE5NkMxMDA2NjVBQgorOjEwM0I2MDAwNzEzMzJCNEMxOEMwQzcyOTNDMThDMEExQzA4MDA5QThDQworOjEwM0I3MDAwMzgwODA4NDI2NDgxMTAxQ0UzOEExQUUzOEIyQUM2N0U0NworOjEwM0I4MDAwMkE1Q0ZERDMwRjZEQUEwNTAwQjA4ODAwOTA4Qzg5NDA5NworOjEwM0I5MDAwQzBBMDA5ODg0NzFGRTNCNDA4MEI0NzA5NEM1MDA5MEQyMgorOjEwM0JBMDAwNTMwNEREMTBCNENDMDRDQzEwMEQ1RDAyOUQzMTBDQkI3MAorOjEwM0JCMDAwMDI5QjMwODg0MzhFMjA5ODM1MEZFRTAyOUUzMjhEMjY3MAorOjEwM0JDMDAwRDg1MEE2REQ5RDI2OEU0MEMwOTAwRTVFNTA2NEUwOTdEMgorOjEwM0JEMDAwMUNFMzlBMUVFMzg5MDM4QjBCQzBGNDlGQjE5RUIwMkRBQQorOjEwM0JFMDAwMjAwQTk5QjMwQ0REMDI5REIyOEYyMDBDRkYwMjlGQjQxNgorOjEwM0JGMDAwOEUyNjJEMjAwNzlFQjY4QzI4MkRCNTBBOUNCNzI5MjQyOQorOjEwM0MwMDAwMDcyRjIwMDYyQjIwNjQ2OUYzMzlDQkI2MURFMzZCMjMwNQorOjEwM0MxMDAwMjAxNjhERDIwQjMzMEMwMEQxMDQwMDMzMUFCNDhEQTNCRgorOjEwM0MyMDAwQzM5MzI5MjIyMDBDMTNFMzZBMUZFMzYxMEMyRTExQUYwQQorOjEwM0MzMDAwRUVBMzIyMjkyNENGMkZFMjg1RDJBMDBGREQwQjJERTZBMworOjEwM0M0MDAwODVEMTBGMDAyRTIwMENCNDhDMENFQjExMUZFMzYxMURFRAorOjEwM0M1MDAwRTM1OEFGRUVBREJCMjJCMjg1MjlFNENGMDJDMjBCMjJGRQorOjEwM0M2MDAwQjY4NUQyQTBEMTBGMDAwMDJFMjAwQzFDRTM1MTFGRTMxQgorOjEwM0M3MDAwNTgwQ0VCMTFBRkVFQUNCQjIyQjI4NTI5RTRDRjAyODIyNworOjEwM0M4MDAwMEIyMkI2ODVEMkEwRDEwRkMwRDAwQkFEMzg3REM4MDJCMworOjEwM0M5MDAwNjNGRUVDNjNGRUUwOEU0MDI3MkM3NDdCRUUxMkRBNzAzQworOjEwM0NBMDAwQzBCMzJDM0MxOERENTA1ODBBN0I4OTQwQzA4MDYzRkVBRAorOjEwM0NCMDAwRTNERTYwREEyMERCMzBEQzQwREQ1MDU4MDAwNTlBMTA4RQorOjEwM0NDMDAwREI1MDA3N0EwMjU4MDQ0Qzg4MTA2M0ZFRjgwMDAwMDBBRAorOjEwM0NEMDAwNkMxMDA2OTIxMjFFRTM0MjhDNDBBRTJEMEM4QzQ3MkVDNworOjEwM0NFMDAwM0MxODA0Q0EwQkQ5QTA3REEzMDIyOUFERjg3NUMzMDIwNAorOjEwM0NGMDAwNjAwMDg0QzBCMEMwMjNDMEEwOUQxMDZEMDg0NEI4OUY3MAorOjEwM0QwMDAwMEVCODBBOEQ5MDBFQjcwQkI4NzcwRDZEMzZBREFBOUQyMworOjEwM0QxMDAwODAwRDY2MENEOEYwMDA4MDg4MDA3MDhDODc5MDY4QjFBOAorOjEwM0QyMDAwMjRCMjIyNzdEMzI3ODg5MUMwRDBDQjg3OTg5MDI3OUM0NAorOjEwM0QzMDAwMTAwMDcwODgwMEYwOEM5RDkxQ0I2RkMwODEwOEJCMDM5MAorOjEwM0Q0MDAwNzVDQjM2NjNGRkI0QjEyMjJFRUMxODYzRkZENDg1OTI5NQorOjEwM0Q1MDAwMEQ3NzBDODY5Mzk3OTBBNkQ2N0Q2QjAxQjE1NTk2OTNGRgorOjEwM0Q2MDAwOTU5MjYwMDAxNkIzQ0MyRDlDMTg4ODEwRDlEMDc4RDNDQQorOjEwM0Q3MDAwQzcyOURERjg2M0ZGQzEwMEMwMjM4QTQyMUJFMzQ3MDA2NworOjEwM0Q4MDAwQ0QzMjJENDQwMjlCMzA5MjMxODk0Mjg1NDM3OUExMDU4MQorOjEwM0Q5MDAwMUVFMzQzMEU1NTAxODcxMjFCRTMzNDg5NzA5NTM1MEJFMgorOjEwM0RBMDAwOTkwMjk5MzI4ODQyMEE4ODBDOTg0Mjg2NzZBNkE2OTY4RAorOjEwM0RCMDAwNzY4RjQ0QUZBRjlGNDREMTBGMDAwMDAwNkMxMDA4OTM4MgorOjEwM0RDMDAwMTFENjMwODgzMEMwOTEwODYzNTEwODA4NDcwNTk4MzhFQgorOjEwM0REMDAwOTgxMjI4MjEwMjI5M0NGRDA4MDg0QzY1ODE2NTY1OTFFRgorOjEwM0RFMDAwNjI4QTYzMEEyQjUwNjVCMThCMEE2RjE0MkUwQUZGN0MxRQorOjEwM0RGMDAwQTYwQTJDMjA1QUNDQzQyRDBBMDIyRDI0NUE3RkUwMDI5OAorOjEwM0UwMDAwNjAwMjE1ODkyODg4MjYxRkUzMjYwOTg4MEM2NTgyMEYyMQorOjEwM0UxMDAwMkUyMDBCMEZFRTBCMkRFMEZFMkVFMEZGMDhERDExMEUyNQorOjEwM0UyMDAwREQwMjFFRTMyMEFFREQxRUUzMjAxQ0UzMjAwRUREMDFEQgorOjEwM0UzMDAwMERDQzM3QzE4MDA4NDgzN0I4OERCNDg4OTgxMDg5NjA5OAorOjEwM0U0MDAwMUFFMkRFN0I5NjIxOEI2MjJBQTAyMTlDMTQ3QkEzMTdBOQorOjEwM0U1MDAwOUQxMzJBMjAwQzhCMTA4QzIwNTgwQjk3OEMxNDhEMTNEQgorOjEwM0U2MDAwREJBMENFQUM2MDAxQzQwMDJFMjAwQzFCRTJEMTBDRUExQQorOjEwM0U3MDAwMTEwQkFBMDgyQkEyODYxRkUyQ0Y3QkRCM0IwRkVGMEFCOAorOjEwM0U4MDAwMkZGMkEzNjhGMDA1MjgyMjAwN0Y4OTJDMkJBMjg1NjRERAorOjEwM0U5MDAwQjBBQTg3NjI4ODI2REU3MDBDNzkzNjA5N0EwQzZGQUQ3RAorOjEwM0VBMDAwMUM4RjI3OUIxNTA4RkYwQzc3RjMxOTdFN0I3MjlEMTNERgorOjEwM0VCMDAwOUMxNDlCMTVDRjU2NjAwMDI1QzBCMDYzRkZEMEQ3OTBFRgorOjEwM0VDMDAwNjNGRkREMDAwMDlEMTM5QzE0REEyMERCNzA1ODBCMDhBMworOjEwM0VEMDAwOEIxNThDMTQ4RDEzNjVBMDZBOEU2MjYzRkZDQzAwREE5QgorOjEwM0VFMDAwMjA4QjExREM0MDU4MEFBRUQ2QTA4QjE1QzA1MURFNzA3NQorOjEwM0VGMDAwREEyMERDNjBERDQwNUJGRjc2OEQxMzhDMTREOUEwMkVCOAorOjEwM0YwMDAwMjAwQzFCRTJBQjFGRTJCMjBDRUExMUFGRUZDMEUwQUIzQQorOjEwM0YxMDAwQUEyQkEyODUyRUY0Q0YwQjk5MEIyOUE2ODU2M0ZGMUQzMgorOjEwM0YyMDAwMDBEQTIwREM2MERENDBERTcwODkxMjI4MjAwN0RGNTBENworOjEwM0YzMDAwQTk4ODI4MjQwNzVCRkYwOUQyQTBEMTBGMDBEQkUwREFCMworOjEwM0Y0MDAwMjA1ODBCMjk2NTUwRUYyQTIwMTQwQTNBNDA2NUEwRUI0RgorOjEwM0Y1MDAwREI2MERDNDBERDMwMDIyQTAyNTgwOTlDRDZBMDY0QTA1OAorOjEwM0Y2MDAwRDU4NEExODNBMDA0MDQ0NzAzMDU0Nzk1MTIwMzYzNTEzOAorOjEwM0Y3MDAwQzA1MTYzRkU1QzJDMjAwNkQzMEYyOENDRkQ2NDgwQTVDNQorOjEwM0Y4MDAwNjhDNzA0QzA5MzI5MjQwNjJDMjAwNkMwQjE4RDY0MUY4NQorOjEwM0Y5MDAwRTI4QTlEMjc5RDI4OUQyOThGRjI5RDI2MDBGMTA0MDAyRAorOjEwM0ZBMDAwQkIxQTAwRjAwNEIwQkUwRUREMDFDMEYwQURCQjhENjVFNAorOjEwM0ZCMDAwMkYyNDA3MEQwRTVFMDFFRTExQUVCQjJFMEFGRUIwQkIyNAorOjEwM0ZDMDAwMEIwQjE5MEVCQjM2QzBFMjBCMEI0NzBFQkIzNzJCMjQ3NQorOjEwM0ZEMDAwMTYxOEUyODIwQTA5NDUwRDBCNDIyQjI0MEIyOTI0MEFFQworOjEwM0ZFMDAwQjRCRTJFMjQwQzdEODg1NzI5MjAxNjJGQ0NGREIwOUQwMQorOjEwM0ZGMDAwMEE1QzUyMERDQzM2MkMyNDY0NjVGREVDMEMwQzQ3NjQzNQorOjEwNDAwMDAwQ0RFNjE4RTI2RDhFMjg4ODgyMEM5RjBDMDA4MTA0MDA5QQorOjEwNDAxMDAwRkYxQUFGRUU5RTI5NjNGRENGMUNFMjlDNjNGRTEzMDBFNgorOjEwNDAyMDAwMUNFMjkzNjNGRTBDOEQ2NTYzRkZBNTAwREEyMDJCMjA1NAorOjEwNDAzMDAwMEM1ODBCMDY2NDVGMEZDMDIwRDEwRjAwQzAyMEQxMEZCOQorOjEwNDA0MDAwQzA5MzI5MjQxNkMwOTM2M0ZGQTAwMDAwNkMxMDA0QzAyNQorOjEwNDA1MDAwNjAxN0UyNTYxREUyNTlDMzgxMjkzMTAxMkEzMDA4MjkyRgorOjEwNDA2MDAwMjQwQTc4QTEwOEMzQjI3QkExNzJEMjYwRDEwRkMwQzE2QgorOjEwNDA3MDAwNjU1MDUxMjYyNTAyMkFEMDIwMkYyMDBCMjkwQUZCMkIyMAorOjEwNDA4MDAwMjAxNDJFMjAxNTI2MjQxNTA5QkIwMTBERkYwOTI4RjE0NworOjEwNDA5MDAwMUMyQjI0MTRBOEVFMkVGNTFDNjRBMEI1MkIyMjFFMjg4MAorOjEwNDBBMDAwMjIxRDAxMTEwMjdCODkwMURCNjA2NEIwMTcyQ0IwMDc2RgorOjEwNDBCMDAwMjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMDA4MworOjEwNDBDMDAwREJBMDY1QUZFN0RCMzBEQzQwREQ1MERBMjA1ODAwRDhGQworOjEwNDBEMDAwMjkyMTAyMDkwQjRDQ0FCMkQyQTBEMTBGMDBDQzVBMkMxNAorOjEwNDBFMDAwMzAwODdCQzEzNzJFRDAyMDY0RTAyRDAyMkEwMjAzM0IyQQorOjEwNDBGMDAwMDJEQzQwREQ1MDU4MDBDRUQyQTBEMTBGMkIyMDE0QjBFRQorOjEwNDEwMDAwQkIyQjI0MTQwQjBGNDE2NEYwODI3Q0I3Q0FDMEMxMENENgorOjEwNDExMDAwOUMwMjJDMjUwMkQyQTBEMTBGQzAyMEQxMEYyRTIwMDY0OAorOjEwNDEyMDAwNjlFMkMxMkYyMTAyMEYwRjRDNjlGMUI4MjYyNDA2MjYzRgorOjEwNDEzMDAwMjUwMjJCMjIxRTI4MjIxRDJBMjAwQjI5MjAxNTBEQUExQworOjEwNDE0MDAwMDkyQ0ExMUMyNjI0MTVBQzk5MjlBNTFDN0I4MTRBNjA0OQorOjEwNDE1MDAwMDA0OUIwQkIyQjI0MTQwQjBENDFDQkQ2N0NCNzAyMkNFRAorOjEwNDE2MDAwMjUwMjJCMjIxRTJFMjIxRDdCRTkwMjJCMEEwMDY0QjBBMQorOjEwNDE3MDAwMTcyQ0IwMDcyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzAyNAorOjEwNDE4MDAwRDEwQjgwMDBEQkEwNjVBRkU3QzAyMEQxMEYyNjI0MDY0RAorOjEwNDE5MDAwRDJBMEQxMEYyNjI0MDY2M0ZGQzdEQjYwMURFMjA3NjRBRgorOjEwNDFBMDAwQkY0MjJDQjAwNzI4QjAwMERBMjAwNzg4MEEyODgyNENDQQorOjEwNDFCMDAwQzBEMTBCODAwMERCQTA2NUFGRTcxREUxRkY2M0ZGMjRFQQorOjEwNDFDMDAwNkMxMDA0MjgyMDA2QzA2NDZGODU2NENBNUIyOTIwMTQyMworOjEwNDFEMDAwN0Q5NzI2REEyMERCMzBEQzQwMDU1RDAyNTgwMDE5Mjk4NgorOjEwNDFFMDAwMjEwMjA5MEE0Q0M4QTNDMDIwRDEwRjAwQzBCMTBCOUIwQgorOjEwNDFGMDAwMDIyQjI1MDJDMDIwRDEwRjAwMDAwMjJBMDIwMzNCMDIzRAorOjEwNDIwMDAwMkMwQTAxNTgwMENBQzlBQURBMjBEQjMwREM0MDU4MDk2MAorOjEwNDIxMDAwRTQyOUEwMTFEM0EwN0U5NzA4MkMwQUZEMEM5QzAxMkM0OAorOjEwNDIyMDAwQTQxMUMwNTEyRDIwMTQwNkREMDIyRDI0MTQ2M0ZGQTIxOQorOjEwNDIzMDAwREEyMERCMzBEQzQwREQ1MEMwRTA1ODA5NjREMkEwRDE4OAorOjEwNDI0MDAwMEYwMDAwMDA2QzEwMDYxNkUxREExQ0UxREE2NTUxM0I0NAorOjEwNDI1MDAwQzBFMTE3RTFENjI4MjEwMjhCMjAwODA4NEM2NTgwN0IzRAorOjEwNDI2MDAwMjkzMjAwMDk2OTUxNjk5MzcyMkE2MjlFNkVBODQ4MkExMAorOjEwNDI3MDAwNzIyNjY4QTAwMjdBQjkzRjJBNjI5REI0NEZDQkE3MkI2MQorOjEwNDI4MDAwMjAwQzBDQkQxMTA2REQwODI4RDI4Njc4RkIxNTBDQkY2QQorOjEwNDI5MDAwMEEyRkYyQTM2OEYwMDQ4ODIwN0Y4OTA3MkREMjg1RDNFNgorOjEwNDJBMDAwMEY2NUQwNjAyQTIxMDQxOUUyMDJEMzBGN0E5QjFEREEzMAorOjEwNDJCMDAwMjA1ODA4NjQ2MDAwMjQwMDJDMjEwNDFCRTFGRDdDQkIxNQorOjEwNDJDMDAwMTNEQTIwQzBCNjU4MDg1RkM5NTM2MDAwRUZEQTIwNThFRgorOjEwNDJEMDAwMEE0NjYwMDAwNkRBMjBDMEI2NTgwQTQzNjU1MERERENBNQorOjEwNDJFMDAwNDBEQjMwOEQzMERBMjAwRDZENTE1ODA4QjhEM0EwNjQxMgorOjEwNDJGMDAwQTBDQTFDRTFCMEMwNTE4NEExOEVBMDA0MDQ0NzBFMEVEOAorOjEwNDMwMDAwNDc2M0ZGNTAwMDJCMjEwNEMwOEM4OTMxQzA3MERGNzBERgorOjEwNDMxMDAwMDlGOTUwMDk4RjM4NkVCODE3MkMyMDY2QUVDQzBDMENGQQorOjEwNDMyMDAwNDcyQzI0NjY3Q0ZCMDk5RDEwNTgwOENBOEQxMDI3MjQ1MQorOjEwNDMzMDAwNjY5NEQxMUVFMUI2QjhEQzlFRDA2NTUwNTZDMEQ3QjhBMQorOjEwNDM0MDAwM0FDMEIxQzBGMDBDQkYzODBGMEY0MkNCRjExOUUxOTQ2NQorOjEwNDM1MDAwMThFMTk2Mjg5NjdFQjA0QkQzMEY2REJBMDUwMEEwODg2MQorOjEwNDM2MDAwMDBDMDhDMkMyMDBDQzAyMDFERTE5QTBDQ0YxMUE2RkZBMAorOjEwNDM3MDAwMkVGMjg1QURDQzI3QzRDRjBFNEUwQjJFRjY4NUQxMEY3NQorOjEwNDM4MDAwQzA4MDBBQjgzODc4RDBDRDYzRkZDMTAwOEUzMDBFMEVFMQorOjEwNDM5MDAwNDc2M0ZFQkQyQTJDNzQyQjBBMDEwNDREMDI1ODA4QkQ0OAorOjEwNDNBMDAwMkYyMDBDMTJFMThCMENGOTExQTY5OUEyRkYyN0Y0Q0Y1NAorOjEwNDNCMDAwMjg5Mjg1RDJBMDA4NDgwQjI4OTY4NUQxMEZDMDIwRDExRAorOjEwNDNDMDAwMEYwMDAwMDA2QzEwMDRDMDYwQ0I1NURCMzBEQzQwMDVGMgorOjEwNDNEMDAwNUQwMjAyMkEwMjVCRkY5QjI5MjEwMjA5MDg0Q0M4ODI2OAorOjEwNDNFMDAwRDJBMEQxMEYyQjIwMTRCMEJCMkIyNDE0MEIwQzQxQ0IyQgorOjEwNDNGMDAwQzU3REI3RUJDMEMxMEM5QzAyMkMyNTAyRDJBMEQxMEYwOQorOjEwNDQwMDAwMDAwMDAyMkEwMjAzM0IwMjA2NkMwMkMwRDBDN0Y3MkU0RQorOjEwNDQxMDAwMjAxNDI4MzEwMTI2MjUwMjI4MjQwQTBGRUUwMTJFMjQxQgorOjEwNDQyMDAwMTQ1ODAxMEQ2M0ZGQTMwMDI2MjQwNkQyQTBEMTBGMDA2QgorOjEwNDQzMDAwNkMxMDA2MjgyMTAyRDYyMDA4MDg0QzY1ODA5RDJCMjA5MAorOjEwNDQ0MDAwMEMxMkUxNUIwQ0I4MTFBMjg4MkE4Mjg2QjU0OTdBOTNENgorOjEwNDQ1MDAwMDI2MDAwOTcxOUUxNTgwOUI5MEEyOTkyQTM2ODkwMDhFNworOjEwNDQ2MDAwMkE2MjAwMDlBQTBDNjVBMDgyMjg4Mjg1MUNFMTYzNjQ4NworOjEwNDQ3MDAwODA3OTlDODBCODg3QjE0QjlCODE5QjEwNjU1MDc0QzAzQworOjEwNDQ4MDAwQTdEOTcwMjgwQTAxQzBEMDA3OEQzODBEMEQ0MkNCREVBOAorOjEwNDQ5MDAwMUZFMTQ0MUVFMTQ1MkVGNjdFRDgzMEQzMEY2RDRBMDU0QworOjEwNDRBMDAwMDA4MDg4MDA5MDhDMkUzMDA4QzBBMDAwRUUzMjJFNzQ2MAorOjEwNDRCMDAwMDAyODYwMEMxOUUxNDcwQzhEMTFBMkREQTk4OEMwMjBFRAorOjEwNDRDMDAwMkNEMjg1MjI4NENGRDJBMDBDQkMwQjJDRDY4NUQxMEY0OAorOjEwNDREMDAwQzBGMDAzOEYzODdGQTBDMDYzRkZCNDAwQ0M1ODJBNkNCMworOjEwNDRFMDAwNzREQjMwREM0MDU4MDdGMUMwMjBEMTBGREE2MDU4MDk4NgorOjEwNDRGMDAwQkU2M0ZGRTdERDQwMkE2Qzc0QzBCMERDNzA1ODA4NjUwRAorOjEwNDUwMDAwMkUzMDA4OEIxMDAwRUUzMjJFNzQwMDI4NjAwQzE5RTE1QQorOjEwNDUxMDAwMzAwQzhEMTFBMkREQTk4OEMwMjAyQ0QyODUyMjg0Q0YzOQorOjEwNDUyMDAwRDJBMDBDQkMwQjJDRDY4NUQxMEYwMDAwNkMxMDA0MjkzNgorOjEwNDUzMDAwMjAxNDI4MjAwNkIxOTkyOTI0MTQ2ODgxMjRDMEFGMkNBNgorOjEwNDU0MDAwMEEwMTJCMjEwMjJDMjQwNjdCQTAwNEMwRDAyRDI1MDJCOQorOjEwNDU1MDAwMDIyQTAyMDMzQjAyMDQ0QzAyQzBEMDU4MDBCRkQyQTA4MgorOjEwNDU2MDAwRDEwRkMwMjBEMTBGMDAwMDZDMTAwNDI5MzEwMUMyQjQ1QQorOjEwNDU3MDAwMjkyNDBBMkEzMDExQzI4Mzc4QTE2QzdCQTE2OTY0NTA3NgorOjEwNDU4MDAwNDcyQzIwMDZDMDY4NkZDNTYyQ0E1NzJEMjAxNDdDRDdGRgorOjEwNDU5MDAwMjJEQTIwREIzMERDNDBERDUwNUJGRkE1MjkyMTAyMDk1NworOjEwNDVBMDAwMEU0Q0M4RTJDMDIwRDEwRkMwRjEwRjlGMDIyRjI1MDI5MAorOjEwNDVCMDAwQzAyMEQxMEZEQTIwREIzMEMwQzA1QkZGREMyODIwMTQyNAorOjEwNDVDMDAwMDY4ODAyMjgyNDE0NjNGRkM3MjkyMDE1MUJFMEZCMkE1NAorOjEwNDVEMDAwMjAwQkMwQzA5QzI0MEJBQTA5MkJBMTFDMkMyNDE1QUJCQQorOjEwNDVFMDAwOTkyOUE1MUM2M0ZGOTkwMEMwMjBEMTBGREEyMERCMzA4OAorOjEwNDVGMDAwREM0MERENTBDMEUwNTgwODc1RDJBMEQxMEYwMDAwMDBBQgorOjEwNDYwMDAwNkMxMDA0Q0I1NTEzRTBGNjI1MjIxRjBENDYxMTA2NTVGQworOjEwNDYxMDAwMENBMzIzMjYyMjFFMjUyNjFGMDY0NDBCMjQyNjFFNzNDOAorOjEwNDYyMDAwNEIxREM4NTJEMjQwRDEwRjI4MEE4MEMwNDAyNDI2MUZGQgorOjEwNDYzMDAwQTgyODI4MjYxRTI4MjYxREQyNDBEMTBGQzAyMEQxMEYyMQorOjEwNDY0MDAwMjQ0REY4MjQyNjFFNjNGRkQ4MDAwMDAwNkMxMDA0MjhCNworOjEwNDY1MDAwMjAwNkQ2MjA2RTg1MDI2MDAwREUxN0UwRDUxREUwREM2NgorOjEwNDY2MDAwMTlFMEQ1QzBDMUMwMjAyQThDRkM2NEExMzIyQjYxMDJBNAorOjEwNDY3MDAwQjQ0RTBCMEI0QzY1QjBBODJCNjAwQzJBNjIwMDBDQjgzMgorOjEwNDY4MDAwMTEwNzg4MDgyRjgyODYwOUI5MEE3RkUzMDI2MDAwOUYxQworOjEwNDY5MDAwMjk5MkEzNjg5MDA1MDlBQTBDNjVBMDkzMjg4Mjg1NjRENQorOjEwNDZBMDAwODA4REI4ODkxQkUwREE5NDgxOUI4MDY1NTE0REMwQjczRAorOjEwNDZCMDAwQjgzOEMwQTFDMEUwMDlBRTM4MEUwRTQyNjRFMDQ4MUExNgorOjEwNDZDMDAwRTBCODFGRTBCOTJGQTY3RUIwNEE2REFBMDUwMDgwODgyOQorOjEwNDZEMDAwMDA5MDhDQzBBMDJFNjAwQzBDRTgxMUE3ODgyRjgyODU1QQorOjEwNDZFMDAwQURFRTBGNEYwQjJGODY4NTJCNjAwNjIyRTRDRjY4QjEwRAorOjEwNDZGMDAwMkEyOTYwMTVDMEIyQzk5QUQyQTAyRDYxMDIyQjY0MDY4NgorOjEwNDcwMDAwMENERDAyMkQ2NTAyRDEwRkMwRTAwOEFFMzg3RUIwQjdENworOjEwNDcxMDAwNjNGRkFCMDAyMjY0MDZEMkEwRDEwRjAwRDJBMEQxMEY1QworOjEwNDcyMDAwMDBDQzU3REE2MERCMzBEQzQwNTgwODlEQzAyMEQxMEY0OAorOjEwNDczMDAwREE2MDU4MDkyRDYzRkZFODAwMjgyMjFFMjkyMjFENzgxRgorOjEwNDc0MDAwOTkwMjI4MEEwMEMxNzZDMUMxQzFEMjFCRTBBNUMxMjRDQgorOjEwNDc1MDAwQUI2QjY0ODA0Mzc4OTE0MDJBODAwMDBDQUYwQzY0RjAwRQorOjEwNDc2MDAwQUUwREFFMEM2NEUwQTgwMkFGMEM2NEYwQTIwN0FFMEM3NAorOjEwNDc3MDAwNjRFMDlDMkZBQ0U4NjRGMDk2MkVBQ0U3NjRFMDkwMkZFOAorOjEwNDc4MDAwQUNFNjY0RjA4QTJBODAwNzA4QTgwQjA4OEEwMjdCODNCQgorOjEwNDc5MDAwMDIyQThERjhEOEEwNjVBRkJCQzA5MDYwMDA3MzAwMDBGRQorOjEwNDdBMDAwMkI2MDBDMENCODExQTc4ODJFODI4NjZFRTg3OTA5QkFBNgorOjEwNDdCMDAwMEEyQUEyQTM2OEEwMDQ4RTYwN0FFOTZCMkE4Mjg1NjQyMworOjEwNDdDMDAwQTA2NTFGRTA4REMwRTMyRTY0MDY5RUExOUZBMDFGRTBBMAorOjEwNDdEMDAwQjkyRTYwMEE5MkEzMEZFRTAyOUVBMjhFNjAwRkVFMDIyNworOjEwNDdFMDAwOUVBNDJGNjAxNDdBRkY0NzIyQTQxN0FEQkUyRjgyODVBNgorOjEwNDdGMDAwMjJFNENGMkZGQzE4MkY4Njg1NjNGRTcwMkE2Qzc0QzBDQworOjEwNDgwMDAwQjFEQzkwREQ0MDU4MDdBMzFERTA3MkMwQzE2M0ZFQzQ1NworOjEwNDgxMDAwRDlBMERBNjBEQjMwREM0MERENTBDMkYwQzFFMDA5RkUzNworOjEwNDgyMDAwMzk1ODA3RUFEMkEwRDEwRkRBNjA1ODA4RUY2M0ZFRjBEQQorOjEwNDgzMDAwMkNBNDE3MERCRTA4Mjk4Mjg1MjJFNENGMjk5QzE4MjlCMworOjEwNDg0MDAwODY4NTY0NTAwQzJBNkM3NDA0NEIwMjU4MDE2QkQyQTAwQworOjEwNDg1MDAwRDEwRkMwMjBEMTBGMDAwMDZDMTAwNjJCMjIxRTI4MjI4MQorOjEwNDg2MDAwMUQ5MzEwN0I4OTAxQzBCMEMwQzlDMDNCQzFGMjA0MDZEMgorOjEwNDg3MDAwNDAxREUwNUJDMEUyQzA3NDA3NDcwMTBFNEUwMUFEMkQ0NAorOjEwNDg4MDAwOUUxMUMwNDAyRTBBMTQ2NEIwNkU2RDA4NDQyODIyMUQ4QgorOjEwNDg5MDAwN0I4MTY1MkFCMDAwN0VBMTNCN0ZBMTQ3N0I1MTIwN0NCNAorOjEwNDhBMDAwQTE0OTY4QTkxNzY4QUExNDczQTExMUMwOUY3OUExMEMyNgorOjEwNDhCMDAwQzE4Qjc4QTEwN0MxQUUyOTBBMUUyOUI0MDA3Q0ExMkJBNworOjEwNDhDMDAwMkFCMDA3MEJBQjBCREFCMDdEQjMwMjJBQkRGOERCQTAzMAorOjEwNDhEMDAwQ0FBNTYzRkZCNDI4QjAxMDg5MTE2OTg3QkI2NDlGQjg2QgorOjEwNDhFMDAwNjNGRkRDMDA2NDdGQjQ2M0ZGRDUwMDAwNjQ2RkQwQzA1OQorOjEwNDhGMDAwNDFDMUFFMkFCNDAwNjNGRkM2MkIyMTAyQ0VCRTJBMjJEQworOjEwNDkwMDAwMUQyQjIyMUU3QUIxMkE4QzEwN0NCMTIxN0FCOTAxQzBFQworOjEwNDkxMDAwQjBDOUI5MTNFMDI2REEyMDI4QjAwMDJDQjAwNzAzODgwQworOjEwNDkyMDAwMEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZFN0QyNDBFMworOjEwNDkzMDAwRDEwRjg5MTA2NTlGRDQ2M0ZGRjMwMDAwNkMxMDA4QzA4RAorOjEwNDk0MDAwRDBDODU5OEMzMDI5MjEwMjBDMEM0NzYwMDAwQzhFMzBFNQorOjEwNDk1MDAwMEUxRTUwNjVFMTlFMjkyMTAyQzBDMTE2RTAxNTA5MEIwQgorOjEwNDk2MDAwNEM2NUIwOTA4QTMwMEE2RTUxNjhFMzAyNjAwMDg1MkY3MgorOjEwNDk3MDAwNjI5RTFCRTAwRTZFRjg1MzJCQjIyNjY4QjAwNTJFMjIwNQorOjEwNDk4MDAwMDA3QkU5NDcyNzYyOURCNzQ4Q0I3Rjk3MTAyQjIwMEMwRgorOjEwNDk5MDAwQjA0RTBDQkYxMUE2RkYyOUYyODY5RTEyNzk4QjQxMTdFQgorOjEwNDlBMDAwRTAwNTA3QjcwQTI3NzJBMzY4NzAwNDg4MjA3Nzg5MzA2QQorOjEwNDlCMDAwMjlGMjg1REY5MEQ3OTA2NTkwNjUyQTIxMDQxOUUwM0NBMworOjEwNDlDMDAwN0E5QjIyREEyMDU4MDY5RjYwMDAyOTAwMkMyMTA0MUJDNAorOjEwNDlEMDAwRTAzODdDQkIxOERBMjBDMEI2NTgwNjlBQzk1ODYwMDE4NgorOjEwNDlFMDAwNENDMDkwNjNGRkNDREEyMDU4MDg3RjYwMDAwNkRBMjBDNAorOjEwNDlGMDAwQzBCNjU4MDg3RDY1NTEzNURDNDBEQjMwOEQzMERBMjA5QgorOjEwNEEwMDAwMEQ2RDUxNTgwNkYyQzBEMEQzQTA2NEExMjAyOTIxMDIxNworOjEwNEExMDAwQzA1MTg0QTE4Q0EwMDQwNDQ3MEMwQzQ3NjNGRjNFMDBFNgorOjEwNEEyMDAwQzA5Qzg4MzFEQkQwMDhGODUwMDg5QjM4MjgyMTA0OThCNgorOjEwNEEzMDAwMTE2RTg4MjMyODIwNjZBQzhDMEMwQzQ3MkMyNDY2N0NENQorOjEwNEE0MDAwQkIxNTlGMTM5RTE0OEExMDhCMTE1ODA3MDI4RTE0OEY2QQorOjEwNEE1MDAwMTNDMEQwMkQyNDY2OEEzMEMwOTJDMUM4MUJERkVDN0YwMgorOjEwNEE2MDAwQTYwOTlCRjA5OUYxMkNGNDA4MjdGQzEwNjU1MEE0QjgxNgorOjEwNEE3MDAwM0FERjcwQzA1MUMwODAwNzU4MzgwODA4NDI2NDgwNjcyOAorOjEwNEE4MDAwMThERkM4MTlERkM5Mjk4NjdFNkE0MjBBRDMwRjZERTk4QgorOjEwNEE5MDAwMDUwMEEwODgwMEYwOENDMEEwODkzMEI0RTM3Rjk2Mjg4MAorOjEwNEFBMDAwQzBGMjA3RTkwQjJDOTQwODlCOTA5RjkxMkYyMDBDMTJDOQorOjEwNEFCMDAwREZDODBDRjgxMUE2ODgyOTgyODVBMkZGMkRGNENGRDI3OQorOjEwNEFDMDAwQTAwOTMzMEIyMzg2ODVEMTBGMjIyMDBDODkxMjE4REYxMQorOjEwNEFEMDAwQzAwQzJCMTFBNkJCQTgyMjJEMjRDRjJDQjI4NUQyQTBBRQorOjEwNEFFMDAwMEM5OTBCMjlCNjg1RDEwRkMwODdDMDkwMEE1OTM4NzkyNworOjEwNEFGMDAwODA5NjYzRkY4QURCMzBEQTIwQzBDMUMwRDA1QkZGNTZFRQorOjEwNEIwMDAwMjkyMTAyQzBEMDJBOUNGRTY1QUU0RDJEMjUwMkMwOTAwMQorOjEwNEIxMDAwNjNGRTQ1MDA5RTE0MkEyQzc0QzBCMURDNzBERDQwNTg0MQorOjEwNEIyMDAwMDZERDhFMTRDMEQwMUJERkI5QzFDODYzRkY2QUMwMjA4OAorOjEwNEIzMDAwRDEwRjAwMDA2QzEwMDYyODIxMDIxNkRGOUQwODA4NENEQQorOjEwNEI0MDAwNjU4MjE5Mjk2MjlFNkY5ODAyNjAwMjIwMTlERjk4MjlGOAorOjEwNEI1MDAwOTIyNjY4OTAwNzhBMjAwOUFBMEM2NUEyMEYyNzYyOURGOQorOjEwNEI2MDAwQzBDQzY0NzIwNzJCMjEwNDhFMzFDMEEwRERBMDBFRkVFNAorOjEwNEI3MDAwNTAwRUNEMzg2RUI4MTAyQzIwNjZCMUNDMEMwQzQ3MkNFMgorOjEwNEI4MDAwMjQ2NjdDREIwMjYwMDFFRkMwQzEyOTMwMDgxQkRGOEE4QworOjEwNEI5MDAwNjQ5MDlDMkYwQUZGQzBEM0IwOUU2NEUxMDI2ODkyMTMxOAorOjEwNEJBMDAwNjQ1MDg4MkEyQzc0MDQ0QjAyNTgwMDkzMEFBMjAyMDYwRgorOjEwNEJCMDAwMDAwMDAwMDAyQjIwMEMyNzIxMDQwQ0JDMTFBNkNDMjlERQorOjEwNEJDMDAwQzI4NjI4MEEwODc5ODMwMjYwMDFCOTE5REY3QTA5QjkxNworOjEwNEJEMDAwMEEyOTkyQTM2ODkwMDgyRTIyMDAwOUVFMEM2NUUxQTQzMAorOjEwNEJFMDAwMkVDMjg1NjRFMTlFMjYyMDA3MTNERjgzNkU3QjAyNjA2MAorOjEwNEJGMDAwMDE5QTE3REY3QTFGREY4MzE5REZCMEMwRDIyODIwMEE5RAorOjEwNEMwMDAwOTNFMDlERTFBOTY5MEY4ODAyOThFMjJGOTA4MDJBOTQ5MQorOjEwNEMxMDAwODBCMUZGMDdGRjAyOUZFMzJFQzI4NTFGREY2RDBFREUwRQorOjEwNEMyMDAwMEJBRkJGMkFGNENGMkVDNjg1NjU1Rjc2QzAyMEQxMEZBQgorOjEwNEMzMDAwMjgzMDEwMjkzMDExMkUzMDEzMDA5OTMyMDBFRDMyNjRFMworOjEwNEM0MDAwODBFRTJBMzAxNDFGREY5RDAwQUEzMjc4RUYwNTBGOUVGOAorOjEwNEM1MDAwMDkyREU0N0YxRURGOUI2NkEwMDUwRjk4MDkyQTg0ODAzQQorOjEwNEM2MDAwQjRBNzE4REY5OEM3NkYwMDkxMDRBRTlFRERFMDAwQUZENworOjEwNEM3MDAwMUEwMEMzMUE2RUUxMDUyREIyMDAwREVEMEMxRURGOTI3NQorOjEwNEM4MDAwMDhEODFDMDYzMzAzQUU4ODJBODQ4QjJFQjAyRTI3ODRDNgorOjEwNEM5MDAwOEMwM0VFMDEwRkVFMDIyRUI0MkU1ODAxOEY2M0ZFRkYzRgorOjEwNENBMDAwMjkzMTA4MjkyNTA0MjgzMDE0MkUzMTA5QjA4ODY0ODA2MAorOjEwNENCMDAwQTMyRTI0MEFDMDgxMkUzMDE2MkNCNDIzMkUyNDBCQjQyQworOjEwNENDMDAwRUYyRjI0MEM4QzM3OEIzNjI5MjUwNERFQjBERkMwMEM4NworOjEwNENEMDAwOEYzOTBCOEUzOTBGRUUwMjY0RUVDNDA4OUYxMTAxQzRBOAorOjEwNENFMDAwMDQ4RDM4MENCODE4MDBDNDA0MENCRTE4MDBFRTExMEU2OAorOjEwNENGMDAwREQwMkMwRTMwRUZGMDIxRURGNjY5RjcxOUU3MDFFREZBNQorOjEwNEQwMDAwNjU4RjIwOTg3MzlENzQwNUZGMTEwQkNENTNDMTgwOTg1QQorOjEwNEQxMDAwNzUwRkREMDIwRUREMDI5RDcyMUVERjI0MkEyNDY2MkYzMAorOjEwNEQyMDAwNjI5RDJBRTRBMjJGRkMxODJGNjY5RDYzRkU3MTAwMDA4RAorOjEwNEQzMDAwMDAyRjMwMTIxQkRGNjYwMEZBMzI3OEZGMDUwQjk4MEI0QworOjEwNEQ0MDAwMkE4NDdGNjZEMDA1MEI5QTBCMkRBNDgwMkEzMDExMDA4RgorOjEwNEQ1MDAwQUEzMjYzRkY0NDJGMjQwQTlFMkI2M0ZGNTZDQzU3REFGNgorOjEwNEQ2MDAwMjBEQjMwREM0MDU4MDcwRUMwMjBEMTBGMDBEQTIwQzAxNQorOjEwNEQ3MDAwQjY1ODA3OUQ2M0ZGRTUwMERBNzA1ODA2MzZDMEEwMkFEMgorOjEwNEQ4MDAwMjQ2NjYzRkUwMkRBMjA1ODA3OTg2M0ZGQ0ZCMTY5MjhEMgorOjEwNEQ5MDAwMjAwQTg2MjAwOTA5NDc5OTExMjkyNDA3OTgxMDdGODE0NAorOjEwNERBMDAwMjY5M0UwMjdFNTBBOUFFMzg4MTA5REUxMTlERjQyOERGQQorOjEwNERCMDAwMTEwOTZGMDI5RkU0MkRFNDE2MDk4ODAyQzBEMzk4RTIxRQorOjEwNERDMDAwMkEyNDA3NjNGRTUxMDAwMDFEREYwQjA4NjgxMThGMTFCNAorOjEwNEREMDAwODkyQjkzRTAwOEZGMDJDMDhGOUZFNTBEOTkwMjk5RTJBRAorOjEwNERFMDAwMDQ3RjExQzBENDlERTEwOEZGMDI5RkU0NjNGRkQwMDA1RgorOjEwNERGMDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDg1MjEwRDM4MTFGNworOjEwNEUwMDAwMTRERUU5ODYyMkE0MjQwODY2MEM5NjIyMDUzMzBCOTM0RgorOjEwNEUxMDAwMjE3NDNCMTNDODYyRDIzMEQxMEZDMDMwQkMyOTk5MjExNAorOjEwNEUyMDAwOTkyMDkzMjJEMjMwRDEwRjIzM0RGODkzMjE2M0ZGRTNFMQorOjEwNEUzMDAwNkMxMDBBRDYyMDk0MTgxN0RFREVEOTMwQjgzODk4MTlDRAorOjEwNEU0MDAwOTkxNDY1NTI1MkMwRTFEMkUwMkU2MTAyMURERURCMEVFNAorOjEwNEU1MDAwMEU0QzY1RTE2MjhGMzA4RTE5MEY2RjUxMkZGQ0ZENjU4RQorOjEwNEU2MDAwRjE1NThFRTEyOUQwMjMwRThGNTA3N0U2NkI4RjE4MUVGNworOjEwNEU3MDAwREYxOEIwRkYwRkY0MTEwRjFGMTQ2NTkwQ0UxOERGMTU2NworOjEwNEU4MDAwOEM2MEE4Q0NDMEIxMTlERUM5Mjg2MDBCMDlDQzBCMEQxMQorOjEwNEU5MDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkE2NQorOjEwNEVBMDAwMzgxQkRGMEIwQ0E5MEEyOTkyOTQ3QjlCMDI2MDAwOENCMworOjEwNEVCMDAwMkI2MDBDOTQxNjBDQkQxMUE3REQyOUQyODZCODQ4Nzk1OQorOjEwNEVDMDAwODMwMjYwMDBEMjE5REVCQjA5QjgwQTI4ODJBMzk4MTdCMgorOjEwNEVEMDAwNjg4MDAyNjAwMEEzNjAwMEE1MUFERUZGODQxODBBRUU1NQorOjEwNEVFMDAwMDFDQTk4MUJERUIyOEMxOTJCQjAwMDhDQzA2RUIzMTNCNAorOjEwNEVGMDAwMURERUFGMEMxQzUyMERDQzBCMkRDMjk1QzBBMTdFREI2QworOjEwNEYwMDAwQUU2MDAwMzgwQzBDNTM2MDAwMDkwMDAwMDAxOERFRjFBMAorOjEwNEYxMDAwOEM2MEE4Q0NDMEIxMTlERUE1Mjg2MDBCMDlDQzBCMERBNAorOjEwNEYyMDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkFENAorOjEwNEYzMDAwMzgwQ0E5MEEyOTkyOTQ3RTkzMDI2M0ZGNzJEQTYwQzA0QQorOjEwNEY0MDAwQkE1ODA3Mjk2NDUwNzM2MDAyNjYwMDAwMUFERTk4OEMxNAorOjEwNEY1MDAwMTkyQUEwMDA4Q0MwNkVBMzFBMThERTk0MEMxQzUyMDhFQgorOjEwNEY2MDAwQ0MwQjE4REVEQjJCQzI5NUMwQTE3OEIzMDI2M0ZGM0ZFOAorOjEwNEY3MDAwNjNGRkM5MDAwQzBDNTM2M0ZGMDk4OTYwNzg5OTE4MjlGNQorOjEwNEY4MDAwRDI4NUM5OTIyQjcyOUUxRERFODk2RUI4MjMyREQyMjY0MgorOjEwNEY5MDAwOTkxMzY5RDAwQjYwMDAwRERBNjA1ODA3MTM2MDAwMTc5MQorOjEwNEZBMDAwMDA4ODYwN0Q4OTBBOUExQTI5NzI5RDlDMTI5OTE1Q0ZGMgorOjEwNEZCMDAwOTVEQTYwQzBCNjU4MDcwQzY1NTFGNThEMTQ4QzE4REI3NgorOjEwNEZDMDAwRDA4REQwMDY2QTAyMEQ2RDUxNTgwNTgwRDNBMDlBMTQ3OQorOjEwNEZEMDAwNjRBMUREODJBMDg1QTFCOEFGOUYxOTA1MDU0NzAyMDIzMworOjEwNEZFMDAwNDc5NTE4QzA1MTYzRkU2MDJCNjEwNEMwOEM4OTMxQzBBNQorOjEwNEZGMDAwQTAwOUY5NTAwOThBMzg2RUI4MUYyQzYwNjZBMkNDMEM0MworOjEwNTAwMDAwMEM0NzJDNjQ2NjdDQUIxMTlGMTE5RTFCOEExNTU4MDVCQQorOjEwNTAxMDAwOTE4RTFCOEYxMUMwQTAyQTY0NjY5RjExNjRGMEUxMjk1NAorOjEwNTAyMDAwMTIwMzI4MTIwOTZERjkxNzJGODEwMzAwOTA4REFFRkUyRgorOjEwNTAzMDAwMDA4MDg4OUY5MjAwOTA4QzAwODA4OEI4OTkwMDkwOENBNgorOjEwNTA0MDAwNjU1MTRFOEExMDg1MUE4QjMwMUZERTZCODgxMjI5NjBERAorOjEwNTA1MDAwMDcwODU4MEEyQzgyOTQyRDYxMDQwRUNDMEMyQzg2OTRERgorOjEwNTA2MDAwNkZEQjNDMUNERTk1QUM5QzI5QzA4MDBCNUQ1MEEyOTk4NworOjEwNTA3MDAwMDkwOTQ3MjlDNDgwNjVEMERBMkU2MDBDQzBEMDFGREUzNAorOjEwNTA4MDAwNTQwQ0U4MTFBRkVFQTc4ODIyODI4NTJERTRDRjAyNDJBRQorOjEwNTA5MDAwMEIyMjg2ODVEMkEwRDEwRjhFMzAwRTBFNDc2M0ZEQTY1RgorOjEwNTBBMDAwQTI5QzBDMEM0NzJDNjQwNzdBQjZDRDhCNjAyRTYwMEE0QworOjEwNTBCMDAwMjgwQUZGMDhFODBDNjQ4MTBFMThERTdFODMxNjgyMTMyRQorOjEwNTBDMDAwQjMzOTAyMzMwQjJDMzQxNjJEMzUwQUMwMjM5MjMxOUY4RAorOjEwNTBEMDAwMzBDMDIwOTIzMzA4QjIwMjA4RTgwMjkyMzQ5ODMyQzBGRAorOjEwNTBFMDAwODAyODY0MDcyQjYwMENEMkEwMUNERTM5MENCRTExQTdFRgorOjEwNTBGMDAwRUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCMkRFNjg1RDFGRQorOjEwNTEwMDAwMEY4QjE4ODgxMzhEMzBCODhDMEQ4RjQ3MEQ0OTUwQjQxNAorOjEwNTExMDAwOTkwNDk5MTAwRDBENUYwNEREMTAwOUZGMDI5RjgwMERBOQorOjEwNTEyMDAwQkIwMjlCODE2NTUwOEQ4NTFBQjgzQUMwRjFDMDgwMENENgorOjEwNTEzMDAwRjgzODA4MDg0MjY0ODA2QjFCREUxQTE5REUxQjI5QjY5QQorOjEwNTE0MDAwN0U4RDE4QjBERDZEREEwNTAwQTA4ODAwQzA4Q0MwQTA4RgorOjEwNTE1MDAwNjNGRUYzMDA4MjEzOEIxNjFEREUyQjI4NjAwQUMwRTA2RAorOjEwNTE2MDAwMkVDNDgwMEQ4ODAyMDJCMjBCOTkyMzlGMjBDMEQyOThEMgorOjEwNTE3MDAwMjI5RDIxMjI2MDBDQjJCQjBDMkQxMUE3REQyOEQyODUwNworOjEwNTE4MDAwMDhCQjBCMThERTEzMkJENjg1QTgyMjJFMjRDRkQyQTA2NQorOjEwNTE5MDAwRDEwRjlFMUI4NTFBMkE2Qzc0OEIxODVCRkYxNzhFMUIxMAorOjEwNTFBMDAwNjNGRUEzMDBDMDg3QzA5MDBBRjkzODc5ODA5MjYzRkYzQworOjEwNTFCMDAwODZDMDIwRDEwRjlFMUIyQTZDNzRDMEIxOEQxODU4MDU3MworOjEwNTFDMDAwMzU4RTFCODUxQTYzRkU3RTg4NkI4MjEzODkxNjA4QkU5NgorOjEwNTFEMDAwMTEwRUNFMDIwMjkyMEI5RTI1QjQ5OTFFREUwNjlGMjA3MAorOjEwNTFFMDAwMEU4ODAyOTgyMkMwRUYwNEQ4MTEwRTg4MDI5ODI0QzBCRAorOjEwNTFGMDAwRTQ5RTIxQzA4MEQyQTAyQjYwMEMyODY0MDcxQ0RERjQ0MworOjEwNTIwMDAwMENCRTExQTdFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEJEMworOjEwNTIxMDAwMkRFNjg1RDEwRjAwMDAwMDZDMTAwNEMwMjBEMTBGMDBENgorOjEwNTIyMDAwNkMxMDA0ODYzM0MwNzFDMDMwNjAwMDAxQjEzMzAwMzFBRQorOjEwNTIzMDAwMDQwMDc0MUEwNDYyMDE3NDYwRjFEMTBGNkMxMDA0MDI0RQorOjEwNTI0MDAwMkEwMjAzM0IwMjVCRkZGNjFDREREQzFCREUyNEM3OUY0QQorOjEwNTI1MDAwODhCMDA5QTkwMzA5OEEwMTlBQjA3OTgwMUVDMEYwMEZBRAorOjEwNTI2MDAwRTQzMTFEREREMzAwMDIwMDJCRDI4MjFFREUxRDJBQzFENworOjEwNTI3MDAwMDIwRUJCMDIyQkQ2ODIwQUU0MzFEMTBGMjhDMTAyQzEzMworOjEwNTI4MDAwOTAwOTg4MDIwODA4NEYyOEM1MDIwOEU0MzFEMTBGMDBCMAorOjEwNTI5MDAwNkMxMDA0QzBDMDBDRTQzMTEyRERDODFBRERDNTAwMDI3OAorOjEwNTJBMDAwMDAyOUEyODIxOERFMTExQkRFMEYyNjIxMDIwQjk5MDFCNAorOjEwNTJCMDAwMDg2NjAxMjlBNjgyMjYyNTAyMDZFNDMxMTRERTBDMTVCMworOjEwNTJDMDAwREUwNzIzNkE5MDIzMjYxMjg1NTAyNDI2MTEyNTI2MTNGMworOjEwNTJEMDAwMjIyQzQwRDEwRjAwMDAwMDZDMTAwOEQ2MTAyQjBBNjQ1RAorOjEwNTJFMDAwMjkxQUI0MUFEREIyMEQyMzExMUNEREIzMEYyNTExQjgzNAorOjEwNTJGMDAwMTg5ODEzMEU1NTExMThEREZFQUM1NUE4MzhBQTMzMkM5QQorOjEwNTMwMDAwODBGRjJBODBGRUE5MzMyODhEMDEyOTgwMDEwOEFBMTE3NworOjEwNTMxMDAwMjg4MDAwMENBQTAyMDg4ODExMDk4ODAyMDhBQTFDMjgwMworOjEwNTMyMDAwOEMwODI4MTYwNDU4MDg0QzE0RERBNDBBQTcwMjI0NDE0RQorOjEwNTMzMDAwMTYyQTMwODAyQjEyMDQwN0FBMjg1ODA4NDdCMTMzOEI0RAorOjEwNTM0MDAwMTNCNDU1OUE2MDA0QUMyOEI0NjYyQzU2Mjc3QjY5RTBFOAorOjEwNTM1MDAwMTZERERCOTQxMkMwNTBDMEQwMTdERDk3OUQxNUQzNzBCOQorOjEwNTM2MDAwRDQxMDJGNjA4MDJFNjA4MjlGMTY5RTE3ODgxNjcyODkzNworOjEwNTM3MDAwMUE4RDEyOEM0MDJBNjA3RjBEQ0MyODJCM0EyMDBDQUE2MworOjEwNTM4MDAwMjg1ODA4MzVDMEIxMEFCRTM3MkUzNTQwOEYxNzcyRjkzQworOjEwNTM5MDAwMUE4RDEyOEM0MDJBNjA4MTBEQ0MyODJCM0EyMDBDQUE0MQorOjEwNTNBMDAwMjg1ODA4MkRDMEIxMEFCRTM3MkUzNTQyQjIzM0I0NDQ1NgorOjEwNTNCMDAwQjE1NTY5NTJCNkI0NjZDMDUwOEYxNUI4NzdEMzcwQjI4NAorOjEwNTNDMDAwRkY5RjE1NkVGODk5RDEwRjZDMTAwNEMwMjFEMTBGMDAwQQorOjEwNTNEMDAwNkMxMDA0MjcwQTAwMUNERDc2MUZERDg3MUVERDhBMUQ4OAorOjEwNTNFMDAwREQ3MzFBRERCNTFCRERDM0MwMjgyNEIwMDA2RDJBNzUzRQorOjEwNTNGMDAwQUE0ODI4ODA4MEMwOTE2NDgwNjEwMDQxMDQxNURENkU1OAorOjEwNTQwMDAwQzAzMTI1NTAyRTAwMzYxQTA2NTUwMTA1OTUzOTBDNTYyNworOjEwNTQxMDAwMTEwQzY2MDgyOTYyOTY2RTk3NEQwRDU5MEEyOTkyMjQzRgorOjEwNTQyMDAwNjg5MDA4MTJEREE3MDI0MjA4NzI5OTNCMjM2Mjk1MTIyOAorOjEwNTQzMDAwREQ2QkNCMzQ5RjMwMDI4MjAyMEU0NDAyQzA5Mjk5MzE2MAorOjEwNTQ0MDAwOTQzMjkyMzNBRDUyMjQ2Mjk1QzA5MDI0NEMxMDI0NjY1RAorOjEwNTQ1MDAwOTUyNEIwMDAyOTI0QTBBQTQyMjkyNDgwQjE3N0IxNDQyMAorOjEwNTQ2MDAwMDQwNDQyMjRCNDAwRDEwRkQxMEZEMTBGNkMxMDA0MUFFMAorOjEwNTQ3MDAwREQ0RjJBQTAwMDU4MDIxQzVCRkZENTAyMkEwMjAzM0IyNQorOjEwNTQ4MDAwMDI1QkZGRDExQkRENERDOUExMkNCMTAyQzBENDBEQ0NGNAorOjEwNTQ5MDAwMDIwQzBDNEYyQ0I1MDIwQ0U0MzFEMTBGQzBBMDBBRTQ3MQorOjEwNTRBMDAwMzExOERENDMwMDAyMDAyRjgyODIxOURENTYyRUIxMDIzMQorOjEwNTRCMDAwMDlGRjAyMkY4NjgyMEVFNDMxRDEwRjAwNkMxMDA0QzA2OAorOjEwNTRDMDAwMjAwMkU0MzExNEREM0QxNkREM0EwMDAyMDAyMjYyODI0MgorOjEwNTREMDAwMjM0MTAyNzMyRjA2MDNFNDMxQzAyMEQxMEYxOUREODc2OQorOjEwNTRFMDAwMUFERDg2Mjg0MTAyMEEyQTAxMDk4ODAxMkE2NjgyMjhEMworOjEwNTRGMDAwNDUwMjA4RTQzMTE1REQ3RDEyREQ4MjI1NDYxREQxMEYwMAorOjEwNTUwMDAwNkMxMDA0MjkyMDA2Mjg5Q0Y5NjQ4MEEwMkE5Q0ZENjU2MworOjEwNTUxMDAwQTA5NjhBMjg4RDI2MkYwQTA4N0FEOTA0MkIyMjFGQzgyNAorOjEwNTUyMDAwQkQyQzIwNjQ2NEMwODEyRTIyMDkwRUFFMEM2NkUwNzg4QQorOjEwNTUzMDAwMkIyMDBDMUVERDFGMENCQzExQUVDQzI4QzI4NjE5REQ0MQorOjEwNTU0MDAwMUQ3OEYzMDI2MDAwQUQwOUI5MEEyOTkyQTM2ODkwMDg5QQorOjEwNTU1MDAwMkUyMjAwMDlFRTBDNjVFMDlCMjlDMjg1MUZERDI3NjQyMQorOjEwNTU2MDAwOTA5MjlGOTBDMEU0MUZERDM0OUU5MTI4MjAwQUMwRTBGNQorOjEwNTU3MDAwOUU5MzBGODgwMjk4OTI4ODIwMEY4ODAyOTg5NDJGMjA3QgorOjEwNTU4MDAwMDc5QTk3OUQ5NjJGOTUwQTJFMjQwNzI4MjAwNjI5MjBGMgorOjEwNTU5MDAwNjQ2ODgzMzMyOEMyODUxMkREMEUyODhDMjBBMkIyMkVDNworOjEwNTVBMDAwMjRDRjI4QzY4NUMwMjBEMTBGQzAyMEQxMEYyQTIwNkE2MQorOjEwNTVCMDAwMDExMTAyMEEyQTQxNjVBRjUyREEyMEMwQjA1ODA1RDE2NAorOjEwNTVDMDAwNjRBRkU1QzAyMUQxMEYwMDY0OUZDODFGRENGQjJEMjAxNAorOjEwNTVEMDAwMTY4RkYyMDlERDBDMDBGMTA0MDBERDFBQURBRDlEMjkzNgorOjEwNTVFMDAwMTJEQ0ZDMjhDMjg1QTJCMjJFMjRDRjI4OEMyMDI4QzYyQgorOjEwNTVGMDAwODVDMDIwRDEwRkMwMjFEMTBGMDAwMDAwNkMxMDA0MjZGRgorOjEwNTYwMDAwMEEwMDFCREQ0MDE1RENFQzI4MjA2NTE3RENFOTI4OEMzRQorOjEwNTYxMDAwRkU2NDgwOTQwQzREMTEwREJEMDgyQ0QyRjUyQkQyRjRGNAorOjEwNTYyMDAwMkVEMkY3N0NCMTNEQjRCQjJCRDZGNDdCRTkwNTJCRDI0RgorOjEwNTYzMDAwRjYyQkQ2RjQ3Q0I5MkMyQUQyRjYyQUQ2RjUyQUQ2RjQ0MworOjEwNTY0MDAwMDZFNDMxMDAwMjAwMjg3MjgyMkFGQUZGMDA0MTA0Mjk5MAorOjEwNTY1MDAwMEEwMTJGNTEwMjAwOTkxQTBBOTkwMzA5ODgwMTI4NzYzNAorOjEwNTY2MDAwODIwRkU0MzEyNjI0NjUyQkQyRjQ4RTVBMkNEMkY1QjA2OQorOjEwNTY3MDAwRUU5RTVBN0JDQjE2MjlEMkY2MkZEMkY3MENCODBDMDkyNgorOjEwNTY4MDAwRkYwQzA4RkYwQzBGMkYxNEM4Rjk2MDAwMzIwQkNBMEM3NgorOjEwNTY5MDAwMEEyQTE0Q0VBOTJCNTEwMkMwQzIwQ0JCMDIwQjBCNEYxRAorOjEwNTZBMDAwMkI1NTAyMEJFNDMxRDEwRjAwREIzMERBMjA1QkZGOTQ4NQorOjEwNTZCMDAwMUJERDE1NjRBRjVEMEM0RDExQURCRDYzRkZBODAwMDA4RgorOjEwNTZDMDAwMDZFNDMxMDAwMjAwMkY3MjgyMThEQ0Q0MkU1MTAyMDg0OQorOjEwNTZEMDAwRkYwMjJGNzY4MjBFRTQzMUQxMEYwMDAwNkMxMDA0QzA1RgorOjEwNTZFMDAwMzAwM0U0MzExNkRDQjMxNURDQjQwMDAyMDAyNDYyODIxRQorOjEwNTZGMDAwNzQ0NzIxMThERDA1ODc1QTA4NDgwMTI4NjY4MkNENzM1MgorOjEwNTcwMDAwMTlERDAzMEMyQTExQUE5OTIyOTI4MzI5OTI4NDcyOTE5RAorOjEwNTcxMDAwMDM4MjIwQ0MyOTJCNTEwMjBCRTQzMUMwMjBEMTBGMDA5MQorOjEwNTcyMDAwMUZEQ0ZDMkU1MTAyMEZFRTAxMkU1NTAyMEVFNDMxQjBBQgorOjEwNTczMDAwMkRCMTdDOUM1QTEyRENGNzA4REQxMTJENTYxOUQxMEZDMgorOjEwNTc0MDAwNkMxMDA2MUJEQzlBMUVEQzlDMjJCMDAwMUFEQ0YzNkY4NgorOjEwNTc1MDAwMjM3MjFERENEQUMwNDgxOERDRjIxRkRDRjBEQzEwRDU0NworOjEwNTc2MDAwQzA4M0YwMDA4MDg2MDA1MDhBNkQ0QTRGMEYzNTExMERCRQorOjEwNTc3MDAwMzQwOTI0NDA4MDBCNTYwQTI5NjI5NEIxMzMwRTU1MDkyRQorOjEwNTc4MDAwMjI1MTQwMEY0NDExMEM0NDBBODc0MDA5QTgwQzAyODg5QQorOjEwNTc5MDAwMzYyMjUxNDEwNzg4MzYwODc3MENBODk5Mjk2Njk0OTdENAorOjEwNTdBMDAwNDAyOTYyOTU4NzQxMDlBODBDMDI4ODM2MDc4ODM2MDg4NworOjEwNTdCMDAwNzcwQ0E4OTkyOTY2OTU5NzQxMDMwMzQyQjEzODA4MDhFOAorOjEwNTdDMDAwNDI5OEYwRDEwRjFDRENENzEzRENEODI3QjAwMDIzMzI2RAorOjEwNTdEMDAwQjU2NDcwNTdDMDkxQzBEMDE2RENENjE1RENENEMwNDA3QgorOjEwNTdFMDAwMkFDMDAwMDM4ODQzMjhDNDAwNkQ3OTNDMDA0MTA0QjFGRAorOjEwNTdGMDAwNDQwMDk3MUE3NzgwMTQ4RTUwMkZCMjk1MkRCNjk1QUYyRQorOjEwNTgwMDAwRUUyRUVEMjAwNkVFMzY5RTUwNjAwMDE4NzdBMDA5ODMzQworOjEwNTgxMDAwNTA5RDUwMjNCNjk1NjAwMDAyMjNCMjk1MjIzRDIwMDY4QworOjEwNTgyMDAwMjIzNjIyQjY5NUI0NTVCOEJCRDEwRjAwMDM4ODQzMjg2MQorOjEwNTgzMDAwQzQwMEQxMEY2QzEwMDRDMDQwMDRFNDMxMTVEQ0JFMDA3QworOjEwNTg0MDAwMDIwMDg4NTAxM0RDQkRDQjgxNUJGRkJEMUNEQ0JDMENBRgorOjEwNTg1MDAwMkQxMUFEQ0MyQkMyODIyQUMyODM5NDUwN0JBQjE0MkU2NworOjEwNTg2MDAwQzI4NDI5QzI4NTBBQkQwQzBFOTkwQzBEOTkwQzA5MjkxOAorOjEwNTg3MDAwMTQ2MDAwMDUwQkE5MEMwOTI5MTQ5OTMwMTVEQzRGMkE3NgorOjEwNTg4MDAwNTEwMjBBRTQzMTJBMkNGQzU4MDA0QjJCMzIwMDBBQTJBOAorOjEwNTg5MDAwMDIyQkJDRkY5QjMwQ0NCNkM4QTREMkEwRDEwRjAwMDAxNQorOjEwNThBMDAwMDRFNDMxMUVEQzQzMDAwMjAwMkRFMjgyMkZCQUZGMkNGQgorOjEwNThCMDAwNTEwMjBGREQwMTJERTY4MjBDRTQzMUQxMEYwMDAwMDAxMgorOjEwNThDMDAwNkMxMDA0RDEwRjAwMDAwMDZDMTAwNEMwMjBEMTBGMDAzOAorOjEwNThEMDAwNkMxMDA0MTNEQzlCQzBEMTAzMjMwOTIzMzE4REMwQTBCRAorOjEwNThFMDAwNkYzNDAyNjAwMDhEMTlEQzMyMUJEQzMzMTdEQzk0MEM0MgorOjEwNThGMDAwMjgxMUE4NzcyNjcyODMyNTcyODIyQ0ZBRkY3NjUxNDdFOQorOjEwNTkwMDAwODg1MDJFNzI4NTI1NUMwNDI1NzY4Mjc1RTkwNTI1NzJGRQorOjEwNTkxMDAwODQyNTc2ODI3NjU5MjkyRTcyODQyRTc2ODIyRTc2ODM3RAorOjEwNTkyMDAwMEFFNDMxMDAwMjAwMjM5MjgyMDAyMTA0MkZCMTAyMDAxOAorOjEwNTkzMDAwRDYxQTBDNjYwMzA2MzMwMTIzOTY4MjBGRTQzMTI2NzJEMQorOjEwNTk0MDAwODMyNTcyODI2MDAwMDIwMEQ4QTA3NjU5MjIwQUU0MzFEMQorOjEwNTk1MDAwMDAwMjAwMjM5MjgyMDAyMTA0MDBEMjFBMkZCMTAyMEMwRgorOjEwNTk2MDAwMjIwMzAyMzIwMTIyOTY4MjBGRTQzMUQyODBEMTBGMDA0RAorOjEwNTk3MDAwRDI4MEQxMEZDMDIwRDEwRjZDMTAwNERCMzA4NjIwMTVFRgorOjEwNTk4MDAwREMwQjI4MEEwMDI4MjUwMkRBMjAyOEIwMDAyQ0IwMDdGQQorOjEwNTk5MDAwMDU4ODBBMjg4MjRDMkQwQTAxMEI4MDAwREJBMDY1QUYyOAorOjEwNTlBMDAwRTYxQURDMDQwQTRBMEEyOUEyQTNDN0JGNzY5MTAxRDFFQworOjEwNTlCMDAwMEYyQkE2QTNEMTBGMDAwMDZDMTAwNEMwRDFDN0NGMUJDMgorOjEwNTlDMDAwREJGRTE5REJGQjE3REJGOTBDMjgxMUE4Nzc4Njc1ODU0MAorOjEwNTlEMDAwNzRDMEEwNzY1MTYyODg1MDhFNzdCNDU1OTU3NDc1RTk3RAorOjEwNTlFMDAwMDM4NTc2OTU3NDc2NTkyNzhGNzY5Rjc1OUY3NDBBRTRBMAorOjEwNTlGMDAwMzEwMDAyMDAyMzkyODJCNDJFMkZCMTAyMDBFMTA0MDA5NAorOjEwNUEwMDAwRDYxQTBDNjYwMzA2MzMwMTIzOTY4MjBGRTQzMTg2NzU5RAorOjEwNUExMDAwODM3NDc2MzkyODBBRTQzMTAwMDIwMDJFOTI4MkI0MjI3RgorOjEwNUEyMDAwMDAyMTA0MjRCMTAyMDBERjFBMENGRjAzMEZFRTAxMkU0NworOjEwNUEzMDAwOTY4MjA0RTQzMUQyODBEMTBGRDhBMDc2NTFENkQyODA5QworOjEwNUE0MDAwRDEwRjAwMDA2QzEwMDQyOTBBODAxRURDMDAxRkRDMDA0RQorOjEwNUE1MDAwMUNEQkQ4MEMyQjExQUNCQjJDMkNGQzJEQjI4NTBGQ0MzNQorOjEwNUE2MDAwMDI5RUQxOUNEMEMwNTFDMDcwMTNEQkZDMTREQkZCMTgyQworOjEwNUE3MDAwREJGOTJBQjI4NUE4MjgwNDI0MEEyMzQ2OTFBOTg2QjgwRQorOjEwNUE4MDAwQUEyQUI2ODVBOTg4Mjc4NDlGMjU2NDlGRDEwRjAwMDA4NAorOjEwNUE5MDAwNkMxMDA0MTlEQzJDMEMyQTExQTlBOTg5OTBDNDg0NzlGMgorOjEwNUFBMDAwOEI3NjFCREMxQUFCQUMyQUMyODMyQ0MyODQ3QUMxNjgwOQorOjEwNUFCMDAwOEFBMDJCQkMzMEQzQTA2NEEwNUUwQjJCMEEyQ0IyQTMwRgorOjEwNUFDMDAwMTlEQkU1NjhDMDA3MUREQzIwRDMwRjdEQzk0QUE5Mjk3MQorOjEwNUFEMDAwMjk5RDAxMjk5MDFGNjg5MTMyNzBBNjAzRDNBMENBOUUwOAorOjEwNUFFMDAwNjg5MjEwQzdBRjJBQjZBMzJBMkNGQzVCRkZCM0QyMzA1MgorOjEwNUFGMDAwRDEwRjAwMDAxM0RCQzUwM0EzMDE4QzMxMUREQkI2MENGNQorOjEwNUIwMDAwOEMxNDBEQ0MwMTJDQjZBMzYzRkZEQzAwQzAyMEQxMEY5OAorOjEwNUIxMDAwREEyMDVCRkZDQ0MwMjBEMTBGQzAyMEQxMEYwMDAwMDBFNQorOjEwNUIyMDAwNkMxMDA0REIzMEMwRDAxOURCQTFEQTIwMjgzMDAwMjI1MQorOjEwNUIzMDAwMzAwNzA4NDgxMjA5ODgwQTI4ODI0Q0RDMjAwQjgwMDBCNAorOjEwNUI0MDAwMUJEQjlDMEM0QTExQUJBQTI5QTI4NDA5MjkwQjI5QTZBQworOjEwNUI1MDAwODREMTBGMDA2QzEwMDRDMDQxMThEQjk1MTdEQjk3MEM0MworOjEwNUI2MDAwMjYxMUE3MjcyNzcwMzBBODY2MjU2Mjg2MDA3MTA0QTMzNgorOjEwNUI3MDAwNTUwMDQ0MUE3NTQxNDgyMjYyODQxNURCQjgwMjMyMEI4NQorOjEwNUI4MDAwQzkyMjg4MjExN0RCOTQwODg0MTQwNzQ0MDE3NTQ5MDU0QworOjEwNUI5MDAwQzgzNEMwMjBEMTBGRDEwRjA4MDk0NzFEREJFQkMwQjJCQworOjEwNUJBMDAwOEUyMDFGREI4MjBFMEU0M0FGRUMyQkM0QTAwRkVFMEEzQgorOjEwNUJCMDAwMkRFNjI0MkE2Mjg0QzAyMDBBOTkwQjI5NjY4NEQxMEYxRAorOjEwNUJDMDAwQzAyMEQxMEY2QzEwMDREQjMwQzBEMDE4REI3OERBMjA5NQorOjEwNUJEMDAwMjUzMDAwMjIzMDA3MDg1ODBBMjg4MjRDREMyMDBCODAzMAorOjEwNUJFMDAwMDA4OTMxNzA5RTEyMUJEQjcyMEM0QTExQUJBQTI5QTJFQworOjEwNUJGMDAwODQwOTI5MEIyOUE2ODREMTBGMDlDOTUyNjg1MzI2MDBBQworOjEwNUMwMDAwOTEwNDE4REI2REMwQTEyRjgxMTIwMEFBMUEwQUZGMDJBRAorOjEwNUMxMDAwMkY4NTEyMUVEQjY3MEM0RDExQUVERDJDRDI4NDBDMkNBRgorOjEwNUMyMDAwMEIyQ0Q2ODREMTBGQzA4MTFGREI2NEI4OUEwQTBBNDdCNworOjEwNUMzMDAwMkVGMTEyMDBBMTA0MDA4ODFBMDhFRTAyMkVGNTEyMURBMgorOjEwNUM0MDAwREI1QzBDNEMxMUFEQ0MyQkMyODQwQjJCMEIyQkM2ODQxNAorOjEwNUM1MDAwRDEwRjAwMDA2QzEwMDREQjMwQzBEMDE5REI1NERBMjAwNworOjEwNUM2MDAwMjgzMDAwMjIzMDA3MDk4ODBBMjg4MjRDREMyMDBCODA2QgorOjEwNUM3MDAwMDAxQ0RCNEYwQzRCMTFBQ0JCMkFCMjg0MEEyQTBCMkE0NgorOjEwNUM4MDAwQjY4NEQxMEY2QzEwMDRDMDQxMThEQjQ5MTZEQjRCMENGNQorOjEwNUM5MDAwMjcxMUE2MjYyNjYwMzBBODcyMjUyMjg2MDA2MTA0QTM1QgorOjEwNUNBMDAwNTUwMDQ0MUE3NTQxMDgyMjIyODQwMjMyMEJEMTBGMDA5QworOjEwNUNCMDAwQzAyMEQxMEY2QzEwMDQxNURCQTUwMjQ5MTQyOTU2MTEyMAorOjEwNUNDMDAwMjQ1MjEyMDIwODQzMEY4ODExQzA3MzAwODEwNDAwMzY2OQorOjEwNUNEMDAwMUEwMDgxMDRDNzhGMDA3NzFBMDg3NzAzMDc0NDAxMDY2QQorOjEwNUNFMDAwNDQwMjI0NTYxMkQxMEYwMDZDMTAwNjZFMjMwMjYwMDA4RAorOjEwNUNGMDAwQUM2NDIwQTdDMEEwODUxMDEzREI3RTE2REI5NEMwNDBFNworOjEwNUQwMDAwQTZBQTJCQTJBRTBCMTk0MTY0OTA2NjY4OTE1RDY4OTJCOQorOjEwNUQxMDAwNTI2ODkzM0MyQUEyQUEyODNDN0YyODhDN0YwQTBBNEQwRAorOjEwNUQyMDAwMjk4MDAxMjg4MDAwMkFBQ0YyMDg4ODExMDk4ODAyNzVCMAorOjEwNUQzMDAwODk0NjJCM0QwMTI5QjAwMDJCQjAwMTA4OTkxMTBCOTkyMAorOjEwNUQ0MDAwMDI3QTk5MzRCODMzMkEyQTAwQjE0NDcyNDlCMTYwMDAwQQorOjEwNUQ1MDAwNEE3RkJGMDcxNURCN0Y2M0ZGQjkwMDAwMjUzQUU4NjM4MAorOjEwNUQ2MDAwRkZCMTAwMDAyNTNBRTg2M0ZGQTkwMDAwMjUwQTY0NjMzQgorOjEwNUQ3MDAwRkZBMUMwNUE2M0ZGOUMwMDAwNzA1RjA4MjUzNEZGMDUzNworOjEwNUQ4MDAwOEMxNDJDMzRGRTcwQUYwQjBBOEQxNDJFM0QwMTJBRTRDNgorOjEwNUQ5MDAwMDEyREU0MDBEQTQwNUJGRDUwNjNGRkE3RDEwRkQxMEY2NgorOjEwNURBMDAwNkMxMDA0MUFEQjA1MTlEQjAyMUNEQjZBMUJEQjZCQzAwMQorOjEwNURCMDAwODBDMDcxNjAwMDBEMDAwMDAwMjJBNDMwQjFBQTI5OUNBRgorOjEwNURDMDAwMTA3QjkxNUYyNjkyODY3OUMyMTU2RTYyNjJDMDIwNkQ0QgorOjEwNUREMDAwMDgwQUIxMjIwMDIxMDQwMDc0MUE3NjRCREI2M0ZGRUUzRgorOjEwNURFMDAwMjI5Mjg1MEQ2MzExMDMyNTE0NjQ1RkNGRDY1MDAzMkRENQorOjEwNURGMDAwNDM2REQ5MDM5ODIwQjQyMjA2NDQxNDZENDkyMjk4MjA5QgorOjEwNUUwMDAwOTgyMTk4MjI5ODIzOTgyNDk4MjU5ODI2OTgyNzk4MjhBRQorOjEwNUUxMDAwOTgyOTk4MkE5ODJCOTgyQzk4MkQ5ODJFOTgyRjIyMkNEOAorOjEwNUUyMDAwNDA2M0ZGOTcxRURBRTMyN0U2ODAyN0U2ODFEMTBGMDA2MworOjEwNUUzMDAwQzAyMDYzRkY4MzAwMDAwMDZDMTAwNEMwNjJDMDQxMTJFOAorOjEwNUU0MDAwREFERTFBREFEQTEzREI0NTJBQTAwMDIzMzIyRDE5REI1OQorOjEwNUU1MDAwM0YyQkFDRkUyOTkyQUU2RUEzMDI2MDAwOEUwOTBFNDA2RAorOjEwNUU2MDAwMkQxQUMyQzJDRDBFREMzOTJDMjUxNjY0QjA4OTVCRkYxOQorOjEwNUU3MDAwOUUxNURCM0IxQURBRTUyQjNBRTgwQTNBMDE1ODA1NzYxQgorOjEwNUU4MDAwMkIyMTE2MEFCQjI4RDNBMDJCNTYwMDU4MDU4RDhCNTAwQQorOjEwNUU5MDAwMEFCQjA4MkEwQTAwNTgwNThDMTVEQjMyMkQyMTAyMkM3QQorOjEwNUVBMDAwM0FFODBDM0MyODA0REQwMjJEMjUwMjlDNTA1ODA1ODQ1QworOjEwNUVCMDAwOEI1MEFBQkJDMEExNTgwNTg0MUNEQjJCMkQyMTAyMENFMgorOjEwNUVDMDAwM0MyODA2REQwMjEzREIyOTJEMjUwMjlDMzA1ODA1N0M3OQorOjEwNUVEMDAwOEIzMEFBQkJDMEEyNTgwNTdDMkEyMTAyQzBCNDBCQUFGMQorOjEwNUVFMDAwMDIwQTBBNEYyQTI1MDI1ODA1OTBEMTBGMjQyNDIzQzMwMQorOjEwNUVGMDAwQ0MyQzI1MTY2M0ZGNzYwMDE4REIyMTFDREIxRDE5REI3QgorOjEwNUYwMDAwMUUxQkRCMUMxN0RBRjA4NTIwMkUwQUZEMUZEQjFEMkQ2MgorOjEwNUYxMDAwMjAyRTI0RjQ3QTI0RjQ3RTI0RjQ4MjBFREQwMTI0RjQ2RAorOjEwNUYyMDAwODYyRTBBRjcwNzU1MjgwNkREMDJDMDc1MEVERDAxMDUyRAorOjEwNUYzMDAwMDUwNkFCNUJBOTU5QzBFOEFDNUMyNEM0QUIwRUREMDIxRQorOjEwNUY0MDAwMjdDNEFDMkUwQURGQTg1NTI3QjRFQzBFREQwMTI0QjQxQgorOjEwNUY1MDAwRUJDMkUwMjc5NDJDMEVERDAyMjQ5NDJCMkUwQTgwMEQzOAorOjEwNUY2MDAwMEQ0NjI3NTQ2QzI0NTQ2QjBFREQwMjJEMjQyRTYzRkU0NworOjEwNUY3MDAwRkMwMDAwMDA2QzEwMDQyQTBBMzAyQjBBMDM1QkZGNEQ2MgorOjEwNUY4MDAwMTJEQUYzQzM5MDI5MjYxNkMzQTFDMEIzQzA4QTI4MjYwQgorOjEwNUY5MDAwMTc1QkZGNDhDMDNDQzNCMTJCMjYxNjFBREE4NzJBQTAyQworOjEwNUZBMDAwMjAyMzI2MTc2NEEwNzlDM0EyQzBCMTVCRkY0MkMzQTIxRAorOjEwNUZCMDAwQzBCMTVCRkY0MEMzQzIyQzI2MTZDMkFGQzBCMTIzMjZCRQorOjEwNUZDMDAwMTc1QkZGM0NDMjhGMjgyNjE2QzBGRTJGMjYxN0MyRTJBMQorOjEwNUZEMDAwMkUyNjE2MkEwQUExQzBCMUMwRDgyRDI2MTc1QkZGMzU4MAorOjEwNUZFMDAwMkEwQUExMkEyNjE2QzNBNkMwQjNDMTkyMjkyNjE3NUI4NgorOjEwNUZGMDAwRkYzMUMzQzYyQzI2MTZDMUIzMkEwQUEyMkIyNjE3QzAwRQorOjEwNjAwMDAwQjM1QkZGMkMyOTBBQTIyOTI2MTZDMTg1MjgyNjE3QzJCMAorOjEwNjAxMDAwRkIyRjI2MTZDMEU3MkUyNjE3MUREQURBMkQyNjEwRDEwMworOjEwNjAyMDAwMEZDM0EyQzBCMzVCRkYyMzYzRkY4MjAwNkMxMDA0MUM4QworOjEwNjAzMDAwREFBNDFCREE5MTE4REFENDE3REFENTE2REFENTE1REExQworOjEwNjA0MDAwRDVDMEUwQzBENDE0REFBMDFGREE1Q0MwMjg4RkYwNkQ5MAorOjEwNjA1MDAwMkEzNkRBQzBEOUMwN0M1QjAyMEZDOTBDMUNEQTlBMEM1NAorOjEwNjA2MDAwOUMyOEE4QzNBNkMyMkEzNjgwMkEyNTg0QTRDMkE3Q0MwRAorOjEwNjA3MDAwMkQyNDhDMkIyNDhBMkIyNDg3MkUyNDhCQjFCQjJFMzZFNworOjEwNjA4MDAwOUYyQzM2OUUyQzM2OURCMUFDMUNEQTdCMUJEQUMzQzAyQworOjEwNjA5MDAwMjg2RDJBMzNEQUMwRDlDMDdDNUIwMjBGQzkwQzFDREEyOAorOjEwNjBBMDAwODkwQzlDMjhBOEMzQTZDMjJBMzY4MDJCMjU4NEE0QzJBQQorOjEwNjBCMDAwQjFCQkE3Q0MyRDI0OEMyRTI0OEIyQTI0OEEyRTM2OUY2QworOjEwNjBDMDAwMkMzNjlFMkMzNjlEQjFBQ0MwNzkxOURBNzkxQkRBQjUyNQorOjEwNjBEMDAwMTNEQUIzMUFEQUIzMThEQUI0MTREQTdBMTZEQUI0MDRDMworOjEwNjBFMDAwRjQyODEyREFCMzA0NjYwQzA0MDUwNkEyNTJBODU4QUFEMgorOjEwNjBGMDAwNUFBMzUzOUIzMDI5QTUwMDI3ODQ4QUMwOTFDMEE1MkFBMgorOjEwNjEwMDAwODQ4QzI5ODQ4QjE3REFBQzE4REFBQkE3NTcyNjM2MUQ5NgorOjEwNjExMDAwMjYzNjFFMkUzNjFGMTZEQUE5MTNEQUE5QTY1NTA0MzMyMQorOjEwNjEyMDAwMEMyODI2QzgyRTc1MDAyRDU0QUMyRTU0QUIyRTU0QUEyNAorOjEwNjEzMDAwMjMyNkU2MjMyNkU1MkUyNkU3RDEwRjAwNkMxMDA2MTM1MgorOjEwNjE0MDAwREE4NzE3REE4MjI0NzIzRDIyMzI5MzdGMkYwQjZEMDg5MworOjEwNjE1MDAwMDUyODMyOTM3RjhGMDI2M0ZGRjNDMEM0QzBCMDFBREEwMAorOjEwNjE2MDAwMTZDMDUxRDk0MDA0NTkzOTI5QTQyMDZFNDQwMjBCQjVGOAorOjEwNjE3MDAwMDJDMzI4MUVEQTExRERCMDI1RTQyMjA1MkQzOTJERTRGNQorOjEwNjE4MDAwMjFDMDUwMUVEQTkwMTlEQTgwMThEQTgwMTZEQTgyMURFMgorOjEwNjE5MDAwREE4RTk0MTAyQTcyNDUxN0RBNEM2REE5NEJENDUwQjM5RAorOjEwNjFBMDAwNTU3QTVCMTdERjUwNzU2QjA3MUZEQTAzOEZGMDBGNUZBRgorOjEwNjFCMDAwMEMxMkRBNDQwMkYyMjhBRTIyMjJENjgxRDU0MDEzREEzQworOjEwNjFDMDAwNDE3NDZCMDcxNUQ5RkQ4NTUwMDU0NTBDMDM1MzI4QjE2MworOjEwNjFEMDAwNDVBNzNGQTgzMkE5MzMyMjM2OUQyMjM2OUUyNDM2ODAxOQorOjEwNjFFMDAwMkIzNjlGMkJGNDhCMkNGNDhDMTREQTVDMjQ0MjREQzA5QworOjEwNjFGMDAwMzAwNDE0MTRDODRDNkQwODA2QjEzMzA0MTQxNEM4NDI5QQorOjEwNjIwMDAwNjNGRkYyMDAxNUQ5RUFDNDQwMDAzMTA0MUFEOUVCQzA4QgorOjEwNjIxMDAwRDE5M0EyMDBERDFBQzEzOEIwREQ5REEzMThEQTUwMkI0RQorOjEwNjIyMDAwODI0RDI5ODI0RTI5QTUxQzI4ODI1MzdBODcxRTJDNTQyMAorOjEwNjIzMDAwMDA4RTEwNkZFNDVEMTJEOUUwMkYyMTFEMjMyMTFDMkY0OQorOjEwNjI0MDAwMjUxQjA0MzMwQzIzMjUxQzIzMjUxQUQxMEZDMDYyMThFQgorOjEwNjI1MDAwREEzRjg4ODA3RTg3RDk4OTEwMjY1NDAwNkY5NDE5MUJGNQorOjEwNjI2MDAwRDlENjJBQjExQzBBMUExNDA0QUEwQzJBQjUxQzJBQjVCQworOjEwNjI3MDAwMUQyQUI1MUEyQUI1MUJEMTBGMUJEOUNGMkFCMTFDMEE2QQorOjEwNjI4MDAwMUExNDAzQUEwQzJBQjUxQzJBQjUxRDJBQjUxQTJBQjU1OAorOjEwNjI5MDAwMUJEMTBGMDAxQ0Q5QzkyQkMxMUQyREMxMUMyQkM1MUIyNworOjEwNjJBMDAwMDNERDBDMkRDNTFDMkRDNTFBRDEwRjAwNkMxMDA2MTk2RAorOjEwNjJCMDAwRDlDMjE0REEyNjEyREEyOTE1REE0NEM3M0ZDMEUwMkUxMworOjEwNjJDMDAwNTZBODJFNTZBOTJFNTZBQTJFNTZBQjIzMjYyOTE4RDlFMworOjEwNjJEMDAwRUFEQjEwMUNEQTNFQzBENDJBNDI0NTJEMTYwMTlDMTA4MAorOjEwNjJFMDAwMDBCMDg5MEE4ODBDMjg5NjAwNUJGRjk0MkIyMkUzMThFMworOjEwNjJGMDAwRDlCMjBCNUIxNDlCODQyQTIyRTQ4Qjg0QjFBQTBBNUE3QworOjEwNjMwMDAwMTQwQkFBMEM5QTg1MjkyMkU1MDk1OTE0OTk4NjJGMjI4MworOjEwNjMxMDAwQ0QwRjVGMTQ5Rjg3NUJGRjQ1NUJGRjE2MjM0NjNCQzE5NAorOjEwNjMyMDAwQjAxREQ5QTUxQ0RBMDMyQUQxMDIyQzQ2M0EwQkFBMDJDOQorOjEwNjMzMDAwMEEwQTRGMkFENTAyNTgwNDdDNUJGRUJGNUJGRTk4QzA1OAorOjEwNjM0MDAwNTBDMEIwMTZEOTlCMTREOUEzMTdEQTEyQzBDMEM3M0VFQgorOjEwNjM1MDAwOTMxMjJDMjYyREMwMzA2MDAwNDMwMDAwMDA3RjlGMEY1OQorOjEwNjM2MDAwQjE1NTA5MTkxNDY1OUZGNEMwNTAwQUE5MDI3RkE3RUYxRgorOjEwNjM3MDAwMThEOThGREE1MDA4NTgwQTI4ODIyQzJCMEEwMDBCODA3MworOjEwNjM4MDAwMDAwMDUxMDREMkEwQzA5MUM3QUYwMDk5MUEwQTk5MDMyNgorOjEwNjM5MDAwOTkxMkNFMzM2NDIwNjdEMzIwMkIyMDA3OTUxMzhDMTJEQgorOjEwNjNBMDAwMkE2MjgyN0NBODVGMThEOTgxMDg1ODBBMjg4MjJDREFEMAorOjEwNjNCMDAwNTAwQjgwMDBEMkEwNjQzRkRBOEEzMTBBOEExNDA0QUEwMgorOjEwNjNDMDAwMDFDODI5OEIyMTBCOEIxNDA0QkIwMTdCQTk0NUREQTBERgorOjEwNjNEMDAwN0E3QjA4MUREOTc5MkREMjAwMERBRDBDREIzMDE5RDk4RgorOjEwNjNFMDAwNzMxQUQ5QjgyODEyMDMwQURBMjgwODhDMDIxREQ5RjVDNQorOjEwNjNGMDAwMDk4ODBBMjg4MjNDMERBQTA4MEI4MDAwNjUyRjk3RDNENAorOjEwNjQwMDAwMjBDMEIwNjNGRjk3Q0I1M0IxNTUwMDUwMDQwQTA5MTk1RgorOjEwNjQxMDAwNjNGRjQ5MDBEQUIwN0I3QjA3MUFEOTY3OEFBMDBBQkEwMgorOjEwNjQyMDAwMEMxQkQ5QTg4QzMxMEJBQjI4MEM4QTE0MUNEOUU2QUNGOAorOjEwNjQzMDAwQkIxQ0Q5RTUwNEFBMDEyQkM2ODE2M0ZGOTA3RkE3QzdDNworOjEwNjQ0MDAwNjNGRjYyMDA2QzEwMDQyNzIyMUVDMDgwMDhFNDMxMUIyOQorOjEwNjQ1MDAwRDk1ODAwMDIwMDJBQjI4MjE5RDk1ODAwMzEwNEMwNjEwQgorOjEwNjQ2MDAwMDA2NjFBMjk5MTAyMEE2QTAyMkFCNjgyMDlFNDMxMTVFNQorOjEwNjQ3MDAwRDlCMzBDMzgxMUE4NTMyODMyODIyNDMyODQyQThDRkNEOAorOjEwNjQ4MDAwNzg0MTEwMjkyMTAyMkEzNjgyOTdBMDA5NjkwMjI5MjUxQworOjEwNjQ5MDAwMDJEMTBGMDAyQjIxMDIyQzMyODUwQjZCMDIyQ0NDRkM3RAorOjEwNjRBMDAwMkMzNjgyOTdDMDJCMjUwMkQxMEYwMDAwNkMxMDA0QzAzRgorOjEwNjRCMDAwRTcxREQ5M0IxQ0Q5M0QwRDQ5MTFENzIwOEIyMjhBMjBERAorOjEwNjRDMDAwMEI0QjBCRDJBMDA3QTgwQzlCNzIyODhDRjRDODM0NkYxRQorOjEwNjREMDAwOEUwMjYwMDBBMjFGRDkzM0EyOThBRjdCNzhCMzM0Qzk3MworOjEwNjRFMDAwM0RDMDgxQzBGMDAyOEYzODBGMEY0MkM5RkEyQ0Q2N0UxMgorOjEwNjRGMDAwRDUyMDZENEEwNTAwMzA4ODAwNTA4Qzg4NzAwODk4MDhCNworOjEwNjUwMDAwNzhCMTZDRDJBMDk4NzBEMTBGQzBGMDAzOEYzODdGRTBDMworOjEwNjUxMDAwREU2M0ZGRDgwMjdCMENBRkJCMEI5OTBDNjQzMDQ2RDgwRQorOjEwNjUyMDAwMzBDMEYxQzA1MDAyRjUzODA1MDU0MjY0NTA3OTJDRDZEMAorOjEwNjUzMDAwN0UwQjM2MTIyRjZDMTAwRjRGMzY2REZBMDUwMDgwODhENworOjEwNjU0MDAwMDAyMDhDMDY0NDBDQzA4MTI1MEEwMDAzQjIwODIzN0M3RAorOjEwNjU1MDAwMEMwMzg1MzgwNTA1NDI2NDUwNTkyQ0Q2N0U2RDRBMDVEQQorOjEwNjU2MDAwMDAyMDg4MDAzMDhDRDJBMEE3OThCQzg4OTg3MEQxMEZFQQorOjEwNjU3MDAwRDJBMEJDNzk5OTcwRDEwRkQyMzAyQkFEMDhDMEYxQzAzOAorOjEwNjU4MDAwNTAwQkY1MzgwNTA1NDJDQjU1MkNENjdFMDgzRjE0QzE3QgorOjEwNjU5MDAwNjAwRjY2MEMwNjQ2MzZEMzBGNkQ2QTA1MDAyMDg4MDAzMgorOjEwNjVBMDAwQjA4QzgyNzA2M0ZGMkQwMEMwNTAwM0Y1Mzg3NUUwODAxOQorOjEwNjVCMDAwNjNGRjdBMDBDMDYwMDI4NjM4NzZFMEEwNjNGRjlBMDAyRAorOjEwNjVDMDAwQzA1MDAzRjUzODc1RTBDMzYzRkZCRDAwNkMxMDA0RDZGRQorOjEwNjVEMDAwMjA2ODUyMEY2OTUzMjREQTIwREIzMERDNDA1ODAwRjA4OQorOjEwNjVFMDAwRDJBMEQxMEZEQTIwREIzMERDNDA1ODAwRUQ5QTI0MjQxMQorOjEwNjVGMDAwMjQwRUMwMjEyMjY0MEZDMDIwRDEwRjAwQjgzQkIwNEM0NAorOjEwNjYwMDAwMkEyQzc0ODkyNDJEMjAwRTJFMjAwRkE0RERCMUVFMkUwRAorOjEwNjYxMDAwMjQwRkIwREQyRDI0MEUyODkwMDcyRDkwMDNBNDg4QjAwMAorOjEwNjYyMDAwODhCMUREMkQ5NDAzMjg5NDA3NUJGRkEwNjk1MTFEQzAzQworOjEwNjYzMDAwRTA4MjI0MkE2MDBGMThEOTY2MkEyNDAzMjk2MDBFOEY2RAorOjEwNjY0MDAwMjAyOTI0MDcwOEZGMDI5RjIwOUU2NEQxMEZDMDIwRDE3QgorOjEwNjY1MDAwMEYwMDAwMDA2QzEwMDQ5NDIzMTlEOTVFQzBCMzA4M0FFRgorOjEwNjY2MDAwMTEwQkFBMDI5OTIwMTlEOEQyOUEyMTE2RDhEMEMwNTA1RAorOjEwNjY3MDAwMjg5MjlEMjU2NEEyMjg4QzE4Mjg5NjlERDEwRjAwMDA5MQorOjEwNjY4MDAwNkMxMDA0MjgyMDY2QzAzODIzMjQwNkI3ODgyODI0NjZBNgorOjEwNjY5MDAwRDEwRjAwMDA2QzEwMDYwMzVBMEMwRDM2MTEwRDVDMTE2MQorOjEwNjZBMDAwRDgyMDhCMjI4MjIxMENCQjBDMDY1NTBGOUI4MjAyMzIxNAorOjEwNjZCMDAwMEI5MjgxMTNEOEJDRDkyMEEzOEY2NDUwNTMxQ0Q4QjgzNworOjEwNjZDMDAwQzBENzFCRDhCOUEyNTZDMEUxMjkwQTAwMDRFOTM4MDk4RAorOjEwNjZEMDAwMDk0Mjc2RjM0QTA0NDMwMkM5OUUyQkM2N0U2REFBMDU4MQorOjEwNjZFMDAwMDAyMDg4MDAzMDhDODk4MUE5NTkwOUZBMEM2NEEwNzlBRQorOjEwNjZGMDAwOTk4MThBODJDOEFERDI5MEQxMEZDMDYwMDJFNjM4NzYwNworOjEwNjcwMDAwRDBEQTYzRkZENEMwMjBCQzg5OTk4MTk5ODA5MjgyRDE2QworOjEwNjcxMDAwMEY3RjIzMDQyOTJERjg5OTgxNjVCRkQ5NjNGRkU1MDAxOAorOjEwNjcyMDAwMDI4RjBDQTNGRjBGMzMxMjkzMTAwM0FBMENEMzQwQ0I5QworOjEwNjczMDAwOUUyQkM2N0U4NjEwNkQ2QTA1MDAyMDg4MDAzMDhDQkNCQQorOjEwNjc0MDAwODIyOTBBMDAwNEYzMDgyNDBBMDEwMzQ5MzgwOTA5NDI4RQorOjEwNjc1MDAwQ0E5ODJCQzY3RTZEQUEwNTAwMjA4ODAwMzA4QzBGNTk4MAorOjEwNjc2MDAwMENBOTg5QkM5OTk5ODE2M0ZGODdCQzg5OTk4MTYzRkZEMgorOjEwNjc3MDAwODBDMDYwMDJFNjM4NzZEMEJBNjNGRkI0QzA3MDAyNDdDQQorOjEwNjc4MDAwMzg3N0QwRDA2M0ZGQ0EwMDZDMTAwNDE0RDg5NUMxNTI3QQorOjEwNjc5MDAwQTQyNENBMzAyODIyMUQ3MzgxMUIyOTIxMDJDRDk1MkFFOQorOjEwNjdBMDAwMzAwMDc1QTkxMkRBMjAwMzNCMDIyQzMwMDcyRDBBMDJCMworOjEwNjdCMDAwNTgwMUMyNjUzRkRERDEwRjJCMzAwNzAzQkIwQkRBQjBBOAorOjEwNjdDMDAwNzRCMzAyMkFCREY4RDNBMDYzRkZDNjAwNkMxMDA0Mjk3RAorOjEwNjdEMDAwMjAwNkMwNzA2RTk3NDEyOTIxMDJDMDhGMkEyMDE0QzA2NAorOjEwNjdFMDAwQjYyQjI0MDYwNkFBMDIyQTI0MTQ3OTgwMDIyNzI1MDI0MQorOjEwNjdGMDAwMkEyMjFFMkMyMjFEN0FDMTBFQzhBQkRBMjBEQjMwMkNENworOjEwNjgwMDAwMEEwMDAzM0QwMjVCRjgxNDY0NTA3NTJEMjEwMjBEMEQ0MgorOjEwNjgxMDAwNENDOUQzQzAyMEQxMEYwMDAwMkU5Q0ZCNjRFMDgyMkYxNgorOjEwNjgyMDAwMjEwMjBGMEY0QzY1RjA5MTFBRDg2MjFDRDg2MDI5QTI4MgorOjEwNjgzMDAwOUVDMDhBNzk4QjVEMkJDMjI2NjhCMDA0OEQyMDdCRDlERgorOjEwNjg0MDAwNTIyOUEyOURDMEYzNjQ5MDRBOTc5MDFERDg3MzJFMjFCRgorOjEwNjg1MDAwMDQ5RDk2MDhFRTExMEZFRTAyOUU5NzlFOTExOEQ4NkYzOAorOjEwNjg2MDAwQzBFNTI3QzRBMjJFMjQwNjJCQTI5RDJGMjEwMjJCQkNGQgorOjEwNjg3MDAwMzAwOEZGMDIyRjI1MDIyQkE2OURDMDIwRDEwRjAwMDA1QgorOjEwNjg4MDAwMDAyRjMwMDA2OEY5MzhEQTIwREIzMERDNDA1ODAwNDQ1MworOjEwNjg5MDAwNjNGRjc3MDAwMjJBMDIyQjBBMDY1ODAwRDMyMjBBMDA1RgorOjEwNjhBMDAwRDEwRjY1NTAxMDI4MzAwMDY4ODkyNDAyMkEwMjAzM0I2QQorOjEwNjhCMDAwMDJEQzQwNTgwMDNCQzAyMEQxMEZEMjcwRDEwRjAwMDA0NQorOjEwNjhDMDAwMkEyQzc0MDMzQjAyMDQ0QzAyNUJGRUY4NjNGRjNCMDA3RQorOjEwNjhEMDAwREIzMERDNDAyQTJDNzQ1QkZFRjVDMDIwRDEwRjAwMDBCOQorOjEwNjhFMDAwNkMxMDA0QzgzRjg5MjY4ODI5QTM5OTk5MjYwOTg4MEMyOQorOjEwNjhGMDAwMDgwODQ4MjgyNTI1Q0M1MkMwMjBEMTBGREI0MDJBMkM3RgorOjEwNjkwMDAwNzQ1QkY5M0REMkEwRDEwRjZDMTAwNEQ4MjBENzMwODIyRgorOjEwNjkxMDAwMjIwRDQ1MTEwNTIyMEM5MjgyNjQyMDc0MDc0MjBCMTM0QworOjEwNjkyMDAwRDgyMUQ0MjBBMzgzNzMyMzAyMjQyREY4ODU4MDc0NTFBOQorOjEwNjkzMDAwNENCQzgyQzA5MDZEMDgxNjAwNDA4ODAwNzA4Qzc3Mzk3RQorOjEwNjk0MDAwMDNENzIwQzA5MTg2ODA3NDM5MDFENDIwNzQ2MTAyNjMxQQorOjEwNjk1MDAwRkZFMkNBOThDMDk3QzA0MTFCRDhBMEMwQTAwQjhCMEMwNworOjEwNjk2MDAwMEI0QTM4MEEwQTQyQzlBQTFERDgwRTFDRDgwRjJDRDZDOQorOjEwNjk3MDAwN0VDMTQwRDMwRjZENEEwNTAwMjA4ODAwMzA4Qzk3ODA3RgorOjEwNjk4MDAwRDI3MEQxMEZCQzhGQzBFMDBGNEUzODdFOTBFMjYzRkYxMworOjEwNjk5MDAwRDZCQzgyOTI4MTkyODBDMDIwOTI4MkQxMEYwMDAwMDBFQQorOjEwNjlBMDAwNkMxMDA2QzBENzFDRDdGRTFCRDgwMDBENDkxMUQ3MjA4QworOjEwNjlCMDAwMkUyMjFGMjgyMjFEMEU0RTBCRDI4MDA3OEEwQzJFNzYwNworOjEwNjlDMDAwMUYyQUFDODBDODM0NkZBRTAyNjAwMENCMkYwQTgwMUEzOQorOjEwNjlEMDAwRDgwNEEyOUVBQTdBN0VBMzNGQzkzRkMwRTFDMDUwMDI1QworOjEwNjlFMDAwRTUzODA1MDU0MkNBNTUyQkM2N0VEQjIwRDMwRjZENEExQworOjEwNjlGMDAwMDUwMDMwODgwMEIwOEMyRTcyMURBRTlFMEVBNTBDNjQ3MgorOjEwNkEwMDAwNTA4NkQyODAyRTc2MURDMDkxMjk4NDAzRDEwRkMwNTBBQworOjEwNkExMDAwMDNFNTM4NzVEMEQzNjNGRkNEMTVEN0YxMDI3RTBDQTUwMQorOjEwNkEyMDAwRUU2NDMwNTFDMEExMjUwQTAwMDJBNTM4MDMzQTAyMDVFMAorOjEwNkEzMDAwMDU0MjY0NTA5MjJCQzY3RTBFMzUxMjk1MTAyNTVDMTBDRgorOjEwNkE0MDAwMDU0NTM2RDMwRjZENUEwNTAwQTA4ODAwMjA4Q0MwQTFFMworOjEwNkE1MDAwQTNFMkMwNTAyM0ZBODAwMzczMEMwM0E1MzhBRjczMDU3QgorOjEwNkE2MDAwMDU0MjY0NTA3MjJCQzY3RTg1MTAwNTQ1MEM2RDVBMDU5MworOjEwNkE3MDAwMDAyMDg4MDAzMDhDRDI4MEMwQTEwRTlCMENBQjdCQUY3NQorOjEwNkE4MDAwQkIyQjc2MUQyQTg0MDNEMTBGRDI4MEMwQzFBRjdEMkREMAorOjEwNkE5MDAwNzYxRDJDODQwM0QxMEYwMEQyMzAyRThEMDhDMEYxQzA5QQorOjEwNkFBMDAwNTAwRUY1MzgwNTA1NDJDQjU5MkJDNjdFMEEzRjE0QzE1RQorOjEwNkFCMDAwNjAwRjY2MEMwNjQ2MzZEMzBGNkQ2QTA1MDAyMDg4MDAwRAorOjEwNkFDMDAwRTA4QzIyNzIxRDYzRkYwM0MwNjFDMDUwMDM2NTM4NzVGRQorOjEwNkFEMDAwRDgwMjYzRkY2MjYzRkY1Q0MwNTAwMkE1Mzg3NUQwODc5RgorOjEwNkFFMDAwNjNGRjgxMDBDMDYwMDNGNjM4NzZEMEJGNjNGRkI5MDA1MgorOjEwNkFGMDAwNkMxMDA0MkEyMDE1MjkyMDE2MTREN0FGMEE5OTBDQ0I0NAorOjEwNkIwMDAwOUQyRTIwMEIwNEVEMDkyQkQxMUM4RjI4MDlCQzM2QUMxRgorOjEwNkIxMDAwQUEwQ0JCMEMyQkQ1MUMwQTBBNDcyQTI0MTVDQUFGOEIxQQorOjEwNkIyMDAwNDM4OTQyQjBBODAwOTEwNDAwODgxQUE4RkYwRkJCMDI1NQorOjEwNkIzMDAwOUIyNzhGMjYwRkI4MEM3ODNCMUFDMDIwRDEwRjAwMDA3RQorOjEwNkI0MDAwMjkyMTAyQzBBMjBBOTkwMjI5MjUwMkMwMjFEMTBGMDBFMQorOjEwNkI1MDAwOEIyNzYzRkZEQzJCRDExQzBDQUEwQzBBMEE0NzJBMjRDMgorOjEwNkI2MDAwMTVBQ0JCMkJENTFDQzlBRThCNDM4QzI4OEY0MkIwQUQ2NgorOjEwNkI3MDAwMDBGMTA0MDBERDFBQURDQzBDQkIwMjlCMjdEQTIwQjc3NAorOjEwNkI4MDAwRUI1ODAwMTlDMDIxRDEwRjlGMjc2M0ZGRUYwMDAwMDBEMQorOjEwNkI5MDAwNkMxMDA0MjgyMDNDNjQzMDQ3MDUzMDYwMDAwNzNFMDEzQgorOjEwNkJBMDAwMDUzRUIxNTYwNzY1MzkwNTQ5MjhDNzdGQTkzMzAzMDY1NQorOjEwNkJCMDAwNDEwNzY2MDNCMTY2MDYwNjQxQTYzMzdFODcxRTIyMjE4MQorOjEwNkJDMDAwMjUyOTFBRkM3MzJCMTUwMjM4MEMwOTgxNjAwMDA2M0UzQQorOjEwNkJEMDAwMDEwMjNFQjEyNDA2NDIzOTAzMjIwQUQxMEZEMjMwRDEzQworOjEwNkJFMDAwMEZDMDUxNjNGRkMwMDAwMDZDMTAwNDI3MjIxRUMwODAzQworOjEwNkJGMDAwMDhFNDMxMURENzZGMDAwMjAwMkNEMjgyMUJENzZGMDAzMgorOjEwNkMwMDAwMzEwNEMwNjEwMDY2MUEyQkIxMDIwQzZDMDIyQ0Q2ODJEMgorOjEwNkMxMDAwMEJFNDMxMTlEN0YyMEMzQTExQUE5MzI4MzI4Mjk3ODBFQgorOjEwNkMyMDAwMjUzMjgyMjQzMjg0QjQ1NTI1MzY4Mjc1NDEwQTI5MjFDMQorOjEwNkMzMDAwMDIwOTY5MDIyOTI1MDJEMTBGMkEyMTAyMkIzMjgzMEE3NworOjEwNkM0MDAwNkEwMjJCMzY4MjJBMjUwMkQxMEYwMDAwNkMxMDA0MTkyQgorOjEwNkM1MDAwRDc2MzI3MjIxRUMwODAwOTc3MDIwOEU0MzExREQ3NTQ2QworOjEwNkM2MDAwMDAwMjAwMkNEMjgyMUJENzU0MDAzMTA0QzA2MTAwNjZBMAorOjEwNkM3MDAwMUEyQkIxMDIwQzZDMDIyQ0Q2ODIwQkU0MzExOUQ3RDczNworOjEwNkM4MDAwMEMzQTExQUE5MzI4MzI4Mjk3ODAyNTMyODIyNDMyODRDQQorOjEwNkM5MDAwQjQ1NTI1MzY4Mjc1NDEwQjJBMjEwMjBBNkEwMjJBMjUzQgorOjEwNkNBMDAwMDJEMTBGMDAyQjIxMDIyQzMyODMwQjZCMDIyQzM2ODI3NworOjEwNkNCMDAwMkIyNTAyRDEwRjAwMDAwMDZDMTAwNDFCRDczRDBDMkFCRAorOjEwNkNDMDAwMTFBQkFBMjlBMjg2QjQzODc5OEIyMjFCRDczQTE5RDdERgorOjEwNkNEMDAwNjEwQjJCMEEyQkIyQTMwOTI5MDg2OEIwMDI3NEI5MEQwNQorOjEwNkNFMDAwMjk5RDAxMjk5MDFGNkU5MjA4MjJBMjg1RDEwRkMwMjBGNAorOjEwNkNGMDAwRDEwRkM4OTJDMDIwRDEwRkRBMjA1QkVGMzVDMDIwRDE3MAorOjEwNkQwMDAwMEYwMDAwMDA2QzEwMDQxNEQ3MkEyODQyOUUxOUQ3MjdDMAorOjEwNkQxMDAwNkY4ODAyNjAwMEJBMjk5MjI2Njg5MDA3OEEyMDA5QUEyMworOjEwNkQyMDAwMEM2NUEwQUMyQTQyOURDMERDNjRBMEE0MkIyMDBDMTlFOQorOjEwNkQzMDAwRDcyMTBDQkMxMUE0Q0MyRUMyODYwOUI5MEE3RUQzMDI3RAorOjEwNkQ0MDAwNjAwMDlBMjk5MkEzNjg5MDA3OEQyMDA5REQwQzY1RDAxOAorOjEwNkQ1MDAwOEMyNUMyODU2NDUwODYyRDIxMDRDMDMwNkVEODBEMkM0MAorOjEwNkQ2MDAwMjA2NkI4Q0MwQzBDNDcyQzI0NjY2NUMwN0IxQ0Q3OUNENQorOjEwNkQ3MDAwMThENzI4MUFENzFFMTlENzJGMURENzI0QzBFNDlFNTEyMworOjEwNkQ4MDAwOUQ1MDhGMjA5MzU3OTM1NTk5NTM5QTU2OUE1NDA4RkZDNAorOjEwNkQ5MDAwMDIxQUQ3M0E5RjUyODgyNjlGNUE5RTU5OUQ1ODkzNUU1MQorOjEwNkRBMDAwOUM1RDkzNUM5QTVCMDgwODQ4MDU4ODExOTg1RkMwRDg4MQorOjEwNkRCMDAwMUZENzA4MENCOTExQTQ5OTI4OTI4NUFGQkYyM0Y0Q0YyRgorOjEwNkRDMDAwMjg4QzQwMjg5Njg1OEUyNjJEMjQwNjlFMjlDMDIwRDEwOQorOjEwNkREMDAwMEZDQTMzREEyMEMwQjY1QkZGODRDNzJGRDEwRkM5M0E4MAorOjEwNkRFMDAwREEyMDVCRkY4MUM3MkZEMTBGREJEMDVCRkUxQTIzMjQ5MworOjEwNkRGMDAwNjYyQjIwMEM2M0ZGNzUwMEM3MkZEMTBGQzcyRkQxMEY1MworOjEwNkUwMDAwNkMxMDA0Qzg1QjI5MjAwNjY4OTQxQzY4OTYwN0MwMjA5MworOjEwNkUxMDAwRDEwRkMwMjBEMTBGREEyMERCMzBEQzQwREQ1MDJFMEE0QworOjEwNkUyMDAwMDA1QkZFNkFEMkEwRDEwRjJFMjAwQzE4RDZFMTBDRUYyOQorOjEwNkUzMDAwMTFBOEZGMjlGMjg2QzA4ODc5OEI3NTFBRDZERTBBRUE3NgorOjEwNkU0MDAwMEEyQUEyQTM2OEEwMDQ4QjIwN0FCOTY0MjNGMjg1NjQ3RAorOjEwNkU1MDAwMzA1RTFDRDZFODJBMEE4MDJEMjA2ODI5MjA2NzI4MjE2OAorOjEwNkU2MDAwMDQwQjk5MTEwNDg4MTEwOTg4MDIwOEREMDJDMDk0MjhENgorOjEwNkU3MDAwNEExMDA4REQwMjE4RDZFMDk5MzE5ODMwOEIyQjlBMzdFQQorOjEwNkU4MDAwOUQzNDBDQkIwMjlCMzJDMEMwOUMzNTlDMzYyQTJDNzRBRQorOjEwNkU5MDAwREI0MEMwRDMxOEQ2Q0YyOUYyODVBOEVFMjk5QzIwMkM0MAorOjEwNkVBMDAwRTRDRjI5RjY4NTJEMjQwNkRENDA1QkZERkFEMkEwRDE4MgorOjEwNkVCMDAwMEZEQTIwREJFMDVCRkY0Q0MwMjBEMTBGNkMxMDBBRDY0QworOjEwNkVDMDAwMzAyQTIwMDY5NDExMjhBQ0Y4NjU4Mzg3MkIyMTIyQzAzNAorOjEwNkVEMDAwRjIyQTIxMjQ2NTUwMDgyQUFDMDEwQTBBNEYyQTI1MjRFNworOjEwNkVFMDAwN0FCQjAyNjAwMzdGMkMyMTAyMEMwQzRDNjVDMzE5MkU2NworOjEwNkVGMDAwMjIxNThEMzJDMDkxMEVERDBDNjVEMzkwODgzODFFRDZEOAorOjEwNkYwMDAwQUM2NDgzNkI4QzM3QzBCOEMwOTYwQ0I5Mzk5OTE0QjQ5MworOjEwNkYxMDAwOUE5QTEyMEQ5OTExOTkxMzhGNjcxOEQ2QTdDOUZCMjg1MQorOjEwNkYyMDAwODAyMTdGODMxNjhCMTQyQzIyMDAyQTIwMEM1QkZGNjJBOQorOjEwNkYzMDAwRDRBMDY0QTNBODhGNjc2MDAwMjgwMDAwMkIyMDBDODlEMAorOjEwNkY0MDAwMTIwQ0JBMTFBRUFBMkNBMjg2MURENjlBN0M5QjNFMERCRAorOjEwNkY1MDAwQkQwQTJERDJBMzY4RDAwNDg4MjA3RDg5MzAyNEEyODU2MworOjEwNkY2MDAwNjQ0MzY0MjcyMTJFMDdGNzM2MDdGOTBDNkY5RDAxRDc3QworOjEwNkY3MDAwRjBEQTIwREI3MEMxQzQyRDIxMUY1QkZGMDU4OTI2ODg1NAorOjEwNkY4MDAwMjdEREEwMDk4ODBDN0E4QjE3OUExMDYwMDAwNkMwNDA5NAorOjEwNkY5MDAwNjNGRkNDMDAwMERBMjA4QjEwNUJGRUQ1OEQxMDY1QTI1QworOjEwNkZBMDAwNjdDMEUwOUU0ODhDNjQ5QzQ5OEI2NThBNjY5QjRBOUFDMAorOjEwNkZCMDAwNEI5NzQ1OEY2NzdGNzMwMjYwMDEyMENENTI5RDEwREE5OQorOjEwNkZDMDAwMjBEQjMwMkMxMjAxNUJGRTc2OEQxMEMwNTFENkEwOEZENQorOjEwNkZEMDAwQTdDMEMwOEE2ODk3NEQ5QTRDODg2OTg5NkE5ODRFOTk2QgorOjEwNkZFMDAwNEY4RTZBOEE2OUFFN0U3N0VCMDFCMUFBOUU2QTlBNjk3MgorOjEwNkZGMDAwOEI2MEMwQTAwQjhFMTQ3N0I3MDFDMEExQzA5MUMwODQ3NAorOjEwNzAwMDAwOTMxNTlEMTc5NTE2QzBEMDI1MjAzQ0MwMzAwODU4MDExNworOjEwNzAxMDAwMDg5MzM4QzA4MjA4MzMxMDA4NUIwMTA1MzU0MDBCOUQ4QQorOjEwNzAyMDAwMzgwN0REMTAwQkFCMTAwRTE5NDAyQTIxMUYwNzk5MTBFRAorOjEwNzAzMDAwMDNERDAyMERCQjAyMDU1MzEwMDkzMzAyMEE1NTExMjk2NQorOjEwNzA0MDAwMjEyNTBBMkExNDA5MjkxNDA0OTkxMTBBOTkwMjA5MzNERAorOjEwNzA1MDAwMDI4QTJCMjkyMTA0MEJBQTAyMUJENkUyMDg5OTExMDlFNgorOjEwNzA2MDAwNTUwMjA4NTUwMjBCQUEwMjlBNDA4OTIwODgxNDA4OTlGMworOjEwNzA3MDAwMTEwOTg4MDIxOUQ2NjMxREQ2REMwOTg4MDI5ODQxOEI1NAorOjEwNzA4MDAwMkE5MzQ2OTU0NzgzMTUwREJCMDI4NTE2OEQxNzlCNDRBMQorOjEwNzA5MDAwOEE2NTg5NjZBQUNBQTk3Qzc3Q0IwMUIxQUEwN0ZCMENDRAorOjEwNzBBMDAwOUM2NjlBNjU4ODI2OEUyOUFEODc5NzI2MDdFRTBDMEU3QQorOjEwNzBCMDAwMEU0ODJFMjUyNTlCNjcyQjIwMEM4NzEzMUVENjNEMENEMgorOjEwNzBDMDAwQjkxMUFFOTkyODkyODVBNzg4Mjg5Njg1MTdENjQxQzAxMAorOjEwNzBEMDAwOTBBN0JCMjlCNENGODcxODYzRkUzQzAwOEM2MEMwRTA0QQorOjEwNzBFMDAwQzA5MUMwRjBDMDM0QzBCODJBMjEwNDI4MjAzQzA4QUFBRQorOjEwNzBGMDAwMTEwQjhCMDEwMzgzMDEwMzlGMzgwQjlCMzlDMDMyMDhBRQorOjEwNzEwMDAwRkYxMDAzODgwMTA4OUUzODBDODgxNDA3RUUxMDBGRUU1QworOjEwNzExMDAwMDIwMzg4MDEwODk4MzkwNUJGMTAyOTIxMUYwQUJCMTFGNQorOjEwNzEyMDAwMDc4ODEwMDhGRjAyMEJBQTAyMThENjM1MDkyOTE0MDM5NAorOjEwNzEzMDAwQUEwMjJCMjEyNTgzMjAwQjJCMTQwNEJCMTEwODMzMTEyOQorOjEwNzE0MDAwMEZCQjAyMEI5OTAyOEIxNDhGMkEwQjMzMDIwODMzMDJGOAorOjEwNzE1MDAwOEIyQjY0NzA4Njg4Njg5NzREOTg0Qzg3Njk4ODZBOTNGMgorOjEwNzE2MDAwNDE5OTQ2OTc0RTk4NEZDMDcwNzdDNzAxQzA3MTlBNDdCMgorOjEwNzE3MDAwMThENjlFMEI3QzEwMENFQzAyMDhGODAyOTg0NDE4RDYyNgorOjEwNzE4MDAwOUIwQ0JDMDIwOENDMDI5QzQwMkEyMDBDMjk1Q0ZFQzA0RgorOjEwNzE5MDAwODAxRkQ2MDcxQ0Q2MEYwQ0FFMTEyQjIxMjRBQ0FBQUYzMgorOjEwNzFBMDAwRUVCMEJCOEYxMzJDRTI4NTI4QTRDRkFGQ0MyQ0U2ODVBNAorOjEwNzFCMDAwMkEyMjE1MkIyNTI0QjFBQTJBMjYxNTY0OTBEQkM5RDJEMAorOjEwNzFDMDAwOEYyNjJFMjIwOTBERkYwODJGMjYwNjBGRUUwQzBFMEUxRAorOjEwNzFEMDAwNDgyRTI1MjU2NTUwRTRDMDIwRDEwRjAwQzA3MDkzNDE5MgorOjEwNzFFMDAwOUY0NDk5NDY5QTQ3NzdDNzBBMUNENUYzMkNDMDIyQzAwMgorOjEwNzFGMDAwODEwQzg3MzgxQ0Q2N0YwQjc4MTAwOEU4MDIwOEI4MDI4QgorOjEwNzIwMDAwMEM4ODAyOTg0MDYzRkY4MDAwQ0M1N0RBMjBEQjYwOEM0QQorOjEwNzIxMDAwMTE1QkZERTMyOTIxMDI2ODk4MDY2ODk0MDNDMDIwRDEyMAorOjEwNzIyMDAwMEYyQjIyMUVDMEEwMjkyMjFEMkEyNTAyN0I5OTAxQzBGNgorOjEwNzIzMDAwQjA2NEJGRTgxM0Q1REUyQ0IwMDcyOEIwMDBEQTIwMDMxNQorOjEwNzI0MDAwODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3NjNDMQorOjEwNzI1MDAwRkZDQTAwMDA2OEE3NzlEQTIwREIzMERDNDBERDUwNUIzNAorOjEwNzI2MDAwRkVFOEQyQTBEMTBGQzE2REMxOUQyOTI1MkM2MDAwMDQ3QworOjEwNzI3MDAwMjkyNTJDRDY5MDI2MjQ2NzJGMjQ2OERBMjBEQjMwOEMzMQorOjEwNzI4MDAwMTFERDUwMkUwQTgwNUJGRDUxRDJBMEQxMEZDMTY4QzEyMworOjEwNzI5MDAwQTgyQTI1MkM2M0ZGREQwMDAwMDBDOERGOEMyNjhCMjk3RgorOjEwNzJBMDAwQURDQzlDMjYwQ0JCMEMwQjBCNDgyQjI1MjUyQTJDNzQzMworOjEwNzJCMDAwREI2MDJDMTIwMTVCRkQ5NEQyQTBEMTBGMkEyQzc0OEJDMQorOjEwNzJDMDAwMTE1QkY2Q0REMkEwRDEwRkRBMjA1QkZFNDc2M0ZGMzgwOQorOjEwNzJEMDAwMDBEQTIwQzBCMTVCRkU4QjY1QUYyRDYzRkJFRERBMjBEOQorOjEwNzJFMDAwMkIyMDBDNUJGRTVBNjNGRjFGMDAwMDAwMTJENjQyODI2NworOjEwNzJGMDAwMjAwMjgyNTdDODIxNjNGRkZDMTJENjNFMDNFODMwMDQwNworOjEwNzMwMDAwRUUzMDA1QjEzMDkzMjA5NDIxOTUyMjYzRkZGQzAwMDBGQworOjEwNzMxMDAwMTBENjNBOTEwMDkyMDE5MzAyOTQwMzExRDYxMTgyMTA3MworOjEwNzMyMDAwMDFFQTMwQTIxMTAxRjAzMUMwNDAwNEU0MTYwMDAyMDA2RAorOjEwNzMzMDAwMTFENjMzODIxMDIzNEEwMDAzMjIwMjkyMTAxMUQ1RkQ4OAorOjEwNzM0MDAwQzAyMTkyMTAwNEU0MzE4NDAzODMwMjgyMDE4MTAwMDA5MQorOjEwNzM1MDAwRDIzMDAxMjMwMDAwMDAwMDEwRDYyQTkxMDA5MjAxOTM0MAorOjEwNzM2MDAwMDI5NDAzMTFENjAwODIxMDAxRUEzMEEyMTEwMUYxMzExQQorOjEwNzM3MDAwQzA0MDA0RTQxNjAwMDIwMDExRDYyMTgyMTAxM0Q1QTdFNAorOjEwNzM4MDAwMDMyMjAyOTIxMDA0RTQzMTg0MDM4MzAyODIwMTgxMDAwQgorOjEwNzM5MDAwMDBEMzMwMDEzMzAwMDAwMDEwRDYxQjkxMDA4MTAxNjUzRAorOjEwNzNBMDAwMTA0OTgxMDI2NTEwNDQ4MTAzQ0YxRjkyMDE5MzAyOTQxQQorOjEwNzNCMDAwMDMxMUQ1RUU4MjEwMDFFQTMwQTIxMTAxRjIzMUMwNDA3MgorOjEwNzNDMDAwMDRFNDE2MDAwMjAwMTFENjBEODIxMDEzRDU4RTAzMjI5QworOjEwNzNEMDAwMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxQzAxMDkxMDNGRAorOjEwNzNFMDAwOTEwMjkxMDE4MTAwMDBENDMwMDE0MzAwMTJENUJEQzA0QgorOjEwNzNGMDAwMzAyODM3NDAyODM3NDQyODM3NDgyODM3NEMyMzNEMDE2OAorOjEwNzQwMDAwNzIzM0VEMDMwMjAwNjNGRkZDMDAwMDAwMTBENUZGOTExMgorOjEwNzQxMDAwMDA5MjAxOTMwMjk0MDMxMUQ1RkQ4MjEwOTIxMDExRDVCMAorOjEwNzQyMDAwQUY4MzEwMDMyMjAyOTIxMDExRDVGQTEyRDVDMTkyMTAyNworOjEwNzQzMDAwQzA0MDA0RTQxNjAwMDIwMDExRDVGMTgyMTAxM0Q1QTg1MworOjEwNzQ0MDAwMDMyMjAyOTIxMDA0RTQzMTg0MDM4MzAyODIwMTgxMDA0QQorOjEwNzQ1MDAwMDBENTMwMDE1MzAwMDAwMDZDMTAwMjZFMzIyRkQ2MjA5MAorOjEwNzQ2MDAwMDU2RjA0MDQzRjA0NzQ1QjJBMDU0NDBDMDA0MTA0MDBDQQorOjEwNzQ3MDAwMzMxQTIyMEEwMDZENDkwRDczNjMwNDAzNjYwQ0IxMjJBRQorOjEwNzQ4MDAwMEYyMjExMDMxMzE0NzM2MzAyMjIyQzAxRDEwRkM4M0I4NgorOjEwNzQ5MDAwRDEwRjAwMDA3MzYzMENDMDIxRDEwRjAwMDAwMDAwMDA2OQorOjEwNzRBMDAwNDQ0OTU2MzBDMDIwRDEwRjZDMTAwMjAwNDAwNDZCNEM5MAorOjEwNzRCMDAwMDcwMzIzMTgwMjAyMTlEMTBGMDIwMzE5QzAyMEQxMEZBQworOjEwNzRDMDAwNkMxMDAyMDJFQTMwRDEwRjZDMTAwMkNDMjUwM0YwMzFBRgorOjEwNzREMDAwNjAwMDBGMDA2RjIyMDUwM0YxMzE2MDAwMDU2RjIzMDU4NgorOjEwNzRFMDAwMDNGMjMxMDAwMjAwRDEwRjZDMTAwMkNDMjUwMkYwMzAwMworOjEwNzRGMDAwRDEwRjAwMDA2RjIyMDQwMkYxMzBEMTBGNkYyMzA0MDI3QworOjEwNzUwMDAwRjIzMEQxMEZDMDIwRDEwRjZDMTAwMjIyMEEyMDIzMEFDMgorOjEwNzUxMDAwMDA2RDI4MEUyODM3NDAyODM3NDQyODM3NDgyODM3NEMzNAorOjEwNzUyMDAwMjMzRDAxMDMwMjAwRDEwRjZDMTAwMjAyRTQzMUQxMEZBMAorOjEwNzUzMDAwMEEwMDAwMDA0MzY4NjU2QzczNjk2RjIwNDY1NzIwNDQ1OQorOjEwNzU0MDAwNDU0MjU1NDczRDMwMjAyODQyNzU2OTZDNzQyMDU3NjU4NworOjEwNzU1MDAwNjQyMDRGNjM3NDIwMjAzODIwMzEzNTNBMzUzMDNBMzU3NQorOjEwNzU2MDAwMzAyMDUwNDQ1NDIwMzIzMDMwMzgyMDZGNkUyMDYzNkMwRAorOjEwNzU3MDAwNjU2RjcwNjE3NDcyNjEzQTJGNjg2RjZENjUyRjY2NjUxMworOjEwNzU4MDAwNkM2OTc4MkY3NzJGNjY3NzVGMzcyRTMwMjkyQzIwNTYzRAorOjEwNzU5MDAwNjU3MjczNjk2RjZFMjA1NDMzNzg3ODIwMzAzMDM3MkVERgorOjEwNzVBMDAwMzAzMTJFMzAzMDIwMkQyMDMxMzAzMDM3MzAzMTMwMzBGNgorOjA4NzVCMDAwMTAwNzAxMDA2RjRFRjhCQjRCCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvdGVodXRpL2JkeC5iaW4uaWhleCBiL2Zpcm13YXJlL3RlaHV0aS9iZHguYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAyOWU0YwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3RlaHV0aS9iZHguYmluLmloZXgKQEAgLTAsMCArMSwyNjc4IEBACis6MTAwMDAwMDAwMjAwMEYwMDAwODA3MTQwMkQwMDAwMDAwMDAwMDBDMEMxCis6MTAwMDEwMDAwMjAwMEYwMDAxODA3MTAwMkQwMDAwMDAwMDAwODBDMDcwCis6MTAwMDIwMDAwMjAwMEYwMDAyODA3MTAwMkQwMDAwMDAwMDAwMDBDMURFCis6MTAwMDMwMDAwMjAwMEYwMDAzODA3MTAwMkQwMDAwMDAwMDAwODBDMTRECis6MTAwMDQwMDAwMjAwMEYwMDA0ODA3MTAwMkQwMDAwMDAwMDAwMDBDMkJCCis6MTAwMDUwMDAwMjAwMEYwMDA1ODA3MTAwMkQwMDAwMDAwMDAwODBDMjJBCis6MTAwMDYwMDAwMjAwMEYwMDA2ODA3MTAwMkQwMDAwMDAwMDAwMDBDMzk4Cis6MTAwMDcwMDAwMjAwMEYwMDA3ODA3MTAwMkQwMDAwMDAwMDAwODBDMzA3Cis6MTAwMDgwMDAwMjAwMEYwMDA4ODA3MTAwMkQwMDAwMDAwMDAwMDBDNDc1Cis6MTAwMDkwMDAwMjAwMEYwMDA5ODA3MTAwMkQwMDAwMDAwMDAwODBDNEU0Cis6MTAwMEEwMDAwMjAwMEYwMDBBODA3MTAwMkQwMDAwMDAwMDAwMDBDNTUyCis6MTAwMEIwMDAwMjAwMEYwMDBCODA3MTAwMkQwMDAwMDAwMDAwODBDNUMxCis6MTAwMEMwMDAwMjAwMEYwMDBDODA3MTAwMkQwMDAwMDAwMDAwMDBDNjJGCis6MTAwMEQwMDAwMjAwMEYwMDBEODA3MTAwMkQwMDAwMDAwMDAwODBDNjlFCis6MTAwMEUwMDAwMjAwMEYwMDBFODA3MTAwMkQwMDAwMDAwMDAwMDBDNzBDCis6MTAwMEYwMDAwMjAwMEYwMDBGODA3MTAwMkQwMDAwMDAwMDAwODBDNzdCCis6MTAwMTAwMDAwMjAwMEYwMDEwODA3MTAwMkQwMDAwMDAwMDAwMDBDOEU4Cis6MTAwMTEwMDAwMjAwMEYwMDExODA3MTAwMkQwMDAwMDAwMDAwODBDODU3Cis6MTAwMTIwMDAwMjAwMEYwMDEyODA3MTAwMkQwMDAwMDAwMDAwMDBDOUM1Cis6MTAwMTMwMDAwMjAwMEYwMDEzODA3MTAwMkQwMDAwMDAwMDAwODBDOTM0Cis6MTAwMTQwMDAwMjAwMEYwMDE0ODA3MTAwMkQwMDAwMDAwMDAwMDBDQUEyCis6MTAwMTUwMDAwMjAwMEYwMDE1ODA3MTAwMkQwMDAwMDAwMDAwODBDQTExCis6MTAwMTYwMDAwMjAwMEYwMDE2ODA3MTAwMkQwMDAwMDAwMDAwMDBDQjdGCis6MTAwMTcwMDAwMjAwMEYwMDE3ODA3MTAwMkQwMDAwMDAwMDAwODBDQkVFCis6MTAwMTgwMDAwMjAwMEYwMDE4ODA3MTAwMkQwMDAwMDAwMDAwMDBDQzVDCis6MTAwMTkwMDAwMjAwMEYwMDE5ODA3MTAwMkQwMDAwMDAwMDAwODBDQ0NCCis6MTAwMUEwMDAwMjAwMEYwMDFBODA3MTAwMkQwMDAwMDAwMDAwMDBDRDM5Cis6MTAwMUIwMDAwMjAwMEYwMDFCODA3MTAwMkQwMDAwMDAwMDAwODBDREE4Cis6MTAwMUMwMDAwMjAwMEYwMDFDODA3MTAwMkQwMDAwMDAwMDAwMDBDRTE2Cis6MTAwMUQwMDAwMjAwMEYwMDFEODA3MTAwMkQwMDAwMDAwMDAwODBDRTg1Cis6MTAwMUUwMDAwMjAwMEYwMDFFODA3MTAwMkQwMDAwMDAwMDAwMDBDRkYzCis6MTAwMUYwMDAwMjAwMEYwMDFGODA3MTAwMkQwMDAwMDAwMDAwODBDRjYyCis6MTAwMjAwMDAwMjAwMEYwMDIwODA3MTAwMkQwMDAwMDAwMDAwMDBEMENGCis6MTAwMjEwMDAwMjAwMEYwMDIxODA3MTAwMkQwMDAwMDAwMDAwODBEMDNFCis6MTAwMjIwMDAwMjAwMEYwMDIyODA3MTAwMkQwMDAwMDAwMDAwMDBEMUFDCis6MTAwMjMwMDAwMjAwMEYwMDIzODA3MTAwMkQwMDAwMDAwMDAwODBEMTFCCis6MTAwMjQwMDAwMjAwMEYwMDI0ODA3MTAwMkQwMDAwMDAwMDAwMDBEMjg5Cis6MTAwMjUwMDAwMjAwMEYwMDI1ODA3MTAwMkQwMDAwMDAwMDAwODBEMkY4Cis6MTAwMjYwMDAwMjAwMEYwMDI2ODA3MTAwMkQwMDAwMDAwMDAwMDBEMzY2Cis6MTAwMjcwMDAwMjAwMEYwMDI3ODA3MTAwMkQwMDAwMDAwMDAwODBEM0Q1Cis6MTAwMjgwMDAwMjAwMEYwMDI4ODA3MTAwMkQwMDAwMDAwMDAwMDBENDQzCis6MTAwMjkwMDAwMjAwMEYwMDI5ODA3MTAwMkQwMDAwMDAwMDAwODBENEIyCis6MTAwMkEwMDAwMjAwMEYwMDJBODA3MTAwMkQwMDAwMDAwMDAwMDBENTIwCis6MTAwMkIwMDAwMjAwMEYwMDJCODA3MTAwMkQwMDAwMDAwMDAwODBENThGCis6MTAwMkMwMDAwMjAwMEYwMDJDODA3MTAwMkQwMDAwMDAwMDAwMDBENkZECis6MTAwMkQwMDAwMjAwMEYwMDJEODA3MTAwMkQwMDAwMDAwMDAwODBENjZDCis6MTAwMkUwMDAwMjAwMEYwMDJFODA3MTAwMkQwMDAwMDAwMDAwMDBEN0RBCis6MTAwMkYwMDAwMjAwMEYwMDJGODA3MTAwMkQwMDAwMDAwMDAwODBENzQ5Cis6MTAwMzAwMDAwMjAwMEYwMDMwODA3MTAwMkQwMDAwMDAwMDAwMDBEOEI2Cis6MTAwMzEwMDAwMjAwMEYwMDMxODA3MTAwMkQwMDAwMDAwMDAwODBEODI1Cis6MTAwMzIwMDAwMjAwMEYwMDMyODA3MTAwMkQwMDAwMDAwMDAwMDBEOTkzCis6MTAwMzMwMDAwMjAwMEYwMDMzODA3MTAwMkQwMDAwMDAwMDAwODBEOTAyCis6MTAwMzQwMDAwMjAwMEYwMDM0ODA3MTAwMkQwMDAwMDAwMDAwMDBEQTcwCis6MTAwMzUwMDAwMjAwMEYwMDM1ODA3MTAwMkQwMDAwMDAwMDAwODBEQURGCis6MTAwMzYwMDAwMjAwMEYwMDM2ODA3MTAwMkQwMDAwMDAwMDAwMDBEQjRECis6MTAwMzcwMDAwMjAwMEYwMDM3ODA3MTAwMkQwMDAwMDAwMDAwODBEQkJDCis6MTAwMzgwMDAwMjAwMEYwMDM4ODA3MTAwN0IwMDAwMDAwMDgwNjBEREZCCis6MTAwMzkwMDAwMjAwMEYwMDM5ODA3MTAwMkQwMDAwMDAwMDAwMDBERDE4Cis6MTAwM0EwMDAwMjAwMEYwMDNBODA3MTAwMkQwMDAwMDAwMDAwODBEQjg5Cis6MTAwM0IwMDAwMjAwMEYwMDNCODA3MTAwMkQwMDAwMDAwMDAwMDBEREY2Cis6MTAwM0MwMDAwMjAwMEYwMDNDODA3MTAwMkQwMDAwMDAwMDAwMDBEREU1Cis6MTAwM0QwMDAwMjAwMEYwMDNEODA3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwM0UwMDAwMjAwMEYwMDNFODA3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwM0YwMDAwMjAwMEYwMDNGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAwNDAwMDAwMjAwMEYwMDQwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTAwNDEwMDAwMjAwMEYwMDQxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNDIwMDAwMjAwMEYwMDQyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwNDMwMDAwMjAwMEYwMDQzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAwNDQwMDAwMjAwMEYwMDQ0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwNDUwMDAwMjAwMEYwMDQ1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwNDYwMDAwMjAwMEYwMDQ2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTAwNDcwMDAwMjAwMEYwMDQ3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwNDgwMDAwMjAwMEYwMDQ4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAwNDkwMDAwMjAwMEYwMDQ5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAwNEEwMDAwMjAwMEYwMDRBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAwNEIwMDAwMjAwMEYwMDRCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwNEMwMDAwMjAwMEYwMDRDODA3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwNEQwMDAwMjAwMEYwMDREODA3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwNEUwMDAwMjAwMEYwMDRFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAwNEYwMDAwMjAwMEYwMDRGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAwNTAwMDAwMjAwMEYwMDUwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNTEwMDAwMjAwMEYwMDUxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwNTIwMDAwMjAwMEYwMDUyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAwNTMwMDAwMjAwMEYwMDUzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwNTQwMDAwMjAwMEYwMDU0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwNTUwMDAwMjAwMEYwMDU1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTAwNTYwMDAwMjAwMEYwMDU2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwNTcwMDAwMjAwMEYwMDU3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAwNTgwMDAwMjAwMEYwMDU4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAwNTkwMDAwMjAwMEYwMDU5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAwNUEwMDAwMjAwMEYwMDVBODA3MTAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwNUIwMDAwMjAwMEYwMDVCODA3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwNUMwMDAwMjAwMEYwMDVDODA3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwNUQwMDAwMjAwMEYwMDVEODA3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAwNUUwMDAwMjAwMEYwMDVFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAwNUYwMDAwMjAwMEYwMDVGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTAwNjAwMDAwMjAwMEYwMDYwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwNjEwMDAwMjAwMEYwMDYxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAwNjIwMDAwMjAwMEYwMDYyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwNjMwMDAwMjAwMEYwMDYzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwNjQwMDAwMjAwMEYwMDY0ODA3MTAwMkQwMDAwMDAwMDAwMDBEQjNDCis6MTAwNjUwMDAwMjAwMEYwMDY1ODA3MTAwM0YwMDAwMDAwNDAxMDBERDEyCis6MTAwNjYwMDAwMjAwMEYwMDY2ODA3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAwNjcwMDAwMjAwMEYwMDY3ODA3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAwNjgwMDAwMjAwMEYwMDY4ODA3MTAwM0YwMDAwMDAwNDA4MDBEREQ4Cis6MTAwNjkwMDAwMjAwMEYwMDY5ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwNkEwMDAwMjAwMEYwMDZBODA3MTAwM0YwMDAwMDAwNDMwMDBERDhFCis6MTAwNkIwMDAwMjAwMEYwMDZCODA3MTAwM0YwMDAwMDAwMTAwMThERDk4Cis6MTAwNkMwMDAwMjAwMEYwMDZDODA3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAwNkQwMDAwMjAwMEYwMDZEODA3MTAwM0YwMDAwMDAwNDAwMDBERDhCCis6MTAwNkUwMDAwMjAwMEYwMDZFODA3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAwNkYwMDAwMjAwMEYwMDZGODA3MTAwM0YwMDAwMDAwNDNEMDBERDJDCis6MTAwNzAwMDAwMjAwMEYwMDcwODA3MTAwM0YwMDAwMDAwMTAwMThERDQyCis6MTAwNzEwMDAwMjAwMEYwMDcxODA3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAwNzIwMDAwMjAwMEYwMDcyODA3MTAwM0YwMDAwMDAwNDA3MDBERDJFCis6MTAwNzMwMDAwMjAwMEYwMDczODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ3Cis6MTAwNzQwMDAwMjAwMEYwMDc0ODA3MTAwM0YwMDAwMDA4NDI4MDBERDZCCis6MTAwNzUwMDAwMjAwMEYwMDc1ODA3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAwNzYwMDAwMjAwMEYwMDc2ODA3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAwNzcwMDAwMjAwMEYwMDc3ODA3MTAwM0YwMDAwMDAwNDM3MDBEREE5Cis6MTAwNzgwMDAwMjAwMEYwMDc4ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwNzkwMDAwMjAwMEYwMDc5ODA3MTAwM0YwMDAwMDAwNDI5MDBERDk1Cis6MTAwN0EwMDAwMjAwMEYwMDdBODA3MTAwM0YwMDAwMDAwMTAwMThERDk4Cis6MTAwN0IwMDAwMjAwMEYwMDdCODA3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAwN0MwMDAwMjAwMEYwMDdDODA3MTAwM0YwMDAwMDAwNEFBMDRERERECis6MTAwN0QwMDAwMjAwMEYwMDdEODA3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAwN0UwMDAwMjAwMEYwMDdFODA3MTAwM0YwMDAwMDAwNDI4MDBERDQxCis6MTAwN0YwMDAwMjAwMEYwMDdGODA3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAwODAwMDAwMjAwMEYwMDgwODA3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAwODEwMDAwMjAwMEYwMDgxODA3MTAwM0YwMDAwMDAwNDMxMDBERDA0Cis6MTAwODIwMDAwMjAwMEYwMDgyODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ3Cis6MTAwODMwMDAwMjAwMEYwMDgzODA3MTAwM0YwMDAwMDA4NDJCMDBERDY4Cis6MTAwODQwMDAwMjAwMEYwMDg0ODA3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAwODUwMDAwMjAwMEYwMDg1ODA3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAwODYwMDAwMjAwMEYwMDg2ODA3MTAwM0YwMDAwMDAwNEU0MDFEREZCCis6MTAwODcwMDAwMjAwMEYwMDg3ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwODgwMDAwMjAwMEYwMDg4ODA3MTAwM0YwMDAwMDA4NDAwODBEN0M0Cis6MTAwODkwMDAwMjAwMEYwMDg5ODA3MTAwM0YwMDAwMDAwMTAwOThENzFFCis6MTAwOEEwMDAwMjAwMEYwMDhBODA3MTAwNTkwMDAwMDBFRjM3ODBEN0U2Cis6MTAwOEIwMDAwMjAwMEYwMDhCODA3MTAwM0QwMDAwMDA2RjAwODBGNzg4Cis6MTAwOEMwMDAwMjAwMEYwMDhDODA3MTAwM0QwMDAwMDA2RjAwODBGNzc3Cis6MTAwOEQwMDAwMjAwMEYwMDhEODA3MTAwM0QwMDAwMDA2RjAwODBGNzY2Cis6MTAwOEUwMDAwMjAwMEYwMDhFODA3MTAwMkQwMDAwMDA3RjAyRDZENzFECis6MTAwOEYwMDAwMjAwMEYwMDhGODA3MTAwMTgwMDAwMDA4MTAwRkYxN0I4Cis6MTAwOTAwMDAwMjAwMEYwMDkwODA3MTAwM0QwMDAwMDA2RjAwODBGNzMyCis6MTAwOTEwMDAwMjAwMEYwMDkxODA3MTAwM0QwMDAwMDA2RjAwODBGNzIxCis6MTAwOTIwMDAwMjAwMEYwMDkyODA3MTAwMkQwMDAwMDBCODAwRDhENzlGCis6MTAwOTMwMDAwMjAwMEYwMDkzODA3MTAwMTgwMDAwMDA4MTAwRUIxNzg3Cis6MTAwOTQwMDAwMjAwMEYwMDk0ODA3MTAwM0YwMDAwMDAwNDI5MDBEREM4Cis6MTAwOTUwMDAwMjAwMEYwMDk1ODA3MTAwM0YwMDAwMDAwMTAwMThERENCCis6MTAwOTYwMDAwMjAwMEYwMDk2ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwOTcwMDAwMjAwMEYwMDk3ODA3MTAwM0YwMDAwMDA4NEFBMDRERDkwCis6MTAwOTgwMDAwMjAwMEYwMDk4ODA3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAwOTkwMDAwMjAwMEYwMDk5ODA3MTAwM0YwMDAwMDAwNDJCMDBERDcxCis6MTAwOUEwMDAwMjAwMEYwMDlBODA3MTAwM0YwMDAwMDAwMTAwMThERDc2Cis6MTAwOUIwMDAwMjAwMEYwMDlCODA3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAwOUMwMDAwMjAwMEYwMDlDODA3MTAwM0YwMDAwMDAwNDAwMDBERDY5Cis6MTAwOUQwMDAwMjAwMEYwMDlEODA3MTAwNjkwMDAwMDA3QTNEMDBERDdCCis6MTAwOUUwMDAwMjAwMEYwMDlFODA3MTAwM0YwMDAwMDA4NDI5MDBERDlFCis6MTAwOUYwMDAwMjAwMEYwMDlGODA3MTAwM0YwMDAwMDAwMTAwMThERDIxCis6MTAwQTAwMDAwMjAwMEYwMEEwODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ3Cis6MTAwQTEwMDAwMjAwMEYwMEExODA3MTAwM0YwMDAwMDAwNDAwMDBERDEzCis6MTAwQTIwMDAwMjAwMEYwMEEyODA3MTAwNjkwMDAwMDA3QTNEMDBERDI1Cis6MTAwQTMwMDAwMjAwMEYwMEEzODA3MTAwM0YwMDAwMDAwNDJBMDBEREM3Cis6MTAwQTQwMDAwMjAwMEYwMEE0ODA3MTAwM0YwMDAwMDAwMTAwMThERENCCis6MTAwQTUwMDAwMjAwMEYwMEE1ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwQTYwMDAwMjAwMEYwMEE2ODA3MTAwM0YwMDAwMDA4NDkxMDBEREFECis6MTAwQTcwMDAwMjAwMEYwMEE3ODA3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAwQTgwMDAwMjAwMEYwMEE4ODA3MTAwM0YwMDAwMDA4NDE5ODBENjhBCis6MTAwQTkwMDAwMjAwMEYwMEE5ODA3MTAwM0YwMDAwMDAwMTAwODBENjE1Cis6MTAwQUEwMDAwMjAwMEYwMEFBODA3MTAwMzUwMDAwMDBFRDAwODBENjIyCis6MTAwQUIwMDAwMjAwMEYwMEFCODA3MTAwMTgwMDAwMDA4MTAwRkYzN0JBCis6MTAwQUMwMDAwMjAwMEYwMEFDODA3MTAwM0YwMDAwMDAwNDJCMDBERDJECis6MTAwQUQwMDAwMjAwMEYwMEFEODA3MTAwM0YwMDAwMDAwMTAwMThERDMyCis6MTAwQUUwMDAwMjAwMEYwMEFFODA3MTAwNjkwMDAwMDA3QTNEMDBERDU5Cis6MTAwQUYwMDAwMjAwMEYwMEFGODA3MTAwM0YwMDAwMDAwNDAwMDBERDI1Cis6MTAwQjAwMDAwMjAwMEYwMEIwODA3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAwQjEwMDAwMjAwMEYwMEIxODA3MTAwM0YwMDAwMDA4NDJBMDBERDU4Cis6MTAwQjIwMDAwMjAwMEYwMEIyODA3MTAwM0YwMDAwMDAwMTAwMThERERDCis6MTAwQjMwMDAwMjAwMEYwMEIzODA3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAwQjQwMDAwMjAwMEYwMEI0ODA3MTAwM0YwMDAwMDAwNDAwMDBERENGCis6MTAwQjUwMDAwMjAwMEYwMEI1ODA3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAwQjYwMDAwMjAwMEYwMEI2ODA3MTAwM0YwMDAwMDA4NDBDODBENkE4Cis6MTAwQjcwMDAwMjAwMEYwMEI3ODA3MTAwM0YwMDAwMDAwMTAwODBENjI2Cis6MTAwQjgwMDAwMjAwMEYwMEI4ODA3MTAwMzUwMDAwMDBFRDAwODBENjMzCis6MTAwQjkwMDAwMjAwMEYwMEI5ODA3MTAwMTgwMDAwMDA4MTAwRkYzN0NCCis6MTAwQkEwMDAwMjAwMEYwMEJBODA3MTAwM0YwMDAwMDA4NDJBMDBEREJGCis6MTAwQkIwMDAwMjAwMEYwMEJCODA3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAwQkMwMDAwMjAwMEYwMEJDODA3MTAwNjkwMDAwMDA3QTNEMDBERDZBCis6MTAwQkQwMDAwMjAwMEYwMEJEODA3MTAwM0YwMDAwMDAwNDAwMDBERDM2Cis6MTAwQkUwMDAwMjAwMEYwMEJFODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ4Cis6MTAwQkYwMDAwMjAwMEYwMEJGODA3MTAwM0YwMDAwMDA4NDBGODBENjBDCis6MTAwQzAwMDAwMjAwMEYwMEMwODA3MTAwM0YwMDAwMDAwMTAwODBENjhDCis6MTAwQzEwMDAwMjAwMEYwMEMxODA3MTAwMzUwMDAwMDBFRDAwODBENjk5Cis6MTAwQzIwMDAwMjAwMEYwMEMyODA3MTAwMTgwMDAwMDA4MTAwRkYzNzMxCis6MTAwQzMwMDAwMjAwMEYwMEMzODA3MTAwM0YwMDAwMDAwNDJBMDBEREE1Cis6MTAwQzQwMDAwMjAwMEYwMEM0ODA3MTAwM0YwMDAwMDAwMTAwMThEREE5Cis6MTAwQzUwMDAwMjAwMEYwMEM1ODA3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAwQzYwMDAwMjAwMEYwMEM2ODA3MTAwM0YwMDAwMDA4NDExMDBERDBCCis6MTAwQzcwMDAwMjAwMEYwMEM3ODA3MTAwNjkwMDAwMDA3QTNEMDBEREFFCis6MTAwQzgwMDAwMjAwMEYwMEM4ODA3MTAwM0YwMDAwMDA4NDI4MDBEREQyCis6MTAwQzkwMDAwMjAwMEYwMEM5ODA3MTAwM0YwMDAwMDAwMTAwMThERDU0Cis6MTAwQ0EwMDAwMjAwMEYwMENBODA3MTAwNjkwMDAwMDA3QTNEMDBERDdCCis6MTAwQ0IwMDAwMjAwMEYwMENCODA3MTAwM0YwMDAwMDA4NDM3MDBERDkwCis6MTAwQ0MwMDAwMjAwMEYwMENDODA3MTAwNjkwMDAwMDA3QTNEMDBERDU5Cis6MTAwQ0QwMDAwMjAwMEYwMENEODA3MTAwMkQwMDAwMDAwMDAwODBEM0M1Cis6MTAwQ0UwMDAwMjAwMEYwMENFODA3MTAwM0YwMDAwMDA4MDM3MDBEMjZDCis6MTAwQ0YwMDAwMjAwMEYwMENGODA3MTAwM0YwMDAwMDAwNDA0ODBEMThCCis6MTAwRDAwMDAwMjAwMEYwMEQwODA3MTAwM0YwMDAwMDAwMTAwODREMTdDCis6MTAwRDEwMDAwMjAwMEYwMEQxODA3MTAwNjkwMDAwMDA3NjNCMDBERDA5Cis6MTAwRDIwMDAwMjAwMEYwMEQyODA3MTAwNjkwMDAwMDA3NjNCMDBEREY4Cis6MTAwRDMwMDAwMjAwMEYwMEQzODA3MTAwNjkwMDAwMDA3NjNCMDBEREU3Cis6MTAwRDQwMDAwMjAwMEYwMEQ0ODA3MTAwM0YwMDAwMDA4NEZGN0ZEMUJCCis6MTAwRDUwMDAwMjAwMEYwMEQ1ODA3MTAwM0YwMDAwMDA4MUZGN0ZEMUFECis6MTAwRDYwMDAwMjAwMEYwMEQ2ODA3MTAwNjkwMDAwMDA3NjNCMDBEREI0Cis6MTAwRDcwMDAwMjAwMEYwMEQ3ODA3MTAwNjkwMDAwMDA3NjNCMDBEREEzCis6MTAwRDgwMDAwMjAwMEYwMEQ4ODA3MTAwNjkwMDAwMDA3NjNCMDBERDkyCis6MTAwRDkwMDAwMjAwMEYwMEQ5ODA3MTAwNjkwMDAwMDA3NjNCMDBERDgxCis6MTAwREEwMDAwMjAwMEYwMERBODA3MTAwNjkwMDAwMDA3NjNCMDBERDcwCis6MTAwREIwMDAwMjAwMEYwMERCODA3MTAwNjkwMDAwMDA3NjNCMDBERDVGCis6MTAwREMwMDAwMjAwMEYwMERDODA3MTAwM0YwMDAwMDA4NDA3ODBENjI1Cis6MTAwREQwMDAwMjAwMEYwMEREODA3MTAwM0YwMDAwMDAwMTAwODBENjlFCis6MTAwREUwMDAwMjAwMEYwMERFODA3MTAwMzUwMDAwMDBFRDAwODBENkFCCis6MTAwREYwMDAwMjAwMEYwMERGODA3MTAwMTgwMDAwMDA4MTAwRkYzNzQzCis6MTAwRTAwMDAwMjAwMEYwMEUwODA3MTAwNDkwMDAwMDA2MzNCMDBERDNDCis6MTAwRTEwMDAwMjAwMEYwMEUxODA3MTAwNTkwMDAwMDA3NjNCMDBERDA4Cis6MTAwRTIwMDAwMjAwMEYwMEUyODA3MTAwM0QwMDAwMDA2RjAwODBGN0JCCis6MTAwRTMwMDAwMjAwMEYwMEUzODA3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAwRTQwMDAwMjAwMEYwMEU0ODA3MTAwM0QwMDAwMDA2RjAwODBGNzk5Cis6MTAwRTUwMDAwMjAwMEYwMEU1ODA3MTAwMkQwMDAwMDA3RjAyMDZERDFBCis6MTAwRTYwMDAwMjAwMEYwMEU2ODA3MTAwMTgwMDAwMDA3QTNEN0YxRDJGCis6MTAwRTcwMDAwMjAwMEYwMEU3ODA3MTAwNDUwMDAwMDAzOTMxMDBEREZECis6MTAwRTgwMDAwMjAwMEYwMEU4ODA3MTAwOTQwMDAwMDAzQjMxMEIwMDZECis6MTAwRTkwMDAwMjAwMEYwMEU5ODA3MTAwOTQwMDAwMDAzRDMxMDkwMDVDCis6MTAwRUEwMDAwMjAwMEYwMEVBODA3MTAwOTQwMDAwMDAzRjMxMDcwMDRCCis6MTAwRUIwMDAwMjAwMEYwMEVCODA3MTAwOTQwMDAwMDA3NjNCMDUwMEZCCis6MTAwRUMwMDAwMjAwMEYwMEVDODA3MTAwMDkwMDAwMDA3QTNERURDMUM2Cis6MTAwRUQwMDAwMjAwMEYwMEVEODA3MTAwM0YwMDAwMDA4MEI3MDBEMkRCCis6MTAwRUUwMDAwMjAwMEYwMEVFODA3MTAwM0YwMDAwMDA4NDI4MDBERDRBCis6MTAwRUYwMDAwMjAwMEYwMEVGODA3MTAwM0YwMDAwMDAwMTAwMThERENDCis6MTAwRjAwMDAwMjAwMEYwMEYwODA3MTAwNjkwMDAwMDA2NDMyMDBERDEzCis6MTAwRjEwMDAwMjAwMEYwMEYxODA3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAwRjIwMDAwMjAwMEYwMEYyODA3MTAwM0YwMDAwMDA4NDA3ODBENkFECis6MTAwRjMwMDAwMjAwMEYwMEYzODA3MTAwM0YwMDAwMDAwMTAwODBENjI2Cis6MTAwRjQwMDAwMjAwMEYwMEY0ODA3MTAwMzUwMDAwMDBFRDAwODBENjMzCis6MTAwRjUwMDAwMjAwMEYwMEY1ODA3MTAwMTgwMDAwMDA4MTAwRkYzN0NCCis6MTAwRjYwMDAwMjAwMEYwMEY2ODA3MTAwNDkwMDAwMDA2MzNCMDBEREM1Cis6MTAwRjcwMDAwMjAwMEYwMEY3ODA3MTAwNTkwMDAwMDA3NjNCMDBERDkxCis6MTAwRjgwMDAwMjAwMEYwMEY4ODA3MTAwM0QwMDAwMDA2RjAwODBGNzQ0Cis6MTAwRjkwMDAwMjAwMEYwMEY5ODA3MTAwM0QwMDAwMDA2RjAwODBGNzMzCis6MTAwRkEwMDAwMjAwMEYwMEZBODA3MTAwM0QwMDAwMDA2RjAwODBGNzIyCis6MTAwRkIwMDAwMjAwMEYwMEZCODA3MTAwMkQwMDAwMDA3RjAyMDZEREEzCis6MTAwRkMwMDAwMjAwMEYwMEZDODA3MTAwMTgwMDAwMDA3QTNEN0YxREI4Cis6MTAwRkQwMDAwMjAwMEYwMEZEODA3MTAwNDUwMDAwMDAzQTMxMDBERDg1Cis6MTAwRkUwMDAwMjAwMEYwMEZFODA3MTAwMTgwMDAwMDA3NjNCMkQxREVFCis6MTAwRkYwMDAwMjAwMEYwMEZGODA3MTAwNDUwMDAwMDAzQzMxMDBERDYxCis6MTAxMDAwMDAwMjAwMEYwMDAwODE3MTAwMTgwMDAwMDA3NjNCMTMxREU0Cis6MTAxMDEwMDAwMjAwMEYwMDAxODE3MTAwNDUwMDAwMDAzRTMxMDBERDNCCis6MTAxMDIwMDAwMjAwMEYwMDAyODE3MTAwMTgwMDAwMDA3NjNCMUIxREJBCis6MTAxMDMwMDAwMjAwMEYwMDAzODE3MTAwM0YwMDAwMDAwNDMwMDBERDVBCis6MTAxMDQwMDAwMjAwMEYwMDA0ODE3MTAwM0YwMDAwMDAwMTAwMThERDY0Cis6MTAxMDUwMDAwMjAwMEYwMDA1ODE3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAxMDYwMDAwMjAwMEYwMDA2ODE3MTAwM0YwMDAwMDAwNDAxMDBERDU2Cis6MTAxMDcwMDAwMjAwMEYwMDA3ODE3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAxMDgwMDAwMjAwMEYwMDA4ODE3MTAwMDkwMDAwMDA3QTNEMkRDNUEzCis6MTAxMDkwMDAwMjAwMEYwMDA5ODE3MTAwMjkwMDAwMDA2NDAwMDFEMkU0Cis6MTAxMEEwMDAwMjAwMEYwMDBBODE3MTAwM0YwMDAwMDA4NDI4MDBERDZCCis6MTAxMEIwMDAwMjAwMEYwMDBCODE3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAxMEMwMDAwMjAwMEYwMDBDODE3MTAwNjkwMDAwMDA2NDMyMDBERDM1Cis6MTAxMEQwMDAwMjAwMEYwMDBEODE3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAxMEUwMDAwMjAwMEYwMDBFODE3MTAwMDkwMDAwMDA3QTNEMjlDMjQ0Cis6MTAxMEYwMDAwMjAwMEYwMDBGODE3MTAwMjkwMDAwMDA2NDAwMDBEMjdGCis6MTAxMTAwMDAwMjAwMEYwMDEwODE3MTAwM0YwMDAwMDA4NDI4MDBERDA0Cis6MTAxMTEwMDAwMjAwMEYwMDExODE3MTAwM0YwMDAwMDAwMTAwMThERDg2Cis6MTAxMTIwMDAwMjAwMEYwMDEyODE3MTAwNjkwMDAwMDA2NDMyMDBERENFCis6MTAxMTMwMDAwMjAwMEYwMDEzODE3MTAwNjkwMDAwMDA3QTNEMDBERDlDCis6MTAxMTQwMDAwMjAwMEYwMDE0ODE3MTAwNDkwMDAwMDA2MzNCMDBEREM0Cis6MTAxMTUwMDAwMjAwMEYwMDE1ODE3MTAwNTkwMDAwMDA3NjNCMDBERDkwCis6MTAxMTYwMDAwMjAwMEYwMDE2ODE3MTAwM0QwMDAwMDA2RjAwODBGNzQzCis6MTAxMTcwMDAwMjAwMEYwMDE3ODE3MTAwM0QwMDAwMDA2RjAwODBGNzMyCis6MTAxMTgwMDAwMjAwMEYwMDE4ODE3MTAwM0QwMDAwMDA2RjAwODBGNzIxCis6MTAxMTkwMDAwMjAwMEYwMDE5ODE3MTAwMkQwMDAwMDA3RjAyMDZEREEyCis6MTAxMUEwMDAwMjAwMEYwMDFBODE3MTAwMTgwMDAwMDA3QTNEN0YxREI3Cis6MTAxMUIwMDAwMjAwMEYwMDFCODE3MTAwNDUwMDAwMDAzQTMxMDBERDg0Cis6MTAxMUMwMDAwMjAwMEYwMDFDODE3MTAwMTgwMDAwMDA3NjNCMEYxRDBCCis6MTAxMUQwMDAwMjAwMEYwMDFEODE3MTAwM0YwMDAwMDAwNDMwMDBERDlGCis6MTAxMUUwMDAwMjAwMEYwMDFFODE3MTAwM0YwMDAwMDAwMTAwMThEREE5Cis6MTAxMUYwMDAwMjAwMEYwMDFGODE3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAxMjAwMDAwMjAwMEYwMDIwODE3MTAwM0YwMDAwMDAwNDAxMDBERDlBCis6MTAxMjEwMDAwMjAwMEYwMDIxODE3MTAwNjkwMDAwMDA3QTNEMDBEREFECis6MTAxMjIwMDAwMjAwMEYwMDIyODE3MTAwMDkwMDAwMDA3QTNEMkRDNUU3Cis6MTAxMjMwMDAwMjAwMEYwMDIzODE3MTAwMkQwMDAwMDA4MjAwMDhEMTAwCis6MTAxMjQwMDAwMjAwMEYwMDI0ODE3MTAwMDgwMDAwMDA3QTNEQzMyM0QyCis6MTAxMjUwMDAwMjAwMEYwMDI1ODE3MTAwNDkwMDAwMDAwQTNCMDBENjAyCis6MTAxMjYwMDAwMjAwMEYwMDI2ODE3MTAwM0YwMDAwMDAwNDAwMDBEMzNGCis6MTAxMjcwMDAwMjAwMEYwMDI3ODE3MTAwM0YwMDAwMDAwMTAwMDREMzJECis6MTAxMjgwMDAwMjAwMEYwMDI4ODE3MTAwMkYwMDAwMDA4NTQwODFENkU4Cis6MTAxMjkwMDAwMjAwMEYwMDI5ODE3MTAwM0YwMDAwMDA4NEZGRkZENDhECis6MTAxMkEwMDAwMjAwMEYwMDJBODE3MTAwM0YwMDAwMDA4MTA3ODBENEY2Cis6MTAxMkIwMDAwMjAwMEYwMDJCODE3MTAwM0YwMDAwMDA4NEZGRkZEMTZFCis6MTAxMkMwMDAwMjAwMEYwMDJDODE3MTAwM0YwMDAwMDAwMTAwODBEMTVFCis6MTAxMkQwMDAwMjAwMEYwMDJEODE3MTAwNDkwMDAwMDA2NjM2MDBERDFDCis6MTAxMkUwMDAwMjAwMEYwMDJFODE3MTAwNjkwMDAwMDA3NjNCMDBEREQ2Cis6MTAxMkYwMDAwMjAwMEYwMDJGODE3MTAwNjkwMDAwMDA3NjNCMDBEREM1Cis6MTAxMzAwMDAwMjAwMEYwMDMwODE3MTAwNjkwMDAwMDA3NjNCMDBEREIzCis6MTAxMzEwMDAwMjAwMEYwMDMxODE3MTAwNjkwMDAwMDA2OTNCMDBEREFGCis6MTAxMzIwMDAwMjAwMEYwMDMyODE3MTAwNjkwMDAwMDA3NjNCMDBERDkxCis6MTAxMzMwMDAwMjAwMEYwMDMzODE3MTAwNjkwMDAwMDA3NjNCMDBERDgwCis6MTAxMzQwMDAwMjAwMEYwMDM0ODE3MTAwNjkwMDAwMDA3NjNCMDBERDZGCis6MTAxMzUwMDAwMjAwMEYwMDM1ODE3MTAwNjkwMDAwMDA2OTNCMDBERDZCCis6MTAxMzYwMDAwMjAwMEYwMDM2ODE3MTAwNjEwMDAwMDA2QzA0MDBGNjdECis6MTAxMzcwMDAwMjAwMEYwMDM3ODE3MTAwMzUwMDAwMDBFRDAwODBENkJCCis6MTAxMzgwMDAwMjAwMEYwMDM4ODE3MTAwMTgwMDAwMDA4MTAwNkIzREUxCis6MTAxMzkwMDAwMjAwMEYwMDM5ODE3MTAwNDkwMDAwMDA4QjA1MDBENjYyCis6MTAxM0EwMDAwMjAwMEYwMDNBODE3MTAwMkYwMDAwMDAwNjAxODFENjczCis6MTAxM0IwMDAwMjAwMEYwMDNCODE3MTAwMkQwMDAwMDAwMDAwMDBEMkYwCis6MTAxM0MwMDAwMjAwMEYwMDNDODE3MTAwMjEwMDAwMDBFNDAwMDBEMjA3Cis6MTAxM0QwMDAwMjAwMEYwMDNEODE3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAxM0UwMDAwMjAwMEYwMDNFODE3MTAwMkQwMDAwMDA3RjAxMDZERDJDCis6MTAxM0YwMDAwMjAwMEYwMDNGODE3MTAwMTgwMDAwMDA3QTNEN0YxRDQwCis6MTAxNDAwMDAwMjAwMEYwMDQwODE3MTAwNDkwMDAwMDA2QzM2MDBEOEQ2Cis6MTAxNDEwMDAwMjAwMEYwMDQxODE3MTAwNjkwMDAwMDBFNzMzMDBEODJECis6MTAxNDIwMDAwMjAwMEYwMDQyODE3MTAwNjkwMDAwMDBFNzMzMDBEODFDCis6MTAxNDMwMDAwMjAwMEYwMDQzODE3MTAwNjkwMDAwMDBFRjM3MDBEOEZGCis6MTAxNDQwMDAwMjAwMEYwMDQ0ODE3MTAwMzEwMDAwMDA2QzAxMDBENkUxCis6MTAxNDUwMDAwMjAwMEYwMDQ1ODE3MTAwMkQwMDAwMDAwMDAwMDBEMTQ2Cis6MTAxNDYwMDAwMjAwMEYwMDQ2ODE3MTAwNDkwMDAwMDBFNDMzN0FEMTg4Cis6MTAxNDcwMDAwMjAwMEYwMDQ3ODE3MTAwMkYwMDAwMDA2MjAxNzFEMTRFCis6MTAxNDgwMDAwMjAwMEYwMDQ4ODE3MTAwMkYwMDAwMDA2MjAxNjFEMTRECis6MTAxNDkwMDAwMjAwMEYwMDQ5ODE3MTAwNDkwMDAwMDBFMzMzNDBEMTkwCis6MTAxNEEwMDAwMjAwMEYwMDRBODE3MTAwM0QwMDAwMDA2RjAwODBGN0NDCis6MTAxNEIwMDAwMjAwMEYwMDRCODE3MTAwMkQwMDAwMDA3RjAxMDZERDRFCis6MTAxNEMwMDAwMjAwMEYwMDRDODE3MTAwMTgwMDAwMDA3QTNEN0YxRDYyCis6MTAxNEQwMDAwMjAwMEYwMDREODE3MTAwNDkwMDAwMDA2QzM2MDBEOEY5Cis6MTAxNEUwMDAwMjAwMEYwMDRFODE3MTAwNjkwMDAwMDBFNzMzMDBEODUwCis6MTAxNEYwMDAwMjAwMEYwMDRGODE3MTAwNjkwMDAwMDA2MjMxMDBEOEM2Cis6MTAxNTAwMDAwMjAwMEYwMDUwODE3MTAwNjkwMDAwMDBFRjM3MDBEODIxCis6MTAxNTEwMDAwMjAwMEYwMDUxODE3MTAwMzEwMDAwMDA2QzAxMDBENjAzCis6MTAxNTIwMDAwMjAwMEYwMDUyODE3MTAwM0QwMDAwMDA2RjAwODBGNzQzCis6MTAxNTMwMDAwMjAwMEYwMDUzODE3MTAwMkQwMDAwMDA3RjAxMDZEREM1Cis6MTAxNTQwMDAwMjAwMEYwMDU0ODE3MTAwMTgwMDAwMDA3QTNEN0YxREQ5Cis6MTAxNTUwMDAwMjAwMEYwMDU1ODE3MTAwNDkwMDAwMDA2QzM2MDBEODcwCis6MTAxNTYwMDAwMjAwMEYwMDU2ODE3MTAwNjkwMDAwMDBFNzMzMDBEOEM3Cis6MTAxNTcwMDAwMjAwMEYwMDU3ODE3MTAwNjkwMDAwMDBFNzMzMDBEOEI2Cis6MTAxNTgwMDAwMjAwMEYwMDU4ODE3MTAwNjkwMDAwMDBFRjM3MDBEODk5Cis6MTAxNTkwMDAwMjAwMEYwMDU5ODE3MTAwMzEwMDAwMDA2QzAxMDBENjdCCis6MTAxNUEwMDAwMjAwMEYwMDVBODE3MTAwMkQwMDAwMDAwMDAwMDBEMUUwCis6MTAxNUIwMDAwMjAwMEYwMDVCODE3MTAwMkQwMDAwMDBFNDA3NkNEMTc4Cis6MTAxNUMwMDAwMjAwMEYwMDVDODE3MTAwNDkwMDAwMDBFMzMzNDBEMTRDCis6MTAxNUQwMDAwMjAwMEYwMDVEODE3MTAwM0QwMDAwMDA2RjAwODBGNzg4Cis6MTAxNUUwMDAwMjAwMEYwMDVFODE3MTAwMkQwMDAwMDA3RjAxMDZERDBBCis6MTAxNUYwMDAwMjAwMEYwMDVGODE3MTAwMTgwMDAwMDA3QTNEN0YxRDFFCis6MTAxNjAwMDAwMjAwMEYwMDYwODE3MTAwNDkwMDAwMDA2QzM2MDBEOEI0Cis6MTAxNjEwMDAwMjAwMEYwMDYxODE3MTAwNjkwMDAwMDBFNzMzMDBEODBCCis6MTAxNjIwMDAwMjAwMEYwMDYyODE3MTAwNjkwMDAwMDA2MjMxMDBEODgxCis6MTAxNjMwMDAwMjAwMEYwMDYzODE3MTAwNjkwMDAwMDBFRjM3MDBEOERECis6MTAxNjQwMDAwMjAwMEYwMDY0ODE3MTAwMzEwMDAwMDA2QzAxMDBENkJGCis6MTAxNjUwMDAwMjAwMEYwMDY1ODE3MTAwM0QwMDAwMDA2RjAwODBGN0ZGCis6MTAxNjYwMDAwMjAwMEYwMDY2ODE3MTAwMkQwMDAwMDA3RjAxMDZERDgxCis6MTAxNjcwMDAwMjAwMEYwMDY3ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDk1Cis6MTAxNjgwMDAwMjAwMEYwMDY4ODE3MTAwNDkwMDAwMDA2QzM2MDBEODJDCis6MTAxNjkwMDAwMjAwMEYwMDY5ODE3MTAwNjkwMDAwMDBFNzMzMDBEODgzCis6MTAxNkEwMDAwMjAwMEYwMDZBODE3MTAwNjkwMDAwMDBFNzMzMDBEODcyCis6MTAxNkIwMDAwMjAwMEYwMDZCODE3MTAwNjkwMDAwMDBFRjM3MDBEODU1Cis6MTAxNkMwMDAwMjAwMEYwMDZDODE3MTAwMzEwMDAwMDA2QzAxMDBENjM3Cis6MTAxNkQwMDAwMjAwMEYwMDZEODE3MTAwMkQwMDAwMDAwMDAwMDBEMTlDCis6MTAxNkUwMDAwMjAwMEYwMDZFODE3MTAwNDkwMDAwMDBFNDMzNzhEMUUwCis6MTAxNkYwMDAwMjAwMEYwMDZGODE3MTAwMkYwMDAwMDA2MjAxNzFEMUE0Cis6MTAxNzAwMDAwMjAwMEYwMDcwODE3MTAwMkYwMDAwMDA2MjAxNjFEMUEyCis6MTAxNzEwMDAwMjAwMEYwMDcxODE3MTAwNDkwMDAwMDBFMzMzNDBEMUU1Cis6MTAxNzIwMDAwMjAwMEYwMDcyODE3MTAwM0QwMDAwMDA2RjAwODBGNzIxCis6MTAxNzMwMDAwMjAwMEYwMDczODE3MTAwMkQwMDAwMDA3RjAxMDZEREEzCis6MTAxNzQwMDAwMjAwMEYwMDc0ODE3MTAwMTgwMDAwMDA3QTNEN0YxREI3Cis6MTAxNzUwMDAwMjAwMEYwMDc1ODE3MTAwNDkwMDAwMDA2QzM2MDBEODRFCis6MTAxNzYwMDAwMjAwMEYwMDc2ODE3MTAwNjkwMDAwMDBFNzMzMDBEOEE1Cis6MTAxNzcwMDAwMjAwMEYwMDc3ODE3MTAwNjkwMDAwMDA2MjMxMDBEODFCCis6MTAxNzgwMDAwMjAwMEYwMDc4ODE3MTAwNjkwMDAwMDBFRjM3MDBEODc3Cis6MTAxNzkwMDAwMjAwMEYwMDc5ODE3MTAwMzEwMDAwMDA2QzAxMDBENjU5Cis6MTAxN0EwMDAwMjAwMEYwMDdBODE3MTAwM0QwMDAwMDA2RjAwODBGNzk5Cis6MTAxN0IwMDAwMjAwMEYwMDdCODE3MTAwMkQwMDAwMDA3RjAxMDZERDFCCis6MTAxN0MwMDAwMjAwMEYwMDdDODE3MTAwMTgwMDAwMDA3QTNEN0YxRDJGCis6MTAxN0QwMDAwMjAwMEYwMDdEODE3MTAwNDkwMDAwMDA2QzM2MDBEOEM2Cis6MTAxN0UwMDAwMjAwMEYwMDdFODE3MTAwNjkwMDAwMDBFNzMzMDBEODFECis6MTAxN0YwMDAwMjAwMEYwMDdGODE3MTAwNjkwMDAwMDBFNzMzMDBEODBDCis6MTAxODAwMDAwMjAwMEYwMDgwODE3MTAwNjkwMDAwMDBFRjM3MDBEOEVFCis6MTAxODEwMDAwMjAwMEYwMDgxODE3MTAwMzEwMDAwMDA2QzAxMDBENkQwCis6MTAxODIwMDAwMjAwMEYwMDgyODE3MTAwMkQwMDAwMDAwMDAwMDBEMTM1Cis6MTAxODMwMDAwMjAwMEYwMDgzODE3MTAwMkQwMDAwMDBFNDA3NjhEMUQxCis6MTAxODQwMDAwMjAwMEYwMDg0ODE3MTAwNDkwMDAwMDBFMzMzNDBEMUExCis6MTAxODUwMDAwMjAwMEYwMDg1ODE3MTAwM0QwMDAwMDA2RjAwODBGN0RECis6MTAxODYwMDAwMjAwMEYwMDg2ODE3MTAwMkQwMDAwMDA3RjAxMDZERDVGCis6MTAxODcwMDAwMjAwMEYwMDg3ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDczCis6MTAxODgwMDAwMjAwMEYwMDg4ODE3MTAwNDkwMDAwMDA2QzM2MDBEODBBCis6MTAxODkwMDAwMjAwMEYwMDg5ODE3MTAwNjkwMDAwMDBFNzMzMDBEODYxCis6MTAxOEEwMDAwMjAwMEYwMDhBODE3MTAwNjkwMDAwMDA2MjMxMDBEOEQ3Cis6MTAxOEIwMDAwMjAwMEYwMDhCODE3MTAwNjkwMDAwMDBFRjM3MDBEODMzCis6MTAxOEMwMDAwMjAwMEYwMDhDODE3MTAwMzEwMDAwMDA2QzAxMDBENjE1Cis6MTAxOEQwMDAwMjAwMEYwMDhEODE3MTAwMzUwMDAwMDBFRDAwODBENjAwCis6MTAxOEUwMDAwMjAwMEYwMDhFODE3MTAwMDgwMDAwMDA4MTAwNzkyMjQzCis6MTAxOEYwMDAwMjAwMEYwMDhGODE3MTAwNDkwMDAwMDAwQzA2MDBENjI1Cis6MTAxOTAwMDAwMjAwMEYwMDkwODE3MTAwMkYwMDAwMDAwNjAxODFENkI3Cis6MTAxOTEwMDAwMjAwMEYwMDkxODE3MTAwM0YwMDAwMDAwMjAwODBENDlFCis6MTAxOTIwMDAwMjAwMEYwMDkyODE3MTAwM0YwMDAwMDA4NDAwODBENDBCCis6MTAxOTMwMDAwMjAwMEYwMDkzODE3MTAwM0YwMDAwMDAwMjAxMDBENUZBCis6MTAxOTQwMDAwMjAwMEYwMDk0ODE3MTAwM0YwMDAwMDA4NDAxMDBENTY3Cis6MTAxOTUwMDAwMjAwMEYwMDk1ODE3MTAwM0YwMDAwMDAwMjAyODBENTU3Cis6MTAxOTYwMDAwMjAwMEYwMDk2ODE3MTAwM0YwMDAwMDAwNDAyODBENTQ0Cis6MTAxOTcwMDAwMjAwMEYwMDk3ODE3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAxOTgwMDAwMjAwMEYwMDk4ODE3MTAwMkQwMDAwMDA3RjAxMDZERDJDCis6MTAxOTkwMDAwMjAwMEYwMDk5ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDQwCis6MTAxOUEwMDAwMjAwMEYwMDlBODE3MTAwNDkwMDAwMDA2QzM2MDBEOEQ3Cis6MTAxOUIwMDAwMjAwMEYwMDlCODE3MTAwNjkwMDAwMDBFOTM0MDBEODJCCis6MTAxOUMwMDAwMjAwMEYwMDlDODE3MTAwNjkwMDAwMDA2QTM1MDBEODk4Cis6MTAxOUQwMDAwMjAwMEYwMDlEODE3MTAwNjkwMDAwMDBFRjM3MDBEODAwCis6MTAxOUUwMDAwMjAwMEYwMDlFODE3MTAwMzEwMDAwMDA2QzAxMDBENkUyCis6MTAxOUYwMDAwMjAwMEYwMDlGODE3MTAwNDEwMDAwMDBFQjM0ODBENDkxCis6MTAxQTAwMDAwMjAwMEYwMEEwODE3MTAwNDEwMDAwMDA2QjM1MDBENTdECis6MTAxQTEwMDAwMjAwMEYwMEExODE3MTAwMzUwMDAwMDBFRDAwODBENkFBCis6MTAxQTIwMDAwMjAwMEYwMEEyODE3MTAwMTgwMDAwMDA4MTAwRUIzNzU2Cis6MTAxQTMwMDAwMjAwMEYwMEEzODE3MTAwNDkwMDAwMDAwRDNCMDBENjk5Cis6MTAxQTQwMDAwMjAwMEYwMEE0ODE3MTAwNDkwMDAwMDAwNzNCODBENjBFCis6MTAxQTUwMDAwMjAwMEYwMEE1ODE3MTAwMkQwMDAwMDAwMDAwMDBEMUUwCis6MTAxQTYwMDAwMjAwMEYwMEE2ODE3MTAwNDkwMDAwMDA2NjM2MDBERDBCCis6MTAxQTcwMDAwMjAwMEYwMEE3ODE3MTAwNjkwMDAwMDA3NjNCMDBEREM1Cis6MTAxQTgwMDAwMjAwMEYwMEE4ODE3MTAwNjkwMDAwMDA3NjNCMDBEREI0Cis6MTAxQTkwMDAwMjAwMEYwMEE5ODE3MTAwNjkwMDAwMDA3NjNCMDBEREEzCis6MTAxQUEwMDAwMjAwMEYwMEFBODE3MTAwNjkwMDAwMDA3NjNCMDBERDkyCis6MTAxQUIwMDAwMjAwMEYwMEFCODE3MTAwNjkwMDAwMDA3NjNCMDBERDgxCis6MTAxQUMwMDAwMjAwMEYwMEFDODE3MTAwNjkwMDAwMDA3NjNCMDBERDcwCis6MTAxQUQwMDAwMjAwMEYwMEFEODE3MTAwNjkwMDAwMDA3NjNCMDBERDVGCis6MTAxQUUwMDAwMjAwMEYwMEFFODE3MTAwNjkwMDAwMDA3NjNCMDBERDRFCis6MTAxQUYwMDAwMjAwMEYwMEFGODE3MTAwNjEwMDAwMDA2QzA0MDBGNjZECis6MTAxQjAwMDAwMjAwMEYwMEIwODE3MTAwMzUwMDAwMDBFRDAwODBENkFBCis6MTAxQjEwMDAwMjAwMEYwMEIxODE3MTAwMTgwMDAwMDA4MTAwRUIzNzU2Cis6MTAxQjIwMDAwMjAwMEYwMEIyODE3MTAwNDkwMDAwMDAwRTNCMDBENjk4Cis6MTAxQjMwMDAwMjAwMEYwMEIzODE3MTAwNDkwMDAwMDAwODNCODBENjBECis6MTAxQjQwMDAwMjAwMEYwMEI0ODE3MTAwNDkwMDAwMDAwOTNCODBENUZDCis6MTAxQjUwMDAwMjAwMEYwMEI1ODE3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAxQjYwMDAwMjAwMEYwMEI2ODE3MTAwMkQwMDAwMDA3RjAxMDZERDJDCis6MTAxQjcwMDAwMjAwMEYwMEI3ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDQwCis6MTAxQjgwMDAwMjAwMEYwMEI4ODE3MTAwNDkwMDAwMDA2QzM2MDBEOEQ3Cis6MTAxQjkwMDAwMjAwMEYwMEI5ODE3MTAwNjkwMDAwMDBFQjM1MDBEODI4Cis6MTAxQkEwMDAwMjAwMEYwMEJBODE3MTAwNjkwMDAwMDBFNzMzMDBEODFECis6MTAxQkIwMDAwMjAwMEYwMEJCODE3MTAwNjkwMDAwMDBFRjM3MDBEODAwCis6MTAxQkMwMDAwMjAwMEYwMEJDODE3MTAwNDEwMDAwMDBFQzA3MDBENjRDCis6MTAxQkQwMDAwMjAwMEYwMEJEODE3MTAwNDEwMDAwMDA2QjA4ODBENTNDCis6MTAxQkUwMDAwMjAwMEYwMEJFODE3MTAwMzUwMDAwMDBFRDAwODBENkJDCis6MTAxQkYwMDAwMjAwMEYwMEJGODE3MTAwMTgwMDAwMDA4MTAwRUQzNzY2Cis6MTAxQzAwMDAwMjAwMEYwMEMwODE3MTAwM0YwMDAwMDA4MEZGRkZENDgwCis6MTAxQzEwMDAwMjAwMEYwMEMxODE3MTAwM0YwMDAwMDAwNDAwMDJENUU2Cis6MTAxQzIwMDAwMjAwMEYwMEMyODE3MTAwM0YwMDAwMDAwMTAwMThENUMyCis6MTAxQzMwMDAwMjAwMEYwMEMzODE3MTAwNDkwMDAwMDA2QTNCMDBERDEzCis6MTAxQzQwMDAwMjAwMEYwMEM0ODE3MTAwNjkwMDAwMDA2OTNCMDBEREUzCis6MTAxQzUwMDAwMjAwMEYwMEM1ODE3MTAwNjkwMDAwMDA2OTNCMDBEREQyCis6MTAxQzYwMDAwMjAwMEYwMEM2ODE3MTAwMjEwMDAwMDBFQTAwMDBENUNCCis6MTAxQzcwMDAwMjAwMEYwMEM3ODE3MTAwNDkwMDAwMDA2QTNCMEVEREMxCis6MTAxQzgwMDAwMjAwMEYwMEM4ODE3MTAwMzUwMDAwMDA3QTAwMDREMTA1Cis6MTAxQzkwMDAwMjAwMEYwMEM5ODE3MTAwMTgwMDAwMDA4MTAwRjUzN0IzCis6MTAxQ0EwMDAwMjAwMEYwMENBODE3MTAwM0YwMDAwMDA4MEZGRkZENEQ2Cis6MTAxQ0IwMDAwMjAwMEYwMENCODE3MTAwM0YwMDAwMDAwNDAwMDRENTNBCis6MTAxQ0MwMDAwMjAwMEYwMENDODE3MTAwM0YwMDAwMDAwMTAwMThENTE4Cis6MTAxQ0QwMDAwMjAwMEYwMENEODE3MTAwNjkwMDAwMDA2OTNCMDBERDRBCis6MTAxQ0UwMDAwMjAwMEYwMENFODE3MTAwNjkwMDAwMDA2OTNCMDBERDM5Cis6MTAxQ0YwMDAwMjAwMEYwMENGODE3MTAwNDkwMDAwMDA2QTNCMDBERDQ3Cis6MTAxRDAwMDAwMjAwMEYwMEQwODE3MTAwNTEwMDAwMDBFQTAwMDBGNUQwCis6MTAxRDEwMDAwMjAwMEYwMEQxODE3MTAwM0QwMDAwMDA2RjAwODBGN0NDCis6MTAxRDIwMDAwMjAwMEYwMEQyODE3MTAwM0QwMDAwMDA2RjAwODBGN0JCCis6MTAxRDMwMDAwMjAwMEYwMEQzODE3MTAwNDkwMDAwMDA2QTNCMEVEREY0Cis6MTAxRDQwMDAwMjAwMEYwMEQ0ODE3MTAwMzUwMDAwMDA3QTgwMDREMUI4Cis6MTAxRDUwMDAwMjAwMEYwMEQ1ODE3MTAwMTgwMDAwMDA4MTAwRjUzN0U2Cis6MTAxRDYwMDAwMjAwMEYwMEQ2ODE3MTAwM0YwMDAwMDAwNDdGN0ZDNzkyCis6MTAxRDcwMDAwMjAwMEYwMEQ3ODE3MTAwM0YwMDAwMDAwMTdGN0ZDNzg0Cis6MTAxRDgwMDAwMjAwMEYwMEQ4ODE3MTAwM0YwMDAwMDAwMDQwODBENkEzCis6MTAxRDkwMDAwMjAwMEYwMEQ5ODE3MTAwM0YwMDAwMDAwMEMwMDNEMTk0Cis6MTAxREEwMDAwMjAwMEYwMERBODE3MTAwMjUwMDAwMDBFMjAwMjBERTUxCis6MTAxREIwMDAwMjAwMEYwMERCODE3MTAwNDkwMDAwMDA0RTI3ODBERTI5Cis6MTAxREMwMDAwMjAwMEYwMERDODE3MTAwM0QwMDAwMDA2RjAwODBGNzExCis6MTAxREQwMDAwMjAwMEYwMEREODE3MTAwM0QwMDAwMDA2RjAwODBGNzAwCis6MTAxREUwMDAwMjAwMEYwMERFODE3MTAwMzUwMDAwMDBFMjAwMDBEMTJBCis6MTAxREYwMDAwMjAwMEYwMERGODE3MTAwMzUwMDAwMDBFRDAwODBENjg5Cis6MTAxRTAwMDAwMjAwMEYwMEUwODE3MTAwMTgwMDAwMDA4MTAwRjUzNzJBCis6MTAxRTEwMDAwMjAwMEYwMEUxODE3MTAwM0YwMDAwMDAwNDMwMDBERDhFCis6MTAxRTIwMDAwMjAwMEYwMEUyODE3MTAwM0YwMDAwMDAwMTAwMThERDk4Cis6MTAxRTMwMDAwMjAwMEYwMEUzODE3MTAwNjkwMDAwMDAzQTFEMDBERDFGCis6MTAxRTQwMDAwMjAwMEYwMEU0ODE3MTAwNjkwMDAwMDA3QTNEMDBEREFFCis6MTAxRTUwMDAwMjAwMEYwMEU1ODE3MTAwN0QwMDAwMDAxM0E3NjBDNzNDCis6MTAxRTYwMDAwMjAwMEYwMEU2ODE3MTAwMzEwMDAwMDA0MTAwODBDMEQ3Cis6MTAxRTcwMDAwMjAwMEYwMEU3ODE3MTAwMzEwMDAwMDA0ODAwMDBDNDNCCis6MTAxRTgwMDAwMjAwMEYwMEU4ODE3MTAwMzEwMDAwMDA0NTAwODBDMkFGCis6MTAxRTkwMDAwMjAwMEYwMEU5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTAxRUEwMDAwMjAwMEYwMEVBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAxRUIwMDAwMjAwMEYwMEVCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAxRUMwMDAwMjAwMEYwMEVDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTAxRUQwMDAwMjAwMEYwMEVEODE3MTAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTAxRUUwMDAwMjAwMEYwMEVFODE3MTAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTAxRUYwMDAwMjAwMEYwMEVGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTAxRjAwMDAwMjAwMEYwMEYwODE3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAxRjEwMDAwMjAwMEYwMEYxODE3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAxRjIwMDAwMjAwMEYwMEYyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAxRjMwMDAwMjAwMEYwMEYzODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAxRjQwMDAwMjAwMEYwMEY0ODE3MTAwMkQwMDAwMDAwMDAwMDBEQjkyCis6MTAxRjUwMDAwMjAwMEYwMEY1ODE3MTAwM0YwMDAwMDAwNDMwMDBERDM5Cis6MTAxRjYwMDAwMjAwMEYwMEY2ODE3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAxRjcwMDAwMjAwMEYwMEY3ODE3MTAwNjkwMDAwMDA3QTNEMDBERDZBCis6MTAxRjgwMDAwMjAwMEYwMEY4ODE3MTAwM0YwMDAwMDAwNDAwMDBERDM2Cis6MTAxRjkwMDAwMjAwMEYwMEY5ODE3MTAwNjkwMDAwMDA3QTNEMDBERDQ4Cis6MTAxRkEwMDAwMjAwMEYwMEZBODE3MTAwMkQwMDAwMDAwMDAwODBEM0I0Cis6MTAxRkIwMDAwMjAwMEYwMEZCODE3MTAwM0YwMDAwMDAwNDA0MDBEREZGCis6MTAxRkMwMDAwMjAwMEYwMEZDODE3MTAwM0YwMDAwMDAwMTAwMThERERECis6MTAxRkQwMDAwMjAwMEYwMEZEODE3MTAwNjkwMDAwMDAxNDBBMDBERDlECis6MTAxRkUwMDAwMjAwMEYwMEZFODE3MTAwNjkwMDAwMDA3QTNEMDBEREYzCis6MTAxRkYwMDAwMjAwMEYwMEZGODE3MTAwNDkwMDAwMDA5NDMzMDREMUZBCis6MTAyMDAwMDAwMjAwMEYwMDAwODI3MTAwM0YwMDAwMDA4NDA0MDBERDI4Cis6MTAyMDEwMDAwMjAwMEYwMDAxODI3MTAwM0YwMDAwMDAwMTAwMThERDg2Cis6MTAyMDIwMDAwMjAwMEYwMDAyODI3MTAwNjkwMDAwMDA2MjMxMDBEREQxCis6MTAyMDMwMDAwMjAwMEYwMDAzODI3MTAwNjkwMDAwMDA3QTNEMDBERDlDCis6MTAyMDQwMDAwMjAwMEYwMDA0ODI3MTAwM0YwMDAwMDAwNDA1MDBERDYzCis6MTAyMDUwMDAwMjAwMEYwMDA1ODI3MTAwM0YwMDAwMDAwMTAwMThERDQyCis6MTAyMDYwMDAwMjAwMEYwMDA2ODI3MTAwNjkwMDAwMDA5NTBBMDBERDgxCis6MTAyMDcwMDAwMjAwMEYwMDA3ODI3MTAwNjkwMDAwMDA3QTNEMDBERDU4Cis6MTAyMDgwMDAwMjAwMEYwMDA4ODI3MTAwNDkwMDAwMDA5NTMzMDREMTVFCis6MTAyMDkwMDAwMjAwMEYwMDA5ODI3MTAwM0YwMDAwMDA4NDA1MDBERDhFCis6MTAyMEEwMDAwMjAwMEYwMDBBODI3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAyMEIwMDAwMjAwMEYwMDBCODI3MTAwNjkwMDAwMDA2MjMxMDBERDM4Cis6MTAyMEMwMDAwMjAwMEYwMDBDODI3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAyMEQwMDAwMjAwMEYwMDBEODI3MTAwM0YwMDAwMDAwNDA2MDBEREM5Cis6MTAyMEUwMDAwMjAwMEYwMDBFODI3MTAwM0YwMDAwMDAwMTAwMThEREE5Cis6MTAyMEYwMDAwMjAwMEYwMDBGODI3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAyMTAwMDAwMjAwMEYwMDEwODI3MTAwM0YwMDAwMDA4NDAwMDBERDFCCis6MTAyMTEwMDAwMjAwMEYwMDExODI3MTAwNjkwMDAwMDA3QTNEMDBEREFECis6MTAyMTIwMDAwMjAwMEYwMDEyODI3MTAwM0YwMDAwMDAwNDAwMDBERDc5Cis6MTAyMTMwMDAwMjAwMEYwMDEzODI3MTAwM0YwMDAwMDAwMTAwMThERDUzCis6MTAyMTQwMDAwMjAwMEYwMDE0ODI3MTAwNjkwMDAwMDAxNjBCMDBERDEwCis6MTAyMTUwMDAwMjAwMEYwMDE1ODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyMTYwMDAwMjAwMEYwMDE2ODI3MTAwM0YwMDAwMDAwNDEwMDBERDI1Cis6MTAyMTcwMDAwMjAwMEYwMDE3ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyMTgwMDAwMjAwMEYwMDE4ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyMTkwMDAwMjAwMEYwMDE5ODI3MTAwM0YwMDAwMDAwNDAwMDBERDAyCis6MTAyMUEwMDAwMjAwMEYwMDFBODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyMUIwMDAwMjAwMEYwMDFCODI3MTAwM0YwMDAwMDA4NDEwMDBERDUwCis6MTAyMUMwMDAwMjAwMEYwMDFDODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyMUQwMDAwMjAwMEYwMDFEODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyMUUwMDAwMjAwMEYwMDFFODI3MTAwM0YwMDAwMDAwNDgwMDFERDJDCis6MTAyMUYwMDAwMjAwMEYwMDFGODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyMjAwMDAwMjAwMEYwMDIwODI3MTAwM0YwMDAwMDAwNDExMDBERDc5Cis6MTAyMjEwMDAwMjAwMEYwMDIxODI3MTAwM0YwMDAwMDAwMTAwMThERDY0Cis6MTAyMjIwMDAwMjAwMEYwMDIyODI3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAyMjMwMDAwMjAwMEYwMDIzODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyMjQwMDAwMjAwMEYwMDI0ODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyMjUwMDAwMjAwMEYwMDI1ODI3MTAwM0YwMDAwMDA4NDExMDBEREE0Cis6MTAyMjYwMDAwMjAwMEYwMDI2ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyMjcwMDAwMjAwMEYwMDI3ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyMjgwMDAwMjAwMEYwMDI4ODI3MTAwM0YwMDAwMDAwNDAwMTZEREVDCis6MTAyMjkwMDAwMjAwMEYwMDI5ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyMkEwMDAwMjAwMEYwMDJBODI3MTAwM0YwMDAwMDAwNDEyMDBERENFCis6MTAyMkIwMDAwMjAwMEYwMDJCODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyMkMwMDAwMjAwMEYwMDJDODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyMkQwMDAwMjAwMEYwMDJEODI3MTAwM0YwMDAwMDAwNDAwMDBEREFECis6MTAyMkUwMDAwMjAwMEYwMDJFODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyMkYwMDAwMjAwMEYwMDJGODI3MTAwM0YwMDAwMDA4NDEyMDBEREY5Cis6MTAyMzAwMDAwMjAwMEYwMDMwODI3MTAwM0YwMDAwMDAwMTAwMThERDY0Cis6MTAyMzEwMDAwMjAwMEYwMDMxODI3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAyMzIwMDAwMjAwMEYwMDMyODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyMzMwMDAwMjAwMEYwMDMzODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyMzQwMDAwMjAwMEYwMDM0ODI3MTAwM0YwMDAwMDAwNDEzMDBERDIyCis6MTAyMzUwMDAwMjAwMEYwMDM1ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyMzYwMDAwMjAwMEYwMDM2ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyMzcwMDAwMjAwMEYwMDM3ODI3MTAwM0YwMDAwMDAwNDAwMDBERDAyCis6MTAyMzgwMDAwMjAwMEYwMDM4ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyMzkwMDAwMjAwMEYwMDM5ODI3MTAwM0YwMDAwMDA4NDEzMDBERDRECis6MTAyM0EwMDAwMjAwMEYwMDNBODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyM0IwMDAwMjAwMEYwMDNCODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyM0MwMDAwMjAwMEYwMDNDODI3MTAwM0YwMDAwMDAwNDAwMDVEREE4Cis6MTAyM0QwMDAwMjAwMEYwMDNEODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyM0UwMDAwMjAwMEYwMDNFODI3MTAwM0YwMDAwMDAwNDIwMDBERDZCCis6MTAyM0YwMDAwMjAwMEYwMDNGODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyNDAwMDAwMjAwMEYwMDQwODI3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAyNDEwMDAwMjAwMEYwMDQxODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyNDIwMDAwMjAwMEYwMDQyODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyNDMwMDAwMjAwMEYwMDQzODI3MTAwM0YwMDAwMDA4NDIwMDBERDk1Cis6MTAyNDQwMDAwMjAwMEYwMDQ0ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyNDUwMDAwMjAwMEYwMDQ1ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyNDYwMDAwMjAwMEYwMDQ2ODI3MTAwM0YwMDAwMDAwNDkwMDFERDcxCis6MTAyNDcwMDAwMjAwMEYwMDQ3ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyNDgwMDAwMjAwMEYwMDQ4ODI3MTAwM0YwMDAwMDAwNDIxMDBEREJGCis6MTAyNDkwMDAwMjAwMEYwMDQ5ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyNEEwMDAwMjAwMEYwMDRBODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyNEIwMDAwMjAwMEYwMDRCODI3MTAwM0YwMDAwMDA4NDAwMDBERDJECis6MTAyNEMwMDAwMjAwMEYwMDRDODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyNEQwMDAwMjAwMEYwMDREODI3MTAwM0YwMDAwMDA4NDIxMDBEREVBCis6MTAyNEUwMDAwMjAwMEYwMDRFODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyNEYwMDAwMjAwMEYwMDRGODI3MTAwNjkwMDAwMDA3QTNEMDBERDhDCis6MTAyNTAwMDAwMjAwMEYwMDUwODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyNTEwMDAwMjAwMEYwMDUxODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyNTIwMDAwMjAwMEYwMDUyODI3MTAwM0YwMDAwMDAwNDIyMDBERDEzCis6MTAyNTMwMDAwMjAwMEYwMDUzODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyNTQwMDAwMjAwMEYwMDU0ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyNTUwMDAwMjAwMEYwMDU1ODI3MTAwM0YwMDAwMDA4NDAyMDBERDgwCis6MTAyNTYwMDAwMjAwMEYwMDU2ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyNTcwMDAwMjAwMEYwMDU3ODI3MTAwM0YwMDAwMDA4NDIyMDBERDNFCis6MTAyNTgwMDAwMjAwMEYwMDU4ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyNTkwMDAwMjAwMEYwMDU5ODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyNUEwMDAwMjAwMEYwMDVBODI3MTAwM0YwMDAwMDAwNDAwMDBEREFECis6MTAyNUIwMDAwMjAwMEYwMDVCODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyNUMwMDAwMjAwMEYwMDVDODI3MTAwM0YwMDAwMDAwNDIzMDBERDY4Cis6MTAyNUQwMDAwMjAwMEYwMDVEODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyNUUwMDAwMjAwMEYwMDVFODI3MTAwNjkwMDAwMDA3QTNEMDBERDhDCis6MTAyNUYwMDAwMjAwMEYwMDVGODI3MTAwM0YwMDAwMDAwNDAwMDBERDU4Cis6MTAyNjAwMDAwMjAwMEYwMDYwODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyNjEwMDAwMjAwMEYwMDYxODI3MTAwM0YwMDAwMDAwNDE4MDBERDFECis6MTAyNjIwMDAwMjAwMEYwMDYyODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyNjMwMDAwMjAwMEYwMDYzODI3MTAwNjkwMDAwMDA5NzBCMDBERDRCCis6MTAyNjQwMDAwMjAwMEYwMDY0ODI3MTAwNjkwMDAwMDA3QTNEMDBERDI1Cis6MTAyNjUwMDAwMjAwMEYwMDY1ODI3MTAwNDkwMDAwMDA5NzMzMDREMTI5Cis6MTAyNjYwMDAwMjAwMEYwMDY2ODI3MTAwM0YwMDAwMDA4NDE4MDBERDQ4Cis6MTAyNjcwMDAwMjAwMEYwMDY3ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyNjgwMDAwMjAwMEYwMDY4ODI3MTAwNjkwMDAwMDA2MjMxMDBERDA1Cis6MTAyNjkwMDAwMjAwMEYwMDY5ODI3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAyNkEwMDAwMjAwMEYwMDZBODI3MTAwM0YwMDAwMDAwNDE5MDBERDgzCis6MTAyNkIwMDAwMjAwMEYwMDZCODI3MTAwM0YwMDAwMDAwMTAwMThERDc2Cis6MTAyNkMwMDAwMjAwMEYwMDZDODI3MTAwNjkwMDAwMDAxODBDMDBERDMwCis6MTAyNkQwMDAwMjAwMEYwMDZEODI3MTAwNjkwMDAwMDA3QTNEMDBERDhDCis6MTAyNkUwMDAwMjAwMEYwMDZFODI3MTAwNDkwMDAwMDA5ODMzMDREMThGCis6MTAyNkYwMDAwMjAwMEYwMDZGODI3MTAwM0YwMDAwMDA4NDE5MDBEREFFCis6MTAyNzAwMDAwMjAwMEYwMDcwODI3MTAwM0YwMDAwMDAwMTAwMThERDIwCis6MTAyNzEwMDAwMjAwMEYwMDcxODI3MTAwNjkwMDAwMDA2MjMxMDBERDZCCis6MTAyNzIwMDAwMjAwMEYwMDcyODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyNzMwMDAwMjAwMEYwMDczODI3MTAwM0YwMDAwMDAwNDFBMDBEREU4Cis6MTAyNzQwMDAwMjAwMEYwMDc0ODI3MTAwM0YwMDAwMDAwMTAwMThERERDCis6MTAyNzUwMDAwMjAwMEYwMDc1ODI3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAyNzYwMDAwMjAwMEYwMDc2ODI3MTAwM0YwMDAwMDAwNDAwMDBERENGCis6MTAyNzcwMDAwMjAwMEYwMDc3ODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyNzgwMDAwMjAwMEYwMDc4ODI3MTAwM0YwMDAwMDA4NDFBMDBERDEzCis6MTAyNzkwMDAwMjAwMEYwMDc5ODI3MTAwM0YwMDAwMDAwMTAwMThERDg3Cis6MTAyN0EwMDAwMjAwMEYwMDdBODI3MTAwNjkwMDAwMDAxNjBCMDBERDQ0Cis6MTAyN0IwMDAwMjAwMEYwMDdCODI3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAyN0MwMDAwMjAwMEYwMDdDODI3MTAwM0YwMDAwMDAwNDFDMDBERDRECis6MTAyN0QwMDAwMjAwMEYwMDdEODI3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAyN0UwMDAwMjAwMEYwMDdFODI3MTAwNjkwMDAwMDA5OTBDMDBERDdDCis6MTAyN0YwMDAwMjAwMEYwMDdGODI3MTAwNjkwMDAwMDA3QTNEMDBERDU5Cis6MTAyODAwMDAwMjAwMEYwMDgwODI3MTAwM0YwMDAwMDA4NDFDMDBERDg4Cis6MTAyODEwMDAwMjAwMEYwMDgxODI3MTAwM0YwMDAwMDAwMTAwMThEREZFCis6MTAyODIwMDAwMjAwMEYwMDgyODI3MTAwNjkwMDAwMDAxQTBEMDBEREI1Cis6MTAyODMwMDAwMjAwMEYwMDgzODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyODQwMDAwMjAwMEYwMDg0ODI3MTAwM0YwMDAwMDAwNDFEMDBEREMzCis6MTAyODUwMDAwMjAwMEYwMDg1ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyODYwMDAwMjAwMEYwMDg2ODI3MTAwNjkwMDAwMDA5QjBEMDBEREYwCis6MTAyODcwMDAwMjAwMEYwMDg3ODI3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAyODgwMDAwMjAwMEYwMDg4ODI3MTAwNDkwMDAwMDA5QjMzMDREMUQwCis6MTAyODkwMDAwMjAwMEYwMDg5ODI3MTAwM0YwMDAwMDA4NDFEMDBEREVFCis6MTAyOEEwMDAwMjAwMEYwMDhBODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyOEIwMDAwMjAwMEYwMDhCODI3MTAwNjkwMDAwMDA2MjMxMDBEREIwCis6MTAyOEMwMDAwMjAwMEYwMDhDODI3MTAwNjkwMDAwMDA3QTNEMDBERDdCCis6MTAyOEQwMDAwMjAwMEYwMDhEODI3MTAwM0YwMDAwMDAwNDFFMDBERDI5Cis6MTAyOEUwMDAwMjAwMEYwMDhFODI3MTAwM0YwMDAwMDAwMTAwMThERDIxCis6MTAyOEYwMDAwMjAwMEYwMDhGODI3MTAwNjkwMDAwMDAxQzBFMDBEREQ1Cis6MTAyOTAwMDAwMjAwMEYwMDkwODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyOTEwMDAwMjAwMEYwMDkxODI3MTAwM0YwMDAwMDAwNDAxMDBERDAxCis6MTAyOTIwMDAwMjAwMEYwMDkyODI3MTAwM0YwMDAwMDAwMTAwMThERERDCis6MTAyOTMwMDAwMjAwMEYwMDkzODI3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAyOTQwMDAwMjAwMEYwMDk0ODI3MTAwM0YwMDAwMDAwNDBGMDBEREMwCis6MTAyOTUwMDAwMjAwMEYwMDk1ODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyOTYwMDAwMjAwMEYwMDk2ODI3MTAwN0QwMDAwMDAxM0E3NjBDNzZGCis6MTAyOTcwMDAwMjAwMEYwMDk3ODI3MTAwMzEwMDAwMDA0MTAwODBDMDBBCis6MTAyOTgwMDAwMjAwMEYwMDk4ODI3MTAwMzEwMDAwMDA0ODAwMDBDNDZFCis6MTAyOTkwMDAwMjAwMEYwMDk5ODI3MTAwMzEwMDAwMDA0NTAwODBDMkUyCis6MTAyOUEwMDAwMjAwMEYwMDlBODI3MTAwMzEwMDAwMDA2RDAwODBENjk1Cis6MTAyOUIwMDAwRjAwMEYwMDY0MDA3MDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAyOUMwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMTAwMDAwMDA0MDAwMEMyCis6MTAyOUQwMDA2NDAwMDAwMDU0MDAwMDAwMDAwMDAwMDAwMDI0MDAwMDFCCis6MTAyOUUwMDAwMDI4MDAwMDAwMDQwMDAwODAyODAwMDA4MDAxMDAwMDkyCis6MTAyOUYwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAyQTAwMDA1MTAwMDAwMDdEMDEwMDAwMDgwMDAwMDA1MTAwMDAwMDlFCis6MTAyQTEwMDA1RDAwMDAwMDAwMDAwMDAwMDkwMDAwMDAwMDUwMDAwMDAwCis6MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMEYwMDBGMDBGNDAxNzAwMDIzCis6MTAyQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDU2Cis6MTAyQTQwMDAwMDAxMDAwMDAwMDQwMDAwNjQwMDAwMDA1NDAwMDAwMEM5Cis6MTAyQTUwMDAwMDAwMDAwMDAwMjQwMDAwMDAyODAwMDAwMDA0MDAwMDI2Cis6MTAyQTYwMDA4MDI4MDAwMDgwMDEwMDAwMDMwMDAwMDAwMDAwMDAwMDNBCis6MTAyQTcwMDAwMDAwMDAwMDAwMDAwMDAwNTEwMDAwMDA3RDAxMDAwMDg3Cis6MTAyQTgwMDAwODAwMDAwMDUxMDAwMDAwNUQwMDAwMDAwMDAwMDAwMDkwCis6MTAyQTkwMDAwOTAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAyQUEwMDAwMjAwMEYwMDAwMDA3MDAwMDEwMDAwMDAwMDAwMDAwMEE0Cis6MTAyQUIwMDAwMjAwMEYwMDAwMDA3MDAwMDEwMDAwMDAwMDAwMDAwMDk0Cis6MTAyQUMwMDAwMjAwMEYwMDAwODA3MTAwMjUwMDAwMDAwMjAwMEVEREYyCis6MTAyQUQwMDAwMjAwMEYwMDAxODA3MTAwMDQwMDAwMDA3NjNCRDEwMTZDCis6MTAyQUUwMDAwMjAwMEYwMDAyODA3MTAwMjUwMDAwMDA4MjAwMEVERDUwCis6MTAyQUYwMDAwMjAwMEYwMDAzODA3MTAwMDQwMDAwMDA3NjNCODkwMjkxCis6MTAyQjAwMDAwMjAwMEYwMDA0ODA3MTAwMjUwMDAwMDAwMjAxMEVEREFDCis6MTAyQjEwMDAwMjAwMEYwMDA1ODA3MTAwMDQwMDAwMDA3NjNCODUwMjcyCis6MTAyQjIwMDAwMjAwMEYwMDA2ODA3MTAwMjUwMDAwMDA4MjAxMEVERDBBCis6MTAyQjMwMDAwMjAwMEYwMDA3ODA3MTAwMDQwMDAwMDA3NjNCRkQwM0Q3Cis6MTAyQjQwMDAwMjAwMEYwMDA4ODA3MTAwMDkwMDAwMDA3NjNCODFDRjcxCis6MTAyQjUwMDAwMjAwMEYwMDA5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyQjYwMDAwMjAwMEYwMDBBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyQjcwMDAwMjAwMEYwMDBCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyQjgwMDAwMjAwMEYwMDBDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyQjkwMDAwMjAwMEYwMDBEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyQkEwMDAwMjAwMEYwMDBFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyQkIwMDAwMjAwMEYwMDBGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyQkMwMDAwMjAwMEYwMDEwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyQkQwMDAwMjAwMEYwMDExODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyQkUwMDAwMjAwMEYwMDEyODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyQkYwMDAwMjAwMEYwMDEzODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyQzAwMDAwMjAwMEYwMDE0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAyQzEwMDAwMjAwMEYwMDE1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyQzIwMDAwMjAwMEYwMDE2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyQzMwMDAwMjAwMEYwMDE3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyQzQwMDAwMjAwMEYwMDE4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyQzUwMDAwMjAwMEYwMDE5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyQzYwMDAwMjAwMEYwMDFBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyQzcwMDAwMjAwMEYwMDFCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyQzgwMDAwMjAwMEYwMDFDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyQzkwMDAwMjAwMEYwMDFEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyQ0EwMDAwMjAwMEYwMDFFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyQ0IwMDAwMjAwMEYwMDFGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyQ0MwMDAwMjAwMEYwMDIwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyQ0QwMDAwMjAwMEYwMDIxODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyQ0UwMDAwMjAwMEYwMDIyODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyQ0YwMDAwMjAwMEYwMDIzODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyRDAwMDAwMjAwMEYwMDI0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyRDEwMDAwMjAwMEYwMDI1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyRDIwMDAwMjAwMEYwMDI2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyRDMwMDAwMjAwMEYwMDI3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyRDQwMDAwMjAwMEYwMDI4ODA3MTAwNDkwMDAwMDAwMDNCMDBDMDE1Cis6MTAyRDUwMDAwMjAwMEYwMDI5ODA3MTAwNDkwMDAwMDAwMjNCODBDMDgyCis6MTAyRDYwMDAwMjAwMEYwMDJBODA3MTAwNDkwMDAwMDAwMzNCMDBDMUVGCis6MTAyRDcwMDAwMjAwMEYwMDJCODA3MTAwNDkwMDAwMDAwNDNCODBDMTVECis6MTAyRDgwMDAwMjAwMEYwMDJDODA3MTAwMjkwMDAwMDA3NjAwNjBERjM3Cis6MTAyRDkwMDAwMjAwMEYwMDJEODA3MTAwNDkwMDAwMDA3RDNCNDRERkUwCis6MTAyREEwMDAwMjAwMEYwMDJFODA3MTAwNzkwMDAwMDA3NjkwNjBGRDE3Cis6MTAyREIwMDAwMjAwMEYwMDJGODA3MTAwM0QwMDAwMDA2RjAwODBGN0JGCis6MTAyREMwMDAwMjAwMEYwMDMwODA3MTAwM0QwMDAwMDA2RjAwODBGN0FFCis6MTAyREQwMDAwMjAwMEYwMDMxODA3MTAwM0QwMDAwMDA2RjAwODBGNzlECis6MTAyREUwMDAwMjAwMEYwMDMyODA3MTAwM0QwMDAwMDA2RjAwODBGNzhDCis6MTAyREYwMDAwMjAwMEYwMDMzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyRTAwMDAwMjAwMEYwMDM0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyRTEwMDAwMjAwMEYwMDM1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyRTIwMDAwMjAwMEYwMDM2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyRTMwMDAwMjAwMEYwMDM3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyRTQwMDAwMjAwMEYwMDM4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyRTUwMDAwMjAwMEYwMDM5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyRTYwMDAwMjAwMEYwMDNBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyRTcwMDAwMjAwMEYwMDNCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyRTgwMDAwMjAwMEYwMDNDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyRTkwMDAwMjAwMEYwMDNEODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyRUEwMDAwMjAwMEYwMDNFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyRUIwMDAwMjAwMEYwMDNGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyRUMwMDAwMjAwMEYwMDQwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyRUQwMDAwMjAwMEYwMDQxODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyRUUwMDAwMjAwMEYwMDQyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyRUYwMDAwMjAwMEYwMDQzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyRjAwMDAwMjAwMEYwMDQ0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyRjEwMDAwMjAwMEYwMDQ1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyRjIwMDAwMjAwMEYwMDQ2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyRjMwMDAwMjAwMEYwMDQ3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyRjQwMDAwMjAwMEYwMDQ4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyRjUwMDAwMjAwMEYwMDQ5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyRjYwMDAwMjAwMEYwMDRBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyRjcwMDAwMjAwMEYwMDRCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyRjgwMDAwMjAwMEYwMDRDODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyRjkwMDAwMjAwMEYwMDREODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyRkEwMDAwMjAwMEYwMDRFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyRkIwMDAwMjAwMEYwMDRGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyRkMwMDAwMjAwMEYwMDUwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyRkQwMDAwMjAwMEYwMDUxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyRkUwMDAwMjAwMEYwMDUyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyRkYwMDAwMjAwMEYwMDUzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAzMDAwMDAwMjAwMEYwMDU0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAzMDEwMDAwMjAwMEYwMDU1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAzMDIwMDAwMjAwMEYwMDU2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAzMDMwMDAwMjAwMEYwMDU3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzMDQwMDAwMjAwMEYwMDU4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzMDUwMDAwMjAwMEYwMDU5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzMDYwMDAwMjAwMEYwMDVBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzMDcwMDAwMjAwMEYwMDVCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzMDgwMDAwMjAwMEYwMDVDODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzMDkwMDAwMjAwMEYwMDVEODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzMEEwMDAwMjAwMEYwMDVFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzMEIwMDAwMjAwMEYwMDVGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzMEMwMDAwMjAwMEYwMDYwODA3MTAwM0YwMDAwMDAwMzAwMDBERjdECis6MTAzMEQwMDAwMjAwMEYwMDYxODA3MTAwMkQwMDAwMDA4MTBGRTBERDEzCis6MTAzMEUwMDAwMjAwMEYwMDYyODA3MTAwM0YwMDAwMDA4MzAyODBERDVCCis6MTAzMEYwMDAwMjAwMEYwMDYzODA3MTAwMkQwMDAwMDA4MDAxMDRERERDCis6MTAzMTAwMDAwMjAwMEYwMDY0ODA3MTAwN0QwMDAwMDA4MDAwMTVGRDRBCis6MTAzMTEwMDAwMjAwMEYwMDY1ODA3MTAwN0EwMDAwMDA3NjNCMjAxMEVECis6MTAzMTIwMDAwMjAwMEYwMDY2ODA3MTAwN0EwMDAwMDA3NjdCMjAzMDdDCis6MTAzMTMwMDAwMjAwMEYwMDY3ODA3MTAwMjEwMDAwMDA2MDAwMjREMEIxCis6MTAzMTQwMDAwMjAwMEYwMDY4ODA3MTAwM0YwMDAwMDAwNDAxMDBEREY0Cis6MTAzMTUwMDAwMjAwMEYwMDY5ODA3MTAwM0YwMDAwMDA4MTAyNDBERDI1Cis6MTAzMTYwMDAwMjAwMEYwMDZBODA3MTAwNzkwMDAwMDAwM0JCMzFEREFFCis6MTAzMTcwMDAwMjAwMEYwMDZCODA3MTAwNzkwMDAwMDAwNEZCMzFERDVDCis6MTAzMTgwMDAwMjAwMEYwMDZDODA3MTAwNzkwMDAwMDA3NkJCMzFERDE5Cis6MTAzMTkwMDAwMjAwMEYwMDZEODA3MTAwNzkwMDAwMDA3NkZCMzFEREM4Cis6MTAzMUEwMDAwMjAwMEYwMDZFODA3MTAwNzkwMDAwMDAwMTAxMjFGRDE2Cis6MTAzMUIwMDAwMjAwMEYwMDZGODA3MTAwN0QwMDAwMDA4MTQwMkJGRDM4Cis6MTAzMUMwMDAwMjAwMEYwMDcwODA3MTAwNDAwMDAwMDAwMjMwMDAzRERFCis6MTAzMUQwMDAwMjAwMEYwMDcxODA3MTAwNDgwMDAwMDAwMjNCMDAxRERBCis6MTAzMUUwMDAwMjAwMEYwMDcyODA3MTAwNzkwMDAwMDA3NjdCMjFERDAzCis6MTAzMUYwMDAwMjAwMEYwMDczODA3MTAwMkQwMDAwMDA3RjA1MDREREM4Cis6MTAzMjAwMDAwMjAwMEYwMDc0ODA3MTAwMTgwMDAwMDA3NjNCN0YzREMzCis6MTAzMjEwMDAwMjAwMEYwMDc1ODA3MTAwM0QwMDAwMDA2RjAwODBGNzE0Cis6MTAzMjIwMDAwMjAwMEYwMDc2ODA3MTAwM0QwMDAwMDA2RjAwODBGNzAzCis6MTAzMjMwMDAwMjAwMEYwMDc3ODA3MTAwM0QwMDAwMDA2RjAwODBGN0YyCis6MTAzMjQwMDAwMjAwMEYwMDc4ODA3MTAwMjEwMDAwMDA3NjFGMzdFMzM0Cis6MTAzMjUwMDAwMjAwMEYwMDc5ODA3MTAwNDkwMDAwMDA3OTNCMDBERDE5Cis6MTAzMjYwMDAwMjAwMEYwMDdBODA3MTAwNzkwMDAwMDA3NkJCMjFERDNBCis6MTAzMjcwMDAwMjAwMEYwMDdCODA3MTAwNDkwMDAwMDA3OTNCMDBEREY3Cis6MTAzMjgwMDAwMjAwMEYwMDdDODA3MTAwNzkwMDAwMDA3NkJCMjFERDE4Cis6MTAzMjkwMDAwMjAwMEYwMDdEODA3MTAwNDkwMDAwMDA3OTNCMDBEREQ1Cis6MTAzMkEwMDAwMjAwMEYwMDdFODA3MTAwNzkwMDAwMDA3NkJCMjFEREY2Cis6MTAzMkIwMDAwMjAwMEYwMDdGODA3MTAwNzkwMDAwMDA3NjkwNjBGREIxCis6MTAzMkMwMDAwMjAwMEYwMDgwODA3MTAwNzkwMDAwMDA3NkZCMjFERDk0Cis6MTAzMkQwMDAwMjAwMEYwMDgxODA3MTAwM0YwMDAwMDA4MzAwMDBERkNBCis6MTAzMkUwMDAwMjAwMEYwMDgyODA3MTAwM0QwMDAwMDA2RjAwODBGNzM3Cis6MTAzMkYwMDAwMjAwMEYwMDgzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAzMzAwMDAwMjAwMEYwMDg0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzMzEwMDAwMjAwMEYwMDg1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzMzIwMDAwMjAwMEYwMDg2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzMzMwMDAwMjAwMEYwMDg3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzMzQwMDAwMjAwMEYwMDg4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzMzUwMDAwMjAwMEYwMDg5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzMzYwMDAwMjAwMEYwMDhBODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzMzcwMDAwMjAwMEYwMDhCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzMzgwMDAwMjAwMEYwMDhDODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzMzkwMDAwMjAwMEYwMDhEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzM0EwMDAwMjAwMEYwMDhFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAzM0IwMDAwMjAwMEYwMDhGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAzM0MwMDAwMjAwMEYwMDkwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTAzM0QwMDAwMjAwMEYwMDkxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTAzM0UwMDAwMjAwMEYwMDkyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAzM0YwMDAwMjAwMEYwMDkzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTAzNDAwMDAwMjAwMEYwMDk0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzNDEwMDAwMjAwMEYwMDk1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzNDIwMDAwMjAwMEYwMDk2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzNDMwMDAwMjAwMEYwMDk3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzNDQwMDAwMjAwMEYwMDk4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzNDUwMDAwMjAwMEYwMDk5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzNDYwMDAwMjAwMEYwMDlBODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzNDcwMDAwMjAwMEYwMDlCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzNDgwMDAwMjAwMEYwMDlDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzNDkwMDAwMjAwMEYwMDlEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAzNEEwMDAwMjAwMEYwMDlFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAzNEIwMDAwMjAwMEYwMDlGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTAzNEMwMDAwMjAwMEYwMEEwODA3MTAwMkQwMDAwMDAwMzA4MDhEMDRBCis6MTAzNEQwMDAwMjAwMEYwMEExODA3MTAwMDgwMDAwMDA3NkZCQjUyMUZBCis6MTAzNEUwMDAwMjAwMEYwMEEyODA3MTAwNzkwMDAwMDA4MTAwMDFERDYwCis6MTAzNEYwMDAwMjAwMEYwMEEzODA3MTAwNzkwMDAwMDAwMjgxMDFERDRECis6MTAzNTAwMDAwMjAwMEYwMEE0ODA3MTAwN0QwMDAwMDA4MzgwMDFGRDk3Cis6MTAzNTEwMDAwMjAwMEYwMEE1ODA3MTAwNzkwMDAwMDA3NjNCOTBEMDdBCis6MTAzNTIwMDAwMjAwMEYwMEE2ODA3MTAwNDkwMDAwMDA3QTNCNThEMENECis6MTAzNTMwMDAwMjAwMEYwMEE3ODA3MTAwNDkwMDAwMDAwMDNCMDREMjg4Cis6MTAzNTQwMDAwMjAwMEYwMEE4ODA3MTAwM0QwMDAwMDAwMzAwNDBERDc0Cis6MTAzNTUwMDAwMjAwMEYwMEE5ODA3MTAwMjQwMDAwMDA2NDAyMDAzMjA0Cis6MTAzNTYwMDAwMjAwMEYwMEFBODA3MTAwM0QwMDAwMDAwM0Y4N0ZERDFCCis6MTAzNTcwMDAwMjAwMEYwMEFCODA3MTAwMjkwMDAwMDA3QTAxMjBEMDBBCis6MTAzNTgwMDAwMjAwMEYwMEFDODA3MTAwNDkwMDAwMDAwRTNCQTREMDg3Cis6MTAzNTkwMDAwMjAwMEYwMEFEODA3MTAwMkQwMDAwMDBGRjQyMDRERDJECis6MTAzNUEwMDAwMjAwMEYwMEFFODA3MTAwMTgwMDAwMDA3NjNCN0YzREU2Cis6MTAzNUIwMDAwMjAwMEYwMEFGODA3MTAwMkQwMDAwMDA4MjAwMDZEREM4Cis6MTAzNUMwMDAwMjAwMEYwMEIwODA3MTAwMzgwMDAwMDBFMDAxMDAzMDAwCis6MTAzNUQwMDAwMjAwMEYwMEIxODA3MTAwMzkwMDAwMDA2MDAxMDBEMENFCis6MTAzNUUwMDAwMjAwMEYwMEIyODA3MTAwNzkwMDAwMDA3QzNCQjFEMTc1Cis6MTAzNUYwMDAwMjAwMEYwMEIzODA3MTAwMkQwMDAwMDBFMzBGRTBERDNBCis6MTAzNjAwMDAwMjAwMEYwMEI0ODA3MTAwNDkwMDAwMDBFNDMwODBEMDU3Cis6MTAzNjEwMDAwMjAwMEYwMEI1ODA3MTAwNzkwMDAwMDA3QzdCMzFERDc1Cis6MTAzNjIwMDAwMjAwMEYwMEI2ODA3MTAwNzkwMDAwMDA3QzNCMzFEREE0Cis6MTAzNjMwMDAwMjAwMEYwMEI3ODA3MTAwN0QwMDAwMDA4MjQwMzdGRDVFCis6MTAzNjQwMDAwMjAwMEYwMEI4ODA3MTAwMDgwMDAwMDA3NjNCN0QwMTg5Cis6MTAzNjUwMDAwMjAwMEYwMEI5ODA3MTAwM0QwMDAwMDA2RjAwODBGNzhDCis6MTAzNjYwMDAwMjAwMEYwMEJBODA3MTAwM0QwMDAwMDA2RjAwODBGNzdCCis6MTAzNjcwMDAwMjAwMEYwMEJCODA3MTAwNDkwMDAwMDA4NzAzMDBERERECis6MTAzNjgwMDAwMjAwMEYwMEJDODA3MTAwNzkwMDAwMDAwODA0MzFEREU5Cis6MTAzNjkwMDAwMjAwMEYwMEJEODA3MTAwNzkwMDAwMDA3QTdEMzFEREVECis6MTAzNkEwMDAwMjAwMEYwMEJFODA3MTAwNDkwMDAwMDA3QzNCMDBEMzg3Cis6MTAzNkIwMDAwMjAwMEYwMEJGODA3MTAwNzkwMDAwMDA3Q0JCODFEMzQ1Cis6MTAzNkMwMDAwMjAwMEYwMEMwODA3MTAwN0YwMDAwMDA3Q0IyMDFEMUI5Cis6MTAzNkQwMDAwMjAwMEYwMEMxODA3MTAwNDgwMDAwMDA2NDMyMDA1MUY4Cis6MTAzNkUwMDAwMjAwMEYwMEMyODA3MTAwM0QwMDAwMDAwMzAwNDBEREI5Cis6MTAzNkYwMDAwMjAwMEYwMEMzODA3MTAwMDgwMDAwMDA2MjMxOTUwMUQ0Cis6MTAzNzAwMDAwMjAwMEYwMEM0ODA3MTAwMjEwMDAwMDA2NjA2MDBEMzkzCis6MTAzNzEwMDAwMjAwMEYwMEM1ODA3MTAwMjAwMDAwMDBFNzAwODA1MzA4Cis6MTAzNzIwMDAwMjAwMEYwMEM2ODA3MTAwM0YwMDAwMDAwMDA4MDBEREFECis6MTAzNzMwMDAwMjAwMEYwMEM3ODA3MTAwNzkwMDAwMDA2NkIzMDFERDUwCis6MTAzNzQwMDAwMjAwMEYwMEM4ODA3MTAwNzkwMDAwMDBFN0IzMDFEREJFCis6MTAzNzUwMDAwMjAwMEYwMEM5ODA3MTAwNzUwMDAwMDA2Mjg2MDFGMTRGCis6MTAzNzYwMDAwMjAwMEYwMENBODA3MTAwNzUwMDAwMDA2NEIxMDFEMjMwCis6MTAzNzcwMDAwMjAwMEYwMENCODA3MTAwNzgwMDAwMDA3NjdCMDAxREY2Cis6MTAzNzgwMDAwMjAwMEYwMENDODA3MTAwMjUwMDAwMDBFMzAxMDBERDg1Cis6MTAzNzkwMDAwMjAwMEYwMENEODA3MTAwMDgwMDAwMDA2MjMxQjEwMTBECis6MTAzN0EwMDAwMjAwMEYwMENFODA3MTAwM0QwMDAwMDA2RjAwODBGNzI2Cis6MTAzN0IwMDAwMjAwMEYwMENGODA3MTAwM0QwMDAwMDA2RjAwODBGNzE1Cis6MTAzN0MwMDAwMjAwMEYwMEQwODA3MTAwM0QwMDAwMDA2RjAwODBGNzA0Cis6MTAzN0QwMDAwMjAwMEYwMEQxODA3MTAwMjEwMDAwMDA2MzlGMzdFM0Q5Cis6MTAzN0UwMDAwMjAwMEYwMEQyODA3MTAwNDkwMDAwMDA3QzNCMDBEMzMyCis6MTAzN0YwMDAwMjAwMEYwMEQzODA3MTAwNzkwMDAwMDA3Q0JCODFEM0YwCis6MTAzODAwMDAwMjAwMEYwMEQ0ODA3MTAwN0YwMDAwMDA3Q0IyMDFEMTYzCis6MTAzODEwMDAwMjAwMEYwMEQ1ODA3MTAwNDgwMDAwMDA2NDMyMDA1MUEyCis6MTAzODIwMDAwMjAwMEYwMEQ2ODA3MTAwNzUwMDAwMDA2NEIxMDFEMjYzCis6MTAzODMwMDAwMjAwMEYwMEQ3ODA3MTAwNzgwMDAwMDA3NjdCMDAxRDI5Cis6MTAzODQwMDAwMjAwMEYwMEQ4ODA3MTAwM0YwMDAwMDAwNDAwMDBERDdFCis6MTAzODUwMDAwMjAwMEYwMEQ5ODA3MTAwNzkwMDAwMDA4MUMwMDFEREY1Cis6MTAzODYwMDAwMjAwMEYwMERBODA3MTAwNzkwMDAwMDA3NjkwNjBGREEwCis6MTAzODcwMDAwMjAwMEYwMERCODA3MTAwMkQwMDAwMDAwMzA4MDhERDRFCis6MTAzODgwMDAwMjAwMEYwMERDODA3MTAwNzgwMDAwMDA4MUMwMDEzRDYzCis6MTAzODkwMDAwMjAwMEYwMEREODA3MTAwM0QwMDAwMDA2RjAwODBGNzI2Cis6MTAzOEEwMDAwMjAwMEYwMERFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTAzOEIwMDAwMjAwMEYwMERGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAzOEMwMDAwMjAwMEYwMEUwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTAzOEQwMDAwMjAwMEYwMEUxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAzOEUwMDAwMjAwMEYwMEUyODA3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAzOEYwMDAwMjAwMEYwMEUzODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAzOTAwMDAwMjAwMEYwMEU0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzOTEwMDAwMjAwMEYwMEU1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzOTIwMDAwMjAwMEYwMEU2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzOTMwMDAwMjAwMEYwMEU3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzOTQwMDAwMjAwMEYwMEU4ODA3MTAwNDkwMDAwMDAwMzNCOEVEMUE3Cis6MTAzOTUwMDAwMjAwMEYwMEU5ODA3MTAwMkYwMDAwMDBFMzAwODFEMTE4Cis6MTAzOTYwMDAwMjAwMEYwMEVBODA3MTAwM0YwMDAwMDAwMzE4ODBEMUMwCis6MTAzOTcwMDAwMjAwMEYwMEVCODA3MTAwNDkwMDAwMDAwMzNCMDREMUZFCis6MTAzOTgwMDAwMjAwMEYwMEVDODA3MTAwM0YwMDAwMDAwMzAyODBEREE4Cis6MTAzOTkwMDAwMjAwMEYwMEVEODA3MTAwNDkwMDAwMDAwMjNCMDREMkRDCis6MTAzOUEwMDAwMjAwMEYwMEVFODA3MTAwNDkwMDAwMDAwMDNCODREMjRECis6MTAzOUIwMDAwMjAwMEYwMEVGODA3MTAwMjUwMDAwMDBFMjAwMDBERDMyCis6MTAzOUMwMDAwMjAwMEYwMEYwODA3MTAwOTQwMDAwMDA2MjQxMTMwMEJCCis6MTAzOUQwMDAwMjAwMEYwMEYxODA3MTAwOTQwMDAwMDA2MjQzMEIwMEIwCis6MTAzOUUwMDAwMjAwMEYwMEYyODA3MTAwOTQwMDAwMDBFMjQ4MTUwMDEwCis6MTAzOUYwMDAwMjAwMEYwMEYzODA3MTAwOTQwMDAwMDA2MjQ5MUIwMDc4Cis6MTAzQTAwMDAwMjAwMEYwMEY0ODA3MTAwOTQwMDAwMDA3NjQwMkYwMDQ3Cis6MTAzQTEwMDAwMjAwMEYwMEY1ODA3MTAwMDkwMDAwMDA3QTNEODFDRjlGCis6MTAzQTIwMDAwMjAwMEYwMEY2ODA3MTAwMUQwMDAwMDBFNTgwMkJGREY0Cis6MTAzQTMwMDAwMjAwMEYwMEY3ODA3MTAwMzAwMDAwMDA2MzgwODMzMUM2Cis6MTAzQTQwMDAwMjAwMEYwMEY4ODA3MTAwMzAwMDAwMDA2MzgwODIxMUQ2Cis6MTAzQTUwMDAwMjAwMEYwMEY5ODA3MTAwMUQwMDAwMDBFNTgwMjVGREM3Cis6MTAzQTYwMDAwMjAwMEYwMEZBODA3MTAwMzAwMDAwMDA2MzAwODMzMTEzCis6MTAzQTcwMDAwMjAwMEYwMEZCODA3MTAwMzAwMDAwMDA2MzAwODIxMTIzCis6MTAzQTgwMDAwMjAwMEYwMEZDODA3MTAwMkYwMDAwMDBFMzAwODFEMUQ0Cis6MTAzQTkwMDAwMjAwMEYwMEZEODA3MTAwMUQwMDAwMDBFNTgwMDlGRDlGCis6MTAzQUEwMDAwMjAwMEYwMEZFODA3MTAwMzAwMDAwMDA2M0QzODMzMUZDCis6MTAzQUIwMDAwMjAwMEYwMEZGODA3MTAwMzAwMDAwMDA2M0QyODMxMTBDCis6MTAzQUMwMDAwMjAwMEYwMDAwODE3MTAwMkYwMDAwMDBFMzAwODFEMThGCis6MTAzQUQwMDAwMjAwMEYwMDAxODE3MTAwM0YwMDAwMDA4NDAxODBENkM4Cis6MTAzQUUwMDAwMjAwMEYwMDAyODE3MTAwM0YwMDAwMDAwMTAwODBENjNCCis6MTAzQUYwMDAwMjAwMEYwMDAzODE3MTAwMzUwMDAwMDBFRDAwODBENjQ4Cis6MTAzQjAwMDAwMjAwMEYwMDA0ODE3MTAwMTgwMDAwMDA4MTAwRkYzN0RGCis6MTAzQjEwMDAwMjAwMEYwMDA1ODE3MTAwMjUwMDAwMDA2NDAyMDBEMjQwCis6MTAzQjIwMDAwMjAwMEYwMDA2ODE3MTAwMTgwMDAwMDA3QUZENzc3RDA5Cis6MTAzQjMwMDAwMjAwMEYwMDA3ODE3MTAwNDkwMDAwMDA2MzNCMjBERTk2Cis6MTAzQjQwMDAwMjAwMEYwMDA4ODE3MTAwNDkwMDAwMDA3OTNCODBERTBGCis6MTAzQjUwMDAwMjAwMEYwMDA5ODE3MTAwMjEwMDAwMDBFMzAwODBEMTA0Cis6MTAzQjYwMDAwMjAwMEYwMDBBODE3MTAwMDkwMDAwMDA3QTNEODFDRjM4Cis6MTAzQjcwMDAwMjAwMEYwMDBCODE3MTAwNDkwMDAwMDBFMzMxMDBEREZECis6MTAzQjgwMDAwMjAwMEYwMDBDODE3MTAwNjkwMDAwMDA3ODNCMEVERDFGCis6MTAzQjkwMDAwMjAwMEYwMDBEODE3MTAwNjEwMDAwMDA3NjNCMDBERDI2Cis6MTAzQkEwMDAwMjAwMEYwMDBFODE3MTAwM0YwMDAwMDA4NDAxMDBERDYzCis6MTAzQkIwMDAwMjAwMEYwMDBGODE3MTAwM0YwMDAwMDAwMTAwMDBEREQ2Cis6MTAzQkMwMDAwMjAwMEYwMDEwODE3MTAwMzUwMDAwMDBGQTAwMDBEREQ2Cis6MTAzQkQwMDAwMjAwMEYwMDExODE3MTAwMTgwMDAwMDA3NjNCN0YzQjRFCis6MTAzQkUwMDAwMjAwMEYwMDEyODE3MTAwM0QwMDAwMDA2RjAwODBGNzlECis6MTAzQkYwMDAwMjAwMEYwMDEzODE3MTAwM0QwMDAwMDA2RjAwODBGNzhDCis6MTAzQzAwMDAwMjAwMEYwMDE0ODE3MTAwM0QwMDAwMDA2RjAwODBGNzdBCis6MTAzQzEwMDAwMjAwMEYwMDE1ODE3MTAwMjEwMDAwMDBFMzAwODBEMTM3Cis6MTAzQzIwMDAwMjAwMEYwMDE2ODE3MTAwNjkwMDAwMDA3OTNCMDRERDdECis6MTAzQzMwMDAwMjAwMEYwMDE3ODE3MTAwNjEwMDAwMDBFMzAwODBGMUI1Cis6MTAzQzQwMDAwMjAwMEYwMDE4ODE3MTAwM0YwMDAwMDA4NDAxODBENjNGCis6MTAzQzUwMDAwMjAwMEYwMDE5ODE3MTAwM0YwMDAwMDAwMTAwODBENkIyCis6MTAzQzYwMDAwMjAwMEYwMDFBODE3MTAwMzUwMDAwMDBFRDAwODBENkJGCis6MTAzQzcwMDAwMjAwMEYwMDFCODE3MTAwMTgwMDAwMDA4MTAwRkYzNzU3Cis6MTAzQzgwMDAwMjAwMEYwMDFDODE3MTAwMjUwMDAwMDA2NDAyMDBEMkI4Cis6MTAzQzkwMDAwMjAwMEYwMDFEODE3MTAwOTgwMDAwMDA3NkJCNUQ2MDdFCis6MTAzQ0EwMDAwMjAwMEYwMDFFODE3MTAwMDkwMDAwMDA3QTNEODFDRkUzCis6MTAzQ0IwMDAwMjAwMEYwMDFGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzQ0MwMDAwMjAwMEYwMDIwODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzQ0QwMDAwMjAwMEYwMDIxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzQ0UwMDAwMjAwMEYwMDIyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzQ0YwMDAwMjAwMEYwMDIzODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzRDAwMDAwMjAwMEYwMDI0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAzRDEwMDAwMjAwMEYwMDI1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAzRDIwMDAwMjAwMEYwMDI2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAzRDMwMDAwMjAwMEYwMDI3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAzRDQwMDAwMjAwMEYwMDI4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAzRDUwMDAwMjAwMEYwMDI5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzRDYwMDAwMjAwMEYwMDJBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzRDcwMDAwMjAwMEYwMDJCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzRDgwMDAwMjAwMEYwMDJDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzRDkwMDAwMjAwMEYwMDJEODE3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzREEwMDAwMjAwMEYwMDJFODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzREIwMDAwMjAwMEYwMDJGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzREMwMDAwMjAwMEYwMDMwODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzREQwMDAwMjAwMEYwMDMxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzREUwMDAwMjAwMEYwMDMyODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzREYwMDAwMjAwMEYwMDMzODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAzRTAwMDAwMjAwMEYwMDM0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAzRTEwMDAwMjAwMEYwMDM1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAzRTIwMDAwMjAwMEYwMDM2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAzRTMwMDAwMjAwMEYwMDM3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAzRTQwMDAwMjAwMEYwMDM4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzRTUwMDAwMjAwMEYwMDM5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzRTYwMDAwMjAwMEYwMDNBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzRTcwMDAwMjAwMEYwMDNCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzRTgwMDAwMjAwMEYwMDNDODE3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzRTkwMDAwMjAwMEYwMDNEODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzRUEwMDAwMjAwMEYwMDNFODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzRUIwMDAwMjAwMEYwMDNGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzRUMwMDAwMjAwMEYwMDQwODE3MTAwNDkwMDAwMDAwMTNCMDhENDRFCis6MTAzRUQwMDAwMjAwMEYwMDQxODE3MTAwMDkwMDAwMDA3QTNEOEJDMjkxCis6MTAzRUUwMDAwMjAwMEYwMDQyODE3MTAwM0YwMDAwMDA4MDAzMDBENEY3Cis6MTAzRUYwMDAwMjAwMEYwMDQzODE3MTAwMDkwMDAwMDA3QTNEOEJDMjZGCis6MTAzRjAwMDAwMjAwMEYwMDQ0ODE3MTAwNDkwMDAwMDAwMzNCMEVENDAxCis6MTAzRjEwMDAwMjAwMEYwMDQ1ODE3MTAwM0YwMDAwMDAwMDAwNDJENjAyCis6MTAzRjIwMDAwMjAwMEYwMDQ2ODE3MTAwMkYwMDAwMDA4MDQwODFEMjA2Cis6MTAzRjMwMDAwMjAwMEYwMDQ3ODE3MTAwMkQwMDAwMDA2NTAzODREMjRDCis6MTAzRjQwMDAwMjAwMEYwMDQ4ODE3MTAwM0YwMDAwMDA4MDAwODBENjExCis6MTAzRjUwMDAwMjAwMEYwMDQ5ODE3MTAwM0YwMDAwMDAwNDAwMDREREYxCis6MTAzRjYwMDAwMjAwMEYwMDRBODE3MTAwM0YwMDAwMDAwMTAwMThERENGCis6MTAzRjcwMDAwMjAwMEYwMDRCODE3MTAwNjkwMDAwMDA2RDNCMDBERDA1Cis6MTAzRjgwMDAwMjAwMEYwMDRDODE3MTAwNjkwMDAwMDA2RDNCMDBEREY0Cis6MTAzRjkwMDAwMjAwMEYwMDREODE3MTAwMzEwMDAwMDA2NUQyMDNEMzkzCis6MTAzRkEwMDAwMjAwMEYwMDRFODE3MTAwNDkwMDAwMDA2NjNCNDBERUI4Cis6MTAzRkIwMDAwMjAwMEYwMDRGODE3MTAwM0YwMDAwMDA4NDAxODBENjk1Cis6MTAzRkMwMDAwMjAwMEYwMDUwODE3MTAwM0YwMDAwMDAwMTAwODBENjA4Cis6MTAzRkQwMDAwMjAwMEYwMDUxODE3MTAwMzUwMDAwMDBFRDAwODBENjE1Cis6MTAzRkUwMDAwMjAwMEYwMDUyODE3MTAwMTgwMDAwMDA4MTAwRkYzN0FECis6MTAzRkYwMDAwMjAwMEYwMDUzODE3MTAwNDkwMDAwMDA3RTNCODBENTE0Cis6MTA0MDAwMDAwMjAwMEYwMDU0ODE3MTAwMjEwMDAwMDBFNjAwNDBERTM0Cis6MTA0MDEwMDAwMjAwMEYwMDU1ODE3MTAwM0YwMDAwMDA4NDAxODBENjJFCis6MTA0MDIwMDAwMjAwMEYwMDU2ODE3MTAwM0YwMDAwMDAwMTAwODBENkExCis6MTA0MDMwMDAwMjAwMEYwMDU3ODE3MTAwMzUwMDAwMDBFRDAwODBENkFFCis6MTA0MDQwMDAwMjAwMEYwMDU4ODE3MTAwMTgwMDAwMDA4MTAwRkYzNzQ2Cis6MTA0MDUwMDAwMjAwMEYwMDU5ODE3MTAwNDkwMDAwMDA3RTNCMDBENTJECis6MTA0MDYwMDAwMjAwMEYwMDVBODE3MTAwNzkwMDAwMDA3NjNCMDFEREVCCis6MTA0MDcwMDAwMjAwMEYwMDVCODE3MTAwMkQwMDAwMDA3RjQwMDRERDE1Cis6MTA0MDgwMDAwMjAwMEYwMDVDODE3MTAwMTgwMDAwMDA3NjNCN0YzRDRDCis6MTA0MDkwMDAwMjAwMEYwMDVEODE3MTAwNzkwMDAwMDA3NkJCMDFERDM4Cis6MTA0MEEwMDAwMjAwMEYwMDVFODE3MTAwNzUwMDAwMDBFODgwMDFGREQ0Cis6MTA0MEIwMDAwMjAwMEYwMDVGODE3MTAwOTQwMDAwMDA2ODQxMTUwMDRDCis6MTA0MEMwMDAwMjAwMEYwMDYwODE3MTAwOTQwMDAwMDBFODQ0MjUwMEE4Cis6MTA0MEQwMDAwMjAwMEYwMDYxODE3MTAwOTQwMDAwMDBFODQxMjMwMDlDCis6MTA0MEUwMDAwMjAwMEYwMDYyODE3MTAwOTQwMDAwMDA2ODQ1MTcwMDEzCis6MTA0MEYwMDAwMjAwMEYwMDYzODE3MTAwOTQwMDAwMDA2ODQyMTUwMDA3Cis6MTA0MTAwMDAwMjAwMEYwMDY0ODE3MTAwOTQwMDAwMDBFODQyMjcwMDYzCis6MTA0MTEwMDAwMjAwMEYwMDY1ODE3MTAwOTQwMDAwMDA2ODQzMkQwMENCCis6MTA0MTIwMDAwMjAwMEYwMDY2ODE3MTAwOTQwMDAwMDA2ODQ0MkQwMEI5Cis6MTA0MTMwMDAwMjAwMEYwMDY3ODE3MTAwOTQwMDAwMDBFODQzMzMwMDIzCis6MTA0MTQwMDAwMjAwMEYwMDY4ODE3MTAwMDQwMDAwMDA3NjNCOTcwM0I1Cis6MTA0MTUwMDAwMjAwMEYwMDY5ODE3MTAwMEQwMDAwMDA2NUMxMERFM0QwCis6MTA0MTYwMDAwMjAwMEYwMDZBODE3MTAwMzAwMDAwMDA3NjAwMDMzMjA3Cis6MTA0MTcwMDAwMjAwMEYwMDZCODE3MTAwMzAwMDAwMDA3NjAwMDIxMjE3Cis6MTA0MTgwMDAwMjAwMEYwMDZDODE3MTAwM0YwMDAwMDAwMDAwODBENDJECis6MTA0MTkwMDAwMjAwMEYwMDZEODE3MTAwM0YwMDAwMDAwMDgwODBEMTlGCis6MTA0MUEwMDAwMjAwMEYwMDZFODE3MTAwMEQwMDAwMDA2NUMxM0ZFMzQ5Cis6MTA0MUIwMDAwMjAwMEYwMDZGODE3MTAwMzAwMDAwMDA3NjYwMDQzMjUxCis6MTA0MUMwMDAwMjAwMEYwMDcwODE3MTAwMzAwMDAwMDA3NjQwMDQxMjgwCis6MTA0MUQwMDAwMjAwMEYwMDcxODE3MTAwM0YwMDAwMDAwMDgwODJENDU2Cis6MTA0MUUwMDAwMjAwMEYwMDcyODE3MTAwM0YwMDAwMDAwMDgwODBEMTRBCis6MTA0MUYwMDAwMjAwMEYwMDczODE3MTAwMEQwMDAwMDA2NUMxM0ZFM0Y0Cis6MTA0MjAwMDAwMjAwMEYwMDc0ODE3MTAwMzAwMDAwMDA3NjIwMDQzMjNCCis6MTA0MjEwMDAwMjAwMEYwMDc1ODE3MTAwMzAwMDAwMDA3NjAwMDQxMjZBCis6MTA0MjIwMDAwMjAwMEYwMDc2ODE3MTAwM0YwMDAwMDAwMDAwODJENDgwCis6MTA0MjMwMDAwMjAwMEYwMDc3ODE3MTAwMEQwMDAwMDA2NUMxNjNFMzhCCis6MTA0MjQwMDAwMjAwMEYwMDc4ODE3MTAwMzAwMDAwMDA3NjIwMDMzMkY4Cis6MTA0MjUwMDAwMjAwMEYwMDc5ODE3MTAwMzAwMDAwMDA3NjAwMDMxMjI3Cis6MTA0MjYwMDAwMjAwMEYwMDdBODE3MTAwM0YwMDAwMDAwMDAwODNENDNCCis6MTA0MjcwMDAwMjAwMEYwMDdCODE3MTAwNDkwMDAwMDA3NjNCODBEMjc0Cis6MTA0MjgwMDAwMjAwMEYwMDdDODE3MTAwMEQwMDAwMDA2NUMxMERFMzhDCis6MTA0MjkwMDAwMjAwMEYwMDdEODE3MTAwMzAwMDAwMDA3NjgwMDMzMjQzCis6MTA0MkEwMDAwMjAwMEYwMDdFODE3MTAwMzAwMDAwMDA3NjgwMDIxMjUzCis6MTA0MkIwMDAwMjAwMEYwMDdGODE3MTAwM0YwMDAwMDAwMDAwODFENEU4Cis6MTA0MkMwMDAwMjAwMEYwMDgwODE3MTAwM0YwMDAwMDAwMDAwMDJENjU0Cis6MTA0MkQwMDAwMjAwMEYwMDgxODE3MTAwM0YwMDAwMDAwMDAwODFEMUM5Cis6MTA0MkUwMDAwMjAwMEYwMDgyODE3MTAwMEQwMDAwMDA2NUMxM0ZFM0Y0Cis6MTA0MkYwMDAwMjAwMEYwMDgzODE3MTAwMzAwMDAwMDA3NjIwMDQzMjNDCis6MTA0MzAwMDAwMjAwMEYwMDg0ODE3MTAwMzAwMDAwMDA3NjAwMDQxMjZBCis6MTA0MzEwMDAwMjAwMEYwMDg1ODE3MTAwM0YwMDAwMDAwMDAwODJENDgwCis6MTA0MzIwMDAwMjAwMEYwMDg2ODE3MTAwNDEwMDAwMDBFQjM0ODBENDUwCis6MTA0MzMwMDAwMjAwMEYwMDg3ODE3MTAwNzkwMDAwMDA2QUJCMDFERDc3Cis6MTA0MzQwMDAwMjAwMEYwMDg4ODE3MTAwNzkwMDAwMDA3NkJCMDFERDVBCis6MTA0MzUwMDAwMjAwMEYwMDg5ODE3MTAwM0YwMDAwMDAwMzE4MDBEMkE1Cis6MTA0MzYwMDAwMjAwMEYwMDhBODE3MTAwM0YwMDAwMDAwMDAwODFEMTJGCis6MTA0MzcwMDAwMjAwMEYwMDhCODE3MTAwNzUwMDAwMDA2MzgwMDFGRDU5Cis6MTA0MzgwMDAwMjAwMEYwMDhDODE3MTAwOTgwMDAwMDA2NDNCNjk4MDdFCis6MTA0MzkwMDAwMjAwMEYwMDhEODE3MTAwNTEwMDAwMDBFNDAwMDBGMjY2Cis6MTA0M0EwMDAwMjAwMEYwMDhFODE3MTAwM0YwMDAwMDA4NDAxODBENjYyCis6MTA0M0IwMDAwMjAwMEYwMDhGODE3MTAwM0YwMDAwMDAwMTAwODBENkQ1Cis6MTA0M0MwMDAwMjAwMEYwMDkwODE3MTAwMzUwMDAwMDBFRDAwODBENkUyCis6MTA0M0QwMDAwMjAwMEYwMDkxODE3MTAwMTgwMDAwMDA4MTAwRkYzNzdBCis6MTA0M0UwMDAwMjAwMEYwMDkyODE3MTAwMkQwMDAwMDA3RjQwMDRERDZCCis6MTA0M0YwMDAwMjAwMEYwMDkzODE3MTAwMTgwMDAwMDA3NjNCN0YzREEyCis6MTA0NDAwMDAwMjAwMEYwMDk0ODE3MTAwNDkwMDAwMDAzODNCQzBEM0M2Cis6MTA0NDEwMDAwMjAwMEYwMDk1ODE3MTAwNDkwMDAwMDA2NDNCMDBERDNGCis6MTA0NDIwMDAwMjAwMEYwMDk2ODE3MTAwNTEwMDAwMDBFNDAwMDBGMkNDCis6MTA0NDMwMDAwMjAwMEYwMDk3ODE3MTAwM0YwMDAwMDA4NDAxODBENkM4Cis6MTA0NDQwMDAwMjAwMEYwMDk4ODE3MTAwM0YwMDAwMDAwMTAwODBENjNCCis6MTA0NDUwMDAwMjAwMEYwMDk5ODE3MTAwMzUwMDAwMDBFRDAwODBENjQ4Cis6MTA0NDYwMDAwMjAwMEYwMDlBODE3MTAwMTgwMDAwMDA4MTAwRkYzN0UwCis6MTA0NDcwMDAwMjAwMEYwMDlCODE3MTAwNDkwMDAwMDAzODNCQTBEMzZGCis6MTA0NDgwMDAwMjAwMEYwMDlDODE3MTAwMTkwMDAwMDA3NkJCNjFERDA1Cis6MTA0NDkwMDAwMjAwMEYwMDlEODE3MTAwNDkwMDAwMDA2NzNCMDBEREI0Cis6MTA0NEEwMDAwMjAwMEYwMDlFODE3MTAwNzUwMDAwMDA2MzgyODFGMTlGCis6MTA0NEIwMDAwMjAwMEYwMDlGODE3MTAwNDEwMDAwMDBFQjM0ODBENEE2Cis6MTA0NEMwMDAwMjAwMEYwMEEwODE3MTAwNzkwMDAwMDA2QUJCMDFERENECis6MTA0NEQwMDAwMjAwMEYwMEExODE3MTAwNzkwMDAwMDA3NkJCMDFEREIwCis6MTA0NEUwMDAwMjAwMEYwMEEyODE3MTAwM0YwMDAwMDAwMzE4MDBEMkZCCis6MTA0NEYwMDAwMjAwMEYwMEEzODE3MTAwM0YwMDAwMDAwMDgwODBEMTA2Cis6MTA0NTAwMDAwMjAwMEYwMEE0ODE3MTAwNzUwMDAwMDA2MzgwMDFGREFFCis6MTA0NTEwMDAwMjAwMEYwMEE1ODE3MTAwOTgwMDAwMDA2NDNCMzc4MDA1Cis6MTA0NTIwMDAwMjAwMEYwMEE2ODE3MTAwNTEwMDAwMDBFNDAwMDBGMkJCCis6MTA0NTMwMDAwMjAwMEYwMEE3ODE3MTAwM0YwMDAwMDA4NDAxODBENkI3Cis6MTA0NTQwMDAwMjAwMEYwMEE4ODE3MTAwM0YwMDAwMDAwMTAwODBENjJBCis6MTA0NTUwMDAwMjAwMEYwMEE5ODE3MTAwMzUwMDAwMDBFRDAwODBENjM3Cis6MTA0NTYwMDAwMjAwMEYwMEFBODE3MTAwMTgwMDAwMDA4MTAwRkYzN0NGCis6MTA0NTcwMDAwMjAwMEYwMEFCODE3MTAwMkQwMDAwMDA3RjQwMDREREMwCis6MTA0NTgwMDAwMjAwMEYwMEFDODE3MTAwMTgwMDAwMDA3NjNCN0YzREY3Cis6MTA0NTkwMDAwMjAwMEYwMEFEODE3MTAwNDkwMDAwMDAzODNCODBEMzVDCis6MTA0NUEwMDAwMjAwMEYwMEFFODE3MTAwMTkwMDAwMDA3NkJCNkZEREM0Cis6MTA0NUIwMDAwMjAwMEYwMEFGODE3MTAwNDkwMDAwMDA2NzNCMDBERDgxCis6MTA0NUMwMDAwMjAwMEYwMEIwODE3MTAwNzUwMDAwMDA2MzgyODFGMTZDCis6MTA0NUQwMDAwMjAwMEYwMEIxODE3MTAwNDEwMDAwMDBFQjM0ODBENDczCis6MTA0NUUwMDAwMjAwMEYwMEIyODE3MTAwNzkwMDAwMDA2QUJCMDFERDlBCis6MTA0NUYwMDAwMjAwMEYwMEIzODE3MTAwNzkwMDAwMDA2M0JCMDFERDkwCis6MTA0NjAwMDAwMjAwMEYwMEI0ODE3MTAwNzUwMDAwMDA2MzgwMDFGRDlECis6MTA0NjEwMDAwMjAwMEYwMEI1ODE3MTAwOTgwMDAwMDA2NDNCMTc4MDE0Cis6MTA0NjIwMDAwMjAwMEYwMEI2ODE3MTAwNDkwMDAwMDA2NDNCNDBERUNCCis6MTA0NjMwMDAwMjAwMEYwMEI3ODE3MTAwM0YwMDAwMDA4NDAxODBENkE2Cis6MTA0NjQwMDAwMjAwMEYwMEI4ODE3MTAwM0YwMDAwMDAwMTAwODBENjE5Cis6MTA0NjUwMDAwMjAwMEYwMEI5ODE3MTAwMzUwMDAwMDBFRDAwODBENjI2Cis6MTA0NjYwMDAwMjAwMEYwMEJBODE3MTAwMTgwMDAwMDA4MTAwRkYzN0JFCis6MTA0NjcwMDAwMjAwMEYwMEJCODE3MTAwMkQwMDAwMDA3RjQwMDREREFGCis6MTA0NjgwMDAwMjAwMEYwMEJDODE3MTAwMTgwMDAwMDA3NjNCN0YzREU2Cis6MTA0NjkwMDAwMjAwMEYwMEJEODE3MTAwMjEwMDAwMDBFNDAwMDBEMjgzCis6MTA0NkEwMDAwMjAwMEYwMEJFODE3MTAwMTkwMDAwMDA3RTdCRUZEMzc1Cis6MTA0NkIwMDAwMjAwMEYwMEJGODE3MTAwNzUwMDAwMDA2MzgyODFGMTZDCis6MTA0NkMwMDAwMjAwMEYwMEMwODE3MTAwM0YwMDAwMDAwMDAwODBENjkyCis6MTA0NkQwMDAwMjAwMEYwMEMxODE3MTAwM0YwMDAwMDAwNDAwMDREREYyCis6MTA0NkUwMDAwMjAwMEYwMEMyODE3MTAwM0YwMDAwMDAwMTAwMThEREQwCis6MTA0NkYwMDAwMjAwMEYwMEMzODE3MTAwNjkwMDAwMDA2RDNCMDBERDA2Cis6MTA0NzAwMDAwMjAwMEYwMEM0ODE3MTAwNjkwMDAwMDA2RDNCMDBEREY0Cis6MTA0NzEwMDAwMjAwMEYwMEM1ODE3MTAwM0YwMDAwMDAwMDAwMDBEREI1Cis6MTA0NzIwMDAwMjAwMEYwMEM2ODE3MTAwMkQwMDAwMDA4MDAxNTREREUxCis6MTA0NzMwMDAwMjAwMEYwMEM3ODE3MTAwNzkwMDAwMDA3NjgwRTBGMzZECis6MTA0NzQwMDAwMjAwMEYwMEM4ODE3MTAwNDkwMDAwMDA3QTM2MDBENkNGCis6MTA0NzUwMDAwMjAwMEYwMEM5ODE3MTAwNzkwMDAwMDA3NkZCMDFEREM1Cis6MTA0NzYwMDAwMjAwMEYwMENBODE3MTAwM0QwMDAwMDA2RjAwODBGNzU5Cis6MTA0NzcwMDAwMjAwMEYwMENCODE3MTAwNDkwMDAwMDAwMzNCMDBERDA3Cis6MTA0NzgwMDAwMjAwMEYwMENDODE3MTAwNTkwMDAwMDA3NjNCMDBGRDUzCis6MTA0NzkwMDAwMjAwMEYwMENEODE3MTAwM0YwMDAwMDAwMzFDODBERDhFCis6MTA0N0EwMDAwMjAwMEYwMENFODE3MTAwM0QwMDAwMDA2RjAwODBGNzE1Cis6MTA0N0IwMDAwMjAwMEYwMENGODE3MTAwM0QwMDAwMDA2RjAwODBGNzA0Cis6MTA0N0MwMDAwMjAwMEYwMEQwODE3MTAwM0QwMDAwMDA2RjAwODBGN0YzCis6MTA0N0QwMDAwMjAwMEYwMEQxODE3MTAwMkQwMDAwMDA3RjAyMDZERDc0Cis6MTA0N0UwMDAwMjAwMEYwMEQyODE3MTAwMTgwMDAwMDA3QTNEN0YxRDg5Cis6MTA0N0YwMDAwMjAwMEYwMEQzODE3MTAwMzEwMDAwMDA2Qjg4ODNENDY4Cis6MTA0ODAwMDAwMjAwMEYwMEQ0ODE3MTAwNzkwMDAwMDA2QUJCMDFERDU1Cis6MTA0ODEwMDAwMjAwMEYwMEQ1ODE3MTAwNzkwMDAwMDA3NjkwODFGMUNGCis6MTA0ODIwMDAwMjAwMEYwMEQ2ODE3MTAwNzUwMDAwMDA2MzgwMDFGRDU5Cis6MTA0ODMwMDAwMjAwMEYwMEQ3ODE3MTAwOTgwMDAwMDA3NkJCNTM4MDAyCis6MTA0ODQwMDAwMjAwMEYwMEQ4ODE3MTAwMTkwMDAwMDA3OTdCN0ZERDI0Cis6MTA0ODUwMDAwMjAwMEYwMEQ5ODE3MTAwNzUwMDAwMDA2MzgyODFGMUIwCis6MTA0ODYwMDAwMjAwMEYwMERBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0ODcwMDAwMjAwMEYwMERCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA0ODgwMDAwMjAwMEYwMERDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0ODkwMDAwMjAwMEYwMEREODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA0OEEwMDAwMjAwMEYwMERFODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA0OEIwMDAwMjAwMEYwMERGODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA0OEMwMDAwMjAwMEYwMEUwODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA0OEQwMDAwMjAwMEYwMEUxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA0OEUwMDAwMjAwMEYwMEUyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA0OEYwMDAwMjAwMEYwMEUzODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA0OTAwMDAwMjAwMEYwMEU0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0OTEwMDAwMjAwMEYwMEU1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0OTIwMDAwMjAwMEYwMEU2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0OTMwMDAwMjAwMEYwMEU3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0OTQwMDAwMjAwMEYwMEU4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0OTUwMDAwMjAwMEYwMEU5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0OTYwMDAwMjAwMEYwMEVBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA0OTcwMDAwMjAwMEYwMEVCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0OTgwMDAwMjAwMEYwMEVDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA0OTkwMDAwMjAwMEYwMEVEODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA0OUEwMDAwMjAwMEYwMEVFODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA0OUIwMDAwMjAwMEYwMEVGODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA0OUMwMDAwMjAwMEYwMEYwODE3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA0OUQwMDAwMjAwMEYwMEYxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA0OUUwMDAwMjAwMEYwMEYyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA0OUYwMDAwMjAwMEYwMEYzODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA0QTAwMDAwMjAwMEYwMEY0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0QTEwMDAwMjAwMEYwMEY1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0QTIwMDAwMjAwMEYwMEY2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0QTMwMDAwMjAwMEYwMEY3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0QTQwMDAwMjAwMEYwMEY4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0QTUwMDAwMjAwMEYwMEY5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA0QTYwMDAwMjAwMEYwMEZBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0QTcwMDAwMjAwMEYwMEZCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA0QTgwMDAwMjAwMEYwMEZDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA0QTkwMDAwMjAwMEYwMEZEODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA0QUEwMDAwMjAwMEYwMEZFODE3MTAwM0YwMDAwMDAwMzAyODBERDY0Cis6MTA0QUIwMDAwMjAwMEYwMEZGODE3MTAwNDkwMDAwMDAwMjNCODREMTE5Cis6MTA0QUMwMDAwMjAwMEYwMDAwODI3MTAwNDkwMDAwMDAwMzNCMDBERDdFCis6MTA0QUQwMDAwMjAwMEYwMDAxODI3MTAwNjkwMDAwMDA3QTNCMDBEREQ2Cis6MTA0QUUwMDAwMjAwMEYwMDAyODI3MTAwNDkwMDAwMDA3OTNCMDBEREU2Cis6MTA0QUYwMDAwMjAwMEYwMDAzODI3MTAwNjUwMDAwMDA2MzAyODBGMTc0Cis6MTA0QjAwMDAwMjAwMEYwMDA0ODI3MTAwMTgwMDAwMDA3NjNCN0Q3RERBCis6MTA0QjEwMDAwMjAwMEYwMDA1ODI3MTAwMDkwMDAwMDA3QTNEODFDRjdDCis6MTA0QjIwMDAwMjAwMEYwMDA2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA0QjMwMDAwMjAwMEYwMDA3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0QjQwMDAwMjAwMEYwMDA4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0QjUwMDAwMjAwMEYwMDA5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0QjYwMDAwMjAwMEYwMDBBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0QjcwMDAwMjAwMEYwMDBCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0QjgwMDAwMjAwMEYwMDBDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0QjkwMDAwMjAwMEYwMDBEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0QkEwMDAwMjAwMEYwMDBFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0QkIwMDAwMjAwMEYwMDBGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0QkMwMDAwMjAwMEYwMDEwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0QkQwMDAwMjAwMEYwMDExODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0QkUwMDAwMjAwMEYwMDEyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0QkYwMDAwMjAwMEYwMDEzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0QzAwMDAwMjAwMEYwMDE0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTA0QzEwMDAwMjAwMEYwMDE1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA0QzIwMDAwMjAwMEYwMDE2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0QzMwMDAwMjAwMEYwMDE3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0QzQwMDAwMjAwMEYwMDE4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0QzUwMDAwMjAwMEYwMDE5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0QzYwMDAwMjAwMEYwMDFBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0QzcwMDAwMjAwMEYwMDFCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0QzgwMDAwMjAwMEYwMDFDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0QzkwMDAwMjAwMEYwMDFEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0Q0EwMDAwMjAwMEYwMDFFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0Q0IwMDAwMjAwMEYwMDFGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0Q0MwMDAwMjAwMEYwMDIwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0Q0QwMDAwMjAwMEYwMDIxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0Q0UwMDAwMjAwMEYwMDIyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0Q0YwMDAwMjAwMEYwMDIzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0RDAwMDAwMjAwMEYwMDI0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA0RDEwMDAwMjAwMEYwMDI1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0RDIwMDAwMjAwMEYwMDI2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0RDMwMDAwMjAwMEYwMDI3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0RDQwMDAwMjAwMEYwMDI4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0RDUwMDAwMjAwMEYwMDI5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0RDYwMDAwMjAwMEYwMDJBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0RDcwMDAwMjAwMEYwMDJCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0RDgwMDAwMjAwMEYwMDJDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0RDkwMDAwMjAwMEYwMDJEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0REEwMDAwMjAwMEYwMDJFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0REIwMDAwMjAwMEYwMDJGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0REMwMDAwMjAwMEYwMDMwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0REQwMDAwMjAwMEYwMDMxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0REUwMDAwMjAwMEYwMDMyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0REYwMDAwMjAwMEYwMDMzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0RTAwMDAwMjAwMEYwMDM0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0RTEwMDAwMjAwMEYwMDM1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0RTIwMDAwMjAwMEYwMDM2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0RTMwMDAwMjAwMEYwMDM3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0RTQwMDAwMjAwMEYwMDM4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0RTUwMDAwMjAwMEYwMDM5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0RTYwMDAwMjAwMEYwMDNBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0RTcwMDAwMjAwMEYwMDNCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0RTgwMDAwMjAwMEYwMDNDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0RTkwMDAwMjAwMEYwMDNEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RUEwMDAwMjAwMEYwMDNFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0RUIwMDAwMjAwMEYwMDNGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0RUMwMDAwMjAwMEYwMDQwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0RUQwMDAwMjAwMEYwMDQxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0RUUwMDAwMjAwMEYwMDQyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0RUYwMDAwMjAwMEYwMDQzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0RjAwMDAwMjAwMEYwMDQ0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0RjEwMDAwMjAwMEYwMDQ1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0RjIwMDAwMjAwMEYwMDQ2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0RjMwMDAwMjAwMEYwMDQ3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0RjQwMDAwMjAwMEYwMDQ4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0RjUwMDAwMjAwMEYwMDQ5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0RjYwMDAwMjAwMEYwMDRBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0RjcwMDAwMjAwMEYwMDRCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0RjgwMDAwMjAwMEYwMDRDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RjkwMDAwMjAwMEYwMDREODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0RkEwMDAwMjAwMEYwMDRFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0RkIwMDAwMjAwMEYwMDRGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0RkMwMDAwMjAwMEYwMDUwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0RkQwMDAwMjAwMEYwMDUxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0RkUwMDAwMjAwMEYwMDUyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0RkYwMDAwMjAwMEYwMDUzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MDAwMDAwMjAwMEYwMDU0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1MDEwMDAwMjAwMEYwMDU1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1MDIwMDAwMjAwMEYwMDU2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1MDMwMDAwMjAwMEYwMDU3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MDQwMDAwMjAwMEYwMDU4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MDUwMDAwMjAwMEYwMDU5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MDYwMDAwMjAwMEYwMDVBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MDcwMDAwMjAwMEYwMDVCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MDgwMDAwMjAwMEYwMDVDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MDkwMDAwMjAwMEYwMDVEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MEEwMDAwMjAwMEYwMDVFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MEIwMDAwMjAwMEYwMDVGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MEMwMDAwMjAwMEYwMDYwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1MEQwMDAwMjAwMEYwMDYxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1MEUwMDAwMjAwMEYwMDYyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MEYwMDAwMjAwMEYwMDYzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1MTAwMDAwMjAwMEYwMDY0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1MTEwMDAwMjAwMEYwMDY1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1MTIwMDAwMjAwMEYwMDY2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MTMwMDAwMjAwMEYwMDY3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MTQwMDAwMjAwMEYwMDY4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MTUwMDAwMjAwMEYwMDY5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MTYwMDAwMjAwMEYwMDZBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MTcwMDAwMjAwMEYwMDZCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MTgwMDAwMjAwMEYwMDZDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MTkwMDAwMjAwMEYwMDZEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MUEwMDAwMjAwMEYwMDZFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MUIwMDAwMjAwMEYwMDZGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1MUMwMDAwMjAwMEYwMDcwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1MUQwMDAwMjAwMEYwMDcxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MUUwMDAwMjAwMEYwMDcyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1MUYwMDAwMjAwMEYwMDczODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1MjAwMDAwMjAwMEYwMDc0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1MjEwMDAwMjAwMEYwMDc1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MjIwMDAwMjAwMEYwMDc2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MjMwMDAwMjAwMEYwMDc3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MjQwMDAwMjAwMEYwMDc4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MjUwMDAwMjAwMEYwMDc5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MjYwMDAwMjAwMEYwMDdBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MjcwMDAwMjAwMEYwMDdCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjgwMDAwMjAwMEYwMDdDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjkwMDAwMjAwMEYwMDdEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MkEwMDAwMjAwMEYwMDdFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1MkIwMDAwMjAwMEYwMDdGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1MkMwMDAwMjAwMEYwMDgwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MkQwMDAwMjAwMEYwMDgxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1MkUwMDAwMjAwMEYwMDgyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1MkYwMDAwMjAwMEYwMDgzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1MzAwMDAwMjAwMEYwMDg0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MzEwMDAwMjAwMEYwMDg1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MzIwMDAwMjAwMEYwMDg2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MzMwMDAwMjAwMEYwMDg3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MzQwMDAwMjAwMEYwMDg4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MzUwMDAwMjAwMEYwMDg5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MzYwMDAwMjAwMEYwMDhBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MzcwMDAwMjAwMEYwMDhCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MzgwMDAwMjAwMEYwMDhDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MzkwMDAwMjAwMEYwMDhEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1M0EwMDAwMjAwMEYwMDhFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1M0IwMDAwMjAwMEYwMDhGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1M0MwMDAwMjAwMEYwMDkwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1M0QwMDAwMjAwMEYwMDkxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1M0UwMDAwMjAwMEYwMDkyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1M0YwMDAwMjAwMEYwMDkzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NDAwMDAwMjAwMEYwMDk0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1NDEwMDAwMjAwMEYwMDk1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1NDIwMDAwMjAwMEYwMDk2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1NDMwMDAwMjAwMEYwMDk3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NDQwMDAwMjAwMEYwMDk4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NDUwMDAwMjAwMEYwMDk5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NDYwMDAwMjAwMEYwMDlBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NDcwMDAwMjAwMEYwMDlCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NDgwMDAwMjAwMEYwMDlDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NDkwMDAwMjAwMEYwMDlEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NEEwMDAwMjAwMEYwMDlFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NEIwMDAwMjAwMEYwMDlGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NEMwMDAwMjAwMEYwMEEwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1NEQwMDAwMjAwMEYwMEExODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1NEUwMDAwMjAwMEYwMEEyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NEYwMDAwMjAwMEYwMEEzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1NTAwMDAwMjAwMEYwMEE0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1NTEwMDAwMjAwMEYwMEE1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1NTIwMDAwMjAwMEYwMEE2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NTMwMDAwMjAwMEYwMEE3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NTQwMDAwMjAwMEYwMEE4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NTUwMDAwMjAwMEYwMEE5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NTYwMDAwMjAwMEYwMEFBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NTcwMDAwMjAwMEYwMEFCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NTgwMDAwMjAwMEYwMEFDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NTkwMDAwMjAwMEYwMEFEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NUEwMDAwMjAwMEYwMEFFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NUIwMDAwMjAwMEYwMEFGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1NUMwMDAwMjAwMEYwMEIwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1NUQwMDAwMjAwMEYwMEIxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NUUwMDAwMjAwMEYwMEIyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1NUYwMDAwMjAwMEYwMEIzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1NjAwMDAwMjAwMEYwMEI0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1NjEwMDAwMjAwMEYwMEI1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NjIwMDAwMjAwMEYwMEI2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NjMwMDAwMjAwMEYwMEI3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NjQwMDAwMjAwMEYwMEI4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NjUwMDAwMjAwMEYwMEI5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NjYwMDAwMjAwMEYwMEJBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NjcwMDAwMjAwMEYwMEJCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NjgwMDAwMjAwMEYwMEJDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NjkwMDAwMjAwMEYwMEJEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NkEwMDAwMjAwMEYwMEJFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1NkIwMDAwMjAwMEYwMEJGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1NkMwMDAwMjAwMEYwMEMwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NkQwMDAwMjAwMEYwMEMxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1NkUwMDAwMjAwMEYwMEMyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1NkYwMDAwMjAwMEYwMEMzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1NzAwMDAwMjAwMEYwMEM0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NzEwMDAwMjAwMEYwMEM1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NzIwMDAwMjAwMEYwMEM2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NzMwMDAwMjAwMEYwMEM3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NzQwMDAwMjAwMEYwMEM4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NzUwMDAwMjAwMEYwMEM5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NzYwMDAwMjAwMEYwMENBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NzcwMDAwMjAwMEYwMENCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NzgwMDAwMjAwMEYwMENDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NzkwMDAwMjAwMEYwMENEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1N0EwMDAwMjAwMEYwMENFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1N0IwMDAwMjAwMEYwMENGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1N0MwMDAwMjAwMEYwMEQwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1N0QwMDAwMjAwMEYwMEQxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1N0UwMDAwMjAwMEYwMEQyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1N0YwMDAwMjAwMEYwMEQzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1ODAwMDAwMjAwMEYwMEQ0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1ODEwMDAwMjAwMEYwMEQ1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1ODIwMDAwMjAwMEYwMEQ2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1ODMwMDAwMjAwMEYwMEQ3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1ODQwMDAwMjAwMEYwMEQ4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1ODUwMDAwMjAwMEYwMEQ5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1ODYwMDAwMjAwMEYwMERBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1ODcwMDAwMjAwMEYwMERCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1ODgwMDAwMjAwMEYwMERDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1ODkwMDAwMjAwMEYwMEREODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1OEEwMDAwMjAwMEYwMERFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1OEIwMDAwMjAwMEYwMERGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1OEMwMDAwMjAwMEYwMEUwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1OEQwMDAwMjAwMEYwMEUxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1OEUwMDAwMjAwMEYwMEUyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1OEYwMDAwMjAwMEYwMEUzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA1OTAwMDAwMjAwMEYwMEU0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1OTEwMDAwMjAwMEYwMEU1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1OTIwMDAwMjAwMEYwMEU2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1OTMwMDAwMjAwMEYwMEU3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1OTQwMDAwMjAwMEYwMEU4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1OTUwMDAwMjAwMEYwMEU5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1OTYwMDAwMjAwMEYwMEVBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1OTcwMDAwMjAwMEYwMEVCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1OTgwMDAwMjAwMEYwMEVDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1OTkwMDAwMjAwMEYwMEVEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1OUEwMDAwMjAwMEYwMEVFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1OUIwMDAwMjAwMEYwMEVGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1OUMwMDAwMjAwMEYwMEYwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1OUQwMDAwMjAwMEYwMEYxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1OUUwMDAwMjAwMEYwMEYyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA1OUYwMDAwMjAwMEYwMEYzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1QTAwMDAwMjAwMEYwMEY0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1QTEwMDAwMjAwMEYwMEY1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1QTIwMDAwMjAwMEYwMEY2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1QTMwMDAwMjAwMEYwMEY3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1QTQwMDAwMjAwMEYwMEY4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1QTUwMDAwMjAwMEYwMEY5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1QTYwMDAwMjAwMEYwMEZBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1QTcwMDAwMjAwMEYwMEZCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1QTgwMDAwMjAwMEYwMEZDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1QTkwMDAwMjAwMEYwMEZEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1QUEwMDAwMjAwMEYwMEZFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1QUIwMDAwMjAwMEYwMEZGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1QUMwMDAwMjAwMEYwMDAwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1QUQwMDAwMjAwMEYwMDAxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1QUUwMDAwMjAwMEYwMDAyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1QUYwMDAwMjAwMEYwMDAzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1QjAwMDAwMjAwMEYwMDA0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTA1QjEwMDAwMjAwMEYwMDA1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA1QjIwMDAwMjAwMEYwMDA2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1QjMwMDAwMjAwMEYwMDA3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1QjQwMDAwMjAwMEYwMDA4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1QjUwMDAwMjAwMEYwMDA5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1QjYwMDAwMjAwMEYwMDBBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1QjcwMDAwMjAwMEYwMDBCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1QjgwMDAwMjAwMEYwMDBDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1QjkwMDAwMjAwMEYwMDBEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1QkEwMDAwMjAwMEYwMDBFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1QkIwMDAwMjAwMEYwMDBGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1QkMwMDAwMjAwMEYwMDEwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1QkQwMDAwMjAwMEYwMDExODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1QkUwMDAwMjAwMEYwMDEyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1QkYwMDAwMjAwMEYwMDEzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1QzAwMDAwMjAwMEYwMDE0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA1QzEwMDAwMjAwMEYwMDE1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1QzIwMDAwMjAwMEYwMDE2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1QzMwMDAwMjAwMEYwMDE3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1QzQwMDAwMjAwMEYwMDE4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1QzUwMDAwMjAwMEYwMDE5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1QzYwMDAwMjAwMEYwMDFBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1QzcwMDAwMjAwMEYwMDFCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1QzgwMDAwMjAwMEYwMDFDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1QzkwMDAwMjAwMEYwMDFEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1Q0EwMDAwMjAwMEYwMDFFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1Q0IwMDAwMjAwMEYwMDFGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1Q0MwMDAwMjAwMEYwMDIwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1Q0QwMDAwMjAwMEYwMDIxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1Q0UwMDAwMjAwMEYwMDIyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1Q0YwMDAwMjAwMEYwMDIzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1RDAwMDAwMjAwMEYwMDI0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1RDEwMDAwMjAwMEYwMDI1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1RDIwMDAwMjAwMEYwMDI2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1RDMwMDAwMjAwMEYwMDI3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1RDQwMDAwMjAwMEYwMDI4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1RDUwMDAwMjAwMEYwMDI5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1RDYwMDAwMjAwMEYwMDJBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1RDcwMDAwMjAwMEYwMDJCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1RDgwMDAwMjAwMEYwMDJDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1RDkwMDAwMjAwMEYwMDJEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1REEwMDAwMjAwMEYwMDJFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1REIwMDAwMjAwMEYwMDJGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1REMwMDAwMjAwMEYwMDMwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1REQwMDAwMjAwMEYwMDMxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1REUwMDAwMjAwMEYwMDMyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1REYwMDAwMjAwMEYwMDMzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1RTAwMDAwMjAwMEYwMDM0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1RTEwMDAwMjAwMEYwMDM1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1RTIwMDAwMjAwMEYwMDM2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1RTMwMDAwMjAwMEYwMDM3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1RTQwMDAwMjAwMEYwMDM4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1RTUwMDAwMjAwMEYwMDM5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1RTYwMDAwMjAwMEYwMDNBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1RTcwMDAwMjAwMEYwMDNCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1RTgwMDAwMjAwMEYwMDNDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1RTkwMDAwMjAwMEYwMDNEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1RUEwMDAwMjAwMEYwMDNFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1RUIwMDAwMjAwMEYwMDNGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1RUMwMDAwMjAwMEYwMDQwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1RUQwMDAwMjAwMEYwMDQxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1RUUwMDAwMjAwMEYwMDQyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1RUYwMDAwMjAwMEYwMDQzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1RjAwMDAwMjAwMEYwMDQ0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1RjEwMDAwMjAwMEYwMDQ1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1RjIwMDAwMjAwMEYwMDQ2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1RjMwMDAwMjAwMEYwMDQ3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1RjQwMDAwMjAwMEYwMDQ4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1RjUwMDAwMjAwMEYwMDQ5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1RjYwMDAwMjAwMEYwMDRBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1RjcwMDAwMjAwMEYwMDRCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1RjgwMDAwMjAwMEYwMDRDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1RjkwMDAwMjAwMEYwMDREODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1RkEwMDAwMjAwMEYwMDRFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1RkIwMDAwMjAwMEYwMDRGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1RkMwMDAwMjAwMEYwMDUwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1RkQwMDAwMjAwMEYwMDUxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1RkUwMDAwMjAwMEYwMDUyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1RkYwMDAwMjAwMEYwMDUzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MDAwMDAwMjAwMEYwMDU0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2MDEwMDAwMjAwMEYwMDU1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2MDIwMDAwMjAwMEYwMDU2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2MDMwMDAwMjAwMEYwMDU3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MDQwMDAwMjAwMEYwMDU4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MDUwMDAwMjAwMEYwMDU5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MDYwMDAwMjAwMEYwMDVBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MDcwMDAwMjAwMEYwMDVCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MDgwMDAwMjAwMEYwMDVDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MDkwMDAwMjAwMEYwMDVEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MEEwMDAwMjAwMEYwMDVFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MEIwMDAwMjAwMEYwMDVGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MEMwMDAwMjAwMEYwMDYwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2MEQwMDAwMjAwMEYwMDYxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2MEUwMDAwMjAwMEYwMDYyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MEYwMDAwMjAwMEYwMDYzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2MTAwMDAwMjAwMEYwMDY0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2MTEwMDAwMjAwMEYwMDY1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2MTIwMDAwMjAwMEYwMDY2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MTMwMDAwMjAwMEYwMDY3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MTQwMDAwMjAwMEYwMDY4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MTUwMDAwMjAwMEYwMDY5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MTYwMDAwMjAwMEYwMDZBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MTcwMDAwMjAwMEYwMDZCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MTgwMDAwMjAwMEYwMDZDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MTkwMDAwMjAwMEYwMDZEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MUEwMDAwMjAwMEYwMDZFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MUIwMDAwMjAwMEYwMDZGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2MUMwMDAwMjAwMEYwMDcwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2MUQwMDAwMjAwMEYwMDcxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MUUwMDAwMjAwMEYwMDcyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2MUYwMDAwMjAwMEYwMDczODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2MjAwMDAwMjAwMEYwMDc0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2MjEwMDAwMjAwMEYwMDc1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MjIwMDAwMjAwMEYwMDc2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MjMwMDAwMjAwMEYwMDc3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MjQwMDAwMjAwMEYwMDc4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MjUwMDAwMjAwMEYwMDc5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MjYwMDAwMjAwMEYwMDdBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MjcwMDAwMjAwMEYwMDdCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MjgwMDAwMjAwMEYwMDdDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MjkwMDAwMjAwMEYwMDdEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MkEwMDAwMjAwMEYwMDdFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2MkIwMDAwMjAwMEYwMDdGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2MkMwMDAwMjAwMEYwMDgwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MkQwMDAwMjAwMEYwMDgxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2MkUwMDAwMjAwMEYwMDgyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2MkYwMDAwMjAwMEYwMDgzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2MzAwMDAwMjAwMEYwMDg0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MzEwMDAwMjAwMEYwMDg1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MzIwMDAwMjAwMEYwMDg2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MzMwMDAwMjAwMEYwMDg3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MzQwMDAwMjAwMEYwMDg4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MzUwMDAwMjAwMEYwMDg5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MzYwMDAwMjAwMEYwMDhBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MzcwMDAwMjAwMEYwMDhCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MzgwMDAwMjAwMEYwMDhDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MzkwMDAwMjAwMEYwMDhEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2M0EwMDAwMjAwMEYwMDhFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2M0IwMDAwMjAwMEYwMDhGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2M0MwMDAwMjAwMEYwMDkwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2M0QwMDAwMjAwMEYwMDkxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2M0UwMDAwMjAwMEYwMDkyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2M0YwMDAwMjAwMEYwMDkzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NDAwMDAwMjAwMEYwMDk0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2NDEwMDAwMjAwMEYwMDk1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2NDIwMDAwMjAwMEYwMDk2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2NDMwMDAwMjAwMEYwMDk3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NDQwMDAwMjAwMEYwMDk4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NDUwMDAwMjAwMEYwMDk5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NDYwMDAwMjAwMEYwMDlBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NDcwMDAwMjAwMEYwMDlCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NDgwMDAwMjAwMEYwMDlDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NDkwMDAwMjAwMEYwMDlEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NEEwMDAwMjAwMEYwMDlFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NEIwMDAwMjAwMEYwMDlGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NEMwMDAwMjAwMEYwMEEwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2NEQwMDAwMjAwMEYwMEExODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2NEUwMDAwMjAwMEYwMEEyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NEYwMDAwMjAwMEYwMEEzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2NTAwMDAwMjAwMEYwMEE0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2NTEwMDAwMjAwMEYwMEE1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2NTIwMDAwMjAwMEYwMEE2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NTMwMDAwMjAwMEYwMEE3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NTQwMDAwMjAwMEYwMEE4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NTUwMDAwMjAwMEYwMEE5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NTYwMDAwMjAwMEYwMEFBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NTcwMDAwMjAwMEYwMEFCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NTgwMDAwMjAwMEYwMEFDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NTkwMDAwMjAwMEYwMEFEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NUEwMDAwMjAwMEYwMEFFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NUIwMDAwMjAwMEYwMEFGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2NUMwMDAwMjAwMEYwMEIwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2NUQwMDAwMjAwMEYwMEIxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NUUwMDAwMjAwMEYwMEIyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2NUYwMDAwMjAwMEYwMEIzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2NjAwMDAwMjAwMEYwMEI0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2NjEwMDAwMjAwMEYwMEI1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NjIwMDAwMjAwMEYwMEI2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NjMwMDAwMjAwMEYwMEI3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NjQwMDAwMjAwMEYwMEI4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NjUwMDAwMjAwMEYwMEI5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NjYwMDAwMjAwMEYwMEJBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NjcwMDAwMjAwMEYwMEJCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NjgwMDAwMjAwMEYwMEJDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NjkwMDAwMjAwMEYwMEJEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NkEwMDAwMjAwMEYwMEJFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2NkIwMDAwMjAwMEYwMEJGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2NkMwMDAwMjAwMEYwMEMwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NkQwMDAwMjAwMEYwMEMxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2NkUwMDAwMjAwMEYwMEMyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2NkYwMDAwMjAwMEYwMEMzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2NzAwMDAwMjAwMEYwMEM0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NzEwMDAwMjAwMEYwMEM1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NzIwMDAwMjAwMEYwMEM2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NzMwMDAwMjAwMEYwMEM3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NzQwMDAwMjAwMEYwMEM4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NzUwMDAwMjAwMEYwMEM5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NzYwMDAwMjAwMEYwMENBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NzcwMDAwMjAwMEYwMENCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NzgwMDAwMjAwMEYwMENDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NzkwMDAwMjAwMEYwMENEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2N0EwMDAwMjAwMEYwMENFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2N0IwMDAwMjAwMEYwMENGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2N0MwMDAwMjAwMEYwMEQwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2N0QwMDAwMjAwMEYwMEQxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2N0UwMDAwMjAwMEYwMEQyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2N0YwMDAwMjAwMEYwMEQzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA2ODAwMDAwMjAwMEYwMEQ0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2ODEwMDAwMjAwMEYwMEQ1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2ODIwMDAwMjAwMEYwMEQ2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2ODMwMDAwMjAwMEYwMEQ3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2ODQwMDAwMjAwMEYwMEQ4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2ODUwMDAwMjAwMEYwMEQ5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2ODYwMDAwMjAwMEYwMERBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2ODcwMDAwMjAwMEYwMERCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2ODgwMDAwMjAwMEYwMERDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2ODkwMDAwMjAwMEYwMEREODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2OEEwMDAwMjAwMEYwMERFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2OEIwMDAwMjAwMEYwMERGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2OEMwMDAwMjAwMEYwMEUwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2OEQwMDAwMjAwMEYwMEUxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2OEUwMDAwMjAwMEYwMEUyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA2OEYwMDAwMjAwMEYwMEUzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA2OTAwMDAwMjAwMEYwMEU0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2OTEwMDAwMjAwMEYwMEU1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2OTIwMDAwMjAwMEYwMEU2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2OTMwMDAwMjAwMEYwMEU3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2OTQwMDAwMjAwMEYwMEU4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2OTUwMDAwMjAwMEYwMEU5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2OTYwMDAwMjAwMEYwMEVBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2OTcwMDAwMjAwMEYwMEVCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2OTgwMDAwMjAwMEYwMEVDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2OTkwMDAwMjAwMEYwMEVEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2OUEwMDAwMjAwMEYwMEVFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2OUIwMDAwMjAwMEYwMEVGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2OUMwMDAwMjAwMEYwMEYwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2OUQwMDAwMjAwMEYwMEYxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA2OUUwMDAwMjAwMEYwMEYyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA2OUYwMDAwMjAwMEYwMEYzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA2QTAwMDAwMjAwMEYwMEY0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2QTEwMDAwMjAwMEYwMEY1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2QTIwMDAwMjAwMEYwMEY2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2QTMwMDAwMjAwMEYwMEY3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2QTQwMDAwMjAwMEYwMEY4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2QTUwMDAwMjAwMEYwMEY5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2QTYwMDAwMjAwMEYwMEZBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2QTcwMDAwMjAwMEYwMEZCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2QTgwMDAwMjAwMEYwMEZDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2QTkwMDAwMjAwMEYwMEZEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2QUEwMDAwMjAwMEYwMEZFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2QUIwMDAwMjAwMEYwMEZGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2QUMwMDAwMjAwMEYwMDAwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2QUQwMDAwMjAwMEYwMDAxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2QUUwMDAwMjAwMEYwMDAyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2QUYwMDAwMjAwMEYwMDAzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2QjAwMDAwMjAwMEYwMDA0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA2QjEwMDAwMjAwMEYwMDA1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA2QjIwMDAwMjAwMEYwMDA2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA2QjMwMDAwMjAwMEYwMDA3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2QjQwMDAwMjAwMEYwMDA4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2QjUwMDAwMjAwMEYwMDA5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2QjYwMDAwMjAwMEYwMDBBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2QjcwMDAwMjAwMEYwMDBCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2QjgwMDAwMjAwMEYwMDBDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2QjkwMDAwMjAwMEYwMDBEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2QkEwMDAwMjAwMEYwMDBFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2QkIwMDAwMjAwMEYwMDBGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2QkMwMDAwMjAwMEYwMDEwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2QkQwMDAwMjAwMEYwMDExODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2QkUwMDAwMjAwMEYwMDEyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2QkYwMDAwMjAwMEYwMDEzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2QzAwMDAwMjAwMEYwMDE0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA2QzEwMDAwMjAwMEYwMDE1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA2QzIwMDAwMjAwMEYwMDE2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2QzMwMDAwMjAwMEYwMDE3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2QzQwMDAwMjAwMEYwMDE4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2QzUwMDAwMjAwMEYwMDE5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2QzYwMDAwMjAwMEYwMDFBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2QzcwMDAwMjAwMEYwMDFCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2QzgwMDAwMjAwMEYwMDFDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2QzkwMDAwMjAwMEYwMDFEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2Q0EwMDAwMjAwMEYwMDFFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2Q0IwMDAwMjAwMEYwMDFGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2Q0MwMDAwMjAwMEYwMDIwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2Q0QwMDAwMjAwMEYwMDIxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2Q0UwMDAwMjAwMEYwMDIyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2Q0YwMDAwMjAwMEYwMDIzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2RDAwMDAwMjAwMEYwMDI0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA2RDEwMDAwMjAwMEYwMDI1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2RDIwMDAwMjAwMEYwMDI2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2RDMwMDAwMjAwMEYwMDI3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2RDQwMDAwMjAwMEYwMDI4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2RDUwMDAwMjAwMEYwMDI5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2RDYwMDAwMjAwMEYwMDJBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2RDcwMDAwMjAwMEYwMDJCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2RDgwMDAwMjAwMEYwMDJDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2RDkwMDAwMjAwMEYwMDJEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2REEwMDAwMjAwMEYwMDJFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2REIwMDAwMjAwMEYwMDJGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2REMwMDAwMjAwMEYwMDMwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2REQwMDAwMjAwMEYwMDMxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2REUwMDAwMjAwMEYwMDMyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2REYwMDAwMjAwMEYwMDMzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2RTAwMDAwMjAwMEYwMDM0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2RTEwMDAwMjAwMEYwMDM1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2RTIwMDAwMjAwMEYwMDM2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2RTMwMDAwMjAwMEYwMDM3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2RTQwMDAwMjAwMEYwMDM4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2RTUwMDAwMjAwMEYwMDM5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2RTYwMDAwMjAwMEYwMDNBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2RTcwMDAwMjAwMEYwMDNCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2RTgwMDAwMjAwMEYwMDNDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2RTkwMDAwMjAwMEYwMDNEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2RUEwMDAwMjAwMEYwMDNFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2RUIwMDAwMjAwMEYwMDNGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2RUMwMDAwMjAwMEYwMDQwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2RUQwMDAwMjAwMEYwMDQxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2RUUwMDAwMjAwMEYwMDQyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2RUYwMDAwMjAwMEYwMDQzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2RjAwMDAwMjAwMEYwMDQ0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2RjEwMDAwMjAwMEYwMDQ1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2RjIwMDAwMjAwMEYwMDQ2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2RjMwMDAwMjAwMEYwMDQ3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2RjQwMDAwMjAwMEYwMDQ4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2RjUwMDAwMjAwMEYwMDQ5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2RjYwMDAwMjAwMEYwMDRBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2RjcwMDAwMjAwMEYwMDRCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2RjgwMDAwMjAwMEYwMDRDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2RjkwMDAwMjAwMEYwMDREODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2RkEwMDAwMjAwMEYwMDRFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2RkIwMDAwMjAwMEYwMDRGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2RkMwMDAwMjAwMEYwMDUwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2RkQwMDAwMjAwMEYwMDUxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2RkUwMDAwMjAwMEYwMDUyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2RkYwMDAwMjAwMEYwMDUzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MDAwMDAwMjAwMEYwMDU0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3MDEwMDAwMjAwMEYwMDU1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3MDIwMDAwMjAwMEYwMDU2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3MDMwMDAwMjAwMEYwMDU3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MDQwMDAwMjAwMEYwMDU4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MDUwMDAwMjAwMEYwMDU5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MDYwMDAwMjAwMEYwMDVBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MDcwMDAwMjAwMEYwMDVCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MDgwMDAwMjAwMEYwMDVDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MDkwMDAwMjAwMEYwMDVEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MEEwMDAwMjAwMEYwMDVFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MEIwMDAwMjAwMEYwMDVGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MEMwMDAwMjAwMEYwMDYwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3MEQwMDAwMjAwMEYwMDYxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3MEUwMDAwMjAwMEYwMDYyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MEYwMDAwMjAwMEYwMDYzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3MTAwMDAwMjAwMEYwMDY0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3MTEwMDAwMjAwMEYwMDY1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3MTIwMDAwMjAwMEYwMDY2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MTMwMDAwMjAwMEYwMDY3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MTQwMDAwMjAwMEYwMDY4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MTUwMDAwMjAwMEYwMDY5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MTYwMDAwMjAwMEYwMDZBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MTcwMDAwMjAwMEYwMDZCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MTgwMDAwMjAwMEYwMDZDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MTkwMDAwMjAwMEYwMDZEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MUEwMDAwMjAwMEYwMDZFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MUIwMDAwMjAwMEYwMDZGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3MUMwMDAwMjAwMEYwMDcwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3MUQwMDAwMjAwMEYwMDcxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MUUwMDAwMjAwMEYwMDcyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3MUYwMDAwMjAwMEYwMDczODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3MjAwMDAwMjAwMEYwMDc0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3MjEwMDAwMjAwMEYwMDc1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MjIwMDAwMjAwMEYwMDc2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MjMwMDAwMjAwMEYwMDc3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MjQwMDAwMjAwMEYwMDc4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MjUwMDAwMjAwMEYwMDc5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MjYwMDAwMjAwMEYwMDdBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MjcwMDAwMjAwMEYwMDdCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MjgwMDAwMjAwMEYwMDdDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MjkwMDAwMjAwMEYwMDdEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MkEwMDAwMjAwMEYwMDdFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3MkIwMDAwMjAwMEYwMDdGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3MkMwMDAwMjAwMEYwMDgwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MkQwMDAwMjAwMEYwMDgxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3MkUwMDAwMjAwMEYwMDgyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3MkYwMDAwMjAwMEYwMDgzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3MzAwMDAwMjAwMEYwMDg0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MzEwMDAwMjAwMEYwMDg1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MzIwMDAwMjAwMEYwMDg2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MzMwMDAwMjAwMEYwMDg3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MzQwMDAwMjAwMEYwMDg4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MzUwMDAwMjAwMEYwMDg5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MzYwMDAwMjAwMEYwMDhBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MzcwMDAwMjAwMEYwMDhCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MzgwMDAwMjAwMEYwMDhDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MzkwMDAwMjAwMEYwMDhEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3M0EwMDAwMjAwMEYwMDhFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3M0IwMDAwMjAwMEYwMDhGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3M0MwMDAwMjAwMEYwMDkwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3M0QwMDAwMjAwMEYwMDkxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3M0UwMDAwMjAwMEYwMDkyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3M0YwMDAwMjAwMEYwMDkzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NDAwMDAwMjAwMEYwMDk0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3NDEwMDAwMjAwMEYwMDk1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3NDIwMDAwMjAwMEYwMDk2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3NDMwMDAwMjAwMEYwMDk3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NDQwMDAwMjAwMEYwMDk4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NDUwMDAwMjAwMEYwMDk5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NDYwMDAwMjAwMEYwMDlBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NDcwMDAwMjAwMEYwMDlCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NDgwMDAwMjAwMEYwMDlDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NDkwMDAwMjAwMEYwMDlEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NEEwMDAwMjAwMEYwMDlFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NEIwMDAwMjAwMEYwMDlGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NEMwMDAwMjAwMEYwMEEwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3NEQwMDAwMjAwMEYwMEExODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3NEUwMDAwMjAwMEYwMEEyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NEYwMDAwMjAwMEYwMEEzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3NTAwMDAwMjAwMEYwMEE0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3NTEwMDAwMjAwMEYwMEE1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3NTIwMDAwMjAwMEYwMEE2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NTMwMDAwMjAwMEYwMEE3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NTQwMDAwMjAwMEYwMEE4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NTUwMDAwMjAwMEYwMEE5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NTYwMDAwMjAwMEYwMEFBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NTcwMDAwMjAwMEYwMEFCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NTgwMDAwMjAwMEYwMEFDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NTkwMDAwMjAwMEYwMEFEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NUEwMDAwMjAwMEYwMEFFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NUIwMDAwMjAwMEYwMEFGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3NUMwMDAwMjAwMEYwMEIwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3NUQwMDAwMjAwMEYwMEIxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NUUwMDAwMjAwMEYwMEIyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3NUYwMDAwMjAwMEYwMEIzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3NjAwMDAwMjAwMEYwMEI0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3NjEwMDAwMjAwMEYwMEI1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NjIwMDAwMjAwMEYwMEI2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NjMwMDAwMjAwMEYwMEI3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NjQwMDAwMjAwMEYwMEI4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NjUwMDAwMjAwMEYwMEI5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NjYwMDAwMjAwMEYwMEJBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NjcwMDAwMjAwMEYwMEJCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NjgwMDAwMjAwMEYwMEJDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NjkwMDAwMjAwMEYwMEJEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NkEwMDAwMjAwMEYwMEJFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3NkIwMDAwMjAwMEYwMEJGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3NkMwMDAwMjAwMEYwMEMwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NkQwMDAwMjAwMEYwMEMxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3NkUwMDAwMjAwMEYwMEMyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3NkYwMDAwMjAwMEYwMEMzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3NzAwMDAwMjAwMEYwMEM0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NzEwMDAwMjAwMEYwMEM1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NzIwMDAwMjAwMEYwMEM2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NzMwMDAwMjAwMEYwMEM3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NzQwMDAwMjAwMEYwMEM4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NzUwMDAwMjAwMEYwMEM5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NzYwMDAwMjAwMEYwMENBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NzcwMDAwMjAwMEYwMENCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NzgwMDAwMjAwMEYwMENDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NzkwMDAwMjAwMEYwMENEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3N0EwMDAwMjAwMEYwMENFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3N0IwMDAwMjAwMEYwMENGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3N0MwMDAwMjAwMEYwMEQwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3N0QwMDAwMjAwMEYwMEQxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3N0UwMDAwMjAwMEYwMEQyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3N0YwMDAwMjAwMEYwMEQzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA3ODAwMDAwMjAwMEYwMEQ0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3ODEwMDAwMjAwMEYwMEQ1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3ODIwMDAwMjAwMEYwMEQ2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3ODMwMDAwMjAwMEYwMEQ3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3ODQwMDAwMjAwMEYwMEQ4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3ODUwMDAwMjAwMEYwMEQ5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3ODYwMDAwMjAwMEYwMERBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3ODcwMDAwMjAwMEYwMERCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3ODgwMDAwMjAwMEYwMERDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3ODkwMDAwMjAwMEYwMEREODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3OEEwMDAwMjAwMEYwMERFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3OEIwMDAwMjAwMEYwMERGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3OEMwMDAwMjAwMEYwMEUwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3OEQwMDAwMjAwMEYwMEUxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3OEUwMDAwMjAwMEYwMEUyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA3OEYwMDAwMjAwMEYwMEUzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA3OTAwMDAwMjAwMEYwMEU0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3OTEwMDAwMjAwMEYwMEU1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3OTIwMDAwMjAwMEYwMEU2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3OTMwMDAwMjAwMEYwMEU3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3OTQwMDAwMjAwMEYwMEU4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3OTUwMDAwMjAwMEYwMEU5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3OTYwMDAwMjAwMEYwMEVBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3OTcwMDAwMjAwMEYwMEVCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3OTgwMDAwMjAwMEYwMEVDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3OTkwMDAwMjAwMEYwMEVEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3OUEwMDAwMjAwMEYwMEVFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3OUIwMDAwMjAwMEYwMEVGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3OUMwMDAwMjAwMEYwMEYwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3OUQwMDAwMjAwMEYwMEYxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA3OUUwMDAwMjAwMEYwMEYyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA3OUYwMDAwMjAwMEYwMEYzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA3QTAwMDAwMjAwMEYwMEY0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3QTEwMDAwMjAwMEYwMEY1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3QTIwMDAwMjAwMEYwMEY2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3QTMwMDAwMjAwMEYwMEY3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3QTQwMDAwMjAwMEYwMEY4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3QTUwMDAwMjAwMEYwMEY5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3QTYwMDAwMjAwMEYwMEZBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3QTcwMDAwMjAwMEYwMEZCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3QTgwMDAwMjAwMEYwMEZDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3QTkwMDAwMjAwMEYwMEZEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3QUEwMDAwMjAwMEYwMEZFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3QUIwMDAwMjAwMEYwMEZGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3QUMwMDAwMjAwMEYwMDAwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3QUQwMDAwMjAwMEYwMDAxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3QUUwMDAwMjAwMEYwMDAyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3QUYwMDAwMjAwMEYwMDAzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3QjAwMDAwMjAwMEYwMDA0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA3QjEwMDAwMjAwMEYwMDA1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA3QjIwMDAwMjAwMEYwMDA2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA3QjMwMDAwMjAwMEYwMDA3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3QjQwMDAwMjAwMEYwMDA4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3QjUwMDAwMjAwMEYwMDA5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3QjYwMDAwMjAwMEYwMDBBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3QjcwMDAwMjAwMEYwMDBCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3QjgwMDAwMjAwMEYwMDBDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3QjkwMDAwMjAwMEYwMDBEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3QkEwMDAwMjAwMEYwMDBFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3QkIwMDAwMjAwMEYwMDBGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3QkMwMDAwMjAwMEYwMDEwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3QkQwMDAwMjAwMEYwMDExODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3QkUwMDAwMjAwMEYwMDEyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3QkYwMDAwMjAwMEYwMDEzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3QzAwMDAwMjAwMEYwMDE0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA3QzEwMDAwMjAwMEYwMDE1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA3QzIwMDAwMjAwMEYwMDE2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3QzMwMDAwMjAwMEYwMDE3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3QzQwMDAwMjAwMEYwMDE4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3QzUwMDAwMjAwMEYwMDE5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3QzYwMDAwMjAwMEYwMDFBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3QzcwMDAwMjAwMEYwMDFCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3QzgwMDAwMjAwMEYwMDFDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3QzkwMDAwMjAwMEYwMDFEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3Q0EwMDAwMjAwMEYwMDFFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3Q0IwMDAwMjAwMEYwMDFGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3Q0MwMDAwMjAwMEYwMDIwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3Q0QwMDAwMjAwMEYwMDIxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3Q0UwMDAwMjAwMEYwMDIyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3Q0YwMDAwMjAwMEYwMDIzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3RDAwMDAwMjAwMEYwMDI0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA3RDEwMDAwMjAwMEYwMDI1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3RDIwMDAwMjAwMEYwMDI2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3RDMwMDAwMjAwMEYwMDI3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3RDQwMDAwMjAwMEYwMDI4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3RDUwMDAwMjAwMEYwMDI5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3RDYwMDAwMjAwMEYwMDJBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3RDcwMDAwMjAwMEYwMDJCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3RDgwMDAwMjAwMEYwMDJDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3RDkwMDAwMjAwMEYwMDJEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3REEwMDAwMjAwMEYwMDJFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3REIwMDAwMjAwMEYwMDJGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3REMwMDAwMjAwMEYwMDMwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3REQwMDAwMjAwMEYwMDMxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3REUwMDAwMjAwMEYwMDMyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3REYwMDAwMjAwMEYwMDMzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3RTAwMDAwMjAwMEYwMDM0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3RTEwMDAwMjAwMEYwMDM1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3RTIwMDAwMjAwMEYwMDM2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3RTMwMDAwMjAwMEYwMDM3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3RTQwMDAwMjAwMEYwMDM4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3RTUwMDAwMjAwMEYwMDM5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3RTYwMDAwMjAwMEYwMDNBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3RTcwMDAwMjAwMEYwMDNCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3RTgwMDAwMjAwMEYwMDNDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3RTkwMDAwMjAwMEYwMDNEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3RUEwMDAwMjAwMEYwMDNFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3RUIwMDAwMjAwMEYwMDNGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3RUMwMDAwMjAwMEYwMDQwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3RUQwMDAwMjAwMEYwMDQxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3RUUwMDAwMjAwMEYwMDQyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3RUYwMDAwMjAwMEYwMDQzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3RjAwMDAwMjAwMEYwMDQ0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3RjEwMDAwMjAwMEYwMDQ1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3RjIwMDAwMjAwMEYwMDQ2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3RjMwMDAwMjAwMEYwMDQ3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3RjQwMDAwMjAwMEYwMDQ4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3RjUwMDAwMjAwMEYwMDQ5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3RjYwMDAwMjAwMEYwMDRBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3RjcwMDAwMjAwMEYwMDRCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3RjgwMDAwMjAwMEYwMDRDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3RjkwMDAwMjAwMEYwMDREODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3RkEwMDAwMjAwMEYwMDRFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3RkIwMDAwMjAwMEYwMDRGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3RkMwMDAwMjAwMEYwMDUwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3RkQwMDAwMjAwMEYwMDUxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3RkUwMDAwMjAwMEYwMDUyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3RkYwMDAwMjAwMEYwMDUzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MDAwMDAwMjAwMEYwMDU0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4MDEwMDAwMjAwMEYwMDU1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4MDIwMDAwMjAwMEYwMDU2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4MDMwMDAwMjAwMEYwMDU3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MDQwMDAwMjAwMEYwMDU4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MDUwMDAwMjAwMEYwMDU5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MDYwMDAwMjAwMEYwMDVBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MDcwMDAwMjAwMEYwMDVCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MDgwMDAwMjAwMEYwMDVDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MDkwMDAwMjAwMEYwMDVEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MEEwMDAwMjAwMEYwMDVFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MEIwMDAwMjAwMEYwMDVGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MEMwMDAwMjAwMEYwMDYwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4MEQwMDAwMjAwMEYwMDYxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4MEUwMDAwMjAwMEYwMDYyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MEYwMDAwMjAwMEYwMDYzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4MTAwMDAwMjAwMEYwMDY0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4MTEwMDAwMjAwMEYwMDY1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4MTIwMDAwMjAwMEYwMDY2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MTMwMDAwMjAwMEYwMDY3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MTQwMDAwMjAwMEYwMDY4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MTUwMDAwMjAwMEYwMDY5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MTYwMDAwMjAwMEYwMDZBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MTcwMDAwMjAwMEYwMDZCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MTgwMDAwMjAwMEYwMDZDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MTkwMDAwMjAwMEYwMDZEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MUEwMDAwMjAwMEYwMDZFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MUIwMDAwMjAwMEYwMDZGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4MUMwMDAwMjAwMEYwMDcwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4MUQwMDAwMjAwMEYwMDcxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MUUwMDAwMjAwMEYwMDcyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4MUYwMDAwMjAwMEYwMDczODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4MjAwMDAwMjAwMEYwMDc0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4MjEwMDAwMjAwMEYwMDc1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MjIwMDAwMjAwMEYwMDc2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MjMwMDAwMjAwMEYwMDc3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MjQwMDAwMjAwMEYwMDc4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MjUwMDAwMjAwMEYwMDc5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MjYwMDAwMjAwMEYwMDdBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MjcwMDAwMjAwMEYwMDdCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MjgwMDAwMjAwMEYwMDdDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MjkwMDAwMjAwMEYwMDdEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MkEwMDAwMjAwMEYwMDdFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4MkIwMDAwMjAwMEYwMDdGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4MkMwMDAwMjAwMEYwMDgwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MkQwMDAwMjAwMEYwMDgxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4MkUwMDAwMjAwMEYwMDgyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4MkYwMDAwMjAwMEYwMDgzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4MzAwMDAwMjAwMEYwMDg0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MzEwMDAwMjAwMEYwMDg1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MzIwMDAwMjAwMEYwMDg2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MzMwMDAwMjAwMEYwMDg3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MzQwMDAwMjAwMEYwMDg4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MzUwMDAwMjAwMEYwMDg5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MzYwMDAwMjAwMEYwMDhBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MzcwMDAwMjAwMEYwMDhCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MzgwMDAwMjAwMEYwMDhDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MzkwMDAwMjAwMEYwMDhEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4M0EwMDAwMjAwMEYwMDhFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4M0IwMDAwMjAwMEYwMDhGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4M0MwMDAwMjAwMEYwMDkwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4M0QwMDAwMjAwMEYwMDkxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4M0UwMDAwMjAwMEYwMDkyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4M0YwMDAwMjAwMEYwMDkzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NDAwMDAwMjAwMEYwMDk0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4NDEwMDAwMjAwMEYwMDk1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4NDIwMDAwMjAwMEYwMDk2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4NDMwMDAwMjAwMEYwMDk3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NDQwMDAwMjAwMEYwMDk4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NDUwMDAwMjAwMEYwMDk5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NDYwMDAwMjAwMEYwMDlBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NDcwMDAwMjAwMEYwMDlCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NDgwMDAwMjAwMEYwMDlDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NDkwMDAwMjAwMEYwMDlEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NEEwMDAwMjAwMEYwMDlFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NEIwMDAwMjAwMEYwMDlGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NEMwMDAwMjAwMEYwMEEwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4NEQwMDAwMjAwMEYwMEExODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4NEUwMDAwMjAwMEYwMEEyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NEYwMDAwMjAwMEYwMEEzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4NTAwMDAwMjAwMEYwMEE0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4NTEwMDAwMjAwMEYwMEE1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4NTIwMDAwMjAwMEYwMEE2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NTMwMDAwMjAwMEYwMEE3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NTQwMDAwMjAwMEYwMEE4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NTUwMDAwMjAwMEYwMEE5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NTYwMDAwMjAwMEYwMEFBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NTcwMDAwMjAwMEYwMEFCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NTgwMDAwMjAwMEYwMEFDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NTkwMDAwMjAwMEYwMEFEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NUEwMDAwMjAwMEYwMEFFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NUIwMDAwMjAwMEYwMEFGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4NUMwMDAwMjAwMEYwMEIwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4NUQwMDAwMjAwMEYwMEIxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NUUwMDAwMjAwMEYwMEIyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4NUYwMDAwMjAwMEYwMEIzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4NjAwMDAwMjAwMEYwMEI0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4NjEwMDAwMjAwMEYwMEI1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NjIwMDAwMjAwMEYwMEI2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NjMwMDAwMjAwMEYwMEI3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NjQwMDAwMjAwMEYwMEI4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NjUwMDAwMjAwMEYwMEI5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NjYwMDAwMjAwMEYwMEJBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NjcwMDAwMjAwMEYwMEJCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NjgwMDAwMjAwMEYwMEJDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NjkwMDAwMjAwMEYwMEJEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NkEwMDAwMjAwMEYwMEJFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4NkIwMDAwMjAwMEYwMEJGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4NkMwMDAwMjAwMEYwMEMwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NkQwMDAwMjAwMEYwMEMxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4NkUwMDAwMjAwMEYwMEMyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4NkYwMDAwMjAwMEYwMEMzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4NzAwMDAwMjAwMEYwMEM0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NzEwMDAwMjAwMEYwMEM1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NzIwMDAwMjAwMEYwMEM2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NzMwMDAwMjAwMEYwMEM3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NzQwMDAwMjAwMEYwMEM4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NzUwMDAwMjAwMEYwMEM5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NzYwMDAwMjAwMEYwMENBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NzcwMDAwMjAwMEYwMENCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NzgwMDAwMjAwMEYwMENDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NzkwMDAwMjAwMEYwMENEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4N0EwMDAwMjAwMEYwMENFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4N0IwMDAwMjAwMEYwMENGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4N0MwMDAwMjAwMEYwMEQwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4N0QwMDAwMjAwMEYwMEQxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4N0UwMDAwMjAwMEYwMEQyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4N0YwMDAwMjAwMEYwMEQzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA4ODAwMDAwMjAwMEYwMEQ0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4ODEwMDAwMjAwMEYwMEQ1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4ODIwMDAwMjAwMEYwMEQ2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4ODMwMDAwMjAwMEYwMEQ3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4ODQwMDAwMjAwMEYwMEQ4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4ODUwMDAwMjAwMEYwMEQ5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4ODYwMDAwMjAwMEYwMERBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4ODcwMDAwMjAwMEYwMERCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4ODgwMDAwMjAwMEYwMERDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4ODkwMDAwMjAwMEYwMEREODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4OEEwMDAwMjAwMEYwMERFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4OEIwMDAwMjAwMEYwMERGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4OEMwMDAwMjAwMEYwMEUwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4OEQwMDAwMjAwMEYwMEUxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4OEUwMDAwMjAwMEYwMEUyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA4OEYwMDAwMjAwMEYwMEUzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA4OTAwMDAwMjAwMEYwMEU0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4OTEwMDAwMjAwMEYwMEU1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4OTIwMDAwMjAwMEYwMEU2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4OTMwMDAwMjAwMEYwMEU3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4OTQwMDAwMjAwMEYwMEU4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4OTUwMDAwMjAwMEYwMEU5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4OTYwMDAwMjAwMEYwMEVBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4OTcwMDAwMjAwMEYwMEVCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4OTgwMDAwMjAwMEYwMEVDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4OTkwMDAwMjAwMEYwMEVEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4OUEwMDAwMjAwMEYwMEVFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4OUIwMDAwMjAwMEYwMEVGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4OUMwMDAwMjAwMEYwMEYwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4OUQwMDAwMjAwMEYwMEYxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA4OUUwMDAwMjAwMEYwMEYyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA4OUYwMDAwMjAwMEYwMEYzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA4QTAwMDAwMjAwMEYwMEY0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4QTEwMDAwMjAwMEYwMEY1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4QTIwMDAwMjAwMEYwMEY2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4QTMwMDAwMjAwMEYwMEY3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4QTQwMDAwMjAwMEYwMEY4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4QTUwMDAwMjAwMEYwMEY5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4QTYwMDAwMjAwMEYwMEZBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4QTcwMDAwMjAwMEYwMEZCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4QTgwMDAwMjAwMEYwMEZDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4QTkwMDAwMjAwMEYwMEZEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4QUEwMDAwMjAwMEYwMEZFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4QUIwMDAwMjAwMEYwMEZGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4QUMwMDAwMjAwMEYwMDAwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4QUQwMDAwMjAwMEYwMDAxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4QUUwMDAwMjAwMEYwMDAyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4QUYwMDAwMjAwMEYwMDAzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4QjAwMDAwMjAwMEYwMDA0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA4QjEwMDAwMjAwMEYwMDA1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA4QjIwMDAwMjAwMEYwMDA2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA4QjMwMDAwMjAwMEYwMDA3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4QjQwMDAwMjAwMEYwMDA4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4QjUwMDAwMjAwMEYwMDA5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4QjYwMDAwMjAwMEYwMDBBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4QjcwMDAwMjAwMEYwMDBCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4QjgwMDAwMjAwMEYwMDBDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4QjkwMDAwMjAwMEYwMDBEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4QkEwMDAwMjAwMEYwMDBFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4QkIwMDAwMjAwMEYwMDBGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4QkMwMDAwMjAwMEYwMDEwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4QkQwMDAwMjAwMEYwMDExODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4QkUwMDAwMjAwMEYwMDEyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4QkYwMDAwMjAwMEYwMDEzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4QzAwMDAwMjAwMEYwMDE0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA4QzEwMDAwMjAwMEYwMDE1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA4QzIwMDAwMjAwMEYwMDE2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4QzMwMDAwMjAwMEYwMDE3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4QzQwMDAwMjAwMEYwMDE4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4QzUwMDAwMjAwMEYwMDE5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4QzYwMDAwMjAwMEYwMDFBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4QzcwMDAwMjAwMEYwMDFCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4QzgwMDAwMjAwMEYwMDFDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4QzkwMDAwMjAwMEYwMDFEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4Q0EwMDAwMjAwMEYwMDFFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4Q0IwMDAwMjAwMEYwMDFGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4Q0MwMDAwMjAwMEYwMDIwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4Q0QwMDAwMjAwMEYwMDIxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4Q0UwMDAwMjAwMEYwMDIyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4Q0YwMDAwMjAwMEYwMDIzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4RDAwMDAwMjAwMEYwMDI0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA4RDEwMDAwMjAwMEYwMDI1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4RDIwMDAwMjAwMEYwMDI2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4RDMwMDAwMjAwMEYwMDI3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4RDQwMDAwMjAwMEYwMDI4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4RDUwMDAwMjAwMEYwMDI5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4RDYwMDAwMjAwMEYwMDJBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4RDcwMDAwMjAwMEYwMDJCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4RDgwMDAwMjAwMEYwMDJDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4RDkwMDAwMjAwMEYwMDJEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4REEwMDAwMjAwMEYwMDJFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4REIwMDAwMjAwMEYwMDJGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4REMwMDAwMjAwMEYwMDMwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4REQwMDAwMjAwMEYwMDMxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4REUwMDAwMjAwMEYwMDMyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4REYwMDAwMjAwMEYwMDMzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4RTAwMDAwMjAwMEYwMDM0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4RTEwMDAwMjAwMEYwMDM1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4RTIwMDAwMjAwMEYwMDM2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4RTMwMDAwMjAwMEYwMDM3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4RTQwMDAwMjAwMEYwMDM4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4RTUwMDAwMjAwMEYwMDM5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4RTYwMDAwMjAwMEYwMDNBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4RTcwMDAwMjAwMEYwMDNCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4RTgwMDAwMjAwMEYwMDNDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4RTkwMDAwMjAwMEYwMDNEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4RUEwMDAwMjAwMEYwMDNFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4RUIwMDAwMjAwMEYwMDNGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4RUMwMDAwMjAwMEYwMDQwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4RUQwMDAwMjAwMEYwMDQxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4RUUwMDAwMjAwMEYwMDQyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4RUYwMDAwMjAwMEYwMDQzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4RjAwMDAwMjAwMEYwMDQ0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4RjEwMDAwMjAwMEYwMDQ1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4RjIwMDAwMjAwMEYwMDQ2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4RjMwMDAwMjAwMEYwMDQ3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4RjQwMDAwMjAwMEYwMDQ4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4RjUwMDAwMjAwMEYwMDQ5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4RjYwMDAwMjAwMEYwMDRBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4RjcwMDAwMjAwMEYwMDRCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4RjgwMDAwMjAwMEYwMDRDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4RjkwMDAwMjAwMEYwMDREODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4RkEwMDAwMjAwMEYwMDRFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4RkIwMDAwMjAwMEYwMDRGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4RkMwMDAwMjAwMEYwMDUwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4RkQwMDAwMjAwMEYwMDUxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4RkUwMDAwMjAwMEYwMDUyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4RkYwMDAwMjAwMEYwMDUzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MDAwMDAwMjAwMEYwMDU0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5MDEwMDAwMjAwMEYwMDU1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5MDIwMDAwMjAwMEYwMDU2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5MDMwMDAwMjAwMEYwMDU3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MDQwMDAwMjAwMEYwMDU4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MDUwMDAwMjAwMEYwMDU5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MDYwMDAwMjAwMEYwMDVBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MDcwMDAwMjAwMEYwMDVCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MDgwMDAwMjAwMEYwMDVDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MDkwMDAwMjAwMEYwMDVEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MEEwMDAwMjAwMEYwMDVFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MEIwMDAwMjAwMEYwMDVGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MEMwMDAwMjAwMEYwMDYwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5MEQwMDAwMjAwMEYwMDYxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5MEUwMDAwMjAwMEYwMDYyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MEYwMDAwMjAwMEYwMDYzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5MTAwMDAwMjAwMEYwMDY0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5MTEwMDAwMjAwMEYwMDY1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5MTIwMDAwMjAwMEYwMDY2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MTMwMDAwMjAwMEYwMDY3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MTQwMDAwMjAwMEYwMDY4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MTUwMDAwMjAwMEYwMDY5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MTYwMDAwMjAwMEYwMDZBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MTcwMDAwMjAwMEYwMDZCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MTgwMDAwMjAwMEYwMDZDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MTkwMDAwMjAwMEYwMDZEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MUEwMDAwMjAwMEYwMDZFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MUIwMDAwMjAwMEYwMDZGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5MUMwMDAwMjAwMEYwMDcwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5MUQwMDAwMjAwMEYwMDcxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MUUwMDAwMjAwMEYwMDcyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5MUYwMDAwMjAwMEYwMDczODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5MjAwMDAwMjAwMEYwMDc0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5MjEwMDAwMjAwMEYwMDc1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MjIwMDAwMjAwMEYwMDc2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MjMwMDAwMjAwMEYwMDc3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MjQwMDAwMjAwMEYwMDc4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MjUwMDAwMjAwMEYwMDc5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MjYwMDAwMjAwMEYwMDdBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MjcwMDAwMjAwMEYwMDdCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MjgwMDAwMjAwMEYwMDdDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MjkwMDAwMjAwMEYwMDdEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MkEwMDAwMjAwMEYwMDdFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5MkIwMDAwMjAwMEYwMDdGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5MkMwMDAwMjAwMEYwMDgwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MkQwMDAwMjAwMEYwMDgxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5MkUwMDAwMjAwMEYwMDgyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5MkYwMDAwMjAwMEYwMDgzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5MzAwMDAwMjAwMEYwMDg0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MzEwMDAwMjAwMEYwMDg1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MzIwMDAwMjAwMEYwMDg2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MzMwMDAwMjAwMEYwMDg3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MzQwMDAwMjAwMEYwMDg4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MzUwMDAwMjAwMEYwMDg5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MzYwMDAwMjAwMEYwMDhBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MzcwMDAwMjAwMEYwMDhCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MzgwMDAwMjAwMEYwMDhDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MzkwMDAwMjAwMEYwMDhEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5M0EwMDAwMjAwMEYwMDhFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5M0IwMDAwMjAwMEYwMDhGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5M0MwMDAwMjAwMEYwMDkwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5M0QwMDAwMjAwMEYwMDkxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5M0UwMDAwMjAwMEYwMDkyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5M0YwMDAwMjAwMEYwMDkzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NDAwMDAwMjAwMEYwMDk0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5NDEwMDAwMjAwMEYwMDk1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5NDIwMDAwMjAwMEYwMDk2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5NDMwMDAwMjAwMEYwMDk3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NDQwMDAwMjAwMEYwMDk4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NDUwMDAwMjAwMEYwMDk5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NDYwMDAwMjAwMEYwMDlBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NDcwMDAwMjAwMEYwMDlCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NDgwMDAwMjAwMEYwMDlDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NDkwMDAwMjAwMEYwMDlEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NEEwMDAwMjAwMEYwMDlFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NEIwMDAwMjAwMEYwMDlGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NEMwMDAwMjAwMEYwMEEwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5NEQwMDAwMjAwMEYwMEExODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5NEUwMDAwMjAwMEYwMEEyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NEYwMDAwMjAwMEYwMEEzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5NTAwMDAwMjAwMEYwMEE0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5NTEwMDAwMjAwMEYwMEE1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5NTIwMDAwMjAwMEYwMEE2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NTMwMDAwMjAwMEYwMEE3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NTQwMDAwMjAwMEYwMEE4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NTUwMDAwMjAwMEYwMEE5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NTYwMDAwMjAwMEYwMEFBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NTcwMDAwMjAwMEYwMEFCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NTgwMDAwMjAwMEYwMEFDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NTkwMDAwMjAwMEYwMEFEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NUEwMDAwMjAwMEYwMEFFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NUIwMDAwMjAwMEYwMEFGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5NUMwMDAwMjAwMEYwMEIwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5NUQwMDAwMjAwMEYwMEIxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NUUwMDAwMjAwMEYwMEIyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5NUYwMDAwMjAwMEYwMEIzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5NjAwMDAwMjAwMEYwMEI0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5NjEwMDAwMjAwMEYwMEI1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NjIwMDAwMjAwMEYwMEI2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NjMwMDAwMjAwMEYwMEI3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NjQwMDAwMjAwMEYwMEI4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NjUwMDAwMjAwMEYwMEI5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NjYwMDAwMjAwMEYwMEJBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NjcwMDAwMjAwMEYwMEJCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NjgwMDAwMjAwMEYwMEJDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NjkwMDAwMjAwMEYwMEJEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NkEwMDAwMjAwMEYwMEJFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5NkIwMDAwMjAwMEYwMEJGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5NkMwMDAwMjAwMEYwMEMwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NkQwMDAwMjAwMEYwMEMxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5NkUwMDAwMjAwMEYwMEMyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5NkYwMDAwMjAwMEYwMEMzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5NzAwMDAwMjAwMEYwMEM0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NzEwMDAwMjAwMEYwMEM1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NzIwMDAwMjAwMEYwMEM2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NzMwMDAwMjAwMEYwMEM3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NzQwMDAwMjAwMEYwMEM4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NzUwMDAwMjAwMEYwMEM5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NzYwMDAwMjAwMEYwMENBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NzcwMDAwMjAwMEYwMENCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NzgwMDAwMjAwMEYwMENDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NzkwMDAwMjAwMEYwMENEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5N0EwMDAwMjAwMEYwMENFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5N0IwMDAwMjAwMEYwMENGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5N0MwMDAwMjAwMEYwMEQwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5N0QwMDAwMjAwMEYwMEQxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5N0UwMDAwMjAwMEYwMEQyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5N0YwMDAwMjAwMEYwMEQzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA5ODAwMDAwMjAwMEYwMEQ0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5ODEwMDAwMjAwMEYwMEQ1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5ODIwMDAwMjAwMEYwMEQ2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5ODMwMDAwMjAwMEYwMEQ3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5ODQwMDAwMjAwMEYwMEQ4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5ODUwMDAwMjAwMEYwMEQ5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5ODYwMDAwMjAwMEYwMERBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5ODcwMDAwMjAwMEYwMERCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5ODgwMDAwMjAwMEYwMERDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5ODkwMDAwMjAwMEYwMEREODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5OEEwMDAwMjAwMEYwMERFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5OEIwMDAwMjAwMEYwMERGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5OEMwMDAwMjAwMEYwMEUwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5OEQwMDAwMjAwMEYwMEUxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5OEUwMDAwMjAwMEYwMEUyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA5OEYwMDAwMjAwMEYwMEUzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA5OTAwMDAwMjAwMEYwMEU0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5OTEwMDAwMjAwMEYwMEU1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5OTIwMDAwMjAwMEYwMEU2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5OTMwMDAwMjAwMEYwMEU3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5OTQwMDAwMjAwMEYwMEU4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5OTUwMDAwMjAwMEYwMEU5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5OTYwMDAwMjAwMEYwMEVBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5OTcwMDAwMjAwMEYwMEVCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5OTgwMDAwMjAwMEYwMEVDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5OTkwMDAwMjAwMEYwMEVEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5OUEwMDAwMjAwMEYwMEVFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5OUIwMDAwMjAwMEYwMEVGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5OUMwMDAwMjAwMEYwMEYwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5OUQwMDAwMjAwMEYwMEYxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA5OUUwMDAwMjAwMEYwMEYyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA5OUYwMDAwMjAwMEYwMEYzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTA5QTAwMDAwMjAwMEYwMEY0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5QTEwMDAwMjAwMEYwMEY1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5QTIwMDAwMjAwMEYwMEY2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5QTMwMDAwMjAwMEYwMEY3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5QTQwMDAwMjAwMEYwMEY4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5QTUwMDAwMjAwMEYwMEY5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5QTYwMDAwMjAwMEYwMEZBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5QTcwMDAwMjAwMEYwMEZCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5QTgwMDAwMjAwMEYwMEZDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5QTkwMDAwMjAwMEYwMEZEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5QUEwMDAwMjAwMEYwMEZFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5QUIwMDAwMjAwMEYwMEZGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5QUMwMDAwMjAwMEYwMDAwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5QUQwMDAwMjAwMEYwMDAxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5QUUwMDAwMjAwMEYwMDAyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5QUYwMDAwMjAwMEYwMDAzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5QjAwMDAwMjAwMEYwMDA0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA5QjEwMDAwMjAwMEYwMDA1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA5QjIwMDAwMjAwMEYwMDA2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA5QjMwMDAwMjAwMEYwMDA3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5QjQwMDAwMjAwMEYwMDA4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5QjUwMDAwMjAwMEYwMDA5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5QjYwMDAwMjAwMEYwMDBBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5QjcwMDAwMjAwMEYwMDBCODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5QjgwMDAwMjAwMEYwMDBDODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5QjkwMDAwMjAwMEYwMDBEODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5QkEwMDAwMjAwMEYwMDBFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5QkIwMDAwMjAwMEYwMDBGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5QkMwMDAwMjAwMEYwMDEwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5QkQwMDAwMjAwMEYwMDExODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5QkUwMDAwMjAwMEYwMDEyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5QkYwMDAwMjAwMEYwMDEzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5QzAwMDAwMjAwMEYwMDE0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA5QzEwMDAwMjAwMEYwMDE1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA5QzIwMDAwMjAwMEYwMDE2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5QzMwMDAwMjAwMEYwMDE3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5QzQwMDAwMjAwMEYwMDE4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5QzUwMDAwMjAwMEYwMDE5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5QzYwMDAwMjAwMEYwMDFBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5QzcwMDAwMjAwMEYwMDFCODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5QzgwMDAwMjAwMEYwMDFDODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5QzkwMDAwMjAwMEYwMDFEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5Q0EwMDAwMjAwMEYwMDFFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5Q0IwMDAwMjAwMEYwMDFGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5Q0MwMDAwMjAwMEYwMDIwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5Q0QwMDAwMjAwMEYwMDIxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5Q0UwMDAwMjAwMEYwMDIyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5Q0YwMDAwMjAwMEYwMDIzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5RDAwMDAwMjAwMEYwMDI0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA5RDEwMDAwMjAwMEYwMDI1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5RDIwMDAwMjAwMEYwMDI2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5RDMwMDAwMjAwMEYwMDI3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5RDQwMDAwMjAwMEYwMDI4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5RDUwMDAwMjAwMEYwMDI5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5RDYwMDAwMjAwMEYwMDJBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5RDcwMDAwMjAwMEYwMDJCODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5RDgwMDAwMjAwMEYwMDJDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5RDkwMDAwMjAwMEYwMDJEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5REEwMDAwMjAwMEYwMDJFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5REIwMDAwMjAwMEYwMDJGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5REMwMDAwMjAwMEYwMDMwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5REQwMDAwMjAwMEYwMDMxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5REUwMDAwMjAwMEYwMDMyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5REYwMDAwMjAwMEYwMDMzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5RTAwMDAwMjAwMEYwMDM0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5RTEwMDAwMjAwMEYwMDM1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5RTIwMDAwMjAwMEYwMDM2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5RTMwMDAwMjAwMEYwMDM3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5RTQwMDAwMjAwMEYwMDM4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5RTUwMDAwMjAwMEYwMDM5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5RTYwMDAwMjAwMEYwMDNBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5RTcwMDAwMjAwMEYwMDNCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5RTgwMDAwMjAwMEYwMDNDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5RTkwMDAwMjAwMEYwMDNEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5RUEwMDAwMjAwMEYwMDNFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5RUIwMDAwMjAwMEYwMDNGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5RUMwMDAwMjAwMEYwMDQwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5RUQwMDAwMjAwMEYwMDQxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5RUUwMDAwMjAwMEYwMDQyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5RUYwMDAwMjAwMEYwMDQzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5RjAwMDAwMjAwMEYwMDQ0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5RjEwMDAwMjAwMEYwMDQ1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5RjIwMDAwMjAwMEYwMDQ2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5RjMwMDAwMjAwMEYwMDQ3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5RjQwMDAwMjAwMEYwMDQ4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5RjUwMDAwMjAwMEYwMDQ5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5RjYwMDAwMjAwMEYwMDRBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5RjcwMDAwMjAwMEYwMDRCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5RjgwMDAwMjAwMEYwMDRDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5RjkwMDAwMjAwMEYwMDREODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5RkEwMDAwMjAwMEYwMDRFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5RkIwMDAwMjAwMEYwMDRGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5RkMwMDAwMjAwMEYwMDUwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5RkQwMDAwMjAwMEYwMDUxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5RkUwMDAwMjAwMEYwMDUyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5RkYwMDAwMjAwMEYwMDUzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMDAwMDAwMjAwMEYwMDU0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBBMDEwMDAwMjAwMEYwMDU1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBMDIwMDAwMjAwMEYwMDU2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBMDMwMDAwMjAwMEYwMDU3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMDQwMDAwMjAwMEYwMDU4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMDUwMDAwMjAwMEYwMDU5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMDYwMDAwMjAwMEYwMDVBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMDcwMDAwMjAwMEYwMDVCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMDgwMDAwMjAwMEYwMDVDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMDkwMDAwMjAwMEYwMDVEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMEEwMDAwMjAwMEYwMDVFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMEIwMDAwMjAwMEYwMDVGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMEMwMDAwMjAwMEYwMDYwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBMEQwMDAwMjAwMEYwMDYxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBMEUwMDAwMjAwMEYwMDYyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMEYwMDAwMjAwMEYwMDYzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBMTAwMDAwMjAwMEYwMDY0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBMTEwMDAwMjAwMEYwMDY1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBMTIwMDAwMjAwMEYwMDY2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMTMwMDAwMjAwMEYwMDY3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMTQwMDAwMjAwMEYwMDY4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMTUwMDAwMjAwMEYwMDY5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMTYwMDAwMjAwMEYwMDZBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMTcwMDAwMjAwMEYwMDZCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMTgwMDAwMjAwMEYwMDZDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMTkwMDAwMjAwMEYwMDZEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMUEwMDAwMjAwMEYwMDZFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMUIwMDAwMjAwMEYwMDZGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBMUMwMDAwMjAwMEYwMDcwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBMUQwMDAwMjAwMEYwMDcxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMUUwMDAwMjAwMEYwMDcyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBMUYwMDAwMjAwMEYwMDczODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBMjAwMDAwMjAwMEYwMDc0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBMjEwMDAwMjAwMEYwMDc1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMjIwMDAwMjAwMEYwMDc2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMjMwMDAwMjAwMEYwMDc3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMjQwMDAwMjAwMEYwMDc4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMjUwMDAwMjAwMEYwMDc5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMjYwMDAwMjAwMEYwMDdBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMjcwMDAwMjAwMEYwMDdCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMjgwMDAwMjAwMEYwMDdDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMjkwMDAwMjAwMEYwMDdEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMkEwMDAwMjAwMEYwMDdFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBMkIwMDAwMjAwMEYwMDdGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBMkMwMDAwMjAwMEYwMDgwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMkQwMDAwMjAwMEYwMDgxODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBMkUwMDAwMjAwMEYwMDgyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBMkYwMDAwMjAwMEYwMDgzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBMzAwMDAwMjAwMEYwMDg0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMzEwMDAwMjAwMEYwMDg1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMzIwMDAwMjAwMEYwMDg2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMzMwMDAwMjAwMEYwMDg3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMzQwMDAwMjAwMEYwMDg4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMzUwMDAwMjAwMEYwMDg5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMzYwMDAwMjAwMEYwMDhBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMzcwMDAwMjAwMEYwMDhCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMzgwMDAwMjAwMEYwMDhDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMzkwMDAwMjAwMEYwMDhEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBM0EwMDAwMjAwMEYwMDhFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBM0IwMDAwMjAwMEYwMDhGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBM0MwMDAwMjAwMEYwMDkwODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBM0QwMDAwMjAwMEYwMDkxODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBM0UwMDAwMjAwMEYwMDkyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBM0YwMDAwMjAwMEYwMDkzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBNDAwMDAwMjAwMEYwMDk0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBNDEwMDAwMjAwMEYwMDk1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBNDIwMDAwMjAwMEYwMDk2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBNDMwMDAwMjAwMEYwMDk3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBNDQwMDAwMjAwMEYwMDk4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBNDUwMDAwMjAwMEYwMDk5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNDYwMDAwMjAwMEYwMDlBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNDcwMDAwMjAwMEYwMDlCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBNDgwMDAwMjAwMEYwMDlDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBNDkwMDAwMjAwMEYwMDlEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBNEEwMDAwMjAwMEYwMDlFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBNEIwMDAwMjAwMEYwMDlGODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBNEMwMDAwMjAwMEYwMEEwODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBNEQwMDAwMjAwMEYwMEExODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBNEUwMDAwMjAwMEYwMEEyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBNEYwMDAwMjAwMEYwMEEzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBBNTAwMDAwMjAwMEYwMEE0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBNTEwMDAwMjAwMEYwMEE1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBNTIwMDAwMjAwMEYwMEE2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBNTMwMDAwMjAwMEYwMEE3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBNTQwMDAwMjAwMEYwMEE4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNTUwMDAwMjAwMEYwMEE5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNTYwMDAwMjAwMEYwMEFBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBNTcwMDAwMjAwMEYwMEFCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBNTgwMDAwMjAwMEYwMEFDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBNTkwMDAwMjAwMEYwMEFEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBNUEwMDAwMjAwMEYwMEFFODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBNUIwMDAwMjAwMEYwMEFGODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBNUMwMDAwMjAwMEYwMEIwODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBNUQwMDAwMjAwMEYwMEIxODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBNUUwMDAwMjAwMEYwMEIyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBBNUYwMDAwMjAwMEYwMEIzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBBNjAwMDAwMjAwMEYwMEI0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBNjEwMDAwMjAwMEYwMEI1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBNjIwMDAwMjAwMEYwMEI2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBNjMwMDAwMjAwMEYwMEI3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNjQwMDAwMjAwMEYwMEI4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNjUwMDAwMjAwMEYwMEI5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBNjYwMDAwMjAwMEYwMEJBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBNjcwMDAwMjAwMEYwMEJCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBNjgwMDAwMjAwMEYwMEJDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBNjkwMDAwMjAwMEYwMEJEODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBNkEwMDAwMjAwMEYwMEJFODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBNkIwMDAwMjAwMEYwMEJGODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBNkMwMDAwMjAwMEYwMEMwODc3MTAwNzkwMDAwMDA3NjkwNjBGREU1Cis6MTBBNkQwMDAwMjAwMEYwMEMxODc3MTAwM0QwMDAwMDA2RjAwODBGNzhECis6MTBBNkUwMDAwMjAwMEYwMEMyODc3MTAwM0QwMDAwMDA2RjAwODBGNzdDCis6MTBBNkYwMDAwMjAwMEYwMEMzODc3MTAwM0QwMDAwMDA2RjAwODBGNzZCCis6MTBBNzAwMDAwMjAwMEYwMEM0ODc3MTgwM0QwMDAwMDA2RjAwODBGN0Q5Cis6MDAwMDAwMDFGRgorLyogTG9hZGluZyBGaXJtd2FyZSAqLworLyogSU5UX01FTSBWZXIgKi8KKyAqIFRlaHV0aSBOZXR3b3JrcyhSKSBOZXR3b3JrIERyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRlaHV0aSBOZXR3b3JrcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggMzhiYzczNS4uZGMyMGRiMyAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTY5LDEwICs2OSwxMiBAQAogIyBEbyBub3QgYWRkIGFueSBmaWxlc3lzdGVtcyBiZWZvcmUgdGhpcyBsaW5lCiBvYmotJChDT05GSUdfUkVJU0VSRlNfRlMpCSs9IHJlaXNlcmZzLwogb2JqLSQoQ09ORklHX0VYVDNfRlMpCQkrPSBleHQzLyAjIEJlZm9yZSBleHQyIHNvIHJvb3QgZnMgY2FuIGJlIGV4dDMKLW9iai0kKENPTkZJR19FWFQ0X0ZTKQkJKz0gZXh0NC8gIyBCZWZvcmUgZXh0MiBzbyByb290IGZzIGNhbiBiZSBleHQ0CitvYmotJChDT05GSUdfRVhUMl9GUykJCSs9IGV4dDIvCisjIFdlIHBsYWNlIGV4dDQgYWZ0ZXIgZXh0MiBzbyBwbGFpbiBleHQyIHJvb3QgZnMncyBhcmUgbW91bnRlZCB1c2luZyBleHQyCisjIHVubGVzcyBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSByb290ZnN0eXBlCitvYmotJChDT05GSUdfRVhUNF9GUykJCSs9IGV4dDQvCiBvYmotJChDT05GSUdfSkJEKQkJKz0gamJkLwogb2JqLSQoQ09ORklHX0pCRDIpCQkrPSBqYmQyLwotb2JqLSQoQ09ORklHX0VYVDJfRlMpCQkrPSBleHQyLwogb2JqLSQoQ09ORklHX0NSQU1GUykJCSs9IGNyYW1mcy8KIG9iai0kKENPTkZJR19TUVVBU0hGUykJCSs9IHNxdWFzaGZzLwogb2JqLXkJCQkJKz0gcmFtZnMvCmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IDhmYTc3ZTIuLjc2ZGExMjUgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAlyZXEtPnByaXZhdGUgPSBOVUxMOwogCXJlcS0+a2lfaW92ZWMgPSBOVUxMOwogCUlOSVRfTElTVF9IRUFEKCZyZXEtPmtpX3J1bl9saXN0KTsKLQlyZXEtPmtpX2V2ZW50ZmQgPSBFUlJfUFRSKC1FSU5WQUwpOworCXJlcS0+a2lfZXZlbnRmZCA9IE5VTEw7CiAKIAkvKiBDaGVjayBpZiB0aGUgY29tcGxldGlvbiBxdWV1ZSBoYXMgZW5vdWdoIGZyZWUgc3BhY2UgdG8KIAkgKiBhY2NlcHQgYW4gZXZlbnQgZnJvbSB0aGlzIGlvLgpAQCAtNDg1LDggKzQ4NSw2IEBACiB7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZjdHgtPmN0eF9sb2NrKTsKIAotCWlmICghSVNfRVJSKHJlcS0+a2lfZXZlbnRmZCkpCi0JCWZwdXQocmVxLT5raV9ldmVudGZkKTsKIAlpZiAocmVxLT5raV9kdG9yKQogCQlyZXEtPmtpX2R0b3IocmVxKTsKIAlpZiAocmVxLT5raV9pb3ZlYyAhPSAmcmVxLT5raV9pbmxpbmVfdmVjKQpAQCAtNTA4LDggKzUwNiwxMSBAQAogCQlsaXN0X2RlbCgmcmVxLT5raV9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZmcHV0X2xvY2spOwogCi0JCS8qIENvbXBsZXRlIHRoZSBmcHV0ICovCi0JCV9fZnB1dChyZXEtPmtpX2ZpbHApOworCQkvKiBDb21wbGV0ZSB0aGUgZnB1dChzKSAqLworCQlpZiAocmVxLT5raV9maWxwICE9IE5VTEwpCisJCQlfX2ZwdXQocmVxLT5raV9maWxwKTsKKwkJaWYgKHJlcS0+a2lfZXZlbnRmZCAhPSBOVUxMKQorCQkJX19mcHV0KHJlcS0+a2lfZXZlbnRmZCk7CiAKIAkJLyogTGluayB0aGUgaW9jYiBpbnRvIHRoZSBjb250ZXh0J3MgZnJlZSBsaXN0ICovCiAJCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwpAQCAtNTI3LDEyICs1MjgsMTQgQEAKICAqLwogc3RhdGljIGludCBfX2Fpb19wdXRfcmVxKHN0cnVjdCBraW9jdHggKmN0eCwgc3RydWN0IGtpb2NiICpyZXEpCiB7CisJaW50IHNjaGVkdWxlX3B1dHJlcSA9IDA7CisKIAlkcHJpbnRrKEtFUk5fREVCVUcgImFpb19wdXQoJXApOiBmX2NvdW50PSVsZFxuIiwKIAkJcmVxLCBhdG9taWNfbG9uZ19yZWFkKCZyZXEtPmtpX2ZpbHAtPmZfY291bnQpKTsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmY3R4LT5jdHhfbG9jayk7CiAKLQlyZXEtPmtpX3VzZXJzIC0tOworCXJlcS0+a2lfdXNlcnMtLTsKIAlCVUdfT04ocmVxLT5raV91c2VycyA8IDApOwogCWlmIChsaWtlbHkocmVxLT5raV91c2VycykpCiAJCXJldHVybiAwOwpAQCAtNTQwLDEwICs1NDMsMjMgQEAKIAlyZXEtPmtpX2NhbmNlbCA9IE5VTEw7CiAJcmVxLT5raV9yZXRyeSA9IE5VTEw7CiAKLQkvKiBNdXN0IGJlIGRvbmUgdW5kZXIgdGhlIGxvY2sgdG8gc2VyaWFsaXNlIGFnYWluc3QgY2FuY2VsbGF0aW9uLgotCSAqIENhbGwgdGhpcyBhaW9fZnB1dCBhcyBpdCBkdXBsaWNhdGVzIGZwdXQgdmlhIHRoZSBmcHV0X3dvcmsuCisJLyoKKwkgKiBUcnkgdG8gb3B0aW1pemUgdGhlIGFpbyBhbmQgZXZlbnRmZCBmaWxlKiBwdXRzLCBieSBhdm9pZGluZyB0bworCSAqIHNjaGVkdWxlIHdvcmsgaW4gY2FzZSBpdCBpcyBub3QgX19mcHV0KCkgdGltZS4gSW4gbm9ybWFsIGNhc2VzLAorCSAqIHdlIHdvdWxkIG5vdCBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgZmlsZSosIHNvCisJICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIHcvb3V0IGFueSBhaW8ga3RocmVhZCB3YWtldXAuCiAJICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19sb25nX2RlY19hbmRfdGVzdCgmcmVxLT5raV9maWxwLT5mX2NvdW50KSkpIHsKKwlpZiAodW5saWtlbHkoYXRvbWljX2xvbmdfZGVjX2FuZF90ZXN0KCZyZXEtPmtpX2ZpbHAtPmZfY291bnQpKSkKKwkJc2NoZWR1bGVfcHV0cmVxKys7CisJZWxzZQorCQlyZXEtPmtpX2ZpbHAgPSBOVUxMOworCWlmIChyZXEtPmtpX2V2ZW50ZmQgIT0gTlVMTCkgeworCQlpZiAodW5saWtlbHkoYXRvbWljX2xvbmdfZGVjX2FuZF90ZXN0KCZyZXEtPmtpX2V2ZW50ZmQtPmZfY291bnQpKSkKKwkJCXNjaGVkdWxlX3B1dHJlcSsrOworCQllbHNlCisJCQlyZXEtPmtpX2V2ZW50ZmQgPSBOVUxMOworCX0KKwlpZiAodW5saWtlbHkoc2NoZWR1bGVfcHV0cmVxKSkgewogCQlnZXRfaW9jdHgoY3R4KTsKIAkJc3Bpbl9sb2NrKCZmcHV0X2xvY2spOwogCQlsaXN0X2FkZCgmcmVxLT5raV9saXN0LCAmZnB1dF9oZWFkKTsKQEAgLTU3MSw3ICs1ODcsNyBAQAogc3RhdGljIHN0cnVjdCBraW9jdHggKmxvb2t1cF9pb2N0eCh1bnNpZ25lZCBsb25nIGN0eF9pZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXN0cnVjdCBraW9jdHggKmN0eCA9IE5VTEw7CisJc3RydWN0IGtpb2N0eCAqY3R4LCAqcmV0ID0gTlVMTDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTU3OSwxMiArNTk1LDEzIEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0eCwgbiwgJm1tLT5pb2N0eF9saXN0LCBsaXN0KSB7CiAJCWlmIChjdHgtPnVzZXJfaWQgPT0gY3R4X2lkICYmICFjdHgtPmRlYWQpIHsKIAkJCWdldF9pb2N0eChjdHgpOworCQkJcmV0ID0gY3R4OwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gY3R4OworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xMDA5LDcgKzEwMjYsNyBAQAogCSAqIGV2ZW50ZmQuIFRoZSBldmVudGZkX3NpZ25hbCgpIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgY2FsbGVkCiAJICogZnJvbSBJUlEgY29udGV4dC4KIAkgKi8KLQlpZiAoIUlTX0VSUihpb2NiLT5raV9ldmVudGZkKSkKKwlpZiAoaW9jYi0+a2lfZXZlbnRmZCAhPSBOVUxMKQogCQlldmVudGZkX3NpZ25hbChpb2NiLT5raV9ldmVudGZkLCAxKTsKIAogcHV0X3JxOgpAQCAtMTYwOCw2ICsxNjI1LDcgQEAKIAkJcmVxLT5raV9ldmVudGZkID0gZXZlbnRmZF9mZ2V0KChpbnQpIGlvY2ItPmFpb19yZXNmZCk7CiAJCWlmIChJU19FUlIocmVxLT5raV9ldmVudGZkKSkgewogCQkJcmV0ID0gUFRSX0VSUihyZXEtPmtpX2V2ZW50ZmQpOworCQkJcmVxLT5raV9ldmVudGZkID0gTlVMTDsKIAkJCWdvdG8gb3V0X3B1dF9yZXE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9iaW8taW50ZWdyaXR5LmMgYi9mcy9iaW8taW50ZWdyaXR5LmMKaW5kZXggNTQ5YjAxNC4uMzFjNDZhMiAxMDA2NDQKLS0tIGEvZnMvYmlvLWludGVncml0eS5jCisrKyBiL2ZzL2Jpby1pbnRlZ3JpdHkuYwpAQCAtMjYsNTUgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmlvX2ludGVncml0eV9zbGFiIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgbWVtcG9vbF90ICpiaW9faW50ZWdyaXR5X3Bvb2w7CitzdGF0aWMgc3RydWN0IGJpb19zZXQgKmludGVncml0eV9iaW9fc2V0Owogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpraW50ZWdyaXR5ZF93cTsKIAogLyoqCi0gKiBiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldCAtIEFsbG9jYXRlIGludGVncml0eSBwYXlsb2FkIGFuZCBhdHRhY2ggaXQgdG8gYmlvCi0gKiBAYmlvOgliaW8gdG8gYXR0YWNoIGludGVncml0eSBtZXRhZGF0YSB0bwotICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCi0gKiBAbnJfdmVjczoJTnVtYmVyIG9mIGludGVncml0eSBtZXRhZGF0YSBzY2F0dGVyLWdhdGhlciBlbGVtZW50cwotICogQGJzOgkJYmlvX3NldCB0byBhbGxvY2F0ZSBmcm9tCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgYSBiaW8gZm9yIGF0dGFjaGluZyBpbnRlZ3JpdHkKLSAqIG1ldGFkYXRhLiAgbnJfdmVjcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGNvbnRhaW5pbmcKLSAqIGludGVncml0eSBtZXRhZGF0YSB0aGF0IGNhbiBiZSBhdHRhY2hlZC4KLSAqLwotc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoc3RydWN0IGJpbyAqYmlvLAotCQkJCQkJCSBnZnBfdCBnZnBfbWFzaywKLQkJCQkJCQkgdW5zaWduZWQgaW50IG5yX3ZlY3MsCi0JCQkJCQkJIHN0cnVjdCBiaW9fc2V0ICpicykKLXsKLQlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXA7Ci0Jc3RydWN0IGJpb192ZWMgKml2OwotCXVuc2lnbmVkIGxvbmcgaWR4OwotCi0JQlVHX09OKGJpbyA9PSBOVUxMKTsKLQotCWJpcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCwgZ2ZwX21hc2spOwotCWlmICh1bmxpa2VseShiaXAgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jIGJpcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltZW1zZXQoYmlwLCAwLCBzaXplb2YoKmJpcCkpOwotCi0JaXYgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl92ZWNzLCAmaWR4LCBicyk7Ci0JaWYgKHVubGlrZWx5KGl2ID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBfdmVjXG4iLCBfX2Z1bmNfXyk7Ci0JCW1lbXBvb2xfZnJlZShiaXAsIGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQliaXAtPmJpcF9wb29sID0gaWR4OwotCWJpcC0+YmlwX3ZlYyA9IGl2OwotCWJpcC0+YmlwX2JpbyA9IGJpbzsKLQliaW8tPmJpX2ludGVncml0eSA9IGJpcDsKLQotCXJldHVybiBiaXA7Ci19Ci1FWFBPUlRfU1lNQk9MKGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KTsKLQotLyoqCiAgKiBiaW9faW50ZWdyaXR5X2FsbG9jIC0gQWxsb2NhdGUgaW50ZWdyaXR5IHBheWxvYWQgYW5kIGF0dGFjaCBpdCB0byBiaW8KICAqIEBiaW86CWJpbyB0byBhdHRhY2ggaW50ZWdyaXR5IG1ldGFkYXRhIHRvCiAgKiBAZ2ZwX21hc2s6CU1lbW9yeSBhbGxvY2F0aW9uIG1hc2sKQEAgLTg4LDE5ICs0NCw0NCBAQAogCQkJCQkJICBnZnBfdCBnZnBfbWFzaywKIAkJCQkJCSAgdW5zaWduZWQgaW50IG5yX3ZlY3MpCiB7Ci0JcmV0dXJuIGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KGJpbywgZ2ZwX21hc2ssIG5yX3ZlY3MsIGZzX2Jpb19zZXQpOworCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqaXY7CisJdW5zaWduZWQgbG9uZyBpZHg7CisKKwlCVUdfT04oYmlvID09IE5VTEwpOworCisJYmlwID0gbWVtcG9vbF9hbGxvYyhiaW9faW50ZWdyaXR5X3Bvb2wsIGdmcF9tYXNrKTsKKwlpZiAodW5saWtlbHkoYmlwID09IE5VTEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KGJpcCwgMCwgc2l6ZW9mKCpiaXApKTsKKworCWl2ID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfdmVjcywgJmlkeCwgaW50ZWdyaXR5X2Jpb19zZXQpOworCWlmICh1bmxpa2VseShpdiA9PSBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwX3ZlY1xuIiwgX19mdW5jX18pOworCQltZW1wb29sX2ZyZWUoYmlwLCBiaW9faW50ZWdyaXR5X3Bvb2wpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwliaXAtPmJpcF9wb29sID0gaWR4OworCWJpcC0+YmlwX3ZlYyA9IGl2OworCWJpcC0+YmlwX2JpbyA9IGJpbzsKKwliaW8tPmJpX2ludGVncml0eSA9IGJpcDsKKworCXJldHVybiBiaXA7CiB9CiBFWFBPUlRfU1lNQk9MKGJpb19pbnRlZ3JpdHlfYWxsb2MpOwogCiAvKioKICAqIGJpb19pbnRlZ3JpdHlfZnJlZSAtIEZyZWUgYmlvIGludGVncml0eSBwYXlsb2FkCiAgKiBAYmlvOgliaW8gY29udGFpbmluZyBiaXAgdG8gYmUgZnJlZWQKLSAqIEBiczoJCWJpb19zZXQgdGhpcyBiaW8gd2FzIGFsbG9jYXRlZCBmcm9tCiAgKgogICogRGVzY3JpcHRpb246IFVzZWQgdG8gZnJlZSB0aGUgaW50ZWdyaXR5IHBvcnRpb24gb2YgYSBiaW8uIFVzdWFsbHkKICAqIGNhbGxlZCBmcm9tIGJpb19mcmVlKCkuCiAgKi8KLXZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb19zZXQgKmJzKQordm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcCA9IGJpby0+YmlfaW50ZWdyaXR5OwogCkBAIC0xMTEsOCArOTIsOCBAQAogCSAgICAmJiBiaXAtPmJpcF9idWYgIT0gTlVMTCkKIAkJa2ZyZWUoYmlwLT5iaXBfYnVmKTsKIAotCWJ2ZWNfZnJlZV9icyhicywgYmlwLT5iaXBfdmVjLCBiaXAtPmJpcF9wb29sKTsKLQltZW1wb29sX2ZyZWUoYmlwLCBicy0+YmlvX2ludGVncml0eV9wb29sKTsKKwlidmVjX2ZyZWVfYnMoaW50ZWdyaXR5X2Jpb19zZXQsIGJpcC0+YmlwX3ZlYywgYmlwLT5iaXBfcG9vbCk7CisJbWVtcG9vbF9mcmVlKGJpcCwgYmlvX2ludGVncml0eV9wb29sKTsKIAogCWJpby0+YmlfaW50ZWdyaXR5ID0gTlVMTDsKIH0KQEAgLTY4NSwxOSArNjY2LDE4IEBACiAgKiBiaW9faW50ZWdyaXR5X2Nsb25lIC0gQ2FsbGJhY2sgZm9yIGNsb25pbmcgYmlvcyB3aXRoIGludGVncml0eSBtZXRhZGF0YQogICogQGJpbzoJTmV3IGJpbwogICogQGJpb19zcmM6CU9yaWdpbmFsIGJpbwotICogQGJzOgkJYmlvX3NldCB0byBhbGxvY2F0ZSBiaXAgZnJvbQorICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCiAgKgogICogRGVzY3JpcHRpb246CUNhbGxlZCB0byBhbGxvY2F0ZSBhIGJpcCB3aGVuIGNsb25pbmcgYSBiaW8KICAqLwotaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLAotCQkJc3RydWN0IGJpb19zZXQgKmJzKQoraW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXBfc3JjID0gYmlvX3NyYy0+YmlfaW50ZWdyaXR5OwogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcDsKIAogCUJVR19PTihiaXBfc3JjID09IE5VTEwpOwogCi0JYmlwID0gYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoYmlvLCBHRlBfTk9JTywgYmlwX3NyYy0+YmlwX3ZjbnQsIGJzKTsKKwliaXAgPSBiaW9faW50ZWdyaXR5X2FsbG9jKGJpbywgZ2ZwX21hc2ssIGJpcF9zcmMtPmJpcF92Y250KTsKIAogCWlmIChiaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CkBAIC03MTMsMzcgKzY5MywyNSBAQAogfQogRVhQT1JUX1NZTUJPTChiaW9faW50ZWdyaXR5X2Nsb25lKTsKIAotaW50IGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKHN0cnVjdCBiaW9fc2V0ICpicywgaW50IHBvb2xfc2l6ZSkKLXsKLQlicy0+YmlvX2ludGVncml0eV9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKHBvb2xfc2l6ZSwKLQkJCQkJCQkgIGJpb19pbnRlZ3JpdHlfc2xhYik7Ci0JaWYgKCFicy0+YmlvX2ludGVncml0eV9wb29sKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYmlvc2V0X2ludGVncml0eV9jcmVhdGUpOwotCi12b2lkIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvX3NldCAqYnMpCi17Ci0JaWYgKGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpCi0JCW1lbXBvb2xfZGVzdHJveShicy0+YmlvX2ludGVncml0eV9wb29sKTsKLX0KLUVYUE9SVF9TWU1CT0woYmlvc2V0X2ludGVncml0eV9mcmVlKTsKLQotdm9pZCBfX2luaXQgYmlvX2ludGVncml0eV9pbml0X3NsYWIodm9pZCkKLXsKLQliaW9faW50ZWdyaXR5X3NsYWIgPSBLTUVNX0NBQ0hFKGJpb19pbnRlZ3JpdHlfcGF5bG9hZCwKLQkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUMpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JpdHlfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmlvX2ludGVncml0eV9pbml0KHZvaWQpCiB7CiAJa2ludGVncml0eWRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJraW50ZWdyaXR5ZCIpOwogCiAJaWYgKCFraW50ZWdyaXR5ZF93cSkKIAkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUga2ludGVncml0eWRcbiIpOwogCisJYmlvX2ludGVncml0eV9zbGFiID0gS01FTV9DQUNIRShiaW9faW50ZWdyaXR5X3BheWxvYWQsCisJCQkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDKTsKKworCWJpb19pbnRlZ3JpdHlfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChCSU9fUE9PTF9TSVpFLAorCQkJCQkJICAgICAgYmlvX2ludGVncml0eV9zbGFiKTsKKwlpZiAoIWJpb19pbnRlZ3JpdHlfcG9vbCkKKwkJcGFuaWMoImJpb19pbnRlZ3JpdHk6IGNhbid0IGFsbG9jYXRlIGJpcCBwb29sXG4iKTsKKworCWludGVncml0eV9iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZShCSU9fUE9PTF9TSVpFLCAwKTsKKwlpZiAoIWludGVncml0eV9iaW9fc2V0KQorCQlwYW5pYygiYmlvX2ludGVncml0eTogY2FuJ3QgYWxsb2NhdGUgYmlvX3NldFxuIik7CisKIAlyZXR1cm4gMDsKIH0KLXN1YnN5c19pbml0Y2FsbChpbnRlZ3JpdHlfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoYmlvX2ludGVncml0eV9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggMDYyMjk5YS4uYTA0MGNkZSAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQlidmVjX2ZyZWVfYnMoYnMsIGJpby0+YmlfaW9fdmVjLCBCSU9fUE9PTF9JRFgoYmlvKSk7CiAKIAlpZiAoYmlvX2ludGVncml0eShiaW8pKQotCQliaW9faW50ZWdyaXR5X2ZyZWUoYmlvLCBicyk7CisJCWJpb19pbnRlZ3JpdHlfZnJlZShiaW8pOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGZyb250IHBhZGRpbmcsIGFkanVzdCB0aGUgYmlvIHBvaW50ZXIgYmVmb3JlIGZyZWVpbmcKQEAgLTMwMSw0NyArMzAxLDUxIEBACiAgKiovCiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfYmlvc2V0KGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzLCBzdHJ1Y3QgYmlvX3NldCAqYnMpCiB7CisJc3RydWN0IGJpb192ZWMgKmJ2bCA9IE5VTEw7CiAJc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGlkeCA9IDA7CisJdm9pZCAqcCA9IE5VTEw7CiAKIAlpZiAoYnMpIHsKLQkJdm9pZCAqcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19wb29sLCBnZnBfbWFzayk7Ci0KLQkJaWYgKHApCi0JCQliaW8gPSBwICsgYnMtPmZyb250X3BhZDsKLQl9IGVsc2UKKwkJcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19wb29sLCBnZnBfbWFzayk7CisJCWlmICghcCkKKwkJCWdvdG8gZXJyOworCQliaW8gPSBwICsgYnMtPmZyb250X3BhZDsKKwl9IGVsc2UgewogCQliaW8gPSBrbWFsbG9jKHNpemVvZigqYmlvKSwgZ2ZwX21hc2spOwotCi0JaWYgKGxpa2VseShiaW8pKSB7Ci0JCXN0cnVjdCBiaW9fdmVjICpidmwgPSBOVUxMOwotCi0JCWJpb19pbml0KGJpbyk7Ci0JCWlmIChsaWtlbHkobnJfaW92ZWNzKSkgewotCQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihpZHgpOwotCi0JCQlpZiAobnJfaW92ZWNzIDw9IEJJT19JTkxJTkVfVkVDUykgewotCQkJCWlkeCA9IDA7Ci0JCQkJYnZsID0gYmlvLT5iaV9pbmxpbmVfdmVjczsKLQkJCQlucl9pb3ZlY3MgPSBCSU9fSU5MSU5FX1ZFQ1M7Ci0JCQl9IGVsc2UgewotCQkJCWJ2bCA9IGJ2ZWNfYWxsb2NfYnMoZ2ZwX21hc2ssIG5yX2lvdmVjcywgJmlkeCwKLQkJCQkJCQlicyk7Ci0JCQkJbnJfaW92ZWNzID0gYnZlY19ucl92ZWNzKGlkeCk7Ci0JCQl9Ci0JCQlpZiAodW5saWtlbHkoIWJ2bCkpIHsKLQkJCQlpZiAoYnMpCi0JCQkJCW1lbXBvb2xfZnJlZShiaW8sIGJzLT5iaW9fcG9vbCk7Ci0JCQkJZWxzZQotCQkJCQlrZnJlZShiaW8pOwotCQkJCWJpbyA9IE5VTEw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQliaW8tPmJpX2ZsYWdzIHw9IGlkeCA8PCBCSU9fUE9PTF9PRkZTRVQ7Ci0JCQliaW8tPmJpX21heF92ZWNzID0gbnJfaW92ZWNzOwotCQl9Ci0JCWJpby0+YmlfaW9fdmVjID0gYnZsOworCQlpZiAoIWJpbykKKwkJCWdvdG8gZXJyOwogCX0KLW91dDoKKworCWJpb19pbml0KGJpbyk7CisKKwlpZiAodW5saWtlbHkoIW5yX2lvdmVjcykpCisJCWdvdG8gb3V0X3NldDsKKworCWlmIChucl9pb3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7CisJCWJ2bCA9IGJpby0+YmlfaW5saW5lX3ZlY3M7CisJCW5yX2lvdmVjcyA9IEJJT19JTkxJTkVfVkVDUzsKKwl9IGVsc2UgeworCQlidmwgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl9pb3ZlY3MsICZpZHgsIGJzKTsKKwkJaWYgKHVubGlrZWx5KCFidmwpKQorCQkJZ290byBlcnJfZnJlZTsKKworCQlucl9pb3ZlY3MgPSBidmVjX25yX3ZlY3MoaWR4KTsKKwl9CisJYmlvLT5iaV9mbGFncyB8PSBpZHggPDwgQklPX1BPT0xfT0ZGU0VUOworCWJpby0+YmlfbWF4X3ZlY3MgPSBucl9pb3ZlY3M7CitvdXRfc2V0OgorCWJpby0+YmlfaW9fdmVjID0gYnZsOworCiAJcmV0dXJuIGJpbzsKKworZXJyX2ZyZWU6CisJaWYgKGJzKQorCQltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKKwllbHNlCisJCWtmcmVlKGJpbyk7CitlcnI6CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhnZnBfdCBnZnBfbWFzaywgaW50IG5yX2lvdmVjcykKQEAgLTQ2MiwxMCArNDY2LDEyIEBACiAJaWYgKGJpb19pbnRlZ3JpdHkoYmlvKSkgewogCQlpbnQgcmV0OwogCi0JCXJldCA9IGJpb19pbnRlZ3JpdHlfY2xvbmUoYiwgYmlvLCBmc19iaW9fc2V0KTsKKwkJcmV0ID0gYmlvX2ludGVncml0eV9jbG9uZShiLCBiaW8sIGdmcF9tYXNrKTsKIAotCQlpZiAocmV0IDwgMCkKKwkJaWYgKHJldCA8IDApIHsKKwkJCWJpb19wdXQoYik7CiAJCQlyZXR1cm4gTlVMTDsKKwkJfQogCX0KIAogCXJldHVybiBiOwpAQCAtMTUyMyw3ICsxNTI5LDYgQEAKIAlpZiAoYnMtPmJpb19wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koYnMtPmJpb19wb29sKTsKIAotCWJpb3NldF9pbnRlZ3JpdHlfZnJlZShicyk7CiAJYmlvdmVjX2ZyZWVfcG9vbHMoYnMpOwogCWJpb19wdXRfc2xhYihicyk7CiAKQEAgLTE1NjQsOSArMTU2OSw2IEBACiAJaWYgKCFicy0+YmlvX3Bvb2wpCiAJCWdvdG8gYmFkOwogCi0JaWYgKGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKGJzLCBwb29sX3NpemUpKQotCQlnb3RvIGJhZDsKLQogCWlmICghYmlvdmVjX2NyZWF0ZV9wb29scyhicywgcG9vbF9zaXplKSkKIAkJcmV0dXJuIGJzOwogCkBAIC0xNTgzLDYgKzE1ODUsMTMgQEAKIAkJaW50IHNpemU7CiAJCXN0cnVjdCBiaW92ZWNfc2xhYiAqYnZzID0gYnZlY19zbGFicyArIGk7CiAKKyNpZm5kZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCisJCWlmIChidnMtPm5yX3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7CisJCQlidnMtPnNsYWIgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCiAJCXNpemUgPSBidnMtPm5yX3ZlY3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpOwogCQlidnMtPnNsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShidnMtPm5hbWUsIHNpemUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLCBOVUxMKTsKQEAgLTE1OTcsNyArMTYwNiw2IEBACiAJaWYgKCFiaW9fc2xhYnMpCiAJCXBhbmljKCJiaW86IGNhbid0IGFsbG9jYXRlIGJpb3NcbiIpOwogCi0JYmlvX2ludGVncml0eV9pbml0X3NsYWIoKTsKIAliaW92ZWNfaW5pdF9zbGFicygpOwogCiAJZnNfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoQklPX1BPT0xfU0laRSwgMCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCBhOGM5NjkzLi43MjY3N2NlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTY2LDYgKzY2LDkgQEAKIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGFsbG9jX2lub2RlczsKIAorCS8qIHRoZSBzcGFjZV9pbmZvIGZvciB3aGVyZSB0aGlzIGlub2RlJ3MgZGF0YSBhbGxvY2F0aW9ucyBhcmUgZG9uZSAqLworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvOworCiAJLyogZnVsbCA2NCBiaXQgZ2VuZXJhdGlvbiBudW1iZXIsIHN0cnVjdCB2ZnNfaW5vZGUgZG9lc24ndCBoYXZlIGEgYmlnCiAJICogZW5vdWdoIGZpZWxkIGZvciB0aGlzLgogCSAqLwpAQCAtOTQsNiArOTcsMTEgQEAKIAkgKi8KIAl1NjQgZGVsYWxsb2NfYnl0ZXM7CiAKKwkvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkgYmUgdXNlZCBmb3IgdGhpcyBpbm9kZSBmb3IKKwkgKiBkZWxhbGxvYworCSAqLworCXU2NCByZXNlcnZlZF9ieXRlczsKKwogCS8qCiAJICogdGhlIHNpemUgb2YgdGhlIGZpbGUgc3RvcmVkIGluIHRoZSBtZXRhZGF0YSBvbiBkaXNrLiAgZGF0YT1vcmRlcmVkCiAJICogbWVhbnMgdGhlIGluLW1lbW9yeSBpX3NpemUgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb24gZGlzawpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuYyBiL2ZzL2J0cmZzL2N0cmVlLmMKaW5kZXggMzU0NDNjYy4uMzdmMzFiNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuYworKysgYi9mcy9idHJmcy9jdHJlZS5jCkBAIC0zOCwxOSArMzgsMTIgQEAKIHN0YXRpYyBpbnQgZGVsX3B0cihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCSAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgbGV2ZWwsIGludCBzbG90KTsKIAotaW5saW5lIHZvaWQgYnRyZnNfaW5pdF9wYXRoKHN0cnVjdCBidHJmc19wYXRoICpwKQotewotCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLX0KLQogc3RydWN0IGJ0cmZzX3BhdGggKmJ0cmZzX2FsbG9jX3BhdGgodm9pZCkKIHsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKLQlwYXRoID0ga21lbV9jYWNoZV9hbGxvYyhidHJmc19wYXRoX2NhY2hlcCwgR0ZQX05PRlMpOwotCWlmIChwYXRoKSB7Ci0JCWJ0cmZzX2luaXRfcGF0aChwYXRoKTsKKwlwYXRoID0ga21lbV9jYWNoZV96YWxsb2MoYnRyZnNfcGF0aF9jYWNoZXAsIEdGUF9OT0ZTKTsKKwlpZiAocGF0aCkKIAkJcGF0aC0+cmVhZGEgPSAxOwotCX0KIAlyZXR1cm4gcGF0aDsKIH0KIApAQCAtNjksMTQgKzYyLDM4IEBACiAKIC8qCiAgKiByZXNldCBhbGwgdGhlIGxvY2tlZCBub2RlcyBpbiB0aGUgcGF0Y2ggdG8gc3Bpbm5pbmcgbG9ja3MuCisgKgorICogaGVsZCBpcyB1c2VkIHRvIGtlZXAgbG9ja2RlcCBoYXBweSwgd2hlbiBsb2NrZGVwIGlzIGVuYWJsZWQKKyAqIHdlIHNldCBoZWxkIHRvIGEgYmxvY2tpbmcgbG9jayBiZWZvcmUgd2UgZ28gYXJvdW5kIGFuZAorICogcmV0YWtlIGFsbCB0aGUgc3BpbmxvY2tzIGluIHRoZSBwYXRoLiAgWW91IGNhbiBzYWZlbHkgdXNlIE5VTEwKKyAqIGZvciBoZWxkCiAgKi8KLW5vaW5saW5lIHZvaWQgYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhzdHJ1Y3QgYnRyZnNfcGF0aCAqcCkKK25vaW5saW5lIHZvaWQgYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhzdHJ1Y3QgYnRyZnNfcGF0aCAqcCwKKwkJCQkJc3RydWN0IGV4dGVudF9idWZmZXIgKmhlbGQpCiB7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEJUUkZTX01BWF9MRVZFTDsgaSsrKSB7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCS8qIGxvY2tkZXAgcmVhbGx5IGNhcmVzIHRoYXQgd2UgdGFrZSBhbGwgb2YgdGhlc2Ugc3BpbmxvY2tzCisJICogaW4gdGhlIHJpZ2h0IG9yZGVyLiAgSWYgYW55IG9mIHRoZSBsb2NrcyBpbiB0aGUgcGF0aCBhcmUgbm90CisJICogY3VycmVudGx5IGJsb2NraW5nLCBpdCBpcyBnb2luZyB0byBjb21wbGFpbi4gIFNvLCBtYWtlIHJlYWxseQorCSAqIHJlYWxseSBzdXJlIGJ5IGZvcmNpbmcgdGhlIHBhdGggdG8gYmxvY2tpbmcgYmVmb3JlIHdlIGNsZWFyCisJICogdGhlIHBhdGggYmxvY2tpbmcuCisJICovCisJaWYgKGhlbGQpCisJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKGhlbGQpOworCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOworI2VuZGlmCisKKwlmb3IgKGkgPSBCVFJGU19NQVhfTEVWRUwgLSAxOyBpID49IDA7IGktLSkgewogCQlpZiAocC0+bm9kZXNbaV0gJiYgcC0+bG9ja3NbaV0pCiAJCQlidHJmc19jbGVhcl9sb2NrX2Jsb2NraW5nKHAtPm5vZGVzW2ldKTsKIAl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCWlmIChoZWxkKQorCQlidHJmc19jbGVhcl9sb2NrX2Jsb2NraW5nKGhlbGQpOworI2VuZGlmCiB9CiAKIC8qIHRoaXMgYWxzbyByZWxlYXNlcyB0aGUgcGF0aCAqLwpAQCAtMjYwLDcgKzI3Nyw3IEBACiAJaWYgKCpjb3dfcmV0ID09IGJ1ZikKIAkJdW5sb2NrX29yaWcgPSAxOwogCi0JV0FSTl9PTighYnRyZnNfdHJlZV9sb2NrZWQoYnVmKSk7CisJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKGJ1Zik7CiAKIAlpZiAocGFyZW50KQogCQlwYXJlbnRfc3RhcnQgPSBwYXJlbnQtPnN0YXJ0OwpAQCAtMjg2LDcgKzMwMyw3IEBACiAJCQkJCQkgIHRyYW5zLT50cmFuc2lkLCBsZXZlbCwgJmlucyk7CiAJCUJVR19PTihyZXQpOwogCQljb3cgPSBidHJmc19pbml0X25ld19idWZmZXIodHJhbnMsIHJvb3QsIHByZWFsbG9jX2Rlc3QsCi0JCQkJCSAgICBidWYtPmxlbik7CisJCQkJCSAgICBidWYtPmxlbiwgbGV2ZWwpOwogCX0gZWxzZSB7CiAJCWNvdyA9IGJ0cmZzX2FsbG9jX2ZyZWVfYmxvY2sodHJhbnMsIHJvb3QsIGJ1Zi0+bGVuLAogCQkJCQkgICAgIHBhcmVudF9zdGFydCwKQEAgLTkxNyw5ICs5MzQsOSBAQAogCiAJCS8qIHByb21vdGUgdGhlIGNoaWxkIHRvIGEgcm9vdCAqLwogCQljaGlsZCA9IHJlYWRfbm9kZV9zbG90KHJvb3QsIG1pZCwgMCk7CisJCUJVR19PTighY2hpbGQpOwogCQlidHJmc190cmVlX2xvY2soY2hpbGQpOwogCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhjaGlsZCk7Ci0JCUJVR19PTighY2hpbGQpOwogCQlyZXQgPSBidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIGNoaWxkLCBtaWQsIDAsICZjaGlsZCwgMCk7CiAJCUJVR19PTihyZXQpOwogCkBAIC0xNTY2LDcgKzE1ODMsNyBAQAogCQlpZiAoIXAtPnNraXBfbG9ja2luZykKIAkJCXAtPmxvY2tzW2xldmVsXSA9IDE7CiAKLQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwKTsKKwkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwLCBOVUxMKTsKIAogCQkvKgogCQkgKiB3ZSBoYXZlIGEgbG9jayBvbiBiIGFuZCBhcyBsb25nIGFzIHdlIGFyZW4ndCBjaGFuZ2luZwpAQCAtMTYwNSw3ICsxNjIyLDcgQEAKIAogCQkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwogCQkJCXNyZXQgPSBzcGxpdF9ub2RlKHRyYW5zLCByb290LCBwLCBsZXZlbCk7Ci0JCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwKTsKKwkJCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHAsIE5VTEwpOwogCiAJCQkJQlVHX09OKHNyZXQgPiAwKTsKIAkJCQlpZiAoc3JldCkgewpAQCAtMTYyNSw3ICsxNjQyLDcgQEAKIAogCQkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwogCQkJCXNyZXQgPSBiYWxhbmNlX2xldmVsKHRyYW5zLCByb290LCBwLCBsZXZlbCk7Ci0JCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwKTsKKwkJCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHAsIE5VTEwpOwogCiAJCQkJaWYgKHNyZXQpIHsKIAkJCQkJcmV0ID0gc3JldDsKQEAgLTE2ODgsMTMgKzE3MDUsMTMgQEAKIAkJCWlmICghcC0+c2tpcF9sb2NraW5nKSB7CiAJCQkJaW50IGxyZXQ7CiAKLQkJCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHApOworCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocCwgTlVMTCk7CiAJCQkJbHJldCA9IGJ0cmZzX3RyeV9zcGluX2xvY2soYik7CiAKIAkJCQlpZiAoIWxyZXQpIHsKIAkJCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7CiAJCQkJCWJ0cmZzX3RyZWVfbG9jayhiKTsKLQkJCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwKTsKKwkJCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwLCBiKTsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xNzA2LDcgKzE3MjMsNyBAQAogCQkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwogCQkJCXNyZXQgPSBzcGxpdF9sZWFmKHRyYW5zLCByb290LCBrZXksCiAJCQkJCQkgICAgICBwLCBpbnNfbGVuLCByZXQgPT0gMCk7Ci0JCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwKTsKKwkJCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHAsIE5VTEwpOwogCiAJCQkJQlVHX09OKHNyZXQgPiAwKTsKIAkJCQlpZiAoc3JldCkgewpAQCAtMjM0OCw3ICsyMzY1LDcgQEAKIAlpZiAoc2xvdCA+PSBidHJmc19oZWFkZXJfbnJpdGVtcyh1cHBlcikgLSAxKQogCQlyZXR1cm4gMTsKIAotCVdBUk5fT04oIWJ0cmZzX3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKSk7CisJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKTsKIAogCXJpZ2h0ID0gcmVhZF9ub2RlX3Nsb3Qocm9vdCwgdXBwZXIsIHNsb3QgKyAxKTsKIAlidHJmc190cmVlX2xvY2socmlnaHQpOwpAQCAtMjU0NSw3ICsyNTYyLDcgQEAKIAlpZiAocmlnaHRfbnJpdGVtcyA9PSAwKQogCQlyZXR1cm4gMTsKIAotCVdBUk5fT04oIWJ0cmZzX3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKSk7CisJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKTsKIAogCWxlZnQgPSByZWFkX25vZGVfc2xvdChyb290LCBwYXRoLT5ub2Rlc1sxXSwgc2xvdCAtIDEpOwogCWJ0cmZzX3RyZWVfbG9jayhsZWZ0KTsKQEAgLTM5MjYsNyArMzk0Myw2IEBACiAJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQkJCWdvdG8gYWdhaW47CiAJCQl9IGVsc2UgewotCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocGF0aCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KQEAgLTM5NDYsNyArMzk2Miw3IEBACiAJCXBhdGgtPmxvY2tzW2xldmVsIC0gMV0gPSAxOwogCQlwYXRoLT5ub2Rlc1tsZXZlbCAtIDFdID0gY3VyOwogCQl1bmxvY2tfdXAocGF0aCwgbGV2ZWwsIDEpOwotCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHBhdGgpOworCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHBhdGgsIE5VTEwpOwogCX0KIG91dDoKIAlpZiAocmV0ID09IDApCkBAIC00MDg1LDcgKzQxMDEsNyBAQAogCiAJCW5leHQgPSByZWFkX25vZGVfc2xvdChyb290LCBjLCBzbG90KTsKIAkJaWYgKCFwYXRoLT5za2lwX2xvY2tpbmcpIHsKLQkJCVdBUk5fT04oIWJ0cmZzX3RyZWVfbG9ja2VkKGMpKTsKKwkJCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChjKTsKIAkJCWJ0cmZzX3RyZWVfbG9jayhuZXh0KTsKIAkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOwogCQl9CkBAIC00MTEwLDcgKzQxMjYsNyBAQAogCQkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwYXRoLCBsZXZlbCwgc2xvdCwgMCk7CiAJCW5leHQgPSByZWFkX25vZGVfc2xvdChyb290LCBuZXh0LCAwKTsKIAkJaWYgKCFwYXRoLT5za2lwX2xvY2tpbmcpIHsKLQkJCVdBUk5fT04oIWJ0cmZzX3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzW2xldmVsXSkpOworCQkJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzW2xldmVsXSk7CiAJCQlidHJmc190cmVlX2xvY2sobmV4dCk7CiAJCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhuZXh0KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggNTMxZGIxMS4uNWUxZDRlMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC00MywxMSArNDMsNyBAQAogCiAjZGVmaW5lIEJUUkZTX0FDTF9OT1RfQ0FDSEVEICAgICgodm9pZCAqKS0xKQogCi0jaWZkZWYgQ09ORklHX0xPQ0tERVAKLSMgZGVmaW5lIEJUUkZTX01BWF9MRVZFTCA3Ci0jZWxzZQotIyBkZWZpbmUgQlRSRlNfTUFYX0xFVkVMIDgKLSNlbmRpZgorI2RlZmluZSBCVFJGU19NQVhfTEVWRUwgOAogCiAvKiBob2xkcyBwb2ludGVycyB0byBhbGwgb2YgdGhlIHRyZWUgcm9vdHMgKi8KICNkZWZpbmUgQlRSRlNfUk9PVF9UUkVFX09CSkVDVElEIDFVTEwKQEAgLTYwMCwxMyArNTk2LDI3IEBACiAKIHN0cnVjdCBidHJmc19zcGFjZV9pbmZvIHsKIAl1NjQgZmxhZ3M7Ci0JdTY0IHRvdGFsX2J5dGVzOwotCXU2NCBieXRlc191c2VkOwotCXU2NCBieXRlc19waW5uZWQ7Ci0JdTY0IGJ5dGVzX3Jlc2VydmVkOwotCXU2NCBieXRlc19yZWFkb25seTsKLQlpbnQgZnVsbDsKLQlpbnQgZm9yY2VfYWxsb2M7CisKKwl1NjQgdG90YWxfYnl0ZXM7CS8qIHRvdGFsIGJ5dGVzIGluIHRoZSBzcGFjZSAqLworCXU2NCBieXRlc191c2VkOwkJLyogdG90YWwgYnl0ZXMgdXNlZCBvbiBkaXNrICovCisJdTY0IGJ5dGVzX3Bpbm5lZDsJLyogdG90YWwgYnl0ZXMgcGlubmVkLCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlCisJCQkJICAgdHJhbnNhY3Rpb24gZmluaXNoZXMgKi8KKwl1NjQgYnl0ZXNfcmVzZXJ2ZWQ7CS8qIHRvdGFsIGJ5dGVzIHRoZSBhbGxvY2F0b3IgaGFzIHJlc2VydmVkIGZvcgorCQkJCSAgIGN1cnJlbnQgYWxsb2NhdGlvbnMgKi8KKwl1NjQgYnl0ZXNfcmVhZG9ubHk7CS8qIHRvdGFsIGJ5dGVzIHRoYXQgYXJlIHJlYWQgb25seSAqLworCisJLyogZGVsYWxsb2MgYWNjb3VudGluZyAqLworCXU2NCBieXRlc19kZWxhbGxvYzsJLyogbnVtYmVyIG9mIGJ5dGVzIHJlc2VydmVkIGZvciBhbGxvY2F0aW9uLAorCQkJCSAgIHRoaXMgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHJlc2VydmVkIHlldAorCQkJCSAgIGJ5IHRoZSBhbGxvY2F0b3IgKi8KKwl1NjQgYnl0ZXNfbWF5X3VzZTsJLyogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5IGJlIHVzZWQgZm9yCisJCQkJICAgZGVsYWxsb2MgKi8KKworCWludCBmdWxsOwkJLyogaW5kaWNhdGVzIHRoYXQgd2UgY2Fubm90IGFsbG9jYXRlIGFueSBtb3JlCisJCQkJICAgY2h1bmtzIGZvciB0aGlzIHNwYWNlICovCisJaW50IGZvcmNlX2FsbG9jOwkvKiBzZXQgaWYgd2UgbmVlZCB0byBmb3JjZSBhIGNodW5rIGFsbG9jIGZvcgorCQkJCSAgIHRoaXMgc3BhY2UgKi8KKwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCS8qIGZvciBibG9jayBncm91cHMgaW4gb3VyIHNhbWUgdHlwZSAqLwpAQCAtNzc0LDcgKzc4NCwxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZGlydHlfY293b25seV9yb290czsKIAogCXN0cnVjdCBidHJmc19mc19kZXZpY2VzICpmc19kZXZpY2VzOworCisJLyoKKwkgKiB0aGUgc3BhY2VfaW5mbyBsaXN0IGlzIGFsbW9zdCBlbnRpcmVseSByZWFkIG9ubHkuICBJdCBvbmx5IGNoYW5nZXMKKwkgKiB3aGVuIHdlIGFkZCBhIG5ldyByYWlkIHR5cGUgdG8gdGhlIEZTLCBhbmQgdGhhdCBoYXBwZW5zCisJICogdmVyeSByYXJlbHkuICBSQ1UgaXMgdXNlZCB0byBwcm90ZWN0IGl0LgorCSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc3BhY2VfaW5mbzsKKwogCXNwaW5sb2NrX3QgZGVsYWxsb2NfbG9jazsKIAlzcGlubG9ja190IG5ld190cmFuc19sb2NrOwogCXU2NCBkZWxhbGxvY19ieXRlczsKQEAgLTE3MTUsNyArMTczMiw4IEBACiAJCQkJCSAgICAgdTY0IGVtcHR5X3NpemUpOwogc3RydWN0IGV4dGVudF9idWZmZXIgKmJ0cmZzX2luaXRfbmV3X2J1ZmZlcihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkgICAgdTY0IGJ5dGVuciwgdTMyIGJsb2Nrc2l6ZSk7CisJCQkJCSAgICB1NjQgYnl0ZW5yLCB1MzIgYmxvY2tzaXplLAorCQkJCQkgICAgaW50IGxldmVsKTsKIGludCBidHJmc19hbGxvY19leHRlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJICAgICAgIHU2NCBudW1fYnl0ZXMsIHU2NCBwYXJlbnQsIHU2NCBtaW5fYnl0ZXMsCkBAIC0xNzg1LDYgKzE4MDMsMTggQEAKIGludCBidHJmc19jbGVhbnVwX3JlbG9jX3RyZWVzKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19yZWxvY19jbG9uZV9jc3VtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZmlsZV9wb3MsIHU2NCBsZW4pOwogdTY0IGJ0cmZzX3JlZHVjZV9hbGxvY19wcm9maWxlKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgZmxhZ3MpOwordm9pZCBidHJmc19zZXRfaW5vZGVfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppb25kZSk7Cit2b2lkIGJ0cmZzX2NsZWFyX3NwYWNlX2luZm9fZnVsbChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CisKK2ludCBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKK2ludCBidHJmc19jaGVja19kYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJdTY0IGJ5dGVzKTsKK3ZvaWQgYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYnl0ZXMpOwordm9pZCBidHJmc19kZWxhbGxvY19yZXNlcnZlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSB1NjQgYnl0ZXMpOwordm9pZCBidHJmc19kZWxhbGxvY19mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgdTY0IGJ5dGVzKTsKIC8qIGN0cmVlLmMgKi8KIGludCBidHJmc19wcmV2aW91c19pdGVtKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIHU2NCBtaW5fb2JqZWN0aWQsCkBAIC0xODM0LDkgKzE4NjQsNyBAQAogdm9pZCBidHJmc19yZWxlYXNlX3BhdGgoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwKTsKIHN0cnVjdCBidHJmc19wYXRoICpidHJmc19hbGxvY19wYXRoKHZvaWQpOwogdm9pZCBidHJmc19mcmVlX3BhdGgoc3RydWN0IGJ0cmZzX3BhdGggKnApOwotdm9pZCBidHJmc19pbml0X3BhdGgoc3RydWN0IGJ0cmZzX3BhdGggKnApOwogdm9pZCBidHJmc19zZXRfcGF0aF9ibG9ja2luZyhzdHJ1Y3QgYnRyZnNfcGF0aCAqcCk7Ci12b2lkIGJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcoc3RydWN0IGJ0cmZzX3BhdGggKnApOwogdm9pZCBidHJmc191bmxvY2tfdXBfc2FmZShzdHJ1Y3QgYnRyZnNfcGF0aCAqcCwgaW50IGxldmVsKTsKIAogaW50IGJ0cmZzX2RlbF9pdGVtcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCkBAIC0yMDMyLDggKzIwNjAsNiBAQAogdW5zaWduZWQgbG9uZyBidHJmc19mb3JjZV9yYShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCSAgICAgIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICBwZ29mZl90IG9mZnNldCwgcGdvZmZfdCBsYXN0X2luZGV4KTsKLWludCBidHJmc19jaGVja19mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgbnVtX3JlcXVpcmVkLAotCQkJICAgaW50IGZvcl9kZWwpOwogaW50IGJ0cmZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IGJ0cmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB2b2lkIGJ0cmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCA1YWViZGRkLi42ZWM4MGMwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC03NSw2ICs3NSw0MCBAQAogCXN0cnVjdCBidHJmc193b3JrIHdvcms7CiB9OwogCisvKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgdGhlIGxvY2tkZXAgY2xhc3Mgb24gdGhlIGV4dGVudCBidWZmZXIgbG9ja3MuCisgKiBUaGUgY2xhc3MgaXMgc2V0IGJ5IHRoZSByZWFkcGFnZV9lbmRfaW9faG9vayBhZnRlciB0aGUgYnVmZmVyIGhhcworICogcGFzc2VkIGNzdW0gdmFsaWRhdGlvbiBidXQgYmVmb3JlIHRoZSBwYWdlcyBhcmUgdW5sb2NrZWQuCisgKgorICogVGhlIGxvY2tkZXAgY2xhc3MgaXMgYWxzbyBzZXQgYnkgYnRyZnNfaW5pdF9uZXdfYnVmZmVyIG9uIGZyZXNobHkKKyAqIGFsbG9jYXRlZCBibG9ja3MuCisgKgorICogVGhlIGNsYXNzIGlzIGJhc2VkIG9uIHRoZSBsZXZlbCBpbiB0aGUgdHJlZSBibG9jaywgd2hpY2ggYWxsb3dzIGxvY2tkZXAKKyAqIHRvIGtub3cgdGhhdCBsb3dlciBub2RlcyBuZXN0IGluc2lkZSB0aGUgbG9ja3Mgb2YgaGlnaGVyIG5vZGVzLgorICoKKyAqIFdlIGFsc28gYWRkIGEgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBoaWdoZXN0IGxldmVsIG9mIHRoZSB0cmVlIGlzCisgKiB0aGUgc2FtZSBhcyBvdXIgbG9ja2RlcCBzZXR1cCBoZXJlLiAgSWYgQlRSRlNfTUFYX0xFVkVMIGNoYW5nZXMsIHRoaXMKKyAqIGNvZGUgbmVlZHMgdXBkYXRlIGFzIHdlbGwuCisgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBpZiBCVFJGU19NQVhfTEVWRUwgIT0gOAorIyAgZXJyb3IKKyMgZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnRyZnNfZWJfY2xhc3NbQlRSRlNfTUFYX0xFVkVMICsgMV07CitzdGF0aWMgY29uc3QgY2hhciAqYnRyZnNfZWJfbmFtZVtCVFJGU19NQVhfTEVWRUwgKyAxXSA9IHsKKwkvKiBsZWFmICovCisJImJ0cmZzLWV4dGVudC0wMCIsCisJImJ0cmZzLWV4dGVudC0wMSIsCisJImJ0cmZzLWV4dGVudC0wMiIsCisJImJ0cmZzLWV4dGVudC0wMyIsCisJImJ0cmZzLWV4dGVudC0wNCIsCisJImJ0cmZzLWV4dGVudC0wNSIsCisJImJ0cmZzLWV4dGVudC0wNiIsCisJImJ0cmZzLWV4dGVudC0wNyIsCisJLyogaGlnaGVzdCBwb3NzaWJsZSBsZXZlbCAqLworCSJidHJmcy1leHRlbnQtMDgiLAorfTsKKyNlbmRpZgorCiAvKgogICogZXh0ZW50cyBvbiB0aGUgYnRyZWUgaW5vZGUgYXJlIHByZXR0eSBzaW1wbGUsIHRoZXJlJ3Mgb25lIGV4dGVudAogICogdGhhdCBjb3ZlcnMgdGhlIGVudGlyZSBkZXZpY2UKQEAgLTM0Nyw2ICszODEsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK3ZvaWQgYnRyZnNfc2V0X2J1ZmZlcl9sb2NrZGVwX2NsYXNzKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgaW50IGxldmVsKQoreworCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZlYi0+bG9jaywKKwkJCSAgICZidHJmc19lYl9jbGFzc1tsZXZlbF0sCisJCQkgICBidHJmc19lYl9uYW1lW2xldmVsXSk7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBidHJlZV9yZWFkcGFnZV9lbmRfaW9faG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlKQogewpAQCAtMzkyLDYgKzQzNSw4IEBACiAJfQogCWZvdW5kX2xldmVsID0gYnRyZnNfaGVhZGVyX2xldmVsKGViKTsKIAorCWJ0cmZzX3NldF9idWZmZXJfbG9ja2RlcF9jbGFzcyhlYiwgZm91bmRfbGV2ZWwpOworCiAJcmV0ID0gY3N1bV90cmVlX2Jsb2NrKHJvb3QsIGViLCAxKTsKIAlpZiAocmV0KQogCQlyZXQgPSAtRUlPOwpAQCAtODEyLDcgKzg1Nyw3IEBACiAJc3RydWN0IGlub2RlICpidHJlZV9pbm9kZSA9IHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlOwogCWlmIChidHJmc19oZWFkZXJfZ2VuZXJhdGlvbihidWYpID09CiAJICAgIHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnRyYW5zaWQpIHsKLQkJV0FSTl9PTighYnRyZnNfdHJlZV9sb2NrZWQoYnVmKSk7CisJCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChidWYpOwogCiAJCS8qIHVnaCwgY2xlYXJfZXh0ZW50X2J1ZmZlcl9kaXJ0eSBjYW4gYmUgZXhwZW5zaXZlICovCiAJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKGJ1Zik7CkBAIC0xNzc3LDcgKzE4MjIsNiBAQAogCXJldCA9IGZpbmRfYW5kX3NldHVwX3Jvb3QodHJlZV9yb290LCBmc19pbmZvLAogCQkJCSAgQlRSRlNfREVWX1RSRUVfT0JKRUNUSUQsIGRldl9yb290KTsKIAlkZXZfcm9vdC0+dHJhY2tfZGlydHkgPSAxOwotCiAJaWYgKHJldCkKIAkJZ290byBmYWlsX2V4dGVudF9yb290OwogCkBAIC0yMzE3LDcgKzIzNjEsNyBAQAogCiAJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoYnVmKTsKIAotCVdBUk5fT04oIWJ0cmZzX3RyZWVfbG9ja2VkKGJ1ZikpOworCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChidWYpOwogCWlmICh0cmFuc2lkICE9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24pIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiYnRyZnMgdHJhbnNpZCBtaXNtYXRjaCBidWZmZXIgJWxsdSwgIgogCQkgICAgICAgImZvdW5kICVsbHUgcnVubmluZyAlbGx1XG4iLApAQCAtMjM0MSw3ICsyMzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRocmVzaCA9IDMyICogMTAyNCAqIDEwMjQ7CiAJdHJlZSA9ICZCVFJGU19JKHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlKS0+aW9fdHJlZTsKIAotCWlmIChjdXJyZW50X2lzX3BkZmx1c2goKSB8fCBjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQorCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQogCQlyZXR1cm47CiAKIAludW1fZGlydHkgPSBjb3VudF9yYW5nZV9iaXRzKHRyZWUsICZzdGFydCwgKHU2NCktMSwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uaCBiL2ZzL2J0cmZzL2Rpc2staW8uaAppbmRleCA0OTRhNTZlLi45NTAyOWRiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmgKKysrIGIvZnMvYnRyZnMvZGlzay1pby5oCkBAIC0xMDEsNCArMTAxLDE0IEBACiBpbnQgYnRyZnNfYWRkX2xvZ190cmVlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmVlX2xvY2tfcGFnZV9ob29rKHN0cnVjdCBwYWdlICpwYWdlKTsKKworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK3ZvaWQgYnRyZnNfc2V0X2J1ZmZlcl9sb2NrZGVwX2NsYXNzKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgaW50IGxldmVsKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYnRyZnNfc2V0X2J1ZmZlcl9sb2NrZGVwX2NsYXNzKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwKKwkJCQkJCSBpbnQgbGV2ZWwpCit7Cit9CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggNzUyNzUyMy4uZmVmZTgzYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSAiY29tcGF0LmgiCiAjaW5jbHVkZSAiaGFzaC5oIgogI2luY2x1ZGUgImNyYzMyYy5oIgpAQCAtNjAsNiArNjEsMTAgQEAKIAkJCSAgICAgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIGludCBhbGxvYywKIAkJCSAgICAgIGludCBtYXJrX2ZyZWUpOwogCitzdGF0aWMgaW50IGRvX2NodW5rX2FsbG9jKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsIHU2NCBhbGxvY19ieXRlcywKKwkJCSAgdTY0IGZsYWdzLCBpbnQgZm9yY2UpOworCiBzdGF0aWMgaW50IGJsb2NrX2dyb3VwX2JpdHMoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZSwgdTY0IGJpdHMpCiB7CiAJcmV0dXJuIChjYWNoZS0+ZmxhZ3MgJiBiaXRzKSA9PSBiaXRzOwpAQCAtMzI2LDEzICszMzEsMzMgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmluZm8tPnNwYWNlX2luZm87CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmZvdW5kOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZm91bmQsIGhlYWQsIGxpc3QpIHsKLQkJaWYgKGZvdW5kLT5mbGFncyA9PSBmbGFncykKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmb3VuZCwgaGVhZCwgbGlzdCkgeworCQlpZiAoZm91bmQtPmZsYWdzID09IGZsYWdzKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBmb3VuZDsKKwkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIGFmdGVyIGFkZGluZyBzcGFjZSB0byB0aGUgZmlsZXN5c3RlbSwgd2UgbmVlZCB0byBjbGVhciB0aGUgZnVsbCBmbGFncworICogb24gYWxsIHRoZSBzcGFjZSBpbmZvcy4KKyAqLwordm9pZCBidHJmc19jbGVhcl9zcGFjZV9pbmZvX2Z1bGwoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZpbmZvLT5zcGFjZV9pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpmb3VuZDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmb3VuZCwgaGVhZCwgbGlzdCkKKwkJZm91bmQtPmZ1bGwgPSAwOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCiBzdGF0aWMgdTY0IGRpdl9mYWN0b3IodTY0IG51bSwgaW50IGZhY3RvcikKIHsKIAlpZiAoZmFjdG9yID09IDEwKQpAQCAtMTMyMyw4ICsxMzQ4LDI1IEBACiBpbnQgYnRyZnNfZXh0ZW50X3Bvc3Rfb3Aoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7Ci0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMSk7Ci0JZGVsX3BlbmRpbmdfZXh0ZW50cyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsIDEpOworCXU2NCBzdGFydDsKKwl1NjQgZW5kOworCWludCByZXQ7CisKKwl3aGlsZSgxKSB7CisJCWZpbmlzaF9jdXJyZW50X2luc2VydCh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsIDEpOworCQlkZWxfcGVuZGluZ19leHRlbnRzKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMSk7CisKKwkJLyogaXMgdGhlcmUgbW9yZSB3b3JrIHRvIGRvPyAqLworCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoJnJvb3QtPmZzX2luZm8tPnBlbmRpbmdfZGVsLAorCQkJCQkgICAgMCwgJnN0YXJ0LCAmZW5kLCBFWFRFTlRfV1JJVEVCQUNLKTsKKwkJaWYgKCFyZXQpCisJCQljb250aW51ZTsKKwkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zLAorCQkJCQkgICAgMCwgJnN0YXJ0LCAmZW5kLCBFWFRFTlRfV1JJVEVCQUNLKTsKKwkJaWYgKCFyZXQpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xODgyLDcgKzE5MjQsNiBAQAogCWlmICghZm91bmQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGlzdF9hZGQoJmZvdW5kLT5saXN0LCAmaW5mby0+c3BhY2VfaW5mbyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZvdW5kLT5ibG9ja19ncm91cHMpOwogCWluaXRfcndzZW0oJmZvdW5kLT5ncm91cHNfc2VtKTsKIAlzcGluX2xvY2tfaW5pdCgmZm91bmQtPmxvY2spOwpAQCAtMTg5Miw5ICsxOTMzLDExIEBACiAJZm91bmQtPmJ5dGVzX3Bpbm5lZCA9IDA7CiAJZm91bmQtPmJ5dGVzX3Jlc2VydmVkID0gMDsKIAlmb3VuZC0+Ynl0ZXNfcmVhZG9ubHkgPSAwOworCWZvdW5kLT5ieXRlc19kZWxhbGxvYyA9IDA7CiAJZm91bmQtPmZ1bGwgPSAwOwogCWZvdW5kLT5mb3JjZV9hbGxvYyA9IDA7CiAJKnNwYWNlX2luZm8gPSBmb3VuZDsKKwlsaXN0X2FkZF9yY3UoJmZvdW5kLT5saXN0LCAmaW5mby0+c3BhY2VfaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NTUsNiArMTk5OCwyMzMgQEAKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKK3N0YXRpYyB1NjQgYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBkYXRhKQoreworCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKKwl1NjQgYWxsb2NfcHJvZmlsZTsKKworCWlmIChkYXRhKSB7CisJCWFsbG9jX3Byb2ZpbGUgPSBpbmZvLT5hdmFpbF9kYXRhX2FsbG9jX2JpdHMgJgorCQkJaW5mby0+ZGF0YV9hbGxvY19wcm9maWxlOworCQlkYXRhID0gQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSB8IGFsbG9jX3Byb2ZpbGU7CisJfSBlbHNlIGlmIChyb290ID09IHJvb3QtPmZzX2luZm8tPmNodW5rX3Jvb3QpIHsKKwkJYWxsb2NfcHJvZmlsZSA9IGluZm8tPmF2YWlsX3N5c3RlbV9hbGxvY19iaXRzICYKKwkJCWluZm8tPnN5c3RlbV9hbGxvY19wcm9maWxlOworCQlkYXRhID0gQlRSRlNfQkxPQ0tfR1JPVVBfU1lTVEVNIHwgYWxsb2NfcHJvZmlsZTsKKwl9IGVsc2UgeworCQlhbGxvY19wcm9maWxlID0gaW5mby0+YXZhaWxfbWV0YWRhdGFfYWxsb2NfYml0cyAmCisJCQlpbmZvLT5tZXRhZGF0YV9hbGxvY19wcm9maWxlOworCQlkYXRhID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEgfCBhbGxvY19wcm9maWxlOworCX0KKworCXJldHVybiBidHJmc19yZWR1Y2VfYWxsb2NfcHJvZmlsZShyb290LCBkYXRhKTsKK30KKwordm9pZCBidHJmc19zZXRfaW5vZGVfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl1NjQgYWxsb2NfdGFyZ2V0OworCisJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMSk7CisJQlRSRlNfSShpbm9kZSktPnNwYWNlX2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhyb290LT5mc19pbmZvLAorCQkJCQkJICAgICAgIGFsbG9jX3RhcmdldCk7Cit9CisKKy8qCisgKiBmb3Igbm93IHRoaXMganVzdCBtYWtlcyBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgNSUgb2Ygb3VyIG1ldGFkYXRhIHNwYWNlIGZyZWUKKyAqIGZvciB1c2UuCisgKi8KK2ludCBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290KQoreworCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbzsKKwl1NjQgYWxsb2NfdGFyZ2V0LCB0aHJlc2g7CisJaW50IGNvbW1pdHRlZCA9IDAsIHJldDsKKworCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLworCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOworCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOworCithZ2FpbjoKKwlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCWlmICghbWV0YV9zaW5mby0+ZnVsbCkKKwkJdGhyZXNoID0gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMgKiA4MDsKKwllbHNlCisJCXRocmVzaCA9IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzICogOTU7CisKKwlkb19kaXYodGhyZXNoLCAxMDApOworCisJaWYgKG1ldGFfc2luZm8tPmJ5dGVzX3VzZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCArCisJICAgIG1ldGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCArIG1ldGFfc2luZm8tPmJ5dGVzX3JlYWRvbmx5ID4gdGhyZXNoKSB7CisJCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOworCQlpZiAoIW1ldGFfc2luZm8tPmZ1bGwpIHsKKwkJCW1ldGFfc2luZm8tPmZvcmNlX2FsbG9jID0gMTsKKwkJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCWlmICghdHJhbnMpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGFsbG9jX3RhcmdldCwgMCk7CisJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwkJaWYgKCFjb21taXR0ZWQpIHsKKwkJCWNvbW1pdHRlZCA9IDE7CisJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQlpZiAoIXRyYW5zKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyB3aWxsIGNoZWNrIHRoZSBzcGFjZSB0aGF0IHRoZSBpbm9kZSBhbGxvY2F0ZXMgZnJvbSB0byBtYWtlIHN1cmUgd2UgaGF2ZQorICogZW5vdWdoIHNwYWNlIGZvciBieXRlcy4KKyAqLworaW50IGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQl1NjQgYnl0ZXMpCit7CisJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmRhdGFfc2luZm87CisJaW50IHJldCA9IDAsIGNvbW1pdHRlZCA9IDA7CisKKwkvKiBtYWtlIHN1cmUgYnl0ZXMgYXJlIHNlY3RvcnNpemUgYWxpZ25lZCAqLworCWJ5dGVzID0gKGJ5dGVzICsgcm9vdC0+c2VjdG9yc2l6ZSAtIDEpICYgfigodTY0KXJvb3QtPnNlY3RvcnNpemUgLSAxKTsKKworCWRhdGFfc2luZm8gPSBCVFJGU19JKGlub2RlKS0+c3BhY2VfaW5mbzsKK2FnYWluOgorCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSB0byBoYW5kbGUgdGhlIGRhdGEgZmlyc3QgKi8KKwlzcGluX2xvY2soJmRhdGFfc2luZm8tPmxvY2spOworCWlmIChkYXRhX3NpbmZvLT50b3RhbF9ieXRlcyAtIGRhdGFfc2luZm8tPmJ5dGVzX3VzZWQgLQorCSAgICBkYXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyAtIGRhdGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkIC0KKwkgICAgZGF0YV9zaW5mby0+Ynl0ZXNfcGlubmVkIC0gZGF0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgLQorCSAgICBkYXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlIDwgYnl0ZXMpIHsKKwkJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CisKKwkJLyoKKwkJICogaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZnJlZSBieXRlcyBpbiB0aGlzIHNwYWNlIHRoZW4gd2UgbmVlZAorCQkgKiB0byBhbGxvYyBhIG5ldyBjaHVuay4KKwkJICovCisJCWlmICghZGF0YV9zaW5mby0+ZnVsbCkgeworCQkJdTY0IGFsbG9jX3RhcmdldDsKKworCQkJZGF0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCQkJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOworCisJCQlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQlpZiAoIXRyYW5zKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCisJCQkJCSAgICAgYnl0ZXMgKyAyICogMTAyNCAqIDEwMjQsCisJCQkJCSAgICAgYWxsb2NfdGFyZ2V0LCAwKTsKKwkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGFnYWluOworCQl9CisJCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKKworCQkvKiBjb21taXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIHRyeSBhZ2FpbiAqLworCQlpZiAoIWNvbW1pdHRlZCkgeworCQkJY29tbWl0dGVkID0gMTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCWlmICghdHJhbnMpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZ290byBhZ2FpbjsKKwkJfQorCisJCXByaW50ayhLRVJOX0VSUiAibm8gc3BhY2UgbGVmdCwgbmVlZCAlbGx1LCAlbGx1IGRlbGFsbG9jIGJ5dGVzIgorCQkgICAgICAgIiwgJWxsdSBieXRlc191c2VkLCAlbGx1IGJ5dGVzX3Jlc2VydmVkLCAiCisJCSAgICAgICAiJWxsdSBieXRlc19waW5uZWQsICVsbHUgYnl0ZXNfcmVhZG9ubHksICVsbHUgbWF5IHVzZSIKKwkJICAgICAgICIlbGx1IHRvdGFsXG4iLCBieXRlcywgZGF0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MsCisJCSAgICAgICBkYXRhX3NpbmZvLT5ieXRlc191c2VkLCBkYXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCwKKwkJICAgICAgIGRhdGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCwgZGF0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHksCisJCSAgICAgICBkYXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlLCBkYXRhX3NpbmZvLT50b3RhbF9ieXRlcyk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwlkYXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICs9IGJ5dGVzOworCUJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9ieXRlcyArPSBieXRlczsKKwlzcGluX3VubG9jaygmZGF0YV9zaW5mby0+bG9jayk7CisKKwlyZXR1cm4gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKK30KKworLyoKKyAqIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBmb3Igd2hhdGV2ZXIgcmVhc29uIGFmdGVyIGNhbGxpbmcKKyAqIGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZSwgY2FsbCB0aGlzIHNvIHdlIGNhbiBjbGVhbnVwIHRoZSBjb3VudGVycy4KKyAqLwordm9pZCBidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBieXRlcykKK3sKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqZGF0YV9zaW5mbzsKKworCS8qIG1ha2Ugc3VyZSBieXRlcyBhcmUgc2VjdG9yc2l6ZSBhbGlnbmVkICovCisJYnl0ZXMgPSAoYnl0ZXMgKyByb290LT5zZWN0b3JzaXplIC0gMSkgJiB+KCh1NjQpcm9vdC0+c2VjdG9yc2l6ZSAtIDEpOworCisJZGF0YV9zaW5mbyA9IEJUUkZTX0koaW5vZGUpLT5zcGFjZV9pbmZvOworCXNwaW5fbG9jaygmZGF0YV9zaW5mby0+bG9jayk7CisJZGF0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBieXRlczsKKwlCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfYnl0ZXMgLT0gYnl0ZXM7CisJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOworfQorCisvKiBjYWxsZWQgd2hlbiB3ZSBhcmUgYWRkaW5nIGEgZGVsYWxsb2MgZXh0ZW50IHRvIHRoZSBpbm9kZSdzIGlvX3RyZWUgKi8KK3ZvaWQgYnRyZnNfZGVsYWxsb2NfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgIHU2NCBieXRlcykKK3sKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqZGF0YV9zaW5mbzsKKworCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhpcyBpbm9kZSB3aWxsIGJlIHN0b3JpbmcgaXRzIGRhdGEgKi8KKwlkYXRhX3NpbmZvID0gQlRSRlNfSShpbm9kZSktPnNwYWNlX2luZm87CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gaGFuZGxlIHRoZSBkYXRhIGZpcnN0ICovCisJc3Bpbl9sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKKwlkYXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyArPSBieXRlczsKKworCS8qCisJICogd2UgYXJlIGFkZGluZyBhIGRlbGFsbG9jIGV4dGVudCB3aXRob3V0IGNhbGxpbmcKKwkgKiBidHJmc19jaGVja19kYXRhX2ZyZWVfc3BhY2UgZmlyc3QuICBUaGlzIGhhcHBlbnMgb24gYSB3ZWlyZAorCSAqIHdyaXRlcGFnZSBjb25kaXRpb24sIGJ1dCBzaG91bGRuJ3QgaHVydCBvdXIgYWNjb3VudGluZworCSAqLworCWlmICh1bmxpa2VseShieXRlcyA+IEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9ieXRlcykpIHsKKwkJZGF0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfYnl0ZXM7CisJCUJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9ieXRlcyA9IDA7CisJfSBlbHNlIHsKKwkJZGF0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBieXRlczsKKwkJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2J5dGVzIC09IGJ5dGVzOworCX0KKworCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKK30KKworLyogY2FsbGVkIHdoZW4gd2UgYXJlIGNsZWFyaW5nIGFuIGRlbGFsbG9jIGV4dGVudCBmcm9tIHRoZSBpbm9kZSdzIGlvX3RyZWUgKi8KK3ZvaWQgYnRyZnNfZGVsYWxsb2NfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgIHU2NCBieXRlcykKK3sKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbzsKKworCWluZm8gPSBCVFJGU19JKGlub2RlKS0+c3BhY2VfaW5mbzsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+Ynl0ZXNfZGVsYWxsb2MgLT0gYnl0ZXM7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworfQorCiBzdGF0aWMgaW50IGRvX2NodW5rX2FsbG9jKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsIHU2NCBhbGxvY19ieXRlcywKIAkJCSAgdTY0IGZsYWdzLCBpbnQgZm9yY2UpCkBAIC0yMjExLDEzICsyNDgxLDEyIEBACiAJdTY0IGVuZDsKIAl1NjQgcHJpdjsKIAl1NjQgc2VhcmNoID0gMDsKLQl1NjQgc2tpcHBlZCA9IDA7CiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKmV4dGVudF9vcCwgKnRtcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGluc2VydF9saXN0LCB1cGRhdGVfbGlzdDsKIAlpbnQgcmV0OwotCWludCBudW1faW5zZXJ0cyA9IDAsIG1heF9pbnNlcnRzOworCWludCBudW1faW5zZXJ0cyA9IDAsIG1heF9pbnNlcnRzLCByZXN0YXJ0ID0gMDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJSU5JVF9MSVNUX0hFQUQoJmluc2VydF9saXN0KTsKQEAgLTIyMzMsMTkgKzI1MDIsMTkgQEAKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZpbmZvLT5leHRlbnRfaW5zLCBzZWFyY2gsICZzdGFydCwKIAkJCQkJICAgICZlbmQsIEVYVEVOVF9XUklURUJBQ0spOwogCQlpZiAocmV0KSB7Ci0JCQlpZiAoc2tpcHBlZCAmJiBhbGwgJiYgIW51bV9pbnNlcnRzICYmCisJCQlpZiAocmVzdGFydCAmJiAhbnVtX2luc2VydHMgJiYKIAkJCSAgICBsaXN0X2VtcHR5KCZ1cGRhdGVfbGlzdCkpIHsKLQkJCQlza2lwcGVkID0gMDsKKwkJCQlyZXN0YXJ0ID0gMDsKIAkJCQlzZWFyY2ggPSAwOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJcmV0ID0gdHJ5X2xvY2tfZXh0ZW50KCZpbmZvLT5leHRlbnRfaW5zLCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7CiAJCWlmICghcmV0KSB7Ci0JCQlza2lwcGVkID0gMTsKKwkJCWlmIChhbGwpCisJCQkJcmVzdGFydCA9IDE7CiAJCQlzZWFyY2ggPSBlbmQgKyAxOwogCQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKQEAgLTIyNjQsNyArMjUzMyw3IEBACiAJCQlsaXN0X2FkZF90YWlsKCZleHRlbnRfb3AtPmxpc3QsICZpbnNlcnRfbGlzdCk7CiAJCQlzZWFyY2ggPSBlbmQgKyAxOwogCQkJaWYgKG51bV9pbnNlcnRzID09IG1heF9pbnNlcnRzKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKKwkJCQlyZXN0YXJ0ID0gMTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIGlmIChleHRlbnRfb3AtPnR5cGUgPT0gUEVORElOR19CQUNLUkVGX1VQREFURSkgewpAQCAtMjI4MCw3ICsyNTQ5LDYgQEAKIAkgKiBzb21lYm9keSBtYXJrZWQgdGhpcyB0aGluZyBmb3IgZGVsZXRpb24gdGhlbiBqdXN0IHVubG9jayBpdCBhbmQgYmUKIAkgKiBkb25lLCB0aGUgZnJlZV9leHRlbnRzIHdpbGwgaGFuZGxlIGl0CiAJICovCi0JbXV0ZXhfbG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4dGVudF9vcCwgdG1wLCAmdXBkYXRlX2xpc3QsIGxpc3QpIHsKIAkJY2xlYXJfZXh0ZW50X2JpdHMoJmluZm8tPmV4dGVudF9pbnMsIGV4dGVudF9vcC0+Ynl0ZW5yLAogCQkJCSAgZXh0ZW50X29wLT5ieXRlbnIgKyBleHRlbnRfb3AtPm51bV9ieXRlcyAtIDEsCkBAIC0yMzAyLDYgKzI1NzAsMTAgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJnVwZGF0ZV9saXN0KSkgewogCQlyZXQgPSB1cGRhdGVfYmFja3JlZnModHJhbnMsIGV4dGVudF9yb290LCBwYXRoLCAmdXBkYXRlX2xpc3QpOwogCQlCVUdfT04ocmV0KTsKKworCQkvKiB3ZSBtYXkgaGF2ZSBDT1cnZWQgbmV3IGJsb2Nrcywgc28gbGV0cyBzdGFydCBvdmVyICovCisJCWlmIChhbGwpCisJCQlyZXN0YXJ0ID0gMTsKIAl9CiAKIAkvKgpAQCAtMjMwOSw5ICsyNTgxLDkgQEAKIAkgKiBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdGhlbiByZXNldCBldmVyeXRoaW5nIGFuZAogCSAqIGdvIGJhY2sgdG8gdGhlIGJlZ2lubmluZwogCSAqLwotCWlmICghbnVtX2luc2VydHMgJiYgYWxsICYmIHNraXBwZWQpIHsKKwlpZiAoIW51bV9pbnNlcnRzICYmIHJlc3RhcnQpIHsKIAkJc2VhcmNoID0gMDsKLQkJc2tpcHBlZCA9IDA7CisJCXJlc3RhcnQgPSAwOwogCQlJTklUX0xJU1RfSEVBRCgmdXBkYXRlX2xpc3QpOwogCQlJTklUX0xJU1RfSEVBRCgmaW5zZXJ0X2xpc3QpOwogCQlnb3RvIGFnYWluOwpAQCAtMjM2OCwyNyArMjY0MCwxOSBAQAogCUJVR19PTihyZXQpOwogCiAJLyoKLQkgKiBpZiB3ZSBicm9rZSBvdXQgb2YgdGhlIGxvb3AgaW4gb3JkZXIgdG8gaW5zZXJ0IHN0dWZmIGJlY2F1c2Ugd2UgaGl0Ci0JICogdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc2VydHMgYXQgYSB0aW1lIHdlIGNhbiBoYW5kbGUsIHRoZW4gbG9vcAotCSAqIGJhY2sgYW5kIHBpY2sgdXAgd2hlcmUgd2UgbGVmdCBvZmYKKwkgKiBpZiByZXN0YXJ0IGlzIHNldCBmb3Igd2hhdGV2ZXIgcmVhc29uIHdlIG5lZWQgdG8gZ28gYmFjayBhbmQgc3RhcnQKKwkgKiBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgcGVuZGluZyBsaXN0IGFnYWluLgorCSAqCisJICogV2UganVzdCBpbnNlcnRlZCBzb21lIGV4dGVudHMsIHdoaWNoIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gbmV3CisJICogYmxvY2tzIGJlaW5nIGFsbG9jYXRlZCwgd2hpY2ggd291bGQgcmVzdWx0IGluIG5ldyBibG9ja3MgbmVlZGluZworCSAqIHVwZGF0ZXMsIHNvIGlmIGFsbCBpcyBzZXQgd2UgX211c3RfIHJlc3RhcnQgdG8gZ2V0IHRoZSB1cGRhdGVkCisJICogYmxvY2tzLgogCSAqLwotCWlmIChudW1faW5zZXJ0cyA9PSBtYXhfaW5zZXJ0cykgewotCQlJTklUX0xJU1RfSEVBRCgmaW5zZXJ0X2xpc3QpOwotCQlJTklUX0xJU1RfSEVBRCgmdXBkYXRlX2xpc3QpOwotCQludW1faW5zZXJ0cyA9IDA7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCi0JLyoKLQkgKiBhZ2FpbiwgaWYgd2UgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nCi0JICogZXh0ZW50IG9wZXJhdGlvbnMgbGVmdCBhbmQgd2Uga25vdyB0aGF0IHdlIHNraXBwZWQgc29tZSwgZ28gYmFjayB0bwotCSAqIHRoZSBiZWdpbm5pbmcgYW5kIGRvIGl0IGFsbCBhZ2FpbgotCSAqLwotCWlmIChhbGwgJiYgc2tpcHBlZCkgeworCWlmIChyZXN0YXJ0IHx8IGFsbCkgewogCQlJTklUX0xJU1RfSEVBRCgmaW5zZXJ0X2xpc3QpOwogCQlJTklUX0xJU1RfSEVBRCgmdXBkYXRlX2xpc3QpOwogCQlzZWFyY2ggPSAwOwotCQlza2lwcGVkID0gMDsKKwkJcmVzdGFydCA9IDA7CiAJCW51bV9pbnNlcnRzID0gMDsKIAkJZ290byBhZ2FpbjsKIAl9CkBAIC0yNzA5LDYgKzI5NzMsOCBAQAogCQlnb3RvIGFnYWluOwogCX0KIAorCWlmICghZXJyKQorCQlmaW5pc2hfY3VycmVudF9pbnNlcnQodHJhbnMsIGV4dGVudF9yb290LCAwKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODU5LDcgKzMxMjUsOCBAQAogCiAJaWYgKGRhdGEgJiBCVFJGU19CTE9DS19HUk9VUF9NRVRBREFUQSkgewogCQlsYXN0X3B0ciA9ICZyb290LT5mc19pbmZvLT5sYXN0X2FsbG9jOwotCQllbXB0eV9jbHVzdGVyID0gNjQgKiAxMDI0OworCQlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRCkpCisJCQllbXB0eV9jbHVzdGVyID0gNjQgKiAxMDI0OwogCX0KIAogCWlmICgoZGF0YSAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpICYmIGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRCkpCkBAIC0zMDkxLDYgKzMzNTgsMTAgQEAKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoaW5mby0+dG90YWxfYnl0ZXMgLSBpbmZvLT5ieXRlc191c2VkIC0KIAkJCQkgICAgaW5mby0+Ynl0ZXNfcGlubmVkIC0gaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpLAogCSAgICAgICAoaW5mby0+ZnVsbCkgPyAiIiA6ICJub3QgIik7CisJcHJpbnRrKEtFUk5fSU5GTyAic3BhY2VfaW5mbyB0b3RhbD0lbGx1LCBwaW5uZWQ9JWxsdSwgZGVsYWxsb2M9JWxsdSwiCisJICAgICAgICIgbWF5X3VzZT0lbGx1LCB1c2VkPSVsbHVcbiIsIGluZm8tPnRvdGFsX2J5dGVzLAorCSAgICAgICBpbmZvLT5ieXRlc19waW5uZWQsIGluZm8tPmJ5dGVzX2RlbGFsbG9jLCBpbmZvLT5ieXRlc19tYXlfdXNlLAorCSAgICAgICBpbmZvLT5ieXRlc191c2VkKTsKIAogCWRvd25fcmVhZCgmaW5mby0+Z3JvdXBzX3NlbSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZSwgJmluZm8tPmJsb2NrX2dyb3VwcywgbGlzdCkgewpAQCAtMzExNywyNCArMzM4OCwxMCBAQAogewogCWludCByZXQ7CiAJdTY0IHNlYXJjaF9zdGFydCA9IDA7Ci0JdTY0IGFsbG9jX3Byb2ZpbGU7CiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOwogCi0JaWYgKGRhdGEpIHsKLQkJYWxsb2NfcHJvZmlsZSA9IGluZm8tPmF2YWlsX2RhdGFfYWxsb2NfYml0cyAmCi0JCQlpbmZvLT5kYXRhX2FsbG9jX3Byb2ZpbGU7Ci0JCWRhdGEgPSBCVFJGU19CTE9DS19HUk9VUF9EQVRBIHwgYWxsb2NfcHJvZmlsZTsKLQl9IGVsc2UgaWYgKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+Y2h1bmtfcm9vdCkgewotCQlhbGxvY19wcm9maWxlID0gaW5mby0+YXZhaWxfc3lzdGVtX2FsbG9jX2JpdHMgJgotCQkJaW5mby0+c3lzdGVtX2FsbG9jX3Byb2ZpbGU7Ci0JCWRhdGEgPSBCVFJGU19CTE9DS19HUk9VUF9TWVNURU0gfCBhbGxvY19wcm9maWxlOwotCX0gZWxzZSB7Ci0JCWFsbG9jX3Byb2ZpbGUgPSBpbmZvLT5hdmFpbF9tZXRhZGF0YV9hbGxvY19iaXRzICYKLQkJCWluZm8tPm1ldGFkYXRhX2FsbG9jX3Byb2ZpbGU7Ci0JCWRhdGEgPSBCVFJGU19CTE9DS19HUk9VUF9NRVRBREFUQSB8IGFsbG9jX3Byb2ZpbGU7Ci0JfQorCWRhdGEgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCBkYXRhKTsKIGFnYWluOgotCWRhdGEgPSBidHJmc19yZWR1Y2VfYWxsb2NfcHJvZmlsZShyb290LCBkYXRhKTsKIAkvKgogCSAqIHRoZSBvbmx5IHBsYWNlIHRoYXQgc2V0cyBlbXB0eV9zaXplIGlzIGJ0cmZzX3JlYWxsb2Nfbm9kZSwgd2hpY2gKIAkgKiBpcyBub3QgY2FsbGVkIHJlY3Vyc2l2ZWx5IG9uIGFsbG9jYXRpb25zCkBAIC0zNDAyLDcgKzM2NTksOCBAQAogCiBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnRyZnNfaW5pdF9uZXdfYnVmZmVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCSAgICB1NjQgYnl0ZW5yLCB1MzIgYmxvY2tzaXplKQorCQkJCQkgICAgdTY0IGJ5dGVuciwgdTMyIGJsb2Nrc2l6ZSwKKwkJCQkJICAgIGludCBsZXZlbCkKIHsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmOwogCkBAIC0zNDEwLDYgKzM2NjgsNyBAQAogCWlmICghYnVmKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlidHJmc19zZXRfaGVhZGVyX2dlbmVyYXRpb24oYnVmLCB0cmFucy0+dHJhbnNpZCk7CisJYnRyZnNfc2V0X2J1ZmZlcl9sb2NrZGVwX2NsYXNzKGJ1ZiwgbGV2ZWwpOwogCWJ0cmZzX3RyZWVfbG9jayhidWYpOwogCWNsZWFuX3RyZWVfYmxvY2sodHJhbnMsIHJvb3QsIGJ1Zik7CiAKQEAgLTM0NTMsNyArMzcxMiw4IEBACiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCi0JYnVmID0gYnRyZnNfaW5pdF9uZXdfYnVmZmVyKHRyYW5zLCByb290LCBpbnMub2JqZWN0aWQsIGJsb2Nrc2l6ZSk7CisJYnVmID0gYnRyZnNfaW5pdF9uZXdfYnVmZmVyKHRyYW5zLCByb290LCBpbnMub2JqZWN0aWQsCisJCQkJICAgIGJsb2Nrc2l6ZSwgbGV2ZWwpOwogCXJldHVybiBidWY7CiB9CiAKQEAgLTQxNzksMTMgKzQ0MzksMTMgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCUJVR19PTighcGF0aCk7CiAKLQlCVUdfT04oIWJ0cmZzX3RyZWVfbG9ja2VkKHBhcmVudCkpOworCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChwYXJlbnQpOwogCXBhcmVudF9sZXZlbCA9IGJ0cmZzX2hlYWRlcl9sZXZlbChwYXJlbnQpOwogCWV4dGVudF9idWZmZXJfZ2V0KHBhcmVudCk7CiAJcGF0aC0+bm9kZXNbcGFyZW50X2xldmVsXSA9IHBhcmVudDsKIAlwYXRoLT5zbG90c1twYXJlbnRfbGV2ZWxdID0gYnRyZnNfaGVhZGVyX25yaXRlbXMocGFyZW50KTsKIAotCUJVR19PTighYnRyZnNfdHJlZV9sb2NrZWQobm9kZSkpOworCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChub2RlKTsKIAlsZXZlbCA9IGJ0cmZzX2hlYWRlcl9sZXZlbChub2RlKTsKIAlleHRlbnRfYnVmZmVyX2dldChub2RlKTsKIAlwYXRoLT5ub2Rlc1tsZXZlbF0gPSBub2RlOwpAQCAtNTY0MSw3ICs1OTAxLDkgQEAKIAkJCXByZXZfYmxvY2sgPSBibG9ja19zdGFydDsKIAkJfQogCisJCW11dGV4X2xvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKGZvdW5kX3Jvb3QpOworCQltdXRleF91bmxvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWlmIChyZWZfcGF0aC0+b3duZXJfb2JqZWN0aWQgPj0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkgewogCQkJLyoKIAkJCSAqIHRyeSB0byB1cGRhdGUgZGF0YSBleHRlbnQgcmVmZXJlbmNlcyB3aGlsZQpAQCAtNjA3OSw2ICs2MzQxLDcgQEAKIGludCBidHJmc19mcmVlX2Jsb2NrX2dyb3VwcyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvOwogCXN0cnVjdCByYl9ub2RlICpuOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5ibG9ja19ncm91cF9jYWNoZV9sb2NrKTsKQEAgLTYxMDAsNiArNjM2MywyMyBAQAogCQlzcGluX2xvY2soJmluZm8tPmJsb2NrX2dyb3VwX2NhY2hlX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmaW5mby0+YmxvY2tfZ3JvdXBfY2FjaGVfbG9jayk7CisKKwkvKiBub3cgdGhhdCBhbGwgdGhlIGJsb2NrIGdyb3VwcyBhcmUgZnJlZWQsIGdvIHRocm91Z2ggYW5kCisJICogZnJlZSBhbGwgdGhlIHNwYWNlX2luZm8gc3RydWN0cy4gIFRoaXMgaXMgb25seSBjYWxsZWQgZHVyaW5nCisJICogdGhlIGZpbmFsIHN0YWdlcyBvZiB1bm1vdW50LCBhbmQgc28gd2Uga25vdyBub2JvZHkgaXMKKwkgKiB1c2luZyB0aGVtLiAgV2UgY2FsbCBzeW5jaHJvbml6ZV9yY3UoKSBvbmNlIGJlZm9yZSB3ZSBzdGFydCwKKwkgKiBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuCisJICovCisJc3luY2hyb25pemVfcmN1KCk7CisKKwl3aGlsZSghbGlzdF9lbXB0eSgmaW5mby0+c3BhY2VfaW5mbykpIHsKKwkJc3BhY2VfaW5mbyA9IGxpc3RfZW50cnkoaW5mby0+c3BhY2VfaW5mby5uZXh0LAorCQkJCQlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbywKKwkJCQkJbGlzdCk7CisKKwkJbGlzdF9kZWwoJnNwYWNlX2luZm8tPmxpc3QpOworCQlrZnJlZShzcGFjZV9pbmZvKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMzdkNDNiNS4uZWJlNmIyOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTQxNSw4ICs0MTUsNiBAQAogCiAJbm9kZSA9IHRyZWVfaW5zZXJ0KCZ0cmVlLT5zdGF0ZSwgcHJlYWxsb2MtPmVuZCwgJnByZWFsbG9jLT5yYl9ub2RlKTsKIAlpZiAobm9kZSkgewotCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpmb3VuZDsKLQkJZm91bmQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlLCByYl9ub2RlKTsKIAkJZnJlZV9leHRlbnRfc3RhdGUocHJlYWxsb2MpOwogCQlyZXR1cm4gLUVFWElTVDsKIAl9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLmMgYi9mcy9idHJmcy9maWxlLmMKaW5kZXggM2U4MDIzZS4uZGM3ODk1NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUuYwpAQCAtMTA5MSwxOSArMTA5MSwyNCBAQAogCQlXQVJOX09OKG51bV9wYWdlcyA+IG5ycHRycyk7CiAJCW1lbXNldChwYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJwdHJzKTsKIAotCQlyZXQgPSBidHJmc19jaGVja19mcmVlX3NwYWNlKHJvb3QsIHdyaXRlX2J5dGVzLCAwKTsKKwkJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCB3cml0ZV9ieXRlcyk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAogCQlyZXQgPSBwcmVwYXJlX3BhZ2VzKHJvb3QsIGZpbGUsIHBhZ2VzLCBudW1fcGFnZXMsCiAJCQkJICAgIHBvcywgZmlyc3RfaW5kZXgsIGxhc3RfaW5kZXgsCiAJCQkJICAgIHdyaXRlX2J5dGVzKTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCkgeworCQkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLAorCQkJCQkJICAgICAgIHdyaXRlX2J5dGVzKTsKIAkJCWdvdG8gb3V0OworCQl9CiAKIAkJcmV0ID0gYnRyZnNfY29weV9mcm9tX3VzZXIocG9zLCBudW1fcGFnZXMsCiAJCQkJCSAgIHdyaXRlX2J5dGVzLCBwYWdlcywgYnVmKTsKIAkJaWYgKHJldCkgeworCQkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLAorCQkJCQkJICAgICAgIHdyaXRlX2J5dGVzKTsKIAkJCWJ0cmZzX2Ryb3BfcGFnZXMocGFnZXMsIG51bV9wYWdlcyk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTExMSw4ICsxMTE2LDExIEBACiAJCXJldCA9IGRpcnR5X2FuZF9yZWxlYXNlX3BhZ2VzKE5VTEwsIHJvb3QsIGZpbGUsIHBhZ2VzLAogCQkJCQkgICAgICBudW1fcGFnZXMsIHBvcywgd3JpdGVfYnl0ZXMpOwogCQlidHJmc19kcm9wX3BhZ2VzKHBhZ2VzLCBudW1fcGFnZXMpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uocm9vdCwgaW5vZGUsCisJCQkJCQkgICAgICAgd3JpdGVfYnl0ZXMpOwogCQkJZ290byBvdXQ7CisJCX0KIAogCQlpZiAod2lsbF93cml0ZSkgewogCQkJYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBwb3MsCkBAIC0xMTM2LDYgKzExNDQsOCBAQAogCX0KIG91dDoKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAocmV0KQorCQllcnIgPSByZXQ7CiAKIG91dF9ub2xvY2s6CiAJa2ZyZWUocGFnZXMpOwpAQCAtMTIyMiw3ICsxMjMyLDcgQEAKIAkvKgogCSAqIG9rIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHRoZSB0cmFuc2FjdGlvbiB5ZXQsIGxldHMgZG8gYSBjb21taXQKIAkgKi8KLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKQorCWlmIChmaWxlICYmIGZpbGUtPnByaXZhdGVfZGF0YSkKIAkJYnRyZnNfaW9jdGxfdHJhbnNfZW5kKGZpbGUpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKQEAgLTEyMzEsNyArMTI0MSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGJ0cmZzX2xvZ19kZW50cnlfc2FmZSh0cmFucywgcm9vdCwgZmlsZS0+Zl9kZW50cnkpOworCXJldCA9IGJ0cmZzX2xvZ19kZW50cnlfc2FmZSh0cmFucywgcm9vdCwgZGVudHJ5KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTEyNDUsNyArMTI1NSw3IEBACiAJICogZmlsZSBhZ2FpbiwgYnV0IHRoYXQgd2lsbCBlbmQgdXAgdXNpbmcgdGhlIHN5bmNocm9uaXphdGlvbgogCSAqIGluc2lkZSBidHJmc19zeW5jX2xvZyB0byBrZWVwIHRoaW5ncyBzYWZlLgogCSAqLwotCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAogCWlmIChyZXQgPiAwKSB7CiAJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CkBAIC0xMjUzLDcgKzEyNjMsNyBAQAogCQlidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7CiAJCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJfQotCW11dGV4X2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgogCXJldHVybiByZXQgPiAwID8gRUlPIDogcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUtbWFwLmMgYi9mcy9idHJmcy9pbm9kZS1tYXAuYwppbmRleCAyYWE3OTg3Li5jYzczMzRkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS1tYXAuYworKysgYi9mcy9idHJmcy9pbm9kZS1tYXAuYwpAQCAtODQsNyArODQsNiBAQAogCXNlYXJjaF9rZXkudHlwZSA9IDA7CiAJc2VhcmNoX2tleS5vZmZzZXQgPSAwOwogCi0JYnRyZnNfaW5pdF9wYXRoKHBhdGgpOwogCXN0YXJ0X2ZvdW5kID0gMDsKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJnNlYXJjaF9rZXksIHBhdGgsIDAsIDApOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggOGYwNzA2Mi4uN2Q0Zjk0OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC0xMDIsMzQgKzEwMiw2IEBACiB9CiAKIC8qCi0gKiBhIHZlcnkgbGFtZSBhdHRlbXB0IGF0IHN0b3BwaW5nIHdyaXRlcyB3aGVuIHRoZSBGUyBpcyA4NSUgZnVsbC4gIFRoZXJlCi0gKiBhcmUgY291bnRsZXNzIHdheXMgdGhpcyBpcyBpbmNvcnJlY3QsIGJ1dCBpdCBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nLgotICovCi1pbnQgYnRyZnNfY2hlY2tfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IG51bV9yZXF1aXJlZCwKLQkJCSAgIGludCBmb3JfZGVsKQotewotCXU2NCB0b3RhbDsKLQl1NjQgdXNlZDsKLQl1NjQgdGhyZXNoOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKLQl0b3RhbCA9IGJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKLQl1c2VkID0gYnRyZnNfc3VwZXJfYnl0ZXNfdXNlZCgmcm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSk7Ci0JaWYgKGZvcl9kZWwpCi0JCXRocmVzaCA9IHRvdGFsICogOTA7Ci0JZWxzZQotCQl0aHJlc2ggPSB0b3RhbCAqIDg1OwotCi0JZG9fZGl2KHRocmVzaCwgMTAwKTsKLQotCWlmICh1c2VkICsgcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMgKyBudW1fcmVxdWlyZWQgPiB0aHJlc2gpCi0JCXJldCA9IC1FTk9TUEM7Ci0Jc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCiAgKiB0aGlzIGRvZXMgYWxsIHRoZSBoYXJkIHdvcmsgZm9yIGluc2VydGluZyBhbiBpbmxpbmUgZXh0ZW50IGludG8KICAqIHRoZSBidHJlZS4gIFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgZG9uZSBhIGJ0cmZzX2Ryb3BfZXh0ZW50cyBzbyB0aGF0CiAgKiBubyBvdmVybGFwcGluZyBpbmxpbmUgaXRlbXMgZXhpc3QgaW4gdGhlIGJ0cmVlCkBAIC0xMTkwLDYgKzExNjIsNyBAQAogCSAqLwogCWlmICghKG9sZCAmIEVYVEVOVF9ERUxBTExPQykgJiYgKGJpdHMgJiBFWFRFTlRfREVMQUxMT0MpKSB7CiAJCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJCWJ0cmZzX2RlbGFsbG9jX3Jlc2VydmVfc3BhY2Uocm9vdCwgaW5vZGUsIGVuZCAtIHN0YXJ0ICsgMSk7CiAJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CiAJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyArPSBlbmQgLSBzdGFydCArIDE7CiAJCXJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzICs9IGVuZCAtIHN0YXJ0ICsgMTsKQEAgLTEyMjMsOSArMTE5NiwxMiBAQAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZW5kIC0gc3RhcnQgKyAxLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkgICAgICAgcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMpOworCQkJYnRyZnNfZGVsYWxsb2NfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgKHU2NCktMSk7CiAJCQlyb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJCQlCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgPSAwOwogCQl9IGVsc2UgeworCQkJYnRyZnNfZGVsYWxsb2NfZnJlZV9zcGFjZShyb290LCBpbm9kZSwKKwkJCQkJCSAgZW5kIC0gc3RhcnQgKyAxKTsKIAkJCXJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzIC09IGVuZCAtIHN0YXJ0ICsgMTsKIAkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyAtPSBlbmQgLSBzdGFydCArIDE7CiAJCX0KQEAgLTIyNDUsMTAgKzIyMjEsNiBAQAogCiAJcm9vdCA9IEJUUkZTX0koZGlyKS0+cm9vdDsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX2ZyZWVfc3BhY2Uocm9vdCwgMSwgMSk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKQEAgLTIyNjEsNyArMjIzMyw2IEBACiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwotZmFpbDoKIAlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjI4NCwxMCArMjI1NSw2IEBACiAJCXJldHVybiAtRU5PVEVNUFRZOwogCX0KIAotCXJldCA9IGJ0cmZzX2NoZWNrX2ZyZWVfc3BhY2Uocm9vdCwgMSwgMSk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKQEAgLTIzMDQsNyArMjI3MSw2IEBACiBmYWlsX3RyYW5zOgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7Ci1mYWlsOgogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCiAJaWYgKHJldCAmJiAhZXJyKQpAQCAtMjUzMSw4ICsyNDk3LDYgQEAKIAlrZXkub2Zmc2V0ID0gKHU2NCktMTsKIAlrZXkudHlwZSA9ICh1OCktMTsKIAotCWJ0cmZzX2luaXRfcGF0aChwYXRoKTsKLQogc2VhcmNoX2FnYWluOgogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJaWYgKHJldCA8IDApCkBAIC0yODIwLDcgKzI3ODQsNyBAQAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfZnJlZV9zcGFjZShyb290LCAxLCAwKTsKKwllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTMwMTYsNiArMjk4MCw3IEBACiAJYmktPmxhc3RfdHJhbnMgPSAwOwogCWJpLT5sb2dnZWRfdHJhbnMgPSAwOwogCWJpLT5kZWxhbGxvY19ieXRlcyA9IDA7CisJYmktPnJlc2VydmVkX2J5dGVzID0gMDsKIAliaS0+ZGlza19pX3NpemUgPSAwOwogCWJpLT5mbGFncyA9IDA7CiAJYmktPmluZGV4X2NudCA9ICh1NjQpLTE7CkBAIC0zMDM3LDYgKzMwMDIsNyBAQAogCWlub2RlLT5pX2lubyA9IGFyZ3MtPmlubzsKIAlpbml0X2J0cmZzX2koaW5vZGUpOwogCUJUUkZTX0koaW5vZGUpLT5yb290ID0gYXJncy0+cm9vdDsKKwlidHJmc19zZXRfaW5vZGVfc3BhY2VfaW5mbyhhcmdzLT5yb290LCBpbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0NTcsNiArMzQyMyw3IEBACiAJQlRSRlNfSShpbm9kZSktPmluZGV4X2NudCA9IDI7CiAJQlRSRlNfSShpbm9kZSktPnJvb3QgPSByb290OwogCUJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uID0gdHJhbnMtPnRyYW5zaWQ7CisJYnRyZnNfc2V0X2lub2RlX3NwYWNlX2luZm8ocm9vdCwgaW5vZGUpOwogCiAJaWYgKG1vZGUgJiBTX0lGRElSKQogCQlvd25lciA9IDA7CkBAIC0zNjA0LDcgKzM1NzEsNyBAQAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBidHJmc19jaGVja19mcmVlX3NwYWNlKHJvb3QsIDEsIDApOworCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwogCkBAIC0zNjY3LDcgKzM2MzQsNyBAQAogCXU2NCBvYmplY3RpZDsKIAl1NjQgaW5kZXggPSAwOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfZnJlZV9zcGFjZShyb290LCAxLCAwKTsKKwllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwpAQCAtMzczNSw3ICszNzAyLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlidHJmc19pbmNfbmxpbmsoaW5vZGUpOwotCWVyciA9IGJ0cmZzX2NoZWNrX2ZyZWVfc3BhY2Uocm9vdCwgMSwgMCk7CisJZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CiAJZXJyID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgJmluZGV4KTsKQEAgLTM3ODEsNyArMzc0OCw3IEBACiAJdTY0IGluZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yID0gMTsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX2ZyZWVfc3BhY2Uocm9vdCwgMSwgMCk7CisJZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTQyNjMsNyArNDIzMCw3IEBACiB7CiAJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkgfHwgUGFnZURpcnR5KHBhZ2UpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gX19idHJmc19yZWxlYXNlcGFnZShwYWdlLCBnZnBfZmxhZ3MpOworCXJldHVybiBfX2J0cmZzX3JlbGVhc2VwYWdlKHBhZ2UsIGdmcF9mbGFncyAmIEdGUF9OT0ZTKTsKIH0KIAogc3RhdGljIHZvaWQgYnRyZnNfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQpAQCAtNDMzOCw3ICs0MzA1LDcgQEAKIAl1NjQgcGFnZV9zdGFydDsKIAl1NjQgcGFnZV9lbmQ7CiAKLQlyZXQgPSBidHJmc19jaGVja19mcmVlX3NwYWNlKHJvb3QsIFBBR0VfQ0FDSEVfU0laRSwgMCk7CisJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCkBAIC00MzUxLDYgKzQzMTgsNyBAQAogCiAJaWYgKChwYWdlLT5tYXBwaW5nICE9IGlub2RlLT5pX21hcHBpbmcpIHx8CiAJICAgIChwYWdlX3N0YXJ0ID49IHNpemUpKSB7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKIAkJLyogcGFnZSBnb3QgdHJ1bmNhdGVkIG91dCBmcm9tIHVuZGVybmVhdGggdXMgKi8KIAkJZ290byBvdXRfdW5sb2NrOwogCX0KQEAgLTQ2MzMsNyArNDYwMSw3IEBACiAJaWYgKG9sZF9pbm9kZS0+aV9pbm8gPT0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkKIAkJcmV0dXJuIC1FWERFVjsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX2ZyZWVfc3BhY2Uocm9vdCwgMSwgMCk7CisJcmV0ID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTQ3NTEsNyArNDcxOSw3IEBACiAJaWYgKG5hbWVfbGVuID4gQlRSRlNfTUFYX0lOTElORV9EQVRBX1NJWkUocm9vdCkpCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfZnJlZV9zcGFjZShyb290LCAxLCAwKTsKKwllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZhaWw7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IDk4OGZkYzguLmJjYTcyOWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtNzAsNyArNzAsNyBAQAogCXU2NCBpbmRleCA9IDA7CiAJdW5zaWduZWQgbG9uZyBuciA9IDE7CiAKLQlyZXQgPSBidHJmc19jaGVja19mcmVlX3NwYWNlKHJvb3QsIDEsIDApOworCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX2NvbW1pdDsKIApAQCAtMjAzLDcgKzIwMyw3IEBACiAJaWYgKCFyb290LT5yZWZfY293cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBidHJmc19jaGVja19mcmVlX3NwYWNlKHJvb3QsIDEsIDApOworCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX3VubG9jazsKIApAQCAtMzc0LDcgKzM3NCw3IEBACiAJdW5zaWduZWQgbG9uZyBpOwogCWludCByZXQ7CiAKLQlyZXQgPSBidHJmc19jaGVja19mcmVlX3NwYWNlKHJvb3QsIGlub2RlLT5pX3NpemUsIDApOworCXJldCA9IGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgaW5vZGUtPmlfc2l6ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2xvY2tpbmcuYyBiL2ZzL2J0cmZzL2xvY2tpbmcuYwppbmRleCA5ZWJlOTM4Li40N2IwYTg4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9sb2NraW5nLmMKKysrIGIvZnMvYnRyZnMvbG9ja2luZy5jCkBAIC0yNSwyMSArMjUsMTAgQEAKICNpbmNsdWRlICJleHRlbnRfaW8uaCIKICNpbmNsdWRlICJsb2NraW5nLmgiCiAKLS8qCi0gKiBidHJmc19oZWFkZXJfbGV2ZWwoKSBpc24ndCBmcmVlLCBzbyBkb24ndCBjYWxsIGl0IHdoZW4gbG9ja2RlcCBpc24ndAotICogb24KLSAqLwotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCi1zdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9uZXN0ZWQoc3RydWN0IGV4dGVudF9idWZmZXIgKmViKQotewotCXNwaW5fbG9ja19uZXN0ZWQoJmViLT5sb2NrLCBCVFJGU19NQVhfTEVWRUwgLSBidHJmc19oZWFkZXJfbGV2ZWwoZWIpKTsKLX0KLSNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9uZXN0ZWQoc3RydWN0IGV4dGVudF9idWZmZXIgKmViKQogewogCXNwaW5fbG9jaygmZWItPmxvY2spOwogfQotI2VuZGlmCiAKIC8qCiAgKiBTZXR0aW5nIGEgbG9jayB0byBibG9ja2luZyB3aWxsIGRyb3AgdGhlIHNwaW5sb2NrIGFuZCBzZXQgdGhlCkBAIC0yMzEsOCArMjIwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGJ0cmZzX3RyZWVfbG9ja2VkKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYikKK3ZvaWQgYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYikKIHsKLQlyZXR1cm4gdGVzdF9iaXQoRVhURU5UX0JVRkZFUl9CTE9DS0lORywgJmViLT5iZmxhZ3MpIHx8Ci0JCQlzcGluX2lzX2xvY2tlZCgmZWItPmxvY2spOworCWlmICghdGVzdF9iaXQoRVhURU5UX0JVRkZFUl9CTE9DS0lORywgJmViLT5iZmxhZ3MpKQorCQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmViLT5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2xvY2tpbmcuaCBiL2ZzL2J0cmZzL2xvY2tpbmcuaAppbmRleCA2YmIwYWZiLi42YzRjZTQ1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9sb2NraW5nLmgKKysrIGIvZnMvYnRyZnMvbG9ja2luZy5oCkBAIC0yMSwxMSArMjEsMTEgQEAKIAogaW50IGJ0cmZzX3RyZWVfbG9jayhzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWIpOwogaW50IGJ0cmZzX3RyZWVfdW5sb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7Ci1pbnQgYnRyZnNfdHJlZV9sb2NrZWQoc3RydWN0IGV4dGVudF9idWZmZXIgKmViKTsKIAogaW50IGJ0cmZzX3RyeV90cmVlX2xvY2soc3RydWN0IGV4dGVudF9idWZmZXIgKmViKTsKIGludCBidHJmc190cnlfc3Bpbl9sb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CiAKIHZvaWQgYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoc3RydWN0IGV4dGVudF9idWZmZXIgKmViKTsKIHZvaWQgYnRyZnNfY2xlYXJfbG9ja19ibG9ja2luZyhzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWIpOwordm9pZCBidHJmc19hc3NlcnRfdHJlZV9sb2NrZWQoc3RydWN0IGV4dGVudF9idWZmZXIgKmViKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggZjNmZDdlMi4uMTlhNGRhZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0zNzksNyArMzc5LDYgQEAKIAlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCk7CiAJYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CiAKLQlidHJmc19jbGVhbl9vbGRfc25hcHNob3RzKHJvb3QpOwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlzYi0+c19kaXJ0ID0gMDsKQEAgLTUxMSw2ICs1MTAsMTAgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGJ0cmZzX3NiKHNiKTsKIAlpbnQgcmV0OwogCisJcmV0ID0gYnRyZnNfcGFyc2Vfb3B0aW9ucyhyb290LCBkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICgoKmZsYWdzICYgTVNfUkRPTkxZKSA9PSAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggOTE5MTcyZGUuLjQxMTJkNTMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtNjg4LDcgKzY4OCw5IEBACiAJCW51bV9ieXRlcyAtPSBidHJmc19yb290X3VzZWQoJmRpcnR5LT5yb290LT5yb290X2l0ZW0pOwogCQlieXRlc191c2VkID0gYnRyZnNfcm9vdF91c2VkKCZyb290LT5yb290X2l0ZW0pOwogCQlpZiAobnVtX2J5dGVzKSB7CisJCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCQlidHJmc19yZWNvcmRfcm9vdF9pbl90cmFucyhyb290KTsKKwkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQkJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtLAogCQkJCQkgICAgYnl0ZXNfdXNlZCAtIG51bV9ieXRlcyk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDIwNzk0MjkuLjljNDYyZmIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMjgzMiw3ICsyODMyLDkgQEAKIAkJQlVHX09OKCF3Yy5yZXBsYXlfZGVzdCk7CiAKIAkJd2MucmVwbGF5X2Rlc3QtPmxvZ19yb290ID0gbG9nOworCQltdXRleF9sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHdjLnJlcGxheV9kZXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CiAJCXJldCA9IHdhbGtfbG9nX3RyZWUodHJhbnMsIGxvZywgJndjKTsKIAkJQlVHX09OKHJldCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCBiY2QxNGViLi5kZDA2ZTE4IDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC0xMzc0LDYgKzEzNzQsMTIgQEAKIAkJcmV0ID0gYnRyZnNfYWRkX2RldmljZSh0cmFucywgcm9vdCwgZGV2aWNlKTsKIAl9CiAKKwkvKgorCSAqIHdlJ3ZlIGdvdCBtb3JlIHN0b3JhZ2UsIGNsZWFyIGFueSBmdWxsIGZsYWdzIG9uIHRoZSBzcGFjZQorCSAqIGluZm9zCisJICovCisJYnRyZnNfY2xlYXJfc3BhY2VfaW5mb19mdWxsKHJvb3QtPmZzX2luZm8pOworCiAJdW5sb2NrX2NodW5rcyhyb290KTsKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCkBAIC0xNDU5LDYgKzE0NjUsOCBAQAogCWRldmljZS0+ZnNfZGV2aWNlcy0+dG90YWxfcndfYnl0ZXMgKz0gZGlmZjsKIAogCWRldmljZS0+dG90YWxfYnl0ZXMgPSBuZXdfc2l6ZTsKKwlidHJmc19jbGVhcl9zcGFjZV9pbmZvX2Z1bGwoZGV2aWNlLT5kZXZfcm9vdC0+ZnNfaW5mbyk7CisKIAlyZXR1cm4gYnRyZnNfdXBkYXRlX2RldmljZSh0cmFucywgZGV2aWNlKTsKIH0KIApAQCAtMjg5NCwxMCArMjkwMiw2IEBACiAJCWZyZWVfZXh0ZW50X21hcChlbSk7CiAJfQogCi0JbWFwID0ga3phbGxvYyhzaXplb2YoKm1hcCksIEdGUF9OT0ZTKTsKLQlpZiAoIW1hcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOwogCWlmICghZW0pCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzEwNiw2ICszMTEwLDggQEAKIAlpZiAoIXNiKQogCQlyZXR1cm4gLUVOT01FTTsKIAlidHJmc19zZXRfYnVmZmVyX3VwdG9kYXRlKHNiKTsKKwlidHJmc19zZXRfYnVmZmVyX2xvY2tkZXBfY2xhc3Moc2IsIDApOworCiAJd3JpdGVfZXh0ZW50X2J1ZmZlcihzYiwgc3VwZXJfY29weSwgMCwgQlRSRlNfU1VQRVJfSU5GT19TSVpFKTsKIAlhcnJheV9zaXplID0gYnRyZnNfc3VwZXJfc3lzX2FycmF5X3NpemUoc3VwZXJfY29weSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggNjY1ZDQ0Ni4uODkxZTFjNyAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTc2MCwxNSArNzYwLDkgQEAKICAqIElmIHdhcm4gaXMgdHJ1ZSwgdGhlbiBlbWl0IGEgd2FybmluZyBpZiB0aGUgcGFnZSBpcyBub3QgdXB0b2RhdGUgYW5kIGhhcwogICogbm90IGJlZW4gdHJ1bmNhdGVkLgogICovCi1zdGF0aWMgaW50IF9fc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UsCitzdGF0aWMgdm9pZCBfX3NldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgaW50IHdhcm4pCiB7Ci0JaWYgKHVubGlrZWx5KCFtYXBwaW5nKSkKLQkJcmV0dXJuICFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpOwotCi0JaWYgKFRlc3RTZXRQYWdlRGlydHkocGFnZSkpCi0JCXJldHVybiAwOwotCiAJc3Bpbl9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlpZiAocGFnZS0+bWFwcGluZykgewkvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCiAJCVdBUk5fT05fT05DRSh3YXJuICYmICFQYWdlVXB0b2RhdGUocGFnZSkpOwpAQCAtNzc3LDYgKzc3MSw3IEBACiAJCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7CiAJCQlfX2luY19iZGlfc3RhdChtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAogCQkJCQlCRElfUkVDTEFJTUFCTEUpOworCQkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7CiAJCQl0YXNrX2lvX2FjY291bnRfd3JpdGUoUEFHRV9DQUNIRV9TSVpFKTsKIAkJfQogCQlyYWRpeF90cmVlX3RhZ19zZXQoJm1hcHBpbmctPnBhZ2VfdHJlZSwKQEAgLTc4NCw4ICs3NzksNiBAQAogCX0KIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJX19tYXJrX2lub2RlX2RpcnR5KG1hcHBpbmctPmhvc3QsIElfRElSVFlfUEFHRVMpOwotCi0JcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC04MTUsNiArODA4LDcgQEAKICAqLwogaW50IF9fc2V0X3BhZ2VfZGlydHlfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlpbnQgbmV3bHlfZGlydHk7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CiAKIAlpZiAodW5saWtlbHkoIW1hcHBpbmcpKQpAQCAtODMwLDkgKzgyNCwxMiBAQAogCQkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CiAJCX0gd2hpbGUgKGJoICE9IGhlYWQpOwogCX0KKwluZXdseV9kaXJ0eSA9ICFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpOwogCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5wcml2YXRlX2xvY2spOwogCi0JcmV0dXJuIF9fc2V0X3BhZ2VfZGlydHkocGFnZSwgbWFwcGluZywgMSk7CisJaWYgKG5ld2x5X2RpcnR5KQorCQlfX3NldF9wYWdlX2RpcnR5KHBhZ2UsIG1hcHBpbmcsIDEpOworCXJldHVybiBuZXdseV9kaXJ0eTsKIH0KIEVYUE9SVF9TWU1CT0woX19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKTsKIApAQCAtMTI2MSw4ICsxMjU4LDExIEBACiAJCQlyZXR1cm47CiAJfQogCi0JaWYgKCF0ZXN0X3NldF9idWZmZXJfZGlydHkoYmgpKQotCQlfX3NldF9wYWdlX2RpcnR5KGJoLT5iX3BhZ2UsIHBhZ2VfbWFwcGluZyhiaC0+Yl9wYWdlKSwgMCk7CisJaWYgKCF0ZXN0X3NldF9idWZmZXJfZGlydHkoYmgpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYmgtPmJfcGFnZTsKKwkJaWYgKCFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpKQorCQkJX19zZXRfcGFnZV9kaXJ0eShwYWdlLCBwYWdlX21hcHBpbmcocGFnZSksIDApOworCX0KIH0KIAogLyoKQEAgLTMxMDgsNyArMzEwOCw3IEBACiAJaWYgKHRlc3RfY2xlYXJfYnVmZmVyX2RpcnR5KGJoKSkgewogCQlnZXRfYmgoYmgpOwogCQliaC0+Yl9lbmRfaW8gPSBlbmRfYnVmZmVyX3dyaXRlX3N5bmM7Ci0JCXJldCA9IHN1Ym1pdF9iaChXUklURV9TWU5DLCBiaCk7CisJCXJldCA9IHN1Ym1pdF9iaChXUklURSwgYmgpOwogCQl3YWl0X29uX2J1ZmZlcihiaCk7CiAJCWlmIChidWZmZXJfZW9wbm90c3VwcChiaCkpIHsKIAkJCWNsZWFyX2J1ZmZlcl9lb3Bub3RzdXBwKGJoKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA3M2FjN2ViLi42NTk4NDAwIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0xLDMgKzEsMjIgQEAKK1ZlcnNpb24gMS41NworLS0tLS0tLS0tLS0tCitJbXByb3ZlIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNlY3VyaXR5IGNvbnRleHRzIHRvIHRoZSBzYW1lIHNlcnZlci4gV2UKK3VzZWQgdG8gdXNlIHRoZSBzYW1lICJ2Y251bWJlciIgZm9yIGFsbCBjb25uZWN0aW9ucyB3aGljaCBjb3VsZCBjYXVzZQordGhlIHNlcnZlciB0byB0cmVhdCBzdWJzZXF1ZW50IGNvbm5lY3Rpb25zLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQKK2FyZSBhdXRoZW50aWNhdGVkIGFzIGd1ZXN0LCBhcyByZWNvbm5lY3Rpb25zLCBpbnZhbGlkYXRpbmcgdGhlIGVhcmxpZXIKK3VzZXIncyBzbWIgc2Vzc2lvbi4gIFRoaXMgZml4IGFsbG93cyBjaWZzIHRvIG1vdW50IG11bHRpcGxlIHRpbWVzIHRvIHRoZQorc2FtZSBzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgdXNlcmlkcyB3aXRob3V0IHJpc2tpbmcgaW52YWxpZGF0aW5nIGVhcmxpZXIKK2VzdGFibGlzaGVkIHNlY3VyaXR5IGNvbnRleHRzLiAgZnN5bmMgbm93IHNlbmRzIFNNQiBGbHVzaCBvcGVyYXRpb24KK3RvIGJldHRlciBlbnN1cmUgdGhhdCB3ZSB3YWl0IGZvciBzZXJ2ZXIgdG8gd3JpdGUgYWxsIG9mIHRoZSBkYXRhIHRvCitzZXJ2ZXIgZGlzayAobm90IGp1c3Qgd3JpdGUgaXQgb3ZlciB0aGUgbmV0d29yaykuICBBZGQgbmV3IG1vdW50CitwYXJhbWV0ZXIgdG8gYWxsb3cgdXNlciB0byBkaXNhYmxlIHNlbmRpbmcgdGhlIChzbG93KSBTTUIgZmx1c2ggb24KK2ZzeW5jIGlmIGRlc2lyZWQgKGZzeW5jIHN0aWxsIGZsdXNoZXMgYWxsIGNhY2hlZCB3cml0ZSBkYXRhIHRvIHRoZSBzZXJ2ZXIpLgorUG9zaXggZmlsZSBvcGVuIHN1cHBvcnQgYWRkZWQgKHR1cm5lZCBvZmYgYWZ0ZXIgb25lIGF0dGVtcHQgaWYgc2VydmVyCitmYWlscyB0byBzdXBwb3J0IGl0IHByb3Blcmx5LCBhcyB3aXRoIFNhbWJhIHNlcnZlciB2ZXJzaW9ucyBwcmlvciB0byAzLjMuMikKK0ZpeCAicmVkem9uZSBvdmVyd3JpdHRlbiIgYnVnIGluIGNpZnNfcHV0X3Rjb24gKENJRlNUY29uIG1heSBhbGxvY2F0ZSB0b28KK2xpdHRsZSBtZW1vcnkgZm9yIHRoZSAibmF0aXZlRmlsZVN5c3RlbSIgZmllbGQgcmV0dXJuZWQgYnkgdGhlIHNlcnZlcgorZHVyaW5nIG1vdW50KS4gCisKIFZlcnNpb24gMS41NgogLS0tLS0tLS0tLS0tCiBBZGQgImZvcmNlbWFuZGF0b3J5bG9jayIgbW91bnQgb3B0aW9uIHRvIGFsbG93IHVzZXIgdG8gdXNlIG1hbmRhdG9yeQpAQCAtNyw3ICsyNiwxMCBAQAogdG9wIG9mIHRoZSBzaGFyZS4gIEZpeCBwcm9ibGVtIGluIDIuNi4yOCByZXNvbHZpbmcgREZTIHBhdGhzIHRvCiBTYW1iYSBzZXJ2ZXJzICh3b3JrZWQgdG8gV2luZG93cykuICBGaXggcm1kaXIgc28gdGhhdCBwZW5kaW5nIHNlYXJjaAogKHJlYWRkaXIpIHJlcXVlc3RzIGRvIG5vdCBnZXQgaW52YWxpZCByZXN1bHRzIHdoaWNoIGluY2x1ZGUgdGhlIG5vdwotcmVtb3ZlZCBkaXJlY3RvcnkuCityZW1vdmVkIGRpcmVjdG9yeS4gIEZpeCBvb3BzIGluIGNpZnNfZGZzX3JlZi5jIHdoZW4gcHJlZml4cGF0aCBpcyBub3QgcmVhY2hhYmxlCit3aGVuIHVzaW5nIERGUy4gIEFkZCBiZXR0ZXIgZmlsZSBjcmVhdGUgc3VwcG9ydCB0byBzZXJ2ZXJzIHdoaWNoIHN1cHBvcnQKK3RoZSBDSUZTIFBPU0lYIHByb3RvY29sIGV4dGVuc2lvbnMgKHRoaXMgYWRkcyBzdXBwb3J0IGZvciBuZXcgZmxhZ3MKK29uIGNyZWF0ZSwgYW5kIGltcHJvdmVzIHNlbWFudGljcyBmb3Igd3JpdGUgb2YgbG9ja2VkIHJhbmdlcykuCiAKIFZlcnNpb24gMS41NQogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggMzQxYTk4OS4uNjk5NGEwZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMTE4LDYgKzExOCwxOCBAQAogCSAgIG9wdGlvbiBjYW4gYmUgdHVybmVkIG9mZiB1bmxlc3MgeW91IGFyZSBkZWJ1Z2dpbmcKIAkgICBjaWZzIHByb2JsZW1zLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIENJRlNfREZTX1VQQ0FMTAorCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCIKKwkgIGRlcGVuZHMgb24gQ0lGUyAmJiBLRVlTCisJICBoZWxwCisJICAgIERpc3RyaWJ1dGVkIEZpbGUgU3lzdGVtIChERlMpIHN1cHBvcnQgaXMgdXNlZCB0byBhY2Nlc3Mgc2hhcmVzCisJICAgIHRyYW5zcGFyZW50bHkgaW4gYW4gZW50ZXJwcmlzZSBuYW1lIHNwYWNlLCBldmVuIGlmIHRoZSBzaGFyZQorCSAgICBtb3ZlcyB0byBhIGRpZmZlcmVudCBzZXJ2ZXIuICBUaGlzIGZlYXR1cmUgYWxzbyBlbmFibGVzCisJICAgIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlIGhlbHBlcgorCSAgICB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCisJICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCisJICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCiAJICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKIAkgIGRlcGVuZHMgb24gQ0lGUyAmJiBFWFBFUklNRU5UQUwKQEAgLTEzMSwxMiArMTQzLDMgQEAKIAkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUKIAkgICAgZm9yIG1vcmUgZGV0YWlscy4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBDSUZTX0RGU19VUENBTEwKLQkgIGJvb2wgIkRGUyBmZWF0dXJlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JICBkZXBlbmRzIG9uIENJRlNfRVhQRVJJTUVOVEFMCi0JICBkZXBlbmRzIG9uIEtFWVMKLQkgIGhlbHAKLQkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGNvbnRhY3RzIHVzZXJzcGFjZQotCSAgICBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgc2VydmVyIG5hbWUgcmVzb2x1dGlvbiAoaG9zdCBuYW1lcyB0bwotCSAgICBJUCBhZGRyZXNzZXMpIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW1wbGljaXQgbW91bnRzIG9mIERGUyBqdW5jdGlvbgotCSAgICBwb2ludHMuIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9jaWZzL1JFQURNRSBiL2ZzL2NpZnMvUkVBRE1FCmluZGV4IGRhNDUxNWUuLjA3NDM0MTggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvUkVBRE1FCisrKyBiL2ZzL2NpZnMvUkVBRE1FCkBAIC00NzIsNiArNDcyLDE5IEBACiAJCWV2ZW4gaWYgdGhlIGNpZnMgc2VydmVyIHdvdWxkIHN1cHBvcnQgcG9zaXggYWR2aXNvcnkgbG9ja3MuCiAJCSJmb3JjZW1hbmQiIGlzIGFjY2VwdGVkIGFzIGEgc2hvcnRlciBmb3JtIG9mIHRoaXMgbW91bnQKIAkJb3B0aW9uLgorIG5vc3RyaWN0c3luYyAgIElmIHRoaXMgbW91bnQgb3B0aW9uIGlzIHNldCwgd2hlbiBhbiBhcHBsaWNhdGlvbiBkb2VzIGFuCisJCWZzeW5jIGNhbGwgdGhlbiB0aGUgY2lmcyBjbGllbnQgZG9lcyBub3Qgc2VuZCBhbiBTTUIgRmx1c2gKKwkJdG8gdGhlIHNlcnZlciAodG8gZm9yY2UgdGhlIHNlcnZlciB0byB3cml0ZSBhbGwgZGlydHkgZGF0YQorCQlmb3IgdGhpcyBmaWxlIGltbWVkaWF0ZWx5IHRvIGRpc2spLCBhbHRob3VnaCBjaWZzIHN0aWxsIHNlbmRzCisJCWFsbCBkaXJ0eSAoY2FjaGVkKSBmaWxlIGRhdGEgdG8gdGhlIHNlcnZlciBhbmQgd2FpdHMgZm9yIHRoZQorCQlzZXJ2ZXIgdG8gcmVzcG9uZCB0byB0aGUgd3JpdGUuICBTaW5jZSBTTUIgRmx1c2ggY2FuIGJlCisJCXZlcnkgc2xvdywgYW5kIHNvbWUgc2VydmVycyBtYXkgYmUgcmVsaWFibGUgZW5vdWdoICh0byByaXNrCisJCWRlbGF5aW5nIHNsaWdodGx5IGZsdXNoaW5nIHRoZSBkYXRhIHRvIGRpc2sgb24gdGhlIHNlcnZlciksCisJCXR1cm5pbmcgb24gdGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvcgorCQlhcHBsaWNhdGlvbnMgdGhhdCBmc3luYyB0b28gbXVjaCwgYXQgYSBzbWFsbCByaXNrIG9mIHNlcnZlcgorCQljcmFzaC4gIElmIHRoaXMgbW91bnQgb3B0aW9uIGlzIG5vdCBzZXQsIGJ5IGRlZmF1bHQgY2lmcyB3aWxsCisJCXNlbmQgYW4gU01CIGZsdXNoIHJlcXVlc3QgKGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlKSBvbiBldmVyeQorCQlmc3luYyBjYWxsLgogIG5vZGZzICAgICAgICAgIERpc2FibGUgREZTIChnbG9iYWwgbmFtZSBzcGFjZSBzdXBwb3J0KSBldmVuIGlmIHRoZQogCQlzZXJ2ZXIgY2xhaW1zIHRvIHN1cHBvcnQgaXQuICBUaGlzIGNhbiBoZWxwIHdvcmsgYXJvdW5kCiAJCWEgcHJvYmxlbSB3aXRoIHBhcnNpbmcgb2YgREZTIHBhdGhzIHdpdGggU2FtYmEgc2VydmVyCkBAIC02OTIsMTMgKzcwNSwxNCBAQAogY2lmcy51cGNhbGwgaGVscGVyIHByb2dyYW0pLCBpbnN0ZWFkIG9mIHVzaW5nIEtlcmJlcm9zLCBpcyBzdWZmaWNpZW50IGZvcgogc29tZSB1c2UgY2FzZXMuCiAKLUVuYWJsaW5nIERGUyBzdXBwb3J0ICh1c2VkIHRvIGFjY2VzcyBzaGFyZXMgdHJhbnNwYXJlbnRseSBpbiBhbiBNUy1ERlMKLWdsb2JhbCBuYW1lIHNwYWNlKSByZXF1aXJlcyB0aGF0IENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBiZSBlbmFibGVkLiAgSW4KLWFkZGl0aW9uLCBERlMgc3VwcG9ydCBmb3IgdGFyZ2V0IHNoYXJlcyB3aGljaCBhcmUgc3BlY2lmaWVkIGFzIFVOQworREZTIHN1cHBvcnQgYWxsb3dzIHRyYW5zcGFyZW50IHJlZGlyZWN0aW9uIHRvIHNoYXJlcyBpbiBhbiBNUy1ERlMgbmFtZSBzcGFjZS4KK0luIGFkZGl0aW9uLCBERlMgc3VwcG9ydCBmb3IgdGFyZ2V0IHNoYXJlcyB3aGljaCBhcmUgc3BlY2lmaWVkIGFzIFVOQwogbmFtZXMgd2hpY2ggYmVnaW4gd2l0aCBob3N0IG5hbWVzIChyYXRoZXIgdGhhbiBJUCBhZGRyZXNzZXMpIHJlcXVpcmVzCiBhIHVzZXIgc3BhY2UgaGVscGVyIChzdWNoIGFzIGNpZnMudXBjYWxsKSB0byBiZSBwcmVzZW50IGluIG9yZGVyIHRvCiB0cmFuc2xhdGUgaG9zdCBuYW1lcyB0byBpcCBhZGRyZXNzLCBhbmQgdGhlIHVzZXIgc3BhY2UgaGVscGVyIG11c3QgYWxzbwotYmUgY29uZmlndXJlZCBpbiB0aGUgZmlsZSAvZXRjL3JlcXVlc3Qta2V5LmNvbmYKK2JlIGNvbmZpZ3VyZWQgaW4gdGhlIGZpbGUgL2V0Yy9yZXF1ZXN0LWtleS5jb25mLiAgU2FtYmEsIFdpbmRvd3Mgc2VydmVycyBhbmQKK21hbnkgTkFTIGFwcGxpYW5jZXMgc3VwcG9ydCBERlMgYXMgYSB3YXkgb2YgY29uc3RydWN0aW5nIGEgZ2xvYmFsIG5hbWUKK3NwYWNlIHRvIGVhc2UgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBpbXByb3ZlIHJlbGlhYmlsaXR5LgogCiBUbyB1c2UgY2lmcyBLZXJiZXJvcyBhbmQgREZTIHN1cHBvcnQsIHRoZSBMaW51eCBrZXl1dGlscyBwYWNrYWdlIHNob3VsZCBiZQogaW5zdGFsbGVkIGFuZCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIGxpbmVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggNDkwZTM0Yi4uODc3ZTRkOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTM0MCw2ICszNDAsOCBAQAogCQkJCXNlcV9wcmludGYobSwgIlxuV3JpdGVzOiAlZCBCeXRlczogJWxsZCIsCiAJCQkJCWF0b21pY19yZWFkKCZ0Y29uLT5udW1fd3JpdGVzKSwKIAkJCQkJKGxvbmcgbG9uZykodGNvbi0+Ynl0ZXNfd3JpdHRlbikpOworCQkJCXNlcV9wcmludGYobSwgIlxuRmx1c2hlczogJWQiLAorCQkJCQlhdG9taWNfcmVhZCgmdGNvbi0+bnVtX2ZsdXNoZXMpKTsKIAkJCQlzZXFfcHJpbnRmKG0sICJcbkxvY2tzOiAlZCBIYXJkTGlua3M6ICVkICIKIAkJCQkJICAgICAgIlN5bWxpbmtzOiAlZCIsCiAJCQkJCWF0b21pY19yZWFkKCZ0Y29uLT5udW1fbG9ja3MpLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKaW5kZXggODVjMGE3NC4uNWZkYmY4YSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYworKysgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCkBAIC0xMDQsOSArMTA0LDkgQEAKIAogCiAvKioKLSAqIGNvbXBvc2VfbW91bnRfb3B0aW9ucwktCWNyZWF0ZXMgbW91bnQgb3B0aW9ucyBmb3IgcmVmZmVycmFsCisgKiBjaWZzX2NvbXBvc2VfbW91bnRfb3B0aW9ucwktCWNyZWF0ZXMgbW91bnQgb3B0aW9ucyBmb3IgcmVmZmVycmFsCiAgKiBAc2JfbW91bnRkYXRhOglwYXJlbnQvcm9vdCBERlMgbW91bnQgb3B0aW9ucyAodGVtcGxhdGUpCi0gKiBAZGVudHJ5OgkJcG9pbnQgd2hlcmUgd2UgYXJlIGdvaW5nIHRvIG1vdW50CisgKiBAZnVsbHBhdGg6CQlmdWxsIHBhdGggaW4gVU5DIGZvcm1hdAogICogQHJlZjoJCXNlcnZlcidzIHJlZmVycmFsCiAgKiBAZGV2bmFtZToJCXBvaW50ZXIgZm9yIHNhdmluZyBkZXZpY2UgbmFtZQogICoKQEAgLTExNiw4ICsxMTYsOCBAQAogICogUmV0dXJuczogcG9pbnRlciB0byBuZXcgbW91bnQgb3B0aW9ucyBvciBFUlJfUFRSLgogICogQ2FsbGVyIGlzIHJlc3BvbmNpYmxlIGZvciBmcmVlaW5nIHJldHVucm5lZCB2YWx1ZSBpZiBpdCBpcyBub3QgZXJyb3IuCiAgKi8KLXN0YXRpYyBjaGFyICpjb21wb3NlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqc2JfbW91bnRkYXRhLAotCQkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKK2NoYXIgKmNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKnNiX21vdW50ZGF0YSwKKwkJCQkgICBjb25zdCBjaGFyICpmdWxscGF0aCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgZGZzX2luZm8zX3BhcmFtICpyZWYsCiAJCQkJICAgY2hhciAqKmRldm5hbWUpCiB7CkBAIC0xMjgsNyArMTI4LDYgQEAKIAljaGFyICpzcnZJUCA9IE5VTEw7CiAJY2hhciBzZXAgPSAnLCc7CiAJaW50IG9mZiwgbm9mZjsKLQljaGFyICpmdWxscGF0aDsKIAogCWlmIChzYl9tb3VudGRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0yMDIsMTcgKzIwMSw2IEBACiAJCWdvdG8gY29tcG9zZV9tb3VudF9vcHRpb25zX2VycjsKIAl9CiAKLQkvKgotCSAqIHRoaXMgZnVuY3Rpb24gZ2l2ZXMgdXMgYSBwYXRoIHdpdGggYSBkb3VibGUgYmFja3NsYXNoIHByZWZpeC4gV2UKLQkgKiByZXF1aXJlIGEgc2luZ2xlIGJhY2tzbGFzaCBmb3IgREZTLiBUZW1wb3JhcmlseSBpbmNyZW1lbnQgZnVsbHBhdGgKLQkgKiB0byBwdXQgaXQgaW4gdGhlIHByb3BlciBmb3JtIGFuZCBkZWNyZW1lbnQgYmVmb3JlIGZyZWVpbmcgaXQuCi0JICovCi0JZnVsbHBhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRlbnRyeSk7Ci0JaWYgKCFmdWxscGF0aCkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gY29tcG9zZV9tb3VudF9vcHRpb25zX2VycjsKLQl9Ci0JKytmdWxscGF0aDsKIAl0a25fZSA9IHN0cmNocih0a25fZSArIDEsICdcXCcpOwogCWlmICh0a25fZSB8fCAoc3RybGVuKGZ1bGxwYXRoKSAtIHJlZi0+cGF0aF9jb25zdW1lZCkpIHsKIAkJc3RybmNhdChtb3VudGRhdGEsICZzZXAsIDEpOwpAQCAtMjIxLDggKzIwOSw2IEBACiAJCQlzdHJjYXQobW91bnRkYXRhLCB0a25fZSArIDEpOwogCQlzdHJjYXQobW91bnRkYXRhLCBmdWxscGF0aCArIHJlZi0+cGF0aF9jb25zdW1lZCk7CiAJfQotCS0tZnVsbHBhdGg7Ci0Ja2ZyZWUoZnVsbHBhdGgpOwogCiAJLypjRllJKDEsKCIlczogcGFyZW50IG1vdW50ZGF0YTogJXMiLCBfX2Z1bmNfXyxzYl9tb3VudGRhdGEpKTsqLwogCS8qY0ZZSSgxLCAoIiVzOiBzdWJtb3VudCBtb3VudGRhdGE6ICVzIiwgX19mdW5jX18sIG1vdW50ZGF0YSApKTsqLwpAQCAtMjQ1LDEwICsyMzEsMjAgQEAKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAljaGFyICptb3VudGRhdGE7CiAJY2hhciAqZGV2bmFtZSA9IE5VTEw7CisJY2hhciAqZnVsbHBhdGg7CiAKIAljaWZzX3NiID0gQ0lGU19TQihkZW50cnktPmRfaW5vZGUtPmlfc2IpOwotCW1vdW50ZGF0YSA9IGNvbXBvc2VfbW91bnRfb3B0aW9ucyhjaWZzX3NiLT5tb3VudGRhdGEsCi0JCQkJCQlkZW50cnksIHJlZiwgJmRldm5hbWUpOworCS8qCisJICogdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyBhIHBhdGggd2l0aCBhIGRvdWJsZSBiYWNrc2xhc2ggcHJlZml4LiBXZQorCSAqIHJlcXVpcmUgYSBzaW5nbGUgYmFja3NsYXNoIGZvciBERlMuCisJICovCisJZnVsbHBhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRlbnRyeSk7CisJaWYgKCFmdWxscGF0aCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltb3VudGRhdGEgPSBjaWZzX2NvbXBvc2VfbW91bnRfb3B0aW9ucyhjaWZzX3NiLT5tb3VudGRhdGEsCisJCQlmdWxscGF0aCArIDEsIHJlZiwgJmRldm5hbWUpOworCWtmcmVlKGZ1bGxwYXRoKTsKIAogCWlmIChJU19FUlIobW91bnRkYXRhKSkKIAkJcmV0dXJuIChzdHJ1Y3QgdmZzbW91bnQgKiltb3VudGRhdGE7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZnNfc2IuaCBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCmluZGV4IGM0YzMwNmYuLjQ3OTc3ODcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19mc19zYi5oCisrKyBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIENJRlNfTU9VTlRfT1ZFUlJfR0lEICAgIDB4ODAwIC8qIG92ZXJyaWRlIGdpZCByZXR1cm5lZCBmcm9tIHNlcnZlciAgICAqLwogI2RlZmluZSBDSUZTX01PVU5UX0RZTlBFUk0gICAgICAweDEwMDAgLyogYWxsb3cgaW4tbWVtb3J5IG9ubHkgbW9kZSBzZXR0aW5nICAgKi8KICNkZWZpbmUgQ0lGU19NT1VOVF9OT1BPU0lYQlJMICAgMHgyMDAwIC8qIG1hbmRhdG9yeSBub3QgcG9zaXggYnl0ZSByYW5nZSBsb2NrICovCisjZGVmaW5lIENJRlNfTU9VTlRfTk9TU1lOQyAgICAgIDB4NDAwMCAvKiBkb24ndCBkbyBzbG93IFNNQmZsdXNoIG9uIGV2ZXJ5IHN5bmMqLwogCiBzdHJ1Y3QgY2lmc19zYl9pbmZvIHsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwkvKiBwcmltYXJ5IG1vdW50ICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCA3YWM0ODE4Li4yYjFkMjhhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTEwMCw1ICsxMDAsNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CiAjZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCiAKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNTYiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjU3IgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDk0YzFjYTAuLjlmYmY0ZGYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTE2NCw5ICsxNjQsMTIgQEAKIAkvKiBtdWx0aXBsZXhlZCByZWFkcyBvciB3cml0ZXMgKi8KIAl1bnNpZ25lZCBpbnQgbWF4QnVmOwkvKiBtYXhCdWYgc3BlY2lmaWVzIHRoZSBtYXhpbXVtICovCiAJLyogbWVzc2FnZSBzaXplIHRoZSBzZXJ2ZXIgY2FuIHNlbmQgb3IgcmVjZWl2ZSBmb3Igbm9uLXJhdyBTTUJzICovCi0JdW5zaWduZWQgaW50IG1heFJ3OwkvKiBtYXhSdyBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KKwl1bnNpZ25lZCBpbnQgbWF4X3J3OwkvKiBtYXhSdyBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KIAkvKiBtZXNzYWdlIHNpemUgdGhlIHNlcnZlciBjYW4gc2VuZCBvciByZWNlaXZlIGZvciAqLwogCS8qIFNNQl9DT01fV1JJVEVfUkFXIG9yIFNNQl9DT01fUkVBRF9SQVcuICovCisJdW5zaWduZWQgaW50IG1heF92Y3M7CS8qIG1heGltdW0gbnVtYmVyIG9mIHNtYiBzZXNzaW9ucywgYXQgbGVhc3QKKwkJCQkgICB0aG9zZSB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgdW5pcXVlbHkgd2l0aAorCQkJCSAgIHZjbnVtYmVycyAqLwogCWNoYXIgc2Vzc2lkWzRdOwkJLyogdW5pcXVlIHRva2VuIGlkIGZvciB0aGlzIHNlc3Npb24gKi8KIAkvKiAocmV0dXJuZWQgb24gTmVnb3RpYXRlICovCiAJaW50IGNhcGFiaWxpdGllczsgLyogYWxsb3cgc2VsZWN0aXZlIGRpc2FibGluZyBvZiBjYXBzIGJ5IHNtYiBzZXNzICovCkBAIC0yMTAsNiArMjEzLDcgQEAKIAl1bnNpZ25lZCBvdmVycmlkZVNlY0ZsZzsgIC8qIGlmIG5vbi16ZXJvIG92ZXJyaWRlIGdsb2JhbCBzZWMgZmxhZ3MgKi8KIAlfX3UxNiBpcGNfdGlkOwkJLyogc3BlY2lhbCB0aWQgZm9yIGNvbm5lY3Rpb24gdG8gSVBDIHNoYXJlICovCiAJX191MTYgZmxhZ3M7CisJX191MTYgdmNudW07CiAJY2hhciAqc2VydmVyT1M7CQkvKiBuYW1lIG9mIG9wZXJhdGluZyBzeXN0ZW0gdW5kZXJseWluZyBzZXJ2ZXIgKi8KIAljaGFyICpzZXJ2ZXJOT1M7CS8qIG5hbWUgb2YgbmV0d29yayBvcGVyYXRpbmcgc3lzdGVtIG9mIHNlcnZlciAqLwogCWNoYXIgKnNlcnZlckRvbWFpbjsJLyogc2VjdXJpdHkgcmVhbG0gb2Ygc2VydmVyICovCkBAIC0yNTAsNiArMjU0LDcgQEAKIAlhdG9taWNfdCBudW1fc21ic19zZW50OwogCWF0b21pY190IG51bV93cml0ZXM7CiAJYXRvbWljX3QgbnVtX3JlYWRzOworCWF0b21pY190IG51bV9mbHVzaGVzOwogCWF0b21pY190IG51bV9vcGxvY2tfYnJrczsKIAlhdG9taWNfdCBudW1fb3BlbnM7CiAJYXRvbWljX3QgbnVtX2Nsb3NlczsKQEAgLTI5NCw2ICsyOTksNyBAQAogCWJvb2wgdW5peF9leHQ6MTsgIC8qIGlmIGZhbHNlIGRpc2FibGUgTGludXggZXh0ZW5zaW9ucyB0byBDSUZTIHByb3RvY29sCiAJCQkJZm9yIHRoaXMgbW91bnQgZXZlbiBpZiBzZXJ2ZXIgd291bGQgc3VwcG9ydCAqLwogCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIChvbmx5KSBvbiBsb2NhbCBzeXN0ZW0gbm90IHJlbW90ZSAqLworCWJvb2wgYnJva2VuX3Bvc2l4X29wZW47IC8qIGUuZy4gU2FtYmEgc2VydmVyIHZlcnNpb25zIDwgMy4zLjIsIDMuMi45ICovCiAJYm9vbCBuZWVkX3JlY29ubmVjdDoxOyAvKiBjb25uZWN0aW9uIHJlc2V0LCB0aWQgbm93IGludmFsaWQgKi8KIAkvKiBCQiBhZGQgZmllbGQgZm9yIGJhY2sgcG9pbnRlciB0byBzYiBzdHJ1Y3Qocyk/ICovCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBiNGUyZTlmMC4uYjM3MDQ4OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNwZHUuaAogICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA4CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgX0NJRlNQRFVfSAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlICJzbWJmc2N0bC5oIgogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICiAjZGVmaW5lIExBTk1BTl9QUk9UIDAKQEAgLTM0LDE1ICszNSwxNSBAQAogI2RlZmluZSBQT1NJWF9QUk9UICAoQ0lGU19QUk9UKzEpCiAjZGVmaW5lIEJBRF9QUk9UIDB4RkZGRgogCi0vKiBTTUIgY29tbWFuZCBjb2RlcyAqLwotLyoKLSAqIFNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcworLyogU01CIGNvbW1hbmQgY29kZXM6CisgKiBOb3RlIHNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcwogICogKGllIHdoaWNoIGluY2x1ZGUgbm8gdXNlZnVsIGRhdGEgb3RoZXIgdGhhbiB0aGUgU01CIGVycm9yIGNvZGUgaXRzZWxmKS4KLSAqIEtub3dpbmcgdGhpcyBoZWxwcyBhdm9pZCByZXNwb25zZSBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHkgaW4gc29tZSBjYXNlcworICogVGhpcyBjYW4gYWxsb3cgdXMgdG8gYXZvaWQgcmVzcG9uc2UgYnVmZmVyIGFsbG9jYXRpb25zIGFuZCBjb3B5IGluIHNvbWUgY2FzZXMKICAqLwogI2RlZmluZSBTTUJfQ09NX0NSRUFURV9ESVJFQ1RPUlkgICAgICAweDAwIC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9ERUxFVEVfRElSRUNUT1JZICAgICAgMHgwMSAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fQ0xPU0UgICAgICAgICAgICAgICAgIDB4MDQgLyogdHJpdiByZXEvcnNwLCB0aW1lc3RhbXAgaWdub3JlZCAqLworI2RlZmluZSBTTUJfQ09NX0ZMVVNIICAgICAgICAgICAgICAgICAweDA1IC8qIHRyaXYgcmVxL3JzcCAqLwogI2RlZmluZSBTTUJfQ09NX0RFTEVURSAgICAgICAgICAgICAgICAweDA2IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9SRU5BTUUgICAgICAgICAgICAgICAgMHgwNyAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fUVVFUllfSU5GT1JNQVRJT04gICAgIDB4MDggLyogYWthIGdldGF0dHIgKi8KQEAgLTc5MCw2ICs3OTEsMTIgQEAKIAlfX3UxNiBCeXRlQ291bnQ7CS8qIGJjdCA9IDAgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgQ0xPU0VfUlNQOwogCit0eXBlZGVmIHN0cnVjdCBzbWJfY29tX2ZsdXNoX3JlcSB7CisJc3RydWN0IHNtYl9oZHIgaGRyOwkvKiB3Y3QgPSAxICovCisJX191MTYgRmlsZUlEOworCV9fdTE2IEJ5dGVDb3VudDsJLyogMCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGTFVTSF9SRVE7CisKIHR5cGVkZWYgc3RydWN0IHNtYl9jb21fZmluZGNsb3NlX3JlcSB7CiAJc3RydWN0IHNtYl9oZHIgaGRyOyAvKiB3Y3QgPSAxICovCiAJX191MTYgRmlsZUlEOwpAQCAtMTkyNCwxOSArMTkzMSwxOSBAQAogI2RlZmluZSBERlNfVFlQRV9ST09UIDB4MDAwMQogCiAvKiBSZWZlcnJhbCBFbnRyeSBGbGFncyAqLwotI2RlZmluZSBERlNfTkFNRV9MSVNUX1JFRiAweDAyMDAKKyNkZWZpbmUgREZTX05BTUVfTElTVF9SRUYgMHgwMjAwIC8qIHNldCBmb3IgZG9tYWluIG9yIERDIHJlZmVycmFsIHJlc3BvbnNlcyAqLworI2RlZmluZSBERlNfVEFSR0VUX1NFVF9CT1VOREFSWSAweDA0MDAgLyogb25seSB2YWxpZCB3aXRoIHZlcnNpb24gNCBkZnMgcmVxICovCiAKLXR5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsKLQlfX2xlMTYgVmVyc2lvbk51bWJlcjsKK3R5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsgLyogdmVyc2lvbiA0IGlzIHNhbWUsICsgb25lIGZsYWcgYml0ICovCisJX19sZTE2IFZlcnNpb25OdW1iZXI7ICAvKiBtdXN0IGJlIDMgb3IgNCAqLwogCV9fbGUxNiBTaXplOwogCV9fbGUxNiBTZXJ2ZXJUeXBlOyAvKiAweDAwMDEgPSByb290IHRhcmdldHM7IDB4MDAwMCA9IGxpbmsgdGFyZ2V0cyAqLwotCV9fbGUxNiBSZWZlcnJhbEVudHJ5RmxhZ3M7IC8qIDB4MDIwMCBiaXQgc2V0IG9ubHkgZm9yIGRvbWFpbgotCQkJCSAgICAgIG9yIERDIHJlZmVycmFsIHJlc3BvbmNlICovCisJX19sZTE2IFJlZmVycmFsRW50cnlGbGFnczsKIAlfX2xlMzIgVGltZVRvTGl2ZTsKIAlfX2xlMTYgRGZzUGF0aE9mZnNldDsKIAlfX2xlMTYgRGZzQWx0ZXJuYXRlUGF0aE9mZnNldDsKIAlfX2xlMTYgTmV0d29ya0FkZHJlc3NPZmZzZXQ7IC8qIG9mZnNldCBvZiB0aGUgbGluayB0YXJnZXQgKi8KLQlfX2xlMTYgU2VydmljZVNpdGVHdWlkOworCV9fdTggICBTZXJ2aWNlU2l0ZUd1aWRbMTZdOyAgLyogTUJaLCBpZ25vcmVkICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFJFRkVSUkFMMzsKIAogdHlwZWRlZiBzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbl9nZXRfZGZzX3JlZmVyX3JzcCB7CkBAIC0xOTQ2LDQ4ICsxOTUzLDE1IEBACiAJX191OCBQYWQ7CiAJX19sZTE2IFBhdGhDb25zdW1lZDsKIAlfX2xlMTYgTnVtYmVyT2ZSZWZlcnJhbHM7Ci0JX19sZTE2IERGU0ZsYWdzOwotCV9fdTE2IFBhZDI7CisJX19sZTMyIERGU0ZsYWdzOwogCVJFRkVSUkFMMyByZWZlcnJhbHNbMV07CS8qIGFycmF5IG9mIGxldmVsIDMgZGZzX3JlZmVycmFsIHN0cnVjdHVyZXMgKi8KIAkvKiBmb2xsb3dlZCBieSB0aGUgc3RyaW5ncyBwb2ludGVkIHRvIGJ5IHRoZSByZWZlcnJhbCBzdHJ1Y3R1cmVzICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFRSQU5TQUNUSU9OMl9HRVRfREZTX1JFRkVSX1JTUDsKIAogLyogREZTIEZsYWdzICovCi0jZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMQotI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDIKLQotLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KLS8qCi0gKiBMaXN0IG9mIGlvY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgbG9vayB0byBiZSBvZiBpbnRlcmVzdCB0byByZW1vdGUgY2xpZW50cwotICogbGlrZSB0aGlzIG9uZS4gIE5lZWQgdG8gZG8gc29tZSBleHBlcmltZW50YXRpb24gdG8gbWFrZSBzdXJlIHRoZXkgYWxsIHdvcmsKLSAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKLSAqIHdvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKLSAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCi0gKi8KLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAotI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKLSNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4Ci0jZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQwotI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MKLSNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QwotI2RlZmluZSBGU0NUTF9GSUxFU1lTX0dFVF9TVEFUSVNUSUNTIDB4MDAwOTAwOTAKLSNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0Ci0jZGVmaW5lIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5UICAgICAgMHgwMDA5MDBBOAotI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMKLSNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0Ci0jZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOAotI2RlZmluZSBGU0NUTF9TRVRfRU5DUllQVElPTiAgICAgICAgIDB4MDAwOTAwRDcKLSNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCCi0jZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERgotI2RlZmluZSBGU0NUTF9SRUFEX1JBV19FTkNSWVBURUQgICAgIDB4MDAwOTAwRTMKLSNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwCi0jZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAotCi0jZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMwotI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKLSNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CisjZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMDAwMDEgLyogYWxsIHRhcmdldHMgYXJlIERGUyByb290cyAqLworI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDAwMDAyIC8qIG5vIGZ1cnRoZXIgcmVmIHJlcXVlc3RzIG5lZWRlZCAqLworI2RlZmluZSBERlNSRUZfVEFSR0VUX0ZBSUxCQUNLICAweDAwMDAwMDA0IC8qIG9ubHkgZm9yIERGUyByZWZlcnJhbCB2ZXJzaW9uIDQgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MDgsOCArMjQ4Miw2IEBACiAJNikgVXNlIG5hbm9zZWNvbmQgdGltZXN0YW1wcyB0aHJvdWdob3V0IGFsbCB0aW1lIGZpZWxkcyBpZgogCSAgIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZsYWcgaXMgc2V0CiAJNykgc2VuZGZpbGUgLSBoYW5kbGUgYmFzZWQgY29weQotCTgpIERpcmVjdCBpL28KLQk5KSBNaXNjIGZjbnRscz8KIAogCXdoYXQgYWJvdXQgZml4aW5nIDY0IGJpdCBhbGlnbm1lbnQKIApAQCAtMjYyOCw3ICsyNjAwLDUgQEAKIAlfX2xlNjQJbW9kZTsgLyogbGlzdCBvZiBhY3R1YWwgYXR0cmlidXRlIGJpdHMgb24gdGhpcyBpbm9kZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGSUxFX0NIQVRUUl9JTkZPOyAgLyogZXh0IGF0dHJpYnV0ZXMKIAkJCQkJCShjaGF0dHIsIGNoZmxhZ3MpIGxldmVsIDB4MjA2ICovCi0KLSNlbmRpZgotCisjZW5kaWYgCQkJCS8qIFBPU0lYICovCiAjZW5kaWYJCQkJLyogX0NJRlNQRFVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggMzgyYmE2Mi4uNDE2NzcxNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC00Miw3ICs0MiwxMSBAQAogI2RlZmluZSBHZXRYaWQoKSAoaW50KV9HZXRYaWQoKTsgY0ZZSSgxLCgiQ0lGUyBWRlM6IGluICVzIGFzIFhpZDogJWQgd2l0aCB1aWQ6ICVkIixfX2Z1bmNfXywgeGlkLGN1cnJlbnRfZnN1aWQoKSkpOwogI2RlZmluZSBGcmVlWGlkKGN1cnJfeGlkKSB7X0ZyZWVYaWQoY3Vycl94aWQpOyBjRllJKDEsKCJDSUZTIFZGUzogbGVhdmluZyAlcyAoeGlkID0gJWQpIHJjID0gJWQiLF9fZnVuY19fLGN1cnJfeGlkLChpbnQpcmMpKTt9CiBleHRlcm4gY2hhciAqYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIGNoYXIgKmNpZnNfYnVpbGRfcGF0aF90b19yb290KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwogZXh0ZXJuIGNoYXIgKmJ1aWxkX3dpbGRjYXJkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGlyZW50cnkpOworZXh0ZXJuIGNoYXIgKmNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKnNiX21vdW50ZGF0YSwKKwkJY29uc3QgY2hhciAqZnVsbHBhdGgsIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKKwkJY2hhciAqKmRldm5hbWUpOwogLyogZXh0ZXJuIHZvaWQgcmVuZXdfcGFyZW50YWxfdGltZXN0YW1wcyhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7Ki8KIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUoY29uc3QgdW5zaWduZWQgaW50IC8qIHhpZCAqLyAsIHN0cnVjdCBjaWZzU2VzSW5mbyAqLAogCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCkBAIC05MSw2ICs5NSwxMiBAQAogZXh0ZXJuIF9fbGU2NCBjbnZydERvc0NpZnNUbShfX3UxNiBkYXRlLCBfX3UxNiB0aW1lKTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY252cnREb3NVbml4VG0oX191MTYgZGF0ZSwgX191MTYgdGltZSk7CiAKK2V4dGVybiBpbnQgY2lmc19wb3NpeF9vcGVuKGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICoqcGlub2RlLAorCQkJICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGludCBvZmxhZ3MsCisJCQkgICBpbnQgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKTsKK2V4dGVybiB2b2lkIHBvc2l4X2ZpbGxfaW5faW5vZGUoc3RydWN0IGlub2RlICp0bXBfaW5vZGUsCisJCQkJRklMRV9VTklYX0JBU0lDX0lORk8gKnBEYXRhLCBpbnQgaXNOZXdJbm9kZSk7CitleHRlcm4gc3RydWN0IGlub2RlICpjaWZzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCAqaW51bSk7CiBleHRlcm4gaW50IGNpZnNfZ2V0X2lub2RlX2luZm8oc3RydWN0IGlub2RlICoqcGlub2RlLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoX3BhdGgsCiAJCQlGSUxFX0FMTF9JTkZPICpwZmlsZV9pbmZvLApAQCAtMjc3LDYgKzI4Nyw5IEBACiBleHRlcm4gaW50IENJRlNTTUJDbG9zZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgaW50IHNtYl9maWxlX2lkKTsKIAorZXh0ZXJuIGludCBDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKKwkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CisKIGV4dGVybiBpbnQgQ0lGU1NNQlJlYWQoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBuZXRmaWQsIHVuc2lnbmVkIGludCBjb3VudCwKIAkJCWNvbnN0IF9fdTY0IGxzZWVrLCB1bnNpZ25lZCBpbnQgKm5ieXRlcywgY2hhciAqKmJ1ZiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggNTUyNjQyYS4uYmMwOWM5OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTUyOCwxNCArNTI4LDE1IEBACiAJCXNlcnZlci0+bWF4UmVxID0gbGUxNl90b19jcHUocnNwLT5NYXhNcHhDb3VudCk7CiAJCXNlcnZlci0+bWF4QnVmID0gbWluKChfX3UzMilsZTE2X3RvX2NwdShyc3AtPk1heEJ1ZlNpemUpLAogCQkJCShfX3UzMilDSUZTTWF4QnVmU2l6ZSArIE1BWF9DSUZTX0hEUl9TSVpFKTsKKwkJc2VydmVyLT5tYXhfdmNzID0gbGUxNl90b19jcHUocnNwLT5NYXhOdW1iZXJWY3MpOwogCQlHRVRVMzIoc2VydmVyLT5zZXNzaWQpID0gbGUzMl90b19jcHUocnNwLT5TZXNzaW9uS2V5KTsKIAkJLyogZXZlbiB0aG91Z2ggd2UgZG8gbm90IHVzZSByYXcgd2UgbWlnaHQgYXMgd2VsbCBzZXQgdGhpcwogCQlhY2N1cmF0ZWx5LCBpbiBjYXNlIHdlIGV2ZXIgZmluZCBhIG5lZWQgZm9yIGl0ICovCiAJCWlmICgobGUxNl90b19jcHUocnNwLT5SYXdNb2RlKSAmIFJBV19FTkFCTEUpID09IFJBV19FTkFCTEUpIHsKLQkJCXNlcnZlci0+bWF4UncgPSAweEZGMDA7CisJCQlzZXJ2ZXItPm1heF9ydyA9IDB4RkYwMDsKIAkJCXNlcnZlci0+Y2FwYWJpbGl0aWVzID0gQ0FQX01QWF9NT0RFIHwgQ0FQX1JBV19NT0RFOwogCQl9IGVsc2UgewotCQkJc2VydmVyLT5tYXhSdyA9IDA7Lyogd2UgZG8gbm90IG5lZWQgdG8gdXNlIHJhdyBhbnl3YXkgKi8KKwkJCXNlcnZlci0+bWF4X3J3ID0gMDsvKiBkbyBub3QgbmVlZCB0byB1c2UgcmF3IGFueXdheSAqLwogCQkJc2VydmVyLT5jYXBhYmlsaXRpZXMgPSBDQVBfTVBYX01PREU7CiAJCX0KIAkJdG1wID0gKF9fczE2KWxlMTZfdG9fY3B1KHJzcC0+U2VydmVyVGltZVpvbmUpOwpAQCAtNjM4LDcgKzYzOSw3IEBACiAJLyogcHJvYmFibHkgbm8gbmVlZCB0byBzdG9yZSBhbmQgY2hlY2sgbWF4dmNzICovCiAJc2VydmVyLT5tYXhCdWYgPSBtaW4obGUzMl90b19jcHUocFNNQnItPk1heEJ1ZmZlclNpemUpLAogCQkJKF9fdTMyKSBDSUZTTWF4QnVmU2l6ZSArIE1BWF9DSUZTX0hEUl9TSVpFKTsKLQlzZXJ2ZXItPm1heFJ3ID0gbGUzMl90b19jcHUocFNNQnItPk1heFJhd1NpemUpOworCXNlcnZlci0+bWF4X3J3ID0gbGUzMl90b19jcHUocFNNQnItPk1heFJhd1NpemUpOwogCWNGWUkoREJHMiwgKCJNYXggYnVmID0gJWQiLCBzZXMtPnNlcnZlci0+bWF4QnVmKSk7CiAJR0VUVTMyKHNlcy0+c2VydmVyLT5zZXNzaWQpID0gbGUzMl90b19jcHUocFNNQnItPlNlc3Npb25LZXkpOwogCXNlcnZlci0+Y2FwYWJpbGl0aWVzID0gbGUzMl90b19jcHUocFNNQnItPkNhcGFiaWxpdGllcyk7CkBAIC0xOTMzLDYgKzE5MzQsMjcgQEAKIH0KIAogaW50CitDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgaW50IHNtYl9maWxlX2lkKQoreworCWludCByYyA9IDA7CisJRkxVU0hfUkVRICpwU01CID0gTlVMTDsKKwljRllJKDEsICgiSW4gQ0lGU1NNQkZsdXNoIikpOworCisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX0ZMVVNILCAxLCB0Y29uLCAodm9pZCAqKikgJnBTTUIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcFNNQi0+RmlsZUlEID0gKF9fdTE2KSBzbWJfZmlsZV9pZDsKKwlwU01CLT5CeXRlQ291bnQgPSAwOworCXJjID0gU2VuZFJlY2VpdmVOb1JzcCh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsIDApOworCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fZmx1c2hlcyk7CisJaWYgKHJjKQorCQljRVJST1IoMSwgKCJTZW5kIGVycm9yIGluIEZsdXNoID0gJWQiLCByYykpOworCisJcmV0dXJuIHJjOworfQorCitpbnQKIENJRlNTTUJSZW5hbWUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkgICAgICBjb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAogCSAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQpAQCAtMjM1NSw4ICsyMzc3LDEwIEBACiAJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKLQkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW5dID0gMDsJLyogcGFkICovCi0JCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDA0OworCisJCS8qIHByb3RvY29sIHNwZWNpZmllcyBBU0NJSSBidWZmZXIgZm9ybWF0ICgweDA0KSBmb3IgdW5pY29kZSAqLworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAweDA0OworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDFdID0gMHgwMDsgLyogcGFkICovCiAJCW5hbWVfbGVuMiA9CiAJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikmcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwKIAkJCQkgICAgIHRvTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAyMjA5YmU5Li4wZGUzYjU2MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CkBAIC0zNSw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCiAjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCkBAIC05NSw2ICs5NSw3IEBACiAJYm9vbCBsb2NhbF9sZWFzZToxOyAvKiBjaGVjayBsZWFzZXMgb25seSBvbiBsb2NhbCBzeXN0ZW0sIG5vdCByZW1vdGUgKi8KIAlib29sIG5vYmxvY2tzbmQ6MTsKIAlib29sIG5vYXV0b3R1bmU6MTsKKwlib29sIG5vc3RyaWN0c3luYzoxOyAvKiBkbyBub3QgZm9yY2UgZXhwZW5zaXZlIFNNQmZsdXNoIG9uIGV2ZXJ5IHN5bmMgKi8KIAl1bnNpZ25lZCBpbnQgcnNpemU7CiAJdW5zaWduZWQgaW50IHdzaXplOwogCXVuc2lnbmVkIGludCBzb2Nrb3B0OwpAQCAtMTI3NCw2ICsxMjc1LDEwIEBACiAJCQl2b2wtPmludHIgPSAwOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJpbnRyIiwgNCkgPT0gMCkgewogCQkJdm9sLT5pbnRyID0gMTsKKwkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibm9zdHJpY3RzeW5jIiwgMTIpID09IDApIHsKKwkJCXZvbC0+bm9zdHJpY3RzeW5jID0gMTsKKwkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic3RyaWN0c3luYyIsIDEwKSA9PSAwKSB7CisJCQl2b2wtPm5vc3RyaWN0c3luYyA9IDA7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInNlcnZlcmlubyIsIDcpID09IDApIHsKIAkJCXZvbC0+c2VydmVyX2lubyA9IDE7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vc2VydmVyaW5vIiwgOSkgPT0gMCkgewpAQCAtMTM3OSw4ICsxMzg0LDggQEAKIAkJICAgICBzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2FkZHIuc19hZGRyKSkKIAkJCWNvbnRpbnVlOwogCQllbHNlIGlmIChhZGRyLT5zc19mYW1pbHkgPT0gQUZfSU5FVDYgJiYKLQkJCSBtZW1jbXAoJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyLAotCQkJCSZhZGRyNi0+c2luNl9hZGRyLCBzaXplb2YoYWRkcjYtPnNpbjZfYWRkcikpKQorCQkJICFpcHY2X2FkZHJfZXF1YWwoJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyLAorCQkJCQkgICZhZGRyNi0+c2luNl9hZGRyKSkKIAkJCWNvbnRpbnVlOwogCiAJCSsrc2VydmVyLT5zcnZfY291bnQ7CkBAIC0yMTYwLDYgKzIxNjUsOCBAQAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX1VOWF9FTVVMOwogCWlmIChwdm9sdW1lX2luZm8tPm5vYnJsKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX05PX0JSTDsKKwlpZiAocHZvbHVtZV9pbmZvLT5ub3N0cmljdHN5bmMpCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9TU1lOQzsKIAlpZiAocHZvbHVtZV9pbmZvLT5tYW5kX2xvY2spCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9QT1NJWEJSTDsKIAlpZiAocHZvbHVtZV9pbmZvLT5jaWZzX2FjbCkKQEAgLTIxODAsNiArMjE4NywzMyBAQAogCQkJICAgIm1vdW50IG9wdGlvbiBzdXBwb3J0ZWQiKSk7CiB9CiAKK3N0YXRpYyBpbnQKK2lzX3BhdGhfYWNjZXNzaWJsZShpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAorCQkgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBjb25zdCBjaGFyICpmdWxsX3BhdGgpCit7CisJaW50IHJjOworCV9fdTY0IGlub2RlX251bTsKKwlGSUxFX0FMTF9JTkZPICpwZmlsZV9pbmZvOworCisJcmMgPSBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZpbm9kZV9udW0sCisJCQkJICAgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJCSAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKKwkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwlpZiAocmMgIT0gLUVPUE5PVFNVUFApCisJCXJldHVybiByYzsKKworCXBmaWxlX2luZm8gPSBrbWFsbG9jKHNpemVvZihGSUxFX0FMTF9JTkZPKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBmaWxlX2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYyA9IENJRlNTTUJRUGF0aEluZm8oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIHBmaWxlX2luZm8sCisJCQkgICAgICAwIC8qIG5vdCBsZWdhY3kgKi8sIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCSAgICAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKKwkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJa2ZyZWUocGZpbGVfaW5mbyk7CisJcmV0dXJuIHJjOworfQorCiBpbnQKIGNpZnNfbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwKIAkgICBjaGFyICptb3VudF9kYXRhLCBjb25zdCBjaGFyICpkZXZuYW1lKQpAQCAtMjE5MCw2ICsyMjI0LDcgQEAKIAlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnBTZXNJbmZvID0gTlVMTDsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uID0gTlVMTDsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnZUY3AgPSBOVUxMOworCWNoYXIgICAqZnVsbF9wYXRoOwogCiAJeGlkID0gR2V0WGlkKCk7CiAKQEAgLTI0MjYsNiArMjQ2MSwyMyBAQAogCQljaWZzX3NiLT5yc2l6ZSA9IG1pbihjaWZzX3NiLT5yc2l6ZSwKIAkJCSAgICAgICAodGNvbi0+c2VzLT5zZXJ2ZXItPm1heEJ1ZiAtIE1BWF9DSUZTX0hEUl9TSVpFKSk7CiAKKwlpZiAoIXJjICYmIGNpZnNfc2ItPnByZXBhdGhsZW4pIHsKKwkJLyogYnVpbGRfcGF0aF90b19yb290IHdvcmtzIG9ubHkgd2hlbiB3ZSBoYXZlIGEgdmFsaWQgdGNvbiAqLworCQlmdWxsX3BhdGggPSBjaWZzX2J1aWxkX3BhdGhfdG9fcm9vdChjaWZzX3NiKTsKKwkJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIG1vdW50X2ZhaWxfY2hlY2s7CisJCX0KKwkJcmMgPSBpc19wYXRoX2FjY2Vzc2libGUoeGlkLCB0Y29uLCBjaWZzX3NiLCBmdWxsX3BhdGgpOworCQlpZiAocmMpIHsKKwkJCWNFUlJPUigxLCAoIlBhdGggJXMgaW4gbm90IGFjY2Vzc2libGU6ICVkIiwKKwkJCQkJCWZ1bGxfcGF0aCwgcmMpKTsKKwkJCWtmcmVlKGZ1bGxfcGF0aCk7CisJCQlnb3RvIG1vdW50X2ZhaWxfY2hlY2s7CisJCX0KKwkJa2ZyZWUoZnVsbF9wYXRoKTsKKwl9CisKIAkvKiB2b2x1bWVfaW5mby0+cGFzc3dvcmQgaXMgZnJlZWQgYWJvdmUgd2hlbiBleGlzdGluZyBzZXNzaW9uIGZvdW5kCiAJKGluIHdoaWNoIGNhc2UgaXQgaXMgbm90IG5lZWRlZCBhbnltb3JlKSBidXQgd2hlbiBuZXcgc2VzaW9uIGlzIGNyZWF0ZWQKIAl0aGUgcGFzc3dvcmQgcHRyIGlzIHB1dCBpbiB0aGUgbmV3IHNlc3Npb24gc3RydWN0dXJlIChpbiB3aGljaCBjYXNlIHRoZQpAQCAtMzYyMiw3ICszNjc0LDcgQEAKIAkJCSAgICBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKIAkJCQlrZnJlZSh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKTsKIAkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtID0KLQkJCQkgICAga3phbGxvYyhsZW5ndGggKyAyLCBHRlBfS0VSTkVMKTsKKwkJCQkgICAga3phbGxvYygyKihsZW5ndGggKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pCiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZSgKIAkJCQkJCXRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0sCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCA5NjRhYWQwLi5mOWI2ZjY4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogICB2ZnMgb3BlcmF0aW9ucyB0aGF0IGRlYWwgd2l0aCBkZW50cmllcwogICoKLSAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA4CisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyOSw2ICsxMjksODAgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCitpbnQgY2lmc19wb3NpeF9vcGVuKGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICoqcGlub2RlLAorCQkgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGludCBvZmxhZ3MsCisJCSAgICBpbnQgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKQoreworCWludCByYzsKKwlfX3UzMiBvcGxvY2s7CisJRklMRV9VTklYX0JBU0lDX0lORk8gKnByZXNwX2RhdGE7CisJX191MzIgcG9zaXhfZmxhZ3MgPSAwOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKKworCWNGWUkoMSwgKCJwb3NpeCBvcGVuICVzIiwgZnVsbF9wYXRoKSk7CisKKwlwcmVzcF9kYXRhID0ga3phbGxvYyhzaXplb2YoRklMRV9VTklYX0JBU0lDX0lORk8pLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJlc3BfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyogU28gZmFyIGNpZnMgcG9zaXggZXh0ZW5zaW9ucyBjYW4gb25seSBtYXAgdGhlIGZvbGxvd2luZyBmbGFncy4KKyAgIFRoZXJlIGFyZSBvdGhlciB2YWxpZCBmbW9kZSBvZmxhZ3Mgc3VjaCBhcyBGTU9ERV9MU0VFSywgRk1PREVfUFJFQUQsIGJ1dAorICAgc28gZmFyIHdlIGRvIG5vdCBzZWVtIHRvIG5lZWQgdGhlbSwgYW5kIHdlIGNhbiB0cmVhdCB0aGVtIGFzIGxvY2FsIG9ubHkgKi8KKwlpZiAoKG9mbGFncyAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSA9PQorCQkoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKSkKKwkJcG9zaXhfZmxhZ3MgPSBTTUJfT19SRFdSOworCWVsc2UgaWYgKG9mbGFncyAmIEZNT0RFX1JFQUQpCisJCXBvc2l4X2ZsYWdzID0gU01CX09fUkRPTkxZOworCWVsc2UgaWYgKG9mbGFncyAmIEZNT0RFX1dSSVRFKQorCQlwb3NpeF9mbGFncyA9IFNNQl9PX1dST05MWTsKKwlpZiAob2ZsYWdzICYgT19DUkVBVCkKKwkJcG9zaXhfZmxhZ3MgfD0gU01CX09fQ1JFQVQ7CisJaWYgKG9mbGFncyAmIE9fRVhDTCkKKwkJcG9zaXhfZmxhZ3MgfD0gU01CX09fRVhDTDsKKwlpZiAob2ZsYWdzICYgT19UUlVOQykKKwkJcG9zaXhfZmxhZ3MgfD0gU01CX09fVFJVTkM7CisJaWYgKG9mbGFncyAmIE9fQVBQRU5EKQorCQlwb3NpeF9mbGFncyB8PSBTTUJfT19BUFBFTkQ7CisJaWYgKG9mbGFncyAmIE9fU1lOQykKKwkJcG9zaXhfZmxhZ3MgfD0gU01CX09fU1lOQzsKKwlpZiAob2ZsYWdzICYgT19ESVJFQ1RPUlkpCisJCXBvc2l4X2ZsYWdzIHw9IFNNQl9PX0RJUkVDVE9SWTsKKwlpZiAob2ZsYWdzICYgT19OT0ZPTExPVykKKwkJcG9zaXhfZmxhZ3MgfD0gU01CX09fTk9GT0xMT1c7CisJaWYgKG9mbGFncyAmIE9fRElSRUNUKQorCQlwb3NpeF9mbGFncyB8PSBTTUJfT19ESVJFQ1Q7CisKKworCXJjID0gQ0lGU1BPU0lYQ3JlYXRlKHhpZCwgY2lmc19zYi0+dGNvbiwgcG9zaXhfZmxhZ3MsIG1vZGUsCisJCQlwbmV0ZmlkLCBwcmVzcF9kYXRhLCAmb3Bsb2NrLCBmdWxsX3BhdGgsCisJCQljaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKKwkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCWlmIChyYykKKwkJZ290byBwb3NpeF9vcGVuX3JldDsKKworCWlmIChwcmVzcF9kYXRhLT5UeXBlID09IGNwdV90b19sZTMyKC0xKSkKKwkJZ290byBwb3NpeF9vcGVuX3JldDsgLyogb3BlbiBvaywgY2FsbGVyIGRvZXMgcXBhdGhpbmZvICovCisKKwkvKiBnZXQgbmV3IGlub2RlIGFuZCBzZXQgaXQgdXAgKi8KKwlpZiAoIXBpbm9kZSkKKwkJZ290byBwb3NpeF9vcGVuX3JldDsgLyogY2FsbGVyIGRvZXMgbm90IG5lZWQgaW5mbyAqLworCisJaWYgKCpwaW5vZGUgPT0gTlVMTCkKKwkJKnBpbm9kZSA9IGNpZnNfbmV3X2lub2RlKHNiLCAmcHJlc3BfZGF0YS0+VW5pcXVlSWQpOworCS8qIGVsc2UgYW4gaW5vZGUgd2FzIHBhc3NlZCBpbi4gVXBkYXRlIGl0cyBpbmZvLCBkb24ndCBjcmVhdGUgb25lICovCisKKwkvKiBXZSBkbyBub3QgbmVlZCB0byBjbG9zZSB0aGUgZmlsZSBpZiBuZXdfaW5vZGUgZmFpbHMgc2luY2UKKwkgICB0aGUgY2FsbGVyIHdpbGwgcmV0cnkgcXBhdGhpbmZvIGFzIGxvbmcgYXMgaW5vZGUgaXMgbnVsbCAqLworCWlmICgqcGlub2RlID09IE5VTEwpCisJCWdvdG8gcG9zaXhfb3Blbl9yZXQ7CisKKwlwb3NpeF9maWxsX2luX2lub2RlKCpwaW5vZGUsIHByZXNwX2RhdGEsIDEpOworCitwb3NpeF9vcGVuX3JldDoKKwlrZnJlZShwcmVzcF9kYXRhKTsKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyB2b2lkIHNldHVwX2NpZnNfZGVudHJ5KHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUpCkBAIC0xNTAsNyArMjI0LDE0IEBACiAJaW50IHhpZDsKIAlpbnQgY3JlYXRlX29wdGlvbnMgPSBDUkVBVEVfTk9UX0RJUjsKIAlpbnQgb3Bsb2NrID0gMDsKLQkvKiBCQiBiZWxvdyBhY2Nlc3MgaXMgdG9vIG11Y2ggZm9yIHRoZSBta25vZCB0byByZXF1ZXN0ICovCisJaW50IG9mbGFnczsKKwkvKgorCSAqIEJCIGJlbG93IGFjY2VzcyBpcyBwcm9iYWJseSB0b28gbXVjaCBmb3IgbWtub2QgdG8gcmVxdWVzdAorCSAqICAgIGJ1dCB3ZSBoYXZlIHRvIGRvIHF1ZXJ5IGFuZCBzZXRwYXRoaW5mbyBzbyByZXF1ZXN0aW5nCisJICogICAgbGVzcyBjb3VsZCBmYWlsICh1bmxlc3Mgd2Ugd2FudCB0byByZXF1ZXN0IGdldGF0ciBhbmQgc2V0YXRyCisJICogICAgcGVybWlzc2lvbnMgKG9ubHkpLiAgQXQgbGVhc3QgZm9yIFBPU0lYIHdlIGRvIG5vdCBoYXZlIHRvCisJICogICAgcmVxdWVzdCBzbyBtdWNoLgorCSAqLwogCWludCBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURTsKIAlfX3UxNiBmaWxlSGFuZGxlOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CkBAIC0xNzQsMTMgKzI1NSw0MyBAQAogCX0KIAogCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwlpZiAob3Bsb2NrRW5hYmxlZCkKKwkJb3Bsb2NrID0gUkVRX09QTE9DSzsKKworCWlmIChuZCAmJiAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pKQorCQlvZmxhZ3MgPSBuZC0+aW50ZW50Lm9wZW4uZmxhZ3M7CisJZWxzZQorCQlvZmxhZ3MgPSBGTU9ERV9SRUFEOworCisJaWYgKHRjb24tPnVuaXhfZXh0ICYmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgorCSAgICAoQ0lGU19VTklYX1BPU0lYX1BBVEhfT1BTX0NBUCAmCisJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgeworCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZuZXdpbm9kZSwgaW5vZGUtPmlfc2IsCisJCQkJICAgICBtb2RlLCBvZmxhZ3MsICZvcGxvY2ssICZmaWxlSGFuZGxlLCB4aWQpOworCQkvKiBFSU8gY291bGQgaW5kaWNhdGUgdGhhdCAocG9zaXggb3Blbikgb3BlcmF0aW9uIGlzIG5vdAorCQkgICBzdXBwb3J0ZWQsIGRlc3BpdGUgd2hhdCBzZXJ2ZXIgY2xhaW1lZCBpbiBjYXBhYmlsaXR5CisJCSAgIG5lZ290YXRpb24uICBFUkVNT1RFIGluZGljYXRlcyBERlMganVuY3Rpb24sIHdoaWNoIGlzIG5vdAorCQkgICBoYW5kbGVkIGluIHBvc2l4IG9wZW4gKi8KKworCQlpZiAoKHJjID09IDApICYmIChuZXdpbm9kZSA9PSBOVUxMKSkKKwkJCWdvdG8gY2lmc19jcmVhdGVfZ2V0X2ZpbGVfaW5mbzsgLyogcXVlcnkgaW5vZGUgaW5mbyAqLworCQllbHNlIGlmIChyYyA9PSAwKSAvKiBzdWNjZXNzLCBubyBuZWVkIHRvIHF1ZXJ5ICovCisJCQlnb3RvIGNpZnNfY3JlYXRlX3NldF9kZW50cnk7CisJCWVsc2UgaWYgKChyYyAhPSAtRUlPKSAmJiAocmMgIT0gLUVSRU1PVEUpICYmCisJCQkgKHJjICE9IC1FT1BOT1RTVVBQKSkgLyogcGF0aCBub3QgZm91bmQgb3IgbmV0IGVyciAqLworCQkJZ290byBjaWZzX2NyZWF0ZV9vdXQ7CisJCS8qIGVsc2UgZmFsbHRocm91Z2ggdG8gcmV0cnksIHVzaW5nIG9sZGVyIG9wZW4gY2FsbCwgdGhpcyBpcworCQkgICBjYXNlIHdoZXJlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgU01CIGxldmVsLCBhbmQKKwkJICAgZmFsc2VseSBjbGFpbXMgY2FwYWJpbGl0eSAoYWxzbyBnZXQgaGVyZSBmb3IgREZTIGNhc2UKKwkJICAgd2hpY2ggc2hvdWxkIGJlIHJhcmUgZm9yIHBhdGggbm90IGNvdmVyZWQgb24gZmlsZXMpICovCisJfQogCiAJaWYgKG5kICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikpIHsKLQkJaW50IG9mbGFncyA9IG5kLT5pbnRlbnQub3Blbi5mbGFnczsKLQorCQkvKiBpZiB0aGUgZmlsZSBpcyBnb2luZyB0byBzdGF5IG9wZW4sIHRoZW4gd2UKKwkJICAgbmVlZCB0byBzZXQgdGhlIGRlc2lyZWQgYWNjZXNzIHByb3Blcmx5ICovCiAJCWRlc2lyZWRBY2Nlc3MgPSAwOwogCQlpZiAob2ZsYWdzICYgRk1PREVfUkVBRCkKLQkJCWRlc2lyZWRBY2Nlc3MgfD0gR0VORVJJQ19SRUFEOworCQkJZGVzaXJlZEFjY2VzcyB8PSBHRU5FUklDX1JFQUQ7IC8qIGlzIHRoaXMgdG9vIGxpdHRsZT8gKi8KIAkJaWYgKG9mbGFncyAmIEZNT0RFX1dSSVRFKSB7CiAJCQlkZXNpcmVkQWNjZXNzIHw9IEdFTkVSSUNfV1JJVEU7CiAJCQlpZiAoIShvZmxhZ3MgJiBGTU9ERV9SRUFEKSkKQEAgLTE5OSw4ICszMTAsNiBAQAogCiAJLyogQkIgYWRkIHByb2Nlc3NpbmcgdG8gc2V0IGVxdWl2YWxlbnQgb2YgbW9kZSAtIGUuZy4gdmlhIENyZWF0ZVggd2l0aAogCSAgIEFDTHMgKi8KLQlpZiAob3Bsb2NrRW5hYmxlZCkKLQkJb3Bsb2NrID0gUkVRX09QTE9DSzsKIAogCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKEZJTEVfQUxMX0lORk8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpIHsKQEAgLTIzMywxMTYgKzM0MiwxMTIgQEAKIAl9CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgKCJjaWZzX2NyZWF0ZSByZXR1cm5lZCAweCV4IiwgcmMpKTsKLQl9IGVsc2UgewotCQkvKiBJZiBPcGVuIHJlcG9ydGVkIHRoYXQgd2UgYWN0dWFsbHkgY3JlYXRlZCBhIGZpbGUKLQkJdGhlbiB3ZSBub3cgaGF2ZSB0byBzZXQgdGhlIG1vZGUgaWYgcG9zc2libGUgKi8KLQkJaWYgKCh0Y29uLT51bml4X2V4dCkgJiYgKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikpIHsKLQkJCXN0cnVjdCBjaWZzX3VuaXhfc2V0X2luZm9fYXJncyBhcmdzID0geworCQlnb3RvIGNpZnNfY3JlYXRlX291dDsKKwl9CisKKwkvKiBJZiBPcGVuIHJlcG9ydGVkIHRoYXQgd2UgYWN0dWFsbHkgY3JlYXRlZCBhIGZpbGUKKwkgICB0aGVuIHdlIG5vdyBoYXZlIHRvIHNldCB0aGUgbW9kZSBpZiBwb3NzaWJsZSAqLworCWlmICgodGNvbi0+dW5peF9leHQpICYmIChvcGxvY2sgJiBDSUZTX0NSRUFURV9BQ1RJT04pKSB7CisJCXN0cnVjdCBjaWZzX3VuaXhfc2V0X2luZm9fYXJncyBhcmdzID0gewogCQkJCS5tb2RlCT0gbW9kZSwKIAkJCQkuY3RpbWUJPSBOT19DSEFOR0VfNjQsCiAJCQkJLmF0aW1lCT0gTk9fQ0hBTkdFXzY0LAogCQkJCS5tdGltZQk9IE5PX0NIQU5HRV82NCwKIAkJCQkuZGV2aWNlCT0gMCwKLQkJCX07CisJCX07CiAKLQkJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VUX1VJRCkgewotCQkJCWFyZ3MudWlkID0gKF9fdTY0KSBjdXJyZW50X2ZzdWlkKCk7Ci0JCQkJaWYgKGlub2RlLT5pX21vZGUgJiBTX0lTR0lEKQotCQkJCQlhcmdzLmdpZCA9IChfX3U2NCkgaW5vZGUtPmlfZ2lkOwotCQkJCWVsc2UKLQkJCQkJYXJncy5naWQgPSAoX191NjQpIGN1cnJlbnRfZnNnaWQoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYXJncy51aWQgPSBOT19DSEFOR0VfNjQ7Ci0JCQkJYXJncy5naWQgPSBOT19DSEFOR0VfNjQ7Ci0JCQl9Ci0JCQlDSUZTU01CVW5peFNldEluZm8oeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZhcmdzLAotCQkJCWNpZnNfc2ItPmxvY2FsX25scywKLQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCi0JCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVRfVUlEKSB7CisJCQlhcmdzLnVpZCA9IChfX3U2NCkgY3VycmVudF9mc3VpZCgpOworCQkJaWYgKGlub2RlLT5pX21vZGUgJiBTX0lTR0lEKQorCQkJCWFyZ3MuZ2lkID0gKF9fdTY0KSBpbm9kZS0+aV9naWQ7CisJCQllbHNlCisJCQkJYXJncy5naWQgPSAoX191NjQpIGN1cnJlbnRfZnNnaWQoKTsKIAkJfSBlbHNlIHsKLQkJCS8qIEJCIGltcGxlbWVudCBtb2RlIHNldHRpbmcgdmlhIFdpbmRvd3Mgc2VjdXJpdHkKLQkJCSAgIGRlc2NyaXB0b3JzIGUuZy4gKi8KLQkJCS8qIENJRlNTTUJXaW5TZXRQZXJtcyh4aWQsdGNvbixwYXRoLG1vZGUsLTEsLTEsbmxzKTsqLwotCi0JCQkvKiBDb3VsZCBzZXQgci9vIGRvcyBhdHRyaWJ1dGUgaWYgbW9kZSAmIDAyMjIgPT0gMCAqLworCQkJYXJncy51aWQgPSBOT19DSEFOR0VfNjQ7CisJCQlhcmdzLmdpZCA9IE5PX0NIQU5HRV82NDsKIAkJfQorCQlDSUZTU01CVW5peFNldEluZm8oeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZhcmdzLAorCQkJY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJfSBlbHNlIHsKKwkJLyogQkIgaW1wbGVtZW50IG1vZGUgc2V0dGluZyB2aWEgV2luZG93cyBzZWN1cml0eQorCQkgICBkZXNjcmlwdG9ycyBlLmcuICovCisJCS8qIENJRlNTTUJXaW5TZXRQZXJtcyh4aWQsdGNvbixwYXRoLG1vZGUsLTEsLTEsbmxzKTsqLwogCi0JCS8qIHNlcnZlciBtaWdodCBtYXNrIG1vZGUgc28gd2UgaGF2ZSB0byBxdWVyeSBmb3IgaXQgKi8KLQkJaWYgKHRjb24tPnVuaXhfZXh0KQotCQkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJm5ld2lub2RlLCBmdWxsX3BhdGgsCi0JCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCk7Ci0JCWVsc2UgewotCQkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZuZXdpbm9kZSwgZnVsbF9wYXRoLAotCQkJCQkJIGJ1ZiwgaW5vZGUtPmlfc2IsIHhpZCwKLQkJCQkJCSAmZmlsZUhhbmRsZSk7Ci0JCQlpZiAobmV3aW5vZGUpIHsKLQkJCQlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgotCQkJCSAgICBDSUZTX01PVU5UX0RZTlBFUk0pCi0JCQkJCW5ld2lub2RlLT5pX21vZGUgPSBtb2RlOwotCQkJCWlmICgob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSAmJgotCQkJCSAgICAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgotCQkJCSAgICAgQ0lGU19NT1VOVF9TRVRfVUlEKSkgewotCQkJCQluZXdpbm9kZS0+aV91aWQgPSBjdXJyZW50X2ZzdWlkKCk7Ci0JCQkJCWlmIChpbm9kZS0+aV9tb2RlICYgU19JU0dJRCkKLQkJCQkJCW5ld2lub2RlLT5pX2dpZCA9Ci0JCQkJCQkJaW5vZGUtPmlfZ2lkOwotCQkJCQllbHNlCi0JCQkJCQluZXdpbm9kZS0+aV9naWQgPQotCQkJCQkJCWN1cnJlbnRfZnNnaWQoKTsKLQkJCQl9CisJCS8qIENvdWxkIHNldCByL28gZG9zIGF0dHJpYnV0ZSBpZiBtb2RlICYgMDIyMiA9PSAwICovCisJfQorCitjaWZzX2NyZWF0ZV9nZXRfZmlsZV9pbmZvOgorCS8qIHNlcnZlciBtaWdodCBtYXNrIG1vZGUgc28gd2UgaGF2ZSB0byBxdWVyeSBmb3IgaXQgKi8KKwlpZiAodGNvbi0+dW5peF9leHQpCisJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mb191bml4KCZuZXdpbm9kZSwgZnVsbF9wYXRoLAorCQkJCQkgICAgICBpbm9kZS0+aV9zYiwgeGlkKTsKKwllbHNlIHsKKwkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZuZXdpbm9kZSwgZnVsbF9wYXRoLCBidWYsCisJCQkJCSBpbm9kZS0+aV9zYiwgeGlkLCAmZmlsZUhhbmRsZSk7CisJCWlmIChuZXdpbm9kZSkgeworCQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9EWU5QRVJNKQorCQkJCW5ld2lub2RlLT5pX21vZGUgPSBtb2RlOworCQkJaWYgKChvcGxvY2sgJiBDSUZTX0NSRUFURV9BQ1RJT04pICYmCisJCQkgICAgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVRfVUlEKSkgeworCQkJCW5ld2lub2RlLT5pX3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKKwkJCQlpZiAoaW5vZGUtPmlfbW9kZSAmIFNfSVNHSUQpCisJCQkJCW5ld2lub2RlLT5pX2dpZCA9IGlub2RlLT5pX2dpZDsKKwkJCQllbHNlCisJCQkJCW5ld2lub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKIAkJCX0KIAkJfQorCX0KIAotCQlpZiAocmMgIT0gMCkgewotCQkJY0ZZSSgxLCAoIkNyZWF0ZSB3b3JrZWQsIGdldF9pbm9kZV9pbmZvIGZhaWxlZCByYyA9ICVkIiwKLQkJCQkgcmMpKTsKLQkJfSBlbHNlCi0JCQlzZXR1cF9jaWZzX2RlbnRyeSh0Y29uLCBkaXJlbnRyeSwgbmV3aW5vZGUpOworY2lmc19jcmVhdGVfc2V0X2RlbnRyeToKKwlpZiAocmMgPT0gMCkKKwkJc2V0dXBfY2lmc19kZW50cnkodGNvbiwgZGlyZW50cnksIG5ld2lub2RlKTsKKwllbHNlCisJCWNGWUkoMSwgKCJDcmVhdGUgd29ya2VkLCBnZXRfaW5vZGVfaW5mbyBmYWlsZWQgcmMgPSAlZCIsIHJjKSk7CiAKLQkJaWYgKChuZCA9PSBOVUxMIC8qIG5mc2QgY2FzZSAtIG5mcyBzcnYgZG9lcyBub3Qgc2V0IG5kICovKSB8fAotCQkJKCEobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pKSkgewotCQkJLyogbWtub2QgY2FzZSAtIGRvIG5vdCBsZWF2ZSBmaWxlIG9wZW4gKi8KLQkJCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIGZpbGVIYW5kbGUpOwotCQl9IGVsc2UgaWYgKG5ld2lub2RlKSB7Ci0JCQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUgPQotCQkJICAga3phbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOworCS8qIG5mc2QgY2FzZSAtIG5mcyBzcnYgZG9lcyBub3Qgc2V0IG5kICovCisJaWYgKChuZCA9PSBOVUxMKSB8fCAoIShuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikpKSB7CisJCS8qIG1rbm9kIGNhc2UgLSBkbyBub3QgbGVhdmUgZmlsZSBvcGVuICovCisJCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIGZpbGVIYW5kbGUpOworCX0gZWxzZSBpZiAobmV3aW5vZGUpIHsKKwkJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlID0KKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pLCBHRlBfS0VSTkVMKTsKIAotCQkJaWYgKHBDaWZzRmlsZSA9PSBOVUxMKQotCQkJCWdvdG8gY2lmc19jcmVhdGVfb3V0OwotCQkJcENpZnNGaWxlLT5uZXRmaWQgPSBmaWxlSGFuZGxlOwotCQkJcENpZnNGaWxlLT5waWQgPSBjdXJyZW50LT50Z2lkOwotCQkJcENpZnNGaWxlLT5wSW5vZGUgPSBuZXdpbm9kZTsKLQkJCXBDaWZzRmlsZS0+aW52YWxpZEhhbmRsZSA9IGZhbHNlOwotCQkJcENpZnNGaWxlLT5jbG9zZVBlbmQgICAgID0gZmFsc2U7Ci0JCQlpbml0X01VVEVYKCZwQ2lmc0ZpbGUtPmZoX3NlbSk7Ci0JCQltdXRleF9pbml0KCZwQ2lmc0ZpbGUtPmxvY2tfbXV0ZXgpOwotCQkJSU5JVF9MSVNUX0hFQUQoJnBDaWZzRmlsZS0+bGxpc3QpOwotCQkJYXRvbWljX3NldCgmcENpZnNGaWxlLT53cnRQZW5kaW5nLCAwKTsKKwkJaWYgKHBDaWZzRmlsZSA9PSBOVUxMKQorCQkJZ290byBjaWZzX2NyZWF0ZV9vdXQ7CisJCXBDaWZzRmlsZS0+bmV0ZmlkID0gZmlsZUhhbmRsZTsKKwkJcENpZnNGaWxlLT5waWQgPSBjdXJyZW50LT50Z2lkOworCQlwQ2lmc0ZpbGUtPnBJbm9kZSA9IG5ld2lub2RlOworCQlwQ2lmc0ZpbGUtPmludmFsaWRIYW5kbGUgPSBmYWxzZTsKKwkJcENpZnNGaWxlLT5jbG9zZVBlbmQgICAgID0gZmFsc2U7CisJCWluaXRfTVVURVgoJnBDaWZzRmlsZS0+Zmhfc2VtKTsKKwkJbXV0ZXhfaW5pdCgmcENpZnNGaWxlLT5sb2NrX211dGV4KTsKKwkJSU5JVF9MSVNUX0hFQUQoJnBDaWZzRmlsZS0+bGxpc3QpOworCQlhdG9taWNfc2V0KCZwQ2lmc0ZpbGUtPndydFBlbmRpbmcsIDApOwogCi0JCQkvKiBzZXQgdGhlIGZvbGxvd2luZyBpbiBvcGVuIG5vdworCQkvKiBzZXQgdGhlIGZvbGxvd2luZyBpbiBvcGVuIG5vdwogCQkJCXBDaWZzRmlsZS0+cGZpbGUgPSBmaWxlOyAqLwotCQkJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JCQlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnRjb24tPm9wZW5GaWxlTGlzdCk7Ci0JCQlwQ2lmc0lub2RlID0gQ0lGU19JKG5ld2lub2RlKTsKLQkJCWlmIChwQ2lmc0lub2RlKSB7Ci0JCQkJLyogaWYgcmVhZGFibGUgZmlsZSBpbnN0YW5jZSBwdXQgZmlyc3QgaW4gbGlzdCovCi0JCQkJaWYgKHdyaXRlX29ubHkpIHsKLQkJCQkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKLQkJCQkJCSZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LAotCQkJCQkJJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7Ci0JCQkJfQotCQkJCWlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfRVhDTFVTSVZFKSB7Ci0JCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gdHJ1ZTsKLQkJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gdHJ1ZTsKLQkJCQkJY0ZZSSgxLCAoIkV4Y2x1c2l2ZSBPcGxvY2sgaW5vZGUgJXAiLAotCQkJCQkJbmV3aW5vZGUpKTsKLQkJCQl9IGVsc2UgaWYgKChvcGxvY2sgJiAweEYpID09IE9QTE9DS19SRUFEKQotCQkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOworCQl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwkJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZ0Y29uLT5vcGVuRmlsZUxpc3QpOworCQlwQ2lmc0lub2RlID0gQ0lGU19JKG5ld2lub2RlKTsKKwkJaWYgKHBDaWZzSW5vZGUpIHsKKwkJCS8qIGlmIHJlYWRhYmxlIGZpbGUgaW5zdGFuY2UgcHV0IGZpcnN0IGluIGxpc3QqLworCQkJaWYgKHdyaXRlX29ubHkpIHsKKwkJCQlsaXN0X2FkZF90YWlsKCZwQ2lmc0ZpbGUtPmZsaXN0LAorCQkJCQkgICAgICAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwkJCX0gZWxzZSB7CisJCQkJbGlzdF9hZGQoJnBDaWZzRmlsZS0+Zmxpc3QsCisJCQkJCSAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKIAkJCX0KLQkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQlpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX0VYQ0xVU0lWRSkgeworCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gdHJ1ZTsKKwkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOworCQkJCWNGWUkoMSwgKCJFeGNsdXNpdmUgT3Bsb2NrIGlub2RlICVwIiwKKwkJCQkJbmV3aW5vZGUpKTsKKwkJCX0gZWxzZSBpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX1JFQUQpCisJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gdHJ1ZTsKIAkJfQorCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCX0KIGNpZnNfY3JlYXRlX291dDoKIAlrZnJlZShidWYpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCAxMmJiNjU2Li44MTc0N2FjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtNzgsOCArNzgsMzYgQEAKIAlyZXR1cm4gKFJFQURfQ09OVFJPTCB8IEZJTEVfV1JJVEVfQVRUUklCVVRFUyB8IEZJTEVfUkVBRF9BVFRSSUJVVEVTIHwKIAkJRklMRV9XUklURV9FQSB8IEZJTEVfQVBQRU5EX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEgfAogCQlGSUxFX1JFQURfREFUQSk7Cit9CiAKK3N0YXRpYyBpbmxpbmUgZm1vZGVfdCBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQoreworCWZtb2RlX3QgcG9zaXhfZmxhZ3MgPSAwOwogCisJaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpCisJCXBvc2l4X2ZsYWdzID0gRk1PREVfUkVBRDsKKwllbHNlIGlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKQorCQlwb3NpeF9mbGFncyA9IEZNT0RFX1dSSVRFOworCWVsc2UgaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRFdSKSB7CisJCS8qIEdFTkVSSUNfQUxMIGlzIHRvbyBtdWNoIHBlcm1pc3Npb24gdG8gcmVxdWVzdAorCQkgICBjYW4gY2F1c2UgdW5uZWNlc3NhcnkgYWNjZXNzIGRlbmllZCBvbiBjcmVhdGUgKi8KKwkJLyogcmV0dXJuIEdFTkVSSUNfQUxMOyAqLworCQlwb3NpeF9mbGFncyA9IEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURTsKKwl9CisJLyogY2FuIG5vdCBtYXAgT19DUkVBVCBvciBPX0VYQ0wgb3IgT19UUlVOQyBmbGFncyB3aGVuCisJICAgcmVvcGVuaW5nIGEgZmlsZS4gIFRoZXkgaGFkIHRoZWlyIGVmZmVjdCBvbiB0aGUgb3JpZ2luYWwgb3BlbiAqLworCWlmIChmbGFncyAmIE9fQVBQRU5EKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX0FQUEVORDsKKwlpZiAoZmxhZ3MgJiBPX1NZTkMpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fU1lOQzsKKwlpZiAoZmxhZ3MgJiBPX0RJUkVDVE9SWSkKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19ESVJFQ1RPUlk7CisJaWYgKGZsYWdzICYgT19OT0ZPTExPVykKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19OT0ZPTExPVzsKKwlpZiAoZmxhZ3MgJiBPX0RJUkVDVCkKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19ESVJFQ1Q7CisKKwlyZXR1cm4gcG9zaXhfZmxhZ3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNpZnNfZ2V0X2Rpc3Bvc2l0aW9uKHVuc2lnbmVkIGludCBmbGFncykKQEAgLTk3LDYgKzEyNSw4MCBAQAogfQogCiAvKiBhbGwgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBpbiBjYWxsZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwKKwkJCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSwgaW50IG9wbG9jaywgdTE2IG5ldGZpZCkKK3sKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CisvKglzdHJ1Y3QgdGltZXNwZWMgdGVtcDsgKi8gICAvKiBCQiBSRU1PVkVNRSBCQiAqLworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcENpZnNGaWxlID0gY2lmc19pbml0X3ByaXZhdGUoZmlsZS0+cHJpdmF0ZV9kYXRhLCBpbm9kZSwgZmlsZSwgbmV0ZmlkKTsKKwl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJmNpZnNfc2ItPnRjb24tPm9wZW5GaWxlTGlzdCk7CisKKwlwQ2lmc0lub2RlID0gQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCWlmIChwQ2lmc0lub2RlID09IE5VTEwpIHsKKwkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogd2FudCBoYW5kbGVzIHdlIGNhbiB1c2UgdG8gcmVhZCB3aXRoIGZpcnN0CisJICAgaW4gdGhlIGxpc3Qgc28gd2UgZG8gbm90IGhhdmUgdG8gd2FsayB0aGUKKwkgICBsaXN0IHRvIHNlYXJjaCBmb3Igb25lIGluIHdyaXRlX2JlZ2luICovCisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkgeworCQlsaXN0X2FkZF90YWlsKCZwQ2lmc0ZpbGUtPmZsaXN0LAorCQkJICAgICAgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGQoJnBDaWZzRmlsZS0+Zmxpc3QsCisJCQkgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7CisJfQorCisJaWYgKHBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCkgeworCQkvKiB3ZSBoYXZlIHRoZSBpbm9kZSBvcGVuIHNvbWV3aGVyZSBlbHNlCisJCSAgIG5vIG5lZWQgdG8gZGlzY2FyZCBjYWNoZSBkYXRhICovCisJCWdvdG8gcHN4X2NsaWVudF9jYW5fY2FjaGU7CisJfQorCisJLyogQkIgRklYTUUgbmVlZCB0byBmaXggdGhpcyBjaGVjayB0byBtb3ZlIGl0IGVhcmxpZXIgaW50byBwb3NpeF9vcGVuCisJICAgQkIgIGZJWCBmb2xsb3dpbmcgc2VjdGlvbiBCQiBGSVhNRSAqLworCisJLyogaWYgbm90IG9wbG9ja2VkLCBpbnZhbGlkYXRlIGlub2RlIHBhZ2VzIGlmIG10aW1lIG9yIGZpbGUKKwkgICBzaXplIGNoYW5nZWQgKi8KKy8qCXRlbXAgPSBjaWZzX05UdGltZVRvVW5peChsZTY0X3RvX2NwdShidWYtPkxhc3RXcml0ZVRpbWUpKTsKKwlpZiAodGltZXNwZWNfZXF1YWwoJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXRpbWUsICZ0ZW1wKSAmJgorCQkJICAgKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSA9PQorCQkJICAgIChsb2ZmX3QpbGU2NF90b19jcHUoYnVmLT5FbmRPZkZpbGUpKSkgeworCQljRllJKDEsICgiaW5vZGUgdW5jaGFuZ2VkIG9uIHNlcnZlciIpKTsKKwl9IGVsc2UgeworCQlpZiAoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nKSB7CisJCQlyYyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nKTsKKwkJCWlmIChyYyAhPSAwKQorCQkJCUNJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gcmM7CisJCX0KKwkJY0ZZSSgxLCAoImludmFsaWRhdGluZyByZW1vdGUgaW5vZGUgc2luY2Ugb3BlbiBkZXRlY3RlZCBpdCAiCisJCQkgImNoYW5nZWQiKSk7CisJCWludmFsaWRhdGVfcmVtb3RlX2lub2RlKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCX0gKi8KKworcHN4X2NsaWVudF9jYW5fY2FjaGU6CisJaWYgKChvcGxvY2sgJiAweEYpID09IE9QTE9DS19FWENMVVNJVkUpIHsKKwkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSB0cnVlOworCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOworCQljRllJKDEsICgiRXhjbHVzaXZlIE9wbG9jayBncmFudGVkIG9uIGlub2RlICVwIiwKKwkJCSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CisJfSBlbHNlIGlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfUkVBRCkKKwkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gdHJ1ZTsKKworCS8qIHdpbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIHVubG9jayBpZiB3ZSByZWVuYWJsZSB0aGUKKwkgICBmaWxlbWFwX2ZkYXRhd3JpdGUgKHdoaWNoIGRvZXMgbm90IHNlZW0gbmVjZXNzYXJ5ICovCisJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogYWxsIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgaW4gY2FsbGVyICovCiBzdGF0aWMgaW5saW5lIGludCBjaWZzX29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUsCiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb24sIGludCAqb3Bsb2NrLCBGSUxFX0FMTF9JTkZPICpidWYsCkBAIC0xNjcsNyArMjY5LDcgQEAKIAlpbnQgcmMgPSAtRUFDQ0VTOwogCWludCB4aWQsIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKQEAgLTE4MCw3ICsyODIsNyBAQAogCXhpZCA9IEdldFhpZCgpOwogCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwotCXBUY29uID0gY2lmc19zYi0+dGNvbjsKKwl0Y29uID0gY2lmc19zYi0+dGNvbjsKIAogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19DUkVBVCkgewogCQkvKiBzZWFyY2ggaW5vZGUgZm9yIHRoaXMgZmlsZSBhbmQgZmlsbCBpbiBmaWxlLT5wcml2YXRlX2RhdGEgKi8KQEAgLTIyMCw2ICszMjIsNDUgQEAKIAogCWNGWUkoMSwgKCJpbm9kZSA9IDB4JXAgZmlsZSBmbGFncyBhcmUgMHgleCBmb3IgJXMiLAogCQkgaW5vZGUsIGZpbGUtPmZfZmxhZ3MsIGZ1bGxfcGF0aCkpOworCisJaWYgKG9wbG9ja0VuYWJsZWQpCisJCW9wbG9jayA9IFJFUV9PUExPQ0s7CisJZWxzZQorCQlvcGxvY2sgPSAwOworCisJaWYgKCF0Y29uLT5icm9rZW5fcG9zaXhfb3BlbiAmJiB0Y29uLT51bml4X2V4dCAmJgorCSAgICAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYKKwkgICAgKENJRlNfVU5JWF9QT1NJWF9QQVRIX09QU19DQVAgJgorCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKKwkJaW50IG9mbGFncyA9IChpbnQpIGNpZnNfcG9zaXhfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKKwkJLyogY2FuIG5vdCByZWZyZXNoIGlub2RlIGluZm8gc2luY2Ugc2l6ZSBjb3VsZCBiZSBzdGFsZSAqLworCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZpbm9kZSwgaW5vZGUtPmlfc2IsCisJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCisJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CisJCWlmIChyYyA9PSAwKSB7CisJCQljRllJKDEsICgicG9zaXggb3BlbiBzdWNjZWVkZWQiKSk7CisJCQkvKiBubyBuZWVkIGZvciBzcGVjaWFsIGNhc2UgaGFuZGxpbmcgb2Ygc2V0dGluZyBtb2RlCisJCQkgICBvbiByZWFkIG9ubHkgZmlsZXMgbmVlZGVkIGhlcmUgKi8KKworCQkJY2lmc19wb3NpeF9vcGVuX2lub2RlX2hlbHBlcihpbm9kZSwgZmlsZSwgcENpZnNJbm9kZSwKKwkJCQkJCSAgICAgcENpZnNGaWxlLCBvcGxvY2ssIG5ldGZpZCk7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmICgocmMgPT0gLUVJTlZBTCkgfHwgKHJjID09IC1FT1BOT1RTVVBQKSkgeworCQkJaWYgKHRjb24tPnNlcy0+c2VydmVyTk9TKQorCQkJCWNFUlJPUigxLCAoInNlcnZlciAlcyBvZiB0eXBlICVzIHJldHVybmVkIgorCQkJCQkgICAiIHVuZXhwZWN0ZWQgZXJyb3Igb24gU01CIHBvc2l4IG9wZW4iCisJCQkJCSAgICIsIGRpc2FibGluZyBwb3NpeCBvcGVuIHN1cHBvcnQuIgorCQkJCQkgICAiIENoZWNrIGlmIHNlcnZlciB1cGRhdGUgYXZhaWxhYmxlLiIsCisJCQkJCSAgIHRjb24tPnNlcy0+c2VydmVyTmFtZSwKKwkJCQkJICAgdGNvbi0+c2VzLT5zZXJ2ZXJOT1MpKTsKKwkJCXRjb24tPmJyb2tlbl9wb3NpeF9vcGVuID0gdHJ1ZTsKKwkJfSBlbHNlIGlmICgocmMgIT0gLUVJTykgJiYgKHJjICE9IC1FUkVNT1RFKSAmJgorCQkJIChyYyAhPSAtRU9QTk9UU1VQUCkpIC8qIHBhdGggbm90IGZvdW5kIG9yIG5ldCBlcnIgKi8KKwkJCWdvdG8gb3V0OworCQkvKiBlbHNlIGZhbGx0aHJvdWdoIHRvIHJldHJ5IG9wZW4gdGhlIG9sZCB3YXkgb24gbmV0d29yayBpL28KKwkJICAgb3IgREZTIGVycm9ycyAqLworCX0KKwogCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI0OCwxMSArMzg5LDYgQEAKIAogCWRpc3Bvc2l0aW9uID0gY2lmc19nZXRfZGlzcG9zaXRpb24oZmlsZS0+Zl9mbGFncyk7CiAKLQlpZiAob3Bsb2NrRW5hYmxlZCkKLQkJb3Bsb2NrID0gUkVRX09QTE9DSzsKLQllbHNlCi0JCW9wbG9jayA9IDA7Ci0KIAkvKiBCQiBwYXNzIE9fU1lOQyBmbGFnIHRocm91Z2ggb24gZmlsZSBhdHRyaWJ1dGVzIC4uIEJCICovCiAKIAkvKiBBbHNvIHJlZnJlc2ggaW5vZGUgYnkgcGFzc2luZyBpbiBmaWxlX2luZm8gYnVmIHJldHVybmVkIGJ5IFNNQk9wZW4KQEAgLTI2OSw3ICs0MDUsNyBAQAogCX0KIAogCWlmIChjaWZzX3NiLT50Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9OVF9TTUJTKQotCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCisJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAogCQkJIGRlc2lyZWRBY2Nlc3MsIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBidWYsCiAJCQkgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncwogCQkJCSAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTI3OCw3ICs0MTQsNyBAQAogCiAJaWYgKHJjID09IC1FSU8pIHsKIAkJLyogT2xkIHNlcnZlciwgdHJ5IGxlZ2FjeSBzdHlsZSBPcGVuWCAqLwotCQlyYyA9IFNNQkxlZ2FjeU9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKKwkJcmMgPSBTTUJMZWdhY3lPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKIAkJCWRlc2lyZWRBY2Nlc3MsIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBidWYsCiAJCQljaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzCiAJCQkJJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0yOTUsMTIgKzQzMSwxMiBAQAogCX0KIAlwQ2lmc0ZpbGUgPSBjaWZzX2luaXRfcHJpdmF0ZShmaWxlLT5wcml2YXRlX2RhdGEsIGlub2RlLCBmaWxlLCBuZXRmaWQpOwogCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmcFRjb24tPm9wZW5GaWxlTGlzdCk7CisJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZ0Y29uLT5vcGVuRmlsZUxpc3QpOwogCiAJcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAocENpZnNJbm9kZSkgewogCQlyYyA9IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCi0JCQkJCSAgICBwQ2lmc0ZpbGUsIHBUY29uLAorCQkJCQkgICAgcENpZnNGaWxlLCB0Y29uLAogCQkJCQkgICAgJm9wbG9jaywgYnVmLCBmdWxsX3BhdGgsIHhpZCk7CiAJfSBlbHNlIHsKIAkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKQEAgLTMwOSw3ICs0NDUsNyBAQAogCWlmIChvcGxvY2sgJiBDSUZTX0NSRUFURV9BQ1RJT04pIHsKIAkJLyogdGltZSB0byBzZXQgbW9kZSB3aGljaCB3ZSBjYW4gbm90IHNldCBlYXJsaWVyIGR1ZSB0bwogCQkgICBwcm9ibGVtcyBjcmVhdGluZyBuZXcgcmVhZC1vbmx5IGZpbGVzICovCi0JCWlmIChwVGNvbi0+dW5peF9leHQpIHsKKwkJaWYgKHRjb24tPnVuaXhfZXh0KSB7CiAJCQlzdHJ1Y3QgY2lmc191bml4X3NldF9pbmZvX2FyZ3MgYXJncyA9IHsKIAkJCQkubW9kZQk9IGlub2RlLT5pX21vZGUsCiAJCQkJLnVpZAk9IE5PX0NIQU5HRV82NCwKQEAgLTMxOSw3ICs0NTUsNyBAQAogCQkJCS5tdGltZQk9IE5PX0NIQU5HRV82NCwKIAkJCQkuZGV2aWNlCT0gMCwKIAkJCX07Ci0JCQlDSUZTU01CVW5peFNldEluZm8oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCAmYXJncywKKwkJCUNJRlNTTUJVbml4U2V0SW5mbyh4aWQsIHRjb24sIGZ1bGxfcGF0aCwgJmFyZ3MsCiAJCQkJCSAgICBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJCSAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0zNDksNyArNDg1LDcgQEAKIAlpbnQgcmMgPSAtRUFDQ0VTOwogCWludCB4aWQsIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CkBAIC0zODcsNyArNTIzLDcgQEAKIAl9CiAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7Ci0JcFRjb24gPSBjaWZzX3NiLT50Y29uOworCXRjb24gPSBjaWZzX3NiLT50Y29uOwogCiAvKiBjYW4gbm90IGdyYWIgcmVuYW1lIHNlbSBoZXJlIGJlY2F1c2UgdmFyaW91cyBvcHMsIGluY2x1ZGluZwogICAgdGhvc2UgdGhhdCBhbHJlYWR5IGhhdmUgdGhlIHJlbmFtZSBzZW0gY2FuIGVuZCB1cCBjYXVzaW5nIHdyaXRlcGFnZQpAQCAtNDA0LDIwICs1NDAsMzcgQEAKIAogCWNGWUkoMSwgKCJpbm9kZSA9IDB4JXAgZmlsZSBmbGFncyAweCV4IGZvciAlcyIsCiAJCSBpbm9kZSwgZmlsZS0+Zl9mbGFncywgZnVsbF9wYXRoKSk7Ci0JZGVzaXJlZEFjY2VzcyA9IGNpZnNfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKIAogCWlmIChvcGxvY2tFbmFibGVkKQogCQlvcGxvY2sgPSBSRVFfT1BMT0NLOwogCWVsc2UKIAkJb3Bsb2NrID0gMDsKIAorCWlmICh0Y29uLT51bml4X2V4dCAmJiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYKKwkgICAgKENJRlNfVU5JWF9QT1NJWF9QQVRIX09QU19DQVAgJgorCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKKwkJaW50IG9mbGFncyA9IChpbnQpIGNpZnNfcG9zaXhfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKKwkJLyogY2FuIG5vdCByZWZyZXNoIGlub2RlIGluZm8gc2luY2Ugc2l6ZSBjb3VsZCBiZSBzdGFsZSAqLworCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsIE5VTEwsIGlub2RlLT5pX3NiLAorCQkJCSAgICAgY2lmc19zYi0+bW50X2ZpbGVfbW9kZSAvKiBpZ25vcmVkICovLAorCQkJCSAgICAgb2ZsYWdzLCAmb3Bsb2NrLCAmbmV0ZmlkLCB4aWQpOworCQlpZiAocmMgPT0gMCkgeworCQkJY0ZZSSgxLCAoInBvc2l4IHJlb3BlbiBzdWNjZWVkZWQiKSk7CisJCQlnb3RvIHJlb3Blbl9zdWNjZXNzOworCQl9CisJCS8qIGZhbGx0aHJvdWdoIHRvIHJldHJ5IG9wZW4gdGhlIG9sZCB3YXkgb24gZXJyb3JzLCBlc3BlY2lhbGx5CisJCSAgIGluIHRoZSByZWNvbm5lY3QgcGF0aCBpdCBpcyBpbXBvcnRhbnQgdG8gcmV0cnkgaGFyZCAqLworCX0KKworCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisKIAkvKiBDYW4gbm90IHJlZnJlc2ggaW5vZGUgYnkgcGFzc2luZyBpbiBmaWxlX2luZm8gYnVmIHRvIGJlIHJldHVybmVkCiAJICAgYnkgU01CT3BlbiBhbmQgdGhlbiBjYWxsaW5nIGdldF9pbm9kZV9pbmZvIHdpdGggcmV0dXJuZWQgYnVmCiAJICAgc2luY2UgZmlsZSBtaWdodCBoYXZlIHdyaXRlIGJlaGluZCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZmx1c2hlZAogCSAgIGFuZCBzZXJ2ZXIgdmVyc2lvbiBvZiBmaWxlIHNpemUgY2FuIGJlIHN0YWxlLiBJZiB3ZSBrbmV3IGZvciBzdXJlCiAJICAgdGhhdCBpbm9kZSB3YXMgbm90IGRpcnR5IGxvY2FsbHkgd2UgY291bGQgZG8gdGhpcyAqLwogCi0JcmMgPSBDSUZTU01CT3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLCBkZXNpcmVkQWNjZXNzLAorCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLCBkZXNpcmVkQWNjZXNzLAogCQkJIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBOVUxMLAogCQkJIGNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTQyNiw2ICs1NzksNyBAQAogCQljRllJKDEsICgiY2lmc19vcGVuIHJldHVybmVkIDB4JXgiLCByYykpOwogCQljRllJKDEsICgib3Bsb2NrOiAlZCIsIG9wbG9jaykpOwogCX0gZWxzZSB7CityZW9wZW5fc3VjY2VzczoKIAkJcENpZnNGaWxlLT5uZXRmaWQgPSBuZXRmaWQ7CiAJCXBDaWZzRmlsZS0+aW52YWxpZEhhbmRsZSA9IGZhbHNlOwogCQl1cCgmcENpZnNGaWxlLT5maF9zZW0pOwpAQCAtNDM5LDcgKzU5Myw3IEBACiAJCQkgICBnbyB0byBzZXJ2ZXIgdG8gZ2V0IGlub2RlIGluZm8gKi8KIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IGZhbHNlOwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IGZhbHNlOwotCQkJCWlmIChwVGNvbi0+dW5peF9leHQpCisJCQkJaWYgKHRjb24tPnVuaXhfZXh0KQogCQkJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm9fdW5peCgmaW5vZGUsCiAJCQkJCQlmdWxsX3BhdGgsIGlub2RlLT5pX3NiLCB4aWQpOwogCQkJCWVsc2UKQEAgLTQ2Nyw3ICs2MjEsNiBAQAogCQkJY2lmc19yZWxvY2tfZmlsZShwQ2lmc0ZpbGUpOwogCQl9CiAJfQotCiAJa2ZyZWUoZnVsbF9wYXRoKTsKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHJjOwpAQCAtMTUyMyw2ICsxNjc2LDkgQEAKIHsKIAlpbnQgeGlkOwogCWludCByYyA9IDA7CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpzbWJmaWxlID0KKwkJKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAl4aWQgPSBHZXRYaWQoKTsKQEAgLTE1MzQsNyArMTY5MCwxMiBAQAogCWlmIChyYyA9PSAwKSB7CiAJCXJjID0gQ0lGU19JKGlub2RlKS0+d3JpdGVfYmVoaW5kX3JjOwogCQlDSUZTX0koaW5vZGUpLT53cml0ZV9iZWhpbmRfcmMgPSAwOworCQl0Y29uID0gQ0lGU19TQihpbm9kZS0+aV9zYiktPnRjb247CisJCWlmICghcmMgJiYgdGNvbiAmJiBzbWJmaWxlICYmCisJCSAgICEoQ0lGU19TQihpbm9kZS0+aV9zYiktPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT1NTWU5DKSkKKwkJCXJjID0gQ0lGU1NNQkZsdXNoKHhpZCwgdGNvbiwgc21iZmlsZS0+bmV0ZmlkKTsKIAl9CisKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IGJjZjdiNTEuLmE4Nzk3Y2MgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTE5OSw2ICsxOTksNDkgQEAKIAlwZm5kX2RhdC0+R2lkID0gY3B1X3RvX2xlNjQocGlub2RlLT5pX2dpZCk7CiB9CiAKKy8qKgorICogY2lmc19uZXcgaW5vZGUgLSBjcmVhdGUgbmV3IGlub2RlLCBpbml0aWFsaXplLCBhbmQgaGFzaCBpdAorICogQHNiIC0gcG9pbnRlciB0byBzdXBlcmJsb2NrCisgKiBAaW51bSAtIGlmIHZhbGlkIHBvaW50ZXIgYW5kIHNlcnZlcmlubyBpcyBlbmFibGVkLCByZXBsYWNlIGlfaW5vIHdpdGggdmFsCisgKgorICogQ3JlYXRlIGEgbmV3IGlub2RlLCBpbml0aWFsaXplIGl0IGZvciBDSUZTIGFuZCBoYXNoIGl0LiBSZXR1cm5zIHRoZSBuZXcKKyAqIGlub2RlIG9yIE5VTEwgaWYgb25lIGNvdWxkbid0IGJlIGFsbG9jYXRlZC4KKyAqCisgKiBJZiB0aGUgc2hhcmUgaXNuJ3QgbW91bnRlZCB3aXRoICJzZXJ2ZXJpbm8iIG9yIGludW0gaXMgYSBOVUxMIHBvaW50ZXIgdGhlbgorICogd2UnbGwganVzdCB1c2UgdGhlIGlub2RlIG51bWJlciBhc3NpZ25lZCBieSBuZXdfaW5vZGUoKS4gTm90ZSB0aGF0IHRoaXMgY2FuCisgKiBtZWFuIGlfaW5vIGNvbGxpc2lvbnMgc2luY2UgdGhlIGlfaW5vIGFzc2lnbmVkIGJ5IG5ld19pbm9kZSBpcyBub3QKKyAqIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorICovCitzdHJ1Y3QgaW5vZGUgKgorY2lmc19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191NjQgKmludW0pCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gbmV3X2lub2RlKHNiKTsKKwlpZiAoaW5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIEJCOiBJcyBpX2lubyA9PSAwIGxlZ2FsPyBIZXJlLCB3ZSBhc3N1bWUgdGhhdCBpdCBpcy4gSWYgaXQgaXNuJ3Qgd2UKKwkgKiAgICAgc3RvcCBwYXNzaW5nIGludW0gYXMgcHRyLiBBcmUgdGhlcmUgc2FuaXR5IGNoZWNrcyB3ZSBjYW4gdXNlIHRvCisJICogICAgIGVuc3VyZSB0aGF0IHRoZSBzZXJ2ZXIgaXMgcmVhbGx5IGZpbGxpbmcgaW4gdGhhdCBmaWVsZD8gQWxzbywKKwkgKiAgICAgaWYgc2VydmVyaW5vIGlzIGRpc2FibGVkLCBwZXJoYXBzIHdlIHNob3VsZCBiZSB1c2luZyBpdW5pcXVlKCk/CisJICovCisJaWYgKGludW0gJiYgKENJRlNfU0Ioc2IpLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pKQorCQlpbm9kZS0+aV9pbm8gPSAodW5zaWduZWQgbG9uZykgKmludW07CisKKwkvKgorCSAqIG11c3Qgc2V0IHRoaXMgaGVyZSBpbnN0ZWFkIG9mIGNpZnNfYWxsb2NfaW5vZGUgc2luY2UgVkZTIHdpbGwKKwkgKiBjbG9iYmVyIGlfZmxhZ3MKKwkgKi8KKwlpZiAoc2ItPnNfZmxhZ3MgJiBNU19OT0FUSU1FKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PQVRJTUUgfCBTX05PQ01USU1FOworCisJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOworCisJcmV0dXJuIGlub2RlOworfQorCiBpbnQgY2lmc19nZXRfaW5vZGVfaW5mb191bml4KHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKIAljb25zdCB1bnNpZ25lZCBjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB4aWQpCiB7CkBAIC0yMzMsMjIgKzI3NiwxMSBAQAogCiAJLyogZ2V0IG5ldyBpbm9kZSAqLwogCWlmICgqcGlub2RlID09IE5VTEwpIHsKLQkJKnBpbm9kZSA9IG5ld19pbm9kZShzYik7CisJCSpwaW5vZGUgPSBjaWZzX25ld19pbm9kZShzYiwgJmZpbmRfZGF0YS5VbmlxdWVJZCk7CiAJCWlmICgqcGlub2RlID09IE5VTEwpIHsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWdvdG8gY2dpaXVfZXhpdDsKIAkJfQotCQkvKiBJcyBhbiBpX2lubyBvZiB6ZXJvIGxlZ2FsPyAqLwotCQkvKiBub3RlIGlubyBpbmNyZW1lbnRlZCB0byB1bmlxdWUgbnVtIGluIG5ld19pbm9kZSAqLwotCQkvKiBBcmUgdGhlcmUgc2FuaXR5IGNoZWNrcyB3ZSBjYW4gdXNlIHRvIGVuc3VyZSB0aGF0Ci0JCSAgIHRoZSBzZXJ2ZXIgaXMgcmVhbGx5IGZpbGxpbmcgaW4gdGhhdCBmaWVsZD8gKi8KLQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkKLQkJCSgqcGlub2RlKS0+aV9pbm8gPSAodW5zaWduZWQgbG9uZylmaW5kX2RhdGEuVW5pcXVlSWQ7Ci0KLQkJaWYgKHNiLT5zX2ZsYWdzICYgTVNfTk9BVElNRSkKLQkJCSgqcGlub2RlKS0+aV9mbGFncyB8PSBTX05PQVRJTUUgfCBTX05PQ01USU1FOwotCi0JCWluc2VydF9pbm9kZV9oYXNoKCpwaW5vZGUpOwogCX0KIAogCWlub2RlID0gKnBpbm9kZTsKQEAgLTQ2NSwxMSArNDk3LDkgQEAKIAogCS8qIGdldCBuZXcgaW5vZGUgKi8KIAlpZiAoKnBpbm9kZSA9PSBOVUxMKSB7Ci0JCSpwaW5vZGUgPSBuZXdfaW5vZGUoc2IpOwotCQlpZiAoKnBpbm9kZSA9PSBOVUxMKSB7Ci0JCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIGNnaWlfZXhpdDsKLQkJfQorCQlfX3U2NCBpbm9kZV9udW07CisJCV9fdTY0ICpwaW51bSA9ICZpbm9kZV9udW07CisKIAkJLyogSXMgYW4gaV9pbm8gb2YgemVybyBsZWdhbD8gQ2FuIHdlIHVzZSB0aGF0IHRvIGNoZWNrCiAJCSAgIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgcmV0dXJuaW5nIGlub2RlIG51bWJlcnM/ICBBcmUKIAkJICAgdGhlcmUgb3RoZXIgc2FuaXR5IGNoZWNrcyB3ZSBjYW4gdXNlIHRvIGVuc3VyZSB0aGF0CkBAIC00ODYsMjIgKzUxNiwyNiBAQAogCiAJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pIHsKIAkJCWludCByYzEgPSAwOwotCQkJX191NjQgaW5vZGVfbnVtOwogCiAJCQlyYzEgPSBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoeGlkLCBwVGNvbiwKLQkJCQkJZnVsbF9wYXRoLCAmaW5vZGVfbnVtLAorCQkJCQlmdWxsX3BhdGgsIHBpbnVtLAogCQkJCQljaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCWlmIChyYzEpIHsKIAkJCQljRllJKDEsICgiR2V0U3J2SW5vZGVOdW0gcmMgJWQiLCByYzEpKTsKKwkJCQlwaW51bSA9IE5VTEw7CiAJCQkJLyogQkIgRU9QTk9TVVBQIGRpc2FibGUgU0VSVkVSX0lOVU0/ICovCi0JCQl9IGVsc2UgLyogZG8gd2UgbmVlZCBjYXN0IG9yIGhhc2ggdG8gaW5vPyAqLwotCQkJCSgqcGlub2RlKS0+aV9pbm8gPSBpbm9kZV9udW07Ci0JCX0gLyogZWxzZSBpbm8gaW5jcmVtZW50ZWQgdG8gdW5pcXVlIG51bSBpbiBuZXdfaW5vZGUqLwotCQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19OT0FUSU1FKQotCQkJKCpwaW5vZGUpLT5pX2ZsYWdzIHw9IFNfTk9BVElNRSB8IFNfTk9DTVRJTUU7Ci0JCWluc2VydF9pbm9kZV9oYXNoKCpwaW5vZGUpOworCQkJfQorCQl9IGVsc2UgeworCQkJcGludW0gPSBOVUxMOworCQl9CisKKwkJKnBpbm9kZSA9IGNpZnNfbmV3X2lub2RlKHNiLCBwaW51bSk7CisJCWlmICgqcGlub2RlID09IE5VTEwpIHsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gY2dpaV9leGl0OworCQl9CiAJfQogCWlub2RlID0gKnBpbm9kZTsKIAljaWZzSW5mbyA9IENJRlNfSShpbm9kZSk7CkBAIC02MjEsNyArNjU1LDcgQEAKIAkubG9va3VwID0gY2lmc19sb29rdXAsCiB9OwogCi1zdGF0aWMgY2hhciAqYnVpbGRfcGF0aF90b19yb290KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCitjaGFyICpjaWZzX2J1aWxkX3BhdGhfdG9fcm9vdChzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQogewogCWludCBwcGxlbiA9IGNpZnNfc2ItPnByZXBhdGhsZW47CiAJaW50IGRmc3BsZW47CkBAIC02NzgsNyArNzEyLDcgQEAKIAkJcmV0dXJuIGlub2RlOwogCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwotCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfdG9fcm9vdChjaWZzX3NiKTsKKwlmdWxsX3BhdGggPSBjaWZzX2J1aWxkX3BhdGhfdG9fcm9vdChjaWZzX3NiKTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC03MjksNiArNzYzLDkgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAJRklMRV9CQVNJQ19JTkZPCWluZm9fYnVmOwogCisJaWYgKGF0dHJzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfQVRJTUUpIHsKIAkJc2V0X3RpbWUgPSB0cnVlOwogCQlpbmZvX2J1Zi5MYXN0QWNjZXNzVGltZSA9CkBAIC0xMDE3LDcgKzEwNTQsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgcG9zaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKK3ZvaWQgcG9zaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKIAlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcERhdGEsIGludCBpc05ld0lub2RlKQogewogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzSW5mbyA9IENJRlNfSSh0bXBfaW5vZGUpOwpAQCAtMTExNCwyNCArMTE1MSwxNCBAQAogCQkJZWxzZQogCQkJCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfZGVudHJ5X29wczsKIAotCQkJbmV3aW5vZGUgPSBuZXdfaW5vZGUoaW5vZGUtPmlfc2IpOworCQkJbmV3aW5vZGUgPSBjaWZzX25ld19pbm9kZShpbm9kZS0+aV9zYiwKKwkJCQkJCSAgJnBJbmZvLT5VbmlxdWVJZCk7CiAJCQlpZiAobmV3aW5vZGUgPT0gTlVMTCkgewogCQkJCWtmcmVlKHBJbmZvKTsKIAkJCQlnb3RvIG1rZGlyX2dldF9pbmZvOwogCQkJfQogCi0JCQkvKiBJcyBhbiBpX2lubyBvZiB6ZXJvIGxlZ2FsPyAqLwotCQkJLyogQXJlIHRoZXJlIHNhbml0eSBjaGVja3Mgd2UgY2FuIHVzZSB0byBlbnN1cmUgdGhhdAotCQkJICAgdGhlIHNlcnZlciBpcyByZWFsbHkgZmlsbGluZyBpbiB0aGF0IGZpZWxkPyAqLwotCQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkgewotCQkJCW5ld2lub2RlLT5pX2lubyA9Ci0JCQkJCSh1bnNpZ25lZCBsb25nKXBJbmZvLT5VbmlxdWVJZDsKLQkJCX0gLyogbm90ZSBpbm8gaW5jcmVtZW50ZWQgdG8gdW5pcXVlIG51bSBpbiBuZXdfaW5vZGUgKi8KLQkJCWlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PQVRJTUUpCi0JCQkJbmV3aW5vZGUtPmlfZmxhZ3MgfD0gU19OT0FUSU1FIHwgU19OT0NNVElNRTsKIAkJCW5ld2lub2RlLT5pX25saW5rID0gMjsKLQotCQkJaW5zZXJ0X2lub2RlX2hhc2gobmV3aW5vZGUpOwogCQkJZF9pbnN0YW50aWF0ZShkaXJlbnRyeSwgbmV3aW5vZGUpOwogCiAJCQkvKiB3ZSBhbHJlYWR5IGNoZWNrZWQgaW4gUE9TSVhDcmVhdGUgd2hldGhlcgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCA5ZjUxZjliLi5jMmMwMWZmIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNTYsMzUgKzU2LDM0IEBACiB9CiAjZW5kaWYgLyogREVCVUcyICovCiAKLS8qIFJldHVybnMgb25lIGlmIG5ldyBpbm9kZSBjcmVhdGVkICh3aGljaCB0aGVyZWZvcmUgbmVlZHMgdG8gYmUgaGFzaGVkKSAqLworLyogUmV0dXJucyAxIGlmIG5ldyBpbm9kZSBjcmVhdGVkLCAyIGlmIGJvdGggZGVudHJ5IGFuZCBpbm9kZSB3ZXJlICovCiAvKiBNaWdodCBjaGVjayBpbiB0aGUgZnV0dXJlIGlmIGlub2RlIG51bWJlciBjaGFuZ2VkIHNvIHdlIGNhbiByZWhhc2ggaW5vZGUgKi8KLXN0YXRpYyBpbnQgY29uc3RydWN0X2RlbnRyeShzdHJ1Y3QgcXN0ciAqcXN0cmluZywgc3RydWN0IGZpbGUgKmZpbGUsCi0Jc3RydWN0IGlub2RlICoqcHRtcF9pbm9kZSwgc3RydWN0IGRlbnRyeSAqKnBuZXdfZGVudHJ5KQorc3RhdGljIGludAorY29uc3RydWN0X2RlbnRyeShzdHJ1Y3QgcXN0ciAqcXN0cmluZywgc3RydWN0IGZpbGUgKmZpbGUsCisJCSBzdHJ1Y3QgaW5vZGUgKipwdG1wX2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICoqcG5ld19kZW50cnksCisJCSBfX3U2NCAqaW51bSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICp0bXBfZGVudHJ5OwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGRlbnRyeSAqdG1wX2RlbnRyeSA9IE5VTEw7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2I7CiAJaW50IHJjID0gMDsKIAogCWNGWUkoMSwgKCJGb3IgJXMiLCBxc3RyaW5nLT5uYW1lKSk7Ci0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7Ci0JcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCiAJcXN0cmluZy0+aGFzaCA9IGZ1bGxfbmFtZV9oYXNoKHFzdHJpbmctPm5hbWUsIHFzdHJpbmctPmxlbik7CiAJdG1wX2RlbnRyeSA9IGRfbG9va3VwKGZpbGUtPmZfcGF0aC5kZW50cnksIHFzdHJpbmcpOwogCWlmICh0bXBfZGVudHJ5KSB7CisJCS8qIEJCOiBvdmVyd3JpdGUgb2xkIG5hbWU/IGkuZS4gdG1wX2RlbnRyeS0+ZF9uYW1lIGFuZAorCQkgKiB0bXBfZGVudHJ5LT5kX25hbWUubGVuPz8KKwkJICovCiAJCWNGWUkoMCwgKCJleGlzdGluZyBkZW50cnkgd2l0aCBpbm9kZSAweCVwIiwKIAkJCSB0bXBfZGVudHJ5LT5kX2lub2RlKSk7CiAJCSpwdG1wX2lub2RlID0gdG1wX2RlbnRyeS0+ZF9pbm9kZTsKLS8qIEJCIG92ZXJ3cml0ZSBvbGQgbmFtZT8gaS5lLiB0bXBfZGVudHJ5LT5kX25hbWUgYW5kIHRtcF9kZW50cnktPmRfbmFtZS5sZW4/PyovCiAJCWlmICgqcHRtcF9pbm9kZSA9PSBOVUxMKSB7Ci0JCQkqcHRtcF9pbm9kZSA9IG5ld19pbm9kZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKwkJCSpwdG1wX2lub2RlID0gY2lmc19uZXdfaW5vZGUoc2IsIGludW0pOwogCQkJaWYgKCpwdG1wX2lub2RlID09IE5VTEwpCiAJCQkJcmV0dXJuIHJjOwogCQkJcmMgPSAxOwogCQl9Ci0JCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiLT5zX2ZsYWdzICYgTVNfTk9BVElNRSkKLQkJCSgqcHRtcF9pbm9kZSktPmlfZmxhZ3MgfD0gU19OT0FUSU1FIHwgU19OT0NNVElNRTsKIAl9IGVsc2UgewogCQl0bXBfZGVudHJ5ID0gZF9hbGxvYyhmaWxlLT5mX3BhdGguZGVudHJ5LCBxc3RyaW5nKTsKIAkJaWYgKHRtcF9kZW50cnkgPT0gTlVMTCkgewpAQCAtOTMsMTUgKzkyLDE0IEBACiAJCQlyZXR1cm4gcmM7CiAJCX0KIAotCQkqcHRtcF9pbm9kZSA9IG5ld19pbm9kZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKLQkJaWYgKHBUY29uLT5ub2Nhc2UpCisJCWlmIChDSUZTX1NCKHNiKS0+dGNvbi0+bm9jYXNlKQogCQkJdG1wX2RlbnRyeS0+ZF9vcCA9ICZjaWZzX2NpX2RlbnRyeV9vcHM7CiAJCWVsc2UKIAkJCXRtcF9kZW50cnktPmRfb3AgPSAmY2lmc19kZW50cnlfb3BzOworCisJCSpwdG1wX2lub2RlID0gY2lmc19uZXdfaW5vZGUoc2IsIGludW0pOwogCQlpZiAoKnB0bXBfaW5vZGUgPT0gTlVMTCkKIAkJCXJldHVybiByYzsKLQkJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2ItPnNfZmxhZ3MgJiBNU19OT0FUSU1FKQotCQkJKCpwdG1wX2lub2RlKS0+aV9mbGFncyB8PSBTX05PQVRJTUUgfCBTX05PQ01USU1FOwogCQlyYyA9IDI7CiAJfQogCkBAIC04MjIsNyArODIwLDcgQEAKIC8qIGlub2RlIG51bSwgaW5vZGUgdHlwZSBhbmQgZmlsZW5hbWUgcmV0dXJuZWQgKi8KIHN0YXRpYyBpbnQgY2lmc19nZXRfbmFtZV9mcm9tX3NlYXJjaF9idWYoc3RydWN0IHFzdHIgKnBxc3QsCiAJY2hhciAqY3VycmVudF9lbnRyeSwgX191MTYgbGV2ZWwsIHVuc2lnbmVkIGludCB1bmljb2RlLAotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIGludCBtYXhfbGVuLCBpbm9fdCAqcGludW0pCisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgaW50IG1heF9sZW4sIF9fdTY0ICpwaW51bSkKIHsKIAlpbnQgcmMgPSAwOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwpAQCAtODQyLDkgKzg0MCw3IEBACiAJCQlsZW4gPSBzdHJubGVuKGZpbGVuYW1lLCBQQVRIX01BWCk7CiAJCX0KIAotCQkvKiBCQiBmaXhtZSAtIGhhc2ggbG93IGFuZCBoaWdoIDMyIGJpdHMgaWYgbm90IDY0IGJpdCBhcmNoIEJCICovCi0JCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pCi0JCQkqcGludW0gPSBwRmluZERhdGEtPlVuaXF1ZUlkOworCQkqcGludW0gPSBwRmluZERhdGEtPlVuaXF1ZUlkOwogCX0gZWxzZSBpZiAobGV2ZWwgPT0gU01CX0ZJTkRfRklMRV9ESVJFQ1RPUllfSU5GTykgewogCQlGSUxFX0RJUkVDVE9SWV9JTkZPICpwRmluZERhdGEgPQogCQkJKEZJTEVfRElSRUNUT1JZX0lORk8gKiljdXJyZW50X2VudHJ5OwpAQCAtOTA3LDcgKzkwMyw3IEBACiAJc3RydWN0IHFzdHIgcXN0cmluZzsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0Y7CiAJdW5zaWduZWQgaW50IG9ial90eXBlOwotCWlub190ICBpbnVtOworCV9fdTY0ICBpbnVtOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGlub2RlICp0bXBfaW5vZGU7CiAJc3RydWN0IGRlbnRyeSAqdG1wX2RlbnRyeTsKQEAgLTk0MCwyMCArOTM2LDE4IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyYyA9IGNvbnN0cnVjdF9kZW50cnkoJnFzdHJpbmcsIGZpbGUsICZ0bXBfaW5vZGUsICZ0bXBfZGVudHJ5KTsKKwkvKiBvbmx5IHRoZXNlIHR3byBpbmZvbGV2ZWxzIHJldHVybiB2YWxpZCBpbm9kZSBudW1iZXJzICovCisJaWYgKHBDaWZzRi0+c3JjaF9pbmYuaW5mb19sZXZlbCA9PSBTTUJfRklORF9GSUxFX1VOSVggfHwKKwkgICAgcENpZnNGLT5zcmNoX2luZi5pbmZvX2xldmVsID09IFNNQl9GSU5EX0ZJTEVfSURfRlVMTF9ESVJfSU5GTykKKwkJcmMgPSBjb25zdHJ1Y3RfZGVudHJ5KCZxc3RyaW5nLCBmaWxlLCAmdG1wX2lub2RlLCAmdG1wX2RlbnRyeSwKKwkJCQkJJmludW0pOworCWVsc2UKKwkJcmMgPSBjb25zdHJ1Y3RfZGVudHJ5KCZxc3RyaW5nLCBmaWxlLCAmdG1wX2lub2RlLCAmdG1wX2RlbnRyeSwKKwkJCQkJTlVMTCk7CisKIAlpZiAoKHRtcF9pbm9kZSA9PSBOVUxMKSB8fCAodG1wX2RlbnRyeSA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAocmMpIHsKLQkJLyogaW5vZGUgY3JlYXRlZCwgd2UgbmVlZCB0byBoYXNoIGl0IHdpdGggcmlnaHQgaW5vZGUgbnVtYmVyICovCi0JCWlmIChpbnVtICE9IDApIHsKLQkJCS8qIEJCIGZpeG1lIC0gaGFzaCB0aGUgMiAzMiBxdWFudGl0aWVzIGJpdHMgdG9nZXRoZXIgaWYKLQkJCSAqICBuZWNlc3NhcnkgQkIgKi8KLQkJCXRtcF9pbm9kZS0+aV9pbm8gPSBpbnVtOwotCQl9Ci0JCWluc2VydF9pbm9kZV9oYXNoKHRtcF9pbm9kZSk7Ci0JfQotCiAJLyogd2UgcGFzcyBpbiByYyBiZWxvdywgaW5kaWNhdGluZyB3aGV0aGVyIGl0IGlzIGEgbmV3IGlub2RlLAogCSAgIHNvIHdlIGNhbiBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gaW52YWxpZGF0ZSB0aGUgaW5vZGUgY2FjaGVkCiAJICAgZGF0YSBpZiB0aGUgZmlsZSBoYXMgY2hhbmdlZCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCA1ZjIyZGU3Li41YzY4YjQyIDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtMzQsMTUgKzM0LDk5IEBACiBleHRlcm4gdm9pZCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwKIAkJCSB1bnNpZ25lZCBjaGFyICpwMjQpOwogCisvKiBDaGVja3MgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgc21iIHNlc3Npb24gdG8gYmUgcmVjb25uZWN0ZWQgYWZ0ZXIKKyAgIHRoZSBzb2NrZXQgaGFzIGJlZW4gcmVlc3RhYmxpc2hlZCAoc28gd2Uga25vdyB3aGV0aGVyIHRvIHVzZSB2YyAwKS4KKyAgIENhbGxlZCB3aGlsZSBob2xkaW5nIHRoZSBjaWZzX3RjcF9zZXNfbG9jaywgc28gZG8gbm90IGJsb2NrICovCitzdGF0aWMgYm9vbCBpc19maXJzdF9zZXNfcmVjb25uZWN0KHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnRtcF9zZXM7CisKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJnNlcy0+c2VydmVyLT5zbWJfc2VzX2xpc3QpIHsKKwkJdG1wX3NlcyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2lmc1Nlc0luZm8sCisJCQkJICAgICBzbWJfc2VzX2xpc3QpOworCQlpZiAodG1wX3Nlcy0+bmVlZF9yZWNvbm5lY3QgPT0gZmFsc2UpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qIGNvdWxkIG5vdCBmaW5kIGEgc2Vzc2lvbiB0aGF0IHdhcyBhbHJlYWR5IGNvbm5lY3RlZCwKKwkgICB0aGlzIG11c3QgYmUgdGhlIGZpcnN0IG9uZSB3ZSBhcmUgcmVjb25uZWN0aW5nICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKgl2YyBudW1iZXIgMCBpcyB0cmVhdGVkIHNwZWNpYWxseSBieSBzb21lIHNlcnZlcnMsIGFuZCBzaG91bGQgYmUgdGhlCisgKiAgICAgIGZpcnN0IG9uZSB3ZSByZXF1ZXN0LiAgQWZ0ZXIgdGhhdCB3ZSBjYW4gdXNlIHZjbnVtYmVycyB1cCB0byBtYXh2Y3MsCisgKglvbmUgZm9yIGVhY2ggc21iIHNlc3Npb24gKHNvbWUgV2luZG93cyB2ZXJzaW9ucyBzZXQgbWF4dmNzIGluY29ycmVjdGx5CisgKglzbyBtYXh2Yz0xIGNhbiBiZSBpZ25vcmVkKS4gIElmIHdlIGhhdmUgdG9vIG1hbnkgdmNzLCB3ZSBjYW4gcmV1c2UKKyAqCWFueSB2YyBidXQgemVybyAoc29tZSBzZXJ2ZXJzIHJlc2V0IHRoZSBjb25uZWN0aW9uIG9uIHZjbnVtIHplcm8pCisgKgorICovCitzdGF0aWMgX19sZTE2IGdldF9uZXh0X3ZjbnVtKHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzKQoreworCV9fdTE2IHZjbnVtID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGNpZnNTZXNJbmZvICp0bXBfc2VzOworCV9fdTE2IG1heF92Y3MgPSBzZXMtPnNlcnZlci0+bWF4X3ZjczsKKwlfX3UxNiBpOworCWludCBmcmVlX3ZjX2ZvdW5kID0gMDsKKworCS8qIFF1b3RpbmcgdGhlIE1TLVNNQiBzcGVjaWZpY2F0aW9uOiAiV2luZG93cy1iYXNlZCBTTUIgc2VydmVycyBzZXQgdGhpcworCWZpZWxkIHRvIG9uZSBidXQgZG8gbm90IGVuZm9yY2UgdGhpcyBsaW1pdCwgd2hpY2ggYWxsb3dzIGFuIFNNQiBjbGllbnQKKwl0byBlc3RhYmxpc2ggbW9yZSB2aXJ0dWFsIGNpcmN1aXRzIHRoYW4gYWxsb3dlZCBieSB0aGlzIHZhbHVlIC4uLiBidXQKKwlvdGhlciBzZXJ2ZXIgaW1wbGVtZW50YXRpb25zIGNhbiBlbmZvcmNlIHRoaXMgbGltaXQuIiAqLworCWlmIChtYXhfdmNzIDwgMikKKwkJbWF4X3ZjcyA9IDB4RkZGRjsKKworCXdyaXRlX2xvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKKwlpZiAoKHNlcy0+bmVlZF9yZWNvbm5lY3QpICYmIGlzX2ZpcnN0X3Nlc19yZWNvbm5lY3Qoc2VzKSkKKwkJCWdvdG8gZ2V0X3ZjX251bV9leGl0OyAgLyogdmNudW0gd2lsbCBiZSB6ZXJvICovCisJZm9yIChpID0gc2VzLT5zZXJ2ZXItPnNydl9jb3VudCAtIDE7IGkgPCBtYXhfdmNzOyBpKyspIHsKKwkJaWYgKGkgPT0gMCkgLyogdGhpcyBpcyB0aGUgb25seSBjb25uZWN0aW9uLCB1c2UgdmMgMCAqLworCQkJYnJlYWs7CisKKwkJZnJlZV92Y19mb3VuZCA9IDE7CisKKwkJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXMtPnNlcnZlci0+c21iX3Nlc19saXN0KSB7CisJCQl0bXBfc2VzID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzU2VzSW5mbywKKwkJCQkJICAgICBzbWJfc2VzX2xpc3QpOworCQkJaWYgKHRtcF9zZXMtPnZjbnVtID09IGkpIHsKKwkJCQlmcmVlX3ZjX2ZvdW5kID0gMDsKKwkJCQlicmVhazsgLyogZm91bmQgZHVwbGljYXRlLCB0cnkgbmV4dCB2Y251bSAqLworCQkJfQorCQl9CisJCWlmIChmcmVlX3ZjX2ZvdW5kKQorCQkJYnJlYWs7IC8qIHdlIGZvdW5kIGEgdmNudW1iZXIgdGhhdCB3aWxsIHdvcmsgLSB1c2UgaXQgKi8KKwl9CisKKwlpZiAoaSA9PSAwKQorCQl2Y251bSA9IDA7IC8qIGZvciBtb3N0IGNvbW1vbiBjYXNlLCBpZSBpZiBvbmUgc21iIHNlc3Npb24sIHVzZQorCQkJICAgICAgdmMgemVyby4gIEFsc28gZm9yIGNhc2Ugd2hlbiBubyBmcmVlIHZjbnVtLCB6ZXJvCisJCQkgICAgICBpcyBzYWZlc3QgdG8gc2VuZCAoc29tZSBjbGllbnRzIG9ubHkgc2VuZCB6ZXJvKSAqLworCWVsc2UgaWYgKGZyZWVfdmNfZm91bmQgPT0gMCkKKwkJdmNudW0gPSAxOyAgLyogd2UgY2FuIG5vdCByZXVzZSB2Yz0wIHNhZmVseSwgc2luY2Ugc29tZSBzZXJ2ZXJzCisJCQkJcmVzZXQgYWxsIHVpZHMgb24gdGhhdCwgYnV0IDEgaXMgb2suICovCisJZWxzZQorCQl2Y251bSA9IGk7CisJc2VzLT52Y251bSA9IHZjbnVtOworZ2V0X3ZjX251bV9leGl0OgorCXdyaXRlX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KHZjbnVtKTsKK30KKwogc3RhdGljIF9fdTMyIGNpZnNfc3NldHVwX2hkcihzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywgU0VTU0lPTl9TRVRVUF9BTkRYICpwU01CKQogewogCV9fdTMyIGNhcGFiaWxpdGllcyA9IDA7CiAKIAkvKiBpbml0IGZpZWxkcyBjb21tb24gdG8gYWxsIGZvdXIgdHlwZXMgb2YgU2Vzc1NldHVwICovCi0JLyogbm90ZSB0aGF0IGhlYWRlciBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGluIGhlYWRlcl9hc3NlbWJsZSAqLworCS8qIE5vdGUgdGhhdCBvZmZzZXRzIGZvciBmaXJzdCBzZXZlbiBmaWVsZHMgaW4gcmVxIHN0cnVjdCBhcmUgc2FtZSAgKi8KKwkvKglpbiBDSUZTIFNwZWNzIHNvIGRvZXMgbm90IG1hdHRlciB3aGljaCBvZiAzIGZvcm1zIG9mIHN0cnVjdCAqLworCS8qCXRoYXQgd2UgdXNlIGluIG5leHQgZmV3IGxpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogTm90ZSB0aGF0IGhlYWRlciBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGluIGhlYWRlcl9hc3NlbWJsZSAqLwogCXBTTUItPnJlcS5BbmRYQ29tbWFuZCA9IDB4RkY7CiAJcFNNQi0+cmVxLk1heEJ1ZmZlclNpemUgPSBjcHVfdG9fbGUxNihzZXMtPnNlcnZlci0+bWF4QnVmKTsKIAlwU01CLT5yZXEuTWF4TXB4Q291bnQgPSBjcHVfdG9fbGUxNihzZXMtPnNlcnZlci0+bWF4UmVxKTsKKwlwU01CLT5yZXEuVmNOdW1iZXIgPSBnZXRfbmV4dF92Y251bShzZXMpOwogCiAJLyogTm93IG5vIG5lZWQgdG8gc2V0IFNNQkZMR19DQVNFTEVTUyBvciBvYnNvbGV0ZSBDQU5PTklDQUwgUEFUSCAqLwogCkBAIC03MSw3ICsxNTUsNiBAQAogCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKQogCQljYXBhYmlsaXRpZXMgfD0gQ0FQX1VOSVg7CiAKLQkvKiBCQiBjaGVjayB3aGV0aGVyIHRvIGluaXQgdmNudW0gQkIgKi8KIAlyZXR1cm4gY2FwYWJpbGl0aWVzOwogfQogCkBAIC0yMjgsNyArMzExLDcgQEAKIAogCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCS8qIFVURi04IHN0cmluZyB3aWxsIG5vdCBncm93IG1vcmUgdGhhbiBmb3VyIHRpbWVzIGFzIGJpZyBhcyBVQ1MtMTYgKi8KLQlzZXMtPnNlcnZlck9TID0ga3phbGxvYyg0ICogbGVuLCBHRlBfS0VSTkVMKTsKKwlzZXMtPnNlcnZlck9TID0ga3phbGxvYygoNCAqIGxlbikgKyAyIC8qIHRyYWlsaW5nIG51bGwgKi8sIEdGUF9LRVJORUwpOwogCWlmIChzZXMtPnNlcnZlck9TICE9IE5VTEwpCiAJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLCAoX19sZTE2ICopZGF0YSwgbGVuLCBubHNfY3ApOwogCWRhdGEgKz0gMiAqIChsZW4gKyAxKTsKQEAgLTI0MSw3ICszMjQsNyBAQAogCQlyZXR1cm4gcmM7CiAKIAlrZnJlZShzZXMtPnNlcnZlck5PUyk7Ci0Jc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKDQgKiBsZW4sIEdGUF9LRVJORUwpOyAvKiBCQiB0aGlzIGlzIHdyb25nIGxlbmd0aCBGSVhNRSBCQiAqLworCXNlcy0+c2VydmVyTk9TID0ga3phbGxvYygoNCAqIGxlbikgKyAyIC8qIHRyYWlsaW5nIG51bGwgKi8sIEdGUF9LRVJORUwpOwogCWlmIChzZXMtPnNlcnZlck5PUyAhPSBOVUxMKSB7CiAJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck5PUywgKF9fbGUxNiAqKWRhdGEsIGxlbiwKIAkJCQkgICBubHNfY3ApOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJmc2N0bC5oIGIvZnMvY2lmcy9zbWJmc2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTZiODkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL3NtYmZzY3RsLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICAgZnMvY2lmcy9zbWJmc2N0bC5oOiBTTUIsIENJRlMsIFNNQjIgRlNDVEwgZGVmaW5pdGlvbnMKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQorICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KKy8qCisgKiBMaXN0IG9mIGlvY3RsL2ZzY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgYXJlIG9yIGNvdWxkIGJlIHVzZWZ1bCBpbiB0aGUKKyAqIGZ1dHVyZSB0byByZW1vdGUgY2xpZW50cyBsaWtlIGNpZnMgb3IgU01CMiBjbGllbnQuICBUaGVyZSBpcyBwcm9iYWJseQorICogYSBzbGlnaHRseSBsYXJnZXIgc2V0IG9mIGZzY3RscyB0aGF0IE5URlMgbG9jYWwgZmlsZXN5c3RlbSBjb3VsZCBoYW5kbGUsCisgKiBpbmNsdWRpbmcgdGhlIHNldmVuIGJlbG93IHRoYXQgd2UgZG8gbm90IGhhdmUgc3RydWN0IGRlZmluaXRpb25zIGZvci4KKyAqIEV2ZW4gd2l0aCBwcm90b2NvbCBkZWZpbml0aW9ucyBmb3IgbW9zdCBvZiB0aGVzZSBub3cgYXZhaWxhYmxlLCB3ZSBzdGlsbAorICogbmVlZCB0byBkbyBzb21lIGV4cGVyaW1lbnRhdGlvbiB0byBpZGVudGlmeSB3aGljaCBhcmUgcHJhY3RpY2FsIHRvIGRvCisgKiByZW1vdGVseS4gIFNvbWUgb2YgdGhlIGZvbGxvd2luZywgc3VjaCBhcyB0aGUgZW5jcnlwdGlvbi9jb21wcmVzc2lvbiBvbmVzCisgKiBjb3VsZCBiZSBpbnZva2VkIGZyb20gdG9vbHMgdmlhIGEgc3BlY2lhbGl6ZWQgaG9vayBpbnRvIHRoZSBWRlMgcmF0aGVyCisgKiB0aGFuIHZpYSB0aGUgc3RhbmRhcmQgdmZzIGVudHJ5IHBvaW50cworICovCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzEgMHgwMDA5MDAwMAorI2RlZmluZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8yIDB4MDAwOTAwMDQKKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9CQVRDSF9PUExPQ0sgICAweDAwMDkwMDA4CisjZGVmaW5lIEZTQ1RMX0xPQ0tfVk9MVU1FICAgICAgICAgICAgMHgwMDA5MDAxOAorI2RlZmluZSBGU0NUTF9VTkxPQ0tfVk9MVU1FICAgICAgICAgIDB4MDAwOTAwMUMKKyNkZWZpbmUgRlNDVExfSVNfUEFUSE5BTUVfVkFMSUQgICAgICAweDAwMDkwMDJDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDkwMDNDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUVVFUllfRkFUX0JQQiAgICAgICAgICAweDAwMDkwMDU4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKy8qIFZlcmlmeSB0aGUgbmV4dCBGU0NUTCBudW1iZXIsIHdlIGhhZCBpdCBhcyAweDAwMDkwMDkwIGJlZm9yZSAqLworI2RlZmluZSBGU0NUTF9GSUxFU1lTVEVNX0dFVF9TVEFUUyAgIDB4MDAwOTAwNjAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfTlRGU19WT0xVTUVfREFUQSAgIDB4MDAwOTAwNjQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfUkVUUklFVkFMX1BPSU5URVJTIDB4MDAwOTAwNzMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9JU19WT0xVTUVfRElSVFkgICAgICAgIDB4MDAwOTAwNzggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9BTExPV19FWFRFTkRFRF9EQVNEX0lPIDB4MDAwOTAwODMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9SRVFVRVNUX0ZJTFRFUl9PUExPQ0sgIDB4MDAwOTAwOEMKKyNkZWZpbmUgRlNDVExfRklORF9GSUxFU19CWV9TSUQgICAgICAweDAwMDkwMDhGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX09CSkVDVF9JRCAgICAgICAgICAweDAwMDkwMDk4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX09CSkVDVF9JRCAgICAgICAgICAweDAwMDkwMDlDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfREVMRVRFX09CSkVDVF9JRCAgICAgICAweDAwMDkwMEEwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfREVMRVRFX1JFUEFSU0VfUE9JTlQgICAweDAwMDkwMEFDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX09CSkVDVF9JRF9FWFRFTkRFRCAweDAwMDkwMEJDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfQ1JFQVRFX09SX0dFVF9PQkpFQ1RfSUQgMHgwMDA5MDBDMCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9TUEFSU0UgICAgICAgICAgICAgMHgwMDA5MDBDNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9FTkNSWVBUSU9OICAgICAgICAgMHgwMDA5MDBENyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0VOQ1JZUFRJT05fRlNDVExfSU8gICAgMHgwMDA5MDBEQiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQURfUkFXX0VOQ1JZUFRFRCAgICAgMHgwMDA5MDBFMyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQURfRklMRV9VU05fREFUQSAgICAgMHgwMDA5MDBFQiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1VTTl9DTE9TRV9SRUNPUkQgMHgwMDA5MDBFRiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NJU19DT1BZRklMRSAgICAgICAgICAgMHgwMDA5MDEwMCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQ0FMTF9GSUxFICAgICAgICAgICAgMHgwMDA5MDExNyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX1NQQVJJTkdfSU5GTyAgICAgMHgwMDA5MDEzOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX09OX0RFQUxMT0MgICAgMHgwMDA5MDE5NCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9TSE9SVF9OQU1FX0JFSEFWSU9SIDB4MDAwOTAxQjQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9RVUVSWV9BTExPQ0FURURfUkFOR0VTIDB4MDAwOTQwQ0YgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfREVGRUNUX01BTkFHRU1FTlQgIDB4MDAwOTgxMzQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TSVNfTElOS19GSUxFUyAgICAgICAgIDB4MDAwOUMxMDQKKyNkZWZpbmUgRlNDVExfUElQRV9QRUVLICAgICAgICAgICAgICAweDAwMTE0MDBDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUElQRV9UUkFOU0NFSVZFICAgICAgICAweDAwMTFDMDE3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKy8qIHN0cmFuZ2UgdGhhdCB0aGUgbnVtYmVyIGZvciB0aGlzIG9wIGlzIG5vdCBzZXF1ZW50aWFsIHdpdGggcHJldmlvdXMgb3AgKi8KKyNkZWZpbmUgRlNDVExfUElQRV9XQUlUICAgICAgICAgICAgICAweDAwMTEwMDE4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfTE1SX0dFVF9MSU5LX1RSQUNLX0lORiAweDAwMTQwMEU4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfTE1SX1NFVF9MSU5LX1RSQUNLX0lORiAweDAwMTQwMEVDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKworI2RlZmluZSBJT19SRVBBUlNFX1RBR19NT1VOVF9QT0lOVCAgIDB4QTAwMDAwMDMKKyNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfSFNNICAgICAgICAgICAweEMwMDAwMDA0CisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX1NJUyAgICAgICAgICAgMHg4MDAwMDAwNwpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCBkMDE0NWNhLi4wOTQ5YjQzIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTQwMiw2ICsxNDAyLDcgQEAKIAlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMTsKIAogCXJldHZhbCA9IC1FTk9NRU07CiAJYnBybS0+Y3JlZCA9IHByZXBhcmVfZXhlY19jcmVkcygpOwpAQCAtMTQ1NCw2ICsxNDU1LDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwogCWZyZWVfYnBybShicHJtKTsKQEAgLTE0NzAsNiArMTQ3Miw3IEBACiAJfQogCiBvdXRfdW5sb2NrOgorCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggNzYzZmU2OS4uZmY3ODY2OCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2lvY3RsLmMKKysrIGIvZnMvY29tcGF0X2lvY3RsLmMKQEAgLTE5MTgsNiArMTkxOCw5IEBACiAvKiAweDAwICovCiBDT01QQVRJQkxFX0lPQ1RMKEZJQk1BUCkKIENPTVBBVElCTEVfSU9DVEwoRklHRVRCU1opCisvKiAnWCcgLSBvcmlnaW5hbGx5IFhGUyBidXQgc29tZSBub3cgaW4gdGhlIFZGUyAqLworQ09NUEFUSUJMRV9JT0NUTChGSUZSRUVaRSkKK0NPTVBBVElCTEVfSU9DVEwoRklUSEFXKQogLyogUkFJRCAqLwogQ09NUEFUSUJMRV9JT0NUTChSQUlEX1ZFUlNJT04pCiBDT01QQVRJQkxFX0lPQ1RMKEdFVF9BUlJBWV9JTkZPKQpAQCAtMTk0Myw2ICsxOTQ2LDggQEAKIC8qIEJpZyBLICovCiBDT01QQVRJQkxFX0lPQ1RMKFBJT19GT05UKQogQ09NUEFUSUJMRV9JT0NUTChHSU9fRk9OVCkKK0NPTVBBVElCTEVfSU9DVEwoUElPX0NNQVApCitDT01QQVRJQkxFX0lPQ1RMKEdJT19DTUFQKQogVUxPTkdfSU9DVEwoS0RTSUdBQ0NFUFQpCiBDT01QQVRJQkxFX0lPQ1RMKEtER0VUS0VZQ09ERSkKIENPTVBBVElCTEVfSU9DVEwoS0RTRVRLRVlDT0RFKQpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA5MzdkZjBmLi4wN2UyZDRhIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKIAlpcHV0KGlub2RlKTsKIAlyZXR1cm4gcmVzOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoZF9vYnRhaW5fYWxpYXMpOworRVhQT1JUX1NZTUJPTChkX29idGFpbl9hbGlhcyk7CiAKIC8qKgogICogZF9zcGxpY2VfYWxpYXMgLSBzcGxpY2UgYSBkaXNjb25uZWN0ZWQgZGVudHJ5IGludG8gdGhlIHRyZWUgaWYgb25lIGV4aXN0cwpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuYwppbmRleCA1ZjMyMzFiLi5iZmY0MDUyIDEwMDY0NAotLS0gYS9mcy9kZXZwdHMvaW5vZGUuYworKysgYi9mcy9kZXZwdHMvaW5vZGUuYwpAQCAtMTk4LDkgKzE5OCw2IEBACiAKIAlmc2ktPnB0bXhfZGVudHJ5ID0gZGVudHJ5OwogCXJjID0gMDsKLQotCXByaW50ayhLRVJOX0RFQlVHICJDcmVhdGVkIHB0bXggbm9kZSBpbiBkZXZwdHMgaW5vICVsdVxuIiwKLQkJCWlub2RlLT5pX2lubyk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmM7CkBAIC0zNjksOCArMzY2LDYgQEAKIAlzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaTsKIAlzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHM7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgImRldnB0czogbmV3aW5zdGFuY2UgbW91bnRcbiIpOwotCiAJZXJyID0gZ2V0X3NiX25vZGV2KGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBkZXZwdHNfZmlsbF9zdXBlciwgbW50KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwppbmRleCBmNmNhZWIxLi44YjY1ZjI4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9jcnlwdG8uYworKysgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwpAQCAtOTQ2LDYgKzk0Niw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShnbG9iYWxfYXV0aF90b2ssCiAJCQkgICAgJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0LAogCQkJICAgIG1vdW50X2NyeXB0X3N0YXRfbGlzdCkgeworCQlpZiAoZ2xvYmFsX2F1dGhfdG9rLT5mbGFncyAmIEVDUllQVEZTX0FVVEhfVE9LX0ZORUspCisJCQljb250aW51ZTsKIAkJcmMgPSBlY3J5cHRmc19hZGRfa2V5c2lnKGNyeXB0X3N0YXQsIGdsb2JhbF9hdXRoX3Rvay0+c2lnKTsKIAkJaWYgKHJjKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGFkZGluZyBrZXlzaWc7IHJjID0gWyVkXVxuIiwgcmMpOwpAQCAtMTMyMiwxNCArMTMyNCwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1lY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b19jb250ZW50cyhzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKLQkJCQkgICAgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJCSAgICBjaGFyICp2aXJ0KQorZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9fY29udGVudHMoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAorCQkJCSAgICBjaGFyICp2aXJ0LCBzaXplX3QgdmlydF9sZW4pCiB7CiAJaW50IHJjOwogCiAJcmMgPSBlY3J5cHRmc193cml0ZV9sb3dlcihlY3J5cHRmc19kZW50cnktPmRfaW5vZGUsIHZpcnQsCi0JCQkJICAwLCBjcnlwdF9zdGF0LT5udW1faGVhZGVyX2J5dGVzX2F0X2Zyb250KTsKKwkJCQkgIDAsIHZpcnRfbGVuKTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gd3JpdGUgaGVhZGVyICIKIAkJICAgICAgICJpbmZvcm1hdGlvbiB0byBsb3dlciBmaWxlOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLApAQCAtMTMzOSw3ICsxMzQwLDYgQEAKIAogc3RhdGljIGludAogZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9feGF0dHIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJCSBzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKIAkJCQkgY2hhciAqcGFnZV92aXJ0LCBzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgcmM7CkBAIC0xMzQ5LDYgKzEzNDksMTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVjcnlwdGZzX2dldF96ZXJvZWRfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBfX0dGUF9aRVJPLCBvcmRlcik7CisJaWYgKHBhZ2UpCisJCXJldHVybiAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOworCXJldHVybiAwOworfQorCiAvKioKICAqIGVjcnlwdGZzX3dyaXRlX21ldGFkYXRhCiAgKiBAZWNyeXB0ZnNfZGVudHJ5OiBUaGUgZUNyeXB0ZnMgZGVudHJ5CkBAIC0xMzY1LDcgKzEzNzYsOSBAQAogewogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CiAJY2hhciAqdmlydDsKKwlzaXplX3QgdmlydF9sZW47CiAJc2l6ZV90IHNpemUgPSAwOwogCWludCByYyA9IDA7CiAKQEAgLTEzODEsMzMgKzEzOTQsMzUgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CisJdmlydF9sZW4gPSBjcnlwdF9zdGF0LT5udW1faGVhZGVyX2J5dGVzX2F0X2Zyb250OworCW9yZGVyID0gZ2V0X29yZGVyKHZpcnRfbGVuKTsKIAkvKiBSZWxlYXNlZCBpbiB0aGlzIGZ1bmN0aW9uICovCi0JdmlydCA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCXZpcnQgPSAoY2hhciAqKWVjcnlwdGZzX2dldF96ZXJvZWRfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOwogCWlmICghdmlydCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfd3JpdGVfaGVhZGVyc192aXJ0KHZpcnQsIFBBR0VfQ0FDSEVfU0laRSwgJnNpemUsCi0JCQkJCSBjcnlwdF9zdGF0LCBlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfd3JpdGVfaGVhZGVyc192aXJ0KHZpcnQsIHZpcnRfbGVuLCAmc2l6ZSwgY3J5cHRfc3RhdCwKKwkJCQkJIGVjcnlwdGZzX2RlbnRyeSk7CiAJaWYgKHVubGlrZWx5KHJjKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciB3aGlsc3Qgd3JpdGluZyBoZWFkZXJzOyByYyA9IFslZF1cbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAlpZiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUikKLQkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b194YXR0cihlY3J5cHRmc19kZW50cnksCi0JCQkJCQkgICAgICBjcnlwdF9zdGF0LCB2aXJ0LCBzaXplKTsKKwkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b194YXR0cihlY3J5cHRmc19kZW50cnksIHZpcnQsCisJCQkJCQkgICAgICBzaXplKTsKIAllbHNlCi0JCXJjID0gZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9fY29udGVudHMoY3J5cHRfc3RhdCwKLQkJCQkJCQkgZWNyeXB0ZnNfZGVudHJ5LCB2aXJ0KTsKKwkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b19jb250ZW50cyhlY3J5cHRmc19kZW50cnksIHZpcnQsCisJCQkJCQkJIHZpcnRfbGVuKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igd3JpdGluZyBtZXRhZGF0YSBvdXQgdG8gbG93ZXIgZmlsZTsgIgogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiBvdXRfZnJlZToKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmlydCk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2aXJ0LCBvcmRlcik7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMjIwNiwxNyArMjIyMSwxOSBAQAogCQkJCQkgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGlyX2RlbnRyeSwKIAkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX3NpemUpCiB7CisJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQgPQorCQkmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKAorCQkJZWNyeXB0ZnNfZGlyX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CiAJY2hhciAqZGVjb2RlZF9uYW1lOwogCXNpemVfdCBkZWNvZGVkX25hbWVfc2l6ZTsKIAlzaXplX3QgcGFja2V0X3NpemU7CiAJaW50IHJjID0gMDsKIAotCWlmICgobmFtZV9zaXplID4gRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYX1NJWkUpCisJaWYgKChtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0dMT0JBTF9FTkNSWVBUX0ZJTEVOQU1FUykKKwkgICAgJiYgIShtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0VOQ1JZUFRFRF9WSUVXX0VOQUJMRUQpCisJICAgICYmIChuYW1lX3NpemUgPiBFQ1JZUFRGU19GTkVLX0VOQ1JZUFRFRF9GSUxFTkFNRV9QUkVGSVhfU0laRSkKIAkgICAgJiYgKHN0cm5jbXAobmFtZSwgRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYLAogCQkJRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYX1NJWkUpID09IDApKSB7Ci0JCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0ID0KLQkJCSZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCi0JCQkJZWNyeXB0ZnNfZGlyX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CiAJCWNvbnN0IGNoYXIgKm9yaWdfbmFtZSA9IG5hbWU7CiAJCXNpemVfdCBvcmlnX25hbWVfc2l6ZSA9IG5hbWVfc2l6ZTsKIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmggYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAppbmRleCBjMTFmYzk1Li5hYzc0OWQ0IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAorKysgYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaApAQCAtMzI4LDYgKzMyOCw3IEBACiAgKi8KIHN0cnVjdCBlY3J5cHRmc19nbG9iYWxfYXV0aF90b2sgewogI2RlZmluZSBFQ1JZUFRGU19BVVRIX1RPS19JTlZBTElEIDB4MDAwMDAwMDEKKyNkZWZpbmUgRUNSWVBURlNfQVVUSF9UT0tfRk5FSyAgICAweDAwMDAwMDAyCiAJdTMyIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgbW91bnRfY3J5cHRfc3RhdF9saXN0OwogCXN0cnVjdCBrZXkgKmdsb2JhbF9hdXRoX3Rva19rZXk7CkBAIC02MTksNyArNjIwLDYgQEAKIAkJICAgICAgIHUzMiBmbGFncyk7CiBpbnQgZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCi0JCQkJCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSwKIAkJCQkJc3RydWN0IG5hbWVpZGF0YSAqZWNyeXB0ZnNfbmQpOwogaW50IGVjcnlwdGZzX2RlY29kZV9hbmRfZGVjcnlwdF9maWxlbmFtZShjaGFyICoqZGVjcnlwdGVkX25hbWUsCkBAIC02OTYsNyArNjk2LDcgQEAKIGludCBlY3J5cHRmc19hZGRfa2V5c2lnKHN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LCBjaGFyICpzaWcpOwogaW50CiBlY3J5cHRmc19hZGRfZ2xvYmFsX2F1dGhfdG9rKHN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0LAotCQkJICAgY2hhciAqc2lnKTsKKwkJCSAgIGNoYXIgKnNpZywgdTMyIGdsb2JhbF9hdXRoX3Rva19mbGFncyk7CiBpbnQgZWNyeXB0ZnNfZ2V0X2dsb2JhbF9hdXRoX3Rva19mb3Jfc2lnKAogCXN0cnVjdCBlY3J5cHRmc19nbG9iYWxfYXV0aF90b2sgKipnbG9iYWxfYXV0aF90b2ssCiAJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQsIGNoYXIgKnNpZyk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCA1Njk3ODk5Li41NWIzMTQ1IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTI0Niw3ICsyNDYsNiBAQAogICovCiBpbnQgZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCi0JCQkJCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSwKIAkJCQkJc3RydWN0IG5hbWVpZGF0YSAqZWNyeXB0ZnNfbmQpCiB7CkBAIC0yNTQsNiArMjUzLDcgQEAKIAlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKIAlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlOwogCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0OworCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0OwogCWNoYXIgKnBhZ2VfdmlydCA9IE5VTEw7CiAJdTY0IGZpbGVfc2l6ZTsKIAlpbnQgcmMgPSAwOwpAQCAtMzE0LDYgKzMxNCwxMSBAQAogCQkJZ290byBvdXRfZnJlZV9rbWVtOwogCQl9CiAJfQorCWNyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZSgKKwkJCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKKwkvKiBUT0RPOiBsb2NrIGZvciBjcnlwdF9zdGF0IGNvbXBhcmlzb24gKi8KKwlpZiAoIShjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX1BPTElDWV9BUFBMSUVEKSkKKwkJCWVjcnlwdGZzX3NldF9kZWZhdWx0X3NpemVzKGNyeXB0X3N0YXQpOwogCXJjID0gZWNyeXB0ZnNfcmVhZF9hbmRfdmFsaWRhdGVfaGVhZGVyX3JlZ2lvbihwYWdlX3ZpcnQsCiAJCQkJCQkgICAgICBlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogCWlmIChyYykgewpAQCAtMzYyLDkgKzM2Nyw3IEBACiB7CiAJY2hhciAqZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUgPSBOVUxMOwogCXNpemVfdCBlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZV9zaXplOwotCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0gTlVMTDsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdCA9IE5VTEw7Ci0Jc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm87CiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeSwgKmxvd2VyX2RlbnRyeTsKIAlpbnQgcmMgPSAwOwogCkBAIC0zODgsMjYgKzM5MSwxNSBAQAogCX0KIAlpZiAobG93ZXJfZGVudHJ5LT5kX2lub2RlKQogCQlnb3RvIGxvb2t1cF9hbmRfaW50ZXJwb3NlOwotCWlub2RlX2luZm8gPSAgZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwotCWlmIChpbm9kZV9pbmZvKSB7Ci0JCWNyeXB0X3N0YXQgPSAmaW5vZGVfaW5mby0+Y3J5cHRfc3RhdDsKLQkJLyogVE9ETzogbG9jayBmb3IgY3J5cHRfc3RhdCBjb21wYXJpc29uICovCi0JCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfUE9MSUNZX0FQUExJRUQpKQotCQkJZWNyeXB0ZnNfc2V0X2RlZmF1bHRfc2l6ZXMoY3J5cHRfc3RhdCk7Ci0JfQotCWlmIChjcnlwdF9zdGF0KQotCQltb3VudF9jcnlwdF9zdGF0ID0gY3J5cHRfc3RhdC0+bW91bnRfY3J5cHRfc3RhdDsKLQllbHNlCi0JCW1vdW50X2NyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKAotCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX3NiKS0+bW91bnRfY3J5cHRfc3RhdDsKLQlpZiAoIShjcnlwdF9zdGF0ICYmIChjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0VOQ1JZUFRfRklMRU5BTUVTKSkKLQkgICAgJiYgIShtb3VudF9jcnlwdF9zdGF0ICYmIChtb3VudF9jcnlwdF9zdGF0LT5mbGFncwotCQkJCSAgICAgJiBFQ1JZUFRGU19HTE9CQUxfRU5DUllQVF9GSUxFTkFNRVMpKSkKKwltb3VudF9jcnlwdF9zdGF0ID0gJmVjcnlwdGZzX3N1cGVyYmxvY2tfdG9fcHJpdmF0ZSgKKwkJCQllY3J5cHRmc19kZW50cnktPmRfc2IpLT5tb3VudF9jcnlwdF9zdGF0OworCWlmICghKG1vdW50X2NyeXB0X3N0YXQKKwkgICAgJiYgKG1vdW50X2NyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfR0xPQkFMX0VOQ1JZUFRfRklMRU5BTUVTKSkpCiAJCWdvdG8gbG9va3VwX2FuZF9pbnRlcnBvc2U7CiAJZHB1dChsb3dlcl9kZW50cnkpOwogCXJjID0gZWNyeXB0ZnNfZW5jcnlwdF9hbmRfZW5jb2RlX2ZpbGVuYW1lKAogCQkmZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUsICZlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZV9zaXplLAotCQljcnlwdF9zdGF0LCBtb3VudF9jcnlwdF9zdGF0LCBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLAorCQlOVUxMLCBtb3VudF9jcnlwdF9zdGF0LCBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLAogCQllY3J5cHRmc19kZW50cnktPmRfbmFtZS5sZW4pOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHRvIGVuY3J5cHQgYW5kIGVuY29kZSAiCkBAIC00MjYsNyArNDE4LDcgQEAKIAl9CiBsb29rdXBfYW5kX2ludGVycG9zZToKIAlyYyA9IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSwgbG93ZXJfZGVudHJ5LAotCQkJCQkJIGNyeXB0X3N0YXQsIGVjcnlwdGZzX2Rpcl9pbm9kZSwKKwkJCQkJCSBlY3J5cHRmc19kaXJfaW5vZGUsCiAJCQkJCQkgZWNyeXB0ZnNfbmQpOwogCWdvdG8gb3V0Owogb3V0X2RfZHJvcDoKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCmluZGV4IGZmNTM5NDIuLmU0YTYyMjMgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKKysrIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwpAQCAtMjM3NSw3ICsyMzc1LDcgQEAKIAogaW50CiBlY3J5cHRmc19hZGRfZ2xvYmFsX2F1dGhfdG9rKHN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0LAotCQkJICAgICBjaGFyICpzaWcpCisJCQkgICAgIGNoYXIgKnNpZywgdTMyIGdsb2JhbF9hdXRoX3Rva19mbGFncykKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZ2xvYmFsX2F1dGhfdG9rICpuZXdfYXV0aF90b2s7CiAJaW50IHJjID0gMDsKQEAgLTIzODksNiArMjM4OSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAltZW1jcHkobmV3X2F1dGhfdG9rLT5zaWcsIHNpZywgRUNSWVBURlNfU0lHX1NJWkVfSEVYKTsKKwluZXdfYXV0aF90b2stPmZsYWdzID0gZ2xvYmFsX2F1dGhfdG9rX2ZsYWdzOwogCW5ld19hdXRoX3Rvay0+c2lnW0VDUllQVEZTX1NJR19TSVpFX0hFWF0gPSAnXDAnOwogCW11dGV4X2xvY2soJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKIAlsaXN0X2FkZCgmbmV3X2F1dGhfdG9rLT5tb3VudF9jcnlwdF9zdGF0X2xpc3QsCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggNzg5Y2YyZS4uYWVkNTZjMiAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtMzE5LDcgKzMxOSw3IEBACiAJCWNhc2UgZWNyeXB0ZnNfb3B0X2VjcnlwdGZzX3NpZzoKIAkJCXNpZ19zcmMgPSBhcmdzWzBdLmZyb207CiAJCQlyYyA9IGVjcnlwdGZzX2FkZF9nbG9iYWxfYXV0aF90b2sobW91bnRfY3J5cHRfc3RhdCwKLQkJCQkJCQkgIHNpZ19zcmMpOworCQkJCQkJCSAgc2lnX3NyYywgMCk7CiAJCQlpZiAocmMpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgIgogCQkJCSAgICAgICAiZ2xvYmFsIHNpZzsgcmMgPSBbJWRdXG4iLCByYyk7CkBAIC0zNzAsNyArMzcwLDggQEAKIAkJCQlFQ1JZUFRGU19TSUdfU0laRV9IRVhdID0gJ1wwJzsKIAkJCXJjID0gZWNyeXB0ZnNfYWRkX2dsb2JhbF9hdXRoX3RvaygKIAkJCQltb3VudF9jcnlwdF9zdGF0LAotCQkJCW1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9kZWZhdWx0X2ZuZWtfc2lnKTsKKwkJCQltb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfZGVmYXVsdF9mbmVrX3NpZywKKwkJCQlFQ1JZUFRGU19BVVRIX1RPS19GTkVLKTsKIAkJCWlmIChyYykgewogCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgYXR0ZW1wdGluZyB0byByZWdpc3RlciAiCiAJCQkJICAgICAgICJnbG9iYWwgZm5layBzaWcgWyVzXTsgcmMgPSBbJWRdXG4iLApkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAwMTFiOWI4Li5jNWM0MjRmIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNDE3LDEwICs0MTcsMTAgQEAKIAllcF91bnJlZ2lzdGVyX3BvbGx3YWl0KGVwLCBlcGkpOwogCiAJLyogUmVtb3ZlIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgbGlzdCBvZiBlcG9sbCBob29rcyAqLwotCXNwaW5fbG9jaygmZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5mbGxpbmspKQogCQlsaXN0X2RlbF9pbml0KCZlcGktPmZsbGluayk7Ci0Jc3Bpbl91bmxvY2soJmZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAKIAlyYl9lcmFzZSgmZXBpLT5yYm4sICZlcC0+cmJyKTsKIApAQCAtNTM4LDcgKzUzOCw3IEBACiAJc3RydWN0IGVwaXRlbSAqZXBpOwogCiAJLyoKLQkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9lcF9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAorCSAqIFdlIGRvbid0IHdhbnQgdG8gZ2V0ICJmaWxlLT5mX2xvY2siIGJlY2F1c2UgaXQgaXMgbm90CiAJICogbmVjZXNzYXJ5LiBJdCBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UncmUgaW4gdGhlICJzdHJ1Y3QgZmlsZSIKIAkgKiBjbGVhbnVwIHBhdGgsIGFuZCB0aGlzIG1lYW5zIHRoYXQgbm9vbmUgaXMgdXNpbmcgdGhpcyBmaWxlIGFueW1vcmUuCiAJICogU28sIGZvciBleGFtcGxlLCBlcG9sbF9jdGwoKSBjYW5ub3QgaGl0IGhlcmUgc2ljbmUgaWYgd2UgcmVhY2ggdGhpcwpAQCAtNTQ3LDYgKzU0Nyw4IEBACiAJICogd2lsbCBjb3JyZWN0bHkgc2VyaWFsaXplIHRoZSBvcGVyYXRpb24uIFdlIGRvIG5lZWQgdG8gYWNxdWlyZQogCSAqICJlcC0+bXR4IiBhZnRlciAiZXBtdXRleCIgYmVjYXVzZSBlcF9yZW1vdmUoKSByZXF1aXJlcyBpdCB3aGVuIGNhbGxlZAogCSAqIGZyb20gYW55d2hlcmUgYnV0IGVwX2ZyZWUoKS4KKwkgKgorCSAqIEJlc2lkZXMsIGVwX3JlbW92ZSgpIGFjcXVpcmVzIHRoZSBsb2NrLCBzbyB3ZSBjYW4ndCBob2xkIGl0IGhlcmUuCiAJICovCiAJbXV0ZXhfbG9jaygmZXBtdXRleCk7CiAKQEAgLTc4NSw5ICs3ODcsOSBAQAogCQlnb3RvIGVycm9yX3VucmVnaXN0ZXI7CiAKIAkvKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgbGlzdCBvZiBhY3RpdmUgZXBvbGwgaG9vayBmb3IgdGhpcyBmaWxlICovCi0Jc3Bpbl9sb2NrKCZ0ZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX2xvY2soJnRmaWxlLT5mX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmVwaS0+ZmxsaW5rLCAmdGZpbGUtPmZfZXBfbGlua3MpOwotCXNwaW5fdW5sb2NrKCZ0ZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX3VubG9jaygmdGZpbGUtPmZfbG9jayk7CiAKIAkvKgogCSAqIEFkZCB0aGUgY3VycmVudCBpdGVtIHRvIHRoZSBSQiB0cmVlLiBBbGwgUkIgdHJlZSBvcGVyYXRpb25zIGFyZQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDkyOWI1ODAuLmI5ZjFjMTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CkBAIC0xMjcsNiArMTI4LDkgQEAKIAkJCQkgTUFZX1JFQUQgfCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXhpdDsKKwllcnJvciA9IGltYV9wYXRoX2NoZWNrKCZuZC5wYXRoLCBNQVlfUkVBRCB8IE1BWV9FWEVDIHwgTUFZX09QRU4pOworCWlmIChlcnJvcikKKwkJZ290byBleGl0OwogCiAJZmlsZSA9IG5hbWVpZGF0YV90b19maWxwKCZuZCwgT19SRE9OTFl8T19MQVJHRUZJTEUpOwogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKQEAgLTY3NCw2ICs2NzgsOSBAQAogCWVyciA9IGlub2RlX3Blcm1pc3Npb24obmQucGF0aC5kZW50cnktPmRfaW5vZGUsIE1BWV9FWEVDIHwgTUFZX09QRU4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3BhdGhfcHV0OworCWVyciA9IGltYV9wYXRoX2NoZWNrKCZuZC5wYXRoLCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9wYXRoX3B1dDsKIAogCWZpbGUgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIE9fUkRPTkxZfE9fTEFSR0VGSUxFKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQpAQCAtMTE4NCw2ICsxMTkxLDkgQEAKIAlyZXR2YWwgPSBzZWN1cml0eV9icHJtX2NoZWNrKGJwcm0pOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gaW1hX2Jwcm1fY2hlY2soYnBybSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAogCS8qIGtlcm5lbCBtb2R1bGUgbG9hZGVyIGZpeHVwICovCiAJLyogc28gd2UgZG9uJ3QgdHJ5IHRvIGxvYWQgcnVuIG1vZHByb2JlIGluIGtlcm5lbCBzcGFjZS4gKi8KQEAgLTEyODQsNiArMTI5NCw3IEBACiAJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dF9mcmVlOworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDE7CiAKIAlyZXR2YWwgPSAtRU5PTUVNOwogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKQEAgLTEzMzcsNiArMTM0OCw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWFjY3RfdXBkYXRlX2ludGVncmFscyhjdXJyZW50KTsKIAlmcmVlX2Jwcm0oYnBybSk7CkBAIC0xMzU1LDYgKzEzNjcsNyBAQAogCX0KIAogb3V0X3VubG9jazoKKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggNWZhNDUzYi4uMDVlNWMyZSAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMTQzNSw2ICsxNDM1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYnVmZmVyX3VubWFwcGVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuICFidWZmZXJfbWFwcGVkKGJoKTsKK30KIC8qCiAgKiBOb3RlIHRoYXQgd2UgYWx3YXlzIHN0YXJ0IGEgdHJhbnNhY3Rpb24gZXZlbiBpZiB3ZSdyZSBub3Qgam91cm5hbGxpbmcKICAqIGRhdGEuICBUaGlzIGlzIHRvIHByZXNlcnZlIG9yZGVyaW5nOiBhbnkgaG9sZSBpbnN0YW50aWF0aW9uIHdpdGhpbgpAQCAtMTUwNSw2ICsxNTA5LDE1IEBACiAJaWYgKGV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpKQogCQlnb3RvIG91dF9mYWlsOwogCisJaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSB7CisJCWNyZWF0ZV9lbXB0eV9idWZmZXJzKHBhZ2UsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSwKKwkJCQkoMSA8PCBCSF9EaXJ0eSl8KDEgPDwgQkhfVXB0b2RhdGUpKTsKKwl9IGVsc2UgaWYgKCF3YWxrX3BhZ2VfYnVmZmVycyhOVUxMLCBwYWdlX2J1ZmZlcnMocGFnZSksIDAsIFBBR0VfQ0FDSEVfU0laRSwgTlVMTCwgYnVmZmVyX3VubWFwcGVkKSkgeworCQkvKiBQcm92aWRlIE5VTEwgaW5zdGVhZCBvZiBnZXRfYmxvY2sgc28gdGhhdCB3ZSBjYXRjaCBidWdzIGlmIGJ1ZmZlcnMgd2VyZW4ndCByZWFsbHkgbWFwcGVkICovCisJCXJldHVybiBibG9ja193cml0ZV9mdWxsX3BhZ2UocGFnZSwgTlVMTCwgd2JjKTsKKwl9CisJcGFnZV9idWZzID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCBleHQzX3dyaXRlcGFnZV90cmFuc19ibG9ja3MoaW5vZGUpKTsKIAogCWlmIChJU19FUlIoaGFuZGxlKSkgewpAQCAtMTUxMiwxMSArMTUyNSw2IEBACiAJCWdvdG8gb3V0X2ZhaWw7CiAJfQogCi0JaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSB7Ci0JCWNyZWF0ZV9lbXB0eV9idWZmZXJzKHBhZ2UsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSwKLQkJCQkoMSA8PCBCSF9EaXJ0eSl8KDEgPDwgQkhfVXB0b2RhdGUpKTsKLQl9Ci0JcGFnZV9idWZzID0gcGFnZV9idWZmZXJzKHBhZ2UpOwogCXdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZzLCAwLAogCQkJUEFHRV9DQUNIRV9TSVpFLCBOVUxMLCBiZ2V0X29uZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IDlhNTBiODAuLmRlOTQ1OWIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtNjA5LDcgKzYwOSw5IEBACiAgKi8KIGludCBleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKnJldHJpZXMpCiB7Ci0JaWYgKCFleHQ0X2hhc19mcmVlX2Jsb2NrcyhFWFQ0X1NCKHNiKSwgMSkgfHwgKCpyZXRyaWVzKSsrID4gMykKKwlpZiAoIWV4dDRfaGFzX2ZyZWVfYmxvY2tzKEVYVDRfU0Ioc2IpLCAxKSB8fAorCSAgICAoKnJldHJpZXMpKysgPiAzIHx8CisJICAgICFFWFQ0X1NCKHNiKS0+c19qb3VybmFsKQogCQlyZXR1cm4gMDsKIAogCWpiZF9kZWJ1ZygxLCAiJXM6IHJldHJ5aW5nIG9wZXJhdGlvbiBhZnRlciBFTk9TUENcbiIsIHNiLT5zX2lkKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYWFmYzllYi4uYjBjODdkYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTg2OCw3ICs4NjgsNyBAQAogewogCXVuc2lnbmVkIGxlbiA9IGxlMTZfdG9fY3B1KGRsZW4pOwogCi0JaWYgKGxlbiA9PSBFWFQ0X01BWF9SRUNfTEVOKQorCWlmIChsZW4gPT0gRVhUNF9NQVhfUkVDX0xFTiB8fCBsZW4gPT0gMCkKIAkJcmV0dXJuIDEgPDwgMTY7CiAJcmV0dXJuIGxlbjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggZTJlYWIxOS4uZTBhYTRmZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTExMjIsNyArMTEyMiw4IEBACiAJc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqaXg7CiAJc3RydWN0IGV4dDRfZXh0ZW50ICpleDsKIAlleHQ0X2ZzYmxrX3QgYmxvY2s7Ci0JaW50IGRlcHRoLCBlZV9sZW47CisJaW50IGRlcHRoOwkvKiBOb3RlLCBOT1QgZWhfZGVwdGg7IGRlcHRoIGZyb20gdG9wIG9mIHRyZWUgKi8KKwlpbnQgZWVfbGVuOwogCiAJQlVHX09OKHBhdGggPT0gTlVMTCk7CiAJZGVwdGggPSBwYXRoLT5wX2RlcHRoOwpAQCAtMTE3OSw3ICsxMTgwLDggQEAKIAkJaWYgKGJoID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTzsKIAkJZWggPSBleHRfYmxvY2tfaGRyKGJoKTsKLQkJaWYgKGV4dDRfZXh0X2NoZWNrX2hlYWRlcihpbm9kZSwgZWgsIGRlcHRoKSkgeworCQkvKiBzdWJ0cmFjdCBmcm9tIHBfZGVwdGggdG8gZ2V0IHByb3BlciBlaF9kZXB0aCAqLworCQlpZiAoZXh0NF9leHRfY2hlY2tfaGVhZGVyKGlub2RlLCBlaCwgcGF0aC0+cF9kZXB0aCAtIGRlcHRoKSkgewogCQkJcHV0X2JoKGJoKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lhbGxvYy5jIGIvZnMvZXh0NC9pYWxsb2MuYwppbmRleCA0ZmI4NmEwLi4yZDJiMzU4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lhbGxvYy5jCisrKyBiL2ZzL2V4dDQvaWFsbG9jLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKIAlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXM7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpOwotCWludCBmYXRhbCA9IDAsIGVyciwgY291bnQ7CisJaW50IGZhdGFsID0gMCwgZXJyLCBjb3VudCwgY2xlYXJlZDsKIAlleHQ0X2dyb3VwX3QgZmxleF9ncm91cDsKIAogCWlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpID4gMSkgewpAQCAtMjQ4LDggKzI0OCwxMCBAQAogCQlnb3RvIGVycm9yX3JldHVybjsKIAogCS8qIE9rLCBub3cgd2UgY2FuIGFjdHVhbGx5IHVwZGF0ZSB0aGUgaW5vZGUgYml0bWFwcy4uICovCi0JaWYgKCFleHQ0X2NsZWFyX2JpdF9hdG9taWMoc2JfYmdsX2xvY2soc2JpLCBibG9ja19ncm91cCksCi0JCQkJCWJpdCwgYml0bWFwX2JoLT5iX2RhdGEpKQorCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGJsb2NrX2dyb3VwKSk7CisJY2xlYXJlZCA9IGV4dDRfY2xlYXJfYml0KGJpdCwgYml0bWFwX2JoLT5iX2RhdGEpOworCXNwaW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgYmxvY2tfZ3JvdXApKTsKKwlpZiAoIWNsZWFyZWQpCiAJCWV4dDRfZXJyb3Ioc2IsICJleHQ0X2ZyZWVfaW5vZGUiLAogCQkJICAgImJpdCBhbHJlYWR5IGNsZWFyZWQgZm9yIGlub2RlICVsdSIsIGlubyk7CiAJZWxzZSB7CkBAIC02OTYsNiArNjk4LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKnJldDsKIAlleHQ0X2dyb3VwX3QgaTsKIAlpbnQgZnJlZSA9IDA7CisJc3RhdGljIGludCBvbmNlID0gMTsKIAlleHQ0X2dyb3VwX3QgZmxleF9ncm91cDsKIAogCS8qIENhbm5vdCBjcmVhdGUgZmlsZXMgaW4gYSBkZWxldGVkIGRpcmVjdG9yeSAqLwpAQCAtNzE1LDYgKzcxOCwxNCBAQAogCiAJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7CiAJCXJldDIgPSBmaW5kX2dyb3VwX2ZsZXgoc2IsIGRpciwgJmdyb3VwKTsKKwkJaWYgKHJldDIgPT0gLTEpIHsKKwkJCXJldDIgPSBmaW5kX2dyb3VwX290aGVyKHNiLCBkaXIsICZncm91cCk7CisJCQlpZiAocmV0MiA9PSAwICYmIG9uY2UpCisJCQkJb25jZSA9IDA7CisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJleHQ0OiBmaW5kX2dyb3VwX2ZsZXggIgorCQkJCSAgICAgICAiZmFpbGVkLCBmYWxsYmFjayBzdWNjZWVkZWQgZGlyICVsdVxuIiwKKwkJCQkgICAgICAgZGlyLT5pX2lubyk7CisJCX0KIAkJZ290byBnb3RfZ3JvdXA7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggMDNiYTIwYi4uYzdmZWQ1YiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtNDcsOCArNDcsMTAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGV4dDRfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgICBsb2ZmX3QgbmV3X3NpemUpCiB7Ci0JcmV0dXJuIGpiZDJfam91cm5hbF9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKCZFWFQ0X0koaW5vZGUpLT5qaW5vZGUsCi0JCQkJCQkgICBuZXdfc2l6ZSk7CisJcmV0dXJuIGpiZDJfam91cm5hbF9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKAorCQkJCQlFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19qb3VybmFsLAorCQkJCQkmRVhUNF9JKGlub2RlKS0+amlub2RlLAorCQkJCQluZXdfc2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGV4dDRfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKQEAgLTEzNjYsNiArMTM2OCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKiBXZSBjYW5ub3QgcmVjdXJzZSBpbnRvIHRoZSBmaWxlc3lzdGVtIGFzIHRoZSB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5CisJICogc3RhcnRlZCAqLworCWZsYWdzIHw9IEFPUF9GTEFHX05PRlM7CisKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlX3dyaXRlX2JlZ2luKG1hcHBpbmcsIGluZGV4LCBmbGFncyk7CiAJaWYgKCFwYWdlKSB7CiAJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CkBAIC0xMzc1LDcgKzEzODEsNyBAQAogCSpwYWdlcCA9IHBhZ2U7CiAKIAlyZXQgPSBibG9ja193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCi0JCQkJCQkJZXh0NF9nZXRfYmxvY2spOworCQkJCWV4dDRfZ2V0X2Jsb2NrKTsKIAogCWlmICghcmV0ICYmIGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpIHsKIAkJcmV0ID0gd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBwYWdlX2J1ZmZlcnMocGFnZSksCkBAIC0yNDM3LDYgKzI0NDMsNyBAQAogCWludCBub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKIAlpbnQgcGFnZXNfd3JpdHRlbiA9IDA7CiAJbG9uZyBwYWdlc19za2lwcGVkOworCWludCByYW5nZV9jeWNsaWMsIGN5Y2xlZCA9IDEsIGlvX2RvbmUgPSAwOwogCWludCBuZWVkZWRfYmxvY2tzLCByZXQgPSAwLCBucl90b193cml0ZWJ1bXAgPSAwOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IobWFwcGluZy0+aG9zdC0+aV9zYik7CiAKQEAgLTI0ODgsOSArMjQ5NSwxNSBAQAogCWlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKQogCQlyYW5nZV93aG9sZSA9IDE7CiAKLQlpZiAod2JjLT5yYW5nZV9jeWNsaWMpCisJcmFuZ2VfY3ljbGljID0gd2JjLT5yYW5nZV9jeWNsaWM7CisJaWYgKHdiYy0+cmFuZ2VfY3ljbGljKSB7CiAJCWluZGV4ID0gbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OwotCWVsc2UKKwkJaWYgKGluZGV4KQorCQkJY3ljbGVkID0gMDsKKwkJd2JjLT5yYW5nZV9zdGFydCA9IGluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCXdiYy0+cmFuZ2VfZW5kICA9IExMT05HX01BWDsKKwkJd2JjLT5yYW5nZV9jeWNsaWMgPSAwOworCX0gZWxzZQogCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCW1wZC53YmMgPSB3YmM7CkBAIC0yNTA0LDYgKzI1MTcsNyBAQAogCXdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUgPSAxOwogCXBhZ2VzX3NraXBwZWQgPSB3YmMtPnBhZ2VzX3NraXBwZWQ7CiAKK3JldHJ5OgogCXdoaWxlICghcmV0ICYmIHdiYy0+bnJfdG9fd3JpdGUgPiAwKSB7CiAKIAkJLyoKQEAgLTI1MzAsNyArMjU0NCw3IEBACiAKIAkJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAotCQlpZiAobXBkLnJldHZhbCA9PSAtRU5PU1BDKSB7CisJCWlmICgobXBkLnJldHZhbCA9PSAtRU5PU1BDKSAmJiBzYmktPnNfam91cm5hbCkgewogCQkJLyogY29tbWl0IHRoZSB0cmFuc2FjdGlvbiB3aGljaCB3b3VsZAogCQkJICogZnJlZSBibG9ja3MgcmVsZWFzZWQgaW4gdGhlIHRyYW5zYWN0aW9uCiAJCQkgKiBhbmQgdHJ5IGFnYWluCkBAIC0yNTQ2LDYgKzI1NjAsNyBAQAogCQkJcGFnZXNfd3JpdHRlbiArPSBtcGQucGFnZXNfd3JpdHRlbjsKIAkJCXdiYy0+cGFnZXNfc2tpcHBlZCA9IHBhZ2VzX3NraXBwZWQ7CiAJCQlyZXQgPSAwOworCQkJaW9fZG9uZSA9IDE7CiAJCX0gZWxzZSBpZiAod2JjLT5ucl90b193cml0ZSkKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBubyBtb3JlIHdyaXRlb3V0IG5lZWRlZApAQCAtMjU1NCw2ICsyNTY5LDEzIEBACiAJCQkgKi8KIAkJCWJyZWFrOwogCX0KKwlpZiAoIWlvX2RvbmUgJiYgIWN5Y2xlZCkgeworCQljeWNsZWQgPSAxOworCQlpbmRleCA9IDA7CisJCXdiYy0+cmFuZ2Vfc3RhcnQgPSBpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUOworCQl3YmMtPnJhbmdlX2VuZCAgPSBtYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggLSAxOworCQlnb3RvIHJldHJ5OworCX0KIAlpZiAocGFnZXNfc2tpcHBlZCAhPSB3YmMtPnBhZ2VzX3NraXBwZWQpCiAJCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIHNob3VsZCBub3QgaGFwcGVuIGxlYXZpbmcgJXMgIgogCQkJCSJ3aXRoIG5yX3RvX3dyaXRlID0gJWxkIHJldCA9ICVkXG4iLApAQCAtMjU2MSw2ICsyNTgzLDcgQEAKIAogCS8qIFVwZGF0ZSBpbmRleCAqLwogCWluZGV4ICs9IHBhZ2VzX3dyaXR0ZW47CisJd2JjLT5yYW5nZV9jeWNsaWMgPSByYW5nZV9jeWNsaWM7CiAJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiB3YmMtPm5yX3RvX3dyaXRlID4gMCkpCiAJCS8qCiAJCSAqIHNldCB0aGUgd3JpdGViYWNrX2luZGV4IHNvIHRoYXQgcmFuZ2VfY3ljbGljCkBAIC0yNjQ4LDYgKzI2NzEsOSBAQAogCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCWdvdG8gb3V0OwogCX0KKwkvKiBXZSBjYW5ub3QgcmVjdXJzZSBpbnRvIHRoZSBmaWxlc3lzdGVtIGFzIHRoZSB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5CisJICogc3RhcnRlZCAqLworCWZsYWdzIHw9IEFPUF9GTEFHX05PRlM7CiAKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlX3dyaXRlX2JlZ2luKG1hcHBpbmcsIGluZGV4LCBmbGFncyk7CiAJaWYgKCFwYWdlKSB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGRlYmE1NGYuLjlmNjFlNjIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0xNDQ3LDcgKzE0NDcsNyBAQAogCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50ICpnZXggPSAmYWMtPmFjX2dfZXg7CiAKIAlCVUdfT04oZXgtPmZlX2xlbiA8PSAwKTsKLQlCVUdfT04oZXgtPmZlX2xlbiA+PSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoYWMtPmFjX3NiKSk7CisJQlVHX09OKGV4LT5mZV9sZW4gPiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoYWMtPmFjX3NiKSk7CiAJQlVHX09OKGV4LT5mZV9zdGFydCA+PSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoYWMtPmFjX3NiKSk7CiAJQlVHX09OKGFjLT5hY19zdGF0dXMgIT0gQUNfU1RBVFVTX0NPTlRJTlVFKTsKIApAQCAtMzI5Miw3ICszMjkyLDcgQEAKIAl9CiAJQlVHX09OKHN0YXJ0ICsgc2l6ZSA8PSBhYy0+YWNfb19leC5mZV9sb2dpY2FsICYmCiAJCQlzdGFydCA+IGFjLT5hY19vX2V4LmZlX2xvZ2ljYWwpOwotCUJVR19PTihzaXplIDw9IDAgfHwgc2l6ZSA+PSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoYWMtPmFjX3NiKSk7CisJQlVHX09OKHNpemUgPD0gMCB8fCBzaXplID4gRVhUNF9CTE9DS1NfUEVSX0dST1VQKGFjLT5hY19zYikpOwogCiAJLyogbm93IHByZXBhcmUgZ29hbCByZXF1ZXN0ICovCiAKQEAgLTM1ODksNiArMzU4OSw3IEBACiAJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpCiB7CiAJZXh0NF9ncm91cF90IGdycDsKKwlleHQ0X2ZzYmxrX3QgZ3JwX2JsazsKIAogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmcGEtPnBhX2NvdW50KSB8fCBwYS0+cGFfZnJlZSAhPSAwKQogCQlyZXR1cm47CkBAIC0zNjAzLDggKzM2MDQsMTIgQEAKIAlwYS0+cGFfZGVsZXRlZCA9IDE7CiAJc3Bpbl91bmxvY2soJnBhLT5wYV9sb2NrKTsKIAotCS8qIC0xIGlzIHRvIHByb3RlY3QgZnJvbSBjcm9zc2luZyBhbGxvY2F0aW9uIGdyb3VwICovCi0JZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgcGEtPnBhX3BzdGFydCAtIDEsICZncnAsIE5VTEwpOworCWdycF9ibGsgPSBwYS0+cGFfcHN0YXJ0OworCS8qIElmIGxpbmVhciwgcGFfcHN0YXJ0IG1heSBiZSBpbiB0aGUgbmV4dCBncm91cCB3aGVuIHBhIGlzIHVzZWQgdXAgKi8KKwlpZiAocGEtPnBhX2xpbmVhcikKKwkJZ3JwX2Jsay0tOworCisJZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgZ3JwX2JsaywgJmdycCwgTlVMTCk7CiAKIAkvKgogCSAqIHBvc3NpYmxlIHJhY2U6CkBAIC0zNjkzLDYgKzM2OTgsOCBAQAogCXBhLT5wYV9mcmVlID0gcGEtPnBhX2xlbjsKIAlhdG9taWNfc2V0KCZwYS0+cGFfY291bnQsIDEpOwogCXNwaW5fbG9ja19pbml0KCZwYS0+cGFfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnBhLT5wYV9pbm9kZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGEtPnBhX2dyb3VwX2xpc3QpOwogCXBhLT5wYV9kZWxldGVkID0gMDsKIAlwYS0+cGFfbGluZWFyID0gMDsKIApAQCAtMzc1NSw2ICszNzYyLDcgQEAKIAlhdG9taWNfc2V0KCZwYS0+cGFfY291bnQsIDEpOwogCXNwaW5fbG9ja19pbml0KCZwYS0+cGFfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnBhLT5wYV9pbm9kZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGEtPnBhX2dyb3VwX2xpc3QpOwogCXBhLT5wYV9kZWxldGVkID0gMDsKIAlwYS0+cGFfbGluZWFyID0gMTsKIApAQCAtNDQ3NiwyMyArNDQ4NCwyNiBAQAogCQkJcGEtPnBhX2ZyZWUgLT0gYWMtPmFjX2JfZXguZmVfbGVuOwogCQkJcGEtPnBhX2xlbiAtPSBhYy0+YWNfYl9leC5mZV9sZW47CiAJCQlzcGluX3VubG9jaygmcGEtPnBhX2xvY2spOwotCQkJLyoKLQkJCSAqIFdlIHdhbnQgdG8gYWRkIHRoZSBwYSB0byB0aGUgcmlnaHQgYnVja2V0LgotCQkJICogUmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgYW5kIHdoaWxlIGFkZGluZwotCQkJICogbWFrZSBzdXJlIHRoZSBsaXN0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcKLQkJCSAqIGRvZXNuJ3QgZ3JvdyBiaWcuCi0JCQkgKi8KLQkJCWlmIChsaWtlbHkocGEtPnBhX2ZyZWUpKSB7Ci0JCQkJc3Bpbl9sb2NrKHBhLT5wYV9vYmpfbG9jayk7Ci0JCQkJbGlzdF9kZWxfcmN1KCZwYS0+cGFfaW5vZGVfbGlzdCk7Ci0JCQkJc3Bpbl91bmxvY2socGEtPnBhX29ial9sb2NrKTsKLQkJCQlleHQ0X21iX2FkZF9uX3RyaW0oYWMpOwotCQkJfQogCQl9Ci0JCWV4dDRfbWJfcHV0X3BhKGFjLCBhYy0+YWNfc2IsIHBhKTsKIAl9CiAJaWYgKGFjLT5hbGxvY19zZW1wKQogCQl1cF9yZWFkKGFjLT5hbGxvY19zZW1wKTsKKwlpZiAocGEpIHsKKwkJLyoKKwkJICogV2Ugd2FudCB0byBhZGQgdGhlIHBhIHRvIHRoZSByaWdodCBidWNrZXQuCisJCSAqIFJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IGFuZCB3aGlsZSBhZGRpbmcKKwkJICogbWFrZSBzdXJlIHRoZSBsaXN0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcKKwkJICogZG9lc24ndCBncm93IGJpZy4gIFdlIG5lZWQgdG8gcmVsZWFzZQorCQkgKiBhbGxvY19zZW1wIGJlZm9yZSBjYWxsaW5nIGV4dDRfbWJfYWRkX25fdHJpbSgpCisJCSAqLworCQlpZiAocGEtPnBhX2xpbmVhciAmJiBsaWtlbHkocGEtPnBhX2ZyZWUpKSB7CisJCQlzcGluX2xvY2socGEtPnBhX29ial9sb2NrKTsKKwkJCWxpc3RfZGVsX3JjdSgmcGEtPnBhX2lub2RlX2xpc3QpOworCQkJc3Bpbl91bmxvY2socGEtPnBhX29ial9sb2NrKTsKKwkJCWV4dDRfbWJfYWRkX25fdHJpbShhYyk7CisJCX0KKwkJZXh0NF9tYl9wdXRfcGEoYWMsIGFjLT5hY19zYiwgcGEpOworCX0KIAlpZiAoYWMtPmFjX2JpdG1hcF9wYWdlKQogCQlwYWdlX2NhY2hlX3JlbGVhc2UoYWMtPmFjX2JpdG1hcF9wYWdlKTsKIAlpZiAoYWMtPmFjX2J1ZGR5X3BhZ2UpCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDczNGFiY2EuLmZlNjRkOWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC00ODEsNyArNDgxLDcgQEAKIAkJCQkJKyAxKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihoYW5kbGUpOwotCQlnb3RvIGVycl9vdXQ7CisJCXJldHVybiByZXR2YWw7CiAJfQogCXRtcF9pbm9kZSA9IGV4dDRfbmV3X2lub2RlKGhhbmRsZSwKIAkJCQlpbm9kZS0+aV9zYi0+c19yb290LT5kX2lub2RlLApAQCAtNDg5LDggKzQ4OSw3IEBACiAJaWYgKElTX0VSUih0bXBfaW5vZGUpKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCXRtcF9pbm9kZSA9IE5VTEw7Ci0JCWdvdG8gZXJyX291dDsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAJaV9zaXplX3dyaXRlKHRtcF9pbm9kZSwgaV9zaXplX3JlYWQoaW5vZGUpKTsKIAkvKgpAQCAtNjE4LDggKzYxNyw3IEBACiAKIAlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCi0JaWYgKHRtcF9pbm9kZSkKLQkJaXB1dCh0bXBfaW5vZGUpOworCWlwdXQodG1wX2lub2RlKTsKIAogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZTVmMDZhNS4uMzlkMTk5MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMzA0NiwxNCArMzA0NiwxNyBAQAogc3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCiB7CiAJaW50IHJldCA9IDA7CisJdGlkX3QgdGFyZ2V0OwogCiAJdHJhY2VfbWFyayhleHQ0X3N5bmNfZnMsICJkZXYgJXMgd2FpdCAlZCIsIHNiLT5zX2lkLCB3YWl0KTsKIAlzYi0+c19kaXJ0ID0gMDsKIAlpZiAoRVhUNF9TQihzYiktPnNfam91cm5hbCkgewotCQlpZiAod2FpdCkKLQkJCXJldCA9IGV4dDRfZm9yY2VfY29tbWl0KHNiKTsKLQkJZWxzZQotIAkJCWpiZDJfam91cm5hbF9zdGFydF9jb21taXQoRVhUNF9TQihzYiktPnNfam91cm5hbCwgTlVMTCk7CisJCWlmIChqYmQyX2pvdXJuYWxfc3RhcnRfY29tbWl0KEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwsCisJCQkJCSAgICAgICZ0YXJnZXQpKSB7CisJCQlpZiAod2FpdCkKKwkJCQlqYmQyX2xvZ193YWl0X2NvbW1pdChFWFQ0X1NCKHNiKS0+c19qb3VybmFsLAorCQkJCQkJICAgICB0YXJnZXQpOworCQl9CiAJfSBlbHNlIHsKIAkJZXh0NF9jb21taXRfc3VwZXIoc2IsIEVYVDRfU0Ioc2IpLT5zX2VzLCB3YWl0KTsKIAl9CkBAIC0zMDg4LDcgKzMwOTEsNiBAQAogCiAJCS8qIEpvdXJuYWwgYmxvY2tlZCBhbmQgZmx1c2hlZCwgY2xlYXIgbmVlZHNfcmVjb3ZlcnkgZmxhZy4gKi8KIAkJRVhUNF9DTEVBUl9JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUik7Ci0JCWV4dDRfY29tbWl0X3N1cGVyKHNiLCBFWFQ0X1NCKHNiKS0+c19lcywgMSk7CiAJCWVycm9yID0gZXh0NF9jb21taXRfc3VwZXIoc2IsIEVYVDRfU0Ioc2IpLT5zX2VzLCAxKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IDZiNzRkMDkuLmRlMDAwNGYgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC0yMDIsOSArMjAyLDkgQEAKIAlzZWN0b3JfdCBibG9ja25yOwogCiAJLyogZmF0X2dldF9jbHVzdGVyKCkgYXNzdW1lcyB0aGUgcmVxdWVzdGVkIGJsb2NrbnIgaXNuJ3QgdHJ1bmNhdGVkLiAqLwotCW11dGV4X2xvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOworCWRvd25fcmVhZCgmbWFwcGluZy0+aG9zdC0+aV9hbGxvY19zZW0pOwogCWJsb2NrbnIgPSBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZywgYmxvY2ssIGZhdF9nZXRfYmxvY2spOwotCW11dGV4X3VubG9jaygmbWFwcGluZy0+aG9zdC0+aV9tdXRleCk7CisJdXBfcmVhZCgmbWFwcGluZy0+aG9zdC0+aV9hbGxvY19zZW0pOwogCiAJcmV0dXJuIGJsb2NrbnI7CiB9CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBiZDIxNWNjLi5kODY1Y2E2NiAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZGVmaW5lIFNFVEZMX01BU0sgKE9fQVBQRU5EIHwgT19OT05CTE9DSyB8IE9fTkRFTEFZIHwgRkFTWU5DIHwgT19ESVJFQ1QgfCBPX05PQVRJTUUpCisjZGVmaW5lIFNFVEZMX01BU0sgKE9fQVBQRU5EIHwgT19OT05CTE9DSyB8IE9fTkRFTEFZIHwgT19ESVJFQ1QgfCBPX05PQVRJTUUpCiAKIHN0YXRpYyBpbnQgc2V0ZmwoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMTc3LDIxICsxNzcsMjEgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJLyoKLQkgKiBXZSBzdGlsbCBuZWVkIGEgbG9jayBoZXJlIGZvciBub3cgdG8ga2VlcCBtdWx0aXBsZSBGQVNZTkMgY2FsbHMKLQkgKiBmcm9tIHJhY2luZyB3aXRoIGVhY2ggb3RoZXIuCisJICogLT5mYXN5bmMoKSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgRkFTWU5DIGJpdC4KIAkgKi8KLQlsb2NrX2tlcm5lbCgpOwotCWlmICgoYXJnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpIHsKLQkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+ZmFzeW5jKSB7Ci0JCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgKGFyZyAmIEZBU1lOQykgIT0gMCk7Ci0JCQlpZiAoZXJyb3IgPCAwKQotCQkJCWdvdG8gb3V0OwotCQl9CisJaWYgKCgoYXJnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpICYmIGZpbHAtPmZfb3AgJiYKKwkJCWZpbHAtPmZfb3AtPmZhc3luYykgeworCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgKGFyZyAmIEZBU1lOQykgIT0gMCk7CisJCWlmIChlcnJvciA8IDApCisJCQlnb3RvIG91dDsKKwkJaWYgKGVycm9yID4gMCkKKwkJCWVycm9yID0gMDsKIAl9Ci0KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJZmlscC0+Zl9mbGFncyA9IChhcmcgJiBTRVRGTF9NQVNLKSB8IChmaWxwLT5mX2ZsYWdzICYgflNFVEZMX01BU0spOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOworCiAgb3V0OgotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTUxNiw3ICs1MTYsNyBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmYXN5bmNfY2FjaGUgX19yZWFkX21vc3RseTsKIAogLyoKLSAqIGZhc3luY19oZWxwZXIoKSBpcyB1c2VkIGJ5IHNvbWUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIChtYWlubHkgbWljZSkKKyAqIGZhc3luY19oZWxwZXIoKSBpcyB1c2VkIGJ5IGFsbW9zdCBhbGwgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzCiAgKiB0byBzZXQgdXAgdGhlIGZhc3luYyBxdWV1ZS4gSXQgcmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvciwgMCBpZiBpdCBkaWQKICAqIG5vIGNoYW5nZXMgYW5kIHBvc2l0aXZlIGlmIGl0IGFkZGVkL2RlbGV0ZWQgdGhlIGVudHJ5LgogICovCkBAIC01NTUsNiArNTU1LDEzIEBACiAJCXJlc3VsdCA9IDE7CiAJfQogb3V0OgorCS8qIEZpeCB1cCBGQVNZTkMgYml0IHdoaWxlIHN0aWxsIGhvbGRpbmcgZmFzeW5jX2xvY2sgKi8KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CisJaWYgKG9uKQorCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKKwllbHNlCisJCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAl3cml0ZV91bmxvY2tfaXJxKCZmYXN5bmNfbG9jayk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCBiYmVlYWM2Li5iNzRhOGUxIDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L2V2ZW50cG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTEyNyw2ICsxMjgsNyBAQAogCWF0b21pY19sb25nX3NldCgmZi0+Zl9jb3VudCwgMSk7CiAJcndsb2NrX2luaXQoJmYtPmZfb3duZXIubG9jayk7CiAJZi0+Zl9jcmVkID0gZ2V0X2NyZWQoY3JlZCk7CisJc3Bpbl9sb2NrX2luaXQoJmYtPmZfbG9jayk7CiAJZXZlbnRwb2xsX2luaXRfZmlsZShmKTsKIAkvKiBmLT5mX3ZlcnNpb246IDAgKi8KIAlyZXR1cm4gZjsKQEAgLTI3OSw2ICsyODEsNyBAQAogCWlmIChmaWxlLT5mX29wICYmIGZpbGUtPmZfb3AtPnJlbGVhc2UpCiAJCWZpbGUtPmZfb3AtPnJlbGVhc2UoaW5vZGUsIGZpbGUpOwogCXNlY3VyaXR5X2ZpbGVfZnJlZShmaWxlKTsKKwlpbWFfZmlsZV9mcmVlKGZpbGUpOwogCWlmICh1bmxpa2VseShTX0lTQ0hSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2NkZXYgIT0gTlVMTCkpCiAJCWNkZXZfcHV0KGlub2RlLT5pX2NkZXYpOwogCWZvcHNfcHV0KGZpbGUtPmZfb3ApOwpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCBlNWVhYTYyLi5lM2ZlOTkxIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtMjc0LDYgKzI3NCw3IEBACiAJaW50IHJldDsKIAogCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAmIElfU1lOQyk7CisJV0FSTl9PTihpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKTsKIAogCS8qIFNldCBJX1NZTkMsIHJlc2V0IElfRElSVFkgKi8KIAlkaXJ0eSA9IGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWTsKQEAgLTI5OCw2ICsyOTksNyBAQAogCX0KIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJV0FSTl9PTihpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9TWU5DOwogCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9GUkVFSU5HKSkgewogCQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpICYmCkBAIC00NzAsNiArNDcyLDExIEBACiAJCQlicmVhazsKIAkJfQogCisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7CisJCQlyZXF1ZXVlX2lvKGlub2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKHdiYy0+bm9uYmxvY2tpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpKSB7CiAJCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOwogCQkJaWYgKCFzYl9pc19ibGtkZXZfc2Ioc2IpKQpAQCAtNTMxLDcgKzUzOCw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKLQkJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUUpKQorCQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCiAJCQkJY29udGludWU7CiAJCQltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAkJCWlmIChtYXBwaW5nLT5ucnBhZ2VzID09IDApCmRpZmYgLS1naXQgYS9mcy9nZnMyL0tjb25maWcgYi9mcy9nZnMyL0tjb25maWcKaW5kZXggZTU2M2E2NC4uM2E5ODFiNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9LY29uZmlnCisrKyBiL2ZzL2dmczIvS2NvbmZpZwpAQCAtMSw2ICsxLDEwIEBACiBjb25maWcgR0ZTMl9GUwogCXRyaXN0YXRlICJHRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgKDY0QklUIHx8IExCRCkKKwlzZWxlY3QgRExNIGlmIEdGUzJfRlNfTE9DS0lOR19ETE0KKwlzZWxlY3QgQ09ORklHRlNfRlMgaWYgR0ZTMl9GU19MT0NLSU5HX0RMTQorCXNlbGVjdCBTWVNGUyBpZiBHRlMyX0ZTX0xPQ0tJTkdfRExNCisJc2VsZWN0IElQX1NDVFAgaWYgRExNX1NDVFAKIAlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJc2VsZWN0IENSQzMyCiAJaGVscApAQCAtMTgsMTcgKzIyLDE2IEBACiAJICB0aGUgbG9ja2luZyBtb2R1bGUgYmVsb3cuIERvY3VtZW50YXRpb24gYW5kIHV0aWxpdGllcyBmb3IgR0ZTMiBjYW4KIAkgIGJlIGZvdW5kIGhlcmU6IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vY2x1c3RlcgogCi0JICBUaGUgIm5vbG9jayIgbG9jayBtb2R1bGUgaXMgbm93IGJ1aWx0IGluIHRvIEdGUzIgYnkgZGVmYXVsdC4KKwkgIFRoZSAibm9sb2NrIiBsb2NrIG1vZHVsZSBpcyBub3cgYnVpbHQgaW4gdG8gR0ZTMiBieSBkZWZhdWx0LiBJZgorCSAgeW91IHdhbnQgdG8gdXNlIHRoZSBETE0sIGJlIHN1cmUgdG8gZW5hYmxlIEhPVFBMVUcgYW5kIElQdjQvNgorCSAgbmV0d29ya2luZy4KIAogY29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE0KLQl0cmlzdGF0ZSAiR0ZTMiBETE0gbG9ja2luZyBtb2R1bGUiCi0JZGVwZW5kcyBvbiBHRlMyX0ZTICYmIFNZU0ZTICYmIE5FVCAmJiBJTkVUICYmIChJUFY2IHx8IElQVjY9bikKLQlzZWxlY3QgSVBfU0NUUCBpZiBETE1fU0NUUAotCXNlbGVjdCBDT05GSUdGU19GUwotCXNlbGVjdCBETE0KKwlib29sICJHRlMyIERMTSBsb2NraW5nIgorCWRlcGVuZHMgb24gKEdGUzJfRlMhPW4pICYmIE5FVCAmJiBJTkVUICYmIChJUFY2IHx8IElQVjY9bikgJiYgSE9UUExVRwogCWhlbHAKIAkgIE11bHRpcGxlIG5vZGUgbG9ja2luZyBtb2R1bGUgZm9yIEdGUzIKIAotCSAgTW9zdCB1c2VycyBvZiBHRlMyIHdpbGwgcmVxdWlyZSB0aGlzIG1vZHVsZS4gSXQgcHJvdmlkZXMgdGhlIGxvY2tpbmcKKwkgIE1vc3QgdXNlcnMgb2YgR0ZTMiB3aWxsIHJlcXVpcmUgdGhpcy4gSXQgcHJvdmlkZXMgdGhlIGxvY2tpbmcKIAkgIGludGVyZmFjZSBiZXR3ZWVuIEdGUzIgYW5kIHRoZSBETE0sIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHVzZSBHRlMyCiAJICBpbiBhIGNsdXN0ZXIgZW52aXJvbm1lbnQuCmRpZmYgLS1naXQgYS9mcy9nZnMyL01ha2VmaWxlIGIvZnMvZ2ZzMi9NYWtlZmlsZQppbmRleCBjMWI0ZWM2YS4uYTg1MWVhNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9NYWtlZmlsZQorKysgYi9mcy9nZnMyL01ha2VmaWxlCkBAIC0xLDkgKzEsOSBAQAogb2JqLSQoQ09ORklHX0dGUzJfRlMpICs9IGdmczIubwogZ2ZzMi15IDo9IGFjbC5vIGJtYXAubyBkaXIubyBlYW9wcy5vIGVhdHRyLm8gZ2xvY2subyBcCi0JZ2xvcHMubyBpbm9kZS5vIGxvZy5vIGxvcHMubyBsb2NraW5nLm8gbWFpbi5vIG1ldGFfaW8ubyBcCisJZ2xvcHMubyBpbm9kZS5vIGxvZy5vIGxvcHMubyBtYWluLm8gbWV0YV9pby5vIFwKIAltb3VudC5vIG9wc19hZGRyZXNzLm8gb3BzX2RlbnRyeS5vIG9wc19leHBvcnQubyBvcHNfZmlsZS5vIFwKIAlvcHNfZnN0eXBlLm8gb3BzX2lub2RlLm8gb3BzX3N1cGVyLm8gcXVvdGEubyBcCiAJcmVjb3ZlcnkubyByZ3JwLm8gc3VwZXIubyBzeXMubyB0cmFucy5vIHV0aWwubwogCi1vYmotJChDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSkgKz0gbG9ja2luZy9kbG0vCitnZnMyLSQoQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0pICs9IGxvY2tfZGxtLm8KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hY2wuYyBiL2ZzL2dmczIvYWNsLmMKaW5kZXggZTMzNWRjZS4uNDM3NjRmNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hY2wuYworKysgYi9mcy9nZnMyL2FjbC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsX3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYm1hcC5jIGIvZnMvZ2ZzMi9ibWFwLmMKaW5kZXggMTFmZmM1Ni4uM2E1ZDNmOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9ibWFwLmMKKysrIGIvZnMvZ2ZzMi9ibWFwLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZGlyLmMgYi9mcy9nZnMyL2Rpci5jCmluZGV4IGI3YzhlNWMuLmFlZjRkMGMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZGlyLmMKKysrIGIvZnMvZ2ZzMi9kaXIuYwpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Vhb3BzLmMgYi9mcy9nZnMyL2Vhb3BzLmMKaW5kZXggZjExNGJhMi4uZGVlOWIwMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9lYW9wcy5jCisrKyBiL2ZzL2dmczIvZWFvcHMuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZWF0dHIuYyBiL2ZzL2dmczIvZWF0dHIuYwppbmRleCAwZDFjNzZkLi44OTk3NjNhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2VhdHRyLmMKKysrIGIvZnMvZ2ZzMi9lYXR0ci5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCA2Yjk4M2FlLi4zOTg0ZTQ3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KQEAgLTE4LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgpAQCAtMTU1LDEzICsxNTMsMTAgQEAKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7CiAJc3RydWN0IGlub2RlICphc3BhY2UgPSBnbC0+Z2xfYXNwYWNlOwogCi0JaWYgKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKQotCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdXRfbG9jayhnbC0+Z2xfbG9jayk7Ci0KIAlpZiAoYXNwYWNlKQogCQlnZnMyX2FzcGFjZV9wdXQoYXNwYWNlKTsKIAotCWttZW1fY2FjaGVfZnJlZShnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOworCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CiB9CiAKIC8qKgpAQCAtMTcyLDYgKzE2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGdmczJfZ2xvY2tfaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CisJR0xPQ0tfQlVHX09OKGdsLCBhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikgPT0gMCk7CiAJYXRvbWljX2luYygmZ2wtPmdsX3JlZik7CiB9CiAKQEAgLTIxMSwxNyArMjA3LDE1IEBACiAJCQlhdG9taWNfZGVjKCZscnVfY291bnQpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZscnVfbG9jayk7Ci0JCUdMT0NLX0JVR19PTihnbCwgZ2wtPmdsX3N0YXRlICE9IExNX1NUX1VOTE9DS0VEKTsKLQkJR0xPQ0tfQlVHX09OKGdsLCAhbGlzdF9lbXB0eSgmZ2wtPmdsX2xydSkpOwogCQlHTE9DS19CVUdfT04oZ2wsICFsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykpOwogCQlnbG9ja19mcmVlKGdsKTsKIAkJcnYgPSAxOwogCQlnb3RvIG91dDsKIAl9Ci0Jd3JpdGVfdW5sb2NrKGdsX2xvY2tfYWRkcihnbC0+Z2xfaGFzaCkpOwogCS8qIDEgZm9yIGJlaW5nIGhhc2hlZCwgMSBmb3IgaGF2aW5nIHN0YXRlICE9IExNX1NUX1VOTE9DS0VEICovCiAJaWYgKGF0b21pY19yZWFkKCZnbC0+Z2xfcmVmKSA9PSAyKQogCQlnZnMyX2dsb2NrX3NjaGVkdWxlX2Zvcl9yZWNsYWltKGdsKTsKKwl3cml0ZV91bmxvY2soZ2xfbG9ja19hZGRyKGdsLT5nbF9oYXNoKSk7CiBvdXQ6CiAJcmV0dXJuIHJ2OwogfQpAQCAtMjU2LDI3ICsyNTAsNiBAQAogfQogCiAvKioKLSAqIGdmczJfZ2xvY2tfZmluZCgpIC0gRmluZCBnbG9jayBieSBsb2NrIG51bWJlcgotICogQHNkcDogVGhlIEdGUzIgc3VwZXJibG9jawotICogQG5hbWU6IFRoZSBsb2NrIG5hbWUKLSAqCi0gKiBSZXR1cm5zOiBOVUxMLCBvciB0aGUgc3RydWN0IGdmczJfZ2xvY2sgd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlcgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2ZzMl9nbG9ja19maW5kKGNvbnN0IHN0cnVjdCBnZnMyX3NiZCAqc2RwLAotCQkJCQkgIGNvbnN0IHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSkKLXsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGdsX2hhc2goc2RwLCBuYW1lKTsKLQlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7Ci0KLQlyZWFkX2xvY2soZ2xfbG9ja19hZGRyKGhhc2gpKTsKLQlnbCA9IHNlYXJjaF9idWNrZXQoaGFzaCwgc2RwLCBuYW1lKTsKLQlyZWFkX3VubG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwotCi0JcmV0dXJuIGdsOwotfQotCi0vKioKICAqIG1heV9ncmFudCAtIGNoZWNrIGlmIGl0cyBvayB0byBncmFudCBhIG5ldyBsb2NrCiAgKiBAZ2w6IFRoZSBnbG9jawogICogQGdoOiBUaGUgbG9jayByZXF1ZXN0IHdoaWNoIHdlIHdpc2ggdG8gZ3JhbnQKQEAgLTUyMyw3ICs0OTYsNyBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdmczJfbG1fbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaywKLQkJCQkgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSwgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwKKwkJCQkgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwKIAkJCQkgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWludCByZXQgPSBMTV9PVVRfRVJST1I7CkBAIC01MzIsNyArNTA1LDcgQEAKIAkJcmV0dXJuIHJlcV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCA/IDAgOiByZXFfc3RhdGU7CiAKIAlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXJldCA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2xvY2sobG9jaywgY3VyX3N0YXRlLAorCQlyZXQgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9sb2NrKGxvY2ssCiAJCQkJCQkJIHJlcV9zdGF0ZSwgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CkBAIC01NzUsNyArNTQ4LDcgQEAKIAkgICAgZ2wtPmdsX3N0YXRlID09IExNX1NUX0RFRkVSUkVEKSAmJgogCSAgICAhKGxja19mbGFncyAmIChMTV9GTEFHX1RSWSB8IExNX0ZMQUdfVFJZXzFDQikpKQogCQlsY2tfZmxhZ3MgfD0gTE1fRkxBR19UUllfMUNCOwotCXJldCA9IGdmczJfbG1fbG9jayhzZHAsIGdsLT5nbF9sb2NrLCBnbC0+Z2xfc3RhdGUsIHRhcmdldCwgbGNrX2ZsYWdzKTsKKwlyZXQgPSBnZnMyX2xtX2xvY2soc2RwLCBnbCwgdGFyZ2V0LCBsY2tfZmxhZ3MpOwogCiAJaWYgKCEocmV0ICYgTE1fT1VUX0FTWU5DKSkgewogCQlmaW5pc2hfeG1vdGUoZ2wsIHJldCk7CkBAIC02MjQsMTAgKzU5NywxMSBAQAogCiAJR0xPQ0tfQlVHX09OKGdsLCB0ZXN0X2JpdChHTEZfREVNT1RFX0lOX1BST0dSRVNTLCAmZ2wtPmdsX2ZsYWdzKSk7CiAKKwlkb3duX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7CiAJaWYgKHRlc3RfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJICAgIGdsLT5nbF9kZW1vdGVfc3RhdGUgIT0gZ2wtPmdsX3N0YXRlKSB7CiAJCWlmIChmaW5kX2ZpcnN0X2hvbGRlcihnbCkpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJaWYgKG5vbmJsb2NrKQogCQkJZ290byBvdXRfc2NoZWQ7CiAJCXNldF9iaXQoR0xGX0RFTU9URV9JTl9QUk9HUkVTUywgJmdsLT5nbF9mbGFncyk7CkBAIC02MzgsMjMgKzYxMiwyNiBAQAogCQkJZ2ZzMl9kZW1vdGVfd2FrZShnbCk7CiAJCXJldCA9IGRvX3Byb21vdGUoZ2wpOwogCQlpZiAocmV0ID09IDApCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJaWYgKHJldCA9PSAyKQotCQkJcmV0dXJuOworCQkJZ290byBvdXRfc2VtOwogCQlnaCA9IGZpbmRfZmlyc3Rfd2FpdGVyKGdsKTsKIAkJZ2wtPmdsX3RhcmdldCA9IGdoLT5naF9zdGF0ZTsKIAkJaWYgKCEoZ2gtPmdoX2ZsYWdzICYgKExNX0ZMQUdfVFJZIHwgTE1fRkxBR19UUllfMUNCKSkpCiAJCQlkb19lcnJvcihnbCwgMCk7IC8qIEZhaWwgcXVldWVkIHRyeSBsb2NrcyAqLwogCX0KIAlkb194bW90ZShnbCwgZ2gsIGdsLT5nbF90YXJnZXQpOworb3V0X3NlbToKKwl1cF9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCXJldHVybjsKIAogb3V0X3NjaGVkOgogCWdmczJfZ2xvY2tfaG9sZChnbCk7CiAJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKIAkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwotb3V0Ogorb3V0X3VubG9jazoKIAljbGVhcl9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpOworCWdvdG8gb3V0X3NlbTsKIH0KIAogc3RhdGljIHZvaWQgZ2xvY2tfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTY4MSwxOCArNjU4LDYgQEAKIAkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCi1zdGF0aWMgaW50IGdmczJfbG1fZ2V0X2xvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgICB2b2lkICoqbG9ja3ApCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAoIXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2dldF9sb2NrKQotCQlyZXR1cm4gMDsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fZ2V0X2xvY2soCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgbG9ja3ApOwotCXJldHVybiBlcnJvcjsKLX0KLQogLyoqCiAgKiBnZnMyX2dsb2NrX2dldCgpIC0gR2V0IGEgZ2xvY2ssIG9yIGNyZWF0ZSBvbmUgaWYgb25lIGRvZXNuJ3QgZXhpc3QKICAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKQEAgLTcxOSwxMCArNjg0LDExIEBACiAJZ2wgPSBzZWFyY2hfYnVja2V0KGhhc2gsIHNkcCwgJm5hbWUpOwogCXJlYWRfdW5sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CiAKLQlpZiAoZ2wgfHwgIWNyZWF0ZSkgewotCQkqZ2xwID0gZ2w7CisJKmdscCA9IGdsOworCWlmIChnbCkKIAkJcmV0dXJuIDA7Ci0JfQorCWlmICghY3JlYXRlKQorCQlyZXR1cm4gLUVOT0VOVDsKIAogCWdsID0ga21lbV9jYWNoZV9hbGxvYyhnZnMyX2dsb2NrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnbCkKQEAgLTczNiw3ICs3MDIsOSBAQAogCWdsLT5nbF9kZW1vdGVfc3RhdGUgPSBMTV9TVF9FWENMVVNJVkU7CiAJZ2wtPmdsX2hhc2ggPSBoYXNoOwogCWdsLT5nbF9vcHMgPSBnbG9wczsKLQlnbC0+Z2xfc3RhbXAgPSBqaWZmaWVzOworCXNucHJpbnRmKGdsLT5nbF9zdHJuYW1lLCBHRExNX1NUUk5BTUVfQllURVMsICIlOHglMTZsbHgiLCBuYW1lLmxuX3R5cGUsICh1bnNpZ25lZCBsb25nIGxvbmcpbnVtYmVyKTsKKwltZW1zZXQoJmdsLT5nbF9sa3NiLCAwLCBzaXplb2Yoc3RydWN0IGRsbV9sa3NiKSk7CisJZ2wtPmdsX2xrc2Iuc2JfbHZicHRyID0gZ2wtPmdsX2x2YjsKIAlnbC0+Z2xfdGNoYW5nZSA9IGppZmZpZXM7CiAJZ2wtPmdsX29iamVjdCA9IE5VTEw7CiAJZ2wtPmdsX3NiZCA9IHNkcDsKQEAgLTc1MywxMCArNzIxLDYgQEAKIAkJfQogCX0KIAotCWVycm9yID0gZ2ZzMl9sbV9nZXRfbG9jayhzZHAsICZuYW1lLCAmZ2wtPmdsX2xvY2spOwotCWlmIChlcnJvcikKLQkJZ290byBmYWlsX2FzcGFjZTsKLQogCXdyaXRlX2xvY2soZ2xfbG9ja19hZGRyKGhhc2gpKTsKIAl0bXAgPSBzZWFyY2hfYnVja2V0KGhhc2gsIHNkcCwgJm5hbWUpOwogCWlmICh0bXApIHsKQEAgLTc3Miw5ICs3MzYsNiBAQAogCiAJcmV0dXJuIDA7CiAKLWZhaWxfYXNwYWNlOgotCWlmIChnbC0+Z2xfYXNwYWNlKQotCQlnZnMyX2FzcGFjZV9wdXQoZ2wtPmdsX2FzcGFjZSk7CiBmYWlsOgogCWttZW1fY2FjaGVfZnJlZShnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOwogCXJldHVybiBlcnJvcjsKQEAgLTk2Niw3ICs5MjcsNyBAQAogCWlmICghKGdoLT5naF9mbGFncyAmIExNX0ZMQUdfUFJJT1JJVFkpKSB7CiAJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJCWlmIChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9jYW5jZWwpCi0JCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9jYW5jZWwoZ2wtPmdsX2xvY2spOworCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKGdsKTsKIAkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJfQogCXJldHVybjsKQEAgLTEwNTEsNyArMTAxMiw2IEBACiAJCQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKIAkJCWNsZWFyX2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncyk7CiAJCX0KLQkJZ2wtPmdsX3N0YW1wID0gamlmZmllczsKIAkJaWYgKGxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSAmJgogCQkgICAgIXRlc3RfYml0KEdMRl9QRU5ESU5HX0RFTU9URSwgJmdsLT5nbF9mbGFncykgJiYKIAkJICAgICF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKQEAgLTEyNDAsNzAgKzEyMDAsMTMgQEAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoc1t4XSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl9sbV9ob2xkX2x2YihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaywgY2hhciAqKmx2YnApCit2b2lkIGdmczJfZ2xvY2tfY2Ioc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1bnNpZ25lZCBpbnQgc3RhdGUpCiB7Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAoIXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2hvbGRfbHZiKQotCQlyZXR1cm4gMDsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1faG9sZF9sdmIobG9jaywgbHZicCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfbHZiX2hvbGQgLSBhdHRhY2ggYSBMVkIgZnJvbSBhIGdsb2NrCi0gKiBAZ2w6IFRoZSBnbG9jayBpbiBxdWVzdGlvbgotICoKLSAqLwotCi1pbnQgZ2ZzMl9sdmJfaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCkpIHsKLQkJZXJyb3IgPSBnZnMyX2xtX2hvbGRfbHZiKGdsLT5nbF9zYmQsIGdsLT5nbF9sb2NrLCAmZ2wtPmdsX2x2Yik7Ci0JCWlmIChlcnJvcikgCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCWdmczJfZ2xvY2tfaG9sZChnbCk7Ci0JfQotCWF0b21pY19pbmMoJmdsLT5nbF9sdmJfY291bnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl9sdmJfdW5ob2xkIC0gZGV0YWNoIGEgTFZCIGZyb20gYSBnbG9jawotICogQGdsOiBUaGUgZ2xvY2sgaW4gcXVlc3Rpb24KLSAqCi0gKi8KLQotdm9pZCBnZnMyX2x2Yl91bmhvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKLQotCWdmczJfZ2xvY2tfaG9sZChnbCk7Ci0JZ2ZzMl9hc3NlcnQoZ2wtPmdsX3NiZCwgYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpID4gMCk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmdsLT5nbF9sdmJfY291bnQpKSB7Ci0JCWlmIChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV91bmhvbGRfbHZiKQotCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fdW5ob2xkX2x2YihnbC0+Z2xfbG9jaywgZ2wtPmdsX2x2Yik7Ci0JCWdsLT5nbF9sdmIgPSBOVUxMOwotCQlnZnMyX2dsb2NrX3B1dChnbCk7Ci0JfQotCWdmczJfZ2xvY2tfcHV0KGdsKTsKLX0KLQotc3RhdGljIHZvaWQgYmxvY2tpbmdfY2Ioc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCXVuc2lnbmVkIGludCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7CiAJdW5zaWduZWQgbG9uZyBkZWxheSA9IDA7CiAJdW5zaWduZWQgbG9uZyBob2xkdGltZTsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKLQlnbCA9IGdmczJfZ2xvY2tfZmluZChzZHAsIG5hbWUpOwotCWlmICghZ2wpCi0JCXJldHVybjsKLQorCWdmczJfZ2xvY2tfaG9sZChnbCk7CiAJaG9sZHRpbWUgPSBnbC0+Z2xfdGNoYW5nZSArIGdsLT5nbF9vcHMtPmdvX21pbl9ob2xkX3RpbWU7CiAJaWYgKHRpbWVfYmVmb3JlKG5vdywgaG9sZHRpbWUpKQogCQlkZWxheSA9IGhvbGR0aW1lIC0gbm93OwpAQCAtMTMxNyw3NCArMTIyMCwzMyBAQAogCQlnZnMyX2dsb2NrX3B1dChnbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfamRlc2NfbWFrZV9kaXJ0eShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQ7Ci0KLQlzcGluX2xvY2soJnNkcC0+c2RfamluZGV4X3NwaW4pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoamQsICZzZHAtPnNkX2ppbmRleF9saXN0LCBqZF9saXN0KSB7Ci0JCWlmIChqZC0+amRfamlkICE9IGppZCkKLQkJCWNvbnRpbnVlOwotCQlqZC0+amRfZGlydHkgPSAxOwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfamluZGV4X3NwaW4pOwotfQotCiAvKioKLSAqIGdmczJfZ2xvY2tfY2IgLSBDYWxsYmFjayB1c2VkIGJ5IGxvY2tpbmcgbW9kdWxlCi0gKiBAc2RwOiBQb2ludGVyIHRvIHRoZSBzdXBlcmJsb2NrCi0gKiBAdHlwZTogVHlwZSBvZiBjYWxsYmFjawotICogQGRhdGE6IFR5cGUgZGVwZW5kZW50IGRhdGEgcG9pbnRlcgorICogZ2ZzMl9nbG9ja19jb21wbGV0ZSAtIENhbGxiYWNrIHVzZWQgYnkgbG9ja2luZworICogQGdsOiBQb2ludGVyIHRvIHRoZSBnbG9jaworICogQHJldDogVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBkbG0KICAqCi0gKiBDYWxsZWQgYnkgdGhlIGxvY2tpbmcgbW9kdWxlIHdoZW4gaXQgd2FudHMgdG8gdGVsbCB1cyBzb21ldGhpbmcuCi0gKiBFaXRoZXIgd2UgbmVlZCB0byBkcm9wIGEgbG9jaywgb25lIG9mIG91ciBBU1lOQyByZXF1ZXN0cyBjb21wbGV0ZWQsIG9yCi0gKiBhIGpvdXJuYWwgZnJvbSBhbm90aGVyIGNsaWVudCBuZWVkcyB0byBiZSByZWNvdmVyZWQuCiAgKi8KIAotdm9pZCBnZnMyX2dsb2NrX2NiKHZvaWQgKmNiX2RhdGEsIHVuc2lnbmVkIGludCB0eXBlLCB2b2lkICpkYXRhKQordm9pZCBnZnMyX2dsb2NrX2NvbXBsZXRlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IHJldCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGNiX2RhdGE7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIExNX0NCX05FRURfRToKLQkJYmxvY2tpbmdfY2Ioc2RwLCBkYXRhLCBMTV9TVF9VTkxPQ0tFRCk7Ci0JCXJldHVybjsKLQotCWNhc2UgTE1fQ0JfTkVFRF9EOgotCQlibG9ja2luZ19jYihzZHAsIGRhdGEsIExNX1NUX0RFRkVSUkVEKTsKLQkJcmV0dXJuOwotCi0JY2FzZSBMTV9DQl9ORUVEX1M6Ci0JCWJsb2NraW5nX2NiKHNkcCwgZGF0YSwgTE1fU1RfU0hBUkVEKTsKLQkJcmV0dXJuOwotCi0JY2FzZSBMTV9DQl9BU1lOQzogewotCQlzdHJ1Y3QgbG1fYXN5bmNfY2IgKmFzeW5jID0gZGF0YTsKLQkJc3RydWN0IGdmczJfZ2xvY2sgKmdsOwotCi0JCWRvd25fcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJZ2wgPSBnZnMyX2dsb2NrX2ZpbmQoc2RwLCAmYXN5bmMtPmxjX25hbWUpOwotCQlpZiAoZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGdsKSkKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlnbC0+Z2xfcmVwbHkgPSByZXQ7CisJaWYgKHVubGlrZWx5KHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncykpKSB7CisJCXN0cnVjdCBnZnMyX2hvbGRlciAqZ2g7CisJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOworCQlnaCA9IGZpbmRfZmlyc3Rfd2FpdGVyKGdsKTsKKwkJaWYgKCghKGdoICYmIChnaC0+Z2hfZmxhZ3MgJiBMTV9GTEFHX05PRVhQKSkgJiYKKwkJICAgICAoZ2wtPmdsX3RhcmdldCAhPSBMTV9TVF9VTkxPQ0tFRCkpIHx8CisJCSAgICAoKHJldCAmIH5MTV9PVVRfU1RfTUFTSykgIT0gMCkpCisJCQlzZXRfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpOworCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOworCQlpZiAodGVzdF9iaXQoR0xGX0ZST1pFTiwgJmdsLT5nbF9mbGFncykpCiAJCQlyZXR1cm47Ci0JCWdsLT5nbF9yZXBseSA9IGFzeW5jLT5sY19yZXQ7Ci0JCXNldF9iaXQoR0xGX1JFUExZX1BFTkRJTkcsICZnbC0+Z2xfZmxhZ3MpOwotCQlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQotCQkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwotCQl1cF9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwotCQlyZXR1cm47CiAJfQotCi0JY2FzZSBMTV9DQl9ORUVEX1JFQ09WRVJZOgotCQlnZnMyX2pkZXNjX21ha2VfZGlydHkoc2RwLCAqKHVuc2lnbmVkIGludCAqKWRhdGEpOwotCQlpZiAoc2RwLT5zZF9yZWNvdmVyZF9wcm9jZXNzKQotCQkJd2FrZV91cF9wcm9jZXNzKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2Vzcyk7Ci0JCXJldHVybjsKLQotCWRlZmF1bHQ6Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAwKTsKLQkJcmV0dXJuOwotCX0KKwlzZXRfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnZnMyX2dsb2NrX2hvbGQoZ2wpOworCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCisJCWdmczJfZ2xvY2tfcHV0KGdsKTsKIH0KIAogLyoqCkBAIC0xNTE1LDYgKzEzNzcsMjUgQEAKIAlyZXR1cm4gaGFzX2VudHJpZXM7CiB9CiAKKworLyoqCisgKiB0aGF3X2dsb2NrIC0gdGhhdyBvdXQgYSBnbG9jayB3aGljaCBoYXMgYW4gdW5wcm9jZXNzZWQgcmVwbHkgd2FpdGluZworICogQGdsOiBUaGUgZ2xvY2sgdG8gdGhhdworICoKKyAqIE4uQi4gV2hlbiB3ZSBmcmVlemUgYSBnbG9jaywgd2UgbGVhdmUgYSByZWYgdG8gdGhlIGdsb2NrIG91dHN0YW5kaW5nLAorICogc28gdGhpcyBoYXMgdG8gcmVzdWx0IGluIHRoZSByZWYgY291bnQgYmVpbmcgZHJvcHBlZCBieSBvbmUuCisgKi8KKworc3RhdGljIHZvaWQgdGhhd19nbG9jayhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0ZST1pFTiwgJmdsLT5nbF9mbGFncykpCisJCXJldHVybjsKKwlzZXRfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnZnMyX2dsb2NrX2hvbGQoZ2wpOworCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCisJCWdmczJfZ2xvY2tfcHV0KGdsKTsKK30KKwogLyoqCiAgKiBjbGVhcl9nbG9jayAtIGxvb2sgYXQgYSBnbG9jayBhbmQgc2VlIGlmIHdlIGNhbiBmcmVlIGl0IGZyb20gZ2xvY2sgY2FjaGUKICAqIEBnbDogdGhlIGdsb2NrIHRvIGxvb2sgYXQKQEAgLTE1NDAsNiArMTQyMSwyMCBAQAogfQogCiAvKioKKyAqIGdmczJfZ2xvY2tfdGhhdyAtIFRoYXcgYW55IGZyb3plbiBnbG9ja3MKKyAqIEBzZHA6IFRoZSBzdXBlciBibG9jaworICoKKyAqLworCit2b2lkIGdmczJfZ2xvY2tfdGhhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwl1bnNpZ25lZCB4OworCisJZm9yICh4ID0gMDsgeCA8IEdGUzJfR0xfSEFTSF9TSVpFOyB4KyspCisJCWV4YW1pbmVfYnVja2V0KHRoYXdfZ2xvY2ssIHNkcCwgeCk7Cit9CisKKy8qKgogICogZ2ZzMl9nbF9oYXNoX2NsZWFyIC0gRW1wdHkgb3V0IHRoZSBnbG9jayBoYXNoIHRhYmxlCiAgKiBAc2RwOiB0aGUgZmlsZXN5c3RlbQogICogQHdhaXQ6IHdhaXQgdW50aWwgaXQncyBhbGwgZ29uZQpAQCAtMTYxOSw3ICsxNTE0LDcgQEAKIAlpZiAoZmxhZ3MgJiBMTV9GTEFHX05PRVhQKQogCQkqcCsrID0gJ2UnOwogCWlmIChmbGFncyAmIExNX0ZMQUdfQU5ZKQotCQkqcCsrID0gJ2EnOworCQkqcCsrID0gJ0EnOwogCWlmIChmbGFncyAmIExNX0ZMQUdfUFJJT1JJVFkpCiAJCSpwKysgPSAncCc7CiAJaWYgKGZsYWdzICYgR0xfQVNZTkMpCkBAIC0xNjgzLDYgKzE1NzgsMTAgQEAKIAkJKnArKyA9ICdpJzsKIAlpZiAodGVzdF9iaXQoR0xGX1JFUExZX1BFTkRJTkcsIGdmbGFncykpCiAJCSpwKysgPSAncic7CisJaWYgKHRlc3RfYml0KEdMRl9JTklUSUFMLCBnZmxhZ3MpKQorCQkqcCsrID0gJ0knOworCWlmICh0ZXN0X2JpdChHTEZfRlJPWkVOLCBnZmxhZ3MpKQorCQkqcCsrID0gJ0YnOwogCSpwID0gMDsKIAlyZXR1cm4gYnVmOwogfQpAQCAtMTcxNywxNCArMTYxNiwxMyBAQAogCWR0aW1lICo9IDEwMDAwMDAvSFo7IC8qIGRlbW90ZSB0aW1lIGluIHVTZWMgKi8KIAlpZiAoIXRlc3RfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpKQogCQlkdGltZSA9IDA7Ci0JZ2ZzMl9wcmludF9kYmcoc2VxLCAiRzogIHM6JXMgbjoldS8lbGx1IGY6JXMgdDolcyBkOiVzLyVsbHUgbDolZCBhOiVkIHI6JWRcbiIsCisJZ2ZzMl9wcmludF9kYmcoc2VxLCAiRzogIHM6JXMgbjoldS8lbGx1IGY6JXMgdDolcyBkOiVzLyVsbHUgYTolZCByOiVkXG4iLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfc3RhdGUpLAogCQkgIGdsLT5nbF9uYW1lLmxuX3R5cGUsCiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylnbC0+Z2xfbmFtZS5sbl9udW1iZXIsCiAJCSAgZ2ZsYWdzMnN0cihnZmxhZ3NfYnVmLCAmZ2wtPmdsX2ZsYWdzKSwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX3RhcmdldCksCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF9kZW1vdGVfc3RhdGUpLCBkdGltZSwKLQkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCksCiAJCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpLAogCQkgIGF0b21pY19yZWFkKCZnbC0+Z2xfcmVmKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suaCBiL2ZzL2dmczIvZ2xvY2suaAppbmRleCA1NDNlYzdlLi5hNjAyYTI4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmgKKysrIGIvZnMvZ2ZzMi9nbG9jay5oCkBAIC0xMSwxNSArMTEsMTMwIEBACiAjZGVmaW5lIF9fR0xPQ0tfRE9UX0hfXwogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlICJpbmNvcmUuaCIKIAotLyogRmxhZ3MgZm9yIGxvY2sgcmVxdWVzdHM7IHVzZWQgaW4gZ2ZzMl9ob2xkZXIgZ2hfZmxhZyBmaWVsZC4KLSAgIEZyb20gbG1faW50ZXJmYWNlLmg6CisvKiBPcHRpb25zIGZvciBob3N0ZGF0YSBwYXJzZXIgKi8KKworZW51bSB7CisJT3B0X2ppZCwKKwlPcHRfaWQsCisJT3B0X2ZpcnN0LAorCU9wdF9ub2RpciwKKwlPcHRfZXJyLAorfTsKKworLyoKKyAqIGxtX2xvY2tuYW1lIHR5cGVzCisgKi8KKworI2RlZmluZSBMTV9UWVBFX1JFU0VSVkVECTB4MDAKKyNkZWZpbmUgTE1fVFlQRV9OT05ESVNLCQkweDAxCisjZGVmaW5lIExNX1RZUEVfSU5PREUJCTB4MDIKKyNkZWZpbmUgTE1fVFlQRV9SR1JQCQkweDAzCisjZGVmaW5lIExNX1RZUEVfTUVUQQkJMHgwNAorI2RlZmluZSBMTV9UWVBFX0lPUEVOCQkweDA1CisjZGVmaW5lIExNX1RZUEVfRkxPQ0sJCTB4MDYKKyNkZWZpbmUgTE1fVFlQRV9QTE9DSwkJMHgwNworI2RlZmluZSBMTV9UWVBFX1FVT1RBCQkweDA4CisjZGVmaW5lIExNX1RZUEVfSk9VUk5BTAkJMHgwOQorCisvKgorICogbG1fbG9jaygpIHN0YXRlcworICoKKyAqIFNIQVJFRCBpcyBjb21wYXRpYmxlIHdpdGggU0hBUkVELCBub3Qgd2l0aCBERUZFUlJFRCBvciBFWC4KKyAqIERFRkVSUkVEIGlzIGNvbXBhdGlibGUgd2l0aCBERUZFUlJFRCwgbm90IHdpdGggU0hBUkVEIG9yIEVYLgorICovCisKKyNkZWZpbmUgTE1fU1RfVU5MT0NLRUQJCTAKKyNkZWZpbmUgTE1fU1RfRVhDTFVTSVZFCQkxCisjZGVmaW5lIExNX1NUX0RFRkVSUkVECQkyCisjZGVmaW5lIExNX1NUX1NIQVJFRAkJMworCisvKgorICogbG1fbG9jaygpIGZsYWdzCisgKgorICogTE1fRkxBR19UUlkKKyAqIERvbid0IHdhaXQgdG8gYWNxdWlyZSB0aGUgbG9jayBpZiBpdCBjYW4ndCBiZSBncmFudGVkIGltbWVkaWF0ZWx5LgorICoKKyAqIExNX0ZMQUdfVFJZXzFDQgorICogU2VuZCBvbmUgYmxvY2tpbmcgY2FsbGJhY2sgaWYgVFJZIGlzIHNldCBhbmQgdGhlIGxvY2sgaXMgbm90IGdyYW50ZWQuCisgKgorICogTE1fRkxBR19OT0VYUAorICogR0ZTIHNldHMgdGhpcyBmbGFnIG9uIGxvY2sgcmVxdWVzdHMgaXQgbWFrZXMgd2hpbGUgZG9pbmcgam91cm5hbCByZWNvdmVyeS4KKyAqIFRoZXNlIHNwZWNpYWwgcmVxdWVzdHMgc2hvdWxkIG5vdCBiZSBibG9ja2VkIGR1ZSB0byB0aGUgcmVjb3ZlcnkgbGlrZQorICogb3JkaW5hcnkgbG9ja3Mgd291bGQgYmUuCisgKgorICogTE1fRkxBR19BTlkKKyAqIEEgU0hBUkVEIHJlcXVlc3QgbWF5IGFsc28gYmUgZ3JhbnRlZCBpbiBERUZFUlJFRCwgb3IgYSBERUZFUlJFRCByZXF1ZXN0IG1heQorICogYWxzbyBiZSBncmFudGVkIGluIFNIQVJFRC4gIFRoZSBwcmVmZXJyZWQgc3RhdGUgaXMgd2hpY2hldmVyIGlzIGNvbXBhdGlibGUKKyAqIHdpdGggb3RoZXIgZ3JhbnRlZCBsb2Nrcywgb3IgdGhlIHNwZWNpZmllZCBzdGF0ZSBpZiBubyBvdGhlciBsb2NrcyBleGlzdC4KKyAqCisgKiBMTV9GTEFHX1BSSU9SSVRZCisgKiBPdmVycmlkZSBmYWlybmVzcyBjb25zaWRlcmF0aW9ucy4gIFN1cHBvc2UgYSBsb2NrIGlzIGhlbGQgaW4gYSBzaGFyZWQgc3RhdGUKKyAqIGFuZCB0aGVyZSBpcyBhIHBlbmRpbmcgcmVxdWVzdCBmb3IgdGhlIGRlZmVycmVkIHN0YXRlLiAgQSBzaGFyZWQgbG9jaworICogcmVxdWVzdCB3aXRoIHRoZSBwcmlvcml0eSBmbGFnIHdvdWxkIGJlIGFsbG93ZWQgdG8gYnlwYXNzIHRoZSBkZWZlcnJlZAorICogcmVxdWVzdCBhbmQgZGlyZWN0bHkgam9pbiB0aGUgb3RoZXIgc2hhcmVkIGxvY2suICBBIHNoYXJlZCBsb2NrIHJlcXVlc3QKKyAqIHdpdGhvdXQgdGhlIHByaW9yaXR5IGZsYWcgbWlnaHQgYmUgZm9yY2VkIHRvIHdhaXQgdW50aWwgdGhlIGRlZmVycmVkCisgKiByZXF1ZXN0ZWQgaGFkIGFjcXVpcmVkIGFuZCByZWxlYXNlZCB0aGUgbG9jay4KKyAqLworCiAjZGVmaW5lIExNX0ZMQUdfVFJZCQkweDAwMDAwMDAxCiAjZGVmaW5lIExNX0ZMQUdfVFJZXzFDQgkJMHgwMDAwMDAwMgogI2RlZmluZSBMTV9GTEFHX05PRVhQCQkweDAwMDAwMDA0CiAjZGVmaW5lIExNX0ZMQUdfQU5ZCQkweDAwMDAwMDA4Ci0jZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMCAqLworI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAKKyNkZWZpbmUgR0xfQVNZTkMJCTB4MDAwMDAwNDAKKyNkZWZpbmUgR0xfRVhBQ1QJCTB4MDAwMDAwODAKKyNkZWZpbmUgR0xfU0tJUAkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgR0xfQVRJTUUJCTB4MDAwMDAyMDAKKyNkZWZpbmUgR0xfTk9DQUNIRQkJMHgwMDAwMDQwMAorICAKKy8qCisgKiBsbV9sb2NrKCkgYW5kIGxtX2FzeW5jX2NiIHJldHVybiBmbGFncworICoKKyAqIExNX09VVF9TVF9NQVNLCisgKiBNYXNrcyB0aGUgbG93ZXIgdHdvIGJpdHMgb2YgbG9jayBzdGF0ZSBpbiB0aGUgcmV0dXJuZWQgdmFsdWUuCisgKgorICogTE1fT1VUX0NBTkNFTEVECisgKiBUaGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZC4KKyAqCisgKiBMTV9PVVRfQVNZTkMKKyAqIFRoZSByZXN1bHQgb2YgdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXR1cm5lZCBpbiBhbiBMTV9DQl9BU1lOQyBjYWxsYmFjay4KKyAqCisgKi8KKworI2RlZmluZSBMTV9PVVRfU1RfTUFTSwkJMHgwMDAwMDAwMworI2RlZmluZSBMTV9PVVRfQ0FOQ0VMRUQJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTE1fT1VUX0FTWU5DCQkweDAwMDAwMDgwCisjZGVmaW5lIExNX09VVF9FUlJPUgkJMHgwMDAwMDEwMAorCisvKgorICogbG1fcmVjb3ZlcnlfZG9uZSgpIG1lc3NhZ2VzCisgKi8KKworI2RlZmluZSBMTV9SRF9HQVZFVVAJCTMwOAorI2RlZmluZSBMTV9SRF9TVUNDRVNTCQkzMDkKKworI2RlZmluZSBHTFJfVFJZRkFJTEVECQkxMworCitzdHJ1Y3QgbG1fbG9ja29wcyB7CisJY29uc3QgY2hhciAqbG1fcHJvdG9fbmFtZTsKKwlpbnQgKCpsbV9tb3VudCkgKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpmc25hbWUpOworIAl2b2lkICgqbG1fdW5tb3VudCkgKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKKwl2b2lkICgqbG1fd2l0aGRyYXcpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CisJdm9pZCAoKmxtX3B1dF9sb2NrKSAoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqZ2wpOworCXVuc2lnbmVkIGludCAoKmxtX2xvY2spIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCisJCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisJdm9pZCAoKmxtX2NhbmNlbCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CisJY29uc3QgbWF0Y2hfdGFibGVfdCAqbG1fdG9rZW5zOworfTsKKworI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQorI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAorI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAorI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAKIAogI2RlZmluZSBHTF9BU1lOQwkJMHgwMDAwMDA0MAogI2RlZmluZSBHTF9FWEFDVAkJMHgwMDAwMDA4MApAQCAtMTI4LDEwICsyNDMsMTIgQEAKIGludCBnZnMyX2x2Yl9ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiB2b2lkIGdmczJfbHZiX3VuaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogCi12b2lkIGdmczJfZ2xvY2tfY2Iodm9pZCAqY2JfZGF0YSwgdW5zaWduZWQgaW50IHR5cGUsIHZvaWQgKmRhdGEpOwordm9pZCBnZnMyX2dsb2NrX2NiKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdW5zaWduZWQgaW50IHN0YXRlKTsKK3ZvaWQgZ2ZzMl9nbG9ja19jb21wbGV0ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCByZXQpOwogdm9pZCBnZnMyX3JlY2xhaW1fZ2xvY2soc3RydWN0IGdmczJfc2JkICpzZHApOwogdm9pZCBnZnMyX2dsX2hhc2hfY2xlYXIoc3RydWN0IGdmczJfc2JkICpzZHApOwogdm9pZCBnZnMyX2dsb2NrX2ZpbmlzaF90cnVuY2F0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOwordm9pZCBnZnMyX2dsb2NrX3RoYXcoc3RydWN0IGdmczJfc2JkICpzZHApOwogCiBpbnQgX19pbml0IGdmczJfZ2xvY2tfaW5pdCh2b2lkKTsKIHZvaWQgZ2ZzMl9nbG9ja19leGl0KHZvaWQpOwpAQCAtMTQxLDQgKzI1OCw2IEBACiBpbnQgZ2ZzMl9yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpOwogdm9pZCBnZnMyX3VucmVnaXN0ZXJfZGVidWdmcyh2b2lkKTsKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIGdmczJfZGxtX29wczsKKwogI2VuZGlmIC8qIF9fR0xPQ0tfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDg1MjJkM2EuLmJmMjNhNjIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtMzgsMTkgKzM3LDI0IEBACiBzdGF0aWMgdm9pZCBnZnMyX2FpbF9lbXB0eV9nbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCXVuc2lnbmVkIGludCBibG9ja3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZnbC0+Z2xfYWlsX2xpc3Q7CiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbnQgZXJyb3I7CisJc3RydWN0IGdmczJfdHJhbnMgdHI7CiAKLQlibG9ja3MgPSBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCk7Ci0JaWYgKCFibG9ja3MpCisJbWVtc2V0KCZ0ciwgMCwgc2l6ZW9mKHRyKSk7CisJdHIudHJfcmV2b2tlcyA9IGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KTsKKworCWlmICghdHIudHJfcmV2b2tlcykKIAkJcmV0dXJuOwogCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMCwgYmxvY2tzKTsKLQlpZiAoZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhZXJyb3IpKQotCQlyZXR1cm47CisJLyogQSBzaG9ydGVuZWQsIGlubGluZSB2ZXJzaW9uIG9mIGdmczJfdHJhbnNfYmVnaW4oKSAqLworCXRyLnRyX3Jlc2VydmVkID0gMSArIGdmczJfc3RydWN0MmJsayhzZHAsIHRyLnRyX3Jldm9rZXMsIHNpemVvZih1NjQpKTsKKwl0ci50cl9pcCA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwlJTklUX0xJU1RfSEVBRCgmdHIudHJfbGlzdF9idWYpOworCWdmczJfbG9nX3Jlc2VydmUoc2RwLCB0ci50cl9yZXNlcnZlZCk7CisJQlVHX09OKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyk7CisJY3VycmVudC0+am91cm5hbF9pbmZvID0gJnRyOwogCiAJZ2ZzMl9sb2dfbG9jayhzZHApOwogCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewpAQCAtNzIsMjkgKzc2LDcgQEAKIH0KIAogLyoqCi0gKiBnZnMyX3B0ZV9pbnZhbCAtIFN5bmMgYW5kIGludmFsaWRhdGUgYWxsIFBURXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2xvY2sKLSAqIEBnbDogdGhlIGdsb2NrCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIGdmczJfcHRlX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCWlwID0gZ2wtPmdsX29iamVjdDsKLQlpbm9kZSA9ICZpcC0+aV9pbm9kZTsKLQlpZiAoIWlwIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQotCQlyZXR1cm47Ci0KLQl1bm1hcF9zaGFyZWRfbWFwcGluZ19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAwLCAwKTsKLQlpZiAodGVzdF9iaXQoR0lGX1NXX1BBR0VELCAmaXAtPmlfZmxhZ3MpKQotCQlzZXRfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncyk7Ci0KLX0KLQotLyoqCi0gKiBtZXRhX2dvX3N5bmMgLSBzeW5jIG91dCB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZ2xvY2sKKyAqIHJncnBfZ29fc3luYyAtIHN5bmMgb3V0IHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jawogICogQGdsOiB0aGUgZ2xvY2sKICAqCiAgKiBDYWxsZWQgd2hlbiBkZW1vdGluZyBvciB1bmxvY2tpbmcgYW4gRVggZ2xvY2suICBXZSBtdXN0IGZsdXNoCkBAIC0xMDIsMzYgKzg0LDQyIEBACiAgKiBub3QgcmV0dXJuIHRvIGNhbGxlciB0byBkZW1vdGUvdW5sb2NrIHRoZSBnbG9jayB1bnRpbCBJL08gaXMgY29tcGxldGUuCiAgKi8KIAotc3RhdGljIHZvaWQgbWV0YV9nb19zeW5jKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3N0YXRpYyB2b2lkIHJncnBfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7Ci0JaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpCi0JCXJldHVybjsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CisJaW50IGVycm9yOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKSB7Ci0JCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKLQkJZ2ZzMl9tZXRhX3N5bmMoZ2wpOwotCQlnZnMyX2FpbF9lbXB0eV9nbChnbCk7Ci0JfQorCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpCisJCXJldHVybjsKKwlCVUdfT04oZ2wtPmdsX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSk7CisKKwlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBnbCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlKG1ldGFtYXBwaW5nKTsKKwllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1ldGFtYXBwaW5nKTsKKyAgICAgICAgbWFwcGluZ19zZXRfZXJyb3IobWV0YW1hcHBpbmcsIGVycm9yKTsKKwlnZnMyX2FpbF9lbXB0eV9nbChnbCk7CiB9CiAKIC8qKgotICogbWV0YV9nb19pbnZhbCAtIGludmFsaWRhdGUgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCisgKiByZ3JwX2dvX2ludmFsIC0gaW52YWxpZGF0ZSB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZ2xvY2sKICAqIEBnbDogdGhlIGdsb2NrCiAgKiBAZmxhZ3M6CiAgKgorICogV2UgbmV2ZXIgdXNlZCBMTV9TVF9ERUZFUlJFRCB3aXRoIHJlc291cmNlIGdyb3Vwcywgc28gdGhhdCB3ZQorICogc2hvdWxkIGFsd2F5cyBzZWUgdGhlIG1ldGFkYXRhIGZsYWcgc2V0IGhlcmUuCisgKgogICovCiAKLXN0YXRpYyB2b2lkIG1ldGFfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpCitzdGF0aWMgdm9pZCByZ3JwX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKQogewotCWlmICghKGZsYWdzICYgRElPX01FVEFEQVRBKSkKLQkJcmV0dXJuOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOwogCi0JZ2ZzMl9tZXRhX2ludmFsKGdsKTsKLQlpZiAoZ2wtPmdsX29iamVjdCA9PSBHRlMyX0koZ2wtPmdsX3NiZC0+c2RfcmluZGV4KSkKLQkJZ2wtPmdsX3NiZC0+c2RfcmluZGV4X3VwdG9kYXRlID0gMDsKLQllbHNlIGlmIChnbC0+Z2xfb3BzID09ICZnZnMyX3JncnBfZ2xvcHMgJiYgZ2wtPmdsX29iamVjdCkgeworCUJVR19PTighKGZsYWdzICYgRElPX01FVEFEQVRBKSk7CisJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoZ2wtPmdsX3NiZCwgIWF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSk7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7CisKKwlpZiAoZ2wtPmdsX29iamVjdCkgewogCQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkID0gKHN0cnVjdCBnZnMyX3JncnBkICopZ2wtPmdsX29iamVjdDsKLQogCQlyZ2QtPnJkX2ZsYWdzICY9IH5HRlMyX1JERl9VUFRPREFURTsKIAl9CiB9CkBAIC0xNDgsNDggKzEzNiw1NCBAQAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptZXRhbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoZ2wtPmdsX3N0YXRlICE9IExNX1NUX1VOTE9DS0VEKQotCQlnZnMyX3B0ZV9pbnZhbChnbCk7Ci0JaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpCi0JCXJldHVybjsKLQogCWlmIChpcCAmJiAhU19JU1JFRyhpcC0+aV9pbm9kZS5pX21vZGUpKQogCQlpcCA9IE5VTEw7CisJaWYgKGlwICYmIHRlc3RfYW5kX2NsZWFyX2JpdChHSUZfU1dfUEFHRUQsICZpcC0+aV9mbGFncykpCisJCXVubWFwX3NoYXJlZF9tYXBwaW5nX3JhbmdlKGlwLT5pX2lub2RlLmlfbWFwcGluZywgMCwgMCk7CisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpIHsKLQkJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOwotCQlmaWxlbWFwX2ZkYXRhd3JpdGUobWV0YW1hcHBpbmcpOwotCQlpZiAoaXApIHsKLQkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaXAtPmlfaW5vZGUuaV9tYXBwaW5nOwotCQkJZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOwotCQkJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtYXBwaW5nKTsKLQkJCW1hcHBpbmdfc2V0X2Vycm9yKG1hcHBpbmcsIGVycm9yKTsKLQkJfQotCQllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1ldGFtYXBwaW5nKTsKLQkJbWFwcGluZ19zZXRfZXJyb3IobWV0YW1hcHBpbmcsIGVycm9yKTsKLQkJY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncyk7Ci0JCWdmczJfYWlsX2VtcHR5X2dsKGdsKTsKKwlCVUdfT04oZ2wtPmdsX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSk7CisKKwlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBnbCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlKG1ldGFtYXBwaW5nKTsKKwlpZiAoaXApIHsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpcC0+aV9pbm9kZS5pX21hcHBpbmc7CisJCWZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKKwkJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtYXBwaW5nKTsKKwkJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgZXJyb3IpOwogCX0KKwllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1ldGFtYXBwaW5nKTsKKwltYXBwaW5nX3NldF9lcnJvcihtZXRhbWFwcGluZywgZXJyb3IpOworCWdmczJfYWlsX2VtcHR5X2dsKGdsKTsKIH0KIAogLyoqCiAgKiBpbm9kZV9nb19pbnZhbCAtIHByZXBhcmUgYSBpbm9kZSBnbG9jayB0byBiZSByZWxlYXNlZAogICogQGdsOiB0aGUgZ2xvY2sKICAqIEBmbGFnczoKKyAqIAorICogTm9ybWFsbHkgd2UgaW52bGlkYXRlIGV2ZXJ5dGhpbmcsIGJ1dCBpZiB3ZSBhcmUgbW92aW5nIGludG8KKyAqIExNX1NUX0RFRkVSUkVEIGZyb20gTE1fU1RfU0hBUkVEIG9yIExNX1NUX0VYQ0xVU0lWRSB0aGVuIHdlCisgKiBjYW4ga2VlcCBob2xkIG9mIHRoZSBtZXRhZGF0YSwgc2luY2UgaXQgd29uJ3QgaGF2ZSBjaGFuZ2VkLgogICoKICAqLwogCiBzdGF0aWMgdm9pZCBpbm9kZV9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBnbC0+Z2xfb2JqZWN0OwotCWludCBtZXRhID0gKGZsYWdzICYgRElPX01FVEFEQVRBKTsKIAotCWlmIChtZXRhKSB7Ci0JCWdmczJfbWV0YV9pbnZhbChnbCk7CisJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoZ2wtPmdsX3NiZCwgIWF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSk7CisKKwlpZiAoZmxhZ3MgJiBESU9fTUVUQURBVEEpIHsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CisJCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIDApOwogCQlpZiAoaXApCiAJCQlzZXRfYml0KEdJRl9JTlZBTElELCAmaXAtPmlfZmxhZ3MpOwogCX0KIAorCWlmIChpcCA9PSBHRlMyX0koZ2wtPmdsX3NiZC0+c2RfcmluZGV4KSkKKwkJZ2wtPmdsX3NiZC0+c2RfcmluZGV4X3VwdG9kYXRlID0gMDsKIAlpZiAoaXAgJiYgU19JU1JFRyhpcC0+aV9pbm9kZS5pX21vZGUpKQogCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhpcC0+aV9pbm9kZS5pX21hcHBpbmcsIDApOwogfQpAQCAtMzkwLDIwICszODQsNyBAQAogCXJldHVybiAwOwogfQogCi0vKioKLSAqIHF1b3RhX2dvX2RlbW90ZV9vayAtIENoZWNrIHRvIHNlZSBpZiBpdCdzIG9rIHRvIHVubG9jayBhIHF1b3RhIGdsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jawotICoKLSAqIFJldHVybnM6IDEgaWYgaXQncyBvawotICovCi0KLXN0YXRpYyBpbnQgcXVvdGFfZ29fZGVtb3RlX29rKGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlyZXR1cm4gIWF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KTsKLX0KLQogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX21ldGFfZ2xvcHMgPSB7Ci0JLmdvX3htb3RlX3RoID0gbWV0YV9nb19zeW5jLAogCS5nb190eXBlID0gTE1fVFlQRV9NRVRBLAogfTsKIApAQCAtNDE4LDggKzM5OSw4IEBACiB9OwogCiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfcmdycF9nbG9wcyA9IHsKLQkuZ29feG1vdGVfdGggPSBtZXRhX2dvX3N5bmMsCi0JLmdvX2ludmFsID0gbWV0YV9nb19pbnZhbCwKKwkuZ29feG1vdGVfdGggPSByZ3JwX2dvX3N5bmMsCisJLmdvX2ludmFsID0gcmdycF9nb19pbnZhbCwKIAkuZ29fZGVtb3RlX29rID0gcmdycF9nb19kZW1vdGVfb2ssCiAJLmdvX2xvY2sgPSByZ3JwX2dvX2xvY2ssCiAJLmdvX3VubG9jayA9IHJncnBfZ29fdW5sb2NrLApAQCAtNDQ4LDcgKzQyOSw2IEBACiB9OwogCiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfcXVvdGFfZ2xvcHMgPSB7Ci0JLmdvX2RlbW90ZV9vayA9IHF1b3RhX2dvX2RlbW90ZV9vaywKIAkuZ29fdHlwZSA9IExNX1RZUEVfUVVPVEEsCiB9OwogCkBAIC00NTYsMyArNDM2LDE1IEBACiAJLmdvX3R5cGUgPSBMTV9UWVBFX0pPVVJOQUwsCiB9OwogCitjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnZnMyX2dsb3BzX2xpc3RbXSA9IHsKKwlbTE1fVFlQRV9NRVRBXSA9ICZnZnMyX21ldGFfZ2xvcHMsCisJW0xNX1RZUEVfSU5PREVdID0gJmdmczJfaW5vZGVfZ2xvcHMsCisJW0xNX1RZUEVfUkdSUF0gPSAmZ2ZzMl9yZ3JwX2dsb3BzLAorCVtMTV9UWVBFX05PTkRJU0tdID0gJmdmczJfdHJhbnNfZ2xvcHMsCisJW0xNX1RZUEVfSU9QRU5dID0gJmdmczJfaW9wZW5fZ2xvcHMsCisJW0xNX1RZUEVfRkxPQ0tdID0gJmdmczJfZmxvY2tfZ2xvcHMsCisJW0xNX1RZUEVfTk9ORElTS10gPSAmZ2ZzMl9ub25kaXNrX2dsb3BzLAorCVtMTV9UWVBFX1FVT1RBXSA9ICZnZnMyX3F1b3RhX2dsb3BzLAorCVtMTV9UWVBFX0pPVVJOQUxdID0gJmdmczJfam91cm5hbF9nbG9wcywKK307CisKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuaCBiL2ZzL2dmczIvZ2xvcHMuaAppbmRleCBhMWQ5YjViLi5iM2FhMmUzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmgKKysrIGIvZnMvZ2ZzMi9nbG9wcy5oCkBAIC0yMSw1ICsyMSw2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX25vbmRpc2tfZ2xvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3F1b3RhX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9qb3VybmFsX2dsb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdmczJfZ2xvcHNfbGlzdFtdOwogCiAjZW5kaWYgLyogX19HTE9QU19ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCA2MDg4NDlkLi4zOTlkMWI5IDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTEyLDYgKzEyLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGxtLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KIAogI2RlZmluZSBESU9fV0FJVAkweDAwMDAwMDEwCiAjZGVmaW5lIERJT19NRVRBREFUQQkweDAwMDAwMDIwCkBAIC0yNiw2ICsyOCw3IEBACiBzdHJ1Y3QgZ2ZzMl9haWw7CiBzdHJ1Y3QgZ2ZzMl9qZGVzYzsKIHN0cnVjdCBnZnMyX3NiZDsKK3N0cnVjdCBsbV9sb2Nrb3BzOwogCiB0eXBlZGVmIHZvaWQgKCpnZnMyX2dsb3BfYmhfdCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdW5zaWduZWQgaW50IHJldCk7CiAKQEAgLTEyMSw2ICsxMjQsMjggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJkX2FpbF9nbF9saXN0OwogfTsKIAorLyoKKyAqIEludGVybmFsbHksIHdlIHByZWZpeCB0aGluZ3Mgd2l0aCBnZGxtXyBhbmQgR0RMTV8gKGZvciBnZnMtZGxtKSBzaW5jZSBhCisgKiBwcmVmaXggb2YgbG9ja19kbG1fIGdldHMgYXdrd2FyZC4KKyAqLworCisjZGVmaW5lIEdETE1fU1RSTkFNRV9CWVRFUwkyNQorI2RlZmluZSBHRExNX0xWQl9TSVpFCQkzMgorCitlbnVtIHsKKwlERkxfQkxPQ0tfTE9DS1MJCT0gMCwKK307CisKK3N0cnVjdCBsbV9sb2NrbmFtZSB7CisJdTY0IGxuX251bWJlcjsKKwl1bnNpZ25lZCBpbnQgbG5fdHlwZTsKK307CisKKyNkZWZpbmUgbG1fbmFtZV9lcXVhbChuYW1lMSwgbmFtZTIpIFwKKyAgICAgICAgKCgobmFtZTEpLT5sbl9udW1iZXIgPT0gKG5hbWUyKS0+bG5fbnVtYmVyKSAmJiBcCisgICAgICAgICAoKG5hbWUxKS0+bG5fdHlwZSA9PSAobmFtZTIpLT5sbl90eXBlKSkKKworCiBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIHsKIAl2b2lkICgqZ29feG1vdGVfdGgpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogCWludCAoKmdvX3htb3RlX2JoKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdoKTsKQEAgLTE2Miw2ICsxODcsOCBAQAogCUdMRl9MRkxVU0gJCQk9IDcsCiAJR0xGX0lOVkFMSURBVEVfSU5fUFJPR1JFU1MJPSA4LAogCUdMRl9SRVBMWV9QRU5ESU5HCQk9IDksCisJR0xGX0lOSVRJQUwJCQk9IDEwLAorCUdMRl9GUk9aRU4JCQk9IDExLAogfTsKIAogc3RydWN0IGdmczJfZ2xvY2sgewpAQCAtMTc2LDE2ICsyMDMsMTUgQEAKIAl1bnNpZ25lZCBpbnQgZ2xfdGFyZ2V0OwogCXVuc2lnbmVkIGludCBnbF9yZXBseTsKIAl1bnNpZ25lZCBpbnQgZ2xfaGFzaDsKKwl1bnNpZ25lZCBpbnQgZ2xfcmVxOwogCXVuc2lnbmVkIGludCBnbF9kZW1vdGVfc3RhdGU7IC8qIHN0YXRlIHJlcXVlc3RlZCBieSByZW1vdGUgbm9kZSAqLwogCXVuc2lnbmVkIGxvbmcgZ2xfZGVtb3RlX3RpbWU7IC8qIHRpbWUgb2YgZmlyc3QgZGVtb3RlIHJlcXVlc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsX2hvbGRlcnM7CiAKIAljb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnbF9vcHM7Ci0Jdm9pZCAqZ2xfbG9jazsKLQljaGFyICpnbF9sdmI7Ci0JYXRvbWljX3QgZ2xfbHZiX2NvdW50OwotCi0JdW5zaWduZWQgbG9uZyBnbF9zdGFtcDsKKwljaGFyIGdsX3N0cm5hbWVbR0RMTV9TVFJOQU1FX0JZVEVTXTsKKwlzdHJ1Y3QgZGxtX2xrc2IgZ2xfbGtzYjsKKwljaGFyIGdsX2x2YlszMl07CiAJdW5zaWduZWQgbG9uZyBnbF90Y2hhbmdlOwogCXZvaWQgKmdsX29iamVjdDsKIApAQCAtMjgzLDcgKzMwOSw5IEBACiAKIHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgewogCXN0cnVjdCBsaXN0X2hlYWQgcWRfbGlzdDsKLQl1bnNpZ25lZCBpbnQgcWRfY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCBxZF9yZWNsYWltOworCisJYXRvbWljX3QgcWRfY291bnQ7CiAKIAl1MzIgcWRfaWQ7CiAJdW5zaWduZWQgbG9uZyBxZF9mbGFnczsJCS8qIFFERl8uLi4gKi8KQEAgLTMwMyw3ICszMzEsNiBAQAogCiAJdTY0IHFkX3N5bmNfZ2VuOwogCXVuc2lnbmVkIGxvbmcgcWRfbGFzdF93YXJuOwotCXVuc2lnbmVkIGxvbmcgcWRfbGFzdF90b3VjaGVkOwogfTsKIAogc3RydWN0IGdmczJfdHJhbnMgewpAQCAtMzkwLDcgKzQxNyw3IEBACiAJdW5zaWduZWQgaW50IGFyX3N1aWRkaXI6MTsJCS8qIHN1aWRkaXIgc3VwcG9ydCAqLwogCXVuc2lnbmVkIGludCBhcl9kYXRhOjI7CQkJLyogb3JkZXJlZC93cml0ZWJhY2sgKi8KIAl1bnNpZ25lZCBpbnQgYXJfbWV0YToxOwkJCS8qIG1vdW50IG1ldGFmcyAqLwotCXVuc2lnbmVkIGludCBhcl9udW1fZ2xvY2tkOwkJLyogTnVtYmVyIG9mIGdsb2NrZCB0aHJlYWRzICovCisJdW5zaWduZWQgaW50IGFyX2Rpc2NhcmQ6MTsJCS8qIGRpc2NhcmQgcmVxdWVzdHMgKi8KIH07CiAKIHN0cnVjdCBnZnMyX3R1bmUgewpAQCAtNDA2LDcgKzQzMyw2IEBACiAJdW5zaWduZWQgaW50IGd0X3F1b3RhX3dhcm5fcGVyaW9kOyAvKiBTZWNzIGJldHdlZW4gcXVvdGEgd2FybiBtc2dzICovCiAJdW5zaWduZWQgaW50IGd0X3F1b3RhX3NjYWxlX251bTsgLyogTnVtZXJhdG9yICovCiAJdW5zaWduZWQgaW50IGd0X3F1b3RhX3NjYWxlX2RlbjsgLyogRGVub21pbmF0b3IgKi8KLQl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfY2FjaGVfc2VjczsKIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfcXVhbnR1bTsgLyogU2VjcyBiZXR3ZWVuIHN5bmNzIHRvIHF1b3RhIGZpbGUgKi8KIAl1bnNpZ25lZCBpbnQgZ3RfbmV3X2ZpbGVzX2pkYXRhOwogCXVuc2lnbmVkIGludCBndF9tYXhfcmVhZGFoZWFkOyAvKiBNYXggYnl0ZXMgdG8gcmVhZC1haGVhZCBmcm9tIGRpc2sgKi8KQEAgLTQ0NSw2ICs0NzEsMzEgQEAKIAogCWNoYXIgc2JfbG9ja3Byb3RvW0dGUzJfTE9DS05BTUVfTEVOXTsKIAljaGFyIHNiX2xvY2t0YWJsZVtHRlMyX0xPQ0tOQU1FX0xFTl07CisJdTggc2JfdXVpZFsxNl07Cit9OworCisvKgorICogbG1fbW91bnQoKSByZXR1cm4gdmFsdWVzCisgKgorICogbHNfamlkIC0gdGhlIGpvdXJuYWwgSUQgdGhpcyBub2RlIHNob3VsZCB1c2UKKyAqIGxzX2ZpcnN0IC0gdGhpcyBub2RlIGlzIHRoZSBmaXJzdCB0byBtb3VudCB0aGUgZmlsZSBzeXN0ZW0KKyAqIGxzX2xvY2tzcGFjZSAtIGxvY2sgbW9kdWxlJ3MgY29udGV4dCBmb3IgdGhpcyBmaWxlIHN5c3RlbQorICogbHNfb3BzIC0gbG9jayBtb2R1bGUncyBmdW5jdGlvbnMKKyAqLworCitzdHJ1Y3QgbG1fbG9ja3N0cnVjdCB7CisJdTMyIGxzX2lkOworCXVuc2lnbmVkIGludCBsc19qaWQ7CisJdW5zaWduZWQgaW50IGxzX2ZpcnN0OworCXVuc2lnbmVkIGludCBsc19maXJzdF9kb25lOworCXVuc2lnbmVkIGludCBsc19ub2RpcjsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbHNfb3BzOworCXVuc2lnbmVkIGxvbmcgbHNfZmxhZ3M7CisJZGxtX2xvY2tzcGFjZV90ICpsc19kbG07CisKKwlpbnQgbHNfcmVjb3Zlcl9qaWQ7CisJaW50IGxzX3JlY292ZXJfamlkX2RvbmU7CisJaW50IGxzX3JlY292ZXJfamlkX3N0YXR1czsKIH07CiAKIHN0cnVjdCBnZnMyX3NiZCB7CkBAIC01MjAsNyArNTcxLDYgQEAKIAlzcGlubG9ja190IHNkX2ppbmRleF9zcGluOwogCXN0cnVjdCBtdXRleCBzZF9qaW5kZXhfbXV0ZXg7CiAJdW5zaWduZWQgaW50IHNkX2pvdXJuYWxzOwotCXVuc2lnbmVkIGxvbmcgc2RfamluZGV4X3JlZnJlc2hfdGltZTsKIAogCXN0cnVjdCBnZnMyX2pkZXNjICpzZF9qZGVzYzsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2Rfam91cm5hbF9naDsKQEAgLTU0MCw3ICs1OTAsNiBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBzZF9xdW90YV9saXN0OwogCWF0b21pY190IHNkX3F1b3RhX2NvdW50OwotCXNwaW5sb2NrX3Qgc2RfcXVvdGFfc3BpbjsKIAlzdHJ1Y3QgbXV0ZXggc2RfcXVvdGFfbXV0ZXg7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgc2RfcXVvdGFfd2FpdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNkX3RydW5jX2xpc3Q7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggM2I4N2MxOC4uN2IyNzdkNDQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuYworKysgYi9mcy9nZnMyL2lub2RlLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCkBAIC0xMzcsMTYgKzEzNiwxNiBAQAogCiAJaWYgKFNfSVNSRUcobW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZ2ZzMl9maWxlX2lvcHM7Ci0JCWlmIChzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MpCi0JCQlpbm9kZS0+aV9mb3AgPSAmZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrOworCQlpZiAoZ2ZzMl9sb2NhbGZsb2NrcyhzZHApKQorCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrOwogCQllbHNlCi0JCQlpbm9kZS0+aV9mb3AgPSAmZ2ZzMl9maWxlX2ZvcHM7CisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2ZpbGVfZm9wczsKIAl9IGVsc2UgaWYgKFNfSVNESVIobW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZ2ZzMl9kaXJfaW9wczsKLQkJaWYgKHNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcykKLQkJCWlub2RlLT5pX2ZvcCA9ICZnZnMyX2Rpcl9mb3BzX25vbG9jazsKKwkJaWYgKGdmczJfbG9jYWxmbG9ja3Moc2RwKSkKKwkJCWlub2RlLT5pX2ZvcCA9IGdmczJfZGlyX2ZvcHNfbm9sb2NrOwogCQllbHNlCi0JCQlpbm9kZS0+aV9mb3AgPSAmZ2ZzMl9kaXJfZm9wczsKKwkJCWlub2RlLT5pX2ZvcCA9IGdmczJfZGlyX2ZvcHM7CiAJfSBlbHNlIGlmIChTX0lTTE5LKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfc3ltbGlua19pb3BzOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmggYi9mcy9nZnMyL2lub2RlLmgKaW5kZXggZDUzMjkzNi4uZGNhNGZlZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5oCisrKyBiL2ZzL2dmczIvaW5vZGUuaApAQCAtMTAxLDEyICsxMDEsMjYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9pb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfc3ltbGlua19pb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2ZvcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZGlyX2ZvcHNfbm9sb2NrOwogCiBleHRlcm4gdm9pZCBnZnMyX3NldF9pbm9kZV9mbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKyAKKyNpZmRlZiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZGlyX2ZvcHM7CitzdGF0aWMgaW5saW5lIGludCBnZnMyX2xvY2FsZmxvY2tzKGNvbnN0IHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCXJldHVybiBzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3M7Cit9CisjZWxzZSAvKiBTaW5nbGUgbm9kZSBvbmx5ICovCisjZGVmaW5lIGdmczJfZmlsZV9mb3BzIE5VTEwKKyNkZWZpbmUgZ2ZzMl9kaXJfZm9wcyBOVUxMCitzdGF0aWMgaW5saW5lIGludCBnZnMyX2xvY2FsZmxvY2tzKGNvbnN0IHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCXJldHVybiAxOworfQorI2VuZGlmIC8qIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNICovCiAKICNlbmRpZiAvKiBfX0lOT0RFX0RPVF9IX18gKi8KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NrX2RsbS5jIGIvZnMvZ2ZzMi9sb2NrX2RsbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZGY5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9nZnMyL2xvY2tfZGxtLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKKyAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KKworI2luY2x1ZGUgImluY29yZS5oIgorI2luY2x1ZGUgImdsb2NrLmgiCisjaW5jbHVkZSAidXRpbC5oIgorCisKK3N0YXRpYyB2b2lkIGdkbG1fYXN0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBhcmc7CisJdW5zaWduZWQgcmV0ID0gZ2wtPmdsX3N0YXRlOworCisJQlVHX09OKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9ERU1PVEVEKTsKKworCWlmIChnbC0+Z2xfbGtzYi5zYl9mbGFncyAmIERMTV9TQkZfVkFMTk9UVkFMSUQpCisJCW1lbXNldChnbC0+Z2xfbHZiLCAwLCBHRExNX0xWQl9TSVpFKTsKKworCXN3aXRjaCAoZ2wtPmdsX2xrc2Iuc2Jfc3RhdHVzKSB7CisJY2FzZSAtRExNX0VVTkxPQ0s6IC8qIFVubG9ja2VkLCBzbyBnbG9jayBjYW4gYmUgZnJlZWQgKi8KKwkJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CisJCXJldHVybjsKKwljYXNlIC1ETE1fRUNBTkNFTDogLyogQ2FuY2VsIHdoaWxlIGdldHRpbmcgbG9jayAqLworCQlyZXQgfD0gTE1fT1VUX0NBTkNFTEVEOworCQlnb3RvIG91dDsKKwljYXNlIC1FQUdBSU46IC8qIFRyeSBsb2NrIGZhaWxzICovCisJCWdvdG8gb3V0OworCWNhc2UgLUVJTlZBTDogLyogSW52YWxpZCAqLworCWNhc2UgLUVOT01FTTogLyogT3V0IG9mIG1lbW9yeSAqLworCQlyZXQgfD0gTE1fT1VUX0VSUk9SOworCQlnb3RvIG91dDsKKwljYXNlIDA6IC8qIFN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDogLyogU29tZXRoaW5nIHVuZXhwZWN0ZWQgKi8KKwkJQlVHKCk7CisJfQorCisJcmV0ID0gZ2wtPmdsX3JlcTsKKwlpZiAoZ2wtPmdsX2xrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX0FMVE1PREUpIHsKKwkJaWYgKGdsLT5nbF9yZXEgPT0gTE1fU1RfU0hBUkVEKQorCQkJcmV0ID0gTE1fU1RfREVGRVJSRUQ7CisJCWVsc2UgaWYgKGdsLT5nbF9yZXEgPT0gTE1fU1RfREVGRVJSRUQpCisJCQlyZXQgPSBMTV9TVF9TSEFSRUQ7CisJCWVsc2UKKwkJCUJVRygpOworCX0KKworCXNldF9iaXQoR0xGX0lOSVRJQUwsICZnbC0+Z2xfZmxhZ3MpOworCWdmczJfZ2xvY2tfY29tcGxldGUoZ2wsIHJldCk7CisJcmV0dXJuOworb3V0OgorCWlmICghdGVzdF9iaXQoR0xGX0lOSVRJQUwsICZnbC0+Z2xfZmxhZ3MpKQorCQlnbC0+Z2xfbGtzYi5zYl9sa2lkID0gMDsKKwlnZnMyX2dsb2NrX2NvbXBsZXRlKGdsLCByZXQpOworfQorCitzdGF0aWMgdm9pZCBnZGxtX2Jhc3Qodm9pZCAqYXJnLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBhcmc7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIERMTV9MT0NLX0VYOgorCQlnZnMyX2dsb2NrX2NiKGdsLCBMTV9TVF9VTkxPQ0tFRCk7CisJCWJyZWFrOworCWNhc2UgRExNX0xPQ0tfQ1c6CisJCWdmczJfZ2xvY2tfY2IoZ2wsIExNX1NUX0RFRkVSUkVEKTsKKwkJYnJlYWs7CisJY2FzZSBETE1fTE9DS19QUjoKKwkJZ2ZzMl9nbG9ja19jYihnbCwgTE1fU1RfU0hBUkVEKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGJhc3QgbW9kZSAlZCIsIG1vZGUpOworCQlCVUcoKTsKKwl9Cit9CisKKy8qIGNvbnZlcnQgZ2ZzIGxvY2stc3RhdGUgdG8gZGxtIGxvY2stbW9kZSAqLworCitzdGF0aWMgaW50IG1ha2VfbW9kZShjb25zdCB1bnNpZ25lZCBpbnQgbG1zdGF0ZSkKK3sKKwlzd2l0Y2ggKGxtc3RhdGUpIHsKKwljYXNlIExNX1NUX1VOTE9DS0VEOgorCQlyZXR1cm4gRExNX0xPQ0tfTkw7CisJY2FzZSBMTV9TVF9FWENMVVNJVkU6CisJCXJldHVybiBETE1fTE9DS19FWDsKKwljYXNlIExNX1NUX0RFRkVSUkVEOgorCQlyZXR1cm4gRExNX0xPQ0tfQ1c7CisJY2FzZSBMTV9TVF9TSEFSRUQ6CisJCXJldHVybiBETE1fTE9DS19QUjsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIExNIHN0YXRlICVkIiwgbG1zdGF0ZSk7CisJQlVHKCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdTMyIG1ha2VfZmxhZ3MoY29uc3QgdTMyIGxraWQsIGNvbnN0IHVuc2lnbmVkIGludCBnZnNfZmxhZ3MsCisJCSAgICAgIGNvbnN0IGludCByZXEpCit7CisJdTMyIGxrZiA9IDA7CisKKwlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19UUlkpCisJCWxrZiB8PSBETE1fTEtGX05PUVVFVUU7CisKKwlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19UUllfMUNCKSB7CisJCWxrZiB8PSBETE1fTEtGX05PUVVFVUU7CisJCWxrZiB8PSBETE1fTEtGX05PUVVFVUVCQVNUOworCX0KKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKSB7CisJCWxrZiB8PSBETE1fTEtGX05PT1JERVI7CisJCWxrZiB8PSBETE1fTEtGX0hFQURRVUU7CisJfQorCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfQU5ZKSB7CisJCWlmIChyZXEgPT0gRExNX0xPQ0tfUFIpCisJCQlsa2YgfD0gRExNX0xLRl9BTFRDVzsKKwkJZWxzZSBpZiAocmVxID09IERMTV9MT0NLX0NXKQorCQkJbGtmIHw9IERMTV9MS0ZfQUxUUFI7CisJCWVsc2UKKwkJCUJVRygpOworCX0KKworCWlmIChsa2lkICE9IDApIAorCQlsa2YgfD0gRExNX0xLRl9DT05WRVJUOworCisJbGtmIHw9IERMTV9MS0ZfVkFMQkxLOworCisJcmV0dXJuIGxrZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZGxtX2xvY2soc3RydWN0IGdmczJfZ2xvY2sgKmdsLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OworCWludCBlcnJvcjsKKwlpbnQgcmVxOworCXUzMiBsa2Y7CisKKwlnbC0+Z2xfcmVxID0gcmVxX3N0YXRlOworCXJlcSA9IG1ha2VfbW9kZShyZXFfc3RhdGUpOworCWxrZiA9IG1ha2VfZmxhZ3MoZ2wtPmdsX2xrc2Iuc2JfbGtpZCwgZmxhZ3MsIHJlcSk7CisKKwkvKgorCSAqIFN1Ym1pdCB0aGUgYWN0dWFsIGxvY2sgcmVxdWVzdC4KKwkgKi8KKworCWVycm9yID0gZGxtX2xvY2sobHMtPmxzX2RsbSwgcmVxLCAmZ2wtPmdsX2xrc2IsIGxrZiwgZ2wtPmdsX3N0cm5hbWUsCisJCQkgR0RMTV9TVFJOQU1FX0JZVEVTIC0gMSwgMCwgZ2RsbV9hc3QsIGdsLCBnZGxtX2Jhc3QpOworCWlmIChlcnJvciA9PSAtRUFHQUlOKQorCQlyZXR1cm4gMDsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBMTV9PVVRfRVJST1I7CisJcmV0dXJuIExNX09VVF9BU1lOQzsKK30KKworc3RhdGljIHZvaWQgZ2RsbV9wdXRfbG9jayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpwdHIpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gcHRyOworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OworCWludCBlcnJvcjsKKworCWlmIChnbC0+Z2xfbGtzYi5zYl9sa2lkID09IDApIHsKKwkJa21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgZ2wpOworCQlyZXR1cm47CisJfQorCisJZXJyb3IgPSBkbG1fdW5sb2NrKGxzLT5sc19kbG0sIGdsLT5nbF9sa3NiLnNiX2xraWQsIERMTV9MS0ZfVkFMQkxLLAorCQkJICAgTlVMTCwgZ2wpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIgImdkbG1fdW5sb2NrICV4LCVsbHggZXJyPSVkXG4iLAorCQkgICAgICAgZ2wtPmdsX25hbWUubG5fdHlwZSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2wtPmdsX25hbWUubG5fbnVtYmVyLCBlcnJvcik7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fY2FuY2VsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlkbG1fdW5sb2NrKGxzLT5sc19kbG0sIGdsLT5nbF9sa3NiLnNiX2xraWQsIERMTV9MS0ZfQ0FOQ0VMLCBOVUxMLCBnbCk7Cit9CisKK3N0YXRpYyBpbnQgZ2RsbV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqZnNuYW1lKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJaW50IGVycm9yOworCisJaWYgKGZzbmFtZSA9PSBOVUxMKSB7CisJCWZzX2luZm8oc2RwLCAibm8gZnNuYW1lIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyb3IgPSBkbG1fbmV3X2xvY2tzcGFjZShmc25hbWUsIHN0cmxlbihmc25hbWUpLCAmbHMtPmxzX2RsbSwKKwkJCQkgIERMTV9MU0ZMX0ZTIHwgRExNX0xTRkxfTkVXRVhDTCB8CisJCQkJICAobHMtPmxzX25vZGlyID8gRExNX0xTRkxfTk9ESVIgOiAwKSwKKwkJCQkgIEdETE1fTFZCX1NJWkUpOworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSICJkbG1fbmV3X2xvY2tzcGFjZSBlcnJvciAlZCIsIGVycm9yKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgZ2RsbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisKKwlpZiAobHMtPmxzX2RsbSkgeworCQlkbG1fcmVsZWFzZV9sb2Nrc3BhY2UobHMtPmxzX2RsbSwgMik7CisJCWxzLT5sc19kbG0gPSBOVUxMOworCX0KK30KKworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgZGxtX3Rva2VucyA9IHsKKwl7IE9wdF9qaWQsICJqaWQ9JWQifSwKKwl7IE9wdF9pZCwgImlkPSVkIn0sCisJeyBPcHRfZmlyc3QsICJmaXJzdD0lZCJ9LAorCXsgT3B0X25vZGlyLCAibm9kaXI9JWQifSwKKwl7IE9wdF9lcnIsIE5VTEwgfSwKK307CisKK2NvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIGdmczJfZGxtX29wcyA9IHsKKwkubG1fcHJvdG9fbmFtZSA9ICJsb2NrX2RsbSIsCisJLmxtX21vdW50ID0gZ2RsbV9tb3VudCwKKwkubG1fdW5tb3VudCA9IGdkbG1fdW5tb3VudCwKKwkubG1fcHV0X2xvY2sgPSBnZGxtX3B1dF9sb2NrLAorCS5sbV9sb2NrID0gZ2RsbV9sb2NrLAorCS5sbV9jYW5jZWwgPSBnZGxtX2NhbmNlbCwKKwkubG1fdG9rZW5zID0gJmRsbV90b2tlbnMsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcuYyBiL2ZzL2dmczIvbG9ja2luZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjMyNDNhLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+Ci0KLXN0cnVjdCBsbWhfd3JhcHBlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsd19saXN0OwotCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsd19vcHM7Ci19OwotCi1zdGF0aWMgaW50IG5vbG9ja19tb3VudChjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQlsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQlzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKTsKLQotLyogTGlzdCBvZiByZWdpc3RlcmVkIGxvdy1sZXZlbCBsb2NraW5nIHByb3RvY29scy4gIEEgZmlsZSBzeXN0ZW0gc2VsZWN0cyBvbmUKLSAgIG9mIHRoZW0gYnkgbmFtZSBhdCBtb3VudCB0aW1lLCBlLmcuIGxvY2tfbm9sb2NrLCBsb2NrX2RsbS4gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIG5vbG9ja19vcHMgPSB7Ci0JLmxtX3Byb3RvX25hbWUgPSAibG9ja19ub2xvY2siLAotCS5sbV9tb3VudCA9IG5vbG9ja19tb3VudCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbG1oX3dyYXBwZXIgbm9sb2NrX3Byb3RvICA9IHsKLQkubHdfbGlzdCA9IExJU1RfSEVBRF9JTklUKG5vbG9ja19wcm90by5sd19saXN0KSwKLQkubHdfb3BzID0gJm5vbG9ja19vcHMsCi19OwotCi1zdGF0aWMgTElTVF9IRUFEKGxtaF9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgobG1oX2xvY2spOwotCi1zdGF0aWMgaW50IG5vbG9ja19tb3VudChjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQlsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQlzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKQotewotCWNoYXIgKmM7Ci0JdW5zaWduZWQgaW50IGppZDsKLQotCWMgPSBzdHJzdHIoaG9zdF9kYXRhLCAiamlkPSIpOwotCWlmICghYykKLQkJamlkID0gMDsKLQllbHNlIHsKLQkJYyArPSA0OwotCQlzc2NhbmYoYywgIiV1IiwgJmppZCk7Ci0JfQotCi0JbG9ja3N0cnVjdC0+bHNfamlkID0gamlkOwotCWxvY2tzdHJ1Y3QtPmxzX2ZpcnN0ID0gMTsKLQlsb2Nrc3RydWN0LT5sc19sdmJfc2l6ZSA9IG1pbl9sdmJfc2l6ZTsKLQlsb2Nrc3RydWN0LT5sc19vcHMgPSAmbm9sb2NrX29wczsKLQlsb2Nrc3RydWN0LT5sc19mbGFncyA9IExNX0xTRkxBR19MT0NBTDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvIC0gUmVnaXN0ZXIgYSBsb3ctbGV2ZWwgbG9ja2luZyBwcm90b2NvbAotICogQHByb3RvOiB0aGUgcHJvdG9jb2wgZGVmaW5pdGlvbgotICoKLSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVYWFggb24gZmFpbHVyZQotICovCi0KLWludCBnZnMyX3JlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pCi17Ci0Jc3RydWN0IGxtaF93cmFwcGVyICpsdzsKLQotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobHcsICZsbWhfbGlzdCwgbHdfbGlzdCkgewotCQlpZiAoIXN0cmNtcChsdy0+bHdfb3BzLT5sbV9wcm90b19uYW1lLCBwcm90by0+bG1fcHJvdG9fbmFtZSkpIHsKLQkJCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjogcHJvdG9jb2wgJXMgYWxyZWFkeSBleGlzdHNcbiIsCi0JCQkgICAgICAgcHJvdG8tPmxtX3Byb3RvX25hbWUpOwotCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCX0KLQl9Ci0KLQlsdyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbWhfd3JhcHBlciksIEdGUF9LRVJORUwpOwotCWlmICghbHcpIHsKLQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWx3LT5sd19vcHMgPSBwcm90bzsKLQlsaXN0X2FkZCgmbHctPmx3X2xpc3QsICZsbWhfbGlzdCk7Ci0KLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8gLSBVbnJlZ2lzdGVyIGEgbG93LWxldmVsIGxvY2tpbmcgcHJvdG9jb2wKLSAqIEBwcm90bzogdGhlIHByb3RvY29sIGRlZmluaXRpb24KLSAqCi0gKi8KLQotdm9pZCBnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90bykKLXsKLQlzdHJ1Y3QgbG1oX3dyYXBwZXIgKmx3OwotCi0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShsdywgJmxtaF9saXN0LCBsd19saXN0KSB7Ci0JCWlmICghc3RyY21wKGx3LT5sd19vcHMtPmxtX3Byb3RvX25hbWUsIHByb3RvLT5sbV9wcm90b19uYW1lKSkgewotCQkJbGlzdF9kZWwoJmx3LT5sd19saXN0KTsKLQkJCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCQkJa2ZyZWUobHcpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiBjYW4ndCB1bnJlZ2lzdGVyIGxvY2sgcHJvdG9jb2wgJXNcbiIsCi0JICAgICAgIHByb3RvLT5sbV9wcm90b19uYW1lKTsKLX0KLQotLyoqCi0gKiBnZnMyX21vdW50X2xvY2twcm90byAtIE1vdW50IGEgbG9jayBwcm90b2NvbAotICogQHByb3RvX25hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcHJvdG9jb2wKLSAqIEB0YWJsZV9uYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGxvY2sgc3BhY2UKLSAqIEBob3N0X2RhdGEgLSBkYXRhIHNwZWNpZmljIHRvIHRoaXMgaG9zdAotICogQGNiIC0gdGhlIGNhbGxiYWNrIHRvIHRoZSBjb2RlIHVzaW5nIHRoZSBsb2NrIG1vZHVsZQotICogQHNkcCAtIFRoZSBHRlMyIHN1cGVyYmxvY2sKLSAqIEBtaW5fbHZiX3NpemUgLSB0aGUgbWluaW51bSBMVkIgc2l6ZSB0aGF0IHRoZSBjYWxsZXIgY2FuIGRlYWwgd2l0aAotICogQGZsYWdzIC0gTE1fTUZMQUdfKgotICogQGxvY2tzdHJ1Y3QgLSBhIHN0cnVjdHVyZSByZXR1cm5lZCBkZXNjcmliaW5nIHRoZSBtb3VudAotICoKLSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVYWFggb24gZmFpbHVyZQotICovCi0KLWludCBnZnMyX21vdW50X2xvY2twcm90byhjaGFyICpwcm90b19uYW1lLCBjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQkgbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCSB1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQkgc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQkgc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQlzdHJ1Y3QgbG1oX3dyYXBwZXIgKmx3ID0gTlVMTDsKLQlpbnQgdHJ5ID0gMDsKLQlpbnQgZXJyb3IsIGZvdW5kOwotCi0KLXJldHJ5OgotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQotCWlmIChsaXN0X2VtcHR5KCZub2xvY2tfcHJvdG8ubHdfbGlzdCkpCi0JCWxpc3RfYWRkKCZub2xvY2tfcHJvdG8ubHdfbGlzdCwgJmxtaF9saXN0KTsKLQotCWZvdW5kID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGx3LCAmbG1oX2xpc3QsIGx3X2xpc3QpIHsKLQkJaWYgKCFzdHJjbXAobHctPmx3X29wcy0+bG1fcHJvdG9fbmFtZSwgcHJvdG9fbmFtZSkpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQlpZiAoIXRyeSAmJiBjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkgewotCQkJdHJ5ID0gMTsKLQkJCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCQkJcmVxdWVzdF9tb2R1bGUocHJvdG9fbmFtZSk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNhbid0IGZpbmQgcHJvdG9jb2wgJXNcbiIsIHByb3RvX25hbWUpOwotCQllcnJvciA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChsdy0+bHdfb3BzLT5sbV9vd25lciAmJgotCSAgICAhdHJ5X21vZHVsZV9nZXQobHctPmx3X29wcy0+bG1fb3duZXIpKSB7Ci0JCXRyeSA9IDA7Ci0JCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCQltc2xlZXAoMTAwMCk7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCi0JZXJyb3IgPSBsdy0+bHdfb3BzLT5sbV9tb3VudCh0YWJsZV9uYW1lLCBob3N0X2RhdGEsIGNiLCBjYl9kYXRhLAotCQkJCSAgICAgbWluX2x2Yl9zaXplLCBmbGFncywgbG9ja3N0cnVjdCwgZnNrb2JqKTsKLQlpZiAoZXJyb3IpCi0JCW1vZHVsZV9wdXQobHctPmx3X29wcy0+bG1fb3duZXIpOwotb3V0OgotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZnMyX3VubW91bnRfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KQotewotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQlpZiAobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV91bm1vdW50KQotCQlsb2Nrc3RydWN0LT5sc19vcHMtPmxtX3VubW91bnQobG9ja3N0cnVjdC0+bHNfbG9ja3NwYWNlKTsKLQlpZiAobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcikKLQkJbW9kdWxlX3B1dChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX293bmVyKTsKLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLX0KLQotLyoqCi0gKiBnZnMyX3dpdGhkcmF3X2xvY2twcm90byAtIGFibm9ybWFsbHkgdW5tb3VudCBhIGxvY2sgbW9kdWxlCi0gKiBAbG9ja3N0cnVjdDogdGhlIGxvY2tzdHJ1Y3QgcGFzc2VkIGludG8gbW91bnQKLSAqCi0gKi8KLQotdm9pZCBnZnMyX3dpdGhkcmF3X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCkKLXsKLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0JbG9ja3N0cnVjdC0+bHNfb3BzLT5sbV93aXRoZHJhdyhsb2Nrc3RydWN0LT5sc19sb2Nrc3BhY2UpOwotCWlmIChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX293bmVyKQotCQltb2R1bGVfcHV0KGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpOwotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChnZnMyX3JlZ2lzdGVyX2xvY2twcm90byk7Ci1FWFBPUlRfU1lNQk9MX0dQTChnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKTsKLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9NYWtlZmlsZSBiL2ZzL2dmczIvbG9ja2luZy9kbG0vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MDliYjYuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb2JqLSQoQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0pICs9IGxvY2tfZGxtLm8KLWxvY2tfZGxtLXkgOj0gbG9jay5vIG1haW4ubyBtb3VudC5vIHN5c2ZzLm8gdGhyZWFkLm8KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ4MmM5MC4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDcwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIGNoYXIganVua19sdmJbR0RMTV9MVkJfU0laRV07Ci0KLQotLyogY29udmVydCBkbG0gbG9jay1tb2RlIHRvIGdmcyBsb2NrLXN0YXRlICovCi0KLXN0YXRpYyBzMTYgZ2RsbV9tYWtlX2xtc3RhdGUoczE2IGRsbW1vZGUpCi17Ci0Jc3dpdGNoIChkbG1tb2RlKSB7Ci0JY2FzZSBETE1fTE9DS19JVjoKLQljYXNlIERMTV9MT0NLX05MOgotCQlyZXR1cm4gTE1fU1RfVU5MT0NLRUQ7Ci0JY2FzZSBETE1fTE9DS19FWDoKLQkJcmV0dXJuIExNX1NUX0VYQ0xVU0lWRTsKLQljYXNlIERMTV9MT0NLX0NXOgotCQlyZXR1cm4gTE1fU1RfREVGRVJSRUQ7Ci0JY2FzZSBETE1fTE9DS19QUjoKLQkJcmV0dXJuIExNX1NUX1NIQVJFRDsKLQl9Ci0JZ2RsbV9hc3NlcnQoMCwgInVua25vd24gRExNIG1vZGUgJWQiLCBkbG1tb2RlKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qIEEgbG9jayBwbGFjZWQgb24gdGhpcyBxdWV1ZSBpcyByZS1zdWJtaXR0ZWQgdG8gRExNIGFzIHNvb24gYXMgdGhlIGxvY2tfZGxtCi0gICB0aHJlYWQgZ2V0cyB0byBpdC4gKi8KLQotc3RhdGljIHZvaWQgcXVldWVfc3VibWl0KHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmxwLT5kZWxheV9saXN0LCAmbHMtPnN1Ym1pdCk7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQl3YWtlX3VwKCZscy0+dGhyZWFkX3dhaXQpOwotfQotCi1zdGF0aWMgdm9pZCB3YWtlX3VwX2FzdChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQljbGVhcl9iaXQoTEZMX0FTVF9XQUlULCAmbHAtPmZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCXdha2VfdXBfYml0KCZscC0+ZmxhZ3MsIExGTF9BU1RfV0FJVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fZGVsZXRlX2xwKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmbHAtPmRlbGF5X2xpc3QpKQotCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JbHMtPmFsbF9sb2Nrc19jb3VudC0tOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQlrZnJlZShscCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fcXVldWVfZGVsYXllZChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZscC0+ZGVsYXlfbGlzdCwgJmxzLT5kZWxheWVkKTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2NvbXBsZXRlKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQlzdHJ1Y3QgbG1fYXN5bmNfY2IgYWNiOwotCi0JbWVtc2V0KCZhY2IsIDAsIHNpemVvZihhY2IpKTsKLQotCWlmIChscC0+bGtzYi5zYl9zdGF0dXMgPT0gLURMTV9FQ0FOQ0VMKSB7Ci0JCWxvZ19pbmZvKCJjb21wbGV0ZSBkbG0gY2FuY2VsICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJIAkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJIGxwLT5mbGFncyk7Ci0KLQkJbHAtPnJlcSA9IGxwLT5jdXI7Ci0JCWFjYi5sY19yZXQgfD0gTE1fT1VUX0NBTkNFTEVEOwotCQlpZiAobHAtPmN1ciA9PSBETE1fTE9DS19JVikKLQkJCWxwLT5sa3NiLnNiX2xraWQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9ETE1fVU5MT0NLLCAmbHAtPmZsYWdzKSkgewotCQlpZiAobHAtPmxrc2Iuc2Jfc3RhdHVzICE9IC1ETE1fRVVOTE9DSykgewotCQkJbG9nX2luZm8oInVubG9jayBzYl9zdGF0dXMgJWQgJXgsJWxseCBmbGFncyAlbHgiLAotCQkJCSBscC0+bGtzYi5zYl9zdGF0dXMsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsCi0JCQkJIGxwLT5mbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlscC0+Y3VyID0gRExNX0xPQ0tfSVY7Ci0JCWxwLT5yZXEgPSBETE1fTE9DS19JVjsKLQkJbHAtPmxrc2Iuc2JfbGtpZCA9IDA7Ci0KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfVU5MT0NLX0RFTEVURSwgJmxwLT5mbGFncykpIHsKLQkJCWdkbG1fZGVsZXRlX2xwKGxwKTsKLQkJCXJldHVybjsKLQkJfQotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobHAtPmxrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX1ZBTE5PVFZBTElEKQotCQltZW1zZXQobHAtPmxrc2Iuc2JfbHZicHRyLCAwLCBHRExNX0xWQl9TSVpFKTsKLQotCWlmIChscC0+bGtzYi5zYl9mbGFncyAmIERMTV9TQkZfQUxUTU9ERSkgewotCQlpZiAobHAtPnJlcSA9PSBETE1fTE9DS19QUikKLQkJCWxwLT5yZXEgPSBETE1fTE9DS19DVzsKLQkJZWxzZSBpZiAobHAtPnJlcSA9PSBETE1fTE9DS19DVykKLQkJCWxwLT5yZXEgPSBETE1fTE9DS19QUjsKLQl9Ci0KLQkvKgotCSAqIEEgY2FuY2VsZWQgbG9jayByZXF1ZXN0LiAgVGhlIGxvY2sgd2FzIGp1c3QgdGFrZW4gb2ZmIHRoZSBkZWxheWVkCi0JICogbGlzdCBhbmQgd2FzIG5ldmVyIGV2ZW4gc3VibWl0dGVkIHRvIGRsbS4KLQkgKi8KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX0NBTkNFTCwgJmxwLT5mbGFncykpIHsKLQkJbG9nX2luZm8oImNvbXBsZXRlIGludGVybmFsIGNhbmNlbCAleCwlbGx4IiwKLQkJIAkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQkJbHAtPnJlcSA9IGxwLT5jdXI7Ci0JCWFjYi5sY19yZXQgfD0gTE1fT1VUX0NBTkNFTEVEOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKgotCSAqIEFuIGVycm9yIG9jY3VyZWQuCi0JICovCi0KLQlpZiAobHAtPmxrc2Iuc2Jfc3RhdHVzKSB7Ci0JCS8qIGEgIm5vcm1hbCIgZXJyb3IgKi8KLQkJaWYgKChscC0+bGtzYi5zYl9zdGF0dXMgPT0gLUVBR0FJTikgJiYKLQkJICAgIChscC0+bGtmICYgRExNX0xLRl9OT1FVRVVFKSkgewotCQkJbHAtPnJlcSA9IGxwLT5jdXI7Ci0JCQlpZiAobHAtPmN1ciA9PSBETE1fTE9DS19JVikKLQkJCQlscC0+bGtzYi5zYl9sa2lkID0gMDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogdGhpcyBjb3VsZCBvbmx5IGhhcHBlbiB3aXRoIGNhbmNlbHMgSSB0aGluayAqLwotCQlsb2dfaW5mbygiYXN0IHNiX3N0YXR1cyAlZCAleCwlbGx4IGZsYWdzICVseCIsCi0JCQkgbHAtPmxrc2Iuc2Jfc3RhdHVzLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsCi0JCQkgbHAtPmZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogVGhpcyBpcyBhbiBBU1QgZm9yIGFuIEVYLT5FWCBjb252ZXJzaW9uIGZvciBzeW5jX2x2YiBmcm9tIEdGUy4KLQkgKi8KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX1NZTkNfTFZCLCAmbHAtPmZsYWdzKSkgewotCQl3YWtlX3VwX2FzdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEEgbG9jayBoYXMgYmVlbiBkZW1vdGVkIHRvIE5MIGJlY2F1c2UgaXQgaW5pdGlhbGx5IGNvbXBsZXRlZCBkdXJpbmcKLQkgKiBCTE9DS19MT0NLUy4gIE5vdyBpdCBtdXN0IGJlIHJlcXVlc3RlZCBpbiB0aGUgb3JpZ2luYWxseSByZXF1ZXN0ZWQKLQkgKiBtb2RlLgotCSAqLwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfUkVSRVFVRVNULCAmbHAtPmZsYWdzKSkgewotCQlnZGxtX2Fzc2VydChscC0+cmVxID09IERMTV9MT0NLX05MLCAiJXgsJWxseCIsCi0JCQkgICAgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQkJZ2RsbV9hc3NlcnQobHAtPnByZXZfcmVxID4gRExNX0xPQ0tfTkwsICIleCwlbGx4IiwKLQkJCSAgICBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCi0JCWxwLT5jdXIgPSBETE1fTE9DS19OTDsKLQkJbHAtPnJlcSA9IGxwLT5wcmV2X3JlcTsKLQkJbHAtPnByZXZfcmVxID0gRExNX0xPQ0tfSVY7Ci0JCWxwLT5sa2YgJj0gfkRMTV9MS0ZfQ09OVkRFQURMSzsKLQotCQlzZXRfYml0KExGTF9OT0NBQ0hFLCAmbHAtPmZsYWdzKTsKLQotCQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSAmJgotCQkgICAgIXRlc3RfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKSkKLQkJCWdkbG1fcXVldWVfZGVsYXllZChscCk7Ci0JCWVsc2UKLQkJCXF1ZXVlX3N1Ym1pdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEEgcmVxdWVzdCBpcyBncmFudGVkIGR1cmluZyBkbG0gcmVjb3ZlcnkuICBJdCBtYXkgYmUgZ3JhbnRlZAotCSAqIGJlY2F1c2UgdGhlIGxvY2tzIG9mIGEgZmFpbGVkIG5vZGUgd2VyZSBjbGVhcmVkLiAgSW4gdGhhdCBjYXNlLAotCSAqIHRoZXJlIG1heSBiZSBpbmNvbnNpc3RlbnQgZGF0YSBiZW5lYXRoIHRoaXMgbG9jayBhbmQgd2UgbXVzdCB3YWl0Ci0JICogZm9yIHJlY292ZXJ5IHRvIGNvbXBsZXRlIHRvIHVzZSBpdC4gIFdoZW4gZ2ZzIHJlY292ZXJ5IGlzIGRvbmUgdGhpcwotCSAqIGdyYW50ZWQgbG9jayB3aWxsIGJlIGNvbnZlcnRlZCB0byBOTCBhbmQgdGhlbiByZWFjcXVpcmVkIGluIHRoaXMKLQkgKiBncmFudGVkIHN0YXRlLgotCSAqLwotCi0JaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKSAmJgotCSAgICBscC0+cmVxICE9IERMTV9MT0NLX05MKSB7Ci0KLQkJbHAtPmN1ciA9IGxwLT5yZXE7Ci0JCWxwLT5wcmV2X3JlcSA9IGxwLT5yZXE7Ci0JCWxwLT5yZXEgPSBETE1fTE9DS19OTDsKLQkJbHAtPmxrZiB8PSBETE1fTEtGX0NPTlZFUlQ7Ci0JCWxwLT5sa2YgJj0gfkRMTV9MS0ZfQ09OVkRFQURMSzsKLQotCQlsb2dfZGVidWcoInJlcmVxICV4LCVsbHggaWQgJXggJWQsJWQiLAotCQkJICBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJICBscC0+bGtzYi5zYl9sa2lkLCBscC0+Y3VyLCBscC0+cmVxKTsKLQotCQlzZXRfYml0KExGTF9SRVJFUVVFU1QsICZscC0+ZmxhZ3MpOwotCQlxdWV1ZV9zdWJtaXQobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBETE0gZGVtb3RlZCB0aGUgbG9jayB0byBOTCBiZWZvcmUgaXQgd2FzIGdyYW50ZWQgc28gR0ZTIG11c3QgYmUKLQkgKiB0b2xkIGl0IGNhbm5vdCBjYWNoZSBkYXRhIGZvciB0aGlzIGxvY2suCi0JICovCi0KLQlpZiAobHAtPmxrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX0RFTU9URUQpCi0JCXNldF9iaXQoTEZMX05PQ0FDSEUsICZscC0+ZmxhZ3MpOwotCi1vdXQ6Ci0JLyoKLQkgKiBUaGlzIGlzIGFuIGludGVybmFsIGxvY2tfZGxtIGxvY2sKLQkgKi8KLQotCWlmICh0ZXN0X2JpdChMRkxfSU5MT0NLLCAmbHAtPmZsYWdzKSkgewotCQljbGVhcl9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpOwotCQlscC0+Y3VyID0gbHAtPnJlcTsKLQkJd2FrZV91cF9hc3QobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBOb3JtYWwgY29tcGxldGlvbiBvZiBhIGxvY2sgcmVxdWVzdC4gIFRlbGwgR0ZTIGl0IG5vdyBoYXMgdGhlIGxvY2suCi0JICovCi0KLQljbGVhcl9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpOwotCWxwLT5jdXIgPSBscC0+cmVxOwotCi0JYWNiLmxjX25hbWUgPSBscC0+bG9ja25hbWU7Ci0JYWNiLmxjX3JldCB8PSBnZGxtX21ha2VfbG1zdGF0ZShscC0+Y3VyKTsKLQotCWxzLT5mc2NiKGxzLT5zZHAsIExNX0NCX0FTWU5DLCAmYWNiKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9hc3Qodm9pZCAqYXN0YXJnKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gYXN0YXJnOwotCWNsZWFyX2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQlwcm9jZXNzX2NvbXBsZXRlKGxwKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19ibG9ja2luZyhzdHJ1Y3QgZ2RsbV9sb2NrICpscCwgaW50IGJhc3RfbW9kZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JdW5zaWduZWQgaW50IGNiID0gMDsKLQotCXN3aXRjaCAoZ2RsbV9tYWtlX2xtc3RhdGUoYmFzdF9tb2RlKSkgewotCWNhc2UgTE1fU1RfRVhDTFVTSVZFOgotCQljYiA9IExNX0NCX05FRURfRTsKLQkJYnJlYWs7Ci0JY2FzZSBMTV9TVF9ERUZFUlJFRDoKLQkJY2IgPSBMTV9DQl9ORUVEX0Q7Ci0JCWJyZWFrOwotCWNhc2UgTE1fU1RfU0hBUkVEOgotCQljYiA9IExNX0NCX05FRURfUzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZ2RsbV9hc3NlcnQoMCwgInVua25vd24gYmFzdCBtb2RlICV1IiwgYmFzdF9tb2RlKTsKLQl9Ci0KLQlscy0+ZnNjYihscy0+c2RwLCBjYiwgJmxwLT5sb2NrbmFtZSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgZ2RsbV9iYXN0KHZvaWQgKmFzdGFyZywgaW50IG1vZGUpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBhc3Rhcmc7Ci0KLQlpZiAoIW1vZGUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibG9ja19kbG06IGJhc3QgbW9kZSB6ZXJvICV4LCVsbHhcbiIsCi0JCQlscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcm9jZXNzX2Jsb2NraW5nKGxwLCBtb2RlKTsKLX0KLQotLyogY29udmVydCBnZnMgbG9jay1zdGF0ZSB0byBkbG0gbG9jay1tb2RlICovCi0KLXN0YXRpYyBzMTYgbWFrZV9tb2RlKHMxNiBsbXN0YXRlKQotewotCXN3aXRjaCAobG1zdGF0ZSkgewotCWNhc2UgTE1fU1RfVU5MT0NLRUQ6Ci0JCXJldHVybiBETE1fTE9DS19OTDsKLQljYXNlIExNX1NUX0VYQ0xVU0lWRToKLQkJcmV0dXJuIERMTV9MT0NLX0VYOwotCWNhc2UgTE1fU1RfREVGRVJSRUQ6Ci0JCXJldHVybiBETE1fTE9DS19DVzsKLQljYXNlIExNX1NUX1NIQVJFRDoKLQkJcmV0dXJuIERMTV9MT0NLX1BSOwotCX0KLQlnZGxtX2Fzc2VydCgwLCAidW5rbm93biBMTSBzdGF0ZSAlZCIsIGxtc3RhdGUpOwotCXJldHVybiAtMTsKLX0KLQotCi0vKiB2ZXJpZnkgYWdyZWVtZW50IHdpdGggR0ZTIG9uIHRoZSBjdXJyZW50IGxvY2sgc3RhdGUsIE5COiBETE1fTE9DS19OTCBhbmQKLSAgIERMTV9MT0NLX0lWIGFyZSBib3RoIGNvbnNpZGVyZWQgTE1fU1RfVU5MT0NLRUQgYnkgR0ZTLiAqLwotCi1zdGF0aWMgdm9pZCBjaGVja19jdXJfc3RhdGUoc3RydWN0IGdkbG1fbG9jayAqbHAsIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpCi17Ci0JczE2IGN1ciA9IG1ha2VfbW9kZShjdXJfc3RhdGUpOwotCWlmIChscC0+Y3VyICE9IERMTV9MT0NLX0lWKQotCQlnZGxtX2Fzc2VydChscC0+Y3VyID09IGN1ciwgIiVkLCAlZCIsIGxwLT5jdXIsIGN1cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1ha2VfZmxhZ3Moc3RydWN0IGdkbG1fbG9jayAqbHAsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGdmc19mbGFncywKLQkJCQkgICAgICBzMTYgY3VyLCBzMTYgcmVxKQotewotCXVuc2lnbmVkIGludCBsa2YgPSAwOwotCi0JaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZKQotCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOwotCi0JaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZXzFDQikgewotCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOwotCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFQkFTVDsKLQl9Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19QUklPUklUWSkgewotCQlsa2YgfD0gRExNX0xLRl9OT09SREVSOwotCQlsa2YgfD0gRExNX0xLRl9IRUFEUVVFOwotCX0KLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX0FOWSkgewotCQlpZiAocmVxID09IERMTV9MT0NLX1BSKQotCQkJbGtmIHw9IERMTV9MS0ZfQUxUQ1c7Ci0JCWVsc2UgaWYgKHJlcSA9PSBETE1fTE9DS19DVykKLQkJCWxrZiB8PSBETE1fTEtGX0FMVFBSOwotCX0KLQotCWlmIChscC0+bGtzYi5zYl9sa2lkICE9IDApIHsKLQkJbGtmIHw9IERMTV9MS0ZfQ09OVkVSVDsKLQl9Ci0KLQlpZiAobHAtPmx2YikKLQkJbGtmIHw9IERMTV9MS0ZfVkFMQkxLOwotCi0JcmV0dXJuIGxrZjsKLX0KLQotLyogbWFrZV9zdHJuYW1lIC0gY29udmVydCBHRlMgbG9jayBudW1iZXJzIHRvIGEgc3RyaW5nICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX3N0cm5hbWUoY29uc3Qgc3RydWN0IGxtX2xvY2tuYW1lICpsb2NrbmFtZSwKLQkJCQlzdHJ1Y3QgZ2RsbV9zdHJuYW1lICpzdHIpCi17Ci0Jc3ByaW50ZihzdHItPm5hbWUsICIlOHglMTZsbHgiLCBsb2NrbmFtZS0+bG5fdHlwZSwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsb2NrbmFtZS0+bG5fbnVtYmVyKTsKLQlzdHItPm5hbWVsZW4gPSBHRExNX1NUUk5BTUVfQllURVM7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9jcmVhdGVfbHAoc3RydWN0IGdkbG1fbHMgKmxzLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgIHN0cnVjdCBnZGxtX2xvY2sgKipscHApCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHA7Ci0KLQlscCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZGxtX2xvY2spLCBHRlBfTk9GUyk7Ci0JaWYgKCFscCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlscC0+bG9ja25hbWUgPSAqbmFtZTsKLQltYWtlX3N0cm5hbWUobmFtZSwgJmxwLT5zdHJuYW1lKTsKLQlscC0+bHMgPSBsczsKLQlscC0+Y3VyID0gRExNX0xPQ0tfSVY7Ci0JSU5JVF9MSVNUX0hFQUQoJmxwLT5kZWxheV9saXN0KTsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWxzLT5hbGxfbG9ja3NfY291bnQrKzsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0JKmxwcCA9IGxwOwotCXJldHVybiAwOwotfQotCi1pbnQgZ2RsbV9nZXRfbG9jayh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICB2b2lkICoqbG9ja3ApCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHA7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZGxtX2NyZWF0ZV9scChsb2Nrc3BhY2UsIG5hbWUsICZscCk7Ci0KLQkqbG9ja3AgPSBscDsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2RsbV9wdXRfbG9jayh2b2lkICpsb2NrKQotewotCWdkbG1fZGVsZXRlX2xwKGxvY2spOwotfQotCi11bnNpZ25lZCBpbnQgZ2RsbV9kb19sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQlpbnQgZXJyb3IsIGJhc3QgPSAxOwotCi0JLyoKLQkgKiBXaGVuIHJlY292ZXJ5IGlzIGluIHByb2dyZXNzLCBkZWxheSBsb2NrIHJlcXVlc3RzIGZvciBzdWJtaXNzaW9uCi0JICogb25jZSByZWNvdmVyeSBpcyBkb25lLiAgUmVxdWVzdHMgZm9yIHJlY292ZXJ5IChOT0VYUCkgYW5kIHVubG9ja3MKLQkgKiBjYW4gcGFzcy4KLQkgKi8KLQotCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpICYmCi0JICAgICF0ZXN0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncykgJiYgbHAtPnJlcSAhPSBETE1fTE9DS19OTCkgewotCQlnZGxtX3F1ZXVlX2RlbGF5ZWQobHApOwotCQlyZXR1cm4gTE1fT1VUX0FTWU5DOwotCX0KLQotCS8qCi0JICogU3VibWl0IHRoZSBhY3R1YWwgbG9jayByZXF1ZXN0LgotCSAqLwotCi0JaWYgKHRlc3RfYml0KExGTF9OT0JBU1QsICZscC0+ZmxhZ3MpKQotCQliYXN0ID0gMDsKLQotCXNldF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0KLQlsb2dfZGVidWcoImxrICV4LCVsbHggaWQgJXggJWQsJWQgJXgiLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGxwLT5sa3NiLnNiX2xraWQsCi0JCSAgbHAtPmN1ciwgbHAtPnJlcSwgbHAtPmxrZik7Ci0KLQllcnJvciA9IGRsbV9sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBscC0+cmVxLCAmbHAtPmxrc2IsIGxwLT5sa2YsCi0JCQkgbHAtPnN0cm5hbWUubmFtZSwgbHAtPnN0cm5hbWUubmFtZWxlbiwgMCwgZ2RsbV9hc3QsCi0JCQkgbHAsIGJhc3QgPyBnZGxtX2Jhc3QgOiBOVUxMKTsKLQotCWlmICgoZXJyb3IgPT0gLUVBR0FJTikgJiYgKGxwLT5sa2YgJiBETE1fTEtGX05PUVVFVUUpKSB7Ci0JCWxwLT5sa3NiLnNiX3N0YXR1cyA9IC1FQUdBSU47Ci0JCWdkbG1fYXN0KGxwKTsKLQkJZXJyb3IgPSAwOwotCX0KLQotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoIiVzOiBnZGxtX2xvY2sgJXgsJWxseCBlcnI9JWQgY3VyPSVkIHJlcT0lZCBsa2Y9JXggIgotCQkJICAiZmxhZ3M9JWx4IiwgbHMtPmZzbmFtZSwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgZXJyb3IsCi0JCQkgIGxwLT5jdXIsIGxwLT5yZXEsIGxwLT5sa2YsIGxwLT5mbGFncyk7Ci0JCXJldHVybiBMTV9PVVRfRVJST1I7Ci0JfQotCXJldHVybiBMTV9PVVRfQVNZTkM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2RsbV9kb191bmxvY2soc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCXVuc2lnbmVkIGludCBsa2YgPSAwOwotCWludCBlcnJvcjsKLQotCXNldF9iaXQoTEZMX0RMTV9VTkxPQ0ssICZscC0+ZmxhZ3MpOwotCXNldF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0KLQlpZiAobHAtPmx2YikKLQkJbGtmID0gRExNX0xLRl9WQUxCTEs7Ci0KLQlsb2dfZGVidWcoInVuICV4LCVsbHggJXggJWQgJXgiLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsCi0JCSAgbHAtPmxrc2Iuc2JfbGtpZCwgbHAtPmN1ciwgbGtmKTsKLQotCWVycm9yID0gZGxtX3VubG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbHAtPmxrc2Iuc2JfbGtpZCwgbGtmLCBOVUxMLCBscCk7Ci0KLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCIlczogZ2RsbV91bmxvY2sgJXgsJWxseCBlcnI9JWQgY3VyPSVkIHJlcT0lZCBsa2Y9JXggIgotCQkJICAiZmxhZ3M9JWx4IiwgbHMtPmZzbmFtZSwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgZXJyb3IsCi0JCQkgIGxwLT5jdXIsIGxwLT5yZXEsIGxwLT5sa2YsIGxwLT5mbGFncyk7Ci0JCXJldHVybiBMTV9PVVRfRVJST1I7Ci0JfQotCXJldHVybiBMTV9PVVRfQVNZTkM7Ci19Ci0KLXVuc2lnbmVkIGludCBnZGxtX2xvY2sodm9pZCAqbG9jaywgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSwKLQkJICAgICAgIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0KLQlpZiAocmVxX3N0YXRlID09IExNX1NUX1VOTE9DS0VEKQotCQlyZXR1cm4gZ2RsbV91bmxvY2sobG9jaywgY3VyX3N0YXRlKTsKLQotCWlmIChyZXFfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQpCi0JCXJldHVybiBnZGxtX3VubG9jayhsb2NrLCBjdXJfc3RhdGUpOwotCi0JY2xlYXJfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQlpZiAoZmxhZ3MgJiBMTV9GTEFHX05PRVhQKQotCQlzZXRfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKTsKLQotCWNoZWNrX2N1cl9zdGF0ZShscCwgY3VyX3N0YXRlKTsKLQlscC0+cmVxID0gbWFrZV9tb2RlKHJlcV9zdGF0ZSk7Ci0JbHAtPmxrZiA9IG1ha2VfZmxhZ3MobHAsIGZsYWdzLCBscC0+Y3VyLCBscC0+cmVxKTsKLQotCXJldHVybiBnZGxtX2RvX2xvY2sobHApOwotfQotCi11bnNpZ25lZCBpbnQgZ2RsbV91bmxvY2sodm9pZCAqbG9jaywgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0KLQljbGVhcl9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpOwotCWlmIChscC0+Y3VyID09IERMTV9MT0NLX0lWKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gZ2RsbV9kb191bmxvY2sobHApOwotfQotCi12b2lkIGdkbG1fY2FuY2VsKHZvaWQgKmxvY2spCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQlpbnQgZXJyb3IsIGRlbGF5X2xpc3QgPSAwOwotCi0JaWYgKHRlc3RfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JbG9nX2luZm8oImdkbG1fY2FuY2VsICV4LCVsbHggZmxhZ3MgJWx4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGxwLT5mbGFncyk7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmxwLT5kZWxheV9saXN0KSkgewotCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JCWRlbGF5X2xpc3QgPSAxOwotCX0KLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0JaWYgKGRlbGF5X2xpc3QpIHsKLQkJc2V0X2JpdChMRkxfQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQkJc2V0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQkJZ2RsbV9hc3QobHApOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChMRkxfRExNX1VOTE9DSywgJmxwLT5mbGFncykpIHsKLQkJbG9nX2luZm8oImdkbG1fY2FuY2VsIHNraXAgJXgsJWxseCBmbGFncyAlbHgiLAotCQkgCSBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGxwLT5mbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiB0aGUgbG9jayBpcyBibG9ja2VkIGluIHRoZSBkbG0gKi8KLQotCXNldF9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpOwotCXNldF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0KLQllcnJvciA9IGRsbV91bmxvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIGxwLT5sa3NiLnNiX2xraWQsIERMTV9MS0ZfQ0FOQ0VMLAotCQkJICAgTlVMTCwgbHApOwotCi0JbG9nX2luZm8oImdkbG1fY2FuY2VsIHJ2ICVkICV4LCVsbHggZmxhZ3MgJWx4IiwgZXJyb3IsCi0JCSBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgbHAtPmZsYWdzKTsKLQotCWlmIChlcnJvciA9PSAtRUJVU1kpCi0JCWNsZWFyX2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9hZGRfbHZiKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCWNoYXIgKmx2YjsKLQotCWx2YiA9IGt6YWxsb2MoR0RMTV9MVkJfU0laRSwgR0ZQX05PRlMpOwotCWlmICghbHZiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxwLT5sa3NiLnNiX2x2YnB0ciA9IGx2YjsKLQlscC0+bHZiID0gbHZiOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX2RlbF9sdmIoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Ja2ZyZWUobHAtPmx2Yik7Ci0JbHAtPmx2YiA9IE5VTEw7Ci0JbHAtPmxrc2Iuc2JfbHZicHRyID0gTlVMTDsKLX0KLQotc3RhdGljIGludCBnZGxtX2FzdF93YWl0KHZvaWQgKndvcmQpCi17Ci0Jc2NoZWR1bGUoKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBjYW4gZG8gYSBzeW5jaHJvbm91cyBkbG0gcmVxdWVzdCAocmVxdWlyaW5nIGEgbG9ja19kbG0gdGhyZWFkIHRvIGdldAotICAgdGhlIGNvbXBsZXRpb24pIGJlY2F1c2UgZ2ZzIHdvbid0IGNhbGwgaG9sZF9sdmIoKSBkdXJpbmcgYSBjYWxsYmFjayAoZnJvbQotICAgdGhlIGNvbnRleHQgb2YgYSBsb2NrX2RsbSB0aHJlYWQpLiAqLwotCi1zdGF0aWMgaW50IGhvbGRfbnVsbF9sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwbiA9IE5VTEw7Ci0JaW50IGVycm9yOwotCi0JaWYgKGxwLT5ob2xkX251bGwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibG9ja19kbG06IGx2YiBhbHJlYWR5IGhlbGRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQllcnJvciA9IGdkbG1fY3JlYXRlX2xwKGxwLT5scywgJmxwLT5sb2NrbmFtZSwgJmxwbik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCWxwbi0+bGtzYi5zYl9sdmJwdHIgPSBqdW5rX2x2YjsKLQlscG4tPmx2YiA9IGp1bmtfbHZiOwotCi0JbHBuLT5yZXEgPSBETE1fTE9DS19OTDsKLQlscG4tPmxrZiA9IERMTV9MS0ZfVkFMQkxLIHwgRExNX0xLRl9FWFBFRElURTsKLQlzZXRfYml0KExGTF9OT0JBU1QsICZscG4tPmZsYWdzKTsKLQlzZXRfYml0KExGTF9JTkxPQ0ssICZscG4tPmZsYWdzKTsKLQlzZXRfYml0KExGTF9BU1RfV0FJVCwgJmxwbi0+ZmxhZ3MpOwotCi0JZ2RsbV9kb19sb2NrKGxwbik7Ci0Jd2FpdF9vbl9iaXQoJmxwbi0+ZmxhZ3MsIExGTF9BU1RfV0FJVCwgZ2RsbV9hc3Rfd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCWVycm9yID0gbHBuLT5sa3NiLnNiX3N0YXR1czsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibG9ja19kbG06IGhvbGRfbnVsbF9sb2NrIGRsbSBlcnJvciAlZFxuIiwKLQkJICAgICAgIGVycm9yKTsKLQkJZ2RsbV9kZWxldGVfbHAobHBuKTsKLQkJbHBuID0gTlVMTDsKLQl9Ci1vdXQ6Ci0JbHAtPmhvbGRfbnVsbCA9IGxwbjsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIFRoaXMgY2Fubm90IGRvIGEgc3luY2hyb25vdXMgZGxtIHJlcXVlc3QgKHJlcXVpcmluZyBhIGxvY2tfZGxtIHRocmVhZCB0byBnZXQKLSAgIHRoZSBjb21wbGV0aW9uKSBiZWNhdXNlIGdmcyBtYXkgY2FsbCB1bmhvbGRfbHZiKCkgZHVyaW5nIGEgY2FsbGJhY2sgKGZyb20KLSAgIHRoZSBjb250ZXh0IG9mIGEgbG9ja19kbG0gdGhyZWFkKSB3aGljaCBjb3VsZCBjYXVzZSBhIGRlYWRsb2NrIHNpbmNlIHRoZQotICAgb3RoZXIgbG9ja19kbG0gdGhyZWFkIGNvdWxkIGJlIGVuZ2FnZWQgaW4gcmVjb3ZlcnkuICovCi0KLXN0YXRpYyB2b2lkIHVuaG9sZF9udWxsX2xvY2soc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHBuID0gbHAtPmhvbGRfbnVsbDsKLQotCWdkbG1fYXNzZXJ0KGxwbiwgIiV4LCVsbHgiLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JbHBuLT5sa3NiLnNiX2x2YnB0ciA9IE5VTEw7Ci0JbHBuLT5sdmIgPSBOVUxMOwotCXNldF9iaXQoTEZMX1VOTE9DS19ERUxFVEUsICZscG4tPmZsYWdzKTsKLQlnZGxtX2RvX3VubG9jayhscG4pOwotCWxwLT5ob2xkX251bGwgPSBOVUxMOwotfQotCi0vKiBBY3F1aXJlIGEgTkwgbG9jayBiZWNhdXNlIGdmcyByZXF1aXJlcyB0aGUgdmFsdWUgYmxvY2sgdG8gcmVtYWluCi0gICBpbnRhY3Qgb24gdGhlIHJlc291cmNlIHdoaWxlIHRoZSBsdmIgaXMgImhlbGQiIGV2ZW4gaWYgaXQncyBob2xkaW5nIG5vIGxvY2tzCi0gICBvbiB0aGUgcmVzb3VyY2UuICovCi0KLWludCBnZGxtX2hvbGRfbHZiKHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdkbG1fYWRkX2x2YihscCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQkqbHZicCA9IGxwLT5sdmI7Ci0KLQllcnJvciA9IGhvbGRfbnVsbF9sb2NrKGxwKTsKLQlpZiAoZXJyb3IpCi0JCWdkbG1fZGVsX2x2YihscCk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2RsbV91bmhvbGRfbHZiKHZvaWQgKmxvY2ssIGNoYXIgKmx2YikKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0KLQl1bmhvbGRfbnVsbF9sb2NrKGxwKTsKLQlnZGxtX2RlbF9sdmIobHApOwotfQotCi12b2lkIGdkbG1fc3VibWl0X2RlbGF5ZWQoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwLCAqc2FmZTsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShscCwgc2FmZSwgJmxzLT5kZWxheWVkLCBkZWxheV9saXN0KSB7Ci0JCWxpc3RfZGVsX2luaXQoJmxwLT5kZWxheV9saXN0KTsKLQkJbGlzdF9hZGRfdGFpbCgmbHAtPmRlbGF5X2xpc3QsICZscy0+c3VibWl0KTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQl3YWtlX3VwKCZscy0+dGhyZWFkX3dhaXQpOwotfQotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2tfZGxtLmggYi9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2tfZGxtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOThlN2MuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgTE9DS19ETE1fRE9UX0gKLSNkZWZpbmUgTE9DS19ETE1fRE9UX0gKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi0jaW5jbHVkZSA8bGludXgvZGxtLmg+Ci0jaW5jbHVkZSA8bGludXgvZGxtX3Bsb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+Ci0KLS8qCi0gKiBJbnRlcm5hbGx5LCB3ZSBwcmVmaXggdGhpbmdzIHdpdGggZ2RsbV8gYW5kIEdETE1fIChmb3IgZ2ZzLWRsbSkgc2luY2UgYQotICogcHJlZml4IG9mIGxvY2tfZGxtXyBnZXRzIGF3a3dhcmQuICBFeHRlcm5hbGx5LCBHRlMgcmVmZXJzIHRvIHRoaXMgbW9kdWxlCi0gKiBhcyAibG9ja19kbG0iLgotICovCi0KLSNkZWZpbmUgR0RMTV9TVFJOQU1FX0JZVEVTCTI0Ci0jZGVmaW5lIEdETE1fTFZCX1NJWkUJCTMyCi0jZGVmaW5lIEdETE1fRFJPUF9DT1VOVAkJMAotI2RlZmluZSBHRExNX0RST1BfUEVSSU9ECTYwCi0jZGVmaW5lIEdETE1fTkFNRV9MRU4JCTEyOAotCi0vKiBHRlMgdXNlcyAxMiBieXRlcyB0byBpZGVudGlmeSBhIHJlc291cmNlICgzMiBiaXQgdHlwZSArIDY0IGJpdCBudW1iZXIpLgotICAgV2Ugc3ByaW50ZiB0aGVzZSBudW1iZXJzIGludG8gYSAyNCBieXRlIHN0cmluZyBvZiBoZXggdmFsdWVzIHRvIG1ha2UgdGhlbQotICAgaHVtYW4tcmVhZGFibGUgKHRvIG1ha2UgZGVidWdnaW5nIHNpbXBsZXIuKSAqLwotCi1zdHJ1Y3QgZ2RsbV9zdHJuYW1lIHsKLQl1bnNpZ25lZCBjaGFyCQluYW1lW0dETE1fU1RSTkFNRV9CWVRFU107Ci0JdW5zaWduZWQgc2hvcnQJCW5hbWVsZW47Ci19OwotCi1lbnVtIHsKLQlERkxfQkxPQ0tfTE9DS1MJCT0gMCwKLQlERkxfU1BFQ1RBVE9SCQk9IDEsCi0JREZMX1dJVEhEUkFXCQk9IDIsCi19OwotCi1zdHJ1Y3QgZ2RsbV9scyB7Ci0JdTMyCQlpZDsKLQlpbnQJCQlqaWQ7Ci0JaW50CQkJZmlyc3Q7Ci0JaW50CQkJZmlyc3RfZG9uZTsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlzdHJ1Y3Qga29iamVjdAkJa29iajsKLQljaGFyCQkJY2x1c3Rlcm5hbWVbR0RMTV9OQU1FX0xFTl07Ci0JY2hhcgkJCWZzbmFtZVtHRExNX05BTUVfTEVOXTsKLQlpbnQJCQlmc2ZsYWdzOwotCWRsbV9sb2Nrc3BhY2VfdAkJKmRsbV9sb2Nrc3BhY2U7Ci0JbG1fY2FsbGJhY2tfdAkJZnNjYjsKLQlzdHJ1Y3QgZ2ZzMl9zYmQJCSpzZHA7Ci0JaW50CQkJcmVjb3Zlcl9qaWQ7Ci0JaW50CQkJcmVjb3Zlcl9qaWRfZG9uZTsKLQlpbnQJCQlyZWNvdmVyX2ppZF9zdGF0dXM7Ci0Jc3BpbmxvY2tfdAkJYXN5bmNfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWRlbGF5ZWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZAlzdWJtaXQ7Ci0JdTMyCQlhbGxfbG9ja3NfY291bnQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9jb250cm9sOwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOwotCXdhaXRfcXVldWVfaGVhZF90CXRocmVhZF93YWl0OwotfTsKLQotZW51bSB7Ci0JTEZMX05PQkxPQ0sJCT0gMCwKLQlMRkxfTk9DQUNIRQkJPSAxLAotCUxGTF9ETE1fVU5MT0NLCQk9IDIsCi0JTEZMX0RMTV9DQU5DRUwJCT0gMywKLQlMRkxfU1lOQ19MVkIJCT0gNCwKLQlMRkxfRk9SQ0VfUFJPTU9URQk9IDUsCi0JTEZMX1JFUkVRVUVTVAkJPSA2LAotCUxGTF9BQ1RJVkUJCT0gNywKLQlMRkxfSU5MT0NLCQk9IDgsCi0JTEZMX0NBTkNFTAkJPSA5LAotCUxGTF9OT0JBU1QJCT0gMTAsCi0JTEZMX0hFQURRVUUJCT0gMTEsCi0JTEZMX1VOTE9DS19ERUxFVEUJPSAxMiwKLQlMRkxfQVNUX1dBSVQJCT0gMTMsCi19OwotCi1zdHJ1Y3QgZ2RsbV9sb2NrIHsKLQlzdHJ1Y3QgZ2RsbV9scwkJKmxzOwotCXN0cnVjdCBsbV9sb2NrbmFtZQlsb2NrbmFtZTsKLQlzdHJ1Y3QgZ2RsbV9zdHJuYW1lCXN0cm5hbWU7Ci0JY2hhcgkJCSpsdmI7Ci0Jc3RydWN0IGRsbV9sa3NiCQlsa3NiOwotCi0JczE2CQkJY3VyOwotCXMxNgkJCXJlcTsKLQlzMTYJCQlwcmV2X3JlcTsKLQl1MzIJCQlsa2Y7CQkvKiBkbG0gZmxhZ3MgRExNX0xLRl8gKi8KLQl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvY2tfZGxtIGZsYWdzIExGTF8gKi8KLQotCXN0cnVjdCBsaXN0X2hlYWQJZGVsYXlfbGlzdDsJLyogZGVsYXllZCAqLwotCXN0cnVjdCBnZGxtX2xvY2sJKmhvbGRfbnVsbDsJLyogTkwgbG9jayBmb3IgaG9sZF9sdmIgKi8KLX07Ci0KLSNkZWZpbmUgZ2RsbV9hc3NlcnQoYXNzZXJ0aW9uLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAodW5saWtlbHkoIShhc3NlcnRpb24pKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlwcmludGsoS0VSTl9FTUVSRyAibG9ja19kbG06IGZhdGFsIGFzc2VydGlvbiBmYWlsZWQgXCIlc1wiXG4iIFwKLQkJCQkgICJsb2NrX2RsbTogICIgZm10ICJcbiIsICAgICAgICAgICAgICAgICAgICAgXAotCQkJCSAgI2Fzc2VydGlvbiwgIyNhcmdzKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCUJVRygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIGxvZ19wcmludChsZXYsIGZtdCwgYXJnLi4uKSBwcmludGsobGV2ICJsb2NrX2RsbTogIiBmbXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgbG9nX2luZm8oZm10LCBhcmcuLi4pICBsb2dfcHJpbnQoS0VSTl9JTkZPICwgZm10ICwgIyMgYXJnKQotI2RlZmluZSBsb2dfZXJyb3IoZm10LCBhcmcuLi4pIGxvZ19wcmludChLRVJOX0VSUiAsIGZtdCAsICMjIGFyZykKLSNpZmRlZiBMT0NLX0RMTV9MT0dfREVCVUcKLSNkZWZpbmUgbG9nX2RlYnVnKGZtdCwgYXJnLi4uKSBsb2dfcHJpbnQoS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIGxvZ19kZWJ1ZyhmbXQsIGFyZy4uLikKLSNlbmRpZgotCi0vKiBzeXNmcy5jICovCi0KLWludCBnZGxtX3N5c2ZzX2luaXQodm9pZCk7Ci12b2lkIGdkbG1fc3lzZnNfZXhpdCh2b2lkKTsKLWludCBnZGxtX2tvYmplY3Rfc2V0dXAoc3RydWN0IGdkbG1fbHMgKiwgc3RydWN0IGtvYmplY3QgKik7Ci12b2lkIGdkbG1fa29iamVjdF9yZWxlYXNlKHN0cnVjdCBnZGxtX2xzICopOwotCi0vKiB0aHJlYWQuYyAqLwotCi1pbnQgZ2RsbV9pbml0X3RocmVhZHMoc3RydWN0IGdkbG1fbHMgKik7Ci12b2lkIGdkbG1fcmVsZWFzZV90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICopOwotCi0vKiBsb2NrLmMgKi8KLQotdm9pZCBnZGxtX3N1Ym1pdF9kZWxheWVkKHN0cnVjdCBnZGxtX2xzICopOwotdW5zaWduZWQgaW50IGdkbG1fZG9fbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICopOwotCi1pbnQgZ2RsbV9nZXRfbG9jayh2b2lkICosIHN0cnVjdCBsbV9sb2NrbmFtZSAqLCB2b2lkICoqKTsKLXZvaWQgZ2RsbV9wdXRfbG9jayh2b2lkICopOwotdW5zaWduZWQgaW50IGdkbG1fbG9jayh2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotdW5zaWduZWQgaW50IGdkbG1fdW5sb2NrKHZvaWQgKiwgdW5zaWduZWQgaW50KTsKLXZvaWQgZ2RsbV9jYW5jZWwodm9pZCAqKTsKLWludCBnZGxtX2hvbGRfbHZiKHZvaWQgKiwgY2hhciAqKik7Ci12b2lkIGdkbG1fdW5ob2xkX2x2Yih2b2lkICosIGNoYXIgKik7Ci0KLS8qIG1vdW50LmMgKi8KLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIGdkbG1fb3BzOwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlhMDNhNy4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xvY2tfZGxtKHZvaWQpCi17Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX3JlZ2lzdGVyX2xvY2twcm90bygmZ2RsbV9vcHMpOwotCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJsb2NrX2RsbTogIGNhbid0IHJlZ2lzdGVyIHByb3RvY29sOiAlZFxuIiwKLQkJICAgICAgIGVycm9yKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCWVycm9yID0gZ2RsbV9zeXNmc19pbml0KCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8oJmdkbG1fb3BzKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIkxvY2tfRExNIChidWlsdCAlcyAlcykgaW5zdGFsbGVkXG4iLCBfX0RBVEVfXywgX19USU1FX18pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9sb2NrX2RsbSh2b2lkKQotewotCWdkbG1fc3lzZnNfZXhpdCgpOwotCWdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8oJmdkbG1fb3BzKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9sb2NrX2RsbSk7Ci1tb2R1bGVfZXhpdChleGl0X2xvY2tfZGxtKTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJHRlMgRExNIExvY2tpbmcgTW9kdWxlIik7Ci1NT0RVTEVfQVVUSE9SKCJSZWQgSGF0LCBJbmMuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbW91bnQuYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbW91bnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhN2ViNi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL21vdW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIGdkbG1fb3BzOwotCi0KLXN0YXRpYyBzdHJ1Y3QgZ2RsbV9scyAqaW5pdF9nZGxtKGxtX2NhbGxiYWNrX3QgY2IsIHN0cnVjdCBnZnMyX3NiZCAqc2RwLAotCQkJCSBpbnQgZmxhZ3MsIGNoYXIgKnRhYmxlX25hbWUpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzOwotCWNoYXIgYnVmWzI1Nl0sICpwOwotCi0JbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2RsbV9scyksIEdGUF9LRVJORUwpOwotCWlmICghbHMpCi0JCXJldHVybiBOVUxMOwotCi0JbHMtPmZzY2IgPSBjYjsKLQlscy0+c2RwID0gc2RwOwotCWxzLT5mc2ZsYWdzID0gZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2luaXQoJmxzLT5hc3luY19sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbHMtPmRlbGF5ZWQpOwotCUlOSVRfTElTVF9IRUFEKCZscy0+c3VibWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZscy0+dGhyZWFkX3dhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxzLT53YWl0X2NvbnRyb2wpOwotCWxzLT5qaWQgPSAtMTsKLQotCXN0cm5jcHkoYnVmLCB0YWJsZV9uYW1lLCAyNTYpOwotCWJ1ZlsyNTVdID0gJ1wwJzsKLQotCXAgPSBzdHJjaHIoYnVmLCAnOicpOwotCWlmICghcCkgewotCQlsb2dfaW5mbygiaW52YWxpZCB0YWJsZV9uYW1lIFwiJXNcIiIsIHRhYmxlX25hbWUpOwotCQlrZnJlZShscyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQkqcCA9ICdcMCc7Ci0JcCsrOwotCi0Jc3RybmNweShscy0+Y2x1c3Rlcm5hbWUsIGJ1ZiwgR0RMTV9OQU1FX0xFTik7Ci0Jc3RybmNweShscy0+ZnNuYW1lLCBwLCBHRExNX05BTUVfTEVOKTsKLQotCXJldHVybiBsczsKLX0KLQotc3RhdGljIGludCBtYWtlX2FyZ3Moc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpkYXRhX2FyZywgaW50ICpub2RpcikKLXsKLQljaGFyIGRhdGFbMjU2XTsKLQljaGFyICpvcHRpb25zLCAqeCwgKnk7Ci0JaW50IGVycm9yID0gMDsKLQotCW1lbXNldChkYXRhLCAwLCAyNTYpOwotCXN0cm5jcHkoZGF0YSwgZGF0YV9hcmcsIDI1NSk7Ci0KLQlpZiAoIXN0cmxlbihkYXRhKSkgewotCQlsb2dfZXJyb3IoIm5vIG1vdW50IG9wdGlvbnMsICh1KW1vdW50IGhlbHBlcnMgbm90IGluc3RhbGxlZCIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmb3IgKG9wdGlvbnMgPSBkYXRhOyAoeCA9IHN0cnNlcCgmb3B0aW9ucywgIjoiKSk7ICkgewotCQlpZiAoISp4KQotCQkJY29udGludWU7Ci0KLQkJeSA9IHN0cmNocih4LCAnPScpOwotCQlpZiAoeSkKLQkJCSp5KysgPSAwOwotCi0JCWlmICghc3RyY21wKHgsICJqaWQiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIGppZCIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNzY2FuZih5LCAiJXUiLCAmbHMtPmppZCk7Ci0KLQkJfSBlbHNlIGlmICghc3RyY21wKHgsICJmaXJzdCIpKSB7Ci0JCQlpZiAoIXkpIHsKLQkJCQlsb2dfZXJyb3IoIm5lZWQgYXJndW1lbnQgdG8gZmlyc3QiKTsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzc2NhbmYoeSwgIiV1IiwgJmxzLT5maXJzdCk7Ci0KLQkJfSBlbHNlIGlmICghc3RyY21wKHgsICJpZCIpKSB7Ci0JCQlpZiAoIXkpIHsKLQkJCQlsb2dfZXJyb3IoIm5lZWQgYXJndW1lbnQgdG8gaWQiKTsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzc2NhbmYoeSwgIiV1IiwgJmxzLT5pZCk7Ci0KLQkJfSBlbHNlIGlmICghc3RyY21wKHgsICJub2RpciIpKSB7Ci0JCQlpZiAoIXkpIHsKLQkJCQlsb2dfZXJyb3IoIm5lZWQgYXJndW1lbnQgdG8gbm9kaXIiKTsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzc2NhbmYoeSwgIiV1Iiwgbm9kaXIpOwotCi0JCX0gZWxzZSB7Ci0JCQlsb2dfZXJyb3IoInVua29ud24gb3B0aW9uOiAlcyIsIHgpOwotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9tb3VudChjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQlsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQlzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKQotewotCXN0cnVjdCBnZGxtX2xzICpsczsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNLCBub2RpciA9IDA7Ci0KLQlpZiAobWluX2x2Yl9zaXplID4gR0RMTV9MVkJfU0laRSkKLQkJZ290byBvdXQ7Ci0KLQlscyA9IGluaXRfZ2RsbShjYiwgY2JfZGF0YSwgZmxhZ3MsIHRhYmxlX25hbWUpOwotCWlmICghbHMpCi0JCWdvdG8gb3V0OwotCi0JZXJyb3IgPSBtYWtlX2FyZ3MobHMsIGhvc3RfZGF0YSwgJm5vZGlyKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JZXJyb3IgPSBnZGxtX2luaXRfdGhyZWFkcyhscyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9mcmVlOwotCi0JZXJyb3IgPSBnZGxtX2tvYmplY3Rfc2V0dXAobHMsIGZza29iaik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF90aHJlYWQ7Ci0KLQllcnJvciA9IGRsbV9uZXdfbG9ja3NwYWNlKGxzLT5mc25hbWUsIHN0cmxlbihscy0+ZnNuYW1lKSwKLQkJCQkgICZscy0+ZGxtX2xvY2tzcGFjZSwKLQkJCQkgIERMTV9MU0ZMX0ZTIHwgRExNX0xTRkxfTkVXRVhDTCB8Ci0JCQkJICAobm9kaXIgPyBETE1fTFNGTF9OT0RJUiA6IDApLAotCQkJCSAgR0RMTV9MVkJfU0laRSk7Ci0JaWYgKGVycm9yKSB7Ci0JCWxvZ19lcnJvcigiZGxtX25ld19sb2Nrc3BhY2UgZXJyb3IgJWQiLCBlcnJvcik7Ci0JCWdvdG8gb3V0X2tvYmo7Ci0JfQotCi0JbG9ja3N0cnVjdC0+bHNfamlkID0gbHMtPmppZDsKLQlsb2Nrc3RydWN0LT5sc19maXJzdCA9IGxzLT5maXJzdDsKLQlsb2Nrc3RydWN0LT5sc19sb2Nrc3BhY2UgPSBsczsKLQlsb2Nrc3RydWN0LT5sc19vcHMgPSAmZ2RsbV9vcHM7Ci0JbG9ja3N0cnVjdC0+bHNfZmxhZ3MgPSAwOwotCWxvY2tzdHJ1Y3QtPmxzX2x2Yl9zaXplID0gR0RMTV9MVkJfU0laRTsKLQlyZXR1cm4gMDsKLQotb3V0X2tvYmo6Ci0JZ2RsbV9rb2JqZWN0X3JlbGVhc2UobHMpOwotb3V0X3RocmVhZDoKLQlnZGxtX3JlbGVhc2VfdGhyZWFkcyhscyk7Ci1vdXRfZnJlZToKLQlrZnJlZShscyk7Ci1vdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX3VubW91bnQodm9pZCAqbG9ja3NwYWNlKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQotCWxvZ19kZWJ1ZygidW5tb3VudCBmbGFncyAlbHgiLCBscy0+ZmxhZ3MpOwotCi0JLyogRklYTUU6IHNlcmlhbGl6ZSB1bm1vdW50IGFuZCB3aXRoZHJhdyBpbiBjYXNlIHRoZXkKLQkgICBoYXBwZW4gYXQgb25jZS4gIEFsc28sIGlmIHVubW91bnQgZm9sbG93cyB3aXRoZHJhdywKLQkgICB3YWl0IGZvciB3aXRoZHJhdyB0byBmaW5pc2guICovCi0KLQlpZiAodGVzdF9iaXQoREZMX1dJVEhEUkFXLCAmbHMtPmZsYWdzKSkKLQkJZ290byBvdXQ7Ci0KLQlnZGxtX2tvYmplY3RfcmVsZWFzZShscyk7Ci0JZGxtX3JlbGVhc2VfbG9ja3NwYWNlKGxzLT5kbG1fbG9ja3NwYWNlLCAyKTsKLQlnZGxtX3JlbGVhc2VfdGhyZWFkcyhscyk7Ci0JQlVHX09OKGxzLT5hbGxfbG9ja3NfY291bnQpOwotb3V0OgotCWtmcmVlKGxzKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9yZWNvdmVyeV9kb25lKHZvaWQgKmxvY2tzcGFjZSwgdW5zaWduZWQgaW50IGppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWVzc2FnZSkKLXsKLQljaGFyIGVudl9qaWRbMjBdOwotCWNoYXIgZW52X3N0YXR1c1syMF07Ci0JY2hhciAqZW52cFtdID0geyBlbnZfamlkLCBlbnZfc3RhdHVzLCBOVUxMIH07Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCWxzLT5yZWNvdmVyX2ppZF9kb25lID0gamlkOwotCWxzLT5yZWNvdmVyX2ppZF9zdGF0dXMgPSBtZXNzYWdlOwotCXNwcmludGYoZW52X2ppZCwgIkpJRD0lZCIsIGppZCk7Ci0Jc3ByaW50ZihlbnZfc3RhdHVzLCAiUkVDT1ZFUlk9JXMiLAotCQltZXNzYWdlID09IExNX1JEX1NVQ0NFU1MgPyAiRG9uZSIgOiAiRmFpbGVkIik7Ci0Ja29iamVjdF91ZXZlbnRfZW52KCZscy0+a29iaiwgS09CSl9DSEFOR0UsIGVudnApOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX290aGVyc19tYXlfbW91bnQodm9pZCAqbG9ja3NwYWNlKQotewotCWNoYXIgKm1lc3NhZ2UgPSAiRklSU1RNT1VOVD1Eb25lIjsKLQljaGFyICplbnZwW10gPSB7IG1lc3NhZ2UsIE5VTEwgfTsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0JbHMtPmZpcnN0X2RvbmUgPSAxOwotCWtvYmplY3RfdWV2ZW50X2VudigmbHMtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKLX0KLQotLyogVXNlcnNwYWNlIGdldHMgdGhlIG9mZmxpbmUgdWV2ZW50LCBibG9ja3MgbmV3IGdmcyBsb2NrcyBvbgotICAgb3RoZXIgbW91bnRlcnMsIGFuZCBsZXRzIHVzIGtub3cgKHNldHMgV0lUSERSQVcgZmxhZykuICBUaGVuLAotICAgdXNlcnNwYWNlIGxlYXZlcyB0aGUgbW91bnQgZ3JvdXAgd2hpbGUgd2UgbGVhdmUgdGhlIGxvY2tzcGFjZS4gKi8KLQotc3RhdGljIHZvaWQgZ2RsbV93aXRoZHJhdyh2b2lkICpsb2Nrc3BhY2UpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCi0Ja29iamVjdF91ZXZlbnQoJmxzLT5rb2JqLCBLT0JKX09GRkxJTkUpOwotCi0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGxzLT53YWl0X2NvbnRyb2wsCi0JCQkJIHRlc3RfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncykpOwotCi0JZGxtX3JlbGVhc2VfbG9ja3NwYWNlKGxzLT5kbG1fbG9ja3NwYWNlLCAyKTsKLQlnZGxtX3JlbGVhc2VfdGhyZWFkcyhscyk7Ci0JZ2RsbV9rb2JqZWN0X3JlbGVhc2UobHMpOwotfQotCi1zdGF0aWMgaW50IGdkbG1fcGxvY2sodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0JcmV0dXJuIGRsbV9wb3NpeF9sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBuYW1lLT5sbl9udW1iZXIsIGZpbGUsIGNtZCwgZmwpOwotfQotCi1zdGF0aWMgaW50IGdkbG1fcHVubG9jayh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0JcmV0dXJuIGRsbV9wb3NpeF91bmxvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIG5hbWUtPmxuX251bWJlciwgZmlsZSwgZmwpOwotfQotCi1zdGF0aWMgaW50IGdkbG1fcGxvY2tfZ2V0KHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCXJldHVybiBkbG1fcG9zaXhfZ2V0KGxzLT5kbG1fbG9ja3NwYWNlLCBuYW1lLT5sbl9udW1iZXIsIGZpbGUsIGZsKTsKLX0KLQotY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2RsbV9vcHMgPSB7Ci0JLmxtX3Byb3RvX25hbWUgPSAibG9ja19kbG0iLAotCS5sbV9tb3VudCA9IGdkbG1fbW91bnQsCi0JLmxtX290aGVyc19tYXlfbW91bnQgPSBnZGxtX290aGVyc19tYXlfbW91bnQsCi0JLmxtX3VubW91bnQgPSBnZGxtX3VubW91bnQsCi0JLmxtX3dpdGhkcmF3ID0gZ2RsbV93aXRoZHJhdywKLQkubG1fZ2V0X2xvY2sgPSBnZGxtX2dldF9sb2NrLAotCS5sbV9wdXRfbG9jayA9IGdkbG1fcHV0X2xvY2ssCi0JLmxtX2xvY2sgPSBnZGxtX2xvY2ssCi0JLmxtX3VubG9jayA9IGdkbG1fdW5sb2NrLAotCS5sbV9wbG9jayA9IGdkbG1fcGxvY2ssCi0JLmxtX3B1bmxvY2sgPSBnZGxtX3B1bmxvY2ssCi0JLmxtX3Bsb2NrX2dldCA9IGdkbG1fcGxvY2tfZ2V0LAotCS5sbV9jYW5jZWwgPSBnZGxtX2NhbmNlbCwKLQkubG1faG9sZF9sdmIgPSBnZGxtX2hvbGRfbHZiLAotCS5sbV91bmhvbGRfbHZiID0gZ2RsbV91bmhvbGRfbHZiLAotCS5sbV9yZWNvdmVyeV9kb25lID0gZ2RsbV9yZWNvdmVyeV9kb25lLAotCS5sbV9vd25lciA9IFRISVNfTU9EVUxFLAotfTsKLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9zeXNmcy5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9zeXNmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjdlZGNmLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1zdGF0aWMgc3NpemVfdCBwcm90b19uYW1lX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGdkbG1fb3BzLmxtX3Byb3RvX25hbWUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBibG9ja19zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXNzaXplX3QgcmV0OwotCWludCB2YWwgPSAwOwotCi0JaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncykpCi0JCXZhbCA9IDE7Ci0JcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBibG9ja19zdG9yZShzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzc2l6ZV90IHJldCA9IGxlbjsKLQlpbnQgdmFsOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOwotCi0JaWYgKHZhbCA9PSAxKQotCQlzZXRfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncyk7Ci0JZWxzZSBpZiAodmFsID09IDApIHsKLQkJY2xlYXJfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncyk7Ci0JCWdkbG1fc3VibWl0X2RlbGF5ZWQobHMpOwotCX0gZWxzZSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHdpdGhkcmF3X3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0Jc3NpemVfdCByZXQ7Ci0JaW50IHZhbCA9IDA7Ci0KLQlpZiAodGVzdF9iaXQoREZMX1dJVEhEUkFXLCAmbHMtPmZsYWdzKSkKLQkJdmFsID0gMTsKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHdpdGhkcmF3X3N0b3JlKHN0cnVjdCBnZGxtX2xzICpscywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXNzaXplX3QgcmV0ID0gbGVuOwotCWludCB2YWw7Ci0KLQl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7Ci0KLQlpZiAodmFsID09IDEpCi0JCXNldF9iaXQoREZMX1dJVEhEUkFXLCAmbHMtPmZsYWdzKTsKLQllbHNlCi0JCXJldCA9IC1FSU5WQUw7Ci0Jd2FrZV91cCgmbHMtPndhaXRfY29udHJvbCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgaWRfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbHMtPmlkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgamlkX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5qaWQpOwotfQotCi1zdGF0aWMgc3NpemVfdCBmaXJzdF9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+Zmlyc3QpOwotfQotCi1zdGF0aWMgc3NpemVfdCBmaXJzdF9kb25lX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5maXJzdF9kb25lKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+cmVjb3Zlcl9qaWQpOwotfQotCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0b3JlKHN0cnVjdCBnZGxtX2xzICpscywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCWxzLT5yZWNvdmVyX2ppZCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKLQlscy0+ZnNjYihscy0+c2RwLCBMTV9DQl9ORUVEX1JFQ09WRVJZLCAmbHMtPnJlY292ZXJfamlkKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyX2RvbmVfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPnJlY292ZXJfamlkX2RvbmUpOwotfQotCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0YXR1c19zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+cmVjb3Zlcl9qaWRfc3RhdHVzKTsKLX0KLQotc3RydWN0IGdkbG1fYXR0ciB7Ci0Jc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwotCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZ2RsbV9scyAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGdkbG1fbHMgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwotfTsKLQotI2RlZmluZSBHRExNX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSBcCi1zdGF0aWMgc3RydWN0IGdkbG1fYXR0ciBnZGxtX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCi0KLUdETE1fQVRUUihwcm90b19uYW1lLCAgICAgMDQ0NCwgcHJvdG9fbmFtZV9zaG93LCAgICAgTlVMTCk7Ci1HRExNX0FUVFIoYmxvY2ssICAgICAgICAgIDA2NDQsIGJsb2NrX3Nob3csICAgICAgICAgIGJsb2NrX3N0b3JlKTsKLUdETE1fQVRUUih3aXRoZHJhdywgICAgICAgMDY0NCwgd2l0aGRyYXdfc2hvdywgICAgICAgd2l0aGRyYXdfc3RvcmUpOwotR0RMTV9BVFRSKGlkLCAgICAgICAgICAgICAwNDQ0LCBpZF9zaG93LCAgICAgICAgICAgICBOVUxMKTsKLUdETE1fQVRUUihqaWQsICAgICAgICAgICAgMDQ0NCwgamlkX3Nob3csICAgICAgICAgICAgTlVMTCk7Ci1HRExNX0FUVFIoZmlyc3QsICAgICAgICAgIDA0NDQsIGZpcnN0X3Nob3csICAgICAgICAgIE5VTEwpOwotR0RMTV9BVFRSKGZpcnN0X2RvbmUsICAgICAwNDQ0LCBmaXJzdF9kb25lX3Nob3csICAgICBOVUxMKTsKLUdETE1fQVRUUihyZWNvdmVyLCAgICAgICAgMDY0NCwgcmVjb3Zlcl9zaG93LCAgICAgICAgcmVjb3Zlcl9zdG9yZSk7Ci1HRExNX0FUVFIocmVjb3Zlcl9kb25lLCAgIDA0NDQsIHJlY292ZXJfZG9uZV9zaG93LCAgIE5VTEwpOwotR0RMTV9BVFRSKHJlY292ZXJfc3RhdHVzLCAwNDQ0LCByZWNvdmVyX3N0YXR1c19zaG93LCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmdkbG1fYXR0cnNbXSA9IHsKLQkmZ2RsbV9hdHRyX3Byb3RvX25hbWUuYXR0ciwKLQkmZ2RsbV9hdHRyX2Jsb2NrLmF0dHIsCi0JJmdkbG1fYXR0cl93aXRoZHJhdy5hdHRyLAotCSZnZGxtX2F0dHJfaWQuYXR0ciwKLQkmZ2RsbV9hdHRyX2ppZC5hdHRyLAotCSZnZGxtX2F0dHJfZmlyc3QuYXR0ciwKLQkmZ2RsbV9hdHRyX2ZpcnN0X2RvbmUuYXR0ciwKLQkmZ2RsbV9hdHRyX3JlY292ZXIuYXR0ciwKLQkmZ2RsbV9hdHRyX3JlY292ZXJfZG9uZS5hdHRyLAotCSZnZGxtX2F0dHJfcmVjb3Zlcl9zdGF0dXMuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHNzaXplX3QgZ2RsbV9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZGxtX2xzLCBrb2JqKTsKLQlzdHJ1Y3QgZ2RsbV9hdHRyICphID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBnZGxtX2F0dHIsIGF0dHIpOwotCXJldHVybiBhLT5zaG93ID8gYS0+c2hvdyhscywgYnVmKSA6IDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGdkbG1fYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZGxtX2xzLCBrb2JqKTsKLQlzdHJ1Y3QgZ2RsbV9hdHRyICphID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBnZGxtX2F0dHIsIGF0dHIpOwotCXJldHVybiBhLT5zdG9yZSA/IGEtPnN0b3JlKGxzLCBidWYsIGxlbikgOiBsZW47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGdkbG1fYXR0cl9vcHMgPSB7Ci0JLnNob3cgID0gZ2RsbV9hdHRyX3Nob3csCi0JLnN0b3JlID0gZ2RsbV9hdHRyX3N0b3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgZ2RsbV9rdHlwZSA9IHsKLQkuZGVmYXVsdF9hdHRycyA9IGdkbG1fYXR0cnMsCi0JLnN5c2ZzX29wcyAgICAgPSAmZ2RsbV9hdHRyX29wcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga3NldCAqZ2RsbV9rc2V0OwotCi1pbnQgZ2RsbV9rb2JqZWN0X3NldHVwKHN0cnVjdCBnZGxtX2xzICpscywgc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQlpbnQgZXJyb3I7Ci0KLQlscy0+a29iai5rc2V0ID0gZ2RsbV9rc2V0OwotCWVycm9yID0ga29iamVjdF9pbml0X2FuZF9hZGQoJmxzLT5rb2JqLCAmZ2RsbV9rdHlwZSwgZnNrb2JqLAotCQkJCSAgICAgImxvY2tfbW9kdWxlIik7Ci0JaWYgKGVycm9yKQotCQlsb2dfZXJyb3IoImNhbid0IHJlZ2lzdGVyIGtvYmogJWQiLCBlcnJvcik7Ci0Ja29iamVjdF91ZXZlbnQoJmxzLT5rb2JqLCBLT0JKX0FERCk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2RsbV9rb2JqZWN0X3JlbGVhc2Uoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCWtvYmplY3RfcHV0KCZscy0+a29iaik7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV91ZXZlbnQoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkgICAgICAgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQotewotICAgICAgICBzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGdkbG1fbHMsIGtvYmopOwotICAgICAgICBhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLVEFCTEU9JXM6JXMiLCBscy0+Y2x1c3Rlcm5hbWUsIGxzLT5mc25hbWUpOwotICAgICAgICBhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLUFJPVE89bG9ja19kbG0iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga3NldF91ZXZlbnRfb3BzIGdkbG1fdWV2ZW50X29wcyA9IHsKLQkudWV2ZW50ID0gZ2RsbV91ZXZlbnQsCi19OwotCi0KLWludCBnZGxtX3N5c2ZzX2luaXQodm9pZCkKLXsKLQlnZGxtX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJsb2NrX2RsbSIsICZnZGxtX3VldmVudF9vcHMsIGtlcm5lbF9rb2JqKTsKLQlpZiAoIWdkbG1fa3NldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuIG5vdCBjcmVhdGUga3NldFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZ2RsbV9zeXNmc19leGl0KHZvaWQpCi17Ci0Ja3NldF91bnJlZ2lzdGVyKGdkbG1fa3NldCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vdGhyZWFkLmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODgyM2VmLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vdGhyZWFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIGlubGluZSBpbnQgbm9fd29yayhzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0JaW50IHJldDsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCXJldCA9IGxpc3RfZW1wdHkoJmxzLT5zdWJtaXQpOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdkbG1fdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gKHN0cnVjdCBnZGxtX2xzICopIGRhdGE7Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBOVUxMOwotCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGxzLT50aHJlYWRfd2FpdCwKLQkJCQkhbm9fd29yayhscykgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKLQotCQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCQlpZiAoIWxpc3RfZW1wdHkoJmxzLT5zdWJtaXQpKSB7Ci0JCQlscCA9IGxpc3RfZW50cnkobHMtPnN1Ym1pdC5uZXh0LCBzdHJ1Y3QgZ2RsbV9sb2NrLAotCQkJCQlkZWxheV9saXN0KTsKLQkJCWxpc3RfZGVsX2luaXQoJmxwLT5kZWxheV9saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JCQlnZGxtX2RvX2xvY2sobHApOwotCQkJc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGdkbG1faW5pdF90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JaW50IGVycm9yOwotCi0JcCA9IGt0aHJlYWRfcnVuKGdkbG1fdGhyZWFkLCBscywgImxvY2tfZGxtIik7Ci0JZXJyb3IgPSBJU19FUlIocCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWxvZ19lcnJvcigiY2FuJ3Qgc3RhcnQgbG9ja19kbG0gdGhyZWFkICVkIiwgZXJyb3IpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCWxzLT50aHJlYWQgPSBwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZ2RsbV9yZWxlYXNlX3RocmVhZHMoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCWt0aHJlYWRfc3RvcChscy0+dGhyZWFkKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmMKaW5kZXggYWQzMDU4NS4uOTg5MThhNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2cuYworKysgYi9mcy9nZnMyL2xvZy5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmMgYi9mcy9nZnMyL2xvcHMuYwppbmRleCA0MzkwZjZmLi44MGU0ZjVmIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvcHMuYworKysgYi9mcy9nZnMyL2xvcHMuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL21haW4uYyBiL2ZzL2dmczIvbWFpbi5jCmluZGV4IDdjYWNmZGUuLmE2ODkyZWQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWFpbi5jCisrKyBiL2ZzL2dmczIvbWFpbi5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtMjMsNiArMjIsMTIgQEAKICNpbmNsdWRlICJzeXMuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiZ2xvY2suaCIKKyNpbmNsdWRlICJxdW90YS5oIgorCitzdGF0aWMgc3RydWN0IHNocmlua2VyIHFkX3Nocmlua2VyID0geworCS5zaHJpbmsgPSBnZnMyX3Nocmlua19xZF9tZW1vcnksCisJLnNlZWtzID0gREVGQVVMVF9TRUVLUywKK307CiAKIHN0YXRpYyB2b2lkIGdmczJfaW5pdF9pbm9kZV9vbmNlKHZvaWQgKmZvbykKIHsKQEAgLTQxLDggKzQ2LDYgQEAKIAlJTklUX0hMSVNUX05PREUoJmdsLT5nbF9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmZ2wtPmdsX3NwaW4pOwogCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfaG9sZGVycyk7Ci0JZ2wtPmdsX2x2YiA9IE5VTEw7Ci0JYXRvbWljX3NldCgmZ2wtPmdsX2x2Yl9jb3VudCwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJmdsLT5nbF9scnUpOwogCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfYWlsX2xpc3QpOwogCWF0b21pY19zZXQoJmdsLT5nbF9haWxfY291bnQsIDApOwpAQCAtMTAwLDYgKzEwMyw4IEBACiAJaWYgKCFnZnMyX3F1b3RhZF9jYWNoZXApCiAJCWdvdG8gZmFpbDsKIAorCXJlZ2lzdGVyX3Nocmlua2VyKCZxZF9zaHJpbmtlcik7CisKIAllcnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJfZnNfdHlwZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWw7CkBAIC0xMTcsNiArMTIyLDcgQEAKIGZhaWxfdW5yZWdpc3RlcjoKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJfZnNfdHlwZSk7CiBmYWlsOgorCXVucmVnaXN0ZXJfc2hyaW5rZXIoJnFkX3Nocmlua2VyKTsKIAlnZnMyX2dsb2NrX2V4aXQoKTsKIAogCWlmIChnZnMyX3F1b3RhZF9jYWNoZXApCkBAIC0xNDUsNiArMTUxLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZ2ZzMl9mcyh2b2lkKQogeworCXVucmVnaXN0ZXJfc2hyaW5rZXIoJnFkX3Nocmlua2VyKTsKIAlnZnMyX2dsb2NrX2V4aXQoKTsKIAlnZnMyX3VucmVnaXN0ZXJfZGVidWdmcygpOwogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMl9mc190eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWV0YV9pby5jIGIvZnMvZ2ZzMi9tZXRhX2lvLmMKaW5kZXggMDk4NTM2Mi4uOGQ2ZjEzMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tZXRhX2lvLmMKKysrIGIvZnMvZ2ZzMi9tZXRhX2lvLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC05MCwyNyArODksNiBAQAogfQogCiAvKioKLSAqIGdmczJfbWV0YV9pbnZhbCAtIEludmFsaWRhdGUgYWxsIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIGEgZ2xvY2sKLSAqIEBnbDogdGhlIGdsb2NrCi0gKgotICovCi0KLXZvaWQgZ2ZzMl9tZXRhX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0Jc3RydWN0IGlub2RlICphc3BhY2UgPSBnbC0+Z2xfYXNwYWNlOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOwotCi0JZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpKTsKLQotCWF0b21pY19pbmMoJmFzcGFjZS0+aV93cml0ZWNvdW50KTsKLQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCAwKTsKLQlhdG9taWNfZGVjKCZhc3BhY2UtPmlfd3JpdGVjb3VudCk7Ci0KLQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFtYXBwaW5nLT5ucnBhZ2VzKTsKLX0KLQotLyoqCiAgKiBnZnMyX21ldGFfc3luYyAtIFN5bmMgYWxsIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIGEgZ2xvY2sKICAqIEBnbDogVGhlIGdsb2NrCiAgKgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tZXRhX2lvLmggYi9mcy9nZnMyL21ldGFfaW8uaAppbmRleCBiMWE1ZjM2Li5kZTI3MGMyIDEwMDY0NAotLS0gYS9mcy9nZnMyL21ldGFfaW8uaAorKysgYi9mcy9nZnMyL21ldGFfaW8uaApAQCAtNDAsNyArNDAsNiBAQAogc3RydWN0IGlub2RlICpnZnMyX2FzcGFjZV9nZXQoc3RydWN0IGdmczJfc2JkICpzZHApOwogdm9pZCBnZnMyX2FzcGFjZV9wdXQoc3RydWN0IGlub2RlICphc3BhY2UpOwogCi12b2lkIGdmczJfbWV0YV9pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogdm9pZCBnZnMyX21ldGFfc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogCiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdmczJfbWV0YV9uZXcoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1NjQgYmxrbm8pOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tb3VudC5jIGIvZnMvZ2ZzMi9tb3VudC5jCmluZGV4IDNjYjBhNDQuLmY3ZTg1MjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbW91bnQuYworKysgYi9mcy9nZnMyL21vdW50LmMKQEAgLTEyLDEyICsxMiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCi0jaW5jbHVkZSAibW91bnQuaCIKKyNpbmNsdWRlICJzdXBlci5oIgogI2luY2x1ZGUgInN5cy5oIgogI2luY2x1ZGUgInV0aWwuaCIKIApAQCAtMzcsMTEgKzM2LDE1IEBACiAJT3B0X3F1b3RhX29mZiwKIAlPcHRfcXVvdGFfYWNjb3VudCwKIAlPcHRfcXVvdGFfb24sCisJT3B0X3F1b3RhLAorCU9wdF9ub3F1b3RhLAogCU9wdF9zdWlkZGlyLAogCU9wdF9ub3N1aWRkaXIsCiAJT3B0X2RhdGFfd3JpdGViYWNrLAogCU9wdF9kYXRhX29yZGVyZWQsCiAJT3B0X21ldGEsCisJT3B0X2Rpc2NhcmQsCisJT3B0X25vZGlzY2FyZCwKIAlPcHRfZXJyLAogfTsKIApAQCAtNjEsMTEgKzY0LDE1IEBACiAJe09wdF9xdW90YV9vZmYsICJxdW90YT1vZmYifSwKIAl7T3B0X3F1b3RhX2FjY291bnQsICJxdW90YT1hY2NvdW50In0sCiAJe09wdF9xdW90YV9vbiwgInF1b3RhPW9uIn0sCisJe09wdF9xdW90YSwgInF1b3RhIn0sCisJe09wdF9ub3F1b3RhLCAibm9xdW90YSJ9LAogCXtPcHRfc3VpZGRpciwgInN1aWRkaXIifSwKIAl7T3B0X25vc3VpZGRpciwgIm5vc3VpZGRpciJ9LAogCXtPcHRfZGF0YV93cml0ZWJhY2ssICJkYXRhPXdyaXRlYmFjayJ9LAogCXtPcHRfZGF0YV9vcmRlcmVkLCAiZGF0YT1vcmRlcmVkIn0sCiAJe09wdF9tZXRhLCAibWV0YSJ9LAorCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKKwl7T3B0X25vZGlzY2FyZCwgIm5vZGlzY2FyZCJ9LAogCXtPcHRfZXJyLCBOVUxMfQogfTsKIApAQCAtNzcsMTAxICs4NCw0NiBAQAogICogUmV0dXJuOiBlcnJubwogICovCiAKLWludCBnZnMyX21vdW50X2FyZ3Moc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmRhdGFfYXJnLCBpbnQgcmVtb3VudCkKK2ludCBnZnMyX21vdW50X2FyZ3Moc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MsIGNoYXIgKm9wdGlvbnMpCiB7Ci0Jc3RydWN0IGdmczJfYXJncyAqYXJncyA9ICZzZHAtPnNkX2FyZ3M7Ci0JY2hhciAqZGF0YSA9IGRhdGFfYXJnOwotCWNoYXIgKm9wdGlvbnMsICpvLCAqdjsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWYgKCFyZW1vdW50KSB7Ci0JCS8qICBTZXQgc29tZSBkZWZhdWx0cyAgKi8KLQkJYXJncy0+YXJfcXVvdGEgPSBHRlMyX1FVT1RBX0RFRkFVTFQ7Ci0JCWFyZ3MtPmFyX2RhdGEgPSBHRlMyX0RBVEFfREVGQVVMVDsKLQl9CisJY2hhciAqbzsKKwlpbnQgdG9rZW47CisJc3Vic3RyaW5nX3QgdG1wW01BWF9PUFRfQVJHU107CiAKIAkvKiBTcGxpdCB0aGUgb3B0aW9ucyBpbnRvIHRva2VucyB3aXRoIHRoZSAiLCIgY2hhcmFjdGVyIGFuZAogCSAgIHByb2Nlc3MgdGhlbSAqLwogCi0JZm9yIChvcHRpb25zID0gZGF0YTsgKG8gPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpOyApIHsKLQkJaW50IHRva2VuOwotCQlzdWJzdHJpbmdfdCB0bXBbTUFYX09QVF9BUkdTXTsKLQotCQlpZiAoISpvKQorCXdoaWxlICgxKSB7CisJCW8gPSBzdHJzZXAoJm9wdGlvbnMsICIsIik7CisJCWlmIChvID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKCpvID09ICdcMCcpCiAJCQljb250aW51ZTsKIAogCQl0b2tlbiA9IG1hdGNoX3Rva2VuKG8sIHRva2VucywgdG1wKTsKIAkJc3dpdGNoICh0b2tlbikgewogCQljYXNlIE9wdF9sb2NrcHJvdG86Ci0JCQl2ID0gbWF0Y2hfc3RyZHVwKCZ0bXBbMF0pOwotCQkJaWYgKCF2KSB7Ci0JCQkJZnNfaW5mbyhzZHAsICJubyBtZW1vcnkgZm9yIGxvY2twcm90b1xuIik7Ci0JCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJCWdvdG8gb3V0X2Vycm9yOwotCQkJfQotCi0JCQlpZiAocmVtb3VudCAmJiBzdHJjbXAodiwgYXJncy0+YXJfbG9ja3Byb3RvKSkgewotCQkJCWtmcmVlKHYpOwotCQkJCWdvdG8gY2FudF9yZW1vdW50OwotCQkJfQotCQkJCi0JCQlzdHJuY3B5KGFyZ3MtPmFyX2xvY2twcm90bywgdiwgR0ZTMl9MT0NLTkFNRV9MRU4pOwotCQkJYXJncy0+YXJfbG9ja3Byb3RvW0dGUzJfTE9DS05BTUVfTEVOIC0gMV0gPSAwOwotCQkJa2ZyZWUodik7CisJCQltYXRjaF9zdHJsY3B5KGFyZ3MtPmFyX2xvY2twcm90bywgJnRtcFswXSwKKwkJCQkgICAgICBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbG9ja3RhYmxlOgotCQkJdiA9IG1hdGNoX3N0cmR1cCgmdG1wWzBdKTsKLQkJCWlmICghdikgewotCQkJCWZzX2luZm8oc2RwLCAibm8gbWVtb3J5IGZvciBsb2NrdGFibGVcbiIpOwotCQkJCWVycm9yID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dF9lcnJvcjsKLQkJCX0KLQotCQkJaWYgKHJlbW91bnQgJiYgc3RyY21wKHYsIGFyZ3MtPmFyX2xvY2t0YWJsZSkpIHsKLQkJCQlrZnJlZSh2KTsKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKLQkJCX0KLQotCQkJc3RybmNweShhcmdzLT5hcl9sb2NrdGFibGUsIHYsIEdGUzJfTE9DS05BTUVfTEVOKTsKLQkJCWFyZ3MtPmFyX2xvY2t0YWJsZVtHRlMyX0xPQ0tOQU1FX0xFTiAtIDFdICA9IDA7Ci0JCQlrZnJlZSh2KTsKKwkJCW1hdGNoX3N0cmxjcHkoYXJncy0+YXJfbG9ja3RhYmxlLCAmdG1wWzBdLAorCQkJCSAgICAgIEdGUzJfTE9DS05BTUVfTEVOKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ob3N0ZGF0YToKLQkJCXYgPSBtYXRjaF9zdHJkdXAoJnRtcFswXSk7Ci0JCQlpZiAoIXYpIHsKLQkJCQlmc19pbmZvKHNkcCwgIm5vIG1lbW9yeSBmb3IgaG9zdGRhdGFcbiIpOwotCQkJCWVycm9yID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dF9lcnJvcjsKLQkJCX0KLQotCQkJaWYgKHJlbW91bnQgJiYgc3RyY21wKHYsIGFyZ3MtPmFyX2hvc3RkYXRhKSkgewotCQkJCWtmcmVlKHYpOwotCQkJCWdvdG8gY2FudF9yZW1vdW50OwotCQkJfQotCi0JCQlzdHJuY3B5KGFyZ3MtPmFyX2hvc3RkYXRhLCB2LCBHRlMyX0xPQ0tOQU1FX0xFTik7Ci0JCQlhcmdzLT5hcl9ob3N0ZGF0YVtHRlMyX0xPQ0tOQU1FX0xFTiAtIDFdID0gMDsKLQkJCWtmcmVlKHYpOworCQkJbWF0Y2hfc3RybGNweShhcmdzLT5hcl9ob3N0ZGF0YSwgJnRtcFswXSwKKwkJCQkgICAgICBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfc3BlY3RhdG9yOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX3NwZWN0YXRvcikKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX3NwZWN0YXRvciA9IDE7Ci0JCQlzZHAtPnNkX3Zmcy0+c19mbGFncyB8PSBNU19SRE9OTFk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaWdub3JlX2xvY2FsX2ZzOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX2lnbm9yZV9sb2NhbF9mcykKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX2lnbm9yZV9sb2NhbF9mcyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbG9jYWxmbG9ja3M6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfbG9jYWxmbG9ja3MpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9sb2NhbGZsb2NrcyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbG9jYWxjYWNoaW5nOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX2xvY2FsY2FjaGluZykKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX2xvY2FsY2FjaGluZyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZGVidWc6CkBAIC0xODEsMjUgKzEzMywyMyBAQAogCQkJYXJncy0+YXJfZGVidWcgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3VwZ3JhZGU6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfdXBncmFkZSkKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX3VwZ3JhZGUgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2FjbDoKIAkJCWFyZ3MtPmFyX3Bvc2l4X2FjbCA9IDE7Ci0JCQlzZHAtPnNkX3Zmcy0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2FjbDoKIAkJCWFyZ3MtPmFyX3Bvc2l4X2FjbCA9IDA7Ci0JCQlzZHAtPnNkX3Zmcy0+c19mbGFncyAmPSB+TVNfUE9TSVhBQ0w7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfcXVvdGFfb2ZmOgorCQljYXNlIE9wdF9ub3F1b3RhOgogCQkJYXJncy0+YXJfcXVvdGEgPSBHRlMyX1FVT1RBX09GRjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9xdW90YV9hY2NvdW50OgogCQkJYXJncy0+YXJfcXVvdGEgPSBHRlMyX1FVT1RBX0FDQ09VTlQ7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfcXVvdGFfb246CisJCWNhc2UgT3B0X3F1b3RhOgogCQkJYXJncy0+YXJfcXVvdGEgPSBHRlMyX1FVT1RBX09OOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3N1aWRkaXI6CkBAIC0yMTUsMjkgKzE2NSwyMSBAQAogCQkJYXJncy0+YXJfZGF0YSA9IEdGUzJfREFUQV9PUkRFUkVEOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X21ldGE6Ci0JCQlpZiAocmVtb3VudCAmJiBhcmdzLT5hcl9tZXRhICE9IDEpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9tZXRhID0gMTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9kaXNjYXJkOgorCQkJYXJncy0+YXJfZGlzY2FyZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9kaXNjYXJkOgorCQkJYXJncy0+YXJfZGlzY2FyZCA9IDA7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfZXJyOgogCQlkZWZhdWx0OgotCQkJZnNfaW5mbyhzZHAsICJ1bmtub3duIG9wdGlvbjogJXNcbiIsIG8pOwotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJZ290byBvdXRfZXJyb3I7CisJCQlmc19pbmZvKHNkcCwgImludmFsaWQgbW91bnQgb3B0aW9uOiAlc1xuIiwgbyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotb3V0X2Vycm9yOgotCWlmIChlcnJvcikKLQkJZnNfaW5mbyhzZHAsICJpbnZhbGlkIG1vdW50IG9wdGlvbihzKVxuIik7Ci0KLQlpZiAoZGF0YSAhPSBkYXRhX2FyZykKLQkJa2ZyZWUoZGF0YSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci0KLWNhbnRfcmVtb3VudDoKLQlmc19pbmZvKHNkcCwgImNhbid0IHJlbW91bnQgd2l0aCBvcHRpb24gJXNcbiIsIG8pOwotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL21vdW50LmggYi9mcy9nZnMyL21vdW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTI4OGEuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9tb3VudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBfX01PVU5UX0RPVF9IX18KLSNkZWZpbmUgX19NT1VOVF9ET1RfSF9fCi0KLXN0cnVjdCBnZnMyX3NiZDsKLQotaW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZGF0YV9hcmcsIGludCByZW1vdW50KTsKLQotI2VuZGlmIC8qIF9fTU9VTlRfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jIGIvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCmluZGV4IDRkZGFiNjcuLmE2ZGRlMTcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2FkZHJlc3MuYworKysgYi9mcy9nZnMyL29wc19hZGRyZXNzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtNDQyLDYgKzQ0MSw3IEBACiAJICovCiAJaWYgKHVubGlrZWx5KHBhZ2UtPmluZGV4KSkgewogCQl6ZXJvX3VzZXIocGFnZSwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEwOTYsNiArMTA5Niw3IEBACiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKIAkuZGlyZWN0X0lPID0gZ2ZzMl9kaXJlY3RfSU8sCiAJLm1pZ3JhdGVwYWdlID0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZ2ZzMl9vcmRlcmVkX2FvcHMgPSB7CkBAIC0xMTExLDYgKzExMTIsNyBAQAogCS5yZWxlYXNlcGFnZSA9IGdmczJfcmVsZWFzZXBhZ2UsCiAJLmRpcmVjdF9JTyA9IGdmczJfZGlyZWN0X0lPLAogCS5taWdyYXRlcGFnZSA9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGdmczJfamRhdGFfYW9wcyA9IHsKQEAgLTExMjUsNiArMTEyNyw3IEBACiAJLmJtYXAgPSBnZnMyX2JtYXAsCiAJLmludmFsaWRhdGVwYWdlID0gZ2ZzMl9pbnZhbGlkYXRlcGFnZSwKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCiB2b2lkIGdmczJfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2RlbnRyeS5jIGIvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMKaW5kZXggYzJhZDM2My4uNWViNTdiMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMKKysrIGIvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2V4cG9ydC5jIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKaW5kZXggN2ZkZWIxNC4uOTIwMGVmMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKKysrIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZpbGUuYyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwppbmRleCA5M2ZlNDFiLi4zYjllOGRlIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19maWxlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZmlsZS5jCkBAIC0yMCw5ICsyMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbG1fcGxvY2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTM1NCw3ICszNTUsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJc2V0X2JpdChHTEZfRElSVFksICZpcC0+aV9nbC0+Z2xfZmxhZ3MpOwogCXNldF9iaXQoR0lGX1NXX1BBR0VELCAmaXAtPmlfZmxhZ3MpOworCiAJcmV0ID0gZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgcG9zLCBQQUdFX0NBQ0hFX1NJWkUsICZhbGxvY19yZXF1aXJlZCk7CiAJaWYgKHJldCB8fCAhYWxsb2NfcmVxdWlyZWQpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTU2MCw1NyArNTYzLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNCisKIC8qKgogICogZ2ZzMl9zZXRsZWFzZSAtIGFjcXVpcmUvcmVsZWFzZSBhIGZpbGUgbGVhc2UKICAqIEBmaWxlOiB0aGUgZmlsZSBwb2ludGVyCiAgKiBAYXJnOiBsZWFzZSB0eXBlCiAgKiBAZmw6IGZpbGUgbG9jawogICoKKyAqIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGVuZm9yY2UgYSBsZWFzZSBhY3Jvc3MgdGhlIHdob2xlCisgKiBjbHVzdGVyOyB1bnRpbCB3ZSBkbywgZGlzYWJsZSBsZWFzZXMgKGJ5IGp1c3QgcmV0dXJuaW5nIC1FSU5WQUwpLAorICogdW5sZXNzIHRoZSBhZG1pbmlzdHJhdG9yIGhhcyByZXF1ZXN0ZWQgcHVyZWx5IGxvY2FsIGxvY2tpbmcuCisgKgogICogUmV0dXJuczogZXJybm8KICAqLwogCiBzdGF0aWMgaW50IGdmczJfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmwpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGVuZm9yY2UgYSBsZWFzZSBhY3Jvc3MgdGhlIHdob2xlCi0JICogY2x1c3RlcjsgdW50aWwgd2UgZG8sIGRpc2FibGUgbGVhc2VzIChieSBqdXN0IHJldHVybmluZyAtRUlOVkFMKSwKLQkgKiB1bmxlc3MgdGhlIGFkbWluaXN0cmF0b3IgaGFzIHJlcXVlc3RlZCBwdXJlbHkgbG9jYWwgbG9ja2luZy4KLQkgKi8KLQlpZiAoIXNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGdlbmVyaWNfc2V0bGVhc2UoZmlsZSwgYXJnLCBmbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9sbV9wbG9ja19nZXQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3Bsb2NrX2dldCgKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBmbCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGdmczJfbG1fcGxvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcGxvY2soCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgY21kLCBmbCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGdmczJfbG1fcHVubG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1bmxvY2soCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgZmwpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoqCkBAIC02MjYsOSArNTk2LDcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUgbmFtZSA9Ci0JCXsgLmxuX251bWJlciA9IGlwLT5pX25vX2FkZHIsCi0JCSAgLmxuX3R5cGUgPSBMTV9UWVBFX1BMT0NLIH07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKIAogCWlmICghKGZsLT5mbF9mbGFncyAmIEZMX1BPU0lYKSkKIAkJcmV0dXJuIC1FTk9MQ0s7CkBAIC02NDAsMTIgKzYwOCwxNCBAQAogCQljbWQgPSBGX1NFVExLOwogCQlmbC0+ZmxfdHlwZSA9IEZfVU5MQ0s7CiAJfQorCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCXJldHVybiAtRUlPOwogCWlmIChJU19HRVRMSyhjbWQpKQotCQlyZXR1cm4gZ2ZzMl9sbV9wbG9ja19nZXQoc2RwLCAmbmFtZSwgZmlsZSwgZmwpOworCQlyZXR1cm4gZGxtX3Bvc2l4X2dldChscy0+bHNfZGxtLCBpcC0+aV9ub19hZGRyLCBmaWxlLCBmbCk7CiAJZWxzZSBpZiAoZmwtPmZsX3R5cGUgPT0gRl9VTkxDSykKLQkJcmV0dXJuIGdmczJfbG1fcHVubG9jayhzZHAsICZuYW1lLCBmaWxlLCBmbCk7CisJCXJldHVybiBkbG1fcG9zaXhfdW5sb2NrKGxzLT5sc19kbG0sIGlwLT5pX25vX2FkZHIsIGZpbGUsIGZsKTsKIAllbHNlCi0JCXJldHVybiBnZnMyX2xtX3Bsb2NrKHNkcCwgJm5hbWUsIGZpbGUsIGNtZCwgZmwpOworCQlyZXR1cm4gZGxtX3Bvc2l4X2xvY2sobHMtPmxzX2RsbSwgaXAtPmlfbm9fYWRkciwgZmlsZSwgY21kLCBmbCk7CiB9CiAKIHN0YXRpYyBpbnQgZG9fZmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQpAQCAtNzMyLDcgKzcwMiw3IEBACiAJfQogfQogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9maWxlX2ZvcHMgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5sbHNlZWsJCT0gZ2ZzMl9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKQEAgLTc1MCw3ICs3MjAsNyBAQAogCS5zZXRsZWFzZQk9IGdmczJfc2V0bGVhc2UsCiB9OwogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkucmVhZGRpcgk9IGdmczJfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGwJPSBnZnMyX2lvY3RsLAogCS5vcGVuCQk9IGdmczJfb3BlbiwKQEAgLTc2MCw3ICs3MzAsOSBAQAogCS5mbG9jawkJPSBnZnMyX2Zsb2NrLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wc19ub2xvY2sgPSB7CisjZW5kaWYgLyogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0gKi8KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkubGxzZWVrCQk9IGdmczJfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCkBAIC03NzMsMTAgKzc0NSwxMCBAQAogCS5mc3luYwkJPSBnZnMyX2ZzeW5jLAogCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSwKLQkuc2V0bGVhc2UJPSBnZnMyX3NldGxlYXNlLAorCS5zZXRsZWFzZQk9IGdlbmVyaWNfc2V0bGVhc2UsCiB9OwogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHNfbm9sb2NrID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wc19ub2xvY2sgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5yZWFkZGlyCT0gZ2ZzMl9yZWFkZGlyLAogCS51bmxvY2tlZF9pb2N0bAk9IGdmczJfaW9jdGwsCiAJLm9wZW4JCT0gZ2ZzMl9vcGVuLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCBmOTFlZWJkLi41MTg4M2IzIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMjUsNyArMjQsNiBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiZ2xvcHMuaCIKICNpbmNsdWRlICJpbm9kZS5oIgotI2luY2x1ZGUgIm1vdW50LmgiCiAjaW5jbHVkZSAicmVjb3ZlcnkuaCIKICNpbmNsdWRlICJyZ3JwLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKQEAgLTY0LDcgKzYyLDYgQEAKIAlndC0+Z3RfcXVvdGFfd2Fybl9wZXJpb2QgPSAxMDsKIAlndC0+Z3RfcXVvdGFfc2NhbGVfbnVtID0gMTsKIAlndC0+Z3RfcXVvdGFfc2NhbGVfZGVuID0gMTsKLQlndC0+Z3RfcXVvdGFfY2FjaGVfc2VjcyA9IDMwMDsKIAlndC0+Z3RfcXVvdGFfcXVhbnR1bSA9IDYwOwogCWd0LT5ndF9uZXdfZmlsZXNfamRhdGEgPSAwOwogCWd0LT5ndF9tYXhfcmVhZGFoZWFkID0gMSA8PCAxODsKQEAgLTEwMCw3ICs5Nyw2IEBACiAJbXV0ZXhfaW5pdCgmc2RwLT5zZF9qaW5kZXhfbXV0ZXgpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNkcC0+c2RfcXVvdGFfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNkcC0+c2RfcXVvdGFfc3Bpbik7CiAJbXV0ZXhfaW5pdCgmc2RwLT5zZF9xdW90YV9tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2RwLT5zZF9xdW90YV93YWl0KTsKIAlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZF90cnVuY19saXN0KTsKQEAgLTIzOCw2ICsyMzQsNyBAQAogCiAJbWVtY3B5KHNiLT5zYl9sb2NrcHJvdG8sIHN0ci0+c2JfbG9ja3Byb3RvLCBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJbWVtY3B5KHNiLT5zYl9sb2NrdGFibGUsIHN0ci0+c2JfbG9ja3RhYmxlLCBHRlMyX0xPQ0tOQU1FX0xFTik7CisJbWVtY3B5KHNiLT5zYl91dWlkLCBzdHItPnNiX3V1aWQsIDE2KTsKIH0KIAogLyoqCkBAIC0yOTksMTUgKzI5NiwxNSBAQAogCV9fZnJlZV9wYWdlKHBhZ2UpOwogCXJldHVybiAwOwogfQorCiAvKioKICAqIGdmczJfcmVhZF9zYiAtIFJlYWQgc3VwZXIgYmxvY2sKICAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKLSAqIEBnbDogdGhlIGdsb2NrIGZvciB0aGUgc3VwZXJibG9jayAoYXNzdW1lZCB0byBiZSBoZWxkKQogICogQHNpbGVudDogRG9uJ3QgcHJpbnQgbWVzc2FnZSBpZiBtb3VudCBmYWlscwogICoKICAqLwogCi1zdGF0aWMgaW50IGdmczJfcmVhZF9zYihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgc2lsZW50KQorc3RhdGljIGludCBnZnMyX3JlYWRfc2Ioc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBzaWxlbnQpCiB7CiAJdTMyIGhhc2hfYmxvY2tzLCBpbmRfYmxvY2tzLCBsZWFmX2Jsb2NrczsKIAl1MzIgdG1wX2Jsb2NrczsKQEAgLTUyNyw3ICs1MjQsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGdmczJfcmVhZF9zYihzZHAsIHNiX2doLmdoX2dsLCBzaWxlbnQpOworCXJldCA9IGdmczJfcmVhZF9zYihzZHAsIHNpbGVudCk7CiAJaWYgKHJldCkgewogCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBzdXBlcmJsb2NrOiAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CkBAIC02MzAsMTMgKzYyNywxMyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQorc3RhdGljIHZvaWQgZ2ZzMl9vdGhlcnNfbWF5X21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fb3RoZXJzX21heV9tb3VudCkKLQkJcmV0dXJuOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fb3RoZXJzX21heV9tb3VudCgKLQkJCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSk7CisJY2hhciAqbWVzc2FnZSA9ICJGSVJTVE1PVU5UPURvbmUiOworCWNoYXIgKmVudnBbXSA9IHsgbWVzc2FnZSwgTlVMTCB9OworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJbHMtPmxzX2ZpcnN0X2RvbmUgPSAxOworCWtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CiB9CiAKIC8qKgpAQCAtNzk2LDcgKzc5Myw3IEBACiAJCQl9CiAJCX0KIAotCQlnZnMyX2xtX290aGVyc19tYXlfbW91bnQoc2RwKTsKKwkJZ2ZzMl9vdGhlcnNfbWF5X21vdW50KHNkcCk7CiAJfSBlbHNlIGlmICghc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikgewogCQllcnJvciA9IGdmczJfcmVjb3Zlcl9qb3VybmFsKHNkcC0+c2RfamRlc2MpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTEwMDUsNyArMTAwMiw2IEBACiAJCWdvdG8gZmFpbF9xdW90YWQ7CiAKIAlzZHAtPnNkX2xvZ19mbHVzaF90aW1lID0gamlmZmllczsKLQlzZHAtPnNkX2ppbmRleF9yZWZyZXNoX3RpbWUgPSBqaWZmaWVzOwogCiAJcCA9IGt0aHJlYWRfcnVuKGdmczJfbG9nZCwgc2RwLCAiZ2ZzMl9sb2dkIik7CiAJZXJyb3IgPSBJU19FUlIocCk7CkBAIC0xMDMzLDYgKzEwMjksMTcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5vbG9ja190b2tlbnMgPSB7CisJeyBPcHRfamlkLCAiamlkPSVkXG4iLCB9LAorCXsgT3B0X2VyciwgTlVMTCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIG5vbG9ja19vcHMgPSB7CisJLmxtX3Byb3RvX25hbWUgPSAibG9ja19ub2xvY2siLAorCS5sbV9wdXRfbG9jayA9IGttZW1fY2FjaGVfZnJlZSwKKwkubG1fdG9rZW5zID0gJm5vbG9ja190b2tlbnMsCit9OworCiAvKioKICAqIGdmczJfbG1fbW91bnQgLSBtb3VudCBhIGxvY2tpbmcgcHJvdG9jb2wKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCkBAIC0xMDQ0LDMxICsxMDUxLDczIEBACiAKIHN0YXRpYyBpbnQgZ2ZzMl9sbV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IHNpbGVudCkKIHsKLQljaGFyICpwcm90byA9IHNkcC0+c2RfcHJvdG9fbmFtZTsKLQljaGFyICp0YWJsZSA9IHNkcC0+c2RfdGFibGVfbmFtZTsKLQlpbnQgZmxhZ3MgPSBMTV9NRkxBR19DT05WX05PRFJPUDsKLQlpbnQgZXJyb3I7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxtOworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJc3RydWN0IGdmczJfYXJncyAqYXJncyA9ICZzZHAtPnNkX2FyZ3M7CisJY29uc3QgY2hhciAqcHJvdG8gPSBzZHAtPnNkX3Byb3RvX25hbWU7CisJY29uc3QgY2hhciAqdGFibGUgPSBzZHAtPnNkX3RhYmxlX25hbWU7CisJY29uc3QgY2hhciAqZnNuYW1lOworCWNoYXIgKm8sICpvcHRpb25zOworCWludCByZXQ7CiAKLQlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKLQkJZmxhZ3MgfD0gTE1fTUZMQUdfU1BFQ1RBVE9SOworCWlmICghc3RyY21wKCJsb2NrX25vbG9jayIsIHByb3RvKSkgeworCQlsbSA9ICZub2xvY2tfb3BzOworCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MgPSAxOworCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxjYWNoaW5nID0gMTsKKyNpZmRlZiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTQorCX0gZWxzZSBpZiAoIXN0cmNtcCgibG9ja19kbG0iLCBwcm90bykpIHsKKwkJbG0gPSAmZ2ZzMl9kbG1fb3BzOworI2VuZGlmCisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjogY2FuJ3QgZmluZCBwcm90b2NvbCAlc1xuIiwgcHJvdG8pOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CiAKIAlmc19pbmZvKHNkcCwgIlRyeWluZyB0byBqb2luIGNsdXN0ZXIgXCIlc1wiLCBcIiVzXCJcbiIsIHByb3RvLCB0YWJsZSk7CiAKLQllcnJvciA9IGdmczJfbW91bnRfbG9ja3Byb3RvKHByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhLAotCQkJCSAgICAgZ2ZzMl9nbG9ja19jYiwgc2RwLAotCQkJCSAgICAgR0ZTMl9NSU5fTFZCX1NJWkUsIGZsYWdzLAotCQkJCSAgICAgJnNkcC0+c2RfbG9ja3N0cnVjdCwgJnNkcC0+c2Rfa29iaik7Ci0JaWYgKGVycm9yKSB7Ci0JCWZzX2luZm8oc2RwLCAiY2FuJ3QgbW91bnQgcHJvdG89JXMsIHRhYmxlPSVzLCBob3N0ZGF0YT0lc1xuIiwKLQkJCXByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhKTsKLQkJZ290byBvdXQ7Ci0JfQorCWxzLT5sc19vcHMgPSBsbTsKKwlscy0+bHNfZmlyc3QgPSAxOworCWxzLT5sc19pZCA9IDA7CiAKLQlpZiAoZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMpIHx8Ci0JICAgIGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbHZiX3NpemUgPj0KLQkJCQkgIEdGUzJfTUlOX0xWQl9TSVpFKSkgewotCQlnZnMyX3VubW91bnRfbG9ja3Byb3RvKCZzZHAtPnNkX2xvY2tzdHJ1Y3QpOwotCQlnb3RvIG91dDsKKwlmb3IgKG9wdGlvbnMgPSBhcmdzLT5hcl9ob3N0ZGF0YTsgKG8gPSBzdHJzZXAoJm9wdGlvbnMsICI6IikpOyApIHsKKwkJc3Vic3RyaW5nX3QgdG1wW01BWF9PUFRfQVJHU107CisJCWludCB0b2tlbiwgb3B0aW9uOworCisJCWlmICghbyB8fCAhKm8pCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKG8sICpsbS0+bG1fdG9rZW5zLCB0bXApOworCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X2ppZDoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQgfHwgb3B0aW9uIDwgMCkgCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19qaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfaWQ6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZmlyc3Q6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IChvcHRpb24gIT0gMCAmJiBvcHRpb24gIT0gMSkpCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19maXJzdCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub2RpcjoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQgfHwgKG9wdGlvbiAhPSAwICYmIG9wdGlvbiAhPSAxKSkKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX25vZGlyID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2VycjoKKwkJZGVmYXVsdDoKK2hvc3RkYXRhX2Vycm9yOgorCQkJZnNfaW5mbyhzZHAsICJ1bmtub3duIGhvc3RkYXRhICglcylcbiIsIG8pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAKIAlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKQEAgLTEwNzcsMjIgKzExMjYsMjUgQEAKIAkJc25wcmludGYoc2RwLT5zZF9mc25hbWUsIEdGUzJfRlNOQU1FX0xFTiwgIiVzLiV1IiwgdGFibGUsCiAJCQkgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ppZCk7CiAKLQlmc19pbmZvKHNkcCwgIkpvaW5lZCBjbHVzdGVyLiBOb3cgbW91bnRpbmcgRlMuLi5cbiIpOwotCi0JaWYgKChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfZmxhZ3MgJiBMTV9MU0ZMQUdfTE9DQUwpICYmCi0JICAgICFzZHAtPnNkX2FyZ3MuYXJfaWdub3JlX2xvY2FsX2ZzKSB7Ci0JCXNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcyA9IDE7Ci0JCXNkcC0+c2RfYXJncy5hcl9sb2NhbGNhY2hpbmcgPSAxOworCWZzbmFtZSA9IHN0cmNocih0YWJsZSwgJzonKTsKKwlpZiAoZnNuYW1lKQorCQlmc25hbWUrKzsKKwlpZiAobG0tPmxtX21vdW50ID09IE5VTEwpIHsKKwkJZnNfaW5mbyhzZHAsICJOb3cgbW91bnRpbmcgRlMuLi5cbiIpOworCQlyZXR1cm4gMDsKIAl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyb3I7CisJcmV0ID0gbG0tPmxtX21vdW50KHNkcCwgZnNuYW1lKTsKKwlpZiAocmV0ID09IDApCisJCWZzX2luZm8oc2RwLCAiSm9pbmVkIGNsdXN0ZXIuIE5vdyBtb3VudGluZyBGUy4uLlxuIik7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBnZnMyX2xtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlnZnMyX3VubW91bnRfbG9ja3Byb3RvKCZzZHAtPnNkX2xvY2tzdHJ1Y3QpOworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsbSA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHM7CisJaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpICYmCisJICAgIGxtLT5sbV91bm1vdW50KQorCQlsbS0+bG1fdW5tb3VudChzZHApOwogfQogCiAvKioKQEAgLTExMTYsMTIgKzExNjgsMjAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAoY2hhciAqKWRhdGEsIDApOworCXNkcC0+c2RfYXJncy5hcl9xdW90YSA9IEdGUzJfUVVPVEFfREVGQVVMVDsKKwlzZHAtPnNkX2FyZ3MuYXJfZGF0YSA9IEdGUzJfREFUQV9ERUZBVUxUOworCisJZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAmc2RwLT5zZF9hcmdzLCBkYXRhKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogY2FuJ3QgcGFyc2UgbW91bnQgYXJndW1lbnRzXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAorCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQorICAgICAgICAgICAgICAgIHNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisKIAlzYi0+c19tYWdpYyA9IEdGUzJfTUFHSUM7CiAJc2ItPnNfb3AgPSAmZ2ZzMl9zdXBlcl9vcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJmdmczJfZXhwb3J0X29wczsKQEAgLTExOTksNiArMTI1OSw4IEBACiAJCWRwdXQoc2RwLT5zZF9yb290X2Rpcik7CiAJaWYgKHNkcC0+c2RfbWFzdGVyX2RpcikKIAkJZHB1dChzZHAtPnNkX21hc3Rlcl9kaXIpOworCWlmIChzYi0+c19yb290KQorCQlkcHV0KHNiLT5zX3Jvb3QpOwogCXNiLT5zX3Jvb3QgPSBOVUxMOwogZmFpbF9sb2NraW5nOgogCWluaXRfbG9ja2luZyhzZHAsICZtb3VudF9naCwgVU5ETyk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19pbm9kZS5jIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwppbmRleCA0OTg3NzU0Li5hYmQ1NDI5IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19pbm9kZS5jCisrKyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmllbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfc3VwZXIuYyBiL2ZzL2dmczIvb3BzX3N1cGVyLmMKaW5kZXggMzIwMzIzZC4uNDU4MDE5NSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfc3VwZXIuYworKysgYi9mcy9nZnMyL29wc19zdXBlci5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtMjcsNyArMjYsNiBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJsb2cuaCIKLSNpbmNsdWRlICJtb3VudC5oIgogI2luY2x1ZGUgInF1b3RhLmgiCiAjaW5jbHVkZSAicmVjb3ZlcnkuaCIKICNpbmNsdWRlICJyZ3JwLmgiCkBAIC00MCw2ICszOCw4IEBACiAjaW5jbHVkZSAiYm1hcC5oIgogI2luY2x1ZGUgIm1ldGFfaW8uaCIKIAorI2RlZmluZSBhcmdzX25lcShhMSwgYTIsIHgpICgoYTEpLT5hcl8jI3ggIT0gKGEyKS0+YXJfIyN4KQorCiAvKioKICAqIGdmczJfd3JpdGVfaW5vZGUgLSBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIHN0YWJsZSBvbiB0aGUgZGlzawogICogQGlub2RlOiBUaGUgaW5vZGUKQEAgLTQzNSwyNSArNDM1LDQ1IEBACiBzdGF0aWMgaW50IGdmczJfcmVtb3VudF9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgZ2ZzMl9hcmdzIGFyZ3MgPSBzZHAtPnNkX2FyZ3M7IC8qIERlZmF1bHQgdG8gY3VycmVudCBzZXR0aW5ncyAqLwogCWludCBlcnJvcjsKIAotCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgZGF0YSwgMSk7CisJZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAmYXJncywgZGF0YSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKKwkvKiBOb3QgYWxsb3dlZCB0byBjaGFuZ2UgbG9ja2luZyBkZXRhaWxzICovCisJaWYgKHN0cmNtcChhcmdzLmFyX2xvY2twcm90bywgc2RwLT5zZF9hcmdzLmFyX2xvY2twcm90bykgfHwKKwkgICAgc3RyY21wKGFyZ3MuYXJfbG9ja3RhYmxlLCBzZHAtPnNkX2FyZ3MuYXJfbG9ja3RhYmxlKSB8fAorCSAgICBzdHJjbXAoYXJncy5hcl9ob3N0ZGF0YSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTb21lIGZsYWdzIG11c3Qgbm90IGJlIGNoYW5nZWQgKi8KKwlpZiAoYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIHNwZWN0YXRvcikgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIGlnbm9yZV9sb2NhbF9mcykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIGxvY2FsZmxvY2tzKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgbG9jYWxjYWNoaW5nKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgbWV0YSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCiAJCSpmbGFncyB8PSBNU19SRE9OTFk7Ci0JZWxzZSB7Ci0JCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKLQkJCQllcnJvciA9IGdmczJfbWFrZV9mc19ybyhzZHApOwotCQl9IGVsc2UgaWYgKCEoKmZsYWdzICYgTVNfUkRPTkxZKSAmJgotCQkJICAgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCisJaWYgKChzYi0+c19mbGFncyBeICpmbGFncykgJiBNU19SRE9OTFkpIHsKKwkJaWYgKCpmbGFncyAmIE1TX1JET05MWSkKKwkJCWVycm9yID0gZ2ZzMl9tYWtlX2ZzX3JvKHNkcCk7CisJCWVsc2UKIAkJCWVycm9yID0gZ2ZzMl9tYWtlX2ZzX3J3KHNkcCk7Ci0JCX0KKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCX0KIAotCXJldHVybiBlcnJvcjsKKwlzZHAtPnNkX2FyZ3MgPSBhcmdzOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfcG9zaXhfYWNsKQorCQlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKwllbHNlCisJCXNiLT5zX2ZsYWdzICY9IH5NU19QT1NJWEFDTDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC01ODgsNiArNjA4LDggQEAKIAkJfQogCQlzZXFfcHJpbnRmKHMsICIsZGF0YT0lcyIsIHN0YXRlKTsKIAl9CisJaWYgKGFyZ3MtPmFyX2Rpc2NhcmQpCisJCXNlcV9wcmludGYocywgIixkaXNjYXJkIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuYyBiL2ZzL2dmczIvcXVvdGEuYwppbmRleCBiMDhkMDk2Li44ZDUzZjY2IDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmMKKysrIGIvZnMvZ2ZzMi9xdW90YS5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKQEAgLTgwLDYgKzc5LDUxIEBACiAJdTMyIHFjX2lkOwogfTsKIAorc3RhdGljIExJU1RfSEVBRChxZF9scnVfbGlzdCk7CitzdGF0aWMgYXRvbWljX3QgcWRfbHJ1X2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgc3BpbmxvY2tfdCBxZF9scnVfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworaW50IGdmczJfc2hyaW5rX3FkX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwOworCisJaWYgKG5yID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9GUykpCisJCXJldHVybiAtMTsKKworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOworCXdoaWxlIChuciAmJiAhbGlzdF9lbXB0eSgmcWRfbHJ1X2xpc3QpKSB7CisJCXFkID0gbGlzdF9lbnRyeShxZF9scnVfbGlzdC5uZXh0LAorCQkJCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEsIHFkX3JlY2xhaW0pOworCQlzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKKworCQkvKiBGcmVlIGZyb20gdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgbGlzdCAqLworCQlsaXN0X2RlbCgmcWQtPnFkX2xpc3QpOworCisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2NoYW5nZSk7CisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX3Nsb3RfY291bnQpOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9iaF9jb3VudCk7CisKKwkJZ2ZzMl9nbG9ja19wdXQocWQtPnFkX2dsKTsKKwkJYXRvbWljX2RlYygmc2RwLT5zZF9xdW90YV9jb3VudCk7CisKKwkJLyogRGVsZXRlIGl0IGZyb20gdGhlIGNvbW1vbiByZWNsYWltIGxpc3QgKi8KKwkJbGlzdF9kZWxfaW5pdCgmcWQtPnFkX3JlY2xhaW0pOworCQlhdG9taWNfZGVjKCZxZF9scnVfY291bnQpOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOworCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBxZCk7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOworCQluci0tOworCX0KKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOworCitvdXQ6CisJcmV0dXJuIChhdG9taWNfcmVhZCgmcWRfbHJ1X2NvdW50KSAqIHN5c2N0bF92ZnNfY2FjaGVfcHJlc3N1cmUpIC8gMTAwOworfQorCiBzdGF0aWMgdTY0IHFkMm9mZnNldChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKIAl1NjQgb2Zmc2V0OwpAQCAtMTAwLDIyICsxNDQsMTggQEAKIAlpZiAoIXFkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXFkLT5xZF9jb3VudCA9IDE7CisJYXRvbWljX3NldCgmcWQtPnFkX2NvdW50LCAxKTsKIAlxZC0+cWRfaWQgPSBpZDsKIAlpZiAodXNlcikKIAkJc2V0X2JpdChRREZfVVNFUiwgJnFkLT5xZF9mbGFncyk7CiAJcWQtPnFkX3Nsb3QgPSAtMTsKKwlJTklUX0xJU1RfSEVBRCgmcWQtPnFkX3JlY2xhaW0pOwogCiAJZXJyb3IgPSBnZnMyX2dsb2NrX2dldChzZHAsIDIgKiAodTY0KWlkICsgIXVzZXIsCiAJCQkgICAgICAmZ2ZzMl9xdW90YV9nbG9wcywgQ1JFQVRFLCAmcWQtPnFkX2dsKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKIAotCWVycm9yID0gZ2ZzMl9sdmJfaG9sZChxZC0+cWRfZ2wpOwotCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWw7Ci0KIAkqcWRwID0gcWQ7CiAKIAlyZXR1cm4gMDsKQEAgLTEzNSwxMSArMTc1LDE3IEBACiAKIAlmb3IgKDs7KSB7CiAJCWZvdW5kID0gMDsKLQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShxZCwgJnNkcC0+c2RfcXVvdGFfbGlzdCwgcWRfbGlzdCkgewogCQkJaWYgKHFkLT5xZF9pZCA9PSBpZCAmJgogCQkJICAgICF0ZXN0X2JpdChRREZfVVNFUiwgJnFkLT5xZF9mbGFncykgPT0gIXVzZXIpIHsKLQkJCQlxZC0+cWRfY291bnQrKzsKKwkJCQlpZiAoIWF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpICYmCisJCQkJICAgICFsaXN0X2VtcHR5KCZxZC0+cWRfcmVjbGFpbSkpIHsKKwkJCQkJLyogUmVtb3ZlIGl0IGZyb20gcmVjbGFpbSBsaXN0ICovCisJCQkJCWxpc3RfZGVsX2luaXQoJnFkLT5xZF9yZWNsYWltKTsKKwkJCQkJYXRvbWljX2RlYygmcWRfbHJ1X2NvdW50KTsKKwkJCQl9CisJCQkJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNTUsMTEgKzIwMSwxMSBAQAogCQkJbmV3X3FkID0gTlVMTDsKIAkJfQogCi0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJCWlmIChxZCB8fCAhY3JlYXRlKSB7CiAJCQlpZiAobmV3X3FkKSB7Ci0JCQkJZ2ZzMl9sdmJfdW5ob2xkKG5ld19xZC0+cWRfZ2wpOworCQkJCWdmczJfZ2xvY2tfcHV0KG5ld19xZC0+cWRfZ2wpOwogCQkJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIG5ld19xZCk7CiAJCQl9CiAJCQkqcWRwID0gcWQ7CkBAIC0xNzUsMjEgKzIyMSwxOCBAQAogc3RhdGljIHZvaWQgcWRfaG9sZChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwotCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX2NvdW50KTsKLQlxZC0+cWRfY291bnQrKzsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlnZnMyX2Fzc2VydChzZHAsIGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKTsKKwlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogfQogCiBzdGF0aWMgdm9pZCBxZF9wdXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0JZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfY291bnQpOwotCWlmICghLS1xZC0+cWRfY291bnQpCi0JCXFkLT5xZF9sYXN0X3RvdWNoZWQgPSBqaWZmaWVzOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZxZC0+cWRfY291bnQsICZxZF9scnVfbG9jaykpIHsKKwkJLyogQWRkIHRvIHRoZSByZWNsYWltIGxpc3QgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcWQtPnFkX3JlY2xhaW0sICZxZF9scnVfbGlzdCk7CisJCWF0b21pY19pbmMoJnFkX2xydV9jb3VudCk7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CisJfQogfQogCiBzdGF0aWMgaW50IHNsb3RfZ2V0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQpAQCAtMTk4LDEwICsyNDEsMTAgQEAKIAl1bnNpZ25lZCBpbnQgYywgbyA9IDAsIGI7CiAJdW5zaWduZWQgY2hhciBieXRlID0gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmIChxZC0+cWRfc2xvdF9jb3VudCsrKSB7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIyNSwxMyArMjY4LDEzIEBACiAKIAlzZHAtPnNkX3F1b3RhX2JpdG1hcFtjXVtvXSB8PSAxIDw8IGI7CiAKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJcmV0dXJuIDA7CiAKIGZhaWw6CiAJcWQtPnFkX3Nsb3RfY291bnQtLTsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCXJldHVybiAtRU5PU1BDOwogfQogCkBAIC0yMzksMjMgKzI4MiwyMyBAQAogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJcWQtPnFkX3Nsb3RfY291bnQrKzsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzbG90X3B1dChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCWlmICghLS1xZC0+cWRfc2xvdF9jb3VudCkgewogCQlnZnMyX2ljYml0X211bmdlKHNkcCwgc2RwLT5zZF9xdW90YV9iaXRtYXAsIHFkLT5xZF9zbG90LCAwKTsKIAkJcWQtPnFkX3Nsb3QgPSAtMTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIH0KIAogc3RhdGljIGludCBiaF9nZXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCkBAIC0zMzAsNyArMzczLDcgQEAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShxZCwgJnNkcC0+c2RfcXVvdGFfbGlzdCwgcWRfbGlzdCkgewogCQlpZiAodGVzdF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncykgfHwKQEAgLTM0MSw4ICszODQsOCBAQAogCQlsaXN0X21vdmVfdGFpbCgmcWQtPnFkX2xpc3QsICZzZHAtPnNkX3F1b3RhX2xpc3QpOwogCiAJCXNldF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncyk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY291bnQpOwotCQlxZC0+cWRfY291bnQrKzsKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKTsKKwkJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIAkJcWQtPnFkX2NoYW5nZV9zeW5jID0gcWQtPnFkX2NoYW5nZTsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAkJcWQtPnFkX3Nsb3RfY291bnQrKzsKQEAgLTM1NCw3ICszOTcsNyBAQAogCWlmICghZm91bmQpCiAJCXFkID0gTlVMTDsKIAotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAocWQpIHsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jaGFuZ2Vfc3luYyk7CkBAIC0zNzksMjQgKzQyMiwyNCBAQAogCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAodGVzdF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncykgfHwKIAkgICAgIXRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKSB7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlsaXN0X21vdmVfdGFpbCgmcWQtPnFkX2xpc3QsICZzZHAtPnNkX3F1b3RhX2xpc3QpOwogCiAJc2V0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKTsKLQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NvdW50KTsKLQlxZC0+cWRfY291bnQrKzsKKwlnZnMyX2Fzc2VydF93YXJuKHNkcCwgYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpOworCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJcWQtPnFkX2NoYW5nZV9zeW5jID0gcWQtPnFkX2NoYW5nZTsKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCXFkLT5xZF9zbG90X2NvdW50Kys7CiAKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jaGFuZ2Vfc3luYyk7CiAJaWYgKGJoX2dldChxZCkpIHsKQEAgLTU1Niw5ICs1OTksOSBAQAogCXggPSBiZTY0X3RvX2NwdShxYy0+cWNfY2hhbmdlKSArIGNoYW5nZTsKIAlxYy0+cWNfY2hhbmdlID0gY3B1X3RvX2JlNjQoeCk7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJcWQtPnFkX2NoYW5nZSA9IHg7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmICgheCkgewogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpOwpAQCAtODAyLDggKzg0NSw4IEBACiAJCWxvZmZfdCBwb3M7CiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KHFfZ2gpOwogCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChxZC0+cWRfZ2wsCi0JCQkJCSAgTE1fU1RfRVhDTFVTSVZFLCBHTF9OT0NBQ0hFLAotCQkJCQkgIHFfZ2gpOworCQkJCQkgICBMTV9TVF9FWENMVVNJVkUsIEdMX05PQ0FDSEUsCisJCQkJCSAgIHFfZ2gpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTgyMCw3ICs4NjMsNiBAQAogCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKIAotCiAJCWdmczJfcXVvdGFfaW4oJnEsIGJ1Zik7CiAJCXFsdmIgPSAoc3RydWN0IGdmczJfcXVvdGFfbHZiICopcWQtPnFkX2dsLT5nbF9sdmI7CiAJCXFsdmItPnFiX21hZ2ljID0gY3B1X3RvX2JlMzIoR0ZTMl9NQUdJQyk7CkBAIC04OTAsOSArOTMyLDkgQEAKIAlpZiAoIXFkLT5xZF9xYi5xYl9saW1pdCkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJdmFsdWUgPSBxZC0+cWRfY2hhbmdlOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlzcGluX2xvY2soJmd0LT5ndF9zcGluKTsKIAludW0gPSBndC0+Z3RfcXVvdGFfc2NhbGVfbnVtOwpAQCAtOTg1LDkgKzEwMjcsOSBAQAogCQkJY29udGludWU7CiAKIAkJdmFsdWUgPSAoczY0KWJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl92YWx1ZSk7Ci0JCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCXZhbHVlICs9IHFkLT5xZF9jaGFuZ2U7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJCWlmIChiZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfbGltaXQpICYmIChzNjQpYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSA8IHZhbHVlKSB7CiAJCQlwcmludF9tZXNzYWdlKHFkLCAiZXhjZWVkZWQiKTsKQEAgLTExNzEsMTMgKzEyMTMsMTIgQEAKIAkJCXFkLT5xZF9jaGFuZ2UgPSBxYy5xY19jaGFuZ2U7CiAJCQlxZC0+cWRfc2xvdCA9IHNsb3Q7CiAJCQlxZC0+cWRfc2xvdF9jb3VudCA9IDE7Ci0JCQlxZC0+cWRfbGFzdF90b3VjaGVkID0gamlmZmllczsKIAotCQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCQlnZnMyX2ljYml0X211bmdlKHNkcCwgc2RwLT5zZF9xdW90YV9iaXRtYXAsIHNsb3QsIDEpOwogCQkJbGlzdF9hZGQoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAkJCWF0b21pY19pbmMoJnNkcC0+c2RfcXVvdGFfY291bnQpOwotCQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJCQlmb3VuZCsrOwogCQl9CkBAIC0xMTk3LDczICsxMjM4LDQ4IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX3F1b3RhX3NjYW4oc3RydWN0IGdmczJfc2JkICpzZHApCi17Ci0Jc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQsICpzYWZlOwotCUxJU1RfSEVBRChkZWFkKTsKLQotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocWQsIHNhZmUsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKLQkJaWYgKCFxZC0+cWRfY291bnQgJiYKLQkJICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcWQtPnFkX2xhc3RfdG91Y2hlZCArCi0JCQkgICAgICAgIGdmczJfdHVuZV9nZXQoc2RwLCBndF9xdW90YV9jYWNoZV9zZWNzKSAqIEhaKSkgewotCQkJbGlzdF9tb3ZlKCZxZC0+cWRfbGlzdCwgJmRlYWQpOwotCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsCi0JCQkJCSBhdG9taWNfcmVhZCgmc2RwLT5zZF9xdW90YV9jb3VudCkgPiAwKTsKLQkJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkZWFkKSkgewotCQlxZCA9IGxpc3RfZW50cnkoZGVhZC5uZXh0LCBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9saXN0KTsKLQkJbGlzdF9kZWwoJnFkLT5xZF9saXN0KTsKLQotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9zbG90X2NvdW50KTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfYmhfY291bnQpOwotCi0JCWdmczJfbHZiX3VuaG9sZChxZC0+cWRfZ2wpOwotCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBxZCk7Ci0JfQotfQotCiB2b2lkIGdmczJfcXVvdGFfY2xlYW51cChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnNkcC0+c2RfcXVvdGFfbGlzdDsKIAlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZDsKIAl1bnNpZ25lZCBpbnQgeDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJcWQgPSBsaXN0X2VudHJ5KGhlYWQtPnByZXYsIHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEsIHFkX2xpc3QpOwogCi0JCWlmIChxZC0+cWRfY291bnQgPiAxIHx8Ci0JCSAgICAocWQtPnFkX2NvdW50ICYmICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpID4gMSB8fAorCQkgICAgKGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpICYmCisJCSAgICAgIXRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKSkgewogCQkJbGlzdF9tb3ZlKCZxZC0+cWRfbGlzdCwgaGVhZCk7Ci0JCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJCQlzY2hlZHVsZSgpOwotCQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWxpc3RfZGVsKCZxZC0+cWRfbGlzdCk7CisJCS8qIEFsc28gcmVtb3ZlIGlmIHRoaXMgcWQgZXhpc3RzIGluIHRoZSByZWNsYWltIGxpc3QgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZxZC0+cWRfcmVjbGFpbSkpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnFkLT5xZF9yZWNsYWltKTsKKwkJCWF0b21pY19kZWMoJnFkX2xydV9jb3VudCk7CisJCX0KIAkJYXRvbWljX2RlYygmc2RwLT5zZF9xdW90YV9jb3VudCk7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCi0JCWlmICghcWQtPnFkX2NvdW50KSB7CisJCWlmICghYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpIHsKIAkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2NoYW5nZSk7CiAJCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9zbG90X2NvdW50KTsKIAkJfSBlbHNlCiAJCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX3Nsb3RfY291bnQgPT0gMSk7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2JoX2NvdW50KTsKIAotCQlnZnMyX2x2Yl91bmhvbGQocWQtPnFkX2dsKTsKKwkJZ2ZzMl9nbG9ja19wdXQocWQtPnFkX2dsKTsKIAkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOwogCi0JCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIWF0b21pY19yZWFkKCZzZHAtPnNkX3F1b3RhX2NvdW50KSk7CiAKQEAgLTEzNDEsOSArMTM1Nyw2IEBACiAJCXF1b3RhZF9jaGVja190aW1lbyhzZHAsICJzeW5jIiwgZ2ZzMl9xdW90YV9zeW5jLCB0LAogCQkJCSAgICZxdW90YWRfdGltZW8sICZ0dW5lLT5ndF9xdW90YV9xdWFudHVtKTsKIAotCQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgdHVybmVkIGludG8gYSBzaHJpbmtlciAqLwotCQlnZnMyX3F1b3RhX3NjYW4oc2RwKTsKLQogCQkvKiBDaGVjayBmb3IgJiByZWNvdmVyIHBhcnRpYWxseSB0cnVuY2F0ZWQgaW5vZGVzICovCiAJCXF1b3RhZF9jaGVja190cnVuY19saXN0KHNkcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuaCBiL2ZzL2dmczIvcXVvdGEuaAppbmRleCBjZWM5MDMyLi4wZmE1ZmE2IDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmgKKysrIGIvZnMvZ2ZzMi9xdW90YS5oCkBAIC00OSw0ICs0OSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorZXh0ZXJuIGludCBnZnMyX3Nocmlua19xZF9tZW1vcnkoaW50IG5yLCBnZnBfdCBnZnBfbWFzayk7CisKICNlbmRpZiAvKiBfX1FVT1RBX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmVjb3ZlcnkuYyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwppbmRleCBlZmQwOWMzLi4yNDdlOGY3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JlY292ZXJ5LmMKKysrIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KIApAQCAtNDI3LDIwICs0MjYsMjMgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBnZnMyX2xtX3JlY292ZXJ5X2RvbmUoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQsCi0JCQkJICB1bnNpZ25lZCBpbnQgbWVzc2FnZSkKK3N0YXRpYyB2b2lkIGdmczJfcmVjb3ZlcnlfZG9uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWVzc2FnZSkKIHsKLQlpZiAoIXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3JlY292ZXJ5X2RvbmUpCi0JCXJldHVybjsKLQotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcmVjb3ZlcnlfZG9uZSgKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIGppZCwgbWVzc2FnZSk7CisJY2hhciBlbnZfamlkWzIwXTsKKwljaGFyIGVudl9zdGF0dXNbMjBdOworCWNoYXIgKmVudnBbXSA9IHsgZW52X2ppZCwgZW52X3N0YXR1cywgTlVMTCB9OworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisgICAgICAgIGxzLT5sc19yZWNvdmVyX2ppZF9kb25lID0gamlkOworICAgICAgICBscy0+bHNfcmVjb3Zlcl9qaWRfc3RhdHVzID0gbWVzc2FnZTsKKwlzcHJpbnRmKGVudl9qaWQsICJKSUQ9JWQiLCBqaWQpOworCXNwcmludGYoZW52X3N0YXR1cywgIlJFQ09WRVJZPSVzIiwKKwkJbWVzc2FnZSA9PSBMTV9SRF9TVUNDRVNTID8gIkRvbmUiIDogIkZhaWxlZCIpOworICAgICAgICBrb2JqZWN0X3VldmVudF9lbnYoJnNkcC0+c2Rfa29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCi0KIC8qKgotICogZ2ZzMl9yZWNvdmVyX2pvdXJuYWwgLSByZWNvdmVyeSBhIGdpdmVuIGpvdXJuYWwKKyAqIGdmczJfcmVjb3Zlcl9qb3VybmFsIC0gcmVjb3ZlciBhIGdpdmVuIGpvdXJuYWwKICAqIEBqZDogdGhlIHN0cnVjdCBnZnMyX2pkZXNjIGRlc2NyaWJpbmcgdGhlIGpvdXJuYWwKICAqCiAgKiBBY3F1aXJlIHRoZSBqb3VybmFsJ3MgbG9jaywgY2hlY2sgdG8gc2VlIGlmIHRoZSBqb3VybmFsIGlzIGNsZWFuLCBhbmQKQEAgLTU2MSw3ICs1NjMsNyBAQAogCWlmIChqZC0+amRfamlkICE9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqaV9naCk7CiAKLQlnZnMyX2xtX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9TVUNDRVNTKTsKKwlnZnMyX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9TVUNDRVNTKTsKIAogCWlmIChqZC0+amRfamlkICE9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqX2doKTsKQEAgLTU4MSw3ICs1ODMsNyBAQAogCWZzX2luZm8oc2RwLCAiamlkPSV1OiAlc1xuIiwgamQtPmpkX2ppZCwgKGVycm9yKSA/ICJGYWlsZWQiIDogIkRvbmUiKTsKIAogZmFpbDoKLQlnZnMyX2xtX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9HQVZFVVApOworCWdmczJfcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX0dBVkVVUCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuYyBiL2ZzL2dmczIvcmdycC5jCmluZGV4IDhiMDFjNjMuLmYwM2QwMjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5jCisrKyBiL2ZzL2dmczIvcmdycC5jCkBAIC0xMyw4ICsxMyw4IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTEzMiw4MSArMTMyLDkwIEBACiB9CiAKIC8qKgorICogZ2ZzMl9iaXRfc2VhcmNoCisgKiBAcHRyOiBQb2ludGVyIHRvIGJpdG1hcCBkYXRhCisgKiBAbWFzazogTWFzayB0byB1c2UgKG5vcm1hbGx5IDB4NTU1NTUuLi4uIGJ1dCBhZGp1c3RlZCBmb3Igc2VhcmNoIHN0YXJ0KQorICogQHN0YXRlOiBUaGUgc3RhdGUgd2UgYXJlIHNlYXJjaGluZyBmb3IKKyAqCisgKiBXZSB4b3IgdGhlIGJpdG1hcCBkYXRhIHdpdGggYSBwYXR0ZXIgd2hpY2ggaXMgdGhlIGJpdHdpc2Ugb3Bwb3NpdGUKKyAqIG9mIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLCB0aGlzIGdpdmVzIHJpc2UgdG8gYSBwYXR0ZXJuIG9mIG9uZXMKKyAqIHdoZXJldmVyIHRoZXJlIGlzIGEgbWF0Y2guIFNpbmNlIHdlIGhhdmUgdHdvIGJpdHMgcGVyIGVudHJ5LCB3ZQorICogdGFrZSB0aGlzIHBhdHRlcm4sIHNoaWZ0IGl0IGRvd24gYnkgb25lIHBsYWNlIGFuZCB0aGVuIGFuZCBpdCB3aXRoCisgKiB0aGUgb3JpZ2luYWwuIEFsbCB0aGUgZXZlbiBiaXQgcG9zaXRpb25zICgwLDIsNCwgZXRjKSB0aGVuIHJlcHJlc2VudAorICogc3VjY2Vzc2Z1bCBtYXRjaGVzLCBzbyB3ZSBtYXNrIHdpdGggMHg1NTU1NS4uLi4uIHRvIHJlbW92ZSB0aGUgdW53YW50ZWQKKyAqIG9kZCBiaXQgcG9zaXRpb25zLgorICoKKyAqIFRoaXMgYWxsb3dzIHNlYXJjaGluZyBvZiBhIHdob2xlIHU2NCBhdCBvbmNlICgzMiBibG9ja3MpIHdpdGggYQorICogc2luZ2xlIHRlc3QgKG9uIDY0IGJpdCBhcmNoZXMpLgorICovCisKK3N0YXRpYyBpbmxpbmUgdTY0IGdmczJfYml0X3NlYXJjaChjb25zdCBfX2xlNjQgKnB0ciwgdTY0IG1hc2ssIHU4IHN0YXRlKQoreworCXU2NCB0bXA7CisJc3RhdGljIGNvbnN0IHU2NCBzZWFyY2hbXSA9IHsKKwkJWzBdID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMLAorCQlbMV0gPSAweGFhYWFhYWFhYWFhYWFhYWFVTEwsCisJCVsyXSA9IDB4NTU1NTU1NTU1NTU1NTU1NVVMTCwKKwkJWzNdID0gMHgwMDAwMDAwMDAwMDAwMDAwVUxMLAorCX07CisJdG1wID0gbGU2NF90b19jcHUoKnB0cikgXiBzZWFyY2hbc3RhdGVdOworCXRtcCAmPSAodG1wID4+IDEpOworCXRtcCAmPSBtYXNrOworCXJldHVybiB0bXA7Cit9CisKKy8qKgogICogZ2ZzMl9iaXRmaXQgLSBTZWFyY2ggYW4gcmdycCdzIGJpdG1hcCBidWZmZXIgdG8gZmluZCBhIGJpdC1wYWlyIHJlcHJlc2VudGluZwogICogICAgICAgYSBibG9jayBpbiBhIGdpdmVuIGFsbG9jYXRpb24gc3RhdGUuCiAgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIGJpdG1hcHMKLSAqIEBidWZsZW46IHRoZSBsZW5ndGggKGluIGJ5dGVzKSBvZiB0aGUgYnVmZmVyCisgKiBAbGVuOiB0aGUgbGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIGJ1ZmZlcgogICogQGdvYWw6IHN0YXJ0IHNlYXJjaCBhdCB0aGlzIGJsb2NrJ3MgYml0LXBhaXIgKHdpdGhpbiBAYnVmZmVyKQotICogQG9sZF9zdGF0ZTogR0ZTMl9CTEtTVF9YWFggdGhlIHN0YXRlIG9mIHRoZSBibG9jayB3ZSdyZSBsb29raW5nIGZvci4KKyAqIEBzdGF0ZTogR0ZTMl9CTEtTVF9YWFggdGhlIHN0YXRlIG9mIHRoZSBibG9jayB3ZSdyZSBsb29raW5nIGZvci4KICAqCiAgKiBTY29wZSBvZiBAZ29hbCBhbmQgcmV0dXJuZWQgYmxvY2sgbnVtYmVyIGlzIG9ubHkgd2l0aGluIHRoaXMgYml0bWFwIGJ1ZmZlciwKICAqIG5vdCBlbnRpcmUgcmdycCBvciBmaWxlc3lzdGVtLiAgQGJ1ZmZlciB3aWxsIGJlIG9mZnNldCBmcm9tIHRoZSBhY3R1YWwKLSAqIGJlZ2lubmluZyBvZiBhIGJpdG1hcCBibG9jayBidWZmZXIsIHNraXBwaW5nIGFueSBoZWFkZXIgc3RydWN0dXJlcy4KKyAqIGJlZ2lubmluZyBvZiBhIGJpdG1hcCBibG9jayBidWZmZXIsIHNraXBwaW5nIGFueSBoZWFkZXIgc3RydWN0dXJlcywgYnV0CisgKiBoZWFkZXJzIGFyZSBhbHdheXMgYSBtdWx0aXBsZSBvZiA2NCBiaXRzIGxvbmcgc28gdGhhdCB0aGUgYnVmZmVyIGlzCisgKiBhbHdheXMgYWxpZ25lZCB0byBhIDY0IGJpdCBib3VuZGFyeS4KKyAqCisgKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIGluIGJ5dGVzLCBidXQgaXMgaXQgYXNzdW1lZCB0aGF0IGl0IGlzCisgKiBhbHdheXMgb2sgdG8gdG8gcmVhZCBhIGNvbXBsZXRlIG11bHRpcGxlIG9mIDY0IGJpdHMgYXQgdGhlIGVuZAorICogb2YgdGhlIGJsb2NrIGluIGNhc2UgdGhlIGVuZCBpcyBubyBhbGlnbmVkIHRvIGEgbmF0dXJhbCBib3VuZGFyeS4KICAqCiAgKiBSZXR1cm46IHRoZSBibG9jayBudW1iZXIgKGJpdG1hcCBidWZmZXIgc2NvcGUpIHRoYXQgd2FzIGZvdW5kCiAgKi8KIAotc3RhdGljIHUzMiBnZnMyX2JpdGZpdChjb25zdCB1OCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCB1MzIgZ29hbCwKLQkJICAgICAgIHU4IG9sZF9zdGF0ZSkKK3N0YXRpYyB1MzIgZ2ZzMl9iaXRmaXQoY29uc3QgdTggKmJ1ZiwgY29uc3QgdW5zaWduZWQgaW50IGxlbiwKKwkJICAgICAgIHUzMiBnb2FsLCB1OCBzdGF0ZSkKIHsKLQljb25zdCB1OCAqYnl0ZSwgKnN0YXJ0LCAqZW5kOwotCWludCBiaXQsIHN0YXJ0Yml0OwotCXUzMiBnMSwgZzIsIG1pc2FsaWduZWQ7Ci0JdW5zaWduZWQgbG9uZyAqcGxvbmc7Ci0JdW5zaWduZWQgbG9uZyBsc2tpcHZhbDsKKwl1MzIgc3BvaW50ID0gKGdvYWwgPDwgMSkgJiAoKDgqc2l6ZW9mKHU2NCkpIC0gMSk7CisJY29uc3QgX19sZTY0ICpwdHIgPSAoKF9fbGU2NCAqKWJ1ZikgKyAoZ29hbCA+PiA1KTsKKwljb25zdCBfX2xlNjQgKmVuZCA9IChfX2xlNjQgKikoYnVmICsgQUxJR04obGVuLCBzaXplb2YodTY0KSkpOworCXU2NCB0bXA7CisJdTY0IG1hc2sgPSAweDU1NTU1NTU1NTU1NTU1NTVVTEw7CisJdTMyIGJpdDsKIAotCWxza2lwdmFsID0gKG9sZF9zdGF0ZSAmIEdGUzJfQkxLU1RfVVNFRCkgPyBMQklUU0tJUDAwIDogTEJJVFNLSVA1NTsKLQlnMSA9IChnb2FsIC8gR0ZTMl9OQkJZKTsKLQlzdGFydCA9IGJ1ZmZlciArIGcxOwotCWJ5dGUgPSBzdGFydDsKLSAgICAgICAgZW5kID0gYnVmZmVyICsgYnVmbGVuOwotCWcyID0gQUxJR04oZzEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JcGxvbmcgPSAodW5zaWduZWQgbG9uZyAqKShidWZmZXIgKyBnMik7Ci0Jc3RhcnRiaXQgPSBiaXQgPSAoZ29hbCAlIEdGUzJfTkJCWSkgKiBHRlMyX0JJVF9TSVpFOwotCW1pc2FsaWduZWQgPSBnMiAtIGcxOwotCWlmICghbWlzYWxpZ25lZCkKLQkJZ290byB1bG9uZ19hbGlnbmVkOwotLyogcGFyc2UgdGhlIGJpdG1hcCBhIGJ5dGUgYXQgYSB0aW1lICovCi1taXNhbGlnbmVkOgotCXdoaWxlIChieXRlIDwgZW5kKSB7Ci0JCWlmICgoKCpieXRlID4+IGJpdCkgJiBHRlMyX0JJVF9NQVNLKSA9PSBvbGRfc3RhdGUpIHsKLQkJCXJldHVybiBnb2FsICsKLQkJCQkoKChieXRlIC0gc3RhcnQpICogR0ZTMl9OQkJZKSArCi0JCQkJICgoYml0IC0gc3RhcnRiaXQpID4+IDEpKTsKLQkJfQotCQliaXQgKz0gR0ZTMl9CSVRfU0laRTsKLQkJaWYgKGJpdCA+PSBHRlMyX05CQlkgKiBHRlMyX0JJVF9TSVpFKSB7Ci0JCQliaXQgPSAwOwotCQkJYnl0ZSsrOwotCQkJbWlzYWxpZ25lZC0tOwotCQkJaWYgKCFtaXNhbGlnbmVkKSB7Ci0JCQkJcGxvbmcgPSAodW5zaWduZWQgbG9uZyAqKWJ5dGU7Ci0JCQkJZ290byB1bG9uZ19hbGlnbmVkOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBCRklUTk9FTlQ7CisJQlVHX09OKHN0YXRlID4gMyk7CiAKLS8qIHBhcnNlIHRoZSBiaXRtYXAgYSB1bnNpZ25lZCBsb25nIGF0IGEgdGltZSAqLwotdWxvbmdfYWxpZ25lZDoKLQkvKiBTdG9wIGF0ICJlbmQgLSAxIiBvciBlbHNlIHByZWZldGNoIGNhbiBnbyBwYXN0IHRoZSBlbmQgYW5kIHNlZ2ZhdWx0LgotCSAgIFdlIGNvdWxkICJpZiIgaXQgYnV0IHdlJ2QgbG9zZSBzb21lIG9mIHRoZSBwZXJmb3JtYW5jZSBnYWluZWQuCi0JICAgVGhpcyB3YXkgd2lsbCBvbmx5IHNsb3cgZG93biBzZWFyY2hpbmcgdGhlIHZlcnkgbGFzdCA0LzggYnl0ZXMKLQkgICBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlLiAgSSd2ZSBleHBlcmltZW50ZWQgd2l0aCBzZXZlcmFsIHdheXMKLQkgICBvZiB3cml0aW5nIHRoaXMgc2VjdGlvbiBzdWNoIGFzIHVzaW5nIGFuIGVsc2UgYmVmb3JlIHRoZSBnb3RvCi0JICAgYnV0IHRoaXMgb25lIHNlZW1zIHRvIGJlIHRoZSBmYXN0ZXN0LiAqLwotCXdoaWxlICgodW5zaWduZWQgY2hhciAqKXBsb25nIDwgZW5kIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7Ci0JCXByZWZldGNoKHBsb25nICsgMSk7Ci0JCWlmICgoKCpwbG9uZykgJiBMQklUTUFTSykgIT0gbHNraXB2YWwpCi0JCQlicmVhazsKLQkJcGxvbmcrKzsKKwkvKiBNYXNrIG9mZiBiaXRzIHdlIGRvbid0IGNhcmUgYWJvdXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2ggKi8KKwltYXNrIDw8PSBzcG9pbnQ7CisJdG1wID0gZ2ZzMl9iaXRfc2VhcmNoKHB0ciwgbWFzaywgc3RhdGUpOworCXB0cisrOworCXdoaWxlKHRtcCA9PSAwICYmIHB0ciA8IGVuZCkgeworCQl0bXAgPSBnZnMyX2JpdF9zZWFyY2gocHRyLCAweDU1NTU1NTU1NTU1NTU1NTVVTEwsIHN0YXRlKTsKKwkJcHRyKys7CiAJfQotCWlmICgodW5zaWduZWQgY2hhciAqKXBsb25nIDwgZW5kKSB7Ci0JCWJ5dGUgPSAoY29uc3QgdTggKilwbG9uZzsKLQkJbWlzYWxpZ25lZCArPSBzaXplb2YodW5zaWduZWQgbG9uZykgLSAxOwotCQlnb3RvIG1pc2FsaWduZWQ7Ci0JfQotCXJldHVybiBCRklUTk9FTlQ7CisJLyogTWFzayBvZmYgYW55IGJpdHMgd2hpY2ggYXJlIG1vcmUgdGhhbiBsZW4gYnl0ZXMgZnJvbSB0aGUgc3RhcnQgKi8KKwlpZiAocHRyID09IGVuZCAmJiAobGVuICYgKHNpemVvZih1NjQpIC0gMSkpKQorCQl0bXAgJj0gKCgodTY0KX4wKSA+PiAoNjQgLSA4KihsZW4gJiAoc2l6ZW9mKHU2NCkgLSAxKSkpKTsKKwkvKiBEaWRuJ3QgZmluZCBhbnl0aGluZywgc28gcmV0dXJuICovCisJaWYgKHRtcCA9PSAwKQorCQlyZXR1cm4gQkZJVE5PRU5UOworCXB0ci0tOworCWJpdCA9IGZsczY0KHRtcCk7CisJYml0LS07CQkvKiBmbHM2NCBhbHdheXMgYWRkcyBvbmUgdG8gdGhlIGJpdCBjb3VudCAqLworCWJpdCAvPSAyOwkvKiB0d28gYml0cyBwZXIgZW50cnkgaW4gdGhlIGJpdG1hcCAqLworCXJldHVybiAoKChjb25zdCB1bnNpZ25lZCBjaGFyICopcHRyIC0gYnVmKSAqIEdGUzJfTkJCWSkgKyBiaXQ7CiB9CiAKIC8qKgpAQCAtODMxLDYgKzg0MCw1OCBAQAogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3JpbmRleF9zcGluKTsKIH0KIAorc3RhdGljIHZvaWQgZ2ZzMl9yZ3JwX3NlbmRfZGlzY2FyZHMoc3RydWN0IGdmczJfc2JkICpzZHAsIHU2NCBvZmZzZXQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBnZnMyX2JpdG1hcCAqYmkpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNkcC0+c2RfdmZzOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBzYi0+c19iZGV2OworCWNvbnN0IHVuc2lnbmVkIGludCBzZWN0c19wZXJfYmxrID0gc2RwLT5zZF9zYi5zYl9ic2l6ZSAvCisJCQkJCSAgIGJkZXZfaGFyZHNlY3Rfc2l6ZShzYi0+c19iZGV2KTsKKwl1NjQgYmxrOworCXNlY3Rvcl90IHN0YXJ0ID0gMDsKKwlzZWN0b3JfdCBucl9zZWN0cyA9IDA7CisJaW50IHJ2OworCXVuc2lnbmVkIGludCB4OworCisJZm9yICh4ID0gMDsgeCA8IGJpLT5iaV9sZW47IHgrKykgeworCQljb25zdCB1OCAqb3JpZyA9IGJpLT5iaV9iaC0+Yl9kYXRhICsgYmktPmJpX29mZnNldCArIHg7CisJCWNvbnN0IHU4ICpjbG9uZSA9IGJpLT5iaV9jbG9uZSArIGJpLT5iaV9vZmZzZXQgKyB4OworCQl1OCBkaWZmID0gfigqb3JpZyB8ICgqb3JpZyA+PiAxKSkgJiAoKmNsb25lIHwgKCpjbG9uZSA+PiAxKSk7CisJCWRpZmYgJj0gMHg1NTsKKwkJaWYgKGRpZmYgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlibGsgPSBvZmZzZXQgKyAoKGJpLT5iaV9zdGFydCArIHgpICogR0ZTMl9OQkJZKTsKKwkJYmxrICo9IHNlY3RzX3Blcl9ibGs7IC8qIGNvbnZlcnQgdG8gc2VjdG9ycyAqLworCQl3aGlsZShkaWZmKSB7CisJCQlpZiAoZGlmZiAmIDEpIHsKKwkJCQlpZiAobnJfc2VjdHMgPT0gMCkKKwkJCQkJZ290byBzdGFydF9uZXdfZXh0ZW50OworCQkJCWlmICgoc3RhcnQgKyBucl9zZWN0cykgIT0gYmxrKSB7CisJCQkJCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsCisJCQkJCQkJICAgIG5yX3NlY3RzLCBHRlBfTk9GUyk7CisJCQkJCWlmIChydikKKwkJCQkJCWdvdG8gZmFpbDsKKwkJCQkJbnJfc2VjdHMgPSAwOworc3RhcnRfbmV3X2V4dGVudDoKKwkJCQkJc3RhcnQgPSBibGs7CisJCQkJfQorCQkJCW5yX3NlY3RzICs9IHNlY3RzX3Blcl9ibGs7CisJCQl9CisJCQlkaWZmID4+PSAyOworCQkJYmxrICs9IHNlY3RzX3Blcl9ibGs7CisJCX0KKwl9CisJaWYgKG5yX3NlY3RzKSB7CisJCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIG5yX3NlY3RzLCBHRlBfTk9GUyk7CisJCWlmIChydikKKwkJCWdvdG8gZmFpbDsKKwl9CisJcmV0dXJuOworZmFpbDoKKwlmc193YXJuKHNkcCwgImVycm9yICVkIG9uIGRpc2NhcmQgcmVxdWVzdCwgdHVybmluZyBkaXNjYXJkcyBvZmYgZm9yIHRoaXMgZmlsZXN5c3RlbSIsIHJ2KTsKKwlzZHAtPnNkX2FyZ3MuYXJfZGlzY2FyZCA9IDA7Cit9CisKIHZvaWQgZ2ZzMl9yZ3JwX3JlcG9saXNoX2Nsb25lcyhzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcmdkLT5yZF9zYmQ7CkBAIC04NDEsNiArOTAyLDggQEAKIAkJc3RydWN0IGdmczJfYml0bWFwICpiaSA9IHJnZC0+cmRfYml0cyArIHg7CiAJCWlmICghYmktPmJpX2Nsb25lKQogCQkJY29udGludWU7CisJCWlmIChzZHAtPnNkX2FyZ3MuYXJfZGlzY2FyZCkKKwkJCWdmczJfcmdycF9zZW5kX2Rpc2NhcmRzKHNkcCwgcmdkLT5yZF9kYXRhMCwgYmkpOwogCQltZW1jcHkoYmktPmJpX2Nsb25lICsgYmktPmJpX29mZnNldCwKIAkJICAgICAgIGJpLT5iaV9iaC0+Yl9kYXRhICsgYmktPmJpX29mZnNldCwgYmktPmJpX2xlbik7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5jIGIvZnMvZ2ZzMi9zdXBlci5jCmluZGV4IDE0MWI3ODEuLjYwMTkxM2UgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuYworKysgYi9mcy9nZnMyL3N1cGVyLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0zMzksNyArMzM4LDYgQEAKIAkJCQkgICAgc3RydWN0IGdmczJfaG9sZGVyICp0X2doKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgamlfZ2g7CiAJc3RydWN0IGdmczJfamRlc2MgKmpkOwogCXN0cnVjdCBsZmNjICpsZmNjOwogCUxJU1RfSEVBRChsaXN0KTsKQEAgLTM4Nyw3ICszODUsNiBAQAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmbGZjYy0+Z2gpOwogCQlrZnJlZShsZmNjKTsKIAl9Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmppX2doKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuaCBiL2ZzL2dmczIvc3VwZXIuaAppbmRleCBmNmI4YjAwLi45MWFiZGJlIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmgKKysrIGIvZnMvZ2ZzMi9zdXBlci5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAKLXZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdmczJfamluZGV4X3NpemUoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CkBAIC0yNywyMSArMjcsMjMgQEAKIAogdm9pZCBnZnMyX2ppbmRleF9mcmVlKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAotc3RydWN0IGdmczJfamRlc2MgKmdmczJfamRlc2NfZmluZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCk7Ci1pbnQgZ2ZzMl9qZGVzY19jaGVjayhzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQpOworZXh0ZXJuIGludCBnZnMyX21vdW50X2FyZ3Moc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MsIGNoYXIgKmRhdGEpOwogCi1pbnQgZ2ZzMl9sb29rdXBfaW5fbWFzdGVyX2RpcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZmlsZW5hbWUsCi0JCQkgICAgICBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqKmlwcCk7CitleHRlcm4gc3RydWN0IGdmczJfamRlc2MgKmdmczJfamRlc2NfZmluZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCk7CitleHRlcm4gaW50IGdmczJfamRlc2NfY2hlY2soc3RydWN0IGdmczJfamRlc2MgKmpkKTsKIAotaW50IGdmczJfbWFrZV9mc19ydyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gaW50IGdmczJfbG9va3VwX2luX21hc3Rlcl9kaXIoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgICAgc3RydWN0IGdmczJfaW5vZGUgKippcHApOwogCi1pbnQgZ2ZzMl9zdGF0ZnNfaW5pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci12b2lkIGdmczJfc3RhdGZzX2NoYW5nZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCXM2NCB0b3RhbCwgczY0IGZyZWUsIHM2NCBkaW5vZGVzKTsKLWludCBnZnMyX3N0YXRmc19zeW5jKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiBpbnQgZ2ZzMl9tYWtlX2ZzX3J3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAotaW50IGdmczJfZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLXZvaWQgZ2ZzMl91bmZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gaW50IGdmczJfc3RhdGZzX2luaXQoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl9zdGF0ZnNfY2hhbmdlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzNjQgdG90YWwsIHM2NCBmcmVlLAorCQkJICAgICAgIHM2NCBkaW5vZGVzKTsKK2V4dGVybiBpbnQgZ2ZzMl9zdGF0ZnNfc3luYyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CisKK2V4dGVybiBpbnQgZ2ZzMl9mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl91bmZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnZnMyX2ZzX3R5cGU7CiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2ZzMm1ldGFfZnNfdHlwZTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3lzLmMgYi9mcy9nZnMyL3N5cy5jCmluZGV4IDI2YzFmYTcuLjc2NTVmNTAyIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N5cy5jCisrKyBiL2ZzL2dmczIvc3lzLmMKQEAgLTE0LDkgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTI1LDYgKzI0LDcgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgInF1b3RhLmgiCiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImdsb3BzLmgiCiAKIHN0YXRpYyBzc2l6ZV90IGlkX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKIHsKQEAgLTM3LDYgKzM3LDMwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHNkcC0+c2RfZnNuYW1lKTsKIH0KIAorc3RhdGljIGludCBnZnMyX3V1aWRfdmFsaWQoY29uc3QgdTggKnV1aWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAodXVpZFtpXSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdXVpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJY29uc3QgdTggKnV1aWQgPSBzZHAtPnNkX3NiLnNiX3V1aWQ7CisJYnVmWzBdID0gJ1wwJzsKKwlpZiAoIWdmczJfdXVpZF92YWxpZCh1dWlkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTAyWCUwMlglMDJYJTAyWC0lMDJYJTAyWC0iCisJCQkiJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYXG4iLAorCQkJdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwgdXVpZFs0XSwgdXVpZFs1XSwKKwkJCXV1aWRbNl0sIHV1aWRbN10sIHV1aWRbOF0sIHV1aWRbOV0sIHV1aWRbMTBdLCB1dWlkWzExXSwKKwkJCXV1aWRbMTJdLCB1dWlkWzEzXSwgdXVpZFsxNF0sIHV1aWRbMTVdKTsKK30KKwogc3RhdGljIHNzaXplX3QgZnJlZXplX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKIHsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CkBAIC0xNDgsNiArMTcyLDQ2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHNzaXplX3QgZGVtb3RlX3JxX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsOworCWNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsb3BzOworCXVuc2lnbmVkIGludCBnbG1vZGU7CisJdW5zaWduZWQgaW50IGdsdHlwZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZ2xudW07CisJY2hhciBtb2RlWzE2XTsKKwlpbnQgcnY7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRUFDQ0VTOworCisJcnYgPSBzc2NhbmYoYnVmLCAiJXU6JWxsdSAlMTVzIiwgJmdsdHlwZSwgJmdsbnVtLAorCQkgICAgbW9kZSk7CisJaWYgKHJ2ICE9IDMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmNtcChtb2RlLCAiRVgiKSA9PSAwKQorCQlnbG1vZGUgPSBMTV9TVF9VTkxPQ0tFRDsKKwllbHNlIGlmICgoc3RyY21wKG1vZGUsICJDVyIpID09IDApIHx8IChzdHJjbXAobW9kZSwgIkRGIikgPT0gMCkpCisJCWdsbW9kZSA9IExNX1NUX0RFRkVSUkVEOworCWVsc2UgaWYgKChzdHJjbXAobW9kZSwgIlBSIikgPT0gMCkgfHwgKHN0cmNtcChtb2RlLCAiU0giKSA9PSAwKSkKKwkJZ2xtb2RlID0gTE1fU1RfU0hBUkVEOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZ2x0eXBlID4gTE1fVFlQRV9KT1VSTkFMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlnbG9wcyA9IGdmczJfZ2xvcHNfbGlzdFtnbHR5cGVdOworCWlmIChnbG9wcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlydiA9IGdmczJfZ2xvY2tfZ2V0KHNkcCwgZ2xudW0sIGdsb3BzLCAwLCAmZ2wpOworCWlmIChydikKKwkJcmV0dXJuIHJ2OworCWdmczJfZ2xvY2tfY2IoZ2wsIGdsbW9kZSk7CisJZ2ZzMl9nbG9ja19wdXQoZ2wpOworCXJldHVybiBsZW47Cit9CisKIHN0cnVjdCBnZnMyX2F0dHIgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKIAlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdmczJfc2JkICosIGNoYXIgKik7CkBAIC0xNTksMjIgKzIyMywyNiBAQAogCiBHRlMyX0FUVFIoaWQsICAgICAgICAgICAgICAgICAgMDQ0NCwgaWRfc2hvdywgICAgICAgTlVMTCk7CiBHRlMyX0FUVFIoZnNuYW1lLCAgICAgICAgICAgICAgMDQ0NCwgZnNuYW1lX3Nob3csICAgTlVMTCk7CitHRlMyX0FUVFIodXVpZCwgICAgICAgICAgICAgICAgMDQ0NCwgdXVpZF9zaG93LCAgICAgTlVMTCk7CiBHRlMyX0FUVFIoZnJlZXplLCAgICAgICAgICAgICAgMDY0NCwgZnJlZXplX3Nob3csICAgZnJlZXplX3N0b3JlKTsKIEdGUzJfQVRUUih3aXRoZHJhdywgICAgICAgICAgICAwNjQ0LCB3aXRoZHJhd19zaG93LCB3aXRoZHJhd19zdG9yZSk7CiBHRlMyX0FUVFIoc3RhdGZzX3N5bmMsICAgICAgICAgMDIwMCwgTlVMTCwgICAgICAgICAgc3RhdGZzX3N5bmNfc3RvcmUpOwogR0ZTMl9BVFRSKHF1b3RhX3N5bmMsICAgICAgICAgIDAyMDAsIE5VTEwsICAgICAgICAgIHF1b3RhX3N5bmNfc3RvcmUpOwogR0ZTMl9BVFRSKHF1b3RhX3JlZnJlc2hfdXNlciwgIDAyMDAsIE5VTEwsICAgICAgICAgIHF1b3RhX3JlZnJlc2hfdXNlcl9zdG9yZSk7CiBHRlMyX0FUVFIocXVvdGFfcmVmcmVzaF9ncm91cCwgMDIwMCwgTlVMTCwgICAgICAgICAgcXVvdGFfcmVmcmVzaF9ncm91cF9zdG9yZSk7CitHRlMyX0FUVFIoZGVtb3RlX3JxLCAgICAgICAgICAgMDIwMCwgTlVMTCwJICAgIGRlbW90ZV9ycV9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpnZnMyX2F0dHJzW10gPSB7CiAJJmdmczJfYXR0cl9pZC5hdHRyLAogCSZnZnMyX2F0dHJfZnNuYW1lLmF0dHIsCisJJmdmczJfYXR0cl91dWlkLmF0dHIsCiAJJmdmczJfYXR0cl9mcmVlemUuYXR0ciwKIAkmZ2ZzMl9hdHRyX3dpdGhkcmF3LmF0dHIsCiAJJmdmczJfYXR0cl9zdGF0ZnNfc3luYy5hdHRyLAogCSZnZnMyX2F0dHJfcXVvdGFfc3luYy5hdHRyLAogCSZnZnMyX2F0dHJfcXVvdGFfcmVmcmVzaF91c2VyLmF0dHIsCiAJJmdmczJfYXR0cl9xdW90YV9yZWZyZXNoX2dyb3VwLmF0dHIsCisJJmdmczJfYXR0cl9kZW1vdGVfcnEuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMjI0LDE0ICsyOTIsMTQ1IEBACiAKIExPQ0tTVFJVQ1RfQVRUUihqaWQsICAgICAgIiV1XG4iKTsKIExPQ0tTVFJVQ1RfQVRUUihmaXJzdCwgICAgIiV1XG4iKTsKLUxPQ0tTVFJVQ1RfQVRUUihsdmJfc2l6ZSwgIiV1XG4iKTsKLUxPQ0tTVFJVQ1RfQVRUUihmbGFncywgICAgIiVkXG4iKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxvY2tzdHJ1Y3RfYXR0cnNbXSA9IHsKIAkmbG9ja3N0cnVjdF9hdHRyX2ppZC5hdHRyLAogCSZsb2Nrc3RydWN0X2F0dHJfZmlyc3QuYXR0ciwKLQkmbG9ja3N0cnVjdF9hdHRyX2x2Yl9zaXplLmF0dHIsCi0JJmxvY2tzdHJ1Y3RfYXR0cl9mbGFncy5hdHRyLAorCU5VTEwsCit9OworCisvKgorICogbG9ja19tb2R1bGUuIE9yaWdpbmFsbHkgZnJvbSBsb2NrX2RsbQorICovCisKK3N0YXRpYyBzc2l6ZV90IHByb3RvX25hbWVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpvcHMgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBvcHMtPmxtX3Byb3RvX25hbWUpOworfQorCitzdGF0aWMgc3NpemVfdCBibG9ja19zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlzc2l6ZV90IHJldDsKKwlpbnQgdmFsID0gMDsKKworCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpKQorCQl2YWwgPSAxOworCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgYmxvY2tfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXNzaXplX3QgcmV0ID0gbGVuOworCWludCB2YWw7CisKKwl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CisKKwlpZiAodmFsID09IDEpCisJCXNldF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKTsKKwllbHNlIGlmICh2YWwgPT0gMCkgeworCQljbGVhcl9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJZ2ZzMl9nbG9ja190aGF3KHNkcCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgbGtpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbHMtPmxzX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgbGtmaXJzdF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX2ZpcnN0KTsKK30KKworc3RhdGljIHNzaXplX3QgZmlyc3RfZG9uZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX2ZpcnN0X2RvbmUpOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfcmVjb3Zlcl9qaWQpOworfQorCitzdGF0aWMgdm9pZCBnZnMyX2pkZXNjX21ha2VfZGlydHkoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpCit7CisJc3RydWN0IGdmczJfamRlc2MgKmpkOworCisJc3Bpbl9sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgeworCQlpZiAoamQtPmpkX2ppZCAhPSBqaWQpCisJCQljb250aW51ZTsKKwkJamQtPmpkX2RpcnR5ID0gMTsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJbHMtPmxzX3JlY292ZXJfamlkID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOworCWdmczJfamRlc2NfbWFrZV9kaXJ0eShzZHAsIGxzLT5sc19yZWNvdmVyX2ppZCk7CisJaWYgKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2VzcykKKwkJd2FrZV91cF9wcm9jZXNzKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2Vzcyk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9kb25lX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfcmVjb3Zlcl9qaWRfZG9uZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RhdHVzX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfcmVjb3Zlcl9qaWRfc3RhdHVzKTsKK30KKworc3RydWN0IGdkbG1fYXR0ciB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCisjZGVmaW5lIEdETE1fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIFwKK3N0YXRpYyBzdHJ1Y3QgZ2RsbV9hdHRyIGdkbG1fYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworR0RMTV9BVFRSKHByb3RvX25hbWUsICAgICAwNDQ0LCBwcm90b19uYW1lX3Nob3csICAgICBOVUxMKTsKK0dETE1fQVRUUihibG9jaywgICAgICAgICAgMDY0NCwgYmxvY2tfc2hvdywgICAgICAgICAgYmxvY2tfc3RvcmUpOworR0RMTV9BVFRSKHdpdGhkcmF3LCAgICAgICAwNjQ0LCB3aXRoZHJhd19zaG93LCAgICAgICB3aXRoZHJhd19zdG9yZSk7CitHRExNX0FUVFIoaWQsICAgICAgICAgICAgIDA0NDQsIGxraWRfc2hvdywgICAgICAgICAgIE5VTEwpOworR0RMTV9BVFRSKGZpcnN0LCAgICAgICAgICAwNDQ0LCBsa2ZpcnN0X3Nob3csICAgICAgICBOVUxMKTsKK0dETE1fQVRUUihmaXJzdF9kb25lLCAgICAgMDQ0NCwgZmlyc3RfZG9uZV9zaG93LCAgICAgTlVMTCk7CitHRExNX0FUVFIocmVjb3ZlciwgICAgICAgIDA2NDQsIHJlY292ZXJfc2hvdywgICAgICAgIHJlY292ZXJfc3RvcmUpOworR0RMTV9BVFRSKHJlY292ZXJfZG9uZSwgICAwNDQ0LCByZWNvdmVyX2RvbmVfc2hvdywgICBOVUxMKTsKK0dETE1fQVRUUihyZWNvdmVyX3N0YXR1cywgMDQ0NCwgcmVjb3Zlcl9zdGF0dXNfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsb2NrX21vZHVsZV9hdHRyc1tdID0geworCSZnZGxtX2F0dHJfcHJvdG9fbmFtZS5hdHRyLAorCSZnZGxtX2F0dHJfYmxvY2suYXR0ciwKKwkmZ2RsbV9hdHRyX3dpdGhkcmF3LmF0dHIsCisJJmdkbG1fYXR0cl9pZC5hdHRyLAorCSZsb2Nrc3RydWN0X2F0dHJfamlkLmF0dHIsCisJJmdkbG1fYXR0cl9maXJzdC5hdHRyLAorCSZnZGxtX2F0dHJfZmlyc3RfZG9uZS5hdHRyLAorCSZnZGxtX2F0dHJfcmVjb3Zlci5hdHRyLAorCSZnZGxtX2F0dHJfcmVjb3Zlcl9kb25lLmF0dHIsCisJJmdkbG1fYXR0cl9yZWNvdmVyX3N0YXR1cy5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0zNzMsNyArNTcyLDYgQEAKIFRVTkVfQVRUUihzdGF0ZnNfc2xvdywgMCk7CiBUVU5FX0FUVFIobmV3X2ZpbGVzX2pkYXRhLCAwKTsKIFRVTkVfQVRUUihxdW90YV9zaW11bF9zeW5jLCAxKTsKLVRVTkVfQVRUUihxdW90YV9jYWNoZV9zZWNzLCAxKTsKIFRVTkVfQVRUUihzdGFsbF9zZWNzLCAxKTsKIFRVTkVfQVRUUihzdGF0ZnNfcXVhbnR1bSwgMSk7CiBUVU5FX0FUVFJfREFFTU9OKHJlY292ZXJkX3NlY3MsIHJlY292ZXJkX3Byb2Nlc3MpOwpAQCAtMzg5LDcgKzU4Nyw2IEBACiAJJnR1bmVfYXR0cl9jb21wbGFpbl9zZWNzLmF0dHIsCiAJJnR1bmVfYXR0cl9zdGF0ZnNfc2xvdy5hdHRyLAogCSZ0dW5lX2F0dHJfcXVvdGFfc2ltdWxfc3luYy5hdHRyLAotCSZ0dW5lX2F0dHJfcXVvdGFfY2FjaGVfc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhbGxfc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhdGZzX3F1YW50dW0uYXR0ciwKIAkmdHVuZV9hdHRyX3JlY292ZXJkX3NlY3MuYXR0ciwKQEAgLTQxNCw2ICs2MTEsMTEgQEAKIAkuYXR0cnMgPSB0dW5lX2F0dHJzLAogfTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG9ja19tb2R1bGVfZ3JvdXAgPSB7CisJLm5hbWUgPSAibG9ja19tb2R1bGUiLAorCS5hdHRycyA9IGxvY2tfbW9kdWxlX2F0dHJzLAorfTsKKwogaW50IGdmczJfc3lzX2ZzX2FkZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKIAlpbnQgZXJyb3I7CkBAIC00MzYsOSArNjM4LDE1IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfYXJnczsKIAorCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfdHVuZTsKKwogCWtvYmplY3RfdWV2ZW50KCZzZHAtPnNkX2tvYmosIEtPQkpfQUREKTsKIAlyZXR1cm4gMDsKIAorZmFpbF90dW5lOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmdHVuZV9ncm91cCk7CiBmYWlsX2FyZ3M6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZhcmdzX2dyb3VwKTsKIGZhaWxfbG9ja3N0cnVjdDoKQEAgLTQ1NSwxNSArNjYzLDI3IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZ0dW5lX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmFyZ3NfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja3N0cnVjdF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CiAJa29iamVjdF9wdXQoJnNkcC0+c2Rfa29iaik7CiB9CiAKKwogc3RhdGljIGludCBnZnMyX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCSAgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGdmczJfc2JkLCBzZF9rb2JqKTsKKwljb25zdCB1OCAqdXVpZCA9IHNkcC0+c2Rfc2Iuc2JfdXVpZDsKKwogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tUQUJMRT0lcyIsIHNkcC0+c2RfdGFibGVfbmFtZSk7CiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPSVzIiwgc2RwLT5zZF9wcm90b19uYW1lKTsKKwlpZiAoZ2ZzMl91dWlkX3ZhbGlkKHV1aWQpKSB7CisJCWFkZF91ZXZlbnRfdmFyKGVudiwgIlVVSUQ9JTAyWCUwMlglMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWC0iCisJCQkgICAgICAgIiUwMlglMDJYLSUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCIsCisJCQkgICAgICAgdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwgdXVpZFs0XSwKKwkJCSAgICAgICB1dWlkWzVdLCB1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLAorCQkJICAgICAgIHV1aWRbMTBdLCB1dWlkWzExXSwgdXVpZFsxMl0sIHV1aWRbMTNdLAorCQkJICAgICAgIHV1aWRbMTRdLCB1dWlkWzE1XSk7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3RyYW5zLmMgYi9mcy9nZnMyL3RyYW5zLmMKaW5kZXggZjY3N2I4YS4uMDUzNzUyZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi90cmFucy5jCisrKyBiL2ZzL2dmczIvdHJhbnMuYwpAQCAtMTIsOSArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC04OCw5ICs4NywxMSBAQAogCiAJaWYgKCF0ci0+dHJfdG91Y2hlZCkgewogCQlnZnMyX2xvZ19yZWxlYXNlKHNkcCwgdHItPnRyX3Jlc2VydmVkKTsKLQkJZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOwotCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKLQkJa2ZyZWUodHIpOworCQlpZiAodHItPnRyX3RfZ2guZ2hfZ2wpIHsKKwkJCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKKwkJCWdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOworCQkJa2ZyZWUodHIpOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNiw5ICsxMDcsMTEgQEAKIAl9CiAKIAlnZnMyX2xvZ19jb21taXQoc2RwLCB0cik7Ci0gICAgICAgIGdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKLSAgICAgICAgZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7Ci0gICAgICAgIGtmcmVlKHRyKTsKKwlpZiAodHItPnRyX3RfZ2guZ2hfZ2wpIHsKKwkJZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOworCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKKwkJa2ZyZWUodHIpOworCX0KIAogCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1NZTkNIUk9OT1VTKQogCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi91dGlsLmMgYi9mcy9nZnMyL3V0aWwuYwppbmRleCAzNzRmNTBlLi45ZDEyYjExIDEwMDY0NAotLS0gYS9mcy9nZnMyL3V0aWwuYworKysgYi9mcy9nZnMyL3V0aWwuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0zNSw2ICszNCw4IEBACiAKIGludCBnZnMyX2xtX3dpdGhkcmF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsbSA9IGxzLT5sc19vcHM7CiAJdmFfbGlzdCBhcmdzOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCkBAIC00Nyw4ICs0OCwxMiBAQAogCWZzX2VycihzZHAsICJhYm91dCB0byB3aXRoZHJhdyB0aGlzIGZpbGUgc3lzdGVtXG4iKTsKIAlCVUdfT04oc2RwLT5zZF9hcmdzLmFyX2RlYnVnKTsKIAotCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHdpdGhkcmF3XG4iKTsKLQlnZnMyX3dpdGhkcmF3X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKKwlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX09GRkxJTkUpOworCisJaWYgKGxtLT5sbV91bm1vdW50KSB7CisJCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHVubW91bnRcbiIpOworCQlsbS0+bG1fdW5tb3VudChzZHApOworCX0KIAlmc19lcnIoc2RwLCAid2l0aGRyYXduXG4iKTsKIAlkdW1wX3N0YWNrKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDkxM2FiMmQuLjY0M2FjNDMgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KQEAgLTE0NywxMyArMTQ4LDEzIEBACiAJaW5vZGUtPmlfY2RldiA9IE5VTEw7CiAJaW5vZGUtPmlfcmRldiA9IDA7CiAJaW5vZGUtPmRpcnRpZWRfd2hlbiA9IDA7Ci0JaWYgKHNlY3VyaXR5X2lub2RlX2FsbG9jKGlub2RlKSkgewotCQlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUpCi0JCQlpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZShpbm9kZSk7Ci0JCWVsc2UKLQkJCWttZW1fY2FjaGVfZnJlZShpbm9kZV9jYWNoZXAsIChpbm9kZSkpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisKKwlpZiAoc2VjdXJpdHlfaW5vZGVfYWxsb2MoaW5vZGUpKQorCQlnb3RvIG91dF9mcmVlX2lub2RlOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaV9pbnRlZ3JpdHkgKi8KKwlpZiAoaW1hX2lub2RlX2FsbG9jKGlub2RlKSkKKwkJZ290byBvdXRfZnJlZV9zZWN1cml0eTsKIAogCXNwaW5fbG9ja19pbml0KCZpbm9kZS0+aV9sb2NrKTsKIAlsb2NrZGVwX3NldF9jbGFzcygmaW5vZGUtPmlfbG9jaywgJnNiLT5zX3R5cGUtPmlfbG9ja19rZXkpOwpAQCAtMTg5LDYgKzE5MCwxNSBAQAogCWlub2RlLT5pX21hcHBpbmcgPSBtYXBwaW5nOwogCiAJcmV0dXJuIGlub2RlOworCitvdXRfZnJlZV9zZWN1cml0eToKKwlzZWN1cml0eV9pbm9kZV9mcmVlKGlub2RlKTsKK291dF9mcmVlX2lub2RlOgorCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZSkKKwkJaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUoaW5vZGUpOworCWVsc2UKKwkJa21lbV9jYWNoZV9mcmVlKGlub2RlX2NhY2hlcCwgKGlub2RlKSk7CisJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfYWx3YXlzKTsKIApAQCAtMzU5LDYgKzM2OSw3IEBACiAJCWludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhpbm9kZSk7CiAJCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkgewogCQkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCBkaXNwb3NlKTsKKwkJCVdBUk5fT04oaW5vZGUtPmlfc3RhdGUgJiBJX05FVyk7CiAJCQlpbm9kZS0+aV9zdGF0ZSB8PSBJX0ZSRUVJTkc7CiAJCQljb3VudCsrOwogCQkJY29udGludWU7CkBAIC00NjAsNiArNDcxLDcgQEAKIAkJCQljb250aW51ZTsKIAkJfQogCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZmcmVlYWJsZSk7CisJCVdBUk5fT04oaW5vZGUtPmlfc3RhdGUgJiBJX05FVyk7CiAJCWlub2RlLT5pX3N0YXRlIHw9IElfRlJFRUlORzsKIAkJbnJfcHJ1bmVkKys7CiAJfQpAQCAtNjU2LDYgKzY2OCw3IEBACiAJICoganVzdCBjcmVhdGVkIGl0IChzbyB0aGVyZSBjYW4gYmUgbm8gb2xkIGhvbGRlcnMKIAkgKiB0aGF0IGhhdmVuJ3QgdGVzdGVkIElfTE9DSykuCiAJICovCisJV0FSTl9PTigoaW5vZGUtPmlfc3RhdGUgJiAoSV9MT0NLfElfTkVXKSkgIT0gKElfTE9DS3xJX05FVykpOwogCWlub2RlLT5pX3N0YXRlICY9IH4oSV9MT0NLfElfTkVXKTsKIAl3YWtlX3VwX2lub2RlKGlub2RlKTsKIH0KQEAgLTExNDUsNiArMTE1OCw3IEBACiAKIAlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9saXN0KTsKIAlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9zYl9saXN0KTsKKwlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCWlub2RlLT5pX3N0YXRlIHw9IElfRlJFRUlORzsKIAlpbm9kZXNfc3RhdC5ucl9pbm9kZXMtLTsKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CkBAIC0xMTg2LDE2ICsxMjAwLDE5IEBACiAJCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJCQlyZXR1cm47CiAJCX0KKwkJV0FSTl9PTihpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKTsKIAkJaW5vZGUtPmlfc3RhdGUgfD0gSV9XSUxMX0ZSRUU7CiAJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKIAkJd3JpdGVfaW5vZGVfbm93KGlub2RlLCAxKTsKIAkJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKKwkJV0FSTl9PTihpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKTsKIAkJaW5vZGUtPmlfc3RhdGUgJj0gfklfV0lMTF9GUkVFOwogCQlpbm9kZXNfc3RhdC5ucl91bnVzZWQtLTsKIAkJaGxpc3RfZGVsX2luaXQoJmlub2RlLT5pX2hhc2gpOwogCX0KIAlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9saXN0KTsKIAlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9zYl9saXN0KTsKKwlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCWlub2RlLT5pX3N0YXRlIHw9IElfRlJFRUlORzsKIAlpbm9kZXNfc3RhdC5ucl9pbm9kZXMtLTsKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CkBAIC0xMjgzLDYgKzEzMDAsNDAgQEAKIH0KIEVYUE9SVF9TWU1CT0woYm1hcCk7CiAKKy8qCisgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUgcHJldmlvdXMgYXRpbWUgaXMKKyAqIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yIG10aW1lIG9yIGlmIGF0IGxlYXN0IGEgZGF5IGhhcworICogcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGF0aW1lIHVwZGF0ZS4KKyAqLworc3RhdGljIGludCByZWxhdGltZV9uZWVkX3VwZGF0ZShzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IHRpbWVzcGVjIG5vdykKK3sKKworCWlmICghKG1udC0+bW50X2ZsYWdzICYgTU5UX1JFTEFUSU1FKSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBJcyBtdGltZSB5b3VuZ2VyIHRoYW4gYXRpbWU/IElmIHllcywgdXBkYXRlIGF0aW1lOgorCSAqLworCWlmICh0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9tdGltZSwgJmlub2RlLT5pX2F0aW1lKSA+PSAwKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIElzIGN0aW1lIHlvdW5nZXIgdGhhbiBhdGltZT8gSWYgeWVzLCB1cGRhdGUgYXRpbWU6CisJICovCisJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX2N0aW1lLCAmaW5vZGUtPmlfYXRpbWUpID49IDApCisJCXJldHVybiAxOworCisJLyoKKwkgKiBJcyB0aGUgcHJldmlvdXMgYXRpbWUgdmFsdWUgb2xkZXIgdGhhbiBhIGRheT8gSWYgeWVzLAorCSAqIHVwZGF0ZSBhdGltZToKKwkgKi8KKwlpZiAoKGxvbmcpKG5vdy50dl9zZWMgLSBpbm9kZS0+aV9hdGltZS50dl9zZWMpID49IDI0KjYwKjYwKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIEdvb2QsIHdlIGNhbiBza2lwIHRoZSBhdGltZSB1cGRhdGU6CisJICovCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICoJdG91Y2hfYXRpbWUJLQl1cGRhdGUgdGhlIGFjY2VzcyB0aW1lCiAgKglAbW50OiBtb3VudCB0aGUgaW5vZGUgaXMgYWNjZXNzZWQgb24KQEAgLTEzMTAsMTcgKzEzNjEsMTIgQEAKIAkJZ290byBvdXQ7CiAJaWYgKChtbnQtPm1udF9mbGFncyAmIE1OVF9OT0RJUkFUSU1FKSAmJiBTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlnb3RvIG91dDsKLQlpZiAobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpIHsKLQkJLyoKLQkJICogV2l0aCByZWxhdGl2ZSBhdGltZSwgb25seSB1cGRhdGUgYXRpbWUgaWYgdGhlIHByZXZpb3VzCi0JCSAqIGF0aW1lIGlzIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yIG10aW1lLgotCQkgKi8KLQkJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLCAmaW5vZGUtPmlfYXRpbWUpIDwgMCAmJgotCQkgICAgdGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfY3RpbWUsICZpbm9kZS0+aV9hdGltZSkgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQogCiAJbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKKworCWlmICghcmVsYXRpbWVfbmVlZF91cGRhdGUobW50LCBpbm9kZSwgbm93KSkKKwkJZ290byBvdXQ7CisKIAlpZiAodGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2F0aW1lLCAmbm93KSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IDI0MGVjNjM5Li5hYzJkNDdlIDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTQwNCwxMCArNDA0LDEyIEBACiAJaWYgKE9fTk9OQkxPQ0sgIT0gT19OREVMQVkpCiAJCWZsYWcgfD0gT19OREVMQVk7CiAjZW5kaWYKKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJaWYgKG9uKQogCQlmaWxwLT5mX2ZsYWdzIHw9IGZsYWc7CiAJZWxzZQogCQlmaWxwLT5mX2ZsYWdzICY9IH5mbGFnOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDI1LDE4ICs0MjcsMTIgQEAKIAkvKiBEaWQgRkFTWU5DIHN0YXRlIGNoYW5nZSA/ICovCiAJaWYgKChmbGFnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpIHsKIAkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+ZmFzeW5jKQorCQkJLyogZmFzeW5jKCkgYWRqdXN0cyBmaWxwLT5mX2ZsYWdzICovCiAJCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgb24pOwogCQllbHNlCiAJCQllcnJvciA9IC1FTk9UVFk7CiAJfQotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKG9uKQotCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKLQllbHNlCi0JCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIGVycm9yIDwgMCA/IGVycm9yIDogMDsKIH0KIAogc3RhdGljIGludCBpb2N0bF9mc2ZyZWV6ZShzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTQ5OSwxNyArNDk1LDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBGSU9OQklPOgotCQkvKiBCS0wgbmVlZGVkIHRvIGF2b2lkIHJhY2VzIHR3ZWFraW5nIGZfZmxhZ3MgKi8KLQkJbG9ja19rZXJuZWwoKTsKIAkJZXJyb3IgPSBpb2N0bF9maW9uYmlvKGZpbHAsIGFyZ3ApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGSU9BU1lOQzoKLQkJLyogQktMIG5lZWRlZCB0byBhdm9pZCByYWNlcyB0d2Vha2luZyBmX2ZsYWdzICovCi0JCWxvY2tfa2VybmVsKCk7CiAJCWVycm9yID0gaW9jdGxfZmlvYXN5bmMoZmQsIGZpbHAsIGFyZ3ApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGSU9RU0laRToKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggZWIzNDMwMC4uNTgxNDQxMCAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogfQogCiAvKgotICogQ2FsbGVkIHVuZGVyIGpfc3RhdGVfbG9jay4gIFJldHVybnMgdHJ1ZSBpZiBhIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLgorICogQ2FsbGVkIHVuZGVyIGpfc3RhdGVfbG9jay4gIFJldHVybnMgdHJ1ZSBpZiBhIHRyYW5zYWN0aW9uIGNvbW1pdCB3YXMgc3RhcnRlZC4KICAqLwogaW50IF9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgdGFyZ2V0KQogewpAQCAtNTE4LDcgKzUxOCw4IEBACiAKIC8qCiAgKiBTdGFydCBhIGNvbW1pdCBvZiB0aGUgY3VycmVudCBydW5uaW5nIHRyYW5zYWN0aW9uIChpZiBhbnkpLiAgUmV0dXJucyB0cnVlCi0gKiBpZiBhIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLCBhbmQgZmlsbHMgaXRzIHRpZCBpbiBhdCAqcHRpZAorICogaWYgYSB0cmFuc2FjdGlvbiBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgKG9yIGlzIGN1cnJlbnRseSBhbHJlYWR5CisgKiBjb21taXR0aW5nKSwgYW5kIGZpbGxzIGl0cyB0aWQgaW4gYXQgKnB0aWQKICAqLwogaW50IGpiZDJfam91cm5hbF9zdGFydF9jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCAqcHRpZCkKIHsKQEAgLTUyOCwxNSArNTI5LDE5IEBACiAJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikgewogCQl0aWRfdCB0aWQgPSBqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24tPnRfdGlkOwogCi0JCXJldCA9IF9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRpZCk7Ci0JCWlmIChyZXQgJiYgcHRpZCkKKwkJX19qYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdGlkKTsKKwkJLyogVGhlcmUncyBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24gYW5kIHdlJ3ZlIGp1c3QgbWFkZSBzdXJlCisJCSAqIGl0J3MgY29tbWl0IGhhcyBiZWVuIHNjaGVkdWxlZC4gKi8KKwkJaWYgKHB0aWQpCiAJCQkqcHRpZCA9IHRpZDsKLQl9IGVsc2UgaWYgKGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbiAmJiBwdGlkKSB7CisJCXJldCA9IDE7CisJfSBlbHNlIGlmIChqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHsKIAkJLyoKIAkJICogSWYgZXh0M193cml0ZV9zdXBlcigpIHJlY2VudGx5IHN0YXJ0ZWQgYSBjb21taXQsIHRoZW4gd2UKIAkJICogaGF2ZSB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIHRoYXQgdHJhbnNhY3Rpb24KIAkJICovCi0JCSpwdGlkID0gam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLT50X3RpZDsKKwkJaWYgKHB0aWQpCisJCQkqcHRpZCA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbi0+dF90aWQ7CiAJCXJldCA9IDE7CiAJfQogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IDQ2YjRlMzQuLjI4Y2UyMWQgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTIxMjksMjYgKzIxMjksNDYgQEAKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2hlbiBpbm9kZSBpcyBqb3VybmFsZWQgaW4gb3JkZXJlZCBtb2RlCi0gKiBiZWZvcmUgdHJ1bmNhdGlvbiBoYXBwZW5zLiBJdCBzdGFydHMgd3JpdGVvdXQgb2YgdHJ1bmNhdGVkIHBhcnQgaW4KLSAqIGNhc2UgaXQgaXMgaW4gdGhlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gc28gdGhhdCB3ZSBzdGFuZCB0byBvcmRlcmVkCi0gKiBtb2RlIGNvbnNpc3RlbmN5IGd1YXJhbnRlZXMuCisgKiBGaWxlIHRydW5jYXRlIGFuZCB0cmFuc2FjdGlvbiBjb21taXQgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGluIGEKKyAqIG5vbi10cml2aWFsIHdheS4gIElmIGEgdHJhbnNhY3Rpb24gd3JpdGluZyBkYXRhIGJsb2NrIEEgaXMKKyAqIGNvbW1pdHRpbmcsIHdlIGNhbm5vdCBkaXNjYXJkIHRoZSBkYXRhIGJ5IHRydW5jYXRlIHVudGlsIHdlIGhhdmUKKyAqIHdyaXR0ZW4gdGhlbS4gIE90aGVyd2lzZSBpZiB3ZSBjcmFzaGVkIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiB3aXRoCisgKiB3cml0ZSBoYXMgY29tbWl0dGVkIGJ1dCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIHdpdGggdHJ1bmNhdGUgaGFzCisgKiBjb21taXR0ZWQsIHdlIGNvdWxkIHNlZSBzdGFsZSBkYXRhIGluIGJsb2NrIEEuICBUaGlzIGZ1bmN0aW9uIGlzIGEKKyAqIGhlbHBlciB0byBzb2x2ZSB0aGlzIHByb2JsZW0uICBJdCBzdGFydHMgd3JpdGVvdXQgb2YgdGhlIHRydW5jYXRlZAorICogcGFydCBpbiBjYXNlIGl0IGlzIGluIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uLgorICoKKyAqIEZpbGVzeXN0ZW0gY29kZSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGlub2RlIGlzIGpvdXJuYWxlZCBpbgorICogb3JkZXJlZCBtb2RlIGJlZm9yZSB0cnVuY2F0aW9uIGhhcHBlbnMgYW5kIGFmdGVyIHRoZSBpbm9kZSBoYXMgYmVlbgorICogcGxhY2VkIG9uIG9ycGhhbiBsaXN0IHdpdGggdGhlIG5ldyBpbm9kZSBzaXplLiBUaGUgc2Vjb25kIGNvbmRpdGlvbgorICogYXZvaWRzIHRoZSByYWNlIHRoYXQgc29tZW9uZSB3cml0ZXMgbmV3IGRhdGEgYW5kIHdlIHN0YXJ0CisgKiBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbiBhZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCBidXQKKyAqIGJlZm9yZSBhIHRyYW5zYWN0aW9uIGZvciB0cnVuY2F0ZSBpcyBzdGFydGVkIChhbmQgZnVydGhlcm1vcmUgaXQKKyAqIGFsbG93cyB1cyB0byBvcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSB0aGUgYWRkaXRpb24gdG8gb3JwaGFuIGxpc3QKKyAqIGhhcHBlbnMgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgd3JpdGUgLS0tIHdlIGRvbid0IGhhdmUgdG8gd3JpdGUKKyAqIGFueSBkYXRhIGluIHN1Y2ggY2FzZSkuCiAgKi8KLWludCBqYmQyX2pvdXJuYWxfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZShzdHJ1Y3QgamJkMl9pbm9kZSAqaW5vZGUsCitpbnQgamJkMl9qb3VybmFsX2JlZ2luX29yZGVyZWRfdHJ1bmNhdGUoam91cm5hbF90ICpqb3VybmFsLAorCQkJCQlzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlLAogCQkJCQlsb2ZmX3QgbmV3X3NpemUpCiB7Ci0Jam91cm5hbF90ICpqb3VybmFsOwotCXRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuczsKKwl0cmFuc2FjdGlvbl90ICppbm9kZV90cmFucywgKmNvbW1pdF90cmFuczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5vZGUtPmlfdHJhbnNhY3Rpb24gJiYgIWlub2RlLT5pX25leHRfdHJhbnNhY3Rpb24pCisJLyogVGhpcyBpcyBhIHF1aWNrIGNoZWNrIHRvIGF2b2lkIGxvY2tpbmcgaWYgbm90IG5lY2Vzc2FyeSAqLworCWlmICghamlub2RlLT5pX3RyYW5zYWN0aW9uKQogCQlnb3RvIG91dDsKLQlqb3VybmFsID0gaW5vZGUtPmlfdHJhbnNhY3Rpb24tPnRfam91cm5hbDsKKwkvKiBMb2NrcyBhcmUgaGVyZSBqdXN0IHRvIGZvcmNlIHJlYWRpbmcgb2YgcmVjZW50IHZhbHVlcywgaXQgaXMKKwkgKiBlbm91Z2ggdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2FzIG5vdCBjb21taXR0aW5nIGJlZm9yZSB3ZSBzdGFydGVkCisJICogYSB0cmFuc2FjdGlvbiBhZGRpbmcgdGhlIGlub2RlIHRvIG9ycGhhbiBsaXN0ICovCiAJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWNvbW1pdF90cmFucyA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKLQlpZiAoaW5vZGUtPmlfdHJhbnNhY3Rpb24gPT0gY29tbWl0X3RyYW5zKSB7Ci0JCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV92ZnNfaW5vZGUtPmlfbWFwcGluZywKKwlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKKwlpbm9kZV90cmFucyA9IGppbm9kZS0+aV90cmFuc2FjdGlvbjsKKwlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOworCWlmIChpbm9kZV90cmFucyA9PSBjb21taXRfdHJhbnMpIHsKKwkJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGppbm9kZS0+aV92ZnNfaW5vZGUtPmlfbWFwcGluZywKIAkJCW5ld19zaXplLCBMTE9OR19NQVgpOwogCQlpZiAocmV0KQogCQkJamJkMl9qb3VybmFsX2Fib3J0KGpvdXJuYWwsIHJldCk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9iYWNrZ3JvdW5kLmMgYi9mcy9qZmZzMi9iYWNrZ3JvdW5kLmMKaW5kZXggM2NjZWVmNC4uZTk1ODAxMCAxMDA2NDQKLS0tIGEvZnMvamZmczIvYmFja2dyb3VuZC5jCisrKyBiL2ZzL2pmZnMyL2JhY2tncm91bmQuYwpAQCAtOTUsMTMgKzk1LDE3IEBACiAJCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAkJCQogCi0JCS8qIFRoaXMgdGhyZWFkIGlzIHB1cmVseSBhbiBvcHRpbWlzYXRpb24uIEJ1dCBpZiBpdCBydW5zIHdoZW4KLQkJICAgb3RoZXIgdGhpbmdzIGNvdWxkIGJlIHJ1bm5pbmcsIGl0IGFjdHVhbGx5IG1ha2VzIHRoaW5ncyBhCi0JCSAgIGxvdCB3b3JzZS4gVXNlIHlpZWxkKCkgYW5kIHB1dCBpdCBhdCB0aGUgYmFjayBvZiB0aGUgcnVucXVldWUKLQkJICAgZXZlcnkgdGltZS4gRXNwZWNpYWxseSBkdXJpbmcgYm9vdCwgcHVsbGluZyBhbiBpbm9kZSBpbgotCQkgICB3aXRoIHJlYWRfaW5vZGUoKSBpcyBtdWNoIHByZWZlcmFibGUgdG8gaGF2aW5nIHRoZSBHQyB0aHJlYWQKLQkJICAgZ2V0IHRoZXJlIGZpcnN0LiAqLwotCQl5aWVsZCgpOworCQkvKiBQcm9ibGVtIC0gaW1tZWRpYXRlbHkgYWZ0ZXIgYm9vdHVwLCB0aGUgR0NEIHNwZW5kcyBhIGxvdAorCQkgKiBvZiB0aW1lIGluIHBsYWNlcyBsaWtlIGpmZnMyX2tpbGxfZnJhZ3RyZWUoKTsgc28gbXVjaCBzbworCQkgKiB0aGF0IHVzZXJzcGFjZSBwcm9jZXNzZXMgKGxpa2UgZ2RtIGFuZCBYKSBhcmUgc3RhcnZlZAorCQkgKiBkZXNwaXRlIHBsZW50eSBvZiBjb25kX3Jlc2NoZWQoKXMgYW5kIHJlbmljaW5nLiAgWWllbGQoKQorCQkgKiBkb2Vzbid0IGhlbHAsIGVpdGhlciAocHJlc3VtYWJseSBiZWNhdXNlIHVzZXJzcGFjZSBhbmQgR0NECisJCSAqIGFyZSBnZW5lcmFsbHkgY29tcGV0aW5nIGZvciBhIGhpZ2hlciBsYXRlbmN5IHJlc291cmNlIC0KKwkJICogZGlzaykuCisJCSAqIFRoaXMgZm9yY2VzIHRoZSBHQ0QgdG8gc2xvdyB0aGUgaGVsbCBkb3duLiAgIFB1bGxpbmcgYW4KKwkJICogaW5vZGUgaW4gd2l0aCByZWFkX2lub2RlKCkgaXMgbXVjaCBwcmVmZXJhYmxlIHRvIGhhdmluZworCQkgKiB0aGUgR0MgdGhyZWFkIGdldCB0aGVyZSBmaXJzdC4gKi8KKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKIAogCQkvKiBQdXRfc3VwZXIgd2lsbCBzZW5kIGEgU0lHS0lMTCBhbmQgdGhlbiB3YWl0IG9uIHRoZSBzZW0uCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvcmVhZGlub2RlLmMgYi9mcy9qZmZzMi9yZWFkaW5vZGUuYwppbmRleCA2Y2EwOGFkLi4xZmMxZTkyIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9yZWFkaW5vZGUuYworKysgYi9mcy9qZmZzMi9yZWFkaW5vZGUuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJCQkJc3RydWN0IGpmZnMyX3RtcF9kbm9kZV9pbmZvICp0bikKIHsKIAl1aW50MzJfdCBmbl9lbmQgPSB0bi0+Zm4tPm9mcyArIHRuLT5mbi0+c2l6ZTsKLQlzdHJ1Y3QgamZmczJfdG1wX2Rub2RlX2luZm8gKnRoaXM7CisJc3RydWN0IGpmZnMyX3RtcF9kbm9kZV9pbmZvICp0aGlzLCAqcHRuOwogCiAJZGJnX3JlYWRpbm9kZSgiaW5zZXJ0IGZyYWdtZW50ICUjMDR4LSUjMDR4LCB2ZXIgJXUgYXQgJTA4eFxuIiwgdG4tPmZuLT5vZnMsIGZuX2VuZCwgdG4tPnZlcnNpb24sIHJlZl9vZmZzZXQodG4tPmZuLT5yYXcpKTsKIApAQCAtMjUxLDExICsyNTEsMTggQEAKIAlpZiAodGhpcykgewogCQkvKiBJZiB0aGUgbm9kZSBpcyBjb2luY2lkZW50IHdpdGggYW5vdGhlciBhdCBhIGxvd2VyIGFkZHJlc3MsCiAJCSAgIGJhY2sgdXAgdW50aWwgdGhlIG90aGVyIG5vZGUgaXMgZm91bmQuIEl0IG1heSBiZSByZWxldmFudCAqLwotCQl3aGlsZSAodGhpcy0+b3ZlcmxhcHBlZCkKLQkJCXRoaXMgPSB0bl9wcmV2KHRoaXMpOwotCi0JCS8qIEZpcnN0IG5vZGUgc2hvdWxkIG5ldmVyIGJlIG1hcmtlZCBvdmVybGFwcGVkICovCi0JCUJVR19PTighdGhpcyk7CisJCXdoaWxlICh0aGlzLT5vdmVybGFwcGVkKSB7CisJCQlwdG4gPSB0bl9wcmV2KHRoaXMpOworCQkJaWYgKCFwdG4pIHsKKwkJCQkvKgorCQkJCSAqIFdlIGtpbGxlZCBhIG5vZGUgd2hpY2ggc2V0IHRoZSBvdmVybGFwcGVkCisJCQkJICogZmxhZ3MgZHVyaW5nIHRoZSBzY2FuLiBGaXggaXQgdXAuCisJCQkJICovCisJCQkJdGhpcy0+b3ZlcmxhcHBlZCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQl0aGlzID0gcHRuOworCQl9CiAJCWRiZ19yZWFkaW5vZGUoIid0aGlzJyBmb3VuZCAlIzA0eC0lIzA0eCAoJXMpXG4iLCB0aGlzLT5mbi0+b2ZzLCB0aGlzLT5mbi0+b2ZzICsgdGhpcy0+Zm4tPnNpemUsIHRoaXMtPmZuID8gImRhdGEiIDogImhvbGUiKTsKIAl9CiAKQEAgLTM2MCw3ICszNjcsMTcgQEAKIAkJCX0KIAkJCWlmICghdGhpcy0+b3ZlcmxhcHBlZCkKIAkJCQlicmVhazsKLQkJCXRoaXMgPSB0bl9wcmV2KHRoaXMpOworCisJCQlwdG4gPSB0bl9wcmV2KHRoaXMpOworCQkJaWYgKCFwdG4pIHsKKwkJCQkvKgorCQkJCSAqIFdlIGtpbGxlZCBhIG5vZGUgd2hpY2ggc2V0IHRoZSBvdmVybGFwcGVkCisJCQkJICogZmxhZ3MgZHVyaW5nIHRoZSBzY2FuLiBGaXggaXQgdXAuCisJCQkJICovCisJCQkJdGhpcy0+b3ZlcmxhcHBlZCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQl0aGlzID0gcHRuOwogCQl9CiAJfQogCkBAIC00NTYsOCArNDczLDE1IEBACiAJCWVhdF9sYXN0KCZyaWktPnRuX3Jvb3QsICZsYXN0LT5yYik7CiAJCXZlcl9pbnNlcnQoJnZlcl9yb290LCBsYXN0KTsKIAotCQlpZiAodW5saWtlbHkobGFzdC0+b3ZlcmxhcHBlZCkpCi0JCQljb250aW51ZTsKKwkJaWYgKHVubGlrZWx5KGxhc3QtPm92ZXJsYXBwZWQpKSB7CisJCQlpZiAocGVuKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIFdlIGtpbGxlZCBhIG5vZGUgd2hpY2ggc2V0IHRoZSBvdmVybGFwcGVkCisJCQkgKiBmbGFncyBkdXJpbmcgdGhlIHNjYW4uIEZpeCBpdCB1cC4KKwkJCSAqLworCQkJbGFzdC0+b3ZlcmxhcHBlZCA9IDA7CisJCX0KIAogCQkvKiBOb3cgd2UgaGF2ZSBhIGJ1bmNoIG9mIG5vZGVzIGluIHJldmVyc2UgdmVyc2lvbgogCQkgICBvcmRlciwgaW4gdGhlIHRyZWUgYXQgdmVyX3Jvb3QuIE1vc3Qgb2YgdGhlIHRpbWUsCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9jbG50bG9jay5jIGIvZnMvbG9ja2QvY2xudGxvY2suYwppbmRleCAxZjNiMGZjLi5hZWRjNDdhIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9jbG50bG9jay5jCisrKyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKQEAgLTEzOSw2ICsxMzksNTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RhdGljIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbmxtY2xudF9tYXBfdjRhZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJCQkJIHN0cnVjdCBpbjZfYWRkciAqYWRkcl9tYXBwZWQpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwOworCisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiAmKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwKS0+c2luNl9hZGRyOworCWNhc2UgQUZfSU5FVDoKKwkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChzaW4tPnNpbl9hZGRyLnNfYWRkciwgYWRkcl9tYXBwZWQpOworCQlyZXR1cm4gYWRkcl9tYXBwZWQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJZiBsb2NrZCBpcyB1c2luZyBhIFBGX0lORVQ2IGxpc3RlbmVyLCBhbGwgaW5jb21pbmcgcmVxdWVzdHMgYXBwZWFyCisgKiB0byBjb21lIGZyb20gQUZfSU5FVDYgcmVtb3Rlcy4gIFRoZSBhZGRyZXNzIG9mIEFGX0lORVQgcmVtb3RlcyBhcmUKKyAqIG1hcHBlZCB0byBBRl9JTkVUNiBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBuZXR3b3JrIGxheWVyLiAgSW4gY2FzZSB0aGUKKyAqIHVzZXIgcGFzc2VkIGFuIEFGX0lORVQgc2VydmVyIGFkZHJlc3MgYXQgbW91bnQgdGltZSwgZW5zdXJlIGJvdGgKKyAqIGFkZHJlc3NlcyBhcmUgQUZfSU5FVDYgYmVmb3JlIGNvbXBhcmluZyB0aGVtLgorICovCitzdGF0aWMgaW50IG5sbWNsbnRfY21wX2FkZHIoY29uc3Qgc3RydWN0IG5sbV9ob3N0ICpob3N0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQoreworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjE7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMjsKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcjFfbWFwcGVkOworCXN0cnVjdCBpbjZfYWRkciBhZGRyMl9tYXBwZWQ7CisKKwlhZGRyMSA9IG5sbWNsbnRfbWFwX3Y0YWRkcihubG1fYWRkcihob3N0KSwgJmFkZHIxX21hcHBlZCk7CisJaWYgKGxpa2VseShhZGRyMSAhPSBOVUxMKSkgeworCQlhZGRyMiA9IG5sbWNsbnRfbWFwX3Y0YWRkcihzYXAsICZhZGRyMl9tYXBwZWQpOworCQlpZiAobGlrZWx5KGFkZHIyICE9IE5VTEwpKQorCQkJcmV0dXJuIGlwdjZfYWRkcl9lcXVhbChhZGRyMSwgYWRkcjIpOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCitzdGF0aWMgaW50IG5sbWNsbnRfY21wX2FkZHIoY29uc3Qgc3RydWN0IG5sbV9ob3N0ICpob3N0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQoreworCXJldHVybiBubG1fY21wX2FkZHIobmxtX2FkZHIoaG9zdCksIHNhcCk7Cit9CisjZW5kaWYJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCisKIC8qCiAgKiBUaGUgc2VydmVyIGxvY2tkIGhhcyBjYWxsZWQgdXMgYmFjayB0byB0ZWxsIHVzIHRoZSBsb2NrIHdhcyBncmFudGVkCiAgKi8KQEAgLTE2Niw3ICsyMTUsNyBAQAogCQkgKi8KIAkJaWYgKGZsX2Jsb2NrZWQtPmZsX3UubmZzX2ZsLm93bmVyLT5waWQgIT0gbG9jay0+c3ZpZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIW5sbV9jbXBfYWRkcihubG1fYWRkcihibG9jay0+Yl9ob3N0KSwgYWRkcikpCisJCWlmICghbmxtY2xudF9jbXBfYWRkcihibG9jay0+Yl9ob3N0LCBhZGRyKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobmZzX2NvbXBhcmVfZmgoTkZTX0ZIKGZsX2Jsb2NrZWQtPmZsX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICxmaCkgIT0gMCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggZDFkMWViOC4uNjE4ODY1YiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaW5vZGUuYworKysgYi9mcy9taW5peC9pbm9kZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5NiAgR2VydGphbiB2YW4gV2luZ2VyZGUgICAgKGdlcnRqYW5AY3MudnUubmwpCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2ICBHZXJ0amFuIHZhbiBXaW5nZXJkZQogICoJTWluaXggVjIgZnMgc3VwcG9ydC4KICAqCiAgKiAgTW9kaWZpZWQgZm9yIDY4MHgwIGJ5IEFuZHJlYXMgU2Nod2FiCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCBiYmMxNWMyLi4xOTkzMTc2IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KQEAgLTg1MCw2ICs4NTEsOCBAQAogCQlpZiAoZXJyID09IC1FQUdBSU4pCiAJCQllcnIgPSBpbm9kZV9wZXJtaXNzaW9uKG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkJICAgICAgIE1BWV9FWEVDKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBpbWFfcGF0aF9jaGVjaygmbmQtPnBhdGgsIE1BWV9FWEVDKTsKICAJCWlmIChlcnIpCiAJCQlicmVhazsKIApAQCAtMTUwOSw2ICsxNTEyLDExIEBACiAJZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBhY2NfbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IGltYV9wYXRoX2NoZWNrKHBhdGgsCisJCQkgICAgICAgYWNjX21vZGUgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCS8qCiAJICogQW4gYXBwZW5kLW9ubHkgZmlsZSBtdXN0IGJlIG9wZW5lZCBpbiBhcHBlbmQgbW9kZSBmb3Igd3JpdGluZy4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggMjI4ZDhjNC4uZjBlNzUzMCAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTYxNCw5ICs2MTQsMTEgQEAKIAkgKi8KIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBtbnRfd3JpdGVyICpjcHVfd3JpdGVyID0gJnBlcl9jcHUobW50X3dyaXRlcnMsIGNwdSk7Ci0JCWlmIChjcHVfd3JpdGVyLT5tbnQgIT0gbW50KQotCQkJY29udGludWU7CiAJCXNwaW5fbG9jaygmY3B1X3dyaXRlci0+bG9jayk7CisJCWlmIChjcHVfd3JpdGVyLT5tbnQgIT0gbW50KSB7CisJCQlzcGluX3VubG9jaygmY3B1X3dyaXRlci0+bG9jayk7CisJCQljb250aW51ZTsKKwkJfQogCQlhdG9taWNfYWRkKGNwdV93cml0ZXItPmNvdW50LCAmbW50LT5fX21udF93cml0ZXJzKTsKIAkJY3B1X3dyaXRlci0+Y291bnQgPSAwOwogCQkvKgpAQCAtNzc4LDYgKzc4MCw3IEBACiAJCXsgTU5UX05PQVRJTUUsICIsbm9hdGltZSIgfSwKIAkJeyBNTlRfTk9ESVJBVElNRSwgIixub2RpcmF0aW1lIiB9LAogCQl7IE1OVF9SRUxBVElNRSwgIixyZWxhdGltZSIgfSwKKwkJeyBNTlRfU1RSSUNUQVRJTUUsICIsc3RyaWN0YXRpbWUiIH0sCiAJCXsgMCwgTlVMTCB9CiAJfTsKIAljb25zdCBzdHJ1Y3QgcHJvY19mc19pbmZvICpmc19pbmZvcDsKQEAgLTE5MTcsNiArMTkyMCw5IEBACiAJaWYgKGRhdGFfcGFnZSkKIAkJKChjaGFyICopZGF0YV9wYWdlKVtQQUdFX1NJWkUgLSAxXSA9IDA7CiAKKwkvKiBEZWZhdWx0IHRvIHJlbGF0aW1lICovCisJbW50X2ZsYWdzIHw9IE1OVF9SRUxBVElNRTsKKwogCS8qIFNlcGFyYXRlIHRoZSBwZXItbW91bnRwb2ludCBmbGFncyAqLwogCWlmIChmbGFncyAmIE1TX05PU1VJRCkKIAkJbW50X2ZsYWdzIHw9IE1OVF9OT1NVSUQ7CkBAIC0xOTI4LDEzICsxOTM0LDE0IEBACiAJCW1udF9mbGFncyB8PSBNTlRfTk9BVElNRTsKIAlpZiAoZmxhZ3MgJiBNU19OT0RJUkFUSU1FKQogCQltbnRfZmxhZ3MgfD0gTU5UX05PRElSQVRJTUU7Ci0JaWYgKGZsYWdzICYgTVNfUkVMQVRJTUUpCi0JCW1udF9mbGFncyB8PSBNTlRfUkVMQVRJTUU7CisJaWYgKGZsYWdzICYgTVNfU1RSSUNUQVRJTUUpCisJCW1udF9mbGFncyAmPSB+KE1OVF9SRUxBVElNRSB8IE1OVF9OT0FUSU1FKTsKIAlpZiAoZmxhZ3MgJiBNU19SRE9OTFkpCiAJCW1udF9mbGFncyB8PSBNTlRfUkVBRE9OTFk7CiAKIAlmbGFncyAmPSB+KE1TX05PU1VJRCB8IE1TX05PRVhFQyB8IE1TX05PREVWIHwgTVNfQUNUSVZFIHwKLQkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UKTsKKwkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UIHwKKwkJICAgTVNfU1RSSUNUQVRJTUUpOwogCiAJLyogLi4uIGFuZCBnZXQgdGhlIG1vdW50cG9pbnQgKi8KIAlyZXR2YWwgPSBrZXJuX3BhdGgoZGlyX25hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCA5YjcyOGYzLi41NzQxNThhIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC0yNTUsNiArMjU1LDMyIEBACiAJfQogCXJldHVybiAwOwogfQorCisvKgorICogVGVzdCBpZiB0d28gaXA2IHNvY2tldCBhZGRyZXNzZXMgcmVmZXIgdG8gdGhlIHNhbWUgc29ja2V0IGJ5CisgKiBjb21wYXJpbmcgcmVsZXZhbnQgZmllbGRzLiBUaGUgcGFkZGluZyBieXRlcyBzcGVjaWZpY2FsbHksIGFyZSBub3QKKyAqIGNvbXBhcmVkLiBzaW42X2Zsb3dpbmZvIGlzIG5vdCBjb21wYXJlZCBiZWNhdXNlIGl0IG9ubHkgYWZmZWN0cyBRb1MKKyAqIGFuZCBzaW42X3Njb3BlX2lkIGlzIG9ubHkgY29tcGFyZWQgaWYgdGhlIGFkZHJlc3MgaXMgImxpbmsgbG9jYWwiCisgKiBiZWNhdXNlICJsaW5rIGxvY2FsIiBhZGRyZXNzZXMgbmVlZCBvbmx5IGJlIHVuaXF1ZSB0byBhIHNwZWNpZmljCisgKiBsaW5rLiBDb252ZXJzZWx5LCBvcmRpbmFyeSB1bmljYXN0IGFkZHJlc3NlcyBtaWdodCBoYXZlIGRpZmZlcmVudAorICogc2luNl9zY29wZV9pZC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgYm90aCBzb2NrZXQgYWRkcmVzc2VzIGFyZSBBRl9JTkVUNi4KKyAqLworc3RhdGljIGludCBuZnNfc29ja2FkZHJfY21wX2lwNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKKwkJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYWRkcjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYWRkcjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMjsKKworCWlmICghaXB2Nl9hZGRyX2VxdWFsKCZzYWRkcjEtPnNpbjZfYWRkciwKKwkJCSAgICAgJnNhZGRyMS0+c2luNl9hZGRyKSkKKwkJcmV0dXJuIDA7CisJaWYgKGlwdjZfYWRkcl9zY29wZSgmc2FkZHIxLT5zaW42X2FkZHIpID09IElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUwgJiYKKwkgICAgc2FkZHIxLT5zaW42X3Njb3BlX2lkICE9IHNhZGRyMi0+c2luNl9zY29wZV9pZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNhZGRyMS0+c2luNl9wb3J0ID09IHNhZGRyMi0+c2luNl9wb3J0OworfQogI2Vsc2UKIHN0YXRpYyBpbnQgbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcjQoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzYTEsCiAJCQkJIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2EyKQpAQCAtMjcwLDkgKzI5Niw1MiBAQAogCXJldHVybiBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2ExLAogCQkJKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMik7CiB9CisKK3N0YXRpYyBpbnQgbmZzX3NvY2thZGRyX2NtcF9pcDYoY29uc3Qgc3RydWN0IHNvY2thZGRyICogc2ExLAorCQkJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqIHNhMikKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAvKgorICogVGVzdCBpZiB0d28gaXA0IHNvY2tldCBhZGRyZXNzZXMgcmVmZXIgdG8gdGhlIHNhbWUgc29ja2V0LCBieQorICogY29tcGFyaW5nIHJlbGV2YW50IGZpZWxkcy4gVGhlIHBhZGRpbmcgYnl0ZXMgc3BlY2lmaWNhbGx5LCBhcmUKKyAqIG5vdCBjb21wYXJlZC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgYm90aCBzb2NrZXQgYWRkcmVzc2VzIGFyZSBBRl9JTkVULgorICovCitzdGF0aWMgaW50IG5mc19zb2NrYWRkcl9jbXBfaXA0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAorCQkJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHIxID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTI7CisKKwlpZiAoc2FkZHIxLT5zaW5fYWRkci5zX2FkZHIgIT0gc2FkZHIyLT5zaW5fYWRkci5zX2FkZHIpCisJCXJldHVybiAwOworCXJldHVybiBzYWRkcjEtPnNpbl9wb3J0ID09IHNhZGRyMi0+c2luX3BvcnQ7Cit9CisKKy8qCisgKiBUZXN0IGlmIHR3byBzb2NrZXQgYWRkcmVzc2VzIHJlcHJlc2VudCB0aGUgc2FtZSBhY3R1YWwgc29ja2V0LAorICogYnkgY29tcGFyaW5nIChvbmx5KSByZWxldmFudCBmaWVsZHMuCisgKi8KK3N0YXRpYyBpbnQgbmZzX3NvY2thZGRyX2NtcChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKK3sKKwlpZiAoc2ExLT5zYV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1pbHkpCisJCXJldHVybiAwOworCisJc3dpdGNoIChzYTEtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIG5mc19zb2NrYWRkcl9jbXBfaXA0KHNhMSwgc2EyKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gbmZzX3NvY2thZGRyX2NtcF9pcDYoc2ExLCBzYTIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKICAqIEZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcyBhbmQgcHJvdG9jb2wgdmVyc2lvbgogICogLSByZXR1cm5zIE5VTEwgaWYgbm8gc3VjaCBjbGllbnQKICAqLwpAQCAtMzQ0LDggKzQxMywxMCBAQAogc3RhdGljIHN0cnVjdCBuZnNfY2xpZW50ICpuZnNfbWF0Y2hfY2xpZW50KGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50X2luaXRkYXRhICpkYXRhKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAgPSBkYXRhLT5hZGRyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbHAsICZuZnNfY2xpZW50X2xpc3QsIGNsX3NoYXJlX2xpbmspIHsKKwkgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqY2xhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xwLT5jbF9hZGRyOwogCQkvKiBEb24ndCBtYXRjaCBjbGllbnRzIHRoYXQgZmFpbGVkIHRvIGluaXRpYWxpc2UgcHJvcGVybHkgKi8KIAkJaWYgKGNscC0+Y2xfY29uc19zdGF0ZSA8IDApCiAJCQljb250aW51ZTsKQEAgLTM1OCw3ICs0MjksNyBAQAogCQkJY29udGludWU7CiAKIAkJLyogTWF0Y2ggdGhlIGZ1bGwgc29ja2V0IGFkZHJlc3MgKi8KLQkJaWYgKG1lbWNtcCgmY2xwLT5jbF9hZGRyLCBkYXRhLT5hZGRyLCBzaXplb2YoY2xwLT5jbF9hZGRyKSkgIT0gMCkKKwkJaWYgKCFuZnNfc29ja2FkZHJfY21wKHNhcCwgY2xhcCkpCiAJCQljb250aW51ZTsKIAogCQlhdG9taWNfaW5jKCZjbHAtPmNsX2NvdW50KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCBlMzVjODE5Li42NzIzNjhmIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xODkyLDggKzE4OTIsMTQgQEAKIAljYWNoZS5jcmVkID0gY3JlZDsKIAljYWNoZS5qaWZmaWVzID0gamlmZmllczsKIAlzdGF0dXMgPSBORlNfUFJPVE8oaW5vZGUpLT5hY2Nlc3MoaW5vZGUsICZjYWNoZSk7Ci0JaWYgKHN0YXR1cyAhPSAwKQorCWlmIChzdGF0dXMgIT0gMCkgeworCQlpZiAoc3RhdHVzID09IC1FU1RBTEUpIHsKKwkJCW5mc196YXBfY2FjaGVzKGlub2RlKTsKKwkJCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCQlzZXRfYml0KE5GU19JTk9fU1RBTEUsICZORlNfSShpbm9kZSktPmZsYWdzKTsKKwkJfQogCQlyZXR1cm4gc3RhdHVzOworCX0KIAluZnNfYWNjZXNzX2FkZF9jYWNoZShpbm9kZSwgJmNhY2hlKTsKIG91dDoKIAlpZiAoKG1hc2sgJiB+Y2FjaGUubWFzayAmIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSkgPT0gMCkKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzYWNsLmMgYi9mcy9uZnMvbmZzM2FjbC5jCmluZGV4IGNlZjYyNTUuLjZiYmYwZTYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzYWNsLmMKKysrIGIvZnMvbmZzL25mczNhY2wuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiB7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwogCXN0cnVjdCBuZnNfZmF0dHIgZmF0dHI7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2VzW05GU0FDTF9NQVhQQUdFU10gPSB7IH07CisJc3RydWN0IHBhZ2UgKnBhZ2VzW05GU0FDTF9NQVhQQUdFU107CiAJc3RydWN0IG5mczNfc2V0YWNsYXJncyBhcmdzID0gewogCQkuaW5vZGUgPSBpbm9kZSwKIAkJLm1hc2sgPSBORlNfQUNMLApAQCAtMzAzLDcgKzMwMyw3IEBACiAJCS5ycGNfYXJncAk9ICZhcmdzLAogCQkucnBjX3Jlc3AJPSAmZmF0dHIsCiAJfTsKLQlpbnQgc3RhdHVzLCBjb3VudDsKKwlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gLUVPUE5PVFNVUFA7CiAJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfQUNMUykpCkBAIC0zMTksNiArMzE5LDIwIEBACiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJYXJncy5tYXNrIHw9IE5GU19ERkFDTDsKIAkJYXJncy5hY2xfZGVmYXVsdCA9IGRmYWNsOworCQlhcmdzLmxlbiA9IG5mc2FjbF9zaXplKGFjbCwgZGZhY2wpOworCX0gZWxzZQorCQlhcmdzLmxlbiA9IG5mc2FjbF9zaXplKGFjbCwgTlVMTCk7CisKKwlpZiAoYXJncy5sZW4gPiBORlNfQUNMX0lOTElORV9CVUZTSVpFKSB7CisJCXVuc2lnbmVkIGludCBucGFnZXMgPSAxICsgKChhcmdzLmxlbiAtIDEpID4+IFBBR0VfU0hJRlQpOworCisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWRvIHsKKwkJCWFyZ3MucGFnZXNbYXJncy5ucGFnZXNdID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJCWlmIChhcmdzLnBhZ2VzW2FyZ3MubnBhZ2VzXSA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X2ZyZWVwYWdlczsKKwkJCWFyZ3MubnBhZ2VzKys7CisJCX0gd2hpbGUgKGFyZ3MubnBhZ2VzIDwgbnBhZ2VzKTsKIAl9CiAKIAlkcHJpbnRrKCJORlMgY2FsbCBzZXRhY2xcbiIpOwpAQCAtMzI5LDEwICszNDMsNiBAQAogCW5mc196YXBfYWNsX2NhY2hlKGlub2RlKTsKIAlkcHJpbnRrKCJORlMgcmVwbHkgc2V0YWNsOiAlZFxuIiwgc3RhdHVzKTsKIAotCS8qIHBhZ2VzIG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkIGF0IHRoZSB4ZHIgbGF5ZXIuICovCi0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTkZTQUNMX01BWFBBR0VTICYmIGFyZ3MucGFnZXNbY291bnRdOyBjb3VudCsrKQotCQlfX2ZyZWVfcGFnZShhcmdzLnBhZ2VzW2NvdW50XSk7Ci0KIAlzd2l0Y2ggKHN0YXR1cykgewogCQljYXNlIDA6CiAJCQlzdGF0dXMgPSBuZnNfcmVmcmVzaF9pbm9kZShpbm9kZSwgJmZhdHRyKTsKQEAgLTM0Niw2ICszNTYsMTEgQEAKIAkJY2FzZSAtRU5PVFNVUFA6CiAJCQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKIAl9CitvdXRfZnJlZXBhZ2VzOgorCXdoaWxlIChhcmdzLm5wYWdlcyAhPSAwKSB7CisJCWFyZ3MubnBhZ2VzLS07CisJCV9fZnJlZV9wYWdlKGFyZ3MucGFnZXNbYXJncy5ucGFnZXNdKTsKKwl9CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzeGRyLmMgYi9mcy9uZnMvbmZzM3hkci5jCmluZGV4IDExY2RkZGUuLjZjZGVhY2YgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzeGRyLmMKKysrIGIvZnMvbmZzL25mczN4ZHIuYwpAQCAtODIsOCArODIsMTAgQEAKICNkZWZpbmUgTkZTM19jb21taXRyZXNfc3oJKDErTkZTM193Y2NfZGF0YV9zeisyKQogCiAjZGVmaW5lIEFDTDNfZ2V0YWNsYXJnc19zegkoTkZTM19maF9zeisxKQotI2RlZmluZSBBQ0wzX3NldGFjbGFyZ3Nfc3oJKE5GUzNfZmhfc3orMSsyKigyKzUqMykpCi0jZGVmaW5lIEFDTDNfZ2V0YWNscmVzX3N6CSgxK05GUzNfcG9zdF9vcF9hdHRyX3N6KzErMiooMis1KjMpKQorI2RlZmluZSBBQ0wzX3NldGFjbGFyZ3Nfc3oJKE5GUzNfZmhfc3orMSsgXAorCQkJCVhEUl9RVUFETEVOKE5GU19BQ0xfSU5MSU5FX0JVRlNJWkUpKQorI2RlZmluZSBBQ0wzX2dldGFjbHJlc19zegkoMStORlMzX3Bvc3Rfb3BfYXR0cl9zeisxKyBcCisJCQkJWERSX1FVQURMRU4oTkZTX0FDTF9JTkxJTkVfQlVGU0laRSkpCiAjZGVmaW5lIEFDTDNfc2V0YWNscmVzX3N6CSgxK05GUzNfcG9zdF9vcF9hdHRyX3N6KQogCiAvKgpAQCAtNzAzLDI4ICs3MDUsMTggQEAKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzM19zZXRhY2xhcmdzICphcmdzKQogewogCXN0cnVjdCB4ZHJfYnVmICpidWYgPSAmcmVxLT5ycV9zbmRfYnVmOwotCXVuc2lnbmVkIGludCBiYXNlLCBsZW5faW5faGVhZCwgbGVuID0gbmZzYWNsX3NpemUoCi0JCShhcmdzLT5tYXNrICYgTkZTX0FDTCkgICA/IGFyZ3MtPmFjbF9hY2Nlc3MgIDogTlVMTCwKLQkJKGFyZ3MtPm1hc2sgJiBORlNfREZBQ0wpID8gYXJncy0+YWNsX2RlZmF1bHQgOiBOVUxMKTsKLQlpbnQgY291bnQsIGVycjsKKwl1bnNpZ25lZCBpbnQgYmFzZTsKKwlpbnQgZXJyOwogCiAJcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBORlNfRkgoYXJncy0+aW5vZGUpKTsKIAkqcCsrID0gaHRvbmwoYXJncy0+bWFzayk7Ci0JYmFzZSA9IChjaGFyICopcCAtIChjaGFyICopYnVmLT5oZWFkLT5pb3ZfYmFzZTsKLQkvKiBwdXQgYXMgbXVjaCBvZiB0aGUgYWNscyBpbnRvIGhlYWQgYXMgcG9zc2libGUuICovCi0JbGVuX2luX2hlYWQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGJ1Zi0+aGVhZC0+aW92X2xlbiAtIGJhc2UsIGxlbik7Ci0JbGVuIC09IGxlbl9pbl9oZWFkOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwICsgKGxlbl9pbl9oZWFkID4+IDIpKTsKKwlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7CisJYmFzZSA9IHJlcS0+cnFfc2xlbjsKIAotCWZvciAoY291bnQgPSAwOyAoY291bnQgPDwgUEFHRV9TSElGVCkgPCBsZW47IGNvdW50KyspIHsKLQkJYXJncy0+cGFnZXNbY291bnRdID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFhcmdzLT5wYWdlc1tjb3VudF0pIHsKLQkJCXdoaWxlIChjb3VudCkKLQkJCQlfX2ZyZWVfcGFnZShhcmdzLT5wYWdlc1stLWNvdW50XSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQl4ZHJfZW5jb2RlX3BhZ2VzKGJ1ZiwgYXJncy0+cGFnZXMsIDAsIGxlbik7CisJaWYgKGFyZ3MtPm5wYWdlcyAhPSAwKQorCQl4ZHJfZW5jb2RlX3BhZ2VzKGJ1ZiwgYXJncy0+cGFnZXMsIDAsIGFyZ3MtPmxlbik7CisJZWxzZQorCQlyZXEtPnJxX3NsZW4gKz0gYXJncy0+bGVuOwogCiAJZXJyID0gbmZzYWNsX2VuY29kZShidWYsIGJhc2UsIGFyZ3MtPmlub2RlLAogCQkJICAgIChhcmdzLT5tYXNrICYgTkZTX0FDTCkgPwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKaW5kZXggMzBiZWZjMy4uMmEyYTBhNyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCkBAIC0yMSw3ICsyMSw5IEBACiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1ZGUwogCiAvKgotICogQ2hlY2sgaWYgZnNfcm9vdCBpcyB2YWxpZAorICogQ29udmVydCB0aGUgTkZTdjQgcGF0aG5hbWUgY29tcG9uZW50cyBpbnRvIGEgc3RhbmRhcmQgcG9zaXggcGF0aC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyCiAgKi8KIHN0YXRpYyBpbmxpbmUgY2hhciAqbmZzNF9wYXRobmFtZV9zdHJpbmcoY29uc3Qgc3RydWN0IG5mczRfcGF0aG5hbWUgKnBhdGhuYW1lLAogCQkJCQkgY2hhciAqYnVmZmVyLCBzc2l6ZV90IGJ1ZmxlbikKQEAgLTk5LDIxICsxMDEsMjAgQEAKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJY2hhciAqbW50X3BhdGg7Ci0JaW50IHBhZ2UybGVuOworCXVuc2lnbmVkIGludCBtYXhidWZsZW47CiAJdW5zaWduZWQgaW50IHM7CiAKIAltbnRfcGF0aCA9IG5mczRfcGF0aG5hbWVfc3RyaW5nKCZsb2NhdGlvbi0+cm9vdHBhdGgsIHBhZ2UyLCBQQUdFX1NJWkUpOwogCWlmIChJU19FUlIobW50X3BhdGgpKQogCQlyZXR1cm4gbW50OwogCW1vdW50ZGF0YS0+bW50X3BhdGggPSBtbnRfcGF0aDsKLQlwYWdlMiArPSBzdHJsZW4obW50X3BhdGgpICsgMTsKLQlwYWdlMmxlbiA9IFBBR0VfU0laRSAtIHN0cmxlbihtbnRfcGF0aCkgLSAxOworCW1heGJ1ZmxlbiA9IG1udF9wYXRoIC0gMSAtIHBhZ2UyOwogCiAJZm9yIChzID0gMDsgcyA8IGxvY2F0aW9uLT5uc2VydmVyczsgcysrKSB7CiAJCWNvbnN0IHN0cnVjdCBuZnM0X3N0cmluZyAqYnVmID0gJmxvY2F0aW9uLT5zZXJ2ZXJzW3NdOwogCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOwogCi0JCWlmIChidWYtPmxlbiA8PSAwIHx8IGJ1Zi0+bGVuID49IFBBR0VfU0laRSkKKwkJaWYgKGJ1Zi0+bGVuIDw9IDAgfHwgYnVmLT5sZW4gPj0gbWF4YnVmbGVuKQogCQkJY29udGludWU7CiAKIAkJbW91bnRkYXRhLT5hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyOwpAQCAtMTI2LDggKzEyNyw4IEBACiAJCQljb250aW51ZTsKIAkJbmZzX3NldF9wb3J0KG1vdW50ZGF0YS0+YWRkciwgTkZTX1BPUlQpOwogCi0JCXN0cm5jcHkocGFnZTIsIGJ1Zi0+ZGF0YSwgcGFnZTJsZW4pOwotCQlwYWdlMltwYWdlMmxlbl0gPSAnXDAnOworCQltZW1jcHkocGFnZTIsIGJ1Zi0+ZGF0YSwgYnVmLT5sZW4pOworCQlwYWdlMltidWYtPmxlbl0gPSAnXDAnOwogCQltb3VudGRhdGEtPmhvc3RuYW1lID0gcGFnZTI7CiAKIAkJc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXM6JXMiLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0eGRyLmMgYi9mcy9uZnNkL25mczR4ZHIuYwppbmRleCBmNjU5NTNiLi45MjUwMDY3IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczR4ZHIuYworKysgYi9mcy9uZnNkL25mczR4ZHIuYwpAQCAtMjU5Niw2ICsyNTk2LDcgQEAKIAlbT1BfTE9PS1VQUF0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKIAlbT1BfTlZFUklGWV0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKIAlbT1BfT1BFTl0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfb3BlbiwKKwlbT1BfT1BFTkFUVFJdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCiAJW09QX09QRU5fQ09ORklSTV0JPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9vcGVuX2NvbmZpcm0sCiAJW09QX09QRU5fRE9XTkdSQURFXQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX29wZW5fZG93bmdyYWRlLAogCVtPUF9QVVRGSF0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDZlNTBhYWEuLmMxNjVhNjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtOTk4LDggKzk5OCwxMSBAQAogCiAJaWYgKCFFWF9JU1NZTkMoZXhwKSkKIAkJc3RhYmxlID0gMDsKLQlpZiAoc3RhYmxlICYmICFFWF9XR0FUSEVSKGV4cCkpCisJaWYgKHN0YWJsZSAmJiAhRVhfV0dBVEhFUihleHApKSB7CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX1NZTkM7CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOworCX0KIAogCS8qIFdyaXRlIHRoZSBkYXRhLiAqLwogCW9sZGZzID0gZ2V0X2ZzKCk7IHNldF9mcyhLRVJORUxfRFMpOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeS5jIGIvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeS5jCmluZGV4IGRhZTNmMjguLjMzMWYyZTggMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnkuYworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCWludCByZXQ7CiAKIAlkbyB7Ci0JCWlmICh1bmxpa2VseSghaWRyX3ByZV9nZXQoJmloLT5pZHIsIEdGUF9LRVJORUwpKSkKKwkJaWYgKHVubGlrZWx5KCFpZHJfcHJlX2dldCgmaWgtPmlkciwgR0ZQX05PRlMpKSkKIAkJCXJldHVybiAtRU5PU1BDOwogCQlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmaWgtPmlkciwgd2F0Y2gsIGloLT5sYXN0X3dkKzEsICZ3YXRjaC0+d2QpOwogCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IDYwZmU3NDAzNS4uMTllM2E5NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuYworKysgYi9mcy9vY2ZzMi9hbGxvYy5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAogCUJVR19PTihPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpOwogCW1sb2dfYnVnX29uX21zZyghb2NmczJfc3BhcnNlX2FsbG9jKG9zYikgJiYKLQkJCShPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgIT0gcmVjLT5lX2Nwb3MpLAorCQkJKE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyAhPQorCQkJIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSksCiAJCQkiRGV2aWNlICVzLCBhc2tpbmcgZm9yIHNwYXJzZSBhbGxvY2F0aW9uOiBpbm9kZSAlbGx1LCAiCiAJCQkiY3BvcyAldSwgY2x1c3RlcnMgJXVcbiIsCiAJCQlvc2ItPmRldl9zdHIsCkBAIC00Nzk2LDYgKzQ3OTcsMjkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG9jZnMyX3JlcGxhY2VfZXh0ZW50X3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCQkgICAgaW50IHNwbGl0X2luZGV4LAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjKQoreworCWludCByZXQ7CisKKwlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGgsCisJCQkJCSAgIHBhdGhfbnVtX2l0ZW1zKHBhdGgpIC0gMSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWVsLT5sX3JlY3Nbc3BsaXRfaW5kZXhdID0gKnNwbGl0X3JlYzsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBwYXRoX2xlYWZfYmgocGF0aCkpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBNYXJrIHBhcnQgb3IgYWxsIG9mIHRoZSBleHRlbnQgcmVjb3JkIGF0IHNwbGl0X2luZGV4IGluIHRoZSBsZWFmCiAgKiBwb2ludGVkIHRvIGJ5IHBhdGggYXMgd3JpdHRlbi4gVGhpcyByZW1vdmVzIHRoZSB1bndyaXR0ZW4KQEAgLTQ4ODUsNyArNDkwOSw5IEBACiAKIAlpZiAoY3R4dC5jX2NvbnRpZ190eXBlID09IENPTlRJR19OT05FKSB7CiAJCWlmIChjdHh0LmNfc3BsaXRfY292ZXJzX3JlYykKLQkJCWVsLT5sX3JlY3Nbc3BsaXRfaW5kZXhdID0gKnNwbGl0X3JlYzsKKwkJCXJldCA9IG9jZnMyX3JlcGxhY2VfZXh0ZW50X3JlYyhpbm9kZSwgaGFuZGxlLAorCQkJCQkJICAgICAgIHBhdGgsIGVsLAorCQkJCQkJICAgICAgIHNwbGl0X2luZGV4LCBzcGxpdF9yZWMpOwogCQllbHNlCiAJCQlyZXQgPSBvY2ZzMl9zcGxpdF9hbmRfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGV0LAogCQkJCQkJICAgICAmbGFzdF9lYl9iaCwgc3BsaXRfaW5kZXgsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggYTA2N2E2Yy4uOGUxNzA5YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAogCWlmIChzaXplID4gUEFHRV9DQUNIRV9TSVpFIHx8Ci0JICAgIHNpemUgPiBvY2ZzMl9tYXhfaW5saW5lX2RhdGEoaW5vZGUtPmlfc2IpKSB7CisJICAgIHNpemUgPiBvY2ZzMl9tYXhfaW5saW5lX2RhdGFfd2l0aF94YXR0cihpbm9kZS0+aV9zYiwgZGkpKSB7CiAJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAogCQkJICAgICJJbm9kZSAlbGx1IGhhcyB3aXRoIGlubGluZSBkYXRhIGhhcyBiYWQgc2l6ZTogJUx1IiwKIAkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKQEAgLTE1NTUsNiArMTU1NSw3IEBACiAJaW50IHJldCwgd3JpdHRlbiA9IDA7CiAJbG9mZl90IGVuZCA9IHBvcyArIGxlbjsKIAlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IE5VTEw7CiAKIAltbG9nKDAsICJJbm9kZSAlbGx1LCB3cml0ZSBvZiAldSBieXRlcyBhdCBvZmYgJWxsdS4gZmVhdHVyZXM6IDB4JXhcbiIsCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywgbGVuLCAodW5zaWduZWQgbG9uZyBsb25nKXBvcywKQEAgLTE1ODcsNyArMTU4OCw5IEBACiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoZSB3cml0ZSBjYW4gZml0LgogCSAqLwotCWlmIChtbWFwX3BhZ2UgfHwgZW5kID4gb2NmczJfbWF4X2lubGluZV9kYXRhKGlub2RlLT5pX3NiKSkKKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopd2MtPndfZGlfYmgtPmJfZGF0YTsKKwlpZiAobW1hcF9wYWdlIHx8CisJICAgIGVuZCA+IG9jZnMyX21heF9pbmxpbmVfZGF0YV93aXRoX3hhdHRyKGlub2RlLT5pX3NiLCBkaSkpCiAJCXJldHVybiAwOwogCiBkb19pbmxpbmVfd3JpdGU6CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKaW5kZXggNTRlMTgyYS4uMGEyODEzOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwpAQCAtMTg0OSwxMiArMTg0OSwxMiBAQAogCQlpZiAoIW1sZSkgewogCQkJaWYgKHJlcy0+b3duZXIgIT0gRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV04gJiYKIAkJCSAgICByZXMtPm93bmVyICE9IGFzc2VydC0+bm9kZV9pZHgpIHsKLQkJCQltbG9nKE1MX0VSUk9SLCAiYXNzZXJ0X21hc3RlciBmcm9tICIKLQkJCQkJICAiJXUsIGJ1dCBjdXJyZW50IG93bmVyIGlzICIKLQkJCQkJICAiJXUhICglLipzKVxuIiwKLQkJCQkgICAgICAgYXNzZXJ0LT5ub2RlX2lkeCwgcmVzLT5vd25lciwKLQkJCQkgICAgICAgbmFtZWxlbiwgbmFtZSk7Ci0JCQkJZ290byBraWxsOworCQkJCW1sb2coTUxfRVJST1IsICJESUUhIE1hc3RlcnkgYXNzZXJ0IGZyb20gJXUsICIKKwkJCQkgICAgICJidXQgY3VycmVudCBvd25lciBpcyAldSEgKCUuKnMpXG4iLAorCQkJCSAgICAgYXNzZXJ0LT5ub2RlX2lkeCwgcmVzLT5vd25lciwgbmFtZWxlbiwKKwkJCQkgICAgIG5hbWUpOworCQkJCV9fZGxtX3ByaW50X29uZV9sb2NrX3Jlc291cmNlKHJlcyk7CisJCQkJQlVHKCk7CiAJCQl9CiAJCX0gZWxzZSBpZiAobWxlLT50eXBlICE9IERMTV9NTEVfTUlHUkFUSU9OKSB7CiAJCQlpZiAocmVzLT5vd25lciAhPSBETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTikgewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jIGIvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCmluZGV4IGQxMjk1MjAuLjQwNjBiYjMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKQEAgLTE4MSw4ICsxODEsNyBAQAogCiAJCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7CiAJCS8qIFRoaXMgZW5zdXJlcyB0aGF0IGNsZWFyIHJlZm1hcCBpcyBzZW50IGFmdGVyIHRoZSBzZXQgKi8KLQkJX19kbG1fd2FpdF9vbl9sb2NrcmVzX2ZsYWdzKHJlcywgKERMTV9MT0NLX1JFU19TRVRSRUZfSU5QUk9HIHwKLQkJCQkJCSAgRExNX0xPQ0tfUkVTX01JR1JBVElORykpOworCQlfX2RsbV93YWl0X29uX2xvY2tyZXNfZmxhZ3MocmVzLCBETE1fTE9DS19SRVNfU0VUUkVGX0lOUFJPRyk7CiAJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAogCQkvKiBjbGVhciBvdXIgYml0IGZyb20gdGhlIG1hc3RlcidzIHJlZm1hcCwgaWdub3JlIGVycm9ycyAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXVubG9jay5jIGIvZnMvb2NmczIvZGxtL2RsbXVubG9jay5jCmluZGV4IDg2Y2EwODUuLmZjZjg3OWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG11bmxvY2suYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtdW5sb2NrLmMKQEAgLTExNywxMSArMTE3LDExIEBACiAJZWxzZQogCQlCVUdfT04ocmVzLT5vd25lciA9PSBkbG0tPm5vZGVfbnVtKTsKIAotCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7CisJc3Bpbl9sb2NrKCZkbG0tPmFzdF9sb2NrKTsKIAkvKiBXZSB3YW50IHRvIGJlIHN1cmUgdGhhdCB3ZSdyZSBub3QgZnJlZWluZyBhIGxvY2sKIAkgKiB0aGF0IHN0aWxsIGhhcyBBU1QncyBwZW5kaW5nLi4uICovCiAJaW5fdXNlID0gIWxpc3RfZW1wdHkoJmxvY2stPmFzdF9saXN0KTsKLQlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CisJc3Bpbl91bmxvY2soJmRsbS0+YXN0X2xvY2spOwogCWlmIChpbl91c2UpIHsKIAkgICAgICAgbWxvZyhNTF9FUlJPUiwgImxvY2tyZXMgJS4qczogU29tZW9uZSBpcyBjYWxsaW5nIGRsbXVubG9jayAiCiAJCSAgICAid2hpbGUgd2FpdGluZyBmb3IgYW4gYXN0ISIsIHJlcy0+bG9ja25hbWUubGVuLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5jIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCmluZGV4IDIwNmEyMzcuLjcyMTlhODYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuYworKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKQEAgLTMyMCw5ICszMjAsMTQgQEAKIAkJCQkJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKIAkJCQkJCWludCBjb252ZXJ0KTsKLSNkZWZpbmUgb2NmczJfbG9nX2RsbV9lcnJvcihfZnVuYywgX2VyciwgX2xvY2tyZXMpIGRvIHsJCQlcCi0JbWxvZyhNTF9FUlJPUiwgIkRMTSBlcnJvciAlZCB3aGlsZSBjYWxsaW5nICVzIG9uIHJlc291cmNlICVzXG4iLCBcCi0JICAgICBfZXJyLCBfZnVuYywgX2xvY2tyZXMtPmxfbmFtZSk7CQkJCVwKKyNkZWZpbmUgb2NmczJfbG9nX2RsbV9lcnJvcihfZnVuYywgX2VyciwgX2xvY2tyZXMpIGRvIHsJCQkJCVwKKwlpZiAoKF9sb2NrcmVzKS0+bF90eXBlICE9IE9DRlMyX0xPQ0tfVFlQRV9ERU5UUlkpCQkJCVwKKwkJbWxvZyhNTF9FUlJPUiwgIkRMTSBlcnJvciAlZCB3aGlsZSBjYWxsaW5nICVzIG9uIHJlc291cmNlICVzXG4iLAlcCisJCSAgICAgX2VyciwgX2Z1bmMsIF9sb2NrcmVzLT5sX25hbWUpOwkJCQkJXAorCWVsc2UJCQkJCQkJCQkJXAorCQltbG9nKE1MX0VSUk9SLCAiRExNIGVycm9yICVkIHdoaWxlIGNhbGxpbmcgJXMgb24gcmVzb3VyY2UgJS4qcyUwOHhcbiIsCVwKKwkJICAgICBfZXJyLCBfZnVuYywgT0NGUzJfREVOVFJZX0xPQ0tfSU5PX1NUQVJUIC0gMSwgKF9sb2NrcmVzKS0+bF9uYW1lLAlcCisJCSAgICAgKHVuc2lnbmVkIGludClvY2ZzMl9nZXRfZGVudHJ5X2xvY2tfaW5vKF9sb2NrcmVzKSk7CQlcCiB9IHdoaWxlICgwKQogc3RhdGljIGludCBvY2ZzMl9kb3duY29udmVydF90aHJlYWQodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIG9jZnMyX2Rvd25jb252ZXJ0X29uX3VubG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCAzYzM1MzJlLi4xNzI4NTBhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC01MTMsOCArNTEzLDEwIEBACiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSAgICAgICBsb2ZmX3QgbmV3X3NpemUpCiB7Ci0JcmV0dXJuIGpiZDJfam91cm5hbF9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfamlub2RlLAotCQkJCQkJICAgbmV3X3NpemUpOworCXJldHVybiBqYmQyX2pvdXJuYWxfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZSgKKwkJCQlPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPmpvdXJuYWwtPmpfam91cm5hbCwKKwkJCQkmT0NGUzJfSShpbm9kZSktPmlwX2ppbm9kZSwKKwkJCQluZXdfc2l6ZSk7CiB9CiAKICNlbmRpZiAvKiBPQ0ZTMl9KT1VSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDA4NGFiYTguLjRiMTE3NjIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtNTMyLDcgKzUzMiw4IEBACiAKIAkJZmUtPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYoZmVhdCB8IE9DRlMyX0lOTElORV9EQVRBX0ZMKTsKIAotCQlmZS0+aWQyLmlfZGF0YS5pZF9jb3VudCA9IGNwdV90b19sZTE2KG9jZnMyX21heF9pbmxpbmVfZGF0YShvc2ItPnNiKSk7CisJCWZlLT5pZDIuaV9kYXRhLmlkX2NvdW50ID0gY3B1X3RvX2xlMTYoCisJCQkJb2NmczJfbWF4X2lubGluZV9kYXRhX3dpdGhfeGF0dHIob3NiLT5zYiwgZmUpKTsKIAl9IGVsc2UgewogCQlmZWwgPSAmZmUtPmlkMi5pX2xpc3Q7CiAJCWZlbC0+bF90cmVlX2RlcHRoID0gMDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IDA3NzM4NDEuLjk0NmQzYzMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMzQxLDYgKzM0MSw5IEBACiAJc3RydWN0IG9jZnMyX25vZGVfbWFwCQlvc2JfcmVjb3ZlcmluZ19vcnBoYW5fZGlyczsKIAl1bnNpZ25lZCBpbnQJCQkqb3NiX29ycGhhbl93aXBlczsKIAl3YWl0X3F1ZXVlX2hlYWRfdAkJb3NiX3dpcGVfZXZlbnQ7CisKKwkvKiB1c2VkIHRvIHByb3RlY3QgbWV0YWVjYyBjYWxjdWxhdGlvbiBjaGVjayBvZiB4YXR0ci4gKi8KKwlzcGlubG9ja190IG9zYl94YXR0cl9sb2NrOwogfTsKIAogI2RlZmluZSBPQ0ZTMl9TQihzYikJICAgICgoc3RydWN0IG9jZnMyX3N1cGVyICopKHNiKS0+c19mc19pbmZvKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggYzdhZTQ1YS4uMjMzMmVmNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC0xMDcwLDEyICsxMDcwLDYgQEAKIAkJIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX3N5bWxpbmspOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9tYXhfaW5saW5lX2RhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlyZXR1cm4gc2ItPnNfYmxvY2tzaXplIC0KLQkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2Rpbm9kZSwgaWQyLmlfZGF0YS5pZF9kYXRhKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgb2NmczJfbWF4X2lubGluZV9kYXRhX3dpdGhfeGF0dHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJCSAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggYjFjYjM4Zi4uN2FjODNhOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0xNTM3LDYgKzE1MzcsMTMgQEAKIAl1bmxvY2tfYnVmZmVyKCpiaCk7CiAJbGxfcndfYmxvY2soUkVBRCwgMSwgYmgpOwogCXdhaXRfb25fYnVmZmVyKCpiaCk7CisJaWYgKCFidWZmZXJfdXB0b2RhdGUoKmJoKSkgeworCQltbG9nX2Vycm5vKC1FSU8pOworCQlicmVsc2UoKmJoKTsKKwkJKmJoID0gTlVMTDsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NDcsNiArMTc1NCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm9zYi0+YmxvY2tlZF9sb2NrX2xpc3QpOwogCW9zYi0+YmxvY2tlZF9sb2NrX2NvdW50ID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmb3NiLT5vc2JfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm9zYi0+b3NiX3hhdHRyX2xvY2spOwogCW9jZnMyX2luaXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOwogCiAJYXRvbWljX3NldCgmb3NiLT5hbGxvY19zdGF0cy5tb3ZlcywgMCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCA5MTUwMzlmLi4yNTYzZGY4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTgyLDEzICs4MiwxNCBAQAogCiAjZGVmaW5lIE9DRlMyX1hBVFRSX1JPT1RfU0laRQkoc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9kZWZfdmFsdWVfcm9vdCkpCiAjZGVmaW5lIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFCTgwCisjZGVmaW5lIE9DRlMyX1hBVFRSX0hFQURFUl9HQVAJNAogI2RlZmluZSBPQ0ZTMl9YQVRUUl9GUkVFX0lOX0lCT0RZCShPQ0ZTMl9NSU5fWEFUVFJfSU5MSU5FX1NJWkUgXAogCQkJCQkgLSBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlcikgXAotCQkJCQkgLSBzaXplb2YoX191MzIpKQorCQkJCQkgLSBPQ0ZTMl9YQVRUUl9IRUFERVJfR0FQKQogI2RlZmluZSBPQ0ZTMl9YQVRUUl9GUkVFX0lOX0JMT0NLKHB0cikJKChwdHIpLT5pX3NiLT5zX2Jsb2Nrc2l6ZSBcCiAJCQkJCSAtIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2spIFwKIAkJCQkJIC0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIpIFwKLQkJCQkJIC0gc2l6ZW9mKF9fdTMyKSkKKwkJCQkJIC0gT0NGUzJfWEFUVFJfSEVBREVSX0dBUCkKIAogc3RhdGljIHN0cnVjdCBvY2ZzMl94YXR0cl9kZWZfdmFsdWVfcm9vdCBkZWZfeHYgPSB7CiAJLnh2LnhyX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KDEpLApAQCAtMjc0LDEwICsyNzUsMTIgQEAKIAkJCSAgICAgICBidWNrZXQtPmJ1X2Jsb2NrcywgYnVja2V0LT5idV9iaHMsIDAsCiAJCQkgICAgICAgTlVMTCk7CiAJaWYgKCFyYykgeworCQlzcGluX2xvY2soJk9DRlMyX1NCKGJ1Y2tldC0+YnVfaW5vZGUtPmlfc2IpLT5vc2JfeGF0dHJfbG9jayk7CiAJCXJjID0gb2NmczJfdmFsaWRhdGVfbWV0YV9lY2NfYmhzKGJ1Y2tldC0+YnVfaW5vZGUtPmlfc2IsCiAJCQkJCQkgYnVja2V0LT5idV9iaHMsCiAJCQkJCQkgYnVja2V0LT5idV9ibG9ja3MsCiAJCQkJCQkgJmJ1Y2tldF94aChidWNrZXQpLT54aF9jaGVjayk7CisJCXNwaW5fdW5sb2NrKCZPQ0ZTMl9TQihidWNrZXQtPmJ1X2lub2RlLT5pX3NiKS0+b3NiX3hhdHRyX2xvY2spOwogCQlpZiAocmMpCiAJCQltbG9nX2Vycm5vKHJjKTsKIAl9CkBAIC0zMTAsOSArMzEzLDExIEBACiB7CiAJaW50IGk7CiAKKwlzcGluX2xvY2soJk9DRlMyX1NCKGJ1Y2tldC0+YnVfaW5vZGUtPmlfc2IpLT5vc2JfeGF0dHJfbG9jayk7CiAJb2NmczJfY29tcHV0ZV9tZXRhX2VjY19iaHMoYnVja2V0LT5idV9pbm9kZS0+aV9zYiwKIAkJCQkgICBidWNrZXQtPmJ1X2JocywgYnVja2V0LT5idV9ibG9ja3MsCiAJCQkJICAgJmJ1Y2tldF94aChidWNrZXQpLT54aF9jaGVjayk7CisJc3Bpbl91bmxvY2soJk9DRlMyX1NCKGJ1Y2tldC0+YnVfaW5vZGUtPmlfc2IpLT5vc2JfeGF0dHJfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnVja2V0LT5idV9ibG9ja3M7IGkrKykKIAkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJ1Y2tldC0+YnVfYmhzW2ldKTsKQEAgLTU0Miw4ICs1NDcsMTIgQEAKIAkgKiB3aGVuIGJsb2Nrc2l6ZSA9IDUxMiwgbWF5IHJlc2VydmUgb25lIG1vcmUgY2x1c2VyIGZvcgogCSAqIHhhdHRyIGJ1Y2tldCwgb3RoZXJ3aXNlIHJlc2VydmUgb25lIG1ldGFkYXRhIGJsb2NrCiAJICogZm9yIHRoZW0gaXMgb2suCisJICogSWYgdGhpcyBpcyBhIG5ldyBkaXJlY3Rvcnkgd2l0aCBpbmxpbmUgZGF0YSwKKwkgKiB3ZSBjaG9vc2UgdG8gcmVzZXJ2ZSB0aGUgZW50aXJlIGlubGluZSBhcmVhIGZvcgorCSAqIGRpcmVjdG9yeSBjb250ZW50cyBhbmQgZm9yY2UgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2suCiAJICovCiAJaWYgKGRpci0+aV9zYi0+c19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSB8fAorCSAgICAoU19JU0RJUihtb2RlKSAmJiBvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB8fAogCSAgICAoc19zaXplICsgYV9zaXplKSA+IE9DRlMyX1hBVFRSX0ZSRUVfSU5fSUJPRFkpIHsKIAkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgMSwgeGF0dHJfYWMpOwogCQlpZiAocmV0KSB7CkBAIC0xNTA3LDcgKzE1MTYsNyBAQAogCQlsYXN0ICs9IDE7CiAJfQogCi0JZnJlZSA9IG1pbl9vZmZzIC0gKCh2b2lkICopbGFzdCAtIHhzLT5iYXNlKSAtIHNpemVvZihfX3UzMik7CisJZnJlZSA9IG1pbl9vZmZzIC0gKCh2b2lkICopbGFzdCAtIHhzLT5iYXNlKSAtIE9DRlMyX1hBVFRSX0hFQURFUl9HQVA7CiAJaWYgKGZyZWUgPCAwKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjE5MCw3ICsyMTk5LDcgQEAKIAkJbGFzdCArPSAxOwogCX0KIAotCWZyZWUgPSBtaW5fb2ZmcyAtICgodm9pZCAqKWxhc3QgLSB4cy0+YmFzZSkgLSBzaXplb2YoX191MzIpOworCWZyZWUgPSBtaW5fb2ZmcyAtICgodm9pZCAqKWxhc3QgLSB4cy0+YmFzZSkgLSBPQ0ZTMl9YQVRUUl9IRUFERVJfR0FQOwogCWlmIChmcmVlIDwgMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI1OTIsOCArMjYwMSw5IEBACiAKIAlpZiAoIXJldCkgewogCQkvKiBVcGRhdGUgaW5vZGUgY3RpbWUuICovCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGN0eHQtPmhhbmRsZSwgaW5vZGUsIHhpcy0+aW5vZGVfYmgsCi0JCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoY3R4dC0+aGFuZGxlLCBpbm9kZSwKKwkJCQkJICAgICAgeGlzLT5pbm9kZV9iaCwKKwkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTQ3ODUsMTkgKzQ3OTUsMzMgQEAKIAkJCQkJCWNoYXIgKnZhbCwKIAkJCQkJCWludCB2YWx1ZV9sZW4pCiB7Ci0JaW50IG9mZnNldDsKKwlpbnQgcmV0LCBvZmZzZXQsIGJsb2NrX29mZjsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSA9IHhzLT5oZXJlOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gYnVja2V0X3hoKHhzLT5idWNrZXQpOworCXZvaWQgKmJhc2U7CiAKIAlCVUdfT04oIXhzLT5iYXNlIHx8ICF4ZSB8fCBvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpOwogCi0Jb2Zmc2V0ID0gbGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KSArCi0JCSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbik7CisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKGlub2RlLCB4aCwKKwkJCQkJCXhlIC0geGgtPnhoX2VudHJpZXMsCisJCQkJCQkmYmxvY2tfb2ZmLAorCQkJCQkJJm9mZnNldCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KIAotCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopKHhzLT5iYXNlICsgb2Zmc2V0KTsKKwliYXNlID0gYnVja2V0X2Jsb2NrKHhzLT5idWNrZXQsIGJsb2NrX29mZik7CisJeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikoYmFzZSArIG9mZnNldCArCisJCSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbikpOwogCi0JcmV0dXJuIF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIGhhbmRsZSwKLQkJCQkJICAgICAgIHh2LCB2YWwsIHZhbHVlX2xlbik7CisJcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgaGFuZGxlLAorCQkJCQkgICAgICB4diwgdmFsLCB2YWx1ZV9sZW4pOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSwKQEAgLTUwNjAsOCArNTA4NCw4IEBACiAJeGhfZnJlZV9zdGFydCA9IGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KTsKIAloZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyKSArCiAJCQljb3VudCAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOwotCW1heF9mcmVlID0gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgLQotCQlsZTE2X3RvX2NwdSh4aC0+eGhfbmFtZV92YWx1ZV9sZW4pIC0gaGVhZGVyX3NpemU7CisJbWF4X2ZyZWUgPSBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRSAtIGhlYWRlcl9zaXplIC0KKwkJbGUxNl90b19jcHUoeGgtPnhoX25hbWVfdmFsdWVfbGVuKSAtIE9DRlMyX1hBVFRSX0hFQURFUl9HQVA7CiAKIAltbG9nX2J1Z19vbl9tc2coaGVhZGVyX3NpemUgPiBibG9ja3NpemUsICJidWNrZXQgJWxsdSBoYXMgaGVhZGVyIHNpemUgIgogCQkJIm9mICV1IHdoaWNoIGV4Y2VlZCBibG9jayBzaXplXG4iLApAQCAtNTA5NCw3ICs1MTE4LDcgQEAKIAkJCW5lZWQgPSAwOwogCX0KIAotCWZyZWUgPSB4aF9mcmVlX3N0YXJ0IC0gaGVhZGVyX3NpemU7CisJZnJlZSA9IHhoX2ZyZWVfc3RhcnQgLSBoZWFkZXJfc2l6ZSAtIE9DRlMyX1hBVFRSX0hFQURFUl9HQVA7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IG5hbWUvdmFsdWUgcGFpcgogCSAqIGNhbiBleGlzdCBpbiB0aGUgc2FtZSBibG9jay4KQEAgLTUxMjcsNyArNTE1MSw4IEBACiAJCQl9CiAKIAkJCXhoX2ZyZWVfc3RhcnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZnJlZV9zdGFydCk7Ci0JCQlmcmVlID0geGhfZnJlZV9zdGFydCAtIGhlYWRlcl9zaXplOworCQkJZnJlZSA9IHhoX2ZyZWVfc3RhcnQgLSBoZWFkZXJfc2l6ZQorCQkJCS0gT0NGUzJfWEFUVFJfSEVBREVSX0dBUDsKIAkJCWlmICh4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplIDwgbmVlZCkKIAkJCQlmcmVlIC09IHhoX2ZyZWVfc3RhcnQgJSBibG9ja3NpemU7CiAKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCA2ZDcyMDI0Li4zOGUzMzdkIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAlwZGV2LT5kZXZ0ID0gZGV2dDsKIAogCS8qIGRlbGF5IHVldmVudCB1bnRpbCAnaG9sZGVycycgc3ViZGlyIGlzIGNyZWF0ZWQgKi8KLQlwZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKHBkZXYsIDEpOwogCWVyciA9IGRldmljZV9hZGQocGRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcHV0OwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJaWYgKCFwLT5ob2xkZXJfZGlyKQogCQlnb3RvIG91dF9kZWw7CiAKLQlwZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKHBkZXYsIDApOwogCWlmIChmbGFncyAmIEFERFBBUlRfRkxBR19XSE9MRURJU0spIHsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKHBkZXYsICZkZXZfYXR0cl93aG9sZV9kaXNrKTsKIAkJaWYgKGVycikKQEAgLTQyMiw3ICs0MjIsNyBAQAogCXJjdV9hc3NpZ25fcG9pbnRlcihwdGJsLT5wYXJ0W3BhcnRub10sIHApOwogCiAJLyogc3VwcHJlc3MgdWV2ZW50IGlmIHRoZSBkaXNrIHN1cHJlc3NlcyBpdCAqLwotCWlmICghZGRldi0+dWV2ZW50X3N1cHByZXNzKQorCWlmICghZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MocGRldikpCiAJCWtvYmplY3RfdWV2ZW50KCZwZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAKIAlyZXR1cm4gcDsKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWRldl9zZXRfbmFtZShkZGV2LCBkaXNrLT5kaXNrX25hbWUpOwogCiAJLyogZGVsYXkgdWV2ZW50cywgdW50aWwgd2Ugc2Nhbm5lZCBwYXJ0aXRpb24gdGFibGUgKi8KLQlkZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRkZXYsIDEpOwogCiAJaWYgKGRldmljZV9hZGQoZGRldikpCiAJCXJldHVybjsKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCiBleGl0OgogCS8qIGFubm91bmNlIGRpc2sgYWZ0ZXIgcG9zc2libGUgcGFydGl0aW9ucyBhcmUgY3JlYXRlZCAqLwotCWRkZXYtPnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMCk7CiAJa29iamVjdF91ZXZlbnQoJmRkZXYtPmtvYmosIEtPQkpfQUREKTsKIAogCS8qIGFubm91bmNlIHBvc3NpYmxlIHBhcnRpdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvaWJtLmMgYi9mcy9wYXJ0aXRpb25zL2libS5jCmluZGV4IDFlMDY0YzQuLjQ2Mjk3NjggMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvaWJtLmMKKysrIGIvZnMvcGFydGl0aW9ucy9pYm0uYwpAQCAtMjEsMjAgKzIxLDM4IEBACiAgKiBjb21wdXRlIHRoZSBibG9jayBudW1iZXIgZnJvbSBhCiAgKiBjeWwtY3lsLWhlYWQtaGVhZCBzdHJ1Y3R1cmUKICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBzZWN0b3JfdAogY2NoaDJibGsgKHN0cnVjdCB2dG9jX2NjaGggKnB0ciwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pIHsKLSAgICAgICAgcmV0dXJuIHB0ci0+Y2MgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKLQkgICAgICAgcHRyLT5oaCAqIGdlby0+c2VjdG9yczsKKworCXNlY3Rvcl90IGN5bDsKKwlfX3UxNiBoZWFkOworCisJLypkZWNvZGUgY3lsaW5kZXIgYW5kIGhlYWRzIGZvciBsYXJnZSB2b2x1bWVzICovCisJY3lsID0gcHRyLT5oaCAmIDB4RkZGMDsKKwljeWwgPDw9IDEyOworCWN5bCB8PSBwdHItPmNjOworCWhlYWQgPSBwdHItPmhoICYgMHgwMDBGOworCXJldHVybiBjeWwgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKKwkgICAgICAgaGVhZCAqIGdlby0+c2VjdG9yczsKIH0KIAogLyoKICAqIGNvbXB1dGUgdGhlIGJsb2NrIG51bWJlciBmcm9tIGEKICAqIGN5bC1jeWwtaGVhZC1oZWFkLWJsb2NrIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIHNlY3Rvcl90CiBjY2hoYjJibGsgKHN0cnVjdCB2dG9jX2NjaGhiICpwdHIsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKSB7Ci0gICAgICAgIHJldHVybiBwdHItPmNjICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCi0JCXB0ci0+aGggKiBnZW8tPnNlY3RvcnMgKworCisJc2VjdG9yX3QgY3lsOworCV9fdTE2IGhlYWQ7CisKKwkvKmRlY29kZSBjeWxpbmRlciBhbmQgaGVhZHMgZm9yIGxhcmdlIHZvbHVtZXMgKi8KKwljeWwgPSBwdHItPmhoICYgMHhGRkYwOworCWN5bCA8PD0gMTI7CisJY3lsIHw9IHB0ci0+Y2M7CisJaGVhZCA9IHB0ci0+aGggJiAweDAwMEY7CisJcmV0dXJuCWN5bCAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKworCQloZWFkICogZ2VvLT5zZWN0b3JzICsKIAkJcHRyLT5iOwogfQogCkBAIC00MywxNCArNjEsMTUgQEAKIGludAogaWJtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewotCWludCBibG9ja3NpemUsIG9mZnNldCwgc2l6ZSxyZXM7Ci0JbG9mZl90IGlfc2l6ZTsKKwlpbnQgYmxvY2tzaXplLCByZXM7CisJbG9mZl90IGlfc2l6ZSwgb2Zmc2V0LCBzaXplLCBmbXRfc2l6ZTsKIAlkYXNkX2luZm9ybWF0aW9uMl90ICppbmZvOwogCXN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvOwogCWNoYXIgdHlwZVs1XSA9IHswLH07CiAJY2hhciBuYW1lWzddID0gezAsfTsKIAl1bmlvbiBsYWJlbF90IHsKLQkJc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsIHZvbDsKKwkJc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsX2NkbCB2b2w7CisJCXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9sZGwgbG54OwogCQlzdHJ1Y3QgdnRvY19jbXNfbGFiZWwgY21zOwogCX0gKmxhYmVsOwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CkBAIC04NSwxNCArMTA0LDE2IEBACiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfcmVhZGVycjsKIAotCXN0cm5jcHkgKHR5cGUsIGRhdGEsIDQpOwotCWlmICgoIWluZm8tPkZCQV9sYXlvdXQpICYmICghc3RyY21wKGluZm8tPnR5cGUsICJFQ0tEIikpKQotCQlzdHJuY3B5KG5hbWUsIGRhdGEgKyA4LCA2KTsKLQllbHNlCi0JCXN0cm5jcHkobmFtZSwgZGF0YSArIDQsIDYpOwogCW1lbWNweShsYWJlbCwgZGF0YSwgc2l6ZW9mKHVuaW9uIGxhYmVsX3QpKTsKIAlwdXRfZGV2X3NlY3RvcihzZWN0KTsKIAorCWlmICgoIWluZm8tPkZCQV9sYXlvdXQpICYmICghc3RyY21wKGluZm8tPnR5cGUsICJFQ0tEIikpKSB7CisJCXN0cm5jcHkodHlwZSwgbGFiZWwtPnZvbC52b2xsYmwsIDQpOworCQlzdHJuY3B5KG5hbWUsIGxhYmVsLT52b2wudm9saWQsIDYpOworCX0gZWxzZSB7CisJCXN0cm5jcHkodHlwZSwgbGFiZWwtPmxueC52b2xsYmwsIDQpOworCQlzdHJuY3B5KG5hbWUsIGxhYmVsLT5sbngudm9saWQsIDYpOworCX0KIAlFQkNBU0ModHlwZSwgNCk7CiAJRUJDQVNDKG5hbWUsIDYpOwogCkBAIC0xMTAsMzYgKzEzMSw1NCBAQAogCQkJLyoKIAkJCSAqIFZNIHN0eWxlIENNUzEgbGFiZWxlZCBkaXNrCiAJCQkgKi8KKwkJCWJsb2Nrc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfc2l6ZTsKIAkJCWlmIChsYWJlbC0+Y21zLmRpc2tfb2Zmc2V0ICE9IDApIHsKIAkJCQlwcmludGsoIkNNUzEvJThzKE1EU0spOiIsIG5hbWUpOwogCQkJCS8qIGRpc2sgaXMgcmVzZXJ2ZWQgbWluaWRpc2sgKi8KLQkJCQlibG9ja3NpemUgPSBsYWJlbC0+Y21zLmJsb2NrX3NpemU7CiAJCQkJb2Zmc2V0ID0gbGFiZWwtPmNtcy5kaXNrX29mZnNldDsKIAkJCQlzaXplID0gKGxhYmVsLT5jbXMuYmxvY2tfY291bnQgLSAxKQogCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CiAJCQl9IGVsc2UgewogCQkJCXByaW50aygiQ01TMS8lOHM6IiwgbmFtZSk7CiAJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7Ci0JCQkJc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCXNpemUgPSBsYWJlbC0+Y21zLmJsb2NrX2NvdW50CisJCQkJCSogKGJsb2Nrc2l6ZSA+PiA5KTsKIAkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBPbGQgc3R5bGUgTE5YMSBvciB1bmxhYmVsZWQgZGlzawotCQkJICovCi0JCQlpZiAoc3RybmNtcCh0eXBlLCAiTE5YMSIsIDQpID09IDApCi0JCQkJcHJpbnRrICgiTE5YMS8lOHM6IiwgbmFtZSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKCIobm9ubCkiKTsKLQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOwotCQkJc2l6ZSA9IGlfc2l6ZSA+PiA5OwotCQl9Ci0JCXB1dF9wYXJ0aXRpb24oc3RhdGUsIDEsIG9mZnNldCooYmxvY2tzaXplID4+IDkpLAorCQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgMSwgb2Zmc2V0KihibG9ja3NpemUgPj4gOSksCiAJCQkJICAgICAgc2l6ZS1vZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSk7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RybmNtcCh0eXBlLCAiTE5YMSIsIDQpID09IDApIHsKKwkJCQlwcmludGsoIkxOWDEvJThzOiIsIG5hbWUpOworCQkJCWlmIChsYWJlbC0+bG54LmxkbF92ZXJzaW9uID09IDB4ZjIpIHsKKwkJCQkJZm10X3NpemUgPSBsYWJlbC0+bG54LmZvcm1hdHRlZF9ibG9ja3MKKwkJCQkJCSogKGJsb2Nrc2l6ZSA+PiA5KTsKKwkJCQl9IGVsc2UgaWYgKCFzdHJjbXAoaW5mby0+dHlwZSwgIkVDS0QiKSkgeworCQkJCQkvKiBmb3JtYXRlZCB3L28gbGFyZ2Ugdm9sdW1lIHN1cHBvcnQgKi8KKwkJCQkJZm10X3NpemUgPSBnZW8tPmN5bGluZGVycyAqIGdlby0+aGVhZHMKKwkJCQkJICAgICAgKiBnZW8tPnNlY3RvcnMgKiAoYmxvY2tzaXplID4+IDkpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIG9sZCBsYWJlbCBhbmQgbm8gdXNhYmxlIGRpc2sgZ2VvbWV0cnkKKwkJCQkJICogKGUuZy4gRElBRykgKi8KKwkJCQkJZm10X3NpemUgPSBpX3NpemUgPj4gOTsKKwkJCQl9CisJCQkJc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCWlmIChmbXRfc2l6ZSA8IHNpemUpCisJCQkJCXNpemUgPSBmbXRfc2l6ZTsKKwkJCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogdW5sYWJlbGVkIGRpc2sgKi8KKwkJCQlwcmludGsoIihub25sKSIpOworCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKKwkJCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKKwkJCX0KKwkJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIDEsIG9mZnNldCooYmxvY2tzaXplID4+IDkpLAorCQkJCSAgICAgIHNpemUtb2Zmc2V0KihibG9ja3NpemUgPj4gOSkpOworCQl9CiAJfSBlbHNlIGlmIChpbmZvLT5mb3JtYXQgPT0gREFTRF9GT1JNQVRfQ0RMKSB7CiAJCS8qCiAJCSAqIE5ldyBzdHlsZSBDREwgZm9ybWF0dGVkIGRpc2sKIAkJICovCi0JCXVuc2lnbmVkIGludCBibGs7CisJCXNlY3Rvcl90IGJsazsKIAkJaW50IGNvdW50ZXI7CiAKIAkJLyoKQEAgLTE2Niw3ICsyMDUsOCBAQAogCQkJCS8qIHNraXAgRk1UNCAvIEZNVDUgLyBGTVQ3IGxhYmVscyAqLwogCQkJCWlmIChmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc0J10KIAkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNSddCi0JCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzcnXSkgeworCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc3J10KKwkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snOSddKSB7CiAJCQkJCWJsaysrOwogCQkJCQlkYXRhID0gcmVhZF9kZXZfc2VjdG9yKGJkZXYsIGJsayAqCiAJCQkJCQkJICAgICAgIChibG9ja3NpemUvNTEyKSwKQEAgLTE3NCw4ICsyMTQsOSBAQAogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKLQkJCQkvKiBvbmx5IEZNVDEgdmFsaWQgYXQgdGhpcyBwb2ludCAqLwotCQkJCWlmIChmMS5EUzFGTVRJRCAhPSBfYXNjZWJjWycxJ10pCisJCQkJLyogb25seSBGTVQxIGFuZCA4IGxhYmVscyB2YWxpZCBhdCB0aGlzIHBvaW50ICovCisJCQkJaWYgKGYxLkRTMUZNVElEICE9IF9hc2NlYmNbJzEnXSAmJgorCQkJCSAgICBmMS5EUzFGTVRJRCAhPSBfYXNjZWJjWyc4J10pCiAJCQkJCWJyZWFrOwogCiAJCQkJLyogT0ssIHdlIGdvdCB2YWxpZCBwYXJ0aXRpb24gZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDNhNDhiYTUuLjk0YWQxNTkgMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTY2NywxMCArNjY3LDcgQEAKIAlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmlub2RlLT5pX3BpcGUtPmZhc3luY19yZWFkZXJzKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC02ODQsMTAgKzY4MSw3IEBACiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZpbm9kZS0+aV9waXBlLT5mYXN5bmNfd3JpdGVycyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtNjk5LDE4ICs2OTMsMTQgQEAKIAlpbnQgcmV0dmFsOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZwaXBlLT5mYXN5bmNfcmVhZGVycyk7Ci0KLQlpZiAocmV0dmFsID49IDApCisJaWYgKHJldHZhbCA+PSAwKSB7CiAJCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmcGlwZS0+ZmFzeW5jX3dyaXRlcnMpOwotCisJCWlmIChyZXR2YWwgPCAwKSAvKiB0aGlzIGNhbiBoYXBwZW4gb25seSBpZiBvbiA9PSBUICovCisJCQlmYXN5bmNfaGVscGVyKC0xLCBmaWxwLCAwLCAmcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOworCX0KIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDBjOWRlMTkuLmJlYWEwY2UgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0zMDY2LDcgKzMwNjYsNiBAQAogCWludCByZXR2YWwgPSAtRU5PRU5UOwogCWlub190IGlubzsKIAlpbnQgdGlkOwotCXVuc2lnbmVkIGxvbmcgcG9zID0gZmlscC0+Zl9wb3M7ICAvKiBhdm9pZGluZyAibG9uZyBsb25nIiBmaWxwLT5mX3BvcyAqLwogCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKIAogCXRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKQEAgLTMwODMsMTggKzMwODIsMTggQEAKIAkJZ290byBvdXRfbm9fdGFzazsKIAlyZXR2YWwgPSAwOwogCi0Jc3dpdGNoIChwb3MpIHsKKwlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKWZpbHAtPmZfcG9zKSB7CiAJY2FzZSAwOgogCQlpbm8gPSBpbm9kZS0+aV9pbm87Ci0JCWlmIChmaWxsZGlyKGRpcmVudCwgIi4iLCAxLCBwb3MsIGlubywgRFRfRElSKSA8IDApCisJCWlmIChmaWxsZGlyKGRpcmVudCwgIi4iLCAxLCBmaWxwLT5mX3BvcywgaW5vLCBEVF9ESVIpIDwgMCkKIAkJCWdvdG8gb3V0OwotCQlwb3MrKzsKKwkJZmlscC0+Zl9wb3MrKzsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSAxOgogCQlpbm8gPSBwYXJlbnRfaW5vKGRlbnRyeSk7Ci0JCWlmIChmaWxsZGlyKGRpcmVudCwgIi4uIiwgMiwgcG9zLCBpbm8sIERUX0RJUikgPCAwKQorCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuLiIsIDIsIGZpbHAtPmZfcG9zLCBpbm8sIERUX0RJUikgPCAwKQogCQkJZ290byBvdXQ7Ci0JCXBvcysrOworCQlmaWxwLT5mX3BvcysrOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAl9CiAKQEAgLTMxMDQsOSArMzEwMyw5IEBACiAJbnMgPSBmaWxwLT5mX2RlbnRyeS0+ZF9zYi0+c19mc19pbmZvOwogCXRpZCA9IChpbnQpZmlscC0+Zl92ZXJzaW9uOwogCWZpbHAtPmZfdmVyc2lvbiA9IDA7Ci0JZm9yICh0YXNrID0gZmlyc3RfdGlkKGxlYWRlciwgdGlkLCBwb3MgLSAyLCBucyk7CisJZm9yICh0YXNrID0gZmlyc3RfdGlkKGxlYWRlciwgdGlkLCBmaWxwLT5mX3BvcyAtIDIsIG5zKTsKIAkgICAgIHRhc2s7Ci0JICAgICB0YXNrID0gbmV4dF90aWQodGFzayksIHBvcysrKSB7CisJICAgICB0YXNrID0gbmV4dF90aWQodGFzayksIGZpbHAtPmZfcG9zKyspIHsKIAkJdGlkID0gdGFza19waWRfbnJfbnModGFzaywgbnMpOwogCQlpZiAocHJvY190YXNrX2ZpbGxfY2FjaGUoZmlscCwgZGlyZW50LCBmaWxsZGlyLCB0YXNrLCB0aWQpIDwgMCkgewogCQkJLyogcmV0dXJuaW5nIHRoaXMgdGdpZCBmYWlsZWQsIHNhdmUgaXQgYXMgdGhlIGZpcnN0CkBAIC0zMTE3LDcgKzMxMTYsNiBAQAogCQl9CiAJfQogb3V0OgotCWZpbHAtPmZfcG9zID0gcG9zOwogCXB1dF90YXNrX3N0cnVjdChsZWFkZXIpOwogb3V0X25vX3Rhc2s6CiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW5vZGUuYyBiL2ZzL3Byb2MvaW5vZGUuYwppbmRleCAzZTc2YmI5Li5kOGJiNWM2IDEwMDY0NAotLS0gYS9mcy9wcm9jL2lub2RlLmMKKysrIGIvZnMvcHJvYy9pbm9kZS5jCkBAIC00ODUsOCArNDg1LDEwIEBACiAJCQl9CiAJCX0KIAkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkgICAgICAgbW9kdWxlX3B1dChkZS0+b3duZXIpOworCSAgICAgICBkZV9wdXQoZGUpOworCX0KIAlyZXR1cm4gaW5vZGU7CiAKIG91dF9pbm86CmRpZmYgLS1naXQgYS9mcy9wcm9jL3BhZ2UuYyBiL2ZzL3Byb2MvcGFnZS5jCmluZGV4IDc2N2Q5NWEuLmU5OTgzODMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcGFnZS5jCisrKyBiL2ZzL3Byb2MvcGFnZS5jCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIEtQRl9SRUNMQUlNICAgIDkKICNkZWZpbmUgS1BGX0JVRERZICAgICAxMAogCi0jZGVmaW5lIGtwZl9jb3B5X2JpdChmbGFncywgc3JjcG9zLCBkc3Rwb3MpICgoKGZsYWdzID4+IHNyY3BvcykgJiAxKSA8PCBkc3Rwb3MpCisjZGVmaW5lIGtwZl9jb3B5X2JpdChmbGFncywgZHN0cG9zLCBzcmNwb3MpICgoKGZsYWdzID4+IHNyY3BvcykgJiAxKSA8PCBkc3Rwb3MpCiAKIHN0YXRpYyBzc2l6ZV90IGtwYWdlZmxhZ3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJZWxzZQogCQkJa2ZsYWdzID0gcHBhZ2UtPmZsYWdzOwogCi0JCXVmbGFncyA9IGtwZl9jb3B5X2JpdChLUEZfTE9DS0VELCBQR19sb2NrZWQsIGtmbGFncykgfAorCQl1ZmxhZ3MgPSBrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfTE9DS0VELCBQR19sb2NrZWQpIHwKIAkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9FUlJPUiwgUEdfZXJyb3IpIHwKIAkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9SRUZFUkVOQ0VELCBQR19yZWZlcmVuY2VkKSB8CiAJCQlrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfVVBUT0RBVEUsIFBHX3VwdG9kYXRlKSB8CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9maWxlLW5vbW11LmMgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKaW5kZXggYjliNTY3YS4uNWQ3YzdlYyAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtMTE0LDYgKzExNCw5IEBACiAJCWlmICghcGFnZXZlY19hZGQoJmxydV9wdmVjLCBwYWdlKSkKIAkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAorCQkvKiBwcmV2ZW50IHRoZSBwYWdlIGZyb20gYmVpbmcgZGlzY2FyZGVkIG9uIG1lbW9yeSBwcmVzc3VyZSAqLworCQlTZXRQYWdlRGlydHkocGFnZSk7CisKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJfQogCkBAIC0xMjYsNiArMTI5LDcgQEAKIAlyZXR1cm4gLUVGQklHOwogCiAgYWRkX2Vycm9yOgorCXBhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzICsgbG9vcCk7CiAJZm9yIChsb29wKys7IGxvb3AgPCBucGFnZXM7IGxvb3ArKykKIAkJX19mcmVlX3BhZ2UocGFnZXMgKyBsb29wKTsKZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IDUyNjcwOTguLmExYTRjZmUgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtNDgsOCArNDgsMTYgQEAKIAkgKi8KIAlmaWxlLT5mX3ZlcnNpb24gPSAwOwogCi0JLyogU0VRIGZpbGVzIHN1cHBvcnQgbHNlZWssIGJ1dCBub3QgcHJlYWQvcHdyaXRlICovCi0JZmlsZS0+Zl9tb2RlICY9IH4oRk1PREVfUFJFQUQgfCBGTU9ERV9QV1JJVEUpOworCS8qCisJICogc2VxX2ZpbGVzIHN1cHBvcnQgbHNlZWsoKSBhbmQgcHJlYWQoKS4gIFRoZXkgZG8gbm90IGltcGxlbWVudAorCSAqIHdyaXRlKCkgYXQgYWxsLCBidXQgd2UgY2xlYXIgRk1PREVfUFdSSVRFIGhlcmUgZm9yIGhpc3RvcmljYWwKKwkgKiByZWFzb25zLgorCSAqCisJICogSWYgYSBjbGllbnQgb2Ygc2VxX2ZpbGVzIGEpIGltcGxlbWVudHMgZmlsZS53cml0ZSgpIGFuZCBiKSB3aXNoZXMgdG8KKwkgKiBzdXBwb3J0IHB3cml0ZSgpIHRoZW4gdGhhdCBjbGllbnQgd2lsbCBuZWVkIHRvIGltcGxlbWVudCBpdHMgb3duCisJICogZmlsZS5vcGVuKCkgd2hpY2ggY2FsbHMgc2VxX29wZW4oKSBhbmQgdGhlbiBzZXRzIEZNT0RFX1BXUklURS4KKwkgKi8KKwlmaWxlLT5mX21vZGUgJj0gfkZNT0RFX1BXUklURTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc2VxX29wZW4pOwpAQCAtMTMxLDYgKzEzOSwyMiBAQAogCWludCBlcnIgPSAwOwogCiAJbXV0ZXhfbG9jaygmbS0+bG9jayk7CisKKwkvKiBEb24ndCBhc3N1bWUgKnBwb3MgaXMgd2hlcmUgd2UgbGVmdCBpdCAqLworCWlmICh1bmxpa2VseSgqcHBvcyAhPSBtLT5yZWFkX3BvcykpIHsKKwkJbS0+cmVhZF9wb3MgPSAqcHBvczsKKwkJd2hpbGUgKChlcnIgPSB0cmF2ZXJzZShtLCAqcHBvcykpID09IC1FQUdBSU4pCisJCQk7CisJCWlmIChlcnIpIHsKKwkJCS8qIFdpdGggcHJlanVkaWNlLi4uICovCisJCQltLT5yZWFkX3BvcyA9IDA7CisJCQltLT52ZXJzaW9uID0gMDsKKwkJCW0tPmluZGV4ID0gMDsKKwkJCW0tPmNvdW50ID0gMDsKKwkJCWdvdG8gRG9uZTsKKwkJfQorCX0KKwogCS8qCiAJICogc2VxX2ZpbGUtPm9wLT4uLm1fc3RhcnQvbV9zdG9wL21fbmV4dCBtYXkgZG8gc3BlY2lhbCBhY3Rpb25zCiAJICogb3Igb3B0aW1pc2F0aW9ucyBiYXNlZCBvbiB0aGUgZmlsZS0+Zl92ZXJzaW9uLCBzbyB3ZSB3YW50IHRvCkBAIC0yMzAsOCArMjU0LDEwIEBACiBEb25lOgogCWlmICghY29waWVkKQogCQljb3BpZWQgPSBlcnI7Ci0JZWxzZQorCWVsc2UgewogCQkqcHBvcyArPSBjb3BpZWQ7CisJCW0tPnJlYWRfcG9zICs9IGNvcGllZDsKKwl9CiAJZmlsZS0+Zl92ZXJzaW9uID0gbS0+dmVyc2lvbjsKIAltdXRleF91bmxvY2soJm0tPmxvY2spOwogCXJldHVybiBjb3BpZWQ7CkBAIC0yNjYsMTYgKzI5MiwxOCBAQAogCQkJaWYgKG9mZnNldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlyZXR2YWwgPSBvZmZzZXQ7Ci0JCQlpZiAob2Zmc2V0ICE9IGZpbGUtPmZfcG9zKSB7CisJCQlpZiAob2Zmc2V0ICE9IG0tPnJlYWRfcG9zKSB7CiAJCQkJd2hpbGUgKChyZXR2YWw9dHJhdmVyc2UobSwgb2Zmc2V0KSkgPT0gLUVBR0FJTikKIAkJCQkJOwogCQkJCWlmIChyZXR2YWwpIHsKIAkJCQkJLyogd2l0aCBleHRyZW1lIHByZWp1ZGljZS4uLiAqLwogCQkJCQlmaWxlLT5mX3BvcyA9IDA7CisJCQkJCW0tPnJlYWRfcG9zID0gMDsKIAkJCQkJbS0+dmVyc2lvbiA9IDA7CiAJCQkJCW0tPmluZGV4ID0gMDsKIAkJCQkJbS0+Y291bnQgPSAwOwogCQkJCX0gZWxzZSB7CisJCQkJCW0tPnJlYWRfcG9zID0gb2Zmc2V0OwogCQkJCQlyZXR2YWwgPSBmaWxlLT5mX3BvcyA9IG9mZnNldDsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9ibG9jay5jIGIvZnMvc3F1YXNoZnMvYmxvY2suYwppbmRleCBjODM3ZGZjLi4yYTc5NjAzIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9ibG9jay5jCisrKyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKQEAgLTgwLDcgKzgwLDcgQEAKICAqIGdlbmVyYXRlZCBhIGxhcmdlciBibG9jayAtIHRoaXMgZG9lcyBvY2Nhc2lvbmFsbHkgaGFwcGVuIHdpdGggemxpYikuCiAgKi8KIGludCBzcXVhc2hmc19yZWFkX2RhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqKmJ1ZmZlciwgdTY0IGluZGV4LAotCQkJaW50IGxlbmd0aCwgdTY0ICpuZXh0X2luZGV4LCBpbnQgc3JjbGVuZ3RoKQorCQkJaW50IGxlbmd0aCwgdTY0ICpuZXh0X2luZGV4LCBpbnQgc3JjbGVuZ3RoLCBpbnQgcGFnZXMpCiB7CiAJc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKm1zYmxrID0gc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDsKQEAgLTE4NCw3ICsxODQsNyBAQAogCQkJCW9mZnNldCA9IDA7CiAJCQl9CiAKLQkJCWlmIChtc2Jsay0+c3RyZWFtLmF2YWlsX291dCA9PSAwKSB7CisJCQlpZiAobXNibGstPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCAmJiBwYWdlIDwgcGFnZXMpIHsKIAkJCQltc2Jsay0+c3RyZWFtLm5leHRfb3V0ID0gYnVmZmVyW3BhZ2UrK107CiAJCQkJbXNibGstPnN0cmVhbS5hdmFpbF9vdXQgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCQl9CkBAIC0yMDEsMjUgKzIwMSwyMCBAQAogCQkJCXpsaWJfaW5pdCA9IDE7CiAJCQl9CiAKLQkJCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlKCZtc2Jsay0+c3RyZWFtLCBaX05PX0ZMVVNIKTsKKwkJCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlKCZtc2Jsay0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOwogCiAJCQlpZiAobXNibGstPnN0cmVhbS5hdmFpbF9pbiA9PSAwICYmIGsgPCBiKQogCQkJCXB1dF9iaChiaFtrKytdKTsKIAkJfSB3aGlsZSAoemxpYl9lcnIgPT0gWl9PSyk7CiAKIAkJaWYgKHpsaWJfZXJyICE9IFpfU1RSRUFNX0VORCkgewotCQkJRVJST1IoInpsaWJfaW5mbGF0ZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIKLQkJCQkiIDB4JXgsIHNyY2xlbmd0aCAlZCwgYXZhaWxfaW4gJWQsIgotCQkJCSIgYXZhaWxfb3V0ICVkXG4iLCB6bGliX2Vyciwgc3JjbGVuZ3RoLAotCQkJCW1zYmxrLT5zdHJlYW0uYXZhaWxfaW4sCi0JCQkJbXNibGstPnN0cmVhbS5hdmFpbF9vdXQpOworCQkJRVJST1IoInpsaWJfaW5mbGF0ZSBlcnJvciwgZGF0YSBwcm9iYWJseSBjb3JydXB0XG4iKTsKIAkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAkJfQogCiAJCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlRW5kKCZtc2Jsay0+c3RyZWFtKTsKIAkJaWYgKHpsaWJfZXJyICE9IFpfT0spIHsKLQkJCUVSUk9SKCJ6bGliX2luZmxhdGVFbmQgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQgMHgleCwiCi0JCQkJIiBzcmNsZW5ndGggJWRcbiIsIHpsaWJfZXJyLCBzcmNsZW5ndGgpOworCQkJRVJST1IoInpsaWJfaW5mbGF0ZSBlcnJvciwgZGF0YSBwcm9iYWJseSBjb3JydXB0XG4iKTsKIAkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAkJfQogCQlsZW5ndGggPSBtc2Jsay0+c3RyZWFtLnRvdGFsX291dDsKQEAgLTI2OCw3ICsyNjMsOCBAQAogCQlwdXRfYmgoYmhba10pOwogCiByZWFkX2ZhaWx1cmU6Ci0JRVJST1IoInNiX2JyZWFkIGZhaWxlZCByZWFkaW5nIGJsb2NrIDB4JWxseFxuIiwgY3VyX2luZGV4KTsKKwlFUlJPUigic3F1YXNoZnNfcmVhZF9kYXRhIGZhaWxlZCB0byByZWFkIGJsb2NrIDB4JWxseFxuIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5kZXgpOwogCWtmcmVlKGJoKTsKIAlyZXR1cm4gLUVJTzsKIH0KZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMgYi9mcy9zcXVhc2hmcy9jYWNoZS5jCmluZGV4IGYyOWVkYTEuLjFjNDczOWUgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMKKysrIGIvZnMvc3F1YXNoZnMvY2FjaGUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAKIAkJCWVudHJ5LT5sZW5ndGggPSBzcXVhc2hmc19yZWFkX2RhdGEoc2IsIGVudHJ5LT5kYXRhLAogCQkJCWJsb2NrLCBsZW5ndGgsICZlbnRyeS0+bmV4dF9pbmRleCwKLQkJCQljYWNoZS0+YmxvY2tfc2l6ZSk7CisJCQkJY2FjaGUtPmJsb2NrX3NpemUsIGNhY2hlLT5wYWdlcyk7CiAKIAkJCXNwaW5fbG9jaygmY2FjaGUtPmxvY2spOwogCkBAIC00MDYsNyArNDA2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgYnVmZmVyICs9IFBBR0VfQ0FDSEVfU0laRSkKIAkJZGF0YVtpXSA9IGJ1ZmZlcjsKIAlyZXMgPSBzcXVhc2hmc19yZWFkX2RhdGEoc2IsIGRhdGEsIGJsb2NrLCBsZW5ndGggfAotCQlTUVVBU0hGU19DT01QUkVTU0VEX0JJVF9CTE9DSywgTlVMTCwgbGVuZ3RoKTsKKwkJU1FVQVNIRlNfQ09NUFJFU1NFRF9CSVRfQkxPQ0ssIE5VTEwsIGxlbmd0aCwgcGFnZXMpOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9pbm9kZS5jIGIvZnMvc3F1YXNoZnMvaW5vZGUuYwppbmRleCA3YTYzMzk4Li45MTAxZGJkIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9pbm9kZS5jCisrKyBiL2ZzL3NxdWFzaGZzL2lub2RlLmMKQEAgLTEzMyw3ICsxMzMsOCBAQAogCXR5cGUgPSBsZTE2X3RvX2NwdShzcXNoYl9pbm8tPmlub2RlX3R5cGUpOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1FVQVNIRlNfUkVHX1RZUEU6IHsKLQkJdW5zaWduZWQgaW50IGZyYWdfb2Zmc2V0LCBmcmFnX3NpemUsIGZyYWc7CisJCXVuc2lnbmVkIGludCBmcmFnX29mZnNldCwgZnJhZzsKKwkJaW50IGZyYWdfc2l6ZTsKIAkJdTY0IGZyYWdfYmxrOwogCQlzdHJ1Y3Qgc3F1YXNoZnNfcmVnX2lub2RlICpzcXNoX2lubyA9ICZzcXVhc2hmc19pbm8ucmVnOwogCkBAIC0xNzUsNyArMTc2LDggQEAKIAkJYnJlYWs7CiAJfQogCWNhc2UgU1FVQVNIRlNfTFJFR19UWVBFOiB7Ci0JCXVuc2lnbmVkIGludCBmcmFnX29mZnNldCwgZnJhZ19zaXplLCBmcmFnOworCQl1bnNpZ25lZCBpbnQgZnJhZ19vZmZzZXQsIGZyYWc7CisJCWludCBmcmFnX3NpemU7CiAJCXU2NCBmcmFnX2JsazsKIAkJc3RydWN0IHNxdWFzaGZzX2xyZWdfaW5vZGUgKnNxc2hfaW5vID0gJnNxdWFzaGZzX2luby5scmVnOwogCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9zcXVhc2hmcy5oIGIvZnMvc3F1YXNoZnMvc3F1YXNoZnMuaAppbmRleCA2YjI1MTVkLi4wZTlmZWI2IDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9zcXVhc2hmcy5oCisrKyBiL2ZzL3NxdWFzaGZzL3NxdWFzaGZzLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogLyogYmxvY2suYyAqLwogZXh0ZXJuIGludCBzcXVhc2hmc19yZWFkX2RhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiosIHU2NCwgaW50LCB1NjQgKiwKLQkJCQlpbnQpOworCQkJCWludCwgaW50KTsKIAogLyogY2FjaGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBzcXVhc2hmc19jYWNoZSAqc3F1YXNoZnNfY2FjaGVfaW5pdChjaGFyICosIGludCwgaW50KTsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3N1cGVyLmMgYi9mcy9zcXVhc2hmcy9zdXBlci5jCmluZGV4IDA3MWRmNWIuLjY4MWVjMGQgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL3N1cGVyLmMKKysrIGIvZnMvc3F1YXNoZnMvc3VwZXIuYwpAQCAtMzg5LDcgKzM4OSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAic3F1YXNoZnM6IHZlcnNpb24gNC4wICgyMDA5LzAxLzAzKSAiCisJcHJpbnRrKEtFUk5fSU5GTyAic3F1YXNoZnM6IHZlcnNpb24gNC4wICgyMDA5LzAxLzMxKSAiCiAJCSJQaGlsbGlwIExvdWdoZXJcbiIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA2MWRjZTAwLi5kZDRhY2IxIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTgyLDcgKzgyLDIyIEBACiAJCSAqIGxvY2sgb3JkZXJpbmcgdGhhbiB1c2JmczoKIAkJICovCiAJCWxvY2tkZXBfc2V0X2NsYXNzKCZzLT5zX2xvY2ssICZ0eXBlLT5zX2xvY2tfa2V5KTsKLQkJZG93bl93cml0ZSgmcy0+c191bW91bnQpOworCQkvKgorCQkgKiBzZ2V0KCkgY2FuIGhhdmUgc191bW91bnQgcmVjdXJzaW9uLgorCQkgKgorCQkgKiBXaGVuIGl0IGNhbm5vdCBmaW5kIGEgc3VpdGFibGUgc2IsIGl0IGFsbG9jYXRlcyBhIG5ldworCQkgKiBvbmUgKHRoaXMgb25lKSwgYW5kIHRyaWVzIGFnYWluIHRvIGZpbmQgYSBzdWl0YWJsZSBvbGQKKwkJICogb25lLgorCQkgKgorCQkgKiBJbiBjYXNlIHRoYXQgc3VjY2VlZHMsIGl0IHdpbGwgYWNxdWlyZSB0aGUgc191bW91bnQKKwkJICogbG9jayBvZiB0aGUgb2xkIG9uZS4gU2luY2UgdGhlc2UgYXJlIGNsZWFybHkgZGlzdHJpbmN0CisJCSAqIGxvY2tzLCBhbmQgdGhpcyBvYmplY3QgaXNuJ3QgZXhwb3NlZCB5ZXQsIHRoZXJlJ3Mgbm8KKwkJICogcmlzayBvZiBkZWFkbG9ja3MuCisJCSAqCisJCSAqIEFubm90YXRlIHRoaXMgYnkgcHV0dGluZyB0aGlzIGxvY2sgaW4gYSBkaWZmZXJlbnQKKwkJICogc3ViY2xhc3MuCisJCSAqLworCQlkb3duX3dyaXRlX25lc3RlZCgmcy0+c191bW91bnQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJcy0+c19jb3VudCA9IFNfQklBUzsKIAkJYXRvbWljX3NldCgmcy0+c19hY3RpdmUsIDEpOwogCQltdXRleF9pbml0KCZzLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwpAQCAtMzU2LDggKzM3MSwxMCBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCFncmFiX3N1cGVyKG9sZCkpCiAJCQkJZ290byByZXRyeTsKLQkJCWlmIChzKQorCQkJaWYgKHMpIHsKKwkJCQl1cF93cml0ZSgmcy0+c191bW91bnQpOwogCQkJCWRlc3Ryb3lfc3VwZXIocyk7CisJCQl9CiAJCQlyZXR1cm4gb2xkOwogCQl9CiAJfQpAQCAtMzcyLDYgKzM4OSw3IEBACiAJZXJyID0gc2V0KHMsIGRhdGEpOwogCWlmIChlcnIpIHsKIAkJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCQl1cF93cml0ZSgmcy0+c191bW91bnQpOwogCQlkZXN0cm95X3N1cGVyKHMpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KQEAgLTY1Niw3ICs2NzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkb19lbWVyZ2VuY3lfcmVtb3VudCh1bnNpZ25lZCBsb25nIGZvbykKK3N0YXRpYyB2b2lkIGRvX2VtZXJnZW5jeV9yZW1vdW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCkBAIC02NzksMTIgKzY5NywxOSBAQAogCQlzcGluX2xvY2soJnNiX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmc2JfbG9jayk7CisJa2ZyZWUod29yayk7CiAJcHJpbnRrKCJFbWVyZ2VuY3kgUmVtb3VudCBjb21wbGV0ZVxuIik7CiB9CiAKIHZvaWQgZW1lcmdlbmN5X3JlbW91bnQodm9pZCkKIHsKLQlwZGZsdXNoX29wZXJhdGlvbihkb19lbWVyZ2VuY3lfcmVtb3VudCwgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX2VtZXJnZW5jeV9yZW1vdW50KTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggYTE2ZDUzZS4uZWM5NWE2OSAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtNDIsOSArNDIsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZG9fc3luY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkb19zeW5jKDApOworCWtmcmVlKHdvcmspOworfQorCiB2b2lkIGVtZXJnZW5jeV9zeW5jKHZvaWQpCiB7Ci0JcGRmbHVzaF9vcGVyYXRpb24oZG9fc3luYywgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX3N5bmNfd29yayk7CisJCXNjaGVkdWxlX3dvcmsod29yayk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCBmMmM0NzhjLi4wNzcwM2QzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtMjEsMTUgKzIxLDI4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCisvKgorICogVGhlcmUncyBvbmUgYmluX2J1ZmZlciBmb3IgZWFjaCBvcGVuIGZpbGUuCisgKgorICogZmlscC0+cHJpdmF0ZV9kYXRhIHBvaW50cyB0byBiaW5fYnVmZmVyIGFuZAorICogc3lzZnNfZGlyZW50LT5zX2Jpbl9hdHRyLmJ1ZmZlcnMgcG9pbnRzIHRvIGEgdGhlIGJpbl9idWZmZXIgcworICogc3lzZnNfZGlyZW50LT5zX2Jpbl9hdHRyLmJ1ZmZlcnMgaXMgcHJvdGVjdGVkIGJ5IHN5c2ZzX2Jpbl9sb2NrCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoc3lzZnNfYmluX2xvY2spOworCiBzdHJ1Y3QgYmluX2J1ZmZlciB7Ci0Jc3RydWN0IG11dGV4CW11dGV4OwotCXZvaWQJCSpidWZmZXI7Ci0JaW50CQltbWFwcGVkOworCXN0cnVjdCBtdXRleAkJCW11dGV4OworCXZvaWQJCQkJKmJ1ZmZlcjsKKwlpbnQJCQkJbW1hcHBlZDsKKwlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgCSp2bV9vcHM7CisJc3RydWN0IGZpbGUJCQkqZmlsZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkJbGlzdDsKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTE2OCw2ICsxODEsMTc1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgdm9pZCBiaW5fdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+b3BlbikKKwkJcmV0dXJuOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuOworCisJYmItPnZtX29wcy0+b3Blbih2bWEpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7Cit9CisKK3N0YXRpYyB2b2lkIGJpbl92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+Y2xvc2UpCisJCXJldHVybjsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybjsKKworCWJiLT52bV9vcHMtPmNsb3NlKHZtYSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKK30KKworc3RhdGljIGludCBiaW5fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+ZmF1bHQpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJcmV0ID0gYmItPnZtX29wcy0+ZmF1bHQodm1hLCB2bWYpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiaW5fcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCBwYWdlKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmluX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+YWNjZXNzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gYmItPnZtX29wcy0+YWNjZXNzKHZtYSwgYWRkciwgYnVmLCBsZW4sIHdyaXRlKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTlVNQQorc3RhdGljIGludCBiaW5fc2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1lbXBvbGljeSAqbmV3KQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+c2V0X3BvbGljeSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGJiLT52bV9vcHMtPnNldF9wb2xpY3kodm1hLCBuZXcpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBtZW1wb2xpY3kgKmJpbl9nZXRfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmdldF9wb2xpY3kpCisJCXJldHVybiB2bWEtPnZtX3BvbGljeTsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiB2bWEtPnZtX3BvbGljeTsKKworCXBvbCA9IGJiLT52bV9vcHMtPmdldF9wb2xpY3kodm1hLCBhZGRyKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiBwb2w7Cit9CisKK3N0YXRpYyBpbnQgYmluX21pZ3JhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sCisJCQljb25zdCBub2RlbWFza190ICp0bywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPm1pZ3JhdGUpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5taWdyYXRlKHZtYSwgZnJvbSwgdG8sIGZsYWdzKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBiaW5fdm1fb3BzID0geworCS5vcGVuCQk9IGJpbl92bWFfb3BlbiwKKwkuY2xvc2UJCT0gYmluX3ZtYV9jbG9zZSwKKwkuZmF1bHQJCT0gYmluX2ZhdWx0LAorCS5wYWdlX21rd3JpdGUJPSBiaW5fcGFnZV9ta3dyaXRlLAorCS5hY2Nlc3MJCT0gYmluX2FjY2VzcywKKyNpZmRlZiBDT05GSUdfTlVNQQorCS5zZXRfcG9saWN5CT0gYmluX3NldF9wb2xpY3ksCisJLmdldF9wb2xpY3kJPSBiaW5fZ2V0X3BvbGljeSwKKwkubWlncmF0ZQk9IGJpbl9taWdyYXRlLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IG1tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTE3OSwxOCArMzYxLDM3IEBACiAJbXV0ZXhfbG9jaygmYmItPm11dGV4KTsKIAogCS8qIG5lZWQgYXR0cl9zZCBmb3IgYXR0ciwgaXRzIHBhcmVudCBmb3Iga29iaiAqLworCXJjID0gLUVOT0RFVjsKIAlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJcmMgPSAtRUlOVkFMOwotCWlmIChhdHRyLT5tbWFwKQotCQlyYyA9IGF0dHItPm1tYXAoa29iaiwgYXR0ciwgdm1hKTsKKwlpZiAoIWF0dHItPm1tYXApCisJCWdvdG8gb3V0X3B1dDsKIAotCWlmIChyYyA9PSAwICYmICFiYi0+bW1hcHBlZCkKLQkJYmItPm1tYXBwZWQgPSAxOwotCWVsc2UKLQkJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmMgPSBhdHRyLT5tbWFwKGtvYmosIGF0dHIsIHZtYSk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9wdXQ7CiAKKwkvKgorCSAqIFBvd2VyUEMncyBwY2lfbW1hcCBvZiBsZWdhY3lfbWVtIHVzZXMgc2htZW1femVyb19zZXR1cCgpCisJICogdG8gc2F0aXNmeSB2ZXJzaW9ucyBvZiBYIHdoaWNoIGNyYXNoIGlmIHRoZSBtbWFwIGZhaWxzOiB0aGF0CisJICogc3Vic3RpdHV0ZXMgYSBuZXcgdm1fZmlsZSwgYW5kIHdlIGRvbid0IHRoZW4gd2FudCBiaW5fdm1fb3BzLgorCSAqLworCWlmICh2bWEtPnZtX2ZpbGUgIT0gZmlsZSkKKwkJZ290byBvdXRfcHV0OworCisJcmMgPSAtRUlOVkFMOworCWlmIChiYi0+bW1hcHBlZCAmJiBiYi0+dm1fb3BzICE9IHZtYS0+dm1fb3BzKQorCQlnb3RvIG91dF9wdXQ7CisKKwlyYyA9IDA7CisJYmItPm1tYXBwZWQgPSAxOworCWJiLT52bV9vcHMgPSB2bWEtPnZtX29wczsKKwl2bWEtPnZtX29wcyA9ICZiaW5fdm1fb3BzOworb3V0X3B1dDoKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOwogCiAJcmV0dXJuIHJjOwpAQCAtMjIzLDggKzQyNCwxMyBAQAogCQlnb3RvIGVycl9vdXQ7CiAKIAltdXRleF9pbml0KCZiYi0+bXV0ZXgpOworCWJiLT5maWxlID0gZmlsZTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBiYjsKIAorCW11dGV4X2xvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZCgmYmItPmxpc3QsICZhdHRyX3NkLT5zX2Jpbl9hdHRyLmJ1ZmZlcnMpOworCW11dGV4X3VubG9jaygmc3lzZnNfYmluX2xvY2spOworCiAJLyogb3BlbiBzdWNjZWVkZWQsIHB1dCBhY3RpdmUgcmVmZXJlbmNlcyAqLwogCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOwogCXJldHVybiAwOwpAQCAtMjM3LDExICs0NDMsMTIgQEAKIAogc3RhdGljIGludCByZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0Jc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWlmIChiYi0+bW1hcHBlZCkKLQkJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJbXV0ZXhfbG9jaygmc3lzZnNfYmluX2xvY2spOworCWhsaXN0X2RlbCgmYmItPmxpc3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfYmluX2xvY2spOworCiAJa2ZyZWUoYmItPmJ1ZmZlcik7CiAJa2ZyZWUoYmIpOwogCXJldHVybiAwOwpAQCAtMjU2LDYgKzQ2MywyNiBAQAogCS5yZWxlYXNlCT0gcmVsZWFzZSwKIH07CiAKKwordm9pZCB1bm1hcF9iaW5fZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkKQoreworCXN0cnVjdCBiaW5fYnVmZmVyICpiYjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCisJaWYgKHN5c2ZzX3R5cGUoYXR0cl9zZCkgIT0gU1lTRlNfS09CSl9CSU5fQVRUUikKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmc3lzZnNfYmluX2xvY2spOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYmIsIHRtcCwgJmF0dHJfc2QtPnNfYmluX2F0dHIuYnVmZmVycywgbGlzdCkgeworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmItPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwkJdW5tYXBfbWFwcGluZ19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAwLCAwLCAxKTsKKwl9CisKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKK30KKwogLyoqCiAgKglzeXNmc19jcmVhdGVfYmluX2ZpbGUgLSBjcmVhdGUgYmluYXJ5IGZpbGUgZm9yIG9iamVjdC4KICAqCUBrb2JqOglvYmplY3QuCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDgyZDNiNzkuLjY2YWViNGYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC00MzQsNiArNDM0LDI2IEBACiB9CiAKIC8qKgorICoJc3lzZnNfcGF0aG5hbWUgLSByZXR1cm4gZnVsbCBwYXRoIHRvIHN5c2ZzIGRpcmVudAorICoJQHNkOiBzeXNmc19kaXJlbnQgd2hvc2UgcGF0aCB3ZSB3YW50CisgKglAcGF0aDogY2FsbGVyIGFsbG9jYXRlZCBidWZmZXIKKyAqCisgKglHaXZlcyB0aGUgbmFtZSAiLyIgdG8gdGhlIHN5c2ZzX3Jvb3QgZW50cnk7IGFueSBwYXRoIHJldHVybmVkCisgKglpcyByZWxhdGl2ZSB0byB3aGVyZXZlciBzeXNmcyBpcyBtb3VudGVkLgorICoKKyAqCVhYWDogZG9lcyBubyBlcnJvciBjaGVja2luZyBvbiBAcGF0aCBzaXplCisgKi8KK3N0YXRpYyBjaGFyICpzeXNmc19wYXRobmFtZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCwgY2hhciAqcGF0aCkKK3sKKwlpZiAoc2QtPnNfcGFyZW50KSB7CisJCXN5c2ZzX3BhdGhuYW1lKHNkLT5zX3BhcmVudCwgcGF0aCk7CisJCXN0cmNhdChwYXRoLCAiLyIpOworCX0KKwlzdHJjYXQocGF0aCwgc2QtPnNfbmFtZSk7CisJcmV0dXJuIHBhdGg7Cit9CisKKy8qKgogICoJc3lzZnNfYWRkX29uZSAtIGFkZCBzeXNmc19kaXJlbnQgdG8gcGFyZW50CiAgKglAYWN4dDogYWRkcm0gY29udGV4dCB0byB1c2UKICAqCUBzZDogc3lzZnNfZGlyZW50IHRvIGJlIGFkZGVkCkBAIC00NTgsOCArNDc4LDE2IEBACiAJaW50IHJldDsKIAogCXJldCA9IF9fc3lzZnNfYWRkX29uZShhY3h0LCBzZCk7Ci0JV0FSTihyZXQgPT0gLUVFWElTVCwgS0VSTl9XQVJOSU5HICJzeXNmczogZHVwbGljYXRlIGZpbGVuYW1lICclcycgIgotCQkgICAgICAgImNhbiBub3QgYmUgY3JlYXRlZFxuIiwgc2QtPnNfbmFtZSk7CisJaWYgKHJldCA9PSAtRUVYSVNUKSB7CisJCWNoYXIgKnBhdGggPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwkJV0FSTigxLCBLRVJOX1dBUk5JTkcKKwkJICAgICAic3lzZnM6IGNhbm5vdCBjcmVhdGUgZHVwbGljYXRlIGZpbGVuYW1lICclcydcbiIsCisJCSAgICAgKHBhdGggPT0gTlVMTCkgPyBzZC0+c19uYW1lIDoKKwkJICAgICBzdHJjYXQoc3RyY2F0KHN5c2ZzX3BhdGhuYW1lKGFjeHQtPnBhcmVudF9zZCwgcGF0aCksICIvIiksCisJCSAgICAgICAgICAgIHNkLT5zX25hbWUpKTsKKwkJa2ZyZWUocGF0aCk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTgxLDYgKzYwOSw3IEBACiAKIAkJc3lzZnNfZHJvcF9kZW50cnkoc2QpOwogCQlzeXNmc19kZWFjdGl2YXRlKHNkKTsKKwkJdW5tYXBfYmluX2ZpbGUoc2QpOwogCQlzeXNmc19wdXQoc2QpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCAxZjRhM2Y4Li4yODljNDNhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC02NTksMTMgKzY1OSwxNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCk7CiAKIHN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgewotCXN0cnVjdCBrb2JqZWN0IAkJKmtvYmo7CisJc3RydWN0IGxpc3RfaGVhZAl3b3JrcV9saXN0OworCXN0cnVjdCBrb2JqZWN0CQkqa29iajsKIAl2b2lkCQkJKCpmdW5jKSh2b2lkICopOwogCXZvaWQJCQkqZGF0YTsKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiB9OwogCitzdGF0aWMgREVGSU5FX01VVEVYKHN5c2ZzX3dvcmtxX211dGV4KTsKK3N0YXRpYyBMSVNUX0hFQUQoc3lzZnNfd29ya3EpOwogc3RhdGljIHZvaWQgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCAqc3MgPSBjb250YWluZXJfb2Yod29yaywKQEAgLTY3NCw2ICs2NzcsOSBAQAogCShzcy0+ZnVuYykoc3MtPmRhdGEpOwogCWtvYmplY3RfcHV0KHNzLT5rb2JqKTsKIAltb2R1bGVfcHV0KHNzLT5vd25lcik7CisJbXV0ZXhfbG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCWxpc3RfZGVsKCZzcy0+d29ya3FfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CiAJa2ZyZWUoc3MpOwogfQogCkBAIC02OTUsMTUgKzcwMSwyNSBAQAogICogdW50aWwgQGZ1bmMgcmV0dXJucy4KICAqCiAgKiBSZXR1cm5zIDAgaWYgdGhlIHJlcXVlc3Qgd2FzIHN1Ym1pdHRlZCwgLUVOT01FTSBpZiBzdG9yYWdlIGNvdWxkIG5vdAotICogYmUgYWxsb2NhdGVkLCAtRU5PREVWIGlmIGEgcmVmZXJlbmNlIHRvIEBvd25lciBpc24ndCBhdmFpbGFibGUuCisgKiBiZSBhbGxvY2F0ZWQsIC1FTk9ERVYgaWYgYSByZWZlcmVuY2UgdG8gQG93bmVyIGlzbid0IGF2YWlsYWJsZSwKKyAqIC1FQUdBSU4gaWYgYSBjYWxsYmFjayBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCBmb3IgQGtvYmouCiAgKi8KIGludCBzeXNmc19zY2hlZHVsZV9jYWxsYmFjayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgdm9pZCAoKmZ1bmMpKHZvaWQgKiksCiAJCXZvaWQgKmRhdGEsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewotCXN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgKnNzOworCXN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgKnNzLCAqdG1wOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpCiAJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcywgdG1wLCAmc3lzZnNfd29ya3EsIHdvcmtxX2xpc3QpCisJCWlmIChzcy0+a29iaiA9PSBrb2JqKSB7CisJCQltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisKIAlzcyA9IGttYWxsb2Moc2l6ZW9mKCpzcyksIEdGUF9LRVJORUwpOwogCWlmICghc3MpIHsKIAkJbW9kdWxlX3B1dChvd25lcik7CkBAIC03MTUsNiArNzMxLDEwIEBACiAJc3MtPmRhdGEgPSBkYXRhOwogCXNzLT5vd25lciA9IG93bmVyOwogCUlOSVRfV09SSygmc3MtPndvcmssIHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZzcy0+d29ya3FfbGlzdCk7CisJbXV0ZXhfbG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJnNzLT53b3JrcV9saXN0LCAmc3lzZnNfd29ya3EpOworCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOwogCXNjaGVkdWxlX3dvcmsoJnNzLT53b3JrKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2lub2RlLmMgYi9mcy9zeXNmcy9pbm9kZS5jCmluZGV4IGRmYTNkOTQuLjU1NWYwZmYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2lub2RlLmMKKysrIGIvZnMvc3lzZnMvaW5vZGUuYwpAQCAtMTQ3LDYgKzE0Nyw3IEBACiB7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyOwogCisJaW5vZGUtPmlfcHJpdmF0ZSA9IHN5c2ZzX2dldChzZCk7CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmc3lzZnNfYW9wczsKIAlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJnN5c2ZzX2JhY2tpbmdfZGV2X2luZm87CiAJaW5vZGUtPmlfb3AgPSAmc3lzZnNfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTIxNCw2ICsyMTUsMjIgQEAKIAlyZXR1cm4gaW5vZGU7CiB9CiAKKy8qCisgKiBUaGUgc3lzZnNfZGlyZW50IHNlcnZlcyBhcyBib3RoIGFuIGlub2RlIGFuZCBhIGRpcmVjdG9yeSBlbnRyeSBmb3Igc3lzZnMuCisgKiBUbyBwcmV2ZW50IHRoZSBzeXNmcyBpbm9kZSBudW1iZXJzIGZyb20gYmVpbmcgZnJlZWQgcHJlbWF0dXJlbHkgd2UgdGFrZSBhCisgKiByZWZlcmVuY2UgdG8gc3lzZnNfZGlyZW50IGZyb20gdGhlIHN5c2ZzIGlub2RlLiAgQQorICogc3VwZXJfb3BlcmF0aW9ucy5kZWxldGVfaW5vZGUoKSBpbXBsZW1lbnRhdGlvbiBpcyBuZWVkZWQgdG8gZHJvcCB0aGF0CisgKiByZWZlcmVuY2UgdXBvbiBpbm9kZSBkZXN0cnVjdGlvbi4KKyAqLwordm9pZCBzeXNmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCAgPSBpbm9kZS0+aV9wcml2YXRlOworCisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWNsZWFyX2lub2RlKGlub2RlKTsKKwlzeXNmc19wdXQoc2QpOworfQorCiBpbnQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpcl9zZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3Qgc3lzZnNfYWRkcm1fY3h0IGFjeHQ7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9tb3VudC5jIGIvZnMvc3lzZnMvbW91bnQuYwppbmRleCBhYjM0M2UzLi40OTc0OTk1IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9tb3VudC5jCisrKyBiL2ZzL3N5c2ZzL21vdW50LmMKQEAgLTE3LDExICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogI2luY2x1ZGUgInN5c2ZzLmgiCiAKLS8qIFJhbmRvbSBtYWdpYyBudW1iZXIgKi8KLSNkZWZpbmUgU1lTRlNfTUFHSUMgMHg2MjY1NjU3MgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzeXNmc19tb3VudDsKIHN0cnVjdCBzdXBlcl9ibG9jayAqIHN5c2ZzX3NiID0gTlVMTDsKQEAgLTMwLDYgKzI5LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzeXNmc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCisJLmRlbGV0ZV9pbm9kZQk9IHN5c2ZzX2RlbGV0ZV9pbm9kZSwKIH07CiAKIHN0cnVjdCBzeXNmc19kaXJlbnQgc3lzZnNfcm9vdCA9IHsKQEAgLTUzLDcgKzUzLDkgQEAKIAlzeXNmc19zYiA9IHNiOwogCiAJLyogZ2V0IHJvb3QgaW5vZGUsIGluaXRpYWxpemUgYW5kIHVubG9jayBpdCAqLworCW11dGV4X2xvY2soJnN5c2ZzX211dGV4KTsKIAlpbm9kZSA9IHN5c2ZzX2dldF9pbm9kZSgmc3lzZnNfcm9vdCk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc19tdXRleCk7CiAJaWYgKCFpbm9kZSkgewogCQlwcl9kZWJ1Zygic3lzZnM6IGNvdWxkIG5vdCBnZXQgcm9vdCBpbm9kZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvc3lzZnMuaCBiL2ZzL3N5c2ZzL3N5c2ZzLmgKaW5kZXggOTNjNmQ2Yi4uM2ZhMGQ5ODQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMjgsNiArMjgsNyBAQAogCiBzdHJ1Y3Qgc3lzZnNfZWxlbV9iaW5fYXR0ciB7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUJKmJpbl9hdHRyOworCXN0cnVjdCBobGlzdF9oZWFkCWJ1ZmZlcnM7CiB9OwogCiAvKgpAQCAtMTQ1LDYgKzE0Niw3IEBACiAgKiBpbm9kZS5jCiAgKi8KIHN0cnVjdCBpbm9kZSAqc3lzZnNfZ2V0X2lub2RlKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3ZvaWQgc3lzZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHN5c2ZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTsKIGludCBzeXNmc19oYXNoX2FuZF9yZW1vdmUoc3RydWN0IHN5c2ZzX2RpcmVudCAqZGlyX3NkLCBjb25zdCBjaGFyICpuYW1lKTsKIGludCBzeXNmc19pbm9kZV9pbml0KHZvaWQpOwpAQCAtMTYzLDYgKzE2NSw3IEBACiAgKiBiaW4uYwogICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiaW5fZm9wczsKK3ZvaWQgdW5tYXBfYmluX2ZpbGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCk7CiAKIC8qCiAgKiBzeW1saW5rLmMKZGlmZiAtLWdpdCBhL2ZzL3RpbWVyZmQuYyBiL2ZzL3RpbWVyZmQuYwppbmRleCA2YTEyM2I4Li5iMDQyYmQ3IDEwMDY0NAotLS0gYS9mcy90aW1lcmZkLmMKKysrIGIvZnMvdGltZXJmZC5jCkBAIC0xODYsMTAgKzE4Niw5IEBACiAJQlVJTERfQlVHX09OKFRGRF9DTE9FWEVDICE9IE9fQ0xPRVhFQyk7CiAJQlVJTERfQlVHX09OKFRGRF9OT05CTE9DSyAhPSBPX05PTkJMT0NLKTsKIAotCWlmIChmbGFncyAmIH4oVEZEX0NMT0VYRUMgfCBURkRfTk9OQkxPQ0spKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY2xvY2tpZCAhPSBDTE9DS19NT05PVE9OSUMgJiYKLQkgICAgY2xvY2tpZCAhPSBDTE9DS19SRUFMVElNRSkKKwlpZiAoKGZsYWdzICYgflRGRF9DUkVBVEVfRkxBR1MpIHx8CisJICAgIChjbG9ja2lkICE9IENMT0NLX01PTk9UT05JQyAmJgorCSAgICAgY2xvY2tpZCAhPSBDTE9DS19SRUFMVElNRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwpAQCAtMjAxLDcgKzIwMCw3IEBACiAJaHJ0aW1lcl9pbml0KCZjdHgtPnRtciwgY2xvY2tpZCwgSFJUSU1FUl9NT0RFX0FCUyk7CiAKIAl1ZmQgPSBhbm9uX2lub2RlX2dldGZkKCJbdGltZXJmZF0iLCAmdGltZXJmZF9mb3BzLCBjdHgsCi0JCQkgICAgICAgZmxhZ3MgJiAoT19DTE9FWEVDIHwgT19OT05CTE9DSykpOworCQkJICAgICAgIGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CiAJaWYgKHVmZCA8IDApCiAJCWtmcmVlKGN0eCk7CiAKQEAgLTIxOSw3ICsyMTgsOCBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigma3RtciwgdXRtciwgc2l6ZW9mKGt0bXIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoIXRpbWVzcGVjX3ZhbGlkKCZrdG1yLml0X3ZhbHVlKSB8fAorCWlmICgoZmxhZ3MgJiB+VEZEX1NFVFRJTUVfRkxBR1MpIHx8CisJICAgICF0aW1lc3BlY192YWxpZCgma3Rtci5pdF92YWx1ZSkgfHwKIAkgICAgIXRpbWVzcGVjX3ZhbGlkKCZrdG1yLml0X2ludGVydmFsKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9zdXBlci5jIGIvZnMvdWZzL3N1cGVyLmMKaW5kZXggZTY1MjEyZC4uMjYxYTFjMiAxMDA2NDQKLS0tIGEvZnMvdWZzL3N1cGVyLmMKKysrIGIvZnMvdWZzL3N1cGVyLmMKQEAgLTQxLDcgKzQxLDcgQEAKICAqIFN0ZWZhbiBSZWluYXVlciA8c3RlcGFuQGhvbWUuY3VsdHVyZS5taXB0LnJ1PgogICoKICAqIE1vZHVsZSB1c2FnZSBjb3VudHMgYWRkZWQgb24gOTYvMDQvMjkgYnkKLSAqIEdlcnRqYW4gdmFuIFdpbmdlcmRlIDxnZXJ0amFuQGNzLnZ1Lm5sPgorICogR2VydGphbiB2YW4gV2luZ2VyZGUgPGd3aW5nZXJkZUBnbWFpbC5jb20+CiAgKgogICogQ2xlYW4gc3dhYiBzdXBwb3J0IG9uIDE5OTcwNDA2IGJ5CiAgKiBGcmFuY29pcy1SZW5lIFJpZGVhdSA8ZmFyZUB0dW5lcy5vcmc+CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IGQ3MWRjNDQuLmFhMTAxNmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0zNCw2ICszNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCisjaW5jbHVkZSAieGZzX3NiLmgiCisjaW5jbHVkZSAieGZzX2ludW0uaCIKKyNpbmNsdWRlICJ4ZnNfYWcuaCIKKyNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKKyNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKKwogc3RhdGljIGttZW1fem9uZV90ICp4ZnNfYnVmX3pvbmU7CiBTVEFUSUMgaW50IHhmc2J1ZmQodm9pZCAqKTsKIFNUQVRJQyBpbnQgeGZzYnVmZF93YWtldXAoaW50LCBnZnBfdCk7CkBAIC0xNjYsNiArMTcyLDc1IEBACiB9CiAKIC8qCisgKglNYXBwaW5nIG9mIG11bHRpLXBhZ2UgYnVmZmVycyBpbnRvIGNvbnRpZ3VvdXMgdmlydHVhbCBzcGFjZQorICovCisKK3R5cGVkZWYgc3RydWN0IGFfbGlzdCB7CisJdm9pZAkJKnZtX2FkZHI7CisJc3RydWN0IGFfbGlzdAkqbmV4dDsKK30gYV9saXN0X3Q7CisKK3N0YXRpYyBhX2xpc3RfdAkJKmFzX2ZyZWVfaGVhZDsKK3N0YXRpYyBpbnQJCWFzX2xpc3RfbGVuOworc3RhdGljIERFRklORV9TUElOTE9DSyhhc19sb2NrKTsKKworLyoKKyAqCVRyeSB0byBiYXRjaCB2dW5tYXBzIGJlY2F1c2UgdGhleSBhcmUgY29zdGx5LgorICovCitTVEFUSUMgdm9pZAorZnJlZV9hZGRyZXNzKAorCXZvaWQJCSphZGRyKQoreworCWFfbGlzdF90CSphZW50cnk7CisKKyNpZmRlZiBDT05GSUdfWEVOCisJLyoKKwkgKiBYZW4gbmVlZHMgdG8gYmUgYWJsZSB0byBtYWtlIHN1cmUgaXQgY2FuIGdldCBhbiBleGNsdXNpdmUKKwkgKiBSTyBtYXBwaW5nIG9mIHBhZ2VzIGl0IHdhbnRzIHRvIHR1cm4gaW50byBhIHBhZ2V0YWJsZS4gIElmCisJICogYSBuZXdseSBhbGxvY2F0ZWQgcGFnZSBpcyBhbHNvIHN0aWxsIGJlaW5nIHZtYXAoKWVkIGJ5IHhmcywKKwkgKiBpdCB3aWxsIGNhdXNlIHBhZ2V0YWJsZSBjb25zdHJ1Y3Rpb24gdG8gZmFpbC4gIFRoaXMgaXMgYQorCSAqIHF1aWNrIHdvcmthcm91bmQgdG8gYWx3YXlzIGVhZ2VybHkgdW5tYXAgcGFnZXMgc28gdGhhdCBYZW4KKwkgKiBpcyBoYXBweS4KKwkgKi8KKwl2dW5tYXAoYWRkcik7CisJcmV0dXJuOworI2VuZGlmCisKKwlhZW50cnkgPSBrbWFsbG9jKHNpemVvZihhX2xpc3RfdCksIEdGUF9OT1dBSVQpOworCWlmIChsaWtlbHkoYWVudHJ5KSkgeworCQlzcGluX2xvY2soJmFzX2xvY2spOworCQlhZW50cnktPm5leHQgPSBhc19mcmVlX2hlYWQ7CisJCWFlbnRyeS0+dm1fYWRkciA9IGFkZHI7CisJCWFzX2ZyZWVfaGVhZCA9IGFlbnRyeTsKKwkJYXNfbGlzdF9sZW4rKzsKKwkJc3Bpbl91bmxvY2soJmFzX2xvY2spOworCX0gZWxzZSB7CisJCXZ1bm1hcChhZGRyKTsKKwl9Cit9CisKK1NUQVRJQyB2b2lkCitwdXJnZV9hZGRyZXNzZXModm9pZCkKK3sKKwlhX2xpc3RfdAkqYWVudHJ5LCAqb2xkOworCisJaWYgKGFzX2ZyZWVfaGVhZCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmFzX2xvY2spOworCWFlbnRyeSA9IGFzX2ZyZWVfaGVhZDsKKwlhc19mcmVlX2hlYWQgPSBOVUxMOworCWFzX2xpc3RfbGVuID0gMDsKKwlzcGluX3VubG9jaygmYXNfbG9jayk7CisKKwl3aGlsZSAoKG9sZCA9IGFlbnRyeSkgIT0gTlVMTCkgeworCQl2dW5tYXAoYWVudHJ5LT52bV9hZGRyKTsKKwkJYWVudHJ5ID0gYWVudHJ5LT5uZXh0OworCQlrZnJlZShvbGQpOworCX0KK30KKworLyoKICAqCUludGVybmFsIHhmc19idWZfdCBvYmplY3QgbWFuaXB1bGF0aW9uCiAgKi8KIApAQCAtMjY0LDcgKzMzOSw3IEBACiAJCXVpbnQJCWk7CiAKIAkJaWYgKChicC0+Yl9mbGFncyAmIFhCRl9NQVBQRUQpICYmIChicC0+Yl9wYWdlX2NvdW50ID4gMSkpCi0gICAgICAgICAgICAgICAgICAgICAgIHZtX3VubWFwX3JhbShicC0+Yl9hZGRyIC0gYnAtPmJfb2Zmc2V0LCBicC0+Yl9wYWdlX2NvdW50KTsKKwkJCWZyZWVfYWRkcmVzcyhicC0+Yl9hZGRyIC0gYnAtPmJfb2Zmc2V0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYnAtPmJfcGFnZV9jb3VudDsgaSsrKSB7CiAJCQlzdHJ1Y3QgcGFnZQkqcGFnZSA9IGJwLT5iX3BhZ2VzW2ldOwpAQCAtMzg2LDggKzQ2MSwxMCBAQAogCQlicC0+Yl9hZGRyID0gcGFnZV9hZGRyZXNzKGJwLT5iX3BhZ2VzWzBdKSArIGJwLT5iX29mZnNldDsKIAkJYnAtPmJfZmxhZ3MgfD0gWEJGX01BUFBFRDsKIAl9IGVsc2UgaWYgKGZsYWdzICYgWEJGX01BUFBFRCkgewotICAgICAgICAgICAgICAgYnAtPmJfYWRkciA9IHZtX21hcF9yYW0oYnAtPmJfcGFnZXMsIGJwLT5iX3BhZ2VfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgUEFHRV9LRVJORUwpOworCQlpZiAoYXNfbGlzdF9sZW4gPiA2NCkKKwkJCXB1cmdlX2FkZHJlc3NlcygpOworCQlicC0+Yl9hZGRyID0gdm1hcChicC0+Yl9wYWdlcywgYnAtPmJfcGFnZV9jb3VudCwKKwkJCQkJVk1fTUFQLCBQQUdFX0tFUk5FTCk7CiAJCWlmICh1bmxpa2VseShicC0+Yl9hZGRyID09IE5VTEwpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWJwLT5iX2FkZHIgKz0gYnAtPmJfb2Zmc2V0OwpAQCAtMTM2NCwxMCArMTQ0MSwxMiBAQAogCiB2b2lkCiB4ZnNfZnJlZV9idWZ0YXJnKAotCXhmc19idWZ0YXJnX3QJCSpidHApCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19idWZ0YXJnCSpidHApCiB7CiAJeGZzX2ZsdXNoX2J1ZnRhcmcoYnRwLCAxKTsKLQl4ZnNfYmxrZGV2X2lzc3VlX2ZsdXNoKGJ0cCk7CisJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCisJCXhmc19ibGtkZXZfaXNzdWVfZmx1c2goYnRwKTsKIAl4ZnNfZnJlZV9idWZoYXNoKGJ0cCk7CiAJaXB1dChidHAtPmJ0X21hcHBpbmctPmhvc3QpOwogCkBAIC0xNjcyLDYgKzE3NTEsOCBAQAogCQkJY291bnQrKzsKIAkJfQogCisJCWlmIChhc19saXN0X2xlbiA+IDApCisJCQlwdXJnZV9hZGRyZXNzZXMoKTsKIAkJaWYgKGNvdW50KQogCQkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKHRhcmdldC0+YnRfbWFwcGluZyk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggMjg4YWU3Yy4uOWI0ZDY2NiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTQxMyw3ICs0MTMsNyBAQAogICoJSGFuZGxpbmcgb2YgYnVmdGFyZ3MuCiAgKi8KIGV4dGVybiB4ZnNfYnVmdGFyZ190ICp4ZnNfYWxsb2NfYnVmdGFyZyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7Ci1leHRlcm4gdm9pZCB4ZnNfZnJlZV9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKik7CitleHRlcm4gdm9pZCB4ZnNfZnJlZV9idWZ0YXJnKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19idWZ0YXJnICopOwogZXh0ZXJuIHZvaWQgeGZzX3dhaXRfYnVmdGFyZyh4ZnNfYnVmdGFyZ190ICopOwogZXh0ZXJuIGludCB4ZnNfc2V0c2l6ZV9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCB4ZnNfZmx1c2hfYnVmdGFyZyh4ZnNfYnVmdGFyZ190ICosIGludCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCBjNzFlMjI2Li4zMmFlNTAyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTczNCwxNSArNzM0LDE1IEBACiB7CiAJaWYgKG1wLT5tX2xvZ2Rldl90YXJncCAmJiBtcC0+bV9sb2dkZXZfdGFyZ3AgIT0gbXAtPm1fZGRldl90YXJncCkgewogCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpsb2dkZXYgPSBtcC0+bV9sb2dkZXZfdGFyZ3AtPmJ0X2JkZXY7Ci0JCXhmc19mcmVlX2J1ZnRhcmcobXAtPm1fbG9nZGV2X3RhcmdwKTsKKwkJeGZzX2ZyZWVfYnVmdGFyZyhtcCwgbXAtPm1fbG9nZGV2X3RhcmdwKTsKIAkJeGZzX2Jsa2Rldl9wdXQobG9nZGV2KTsKIAl9CiAJaWYgKG1wLT5tX3J0ZGV2X3RhcmdwKSB7CiAJCXN0cnVjdCBibG9ja19kZXZpY2UgKnJ0ZGV2ID0gbXAtPm1fcnRkZXZfdGFyZ3AtPmJ0X2JkZXY7Ci0JCXhmc19mcmVlX2J1ZnRhcmcobXAtPm1fcnRkZXZfdGFyZ3ApOworCQl4ZnNfZnJlZV9idWZ0YXJnKG1wLCBtcC0+bV9ydGRldl90YXJncCk7CiAJCXhmc19ibGtkZXZfcHV0KHJ0ZGV2KTsKIAl9Ci0JeGZzX2ZyZWVfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwKTsKKwl4ZnNfZnJlZV9idWZ0YXJnKG1wLCBtcC0+bV9kZGV2X3RhcmdwKTsKIH0KIAogLyoKQEAgLTgxMSw5ICs4MTEsOSBAQAogCiAgb3V0X2ZyZWVfcnRkZXZfdGFyZzoKIAlpZiAobXAtPm1fcnRkZXZfdGFyZ3ApCi0JCXhmc19mcmVlX2J1ZnRhcmcobXAtPm1fcnRkZXZfdGFyZ3ApOworCQl4ZnNfZnJlZV9idWZ0YXJnKG1wLCBtcC0+bV9ydGRldl90YXJncCk7CiAgb3V0X2ZyZWVfZGRldl90YXJnOgotCXhmc19mcmVlX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCk7CisJeGZzX2ZyZWVfYnVmdGFyZyhtcCwgbXAtPm1fZGRldl90YXJncCk7CiAgb3V0X2Nsb3NlX3J0ZGV2OgogCWlmIChydGRldikKIAkJeGZzX2Jsa2Rldl9wdXQocnRkZXYpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCBlMmZiNjIxLi40NzhlNTg3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMjQ2LDkgKzI0Niw2IEBACiAJCWdvdG8gb3V0X2Rlc3Ryb3k7CiAJfQogCi0JaWYgKGxvY2tfZmxhZ3MpCi0JCXhmc19pbG9jayhpcCwgbG9ja19mbGFncyk7Ci0KIAkvKgogCSAqIFByZWxvYWQgdGhlIHJhZGl4IHRyZWUgc28gd2UgY2FuIGluc2VydCBzYWZlbHkgdW5kZXIgdGhlCiAJICogd3JpdGUgc3BpbmxvY2suIE5vdGUgdGhhdCB3ZSBjYW5ub3Qgc2xlZXAgaW5zaWRlIHRoZSBwcmVsb2FkCkBAIC0yNTYsNyArMjUzLDE2IEBACiAJICovCiAJaWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKSkgewogCQllcnJvciA9IEVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9kZXN0cm95OworCX0KKworCS8qCisJICogQmVjYXVzZSB0aGUgaW5vZGUgaGFzbid0IGJlZW4gYWRkZWQgdG8gdGhlIHJhZGl4LXRyZWUgeWV0IGl0IGNhbid0CisJICogYmUgZm91bmQgYnkgYW5vdGhlciB0aHJlYWQsIHNvIHdlIGNhbiBkbyB0aGUgbm9uLXNsZWVwaW5nIGxvY2sgaGVyZS4KKwkgKi8KKwlpZiAobG9ja19mbGFncykgeworCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIGxvY2tfZmxhZ3MpKQorCQkJQlVHKCk7CiAJfQogCiAJbWFzayA9IH4oKChYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZykpIC0gMSk7CkBAIC0yODQsNyArMjkwLDYgQEAKIG91dF9wcmVsb2FkX2VuZDoKIAl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7Ci1vdXRfdW5sb2NrOgogCWlmIChsb2NrX2ZsYWdzKQogCQl4ZnNfaXVubG9jayhpcCwgbG9ja19mbGFncyk7CiBvdXRfZGVzdHJveToKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwppbmRleCBiMTA0N2RlLi42MWFmNjEwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKKysrIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCkBAIC0xNDU1LDEwICsxNDU1LDE5IEBACiAJaXRlbSA9IGl0ZW0tPnJpX3ByZXY7CiAKIAlpZiAoaXRlbS0+cmlfdG90YWwgPT0gMCkgewkJLyogZmlyc3QgcmVnaW9uIHRvIGJlIGFkZGVkICovCi0JCWl0ZW0tPnJpX3RvdGFsCT0gaW5fZi0+aWxmX3NpemU7Ci0JCUFTU0VSVChpdGVtLT5yaV90b3RhbCA8PSBYTE9HX01BWF9SRUdJT05TX0lOX0lURU0pOwotCQlpdGVtLT5yaV9idWYgPSBrbWVtX3phbGxvYygoaXRlbS0+cmlfdG90YWwgKgotCQkJCQkgICAgc2l6ZW9mKHhmc19sb2dfaW92ZWNfdCkpLCBLTV9TTEVFUCk7CisJCWlmIChpbl9mLT5pbGZfc2l6ZSA9PSAwIHx8CisJCSAgICBpbl9mLT5pbGZfc2l6ZSA+IFhMT0dfTUFYX1JFR0lPTlNfSU5fSVRFTSkgeworCQkJeGxvZ193YXJuKAorCSJYRlM6IGJhZCBudW1iZXIgb2YgcmVnaW9ucyAoJWQpIGluIGlub2RlIGxvZyBmb3JtYXQiLAorCQkJCSAgaW5fZi0+aWxmX3NpemUpOworCQkJQVNTRVJUKDApOworCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCQl9CisKKwkJaXRlbS0+cmlfdG90YWwgPSBpbl9mLT5pbGZfc2l6ZTsKKwkJaXRlbS0+cmlfYnVmID0KKwkJCWttZW1femFsbG9jKGl0ZW0tPnJpX3RvdGFsICogc2l6ZW9mKHhmc19sb2dfaW92ZWNfdCksCisJCQkJICAgIEtNX1NMRUVQKTsKIAl9CiAJQVNTRVJUKGl0ZW0tPnJpX3RvdGFsID4gaXRlbS0+cmlfY250KTsKIAkvKiBEZXNjcmlwdGlvbiByZWdpb24gaXMgcmlfYnVmWzBdICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaWRlLmggYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MTA3NjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyogaWRlLmg6IEZSViBJREUgZGVjbGFyYXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX0FTTV9JREVfSAotI2RlZmluZSBfQVNNX0lERV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCmluZGV4IDgzYzUxYWJhLi5lMTZmZGIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKQEAgLTQ3OCw3ICs0NzgsNyBAQAogI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDIpICYgMHgxZikKICNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gOCkKICNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMikgfCAoKG9mZnNldCkgPDwgOCkgfSkKLSNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgKHB0ZSkucHRlIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShfcHRlKQkoKHN3cF9lbnRyeV90KSB7IChfcHRlKS5wdGUgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAogc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaCBiL2luY2x1ZGUvYXNtLWZydi9zd2FiLmgKaW5kZXggYWZiMzM5Ni4uZjMwNTgzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQVNNX1NXQUJfSAogI2RlZmluZSBfQVNNX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCBiODQ3NzQxLi40ZDNlNDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0xMTcsOSArMTE3LDkgQEAKIHN0cnVjdCBmbG9jayB7CiAJc2hvcnQJbF90eXBlOwogCXNob3J0CWxfd2hlbmNlOwotCW9mZl90CWxfc3RhcnQ7Ci0Jb2ZmX3QJbF9sZW47Ci0JcGlkX3QJbF9waWQ7CisJX19rZXJuZWxfb2ZmX3QJbF9zdGFydDsKKwlfX2tlcm5lbF9vZmZfdAlsX2xlbjsKKwlfX2tlcm5lbF9waWRfdAlsX3BpZDsKIAlfX0FSQ0hfRkxPQ0tfUEFECiB9OwogI2VuZGlmCkBAIC0xNDAsOSArMTQwLDkgQEAKIHN0cnVjdCBmbG9jazY0IHsKIAlzaG9ydCAgbF90eXBlOwogCXNob3J0ICBsX3doZW5jZTsKLQlsb2ZmX3QgbF9zdGFydDsKLQlsb2ZmX3QgbF9sZW47Ci0JcGlkX3QgIGxfcGlkOworCV9fa2VybmVsX2xvZmZfdCBsX3N0YXJ0OworCV9fa2VybmVsX2xvZmZfdCBsX2xlbjsKKwlfX2tlcm5lbF9waWRfdCAgbF9waWQ7CiAJX19BUkNIX0ZMT0NLNjRfUEFECiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCmluZGV4IDk2OTU3MDEuLjM1NzUyZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FSQ0hfU0lfVUlEX1QKLSNkZWZpbmUgX19BUkNIX1NJX1VJRF9UCXVpZF90CisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAlfX2tlcm5lbF91aWQzMl90CiAjZW5kaWYKIAogLyoKQEAgLTQ3LDEzICs0NywxMyBAQAogCiAJCS8qIGtpbGwoKSAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCiAJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCiAJCX0gX2tpbGw7CiAKIAkJLyogUE9TSVguMWIgdGltZXJzICovCiAJCXN0cnVjdCB7Ci0JCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJX19rZXJuZWxfdGltZXJfdCBfdGlkOwkvKiB0aW1lciBpZCAqLwogCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLwogCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKIAkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KQEAgLTYyLDE4ICs2MiwxOCBAQAogCiAJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KIAkJc3RydWN0IHsKLQkJCXBpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJc2lndmFsX3QgX3NpZ3ZhbDsKIAkJfSBfcnQ7CiAKIAkJLyogU0lHQ0hMRCAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHdoaWNoIGNoaWxkICovCisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNsb2NrX3QgX3V0aW1lOwotCQkJY2xvY2tfdCBfc3RpbWU7CisJCQlfX2tlcm5lbF9jbG9ja190IF91dGltZTsKKwkJCV9fa2VybmVsX2Nsb2NrX3QgX3N0aW1lOwogCQl9IF9zaWdjaGxkOwogCiAJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCmluZGV4IDYxMjlkNjguLjNiNGZiM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaApAQCAtMSw4ICsxLDkgQEAKICNpZm5kZWYgX0dFTkVSSUNfU1RBVEZTX0gKICNkZWZpbmUgX0dFTkVSSUNfU1RBVEZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBjNjFmYWIxLi5hY2E0MGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC04MCw2ICs4MCwxMSBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKIAkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAorCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCisJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkKIApAQCAtMzA5LDE1ICszMTQsNyBAQAogCUNQVV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKLQlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKLQkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2Vfc3RyaW5ncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICAgXAotCS4gPSBBTElHTig4KTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CisJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCiAKICNkZWZpbmUgSU5JVF9URVhUCQkJCQkJCVwKIAkqKC5pbml0LnRleHQpCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oIGIvaW5jbHVkZS9hc20tbTMyci9zd2FiLmgKaW5kZXggOTc5NzNlMS4uNTRkYWIwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zd2FiLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BU01fTTMyUl9TV0FCX0gKICNkZWZpbmUgX0FTTV9NMzJSX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvaWRlLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWRjZGQ5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvaWRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKiBNTjEwMzAwIEFyY2gtc3BlY2lmaWMgSURFIGNvZGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICogLSBEZXJpdmVkIGZyb20gaW5jbHVkZS9hc20taTM4Ni9pZGUuaAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfQVNNX0lERV9ICi0jZGVmaW5lIF9BU01fSURFX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9pbnRjdGwtcmVncy5oPgotCi0jdW5kZWYgU1VQUE9SVF9TTE9XX0RBVEFfUE9SVFMKLSNkZWZpbmUgU1VQUE9SVF9TTE9XX0RBVEFfUE9SVFMgMAotCi0jdW5kZWYgU1VQUE9SVF9WTEJfU1lOQwotI2RlZmluZSBTVVBQT1JUX1ZMQl9TWU5DIDAKLQotLyoKLSAqIHNvbWUgYml0cyBuZWVkZWQgZm9yIHBhcnRzIG9mIHRoZSBJREUgc3Vic3lzdGVtIHRvIGNvbXBpbGUKLSAqLwotI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsIGFkZHIsIG4pIFwKLQlpbnN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotI2RlZmluZSBfX2lkZV9tbV9pbnNsKHBvcnQsIGFkZHIsIG4pIFwKLQlpbnNsKCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKSBcCi0Jb3V0c3coKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX291dHNsKHBvcnQsIGFkZHIsIG4pIFwKLQlvdXRzbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaAppbmRleCBjZDljYzVjLi4wNTE3YjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmgKQEAgLTEyMSw0ICsxMjEsOSBAQAogCiAjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKIAorc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7Cit9CisKICNlbmRpZiAvKiBfQVNNX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oCmluZGV4IDQ1MDRkMWIuLmJkODE4YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9BU01fU1dBQl9ICiAjZGVmaW5lIF9BU01fU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWZkZWYgX19HTlVDX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vYWVzLmggYi9pbmNsdWRlL2NyeXB0by9hZXMuaAppbmRleCA2NTZhNGM2Li43NTI0YmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9hZXMuaAorKysgYi9pbmNsdWRlL2NyeXB0by9hZXMuaApAQCAtMTcsMTAgKzE3LDE0IEBACiAjZGVmaW5lIEFFU19NQVhfS0VZTEVOR1RICSgxNSAqIDE2KQogI2RlZmluZSBBRVNfTUFYX0tFWUxFTkdUSF9VMzIJKEFFU19NQVhfS0VZTEVOR1RIIC8gc2l6ZW9mKHUzMikpCiAKKy8qCisgKiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGZpcnN0IHR3byBmaWVsZHMgYXJlIDE2LWJ5dGUgYWxpZ25lZAorICogcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdHJ1Y3R1cmUsIGkuZS4sIGRvbid0IG1vdmUgdGhlbSEKKyAqLwogc3RydWN0IGNyeXB0b19hZXNfY3R4IHsKLQl1MzIga2V5X2xlbmd0aDsKIAl1MzIga2V5X2VuY1tBRVNfTUFYX0tFWUxFTkdUSF9VMzJdOwogCXUzMiBrZXlfZGVjW0FFU19NQVhfS0VZTEVOR1RIX1UzMl07CisJdTMyIGtleV9sZW5ndGg7CiB9OwogCiBleHRlcm4gY29uc3QgdTMyIGNyeXB0b19mdF90YWJbNF1bMjU2XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmggYi9pbmNsdWRlL2NyeXB0by9jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTYzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9jb21wcmVzcy5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29tcHJlc3M6IENvbXByZXNzaW9uIGFsZ29yaXRobXMgdW5kZXIgdGhlIGNyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9DUllQVE9fQ09NUFJFU1NfSAorI2RlZmluZSBfQ1JZUFRPX0NPTVBSRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCisKK3N0cnVjdCBjb21wX3JlcXVlc3QgeworCWNvbnN0IHZvaWQgKm5leHRfaW47CQkvKiBuZXh0IGlucHV0IGJ5dGUgKi8KKwl2b2lkICpuZXh0X291dDsJCQkvKiBuZXh0IG91dHB1dCBieXRlICovCisJdW5zaWduZWQgaW50IGF2YWlsX2luOwkJLyogYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KKwl1bnNpZ25lZCBpbnQgYXZhaWxfb3V0OwkJLyogYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfb3V0ICovCit9OworCitlbnVtIHpsaWJfY29tcF9wYXJhbXMgeworCVpMSUJfQ09NUF9MRVZFTCA9IDEsCQkvKiBlLmcuIFpfREVGQVVMVF9DT01QUkVTU0lPTiAqLworCVpMSUJfQ09NUF9NRVRIT0QsCQkvKiBlLmcuIFpfREVGTEFURUQgKi8KKwlaTElCX0NPTVBfV0lORE9XQklUUywJCS8qIGUuZy4gTUFYX1dCSVRTICovCisJWkxJQl9DT01QX01FTUxFVkVMLAkJLyogZS5nLiBERUZfTUVNX0xFVkVMICovCisJWkxJQl9DT01QX1NUUkFURUdZLAkJLyogZS5nLiBaX0RFRkFVTFRfU1RSQVRFR1kgKi8KKwlfX1pMSUJfQ09NUF9NQVgsCit9OworCisjZGVmaW5lIFpMSUJfQ09NUF9NQVgJKF9fWkxJQl9DT01QX01BWCAtIDEpCisKKworZW51bSB6bGliX2RlY29tcF9wYXJhbXMgeworCVpMSUJfREVDT01QX1dJTkRPV0JJVFMgPSAxLAkvKiBlLmcuIERFRl9XQklUUyAqLworCV9fWkxJQl9ERUNPTVBfTUFYLAorfTsKKworI2RlZmluZSBaTElCX0RFQ09NUF9NQVgJKF9fWkxJQl9ERUNPTVBfTUFYIC0gMSkKKworCitzdHJ1Y3QgY3J5cHRvX3Bjb21wIHsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSBiYXNlOworfTsKKworc3RydWN0IHBjb21wX2FsZyB7CisJaW50ICgqY29tcHJlc3Nfc2V0dXApKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwgdm9pZCAqcGFyYW1zLAorCQkJICAgICAgdW5zaWduZWQgaW50IGxlbik7CisJaW50ICgqY29tcHJlc3NfaW5pdCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKTsKKwlpbnQgKCpjb21wcmVzc191cGRhdGUpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCSAgICAgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmNvbXByZXNzX2ZpbmFsKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkgICAgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmRlY29tcHJlc3Nfc2V0dXApKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwgdm9pZCAqcGFyYW1zLAorCQkJCXVuc2lnbmVkIGludCBsZW4pOworCWludCAoKmRlY29tcHJlc3NfaW5pdCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKTsKKwlpbnQgKCpkZWNvbXByZXNzX3VwZGF0ZSkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCSBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmRlY29tcHJlc3NfZmluYWwpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCisJc3RydWN0IGNyeXB0b19hbGcgYmFzZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgY3J5cHRvX3Bjb21wICpjcnlwdG9fYWxsb2NfcGNvbXAoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAorCQkJCQkgICAgICAgdTMyIG1hc2spOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fcGNvbXBfdGZtKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gJnRmbS0+YmFzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19mcmVlX3Bjb21wKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwljcnlwdG9fZGVzdHJveV90Zm0odGZtLCBjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY29tcF9hbGcgKl9fY3J5cHRvX3Bjb21wX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXJldHVybiBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3QgcGNvbXBfYWxnLCBiYXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNvbXBfYWxnICpjcnlwdG9fcGNvbXBfYWxnKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gX19jcnlwdG9fcGNvbXBfYWxnKGNyeXB0b19wY29tcF90Zm0odGZtKS0+X19jcnRfYWxnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJdm9pZCAqcGFyYW1zLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX3NldHVwKHRmbSwgcGFyYW1zLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3NfaW5pdCh0Zm0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc191cGRhdGUodGZtLCByZXEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3NfZmluYWwodGZtLCByZXEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSAgdm9pZCAqcGFyYW1zLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3Nfc2V0dXAodGZtLCBwYXJhbXMsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3NfaW5pdCh0Zm0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc191cGRhdGUodGZtLCByZXEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3NfZmluYWwodGZtLCByZXEpOworfQorCisjZW5kaWYJLyogX0NSWVBUT19DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9jcnlwdGQuaCBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZmE3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9jcnlwdGQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogU29mdHdhcmUgYXN5bmMgY3J5cHRvIGRhZW1vbgorICovCisKKyNpZm5kZWYgX0NSWVBUT19DUllQVF9ICisjZGVmaW5lIF9DUllQVE9fQ1JZUFRfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK3N0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciB7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyIGJhc2U7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqX19jcnlwdGRfYWJsa2NpcGhlcl9jYXN0KAorCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtKQoreworCXJldHVybiAoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICopdGZtOworfQorCisvKiBhbGdfbmFtZSBzaG91bGQgYmUgYWxnb3JpdGhtIHRvIGJlIGNyeXB0ZC1lZCAqLworc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcihjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJCQkJCSAgdTMyIHR5cGUsIHUzMiBtYXNrKTsKK3N0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSk7Cit2b2lkIGNyeXB0ZF9mcmVlX2FibGtjaXBoZXIoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2NyeXB0b193cS5oIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkMjUyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0b193cS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBDUllQVE9fV1FfSAorI2RlZmluZSBDUllQVE9fV1FfSAorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2NyeXB0b193cTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vaGFzaC5oIGIvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCmluZGV4IGQ3OTdlMTEuLmQ1NmJiNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3J5cHRvL2hhc2guaAorKysgYi9pbmNsdWRlL2NyeXB0by9oYXNoLmgKQEAgLTIzMSw2ICsyMzEsMTEgQEAKIAlyZXR1cm4gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKGNyeXB0b19zaGFzaF90Zm0odGZtKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19zaGFzaF9ibG9ja3NpemUoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtKQoreworCXJldHVybiBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoY3J5cHRvX3NoYXNoX3RmbSh0Zm0pKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2hhc2hfYWxnICpfX2NyeXB0b19zaGFzaF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGFsZywgc3RydWN0IHNoYXNoX2FsZywgYmFzZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhhODg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29tcHJlc3M6IENvbXByZXNzaW9uIGFsZ29yaXRobXMgdW5kZXIgdGhlIGNyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9DUllQVE9fSU5URVJOQUxfQ09NUFJFU1NfSAorI2RlZmluZSBfQ1JZUFRPX0lOVEVSTkFMX0NPTVBSRVNTX0gKKworI2luY2x1ZGUgPGNyeXB0by9jb21wcmVzcy5oPgorCitleHRlcm4gaW50IGNyeXB0b19yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpOworZXh0ZXJuIGludCBjcnlwdG9fdW5yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpOworCisjZW5kaWYJLyogX0NSWVBUT19JTlRFUk5BTF9DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm0uaCBiL2luY2x1ZGUvZHJtL2RybS5oCmluZGV4IDhlNzczNTcuLjdjYjUwYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybS5oCkBAIC0zNiw4ICszNiw3IEBACiAjaWZuZGVmIF9EUk1fSF8KICNkZWZpbmUgX0RSTV9IXwogCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaW9jdGwuaD4JCS8qIEZvciBfSU8qIG1hY3JvcyAqLwogI2RlZmluZSBEUk1fSU9DVExfTlIobikJCV9JT0NfTlIobikKICNkZWZpbmUgRFJNX0lPQ19WT0lECQlfSU9DX05PTkUKQEAgLTQ5Nyw4ICs0OTYsOCBAQAogICogXHNhIGRybU1vZGVzZXRDdGwoKS4KICAqLwogc3RydWN0IGRybV9tb2Rlc2V0X2N0bCB7Ci0JdWludDMyX3QgY3J0YzsKLQl1aW50MzJfdCBjbWQ7CisJX191MzIgY3J0YzsKKwlfX3UzMiBjbWQ7CiB9OwogCiAvKioKQEAgLTU3NCwyOSArNTczLDI5IEBACiAvKiogRFJNX0lPQ1RMX0dFTV9DTE9TRSBpb2N0bCBhcmd1bWVudCB0eXBlICovCiBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgb2JqZWN0IHRvIGJlIGNsb3NlZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiAvKiogRFJNX0lPQ1RMX0dFTV9GTElOSyBpb2N0bCBhcmd1bWVudCB0eXBlICovCiBzdHJ1Y3QgZHJtX2dlbV9mbGluayB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBuYW1lZCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogUmV0dXJuZWQgZ2xvYmFsIG5hbWUgKi8KLQl1aW50MzJfdCBuYW1lOworCV9fdTMyIG5hbWU7CiB9OwogCiAvKiogRFJNX0lPQ1RMX0dFTV9PUEVOIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX29wZW4gewogCS8qKiBOYW1lIG9mIG9iamVjdCBiZWluZyBvcGVuZWQgKi8KLQl1aW50MzJfdCBuYW1lOworCV9fdTMyIG5hbWU7CiAKIAkvKiogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBSZXR1cm5lZCBzaXplIG9mIHRoZSBvYmplY3QgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiB9OwogCiAjaW5jbHVkZSAiZHJtX21vZGUuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCA4MTkwYjliLi5lNWY0YWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC0xMzIxLDYgKzEzMjEsOCBAQAogc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgICAgc2l6ZV90IHNpemUpOwogdm9pZCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cit2b2lkIGRybV9nZW1fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cit2b2lkIGRybV9nZW1fdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogaW50IGRybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IGQ1NGRlMjQuLjVkZWQxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtNjA5LDcgKzYwOSw3IEBACiBleHRlcm4gY2hhciAqZHJtX2dldF9kdmlfaV9zZWxlY3RfbmFtZShpbnQgdmFsKTsKIGV4dGVybiBjaGFyICpkcm1fZ2V0X3R2X3N1YmNvbm5lY3Rvcl9uYW1lKGludCB2YWwpOwogZXh0ZXJuIGNoYXIgKmRybV9nZXRfdHZfc2VsZWN0X25hbWUoaW50IHZhbCk7Ci1leHRlcm4gdm9pZCBkcm1fZmJfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gdm9pZCBkcm1fZmJfcmVsZWFzZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGRybV9tb2RlX2dyb3VwX2luaXRfbGVnYWN5X2dyb3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbW9kZV9ncm91cCAqZ3JvdXApOwogZXh0ZXJuIHN0cnVjdCBlZGlkICpkcm1fZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKaW5kZXggMGM2ZjBlMS4uYzdkNGIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKQEAgLTU0LDEzICs1NCwxMyBAQAogCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CiAJLyogQWN0dWFsbHkgc2V0IHRoZSBtb2RlICovCi0Jdm9pZCAoKm1vZGVfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLCBpbnQgeCwgaW50IHksCi0JCQkgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKTsKKwlpbnQgKCptb2RlX3NldCkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLCBpbnQgeCwgaW50IHksCisJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpOwogCiAJLyogTW92ZSB0aGUgY3J0YyBvbiB0aGUgY3VycmVudCBmYiB0byB0aGUgZ2l2ZW4gcG9zaXRpb24gKm9wdGlvbmFsKiAqLwotCXZvaWQgKCptb2RlX3NldF9iYXNlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYik7CisJaW50ICgqbW9kZV9zZXRfYmFzZSkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCisJCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYik7CiB9OwogCiBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHsKQEAgLTc2LDYgKzc2LDcgQEAKIAl2b2lkICgqbW9kZV9zZXQpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CisJc3RydWN0IGRybV9jcnRjICooKmdldF9jcnRjKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogCS8qIGRldGVjdCBmb3IgREFDIHN0eWxlIGVuY29kZXJzICovCiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZWRpZC5oIGIvaW5jbHVkZS9kcm0vZHJtX2VkaWQuaAppbmRleCBjNzA3YzE1Li5hMTFjYzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZWRpZC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9lZGlkLmgKQEAgLTU4LDEwICs1OCwxMCBAQAogCXU4IGhzeW5jX3B1bHNlX3dpZHRoX2xvOwogCXU4IHZzeW5jX3B1bHNlX3dpZHRoX2xvOjQ7CiAJdTggdnN5bmNfb2Zmc2V0X2xvOjQ7Ci0JdTggaHN5bmNfcHVsc2Vfd2lkdGhfaGk6MjsKLQl1OCBoc3luY19vZmZzZXRfaGk6MjsKIAl1OCB2c3luY19wdWxzZV93aWR0aF9oaToyOwogCXU4IHZzeW5jX29mZnNldF9oaToyOworCXU4IGhzeW5jX3B1bHNlX3dpZHRoX2hpOjI7CisJdTggaHN5bmNfb2Zmc2V0X2hpOjI7CiAJdTggd2lkdGhfbW1fbG87CiAJdTggaGVpZ2h0X21tX2xvOwogCXU4IGhlaWdodF9tbV9oaTo0OwpAQCAtNjksOCArNjksOCBAQAogCXU4IGhib3JkZXI7CiAJdTggdmJvcmRlcjsKIAl1OCB1bmtub3duMDoxOwotCXU4IHZzeW5jX3Bvc2l0aXZlOjE7CiAJdTggaHN5bmNfcG9zaXRpdmU6MTsKKwl1OCB2c3luY19wb3NpdGl2ZToxOwogCXU4IHNlcGFyYXRlX3N5bmM6MjsKIAl1OCBzdGVyZW86MTsKIAl1OCB1bmtub3duNjoxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggNjAxZDJiZC4uYWUzMDRjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC0yNywxMSArMjcsOCBAQAogI2lmbmRlZiBfRFJNX01PREVfSAogI2RlZmluZSBfRFJNX01PREVfSAogCi0jaWYgIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIERSTV9ESVNQTEFZX0lORk9fTEVOCTMyCiAjZGVmaW5lIERSTV9DT05ORUNUT1JfTkFNRV9MRU4JMzIKQEAgLTgxLDQxICs3OCw0MSBAQAogI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT04JMQogCiBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gewotCXVpbnQzMl90IGNsb2NrOwotCXVpbnQxNl90IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OwotCXVpbnQxNl90IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOworCV9fdTMyIGNsb2NrOworCV9fdTE2IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OworCV9fdTE2IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOwogCi0JdWludDMyX3QgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCisJX191MzIgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCiAKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHR5cGU7CiAJY2hhciBuYW1lW0RSTV9ESVNQTEFZX01PREVfTEVOXTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9jYXJkX3JlcyB7Ci0JdWludDY0X3QgZmJfaWRfcHRyOwotCXVpbnQ2NF90IGNydGNfaWRfcHRyOwotCXVpbnQ2NF90IGNvbm5lY3Rvcl9pZF9wdHI7Ci0JdWludDY0X3QgZW5jb2Rlcl9pZF9wdHI7Ci0JdWludDMyX3QgY291bnRfZmJzOwotCXVpbnQzMl90IGNvdW50X2NydGNzOwotCXVpbnQzMl90IGNvdW50X2Nvbm5lY3RvcnM7Ci0JdWludDMyX3QgY291bnRfZW5jb2RlcnM7Ci0JdWludDMyX3QgbWluX3dpZHRoLCBtYXhfd2lkdGg7Ci0JdWludDMyX3QgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKKwlfX3U2NCBmYl9pZF9wdHI7CisJX191NjQgY3J0Y19pZF9wdHI7CisJX191NjQgY29ubmVjdG9yX2lkX3B0cjsKKwlfX3U2NCBlbmNvZGVyX2lkX3B0cjsKKwlfX3UzMiBjb3VudF9mYnM7CisJX191MzIgY291bnRfY3J0Y3M7CisJX191MzIgY291bnRfY29ubmVjdG9yczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBtaW5fd2lkdGgsIG1heF93aWR0aDsKKwlfX3UzMiBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0OwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGMgewotCXVpbnQ2NF90IHNldF9jb25uZWN0b3JzX3B0cjsKLQl1aW50MzJfdCBjb3VudF9jb25uZWN0b3JzOworCV9fdTY0IHNldF9jb25uZWN0b3JzX3B0cjsKKwlfX3UzMiBjb3VudF9jb25uZWN0b3JzOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCAqLwotCXVpbnQzMl90IGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCAqLworCV9fdTMyIGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCiAKLQl1aW50MzJfdCB4LCB5OyAvKio8IFBvc2l0aW9uIG9uIHRoZSBmcmFtZXVmZmVyICovCisJX191MzIgeCwgeTsgLyoqPCBQb3NpdGlvbiBvbiB0aGUgZnJhbWV1ZmZlciAqLwogCi0JdWludDMyX3QgZ2FtbWFfc2l6ZTsKLQl1aW50MzJfdCBtb2RlX3ZhbGlkOworCV9fdTMyIGdhbW1hX3NpemU7CisJX191MzIgbW9kZV92YWxpZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTEyNiwxMyArMTIzLDEzIEBACiAjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMJNAogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2VuY29kZXIgewotCXVpbnQzMl90IGVuY29kZXJfaWQ7Ci0JdWludDMyX3QgZW5jb2Rlcl90eXBlOworCV9fdTMyIGVuY29kZXJfaWQ7CisJX191MzIgZW5jb2Rlcl90eXBlOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCiAKLQl1aW50MzJfdCBwb3NzaWJsZV9jcnRjczsKLQl1aW50MzJfdCBwb3NzaWJsZV9jbG9uZXM7CisJX191MzIgcG9zc2libGVfY3J0Y3M7CisJX191MzIgcG9zc2libGVfY2xvbmVzOwogfTsKIAogLyogVGhpcyBpcyBmb3IgY29ubmVjdG9ycyB3aXRoIG11bHRpcGxlIHNpZ25hbCB0eXBlcy4gKi8KQEAgLTE2MSwyMyArMTU4LDIzIEBACiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIHsKIAotCXVpbnQ2NF90IGVuY29kZXJzX3B0cjsKLQl1aW50NjRfdCBtb2Rlc19wdHI7Ci0JdWludDY0X3QgcHJvcHNfcHRyOwotCXVpbnQ2NF90IHByb3BfdmFsdWVzX3B0cjsKKwlfX3U2NCBlbmNvZGVyc19wdHI7CisJX191NjQgbW9kZXNfcHRyOworCV9fdTY0IHByb3BzX3B0cjsKKwlfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CiAKLQl1aW50MzJfdCBjb3VudF9tb2RlczsKLQl1aW50MzJfdCBjb3VudF9wcm9wczsKLQl1aW50MzJfdCBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBjb3VudF9tb2RlczsKKwlfX3UzMiBjb3VudF9wcm9wczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKIAotCXVpbnQzMl90IGVuY29kZXJfaWQ7IC8qKjwgQ3VycmVudCBFbmNvZGVyICovCi0JdWludDMyX3QgY29ubmVjdG9yX2lkOyAvKio8IElkICovCi0JdWludDMyX3QgY29ubmVjdG9yX3R5cGU7Ci0JdWludDMyX3QgY29ubmVjdG9yX3R5cGVfaWQ7CisJX191MzIgZW5jb2Rlcl9pZDsgLyoqPCBDdXJyZW50IEVuY29kZXIgKi8KKwlfX3UzMiBjb25uZWN0b3JfaWQ7IC8qKjwgSWQgKi8KKwlfX3UzMiBjb25uZWN0b3JfdHlwZTsKKwlfX3UzMiBjb25uZWN0b3JfdHlwZV9pZDsKIAotCXVpbnQzMl90IGNvbm5lY3Rpb247Ci0JdWludDMyX3QgbW1fd2lkdGgsIG1tX2hlaWdodDsgLyoqPCBIeFcgaW4gbWlsbGltZXRlcnMgKi8KLQl1aW50MzJfdCBzdWJwaXhlbDsKKwlfX3UzMiBjb25uZWN0aW9uOworCV9fdTMyIG1tX3dpZHRoLCBtbV9oZWlnaHQ7IC8qKjwgSHhXIGluIG1pbGxpbWV0ZXJzICovCisJX191MzIgc3VicGl4ZWw7CiB9OwogCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfUEVORElORwkoMTw8MCkKQEAgLTE4Nyw0NiArMTg0LDQ2IEBACiAjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQgkoMTw8NCkKIAogc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gewotCXVpbnQ2NF90IHZhbHVlOworCV9fdTY0IHZhbHVlOwogCWNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5IHsKLQl1aW50NjRfdCB2YWx1ZXNfcHRyOyAvKiB2YWx1ZXMgYW5kIGJsb2IgbGVuZ3RocyAqLwotCXVpbnQ2NF90IGVudW1fYmxvYl9wdHI7IC8qIGVudW0gYW5kIGJsb2IgaWQgcHRycyAqLworCV9fdTY0IHZhbHVlc19wdHI7IC8qIHZhbHVlcyBhbmQgYmxvYiBsZW5ndGhzICovCisJX191NjQgZW51bV9ibG9iX3B0cjsgLyogZW51bSBhbmQgYmxvYiBpZCBwdHJzICovCiAKLQl1aW50MzJfdCBwcm9wX2lkOwotCXVpbnQzMl90IGZsYWdzOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgZmxhZ3M7CiAJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKIAotCXVpbnQzMl90IGNvdW50X3ZhbHVlczsKLQl1aW50MzJfdCBjb3VudF9lbnVtX2Jsb2JzOworCV9fdTMyIGNvdW50X3ZhbHVlczsKKwlfX3UzMiBjb3VudF9lbnVtX2Jsb2JzOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgewotCXVpbnQ2NF90IHZhbHVlOwotCXVpbnQzMl90IHByb3BfaWQ7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTY0IHZhbHVlOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgY29ubmVjdG9yX2lkOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIHsKLQl1aW50MzJfdCBibG9iX2lkOwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50NjRfdCBkYXRhOworCV9fdTMyIGJsb2JfaWQ7CisJX191MzIgbGVuZ3RoOworCV9fdTY0IGRhdGE7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIHsKLQl1aW50MzJfdCBmYl9pZDsKLQl1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OwotCXVpbnQzMl90IHBpdGNoOwotCXVpbnQzMl90IGJwcDsKLQl1aW50MzJfdCBkZXB0aDsKKwlfX3UzMiBmYl9pZDsKKwlfX3UzMiB3aWR0aCwgaGVpZ2h0OworCV9fdTMyIHBpdGNoOworCV9fdTMyIGJwcDsKKwlfX3UzMiBkZXB0aDsKIAkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCB7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTMyIGNvbm5lY3Rvcl9pZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTI0OCwyNCArMjQ1LDI0IEBACiAgKiAgICB5CiAgKi8KIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IgewotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IGNydGNfaWQ7Ci0JaW50MzJfdCB4OwotCWludDMyX3QgeTsKLQl1aW50MzJfdCB3aWR0aDsKLQl1aW50MzJfdCBoZWlnaHQ7CisJX191MzIgZmxhZ3M7CisJX191MzIgY3J0Y19pZDsKKwlfX3MzMiB4OworCV9fczMyIHk7CisJX191MzIgd2lkdGg7CisJX191MzIgaGVpZ2h0OwogCS8qIGRyaXZlciBzcGVjaWZpYyBoYW5kbGUgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IHsKLQl1aW50MzJfdCBjcnRjX2lkOwotCXVpbnQzMl90IGdhbW1hX3NpemU7CisJX191MzIgY3J0Y19pZDsKKwlfX3UzMiBnYW1tYV9zaXplOwogCiAJLyogcG9pbnRlcnMgdG8gYXJyYXlzICovCi0JdWludDY0X3QgcmVkOwotCXVpbnQ2NF90IGdyZWVuOwotCXVpbnQ2NF90IGJsdWU7CisJX191NjQgcmVkOworCV9fdTY0IGdyZWVuOworCV9fdTY0IGJsdWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDkxMmNkNTIuLjY3ZTMzNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMzAsNyArMzAsNyBAQAogLyogUGxlYXNlIG5vdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIGFsbCBzdHJ1Y3RzIGRlZmluZWQgaGVyZSBhcmUKICAqIHN1YmplY3QgdG8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgY29uc3RyYWludHMuCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiZHJtLmgiCiAKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KQEAgLTExNiwxNSArMTE2LDE1IEBACiAKIAkvKiBmaWxsIG91dCBzb21lIHNwYWNlIGZvciBvbGQgdXNlcnNwYWNlIHRyaXBsZSBidWZmZXIgKi8KIAlkcm1faGFuZGxlX3QgdW51c2VkX2hhbmRsZTsKLQl1aW50MzJfdCB1bnVzZWQxLCB1bnVzZWQyLCB1bnVzZWQzOworCV9fdTMyIHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CiAKIAkvKiBidWZmZXIgb2JqZWN0IGhhbmRsZXMgZm9yIHN0YXRpYyBidWZmZXJzLiBNYXkgY2hhbmdlCiAJICogb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNsaWVudC4KIAkgKi8KLQl1aW50MzJfdCBmcm9udF9ib19oYW5kbGU7Ci0JdWludDMyX3QgYmFja19ib19oYW5kbGU7Ci0JdWludDMyX3QgdW51c2VkX2JvX2hhbmRsZTsKLQl1aW50MzJfdCBkZXB0aF9ib19oYW5kbGU7CisJX191MzIgZnJvbnRfYm9faGFuZGxlOworCV9fdTMyIGJhY2tfYm9faGFuZGxlOworCV9fdTMyIHVudXNlZF9ib19oYW5kbGU7CisJX191MzIgZGVwdGhfYm9faGFuZGxlOwogCiB9IGRybV9pOTE1X3NhcmVhX3Q7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogfSBkcm1faTkxNV92Ymxhbmtfc3dhcF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9od3NfYWRkciB7Ci0JdWludDY0X3QgYWRkcjsKKwlfX3U2NCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgewpAQCAtMzM1LDEyICszMzUsMTIgQEAKIAkgKiBCZWdpbm5pbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X3N0YXJ0OworCV9fdTY0IGd0dF9zdGFydDsKIAkvKioKIAkgKiBFbmRpbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X2VuZDsKKwlfX3U2NCBndHRfZW5kOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgewpAQCAtMzQ5LDk0ICszNDksOTQgQEAKIAkgKgogCSAqIFRoZSAocGFnZS1hbGlnbmVkKSBhbGxvY2F0ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdCB3aWxsIGJlIHJldHVybmVkLgogCSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCiAJICoKIAkgKiBPYmplY3QgaGFuZGxlcyBhcmUgbm9uemVyby4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHJlYWQgZnJvbSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byB3cml0ZSB0aGUgZGF0YSBpbnRvLgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBkYXRhX3B0cjsKKwlfX3U2NCBkYXRhX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHdyaXR0ZW4gdG8uICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHdyaXRlIHRvICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAkvKiogTGVuZ3RoIG9mIGRhdGEgdG8gd3JpdGUgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byByZWFkIHRoZSBkYXRhIGZyb20uCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGRhdGFfcHRyOworCV9fdTY0IGRhdGFfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCS8qKgogCSAqIExlbmd0aCBvZiBkYXRhIHRvIG1hcC4KIAkgKgogCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIHBhZ2UtYWxpZ25lZC4KIAkgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBhZGRyX3B0cjsKKwlfX3U2NCBhZGRyX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKioKIAkgKiBGYWtlIG9mZnNldCB0byB1c2UgZm9yIHN1YnNlcXVlbnQgbW1hcCBjYWxsCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4gewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE5ldyByZWFkIGRvbWFpbnMgKi8KLQl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisJX191MzIgcmVhZF9kb21haW5zOwogCiAJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHsKQEAgLTQ0OCwxNiArNDQ4LDE2IEBACiAJICogYSByZWxvY2F0aW9uIGxpc3QgZm9yIHN0YXRlIGJ1ZmZlcnMgYW5kIG5vdCByZS13cml0ZSBpdCBwZXIKIAkgKiBleGVjIHVzaW5nIHRoZSBidWZmZXIuCiAJICovCi0JdWludDMyX3QgdGFyZ2V0X2hhbmRsZTsKKwlfX3UzMiB0YXJnZXRfaGFuZGxlOwogCiAJLyoqCiAJICogVmFsdWUgdG8gYmUgYWRkZWQgdG8gdGhlIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0byBtYWtlIHVwCiAJICogdGhlIHJlbG9jYXRpb24gZW50cnkuCiAJICovCi0JdWludDMyX3QgZGVsdGE7CisJX191MzIgZGVsdGE7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBidWZmZXIgdGhlIHJlbG9jYXRpb24gZW50cnkgd2lsbCBiZSB3cml0dGVuIGludG8gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCiAJLyoqCiAJICogT2Zmc2V0IHZhbHVlIG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRoYXQgdGhlIHJlbG9jYXRpb24gZW50cnkgd2FzIGxhc3QKQEAgLTQ2NywxMiArNDY3LDEyIEBACiAJICogYW5kIHdyaXRpbmcgdGhlIHJlbG9jYXRpb24uICBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gYmFjayBvdXQgYnkKIAkgKiB0aGUgZXhlY2J1ZmZlciBpb2N0bCB3aGVuIHRoZSByZWxvY2F0aW9uIGlzIHdyaXR0ZW4uCiAJICovCi0JdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0OworCV9fdTY0IHByZXN1bWVkX29mZnNldDsKIAogCS8qKgogCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyByZWFkIGJ5IHRoaXMgb3BlcmF0aW9uLgogCSAqLwotCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwlfX3UzMiByZWFkX2RvbWFpbnM7CiAKIAkvKioKIAkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KQEAgLTQ4MSw3ICs0ODEsNyBAQAogCSAqIGV4ZWNidWZmZXIgb3BlcmF0aW9uLCBzbyB0aGF0IHdoZXJlIHRoZXJlIGFyZSBjb25mbGljdHMsCiAJICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgZ2V0IC1FSU5WQUwgYmFjay4KIAkgKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogLyoqIEB7CkBAIC01MTIsMjQgKzUxMiwyNCBAQAogCSAqIFVzZXIncyBoYW5kbGUgZm9yIGEgYnVmZmVyIHRvIGJlIGJvdW5kIGludG8gdGhlIEdUVCBmb3IgdGhpcwogCSAqIG9wZXJhdGlvbi4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE51bWJlciBvZiByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBidWZmZXIgKi8KLQl1aW50MzJfdCByZWxvY2F0aW9uX2NvdW50OworCV9fdTMyIHJlbG9jYXRpb25fY291bnQ7CiAJLyoqCiAJICogUG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgY29udGFpbmluZwogCSAqIHRoZSByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgaW4gdGhpcyBidWZmZXIuCiAJICovCi0JdWludDY0X3QgcmVsb2NzX3B0cjsKKwlfX3U2NCByZWxvY3NfcHRyOwogCiAJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKioKIAkgKiBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgdXBkYXRlZCBvZmZzZXQgb2YgdGhlIG9iamVjdCwgZm9yIGZ1dHVyZQogCSAqIHByZXN1bWVkX29mZnNldCB3cml0ZXMuCiAJICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciB7CkBAIC01NDMsNDQgKzU0Myw0NCBAQAogCSAqIGEgYnVmZmVyIGlzIHBlcmZvcm1pbmcgcmVmZXIgdG8gYnVmZmVycyB0aGF0IGhhdmUgYWxyZWFkeSBhcHBlYXJlZAogCSAqIGluIHRoZSB2YWxpZGF0ZSBsaXN0LgogCSAqLwotCXVpbnQ2NF90IGJ1ZmZlcnNfcHRyOwotCXVpbnQzMl90IGJ1ZmZlcl9jb3VudDsKKwlfX3U2NCBidWZmZXJzX3B0cjsKKwlfX3UzMiBidWZmZXJfY291bnQ7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KLQl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJX191MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OwogCS8qKiBCeXRlcyB1c2VkIGluIGJhdGNoYnVmZmVyIGZyb20gYmF0Y2hfc3RhcnRfb2Zmc2V0ICovCi0JdWludDMyX3QgYmF0Y2hfbGVuOwotCXVpbnQzMl90IERSMTsKLQl1aW50MzJfdCBEUjQ7Ci0JdWludDMyX3QgbnVtX2NsaXByZWN0czsKKwlfX3UzMiBiYXRjaF9sZW47CisJX191MzIgRFIxOworCV9fdTMyIERSNDsKKwlfX3UzMiBudW1fY2xpcHJlY3RzOwogCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLwotCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7CisJX191NjQgY2xpcHJlY3RzX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgcGlubmVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAogCS8qKiBhbGlnbm1lbnQgcmVxdWlyZWQgd2l0aGluIHRoZSBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKiogUmV0dXJuZWQgR1RUIG9mZnNldCBvZiB0aGUgYnVmZmVyLiAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9idXN5IHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gY2hlY2sgZm9yIGJ1c3kgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCi0JdWludDMyX3QgYnVzeTsKKwlfX3UzMiBidXN5OwogfTsKIAogI2RlZmluZSBJOTE1X1RJTElOR19OT05FCTAKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBoYXZlIGl0cyB0aWxpbmcgc3RhdGUgdXBkYXRlZCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKQEAgLTYxMSw0NyArNjExLDQ3IEBACiAJICoKIAkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgogCSAqIEk5MTVfVElMSU5HX1kuCiAJICovCi0JdWludDMyX3Qgc3RyaWRlOworCV9fdTMyIHN0cmlkZTsKIAogCS8qKgogCSAqIFJldHVybmVkIGFkZHJlc3MgYml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBDUFUgYWNjZXNzIHRocm91Z2gKIAkgKiBtbWFwIG1hcHBpbmcuCiAJICovCi0JdWludDMyX3Qgc3dpenpsZV9tb2RlOworCV9fdTMyIHN3aXp6bGVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGdldCB0aWxpbmcgc3RhdGUgZm9yLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAogCSAqIEk5MTVfVElMSU5HX1kpLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAogCSAqIG1tYXAgbWFwcGluZy4KIAkgKi8KLQl1aW50MzJfdCBzd2l6emxlX21vZGU7CisJX191MzIgc3dpenpsZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfYXBlcnR1cmUgewogCS8qKiBUb3RhbCBzaXplIG9mIHRoZSBhcGVydHVyZSB1c2VkIGJ5IGk5MTVfZ2VtX2V4ZWNidWZmZXIsIGluIGJ5dGVzICovCi0JdWludDY0X3QgYXBlcl9zaXplOworCV9fdTY0IGFwZXJfc2l6ZTsKIAogCS8qKgogCSAqIEF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgYXBlcnR1cmUgdXNlZCBieSBpOTE1X2dlbV9leGVjYnVmZmVyLCBpbgogCSAqIGJ5dGVzCiAJICovCi0JdWludDY0X3QgYXBlcl9hdmFpbGFibGVfc2l6ZTsKKwlfX3U2NCBhcGVyX2F2YWlsYWJsZV9zaXplOwogfTsKIAogI2VuZGlmCQkJCS8qIF9JOTE1X0RSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oIGIvaW5jbHVkZS9kcm0vbWdhX2RybS5oCmluZGV4IDk0NGI1MGEuLjMyNWZkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL21nYV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKQEAgLTM1LDYgKzM1LDggQEAKICNpZm5kZWYgX19NR0FfRFJNX0hfXwogI2RlZmluZSBfX01HQV9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWHNlcnZlciBmaWxlIChtZ2Ffc2FyZWEuaCkKICAqLwpAQCAtMjU1LDggKzI1Nyw4IEBACiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfSUxPQUQgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfSUxPQUQsIGRybV9tZ2FfaWxvYWRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9CTElUICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9CTElULCBkcm1fbWdhX2JsaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9HRVRQQVJBTSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9HRVRQQVJBTSwgZHJtX21nYV9nZXRwYXJhbV90KQotI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCB1aW50MzJfdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIHVpbnQzMl90KQorI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCBfX3UzMikKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIF9fdTMyKQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfRE1BX0JPT1RTVFJBUCwgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QpCiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fbWdhX3dhcnBfaW5kZXggewpAQCAtMzEwLDcgKzMxMiw3IEBACiAJICovCiAJLypAeyAqLwogCXVuc2lnbmVkIGxvbmcgdGV4dHVyZV9oYW5kbGU7IC8qKjwgSGFuZGxlIHVzZWQgdG8gbWFwIEFHUCB0ZXh0dXJlcy4gKi8KLQl1aW50MzJfdCB0ZXh0dXJlX3NpemU7CSAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgQUdQIHRleHR1cmUgcmVnaW9uLiAqLworCV9fdTMyIHRleHR1cmVfc2l6ZTsJICAgICAgLyoqPCBTaXplIG9mIHRoZSBBR1AgdGV4dHVyZSByZWdpb24uICovCiAJLypAfSAqLwogCiAJLyoqCkBAIC0zMTksNyArMzIxLDcgQEAKIAkgKiBPbiByZXR1cm4gZnJvbSB0aGUgRFJNX01HQV9ETUFfQk9PVFNUUkFQIGlvY3RsLCB0aGlzIGZpZWxkIHdpbGwgYmUKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICovCi0JdWludDMyX3QgcHJpbWFyeV9zaXplOworCV9fdTMyIHByaW1hcnlfc2l6ZTsKIAogCS8qKgogCSAqIFJlcXVlc3RlZCBudW1iZXIgb2Ygc2Vjb25kYXJ5IERNQSBidWZmZXJzLgpAQCAtMzI5LDcgKzMzMSw3IEBACiAJICogYWxsb2NhdGVkLiAgUGFydGljdWxhcmx5IHdoZW4gUENJIERNQSBpcyB1c2VkLCB0aGlzIG1heSBiZQogCSAqIChzdWJ0YW50aWFsbHkpIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX2NvdW50OworCV9fdTMyIHNlY29uZGFyeV9iaW5fY291bnQ7CiAKIAkvKioKIAkgKiBSZXF1ZXN0ZWQgc2l6ZSBvZiBlYWNoIHNlY29uZGFyeSBETUEgYnVmZmVyLgpAQCAtMzM4LDcgKzM0MCw3IEBACiAJICogZG1hX21nYV9kbWFfYm9vdHN0cmFwOjpzZWNvbmRhcnlfYmluX2NvdW50LCBpdCBpcyBcYiBub3QgYWxsb3dlZAogCSAqIHRvIHJlZHVjZSBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fc2l6ZS4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX3NpemU7CisJX191MzIgc2Vjb25kYXJ5X2Jpbl9zaXplOwogCiAJLyoqCiAJICogQml0LXdpc2UgbWFzayBvZiBBR1BTVEFUMl8qIHZhbHVlcy4gIEN1cnJlbnRseSBvbmx5IFxjIEFHUFNUQVQyXzFYLApAQCAtMzUwLDEyICszNTIsMTIgQEAKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICogKGkuZS4sIFBDSSBETUEgd2FzIHVzZWQpLCB0aGlzIHZhbHVlIHdpbGwgYmUgemVyby4KIAkgKi8KLQl1aW50MzJfdCBhZ3BfbW9kZTsKKwlfX3UzMiBhZ3BfbW9kZTsKIAogCS8qKgogCSAqIERlc2lyZWQgQUdQIEdBUlQgc2l6ZSwgbWVhc3VyZWQgaW4gbWVnYWJ5dGVzLgogCSAqLwotCXVpbnQ4X3QgYWdwX3NpemU7CisJX191OCBhZ3Bfc2l6ZTsKIH0gZHJtX21nYV9kbWFfYm9vdHN0cmFwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfY2xlYXIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDczZmY1MWYuLjcyZWNmNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTMzLDYgKzMzLDggQEAKICNpZm5kZWYgX19SQURFT05fRFJNX0hfXwogI2RlZmluZSBfX1JBREVPTl9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWCBzZXJ2ZXIgZmlsZSAocmFkZW9uX3NhcmVhLmgpCiAgKi8KQEAgLTcyMiw3ICs3MjQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3NldHBhcmFtIHsKIAl1bnNpZ25lZCBpbnQgcGFyYW07Ci0JaW50NjRfdCB2YWx1ZTsKKwlfX3M2NCB2YWx1ZTsKIH0gZHJtX3JhZGVvbl9zZXRwYXJhbV90OwogCiAjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9GQl9MT0NBVElPTiAgICAxCS8qIGRldGVybWluZWQgZnJhbWVidWZmZXIgbG9jYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaCBiL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaAppbmRleCBhM2I1YzEwLi4xNzA3ODZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS92aWFfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vdmlhX2RybS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIF9WSUFfRFJNX0hfCiAjZGVmaW5lIF9WSUFfRFJNX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBUaGVzZSBkZWZpbmVzIG11c3QgYmUgdGhlIHNhbWUgYXMgd2hhdCB0aGUgWHNlcnZlciB1c2VzLgogICogaWYgeW91IGNoYW5nZSB0aGVtLCB5b3UgbXVzdCBjaGFuZ2UgdGhlIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIuCiAgKi8KQEAgLTExNCwxOSArMTE2LDE5IEBACiAjZGVmaW5lIFZJQV9NRU1fVU5LTk9XTiA0CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgc2l6ZTsKIH0gZHJtX3ZpYV9hZ3BfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2ZiX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBjb250ZXh0OwotCXVpbnQzMl90IHR5cGU7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBjb250ZXh0OworCV9fdTMyIHR5cGU7CisJX191MzIgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogfSBkcm1fdmlhX21lbV90OwpAQCAtMTQ4LDkgKzE1MCw5IEBACiAJCVZJQV9GVVRFWF9XQUlUID0gMHgwMCwKIAkJVklBX0ZVVEVYX1dBS0UgPSAwWDAxCiAJfSBmdW5jOwotCXVpbnQzMl90IG1zOwotCXVpbnQzMl90IGxvY2s7Ci0JdWludDMyX3QgdmFsOworCV9fdTMyIG1zOworCV9fdTMyIGxvY2s7CisJX191MzIgdmFsOwogfSBkcm1fdmlhX2Z1dGV4X3Q7CiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fdmlhX2RtYV9pbml0IHsKQEAgLTIxMSw3ICsyMTMsNyBAQAogCQlWSUFfQ01EQlVGX0xBRyA9IDB4MDIKIAl9IGZ1bmM7CiAJaW50IHdhaXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2NtZGJ1Zl9zaXplX3Q7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0yMzYsOCArMjM4LDggQEAKIHN0cnVjdCBkcm1fdmlhX3dhaXRfaXJxX3JlcXVlc3QgewogCXVuc2lnbmVkIGlycTsKIAl2aWFfaXJxX3NlcV90eXBlX3QgdHlwZTsKLQl1aW50MzJfdCBzZXF1ZW5jZTsKLQl1aW50MzJfdCBzaWduYWw7CisJX191MzIgc2VxdWVuY2U7CisJX191MzIgc2lnbmFsOwogfTsKIAogdHlwZWRlZiB1bmlvbiBkcm1fdmlhX2lycXdhaXQgewpAQCAtMjQ2LDcgKzI0OCw3IEBACiB9IGRybV92aWFfaXJxd2FpdF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX2JsaXRzeW5jIHsKLQl1aW50MzJfdCBzeW5jX2hhbmRsZTsKKwlfX3UzMiBzeW5jX2hhbmRsZTsKIAl1bnNpZ25lZCBlbmdpbmU7CiB9IGRybV92aWFfYmxpdHN5bmNfdDsKIApAQCAtMjU3LDE2ICsyNTksMTYgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX2RtYWJsaXQgewotCXVpbnQzMl90IG51bV9saW5lczsKLQl1aW50MzJfdCBsaW5lX2xlbmd0aDsKKwlfX3UzMiBudW1fbGluZXM7CisJX191MzIgbGluZV9sZW5ndGg7CiAKLQl1aW50MzJfdCBmYl9hZGRyOwotCXVpbnQzMl90IGZiX3N0cmlkZTsKKwlfX3UzMiBmYl9hZGRyOworCV9fdTMyIGZiX3N0cmlkZTsKIAogCXVuc2lnbmVkIGNoYXIgKm1lbV9hZGRyOwotCXVpbnQzMl90IG1lbV9zdHJpZGU7CisJX191MzIgbWVtX3N0cmlkZTsKIAotCXVpbnQzMl90IGZsYWdzOworCV9fdTMyIGZsYWdzOwogCWludCB0b19mYjsKIAogCWRybV92aWFfYmxpdHN5bmNfdCBzeW5jOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBiOTdjZGM1Li5lOTU4MWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtNTIsNiArNTIsNyBAQAogaGVhZGVyLXkgKz0gY2dyb3Vwc3RhdHMuaAogaGVhZGVyLXkgKz0gY3JhbWZzX2ZzLmgKIGhlYWRlci15ICs9IGN5Y3hfY2ZtLmgKK2hlYWRlci15ICs9IGRjYm5sLmgKIGhlYWRlci15ICs9IGRsbWNvbnN0YW50cy5oCiBoZWFkZXIteSArPSBkbG1fZGV2aWNlLmgKIGhlYWRlci15ICs9IGRsbV9uZXRsaW5rLmgKQEAgLTExNCw2ICsxMTUsNyBAQAogaGVhZGVyLXkgKz0gbXRpby5oCiBoZWFkZXIteSArPSBuY3Bfbm8uaAogaGVhZGVyLXkgKz0gbmVpZ2hib3VyLmgKK2hlYWRlci15ICs9IG5ldF9kcm9wbW9uLmgKIGhlYWRlci15ICs9IG5ldGZpbHRlcl9hcnAuaAogaGVhZGVyLXkgKz0gbmV0cm9tLmgKIGhlYWRlci15ICs9IG5mczIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmggYi9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaAppbmRleCAxMTBjNjAwLi5mNjc3OGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaApAQCAtNzcsMjAgKzc3LDIwIEBACiAgKiBUaGUgInByb3QiIGRvd24gYmVsb3cgbmVlZHMgc3RpbGwgYSAic2xlZXAiIGZsYWcgc29tZWhvdyAuLi4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgX2FncF9zZWdtZW50IHsKLQlvZmZfdCBwZ19zdGFydDsJCS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KLQlzaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KLQlpbnQgcHJvdDsJCS8qIHByb3QgZmxhZ3MgZm9yIG1tYXAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9vZmZfdCBwZ19zdGFydDsJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLworCV9fa2VybmVsX3NpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLworCWludCBwcm90OwkJCS8qIHByb3QgZmxhZ3MgZm9yIG1tYXAgICAgICAgICAgKi8KIH0gYWdwX3NlZ21lbnQ7CiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfcmVnaW9uIHsKLQlwaWRfdCBwaWQ7CQkvKiBwaWQgb2YgcHJvY2VzcyAgICAgICAgICAgICAgICovCi0Jc2l6ZV90IHNlZ19jb3VudDsJLyogbnVtYmVyIG9mIHNlZ21lbnRzICAgICAgICAgICAqLworCV9fa2VybmVsX3BpZF90IHBpZDsJCS8qIHBpZCBvZiBwcm9jZXNzICAgICAgICovCisJX19rZXJuZWxfc2l6ZV90IHNlZ19jb3VudDsJLyogbnVtYmVyIG9mIHNlZ21lbnRzICAgKi8KIAlzdHJ1Y3QgX2FncF9zZWdtZW50ICpzZWdfbGlzdDsKIH0gYWdwX3JlZ2lvbjsKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9hbGxvY2F0ZSB7CiAJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KLQlzaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9zaXplX3QgcGdfY291bnQ7LyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICovCiAJX191MzIgdHlwZTsJCS8qIDAgPT0gbm9ybWFsLCBvdGhlciBkZXZzcGVjICAgKi8KICAgIAlfX3UzMiBwaHlzaWNhbDsgICAgICAgICAvKiBkZXZpY2Ugc3BlY2lmaWMgKHNvbWUgZGV2aWNlcyAgCiAJCQkJICogbmVlZCBhIHBoeXMgYWRkcmVzcyBvZiB0aGUgICAgIApAQCAtMTAwLDcgKzEwMCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfYmluZCB7CiAJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KLQlvZmZfdCBwZ19zdGFydDsJCS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KKwlfX2tlcm5lbF9vZmZfdCBwZ19zdGFydDsvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCiB9IGFncF9iaW5kOwogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX3VuYmluZCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0YS5oIGIvaW5jbHVkZS9saW51eC9hdGEuaAppbmRleCAwOGE4NmQ1Li42NjE3YzlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRhLmgKQEAgLTg5LDYgKzg5LDggQEAKIAlBVEFfSURfRExGCQk9IDEyOCwKIAlBVEFfSURfQ1NGTwkJPSAxMjksCiAJQVRBX0lEX0NGQV9QT1dFUgk9IDE2MCwKKwlBVEFfSURfQ0ZBX0tFWV9NR01UCT0gMTYyLAorCUFUQV9JRF9DRkFfTU9ERVMJPSAxNjMsCiAJQVRBX0lEX1JPVF9TUEVFRAk9IDIxNywKIAlBVEFfSURfUElPNAkJPSAoMSA8PCAxKSwKIApAQCAtMTA2LDYgKzEwOCw4IEBACiAJQVRBX1BJTzUJCT0gQVRBX1BJTzQgfCAoMSA8PCA1KSwKIAlBVEFfUElPNgkJPSBBVEFfUElPNSB8ICgxIDw8IDYpLAogCisJQVRBX1BJTzRfT05MWQkJPSAoMSA8PCA0KSwKKwogCUFUQV9TV0RNQTAJCT0gKDEgPDwgMCksCiAJQVRBX1NXRE1BMQkJPSBBVEFfU1dETUEwIHwgKDEgPDwgMSksCiAJQVRBX1NXRE1BMgkJPSBBVEFfU1dETUExIHwgKDEgPDwgMiksCkBAIC0xMTUsNiArMTE5LDggQEAKIAlBVEFfTVdETUEwCQk9ICgxIDw8IDApLAogCUFUQV9NV0RNQTEJCT0gQVRBX01XRE1BMCB8ICgxIDw8IDEpLAogCUFUQV9NV0RNQTIJCT0gQVRBX01XRE1BMSB8ICgxIDw8IDIpLAorCUFUQV9NV0RNQTMJCT0gQVRBX01XRE1BMiB8ICgxIDw8IDMpLAorCUFUQV9NV0RNQTQJCT0gQVRBX01XRE1BMyB8ICgxIDw8IDQpLAogCiAJQVRBX01XRE1BMTJfT05MWQk9ICgxIDw8IDEpIHwgKDEgPDwgMiksCiAJQVRBX01XRE1BMl9PTkxZCQk9ICgxIDw8IDIpLApAQCAtMTI5LDYgKzEzNSw4IEBACiAJQVRBX1VETUE3CQk9IEFUQV9VRE1BNiB8ICgxIDw8IDcpLAogCS8qIEFUQV9VRE1BNyBpcyBqdXN0IGZvciBjb21wbGV0ZW5lc3MuLi4gZG9lc24ndCBleGlzdCAoeWV0PykuICAqLwogCisJQVRBX1VETUEyNF9PTkxZCQk9ICgxIDw8IDIpIHwgKDEgPDwgNCksCisKIAlBVEFfVURNQV9NQVNLXzQwQwk9IEFUQV9VRE1BMiwJLyogdWRtYTAtMiAqLwogCiAJLyogRE1BLXJlbGF0ZWQgKi8KQEAgLTI0Miw4ICsyNTAsNiBAQAogCUFUQV9DTURfTUVESUFfVU5MT0NLCT0gMHhERiwKIAkvKiBtYXJrZWQgb2Jzb2xldGUgaW4gdGhlIEFUQS9BVEFQSS03IHNwZWMgKi8KIAlBVEFfQ01EX1JFU1RPUkUJCT0gMHgxMCwKLQkvKiBFWEFCWVRFIHNwZWNpZmljICovCi0JQVRBX0VYQUJZVEVfRU5BQkxFX05FU1QJPSAweEYwLAogCiAJLyogUkVBRF9MT0dfRVhUIHBhZ2VzICovCiAJQVRBX0xPR19TQVRBX05DUQk9IDB4MTAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oIGIvaW5jbHVkZS9saW51eC9hdG1sZWMuaAppbmRleCA2ZjVhMWJhYi4uMzljOTE3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1sZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBBVE0gbGVjIGRhZW1vbiBjb250cm9sIHNvY2tldCAqLwogI2RlZmluZSBBVE1MRUNfQ1RSTAlfSU8oJ2EnLCBBVE1JT0NfTEFORSkKQEAgLTc4LDggKzc5LDggQEAKIAkJfSBub3JtYWw7CiAJCXN0cnVjdCBhdG1sZWNfY29uZmlnX21zZyBjb25maWc7CiAJCXN0cnVjdCB7Ci0JCQl1aW50MTZfdCBsZWNfaWQ7CQkJLyogcmVxdWVzdG9yIGxlY19pZCAgKi8KLQkJCXVpbnQzMl90IHRyYW5faWQ7CQkJLyogdHJhbnNhY3Rpb24gaWQgICAgKi8KKwkJCV9fdTE2IGxlY19pZDsJCQkJLyogcmVxdWVzdG9yIGxlY19pZCAgKi8KKwkJCV9fdTMyIHRyYW5faWQ7CQkJCS8qIHRyYW5zYWN0aW9uIGlkICAgICovCiAJCQl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsJLyogZHN0IG1hYyBhZGRyICAgICAgKi8KIAkJCXVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOwkvKiByZXFlc3RvciBBVE0gYWRkciAqLwogCQl9IHByb3h5OwkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaCBiL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKaW5kZXggZWExNjUwNC4uMmFiYTU3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQVRNTVBDX0NUUkwgX0lPKCdhJywgQVRNSU9DX01QT0EpCiAjZGVmaW5lIEFUTU1QQ19EQVRBIF9JTygnYScsIEFUTUlPQ19NUE9BKzEpCkBAIC0xOCwzOSArMTksMzkgQEAKIH07CiAKIHR5cGVkZWYgc3RydWN0IGluX2N0cmxfaW5mbyB7Ci0gICAgICAgIHVpbnQ4X3QgICBMYXN0X05IUlBfQ0lFX2NvZGU7Ci0gICAgICAgIHVpbnQ4X3QgICBMYXN0X1EyOTMxX2NhdXNlX3ZhbHVlOyAgICAgCi0gICAgICAgIHVpbnQ4X3QgICBlZ19NUENfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3U4ICAgTGFzdF9OSFJQX0NJRV9jb2RlOworICAgICAgICBfX3U4ICAgTGFzdF9RMjkzMV9jYXVzZV92YWx1ZTsKKyAgICAgICAgX191OCAgIGVnX01QQ19BVE1fYWRkcltBVE1fRVNBX0xFTl07CiAgICAgICAgIF9fYmUzMiAgdGFnOwogICAgICAgICBfX2JlMzIgIGluX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRoaXMgaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyB0byAqLwotICAgICAgICB1aW50MTZfdCAgaG9sZGluZ190aW1lOwotICAgICAgICB1aW50MzJfdCAgcmVxdWVzdF9pZDsKKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKKyAgICAgICAgX191MzIgIHJlcXVlc3RfaWQ7CiB9IGluX2N0cmxfaW5mbzsKIAogdHlwZWRlZiBzdHJ1Y3QgZWdfY3RybF9pbmZvIHsKLSAgICAgICAgdWludDhfdCAgIERMTF9oZWFkZXJbMjU2XTsKLSAgICAgICAgdWludDhfdCAgIERIX2xlbmd0aDsKKyAgICAgICAgX191OCAgIERMTF9oZWFkZXJbMjU2XTsKKyAgICAgICAgX191OCAgIERIX2xlbmd0aDsKICAgICAgICAgX19iZTMyICBjYWNoZV9pZDsKICAgICAgICAgX19iZTMyICB0YWc7CiAgICAgICAgIF9fYmUzMiAgbXBzX2lwOwogICAgICAgICBfX2JlMzIgIGVnX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRvIHdoaWNoIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgKi8KLSAgICAgICAgdWludDhfdCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKLSAgICAgICAgdWludDE2X3QgIGhvbGRpbmdfdGltZTsKKyAgICAgICAgX191OCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKIH0gZWdfY3RybF9pbmZvOwogCiBzdHJ1Y3QgbXBjX3BhcmFtZXRlcnMgewotICAgICAgICB1aW50MTZfdCBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCi0gICAgICAgIHVpbnQ4X3QgbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLyAgICAgIAorICAgICAgICBfX3UxNiBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCisgICAgICAgIF9fdTggbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLwogfSA7CiAKIHN0cnVjdCBrX21lc3NhZ2UgewotICAgICAgICB1aW50MTZfdCB0eXBlOworICAgICAgICBfX3UxNiB0eXBlOwogICAgICAgICBfX2JlMzIgaXBfbWFzazsKLSAgICAgICAgdWludDhfdCAgTVBTX2N0cmxbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3U4ICBNUFNfY3RybFtBVE1fRVNBX0xFTl07CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICBpbl9jdHJsX2luZm8gaW5faW5mbzsKICAgICAgICAgICAgICAgICBlZ19jdHJsX2luZm8gZWdfaW5mbzsKQEAgLTYxLDExICs2MiwxMSBAQAogCiBzdHJ1Y3QgbGxjX3NuYXBfaGRyIHsKIAkvKiBSRkMgMTQ4MyBMTEMvU05BUCBlbmNhcHN1bGF0aW9uIGZvciByb3V0ZWQgSVAgUERVcyAqLwotICAgICAgICB1aW50OF90ICBkc2FwOyAgICAvKiBEZXN0aW5hdGlvbiBTZXJ2aWNlIEFjY2VzcyBQb2ludCAoMHhBQSkgICAgICovCi0gICAgICAgIHVpbnQ4X3QgIHNzYXA7ICAgIC8qIFNvdXJjZSBTZXJ2aWNlIEFjY2VzcyBQb2ludCAgICAgICgweEFBKSAgICAgKi8KLSAgICAgICAgdWludDhfdCAgdWk7ICAgICAgLyogVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAgICAgICAgICAgKDB4MDMpICAgICAqLwotICAgICAgICB1aW50OF90ICBvcmdbM107ICAvKiBPcmdhbml6YXRpb25hbCBpZGVudGlmaWNhdGlvbiAgICAoMHgwMDAwMDApICovCi0gICAgICAgIHVpbnQ4X3QgIHR5cGVbMl07IC8qIEV0aGVyIHR5cGUgKGZvciBJUCkgICAgICAgICAgICAgICgweDA4MDApICAgKi8KKyAgICAgICAgX191OCAgZHNhcDsgICAgLyogRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQgKDB4QUEpICAgICAqLworICAgICAgICBfX3U4ICBzc2FwOyAgICAvKiBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQgICAgICAoMHhBQSkgICAgICovCisgICAgICAgIF9fdTggIHVpOyAgICAgIC8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gICAgICAgICAgICgweDAzKSAgICAgKi8KKyAgICAgICAgX191OCAgb3JnWzNdOyAgLyogT3JnYW5pemF0aW9uYWwgaWRlbnRpZmljYXRpb24gICAgKDB4MDAwMDAwKSAqLworICAgICAgICBfX3U4ICB0eXBlWzJdOyAvKiBFdGhlciB0eXBlIChmb3IgSVApICAgICAgICAgICAgICAoMHgwODAwKSAgICovCiB9OwogCiAvKiBUTFZzIHRoaXMgTVBDIHJlY29nbml6ZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCA2N2U1ZGJmLi40ZmEyODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0zNiw3ICszNiw4IEBACiAgKiAxNTAwIC0gMTU5OSBrZXJuZWwgTFNQUCBldmVudHMKICAqIDE2MDAgLSAxNjk5IGtlcm5lbCBjcnlwdG8gZXZlbnRzCiAgKiAxNzAwIC0gMTc5OSBrZXJuZWwgYW5vbWFseSByZWNvcmRzCi0gKiAxODAwIC0gMTk5OSBmdXR1cmUga2VybmVsIHVzZSAobWF5YmUgaW50ZWdyaXR5IGxhYmVscyBhbmQgcmVsYXRlZCBldmVudHMpCisgKiAxODAwIC0gMTg5OSBrZXJuZWwgaW50ZWdyaXR5IGV2ZW50cworICogMTkwMCAtIDE5OTkgZnV0dXJlIGtlcm5lbCB1c2UKICAqIDIwMDAgaXMgZm9yIG90aGVyd2lzZSB1bmNsYXNzaWZpZWQga2VybmVsIGF1ZGl0IG1lc3NhZ2VzIChsZWdhY3kpCiAgKiAyMDAxIC0gMjA5OSB1bnVzZWQgKGtlcm5lbCkKICAqIDIxMDAgLSAyMTk5IHVzZXIgc3BhY2UgYW5vbWFseSByZWNvcmRzCkBAIC0xMjUsNiArMTI2LDEyIEBACiAjZGVmaW5lIEFVRElUX0xBU1RfS0VSTl9BTk9NX01TRyAgICAxNzk5CiAjZGVmaW5lIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgICAgICAxNzAwIC8qIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUgKi8KICNkZWZpbmUgQVVESVRfQU5PTV9BQkVORCAgICAgICAgICAgIDE3MDEgLyogUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5ICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9EQVRBCSAgICAxODAwIC8qIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgICAgMTgwMSAvKiBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9TVEFUVVMJICAgIDE4MDIgLyogSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0hBU0gJICAgIDE4MDMgLyogSW50ZWdyaXR5IEhBU0ggdHlwZSAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUENSCSAgICAxODA0IC8qIFBDUiBpbnZhbGlkYXRpb24gbXNncyAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUlVMRQkgICAgMTgwNSAvKiBwb2xpY3kgcnVsZSAqLwogCiAjZGVmaW5lIEFVRElUX0tFUk5FTAkJMjAwMAkvKiBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCAyYWEyODNhLi5iMDViMWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTE3MSw4ICsxNzEsNiBAQAogI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUCTgKICNkZWZpbmUgQklPX1JXX0ZBSUxGQVNUX0RSSVZFUgkJOQogCi0jZGVmaW5lIEJJT19SV19TWU5DCShCSU9fUldfU1lOQ0lPIHwgQklPX1JXX1VOUExVRykKLQogI2RlZmluZSBiaW9fcndfZmxhZ2dlZChiaW8sIGZsYWcpCSgoYmlvKS0+YmlfcncgJiAoMSA8PCAoZmxhZykpKQogCiAvKgpAQCAtNDI4LDkgKzQyNiw2IEBACiAJdW5zaWduZWQgaW50IGZyb250X3BhZDsKIAogCW1lbXBvb2xfdCAqYmlvX3Bvb2w7Ci0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCi0JbWVtcG9vbF90ICpiaW9faW50ZWdyaXR5X3Bvb2w7Ci0jZW5kaWYKIAltZW1wb29sX3QgKmJ2ZWNfcG9vbDsKIH07CiAKQEAgLTUyMSw5ICs1MTYsOCBAQAogCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHkoYmlvKSAoYmlvLT5iaV9pbnRlZ3JpdHkgIT0gTlVMTCkKIAotZXh0ZXJuIHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KHN0cnVjdCBiaW8gKiwgZ2ZwX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IGJpb19zZXQgKik7CiBleHRlcm4gc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvYyhzdHJ1Y3QgYmlvICosIGdmcF90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb19zZXQgKik7CitleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqKTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9hZGRfcGFnZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9lbmFibGVkKHN0cnVjdCBiaW8gKmJpbyk7CiBleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfc2V0X3RhZyhzdHJ1Y3QgYmlvICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKQEAgLTUzMywyNyArNTI3LDIxIEBACiBleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2FkdmFuY2Uoc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV90cmltKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9zcGxpdChzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fcGFpciAqLCBpbnQpOwotZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2Nsb25lKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvX3NldCAqKTsKLWV4dGVybiBpbnQgYmlvc2V0X2ludGVncml0eV9jcmVhdGUoc3RydWN0IGJpb19zZXQgKiwgaW50KTsKLWV4dGVybiB2b2lkIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvX3NldCAqKTsKLWV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKHZvaWQpOworZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2Nsb25lKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpbyAqLCBnZnBfdCk7CiAKICNlbHNlIC8qIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSAqLwogCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHkoYSkJCSgwKQotI2RlZmluZSBiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShhLCBiKQkoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9wcmVwKGEpCQkoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9lbmFibGVkKGEpCSgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2Nsb25lKGEsIGIsIGMpCSgwKQotI2RlZmluZSBiaW9zZXRfaW50ZWdyaXR5X2ZyZWUoYSkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBiaW9faW50ZWdyaXR5X2ZyZWUoYSwgYikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBiaW9faW50ZWdyaXR5X2ZyZWUoYSkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9lbmRpbyhhLCBiKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfYWR2YW5jZShhLCBiKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfdHJpbShhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfc3BsaXQoYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3NldF90YWcoYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2dldF90YWcoYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBiaW9faW50ZWdyaXR5X2luaXRfc2xhYihhKQlkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggZGNhYTBmZC4uNDY1ZDZiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC03MDgsNiArNzA4LDggQEAKIH07CiAKIC8qIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5IC0gdXNlIHJxX2Zvcl9lYWNoX3NlZ21lbnQgKi8KKyNkZWZpbmUgZm9yX2VhY2hfYmlvKF9iaW8pCQlcCisJZm9yICg7IF9iaW87IF9iaW8gPSBfYmlvLT5iaV9uZXh0KQogI2RlZmluZSBfX3JxX2Zvcl9lYWNoX2JpbyhfYmlvLCBycSkJXAogCWlmICgocnEtPmJpbykpCQkJXAogCQlmb3IgKF9iaW8gPSAocnEpLT5iaW87IF9iaW87IF9iaW8gPSBfYmlvLT5iaV9uZXh0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggMjUzNzljYi4uNmU5MTU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0xNSw2ICsxNSw3IEBACiAJQkxLX1RDX1dSSVRFCT0gMSA8PCAxLAkvKiB3cml0ZXMgKi8KIAlCTEtfVENfQkFSUklFUgk9IDEgPDwgMiwJLyogYmFycmllciAqLwogCUJMS19UQ19TWU5DCT0gMSA8PCAzLAkvKiBzeW5jIElPICovCisJQkxLX1RDX1NZTkNJTwk9IEJMS19UQ19TWU5DLAogCUJMS19UQ19RVUVVRQk9IDEgPDwgNCwJLyogcXVldWVpbmcvbWVyZ2luZyAqLwogCUJMS19UQ19SRVFVRVVFCT0gMSA8PCA1LAkvKiByZXF1ZXVlaW5nICovCiAJQkxLX1RDX0lTU1VFCT0gMSA8PCA2LAkvKiBpc3N1ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ic2cuaCBiL2luY2x1ZGUvbGludXgvYnNnLmgKaW5kZXggY2YwMzAzYTYuLjNmMGM2NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnNnLmgKKysrIGIvaW5jbHVkZS9saW51eC9ic2cuaApAQCAtNyw2ICs3LDE0IEBACiAjZGVmaW5lIEJTR19TVUJfUFJPVE9DT0xfU0NTSV9UTUYJMQogI2RlZmluZSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfVFJBTlNQT1JUCTIKIAorLyoKKyAqIEZvciBmbGFncyBtZW1iZXIgYmVsb3cKKyAqIHNnLmggc2dfaW9faGRyIGFsc28gaGFzIGJpdHMgZGVmaW5lZCBmb3IgaXQncyBmbGFncyBtZW1iZXIuIEhvd2V2ZXIKKyAqIG5vbmUgb2YgdGhlc2UgYml0cyBhcmUgaW1wbGVtZW50ZWQvdXNlZCBieSBic2cuIFRoZSBiaXRzIGJlbG93IGFyZQorICogYWxsb2NhdGVkIHRvIG5vdCBjb25mbGljdCB3aXRoIHNnLmggb25lcyBhbnl3YXkuCisgKi8KKyNkZWZpbmUgQlNHX0ZMQUdfUV9BVF9UQUlMIDB4MTAgLyogZGVmYXVsdCwgPT0gMCBhdCB0aGlzIGJpdCwgaXMgUV9BVF9IRUFEICovCisKIHN0cnVjdCBzZ19pb192NCB7CiAJX19zMzIgZ3VhcmQ7CQkvKiBbaV0gJ1EnIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB2MyAqLwogCV9fdTMyIHByb3RvY29sOwkJLyogW2ldIDAgLT4gU0NTSSAsIC4uLi4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKaW5kZXggMWI5ODcyNS4uNDg2NGE0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTM5Myw4ICszOTMsMTAgQEAKICMgZGVmaW5lIENBUF9GVUxMX1NFVCAgICAgKChrZXJuZWxfY2FwX3Qpe3sgfjAsIH4wIH19KQogIyBkZWZpbmUgQ0FQX0lOSVRfRUZGX1NFVCAoKGtlcm5lbF9jYXBfdCl7eyB+Q0FQX1RPX01BU0soQ0FQX1NFVFBDQVApLCB+MCB9fSkKICMgZGVmaW5lIENBUF9GU19TRVQgICAgICAgKChrZXJuZWxfY2FwX3Qpe3sgQ0FQX0ZTX01BU0tfQjAsIENBUF9GU19NQVNLX0IxIH0gfSkKLSMgZGVmaW5lIENBUF9ORlNEX1NFVCAgICAgKChrZXJuZWxfY2FwX3Qpe3sgQ0FQX0ZTX01BU0tfQjB8Q0FQX1RPX01BU0soQ0FQX1NZU19SRVNPVVJDRSksIFwKLQkJCQkJQ0FQX0ZTX01BU0tfQjEgfSB9KQorIyBkZWZpbmUgQ0FQX05GU0RfU0VUICAgICAoKGtlcm5lbF9jYXBfdCl7eyBDQVBfRlNfTUFTS19CMCBcCisJCQkJCSAgICB8IENBUF9UT19NQVNLKENBUF9TWVNfUkVTT1VSQ0UpIFwKKwkJCQkJICAgIHwgQ0FQX1RPX01BU0soQ0FQX01LTk9EKSwgXAorCQkJCQkgICAgQ0FQX0ZTX01BU0tfQjEgfSB9KQogCiAjZW5kaWYgLyogX0tFUk5FTF9DQVBBQklMSVRZX1UzMlMgIT0gMiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaAppbmRleCA2MDVlYmUyLi43MmJmZWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmCV9DTTQwMDBfSF8KICNkZWZpbmUJX0NNNDAwMF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZQlNQVhfQVRSCQkJMzMKIAogI2RlZmluZQlDTTQwMDBfTUFYX0RFVgkJNApAQCAtMTAsOSArMTIsOSBAQAogICogbm90IHRvIGJyZWFrIGNvbXBpbGF0aW9uIG9mIHVzZXJzcGFjZSBhcHBzLiAtSFcgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYXRyZXEgewotCWludDMyX3QgYXRyX2xlbjsKKwlfX3MzMiBhdHJfbGVuOwogCXVuc2lnbmVkIGNoYXIgYXRyWzY0XTsKLQlpbnQzMl90IHBvd2VyX2FjdDsKKwlfX3MzMiBwb3dlcl9hY3Q7CiAJdW5zaWduZWQgY2hhciBiSUZTRDsKIAl1bnNpZ25lZCBjaGFyIGJJRlNDOwogfSBhdHJlcV90OwpAQCAtMjIsMTMgKzI0LDEzIEBACiAgKiBtZW1iZXIgc2l6ZXMuIFRoaXMgbGVhZHMgdG8gQ09ORklHX0NPTVBBVCBicmVha2FnZSwgc2luY2UgMzJiaXQgdXNlcnNwYWNlCiAgKiB3aWxsIGxheSBvdXQgdGhlIHN0cnVjdHVyZSBtZW1iZXJzIGRpZmZlcmVudGx5IHRoYW4gdGhlIDY0Yml0IGtlcm5lbC4KICAqCi0gKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gInVfaW50MzJfdCIuCisgKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gIl9fdTMyIi4KICAqIE9uIDMyYml0IHRoaXMgd2lsbCBtYWtlIG5vIGRpZmZlcmVuY2UuICBXaXRoIDY0Yml0IGtlcm5lbHMsIGl0IHdpbGwgbWFrZQogICogMzJiaXQgYXBwcyB3b3JrLCB0b28uCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgcHRzcmVxIHsKLQl1X2ludDMyX3QgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCisJX191MzIgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCiAgCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CiAgCXVuc2lnbmVkIGNoYXIgcHRzMTsKICAJdW5zaWduZWQgY2hhciBwdHMyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbl9wcm9jLmggYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAppbmRleCAxYzg2ZDY1Li5iODEyNWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApAQCAtNjUsMjAgKzY1LDIwIEBACiAJCX0gYWNrOwogCiAJCXN0cnVjdCBmb3JrX3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcGFyZW50X3BpZDsKLQkJCXBpZF90IHBhcmVudF90Z2lkOwotCQkJcGlkX3QgY2hpbGRfcGlkOwotCQkJcGlkX3QgY2hpbGRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHBhcmVudF9waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwYXJlbnRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3RnaWQ7CiAJCX0gZm9yazsKIAogCQlzdHJ1Y3QgZXhlY19wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCX0gZXhlYzsKIAogCQlzdHJ1Y3QgaWRfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwcm9jZXNzX3BpZDsKLQkJCXBpZF90IHByb2Nlc3NfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOwogCQkJdW5pb24gewogCQkJCV9fdTMyIHJ1aWQ7IC8qIHRhc2sgdWlkICovCiAJCQkJX191MzIgcmdpZDsgLyogdGFzayBnaWQgKi8KQEAgLTkwLDggKzkwLDggQEAKIAkJfSBpZDsKIAogCQlzdHJ1Y3QgZXhpdF9wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCQlfX3UzMiBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwogCQl9IGV4aXQ7CiAJfSBldmVudF9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmggYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAppbmRleCAwN2FlOGY4Li41YjVkNDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaApAQCAtNiw2ICs2LDcgQEAKICNkZWZpbmUgQ09EQV9QU0RFVl9NQUpPUiA2NwogI2RlZmluZSBNQVhfQ09EQURFVlMgIDUJICAgLyogaG93IG1hbnkgZG8gd2UgYWxsb3cgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBrc3RhdGZzOwogCiAvKiBjb21tdW5pY2F0aW9uIHBlbmRpbmcvcHJvY2Vzc2luZyBxdWV1ZXMgKi8KQEAgLTI0LDcgKzI1LDYgQEAKIAlyZXR1cm4gKHN0cnVjdCB2ZW51c19jb21tICopKChzYiktPnNfZnNfaW5mbyk7CiB9CiAKLQogLyogdXBjYWxscyAqLwogaW50IHZlbnVzX3Jvb3RmaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZHApOwogaW50IHZlbnVzX2dldGF0dHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCwKQEAgLTY0LDYgKzY0LDEyIEBACiBpbnQgdmVudXNfZnN5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCk7CiBpbnQgdmVudXNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKnNmcyk7CiAKKy8qCisgKiBTdGF0aXN0aWNzCisgKi8KKworZXh0ZXJuIHN0cnVjdCB2ZW51c19jb21tIGNvZGFfY29tbXNbXTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIG1lc3NhZ2VzIGJldHdlZW4gY29kYSBmaWxlc3lzdGVtIGluIGtlcm5lbCBhbmQgVmVudXMgKi8KIHN0cnVjdCB1cGNfcmVxIHsKQEAgLTgyLDExICs4OCw0IEBACiAjZGVmaW5lIFJFUV9XUklURSAgMHg0CiAjZGVmaW5lIFJFUV9BQk9SVCAgMHg4CiAKLQotLyoKLSAqIFN0YXRpc3RpY3MKLSAqLwotCi1leHRlcm4gc3RydWN0IHZlbnVzX2NvbW0gY29kYV9jb21tc1tdOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCmluZGV4IDE1MTRkNTMuLmEzZWQ3Y2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaApAQCAtNTIsNyArNTIsMTUgQEAKICNkZWZpbmUgX19kZXByZWNhdGVkCQkJX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCiAjZGVmaW5lIF9fcGFja2VkCQkJX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICNkZWZpbmUgX193ZWFrCQkJCV9fYXR0cmlidXRlX18oKHdlYWspKQotI2RlZmluZSBfX25ha2VkCQkJCV9fYXR0cmlidXRlX18oKG5ha2VkKSkKKworLyoKKyAqIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBvbiBBUk0gKGN1cnJlbnRseSB0aGUgb25seSB1c2VyIG9mIF9fbmFrZWQpIHRvIHRyYWNlCisgKiBuYWtlZCBmdW5jdGlvbnMgYmVjYXVzZSB0aGVuIG1jb3VudCBpcyBjYWxsZWQgd2l0aG91dCBzdGFjayBhbmQgZnJhbWUgcG9pbnRlcgorICogYmVpbmcgc2V0IHVwIGFuZCB0aGVyZSBpcyBubyBjaGFuY2UgdG8gcmVzdG9yZSB0aGUgbHIgcmVnaXN0ZXIgdG8gdGhlIHZhbHVlCisgKiBiZWZvcmUgbWNvdW50IHdhcyBjYWxsZWQuCisgKi8KKyNkZWZpbmUgX19uYWtlZAkJCQlfX2F0dHJpYnV0ZV9fKChuYWtlZCkpIG5vdHJhY2UKKwogI2RlZmluZSBfX25vcmV0dXJuCQkJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaAppbmRleCAwOTk5MjcxLi40NTBmYTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaApAQCAtMyw4ICszLDEwIEBACiAjZW5kaWYKIAogLyogR0NDIDQuMS5bMDFdIG1pc2NvbXBpbGVzIF9fd2VhayAqLwotI2lmIF9fR05VQ19NSU5PUl9fID09IDEgJiYgX19HTlVDX1BBVENITEVWRUxfXyA8PSAxCi0jIGVycm9yIFlvdXIgdmVyc2lvbiBvZiBnY2MgbWlzY29tcGlsZXMgdGhlIF9fd2VhayBkaXJlY3RpdmUKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmIF9fR05VQ19NSU5PUl9fID09IDEgJiYgX19HTlVDX1BBVENITEVWRUxfXyA8PSAxCisjICBlcnJvciBZb3VyIHZlcnNpb24gb2YgZ2NjIG1pc2NvbXBpbGVzIHRoZSBfX3dlYWsgZGlyZWN0aXZlCisjIGVuZGlmCiAjZW5kaWYKIAogI2RlZmluZSBfX3VzZWQJCQlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCmluZGV4IGE2N2E5MGMuLmRjY2E1MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCkBAIC0xMzcsOCArMTM3LDggQEAKIGludCBtZGFfY29uc29sZV9pbml0KHZvaWQpOwogdm9pZCBwcm9tX2Nvbl9pbml0KHZvaWQpOwogCi12b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotdm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwordm9pZCB2Y3NfbWFrZV9zeXNmcyhpbnQgaW5kZXgpOwordm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKGludCBpbmRleCk7CiAKIC8qIFNvbWUgZGVidWcgc3R1YiB0byBjYXRjaCBzb21lIG9mIHRoZSBvYnZpb3VzIHJhY2VzIGluIHRoZSBWVCBjb2RlICovCiAjaWYgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCAzODRiMzhkLi4xNjEwNDI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtMjM0LDcgKzIzNCw2IEBACiAJaW50CSgqc3VzcGVuZCkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBwbV9tZXNzYWdlX3QgcG1zZyk7CiAJaW50CSgqcmVzdW1lKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOwogCXN0cnVjdCBmcmVxX2F0dHIJKiphdHRyOwotCWJvb2wJCQloaWRlX2ludGVyZmFjZTsKIH07CiAKIC8qIGZsYWdzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCAxZjJlOTAyLi5lYzI5ZmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX1NIQVNICQkweDAwMDAwMDA5CiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9BSEFTSAkJMHgwMDAwMDAwYQogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfUk5HCQkweDAwMDAwMDBjCisjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MJMHgwMDAwMDAwZgogCiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9IQVNIX01BU0sJMHgwMDAwMDAwZQogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfQUhBU0hfTUFTSwkweDAwMDAwMDBjCkBAIC01NDgsOSArNTQ5LDYgQEAKICAqIFRyYW5zZm9ybSB1c2VyIGludGVyZmFjZS4KICAqLwogIAotc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnX25hbWUsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsCi0JCQkJICAgIHUzMiB0eXBlLCB1MzIgbWFzayk7CiBzdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX2Jhc2UoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7CiB2b2lkIGNyeXB0b19kZXN0cm95X3RmbSh2b2lkICptZW0sIHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmggYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKaW5kZXggZDA2ZmJmMi4uNzg4ODUwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaApAQCAtODIsOSArODIsOSBAQAogICogb3BlbikKICAqLwogc3RydWN0IGN5Y2xhZGVzX2lkbGVfc3RhdHMgewotICAgIHRpbWVfdAkgICBpbl91c2U7CS8qIFRpbWUgZGV2aWNlIGhhcyBiZWVuIGluIHVzZSAoc2VjcykgKi8KLSAgICB0aW1lX3QJICAgcmVjdl9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciByZWNlaXZlZCAoc2VjcykgKi8KLSAgICB0aW1lX3QJICAgeG1pdF9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciB0cmFuc21pdHRlZCAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgaW5fdXNlOwkvKiBUaW1lIGRldmljZSBoYXMgYmVlbiBpbiB1c2UgKHNlY3MpICovCisgICAgX19rZXJuZWxfdGltZV90IHJlY3ZfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgcmVjZWl2ZWQgKHNlY3MpICovCisgICAgX19rZXJuZWxfdGltZV90IHhtaXRfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgdHJhbnNtaXR0ZWQgKHNlY3MpICovCiAgICAgdW5zaWduZWQgbG9uZyAgcmVjdl9ieXRlczsJLyogQnl0ZXMgcmVjZWl2ZWQgKi8KICAgICB1bnNpZ25lZCBsb25nICB4bWl0X2J5dGVzOwkvKiBCeXRlcyB0cmFuc21pdHRlZCAqLwogICAgIHVuc2lnbmVkIGxvbmcgIG92ZXJydW5zOwkvKiBJbnB1dCBvdmVycnVucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2EuaCBiL2luY2x1ZGUvbGludXgvZGNhLmgKaW5kZXggYjAwYTc1My4uOWMyMGM3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2EuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYS5oCkBAIC0xLDMgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCiAjaWZuZGVmIERDQV9ICiAjZGVmaW5lIERDQV9ICiAvKiBEQ0EgUHJvdmlkZXIgQVBJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYm5sLmggYi9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKaW5kZXggYjBlZjI3NC4uN2QyZTEwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2JubC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNibmwuaApAQCAtMjAsMTAgKzIwLDEyIEBACiAjaWZuZGVmIF9fTElOVVhfRENCTkxfSF9fCiAjZGVmaW5lIF9fTElOVVhfRENCTkxfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIERDQl9QUk9UT19WRVJTSU9OIDEKIAogc3RydWN0IGRjYm1zZyB7Ci0JdW5zaWduZWQgY2hhciAgICAgIGRjYl9mYW1pbHk7CisJX191OCAgICAgICAgICAgICAgIGRjYl9mYW1pbHk7CiAJX191OCAgICAgICAgICAgICAgIGNtZDsKIAlfX3UxNiAgICAgICAgICAgICAgZGNiX3BhZDsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCA0NWU1YjE5Li4yOTE4YzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgQlVTX0lEX1NJWkUJCTIwCiAKIHN0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX3ByaXZhdGU7CiBzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZTsKIHN0cnVjdCBjbGFzczsKQEAgLTE0Nyw2ICsxNDgsOCBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXJfZmluZChjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgc3RydWN0IGJ1c190eXBlICpidXMpOwogZXh0ZXJuIGludCBkcml2ZXJfcHJvYmVfZG9uZSh2b2lkKTsKK2V4dGVybiB2b2lkIHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKTsKKwogCiAvKiBzeXNmcyBpbnRlcmZhY2UgZm9yIGV4cG9ydGluZyBkcml2ZXIgYXR0cmlidXRlcyAqLwogCkBAIC0zNjUsMTUgKzM2OCwxMSBAQAogfTsKIAogc3RydWN0IGRldmljZSB7Ci0Jc3RydWN0IGtsaXN0CQlrbGlzdF9jaGlsZHJlbjsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZQlrbm9kZV9wYXJlbnQ7CS8qIG5vZGUgaW4gc2libGluZyBsaXN0ICovCi0Jc3RydWN0IGtsaXN0X25vZGUJa25vZGVfZHJpdmVyOwotCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX2J1czsKIAlzdHJ1Y3QgZGV2aWNlCQkqcGFyZW50OwogCisJc3RydWN0IGRldmljZV9wcml2YXRlCSpwOworCiAJc3RydWN0IGtvYmplY3Qga29iajsKLQljaGFyCWJ1c19pZFtCVVNfSURfU0laRV07CS8qIHBvc2l0aW9uIG9uIHBhcmVudCBidXMgKi8KLQl1bnNpZ25lZAkJdWV2ZW50X3N1cHByZXNzOjE7CiAJY29uc3QgY2hhcgkJKmluaXRfbmFtZTsgLyogaW5pdGlhbCBuYW1lIG9mIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlX3R5cGUJKnR5cGU7CiAKQEAgLTM4NSw4ICszODQsMTMgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOwkvKiB3aGljaCBkcml2ZXIgaGFzIGFsbG9jYXRlZCB0aGlzCiAJCQkJCSAgIGRldmljZSAqLwogCXZvaWQJCSpkcml2ZXJfZGF0YTsJLyogZGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgKi8KLQl2b2lkCQkqcGxhdGZvcm1fZGF0YTsJLyogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSwgZGV2aWNlCi0JCQkJCSAgIGNvcmUgZG9lc24ndCB0b3VjaCBpdCAqLworCisJdm9pZAkJKnBsYXRmb3JtX2RhdGE7CS8qIFdlIHdpbGwgcmVtb3ZlIHBsYXRmb3JtX2RhdGEKKwkJCQkJICAgZmllbGQgaWYgYWxsIHBsYXRmb3JtIGRldmljZXMKKwkJCQkJICAgcGFzcyBpdHMgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YQorCQkJCQkgICBmcm9tIHBsYXRmb3JtX2RldmljZS0+cGxhdGZvcm1fZGF0YSwKKwkJCQkJICAgb3RoZXIga2luZCBvZiBkZXZpY2VzIHNob3VsZCBub3QKKwkJCQkJICAgdXNlIHBsYXRmb3JtX2RhdGEuICovCiAJc3RydWN0IGRldl9wbV9pbmZvCXBvd2VyOwogCiAjaWZkZWYgQ09ORklHX05VTUEKQEAgLTQyNSw4ICs0MjksNyBAQAogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRldl9uYW1lKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQkvKiB3aWxsIGJlIGNoYW5nZWQgaW50byBrb2JqZWN0X25hbWUoJmRldi0+a29iaikgaW4gdGhlIG5lYXIgZnV0dXJlICovCi0JcmV0dXJuIGRldi0+YnVzX2lkOworCXJldHVybiBrb2JqZWN0X25hbWUoJmRldi0+a29iaik7CiB9CiAKIGV4dGVybiBpbnQgZGV2X3NldF9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgLi4uKQpAQCAtNDYxLDYgKzQ2NCwxNiBAQAogCWRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkZXZfZ2V0X3VldmVudF9zdXBwcmVzcyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+a29iai51ZXZlbnRfc3VwcHJlc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCB2YWwpCit7CisJZGV2LT5rb2JqLnVldmVudF9zdXBwcmVzcyA9IHZhbDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBkZXYtPmtvYmouc3RhdGVfaW5fc3lzZnM7CkBAIC00ODEsNyArNDk0LDggQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICpkZXZpY2VfZmluZF9jaGlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJaW50ICgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkpOwogZXh0ZXJuIGludCBkZXZpY2VfcmVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqbmV3X25hbWUpOwotZXh0ZXJuIGludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQpOworZXh0ZXJuIGludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQsCisJCSAgICAgICBlbnVtIGRwbV9vcmRlciBkcG1fb3JkZXIpOwogCiAvKgogICogUm9vdCBkZXZpY2Ugb2JqZWN0cyBmb3IgZ3JvdXBpbmcgdW5kZXIgL3N5cy9kZXZpY2VzCkBAIC01NjgsNyArNTgyLDcgQEAKICNpZiBkZWZpbmVkKERFQlVHKQogI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJZGV2X3ByaW50ayhLRVJOX0RFQlVHICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQotI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQogI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pIGRvIHsgXAogCWR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXyk7IFwKIAl9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCmluZGV4IDE5Mjc2MzMuLjY0N2M4ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmgKQEAgLTksNiArOSw4IEBACiAjaWZuZGVmIF9ETE1fTkVUTElOS19ICiAjZGVmaW5lIF9ETE1fTkVUTElOS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHsKIAlETE1fU1RBVFVTX1dBSVRJTkcgPSAxLAogCURMTV9TVEFUVVNfR1JBTlRFRCA9IDIsCkBAIC0xOCwxNiArMjAsMTYgQEAKICNkZWZpbmUgRExNX0xPQ0tfREFUQV9WRVJTSU9OIDEKIAogc3RydWN0IGRsbV9sb2NrX2RhdGEgewotCXVpbnQxNl90IHZlcnNpb247Ci0JdWludDMyX3QgbG9ja3NwYWNlX2lkOworCV9fdTE2IHZlcnNpb247CisJX191MzIgbG9ja3NwYWNlX2lkOwogCWludCBub2RlaWQ7CiAJaW50IG93bnBpZDsKLQl1aW50MzJfdCBpZDsKLQl1aW50MzJfdCByZW1pZDsKLQl1aW50NjRfdCB4aWQ7Ci0JaW50OF90IHN0YXR1czsKLQlpbnQ4X3QgZ3Jtb2RlOwotCWludDhfdCBycW1vZGU7CisJX191MzIgaWQ7CisJX191MzIgcmVtaWQ7CisJX191NjQgeGlkOworCV9fczggc3RhdHVzOworCV9fczggZ3Jtb2RlOworCV9fczggcnFtb2RlOwogCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOwogCWludCByZXNvdXJjZV9uYW1lbGVuOwogCWNoYXIgcmVzb3VyY2VfbmFtZVtETE1fUkVTTkFNRV9NQVhMRU5dOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCmluZGV4IDI4YzI5NDAuLjQ4ZTQ0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTExMywyMCArMTEzLDIwIEBACiAJICogcmV0dXJuIC1FTk9UVFkpIGZpbGwgb3V0IHRoaXMgZmllbGQsIGV2ZW4gaWYgdGhlCiAJICogY29tbWFuZCBmYWlsZWQuCiAJICovCi0JdWludDMyX3QgdmVyc2lvblszXTsJLyogaW4vb3V0ICovCi0JdWludDMyX3QgZGF0YV9zaXplOwkvKiB0b3RhbCBzaXplIG9mIGRhdGEgcGFzc2VkIGluCisJX191MzIgdmVyc2lvblszXTsJLyogaW4vb3V0ICovCisJX191MzIgZGF0YV9zaXplOwkvKiB0b3RhbCBzaXplIG9mIGRhdGEgcGFzc2VkIGluCiAJCQkJICogaW5jbHVkaW5nIHRoaXMgc3RydWN0ICovCiAKLQl1aW50MzJfdCBkYXRhX3N0YXJ0OwkvKiBvZmZzZXQgdG8gc3RhcnQgb2YgZGF0YQorCV9fdTMyIGRhdGFfc3RhcnQ7CS8qIG9mZnNldCB0byBzdGFydCBvZiBkYXRhCiAJCQkJICogcmVsYXRpdmUgdG8gc3RhcnQgb2YgdGhpcyBzdHJ1Y3QgKi8KIAotCXVpbnQzMl90IHRhcmdldF9jb3VudDsJLyogaW4vb3V0ICovCi0JaW50MzJfdCBvcGVuX2NvdW50OwkvKiBvdXQgKi8KLQl1aW50MzJfdCBmbGFnczsJCS8qIGluL291dCAqLwotCXVpbnQzMl90IGV2ZW50X25yOyAgICAgIAkvKiBpbi9vdXQgKi8KLQl1aW50MzJfdCBwYWRkaW5nOworCV9fdTMyIHRhcmdldF9jb3VudDsJLyogaW4vb3V0ICovCisJX19zMzIgb3Blbl9jb3VudDsJLyogb3V0ICovCisJX191MzIgZmxhZ3M7CQkvKiBpbi9vdXQgKi8KKwlfX3UzMiBldmVudF9ucjsgICAgICAJLyogaW4vb3V0ICovCisJX191MzIgcGFkZGluZzsKIAotCXVpbnQ2NF90IGRldjsJCS8qIGluL291dCAqLworCV9fdTY0IGRldjsJCS8qIGluL291dCAqLwogCiAJY2hhciBuYW1lW0RNX05BTUVfTEVOXTsJLyogZGV2aWNlIG5hbWUgKi8KIAljaGFyIHV1aWRbRE1fVVVJRF9MRU5dOwkvKiB1bmlxdWUgaWRlbnRpZmllciBmb3IKQEAgLTEzOSw5ICsxMzksOSBAQAogICogZG1faW9jdGwuCiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfc3BlYyB7Ci0JdWludDY0X3Qgc2VjdG9yX3N0YXJ0OwotCXVpbnQ2NF90IGxlbmd0aDsKLQlpbnQzMl90IHN0YXR1czsJCS8qIHVzZWQgd2hlbiByZWFkaW5nIGZyb20ga2VybmVsIG9ubHkgKi8KKwlfX3U2NCBzZWN0b3Jfc3RhcnQ7CisJX191NjQgbGVuZ3RoOworCV9fczMyIHN0YXR1czsJCS8qIHVzZWQgd2hlbiByZWFkaW5nIGZyb20ga2VybmVsIG9ubHkgKi8KIAogCS8qCiAJICogTG9jYXRpb24gb2YgdGhlIG5leHQgZG1fdGFyZ2V0X3NwZWMuCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkgKiAgICh0aGF0IGZvbGxvd3MgdGhlIGRtX2lvY3RsIHN0cnVjdCkgdG8gdGhlIHN0YXJ0IG9mIHRoZSAibmV4dCIKIAkgKiAgIGRtX3RhcmdldF9zcGVjLgogCSAqLwotCXVpbnQzMl90IG5leHQ7CisJX191MzIgbmV4dDsKIAogCWNoYXIgdGFyZ2V0X3R5cGVbRE1fTUFYX1RZUEVfTkFNRV07CiAKQEAgLTE2OCwxNyArMTY4LDE3IEBACiAgKiBVc2VkIHRvIHJldHJpZXZlIHRoZSB0YXJnZXQgZGVwZW5kZW5jaWVzLgogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X2RlcHMgewotCXVpbnQzMl90IGNvdW50OwkvKiBBcnJheSBzaXplICovCi0JdWludDMyX3QgcGFkZGluZzsJLyogdW51c2VkICovCi0JdWludDY0X3QgZGV2WzBdOwkvKiBvdXQgKi8KKwlfX3UzMiBjb3VudDsJLyogQXJyYXkgc2l6ZSAqLworCV9fdTMyIHBhZGRpbmc7CS8qIHVudXNlZCAqLworCV9fdTY0IGRldlswXTsJLyogb3V0ICovCiB9OwogCiAvKgogICogVXNlZCB0byBnZXQgYSBsaXN0IG9mIGFsbCBkbSBkZXZpY2VzLgogICovCiBzdHJ1Y3QgZG1fbmFtZV9saXN0IHsKLQl1aW50NjRfdCBkZXY7Ci0JdWludDMyX3QgbmV4dDsJCS8qIG9mZnNldCB0byB0aGUgbmV4dCByZWNvcmQgZnJvbQorCV9fdTY0IGRldjsKKwlfX3UzMiBuZXh0OwkJLyogb2Zmc2V0IHRvIHRoZSBuZXh0IHJlY29yZCBmcm9tCiAJCQkJICAgdGhlIF9zdGFydF8gb2YgdGhpcyAqLwogCWNoYXIgbmFtZVswXTsKIH07CkBAIC0xODcsOCArMTg3LDggQEAKICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCB2ZXJzaW9ucwogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X3ZlcnNpb25zIHsKLSAgICAgICAgdWludDMyX3QgbmV4dDsKLSAgICAgICAgdWludDMyX3QgdmVyc2lvblszXTsKKyAgICAgICAgX191MzIgbmV4dDsKKyAgICAgICAgX191MzIgdmVyc2lvblszXTsKIAogICAgICAgICBjaGFyIG5hbWVbMF07CiB9OwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgKiBVc2VkIHRvIHBhc3MgbWVzc2FnZSB0byBhIHRhcmdldAogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X21zZyB7Ci0JdWludDY0X3Qgc2VjdG9yOwkvKiBEZXZpY2Ugc2VjdG9yICovCisJX191NjQgc2VjdG9yOwkvKiBEZXZpY2Ugc2VjdG9yICovCiAKIAljaGFyIG1lc3NhZ2VbMF07CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKaW5kZXggM2U2ODQ2OS4uMTk1NmM4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCkBAIC05Nyw3ICs5Nyw2IEBACiAKIC8qKgogICogc3RydWN0IGRtYV9jaGFuX3BlcmNwdSAtIHRoZSBwZXItQ1BVIHBhcnQgb2Ygc3RydWN0IGRtYV9jaGFuCi0gKiBAcmVmY291bnQ6IGxvY2FsX3QgdXNlZCBmb3Igb3Blbi1jb2RlZCAiYmlncmVmIiBjb3VudGluZwogICogQG1lbWNweV9jb3VudDogdHJhbnNhY3Rpb24gY291bnRlcgogICogQGJ5dGVzX3RyYW5zZmVycmVkOiBieXRlIGNvdW50ZXIKICAqLwpAQCAtMTE0LDEzICsxMTMsMTEgQEAKICAqIEBjb29raWU6IGxhc3QgY29va2llIHZhbHVlIHJldHVybmVkIHRvIGNsaWVudAogICogQGNoYW5faWQ6IGNoYW5uZWwgSUQgZm9yIHN5c2ZzCiAgKiBAZGV2OiBjbGFzcyBkZXZpY2UgZm9yIHN5c2ZzCi0gKiBAcmVmY291bnQ6IGtyZWYsIHVzZWQgaW4gImJpZ3JlZiIgc2xvdy1tb2RlCi0gKiBAc2xvd19yZWY6IGluZGljYXRlcyB0aGF0IHRoZSBETUEgY2hhbm5lbCBpcyBmcmVlCi0gKiBAcmN1OiB0aGUgRE1BIGNoYW5uZWwncyBSQ1UgaGVhZAogICogQGRldmljZV9ub2RlOiB1c2VkIHRvIGFkZCB0aGlzIHRvIHRoZSBkZXZpY2UgY2hhbiBsaXN0CiAgKiBAbG9jYWw6IHBlci1jcHUgcG9pbnRlciB0byBhIHN0cnVjdCBkbWFfY2hhbl9wZXJjcHUKICAqIEBjbGllbnQtY291bnQ6IGhvdyBtYW55IGNsaWVudHMgYXJlIHVzaW5nIHRoaXMgY2hhbm5lbAogICogQHRhYmxlX2NvdW50OiBudW1iZXIgb2YgYXBwZWFyYW5jZXMgaW4gdGhlIG1lbS10by1tZW0gYWxsb2NhdGlvbiB0YWJsZQorICogQHByaXZhdGU6IHByaXZhdGUgZGF0YSBmb3IgY2VydGFpbiBjbGllbnQtY2hhbm5lbCBhc3NvY2lhdGlvbnMKICAqLwogc3RydWN0IGRtYV9jaGFuIHsKIAlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlOwpAQCAtMTM0LDYgKzEzMSw3IEBACiAJc3RydWN0IGRtYV9jaGFuX3BlcmNwdSAqbG9jYWw7CiAJaW50IGNsaWVudF9jb3VudDsKIAlpbnQgdGFibGVfY291bnQ7CisJdm9pZCAqcHJpdmF0ZTsKIH07CiAKIC8qKgpAQCAtMjExLDggKzIwOSw2IEBACiAgKiBAZ2xvYmFsX25vZGU6IGxpc3RfaGVhZCBmb3IgZ2xvYmFsIGRtYV9kZXZpY2VfbGlzdAogICogQGNhcF9tYXNrOiBvbmUgb3IgbW9yZSBkbWFfY2FwYWJpbGl0eSBmbGFncwogICogQG1heF94b3I6IG1heGltdW0gbnVtYmVyIG9mIHhvciBzb3VyY2VzLCAwIGlmIG5vIGNhcGFiaWxpdHkKLSAqIEByZWZjb3VudDogcmVmZXJlbmNlIGNvdW50Ci0gKiBAZG9uZTogSU8gY29tcGxldGlvbiBzdHJ1Y3QKICAqIEBkZXZfaWQ6IHVuaXF1ZSBkZXZpY2UgSUQKICAqIEBkZXY6IHN0cnVjdCBkZXZpY2UgcmVmZXJlbmNlIGZvciBkbWEgbWFwcGluZyBhcGkKICAqIEBkZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXM6IGFsbG9jYXRlIHJlc291cmNlcyBhbmQgcmV0dXJuIHRoZQpAQCAtMjI1LDYgKzIyMSw3IEBACiAgKiBAZGV2aWNlX3ByZXBfZG1hX2ludGVycnVwdDogcHJlcGFyZXMgYW4gZW5kIG9mIGNoYWluIGludGVycnVwdCBvcGVyYXRpb24KICAqIEBkZXZpY2VfcHJlcF9zbGF2ZV9zZzogcHJlcGFyZXMgYSBzbGF2ZSBkbWEgb3BlcmF0aW9uCiAgKiBAZGV2aWNlX3Rlcm1pbmF0ZV9hbGw6IHRlcm1pbmF0ZSBhbGwgcGVuZGluZyBvcGVyYXRpb25zCisgKiBAZGV2aWNlX2lzX3R4X2NvbXBsZXRlOiBwb2xsIGZvciB0cmFuc2FjdGlvbiBjb21wbGV0aW9uCiAgKiBAZGV2aWNlX2lzc3VlX3BlbmRpbmc6IHB1c2ggcGVuZGluZyB0cmFuc2FjdGlvbnMgdG8gaGFyZHdhcmUKICAqLwogc3RydWN0IGRtYV9kZXZpY2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKaW5kZXggYmIwZGYyYS4uZmVjNjZiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCkBAIC03Niw3ICs3Niw3IEBACiB9IGF1ZGlvX2thcmFva2VfdDsgICAgIC8qIGludG8gbGVmdCBhbmQgcmlnaHQgICovCiAKIAotdHlwZWRlZiB1aW50MTZfdCBhdWRpb19hdHRyaWJ1dGVzX3Q7Cit0eXBlZGVmIF9fdTE2IGF1ZGlvX2F0dHJpYnV0ZXNfdDsKIC8qICAgYml0czogZGVzY3IuICovCiAvKiAgIDE1LTEzIGF1ZGlvIGNvZGluZyBtb2RlICgwPWFjMywgMj1tcGVnMSwgMz1tcGVnMmV4dCwgND1MUENNLCA2PURUUywgKi8KIC8qICAgMTIgICAgbXVsdGljaGFubmVsIGV4dGVuc2lvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaCBiL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKaW5kZXggYmQ0OWMzZS4uMWQ3NTBjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCkBAIC0xMzIsMTIgKzEzMiwxMiBAQAogI2RlZmluZSBWSURFT19WU1lOQ19GSUVMRF9QUk9HUkVTU0lWRQkoMykKIAogc3RydWN0IHZpZGVvX2V2ZW50IHsKLQlpbnQzMl90IHR5cGU7CisJX19zMzIgdHlwZTsKICNkZWZpbmUgVklERU9fRVZFTlRfU0laRV9DSEFOR0VECTEKICNkZWZpbmUgVklERU9fRVZFTlRfRlJBTUVfUkFURV9DSEFOR0VECTIKICNkZWZpbmUgVklERU9fRVZFTlRfREVDT0RFUl9TVE9QUEVEIAkzCiAjZGVmaW5lIFZJREVPX0VWRU5UX1ZTWU5DIAkJNAotCXRpbWVfdCB0aW1lc3RhbXA7CisJX19rZXJuZWxfdGltZV90IHRpbWVzdGFtcDsKIAl1bmlvbiB7CiAJCXZpZGVvX3NpemVfdCBzaXplOwogCQl1bnNpZ25lZCBpbnQgZnJhbWVfcmF0ZTsJLyogaW4gZnJhbWVzIHBlciAxMDAwc2VjICovCkBAIC0xNTcsMjUgKzE1NywyNSBAQAogCiBzdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZSB7CiAJY2hhciBfX3VzZXIgKmlGcmFtZTsgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBzaW5nbGUgaWZyYW1lIGluIG1lbW9yeSAqLwotCWludDMyX3Qgc2l6ZTsKKwlfX3MzMiBzaXplOwogfTsKIAogCiB0eXBlZGVmCiBzdHJ1Y3QgdmlkZW9faGlnaGxpZ2h0IHsKIAlpbnQgICAgIGFjdGl2ZTsgICAgICAvKiAgICAxPXNob3cgaGlnaGxpZ2h0LCAwPWhpZGUgaGlnaGxpZ2h0ICovCi0JdWludDhfdCBjb250cmFzdDE7ICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb250cmFzdCAqLworCV9fdTggICAgY29udHJhc3QxOyAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29udHJhc3QgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb250cmFzdCAqLwotCXVpbnQ4X3QgY29udHJhc3QyOyAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29udHJhc3QgKi8KKwlfX3U4ICAgIGNvbnRyYXN0MjsgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbnRyYXN0ICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEVtcGhhc2lzIHBpeGVsLTEgY29udHJhc3QgKi8KLQl1aW50OF90IGNvbG9yMTsgICAgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbG9yICovCisJX191OCAgICBjb2xvcjE7ICAgICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb2xvciAqLwogCQkJICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbG9yICovCi0JdWludDhfdCBjb2xvcjI7ICAgICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb2xvciAqLworCV9fdTggICAgY29sb3IyOyAgICAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29sb3IgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb2xvciAqLwotCXVpbnQzMl90IHlwb3M7ICAgICAgIC8qICAgMjMtMjIgIGF1dG8gYWN0aW9uIG1vZGUgKi8KKwlfX3UzMiAgICB5cG9zOyAgICAgICAvKiAgIDIzLTIyICBhdXRvIGFjdGlvbiBtb2RlICovCiAJCQkgICAgIC8qICAgMjEtMTIgIHN0YXJ0IHkgKi8KIAkJCSAgICAgLyogICAgOS0gMCAgZW5kIHkgKi8KLQl1aW50MzJfdCB4cG9zOyAgICAgICAvKiAgIDIzLTIyICBidXR0b24gY29sb3IgbnVtYmVyICovCisJX191MzIgICAgeHBvczsgICAgICAgLyogICAyMy0yMiAgYnV0dG9uIGNvbG9yIG51bWJlciAqLwogCQkJICAgICAvKiAgIDIxLTEyICBzdGFydCB4ICovCiAJCQkgICAgIC8qICAgIDktIDAgIGVuZCB4ICovCiB9IHZpZGVvX2hpZ2hsaWdodF90OwpAQCAtMTg5LDE3ICsxODksMTcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgdmlkZW9fc3B1X3BhbGV0dGUgeyAgICAgIC8qIFNQVSBQYWxldHRlIGluZm9ybWF0aW9uICovCiAJaW50IGxlbmd0aDsKLQl1aW50OF90IF9fdXNlciAqcGFsZXR0ZTsKKwlfX3U4IF9fdXNlciAqcGFsZXR0ZTsKIH0gdmlkZW9fc3B1X3BhbGV0dGVfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB2aWRlb19uYXZpX3BhY2sgewogCWludCBsZW5ndGg7ICAgICAgICAgIC8qIDAgLi4uIDEwMjQgKi8KLQl1aW50OF90IGRhdGFbMTAyNF07CisJX191OCBkYXRhWzEwMjRdOwogfSB2aWRlb19uYXZpX3BhY2tfdDsKIAogCi10eXBlZGVmIHVpbnQxNl90IHZpZGVvX2F0dHJpYnV0ZXNfdDsKK3R5cGVkZWYgX191MTYgdmlkZW9fYXR0cmlidXRlc190OwogLyogICBiaXRzOiBkZXNjci4gKi8KIC8qICAgMTUtMTQgVmlkZW8gY29tcHJlc3Npb24gbW9kZSAoMD1NUEVHLTEsIDE9TVBFRy0yKSAqLwogLyogICAxMy0xMiBUViBzeXN0ZW0gKDA9NTI1LzYwLCAxPTYyNS81MCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhYmYzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCkBAIC0wLDAgKzEsODggQEAKKyNpZm5kZWYgX0RZTkFNSUNfREVCVUdfSAorI2RlZmluZSBfRFlOQU1JQ19ERUJVR19ICisKKy8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKKyAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKKyAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgorICovCitleHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDsKK2V4dGVybiBsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkMjsKKworLyoKKyAqIEFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIGlzIGNyZWF0ZWQgaW4gYSBzcGVjaWFsCisgKiBFTEYgc2VjdGlvbiBhdCBldmVyeSBkeW5hbWljIGRlYnVnIGNhbGxzaXRlLiAgQXQgcnVudGltZSwKKyAqIHRoZSBzcGVjaWFsIHNlY3Rpb24gaXMgdHJlYXRlZCBhcyBhbiBhcnJheSBvZiB0aGVzZS4KKyAqLworc3RydWN0IF9kZGVidWcgeworCS8qCisJICogVGhlc2UgZmllbGRzIGFyZSB1c2VkIHRvIGRyaXZlIHRoZSB1c2VyIGludGVyZmFjZQorCSAqIGZvciBzZWxlY3RpbmcgYW5kIGRpc3BsYXlpbmcgZGVidWcgY2FsbHNpdGVzLgorCSAqLworCWNvbnN0IGNoYXIgKm1vZG5hbWU7CisJY29uc3QgY2hhciAqZnVuY3Rpb247CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY29uc3QgY2hhciAqZm9ybWF0OworCWNoYXIgcHJpbWFyeV9oYXNoOworCWNoYXIgc2Vjb25kYXJ5X2hhc2g7CisJdW5zaWduZWQgaW50IGxpbmVubzoyNDsKKwkvKgorIAkgKiBUaGUgZmxhZ3MgZmllbGQgY29udHJvbHMgdGhlIGJlaGF2aW91ciBhdCB0aGUgY2FsbHNpdGUuCisgCSAqIFRoZSBiaXRzIGhlcmUgYXJlIGNoYW5nZWQgZHluYW1pY2FsbHkgd2hlbiB0aGUgdXNlcgorIAkgKiB3cml0ZXMgY29tbWFuZHMgdG8gPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCisJICovCisjZGVmaW5lIF9EUFJJTlRLX0ZMQUdTX1BSSU5UICAgKDE8PDApICAvKiBwcmludGsoKSBhIG1lc3NhZ2UgdXNpbmcgdGhlIGZvcm1hdCAqLworI2RlZmluZSBfRFBSSU5US19GTEFHU19ERUZBVUxUIDAKKwl1bnNpZ25lZCBpbnQgZmxhZ3M6ODsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworCisKK2ludCBkZGVidWdfYWRkX21vZHVsZShzdHJ1Y3QgX2RkZWJ1ZyAqdGFiLCB1bnNpZ25lZCBpbnQgbiwKKwkJCQljb25zdCBjaGFyICptb2RuYW1lKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCitleHRlcm4gaW50IGRkZWJ1Z19yZW1vdmVfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKTsKKworI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQoZGQpICAoewkgICAgIFwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQkgICAgIFwKKwlpZiAodW5saWtlbHkoKGR5bmFtaWNfZGVidWdfZW5hYmxlZCAmICgxTEwgPDwgREVCVUdfSEFTSCkpICYmCSAgICAgXAorCQkJKGR5bmFtaWNfZGVidWdfZW5hYmxlZDIgJiAoMUxMIDw8IERFQlVHX0hBU0gyKSkpKSAgIFwKKwkJCQlpZiAodW5saWtlbHkoZGQuZmxhZ3MpKQkJCSAgICAgXAorCQkJCQlfX3JldCA9IDE7CQkJICAgICBcCisJX19yZXQ7IH0pCisKKyNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgZG8gewkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyBkZXNjcmlwdG9yCQkJCVwKKwlfX3VzZWQJCQkJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCVwKKwl7IEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19GSUxFX18sIGZtdCwgREVCVUdfSEFTSCwJXAorCQlERUJVR19IQVNIMiwgX19MSU5FX18sIF9EUFJJTlRLX0ZMQUdTX0RFRkFVTFQgfTsJXAorCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoZGVzY3JpcHRvcikpCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjoiIHByX2ZtdChmbXQpLAlcCisJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJCVwKKwl9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm10LCAuLi4pIGRvIHsJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyBkZXNjcmlwdG9yCQkJCVwKKwlfX3VzZWQJCQkJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCVwKKwl7IEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19GSUxFX18sIGZtdCwgREVCVUdfSEFTSCwJXAorCQlERUJVR19IQVNIMiwgX19MSU5FX18sIF9EUFJJTlRLX0ZMQUdTX0RFRkFVTFQgfTsJXAorCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoZGVzY3JpcHRvcikpCQkJCVwKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAkJCVwKKwkJCQkJS0JVSUxEX01PRE5BTUUgIjogIiBwcl9mbXQoZm10KSxcCisJCQkJCSMjX19WQV9BUkdTX18pOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBkZGVidWdfcmVtb3ZlX21vZHVsZShjaGFyICptb2QpCit7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmggYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNTI4ZDAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotI2lmbmRlZiBfRFlOQU1JQ19QUklOVEtfSAotI2RlZmluZSBfRFlOQU1JQ19QUklOVEtfSAotCi0jZGVmaW5lIERZTkFNSUNfREVCVUdfSEFTSF9CSVRTIDYKLSNkZWZpbmUgREVCVUdfSEFTSF9UQUJMRV9TSVpFICgxIDw8IERZTkFNSUNfREVCVUdfSEFTSF9CSVRTKQotCi0jZGVmaW5lIFRZUEVfQk9PTEVBTiAxCi0KLSNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX0FMTCAwCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9OT05FIDEKLSNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX1NPTUUgMgotCi1leHRlcm4gaW50IGR5bmFtaWNfZW5hYmxlZDsKLQotLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAotICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQotICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCi0gKi8KLWV4dGVybiBsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDsKLWV4dGVybiBsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDI7Ci0KLXN0cnVjdCBtb2RfZGVidWcgewotCWNoYXIgKm1vZG5hbWU7Ci0JY2hhciAqbG9naWNhbF9tb2RuYW1lOwotCWNoYXIgKmZsYWdfbmFtZXM7Ci0JaW50IHR5cGU7Ci0JaW50IGhhc2g7Ci0JaW50IGhhc2gyOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Ci0KLWludCByZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGNoYXIgKnNoYXJlX25hbWUsCi0JCQkJCWNoYXIgKmZsYWdzLCBpbnQgaGFzaCwgaW50IGhhc2gyKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQotZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKTsKLWV4dGVybiBpbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RuYW1lLCBpbnQgdHlwZSwKLQkJCQkJaW50IHZhbHVlLCBpbnQgaGFzaCk7Ci0KLSNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKG1vZHVsZSwgdHlwZSwgdmFsdWUsIGxldmVsLCBoYXNoKSAgKHsJICAgICBcCi0JaW50IF9fcmV0ID0gMDsJCQkJCQkJICAgICBcCi0JaWYgKHVubGlrZWx5KChkeW5hbWljX3ByaW50a19lbmFibGVkICYgKDFMTCA8PCBERUJVR19IQVNIKSkgJiYJICAgICBcCi0JCQkoZHluYW1pY19wcmludGtfZW5hYmxlZDIgJiAoMUxMIDw8IERFQlVHX0hBU0gyKSkpKSAgIFwKLQkJCV9fcmV0ID0gX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihtb2R1bGUsIHR5cGUsICAgXAotCQkJCQkJCQl2YWx1ZSwgaGFzaCk7XAotCV9fcmV0OyB9KQotCi0jZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pIGRvIHsJCQkJCSAgICBcCi0Jc3RhdGljIGNoYXIgbW9kX25hbWVbXQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlX3N0cmluZ3MiKSkpCQkJICAgIFwKLQkgPSBLQlVJTERfTU9ETkFNRTsJCQkJCQkgICAgXAotCXN0YXRpYyBzdHJ1Y3QgbW9kX2RlYnVnIGRlc2NyaXB0b3IJCQkJICAgIFwKLQlfX3VzZWQJCQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQkgICAgXAotCXsgbW9kX25hbWUsIG1vZF9uYW1lLCBOVUxMLCBUWVBFX0JPT0xFQU4sIERFQlVHX0hBU0gsIERFQlVHX0hBU0gyIH07XAotCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoS0JVSUxEX01PRE5BTUUsIFRZUEVfQk9PTEVBTiwJCSAgICBcCi0JCQkJCQkwLCAwLCBERUJVR19IQVNIKSkJICAgIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjoiIGZtdCwJCSAgICBcCi0JCQkJIyNfX1ZBX0FSR1NfXyk7CQkJCSAgICBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgZG8gewkJCQkgICAgXAotCXN0YXRpYyBjaGFyIG1vZF9uYW1lW10JCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZV9zdHJpbmdzIikpKQkJCSAgICBcCi0JID0gS0JVSUxEX01PRE5BTUU7CQkJCQkJICAgIFwKLQlzdGF0aWMgc3RydWN0IG1vZF9kZWJ1ZyBkZXNjcmlwdG9yCQkJCSAgICBcCi0JX191c2VkCQkJCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJICAgIFwKLQl7IG1vZF9uYW1lLCBtb2RfbmFtZSwgTlVMTCwgVFlQRV9CT09MRUFOLCBERUJVR19IQVNILCBERUJVR19IQVNIMiB9O1wKLQlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKEtCVUlMRF9NT0ROQU1FLCBUWVBFX0JPT0xFQU4sCQkgICAgXAotCQkJCQkJMCwgMCwgREVCVUdfSEFTSCkpCSAgICBcCi0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwJCQkgICAgXAotCQkJCQlLQlVJTERfTU9ETkFNRSAiOiAiIGZvcm1hdCwJICAgIFwKLQkJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJICAgIFwKLQl9IHdoaWxlICgwKQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZF9uYW1lKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBpbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RuYW1lLCBpbnQgdHlwZSwKLQkJCQkJCWludCB2YWx1ZSwgaW50IGhhc2gpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKG1vZHVsZSwgdHlwZSwgdmFsdWUsIGxldmVsLCBoYXNoKSAgKHsgMDsgfSkKLSNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDI3YzY3YTUuLjEzMWIxMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC03LDYgKzcsNyBAQAogICogUG9ydGlvbnMgQ29weXJpZ2h0IDIwMDIgSW50ZWwgKGVsaS5rdXBlcm1hbm5AaW50ZWwuY29tLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocmlzdG9waGVyLmxlZWNoQGludGVsLmNvbSwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY290dC5mZWxkbWFuQGludGVsLmNvbSkKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgU3VuIE1pY3Jvc3lzdGVtcyAyMDA4CiAgKi8KIAogI2lmbmRlZiBfTElOVVhfRVRIVE9PTF9ICkBAIC0yODcsMTAgKzI4OCw3NSBAQAogCUVUSF9GTEFHX0xSTwkJPSAoMSA8PCAxNSksCS8qIExSTyBpcyBlbmFibGVkICovCiB9OwogCi1zdHJ1Y3QgZXRodG9vbF9yeG5mYyB7Ci0JX191MzIJCWNtZDsKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhcmUgZm9yIHN1cHBvcnRpbmcgUlggbmV0d29yayBmbG93CisgKiBjbGFzc2lmaWNhdGlvbiBjb25maWd1cmF0aW9uLiBOb3RlLCBhbGwgbXVsdGlieXRlIGZpZWxkcywgZS5nLiwKKyAqIGlwNHNyYywgaXA0ZHN0LCBwc3JjLCBwZHN0LCBzcGksIGV0Yy4gYXJlIGV4cGVjdGVkIHRvIGJlIGluIG5ldHdvcmsKKyAqIGJ5dGUgb3JkZXIuCisgKi8KK3N0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTE2CXBzcmM7CisJX19iZTE2CXBkc3Q7CisJX191OCAgICB0b3M7Cit9OworCitzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fYmUzMglzcGk7CisJX191OCAgICB0b3M7Cit9OworCitzdHJ1Y3QgZXRodG9vbF9yYXdpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fdTgJaGRhdGFbNjRdOworfTsKKworc3RydWN0IGV0aHRvb2xfZXRoZXJfc3BlYyB7CisJX19iZTE2CWV0aGVyX3R5cGU7CisJX191OAlmcmFtZV9zaXplOworCV9fdTgJZWZyYW1lWzE2XTsKK307CisKKyNkZWZpbmUJRVRIX1JYX05GQ19JUDQJMQorI2RlZmluZQlFVEhfUlhfTkZDX0lQNgkyCisKK3N0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTMyCWw0XzRfYnl0ZXM7CisJX191OCAgICB0b3M7CisJX191OCAgICBpcF92ZXI7CisJX191OCAgICBwcm90bzsKK307CisKK3N0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyB7CiAJX191MzIJCWZsb3dfdHlwZTsKLQlfX3U2NAkJZGF0YTsKKwl1bmlvbiB7CisJCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl0Y3BfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl1ZHBfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQlzY3RwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJYWhfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQllc3BfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3Jhd2lwNF9zcGVjCQlyYXdfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2V0aGVyX3NwZWMJCWV0aGVyX3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjCQl1c3JfaXA0X3NwZWM7CisJCV9fdTgJCQkJCWhkYXRhWzY0XTsKKwl9IGhfdSwgbV91OyAvKiBlbnRyeSwgbWFzayAqLworCV9fdTY0CQlyaW5nX2Nvb2tpZTsKKwlfX3UzMgkJbG9jYXRpb247Cit9OworCitzdHJ1Y3QgZXRodG9vbF9yeG5mYyB7CisJX191MzIJCQkJY21kOworCV9fdTMyCQkJCWZsb3dfdHlwZTsKKwkvKiBUaGUgcnggZmxvdyBoYXNoIHZhbHVlIG9yIHRoZSBydWxlIERCIHNpemUgKi8KKwlfX3U2NAkJCQlkYXRhOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYwlmczsKKwlfX3UzMgkJCQlydWxlX2NudDsKKwlfX3UzMgkJCQlydWxlX2xvY3NbMF07CiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtNDE3LDggKzQ4Myw4IEBACiAJLyogdGhlIGZvbGxvd2luZyBob29rcyBhcmUgb2Jzb2xldGUgKi8KIAlpbnQJKCpzZWxmX3Rlc3RfY291bnQpKHN0cnVjdCBuZXRfZGV2aWNlICopOy8qIHVzZSBnZXRfc3NldF9jb3VudCAqLwogCWludAkoKmdldF9zdGF0c19jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7LyogdXNlIGdldF9zc2V0X2NvdW50ICovCi0JaW50CSgqZ2V0X3J4aGFzaCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKik7Ci0JaW50CSgqc2V0X3J4aGFzaCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKik7CisJaW50CSgqZ2V0X3J4bmZjKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqLCB2b2lkICopOworCWludAkoKnNldF9yeG5mYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKik7CiB9OwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApAQCAtNDY5LDYgKzUzNSwxMiBAQAogI2RlZmluZQlFVEhUT09MX1NSWEZICQkweDAwMDAwMDJhIC8qIFNldCBSWCBmbG93IGhhc2ggY29uZmlndXJhdGlvbiAqLwogI2RlZmluZSBFVEhUT09MX0dHUk8JCTB4MDAwMDAwMmIgLyogR2V0IEdSTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCiAjZGVmaW5lIEVUSFRPT0xfU0dSTwkJMHgwMDAwMDAyYyAvKiBTZXQgR1JPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhSSU5HUwkweDAwMDAwMDJkIC8qIEdldCBSWCByaW5ncyBhdmFpbGFibGUgZm9yIExCICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUkxDTlQJMHgwMDAwMDAyZSAvKiBHZXQgUlggY2xhc3MgcnVsZSBjb3VudCAqLworI2RlZmluZQlFVEhUT09MX0dSWENMU1JVTEUJMHgwMDAwMDAyZiAvKiBHZXQgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLworI2RlZmluZQlFVEhUT09MX0dSWENMU1JMQUxMCTB4MDAwMDAwMzAgLyogR2V0IGFsbCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfU1JYQ0xTUkxERUwJMHgwMDAwMDAzMSAvKiBEZWxldGUgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLworI2RlZmluZQlFVEhUT09MX1NSWENMU1JMSU5TCTB4MDAwMDAwMzIgLyogSW5zZXJ0IFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KIAogLyogY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGNvZGUgKi8KICNkZWZpbmUgU1BBUkNfRVRIX0dTRVQJCUVUSFRPT0xfR1NFVApAQCAtNTY1LDkgKzYzNywxMyBAQAogI2RlZmluZQlVRFBfVjZfRkxPVwkweDA2CiAjZGVmaW5lCVNDVFBfVjZfRkxPVwkweDA3CiAjZGVmaW5lCUFIX0VTUF9WNl9GTE9XCTB4MDgKKyNkZWZpbmUJQUhfVjRfRkxPVwkweDA5CisjZGVmaW5lCUVTUF9WNF9GTE9XCTB4MGEKKyNkZWZpbmUJQUhfVjZfRkxPVwkweDBiCisjZGVmaW5lCUVTUF9WNl9GTE9XCTB4MGMKKyNkZWZpbmUJSVBfVVNFUl9GTE9XCTB4MGQKIAogLyogTDMtTDQgbmV0d29yayB0cmFmZmljIGZsb3cgaGFzaCBvcHRpb25zICovCi0jZGVmaW5lCVJYSF9ERVZfUE9SVAkoMSA8PCAwKQogI2RlZmluZQlSWEhfTDJEQQkoMSA8PCAxKQogI2RlZmluZQlSWEhfVkxBTgkoMSA8PCAyKQogI2RlZmluZQlSWEhfTDNfUFJPVE8JKDEgPDwgMykKQEAgLTU3Nyw1ICs2NTMsNiBAQAogI2RlZmluZQlSWEhfTDRfQl8yXzMJKDEgPDwgNykgLyogZHN0IHBvcnQgaW4gY2FzZSBvZiBUQ1AvVURQL1NDVFAgKi8KICNkZWZpbmUJUlhIX0RJU0NBUkQJKDEgPDwgMzEpCiAKKyNkZWZpbmUJUlhfQ0xTX0ZMT1dfRElTQwkweGZmZmZmZmZmZmZmZmZmZmZVTEwKIAogI2VuZGlmIC8qIF9MSU5VWF9FVEhUT09MX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCmluZGV4IGYxZTFkM2MuLmY2ODU2YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaApAQCAtNjEsNyArNjEsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9pbml0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJmZpbGUtPmZfZXBfbGlua3MpOwotCXNwaW5fbG9ja19pbml0KCZmaWxlLT5mX2VwX2xvY2spOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlybXdhcmUtbWFwLmggYi9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLW1hcC5oCmluZGV4IDZlMTk5YzguLmNjYTY4NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlybXdhcmUtbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJtd2FyZS1tYXAuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpbmNsdWRlL2xpbnV4L2Zpcm13YXJlLW1hcC5oOgogICogIENvcHlyaWdodCAoQykgMjAwOCBTVVNFIExJTlVYIFByb2R1Y3RzIEdtYkgKLSAqICBieSBCZXJuaGFyZCBXYWxsZSA8YndhbGxlQHN1c2UuZGU+CisgKiAgYnkgQmVybmhhcmQgV2FsbGUgPGJlcm5oYXJkLndhbGxlQGdteC5kZT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2Mi4wIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDYwMjJmNDQuLjFjZDQ0ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTU0LDI0ICs1NCwzMCBAQAogI2RlZmluZSBNQVlfQUNDRVNTIDE2CiAjZGVmaW5lIE1BWV9PUEVOIDMyCiAKKy8qCisgKiBmbGFncyBpbiBmaWxlLmZfbW9kZS4gIE5vdGUgdGhhdCBGTU9ERV9SRUFEIGFuZCBGTU9ERV9XUklURSBtdXN0IGNvcnJlc3BvbmQKKyAqIHRvIE9fV1JPTkxZIGFuZCBPX1JEV1IgdmlhIHRoZSBzdHJhbmdlIHRyaWNrIGluIF9fZGVudHJ5X29wZW4oKQorICovCisKIC8qIGZpbGUgaXMgb3BlbiBmb3IgcmVhZGluZyAqLwogI2RlZmluZSBGTU9ERV9SRUFECQkoKF9fZm9yY2UgZm1vZGVfdCkxKQogLyogZmlsZSBpcyBvcGVuIGZvciB3cml0aW5nICovCiAjZGVmaW5lIEZNT0RFX1dSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkyKQogLyogZmlsZSBpcyBzZWVrYWJsZSAqLwogI2RlZmluZSBGTU9ERV9MU0VFSwkJKChfX2ZvcmNlIGZtb2RlX3QpNCkKLS8qIGZpbGUgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIHByZWFkL3B3cml0ZSAqLworLyogZmlsZSBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgcHJlYWQgKi8KICNkZWZpbmUgRk1PREVfUFJFQUQJCSgoX19mb3JjZSBmbW9kZV90KTgpCi0jZGVmaW5lIEZNT0RFX1BXUklURQkJRk1PREVfUFJFQUQJLyogVGhlc2UgZ28gaGFuZCBpbiBoYW5kICovCisvKiBmaWxlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBwd3JpdGUgKi8KKyNkZWZpbmUgRk1PREVfUFdSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkxNikKIC8qIEZpbGUgaXMgb3BlbmVkIGZvciBleGVjdXRpb24gd2l0aCBzeXNfZXhlY3ZlIC8gc3lzX3VzZWxpYiAqLwotI2RlZmluZSBGTU9ERV9FWEVDCQkoKF9fZm9yY2UgZm1vZGVfdCkxNikKKyNkZWZpbmUgRk1PREVfRVhFQwkJKChfX2ZvcmNlIGZtb2RlX3QpMzIpCiAvKiBGaWxlIGlzIG9wZW5lZCB3aXRoIE9fTkRFTEFZIChvbmx5IHNldCBmb3IgYmxvY2sgZGV2aWNlcykgKi8KLSNkZWZpbmUgRk1PREVfTkRFTEFZCQkoKF9fZm9yY2UgZm1vZGVfdCkzMikKKyNkZWZpbmUgRk1PREVfTkRFTEFZCQkoKF9fZm9yY2UgZm1vZGVfdCk2NCkKIC8qIEZpbGUgaXMgb3BlbmVkIHdpdGggT19FWENMIChvbmx5IHNldCBmb3IgYmxvY2sgZGV2aWNlcykgKi8KLSNkZWZpbmUgRk1PREVfRVhDTAkJKChfX2ZvcmNlIGZtb2RlX3QpNjQpCisjZGVmaW5lIEZNT0RFX0VYQ0wJCSgoX19mb3JjZSBmbW9kZV90KTEyOCkKIC8qIEZpbGUgaXMgb3BlbmVkIHVzaW5nIG9wZW4oLi4sIDMsIC4uKSBhbmQgaXMgd3JpdGVhYmxlIG9ubHkgZm9yIGlvY3RscwogICAgKHNwZWNpYWx5IGhhY2sgZm9yIGZsb3BweS5jKSAqLwotI2RlZmluZSBGTU9ERV9XUklURV9JT0NUTAkoKF9fZm9yY2UgZm1vZGVfdCkxMjgpCisjZGVmaW5lIEZNT0RFX1dSSVRFX0lPQ1RMCSgoX19mb3JjZSBmbW9kZV90KTI1NikKIAogLyoKICAqIERvbid0IHVwZGF0ZSBjdGltZSBhbmQgbXRpbWUuCkBAIC04NywxMCArOTMsMTAgQEAKICNkZWZpbmUgV1JJVEUgMQogI2RlZmluZSBSRUFEQSAyCQkvKiByZWFkLWFoZWFkICAtIGRvbid0IGJsb2NrIGlmIG5vIHJlc291cmNlcyAqLwogI2RlZmluZSBTV1JJVEUgMwkvKiBmb3IgbGxfcndfYmxvY2soKSAtIHdhaXQgZm9yIGJ1ZmZlciBsb2NrICovCi0jZGVmaW5lIFJFQURfU1lOQwkoUkVBRCB8ICgxIDw8IEJJT19SV19TWU5DKSkKKyNkZWZpbmUgUkVBRF9TWU5DCShSRUFEIHwgKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfVU5QTFVHKSkKICNkZWZpbmUgUkVBRF9NRVRBCShSRUFEIHwgKDEgPDwgQklPX1JXX01FVEEpKQotI2RlZmluZSBXUklURV9TWU5DCShXUklURSB8ICgxIDw8IEJJT19SV19TWU5DKSkKLSNkZWZpbmUgU1dSSVRFX1NZTkMJKFNXUklURSB8ICgxIDw8IEJJT19SV19TWU5DKSkKKyNkZWZpbmUgV1JJVEVfU1lOQwkoV1JJVEUgfCAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpKQorI2RlZmluZSBTV1JJVEVfU1lOQwkoU1dSSVRFIHwgKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfVU5QTFVHKSkKICNkZWZpbmUgV1JJVEVfQkFSUklFUgkoV1JJVEUgfCAoMSA8PCBCSU9fUldfQkFSUklFUikpCiAjZGVmaW5lIERJU0NBUkRfTk9CQVJSSUVSICgxIDw8IEJJT19SV19ESVNDQVJEKQogI2RlZmluZSBESVNDQVJEX0JBUlJJRVIgKCgxIDw8IEJJT19SV19ESVNDQVJEKSB8ICgxIDw8IEJJT19SV19CQVJSSUVSKSkKQEAgLTEzNSw2ICsxNDEsNyBAQAogI2RlZmluZSBNU19SRUxBVElNRQkoMTw8MjEpCS8qIFVwZGF0ZSBhdGltZSByZWxhdGl2ZSB0byBtdGltZS9jdGltZS4gKi8KICNkZWZpbmUgTVNfS0VSTk1PVU5UCSgxPDwyMikgLyogdGhpcyBpcyBhIGtlcm5fbW91bnQgY2FsbCAqLwogI2RlZmluZSBNU19JX1ZFUlNJT04JKDE8PDIzKSAvKiBVcGRhdGUgaW5vZGUgSV92ZXJzaW9uIGZpZWxkICovCisjZGVmaW5lIE1TX1NUUklDVEFUSU1FCSgxPDwyNCkgLyogQWx3YXlzIHBlcmZvcm0gYXRpbWUgdXBkYXRlcyAqLwogI2RlZmluZSBNU19BQ1RJVkUJKDE8PDMwKQogI2RlZmluZSBNU19OT1VTRVIJKDE8PDMxKQogCkBAIC04NDIsNiArODQ5LDcgQEAKICNkZWZpbmUgZl9kZW50cnkJZl9wYXRoLmRlbnRyeQogI2RlZmluZSBmX3Zmc21udAlmX3BhdGgubW50CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKKwlzcGlubG9ja190CQlmX2xvY2s7ICAvKiBmX2VwX2xpbmtzLCBmX2ZsYWdzICovCiAJYXRvbWljX2xvbmdfdAkJZl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgCQlmX2ZsYWdzOwogCWZtb2RlX3QJCQlmX21vZGU7CkBAIC04NjAsNyArODY4LDYgQEAKICNpZmRlZiBDT05GSUdfRVBPTEwKIAkvKiBVc2VkIGJ5IGZzL2V2ZW50cG9sbC5jIHRvIGxpbmsgYWxsIHRoZSBob29rcyB0byB0aGlzIGZpbGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWZfZXBfbGlua3M7Ci0Jc3BpbmxvY2tfdAkJZl9lcF9sb2NrOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfRVBPTEwgKi8KIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqZl9tYXBwaW5nOwogI2lmZGVmIENPTkZJR19ERUJVR19XUklURUNPVU5UCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oIGIvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaAppbmRleCAxM2Y0ZTc0Li4wZmZhNDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKQEAgLTIyLDcgKzIyLDcgQEAKIHsKIAlfX3U2NAlieXRlczsKIAlfX3UzMglwYWNrZXRzOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKICAqIHN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0IC0gcmF0ZSBlc3RpbWF0b3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCAxNjk0OGVhLi42MzRjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC0zMzMsMTEgKzMzMywxMCBAQAogCQlwYXJ0X3RvX2Rpc2socGFydCktPnBhcnQwLmluX2ZsaWdodC0tOwogfQogCi0vKiBkcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jICovCisvKiBibG9jay9ibGstY29yZS5jICovCiBleHRlcm4gdm9pZCBwYXJ0X3JvdW5kX3N0YXRzKGludCBjcHUsIHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpOwogCi0vKiBkcml2ZXJzL2Jsb2NrL2dlbmhkLmMgKi8KLWV4dGVybiBpbnQgZ2V0X2Jsa2Rldl9saXN0KGNoYXIgKiwgaW50KTsKKy8qIGJsb2NrL2dlbmhkLmMgKi8KIGV4dGVybiB2b2lkIGFkZF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIGRlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpncCk7CiBleHRlcm4gdm9pZCB1bmxpbmtfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ3ApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZHJlZy5oIGIvaW5jbHVkZS9saW51eC9oZHJlZy5oCmluZGV4IGMzN2U5MjQuLmVkMjFiZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRyZWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkcmVnLmgKQEAgLTUxMSw3ICs1MTEsNiBAQAogCXVuc2lnbmVkIHNob3J0CXdvcmRzNjlfNzBbMl07CS8qIHJlc2VydmVkIHdvcmRzIDY5LTcwCiAJCQkJCSAqIGZ1dHVyZSBjb21tYW5kIG92ZXJsYXAgYW5kIHF1ZXVpbmcKIAkJCQkJICovCi0JLyogSERJT19HRVRfSURFTlRJVFkgY3VycmVudGx5IHJldHVybnMgb25seSB3b3JkcyAwIHRocm91Z2ggNzAgKi8KIAl1bnNpZ25lZCBzaG9ydAl3b3JkczcxXzc0WzRdOwkvKiByZXNlcnZlZCB3b3JkcyA3MS03NAogCQkJCQkgKiBmb3IgSURFTlRJRlkgUEFDS0VUIERFVklDRSBjb21tYW5kCiAJCQkJCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtZGV2LmggYi9pbmNsdWRlL2xpbnV4L2kyYy1kZXYuaAppbmRleCAzMTEzMTViLi5mZDUzYmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1kZXYuaApAQCAtMzMsNyArMzMsNyBAQAogICovCiAjZGVmaW5lIEkyQ19SRVRSSUVTCTB4MDcwMQkvKiBudW1iZXIgb2YgdGltZXMgYSBkZXZpY2UgYWRkcmVzcyBzaG91bGQKIAkJCQkgICBiZSBwb2xsZWQgd2hlbiBub3QgYWNrbm93bGVkZ2luZyAqLwotI2RlZmluZSBJMkNfVElNRU9VVAkweDA3MDIJLyogc2V0IHRpbWVvdXQgaW4gamlmZmllcyAtIGNhbGwgd2l0aCBpbnQgKi8KKyNkZWZpbmUgSTJDX1RJTUVPVVQJMHgwNzAyCS8qIHNldCB0aW1lb3V0IGluIHVuaXRzIG9mIDEwIG1zICovCiAKIC8qIE5PVEU6IFNsYXZlIGFkZHJlc3MgaXMgNyBvciAxMCBiaXRzLCBidXQgMTAtYml0IGFkZHJlc3NlcwogICogYXJlIE5PVCBzdXBwb3J0ZWQhIChkdWUgdG8gY29kZSBicm9rZW5uZXNzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggZmNmYmZlYS4uYzg2YzNiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0zNjEsNyArMzYxLDcgQEAKIAlzdHJ1Y3QgbXV0ZXggYnVzX2xvY2s7CiAJc3RydWN0IG11dGV4IGNsaXN0X2xvY2s7CiAKLQlpbnQgdGltZW91dDsKKwlpbnQgdGltZW91dDsJCQkvKiBpbiBqaWZmaWVzICovCiAJaW50IHJldHJpZXM7CiAJc3RydWN0IGRldmljZSBkZXY7CQkvKiB0aGUgYWRhcHRlciBkZXZpY2UgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggMTk0ZGE1YS4uODU0ZWJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL211dGV4Lmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUklTKSB8fCBkZWZpbmVkKENPTkZJR19GUlYpCisjaWYgZGVmaW5lZChDT05GSUdfQ1JJUykgfHwgZGVmaW5lZChDT05GSUdfRlJWKSB8fCBkZWZpbmVkKENPTkZJR19NTjEwMzAwKQogIyBkZWZpbmUgU1VQUE9SVF9WTEJfU1lOQyAwCiAjZWxzZQogIyBkZWZpbmUgU1VQUE9SVF9WTEJfU1lOQyAxCkBAIC0xOTMsMjQgKzE5Myw4IEBACiAJaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RsX2FkZHI7CiB9CiAKLS8qIGZvciBJREUgUENJIGNvbnRyb2xsZXJzIGluIGxlZ2FjeSBtb2RlLCB0ZW1wb3JhcnkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKLXsKLQlzd2l0Y2ggKGJhc2UpIHsKLSNpZmRlZiBDT05GSUdfSUE2NAotCWNhc2UgMHgxZjA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3RvcigxNCk7Ci0JY2FzZSAweDE3MDogcmV0dXJuIGlzYV9pcnFfdG9fdmVjdG9yKDE1KTsKLSNlbHNlCi0JY2FzZSAweDFmMDogcmV0dXJuIDE0OwotCWNhc2UgMHgxNzA6IHJldHVybiAxNTsKLSNlbmRpZgotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfRlJWKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQUykgfHwgZGVmaW5lZChDT05GSUdfTU4xMDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUEFSSVNDKSBcCi0gICAgfHwgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkM2NCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX002OEspIHx8IGRlZmluZWQoQ09ORklHX01JUFMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpCiAjaW5jbHVkZSA8YXNtL2lkZS5oPgogI2Vsc2UKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgpAQCAtNjYzLDcgKzY0Nyw3IEBACiAjZGVmaW5lIHRvX2lkZV9kZXZpY2UoZGV2KQkJY29udGFpbmVyX29mKGRldiwgaWRlX2RyaXZlX3QsIGdlbmRldikKIAogI2RlZmluZSB0b19pZGVfZHJ2KG9iaiwgY29udF90eXBlKQlcCi0JY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNvbnRfdHlwZSwga3JlZikKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY29udF90eXBlLCBkZXYpCiAKICNkZWZpbmUgaWRlX2Rydl9nKGRpc2ssIGNvbnRfdHlwZSkJXAogCWNvbnRhaW5lcl9vZigoZGlzayktPnByaXZhdGVfZGF0YSwgc3RydWN0IGNvbnRfdHlwZSwgZHJpdmVyKQpAQCAtNzk3LDYgKzc4MSw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ190YWJsZTsKIAlpbnQgc2dfbWF4X25lbnRzOwkJLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiBpdCAqLwogCWludCBzZ19uZW50czsJCQkvKiBDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCisJaW50IG9yaWdfc2dfbmVudHM7CiAJaW50IHNnX2RtYV9kaXJlY3Rpb247CQkvKiBkbWEgdHJhbnNmZXIgZGlyZWN0aW9uICovCiAKIAkvKiBkYXRhIHBoYXNlIG9mIHRoZSBhY3RpdmUgY29tbWFuZCAoY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIFBJTy9ETUEpICovCkBAIC04NjUsNyArODUwLDggQEAKIAlpZGVfaHdpZl90CSpwb3J0c1tNQVhfSE9TVF9QT1JUUyArIDFdOwogCXVuc2lnbmVkIGludAluX3BvcnRzOwogCXN0cnVjdCBkZXZpY2UJKmRldlsyXTsKLQl1bnNpZ25lZCBpbnQJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCWludAkJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCWlycV9oYW5kbGVyX3QJaXJxX2hhbmRsZXI7CiAJdW5zaWduZWQgbG9uZwlob3N0X2ZsYWdzOwogCXZvaWQJCSpob3N0X3ByaXY7CiAJaWRlX2h3aWZfdAkqY3VyX3BvcnQ7CS8qIGZvciBob3N0cyByZXF1aXJpbmcgc2VyaWFsaXphdGlvbiAqLwpAQCAtMTE0NCwxMSArMTEzMCwxNCBAQAogZXh0ZXJuIGludCBpZGVfdmxiX2NsazsKIGV4dGVybiBpbnQgaWRlX3BjaV9jbGs7CiAKLWV4dGVybiBpbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2Vjcyk7Ci1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKTsKK2ludCBpZGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOworaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIGludCk7Cit2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCi1leHRlcm4gdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KTsKK3ZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgICBpZGVfZXhwaXJ5X3QgKik7Cit2b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKKwkJICAgICBpZGVfZXhwaXJ5X3QgKik7CiAKIHZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCB1OCwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgaWRlX2V4cGlyeV90ICopOwpAQCAtMTE2NywxMyArMTE1NiwxNCBAQAogCiBpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKiwgaWRlX2RyaXZlX3QgKiwgdTgsIHU4LCB1bnNpZ25lZCBsb25nKTsKIAoraWRlX3N0YXJ0c3RvcF90IGlkZV9kb19wYXJrX3VucGFyayhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fZGV2c2V0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCiBleHRlcm4gaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldCAoaWRlX2RyaXZlX3QgKik7CiAKIGV4dGVybiBpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nLCBpbnQgYXJnKTsKIAotZXh0ZXJuIHZvaWQgaWRlX2RvX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLQogZXh0ZXJuIHZvaWQgaWRlX2VuZF9kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgdTgsIHU4KTsKIAogdm9pZCBpZGVfdGZfZHVtcChjb25zdCBjaGFyICosIHN0cnVjdCBpZGVfdGFza2ZpbGUgKik7CkBAIC0xMTk4LDEwICsxMTg4LDYgQEAKIHU4IGlkZV9yZWFkX2Vycm9yKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKiwgdTE2ICosIHU4ICopOwogCi1leHRlcm4gaW50IGRyaXZlX2lzX3JlYWR5KGlkZV9kcml2ZV90ICopOwotCi12b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCB1MzIsIHUxNiwgdTgpOwotCiBpbnQgaWRlX2NoZWNrX2F0YXBpX2RldmljZShpZGVfZHJpdmVfdCAqLCBjb25zdCBjaGFyICopOwogCiB2b2lkIGlkZV9pbml0X3BjKHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CkBAIC0xMjQ5LDYgKzEyMzUsOCBAQAogCiBpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKK2ludCBpZGVfZGV2X3JlYWRfaWQoaWRlX2RyaXZlX3QgKiwgdTgsIHUxNiAqKTsKKwogZXh0ZXJuIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKik7CiBleHRlcm4gaW50IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoaWRlX2RyaXZlX3QgKiwgdTgpOwogZXh0ZXJuIHU4IGVpZ2h0eV9uaW50eV90aHJlZSAoaWRlX2RyaXZlX3QgKik7CkBAIC0xMjc4LDcgKzEyNjYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwgaW50LAordm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosCiAJCQkgaHdfcmVnc190ICosIGh3X3JlZ3NfdCAqKik7CiB2b2lkIGlkZV9zZXR1cF9wY2lfbm9pc2Uoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7CiAKQEAgLTEzNDcsMTAgKzEzMzUsNiBAQAogCUlERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPCT0gKDEgPDwgMTkpLAogCS8qIHNlcmlhbGl6ZSBwb3J0cyAqLwogCUlERV9IRkxBR19TRVJJQUxJWkUJCT0gKDEgPDwgMjApLAotCS8qIHVzZSBsZWdhY3kgSVJRcyAqLwotCUlERV9IRkxBR19MRUdBQ1lfSVJRUwkJPSAoMSA8PCAyMSksCi0JLyogZm9yY2UgdXNlIG9mIGxlZ2FjeSBJUlFzICovCi0JSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTCT0gKDEgPDwgMjIpLAogCS8qIGhvc3QgaXMgVFJNMjkwICovCiAJSURFX0hGTEFHX1RSTTI5MAkJPSAoMSA8PCAyMyksCiAJLyogdXNlIDMyLWJpdCBJL08gb3BzICovCkBAIC0xMzc4LDcgKzEzNjIsNyBAQAogCiBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyB7CiAJY2hhcgkJCSpuYW1lOwotCXVuc2lnbmVkIGludAkJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCWludAkJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKIAl2b2lkCQkJKCppbml0X2lvcHMpKGlkZV9od2lmX3QgKik7CiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKCppbml0X2h3aWYpKGlkZV9od2lmX3QgKik7CiAJaW50CQkJKCppbml0X2RtYSkoaWRlX2h3aWZfdCAqLApAQCAtMTQ2OSw2ICsxNDUzLDcgQEAKIAogdm9pZCBpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKik7CitpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICosIGludCk7CiAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpZGVfaWRfZG1hX2J1ZyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KQEAgLTE0ODAsMjEgKzE0NjUsMjQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfZG1hX3ZlcmJvc2UoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQogc3RhdGljIGlubGluZSBpbnQgaWRlX3NldF9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NoZWNrX2RtYV9jcmMoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorc3RhdGljIGlubGluZSBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKSB7IHJldHVybiBpZGVfc3RvcHBlZDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERUFDUEkKK2ludCBpZGVfYWNwaV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBpZGVfYWNwaV9leGVjX3RmcyhpZGVfZHJpdmVfdCAqZHJpdmUpOwogZXh0ZXJuIHZvaWQgaWRlX2FjcGlfZ2V0X3RpbWluZyhpZGVfaHdpZl90ICpod2lmKTsKIGV4dGVybiB2b2lkIGlkZV9hY3BpX3B1c2hfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpOwotZXh0ZXJuIHZvaWQgaWRlX2FjcGlfaW5pdChpZGVfaHdpZl90ICpod2lmKTsKK3ZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKik7CiB2b2lkIGlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGlkZV9od2lmX3QgKik7CiBleHRlcm4gdm9pZCBpZGVfYWNwaV9zZXRfc3RhdGUoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpZGVfYWNwaV9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9hY3BpX2V4ZWNfdGZzKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX2dldF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9wdXNoX3RpbWluZyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQotc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX3NldF9zdGF0ZShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pIHt9CiAjZW5kaWYKQEAgLTE1MjgsOSArMTUxNiw3IEBACiAJaHdpZi0+aHdpZl9kYXRhID0gZGF0YTsKIH0KIAotY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKTsKIGV4dGVybiB2b2lkIGlkZV90b2dnbGVfYm91bmNlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKTsKLWV4dGVybiBpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKTsKIAogdTY0IGlkZV9nZXRfbGJhX2FkZHIoc3RydWN0IGlkZV90YXNrZmlsZSAqLCBpbnQpOwogdTggaWRlX2R1bXBfc3RhdHVzKGlkZV9kcml2ZV90ICosIGNvbnN0IGNoYXIgKiwgdTgpOwpAQCAtMTU2OSwxNCArMTU1NSwxOCBAQAogCQkgICAgICBzdHJ1Y3QgaWRlX3RpbWluZyAqLCB1bnNpZ25lZCBpbnQpOwogaW50IGlkZV90aW1pbmdfY29tcHV0ZShpZGVfZHJpdmVfdCAqLCB1OCwgc3RydWN0IGlkZV90aW1pbmcgKiwgaW50LCBpbnQpOwogCisjaWZkZWYgQ09ORklHX0lERV9YRkVSX01PREUKIGludCBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KGNoYXIgKik7Ci0KK2NvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTgpOwogdTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7Ci0KIGludCBpZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICosIHU4KTsKIGludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICosIHU4KTsKLQogdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqLCB1OCk7CitpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKiwgdTgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkgeyByZXR1cm4gLTE7IH0KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3NldF9tYXhfcGlvKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTE2MDksNiArMTU5OSwxMCBAQAogI2RlZmluZSBpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZGV2LCBwb3J0KSBcCiAJZm9yICgoaSkgPSAwOyAoKGRldikgPSAocG9ydCktPmRldmljZXNbaV0pIHx8IChpKSA8IE1BWF9EUklWRVM7IChpKSsrKQogCisjZGVmaW5lIGlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRldiwgcG9ydCkgXAorCWZvciAoKGkpID0gMDsgKChkZXYpID0gKHBvcnQpLT5kZXZpY2VzW2ldKSB8fCAoaSkgPCBNQVhfRFJJVkVTOyAoaSkrKykgXAorCQlpZiAoKGRldiktPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQorCiAjZGVmaW5lIGlkZV9ob3N0X2Zvcl9lYWNoX3BvcnQoaSwgcG9ydCwgaG9zdCkgXAogCWZvciAoKGkpID0gMDsgKChwb3J0KSA9IChob3N0KS0+cG9ydHNbaV0pIHx8IChpKSA8IE1BWF9IT1NUX1BPUlRTOyAoaSkrKykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKaW5kZXggMjdlYTJhYy4uMDgzNWRlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaWZuZGVmIF9MSU5VWF9JRl9BUkNORVRfSAogI2RlZmluZSBfTElOVVhfSUZfQVJDTkVUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIAogCkBAIC01NywxMCArNTgsMTAgQEAKICAqLwogc3RydWN0IGFyY19yZmMxMjAxCiB7Ci0gICAgdWludDhfdCAgcHJvdG87CQkvKiBwcm90b2NvbCBJRCBmaWVsZCAtIHZhcmllcwkJKi8KLSAgICB1aW50OF90ICBzcGxpdF9mbGFnOwkvKiBmb3IgdXNlIHdpdGggc3BsaXQgcGFja2V0cwkJKi8KKyAgICBfX3U4ICBwcm90bzsJCS8qIHByb3RvY29sIElEIGZpZWxkIC0gdmFyaWVzCQkqLworICAgIF9fdTggIHNwbGl0X2ZsYWc7CS8qIGZvciB1c2Ugd2l0aCBzcGxpdCBwYWNrZXRzCQkqLwogICAgIF9fYmUxNiAgIHNlcXVlbmNlOwkJLyogc2VxdWVuY2UgbnVtYmVyCQkJKi8KLSAgICB1aW50OF90ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KKyAgICBfX3U4ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KIH07CiAjZGVmaW5lIFJGQzEyMDFfSERSX1NJWkUgNAogCkBAIC03MCw4ICs3MSw4IEBACiAgKi8KIHN0cnVjdCBhcmNfcmZjMTA1MQogewotICAgIHVpbnQ4X3QgcHJvdG87CQkvKiBBUkNfUF9SRkMxMDUxX0FSUC9SRkMxMDUxX0lQCSovCi0gICAgdWludDhfdCBwYXlsb2FkWzBdOwkJLyogNTA3IGJ5dGVzCQkJKi8KKyAgICBfX3U4IHByb3RvOwkJLyogQVJDX1BfUkZDMTA1MV9BUlAvUkZDMTA1MV9JUAkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDUwNyBieXRlcwkJCSovCiB9OwogI2RlZmluZSBSRkMxMDUxX0hEUl9TSVpFIDEKIApAQCAtODIsMjAgKzgzLDIwIEBACiAgKi8KIHN0cnVjdCBhcmNfZXRoX2VuY2FwCiB7Ci0gICAgdWludDhfdCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCisgICAgX191OCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCiAgICAgc3RydWN0IGV0aGhkciBldGg7CQkvKiBzdGFuZGFyZCBldGhlcm5ldCBoZWFkZXIgKHl1Y2shKQkqLwotICAgIHVpbnQ4X3QgcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLwogfTsKICNkZWZpbmUgRVRIX0VOQ0FQX0hEUl9TSVpFIDE0CiAKIAogc3RydWN0IGFyY19jYXAKIHsKLQl1aW50OF90IHByb3RvOwotCXVpbnQ4X3QgY29va2llW3NpemVvZihpbnQpXTsgICAvKiBBY3R1YWxseSBOT1Qgc2VudCBvdmVyIHRoZSBuZXR3b3JrICovCisJX191OCBwcm90bzsKKwlfX3U4IGNvb2tpZVtzaXplb2YoaW50KV07ICAgLyogQWN0dWFsbHkgTk9UIHNlbnQgb3ZlciB0aGUgbmV0d29yayAqLwogCXVuaW9uIHsKLQkJdWludDhfdCBhY2s7Ci0JCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA3IGJ5dGVzICovCisJCV9fdTggYWNrOworCQlfX3U4IHJhd1swXTsJCS8qIDUwNyBieXRlcyAqLwogCX0gbWVzOwogfTsKIApAQCAtMTA5LDcgKzExMCw3IEBACiAgKi8KIHN0cnVjdCBhcmNfaGFyZHdhcmUKIHsKLSAgICB1aW50OF90ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KKyAgICBfX3U4ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KICAgICAgICAgICAgICBkZXN0LAkJLyogZGVzdGluYXRpb24gQVJDbmV0IC0gMCBmb3IgYnJvYWRjYXN0ICAgICovCiAgICAgCSAgICAgb2Zmc2V0WzJdOwkJLyogb2Zmc2V0IGJ5dGVzIChzb21lIHdlaXJkIHNlbWFudGljcykgICAgICovCiB9OwpAQCAtMTMwLDcgKzEzMSw3IEBACiAJc3RydWN0IGFyY19yZmMxMDUxICAgcmZjMTA1MTsKIAlzdHJ1Y3QgYXJjX2V0aF9lbmNhcCBldGhfZW5jYXA7CiAJc3RydWN0IGFyY19jYXAgICAgICAgY2FwOwotCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA4IGJ5dGVzCQkJCSovCisJX191OCByYXdbMF07CQkvKiA1MDggYnl0ZXMJCQkJKi8KICAgICB9IHNvZnQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmggYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKaW5kZXggYzdhNjY4OC4uM2ExNGIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaApAQCAtMjYsNyArMjYsNyBAQAogICovCiBzdHJ1Y3QgcHBwb2wydHBfYWRkcgogewotCXBpZF90CXBpZDsJCQkvKiBwaWQgdGhhdCBvd25zIHRoZSBmZC4KKwlfX2tlcm5lbF9waWRfdAlwaWQ7CQkvKiBwaWQgdGhhdCBvd25zIHRoZSBmZC4KIAkJCQkJICogMCA9PiBjdXJyZW50ICovCiAJaW50CWZkOwkJCS8qIEZEIG9mIFVEUCBzb2NrZXQgdG8gdXNlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKaW5kZXggZjhmZjkxOC4uZTFmZjViMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKQEAgLTIxMCw2ICsyMTAsNyBAQAogCiAJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgaGVhZGVyLiAqLwogCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBWTEFOX0hMRU4sIDIgKiBWTEFOX0VUSF9BTEVOKTsKKwlza2ItPm1hY19oZWFkZXIgLT0gVkxBTl9ITEVOOwogCiAJLyogZmlyc3QsIHRoZSBldGhlcm5ldCB0eXBlICovCiAJdmV0aC0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbWEuaCBiL2luY2x1ZGUvbGludXgvaW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyYWE0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW1hLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JTUFfSAorI2RlZmluZSBfTElOVVhfSU1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CitzdHJ1Y3QgbGludXhfYmlucHJtOworCisjaWZkZWYgQ09ORklHX0lNQQorZXh0ZXJuIGludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKK2V4dGVybiBpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgaW1hX2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzayk7CitleHRlcm4gdm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKK2V4dGVybiBpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KTsKK2V4dGVybiB2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpOworCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWFfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuOworfQorI2VuZGlmIC8qIENPTkZJR19JTUFfSCAqLworI2VuZGlmIC8qIF9MSU5VWF9JTUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbjYuaCBiL2luY2x1ZGUvbGludXgvaW42LmgKaW5kZXggYmM0OTIwNC4uNzE4YmYyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luNi5oCkBAIC00NCwxMSArNDQsMTEgQEAKICAqIE5PVEU6IEJlIGF3YXJlIHRoZSBJTjZBRERSXyogY29uc3RhbnRzIGFuZCBpbjZhZGRyXyogZXh0ZXJuYWxzIGFyZSBkZWZpbmVkCiAgKiBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIG5vdCBpbiBob3N0IGJ5dGUgb3JkZXIgYXMgYXJlIHRoZSBJUHY0IGVxdWl2YWxlbnRzCiAgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfYW55OwogI2RlZmluZSBJTjZBRERSX0FOWV9JTklUIHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfSB9IH0KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9sb29wYmFjazsKICNkZWZpbmUgSU42QUREUl9MT09QQkFDS19JTklUIHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEgfSB9IH0KLSNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbGlua2xvY2FsX2FsbG5vZGVzOwogI2RlZmluZSBJTjZBRERSX0xJTktMT0NBTF9BTExOT0RFU19JTklUCVwKIAkJeyB7IHsgMHhmZiwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSB9IH0gfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggZTc1MmQ5Ny4uYWYxZGU5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJLm5yX2NwdXNfYWxsb3dlZCA9IE5SX0NQVVMsCQkJCVwKIAl9LAkJCQkJCQkJXAogCS50YXNrcwkJPSBMSVNUX0hFQURfSU5JVCh0c2sudGFza3MpLAkJCVwKKwkucHVzaGFibGVfdGFza3MgPSBQTElTVF9OT0RFX0lOSVQodHNrLnB1c2hhYmxlX3Rhc2tzLCBNQVhfUFJJTyksIFwKIAkucHRyYWNlZAk9IExJU1RfSEVBRF9JTklUKHRzay5wdHJhY2VkKSwJCQlcCiAJLnB0cmFjZV9lbnRyeQk9IExJU1RfSEVBRF9JTklUKHRzay5wdHJhY2VfZW50cnkpLAkJXAogCS5yZWFsX3BhcmVudAk9ICZ0c2ssCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDEyNDlhMGMuLjZiMjgwNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTY2MSw2ICs2NjEsNyBAQAogI2RlZmluZSBTV19ET0NLCQkJMHgwNSAgLyogc2V0ID0gcGx1Z2dlZCBpbnRvIGRvY2sgKi8KICNkZWZpbmUgU1dfTElORU9VVF9JTlNFUlQJMHgwNiAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KICNkZWZpbmUgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQgMHgwNyAgLyogc2V0ID0gbWVjaGFuaWNhbCBzd2l0Y2ggc2V0ICovCisjZGVmaW5lIFNXX1ZJREVPT1VUX0lOU0VSVAkweDA4ICAvKiBzZXQgPSBpbnNlcnRlZCAqLwogI2RlZmluZSBTV19NQVgJCQkweDBmCiAjZGVmaW5lIFNXX0NOVAkJCShTV19NQVgrMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCmluZGV4IGM0ZjZjMTAuLmQyZTNjYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKQEAgLTE5NCw2ICsxOTQsNyBAQAogLyogRlNUU19SRUcgKi8KICNkZWZpbmUgRE1BX0ZTVFNfUFBGICgodTMyKTIpCiAjZGVmaW5lIERNQV9GU1RTX1BGTyAoKHUzMikxKQorI2RlZmluZSBETUFfRlNUU19JUUUgKDEgPDwgNCkKICNkZWZpbmUgZG1hX2ZzdHNfZmF1bHRfcmVjb3JkX2luZGV4KHMpICgoKHMpID4+IDgpICYgMHhmZikKIAogLyogRlJDRF9SRUcsIDMyIGJpdHMgYWNjZXNzICovCkBAIC0zMjgsNyArMzI5LDcgQEAKIAkJCSAgdW5zaWduZWQgaW50IHNpemVfb3JkZXIsIHU2NCB0eXBlLAogCQkJICBpbnQgbm9uX3ByZXNlbnRfZW50cnlfZmx1c2gpOwogCi1leHRlcm4gdm9pZCBxaV9zdWJtaXRfc3luYyhzdHJ1Y3QgcWlfZGVzYyAqZGVzYywgc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gaW50IHFpX3N1Ym1pdF9zeW5jKHN0cnVjdCBxaV9kZXNjICpkZXNjLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIAogZXh0ZXJuIHZvaWQgKmludGVsX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCBkbWFfYWRkcl90ICosIGdmcF90KTsKIGV4dGVybiB2b2lkIGludGVsX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIHZvaWQgKiwgZG1hX2FkZHJfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA5MTI3ZjZiLi45MTY1OGQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTYxLDYgKzYxLDE3IEBACiAKIHR5cGVkZWYgaXJxcmV0dXJuX3QgKCppcnFfaGFuZGxlcl90KShpbnQsIHZvaWQgKik7CiAKKy8qKgorICogc3RydWN0IGlycWFjdGlvbiAtIHBlciBpbnRlcnJ1cHQgYWN0aW9uIGRlc2NyaXB0b3IKKyAqIEBoYW5kbGVyOglpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbgorICogQGZsYWdzOglmbGFncyAoc2VlIElSUUZfKiBhYm92ZSkKKyAqIEBtYXNrOglubyBjb21tZW50IGFzIGl0IGlzIHVzZWxlc3MgYW5kIGFib3V0IHRvIGJlIHJlbW92ZWQKKyAqIEBuYW1lOgluYW1lIG9mIHRoZSBkZXZpY2UKKyAqIEBkZXZfaWQ6CWNvb2tpZSB0byBpZGVudGlmeSB0aGUgZGV2aWNlCisgKiBAbmV4dDoJcG9pbnRlciB0byB0aGUgbmV4dCBpcnFhY3Rpb24gZm9yIHNoYXJlZCBpbnRlcnJ1cHRzCisgKiBAaXJxOglpbnRlcnJ1cHQgbnVtYmVyCisgKiBAZGlyOglwb2ludGVyIHRvIHRoZSBwcm9jL2lycS9OTi9uYW1lIGVudHJ5CisgKi8KIHN0cnVjdCBpcnFhY3Rpb24gewogCWlycV9oYW5kbGVyX3QgaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDYyLDYgKzQ3MywxMiBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX0hBUkRJUlFTKSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19TSElSUSkKK2V4dGVybiB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKSB7IH0KKyNlbmRpZgorCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiAKIHN0cnVjdCBpcnFfZGVzYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW8tbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9pby1tYXBwaW5nLmgKaW5kZXggODJkZjMxNy4uMGFkYjBmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pby1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9pby1tYXBwaW5nLmgKQEAgLTMwLDExICszMCwxNCBAQAogICogU2VlIERvY3VtZW50YXRpb24vaW9fbWFwcGluZy50eHQKICAqLwogCi0vKiB0aGlzIHN0cnVjdCBpc24ndCBhY3R1YWxseSBkZWZpbmVkIGFueXdoZXJlICovCi1zdHJ1Y3QgaW9fbWFwcGluZzsKLQogI2lmZGVmIENPTkZJR19IQVZFX0FUT01JQ19JT01BUAogCitzdHJ1Y3QgaW9fbWFwcGluZyB7CisJcmVzb3VyY2Vfc2l6ZV90IGJhc2U7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXBncHJvdF90IHByb3Q7Cit9OworCiAvKgogICogRm9yIHNtYWxsIGFkZHJlc3Mgc3BhY2UgbWFjaGluZXMsIG1hcHBpbmcgbGFyZ2Ugb2JqZWN0cwogICogaW50byB0aGUga2VybmVsIHZpcnR1YWwgc3BhY2UgaXNuJ3QgcHJhY3RpY2FsLiBXaGVyZQpAQCAtNDMsMjMgKzQ2LDQwIEBACiAgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fbWFwcGluZyAqCi1pb19tYXBwaW5nX2NyZWF0ZV93Yyh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK2lvX21hcHBpbmdfY3JlYXRlX3djKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgaW9fbWFwcGluZyAqKSBiYXNlOworCXN0cnVjdCBpb19tYXBwaW5nICppb21hcDsKKworCWlmICghaXNfaW9fbWFwcGluZ19wb3NzaWJsZShiYXNlLCBzaXplKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpb21hcCA9IGttYWxsb2Moc2l6ZW9mKCppb21hcCksIEdGUF9LRVJORUwpOworCWlmICghaW9tYXApCisJCXJldHVybiBOVUxMOworCisJaW9tYXAtPmJhc2UgPSBiYXNlOworCWlvbWFwLT5zaXplID0gc2l6ZTsKKwlpb21hcC0+cHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUoX19wZ3Byb3QoX19QQUdFX0tFUk5FTCkpOworCXJldHVybiBpb21hcDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBpb19tYXBwaW5nX2ZyZWUoc3RydWN0IGlvX21hcHBpbmcgKm1hcHBpbmcpCiB7CisJa2ZyZWUobWFwcGluZyk7CiB9CiAKIC8qIEF0b21pYyBtYXAvdW5tYXAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqCiBpb19tYXBwaW5nX21hcF9hdG9taWNfd2Moc3RydWN0IGlvX21hcHBpbmcgKm1hcHBpbmcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCW9mZnNldCArPSAodW5zaWduZWQgbG9uZykgbWFwcGluZzsKLQlyZXR1cm4gaW9tYXBfYXRvbWljX3Byb3RfcGZuKG9mZnNldCA+PiBQQUdFX1NISUZULCBLTV9VU0VSMCwKLQkJCQkgICAgIF9fcGdwcm90KF9fUEFHRV9LRVJORUxfV0MpKTsKKwlyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyOworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJQlVHX09OKG9mZnNldCA+PSBtYXBwaW5nLT5zaXplKTsKKwlwaHlzX2FkZHIgPSBtYXBwaW5nLT5iYXNlICsgb2Zmc2V0OworCXBmbiA9ICh1bnNpZ25lZCBsb25nKSAocGh5c19hZGRyID4+IFBBR0VfU0hJRlQpOworCXJldHVybiBpb21hcF9hdG9taWNfcHJvdF9wZm4ocGZuLCBLTV9VU0VSMCwgbWFwcGluZy0+cHJvdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtNzEsOCArOTEsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqCiBpb19tYXBwaW5nX21hcF93YyhzdHJ1Y3QgaW9fbWFwcGluZyAqbWFwcGluZywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0Jb2Zmc2V0ICs9ICh1bnNpZ25lZCBsb25nKSBtYXBwaW5nOwotCXJldHVybiBpb3JlbWFwX3djKG9mZnNldCwgUEFHRV9TSVpFKTsKKwlyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyOworCisJQlVHX09OKG9mZnNldCA+PSBtYXBwaW5nLT5zaXplKTsKKwlwaHlzX2FkZHIgPSBtYXBwaW5nLT5iYXNlICsgb2Zmc2V0OworCisJcmV0dXJuIGlvcmVtYXBfd2MocGh5c19hZGRyLCBQQUdFX1NJWkUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTgzLDkgKzEwNywxMiBAQAogCiAjZWxzZQogCisvKiB0aGlzIHN0cnVjdCBpc24ndCBhY3R1YWxseSBkZWZpbmVkIGFueXdoZXJlICovCitzdHJ1Y3QgaW9fbWFwcGluZzsKKwogLyogQ3JlYXRlIHRoZSBpb19tYXBwaW5nIG9iamVjdCovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpb19tYXBwaW5nICoKLWlvX21hcHBpbmdfY3JlYXRlX3djKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQoraW9fbWFwcGluZ19jcmVhdGVfd2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gKHN0cnVjdCBpb19tYXBwaW5nICopIGlvcmVtYXBfd2MoYmFzZSwgc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwX3ZzLmggYi9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKaW5kZXggMGY0MzRhMi4uMTQ4MjY1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBfdnMuaApAQCAtOTYsMTAgKzk2LDEwIEBACiAgKi8KIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXIgewogCS8qIHZpcnR1YWwgc2VydmljZSBhZGRyZXNzZXMgKi8KLQl1X2ludDE2X3QJCXByb3RvY29sOworCV9fdTE2CQlwcm90b2NvbDsKIAlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBpcCBhZGRyZXNzICovCiAJX19iZTE2CQkJcG9ydDsKLQl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCisJX191MzIJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiB2aXJ0dWFsIHNlcnZpY2Ugb3B0aW9ucyAqLwogCWNoYXIJCQlzY2hlZF9uYW1lW0lQX1ZTX1NDSEVETkFNRV9NQVhMRU5dOwpAQCAtMTE5LDggKzExOSw4IEBACiAJaW50CQkJd2VpZ2h0OwkJLyogZGVzdGluYXRpb24gd2VpZ2h0ICovCiAKIAkvKiB0aHJlc2hvbGRzIGZvciBhY3RpdmUgY29ubmVjdGlvbnMgKi8KLQl1X2ludDMyX3QJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KLQl1X2ludDMyX3QJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLworCV9fdTMyCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCiB9OwogCiAKQEAgLTE1OSwxMCArMTU5LDEwIEBACiAvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX1NFUlZJQ0UgKi8KIHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5IHsKIAkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCi0JdV9pbnQxNl90CQlwcm90b2NvbDsKKwlfX3UxNgkJcHJvdG9jb2w7CiAJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyAqLwogCV9fYmUxNgkJCXBvcnQ7Ci0JdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogc2VydmljZSBvcHRpb25zICovCiAJY2hhcgkJCXNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CkBAIC0xODQsMTIgKzE4NCwxMiBAQAogCXVuc2lnbmVkCQljb25uX2ZsYWdzOwkvKiBjb25uZWN0aW9uIGZsYWdzICovCiAJaW50CQkJd2VpZ2h0OwkJLyogZGVzdGluYXRpb24gd2VpZ2h0ICovCiAKLQl1X2ludDMyX3QJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KLQl1X2ludDMyX3QJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLworCV9fdTMyCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCiAKLQl1X2ludDMyX3QJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KLQl1X2ludDMyX3QJCWluYWN0Y29ubnM7CS8qIGluYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQlwZXJzaXN0Y29ubnM7CS8qIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJYWN0aXZlY29ubnM7CS8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqLworCV9fdTMyCQlpbmFjdGNvbm5zOwkvKiBpbmFjdGl2ZSBjb25uZWN0aW9ucyAqLworCV9fdTMyCQlwZXJzaXN0Y29ubnM7CS8qIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgKi8KIAogCS8qIHN0YXRpc3RpY3MgKi8KIAlzdHJ1Y3QgaXBfdnNfc3RhdHNfdXNlciBzdGF0czsKQEAgLTE5OSwxMCArMTk5LDEwIEBACiAvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX0RFU1RTICovCiBzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzIHsKIAkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCi0JdV9pbnQxNl90CQlwcm90b2NvbDsKKwlfX3UxNgkJcHJvdG9jb2w7CiAJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyAqLwogCV9fYmUxNgkJCXBvcnQ7Ci0JdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogbnVtYmVyIG9mIHJlYWwgc2VydmVycyAqLwogCXVuc2lnbmVkIGludAkJbnVtX2Rlc3RzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggZjg5OWI1MC4uNmRiOTM5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0xNjAsMTIgKzE2MCwxMCBAQAogICovCiBzdHJ1Y3QgaXJxX2Rlc2MgewogCXVuc2lnbmVkIGludAkJaXJxOwotI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCiAJc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnRpbWVyX3JhbmRfc3RhdGU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgKmtzdGF0X2lycXM7Ci0jIGlmZGVmIENPTkZJR19JTlRSX1JFTUFQCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgICAgICAqaXJxXzJfaW9tbXU7Ci0jIGVuZGlmCiAjZW5kaWYKIAlpcnFfZmxvd19oYW5kbGVyX3QJaGFuZGxlX2lycTsKIAlzdHJ1Y3QgaXJxX2NoaXAJCSpjaGlwOwpAQCAtMjAyLDEyICsyMDAsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXTsKICNlbHNlIC8qIENPTkZJR19TUEFSU0VfSVJRICovCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICptb3ZlX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIGludCBjcHUpOwotCi0jZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoREVTQykgXAotCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKLSNkZWZpbmUga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycW5vLCBERVNDKSBcCi0JKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKyspCi0KICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFX0lSUSAqLwogCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzY19hbGxvY19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CkBAIC0yMjYsNyArMjE4LDYgQEAKICAqIE1pZ3JhdGlvbiBoZWxwZXJzIGZvciBvYnNvbGV0ZSBuYW1lcywgdGhleSB3aWxsIGdvIGF3YXk6CiAgKi8KICNkZWZpbmUgaHdfaW50ZXJydXB0X3R5cGUJaXJxX2NoaXAKLXR5cGVkZWYgc3RydWN0IGlycV9jaGlwCQlod19pcnFfY29udHJvbGxlcjsKICNkZWZpbmUgbm9faXJxX3R5cGUJCW5vX2lycV9jaGlwCiB0eXBlZGVmIHN0cnVjdCBpcnFfZGVzYwkJaXJxX2Rlc2NfdDsKIApAQCAtMjM2LDYgKzIyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogCiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3QpOwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIApAQCAtMjgwLDcgKzI3Miw3IEBACiB9CiAKIC8qIEhhbmRsZSBpcnEgYWN0aW9uIGNoYWluczogKi8KLWV4dGVybiBpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworZXh0ZXJuIGlycXJldHVybl90IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAogLyoKICAqIEJ1aWx0LWluIElSUSBoYW5kbGVycyBmb3IgdmFyaW91cyBJUlEgdHlwZXMsCkBAIC0zMjUsNyArMzE3LDcgQEAKIAogLyogSGFuZGxpbmcgb2YgdW5oYW5kbGVkIGFuZCBzcHVyaW91cyBpbnRlcnJ1cHRzOiAqLwogZXh0ZXJuIHZvaWQgbm90ZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAotCQkJICAgaW50IGFjdGlvbl9yZXQpOworCQkJICAgaXJxcmV0dXJuX3QgYWN0aW9uX3JldCk7CiAKIC8qIFJlc2VuZGluZyBvZiBpbnRlcnJ1cHRzIDoqLwogdm9pZCBjaGVja19pcnFfcmVzZW5kKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycW5yLmggYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKaW5kZXggODZhZjkyZS4uNTJlYmJiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFuci5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxbnIuaApAQCAtMjgsMTMgKzI4LDE3IEBACiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCQkJCQlcCiAJZm9yIChpcnEgPSAwLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsgaXJxIDwgbnJfaXJxczsJCVwKIAkgICAgIGlycSsrLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKSkJCQkJXAotCQlpZiAoZGVzYykKKwkJaWYgKCFkZXNjKQkJCQkJCVwKKwkJCTsJCQkJCQlcCisJCWVsc2UKIAogCiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGlycSwgZGVzYykJCQkJXAogCWZvciAoaXJxID0gbnJfaXJxcyAtIDEsIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOyBpcnEgPj0gMDsJXAogCSAgICAgaXJxLS0sIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpKQkJCQlcCi0JCWlmIChkZXNjKQorCQlpZiAoIWRlc2MpCQkJCQkJXAorCQkJOwkJCQkJCVwKKwkJZWxzZQogCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaCBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKaW5kZXggODgxODgzYy4uYzU1ODRjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCkBAIC0xLDI1ICsxLDE3IEBACi0vKiBpcnFyZXR1cm4uaCAqLwogI2lmbmRlZiBfTElOVVhfSVJRUkVUVVJOX0gKICNkZWZpbmUgX0xJTlVYX0lSUVJFVFVSTl9ICiAKLS8qCi0gKiBGb3IgMi40LnggY29tcGF0aWJpbGl0eSwgMi40LnggY2FuIHVzZQotICoKLSAqCXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKLSAqCSNkZWZpbmUgSVJRX05PTkUKLSAqCSNkZWZpbmUgSVJRX0hBTkRMRUQKLSAqCSNkZWZpbmUgSVJRX1JFVFZBTCh4KQotICoKLSAqIFRvIG1peCBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBpcnEgaGFuZGxlciByZXR1cm5zLgotICoKLSAqIElSUV9OT05FIG1lYW5zIHdlIGRpZG4ndCBoYW5kbGUgaXQuCi0gKiBJUlFfSEFORExFRCBtZWFucyB0aGF0IHdlIGRpZCBoYXZlIGEgdmFsaWQgaW50ZXJydXB0IGFuZCBoYW5kbGVkIGl0LgotICogSVJRX1JFVFZBTCh4KSBzZWxlY3RzIG9uIHRoZSB0d28gZGVwZW5kaW5nIG9uIHggYmVpbmcgbm9uLXplcm8gKGZvciBoYW5kbGVkKQorLyoqCisgKiBlbnVtIGlycXJldHVybgorICogQElSUV9OT05FCQlpbnRlcnJ1cHQgd2FzIG5vdCBmcm9tIHRoaXMgZGV2aWNlCisgKiBASVJRX0hBTkRMRUQJCWludGVycnVwdCB3YXMgaGFuZGxlZCBieSB0aGlzIGRldmljZQogICovCi10eXBlZGVmIGludCBpcnFyZXR1cm5fdDsKK2VudW0gaXJxcmV0dXJuIHsKKwlJUlFfTk9ORSwKKwlJUlFfSEFORExFRCwKK307CiAKLSNkZWZpbmUgSVJRX05PTkUJKDApCi0jZGVmaW5lIElSUV9IQU5ETEVECSgxKQotI2RlZmluZSBJUlFfUkVUVkFMKHgpCSgoeCkgIT0gMCkKK3R5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CisjZGVmaW5lIElSUV9SRVRWQUwoeCkJKCh4KSAhPSBJUlFfTk9ORSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oIGIvaW5jbHVkZS9saW51eC9pdnR2ZmIuaAppbmRleCBlMjBhZjQ3Li45ZDg4YjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKQEAgLTMzLDYgKzMzLDYgQEAKIH07CiAKICNkZWZpbmUgSVZUVkZCX0lPQ19ETUFfRlJBTUUgCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2ZmJfZG1hX2ZyYW1lKQotI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgdV9pbnQzMl90KQorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCBiMjhiMzdlLi40ZDI0OGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtMTE1MCw3ICsxMTUwLDggQEAKIGV4dGVybiBpbnQJICAgamJkMl9qb3VybmFsX2JtYXAoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyAqKTsKIGV4dGVybiBpbnQJICAgamJkMl9qb3VybmFsX2ZvcmNlX2NvbW1pdChqb3VybmFsX3QgKik7CiBleHRlcm4gaW50CSAgIGpiZDJfam91cm5hbF9maWxlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBqYmQyX2lub2RlICppbm9kZSk7Ci1leHRlcm4gaW50CSAgIGpiZDJfam91cm5hbF9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKHN0cnVjdCBqYmQyX2lub2RlICppbm9kZSwgbG9mZl90IG5ld19zaXplKTsKK2V4dGVybiBpbnQJICAgamJkMl9qb3VybmFsX2JlZ2luX29yZGVyZWRfdHJ1bmNhdGUoam91cm5hbF90ICpqb3VybmFsLAorCQkJCXN0cnVjdCBqYmQyX2lub2RlICppbm9kZSwgbG9mZl90IG5ld19zaXplKTsKIGV4dGVybiB2b2lkCSAgIGpiZDJfam91cm5hbF9pbml0X2piZF9pbm9kZShzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkCSAgIGpiZDJfam91cm5hbF9yZWxlYXNlX2piZF9pbm9kZShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pmZnMyLmggYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKaW5kZXggZGE3MjBiYy4uMmIzMmQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qZmZzMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamZmczIuaApAQCAtMTIsNiArMTIsNyBAQAogI2lmbmRlZiBfX0xJTlVYX0pGRlMyX0hfXwogI2RlZmluZSBfX0xJTlVYX0pGRlMyX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiAvKiBZb3UgbXVzdCBpbmNsdWRlIHNvbWV0aGluZyB3aGljaCBkZWZpbmVzIHRoZSBDOTkgdWludFhYX3QgdHlwZXMuIApAQCAtOTEsMTUgKzkyLDE1IEBACiAgICBieXRlc3dhcHBpbmcgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IHYzMjsKKwlfX3UzMiB2MzI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGppbnQzMl90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QgbTsKKwlfX3UzMiBtOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqbW9kZV90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDE2X3QgdjE2OworCV9fdTE2IHYxNjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgamludDE2X3Q7CiAKIHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUKQEAgLTEyMSwxMiArMTIyLDEyIEBACiAJamludDMyX3QgdmVyc2lvbjsKIAlqaW50MzJfdCBpbm87IC8qID09IHplcm8gZm9yIHVubGluayAqLwogCWppbnQzMl90IG1jdGltZTsKLQl1aW50OF90IG5zaXplOwotCXVpbnQ4X3QgdHlwZTsKLQl1aW50OF90IHVudXNlZFsyXTsKKwlfX3U4IG5zaXplOworCV9fdTggdHlwZTsKKwlfX3U4IHVudXNlZFsyXTsKIAlqaW50MzJfdCBub2RlX2NyYzsKIAlqaW50MzJfdCBuYW1lX2NyYzsKLQl1aW50OF90IG5hbWVbMF07CisJX191OCBuYW1lWzBdOwogfTsKIAogLyogVGhlIEpGRlMyIHJhdyBpbm9kZSBzdHJ1Y3R1cmU6IFVzZWQgZm9yIHN0b3JhZ2Ugb24gcGh5c2ljYWwgbWVkaWEuICAqLwpAQCAtMTUzLDEyICsxNTQsMTIgQEAKIAlqaW50MzJfdCBvZmZzZXQ7ICAgICAvKiBXaGVyZSB0byBiZWdpbiB0byB3cml0ZS4gICovCiAJamludDMyX3QgY3NpemU7ICAgICAgLyogKENvbXByZXNzZWQpIGRhdGEgc2l6ZSAqLwogCWppbnQzMl90IGRzaXplOwkgICAgIC8qIFNpemUgb2YgdGhlIG5vZGUncyBkYXRhLiAoYWZ0ZXIgZGVjb21wcmVzc2lvbikgKi8KLQl1aW50OF90IGNvbXByOyAgICAgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gdXNlZCAqLwotCXVpbnQ4X3QgdXNlcmNvbXByOyAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgKi8KKwlfX3U4IGNvbXByOyAgICAgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gdXNlZCAqLworCV9fdTggdXNlcmNvbXByOyAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgKi8KIAlqaW50MTZfdCBmbGFnczsJICAgICAvKiBTZWUgSkZGUzJfSU5PX0ZMQUdfKiAqLwogCWppbnQzMl90IGRhdGFfY3JjOyAgIC8qIENSQyBmb3IgdGhlIChjb21wcmVzc2VkKSBkYXRhLiAgKi8KIAlqaW50MzJfdCBub2RlX2NyYzsgICAvKiBDUkMgZm9yIHRoZSByYXcgaW5vZGUgKGV4Y2x1ZGluZyBkYXRhKSAgKi8KLQl1aW50OF90IGRhdGFbMF07CisJX191OCBkYXRhWzBdOwogfTsKIAogc3RydWN0IGpmZnMyX3Jhd194YXR0ciB7CkBAIC0xNjgsMTIgKzE2OSwxMiBAQAogCWppbnQzMl90IGhkcl9jcmM7CiAJamludDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KIAlqaW50MzJfdCB2ZXJzaW9uOwotCXVpbnQ4X3QgeHByZWZpeDsKLQl1aW50OF90IG5hbWVfbGVuOworCV9fdTggeHByZWZpeDsKKwlfX3U4IG5hbWVfbGVuOwogCWppbnQxNl90IHZhbHVlX2xlbjsKIAlqaW50MzJfdCBkYXRhX2NyYzsKIAlqaW50MzJfdCBub2RlX2NyYzsKLQl1aW50OF90IGRhdGFbMF07CisJX191OCBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGpmZnMyX3Jhd194cmVmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCA3ZmEzNzE4Li45MTQ5MThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZWNoZWNrLmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZHluYW1pY19wcmludGsuaD4KKyNpbmNsdWRlIDxsaW51eC9keW5hbWljX2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KIApAQCAtMzU4LDkgKzM1OCwxMCBAQAogI2lmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCi0jZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCisvKiBkeW5hbWljX3ByX2RlYnVnKCkgdXNlcyBwcl9mbXQoKSBpbnRlcm5hbGx5IHNvIHdlIGRvbid0IG5lZWQgaXQgaGVyZSAqLwogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgZG8geyBcCi0JZHluYW1pY19wcl9kZWJ1Zyhwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXyk7IFwKKwlkeW5hbWljX3ByX2RlYnVnKGZtdCwgIyNfX1ZBX0FSR1NfXyk7IFwKIAl9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaCBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAppbmRleCA1NzBkMjA0Li4wYzhiODlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0cnVjdCBrZXJuZWxfc3RhdCB7CiAJc3RydWN0IGNwdV91c2FnZV9zdGF0CWNwdXN0YXQ7Ci0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAgICAgICAgdW5zaWduZWQgaW50IGlycXNbTlJfSVJRU107CiAjZW5kaWYKIH07CkBAIC00MSw3ICs0MSw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbnJfY29udGV4dF9zd2l0Y2hlcyh2b2lkKTsKIAotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KGlycSkgXAogCShrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0pCiAKQEAgLTUyLDE2ICs1MiwxOSBAQAogewogCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOwogfQotI2VuZGlmCiAKLQotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKIHsKICAgICAgICByZXR1cm4ga3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdOwogfQogI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIGV4dGVybiB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CisjZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoREVTQykgXAorCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKKyNkZWZpbmUga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycW5vLCBERVNDKSBcCisJKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKyspCisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmggYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAppbmRleCA1NDM3YWMwLi41OGFlOGUwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKQEAgLTY4LDEwICs2OCwxMyBAQAogCXVuc2lnbmVkIGludCBzdGF0ZV9pbl9zeXNmczoxOwogCXVuc2lnbmVkIGludCBzdGF0ZV9hZGRfdWV2ZW50X3NlbnQ6MTsKIAl1bnNpZ25lZCBpbnQgc3RhdGVfcmVtb3ZlX3VldmVudF9zZW50OjE7CisJdW5zaWduZWQgaW50IHVldmVudF9zdXBwcmVzczoxOwogfTsKIAogZXh0ZXJuIGludCBrb2JqZWN0X3NldF9uYW1lKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpuYW1lLCAuLi4pCiAJCQkgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQga29iamVjdF9zZXRfbmFtZV92YXJncyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZm10LAorCQkJCSAgdmFfbGlzdCB2YXJncyk7CiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqa29iamVjdF9uYW1lKGNvbnN0IHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm0uaCBiL2luY2x1ZGUvbGludXgva3ZtLmgKaW5kZXggNTcxNWYxOS4uMzExYTA3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bS5oCkBAIC00OCw3ICs0OCwxMCBAQAogCSAqIEZvciBJQS02NCAoQVBJQyBtb2RlbCkgSU9BUElDMDogaXJxIDAtMjM7IElPQVBJQzE6IGlycSAyNC00Ny4uCiAJICogRm9yIFg4NiAoc3RhbmRhcmQgQVQgbW9kZSkgUElDMC8xOiBpcnEgMC0xNS4gSU9BUElDMDogMC0yMy4uCiAJICovCi0JX191MzIgaXJxOworCXVuaW9uIHsKKwkJX191MzIgaXJxOworCQlfX3MzMiBzdGF0dXM7CisJfTsKIAlfX3UzMiBsZXZlbDsKIH07CiAKQEAgLTU4LDEwICs2MSwxMCBAQAogCV9fdTMyIHBhZDsKICAgICAgICAgdW5pb24gewogCQljaGFyIGR1bW15WzUxMl07ICAvKiByZXNlcnZpbmcgc3BhY2UgKi8KLSNpZmRlZiBDT05GSUdfWDg2CisjaWZkZWYgX19LVk1fSEFWRV9QSVQKIAkJc3RydWN0IGt2bV9waWNfc3RhdGUgcGljOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQorI2lmZGVmIF9fS1ZNX0hBVkVfSU9BUElDCiAJCXN0cnVjdCBrdm1faW9hcGljX3N0YXRlIGlvYXBpYzsKICNlbmRpZgogCX0gY2hpcDsKQEAgLTEyNiw2ICsxMjksNyBAQAogCQkJX191NjQgZGF0YV9vZmZzZXQ7IC8qIHJlbGF0aXZlIHRvIGt2bV9ydW4gc3RhcnQgKi8KIAkJfSBpbzsKIAkJc3RydWN0IHsKKwkJCXN0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIGFyY2g7CiAJCX0gZGVidWc7CiAJCS8qIEtWTV9FWElUX01NSU8gKi8KIAkJc3RydWN0IHsKQEAgLTIxNywyMSArMjIxLDYgQEAKIAlfX3UzMiBpcnE7CiB9OwogCi1zdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgewotCV9fdTMyIGVuYWJsZWQ7Ci0JX191MzIgcGFkZGluZzsKLQlfX3U2NCBhZGRyZXNzOwotfTsKLQotLyogZm9yIEtWTV9ERUJVR19HVUVTVCAqLwotc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCB7Ci0JLyogaW50ICovCi0JX191MzIgZW5hYmxlZDsKLQlfX3UzMiBwYWQ7Ci0Jc3RydWN0IGt2bV9icmVha3BvaW50IGJyZWFrcG9pbnRzWzRdOwotCV9fdTMyIHNpbmdsZXN0ZXA7Ci19OwotCiAvKiBmb3IgS1ZNX0dFVF9ESVJUWV9MT0cgKi8KIHN0cnVjdCBrdm1fZGlydHlfbG9nIHsKIAlfX3UzMiBzbG90OwpAQCAtMjkyLDYgKzI4MSwxNyBAQAogCV9fdTY0IHBhcm02NDsKIH07CiAKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCisKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUAkJMHgwMDAwMDAwMgorCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKKwlfX3UzMiBjb250cm9sOworCV9fdTMyIHBhZDsKKwlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggYXJjaDsKK307CisKICNkZWZpbmUgS1ZNX1RSQ19TSElGVCAgICAgICAgICAgMTYKIC8qCiAgKiBrdm0gdHJhY2UgY2F0ZWdvcmllcwpAQCAtMzg0LDE4ICszODQsNjkgQEAKICNkZWZpbmUgS1ZNX0NBUF9NUF9TVEFURSAxNAogI2RlZmluZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPIDE1CiAjZGVmaW5lIEtWTV9DQVBfU1lOQ19NTVUgMTYgIC8qIENoYW5nZXMgdG8gaG9zdCBtbWFwIGFyZSByZWZsZWN0ZWQgaW4gZ3Vlc3QgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19YODYpfHxkZWZpbmVkKENPTkZJR19JQTY0KQorI2lmZGVmIF9fS1ZNX0hBVkVfREVWSUNFX0FTU0lHTk1FTlQKICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVCAxNwogI2VuZGlmCiAjZGVmaW5lIEtWTV9DQVBfSU9NTVUgMTgKLSNpZiBkZWZpbmVkKENPTkZJR19YODYpCisjaWZkZWYgX19LVk1fSEFWRV9NU0kKICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfTVNJIDIwCiAjZW5kaWYKIC8qIEJ1ZyBpbiBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBmaXhlZDogKi8KICNkZWZpbmUgS1ZNX0NBUF9ERVNUUk9ZX01FTU9SWV9SRUdJT05fV09SS1MgMjEKLSNpZiBkZWZpbmVkKENPTkZJR19YODYpCisjaWZkZWYgX19LVk1fSEFWRV9VU0VSX05NSQogI2RlZmluZSBLVk1fQ0FQX1VTRVJfTk1JIDIyCiAjZW5kaWYKKyNpZmRlZiBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCisjZGVmaW5lIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHIDIzCisjZW5kaWYKKyNpZmRlZiBfX0tWTV9IQVZFX1BJVAorI2RlZmluZSBLVk1fQ0FQX1JFSU5KRUNUX0NPTlRST0wgMjQKKyNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfSU9BUElDCisjZGVmaW5lIEtWTV9DQVBfSVJRX1JPVVRJTkcgMjUKKyNlbmRpZgorI2RlZmluZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTIDI2CisjaWZkZWYgX19LVk1fSEFWRV9ERVZJQ0VfQVNTSUdOTUVOVAorI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9ERUFTU0lHTk1FTlQgMjcKKyNlbmRpZgorCisjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORworCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgeworCV9fdTMyIGlycWNoaXA7CisJX191MzIgcGluOworfTsKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgeworCV9fdTMyIGFkZHJlc3NfbG87CisJX191MzIgYWRkcmVzc19oaTsKKwlfX3UzMiBkYXRhOworCV9fdTMyIHBhZDsKK307CisKKy8qIGdzaSByb3V0aW5nIGVudHJ5IHR5cGVzICovCisjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19JUlFDSElQIDEKKyNkZWZpbmUgS1ZNX0lSUV9ST1VUSU5HX01TSSAyCisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgeworCV9fdTMyIGdzaTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHBhZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCBpcnFjaGlwOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSBtc2k7CisJCV9fdTMyIHBhZFs4XTsKKwl9IHU7Cit9OworCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIHsKKwlfX3UzMiBucjsKKwlfX3UzMiBmbGFnczsKKwlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGVudHJpZXNbMF07Cit9OworCisjZW5kaWYKIAogLyoKICAqIGlvY3RscyBmb3IgVk0gZmRzCkBAIC00MjEsMTQgKzQ3MiwxOSBAQAogI2RlZmluZSBLVk1fQ1JFQVRFX1BJVAkJICBfSU8oS1ZNSU8sICAweDY0KQogI2RlZmluZSBLVk1fR0VUX1BJVAkJICBfSU9XUihLVk1JTywgMHg2NSwgc3RydWN0IGt2bV9waXRfc3RhdGUpCiAjZGVmaW5lIEtWTV9TRVRfUElUCQkgIF9JT1IoS1ZNSU8sICAweDY2LCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkKKyNkZWZpbmUgS1ZNX0lSUV9MSU5FX1NUQVRVUwkgIF9JT1dSKEtWTUlPLCAweDY3LCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCkKICNkZWZpbmUgS1ZNX1JFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIFwKIAkJCV9JT1coS1ZNSU8sICAweDY3LCBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUpCiAjZGVmaW5lIEtWTV9VTlJFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIFwKIAkJCV9JT1coS1ZNSU8sICAweDY4LCBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUpCiAjZGVmaW5lIEtWTV9BU1NJR05fUENJX0RFVklDRSBfSU9SKEtWTUlPLCAweDY5LCBcCiAJCQkJICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQorI2RlZmluZSBLVk1fU0VUX0dTSV9ST1VUSU5HICAgICAgIF9JT1coS1ZNSU8sIDB4NmEsIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcpCiAjZGVmaW5lIEtWTV9BU1NJR05fSVJRIF9JT1IoS1ZNSU8sIDB4NzAsIFwKIAkJCSAgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSkKKyNkZWZpbmUgS1ZNX1JFSU5KRUNUX0NPTlRST0wgICAgICBfSU8oS1ZNSU8sIDB4NzEpCisjZGVmaW5lIEtWTV9ERUFTU0lHTl9QQ0lfREVWSUNFIF9JT1coS1ZNSU8sIDB4NzIsIFwKKwkJCQkgICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldikKIAogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKQEAgLTQ0MCw3ICs0OTYsOCBAQAogI2RlZmluZSBLVk1fU0VUX1NSRUdTICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg0LCBzdHJ1Y3Qga3ZtX3NyZWdzKQogI2RlZmluZSBLVk1fVFJBTlNMQVRFICAgICAgICAgICAgIF9JT1dSKEtWTUlPLCAweDg1LCBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uKQogI2RlZmluZSBLVk1fSU5URVJSVVBUICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg2LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCkKLSNkZWZpbmUgS1ZNX0RFQlVHX0dVRVNUICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4Nywgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCkKKy8qIEtWTV9ERUJVR19HVUVTVCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgS1ZNX1NFVF9HVUVTVF9ERUJVRyBpbnN0ZWFkICovCisjZGVmaW5lIEtWTV9ERUJVR19HVUVTVCAgICAgICAgICAgX19LVk1fREVQUkVDQVRFRF9ERUJVR19HVUVTVAogI2RlZmluZSBLVk1fR0VUX01TUlMgICAgICAgICAgICAgIF9JT1dSKEtWTUlPLCAweDg4LCBzdHJ1Y3Qga3ZtX21zcnMpCiAjZGVmaW5lIEtWTV9TRVRfTVNSUyAgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODksIHN0cnVjdCBrdm1fbXNycykKICNkZWZpbmUgS1ZNX1NFVF9DUFVJRCAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4YSwgc3RydWN0IGt2bV9jcHVpZCkKQEAgLTQ2OSw2ICs1MjYsMjkgQEAKICNkZWZpbmUgS1ZNX1NFVF9NUF9TVEFURSAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg5OSwgc3RydWN0IGt2bV9tcF9zdGF0ZSkKIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTk1JICovCiAjZGVmaW5lIEtWTV9OTUkgICAgICAgICAgICAgICAgICAgX0lPKEtWTUlPLCAgMHg5YSkKKy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHICovCisjZGVmaW5lIEtWTV9TRVRfR1VFU1RfREVCVUcgICAgICAgX0lPVyhLVk1JTywgIDB4OWIsIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcpCisKKy8qCisgKiBEZXByZWNhdGVkIGludGVyZmFjZXMKKyAqLworc3RydWN0IGt2bV9icmVha3BvaW50IHsKKwlfX3UzMiBlbmFibGVkOworCV9fdTMyIHBhZGRpbmc7CisJX191NjQgYWRkcmVzczsKK307CisKK3N0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgeworCV9fdTMyIGVuYWJsZWQ7CisJX191MzIgcGFkOworCXN0cnVjdCBrdm1fYnJlYWtwb2ludCBicmVha3BvaW50c1s0XTsKKwlfX3UzMiBzaW5nbGVzdGVwOworfTsKKworI2RlZmluZSBfX0tWTV9ERVBSRUNBVEVEX0RFQlVHX0dVRVNUIF9JT1coS1ZNSU8sICAweDg3LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0KQorCisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLICAgX0lPUihLVk1JTywgIDB4OWEsIHZvaWQgKikKKyNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0sgICBfSU9XKEtWTUlPLCAgMHg5Yiwgdm9pZCAqKQogCiAjZGVmaW5lIEtWTV9UUkNfSU5KX1ZJUlEgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMikKICNkZWZpbmUgS1ZNX1RSQ19SRURFTElWRVJfRVZUICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAzKQpAQCAtNTIyLDYgKzYwMiw3IEBACiAKICNkZWZpbmUgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VCSgxIDw8IDApCiAKKyNkZWZpbmUgS1ZNX0RFVl9JUlFfQVNTSUdOX01TSV9BQ1RJT04JS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kKICNkZWZpbmUgS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kJKDEgPDwgMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggZWM0OWQwYi4uODk0YTU2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtMzcsNiArMzcsNyBAQAogI2RlZmluZSBLVk1fUkVRX1BFTkRJTkdfVElNRVIgICAgICA1CiAjZGVmaW5lIEtWTV9SRVFfVU5IQUxUICAgICAgICAgICAgIDYKICNkZWZpbmUgS1ZNX1JFUV9NTVVfU1lOQyAgICAgICAgICAgNworI2RlZmluZSBLVk1fUkVRX0tWTUNMT0NLX1VQREFURSAgICA4CiAKICNkZWZpbmUgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lECTAKIApAQCAtNzMsNyArNzQsNyBAQAogCXN0cnVjdCBrdm1fcnVuICpydW47CiAJaW50IGd1ZXN0X21vZGU7CiAJdW5zaWduZWQgbG9uZyByZXF1ZXN0czsKLQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIGd1ZXN0X2RlYnVnOworCXVuc2lnbmVkIGxvbmcgZ3Vlc3RfZGVidWc7CiAJaW50IGZwdV9hY3RpdmU7CiAJaW50IGd1ZXN0X2ZwdV9sb2FkZWQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CkBAIC0xMDcsNiArMTA4LDIwIEBACiAJaW50IHVzZXJfYWxsb2M7CiB9OwogCitzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSB7CisJdTMyIGdzaTsKKwlpbnQgKCpzZXQpKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGlycWNoaXA7CisJCQl1bnNpZ25lZCBwaW47CisJCX0gaXJxY2hpcDsKKwkJc3RydWN0IG1zaV9tc2cgbXNpOworCX07CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworfTsKKwogc3RydWN0IGt2bSB7CiAJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB2Y3B1cyBhcnJheSBhbmQgQVBJQyBhY2Nlc3NlcyAqLwogCXNwaW5sb2NrX3QgbW11X2xvY2s7CkBAIC0xMjcsNiArMTQyLDExIEBACiAJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19yaW5nICpjb2FsZXNjZWRfbW1pb19yaW5nOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCXN0cnVjdCBsaXN0X2hlYWQgaXJxX3JvdXRpbmc7IC8qIG9mIGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZCBtYXNrX25vdGlmaWVyX2xpc3Q7CisjZW5kaWYKKwogI2lmZGVmIEtWTV9BUkNIX1dBTlRfTU1VX05PVElGSUVSCiAJc3RydWN0IG1tdV9ub3RpZmllciBtbXVfbm90aWZpZXI7CiAJdW5zaWduZWQgbG9uZyBtbXVfbm90aWZpZXJfc2VxOwpAQCAtMjM3LDcgKzI1Nyw2IEBACiAJCQkJICAgaW50IHVzZXJfYWxsb2MpOwogbG9uZyBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJICAgICAgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpOwotdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KTsKQEAgLTI1NSw4ICsyNzQsOCBAQAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSk7CiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKTsKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKTsKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyk7CiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bik7CiAKIGludCBrdm1fYXJjaF9pbml0KHZvaWQgKm9wYXF1ZSk7CkBAIC0yODUsNiArMzA0LDcgQEAKIHN0cnVjdCAga3ZtICprdm1fYXJjaF9jcmVhdGVfdm0odm9pZCk7CiB2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoc3RydWN0IGt2bSAqa3ZtKTsKK3ZvaWQga3ZtX2FyY2hfc3luY19ldmVudHMoc3RydWN0IGt2bSAqa3ZtKTsKIAogaW50IGt2bV9jcHVfZ2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpOwogaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpOwpAQCAtMzA5LDcgKzMyOSw2IEBACiAJaW50IGhvc3RfaXJxOwogCWJvb2wgaG9zdF9pcnFfZGlzYWJsZWQ7CiAJaW50IGd1ZXN0X2lycTsKLQlzdHJ1Y3QgbXNpX21zZyBndWVzdF9tc2k7CiAjZGVmaW5lIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfSU5UWAkoMSA8PCAwKQogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSQkoMSA8PCAxKQogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0hPU1RfSU5UWAkoMSA8PCA4KQpAQCAtMzIwLDggKzMzOSwyMSBAQAogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOwogfTsKLXZvaWQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKTsKLXZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBnc2kpOworCitzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyIHsKKwl2b2lkICgqZnVuYykoc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbiwgYm9vbCBtYXNrZWQpOworCWludCBpcnE7CisJc3RydWN0IGhsaXN0X25vZGUgbGluazsKK307CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbik7Cit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKTsKK3ZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBib29sIG1hc2spOworCitpbnQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKTsKK3ZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4pOwogdm9pZCBrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKIHZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOwpAQCAtNDYzLDQgKzQ5NSwyMSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCisjZGVmaW5lIEtWTV9NQVhfSVJRX1JPVVRFUyAxMDI0CisKK2ludCBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pOworaW50IGt2bV9zZXRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtLAorCQkJY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqZW50cmllcywKKwkJCXVuc2lnbmVkIG5yLAorCQkJdW5zaWduZWQgZmxhZ3MpOwordm9pZCBrdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKSB7fQorCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaAppbmRleCA5YjZmMzk1Li4yYjgzMThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKQEAgLTQwLDE3ICs0MCw0IEBACiAKIHR5cGVkZWYgaGZuX3QgcGZuX3Q7CiAKLXN0cnVjdCBrdm1fcGlvX3JlcXVlc3QgewotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JaW50IGN1cl9jb3VudDsKLQlzdHJ1Y3QgcGFnZSAqZ3Vlc3RfcGFnZXNbMl07Ci0JdW5zaWduZWQgZ3Vlc3RfcGFnZV9vZmZzZXQ7Ci0JaW50IGluOwotCWludCBwb3J0OwotCWludCBzaXplOwotCWludCBzdHJpbmc7Ci0JaW50IGRvd247Ci0JaW50IHJlcDsKLX07Ci0KICNlbmRpZiAvKiBfX0tWTV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oIGIvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKaW5kZXggOTAxYzJkNi4uYjBlOTk4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKKysrIGIvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKQEAgLTksNiArOSw3IEBACiAjaWZuZGVmIF9JTkNMVURFX0dVQVJEX0xBVEVOQ1lUT1BfSF8KICNkZWZpbmUgX0lOQ0xVREVfR1VBUkRfTEFURU5DWVRPUF9IXwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpZmRlZiBDT05GSUdfTEFURU5DWVRPUAogCiAjZGVmaW5lIExUX1NBVkVDT1VOVAkJMzIKQEAgLTI0LDcgKzI1LDE0IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAotdm9pZCBhY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpOworZXh0ZXJuIGludCBsYXRlbmN5dG9wX2VuYWJsZWQ7Cit2b2lkIF9fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKQoreworCWlmICh1bmxpa2VseShsYXRlbmN5dG9wX2VuYWJsZWQpKQorCQlfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kodGFzaywgdXNlY3MsIGludGVyKTsKK30KIAogdm9pZCBjbGVhcl9hbGxfbGF0ZW5jeV90cmFjaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDVkODdiYzAuLjc2MjYyZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMjc1LDcgKzI3NSw3IEBACiAJICogYWR2aXNlZCB0byB3YWl0IG9ubHkgZm9yIHRoZSBmb2xsb3dpbmcgZHVyYXRpb24gYmVmb3JlCiAJICogZG9pbmcgU1JTVC4KIAkgKi8KLQlBVEFfVE1PVVRfUE1QX1NSU1RfV0FJVAk9IDEwMDAsCisJQVRBX1RNT1VUX1BNUF9TUlNUX1dBSVQJPSA1MDAwLAogCiAJLyogQVRBIGJ1cyBzdGF0ZXMgKi8KIAlCVVNfVU5LTk9XTgkJPSAwLApAQCAtNTMwLDYgKzUzMCw3IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBBVEFfUUNGTEFHX3h4eCAqLwogCXVuc2lnbmVkIGludAkJdGFnOwogCXVuc2lnbmVkIGludAkJbl9lbGVtOworCXVuc2lnbmVkIGludAkJb3JpZ19uX2VsZW07CiAKIAlpbnQJCQlkbWFfZGlyOwogCkBAIC03NTAsNyArNzUxLDggQEAKIAlhY3BpX2hhbmRsZQkJYWNwaV9oYW5kbGU7CiAJc3RydWN0IGF0YV9hY3BpX2d0bQlfX2FjcGlfaW5pdF9ndG07IC8qIHVzZSBhdGFfYWNwaV9pbml0X2d0bSgpICovCiAjZW5kaWYKLQl1OAkJCXNlY3Rvcl9idWZbQVRBX1NFQ1RfU0laRV07IC8qIG93bmVkIGJ5IEVIICovCisJLyogb3duZWQgYnkgRUggKi8KKwl1OAkJCXNlY3Rvcl9idWZbQVRBX1NFQ1RfU0laRV0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogfTsKIAogLyogVGhlIGZvbGxvd2luZyBpbml0aWFsaXplciBvdmVycmlkZXMgYSBtZXRob2QgdG8gTlVMTCB3aGV0aGVyIG9uZSBvZgpAQCAtNzkzLDYgKzc5NSw3IEBACiAJYXRhX3Jlc2V0X2ZuX3QJCXBtcF9oYXJkcmVzZXQ7CiAJYXRhX3Bvc3RyZXNldF9mbl90CXBtcF9wb3N0cmVzZXQ7CiAJdm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXZvaWQgKCpsb3N0X2ludGVycnVwdCkoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAJdm9pZCAoKnBvc3RfaW50ZXJuYWxfY21kKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCS8qCkBAIC04MzQsNiArODM3LDggQEAKIAl2b2lkICgqYm1kbWFfc3RhcnQpKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCXZvaWQgKCpibWRtYV9zdG9wKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAl1OCAgICgqYm1kbWFfc3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKworCXZvaWQgKCpkcmFpbl9maWZvKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKICNlbmRpZiAvKiBDT05GSUdfQVRBX1NGRiAqLwogCiAJc3NpemVfdCAoKmVtX3Nob3cpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNoYXIgKmJ1Zik7CkBAIC0xMDA2LDYgKzEwMTEsOSBAQAogZXh0ZXJuIGludCBhdGFfY2FibGVfaWdub3JlKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfY2FibGVfdW5rbm93bihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAorZXh0ZXJuIHZvaWQgYXRhX3Bpb19xdWV1ZV90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgKmRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSk7CisKIC8qIFRpbWluZyBoZWxwZXJzICovCiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9waW9fbmVlZF9pb3JkeShjb25zdCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyAqYXRhX3RpbWluZ19maW5kX21vZGUodTggeGZlcl9tb2RlKTsKQEAgLTE1NzAsNiArMTU3OCw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9zZmZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkJICAgICAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgYXRhX3NmZl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgYXRhX3NmZl9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwpAQCAtMTU4Miw2ICsxNTkxLDcgQEAKIGV4dGVybiBpbnQgc2F0YV9zZmZfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfZHJhaW5fZmlmbyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaW50IGF0YV9zZmZfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmggYi9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWQ4ZmExLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fCi0jZGVmaW5lIF9fTE1fSU5URVJGQUNFX0RPVF9IX18KLQotCi10eXBlZGVmIHZvaWQgKCpsbV9jYWxsYmFja190KSAodm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSk7Ci0KLS8qCi0gKiBsbV9tb3VudCgpIGZsYWdzCi0gKgotICogTE1fTUZMQUdfU1BFQ1RBVE9SCi0gKiBHRlMgaXMgYXNraW5nIHRvIGpvaW4gdGhlIGZpbGVzeXN0ZW0ncyBsb2Nrc3BhY2UsIGJ1dCBpdCBkb2Vzbid0IHdhbnQgdG8KLSAqIG1vZGlmeSB0aGUgZmlsZXN5c3RlbS4gIFRoZSBsb2NrIG1vZHVsZSBzaG91bGRuJ3QgYXNzaWduIGEgam91cm5hbCB0byB0aGUgRlMKLSAqIG1vdW50LiAgSXQgc2hvdWxkbid0IHNlbmQgcmVjb3ZlcnkgY2FsbGJhY2tzIHRvIHRoZSBGUyBtb3VudC4gIElmIHRoZSBub2RlCi0gKiBkaWVzIG9yIHdpdGhkcmF3cywgYWxsIGxvY2tzIGNhbiBiZSB3aXBlZCBpbW1lZGlhdGVseS4KLSAqCi0gKiBMTV9NRkxBR19DT05WX05PRFJPUAotICogRG8gbm90IGFsbG93IHRoZSBkbG0gdG8gaW50ZXJuYWxseSByZXNvbHZlIGNvbnZlcnNpb24gZGVhZGxvY2tzIGJ5IGRlbW90aW5nCi0gKiB0aGUgbG9jayB0byB1bmxvY2tlZCBhbmQgdGhlbiByZWFjcXVpcmluZyBpdCBpbiB0aGUgcmVxdWVzdGVkIG1vZGUuIEluc3RlYWQsCi0gKiBpdCBzaG91bGQgY2FuY2VsIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gTE1fT1VUX0NPTlZfREVBRExLLgotICovCi0KLSNkZWZpbmUgTE1fTUZMQUdfU1BFQ1RBVE9SCTB4MDAwMDAwMDEKLSNkZWZpbmUgTE1fTUZMQUdfQ09OVl9OT0RST1AJMHgwMDAwMDAwMgotCi0vKgotICogbG1fbG9ja3N0cnVjdCBmbGFncwotICoKLSAqIExNX0xTRkxBR19MT0NBTAotICogVGhlIGxvY2tfbm9sb2NrIG1vZHVsZSByZXR1cm5zIExNX0xTRkxBR19MT0NBTCB0byBHRlMsIGluZGljYXRpbmcgdGhhdCBHRlMKLSAqIGNhbiBtYWtlIHNpbmdsZS1ub2RlIG9wdGltaXphdGlvbnMuCi0gKi8KLQotI2RlZmluZSBMTV9MU0ZMQUdfTE9DQUwJCTB4MDAwMDAwMDEKLQotLyoKLSAqIGxtX2xvY2tuYW1lIHR5cGVzCi0gKi8KLQotI2RlZmluZSBMTV9UWVBFX1JFU0VSVkVECTB4MDAKLSNkZWZpbmUgTE1fVFlQRV9OT05ESVNLCQkweDAxCi0jZGVmaW5lIExNX1RZUEVfSU5PREUJCTB4MDIKLSNkZWZpbmUgTE1fVFlQRV9SR1JQCQkweDAzCi0jZGVmaW5lIExNX1RZUEVfTUVUQQkJMHgwNAotI2RlZmluZSBMTV9UWVBFX0lPUEVOCQkweDA1Ci0jZGVmaW5lIExNX1RZUEVfRkxPQ0sJCTB4MDYKLSNkZWZpbmUgTE1fVFlQRV9QTE9DSwkJMHgwNwotI2RlZmluZSBMTV9UWVBFX1FVT1RBCQkweDA4Ci0jZGVmaW5lIExNX1RZUEVfSk9VUk5BTAkJMHgwOQotCi0vKgotICogbG1fbG9jaygpIHN0YXRlcwotICoKLSAqIFNIQVJFRCBpcyBjb21wYXRpYmxlIHdpdGggU0hBUkVELCBub3Qgd2l0aCBERUZFUlJFRCBvciBFWC4KLSAqIERFRkVSUkVEIGlzIGNvbXBhdGlibGUgd2l0aCBERUZFUlJFRCwgbm90IHdpdGggU0hBUkVEIG9yIEVYLgotICovCi0KLSNkZWZpbmUgTE1fU1RfVU5MT0NLRUQJCTAKLSNkZWZpbmUgTE1fU1RfRVhDTFVTSVZFCQkxCi0jZGVmaW5lIExNX1NUX0RFRkVSUkVECQkyCi0jZGVmaW5lIExNX1NUX1NIQVJFRAkJMwotCi0vKgotICogbG1fbG9jaygpIGZsYWdzCi0gKgotICogTE1fRkxBR19UUlkKLSAqIERvbid0IHdhaXQgdG8gYWNxdWlyZSB0aGUgbG9jayBpZiBpdCBjYW4ndCBiZSBncmFudGVkIGltbWVkaWF0ZWx5LgotICoKLSAqIExNX0ZMQUdfVFJZXzFDQgotICogU2VuZCBvbmUgYmxvY2tpbmcgY2FsbGJhY2sgaWYgVFJZIGlzIHNldCBhbmQgdGhlIGxvY2sgaXMgbm90IGdyYW50ZWQuCi0gKgotICogTE1fRkxBR19OT0VYUAotICogR0ZTIHNldHMgdGhpcyBmbGFnIG9uIGxvY2sgcmVxdWVzdHMgaXQgbWFrZXMgd2hpbGUgZG9pbmcgam91cm5hbCByZWNvdmVyeS4KLSAqIFRoZXNlIHNwZWNpYWwgcmVxdWVzdHMgc2hvdWxkIG5vdCBiZSBibG9ja2VkIGR1ZSB0byB0aGUgcmVjb3ZlcnkgbGlrZQotICogb3JkaW5hcnkgbG9ja3Mgd291bGQgYmUuCi0gKgotICogTE1fRkxBR19BTlkKLSAqIEEgU0hBUkVEIHJlcXVlc3QgbWF5IGFsc28gYmUgZ3JhbnRlZCBpbiBERUZFUlJFRCwgb3IgYSBERUZFUlJFRCByZXF1ZXN0IG1heQotICogYWxzbyBiZSBncmFudGVkIGluIFNIQVJFRC4gIFRoZSBwcmVmZXJyZWQgc3RhdGUgaXMgd2hpY2hldmVyIGlzIGNvbXBhdGlibGUKLSAqIHdpdGggb3RoZXIgZ3JhbnRlZCBsb2Nrcywgb3IgdGhlIHNwZWNpZmllZCBzdGF0ZSBpZiBubyBvdGhlciBsb2NrcyBleGlzdC4KLSAqCi0gKiBMTV9GTEFHX1BSSU9SSVRZCi0gKiBPdmVycmlkZSBmYWlybmVzcyBjb25zaWRlcmF0aW9ucy4gIFN1cHBvc2UgYSBsb2NrIGlzIGhlbGQgaW4gYSBzaGFyZWQgc3RhdGUKLSAqIGFuZCB0aGVyZSBpcyBhIHBlbmRpbmcgcmVxdWVzdCBmb3IgdGhlIGRlZmVycmVkIHN0YXRlLiAgQSBzaGFyZWQgbG9jawotICogcmVxdWVzdCB3aXRoIHRoZSBwcmlvcml0eSBmbGFnIHdvdWxkIGJlIGFsbG93ZWQgdG8gYnlwYXNzIHRoZSBkZWZlcnJlZAotICogcmVxdWVzdCBhbmQgZGlyZWN0bHkgam9pbiB0aGUgb3RoZXIgc2hhcmVkIGxvY2suICBBIHNoYXJlZCBsb2NrIHJlcXVlc3QKLSAqIHdpdGhvdXQgdGhlIHByaW9yaXR5IGZsYWcgbWlnaHQgYmUgZm9yY2VkIHRvIHdhaXQgdW50aWwgdGhlIGRlZmVycmVkCi0gKiByZXF1ZXN0ZWQgaGFkIGFjcXVpcmVkIGFuZCByZWxlYXNlZCB0aGUgbG9jay4KLSAqLwotCi0jZGVmaW5lIExNX0ZMQUdfVFJZCQkweDAwMDAwMDAxCi0jZGVmaW5lIExNX0ZMQUdfVFJZXzFDQgkJMHgwMDAwMDAwMgotI2RlZmluZSBMTV9GTEFHX05PRVhQCQkweDAwMDAwMDA0Ci0jZGVmaW5lIExNX0ZMQUdfQU5ZCQkweDAwMDAwMDA4Ci0jZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMAotCi0vKgotICogbG1fbG9jaygpIGFuZCBsbV9hc3luY19jYiByZXR1cm4gZmxhZ3MKLSAqCi0gKiBMTV9PVVRfU1RfTUFTSwotICogTWFza3MgdGhlIGxvd2VyIHR3byBiaXRzIG9mIGxvY2sgc3RhdGUgaW4gdGhlIHJldHVybmVkIHZhbHVlLgotICoKLSAqIExNX09VVF9DQUNIRUFCTEUKLSAqIFRoZSBsb2NrIGhhc24ndCBiZWVuIHJlbGVhc2VkIHNvIEdGUyBjYW4gY29udGludWUgdG8gY2FjaGUgZGF0YSBmb3IgaXQuCi0gKgotICogTE1fT1VUX0NBTkNFTEVECi0gKiBUaGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZC4KLSAqCi0gKiBMTV9PVVRfQVNZTkMKLSAqIFRoZSByZXN1bHQgb2YgdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXR1cm5lZCBpbiBhbiBMTV9DQl9BU1lOQyBjYWxsYmFjay4KLSAqCi0gKiBMTV9PVVRfQ09OVl9ERUFETEsKLSAqIFRoZSBsb2NrIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIGRvIHRvIGEgY29udmVyc2lvbiBkZWFkbG9jay4KLSAqLwotCi0jZGVmaW5lIExNX09VVF9TVF9NQVNLCQkweDAwMDAwMDAzCi0jZGVmaW5lIExNX09VVF9DQU5DRUxFRAkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9PVVRfQVNZTkMJCTB4MDAwMDAwODAKLSNkZWZpbmUgTE1fT1VUX0VSUk9SCQkweDAwMDAwMTAwCi0KLS8qCi0gKiBsbV9jYWxsYmFja190IHR5cGVzCi0gKgotICogTE1fQ0JfTkVFRF9FIExNX0NCX05FRURfRCBMTV9DQl9ORUVEX1MKLSAqIEJsb2NraW5nIGNhbGxiYWNrLCBhIHJlbW90ZSBub2RlIGlzIHJlcXVlc3RpbmcgdGhlIGdpdmVuIGxvY2sgaW4KLSAqIEVYQ0xVU0lWRSwgREVGRVJSRUQsIG9yIFNIQVJFRC4KLSAqCi0gKiBMTV9DQl9ORUVEX1JFQ09WRVJZCi0gKiBUaGUgZ2l2ZW4gam91cm5hbCBuZWVkcyB0byBiZSByZWNvdmVyZWQuCi0gKgotICogTE1fQ0JfQVNZTkMKLSAqIFRoZSBnaXZlbiBsb2NrIGhhcyBiZWVuIGdyYW50ZWQuCi0gKi8KLQotI2RlZmluZSBMTV9DQl9ORUVEX0UJCTI1NwotI2RlZmluZSBMTV9DQl9ORUVEX0QJCTI1OAotI2RlZmluZSBMTV9DQl9ORUVEX1MJCTI1OQotI2RlZmluZSBMTV9DQl9ORUVEX1JFQ09WRVJZCTI2MAotI2RlZmluZSBMTV9DQl9BU1lOQwkJMjYyCi0KLS8qCi0gKiBsbV9yZWNvdmVyeV9kb25lKCkgbWVzc2FnZXMKLSAqLwotCi0jZGVmaW5lIExNX1JEX0dBVkVVUAkJMzA4Ci0jZGVmaW5lIExNX1JEX1NVQ0NFU1MJCTMwOQotCi0KLXN0cnVjdCBsbV9sb2NrbmFtZSB7Ci0JdTY0IGxuX251bWJlcjsKLQl1bnNpZ25lZCBpbnQgbG5fdHlwZTsKLX07Ci0KLSNkZWZpbmUgbG1fbmFtZV9lcXVhbChuYW1lMSwgbmFtZTIpIFwKLQkoKChuYW1lMSktPmxuX251bWJlciA9PSAobmFtZTIpLT5sbl9udW1iZXIpICYmIFwKLQkgKChuYW1lMSktPmxuX3R5cGUgPT0gKG5hbWUyKS0+bG5fdHlwZSkpIFwKLQotc3RydWN0IGxtX2FzeW5jX2NiIHsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUgbGNfbmFtZTsKLQlpbnQgbGNfcmV0OwotfTsKLQotc3RydWN0IGxtX2xvY2tzdHJ1Y3Q7Ci0KLXN0cnVjdCBsbV9sb2Nrb3BzIHsKLQljb25zdCBjaGFyICpsbV9wcm90b19uYW1lOwotCi0JLyoKLQkgKiBNb3VudC9Vbm1vdW50Ci0JICovCi0KLQlpbnQgKCpsbV9tb3VudCkgKGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKTsKLQotCXZvaWQgKCpsbV9vdGhlcnNfbWF5X21vdW50KSAodm9pZCAqbG9ja3NwYWNlKTsKLQotCXZvaWQgKCpsbV91bm1vdW50KSAodm9pZCAqbG9ja3NwYWNlKTsKLQotCXZvaWQgKCpsbV93aXRoZHJhdykgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQkvKgotCSAqIExvY2sgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0JaW50ICgqbG1fZ2V0X2xvY2spICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwgdm9pZCAqKmxvY2twKTsKLQotCXZvaWQgKCpsbV9wdXRfbG9jaykgKHZvaWQgKmxvY2spOwotCi0JdW5zaWduZWQgaW50ICgqbG1fbG9jaykgKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsCi0JCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KLQl1bnNpZ25lZCBpbnQgKCpsbV91bmxvY2spICh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKTsKLQotCXZvaWQgKCpsbV9jYW5jZWwpICh2b2lkICpsb2NrKTsKLQotCWludCAoKmxtX2hvbGRfbHZiKSAodm9pZCAqbG9jaywgY2hhciAqKmx2YnApOwotCXZvaWQgKCpsbV91bmhvbGRfbHZiKSAodm9pZCAqbG9jaywgY2hhciAqbHZiKTsKLQotCS8qCi0JICogUG9zaXggTG9jayBvcmllbnRlZCBvcGVyYXRpb25zCi0JICovCi0KLQlpbnQgKCpsbV9wbG9ja19nZXQpICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLQotCWludCAoKmxtX3Bsb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLQotCWludCAoKmxtX3B1bmxvY2spICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQkvKgotCSAqIENsaWVudCBvcmllbnRlZCBvcGVyYXRpb25zCi0JICovCi0KLQl2b2lkICgqbG1fcmVjb3ZlcnlfZG9uZSkgKHZvaWQgKmxvY2tzcGFjZSwgdW5zaWduZWQgaW50IGppZCwKLQkJCQkgIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLQotCXN0cnVjdCBtb2R1bGUgKmxtX293bmVyOwotfTsKLQotLyoKLSAqIGxtX21vdW50KCkgcmV0dXJuIHZhbHVlcwotICoKLSAqIGxzX2ppZCAtIHRoZSBqb3VybmFsIElEIHRoaXMgbm9kZSBzaG91bGQgdXNlCi0gKiBsc19maXJzdCAtIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgdG8gbW91bnQgdGhlIGZpbGUgc3lzdGVtCi0gKiBsc19sdmJfc2l6ZSAtIHNpemUgaW4gYnl0ZXMgb2YgbG9jayB2YWx1ZSBibG9ja3MKLSAqIGxzX2xvY2tzcGFjZSAtIGxvY2sgbW9kdWxlJ3MgY29udGV4dCBmb3IgdGhpcyBmaWxlIHN5c3RlbQotICogbHNfb3BzIC0gbG9jayBtb2R1bGUncyBmdW5jdGlvbnMKLSAqIGxzX2ZsYWdzIC0gbG9jayBtb2R1bGUgZmVhdHVyZXMKLSAqLwotCi1zdHJ1Y3QgbG1fbG9ja3N0cnVjdCB7Ci0JdW5zaWduZWQgaW50IGxzX2ppZDsKLQl1bnNpZ25lZCBpbnQgbHNfZmlyc3Q7Ci0JdW5zaWduZWQgaW50IGxzX2x2Yl9zaXplOwotCXZvaWQgKmxzX2xvY2tzcGFjZTsKLQljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbHNfb3BzOwotCWludCBsc19mbGFnczsKLX07Ci0KLS8qCi0gKiBMb2NrIG1vZHVsZSBib3R0b20gaW50ZXJmYWNlLiAgQSBsb2NrIG1vZHVsZSBtYWtlcyBpdHNlbGYgYXZhaWxhYmxlIHRvIEdGUwotICogd2l0aCB0aGVzZSBmdW5jdGlvbnMuCi0gKi8KLQotaW50IGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90byk7Ci12b2lkIGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKTsKLQotLyoKLSAqIExvY2sgbW9kdWxlIHRvcCBpbnRlcmZhY2UuICBHRlMgY2FsbHMgdGhlc2UgZnVuY3Rpb25zIHdoZW4gbW91bnRpbmcgb3IKLSAqIHVubW91bnRpbmcgYSBmaWxlIHN5c3RlbS4KLSAqLwotCi1pbnQgZ2ZzMl9tb3VudF9sb2NrcHJvdG8oY2hhciAqcHJvdG9fbmFtZSwgY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJIGxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQkgdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJIHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopOwotCi12b2lkIGdmczJfdW5tb3VudF9sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpOwotCi12b2lkIGdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KTsKLQotI2VuZGlmIC8qIF9fTE1fSU5URVJGQUNFX0RPVF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCmluZGV4IGFhNmZlNzAuLjUxODU1ZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKQEAgLTM0Niw2ICszNDYsNyBAQAogCXJldHVybiBzaW4xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2luMi0+c2luX2FkZHIuc19hZGRyOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiBzdGF0aWMgaW5saW5lIGludCBfX25sbV9jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAogCQkJCSAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQogewpAQCAtMzUzLDYgKzM1NCwxMyBAQAogCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDI7CiAJcmV0dXJuIGlwdjZfYWRkcl9lcXVhbCgmc2luMS0+c2luNl9hZGRyLCAmc2luMi0+c2luNl9hZGRyKTsKIH0KKyNlbHNlCS8qICEoQ09ORklHX0lQVjYgfHwgQ09ORklHX0lQVjZfTU9EVUxFKSAqLworc3RhdGljIGlubGluZSBpbnQgX19ubG1fY21wX2FkZHI2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkvKiAhKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgKi8KIAogLyoKICAqIENvbXBhcmUgdHdvIGhvc3QgYWRkcmVzc2VzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlLmggYi9pbmNsdWRlL2xpbnV4L21hcGxlLmgKaW5kZXggYzIzZDNmNS4uZDlhNTFiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFwbGUuaApAQCAtOCwzMyArOCw0OSBAQAogCiAvKiBNYXBsZSBCdXMgY29tbWFuZCBhbmQgcmVzcG9uc2UgY29kZXMgKi8KIGVudW0gbWFwbGVfY29kZSB7Ci0JTUFQTEVfUkVTUE9OU0VfRklMRUVSUiA9IC01LAotCU1BUExFX1JFU1BPTlNFX0FHQUlOID0gLTQsCS8qIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJhbnNtaXR0ZWQgKi8KLQlNQVBMRV9SRVNQT05TRV9CQURDTUQgPSAtMywKLQlNQVBMRV9SRVNQT05TRV9CQURGVU5DID0gLTIsCi0JTUFQTEVfUkVTUE9OU0VfTk9ORSA9IC0xLAkvKiB1bml0IGRpZG4ndCByZXNwb25kIGF0IGFsbCAqLwotCU1BUExFX0NPTU1BTkRfREVWSU5GTyA9IDEsCi0JTUFQTEVfQ09NTUFORF9BTExJTkZPID0gMiwKLQlNQVBMRV9DT01NQU5EX1JFU0VUID0gMywKLQlNQVBMRV9DT01NQU5EX0tJTEwgPSA0LAotCU1BUExFX1JFU1BPTlNFX0RFVklORk8gPSA1LAotCU1BUExFX1JFU1BPTlNFX0FMTElORk8gPSA2LAotCU1BUExFX1JFU1BPTlNFX09LID0gNywKLQlNQVBMRV9SRVNQT05TRV9EQVRBVFJGID0gOCwKLQlNQVBMRV9DT01NQU5EX0dFVENPTkQgPSA5LAotCU1BUExFX0NPTU1BTkRfR0VUTUlORk8gPSAxMCwKLQlNQVBMRV9DT01NQU5EX0JSRUFEID0gMTEsCi0JTUFQTEVfQ09NTUFORF9CV1JJVEUgPSAxMiwKLQlNQVBMRV9DT01NQU5EX1NFVENPTkQgPSAxNAorCU1BUExFX1JFU1BPTlNFX0ZJTEVFUlIgPQktNSwKKwlNQVBMRV9SRVNQT05TRV9BR0FJTiwJLyogcmV0cmFuc21pdCAqLworCU1BUExFX1JFU1BPTlNFX0JBRENNRCwKKwlNQVBMRV9SRVNQT05TRV9CQURGVU5DLAorCU1BUExFX1JFU1BPTlNFX05PTkUsCS8qIHVuaXQgZGlkbid0IHJlc3BvbmQqLworCU1BUExFX0NPTU1BTkRfREVWSU5GTyA9CQkxLAorCU1BUExFX0NPTU1BTkRfQUxMSU5GTywKKwlNQVBMRV9DT01NQU5EX1JFU0VULAorCU1BUExFX0NPTU1BTkRfS0lMTCwKKwlNQVBMRV9SRVNQT05TRV9ERVZJTkZPLAorCU1BUExFX1JFU1BPTlNFX0FMTElORk8sCisJTUFQTEVfUkVTUE9OU0VfT0ssCisJTUFQTEVfUkVTUE9OU0VfREFUQVRSRiwKKwlNQVBMRV9DT01NQU5EX0dFVENPTkQsCisJTUFQTEVfQ09NTUFORF9HRVRNSU5GTywKKwlNQVBMRV9DT01NQU5EX0JSRUFELAorCU1BUExFX0NPTU1BTkRfQldSSVRFLAorCU1BUExFX0NPTU1BTkRfQlNZTkMsCisJTUFQTEVfQ09NTUFORF9TRVRDT05ELAorCU1BUExFX0NPTU1BTkRfTUlDQ09OVFJPTAorfTsKKworZW51bSBtYXBsZV9maWxlX2Vycm9ycyB7CisJTUFQTEVfRklMRUVSUl9JTlZBTElEX1BBUlRJVElPTiA9CTB4MDEwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9QSEFTRV9FUlJPUiA9CQkweDAyMDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfSU5WQUxJRF9CTE9DSyA9CQkweDA0MDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfV1JJVEVfRVJST1IgPQkJMHgwODAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX0lOVkFMSURfV1JJVEVfTEVOR1RIID0JMHgxMDAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX0JBRF9DUkMgPSAJCTB4MjAwMDAwMDAKK307CisKK3N0cnVjdCBtYXBsZV9idWZmZXIgeworCWNoYXIgYnVmeFsweDQwMF07CisJdm9pZCAqYnVmOwogfTsKIAogc3RydWN0IG1hcGxlcSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKmRldjsKLQl2b2lkICpzZW5kYnVmLCAqcmVjdmJ1ZiwgKnJlY3ZidWZkY3NwOworCXN0cnVjdCBtYXBsZV9idWZmZXIgKnJlY3ZidWY7CisJdm9pZCAqc2VuZGJ1ZiwgKnJlY3ZidWZfcDI7CiAJdW5zaWduZWQgY2hhciBsZW5ndGg7CiAJZW51bSBtYXBsZV9jb2RlIGNvbW1hbmQ7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwogfTsKIAogc3RydWN0IG1hcGxlX2RldmluZm8gewpAQCAtNTIsMTEgKzY4LDE1IEBACiAJc3RydWN0IG1hcGxlX2RyaXZlciAqZHJpdmVyOwogCXN0cnVjdCBtYXBsZXEgKm1xOwogCXZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCBtYXBsZXEgKiBtcSk7CisJdm9pZCAoKmZpbGVlcnJfaGFuZGxlcikoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1Zik7CisJaW50ICgqY2FuX3VubG9hZCkoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldik7CiAJdW5zaWduZWQgbG9uZyB3aGVuLCBpbnRlcnZhbCwgZnVuY3Rpb247CiAJc3RydWN0IG1hcGxlX2RldmluZm8gZGV2aW5mbzsKIAl1bnNpZ25lZCBjaGFyIHBvcnQsIHVuaXQ7CiAJY2hhciBwcm9kdWN0X25hbWVbMzJdOwogCWNoYXIgcHJvZHVjdF9saWNlbmNlWzY0XTsKKwlhdG9taWNfdCBidXN5OworCXdhaXRfcXVldWVfaGVhZF90IG1hcGxlX3dhaXQ7CiAJc3RydWN0IGRldmljZSBkZXY7CiB9OwogCkBAIC03Miw3ICs5Miw3IEBACiBpbnQgbWFwbGVfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBtYXBsZV9kcml2ZXIgKik7CiB2b2lkIG1hcGxlX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBtYXBsZV9kcml2ZXIgKik7CiAKLWludCBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCitpbnQgbWFwbGVfYWRkX3BhY2tldChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCiAJdTMyIGNvbW1hbmQsIHUzMiBsZW5ndGgsIHZvaWQgKmRhdGEpOwogdm9pZCBtYXBsZV9jbGVhcl9kZXYoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaCBiL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaAppbmRleCA0MDRmNjc4Li4yMjAzMTIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCkBAIC0zNyw3ICszNyw3IEBACiAgIE1BVFJPWEZCX0NJRF9MQVNUCiB9OwogCi0jZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DCV9JT1coJ0YnLCAweDIwLCB1X2ludDMyX3QpCisjZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DCV9JT1coJ0YnLCAweDIwLCBfX3UzMikKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmgKaW5kZXggYWY5NWExZC4uZDg5OWRjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmgKQEAgLTQ5MCw2ICs0OTAsNyBAQAogLyoKICAqIFIyMzEgKDB4RTcpIC0gSmFjayBTdGF0dXMKICAqLworI2RlZmluZSBXTTgzNTBfSkFDS19MX0xWTAkJCTB4MDgwMAogI2RlZmluZSBXTTgzNTBfSkFDS19SX0xWTCAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCmluZGV4IGI2NjQwZTAuLmUwNmVkM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCkBAIC0xMTgxLDYgKzExODEsNyBAQAogI2RlZmluZSBXTTg0MDBfRkxMX09VVERJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfT1VURElWIC0gWzI6MF0gKi8KICNkZWZpbmUgV004NDAwX0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX09VVERJViAtIFsyOjBdICovCiAKK3N0cnVjdCB3bTg0MDA7CiB2b2lkIHdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUoc3RydWN0IHdtODQwMCAqd204NDAwKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvY21kLmggYi9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKaW5kZXggY2Y5YzY3OS4uMGY4MjI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaApAQCAtNTUsNiArNTUsNyBAQAogCU1MWDRfQ01EX0NMT1NFX1BPUlQJID0gMHhhLAogCU1MWDRfQ01EX1FVRVJZX0hDQQkgPSAweGIsCiAJTUxYNF9DTURfUVVFUllfUE9SVAkgPSAweDQzLAorCU1MWDRfQ01EX1NFTlNFX1BPUlQJID0gMHg0ZCwKIAlNTFg0X0NNRF9TRVRfUE9SVAkgPSAweGMsCiAJTUxYNF9DTURfQUNDRVNTX0REUgkgPSAweDJlLAogCU1MWDRfQ01EX01BUF9JQ00JID0gMHhmZmEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKaW5kZXggOGY2NTljYy4uM2FmZjhhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaApAQCAtMTU1LDggKzE1NSw5IEBACiB9OwogCiBlbnVtIG1seDRfcG9ydF90eXBlIHsKLQlNTFg0X1BPUlRfVFlQRV9JQgk9IDEgPDwgMCwKLQlNTFg0X1BPUlRfVFlQRV9FVEgJPSAxIDw8IDEsCisJTUxYNF9QT1JUX1RZUEVfSUIJPSAxLAorCU1MWDRfUE9SVF9UWVBFX0VUSAk9IDIsCisJTUxYNF9QT1JUX1RZUEVfQVVUTwk9IDMKIH07CiAKIGVudW0gbWx4NF9zcGVjaWFsX3ZsYW5faWR4IHsKQEAgLTIzNyw2ICsyMzgsNyBAQAogCWVudW0gbWx4NF9wb3J0X3R5cGUJcG9ydF90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CiAJdTgJCQlzdXBwb3J0ZWRfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOwogCXUzMgkJCXBvcnRfbWFzazsKKwllbnVtIG1seDRfcG9ydF90eXBlCXBvc3NpYmxlX3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIH07CiAKIHN0cnVjdCBtbHg0X2J1Zl9saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAzMjM1NjE1Li4wNjVjZGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDQxLDEwICsxMDQxLDIzIEBACiB0eXBlZGVmIGludCAoKndvcmtfZm5fdCkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIGV4dGVybiB2b2lkIHdvcmtfd2l0aF9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLCB3b3JrX2ZuX3Qgd29ya19mbiwgdm9pZCAqZGF0YSk7CiBleHRlcm4gdm9pZCBzcGFyc2VfbWVtb3J5X3ByZXNlbnRfd2l0aF9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkKTsKLSNpZm5kZWYgQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklECi1leHRlcm4gaW50IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pOwotI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRCAqLwogI2VuZGlmIC8qIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUCAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQKSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEKQorc3RhdGljIGlubGluZSBpbnQgX19lYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXJldHVybiAwOworfQorI2Vsc2UKKy8qIHBsZWFzZSBzZWUgbW0vcGFnZV9hbGxvYy5jICovCitleHRlcm4gaW50IF9fbWVtaW5pdCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKKy8qIHRoZXJlIGlzIGEgcGVyLWFyY2ggYmFja2VuZCBmdW5jdGlvbi4gKi8KK2V4dGVybiBpbnQgX19tZW1pbml0IF9fZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7CisjZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEICovCisjZW5kaWYKKwogZXh0ZXJuIHZvaWQgc2V0X2RtYV9yZXNlcnZlKHVuc2lnbmVkIGxvbmcgbmV3X2RtYV9yZXNlcnZlKTsKIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmUodW5zaWduZWQgbG9uZywgaW50LCB1bnNpZ25lZCBsb25nLAogCQkJCXVuc2lnbmVkIGxvbmcsIGVudW0gbWVtbWFwX2NvbnRleHQpOwpAQCAtMTE1OSw2ICsxMTcyLDcgQEAKIAogLyogbW0vcGFnZS13cml0ZWJhY2suYyAqLwogaW50IHdyaXRlX29uZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgd2FpdCk7Cit2b2lkIHRhc2tfZGlydHlfaW5jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAogLyogcmVhZGFoZWFkLmMgKi8KICNkZWZpbmUgVk1fTUFYX1JFQURBSEVBRAkxMjgJLyoga2J5dGVzICovCkBAIC0xMzA0LDUgKzEzMTgsNiBAQAogCiBleHRlcm4gdm9pZCAqYWxsb2NfbG9ja2VkX2J1ZmZlcihzaXplX3Qgc2l6ZSk7CiBleHRlcm4gdm9pZCBmcmVlX2xvY2tlZF9idWZmZXIodm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCByZWxlYXNlX2xvY2tlZF9idWZmZXIodm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9NTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOTI5MTVlOC4uZDg0ZmViNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMjc2LDQgKzI3Niw3IEBACiAjZW5kaWYKIH07CiAKKy8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgbW1fc3RydWN0J3MgY3B1X3ZtX21hc2suICovCisjZGVmaW5lIG1tX2NwdW1hc2sobW0pICgmKG1tKS0+Y3B1X3ZtX21hc2spCisKICNlbmRpZiAvKiBfTElOVVhfTU1fVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggMDljMTRlMi4uMWFjYTZjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KIAogI2lmZGVmIENPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTCi0jZGVmaW5lIGVhcmx5X3Bmbl9pbl9uaWQocGZuLCBuaWQpCShlYXJseV9wZm5fdG9fbmlkKHBmbikgPT0gKG5pZCkpCitib29sIGVhcmx5X3Bmbl9pbl9uaWQodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpOwogI2Vsc2UKICNkZWZpbmUgZWFybHlfcGZuX2luX25pZChwZm4sIG5pZCkJKDEpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IGZkZTg2NjcuLjFiZjU5MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtNDU0LDQgKzQ1NCwxMyBAQAogCiAjZGVmaW5lIERNSV9NQVRDSChhLCBiKQl7IGEsIGIgfQogCisjZGVmaW5lIFBMQVRGT1JNX05BTUVfU0laRQkyMAorI2RlZmluZSBQTEFURk9STV9NT0RVTEVfUFJFRklYCSJwbGF0Zm9ybToiCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgeworCWNoYXIgbmFtZVtQTEFURk9STV9OQU1FX1NJWkVdOworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhCisJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7Cit9OworCiAjZW5kaWYgLyogTElOVVhfTU9EX0RFVklDRVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBjYWIyYTg1Li41MWY1NWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIE1OVF9OT0RJUkFUSU1FCTB4MTAKICNkZWZpbmUgTU5UX1JFTEFUSU1FCTB4MjAKICNkZWZpbmUgTU5UX1JFQURPTkxZCTB4NDAJLyogZG9lcyB0aGUgdXNlciB3YW50IHRoaXMgdG8gYmUgci9vPyAqLworI2RlZmluZSBNTlRfU1RSSUNUQVRJTUUgMHg4MAogCiAjZGVmaW5lIE1OVF9TSFJJTktBQkxFCTB4MTAwCiAjZGVmaW5lIE1OVF9JTUJBTEFOQ0VEX1dSSVRFX0NPVU5UCTB4MjAwIC8qIGp1c3QgZm9yIGRlYnVnZ2luZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAppbmRleCA1Mzc1ZmFjLi40M2RjOTdlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTY1LDcgKzY1LDcgQEAKIAltaWZpX3QJbWlmNmNfbWlmaTsJCS8qIEluZGV4IG9mIE1JRiAqLwogCXVuc2lnbmVkIGNoYXIgbWlmNmNfZmxhZ3M7CS8qIE1JRkZfIGZsYWdzICovCiAJdW5zaWduZWQgY2hhciB2aWZjX3RocmVzaG9sZDsJLyogdHRsIGxpbWl0ICovCi0JdV9zaG9ydAkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KKwlfX3UxNgkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KIAl1bnNpZ25lZCBpbnQgdmlmY19yYXRlX2xpbWl0OwkvKiBSYXRlIGxpbWl0ZXIgdmFsdWVzIChOSSkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmggYi9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oCmluZGV4IDg3MzBkNWQuLjEyYzlkZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaApAQCAtMzEsNiArMzEsNyBAQAogICoJTmVpZ2hib3IgQ2FjaGUgRW50cnkgRmxhZ3MKICAqLwogCisjZGVmaW5lIE5URl9VU0UJCTB4MDEKICNkZWZpbmUgTlRGX1BST1hZCTB4MDgJLyogPT0gQVRGX1BVQkwgKi8KICNkZWZpbmUgTlRGX1JPVVRFUgkweDgwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDQ1MTVlZmEuLjRmYzJmZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtMTI5LDExICsxMjksMTUgQEAKIAlzb2NrZXRfc3RhdGUJCXN0YXRlOwogCXNob3J0CQkJdHlwZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CisJLyoKKwkgKiBQbGVhc2Uga2VlcCBmYXN5bmNfbGlzdCAmIHdhaXQgZmllbGRzIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUKKwkgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmFzeW5jX2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKwogCXN0cnVjdCBmaWxlCQkqZmlsZTsKIAlzdHJ1Y3Qgc29jawkJKnNrOwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOwogfTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTdmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfX05FVF9EUk9QTU9OX0gKKyNkZWZpbmUgX19ORVRfRFJPUE1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKK3N0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCB7CisJX191OCBwY1s4XTsKKwlfX3UzMiBjb3VudDsKK307CisKKyNkZWZpbmUgTkVUX0RNX0NGR19WRVJTSU9OICAwCisjZGVmaW5lIE5FVF9ETV9DRkdfQUxFUlRfQ09VTlQgIDEKKyNkZWZpbmUgTkVUX0RNX0NGR19BTEVSVF9ERUxBWSAyCisjZGVmaW5lIE5FVF9ETV9DRkdfTUFYIDMKKworc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgeworCV9fdTMyIHR5cGU7CisJX191NjQgZGF0YSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCitzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19tc2cgeworCV9fdTMyIGVudHJpZXM7CisJc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgb3B0aW9uc1swXTsKK307CisKK3N0cnVjdCBuZXRfZG1fYWxlcnRfbXNnIHsKKwlfX3UzMiBlbnRyaWVzOworCXN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCBwb2ludHNbMF07Cit9OworCitzdHJ1Y3QgbmV0X2RtX3VzZXJfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBuZXRfZG1fY29uZmlnX21zZyB1c2VyOworCQlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyBhbGVydDsKKwl9IHU7Cit9OworCisKKy8qIFRoZXNlIGFyZSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGVzIGZvciB0aGlzIHByb3RvY29sICovCisKK2VudW0geworCU5FVF9ETV9DTURfVU5TUEVDID0gMCwKKwlORVRfRE1fQ01EX0FMRVJULAorCU5FVF9ETV9DTURfQ09ORklHLAorCU5FVF9ETV9DTURfU1RBUlQsCisJTkVUX0RNX0NNRF9TVE9QLAorCV9ORVRfRE1fQ01EX01BWCwKK307CisKKyNkZWZpbmUgTkVUX0RNX0NNRF9NQVggKF9ORVRfRE1fQ01EX01BWCAtIDEpCisKKy8qCisgKiBPdXIgZ3JvdXAgaWRlbnRpZmllcnMKKyAqLworI2RlZmluZSBORVRfRE1fR1JQX0FMRVJUIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggYmQ4YjRjYTguLmJlM2ViZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzMwLDYgKzMzMCwxNCBAQAogCU5BUElfU1RBVEVfTlBTVkMsCS8qIE5ldHBvbGwgLSBkb24ndCBkZXF1ZXVlIGZyb20gcG9sbF9saXN0ICovCiB9OwogCitlbnVtIHsKKwlHUk9fTUVSR0VELAorCUdST19NRVJHRURfRlJFRSwKKwlHUk9fSEVMRCwKKwlHUk9fTk9STUFMLAorCUdST19EUk9QLAorfTsKKwogZXh0ZXJuIHZvaWQgX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5hcGlfZGlzYWJsZV9wZW5kaW5nKHN0cnVjdCBuYXBpX3N0cnVjdCAqbikKQEAgLTEwODUsNiArMTA5Myw3IEBACiBleHRlcm4gaW50IAkJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludAkJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gaW50CQlpbml0X2R1bW15X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkCQluZXRkZXZfcmVzeW5jX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIGludCBjYWxsX25ldGRldmljZV9ub3RpZmllcnModW5zaWduZWQgbG9uZyB2YWwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlCSpkZXZfZ2V0X2J5X2luZGV4KHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCmluZGV4IGEwNDlkZjQuLjMwNjY3ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKQEAgLTIsNiArMiw4IEBACiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVENQX0gKIC8qIFRDUCB0cmFja2luZy4gKi8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFRoaXMgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKGN0bmV0bGluaykgKi8KIGVudW0gdGNwX2Nvbm50cmFjayB7CiAJVENQX0NPTk5UUkFDS19OT05FLApAQCAtMzQsOCArMzYsOCBAQAogI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VECTB4MTAKIAogc3RydWN0IG5mX2N0X3RjcF9mbGFncyB7Ci0JdV9pbnQ4X3QgZmxhZ3M7Ci0JdV9pbnQ4X3QgbWFzazsKKwlfX3U4IGZsYWdzOworCV9fdTggbWFzazsKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IDEzNWU1Y2YuLmM2MDAwODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCkBAIC0yNSw4ICsyNSw4IEBACiAvKiBHZW5lcmFsIGZvcm0gb2YgYWRkcmVzcyBmYW1pbHkgZGVwZW5kZW50IG1lc3NhZ2UuCiAgKi8KIHN0cnVjdCBuZmdlbm1zZyB7Ci0JdV9pbnQ4X3QgIG5mZ2VuX2ZhbWlseTsJCS8qIEFGX3h4eCAqLwotCXVfaW50OF90ICB2ZXJzaW9uOwkJLyogbmZuZXRsaW5rIHZlcnNpb24gKi8KKwlfX3U4ICBuZmdlbl9mYW1pbHk7CQkvKiBBRl94eHggKi8KKwlfX3U4ICB2ZXJzaW9uOwkJLyogbmZuZXRsaW5rIHZlcnNpb24gKi8KIAlfX2JlMTYgICAgcmVzX2lkOwkJLyogcmVzb3VyY2UgaWQgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaAppbmRleCBlMTQ1MTc2Li5lZGE1NWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCkBAIC0xLDUgKzEsOCBAQAogI2lmbmRlZiBfTkZORVRMSU5LX0NPTVBBVF9ICiAjZGVmaW5lIF9ORk5FVExJTktfQ09NUEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpZm5kZWYgX19LRVJORUxfXwogLyogT2xkIG5mbmV0bGluayBtYWNyb3MgZm9yIHVzZXJzcGFjZSAqLwogCkBAIC0yMCw4ICsyMyw4IEBACiAKIHN0cnVjdCBuZmF0dHIKIHsKLQl1X2ludDE2X3QgbmZhX2xlbjsKLQl1X2ludDE2X3QgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CisJX191MTYgbmZhX2xlbjsKKwlfX3UxNiBuZmFfdHlwZTsJLyogd2UgdXNlIDE1IGJpdHMgZm9yIHRoZSB0eXBlLCBhbmQgdGhlIGhpZ2hlc3QKIAkJCQkgKiBiaXQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBuZXN0ZWQgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaAppbmRleCBmNjYxNzMxLi5kM2JhYjdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCkBAIC0xNywxNCArMTcsMTQgQEAKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X2hkciB7CiAJX19iZTE2CQlod19wcm90b2NvbDsJLyogaHcgcHJvdG9jb2wgKG5ldHdvcmsgb3JkZXIpICovCi0JdV9pbnQ4X3QJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCi0JdV9pbnQ4X3QJX3BhZDsKKwlfX3U4CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLworCV9fdTgJX3BhZDsKIH07CiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9odyB7CiAJX19iZTE2CQlod19hZGRybGVuOwotCXVfaW50MTZfdAlfcGFkOwotCXVfaW50OF90CWh3X2FkZHJbOF07CisJX191MTYJX3BhZDsKKwlfX3U4CWh3X2FkZHJbOF07CiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKQEAgLTM1LDEyICszNSwxMiBAQAogZW51bSBuZnVsbmxfYXR0cl90eXBlIHsKIAlORlVMQV9VTlNQRUMsCiAJTkZVTEFfUEFDS0VUX0hEUiwKLQlORlVMQV9NQVJLLAkJCS8qIHVfaW50MzJfdCBuZm1hcmsgKi8KKwlORlVMQV9NQVJLLAkJCS8qIF9fdTMyIG5mbWFyayAqLwogCU5GVUxBX1RJTUVTVEFNUCwJCS8qIG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCAqLwotCU5GVUxBX0lGSU5ERVhfSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GVUxBX0lGSU5ERVhfT1VUREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX1BIWVNJTkRFViwJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9JTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX09VVERFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX1BIWVNJTkRFViwJLyogX191MzIgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfUEhZU09VVERFViwJLyogX191MzIgaWZpbmRleCAqLwogCU5GVUxBX0hXQUREUiwJCQkvKiBuZnVsbmxfbXNnX3BhY2tldF9odyAqLwogCU5GVUxBX1BBWUxPQUQsCQkJLyogb3BhcXVlIGRhdGEgcGF5bG9hZCAqLwogCU5GVUxBX1BSRUZJWCwJCQkvKiBzdHJpbmcgcHJlZml4ICovCkBAIC02NSwyMyArNjUsMjMgQEAKIH07CiAKIHN0cnVjdCBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgewotCXVfaW50OF90CWNvbW1hbmQ7CS8qIG5mdWxubF9tc2dfY29uZmlnX2NtZHMgKi8KKwlfX3U4CWNvbW1hbmQ7CS8qIG5mdWxubF9tc2dfY29uZmlnX2NtZHMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19jb25maWdfbW9kZSB7CiAJX19iZTMyCQljb3B5X3JhbmdlOwotCXVfaW50OF90CWNvcHlfbW9kZTsKLQl1X2ludDhfdAlfcGFkOworCV9fdTgJY29weV9tb2RlOworCV9fdTgJX3BhZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBlbnVtIG5mdWxubF9hdHRyX2NvbmZpZyB7CiAJTkZVTEFfQ0ZHX1VOU1BFQywKIAlORlVMQV9DRkdfQ01ELAkJCS8qIG5mdWxubF9tc2dfY29uZmlnX2NtZCAqLwogCU5GVUxBX0NGR19NT0RFLAkJCS8qIG5mdWxubF9tc2dfY29uZmlnX21vZGUgKi8KLQlORlVMQV9DRkdfTkxCVUZTSVosCQkvKiB1X2ludDMyX3QgYnVmZmVyIHNpemUgKi8KLQlORlVMQV9DRkdfVElNRU9VVCwJCS8qIHVfaW50MzJfdCBpbiAxLzEwMCBzICovCi0JTkZVTEFfQ0ZHX1FUSFJFU0gsCQkvKiB1X2ludDMyX3QgKi8KLQlORlVMQV9DRkdfRkxBR1MsCQkvKiB1X2ludDE2X3QgKi8KKwlORlVMQV9DRkdfTkxCVUZTSVosCQkvKiBfX3UzMiBidWZmZXIgc2l6ZSAqLworCU5GVUxBX0NGR19USU1FT1VULAkJLyogX191MzIgaW4gMS8xMDAgcyAqLworCU5GVUxBX0NGR19RVEhSRVNILAkJLyogX191MzIgKi8KKwlORlVMQV9DRkdfRkxBR1MsCQkvKiBfX3UxNiAqLwogCV9fTkZVTEFfQ0ZHX01BWAogfTsKICNkZWZpbmUgTkZVTEFfQ0ZHX01BWCAoX19ORlVMQV9DRkdfTUFYIC0xKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaAppbmRleCA4M2U3ODk2Li4yNDU1ZmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaApAQCAtMTUsMTMgKzE1LDEzIEBACiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9oZHIgewogCV9fYmUzMgkJcGFja2V0X2lkOwkvKiB1bmlxdWUgSUQgb2YgcGFja2V0IGluIHF1ZXVlICovCiAJX19iZTE2CQlod19wcm90b2NvbDsJLyogaHcgcHJvdG9jb2wgKG5ldHdvcmsgb3JkZXIpICovCi0JdV9pbnQ4X3QJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCisJX191OAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9odyB7CiAJX19iZTE2CQlod19hZGRybGVuOwotCXVfaW50MTZfdAlfcGFkOwotCXVfaW50OF90CWh3X2FkZHJbOF07CisJX191MTYJX3BhZDsKKwlfX3U4CWh3X2FkZHJbOF07CiB9OwogCiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgewpAQCAtMzMsMTIgKzMzLDEyIEBACiAJTkZRQV9VTlNQRUMsCiAJTkZRQV9QQUNLRVRfSERSLAogCU5GUUFfVkVSRElDVF9IRFIsCQkvKiBuZnFubF9tc2dfdmVyZGljdF9ocmQgKi8KLQlORlFBX01BUkssCQkJLyogdV9pbnQzMl90IG5mbWFyayAqLworCU5GUUFfTUFSSywJCQkvKiBfX3UzMiBuZm1hcmsgKi8KIAlORlFBX1RJTUVTVEFNUCwJCQkvKiBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFtcCAqLwotCU5GUUFfSUZJTkRFWF9JTkRFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZRQV9JRklOREVYX09VVERFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZRQV9JRklOREVYX1BIWVNJTkRFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZRQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX0lOREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9PVVRERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX1BIWVNJTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfUEhZU09VVERFViwJLyogX191MzIgaWZpbmRleCAqLwogCU5GUUFfSFdBRERSLAkJCS8qIG5mcW5sX21zZ19wYWNrZXRfaHcgKi8KIAlORlFBX1BBWUxPQUQsCQkJLyogb3BhcXVlIGRhdGEgcGF5bG9hZCAqLwogCkBAIC02MSw4ICs2MSw4IEBACiB9OwogCiBzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19jbWQgewotCXVfaW50OF90CWNvbW1hbmQ7CS8qIG5mcW5sX21zZ19jb25maWdfY21kcyAqLwotCXVfaW50OF90CV9wYWQ7CisJX191OAljb21tYW5kOwkvKiBuZnFubF9tc2dfY29uZmlnX2NtZHMgKi8KKwlfX3U4CV9wYWQ7CiAJX19iZTE2CQlwZjsJCS8qIEFGX3h4eCBmb3IgUEZfW1VOXUJJTkQgKi8KIH07CiAKQEAgLTc0LDcgKzc0LDcgQEAKIAogc3RydWN0IG5mcW5sX21zZ19jb25maWdfcGFyYW1zIHsKIAlfX2JlMzIJCWNvcHlfcmFuZ2U7Ci0JdV9pbnQ4X3QJY29weV9tb2RlOwkvKiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlICovCisJX191OAljb3B5X21vZGU7CS8qIGVudW0gbmZxbmxfY29uZmlnX21vZGUgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKQEAgLTgyLDcgKzgyLDcgQEAKIAlORlFBX0NGR19VTlNQRUMsCiAJTkZRQV9DRkdfQ01ELAkJCS8qIG5mcW5sX21zZ19jb25maWdfY21kICovCiAJTkZRQV9DRkdfUEFSQU1TLAkJLyogbmZxbmxfbXNnX2NvbmZpZ19wYXJhbXMgKi8KLQlORlFBX0NGR19RVUVVRV9NQVhMRU4sCQkvKiB1X2ludDMyX3QgKi8KKwlORlFBX0NGR19RVUVVRV9NQVhMRU4sCQkvKiBfX3UzMiAqLwogCV9fTkZRQV9DRkdfTUFYCiB9OwogI2RlZmluZSBORlFBX0NGR19NQVggKF9fTkZRQV9DRkdfTUFYLTEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAppbmRleCA3MjkxOGI3Li43YjFhNjUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YX1RBQkxFU19ICiAjZGVmaW5lIF9YX1RBQkxFU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4gMzAKICNkZWZpbmUgWFRfVEFCTEVfTUFYTkFNRUxFTiAzMgogCkBAIC04LDIyICsxMCwyMiBAQAogewogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCQkJX191MTYgbWF0Y2hfc2l6ZTsKIAogCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KIAkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJCV9fdTggcmV2aXNpb247CiAJCX0gdXNlcjsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCQkJX191MTYgbWF0Y2hfc2l6ZTsKIAogCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLwogCQkJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIAkJfSBrZXJuZWw7CiAKIAkJLyogVG90YWwgbGVuZ3RoICovCi0JCXVfaW50MTZfdCBtYXRjaF9zaXplOworCQlfX3UxNiBtYXRjaF9zaXplOwogCX0gdTsKIAogCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKQEAgLTMzLDIyICszNSwyMiBAQAogewogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJCV9fdTE2IHRhcmdldF9zaXplOwogCiAJCQkvKiBVc2VkIGJ5IHVzZXJzcGFjZSAqLwogCQkJY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CiAKLQkJCXVfaW50OF90IHJldmlzaW9uOworCQkJX191OCByZXZpc2lvbjsKIAkJfSB1c2VyOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCQkJX191MTYgdGFyZ2V0X3NpemU7CiAKIAkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KIAkJCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAkJfSBrZXJuZWw7CiAKIAkJLyogVG90YWwgbGVuZ3RoICovCi0JCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJX191MTYgdGFyZ2V0X3NpemU7CiAJfSB1OwogCiAJdW5zaWduZWQgY2hhciBkYXRhWzBdOwpAQCAtNzQsNyArNzYsNyBAQAogewogCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JdV9pbnQ4X3QgcmV2aXNpb247CisJX191OCByZXZpc2lvbjsKIH07CiAKIC8qIENPTlRJTlVFIHZlcmRpY3QgZm9yIHRhcmdldHMgKi8KQEAgLTkwLDEwICs5MiwxMCBAQAogICovCiBzdHJ1Y3QgX3h0X2FsaWduCiB7Ci0JdV9pbnQ4X3QgdTg7Ci0JdV9pbnQxNl90IHUxNjsKLQl1X2ludDMyX3QgdTMyOwotCXVfaW50NjRfdCB1NjQ7CisJX191OCB1ODsKKwlfX3UxNiB1MTY7CisJX191MzIgdTMyOworCV9fdTY0IHU2NDsKIH07CiAKICNkZWZpbmUgWFRfQUxJR04ocykgKCgocykgKyAoX19hbGlnbm9mX18oc3RydWN0IF94dF9hbGlnbiktMSkpIAlcCkBAIC0xMDksNyArMTExLDcgQEAKIAogc3RydWN0IHh0X2NvdW50ZXJzCiB7Ci0JdV9pbnQ2NF90IHBjbnQsIGJjbnQ7CQkJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzICovCisJX191NjQgcGNudCwgYmNudDsJCQkvKiBQYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMgKi8KIH07CiAKIC8qIFRoZSBhcmd1bWVudCB0byBJUFRfU09fQUREX0NPVU5URVJTLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKaW5kZXggNTgxMTEzNS4uYTgxM2JmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCkBAIC0xLDggKzEsMTAgQEAKICNpZm5kZWYgX1hUX0NMQVNTSUZZX0gKICNkZWZpbmUgX1hUX0NMQVNTSUZZX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9jbGFzc2lmeV90YXJnZXRfaW5mbyB7Ci0JdV9pbnQzMl90IHByaW9yaXR5OworCV9fdTMyIHByaW9yaXR5OwogfTsKIAogI2VuZGlmIC8qX1hUX0NMQVNTSUZZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCmluZGV4IDRlNThiYTQuLjc2MzVjOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5NQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9DT05OTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQ29weXJpZ2h0IChDKSAyMDAyLDIwMDQgTUFSQSBTeXN0ZW1zIEFCIDxodHRwOi8vd3d3Lm1hcmFzeXN0ZW1zLmNvbT4KICAqIGJ5IEhlbnJpayBOb3Jkc3Ryb20gPGhub0BtYXJhc3lzdGVtcy5jb20+CiAgKgpAQCAtMTksMTIgKzIxLDEyIEBACiBzdHJ1Y3QgeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gewogCXVuc2lnbmVkIGxvbmcgbWFyazsKIAl1bnNpZ25lZCBsb25nIG1hc2s7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfdGdpbmZvMSB7Ci0JdV9pbnQzMl90IGN0bWFyaywgY3RtYXNrLCBuZm1hc2s7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3UzMiBjdG1hcmssIGN0bWFzaywgbmZtYXNrOworCV9fdTggbW9kZTsKIH07CiAKICNlbmRpZiAvKl9YVF9DT05OTUFSS19IX3RhcmdldCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaAppbmRleCBjNmJkNzU0Li5iOTczZmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKQEAgLTEsMTMgKzEsMTUgQEAKICNpZm5kZWYgX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJQ09OTlNFQ01BUktfU0FWRSA9IDEsCiAJQ09OTlNFQ01BUktfUkVTVE9SRSwKIH07CiAKIHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyB7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaAppbmRleCAxNGRhMTk2Li42NDhlMGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCkBAIC0xMSwxNSArMTEsMTYgQEAKICNpZm5kZWYgX1hUX0RTQ1BfVEFSR0VUX0gKICNkZWZpbmUgX1hUX0RTQ1BfVEFSR0VUX0gKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIHRhcmdldCBpbmZvICovCiBzdHJ1Y3QgeHRfRFNDUF9pbmZvIHsKLQl1X2ludDhfdCBkc2NwOworCV9fdTggZHNjcDsKIH07CiAKIHN0cnVjdCB4dF90b3NfdGFyZ2V0X2luZm8gewotCXVfaW50OF90IHRvc192YWx1ZTsKLQl1X2ludDhfdCB0b3NfbWFzazsKKwlfX3U4IHRvc192YWx1ZTsKKwlfX3U4IHRvc19tYXNrOwogfTsKIAogI2VuZGlmIC8qIF9YVF9EU0NQX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKaW5kZXggNzc4YjI3OC4uMDI4MzA0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX01BUktfSF90YXJnZXQKICNkZWZpbmUgX1hUX01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFZlcnNpb24gMCAqLwogc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8gewogCXVuc2lnbmVkIGxvbmcgbWFyazsKQEAgLTE1LDExICsxNywxMSBAQAogCiBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mb192MSB7CiAJdW5zaWduZWQgbG9uZyBtYXJrOwotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogc3RydWN0IHh0X21hcmtfdGdpbmZvMiB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7CisJX191MzIgbWFyaywgbWFzazsKIH07CiAKICNlbmRpZiAvKl9YVF9NQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaAppbmRleCBjZGNkMGVkLi44N2I1ODMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKQEAgLTEsMTcgKzEsMTkgQEAKICNpZm5kZWYgX1hUX05GTE9HX1RBUkdFVAogI2RlZmluZSBfWFRfTkZMT0dfVEFSR0VUCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfR1JPVVAJCTB4MQotI2RlZmluZSBYVF9ORkxPR19ERUZBVUxUX1RIUkVTSE9MRAkxCisjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfVEhSRVNIT0xECTAKIAogI2RlZmluZSBYVF9ORkxPR19NQVNLCQkJMHgwCiAKIHN0cnVjdCB4dF9uZmxvZ19pbmZvIHsKLQl1X2ludDMyX3QJbGVuOwotCXVfaW50MTZfdAlncm91cDsKLQl1X2ludDE2X3QJdGhyZXNob2xkOwotCXVfaW50MTZfdAlmbGFnczsKLQl1X2ludDE2X3QJcGFkOworCV9fdTMyCWxlbjsKKwlfX3UxNglncm91cDsKKwlfX3UxNgl0aHJlc2hvbGQ7CisJX191MTYJZmxhZ3M7CisJX191MTYJcGFkOwogCWNoYXIJCXByZWZpeFs2NF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKaW5kZXggOWE5YWY3OWYuLjk4MmE4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKQEAgLTgsOSArOCwxMSBAQAogI2lmbmRlZiBfWFRfTkZRX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9ORlFfVEFSR0VUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRhcmdldCBpbmZvICovCiBzdHJ1Y3QgeHRfTkZRX2luZm8gewotCXVfaW50MTZfdCBxdWV1ZW51bTsKKwlfX3UxNiBxdWV1ZW51bTsKIH07CiAKICNlbmRpZiAvKiBfWFRfTkZRX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmgKaW5kZXggZjc5ZTMxMy4uNjYwNWUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9UQVJHRVRfSAogI2RlZmluZSBfWFRfUkFURUVTVF9UQVJHRVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JhdGVlc3RfdGFyZ2V0X2luZm8gewogCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKLQlpbnQ4X3QJCQlpbnRlcnZhbDsKLQl1X2ludDhfdAkJZXdtYV9sb2c7CisJX19zOAkJCWludGVydmFsOworCV9fdTgJCWV3bWFfbG9nOwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlzdHJ1Y3QgeHRfcmF0ZWVzdAkqZXN0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaAppbmRleCBjNTNmYmZmLi42ZmNkMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfU0VDTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB2YXJpb3VzIHNlY3VyaXR5IHN1YnN5c3RlbXMgKGJ1dCBub3QKICAqIGF0IHRoZSBzYW1lIHRpbWUpLgpAQCAtMTIsMTIgKzE0LDEyIEBACiAjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWAkyNTYKIAogc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyB7Ci0JdV9pbnQzMl90IHNlbHNpZDsKKwlfX3UzMiBzZWxzaWQ7CiAJY2hhciBzZWxjdHhbU0VDTUFSS19TRUxDVFhfTUFYXTsKIH07CiAKIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gc2VsOwogCX0gdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKaW5kZXggNTNhMjkyYy4uOWE2OTYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKQEAgLTEsOCArMSwxMCBAQAogI2lmbmRlZiBfWFRfVENQTVNTX0gKICNkZWZpbmUgX1hUX1RDUE1TU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX2luZm8gewotCXVfaW50MTZfdCBtc3M7CisJX191MTYgbXNzOwogfTsKIAogI2RlZmluZSBYVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKaW5kZXggYzAyMmM5OC4uNTJiZDYxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OQllURVNfSAogI2RlZmluZSBfWFRfQ09OTkJZVEVTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfY29ubmJ5dGVzX3doYXQgewogCVhUX0NPTk5CWVRFU19QS1RTLAogCVhUX0NPTk5CWVRFU19CWVRFUywKQEAgLTE5LDcgKzIxLDcgQEAKIAkJYWxpZ25lZF91NjQgZnJvbTsJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwogCQlhbGlnbmVkX3U2NCB0bzsJCS8qIGNvdW50IHRvIGJlIG1hdGNoZWQgKi8KIAl9IGNvdW50OwotCXVfaW50OF90IHdoYXQ7CQkvKiBpcHRfY29ubmJ5dGVzX3doYXQgKi8KLQl1X2ludDhfdCBkaXJlY3Rpb247CS8qIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uICovCisJX191OCB3aGF0OwkJLyogaXB0X2Nvbm5ieXRlc193aGF0ICovCisJX191OCBkaXJlY3Rpb247CS8qIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uICovCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaAppbmRleCAzNTllZjg2Li41NzFlMjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OTUFSS19ICiAjZGVmaW5lIF9YVF9DT05OTUFSS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgogICogYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KICAqCkBAIC0xMiwxMiArMTQsMTIgQEAKIAogc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8gewogCXVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCBpbnZlcnQ7CiB9OwogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfbXRpbmZvMSB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIG1hcmssIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTk1BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCmluZGV4IDhmNTM0NTIuLjM0MzBjNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC02Myw5ICs2Myw5IEBACiAJdW5zaWduZWQgbG9uZyBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7CiAKIAkvKiBGbGFncyB3b3JkICovCi0JdV9pbnQ4X3QgZmxhZ3M7CisJX191OCBmbGFnczsKIAkvKiBJbnZlcnNlIGZsYWdzICovCi0JdV9pbnQ4X3QgaW52ZmxhZ3M7CisJX191OCBpbnZmbGFnczsKIH07CiAKIHN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMSB7CkBAIC03MywxMiArNzMsMTIgQEAKIAl1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrOwogCXVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzazsKLQl1X2ludDMyX3QgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OwotCXVfaW50MTZfdCBsNHByb3RvOworCV9fdTMyIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKKwlfX3UxNiBsNHByb3RvOwogCV9fYmUxNiBvcmlnc3JjX3BvcnQsIG9yaWdkc3RfcG9ydDsKIAlfX2JlMTYgcmVwbHNyY19wb3J0LCByZXBsZHN0X3BvcnQ7Ci0JdV9pbnQxNl90IG1hdGNoX2ZsYWdzLCBpbnZlcnRfZmxhZ3M7Ci0JdV9pbnQ4X3Qgc3RhdGVfbWFzaywgc3RhdHVzX21hc2s7CisJX191MTYgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKKwlfX3U4IHN0YXRlX21hc2ssIHN0YXR1c19tYXNrOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5UUkFDS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaAppbmRleCBlMDIyMWI5Li5hNTc5ZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfRENDUF9IXwogI2RlZmluZSBfWFRfRENDUF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9EQ0NQX1NSQ19QT1JUUwkgICAgICAgIDB4MDEKICNkZWZpbmUgWFRfRENDUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgogI2RlZmluZSBYVF9EQ0NQX1RZUEUJCQkweDA0CkBAIC05LDE0ICsxMSwxNCBAQAogI2RlZmluZSBYVF9EQ0NQX1ZBTElEX0ZMQUdTCQkweDBmCiAKIHN0cnVjdCB4dF9kY2NwX2luZm8gewotCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCiAKLQl1X2ludDE2X3QgZmxhZ3M7Ci0JdV9pbnQxNl90IGludmZsYWdzOworCV9fdTE2IGZsYWdzOworCV9fdTE2IGludmZsYWdzOwogCi0JdV9pbnQxNl90IHR5cGVtYXNrOwotCXVfaW50OF90IG9wdGlvbjsKKwlfX3UxNiB0eXBlbWFzazsKKwlfX3U4IG9wdGlvbjsKIH07CiAKICNlbmRpZiAvKiBfWFRfRENDUF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCmluZGV4IGY0OWJjMWEuLjE1Zjg5MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmgKQEAgLTEwLDIwICsxMCwyMiBAQAogI2lmbmRlZiBfWFRfRFNDUF9ICiAjZGVmaW5lIF9YVF9EU0NQX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfRFNDUF9NQVNLCTB4ZmMJLyogMTExMTExMDAgKi8KICNkZWZpbmUgWFRfRFNDUF9TSElGVAkyCiAjZGVmaW5lIFhUX0RTQ1BfTUFYCTB4M2YJLyogMDAxMTExMTEgKi8KIAogLyogbWF0Y2ggaW5mbyAqLwogc3RydWN0IHh0X2RzY3BfaW5mbyB7Ci0JdV9pbnQ4X3QgZHNjcDsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCBkc2NwOworCV9fdTggaW52ZXJ0OwogfTsKIAogc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvIHsKLQl1X2ludDhfdCB0b3NfbWFzazsKLQl1X2ludDhfdCB0b3NfdmFsdWU7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTggdG9zX21hc2s7CisJX191OCB0b3NfdmFsdWU7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLyogX1hUX0RTQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAppbmRleCA5MzgwZmIxYy4uZWY2ZmE0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKQEAgLTEsMTAgKzEsMTIgQEAKICNpZm5kZWYgX1hUX0VTUF9ICiAjZGVmaW5lIF9YVF9FU1BfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X2VzcAogewotCXVfaW50MzJfdCBzcGlzWzJdOwkvKiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKi8KLQl1X2ludDhfdCAgaW52ZmxhZ3M7CS8qIEludmVyc2UgZmxhZ3MgKi8KKwlfX3UzMiBzcGlzWzJdOwkvKiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKi8KKwlfX3U4ICBpbnZmbGFnczsJLyogSW52ZXJzZSBmbGFncyAqLwogfTsKIAogLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCB4dF9lc3AuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCmluZGV4IDUxYjE4ZDguLmIxOTI1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfSEFTSExJTUlUX0gKICNkZWZpbmUgX1hUX0hBU0hMSU1JVF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCiAjZGVmaW5lIFhUX0hBU0hMSU1JVF9TQ0FMRSAxMDAwMAogLyogMS8xMCwwMDAgc2VjIHBlcmlvZCA9PiBtYXggb2YgMTAsMDAwL3NlYy4gIE1pbiByYXRlIGlzIHRoZW4gNDI5NDkwCkBAIC0xOCwxNSArMjAsMTUgQEAKIH07CiAKIHN0cnVjdCBoYXNobGltaXRfY2ZnIHsKLQl1X2ludDMyX3QgbW9kZTsJICAvKiBiaXRtYXNrIG9mIFhUX0hBU0hMSU1JVF9IQVNIXyogKi8KLQl1X2ludDMyX3QgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KLQl1X2ludDMyX3QgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCisJX191MzIgbW9kZTsJICAvKiBiaXRtYXNrIG9mIFhUX0hBU0hMSU1JVF9IQVNIXyogKi8KKwlfX3UzMiBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCV9fdTMyIGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLwogCiAJLyogdXNlciBzcGVjaWZpZWQgKi8KLQl1X2ludDMyX3Qgc2l6ZTsJCS8qIGhvdyBtYW55IGJ1Y2tldHMgKi8KLQl1X2ludDMyX3QgbWF4OwkJLyogbWF4IG51bWJlciBvZiBlbnRyaWVzICovCi0JdV9pbnQzMl90IGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLwotCXVfaW50MzJfdCBleHBpcmU7CS8qIHdoZW4gZG8gZW50cmllcyBleHBpcmU/ICovCisJX191MzIgc2l6ZTsJCS8qIGhvdyBtYW55IGJ1Y2tldHMgKi8KKwlfX3UzMiBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlfX3UzMiBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KKwlfX3UzMiBleHBpcmU7CS8qIHdoZW4gZG8gZW50cmllcyBleHBpcmU/ICovCiB9OwogCiBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gewpAQCAtNDIsMTcgKzQ0LDE3IEBACiB9OwogCiBzdHJ1Y3QgaGFzaGxpbWl0X2NmZzEgewotCXVfaW50MzJfdCBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLwotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKwlfX3UzMiBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiB1c2VyIHNwZWNpZmllZCAqLwotCXVfaW50MzJfdCBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLwotCXVfaW50MzJfdCBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KLQl1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCi0JdV9pbnQzMl90IGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KIAotCXVfaW50OF90IHNyY21hc2ssIGRzdG1hc2s7CisJX191OCBzcmNtYXNrLCBkc3RtYXNrOwogfTsKIAogc3RydWN0IHh0X2hhc2hsaW1pdF9tdGluZm8xIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaAppbmRleCBhNDI5OWM3Li5jMWYyMWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSAogI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSCAxCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHsKIAlJUFJBTkdFX1NSQyAgICAgPSAxIDw8IDAsCS8qIG1hdGNoIHNvdXJjZSBJUCBhZGRyZXNzICovCiAJSVBSQU5HRV9EU1QgICAgID0gMSA8PCAxLAkvKiBtYXRjaCBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzICovCkBAIC0xMSw3ICsxMyw3IEBACiBzdHJ1Y3QgeHRfaXByYW5nZV9tdGluZm8gewogCXVuaW9uIG5mX2luZXRfYWRkciBzcmNfbWluLCBzcmNfbWF4OwogCXVuaW9uIG5mX2luZXRfYWRkciBkc3RfbWluLCBkc3RfbWF4OwotCXVfaW50OF90IGZsYWdzOworCV9fdTggZmxhZ3M7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX05FVEZJTFRFUl9YVF9JUFJBTkdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKaW5kZXggN2MyYjQzOS4uYjgyZWQ3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfWFRfTEVOR1RIX0gKICNkZWZpbmUgX1hUX0xFTkdUSF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfbGVuZ3RoX2luZm8gewotICAgIHVfaW50MTZfdAltaW4sIG1heDsKLSAgICB1X2ludDhfdAlpbnZlcnQ7CisgICAgX191MTYJbWluLCBtYXg7CisgICAgX191OAlpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfTEVOR1RIX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKaW5kZXggZmRhMjIyYy4uYmI0N2ZjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfUkFURV9ICiAjZGVmaW5lIF9YVF9SQVRFX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRpbWluZ3MgYXJlIGluIG1pbGxpc2Vjb25kcy4gKi8KICNkZWZpbmUgWFRfTElNSVRfU0NBTEUgMTAwMDAKIApAQCAtOSwxMyArMTEsMTMgQEAKIC8qIDEvMTAsMDAwIHNlYyBwZXJpb2QgPT4gbWF4IG9mIDEwLDAwMC9zZWMuICBNaW4gcmF0ZSBpcyB0aGVuIDQyOTQ5MAogICAgc2Vjb25kcywgb3Igb25lIGV2ZXJ5IDU5IGhvdXJzLiAqLwogc3RydWN0IHh0X3JhdGVpbmZvIHsKLQl1X2ludDMyX3QgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KLQl1X2ludDMyX3QgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCisJX191MzIgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwlfX3UzMiBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KIAogCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCiAJdW5zaWduZWQgbG9uZyBwcmV2OyAvKiBtb3ZlZCB0byB4dF9saW1pdF9wcml2ICovCi0JdV9pbnQzMl90IGNyZWRpdDsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLwotCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworCV9fdTMyIGNyZWRpdDsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdF9jYXAsIGNvc3Q7CiAKIAlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqbWFzdGVyOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaAppbmRleCBmYWU3NGJjLi42ZmE0NjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCkBAIC0xLDE0ICsxLDE2IEBACiAjaWZuZGVmIF9YVF9NQVJLX0gKICNkZWZpbmUgX1hUX01BUktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X21hcmtfaW5mbyB7CiAgICAgdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotICAgIHVfaW50OF90IGludmVydDsKKyAgICBfX3U4IGludmVydDsKIH07CiAKIHN0cnVjdCB4dF9tYXJrX210aW5mbzEgewotCXVfaW50MzJfdCBtYXJrLCBtYXNrOwotCXVfaW50OF90IGludmVydDsKKwlfX3UzMiBtYXJrLCBtYXNrOworCV9fdTggaW52ZXJ0OwogfTsKIAogI2VuZGlmIC8qX1hUX01BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCmluZGV4IGQ0OWVlNDEuLjE4NWRiNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfTVVMVElQT1JUX0gKICNkZWZpbmUgX1hUX01VTFRJUE9SVF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHh0X211bHRpcG9ydF9mbGFncwogewogCVhUX01VTFRJUE9SVF9TT1VSQ0UsCkBAIC0xMywxOCArMTUsMTggQEAKIC8qIE11c3QgZml0IGluc2lkZSB1bmlvbiB4dF9tYXRjaGluZm86IDE2IGJ5dGVzICovCiBzdHJ1Y3QgeHRfbXVsdGlwb3J0CiB7Ci0JdV9pbnQ4X3QgZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLwotCXVfaW50OF90IGNvdW50OwkJCQkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KLQl1X2ludDE2X3QgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworCV9fdTggZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLworCV9fdTggY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLworCV9fdTE2IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KIH07CiAKIHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEKIHsKLQl1X2ludDhfdCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCi0JdV9pbnQ4X3QgY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLwotCXVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi0JdV9pbnQ4X3QgcGZsYWdzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydCBmbGFncyAqLwotCXVfaW50OF90IGludmVydDsJCQkvKiBJbnZlcnQgZmxhZyAqLworCV9fdTggZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLworCV9fdTggY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLworCV9fdTE2IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KKwlfX3U4IHBmbGFnc1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnQgZmxhZ3MgKi8KKwlfX3U4IGludmVydDsJCQkvKiBJbnZlcnQgZmxhZyAqLwogfTsKIAogI2VuZGlmIC8qX1hUX01VTFRJUE9SVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oCmluZGV4IGM4NGU1MmMuLjIwODE3NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX09XTkVSX01BVENIX0gKICNkZWZpbmUgX1hUX09XTkVSX01BVENIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCVhUX09XTkVSX1VJRCAgICA9IDEgPDwgMCwKIAlYVF9PV05FUl9HSUQgICAgPSAxIDw8IDEsCkBAIC04LDkgKzEwLDkgQEAKIH07CiAKIHN0cnVjdCB4dF9vd25lcl9tYXRjaF9pbmZvIHsKLQl1X2ludDMyX3QgdWlkX21pbiwgdWlkX21heDsKLQl1X2ludDMyX3QgZ2lkX21pbiwgZ2lkX21heDsKLQl1X2ludDhfdCBtYXRjaCwgaW52ZXJ0OworCV9fdTMyIHVpZF9taW4sIHVpZF9tYXg7CisJX191MzIgZ2lkX21pbiwgZ2lkX21heDsKKwlfX3U4IG1hdGNoLCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLyogX1hUX09XTkVSX01BVENIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAppbmRleCAyNWE3YTE4Li44NTU1ZTM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfUEhZU0RFVl9ICiAjZGVmaW5lIF9YVF9QSFlTREVWX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNlbmRpZgpAQCAtMTcsOCArMTksOCBAQAogCWNoYXIgaW5fbWFza1tJRk5BTVNJWl07CiAJY2hhciBwaHlzb3V0ZGV2W0lGTkFNU0laXTsKIAljaGFyIG91dF9tYXNrW0lGTkFNU0laXTsKLQl1X2ludDhfdCBpbnZlcnQ7Ci0JdV9pbnQ4X3QgYml0bWFzazsKKwlfX3U4IGludmVydDsKKwlfX3U4IGJpdG1hc2s7CiB9OwogCiAjZW5kaWYgLypfWFRfUEhZU0RFVl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgKaW5kZXggMDUzZDhjYy4uN2JiNjRlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9QT0xJQ1lfSAogI2RlZmluZSBfWFRfUE9MSUNZX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfUE9MSUNZX01BWF9FTEVNCTQKIAogZW51bSB4dF9wb2xpY3lfZmxhZ3MKQEAgLTE5LDcgKzIxLDcgQEAKIAogc3RydWN0IHh0X3BvbGljeV9zcGVjCiB7Ci0JdV9pbnQ4X3QJc2FkZHI6MSwKKwlfX3U4CXNhZGRyOjEsCiAJCQlkYWRkcjoxLAogCQkJcHJvdG86MSwKIAkJCW1vZGU6MSwKQEAgLTU1LDkgKzU3LDkgQEAKICNlbmRpZgogCX07CiAJX19iZTMyCQkJc3BpOwotCXVfaW50MzJfdAkJcmVxaWQ7Ci0JdV9pbnQ4X3QJCXByb3RvOwotCXVfaW50OF90CQltb2RlOworCV9fdTMyCQlyZXFpZDsKKwlfX3U4CQlwcm90bzsKKwlfX3U4CQltb2RlOwogCiAJc3RydWN0IHh0X3BvbGljeV9zcGVjCW1hdGNoOwogCXN0cnVjdCB4dF9wb2xpY3lfc3BlYwlpbnZlcnQ7CkBAIC02Niw4ICs2OCw4IEBACiBzdHJ1Y3QgeHRfcG9saWN5X2luZm8KIHsKIAlzdHJ1Y3QgeHRfcG9saWN5X2VsZW0gcG9sW1hUX1BPTElDWV9NQVhfRUxFTV07Ci0JdV9pbnQxNl90IGZsYWdzOwotCXVfaW50MTZfdCBsZW47CisJX191MTYgZmxhZ3M7CisJX191MTYgbGVuOwogfTsKIAogI2VuZGlmIC8qIF9YVF9QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCmluZGV4IDIwMTBjYjcuLmQ0MGE2MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yYXRlZXN0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9SQVRFRVNUX01BVENIX0gKICNkZWZpbmUgX1hUX1JBVEVFU1RfTUFUQ0hfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB4dF9yYXRlZXN0X21hdGNoX2ZsYWdzIHsKIAlYVF9SQVRFRVNUX01BVENIX0lOVkVSVAk9IDE8PDAsCiAJWFRfUkFURUVTVF9NQVRDSF9BQlMJPSAxPDwxLApAQCAtMjAsMTIgKzIyLDEyIEBACiBzdHJ1Y3QgeHRfcmF0ZWVzdF9tYXRjaF9pbmZvIHsKIAljaGFyCQkJbmFtZTFbSUZOQU1TSVpdOwogCWNoYXIJCQluYW1lMltJRk5BTVNJWl07Ci0JdV9pbnQxNl90CQlmbGFnczsKLQl1X2ludDE2X3QJCW1vZGU7Ci0JdV9pbnQzMl90CQlicHMxOwotCXVfaW50MzJfdAkJcHBzMTsKLQl1X2ludDMyX3QJCWJwczI7Ci0JdV9pbnQzMl90CQlwcHMyOworCV9fdTE2CQlmbGFnczsKKwlfX3UxNgkJbW9kZTsKKwlfX3UzMgkJYnBzMTsKKwlfX3UzMgkJcHBzMTsKKwlfX3UzMgkJYnBzMjsKKwlfX3UzMgkJcHBzMjsKIAogCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCiAJc3RydWN0IHh0X3JhdGVlc3QJKmVzdDEgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKaW5kZXggMjIwZTg3Mi4uZDRhODJlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCkBAIC0xLDEwICsxLDEyIEBACiAjaWZuZGVmIF9YVF9SRUFMTV9ICiAjZGVmaW5lIF9YVF9SRUFMTV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfcmVhbG1faW5mbyB7Ci0JdV9pbnQzMl90IGlkOwotCXVfaW50MzJfdCBtYXNrOwotCXVfaW50OF90IGludmVydDsKKwlfX3UzMiBpZDsKKwlfX3UzMiBtYXNrOworCV9fdTggaW52ZXJ0OwogfTsKIAogI2VuZGlmIC8qIF9YVF9SRUFMTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oCmluZGV4IDVjZmViODEuLmQyYzI3NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTElOVVhfTkVURklMVEVSX1hUX1JFQ0VOVF9ICiAjZGVmaW5lIF9MSU5VWF9ORVRGSUxURVJfWFRfUkVDRU5UX0ggMQogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJWFRfUkVDRU5UX0NIRUNLICAgID0gMSA8PCAwLAogCVhUX1JFQ0VOVF9TRVQgICAgICA9IDEgPDwgMSwKQEAgLTE1LDEyICsxNywxMiBAQAogfTsKIAogc3RydWN0IHh0X3JlY2VudF9tdGluZm8gewotCXVfaW50MzJfdCBzZWNvbmRzOwotCXVfaW50MzJfdCBoaXRfY291bnQ7Ci0JdV9pbnQ4X3QgY2hlY2tfc2V0OwotCXVfaW50OF90IGludmVydDsKKwlfX3UzMiBzZWNvbmRzOworCV9fdTMyIGhpdF9jb3VudDsKKwlfX3U4IGNoZWNrX3NldDsKKwlfX3U4IGludmVydDsKIAljaGFyIG5hbWVbWFRfUkVDRU5UX05BTUVfTEVOXTsKLQl1X2ludDhfdCBzaWRlOworCV9fdTggc2lkZTsKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfTkVURklMVEVSX1hUX1JFQ0VOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKaW5kZXggMzIwMDBiYS4uMjkyODdiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1NDVFBfSF8KICNkZWZpbmUgX1hUX1NDVFBfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfU0NUUF9TUkNfUE9SVFMJICAgICAgICAweDAxCiAjZGVmaW5lIFhUX1NDVFBfREVTVF9QT1JUUwkgICAgICAgIDB4MDIKICNkZWZpbmUgWFRfU0NUUF9DSFVOS19UWVBFUwkJMHgwNApAQCAtOCw0OSArMTAsNDkgQEAKICNkZWZpbmUgWFRfU0NUUF9WQUxJRF9GTEFHUwkJMHgwNwogCiBzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gewotCXVfaW50OF90IGNodW5rdHlwZTsKLQl1X2ludDhfdCBmbGFnOwotCXVfaW50OF90IGZsYWdfbWFzazsKKwlfX3U4IGNodW5rdHlwZTsKKwlfX3U4IGZsYWc7CisJX191OCBmbGFnX21hc2s7CiB9OwogCiAjZGVmaW5lIFhUX05VTV9TQ1RQX0ZMQUdTCTQKIAogc3RydWN0IHh0X3NjdHBfaW5mbyB7Ci0JdV9pbnQxNl90IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLwotCXVfaW50MTZfdCBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KIAotCXVfaW50MzJfdCBjaHVua21hcFsyNTYgLyBzaXplb2YgKHVfaW50MzJfdCldOyAgLyogQml0IG1hc2sgb2YgY2h1bmtzIHRvIGJlIG1hdGNoZWQgYWNjb3JkaW5nIHRvIFJGQyAyOTYwICovCisJX191MzIgY2h1bmttYXBbMjU2IC8gc2l6ZW9mIChfX3UzMildOyAgLyogQml0IG1hc2sgb2YgY2h1bmtzIHRvIGJlIG1hdGNoZWQgYWNjb3JkaW5nIHRvIFJGQyAyOTYwICovCiAKICNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTlkgICAweDAxICAvKiBNYXRjaCBpZiBhbnkgb2YgdGhlIGNodW5rIHR5cGVzIGFyZSBwcmVzZW50ICovCiAjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQUxMICAgMHgwMiAgLyogTWF0Y2ggaWYgYWxsIG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLwogI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX09OTFkgIDB4MDQgIC8qIE1hdGNoIGlmIHRoZXNlIGFyZSB0aGUgb25seSBjaHVuayB0eXBlcyBwcmVzZW50ICovCiAKLQl1X2ludDMyX3QgY2h1bmtfbWF0Y2hfdHlwZTsKKwlfX3UzMiBjaHVua19tYXRjaF90eXBlOwogCXN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyBmbGFnX2luZm9bWFRfTlVNX1NDVFBfRkxBR1NdOwogCWludCBmbGFnX2NvdW50OwogCi0JdV9pbnQzMl90IGZsYWdzOwotCXVfaW50MzJfdCBpbnZmbGFnczsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBpbnZmbGFnczsKIH07CiAKICNkZWZpbmUgYnl0ZXModHlwZSkgKHNpemVvZih0eXBlKSAqIDgpCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVQoY2h1bmttYXAsIHR5cGUpIAkJXAogCWRvIHsgCQkJCQkJXAotCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSB8PSAJXAotCQkJMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpOwlcCisJCShjaHVua21hcClbdHlwZSAvIGJ5dGVzKF9fdTMyKV0gfD0gCVwKKwkJCTEgPDwgKHR5cGUgJSBieXRlcyhfX3UzMikpOwlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NMRUFSKGNodW5rbWFwLCB0eXBlKQkJIAlcCiAJZG8gewkJCQkJCQlcCi0JCShjaHVua21hcClbdHlwZSAvIGJ5dGVzKHVfaW50MzJfdCldICY9IAkJXAotCQkJfigxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSkpOwlcCisJCShjaHVua21hcClbdHlwZSAvIGJ5dGVzKF9fdTMyKV0gJj0gCQlcCisJCQl+KDEgPDwgKHR5cGUgJSBieXRlcyhfX3UzMikpKTsJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19TRVQoY2h1bmttYXAsIHR5cGUpIAkJCVwKICh7CQkJCQkJCQlcCi0JKChjaHVua21hcClbdHlwZSAvIGJ5dGVzICh1X2ludDMyX3QpXSAmIAkJXAotCQkoMSA8PCAodHlwZSAlIGJ5dGVzICh1X2ludDMyX3QpKSkpID8gMTogMDsJXAorCSgoY2h1bmttYXApW3R5cGUgLyBieXRlcyAoX191MzIpXSAmIAkJXAorCQkoMSA8PCAodHlwZSAlIGJ5dGVzIChfX3UzMikpKSkgPyAxOiAwOwlcCiB9KQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfUkVTRVQoY2h1bmttYXApIFwKQEAgLTY1LDcgKzY3LDcgQEAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19DTEVBUihjaHVua21hcCkgXAogCV9fc2N0cF9jaHVua21hcF9pc19jbGVhcigoY2h1bmttYXApLCBBUlJBWV9TSVpFKGNodW5rbWFwKSkKIHN0YXRpYyBpbmxpbmUgYm9vbAotX19zY3RwX2NodW5rbWFwX2lzX2NsZWFyKGNvbnN0IHVfaW50MzJfdCAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQorX19zY3RwX2NodW5rbWFwX2lzX2NsZWFyKGNvbnN0IF9fdTMyICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IG47ICsraSkKQEAgLTc3LDcgKzc5LDcgQEAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19BTExfU0VUKGNodW5rbWFwKSBcCiAJX19zY3RwX2NodW5rbWFwX2lzX2FsbF9zZXQoKGNodW5rbWFwKSwgQVJSQVlfU0laRShjaHVua21hcCkpCiBzdGF0aWMgaW5saW5lIGJvb2wKLV9fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KGNvbnN0IHVfaW50MzJfdCAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQorX19zY3RwX2NodW5rbWFwX2lzX2FsbF9zZXQoY29uc3QgX191MzIgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaAppbmRleCA4ZjUyMWFiLi40ZTk4M2VmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1NUQVRJU1RJQ19ICiAjZGVmaW5lIF9YVF9TVEFUSVNUSUNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB4dF9zdGF0aXN0aWNfbW9kZSB7CiAJWFRfU1RBVElTVElDX01PREVfUkFORE9NLAogCVhUX1NUQVRJU1RJQ19NT0RFX05USCwKQEAgLTE2LDE2ICsxOCwxNiBAQAogc3RydWN0IHh0X3N0YXRpc3RpY19wcml2OwogCiBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gewotCXVfaW50MTZfdAkJCW1vZGU7Ci0JdV9pbnQxNl90CQkJZmxhZ3M7CisJX191MTYJCQltb2RlOworCV9fdTE2CQkJZmxhZ3M7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CXByb2JhYmlsaXR5OworCQkJX191MzIJcHJvYmFiaWxpdHk7CiAJCX0gcmFuZG9tOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CWV2ZXJ5OwotCQkJdV9pbnQzMl90CXBhY2tldDsKLQkJCXVfaW50MzJfdAljb3VudDsgLyogdW51c2VkICovCisJCQlfX3UzMglldmVyeTsKKwkJCV9fdTMyCXBhY2tldDsKKwkJCV9fdTMyCWNvdW50OyAvKiB1bnVzZWQgKi8KIAkJfSBudGg7CiAJfSB1OwogCXN0cnVjdCB4dF9zdGF0aXN0aWNfcHJpdiAqbWFzdGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKaW5kZXggOGE2YmE3Yi4uZWNiYjk1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TVFJJTkdfSAogI2RlZmluZSBfWFRfU1RSSU5HX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfU1RSSU5HX01BWF9QQVRURVJOX1NJWkUgMTI4CiAjZGVmaW5lIFhUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkUgMTYKIApAQCAtMTEsMTggKzEzLDE4IEBACiAKIHN0cnVjdCB4dF9zdHJpbmdfaW5mbwogewotCXVfaW50MTZfdCBmcm9tX29mZnNldDsKLQl1X2ludDE2X3QgdG9fb2Zmc2V0OworCV9fdTE2IGZyb21fb2Zmc2V0OworCV9fdTE2IHRvX29mZnNldDsKIAljaGFyCSAgYWxnb1tYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFXTsKIAljaGFyIAkgIHBhdHRlcm5bWFRfU1RSSU5HX01BWF9QQVRURVJOX1NJWkVdOwotCXVfaW50OF90ICBwYXRsZW47CisJX191OCAgcGF0bGVuOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVfaW50OF90ICBpbnZlcnQ7CisJCQlfX3U4ICBpbnZlcnQ7CiAJCX0gdjA7CiAKIAkJc3RydWN0IHsKLQkJCXVfaW50OF90ICBmbGFnczsKKwkJCV9fdTggIGZsYWdzOwogCQl9IHYxOwogCX0gdTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaAppbmRleCBlMDMyNzRjLi5mYmFjNTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9YVF9UQ1BNU1NfTUFUQ0hfSAogI2RlZmluZSBfWFRfVENQTVNTX01BVENIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF90Y3Btc3NfbWF0Y2hfaW5mbyB7Ci0gICAgdV9pbnQxNl90IG1zc19taW4sIG1zc19tYXg7Ci0gICAgdV9pbnQ4X3QgaW52ZXJ0OworICAgIF9fdTE2IG1zc19taW4sIG1zc19tYXg7CisgICAgX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfVENQTVNTX01BVENIX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaAppbmRleCA3OGJjNjVmLi5hNDkwYTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaApAQCAtMSwxNSArMSwxNyBAQAogI2lmbmRlZiBfWFRfVENQVURQX0gKICNkZWZpbmUgX1hUX1RDUFVEUF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBUQ1AgbWF0Y2hpbmcgc3R1ZmYgKi8KIHN0cnVjdCB4dF90Y3AKIHsKLQl1X2ludDE2X3Qgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KLQl1X2ludDE2X3QgZHB0c1syXTsJCQkvKiBEZXN0aW5hdGlvbiBwb3J0IHJhbmdlLiAqLwotCXVfaW50OF90IG9wdGlvbjsJCQkvKiBUQ1AgT3B0aW9uIGlmZiBub24temVybyovCi0JdV9pbnQ4X3QgZmxnX21hc2s7CQkJLyogVENQIGZsYWdzIG1hc2sgYnl0ZSAqLwotCXVfaW50OF90IGZsZ19jbXA7CQkJLyogVENQIGZsYWdzIGNvbXBhcmUgYnl0ZSAqLwotCXVfaW50OF90IGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KKwlfX3UxNiBzcHRzWzJdOwkJCS8qIFNvdXJjZSBwb3J0IHJhbmdlLiAqLworCV9fdTE2IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KKwlfX3U4IG9wdGlvbjsJCQkvKiBUQ1AgT3B0aW9uIGlmZiBub24temVybyovCisJX191OCBmbGdfbWFzazsJCQkvKiBUQ1AgZmxhZ3MgbWFzayBieXRlICovCisJX191OCBmbGdfY21wOwkJCS8qIFRDUCBmbGFncyBjb21wYXJlIGJ5dGUgKi8KKwlfX3U4IGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KIH07CiAKIC8qIFZhbHVlcyBmb3IgImludiIgZmllbGQgaW4gc3RydWN0IGlwdF90Y3AuICovCkBAIC0yMiw5ICsyNCw5IEBACiAvKiBVRFAgbWF0Y2hpbmcgc3R1ZmYgKi8KIHN0cnVjdCB4dF91ZHAKIHsKLQl1X2ludDE2X3Qgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KLQl1X2ludDE2X3QgZHB0c1syXTsJCQkvKiBEZXN0aW5hdGlvbiBwb3J0IHJhbmdlLiAqLwotCXVfaW50OF90IGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KKwlfX3UxNiBzcHRzWzJdOwkJCS8qIFNvdXJjZSBwb3J0IHJhbmdlLiAqLworCV9fdTE2IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KKwlfX3U4IGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KIH07CiAKIC8qIFZhbHVlcyBmb3IgImludmZsYWdzIiBmaWVsZCBpbiBzdHJ1Y3QgaXB0X3VkcC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCmluZGV4IDkyZjRiZGEuLmE3ODQ0NWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmgKQEAgLTksMTAgKzksMTAgQEAKICNkZWZpbmUgSVBUX09XTkVSX0NPTU0JMHgxMAogCiBzdHJ1Y3QgaXB0X293bmVyX2luZm8gewotICAgIHVpZF90IHVpZDsKLSAgICBnaWRfdCBnaWQ7Ci0gICAgcGlkX3QgcGlkOwotICAgIHBpZF90IHNpZDsKKyAgICBfX2tlcm5lbF91aWQzMl90IHVpZDsKKyAgICBfX2tlcm5lbF9naWQzMl90IGdpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBwaWQ7CisgICAgX19rZXJuZWxfcGlkX3Qgc2lkOwogICAgIGNoYXIgY29tbVsxNl07CiAgICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmluZGV4IDE5OTM3ZGEuLmVjNWNjN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCkBAIC04LDEwICs4LDEwIEBACiAjZGVmaW5lIElQNlRfT1dORVJfU0lECTB4MDgKIAogc3RydWN0IGlwNnRfb3duZXJfaW5mbyB7Ci0gICAgdWlkX3QgdWlkOwotICAgIGdpZF90IGdpZDsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgcGlkX3Qgc2lkOworICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOworICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOworICAgIF9fa2VybmVsX3BpZF90IHBpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBzaWQ7CiAgICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggNTFiMDlhMS4uNWJhMzk4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTEwMyw2ICsxMDMsOCBAQAogI2RlZmluZSBORVRMSU5LX0FERF9NRU1CRVJTSElQCTEKICNkZWZpbmUgTkVUTElOS19EUk9QX01FTUJFUlNISVAJMgogI2RlZmluZSBORVRMSU5LX1BLVElORk8JCTMKKyNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfRVJST1IJNAorI2RlZmluZSBORVRMSU5LX05PX0VOT0JVRlMJNQogCiBzdHJ1Y3QgbmxfcGt0aW5mbwogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCBlMzhkM2M5Li5kZTk5MDI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtNjMsNiArNjMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKKworCXJldHVybiBucGluZm8gJiYgKG5waW5mby0+cnhfbnAgfHwgbnBpbmZvLT5yeF9mbGFncyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoIWxpc3RfZW1wdHkoJnNrYi0+ZGV2LT5uYXBpX2xpc3QpKQpAQCAtOTksNiArMTA2LDEwIEBACiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCmluZGV4IGE1NTBiNTIuLjJlNWYwMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCkBAIC00MDYsNiArNDA2LDggQEAKIAlpbnQJCQltYXNrOwogCXN0cnVjdCBwb3NpeF9hY2wgKglhY2xfYWNjZXNzOwogCXN0cnVjdCBwb3NpeF9hY2wgKglhY2xfZGVmYXVsdDsKKwlzaXplX3QJCQlsZW47CisJdW5zaWduZWQgaW50CQlucGFnZXM7CiAJc3RydWN0IHBhZ2UgKioJCXBhZ2VzOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaCBiL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKaW5kZXggNTQ0ODdhOS4uNDMwMTFiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCkBAIC0zNyw2ICszNyw5IEBACiAjZGVmaW5lIE5GU0FDTF9NQVhQQUdFUwkJKCgyKig4KzEyKk5GU19BQ0xfTUFYX0VOVFJJRVMpICsgUEFHRV9TSVpFLTEpIFwKIAkJCQkgPj4gUEFHRV9TSElGVCkKIAorI2RlZmluZSBORlNfQUNMX01BWF9FTlRSSUVTX0lOTElORQkoNSkKKyNkZWZpbmUgTkZTX0FDTF9JTkxJTkVfQlVGU0laRQkoKDIqKDIrMypORlNfQUNMX01BWF9FTlRSSUVTX0lOTElORSkpIDw8IDIpCisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBuZnNhY2xfc2l6ZShzdHJ1Y3QgcG9zaXhfYWNsICphY2xfYWNjZXNzLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2xfZGVmYXVsdCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggODgwMmQxYi4uZjMzYWEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTE1MCw2ICsxNTAsMTcgQEAKICAqIEBOTDgwMjExX0NNRF9TQ0FOX0FCT1JURUQ6IHNjYW4gd2FzIGFib3J0ZWQsIGZvciB1bnNwZWNpZmllZCByZWFzb25zLAogICoJcGFydGlhbCBzY2FuIHJlc3VsdHMgbWF5IGJlIGF2YWlsYWJsZQogICoKKyAqIEBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFOiBpbmRpY2F0ZXMgdG8gdXNlcnNwYWNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbgorICogCWhhcyBiZWVuIGNoYW5nZWQgYW5kIHByb3ZpZGVzIGRldGFpbHMgb2YgdGhlIHJlcXVlc3QgaW5mb3JtYXRpb24KKyAqIAl0aGF0IGNhdXNlZCB0aGUgY2hhbmdlIHN1Y2ggYXMgd2hvIGluaXRpYXRlZCB0aGUgcmVndWxhdG9yeSByZXF1ZXN0CisgKiAJKCVOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiksIHRoZSB3aXBoeV9pZHgKKyAqIAkoJU5MODAyMTFfQVRUUl9SRUdfQUxQSEEyKSBvbiB3aGljaCB0aGUgcmVxdWVzdCB3YXMgbWFkZSBmcm9tIGlmCisgKiAJdGhlIGluaXRpYXRvciB3YXMgJU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFIG9yCisgKiAJJU5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJc2V0ICglTkw4MDIxMV9BVFRSX1JFR19UWVBFKSwgaWYgdGhlIHR5cGUgb2YgcmVndWxhdG9yeSBkb21haW4gaXMKKyAqIAklTkw4MDIxMV9SRUdfVFlQRV9DT1VOVFJZIHRoZSBhbHBoYTIgdG8gd2hpY2ggd2UgaGF2ZSBtb3ZlZCBvbgorICogCXRvICglTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIpLgorICoKICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTIwNCw2ICsyMTUsOCBAQAogCU5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMsCiAJTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVELAogCisJTkw4MDIxMV9DTURfUkVHX0NIQU5HRSwKKwogCS8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqLwogCiAJLyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovCkBAIC0yMTgsNiArMjMxLDggQEAKICNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX0JTUyBOTDgwMjExX0NNRF9TRVRfQlNTCiAjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFCiAKKyNkZWZpbmUgTkw4MDIxMV9DTURfUkVHX0NIQU5HRSBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFCisKIC8qKgogICogZW51bSBubDgwMjExX2F0dHJzIC0gbmw4MDIxMSBuZXRsaW5rIGF0dHJpYnV0ZXMKICAqCkBAIC0zMjksNiArMzQ0LDExIEBACiAgKgltZXNzYWdlcyBjYXJyaWVkIHRoZSBzYW1lIGdlbmVyYXRpb24gbnVtYmVyKQogICogQE5MODAyMTFfQVRUUl9CU1M6IHNjYW4gcmVzdWx0IEJTUwogICoKKyAqIEBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUjogaW5kaWNhdGVzIHdobyByZXF1ZXN0ZWQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJY3VycmVudGx5IGluIGVmZmVjdC4gVGhpcyBjb3VsZCBiZSBhbnkgb2YgdGhlICVOTDgwMjExX1JFR0RPTV9TRVRfQllfKgorICogQE5MODAyMTFfQVRUUl9SRUdfVFlQRTogaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBjdXJyZW50bHkKKyAqIAlzZXQuIFRoaXMgY2FuIGJlIG9uZSBvZiB0aGUgbmw4MDIxMV9yZWdfdHlwZSAoJU5MODAyMTFfUkVHRE9NX1RZUEVfKikKKyAqCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTQwMyw2ICs0MjMsOSBAQAogCU5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04sCiAJTkw4MDIxMV9BVFRSX0JTUywKIAorCU5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLAorCU5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKQEAgLTQyMCw2ICs0NDMsOCBAQAogI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUKICNkZWZpbmUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRSBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9JRSBOTDgwMjExX0FUVFJfSUUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19UWVBFIE5MODAyMTFfQVRUUl9SRUdfVFlQRQogCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkFURVMJCQkzMgogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUwkJMzIKQEAgLTUyNiw2ICs1NTEsOSBAQAogICogQE5MODAyMTFfU1RBX0lORk9fU0lHTkFMOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBQUERVICh1OCwgZEJtKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURTogY3VycmVudCB1bmljYXN0IHR4IHJhdGUsIG5lc3RlZCBhdHRyaWJ1dGUKICAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvX3R4cmF0ZS4KKyAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFM6IHRvdGFsIHJlY2VpdmVkIHBhY2tldCAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFM6IHRvdGFsIHRyYW5zbWl0dGVkIHBhY2tldHMgKHUzMiwgdG8gdGhpcworICoJc3RhdGlvbikKICAqLwogZW51bSBubDgwMjExX3N0YV9pbmZvIHsKIAlfX05MODAyMTFfU1RBX0lORk9fSU5WQUxJRCwKQEAgLTUzNyw2ICs1NjUsOCBAQAogCU5MODAyMTFfU1RBX0lORk9fUExJTktfU1RBVEUsCiAJTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwsCiAJTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFLAorCU5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKKwlOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKQEAgLTY2OCw2ICs2OTgsNDggQEAKIH07CiAKIC8qKgorICogZW51bSBubDgwMjExX2luaXRpYXRvciAtIEluZGljYXRlcyB0aGUgaW5pdGlhdG9yIG9mIGEgcmVnIGRvbWFpbiByZXF1ZXN0CisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6IENvcmUgcXVlcmllZCBDUkRBIGZvciBhIGR5bmFtaWMgd29ybGQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUjogVXNlciBhc2tlZCB0aGUgd2lyZWxlc3MgY29yZSB0byBzZXQgdGhlCisgKiAJcmVndWxhdG9yeSBkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjogYSB3aXJlbGVzcyBkcml2ZXJzIGhhcyBoaW50ZWQgdG8gdGhlCisgKiAJd2lyZWxlc3MgY29yZSBpdCB0aGlua3MgaXRzIGtub3dzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3ZSBzaG91bGQgYmUgaW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbgorICogCTgwMi4xMSBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQgd2l0aCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGl0CisgKiAJdGhpbmtzIHdlIHNob3VsZCBjb25zaWRlci4KKyAqLworZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgeworCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUsCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9yZWdfdHlwZSAtIHNwZWNpZmllcyB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfQ09VTlRSWTogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyBvbmUgdGhhdCBwZXJ0YWlucworICoJdG8gYSBzcGVjaWZpYyBjb3VudHJ5LiBXaGVuIHRoaXMgaXMgc2V0IHlvdSBjYW4gY291bnQgb24gdGhlCisgKglJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGJlaW5nIHZhbGlkLgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQ6IHRoZSByZWd1bGF0b3J5IHNldCBkb21haW4gaXMgdGhlIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQ6IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgYSBjdXN0b20KKyAqIAlkcml2ZXIgc3BlY2lmaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4uIFRoZXNlIGRvIG5vdCBhcHBseSBzeXN0ZW0td2lkZQorICogCWFuZCBhcmUgb25seSBhcHBsaWNhYmxlIHRvIHRoZSBpbmRpdmlkdWFsIGRldmljZXMgd2hpY2ggaGF2ZSByZXF1ZXN0ZWQKKyAqIAl0aGVtIHRvIGJlIGFwcGxpZWQuCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT046IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgdGhlIHByb2R1Y3QKKyAqCW9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbnMgLS0gdGhlIHByZXZpb3VzbHkKKyAqCXNldCByZWd1bGF0b3J5IGRvbWFpbiBvbiB0aGUgc3lzdGVtIGFuZCB0aGUgbGFzdCBhY2NlcHRlZCByZWd1bGF0b3J5CisgKglkb21haW4gcmVxdWVzdCB0byBiZSBwcm9jZXNzZWQuCisgKi8KK2VudW0gbmw4MDIxMV9yZWdfdHlwZSB7CisJTkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZLAorCU5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT04sCit9OworCisvKioKICAqIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9hdHRyIC0gcmVndWxhdG9yeSBydWxlIGF0dHJpYnV0ZXMKICAqIEBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1M6IGEgc2V0IG9mIGZsYWdzIHdoaWNoIHNwZWNpZnkgYWRkaXRpb25hbAogICogCWNvbnNpZGVyYXRpb25zIGZvciBhIGdpdmVuIGZyZXF1ZW5jeSByYW5nZS4gVGhlc2UgYXJlIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9udWJ1cy5oIGIvaW5jbHVkZS9saW51eC9udWJ1cy5oCmluZGV4IDczODJhZjMuLmUxMzdiM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnVidXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L251YnVzLmgKQEAgLTIzNyw2ICsyMzcsNyBAQAogCWludCBtYXNrOwogfTsKIAorI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBudWJ1c19ib2FyZCB7CiAJc3RydWN0IG51YnVzX2JvYXJkKiBuZXh0OwogCXN0cnVjdCBudWJ1c19kZXYqIGZpcnN0X2RldjsKQEAgLTM1MSw2ICszNTIsNyBAQAogdm9pZCBudWJ1c19nZXRfcnNyY19zdHIodm9pZCogZGVzdCwKIAkJCWNvbnN0IHN0cnVjdCBudWJ1c19kaXJlbnQgKmRpcmVudCwKIAkJCWludCBtYXhsZW4pOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogV2UnZCBsaWtlIHRvIGdldCByaWQgb2YgdGhpcyBldmVudHVhbGx5LiAgT25seSBkYXluYXBvcnQuYyB1c2VzIGl0IG5vdy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqbnVidXNfc2xvdF9hZGRyKGludCBzbG90KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA5NjZlMDIzLi4wOTdmNDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMTMxNCw2ICsxMzE0LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfVlQzMzUxCTB4MDM1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNjQJMHgwMzY0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMAkweDAzOTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfNjQxNQkJMHgwNDE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMAkweDA1MDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTYxCTB4MDU2MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMQkweDA1NzEKQEAgLTE0NDYsNiArMTQ0Nyw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0UJMHgwMDcxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0lPTTJfQQkweDAwNzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fQQkweDAwNzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX05FT184CTB4MDBCMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT18yREI5ICAgICAgICAgIDB4MDBDOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT18yREI5UFJJICAgICAgIDB4MDBDOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT18yUko0NSAgICAgICAgIDB4MDBDQQpAQCAtMjExNCw2ICsyMTE2LDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9TSU5BSV9PTEQgMHg1ZThjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfU0lOQUkJMHg2Mjc0CiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ERkkJCTB4MTViZAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUVVJQ0tORVQJCTB4MTVlMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVSUNLTkVUX1hKCTB4MDUwMAogCkBAIC0yMzI3LDYgKzIzMzEsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzc4CTB4MDQ4NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0k5NjAJMHgwOTYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSTk2MFJNCTB4MDk2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTdYX1NPTAkweDEwNjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3M0VfU09MCTB4MTA4NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTczTF9TT0wJMHgxMDhGCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfTUMJMHgxMTMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfQ0dDCTB4MTEzMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMDkyQUFfMAkweDEyMjEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKaW5kZXggMDFiMjYyOS4uMjI4YjBiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTEyLDE4NyArMTIsMTg3IEBACiAjZGVmaW5lIFBGS0VZVjJfUkVWSVNJT04JMTk5ODA2TAogCiBzdHJ1Y3Qgc2FkYl9tc2cgewotCXVpbnQ4X3QJCXNhZGJfbXNnX3ZlcnNpb247Ci0JdWludDhfdAkJc2FkYl9tc2dfdHlwZTsKLQl1aW50OF90CQlzYWRiX21zZ19lcnJubzsKLQl1aW50OF90CQlzYWRiX21zZ19zYXR5cGU7Ci0JdWludDE2X3QJc2FkYl9tc2dfbGVuOwotCXVpbnQxNl90CXNhZGJfbXNnX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfbXNnX3NlcTsKLQl1aW50MzJfdAlzYWRiX21zZ19waWQ7CisJX191OAkJc2FkYl9tc2dfdmVyc2lvbjsKKwlfX3U4CQlzYWRiX21zZ190eXBlOworCV9fdTgJCXNhZGJfbXNnX2Vycm5vOworCV9fdTgJCXNhZGJfbXNnX3NhdHlwZTsKKwlfX3UxNglzYWRiX21zZ19sZW47CisJX191MTYJc2FkYl9tc2dfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl9tc2dfc2VxOworCV9fdTMyCXNhZGJfbXNnX3BpZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9leHQgewotCXVpbnQxNl90CXNhZGJfZXh0X2xlbjsKLQl1aW50MTZfdAlzYWRiX2V4dF90eXBlOworCV9fdTE2CXNhZGJfZXh0X2xlbjsKKwlfX3UxNglzYWRiX2V4dF90eXBlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9leHQpID09IDQgKi8KIAogc3RydWN0IHNhZGJfc2EgewotCXVpbnQxNl90CXNhZGJfc2FfbGVuOwotCXVpbnQxNl90CXNhZGJfc2FfZXh0dHlwZTsKKwlfX3UxNglzYWRiX3NhX2xlbjsKKwlfX3UxNglzYWRiX3NhX2V4dHR5cGU7CiAJX19iZTMyCQlzYWRiX3NhX3NwaTsKLQl1aW50OF90CQlzYWRiX3NhX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3NhX3N0YXRlOwotCXVpbnQ4X3QJCXNhZGJfc2FfYXV0aDsKLQl1aW50OF90CQlzYWRiX3NhX2VuY3J5cHQ7Ci0JdWludDMyX3QJc2FkYl9zYV9mbGFnczsKKwlfX3U4CQlzYWRiX3NhX3JlcGxheTsKKwlfX3U4CQlzYWRiX3NhX3N0YXRlOworCV9fdTgJCXNhZGJfc2FfYXV0aDsKKwlfX3U4CQlzYWRiX3NhX2VuY3J5cHQ7CisJX191MzIJc2FkYl9zYV9mbGFnczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2EpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX2xpZmV0aW1lIHsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2xlbjsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9saWZldGltZV9hbGxvY2F0aW9uczsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfbGlmZXRpbWVfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX3VzZXRpbWU7CisJX191MTYJc2FkYl9saWZldGltZV9sZW47CisJX191MTYJc2FkYl9saWZldGltZV9leHR0eXBlOworCV9fdTMyCXNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7CisJX191NjQJc2FkYl9saWZldGltZV9ieXRlczsKKwlfX3U2NAlzYWRiX2xpZmV0aW1lX2FkZHRpbWU7CisJX191NjQJc2FkYl9saWZldGltZV91c2V0aW1lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9saWZldGltZSkgPT0gMzIgKi8KIAogc3RydWN0IHNhZGJfYWRkcmVzcyB7Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX2FkZHJlc3NfcHJvdG87Ci0JdWludDhfdAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX2FkZHJlc3NfcHJvdG87CisJX191OAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2FkZHJlc3MpID09IDggKi8KIAogc3RydWN0IHNhZGJfa2V5IHsKLQl1aW50MTZfdAlzYWRiX2tleV9sZW47Ci0JdWludDE2X3QJc2FkYl9rZXlfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX2tleV9iaXRzOwotCXVpbnQxNl90CXNhZGJfa2V5X3Jlc2VydmVkOworCV9fdTE2CXNhZGJfa2V5X2xlbjsKKwlfX3UxNglzYWRiX2tleV9leHR0eXBlOworCV9fdTE2CXNhZGJfa2V5X2JpdHM7CisJX191MTYJc2FkYl9rZXlfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2tleSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl9pZGVudCB7Ci0JdWludDE2X3QJc2FkYl9pZGVudF9sZW47Ci0JdWludDE2X3QJc2FkYl9pZGVudF9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfaWRlbnRfdHlwZTsKLQl1aW50MTZfdAlzYWRiX2lkZW50X3Jlc2VydmVkOwotCXVpbnQ2NF90CXNhZGJfaWRlbnRfaWQ7CisJX191MTYJc2FkYl9pZGVudF9sZW47CisJX191MTYJc2FkYl9pZGVudF9leHR0eXBlOworCV9fdTE2CXNhZGJfaWRlbnRfdHlwZTsKKwlfX3UxNglzYWRiX2lkZW50X3Jlc2VydmVkOworCV9fdTY0CXNhZGJfaWRlbnRfaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2lkZW50KSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9zZW5zIHsKLQl1aW50MTZfdAlzYWRiX3NlbnNfbGVuOwotCXVpbnQxNl90CXNhZGJfc2Vuc19leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfc2Vuc19kcGQ7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGVuOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKLQl1aW50OF90CQlzYWRiX3NlbnNfaW50ZWdfbGVuOwotCXVpbnQzMl90CXNhZGJfc2Vuc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3NlbnNfbGVuOworCV9fdTE2CXNhZGJfc2Vuc19leHR0eXBlOworCV9fdTMyCXNhZGJfc2Vuc19kcGQ7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGVuOworCV9fdTgJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKKwlfX3U4CQlzYWRiX3NlbnNfaW50ZWdfbGVuOworCV9fdTMyCXNhZGJfc2Vuc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2VucykgPT0gMTYgKi8KIAogLyogZm9sbG93ZWQgYnk6Ci0JdWludDY0X3QJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07Ci0JdWludDY0X3QJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCisJX191NjQJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07CisJX191NjQJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCiAKIHN0cnVjdCBzYWRiX3Byb3AgewotCXVpbnQxNl90CXNhZGJfcHJvcF9sZW47Ci0JdWludDE2X3QJc2FkYl9wcm9wX2V4dHR5cGU7Ci0JdWludDhfdAkJc2FkYl9wcm9wX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3Byb3BfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl9wcm9wX2xlbjsKKwlfX3UxNglzYWRiX3Byb3BfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3Byb3BfcmVwbGF5OworCV9fdTgJCXNhZGJfcHJvcF9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9jb21iIHNhZGJfY29tYnNbKHNhZGJfcHJvcF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApKSAvCisJCXNpemVvZihfX3U2NCkgLSBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkpIC8KIAkJc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpXTsgKi8KIAogc3RydWN0IHNhZGJfY29tYiB7Ci0JdWludDhfdAkJc2FkYl9jb21iX2F1dGg7Ci0JdWludDhfdAkJc2FkYl9jb21iX2VuY3J5cHQ7Ci0JdWludDE2X3QJc2FkYl9jb21iX2ZsYWdzOwotCXVpbnQxNl90CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7Ci0JdWludDE2X3QJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKLQl1aW50MTZfdAlzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7Ci0JdWludDMyX3QJc2FkYl9jb21iX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOwotCXVpbnQzMl90CXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CisJX191OAkJc2FkYl9jb21iX2F1dGg7CisJX191OAkJc2FkYl9jb21iX2VuY3J5cHQ7CisJX191MTYJc2FkYl9jb21iX2ZsYWdzOworCV9fdTE2CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7CisJX191MTYJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKKwlfX3UxNglzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOworCV9fdTE2CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7CisJX191MzIJc2FkYl9jb21iX3Jlc2VydmVkOworCV9fdTMyCXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOworCV9fdTMyCXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7CisJX191NjQJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpID09IDcyICovCiAKIHN0cnVjdCBzYWRiX3N1cHBvcnRlZCB7Ci0JdWludDE2X3QJc2FkYl9zdXBwb3J0ZWRfbGVuOwotCXVpbnQxNl90CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9zdXBwb3J0ZWRfbGVuOworCV9fdTE2CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7CisJX191MzIJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9hbGcgc2FkYl9hbGdzWyhzYWRiX3N1cHBvcnRlZF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkpIC8KKwkJc2l6ZW9mKF9fdTY0KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCiAJCXNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpXTsgKi8KIAogc3RydWN0IHNhZGJfYWxnIHsKLQl1aW50OF90CQlzYWRiX2FsZ19pZDsKLQl1aW50OF90CQlzYWRiX2FsZ19pdmxlbjsKLQl1aW50MTZfdAlzYWRiX2FsZ19taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfYWxnX21heGJpdHM7Ci0JdWludDE2X3QJc2FkYl9hbGdfcmVzZXJ2ZWQ7CisJX191OAkJc2FkYl9hbGdfaWQ7CisJX191OAkJc2FkYl9hbGdfaXZsZW47CisJX191MTYJc2FkYl9hbGdfbWluYml0czsKKwlfX3UxNglzYWRiX2FsZ19tYXhiaXRzOworCV9fdTE2CXNhZGJfYWxnX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpID09IDggKi8KIAogc3RydWN0IHNhZGJfc3BpcmFuZ2UgewotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfbGVuOwotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21pbjsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21heDsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfbGVuOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21pbjsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21heDsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zcGlyYW5nZSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9rbXByaXZhdGUgewotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfbGVuOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl94X3NhMiB7Ci0JdWludDE2X3QJc2FkYl94X3NhMl9sZW47Ci0JdWludDE2X3QJc2FkYl94X3NhMl9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9zYTJfbW9kZTsKLQl1aW50OF90CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKLQl1aW50MTZfdAlzYWRiX3hfc2EyX3Jlc2VydmVkMjsKLQl1aW50MzJfdAlzYWRiX3hfc2EyX3NlcXVlbmNlOwotCXVpbnQzMl90CXNhZGJfeF9zYTJfcmVxaWQ7CisJX191MTYJc2FkYl94X3NhMl9sZW47CisJX191MTYJc2FkYl94X3NhMl9leHR0eXBlOworCV9fdTgJCXNhZGJfeF9zYTJfbW9kZTsKKwlfX3U4CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKKwlfX3UxNglzYWRiX3hfc2EyX3Jlc2VydmVkMjsKKwlfX3UzMglzYWRiX3hfc2EyX3NlcXVlbmNlOworCV9fdTMyCXNhZGJfeF9zYTJfcmVxaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfc2EyKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl94X3BvbGljeSB7Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9sZW47Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfdHlwZTsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X2RpcjsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfeF9wb2xpY3lfaWQ7Ci0JdWludDMyX3QJc2FkYl94X3BvbGljeV9wcmlvcml0eTsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2xlbjsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2V4dHR5cGU7CisJX191MTYJc2FkYl94X3BvbGljeV90eXBlOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfZGlyOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl94X3BvbGljeV9pZDsKKwlfX3UzMglzYWRiX3hfcG9saWN5X3ByaW9yaXR5OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3BvbGljeSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgewotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcHJvdG87Ci0JdWludDhfdAkJc2FkYl94X2lwc2VjcmVxdWVzdF9tb2RlOwotCXVpbnQ4X3QJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbGV2ZWw7Ci0JdWludDE2X3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDE7Ci0JdWludDMyX3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZDsKLQl1aW50MzJfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X3Byb3RvOworCV9fdTgJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKKwlfX3U4CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOworCV9fdTE2CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOworCV9fdTMyCXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7CisJX191MzIJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0KSA9PSAxNiAqLwogCkBAIC0yMDAsMzggKzIwMCwzOCBAQAogICogdHlwZSBvZiBOQVQtVCBpcyBzdXBwb3J0ZWQsIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNgogICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3R5cGUgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF90eXBlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9uYXRfdF90eXBlX3R5cGU7Ci0JdWludDhfdAkJc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl94X25hdF90X3R5cGVfbGVuOworCV9fdTE2CXNhZGJfeF9uYXRfdF90eXBlX2V4dHR5cGU7CisJX191OAkJc2FkYl94X25hdF90X3R5cGVfdHlwZTsKKwlfX3U4CQlzYWRiX3hfbmF0X3RfdHlwZV9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF90eXBlKSA9PSA4ICovCiAKIC8qIFBhc3MgYSBOQVQgVHJhdmVyc2FsIHBvcnQgKFNvdXJjZSBvciBEZXN0IHBvcnQpICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3BvcnQgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOworCV9fdTE2CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOwogCV9fYmUxNgkJc2FkYl94X25hdF90X3BvcnRfcG9ydDsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0KSA9PSA4ICovCiAKIC8qIEdlbmVyaWMgTFNNIHNlY3VyaXR5IGNvbnRleHQgKi8KIHN0cnVjdCBzYWRiX3hfc2VjX2N0eCB7Ci0JdWludDE2X3QJc2FkYl94X3NlY19sZW47Ci0JdWludDE2X3QJc2FkYl94X3NlY19leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCi0JdWludDhfdAkJc2FkYl94X2N0eF9kb2k7Ci0JdWludDE2X3QJc2FkYl94X2N0eF9sZW47CisJX191MTYJc2FkYl94X3NlY19sZW47CisJX191MTYJc2FkYl94X3NlY19leHR0eXBlOworCV9fdTgJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCisJX191OAkJc2FkYl94X2N0eF9kb2k7CisJX191MTYJc2FkYl94X2N0eF9sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NlY19jdHgpID0gOCAqLwogCiAvKiBVc2VkIGJ5IE1JR1JBVEUgdG8gcGFzcyBhZGRyZXNzZXMgSUtFIHdpbGwgdXNlIHRvIHBlcmZvcm0KICAqIG5lZ290aWF0aW9uIHdpdGggdGhlIHBlZXIgKi8KIHN0cnVjdCBzYWRiX3hfa21hZGRyZXNzIHsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7CisJX191MzIJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbWFkZHJlc3MpID09IDggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggZDdlNTRkOS4uMzJjZjE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zMTUsOCArMzE1LDcgQEAKIAogCS8qIEludGVycnVwdCBhbmQgUG9sbGluZyBpbmZyYXN0cnVjdHVyZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwaHlfcXVldWU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHN0YXRlX3F1ZXVlOwotCXN0cnVjdCB0aW1lcl9saXN0IHBoeV90aW1lcjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRlX3F1ZXVlOwogCWF0b21pY190IGlycV9kaXNhYmxlOwogCiAJc3RydWN0IG11dGV4IGxvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCA5YTM0MjY5Li43NmU0NzBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX1BMQVRGT1JNX0RFVklDRV9IXwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgewogCWNvbnN0IGNoYXIJKiBuYW1lOwpAQCAtMTksOCArMjAsMTMgQEAKIAlzdHJ1Y3QgZGV2aWNlCWRldjsKIAl1MzIJCW51bV9yZXNvdXJjZXM7CiAJc3RydWN0IHJlc291cmNlCSogcmVzb3VyY2U7CisJdm9pZAkJKnBsYXRmb3JtX2RhdGE7CisKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkCSppZF9lbnRyeTsKIH07CiAKKyNkZWZpbmUgcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KQkoKHBkZXYpLT5pZF9lbnRyeSkKKwogI2RlZmluZSB0b19wbGF0Zm9ybV9kZXZpY2UoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KQogCiBleHRlcm4gaW50IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwpAQCAtNTYsNiArNjIsNyBAQAogCWludCAoKnJlc3VtZV9lYXJseSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkX3RhYmxlOwogfTsKIAogZXh0ZXJuIGludCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxpc3QuaCBiL2luY2x1ZGUvbGludXgvcGxpc3QuaAppbmRleCA4NWRlMmYwLi40NTkyNmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCkBAIC05Niw2ICs5NiwxMCBAQAogIyBkZWZpbmUgUExJU1RfSEVBRF9MT0NLX0lOSVQoX2xvY2spCiAjZW5kaWYKIAorI2RlZmluZSBfUExJU1RfSEVBRF9JTklUKGhlYWQpCQkJCVwKKwkucHJpb19saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLnByaW9fbGlzdCksCVwKKwkubm9kZV9saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLm5vZGVfbGlzdCkKKwogLyoqCiAgKiBQTElTVF9IRUFEX0lOSVQgLSBzdGF0aWMgc3RydWN0IHBsaXN0X2hlYWQgaW5pdGlhbGl6ZXIKICAqIEBoZWFkOglzdHJ1Y3QgcGxpc3RfaGVhZCB2YXJpYWJsZSBuYW1lCkBAIC0xMDMsOCArMTA3LDcgQEAKICAqLwogI2RlZmluZSBQTElTVF9IRUFEX0lOSVQoaGVhZCwgX2xvY2spCQkJXAogewkJCQkJCQlcCi0JLnByaW9fbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5wcmlvX2xpc3QpLAlcCi0JLm5vZGVfbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5ub2RlX2xpc3QpLAlcCisgICAgICAgIF9QTElTVF9IRUFEX0lOSVQoaGVhZCksICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlQTElTVF9IRUFEX0xPQ0tfSU5JVCgmKF9sb2NrKSkJCQlcCiB9CiAKQEAgLTExNiw3ICsxMTksNyBAQAogI2RlZmluZSBQTElTVF9OT0RFX0lOSVQobm9kZSwgX19wcmlvKQkJCVwKIHsJCQkJCQkJXAogCS5wcmlvICA9IChfX3ByaW8pLAkJCQlcCi0JLnBsaXN0ID0gUExJU1RfSEVBRF9JTklUKChub2RlKS5wbGlzdCwgTlVMTCksCVwKKwkucGxpc3QgPSB7IF9QTElTVF9IRUFEX0lOSVQoKG5vZGUpLnBsaXN0KSB9LCAJXAogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCBkZTJlMGE4Li4xZDRlMmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC0zODEsMTAgKzM4MSwxMiBAQAogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgc3lzZGV2X3Jlc3VtZSh2b2lkKTsKIGV4dGVybiB2b2lkIGRldmljZV9wb3dlcl91cChwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3Jlc3VtZShwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fdW5sb2NrKHZvaWQpOworZXh0ZXJuIGludCBzeXNkZXZfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBkZXZpY2VfcG93ZXJfZG93bihwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBkZXZpY2Vfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBkZXZpY2VfcHJlcGFyZV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CkBAIC0zOTgsNiArNDAwLDkgQEAKIAogI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCisjZGVmaW5lIGRldmljZV9wbV9sb2NrKCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGRldmljZV9wbV91bmxvY2soKSBkbyB7fSB3aGlsZSAoMCkKKwogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXJldHVybiAwOwpAQCAtNDA3LDYgKzQxMiwxNCBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCisvKiBIb3cgdG8gcmVvcmRlciBkcG1fbGlzdCBhZnRlciBkZXZpY2VfbW92ZSgpICovCitlbnVtIGRwbV9vcmRlciB7CisJRFBNX09SREVSX05PTkUsCisJRFBNX09SREVSX0RFVl9BRlRFUl9QQVJFTlQsCisJRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWLAorCURQTV9PUkRFUl9ERVZfTEFTVCwKK307CisKIC8qCiAgKiBHbG9iYWwgUG93ZXIgTWFuYWdlbWVudCBmbGFncwogICogVXNlZCB0byBrZWVwIEFQTSBhbmQgQUNQSSBmcm9tIGJvdGggYmVpbmcgYWN0aXZlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKaW5kZXggOWQ2NGJkZi4uMGQzZmE2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaApAQCAtNDAsOCArNDAsOCBAQAogCWludAkJbXR1OwkJLyogbWF4IHRyYW5zbWl0IHBhY2tldCBzaXplICovCiAJaW50CQloZHJsZW47CQkvKiBhbW91bnQgb2YgaGVhZHJvb20gY2hhbm5lbCBuZWVkcyAqLwogCXZvaWQJCSpwcHA7CQkvKiBvcGFxdWUgdG8gY2hhbm5lbCAqLwotCS8qIHRoZSBmb2xsb3dpbmcgYXJlIG5vdCB1c2VkIGF0IHByZXNlbnQgKi8KIAlpbnQJCXNwZWVkOwkJLyogdHJhbnNmZXIgcmF0ZSAoYnl0ZXMvc2Vjb25kKSAqLworCS8qIHRoZSBmb2xsb3dpbmcgaXMgbm90IHVzZWQgYXQgcHJlc2VudCAqLwogCWludAkJbGF0ZW5jeTsJLyogb3ZlcmhlYWQgdGltZSBpbiBtaWxsaXNlY29uZHMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaAppbmRleCAxYzg2NmJkLi4wZjkzZWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCkBAIC0xNzcsOCArMTc3LDggQEAKICAqIHRoZSBsYXN0IE5QIHBhY2tldCB3YXMgc2VudCBvciByZWNlaXZlZC4KICAqLwogc3RydWN0IHBwcF9pZGxlIHsKLSAgICB0aW1lX3QgeG1pdF9pZGxlOwkJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCBzZW50ICovCi0gICAgdGltZV90IHJlY3ZfaWRsZTsJCS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgcmVjZWl2ZWQgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgeG1pdF9pZGxlOwkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHNlbnQgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgcmVjdl9pZGxlOwkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHJlY2VpdmVkICovCiB9OwogCiAjZW5kaWYgLyogX1BQUF9ERUZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdWNsYXNzaWMuaCBiL2luY2x1ZGUvbGludXgvcmN1Y2xhc3NpYy5oCmluZGV4IGYzZjY5N2QuLjgwMDQ0YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1Y2xhc3NpYy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1Y2xhc3NpYy5oCkBAIC0xODEsNCArMTgxLDEwIEBACiAjZGVmaW5lIHJjdV9lbnRlcl9ub2h6KCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSByY3VfZXhpdF9ub2h6KCkJCWRvIHsgfSB3aGlsZSAoMCkKIAorLyogQSBjb250ZXh0IHN3aXRjaCBpcyBhIGdyYWNlIHBlcmlvZCBmb3IgcmN1Y2xhc3NpYy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9ibG9ja2luZ19pc19ncCh2b2lkKQoreworCXJldHVybiBudW1fb25saW5lX2NwdXMoKSA9PSAxOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VDTEFTU0lDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA5MjEzNDBhLi41MjgzNDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC01Miw2ICs1Miw5IEBACiAJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7CiB9OwogCisvKiBJbnRlcm5hbCB0byBrZXJuZWwsIGJ1dCBuZWVkZWQgYnkgcmN1cHJlZW1wdC5oLiAqLworZXh0ZXJuIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0NMQVNTSUNfUkNVKQogI2luY2x1ZGUgPGxpbnV4L3JjdWNsYXNzaWMuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKQpAQCAtMjY1LDYgKzI2OCw3IEBACiAKIC8qIEludGVybmFsIHRvIGtlcm5lbCAqLwogZXh0ZXJuIHZvaWQgcmN1X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOwogCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VQREFURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXByZWVtcHQuaCBiL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCmluZGV4IDNlMDVjMDkuLjc0MzA0YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCkBAIC0xNDIsNCArMTQyLDE5IEBACiAjZGVmaW5lIHJjdV9leGl0X25vaHooKQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19OT19IWiAqLwogCisvKgorICogQSBjb250ZXh0IHN3aXRjaCBpcyBhIGdyYWNlIHBlcmlvZCBmb3IgcmN1cHJlZW1wdCBzeW5jaHJvbml6ZV9yY3UoKQorICogb25seSBkdXJpbmcgZWFybHkgYm9vdCwgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCisgKiBTbywgaG93IHRoZSBoZWNrIGRvIHdlIGdldCBhIGNvbnRleHQgc3dpdGNoPyAgV2VsbCwgaWYgdGhlIGNhbGxlcgorICogaW52b2tlcyBzeW5jaHJvbml6ZV9yY3UoKSwgdGhleSBhcmUgd2lsbGluZyB0byBhY2NlcHQgYSBjb250ZXh0CisgKiBzd2l0Y2gsIHNvIHdlIHNpbXBseSBwcmV0ZW5kIHRoYXQgb25lIGhhcHBlbmVkLgorICoKKyAqIEFmdGVyIGJvb3QsIHRoZXJlIG1pZ2h0IGJlIGEgYmxvY2tlZCBvciBwcmVlbXB0ZWQgdGFzayBpbiBhbiBSQ1UKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBzbyB3ZSBjYW5ub3QgdGhlbiB0YWtlIHRoZSBmYXN0cGF0aC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X2Jsb2NraW5nX2lzX2dwKHZvaWQpCit7CisJcmV0dXJuIG51bV9vbmxpbmVfY3B1cygpID09IDEgJiYgIXJjdV9zY2hlZHVsZXJfYWN0aXZlOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VQUkVFTVBUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggZDQzNjhiNy4uYTcyMmZiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTMyNiw0ICszMjYsMTAgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTk9fSFogKi8KIAorLyogQSBjb250ZXh0IHN3aXRjaCBpcyBhIGdyYWNlIHBlcmlvZCBmb3IgcmN1dHJlZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9ibG9ja2luZ19pc19ncCh2b2lkKQoreworCXJldHVybiBudW1fb25saW5lX2NwdXMoKSA9PSAxOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VUUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmRzLmggYi9pbmNsdWRlL2xpbnV4L3Jkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWRjOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Jkcy5oCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfUkRTX0gKKyNkZWZpbmUgX0xJTlVYX1JEU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBUaGVzZSBzcGFyc2UgYW5ub3RhdGVkIHR5cGVzIHNob3VsZG4ndCBiZSBpbiBhbnkgdXNlcgorICogdmlzaWJsZSBoZWFkZXIgZmlsZS4gV2Ugc2hvdWxkIGNsZWFuIHRoaXMgdXAgcmF0aGVyCisgKiB0aGFuIGtsdWRnaW5nIGFyb3VuZCB0aGVtLiAqLworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fYmUxNgl1X2ludDE2X3QKKyNkZWZpbmUgX19iZTMyCXVfaW50MzJfdAorI2RlZmluZSBfX2JlNjQJdV9pbnQ2NF90CisjZW5kaWYKKworI2RlZmluZSBSRFNfSUJfQUJJX1ZFUlNJT04JCTB4MzAxCisKKy8qCisgKiBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgZm9yIFNPTF9SRFMKKyAqLworI2RlZmluZSBSRFNfQ0FOQ0VMX1NFTlRfVE8gICAgICAJMQorI2RlZmluZSBSRFNfR0VUX01SCQkJMgorI2RlZmluZSBSRFNfRlJFRV9NUgkJCTMKKy8qIGRlcHJlY2F0ZWQ6IFJEU19CQVJSSUVSIDQgKi8KKyNkZWZpbmUgUkRTX1JFQ1ZFUlIJCQk1CisjZGVmaW5lIFJEU19DT05HX01PTklUT1IJCTYKKworLyoKKyAqIENvbnRyb2wgbWVzc2FnZSB0eXBlcyBmb3IgU09MX1JEUy4KKyAqCisgKiBDTVNHX1JETUFfQVJHUyAoc2VuZG1zZykKKyAqCVJlcXVlc3QgYSBSRE1BIHRyYW5zZmVyIHRvL2Zyb20gdGhlIHNwZWNpZmllZAorICoJbWVtb3J5IHJhbmdlcy4KKyAqCVRoZSBjbXNnX2RhdGEgaXMgYSBzdHJ1Y3QgcmRzX3JkbWFfYXJncy4KKyAqIFJEU19DTVNHX1JETUFfREVTVCAocmVjdm1zZywgc2VuZG1zZykKKyAqCUtlcm5lbCBpbmZvcm1zIGFwcGxpY2F0aW9uIGFib3V0IGludGVuZGVkCisgKglzb3VyY2UvZGVzdGluYXRpb24gb2YgYSBSRE1BIHRyYW5zZmVyCisgKiBSRFNfQ01TR19SRE1BX01BUCAoc2VuZG1zZykKKyAqCUFwcGxpY2F0aW9uIGFza3Mga2VybmVsIHRvIG1hcCB0aGUgZ2l2ZW4KKyAqCW1lbW9yeSByYW5nZSBpbnRvIGEgSUIgTVIsIGFuZCBzZW5kIHRoZQorICoJUl9LZXkgYWxvbmcgaW4gYW4gUkRTIGV4dGVuc2lvbiBoZWFkZXIuCisgKglUaGUgY21zZ19kYXRhIGlzIGEgc3RydWN0IHJkc19nZXRfbXJfYXJncywKKyAqCXRoZSBzYW1lIGFzIGZvciB0aGUgR0VUX01SIHNldHNvY2tvcHQuCisgKiBSRFNfQ01TR19SRE1BX1NUQVRVUyAocmVjdm1zZykKKyAqCVJldHVybnMgdGhlIHN0YXR1cyBvZiBhIGNvbXBsZXRlZCBSRE1BIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBSRFNfQ01TR19SRE1BX0FSR1MJCTEKKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9ERVNUCQkyCisjZGVmaW5lIFJEU19DTVNHX1JETUFfTUFQCQkzCisjZGVmaW5lIFJEU19DTVNHX1JETUFfU1RBVFVTCQk0CisjZGVmaW5lIFJEU19DTVNHX0NPTkdfVVBEQVRFCQk1CisKKyNkZWZpbmUgUkRTX0lORk9fRklSU1QJCQkxMDAwMAorI2RlZmluZSBSRFNfSU5GT19DT1VOVEVSUwkJMTAwMDAKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTlMJCTEwMDAxCisvKiAxMDAwMiBha2EgUkRTX0lORk9fRkxPV1MgaXMgZGVwcmVjYXRlZCAqLworI2RlZmluZSBSRFNfSU5GT19TRU5EX01FU1NBR0VTCQkxMDAwMworI2RlZmluZSBSRFNfSU5GT19SRVRSQU5TX01FU1NBR0VTICAgICAgIDEwMDA0CisjZGVmaW5lIFJEU19JTkZPX1JFQ1ZfTUVTU0FHRVMgICAgICAgICAgMTAwMDUKKyNkZWZpbmUgUkRTX0lORk9fU09DS0VUUyAgICAgICAgICAgICAgICAxMDAwNgorI2RlZmluZSBSRFNfSU5GT19UQ1BfU09DS0VUUyAgICAgICAgICAgIDEwMDA3CisjZGVmaW5lIFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TCQkxMDAwOAorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX1NUQVRTCTEwMDA5CisjZGVmaW5lIFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TCTEwMDEwCisjZGVmaW5lIFJEU19JTkZPX0xBU1QJCQkxMDAxMAorCitzdHJ1Y3QgcmRzX2luZm9fY291bnRlciB7CisJdV9pbnQ4X3QJbmFtZVszMl07CisJdV9pbnQ2NF90CXZhbHVlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfU0VORElORwkweDAxCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19DT05ORUNUSU5HCTB4MDIKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHX0NPTk5FQ1RFRAkweDA0CisKKyNkZWZpbmUgVFJBTlNOQU1TSVoJMTYKKworc3RydWN0IHJkc19pbmZvX2Nvbm5lY3Rpb24geworCXVfaW50NjRfdAluZXh0X3R4X3NlcTsKKwl1X2ludDY0X3QJbmV4dF9yeF9zZXE7CisJX19iZTMyCQlsYWRkcjsKKwlfX2JlMzIJCWZhZGRyOworCXVfaW50OF90CXRyYW5zcG9ydFtUUkFOU05BTVNJWl07CQkvKiBudWxsIHRlcm0gYXNjaWkgKi8KKwl1X2ludDhfdAlmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCByZHNfaW5mb19mbG93IHsKKwlfX2JlMzIJCWxhZGRyOworCV9fYmUzMgkJZmFkZHI7CisJdV9pbnQzMl90CWJ5dGVzOworCV9fYmUxNgkJbHBvcnQ7CisJX19iZTE2CQlmcG9ydDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lORk9fTUVTU0FHRV9GTEFHX0FDSyAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkRTX0lORk9fTUVTU0FHRV9GTEFHX0ZBU1RfQUNLICAgICAgICAgIDB4MDIKKworc3RydWN0IHJkc19pbmZvX21lc3NhZ2UgeworCXVfaW50NjRfdAlzZXE7CisJdV9pbnQzMl90CWxlbjsKKwlfX2JlMzIJCWxhZGRyOworCV9fYmUzMgkJZmFkZHI7CisJX19iZTE2CQlscG9ydDsKKwlfX2JlMTYJCWZwb3J0OworCXVfaW50OF90CWZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJkc19pbmZvX3NvY2tldCB7CisJdV9pbnQzMl90CXNuZGJ1ZjsKKwlfX2JlMzIJCWJvdW5kX2FkZHI7CisJX19iZTMyCQljb25uZWN0ZWRfYWRkcjsKKwlfX2JlMTYJCWJvdW5kX3BvcnQ7CisJX19iZTE2CQljb25uZWN0ZWRfcG9ydDsKKwl1X2ludDMyX3QJcmN2YnVmOworCXVfaW50NjRfdAlpbnVtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBSRFNfSUJfR0lEX0xFTgkxNgorc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiB7CisJX19iZTMyCQlzcmNfYWRkcjsKKwlfX2JlMzIJCWRzdF9hZGRyOworCXVpbnQ4X3QJCXNyY19naWRbUkRTX0lCX0dJRF9MRU5dOworCXVpbnQ4X3QJCWRzdF9naWRbUkRTX0lCX0dJRF9MRU5dOworCisJdWludDMyX3QJbWF4X3NlbmRfd3I7CisJdWludDMyX3QJbWF4X3JlY3Zfd3I7CisJdWludDMyX3QJbWF4X3NlbmRfc2dlOworCXVpbnQzMl90CXJkbWFfbXJfbWF4OworCXVpbnQzMl90CXJkbWFfbXJfc2l6ZTsKK307CisKKy8qCisgKiBDb25nZXN0aW9uIG1vbml0b3JpbmcuCisgKiBDb25nZXN0aW9uIGNvbnRyb2wgaW4gUkRTIGhhcHBlbnMgYXQgdGhlIGhvc3QgY29ubmVjdGlvbgorICogbGV2ZWwgYnkgZXhjaGFuZ2luZyBhIGJpdG1hcCBtYXJraW5nIGNvbmdlc3RlZCBwb3J0cy4KKyAqIEJ5IGRlZmF1bHQsIGEgcHJvY2VzcyBzbGVlcGluZyBpbiBwb2xsKCkgaXMgYWx3YXlzIHdva2VuCisgKiB1cCB3aGVuIHRoZSBjb25nZXN0aW9uIG1hcCBpcyB1cGRhdGVkLgorICogV2l0aCBleHBsaWNpdCBtb25pdG9yaW5nLCBhbiBhcHBsaWNhdGlvbiBjYW4gaGF2ZSBtb3JlCisgKiBmaW5lLWdyYWluZWQgY29udHJvbC4KKyAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YWxscyBhIDY0Yml0IG1hc2sgdmFsdWUgaW4gdGhlIHNvY2tldCwKKyAqIHdoZXJlIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgZ3JvdXAgb2YgcG9ydHMuCisgKiBXaGVuIGEgY29uZ2VzdGlvbiB1cGRhdGUgYXJyaXZlcywgUkRTIGNoZWNrcyB0aGUgc2V0IG9mCisgKiBwb3J0cyB0aGF0IGFyZSBub3cgdW5jb25nZXN0ZWQgYWdhaW5zdCB0aGUgbGlzdCBiaXQgbWFzaworICogaW5zdGFsbGVkIGluIHRoZSBzb2NrZXQsIGFuZCBpZiB0aGV5IG92ZXJsYXAsIHdlIHF1ZXVlIGEKKyAqIGNvbmdfbm90aWZpY2F0aW9uIG9uIHRoZSBzb2NrZXQuCisgKgorICogVG8gaW5zdGFsbCB0aGUgY29uZ2VzdGlvbiBtb25pdG9yIGJpdG1hc2ssIHVzZSBSRFNfQ09OR19NT05JVE9SCisgKiB3aXRoIHRoZSA2NGJpdCBtYXNrLgorICogQ29uZ2VzdGlvbiB1cGRhdGVzIGFyZSByZWNlaXZlZCB2aWEgUkRTX0NNU0dfQ09OR19VUERBVEUKKyAqIGNvbnRyb2wgbWVzc2FnZXMuCisgKgorICogVGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gYml0cyBhbmQgcG9ydHMgaXMKKyAqCTEgPDwgKHBvcnRudW0gJSA2NCkKKyAqLworI2RlZmluZSBSRFNfQ09OR19NT05JVE9SX1NJWkUJNjQKKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUl9CSVQocG9ydCkgICgoKHVuc2lnbmVkIGludCkgcG9ydCkgJSBSRFNfQ09OR19NT05JVE9SX1NJWkUpCisjZGVmaW5lIFJEU19DT05HX01PTklUT1JfTUFTSyhwb3J0KSAoMVVMTCA8PCBSRFNfQ09OR19NT05JVE9SX0JJVChwb3J0KSkKKworLyoKKyAqIFJETUEgcmVsYXRlZCB0eXBlcworICovCisKKy8qCisgKiBUaGlzIGVuY2Fwc3VsYXRlcyBhIHJlbW90ZSBtZW1vcnkgbG9jYXRpb24uCisgKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgaXQgY29udGFpbnMgdGhlIFJfS2V5CisgKiBvZiB0aGUgcmVtb3RlIG1lbW9yeSByZWdpb24sIGFuZCB0aGUgb2Zmc2V0IGludG8gaXQKKyAqIChzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0CisgKiBhbGlnbm1lbnQpLgorICovCit0eXBlZGVmIHVfaW50NjRfdAlyZHNfcmRtYV9jb29raWVfdDsKKworc3RydWN0IHJkc19pb3ZlYyB7CisJdV9pbnQ2NF90CWFkZHI7CisJdV9pbnQ2NF90CWJ5dGVzOworfTsKKworc3RydWN0IHJkc19nZXRfbXJfYXJncyB7CisJc3RydWN0IHJkc19pb3ZlYyB2ZWM7CisJdV9pbnQ2NF90CWNvb2tpZV9hZGRyOworCXVpbnQ2NF90CWZsYWdzOworfTsKKworc3RydWN0IHJkc19mcmVlX21yX2FyZ3MgeworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1X2ludDY0X3QJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcmRzX3JkbWFfYXJncyB7CisJcmRzX3JkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCByZHNfaW92ZWMgcmVtb3RlX3ZlYzsKKwl1X2ludDY0X3QJbG9jYWxfdmVjX2FkZHI7CisJdV9pbnQ2NF90CW5yX2xvY2FsOworCXVfaW50NjRfdAlmbGFnczsKKwl1X2ludDY0X3QJdXNlcl90b2tlbjsKK307CisKK3N0cnVjdCByZHNfcmRtYV9ub3RpZnkgeworCXVfaW50NjRfdAl1c2VyX3Rva2VuOworCWludDMyX3QJCXN0YXR1czsKK307CisKKyNkZWZpbmUgUkRTX1JETUFfU1VDQ0VTUwkwCisjZGVmaW5lIFJEU19SRE1BX1JFTU9URV9FUlJPUgkxCisjZGVmaW5lIFJEU19SRE1BX0NBTkNFTEVECTIKKyNkZWZpbmUgUkRTX1JETUFfRFJPUFBFRAkzCisjZGVmaW5lIFJEU19SRE1BX09USEVSX0VSUk9SCTQKKworLyoKKyAqIENvbW1vbiBzZXQgb2YgZmxhZ3MgZm9yIGFsbCBSRE1BIHJlbGF0ZWQgc3RydWN0cworICovCisjZGVmaW5lIFJEU19SRE1BX1JFQURXUklURQkweDAwMDEKKyNkZWZpbmUgUkRTX1JETUFfRkVOQ0UJCTB4MDAwMgkvKiB1c2UgRkVOQ0UgZm9yIGltbWVkaWF0ZSBzZW5kICovCisjZGVmaW5lIFJEU19SRE1BX0lOVkFMSURBVEUJMHgwMDA0CS8qIGludmFsaWRhdGUgUl9LZXkgYWZ0ZXIgZnJlZWluZyBNUiAqLworI2RlZmluZSBSRFNfUkRNQV9VU0VfT05DRQkweDAwMDgJLyogZnJlZSBNUiBhZnRlciB1c2UgKi8KKyNkZWZpbmUgUkRTX1JETUFfRE9OVFdBSVQJMHgwMDEwCS8qIERvbid0IHdhaXQgaW4gU0VUX0JBUlJJRVIgKi8KKyNkZWZpbmUgUkRTX1JETUFfTk9USUZZX01FCTB4MDAyMAkvKiBOb3RpZnkgd2hlbiBvcGVyYXRpb24gY29tcGxldGVzICovCisKKyNlbmRpZiAvKiBJQl9SRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGJjNTExNGQuLmUzNTZjOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mc19zYi5oPgogI2VuZGlmCiAKLXN0cnVjdCBmaWQ7Ci0KIC8qCiAgKiAgaW5jbHVkZS9saW51eC9yZWlzZXJfZnMuaAogICoKQEAgLTM3LDYgKzM1LDMzIEBACiAgKgogICovCiAKKy8qIGlvY3RsJ3MgY29tbWFuZCAqLworI2RlZmluZSBSRUlTRVJGU19JT0NfVU5QQUNLCQlfSU9XKDB4Q0QsMSxsb25nKQorLyogZGVmaW5lIGZvbGxvd2luZyBmbGFncyB0byBiZSB0aGUgc2FtZSBhcyBpbiBleHQyLCBzbyB0aGF0IGNoYXR0cigxKSwKKyAgIGxzYXR0cigxKSB3aWxsIHdvcmsgd2l0aCB1cy4gKi8KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVEZMQUdTCQlGU19JT0NfR0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVEZMQUdTCQlGU19JT0NfU0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVFZFUlNJT04JCUZTX0lPQ19HRVRWRVJTSU9OCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRWRVJTSU9OCQlGU19JT0NfU0VUVkVSU0lPTgorCisjaWZkZWYgX19LRVJORUxfXworLyogdGhlIDMyIGJpdCBjb21wYXQgZGVmaW5pdGlvbnMgd2l0aCBpbnQgYXJndW1lbnQgKi8KKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfVU5QQUNLCQlfSU9XKDB4Q0QsIDEsIGludCkKKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VURkxBR1MJCUZTX0lPQzMyX0dFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVEZMQUdTCQlGU19JT0MzMl9TRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRWRVJTSU9OCUZTX0lPQzMyX0dFVFZFUlNJT04KKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VUVkVSU0lPTglGU19JT0MzMl9TRVRWRVJTSU9OCisKKy8qIExvY2tpbmcgcHJpbWl0aXZlcyAqLworLyogUmlnaHQgbm93IHdlIGFyZSBzdGlsbCBmYWxsaW5nIGJhY2sgdG8gKHVuKWxvY2tfa2VybmVsLCBidXQgZXZlbnR1YWxseSB0aGF0CisgICB3b3VsZCBldm9sdmUgaW50byByZWFsIHBlci1mcyBsb2NrcyAqLworI2RlZmluZSByZWlzZXJmc193cml0ZV9sb2NrKCBzYiApIGxvY2tfa2VybmVsKCkKKyNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfdW5sb2NrKCBzYiApIHVubG9ja19rZXJuZWwoKQorCisvKiB4YXR0ciBzdHVmZiAqLworI2RlZmluZSBSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHMpIChSRUlTRVJGU19TQihzKS0+eGF0dHJfZGlyX3NlbSkKK3N0cnVjdCBmaWQ7CisKIC8qIGluIHJlYWRpbmcgdGhlICNkZWZpbmVzLCBpdCBtYXkgaGVscCB0byB1bmRlcnN0YW5kIHRoYXQgdGhleSBlbXBsb3kKICAgIHRoZSBmb2xsb3dpbmcgYWJicmV2aWF0aW9uczoKIApAQCAtNjk4LDYgKzcyMyw3IEBACiAvKiBvYmplY3QgaWRlbnRpZmllciBmb3Igcm9vdCBkaXIgKi8KICNkZWZpbmUgUkVJU0VSRlNfUk9PVF9PQkpFQ1RJRCAyCiAjZGVmaW5lIFJFSVNFUkZTX1JPT1RfUEFSRU5UX09CSkVDVElEIDEKKwogZXh0ZXJuIHN0cnVjdCByZWlzZXJmc19rZXkgcm9vdF9rZXk7CiAKIC8qIApAQCAtMTU0MCw3ICsxNTY2LDYgQEAKIC8qICAgICAgICAgICAgICAgICAgICBGVU5DVElPTiBERUNMQVJBVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiNpZmRlZiBfX0tFUk5FTF9fKi8KICNkZWZpbmUgZ2V0X2pvdXJuYWxfZGVzY19tYWdpYyhiaCkgKGJoLT5iX2RhdGEgKyBiaC0+Yl9zaXplIC0gMTIpCiAKICNkZWZpbmUgam91cm5hbF90cmFuc19oYWxmKGJsb2Nrc2l6ZSkgXApAQCAtMjE3OCwyOSArMjIwMyw2IEBACiAJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGludCByZWlzZXJmc191bnBhY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogCi0vKiBpb2N0bCdzIGNvbW1hbmQgKi8KLSNkZWZpbmUgUkVJU0VSRlNfSU9DX1VOUEFDSwkJX0lPVygweENELDEsbG9uZykKLS8qIGRlZmluZSBmb2xsb3dpbmcgZmxhZ3MgdG8gYmUgdGhlIHNhbWUgYXMgaW4gZXh0Miwgc28gdGhhdCBjaGF0dHIoMSksCi0gICBsc2F0dHIoMSkgd2lsbCB3b3JrIHdpdGggdXMuICovCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRGTEFHUwkJRlNfSU9DX0dFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRGTEFHUwkJRlNfSU9DX1NFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRWRVJTSU9OCQlGU19JT0NfR0VUVkVSU0lPTgotI2RlZmluZSBSRUlTRVJGU19JT0NfU0VUVkVSU0lPTgkJRlNfSU9DX1NFVFZFUlNJT04KIAotLyogdGhlIDMyIGJpdCBjb21wYXQgZGVmaW5pdGlvbnMgd2l0aCBpbnQgYXJndW1lbnQgKi8KLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfVU5QQUNLCQlfSU9XKDB4Q0QsIDEsIGludCkKLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VURkxBR1MJCUZTX0lPQzMyX0dFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVEZMQUdTCQlGU19JT0MzMl9TRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRWRVJTSU9OCUZTX0lPQzMyX0dFVFZFUlNJT04KLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VUVkVSU0lPTglGU19JT0MzMl9TRVRWRVJTSU9OCi0KLS8qIExvY2tpbmcgcHJpbWl0aXZlcyAqLwotLyogUmlnaHQgbm93IHdlIGFyZSBzdGlsbCBmYWxsaW5nIGJhY2sgdG8gKHVuKWxvY2tfa2VybmVsLCBidXQgZXZlbnR1YWxseSB0aGF0Ci0gICB3b3VsZCBldm9sdmUgaW50byByZWFsIHBlci1mcyBsb2NrcyAqLwotI2RlZmluZSByZWlzZXJmc193cml0ZV9sb2NrKCBzYiApIGxvY2tfa2VybmVsKCkKLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfdW5sb2NrKCBzYiApIHVubG9ja19rZXJuZWwoKQotCi0vKiB4YXR0ciBzdHVmZiAqLwotI2RlZmluZSBSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHMpIChSRUlTRVJGU19TQihzKS0+eGF0dHJfZGlyX3NlbSkKLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkJCQkvKiBfTElOVVhfUkVJU0VSX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IDFlNWY2NzMuLmJhMzI1NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMjE3LDYgKzIxNyw3IEBACiAjZGVmaW5lIFJUUFJPVF9ETlJPVVRFRAkxMwkvKiBERUNuZXQgcm91dGluZyBkYWVtb24gKi8KICNkZWZpbmUgUlRQUk9UX1hPUlAJMTQJLyogWE9SUCAqLwogI2RlZmluZSBSVFBST1RfTlRLCTE1CS8qIE5ldHN1a3VrdSAqLworI2RlZmluZSBSVFBST1RfREhDUAkxNiAgICAgIC8qIERIQ1AgY2xpZW50ICovCiAKIC8qIHJ0bV9zY29wZQogCkBAIC02MjIsOCArNjIzLDggQEAKIAogZXh0ZXJuIGludCBydG5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVjaG8pOwogZXh0ZXJuIGludCBydG5sX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkKTsKLWV4dGVybiBpbnQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCi0JCSAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpOworZXh0ZXJuIHZvaWQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLAorCQkJdTMyIGdyb3VwLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcnRubF9zZXRfc2tfZXJyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGludCBydG5ldGxpbmtfcHV0X21ldHJpY3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICptZXRyaWNzKTsKIGV4dGVybiBpbnQgcnRubF9wdXRfY2FjaGVpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA4OTgxZTUyLi5mZjkwNGIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC05OTgsNiArOTk4LDcgQEAKIAkJCSAgICAgIHN0cnVjdCBycSAqYnVzaWVzdCwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCiAJCQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSk7CiAJdm9pZCAoKnByZV9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwlpbnQgKCpuZWVkc19wb3N0X3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxKTsKIAl2b2lkICgqcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7CiAJdm9pZCAoKnRhc2tfd2FrZV91cCkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIApAQCAtMTA1Miw2ICsxMDUzLDEwIEBACiAJdTY0CQkJbGFzdF93YWtldXA7CiAJdTY0CQkJYXZnX292ZXJsYXA7CiAKKwl1NjQJCQlzdGFydF9ydW50aW1lOworCXU2NAkJCWF2Z193YWtldXA7CisJdTY0CQkJbnJfbWlncmF0aW9uczsKKwogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJdTY0CQkJd2FpdF9zdGFydDsKIAl1NjQJCQl3YWl0X21heDsKQEAgLTEwNjcsNyArMTA3Miw2IEBACiAJdTY0CQkJZXhlY19tYXg7CiAJdTY0CQkJc2xpY2VfbWF4OwogCi0JdTY0CQkJbnJfbWlncmF0aW9uczsKIAl1NjQJCQlucl9taWdyYXRpb25zX2NvbGQ7CiAJdTY0CQkJbnJfZmFpbGVkX21pZ3JhdGlvbnNfYWZmaW5lOwogCXU2NAkJCW5yX2ZhaWxlZF9taWdyYXRpb25zX3J1bm5pbmc7CkBAIC0xMTY0LDYgKzExNjgsNyBAQAogI2VuZGlmCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tzOworCXN0cnVjdCBwbGlzdF9ub2RlIHB1c2hhYmxlX3Rhc2tzOwogCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICphY3RpdmVfbW07CiAKQEAgLTExNzUsNiArMTE4MCw4IEBACiAJLyogPz8/ICovCiAJdW5zaWduZWQgaW50IHBlcnNvbmFsaXR5OwogCXVuc2lnbmVkIGRpZF9leGVjOjE7CisJdW5zaWduZWQgaW5fZXhlY3ZlOjE7CS8qIFRlbGwgdGhlIExTTXMgdGhhdCB0aGUgcHJvY2VzcyBpcyBkb2luZyBhbgorCQkJCSAqIGV4ZWN2ZSAqLwogCXBpZF90IHBpZDsKIAlwaWRfdCB0Z2lkOwogCkBAIC0xNDE5LDYgKzE0MjYsOSBAQAogI2VuZGlmCiB9OwogCisvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLworI2RlZmluZSB0c2tfY3B1bWFzayh0c2spICgmKHRzayktPmNwdXNfYWxsb3dlZCkKKwogLyoKICAqIFByaW9yaXR5IG9mIGEgcHJvY2VzcyBnb2VzIGZyb20gMC4uTUFYX1BSSU8tMSwgdmFsaWQgUlQKICAqIHByaW9yaXR5IGlzIDAuLk1BWF9SVF9QUklPLTEsIGFuZCBTQ0hFRF9OT1JNQUwvU0NIRURfQkFUQ0gKQEAgLTE2NzAsNiArMTY4MCwxNiBAQAogCXJldHVybiBzZXRfY3B1c19hbGxvd2VkX3B0cihwLCAmbmV3X21hc2spOwogfQogCisvKgorICogQXJjaGl0ZWN0dXJlcyBjYW4gc2V0IHRoaXMgdG8gMSBpZiB0aGV5IGhhdmUgc3BlY2lmaWVkCisgKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyBpbiB0aGVpciBhcmNoIEtjb25maWcsCisgKiBidXQgdGhlbiBkdXJpbmcgYm9vdHVwIGl0IHR1cm5zIG91dCB0aGF0IHNjaGVkX2Nsb2NrKCkKKyAqIGlzIHJlbGlhYmxlIGFmdGVyIGFsbDoKKyAqLworI2lmZGVmIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCitleHRlcm4gaW50IHNjaGVkX2Nsb2NrX3N0YWJsZTsKKyNlbmRpZgorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzY2hlZF9jbG9ja19pbml0KHZvaWQpOwpAQCAtMjI5MSw5ICsyMzExLDEzIEBACiBleHRlcm4gaW50IHNjaGVkX2dyb3VwX3NldF9ydF9wZXJpb2Qoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLAogCQkJCSAgICAgIGxvbmcgcnRfcGVyaW9kX3VzKTsKIGV4dGVybiBsb25nIHNjaGVkX2dyb3VwX3J0X3BlcmlvZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpOworZXh0ZXJuIGludCBzY2hlZF9ydF9jYW5fYXR0YWNoKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogI2VuZGlmCiAjZW5kaWYKIAorZXh0ZXJuIGludCB0YXNrX2Nhbl9zd2l0Y2hfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwLAorCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKICNpZmRlZiBDT05GSUdfVEFTS19YQUNDVAogc3RhdGljIGlubGluZSB2b2lkIGFkZF9yY2hhcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3NpemVfdCBhbXQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaAppbmRleCBiYmY0ODlkLi5kMjM5Nzk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmgKQEAgLTEyLDYgKzEyLDggQEAKICNpZm5kZWYgX0xJTlVYX1NFTElOVVhfTkVUTElOS19ICiAjZGVmaW5lIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogTWVzc2FnZSB0eXBlcy4gKi8KICNkZWZpbmUgU0VMTkxfTVNHX0JBU0UgMHgxMAogZW51bSB7CkBAIC0zOCwxMSArNDAsMTEgQEAKIAogLyogTWVzc2FnZSBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3Qgc2VsbmxfbXNnX3NldGVuZm9yY2UgewotCWludDMyX3QJCXZhbDsKKwlfX3MzMgkJdmFsOwogfTsKIAogc3RydWN0IHNlbG5sX21zZ19wb2xpY3lsb2FkIHsKLQl1X2ludDMyX3QJc2Vxbm87CisJX191MzIJc2Vxbm87CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX1NFTElOVVhfTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKaW5kZXggNDBlYTUwNS4uZjYxNmYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApAQCAtMTksNiArMTksNyBAQAogCXNpemVfdCBmcm9tOwogCXNpemVfdCBjb3VudDsKIAlsb2ZmX3QgaW5kZXg7CisJbG9mZl90IHJlYWRfcG9zOwogCXU2NCB2ZXJzaW9uOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqb3A7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggOTBiYmJmMC4uZGY5MjQ1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMjk2LDYgKzI5Niw3IEBACiAjZGVmaW5lIFVQRl9IQVJEUFBTX0NECQkoKF9fZm9yY2UgdXBmX3QpICgxIDw8IDExKSkKICNkZWZpbmUgVVBGX0xPV19MQVRFTkNZCQkoKF9fZm9yY2UgdXBmX3QpICgxIDw8IDEzKSkKICNkZWZpbmUgVVBGX0JVR0dZX1VBUlQJCSgoX19mb3JjZSB1cGZfdCkgKDEgPDwgMTQpKQorI2RlZmluZSBVUEZfTk9fVFhFTl9URVNUCSgoX19mb3JjZSB1cGZfdCkgKDEgPDwgMTUpKQogI2RlZmluZSBVUEZfTUFHSUNfTVVMVElQTElFUgkoKF9fZm9yY2UgdXBmX3QpICgxIDw8IDE2KSkKICNkZWZpbmUgVVBGX0NPTlNfRkxPVwkJKChfX2ZvcmNlIHVwZl90KSAoMSA8PCAyMykpCiAjZGVmaW5lIFVQRl9TSEFSRV9JUlEJCSgoX19mb3JjZSB1cGZfdCkgKDEgPDwgMjQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpby5oIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCmluZGV4IDFiY2IzNTcuLmUwNDE3ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKQEAgLTIxMiw3ICsyMTIsNyBAQAogI2RlZmluZSBTRVJJT19GVUpJVFNVCTB4MzUKICNkZWZpbmUgU0VSSU9fWkhFTkhVQQkweDM2CiAjZGVmaW5lIFNFUklPX0lORVhJTwkweDM3Ci0jZGVmaW5lIFNFUklPX1RPVUNISVQyMTMJMHgzNworI2RlZmluZSBTRVJJT19UT1VDSElUMjEzCTB4MzgKICNkZWZpbmUgU0VSSU9fVzgwMDEJMHgzOQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hfY210LmggYi9pbmNsdWRlL2xpbnV4L3NoX2NtdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2FjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2NtdC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19TSF9DTVRfSF9fCisjZGVmaW5lIF9fU0hfQ01UX0hfXworCitzdHJ1Y3Qgc2hfY210X2NvbmZpZyB7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGNoYW5uZWxfb2Zmc2V0OworCWludCB0aW1lcl9iaXQ7CisJY2hhciAqY2xrOworCXVuc2lnbmVkIGxvbmcgY2xvY2tldmVudF9yYXRpbmc7CisJdW5zaWduZWQgbG9uZyBjbG9ja3NvdXJjZV9yYXRpbmc7Cit9OworCisjZW5kaWYgLyogX19TSF9DTVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaCBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCmluZGV4IDY4ZTIxMmYuLmViMTQyM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCkBAIC04NSw2ICs4NSw3IEBACiB9CiAjZW5kaWYKIAordW5zaWduZWQgaW50IGludGNfZXZ0MmlycSh1bnNpZ25lZCBpbnQgdmVjdG9yKTsKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKIGludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGY5NmJjOTEuLmJiMTk4MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMTM1LDggKzEzNSw3IEBACiAjZGVmaW5lIEhBVkVfSFdfVElNRV9TVEFNUAogCiAvKioKLSAqIHNrYl9zaGFyZWRfaHd0c3RhbXBzIC0gaGFyZHdhcmUgdGltZSBzdGFtcHMKLSAqCisgKiBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgLSBoYXJkd2FyZSB0aW1lIHN0YW1wcwogICogQGh3dHN0YW1wOgloYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIGludG8gZHVyYXRpb24KICAqCQlzaW5jZSBhcmJpdHJhcnkgcG9pbnQgaW4gdGltZQogICogQHN5c3RzdGFtcDoJaHd0c3RhbXAgdHJhbnNmb3JtZWQgdG8gc3lzdGVtIHRpbWUgYmFzZQpAQCAtMTY0LDggKzE2Myw3IEBACiB9OwogCiAvKioKLSAqIHNrYl9zaGFyZWRfdHggLSBpbnN0cnVjdGlvbnMgZm9yIHRpbWUgc3RhbXBpbmcgb2Ygb3V0Z29pbmcgcGFja2V0cwotICoKKyAqIHN0cnVjdCBza2Jfc2hhcmVkX3R4IC0gaW5zdHJ1Y3Rpb25zIGZvciB0aW1lIHN0YW1waW5nIG9mIG91dGdvaW5nIHBhY2tldHMKICAqIEBoYXJkd2FyZToJCWdlbmVyYXRlIGhhcmR3YXJlIHRpbWUgc3RhbXAKICAqIEBzb2Z0d2FyZToJCWdlbmVyYXRlIHNvZnR3YXJlIHRpbWUgc3RhbXAKICAqIEBpbl9wcm9ncmVzczoJZGV2aWNlIGRyaXZlciBpcyBnb2luZyB0byBwcm92aWRlCkBAIC00MjMsNiArNDIxLDcgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBjb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkCSAgICAgICBfX2tmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsCiAJCQkJICAgZ2ZwX3QgcHJpb3JpdHksIGludCBmY2xvbmUsIGludCBub2RlKTsKQEAgLTQ2MSwyMCArNDYwLDEyIEBACiBleHRlcm4gaW50CSAgICAgICBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpOwogZXh0ZXJuIGludAkgICAgICAgc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkKTsKLSNkZWZpbmUgZGV2X2tmcmVlX3NrYihhKQlrZnJlZV9za2IoYSkKKyNkZWZpbmUgZGV2X2tmcmVlX3NrYihhKQljb25zdW1lX3NrYihhKQorI2RlZmluZSBkZXZfY29uc3VtZV9za2IoYSkJa2ZyZWVfc2tiX2NsZWFuKGEpCiBleHRlcm4gdm9pZAkgICAgICBza2Jfb3Zlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuLAogCQkJCSAgICAgdm9pZCAqaGVyZSk7CiBleHRlcm4gdm9pZAkgICAgICBza2JfdW5kZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwKIAkJCQkgICAgICB2b2lkICpoZXJlKTsKLWV4dGVybiB2b2lkCSAgICAgIHNrYl90cnVlc2l6ZV9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfdHJ1ZXNpemVfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgbGVuID0gc2l6ZW9mKHN0cnVjdCBza19idWZmKSArIHNrYi0+bGVuOwotCi0JaWYgKHVubGlrZWx5KChpbnQpc2tiLT50cnVlc2l6ZSA8IGxlbikpCi0JCXNrYl90cnVlc2l6ZV9idWcoc2tiKTsKLX0KIAogZXh0ZXJuIGludCBza2JfYXBwZW5kX2RhdGF0b19mcmFncyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwKQEAgLTE5NzgsNyArMTk2OSw3IEBACiAJc2tiLT5xdWV1ZV9tYXBwaW5nID0gcXVldWVfbWFwcGluZzsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nOwogfQpAQCAtMTk5MywxNiArMTk4NCwxOSBAQAogCXNrYi0+cXVldWVfbWFwcGluZyA9IHJ4X3F1ZXVlICsgMTsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9yeF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9yeF9xdWV1ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBza2ItPnF1ZXVlX21hcHBpbmcgLSAxOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3J4X3F1ZXVlX3JlY29yZGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIChza2ItPnF1ZXVlX21hcHBpbmcgIT0gMCk7CiB9CiAKK2V4dGVybiB1MTYgc2tiX3R4X2hhc2goY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworCiAjaWZkZWYgQ09ORklHX1hGUk0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNlY19wYXRoICpza2Jfc2VjX3BhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKaW5kZXggZjk2ZDEzYy4uMjRjNTYwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTEyNyw2ICsxMjcsNyBAQAogdm9pZCAqIF9fbXVzdF9jaGVjayBfX2tyZWFsbG9jKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBnZnBfdCk7CiB2b2lkICogX19tdXN0X2NoZWNrIGtyZWFsbG9jKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBnZnBfdCk7CiB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKik7Cit2b2lkIGt6ZnJlZShjb25zdCB2b2lkICopOwogc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKik7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKaW5kZXggMmY1YzE2Yi4uZTM3YjZhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaApAQCAtNDYsNyArNDYsNiBAQAogc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7CiAJc3BpbmxvY2tfdCBsaXN0X2xvY2s7CS8qIFByb3RlY3QgcGFydGlhbCBsaXN0IGFuZCBucl9wYXJ0aWFsICovCiAJdW5zaWduZWQgbG9uZyBucl9wYXJ0aWFsOwotCXVuc2lnbmVkIGxvbmcgbWluX3BhcnRpYWw7CiAJc3RydWN0IGxpc3RfaGVhZCBwYXJ0aWFsOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJYXRvbWljX2xvbmdfdCBucl9zbGFiczsKQEAgLTg5LDYgKzg4LDcgQEAKIAl2b2lkICgqY3Rvcikodm9pZCAqKTsKIAlpbnQgaW51c2U7CQkvKiBPZmZzZXQgdG8gbWV0YWRhdGEgKi8KIAlpbnQgYWxpZ247CQkvKiBBbGlnbm1lbnQgKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9wYXJ0aWFsOwogCWNvbnN0IGNoYXIgKm5hbWU7CS8qIE5hbWUgKG9ubHkgZm9yIGRpc3BsYXkhKSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogTGlzdCBvZiBzbGFiIGNhY2hlcyAqLwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCkBAIC0xMjEsMTAgKzEyMSwyMyBAQAogI2RlZmluZSBLTUFMTE9DX1NISUZUX0xPVyBpbG9nMihLTUFMTE9DX01JTl9TSVpFKQogCiAvKgorICogTWF4aW11bSBrbWFsbG9jIG9iamVjdCBzaXplIGhhbmRsZWQgYnkgU0xVQi4gTGFyZ2VyIG9iamVjdCBhbGxvY2F0aW9ucworICogYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBwYWdlIGFsbG9jYXRvci4gVGhlIHBhZ2UgYWxsb2NhdG9yICJmYXN0cGF0aCIKKyAqIGlzIHJlbGF0aXZlbHkgc2xvdyBzbyB3ZSBuZWVkIHRoaXMgdmFsdWUgc3VmZmljaWVudGx5IGhpZ2ggc28gdGhhdAorICogcGVyZm9ybWFuY2UgY3JpdGljYWwgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHRocm91Z2ggdGhlIFNMVUIgZmFzdHBhdGguCisgKgorICogVGhpcyBzaG91bGQgYmUgZHJvcHBlZCB0byBQQUdFX1NJWkUgLyAyIG9uY2UgdGhlIHBhZ2UgYWxsb2NhdG9yCisgKiAiZmFzdHBhdGgiIGJlY29tZXMgY29tcGV0aXRpdmUgd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IgZmFzdHBhdGhzLgorICovCisjZGVmaW5lIFNMVUJfTUFYX1NJWkUgKDIgKiBQQUdFX1NJWkUpCisKKyNkZWZpbmUgU0xVQl9QQUdFX1NISUZUIChQQUdFX1NISUZUICsgMikKKworLyoKICAqIFdlIGtlZXAgdGhlIGdlbmVyYWwgY2FjaGVzIGluIGFuIGFycmF5IG9mIHNsYWIgY2FjaGVzIHRoYXQgYXJlIHVzZWQgZm9yCiAgKiAyXnggYnl0ZXMgb2YgYWxsb2NhdGlvbnMuCiAgKi8KLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tQQUdFX1NISUZUICsgMV07CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbU0xVQl9QQUdFX1NISUZUXTsKIAogLyoKICAqIFNvcnJ5IHRoYXQgdGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdGhhdCB1Z2x5IGJ1dCBzb21lIHZlcnNpb25zIG9mIEdDQwpAQCAtMjEyLDcgKzIyNSw3IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkgewotCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJaWYgKHNpemUgPiBTTFVCX01BWF9TSVpFKQogCQkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZmxhZ3MpOwogCiAJCWlmICghKGZsYWdzICYgU0xVQl9ETUEpKSB7CkBAIC0yMzQsNyArMjQ3LDcgQEAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmCi0JCXNpemUgPD0gUEFHRV9TSVpFICYmICEoZmxhZ3MgJiBTTFVCX0RNQSkpIHsKKwkJc2l6ZSA8PSBTTFVCX01BWF9TSVpFICYmICEoZmxhZ3MgJiBTTFVCX0RNQSkpIHsKIAkJCXN0cnVjdCBrbWVtX2NhY2hlICpzID0ga21hbGxvY19zbGFiKHNpemUpOwogCiAJCWlmICghcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCmluZGV4IDIwZmM0YmIuLjQyMWFmYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaApAQCAtMjQsMTAgKzI0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCS8qIHBpZF90CQkJKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkJLyogX191c2VyCQkJKi8KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgX19LRVJORUxfXworIyBpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RydWN0IHNlcV9maWxlOwogZXh0ZXJuIHZvaWQgc29ja2V0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKTsKLSNlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlzYV9mYW1pbHlfdDsKIApAQCAtMTc5LDYgKzE4MSw3IEBACiAjZGVmaW5lIEFGX0FTSAkJMTgJLyogQXNoCQkJCSovCiAjZGVmaW5lIEFGX0VDT05FVAkxOQkvKiBBY29ybiBFY29uZXQJCQkqLwogI2RlZmluZSBBRl9BVE1TVkMJMjAJLyogQVRNIFNWQ3MJCQkqLworI2RlZmluZSBBRl9SRFMJCTIxCS8qIFJEUyBzb2NrZXRzIAkJCSovCiAjZGVmaW5lIEFGX1NOQQkJMjIJLyogTGludXggU05BIFByb2plY3QgKG51dHRlcnMhKSAqLwogI2RlZmluZSBBRl9JUkRBCQkyMwkvKiBJUkRBIHNvY2tldHMJCQkqLwogI2RlZmluZSBBRl9QUFBPWAkyNAkvKiBQUFBvWCBzb2NrZXRzCQkqLwpAQCAtMjE3LDYgKzIyMCw3IEBACiAjZGVmaW5lIFBGX0FTSAkJQUZfQVNICiAjZGVmaW5lIFBGX0VDT05FVAlBRl9FQ09ORVQKICNkZWZpbmUgUEZfQVRNU1ZDCUFGX0FUTVNWQworI2RlZmluZSBQRl9SRFMJCUFGX1JEUwogI2RlZmluZSBQRl9TTkEJCUFGX1NOQQogI2RlZmluZSBQRl9JUkRBCQlBRl9JUkRBCiAjZGVmaW5lIFBGX1BQUE9YCUFGX1BQUE9YCkBAIC0yOTgsNiArMzAyLDcgQEAKICNkZWZpbmUgU09MX1BQUE9MMlRQCTI3MwogI2RlZmluZSBTT0xfQkxVRVRPT1RICTI3NAogI2RlZmluZSBTT0xfUE5QSVBFCTI3NQorI2RlZmluZSBTT0xfUkRTCQkyNzYKIAogLyogSVBYIG9wdGlvbnMgKi8KICNkZWZpbmUgSVBYX1RZUEUJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc3BpX2JpdGJhbmcuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NwaV9iaXRiYW5nLmgKaW5kZXggYmY4ZGUyOC4uZWVkNDI1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpX2JpdGJhbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfYml0YmFuZy5oCkBAIC04Myw2ICs4MywxMyBAQAogICogIGludCBnZXRtaXNvKHN0cnVjdCBzcGlfZGV2aWNlICopOwogICogIHZvaWQgc3BpZGVsYXkodW5zaWduZWQpOwogICoKKyAqIHNldHNjaygpJ3MgaXNfb24gcGFyYW1ldGVyIGlzIGEgemVyby9ub256ZXJvIGJvb2xlYW4uCisgKgorICogc2V0bW9zaSgpJ3MgaXNfb24gcGFyYW1ldGVyIGlzIGEgemVyby9ub256ZXJvIGJvb2xlYW4uCisgKgorICogZ2V0bWlzbygpIGlzIHJlcXVpcmVkIHRvIHJldHVybiAwIG9yIDEgb25seS4gQW55IG90aGVyIHZhbHVlIGlzIGludmFsaWQKKyAqIGFuZCB3aWxsIHJlc3VsdCBpbiBpbXByb3BlciBvcGVyYXRpb24uCisgKgogICogQSBub24taW5saW5lZCByb3V0aW5lIHdvdWxkIGNhbGwgYml0YmFuZ190eHJ4XyooKSByb3V0aW5lcy4gIFRoZQogICogbWFpbiBsb29wIGNvdWxkIGVhc2lseSBjb21waWxlIGRvd24gdG8gYSBoYW5kZnVsIG9mIGluc3RydWN0aW9ucywKICAqIGVzcGVjaWFsbHkgaWYgdGhlIGRlbGF5IGlzIGEgTk9QICh0byBydW4gYXQgcGVhayBzcGVlZCkuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IDE3ZDliNTguLjVhZThmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC0zMzksNiArMzM5LDEwIEBACiAKIGV4dGVybiB2b2lkIHNzYl9idXNfdW5yZWdpc3RlcihzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKIAorLyogU2V0IGEgZmFsbGJhY2sgU1BST00uCisgKiBTZWUga2RvYyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbi4gKi8KK2V4dGVybiBpbnQgc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tKGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKTsKKwogLyogU3VzcGVuZCBhIFNTQiBidXMuCiAgKiBDYWxsIHRoaXMgZnJvbSB0aGUgcGFyZW50IGJ1cyBzdXNwZW5kIHJvdXRpbmUuICovCiBleHRlcm4gaW50IHNzYl9idXNfc3VzcGVuZChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaAppbmRleCAyYzZmYWVjLi4wYjMwMzgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oCkBAIC0xLDE0ICsxLDE1IEBACiAjaWZuZGVmIF9MSU5VWF9TVVNQRU5EX0lPQ1RMU19ICiAjZGVmaW5lIF9MSU5VWF9TVVNQRU5EX0lPQ1RMU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcGFzcyB0aGUgdmFsdWVzIG5lZWRlZCBmb3IgdGhlIGlkZW50aWZpY2F0aW9uCiAgKiBvZiB0aGUgcmVzdW1lIHN3YXAgYXJlYSBmcm9tIGEgdXNlciBzcGFjZSB0byB0aGUga2VybmVsIHZpYSB0aGUKICAqIFNOQVBTSE9UX1NFVF9TV0FQX0FSRUEgaW9jdGwKICAqLwogc3RydWN0IHJlc3VtZV9zd2FwX2FyZWEgewotCWxvZmZfdCBvZmZzZXQ7Ci0JdV9pbnQzMl90IGRldjsKKwlfX2tlcm5lbF9sb2ZmX3Qgb2Zmc2V0OworCV9fdTMyIGRldjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNkZWZpbmUgU05BUFNIT1RfSU9DX01BR0lDCSczJwpAQCAtMjAsMTMgKzIxLDEzIEBACiAjZGVmaW5lIFNOQVBTSE9UX1MyUkFNCQkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTEpCiAjZGVmaW5lIFNOQVBTSE9UX1NFVF9TV0FQX0FSRUEJCV9JT1coU05BUFNIT1RfSU9DX01BR0lDLCAxMywgXAogCQkJCQkJCXN0cnVjdCByZXN1bWVfc3dhcF9hcmVhKQotI2RlZmluZSBTTkFQU0hPVF9HRVRfSU1BR0VfU0laRQkJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE0LCBsb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX0dFVF9JTUFHRV9TSVpFCQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTQsIF9fa2VybmVsX2xvZmZfdCkKICNkZWZpbmUgU05BUFNIT1RfUExBVEZPUk1fU1VQUE9SVAlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxNSkKICNkZWZpbmUgU05BUFNIT1RfUE9XRVJfT0ZGCQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxNikKICNkZWZpbmUgU05BUFNIT1RfQ1JFQVRFX0lNQUdFCQlfSU9XKFNOQVBTSE9UX0lPQ19NQUdJQywgMTcsIGludCkKICNkZWZpbmUgU05BUFNIT1RfUFJFRl9JTUFHRV9TSVpFCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE4KQotI2RlZmluZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkUJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE5LCBsb2ZmX3QpCi0jZGVmaW5lIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMjAsIGxvZmZfdCkKKyNkZWZpbmUgU05BUFNIT1RfQVZBSUxfU1dBUF9TSVpFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxOSwgX19rZXJuZWxfbG9mZl90KQorI2RlZmluZSBTTkFQU0hPVF9BTExPQ19TV0FQX1BBR0UJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDIwLCBfX2tlcm5lbF9sb2ZmX3QpCiAjZGVmaW5lIFNOQVBTSE9UX0lPQ19NQVhOUgkyMAogCiAjZW5kaWYgLyogX0xJTlVYX1NVU1BFTkRfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oCmluZGV4IDBjZDk5ZTYuLjlkNTA3OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC90Y3AuaApAQCAtMjE4LDcgKzIxOCw2IEBACiAJCXNuZF93c2NhbGUgOiA0LAkvKiBXaW5kb3cgc2NhbGluZyByZWNlaXZlZCBmcm9tIHNlbmRlcgkqLwogCQlyY3Zfd3NjYWxlIDogNDsJLyogV2luZG93IHNjYWxpbmcgdG8gc2VuZCB0byByZWNlaXZlcgkqLwogLyoJU0FDS3MgZGF0YQkqLwotCXU4CWVmZl9zYWNrczsJLyogU2l6ZSBvZiBTQUNLIGFycmF5IHRvIHNlbmQgd2l0aCBuZXh0IHBhY2tldCAqLwogCXU4CW51bV9zYWNrczsJLyogTnVtYmVyIG9mIFNBQ0sgYmxvY2tzCQkqLwogCXUxNgl1c2VyX21zczsgIAkvKiBtc3MgcmVxdWVzdGVkIGJ5IHVzZXIgaW4gaW9jdGwgKi8KIAl1MTYJbXNzX2NsYW1wOwkvKiBNYXhpbWFsIG1zcywgbmVnb3RpYXRlZCBhdCBjb25uZWN0aW9uIHNldHVwICovCkBAIC0yNDksNyArMjQ4LDcgQEAKIAkvKiBpbmV0X2Nvbm5lY3Rpb25fc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciBvZiB0Y3Bfc29jayAqLwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jawlpbmV0X2Nvbm47CiAJdTE2CXRjcF9oZWFkZXJfbGVuOwkvKiBCeXRlcyBvZiB0Y3AgaGVhZGVyIHRvIHNlbmQJCSovCi0JdTE2CXhtaXRfc2l6ZV9nb2FsOwkvKiBHb2FsIGZvciBzZWdtZW50aW5nIG91dHB1dCBwYWNrZXRzCSovCisJdTE2CXhtaXRfc2l6ZV9nb2FsX3NlZ3M7IC8qIEdvYWwgZm9yIHNlZ21lbnRpbmcgb3V0cHV0IHBhY2tldHMgKi8KIAogLyoKICAqCUhlYWRlciBwcmVkaWN0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IGZiYmQyYTEuLjI0MmY2MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0xMiwxNCArMTIsMTQgQEAKICNpZm5kZWYgX1NUUlVDVF9USU1FU1BFQwogI2RlZmluZSBfU1RSVUNUX1RJTUVTUEVDCiBzdHJ1Y3QgdGltZXNwZWMgewotCXRpbWVfdAl0dl9zZWM7CQkvKiBzZWNvbmRzICovCi0JbG9uZwl0dl9uc2VjOwkvKiBuYW5vc2Vjb25kcyAqLworCV9fa2VybmVsX3RpbWVfdAl0dl9zZWM7CQkJLyogc2Vjb25kcyAqLworCWxvbmcJCXR2X25zZWM7CQkvKiBuYW5vc2Vjb25kcyAqLwogfTsKICNlbmRpZgogCiBzdHJ1Y3QgdGltZXZhbCB7Ci0JdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCi0Jc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCisJX19rZXJuZWxfdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCisJX19rZXJuZWxfc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCiB9OwogCiBzdHJ1Y3QgdGltZXpvbmUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lci5oIGIvaW5jbHVkZS9saW51eC90aW1lci5oCmluZGV4IGRhZjk2ODUuLmUyZDY2MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKQEAgLTg2LDggKzg2LDggQEAKIAogZXh0ZXJuIHZvaWQgYWRkX3RpbWVyX29uKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgaW50IGNwdSk7CiBleHRlcm4gaW50IGRlbF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKLWV4dGVybiBpbnQgX19tb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwogZXh0ZXJuIGludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOworZXh0ZXJuIGludCBtb2RfdGltZXJfcGVuZGluZyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CiAKIC8qCiAgKiBUaGUgamlmZmllcyB2YWx1ZSB3aGljaCBpcyBhZGRlZCB0byBub3csIHdoZW4gdGhlcmUgaXMgbm8gdGltZXIKQEAgLTE0NiwyNSArMTQ2LDcgQEAKIH0KICNlbmRpZgogCi0vKioKLSAqIGFkZF90aW1lciAtIHN0YXJ0IGEgdGltZXIKLSAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCi0gKgotICogVGhlIGtlcm5lbCB3aWxsIGRvIGEgLT5mdW5jdGlvbigtPmRhdGEpIGNhbGxiYWNrIGZyb20gdGhlCi0gKiB0aW1lciBpbnRlcnJ1cHQgYXQgdGhlIC0+ZXhwaXJlcyBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUKLSAqIGN1cnJlbnQgdGltZSBpcyAnamlmZmllcycuCi0gKgotICogVGhlIHRpbWVyJ3MgLT5leHBpcmVzLCAtPmZ1bmN0aW9uIChhbmQgaWYgdGhlIGhhbmRsZXIgdXNlcyBpdCwgLT5kYXRhKQotICogZmllbGRzIG11c3QgYmUgc2V0IHByaW9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBUaW1lcnMgd2l0aCBhbiAtPmV4cGlyZXMgZmllbGQgaW4gdGhlIHBhc3Qgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dAotICogdGltZXIgdGljay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCi17Ci0JQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpKTsKLQlfX21vZF90aW1lcih0aW1lciwgdGltZXItPmV4cGlyZXMpOwotfQorZXh0ZXJuIHZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAgIGV4dGVybiBpbnQgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyZmQuaCBiL2luY2x1ZGUvbGludXgvdGltZXJmZC5oCmluZGV4IDg2Y2IwNTAuLjJkMDc5MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXJmZC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJmZC5oCkBAIC0xMSwxMyArMTEsMjEgQEAKIC8qIEZvciBPX0NMT0VYRUMgYW5kIE9fTk9OQkxPQ0sgKi8KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogCi0vKiBGbGFncyBmb3IgdGltZXJmZF9zZXR0aW1lLiAgKi8KKy8qCisgKiBDQVJFRlVMOiBDaGVjayBpbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmggd2hlbiBkZWZpbmluZworICogbmV3IGZsYWdzLCBzaW5jZSB0aGV5IG1pZ2h0IGNvbGxpZGUgd2l0aCBPXyogb25lcy4gV2Ugd2FudAorICogdG8gcmUtdXNlIE9fKiBmbGFncyB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGhhdmUgYSBtZWFuaW5nCisgKiBmcm9tIGV2ZW50ZmQsIGluIG9yZGVyIHRvIGxlYXZlIGEgZnJlZSBkZWZpbmUtc3BhY2UgZm9yCisgKiBzaGFyZWQgT18qIGZsYWdzLgorICovCiAjZGVmaW5lIFRGRF9USU1FUl9BQlNUSU1FICgxIDw8IDApCi0KLS8qIEZsYWdzIGZvciB0aW1lcmZkX2NyZWF0ZS4gICovCiAjZGVmaW5lIFRGRF9DTE9FWEVDIE9fQ0xPRVhFQwogI2RlZmluZSBURkRfTk9OQkxPQ0sgT19OT05CTE9DSwogCisjZGVmaW5lIFRGRF9TSEFSRURfRkNOVExfRkxBR1MgKFRGRF9DTE9FWEVDIHwgVEZEX05PTkJMT0NLKQorLyogRmxhZ3MgZm9yIHRpbWVyZmRfY3JlYXRlLiAgKi8KKyNkZWZpbmUgVEZEX0NSRUFURV9GTEFHUyBURkRfU0hBUkVEX0ZDTlRMX0ZMQUdTCisvKiBGbGFncyBmb3IgdGltZXJmZF9zZXR0aW1lLiAgKi8KKyNkZWZpbmUgVEZEX1NFVFRJTUVfRkxBR1MgVEZEX1RJTUVSX0FCU1RJTUUKIAogI2VuZGlmIC8qIF9MSU5VWF9USU1FUkZEX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oIGIvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjUzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworc3RydWN0IHRpbWVyaW9tZW1fcm5nX2RhdGEgeworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJdW5zaWduZWQgaW50CQlwcmVzZW50OjE7CisKKwl1MzIgX19pb21lbQkJKmFkZHJlc3M7CisKKwkvKiBtZWFzdXJlcyBpbiB1c2VjcyAqLworCXVuc2lnbmVkIGludAkJcGVyaW9kOworfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXMuaCBiL2luY2x1ZGUvbGludXgvdGltZXMuaAppbmRleCBlMmQzMDIwLi44N2I2MjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcy5oCkBAIC00LDEwICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHRtcyB7Ci0JY2xvY2tfdCB0bXNfdXRpbWU7Ci0JY2xvY2tfdCB0bXNfc3RpbWU7Ci0JY2xvY2tfdCB0bXNfY3V0aW1lOwotCWNsb2NrX3QgdG1zX2NzdGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc191dGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19zdGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19jdXRpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfY3N0aW1lOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggOTk4YTU1ZC4uYWEzNDc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtMTkwLDcgKzE5MCw3IEBACiAgKiBvZmZzZXQgYW5kIG1heGltdW0gZnJlcXVlbmN5IHRvbGVyYW5jZS4KICAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KLSNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKKyNkZWZpbmUgUFBNX1NDQUxFICgoczY0KU5TRUNfUEVSX1VTRUMgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX1VTRUMpKQogI2RlZmluZSBQUE1fU0NBTEVfSU5WX1NISUZUIDE5CiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlYgKCgxbGwgPDwgKFBQTV9TQ0FMRV9JTlZfU0hJRlQgKyBOVFBfU0NBTEVfU0hJRlQpKSAvIFwKIAkJICAgICAgIFBQTV9TQ0FMRSArIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RwbS5oIGIvaW5jbHVkZS9saW51eC90cG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM4YjNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90cG0uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogTGVlbmRlcnQgdmFuIERvb3JuIDxsZWVuZGVydEB3YXRzb24uaWJtLmNvbT4KKyAqIERhdmUgU2FmZm9yZCA8c2FmZm9yZEB3YXRzb24uaWJtLmNvbT4KKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIEt5bGVuZSBIYWxsIDxramhhbGxAdXMuaWJtLmNvbT4KKyAqIERlYm9yYSBWZWxhcmRlIDxkdmVsYXJkZUB1cy5pYm0uY29tPgorICoKKyAqIE1haW50YWluZWQgYnk6IDx0cG1kZF9kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogRGV2aWNlIGRyaXZlciBmb3IgVENHL1RDUEEgVFBNICh0cnVzdGVkIHBsYXRmb3JtIG1vZHVsZSkuCisgKiBTcGVjaWZpY2F0aW9ucyBhdCB3d3cudHJ1c3RlZGNvbXB1dGluZ2dyb3VwLm9yZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9UUE1fSF9fCisjZGVmaW5lIF9fTElOVVhfVFBNX0hfXworCisvKgorICogQ2hpcCBudW0gaXMgdGhpcyB2YWx1ZSBvciBhIHZhbGlkIHRwbSBpZHgKKyAqLworI2RlZmluZQlUUE1fQU5ZX05VTSAweEZGRkYKKworI2lmIGRlZmluZWQoQ09ORklHX1RDR19UUE0pCisKK2V4dGVybiBpbnQgdHBtX3Bjcl9yZWFkKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKTsKK2V4dGVybiBpbnQgdHBtX3Bjcl9leHRlbmQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgY29uc3QgdTggKmhhc2gpOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCA3MTJjYTUzLi41YWJlMzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0xLDYgKzEsOSBAQAogI2lmbmRlZiBfTElOVVhfVFlQRVNfSAogI2RlZmluZSBfTElOVVhfVFlQRVNfSAogCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaWZkZWYJX19LRVJORUxfXwogCiAjZGVmaW5lIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgXApAQCAtOSw5ICsxMiw4IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCisjaWZkZWYgX19LRVJORUxfXwogCiB0eXBlZGVmIF9fdTMyIF9fa2VybmVsX2Rldl90OwogCkBAIC0yOSw3ICszMSw2IEBACiB0eXBlZGVmIF9fa2VybmVsX2Nsb2NraWRfdAljbG9ja2lkX3Q7CiB0eXBlZGVmIF9fa2VybmVsX21xZF90CQltcWRfdDsKIAotI2lmZGVmIF9fS0VSTkVMX18KIHR5cGVkZWYgX0Jvb2wJCQlib29sOwogCiB0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QJdWlkX3Q7CkBAIC00NSwxNCArNDYsNiBAQAogdHlwZWRlZiBfX2tlcm5lbF9vbGRfZ2lkX3QJb2xkX2dpZF90OwogI2VuZGlmIC8qIENPTkZJR19VSUQxNiAqLwogCi0vKiBsaWJjNSBpbmNsdWRlcyB0aGlzIGZpbGUgdG8gZGVmaW5lIHVpZF90LCB0aHVzIHVpZF90IGNhbiBuZXZlciBjaGFuZ2UKLSAqIHdoZW4gaXQgaXMgaW5jbHVkZWQgYnkgbm9uLWtlcm5lbCBjb2RlCi0gKi8KLSNlbHNlCi10eXBlZGVmIF9fa2VybmVsX3VpZF90CQl1aWRfdDsKLXR5cGVkZWYgX19rZXJuZWxfZ2lkX3QJCWdpZF90OwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2lmIGRlZmluZWQoX19HTlVDX18pCiB0eXBlZGVmIF9fa2VybmVsX2xvZmZfdAkJbG9mZl90OwogI2VuZGlmCkBAIC0xNTQsNyArMTQ3LDcgQEAKICNkZWZpbmUgcGdvZmZfdCB1bnNpZ25lZCBsb25nCiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fS0VSTkVMX1NUUklDVF9OQU1FUyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyoKICAqIEJlbG93IGFyZSB0cnVseSBMaW51eC1zcGVjaWZpYyB0eXBlcyB0aGF0IHNob3VsZCBuZXZlciBjb2xsaWRlIHdpdGgKQEAgLTIxMiw1ICsyMDUsNSBAQAogfTsKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KLQorI2VuZGlmIC8qICBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfTElOVVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaAppbmRleCBhMGJiNmJkLi41ZGNjOWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaApAQCAtMjIsNiArMjIsNyBAQAogCiAvKioKICAqIHN0cnVjdCB1aW9fbWVtIC0gZGVzY3JpcHRpb24gb2YgYSBVSU8gbWVtb3J5IHJlZ2lvbgorICogQG5hbWU6CQluYW1lIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGZvciBpZGVudGlmaWNhdGlvbgogICogQGFkZHI6CQlhZGRyZXNzIG9mIHRoZSBkZXZpY2UncyBtZW1vcnkKICAqIEBzaXplOgkJc2l6ZSBvZiBJTwogICogQG1lbXR5cGU6CQl0eXBlIG9mIG1lbW9yeSBhZGRyIHBvaW50cyB0bwpAQCAtMjksNiArMzAsNyBAQAogICogQG1hcDoJCWZvciB1c2UgYnkgdGhlIFVJTyBjb3JlIG9ubHkuCiAgKi8KIHN0cnVjdCB1aW9fbWVtIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKIAl1bnNpZ25lZCBsb25nCQlhZGRyOwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CiAJaW50CQkJbWVtdHlwZTsKQEAgLTQyLDEyICs0NCwxNCBAQAogCiAvKioKICAqIHN0cnVjdCB1aW9fcG9ydCAtIGRlc2NyaXB0aW9uIG9mIGEgVUlPIHBvcnQgcmVnaW9uCisgKiBAbmFtZToJCW5hbWUgb2YgdGhlIHBvcnQgcmVnaW9uIGZvciBpZGVudGlmaWNhdGlvbgogICogQHN0YXJ0OgkJc3RhcnQgb2YgcG9ydCByZWdpb24KICAqIEBzaXplOgkJc2l6ZSBvZiBwb3J0IHJlZ2lvbgogICogQHBvcnR0eXBlOgkJdHlwZSBvZiBwb3J0IChzZWUgVUlPX1BPUlRfKiBiZWxvdykKICAqIEBwb3J0aW86CQlmb3IgdXNlIGJ5IHRoZSBVSU8gY29yZSBvbmx5LgogICovCiBzdHJ1Y3QgdWlvX3BvcnQgeworCWNvbnN0IGNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CiAJaW50CQkJcG9ydHR5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA4ODA3OWZkLi5jNmIyYWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTY0MywxODYgKzY0Myw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qKgotICogdXNiX2VuZHBvaW50X251bSAtIGdldCB0aGUgZW5kcG9pbnQncyBudW1iZXIKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIEBlcGQncyBudW1iZXI6IDAgdG8gMTUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9udW0oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfdHlwZSAtIGdldCB0aGUgZW5kcG9pbnQncyB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyBvbmUgb2YgVVNCX0VORFBPSU5UX1hGRVJfe0NPTlRST0wsIElTT0MsIEJVTEssIElOVH0gYWNjb3JkaW5nCi0gKiB0byBAZXBkJ3MgdHJhbnNmZXIgdHlwZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3R5cGUoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2Rpcl9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgSU4gZGlyZWN0aW9uCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIElOLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9kaXJfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBPVVQgZGlyZWN0aW9uCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIE9VVCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBidWxrLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfYnVsaygKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBjb250cm9sIHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgY29udHJvbCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfaW50IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpbnRlcnJ1cHQsIG90aGVyd2lzZSBpdCByZXR1cm5zCi0gKiBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfaXNvYyAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpc29jaHJvbm91cywgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAqIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19idWxrX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbigKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19idWxrX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2ludF9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pbnRfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBPVVQKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pc29jX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIElOCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX2luKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIFwKIAkJKFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKQogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9SQU5HRSBcCkBAIC0xMzU3LDggKzExNzcsOCBAQAogCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9mbGFnczsJLyogKGluKSBVUkJfU0hPUlRfTk9UX09LIHwgLi4uKi8KIAl2b2lkICp0cmFuc2Zlcl9idWZmZXI7CQkvKiAoaW4pIGFzc29jaWF0ZWQgZGF0YSBidWZmZXIgKi8KIAlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYTsJLyogKGluKSBkbWEgYWRkciBmb3IgdHJhbnNmZXJfYnVmZmVyICovCi0JaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CS8qIChpbikgZGF0YSBidWZmZXIgbGVuZ3RoICovCi0JaW50IGFjdHVhbF9sZW5ndGg7CQkvKiAocmV0dXJuKSBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoICovCisJdTMyIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CS8qIChpbikgZGF0YSBidWZmZXIgbGVuZ3RoICovCisJdTMyIGFjdHVhbF9sZW5ndGg7CQkvKiAocmV0dXJuKSBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoICovCiAJdW5zaWduZWQgY2hhciAqc2V0dXBfcGFja2V0OwkvKiAoaW4pIHNldHVwIHBhY2tldCAoY29udHJvbCBvbmx5KSAqLwogCWRtYV9hZGRyX3Qgc2V0dXBfZG1hOwkJLyogKGluKSBkbWEgYWRkciBmb3Igc2V0dXBfcGFja2V0ICovCiAJaW50IHN0YXJ0X2ZyYW1lOwkJLyogKG1vZGlmeSkgc3RhcnQgZnJhbWUgKElTTykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKaW5kZXggOWI0MmJhZS4uYjE0NTExOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKQEAgLTEwMiw3ICsxMDIsNyBAQAogI2RlZmluZSBVU0JfUkVRX0xPT1BCQUNLX0RBVEFfUkVBRAkweDE2CiAjZGVmaW5lIFVTQl9SRVFfU0VUX0lOVEVSRkFDRV9EUwkweDE3CiAKLS8qIFRoZSBMaW5rIFBvd2VyIE1hbmdlbWVudCAoTFBNKSBFQ04gZGVmaW5lcyBVU0JfUkVRX1RFU1RfQU5EX1NFVCBjb21tYW5kLAorLyogVGhlIExpbmsgUG93ZXIgTWFuYWdlbWVudCAoTFBNKSBFQ04gZGVmaW5lcyBVU0JfUkVRX1RFU1RfQU5EX1NFVCBjb21tYW5kLAogICogdXNlZCBieSBodWJzIHRvIHB1dCBwb3J0cyBpbnRvIGEgbmV3IEwxIHN1c3BlbmQgc3RhdGUsIGV4Y2VwdCB0aGF0IGl0CiAgKiBmb3Jnb3QgdG8gZGVmaW5lIGl0cyBudW1iZXIgLi4uCiAgKi8KQEAgLTM1Myw2ICszNTMsMTg1IEBACiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lOVAkJMwogI2RlZmluZSBVU0JfRU5EUE9JTlRfTUFYX0FESlVTVEFCTEUJMHg4MAogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9lbmRwb2ludF9udW0gLSBnZXQgdGhlIGVuZHBvaW50J3MgbnVtYmVyCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyBAZXBkJ3MgbnVtYmVyOiAwIHRvIDE1LgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfbnVtKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiBlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3R5cGUgLSBnZXQgdGhlIGVuZHBvaW50J3MgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgb25lIG9mIFVTQl9FTkRQT0lOVF9YRkVSX3tDT05UUk9MLCBJU09DLCBCVUxLLCBJTlR9IGFjY29yZGluZworICogdG8gQGVwZCdzIHRyYW5zZmVyIHR5cGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF90eXBlKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiBlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIElOIGRpcmVjdGlvbgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBJTiwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX0lOKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfZGlyX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgT1VUIGRpcmVjdGlvbgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBPVVQsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9idWxrIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgYnVsaywgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSyk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgY29udHJvbCB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGNvbnRyb2wsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2ludCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaW50ZXJydXB0LCBvdGhlcndpc2UgaXQgcmV0dXJucworICogZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2ludCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2lzb2MgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaXNvY2hyb25vdXMsIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaXNvYygKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pbnRfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X2luKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbigKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pc29jX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTg0LDggKzc2Myw4IEBACiAJLyogY2hhcHRlciA5IGFuZCBhdXRoZW50aWNhdGlvbiAod2lyZWxlc3MpIGRldmljZSBzdGF0ZXMgKi8KIAlVU0JfU1RBVEVfQVRUQUNIRUQsCiAJVVNCX1NUQVRFX1BPV0VSRUQsCQkJLyogd2lyZWQgKi8KLQlVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVELAkJLyogYXV0aCAqLwogCVVTQl9TVEFURV9SRUNPTk5FQ1RJTkcsCQkJLyogYXV0aCAqLworCVVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQsCQkvKiBhdXRoICovCiAJVVNCX1NUQVRFX0RFRkFVTFQsCQkJLyogbGltaXRlZCBmdW5jdGlvbiAqLwogCVVTQl9TVEFURV9BRERSRVNTLAogCVVTQl9TVEFURV9DT05GSUdVUkVELAkJCS8qIG1vc3QgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCmluZGV4IDkzNWMzODAuLmFjZDdiMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCkBAIC0yNDQsNiArMjQ0LDEwIEBACiAgKgl2YWx1ZTsgaXQgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCiAgKiBAdW5iaW5kOiBSZXZlcnNlcyBAYmluZCgpOyBjYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1bnJlZ2lzdGVyaW5nCiAgKgl0aGlzIGRyaXZlci4KKyAqIEBzdXNwZW5kOiBOb3RpZmllcyB3aGVuIHRoZSBob3N0IHN0b3BzIHNlbmRpbmcgVVNCIHRyYWZmaWMsCisgKglhZnRlciBmdW5jdGlvbiBub3RpZmljYXRpb25zCisgKiBAcmVzdW1lOiBOb3RpZmllcyBjb25maWd1cmF0aW9uIHdoZW4gdGhlIGhvc3QgcmVzdGFydHMgVVNCIHRyYWZmaWMsCisgKgliZWZvcmUgZnVuY3Rpb24gbm90aWZpY2F0aW9ucwogICoKICAqIERldmljZXMgZGVmYXVsdCB0byByZXBvcnRpbmcgc2VsZiBwb3dlcmVkIG9wZXJhdGlvbi4gIERldmljZXMgd2hpY2ggcmVseQogICogb24gYnVzIHBvd2VyZWQgb3BlcmF0aW9uIHNob3VsZCByZXBvcnQgdGhpcyBpbiB0aGVpciBAYmluZCgpIG1ldGhvZC4KQEAgLTI2OCw2ICsyNzIsMTAgQEAKIAogCWludAkJCSgqYmluZCkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOwogCWludAkJCSgqdW5iaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CisKKwkvKiBnbG9iYWwgc3VzcGVuZCBob29rcyAqLworCXZvaWQJCQkoKnN1c3BlbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKKwl2b2lkCQkJKCpyZXN1bWUpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKIH07CiAKIGV4dGVybiBpbnQgdXNiX2NvbXBvc2l0ZV9yZWdpc3RlcihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCmluZGV4IDA0NjBhNzQuLmJiZjQ1ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCkBAIC01OTgsNiArNTk4LDcgQEAKIC8qKgogICogdXNiX2dhZGdldF92YnVzX2Nvbm5lY3QgLSBOb3RpZnkgY29udHJvbGxlciB0aGF0IFZCVVMgaXMgcG93ZXJlZAogICogQGdhZGdldDpUaGUgZGV2aWNlIHdoaWNoIG5vdyBoYXMgVkJVUyBwb3dlci4KKyAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIFRoaXMgY2FsbCBpcyB1c2VkIGJ5IGEgZHJpdmVyIGZvciBhbiBleHRlcm5hbCB0cmFuc2NlaXZlciAob3IgR1BJTykKICAqIHRoYXQgZGV0ZWN0cyBhIFZCVVMgcG93ZXIgc2Vzc2lvbiBzdGFydGluZy4gIENvbW1vbiByZXNwb25zZXMgaW5jbHVkZQpAQCAtNjM2LDYgKzYzNyw3IEBACiAvKioKICAqIHVzYl9nYWRnZXRfdmJ1c19kaXNjb25uZWN0IC0gbm90aWZ5IGNvbnRyb2xsZXIgYWJvdXQgVkJVUyBzZXNzaW9uIGVuZAogICogQGdhZGdldDp0aGUgZGV2aWNlIHdob3NlIFZCVVMgc3VwcGx5IGlzIGJlaW5nIGRlc2NyaWJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgYnkgYSBkcml2ZXIgZm9yIGFuIGV4dGVybmFsIHRyYW5zY2VpdmVyIChvciBHUElPKQogICogdGhhdCBkZXRlY3RzIGEgVkJVUyBwb3dlciBzZXNzaW9uIGVuZGluZy4gIENvbW1vbiByZXNwb25zZXMgaW5jbHVkZQpAQCAtNzkyLDE5ICs3OTQsMjAgQEAKIC8qKgogICogdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIGdhZGdldCBkcml2ZXIKICAqIEBkcml2ZXI6dGhlIGRyaXZlciBiZWluZyByZWdpc3RlcmVkCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBDYWxsIHRoaXMgaW4geW91ciBnYWRnZXQgZHJpdmVyJ3MgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLAogICogdG8gdGVsbCB0aGUgdW5kZXJseWluZyB1c2IgY29udHJvbGxlciBkcml2ZXIgYWJvdXQgeW91ciBkcml2ZXIuCiAgKiBUaGUgZHJpdmVyJ3MgYmluZCgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGJpbmQgaXQgdG8gYQogICogZ2FkZ2V0IGJlZm9yZSB0aGlzIHJlZ2lzdHJhdGlvbiBjYWxsIHJldHVybnMuICBJdCdzIGV4cGVjdGVkIHRoYXQKICAqIHRoZSBiaW5kKCkgZnVuY3Rpb25zIHdpbGwgYmUgaW4gaW5pdCBzZWN0aW9ucy4KLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOwogCiAvKioKICAqIHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgLSB1bnJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgogICogQGRyaXZlcjp0aGUgZHJpdmVyIGJlaW5nIHVucmVnaXN0ZXJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogQ2FsbCB0aGlzIGluIHlvdXIgZ2FkZ2V0IGRyaXZlcidzIG1vZHVsZSBjbGVhbnVwIGZ1bmN0aW9uLAogICogdG8gdGVsbCB0aGUgdW5kZXJseWluZyB1c2IgY29udHJvbGxlciB0aGF0IHlvdXIgZHJpdmVyIGlzCkBAIC04MTMsNyArODE2LDYgQEAKICAqIHRvIHVuYmluZCgpIGFuZCBjbGVhbiB1cCBhbnkgZGV2aWNlIHN0YXRlLCBiZWZvcmUgdGhpcyBwcm9jZWR1cmUKICAqIGZpbmFsbHkgcmV0dXJucy4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgdW5iaW5kKCkgZnVuY3Rpb25zCiAgKiB3aWxsIGluIGluIGV4aXQgc2VjdGlvbnMsIHNvIG1heSBub3QgYmUgbGlua2VkIGluIHNvbWUga2VybmVscy4KLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL290Zy5oIGIvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKaW5kZXggOTRkZjRmZS4uMWFhYTgyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKQEAgLTgwLDEyICs4MCwxNyBAQAogCiAvKiBmb3IgYm9hcmQtc3BlY2lmaWMgaW5pdCBsb2dpYyAqLwogZXh0ZXJuIGludCBvdGdfc2V0X3RyYW5zY2VpdmVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKik7CisjaWZkZWYgQ09ORklHX05PUF9VU0JfWENFSVYKK2V4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCB1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIodm9pZCk7CisjZW5kaWYKIAogCiAvKiBmb3IgdXNiIGhvc3QgYW5kIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzICovCiBleHRlcm4gc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnX2dldF90cmFuc2NlaXZlcih2b2lkKTsKIGV4dGVybiB2b2lkIG90Z19wdXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKIAorLyogQ29udGV4dDogY2FuIHNsZWVwICovCiBzdGF0aWMgaW5saW5lIGludAogb3RnX3N0YXJ0X2hucChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcpCiB7CkBAIC0xMDIsNiArMTA3LDggQEAKIAogCiAvKiBmb3IgdXNiIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzICovCisKKy8qIENvbnRleHQ6IGNhbiBzbGVlcCAqLwogc3RhdGljIGlubGluZSBpbnQKIG90Z19zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCB1c2JfZ2FkZ2V0ICpwZXJpcGgpCiB7CkBAIC0xMTQsNiArMTIxLDcgQEAKIAlyZXR1cm4gb3RnLT5zZXRfcG93ZXIob3RnLCBtQSk7CiB9CiAKKy8qIENvbnRleHQ6IGNhbiBzbGVlcCAqLwogc3RhdGljIGlubGluZSBpbnQKIG90Z19zZXRfc3VzcGVuZChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIGludCBzdXNwZW5kKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAppbmRleCA3ZjZjNjAzLi4yNTI2ZjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaApAQCAtMTYsNCArMTYsNyBAQAogLyogZGV2aWNlIGNhbid0IGhhbmRsZSBTZXQtSW50ZXJmYWNlIHJlcXVlc3RzICovCiAjZGVmaW5lIFVTQl9RVUlSS19OT19TRVRfSU5URgkJMHgwMDAwMDAwNAogCisvKiBkZXZpY2UgY2FuJ3QgaGFuZGxlIGl0cyBDb25maWd1cmF0aW9uIG9yIEludGVyZmFjZSBzdHJpbmdzICovCisjZGVmaW5lIFVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTCTB4MDAwMDAwMDgKKwogI2VuZGlmIC8qIF9fTElOVVhfVVNCX1FVSVJLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDBiODYxN2EuLmI5NTg0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xMzAsNyArMTMwLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZQkJKmRldjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIJKnR5cGU7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJCSppbnRlcmZhY2U7Ci0JdW5zaWduZWQgY2hhcgkJCWRpc2Nvbm5lY3RlZDsKKwl1bnNpZ25lZCBjaGFyCQkJZGlzY29ubmVjdGVkOjE7CisJdW5zaWduZWQgY2hhcgkJCXN1c3BlbmRpbmc6MTsKIAl1bnNpZ25lZCBjaGFyCQkJbWlub3I7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0czsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRfcG9pbnRlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCmluZGV4IDdkMzgyMjIuLjM2ZmFiYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCkBAIC0xNzYsNiArMTc2LDExIEBACiAJc2l6ZV90CQkJbGVuZ3RoOwogfTsKIAorZXh0ZXJuIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gaW50IHVzYm5ldF9zdG9wIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiBpbnQgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpOwogCiBleHRlcm4gaW50IHVzYm5ldF9nZXRfZW5kcG9pbnRzKHN0cnVjdCB1c2JuZXQgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CiBleHRlcm4gdm9pZCB1c2JuZXRfZGVmZXJfa2V2ZW50IChzdHJ1Y3QgdXNibmV0ICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAppbmRleCAxZWVhMWFiLi4zZDE1ZmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKQEAgLTk2LDM5ICs5NiwyNiBAQAogI2RlZmluZSBVU19QUl9DQkkJMHgwMAkJLyogQ29udHJvbC9CdWxrL0ludGVycnVwdCAqLwogI2RlZmluZSBVU19QUl9DQgkweDAxCQkvKiBDb250cm9sL0J1bGsgdy9vIGludGVycnVwdCAqLwogI2RlZmluZSBVU19QUl9CVUxLCTB4NTAJCS8qIGJ1bGsgb25seSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAorCiAjZGVmaW5lIFVTX1BSX1VTQkFUCTB4ODAJCS8qIFNDTS1BVEFQSSBicmlkZ2UgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKICNkZWZpbmUgVVNfUFJfRVVTQl9TRERSMDkJMHg4MQkvKiBTQ00tU0NTSSBicmlkZ2UgZm9yIFNERFItMDkgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKICNkZWZpbmUgVVNfUFJfU0REUjU1CTB4ODIJCS8qIFNERFItNTUgKG1hZGUgdXApICovCi0jZW5kaWYKICNkZWZpbmUgVVNfUFJfRFBDTV9VU0IgIDB4ZjAJCS8qIENvbWJpbmF0aW9uIENCL1NERFIwOSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCiAjZGVmaW5lIFVTX1BSX0ZSRUVDT00gICAweGYxCQkvKiBGcmVlY29tICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgogI2RlZmluZSBVU19QUl9EQVRBRkFCICAgMHhmMgkJLyogRGF0YWZhYiBjaGlwc2V0cyAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCiAjZGVmaW5lIFVTX1BSX0pVTVBTSE9UICAweGYzCQkvKiBMZXhhciBKdW1wc2hvdCAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQogI2RlZmluZSBVU19QUl9BTEFVREEgICAgMHhmNAkJLyogQWxhdWRhIGNoaXBzZXRzICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKICNkZWZpbmUgVVNfUFJfS0FSTUEgICAgIDB4ZjUJCS8qIFJpbyBLYXJtYSAqLwotI2VuZGlmCiAKICNkZWZpbmUgVVNfUFJfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLwogCiAvKgogICovCitleHRlcm4gaW50IHVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK2V4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW107CisKICNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCiAKLWV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHNbXTsKIGV4dGVybiB2b2lkIHVzYl91c3VhbF9zZXRfcHJlc2VudChpbnQgdHlwZSk7CiBleHRlcm4gdm9pZCB1c2JfdXN1YWxfY2xlYXJfcHJlc2VudChpbnQgdHlwZSk7CiBleHRlcm4gaW50IHVzYl91c3VhbF9jaGVja190eXBlKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICosIGludCB0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaAppbmRleCAzMTViY2QzLi5jYzRmNDUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oCkBAIC0xMyw2ICsxMyw3IEBACiAJc3RydWN0IGtyZWYJCWtyZWY7CiAJc3RydWN0IGhsaXN0X2hlYWQJdWlkaGFzaF90YWJsZVtVSURIQVNIX1NaXTsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QJKmNyZWF0b3I7CisJc3RydWN0IHdvcmtfc3RydWN0CWRlc3Ryb3llcjsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91dGltZS5oIGIvaW5jbHVkZS9saW51eC91dGltZS5oCmluZGV4IDY0MGJlNmEuLjVjZGY2NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXRpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKQEAgLTQsOCArNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHV0aW1idWYgewotCXRpbWVfdCBhY3RpbWU7Ci0JdGltZV90IG1vZHRpbWU7CisJX19rZXJuZWxfdGltZV90IGFjdGltZTsKKwlfX2tlcm5lbF90aW1lX3QgbW9kdGltZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAppbmRleCA1MDZlNzYyLi45YzA4OTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaApAQCAtODQsNiArODQsMTAgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKTsKIGV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJCXZvaWQgKmNhbGxlcik7CiBleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IG5vZGUsCiAJCQkJCSAgZ2ZwX3QgZ2ZwX21hc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oCmluZGV4IGJhMGM0OTMuLmM3MDNlMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2ltYXgvZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlXQVJOX09OKDEpOwogCX0gZWxzZQogCQlzbnByaW50ZihoZWFkLCBoZWFkX3NpemUsICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXYtPmJ1c19pZCk7CisJCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaCBiL2luY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKaW5kZXggNzQxOThmNS4uZDUxNDhhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCkBAIC0yMDcsNiArMjA3LDcgQEAKIAlJMjQwME1fUFRfVFJBQ0UsCS8qIEZvciBkZXZpY2UgZGVidWcgKi8KIAlJMjQwME1fUFRfUkVTRVRfV0FSTSwJLyogZGV2aWNlIHJlc2V0ICovCiAJSTI0MDBNX1BUX1JFU0VUX0NPTEQsCS8qIFVTQlt0cmFuc3BvcnRdIHJlc2V0LCBsaWtlIHJlY29ubmVjdCAqLworCUkyNDAwTV9QVF9FREFUQSwJLyogRXh0ZW5kZWQgUlggZGF0YSAqLwogCUkyNDAwTV9QVF9JTExFR0FMCiB9OwogCkBAIC0yMjEsNiArMjIyLDQ4IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAKKy8qCisgKiBQYXlsb2FkIGZvciBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIE5ldyBpbiBmdyB2MS40CisgKgorICogQHJlb3JkZXI6IGlmIHRoaXMgcGF5bG9hZCBoYXMgdG8gYmUgcmVvcmRlciBvciBub3QgKGFuZCBob3cpCisgKiBAY3M6IHRoZSB0eXBlIG9mIGRhdGEgaW4gdGhlIHBhY2tldCwgYXMgZGVmaW5lZCBwZXIgKDgwMi4xNmUKKyAqICAgICBUMTEuMTMuMTkuMSkuIEN1cnJlbnRseSBvbmx5IDIgKElQdjQgcGFja2V0KSBzdXBwb3J0ZWQuCisgKgorICogVGhpcyBpcyBwcmVmaXhlZCB0byBlYWNoIGFuZCBldmVyeSBJTkNPTUlORyBEQVRBIHBhY2tldC4KKyAqLworc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIgeworCV9fbGUzMiByZW9yZGVyOwkJLyogYml0cyBkZWZpbmVkIGluIGkyNDAwbV9ybyAqLworCV9fdTggY3M7CisJX191OCByZXNlcnZlZFsxMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIGkyNDAwbV9jcyB7CisJSTI0MDBNX0NTX0lQVjRfMCA9IDAsCisJSTI0MDBNX0NTX0lQVjQgPSAyLAorfTsKKworZW51bSBpMjQwMG1fcm8geworCUkyNDAwTV9ST19ORUVERUQgICAgID0gMHgwMSwKKwlJMjQwME1fUk9fVFlQRSAgICAgICA9IDB4MDMsCisJSTI0MDBNX1JPX1RZUEVfU0hJRlQgPSAxLAorCUkyNDAwTV9ST19DSU4gICAgICAgID0gMHgwZiwKKwlJMjQwME1fUk9fQ0lOX1NISUZUICA9IDQsCisJSTI0MDBNX1JPX0ZCTiAgICAgICAgPSAweDA3ZmYsCisJSTI0MDBNX1JPX0ZCTl9TSElGVCAgPSA4LAorCUkyNDAwTV9ST19TTiAgICAgICAgID0gMHgwN2ZmLAorCUkyNDAwTV9ST19TTl9TSElGVCAgID0gMjEsCit9OworCitlbnVtIGkyNDAwbV9yb190eXBlIHsKKwlJMjQwME1fUk9fVFlQRV9SRVNFVCA9IDAsCisJSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCUkyNDAwTV9ST19UWVBFX1dTLAorCUkyNDAwTV9ST19UWVBFX1BBQ0tFVF9XUywKK307CisKKwogLyogTWlzYyBjb25zdGFudHMgKi8KIGVudW0gewogCUkyNDAwTV9QTF9QQUQgPSAxNiwJLyogUGF5bG9hZCBkYXRhIHNpemUgYWxpZ25tZW50ICovCkBAIC0zODEsNiArNDI0LDkgQEAKIAlJMjQwME1fVExWX1JGX1NUQVRVUyA9IDE2MywKIAlJMjQwME1fVExWX0RFVklDRV9SRVNFVF9UWVBFID0gMTMyLAogCUkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyA9IDYwMSwKKwlJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQgPSA2MTEsCisJSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUID0gNjE0LAorCUkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUiA9IDYxNSwKIH07CiAKIApAQCAtNTA5LDQgKzU1NSwyNyBAQAogCV9fbGUzMiBtZWRpYV9zdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisKKy8qIE5ldyBpbiB2MS40ICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fbGUzMiB0aW1lb3V0OwkvKiAxMDAgdG8gMzAwMDAwIG1zIFs1bWluXSwgMTAwIGluY3JlbWVudHMKKwkJCSAqIDAgZGlzYWJsZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE5ldyBpbiB2MS40IC0tIGZvciBiYWNrd2FyZCBjb21wYXQsIHdpbGwgYmUgcmVtb3ZlZCAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2QyaF9kYXRhX2Zvcm1hdCB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX3U4IGZvcm1hdDsgCQkvKiAwIG9sZCBmb3JtYXQsIDEgZW5oYW5jZWQgKi8KKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTmV3IGluIHYxLjQgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kbF9ob3N0X3Jlb3JkZXIgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX191OCByZW9yZGVyOyAJCS8qIDAgZGlzYWJsZWQsIDEgZW5hYmxlZCAqLworCV9fdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKICNlbmRpZiAvKiAjaWZuZGVmIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IDUyZjNhYmQuLjJkNGVjMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC01OCw3ICs1OCw3IEBACiAJX191OAlwcmVmaXhsZW5fczsKIAlfX3U4CXByb3RvOwogCWludAlpZmluZGV4OwotCXVpZF90CXVzZXI7CisJX19rZXJuZWxfdWlkMzJfdAl1c2VyOwogfTsKIAogI2RlZmluZSBYRlJNX0lORiAofihfX3U2NCkwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oIGIvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oCmluZGV4IGQ0MDlkNDguLjgzNzZiZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmgKQEAgLTE2LDMzICsxNiwzMyBAQAogLyogQmxvY2sgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgaW5mdGxfYmNpIHsKLQl1aW50OF90IEVDQ3NpZ1s2XTsKLQl1aW50OF90IFN0YXR1czsKLQl1aW50OF90IFN0YXR1czE7CisJX191OCBFQ0NzaWdbNl07CisJX191OCBTdGF0dXM7CisJX191OCBTdGF0dXMxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGluZnRsX3VuaXRoZWFkMSB7Ci0JdWludDE2X3QgdmlydHVhbFVuaXRObzsKLQl1aW50MTZfdCBwcmV2VW5pdE5vOwotCXVpbnQ4X3QgQU5BQzsKLQl1aW50OF90IE5BQ3M7Ci0JdWludDhfdCBwYXJpdHlQZXJGaWVsZDsKLQl1aW50OF90IGRpc2NhcmRlZDsKKwlfX3UxNiB2aXJ0dWFsVW5pdE5vOworCV9fdTE2IHByZXZVbml0Tm87CisJX191OCBBTkFDOworCV9fdTggTkFDczsKKwlfX3U4IHBhcml0eVBlckZpZWxkOworCV9fdTggZGlzY2FyZGVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGluZnRsX3VuaXRoZWFkMiB7Ci0JdWludDhfdCBwYXJpdHlQZXJGaWVsZDsKLQl1aW50OF90IEFOQUM7Ci0JdWludDE2X3QgcHJldlVuaXRObzsKLQl1aW50MTZfdCB2aXJ0dWFsVW5pdE5vOwotCXVpbnQ4X3QgTkFDczsKLQl1aW50OF90IGRpc2NhcmRlZDsKKwlfX3U4IHBhcml0eVBlckZpZWxkOworCV9fdTggQU5BQzsKKwlfX3UxNiBwcmV2VW5pdE5vOworCV9fdTE2IHZpcnR1YWxVbml0Tm87CisJX191OCBOQUNzOworCV9fdTggZGlzY2FyZGVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGluZnRsX3VuaXR0YWlsIHsKLQl1aW50OF90IFJlc2VydmVkWzRdOwotCXVpbnQxNl90IEVyYXNlTWFyazsKLQl1aW50MTZfdCBFcmFzZU1hcmsxOworCV9fdTggUmVzZXJ2ZWRbNF07CisJX191MTYgRXJhc2VNYXJrOworCV9fdTE2IEVyYXNlTWFyazE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBpbmZ0bF91Y2kgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvamZmczItdXNlci5oIGIvaW5jbHVkZS9tdGQvamZmczItdXNlci5oCmluZGV4IDAwMTY4NWQuLmZhOTRiMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmgKQEAgLTcsNiArNyw3IEBACiAKIC8qIFRoaXMgZmlsZSBpcyBibGVzc2VkIGZvciBpbmNsdXNpb24gYnkgdXNlcnNwYWNlICovCiAjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGVuZGlhbi5oPgogI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAKQEAgLTE5LDggKzIwLDggQEAKIAogZXh0ZXJuIGludCB0YXJnZXRfZW5kaWFuOwogCi0jZGVmaW5lIHQxNih4KSAoeyB1aW50MTZfdCBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8xNihfX2IpOyB9KQotI2RlZmluZSB0MzIoeCkgKHsgdWludDMyX3QgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMzIoX19iKTsgfSkKKyNkZWZpbmUgdDE2KHgpICh7IF9fdTE2IF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzE2KF9fYik7IH0pCisjZGVmaW5lIHQzMih4KSAoeyBfX3UzMiBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8zMihfX2IpOyB9KQogCiAjZGVmaW5lIGNwdV90b19qZTE2KHgpICgoamludDE2X3Qpe3QxNih4KX0pCiAjZGVmaW5lIGNwdV90b19qZTMyKHgpICgoamludDMyX3Qpe3QzMih4KX0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9tdGQtYWJpLmggYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgKaW5kZXggYzZjNjFjZC4uYjY1OTViMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCisrKyBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaApAQCAtNSwxNCArNSwxNiBAQAogI2lmbmRlZiBfX01URF9BQklfSF9fCiAjZGVmaW5lIF9fTVREX0FCSV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIgewotCXVpbnQzMl90IHN0YXJ0OwotCXVpbnQzMl90IGxlbmd0aDsKKwlfX3UzMiBzdGFydDsKKwlfX3UzMiBsZW5ndGg7CiB9OwogCiBzdHJ1Y3QgbXRkX29vYl9idWYgewotCXVpbnQzMl90IHN0YXJ0OwotCXVpbnQzMl90IGxlbmd0aDsKKwlfX3UzMiBzdGFydDsKKwlfX3UzMiBsZW5ndGg7CiAJdW5zaWduZWQgY2hhciBfX3VzZXIgKnB0cjsKIH07CiAKQEAgLTQ4LDMwICs1MCwzMCBAQAogI2RlZmluZSBNVERfT1RQX1VTRVIJCTIKIAogc3RydWN0IG10ZF9pbmZvX3VzZXIgewotCXVpbnQ4X3QgdHlwZTsKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCBzaXplOwkgLy8gVG90YWwgc2l6ZSBvZiB0aGUgTVRECi0JdWludDMyX3QgZXJhc2VzaXplOwotCXVpbnQzMl90IHdyaXRlc2l6ZTsKLQl1aW50MzJfdCBvb2JzaXplOyAgIC8vIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpCisJX191OCB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHNpemU7CSAvLyBUb3RhbCBzaXplIG9mIHRoZSBNVEQKKwlfX3UzMiBlcmFzZXNpemU7CisJX191MzIgd3JpdGVzaXplOworCV9fdTMyIG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKIAkvKiBUaGUgYmVsb3cgdHdvIGZpZWxkcyBhcmUgb2Jzb2xldGUgYW5kIGJyb2tlbiwgZG8gbm90IHVzZSB0aGVtCiAJICogKFRPRE86IHJlbW92ZSBhdCBzb21lIHBvaW50KSAqLwotCXVpbnQzMl90IGVjY3R5cGU7Ci0JdWludDMyX3QgZWNjc2l6ZTsKKwlfX3UzMiBlY2N0eXBlOworCV9fdTMyIGVjY3NpemU7CiB9OwogCiBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlciB7Ci0JdWludDMyX3Qgb2Zmc2V0OwkJLyogQXQgd2hpY2ggdGhpcyByZWdpb24gc3RhcnRzLAorCV9fdTMyIG9mZnNldDsJCS8qIEF0IHdoaWNoIHRoaXMgcmVnaW9uIHN0YXJ0cywKIAkJCQkJICogZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNVEQgKi8KLQl1aW50MzJfdCBlcmFzZXNpemU7CQkvKiBGb3IgdGhpcyByZWdpb24gKi8KLQl1aW50MzJfdCBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoaXMgcmVnaW9uICovCi0JdWludDMyX3QgcmVnaW9uaW5kZXg7CisJX191MzIgZXJhc2VzaXplOwkJLyogRm9yIHRoaXMgcmVnaW9uICovCisJX191MzIgbnVtYmxvY2tzOwkJLyogTnVtYmVyIG9mIGJsb2NrcyBpbiB0aGlzIHJlZ2lvbiAqLworCV9fdTMyIHJlZ2lvbmluZGV4OwogfTsKIAogc3RydWN0IG90cF9pbmZvIHsKLQl1aW50MzJfdCBzdGFydDsKLQl1aW50MzJfdCBsZW5ndGg7Ci0JdWludDMyX3QgbG9ja2VkOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiBsb2NrZWQ7CiB9OwogCiAjZGVmaW5lIE1FTUdFVElORk8JCV9JT1IoJ00nLCAxLCBzdHJ1Y3QgbXRkX2luZm9fdXNlcikKQEAgLTg0LDggKzg2LDggQEAKICNkZWZpbmUgTUVNR0VUUkVHSU9OSU5GTwlfSU9XUignTScsIDgsIHN0cnVjdCByZWdpb25faW5mb191c2VyKQogI2RlZmluZSBNRU1TRVRPT0JTRUwJCV9JT1coJ00nLCA5LCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQogI2RlZmluZSBNRU1HRVRPT0JTRUwJCV9JT1IoJ00nLCAxMCwgc3RydWN0IG5hbmRfb29iaW5mbykKLSNkZWZpbmUgTUVNR0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMSwgbG9mZl90KQotI2RlZmluZSBNRU1TRVRCQURCTE9DSwkJX0lPVygnTScsIDEyLCBsb2ZmX3QpCisjZGVmaW5lIE1FTUdFVEJBREJMT0NLCQlfSU9XKCdNJywgMTEsIF9fa2VybmVsX2xvZmZfdCkKKyNkZWZpbmUgTUVNU0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMiwgX19rZXJuZWxfbG9mZl90KQogI2RlZmluZSBPVFBTRUxFQ1QJCV9JT1IoJ00nLCAxMywgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05DT1VOVAlfSU9XKCdNJywgMTQsIGludCkKICNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTwlfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKQEAgLTk5LDE1ICsxMDEsMTUgQEAKICAqIGludGVyZmFjZXMKICAqLwogc3RydWN0IG5hbmRfb29iaW5mbyB7Ci0JdWludDMyX3QgdXNlZWNjOwotCXVpbnQzMl90IGVjY2J5dGVzOwotCXVpbnQzMl90IG9vYmZyZWVbOF1bMl07Ci0JdWludDMyX3QgZWNjcG9zWzMyXTsKKwlfX3UzMiB1c2VlY2M7CisJX191MzIgZWNjYnl0ZXM7CisJX191MzIgb29iZnJlZVs4XVsyXTsKKwlfX3UzMiBlY2Nwb3NbMzJdOwogfTsKIAogc3RydWN0IG5hbmRfb29iZnJlZSB7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IGxlbmd0aDsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgbGVuZ3RoOwogfTsKIAogI2RlZmluZSBNVERfTUFYX09PQkZSRUVfRU5UUklFUwk4CkBAIC0xMTYsOSArMTE4LDkgQEAKICAqIGRpYWdub3NpcyBhbmQgdG8gYWxsb3cgY3JlYXRpb24gb2YgcmF3IGltYWdlcwogICovCiBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgewotCXVpbnQzMl90IGVjY2J5dGVzOwotCXVpbnQzMl90IGVjY3Bvc1s2NF07Ci0JdWludDMyX3Qgb29iYXZhaWw7CisJX191MzIgZWNjYnl0ZXM7CisJX191MzIgZWNjcG9zWzY0XTsKKwlfX3UzMiBvb2JhdmFpbDsKIAlzdHJ1Y3QgbmFuZF9vb2JmcmVlIG9vYmZyZWVbTVREX01BWF9PT0JGUkVFX0VOVFJJRVNdOwogfTsKIApAQCAtMTMxLDEwICsxMzMsMTAgQEAKICAqIEBiYnRibG9ja3M6CW51bWJlciBvZiBibG9ja3MgcmVzZXJ2ZWQgZm9yIGJhZCBibG9jayB0YWJsZXMKICAqLwogc3RydWN0IG10ZF9lY2Nfc3RhdHMgewotCXVpbnQzMl90IGNvcnJlY3RlZDsKLQl1aW50MzJfdCBmYWlsZWQ7Ci0JdWludDMyX3QgYmFkYmxvY2tzOwotCXVpbnQzMl90IGJidGJsb2NrczsKKwlfX3UzMiBjb3JyZWN0ZWQ7CisJX191MzIgZmFpbGVkOworCV9fdTMyIGJhZGJsb2NrczsKKwlfX3UzMiBiYnRibG9ja3M7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaAppbmRleCAzOTBkMjFjLi45OGU5ZTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaApAQCAtNiwzMyArNiwzNSBAQAogI2lmbmRlZiBfX01URF9ORlRMX1VTRVJfSF9fCiAjZGVmaW5lIF9fTVREX05GVExfVVNFUl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIEJsb2NrIENvbnRyb2wgSW5mb3JtYXRpb24gKi8KIAogc3RydWN0IG5mdGxfYmNpIHsKIAl1bnNpZ25lZCBjaGFyIEVDQ1NpZ1s2XTsKLQl1aW50OF90IFN0YXR1czsKLQl1aW50OF90IFN0YXR1czE7CisJX191OCBTdGF0dXM7CisJX191OCBTdGF0dXMxOwogfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBVbml0IENvbnRyb2wgSW5mb3JtYXRpb24gKi8KIAogc3RydWN0IG5mdGxfdWNpMCB7Ci0JdWludDE2X3QgVmlydFVuaXROdW07Ci0JdWludDE2X3QgUmVwbFVuaXROdW07Ci0JdWludDE2X3QgU3BhcmVWaXJ0VW5pdE51bTsKLQl1aW50MTZfdCBTcGFyZVJlcGxVbml0TnVtOworCV9fdTE2IFZpcnRVbml0TnVtOworCV9fdTE2IFJlcGxVbml0TnVtOworCV9fdTE2IFNwYXJlVmlydFVuaXROdW07CisJX191MTYgU3BhcmVSZXBsVW5pdE51bTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBuZnRsX3VjaTEgewotCXVpbnQzMl90IFdlYXJJbmZvOwotCXVpbnQxNl90IEVyYXNlTWFyazsKLQl1aW50MTZfdCBFcmFzZU1hcmsxOworCV9fdTMyIFdlYXJJbmZvOworCV9fdTE2IEVyYXNlTWFyazsKKwlfX3UxNiBFcmFzZU1hcmsxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdGxfdWNpMiB7Ci0gICAgICAgIHVpbnQxNl90IEZvbGRNYXJrOwotICAgICAgICB1aW50MTZfdCBGb2xkTWFyazE7Ci0JdWludDMyX3QgdW51c2VkOworICAgICAgICBfX3UxNiBGb2xkTWFyazsKKyAgICAgICAgX191MTYgRm9sZE1hcmsxOworCV9fdTMyIHVudXNlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIG5mdGxfdWNpIHsKQEAgLTUwLDkgKzUyLDkgQEAKIAogc3RydWN0IE5GVExNZWRpYUhlYWRlciB7CiAJY2hhciBEYXRhT3JnSURbNl07Ci0JdWludDE2X3QgTnVtRXJhc2VVbml0czsKLQl1aW50MTZfdCBGaXJzdFBoeXNpY2FsRVVOOwotCXVpbnQzMl90IEZvcm1hdHRlZFNpemU7CisJX191MTYgTnVtRXJhc2VVbml0czsKKwlfX3UxNiBGaXJzdFBoeXNpY2FsRVVOOworCV9fdTMyIEZvcm1hdHRlZFNpemU7CiAJdW5zaWduZWQgY2hhciBVbml0U2l6ZUZhY3RvcjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL3ViaS11c2VyLmggYi9pbmNsdWRlL210ZC91YmktdXNlci5oCmluZGV4IDI5NmVmYWUuLjQ2NmE4MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKKysrIGIvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaApAQCAtMjEsNiArMjEsOCBAQAogI2lmbmRlZiBfX1VCSV9VU0VSX0hfXwogI2RlZmluZSBfX1VCSV9VU0VSX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIFVCSSBkZXZpY2UgY3JlYXRpb24gKHRoZSBzYW1lIGFzIE1URCBkZXZpY2UgYXR0YWNobWVudCkKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0xNTIsNyArMTU0LDcgQEAKIC8qIENyZWF0ZSBhbiBVQkkgdm9sdW1lICovCiAjZGVmaW5lIFVCSV9JT0NNS1ZPTCBfSU9XKFVCSV9JT0NfTUFHSUMsIDAsIHN0cnVjdCB1YmlfbWt2b2xfcmVxKQogLyogUmVtb3ZlIGFuIFVCSSB2b2x1bWUgKi8KLSNkZWZpbmUgVUJJX0lPQ1JNVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ1JNVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMSwgX19zMzIpCiAvKiBSZS1zaXplIGFuIFVCSSB2b2x1bWUgKi8KICNkZWZpbmUgVUJJX0lPQ1JTVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMiwgc3RydWN0IHViaV9yc3ZvbF9yZXEpCiAvKiBSZS1uYW1lIHZvbHVtZXMgKi8KQEAgLTE2NSwyNCArMTY3LDI0IEBACiAvKiBBdHRhY2ggYW4gTVREIGRldmljZSAqLwogI2RlZmluZSBVQklfSU9DQVRUIF9JT1coVUJJX0NUUkxfSU9DX01BR0lDLCA2NCwgc3RydWN0IHViaV9hdHRhY2hfcmVxKQogLyogRGV0YWNoIGFuIE1URCBkZXZpY2UgKi8KLSNkZWZpbmUgVUJJX0lPQ0RFVCBfSU9XKFVCSV9DVFJMX0lPQ19NQUdJQywgNjUsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NERVQgX0lPVyhVQklfQ1RSTF9JT0NfTUFHSUMsIDY1LCBfX3MzMikKIAogLyogaW9jdGwgY29tbWFuZHMgb2YgVUJJIHZvbHVtZSBjaGFyYWN0ZXIgZGV2aWNlcyAqLwogCiAjZGVmaW5lIFVCSV9WT0xfSU9DX01BR0lDICdPJwogCiAvKiBTdGFydCBVQkkgdm9sdW1lIHVwZGF0ZSAqLwotI2RlZmluZSBVQklfSU9DVk9MVVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMCwgaW50NjRfdCkKKyNkZWZpbmUgVUJJX0lPQ1ZPTFVQIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDAsIF9fczY0KQogLyogTEVCIGVyYXN1cmUgY29tbWFuZCwgdXNlZCBmb3IgZGVidWdnaW5nLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCi0jZGVmaW5lIFVCSV9JT0NFQkVSIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDEsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NFQkVSIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDEsIF9fczMyKQogLyogQXRvbWljIExFQiBjaGFuZ2UgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJDSCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAyLCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJDSCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAyLCBfX3MzMikKIC8qIE1hcCBMRUIgY29tbWFuZCAqLwogI2RlZmluZSBVQklfSU9DRUJNQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMywgc3RydWN0IHViaV9tYXBfcmVxKQogLyogVW5tYXAgTEVCIGNvbW1hbmQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCVU5NQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgNCwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCVU5NQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgNCwgX19zMzIpCiAvKiBDaGVjayBpZiBMRUIgaXMgbWFwcGVkIGNvbW1hbmQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCSVNNQVAgX0lPUihVQklfVk9MX0lPQ19NQUdJQywgNSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCSVNNQVAgX0lPUihVQklfVk9MX0lPQ19NQUdJQywgNSwgX19zMzIpCiAvKiBTZXQgYW4gVUJJIHZvbHVtZSBwcm9wZXJ0eSAqLwogI2RlZmluZSBVQklfSU9DU0VUUFJPUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA2LCBzdHJ1Y3QgdWJpX3NldF9wcm9wX3JlcSkKIApAQCAtMjYwLDEwICsyNjIsMTAgQEAKICAqIHN1Yi1wYWdlIG9mIHRoZSBmaXJzdCBwYWdlIGFuZCBhZGQgbmVlZGVkIHBhZGRpbmcuCiAgKi8KIHN0cnVjdCB1YmlfYXR0YWNoX3JlcSB7Ci0JaW50MzJfdCB1YmlfbnVtOwotCWludDMyX3QgbXRkX251bTsKLQlpbnQzMl90IHZpZF9oZHJfb2Zmc2V0OwotCWludDhfdCBwYWRkaW5nWzEyXTsKKwlfX3MzMiB1YmlfbnVtOworCV9fczMyIG10ZF9udW07CisJX19zMzIgdmlkX2hkcl9vZmZzZXQ7CisJX19zOCBwYWRkaW5nWzEyXTsKIH07CiAKIC8qKgpAQCAtMjk4LDEzICszMDAsMTMgQEAKICAqIEJMT0JzLCB3aXRob3V0IGNhcmluZyBhYm91dCBob3cgdG8gcHJvcGVybHkgYWxpZ24gdGhlbS4KICAqLwogc3RydWN0IHViaV9ta3ZvbF9yZXEgewotCWludDMyX3Qgdm9sX2lkOwotCWludDMyX3QgYWxpZ25tZW50OwotCWludDY0X3QgYnl0ZXM7Ci0JaW50OF90IHZvbF90eXBlOwotCWludDhfdCBwYWRkaW5nMTsKLQlpbnQxNl90IG5hbWVfbGVuOwotCWludDhfdCBwYWRkaW5nMls0XTsKKwlfX3MzMiB2b2xfaWQ7CisJX19zMzIgYWxpZ25tZW50OworCV9fczY0IGJ5dGVzOworCV9fczggdm9sX3R5cGU7CisJX19zOCBwYWRkaW5nMTsKKwlfX3MxNiBuYW1lX2xlbjsKKwlfX3M4IHBhZGRpbmcyWzRdOwogCWNoYXIgbmFtZVtVQklfTUFYX1ZPTFVNRV9OQU1FICsgMV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMzIwLDggKzMyMiw4IEBACiAgKiB6ZXJvIG51bWJlciBvZiBieXRlcykuCiAgKi8KIHN0cnVjdCB1YmlfcnN2b2xfcmVxIHsKLQlpbnQ2NF90IGJ5dGVzOwotCWludDMyX3Qgdm9sX2lkOworCV9fczY0IGJ5dGVzOworCV9fczMyIHZvbF9pZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKQEAgLTM1NiwxMiArMzU4LDEyIEBACiAgKiByZS1uYW1lIHJlcXVlc3QuCiAgKi8KIHN0cnVjdCB1Ymlfcm52b2xfcmVxIHsKLQlpbnQzMl90IGNvdW50OwotCWludDhfdCBwYWRkaW5nMVsxMl07CisJX19zMzIgY291bnQ7CisJX19zOCBwYWRkaW5nMVsxMl07CiAJc3RydWN0IHsKLQkJaW50MzJfdCB2b2xfaWQ7Ci0JCWludDE2X3QgbmFtZV9sZW47Ci0JCWludDhfdCAgcGFkZGluZzJbMl07CisJCV9fczMyIHZvbF9pZDsKKwkJX19zMTYgbmFtZV9sZW47CisJCV9fczggIHBhZGRpbmcyWzJdOwogCQljaGFyICAgIG5hbWVbVUJJX01BWF9WT0xVTUVfTkFNRSArIDFdOwogCX0gZW50c1tVQklfTUFYX1JOVk9MXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMzc1LDEwICszNzcsMTAgQEAKICAqIEBwYWRkaW5nOiByZXNlcnZlZCBmb3IgZnV0dXJlLCBub3QgdXNlZCwgaGFzIHRvIGJlIHplcm9lZAogICovCiBzdHJ1Y3QgdWJpX2xlYl9jaGFuZ2VfcmVxIHsKLQlpbnQzMl90IGxudW07Ci0JaW50MzJfdCBieXRlczsKLQlpbnQ4X3QgIGR0eXBlOwotCWludDhfdCAgcGFkZGluZ1s3XTsKKwlfX3MzMiBsbnVtOworCV9fczMyIGJ5dGVzOworCV9fczggIGR0eXBlOworCV9fczggIHBhZGRpbmdbN107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoqCkBAIC0zODgsOSArMzkwLDkgQEAKICAqIEBwYWRkaW5nOiByZXNlcnZlZCBmb3IgZnV0dXJlLCBub3QgdXNlZCwgaGFzIHRvIGJlIHplcm9lZAogICovCiBzdHJ1Y3QgdWJpX21hcF9yZXEgewotCWludDMyX3QgbG51bTsKLQlpbnQ4X3QgIGR0eXBlOwotCWludDhfdCAgcGFkZGluZ1szXTsKKwlfX3MzMiBsbnVtOworCV9fczggIGR0eXBlOworCV9fczggIHBhZGRpbmdbM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC00MDIsOSArNDA0LDkgQEAKICAqIEB2YWx1ZTogdmFsdWUgdG8gc2V0CiAgKi8KIHN0cnVjdCB1Ymlfc2V0X3Byb3BfcmVxIHsKLSAgICAgICB1aW50OF90ICBwcm9wZXJ0eTsKLSAgICAgICB1aW50OF90ICBwYWRkaW5nWzddOwotICAgICAgIHVpbnQ2NF90IHZhbHVlOworICAgICAgIF9fdTggIHByb3BlcnR5OworICAgICAgIF9fdTggIHBhZGRpbmdbN107CisgICAgICAgX191NjQgdmFsdWU7CiB9ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZiAvKiBfX1VCSV9VU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaCBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKaW5kZXggYzIxNmRlNS4uN2I1NWFiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAorKysgYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCkBAIC04OCw4ICs4OCw4IEBACiBleHRlcm4gaW50CQkJaXB2Nl9nZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCQl1bnNpZ25lZCBjaGFyIGJhbm5lZF9mbGFncyk7Ci1leHRlcm4gaW50CQkJaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCAKLQkJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpOworZXh0ZXJuIGludCAJCQlpcHY2X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrMik7CiBleHRlcm4gdm9pZAkJCWFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkcik7CiBleHRlcm4gdm9pZAkJCWFkZHJjb25mX2xlYXZlX3NvbGljdChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oIGIvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oCmluZGV4IDUxMzI5ZGEuLmI5YTNiZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2F4ODg3OTYuaAorKysgYi9pbmNsdWRlL25ldC9heDg4Nzk2LmgKQEAgLTE1LDE0ICsxNSwxNyBAQAogI2RlZmluZSBBWEZMR19IQVNfRUVQUk9NCQkoMTw8MCkKICNkZWZpbmUgQVhGTEdfTUFDX0ZST01ERVYJCSgxPDwxKQkvKiBkZXZpY2UgYWxyZWFkeSBoYXMgTUFDICovCiAjZGVmaW5lIEFYRkxHX0hBU185M0NYNgkJCSgxPDwyKQkvKiB1c2UgZWVwcm9tXzkzY3g2IGRyaXZlciAqLworI2RlZmluZSBBWEZMR19NQUNfRlJPTVBMQVRGT1JNCQkoMTw8MykJLyogTUFDIGdpdmVuIGJ5IHBsYXRmb3JtIGRhdGEgKi8KIAogc3RydWN0IGF4X3BsYXRfZGF0YSB7CiAJdW5zaWduZWQgaW50CSBmbGFnczsKLQl1bnNpZ25lZCBjaGFyCSB3b3JkbGVuZ3RoOwkJLyogMSBvciAyICovCi0JdW5zaWduZWQgY2hhcgkgZGNyX3ZhbDsJCS8qIGRlZmF1bHQgdmFsdWUgZm9yIERDUiAqLwotCXVuc2lnbmVkIGNoYXIJIHJjcl92YWw7CQkvKiBkZWZhdWx0IHZhbHVlIGZvciBSQ1IgKi8KLQl1bnNpZ25lZCBjaGFyCSBncG9jX3ZhbDsJCS8qIGRlZmF1bHQgdmFsdWUgZm9yIEdQT0MgKi8KLQl1MzIJCSpyZWdfb2Zmc2V0czsJCS8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KKwl1bnNpZ25lZCBjaGFyCSB3b3JkbGVuZ3RoOwkvKiAxIG9yIDIgKi8KKwl1bnNpZ25lZCBjaGFyCSBkY3JfdmFsOwkvKiBkZWZhdWx0IHZhbHVlIGZvciBEQ1IgKi8KKwl1bnNpZ25lZCBjaGFyCSByY3JfdmFsOwkvKiBkZWZhdWx0IHZhbHVlIGZvciBSQ1IgKi8KKwl1bnNpZ25lZCBjaGFyCSBncG9jX3ZhbDsJLyogZGVmYXVsdCB2YWx1ZSBmb3IgR1BPQyAqLworCXUzMgkJKnJlZ19vZmZzZXRzOwkvKiByZWdpc3RlciBvZmZzZXRzICovCisJdTgJCSptYWNfYWRkcjsJLyogTUFDIGFkZHIgKG9ubHkgdXNlZCB3aGVuCisJCQkJCSAgIEFYRkxHX01BQ19GUk9NUExBVEZPUk0gaXMgdXNlZCAqLwogfTsKIAogI2VuZGlmIC8qIF9fTkVUX0FYODg3OTZfUExBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggYTA0Zjg0Ni4uM2FkNTM5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtNTMsNiArNTMsMTcgQEAKICNkZWZpbmUgU09MX1NDTwkJMTcKICNkZWZpbmUgU09MX1JGQ09NTQkxOAogCisjZGVmaW5lIEJUX1NFQ1VSSVRZCTQKK3N0cnVjdCBidF9zZWN1cml0eSB7CisJX191OCBsZXZlbDsKK307CisjZGVmaW5lIEJUX1NFQ1VSSVRZX1NEUAkJMAorI2RlZmluZSBCVF9TRUNVUklUWV9MT1cJCTEKKyNkZWZpbmUgQlRfU0VDVVJJVFlfTUVESVVNCTIKKyNkZWZpbmUgQlRfU0VDVVJJVFlfSElHSAkzCisKKyNkZWZpbmUgQlRfREVGRVJfU0VUVVAJNworCiAjZGVmaW5lIEJUX0lORk8oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIkJsdWV0b290aDogIiBmbXQgIlxuIiAsICMjIGFyZykKICNkZWZpbmUgQlRfRVJSKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQgIlxuIiAsIF9fZnVuY19fICwgIyMgYXJnKQogI2RlZmluZSBCVF9EQkcoZm10LCBhcmcuLi4pICBwcl9kZWJ1ZygiJXM6ICIgZm10ICJcbiIgLCBfX2Z1bmNfXyAsICMjIGFyZykKQEAgLTEwOCw2ICsxMTksNyBAQAogCWJkYWRkcl90ICAgIGRzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xOwogCXN0cnVjdCBzb2NrICpwYXJlbnQ7CisJdTMyIGRlZmVyX3NldHVwOwogfTsKIAogc3RydWN0IGJ0X3NvY2tfbGlzdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKaW5kZXggMzY0NTEzOS4uZjY5ZjAxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaApAQCAtMTMzLDggKzEzMywxMyBAQAogI2RlZmluZSBFU0NPX0VWMwkweDAwMDgKICNkZWZpbmUgRVNDT19FVjQJMHgwMDEwCiAjZGVmaW5lIEVTQ09fRVY1CTB4MDAyMAorI2RlZmluZSBFU0NPXzJFVjMJMHgwMDQwCisjZGVmaW5lIEVTQ09fM0VWMwkweDAwODAKKyNkZWZpbmUgRVNDT18yRVY1CTB4MDEwMAorI2RlZmluZSBFU0NPXzNFVjUJMHgwMjAwCiAKICNkZWZpbmUgU0NPX0VTQ09fTUFTSyAgKEVTQ09fSFYxIHwgRVNDT19IVjIgfCBFU0NPX0hWMykKKyNkZWZpbmUgRURSX0VTQ09fTUFTSyAgKEVTQ09fMkVWMyB8IEVTQ09fM0VWMyB8IEVTQ09fMkVWNSB8IEVTQ09fM0VWNSkKIAogLyogQUNMIGZsYWdzICovCiAjZGVmaW5lIEFDTF9DT05UCQkweDAxCkBAIC0xNzYsNiArMTgxLDkgQEAKICNkZWZpbmUgTE1QX0VWNQkJMHgwMgogCiAjZGVmaW5lIExNUF9TTklGRl9TVUJSCTB4MDIKKyNkZWZpbmUgTE1QX0VEUl9FU0NPXzJNCTB4MjAKKyNkZWZpbmUgTE1QX0VEUl9FU0NPXzNNCTB4NDAKKyNkZWZpbmUgTE1QX0VEUl8zU19FU0NPCTB4ODAKIAogI2RlZmluZSBMTVBfU0lNUExFX1BBSVIJMHgwOAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDQ2YTQzYjcuLjAxZjkzMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0xNjksNiArMTY5LDcgQEAKIAlfX3UxNiAgICAgICAgICAgIGxpbmtfcG9saWN5OwogCV9fdTMyCQkgbGlua19tb2RlOwogCV9fdTggICAgICAgICAgICAgYXV0aF90eXBlOworCV9fdTggICAgICAgICAgICAgc2VjX2xldmVsOwogCV9fdTggICAgICAgICAgICAgcG93ZXJfc2F2ZTsKIAl1bnNpZ25lZCBsb25nCSBwZW5kOwogCkBAIC0zMjUsMTIgKzMyNiwxMSBAQAogdm9pZCBoY2lfY29ubl9oYXNoX2ZsdXNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIHZvaWQgaGNpX2Nvbm5fY2hlY2tfcGVuZGluZyhzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiAKLXN0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5lY3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0LCBfX3U4IGF1dGhfdHlwZSk7CitzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKTsKIGludCBoY2lfY29ubl9jaGVja19saW5rX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKLWludCBoY2lfY29ubl9hdXRoKHN0cnVjdCBoY2lfY29ubiAqY29ubik7Ci1pbnQgaGNpX2Nvbm5fZW5jcnlwdChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOworaW50IGhjaV9jb25uX3NlY3VyaXR5KHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKTsKIGludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKTsKLWludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHVpbnQ4X3Qgcm9sZSk7CitpbnQgaGNpX2Nvbm5fc3dpdGNoX3JvbGUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJvbGUpOwogCiB2b2lkIGhjaV9jb25uX2VudGVyX2FjdGl2ZV9tb2RlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CiB2b2lkIGhjaV9jb25uX2VudGVyX3NuaWZmX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKQEAgLTQ3MCwyNiArNDcwLDI2IEBACiAKIC8qIC0tLS0tIEhDSSBwcm90b2NvbHMgLS0tLS0gKi8KIHN0cnVjdCBoY2lfcHJvdG8gewotCWNoYXIgCQkqbmFtZTsKKwljaGFyCQkqbmFtZTsKIAl1bnNpZ25lZCBpbnQJaWQ7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCXZvaWQJCSpwcml2OwogCi0JaW50ICgqY29ubmVjdF9pbmQpIAkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIF9fdTggdHlwZSk7CisJaW50ICgqY29ubmVjdF9pbmQpCShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKTsKIAlpbnQgKCpjb25uZWN0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCWludCAoKmRpc2Nvbm5faW5kKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbik7CisJaW50ICgqZGlzY29ubl9pbmQpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOworCWludCAoKmRpc2Nvbm5fY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbik7CiAJaW50ICgqcmVjdl9hY2xkYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncyk7CiAJaW50ICgqcmVjdl9zY29kYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQlpbnQgKCphdXRoX2NmbSkJCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKLQlpbnQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CisJaW50ICgqc2VjdXJpdHlfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGhjaV9wcm90b19jb25uZWN0X2luZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKQogewogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOwogCWludCBtYXNrID0gMDsKLQkKKwogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07CiAJaWYgKGhwICYmIGhwLT5jb25uZWN0X2luZCkKIAkJbWFzayB8PSBocC0+Y29ubmVjdF9pbmQoaGRldiwgYmRhZGRyLCB0eXBlKTsKQEAgLTUxNCwzMCArNTE0LDUyIEBACiAJCWhwLT5jb25uZWN0X2NmbShjb25uLCBzdGF0dXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pCitzdGF0aWMgaW5saW5lIGludCBoY2lfcHJvdG9fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpjb25uKQoreworCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOworCWludCByZWFzb24gPSAweDEzOworCisJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQorCQlyZWFzb24gPSBocC0+ZGlzY29ubl9pbmQoY29ubik7CisKKwlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQorCQlyZWFzb24gPSBocC0+ZGlzY29ubl9pbmQoY29ubik7CisKKwlyZXR1cm4gcmVhc29uOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOwotCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCi0JCWhwLT5kaXNjb25uX2luZChjb25uLCByZWFzb24pOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9jZm0pCisJCWhwLT5kaXNjb25uX2NmbShjb25uLCByZWFzb24pOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX1NDT107Ci0JaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKLQkJaHAtPmRpc2Nvbm5faW5kKGNvbm4sIHJlYXNvbik7CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2NmbSkKKwkJaHAtPmRpc2Nvbm5fY2ZtKGNvbm4sIHJlYXNvbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKKwlfX3U4IGVuY3J5cHQ7CisKKwlpZiAodGVzdF9iaXQoSENJX0NPTk5fRU5DUllQVF9QRU5ELCAmY29ubi0+cGVuZCkpCisJCXJldHVybjsKKworCWVuY3J5cHQgPSAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpID8gMHgwMSA6IDB4MDA7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOwotCWlmIChocCAmJiBocC0+YXV0aF9jZm0pCi0JCWhwLT5hdXRoX2NmbShjb25uLCBzdGF0dXMpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKLQlpZiAoaHAgJiYgaHAtPmF1dGhfY2ZtKQotCQlocC0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKKwlpZiAoaHAgJiYgaHAtPnNlY3VyaXR5X2NmbSkKKwkJaHAtPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCkKQEAgLTU0NSwxMiArNTY3LDEyIEBACiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOwotCWlmIChocCAmJiBocC0+ZW5jcnlwdF9jZm0pCi0JCWhwLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKLQlpZiAoaHAgJiYgaHAtPmVuY3J5cHRfY2ZtKQotCQlocC0+ZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKKwlpZiAoaHAgJiYgaHAtPnNlY3VyaXR5X2NmbSkKKwkJaHAtPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogfQogCiBpbnQgaGNpX3JlZ2lzdGVyX3Byb3RvKHN0cnVjdCBoY2lfcHJvdG8gKmhwcm90byk7CkBAIC01NjIsOCArNTg0LDcgQEAKIAogCWNoYXIgKm5hbWU7CiAKLQl2b2lkICgqYXV0aF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKLQl2b2lkICgqZW5jcnlwdF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOworCXZvaWQgKCpzZWN1cml0eV9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOwogCXZvaWQgKCprZXlfY2hhbmdlX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwogCXZvaWQgKCpyb2xlX3N3aXRjaF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IHJvbGUpOwogfTsKQEAgLTU3MSwxNCArNTkyLDIwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlfX3U4IGVuY3J5cHQ7CiAKIAloY2lfcHJvdG9fYXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKIAorCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKKwkJcmV0dXJuOworCisJZW5jcnlwdCA9IChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgPyAweDAxIDogMHgwMDsKKwogCXJlYWRfbG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGNpX2NiX2xpc3QpIHsKIAkJc3RydWN0IGhjaV9jYiAqY2IgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoY2lfY2IsIGxpc3QpOwotCQlpZiAoY2ItPmF1dGhfY2ZtKQotCQkJY2ItPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CisJCWlmIChjYi0+c2VjdXJpdHlfY2ZtKQorCQkJY2ItPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCX0KIAlyZWFkX3VubG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiB9CkBAIC01ODcsMTMgKzYxNCwxNiBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAKKwlpZiAoY29ubi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKKwkJY29ubi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCiAJaGNpX3Byb3RvX2VuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAKIAlyZWFkX2xvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2gocCwgJmhjaV9jYl9saXN0KSB7CiAJCXN0cnVjdCBoY2lfY2IgKmNiID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGNpX2NiLCBsaXN0KTsKLQkJaWYgKGNiLT5lbmNyeXB0X2NmbSkKLQkJCWNiLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCQlpZiAoY2ItPnNlY3VyaXR5X2NmbSkKKwkJCWNiLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAl9CiAJcmVhZF91bmxvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaAppbmRleCA3M2UxMTViLi5mNTY2YWExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaApAQCAtMzcsNiArMzcsNyBAQAogCXNhX2ZhbWlseV90CWwyX2ZhbWlseTsKIAlfX2xlMTYJCWwyX3BzbTsKIAliZGFkZHJfdAlsMl9iZGFkZHI7CisJX19sZTE2CQlsMl9jaWQ7CiB9OwogCiAvKiBMMkNBUCBzb2NrZXQgb3B0aW9ucyAqLwpAQCAtMTg1LDYgKzE4Niw3IEBACiAvKiBpbmZvIHR5cGUgKi8KICNkZWZpbmUgTDJDQVBfSVRfQ0xfTVRVICAgICAweDAwMDEKICNkZWZpbmUgTDJDQVBfSVRfRkVBVF9NQVNLICAweDAwMDIKKyNkZWZpbmUgTDJDQVBfSVRfRklYRURfQ0hBTiAweDAwMDMKIAogLyogaW5mbyByZXN1bHQgKi8KICNkZWZpbmUgTDJDQVBfSVJfU1VDQ0VTUyAgICAweDAwMDAKQEAgLTIxOSwxMSArMjIxLDE0IEBACiAJX191OAkJcnhfaWRlbnQ7CiAJX191OAkJdHhfaWRlbnQ7CiAKKwlfX3U4CQlkaXNjX3JlYXNvbjsKKwogCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgY2hhbl9saXN0OwogfTsKIAogI2RlZmluZSBMMkNBUF9JTkZPX0NMX01UVV9SRVFfU0VOVAkweDAxCi0jZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UCTB4MDIKKyNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQJMHgwNAorI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORQkweDA4CiAKIC8qIC0tLS0tIEwyQ0FQIGNoYW5uZWwgYW5kIHNvY2tldCBpbmZvIC0tLS0tICovCiAjZGVmaW5lIGwyY2FwX3BpKHNrKSAoKHN0cnVjdCBsMmNhcF9waW5mbyAqKSBzaykKQEAgLTIzNyw4ICsyNDIsOSBAQAogCV9fdTE2CQlpbXR1OwogCV9fdTE2CQlvbXR1OwogCV9fdTE2CQlmbHVzaF90bzsKLQotCV9fdTMyCQlsaW5rX21vZGU7CisJX191OCAgICAgICAgICAgIHNlY19sZXZlbDsKKwlfX3U4CQlyb2xlX3N3aXRjaDsKKwlfX3U4ICAgICAgICAgICAgZm9yY2VfcmVsaWFibGU7CiAKIAlfX3U4CQljb25mX3JlcVs2NF07CiAJX191OAkJY29uZl9sZW47CkBAIC0yNTcsNiArMjYzLDcgQEAKICNkZWZpbmUgTDJDQVBfQ09ORl9SRVFfU0VOVAkweDAxCiAjZGVmaW5lIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORQkweDAyCiAjZGVmaW5lIEwyQ0FQX0NPTkZfT1VUUFVUX0RPTkUJMHgwNAorI2RlZmluZSBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORAkweDgwCiAKICNkZWZpbmUgTDJDQVBfQ09ORl9NQVhfUkVUUklFUwkyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAppbmRleCA0ZGM4ZDkyLi44MDA3MjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCkBAIC0xODMsOCArMTgzLDkgQEAKIAl1OCAgICAgICAgICAgIHJlbW90ZV92MjRfc2lnOwogCXU4ICAgICAgICAgICAgbXNjZXg7CiAJdTggICAgICAgICAgICBvdXQ7Ci0KLQl1MzIgICAgICAgICAgIGxpbmtfbW9kZTsKKwl1OCAgICAgICAgICAgIHNlY19sZXZlbDsKKwl1OCAgICAgICAgICAgIHJvbGVfc3dpdGNoOworCXUzMiAgICAgICAgICAgZGVmZXJfc2V0dXA7CiAKIAl1aW50ICAgICAgICAgIG10dTsKIAl1aW50ICAgICAgICAgIGNmYzsKQEAgLTIwMiwxMCArMjAzLDEyIEBACiAjZGVmaW5lIFJGQ09NTV9SWF9USFJPVFRMRUQgMAogI2RlZmluZSBSRkNPTU1fVFhfVEhST1RUTEVEIDEKICNkZWZpbmUgUkZDT01NX1RJTUVEX09VVCAgICAyCi0jZGVmaW5lIFJGQ09NTV9NU0NfUEVORElORyAgMyAKLSNkZWZpbmUgUkZDT01NX0FVVEhfUEVORElORyA0Ci0jZGVmaW5lIFJGQ09NTV9BVVRIX0FDQ0VQVCAgNQotI2RlZmluZSBSRkNPTU1fQVVUSF9SRUpFQ1QgIDYKKyNkZWZpbmUgUkZDT01NX01TQ19QRU5ESU5HICAzCisjZGVmaW5lIFJGQ09NTV9TRUNfUEVORElORyAgNAorI2RlZmluZSBSRkNPTU1fQVVUSF9QRU5ESU5HIDUKKyNkZWZpbmUgUkZDT01NX0FVVEhfQUNDRVBUICA2CisjZGVmaW5lIFJGQ09NTV9BVVRIX1JFSkVDVCAgNworI2RlZmluZSBSRkNPTU1fREVGRVJfU0VUVVAgIDgKIAogLyogU2NoZWR1bGluZyBmbGFncyBhbmQgZXZlbnRzICovCiAjZGVmaW5lIFJGQ09NTV9TQ0hFRF9TVEFURSAgMApAQCAtMjM5LDYgKzI0Miw3IEBACiBpbnQgIHJmY29tbV9kbGNfc2VuZChzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgIHJmY29tbV9kbGNfc2V0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgdTggdjI0X3NpZyk7CiBpbnQgIHJmY29tbV9kbGNfZ2V0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgdTggKnYyNF9zaWcpOwordm9pZCByZmNvbW1fZGxjX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCk7CiAKICNkZWZpbmUgcmZjb21tX2RsY19sb2NrKGQpICAgICBzcGluX2xvY2soJmQtPmxvY2spCiAjZGVmaW5lIHJmY29tbV9kbGNfdW5sb2NrKGQpICAgc3Bpbl91bmxvY2soJmQtPmxvY2spCkBAIC0zMDQsNyArMzA4LDggQEAKIAlzdHJ1Y3QgYnRfc29jayBidDsKIAlzdHJ1Y3QgcmZjb21tX2RsYyAgICpkbGM7CiAJdTggICAgIGNoYW5uZWw7Ci0JdTMyICAgIGxpbmtfbW9kZTsKKwl1OCAgICAgc2VjX2xldmVsOworCXU4ICAgICByb2xlX3N3aXRjaDsKIH07CiAKIGludCAgcmZjb21tX2luaXRfc29ja2V0cyh2b2lkKTsKQEAgLTMzMyw3ICszMzgsNiBAQAogCWJkYWRkcl90IHNyYzsKIAliZGFkZHJfdCBkc3Q7CiAJdTggICAgICAgY2hhbm5lbDsKLQkKIH07CiAKIHN0cnVjdCByZmNvbW1fZGV2X2luZm8gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggYzBkMWY1Yi4uNTBmM2ZkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC0xNzgsNiArMTc4LDggQEAKICAqIEBTVEFUSU9OX0lORk9fU0lHTkFMOiBAc2lnbmFsIGZpbGxlZAogICogQFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOiBAdHhfYml0cmF0ZSBmaWVsZHMgYXJlIGZpbGxlZAogICogICh0eF9iaXRyYXRlLCB0eF9iaXRyYXRlX2ZsYWdzIGFuZCB0eF9iaXRyYXRlX21jcykKKyAqIEBTVEFUSU9OX0lORk9fUlhfUEFDS0VUUzogQHJ4X3BhY2tldHMgZmlsbGVkCisgKiBAU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFM6IEB0eF9wYWNrZXRzIGZpbGxlZAogICovCiBlbnVtIHN0YXRpb25faW5mb19mbGFncyB7CiAJU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUJPSAxPDwwLApAQCAtMTg4LDYgKzE5MCw4IEBACiAJU1RBVElPTl9JTkZPX1BMSU5LX1NUQVRFCT0gMTw8NSwKIAlTVEFUSU9OX0lORk9fU0lHTkFMCQk9IDE8PDYsCiAJU1RBVElPTl9JTkZPX1RYX0JJVFJBVEUJCT0gMTw8NywKKwlTVEFUSU9OX0lORk9fUlhfUEFDS0VUUwkJPSAxPDw4LAorCVNUQVRJT05fSU5GT19UWF9QQUNLRVRTCQk9IDE8PDksCiB9OwogCiAvKioKQEAgLTIzNSw2ICsyMzksOCBAQAogICogQHBsaW5rX3N0YXRlOiBtZXNoIHBlZXIgbGluayBzdGF0ZQogICogQHNpZ25hbDogc2lnbmFsIHN0cmVuZ3RoIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0IGluIGRCbQogICogQHR4cmF0ZTogY3VycmVudCB1bmljYXN0IGJpdHJhdGUgdG8gdGhpcyBzdGF0aW9uCisgKiBAcnhfcGFja2V0czogcGFja2V0cyByZWNlaXZlZCBmcm9tIHRoaXMgc3RhdGlvbgorICogQHR4X3BhY2tldHM6IHBhY2tldHMgdHJhbnNtaXR0ZWQgdG8gdGhpcyBzdGF0aW9uCiAgKi8KIHN0cnVjdCBzdGF0aW9uX2luZm8gewogCXUzMiBmaWxsZWQ7CkBAIC0yNDYsNiArMjUyLDggQEAKIAl1OCBwbGlua19zdGF0ZTsKIAlzOCBzaWduYWw7CiAJc3RydWN0IHJhdGVfaW5mbyB0eHJhdGU7CisJdTMyIHJ4X3BhY2tldHM7CisJdTMyIHR4X3BhY2tldHM7CiB9OwogCiAvKioKQEAgLTM0MSwzMCArMzQ5LDkgQEAKIH07CiAKIC8qKgotICogZW51bSByZWdfc2V0X2J5IC0gSW5kaWNhdGVzIHdobyBpcyB0cnlpbmcgdG8gc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbgotICogQFJFR0RPTV9TRVRfQllfSU5JVDogcmVndWxhdG9yeSBkb21haW4gd2FzIHNldCBieSBpbml0aWFsaXphdGlvbi4gV2Ugd2lsbCBiZQotICogCXVzaW5nIGEgc3RhdGljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGJ5IGRlZmF1bHQuCi0gKiBAUkVHRE9NX1NFVF9CWV9DT1JFOiBDb3JlIHF1ZXJpZWQgQ1JEQSBmb3IgYSBkeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluLgotICogQFJFR0RPTV9TRVRfQllfVVNFUjogVXNlciBhc2tlZCB0aGUgd2lyZWxlc3MgY29yZSB0byBzZXQgdGhlCi0gKiAJcmVndWxhdG9yeSBkb21haW4uCi0gKiBAUkVHRE9NX1NFVF9CWV9EUklWRVI6IGEgd2lyZWxlc3MgZHJpdmVycyBoYXMgaGludGVkIHRvIHRoZSB3aXJlbGVzcyBjb3JlCi0gKglpdCB0aGlua3MgaXRzIGtub3dzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3ZSBzaG91bGQgYmUgaW4uCi0gKiBAUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOiB0aGUgd2lyZWxlc3MgY29yZSBoYXMgcmVjZWl2ZWQgYW4gODAyLjExIGNvdW50cnkKLSAqCWluZm9ybWF0aW9uIGVsZW1lbnQgd2l0aCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGl0IHRoaW5rcyB3ZQotICoJc2hvdWxkIGNvbnNpZGVyLgotICovCi1lbnVtIHJlZ19zZXRfYnkgewotCVJFR0RPTV9TRVRfQllfSU5JVCwKLQlSRUdET01fU0VUX0JZX0NPUkUsCi0JUkVHRE9NX1NFVF9CWV9VU0VSLAotCVJFR0RPTV9TRVRfQllfRFJJVkVSLAotCVJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSwKLX07Ci0KLS8qKgogICogZW51bSBlbnZpcm9ubWVudF9jYXAgLSBFbnZpcm9ubWVudCBwYXJzZWQgZnJvbSBjb3VudHJ5IElFCiAgKiBARU5WSVJPTl9BTlk6IGluZGljYXRlcyBjb3VudHJ5IElFIGFwcGxpZXMgdG8gYm90aCBpbmRvb3IgYW5kCi0gKiAJb3V0ZG9vciBvcGVyYXRpb24uCisgKglvdXRkb29yIG9wZXJhdGlvbi4KICAqIEBFTlZJUk9OX0lORE9PUjogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyBvbmx5IHRvIGluZG9vciBvcGVyYXRpb24KICAqIEBFTlZJUk9OX09VVERPT1I6IGluZGljYXRlcyBjb3VudHJ5IElFIGFwcGxpZXMgb25seSB0byBvdXRkb29yIG9wZXJhdGlvbgogICovCkBAIC0zNzUsMTUgKzM2MiwxNSBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0IC0gcmVjZWlwdCBvZiBsYXN0IHJlZ3VsYXRvcnkgcmVxdWVzdAorICogc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAtIHVzZWQgdG8ga2VlcCB0cmFjayBvZiByZWd1bGF0b3J5IHJlcXVlc3RzCiAgKgotICogQHdpcGh5OiB0aGlzIGlzIHNldCBpZiB0aGlzIHJlcXVlc3QncyBpbml0aWF0b3IgaXMKKyAqIEB3aXBoeV9pZHg6IHRoaXMgaXMgc2V0IGlmIHRoaXMgcmVxdWVzdCdzIGluaXRpYXRvciBpcwogICogCSVSRUdET01fU0VUX0JZX0NPVU5UUllfSUUgb3IgJVJFR0RPTV9TRVRfQllfRFJJVkVSLiBUaGlzCiAgKiAJY2FuIGJlIHVzZWQgYnkgdGhlIHdpcmVsZXNzIGNvcmUgdG8gZGVhbCB3aXRoIGNvbmZsaWN0cwogICogCWFuZCBwb3RlbnRpYWxseSBpbmZvcm0gdXNlcnMgb2Ygd2hpY2ggZGV2aWNlcyBzcGVjaWZpY2FsbHkKICAqIAljYXNlZCB0aGUgY29uZmxpY3RzLgogICogQGluaXRpYXRvcjogaW5kaWNhdGVzIHdobyBzZW50IHRoaXMgcmVxdWVzdCwgY291bGQgYmUgYW55IG9mCi0gKiAJb2YgdGhvc2Ugc2V0IGluIHJlZ19zZXRfYnksICVSRUdET01fU0VUX0JZXyoKKyAqIAlvZiB0aG9zZSBzZXQgaW4gbmw4MDIxMV9yZWdfaW5pdGlhdG9yICglTkw4MDIxMV9SRUdET01fU0VUX0JZXyopCiAgKiBAYWxwaGEyOiB0aGUgSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBvZiB0aGUgcmVxdWVzdGVkCiAgKiAJcmVndWxhdG9yeSBkb21haW4uIFdlIGhhdmUgYSBmZXcgc3BlY2lhbCBjb2RlczoKICAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCkBAIC0zOTYsMTQgKzM4MywxNiBAQAogICogCWNvdW50cnkgSUUKICAqIEBjb3VudHJ5X2llX2VudjogbGV0cyB1cyBrbm93IGlmIHRoZSBBUCBpcyB0ZWxsaW5nIHVzIHdlIGFyZSBvdXRkb29yLAogICogCWluZG9vciwgb3IgaWYgaXQgZG9lc24ndCBtYXR0ZXIKKyAqIEBsaXN0OiB1c2VkIHRvIGluc2VydCBpbnRvIHRoZSByZWdfcmVxdWVzdHNfbGlzdCBsaW5rZWQgbGlzdAogICovCiBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0IHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwotCWVudW0gcmVnX3NldF9ieSBpbml0aWF0b3I7CisJaW50IHdpcGh5X2lkeDsKKwllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3I7CiAJY2hhciBhbHBoYTJbMl07CiAJYm9vbCBpbnRlcnNlY3Q7CiAJdTMyIGNvdW50cnlfaWVfY2hlY2tzdW07CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgY291bnRyeV9pZV9lbnY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAogc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlIHsKQEAgLTUyNSw2ICs1MTQsOCBAQAogICogQG5fc3NpZHM6IG51bWJlciBvZiBTU0lEcwogICogQGNoYW5uZWxzOiBjaGFubmVscyB0byBzY2FuIG9uLgogICogQG5fY2hhbm5lbHM6IG51bWJlciBvZiBjaGFubmVscyBmb3IgZWFjaCBiYW5kCisgKiBAaWU6IG9wdGlvbmFsIGluZm9ybWF0aW9uIGVsZW1lbnQocykgdG8gYWRkIGludG8gUHJvYmUgUmVxdWVzdCBvciAlTlVMTAorICogQGllX2xlbjogbGVuZ3RoIG9mIGllIGluIG9jdGV0cwogICogQHdpcGh5OiB0aGUgd2lwaHkgdGhpcyB3YXMgZm9yCiAgKiBAaWZpZHg6IHRoZSBpbnRlcmZhY2UgaW5kZXgKICAqLwpAQCAtNTMzLDYgKzUyNCw4IEBACiAJaW50IG5fc3NpZHM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoqY2hhbm5lbHM7CiAJdTMyIG5fY2hhbm5lbHM7CisJdTggKmllOworCXNpemVfdCBpZV9sZW47CiAKIAkvKiBpbnRlcm5hbCAqLwogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CkBAIC01NjUsOCArNTU4LDcgQEAKICAqIEBpbmZvcm1hdGlvbl9lbGVtZW50czogdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIChOb3RlIHRoYXQgdGhlcmUKICAqCWlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZXNlIGFyZSB3ZWxsLWZvcm1lZCEpCiAgKiBAbGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOiB0b3RhbCBsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzCi0gKiBAc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggdmFsdWUKLSAqIEBzaWduYWxfdHlwZTogc2lnbmFsIHR5cGUKKyAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAodHlwZSBkZXBlbmRzIG9uIHRoZSB3aXBoeSdzIHNpZ25hbF90eXBlKQogICogQGZyZWVfcHJpdjogZnVuY3Rpb24gcG9pbnRlciB0byBmcmVlIHByaXZhdGUgZGF0YQogICogQHByaXY6IHByaXZhdGUgYXJlYSBmb3IgZHJpdmVyIHVzZSwgaGFzIGF0IGxlYXN0IHdpcGh5LT5ic3NfcHJpdl9zaXplIGJ5dGVzCiAgKi8KQEAgLTU4MSw3ICs1NzMsNiBAQAogCXNpemVfdCBsZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CiAKIAlzMzIgc2lnbmFsOwotCWVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGU7CiAKIAl2b2lkICgqZnJlZV9wcml2KShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOwogCXU4IHByaXZbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oc2l6ZW9mKHZvaWQgKikpKSk7CkBAIC03NTUsNiArNzQ2LDkgQEAKIGludCBjZmc4MDIxMV93ZXh0X2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOwogCiAvKioKICAqIGNmZzgwMjExX3NjYW5fZG9uZSAtIG5vdGlmeSB0aGF0IHNjYW4gZmluaXNoZWQKQEAgLTc3MCw2ICs3NjQsNyBAQAogICoKICAqIEB3aXBoeTogdGhlIHdpcGh5IHJlcG9ydGluZyB0aGUgQlNTCiAgKiBAYnNzOiB0aGUgZm91bmQgQlNTCisgKiBAc2lnbmFsOiB0aGUgc2lnbmFsIHN0cmVuZ3RoLCB0eXBlIGRlcGVuZHMgb24gdGhlIHdpcGh5J3Mgc2lnbmFsX3R5cGUKICAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKICAqCiAgKiBUaGlzIGluZm9ybXMgY2ZnODAyMTEgdGhhdCBCU1MgaW5mb3JtYXRpb24gd2FzIGZvdW5kIGFuZApAQCAtNzc5LDggKzc3NCw3IEBACiBjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAotCQkJICBzMzIgc2lnbmFsLCBlbnVtIGNmZzgwMjExX3NpZ25hbF90eXBlIHNpZ3R5cGUsCi0JCQkgIGdmcF90IGdmcCk7CisJCQkgIHMzMiBzaWduYWwsIGdmcF90IGdmcCk7CiAKIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oCmluZGV4IDUyZTk3YmYuLjgzOWY3NjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oCisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIGluY2x1ZGUvbmV0L2RzYS5oIC0gRHJpdmVyIGZvciBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIHN3aXRjaCBjaGlwcwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMSwyMyArMTEsNDcgQEAKICNpZm5kZWYgX19MSU5VWF9ORVRfRFNBX0gKICNkZWZpbmUgX19MSU5VWF9ORVRfRFNBX0gKIAotI2RlZmluZSBEU0FfTUFYX1BPUlRTCTEyCisjZGVmaW5lIERTQV9NQVhfU1dJVENIRVMJNAorI2RlZmluZSBEU0FfTUFYX1BPUlRTCQkxMgorCitzdHJ1Y3QgZHNhX2NoaXBfZGF0YSB7CisJLyoKKwkgKiBIb3cgdG8gYWNjZXNzIHRoZSBzd2l0Y2ggY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisJICovCisJc3RydWN0IGRldmljZQkqbWlpX2J1czsKKwlpbnQJCXN3X2FkZHI7CisKKwkvKgorCSAqIFRoZSBuYW1lcyBvZiB0aGUgc3dpdGNoJ3MgcG9ydHMuICBVc2UgImNwdSIgdG8KKwkgKiBkZXNpZ25hdGUgdGhlIHN3aXRjaCBwb3J0IHRoYXQgdGhlIGNwdSBpcyBjb25uZWN0ZWQgdG8sCisJICogImRzYSIgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHBvcnQgaXMgYSBEU0EgbGluayB0bworCSAqIGFub3RoZXIgc3dpdGNoLCBOVUxMIHRvIGluZGljYXRlIHRoZSBwb3J0IGlzIHVudXNlZCwKKwkgKiBvciBhbnkgb3RoZXIgc3RyaW5nIHRvIGluZGljYXRlIHRoaXMgaXMgYSBwaHlzaWNhbCBwb3J0LgorCSAqLworCWNoYXIJCSpwb3J0X25hbWVzW0RTQV9NQVhfUE9SVFNdOworCisJLyoKKwkgKiBBbiBhcnJheSAod2l0aCBucl9jaGlwcyBlbGVtZW50cykgb2Ygd2hpY2ggZWxlbWVudCBbYV0KKwkgKiBpbmRpY2F0ZXMgd2hpY2ggcG9ydCBvbiB0aGlzIHN3aXRjaCBzaG91bGQgYmUgdXNlZCB0bworCSAqIHNlbmQgcGFja2V0cyB0byB0aGF0IGFyZSBkZXN0aW5lZCBmb3Igc3dpdGNoIGEuICBDYW4gYmUKKwkgKiBOVUxMIGlmIHRoZXJlIGlzIG9ubHkgb25lIHN3aXRjaCBjaGlwLgorCSAqLworCXM4CQkqcnRhYmxlOworfTsKIAogc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHsKIAkvKgogCSAqIFJlZmVyZW5jZSB0byBhIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgY29ubmVjdHMKLQkgKiB0byB0aGUgc3dpdGNoIGNoaXAuCisJICogdG8gdGhlIHJvb3Qgc3dpdGNoIGNoaXAgb2YgdGhlIHRyZWUuCiAJICovCiAJc3RydWN0IGRldmljZQkqbmV0ZGV2OwogCiAJLyoKLQkgKiBIb3cgdG8gYWNjZXNzIHRoZSBzd2l0Y2ggY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIGFuZAotCSAqIHRoZSBuYW1lcyBvZiB0aGUgc3dpdGNoIHBvcnRzICh1c2UgImNwdSIgdG8gZGVzaWduYXRlCi0JICogdGhlIHN3aXRjaCBwb3J0IHRoYXQgdGhlIGNwdSBpcyBjb25uZWN0ZWQgdG8pLgorCSAqIEluZm8gc3RydWN0cyBkZXNjcmliaW5nIGVhY2ggb2YgdGhlIHN3aXRjaCBjaGlwcworCSAqIGNvbm5lY3RlZCB2aWEgdGhpcyBuZXR3b3JrIGludGVyZmFjZS4KIAkgKi8KLQlzdHJ1Y3QgZGV2aWNlCSptaWlfYnVzOwotCWludAkJc3dfYWRkcjsKLQljaGFyCQkqcG9ydF9uYW1lc1tEU0FfTUFYX1BPUlRTXTsKKwlpbnQJCW5yX2NoaXBzOworCXN0cnVjdCBkc2FfY2hpcF9kYXRhCSpjaGlwOwogfTsKIAogZXh0ZXJuIGJvb2wgZHNhX3VzZXNfZHNhX3RhZ3Modm9pZCAqZHNhX3B0cik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAppbmRleCBjOGVmZmE0Li4zOGI3ODEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKQEAgLTM5LDggKzM5LDYgQEAKIAkKIAlfX3UzMgkJCXZhbGlkX2xmdDsKIAlfX3UzMgkJCXByZWZlcmVkX2xmdDsKLQl1bnNpZ25lZCBsb25nCQljc3RhbXA7CS8qIGNyZWF0ZWQgdGltZXN0YW1wICovCi0JdW5zaWduZWQgbG9uZwkJdHN0YW1wOyAvKiB1cGRhdGVkIHRpbWVzdGFtcCAqLwogCWF0b21pY190CQlyZWZjbnQ7CiAJc3BpbmxvY2tfdAkJbG9jazsKIApAQCAtNDksNiArNDcsOSBAQAogCiAJX191MTYJCQlzY29wZTsKIAorCXVuc2lnbmVkIGxvbmcJCWNzdGFtcDsJLyogY3JlYXRlZCB0aW1lc3RhbXAgKi8KKwl1bnNpZ25lZCBsb25nCQl0c3RhbXA7IC8qIHVwZGF0ZWQgdGltZXN0YW1wICovCisKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKIAogCXN0cnVjdCBpbmV0Nl9kZXYJKmlkZXY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaCBiL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCmluZGV4IGUwODFlZWYuLjM5ZjJkYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCkBAIC02MSw3ICs2MSw4IEBACiAJCQkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIGludCAqd29yayk7CiBpbnQgaW5ldF9mcmFnX2V2aWN0b3Ioc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwgc3RydWN0IGluZXRfZnJhZ3MgKmYpOwogc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqaW5ldF9mcmFnX2ZpbmQoc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwKLQkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIHZvaWQgKmtleSwgdW5zaWduZWQgaW50IGhhc2gpOworCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCkKKwlfX3JlbGVhc2VzKCZmLT5sb2NrKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGluZXRfZnJhZ19wdXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgc3RydWN0IGluZXRfZnJhZ3MgKmYpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA4OGZhM2UwLi4xMmE1MmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTEwMjIsMTEgKzEwMjIsNiBAQAogCXJldHVybiBody0+cXVldWVzOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlyZXR1cm4gaHctPnF1ZXVlcyArIGh3LT5hbXBkdV9xdWV1ZXM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfdHhfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjKQpAQCAtMTMyOSw2ICsxMzI0LDEyIEBACiAgKgliZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyB0dXJuZWQgb2ZmISBBbnl0aGluZyBlbHNlIGlzIGEgYnVnIQogICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4KICAqCisgKiBAc3dfc2Nhbl9zdGFydDogTm90aWZpZXIgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQganVzdCBiZWZvcmUgYSBzb2Z0d2FyZSBzY2FuCisgKglpcyBzdGFydGVkLiBDYW4gYmUgTlVMTCwgaWYgdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdGhpcyBub3RpZmljYXRpb24uCisgKgorICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYSBzb2Z0d2FyZSBzY2FuCisgKglmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRoaXMgbm90aWZpY2F0aW9uLgorICoKICAqIEBnZXRfc3RhdHM6IFJldHVybiBsb3ctbGV2ZWwgc3RhdGlzdGljcy4KICAqIAlSZXR1cm5zIHplcm8gaWYgc3RhdGlzdGljcyBhcmUgYXZhaWxhYmxlLgogICoKQEAgLTE0MDgsNiArMTQwOSw4IEBACiAJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpOwogCWludCAoKmh3X3NjYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKKwl2b2lkICgqc3dfc2Nhbl9zdGFydCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpzd19zY2FuX2NvbXBsZXRlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJaW50ICgqZ2V0X3N0YXRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwogCXZvaWQgKCpnZXRfdGtpcF9zZXEpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19rZXlfaWR4LApAQCAtMTk4MCw2ICsxOTgzLDE2IEBACiAvKiBSYXRlIGNvbnRyb2wgQVBJICovCiAKIC8qKgorICogZW51bSByYXRlX2NvbnRyb2xfY2hhbmdlZCAtIGZsYWdzIHRvIGluZGljYXRlIHdoaWNoIHBhcmFtZXRlciBjaGFuZ2VkCisgKgorICogQElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEOiBUaGUgSFQgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW5nIGNoYW5uZWwgaGF2ZQorICoJY2hhbmdlZCwgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBjYW4gdXBkYXRlIGl0cyBpbnRlcm5hbCBzdGF0ZSBpZiBuZWVkZWQuCisgKi8KK2VudW0gcmF0ZV9jb250cm9sX2NoYW5nZWQgeworCUlFRUU4MDIxMV9SQ19IVF9DSEFOR0VEID0gQklUKDApCit9OworCisvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sIC0gcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIGZvci9mcm9tIFJDIGFsZ28KICAqCiAgKiBAaHc6IFRoZSBoYXJkd2FyZSB0aGUgYWxnb3JpdGhtIGlzIGludm9rZWQgZm9yLgpAQCAtMjAxNSw2ICsyMDI4LDkgQEAKIAl2b2lkICooKmFsbG9jX3N0YSkodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKTsKIAl2b2lkICgqcmF0ZV9pbml0KSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpOworCXZvaWQgKCpyYXRlX3VwZGF0ZSkodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICB2b2lkICpwcml2X3N0YSwgdTMyIGNoYW5nZWQpOwogCXZvaWQgKCpmcmVlX3N0YSkodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSB2b2lkICpwcml2X3N0YSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaAppbmRleCA2ZmMxM2Q5Li5kZWQ0MzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCkBAIC0xMDksMTEgKzEwOSw2IEBACiAjaWZkZWYgQ09ORklHX05FVF9OUwogZXh0ZXJuIHZvaWQgX19wdXRfbmV0KHN0cnVjdCBuZXQgKm5ldCk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5ldF9hbGl2ZShzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0JcmV0dXJuIG5ldCAmJiBhdG9taWNfcmVhZCgmbmV0LT5jb3VudCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqZ2V0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJYXRvbWljX2luYygmbmV0LT5jb3VudCk7CkBAIC0xNDUsMTEgKzE0MCw2IEBACiB9CiAjZWxzZQogCi1zdGF0aWMgaW5saW5lIGludCBuZXRfYWxpdmUoc3RydWN0IG5ldCAqbmV0KQotewotCXJldHVybiAxOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmdldF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJldHVybiBuZXQ7CkBAIC0yMzQsNiArMjI0LDIzIEBACiAJdm9pZCAoKmV4aXQpKHN0cnVjdCBuZXQgKm5ldCk7CiB9OwogCisvKgorICogVXNlIHRoZXNlIGNhcmVmdWxseS4gIElmIHlvdSBpbXBsZW1lbnQgYSBuZXR3b3JrIGRldmljZSBhbmQgaXQKKyAqIG5lZWRzIHBlciBuZXR3b3JrIG5hbWVzcGFjZSBvcGVyYXRpb25zIHVzZSBkZXZpY2UgcGVybmV0IG9wZXJhdGlvbnMsCisgKiBvdGhlcndpc2UgdXNlIHBlcm5ldCBzdWJzeXMgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGlzIGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50LiAgTW9zdCBvZiB0aGUgbmV0d29yayBjb2RlIGNsZWFudXAKKyAqIHJ1bnMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IGRldl9yZW1vdmVfcGFjayBoYXMgYmVlbiBjYWxsZWQgc28gbm8KKyAqIG5ldyBwYWNrZXRzIHdpbGwgYXJyaXZlIGR1cmluZyBhbmQgYWZ0ZXIgdGhlIGNsZWFudXAgZnVuY3Rpb25zIGhhdmUKKyAqIGJlZW4gY2FsbGVkLiAgZGV2X3JlbW92ZV9wYWNrIGlzIG5vdCBwZXIgbmFtZXNwYWNlIHNvIGluc3RlYWQgdGhlCisgKiBndWFyYW50ZWUgb2Ygbm8gbW9yZSBwYWNrZXRzIGFycml2aW5nIGluIGEgbmV0d29yayBuYW1lc3BhY2UgaXMKKyAqIHByb3ZpZGVkIGJ5IGVuc3VyaW5nIHRoYXQgYWxsIG5ldHdvcmsgZGV2aWNlcyBhbmQgYWxsIHNvY2tldHMgaGF2ZQorICogbGVmdCB0aGUgbmV0d29yayBuYW1lc3BhY2UgYmVmb3JlIHRoZSBjbGVhbnVwIG1ldGhvZHMgYXJlIGNhbGxlZC4KKyAqCisgKiBGb3IgdGhlIGxvbmdlc3QgdGltZSB0aGUgaXB2NCBpY21wIGNvZGUgd2FzIHJlZ2lzdGVyZWQgYXMgYSBwZXJuZXQKKyAqIGRldmljZSB3aGljaCBjYXVzZWQga2VybmVsIG9vcHMsIGFuZCBwYW5pY3MgZHVyaW5nIG5ldHdvcmsKKyAqIG5hbWVzcGFjZSBjbGVhbnVwLiAgIFNvIHBsZWFzZSBkb24ndCBnZXQgdGhpcyB3cm9uZy4KKyAqLwogZXh0ZXJuIGludCByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgKik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX3Blcm5ldF9nZW5fc3Vic3lzKGludCAqaWQsIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKaW5kZXggZTc4YWZlNy4uNWE0NDliNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKQEAgLTU5LDEwICs1OSwxMSBAQAogCXN0cnVjdCBuZl9jb25uICpjdCA9IChzdHJ1Y3QgbmZfY29ubiAqKXNrYi0+bmZjdDsKIAlpbnQgcmV0ID0gTkZfQUNDRVBUOwogCi0JaWYgKGN0KSB7CisJaWYgKGN0ICYmIGN0ICE9ICZuZl9jb25udHJhY2tfdW50cmFja2VkKSB7CiAJCWlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSAmJiAhbmZfY3RfaXNfZHlpbmcoY3QpKQogCQkJcmV0ID0gX19uZl9jb25udHJhY2tfY29uZmlybShza2IpOwotCQluZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoY3QpOworCQlpZiAobGlrZWx5KHJldCA9PSBORl9BQ0NFUFQpKQorCQkJbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKGN0KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BzbmFwLmggYi9pbmNsdWRlL25ldC9wc25hcC5oCmluZGV4IGIyZTAxY2MuLmZlNDU2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BzbmFwLmgKKysrIGIvaW5jbHVkZS9uZXQvcHNuYXAuaApAQCAtMSw3ICsxLDExIEBACiAjaWZuZGVmIF9ORVRfUFNOQVBfSAogI2RlZmluZSBfTkVUX1BTTkFQX0gKIAotZXh0ZXJuIHN0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQodW5zaWduZWQgY2hhciAqZGVzYywgaW50ICgqcmN2ZnVuYykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikpOworZXh0ZXJuIHN0cnVjdCBkYXRhbGlua19wcm90byAqCityZWdpc3Rlcl9zbmFwX2NsaWVudChjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNjLAorCQkgICAgIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosCisJCQkJICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfc25hcF9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICpwcm90byk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggM2Q3OGE0ZC4uOTY0ZmZhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC00OSwxOCArNDksMTAgQEAKIAlpbnQJCQlwYWRkZWQ7CiAJc3RydWN0IFFkaXNjX29wcwkqb3BzOwogCXN0cnVjdCBxZGlzY19zaXplX3RhYmxlCSpzdGFiOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1MzIJCQloYW5kbGU7CiAJdTMyCQkJcGFyZW50OwogCWF0b21pY190CQlyZWZjbnQ7Ci0JdW5zaWduZWQgbG9uZwkJc3RhdGU7Ci0Jc3RydWN0IHNrX2J1ZmYJCSpnc29fc2tiOwotCXN0cnVjdCBza19idWZmX2hlYWQJcTsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlCSpkZXZfcXVldWU7Ci0Jc3RydWN0IFFkaXNjCQkqbmV4dF9zY2hlZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0KLQlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYwlic3RhdHM7Ci0Jc3RydWN0IGduZXRfc3RhdHNfcXVldWUJcXN0YXRzOwogCXN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0CXJhdGVfZXN0OwogCWludAkJCSgqcmVzaGFwZV9mYWlsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgUWRpc2MgKnEpOwpAQCAtNzEsNiArNjMsMTcgQEAKIAkgKiBhbmQgaXQgd2lsbCBsaXZlIHVudGlsIGJldHRlciBzb2x1dGlvbiB3aWxsIGJlIGludmVudGVkLgogCSAqLwogCXN0cnVjdCBRZGlzYwkJKl9fcGFyZW50OworCXN0cnVjdCBuZXRkZXZfcXVldWUJKmRldl9xdWV1ZTsKKwlzdHJ1Y3QgUWRpc2MJCSpuZXh0X3NjaGVkOworCisJc3RydWN0IHNrX2J1ZmYJCSpnc29fc2tiOworCS8qCisJICogRm9yIHBlcmZvcm1hbmNlIHNha2Ugb24gU01QLCB3ZSBwdXQgaGlnaGx5IG1vZGlmaWVkIGZpZWxkcyBhdCB0aGUgZW5kCisJICovCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlxOworCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljIGJzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CiB9OwogCiBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCmluZGV4IDg4OTg4YWIuLjNiOTY2ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCkBAIC03Nyw3ICs3Nyw4IEBACiAJU0NUUF9DTURfSEJfVElNRVJTX1NUQVJULCAgICAvKiBTdGFydCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gKi8KIAlTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsICAgIC8qIFVwZGF0ZSBhIGhlYXJ0YmVhdCB0aW1lcnMuICAqLwogCVNDVFBfQ01EX0hCX1RJTUVSU19TVE9QLCAgICAgLyogU3RvcCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gICovCi0JU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULCAgICAvKiBSZXNldCB0aGUgc3RhdHVzIG9mIGEgdHJhbnNwb3J0LiAqLworCVNDVFBfQ01EX1RSQU5TUE9SVF9IQl9TRU5ULCAgLyogUmVzZXQgdGhlIHN0YXR1cyBvZiBhIHRyYW5zcG9ydC4gKi8KKwlTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRSwgICAgIC8qIERvIG1hbmlwdWxhdGlvbnMgb24gaWRsZSB0cmFuc3BvcnQgKi8KIAlTQ1RQX0NNRF9UUkFOU1BPUlRfT04sICAgICAgIC8qIE1hcmsgdGhlIHRyYW5zcG9ydCBhcyBhY3RpdmUuICovCiAJU0NUUF9DTURfUkVQT1JUX0VSUk9SLCAgIC8qIFBhc3MgdGhpcyBlcnJvciBiYWNrIG91dCBvZiB0aGUgc20uICovCiAJU0NUUF9DTURfUkVQT1JUX0JBRF9UQUcsIC8qIFZlcmlmaWNhdGlvbiB0YWdzIGRpZG4ndCBtYXRjaC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggOWUyMjZiZS4uOWY4MGE3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTYyLDEzICs2Miw2IEBACiAgKiAgIGFuZCB3aWxsIGNvbnRpbnVlIHRvIGV2b2x2ZS4KICAqLwogCi0KLQotI2lmZGVmIFRFU1RfRlJBTUUKLSN1bmRlZiBDT05GSUdfU0NUUF9EQkdfT0JKQ05UCi0jdW5kZWYgQ09ORklHX1NZU0NUTAotI2VuZGlmIC8qIFRFU1RfRlJBTUUgKi8KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggY2M5ZDViYy4uNGJiMWZmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtODY3LDcgKzg2Nyw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza193bWVtX2ZyZWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlza2JfdHJ1ZXNpemVfY2hlY2soc2tiKTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1FVRVVFX1NIUlVOSyk7CiAJc2stPnNrX3dtZW1fcXVldWVkIC09IHNrYi0+dHJ1ZXNpemU7CiAJc2tfbWVtX3VuY2hhcmdlKHNrLCBza2ItPnRydWVzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggMjE4MjM1ZC4uZTU0Yzc2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTQ4MSw3ICs0ODEsMTYgQEAKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsYXJnZSk7CitleHRlcm4gdW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2spOworCisvKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCitzdGF0aWMgaW5saW5lIGludCB0Y3BfYm91bmRfdG9faGFsZl93bmQoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IHBrdHNpemUpCit7CisJaWYgKHRwLT5tYXhfd2luZG93ICYmIHBrdHNpemUgPiAodHAtPm1heF93aW5kb3cgPj4gMSkpCisJCXJldHVybiBtYXgodHAtPm1heF93aW5kb3cgPj4gMSwgNjhVIC0gdHAtPnRjcF9oZWFkZXJfbGVuKTsKKwllbHNlCisJCXJldHVybiBwa3RzaXplOworfQogCiAvKiB0Y3AuYyAqLwogZXh0ZXJuIHZvaWQgdGNwX2dldF9pbmZvKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0Y3BfaW5mbyAqKTsKQEAgLTY4NSw2ICs2OTQsNyBAQAogZXh0ZXJuIGludCB0Y3Bfc2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmFsbG93ZWQpOwogZXh0ZXJuIGludCB0Y3Bfc2V0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgdGNwX3Nsb3dfc3RhcnQoc3RydWN0IHRjcF9zb2NrICp0cCk7CitleHRlcm4gdm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdyk7CiAKIGV4dGVybiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9pbml0X2Nvbmdlc3Rpb25fb3BzOwogZXh0ZXJuIHUzMiB0Y3BfcmVub19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spOwpAQCAtODIxLDE1ICs4MzEsMTUgQEAKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAotCV9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHRjcF9jdXJyZW50X21zcyhzaywgMSksIHRwLT5ub25hZ2xlKTsKKwlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spLCB0cC0+bm9uYWdsZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfaW5pdF93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrLCB1MzIgc2VxKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9pbml0X3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEpCiB7CiAJdHAtPnNuZF93bDEgPSBzZXE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfdXBkYXRlX3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBhY2ssIHUzMiBzZXEpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3VwZGF0ZV93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgc2VxKQogewogCXRwLT5zbmRfd2wxID0gc2VxOwogfQpAQCAtOTI1LDcgKzkzNSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NhY2tfcmVzZXQoc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQpCiB7CiAJcnhfb3B0LT5kc2FjayA9IDA7Ci0Jcnhfb3B0LT5lZmZfc2Fja3MgPSAwOwogCXJ4X29wdC0+bnVtX3NhY2tzID0gMDsKIH0KIApAQCAtOTk3LDExICsxMDA2LDIxIEBACiAJcmV0dXJuIGZpbl90aW1lb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCB0Y3BfcGF3c19jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCwgaW50IHJzdCkKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9wYXdzX2NoZWNrKGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LAorCQkJCSBpbnQgcGF3c193aW4pCiB7Ci0JaWYgKChzMzIpKHJ4X29wdC0+cmN2X3RzdmFsIC0gcnhfb3B0LT50c19yZWNlbnQpID49IDApCi0JCXJldHVybiAwOwotCWlmIChnZXRfc2Vjb25kcygpID49IHJ4X29wdC0+dHNfcmVjZW50X3N0YW1wICsgVENQX1BBV1NfMjREQVlTKQorCWlmICgoczMyKShyeF9vcHQtPnRzX3JlY2VudCAtIHJ4X29wdC0+cmN2X3RzdmFsKSA8PSBwYXdzX3dpbikKKwkJcmV0dXJuIDE7CisJaWYgKHVubGlrZWx5KGdldF9zZWNvbmRzKCkgPj0gcnhfb3B0LT50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y3BfcGF3c19yZWplY3QoY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsCisJCQkJICBpbnQgcnN0KQoreworCWlmICh0Y3BfcGF3c19jaGVjayhyeF9vcHQsIDApKQogCQlyZXR1cm4gMDsKIAogCS8qIFJTVCBzZWdtZW50cyBhcmUgbm90IHJlY29tbWVuZGVkIHRvIGNhcnJ5IHRpbWVzdGFtcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3VkcC5oIGIvaW5jbHVkZS9uZXQvdWRwLmgKaW5kZXggOTBlNmNlNS4uOTNkYmUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdWRwLmgKKysrIGIvaW5jbHVkZS9uZXQvdWRwLmgKQEAgLTEyNCw2ICsxMjQsOCBAQAogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIH0KIAorZXh0ZXJuIGludAlpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKIGV4dGVybiBpbnQJdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCiAJCWludCAoKikoY29uc3Qgc3RydWN0IHNvY2sqLGNvbnN0IHN0cnVjdCBzb2NrKikpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oIGIvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaAppbmRleCAxYzYyODVlLi42NGE3NjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKQEAgLTY5LDYgKzY5LDkgQEAKICAqIEBiYW5kOiBiYW5kIHRoaXMgY2hhbm5lbCBiZWxvbmdzIHRvLgogICogQG1heF9hbnRlbm5hX2dhaW46IG1heGltdW0gYW50ZW5uYSBnYWluIGluIGRCaQogICogQG1heF9wb3dlcjogbWF4aW11bSB0cmFuc21pc3Npb24gcG93ZXIgKGluIGRCbSkKKyAqIEBiZWFjb25fZm91bmQ6IGhlbHBlciB0byByZWd1bGF0b3J5IGNvZGUgdG8gaW5kaWNhdGUgd2hlbiBhIGJlYWNvbgorICoJaGFzIGJlZW4gZm91bmQgb24gdGhpcyBjaGFubmVsLiBVc2UgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbigpCisgKgl0byBlbmFibGUgdGhpcywgdGhpcyBpcyBpcyB1c2VmdWwgb25seSBvbiA1IEdIeiBiYW5kLgogICogQG9yaWdfbWFnOiBpbnRlcm5hbCB1c2UKICAqIEBvcmlnX21wd3I6IGludGVybmFsIHVzZQogICovCkBAIC04MCw2ICs4Myw3IEBACiAJdTMyIGZsYWdzOwogCWludCBtYXhfYW50ZW5uYV9nYWluOwogCWludCBtYXhfcG93ZXI7CisJYm9vbCBiZWFjb25fZm91bmQ7CiAJdTMyIG9yaWdfZmxhZ3M7CiAJaW50IG9yaWdfbWFnLCBvcmlnX21wd3I7CiB9OwpAQCAtMjAwLDYgKzIwNCw3IEBACiAgKiAJdGhlIHJlZ3VsYXRvcnlfaGludCgpIEFQSS4gVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZHJpdmVyCiAgKglvbiB0aGUgcmVnX25vdGlmaWVyKCkgaWYgaXQgY2hvb3NlcyB0byBpZ25vcmUgZnV0dXJlCiAgKglyZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzIGNhdXNlZCBieSBvdGhlciBkcml2ZXJzLgorICogQHNpZ25hbF90eXBlOiBzaWduYWwgdHlwZSByZXBvcnRlZCBpbiAmc3RydWN0IGNmZzgwMjExX2Jzcy4KICAqLwogc3RydWN0IHdpcGh5IHsKIAkvKiBhc3NpZ24gdGhlc2UgZmllbGRzIGJlZm9yZSB5b3UgcmVnaXN0ZXIgdGhlIHdpcGh5ICovCkBAIC0yMTMsNiArMjE4LDggQEAKIAlib29sIGN1c3RvbV9yZWd1bGF0b3J5OwogCWJvb2wgc3RyaWN0X3JlZ3VsYXRvcnk7CiAKKwllbnVtIGNmZzgwMjExX3NpZ25hbF90eXBlIHNpZ25hbF90eXBlOworCiAJaW50IGJzc19wcml2X3NpemU7CiAJdTggbWF4X3NjYW5fc3NpZHM7CiAKQEAgLTM5OCw4ICs0MDUsMTUgQEAKICAqIGRvbWFpbiBzaG91bGQgYmUgaW4gb3IgYnkgcHJvdmlkaW5nIGEgY29tcGxldGVseSBidWlsZCByZWd1bGF0b3J5IGRvbWFpbi4KICAqIElmIHRoZSBkcml2ZXIgcHJvdmlkZXMgYW4gSVNPL0lFQyAzMTY2IGFscGhhMiB1c2Vyc3BhY2Ugd2lsbCBiZSBxdWVyaWVkCiAgKiBmb3IgYSByZWd1bGF0b3J5IGRvbWFpbiBzdHJ1Y3R1cmUgZm9yIHRoZSByZXNwZWN0aXZlIGNvdW50cnkuCisgKgorICogVGhlIHdpcGh5IG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgdG8gY2ZnODAyMTEgcHJpb3IgdG8gdGhpcyBjYWxsLgorICogRm9yIGNmZzgwMjExIGRyaXZlcnMgdGhpcyBtZWFucyB5b3UgbXVzdCBmaXJzdCB1c2Ugd2lwaHlfcmVnaXN0ZXIoKSwKKyAqIGZvciBtYWM4MDIxMSBkcml2ZXJzIHlvdSBtdXN0IGZpcnN0IHVzZSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKS4KKyAqCisgKiBEcml2ZXJzIHNob3VsZCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCBpdHMgcG9zc2libGUgeW91IGNhbiBnZXQKKyAqIGFuIC1FTk9NRU0uCiAgKi8KLWV4dGVybiB2b2lkIHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpOworZXh0ZXJuIGludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKTsKIAogLyoqCiAgKiByZWd1bGF0b3J5X2hpbnRfMTFkIC0gaGludHMgYSBjb3VudHJ5IElFIGFzIGEgcmVndWxhdG9yeSBkb21haW4KQEAgLTQxNSw3ICs0MjksNiBAQAogZXh0ZXJuIHZvaWQgcmVndWxhdG9yeV9oaW50XzExZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCXU4ICpjb3VudHJ5X2llLAogCQkJCXU4IGNvdW50cnlfaWVfbGVuKTsKLQogLyoqCiAgKiB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSAtIGFwcGx5IGEgY3VzdG9tIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgogICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUgcmVndWxhdG9yeSBkb21haW4gb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9jbS5oIGIvaW5jbHVkZS9yZG1hL2liX2NtLmgKaW5kZXggZWM3YzZkOS4uOTM4ODU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX2NtLmgKQEAgLTMxNCwxMiArMzE0LDEyIEBACiAgKi8KIHZvaWQgaWJfZGVzdHJveV9jbV9pZChzdHJ1Y3QgaWJfY21faWQgKmNtX2lkKTsKIAotI2RlZmluZSBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRjAwMDAwMDAwMDAwMDAwVUxMKQotI2RlZmluZSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCBfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDIwMDAwMDAwMDAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSUQJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAwMDAwMDAwMDEwMDAwMDBVTEwpCi0jZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lEX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGRkZGRkZGRkYwMDAwMDBVTEwpCi0jZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lECV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAwMDEwMDAwVUxMKQotI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGRkYwMDAwVUxMKQorI2RlZmluZSBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLCWNwdV90b19iZTY0KDB4RkYwMDAwMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQJY3B1X3RvX2JlNjQoMHgwMjAwMDAwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAwMDAwMDAwMDEwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lEX01BU0sJY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGMDAwMDAwVUxMKQorI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAwMDAwMDAwMDAwMTAwMDBVTEwpCisjZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lEX01BU0sJY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGRkYwMDAwVUxMKQogCiBzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhIHsKIAl1OCAgZGF0YVtJQl9DTV9DT01QQVJFX1NJWkVdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX21hZC5oIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oCmluZGV4IDVmNmM0MGYuLmQzYjk0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2RlZmluZQlJQl9NR01UX1JNUFBfU1RBVFVTX0FCT1JUX01BWAkJMTI3CiAKICNkZWZpbmUgSUJfUVAwCQkwCi0jZGVmaW5lIElCX1FQMQkJX19jb25zdGFudF9odG9ubCgxKQorI2RlZmluZSBJQl9RUDEJCWNwdV90b19iZTMyKDEpCiAjZGVmaW5lIElCX1FQMV9RS0VZCTB4ODAwMTAwMDAKICNkZWZpbmUgSUJfUVBfU0VUX1FLRVkJMHg4MDAwMDAwMAogCkBAIC0yOTAsNyArMjkwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGliX3NldF9ybXBwX2ZsYWdzKHN0cnVjdCBpYl9ybXBwX2hkciAqcm1wcF9oZHIsIHU4IGZsYWdzKQogewotCXJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzID0gKHJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzICYgMHhGMSkgfAorCXJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzID0gKHJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzICYgMHhGOCkgfAogCQkJCSAgICAgKGZsYWdzICYgMHg3KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3NtaS5oIGIvaW5jbHVkZS9yZG1hL2liX3NtaS5oCmluZGV4IGFhY2EwODcuLjk4YjkwODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9zbWkuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfc21pLmgKQEAgLTYzLDI1ICs2MywyNSBAQAogCXU4CXJldHVybl9wYXRoW0lCX1NNUF9NQVhfUEFUSF9IT1BTXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElCX1NNUF9ESVJFQ1RJT04JCQlfX2NvbnN0YW50X2h0b25zKDB4ODAwMCkKKyNkZWZpbmUgSUJfU01QX0RJUkVDVElPTgkJCWNwdV90b19iZTE2KDB4ODAwMCkKIAogLyogU3VibmV0IG1hbmFnZW1lbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBJQl9TTVBfQVRUUl9OT1RJQ0UJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9ERVNDCQkJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1NNUF9BVFRSX05PREVfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBJQl9TTVBfQVRUUl9TV0lUQ0hfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEyKQotI2RlZmluZSBJQl9TTVBfQVRUUl9HVUlEX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUE9SVF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTUpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1BLRVlfVEFCTEUJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNikKLSNkZWZpbmUgSUJfU01QX0FUVFJfU0xfVE9fVkxfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE3KQotI2RlZmluZSBJQl9TTVBfQVRUUl9WTF9BUkJfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE4KQotI2RlZmluZSBJQl9TTVBfQVRUUl9MSU5FQVJfRk9SV0FSRF9UQUJMRQlfX2NvbnN0YW50X2h0b25zKDB4MDAxOSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUkFORE9NX0ZPUldBUkRfVEFCTEUJX19jb25zdGFudF9odG9ucygweDAwMUEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX01DQVNUX0ZPUldBUkRfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFCKQotI2RlZmluZSBJQl9TTVBfQVRUUl9TTV9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMjApCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9ESUFHCQkJX19jb25zdGFudF9odG9ucygweDAwMzApCi0jZGVmaW5lIElCX1NNUF9BVFRSX0xFRF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMzEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9NQVNLCQkJX19jb25zdGFudF9odG9ucygweEZGMDApCisjZGVmaW5lIElCX1NNUF9BVFRSX05PVElDRQkJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9ERVNDCQkJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTEpCisjZGVmaW5lIElCX1NNUF9BVFRSX1NXSVRDSF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBJQl9TTVBfQVRUUl9HVUlEX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTQpCisjZGVmaW5lIElCX1NNUF9BVFRSX1BPUlRfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxNSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUEtFWV9UQUJMRQkJCWNwdV90b19iZTE2KDB4MDAxNikKKyNkZWZpbmUgSUJfU01QX0FUVFJfU0xfVE9fVkxfVEFCTEUJCWNwdV90b19iZTE2KDB4MDAxNykKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkxfQVJCX1RBQkxFCQljcHVfdG9fYmUxNigweDAwMTgpCisjZGVmaW5lIElCX1NNUF9BVFRSX0xJTkVBUl9GT1JXQVJEX1RBQkxFCWNwdV90b19iZTE2KDB4MDAxOSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUkFORE9NX0ZPUldBUkRfVEFCTEUJY3B1X3RvX2JlMTYoMHgwMDFBKQorI2RlZmluZSBJQl9TTVBfQVRUUl9NQ0FTVF9GT1JXQVJEX1RBQkxFCQljcHVfdG9fYmUxNigweDAwMUIpCisjZGVmaW5lIElCX1NNUF9BVFRSX1NNX0lORk8JCQljcHVfdG9fYmUxNigweDAwMjApCisjZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9ESUFHCQkJY3B1X3RvX2JlMTYoMHgwMDMwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9MRURfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAzMSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX01BU0sJCQljcHVfdG9fYmUxNigweEZGMDApCiAKIHN0cnVjdCBpYl9wb3J0X2luZm8gewogCV9fYmU2NCBta2V5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Zjb2UuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mY29lLmgKaW5kZXggNTdhYWE4Zi4uZjI3MWQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Zjb2UuaAorKysgYi9pbmNsdWRlL3Njc2kvZmMvZmNfZmNvZS5oCkBAIC0zMSwxMCArMzEsNiBAQAogI2RlZmluZQlFVEhfUF9GQ09FCTB4ODkwNgkJLyogRkNPRSBldGhlciB0eXBlICovCiAjZW5kaWYKIAotI2lmbmRlZiBFVEhfUF84MDIxUQotI2RlZmluZQlFVEhfUF84MDIxUQkweDgxMDAKLSNlbmRpZgotCiAvKgogICogRkNfRkNPRV9PVUkgaGFzbid0IGJlZW4gc3RhbmRhcmRpemVkIHlldC4gICBYWFggVEJELgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmMvZmNfZnMuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mcy5oCmluZGV4IDNlNDgwMWQuLjFiN2FmM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mYy9mY19mcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9mYy9mY19mcy5oCkBAIC0zMzcsNCArMzM3LDkgQEAKIAlGQ19SSlRfVkVORE9SID0JCTB4ZmYsCS8qIHZlbmRvciBzcGVjaWZpYyByZWplY3QgKi8KIH07CiAKKy8qIGRlZmF1bHQgdGltZW91dCB2YWx1ZXMgKi8KKworI2RlZmluZSBGQ19ERUZfRV9EX1RPVgkyMDAwVUwKKyNkZWZpbmUgRkNfREVGX1JfQV9UT1YJMTAwMDBVTAorCiAjZW5kaWYgLyogX0ZDX0ZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliZmMuaCBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCmluZGV4IDlmMjg3NjMuLmEyZTEyNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJmYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCkBAIC02OCw5ICs2OCw2IEBACiAvKgogICogRkMgSEJBIHN0YXR1cwogICovCi0jZGVmaW5lIEZDX1BBVVNFCQkgICAgKDEgPDwgMSkKLSNkZWZpbmUgRkNfTElOS19VUAkJICAgICgxIDw8IDApCi0KIGVudW0gZmNfbHBvcnRfc3RhdGUgewogCUxQT1JUX1NUX05PTkUgPSAwLAogCUxQT1JUX1NUX0ZMT0dJLApAQCAtMzM5LDMxICszMzYsMTcgQEAKIAogc3RydWN0IGxpYmZjX2Z1bmN0aW9uX3RlbXBsYXRlIHsKIAotCS8qKgotCSAqIE1hbmRhdG9yeSBGaWVsZHMKLQkgKgotCSAqIFRoZXNlIGhhbmRsZXJzIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIExMRC4KLQkgKi8KLQogCS8qCiAJICogSW50ZXJmYWNlIHRvIHNlbmQgYSBGQyBmcmFtZQorCSAqCisJICogU1RBVFVTOiBSRVFVSVJFRAogCSAqLwogCWludCAoKmZyYW1lX3NlbmQpKHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19mcmFtZSAqZnApOwogCi0JLyoqCi0JICogT3B0aW9uYWwgRmllbGRzCi0JICoKLQkgKiBUaGUgTExEIG1heSBjaG9vc2UgdG8gaW1wbGVtZW50IGFueSBvZiB0aGUgZm9sbG93aW5nIGhhbmRsZXJzLgotCSAqIElmIExMRCBkb2Vzbid0IHNwZWNpZnkgaGFuZGVyIGFuZCBsZWF2ZXMgaXRzIHBvaW50ZXIgTlVMTCB0aGVuCi0JICogdGhlIGRlZmF1bHQgbGliZmMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIGZvciB0aGF0IGhhbmRsZXIuCi0JICovCi0KLQkvKioKLQkgKiBFTFMvQ1QgaW50ZXJmYWNlcwotCSAqLwotCiAJLyoKLQkgKiBlbHNjdF9zZW5kIC0gc2VuZHMgRUxTL0NUIGZyYW1lCisJICogSW50ZXJmYWNlIHRvIHNlbmQgRUxTL0NUIGZyYW1lcworCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXN0cnVjdCBmY19zZXEgKigqZWxzY3Rfc2VuZCkoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKIAkJCQkgICAgIHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsCkBAIC0zNzMsOSArMzU2LDYgQEAKIAkJCQkJICAgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAogCQkJCQkgICAgIHZvaWQgKmFyZyksCiAJCQkJICAgICB2b2lkICphcmcsIHUzMiB0aW1lcl9tc2VjKTsKLQkvKioKLQkgKiBFeGhhbmNlIE1hbmFnZXIgaW50ZXJmYWNlcwotCSAqLwogCiAJLyoKIAkgKiBTZW5kIHRoZSBGQyBmcmFtZSBwYXlsb2FkIHVzaW5nIGEgbmV3IGV4Y2hhbmdlIGFuZCBzZXF1ZW5jZS4KQEAgLTQwNyw2ICszODcsOCBAQAogCSAqIHRpbWVyX21zZWMgYXJndW1lbnQgaXMgc3BlY2lmaWVkLiBUaGUgdGltZXIgaXMgY2FuY2VsZWQgd2hlbgogCSAqIGl0IGZpcmVzIG9yIHdoZW4gdGhlIGV4Y2hhbmdlIGlzIGRvbmUuIFRoZSBleGNoYW5nZSB0aW1lb3V0IGhhbmRsZXIKIAkgKiBpcyByZWdpc3RlcmVkIGJ5IEVNIGxheWVyLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXN0cnVjdCBmY19zZXEgKigqZXhjaF9zZXFfc2VuZCkoc3RydWN0IGZjX2xwb3J0ICpscCwKIAkJCQkJc3RydWN0IGZjX2ZyYW1lICpmcCwKQEAgLTQxOCwxNCArNDAwLDE4IEBACiAJCQkJCXZvaWQgKmFyZywgdW5zaWduZWQgaW50IHRpbWVyX21zZWMpOwogCiAJLyoKLQkgKiBzZW5kIGEgZnJhbWUgdXNpbmcgZXhpc3Rpbmcgc2VxdWVuY2UgYW5kIGV4Y2hhbmdlLgorCSAqIFNlbmQgYSBmcmFtZSB1c2luZyBhbiBleGlzdGluZyBzZXF1ZW5jZSBhbmQgZXhjaGFuZ2UuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJaW50ICgqc2VxX3NlbmQpKHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19zZXEgKnNwLAogCQkJc3RydWN0IGZjX2ZyYW1lICpmcCk7CiAKIAkvKgotCSAqIFNlbmQgRUxTIHJlc3BvbnNlIHVzaW5nIG1haW5seSBpbmZvbWF0aW9uCi0JICogaW4gZXhjaGFuZ2UgYW5kIHNlcXVlbmNlIGluIEVNIGxheWVyLgorCSAqIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbSBhIHByZXZpb3VzCisJICogZXhjaGFuZ2UgYW5kIHNlcXVlbmNlLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpzZXFfZWxzX3JzcF9zZW5kKShzdHJ1Y3QgZmNfc2VxICpzcCwgZW51bSBmY19lbHNfY21kIGVsc19jbWQsCiAJCQkJIHN0cnVjdCBmY19zZXFfZWxzX2RhdGEgKmVsc19kYXRhKTsKQEAgLTQzNyw2ICs0MjMsOCBAQAogCSAqIEEgdGltZXJfbXNlYyBjYW4gYmUgc3BlY2lmaWVkIGZvciBhYm9ydCB0aW1lb3V0LCBpZiBub24temVybwogCSAqIHRpbWVyX21zZWMgdmFsdWUgaXMgc3BlY2lmaWVkIHRoZW4gZXhjaGFuZ2UgcmVzcCBoYW5kbGVyCiAJICogd2lsbCBiZSBjYWxsZWQgd2l0aCB0aW1lb3V0IGVycm9yIGlmIG5vIHJlc3BvbnNlIHRvIGFib3J0LgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCWludCAoKnNlcV9leGNoX2Fib3J0KShjb25zdCBzdHJ1Y3QgZmNfc2VxICpyZXFfc3AsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZXJfbXNlYyk7CkBAIC00NDQsNiArNDMyLDggQEAKIAkvKgogCSAqIEluZGljYXRlIHRoYXQgYW4gZXhjaGFuZ2Uvc2VxdWVuY2UgdHVwbGUgaXMgY29tcGxldGUgYW5kIHRoZSBtZW1vcnkKIAkgKiBhbGxvY2F0ZWQgZm9yIHRoZSByZWxhdGVkIG9iamVjdHMgbWF5IGJlIGZyZWVkLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpleGNoX2RvbmUpKHN0cnVjdCBmY19zZXEgKnNwKTsKIApAQCAtNDUxLDYgKzQ0MSw4IEBACiAJICogQXNzaWducyBhIEVNIGFuZCBhIGZyZWUgWElEIGZvciBhbiBuZXcgZXhjaGFuZ2UgYW5kIHRoZW4KIAkgKiBhbGxvY2F0ZXMgYSBuZXcgZXhjaGFuZ2UgYW5kIHNlcXVlbmNlIHBhaXIuCiAJICogVGhlIGZwIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBmcmVlIFhJRC4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAlzdHJ1Y3QgZmNfZXhjaCAqKCpleGNoX2dldCkoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZyYW1lICpmcCk7CiAKQEAgLTQ1OCwxMiArNDUwLDE2IEBACiAJICogUmVsZWFzZSBwcmV2aW91c2x5IGFzc2lnbmVkIFhJRCBieSBleGNoX2dldCBBUEkuCiAJICogVGhlIExMRCBtYXkgaW1wbGVtZW50IHRoaXMgaWYgWElEIGlzIGFzc2lnbmVkIGJ5IExMRAogCSAqIGluIGV4Y2hfZ2V0KCkuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJdm9pZCAoKmV4Y2hfcHV0KShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLAogCQkJIHUxNiBleF9pZCk7CiAKIAkvKgogCSAqIFN0YXJ0IGEgbmV3IHNlcXVlbmNlIG9uIHRoZSBzYW1lIGV4Y2hhbmdlL3NlcXVlbmNlIHR1cGxlLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXN0cnVjdCBmY19zZXEgKigqc2VxX3N0YXJ0X25leHQpKHN0cnVjdCBmY19zZXEgKnNwKTsKIApAQCAtNDcxLDI2ICs0NjcsMzggQEAKIAkgKiBSZXNldCBhbiBleGNoYW5nZSBtYW5hZ2VyLCBjb21wbGV0aW5nIGFsbCBzZXF1ZW5jZXMgYW5kIGV4Y2hhbmdlcy4KIAkgKiBJZiBzX2lkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5IGV4Y2hhbmdlcyBvcmlnaW5hdGluZyBmcm9tIHRoYXQgRklELgogCSAqIElmIGRfaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIHNlbmRpbmcgdG8gdGhhdCBGSUQuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCi0Jdm9pZCAoKmV4Y2hfbWdyX3Jlc2V0KShzdHJ1Y3QgZmNfZXhjaF9tZ3IgKiwKKwl2b2lkICgqZXhjaF9tZ3JfcmVzZXQpKHN0cnVjdCBmY19scG9ydCAqLAogCQkJICAgICAgIHUzMiBzX2lkLCB1MzIgZF9pZCk7CiAKLQl2b2lkICgqcnBvcnRfZmx1c2hfcXVldWUpKHZvaWQpOwotCS8qKgotCSAqIExvY2FsIFBvcnQgaW50ZXJmYWNlcworCS8qCisJICogRmx1c2ggdGhlIHJwb3J0IHdvcmsgcXVldWUuIEdlbmVyYWxseSB1c2VkIGJlZm9yZSBzaHV0ZG93bi4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KKwl2b2lkICgqcnBvcnRfZmx1c2hfcXVldWUpKHZvaWQpOwogCiAJLyoKLQkgKiBSZWNlaXZlIGEgZnJhbWUgdG8gYSBsb2NhbCBwb3J0LgorCSAqIFJlY2VpdmUgYSBmcmFtZSBmb3IgYSBsb2NhbCBwb3J0LgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpscG9ydF9yZWN2KShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfc2VxICpzcCwKIAkJCSAgIHN0cnVjdCBmY19mcmFtZSAqZnApOwogCisJLyoKKwkgKiBSZXNldCB0aGUgbG9jYWwgcG9ydC4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKKwkgKi8KIAlpbnQgKCpscG9ydF9yZXNldCkoc3RydWN0IGZjX2xwb3J0ICopOwogCi0JLyoqCi0JICogUmVtb3RlIFBvcnQgaW50ZXJmYWNlcworCS8qCisJICogQ3JlYXRlIGEgcmVtb3RlIHBvcnQKIAkgKi8KKwlzdHJ1Y3QgZmNfcnBvcnQgKigqcnBvcnRfY3JlYXRlKShzdHJ1Y3QgZmNfZGlzY19wb3J0ICopOwogCiAJLyoKIAkgKiBJbml0aWF0ZXMgdGhlIFJQIHN0YXRlIG1hY2hpbmUuIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSBMUCBtb2R1bGUuCkBAIC01MDAsMjYgKzUwOCwzMyBAQAogCSAqIC0gUExPR0kKIAkgKiAtIFBSTEkKIAkgKiAtIFJUVgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCWludCAoKnJwb3J0X2xvZ2luKShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KTsKIAogCS8qCiAJICogTG9nb2ZmLCBhbmQgcmVtb3ZlIHRoZSBycG9ydCBmcm9tIHRoZSB0cmFuc3BvcnQgaWYKIAkgKiBpdCBoYWQgYmVlbiBhZGRlZC4gVGhpcyB3aWxsIHNlbmQgYSBMT0dPIHRvIHRoZSB0YXJnZXQuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJaW50ICgqcnBvcnRfbG9nb2ZmKShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KTsKIAogCS8qCiAJICogUmVjaWV2ZSBhIHJlcXVlc3QgZnJvbSBhIHJlbW90ZSBwb3J0LgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpycG9ydF9yZWN2X3JlcSkoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKiwKIAkJCSAgICAgICBzdHJ1Y3QgZmNfcnBvcnQgKik7CiAKLQlzdHJ1Y3QgZmNfcnBvcnQgKigqcnBvcnRfbG9va3VwKShjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKiwgdTMyKTsKLQotCS8qKgotCSAqIEZDUCBpbnRlcmZhY2VzCisJLyoKKwkgKiBsb29rdXAgYW4gcnBvcnQgYnkgaXQncyBwb3J0IElELgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLworCXN0cnVjdCBmY19ycG9ydCAqKCpycG9ydF9sb29rdXApKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqLCB1MzIpOwogCiAJLyoKIAkgKiBTZW5kIGEgZmNwIGNtZCBmcm9tIGZzcCBwa3QuCkBAIC01MjcsMzAgKzU0MiwzOCBAQAogCSAqCiAJICogVGhlIHJlc3AgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiBGQ1BfUlNQIHJlY2VpdmVkLgogCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCWludCAoKmZjcF9jbWRfc2VuZCkoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCwKIAkJCSAgICB2b2lkICgqcmVzcCkoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAogCQkJCQkgdm9pZCAqYXJnKSk7CiAKIAkvKgotCSAqIFVzZWQgYXQgbGVhc3QgZHVycmluZyBsaW5rZG93biBhbmQgcmVzZXQKKwkgKiBDbGVhbnVwIHRoZSBGQ1AgbGF5ZXIsIHVzZWQgZHVycmluZyBsaW5rIGRvd24gYW5kIHJlc2V0CisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJdm9pZCAoKmZjcF9jbGVhbnVwKShzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIAogCS8qCiAJICogQWJvcnQgYWxsIEkvTyBvbiBhIGxvY2FsIHBvcnQKKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAl2b2lkICgqZmNwX2Fib3J0X2lvKShzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIAotCS8qKgotCSAqIERpc2NvdmVyeSBpbnRlcmZhY2VzCisJLyoKKwkgKiBSZWNlaXZlIGEgcmVxdWVzdCBmb3IgdGhlIGRpc2NvdmVyeSBsYXllci4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KLQogCXZvaWQgKCpkaXNjX3JlY3ZfcmVxKShzdHJ1Y3QgZmNfc2VxICosCiAJCQkgICAgICBzdHJ1Y3QgZmNfZnJhbWUgKiwgc3RydWN0IGZjX2xwb3J0ICopOwogCiAJLyoKIAkgKiBTdGFydCBkaXNjb3ZlcnkgZm9yIGEgbG9jYWwgcG9ydC4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAl2b2lkICgqZGlzY19zdGFydCkodm9pZCAoKmRpc2NfY2FsbGJhY2spKHN0cnVjdCBmY19scG9ydCAqLAogCQkJCQkJIGVudW0gZmNfZGlzY19ldmVudCksCkBAIC01NTksNiArNTgyLDggQEAKIAkvKgogCSAqIFN0b3AgZGlzY292ZXJ5IGZvciBhIGdpdmVuIGxwb3J0LiBUaGlzIHdpbGwgcmVtb3ZlCiAJICogYWxsIGRpc2NvdmVyZWQgcnBvcnRzCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJdm9pZCAoKmRpc2Nfc3RvcCkgKHN0cnVjdCBmY19scG9ydCAqKTsKIApAQCAtNTY2LDYgKzU5MSw4IEBACiAJICogU3RvcCBkaXNjb3ZlcnkgZm9yIGEgZ2l2ZW4gbHBvcnQuIFRoaXMgd2lsbCBibG9jawogCSAqIHVudGlsIGFsbCBkaXNjb3ZlcmVkIHJwb3J0cyBhcmUgZGVsZXRlZCBmcm9tIHRoZQogCSAqIEZDIHRyYW5zcG9ydCBjbGFzcworCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpkaXNjX3N0b3BfZmluYWwpIChzdHJ1Y3QgZmNfbHBvcnQgKik7CiB9OwpAQCAtNjAzLDcgKzYzMCw4IEBACiAKIAkvKiBPcGVyYXRpb25hbCBJbmZvcm1hdGlvbiAqLwogCXN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZSB0dDsKLQl1MTYJCQlsaW5rX3N0YXR1czsKKwl1OAkJCWxpbmtfdXA7CisJdTgJCQlxZnVsbDsKIAllbnVtIGZjX2xwb3J0X3N0YXRlCXN0YXRlOwogCXVuc2lnbmVkIGxvbmcJCWJvb3RfdGltZTsKIApAQCAtNjM3LDcgKzY2NSw3IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yawlkaXNjX3dvcms7CiB9OwogCi0vKioKKy8qCiAgKiBGQ19MUE9SVCBIRUxQRVIgRlVOQ1RJT05TCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmxwb3J0X3ByaXYoY29uc3Qgc3RydWN0IGZjX2xwb3J0ICpscCkKQEAgLTY2OSw3ICs2OTcsNyBAQAogfQogCiAKLS8qKgorLyoKICAqIExPQ0FMIFBPUlQgTEFZRVIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBmY19scG9ydF9pbml0KHN0cnVjdCBmY19scG9ydCAqbHApOwpAQCAtNzA0LDEyICs3MzIsNiBAQAogdm9pZCBmY19saW5rZG93bihzdHJ1Y3QgZmNfbHBvcnQgKik7CiAKIC8qCi0gKiBQYXVzZSBhbmQgdW5wYXVzZSB0cmFmZmljLgotICovCi12b2lkIGZjX3BhdXNlKHN0cnVjdCBmY19scG9ydCAqKTsKLXZvaWQgZmNfdW5wYXVzZShzdHJ1Y3QgZmNfbHBvcnQgKik7Ci0KLS8qCiAgKiBDb25maWd1cmUgdGhlIGxvY2FsIHBvcnQuCiAgKi8KIGludCBmY19scG9ydF9jb25maWcoc3RydWN0IGZjX2xwb3J0ICopOwpAQCAtNzI1LDE5ICs3NDcsMTkgQEAKIGludCBmY19zZXRfbWZzKHN0cnVjdCBmY19scG9ydCAqbHAsIHUzMiBtZnMpOwogCiAKLS8qKgorLyoKICAqIFJFTU9URSBQT1JUIExBWUVSCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgZmNfcnBvcnRfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIHZvaWQgZmNfcnBvcnRfdGVybWluYXRlX2lvKHN0cnVjdCBmY19ycG9ydCAqcnApOwogCi0vKioKKy8qCiAgKiBESVNDT1ZFUlkgTEFZRVIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBmY19kaXNjX2luaXQoc3RydWN0IGZjX2xwb3J0ICpscCk7CiAKIAotLyoqCisvKgogICogU0NTSSBMQVlFUgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKQEAgLTc5OCw3ICs4MjAsNyBAQAogICovCiB2b2lkIGZjX2ZjcF9kZXN0cm95KHN0cnVjdCBmY19scG9ydCAqKTsKIAotLyoqCisvKgogICogRUxTL0NUIGludGVyZmFjZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKQEAgLTgwNyw3ICs4MjksNyBAQAogaW50IGZjX2Vsc2N0X2luaXQoc3RydWN0IGZjX2xwb3J0ICpscCk7CiAKIAotLyoqCisvKgogICogRVhDSEFOR0UgTUFOQUdFUiBMQVlFUgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKQEAgLTkxNiw3ICs5MzgsNyBAQAogICogSWYgc19pZCBpcyBub24temVybywgcmVzZXQgb25seSBleGNoYW5nZXMgb3JpZ2luYXRpbmcgZnJvbSB0aGF0IEZJRC4KICAqIElmIGRfaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIHNlbmRpbmcgdG8gdGhhdCBGSUQuCiAgKi8KLXZvaWQgZmNfZXhjaF9tZ3JfcmVzZXQoc3RydWN0IGZjX2V4Y2hfbWdyICosIHUzMiBzX2lkLCB1MzIgZF9pZCk7Cit2b2lkIGZjX2V4Y2hfbWdyX3Jlc2V0KHN0cnVjdCBmY19scG9ydCAqLCB1MzIgc19pZCwgdTMyIGRfaWQpOwogCiAvKgogICogRnVuY3Rpb25zIGZvciBmY19mdW5jdGlvbnNfdGVtcGxhdGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJmY29lLmggYi9pbmNsdWRlL3Njc2kvbGliZmNvZS5oCmluZGV4IDg5ZmRiYjkuLjk0MTgxOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJmY29lLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaApAQCAtNDYsNiArNDYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpwaHlzX2RldjsJCS8qIGRldmljZSB3aXRoIGV0aHRvb2xfb3BzICovCiAJc3RydWN0IHBhY2tldF90eXBlICBmY29lX3BhY2tldF90eXBlOwogCXN0cnVjdCBza19idWZmX2hlYWQgZmNvZV9wZW5kaW5nX3F1ZXVlOworCXU4CWZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmU7CiAKIAl1OCBkZXN0X2FkZHJbRVRIX0FMRU5dOwogCXU4IGN0bF9zcmNfYWRkcltFVEhfQUxFTl07CkBAIC01OCwxNiArNTksMTAgQEAKIAl1OCBhZGRyZXNzX21vZGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmY29lX3NvZnRjICpmY29lX3NvZnRjKAotCWNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHApCi17Ci0JcmV0dXJuIChzdHJ1Y3QgZmNvZV9zb2Z0YyAqKWxwb3J0X3ByaXYobHApOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpmY29lX25ldGRldigKIAljb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewotCXJldHVybiBmY29lX3NvZnRjKGxwKS0+cmVhbF9kZXY7CisJcmV0dXJuICgoc3RydWN0IGZjb2Vfc29mdGMgKilscG9ydF9wcml2KGxwKSktPnJlYWxfZGV2OwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmY29lX2hkciAqc2tiX2Zjb2VfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaCBiL2luY2x1ZGUvc291bmQvYWQxODE2YS5oCmluZGV4IGIzYWE2MmUuLmQwMTA4NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWQxODE2YS5oCisrKyBiL2luY2x1ZGUvc291bmQvYWQxODE2YS5oCkBAIC0xNjksNSArMTY5LDcgQEAKIAogZXh0ZXJuIGludCBzbmRfYWQxODE2YV9wY20oc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwogZXh0ZXJuIGludCBzbmRfYWQxODE2YV9taXhlcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXApOworZXh0ZXJuIGludCBzbmRfYWQxODE2YV90aW1lcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsCisJCQkgICAgIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpOwogCiAjZW5kaWYJLyogX19TT1VORF9BRDE4MTZBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCmluZGV4IDFjMDJlZDEuLjZhZGQ4MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaApAQCAtMjMsOSArMjMsMTAgQEAKICNpZm5kZWYgX19TT1VORF9BU09VTkRfSAogI2RlZmluZSBfX1NPVU5EX0FTT1VORF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCkBAIC0xMjYsMTIgKzEyNywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CS8qIFc6IGRyaXZlci1zcGVjaWZpYyBkYXRhICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9IV0RFUF9JT0NUTF9QVkVSU0lPTiA9IF9JT1IgKCdIJywgMHgwMCwgaW50KSwKLQlTTkRSVl9IV0RFUF9JT0NUTF9JTkZPID0gX0lPUiAoJ0gnLCAweDAxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pLAotCVNORFJWX0hXREVQX0lPQ1RMX0RTUF9TVEFUVVMgPSBfSU9SKCdIJywgMHgwMiwgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzKSwKLQlTTkRSVl9IV0RFUF9JT0NUTF9EU1BfTE9BRCAgID0gX0lPVygnSCcsIDB4MDMsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlKQotfTsKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfUFZFUlNJT04JX0lPUiAoJ0gnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0lORk8JCV9JT1IgKCdIJywgMHgwMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9EU1BfU1RBVFVTCV9JT1IoJ0gnLCAweDAyLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMpCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0RTUF9MT0FECV9JT1coJ0gnLCAweDAzLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTM0Miw3ICszNDEsNyBAQAogI2RlZmluZSBTTkRSVl9NQVNLX01BWAkyNTYKIAogc3RydWN0IHNuZF9tYXNrIHsKLQl1X2ludDMyX3QgYml0c1soU05EUlZfTUFTS19NQVgrMzEpLzMyXTsKKwlfX3UzMiBiaXRzWyhTTkRSVl9NQVNLX01BWCszMSkvMzJdOwogfTsKIAogc3RydWN0IHNuZF9wY21faHdfcGFyYW1zIHsKQEAgLTM4NSw3ICszODQsNyBAQAogCiBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8gewogCXVuc2lnbmVkIGludCBjaGFubmVsOwotCW9mZl90IG9mZnNldDsJCQkvKiBtbWFwIG9mZnNldCAqLworCV9fa2VybmVsX29mZl90IG9mZnNldDsJCS8qIG1tYXAgb2Zmc2V0ICovCiAJdW5zaWduZWQgaW50IGZpcnN0OwkJLyogb2Zmc2V0IHRvIGZpcnN0IHNhbXBsZSBpbiBiaXRzICovCiAJdW5zaWduZWQgaW50IHN0ZXA7CQkvKiBzYW1wbGVzIGRpc3RhbmNlIGluIGJpdHMgKi8KIH07CkBAIC00NTEsNDAgKzQ1MCwzNSBAQAogCVNORFJWX1BDTV9UU1RBTVBfVFlQRV9MQVNUID0gU05EUlZfUENNX1RTVEFNUF9UWVBFX01PTk9UT05JQywKIH07CiAKLWVudW0gewotCVNORFJWX1BDTV9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ0EnLCAweDAwLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9JTkZPID0gX0lPUignQScsIDB4MDEsIHN0cnVjdCBzbmRfcGNtX2luZm8pLAotCVNORFJWX1BDTV9JT0NUTF9UU1RBTVAgPSBfSU9XKCdBJywgMHgwMiwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfVFRTVEFNUCA9IF9JT1coJ0EnLCAweDAzLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9IV19SRUZJTkUgPSBfSU9XUignQScsIDB4MTAsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyksCi0JU05EUlZfUENNX0lPQ1RMX0hXX1BBUkFNUyA9IF9JT1dSKCdBJywgMHgxMSwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKSwKLQlTTkRSVl9QQ01fSU9DVExfSFdfRlJFRSA9IF9JTygnQScsIDB4MTIpLAotCVNORFJWX1BDTV9JT0NUTF9TV19QQVJBTVMgPSBfSU9XUignQScsIDB4MTMsIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcyksCi0JU05EUlZfUENNX0lPQ1RMX1NUQVRVUyA9IF9JT1IoJ0EnLCAweDIwLCBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMpLAotCVNORFJWX1BDTV9JT0NUTF9ERUxBWSA9IF9JT1IoJ0EnLCAweDIxLCBzbmRfcGNtX3NmcmFtZXNfdCksCi0JU05EUlZfUENNX0lPQ1RMX0hXU1lOQyA9IF9JTygnQScsIDB4MjIpLAotCVNORFJWX1BDTV9JT0NUTF9TWU5DX1BUUiA9IF9JT1dSKCdBJywgMHgyMywgc3RydWN0IHNuZF9wY21fc3luY19wdHIpLAotCVNORFJWX1BDTV9JT0NUTF9DSEFOTkVMX0lORk8gPSBfSU9SKCdBJywgMHgzMiwgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvKSwKLQlTTkRSVl9QQ01fSU9DVExfUFJFUEFSRSA9IF9JTygnQScsIDB4NDApLAotCVNORFJWX1BDTV9JT0NUTF9SRVNFVCA9IF9JTygnQScsIDB4NDEpLAotCVNORFJWX1BDTV9JT0NUTF9TVEFSVCA9IF9JTygnQScsIDB4NDIpLAotCVNORFJWX1BDTV9JT0NUTF9EUk9QID0gX0lPKCdBJywgMHg0MyksCi0JU05EUlZfUENNX0lPQ1RMX0RSQUlOID0gX0lPKCdBJywgMHg0NCksCi0JU05EUlZfUENNX0lPQ1RMX1BBVVNFID0gX0lPVygnQScsIDB4NDUsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX1JFV0lORCA9IF9JT1coJ0EnLCAweDQ2LCBzbmRfcGNtX3VmcmFtZXNfdCksCi0JU05EUlZfUENNX0lPQ1RMX1JFU1VNRSA9IF9JTygnQScsIDB4NDcpLAotCVNORFJWX1BDTV9JT0NUTF9YUlVOID0gX0lPKCdBJywgMHg0OCksCi0JU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQgPSBfSU9XKCdBJywgMHg0OSwgc25kX3BjbV91ZnJhbWVzX3QpLAotCVNORFJWX1BDTV9JT0NUTF9XUklURUlfRlJBTUVTID0gX0lPVygnQScsIDB4NTAsIHN0cnVjdCBzbmRfeGZlcmkpLAotCVNORFJWX1BDTV9JT0NUTF9SRUFESV9GUkFNRVMgPSBfSU9SKCdBJywgMHg1MSwgc3RydWN0IHNuZF94ZmVyaSksCi0JU05EUlZfUENNX0lPQ1RMX1dSSVRFTl9GUkFNRVMgPSBfSU9XKCdBJywgMHg1Miwgc3RydWN0IHNuZF94ZmVybiksCi0JU05EUlZfUENNX0lPQ1RMX1JFQUROX0ZSQU1FUyA9IF9JT1IoJ0EnLCAweDUzLCBzdHJ1Y3Qgc25kX3hmZXJuKSwKLQlTTkRSVl9QQ01fSU9DVExfTElOSyA9IF9JT1coJ0EnLCAweDYwLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9VTkxJTksgPSBfSU8oJ0EnLCAweDYxKSwKLX07Ci0KLS8qIFRyaWNrIHRvIG1ha2UgYWxzYS1saWIvYWNpbmNsdWRlLm00IGhhcHB5ICovCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQgU05EUlZfUENNX0lPQ1RMX1JFV0lORAorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUFZFUlNJT04JX0lPUignQScsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0lORk8JCV9JT1IoJ0EnLCAweDAxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFNUQU1QCQlfSU9XKCdBJywgMHgwMiwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFRTVEFNUAkJX0lPVygnQScsIDB4MDMsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1JFRklORQlfSU9XUignQScsIDB4MTAsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1BBUkFNUwlfSU9XUignQScsIDB4MTEsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX0ZSRUUJCV9JTygnQScsIDB4MTIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TV19QQVJBTVMJX0lPV1IoJ0EnLCAweDEzLCBzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TVEFUVVMJCV9JT1IoJ0EnLCAweDIwLCBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9ERUxBWQkJX0lPUignQScsIDB4MjEsIHNuZF9wY21fc2ZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdTWU5DCQlfSU8oJ0EnLCAweDIyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1lOQ19QVFIJX0lPV1IoJ0EnLCAweDIzLCBzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0cikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0NIQU5ORUxfSU5GTwlfSU9SKCdBJywgMHgzMiwgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUFJFUEFSRQkJX0lPKCdBJywgMHg0MCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU0VUCQlfSU8oJ0EnLCAweDQxKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBUlQJCV9JTygnQScsIDB4NDIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUk9QCQlfSU8oJ0EnLCAweDQzKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRFJBSU4JCV9JTygnQScsIDB4NDQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QQVVTRQkJX0lPVygnQScsIDB4NDUsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFV0lORAkJX0lPVygnQScsIDB4NDYsIHNuZF9wY21fdWZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVTVU1FCQlfSU8oJ0EnLCAweDQ3KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfWFJVTgkJX0lPKCdBJywgMHg0OCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQJCV9JT1coJ0EnLCAweDQ5LCBzbmRfcGNtX3VmcmFtZXNfdCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1dSSVRFSV9GUkFNRVMJX0lPVygnQScsIDB4NTAsIHN0cnVjdCBzbmRfeGZlcmkpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFESV9GUkFNRVMJX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRfeGZlcmkpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURU5fRlJBTUVTCV9JT1coJ0EnLCAweDUyLCBzdHJ1Y3Qgc25kX3hmZXJuKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVBRE5fRlJBTUVTCV9JT1IoJ0EnLCAweDUzLCBzdHJ1Y3Qgc25kX3hmZXJuKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfTElOSwkJX0lPVygnQScsIDB4NjAsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1VOTElOSwkJX0lPKCdBJywgMHg2MSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTUzOCwxNCArNTMyLDEyIEBACiAJdW5zaWduZWQgY2hhciByZXNlcnZlZFsxNl07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignVycsIDB4MDAsIGludCksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9JTkZPID0gX0lPUignVycsIDB4MDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX1BBUkFNUyA9IF9JT1dSKCdXJywgMHgxMCwgc3RydWN0IHNuZF9yYXdtaWRpX3BhcmFtcyksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9TVEFUVVMgPSBfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMpLAotCVNORFJWX1JBV01JRElfSU9DVExfRFJPUCA9IF9JT1coJ1cnLCAweDMwLCBpbnQpLAotCVNORFJWX1JBV01JRElfSU9DVExfRFJBSU4gPSBfSU9XKCdXJywgMHgzMSwgaW50KSwKLX07CisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfUFZFUlNJT04JX0lPUignVycsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9JTkZPCV9JT1IoJ1cnLCAweDAxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbykKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9QQVJBTVMJX0lPV1IoJ1cnLCAweDEwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1NUQVRVUwlfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfRFJPUAlfSU9XKCdXJywgMHgzMCwgaW50KQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0RSQUlOCV9JT1coJ1cnLCAweDMxLCBpbnQpCiAKIC8qCiAgKiAgVGltZXIgc2VjdGlvbiAtIC9kZXYvc25kL3RpbWVyCkBAIC02NTQsMjMgKzY0NiwyMSBAQAogCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfVElNRVJfSU9DVExfUFZFUlNJT04gPSBfSU9SKCdUJywgMHgwMCwgaW50KSwKLQlTTkRSVl9USU1FUl9JT0NUTF9ORVhUX0RFVklDRSA9IF9JT1dSKCdUJywgMHgwMSwgc3RydWN0IHNuZF90aW1lcl9pZCksCi0JU05EUlZfVElNRVJfSU9DVExfVFJFQUQgPSBfSU9XKCdUJywgMHgwMiwgaW50KSwKLQlTTkRSVl9USU1FUl9JT0NUTF9HSU5GTyA9IF9JT1dSKCdUJywgMHgwMywgc3RydWN0IHNuZF90aW1lcl9naW5mbyksCi0JU05EUlZfVElNRVJfSU9DVExfR1BBUkFNUyA9IF9JT1coJ1QnLCAweDA0LCBzdHJ1Y3Qgc25kX3RpbWVyX2dwYXJhbXMpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0dTVEFUVVMgPSBfSU9XUignVCcsIDB4MDUsIHN0cnVjdCBzbmRfdGltZXJfZ3N0YXR1cyksCi0JU05EUlZfVElNRVJfSU9DVExfU0VMRUNUID0gX0lPVygnVCcsIDB4MTAsIHN0cnVjdCBzbmRfdGltZXJfc2VsZWN0KSwKLQlTTkRSVl9USU1FUl9JT0NUTF9JTkZPID0gX0lPUignVCcsIDB4MTEsIHN0cnVjdCBzbmRfdGltZXJfaW5mbyksCi0JU05EUlZfVElNRVJfSU9DVExfUEFSQU1TID0gX0lPVygnVCcsIDB4MTIsIHN0cnVjdCBzbmRfdGltZXJfcGFyYW1zKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9TVEFUVVMgPSBfSU9SKCdUJywgMHgxNCwgc3RydWN0IHNuZF90aW1lcl9zdGF0dXMpLAotCS8qIFRoZSBmb2xsb3dpbmcgZm91ciBpb2N0bHMgYXJlIGNoYW5nZWQgc2luY2UgMS4wLjkgZHVlIHRvIGNvbmZsaWN0aW9uICovCi0JU05EUlZfVElNRVJfSU9DVExfU1RBUlQgPSBfSU8oJ1QnLCAweGEwKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9TVE9QID0gX0lPKCdUJywgMHhhMSksCi0JU05EUlZfVElNRVJfSU9DVExfQ09OVElOVUUgPSBfSU8oJ1QnLCAweGEyKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9QQVVTRSA9IF9JTygnVCcsIDB4YTMpLAotfTsKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUFZFUlNJT04JX0lPUignVCcsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfTkVYVF9ERVZJQ0UJX0lPV1IoJ1QnLCAweDAxLCBzdHJ1Y3Qgc25kX3RpbWVyX2lkKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9UUkVBRAkJX0lPVygnVCcsIDB4MDIsIGludCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR0lORk8JCV9JT1dSKCdUJywgMHgwMywgc3RydWN0IHNuZF90aW1lcl9naW5mbykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR1BBUkFNUwlfSU9XKCdUJywgMHgwNCwgc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HU1RBVFVTCV9JT1dSKCdUJywgMHgwNSwgc3RydWN0IHNuZF90aW1lcl9nc3RhdHVzKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TRUxFQ1QJX0lPVygnVCcsIDB4MTAsIHN0cnVjdCBzbmRfdGltZXJfc2VsZWN0KQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9JTkZPCQlfSU9SKCdUJywgMHgxMSwgc3RydWN0IHNuZF90aW1lcl9pbmZvKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QQVJBTVMJX0lPVygnVCcsIDB4MTIsIHN0cnVjdCBzbmRfdGltZXJfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TVEFUVVMJX0lPUignVCcsIDB4MTQsIHN0cnVjdCBzbmRfdGltZXJfc3RhdHVzKQorLyogVGhlIGZvbGxvd2luZyBmb3VyIGlvY3RscyBhcmUgY2hhbmdlZCBzaW5jZSAxLjAuOSBkdWUgdG8gY29uZmxpY3Rpb24gKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBUlQJCV9JTygnVCcsIDB4YTApCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUT1AJCV9JTygnVCcsIDB4YTEpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0NPTlRJTlVFCV9JTygnVCcsIDB4YTIpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BBVVNFCQlfSU8oJ1QnLCAweGEzKQogCiBzdHJ1Y3Qgc25kX3RpbWVyX3JlYWQgewogCXVuc2lnbmVkIGludCByZXNvbHV0aW9uOwpAQCAtNzg5LDcgKzc3OSw3IEBACiAJc25kX2N0bF9lbGVtX3R5cGVfdCB0eXBlOwkvKiBSOiB2YWx1ZSB0eXBlIC0gU05EUlZfQ1RMX0VMRU1fVFlQRV8qICovCiAJdW5zaWduZWQgaW50IGFjY2VzczsJCS8qIFI6IHZhbHVlIGFjY2VzcyAoYml0bWFzaykgLSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfKiAqLwogCXVuc2lnbmVkIGludCBjb3VudDsJCS8qIGNvdW50IG9mIHZhbHVlcyAqLwotCXBpZF90IG93bmVyOwkJCS8qIG93bmVyJ3MgUElEIG9mIHRoaXMgY29udHJvbCAqLworCV9fa2VybmVsX3BpZF90IG93bmVyOwkJLyogb3duZXIncyBQSUQgb2YgdGhpcyBjb250cm9sICovCiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJbG9uZyBtaW47CQkvKiBSOiBtaW5pbXVtIHZhbHVlICovCkBAIC04NDcsMzMgKzgzNywzMSBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgdGx2WzBdOwkvKiBmaXJzdCBUTFYgKi8KIH07CiAKLWVudW0gewotCVNORFJWX0NUTF9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ1UnLCAweDAwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9DQVJEX0lORk8gPSBfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZF9jdGxfY2FyZF9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9MSVNUID0gX0lPV1IoJ1UnLCAweDEwLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2xpc3QpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0lORk8gPSBfSU9XUignVScsIDB4MTEsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVBRCA9IF9JT1dSKCdVJywgMHgxMiwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fV1JJVEUgPSBfSU9XUignVScsIDB4MTMsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0xPQ0sgPSBfSU9XKCdVJywgMHgxNCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fVU5MT0NLID0gX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpLAotCVNORFJWX0NUTF9JT0NUTF9TVUJTQ1JJQkVfRVZFTlRTID0gX0lPV1IoJ1UnLCAweDE2LCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0FERCA9IF9JT1dSKCdVJywgMHgxNywgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9SRVBMQUNFID0gX0lPV1IoJ1UnLCAweDE4LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1JFTU9WRSA9IF9JT1dSKCdVJywgMHgxOSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCksCi0JU05EUlZfQ1RMX0lPQ1RMX1RMVl9SRUFEID0gX0lPV1IoJ1UnLCAweDFhLCBzdHJ1Y3Qgc25kX2N0bF90bHYpLAotCVNORFJWX0NUTF9JT0NUTF9UTFZfV1JJVEUgPSBfSU9XUignVScsIDB4MWIsIHN0cnVjdCBzbmRfY3RsX3RsdiksCi0JU05EUlZfQ1RMX0lPQ1RMX1RMVl9DT01NQU5EID0gX0lPV1IoJ1UnLCAweDFjLCBzdHJ1Y3Qgc25kX2N0bF90bHYpLAotCVNORFJWX0NUTF9JT0NUTF9IV0RFUF9ORVhUX0RFVklDRSA9IF9JT1dSKCdVJywgMHgyMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfSFdERVBfSU5GTyA9IF9JT1IoJ1UnLCAweDIxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9QQ01fTkVYVF9ERVZJQ0UgPSBfSU9SKCdVJywgMHgzMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUENNX0lORk8gPSBfSU9XUignVScsIDB4MzEsIHN0cnVjdCBzbmRfcGNtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9QQ01fUFJFRkVSX1NVQkRFVklDRSA9IF9JT1coJ1UnLCAweDMyLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9SQVdNSURJX05FWFRfREVWSUNFID0gX0lPV1IoJ1UnLCAweDQwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9SQVdNSURJX0lORk8gPSBfSU9XUignVScsIDB4NDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfUkFXTUlESV9QUkVGRVJfU1VCREVWSUNFID0gX0lPVygnVScsIDB4NDIsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1BPV0VSID0gX0lPV1IoJ1UnLCAweGQwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9QT1dFUl9TVEFURSA9IF9JT1IoJ1UnLCAweGQxLCBpbnQpLAotfTsKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1UnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9DQVJEX0lORk8JX0lPUignVScsIDB4MDEsIHN0cnVjdCBzbmRfY3RsX2NhcmRfaW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTElTVAlfSU9XUignVScsIDB4MTAsIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fSU5GTwlfSU9XUignVScsIDB4MTEsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVBRAlfSU9XUignVScsIDB4MTIsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1dSSVRFCV9JT1dSKCdVJywgMHgxMywgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTE9DSwlfSU9XKCdVJywgMHgxNCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fVU5MT0NLCV9JT1coJ1UnLCAweDE1LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfU1VCU0NSSUJFX0VWRU5UUyBfSU9XUignVScsIDB4MTYsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fQURECV9JT1dSKCdVJywgMHgxNywgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRVBMQUNFCV9JT1dSKCdVJywgMHgxOCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRU1PVkUJX0lPV1IoJ1UnLCAweDE5LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfVExWX1JFQUQJX0lPV1IoJ1UnLCAweDFhLCBzdHJ1Y3Qgc25kX2N0bF90bHYpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfV1JJVEUJX0lPV1IoJ1UnLCAweDFiLCBzdHJ1Y3Qgc25kX2N0bF90bHYpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfQ09NTUFORAlfSU9XUignVScsIDB4MWMsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHgyMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfSFdERVBfSU5GTwlfSU9SKCdVJywgMHgyMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX05FWFRfREVWSUNFCV9JT1IoJ1UnLCAweDMwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QQ01fSU5GTwlfSU9XUignVScsIDB4MzEsIHN0cnVjdCBzbmRfcGNtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QQ01fUFJFRkVSX1NVQkRFVklDRSBfSU9XKCdVJywgMHgzMiwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9ORVhUX0RFVklDRSBfSU9XUignVScsIDB4NDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfSU5GTwlfSU9XUignVScsIDB4NDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDQyLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QT1dFUgkJX0lPV1IoJ1UnLCAweGQwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QT1dFUl9TVEFURQlfSU9SKCdVJywgMHhkMSwgaW50KQogCiAvKgogICogIFJlYWQgaW50ZXJmYWNlLgpAQCAtOTE5LDE4ICs5MDcsNCBAQAogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfUENNX1NUUkVBTQkJIlBDTSBTdHJlYW0iCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OChleHBsLGRpcmVjdGlvbix3aGF0KQkiSUVDOTU4ICIgZXhwbCBTTkRSVl9DVExfTkFNRV8jI2RpcmVjdGlvbiBTTkRSVl9DVExfTkFNRV9JRUM5NThfIyN3aGF0CiAKLS8qCi0gKgotICovCi0KLXN0cnVjdCBzbmRfeGZlcnYgewotCWNvbnN0IHN0cnVjdCBpb3ZlYyAqdmVjdG9yOwotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci19OwotCi1lbnVtIHsKLQlTTkRSVl9JT0NUTF9SRUFEViA9IF9JT1coJ0snLCAweDAwLCBzdHJ1Y3Qgc25kX3hmZXJ2KSwKLQlTTkRSVl9JT0NUTF9XUklURVYgPSBfSU9XKCdLJywgMHgwMSwgc3RydWN0IHNuZF94ZmVydiksCi19OwotCiAjZW5kaWYgLyogX19TT1VORF9BU09VTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYmRhYy5oIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYmRhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZmY2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFiZGFjLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FCREFDX0gKKyNkZWZpbmUgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FCREFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworLyoqCisgKiBzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgLSBib2FyZCBzcGVjaWZpYyBBQkRBQyBjb25maWd1cmF0aW9uCisgKiBAZHdzOiBETUEgc2xhdmUgaW50ZXJmYWNlIHRvIHVzZSBmb3Igc291bmQgcGxheWJhY2suCisgKi8KK3N0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSB7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQlkd3M7Cit9OworCisjZW5kaWYgLyogX19JTkNMVURFX1NPVU5EX0FUTUVMX0FCREFDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXRtZWwtYWM5N2MuaCBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWM5N2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFhYmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYzk3Yy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQzk3Q19ICisjZGVmaW5lIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQzk3Q19ICisKKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisKKyNkZWZpbmUgQUM5N0NfQ0FQVFVSRQkweDAxCisjZGVmaW5lIEFDOTdDX1BMQVlCQUNLCTB4MDIKKyNkZWZpbmUgQUM5N0NfQk9USAkoQUM5N0NfQ0FQVFVSRSB8IEFDOTdDX1BMQVlCQUNLKQorCisvKioKKyAqIHN0cnVjdCBhdG1lbF9hYzk3Y19wZGF0YSAtIGJvYXJkIHNwZWNpZmljIEFDOTdDIGNvbmZpZ3VyYXRpb24KKyAqIEByeF9kd3M6IERNQSBzbGF2ZSBpbnRlcmZhY2UgdG8gdXNlIGZvciBzb3VuZCBjYXB0dXJlLgorICogQHR4X2R3czogRE1BIHNsYXZlIGludGVyZmFjZSB0byB1c2UgZm9yIHNvdW5kIHBsYXliYWNrLgorICogQHJlc2V0X3BpbjogR1BJTyBwaW4gd2lyZWQgdG8gdGhlIHJlc2V0IGlucHV0IG9uIHRoZSBleHRlcm5hbCBBQzk3IGNvZGVjLAorICogICAgICAgICAgICAgb3B0aW9uYWwgdG8gdXNlLCBzZXQgdG8gLUVOT0RFViBpZiBub3QgaW4gdXNlLiBBQzk3IGxheWVyIHdpbGwKKyAqICAgICAgICAgICAgIHRyeSB0byBkbyBhIHNvZnR3YXJlIHJlc2V0IG9mIHRoZSBleHRlcm5hbCBjb2RlYyBhbnl3YXkuCisgKiBAZmxhZ3M6IEZsYWdzIGZvciB3aGljaCBkaXJlY3Rpb25zIHNob3VsZCBiZSBlbmFibGVkLgorICoKKyAqIElmIHRoZSB1c2VyIGRvIG5vdCB3YW50IHRvIHVzZSBhIERNQSBjaGFubmVsIGZvciBwbGF5YmFjayBvciBjYXB0dXJlLCBpLmUuCisgKiBvbmx5IG9uZSBmZWF0dXJlIGlzIHJlcXVpcmVkIG9uIHRoZSBib2FyZC4gVGhlIHNsYXZlIGZvciBwbGF5YmFjayBvciBjYXB0dXJlCisgKiBjYW4gYmUgc2V0IHRvIE5VTEwuIFRoZSBBQzk3QyBkcml2ZXIgd2lsbCB0YWtlIHVzZSBvZiB0aGlzIHdoZW4gc2V0dGluZyB1cAorICogdGhlIHNvdW5kIHN0cmVhbXMuCisgKi8KK3N0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCXJ4X2R3czsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCXR4X2R3czsKKwl1bnNpZ25lZCBpbnQgCQlmbGFnczsKKwlpbnQJCQlyZXNldF9waW47Cit9OworCisjZW5kaWYgLyogX19JTkNMVURFX1NPVU5EX0FUTUVMX0FDOTdDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oIGIvaW5jbHVkZS9zb3VuZC9jb250cm9sLmgKaW5kZXggNDcyMWI0Yi4uZWY5NmYwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jb250cm9sLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jb250cm9sLmgKQEAgLTE3MSw2ICsxNzEsNTQgQEAKICAqLwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKGNoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgdW5zaWduZWQgaW50ICp0bHYpOwotaW50IHNuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpOwotCQkgICAgICAKK2ludCBfc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisvKiBvcHRpb25hbCBmbGFncyBmb3Igc2xhdmUgKi8KKyNkZWZpbmUgU05EX0NUTF9TTEFWRV9ORUVEX1VQREFURQkoMSA8PCAwKQorCisvKioKKyAqIHNuZF9jdGxfYWRkX3NsYXZlIC0gQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sCisgKiBAbWFzdGVyOiB2bWFzdGVyIGVsZW1lbnQKKyAqIEBzbGF2ZTogc2xhdmUgZWxlbWVudCB0byBhZGQKKyAqCisgKiBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wgdG8gdGhlIGdpdmVuIG1hc3RlciBlbGVtZW50IGNyZWF0ZWQgdmlhCisgKiBzbmRfY3RsX2NyZWF0ZV92aXJ0dWFsX21hc3RlcigpIGJlZm9yZWhhbmQuCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKgorICogQWxsIHNsYXZlcyBtdXN0IGJlIHRoZSBzYW1lIHR5cGUgKHJldHVybmluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbgorICogdmlhIGluZm8gY2FsbGJhY2spLiAgVGhlIGZ1Y250aW9uIGRvZXNuJ3QgY2hlY2sgaXQsIHNvIGl0J3MgeW91cgorICogcmVzcG9uc2liaWxpdHkuCisgKgorICogQWxzbywgc29tZSBhZGRpdGlvbmFsIGxpbWl0YXRpb25zOgorICogYXQgbW9zdCB0d28gY2hhbm5lbHMsCisgKiBsb2dhcml0aG1pYyB2b2x1bWUgY29udHJvbCAoZEIgbGV2ZWwpIHRodXMgbm8gbGluZWFyIHZvbHVtZSwKKyAqIG1hc3RlciBjYW4gb25seSBhdHRlbnVhdGUgdGhlIHZvbHVtZSB3aXRob3V0IGdhaW4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpCit7CisJcmV0dXJuIF9zbmRfY3RsX2FkZF9zbGF2ZShtYXN0ZXIsIHNsYXZlLCAwKTsKK30KKworLyoqCisgKiBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCAtIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbAorICogQG1hc3Rlcjogdm1hc3RlciBlbGVtZW50CisgKiBAc2xhdmU6IHNsYXZlIGVsZW1lbnQgdG8gYWRkCisgKgorICogQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sIHRvIHRoZSBnaXZlbiBtYXN0ZXIuCisgKiBVbmxpa2Ugc25kX2N0bF9hZGRfc2xhdmUoKSwgdGhlIGVsZW1lbnQgYWRkZWQgdmlhIHRoaXMgZnVuY3Rpb24KKyAqIGlzIHN1cHBvc2VkIHRvIGhhdmUgdm9sYXRpbGUgdmFsdWVzLCBhbmQgZ2V0IGNhbGxiYWNrIGlzIGNhbGxlZAorICogYXQgZWFjaCB0aW1lIHF1cmllZCBmcm9tIHRoZSBtYXN0ZXIuCisgKgorICogV2hlbiB0aGUgY29udHJvbCBwZWVrcyB0aGUgaGFyZHdhcmUgdmFsdWVzIGRpcmVjdGx5IGFuZCB0aGUgdmFsdWUKKyAqIGNhbiBiZSBjaGFuZ2VkIGJ5IG90aGVyIG1lYW5zIHRoYW4gdGhlIHB1dCBjYWxsYmFjayBvZiB0aGUgZWxlbWVudCwKKyAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8ga2VlcCB0aGUgdmFsdWUgYWx3YXlzIHVwLXRvLWRhdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZChzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsCisJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK3sKKwlyZXR1cm4gX3NuZF9jdGxfYWRkX3NsYXZlKG1hc3Rlciwgc2xhdmUsIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUpOworfQorCiAjZW5kaWYJLyogX19TT1VORF9DT05UUk9MX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29yZS5oIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKaW5kZXggZjYzMjQ4NC4uM2RlYTc5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jb3JlLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKQEAgLTk3LDkgKzk3LDkgQEAKIAogc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgewogCXN0cnVjdCBmaWxlICpmaWxlOwotCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICpuZXh0OwogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmRpc2Nvbm5lY3RlZF9mX29wOwotCXN0cnVjdCBsaXN0X2hlYWQgc2h1dGRvd25fbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNodXRkb3duX2xpc3Q7CS8qIHN0aWxsIG5lZWQgdG8gc2h1dGRvd24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIGxpbmsgb2YgbW9uaXRvciBmaWxlcyAqLwogfTsKIAogLyogbWFpbiBzdHJ1Y3R1cmUgZm9yIHNvdW5kY2FyZCAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2lkOwkvKiB0aGUgY2FyZCBpZCAqLwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2xpbms7CS8qIG51bWJlciBsaW5rIHRvIHJlYWwgaWQgKi8KIAotCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICpmaWxlczsgLyogYWxsIGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhpcyBjYXJkICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxlc19saXN0OwkvKiBhbGwgZmlsZXMgYXNzb2NpYXRlZCB0byB0aGlzIGNhcmQgKi8KIAlzdHJ1Y3Qgc25kX3NodXRkb3duX2Zfb3BzICpzX2Zfb3BzOyAvKiBmaWxlIG9wZXJhdGlvbnMgaW4gdGhlIHNodXRkb3duCiAJCQkJCQkJCXN0YXRlICovCiAJc3BpbmxvY2tfdCBmaWxlc19sb2NrOwkJLyogbG9jayB0aGUgZmlsZXMgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMjk2LDggKzI5NiwyMCBAQAogZXh0ZXJuIGludCAoKnNuZF9taXhlcl9vc3Nfbm90aWZ5X2NhbGxiYWNrKShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBjbWQpOwogI2VuZGlmCiAKK2ludCBzbmRfY2FyZF9jcmVhdGUoaW50IGlkeCwgY29uc3QgY2hhciAqaWQsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplLAorCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZF9yZXQpOworCitzdGF0aWMgaW5saW5lIF9fZGVwcmVjYXRlZAogc3RydWN0IHNuZF9jYXJkICpzbmRfY2FyZF9uZXcoaW50IGlkeCwgY29uc3QgY2hhciAqaWQsCi0JCQkgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSk7CisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpZiAoc25kX2NhcmRfY3JlYXRlKGlkeCwgaWQsIG1vZHVsZSwgZXh0cmFfc2l6ZSwgJmNhcmQpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNhcmQ7Cit9CisKIGludCBzbmRfY2FyZF9kaXNjb25uZWN0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CiBpbnQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwogaW50IHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKQEAgLTQ0NiwyMSArNDU4LDMzIEBACiBzdHJ1Y3Qgc25kX3BjaV9xdWlyayB7CiAJdW5zaWduZWQgc2hvcnQgc3VidmVuZG9yOwkvKiBQQ0kgc3VidmVuZG9yIElEICovCiAJdW5zaWduZWQgc2hvcnQgc3ViZGV2aWNlOwkvKiBQQ0kgc3ViZGV2aWNlIElEICovCisJdW5zaWduZWQgc2hvcnQgc3ViZGV2aWNlX21hc2s7CS8qIGJpdG1hc2sgdG8gbWF0Y2ggKi8KIAlpbnQgdmFsdWU7CQkJLyogdmFsdWUgKi8KICNpZmRlZiBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UKIAljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgZGV2aWNlIChvcHRpb25hbCkgKi8KICNlbmRpZgogfTsKIAotI2RlZmluZSBfU05EX1BDSV9RVUlSS19JRCh2ZW5kLGRldikgXAotCS5zdWJ2ZW5kb3IgPSAodmVuZCksIC5zdWJkZXZpY2UgPSAoZGV2KQorI2RlZmluZSBfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIG1hc2ssIGRldikJXAorCS5zdWJ2ZW5kb3IgPSAodmVuZCksIC5zdWJkZXZpY2UgPSAoZGV2KSwgLnN1YmRldmljZV9tYXNrID0gKG1hc2spCisjZGVmaW5lIF9TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldikgXAorCV9TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgMHhmZmZmLCBkZXYpCiAjZGVmaW5lIFNORF9QQ0lfUVVJUktfSUQodmVuZCxkZXYpIHtfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpfQogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogI2RlZmluZSBTTkRfUENJX1FVSVJLKHZlbmQsZGV2LHhuYW1lLHZhbCkgXAogCXtfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpLCAudmFsdWUgPSAodmFsKSwgLm5hbWUgPSAoeG5hbWUpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX1ZFTkRPUih2ZW5kLCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCAwLCAwKSwgLnZhbHVlID0gKHZhbCksIC5uYW1lID0gKHhuYW1lKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19NQVNLKHZlbmQsIG1hc2ssIGRldiwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgbWFzaywgZGV2KSwJCQlcCisJCQkudmFsdWUgPSAodmFsKSwgLm5hbWUgPSAoeG5hbWUpfQogI2Vsc2UKICNkZWZpbmUgU05EX1BDSV9RVUlSSyh2ZW5kLGRldix4bmFtZSx2YWwpIFwKIAl7X1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KSwgLnZhbHVlID0gKHZhbCl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfTUFTSyh2ZW5kLCBtYXNrLCBkZXYsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIG1hc2ssIGRldiksIC52YWx1ZSA9ICh2YWwpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX1ZFTkRPUih2ZW5kLCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCAwLCAwKSwgLnZhbHVlID0gKHZhbCl9CiAjZW5kaWYKIAogY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmggYi9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaAppbmRleCAxMGVlMjhlLi42YTY2NGMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaAorKysgYi9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19TT1VORF9FTVUxMEsxX0gKICNkZWZpbmUgX19TT1VORF9FTVUxMEsxX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiwKICAqCQkgICAgIENyZWF0aXZlIExhYnMsIEluYy4KQEAgLTM0LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxzb3VuZC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBERUZJTkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yMTcxLDcgKzIxNzQsNyBAQAogCWNoYXIgbmFtZVsxMjhdOwogCiAJREVDTEFSRV9CSVRNQVAoZ3ByX3ZhbGlkLCAweDIwMCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5pdGlhbGl6ZXJzICovCi0JdV9pbnQzMl90IF9fdXNlciAqZ3ByX21hcDsJICAvKiBpbml0aWFsaXplcnMgKi8KKwlfX3UzMiBfX3VzZXIgKmdwcl9tYXA7CQkvKiBpbml0aWFsaXplcnMgKi8KIAogCXVuc2lnbmVkIGludCBncHJfYWRkX2NvbnRyb2xfY291bnQ7IC8qIGNvdW50IG9mIEdQUiBjb250cm9scyB0byBhZGQvcmVwbGFjZSAqLwogCXN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29udHJvbF9ncHIgX191c2VyICpncHJfYWRkX2NvbnRyb2xzOyAvKiBHUFIgY29udHJvbHMgdG8gYWRkL3JlcGxhY2UgKi8KQEAgLTIxODQsMTEgKzIxODcsMTEgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2NvbnRyb2xfZ3ByIF9fdXNlciAqZ3ByX2xpc3RfY29udHJvbHM7IC8qIGxpc3RlZCBHUFIgY29udHJvbHMgKi8KIAogCURFQ0xBUkVfQklUTUFQKHRyYW1fdmFsaWQsIDB4MTAwKTsgLyogYml0bWFzayBvZiB2YWxpZCBpbml0aWFsaXplcnMgKi8KLQl1X2ludDMyX3QgX191c2VyICp0cmFtX2RhdGFfbWFwOyAgLyogZGF0YSBpbml0aWFsaXplcnMgKi8KLQl1X2ludDMyX3QgX191c2VyICp0cmFtX2FkZHJfbWFwOyAgLyogbWFwIGluaXRpYWxpemVycyAqLworCV9fdTMyIF9fdXNlciAqdHJhbV9kYXRhX21hcDsJICAvKiBkYXRhIGluaXRpYWxpemVycyAqLworCV9fdTMyIF9fdXNlciAqdHJhbV9hZGRyX21hcDsJICAvKiBtYXAgaW5pdGlhbGl6ZXJzICovCiAKIAlERUNMQVJFX0JJVE1BUChjb2RlX3ZhbGlkLCAxMDI0KTsgLyogYml0bWFzayBvZiB2YWxpZCBpbnN0cnVjdGlvbnMgKi8KLQl1X2ludDMyX3QgX191c2VyICpjb2RlOwkJICAvKiBvbmUgaW5zdHJ1Y3Rpb24gLSA2NCBiaXRzICovCisJX191MzIgX191c2VyICpjb2RlOwkJICAvKiBvbmUgaW5zdHJ1Y3Rpb24gLSA2NCBiaXRzICovCiB9OwogCiBzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX3RyYW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9od2RlcC5oIGIvaW5jbHVkZS9zb3VuZC9od2RlcC5oCmluZGV4IGQ5ZWVhMDEuLjhjMDVlNDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9od2RlcC5oCkBAIC0yNywxOCArMjcsMjggQEAKIAogc3RydWN0IHNuZF9od2RlcDsKIAorLyogaHdkZXAgZmlsZSBvcHM7IGFsbCBvcHMgY2FuIGJlIE5VTEwgKi8KIHN0cnVjdCBzbmRfaHdkZXBfb3BzIHsKLQlsb25nIGxvbmcgKCpsbHNlZWspIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgb3JpZyk7Ci0JbG9uZyAoKnJlYWQpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY2hhciBfX3VzZXIgKmJ1ZiwgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOwotCWxvbmcgKCp3cml0ZSkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7Ci0JaW50ICgqb3BlbikgKHN0cnVjdCBzbmRfaHdkZXAgKiBodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKLQlpbnQgKCpyZWxlYXNlKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7Ci0JdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KTsKLQlpbnQgKCppb2N0bCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQlpbnQgKCppb2N0bF9jb21wYXQpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0JaW50ICgqbW1hcCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSk7Ci0JaW50ICgqZHNwX3N0YXR1cykgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKnN0YXR1cyk7Ci0JaW50ICgqZHNwX2xvYWQpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UgKmltYWdlKTsKKwlsb25nIGxvbmcgKCpsbHNlZWspKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgb3JpZyk7CisJbG9uZyAoKnJlYWQpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKKwlsb25nICgqd3JpdGUpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgICBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7CisJaW50ICgqb3Blbikoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7CisJaW50ICgqcmVsZWFzZSkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7CisJdW5zaWduZWQgaW50ICgqcG9sbCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICBwb2xsX3RhYmxlICp3YWl0KTsKKwlpbnQgKCppb2N0bCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlpbnQgKCppb2N0bF9jb21wYXQpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqbW1hcCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCWludCAoKmRzcF9zdGF0dXMpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAorCQkJICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKnN0YXR1cyk7CisJaW50ICgqZHNwX2xvYWQpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAorCQkJc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UgKmltYWdlKTsKIH07CiAKIHN0cnVjdCBzbmRfaHdkZXAgewpAQCAtNjEsOSArNzEsOSBAQAogCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCk7CiAKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKLQlpbnQgdXNlZDsKLQl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsKLQl1bnNpZ25lZCBpbnQgZXhjbHVzaXZlOiAxOworCWludCB1c2VkOwkJCS8qIHJlZmVyZW5jZSBjb3VudGVyICovCisJdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7CS8qIGJpdCBmaWVsZHMgb2YgbG9hZGVkIGRzcCBpbmRpY2VzICovCisJdW5zaWduZWQgaW50IGV4Y2x1c2l2ZToxOwkvKiBleGNsdXNpdmUgYWNjZXNzIG1vZGUgKi8KIH07CiAKIGV4dGVybiBpbnQgc25kX2h3ZGVwX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNoYXIgKmlkLCBpbnQgZGV2aWNlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9qYWNrLmggYi9pbmNsdWRlL3NvdW5kL2phY2suaAppbmRleCAyZTAzMTVjLi42YjAxM2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2phY2suaAorKysgYi9pbmNsdWRlL3NvdW5kL2phY2suaApAQCAtMzAsNiArMzAsOSBAQAogLyoqCiAgKiBKYWNrIHR5cGVzIHdoaWNoIGNhbiBiZSByZXBvcnRlZC4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBhcyBhCiAgKiBiaXRtYXNrLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGxvb2t1cCB0YWJsZSBpbgorICogc291bmQvY29yZS9qYWNrLmMuCiAgKi8KIGVudW0gc25kX2phY2tfdHlwZXMgewogCVNORF9KQUNLX0hFQURQSE9ORQk9IDB4MDAwMSwKQEAgLTM3LDYgKzQwLDggQEAKIAlTTkRfSkFDS19IRUFEU0VUCT0gU05EX0pBQ0tfSEVBRFBIT05FIHwgU05EX0pBQ0tfTUlDUk9QSE9ORSwKIAlTTkRfSkFDS19MSU5FT1VUCT0gMHgwMDA0LAogCVNORF9KQUNLX01FQ0hBTklDQUwJPSAweDAwMDgsIC8qIElmIGRldGVjdGVkIHNlcGFyYXRlbHkgKi8KKwlTTkRfSkFDS19WSURFT09VVAk9IDB4MDAxMCwKKwlTTkRfSkFDS19BVk9VVAkJPSBTTkRfSkFDS19MSU5FT1VUIHwgU05EX0pBQ0tfVklERU9PVVQsCiB9OwogCiBzdHJ1Y3Qgc25kX2phY2sgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggNDBjNWE2Zi4uODkwNGIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0zNjQsNyArMzY0LDYgQEAKICAgICAgICAgLyogLS0gdGltZXIgc2VjdGlvbiAtLSAqLwogCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOwkJLyogdGltZXIgKi8KIAl1bnNpZ25lZCB0aW1lcl9ydW5uaW5nOiAxOwkvKiB0aW1lIGlzIHJ1bm5pbmcgKi8KLQlzcGlubG9ja190IHRpbWVyX2xvY2s7CiAJLyogLS0gbmV4dCBzdWJzdHJlYW0gLS0gKi8KIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKm5leHQ7CiAJLyogLS0gbGlua2VkIHN1YnN0cmVhbXMgLS0gKi8KQEAgLTQ1MSw3ICs0NTAsNyBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbmRfcGNtX2Zfb3BzWzJdOwogCi1pbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKK2ludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZGV2aWNlLAogCQlpbnQgcGxheWJhY2tfY291bnQsIGludCBjYXB0dXJlX2NvdW50LAogCQlzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwogaW50IHNuZF9wY21fbmV3X3N0cmVhbShzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtLCBpbnQgc3Vic3RyZWFtX2NvdW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oIGIvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmgKaW5kZXggMmZkM2QyNS4uMmM4OTRiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmgKQEAgLTQyLDQgKzQyLDE5IEBACiBleHRlcm4gaW50IHB4YTJ4eF9hYzk3X2h3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBweGEyeHhfYWM5N19od19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAorLyogQUM5NyBwbGF0Zm9ybV9kYXRhICovCisvKioKKyAqIHN0cnVjdCBweGEyeHhfYWM5N19wbGF0Zm9ybV9kYXRhIC0gcHhhIGFjOTcgcGxhdGZvcm0gZGF0YQorICogQHJlc2V0X2dwaW86IEFDOTcgcmVzZXQgZ3BpbyAobm9ybWFsbHkgZ3BpbzExMyBvciBncGlvOTUpCisgKiAgICAgICAgICAgICAgYSAtMSB2YWx1ZSBtZWFucyBubyBncGlvIHdpbGwgYmUgdXNlZCBmb3IgcmVzZXQKKyAqCisgKiBQbGF0Zm9ybSBkYXRhIHNob3VsZCBvbmx5IGJlIHNwZWNpZmllZCBmb3IgcHhhMjd4IENQVXMgd2hlcmUgYSBzaWxpY29uIGJ1ZworICogcHJldmVudHMgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHJlc2V0IGxpbmUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0CisgKiBiZWhhdmlvdXIgaXMgdG8gY29uc2lkZXIgZ3BpbyAxMTMgYXMgdGhlIEFDOTcgcmVzZXQgbGluZSwgd2hpY2ggaXMgdGhlCisgKiBkZWZhdWx0IG9uIG1vc3QgYm9hcmRzLgorICovCitzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSB7CisJaW50IHJlc2V0X2dwaW87Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oIGIvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmgKaW5kZXggYjU1MGE0MS4uYzIzYzI2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmgKQEAgLTQyLDcgKzQyLDYgQEAKICNkZWZpbmUgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUCSgxPDwxKQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfT1BFTgkJKDM8PDApCiAjZGVmaW5lIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQJKDE8PDIpCi0jZGVmaW5lCVNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLCSgxPDwzKQogCiBzdHJ1Y3Qgc25kX3Jhd21pZGk7CiBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zYi5oIGIvaW5jbHVkZS9zb3VuZC9zYi5oCmluZGV4IDg1ZjkzYzUuLjRlNjJlZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2IuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NiLmgKQEAgLTI0OSw2ICsyNDksNyBAQAogI2RlZmluZSBTQl9BTFM0MDAwXzNEX0FVVE9fTVVURQkweDUyCiAjZGVmaW5lIFNCX0FMUzQwMDBfQU5BTE9HX0JMT0NLX0NUUkwgMHg1MwogI2RlZmluZSBTQl9BTFM0MDAwXzNEX0RFTEFZTElORV9QQVRURVJOIDB4NTQKKyNkZWZpbmUgU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTgkweGMzIC8qIGJpdCA3IGlzIERpZ2l0YWwgTG9vcCBFbmFibGUgKi8KICNkZWZpbmUgU0JfQUxTNDAwMF9RU09VTkQJMHhkYgogCiAvKiBJUlEgc2V0dGluZyBiaXRtYXAgKi8KQEAgLTMzMCw3ICszMzEsOCBAQAogCVNCX01JWF9ET1VCTEUsCiAJU0JfTUlYX0lOUFVUX1NXLAogCVNCX01JWF9DQVBUVVJFX1BSTywKLQlTQl9NSVhfQ0FQVFVSRV9EVDAxOVgKKwlTQl9NSVhfQ0FQVFVSRV9EVDAxOVgsCisJU0JfTUlYX01PTk9fQ0FQVFVSRV9BTFM0SwogfTsKIAogI2RlZmluZSBTQl9NSVhWQUxfRE9VQkxFKGxlZnRfcmVnLCByaWdodF9yZWcsIGxlZnRfc2hpZnQsIHJpZ2h0X3NoaWZ0LCBtYXNrKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oIGIvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaAppbmRleCA1ZDFhYjljLi4xYmNlN2ZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCisrKyBiL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmgKQEAgLTIwMiwxMyArMjAyLDExIEBACiAJaW50IHZhbHVlMjsJLyogcmVzZXJ2ZWQgKi8KIH07CiAKLWVudW0gewotCVNORFJWX0VNVVhfSU9DVExfVkVSU0lPTiA9IF9JT1IoJ0gnLCAweDgwLCB1bnNpZ25lZCBpbnQpLAotCVNORFJWX0VNVVhfSU9DVExfTE9BRF9QQVRDSCA9IF9JT1dSKCdIJywgMHg4MSwgc3RydWN0IHNvdW5kZm9udF9wYXRjaF9pbmZvKSwKLQlTTkRSVl9FTVVYX0lPQ1RMX1JFU0VUX1NBTVBMRVMgPSBfSU8oJ0gnLCAweDgyKSwKLQlTTkRSVl9FTVVYX0lPQ1RMX1JFTU9WRV9MQVNUX1NBTVBMRVMgPSBfSU8oJ0gnLCAweDgzKSwKLQlTTkRSVl9FTVVYX0lPQ1RMX01FTV9BVkFJTCA9IF9JT1coJ0gnLCAweDg0LCBpbnQpLAotCVNORFJWX0VNVVhfSU9DVExfTUlTQ19NT0RFID0gX0lPV1IoJ0gnLCAweDg0LCBzdHJ1Y3Qgc25kX2VtdXhfbWlzY19tb2RlKSwKLX07CisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfVkVSU0lPTglfSU9SKCdIJywgMHg4MCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX0xPQURfUEFUQ0gJX0lPV1IoJ0gnLCAweDgxLCBzdHJ1Y3Qgc291bmRmb250X3BhdGNoX2luZm8pCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfUkVTRVRfU0FNUExFUwlfSU8oJ0gnLCAweDgyKQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX1JFTU9WRV9MQVNUX1NBTVBMRVMgX0lPKCdIJywgMHg4MykKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9NRU1fQVZBSUwJX0lPVygnSCcsIDB4ODQsIGludCkKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9NSVNDX01PREUJX0lPV1IoJ0gnLCAweDg0LCBzdHJ1Y3Qgc25kX2VtdXhfbWlzY19tb2RlKQogCiAjZW5kaWYgLyogX19TT1VORF9TRk5UX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaAppbmRleCAyNDI0N2Y3Li4xMzY3NjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaApAQCAtMjAzLDcgKzIwMyw3IEBACiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSk7CiAKIAkvKiBvcHMgKi8KLQlzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG9wczsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzICpvcHM7CiAKIAkvKiBEQUkgY2FwYWJpbGl0aWVzICovCiAJc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbSBjYXB0dXJlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IGRmYTgwNDkuLmE3ZGVmNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTc2LDYgKzc2LDExIEBACiAJIHdjb250cm9scywgd25jb250cm9scylcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CisjZGVmaW5lIFNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVEwod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAorCSB3Y29udHJvbHMsIHduY29udHJvbHMpXAoreyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgXAorCS5zaGlmdCA9IHdzaGlmdCwgLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSUNCSUFTKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX21pY2JpYXMsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMH0KQEAgLTEwMSw2ICsxMDYsMTEgQEAKIHsJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gd25jb250cm9scywgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQorI2RlZmluZSBTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAorCXdjb250cm9scywgd25jb250cm9scywgd2V2ZW50LCB3ZmxhZ3MpIFwKK3sgICAgICAgLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkubnVtX2tjb250cm9scyA9IHduY29udHJvbHMsIC5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTUlDQklBU19FKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdldmVudCwgd2ZsYWdzKSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taWNiaWFzLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSBOVUxMLCAubnVtX2tjb250cm9scyA9IDAsIFwKQEAgLTE4Miw2ICsxOTIsMTIgQEAKIAkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF92YWx1ZV9lbnVtX2RvdWJsZSwgXAogCS5wdXQgPSBzbmRfc29jX2RhcG1fcHV0X3ZhbHVlX2VudW1fZG91YmxlLCBcCiAJLnByaXZhdGVfdmFsdWUgPSAodW5zaWduZWQgbG9uZykmeGVudW0gfQorI2RlZmluZSBTT0NfREFQTV9QSU5fU1dJVENIKHhuYW1lKSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lICIgU3dpdGNoIiwgXAorCS5pbmZvID0gc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCwgXAorCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2gsIFwKKwkucHV0ID0gc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoLCBcCisJLnByaXZhdGVfdmFsdWUgPSAodW5zaWduZWQgbG9uZyl4bmFtZSB9CiAKIC8qIGRhcG0gc3RyZWFtIG9wZXJhdGlvbnMgKi8KICNkZWZpbmUgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1AJCQkweDAKQEAgLTIyOCw2ICsyNDQsMTIgQEAKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CiBpbnQgc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CitpbnQgc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKTsKK2ludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdW5jb250cm9sKTsKK2ludCBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdW5jb250cm9sKTsKIGludCBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQpOwogaW50IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLApAQCAtMjUwLDEwICsyNzIsMTAgQEAKIGludCBzbmRfc29jX2RhcG1fc3lzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKiBkYXBtIGF1ZGlvIHBpbiBjb250cm9sIGFuZCBzdGF0dXMgKi8KLWludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7Ci1pbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKLWludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKLWludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CiBpbnQgc25kX3NvY19kYXBtX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKIAogLyogZGFwbSB3aWRnZXQgdHlwZXMgKi8KQEAgLTI2Myw2ICsyODUsNyBAQAogCXNuZF9zb2NfZGFwbV9tdXgsCQkJLyogc2VsZWN0cyAxIGFuYWxvZyBzaWduYWwgZnJvbSBtYW55IGlucHV0cyAqLwogCXNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsCQkJLyogc2VsZWN0cyAxIGFuYWxvZyBzaWduYWwgZnJvbSBtYW55IGlucHV0cyAqLwogCXNuZF9zb2NfZGFwbV9taXhlciwJCQkvKiBtaXhlcyBzZXZlcmFsIGFuYWxvZyBzaWduYWxzIHRvZ2V0aGVyICovCisJc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwJCS8qIG1peGVyIHdpdGggbmFtZWQgY29udHJvbHMgKi8KIAlzbmRfc29jX2RhcG1fcGdhLAkJCS8qIHByb2dyYW1tYWJsZSBnYWluL2F0dGVudWF0aW9uICh2b2x1bWUpICovCiAJc25kX3NvY19kYXBtX2FkYywJCQkvKiBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXIgKi8KIAlzbmRfc29jX2RhcG1fZGFjLAkJCS8qIGRpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggMjQ1OTNhYy4uYTQwYmM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy5oCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtMTU0LDYgKzE1Niw4IEBACiAJU05EX1NPQ19CSUFTX09GRiwKIH07CiAKK3N0cnVjdCBzbmRfamFjazsKK3N0cnVjdCBzbmRfc29jX2NhcmQ7CiBzdHJ1Y3Qgc25kX3NvY19kZXZpY2U7CiBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtOwogc3RydWN0IHNuZF9zb2Nfb3BzOwpAQCAtMTY0LDYgKzE2OCwxMSBAQAogc3RydWN0IHNuZF9zb2NfY29kZWM7CiBzdHJ1Y3Qgc29jX2VudW07CiBzdHJ1Y3Qgc25kX3NvY19hYzk3X29wczsKK3N0cnVjdCBzbmRfc29jX2phY2s7CitzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbjsKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorc3RydWN0IHNuZF9zb2NfamFja19ncGlvOworI2VuZGlmCiAKIHR5cGVkZWYgaW50ICgqaHdfd3JpdGVfdCkodm9pZCAqLGNvbnN0IGNoYXIqICxpbnQpOwogdHlwZWRlZiBpbnQgKCpod19yZWFkX3QpKHZvaWQgKixjaGFyKiAsaW50KTsKQEAgLTE4NCw2ICsxOTMsMTkgQEAKIGludCBzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCWNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlICpodyk7CiAKKy8qIEphY2sgcmVwb3J0aW5nICovCitpbnQgc25kX3NvY19qYWNrX25ldyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IHR5cGUsCisJCSAgICAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjayk7Cit2b2lkIHNuZF9zb2NfamFja19yZXBvcnQoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHN0YXR1cywgaW50IG1hc2spOworaW50IHNuZF9zb2NfamFja19hZGRfcGlucyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2tfcGluICpwaW5zKTsKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgoraW50IHNuZF9zb2NfamFja19hZGRfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcyk7Cit2b2lkIHNuZF9zb2NfamFja19mcmVlX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpOworI2VuZGlmCisKIC8qIGNvZGVjIElPICovCiAjZGVmaW5lIHNuZF9zb2NfcmVhZChjb2RlYywgcmVnKSBjb2RlYy0+cmVhZChjb2RlYywgcmVnKQogI2RlZmluZSBzbmRfc29jX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKSBjb2RlYy0+d3JpdGUoY29kZWMsIHJlZywgdmFsdWUpCkBAIC0yMDMsNiArMjI1LDggQEAKICAqLwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX3NvY19jbmV3KGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpfdGVtcGxhdGUsCiAJdm9pZCAqZGF0YSwgY2hhciAqbG9uZ19uYW1lKTsKK2ludCBzbmRfc29jX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNvbnRyb2xzLCBpbnQgbnVtX2NvbnRyb2xzKTsKIGludCBzbmRfc29jX2luZm9fZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7CiBpbnQgc25kX3NvY19pbmZvX2VudW1fZXh0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMjM3LDYgKzI2MSw0OCBAQAogaW50IHNuZF9zb2NfcHV0X3ZvbHN3X3M4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKIAorLyoqCisgKiBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAtIERlc2NyaWJlcyBhIHBpbiB0byB1cGRhdGUgYmFzZWQgb24gamFjayBkZXRlY3Rpb24KKyAqCisgKiBAcGluOiAgICBuYW1lIG9mIHRoZSBwaW4gdG8gdXBkYXRlCisgKiBAbWFzazogICBiaXRzIHRvIGNoZWNrIGZvciBpbiByZXBvcnRlZCBqYWNrIHN0YXR1cworICogQGludmVydDogaWYgbm9uLXplcm8gdGhlbiBwaW4gaXMgZW5hYmxlZCB3aGVuIHN0YXR1cyBpcyBub3QgcmVwb3J0ZWQKKyAqLworc3RydWN0IHNuZF9zb2NfamFja19waW4geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBjaGFyICpwaW47CisJaW50IG1hc2s7CisJYm9vbCBpbnZlcnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAtIERlc2NyaWJlcyBhIGdwaW8gcGluIGZvciBqYWNrIGRldGVjdGlvbgorICoKKyAqIEBncGlvOiAgICAgICAgIGdwaW8gbnVtYmVyCisgKiBAbmFtZTogICAgICAgICBncGlvIG5hbWUKKyAqIEByZXBvcnQ6ICAgICAgIHZhbHVlIHRvIHJlcG9ydCB3aGVuIGphY2sgZGV0ZWN0ZWQKKyAqIEBpbnZlcnQ6ICAgICAgIHJlcG9ydCBwcmVzZW5jZSBpbiBsb3cgc3RhdGUKKyAqIEBkZWJvdWNlX3RpbWU6IGRlYm91Y2UgdGltZSBpbiBtcworICovCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKK3N0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyB7CisJdW5zaWduZWQgaW50IGdwaW87CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmVwb3J0OworCWludCBpbnZlcnQ7CisJaW50IGRlYm91bmNlX3RpbWU7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKK307CisjZW5kaWYKKworc3RydWN0IHNuZF9zb2NfamFjayB7CisJc3RydWN0IHNuZF9qYWNrICpqYWNrOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQ7CisJc3RydWN0IGxpc3RfaGVhZCBwaW5zOworCWludCBzdGF0dXM7Cit9OworCiAvKiBTb0MgUENNIHN0cmVhbSBpbmZvcm1hdGlvbiAqLwogc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbSB7CiAJY2hhciAqc3RyZWFtX25hbWU7CkBAIC0zODQsNiArNDUwLDggQEAKIAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2OwogCisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgZGVsYXllZF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkZWZlcnJlZF9yZXN1bWVfd29yazsKQEAgLTM5Myw3ICs0NjEsNiBAQAogc3RydWN0IHNuZF9zb2NfZGV2aWNlIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZDsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlICpjb2RlY19kZXY7CiAJdm9pZCAqY29kZWNfZGF0YTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3VkYTEzNDEuaCBiL2luY2x1ZGUvc291bmQvdWRhMTM0MS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBkNWRjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvc291bmQvdWRhMTM0MS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9saW51eC9sMy91ZGExMzQxLmgKLSAqCi0gKiBQaGlsaXBzIFVEQTEzNDEgbWl4ZXIgZGV2aWNlIGRyaXZlciBmb3IgQUxTQQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMiBUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIEhpc3Rvcnk6Ci0gKgotICogMjAwMi0wMy0xMyBUb21hcyBLYXNwYXJlayBJbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiB1ZGExMzQxLmggZnJvbSBPU1MKLSAqIDIwMDItMDMtMzAgVG9tYXMgS2FzcGFyZWsgUHJvYyBmaWxlc3lzdGVtIHN1cHBvcnQsIGNvbXBsZXRlIG1peGVyIGFuZCBEU1AKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgc3VwcG9ydAotICovCi0KLSNkZWZpbmUgVURBMTM0MV9BTFNBX05BTUUgInNuZC11ZGExMzQxIgotCi0vKgotICogRGVmYXVsdCByYXRlIHNldCBhZnRlciBpbmljaWFsaXphdGlvbgotICovCi0jZGVmaW5lIEFVRElPX1JBVEVfREVGQVVMVAk0NDEwMAotCi0vKgotICogVURBMTM0MSBMMyBhZGRyZXNzIGFuZCBjb21tYW5kIHR5cGVzCi0gKi8KLSNkZWZpbmUgVURBMTM0MV9MM0FERFIJCTUKLSNkZWZpbmUgVURBMTM0MV9EQVRBMAkJKFVEQTEzNDFfTDNBRERSIDw8IDIgfCAwKQotI2RlZmluZSBVREExMzQxX0RBVEExCQkoVURBMTM0MV9MM0FERFIgPDwgMiB8IDEpCi0jZGVmaW5lIFVEQTEzNDFfU1RBVFVTCQkoVURBMTM0MV9MM0FERFIgPDwgMiB8IDIpCi0KLWVudW0gdWRhMTM0MV9vbm9mZiB7Ci0JT0ZGPTAsCi0JT04sCi19OwotCi1lbnVtIHVkYTEzNDFfZm9ybWF0IHsKLQlJMlM9MCwKLQlMU0IxNiwKLQlMU0IxOCwKLQlMU0IyMCwKLQlNU0IsCi0JTFNCMTZNU0IsCi0JTFNCMThNU0IsCi0JTFNCMjBNU0IsICAgICAgICAKLX07Ci0KLWVudW0gdWRhMTM0MV9mcyB7Ci0JRjUxMj0wLAotCUYzODQsCi0JRjI1NiwKLQlGdW51c2VkLAotfTsKLQotZW51bSB1ZGExMzQxX3BlYWsgewotCUJFRk9SRT0wLAotCUFGVEVSLAotfTsKLQotZW51bSB1ZGExMzQxX2ZpbHRlciB7Ci0JRkxBVD0wLAotCU1JTiwKLQlNSU4yLAotCU1BWCwKLX07Ci0KLWVudW0gdWRhMTM0MV9taXhlciB7Ci0JRE9VQkxFLAotCUxJTkUsCi0JTUlDLAotCU1JWEVSLAotfTsKLQotZW51bSB1ZGExMzQxX2RlZW1wIHsKLQlOT05FLAotCUQzMiwKLQlENDQsCi0JRDQ4LAotfTsKLQotZW51bSB1ZGExMzQxX2NvbmZpZyB7Ci0JQ01EX1JFQURfUkVHID0gMCwKLQlDTURfUkVTRVQsCi0JQ01EX0ZTLAotCUNNRF9GT1JNQVQsCi0JQ01EX09HQUlOLAotCUNNRF9JR0FJTiwKLQlDTURfREFDLAotCUNNRF9BREMsCi0JQ01EX1ZPTFVNRSwKLQlDTURfQkFTUywKLQlDTURfVFJFQkJMRSwKLQlDTURfUEVBSywKLQlDTURfREVFTVAsCi0JQ01EX01VVEUsICAgICAgICAKLQlDTURfRklMVEVSLAotCUNNRF9DSDEsCi0JQ01EX0NIMiwKLQlDTURfTUlDLCAgICAgICAKLQlDTURfTUlYRVIsCi0JQ01EX0FHQywKLQlDTURfSUcsCi0JQ01EX0FHQ19USU1FLAotCUNNRF9BR0NfTEVWRUwsCi0jaWZkZWYgQ09ORklHX1BNCi0JQ01EX1NVU1BFTkQsCi0JQ01EX1JFU1VNRSwKLSNlbmRpZgotCUNNRF9MQVNULAotfTsKLQotZW51bSB3cml0ZV90aHJvdWdoIHsKLQkvL3VzZWQgaW4gdXBkYXRlX2JpdHMgKHdyaXRlX2NmZykgdG8gYXZvaWQgbDNfd3JpdGUgLSBqdXN0IHVwZGF0ZSBsb2NhbCBjb3B5IG9mIHJlZ3MuCi0JUkVHU19PTkxZPTAsCi0JLy91cGRhdGUgbG9jYWwgcmVncyBhbmQgd3JpdGUgdmFsdWUgdG8gdWRhMTM0MSAtIGRvIGwzX3dyaXRlCi0JRkxVU0gsCi19OwotCi1pbnQgX19pbml0IHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGwzX2NsaWVudCAqKmNsbnQpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaCBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCmluZGV4IDJiNDgyMzcuLmE3ZTc0ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCkBAIC0xLDMgKzEsMyBAQAogLyogaW5jbHVkZS92ZXJzaW9uLmggKi8KLSNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMThhIgorI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xOSIKICNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dzcy5oIGIvaW5jbHVkZS9zb3VuZC93c3MuaAppbmRleCBmZDAxZjIyLi42ZDY1ZjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3dzcy5oCisrKyBiL2luY2x1ZGUvc291bmQvd3NzLmgKQEAgLTE1NCw2ICsxNTQsNyBAQAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZSwKIAkJICAgICAgdW5zaWduZWQgc2hvcnQgaHdzaGFyZSwKIAkJICAgICAgc3RydWN0IHNuZF93c3MgKipyY2hpcCk7CitpbnQgc25kX3dzc19mcmVlKHN0cnVjdCBzbmRfd3NzICpjaGlwKTsKIGludCBzbmRfd3NzX3BjbShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfd3NzX3RpbWVyKHN0cnVjdCBzbmRfd3NzICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3RpbWVyICoqcnRpbWVyKTsKIGludCBzbmRfd3NzX21peGVyKHN0cnVjdCBzbmRfd3NzICpjaGlwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc2tiLmggYi9pbmNsdWRlL3RyYWNlL3NrYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjYxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3NrYi5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX1RSQUNFX1NLQl9IXworI2RlZmluZSBfVFJBQ0VfU0tCX0hfCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK0RFQ0xBUkVfVFJBQ0Uoa2ZyZWVfc2tiLAorCVRQUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pLAorCVRQQVJHUyhza2IsIGxvY2F0aW9uKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IGYwNjgwNzEuLjY4Njk5MTMgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTY3NSw2ICs2NzUsOSBAQAogY29uZmlnIFNZU0NUTAogCWJvb2wKIAorY29uZmlnIEFOT05fSU5PREVTCisJYm9vbAorCiBtZW51Y29uZmlnIEVNQkVEREVECiAJYm9vbCAiQ29uZmlndXJlIHN0YW5kYXJkIGtlcm5lbCBmZWF0dXJlcyAoZm9yIHNtYWxsIHN5c3RlbXMpIgogCWhlbHAKQEAgLTc4MCwxOCArNzgzLDYgQEAKICAgICAgICAgICBUaGlzIG9wdGlvbiBhbGxvd3MgdG8gZGlzYWJsZSB0aGUgaW50ZXJuYWwgUEMtU3BlYWtlcgogICAgICAgICAgIHN1cHBvcnQsIHNhdmluZyBzb21lIG1lbW9yeS4KIAotY29uZmlnIENPTVBBVF9CUksKLQlib29sICJEaXNhYmxlIGhlYXAgcmFuZG9taXphdGlvbiIKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBSYW5kb21pemluZyBoZWFwIHBsYWNlbWVudCBtYWtlcyBoZWFwIGV4cGxvaXRzIGhhcmRlciwgYnV0IGl0Ci0JICBhbHNvIGJyZWFrcyBhbmNpZW50IGJpbmFyaWVzIChpbmNsdWRpbmcgYW55dGhpbmcgbGliYzUgYmFzZWQpLgotCSAgVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgYm9vdHVwIGRlZmF1bHQgdG8gaGVhcCByYW5kb21pemF0aW9uCi0JICBkaXNhYmxlZCwgYW5kIGNhbiBiZSBvdmVycmlkZW4gcnVudGltZSBieSBzZXR0aW5nCi0JICAvcHJvYy9zeXMva2VybmVsL3JhbmRvbWl6ZV92YV9zcGFjZSB0byAyLgotCi0JICBPbiBub24tYW5jaWVudCBkaXN0cm9zIChwb3N0LTIwMDAgb25lcykgTiBpcyB1c3VhbGx5IGEgc2FmZSBjaG9pY2UuCi0KIGNvbmZpZyBCQVNFX0ZVTEwKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgZnVsbC1zaXplZCBkYXRhIHN0cnVjdHVyZXMgZm9yIGNvcmUiIGlmIEVNQkVEREVECkBAIC04MDksOSArODAwLDYgQEAKIAkgIHN1cHBvcnQgZm9yICJmYXN0IHVzZXJzcGFjZSBtdXRleGVzIi4gIFRoZSByZXN1bHRpbmcga2VybmVsIG1heSBub3QKIAkgIHJ1biBnbGliYy1iYXNlZCBhcHBsaWNhdGlvbnMgY29ycmVjdGx5LgogCi1jb25maWcgQU5PTl9JTk9ERVMKLQlib29sCi0KIGNvbmZpZyBFUE9MTAogCWJvb2wgIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZWZhdWx0IHkKQEAgLTg5Nyw2ICs4ODUsMTggQEAKIAkgIFNMVUIgc3lzZnMgc3VwcG9ydC4gL3N5cy9zbGFiIHdpbGwgbm90IGV4aXN0IGFuZCB0aGVyZSB3aWxsIGJlCiAJICBubyBzdXBwb3J0IGZvciBjYWNoZSB2YWxpZGF0aW9uIGV0Yy4KIAorY29uZmlnIENPTVBBVF9CUksKKwlib29sICJEaXNhYmxlIGhlYXAgcmFuZG9taXphdGlvbiIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBSYW5kb21pemluZyBoZWFwIHBsYWNlbWVudCBtYWtlcyBoZWFwIGV4cGxvaXRzIGhhcmRlciwgYnV0IGl0CisJICBhbHNvIGJyZWFrcyBhbmNpZW50IGJpbmFyaWVzIChpbmNsdWRpbmcgYW55dGhpbmcgbGliYzUgYmFzZWQpLgorCSAgVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgYm9vdHVwIGRlZmF1bHQgdG8gaGVhcCByYW5kb21pemF0aW9uCisJICBkaXNhYmxlZCwgYW5kIGNhbiBiZSBvdmVycmlkZW4gcnVudGltZSBieSBzZXR0aW5nCisJICAvcHJvYy9zeXMva2VybmVsL3JhbmRvbWl6ZV92YV9zcGFjZSB0byAyLgorCisJICBPbiBub24tYW5jaWVudCBkaXN0cm9zIChwb3N0LTIwMDAgb25lcykgTiBpcyB1c3VhbGx5IGEgc2FmZSBjaG9pY2UuCisKIGNob2ljZQogCXByb21wdCAiQ2hvb3NlIFNMQUIgYWxsb2NhdG9yIgogCWRlZmF1bHQgU0xVQgpAQCAtOTY2LDcgKzk2Niw2IEBACiAKIGNvbmZpZyBSVF9NVVRFWEVTCiAJYm9vbGVhbgotCXNlbGVjdCBQTElTVAogCiBjb25maWcgQkFTRV9TTUFMTAogCWludApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmMKaW5kZXggNzA4MTA1ZS4uOGQ0ZmY1YSAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHMuYworKysgYi9pbml0L2RvX21vdW50cy5jCkBAIC0zNzAsMTAgKzM3MCwxNCBAQAogCQlzc2xlZXAocm9vdF9kZWxheSk7CiAJfQogCi0JLyogd2FpdCBmb3IgdGhlIGtub3duIGRldmljZXMgdG8gY29tcGxldGUgdGhlaXIgcHJvYmluZyAqLwotCXdoaWxlIChkcml2ZXJfcHJvYmVfZG9uZSgpICE9IDApCi0JCW1zbGVlcCgxMDApOwotCWFzeW5jX3N5bmNocm9uaXplX2Z1bGwoKTsKKwkvKgorCSAqIHdhaXQgZm9yIHRoZSBrbm93biBkZXZpY2VzIHRvIGNvbXBsZXRlIHRoZWlyIHByb2JpbmcKKwkgKgorCSAqIE5vdGU6IHRoaXMgaXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIGxvbmcgYm9vdCBkZWxheXMuCisJICogRm9yIGV4YW1wbGUsIGl0IGlzIG5vdCBhdHlwaWNhbCB0byB3YWl0IDUgc2Vjb25kcyBoZXJlCisJICogZm9yIHRoZSB0b3VjaHBhZCBvZiBhIGxhcHRvcCB0byBpbml0aWFsaXplLgorCSAqLworCXdhaXRfZm9yX2RldmljZV9wcm9iZSgpOwogCiAJbWRfcnVuX3NldHVwKCk7CiAKQEAgLTM5OSw2ICs0MDMsNyBAQAogCQl3aGlsZSAoZHJpdmVyX3Byb2JlX2RvbmUoKSAhPSAwIHx8CiAJCQkoUk9PVF9ERVYgPSBuYW1lX3RvX2Rldl90KHNhdmVkX3Jvb3RfbmFtZSkpID09IDApCiAJCQltc2xlZXAoMTAwKTsKKwkJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOwogCX0KIAogCWlzX2Zsb3BweSA9IE1BSk9SKFJPT1RfREVWKSA9PSBGTE9QUFlfTUFKT1I7CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50c19tZC5jIGIvaW5pdC9kb19tb3VudHNfbWQuYwppbmRleCBmZjk1ZTMxLi45YmRkZGJjIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50c19tZC5jCisrKyBiL2luaXQvZG9fbW91bnRzX21kLmMKQEAgLTI4MSw4ICsyODEsOSBAQAogCSAqLwogCXByaW50ayhLRVJOX0lORk8gIm1kOiBXYWl0aW5nIGZvciBhbGwgZGV2aWNlcyB0byBiZSBhdmFpbGFibGUgYmVmb3JlIGF1dG9kZXRlY3RcbiIpOwogCXByaW50ayhLRVJOX0lORk8gIm1kOiBJZiB5b3UgZG9uJ3QgdXNlIHJhaWQsIHVzZSByYWlkPW5vYXV0b2RldGVjdFxuIik7Ci0Jd2hpbGUgKGRyaXZlcl9wcm9iZV9kb25lKCkgPCAwKQotCQltc2xlZXAoMTAwKTsKKworCXdhaXRfZm9yX2RldmljZV9wcm9iZSgpOworCiAJZmQgPSBzeXNfb3BlbigiL2Rldi9tZDAiLCAwLCAwKTsKIAlpZiAoZmQgPj0gMCkgewogCQlzeXNfaW9jdGwoZmQsIFJBSURfQVVUT1JVTiwgcmFpZF9hdXRvcGFydCk7CmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDg0NDIwOTQuLjgzNjk3ZTEgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC05Nyw3ICs5Nyw3IEBACiBleHRlcm4gdm9pZCB0Y19pbml0KHZvaWQpOwogI2VuZGlmCiAKLWVudW0gc3lzdGVtX3N0YXRlcyBzeXN0ZW1fc3RhdGU7CitlbnVtIHN5c3RlbV9zdGF0ZXMgc3lzdGVtX3N0YXRlIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKHN5c3RlbV9zdGF0ZSk7CiAKIC8qCkBAIC00NjMsNiArNDYzLDcgQEAKIAkgKiBhdCBsZWFzdCBvbmNlIHRvIGdldCB0aGluZ3MgbW92aW5nOgogCSAqLwogCWluaXRfaWRsZV9ib290dXBfdGFzayhjdXJyZW50KTsKKwlyY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKCk7CiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCXNjaGVkdWxlKCk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggNTRiNDA3Ny4uYThkZGFkYiAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtMTE1NiwxMCArMTE1NiwxMiBAQAogCW9tcXN0YXQubXFfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlpZiAodV9tcXN0YXQpIHsKIAkJYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRlcywgJm1xc3RhdCk7CisJCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAkJaWYgKG1xc3RhdC5tcV9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCQlmaWxwLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAJCWVsc2UKIAkJCWZpbHAtPmZfZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7CisJCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJfQpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDA1ZDUxZDIuLmYyMzlkODcgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9pcGNfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0zODMsNiArMzg0LDcgQEAKIAllcnJvciA9IFBUUl9FUlIoZmlsZSk7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZ290byBub19maWxlOworCWltYV9zaG1fY2hlY2soZmlsZSk7CiAKIAlpZCA9IGlwY19hZGRpZCgmc2htX2lkcyhucyksICZzaHAtPnNobV9wZXJtLCBucy0+c2htX2N0bG1uaSk7CiAJaWYgKGlkIDwgMCkgewpAQCAtODg3LDYgKzg4OSw3IEBACiAJZmlsZSA9IGFsbG9jX2ZpbGUocGF0aC5tbnQsIHBhdGguZGVudHJ5LCBmX21vZGUsICZzaG1fZmlsZV9vcGVyYXRpb25zKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0X2ZyZWU7CisJaW1hX3NobV9jaGVjayhmaWxlKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNmZDsKIAlmaWxlLT5mX21hcHBpbmcgPSBzaHAtPnNobV9maWxlLT5mX21hcHBpbmc7CmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMTcwYTkyMS4uZTQ3OTFiMyAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtNTEsNiArNTEsNyBAQAogb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vCiBvYmotJChDT05GSUdfS0FMTFNZTVMpICs9IGthbGxzeW1zLm8KIG9iai0kKENPTkZJR19QTSkgKz0gcG93ZXIvCitvYmotJChDT05GSUdfRlJFRVpFUikgKz0gcG93ZXIvCiBvYmotJChDT05GSUdfQlNEX1BST0NFU1NfQUNDVCkgKz0gYWNjdC5vCiBvYmotJChDT05GSUdfS0VYRUMpICs9IGtleGVjLm8KIG9iai0kKENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUKSArPSBiYWNrdHJhY2V0ZXN0Lm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBlMTRkYjljLi45ZWRiNWM0IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xMTIyLDggKzExMjIsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCi0Ja2ZyZWUocm9vdCk7CiAJa2lsbF9saXR0ZXJfc3VwZXIoc2IpOworCWtmcmVlKHJvb3QpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgY2dyb3VwX2ZzX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBhNjZmYmRlLi40ODU0YzJjIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTExNzksMTAgKzExNzksNiBAQAogI2VuZGlmCiAJY2xlYXJfYWxsX2xhdGVuY3lfdHJhY2luZyhwKTsKIAotCS8qIE91ciBwYXJlbnQgZXhlY3V0aW9uIGRvbWFpbiBiZWNvbWVzIGN1cnJlbnQgZG9tYWluCi0JICAgVGhlc2UgbXVzdCBtYXRjaCBmb3IgdGhyZWFkIHNpZ25hbGxpbmcgdG8gYXBwbHkgKi8KLQlwLT5wYXJlbnRfZXhlY19pZCA9IHAtPnNlbGZfZXhlY19pZDsKLQogCS8qIG9rLCBub3cgd2Ugc2hvdWxkIGJlIHNldCB1cC4uICovCiAJcC0+ZXhpdF9zaWduYWwgPSAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpID8gLTEgOiAoY2xvbmVfZmxhZ3MgJiBDU0lHTkFMKTsKIAlwLT5wZGVhdGhfc2lnbmFsID0gMDsKQEAgLTEyMjAsMTAgKzEyMTYsMTMgQEAKIAkJc2V0X3Rhc2tfY3B1KHAsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAkvKiBDTE9ORV9QQVJFTlQgcmUtdXNlcyB0aGUgb2xkIHBhcmVudCAqLwotCWlmIChjbG9uZV9mbGFncyAmIChDTE9ORV9QQVJFTlR8Q0xPTkVfVEhSRUFEKSkKKwlpZiAoY2xvbmVfZmxhZ3MgJiAoQ0xPTkVfUEFSRU5UfENMT05FX1RIUkVBRCkpIHsKIAkJcC0+cmVhbF9wYXJlbnQgPSBjdXJyZW50LT5yZWFsX3BhcmVudDsKLQllbHNlCisJCXAtPnBhcmVudF9leGVjX2lkID0gY3VycmVudC0+cGFyZW50X2V4ZWNfaWQ7CisJfSBlbHNlIHsKIAkJcC0+cmVhbF9wYXJlbnQgPSBjdXJyZW50OworCQlwLT5wYXJlbnRfZXhlY19pZCA9IGN1cnJlbnQtPnNlbGZfZXhlY19pZDsKKwl9CiAKIAlzcGluX2xvY2soJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IGY4OWQzNzMuLjQzODcwMWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0xMTY1LDYgKzExNjUsNyBAQAogCQkgICAgICB1MzIgdmFsLCBrdGltZV90ICphYnNfdGltZSwgdTMyIGJpdHNldCwgaW50IGNsb2NrcnQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyKTsKIAlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiOwogCXN0cnVjdCBmdXRleF9xIHE7CkBAIC0xMjE2LDExICsxMjE3LDEzIEBACiAKIAkJaWYgKCFyZXQpCiAJCQlnb3RvIHJldHJ5OwotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gLUVXT1VMREJMT0NLOwotCWlmICh1dmFsICE9IHZhbCkKLQkJZ290byBvdXRfdW5sb2NrX3B1dF9rZXk7CisJaWYgKHVubGlrZWx5KHV2YWwgIT0gdmFsKSkgeworCQlxdWV1ZV91bmxvY2soJnEsIGhiKTsKKwkJZ290byBvdXRfcHV0X2tleTsKKwl9CiAKIAkvKiBPbmx5IGFjdHVhbGx5IHF1ZXVlIGlmICp1YWRkciBjb250YWluZWQgdmFsLiAgKi8KIAlxdWV1ZV9tZSgmcSwgaGIpOwpAQCAtMTI4NCwzOCArMTI4NywzOCBAQAogCSAqLwogCiAJLyogSWYgd2Ugd2VyZSB3b2tlbiAoYW5kIHVucXVldWVkKSwgd2Ugc3VjY2VlZGVkLCB3aGF0ZXZlci4gKi8KKwlyZXQgPSAwOwogCWlmICghdW5xdWV1ZV9tZSgmcSkpCi0JCXJldHVybiAwOworCQlnb3RvIG91dF9wdXRfa2V5OworCXJldCA9IC1FVElNRURPVVQ7CiAJaWYgKHJlbSkKLQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCWdvdG8gb3V0X3B1dF9rZXk7CiAKIAkvKgogCSAqIFdlIGV4cGVjdCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSwgYnV0IGFub3RoZXIgdGhyZWFkIG1heQogCSAqIGhhdmUgaGFuZGxlZCBpdCBmb3IgdXMgYWxyZWFkeS4KIAkgKi8KKwlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJaWYgKCFhYnNfdGltZSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQllbHNlIHsKLQkJc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQ7Ci0JCXJlc3RhcnQgPSAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrOwotCQlyZXN0YXJ0LT5mbiA9IGZ1dGV4X3dhaXRfcmVzdGFydDsKLQkJcmVzdGFydC0+ZnV0ZXgudWFkZHIgPSAodTMyICopdWFkZHI7Ci0JCXJlc3RhcnQtPmZ1dGV4LnZhbCA9IHZhbDsKLQkJcmVzdGFydC0+ZnV0ZXgudGltZSA9IGFic190aW1lLT50djY0OwotCQlyZXN0YXJ0LT5mdXRleC5iaXRzZXQgPSBiaXRzZXQ7Ci0JCXJlc3RhcnQtPmZ1dGV4LmZsYWdzID0gMDsKKwkJZ290byBvdXRfcHV0X2tleTsKIAotCQlpZiAoZnNoYXJlZCkKLQkJCXJlc3RhcnQtPmZ1dGV4LmZsYWdzIHw9IEZMQUdTX1NIQVJFRDsKLQkJaWYgKGNsb2NrcnQpCi0JCQlyZXN0YXJ0LT5mdXRleC5mbGFncyB8PSBGTEFHU19DTE9DS1JUOwotCQlyZXR1cm4gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKLQl9CisJcmVzdGFydCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2s7CisJcmVzdGFydC0+Zm4gPSBmdXRleF93YWl0X3Jlc3RhcnQ7CisJcmVzdGFydC0+ZnV0ZXgudWFkZHIgPSAodTMyICopdWFkZHI7CisJcmVzdGFydC0+ZnV0ZXgudmFsID0gdmFsOworCXJlc3RhcnQtPmZ1dGV4LnRpbWUgPSBhYnNfdGltZS0+dHY2NDsKKwlyZXN0YXJ0LT5mdXRleC5iaXRzZXQgPSBiaXRzZXQ7CisJcmVzdGFydC0+ZnV0ZXguZmxhZ3MgPSAwOwogCi1vdXRfdW5sb2NrX3B1dF9rZXk6Ci0JcXVldWVfdW5sb2NrKCZxLCBoYik7CisJaWYgKGZzaGFyZWQpCisJCXJlc3RhcnQtPmZ1dGV4LmZsYWdzIHw9IEZMQUdTX1NIQVJFRDsKKwlpZiAoY2xvY2tydCkKKwkJcmVzdGFydC0+ZnV0ZXguZmxhZ3MgfD0gRkxBR1NfQ0xPQ0tSVDsKKworCXJldCA9IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CisKK291dF9wdXRfa2V5OgogCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKLQogb3V0OgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2NoaXAuYyBiL2tlcm5lbC9pcnEvY2hpcC5jCmluZGV4IDdkZTExYmQuLjAzZDBiZWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC03OCw2ICs3OCw3IEBACiAJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9iYWRfaXJxOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CiAJZGVzYy0+bmFtZSA9IE5VTEw7CisJY2xlYXJfa3N0YXRfaXJxcyhkZXNjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI5MCw3ICsyOTEsOCBAQAogCQlkZXNjLT5jaGlwLT5tYXNrX2FjayhpcnEpOwogCWVsc2UgewogCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7Ci0JCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAJfQogfQogCkBAIC00NzYsNyArNDc4LDggQEAKIAlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qIFN0YXJ0IGhhbmRsaW5nIHRoZSBpcnEgKi8KLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKIAlkZXNjID0gaXJxX3JlbWFwX3RvX2Rlc2MoaXJxLCBkZXNjKTsKIAogCS8qIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDNhYmE4ZDEuLmY2Y2RkYTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtODMsMTkgKzgzLDIxIEBACiAKIHZvaWQgaW5pdF9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSwgaW50IG5yKQogewotCXVuc2lnbmVkIGxvbmcgYnl0ZXM7Ci0JY2hhciAqcHRyOwogCWludCBub2RlOwotCi0JLyogQ29tcHV0ZSBob3cgbWFueSBieXRlcyB3ZSBuZWVkIHBlciBpcnEgYW5kIGFsbG9jYXRlIHRoZW0gKi8KLQlieXRlcyA9IG5yICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJdm9pZCAqcHRyOwogCiAJbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0JcHRyID0ga3phbGxvY19ub2RlKGJ5dGVzLCBHRlBfQVRPTUlDLCBub2RlKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBhbGxvYyBrc3RhdF9pcnFzIG9uIGNwdSAlZCBub2RlICVkXG4iLCBjcHUsIG5vZGUpOworCXB0ciA9IGt6YWxsb2Nfbm9kZShuciAqIHNpemVvZigqZGVzYy0+a3N0YXRfaXJxcyksIEdGUF9BVE9NSUMsIG5vZGUpOwogCi0JaWYgKHB0cikKLQkJZGVzYy0+a3N0YXRfaXJxcyA9ICh1bnNpZ25lZCBpbnQgKilwdHI7CisJLyoKKwkgKiBkb24ndCBvdmVyd2l0ZSBpZiBjYW4gbm90IGdldCBuZXcgb25lCisJICogaW5pdF9jb3B5X2tzdGF0X2lycXMoKSBjb3VsZCBzdGlsbCB1c2Ugb2xkIG9uZQorCSAqLworCWlmIChwdHIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgYWxsb2Mga3N0YXRfaXJxcyBvbiBjcHUgJWQgbm9kZSAlZFxuIiwKKwkJCSBjcHUsIG5vZGUpOworCQlkZXNjLT5rc3RhdF9pcnFzID0gcHRyOworCX0KIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmVfaXJxX2Rlc2MoaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQpAQCAtMjI3LDYgKzIyOSw3IEBACiAJfQogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2FsbFtOUl9JUlFTXVtOUl9DUFVTXTsKIGludCBfX2luaXQgZWFybHlfaXJxX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CkBAIC0yMzgsOCArMjQxLDEwIEBACiAJZGVzYyA9IGlycV9kZXNjOwogCWNvdW50ID0gQVJSQVlfU0laRShpcnFfZGVzYyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlkZXNjW2ldLmlycSA9IGk7CisJCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGtzdGF0X2lycXNfYWxsW2ldOworCX0KIAogCXJldHVybiBhcmNoX2Vhcmx5X2lycV9pbml0KCk7CiB9CkBAIC0yNTUsNiArMjYwLDExIEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19TUEFSU0VfSVJRICovCiAKK3ZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJbWVtc2V0KGRlc2MtPmtzdGF0X2lycXMsIDAsIG5yX2NwdV9pZHMgKiBzaXplb2YoKihkZXNjLT5rc3RhdF9pcnFzKSkpOworfQorCiAvKgogICogV2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yPwogICogRWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWxmLgpAQCAtMzI4LDYgKzMzOCw4IEBACiAJaXJxcmV0dXJuX3QgcmV0LCByZXR2YWwgPSBJUlFfTk9ORTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAorCVdBUk5fT05DRSghaW5faXJxKCksICJCVUc6IElSUSBoYW5kbGVyIGNhbGxlZCBmcm9tIG5vbi1oYXJkaXJxIGNvbnRleHQhIik7CisKIAlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkpCiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCkBAIC0zNDcsNiArMzU5LDExIEBACiB9CiAKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCisjaWZkZWYgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQKKyMgd2FybmluZyBfX2RvX0lSUSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgY29udmVydCB0byBwcm9wZXIgZmxvdyBoYW5kbGVycworI2VuZGlmCisKIC8qKgogICogX19kb19JUlEgLSBvcmlnaW5hbCBhbGwgaW4gb25lIGhpZ2hsZXZlbCBJUlEgaGFuZGxlcgogICogQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKQEAgLTQ2NywxMiArNDg0LDEwIEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJcmV0dXJuIGRlc2MgPyBkZXNjLT5rc3RhdF9pcnFzW2NwdV0gOiAwOwogfQotI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGtzdGF0X2lycXNfY3B1KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pbnRlcm5hbHMuaCBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKaW5kZXggZTZkMGE0My4uYjYwOTUwYiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCkBAIC0xNSw2ICsxNSw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaXJxX2Rlc2NfbG9ja19jbGFzczsKIGV4dGVybiB2b2lkIGluaXRfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUsIGludCBucik7CitleHRlcm4gdm9pZCBjbGVhcl9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CiBleHRlcm4gc3BpbmxvY2tfdCBzcGFyc2VfaXJxX2xvY2s7CiBleHRlcm4gc3RydWN0IGlycV9kZXNjICppcnFfZGVzY19wdHJzW05SX0lSUVNdOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCAyOTFmMDM2Li5lYTExOWVmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogLyoKICAqIEdlbmVyaWMgdmVyc2lvbiBvZiB0aGUgYWZmaW5pdHkgYXV0b3NlbGVjdG9yLgogICovCi1pbnQgZG9faXJxX3NlbGVjdF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCitzdGF0aWMgaW50IHNldHVwX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlpZiAoIWlycV9jYW5fc2V0X2FmZmluaXR5KGlycSkpCiAJCXJldHVybiAwOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgZG9faXJxX3NlbGVjdF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmQpCitzdGF0aWMgaW5saW5lIGludCBzZXR1cF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmQpCiB7CiAJcmV0dXJuIGlycV9zZWxlY3RfYWZmaW5pdHkoaXJxKTsKIH0KQEAgLTE0OSwxNCArMTQ5LDE0IEBACiAJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gZG9faXJxX3NlbGVjdF9hZmZpbml0eShpcnEsIGRlc2MpOworCXJldCA9IHNldHVwX2FmZmluaXR5KGlycSwgZGVzYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkoaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGlubGluZSBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXJldHVybiAwOwogfQpAQCAtMzg5LDkgKzM4OSw5IEBACiAgKiBhbGxvY2F0ZSBzcGVjaWFsIGludGVycnVwdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgYXJjaGl0ZWN0dXJlLgogICovCiBzdGF0aWMgaW50Ci1fX3NldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKiBkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpCitfX3NldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKm5ldykKIHsKLQlzdHJ1Y3QgaXJxYWN0aW9uICpvbGQsICoqcDsKKwlzdHJ1Y3QgaXJxYWN0aW9uICpvbGQsICoqb2xkX3B0cjsKIAljb25zdCBjaGFyICpvbGRfbmFtZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc2hhcmVkID0gMDsKQEAgLTQyMyw4ICs0MjMsOCBAQAogCSAqIFRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgY29kZSBoYXMgdG8gYmUgZXhlY3V0ZWQgYXRvbWljYWxseQogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JcCA9ICZkZXNjLT5hY3Rpb247Ci0Jb2xkID0gKnA7CisJb2xkX3B0ciA9ICZkZXNjLT5hY3Rpb247CisJb2xkID0gKm9sZF9wdHI7CiAJaWYgKG9sZCkgewogCQkvKgogCQkgKiBDYW4ndCBzaGFyZSBpbnRlcnJ1cHRzIHVubGVzcyBib3RoIGFncmVlIHRvIGFuZCBhcmUKQEAgLTQ0Nyw4ICs0NDcsOCBAQAogCiAJCS8qIGFkZCBuZXcgaW50ZXJydXB0IGF0IGVuZCBvZiBpcnEgcXVldWUgKi8KIAkJZG8gewotCQkJcCA9ICZvbGQtPm5leHQ7Ci0JCQlvbGQgPSAqcDsKKwkJCW9sZF9wdHIgPSAmb2xkLT5uZXh0OworCQkJb2xkID0gKm9sZF9wdHI7CiAJCX0gd2hpbGUgKG9sZCk7CiAJCXNoYXJlZCA9IDE7CiAJfQpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX05PX0JBTEFOQ0lORzsKIAogCQkvKiBTZXQgZGVmYXVsdCBhZmZpbml0eSBtYXNrIG9uY2UgZXZlcnl0aGluZyBpcyBzZXR1cCAqLwotCQlkb19pcnFfc2VsZWN0X2FmZmluaXR5KGlycSwgZGVzYyk7CisJCXNldHVwX2FmZmluaXR5KGlycSwgZGVzYyk7CiAKIAl9IGVsc2UgaWYgKChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spCiAJCQkmJiAobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCQkJKGludCkobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKSk7CiAJfQogCi0JKnAgPSBuZXc7CisJKm9sZF9wdHIgPSBuZXc7CiAKIAkvKiBSZXNldCBicm9rZW4gaXJxIGRldGVjdGlvbiB3aGVuIGluc3RhbGxpbmcgbmV3IGhhbmRsZXIgKi8KIAlkZXNjLT5pcnFfY291bnQgPSAwOwpAQCAtNTQ5LDkgKzU0OSwxMDIgQEAKIAogCXJldHVybiBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzZXR1cF9pcnEpOworCisgLyoKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXIgYW4gaXJxYWN0aW9uIC0gdXNlZCB0byBmcmVlCisgKiByZWd1bGFyIGFuZCBzcGVjaWFsIGludGVycnVwdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgYXJjaGl0ZWN0dXJlLgorICovCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiAqX19mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24sICoqYWN0aW9uX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTihpbl9pbnRlcnJ1cHQoKSwgIlRyeWluZyB0byBmcmVlIElSUSAlZCBmcm9tIElSUSBjb250ZXh0IVxuIiwgaXJxKTsKKworCWlmICghZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgYWN0aW9ucyBwZXIgSVJRIGRlc2NyaXB0b3IsIGZpbmQgdGhlIHJpZ2h0CisJICogb25lIGJhc2VkIG9uIHRoZSBkZXZfaWQ6CisJICovCisJYWN0aW9uX3B0ciA9ICZkZXNjLT5hY3Rpb247CisJZm9yICg7OykgeworCQlhY3Rpb24gPSAqYWN0aW9uX3B0cjsKKworCQlpZiAoIWFjdGlvbikgeworCQkJV0FSTigxLCAiVHJ5aW5nIHRvIGZyZWUgYWxyZWFkeS1mcmVlIElSUSAlZFxuIiwgaXJxKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoYWN0aW9uLT5kZXZfaWQgPT0gZGV2X2lkKQorCQkJYnJlYWs7CisJCWFjdGlvbl9wdHIgPSAmYWN0aW9uLT5uZXh0OworCX0KKworCS8qIEZvdW5kIGl0IC0gbm93IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGVudHJpZXM6ICovCisJKmFjdGlvbl9wdHIgPSBhY3Rpb24tPm5leHQ7CisKKwkvKiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IFVNTCwgbWlnaHQgZGlzYXBwZWFyIG9uZSBkYXk6ICovCisjaWZkZWYgQ09ORklHX0lSUV9SRUxFQVNFX01FVEhPRAorCWlmIChkZXNjLT5jaGlwLT5yZWxlYXNlKQorCQlkZXNjLT5jaGlwLT5yZWxlYXNlKGlycSwgZGV2X2lkKTsKKyNlbmRpZgorCisJLyogSWYgdGhpcyB3YXMgdGhlIGxhc3QgaGFuZGxlciwgc2h1dCBkb3duIHRoZSBJUlEgbGluZTogKi8KKwlpZiAoIWRlc2MtPmFjdGlvbikgeworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RJU0FCTEVEOworCQlpZiAoZGVzYy0+Y2hpcC0+c2h1dGRvd24pCisJCQlkZXNjLT5jaGlwLT5zaHV0ZG93bihpcnEpOworCQllbHNlCisJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCXVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKGlycSwgYWN0aW9uKTsKKworCS8qIE1ha2Ugc3VyZSBpdCdzIG5vdCBiZWluZyB1c2VkIG9uIGFub3RoZXIgQ1BVOiAqLworCXN5bmNocm9uaXplX2lycShpcnEpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCisJLyoKKwkgKiBJdCdzIGEgc2hhcmVkIElSUSAtLSB0aGUgZHJpdmVyIG91Z2h0IHRvIGJlIHByZXBhcmVkIGZvciBhbiBJUlEKKwkgKiBldmVudCB0byBoYXBwZW4gZXZlbiBub3cgaXQncyBiZWluZyBmcmVlZCwgc28gbGV0J3MgbWFrZSBzdXJlIHRoYXQKKwkgKiBpcyBzbyBieSBkb2luZyBhbiBleHRyYSBjYWxsIHRvIHRoZSBoYW5kbGVyIC4uLi4KKwkgKgorCSAqICggV2UgZG8gdGhpcyBhZnRlciBhY3R1YWxseSBkZXJlZ2lzdGVyaW5nIGl0LCB0byBtYWtlIHN1cmUgdGhhdCBhCisJICogICAncmVhbCcgSVJRIGRvZXNuJ3QgcnVuIGluICogcGFyYWxsZWwgd2l0aCBvdXIgZmFrZS4gKQorCSAqLworCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlhY3Rpb24tPmhhbmRsZXIoaXJxLCBkZXZfaWQpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorI2VuZGlmCisJcmV0dXJuIGFjdGlvbjsKK30KIAogLyoqCi0gKglmcmVlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0CisgKglyZW1vdmVfaXJxIC0gZnJlZSBhbiBpbnRlcnJ1cHQKKyAqCUBpcnE6IEludGVycnVwdCBsaW5lIHRvIGZyZWUKKyAqCUBhY3Q6IGlycWFjdGlvbiBmb3IgdGhlIGludGVycnVwdAorICoKKyAqIFVzZWQgdG8gcmVtb3ZlIGludGVycnVwdHMgc3RhdGljYWxseSBzZXR1cCBieSB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLgorICovCit2b2lkIHJlbW92ZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0KQoreworCV9fZnJlZV9pcnEoaXJxLCBhY3QtPmRldl9pZCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfaXJxKTsKKworLyoqCisgKglmcmVlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0IGFsbG9jYXRlZCB3aXRoIHJlcXVlc3RfaXJxCiAgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBmcmVlCiAgKglAZGV2X2lkOiBEZXZpY2UgaWRlbnRpdHkgdG8gZnJlZQogICoKQEAgLTU2Niw3MyArNjU5LDcgQEAKICAqLwogdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlzdHJ1Y3QgaXJxYWN0aW9uICoqcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7Ci0KLQlpZiAoIWRlc2MpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JcCA9ICZkZXNjLT5hY3Rpb247Ci0JZm9yICg7OykgewotCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24gPSAqcDsKLQotCQlpZiAoYWN0aW9uKSB7Ci0JCQlzdHJ1Y3QgaXJxYWN0aW9uICoqcHAgPSBwOwotCi0JCQlwID0gJmFjdGlvbi0+bmV4dDsKLQkJCWlmIChhY3Rpb24tPmRldl9pZCAhPSBkZXZfaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIEZvdW5kIGl0IC0gbm93IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGVudHJpZXMgKi8KLQkJCSpwcCA9IGFjdGlvbi0+bmV4dDsKLQotCQkJLyogQ3VycmVudGx5IHVzZWQgb25seSBieSBVTUwsIG1pZ2h0IGRpc2FwcGVhciBvbmUgZGF5LiovCi0jaWZkZWYgQ09ORklHX0lSUV9SRUxFQVNFX01FVEhPRAotCQkJaWYgKGRlc2MtPmNoaXAtPnJlbGVhc2UpCi0JCQkJZGVzYy0+Y2hpcC0+cmVsZWFzZShpcnEsIGRldl9pZCk7Ci0jZW5kaWYKLQotCQkJaWYgKCFkZXNjLT5hY3Rpb24pIHsKLQkJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RJU0FCTEVEOwotCQkJCWlmIChkZXNjLT5jaGlwLT5zaHV0ZG93bikKLQkJCQkJZGVzYy0+Y2hpcC0+c2h1dGRvd24oaXJxKTsKLQkJCQllbHNlCi0JCQkJCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJCXVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKGlycSwgYWN0aW9uKTsKLQotCQkJLyogTWFrZSBzdXJlIGl0J3Mgbm90IGJlaW5nIHVzZWQgb24gYW5vdGhlciBDUFUgKi8KLQkJCXN5bmNocm9uaXplX2lycShpcnEpOwotI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQotCQkJLyoKLQkJCSAqIEl0J3MgYSBzaGFyZWQgSVJRIC0tIHRoZSBkcml2ZXIgb3VnaHQgdG8gYmUKLQkJCSAqIHByZXBhcmVkIGZvciBpdCB0byBoYXBwZW4gZXZlbiBub3cgaXQncwotCQkJICogYmVpbmcgZnJlZWQsIHNvIGxldCdzIG1ha2Ugc3VyZS4uLi4gIFdlIGRvCi0JCQkgKiB0aGlzIGFmdGVyIGFjdHVhbGx5IGRlcmVnaXN0ZXJpbmcgaXQsIHRvCi0JCQkgKiBtYWtlIHN1cmUgdGhhdCBhICdyZWFsJyBJUlEgZG9lc24ndCBydW4gaW4KLQkJCSAqIHBhcmFsbGVsIHdpdGggb3VyIGZha2UKLQkJCSAqLwotCQkJaWYgKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgewotCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCQlhY3Rpb24tPmhhbmRsZXIoaXJxLCBkZXZfaWQpOwotCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCX0KLSNlbmRpZgotCQkJa2ZyZWUoYWN0aW9uKTsKLQkJCXJldHVybjsKLQkJfQotCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIGFscmVhZHktZnJlZSBJUlEgJWRcbiIsIGlycSk7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCi0JCWR1bXBfc3RhY2soKTsKLSNlbmRpZgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9CisJa2ZyZWUoX19mcmVlX2lycShpcnEsIGRldl9pZCkpOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX2lycSk7CiAKQEAgLTY3OSwxMSArNzA2LDEyIEBACiAJICogdGhlIGJlaGF2aW9yIGlzIGNsYXNzaWZpZWQgYXMgIndpbGwgbm90IGZpeCIgc28gd2UgbmVlZCB0bwogCSAqIHN0YXJ0IG51ZGdpbmcgZHJpdmVycyBhd2F5IGZyb20gdXNpbmcgdGhhdCBpZGlvbS4KIAkgKi8KLQlpZiAoKGlycWZsYWdzICYgKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKQotCQkJPT0gKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKQotCQlwcl93YXJuaW5nKCJJUlEgJWQvJXM6IElSUUZfRElTQUJMRUQgaXMgbm90ICIKLQkJCQkiZ3VhcmFudGVlZCBvbiBzaGFyZWQgSVJRc1xuIiwKLQkJCQlpcnEsIGRldm5hbWUpOworCWlmICgoaXJxZmxhZ3MgJiAoSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCkpID09CisJCQkJCShJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkgeworCQlwcl93YXJuaW5nKAorCQkgICJJUlEgJWQvJXM6IElSUUZfRElTQUJMRUQgaXMgbm90IGd1YXJhbnRlZWQgb24gc2hhcmVkIElSUXNcbiIsCisJCQlpcnEsIGRldm5hbWUpOworCX0KIAogI2lmZGVmIENPTkZJR19MT0NLREVQCiAJLyoKQEAgLTcwOSwxNSArNzM3LDEzIEBACiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLCBHRlBfQVRPTUlDKTsKKwlhY3Rpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhY3Rpb24pCiAJCXJldHVybiAtRU5PTUVNOwogCiAJYWN0aW9uLT5oYW5kbGVyID0gaGFuZGxlcjsKIAlhY3Rpb24tPmZsYWdzID0gaXJxZmxhZ3M7Ci0JY3B1c19jbGVhcihhY3Rpb24tPm1hc2spOwogCWFjdGlvbi0+bmFtZSA9IGRldm5hbWU7Ci0JYWN0aW9uLT5uZXh0ID0gTlVMTDsKIAlhY3Rpb24tPmRldl9pZCA9IGRldl9pZDsKIAogCXJldHZhbCA9IF9fc2V0dXBfaXJxKGlycSwgZGVzYywgYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMgYi9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCmluZGV4IGFjZDg4MzUuLmFlZjE4YWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKKysrIGIva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYwpAQCAtMTcsMTYgKzE3LDExIEBACiAJCQkJIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKIAkJCQkgaW50IGNwdSwgaW50IG5yKQogewotCXVuc2lnbmVkIGxvbmcgYnl0ZXM7Ci0KIAlpbml0X2tzdGF0X2lycXMoZGVzYywgY3B1LCBucik7CiAKLQlpZiAoZGVzYy0+a3N0YXRfaXJxcyAhPSBvbGRfZGVzYy0+a3N0YXRfaXJxcykgewotCQkvKiBDb21wdXRlIGhvdyBtYW55IGJ5dGVzIHdlIG5lZWQgcGVyIGlycSBhbmQgYWxsb2NhdGUgdGhlbSAqLwotCQlieXRlcyA9IG5yICogc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0KLQkJbWVtY3B5KGRlc2MtPmtzdGF0X2lycXMsIG9sZF9kZXNjLT5rc3RhdF9pcnFzLCBieXRlcyk7Ci0JfQorCWlmIChkZXNjLT5rc3RhdF9pcnFzICE9IG9sZF9kZXNjLT5rc3RhdF9pcnFzKQorCQltZW1jcHkoZGVzYy0+a3N0YXRfaXJxcywgb2xkX2Rlc2MtPmtzdGF0X2lycXMsCisJCQkgbnIgKiBzaXplb2YoKmRlc2MtPmtzdGF0X2lycXMpKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCBkZDM2NGMxLi40ZDU2ODI5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlyZXR1cm4gb2s7CiB9CiAKLXN0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KQorc3RhdGljIHZvaWQgcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CkBAIC0xMjMsMTEgKzEyMywyMyBAQAogCiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOwogCX0KK30KKworc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJcG9sbF9hbGxfc2hhcmVkX2lycXMoKTsKIAogCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCiAJCSAgamlmZmllcyArIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMKTsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQordm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKQoreworCXBvbGxfYWxsX3NoYXJlZF9pcnFzKCk7Cit9CisjZW5kaWYKKwogLyoKICAqIElmIDk5LDkwMCBvZiB0aGUgcHJldmlvdXMgMTAwLDAwMCBpbnRlcnJ1cHRzIGhhdmUgbm90IGJlZW4gaGFuZGxlZAogICogdGhlbiBhc3N1bWUgdGhhdCB0aGUgSVJRIGlzIHN0dWNrIGluIHNvbWUgbWFubmVyLiBEcm9wIGEgZGlhZ25vc3RpYwpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjLmMgYi9rZXJuZWwva2V4ZWMuYwppbmRleCA4YTZkN2IwLi40ODM4OTk1IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWMuYworKysgYi9rZXJuZWwva2V4ZWMuYwpAQCAtMTQ2NSw2ICsxNDY1LDExIEBACiAJCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19GUkVFWkUpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIEVuYWJsZV9pcnFzOworCisJCS8qIFN1c3BlbmQgc3lzdGVtIGRldmljZXMgKi8KKwkJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKIAl9IGVsc2UKICNlbmRpZgogCXsKQEAgLTE0NzcsNiArMTQ4Miw4IEBACiAKICNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAogCWlmIChrZXhlY19pbWFnZS0+cHJlc2VydmVfY29udGV4dCkgeworCQlzeXNkZXZfcmVzdW1lKCk7CisgUG93ZXJfdXBfZGV2aWNlczoKIAkJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVE9SRSk7CiAgRW5hYmxlX2lycXM6CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sYXRlbmN5dG9wLmMgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCmluZGV4IDQ0OWRiNDYuLmNhMDdjNWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sYXRlbmN5dG9wLmMKKysrIGIva2VybmVsL2xhdGVuY3l0b3AuYwpAQCAtOSw2ICs5LDQ0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLworCisvKgorICogQ09ORklHX0xBVEVOQ1lUT1AgZW5hYmxlcyBhIGtlcm5lbCBsYXRlbmN5IHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHRoYXQgaXMKKyAqIHVzZWQgYnkgdGhlICJsYXRlbmN5dG9wIiB1c2Vyc3BhY2UgdG9vbC4gVGhlIGxhdGVuY3kgdGhhdCBpcyB0cmFja2VkIGlzIG5vdAorICogdGhlICd0cmFkaXRpb25hbCcgaW50ZXJydXB0IGxhdGVuY3kgKHdoaWNoIGlzIHByaW1hcmlseSBjYXVzZWQgYnkgc29tZXRoaW5nCisgKiBlbHNlIGNvbnN1bWluZyBDUFUpLCBidXQgaW5zdGVhZCwgaXQgaXMgdGhlIGxhdGVuY3kgYW4gYXBwbGljYXRpb24gZW5jb3VudGVycworICogYmVjYXVzZSB0aGUga2VybmVsIHNsZWVwcyBvbiBpdHMgYmVoYWxmIGZvciB2YXJpb3VzIHJlYXNvbnMuCisgKgorICogVGhpcyBjb2RlIHRyYWNrcyAyIGxldmVscyBvZiBzdGF0aXN0aWNzOgorICogMSkgU3lzdGVtIGxldmVsIGxhdGVuY3kKKyAqIDIpIFBlciBwcm9jZXNzIGxhdGVuY3kKKyAqCisgKiBUaGUgbGF0ZW5jeSBpcyBzdG9yZWQgaW4gZml4ZWQgc2l6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGluIGFuIGFjY3VtdWxhdGVkIGZvcm07CisgKiBpZiB0aGUgInNhbWUiIGxhdGVuY3kgY2F1c2UgaXMgaGl0IHR3aWNlLCB0aGlzIHdpbGwgYmUgdHJhY2tlZCBhcyBvbmUgZW50cnkKKyAqIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gQm90aCB0aGUgY291bnQsIHRvdGFsIGFjY3VtdWxhdGVkIGxhdGVuY3kgYW5kIG1heGltdW0KKyAqIGxhdGVuY3kgYXJlIHRyYWNrZWQgaW4gdGhpcyBkYXRhIHN0cnVjdHVyZS4gV2hlbiB0aGUgZml4ZWQgc2l6ZSBzdHJ1Y3R1cmUgaXMKKyAqIGZ1bGwsIG5vIG5ldyBjYXVzZXMgYXJlIHRyYWNrZWQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmbHVzaGVkIGJ5IHdyaXRpbmcgdG8KKyAqIHRoZSAvcHJvYyBmaWxlOyB0aGUgdXNlcnNwYWNlIHRvb2wgZG9lcyB0aGlzIG9uIGEgcmVndWxhciBiYXNpcy4KKyAqCisgKiBBIGxhdGVuY3kgY2F1c2UgaXMgaWRlbnRpZmllZCBieSBhIHN0cmluZ2lmaWVkIGJhY2t0cmFjZSBhdCB0aGUgcG9pbnQgdGhhdAorICogdGhlIHNjaGVkdWxlciBnZXRzIGludm9rZWQuIFRoZSB1c2VybGFuZCB0b29sIHdpbGwgdXNlIHRoaXMgc3RyaW5nIHRvCisgKiBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIGxhdGVuY3kgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS4KKyAqCisgKiBUaGUgaW5mb3JtYXRpb24gaXMgZXhwb3J0ZWQgdmlhIC9wcm9jL2xhdGVuY3lfc3RhdHMgYW5kIC9wcm9jLzxwaWQ+L2xhdGVuY3kuCisgKiBUaGVzZSBmaWxlcyBsb29rIGxpa2UgdGhpczoKKyAqCisgKiBMYXRlbmN5IFRvcCB2ZXJzaW9uIDogdjAuMQorICogNzAgNTk0MzMgNDg5NyBpOTE1X2lycV93YWl0IGRybV9pb2N0bCB2ZnNfaW9jdGwgZG9fdmZzX2lvY3RsIHN5c19pb2N0bAorICogfCAgICB8ICAgIHwgICAgfAorICogfCAgICB8ICAgIHwgICAgKy0tLS0+IHRoZSBzdHJpbmdpZmllZCBiYWNrdHJhY2UKKyAqIHwgICAgfCAgICArLS0tLS0tLS0tPiBUaGUgbWF4aW11bSBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IGluIG1pY3Jvc2Vjb25kcworICogfCAgICArLS0tLS0tLS0tLS0tLS0+IFRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IChtaWNyb3NlY29uZHMpCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLT4gVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGVudHJ5IGlzIGhpdAorICoKKyAqIChub3RlOiB0aGUgYXZlcmFnZSBsYXRlbmN5IGlzIHRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGRpdmlkZWQgYnkgdGhlIG51bWJlcgorICogb2YgdGltZXMpCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3l0b3AuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC03Miw3ICsxMTAsNyBAQAogCQkJCWZpcnN0bm9ubnVsbCA9IGk7CiAJCQljb250aW51ZTsKIAkJfQotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC0+YmFja3RyYWNlW3FdOwogCiAJCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTAxLDMxICsxMzksNTIgQEAKIAltZW1jcHkoJmxhdGVuY3lfcmVjb3JkW2ldLCBsYXQsIHNpemVvZihzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX3N0YWNrdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbGF0KQorLyoKKyAqIEl0ZXJhdG9yIHRvIHN0b3JlIGEgYmFja3RyYWNlIGludG8gYSBsYXRlbmN5IHJlY29yZCBlbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfc3RhY2t0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJc3RydWN0IGxhdGVuY3lfcmVjb3JkICpsYXQpCiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCiAJbWVtc2V0KCZ0cmFjZSwgMCwgc2l6ZW9mKHRyYWNlKSk7CiAJdHJhY2UubWF4X2VudHJpZXMgPSBMVF9CQUNLVFJBQ0VERVBUSDsKIAl0cmFjZS5lbnRyaWVzID0gJmxhdC0+YmFja3RyYWNlWzBdOwotCXRyYWNlLnNraXAgPSAwOwogCXNhdmVfc3RhY2tfdHJhY2VfdHNrKHRzaywgJnRyYWNlKTsKIH0KIAorLyoqCisgKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJlZCBsYXRlbmN5CisgKiBAdHNrIC0gdGhlIHRhc2sgc3RydWN0IG9mIHRoZSB0YXNrIGhpdHRpbmcgdGhlIGxhdGVuY3kKKyAqIEB1c2VjcyAtIHRoZSBkdXJhdGlvbiBvZiB0aGUgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMKKyAqIEBpbnRlciAtIDEgaWYgdGhlIHNsZWVwIHdhcyBpbnRlcnJ1cHRpYmxlLCAwIGlmIHVuaW50ZXJydXB0aWJsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJlY29yZGluZyBsYXRlbmN5IGVudHJpZXMKKyAqIGFzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIGEgZmV3IHNwZWNpYWwgY2FzZXMgdG8gZGVhbCB3aXRoIG5vcm1hbCAnbm9uLWxhdGVuY3knCisgKiBzbGVlcHM6IHNwZWNpZmljYWxseSwgaW50ZXJydXB0aWJsZSBzbGVlcCBsb25nZXIgdGhhbiA1IG1zZWMgaXMgc2tpcHBlZAorICogc2luY2UgdGhpcyB1c3VhbGx5IGlzIGNhdXNlZCBieSB3YWl0aW5nIGZvciBldmVudHMgdmlhIHNlbGVjdCgpIGFuZCBjby4KKyAqCisgKiBOZWdhdGl2ZSBsYXRlbmNpZXMgKGNhdXNlZCBieSB0aW1lIGdvaW5nIGJhY2t3YXJkcykgYXJlIGFsc28gZXhwbGljaXRseQorICogc2tpcHBlZC4KKyAqLwogdm9pZCBfX3NjaGVkCi1hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK19fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgcTsKIAlzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQgbGF0OwogCi0JaWYgKCFsYXRlbmN5dG9wX2VuYWJsZWQpCi0JCXJldHVybjsKLQogCS8qIExvbmcgaW50ZXJydXB0aWJsZSB3YWl0cyBhcmUgZ2VuZXJhbGx5IHVzZXIgcmVxdWVzdGVkLi4uICovCiAJaWYgKGludGVyICYmIHVzZWNzID4gNTAwMCkKIAkJcmV0dXJuOwogCisJLyogTmVnYXRpdmUgc2xlZXBzIGFyZSB0aW1lIGdvaW5nIGJhY2t3YXJkcyAqLworCS8qIFplcm8tdGltZSBzbGVlcHMgYXJlIG5vbi1pbnRlcmVzdGluZyAqLworCWlmICh1c2VjcyA8PSAwKQorCQlyZXR1cm47CisKIAltZW1zZXQoJmxhdCwgMCwgc2l6ZW9mKGxhdCkpOwogCWxhdC5jb3VudCA9IDE7CiAJbGF0LnRpbWUgPSB1c2VjczsKQEAgLTE0MywxMiArMjAyLDEyIEBACiAJaWYgKHRzay0+bGF0ZW5jeV9yZWNvcmRfY291bnQgPj0gTFRfU0FWRUNPVU5UKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTFRfU0FWRUNPVU5UIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IExUX1NBVkVDT1VOVDsgaSsrKSB7CiAJCXN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbXlsYXQ7CiAJCWludCBzYW1lID0gMTsKIAogCQlteWxhdCA9ICZ0c2stPmxhdGVuY3lfcmVjb3JkW2ldOwotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC5iYWNrdHJhY2VbcV07CiAKIAkJCWlmIChteWxhdC0+YmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTg2LDcgKzI0NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWExSOyBpKyspIHsKIAkJaWYgKGxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVswXSkgewogCQkJaW50IHE7Ci0JCQlzZXFfcHJpbnRmKG0sICIlaSAlbGkgJWxpICIsCisJCQlzZXFfcHJpbnRmKG0sICIlaSAlbHUgJWx1ICIsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0uY291bnQsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0udGltZSwKIAkJCQlsYXRlbmN5X3JlY29yZFtpXS5tYXgpOwpAQCAtMjIzLDcgKzI4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIGxzdGF0c19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHN0YXRzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsc3RhdHNfZm9wcyA9IHsKIAkub3BlbgkJPSBsc3RhdHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gbHN0YXRzX3dyaXRlLApAQCAtMjM2LDQgKzI5NSw0IEBACiAJcHJvY19jcmVhdGUoImxhdGVuY3lfc3RhdHMiLCAwNjQ0LCBOVUxMLCAmbHN0YXRzX2ZvcHMpOwogCXJldHVybiAwOwogfQotX19pbml0Y2FsbChpbml0X2xzdGF0c19wcm9jZnMpOworZGV2aWNlX2luaXRjYWxsKGluaXRfbHN0YXRzX3Byb2Nmcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYmEyMjQ4NC4uNzc2NzIyMyAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAkvKiBTdG9yZSB0aGUgbmFtZSBvZiB0aGUgbGFzdCB1bmxvYWRlZCBtb2R1bGUgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8KIAlzdHJsY3B5KGxhc3RfdW5sb2FkZWRfbW9kdWxlLCBtb2QtPm5hbWUsIHNpemVvZihsYXN0X3VubG9hZGVkX21vZHVsZSkpOwotCXVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUobW9kLT5uYW1lKTsKKwlkZGVidWdfcmVtb3ZlX21vZHVsZShtb2QtPm5hbWUpOwogCWZyZWVfbW9kdWxlKG1vZCk7CiAKICBvdXQ6CkBAIC0xODI3LDE5ICsxODI3LDEzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0tBTExTWU1TICovCiAKLXN0YXRpYyB2b2lkIGR5bmFtaWNfcHJpbnRrX3NldHVwKHN0cnVjdCBtb2RfZGVidWcgKmRlYnVnLCB1bnNpZ25lZCBpbnQgbnVtKQorc3RhdGljIHZvaWQgZHluYW1pY19kZWJ1Z19zZXR1cChzdHJ1Y3QgX2RkZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCiB7Ci0jaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCi0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoZGVidWdbaV0ubW9kbmFtZSwKLQkJCQkJICAgICAgZGVidWdbaV0udHlwZSwKLQkJCQkJICAgICAgZGVidWdbaV0ubG9naWNhbF9tb2RuYW1lLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5mbGFnX25hbWVzLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5oYXNoLCBkZWJ1Z1tpXS5oYXNoMik7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyAqLworI2lmZGVmIENPTkZJR19EWU5BTUlDX0RFQlVHCisJaWYgKGRkZWJ1Z19hZGRfbW9kdWxlKGRlYnVnLCBudW0sIGRlYnVnLT5tb2RuYW1lKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJkeW5hbWljIGRlYnVnIGVycm9yIGFkZGluZyBtb2R1bGU6ICVzXG4iLAorCQkJCQlkZWJ1Zy0+bW9kbmFtZSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgKm1vZHVsZV9hbGxvY191cGRhdGVfYm91bmRzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTIwMTUsMTQgKzIwMDksNiBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGZyZWVfbW9kOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCW1vZC0+cmVmcHRyID0gcGVyY3B1X21vZGFsbG9jKHNpemVvZihsb2NhbF90KSwgX19hbGlnbm9mX18obG9jYWxfdCksCi0JCQkJICAgICAgbW9kLT5uYW1lKTsKLQlpZiAoIW1vZC0+cmVmcHRyKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9tb2Q7Ci0JfQotI2VuZGlmCiAJaWYgKHBjcHVpbmRleCkgewogCQkvKiBXZSBoYXZlIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciB0aGlzIHNlY3Rpb24uICovCiAJCXBlcmNwdSA9IHBlcmNwdV9tb2RhbGxvYyhzZWNoZHJzW3BjcHVpbmRleF0uc2hfc2l6ZSwKQEAgLTIwMzAsNyArMjAxNiw3IEBACiAJCQkJCSBtb2QtPm5hbWUpOwogCQlpZiAoIXBlcmNwdSkgewogCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gZnJlZV9wZXJjcHU7CisJCQlnb3RvIGZyZWVfbW9kOwogCQl9CiAJCXNlY2hkcnNbcGNwdWluZGV4XS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwogCQltb2QtPnBlcmNwdSA9IHBlcmNwdTsKQEAgLTIwODIsNiArMjA2OCwxNCBAQAogCS8qIE1vZHVsZSBoYXMgYmVlbiBtb3ZlZC4gKi8KIAltb2QgPSAodm9pZCAqKXNlY2hkcnNbbW9kaW5kZXhdLnNoX2FkZHI7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCisJbW9kLT5yZWZwdHIgPSBwZXJjcHVfbW9kYWxsb2Moc2l6ZW9mKGxvY2FsX3QpLCBfX2FsaWdub2ZfXyhsb2NhbF90KSwKKwkJCQkgICAgICBtb2QtPm5hbWUpOworCWlmICghbW9kLT5yZWZwdHIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2luaXQ7CisJfQorI2VuZGlmCiAJLyogTm93IHdlJ3ZlIG1vdmVkIG1vZHVsZSwgaW5pdGlhbGl6ZSBsaW5rZWQgbGlzdHMsIGV0Yy4gKi8KIAltb2R1bGVfdW5sb2FkX2luaXQobW9kKTsKIApAQCAtMjIxMywxMiArMjIwNywxMyBAQAogCWFkZF9rYWxsc3ltcyhtb2QsIHNlY2hkcnMsIHN5bWluZGV4LCBzdHJpbmRleCwgc2Vjc3RyaW5ncyk7CiAKIAlpZiAoIW1vZC0+dGFpbnRzKSB7Ci0JCXN0cnVjdCBtb2RfZGVidWcgKmRlYnVnOworCQlzdHJ1Y3QgX2RkZWJ1ZyAqZGVidWc7CiAJCXVuc2lnbmVkIGludCBudW1fZGVidWc7CiAKIAkJZGVidWcgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX192ZXJib3NlIiwKIAkJCQkgICAgIHNpemVvZigqZGVidWcpLCAmbnVtX2RlYnVnKTsKLQkJZHluYW1pY19wcmludGtfc2V0dXAoZGVidWcsIG51bV9kZWJ1Zyk7CisJCWlmIChkZWJ1ZykKKwkJCWR5bmFtaWNfZGVidWdfc2V0dXAoZGVidWcsIG51bV9kZWJ1Zyk7CiAJfQogCiAJLyogc2VjaGRyc1swXS5zaF9zaXplIGlzIGFsd2F5cyB6ZXJvICovCkBAIC0yMjg4LDE1ICsyMjgzLDE3IEBACiAJZnRyYWNlX3JlbGVhc2UobW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpOwogIGZyZWVfdW5sb2FkOgogCW1vZHVsZV91bmxvYWRfZnJlZShtb2QpOwotCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7Ci0gZnJlZV9jb3JlOgotCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfY29yZSk7Ci0gZnJlZV9wZXJjcHU6Ci0JaWYgKHBlcmNwdSkKLQkJcGVyY3B1X21vZGZyZWUocGVyY3B1KTsKKyBmcmVlX2luaXQ6CiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQogCXBlcmNwdV9tb2RmcmVlKG1vZC0+cmVmcHRyKTsKICNlbmRpZgorCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CisgZnJlZV9jb3JlOgorCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfY29yZSk7CisJLyogbW9kIHdpbGwgYmUgZnJlZWQgd2l0aCBjb3JlLiBEb24ndCBhY2Nlc3MgaXQgYmV5b25kIHRoaXMgbGluZSEgKi8KKyBmcmVlX3BlcmNwdToKKwlpZiAocGVyY3B1KQorCQlwZXJjcHVfbW9kZnJlZShwZXJjcHUpOwogIGZyZWVfbW9kOgogCWtmcmVlKGFyZ3MpOwogIGZyZWVfaGRyOgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggMjMxM2E0Yy4uOGU1ZDlhNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC02ODEsNiArNjgxLDMzIEBACiB9CiAKIC8qCisgKiBTYW1wbGUgYSBwcm9jZXNzICh0aHJlYWQgZ3JvdXApIHRpbWVyIGZvciB0aGUgZ2l2ZW4gZ3JvdXBfbGVhZGVyIHRhc2suCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBmb3IgcmVhZGluZy4KKyAqLworc3RhdGljIGludCBjcHVfdGltZXJfc2FtcGxlX2dyb3VwKGNvbnN0IGNsb2NraWRfdCB3aGljaF9jbG9jaywKKwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQkgIHVuaW9uIGNwdV90aW1lX2NvdW50ICpjcHUpCit7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCisJdGhyZWFkX2dyb3VwX2NwdXRpbWVyKHAsICZjcHV0aW1lKTsKKwlzd2l0Y2ggKENQVUNMT0NLX1dISUNIKHdoaWNoX2Nsb2NrKSkgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKKwkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVDTE9DS19WSVJUOgorCQljcHUtPmNwdSA9IGNwdXRpbWUudXRpbWU7CisJCWJyZWFrOworCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6CisJCWNwdS0+c2NoZWQgPSBjcHV0aW1lLnN1bV9leGVjX3J1bnRpbWUgKyB0YXNrX2RlbHRhX2V4ZWMocCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKICAqIEd1dHMgb2Ygc3lzX3RpbWVyX3NldHRpbWUgZm9yIENQVSB0aW1lcnMuCiAgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSB0aW1lciBsb2NrZWQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKiBJZiB3ZSByZXR1cm4gVElNRVJfUkVUUlksIGl0J3MgbmVjZXNzYXJ5IHRvIHJlbGVhc2UgdGhlIHRpbWVyJ3MgbG9jawpAQCAtNzQxLDcgKzc2OCw3IEBACiAJaWYgKENQVUNMT0NLX1BFUlRIUkVBRCh0aW1lci0+aXRfY2xvY2spKSB7CiAJCWNwdV9jbG9ja19zYW1wbGUodGltZXItPml0X2Nsb2NrLCBwLCAmdmFsKTsKIAl9IGVsc2UgewotCQljcHVfY2xvY2tfc2FtcGxlX2dyb3VwKHRpbWVyLT5pdF9jbG9jaywgcCwgJnZhbCk7CisJCWNwdV90aW1lcl9zYW1wbGVfZ3JvdXAodGltZXItPml0X2Nsb2NrLCBwLCAmdmFsKTsKIAl9CiAKIAlpZiAob2xkKSB7CkBAIC04ODksNyArOTE2LDcgQEAKIAkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJCWdvdG8gZGVhZDsKIAkJfSBlbHNlIHsKLQkJCWNwdV9jbG9ja19zYW1wbGVfZ3JvdXAodGltZXItPml0X2Nsb2NrLCBwLCAmbm93KTsKKwkJCWNwdV90aW1lcl9zYW1wbGVfZ3JvdXAodGltZXItPml0X2Nsb2NrLCBwLCAmbm93KTsKIAkJCWNsZWFyX2RlYWQgPSAodW5saWtlbHkocC0+ZXhpdF9zdGF0ZSkgJiYKIAkJCQkgICAgICB0aHJlYWRfZ3JvdXBfZW1wdHkocCkpOwogCQl9CkBAIC0xMjQ0LDcgKzEyNzEsNyBAQAogCQkJY2xlYXJfZGVhZF90YXNrKHRpbWVyLCBub3cpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JCWNwdV9jbG9ja19zYW1wbGVfZ3JvdXAodGltZXItPml0X2Nsb2NrLCBwLCAmbm93KTsKKwkJY3B1X3RpbWVyX3NhbXBsZV9ncm91cCh0aW1lci0+aXRfY2xvY2ssIHAsICZub3cpOwogCQlidW1wX2NwdV90aW1lcih0aW1lciwgbm93KTsKIAkJLyogTGVhdmUgdGhlIHRhc2tsaXN0X2xvY2sgbG9ja2VkIGZvciB0aGUgY2FsbCBiZWxvdy4gICovCiAJfQpAQCAtMTM0Myw3ICsxMzcwLDggQEAKIAkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZncm91cF9zYW1wbGUsICZzaWctPmNwdXRpbWVfZXhwaXJlcykpCiAJCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFk7CiB9CiAKIC8qCkBAIC0xNDA5LDMzICsxNDM3LDYgQEAKIH0KIAogLyoKLSAqIFNhbXBsZSBhIHByb2Nlc3MgKHRocmVhZCBncm91cCkgdGltZXIgZm9yIHRoZSBnaXZlbiBncm91cF9sZWFkZXIgdGFzay4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGZvciByZWFkaW5nLgotICovCi1zdGF0aWMgaW50IGNwdV90aW1lcl9zYW1wbGVfZ3JvdXAoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLAotCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkJCSAgdW5pb24gY3B1X3RpbWVfY291bnQgKmNwdSkKLXsKLQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7Ci0KLQl0aHJlYWRfZ3JvdXBfY3B1dGltZXIocCwgJmNwdXRpbWUpOwotCXN3aXRjaCAoQ1BVQ0xPQ0tfV0hJQ0god2hpY2hfY2xvY2spKSB7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBDUFVDTE9DS19QUk9GOgotCQljcHUtPmNwdSA9IGNwdXRpbWVfYWRkKGNwdXRpbWUudXRpbWUsIGNwdXRpbWUuc3RpbWUpOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCWNwdS0+Y3B1ID0gY3B1dGltZS51dGltZTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJY3B1LT5zY2hlZCA9IGNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZSArIHRhc2tfZGVsdGFfZXhlYyhwKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgogICogU2V0IG9uZSBvZiB0aGUgcHJvY2Vzcy13aWRlIHNwZWNpYWwgY2FzZSBDUFUgdGltZXJzLgogICogVGhlIHRzay0+c2lnaGFuZC0+c2lnbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci4KICAqIFRoZSAqbmV3dmFsIGFyZ3VtZW50IGlzIHJlbGF0aXZlIGFuZCB3ZSB1cGRhdGUgaXQgdG8gYmUgYWJzb2x1dGUsICpvbGR2YWwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9NYWtlZmlsZSBiL2tlcm5lbC9wb3dlci9NYWtlZmlsZQppbmRleCBkN2ExMDE2Li43MjBlYTRmIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKKysrIGIva2VybmVsL3Bvd2VyL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogRVhUUkFfQ0ZMQUdTCSs9CS1EREVCVUcKIGVuZGlmCiAKLW9iai15CQkJCTo9IG1haW4ubworb2JqLSQoQ09ORklHX1BNKQkJKz0gbWFpbi5vCiBvYmotJChDT05GSUdfUE1fU0xFRVApCQkrPSBjb25zb2xlLm8KIG9iai0kKENPTkZJR19GUkVFWkVSKQkJKz0gcHJvY2Vzcy5vCiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcC5vIGRpc2subyBzbmFwc2hvdC5vIHN3YXAubyB1c2VyLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9jb25zb2xlLmMgYi9rZXJuZWwvcG93ZXIvY29uc29sZS5jCmluZGV4IGI4NjI4YmUuLmEzOTYxYjIwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvY29uc29sZS5jCisrKyBiL2tlcm5lbC9wb3dlci9jb25zb2xlLmMKQEAgLTc4LDYgKzc4LDEyIEBACiAJfQogCXNldF9jb25zb2xlKG9yaWdfZmdjb25zb2xlKTsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisKKwlpZiAodnRfd2FpdGFjdGl2ZShvcmlnX2ZnY29uc29sZSkpIHsKKwkJcHJfZGVidWcoIlJlc3VtZTogQ2FuJ3Qgc3dpdGNoIFZDcy4iKTsKKwkJcmV0dXJuOworCX0KKwogCWttc2dfcmVkaXJlY3QgPSBvcmlnX2ttc2c7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IDQzMmVlNTcuLjRhNGEyMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtMjI3LDYgKzIyNywxMiBAQAogCQkJImFib3J0aW5nIGhpYmVybmF0aW9uXG4iKTsKIAkJZ290byBFbmFibGVfaXJxczsKIAl9CisJc3lzZGV2X3N1c3BlbmQoUE1TR19GUkVFWkUpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIgIlBNOiBTb21lIGRldmljZXMgZmFpbGVkIHRvIHBvd2VyIGRvd24sICIKKwkJCSJhYm9ydGluZyBoaWJlcm5hdGlvblxuIik7CisJCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKKwl9CiAKIAlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0NPUkUpKQogCQlnb3RvIFBvd2VyX3VwOwpAQCAtMjQyLDkgKzI0OCwxMSBAQAogCWlmICghaW5fc3VzcGVuZCkKIAkJcGxhdGZvcm1fbGVhdmUocGxhdGZvcm1fbW9kZSk7CiAgUG93ZXJfdXA6CisJc3lzZGV2X3Jlc3VtZSgpOwogCS8qIE5PVEU6ICBkZXZpY2VfcG93ZXJfdXAoKSBpcyBqdXN0IGEgcmVzdW1lKCkgZm9yIGRldmljZXMKIAkgKiB0aGF0IHN1c3BlbmRlZCB3aXRoIGlycXMgb2ZmIC4uLiBubyBvdmVyYWxsIHBvd2VydXAuCiAJICovCisgUG93ZXJfdXBfZGV2aWNlczoKIAlkZXZpY2VfcG93ZXJfdXAoaW5fc3VzcGVuZCA/CiAJCShlcnJvciA/IFBNU0dfUkVDT1ZFUiA6IFBNU0dfVEhBVykgOiBQTVNHX1JFU1RPUkUpOwogIEVuYWJsZV9pcnFzOgpAQCAtMzM1LDYgKzM0Myw3IEBACiAJCQkiYWJvcnRpbmcgcmVzdW1lXG4iKTsKIAkJZ290byBFbmFibGVfaXJxczsKIAl9CisJc3lzZGV2X3N1c3BlbmQoUE1TR19RVUlFU0NFKTsKIAkvKiBXZSdsbCBpZ25vcmUgc2F2ZWQgc3RhdGUsIGJ1dCB0aGlzIGdldHMgcHJlZW1wdCBjb3VudCAoZXRjKSByaWdodCAqLwogCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CiAJZXJyb3IgPSByZXN0b3JlX2hpZ2htZW0oKTsKQEAgLTM1Nyw2ICszNjYsNyBAQAogCXN3c3VzcF9mcmVlKCk7CiAJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKIAl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisJc3lzZGV2X3Jlc3VtZSgpOwogCWRldmljZV9wb3dlcl91cChQTVNHX1JFQ09WRVIpOwogIEVuYWJsZV9pcnFzOgogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTQ0MCw2ICs0NTAsNyBAQAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX0hJQkVSTkFURSk7CiAJaWYgKCFlcnJvcikgeworCQlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7CiAJCWhpYmVybmF0aW9uX29wcy0+ZW50ZXIoKTsKIAkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCiAJCXdoaWxlICgxKTsKQEAgLTU5NSw2ICs2MDYsMTIgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKIAkvKgorCSAqIElmIHRoZSB1c2VyIHNhaWQgIm5vcmVzdW1lIi4uIGJhaWwgb3V0IGVhcmx5LgorCSAqLworCWlmIChub3Jlc3VtZSkKKwkJcmV0dXJuIDA7CisKKwkvKgogCSAqIG5hbWVfdG9fZGV2X3QoKSBiZWxvdyB0YWtlcyBhIHN5c2ZzIGJ1ZmZlciBtdXRleCB3aGVuIHN5c2ZzCiAJICogaXMgY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwuIFNpbmNlIHRoZSByZWd1bGFyIGhpYmVybmF0ZQogCSAqIHRyaWdnZXIgcGF0aCBpcyB2aWEgc3lzZnMgd2hpY2ggdGFrZXMgYSBidWZmZXIgbXV0ZXggYmVmb3JlCkBAIC02MTAsNiArNjI3LDExIEBACiAJCQltdXRleF91bmxvY2soJnBtX211dGV4KTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CisJCS8qCisJCSAqIFNvbWUgZGV2aWNlIGRpc2NvdmVyeSBtaWdodCBzdGlsbCBiZSBpbiBwcm9ncmVzczsgd2UgbmVlZAorCQkgKiB0byB3YWl0IGZvciB0aGlzIHRvIGZpbmlzaC4KKwkJICovCisJCXdhaXRfZm9yX2RldmljZV9wcm9iZSgpOwogCQlzd3N1c3BfcmVzdW1lX2RldmljZSA9IG5hbWVfdG9fZGV2X3QocmVzdW1lX2ZpbGUpOwogCQlwcl9kZWJ1ZygiUE06IFJlc3VtZSBmcm9tIHBhcnRpdGlvbiAlc1xuIiwgcmVzdW1lX2ZpbGUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCBiNGQyMTkwLi5jOTYzMmY4IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTI5OCw4ICsyOTgsMTIgQEAKIAkJZ290byBEb25lOwogCX0KIAotCWlmICghc3VzcGVuZF90ZXN0KFRFU1RfQ09SRSkpCi0JCWVycm9yID0gc3VzcGVuZF9vcHMtPmVudGVyKHN0YXRlKTsKKwllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CisJaWYgKCFlcnJvcikgeworCQlpZiAoIXN1c3BlbmRfdGVzdChURVNUX0NPUkUpKQorCQkJZXJyb3IgPSBzdXNwZW5kX29wcy0+ZW50ZXIoc3RhdGUpOworCQlzeXNkZXZfcmVzdW1lKCk7CisJfQogCiAJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKICBEb25lOgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3YXAuYyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKaW5kZXggNmRhMTQzNS4uNTA1ZjMxOSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3YXAuYworKysgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCkBAIC02MCw2ICs2MCw3IEBACiBzdGF0aWMgaW50IHN1Ym1pdChpbnQgcncsIHBnb2ZmX3QgcGFnZV9vZmYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJc3RydWN0IGJpbyAqKmJpb19jaGFpbikKIHsKKwljb25zdCBpbnQgYmlvX3J3ID0gcncgfCAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpOwogCXN0cnVjdCBiaW8gKmJpbzsKIAogCWJpbyA9IGJpb19hbGxvYyhfX0dGUF9XQUlUIHwgX19HRlBfSElHSCwgMSk7CkBAIC04MCw3ICs4MSw3IEBACiAJYmlvX2dldChiaW8pOwogCiAJaWYgKGJpb19jaGFpbiA9PSBOVUxMKSB7Ci0JCXN1Ym1pdF9iaW8ocncgfCAoMSA8PCBCSU9fUldfU1lOQyksIGJpbyk7CisJCXN1Ym1pdF9iaW8oYmlvX3J3LCBiaW8pOwogCQl3YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOwogCQlpZiAocncgPT0gUkVBRCkKIAkJCWJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTsKQEAgLTkwLDcgKzkxLDcgQEAKIAkJCWdldF9wYWdlKHBhZ2UpOwkvKiBUaGVzZSBwYWdlcyBhcmUgZnJlZWQgbGF0ZXIgKi8KIAkJYmlvLT5iaV9wcml2YXRlID0gKmJpb19jaGFpbjsKIAkJKmJpb19jaGFpbiA9IGJpbzsKLQkJc3VibWl0X2JpbyhydyB8ICgxIDw8IEJJT19SV19TWU5DKSwgYmlvKTsKKwkJc3VibWl0X2JpbyhiaW9fcncsIGJpbyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3VzZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyLmMKaW5kZXggMDA1YjkzZC4uNmM4NTM1OSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC05NSwxNSArOTUsMTUgQEAKIAkJZGF0YS0+c3dhcCA9IHN3c3VzcF9yZXN1bWVfZGV2aWNlID8KIAkJCXN3YXBfdHlwZV9vZihzd3N1c3BfcmVzdW1lX2RldmljZSwgMCwgTlVMTCkgOiAtMTsKIAkJZGF0YS0+bW9kZSA9IE9fUkRPTkxZOwotCQllcnJvciA9IHBtX25vdGlmaWVyX2NhbGxfY2hhaW4oUE1fUkVTVE9SRV9QUkVQQVJFKTsKLQkJaWYgKGVycm9yKQotCQkJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9QT1NUX1JFU1RPUkUpOwotCX0gZWxzZSB7Ci0JCWRhdGEtPnN3YXAgPSAtMTsKLQkJZGF0YS0+bW9kZSA9IE9fV1JPTkxZOwogCQllcnJvciA9IHBtX25vdGlmaWVyX2NhbGxfY2hhaW4oUE1fSElCRVJOQVRJT05fUFJFUEFSRSk7CiAJCWlmIChlcnJvcikKIAkJCXBtX25vdGlmaWVyX2NhbGxfY2hhaW4oUE1fUE9TVF9ISUJFUk5BVElPTik7CisJfSBlbHNlIHsKKwkJZGF0YS0+c3dhcCA9IC0xOworCQlkYXRhLT5tb2RlID0gT19XUk9OTFk7CisJCWVycm9yID0gcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9SRVNUT1JFX1BSRVBBUkUpOworCQlpZiAoZXJyb3IpCisJCQlwbV9ub3RpZmllcl9jYWxsX2NoYWluKFBNX1BPU1RfUkVTVE9SRSk7CiAJfQogCWlmIChlcnJvcikKIAkJYXRvbWljX2luYygmc25hcHNob3RfZGV2aWNlX2F2YWlsYWJsZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggNjkxODhmMi4uZTM2MDJkMCAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtNzMsNyArNzMsNiBAQAogICogZHJpdmVyIHN5c3RlbS4KICAqLwogc3RhdGljIERFQ0xBUkVfTVVURVgoY29uc29sZV9zZW0pOwotc3RhdGljIERFQ0xBUkVfTVVURVgoc2Vjb25kYXJ5X2NvbnNvbGVfc2VtKTsKIHN0cnVjdCBjb25zb2xlICpjb25zb2xlX2RyaXZlcnM7CiBFWFBPUlRfU1lNQk9MX0dQTChjb25zb2xlX2RyaXZlcnMpOwogCkBAIC04OTEsMTIgKzg5MCwxNCBAQAogCXByaW50aygiU3VzcGVuZGluZyBjb25zb2xlKHMpICh1c2Ugbm9fY29uc29sZV9zdXNwZW5kIHRvIGRlYnVnKVxuIik7CiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCWNvbnNvbGVfc3VzcGVuZGVkID0gMTsKKwl1cCgmY29uc29sZV9zZW0pOwogfQogCiB2b2lkIHJlc3VtZV9jb25zb2xlKHZvaWQpCiB7CiAJaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCkKIAkJcmV0dXJuOworCWRvd24oJmNvbnNvbGVfc2VtKTsKIAljb25zb2xlX3N1c3BlbmRlZCA9IDA7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogfQpAQCAtOTEyLDExICs5MTMsOSBAQAogdm9pZCBhY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpCiB7CiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKLQlpZiAoY29uc29sZV9zdXNwZW5kZWQpIHsKLQkJZG93bigmc2Vjb25kYXJ5X2NvbnNvbGVfc2VtKTsKLQkJcmV0dXJuOwotCX0KIAlkb3duKCZjb25zb2xlX3NlbSk7CisJaWYgKGNvbnNvbGVfc3VzcGVuZGVkKQorCQlyZXR1cm47CiAJY29uc29sZV9sb2NrZWQgPSAxOwogCWNvbnNvbGVfbWF5X3NjaGVkdWxlID0gMTsKIH0KQEAgLTkyNiw2ICs5MjUsMTAgQEAKIHsKIAlpZiAoZG93bl90cnlsb2NrKCZjb25zb2xlX3NlbSkpCiAJCXJldHVybiAtMTsKKwlpZiAoY29uc29sZV9zdXNwZW5kZWQpIHsKKwkJdXAoJmNvbnNvbGVfc2VtKTsKKwkJcmV0dXJuIC0xOworCX0KIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAwOwogCXJldHVybiAwOwpAQCAtOTc5LDcgKzk4Miw3IEBACiAJdW5zaWduZWQgd2FrZV9rbG9nZCA9IDA7CiAKIAlpZiAoY29uc29sZV9zdXNwZW5kZWQpIHsKLQkJdXAoJnNlY29uZGFyeV9jb25zb2xlX3NlbSk7CisJCXVwKCZjb25zb2xlX3NlbSk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VjbGFzc2ljLmMgYi9rZXJuZWwvcmN1Y2xhc3NpYy5jCmluZGV4IGJkNWE5MDAuLjY1NGM2NDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VjbGFzc2ljLmMKKysrIGIva2VybmVsL3JjdWNsYXNzaWMuYwpAQCAtNjc5LDggKzY3OSw4IEBACiB2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpCiB7CiAJaWYgKHVzZXIgfHwKLQkgICAgKGlkbGVfY3B1KGNwdSkgJiYgIWluX3NvZnRpcnEoKSAmJgotCQkJCWhhcmRpcnFfY291bnQoKSA8PSAoMSA8PCBIQVJESVJRX1NISUZUKSkpIHsKKwkgICAgKGlkbGVfY3B1KGNwdSkgJiYgcmN1X3NjaGVkdWxlcl9hY3RpdmUgJiYKKwkgICAgICFpbl9zb2Z0aXJxKCkgJiYgaGFyZGlycV9jb3VudCgpIDw9ICgxIDw8IEhBUkRJUlFfU0hJRlQpKSkgewogCiAJCS8qCiAJCSAqIEdldCBoZXJlIGlmIHRoaXMgQ1BVIHRvb2sgaXRzIGludGVycnVwdCBmcm9tIHVzZXIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggZDkyYTc2YS4uY2FlOGEwNSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKIGVudW0gcmN1X2JhcnJpZXIgewogCVJDVV9CQVJSSUVSX1NURCwKQEAgLTU1LDYgKzU2LDcgQEAKIHN0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKIHN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiByY3VfYmFycmllcl9jb21wbGV0aW9uOworaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCiAgKiBBd2FrZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3luY2hyb25pemVfcmN1KCkgaW5zdGFuY2Ugbm93IHRoYXQgYQpAQCAtODAsNiArODIsMTAgQEAKIHZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpCiB7CiAJc3RydWN0IHJjdV9zeW5jaHJvbml6ZSByY3U7CisKKwlpZiAocmN1X2Jsb2NraW5nX2lzX2dwKCkpCisJCXJldHVybjsKKwogCWluaXRfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOwogCS8qIFdpbGwgd2FrZSBtZSBhZnRlciBSQ1UgZmluaXNoZWQuICovCiAJY2FsbF9yY3UoJnJjdS5oZWFkLCB3YWtlbWVfYWZ0ZXJfcmN1KTsKQEAgLTE3NSwzICsxODEsOSBAQAogCV9fcmN1X2luaXQoKTsKIH0KIAordm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCit7CisJV0FSTl9PTihudW1fb25saW5lX2NwdXMoKSAhPSAxKTsKKwlXQVJOX09OKG5yX2NvbnRleHRfc3dpdGNoZXMoKSA+IDApOworCXJjdV9zY2hlZHVsZXJfYWN0aXZlID0gMTsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwcmVlbXB0LmMgYi9rZXJuZWwvcmN1cHJlZW1wdC5jCmluZGV4IDMzY2ZjNTAuLjVkNTllODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwcmVlbXB0LmMKKysrIGIva2VybmVsL3JjdXByZWVtcHQuYwpAQCAtMTE4MSw2ICsxMTgxLDkgQEAKIHsKIAlzdHJ1Y3QgcmN1X3N5bmNocm9uaXplIHJjdTsKIAorCWlmIChudW1fb25saW5lX2NwdXMoKSA9PSAxKQorCQlyZXR1cm47ICAvKiBibG9ja2luZyBpcyBncCBpZiBvbmx5IG9uZSBDUFUhICovCisKIAlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKIAkvKiBXaWxsIHdha2UgbWUgYWZ0ZXIgUkNVIGZpbmlzaGVkLiAqLwogCWNhbGxfcmN1X3NjaGVkKCZyY3UuaGVhZCwgd2FrZW1lX2FmdGVyX3JjdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCBiMmZkNjAyLi45N2NlMzE1IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTk0OCw4ICs5NDgsOCBAQAogdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQogewogCWlmICh1c2VyIHx8Ci0JICAgIChpZGxlX2NwdShjcHUpICYmICFpbl9zb2Z0aXJxKCkgJiYKLQkJCQloYXJkaXJxX2NvdW50KCkgPD0gKDEgPDwgSEFSRElSUV9TSElGVCkpKSB7CisJICAgIChpZGxlX2NwdShjcHUpICYmIHJjdV9zY2hlZHVsZXJfYWN0aXZlICYmCisJICAgICAhaW5fc29mdGlycSgpICYmIGhhcmRpcnFfY291bnQoKSA8PSAoMSA8PCBIQVJESVJRX1NISUZUKSkpIHsKIAogCQkvKgogCQkgKiBHZXQgaGVyZSBpZiB0aGlzIENQVSB0b29rIGl0cyBpbnRlcnJ1cHQgZnJvbSB1c2VyCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IDlkNzliNzguLjhmMjE3OWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC03NTAsNyArNzUwLDcgQEAKIAkJCSAqIGZyb20gdGhlIHNjaGVkdWxlciAodHJ5aW5nIHRvIHJlLWdyYWIKIAkJCSAqIHJxLT5sb2NrKSwgc28gZGVmZXIgaXQuCiAJCQkgKi8KLQkJCV9fbW9kX3RpbWVyKCZidWYtPnRpbWVyLCBqaWZmaWVzICsgMSk7CisJCQltb2RfdGltZXIoJmJ1Zi0+dGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKIAlvbGQgPSBidWYtPmRhdGE7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGMxZDBlZDMuLjlmODUwNmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIHsKIAlrdGltZV90IG5vdzsKIAotCWlmIChydF9iYW5kd2lkdGhfZW5hYmxlZCgpICYmIHJ0X2ItPnJ0X3J1bnRpbWUgPT0gUlVOVElNRV9JTkYpCisJaWYgKCFydF9iYW5kd2lkdGhfZW5hYmxlZCgpIHx8IHJ0X2ItPnJ0X3J1bnRpbWUgPT0gUlVOVElNRV9JTkYpCiAJCXJldHVybjsKIAogCWlmIChocnRpbWVyX2FjdGl2ZSgmcnRfYi0+cnRfcGVyaW9kX3RpbWVyKSkKQEAgLTMzMSw2ICszMzEsMTMgQEAKICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh0YXNrX2dyb3VwX2xvY2spOwogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCByb290X3Rhc2tfZ3JvdXBfZW1wdHkodm9pZCkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKICNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJKDIqTklDRV8wX0xPQUQpCkBAIC0zOTEsNiArMzk4LDEzIEBACiAKICNlbHNlCiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9lbXB0eSh2b2lkKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpIHsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19ncm91cCAqdGFza19ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC00NjcsMTEgKzQ4MSwxNyBAQAogCXN0cnVjdCBydF9wcmlvX2FycmF5IGFjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIHJ0X25yX3J1bm5pbmc7CiAjaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaW50IGhpZ2hlc3RfcHJpbzsgLyogaGlnaGVzdCBxdWV1ZWQgcnQgdGFzayBwcmlvICovCisJc3RydWN0IHsKKwkJaW50IGN1cnI7IC8qIGhpZ2hlc3QgcXVldWVkIHJ0IHRhc2sgcHJpbyAqLworI2lmZGVmIENPTkZJR19TTVAKKwkJaW50IG5leHQ7IC8qIG5leHQgaGlnaGVzdCAqLworI2VuZGlmCisJfSBoaWdoZXN0X3ByaW87CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJdW5zaWduZWQgbG9uZyBydF9ucl9taWdyYXRvcnk7CiAJaW50IG92ZXJsb2FkZWQ7CisJc3RydWN0IHBsaXN0X2hlYWQgcHVzaGFibGVfdGFza3M7CiAjZW5kaWYKIAlpbnQgcnRfdGhyb3R0bGVkOwogCXU2NCBydF90aW1lOwpAQCAtNTQ5LDcgKzU2OSw2IEBACiAJdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nOwogCSNkZWZpbmUgQ1BVX0xPQURfSURYX01BWCA1CiAJdW5zaWduZWQgbG9uZyBjcHVfbG9hZFtDUFVfTE9BRF9JRFhfTUFYXTsKLQl1bnNpZ25lZCBjaGFyIGlkbGVfYXRfdGljazsKICNpZmRlZiBDT05GSUdfTk9fSFoKIAl1bnNpZ25lZCBsb25nIGxhc3RfdGlja19zZWVuOwogCXVuc2lnbmVkIGNoYXIgaW5fbm9oel9yZWNlbnRseTsKQEAgLTU5MCw2ICs2MDksNyBAQAogCXN0cnVjdCByb290X2RvbWFpbiAqcmQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAKKwl1bnNpZ25lZCBjaGFyIGlkbGVfYXRfdGljazsKIAkvKiBGb3IgYWN0aXZlIGJhbGFuY2luZyAqLwogCWludCBhY3RpdmVfYmFsYW5jZTsKIAlpbnQgcHVzaF9jcHU7CkBAIC02MTgsOSArNjM4LDYgQEAKIAkvKiBjb3VsZCBhYm92ZSBiZSBycS0+Y2ZzX3JxLmV4ZWNfY2xvY2sgKyBycS0+cnRfcnEucnRfcnVudGltZSA/ICovCiAKIAkvKiBzeXNfc2NoZWRfeWllbGQoKSBzdGF0cyAqLwotCXVuc2lnbmVkIGludCB5bGRfZXhwX2VtcHR5OwotCXVuc2lnbmVkIGludCB5bGRfYWN0X2VtcHR5OwotCXVuc2lnbmVkIGludCB5bGRfYm90aF9lbXB0eTsKIAl1bnNpZ25lZCBpbnQgeWxkX2NvdW50OwogCiAJLyogc2NoZWR1bGUoKSBzdGF0cyAqLwpAQCAtMTE4MywxMCArMTIwMCwxMCBAQAogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0YXNrX3JxKHApLT5sb2NrKTsKIAotCWlmICh1bmxpa2VseSh0ZXN0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTkVFRF9SRVNDSEVEKSkpCisJaWYgKHRlc3RfdHNrX25lZWRfcmVzY2hlZChwKSkKIAkJcmV0dXJuOwogCi0Jc2V0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTkVFRF9SRVNDSEVEKTsKKwlzZXRfdHNrX25lZWRfcmVzY2hlZChwKTsKIAogCWNwdSA9IHRhc2tfY3B1KHApOwogCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQpAQCAtMTI0Miw3ICsxMjU5LDcgQEAKIAkgKiBsb2NrbGVzcy4gVGhlIHdvcnN0IGNhc2UgaXMgdGhhdCB0aGUgb3RoZXIgQ1BVIHJ1bnMgdGhlCiAJICogaWRsZSB0YXNrIHRocm91Z2ggYW4gYWRkaXRpb25hbCBOT09QIHNjaGVkdWxlKCkKIAkgKi8KLQlzZXRfdHNrX3RocmVhZF9mbGFnKHJxLT5pZGxlLCBUSUZfTkVFRF9SRVNDSEVEKTsKKwlzZXRfdHNrX25lZWRfcmVzY2hlZChycS0+aWRsZSk7CiAKIAkvKiBORUVEX1JFU0NIRUQgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0IHBvbGxpbmcgKi8KIAlzbXBfbWIoKTsKQEAgLTE2MTAsMjEgKzE2MjcsNDIgQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCiAvKgotICogZG91YmxlX2xvY2tfYmFsYW5jZSAtIGxvY2sgdGhlIGJ1c2llc3QgcnVucXVldWUsIHRoaXNfcnEgaXMgbG9ja2VkIGFscmVhZHkuCisgKiBmYWlyIGRvdWJsZV9sb2NrX2JhbGFuY2U6IFNhZmVseSBhY3F1aXJlcyBib3RoIHJxLT5sb2NrcyBpbiBhIGZhaXIKKyAqIHdheSBhdCB0aGUgZXhwZW5zZSBvZiBmb3JjaW5nIGV4dHJhIGF0b21pYyBvcGVyYXRpb25zIGluIGFsbAorICogaW52b2NhdGlvbnMuICBUaGlzIGFzc3VyZXMgdGhhdCB0aGUgZG91YmxlX2xvY2sgaXMgYWNxdWlyZWQgdXNpbmcgdGhlCisgKiBzYW1lIHVuZGVybHlpbmcgcG9saWN5IGFzIHRoZSBzcGlubG9ja190IG9uIHRoaXMgYXJjaGl0ZWN0dXJlLCB3aGljaAorICogcmVkdWNlcyBsYXRlbmN5IGNvbXBhcmVkIHRvIHRoZSB1bmZhaXIgdmFyaWFudCBiZWxvdy4gIEhvd2V2ZXIsIGl0CisgKiBhbHNvIGFkZHMgbW9yZSBvdmVyaGVhZCBhbmQgdGhlcmVmb3JlIG1heSByZWR1Y2UgdGhyb3VnaHB1dC4KICAqLwotc3RhdGljIGludCBkb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQorc3RhdGljIGlubGluZSBpbnQgX2RvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCisJX19yZWxlYXNlcyh0aGlzX3JxLT5sb2NrKQorCV9fYWNxdWlyZXMoYnVzaWVzdC0+bG9jaykKKwlfX2FjcXVpcmVzKHRoaXNfcnEtPmxvY2spCit7CisJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOworCWRvdWJsZV9ycV9sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOworCisJcmV0dXJuIDE7Cit9CisKKyNlbHNlCisvKgorICogVW5mYWlyIGRvdWJsZV9sb2NrX2JhbGFuY2U6IE9wdGltaXplcyB0aHJvdWdocHV0IGF0IHRoZSBleHBlbnNlIG9mCisgKiBsYXRlbmN5IGJ5IGVsaW1pbmF0aW5nIGV4dHJhIGF0b21pYyBvcGVyYXRpb25zIHdoZW4gdGhlIGxvY2tzIGFyZQorICogYWxyZWFkeSBpbiBwcm9wZXIgb3JkZXIgb24gZW50cnkuICBUaGlzIGZhdm9ycyBsb3dlciBjcHUtaWRzIGFuZCB3aWxsCisgKiBncmFudCB0aGUgZG91YmxlIGxvY2sgdG8gbG93ZXIgY3B1cyBvdmVyIGhpZ2hlciBpZHMgdW5kZXIgY29udGVudGlvbiwKKyAqIHJlZ2FyZGxlc3Mgb2YgZW50cnkgb3JkZXIgaW50byB0aGUgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgX2RvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCiAJX19yZWxlYXNlcyh0aGlzX3JxLT5sb2NrKQogCV9fYWNxdWlyZXMoYnVzaWVzdC0+bG9jaykKIAlfX2FjcXVpcmVzKHRoaXNfcnEtPmxvY2spCiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodW5saWtlbHkoIWlycXNfZGlzYWJsZWQoKSkpIHsKLQkJLyogcHJpbnRrKCkgZG9lc24ndCB3b3JrIGdvb2QgdW5kZXIgcnEtPmxvY2sgKi8KLQkJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwotCQlCVUdfT04oMSk7Ci0JfQogCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrKCZidXNpZXN0LT5sb2NrKSkpIHsKIAkJaWYgKGJ1c2llc3QgPCB0aGlzX3JxKSB7CiAJCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CkBAIC0xNjM3LDYgKzE2NzUsMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZW5kaWYgLyogQ09ORklHX1BSRUVNUFQgKi8KKworLyoKKyAqIGRvdWJsZV9sb2NrX2JhbGFuY2UgLSBsb2NrIHRoZSBidXNpZXN0IHJ1bnF1ZXVlLCB0aGlzX3JxIGlzIGxvY2tlZCBhbHJlYWR5LgorICovCitzdGF0aWMgaW50IGRvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCit7CisJaWYgKHVubGlrZWx5KCFpcnFzX2Rpc2FibGVkKCkpKSB7CisJCS8qIHByaW50aygpIGRvZXNuJ3Qgd29yayBnb29kIHVuZGVyIHJxLT5sb2NrICovCisJCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwkJQlVHX09OKDEpOworCX0KKworCXJldHVybiBfZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91bmxvY2tfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBycSAqYnVzaWVzdCkKIAlfX3JlbGVhc2VzKGJ1c2llc3QtPmxvY2spCiB7CkBAIC0xNzA1LDYgKzE3NTksOSBAQAogCiBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQogeworCWlmICh3YWtldXApCisJCXAtPnNlLnN0YXJ0X3J1bnRpbWUgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOworCiAJc2NoZWRfaW5mb19xdWV1ZWQocCk7CiAJcC0+c2NoZWRfY2xhc3MtPmVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwKTsKIAlwLT5zZS5vbl9ycSA9IDE7CkBAIC0xNzEyLDEwICsxNzY5LDE1IEBACiAKIHN0YXRpYyB2b2lkIGRlcXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKIHsKLQlpZiAoc2xlZXAgJiYgcC0+c2UubGFzdF93YWtldXApIHsKLQkJdXBkYXRlX2F2ZygmcC0+c2UuYXZnX292ZXJsYXAsCi0JCQkgICBwLT5zZS5zdW1fZXhlY19ydW50aW1lIC0gcC0+c2UubGFzdF93YWtldXApOwotCQlwLT5zZS5sYXN0X3dha2V1cCA9IDA7CisJaWYgKHNsZWVwKSB7CisJCWlmIChwLT5zZS5sYXN0X3dha2V1cCkgeworCQkJdXBkYXRlX2F2ZygmcC0+c2UuYXZnX292ZXJsYXAsCisJCQkJcC0+c2Uuc3VtX2V4ZWNfcnVudGltZSAtIHAtPnNlLmxhc3Rfd2FrZXVwKTsKKwkJCXAtPnNlLmxhc3Rfd2FrZXVwID0gMDsKKwkJfSBlbHNlIHsKKwkJCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z193YWtldXAsCisJCQkJc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7CisJCX0KIAl9CiAKIAlzY2hlZF9pbmZvX2RlcXVldWVkKHApOwpAQCAtMjAxNyw3ICsyMDc5LDcgQEAKIAkJICogaXQgbXVzdCBiZSBvZmYgdGhlIHJ1bnF1ZXVlIF9lbnRpcmVseV8sIGFuZCBub3QKIAkJICogcHJlZW1wdGVkIQogCQkgKgotCQkgKiBTbyBpZiBpdCB3YSBzdGlsbCBydW5uYWJsZSAoYnV0IGp1c3Qgbm90IGFjdGl2ZWx5CisJCSAqIFNvIGlmIGl0IHdhcyBzdGlsbCBydW5uYWJsZSAoYnV0IGp1c3Qgbm90IGFjdGl2ZWx5CiAJCSAqIHJ1bm5pbmcgcmlnaHQgbm93KSwgaXQncyBwcmVlbXB0ZWQsIGFuZCB3ZSBzaG91bGQKIAkJICogeWllbGQgLSBpdCBjb3VsZCBiZSBhIHdoaWxlLgogCQkgKi8KQEAgLTIyNjcsNyArMjMyOSw3IEBACiAJCXN5bmMgPSAwOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChzY2hlZF9mZWF0KExCX1dBS0VVUF9VUERBVEUpKSB7CisJaWYgKHNjaGVkX2ZlYXQoTEJfV0FLRVVQX1VQREFURSkgJiYgIXJvb3RfdGFza19ncm91cF9lbXB0eSgpKSB7CiAJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCiAJCXRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTIzNDUsNiArMjQwNywyMiBAQAogCWFjdGl2YXRlX3Rhc2socnEsIHAsIDEpOwogCXN1Y2Nlc3MgPSAxOwogCisJLyoKKwkgKiBPbmx5IGF0dHJpYnV0ZSBhY3R1YWwgd2FrZXVwcyBkb25lIGJ5IHRoaXMgdGFzay4KKwkgKi8KKwlpZiAoIWluX2ludGVycnVwdCgpKSB7CisJCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJmN1cnJlbnQtPnNlOworCQl1NjQgc2FtcGxlID0gc2UtPnN1bV9leGVjX3J1bnRpbWU7CisKKwkJaWYgKHNlLT5sYXN0X3dha2V1cCkKKwkJCXNhbXBsZSAtPSBzZS0+bGFzdF93YWtldXA7CisJCWVsc2UKKwkJCXNhbXBsZSAtPSBzZS0+c3RhcnRfcnVudGltZTsKKwkJdXBkYXRlX2F2Zygmc2UtPmF2Z193YWtldXAsIHNhbXBsZSk7CisKKwkJc2UtPmxhc3Rfd2FrZXVwID0gc2UtPnN1bV9leGVjX3J1bnRpbWU7CisJfQorCiBvdXRfcnVubmluZzoKIAl0cmFjZV9zY2hlZF93YWtldXAocnEsIHAsIHN1Y2Nlc3MpOwogCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgc3luYyk7CkBAIC0yMzU1LDggKzI0MzMsNiBAQAogCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKHJxLCBwKTsKICNlbmRpZgogb3V0OgotCWN1cnJlbnQtPnNlLmxhc3Rfd2FrZXVwID0gY3VycmVudC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKLQogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogCiAJcmV0dXJuIHN1Y2Nlc3M7CkBAIC0yMzg2LDYgKzI0NjIsOCBAQAogCXAtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZQk9IDA7CiAJcC0+c2UubGFzdF93YWtldXAJCT0gMDsKIAlwLT5zZS5hdmdfb3ZlcmxhcAkJPSAwOworCXAtPnNlLnN0YXJ0X3J1bnRpbWUJCT0gMDsKKwlwLT5zZS5hdmdfd2FrZXVwCQk9IHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHk7CiAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXAtPnNlLndhaXRfc3RhcnQJCT0gMDsKQEAgLTI0NDgsNiArMjUyNiw4IEBACiAJLyogV2FudCB0byBzdGFydCB3aXRoIGtlcm5lbCBwcmVlbXB0aW9uIGRpc2FibGVkLiAqLwogCXRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgPSAxOwogI2VuZGlmCisJcGxpc3Rfbm9kZV9pbml0KCZwLT5wdXNoYWJsZV90YXNrcywgTUFYX1BSSU8pOworCiAJcHV0X2NwdSgpOwogfQogCkBAIC0yNDkxLDcgKzI1NzEsNyBAQAogI2lmZGVmIENPTkZJR19QUkVFTVBUX05PVElGSUVSUwogCiAvKioKLSAqIHByZWVtcHRfbm90aWZpZXJfcmVnaXN0ZXIgLSB0ZWxsIG1lIHdoZW4gY3VycmVudCBpcyBiZWluZyBiZWluZyBwcmVlbXB0ZWQgJiByZXNjaGVkdWxlZAorICogcHJlZW1wdF9ub3RpZmllcl9yZWdpc3RlciAtIHRlbGwgbWUgd2hlbiBjdXJyZW50IGlzIGJlaW5nIHByZWVtcHRlZCAmIHJlc2NoZWR1bGVkCiAgKiBAbm90aWZpZXI6IG5vdGlmaWVyIHN0cnVjdCB0byByZWdpc3RlcgogICovCiB2b2lkIHByZWVtcHRfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IHByZWVtcHRfbm90aWZpZXIgKm5vdGlmaWVyKQpAQCAtMjU4OCw2ICsyNjY4LDEyIEBACiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBycS0+cHJldl9tbTsKIAlsb25nIHByZXZfc3RhdGU7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBwb3N0X3NjaGVkdWxlID0gMDsKKworCWlmIChjdXJyZW50LT5zY2hlZF9jbGFzcy0+bmVlZHNfcG9zdF9zY2hlZHVsZSkKKwkJcG9zdF9zY2hlZHVsZSA9IGN1cnJlbnQtPnNjaGVkX2NsYXNzLT5uZWVkc19wb3N0X3NjaGVkdWxlKHJxKTsKKyNlbmRpZgogCiAJcnEtPnByZXZfbW0gPSBOVUxMOwogCkBAIC0yNjA2LDcgKzI2OTIsNyBAQAogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKIAlmaW5pc2hfbG9ja19zd2l0Y2gocnEsIHByZXYpOwogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoY3VycmVudC0+c2NoZWRfY2xhc3MtPnBvc3Rfc2NoZWR1bGUpCisJaWYgKHBvc3Rfc2NoZWR1bGUpCiAJCWN1cnJlbnQtPnNjaGVkX2NsYXNzLT5wb3N0X3NjaGVkdWxlKHJxKTsKICNlbmRpZgogCkBAIC0yOTEzLDYgKzI5OTksNyBAQAogCQkgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKIAkJICAgICBpbnQgKmFsbF9waW5uZWQpCiB7CisJaW50IHRza19jYWNoZV9ob3QgPSAwOwogCS8qCiAJICogV2UgZG8gbm90IG1pZ3JhdGUgdGFza3MgdGhhdCBhcmU6CiAJICogMSkgcnVubmluZyAob2J2aW91c2x5KSwgb3IKQEAgLTI5MzYsMTAgKzMwMjMsMTEgQEAKIAkgKiAyKSB0b28gbWFueSBiYWxhbmNlIGF0dGVtcHRzIGhhdmUgZmFpbGVkLgogCSAqLwogCi0JaWYgKCF0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKSB8fAotCQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMpIHsKKwl0c2tfY2FjaGVfaG90ID0gdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCk7CisJaWYgKCF0c2tfY2FjaGVfaG90IHx8CisJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7CiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQkJaWYgKHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpKSB7CisJCWlmICh0c2tfY2FjaGVfaG90KSB7CiAJCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ob3RfZ2FpbmVkW2lkbGVdKTsKIAkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZm9yY2VkX21pZ3JhdGlvbnMpOwogCQl9CkBAIC0yOTQ3LDcgKzMwMzUsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAodGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCkpIHsKKwlpZiAodHNrX2NhY2hlX2hvdCkgewogCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2hvdCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTI5ODcsNiArMzA3NSwxNiBAQAogCXB1bGxlZCsrOwogCXJlbV9sb2FkX21vdmUgLT0gcC0+c2UubG9hZC53ZWlnaHQ7CiAKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCS8qCisJICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUga2VybmVscworCSAqIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUgdGhlIGNyaXRpY2FsCisJICogc2VjdGlvbi4KKwkgKi8KKwlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSkKKwkJZ290byBvdXQ7CisjZW5kaWYKKwogCS8qCiAJICogV2Ugb25seSB3YW50IHRvIHN0ZWFsIHVwIHRvIHRoZSBwcmVzY3JpYmVkIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkLgogCSAqLwpAQCAtMzAzMyw5ICszMTMxLDE1IEBACiAJCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQsICZ0aGlzX2Jlc3RfcHJpbyk7CiAJCWNsYXNzID0gY2xhc3MtPm5leHQ7CiAKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCQkvKgorCQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZQorCQkgKiBrZXJuZWxzIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUKKwkJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uCisJCSAqLwogCQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSAmJiB0aGlzX3JxLT5ucl9ydW5uaW5nKQogCQkJYnJlYWs7Ci0KKyNlbmRpZgogCX0gd2hpbGUgKGNsYXNzICYmIG1heF9sb2FkX21vdmUgPiB0b3RhbF9sb2FkX21vdmVkKTsKIAogCXJldHVybiB0b3RhbF9sb2FkX21vdmVkID4gMDsKQEAgLTMwODUsMjE1ICszMTg5LDU2NSBAQAogCiAJcmV0dXJuIDA7CiB9CisvKioqKioqKioqKiBIZWxwZXJzIGZvciBmaW5kX2J1c2llc3RfZ3JvdXAgKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgorICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKi8KK3N0cnVjdCBzZF9sYl9zdGF0cyB7CisJc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0OyAvKiBCdXNpZXN0IGdyb3VwIGluIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnRoaXM7ICAvKiBMb2NhbCBncm91cCBpbiB0aGlzIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkOyAgLyogVG90YWwgbG9hZCBvZiBhbGwgZ3JvdXBzIGluIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9wd3I7ICAgLyoJVG90YWwgcG93ZXIgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7CSAgIC8qIEF2ZXJhZ2UgbG9hZCBhY3Jvc3MgYWxsIGdyb3VwcyBpbiBzZCAqLwogCi0vKgotICogZmluZF9idXNpZXN0X2dyb3VwIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBidXNpZXN0IENQVSBncm91cCB3aXRoaW4gdGhlCi0gKiBkb21haW4uIEl0IGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoCi0gKiBzaG91bGQgYmUgbW92ZWQgdG8gcmVzdG9yZSBiYWxhbmNlIHZpYSB0aGUgaW1iYWxhbmNlIHBhcmFtZXRlci4KKwkvKiogU3RhdGlzdGljcyBvZiB0aGlzIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQ7CisJdW5zaWduZWQgbG9uZyB0aGlzX2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyB0aGlzX25yX3J1bm5pbmc7CisKKwkvKiBTdGF0aXN0aWNzIG9mIHRoZSBidXNpZXN0IGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBtYXhfbG9hZDsKKwl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKKwl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbnJfcnVubmluZzsKKworCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGltYmFsYW5jZSBpbiB0aGlzIHNkICovCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKwlpbnQgcG93ZXJfc2F2aW5nc19iYWxhbmNlOyAvKiBJcyBwb3dlcnNhdmUgYmFsYW5jZSBuZWVkZWQgZm9yIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX21pbjsgLyogTGVhc3QgbG9hZGVkIGdyb3VwIGluIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9sZWFkZXI7IC8qIEdyb3VwIHdoaWNoIHJlbGlldmVzIGdyb3VwX21pbiAqLworCXVuc2lnbmVkIGxvbmcgbWluX2xvYWRfcGVyX3Rhc2s7IC8qIGxvYWRfcGVyX3Rhc2sgaW4gZ3JvdXBfbWluICovCisJdW5zaWduZWQgbG9uZyBsZWFkZXJfbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9sZWFkZXIgKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX21pbiAqLworI2VuZGlmCit9OworCisvKioKKyAqIHNnX2xiX3N0YXRzIC0gc3RhdHMgb2YgYSBzY2hlZF9ncm91cCByZXF1aXJlZCBmb3IgbG9hZF9iYWxhbmNpbmcKKyAqLworc3RydWN0IHNnX2xiX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOyAvKkF2ZyBsb2FkIGFjcm9zcyB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIGdyb3VwX2xvYWQ7IC8qIFRvdGFsIGxvYWQgb3ZlciB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHN1bV9ucl9ydW5uaW5nOyAvKiBOciB0YXNrcyBydW5uaW5nIGluIHRoZSBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgc3VtX3dlaWdodGVkX2xvYWQ7IC8qIFdlaWdodGVkIGxvYWQgb2YgZ3JvdXAncyB0YXNrcyAqLworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfY2FwYWNpdHk7CisJaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgYW4gaW1iYWxhbmNlIGluIHRoZSBncm91cCA/ICovCit9OworCisvKioKKyAqIGdyb3VwX2ZpcnN0X2NwdSAtIFJldHVybnMgdGhlIGZpcnN0IGNwdSBpbiB0aGUgY3B1bWFzayBvZiBhIHNjaGVkX2dyb3VwLgorICogQGdyb3VwOiBUaGUgZ3JvdXAgd2hvc2UgZmlyc3QgY3B1IGlzIHRvIGJlIHJldHVybmVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBncm91cF9maXJzdF9jcHUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCkKK3sKKwlyZXR1cm4gY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Cit9CisKKy8qKgorICogZ2V0X3NkX2xvYWRfaWR4IC0gT2J0YWluIHRoZSBsb2FkIGluZGV4IGZvciBhIGdpdmVuIHNjaGVkIGRvbWFpbi4KKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBsb2FkX2lkeCBpcyB0byBiZSBvYnRhaW5lZC4KKyAqIEBpZGxlOiBUaGUgSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBmb3Igd2hvc2Ugc2QgbG9hZF9pY3ggaXMgb2J0YWluZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9zZF9sb2FkX2lkeChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkJCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJaW50IGxvYWRfaWR4OworCisJc3dpdGNoIChpZGxlKSB7CisJY2FzZSBDUFVfTk9UX0lETEU6CisJCWxvYWRfaWR4ID0gc2QtPmJ1c3lfaWR4OworCQlicmVhazsKKworCWNhc2UgQ1BVX05FV0xZX0lETEU6CisJCWxvYWRfaWR4ID0gc2QtPm5ld2lkbGVfaWR4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsb2FkX2lkeCA9IHNkLT5pZGxlX2lkeDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxvYWRfaWR4OworfQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorLyoqCisgKiBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBJbml0aWFsaXplIHBvd2VyIHNhdmluZ3Mgc3RhdGlzdGljcyBmb3IKKyAqIHRoZSBnaXZlbiBzY2hlZF9kb21haW4sIGR1cmluZyBsb2FkIGJhbGFuY2luZy4KKyAqCisgKiBAc2Q6IFNjaGVkIGRvbWFpbiB3aG9zZSBwb3dlci1zYXZpbmdzIHN0YXRpc3RpY3MgYXJlIHRvIGJlIGluaXRpYWxpemVkLgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBmb3Igc2QuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBhdCB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwkvKgorCSAqIEJ1c3kgcHJvY2Vzc29ycyB3aWxsIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwb3dlciBzYXZpbmdzCisJICogYmFsYW5jZS4KKwkgKi8KKwlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUgfHwgIShzZC0+ZmxhZ3MgJiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKKwllbHNlIHsKKwkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAxOworCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gVUxPTkdfTUFYOworCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gMDsKKwl9Cit9CisKKy8qKgorICogdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBVcGRhdGUgdGhlIHBvd2VyIHNhdmluZyBzdGF0cyBmb3IgYQorICogc2NoZWRfZG9tYWluIHdoaWxlIHBlcmZvcm1pbmcgbG9hZCBiYWxhbmNpbmcuCisgKgorICogQGdyb3VwOiBzY2hlZF9ncm91cCBiZWxvbmdpbmcgdG8gdGhlIHNjaGVkX2RvbWFpbiB1bmRlciBjb25zaWRlcmF0aW9uLgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCisgKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGUgQ1BVIGZvciB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nCisgKiAJCWxvYWQgYmFsYW5jaW5nID8KKyAqIEBzZ3M6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIGdyb3VwLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIGxvY2FsIGdyb3VwIGlzIGlkbGUgb3IgY29tcGxldGVseSBsb2FkZWQKKwkgKiBubyBuZWVkIHRvIGRvIHBvd2VyIHNhdmluZ3MgYmFsYW5jZSBhdCB0aGlzIGRvbWFpbgorCSAqLworCWlmIChsb2NhbF9ncm91cCAmJiAoc2RzLT50aGlzX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAorCQkJCSFzZHMtPnRoaXNfbnJfcnVubmluZykpCisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKKworCS8qCisJICogSWYgYSBncm91cCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgZnVsbCBjYXBhY2l0eSBvciBpZGxlLAorCSAqIGRvbid0IGluY2x1ZGUgdGhhdCBncm91cCBpbiBwb3dlciBzYXZpbmdzIGNhbGN1bGF0aW9ucworCSAqLworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgfHwKKwkJc2dzLT5zdW1fbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8CisJCSFzZ3MtPnN1bV9ucl9ydW5uaW5nKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaGFzIHRoZSBsZWFzdCBub24taWRsZSBsb2FkLgorCSAqIFRoaXMgaXMgdGhlIGdyb3VwIGZyb20gd2hlcmUgd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBsb2FkCisJICogZm9yIHNhdmluZyBwb3dlcgorCSAqLworCWlmICgoc2dzLT5zdW1fbnJfcnVubmluZyA8IHNkcy0+bWluX25yX3J1bm5pbmcpIHx8CisJICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bWluX25yX3J1bm5pbmcgJiYKKwkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPiBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9taW4pKSkgeworCQlzZHMtPmdyb3VwX21pbiA9IGdyb3VwOworCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKKwkJc2RzLT5taW5fbG9hZF9wZXJfdGFzayA9IHNncy0+c3VtX3dlaWdodGVkX2xvYWQgLworCQkJCQkJc2dzLT5zdW1fbnJfcnVubmluZzsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaXMgYWxtb3N0IG5lYXIgaXRzCisJICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCisJICogZnJvbSBvdGhlciBncm91cCBhbmQgc2F2ZSBtb3JlIHBvd2VyCisJICovCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZ3MtPmdyb3VwX2NhcGFjaXR5IC0gMSkKKwkJcmV0dXJuOworCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nIHx8CisJICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgJiYKKwkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPCBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9sZWFkZXIpKSkgeworCQlzZHMtPmdyb3VwX2xlYWRlciA9IGdyb3VwOworCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKKwl9Cit9CisKKy8qKgorICogY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwIC0gQ2hlY2sgaWYgd2UgaGF2ZSBwb3RlbnRpYWwgdG8gcGVyZm9ybQorICoJc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuIElmIHllcywgc2V0IHRoZSBidXNpZXN0IGdyb3VwIHRvIGJlCisgKgl0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIGluIHRoZSBzY2hlZF9kb21haW4sIHNvIHRoYXQgaXQncyBDUFVzIGNhbgorICoJYmUgcHV0IHRvIGlkbGUuCisgKgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCisgKgl1bmRlciBjb25zaWRlcmF0aW9uLgorICogQHRoaXNfY3B1OiBDcHUgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgdG8gcGVyZm9ybSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCisgKiBFbHNlIHJldHVybnMgMC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm4gMDsKKworCWlmIChzZHMtPnRoaXMgIT0gc2RzLT5ncm91cF9sZWFkZXIgfHwKKwkJCXNkcy0+Z3JvdXBfbGVhZGVyID09IHNkcy0+Z3JvdXBfbWluKQorCQlyZXR1cm4gMDsKKworCSppbWJhbGFuY2UgPSBzZHMtPm1pbl9sb2FkX3Blcl90YXNrOworCXNkcy0+YnVzaWVzdCA9IHNkcy0+Z3JvdXBfbWluOworCisJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPj0gUE9XRVJTQVZJTkdTX0JBTEFOQ0VfV0FLRVVQKSB7CisJCWNwdV9ycSh0aGlzX2NwdSktPnJkLT5zY2hlZF9tY19wcmVmZXJyZWRfd2FrZXVwX2NwdSA9CisJCQlncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9sZWFkZXIpOworCX0KKworCXJldHVybiAxOworCit9CisjZWxzZSAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KKworCisvKioKKyAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CisgKiBAbG9hZF9pZHg6IExvYWQgaW5kZXggb2Ygc2NoZWRfZG9tYWluIG9mIHRoaXNfY3B1IGZvciBsb2FkIGNhbGMuCisgKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgorICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhpc19jcHUuCisgKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCisgKiBAc2dzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGdyb3VwLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGludCB0aGlzX2NwdSwKKwkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgbG9hZF9pZHgsIGludCAqc2RfaWRsZSwKKwkJCWludCBsb2NhbF9ncm91cCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsCisJCQlpbnQgKmJhbGFuY2UsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCXVuc2lnbmVkIGxvbmcgbG9hZCwgbWF4X2NwdV9sb2FkLCBtaW5fY3B1X2xvYWQ7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGJhbGFuY2VfY3B1ID0gLTEsIGZpcnN0X2lkbGVfY3B1ID0gMDsKKwl1bnNpZ25lZCBsb25nIHN1bV9hdmdfbG9hZF9wZXJfdGFzazsKKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkX3Blcl90YXNrOworCisJaWYgKGxvY2FsX2dyb3VwKQorCQliYWxhbmNlX2NwdSA9IGdyb3VwX2ZpcnN0X2NwdShncm91cCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KKwlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgPSBhdmdfbG9hZF9wZXJfdGFzayA9IDA7CisJbWF4X2NwdV9sb2FkID0gMDsKKwltaW5fY3B1X2xvYWQgPSB+MFVMOworCisJZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSwgY3B1cykgeworCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGkpOworCisJCWlmICgqc2RfaWRsZSAmJiBycS0+bnJfcnVubmluZykKKwkJCSpzZF9pZGxlID0gMDsKKworCQkvKiBCaWFzIGJhbGFuY2luZyB0b3dhcmQgY3B1cyBvZiBvdXIgZG9tYWluICovCisJCWlmIChsb2NhbF9ncm91cCkgeworCQkJaWYgKGlkbGVfY3B1KGkpICYmICFmaXJzdF9pZGxlX2NwdSkgeworCQkJCWZpcnN0X2lkbGVfY3B1ID0gMTsKKwkJCQliYWxhbmNlX2NwdSA9IGk7CisJCQl9CisKKwkJCWxvYWQgPSB0YXJnZXRfbG9hZChpLCBsb2FkX2lkeCk7CisJCX0gZWxzZSB7CisJCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOworCQkJaWYgKGxvYWQgPiBtYXhfY3B1X2xvYWQpCisJCQkJbWF4X2NwdV9sb2FkID0gbG9hZDsKKwkJCWlmIChtaW5fY3B1X2xvYWQgPiBsb2FkKQorCQkJCW1pbl9jcHVfbG9hZCA9IGxvYWQ7CisJCX0KKworCQlzZ3MtPmdyb3VwX2xvYWQgKz0gbG9hZDsKKwkJc2dzLT5zdW1fbnJfcnVubmluZyArPSBycS0+bnJfcnVubmluZzsKKwkJc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCArPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOworCisJCXN1bV9hdmdfbG9hZF9wZXJfdGFzayArPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2soaSk7CisJfQorCisJLyoKKwkgKiBGaXJzdCBpZGxlIGNwdSBvciB0aGUgZmlyc3QgY3B1KGJ1c2llc3QpIGluIHRoaXMgc2NoZWQgZ3JvdXAKKwkgKiBpcyBlbGlnaWJsZSBmb3IgZG9pbmcgbG9hZCBiYWxhbmNpbmcgYXQgdGhpcyBhbmQgYWJvdmUKKwkgKiBkb21haW5zLiBJbiB0aGUgbmV3bHkgaWRsZSBjYXNlLCB3ZSB3aWxsIGFsbG93IGFsbCB0aGUgY3B1J3MKKwkgKiB0byBkbyB0aGUgbmV3bHkgaWRsZSBsb2FkIGJhbGFuY2UuCisJICovCisJaWYgKGlkbGUgIT0gQ1BVX05FV0xZX0lETEUgJiYgbG9jYWxfZ3JvdXAgJiYKKwkgICAgYmFsYW5jZV9jcHUgIT0gdGhpc19jcHUgJiYgYmFsYW5jZSkgeworCQkqYmFsYW5jZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLworCXNncy0+YXZnX2xvYWQgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAorCQkJc2dzLT5ncm91cF9sb2FkICogU0NIRURfTE9BRF9TQ0FMRSk7CisKKworCS8qCisJICogQ29uc2lkZXIgdGhlIGdyb3VwIHVuYmFsYW5jZWQgd2hlbiB0aGUgaW1iYWxhbmNlIGlzIGxhcmdlcgorCSAqIHRoYW4gdGhlIGF2ZXJhZ2Ugd2VpZ2h0IG9mIHR3byB0YXNrcy4KKwkgKgorCSAqIEFQWjogd2l0aCBjZ3JvdXAgdGhlIGF2ZyB0YXNrIHdlaWdodCBjYW4gdmFyeSB3aWxkbHkgYW5kCisJICogICAgICBtaWdodCBub3QgYmUgYSBzdWl0YWJsZSBudW1iZXIgLSBzaG91bGQgd2Uga2VlcCBhCisJICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKKwkgKiAgICAgIHRoZSBoaWVyYXJjaHk/CisJICovCisJYXZnX2xvYWRfcGVyX3Rhc2sgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAorCQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7CisKKwlpZiAoKG1heF9jcHVfbG9hZCAtIG1pbl9jcHVfbG9hZCkgPiAyKmF2Z19sb2FkX3Blcl90YXNrKQorCQlzZ3MtPmdyb3VwX2ltYiA9IDE7CisKKwlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0gZ3JvdXAtPl9fY3B1X3Bvd2VyIC8gU0NIRURfTE9BRF9TQ0FMRTsKKworfQorCisvKioKKyAqIHVwZGF0ZV9zZF9sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQHNkOiBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KKyAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KKyAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQorICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KKyAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KKyAqIEBzZHM6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgc2NoZWRfZG9tYWluLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCisJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICpzZF9pZGxlLAorCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSwKKwkJCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzKQoreworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAgPSBzZC0+Z3JvdXBzOworCXN0cnVjdCBzZ19sYl9zdGF0cyBzZ3M7CisJaW50IGxvYWRfaWR4OworCisJaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHNkLCBzZHMsIGlkbGUpOworCWxvYWRfaWR4ID0gZ2V0X3NkX2xvYWRfaWR4KHNkLCBpZGxlKTsKKworCWRvIHsKKwkJaW50IGxvY2FsX2dyb3VwOworCisJCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKKwkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKKwkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKKwkJdXBkYXRlX3NnX2xiX3N0YXRzKGdyb3VwLCB0aGlzX2NwdSwgaWRsZSwgbG9hZF9pZHgsIHNkX2lkbGUsCisJCQkJbG9jYWxfZ3JvdXAsIGNwdXMsIGJhbGFuY2UsICZzZ3MpOworCisJCWlmIChsb2NhbF9ncm91cCAmJiBiYWxhbmNlICYmICEoKmJhbGFuY2UpKQorCQkJcmV0dXJuOworCisJCXNkcy0+dG90YWxfbG9hZCArPSBzZ3MuZ3JvdXBfbG9hZDsKKwkJc2RzLT50b3RhbF9wd3IgKz0gZ3JvdXAtPl9fY3B1X3Bvd2VyOworCisJCWlmIChsb2NhbF9ncm91cCkgeworCQkJc2RzLT50aGlzX2xvYWQgPSBzZ3MuYXZnX2xvYWQ7CisJCQlzZHMtPnRoaXMgPSBncm91cDsKKwkJCXNkcy0+dGhpc19ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOworCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7CisJCX0gZWxzZSBpZiAoc2dzLmF2Z19sb2FkID4gc2RzLT5tYXhfbG9hZCAmJgorCQkJICAgKHNncy5zdW1fbnJfcnVubmluZyA+IHNncy5ncm91cF9jYXBhY2l0eSB8fAorCQkJCXNncy5ncm91cF9pbWIpKSB7CisJCQlzZHMtPm1heF9sb2FkID0gc2dzLmF2Z19sb2FkOworCQkJc2RzLT5idXNpZXN0ID0gZ3JvdXA7CisJCQlzZHMtPmJ1c2llc3RfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOworCQkJc2RzLT5ncm91cF9pbWIgPSBzZ3MuZ3JvdXBfaW1iOworCQl9CisKKwkJdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoZ3JvdXAsIHNkcywgbG9jYWxfZ3JvdXAsICZzZ3MpOworCQlncm91cCA9IGdyb3VwLT5uZXh0OworCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOworCit9CisKKy8qKgorICogZml4X3NtYWxsX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgbWlub3IgaW1iYWxhbmNlIHRoYXQgZXhpc3RzCisgKgkJCWFtb25nc3QgdGhlIGdyb3VwcyBvZiBhIHNjaGVkX2RvbWFpbiwgZHVyaW5nCisgKgkJCWxvYWQgYmFsYW5jaW5nLgorICogQHNkczogU3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgorICogQHRoaXNfY3B1OiBUaGUgY3B1IGF0IHdob3NlIHNjaGVkX2RvbWFpbiB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jZS4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXhfc21hbGxfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCXVuc2lnbmVkIGxvbmcgdG1wLCBwd3Jfbm93ID0gMCwgcHdyX21vdmUgPSAwOworCXVuc2lnbmVkIGludCBpbWJuID0gMjsKKworCWlmIChzZHMtPnRoaXNfbnJfcnVubmluZykgeworCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayAvPSBzZHMtPnRoaXNfbnJfcnVubmluZzsKKwkJaWYgKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID4KKwkJCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaykKKwkJCWltYm4gPSAxOworCX0gZWxzZQorCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9CisJCQljcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOworCisJaWYgKHNkcy0+bWF4X2xvYWQgLSBzZHMtPnRoaXNfbG9hZCArIHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID49CisJCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIGltYm4pIHsKKwkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPSywgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW1iYWxhbmNlIHRvIGp1c3RpZnkgbW92aW5nIHRhc2tzLAorCSAqIGhvd2V2ZXIgd2UgbWF5IGJlIGFibGUgdG8gaW5jcmVhc2UgdG90YWwgQ1BVIHBvd2VyIHVzZWQgYnkKKwkgKiBtb3ZpbmcgdGhlbS4KKwkgKi8KKworCXB3cl9ub3cgKz0gc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlciAqCisJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQpOworCXB3cl9ub3cgKz0gc2RzLT50aGlzLT5fX2NwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkKTsKKwlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCisJdG1wID0gc2dfZGl2X2NwdV9wb3dlcihzZHMtPmJ1c2llc3QsCisJCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOworCWlmIChzZHMtPm1heF9sb2FkID4gdG1wKQorCQlwd3JfbW92ZSArPSBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCAtIHRtcCk7CisKKwkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIGFkZCAqLworCWlmIChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlciA8CisJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkKKwkJdG1wID0gc2dfZGl2X2NwdV9wb3dlcihzZHMtPnRoaXMsCisJCQlzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlcik7CisJZWxzZQorCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHNkcy0+dGhpcywKKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7CisJcHdyX21vdmUgKz0gc2RzLT50aGlzLT5fX2NwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkICsgdG1wKTsKKwlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyogTW92ZSBpZiB3ZSBnYWluIHRocm91Z2hwdXQgKi8KKwlpZiAocHdyX21vdmUgPiBwd3Jfbm93KQorCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7Cit9CisKKy8qKgorICogY2FsY3VsYXRlX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGltYmFsYW5jZSBwcmVzZW50IHdpdGhpbiB0aGUKKyAqCQkJIGdyb3VwcyBvZiBhIGdpdmVuIHNjaGVkX2RvbWFpbiBkdXJpbmcgbG9hZCBiYWxhbmNlLgorICogQHNkczogc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGN1cnJlbnRseSBsb2FkIGJhbGFuY2UgaXMgYmVpbmcgcGVyZm9ybWVkLgorICogQGltYmFsYW5jZTogVGhlIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgdGhpc19jcHUsCisJCXVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1heF9wdWxsOworCS8qCisJICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKKwkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93CisJICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKKwkgKi8KKwlpZiAoc2RzLT5tYXhfbG9hZCA8IHNkcy0+YXZnX2xvYWQpIHsKKwkJKmltYmFsYW5jZSA9IDA7CisJCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisJfQorCisJLyogRG9uJ3Qgd2FudCB0byBwdWxsIHNvIG1hbnkgdGFza3MgdGhhdCBhIGdyb3VwIHdvdWxkIGdvIGlkbGUgKi8KKwltYXhfcHVsbCA9IG1pbihzZHMtPm1heF9sb2FkIC0gc2RzLT5hdmdfbG9hZCwKKwkJCXNkcy0+bWF4X2xvYWQgLSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayk7CisKKwkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLworCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyLAorCQkoc2RzLT5hdmdfbG9hZCAtIHNkcy0+dGhpc19sb2FkKSAqIHNkcy0+dGhpcy0+X19jcHVfcG93ZXIpCisJCQkvIFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKgorCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKKwkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCisJICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQorCSAqIG1vdmVkCisJICovCisJaWYgKCppbWJhbGFuY2UgPCBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKKwkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKworfQorLyoqKioqKiogZmluZF9idXNpZXN0X2dyb3VwKCkgaGVscGVycyBlbmQgaGVyZSAqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogZmluZF9idXNpZXN0X2dyb3VwIC0gUmV0dXJucyB0aGUgYnVzaWVzdCBncm91cCB3aXRoaW4gdGhlIHNjaGVkX2RvbWFpbgorICogaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBJZiB0aGVyZSBpc24ndCBhbiBpbWJhbGFuY2UsIGFuZAorICogdGhlIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzLCBpdCByZXR1cm5zIGEgZ3JvdXAgd2hvc2UKKyAqIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIHRob3NlIHRhc2tzIGVsc2V3aGVyZSwgaWYKKyAqIHN1Y2ggYSBncm91cCBleGlzdHMuCisgKgorICogQWxzbyBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQgYmUgbW92ZWQKKyAqIHRvIHJlc3RvcmUgYmFsYW5jZS4KKyAqCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgYnVzaWVzdCBncm91cCBpcyB0byBiZSByZXR1cm5lZC4KKyAqIEB0aGlzX2NwdTogVGhlIGNwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNpbmcgaXMgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHdoaWNoIHN0b3JlcyBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQKKyAqCQliZSBtb3ZlZCB0byByZXN0b3JlIGJhbGFuY2UvcHV0IGEgZ3JvdXAgdG8gaWRsZS4KKyAqIEBpZGxlOiBUaGUgaWRsZSBzdGF0dXMgb2YgdGhpc19jcHUuCisgKiBAc2RfaWRsZTogVGhlIGlkbGVuZXNzIG9mIHNkCisgKiBAY3B1czogVGhlIHNldCBvZiBDUFVzIHVuZGVyIGNvbnNpZGVyYXRpb24gZm9yIGxvYWQtYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIHRoaXNfY3B1CisgKglpcyB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcgYXQgdGhpc19sZXZlbC4KKyAqCisgKiBSZXR1cm5zOgktIHRoZSBidXNpZXN0IGdyb3VwIGlmIGltYmFsYW5jZSBleGlzdHMuCisgKgkJLSBJZiBubyBpbWJhbGFuY2UgYW5kIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzIGJhbGFuY2UsCisgKgkJICAgcmV0dXJuIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgd2hvc2UgQ1BVcyBjYW4gYmUKKyAqCQkgICBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyBpdHMgdGFza3Mgb250byBvdXIgZ3JvdXAuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKgogZmluZF9idXNpZXN0X2dyb3VwKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCiAJCSAgIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCiAJCSAgIGludCAqc2RfaWRsZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmJ1c2llc3QgPSBOVUxMLCAqdGhpcyA9IE5VTEwsICpncm91cCA9IHNkLT5ncm91cHM7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbG9hZCwgYXZnX2xvYWQsIHRvdGFsX2xvYWQsIHRoaXNfbG9hZCwgdG90YWxfcHdyOwotCXVuc2lnbmVkIGxvbmcgbWF4X3B1bGw7Ci0JdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2ssIGJ1c2llc3RfbnJfcnVubmluZzsKLQl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZF9wZXJfdGFzaywgdGhpc19ucl9ydW5uaW5nOwotCWludCBsb2FkX2lkeCwgZ3JvdXBfaW1iID0gMDsKLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWludCBwb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAxOwotCXVuc2lnbmVkIGxvbmcgbGVhZGVyX25yX3J1bm5pbmcgPSAwLCBtaW5fbG9hZF9wZXJfdGFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtaW5fbnJfcnVubmluZyA9IFVMT05HX01BWDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX21pbiA9IE5VTEwsICpncm91cF9sZWFkZXIgPSBOVUxMOwotI2VuZGlmCisJc3RydWN0IHNkX2xiX3N0YXRzIHNkczsKIAotCW1heF9sb2FkID0gdGhpc19sb2FkID0gdG90YWxfbG9hZCA9IHRvdGFsX3B3ciA9IDA7Ci0JYnVzaWVzdF9sb2FkX3Blcl90YXNrID0gYnVzaWVzdF9ucl9ydW5uaW5nID0gMDsKLQl0aGlzX2xvYWRfcGVyX3Rhc2sgPSB0aGlzX25yX3J1bm5pbmcgPSAwOworCW1lbXNldCgmc2RzLCAwLCBzaXplb2Yoc2RzKSk7CiAKLQlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUpCi0JCWxvYWRfaWR4ID0gc2QtPmJ1c3lfaWR4OwotCWVsc2UgaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpCi0JCWxvYWRfaWR4ID0gc2QtPm5ld2lkbGVfaWR4OwotCWVsc2UKLQkJbG9hZF9pZHggPSBzZC0+aWRsZV9pZHg7CisJLyoKKwkgKiBDb21wdXRlIHRoZSB2YXJpb3VzIHN0YXRpc3RpY3MgcmVsYXZlbnQgZm9yIGxvYWQgYmFsYW5jaW5nIGF0CisJICogdGhpcyBsZXZlbC4KKwkgKi8KKwl1cGRhdGVfc2RfbGJfc3RhdHMoc2QsIHRoaXNfY3B1LCBpZGxlLCBzZF9pZGxlLCBjcHVzLAorCQkJCQliYWxhbmNlLCAmc2RzKTsKIAotCWRvIHsKLQkJdW5zaWduZWQgbG9uZyBsb2FkLCBncm91cF9jYXBhY2l0eSwgbWF4X2NwdV9sb2FkLCBtaW5fY3B1X2xvYWQ7Ci0JCWludCBsb2NhbF9ncm91cDsKLQkJaW50IGk7Ci0JCWludCBfX2dyb3VwX2ltYiA9IDA7Ci0JCXVuc2lnbmVkIGludCBiYWxhbmNlX2NwdSA9IC0xLCBmaXJzdF9pZGxlX2NwdSA9IDA7Ci0JCXVuc2lnbmVkIGxvbmcgc3VtX25yX3J1bm5pbmcsIHN1bV93ZWlnaHRlZF9sb2FkOwotCQl1bnNpZ25lZCBsb25nIHN1bV9hdmdfbG9hZF9wZXJfdGFzazsKLQkJdW5zaWduZWQgbG9uZyBhdmdfbG9hZF9wZXJfdGFzazsKKwkvKiBDYXNlcyB3aGVyZSBpbWJhbGFuY2UgZG9lcyBub3QgZXhpc3QgZnJvbSBQT1Ygb2YgdGhpc19jcHUgKi8KKwkvKiAxKSB0aGlzX2NwdSBpcyBub3QgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nCisJICogICAgYXQgdGhpcyBsZXZlbC4KKwkgKiAyKSBUaGVyZSBpcyBubyBidXN5IHNpYmxpbmcgZ3JvdXAgdG8gcHVsbCBmcm9tLgorCSAqIDMpIFRoaXMgZ3JvdXAgaXMgdGhlIGJ1c2llc3QgZ3JvdXAuCisJICogNCkgVGhpcyBncm91cCBpcyBtb3JlIGJ1c3kgdGhhbiB0aGUgYXZnIGJ1c2llbmVzcyBhdCB0aGlzCisJICogICAgc2NoZWRfZG9tYWluLgorCSAqIDUpIFRoZSBpbWJhbGFuY2UgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQuCisJICogNikgQW55IHJlYmFsYW5jZSB3b3VsZCBsZWFkIHRvIHBpbmctcG9uZworCSAqLworCWlmIChiYWxhbmNlICYmICEoKmJhbGFuY2UpKQorCQlnb3RvIHJldDsKIAotCQlsb2NhbF9ncm91cCA9IGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsCi0JCQkJCSAgICAgICBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Ci0KLQkJaWYgKGxvY2FsX2dyb3VwKQotCQkJYmFsYW5jZV9jcHUgPSBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKLQotCQkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KLQkJc3VtX3dlaWdodGVkX2xvYWQgPSBzdW1fbnJfcnVubmluZyA9IGF2Z19sb2FkID0gMDsKLQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrID0gYXZnX2xvYWRfcGVyX3Rhc2sgPSAwOwotCi0JCW1heF9jcHVfbG9hZCA9IDA7Ci0JCW1pbl9jcHVfbG9hZCA9IH4wVUw7Ci0KLQkJZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSwgY3B1cykgewotCQkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKLQotCQkJaWYgKCpzZF9pZGxlICYmIHJxLT5ucl9ydW5uaW5nKQotCQkJCSpzZF9pZGxlID0gMDsKLQotCQkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLwotCQkJaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCQkJaWYgKGlkbGVfY3B1KGkpICYmICFmaXJzdF9pZGxlX2NwdSkgewotCQkJCQlmaXJzdF9pZGxlX2NwdSA9IDE7Ci0JCQkJCWJhbGFuY2VfY3B1ID0gaTsKLQkJCQl9Ci0KLQkJCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOwotCQkJfSBlbHNlIHsKLQkJCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOwotCQkJCWlmIChsb2FkID4gbWF4X2NwdV9sb2FkKQotCQkJCQltYXhfY3B1X2xvYWQgPSBsb2FkOwotCQkJCWlmIChtaW5fY3B1X2xvYWQgPiBsb2FkKQotCQkJCQltaW5fY3B1X2xvYWQgPSBsb2FkOwotCQkJfQotCi0JCQlhdmdfbG9hZCArPSBsb2FkOwotCQkJc3VtX25yX3J1bm5pbmcgKz0gcnEtPm5yX3J1bm5pbmc7Ci0JCQlzdW1fd2VpZ2h0ZWRfbG9hZCArPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOwotCi0JCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKz0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKGkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmlyc3QgaWRsZSBjcHUgb3IgdGhlIGZpcnN0IGNwdShidXNpZXN0KSBpbiB0aGlzIHNjaGVkIGdyb3VwCi0JCSAqIGlzIGVsaWdpYmxlIGZvciBkb2luZyBsb2FkIGJhbGFuY2luZyBhdCB0aGlzIGFuZCBhYm92ZQotCQkgKiBkb21haW5zLiBJbiB0aGUgbmV3bHkgaWRsZSBjYXNlLCB3ZSB3aWxsIGFsbG93IGFsbCB0aGUgY3B1J3MKLQkJICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgotCQkgKi8KLQkJaWYgKGlkbGUgIT0gQ1BVX05FV0xZX0lETEUgJiYgbG9jYWxfZ3JvdXAgJiYKLQkJICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1ICYmIGJhbGFuY2UpIHsKLQkJCSpiYWxhbmNlID0gMDsKLQkJCWdvdG8gcmV0OwotCQl9Ci0KLQkJdG90YWxfbG9hZCArPSBhdmdfbG9hZDsKLQkJdG90YWxfcHdyICs9IGdyb3VwLT5fX2NwdV9wb3dlcjsKLQotCQkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLwotCQlhdmdfbG9hZCA9IHNnX2Rpdl9jcHVfcG93ZXIoZ3JvdXAsCi0JCQkJYXZnX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKLQotCi0JCS8qCi0JCSAqIENvbnNpZGVyIHRoZSBncm91cCB1bmJhbGFuY2VkIHdoZW4gdGhlIGltYmFsYW5jZSBpcyBsYXJnZXIKLQkJICogdGhhbiB0aGUgYXZlcmFnZSB3ZWlnaHQgb2YgdHdvIHRhc2tzLgotCQkgKgotCQkgKiBBUFo6IHdpdGggY2dyb3VwIHRoZSBhdmcgdGFzayB3ZWlnaHQgY2FuIHZhcnkgd2lsZGx5IGFuZAotCQkgKiAgICAgIG1pZ2h0IG5vdCBiZSBhIHN1aXRhYmxlIG51bWJlciAtIHNob3VsZCB3ZSBrZWVwIGEKLQkJICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKLQkJICogICAgICB0aGUgaGllcmFyY2h5PwotCQkgKi8KLQkJYXZnX2xvYWRfcGVyX3Rhc2sgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAotCQkJCXN1bV9hdmdfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOwotCi0JCWlmICgobWF4X2NwdV9sb2FkIC0gbWluX2NwdV9sb2FkKSA+IDIqYXZnX2xvYWRfcGVyX3Rhc2spCi0JCQlfX2dyb3VwX2ltYiA9IDE7Ci0KLQkJZ3JvdXBfY2FwYWNpdHkgPSBncm91cC0+X19jcHVfcG93ZXIgLyBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JCWlmIChsb2NhbF9ncm91cCkgewotCQkJdGhpc19sb2FkID0gYXZnX2xvYWQ7Ci0JCQl0aGlzID0gZ3JvdXA7Ci0JCQl0aGlzX25yX3J1bm5pbmcgPSBzdW1fbnJfcnVubmluZzsKLQkJCXRoaXNfbG9hZF9wZXJfdGFzayA9IHN1bV93ZWlnaHRlZF9sb2FkOwotCQl9IGVsc2UgaWYgKGF2Z19sb2FkID4gbWF4X2xvYWQgJiYKLQkJCSAgIChzdW1fbnJfcnVubmluZyA+IGdyb3VwX2NhcGFjaXR5IHx8IF9fZ3JvdXBfaW1iKSkgewotCQkJbWF4X2xvYWQgPSBhdmdfbG9hZDsKLQkJCWJ1c2llc3QgPSBncm91cDsKLQkJCWJ1c2llc3RfbnJfcnVubmluZyA9IHN1bV9ucl9ydW5uaW5nOwotCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCQlncm91cF9pbWIgPSBfX2dyb3VwX2ltYjsKLQkJfQotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQkJLyoKLQkJICogQnVzeSBwcm9jZXNzb3JzIHdpbGwgbm90IHBhcnRpY2lwYXRlIGluIHBvd2VyIHNhdmluZ3MKLQkJICogYmFsYW5jZS4KLQkJICovCi0JCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fAotCQkJCSEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQkJZ290byBncm91cF9uZXh0OwotCi0JCS8qCi0JCSAqIElmIHRoZSBsb2NhbCBncm91cCBpcyBpZGxlIG9yIGNvbXBsZXRlbHkgbG9hZGVkCi0JCSAqIG5vIG5lZWQgdG8gZG8gcG93ZXIgc2F2aW5ncyBiYWxhbmNlIGF0IHRoaXMgZG9tYWluCi0JCSAqLwotCQlpZiAobG9jYWxfZ3JvdXAgJiYgKHRoaXNfbnJfcnVubmluZyA+PSBncm91cF9jYXBhY2l0eSB8fAotCQkJCSAgICAhdGhpc19ucl9ydW5uaW5nKSkKLQkJCXBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7Ci0KLQkJLyoKLQkJICogSWYgYSBncm91cCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgZnVsbCBjYXBhY2l0eSBvciBpZGxlLAotCQkgKiBkb24ndCBpbmNsdWRlIHRoYXQgZ3JvdXAgaW4gcG93ZXIgc2F2aW5ncyBjYWxjdWxhdGlvbnMKLQkJICovCi0JCWlmICghcG93ZXJfc2F2aW5nc19iYWxhbmNlIHx8IHN1bV9ucl9ydW5uaW5nID49IGdyb3VwX2NhcGFjaXR5Ci0JCSAgICB8fCAhc3VtX25yX3J1bm5pbmcpCi0JCQlnb3RvIGdyb3VwX25leHQ7Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBoYXMgdGhlIGxlYXN0IG5vbi1pZGxlIGxvYWQuCi0JCSAqIFRoaXMgaXMgdGhlIGdyb3VwIGZyb20gd2hlcmUgd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBsb2FkCi0JCSAqIGZvciBzYXZpbmcgcG93ZXIKLQkJICovCi0JCWlmICgoc3VtX25yX3J1bm5pbmcgPCBtaW5fbnJfcnVubmluZykgfHwKLQkJICAgIChzdW1fbnJfcnVubmluZyA9PSBtaW5fbnJfcnVubmluZyAmJgotCQkgICAgIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpID4KLQkJICAgICBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXBfbWluKSkpKSB7Ci0JCQlncm91cF9taW4gPSBncm91cDsKLQkJCW1pbl9ucl9ydW5uaW5nID0gc3VtX25yX3J1bm5pbmc7Ci0JCQltaW5fbG9hZF9wZXJfdGFzayA9IHN1bV93ZWlnaHRlZF9sb2FkIC8KLQkJCQkJCXN1bV9ucl9ydW5uaW5nOwotCQl9Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBpcyBhbG1vc3QgbmVhciBpdHMKLQkJICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCi0JCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgotCQkgKi8KLQkJaWYgKHN1bV9ucl9ydW5uaW5nIDw9IGdyb3VwX2NhcGFjaXR5IC0gMSkgewotCQkJaWYgKHN1bV9ucl9ydW5uaW5nID4gbGVhZGVyX25yX3J1bm5pbmcgfHwKLQkJCSAgICAoc3VtX25yX3J1bm5pbmcgPT0gbGVhZGVyX25yX3J1bm5pbmcgJiYKLQkJCSAgICAgY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSkgPAotCQkJICAgICBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXBfbGVhZGVyKSkpKSB7Ci0JCQkJZ3JvdXBfbGVhZGVyID0gZ3JvdXA7Ci0JCQkJbGVhZGVyX25yX3J1bm5pbmcgPSBzdW1fbnJfcnVubmluZzsKLQkJCX0KLQkJfQotZ3JvdXBfbmV4dDoKLSNlbmRpZgotCQlncm91cCA9IGdyb3VwLT5uZXh0OwotCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOwotCi0JaWYgKCFidXNpZXN0IHx8IHRoaXNfbG9hZCA+PSBtYXhfbG9hZCB8fCBidXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKKwlpZiAoIXNkcy5idXNpZXN0IHx8IHNkcy5idXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAKLQlhdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogdG90YWxfbG9hZCkgLyB0b3RhbF9wd3I7Ci0KLQlpZiAodGhpc19sb2FkID49IGF2Z19sb2FkIHx8Ci0JCQkxMDAqbWF4X2xvYWQgPD0gc2QtPmltYmFsYW5jZV9wY3QqdGhpc19sb2FkKQorCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5tYXhfbG9hZCkKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAKLQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgLz0gYnVzaWVzdF9ucl9ydW5uaW5nOwotCWlmIChncm91cF9pbWIpCi0JCWJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IG1pbihidXNpZXN0X2xvYWRfcGVyX3Rhc2ssIGF2Z19sb2FkKTsKKwlzZHMuYXZnX2xvYWQgPSAoU0NIRURfTE9BRF9TQ0FMRSAqIHNkcy50b3RhbF9sb2FkKSAvIHNkcy50b3RhbF9wd3I7CisKKwlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMuYXZnX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJaWYgKDEwMCAqIHNkcy5tYXhfbG9hZCA8PSBzZC0+aW1iYWxhbmNlX3BjdCAqIHNkcy50aGlzX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayAvPSBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nOworCWlmIChzZHMuZ3JvdXBfaW1iKQorCQlzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrID0KKwkJCW1pbihzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMuYXZnX2xvYWQpOwogCiAJLyoKIAkgKiBXZSdyZSB0cnlpbmcgdG8gZ2V0IGFsbCB0aGUgY3B1cyB0byB0aGUgYXZlcmFnZV9sb2FkLCBzbyB3ZSBkb24ndApAQCAtMzMwNiwxMDUgKzM3NjAsMjAgQEAKIAkgKiBieSBwdWxsaW5nIHRhc2tzIHRvIHVzLiBCZSBjYXJlZnVsIG9mIG5lZ2F0aXZlIG51bWJlcnMgYXMgdGhleSdsbAogCSAqIGFwcGVhciBhcyB2ZXJ5IGxhcmdlIHZhbHVlcyB3aXRoIHVuc2lnbmVkIGxvbmdzLgogCSAqLwotCWlmIChtYXhfbG9hZCA8PSBidXNpZXN0X2xvYWRfcGVyX3Rhc2spCisJaWYgKHNkcy5tYXhfbG9hZCA8PSBzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAotCS8qCi0JICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKLQkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93Ci0JICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKLQkgKi8KLQlpZiAobWF4X2xvYWQgPCBhdmdfbG9hZCkgewotCQkqaW1iYWxhbmNlID0gMDsKLQkJZ290byBzbWFsbF9pbWJhbGFuY2U7Ci0JfQotCi0JLyogRG9uJ3Qgd2FudCB0byBwdWxsIHNvIG1hbnkgdGFza3MgdGhhdCBhIGdyb3VwIHdvdWxkIGdvIGlkbGUgKi8KLQltYXhfcHVsbCA9IG1pbihtYXhfbG9hZCAtIGF2Z19sb2FkLCBtYXhfbG9hZCAtIGJ1c2llc3RfbG9hZF9wZXJfdGFzayk7Ci0KLQkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLwotCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBidXNpZXN0LT5fX2NwdV9wb3dlciwKLQkJCQkoYXZnX2xvYWQgLSB0aGlzX2xvYWQpICogdGhpcy0+X19jcHVfcG93ZXIpCi0JCQkvIFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKgotCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKLQkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCi0JICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQotCSAqIG1vdmVkCi0JICovCi0JaWYgKCppbWJhbGFuY2UgPCBidXNpZXN0X2xvYWRfcGVyX3Rhc2spIHsKLQkJdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3csIHB3cl9tb3ZlOwotCQl1bnNpZ25lZCBpbnQgaW1ibjsKLQotc21hbGxfaW1iYWxhbmNlOgotCQlwd3JfbW92ZSA9IHB3cl9ub3cgPSAwOwotCQlpbWJuID0gMjsKLQkJaWYgKHRoaXNfbnJfcnVubmluZykgewotCQkJdGhpc19sb2FkX3Blcl90YXNrIC89IHRoaXNfbnJfcnVubmluZzsKLQkJCWlmIChidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPiB0aGlzX2xvYWRfcGVyX3Rhc2spCi0JCQkJaW1ibiA9IDE7Ci0JCX0gZWxzZQotCQkJdGhpc19sb2FkX3Blcl90YXNrID0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKLQotCQlpZiAobWF4X2xvYWQgLSB0aGlzX2xvYWQgKyBidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPj0KLQkJCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogaW1ibikgewotCQkJKmltYmFsYW5jZSA9IGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLQkJCXJldHVybiBidXNpZXN0OwotCQl9Ci0KLQkJLyoKLQkJICogT0ssIHdlIGRvbid0IGhhdmUgZW5vdWdoIGltYmFsYW5jZSB0byBqdXN0aWZ5IG1vdmluZyB0YXNrcywKLQkJICogaG93ZXZlciB3ZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0b3RhbCBDUFUgcG93ZXIgdXNlZCBieQotCQkgKiBtb3ZpbmcgdGhlbS4KLQkJICovCi0KLQkJcHdyX25vdyArPSBidXNpZXN0LT5fX2NwdV9wb3dlciAqCi0JCQkJbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgbWF4X2xvYWQpOwotCQlwd3Jfbm93ICs9IHRoaXMtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQpOwotCQlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBzdWJ0cmFjdCAqLwotCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKGJ1c2llc3QsCi0JCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCWlmIChtYXhfbG9hZCA+IHRtcCkKLQkJCXB3cl9tb3ZlICs9IGJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4oYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBtYXhfbG9hZCAtIHRtcCk7Ci0KLQkJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KLQkJaWYgKG1heF9sb2FkICogYnVzaWVzdC0+X19jcHVfcG93ZXIgPAotCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCi0JCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHRoaXMsCi0JCQkJCW1heF9sb2FkICogYnVzaWVzdC0+X19jcHVfcG93ZXIpOwotCQllbHNlCi0JCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHRoaXMsCi0JCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCXB3cl9tb3ZlICs9IHRoaXMtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQgKyB0bXApOwotCQlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCi0JCWlmIChwd3JfbW92ZSA+IHB3cl9ub3cpCi0JCQkqaW1iYWxhbmNlID0gYnVzaWVzdF9sb2FkX3Blcl90YXNrOwotCX0KLQotCXJldHVybiBidXNpZXN0OworCS8qIExvb2tzIGxpa2UgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBDb21wdXRlIGl0ICovCisJY2FsY3VsYXRlX2ltYmFsYW5jZSgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKwlyZXR1cm4gc2RzLmJ1c2llc3Q7CiAKIG91dF9iYWxhbmNlZDoKLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fCAhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJZ290byByZXQ7Ci0KLQlpZiAodGhpcyA9PSBncm91cF9sZWFkZXIgJiYgZ3JvdXBfbGVhZGVyICE9IGdyb3VwX21pbikgewotCQkqaW1iYWxhbmNlID0gbWluX2xvYWRfcGVyX3Rhc2s7Ci0JCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzID49IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCkgewotCQkJY3B1X3JxKHRoaXNfY3B1KS0+cmQtPnNjaGVkX21jX3ByZWZlcnJlZF93YWtldXBfY3B1ID0KLQkJCQljcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXBfbGVhZGVyKSk7Ci0JCX0KLQkJcmV0dXJuIGdyb3VwX21pbjsKLQl9Ci0jZW5kaWYKKwkvKgorCSAqIFRoZXJlIGlzIG5vIG9idmlvdXMgaW1iYWxhbmNlLiBCdXQgY2hlY2sgaWYgd2UgY2FuIGRvIHNvbWUgYmFsYW5jaW5nCisJICogdG8gc2F2ZSBwb3dlci4KKwkgKi8KKwlpZiAoY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpKQorCQlyZXR1cm4gc2RzLmJ1c2llc3Q7CiByZXQ6CiAJKmltYmFsYW5jZSA9IDA7CiAJcmV0dXJuIE5VTEw7CkBAIC00MDU3LDYgKzQ0MjYsMTEgQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIGludCBvbl9udWxsX2RvbWFpbihpbnQgY3B1KQoreworCXJldHVybiAhcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7Cit9CisKIC8qCiAgKiBUcmlnZ2VyIHRoZSBTQ0hFRF9TT0ZUSVJRIGlmIGl0IGlzIHRpbWUgdG8gZG8gcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcuCiAgKgpAQCAtNDExNCw3ICs0NDg4LDkgQEAKIAkgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQogCQlyZXR1cm47CiAjZW5kaWYKLQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSkKKwkvKiBEb24ndCBuZWVkIHRvIHJlYmFsYW5jZSB3aGlsZSBhdHRhY2hlZCB0byBOVUxMIGRvbWFpbiAqLworCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpICYmCisJICAgIGxpa2VseSghb25fbnVsbF9kb21haW4oY3B1KSkpCiAJCXJhaXNlX3NvZnRpcnEoU0NIRURfU09GVElSUSk7CiB9CiAKQEAgLTQ1MDgsMTEgKzQ4ODQsMzMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3sKKwlpZiAocHJldi0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKSB7CisJCXU2NCBydW50aW1lID0gcHJldi0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKworCQlydW50aW1lIC09IHByZXYtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZTsKKwkJcnVudGltZSA9IG1pbl90KHU2NCwgcnVudGltZSwgMipzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpOworCisJCS8qCisJCSAqIEluIG9yZGVyIHRvIGF2b2lkIGF2Z19vdmVybGFwIGdyb3dpbmcgc3RhbGUgd2hlbiB3ZSBhcmUKKwkJICogaW5kZWVkIG92ZXJsYXBwaW5nIGFuZCBoZW5jZSBub3QgZ2V0dGluZyBwdXQgdG8gc2xlZXAsIGdyb3cKKwkJICogdGhlIGF2Z19vdmVybGFwIG9uIHByZWVtcHRpb24uCisJCSAqCisJCSAqIFdlIHVzZSB0aGUgYXZlcmFnZSBwcmVlbXB0aW9uIHJ1bnRpbWUgYmVjYXVzZSB0aGF0CisJCSAqIGNvcnJlbGF0ZXMgdG8gdGhlIGFtb3VudCBvZiBjYWNoZSBmb290cHJpbnQgYSB0YXNrIGNhbgorCQkgKiBidWlsZCB1cC4KKwkJICovCisJCXVwZGF0ZV9hdmcoJnByZXYtPnNlLmF2Z19vdmVybGFwLCBydW50aW1lKTsKKwl9CisJcHJldi0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHByZXYpOworfQorCiAvKgogICogUGljayB1cCB0aGUgaGlnaGVzdC1wcmlvIHRhc2s6CiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICoKLXBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3BpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEpCiB7CiAJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzczsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC00NTg2LDggKzQ5ODQsOCBAQAogCWlmICh1bmxpa2VseSghcnEtPm5yX3J1bm5pbmcpKQogCQlpZGxlX2JhbGFuY2UoY3B1LCBycSk7CiAKLQlwcmV2LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgcHJldik7Ci0JbmV4dCA9IHBpY2tfbmV4dF90YXNrKHJxLCBwcmV2KTsKKwlwdXRfcHJldl90YXNrKHJxLCBwcmV2KTsKKwluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOwogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CiAJCXNjaGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOwpAQCAtNDY0Miw3ICs1MDQwLDcgQEAKIAkJICogYmV0d2VlbiBzY2hlZHVsZSBhbmQgbm93LgogCQkgKi8KIAkJYmFycmllcigpOwotCX0gd2hpbGUgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpKTsKKwl9IHdoaWxlIChuZWVkX3Jlc2NoZWQoKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHByZWVtcHRfc2NoZWR1bGUpOwogCkBAIC00NjcxLDcgKzUwNjksNyBAQAogCQkgKiBiZXR3ZWVuIHNjaGVkdWxlIGFuZCBub3cuCiAJCSAqLwogCQliYXJyaWVyKCk7Ci0JfSB3aGlsZSAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpOworCX0gd2hpbGUgKG5lZWRfcmVzY2hlZCgpKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCkBAIC01MTQ1LDcgKzU1NDMsNyBAQAogCWlmIChpbmNyZW1lbnQgPiA0MCkKIAkJaW5jcmVtZW50ID0gNDA7CiAKLQluaWNlID0gUFJJT19UT19OSUNFKGN1cnJlbnQtPnN0YXRpY19wcmlvKSArIGluY3JlbWVudDsKKwluaWNlID0gVEFTS19OSUNFKGN1cnJlbnQpICsgaW5jcmVtZW50OwogCWlmIChuaWNlIDwgLTIwKQogCQluaWNlID0gLTIwOwogCWlmIChuaWNlID4gMTkpCkBAIC02NDIzLDcgKzY4MjEsNyBAQAogCQlpZiAoIXJxLT5ucl9ydW5uaW5nKQogCQkJYnJlYWs7CiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0JCW5leHQgPSBwaWNrX25leHRfdGFzayhycSwgcnEtPmN1cnIpOworCQluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOwogCQlpZiAoIW5leHQpCiAJCQlicmVhazsKIAkJbmV4dC0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIG5leHQpOwpAQCAtNjk0NCwyMCArNzM0MiwyNiBAQAogCiBzdGF0aWMgdm9pZCBycV9hdHRhY2hfcm9vdChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKQogeworCXN0cnVjdCByb290X2RvbWFpbiAqb2xkX3JkID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAocnEtPnJkKSB7Ci0JCXN0cnVjdCByb290X2RvbWFpbiAqb2xkX3JkID0gcnEtPnJkOworCQlvbGRfcmQgPSBycS0+cmQ7CiAKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUocnEtPmNwdSwgb2xkX3JkLT5vbmxpbmUpKQogCQkJc2V0X3JxX29mZmxpbmUocnEpOwogCiAJCWNwdW1hc2tfY2xlYXJfY3B1KHJxLT5jcHUsIG9sZF9yZC0+c3Bhbik7CiAKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9sZF9yZC0+cmVmY291bnQpKQotCQkJZnJlZV9yb290ZG9tYWluKG9sZF9yZCk7CisJCS8qCisJCSAqIElmIHdlIGRvbnQgd2FudCB0byBmcmVlIHRoZSBvbGRfcnQgeWV0IHRoZW4KKwkJICogc2V0IG9sZF9yZCB0byBOVUxMIHRvIHNraXAgdGhlIGZyZWVpbmcgbGF0ZXIKKwkJICogaW4gdGhpcyBmdW5jdGlvbjoKKwkJICovCisJCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmb2xkX3JkLT5yZWZjb3VudCkpCisJCQlvbGRfcmQgPSBOVUxMOwogCX0KIAogCWF0b21pY19pbmMoJnJkLT5yZWZjb3VudCk7CkBAIC02OTY4LDYgKzczNzIsOSBAQAogCQlzZXRfcnFfb25saW5lKHJxKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisKKwlpZiAob2xkX3JkKQorCQlmcmVlX3Jvb3Rkb21haW4ob2xkX3JkKTsKIH0KIAogc3RhdGljIGludCBfX2luaXRfcmVmb2sgaW5pdF9yb290ZG9tYWluKHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGJvb2wgYm9vdG1lbSkKQEAgLTgyMDksMTEgKzg2MTYsMTUgQEAKIAlfX3NldF9iaXQoTUFYX1JUX1BSSU8sIGFycmF5LT5iaXRtYXApOwogCiAjaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JcnRfcnEtPmhpZ2hlc3RfcHJpbyA9IE1BWF9SVF9QUklPOworCXJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA9IE1BWF9SVF9QUklPOworI2lmZGVmIENPTkZJR19TTVAKKwlydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQgPSBNQVhfUlRfUFJJTzsKKyNlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NNUAogCXJ0X3JxLT5ydF9ucl9taWdyYXRvcnkgPSAwOwogCXJ0X3JxLT5vdmVybG9hZGVkID0gMDsKKwlwbGlzdF9oZWFkX2luaXQoJnJxLT5ydC5wdXNoYWJsZV90YXNrcywgJnJxLT5sb2NrKTsKICNlbmRpZgogCiAJcnRfcnEtPnJ0X3RpbWUgPSAwOwpAQCAtOTIxNSw2ICs5NjI2LDE2IEBACiAKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgc2NoZWRfcnRfY2FuX2F0dGFjaChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCS8qIERvbid0IGFjY2VwdCByZWFsdGltZSB0YXNrcyB3aGVuIHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlbSB0byBydW4gKi8KKwlpZiAocnRfdGFzayh0c2spICYmIHRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiAjZWxzZSAvKiAhQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiBzdGF0aWMgaW50IHNjaGVkX3J0X2dsb2JhbF9jb25zdHJhaW50cyh2b2lkKQogewpAQCAtOTMwOCw4ICs5NzI5LDcgQEAKIAkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JLyogRG9uJ3QgYWNjZXB0IHJlYWx0aW1lIHRhc2tzIHdoZW4gdGhlcmUgaXMgbm8gd2F5IGZvciB0aGVtIHRvIHJ1biAqLwotCWlmIChydF90YXNrKHRzaykgJiYgY2dyb3VwX3RnKGNncnApLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZSA9PSAwKQorCWlmICghc2NoZWRfcnRfY2FuX2F0dGFjaChjZ3JvdXBfdGcoY2dycCksIHRzaykpCiAJCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKIAkvKiBXZSBkb24ndCBzdXBwb3J0IFJULXRhc2tzIGJlaW5nIGluIHNlcGFyYXRlIGdyb3VwcyAqLwpAQCAtOTU4MCw3ICsxMDAwMCw3IEBACiAJc3RydWN0IGNwdWFjY3QgKmNhOwogCWludCBjcHU7CiAKLQlpZiAoIWNwdWFjY3Rfc3Vic3lzLmFjdGl2ZSkKKwlpZiAodW5saWtlbHkoIWNwdWFjY3Rfc3Vic3lzLmFjdGl2ZSkpCiAJCXJldHVybjsKIAogCWNwdSA9IHRhc2tfY3B1KHRzayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IGEwYjA4NTIuLjM5MGYzMzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqIFRoZSBjbG9jazogc2NoZWRfY2xvY2tfY3B1KCkgaXMgbW9ub3RvbmljIHBlciBjcHUsIGFuZCBzaG91bGQgYmUgc29tZXdoYXQKICAqIGNvbnNpc3RlbnQgYmV0d2VlbiBjcHVzIChuZXZlciBtb3JlIHRoYW4gMiBqaWZmaWVzIGRpZmZlcmVuY2UpLgogICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KQEAgLTQzLDYgKzQzLDcgQEAKIHN0YXRpYyBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19ydW5uaW5nOwogCiAjaWZkZWYgQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKK19fcmVhZF9tb3N0bHkgaW50IHNjaGVkX2Nsb2NrX3N0YWJsZTsKIAogc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgewogCS8qCkBAIC04Nyw3ICs4OCw3IEBACiB9CiAKIC8qCi0gKiBtaW4sbWF4IGV4Y2VwdCB0aGV5IHRha2Ugd3JhcHBpbmcgaW50byBhY2NvdW50CisgKiBtaW4sIG1heCBleGNlcHQgdGhleSB0YWtlIHdyYXBwaW5nIGludG8gYWNjb3VudAogICovCiAKIHN0YXRpYyBpbmxpbmUgdTY0IHdyYXBfbWluKHU2NCB4LCB1NjQgeSkKQEAgLTExMSwxNSArMTEyLDEzIEBACiAJczY0IGRlbHRhID0gbm93IC0gc2NkLT50aWNrX3JhdzsKIAl1NjQgY2xvY2ssIG1pbl9jbG9jaywgbWF4X2Nsb2NrOwogCi0JV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwotCiAJaWYgKHVubGlrZWx5KGRlbHRhIDwgMCkpCiAJCWRlbHRhID0gMDsKIAogCS8qCiAJICogc2NkLT5jbG9jayA9IGNsYW1wKHNjZC0+dGlja19ndG9kICsgZGVsdGEsCi0JICogCQkgICAgICBtYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spLAotCSAqIAkJICAgICAgc2NkLT50aWNrX2d0b2QgKyBUSUNLX05TRUMpOworCSAqCQkgICAgICBtYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spLAorCSAqCQkgICAgICBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQyk7CiAJICovCiAKIAljbG9jayA9IHNjZC0+dGlja19ndG9kICsgZGVsdGE7CkBAIC0xNDgsMTIgKzE0NywxMyBAQAogCiB1NjQgc2NoZWRfY2xvY2tfY3B1KGludCBjcHUpCiB7Ci0Jc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZCA9IGNwdV9zZGMoY3B1KTsKIAl1NjQgbm93LCBjbG9jaywgdGhpc19jbG9jaywgcmVtb3RlX2Nsb2NrOworCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2Q7CiAKLQlpZiAodW5saWtlbHkoIXNjaGVkX2Nsb2NrX3J1bm5pbmcpKQotCQlyZXR1cm4gMHVsbDsKKwlpZiAoc2NoZWRfY2xvY2tfc3RhYmxlKQorCQlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIAorCXNjZCA9IGNwdV9zZGMoY3B1KTsKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJbm93ID0gc2NoZWRfY2xvY2soKTsKIApAQCAtMTk1LDE0ICsxOTUsMTggQEAKIAogdm9pZCBzY2hlZF9jbG9ja190aWNrKHZvaWQpCiB7Ci0Jc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZCA9IHRoaXNfc2NkKCk7CisJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZDsKIAl1NjQgbm93LCBub3dfZ3RvZDsKIAorCWlmIChzY2hlZF9jbG9ja19zdGFibGUpCisJCXJldHVybjsKKwogCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCiAJCXJldHVybjsKIAogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAorCXNjZCA9IHRoaXNfc2NkKCk7CiAJbm93X2d0b2QgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CiAJbm93ID0gc2NoZWRfY2xvY2soKTsKIApAQCAtMjUwLDcgKzI1NCw3IEBACiAJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLICovCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBjcHVfY2xvY2soaW50IGNwdSkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKaW5kZXggMTZlZWJhNGUuLjQ2N2NhNzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0yNzIsNyArMjcyLDYgQEAKIAlQKG5yX3N3aXRjaGVzKTsKIAlQKG5yX2xvYWRfdXBkYXRlcyk7CiAJUChucl91bmludGVycnVwdGlibGUpOwotCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlbHVcbiIsICJqaWZmaWVzIiwgamlmZmllcyk7CiAJUE4obmV4dF9iYWxhbmNlKTsKIAlQKGN1cnItPnBpZCk7CiAJUE4oY2xvY2spOwpAQCAtMjg3LDkgKzI4Niw2IEBACiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKICNkZWZpbmUgUChuKSBTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWRcbiIsICNuLCBycS0+bik7CiAKLQlQKHlsZF9leHBfZW1wdHkpOwotCVAoeWxkX2FjdF9lbXB0eSk7Ci0JUCh5bGRfYm90aF9lbXB0eSk7CiAJUCh5bGRfY291bnQpOwogCiAJUChzY2hlZF9zd2l0Y2gpOwpAQCAtMzE0LDcgKzMxMCw3IEBACiAJdTY0IG5vdyA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlpbnQgY3B1OwogCi0JU0VRX3ByaW50ZihtLCAiU2NoZWQgRGVidWcgVmVyc2lvbjogdjAuMDgsICVzICUuKnNcbiIsCisJU0VRX3ByaW50ZihtLCAiU2NoZWQgRGVidWcgVmVyc2lvbjogdjAuMDksICVzICUuKnNcbiIsCiAJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCiAJCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKQEAgLTMyNSw2ICszMjEsNyBAQAogCVNFUV9wcmludGYobSwgIiAgLiUtNDBzOiAlTGRcbiIsICN4LCAobG9uZyBsb25nKSh4KSkKICNkZWZpbmUgUE4oeCkgXAogCVNFUV9wcmludGYobSwgIiAgLiUtNDBzOiAlTGQuJTA2bGRcbiIsICN4LCBTUExJVF9OUyh4KSkKKwlQKGppZmZpZXMpOwogCVBOKHN5c2N0bF9zY2hlZF9sYXRlbmN5KTsKIAlQTihzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5KTsKIAlQTihzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5KTsKQEAgLTM5Nyw2ICszOTQsNyBAQAogCVBOKHNlLnZydW50aW1lKTsKIAlQTihzZS5zdW1fZXhlY19ydW50aW1lKTsKIAlQTihzZS5hdmdfb3ZlcmxhcCk7CisJUE4oc2UuYXZnX3dha2V1cCk7CiAKIAlucl9zd2l0Y2hlcyA9IHAtPm52Y3N3ICsgcC0+bml2Y3N3OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCAwNTY2ZjJhLi4zODE2ZjIxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTEzMTQsMTYgKzEzMTQsNjMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdha2V1cF9ncmFuKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQorLyoKKyAqIEFkYXB0aXZlIGdyYW51bGFyaXR5CisgKgorICogc2UtPmF2Z193YWtldXAgZ2l2ZXMgdGhlIGF2ZXJhZ2UgdGltZSBhIHRhc2sgcnVucyB1bnRpbCBpdCBkb2VzIGEgd2FrZXVwLAorICogd2l0aCB0aGUgbGltaXQgb2Ygd2FrZXVwX2dyYW4gLS0gd2hlbiBpdCBuZXZlciBkb2VzIGEgd2FrZXVwLgorICoKKyAqIFNvIHRoZSBzbWFsbGVyIGF2Z193YWtldXAgaXMgdGhlIGZhc3RlciB3ZSB3YW50IHRoaXMgdGFzayB0byBwcmVlbXB0LAorICogYnV0IHdlIGRvbid0IHdhbnQgdG8gdHJlYXQgdGhlIHByZWVtcHRlZSB1bmZhaXJseSBhbmQgdGhlcmVmb3JlIGFsbG93IGl0CisgKiB0byBydW4gZm9yIGF0IGxlYXN0IHRoZSBhbW91bnQgb2YgdGltZSB3ZSdkIGxpa2UgdG8gcnVuLgorICoKKyAqIE5PVEU6IHdlIHVzZSAyKmF2Z193YWtldXAgdG8gaW5jcmVhc2UgdGhlIHByb2JhYmlsaXR5IG9mIGFjdHVhbGx5IGRvaW5nIG9uZQorICoKKyAqIE5PVEU6IHdlIHVzZSAqbnJfcnVubmluZyB0byBzY2FsZSB3aXRoIGxvYWQsIHRoaXMgbmljZWx5IG1hdGNoZXMgdGhlCisgKiAgICAgICBkZWdyYWRpbmcgbGF0ZW5jeSBvbiBsb2FkLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZworYWRhcHRpdmVfZ3JhbihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpjdXJyLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwl1NjQgdGhpc19ydW4gPSBjdXJyLT5zdW1fZXhlY19ydW50aW1lIC0gY3Vyci0+cHJldl9zdW1fZXhlY19ydW50aW1lOworCXU2NCBleHBlY3RlZF93YWtldXAgPSAyKnNlLT5hdmdfd2FrZXVwICogY2ZzX3JxX29mKHNlKS0+bnJfcnVubmluZzsKKwl1NjQgZ3JhbiA9IDA7CisKKwlpZiAodGhpc19ydW4gPCBleHBlY3RlZF93YWtldXApCisJCWdyYW4gPSBleHBlY3RlZF93YWtldXAgLSB0aGlzX3J1bjsKKworCXJldHVybiBtaW5fdChzNjQsIGdyYW4sIHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZword2FrZXVwX2dyYW4oc3RydWN0IHNjaGVkX2VudGl0eSAqY3Vyciwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiB7CiAJdW5zaWduZWQgbG9uZyBncmFuID0gc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eTsKIAorCWlmIChjZnNfcnFfb2YoY3VyciktPmN1cnIgJiYgc2NoZWRfZmVhdChBREFQVElWRV9HUkFOKSkKKwkJZ3JhbiA9IGFkYXB0aXZlX2dyYW4oY3Vyciwgc2UpOworCiAJLyoKLQkgKiBNb3JlIGVhc2lseSBwcmVlbXB0IC0gbmljZSB0YXNrcywgd2hpbGUgbm90IG1ha2luZyBpdCBoYXJkZXIgZm9yCi0JICogKyBuaWNlIHRhc2tzLgorCSAqIFNpbmNlIGl0cyBjdXJyIHJ1bm5pbmcgbm93LCBjb252ZXJ0IHRoZSBncmFuIGZyb20gcmVhbC10aW1lCisJICogdG8gdmlydHVhbC10aW1lIGluIGhpcyB1bml0cy4KIAkgKi8KLQlpZiAoIXNjaGVkX2ZlYXQoQVNZTV9HUkFOKSB8fCBzZS0+bG9hZC53ZWlnaHQgPiBOSUNFXzBfTE9BRCkKLQkJZ3JhbiA9IGNhbGNfZGVsdGFfZmFpcihzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5LCBzZSk7CisJaWYgKHNjaGVkX2ZlYXQoQVNZTV9HUkFOKSkgeworCQkvKgorCQkgKiBCeSB1c2luZyAnc2UnIGluc3RlYWQgb2YgJ2N1cnInIHdlIHBlbmFsaXplIGxpZ2h0IHRhc2tzLCBzbworCQkgKiB0aGV5IGdldCBwcmVlbXB0ZWQgZWFzaWVyLiBUaGF0IGlzLCBpZiAnc2UnIDwgJ2N1cnInIHRoZW4KKwkJICogdGhlIHJlc3VsdGluZyBncmFuIHdpbGwgYmUgbGFyZ2VyLCB0aGVyZWZvcmUgcGVuYWxpemluZyB0aGUKKwkJICogbGlnaHRlciwgaWYgb3RvaCAnc2UnID4gJ2N1cnInIHRoZW4gdGhlIHJlc3VsdGluZyBncmFuIHdpbGwKKwkJICogYmUgc21hbGxlciwgYWdhaW4gcGVuYWxpemluZyB0aGUgbGlnaHRlciB0YXNrLgorCQkgKgorCQkgKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBidWRkaWVzIHdoZW4gdGhlIGxlZnRtb3N0CisJCSAqIHRhc2sgaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIGJ1ZGR5LgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHNlLT5sb2FkLndlaWdodCAhPSBOSUNFXzBfTE9BRCkpCisJCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKGdyYW4sIHNlKTsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoY3Vyci0+bG9hZC53ZWlnaHQgIT0gTklDRV8wX0xPQUQpKQorCQkJZ3JhbiA9IGNhbGNfZGVsdGFfZmFpcihncmFuLCBjdXJyKTsKKwl9CiAKIAlyZXR1cm4gZ3JhbjsKIH0KQEAgLTEzNTAsNyArMTM5Nyw3IEBACiAJaWYgKHZkaWZmIDw9IDApCiAJCXJldHVybiAtMTsKIAotCWdyYW4gPSB3YWtldXBfZ3JhbihjdXJyKTsKKwlncmFuID0gd2FrZXVwX2dyYW4oY3Vyciwgc2UpOwogCWlmICh2ZGlmZiA+IGdyYW4pCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaCBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCmluZGV4IGRhNWQ5M2IuLjc2ZjYxNzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCisrKyBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCkBAIC0xLDUgKzEsNiBAQAogU0NIRURfRkVBVChORVdfRkFJUl9TTEVFUEVSUywgMSkKLVNDSEVEX0ZFQVQoTk9STUFMSVpFRF9TTEVFUEVSLCAxKQorU0NIRURfRkVBVChOT1JNQUxJWkVEX1NMRUVQRVIsIDApCitTQ0hFRF9GRUFUKEFEQVBUSVZFX0dSQU4sIDEpCiBTQ0hFRF9GRUFUKFdBS0VVUF9QUkVFTVBULCAxKQogU0NIRURfRkVBVChTVEFSVF9ERUJJVCwgMSkKIFNDSEVEX0ZFQVQoQUZGSU5FX1dBS0VVUFMsIDEpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGJhYzEwNjEuLmM3OWRjNzg0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMyw2ICszLDQwIEBACiAgKiBwb2xpY2llcykKICAqLwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTsKK30KKworI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlyZXR1cm4gcnRfcnEtPnJxOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCit7CisJcmV0dXJuIHJ0X3NlLT5ydF9ycTsKK30KKworI2Vsc2UgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCXJldHVybiBjb250YWluZXJfb2YocnRfcnEsIHN0cnVjdCBycSwgcnQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcnRfdGFza19vZihydF9zZSk7CisJc3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7CisKKwlyZXR1cm4gJnJxLT5ydDsKK30KKworI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCiAjaWZkZWYgQ09ORklHX1NNUAogCiBzdGF0aWMgaW5saW5lIGludCBydF9vdmVybG9hZGVkKHN0cnVjdCBycSAqcnEpCkBAIC0zNywyNSArNzEsNjkgQEAKIAljcHVtYXNrX2NsZWFyX2NwdShycS0+Y3B1LCBycS0+cmQtPnJ0b19tYXNrKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3J0X21pZ3JhdGlvbihzdHJ1Y3QgcnEgKnJxKQorc3RhdGljIHZvaWQgdXBkYXRlX3J0X21pZ3JhdGlvbihzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotCWlmIChycS0+cnQucnRfbnJfbWlncmF0b3J5ICYmIChycS0+cnQucnRfbnJfcnVubmluZyA+IDEpKSB7Ci0JCWlmICghcnEtPnJ0Lm92ZXJsb2FkZWQpIHsKLQkJCXJ0X3NldF9vdmVybG9hZChycSk7Ci0JCQlycS0+cnQub3ZlcmxvYWRlZCA9IDE7CisJaWYgKHJ0X3JxLT5ydF9ucl9taWdyYXRvcnkgJiYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nID4gMSkpIHsKKwkJaWYgKCFydF9ycS0+b3ZlcmxvYWRlZCkgeworCQkJcnRfc2V0X292ZXJsb2FkKHJxX29mX3J0X3JxKHJ0X3JxKSk7CisJCQlydF9ycS0+b3ZlcmxvYWRlZCA9IDE7CiAJCX0KLQl9IGVsc2UgaWYgKHJxLT5ydC5vdmVybG9hZGVkKSB7Ci0JCXJ0X2NsZWFyX292ZXJsb2FkKHJxKTsKLQkJcnEtPnJ0Lm92ZXJsb2FkZWQgPSAwOworCX0gZWxzZSBpZiAocnRfcnEtPm92ZXJsb2FkZWQpIHsKKwkJcnRfY2xlYXJfb3ZlcmxvYWQocnFfb2ZfcnRfcnEocnRfcnEpKTsKKwkJcnRfcnEtPm92ZXJsb2FkZWQgPSAwOwogCX0KIH0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpydF90YXNrX29mKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQorc3RhdGljIHZvaWQgaW5jX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTsKKwlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCXJ0X3JxLT5ydF9ucl9taWdyYXRvcnkrKzsKKworCXVwZGF0ZV9ydF9taWdyYXRpb24ocnRfcnEpOwogfQogCitzdGF0aWMgdm9pZCBkZWNfcnRfbWlncmF0aW9uKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCWlmIChydF9zZS0+bnJfY3B1c19hbGxvd2VkID4gMSkKKwkJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeS0tOworCisJdXBkYXRlX3J0X21pZ3JhdGlvbihydF9ycSk7Cit9CisKK3N0YXRpYyB2b2lkIGVucXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcGxpc3RfZGVsKCZwLT5wdXNoYWJsZV90YXNrcywgJnJxLT5ydC5wdXNoYWJsZV90YXNrcyk7CisJcGxpc3Rfbm9kZV9pbml0KCZwLT5wdXNoYWJsZV90YXNrcywgcC0+cHJpbyk7CisJcGxpc3RfYWRkKCZwLT5wdXNoYWJsZV90YXNrcywgJnJxLT5ydC5wdXNoYWJsZV90YXNrcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlcXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcGxpc3RfZGVsKCZwLT5wdXNoYWJsZV90YXNrcywgJnJxLT5ydC5wdXNoYWJsZV90YXNrcyk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKK30KKworc3RhdGljIGlubGluZQordm9pZCBpbmNfcnRfbWlncmF0aW9uKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGRlY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKIHN0YXRpYyBpbmxpbmUgaW50IG9uX3J0X3JxKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQogewogCXJldHVybiAhbGlzdF9lbXB0eSgmcnRfc2UtPnJ1bl9saXN0KTsKQEAgLTc5LDE2ICsxNTcsNiBAQAogI2RlZmluZSBmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgXAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJ0X3JxLCAmcnEtPmxlYWZfcnRfcnFfbGlzdCwgbGVhZl9ydF9ycV9saXN0KQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKLXsKLQlyZXR1cm4gcnRfcnEtPnJxOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCi17Ci0JcmV0dXJuIHJ0X3NlLT5ydF9ycTsKLX0KLQogI2RlZmluZSBmb3JfZWFjaF9zY2hlZF9ydF9lbnRpdHkocnRfc2UpIFwKIAlmb3IgKDsgcnRfc2U7IHJ0X3NlID0gcnRfc2UtPnBhcmVudCkKIApAQCAtMTA4LDcgKzE3Niw3IEBACiAJaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nKSB7CiAJCWlmIChydF9zZSAmJiAhb25fcnRfcnEocnRfc2UpKQogCQkJZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UpOwotCQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpbyA8IGN1cnItPnByaW8pCisJCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPCBjdXJyLT5wcmlvKQogCQkJcmVzY2hlZF90YXNrKGN1cnIpOwogCX0KIH0KQEAgLTE3NiwxOSArMjQ0LDYgQEAKICNkZWZpbmUgZm9yX2VhY2hfbGVhZl9ydF9ycShydF9ycSwgcnEpIFwKIAlmb3IgKHJ0X3JxID0gJnJxLT5ydDsgcnRfcnE7IHJ0X3JxID0gTlVMTCkKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihydF9ycSwgc3RydWN0IHJxLCBydCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBydF90YXNrX29mKHJ0X3NlKTsKLQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKLQotCXJldHVybiAmcnEtPnJ0OwotfQotCiAjZGVmaW5lIGZvcl9lYWNoX3NjaGVkX3J0X2VudGl0eShydF9zZSkgXAogCWZvciAoOyBydF9zZTsgcnRfc2UgPSBOVUxMKQogCkBAIC00NzMsNyArNTI4LDcgQEAKIAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gZ3JvdXBfcnRfcnEocnRfc2UpOwogCiAJaWYgKHJ0X3JxKQotCQlyZXR1cm4gcnRfcnEtPmhpZ2hlc3RfcHJpbzsKKwkJcmV0dXJuIHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VycjsKICNlbmRpZgogCiAJcmV0dXJuIHJ0X3Rhc2tfb2YocnRfc2UpLT5wcmlvOwpAQCAtNTQ3LDkxICs2MDIsMTc0IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lCi12b2lkIGluY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKKyNpZiBkZWZpbmVkIENPTkZJR19TTVAKKworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChzdHJ1Y3QgcnEgKnJxLCBpbnQgY3B1KTsKKworc3RhdGljIGlubGluZSBpbnQgbmV4dF9wcmlvKHN0cnVjdCBycSAqcnEpCiB7Ci0JV0FSTl9PTighcnRfcHJpbyhydF9zZV9wcmlvKHJ0X3NlKSkpOwotCXJ0X3JxLT5ydF9ucl9ydW5uaW5nKys7Ci0jaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaWYgKHJ0X3NlX3ByaW8ocnRfc2UpIDwgcnRfcnEtPmhpZ2hlc3RfcHJpbykgewotI2lmZGVmIENPTkZJR19TTVAKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKLSNlbmRpZgorCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCA9IHBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQocnEsIHJxLT5jcHUpOwogCi0JCXJ0X3JxLT5oaWdoZXN0X3ByaW8gPSBydF9zZV9wcmlvKHJ0X3NlKTsKLSNpZmRlZiBDT05GSUdfU01QCisJaWYgKG5leHQgJiYgcnRfcHJpbyhuZXh0LT5wcmlvKSkKKwkJcmV0dXJuIG5leHQtPnByaW87CisJZWxzZQorCQlyZXR1cm4gTUFYX1JUX1BSSU87Cit9CisKK3N0YXRpYyB2b2lkCitpbmNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pCit7CisJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKworCWlmIChwcmlvIDwgcHJldl9wcmlvKSB7CisKKwkJLyoKKwkJICogSWYgdGhlIG5ldyB0YXNrIGlzIGhpZ2hlciBpbiBwcmlvcml0eSB0aGFuIGFueXRoaW5nIG9uIHRoZQorCQkgKiBydW4tcXVldWUsIHdlIGtub3cgdGhhdCB0aGUgcHJldmlvdXMgaGlnaCBiZWNvbWVzIG91cgorCQkgKiBuZXh0LWhpZ2hlc3QuCisJCSAqLworCQlydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQgPSBwcmV2X3ByaW87CisKIAkJaWYgKHJxLT5vbmxpbmUpCi0JCQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwKLQkJCQkgICBydF9zZV9wcmlvKHJ0X3NlKSk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKSB7Ci0JCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7CisJCQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcHJpbyk7CiAKLQkJcnEtPnJ0LnJ0X25yX21pZ3JhdG9yeSsrOwotCX0KKwl9IGVsc2UgaWYgKHByaW8gPT0gcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyKQorCQkvKgorCQkgKiBJZiB0aGUgbmV4dCB0YXNrIGlzIGVxdWFsIGluIHByaW9yaXR5IHRvIHRoZSBoaWdoZXN0IG9uCisJCSAqIHRoZSBydW4tcXVldWUsIHRoZW4gd2UgaW1wbGljaXRseSBrbm93IHRoYXQgdGhlIG5leHQgaGlnaGVzdAorCQkgKiB0YXNrIGNhbm5vdCBiZSBhbnkgbG93ZXIgdGhhbiBjdXJyZW50CisJCSAqLworCQlydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQgPSBwcmlvOworCWVsc2UgaWYgKHByaW8gPCBydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQpCisJCS8qCisJCSAqIE90aGVyd2lzZSwgd2UgbmVlZCB0byByZWNvbXB1dGUgbmV4dC1oaWdoZXN0CisJCSAqLworCQlydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQgPSBuZXh0X3ByaW8ocnEpOworfQogCi0JdXBkYXRlX3J0X21pZ3JhdGlvbihycV9vZl9ydF9ycShydF9ycSkpOwotI2VuZGlmCitzdGF0aWMgdm9pZAorZGVjX3J0X3ByaW9fc21wKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvLCBpbnQgcHJldl9wcmlvKQoreworCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7CisKKwlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcgJiYgKHByaW8gPD0gcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0KSkKKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gbmV4dF9wcmlvKHJxKTsKKworCWlmIChycS0+b25saW5lICYmIHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciAhPSBwcmV2X3ByaW8pCisJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIpOworfQorCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgaW5jX3J0X3ByaW9fc21wKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvLCBpbnQgcHJldl9wcmlvKSB7fQorc3RhdGljIGlubGluZQordm9pZCBkZWNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pIHt9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKK3N0YXRpYyB2b2lkCitpbmNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbykKK3sKKwlpbnQgcHJldl9wcmlvID0gcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyOworCisJaWYgKHByaW8gPCBwcmV2X3ByaW8pCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA9IHByaW87CisKKwlpbmNfcnRfcHJpb19zbXAocnRfcnEsIHByaW8sIHByZXZfcHJpbyk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbykKK3sKKwlpbnQgcHJldl9wcmlvID0gcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyOworCisJaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nKSB7CisKKwkJV0FSTl9PTihwcmlvIDwgcHJldl9wcmlvKTsKKworCQkvKgorCQkgKiBUaGlzIG1heSBoYXZlIGJlZW4gb3VyIGhpZ2hlc3QgdGFzaywgYW5kIHRoZXJlZm9yZQorCQkgKiB3ZSBtYXkgaGF2ZSBzb21lIHJlY29tcHV0YXRpb24gdG8gZG8KKwkJICovCisJCWlmIChwcmlvID09IHByZXZfcHJpbykgeworCQkJc3RydWN0IHJ0X3ByaW9fYXJyYXkgKmFycmF5ID0gJnJ0X3JxLT5hY3RpdmU7CisKKwkJCXJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA9CisJCQkJc2NoZWRfZmluZF9maXJzdF9iaXQoYXJyYXktPmJpdG1hcCk7CisJCX0KKworCX0gZWxzZQorCQlydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPSBNQVhfUlRfUFJJTzsKKworCWRlY19ydF9wcmlvX3NtcChydF9ycSwgcHJpbywgcHJldl9wcmlvKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGluY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRlY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1NNUCB8fCBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKwogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorCitzdGF0aWMgdm9pZAoraW5jX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQorewogCWlmIChydF9zZV9ib29zdGVkKHJ0X3NlKSkKIAkJcnRfcnEtPnJ0X25yX2Jvb3N0ZWQrKzsKIAogCWlmIChydF9ycS0+dGcpCiAJCXN0YXJ0X3J0X2JhbmR3aWR0aCgmcnRfcnEtPnRnLT5ydF9iYW5kd2lkdGgpOwotI2Vsc2UKK30KKworc3RhdGljIHZvaWQKK2RlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCisJCXJ0X3JxLT5ydF9ucl9ib29zdGVkLS07CisKKwlXQVJOX09OKCFydF9ycS0+cnRfbnJfcnVubmluZyAmJiBydF9ycS0+cnRfbnJfYm9vc3RlZCk7Cit9CisKKyNlbHNlIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCitzdGF0aWMgdm9pZAoraW5jX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQorewogCXN0YXJ0X3J0X2JhbmR3aWR0aCgmZGVmX3J0X2JhbmR3aWR0aCk7Ci0jZW5kaWYKK30KKworc3RhdGljIGlubGluZQordm9pZCBkZWNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpIHt9CisKKyNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKworc3RhdGljIGlubGluZQordm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJaW50IHByaW8gPSBydF9zZV9wcmlvKHJ0X3NlKTsKKworCVdBUk5fT04oIXJ0X3ByaW8ocHJpbykpOworCXJ0X3JxLT5ydF9ucl9ydW5uaW5nKys7CisKKwlpbmNfcnRfcHJpbyhydF9ycSwgcHJpbyk7CisJaW5jX3J0X21pZ3JhdGlvbihydF9zZSwgcnRfcnEpOworCWluY19ydF9ncm91cChydF9zZSwgcnRfcnEpOwogfQogCiBzdGF0aWMgaW5saW5lCiB2b2lkIGRlY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLSNpZmRlZiBDT05GSUdfU01QCi0JaW50IGhpZ2hlc3RfcHJpbyA9IHJ0X3JxLT5oaWdoZXN0X3ByaW87Ci0jZW5kaWYKLQogCVdBUk5fT04oIXJ0X3ByaW8ocnRfc2VfcHJpbyhydF9zZSkpKTsKIAlXQVJOX09OKCFydF9ycS0+cnRfbnJfcnVubmluZyk7CiAJcnRfcnEtPnJ0X25yX3J1bm5pbmctLTsKLSNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKLQkJc3RydWN0IHJ0X3ByaW9fYXJyYXkgKmFycmF5OwogCi0JCVdBUk5fT04ocnRfc2VfcHJpbyhydF9zZSkgPCBydF9ycS0+aGlnaGVzdF9wcmlvKTsKLQkJaWYgKHJ0X3NlX3ByaW8ocnRfc2UpID09IHJ0X3JxLT5oaWdoZXN0X3ByaW8pIHsKLQkJCS8qIHJlY2FsY3VsYXRlICovCi0JCQlhcnJheSA9ICZydF9ycS0+YWN0aXZlOwotCQkJcnRfcnEtPmhpZ2hlc3RfcHJpbyA9Ci0JCQkJc2NoZWRfZmluZF9maXJzdF9iaXQoYXJyYXktPmJpdG1hcCk7Ci0JCX0gLyogb3RoZXJ3aXNlIGxlYXZlIHJxLT5oaWdoZXN0IHByaW8gYWxvbmUgKi8KLQl9IGVsc2UKLQkJcnRfcnEtPmhpZ2hlc3RfcHJpbyA9IE1BWF9SVF9QUklPOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChydF9zZS0+bnJfY3B1c19hbGxvd2VkID4gMSkgewotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOwotCQlycS0+cnQucnRfbnJfbWlncmF0b3J5LS07Ci0JfQotCi0JaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8gIT0gaGlnaGVzdF9wcmlvKSB7Ci0JCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7Ci0KLQkJaWYgKHJxLT5vbmxpbmUpCi0JCQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwKLQkJCQkgICBydF9ycS0+aGlnaGVzdF9wcmlvKTsKLQl9Ci0KLQl1cGRhdGVfcnRfbWlncmF0aW9uKHJxX29mX3J0X3JxKHJ0X3JxKSk7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWlmIChydF9zZV9ib29zdGVkKHJ0X3NlKSkKLQkJcnRfcnEtPnJ0X25yX2Jvb3N0ZWQtLTsKLQotCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nICYmIHJ0X3JxLT5ydF9ucl9ib29zdGVkKTsKLSNlbmRpZgorCWRlY19ydF9wcmlvKHJ0X3JxLCBydF9zZV9wcmlvKHJ0X3NlKSk7CisJZGVjX3J0X21pZ3JhdGlvbihydF9zZSwgcnRfcnEpOworCWRlY19ydF9ncm91cChydF9zZSwgcnRfcnEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2VucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQpAQCAtNzE4LDYgKzg1Niw5IEBACiAKIAllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7CiAKKwlpZiAoIXRhc2tfY3VycmVudChycSwgcCkgJiYgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKKwkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKwogCWluY19jcHVfbG9hZChycSwgcC0+c2UubG9hZC53ZWlnaHQpOwogfQogCkBAIC03MjgsNiArODY5LDggQEAKIAl1cGRhdGVfY3Vycl9ydChycSk7CiAJZGVxdWV1ZV9ydF9lbnRpdHkocnRfc2UpOwogCisJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKwogCWRlY19jcHVfbG9hZChycSwgcC0+c2UubG9hZC53ZWlnaHQpOwogfQogCkBAIC04NzgsNyArMTAyMSw3IEBACiAJcmV0dXJuIG5leHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF90YXNrX3J0KHN0cnVjdCBycSAqcnEpCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpfcGlja19uZXh0X3Rhc2tfcnQoc3RydWN0IHJxICpycSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC05MDAsNiArMTA0MywxOCBAQAogCiAJcCA9IHJ0X3Rhc2tfb2YocnRfc2UpOwogCXAtPnNlLmV4ZWNfc3RhcnQgPSBycS0+Y2xvY2s7CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3Rhc2tfcnQoc3RydWN0IHJxICpycSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBfcGlja19uZXh0X3Rhc2tfcnQocnEpOworCisJLyogVGhlIHJ1bm5pbmcgdGFzayBpcyBuZXZlciBlbGlnaWJsZSBmb3IgcHVzaGluZyAqLworCWlmIChwKQorCQlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCiAJcmV0dXJuIHA7CiB9CiAKQEAgLTkwNyw2ICsxMDYyLDEzIEBACiB7CiAJdXBkYXRlX2N1cnJfcnQocnEpOwogCXAtPnNlLmV4ZWNfc3RhcnQgPSAwOworCisJLyoKKwkgKiBUaGUgcHJldmlvdXMgdGFzayBuZWVkcyB0byBiZSBtYWRlIGVsaWdpYmxlIGZvciBwdXNoaW5nCisJICogaWYgaXQgaXMgc3RpbGwgYWN0aXZlCisJICovCisJaWYgKHAtPnNlLm9uX3JxICYmIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMDcyLDcgKzEyMzQsNyBAQAogCQl9CiAKIAkJLyogSWYgdGhpcyBycSBpcyBzdGlsbCBzdWl0YWJsZSB1c2UgaXQuICovCi0JCWlmIChsb3dlc3RfcnEtPnJ0LmhpZ2hlc3RfcHJpbyA+IHRhc2stPnByaW8pCisJCWlmIChsb3dlc3RfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyID4gdGFzay0+cHJpbykKIAkJCWJyZWFrOwogCiAJCS8qIHRyeSBhZ2FpbiAqLwpAQCAtMTA4Myw2ICsxMjQ1LDMxIEBACiAJcmV0dXJuIGxvd2VzdF9ycTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaGFzX3B1c2hhYmxlX3Rhc2tzKHN0cnVjdCBycSAqcnEpCit7CisJcmV0dXJuICFwbGlzdF9oZWFkX2VtcHR5KCZycS0+cnQucHVzaGFibGVfdGFza3MpOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKworCWlmICghaGFzX3B1c2hhYmxlX3Rhc2tzKHJxKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwID0gcGxpc3RfZmlyc3RfZW50cnkoJnJxLT5ydC5wdXNoYWJsZV90YXNrcywKKwkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgcHVzaGFibGVfdGFza3MpOworCisJQlVHX09OKHJxLT5jcHUgIT0gdGFza19jcHUocCkpOworCUJVR19PTih0YXNrX2N1cnJlbnQocnEsIHApKTsKKwlCVUdfT04ocC0+cnQubnJfY3B1c19hbGxvd2VkIDw9IDEpOworCisJQlVHX09OKCFwLT5zZS5vbl9ycSk7CisJQlVHX09OKCFydF90YXNrKHApKTsKKworCXJldHVybiBwOworfQorCiAvKgogICogSWYgdGhlIGN1cnJlbnQgQ1BVIGhhcyBtb3JlIHRoYW4gb25lIFJUIHRhc2ssIHNlZSBpZiB0aGUgbm9uCiAgKiBydW5uaW5nIHRhc2sgY2FuIG1pZ3JhdGUgb3ZlciB0byBhIENQVSB0aGF0IGlzIHJ1bm5pbmcgYSB0YXNrCkBAIC0xMDkyLDEzICsxMjc5LDExIEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3Rhc2s7CiAJc3RydWN0IHJxICpsb3dlc3RfcnE7Ci0JaW50IHJldCA9IDA7Ci0JaW50IHBhcmFub2lkID0gUlRfTUFYX1RSSUVTOwogCiAJaWYgKCFycS0+cnQub3ZlcmxvYWRlZCkKIAkJcmV0dXJuIDA7CiAKLQluZXh0X3Rhc2sgPSBwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHJxLCAtMSk7CisJbmV4dF90YXNrID0gcGlja19uZXh0X3B1c2hhYmxlX3Rhc2socnEpOwogCWlmICghbmV4dF90YXNrKQogCQlyZXR1cm4gMDsKIApAQCAtMTEyNywxNiArMTMxMiwzNCBAQAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJCS8qCiAJCSAqIGZpbmQgbG9ja19sb3dlc3RfcnEgcmVsZWFzZXMgcnEtPmxvY2sKLQkJICogc28gaXQgaXMgcG9zc2libGUgdGhhdCBuZXh0X3Rhc2sgaGFzIGNoYW5nZWQuCi0JCSAqIElmIGl0IGhhcywgdGhlbiB0cnkgYWdhaW4uCisJCSAqIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgbmV4dF90YXNrIGhhcyBtaWdyYXRlZC4KKwkJICoKKwkJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdGFzayBpcyBzdGlsbCBvbiB0aGUgc2FtZQorCQkgKiBydW4tcXVldWUgYW5kIGlzIGFsc28gc3RpbGwgdGhlIG5leHQgdGFzayBlbGlnaWJsZSBmb3IKKwkJICogcHVzaGluZy4KIAkJICovCi0JCXRhc2sgPSBwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHJxLCAtMSk7Ci0JCWlmICh1bmxpa2VseSh0YXNrICE9IG5leHRfdGFzaykgJiYgdGFzayAmJiBwYXJhbm9pZC0tKSB7Ci0JCQlwdXRfdGFza19zdHJ1Y3QobmV4dF90YXNrKTsKLQkJCW5leHRfdGFzayA9IHRhc2s7Ci0JCQlnb3RvIHJldHJ5OworCQl0YXNrID0gcGlja19uZXh0X3B1c2hhYmxlX3Rhc2socnEpOworCQlpZiAodGFza19jcHUobmV4dF90YXNrKSA9PSBycS0+Y3B1ICYmIHRhc2sgPT0gbmV4dF90YXNrKSB7CisJCQkvKgorCQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZSB0YXNrIGhhc250IG1vdmVkIGF0IGFsbCwgYnV0CisJCQkgKiBpdCBoYXMgZmFpbGVkIHRvIHB1c2guICBXZSB3aWxsIG5vdCB0cnkgYWdhaW4sCisJCQkgKiBzaW5jZSB0aGUgb3RoZXIgY3B1cyB3aWxsIHB1bGwgZnJvbSB1cyB3aGVuIHRoZXkKKwkJCSAqIGFyZSByZWFkeS4KKwkJCSAqLworCQkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBuZXh0X3Rhc2spOworCQkJZ290byBvdXQ7CiAJCX0KLQkJZ290byBvdXQ7CisKKwkJaWYgKCF0YXNrKQorCQkJLyogTm8gbW9yZSB0YXNrcywganVzdCBleGl0ICovCisJCQlnb3RvIG91dDsKKworCQkvKgorCQkgKiBTb21ldGhpbmcgaGFzIHNoaWZ0ZWQsIHRyeSBhZ2Fpbi4KKwkJICovCisJCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOworCQluZXh0X3Rhc2sgPSB0YXNrOworCQlnb3RvIHJldHJ5OwogCX0KIAogCWRlYWN0aXZhdGVfdGFzayhycSwgbmV4dF90YXNrLCAwKTsKQEAgLTExNDcsMjMgKzEzNTAsMTIgQEAKIAogCWRvdWJsZV91bmxvY2tfYmFsYW5jZShycSwgbG93ZXN0X3JxKTsKIAotCXJldCA9IDE7CiBvdXQ6CiAJcHV0X3Rhc2tfc3RydWN0KG5leHRfdGFzayk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAxOwogfQogCi0vKgotICogVE9ETzogQ3VycmVudGx5IHdlIGp1c3QgdXNlIHRoZSBzZWNvbmQgaGlnaGVzdCBwcmlvIHRhc2sgb24KLSAqICAgICAgIHRoZSBxdWV1ZSwgYW5kIHN0b3Agd2hlbiBpdCBjYW4ndCBtaWdyYXRlIChvciB0aGVyZSdzCi0gKiAgICAgICBubyBtb3JlIFJUIHRhc2tzKS4gIFRoZXJlIG1heSBiZSBhIGNhc2Ugd2hlcmUgYSBsb3dlcgotICogICAgICAgcHJpb3JpdHkgUlQgdGFzayBoYXMgYSBkaWZmZXJlbnQgYWZmaW5pdHkgdGhhbiB0aGUKLSAqICAgICAgIGhpZ2hlciBSVCB0YXNrLiBJbiB0aGlzIGNhc2UgdGhlIGxvd2VyIFJUIHRhc2sgY291bGQKLSAqICAgICAgIHBvc3NpYmx5IGJlIGFibGUgdG8gbWlncmF0ZSB3aGVyZSBhcyB0aGUgaGlnaGVyIHByaW9yaXR5Ci0gKiAgICAgICBSVCB0YXNrIGNvdWxkIG5vdC4gIFdlIGN1cnJlbnRseSBpZ25vcmUgdGhpcyBpc3N1ZS4KLSAqICAgICAgIEVuaGFuY2VtZW50cyBhcmUgd2VsY29tZSEKLSAqLwogc3RhdGljIHZvaWQgcHVzaF9ydF90YXNrcyhzdHJ1Y3QgcnEgKnJxKQogewogCS8qIHB1c2hfcnRfdGFzayB3aWxsIHJldHVybiB0cnVlIGlmIGl0IG1vdmVkIGFuIFJUICovCkBAIC0xMTc0LDMzICsxMzY2LDM1IEBACiBzdGF0aWMgaW50IHB1bGxfcnRfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEpCiB7CiAJaW50IHRoaXNfY3B1ID0gdGhpc19ycS0+Y3B1LCByZXQgPSAwLCBjcHU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbmV4dDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJc3RydWN0IHJxICpzcmNfcnE7CiAKIAlpZiAobGlrZWx5KCFydF9vdmVybG9hZGVkKHRoaXNfcnEpKSkKIAkJcmV0dXJuIDA7CiAKLQluZXh0ID0gcGlja19uZXh0X3Rhc2tfcnQodGhpc19ycSk7Ci0KIAlmb3JfZWFjaF9jcHUoY3B1LCB0aGlzX3JxLT5yZC0+cnRvX21hc2spIHsKIAkJaWYgKHRoaXNfY3B1ID09IGNwdSkKIAkJCWNvbnRpbnVlOwogCiAJCXNyY19ycSA9IGNwdV9ycShjcHUpOworCisJCS8qCisJCSAqIERvbid0IGJvdGhlciB0YWtpbmcgdGhlIHNyY19ycS0+bG9jayBpZiB0aGUgbmV4dCBoaWdoZXN0CisJCSAqIHRhc2sgaXMga25vd24gdG8gYmUgbG93ZXItcHJpb3JpdHkgdGhhbiBvdXIgY3VycmVudCB0YXNrLgorCQkgKiBUaGlzIG1heSBsb29rIHJhY3ksIGJ1dCBpZiB0aGlzIHZhbHVlIGlzIGFib3V0IHRvIGdvCisJCSAqIGxvZ2ljYWxseSBoaWdoZXIsIHRoZSBzcmNfcnEgd2lsbCBwdXNoIHRoaXMgdGFzayBhd2F5LgorCQkgKiBBbmQgaWYgaXRzIGdvaW5nIGxvZ2ljYWxseSBsb3dlciwgd2UgZG8gbm90IGNhcmUKKwkJICovCisJCWlmIChzcmNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5uZXh0ID49CisJCSAgICB0aGlzX3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VycikKKwkJCWNvbnRpbnVlOworCiAJCS8qCiAJCSAqIFdlIGNhbiBwb3RlbnRpYWxseSBkcm9wIHRoaXNfcnEncyBsb2NrIGluCiAJCSAqIGRvdWJsZV9sb2NrX2JhbGFuY2UsIGFuZCBhbm90aGVyIENQVSBjb3VsZAotCQkgKiBzdGVhbCBvdXIgbmV4dCB0YXNrIC0gaGVuY2Ugd2UgbXVzdCBjYXVzZQotCQkgKiB0aGUgY2FsbGVyIHRvIHJlY2FsY3VsYXRlIHRoZSBuZXh0IHRhc2sKLQkJICogaW4gdGhhdCBjYXNlOgorCQkgKiBhbHRlciB0aGlzX3JxCiAJCSAqLwotCQlpZiAoZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBzcmNfcnEpKSB7Ci0JCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZF9uZXh0ID0gbmV4dDsKLQotCQkJbmV4dCA9IHBpY2tfbmV4dF90YXNrX3J0KHRoaXNfcnEpOwotCQkJaWYgKG5leHQgIT0gb2xkX25leHQpCi0JCQkJcmV0ID0gMTsKLQkJfQorCQlkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIHNyY19ycSk7CiAKIAkJLyoKIAkJICogQXJlIHRoZXJlIHN0aWxsIHB1bGxhYmxlIFJUIHRhc2tzPwpAQCAtMTIxNCw3ICsxNDA4LDcgQEAKIAkJICogRG8gd2UgaGF2ZSBhbiBSVCB0YXNrIHRoYXQgcHJlZW1wdHMKIAkJICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrPwogCQkgKi8KLQkJaWYgKHAgJiYgKCFuZXh0IHx8IChwLT5wcmlvIDwgbmV4dC0+cHJpbykpKSB7CisJCWlmIChwICYmIChwLT5wcmlvIDwgdGhpc19ycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIpKSB7CiAJCQlXQVJOX09OKHAgPT0gc3JjX3JxLT5jdXJyKTsKIAkJCVdBUk5fT04oIXAtPnNlLm9uX3JxKTsKIApAQCAtMTIyNCwxMiArMTQxOCw5IEBACiAJCQkgKiBUaGlzIGlzIGp1c3QgdGhhdCBwIGlzIHdha2VpbmcgdXAgYW5kIGhhc24ndAogCQkJICogaGFkIGEgY2hhbmNlIHRvIHNjaGVkdWxlLiBXZSBvbmx5IHB1bGwKIAkJCSAqIHAgaWYgaXQgaXMgbG93ZXIgaW4gcHJpb3JpdHkgdGhhbiB0aGUKLQkJCSAqIGN1cnJlbnQgdGFzayBvbiB0aGUgcnVuIHF1ZXVlIG9yCi0JCQkgKiB0aGlzX3JxIG5leHQgdGFzayBpcyBsb3dlciBpbiBwcmlvIHRoYW4KLQkJCSAqIHRoZSBjdXJyZW50IHRhc2sgb24gdGhhdCBycS4KKwkJCSAqIGN1cnJlbnQgdGFzayBvbiB0aGUgcnVuIHF1ZXVlCiAJCQkgKi8KLQkJCWlmIChwLT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvIHx8Ci0JCQkgICAgKG5leHQgJiYgbmV4dC0+cHJpbyA8IHNyY19ycS0+Y3Vyci0+cHJpbykpCisJCQlpZiAocC0+cHJpbyA8IHNyY19ycS0+Y3Vyci0+cHJpbykKIAkJCQlnb3RvIHNraXA7CiAKIAkJCXJldCA9IDE7CkBAIC0xMjQyLDEzICsxNDMzLDcgQEAKIAkJCSAqIGNhc2UgdGhlcmUncyBhbiBldmVuIGhpZ2hlciBwcmlvIHRhc2sKIAkJCSAqIGluIGFub3RoZXIgcnVucXVldWUuIChsb3cgbGlrZWx5aG9vZAogCQkJICogYnV0IHBvc3NpYmxlKQotCQkJICoKLQkJCSAqIFVwZGF0ZSBuZXh0IHNvIHRoYXQgd2Ugd29uJ3QgcGljayBhIHRhc2sKLQkJCSAqIG9uIGFub3RoZXIgY3B1IHdpdGggYSBwcmlvcml0eSBsb3dlciAob3IgZXF1YWwpCi0JCQkgKiB0aGFuIHRoZSBvbmUgd2UganVzdCBwaWNrZWQuCiAJCQkgKi8KLQkJCW5leHQgPSBwOwotCiAJCX0KICBza2lwOgogCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgc3JjX3JxKTsKQEAgLTEyNjAsMjQgKzE0NDUsMjcgQEAKIHN0YXRpYyB2b2lkIHByZV9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCiB7CiAJLyogVHJ5IHRvIHB1bGwgUlQgdGFza3MgaGVyZSBpZiB3ZSBsb3dlciB0aGlzIHJxJ3MgcHJpbyAqLwotCWlmICh1bmxpa2VseShydF90YXNrKHByZXYpKSAmJiBycS0+cnQuaGlnaGVzdF9wcmlvID4gcHJldi0+cHJpbykKKwlpZiAodW5saWtlbHkocnRfdGFzayhwcmV2KSkgJiYgcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyID4gcHJldi0+cHJpbykKIAkJcHVsbF9ydF90YXNrKHJxKTsKIH0KIAorLyoKKyAqIGFzc3VtZXMgcnEtPmxvY2sgaXMgaGVsZAorICovCitzdGF0aWMgaW50IG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQoc3RydWN0IHJxICpycSkKK3sKKwlyZXR1cm4gaGFzX3B1c2hhYmxlX3Rhc2tzKHJxKTsKK30KKwogc3RhdGljIHZvaWQgcG9zdF9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxKQogewogCS8qCi0JICogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHJ0X3Rhc2sgcXVldWVkLCB0aGVuCi0JICogc2VlIGlmIHdlIGNhbiBwdXNoIHRoZSBvdGhlciBydF90YXNrcyBvZmYgdG8gb3RoZXIgQ1BVUy4KLQkgKiBOb3RlIHdlIG1heSByZWxlYXNlIHRoZSBycSBsb2NrLCBhbmQgc2luY2UKLQkgKiB0aGUgbG9jayB3YXMgb3duZWQgYnkgcHJldiwgd2UgbmVlZCB0byByZWxlYXNlIGl0Ci0JICogZmlyc3QgdmlhIGZpbmlzaF9sb2NrX3N3aXRjaCBhbmQgdGhlbiByZWFxdWlyZSBpdCBoZXJlLgorCSAqIFRoaXMgaXMgb25seSBjYWxsZWQgaWYgbmVlZHNfcG9zdF9zY2hlZHVsZV9ydCgpIGluZGljYXRlcyB0aGF0CisJICogd2UgbmVlZCB0byBwdXNoIHRhc2tzIGF3YXkKIAkgKi8KLQlpZiAodW5saWtlbHkocnEtPnJ0Lm92ZXJsb2FkZWQpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKLQkJcHVzaF9ydF90YXNrcyhycSk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwotCX0KKwlzcGluX2xvY2tfaXJxKCZycS0+bG9jayk7CisJcHVzaF9ydF90YXNrcyhycSk7CisJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiB9CiAKIC8qCkBAIC0xMjg4LDcgKzE0NzYsOCBAQAogewogCWlmICghdGFza19ydW5uaW5nKHJxLCBwKSAmJgogCSAgICAhdGVzdF90c2tfbmVlZF9yZXNjaGVkKHJxLT5jdXJyKSAmJgotCSAgICBycS0+cnQub3ZlcmxvYWRlZCkKKwkgICAgaGFzX3B1c2hhYmxlX3Rhc2tzKHJxKSAmJgorCSAgICBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQogCQlwdXNoX3J0X3Rhc2tzKHJxKTsKIH0KIApAQCAtMTMyNCw2ICsxNTEzLDI0IEBACiAJaWYgKHAtPnNlLm9uX3JxICYmICh3ZWlnaHQgIT0gcC0+cnQubnJfY3B1c19hbGxvd2VkKSkgewogCQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKIAorCQlpZiAoIXRhc2tfY3VycmVudChycSwgcCkpIHsKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgd2UgZGVxdWV1ZSB0aGlzIHRhc2sgZnJvbSB0aGUgcHVzaGFibGUgbGlzdAorCQkJICogYmVmb3JlIGdvaW5nIGZ1cnRoZXIuICBJdCB3aWxsIGVpdGhlciByZW1haW4gb2ZmIG9mCisJCQkgKiB0aGUgbGlzdCBiZWNhdXNlIHdlIGFyZSBubyBsb25nZXIgcHVzaGFibGUsIG9yIGl0CisJCQkgKiB3aWxsIGJlIHJlcXVldWVkLgorCQkJICovCisJCQlpZiAocC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKKwkJCQlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCisJCQkvKgorCQkJICogUmVxdWV1ZSBpZiBvdXIgd2VpZ2h0IGlzIGNoYW5naW5nIGFuZCBzdGlsbCA+IDEKKwkJCSAqLworCQkJaWYgKHdlaWdodCA+IDEpCisJCQkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKworCQl9CisKIAkJaWYgKChwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPD0gMSkgJiYgKHdlaWdodCA+IDEpKSB7CiAJCQlycS0+cnQucnRfbnJfbWlncmF0b3J5Kys7CiAJCX0gZWxzZSBpZiAoKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpICYmICh3ZWlnaHQgPD0gMSkpIHsKQEAgLTEzMzEsNyArMTUzOCw3IEBACiAJCQlycS0+cnQucnRfbnJfbWlncmF0b3J5LS07CiAJCX0KIAotCQl1cGRhdGVfcnRfbWlncmF0aW9uKHJxKTsKKwkJdXBkYXRlX3J0X21pZ3JhdGlvbigmcnEtPnJ0KTsKIAl9CiAKIAljcHVtYXNrX2NvcHkoJnAtPmNwdXNfYWxsb3dlZCwgbmV3X21hc2spOwpAQCAtMTM0Niw3ICsxNTUzLDcgQEAKIAogCV9fZW5hYmxlX3J1bnRpbWUocnEpOwogCi0JY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJxLT5ydC5oaWdoZXN0X3ByaW8pOworCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIpOwogfQogCiAvKiBBc3N1bWVzIHJxLT5sb2NrIGlzIGhlbGQgKi8KQEAgLTE0MzgsNyArMTY0NSw3IEBACiAJCSAqIGNhbiByZWxlYXNlIHRoZSBycSBsb2NrIGFuZCBwIGNvdWxkIG1pZ3JhdGUuCiAJCSAqIE9ubHkgcmVzY2hlZHVsZSBpZiBwIGlzIHN0aWxsIG9uIHRoZSBzYW1lIHJ1bnF1ZXVlLgogCQkgKi8KLQkJaWYgKHAtPnByaW8gPiBycS0+cnQuaGlnaGVzdF9wcmlvICYmIHJxLT5jdXJyID09IHApCisJCWlmIChwLT5wcmlvID4gcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyICYmIHJxLT5jdXJyID09IHApCiAJCQlyZXNjaGVkX3Rhc2socCk7CiAjZWxzZQogCQkvKiBGb3IgVVAgc2ltcGx5IHJlc2NoZWQgb24gZHJvcCBvZiBwcmlvICovCkBAIC0xNTA5LDYgKzE3MTYsOSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJxLT5jdXJyOwogCiAJcC0+c2UuZXhlY19zdGFydCA9IHJxLT5jbG9jazsKKworCS8qIFRoZSBydW5uaW5nIHRhc2sgaXMgbmV2ZXIgZWxpZ2libGUgZm9yIHB1c2hpbmcgKi8KKwlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzIHJ0X3NjaGVkX2NsYXNzID0gewpAQCAtMTUzMSw2ICsxNzQxLDcgQEAKIAkucnFfb25saW5lICAgICAgICAgICAgICA9IHJxX29ubGluZV9ydCwKIAkucnFfb2ZmbGluZSAgICAgICAgICAgICA9IHJxX29mZmxpbmVfcnQsCiAJLnByZV9zY2hlZHVsZQkJPSBwcmVfc2NoZWR1bGVfcnQsCisJLm5lZWRzX3Bvc3Rfc2NoZWR1bGUJPSBuZWVkc19wb3N0X3NjaGVkdWxlX3J0LAogCS5wb3N0X3NjaGVkdWxlCQk9IHBvc3Rfc2NoZWR1bGVfcnQsCiAJLnRhc2tfd2FrZV91cAkJPSB0YXNrX3dha2VfdXBfcnQsCiAJLnN3aXRjaGVkX2Zyb20JCT0gc3dpdGNoZWRfZnJvbV9ydCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKaW5kZXggYThmOTNkZC4uMzJkMmJkNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3N0YXRzLmgKKysrIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKQEAgLTQsNyArNCw3IEBACiAgKiBidW1wIHRoaXMgdXAgd2hlbiBjaGFuZ2luZyB0aGUgb3V0cHV0IGZvcm1hdCBvciB0aGUgbWVhbmluZyBvZiBhbiBleGlzdGluZwogICogZm9ybWF0LCBzbyB0aGF0IHRvb2xzIGNhbiBhZGFwdCAob3IgYWJvcnQpCiAgKi8KLSNkZWZpbmUgU0NIRURTVEFUX1ZFUlNJT04gMTQKKyNkZWZpbmUgU0NIRURTVEFUX1ZFUlNJT04gMTUKIAogc3RhdGljIGludCBzaG93X3NjaGVkc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKQEAgLTI2LDkgKzI2LDggQEAKIAogCQkvKiBydW5xdWV1ZS1zcGVjaWZpYyBzdGF0cyAqLwogCQlzZXFfcHJpbnRmKHNlcSwKLQkJICAgICJjcHUlZCAldSAldSAldSAldSAldSAldSAldSAldSAldSAlbGx1ICVsbHUgJWx1IiwKLQkJICAgIGNwdSwgcnEtPnlsZF9ib3RoX2VtcHR5LAotCQkgICAgcnEtPnlsZF9hY3RfZW1wdHksIHJxLT55bGRfZXhwX2VtcHR5LCBycS0+eWxkX2NvdW50LAorCQkgICAgImNwdSVkICV1ICV1ICV1ICV1ICV1ICV1ICVsbHUgJWxsdSAlbHUiLAorCQkgICAgY3B1LCBycS0+eWxkX2NvdW50LAogCQkgICAgcnEtPnNjaGVkX3N3aXRjaCwgcnEtPnNjaGVkX2NvdW50LCBycS0+c2NoZWRfZ29pZGxlLAogCQkgICAgcnEtPnR0d3VfY291bnQsIHJxLT50dHd1X2xvY2FsLAogCQkgICAgcnEtPnJxX2NwdV90aW1lLApkaWZmIC0tZ2l0IGEva2VybmVsL3NlY2NvbXAuYyBiL2tlcm5lbC9zZWNjb21wLmMKaW5kZXggYWQ2NGZjYi4uNTdkNGIxMyAxMDA2NDQKLS0tIGEva2VybmVsL3NlY2NvbXAuYworKysgYi9rZXJuZWwvc2VjY29tcC5jCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKIC8qICNkZWZpbmUgU0VDQ09NUF9ERUJVRyAxICovCiAjZGVmaW5lIE5SX1NFQ0NPTVBfTU9ERVMgMQpAQCAtMjIsNyArMjMsNyBAQAogCTAsIC8qIG51bGwgdGVybWluYXRlZCAqLwogfTsKIAotI2lmZGVmIFRJRl8zMkJJVAorI2lmZGVmIENPTkZJR19DT01QQVQKIHN0YXRpYyBpbnQgbW9kZTFfc3lzY2FsbHNfMzJbXSA9IHsKIAlfX05SX3NlY2NvbXBfcmVhZF8zMiwgX19OUl9zZWNjb21wX3dyaXRlXzMyLCBfX05SX3NlY2NvbXBfZXhpdF8zMiwgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMiwKIAkwLCAvKiBudWxsIHRlcm1pbmF0ZWQgKi8KQEAgLTM3LDggKzM4LDggQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIDE6CiAJCXN5c2NhbGwgPSBtb2RlMV9zeXNjYWxsczsKLSNpZmRlZiBUSUZfMzJCSVQKLQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCWlmIChpc19jb21wYXRfdGFzaygpKQogCQkJc3lzY2FsbCA9IG1vZGUxX3N5c2NhbGxzXzMyOwogI2VuZGlmCiAJCWRvIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCAyYTc0ZmU4Li4xYzg4MTQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0xNTc1LDcgKzE1NzUsMTUgQEAKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWlmIChtYXlfcHRyYWNlX3N0b3AoKSkgewogCQlkb19ub3RpZnlfcGFyZW50X2NsZHN0b3AoY3VycmVudCwgQ0xEX1RSQVBQRUQpOworCQkvKgorCQkgKiBEb24ndCB3YW50IHRvIGFsbG93IHByZWVtcHRpb24gaGVyZSwgYmVjYXVzZQorCQkgKiBzeXNfcHRyYWNlKCkgbmVlZHMgdGhpcyB0YXNrIHRvIGJlIGluYWN0aXZlLgorCQkgKgorCQkgKiBYWFg6IGltcGxlbWVudCByZWFkX3VubG9ja19ub19yZXNjaGVkKCkuCisJCSAqLworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CiAJfSBlbHNlIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IGJkYmU5ZGUuLjkwNDFlYTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNjI2LDYgKzYyNiw3IEBACiAJCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCXByZWVtcHRfZGlzYWJsZSgpOworCQkJcmN1X3FzY3RyX2luYygobG9uZylfX2JpbmRfY3B1KTsKIAkJfQogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IGYxNDVjNDEuLjM3ZjQ1OGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTU1OSw3ICs1NTksNyBAQAogCWFib3J0X2NyZWRzKG5ldyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KLSAgCisKIC8qCiAgKiBjaGFuZ2UgdGhlIHVzZXIgc3RydWN0IGluIGEgY3JlZGVudGlhbHMgc2V0IHRvIG1hdGNoIHRoZSBuZXcgVUlECiAgKi8KQEAgLTU3MSw2ICs1NzEsMTEgQEAKIAlpZiAoIW5ld191c2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKIAorCWlmICghdGFza19jYW5fc3dpdGNoX3VzZXIobmV3X3VzZXIsIGN1cnJlbnQpKSB7CisJCWZyZWVfdWlkKG5ld191c2VyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKGF0b21pY19yZWFkKCZuZXdfdXNlci0+cHJvY2Vzc2VzKSA+PQogCQkJCWN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTlBST0NdLnJsaW1fY3VyICYmCiAJCQluZXdfdXNlciAhPSBJTklUX1VTRVIpIHsKQEAgLTYzMSwxMCArNjM2LDExIEBACiAJCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHZhbCA9IC1FQUdBSU47Ci0JaWYgKG5ldy0+dWlkICE9IG9sZC0+dWlkICYmIHNldF91c2VyKG5ldykgPCAwKQotCQlnb3RvIGVycm9yOwotCisJaWYgKG5ldy0+dWlkICE9IG9sZC0+dWlkKSB7CisJCXJldHZhbCA9IHNldF91c2VyKG5ldyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CiAJaWYgKHJ1aWQgIT0gKHVpZF90KSAtMSB8fAogCSAgICAoZXVpZCAhPSAodWlkX3QpIC0xICYmIGV1aWQgIT0gb2xkLT51aWQpKQogCQluZXctPnN1aWQgPSBuZXctPmV1aWQ7CkBAIC02ODAsOSArNjg2LDEwIEBACiAJcmV0dmFsID0gLUVQRVJNOwogCWlmIChjYXBhYmxlKENBUF9TRVRVSUQpKSB7CiAJCW5ldy0+c3VpZCA9IG5ldy0+dWlkID0gdWlkOwotCQlpZiAodWlkICE9IG9sZC0+dWlkICYmIHNldF91c2VyKG5ldykgPCAwKSB7Ci0JCQlyZXR2YWwgPSAtRUFHQUlOOwotCQkJZ290byBlcnJvcjsKKwkJaWYgKHVpZCAhPSBvbGQtPnVpZCkgeworCQkJcmV0dmFsID0gc2V0X3VzZXIobmV3KTsKKwkJCWlmIChyZXR2YWwgPCAwKQorCQkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9IGVsc2UgaWYgKHVpZCAhPSBvbGQtPnVpZCAmJiB1aWQgIT0gbmV3LT5zdWlkKSB7CiAJCWdvdG8gZXJyb3I7CkBAIC03MzQsMTEgKzc0MSwxMyBAQAogCQkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR2YWwgPSAtRUFHQUlOOwogCWlmIChydWlkICE9ICh1aWRfdCkgLTEpIHsKIAkJbmV3LT51aWQgPSBydWlkOwotCQlpZiAocnVpZCAhPSBvbGQtPnVpZCAmJiBzZXRfdXNlcihuZXcpIDwgMCkKLQkJCWdvdG8gZXJyb3I7CisJCWlmIChydWlkICE9IG9sZC0+dWlkKSB7CisJCQlyZXR2YWwgPSBzZXRfdXNlcihuZXcpOworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJfQogCX0KIAlpZiAoZXVpZCAhPSAodWlkX3QpIC0xKQogCQluZXctPmV1aWQgPSBldWlkOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKaW5kZXggZWEyZjQ4YS4uZDEzYmUyMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCkBAIC02OCw2ICs2OCwxNyBAQAogCWlmIChkZXYtPm1vZGUgIT0gbW9kZSkgewogCQlkZXYtPnNldF9tb2RlKG1vZGUsIGRldik7CiAJCWRldi0+bW9kZSA9IG1vZGU7CisKKwkJLyoKKwkJICogQSBuc2VjMmN5YyBtdWx0aXBsaWNhdG9yIG9mIDAgaXMgaW52YWxpZCBhbmQgd2UnZCBjcmFzaAorCQkgKiBvbiBpdCwgc28gZml4IGl0IHVwIGFuZCBlbWl0IGEgd2FybmluZzoKKwkJICovCisJCWlmIChtb2RlID09IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpIHsKKwkJCWlmICh1bmxpa2VseSghZGV2LT5tdWx0KSkgeworCQkJCWRldi0+bXVsdCA9IDE7CisJCQkJV0FSTl9PTigxKTsKKwkJCX0KKwkJfQogCX0KIH0KIApAQCAtMTY4LDE1ICsxNzksNiBAQAogCUJVR19PTihkZXYtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEKTsKIAlCVUdfT04oIWRldi0+Y3B1bWFzayk7CiAKLQkvKgotCSAqIEEgbnNlYzJjeWMgbXVsdGlwbGljYXRvciBvZiAwIGlzIGludmFsaWQgYW5kIHdlJ2QgY3Jhc2gKLQkgKiBvbiBpdCwgc28gZml4IGl0IHVwIGFuZCBlbWl0IGEgd2FybmluZzoKLQkgKi8KLQlpZiAodW5saWtlbHkoIWRldi0+bXVsdCkpIHsKLQkJZGV2LT5tdWx0ID0gMTsKLQkJV0FSTl9PTigxKTsKLQl9Ci0KIAlzcGluX2xvY2soJmNsb2NrZXZlbnRzX2xvY2spOwogCiAJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmNsb2NrZXZlbnRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IGY1Zjc5M2QuLjdmYzY0MzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC0xLDcxICsxLDEyOSBAQAogLyoKLSAqIGxpbnV4L2tlcm5lbC90aW1lL250cC5jCi0gKgogICogTlRQIHN0YXRlIG1hY2hpbmUgaW50ZXJmYWNlcyBhbmQgbG9naWMuCiAgKgogICogVGhpcyBjb2RlIHdhcyBtYWlubHkgbW92ZWQgZnJvbSBrZXJuZWwvdGltZXIuYyBhbmQga2VybmVsL3RpbWUuYwogICogUGxlYXNlIHNlZSB0aG9zZSBmaWxlcyBmb3IgcmVsZXZhbnQgY29weXJpZ2h0IGluZm8gYW5kIGhpc3RvcmljYWwKICAqIGNoYW5nZWxvZ3MuCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIC8qCi0gKiBUaW1la2VlcGluZyB2YXJpYWJsZXMKKyAqIE5UUCB0aW1la2VlcGluZyB2YXJpYWJsZXM6CiAgKi8KLXVuc2lnbmVkIGxvbmcgdGlja191c2VjID0gVElDS19VU0VDOyAJCS8qIFVTRVJfSFogcGVyaW9kICh1c2VjKSAqLwotdW5zaWduZWQgbG9uZyB0aWNrX25zZWM7CQkJLyogQUNUSFogcGVyaW9kIChuc2VjKSAqLwotdTY0IHRpY2tfbGVuZ3RoOwotc3RhdGljIHU2NCB0aWNrX2xlbmd0aF9iYXNlOwogCi1zdGF0aWMgc3RydWN0IGhydGltZXIgbGVhcF90aW1lcjsKKy8qIFVTRVJfSFogcGVyaW9kICh1c2Vjcyk6ICovCit1bnNpZ25lZCBsb25nCQkJdGlja191c2VjID0gVElDS19VU0VDOwogCi0jZGVmaW5lIE1BWF9USUNLQURKCQk1MDAJCS8qIG1pY3Jvc2VjcyAqLwotI2RlZmluZSBNQVhfVElDS0FESl9TQ0FMRUQJKCgodTY0KShNQVhfVElDS0FESiAqIE5TRUNfUEVSX1VTRUMpIDw8IFwKLQkJCQkgIE5UUF9TQ0FMRV9TSElGVCkgLyBOVFBfSU5URVJWQUxfRlJFUSkKKy8qIEFDVEhaIHBlcmlvZCAobnNlY3MpOiAqLwordW5zaWduZWQgbG9uZwkJCXRpY2tfbnNlYzsKKwordTY0CQkJCXRpY2tfbGVuZ3RoOworc3RhdGljIHU2NAkJCXRpY2tfbGVuZ3RoX2Jhc2U7CisKK3N0YXRpYyBzdHJ1Y3QgaHJ0aW1lcgkJbGVhcF90aW1lcjsKKworI2RlZmluZSBNQVhfVElDS0FESgkJNTAwTEwJCS8qIHVzZWNzICovCisjZGVmaW5lIE1BWF9USUNLQURKX1NDQUxFRCBcCisJKCgoTUFYX1RJQ0tBREogKiBOU0VDX1BFUl9VU0VDKSA8PCBOVFBfU0NBTEVfU0hJRlQpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCiAKIC8qCiAgKiBwaGFzZS1sb2NrIGxvb3AgdmFyaWFibGVzCiAgKi8KLS8qIFRJTUVfRVJST1IgcHJldmVudHMgb3ZlcndyaXRpbmcgdGhlIENNT1MgY2xvY2sgKi8KLXN0YXRpYyBpbnQgdGltZV9zdGF0ZSA9IFRJTUVfT0s7CS8qIGNsb2NrIHN5bmNocm9uaXphdGlvbiBzdGF0dXMJKi8KLWludCB0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CQkvKiBjbG9jayBzdGF0dXMgYml0cwkJKi8KLXN0YXRpYyBsb25nIHRpbWVfdGFpOwkJCS8qIFRBSSBvZmZzZXQgKHMpCQkqLwotc3RhdGljIHM2NCB0aW1lX29mZnNldDsJCQkvKiB0aW1lIGFkanVzdG1lbnQgKG5zKQkJKi8KLXN0YXRpYyBsb25nIHRpbWVfY29uc3RhbnQgPSAyOwkJLyogcGxsIHRpbWUgY29uc3RhbnQJCSovCi1sb25nIHRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIG1heGltdW0gZXJyb3IgKHVzKQkJKi8KLWxvbmcgdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsJLyogZXN0aW1hdGVkIGVycm9yICh1cykJCSovCi1zdGF0aWMgczY0IHRpbWVfZnJlcTsJCQkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnMvcykqLwotc3RhdGljIGxvbmcgdGltZV9yZWZ0aW1lOwkJLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHMpCSovCi1sb25nIHRpbWVfYWRqdXN0Owotc3RhdGljIGxvbmcgbnRwX3RpY2tfYWRqOwogCisvKgorICogY2xvY2sgc3luY2hyb25pemF0aW9uIHN0YXR1cworICoKKyAqIChUSU1FX0VSUk9SIHByZXZlbnRzIG92ZXJ3cml0aW5nIHRoZSBDTU9TIGNsb2NrKQorICovCitzdGF0aWMgaW50CQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CisKKy8qIGNsb2NrIHN0YXR1cyBiaXRzOgkJCQkJCQkqLworaW50CQkJCXRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsKKworLyogVEFJIG9mZnNldCAoc2Vjcyk6CQkJCQkJCSovCitzdGF0aWMgbG9uZwkJCXRpbWVfdGFpOworCisvKiB0aW1lIGFkanVzdG1lbnQgKG5zZWNzKToJCQkJCQkqLworc3RhdGljIHM2NAkJCXRpbWVfb2Zmc2V0OworCisvKiBwbGwgdGltZSBjb25zdGFudDoJCQkJCQkJKi8KK3N0YXRpYyBsb25nCQkJdGltZV9jb25zdGFudCA9IDI7CisKKy8qIG1heGltdW0gZXJyb3IgKHVzZWNzKToJCQkJCQkqLworbG9uZwkJCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCisvKiBlc3RpbWF0ZWQgZXJyb3IgKHVzZWNzKToJCQkJCQkqLworbG9uZwkJCQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCisvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnNlY3Mvc2Vjcyk6CQkJCSovCitzdGF0aWMgczY0CQkJdGltZV9mcmVxOworCisvKiB0aW1lIGF0IGxhc3QgYWRqdXN0bWVudCAoc2Vjcyk6CQkJCQkqLworc3RhdGljIGxvbmcJCQl0aW1lX3JlZnRpbWU7CisKK2xvbmcJCQkJdGltZV9hZGp1c3Q7CisKKy8qIGNvbnN0YW50IChib290LXBhcmFtIGNvbmZpZ3VyYWJsZSkgTlRQIHRpY2sgYWRqdXN0bWVudCAodXBzY2FsZWQpCSovCitzdGF0aWMgczY0CQkJbnRwX3RpY2tfYWRqOworCisvKgorICogTlRQIG1ldGhvZHM6CisgKi8KKworLyoKKyAqIFVwZGF0ZSAodGlja19sZW5ndGgsIHRpY2tfbGVuZ3RoX2Jhc2UsIHRpY2tfbnNlYyksIGJhc2VkCisgKiBvbiAodGlja191c2VjLCBudHBfdGlja19hZGosIHRpbWVfZnJlcSk6CisgKi8KIHN0YXRpYyB2b2lkIG50cF91cGRhdGVfZnJlcXVlbmN5KHZvaWQpCiB7Ci0JdTY0IHNlY29uZF9sZW5ndGggPSAodTY0KSh0aWNrX3VzZWMgKiBOU0VDX1BFUl9VU0VDICogVVNFUl9IWikKLQkJCQk8PCBOVFBfU0NBTEVfU0hJRlQ7Ci0Jc2Vjb25kX2xlbmd0aCArPSAoczY0KW50cF90aWNrX2FkaiA8PCBOVFBfU0NBTEVfU0hJRlQ7Ci0Jc2Vjb25kX2xlbmd0aCArPSB0aW1lX2ZyZXE7CisJdTY0IHNlY29uZF9sZW5ndGg7CisJdTY0IG5ld19iYXNlOwogCi0JdGlja19sZW5ndGhfYmFzZSA9IHNlY29uZF9sZW5ndGg7CisJc2Vjb25kX2xlbmd0aAkJID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopCisJCQkJCQk8PCBOVFBfU0NBTEVfU0hJRlQ7CiAKLQl0aWNrX25zZWMgPSBkaXZfdTY0KHNlY29uZF9sZW5ndGgsIEhaKSA+PiBOVFBfU0NBTEVfU0hJRlQ7Ci0JdGlja19sZW5ndGhfYmFzZSA9IGRpdl91NjQodGlja19sZW5ndGhfYmFzZSwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCXNlY29uZF9sZW5ndGgJCSs9IG50cF90aWNrX2FkajsKKwlzZWNvbmRfbGVuZ3RoCQkrPSB0aW1lX2ZyZXE7CisKKwl0aWNrX25zZWMJCSA9IGRpdl91NjQoc2Vjb25kX2xlbmd0aCwgSFopID4+IE5UUF9TQ0FMRV9TSElGVDsKKwluZXdfYmFzZQkJID0gZGl2X3U2NChzZWNvbmRfbGVuZ3RoLCBOVFBfSU5URVJWQUxfRlJFUSk7CisKKwkvKgorCSAqIERvbid0IHdhaXQgZm9yIHRoZSBuZXh0IHNlY29uZF9vdmVyZmxvdywgYXBwbHkKKwkgKiB0aGUgY2hhbmdlIHRvIHRoZSB0aWNrIGxlbmd0aCBpbW1lZGlhdGVseToKKwkgKi8KKwl0aWNrX2xlbmd0aAkJKz0gbmV3X2Jhc2UgLSB0aWNrX2xlbmd0aF9iYXNlOworCXRpY2tfbGVuZ3RoX2Jhc2UJID0gbmV3X2Jhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgczY0IG50cF91cGRhdGVfb2Zmc2V0X2ZsbChzNjQgb2Zmc2V0NjQsIGxvbmcgc2VjcykKK3sKKwl0aW1lX3N0YXR1cyAmPSB+U1RBX01PREU7CisKKwlpZiAoc2VjcyA8IE1JTlNFQykKKwkJcmV0dXJuIDA7CisKKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9GTEwpICYmIChzZWNzIDw9IE1BWFNFQykpCisJCXJldHVybiAwOworCisJdGltZV9zdGF0dXMgfD0gU1RBX01PREU7CisKKwlyZXR1cm4gZGl2X3M2NChvZmZzZXQ2NCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfRkxMKSwgc2Vjcyk7CiB9CiAKIHN0YXRpYyB2b2lkIG50cF91cGRhdGVfb2Zmc2V0KGxvbmcgb2Zmc2V0KQogewotCWxvbmcgbXRlbXA7CiAJczY0IGZyZXFfYWRqOworCXM2NCBvZmZzZXQ2NDsKKwlsb25nIHNlY3M7CiAKIAlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpKQogCQlyZXR1cm47CkBAIC04NCwyNCArMTQyLDIzIEBACiAJICogU2VsZWN0IGhvdyB0aGUgZnJlcXVlbmN5IGlzIHRvIGJlIGNvbnRyb2xsZWQKIAkgKiBhbmQgaW4gd2hpY2ggbW9kZSAoUExMIG9yIEZMTCkuCiAJICovCi0JaWYgKHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEIHx8IHRpbWVfcmVmdGltZSA9PSAwKQotCQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7Ci0JbXRlbXAgPSB4dGltZS50dl9zZWMgLSB0aW1lX3JlZnRpbWU7CisJc2VjcyA9IHh0aW1lLnR2X3NlYyAtIHRpbWVfcmVmdGltZTsKKwlpZiAodW5saWtlbHkodGltZV9zdGF0dXMgJiBTVEFfRlJFUUhPTEQpKQorCQlzZWNzID0gMDsKKwogCXRpbWVfcmVmdGltZSA9IHh0aW1lLnR2X3NlYzsKIAotCWZyZXFfYWRqID0gKHM2NClvZmZzZXQgKiBtdGVtcDsKLQlmcmVxX2FkaiA8PD0gTlRQX1NDQUxFX1NISUZUIC0gMiAqIChTSElGVF9QTEwgKyAyICsgdGltZV9jb25zdGFudCk7Ci0JdGltZV9zdGF0dXMgJj0gflNUQV9NT0RFOwotCWlmIChtdGVtcCA+PSBNSU5TRUMgJiYgKHRpbWVfc3RhdHVzICYgU1RBX0ZMTCB8fCBtdGVtcCA+IE1BWFNFQykpIHsKLQkJZnJlcV9hZGogKz0gZGl2X3M2NCgoczY0KW9mZnNldCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfRkxMKSwKLQkJCQkgICAgbXRlbXApOwotCQl0aW1lX3N0YXR1cyB8PSBTVEFfTU9ERTsKLQl9Ci0JZnJlcV9hZGogKz0gdGltZV9mcmVxOwotCWZyZXFfYWRqID0gbWluKGZyZXFfYWRqLCBNQVhGUkVRX1NDQUxFRCk7Ci0JdGltZV9mcmVxID0gbWF4KGZyZXFfYWRqLCAtTUFYRlJFUV9TQ0FMRUQpOworCW9mZnNldDY0ICAgID0gb2Zmc2V0OworCWZyZXFfYWRqICAgID0gKG9mZnNldDY0ICogc2VjcykgPDwKKwkJCShOVFBfU0NBTEVfU0hJRlQgLSAyICogKFNISUZUX1BMTCArIDIgKyB0aW1lX2NvbnN0YW50KSk7CiAKLQl0aW1lX29mZnNldCA9IGRpdl9zNjQoKHM2NClvZmZzZXQgPDwgTlRQX1NDQUxFX1NISUZULCBOVFBfSU5URVJWQUxfRlJFUSk7CisJZnJlcV9hZGogICAgKz0gbnRwX3VwZGF0ZV9vZmZzZXRfZmxsKG9mZnNldDY0LCBzZWNzKTsKKworCWZyZXFfYWRqICAgID0gbWluKGZyZXFfYWRqICsgdGltZV9mcmVxLCBNQVhGUkVRX1NDQUxFRCk7CisKKwl0aW1lX2ZyZXEgICA9IG1heChmcmVxX2FkaiwgLU1BWEZSRVFfU0NBTEVEKTsKKworCXRpbWVfb2Zmc2V0ID0gZGl2X3M2NChvZmZzZXQ2NCA8PCBOVFBfU0NBTEVfU0hJRlQsIE5UUF9JTlRFUlZBTF9GUkVRKTsKIH0KIAogLyoqCkBAIC0xMTEsMTUgKzE2OCwxNSBAQAogICovCiB2b2lkIG50cF9jbGVhcih2b2lkKQogewotCXRpbWVfYWRqdXN0ID0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLwotCXRpbWVfc3RhdHVzIHw9IFNUQV9VTlNZTkM7Ci0JdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKLQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCXRpbWVfYWRqdXN0CT0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLworCXRpbWVfc3RhdHVzCXw9IFNUQV9VTlNZTkM7CisJdGltZV9tYXhlcnJvcgk9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2VzdGVycm9yCT0gTlRQX1BIQVNFX0xJTUlUOwogCiAJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKIAotCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKLQl0aW1lX29mZnNldCA9IDA7CisJdGlja19sZW5ndGgJPSB0aWNrX2xlbmd0aF9iYXNlOworCXRpbWVfb2Zmc2V0CT0gMDsKIH0KIAogLyoKQEAgLTE0MCw4ICsxOTcsOCBAQAogCQl4dGltZS50dl9zZWMtLTsKIAkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjKys7CiAJCXRpbWVfc3RhdGUgPSBUSU1FX09PUDsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJDbG9jazogIgotCQkgICAgICAgImluc2VydGluZyBsZWFwIHNlY29uZCAyMzo1OTo2MCBVVENcbiIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJDbG9jazogaW5zZXJ0aW5nIGxlYXAgc2Vjb25kIDIzOjU5OjYwIFVUQ1xuIik7CiAJCWhydGltZXJfYWRkX2V4cGlyZXNfbnMoJmxlYXBfdGltZXIsIE5TRUNfUEVSX1NFQyk7CiAJCXJlcyA9IEhSVElNRVJfUkVTVEFSVDsKIAkJYnJlYWs7CkBAIC0xNTAsOCArMjA3LDggQEAKIAkJdGltZV90YWktLTsKIAkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjLS07CiAJCXRpbWVfc3RhdGUgPSBUSU1FX1dBSVQ7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6ICIKLQkJICAgICAgICJkZWxldGluZyBsZWFwIHNlY29uZCAyMzo1OTo1OSBVVENcbiIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJDbG9jazogZGVsZXRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NTkgVVRDXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBUSU1FX09PUDoKIAkJdGltZV90YWkrKzsKQEAgLTE3OSw3ICsyMzYsNyBAQAogICovCiB2b2lkIHNlY29uZF9vdmVyZmxvdyh2b2lkKQogewotCXM2NCB0aW1lX2FkajsKKwlzNjQgZGVsdGE7CiAKIAkvKiBCdW1wIHRoZSBtYXhlcnJvciBmaWVsZCAqLwogCXRpbWVfbWF4ZXJyb3IgKz0gTUFYRlJFUSAvIE5TRUNfUEVSX1VTRUM7CkBAIC0xOTIsMjQgKzI0OSwzMCBAQAogCSAqIENvbXB1dGUgdGhlIHBoYXNlIGFkanVzdG1lbnQgZm9yIHRoZSBuZXh0IHNlY29uZC4gVGhlIG9mZnNldCBpcwogCSAqIHJlZHVjZWQgYnkgYSBmaXhlZCBmYWN0b3IgdGltZXMgdGhlIHRpbWUgY29uc3RhbnQuCiAJICovCi0JdGlja19sZW5ndGggPSB0aWNrX2xlbmd0aF9iYXNlOwotCXRpbWVfYWRqID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQsIFNISUZUX1BMTCArIHRpbWVfY29uc3RhbnQpOwotCXRpbWVfb2Zmc2V0IC09IHRpbWVfYWRqOwotCXRpY2tfbGVuZ3RoICs9IHRpbWVfYWRqOworCXRpY2tfbGVuZ3RoCSA9IHRpY2tfbGVuZ3RoX2Jhc2U7CiAKLQlpZiAodW5saWtlbHkodGltZV9hZGp1c3QpKSB7Ci0JCWlmICh0aW1lX2FkanVzdCA+IE1BWF9USUNLQURKKSB7Ci0JCQl0aW1lX2FkanVzdCAtPSBNQVhfVElDS0FESjsKLQkJCXRpY2tfbGVuZ3RoICs9IE1BWF9USUNLQURKX1NDQUxFRDsKLQkJfSBlbHNlIGlmICh0aW1lX2FkanVzdCA8IC1NQVhfVElDS0FESikgewotCQkJdGltZV9hZGp1c3QgKz0gTUFYX1RJQ0tBREo7Ci0JCQl0aWNrX2xlbmd0aCAtPSBNQVhfVElDS0FESl9TQ0FMRUQ7Ci0JCX0gZWxzZSB7Ci0JCQl0aWNrX2xlbmd0aCArPSAoczY0KSh0aW1lX2FkanVzdCAqIE5TRUNfUEVSX1VTRUMgLwotCQkJCQlOVFBfSU5URVJWQUxfRlJFUSkgPDwgTlRQX1NDQUxFX1NISUZUOwotCQkJdGltZV9hZGp1c3QgPSAwOwotCQl9CisJZGVsdGEJCSA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKKwl0aW1lX29mZnNldAktPSBkZWx0YTsKKwl0aWNrX2xlbmd0aAkrPSBkZWx0YTsKKworCWlmICghdGltZV9hZGp1c3QpCisJCXJldHVybjsKKworCWlmICh0aW1lX2FkanVzdCA+IE1BWF9USUNLQURKKSB7CisJCXRpbWVfYWRqdXN0IC09IE1BWF9USUNLQURKOworCQl0aWNrX2xlbmd0aCArPSBNQVhfVElDS0FESl9TQ0FMRUQ7CisJCXJldHVybjsKIAl9CisKKwlpZiAodGltZV9hZGp1c3QgPCAtTUFYX1RJQ0tBREopIHsKKwkJdGltZV9hZGp1c3QgKz0gTUFYX1RJQ0tBREo7CisJCXRpY2tfbGVuZ3RoIC09IE1BWF9USUNLQURKX1NDQUxFRDsKKwkJcmV0dXJuOworCX0KKworCXRpY2tfbGVuZ3RoICs9IChzNjQpKHRpbWVfYWRqdXN0ICogTlNFQ19QRVJfVVNFQyAvIE5UUF9JTlRFUlZBTF9GUkVRKQorCQkJCQkJCSA8PCBOVFBfU0NBTEVfU0hJRlQ7CisJdGltZV9hZGp1c3QgPSAwOwogfQogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEUKQEAgLTIzMywxMiArMjk2LDEzIEBACiAJICogVGhpcyBjb2RlIGlzIHJ1biBvbiBhIHRpbWVyLiAgSWYgdGhlIGNsb2NrIGlzIHNldCwgdGhhdCB0aW1lcgogCSAqIG1heSBub3QgZXhwaXJlIGF0IHRoZSBjb3JyZWN0IHRpbWUuICBUaHVzLCB3ZSBhZGp1c3QuLi4KIAkgKi8KLQlpZiAoIW50cF9zeW5jZWQoKSkKKwlpZiAoIW50cF9zeW5jZWQoKSkgewogCQkvKgogCQkgKiBOb3Qgc3luY2VkLCBleGl0LCBkbyBub3QgcmVzdGFydCBhIHRpbWVyIChpZiBvbmUgaXMKIAkJICogcnVubmluZywgbGV0IGl0IHJ1biBvdXQpLgogCQkgKi8KIAkJcmV0dXJuOworCX0KIAogCWdldG5zdGltZW9mZGF5KCZub3cpOwogCWlmIChhYnMobm93LnR2X25zZWMgLSAoTlNFQ19QRVJfU0VDIC8gMikpIDw9IHRpY2tfbnNlYyAvIDIpCkBAIC0yNzAsNyArMzM0LDExNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeV9jbW9zX3RpbWVyKHZvaWQpIHsgfQogI2VuZGlmCiAKLS8qIGFkanRpbWV4IG1haW5seSBhbGxvd3MgcmVhZGluZyAoYW5kIHdyaXRpbmcsIGlmIHN1cGVydXNlcikgb2YKKy8qCisgKiBTdGFydCB0aGUgbGVhcCBzZWNvbmRzIHRpbWVyOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnRwX3N0YXJ0X2xlYXBfdGltZXIoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlsb25nIG5vdyA9IHRzLT50dl9zZWM7CisKKwlpZiAodGltZV9zdGF0dXMgJiBTVEFfSU5TKSB7CisJCXRpbWVfc3RhdGUgPSBUSU1FX0lOUzsKKwkJbm93ICs9IDg2NDAwIC0gbm93ICUgODY0MDA7CisJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChub3csIDApLCBIUlRJTUVSX01PREVfQUJTKTsKKworCQlyZXR1cm47CisJfQorCisJaWYgKHRpbWVfc3RhdHVzICYgU1RBX0RFTCkgeworCQl0aW1lX3N0YXRlID0gVElNRV9ERUw7CisJCW5vdyArPSA4NjQwMCAtIChub3cgKyAxKSAlIDg2NDAwOworCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQobm93LCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7CisJfQorfQorCisvKgorICogUHJvcGFnYXRlIGEgbmV3IHR4Yy0+c3RhdHVzIHZhbHVlIGludG8gdGhlIE5UUCBzdGF0ZToKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfYWRqX3N0YXR1cyhzdHJ1Y3QgdGltZXggKnR4Yywgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAoKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYgISh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKSB7CisJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CisJfQorCisJLyoKKwkgKiBJZiB3ZSB0dXJuIG9uIFBMTCBhZGp1c3RtZW50cyB0aGVuIHJlc2V0IHRoZQorCSAqIHJlZmVyZW5jZSB0aW1lIHRvIGN1cnJlbnQgdGltZS4KKwkgKi8KKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmICh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKQorCQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CisKKwkvKiBvbmx5IHNldCBhbGxvd2VkIGJpdHMgKi8KKwl0aW1lX3N0YXR1cyAmPSBTVEFfUk9OTFk7CisJdGltZV9zdGF0dXMgfD0gdHhjLT5zdGF0dXMgJiB+U1RBX1JPTkxZOworCisJc3dpdGNoICh0aW1lX3N0YXRlKSB7CisJY2FzZSBUSU1FX09LOgorCQludHBfc3RhcnRfbGVhcF90aW1lcih0cyk7CisJCWJyZWFrOworCWNhc2UgVElNRV9JTlM6CisJY2FzZSBUSU1FX0RFTDoKKwkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CisJCW50cF9zdGFydF9sZWFwX3RpbWVyKHRzKTsKKwljYXNlIFRJTUVfV0FJVDoKKwkJaWYgKCEodGltZV9zdGF0dXMgJiAoU1RBX0lOUyB8IFNUQV9ERUwpKSkKKwkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQlicmVhazsKKwljYXNlIFRJTUVfT09QOgorCQlocnRpbWVyX3Jlc3RhcnQoJmxlYXBfdGltZXIpOworCQlicmVhazsKKwl9Cit9CisvKgorICogQ2FsbGVkIHdpdGggdGhlIHh0aW1lIGxvY2sgaGVsZCwgc28gd2UgY2FuIGFjY2VzcyBhbmQgbW9kaWZ5CisgKiBhbGwgdGhlIGdsb2JhbCBOVFAgc3RhdGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2FkanRpbWV4X21vZGVzKHN0cnVjdCB0aW1leCAqdHhjLCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCWlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUykKKwkJcHJvY2Vzc19hZGpfc3RhdHVzKHR4YywgdHMpOworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTkFOTykKKwkJdGltZV9zdGF0dXMgfD0gU1RBX05BTk87CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9NSUNSTykKKwkJdGltZV9zdGF0dXMgJj0gflNUQV9OQU5POworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfRlJFUVVFTkNZKSB7CisJCXRpbWVfZnJlcSA9IHR4Yy0+ZnJlcSAqIFBQTV9TQ0FMRTsKKwkJdGltZV9mcmVxID0gbWluKHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOworCQl0aW1lX2ZyZXEgPSBtYXgodGltZV9mcmVxLCAtTUFYRlJFUV9TQ0FMRUQpOworCX0KKworCWlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKQorCQl0aW1lX21heGVycm9yID0gdHhjLT5tYXhlcnJvcjsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX0VTVEVSUk9SKQorCQl0aW1lX2VzdGVycm9yID0gdHhjLT5lc3RlcnJvcjsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX1RJTUVDT05TVCkgeworCQl0aW1lX2NvbnN0YW50ID0gdHhjLT5jb25zdGFudDsKKwkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCisJCQl0aW1lX2NvbnN0YW50ICs9IDQ7CisJCXRpbWVfY29uc3RhbnQgPSBtaW4odGltZV9jb25zdGFudCwgKGxvbmcpTUFYVEMpOworCQl0aW1lX2NvbnN0YW50ID0gbWF4KHRpbWVfY29uc3RhbnQsIDBsKTsKKwl9CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCisJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX09GRlNFVCkKKwkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSykKKwkJdGlja191c2VjID0gdHhjLT50aWNrOworCisJaWYgKHR4Yy0+bW9kZXMgJiAoQURKX1RJQ0t8QURKX0ZSRVFVRU5DWXxBREpfT0ZGU0VUKSkKKwkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKK30KKworLyoKKyAqIGFkanRpbWV4IG1haW5seSBhbGxvd3MgcmVhZGluZyAoYW5kIHdyaXRpbmcsIGlmIHN1cGVydXNlcikgb2YKICAqIGtlcm5lbCB0aW1lLWtlZXBpbmcgdmFyaWFibGVzLiB1c2VkIGJ5IHhudHBkLgogICovCiBpbnQgZG9fYWRqdGltZXgoc3RydWN0IHRpbWV4ICp0eGMpCkBAIC0yOTEsMTEgKzQ2NCwxNCBAQAogCQkgaWYgKHR4Yy0+bW9kZXMgJiYgIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJLyogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyEgKi8KKwkJLyoKKwkJICogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSB0aGVuCisJCSAqIHNvbWV0aGluZyBpcyBWRVJZIHdyb25nIQorCQkgKi8KIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSyAmJgogCQkgICAgKHR4Yy0+dGljayA8ICA5MDAwMDAvVVNFUl9IWiB8fAogCQkgICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMgJiYgdGltZV9zdGF0ZSAhPSBUSU1FX09LKQogCQkJaHJ0aW1lcl9jYW5jZWwoJmxlYXBfdGltZXIpOwpAQCAtMzA1LDcgKzQ4MSw2IEBACiAKIAl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKLQkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW0gKi8KIAlpZiAodHhjLT5tb2RlcyAmIEFESl9BREpUSU1FKSB7CiAJCWxvbmcgc2F2ZV9hZGp1c3QgPSB0aW1lX2FkanVzdDsKIApAQCAtMzE1LDk4ICs0OTAsMjQgQEAKIAkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAJCX0KIAkJdHhjLT5vZmZzZXQgPSBzYXZlX2FkanVzdDsKLQkJZ290byBhZGpfZG9uZTsKLQl9Ci0JaWYgKHR4Yy0+bW9kZXMpIHsKLQkJbG9uZyBzZWM7CisJfSBlbHNlIHsKIAotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpIHsKLQkJCWlmICgodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJgotCQkJICAgICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgewotCQkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOwotCQkJCXRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsKLQkJCX0KLQkJCS8qIG9ubHkgc2V0IGFsbG93ZWQgYml0cyAqLwotCQkJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOwotCQkJdGltZV9zdGF0dXMgfD0gdHhjLT5zdGF0dXMgJiB+U1RBX1JPTkxZOworCQkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW06ICovCisJCWlmICh0eGMtPm1vZGVzKQorCQkJcHJvY2Vzc19hZGp0aW1leF9tb2Rlcyh0eGMsICZ0cyk7CiAKLQkJCXN3aXRjaCAodGltZV9zdGF0ZSkgewotCQkJY2FzZSBUSU1FX09LOgotCQkJc3RhcnRfdGltZXI6Ci0JCQkJc2VjID0gdHMudHZfc2VjOwotCQkJCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9JTlMpIHsKLQkJCQkJdGltZV9zdGF0ZSA9IFRJTUVfSU5TOwotCQkJCQlzZWMgKz0gODY0MDAgLSBzZWMgJSA4NjQwMDsKLQkJCQkJaHJ0aW1lcl9zdGFydCgmbGVhcF90aW1lciwga3RpbWVfc2V0KHNlYywgMCksIEhSVElNRVJfTU9ERV9BQlMpOwotCQkJCX0gZWxzZSBpZiAodGltZV9zdGF0dXMgJiBTVEFfREVMKSB7Ci0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX0RFTDsKLQkJCQkJc2VjICs9IDg2NDAwIC0gKHNlYyArIDEpICUgODY0MDA7Ci0JCQkJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChzZWMsIDApLCBIUlRJTUVSX01PREVfQUJTKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRJTUVfSU5TOgotCQkJY2FzZSBUSU1FX0RFTDoKLQkJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKLQkJCQlnb3RvIHN0YXJ0X3RpbWVyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX1dBSVQ6Ci0JCQkJaWYgKCEodGltZV9zdGF0dXMgJiAoU1RBX0lOUyB8IFNUQV9ERUwpKSkKLQkJCQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRJTUVfT09QOgotCQkJCWhydGltZXJfcmVzdGFydCgmbGVhcF90aW1lcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9OQU5PKQotCQkJdGltZV9zdGF0dXMgfD0gU1RBX05BTk87Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX01JQ1JPKQotCQkJdGltZV9zdGF0dXMgJj0gflNUQV9OQU5POwotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgewotCQkJdGltZV9mcmVxID0gKHM2NCl0eGMtPmZyZXEgKiBQUE1fU0NBTEU7Ci0JCQl0aW1lX2ZyZXEgPSBtaW4odGltZV9mcmVxLCBNQVhGUkVRX1NDQUxFRCk7Ci0JCQl0aW1lX2ZyZXEgPSBtYXgodGltZV9mcmVxLCAtTUFYRlJFUV9TQ0FMRUQpOwotCQl9Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTUFYRVJST1IpCi0JCQl0aW1lX21heGVycm9yID0gdHhjLT5tYXhlcnJvcjsKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfRVNURVJST1IpCi0JCQl0aW1lX2VzdGVycm9yID0gdHhjLT5lc3RlcnJvcjsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USU1FQ09OU1QpIHsKLQkJCXRpbWVfY29uc3RhbnQgPSB0eGMtPmNvbnN0YW50OwotCQkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCi0JCQkJdGltZV9jb25zdGFudCArPSA0OwotCQkJdGltZV9jb25zdGFudCA9IG1pbih0aW1lX2NvbnN0YW50LCAobG9uZylNQVhUQyk7Ci0JCQl0aW1lX2NvbnN0YW50ID0gbWF4KHRpbWVfY29uc3RhbnQsIDBsKTsKLQkJfQotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX1RBSSAmJiB0eGMtPmNvbnN0YW50ID4gMCkKLQkJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpCi0JCQludHBfdXBkYXRlX29mZnNldCh0eGMtPm9mZnNldCk7Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCi0JCQl0aWNrX3VzZWMgPSB0eGMtPnRpY2s7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiAoQURKX1RJQ0t8QURKX0ZSRVFVRU5DWXxBREpfT0ZGU0VUKSkKLQkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7Ci0JfQotCi0JdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAorCQl0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0ICogTlRQX0lOVEVSVkFMX0ZSRVEsCiAJCQkJICBOVFBfU0NBTEVfU0hJRlQpOwotCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQotCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKKwkJCXR4Yy0+b2Zmc2V0IC89IE5TRUNfUEVSX1VTRUM7CisJfQogCi1hZGpfZG9uZToKIAlyZXN1bHQgPSB0aW1lX3N0YXRlOwkvKiBtb3N0bHkgYFRJTUVfT0snICovCiAJaWYgKHRpbWVfc3RhdHVzICYgKFNUQV9VTlNZTkN8U1RBX0NMT0NLRVJSKSkKIAkJcmVzdWx0ID0gVElNRV9FUlJPUjsKIAogCXR4Yy0+ZnJlcQkgICA9IHNoaWZ0X3JpZ2h0KCh0aW1lX2ZyZXEgPj4gUFBNX1NDQUxFX0lOVl9TSElGVCkgKgotCQkJCQkgKHM2NClQUE1fU0NBTEVfSU5WLCBOVFBfU0NBTEVfU0hJRlQpOworCQkJCQkgUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKIAl0eGMtPm1heGVycm9yCSAgID0gdGltZV9tYXhlcnJvcjsKIAl0eGMtPmVzdGVycm9yCSAgID0gdGltZV9lc3RlcnJvcjsKIAl0eGMtPnN0YXR1cwkgICA9IHRpbWVfc3RhdHVzOwpAQCAtNDI1LDYgKzUyNiw3IEBACiAJdHhjLT5jYWxjbnQJICAgPSAwOwogCXR4Yy0+ZXJyY250CSAgID0gMDsKIAl0eGMtPnN0YmNudAkgICA9IDA7CisKIAl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAogCXR4Yy0+dGltZS50dl9zZWMgPSB0cy50dl9zZWM7CkBAIC00NDAsNiArNTQyLDggQEAKIHN0YXRpYyBpbnQgX19pbml0IG50cF90aWNrX2Fkal9zZXR1cChjaGFyICpzdHIpCiB7CiAJbnRwX3RpY2tfYWRqID0gc2ltcGxlX3N0cnRvbChzdHIsIE5VTEwsIDApOworCW50cF90aWNrX2FkaiA8PD0gTlRQX1NDQUxFX1NISUZUOworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggMTNkZDY0Zi4uOWI3N2ZjOSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTU4OSwxMSArNTg5LDE0IEBACiAJfQogfQogCi1pbnQgX19tb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCitzdGF0aWMgaW5saW5lIGludAorX19tb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMsIGJvb2wgcGVuZGluZ19vbmx5KQogewogCXN0cnVjdCB0dmVjX2Jhc2UgKmJhc2UsICpuZXdfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSAwOwogCiAJdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOwogCUJVR19PTighdGltZXItPmZ1bmN0aW9uKTsKQEAgLTYwMyw2ICs2MDYsOSBAQAogCWlmICh0aW1lcl9wZW5kaW5nKHRpbWVyKSkgewogCQlkZXRhY2hfdGltZXIodGltZXIsIDApOwogCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCWlmIChwZW5kaW5nX29ubHkpCisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJZGVidWdfdGltZXJfYWN0aXZhdGUodGltZXIpOwpAQCAtNjI5LDEyICs2MzUsODMgQEAKIAogCXRpbWVyLT5leHBpcmVzID0gZXhwaXJlczsKIAlpbnRlcm5hbF9hZGRfdGltZXIoYmFzZSwgdGltZXIpOworCitvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLUVYUE9SVF9TWU1CT0woX19tb2RfdGltZXIpOworLyoqCisgKiBtb2RfdGltZXJfcGVuZGluZyAtIG1vZGlmeSBhIHBlbmRpbmcgdGltZXIncyB0aW1lb3V0CisgKiBAdGltZXI6IHRoZSBwZW5kaW5nIHRpbWVyIHRvIGJlIG1vZGlmaWVkCisgKiBAZXhwaXJlczogbmV3IHRpbWVvdXQgaW4gamlmZmllcworICoKKyAqIG1vZF90aW1lcl9wZW5kaW5nKCkgaXMgdGhlIHNhbWUgZm9yIHBlbmRpbmcgdGltZXJzIGFzIG1vZF90aW1lcigpLAorICogYnV0IHdpbGwgbm90IHJlLWFjdGl2YXRlIGFuZCBtb2RpZnkgYWxyZWFkeSBkZWxldGVkIHRpbWVycy4KKyAqCisgKiBJdCBpcyB1c2VmdWwgZm9yIHVuc2VyaWFsaXplZCB1c2Ugb2YgdGltZXJzLgorICovCitpbnQgbW9kX3RpbWVyX3BlbmRpbmcoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCit7CisJcmV0dXJuIF9fbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzLCB0cnVlKTsKK30KK0VYUE9SVF9TWU1CT0wobW9kX3RpbWVyX3BlbmRpbmcpOworCisvKioKKyAqIG1vZF90aW1lciAtIG1vZGlmeSBhIHRpbWVyJ3MgdGltZW91dAorICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgbW9kaWZpZWQKKyAqIEBleHBpcmVzOiBuZXcgdGltZW91dCBpbiBqaWZmaWVzCisgKgorICogbW9kX3RpbWVyKCkgaXMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gdXBkYXRlIHRoZSBleHBpcmUgZmllbGQgb2YgYW4KKyAqIGFjdGl2ZSB0aW1lciAoaWYgdGhlIHRpbWVyIGlzIGluYWN0aXZlIGl0IHdpbGwgYmUgYWN0aXZhdGVkKQorICoKKyAqIG1vZF90aW1lcih0aW1lciwgZXhwaXJlcykgaXMgZXF1aXZhbGVudCB0bzoKKyAqCisgKiAgICAgZGVsX3RpbWVyKHRpbWVyKTsgdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOyBhZGRfdGltZXIodGltZXIpOworICoKKyAqIE5vdGUgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdW5zZXJpYWxpemVkIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlCisgKiBzYW1lIHRpbWVyLCB0aGVuIG1vZF90aW1lcigpIGlzIHRoZSBvbmx5IHNhZmUgd2F5IHRvIG1vZGlmeSB0aGUgdGltZW91dCwKKyAqIHNpbmNlIGFkZF90aW1lcigpIGNhbm5vdCBtb2RpZnkgYW4gYWxyZWFkeSBydW5uaW5nIHRpbWVyLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgaXQgaGFzIG1vZGlmaWVkIGEgcGVuZGluZyB0aW1lciBvciBub3QuCisgKiAoaWUuIG1vZF90aW1lcigpIG9mIGFuIGluYWN0aXZlIHRpbWVyIHJldHVybnMgMCwgbW9kX3RpbWVyKCkgb2YgYW4KKyAqIGFjdGl2ZSB0aW1lciByZXR1cm5zIDEuKQorICovCitpbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQoreworCS8qCisJICogVGhpcyBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24gdHJpZ2dlcmVkIGJ5IHRoZQorCSAqIG5ldHdvcmtpbmcgY29kZSAtIGlmIHRoZSB0aW1lciBpcyByZS1tb2RpZmllZAorCSAqIHRvIGJlIHRoZSBzYW1lIHRoaW5nIHRoZW4ganVzdCByZXR1cm46CisJICovCisJaWYgKHRpbWVyLT5leHBpcmVzID09IGV4cGlyZXMgJiYgdGltZXJfcGVuZGluZyh0aW1lcikpCisJCXJldHVybiAxOworCisJcmV0dXJuIF9fbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKG1vZF90aW1lcik7CisKKy8qKgorICogYWRkX3RpbWVyIC0gc3RhcnQgYSB0aW1lcgorICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgYWRkZWQKKyAqCisgKiBUaGUga2VybmVsIHdpbGwgZG8gYSAtPmZ1bmN0aW9uKC0+ZGF0YSkgY2FsbGJhY2sgZnJvbSB0aGUKKyAqIHRpbWVyIGludGVycnVwdCBhdCB0aGUgLT5leHBpcmVzIHBvaW50IGluIHRoZSBmdXR1cmUuIFRoZQorICogY3VycmVudCB0aW1lIGlzICdqaWZmaWVzJy4KKyAqCisgKiBUaGUgdGltZXIncyAtPmV4cGlyZXMsIC0+ZnVuY3Rpb24gKGFuZCBpZiB0aGUgaGFuZGxlciB1c2VzIGl0LCAtPmRhdGEpCisgKiBmaWVsZHMgbXVzdCBiZSBzZXQgcHJpb3IgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRpbWVycyB3aXRoIGFuIC0+ZXhwaXJlcyBmaWVsZCBpbiB0aGUgcGFzdCB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBuZXh0CisgKiB0aW1lciB0aWNrLgorICovCit2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCit7CisJQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpKTsKKwltb2RfdGltZXIodGltZXIsIHRpbWVyLT5leHBpcmVzKTsKK30KK0VYUE9SVF9TWU1CT0woYWRkX3RpbWVyKTsKIAogLyoqCiAgKiBhZGRfdGltZXJfb24gLSBzdGFydCBhIHRpbWVyIG9uIGEgcGFydGljdWxhciBDUFUKQEAgLTY2Nyw0NCArNzQ0LDYgQEAKIH0KIAogLyoqCi0gKiBtb2RfdGltZXIgLSBtb2RpZnkgYSB0aW1lcidzIHRpbWVvdXQKLSAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIG1vZGlmaWVkCi0gKiBAZXhwaXJlczogbmV3IHRpbWVvdXQgaW4gamlmZmllcwotICoKLSAqIG1vZF90aW1lcigpIGlzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHVwZGF0ZSB0aGUgZXhwaXJlIGZpZWxkIG9mIGFuCi0gKiBhY3RpdmUgdGltZXIgKGlmIHRoZSB0aW1lciBpcyBpbmFjdGl2ZSBpdCB3aWxsIGJlIGFjdGl2YXRlZCkKLSAqCi0gKiBtb2RfdGltZXIodGltZXIsIGV4cGlyZXMpIGlzIGVxdWl2YWxlbnQgdG86Ci0gKgotICogICAgIGRlbF90aW1lcih0aW1lcik7IHRpbWVyLT5leHBpcmVzID0gZXhwaXJlczsgYWRkX3RpbWVyKHRpbWVyKTsKLSAqCi0gKiBOb3RlIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHVuc2VyaWFsaXplZCBjb25jdXJyZW50IHVzZXJzIG9mIHRoZQotICogc2FtZSB0aW1lciwgdGhlbiBtb2RfdGltZXIoKSBpcyB0aGUgb25seSBzYWZlIHdheSB0byBtb2RpZnkgdGhlIHRpbWVvdXQsCi0gKiBzaW5jZSBhZGRfdGltZXIoKSBjYW5ub3QgbW9kaWZ5IGFuIGFscmVhZHkgcnVubmluZyB0aW1lci4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB3aGV0aGVyIGl0IGhhcyBtb2RpZmllZCBhIHBlbmRpbmcgdGltZXIgb3Igbm90LgotICogKGllLiBtb2RfdGltZXIoKSBvZiBhbiBpbmFjdGl2ZSB0aW1lciByZXR1cm5zIDAsIG1vZF90aW1lcigpIG9mIGFuCi0gKiBhY3RpdmUgdGltZXIgcmV0dXJucyAxLikKLSAqLwotaW50IG1vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKLXsKLQlCVUdfT04oIXRpbWVyLT5mdW5jdGlvbik7Ci0KLQl0aW1lcl9zdGF0c190aW1lcl9zZXRfc3RhcnRfaW5mbyh0aW1lcik7Ci0JLyoKLQkgKiBUaGlzIGlzIGEgY29tbW9uIG9wdGltaXphdGlvbiB0cmlnZ2VyZWQgYnkgdGhlCi0JICogbmV0d29ya2luZyBjb2RlIC0gaWYgdGhlIHRpbWVyIGlzIHJlLW1vZGlmaWVkCi0JICogdG8gYmUgdGhlIHNhbWUgdGhpbmcgdGhlbiBqdXN0IHJldHVybjoKLQkgKi8KLQlpZiAodGltZXItPmV4cGlyZXMgPT0gZXhwaXJlcyAmJiB0aW1lcl9wZW5kaW5nKHRpbWVyKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMpOwotfQotCi1FWFBPUlRfU1lNQk9MKG1vZF90aW1lcik7Ci0KLS8qKgogICogZGVsX3RpbWVyIC0gZGVhY3RpdmUgYSB0aW1lci4KICAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGRlYWN0aXZhdGVkCiAgKgpAQCAtNzMzLDcgKzc3Miw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCiBFWFBPUlRfU1lNQk9MKGRlbF90aW1lcik7CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC03NjcsNyArODA1LDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodHJ5X3RvX2RlbF90aW1lcl9zeW5jKTsKIAogLyoqCkBAIC03OTYsNyArODMzLDYgQEAKIAkJY3B1X3JlbGF4KCk7CiAJfQogfQotCiBFWFBPUlRfU1lNQk9MKGRlbF90aW1lcl9zeW5jKTsKICNlbmRpZgogCkBAIC0xMjY4LDcgKzEzMDQsNyBAQAogCWV4cGlyZSA9IHRpbWVvdXQgKyBqaWZmaWVzOwogCiAJc2V0dXBfdGltZXJfb25fc3RhY2soJnRpbWVyLCBwcm9jZXNzX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKWN1cnJlbnQpOwotCV9fbW9kX3RpbWVyKCZ0aW1lciwgZXhwaXJlKTsKKwlfX21vZF90aW1lcigmdGltZXIsIGV4cGlyZSwgZmFsc2UpOwogCXNjaGVkdWxlKCk7CiAJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmdGltZXIpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IGUyYTRmZjYuLjM0ZTcwN2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC01Miw2ICs1Miw3IEBACiAJZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IEZSQU1FX1BPSU5URVIKKwlzZWxlY3QgS0FMTFNZTVMKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAloZWxwCkBAIC0yMzgsNiArMjM5LDcgQEAKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBGVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgU1RBQ0tUUkFDRQorCXNlbGVjdCBLQUxMU1lNUwogCWhlbHAKIAkgIFRoaXMgc3BlY2lhbCB0cmFjZXIgcmVjb3JkcyB0aGUgbWF4aW11bSBzdGFjayBmb290cHJpbnQgb2YgdGhlCiAJICBrZXJuZWwgYW5kIGRpc3BsYXlzIGl0IGluIGRlYnVnZnMvdHJhY2luZy9zdGFja190cmFjZS4KQEAgLTMwMiw0ICszMDQsMjcgQEAKIAkgIGZ1bmN0aW9uaW5nIHByb3Blcmx5LiBJdCB3aWxsIGRvIHRlc3RzIG9uIGFsbCB0aGUgY29uZmlndXJlZAogCSAgdHJhY2VycyBvZiBmdHJhY2UuCiAKK2NvbmZpZyBNTUlPVFJBQ0UKKwlib29sICJNZW1vcnkgbWFwcGVkIElPIHRyYWNpbmciCisJZGVwZW5kcyBvbiBIQVZFX01NSU9UUkFDRV9TVVBQT1JUICYmIERFQlVHX0tFUk5FTCAmJiBQQ0kKKwlzZWxlY3QgVFJBQ0lORworCWhlbHAKKwkgIE1taW90cmFjZSB0cmFjZXMgTWVtb3J5IE1hcHBlZCBJL08gYWNjZXNzIGFuZCBpcyBtZWFudCBmb3IKKwkgIGRlYnVnZ2luZyBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZy4gSXQgaXMgY2FsbGVkIGZyb20gdGhlIGlvcmVtYXAKKwkgIGltcGxlbWVudGF0aW9uIGFuZCB3b3JrcyB2aWEgcGFnZSBmYXVsdHMuIFRyYWNpbmcgaXMgZGlzYWJsZWQgYnkKKwkgIGRlZmF1bHQgYW5kIGNhbiBiZSBlbmFibGVkIGF0IHJ1bi10aW1lLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQuCisJICBJZiB5b3UgYXJlIG5vdCBoZWxwaW5nIHRvIGRldmVsb3AgZHJpdmVycywgc2F5IE4uCisKK2NvbmZpZyBNTUlPVFJBQ0VfVEVTVAorCXRyaXN0YXRlICJUZXN0IG1vZHVsZSBmb3IgbW1pb3RyYWNlIgorCWRlcGVuZHMgb24gTU1JT1RSQUNFICYmIG0KKwloZWxwCisJICBUaGlzIGlzIGEgZHVtYiBtb2R1bGUgZm9yIHRlc3RpbmcgbW1pb3RyYWNlLiBJdCBpcyB2ZXJ5IGRhbmdlcm91cworCSAgYXMgaXQgd2lsbCB3cml0ZSBnYXJiYWdlIHRvIElPIG1lbW9yeSBzdGFydGluZyBhdCBhIGdpdmVuIGFkZHJlc3MuCisJICBIb3dldmVyLCBpdCBzaG91bGQgYmUgc2FmZSB0byB1c2Ugb24gZS5nLiB1bnVzZWQgcG9ydGlvbiBvZiBWUkFNLgorCisJICBTYXkgTiwgdW5sZXNzIHlvdSBhYnNvbHV0ZWx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggOWEyMzZmZi4uZmRmOTEzZCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMjAzMyw3ICsyMDMzLDcgQEAKIHN0YXRpYyBpbnQgc3RhcnRfZ3JhcGhfdHJhY2luZyh2b2lkKQogewogCXN0cnVjdCBmdHJhY2VfcmV0X3N0YWNrICoqcmV0X3N0YWNrX2xpc3Q7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBjcHU7CiAKIAlyZXRfc3RhY2tfbGlzdCA9IGttYWxsb2MoRlRSQUNFX1JFVFNUQUNLX0FMTE9DX1NJWkUgKgogCQkJCXNpemVvZihzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayAqKSwKQEAgLTIwNDIsNiArMjA0MiwxMCBAQAogCWlmICghcmV0X3N0YWNrX2xpc3QpCiAJCXJldHVybiAtRU5PTUVNOwogCisJLyogVGhlIGNwdV9ib290IGluaXRfdGFzay0+cmV0X3N0YWNrIHdpbGwgbmV2ZXIgYmUgZnJlZWQgKi8KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJZnRyYWNlX2dyYXBoX2luaXRfdGFzayhpZGxlX3Rhc2soY3B1KSk7CisKIAlkbyB7CiAJCXJldCA9IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHJldF9zdGFja19saXN0KTsKIAl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKaW5kZXggZmZmY2IwNi4uODBlNTAzZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgogCkBAIC0xOSw2ICsyMCw3IEBACiBzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICptbWlvX3RyYWNlX2FycmF5Owogc3RhdGljIGJvb2wgb3ZlcnJ1bl9kZXRlY3RlZDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfb3ZlcnJ1bnM7CitzdGF0aWMgYXRvbWljX3QgZHJvcHBlZF9jb3VudDsKIAogc3RhdGljIHZvaWQgbW1pb19yZXNldF9kYXRhKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CkBAIC0xMjEsMTEgKzEyMywxMSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9vdmVycnVucyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBjbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgY250ID0gYXRvbWljX3hjaGcoJmRyb3BwZWRfY291bnQsIDApOwogCXVuc2lnbmVkIGxvbmcgb3ZlciA9IHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItPnRyLT5idWZmZXIpOwogCiAJaWYgKG92ZXIgPiBwcmV2X292ZXJydW5zKQotCQljbnQgPSBvdmVyIC0gcHJldl9vdmVycnVuczsKKwkJY250ICs9IG92ZXIgLSBwcmV2X292ZXJydW5zOwogCXByZXZfb3ZlcnJ1bnMgPSBvdmVyOwogCXJldHVybiBjbnQ7CiB9CkBAIC0zMTAsOCArMzEyLDEwIEBACiAKIAlldmVudAk9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKIAkJCQkJICAgJmlycV9mbGFncyk7Ci0JaWYgKCFldmVudCkKKwlpZiAoIWV2ZW50KSB7CisJCWF0b21pY19pbmMoJmRyb3BwZWRfY291bnQpOwogCQlyZXR1cm47CisJfQogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgcHJlZW1wdF9jb3VudCgpKTsKIAllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX01NSU9fUlc7CkBAIC0zMzgsOCArMzQyLDEwIEBACiAKIAlldmVudAk9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKIAkJCQkJICAgJmlycV9mbGFncyk7Ci0JaWYgKCFldmVudCkKKwlpZiAoIWV2ZW50KSB7CisJCWF0b21pY19pbmMoJmRyb3BwZWRfY291bnQpOwogCQlyZXR1cm47CisJfQogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgcHJlZW1wdF9jb3VudCgpKTsKIAllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX01NSU9fTUFQOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwppbmRleCA4OGM4ZWI3Li5iYzhlODBhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwpAQCAtMjMsMTAgKzIzLDIwIEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGludCBsb29wcyA9IDA7CiAKIAl3aGlsZSAoKGV2ZW50ID0gcmluZ19idWZmZXJfY29uc3VtZSh0ci0+YnVmZmVyLCBjcHUsIE5VTEwpKSkgewogCQllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCisJCS8qCisJCSAqIFRoZSByaW5nIGJ1ZmZlciBpcyBhIHNpemUgb2YgdHJhY2VfYnVmX3NpemUsIGlmCisJCSAqIHdlIGxvb3AgbW9yZSB0aGFuIHRoZSBzaXplLCB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZworCQkgKiB3aXRoIHRoZSByaW5nIGJ1ZmZlci4KKwkJICovCisJCWlmIChsb29wcysrID4gdHJhY2VfYnVmX3NpemUpIHsKKwkJCXByaW50ayhLRVJOX0NPTlQgIi4uIGJhZCByaW5nIGJ1ZmZlciAiKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CiAJCWlmICghdHJhY2VfdmFsaWRfZW50cnkoZW50cnkpKSB7CiAJCQlwcmludGsoS0VSTl9DT05UICIuLiBpbnZhbGlkIGVudHJ5ICVkICIsCiAJCQkJZW50cnktPnR5cGUpOwpAQCAtNTcsMTEgKzY3LDIwIEBACiAKIAljbnQgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKHRyLT5idWZmZXIpOwogCisJLyoKKwkgKiBUaGUgdHJhY2VfdGVzdF9idWZmZXJfY3B1IHJ1bnMgYSB3aGlsZSBsb29wIHRvIGNvbnN1bWUgYWxsIGRhdGEuCisJICogSWYgdGhlIGNhbGxpbmcgdHJhY2VyIGlzIGJyb2tlbiwgYW5kIGlzIGNvbnN0YW50bHkgZmlsbGluZworCSAqIHRoZSBidWZmZXIsIHRoaXMgd2lsbCBydW4gZm9yZXZlciwgYW5kIGhhcmQgbG9jayB0aGUgYm94LgorCSAqIFdlIGRpc2FibGUgdGhlIHJpbmcgYnVmZmVyIHdoaWxlIHdlIGRvIHRoaXMgdGVzdCB0byBwcmV2ZW50CisJICogYSBoYXJkIGxvY2sgdXAuCisJICovCisJdHJhY2luZ19vZmYoKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXJldCA9IHRyYWNlX3Rlc3RfYnVmZmVyX2NwdSh0ciwgY3B1KTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KKwl0cmFjaW5nX29uKCk7CiAJX19yYXdfc3Bpbl91bmxvY2soJmZ0cmFjZV9tYXhfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHNhY2N0LmMgYi9rZXJuZWwvdHNhY2N0LmMKaW5kZXggNDNmODkxYi4uMDBkNTlkMCAxMDA2NDQKLS0tIGEva2VybmVsL3RzYWNjdC5jCisrKyBiL2tlcm5lbC90c2FjY3QuYwpAQCAtMTIyLDggKzEyMiwxMCBAQAogCWlmIChsaWtlbHkodHNrLT5tbSkpIHsKIAkJY3B1dGltZV90IHRpbWUsIGR0aW1lOwogCQlzdHJ1Y3QgdGltZXZhbCB2YWx1ZTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdTY0IGRlbHRhOwogCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJdGltZSA9IHRzay0+c3RpbWUgKyB0c2stPnV0aW1lOwogCQlkdGltZSA9IGNwdXRpbWVfc3ViKHRpbWUsIHRzay0+YWNjdF90aW1leHBkKTsKIAkJamlmZmllc190b190aW1ldmFsKGNwdXRpbWVfdG9famlmZmllcyhkdGltZSksICZ2YWx1ZSk7CkBAIC0xMzEsMTAgKzEzMywxMiBAQAogCQlkZWx0YSA9IGRlbHRhICogVVNFQ19QRVJfU0VDICsgdmFsdWUudHZfdXNlYzsKIAogCQlpZiAoZGVsdGEgPT0gMCkKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl0c2stPmFjY3RfdGltZXhwZCA9IHRpbWU7CiAJCXRzay0+YWNjdF9yc3NfbWVtMSArPSBkZWx0YSAqIGdldF9tbV9yc3ModHNrLT5tbSk7CiAJCXRzay0+YWNjdF92bV9tZW0xICs9IGRlbHRhICogdHNrLT5tbS0+dG90YWxfdm07CisJb3V0OgorCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCAzNTUxYWM3Li44NTBlMGJhIDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAogc3RydWN0IHVzZXJfbmFtZXNwYWNlIGluaXRfdXNlcl9ucyA9IHsKIAkua3JlZiA9IHsKLQkJLnJlZmNvdW50CT0gQVRPTUlDX0lOSVQoMSksCisJCS5yZWZjb3VudAk9IEFUT01JQ19JTklUKDIpLAogCX0sCiAJLmNyZWF0b3IgPSAmcm9vdF91c2VyLAogfTsKQEAgLTI4NiwxNCArMjg2LDEyIEBACiAvKiB3b3JrIGZ1bmN0aW9uIHRvIHJlbW92ZSBzeXNmcyBkaXJlY3RvcnkgZm9yIGEgdXNlciBhbmQgZnJlZSB1cAogICogY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmVzLgogICovCi1zdGF0aWMgdm9pZCByZW1vdmVfdXNlcl9zeXNmc19kaXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQorc3RhdGljIHZvaWQgY2xlYW51cF91c2VyX3N0cnVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiB7CiAJc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIHdvcmspOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlbW92ZV91c2VyID0gMDsKIAotCWlmICh1cC0+dXNlcl9ucyAhPSAmaW5pdF91c2VyX25zKQotCQlyZXR1cm47CiAJLyogTWFrZSB1aWRfaGFzaF9yZW1vdmUoKSArIHN5c2ZzX3JlbW92ZV9maWxlKCkgKyBrb2JqZWN0X2RlbCgpCiAJICogYXRvbWljLgogCSAqLwpAQCAtMzEyLDkgKzMxMCwxMSBAQAogCWlmICghcmVtb3ZlX3VzZXIpCiAJCWdvdG8gZG9uZTsKIAotCWtvYmplY3RfdWV2ZW50KCZ1cC0+a29iaiwgS09CSl9SRU1PVkUpOwotCWtvYmplY3RfZGVsKCZ1cC0+a29iaik7Ci0Ja29iamVjdF9wdXQoJnVwLT5rb2JqKTsKKwlpZiAodXAtPnVzZXJfbnMgPT0gJmluaXRfdXNlcl9ucykgeworCQlrb2JqZWN0X3VldmVudCgmdXAtPmtvYmosIEtPQkpfUkVNT1ZFKTsKKwkJa29iamVjdF9kZWwoJnVwLT5rb2JqKTsKKwkJa29iamVjdF9wdXQoJnVwLT5rb2JqKTsKKwl9CiAKIAlzY2hlZF9kZXN0cm95X3VzZXIodXApOwogCWtleV9wdXQodXAtPnVpZF9rZXlyaW5nKTsKQEAgLTMzNSw3ICszMzUsNyBAQAogCWF0b21pY19pbmMoJnVwLT5fX2NvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKIAotCUlOSVRfV09SSygmdXAtPndvcmssIHJlbW92ZV91c2VyX3N5c2ZzX2Rpcik7CisJSU5JVF9XT1JLKCZ1cC0+d29yaywgY2xlYW51cF91c2VyX3N0cnVjdCk7CiAJc2NoZWR1bGVfd29yaygmdXAtPndvcmspOwogfQogCkBAIC0zNjIsNiArMzYyLDI0IEBACiAKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfUlRfR1JPVVBfU0NIRUQpICYmIGRlZmluZWQoQ09ORklHX1VTRVJfU0NIRUQpCisvKgorICogV2UgbmVlZCB0byBjaGVjayBpZiBhIHNldHVpZCBjYW4gdGFrZSBwbGFjZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkCisgKiBiZWZvcmUgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIHNldHVpZC4KKyAqLworaW50IHRhc2tfY2FuX3N3aXRjaF91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCisJcmV0dXJuIHNjaGVkX3J0X2Nhbl9hdHRhY2godXAtPnRnLCB0c2spOworCit9CisjZWxzZQoraW50IHRhc2tfY2FuX3N3aXRjaF91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKIC8qCiAgKiBMb2NhdGUgdGhlIHVzZXJfc3RydWN0IGZvciB0aGUgcGFzc2VkIFVJRC4gIElmIGZvdW5kLCB0YWtlIGEgcmVmIG9uIGl0LiAgVGhlCiAgKiBjYWxsZXIgbXVzdCB1bmRvIHRoYXQgcmVmIHdpdGggZnJlZV91aWQoKS4KZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMKaW5kZXggNzkwODQzMS4uMDc2YzdjOCAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMKKysrIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMKQEAgLTYwLDEyICs2MCwyNSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGZyZWVfdXNlcl9ucyhzdHJ1Y3Qga3JlZiAqa3JlZikKKy8qCisgKiBEZWZlcnJlZCBkZXN0cnVjdG9yIGZvciBhIHVzZXIgbmFtZXNwYWNlLiAgVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlCisgKiBmcmVlX3VzZXJfbnMoKSBtYXkgYmUgY2FsbGVkIHdpdGggdWlkaGFzaF9sb2NrIGhlbGQsIGJ1dCB3ZSBuZWVkIHRvIGNhbGwKKyAqIGJhY2sgdG8gZnJlZV91aWQoKSB3aGljaCB3aWxsIHdhbnQgdG8gdGFrZSB0aGUgbG9jayBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQgZnJlZV91c2VyX25zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7Ci0KLQlucyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UsIGtyZWYpOworCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzZXJfbmFtZXNwYWNlLCBkZXN0cm95ZXIpOwogCWZyZWVfdWlkKG5zLT5jcmVhdG9yKTsKIAlrZnJlZShucyk7CiB9CisKK3ZvaWQgZnJlZV91c2VyX25zKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMgPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHVzZXJfbmFtZXNwYWNlLCBrcmVmKTsKKworCUlOSVRfV09SSygmbnMtPmRlc3Ryb3llciwgZnJlZV91c2VyX25zX3dvcmspOworCXNjaGVkdWxlX3dvcmsoJm5zLT5kZXN0cm95ZXIpOworfQogRVhQT1JUX1NZTUJPTChmcmVlX3VzZXJfbnMpOwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAwM2MyYzI0Li41NGFhZjRmIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMTM2LDEyICsxMzYsNiBAQAogY29uZmlnIFRFWFRTRUFSQ0hfRlNNCiAJdHJpc3RhdGUKIAotIwotIyBwbGlzdCBzdXBwb3J0IGlzIHNlbGVjdCNlZCBpZiBuZWVkZWQKLSMKLWNvbmZpZyBQTElTVAotCWJvb2xlYW4KLQogY29uZmlnIEhBU19JT01FTQogCWJvb2xlYW4KIAlkZXBlbmRzIG9uICFOT19JT01FTQpAQCAtMTc0LDQgKzE2OCwxMCBAQAogICAgICAgIGJvb2wgIkRpc2FibGUgb2Jzb2xldGUgY3B1bWFzayBmdW5jdGlvbnMiIGlmIERFQlVHX1BFUl9DUFVfTUFQUwogICAgICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEJST0tFTgogCisjCisjIE5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgc3VwcG9ydCBpcyBzZWxlY3QnZWQgaWYgbmVlZGVkCisjCitjb25maWcgTkxBVFRSCisJYm9vbAorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDI5MDQ0ZjUuLjhmZWUwYTEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC04MzgsNyArODM4LDcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotbWVudWNvbmZpZyBCVUlMRF9ET0NTUkMKK2NvbmZpZyBCVUlMRF9ET0NTUkMKIAlib29sICJCdWlsZCB0YXJnZXRzIGluIERvY3VtZW50YXRpb24vIHRyZWUiCiAJZGVwZW5kcyBvbiBIRUFERVJTX0NIRUNLCiAJaGVscApAQCAtODQ3LDYwICs4NDcsNzAgQEAKIAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKLWNvbmZpZyBEWU5BTUlDX1BSSU5US19ERUJVRwotCWJvb2wgIkVuYWJsZSBkeW5hbWljIHByaW50aygpIGNhbGwgc3VwcG9ydCIKK2NvbmZpZyBEWU5BTUlDX0RFQlVHCisJYm9vbCAiRW5hYmxlIGR5bmFtaWMgcHJpbnRrKCkgc3VwcG9ydCIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIFBSSU5USworCWRlcGVuZHMgb24gREVCVUdfRlMKIAlzZWxlY3QgUFJJTlRLX0RFQlVHCiAJaGVscAogCiAJICBDb21waWxlcyBkZWJ1ZyBsZXZlbCBtZXNzYWdlcyBpbnRvIHRoZSBrZXJuZWwsIHdoaWNoIHdvdWxkIG5vdAogCSAgb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSBhdCBydW50aW1lLiBUaGVzZSBtZXNzYWdlcyBjYW4gdGhlbiBiZQotCSAgZW5hYmxlZC9kaXNhYmxlZCBvbiBhIHBlciBtb2R1bGUgYmFzaXMuIFRoaXMgbWVjaGFuaXNtIGltcGxpY2l0bHkKLQkgIGVuYWJsZXMgYWxsIHByX2RlYnVnKCkgYW5kIGRldl9kYmcoKSBjYWxscy4gVGhlIGltcGFjdCBvZiB0aGlzCi0JICBjb21waWxlIG9wdGlvbiBpcyBhIGxhcmdlciBrZXJuZWwgdGV4dCBzaXplIG9mIGFib3V0IDIlLgorCSAgZW5hYmxlZC9kaXNhYmxlZCBiYXNlZCBvbiB2YXJpb3VzIGxldmVscyBvZiBzY29wZSAtIHBlciBzb3VyY2UgZmlsZSwKKwkgIGZ1bmN0aW9uLCBtb2R1bGUsIGZvcm1hdCBzdHJpbmcsIGFuZCBsaW5lIG51bWJlci4gVGhpcyBtZWNoYW5pc20KKwkgIGltcGxpY2l0bHkgZW5hYmxlcyBhbGwgcHJfZGVidWcoKSBhbmQgZGV2X2RiZygpIGNhbGxzLiBUaGUgaW1wYWN0IG9mCisJICB0aGlzIGNvbXBpbGUgb3B0aW9uIGlzIGEgbGFyZ2VyIGtlcm5lbCB0ZXh0IHNpemUgb2YgYWJvdXQgMiUuCiAKIAkgIFVzYWdlOgogCi0JICBEeW5hbWljIGRlYnVnZ2luZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBkZWJ1Z2ZzIGZpbGUsCi0JICBkeW5hbWljX3ByaW50ay9tb2R1bGVzLiBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBtb2R1bGVzIHRoYXQKLQkgIGNhbiBiZSBlbmFibGVkLiBUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIGlzIHRoZSBtb2R1bGUgbmFtZSwgZm9sbG93ZWQKLQkgIGJ5IGEgc2V0IG9mIGZsYWdzIHRoYXQgY2FuIGJlIGVuYWJsZWQuIFRoZSBmaXJzdCBmbGFnIGlzIGFsd2F5cyB0aGUKLQkgICdlbmFibGVkJyBmbGFnLiBGb3IgZXhhbXBsZToKKwkgIER5bmFtaWMgZGVidWdnaW5nIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSAnZHluYW1pY19kZWJ1Zy9kZGVidWcnIGZpbGUsCisJICB3aGljaCBpcyBjb250YWluZWQgaW4gdGhlICdkZWJ1Z2ZzJyBmaWxlc3lzdGVtLiBUaHVzLCB0aGUgZGVidWdmcworCSAgZmlsZXN5c3RlbSBtdXN0IGZpcnN0IGJlIG1vdW50ZWQgYmVmb3JlIG1ha2luZyB1c2Ugb2YgdGhpcyBmZWF0dXJlLgorCSAgV2UgcmVmZXIgdGhlIGNvbnRyb2wgZmlsZSBhczogPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnLiBUaGlzCisJICBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgZGVidWcgc3RhdGVtZW50cyB0aGF0IGNhbiBiZSBlbmFibGVkLiBUaGUKKwkgIGZvcm1hdCBmb3IgZWFjaCBsaW5lIG9mIHRoZSBmaWxlIGlzOgogCi0JCTxtb2R1bGVfbmFtZT4gPGVuYWJsZWQ9MC8xPgotCQkJCS4KLQkJCQkuCi0JCQkJLgorCQlmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKIAotCSAgPG1vZHVsZV9uYW1lPiA6IE5hbWUgb2YgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZGVidWcgY2FsbCByZXNpZGVzCi0JICA8ZW5hYmxlZD0wLzE+IDogd2hldGhlciB0aGUgbWVzc2FnZXMgYXJlIGVuYWJsZWQgb3Igbm90CisJICBmaWxlbmFtZSA6IHNvdXJjZSBmaWxlIG9mIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKKwkgIGxpbmVubyA6IGxpbmUgbnVtYmVyIG9mIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKKwkgIG1vZHVsZSA6IG1vZHVsZSB0aGF0IGNvbnRhaW5zIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKKwkgIGZ1bmN0aW9uIDogZnVuY3Rpb24gdGhhdCBjb250YWlucyB0aGUgZGVidWcgc3RhdGVtZW50CisgICAgICAgICAgZmxhZ3MgOiAncCcgbWVhbnMgdGhlIGxpbmUgaXMgdHVybmVkICdvbicgZm9yIHByaW50aW5nCisgICAgICAgICAgZm9ybWF0IDogdGhlIGZvcm1hdCB1c2VkIGZvciB0aGUgZGVidWcgc3RhdGVtZW50CiAKIAkgIEZyb20gYSBsaXZlIHN5c3RlbToKIAotCQlzbmRfaGRhX2ludGVsIGVuYWJsZWQ9MAotCQlmaXh1cCBlbmFibGVkPTAKLQkJZHJpdmVyIGVuYWJsZWQ9MAorCQludWxsYXJib3I6fiAjIGNhdCA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKKwkJIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKKwkJZnMvYWlvLmM6MjIyIFthaW9dX19wdXRfaW9jdHggLSAiX19wdXRfaW9jdHg6XDA0MGZyZWVpbmdcMDQwJXBcMDEyIgorCQlmcy9haW8uYzoyNDggW2Fpb11pb2N0eF9hbGxvYyAtICJFTk9NRU06XDA0MG5yX2V2ZW50c1wwNDB0b29cMDQwaGlnaFwwMTIiCisJCWZzL2Fpby5jOjE3NzAgW2Fpb11zeXNfaW9fY2FuY2VsIC0gImNhbGxpbmdcMDQwY2FuY2VsXDAxMiIKIAotCSAgRW5hYmxlIGEgbW9kdWxlOgorCSAgRXhhbXBsZSB1c2FnZToKIAotCSAgCSRlY2hvICJzZXQgZW5hYmxlZD0xIDxtb2R1bGVfbmFtZT4iID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCQkvLyBlbmFibGUgdGhlIG1lc3NhZ2UgYXQgbGluZSAxNjAzIG9mIGZpbGUgc3Zjc29jay5jCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRGlzYWJsZSBhIG1vZHVsZToKKwkJLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gZmlsZSBzdmNzb2NrLmMKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MCA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gdGhlIE5GUyBzZXJ2ZXIgbW9kdWxlCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnbW9kdWxlIG5mc2QgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICBFbmFibGUgYWxsIG1vZHVsZXM6CisJCS8vIGVuYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCQkkZWNobyAic2V0IGVuYWJsZWQ9MSBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCQkvLyBkaXNhYmxlIGFsbCAxMiBtZXNzYWdlcyBpbiB0aGUgZnVuY3Rpb24gc3ZjX3Byb2Nlc3MoKQorCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgLXAnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICBEaXNhYmxlIGFsbCBtb2R1bGVzOgotCi0JCSRlY2hvICJzZXQgZW5hYmxlZD0wIGFsbCIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCi0KLQkgIEZpbmFsbHksIHBhc3NpbmcgImR5bmFtaWNfcHJpbnRrIiBhdCB0aGUgY29tbWFuZCBsaW5lIGVuYWJsZXMKLQkgIGRlYnVnZ2luZyBmb3IgYWxsIG1vZHVsZXMuIFRoaXMgbW9kZSBjYW4gYmUgdHVybmVkIG9mZiB2aWEgdGhlIGFib3ZlCi0JICBkaXNhYmxlIGNvbW1hbmQuCisJICBTZWUgRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KIAogc291cmNlICJzYW1wbGVzL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCAzMmIwZTY0Li44YmRjNjQ3IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw4IEBACiAJIHJidHJlZS5vIHJhZGl4LXRyZWUubyBkdW1wX3N0YWNrLm8gXAogCSBpZHIubyBpbnRfc3FydC5vIGV4dGFibGUubyBwcmlvX3RyZWUubyBcCiAJIHNoYTEubyBpcnFfcmVncy5vIHJlY2lwcm9jYWxfZGl2Lm8gYXJndl9zcGxpdC5vIFwKLQkgcHJvcG9ydGlvbnMubyBwcmlvX2hlYXAubyByYXRlbGltaXQubyBzaG93X21lbS5vIGlzX3NpbmdsZV90aHJlYWRlZC5vCisJIHByb3BvcnRpb25zLm8gcHJpb19oZWFwLm8gcmF0ZWxpbWl0Lm8gc2hvd19tZW0ubyBcCisJIGlzX3NpbmdsZV90aHJlYWRlZC5vIHBsaXN0Lm8KIAogbGliLSQoQ09ORklHX01NVSkgKz0gaW9yZW1hcC5vCiBsaWItJChDT05GSUdfU01QKSArPSBjcHVtYXNrLm8KQEAgLTQwLDcgKzQxLDYgQEAKIGxpYi0kKENPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQpICs9IGZpbmRfbGFzdF9iaXQubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfSFdFSUdIVCkgKz0gaHdlaWdodC5vCiBvYmotJChDT05GSUdfTE9DS19LRVJORUwpICs9IGtlcm5lbF9sb2NrLm8KLW9iai0kKENPTkZJR19QTElTVCkgKz0gcGxpc3Qubwogb2JqLSQoQ09ORklHX0RFQlVHX1BSRUVNUFQpICs9IHNtcF9wcm9jZXNzb3JfaWQubwogb2JqLSQoQ09ORklHX0RFQlVHX0xJU1QpICs9IGxpc3RfZGVidWcubwogb2JqLSQoQ09ORklHX0RFQlVHX09CSkVDVFMpICs9IGRlYnVnb2JqZWN0cy5vCkBAIC04Miw3ICs4Miw5IEBACiAKIG9iai0kKENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LKSArPSBzeXNjYWxsLm8KIAotb2JqLSQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKSArPSBkeW5hbWljX3ByaW50ay5vCitvYmotJChDT05GSUdfRFlOQU1JQ19ERUJVRykgKz0gZHluYW1pY19kZWJ1Zy5vCisKK29iai0kKENPTkZJR19OTEFUVFIpICs9IG5sYXR0ci5vCiAKIGhvc3Rwcm9ncy15CTo9IGdlbl9jcmMzMnRhYmxlCiBjbGVhbi1maWxlcwk6PSBjcmMzMnRhYmxlLmgKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCAxMzM4NDY5Li4zNWExZjdmIDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC05NDgsMTUgKzk0OCwxNSBAQAogICovCiBpbnQgYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgYml0cywgaW50IG9yZGVyKQogewotCWludCBwb3M7CQkvKiBzY2FucyBiaXRtYXAgYnkgcmVnaW9ucyBvZiBzaXplIG9yZGVyICovCisJaW50IHBvcywgZW5kOwkJLyogc2NhbnMgYml0bWFwIGJ5IHJlZ2lvbnMgb2Ygc2l6ZSBvcmRlciAqLwogCi0JZm9yIChwb3MgPSAwOyBwb3MgPCBiaXRzOyBwb3MgKz0gKDEgPDwgb3JkZXIpKQotCQlpZiAoX19yZWdfb3AoYml0bWFwLCBwb3MsIG9yZGVyLCBSRUdfT1BfSVNGUkVFKSkKLQkJCWJyZWFrOwotCWlmIChwb3MgPT0gYml0cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JX19yZWdfb3AoYml0bWFwLCBwb3MsIG9yZGVyLCBSRUdfT1BfQUxMT0MpOwotCXJldHVybiBwb3M7CisJZm9yIChwb3MgPSAwIDsgKGVuZCA9IHBvcyArICgxIDw8IG9yZGVyKSkgPD0gYml0czsgcG9zID0gZW5kKSB7CisJCWlmICghX19yZWdfb3AoYml0bWFwLCBwb3MsIG9yZGVyLCBSRUdfT1BfSVNGUkVFKSkKKwkJCWNvbnRpbnVlOworCQlfX3JlZ19vcChiaXRtYXAsIHBvcywgb3JkZXIsIFJFR19PUF9BTExPQyk7CisJCXJldHVybiBwb3M7CisJfQorCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTChiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbik7CiAKZGlmZiAtLWdpdCBhL2xpYi9keW5hbWljX2RlYnVnLmMgYi9saWIvZHluYW1pY19kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzEzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZHluYW1pY19kZWJ1Zy5jCkBAIC0wLDAgKzEsNzY5IEBACisvKgorICogbGliL2R5bmFtaWNfZGVidWcuYworICoKKyAqIG1ha2UgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgcnVudGltZSBjb25maWd1cmFibGUgYmFzZWQgdXBvbiB0aGVpcgorICogc291cmNlIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFzb24gQmFyb24gPGpiYXJvbkByZWRoYXQuY29tPgorICogQnkgR3JlZyBCYW5rcyA8Z25iQG1lbGJvdXJuZS5zZ2kuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisKK2V4dGVybiBzdHJ1Y3QgX2RkZWJ1ZyBfX3N0YXJ0X19fdmVyYm9zZVtdOworZXh0ZXJuIHN0cnVjdCBfZGRlYnVnIF9fc3RvcF9fX3ZlcmJvc2VbXTsKKworLyogZHluYW1pY19kZWJ1Z19lbmFibGVkLCBhbmQgZHluYW1pY19kZWJ1Z19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKKyAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKKyAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgorICovCitsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkOworRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19kZWJ1Z19lbmFibGVkKTsKK2xvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQyOworRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19kZWJ1Z19lbmFibGVkMik7CisKK3N0cnVjdCBkZGVidWdfdGFibGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwljaGFyICptb2RfbmFtZTsKKwl1bnNpZ25lZCBpbnQgbnVtX2RkZWJ1Z3M7CisJdW5zaWduZWQgaW50IG51bV9lbmFibGVkOworCXN0cnVjdCBfZGRlYnVnICpkZGVidWdzOworfTsKKworc3RydWN0IGRkZWJ1Z19xdWVyeSB7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY29uc3QgY2hhciAqbW9kdWxlOworCWNvbnN0IGNoYXIgKmZ1bmN0aW9uOworCWNvbnN0IGNoYXIgKmZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgZmlyc3RfbGluZW5vLCBsYXN0X2xpbmVubzsKK307CisKK3N0cnVjdCBkZGVidWdfaXRlciB7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqdGFibGU7CisJdW5zaWduZWQgaW50IGlkeDsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZGRlYnVnX2xvY2spOworc3RhdGljIExJU1RfSEVBRChkZGVidWdfdGFibGVzKTsKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IDA7CisKKy8qIFJldHVybiB0aGUgbGFzdCBwYXJ0IG9mIGEgcGF0aG5hbWUgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICp0YWlsID0gc3RycmNocihwYXRoLCAnLycpOworCXJldHVybiB0YWlsID8gdGFpbCsxIDogcGF0aDsKK30KKworLyogZm9ybWF0IGEgc3RyaW5nIGludG8gYnVmW10gd2hpY2ggZGVzY3JpYmVzIHRoZSBfZGRlYnVnJ3MgZmxhZ3MgKi8KK3N0YXRpYyBjaGFyICpkZGVidWdfZGVzY3JpYmVfZmxhZ3Moc3RydWN0IF9kZGVidWcgKmRwLCBjaGFyICpidWYsCisJCQkJICAgIHNpemVfdCBtYXhsZW4pCit7CisJY2hhciAqcCA9IGJ1ZjsKKworCUJVR19PTihtYXhsZW4gPCA0KTsKKwlpZiAoZHAtPmZsYWdzICYgX0RQUklOVEtfRkxBR1NfUFJJTlQpCisJCSpwKysgPSAncCc7CisJaWYgKHAgPT0gYnVmKQorCQkqcCsrID0gJy0nOworCSpwID0gJ1wwJzsKKworCXJldHVybiBidWY7Cit9CisKKy8qCisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGRkZWJ1Z19sb2NrIGhlbGQKKyAqLworCitzdGF0aWMgaW50IGRpc2FibGVkX2hhc2goY2hhciBoYXNoLCBib29sIGZpcnN0X3RhYmxlKQoreworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0OworCWNoYXIgdGFibGVfaGFzaF92YWx1ZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHQsICZkZGVidWdfdGFibGVzLCBsaW5rKSB7CisJCWlmIChmaXJzdF90YWJsZSkKKwkJCXRhYmxlX2hhc2hfdmFsdWUgPSBkdC0+ZGRlYnVncy0+cHJpbWFyeV9oYXNoOworCQllbHNlCisJCQl0YWJsZV9oYXNoX3ZhbHVlID0gZHQtPmRkZWJ1Z3MtPnNlY29uZGFyeV9oYXNoOworCQlpZiAoZHQtPm51bV9lbmFibGVkICYmIChoYXNoID09IHRhYmxlX2hhc2hfdmFsdWUpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogU2VhcmNoIHRoZSB0YWJsZXMgZm9yIF9kZGVidWcncyB3aGljaCBtYXRjaCB0aGUgZ2l2ZW4KKyAqIGBxdWVyeScgYW5kIGFwcGx5IHRoZSBgZmxhZ3MnIGFuZCBgbWFzaycgdG8gdGhlbS4gIFRlbGxzCisgKiB0aGUgdXNlciB3aGljaCBkZGVidWcncyB3ZXJlIGNoYW5nZWQsIG9yIHdoZXRoZXIgbm9uZQorICogd2VyZSBtYXRjaGVkLgorICovCitzdGF0aWMgdm9pZCBkZGVidWdfY2hhbmdlKGNvbnN0IHN0cnVjdCBkZGVidWdfcXVlcnkgKnF1ZXJ5LAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwl1bnNpZ25lZCBpbnQgbmV3ZmxhZ3M7CisJdW5zaWduZWQgaW50IG5mb3VuZCA9IDA7CisJY2hhciBmbGFnYnVmWzhdOworCisJLyogc2VhcmNoIGZvciBtYXRjaGluZyBkZGVidWdzICovCisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHQsICZkZGVidWdfdGFibGVzLCBsaW5rKSB7CisKKwkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgbW9kdWxlIG5hbWUgKi8KKwkJaWYgKHF1ZXJ5LT5tb2R1bGUgIT0gTlVMTCAmJgorCQkgICAgc3RyY21wKHF1ZXJ5LT5tb2R1bGUsIGR0LT5tb2RfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwIDsgaSA8IGR0LT5udW1fZGRlYnVncyA7IGkrKykgeworCQkJc3RydWN0IF9kZGVidWcgKmRwID0gJmR0LT5kZGVidWdzW2ldOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBzb3VyY2UgZmlsZW5hbWUgKi8KKwkJCWlmIChxdWVyeS0+ZmlsZW5hbWUgIT0gTlVMTCAmJgorCQkJICAgIHN0cmNtcChxdWVyeS0+ZmlsZW5hbWUsIGRwLT5maWxlbmFtZSkgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZpbGVuYW1lLCBiYXNlbmFtZShkcC0+ZmlsZW5hbWUpKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgZnVuY3Rpb24gKi8KKwkJCWlmIChxdWVyeS0+ZnVuY3Rpb24gIT0gTlVMTCAmJgorCQkJICAgIHN0cmNtcChxdWVyeS0+ZnVuY3Rpb24sIGRwLT5mdW5jdGlvbikpCisJCQkJY29udGludWU7CisKKwkJCS8qIG1hdGNoIGFnYWluc3QgdGhlIGZvcm1hdCAqLworCQkJaWYgKHF1ZXJ5LT5mb3JtYXQgIT0gTlVMTCAmJgorCQkJICAgIHN0cnN0cihkcC0+Zm9ybWF0LCBxdWVyeS0+Zm9ybWF0KSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBsaW5lIG51bWJlciByYW5nZSAqLworCQkJaWYgKHF1ZXJ5LT5maXJzdF9saW5lbm8gJiYKKwkJCSAgICBkcC0+bGluZW5vIDwgcXVlcnktPmZpcnN0X2xpbmVubykKKwkJCQljb250aW51ZTsKKwkJCWlmIChxdWVyeS0+bGFzdF9saW5lbm8gJiYKKwkJCSAgICBkcC0+bGluZW5vID4gcXVlcnktPmxhc3RfbGluZW5vKQorCQkJCWNvbnRpbnVlOworCisJCQluZm91bmQrKzsKKworCQkJbmV3ZmxhZ3MgPSAoZHAtPmZsYWdzICYgbWFzaykgfCBmbGFnczsKKwkJCWlmIChuZXdmbGFncyA9PSBkcC0+ZmxhZ3MpCisJCQkJY29udGludWU7CisKKwkJCWlmICghbmV3ZmxhZ3MpCisJCQkJZHQtPm51bV9lbmFibGVkLS07CisJCQllbHNlIGlmICghZHAtZmxhZ3MpCisJCQkJZHQtPm51bV9lbmFibGVkKys7CisJCQlkcC0+ZmxhZ3MgPSBuZXdmbGFnczsKKwkJCWlmIChuZXdmbGFncykgeworCQkJCWR5bmFtaWNfZGVidWdfZW5hYmxlZCB8PQorCQkJCQkJKDFMTCA8PCBkcC0+cHJpbWFyeV9oYXNoKTsKKwkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQyIHw9CisJCQkJCQkoMUxMIDw8IGRwLT5zZWNvbmRhcnlfaGFzaCk7CisJCQl9IGVsc2UgeworCQkJCWlmIChkaXNhYmxlZF9oYXNoKGRwLT5wcmltYXJ5X2hhc2gsIHRydWUpKQorCQkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQgJj0KKwkJCQkJCX4oMUxMIDw8IGRwLT5wcmltYXJ5X2hhc2gpOworCQkJCWlmIChkaXNhYmxlZF9oYXNoKGRwLT5zZWNvbmRhcnlfaGFzaCwgZmFsc2UpKQorCQkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQyICY9CisJCQkJCQl+KDFMTCA8PCBkcC0+c2Vjb25kYXJ5X2hhc2gpOworCQkJfQorCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkiZGRlYnVnOiBjaGFuZ2VkICVzOiVkIFslc10lcyAlc1xuIiwKKwkJCQkJZHAtPmZpbGVuYW1lLCBkcC0+bGluZW5vLAorCQkJCQlkdC0+bW9kX25hbWUsIGRwLT5mdW5jdGlvbiwKKwkJCQkJZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKGRwLCBmbGFnYnVmLAorCQkJCQkJCXNpemVvZihmbGFnYnVmKSkpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworCisJaWYgKCFuZm91bmQgJiYgdmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZGRlYnVnOiBubyBtYXRjaGVzIGZvciBxdWVyeVxuIik7Cit9CisKKy8qCisgKiBTcGxpdCB0aGUgYnVmZmVyIGBidWYnIGludG8gc3BhY2Utc2VwYXJhdGVkIHdvcmRzLgorICogSGFuZGxlcyBzaW1wbGUgIiBhbmQgJyBxdW90aW5nLCBpLmUuIHdpdGhvdXQgbmVzdGVkLAorICogZW1iZWRkZWQgb3IgZXNjYXBlZCBcIi4gIFJldHVybiB0aGUgbnVtYmVyIG9mIHdvcmRzCisgKiBvciA8MCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBkZGVidWdfdG9rZW5pemUoY2hhciAqYnVmLCBjaGFyICp3b3Jkc1tdLCBpbnQgbWF4d29yZHMpCit7CisJaW50IG53b3JkcyA9IDA7CisKKwl3aGlsZSAoKmJ1ZikgeworCQljaGFyICplbmQ7CisKKwkJLyogU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwkJd2hpbGUgKCpidWYgJiYgaXNzcGFjZSgqYnVmKSkKKwkJCWJ1ZisrOworCQlpZiAoISpidWYpCisJCQlicmVhazsJLyogb2gsIGl0IHdhcyB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisKKwkJLyogUnVuIGBlbmQnIG92ZXIgYSB3b3JkLCBlaXRoZXIgd2hpdGVzcGFjZSBzZXBhcmF0ZWQgb3IgcXVvdGVkICovCisJCWlmICgqYnVmID09ICciJyB8fCAqYnVmID09ICdcJycpIHsKKwkJCWludCBxdW90ZSA9ICpidWYrKzsKKwkJCWZvciAoZW5kID0gYnVmIDsgKmVuZCAmJiAqZW5kICE9IHF1b3RlIDsgZW5kKyspCisJCQkJOworCQkJaWYgKCEqZW5kKQorCQkJCXJldHVybiAtRUlOVkFMOwkvKiB1bmNsb3NlZCBxdW90ZSAqLworCQl9IGVsc2UgeworCQkJZm9yIChlbmQgPSBidWYgOyAqZW5kICYmICFpc3NwYWNlKCplbmQpIDsgZW5kKyspCisJCQkJOworCQkJQlVHX09OKGVuZCA9PSBidWYpOworCQl9CisJCS8qIEhlcmUgYGJ1ZicgaXMgdGhlIHN0YXJ0IG9mIHRoZSB3b3JkLCBgZW5kJyBpcyBvbmUgcGFzdCB0aGUgZW5kICovCisKKwkJaWYgKG53b3JkcyA9PSBtYXh3b3JkcykKKwkJCXJldHVybiAtRUlOVkFMOwkvKiByYW4gb3V0IG9mIHdvcmRzW10gYmVmb3JlIGJ5dGVzICovCisJCWlmICgqZW5kKQorCQkJKmVuZCsrID0gJ1wwJzsJLyogdGVybWluYXRlIHRoZSB3b3JkICovCisJCXdvcmRzW253b3JkcysrXSA9IGJ1ZjsKKwkJYnVmID0gZW5kOworCX0KKworCWlmICh2ZXJib3NlKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogc3BsaXQgaW50byB3b3JkczoiLCBfX2Z1bmNfXyk7CisJCWZvciAoaSA9IDAgOyBpIDwgbndvcmRzIDsgaSsrKQorCQkJcHJpbnRrKCIgXCIlc1wiIiwgd29yZHNbaV0pOworCQlwcmludGsoIlxuIik7CisJfQorCisJcmV0dXJuIG53b3JkczsKK30KKworLyoKKyAqIFBhcnNlIGEgc2luZ2xlIGxpbmUgbnVtYmVyLiAgTm90ZSB0aGF0IHRoZSBlbXB0eSBzdHJpbmcgIiIKKyAqIGlzIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UgYW5kIGNvbnZlcnRlZCB0byB6ZXJvLCB3aGljaAorICogaXMgbGF0ZXIgdHJlYXRlZCBhcyBhICJkb24ndCBjYXJlIiB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbGluZW5vKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50ICp2YWwpCit7CisJY2hhciAqZW5kID0gTlVMTDsKKwlCVUdfT04oc3RyID09IE5VTEwpOworCWlmICgqc3RyID09ICdcMCcpIHsKKwkJKnZhbCA9IDA7CisJCXJldHVybiAwOworCX0KKwkqdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kLCAxMCk7CisJcmV0dXJuIGVuZCA9PSBOVUxMIHx8IGVuZCA9PSBzdHIgfHwgKmVuZCAhPSAnXDAnID8gLUVJTlZBTCA6IDA7Cit9CisKKy8qCisgKiBVbmRvIG9jdGFsIGVzY2FwaW5nIGluIGEgc3RyaW5nLCBpbnBsYWNlLiAgVGhpcyBpcyB1c2VmdWwgdG8KKyAqIGFsbG93IHRoZSB1c2VyIHRvIGV4cHJlc3MgYSBxdWVyeSB3aGljaCBtYXRjaGVzIGEgZm9ybWF0CisgKiBjb250YWluaW5nIGVtYmVkZGVkIHNwYWNlcy4KKyAqLworI2RlZmluZSBpc29kaWdpdChjKQkJKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc3JykKK3N0YXRpYyBjaGFyICp1bmVzY2FwZShjaGFyICpzdHIpCit7CisJY2hhciAqaW4gPSBzdHI7CisJY2hhciAqb3V0ID0gc3RyOworCisJd2hpbGUgKCppbikgeworCQlpZiAoKmluID09ICdcXCcpIHsKKwkJCWlmIChpblsxXSA9PSAnXFwnKSB7CisJCQkJKm91dCsrID0gJ1xcJzsKKwkJCQlpbiArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChpblsxXSA9PSAndCcpIHsKKwkJCQkqb3V0KysgPSAnXHQnOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGluWzFdID09ICduJykgeworCQkJCSpvdXQrKyA9ICdcbic7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoaXNvZGlnaXQoaW5bMV0pICYmCisJCQkgICAgICAgICBpc29kaWdpdChpblsyXSkgJiYKKwkJCSAgICAgICAgIGlzb2RpZ2l0KGluWzNdKSkgeworCQkJCSpvdXQrKyA9ICgoaW5bMV0gLSAnMCcpPDw2KSB8CisJCQkJICAgICAgICAgICgoaW5bMl0gLSAnMCcpPDwzKSB8CisJCQkJICAgICAgICAgIChpblszXSAtICcwJyk7CisJCQkJaW4gKz0gNDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQkqb3V0KysgPSAqaW4rKzsKKwl9CisJKm91dCA9ICdcMCc7CisKKwlyZXR1cm4gc3RyOworfQorCisvKgorICogUGFyc2Ugd29yZHNbXSBhcyBhIGRkZWJ1ZyBxdWVyeSBzcGVjaWZpY2F0aW9uLCB3aGljaCBpcyBhIHNlcmllcworICogb2YgKGtleXdvcmQsIHZhbHVlKSBwYWlycyBjaG9zZW4gZnJvbSB0aGVzZSBwb3NzaWJpbGl0aWVzOgorICoKKyAqIGZ1bmMgPGZ1bmN0aW9uLW5hbWU+CisgKiBmaWxlIDxmdWxsLXBhdGhuYW1lPgorICogZmlsZSA8YmFzZS1maWxlbmFtZT4KKyAqIG1vZHVsZSA8bW9kdWxlLW5hbWU+CisgKiBmb3JtYXQgPGVzY2FwZWQtc3RyaW5nLXRvLWZpbmQtaW4tZm9ybWF0PgorICogbGluZSA8bGluZW5vPgorICogbGluZSA8Zmlyc3QtbGluZW5vPi08bGFzdC1saW5lbm8+IC8vIHdoZXJlIGVpdGhlciBtYXkgYmUgZW1wdHkKKyAqLworc3RhdGljIGludCBkZGVidWdfcGFyc2VfcXVlcnkoY2hhciAqd29yZHNbXSwgaW50IG53b3JkcywKKwkJCSAgICAgICBzdHJ1Y3QgZGRlYnVnX3F1ZXJ5ICpxdWVyeSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIGNoZWNrIHdlIGhhdmUgYW4gZXZlbiBudW1iZXIgb2Ygd29yZHMgKi8KKwlpZiAobndvcmRzICUgMiAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQocXVlcnksIDAsIHNpemVvZigqcXVlcnkpKTsKKworCWZvciAoaSA9IDAgOyBpIDwgbndvcmRzIDsgaSArPSAyKSB7CisJCWlmICghc3RyY21wKHdvcmRzW2ldLCAiZnVuYyIpKQorCQkJcXVlcnktPmZ1bmN0aW9uID0gd29yZHNbaSsxXTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZpbGUiKSkKKwkJCXF1ZXJ5LT5maWxlbmFtZSA9IHdvcmRzW2krMV07CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJtb2R1bGUiKSkKKwkJCXF1ZXJ5LT5tb2R1bGUgPSB3b3Jkc1tpKzFdOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAiZm9ybWF0IikpCisJCQlxdWVyeS0+Zm9ybWF0ID0gdW5lc2NhcGUod29yZHNbaSsxXSk7CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJsaW5lIikpIHsKKwkJCWNoYXIgKmZpcnN0ID0gd29yZHNbaSsxXTsKKwkJCWNoYXIgKmxhc3QgPSBzdHJjaHIoZmlyc3QsICctJyk7CisJCQlpZiAobGFzdCkKKwkJCQkqbGFzdCsrID0gJ1wwJzsKKwkJCWlmIChwYXJzZV9saW5lbm8oZmlyc3QsICZxdWVyeS0+Zmlyc3RfbGluZW5vKSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAobGFzdCAhPSBOVUxMKSB7CisJCQkJLyogcmFuZ2UgPGZpcnN0Pi08bGFzdD4gKi8KKwkJCQlpZiAocGFyc2VfbGluZW5vKGxhc3QsICZxdWVyeS0+bGFzdF9saW5lbm8pIDwgMCkKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9IGVsc2UgeworCQkJCXF1ZXJ5LT5sYXN0X2xpbmVubyA9IHF1ZXJ5LT5maXJzdF9saW5lbm87CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGtleXdvcmQgXCIlc1wiXG4iLAorCQkJCQlfX2Z1bmNfXywgd29yZHNbaV0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHEtPmZ1bmN0aW9uPVwiJXNcIiBxLT5maWxlbmFtZT1cIiVzXCIgIgorCQkgICAgICAgInEtPm1vZHVsZT1cIiVzXCIgcS0+Zm9ybWF0PVwiJXNcIiBxLT5saW5lbm89JXUtJXVcbiIsCisJCQlfX2Z1bmNfXywgcXVlcnktPmZ1bmN0aW9uLCBxdWVyeS0+ZmlsZW5hbWUsCisJCQlxdWVyeS0+bW9kdWxlLCBxdWVyeS0+Zm9ybWF0LCBxdWVyeS0+Zmlyc3RfbGluZW5vLAorCQkJcXVlcnktPmxhc3RfbGluZW5vKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUGFyc2UgYHN0cicgYXMgYSBmbGFncyBzcGVjaWZpY2F0aW9uLCBmb3JtYXQgWy0rPV1bcF0rLgorICogU2V0cyB1cCAqbWFza3AgYW5kICpmbGFnc3AgdG8gYmUgdXNlZCB3aGVuIGNoYW5naW5nIHRoZQorICogZmxhZ3MgZmllbGRzIG9mIG1hdGNoZWQgX2RkZWJ1ZydzLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAqIG9yIDwwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wYXJzZV9mbGFncyhjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqZmxhZ3NwLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqbWFza3ApCit7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCWludCBvcCA9ICc9JzsKKworCXN3aXRjaCAoKnN0cikgeworCWNhc2UgJysnOgorCWNhc2UgJy0nOgorCWNhc2UgJz0nOgorCQlvcCA9ICpzdHIrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogb3A9JyVjJ1xuIiwgX19mdW5jX18sIG9wKTsKKworCWZvciAoIDsgKnN0ciA7ICsrc3RyKSB7CisJCXN3aXRjaCAoKnN0cikgeworCQljYXNlICdwJzoKKwkJCWZsYWdzIHw9IF9EUFJJTlRLX0ZMQUdTX1BSSU5UOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAoZmxhZ3MgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmbGFncz0weCV4XG4iLCBfX2Z1bmNfXywgZmxhZ3MpOworCisJLyogY2FsY3VsYXRlIGZpbmFsICpmbGFnc3AsICptYXNrcCBhY2NvcmRpbmcgdG8gbWFzayBhbmQgb3AgKi8KKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSAnPSc6CisJCSptYXNrcCA9IDA7CisJCSpmbGFnc3AgPSBmbGFnczsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CisJCSptYXNrcCA9IH4wVTsKKwkJKmZsYWdzcCA9IGZsYWdzOworCQlicmVhazsKKwljYXNlICctJzoKKwkJKm1hc2twID0gfmZsYWdzOworCQkqZmxhZ3NwID0gMDsKKwkJYnJlYWs7CisJfQorCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogKmZsYWdzcD0weCV4ICptYXNrcD0weCV4XG4iLAorCQkJX19mdW5jX18sICpmbGFnc3AsICptYXNrcCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaWxlX29wcy0+d3JpdGUgbWV0aG9kIGZvciA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb25yb2wuICBHYXRoZXJzIHRoZQorICogY29tbWFuZCB0ZXh0IGZyb20gdXNlcnNwYWNlLCBwYXJzZXMgYW5kIGV4ZWN1dGVzIGl0LgorICovCitzdGF0aWMgc3NpemVfdCBkZGVidWdfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMCwgbWFzayA9IDA7CisJc3RydWN0IGRkZWJ1Z19xdWVyeSBxdWVyeTsKKyNkZWZpbmUgTUFYV09SRFMgOQorCWludCBud29yZHM7CisJY2hhciAqd29yZHNbTUFYV09SRFNdOworCWNoYXIgdG1wYnVmWzI1Nl07CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCS8qIHdlIGRvbid0IGNoZWNrICpvZmZwIC0tIG11bHRpcGxlIHdyaXRlcygpIGFyZSBhbGxvd2VkICovCisJaWYgKGxlbiA+IHNpemVvZih0bXBidWYpLTEpCisJCXJldHVybiAtRTJCSUc7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRtcGJ1ZiwgdWJ1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJdG1wYnVmW2xlbl0gPSAnXDAnOworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVhZCAlZCBieXRlcyBmcm9tIHVzZXJzcGFjZVxuIiwKKwkJCV9fZnVuY19fLCAoaW50KWxlbik7CisKKwlud29yZHMgPSBkZGVidWdfdG9rZW5pemUodG1wYnVmLCB3b3JkcywgTUFYV09SRFMpOworCWlmIChud29yZHMgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGRlYnVnX3BhcnNlX3F1ZXJ5KHdvcmRzLCBud29yZHMtMSwgJnF1ZXJ5KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRkZWJ1Z19wYXJzZV9mbGFncyh3b3Jkc1tud29yZHMtMV0sICZmbGFncywgJm1hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGFjdHVhbGx5IGdvIGFuZCBpbXBsZW1lbnQgdGhlIGNoYW5nZSAqLworCWRkZWJ1Z19jaGFuZ2UoJnF1ZXJ5LCBmbGFncywgbWFzayk7CisKKwkqb2ZmcCArPSBsZW47CisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFNldCB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IF9kZGVidWcgb2JqZWN0CisgKiBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGF0IGZpcnN0IG9iamVjdC4gIFJldHVybnMKKyAqIE5VTEwgaWYgdGhlcmUgYXJlIG5vIF9kZGVidWdzIGF0IGFsbC4KKyAqLworc3RhdGljIHN0cnVjdCBfZGRlYnVnICpkZGVidWdfaXRlcl9maXJzdChzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIpCit7CisJaWYgKGxpc3RfZW1wdHkoJmRkZWJ1Z190YWJsZXMpKSB7CisJCWl0ZXItPnRhYmxlID0gTlVMTDsKKwkJaXRlci0+aWR4ID0gMDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWl0ZXItPnRhYmxlID0gbGlzdF9lbnRyeShkZGVidWdfdGFibGVzLm5leHQsCisJCQkJIHN0cnVjdCBkZGVidWdfdGFibGUsIGxpbmspOworCWl0ZXItPmlkeCA9IDA7CisJcmV0dXJuICZpdGVyLT50YWJsZS0+ZGRlYnVnc1tpdGVyLT5pZHhdOworfQorCisvKgorICogQWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIG5leHQgX2RkZWJ1ZworICogb2JqZWN0IGZyb20gdGhlIG9uZSB0aGUgaXRlcmF0b3IgY3VycmVudGx5IHBvaW50cyBhdCwKKyAqIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3IF9kZGVidWcuICBSZXR1cm5zCisgKiBOVUxMIGlmIHRoZSBpdGVyYXRvciBoYXMgc2VlbiBhbGwgdGhlIF9kZGVidWdzLgorICovCitzdGF0aWMgc3RydWN0IF9kZGVidWcgKmRkZWJ1Z19pdGVyX25leHQoc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyKQoreworCWlmIChpdGVyLT50YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoKytpdGVyLT5pZHggPT0gaXRlci0+dGFibGUtPm51bV9kZGVidWdzKSB7CisJCS8qIGl0ZXJhdGUgdG8gbmV4dCB0YWJsZSAqLworCQlpdGVyLT5pZHggPSAwOworCQlpZiAobGlzdF9pc19sYXN0KCZpdGVyLT50YWJsZS0+bGluaywgJmRkZWJ1Z190YWJsZXMpKSB7CisJCQlpdGVyLT50YWJsZSA9IE5VTEw7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpdGVyLT50YWJsZSA9IGxpc3RfZW50cnkoaXRlci0+dGFibGUtPmxpbmsubmV4dCwKKwkJCQkJIHN0cnVjdCBkZGVidWdfdGFibGUsIGxpbmspOworCX0KKwlyZXR1cm4gJml0ZXItPnRhYmxlLT5kZGVidWdzW2l0ZXItPmlkeF07Cit9CisKKy8qCisgKiBTZXFfb3BzIHN0YXJ0IG1ldGhvZC4gIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkKKyAqIHJlYWQoKSBjYWxsIGZyb20gdXNlcnNwYWNlLiAgVGFrZXMgdGhlIGRkZWJ1Z19sb2NrIGFuZAorICogc2Vla3MgdGhlIHNlcV9maWxlJ3MgaXRlcmF0b3IgdG8gdGhlIGdpdmVuIHBvc2l0aW9uLgorICovCitzdGF0aWMgdm9pZCAqZGRlYnVnX3Byb2Nfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBfZGRlYnVnICpkcDsKKwlpbnQgbiA9ICpwb3M7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZCBtPSVwICpwb3M9JWxsZFxuIiwKKwkJCV9fZnVuY19fLCBtLCAodW5zaWduZWQgbG9uZyBsb25nKSpwb3MpOworCisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCisJaWYgKCFuKQorCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOworCWlmIChuIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJZHAgPSBkZGVidWdfaXRlcl9maXJzdChpdGVyKTsKKwl3aGlsZSAoZHAgIT0gTlVMTCAmJiAtLW4gPiAwKQorCQlkcCA9IGRkZWJ1Z19pdGVyX25leHQoaXRlcik7CisJcmV0dXJuIGRwOworfQorCisvKgorICogU2VxX29wcyBuZXh0IG1ldGhvZC4gIENhbGxlZCBzZXZlcmFsIHRpbWVzIHdpdGhpbiBhIHJlYWQoKQorICogY2FsbCBmcm9tIHVzZXJzcGFjZSwgd2l0aCBkZGVidWdfbG9jayBoZWxkLiAgV2Fsa3MgdG8gdGhlCisgKiBuZXh0IF9kZGVidWcgb2JqZWN0IHdpdGggYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBoZWFkZXIgbGluZS4KKyAqLworc3RhdGljIHZvaWQgKmRkZWJ1Z19wcm9jX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBfZGRlYnVnICpkcDsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcCAqcG9zPSVsbGRcbiIsCisJCQlfX2Z1bmNfXywgbSwgcCwgKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zKTsKKworCWlmIChwID09IFNFUV9TVEFSVF9UT0tFTikKKwkJZHAgPSBkZGVidWdfaXRlcl9maXJzdChpdGVyKTsKKwllbHNlCisJCWRwID0gZGRlYnVnX2l0ZXJfbmV4dChpdGVyKTsKKwkrKypwb3M7CisJcmV0dXJuIGRwOworfQorCisvKgorICogU2VxX29wcyBzaG93IG1ldGhvZC4gIENhbGxlZCBzZXZlcmFsIHRpbWVzIHdpdGhpbiBhIHJlYWQoKQorICogY2FsbCBmcm9tIHVzZXJzcGFjZSwgd2l0aCBkZGVidWdfbG9jayBoZWxkLiAgRm9ybWF0cyB0aGUKKyAqIGN1cnJlbnQgX2RkZWJ1ZyBhcyBhIHNpbmdsZSBodW1hbi1yZWFkYWJsZSBsaW5lLCB3aXRoIGEKKyAqIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGhlYWRlciBsaW5lLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCXN0cnVjdCBkZGVidWdfaXRlciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RydWN0IF9kZGVidWcgKmRwID0gcDsKKwljaGFyIGZsYWdzYnVmWzhdOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCBwPSVwXG4iLAorCQkJX19mdW5jX18sIG0sIHApOworCisJaWYgKHAgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJCXNlcV9wdXRzKG0sCisJCQkiIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKG0sICIlczoldSBbJXNdJXMgJXMgXCIiLAorCQkgICBkcC0+ZmlsZW5hbWUsIGRwLT5saW5lbm8sCisJCSAgIGl0ZXItPnRhYmxlLT5tb2RfbmFtZSwgZHAtPmZ1bmN0aW9uLAorCQkgICBkZGVidWdfZGVzY3JpYmVfZmxhZ3MoZHAsIGZsYWdzYnVmLCBzaXplb2YoZmxhZ3NidWYpKSk7CisJc2VxX2VzY2FwZShtLCBkcC0+Zm9ybWF0LCAiXHRcclxuXCIiKTsKKwlzZXFfcHV0cyhtLCAiXCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXFfb3BzIHN0b3AgbWV0aG9kLiAgQ2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UuICBEcm9wcyBkZGVidWdfbG9jay4KKyAqLworc3RhdGljIHZvaWQgZGRlYnVnX3Byb2Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7CisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCBwPSVwXG4iLAorCQkJX19mdW5jX18sIG0sIHApOworCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRkZWJ1Z19wcm9jX3NlcW9wcyA9IHsKKwkuc3RhcnQgPSBkZGVidWdfcHJvY19zdGFydCwKKwkubmV4dCA9IGRkZWJ1Z19wcm9jX25leHQsCisJLnNob3cgPSBkZGVidWdfcHJvY19zaG93LAorCS5zdG9wID0gZGRlYnVnX3Byb2Nfc3RvcAorfTsKKworLyoKKyAqIEZpbGVfb3BzLT5vcGVuIG1ldGhvZCBmb3IgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbC4gIERvZXMgdGhlIHNlcV9maWxlCisgKiBzZXR1cCBkYW5jZSwgYW5kIGFsc28gY3JlYXRlcyBhbiBpdGVyYXRvciB0byB3YWxrIHRoZSBfZGRlYnVncy4KKyAqIE5vdGUgdGhhdCB3ZSBjcmVhdGUgYSBzZXFfZmlsZSBhbHdheXMsIGV2ZW4gZm9yIE9fV1JPTkxZIGZpbGVzCisgKiB3aGVyZSBpdCdzIG5vdCBuZWVkZWQsIGFzIGRvaW5nIHNvIHNpbXBsaWZpZXMgdGhlIC0+cmVsZWFzZSBtZXRob2QuCisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXI7CisJaW50IGVycjsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpdGVyID0ga3phbGxvYyhzaXplb2YoKml0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaXRlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IHNlcV9vcGVuKGZpbGUsICZkZGVidWdfcHJvY19zZXFvcHMpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoaXRlcik7CisJCXJldHVybiBlcnI7CisJfQorCSgoc3RydWN0IHNlcV9maWxlICopIGZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGUgPSBpdGVyOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZGVidWdfcHJvY19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZGRlYnVnX3Byb2Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS53cml0ZSA9IGRkZWJ1Z19wcm9jX3dyaXRlCit9OworCisvKgorICogQWxsb2NhdGUgYSBuZXcgZGRlYnVnX3RhYmxlIGZvciB0aGUgZ2l2ZW4gbW9kdWxlCisgKiBhbmQgYWRkIGl0IHRvIHRoZSBnbG9iYWwgbGlzdC4KKyAqLworaW50IGRkZWJ1Z19hZGRfbW9kdWxlKHN0cnVjdCBfZGRlYnVnICp0YWIsIHVuc2lnbmVkIGludCBuLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0OworCWNoYXIgKm5ld19uYW1lOworCisJZHQgPSBremFsbG9jKHNpemVvZigqZHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbmV3X25hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOworCWlmIChuZXdfbmFtZSA9PSBOVUxMKSB7CisJCWtmcmVlKGR0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWR0LT5tb2RfbmFtZSA9IG5ld19uYW1lOworCWR0LT5udW1fZGRlYnVncyA9IG47CisJZHQtPm51bV9lbmFibGVkID0gMDsKKwlkdC0+ZGRlYnVncyA9IHRhYjsKKworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZkdC0+bGluaywgJmRkZWJ1Z190YWJsZXMpOworCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiV1IGRlYnVnIHByaW50cyBpbiBtb2R1bGUgJXNcbiIsCisJCQkJIG4sIGR0LT5tb2RfbmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZGVidWdfYWRkX21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIGRkZWJ1Z190YWJsZV9mcmVlKHN0cnVjdCBkZGVidWdfdGFibGUgKmR0KQoreworCWxpc3RfZGVsX2luaXQoJmR0LT5saW5rKTsKKwlrZnJlZShkdC0+bW9kX25hbWUpOworCWtmcmVlKGR0KTsKK30KKworLyoKKyAqIENhbGxlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZyB1bmxvYWRlZC4gIFJlbW92ZXMKKyAqIGFueSBkZGVidWdfdGFibGUncyB3aGljaCBwb2ludCBhdCB0aGUgbW9kdWxlLgorICovCitpbnQgZGRlYnVnX3JlbW92ZV9tb2R1bGUoY2hhciAqbW9kX25hbWUpCit7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQsICpuZXh0ZHQ7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW92aW5nIG1vZHVsZSBcIiVzXCJcbiIsCisJCQkJX19mdW5jX18sIG1vZF9uYW1lKTsKKworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHQsIG5leHRkdCwgJmRkZWJ1Z190YWJsZXMsIGxpbmspIHsKKwkJaWYgKCFzdHJjbXAoZHQtPm1vZF9uYW1lLCBtb2RfbmFtZSkpIHsKKwkJCWRkZWJ1Z190YWJsZV9mcmVlKGR0KTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRkZWJ1Z19yZW1vdmVfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgZGRlYnVnX3JlbW92ZV9hbGxfdGFibGVzKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmZGRlYnVnX3RhYmxlcykpIHsKKwkJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQgPSBsaXN0X2VudHJ5KGRkZWJ1Z190YWJsZXMubmV4dCwKKwkJCQkJCSAgICAgIHN0cnVjdCBkZGVidWdfdGFibGUsCisJCQkJCQkgICAgICBsaW5rKTsKKwkJZGRlYnVnX3RhYmxlX2ZyZWUoZHQpOworCX0KKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZHluYW1pY19kZWJ1Z19pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyLCAqZmlsZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqaXRlciwgKml0ZXJfc3RhcnQ7CisJY29uc3QgY2hhciAqbW9kbmFtZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJaW50IG4gPSAwOworCisJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkeW5hbWljX2RlYnVnIiwgTlVMTCk7CisJaWYgKCFkaXIpCisJCXJldHVybiAtRU5PTUVNOworCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb250cm9sIiwgMDY0NCwgZGlyLCBOVUxMLAorCQkJCQkmZGRlYnVnX3Byb2NfZm9wcyk7CisJaWYgKCFmaWxlKSB7CisJCWRlYnVnZnNfcmVtb3ZlKGRpcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoX19zdGFydF9fX3ZlcmJvc2UgIT0gX19zdG9wX19fdmVyYm9zZSkgeworCQlpdGVyID0gX19zdGFydF9fX3ZlcmJvc2U7CisJCW1vZG5hbWUgPSBpdGVyLT5tb2RuYW1lOworCQlpdGVyX3N0YXJ0ID0gaXRlcjsKKwkJZm9yICg7IGl0ZXIgPCBfX3N0b3BfX192ZXJib3NlOyBpdGVyKyspIHsKKwkJCWlmIChzdHJjbXAobW9kbmFtZSwgaXRlci0+bW9kbmFtZSkpIHsKKwkJCQlyZXQgPSBkZGVidWdfYWRkX21vZHVsZShpdGVyX3N0YXJ0LCBuLCBtb2RuYW1lKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dF9mcmVlOworCQkJCW4gPSAwOworCQkJCW1vZG5hbWUgPSBpdGVyLT5tb2RuYW1lOworCQkJCWl0ZXJfc3RhcnQgPSBpdGVyOworCQkJfQorCQkJbisrOworCQl9CisJCXJldCA9IGRkZWJ1Z19hZGRfbW9kdWxlKGl0ZXJfc3RhcnQsIG4sIG1vZG5hbWUpOworCX0KK291dF9mcmVlOgorCWlmIChyZXQpIHsKKwkJZGRlYnVnX3JlbW92ZV9hbGxfdGFibGVzKCk7CisJCWRlYnVnZnNfcmVtb3ZlKGRpcik7CisJCWRlYnVnZnNfcmVtb3ZlKGZpbGUpOworCX0KKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGR5bmFtaWNfZGVidWdfaW5pdCk7CmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19wcmludGsuYyBiL2xpYi9keW5hbWljX3ByaW50ay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjVhMTk3Li4wMDAwMDAwCi0tLSBhL2xpYi9keW5hbWljX3ByaW50ay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLS8qCi0gKiBsaWIvZHluYW1pY19wcmludGsuYwotICoKLSAqIG1ha2UgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgcnVudGltZSBjb25maWd1cmFibGUgYmFzZWQgdXBvbiB0aGVpcgotICogdGhlaXIgc291cmNlIG1vZHVsZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgSmFzb24gQmFyb24gPGpiYXJvbkByZWRoYXQuY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLQotZXh0ZXJuIHN0cnVjdCBtb2RfZGVidWcgX19zdGFydF9fX3ZlcmJvc2VbXTsKLWV4dGVybiBzdHJ1Y3QgbW9kX2RlYnVnIF9fc3RvcF9fX3ZlcmJvc2VbXTsKLQotc3RydWN0IGRlYnVnX25hbWUgewotCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0OwotCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0MjsKLQlpbnQgaGFzaDE7Ci0JaW50IGhhc2gyOwotCWNoYXIgKm5hbWU7Ci0JaW50IGVuYWJsZTsKLQlpbnQgdHlwZTsKLX07Ci0KLXN0YXRpYyBpbnQgbnJfZW50cmllczsKLXN0YXRpYyBpbnQgbnVtX2VuYWJsZWQ7Ci1pbnQgZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7Ci1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbW9kdWxlX3RhYmxlW0RFQlVHX0hBU0hfVEFCTEVfU0laRV0gPQotCXsgWzAgLi4uIERFQlVHX0hBU0hfVEFCTEVfU0laRS0xXSA9IEhMSVNUX0hFQURfSU5JVCB9Owotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZV90YWJsZTJbREVCVUdfSEFTSF9UQUJMRV9TSVpFXSA9Ci0JeyBbMCAuLi4gREVCVUdfSEFTSF9UQUJMRV9TSVpFLTFdID0gSExJU1RfSEVBRF9JTklUIH07Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChkZWJ1Z19saXN0X211dGV4KTsKLQotLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAotICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQotICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCi0gKi8KLWxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkOwotRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19wcmludGtfZW5hYmxlZCk7Ci1sb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDI7Ci1FWFBPUlRfU1lNQk9MX0dQTChkeW5hbWljX3ByaW50a19lbmFibGVkMik7Ci0KLS8qIHJldHVybnMgdGhlIGRlYnVnIG1vZHVsZSBwb2ludGVyLiAqLwotc3RhdGljIHN0cnVjdCBkZWJ1Z19uYW1lICpmaW5kX2RlYnVnX21vZHVsZShjaGFyICptb2R1bGVfbmFtZSkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKLQotCWVsZW1lbnQgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBERUJVR19IQVNIX1RBQkxFX1NJWkU7IGkrKykgewotCQloZWFkID0gJm1vZHVsZV90YWJsZVtpXTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW1lbnQsIG5vZGUsIGhlYWQsIGhsaXN0KQotCQkJaWYgKCFzdHJjbXAoZWxlbWVudC0+bmFtZSwgbW9kdWxlX25hbWUpKQotCQkJCXJldHVybiBlbGVtZW50OwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogcmV0dXJucyB0aGUgZGVidWcgbW9kdWxlIHBvaW50ZXIuICovCi1zdGF0aWMgc3RydWN0IGRlYnVnX25hbWUgKmZpbmRfZGVidWdfbW9kdWxlX2hhc2goY2hhciAqbW9kdWxlX25hbWUsIGludCBoYXNoKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OwotCi0JZWxlbWVudCA9IE5VTEw7Ci0JaGVhZCA9ICZtb2R1bGVfdGFibGVbaGFzaF07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW1lbnQsIG5vZGUsIGhlYWQsIGhsaXN0KQotCQlpZiAoIXN0cmNtcChlbGVtZW50LT5uYW1lLCBtb2R1bGVfbmFtZSkpCi0JCQlyZXR1cm4gZWxlbWVudDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCovCi1zdGF0aWMgaW50IF9fYWRkX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IGhhc2gsIGludCBoYXNoMikKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqbmV3OwotCWNoYXIgKm1vZHVsZV9uYW1lOwotCWludCByZXQgPSAwOwotCi0JaWYgKGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JbW9kdWxlX25hbWUgPSBrbWFsbG9jKHN0cmxlbihtb2RfbmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1vZHVsZV9uYW1lKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQltb2R1bGVfbmFtZSA9IHN0cmNweShtb2R1bGVfbmFtZSwgbW9kX25hbWUpOwotCW1vZHVsZV9uYW1lW3N0cmxlbihtb2RfbmFtZSldID0gJ1wwJzsKLQluZXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGVidWdfbmFtZSksIEdGUF9LRVJORUwpOwotCWlmICghbmV3KSB7Ci0JCWtmcmVlKG1vZHVsZV9uYW1lKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCUlOSVRfSExJU1RfTk9ERSgmbmV3LT5obGlzdCk7Ci0JSU5JVF9ITElTVF9OT0RFKCZuZXctPmhsaXN0Mik7Ci0JbmV3LT5uYW1lID0gbW9kdWxlX25hbWU7Ci0JbmV3LT5oYXNoMSA9IGhhc2g7Ci0JbmV3LT5oYXNoMiA9IGhhc2gyOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3LT5obGlzdCwgJm1vZHVsZV90YWJsZVtoYXNoXSk7Ci0JaGxpc3RfYWRkX2hlYWRfcmN1KCZuZXctPmhsaXN0MiwgJm1vZHVsZV90YWJsZTJbaGFzaDJdKTsKLQlucl9lbnRyaWVzKys7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKLQllbGVtZW50ID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOwotCWlmICghZWxlbWVudCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaGxpc3RfZGVsX3JjdSgmZWxlbWVudC0+aGxpc3QpOwotCWhsaXN0X2RlbF9yY3UoJmVsZW1lbnQtPmhsaXN0Mik7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2ZyZWUoZWxlbWVudC0+bmFtZSk7Ci0JaWYgKGVsZW1lbnQtPmVuYWJsZSkKLQkJbnVtX2VuYWJsZWQtLTsKLQlrZnJlZShlbGVtZW50KTsKLQlucl9lbnRyaWVzLS07Ci1vdXQ6Ci0JdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKTsKLQotaW50IHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgY2hhciAqc2hhcmVfbmFtZSwKLQkJCQkJY2hhciAqZmxhZ3MsIGludCBoYXNoLCBpbnQgaGFzaDIpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW07Ci0JaW50IHJldCA9IDA7Ci0KLQlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKLQllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOwotCWlmICghZWxlbSkgewotCQlpZiAoX19hZGRfZGVidWdfbW9kdWxlKG1vZF9uYW1lLCBoYXNoLCBoYXNoMikpCi0JCQlnb3RvIG91dDsKLQkJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQkJaWYgKGR5bmFtaWNfZW5hYmxlZCA9PSBEWU5BTUlDX0VOQUJMRURfQUxMICYmCi0JCQkJIXN0cmNtcChtb2RfbmFtZSwgc2hhcmVfbmFtZSkpIHsKLQkJCWVsZW0tPmVuYWJsZSA9IHRydWU7Ci0JCQludW1fZW5hYmxlZCsrOwotCQl9Ci0JfQotCWVsZW0tPnR5cGUgfD0gdHlwZTsKLW91dDoKLQl1cCgmZGVidWdfbGlzdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKTsKLQotaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBpbnQgdmFsdWUsIGludCBoYXNoKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOwotCWludCByZXQgPSAwOwotCi0JaWYgKGR5bmFtaWNfZW5hYmxlZCA9PSBEWU5BTUlDX0VOQUJMRURfQUxMKQotCQlyZXR1cm4gMTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlX2hhc2gobW9kX25hbWUsIGhhc2gpOwotCWlmIChlbGVtICYmIGVsZW0tPmVuYWJsZSkKLQkJcmV0ID0gMTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcik7Ci0KLXN0YXRpYyB2b2lkIHNldF9hbGwoYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGk7Ci0JbG9uZyBsb25nIGVuYWJsZV9tYXNrOwotCi0JZm9yIChpID0gMDsgaSA8IERFQlVHX0hBU0hfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWlmIChtb2R1bGVfdGFibGVbaV0uZmlyc3QgIT0gTlVMTCkgewotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZVtpXSwgaGxpc3QpIHsKLQkJCQllLT5lbmFibGUgPSBlbmFibGU7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGVuYWJsZSkKLQkJZW5hYmxlX21hc2sgPSBVTExPTkdfTUFYOwotCWVsc2UKLQkJZW5hYmxlX21hc2sgPSAwOwotCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgPSBlbmFibGVfbWFzazsKLQlkeW5hbWljX3ByaW50a19lbmFibGVkMiA9IGVuYWJsZV9tYXNrOwotfQotCi1zdGF0aWMgaW50IGRpc2FibGVkX2hhc2goaW50IGksIGJvb2wgZmlyc3RfdGFibGUpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0KLQlpZiAoZmlyc3RfdGFibGUpIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZVtpXSwgaGxpc3QpIHsKLQkJCWlmIChlLT5lbmFibGUpCi0JCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCAmbW9kdWxlX3RhYmxlMltpXSwgaGxpc3QyKSB7Ci0JCQlpZiAoZS0+ZW5hYmxlKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3NpemVfdCBwcl9kZWJ1Z193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQlzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciAqYnVmZmVyLCAqcywgKnZhbHVlX3N0ciwgKnNldHRpbmdfc3RyOwotCWludCBlcnIsIHZhbHVlOwotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtID0gTlVMTDsKLQlpbnQgYWxsID0gMDsKLQotCWlmIChsZW5ndGggPiBQQUdFX1NJWkUgfHwgbGVuZ3RoIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWZmZXIgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnIgPSAtRUZBVUxUOwotCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgbGVuZ3RoKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWlmIChsZW5ndGggPCBQQUdFX1NJWkUpCi0JCWJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKLQllbHNlIGlmIChidWZmZXJbUEFHRV9TSVpFLTFdKQotCQlnb3RvIG91dDsKLQotCWVyciA9IC1FSU5WQUw7Ci0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0KLQlpZiAoc3RybmNtcCgic2V0IiwgYnVmZmVyLCAzKSkKLQkJZ290byBvdXRfdXA7Ci0JcyA9IGJ1ZmZlciArIDM7Ci0Jc2V0dGluZ19zdHIgPSBzdHJzZXAoJnMsICI9Iik7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJZ290byBvdXRfdXA7Ci0Jc2V0dGluZ19zdHIgPSBzdHJzdHJpcChzZXR0aW5nX3N0cik7Ci0JdmFsdWVfc3RyID0gc3Ryc2VwKCZzLCAiICIpOwotCWlmIChzID09IE5VTEwpCi0JCWdvdG8gb3V0X3VwOwotCXMgPSBzdHJzdHJpcChzKTsKLQlpZiAoIXN0cm5jbXAocywgImFsbCIsIDMpKQotCQlhbGwgPSAxOwotCWVsc2UKLQkJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKHMpOwotCWlmICghc3RybmNtcChzZXR0aW5nX3N0ciwgImVuYWJsZSIsIDYpKSB7Ci0JCXZhbHVlID0gISFzaW1wbGVfc3RydG9sKHZhbHVlX3N0ciwgTlVMTCwgMTApOwotCQlpZiAoYWxsKSB7Ci0JCQlpZiAodmFsdWUpIHsKLQkJCQlzZXRfYWxsKHRydWUpOwotCQkJCW51bV9lbmFibGVkID0gbnJfZW50cmllczsKLQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfQUxMOwotCQkJfSBlbHNlIHsKLQkJCQlzZXRfYWxsKGZhbHNlKTsKLQkJCQludW1fZW5hYmxlZCA9IDA7Ci0JCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7Ci0JCQl9Ci0JCQllcnIgPSAwOwotCQl9IGVsc2UgaWYgKGVsZW0pIHsKLQkJCWlmICh2YWx1ZSAmJiAoZWxlbS0+ZW5hYmxlID09IDApKSB7Ci0JCQkJZHluYW1pY19wcmludGtfZW5hYmxlZCB8PSAoMUxMIDw8IGVsZW0tPmhhc2gxKTsKLQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkMiB8PSAoMUxMIDw8IGVsZW0tPmhhc2gyKTsKLQkJCQllbGVtLT5lbmFibGUgPSAxOwotCQkJCW51bV9lbmFibGVkKys7Ci0JCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX1NPTUU7Ci0JCQkJZXJyID0gMDsKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCQkiZGVidWdnaW5nIGVuYWJsZWQgZm9yIG1vZHVsZSAlc1xuIiwKLQkJCQkJZWxlbS0+bmFtZSk7Ci0JCQl9IGVsc2UgaWYgKCF2YWx1ZSAmJiAoZWxlbS0+ZW5hYmxlID09IDEpKSB7Ci0JCQkJZWxlbS0+ZW5hYmxlID0gMDsKLQkJCQludW1fZW5hYmxlZC0tOwotCQkJCWlmIChkaXNhYmxlZF9oYXNoKGVsZW0tPmhhc2gxLCB0cnVlKSkKLQkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZCAmPQotCQkJCQkJCX4oMUxMIDw8IGVsZW0tPmhhc2gxKTsKLQkJCQlpZiAoZGlzYWJsZWRfaGFzaChlbGVtLT5oYXNoMiwgZmFsc2UpKQotCQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkMiAmPQotCQkJCQkJCX4oMUxMIDw8IGVsZW0tPmhhc2gyKTsKLQkJCQlpZiAobnVtX2VuYWJsZWQpCi0JCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9TT01FOwotCQkJCWVsc2UKLQkJCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7Ci0JCQkJZXJyID0gMDsKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCQkiZGVidWdnaW5nIGRpc2FibGVkIGZvciBtb2R1bGUgJXNcbiIsCi0JCQkJCWVsZW0tPm5hbWUpOwotCQkJfQotCQl9Ci0JfQotCWlmICghZXJyKQotCQllcnIgPSBsZW5ndGg7Ci1vdXRfdXA6Ci0JdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOwotb3V0OgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkICpwcl9kZWJ1Z19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gKCpwb3MgPCBERUJVR19IQVNIX1RBQkxFX1NJWkUpID8gcG9zIDogTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgKnByX2RlYnVnX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JKCpwb3MpKys7Ci0JaWYgKCpwb3MgPj0gREVCVUdfSEFTSF9UQUJMRV9TSVpFKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgdm9pZCBwcl9kZWJ1Z19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi17Ci0JLyogTm90aGluZyB0byBkbyAqLwotfQotCi1zdGF0aWMgaW50IHByX2RlYnVnX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKLQl1bnNpZ25lZCBpbnQgaSA9ICoobG9mZl90ICopIHY7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaGVhZCA9ICZtb2R1bGVfdGFibGVbaV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG5vZGUsIGhlYWQsIGhsaXN0KSB7Ci0JCXNlcV9wcmludGYocywgIiVzIGVuYWJsZWQ9JWQiLCBlbGVtLT5uYW1lLCBlbGVtLT5lbmFibGUpOwotCQlzZXFfcHJpbnRmKHMsICJcbiIpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcl9kZWJ1Z19zZXFfb3BzID0gewotCS5zdGFydCA9IHByX2RlYnVnX3NlcV9zdGFydCwKLQkubmV4dCAgPSBwcl9kZWJ1Z19zZXFfbmV4dCwKLQkuc3RvcCAgPSBwcl9kZWJ1Z19zZXFfc3RvcCwKLQkuc2hvdyAgPSBwcl9kZWJ1Z19zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBwcl9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXJldHVybiBzZXFfb3BlbihmaWxwLCAmcHJfZGVidWdfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByX2RlYnVnX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gcHJfZGVidWdfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkud3JpdGUJCT0gcHJfZGVidWdfd3JpdGUsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpmaWxlOwotCXN0cnVjdCBtb2RfZGVidWcgKml0ZXI7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQotCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHluYW1pY19wcmludGsiLCBOVUxMKTsKLQlpZiAoIWRpcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1vZHVsZXMiLCAwNjQ0LCBkaXIsIE5VTEwsCi0JCQkJCSZwcl9kZWJ1Z19vcGVyYXRpb25zKTsKLQlpZiAoIWZpbGUpIHsKLQkJZGVidWdmc19yZW1vdmUoZGlyKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWZvciAodmFsdWUgPSAodW5zaWduZWQgbG9uZylfX3N0YXJ0X19fdmVyYm9zZTsKLQkJdmFsdWUgPCAodW5zaWduZWQgbG9uZylfX3N0b3BfX192ZXJib3NlOwotCQl2YWx1ZSArPSBzaXplb2Yoc3RydWN0IG1vZF9kZWJ1ZykpIHsKLQkJCWl0ZXIgPSAoc3RydWN0IG1vZF9kZWJ1ZyAqKXZhbHVlOwotCQkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoaXRlci0+bW9kbmFtZSwKLQkJCQlpdGVyLT50eXBlLAotCQkJCWl0ZXItPmxvZ2ljYWxfbW9kbmFtZSwKLQkJCQlpdGVyLT5mbGFnX25hbWVzLCBpdGVyLT5oYXNoLCBpdGVyLT5oYXNoMik7Ci0JfQotCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCkKLQkJc2V0X2FsbCh0cnVlKTsKLQlyZXR1cm4gMDsKLX0KLW1vZHVsZV9pbml0KGR5bmFtaWNfcHJpbnRrX2luaXQpOwotLyogbWF5IHdhbnQgdG8gbW92ZSB0aGlzIGVhcmxpZXIgc28gd2UgY2FuIGdldCB0cmFjZXMgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KLQotc3RhdGljIGludCBfX2luaXQgZHluYW1pY19wcmludGtfc2V0dXAoY2hhciAqc3RyKQotewotCWlmIChzdHIpCi0JCXJldHVybiAtRU5PRU5UOwotCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9BTEw7Ci0JcmV0dXJuIDA7Ci19Ci0vKiBVc2UgZWFybHlfcGFyYW0oKSwgc28gd2UgY2FuIGdldCBkZWJ1ZyBvdXRwdXQgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KLWVhcmx5X3BhcmFtKCJkeW5hbWljX3ByaW50ayIsIGR5bmFtaWNfcHJpbnRrX3NldHVwKTsKZGlmZiAtLWdpdCBhL2xpYi9pZHIuYyBiL2xpYi9pZHIuYwppbmRleCBjMTFjNTc2Li5kYWI0YmNhIDEwMDY0NAotLS0gYS9saWIvaWRyLmMKKysrIGIvbGliL2lkci5jCkBAIC00NDksNiArNDQ5LDcgQEAKIAogCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOwogCXAgPSBpZHAtPnRvcDsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaWRwLT50b3AsIE5VTEwpOwogCW1heCA9IDEgPDwgbjsKIAogCWlkID0gMDsKQEAgLTQ2Nyw3ICs0NjgsNiBAQAogCQkJcCA9ICotLXBhYTsKIAkJfQogCX0KLQlyY3VfYXNzaWduX3BvaW50ZXIoaWRwLT50b3AsIE5VTEwpOwogCWlkcC0+bGF5ZXJzID0gMDsKIH0KIEVYUE9SVF9TWU1CT0woaWRyX3JlbW92ZV9hbGwpOwpkaWZmIC0tZ2l0IGEvbGliL2tlcm5lbF9sb2NrLmMgYi9saWIva2VybmVsX2xvY2suYwppbmRleCAwMWEzYzIyLi4zOWYxMDI5IDEwMDY0NAotLS0gYS9saWIva2VybmVsX2xvY2suYworKysgYi9saWIva2VybmVsX2xvY2suYwpAQCAtMzksNyArMzksNyBAQAogaW50IF9fbG9ja2Z1bmMgX19yZWFjcXVpcmVfa2VybmVsX2xvY2sodm9pZCkKIHsKIAl3aGlsZSAoIV9yYXdfc3Bpbl90cnlsb2NrKCZrZXJuZWxfZmxhZykpIHsKLQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpCisJCWlmIChuZWVkX3Jlc2NoZWQoKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCQljcHVfcmVsYXgoKTsKIAl9CmRpZmYgLS1naXQgYS9saWIva29iamVjdC5jIGIvbGliL2tvYmplY3QuYwppbmRleCAwNDg3ZDFmLi5hNmRlYzMyIDEwMDY0NAotLS0gYS9saWIva29iamVjdC5jCisrKyBiL2xpYi9rb2JqZWN0LmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogICogQGZtdDogZm9ybWF0IHN0cmluZyB1c2VkIHRvIGJ1aWxkIHRoZSBuYW1lCiAgKiBAdmFyZ3M6IHZhcmdzIHRvIGZvcm1hdCB0aGUgc3RyaW5nLgogICovCi1zdGF0aWMgaW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKK2ludCBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpmbXQsCiAJCQkJICB2YV9saXN0IHZhcmdzKQogewogCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0ga29iai0+bmFtZTsKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0X3VldmVudC5jIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKaW5kZXggMzgxMzEwMi4uOTdhNzc3YSAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTExOCw2ICsxMTgsMTMgQEAKIAlrc2V0ID0gdG9wX2tvYmotPmtzZXQ7CiAJdWV2ZW50X29wcyA9IGtzZXQtPnVldmVudF9vcHM7CiAKKwkvKiBza2lwIHRoZSBldmVudCwgaWYgdWV2ZW50X3N1cHByZXNzIGlzIHNldCovCisJaWYgKGtvYmotPnVldmVudF9zdXBwcmVzcykgeworCQlwcl9kZWJ1Zygia29iamVjdDogJyVzJyAoJXApOiAlczogdWV2ZW50X3N1cHByZXNzICIKKwkJCQkgImNhdXNlZCB0aGUgZXZlbnQgdG8gZHJvcCFcbiIsCisJCQkJIGtvYmplY3RfbmFtZShrb2JqKSwga29iaiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CiAJLyogc2tpcCB0aGUgZXZlbnQsIGlmIHRoZSBmaWx0ZXIgcmV0dXJucyB6ZXJvLiAqLwogCWlmICh1ZXZlbnRfb3BzICYmIHVldmVudF9vcHMtPmZpbHRlcikKIAkJaWYgKCF1ZXZlbnRfb3BzLT5maWx0ZXIoa3NldCwga29iaikpIHsKQEAgLTI1MSw3ICsyNTgsNyBAQAogCQkJZ290byBleGl0OwogCiAJCXJldHZhbCA9IGNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndlswXSwgYXJndiwKLQkJCQkJICAgICBlbnYtPmVudnAsIFVNSF9XQUlUX0VYRUMpOworCQkJCQkgICAgIGVudi0+ZW52cCwgVU1IX05PX1dBSVQpOwogCX0KIAogZXhpdDoKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2F0dHIuYyBiL2xpYi9ubGF0dHIuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBuZXQvbmV0bGluay9hdHRyLmMKcmVuYW1lIHRvIGxpYi9ubGF0dHIuYwppbmRleCBhZTMyYzU3Li5jNDcwNmViIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hdHRyLmMKKysrIGIvbGliL25sYXR0ci5jCkBAIC0zMDcsNiArMzA3LDcgQEAKIAlyZXR1cm4gZDsKIH0KIAorI2lmZGVmIENPTkZJR19ORVQKIC8qKgogICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IKICAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCkBAIC0zMzEsNiArMzMyLDcgQEAKIAogCXJldHVybiBubGE7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpOwogCiAvKioKICAqIF9fbmxhX3Jlc2VydmVfbm9oZHIgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgpAQCAtMzUxLDYgKzM1Myw3IEBACiAKIAlyZXR1cm4gc3RhcnQ7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmVfbm9oZHIpOwogCiAvKioKICAqIG5sYV9yZXNlcnZlIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYgpAQCAtMzcxLDYgKzM3NCw3IEBACiAKIAlyZXR1cm4gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmUpOwogCiAvKioKICAqIG5sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTM4OSw2ICszOTMsNyBAQAogCiAJcmV0dXJuIF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmVfbm9oZHIpOwogCiAvKioKICAqIF9fbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgpAQCAtNDA4LDYgKzQxMyw3IEBACiAJbmxhID0gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTsKIAltZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dCk7CiAKIC8qKgogICogX19ubGFfcHV0X25vaGRyIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTQyNSw2ICs0MzEsNyBAQAogCXN0YXJ0ID0gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pOwogCW1lbWNweShzdGFydCwgZGF0YSwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dF9ub2hkcik7CiAKIC8qKgogICogbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgpAQCAtNDQ0LDYgKzQ1MSw3IEBACiAJX19ubGFfcHV0KHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIGRhdGEpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChubGFfcHV0KTsKIAogLyoqCiAgKiBubGFfcHV0X25vaGRyIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTQ2Miw2ICs0NzAsNyBAQAogCV9fbmxhX3B1dF9ub2hkcihza2IsIGF0dHJsZW4sIGRhdGEpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChubGFfcHV0X25vaGRyKTsKIAogLyoqCiAgKiBubGFfYXBwZW5kIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIgb3IgcGFkZGluZwpAQCAtNDgwLDIxICs0ODksMTQgQEAKIAltZW1jcHkoc2tiX3B1dChza2IsIGF0dHJsZW4pLCBkYXRhLCBhdHRybGVuKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX2FwcGVuZCk7CisjZW5kaWYKIAogRVhQT1JUX1NZTUJPTChubGFfdmFsaWRhdGUpOwogRVhQT1JUX1NZTUJPTChubGFfcG9saWN5X2xlbik7CiBFWFBPUlRfU1lNQk9MKG5sYV9wYXJzZSk7CiBFWFBPUlRfU1lNQk9MKG5sYV9maW5kKTsKIEVYUE9SVF9TWU1CT0wobmxhX3N0cmxjcHkpOwotRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlKTsKLUVYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmVfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChfX25sYV9wdXQpOwotRVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChubGFfcHV0KTsKLUVYUE9SVF9TWU1CT0wobmxhX3B1dF9ub2hkcik7CiBFWFBPUlRfU1lNQk9MKG5sYV9tZW1jcHkpOwogRVhQT1JUX1NZTUJPTChubGFfbWVtY21wKTsKIEVYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9hcHBlbmQpOwpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggOGU4NTg3NC4uYmU2OGM5NSAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYworKysgYi9tbS9iYWNraW5nLWRldi5jCkBAIC0yLDExICsyLDI0IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAordm9pZCBkZWZhdWx0X3VucGx1Z19pb19mbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKK30KK0VYUE9SVF9TWU1CT0woZGVmYXVsdF91bnBsdWdfaW9fZm4pOworCitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLnJhX3BhZ2VzCT0gVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQgLyBQQUdFX0NBQ0hFX1NJWkUsCisJLnN0YXRlCQk9IDAsCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTUFQX0NPUFksCisJLnVucGx1Z19pb19mbgk9IGRlZmF1bHRfdW5wbHVnX2lvX2ZuLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmJkaV9jbGFzczsKIApAQCAtMTY2LDkgKzE3OSwyMCBAQAogCWJkaV9kZWJ1Z19pbml0KCk7CiAJcmV0dXJuIDA7CiB9Ci0KIHBvc3Rjb3JlX2luaXRjYWxsKGJkaV9jbGFzc19pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgZGVmYXVsdF9iZGlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBiZGlfaW5pdCgmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKKwlpZiAoIWVycikKKwkJYmRpX3JlZ2lzdGVyKCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIE5VTEwsICJkZWZhdWx0Iik7CisKKwlyZXR1cm4gZXJyOworfQorc3Vic3lzX2luaXRjYWxsKGRlZmF1bHRfYmRpX2luaXQpOworCiBpbnQgYmRpX3JlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suYwppbmRleCAwMzcxNjFkLi5jYmU5ZTA1IDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTY2MCw3ICs2NjAsNyBAQAogCXJldHVybiBidWZmZXI7CiB9CiAKLXZvaWQgZnJlZV9sb2NrZWRfYnVmZmVyKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit2b2lkIHJlbGVhc2VfbG9ja2VkX2J1ZmZlcih2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgcGdzeiA9IFBBR0VfQUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVDsKIApAQCAtNjcwLDYgKzY3MCwxMSBAQAogCWN1cnJlbnQtPm1tLT5sb2NrZWRfdm0gLT0gcGdzejsKIAogCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworfQorCit2b2lkIGZyZWVfbG9ja2VkX2J1ZmZlcih2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXJlbGVhc2VfbG9ja2VkX2J1ZmZlcihidWZmZXIsIHNpemUpOwogCiAJa2ZyZWUoYnVmZmVyKTsKIH0KZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAwMGNlZDNlLi4xYWJiOTE4IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNDksNiArMTA1MCw5IEBACiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX21tYXAoZmlsZSwgcmVxcHJvdCwgcHJvdCwgZmxhZ3MsIGFkZHIsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCWVycm9yID0gaW1hX2ZpbGVfbW1hcChmaWxlLCBwcm90KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCXJldHVybiBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIGZsYWdzLCB2bV9mbGFncywgcGdvZmYpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggM2M4NDEyOC4uNDBjYTdjZCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC02Niw3ICs2Niw3IEBACiAvKgogICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSBwZGZsdXNoKSBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSA1OworaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSAxMDsKIAogLyoKICAqIGRpcnR5X2JhY2tncm91bmRfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEgZnVuY3Rpb24gb2YKQEAgLTgzLDcgKzgzLDcgQEAKIC8qCiAgKiBUaGUgZ2VuZXJhdG9yIG9mIGRpcnR5IGRhdGEgc3RhcnRzIHdyaXRlYmFjayBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IHZtX2RpcnR5X3JhdGlvID0gMTA7CitpbnQgdm1fZGlydHlfcmF0aW8gPSAyMDsKIAogLyoKICAqIHZtX2RpcnR5X2J5dGVzIHN0YXJ0cyBhdCAwIChkaXNhYmxlZCkgc28gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uIG9mCkBAIC0yNDAsNyArMjQwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJkaV93cml0ZW91dF9pbmMpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19kaXJ0eV9pbmMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit2b2lkIHRhc2tfZGlydHlfaW5jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXByb3BfaW5jX3NpbmdsZSgmdm1fZGlydGllcywgJnRzay0+ZGlydGllcyk7CiB9CkBAIC0xMjMwLDYgKzEyMzAsNyBAQAogCQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX0RJUlRZKTsKIAkJCQlfX2luY19iZGlfc3RhdChtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAogCQkJCQkJQkRJX1JFQ0xBSU1BQkxFKTsKKwkJCQl0YXNrX2RpcnR5X2luYyhjdXJyZW50KTsKIAkJCQl0YXNrX2lvX2FjY291bnRfd3JpdGUoUEFHRV9DQUNIRV9TSVpFKTsKIAkJCX0KIAkJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLApAQCAtMTI2Miw3ICsxMjYzLDcgQEAKICAqIElmIHRoZSBtYXBwaW5nIGRvZXNuJ3QgcHJvdmlkZSBhIHNldF9wYWdlX2RpcnR5IGFfb3AsIHRoZW4KICAqIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCBhc3N1bWUgdGhhdCBpdCB3YW50cyBidWZmZXJfaGVhZHMuCiAgKi8KLXN0YXRpYyBpbnQgX19zZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSkKK2ludCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIApAQCAtMTI4MCwxNCArMTI4MSw2IEBACiAJfQogCXJldHVybiAwOwogfQotCi1pbnQgc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JaW50IHJldCA9IF9fc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JaWYgKHJldCkKLQkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7Ci0JcmV0dXJuIHJldDsKLX0KIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VfZGlydHkpOwogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDU2NzViMzAuLjVjNDRlZDQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTI5ODksNyArMjk4OSw3IEBACiAgKiB3YXMgdXNlZCBhbmQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgcmVxdWlyZW1lbnRzLCB0aGlzIGlzIGEgY29udmVuaWVudAogICogYWx0ZXJuYXRpdmUKICAqLwotaW50IF9fbWVtaW5pdCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQoraW50IF9fbWVtaW5pdCBfX2Vhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJaW50IGk7CiAKQEAgLTMwMDAsMTEgKzMwMDAsMzQgQEAKIAkJaWYgKHN0YXJ0X3BmbiA8PSBwZm4gJiYgcGZuIDwgZW5kX3BmbikKIAkJCXJldHVybiBlYXJseV9ub2RlX21hcFtpXS5uaWQ7CiAJfQotCi0JcmV0dXJuIDA7CisJLyogVGhpcyBpcyBhIG1lbW9yeSBob2xlICovCisJcmV0dXJuIC0xOwogfQogI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRCAqLwogCitpbnQgX19tZW1pbml0IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJaW50IG5pZDsKKworCW5pZCA9IF9fZWFybHlfcGZuX3RvX25pZChwZm4pOworCWlmIChuaWQgPj0gMCkKKwkJcmV0dXJuIG5pZDsKKwkvKiBqdXN0IHJldHVybnMgMCAqLworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX05PREVTX1NQQU5fT1RIRVJfTk9ERVMKK2Jvb2wgX19tZW1pbml0IGVhcmx5X3Bmbl9pbl9uaWQodW5zaWduZWQgbG9uZyBwZm4sIGludCBub2RlKQoreworCWludCBuaWQ7CisKKwluaWQgPSBfX2Vhcmx5X3Bmbl90b19uaWQocGZuKTsKKwlpZiAobmlkID49IDAgJiYgbmlkICE9IG5vZGUpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiAvKiBCYXNpYyBpdGVyYXRvciBzdXBwb3J0IHRvIHdhbGsgZWFybHlfbm9kZV9tYXBbXSAqLwogI2RlZmluZSBmb3JfZWFjaF9hY3RpdmVfcmFuZ2VfaW5kZXhfaW5fbmlkKGksIG5pZCkgXAogCWZvciAoaSA9IGZpcnN0X2FjdGl2ZV9yZWdpb25faW5kZXhfaW5fbmlkKG5pZCk7IGkgIT0gLTE7IFwKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uYwppbmRleCBkYzZjZTBhLi4zMDIzYzQ3IDEwMDY0NAotLS0gYS9tbS9wYWdlX2lvLmMKKysrIGIvbW0vcGFnZV9pby5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkKLQkJcncgfD0gKDEgPDwgQklPX1JXX1NZTkMpOworCQlydyB8PSAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpOwogCWNvdW50X3ZtX2V2ZW50KFBTV1BPVVQpOwogCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggYmVjODNjMS4uOWNlMzAzZCAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTE3LDE5ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAotdm9pZCBkZWZhdWx0X3VucGx1Z19pb19mbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLX0KLUVYUE9SVF9TWU1CT0woZGVmYXVsdF91bnBsdWdfaW9fZm4pOwotCi1zdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8gPSB7Ci0JLnJhX3BhZ2VzCT0gVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQgLyBQQUdFX0NBQ0hFX1NJWkUsCi0JLnN0YXRlCQk9IDAsCi0JLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTUFQX0NPUFksCi0JLnVucGx1Z19pb19mbgk9IGRlZmF1bHRfdW5wbHVnX2lvX2ZuLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7Ci0KIC8qCiAgKiBJbml0aWFsaXNlIGEgc3RydWN0IGZpbGUncyByZWFkYWhlYWQgc3RhdGUuICBBc3N1bWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKICAqIG1lbXNldCAqcmEgdG8gemVyby4KQEAgLTIzMywxOCArMjIwLDYgQEAKIAkJKyBub2RlX3BhZ2Vfc3RhdGUobnVtYV9ub2RlX2lkKCksIE5SX0ZSRUVfUEFHRVMpKSAvIDIpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCByZWFkYWhlYWRfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBiZGlfaW5pdCgmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKLQlpZiAoIWVycikKLQkJYmRpX3JlZ2lzdGVyKCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIE5VTEwsICJkZWZhdWx0Iik7Ci0KLQlyZXR1cm4gZXJyOwotfQotc3Vic3lzX2luaXRjYWxsKHJlYWRhaGVhZF9pbml0KTsKLQogLyoKICAqIFN1Ym1pdCBJTyBmb3IgdGhlIHJlYWQtYWhlYWQgcmVxdWVzdCBpbiBmaWxlX3JhX3N0YXRlLgogICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCAxOWQ1NjZjLi43ZWM3OGUyIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udDsKIApAQCAtMTY5LDEzICsxNzAsMTMgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgc2htZW1fYWNjdF9zaXplKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGxvZmZfdCBzaXplKQogewotCXJldHVybiAoZmxhZ3MgJiBWTV9BQ0NPVU5UKSA/Ci0JCXNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfa2VybihWTV9BQ0NUKHNpemUpKSA6IDA7CisJcmV0dXJuIChmbGFncyAmIFZNX05PUkVTRVJWRSkgPworCQkwIDogc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeV9rZXJuKFZNX0FDQ1Qoc2l6ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2htZW1fdW5hY2N0X3NpemUodW5zaWduZWQgbG9uZyBmbGFncywgbG9mZl90IHNpemUpCiB7Ci0JaWYgKGZsYWdzICYgVk1fQUNDT1VOVCkKKwlpZiAoIShmbGFncyAmIFZNX05PUkVTRVJWRSkpCiAJCXZtX3VuYWNjdF9tZW1vcnkoVk1fQUNDVChzaXplKSk7CiB9CiAKQEAgLTE4NywxMyArMTg4LDEzIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNobWVtX2FjY3RfYmxvY2sodW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlyZXR1cm4gKGZsYWdzICYgVk1fQUNDT1VOVCkgPwotCQkwIDogc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeV9rZXJuKFZNX0FDQ1QoUEFHRV9DQUNIRV9TSVpFKSk7CisJcmV0dXJuIChmbGFncyAmIFZNX05PUkVTRVJWRSkgPworCQlzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X2tlcm4oVk1fQUNDVChQQUdFX0NBQ0hFX1NJWkUpKSA6IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaG1lbV91bmFjY3RfYmxvY2tzKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGxvbmcgcGFnZXMpCiB7Ci0JaWYgKCEoZmxhZ3MgJiBWTV9BQ0NPVU5UKSkKKwlpZiAoZmxhZ3MgJiBWTV9OT1JFU0VSVkUpCiAJCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMgKiBWTV9BQ0NUKFBBR0VfQ0FDSEVfU0laRSkpOwogfQogCkBAIC0xNTE1LDggKzE1MTYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlub2RlICoKLXNobWVtX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgZGV2X3QgZGV2KQorc3RhdGljIHN0cnVjdCBpbm9kZSAqc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLAorCQkJCQlkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbzsKQEAgLTE1MzcsNiArMTUzOCw3IEBACiAJCWluZm8gPSBTSE1FTV9JKGlub2RlKTsKIAkJbWVtc2V0KGluZm8sIDAsIChjaGFyICopaW5vZGUgLSAoY2hhciAqKWluZm8pOwogCQlzcGluX2xvY2tfaW5pdCgmaW5mby0+bG9jayk7CisJCWluZm8tPmZsYWdzID0gZmxhZ3MgJiBWTV9OT1JFU0VSVkU7CiAJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5zd2FwbGlzdCk7CiAKIAkJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CkBAIC0xNzc5LDkgKzE3ODEsMTAgQEAKIHN0YXRpYyBpbnQKIHNobWVtX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IHNobWVtX2dldF9pbm9kZShkaXItPmlfc2IsIG1vZGUsIGRldik7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyb3IgPSAtRU5PU1BDOwogCisJaW5vZGUgPSBzaG1lbV9nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlLCBkZXYsIFZNX05PUkVTRVJWRSk7CiAJaWYgKGlub2RlKSB7CiAJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBOVUxMLCBOVUxMLAogCQkJCQkJICAgICBOVUxMKTsKQEAgLTE5MjAsNyArMTkyMyw3IEBACiAJaWYgKGxlbiA+IFBBR0VfQ0FDSEVfU0laRSkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKLQlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShkaXItPmlfc2IsIFNfSUZMTkt8U19JUldYVUdPLCAwKTsKKwlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShkaXItPmlfc2IsIFNfSUZMTkt8U19JUldYVUdPLCAwLCBWTV9OT1JFU0VSVkUpOwogCWlmICghaW5vZGUpCiAJCXJldHVybiAtRU5PU1BDOwogCkBAIC0yMzMyLDcgKzIzMzUsNyBAQAogCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOwogI2VuZGlmCiAKLQlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IHNiaW5mby0+bW9kZSwgMCk7CisJaW5vZGUgPSBzaG1lbV9nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCBzYmluZm8tPm1vZGUsIDAsIFZNX05PUkVTRVJWRSk7CiAJaWYgKCFpbm9kZSkKIAkJZ290byBmYWlsZWQ7CiAJaW5vZGUtPmlfdWlkID0gc2JpbmZvLT51aWQ7CkBAIC0yNTc0LDEyICsyNTc3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgc2htZW1fZmlsZV9vcGVyYXRpb25zIHJhbWZzX2ZpbGVfb3BlcmF0aW9ucwotI2RlZmluZSBzaG1lbV92bV9vcHMgZ2VuZXJpY19maWxlX3ZtX29wcwotI2RlZmluZSBzaG1lbV9nZXRfaW5vZGUgcmFtZnNfZ2V0X2lub2RlCi0jZGVmaW5lIHNobWVtX2FjY3Rfc2l6ZShhLCBiKSAwCi0jZGVmaW5lIHNobWVtX3VuYWNjdF9zaXplKGEsIGIpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBTSE1FTV9NQVhfQllURVMgTExPTkdfTUFYCisjZGVmaW5lIHNobWVtX3ZtX29wcwkJCQlnZW5lcmljX2ZpbGVfdm1fb3BzCisjZGVmaW5lIHNobWVtX2ZpbGVfb3BlcmF0aW9ucwkJCXJhbWZzX2ZpbGVfb3BlcmF0aW9ucworI2RlZmluZSBzaG1lbV9nZXRfaW5vZGUoc2IsIG1vZGUsIGRldiwgZmxhZ3MpCXJhbWZzX2dldF9pbm9kZShzYiwgbW9kZSwgZGV2KQorI2RlZmluZSBzaG1lbV9hY2N0X3NpemUoZmxhZ3MsIHNpemUpCQkwCisjZGVmaW5lIHNobWVtX3VuYWNjdF9zaXplKGZsYWdzLCBzaXplKQkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIFNITUVNX01BWF9CWVRFUwkJCQlMTE9OR19NQVgKIAogI2VuZGlmIC8qIENPTkZJR19TSE1FTSAqLwogCkBAIC0yNTg5LDcgKzI1OTIsNyBAQAogICogc2htZW1fZmlsZV9zZXR1cCAtIGdldCBhbiB1bmxpbmtlZCBmaWxlIGxpdmluZyBpbiB0bXBmcwogICogQG5hbWU6IG5hbWUgZm9yIGRlbnRyeSAodG8gYmUgc2VlbiBpbiAvcHJvYy88cGlkPi9tYXBzCiAgKiBAc2l6ZTogc2l6ZSB0byBiZSBzZXQgZm9yIHRoZSBmaWxlCi0gKiBAZmxhZ3M6IHZtX2ZsYWdzCisgKiBAZmxhZ3M6IFZNX05PUkVTRVJWRSBzdXBwcmVzc2VzIHByZS1hY2NvdW50aW5nIG9mIHRoZSBlbnRpcmUgb2JqZWN0IHNpemUKICAqLwogc3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0dXAoY2hhciAqbmFtZSwgbG9mZl90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC0yNjIzLDEzICsyNjI2LDEwIEBACiAJCWdvdG8gcHV0X2RlbnRyeTsKIAogCWVycm9yID0gLUVOT1NQQzsKLQlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShyb290LT5kX3NiLCBTX0lGUkVHIHwgU19JUldYVUdPLCAwKTsKKwlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShyb290LT5kX3NiLCBTX0lGUkVHIHwgU19JUldYVUdPLCAwLCBmbGFncyk7CiAJaWYgKCFpbm9kZSkKIAkJZ290byBjbG9zZV9maWxlOwogCi0jaWZkZWYgQ09ORklHX1NITUVNCi0JU0hNRU1fSShpbm9kZSktPmZsYWdzID0gKGZsYWdzICYgVk1fTk9SRVNFUlZFKSA/IDAgOiBWTV9BQ0NPVU5UOwotI2VuZGlmCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlpbm9kZS0+aV9zaXplID0gc2l6ZTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CS8qIEl0IGlzIHVubGlua2VkICovCkBAIC0yNjY2LDYgKzI2NjYsNyBAQAogCWlmIChJU19FUlIoZmlsZSkpCiAJCXJldHVybiBQVFJfRVJSKGZpbGUpOwogCisJaW1hX3NobV9jaGVjayhmaWxlKTsKIAlpZiAodm1hLT52bV9maWxlKQogCQlmcHV0KHZtYS0+dm1fZmlsZSk7CiAJdm1hLT52bV9maWxlID0gZmlsZTsKZGlmZiAtLWdpdCBhL21tL3Nsb2IuYyBiL21tL3Nsb2IuYwppbmRleCA1MmJjOGEyLi4wYmZhNjgwIDEwMDY0NAotLS0gYS9tbS9zbG9iLmMKKysrIGIvbW0vc2xvYi5jCkBAIC0xMjYsOSArMTI2LDkgQEAKIHN0YXRpYyBMSVNUX0hFQUQoZnJlZV9zbG9iX2xhcmdlKTsKIAogLyoKLSAqIHNsb2JfcGFnZTogVHJ1ZSBmb3IgYWxsIHNsb2IgcGFnZXMgKGZhbHNlIGZvciBiaWdibG9jayBwYWdlcykKKyAqIGlzX3Nsb2JfcGFnZTogVHJ1ZSBmb3IgYWxsIHNsb2IgcGFnZXMgKGZhbHNlIGZvciBiaWdibG9jayBwYWdlcykKICAqLwotc3RhdGljIGlubGluZSBpbnQgc2xvYl9wYWdlKHN0cnVjdCBzbG9iX3BhZ2UgKnNwKQorc3RhdGljIGlubGluZSBpbnQgaXNfc2xvYl9wYWdlKHN0cnVjdCBzbG9iX3BhZ2UgKnNwKQogewogCXJldHVybiBQYWdlU2xvYlBhZ2UoKHN0cnVjdCBwYWdlICopc3ApOwogfQpAQCAtMTQzLDYgKzE0MywxMSBAQAogCV9fQ2xlYXJQYWdlU2xvYlBhZ2UoKHN0cnVjdCBwYWdlICopc3ApOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbG9iX3BhZ2UgKnNsb2JfcGFnZShjb25zdCB2b2lkICphZGRyKQoreworCXJldHVybiAoc3RydWN0IHNsb2JfcGFnZSAqKXZpcnRfdG9fcGFnZShhZGRyKTsKK30KKwogLyoKICAqIHNsb2JfcGFnZV9mcmVlOiB0cnVlIGZvciBwYWdlcyBvbiBmcmVlX3Nsb2JfcGFnZXMgbGlzdC4KICAqLwpAQCAtMjMwLDcgKzIzNSw3IEBACiAJcmV0dXJuICEoKHVuc2lnbmVkIGxvbmcpc2xvYl9uZXh0KHMpICYgflBBR0VfTUFTSyk7CiB9CiAKLXN0YXRpYyB2b2lkICpzbG9iX25ld19wYWdlKGdmcF90IGdmcCwgaW50IG9yZGVyLCBpbnQgbm9kZSkKK3N0YXRpYyB2b2lkICpzbG9iX25ld19wYWdlcyhnZnBfdCBnZnAsIGludCBvcmRlciwgaW50IG5vZGUpCiB7CiAJdm9pZCAqcGFnZTsKIApAQCAtMjQ3LDEyICsyNTIsMTcgQEAKIAlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogfQogCitzdGF0aWMgdm9pZCBzbG9iX2ZyZWVfcGFnZXModm9pZCAqYiwgaW50IG9yZGVyKQoreworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYiwgb3JkZXIpOworfQorCiAvKgogICogQWxsb2NhdGUgYSBzbG9iIGJsb2NrIHdpdGhpbiBhIGdpdmVuIHNsb2JfcGFnZSBzcC4KICAqLwogc3RhdGljIHZvaWQgKnNsb2JfcGFnZV9hbGxvYyhzdHJ1Y3Qgc2xvYl9wYWdlICpzcCwgc2l6ZV90IHNpemUsIGludCBhbGlnbikKIHsKLQlzbG9iX3QgKnByZXYsICpjdXIsICphbGlnbmVkID0gMDsKKwlzbG9iX3QgKnByZXYsICpjdXIsICphbGlnbmVkID0gTlVMTDsKIAlpbnQgZGVsdGEgPSAwLCB1bml0cyA9IFNMT0JfVU5JVFMoc2l6ZSk7CiAKIAlmb3IgKHByZXYgPSBOVUxMLCBjdXIgPSBzcC0+ZnJlZTsgOyBwcmV2ID0gY3VyLCBjdXIgPSBzbG9iX25leHQoY3VyKSkgewpAQCAtMzQ5LDEwICszNTksMTAgQEAKIAogCS8qIE5vdCBlbm91Z2ggc3BhY2U6IG11c3QgYWxsb2NhdGUgYSBuZXcgcGFnZSAqLwogCWlmICghYikgewotCQliID0gc2xvYl9uZXdfcGFnZShnZnAgJiB+X19HRlBfWkVSTywgMCwgbm9kZSk7CisJCWIgPSBzbG9iX25ld19wYWdlcyhnZnAgJiB+X19HRlBfWkVSTywgMCwgbm9kZSk7CiAJCWlmICghYikKLQkJCXJldHVybiAwOwotCQlzcCA9IChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGIpOworCQkJcmV0dXJuIE5VTEw7CisJCXNwID0gc2xvYl9wYWdlKGIpOwogCQlzZXRfc2xvYl9wYWdlKHNwKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvYl9sb2NrLCBmbGFncyk7CkBAIC0zODQsNyArMzk0LDcgQEAKIAkJcmV0dXJuOwogCUJVR19PTighc2l6ZSk7CiAKLQlzcCA9IChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGJsb2NrKTsKKwlzcCA9IHNsb2JfcGFnZShibG9jayk7CiAJdW5pdHMgPSBTTE9CX1VOSVRTKHNpemUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb2JfbG9jaywgZmxhZ3MpOwpAQCAtMzkzLDEwICs0MDMsMTEgQEAKIAkJLyogR28gZGlyZWN0bHkgdG8gcGFnZSBhbGxvY2F0b3IuIERvIG5vdCBwYXNzIHNsb2IgYWxsb2NhdG9yICovCiAJCWlmIChzbG9iX3BhZ2VfZnJlZShzcCkpCiAJCQljbGVhcl9zbG9iX3BhZ2VfZnJlZShzcCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb2JfbG9jaywgZmxhZ3MpOwogCQljbGVhcl9zbG9iX3BhZ2Uoc3ApOwogCQlmcmVlX3Nsb2JfcGFnZShzcCk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyliKTsKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAl9CiAKIAlpZiAoIXNsb2JfcGFnZV9mcmVlKHNwKSkgewpAQCAtNDc2LDcgKzQ4Nyw3IEBACiAJfSBlbHNlIHsKIAkJdm9pZCAqcmV0OwogCi0JCXJldCA9IHNsb2JfbmV3X3BhZ2UoZ2ZwIHwgX19HRlBfQ09NUCwgZ2V0X29yZGVyKHNpemUpLCBub2RlKTsKKwkJcmV0ID0gc2xvYl9uZXdfcGFnZXMoZ2ZwIHwgX19HRlBfQ09NUCwgZ2V0X29yZGVyKHNpemUpLCBub2RlKTsKIAkJaWYgKHJldCkgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCQlwYWdlID0gdmlydF90b19wYWdlKHJldCk7CkBAIC00OTQsOCArNTA1LDggQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihibG9jaykpKQogCQlyZXR1cm47CiAKLQlzcCA9IChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGJsb2NrKTsKLQlpZiAoc2xvYl9wYWdlKHNwKSkgeworCXNwID0gc2xvYl9wYWdlKGJsb2NrKTsKKwlpZiAoaXNfc2xvYl9wYWdlKHNwKSkgewogCQlpbnQgYWxpZ24gPSBtYXgoQVJDSF9LTUFMTE9DX01JTkFMSUdOLCBBUkNIX1NMQUJfTUlOQUxJR04pOwogCQl1bnNpZ25lZCBpbnQgKm0gPSAodW5zaWduZWQgaW50ICopKGJsb2NrIC0gYWxpZ24pOwogCQlzbG9iX2ZyZWUobSwgKm0gKyBhbGlnbik7CkBAIC01MTMsOCArNTI0LDggQEAKIAlpZiAodW5saWtlbHkoYmxvY2sgPT0gWkVST19TSVpFX1BUUikpCiAJCXJldHVybiAwOwogCi0Jc3AgPSAoc3RydWN0IHNsb2JfcGFnZSAqKXZpcnRfdG9fcGFnZShibG9jayk7Ci0JaWYgKHNsb2JfcGFnZShzcCkpIHsKKwlzcCA9IHNsb2JfcGFnZShibG9jayk7CisJaWYgKGlzX3Nsb2JfcGFnZShzcCkpIHsKIAkJaW50IGFsaWduID0gbWF4KEFSQ0hfS01BTExPQ19NSU5BTElHTiwgQVJDSF9TTEFCX01JTkFMSUdOKTsKIAkJdW5zaWduZWQgaW50ICptID0gKHVuc2lnbmVkIGludCAqKShibG9jayAtIGFsaWduKTsKIAkJcmV0dXJuIFNMT0JfVU5JVFMoKm0pICogU0xPQl9VTklUOwpAQCAtNTczLDcgKzU4NCw3IEBACiAJaWYgKGMtPnNpemUgPCBQQUdFX1NJWkUpCiAJCWIgPSBzbG9iX2FsbG9jKGMtPnNpemUsIGZsYWdzLCBjLT5hbGlnbiwgbm9kZSk7CiAJZWxzZQotCQliID0gc2xvYl9uZXdfcGFnZShmbGFncywgZ2V0X29yZGVyKGMtPnNpemUpLCBub2RlKTsKKwkJYiA9IHNsb2JfbmV3X3BhZ2VzKGZsYWdzLCBnZXRfb3JkZXIoYy0+c2l6ZSksIG5vZGUpOwogCiAJaWYgKGMtPmN0b3IpCiAJCWMtPmN0b3IoYik7CkBAIC01ODcsNyArNTk4LDcgQEAKIAlpZiAoc2l6ZSA8IFBBR0VfU0laRSkKIAkJc2xvYl9mcmVlKGIsIHNpemUpOwogCWVsc2UKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyliLCBnZXRfb3JkZXIoc2l6ZSkpOworCQlzbG9iX2ZyZWVfcGFnZXMoYiwgZ2V0X29yZGVyKHNpemUpKTsKIH0KIAogc3RhdGljIHZvaWQga21lbV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggMDI4MGVlZS4uYzY1YTRlZCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMzc0LDE0ICszNzQsOCBAQAogc3RhdGljIHZvaWQgc2V0X3RyYWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsCiAJCQllbnVtIHRyYWNrX2l0ZW0gYWxsb2MsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlzdHJ1Y3QgdHJhY2sgKnA7CisJc3RydWN0IHRyYWNrICpwID0gZ2V0X3RyYWNrKHMsIG9iamVjdCwgYWxsb2MpOwogCi0JaWYgKHMtPm9mZnNldCkKLQkJcCA9IG9iamVjdCArIHMtPm9mZnNldCArIHNpemVvZih2b2lkICopOwotCWVsc2UKLQkJcCA9IG9iamVjdCArIHMtPmludXNlOwotCi0JcCArPSBhbGxvYzsKIAlpZiAoYWRkcikgewogCQlwLT5hZGRyID0gYWRkcjsKIAkJcC0+Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMTMzNSw3ICsxMzI5LDcgQEAKIAkJbiA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTsKIAogCQlpZiAobiAmJiBjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHpvbmUsIGZsYWdzKSAmJgotCQkJCW4tPm5yX3BhcnRpYWwgPiBuLT5taW5fcGFydGlhbCkgeworCQkJCW4tPm5yX3BhcnRpYWwgPiBzLT5taW5fcGFydGlhbCkgewogCQkJcGFnZSA9IGdldF9wYXJ0aWFsX25vZGUobik7CiAJCQlpZiAocGFnZSkKIAkJCQlyZXR1cm4gcGFnZTsKQEAgLTEzODcsNyArMTM4MSw3IEBACiAJCXNsYWJfdW5sb2NrKHBhZ2UpOwogCX0gZWxzZSB7CiAJCXN0YXQoYywgREVBQ1RJVkFURV9FTVBUWSk7Ci0JCWlmIChuLT5ucl9wYXJ0aWFsIDwgbi0+bWluX3BhcnRpYWwpIHsKKwkJaWYgKG4tPm5yX3BhcnRpYWwgPCBzLT5taW5fcGFydGlhbCkgewogCQkJLyoKIAkJCSAqIEFkZGluZyBhbiBlbXB0eSBzbGFiIHRvIHRoZSBwYXJ0aWFsIHNsYWJzIGluIG9yZGVyCiAJCQkgKiB0byBhdm9pZCBwYWdlIGFsbG9jYXRvciBvdmVyaGVhZC4gVGhpcyBzbGFiIG5lZWRzCkBAIC0xNzI0LDcgKzE3MTgsNyBAQAogCWMgPSBnZXRfY3B1X3NsYWIocywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChvYmplY3QsIGMtPm9ianNpemUpOwogCWlmICghKHMtPmZsYWdzICYgU0xBQl9ERUJVR19PQkpFQ1RTKSkKLQkJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9iamVjdCwgcy0+b2Jqc2l6ZSk7CisJCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmplY3QsIGMtPm9ianNpemUpOwogCWlmIChsaWtlbHkocGFnZSA9PSBjLT5wYWdlICYmIGMtPm5vZGUgPj0gMCkpIHsKIAkJb2JqZWN0W2MtPm9mZnNldF0gPSBjLT5mcmVlbGlzdDsKIAkJYy0+ZnJlZWxpc3QgPSBvYmplY3Q7CkBAIC0xODQ0LDYgKzE4MzgsNyBAQAogCWludCBvcmRlcjsKIAlpbnQgbWluX29iamVjdHM7CiAJaW50IGZyYWN0aW9uOworCWludCBtYXhfb2JqZWN0czsKIAogCS8qCiAJICogQXR0ZW1wdCB0byBmaW5kIGJlc3QgY29uZmlndXJhdGlvbiBmb3IgYSBzbGFiLiBUaGlzCkBAIC0xODU2LDYgKzE4NTEsOSBAQAogCW1pbl9vYmplY3RzID0gc2x1Yl9taW5fb2JqZWN0czsKIAlpZiAoIW1pbl9vYmplY3RzKQogCQltaW5fb2JqZWN0cyA9IDQgKiAoZmxzKG5yX2NwdV9pZHMpICsgMSk7CisJbWF4X29iamVjdHMgPSAoUEFHRV9TSVpFIDw8IHNsdWJfbWF4X29yZGVyKS9zaXplOworCW1pbl9vYmplY3RzID0gbWluKG1pbl9vYmplY3RzLCBtYXhfb2JqZWN0cyk7CisKIAl3aGlsZSAobWluX29iamVjdHMgPiAxKSB7CiAJCWZyYWN0aW9uID0gMTY7CiAJCXdoaWxlIChmcmFjdGlvbiA+PSA0KSB7CkBAIC0xODY1LDcgKzE4NjMsNyBAQAogCQkJCXJldHVybiBvcmRlcjsKIAkJCWZyYWN0aW9uIC89IDI7CiAJCX0KLQkJbWluX29iamVjdHMgLz0gMjsKKwkJbWluX29iamVjdHMgLS07CiAJfQogCiAJLyoKQEAgLTE5MjgsMTcgKzE5MjYsNiBAQAogaW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IGttZW1fY2FjaGUgKnMpCiB7CiAJbi0+bnJfcGFydGlhbCA9IDA7Ci0KLQkvKgotCSAqIFRoZSBsYXJnZXIgdGhlIG9iamVjdCBzaXplIGlzLCB0aGUgbW9yZSBwYWdlcyB3ZSB3YW50IG9uIHRoZSBwYXJ0aWFsCi0JICogbGlzdCB0byBhdm9pZCBwb3VuZGluZyB0aGUgcGFnZSBhbGxvY2F0b3IgZXhjZXNzaXZlbHkuCi0JICovCi0Jbi0+bWluX3BhcnRpYWwgPSBpbG9nMihzLT5zaXplKTsKLQlpZiAobi0+bWluX3BhcnRpYWwgPCBNSU5fUEFSVElBTCkKLQkJbi0+bWluX3BhcnRpYWwgPSBNSU5fUEFSVElBTDsKLQllbHNlIGlmIChuLT5taW5fcGFydGlhbCA+IE1BWF9QQVJUSUFMKQotCQluLT5taW5fcGFydGlhbCA9IE1BWF9QQVJUSUFMOwotCiAJc3Bpbl9sb2NrX2luaXQoJm4tPmxpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm4tPnBhcnRpYWwpOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCkBAIC0yMTgxLDYgKzIxNjgsMTUgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBzZXRfbWluX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHVuc2lnbmVkIGxvbmcgbWluKQoreworCWlmIChtaW4gPCBNSU5fUEFSVElBTCkKKwkJbWluID0gTUlOX1BBUlRJQUw7CisJZWxzZSBpZiAobWluID4gTUFYX1BBUlRJQUwpCisJCW1pbiA9IE1BWF9QQVJUSUFMOworCXMtPm1pbl9wYXJ0aWFsID0gbWluOworfQorCiAvKgogICogY2FsY3VsYXRlX3NpemVzKCkgZGV0ZXJtaW5lcyB0aGUgb3JkZXIgYW5kIHRoZSBkaXN0cmlidXRpb24gb2YgZGF0YSB3aXRoaW4KICAqIGEgc2xhYiBvYmplY3QuCkBAIC0yMzE5LDYgKzIzMTUsMTEgQEAKIAlpZiAoIWNhbGN1bGF0ZV9zaXplcyhzLCAtMSkpCiAJCWdvdG8gZXJyb3I7CiAKKwkvKgorCSAqIFRoZSBsYXJnZXIgdGhlIG9iamVjdCBzaXplIGlzLCB0aGUgbW9yZSBwYWdlcyB3ZSB3YW50IG9uIHRoZSBwYXJ0aWFsCisJICogbGlzdCB0byBhdm9pZCBwb3VuZGluZyB0aGUgcGFnZSBhbGxvY2F0b3IgZXhjZXNzaXZlbHkuCisJICovCisJc2V0X21pbl9wYXJ0aWFsKHMsIGlsb2cyKHMtPnNpemUpKTsKIAlzLT5yZWZjb3VudCA9IDE7CiAjaWZkZWYgQ09ORklHX05VTUEKIAlzLT5yZW1vdGVfbm9kZV9kZWZyYWdfcmF0aW8gPSAxMDAwOwpAQCAtMjQ3NSw3ICsyNDc2LDcgQEAKICAqCQlLbWFsbG9jIHN1YnN5c3RlbQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW1BBR0VfU0hJRlQgKyAxXSBfX2NhY2hlbGluZV9hbGlnbmVkOworc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbU0xVQl9QQUdFX1NISUZUXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogRVhQT1JUX1NZTUJPTChrbWFsbG9jX2NhY2hlcyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsdWJfbWluX29yZGVyKGNoYXIgKnN0cikKQEAgLTI1MzcsNyArMjUzOCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ETUEKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21hbGxvY19jYWNoZXNfZG1hW1BBR0VfU0hJRlQgKyAxXTsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21hbGxvY19jYWNoZXNfZG1hW1NMVUJfUEFHRV9TSElGVF07CiAKIHN0YXRpYyB2b2lkIHN5c2ZzX2FkZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIHsKQEAgLTI2NTgsNyArMjY1OSw3IEBACiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKLQlpZiAodW5saWtlbHkoc2l6ZSA+IFBBR0VfU0laRSkpCisJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKIAkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZmxhZ3MpOwogCiAJcyA9IGdldF9zbGFiKHNpemUsIGZsYWdzKTsKQEAgLTI2ODYsNyArMjY4Nyw3IEBACiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKLQlpZiAodW5saWtlbHkoc2l6ZSA+IFBBR0VfU0laRSkpCisJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKIAkJcmV0dXJuIGttYWxsb2NfbGFyZ2Vfbm9kZShzaXplLCBmbGFncywgbm9kZSk7CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZmxhZ3MpOwpAQCAtMjk4Niw3ICsyOTg3LDcgQEAKIAkJY2FjaGVzKys7CiAJfQogCi0JZm9yIChpID0gS01BTExPQ19TSElGVF9MT1c7IGkgPD0gUEFHRV9TSElGVDsgaSsrKSB7CisJZm9yIChpID0gS01BTExPQ19TSElGVF9MT1c7IGkgPCBTTFVCX1BBR0VfU0hJRlQ7IGkrKykgewogCQljcmVhdGVfa21hbGxvY19jYWNoZSgma21hbGxvY19jYWNoZXNbaV0sCiAJCQkia21hbGxvYyIsIDEgPDwgaSwgR0ZQX0tFUk5FTCk7CiAJCWNhY2hlcysrOwpAQCAtMzAyMyw3ICszMDI0LDcgQEAKIAlzbGFiX3N0YXRlID0gVVA7CiAKIAkvKiBQcm92aWRlIHRoZSBjb3JyZWN0IGttYWxsb2MgbmFtZXMgbm93IHRoYXQgdGhlIGNhY2hlcyBhcmUgdXAgKi8KLQlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8PSBQQUdFX1NISUZUOyBpKyspCisJZm9yIChpID0gS01BTExPQ19TSElGVF9MT1c7IGkgPCBTTFVCX1BBR0VfU0hJRlQ7IGkrKykKIAkJa21hbGxvY19jYWNoZXNbaV0uIG5hbWUgPQogCQkJa2FzcHJpbnRmKEdGUF9LRVJORUwsICJrbWFsbG9jLSVkIiwgMSA8PCBpKTsKIApAQCAtMzIyMyw3ICszMjI0LDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZShzaXplLCBnZnBmbGFncyk7CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZ2ZwZmxhZ3MpOwpAQCAtMzIzOSw3ICszMjQwLDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGdmcGZsYWdzLCBub2RlKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBnZnBmbGFncyk7CkBAIC0zODM2LDYgKzM4MzcsMjYgQEAKIH0KIFNMQUJfQVRUUihvcmRlcik7CiAKK3N0YXRpYyBzc2l6ZV90IG1pbl9wYXJ0aWFsX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHMtPm1pbl9wYXJ0aWFsKTsKK30KKworc3RhdGljIHNzaXplX3QgbWluX3BhcnRpYWxfc3RvcmUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBsb25nIG1pbjsKKwlpbnQgZXJyOworCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1pbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNldF9taW5fcGFydGlhbChzLCBtaW4pOworCXJldHVybiBsZW5ndGg7Cit9CitTTEFCX0FUVFIobWluX3BhcnRpYWwpOworCiBzdGF0aWMgc3NpemVfdCBjdG9yX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKIHsKIAlpZiAocy0+Y3RvcikgewpAQCAtNDE1MSw2ICs0MTcyLDcgQEAKIAkmb2JqZWN0X3NpemVfYXR0ci5hdHRyLAogCSZvYmpzX3Blcl9zbGFiX2F0dHIuYXR0ciwKIAkmb3JkZXJfYXR0ci5hdHRyLAorCSZtaW5fcGFydGlhbF9hdHRyLmF0dHIsCiAJJm9iamVjdHNfYXR0ci5hdHRyLAogCSZvYmplY3RzX3BhcnRpYWxfYXR0ci5hdHRyLAogCSZ0b3RhbF9vYmplY3RzX2F0dHIuYXR0ciwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDdlNjMwNGQuLjMxMmZhZmUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtNjM1LDcgKzYzNSw3IEBACiAKIAkJaWYgKCFiZGV2KSB7CiAJCQlpZiAoYmRldl9wKQotCQkJCSpiZGV2X3AgPSBzaXMtPmJkZXY7CisJCQkJKmJkZXZfcCA9IGJkZ2V0KHNpcy0+YmRldi0+YmRfZGV2KTsKIAogCQkJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CiAJCQlyZXR1cm4gaTsKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCQkJCQlzdHJ1Y3Qgc3dhcF9leHRlbnQsIGxpc3QpOwogCQkJaWYgKHNlLT5zdGFydF9ibG9jayA9PSBvZmZzZXQpIHsKIAkJCQlpZiAoYmRldl9wKQotCQkJCQkqYmRldl9wID0gc2lzLT5iZGV2OworCQkJCQkqYmRldl9wID0gYmRnZXQoc2lzLT5iZGV2LT5iZF9kZXYpOwogCiAJCQkJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CiAJCQkJYmRwdXQoYmRldik7CmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKaW5kZXggY2IwMGI3NC4uMzdlYWNjZCAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCisrKyBiL21tL3V0aWwuYwpAQCAtMTI5LDYgKzEyOSwyNiBAQAogfQogRVhQT1JUX1NZTUJPTChrcmVhbGxvYyk7CiAKKy8qKgorICoga3pmcmVlIC0gbGlrZSBrZnJlZSBidXQgemVybyBtZW1vcnkKKyAqIEBwOiBvYmplY3QgdG8gZnJlZSBtZW1vcnkgb2YKKyAqCisgKiBUaGUgbWVtb3J5IG9mIHRoZSBvYmplY3QgQHAgcG9pbnRzIHRvIGlzIHplcm9lZCBiZWZvcmUgZnJlZWQuCisgKiBJZiBAcCBpcyAlTlVMTCwga3pmcmVlKCkgZG9lcyBub3RoaW5nLgorICovCit2b2lkIGt6ZnJlZShjb25zdCB2b2lkICpwKQoreworCXNpemVfdCBrczsKKwl2b2lkICptZW0gPSAodm9pZCAqKXA7CisKKwlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihtZW0pKSkKKwkJcmV0dXJuOworCWtzID0ga3NpemUobWVtKTsKKwltZW1zZXQobWVtLCAwLCBrcyk7CisJa2ZyZWUobWVtKTsKK30KK0VYUE9SVF9TWU1CT0woa3pmcmVlKTsKKwogLyoKICAqIHN0cm5kdXBfdXNlciAtIGR1cGxpY2F0ZSBhbiBleGlzdGluZyBzdHJpbmcgZnJvbSB1c2VyIHNwYWNlCiAgKiBAczogVGhlIHN0cmluZyB0byBkdXBsaWNhdGUKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA3NWY0OWQzLi41MjBhNzU5IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0zMjMsNiArMzIzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJaW50IHB1cmdlZCA9IDA7CiAKKwlCVUdfT04oIXNpemUpOwogCUJVR19PTihzaXplICYgflBBR0VfTUFTSyk7CiAKIAl2YSA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHZtYXBfYXJlYSksCkBAIC0zMzQsNiArMzM1LDkgQEAKIAlhZGRyID0gQUxJR04odnN0YXJ0LCBhbGlnbik7CiAKIAlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwlpZiAoYWRkciArIHNpemUgLSAxIDwgYWRkcikKKwkJZ290byBvdmVyZmxvdzsKKwogCS8qIFhYWDogY291bGQgaGF2ZSBhIGxhc3RfaG9sZSBjYWNoZSAqLwogCW4gPSB2bWFwX2FyZWFfcm9vdC5yYl9ub2RlOwogCWlmIChuKSB7CkBAIC0zNjUsNiArMzY5LDggQEAKIAogCQl3aGlsZSAoYWRkciArIHNpemUgPiBmaXJzdC0+dmFfc3RhcnQgJiYgYWRkciArIHNpemUgPD0gdmVuZCkgewogCQkJYWRkciA9IEFMSUdOKGZpcnN0LT52YV9lbmQgKyBQQUdFX1NJWkUsIGFsaWduKTsKKwkJCWlmIChhZGRyICsgc2l6ZSAtIDEgPCBhZGRyKQorCQkJCWdvdG8gb3ZlcmZsb3c7CiAKIAkJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CiAJCQlpZiAobikKQEAgLTM3NSw2ICszODEsNyBAQAogCX0KIGZvdW5kOgogCWlmIChhZGRyICsgc2l6ZSA+IHZlbmQpIHsKK292ZXJmbG93OgogCQlzcGluX3VubG9jaygmdm1hcF9hcmVhX2xvY2spOwogCQlpZiAoIXB1cmdlZCkgewogCQkJcHVyZ2Vfdm1hcF9hcmVhX2xhenkoKTsKQEAgLTQ5OCw2ICs1MDUsNyBAQAogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHVyZ2VfbG9jayk7CiAJTElTVF9IRUFEKHZhbGlzdCk7CiAJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHZtYXBfYXJlYSAqbl92YTsKIAlpbnQgbnIgPSAwOwogCiAJLyoKQEAgLTUzNyw3ICs1NDUsNyBAQAogCiAJaWYgKG5yKSB7CiAJCXNwaW5fbG9jaygmdm1hcF9hcmVhX2xvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCAmdmFsaXN0LCBwdXJnZV9saXN0KQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmEsIG5fdmEsICZ2YWxpc3QsIHB1cmdlX2xpc3QpCiAJCQlfX2ZyZWVfdm1hcF9hcmVhKHZhKTsKIAkJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKIAl9CkBAIC0xMDEyLDYgKzEwMjAsOCBAQAogdm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKKworCWZsdXNoX2NhY2hlX3Z1bm1hcChhZGRyLCBlbmQpOwogCXZ1bm1hcF9wYWdlX3JhbmdlKGFkZHIsIGVuZCk7CiAJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBlbmQpOwogfQpAQCAtMTEwNiw2ICsxMTE2LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2dldF92bV9hcmVhKTsKIAorc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICAgICAgdm9pZCAqY2FsbGVyKQoreworCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAorCQkJCSAgY2FsbGVyKTsKK30KKwogLyoqCiAgKglnZXRfdm1fYXJlYSAgLSAgcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMga2VybmVsIHZpcnR1YWwgYXJlYQogICoJQHNpemU6CQlzaXplIG9mIHRoZSBhcmVhCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDlhMjdjNDQuLjU2ZGRmNDEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjYyLDcgKzEyNjIsNiBAQAogCSAqIE1vdmUgdGhlIHBhZ2VzIHRvIHRoZSBbZmlsZSBvciBhbm9uXSBpbmFjdGl2ZSBsaXN0LgogCSAqLwogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMSk7Ci0JcGdtb3ZlZCA9IDA7CiAJbHJ1ID0gTFJVX0JBU0UgKyBmaWxlICogTFJVX0ZJTEU7CiAKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CkBAIC0xMjc0LDYgKzEyNzMsNyBAQAogCSAqLwogCXJlY2xhaW1fc3RhdC0+cmVjZW50X3JvdGF0ZWRbISFmaWxlXSArPSBwZ21vdmVkOwogCisJcGdtb3ZlZCA9IDA7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZsX2luYWN0aXZlKSkgewogCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJmxfaW5hY3RpdmUpOwogCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCAmbF9pbmFjdGl2ZSwgZmxhZ3MpOwpAQCAtMTQ2OSw3ICsxNDY5LDcgQEAKIAkJaW50IGZpbGUgPSBpc19maWxlX2xydShsKTsKIAkJaW50IHNjYW47CiAKLQkJc2NhbiA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGwpOworCQlzY2FuID0gem9uZV9ucl9wYWdlcyh6b25lLCBzYywgbCk7CiAJCWlmIChwcmlvcml0eSkgewogCQkJc2NhbiA+Pj0gcHJpb3JpdHk7CiAJCQlzY2FuID0gKHNjYW4gKiBwZXJjZW50W2ZpbGVdKSAvIDEwMDsKQEAgLTIwNTcsMzEgKzIwNTcsMzEgQEAKIAkJCQkgICAgICBpbnQgcGFzcywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7Ci0JdW5zaWduZWQgbG9uZyBucl90b19zY2FuLCByZXQgPSAwOwotCWVudW0gbHJ1X2xpc3QgbDsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CiAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwkJZW51bSBscnVfbGlzdCBsOwogCiAJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCiAJCQljb250aW51ZTsKLQogCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSAmJiBwcmlvICE9IERFRl9QUklPUklUWSkKIAkJCWNvbnRpbnVlOwogCiAJCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgeworCQkJZW51bSB6b25lX3N0YXRfaXRlbSBscyA9IE5SX0xSVV9CQVNFICsgbDsKKwkJCXVuc2lnbmVkIGxvbmcgbHJ1X3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIGxzKTsKKwogCQkJLyogRm9yIHBhc3MgPSAwLCB3ZSBkb24ndCBzaHJpbmsgdGhlIGFjdGl2ZSBsaXN0ICovCi0JCQlpZiAocGFzcyA9PSAwICYmCi0JCQkJKGwgPT0gTFJVX0FDVElWRSB8fCBsID09IExSVV9BQ1RJVkVfRklMRSkpCisJCQlpZiAocGFzcyA9PSAwICYmIChsID09IExSVV9BQ1RJVkVfQU5PTiB8fAorCQkJCQkJbCA9PSBMUlVfQUNUSVZFX0ZJTEUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQl6b25lLT5scnVbbF0ubnJfc2NhbiArPQotCQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKQotCQkJCQkJCQk+PiBwcmlvKSArIDE7CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiArPSAobHJ1X3BhZ2VzID4+IHByaW8pICsgMTsKIAkJCWlmICh6b25lLT5scnVbbF0ubnJfc2NhbiA+PSBucl9wYWdlcyB8fCBwYXNzID4gMykgeworCQkJCXVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbjsKKwogCQkJCXpvbmUtPmxydVtsXS5ucl9zY2FuID0gMDsKLQkJCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLAotCQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwKLQkJCQkJCQlOUl9MUlVfQkFTRSArIGwpKTsKKwkJCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLCBscnVfcGFnZXMpOwogCQkJCXJldCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLCB6b25lLAogCQkJCQkJCQlzYywgcHJpbyk7CiAJCQkJaWYgKHJldCA+PSBucl9wYWdlcykKQEAgLTIwODksNyArMjA4OSw2IEBACiAJCQl9CiAJCX0KIAl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTEyLDcgKzIxMTEsNiBAQAogCQkubWF5X3N3YXAgPSAwLAogCQkuc3dhcF9jbHVzdGVyX21heCA9IG5yX3BhZ2VzLAogCQkubWF5X3dyaXRlcGFnZSA9IDEsCi0JCS5zd2FwcGluZXNzID0gdm1fc3dhcHBpbmVzcywKIAkJLmlzb2xhdGVfcGFnZXMgPSBpc29sYXRlX3BhZ2VzX2dsb2JhbCwKIAl9OwogCkBAIC0yMTQ2LDEwICsyMTQ0LDggQEAKIAkJaW50IHByaW87CiAKIAkJLyogRm9yY2UgcmVjbGFpbWluZyBtYXBwZWQgcGFnZXMgaW4gdGhlIHBhc3NlcyAjMyBhbmQgIzQgKi8KLQkJaWYgKHBhc3MgPiAyKSB7CisJCWlmIChwYXNzID4gMikKIAkJCXNjLm1heV9zd2FwID0gMTsKLQkJCXNjLnN3YXBwaW5lc3MgPSAxMDA7Ci0JCX0KIAogCQlmb3IgKHByaW8gPSBERUZfUFJJT1JJVFk7IHByaW8gPj0gMDsgcHJpby0tKSB7CiAJCQl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4gPSBucl9wYWdlcyAtIHJldDsKZGlmZiAtLWdpdCBhL25ldC84MDIvcHNuYXAuYyBiL25ldC84MDIvcHNuYXAuYwppbmRleCA2ZWQ3MTE3NC4uNmZlYTA3NSAxMDA2NDQKLS0tIGEvbmV0LzgwMi9wc25hcC5jCisrKyBiL25ldC84MDIvcHNuYXAuYwpAQCAtMjksNyArMjksNyBAQAogLyoKICAqCUZpbmQgYSBzbmFwIGNsaWVudCBieSBtYXRjaGluZyB0aGUgNSBieXRlcy4KICAqLwotc3RhdGljIHN0cnVjdCBkYXRhbGlua19wcm90byAqZmluZF9zbmFwX2NsaWVudCh1bnNpZ25lZCBjaGFyICpkZXNjKQorc3RhdGljIHN0cnVjdCBkYXRhbGlua19wcm90byAqZmluZF9zbmFwX2NsaWVudChjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNjKQogewogCXN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG8gPSBOVUxMLCAqcDsKIApAQCAtOTUsMTUgKzk1LDE2IEBACiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3NuYXBfY2xpZW50KTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9zbmFwX2NsaWVudCk7CiAKLXN0YXRpYyBjaGFyIHNuYXBfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgc25hcF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiU05BUCAtIHVuYWJsZSB0byByZWdpc3RlciB3aXRoIDgwMi4yXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBzbmFwX2luaXQodm9pZCkKIHsKIAlzbmFwX3NhcCA9IGxsY19zYXBfb3BlbigweEFBLCBzbmFwX3Jjdik7Ci0KLQlpZiAoIXNuYXBfc2FwKQorCWlmICghc25hcF9zYXApIHsKIAkJcHJpbnRrKHNuYXBfZXJyX21zZyk7CisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjEsNyArMTIyLDcgQEAKIC8qCiAgKglSZWdpc3RlciBTTkFQIGNsaWVudHMuIFdlIGRvbid0IHlldCB1c2UgdGhpcyBmb3IgSVAuCiAgKi8KLXN0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQodW5zaWduZWQgY2hhciAqZGVzYywKK3N0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzYywKIAkJCQkJICAgIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosCiAJCQkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQkJCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwKQEAgLTEzNiw3ICsxMzcsNyBAQAogCiAJcHJvdG8gPSBrbWFsbG9jKHNpemVvZigqcHJvdG8pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHJvdG8pIHsKLQkJbWVtY3B5KHByb3RvLT50eXBlLCBkZXNjLDUpOworCQltZW1jcHkocHJvdG8tPnR5cGUsIGRlc2MsIDUpOwogCQlwcm90by0+cmN2ZnVuYwkJPSByY3ZmdW5jOwogCQlwcm90by0+aGVhZGVyX2xlbmd0aAk9IDUgKyAzOyAvKiBzbmFwICsgODAyLjIgKi8KIAkJcHJvdG8tPnJlcXVlc3QJCT0gc25hcF9yZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvbmV0LzgwMi90ci5jIGIvbmV0LzgwMi90ci5jCmluZGV4IDE1ODE1MGYuLmU3ZWIxMzAgMTAwNjQ0Ci0tLSBhL25ldC84MDIvdHIuYworKysgYi9uZXQvODAyL3RyLmMKQEAgLTQ4Niw2ICs0ODYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqcmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmcmlmX2xvY2spCiB7CiAJc3Bpbl9sb2NrX2lycSgmcmlmX2xvY2spOwogCkBAIC01MTcsNiArNTE4LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmlmX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJnJpZl9sb2NrKQogewogCXNwaW5fdW5sb2NrX2lycSgmcmlmX2xvY2spOwogfQpAQCAtNjY4LDMgKzY3MCw1IEBACiAKIEVYUE9SVF9TWU1CT0wodHJfdHlwZV90cmFucyk7CiBFWFBPUlRfU1lNQk9MKGFsbG9jX3RyZGV2KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggNDE2M2VhNi4uMmI3MzkwZSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC01MSw3ICs1MSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciB2bGFuX2NvcHlyaWdodFtdID0gIkJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPiI7CiBzdGF0aWMgY29uc3QgY2hhciB2bGFuX2J1Z2d5cmlnaHRbXSA9ICJEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+IjsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB2bGFuX3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB2bGFuX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSksCiAJLmZ1bmMgPSB2bGFuX3NrYl9yZWN2LCAvKiBWTEFOIHJlY2VpdmUgbWV0aG9kICovCiB9OwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCmluZGV4IDcwNDM1YWYuLjY1NGU0NWYgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTEsMTIgKzEsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgogI2luY2x1ZGUgInZsYW4uaCIKIAogLyogVkxBTiByeCBodyBhY2NlbGVyYXRpb24gaGVscGVyLiAgVGhpcyBhY3RzIGxpa2UgbmV0aWZfe3J4LHJlY2VpdmVfc2tifSgpLiAqLwogaW50IF9fdmxhbl9od2FjY2VsX3J4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCiAJCSAgICAgIHUxNiB2bGFuX3RjaSwgaW50IHBvbGxpbmcpCiB7CisJaWYgKG5ldHBvbGxfcngoc2tiKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCiAJaWYgKHNrYl9ib25kX3Nob3VsZF9kcm9wKHNrYikpCiAJCWdvdG8gZHJvcDsKIApAQCAtOTQsMTIgKzk4LDE1IEBACiAJcmV0dXJuIGRldl9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCiBkcm9wOgotCXJldHVybiAyOworCXJldHVybiBHUk9fRFJPUDsKIH0KIAogaW50IHZsYW5fZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAogCQkgICAgIHVuc2lnbmVkIGludCB2bGFuX3RjaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgZ3JwLCB2bGFuX3RjaSk7CisKIAlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOwogCiAJcmV0dXJuIG5hcGlfc2tiX2ZpbmlzaCh2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSwgc2tiKTsKQEAgLTExNCw2ICsxMjEsOSBAQAogCWlmICghc2tiKQogCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgZ3JwLCB2bGFuX3RjaSk7CisKIAlyZXR1cm4gbmFwaV9mcmFnc19maW5pc2gobmFwaSwgc2tiLAogCQkJCSB2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IDRhMTlhY2QuLjFiMzQxMzUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC01NTMsNyArNTUzLDcgQEAKIAlpbnQgZXJyID0gMDsKIAogCWlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChyZWFsX2RldikgJiYgb3BzLT5uZG9fbmVpZ2hfc2V0dXApCi0JCWVyciA9IG9wcy0+bmRvX25laWdoX3NldHVwKGRldiwgcGEpOworCQllcnIgPSBvcHMtPm5kb19uZWlnaF9zZXR1cChyZWFsX2RldiwgcGEpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTYzOSw2ICs2MzksNyBAQAogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHJlYWxfZGV2LT5oYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU47CiAJCWRldi0+bmV0ZGV2X29wcyAgICAgICAgID0gJnZsYW5fbmV0ZGV2X29wczsKIAl9CisJbmV0ZGV2X3Jlc3luY19vcHMoZGV2KTsKIAogCWlmIChpc192bGFuX2RldihyZWFsX2RldikpCiAJCXN1YmNsYXNzID0gMTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19mZC5jIGIvbmV0LzlwL3RyYW5zX2ZkLmMKaW5kZXggMWRmMDM1Ni4uYzYxM2VkMDggMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7CiAJLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLwotCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOworCXJldCA9IHZmc193cml0ZSh0cy0+d3IsIChfX2ZvcmNlIHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7CiAJc2V0X2ZzKG9sZGZzKTsKIAogCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCBhMTJiYWUwLi5lYzkzZTdlIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogbWVudWNvbmZpZyBORVQKIAlib29sICJOZXR3b3JraW5nIHN1cHBvcnQiCisJc2VsZWN0IE5MQVRUUgogCS0tLWhlbHAtLS0KIAkgIFVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuCiAJICBUaGUgcmVhc29uIGlzIHRoYXQgc29tZSBwcm9ncmFtcyBuZWVkIGtlcm5lbCBuZXR3b3JraW5nIHN1cHBvcnQgZXZlbgpAQCAtMjQsOSArMjUsNiBAQAogCiBtZW51ICJOZXR3b3JraW5nIG9wdGlvbnMiCiAKLWNvbmZpZyBDT01QQVRfTkVUX0RFVl9PUFMKLSAgICAgICBkZWZfYm9vbCB5Ci0KIHNvdXJjZSAibmV0L3BhY2tldC9LY29uZmlnIgogc291cmNlICJuZXQvdW5peC9LY29uZmlnIgogc291cmNlICJuZXQveGZybS9LY29uZmlnIgpAQCAtMTcxLDYgKzE2OSw3IEBACiAKIHNvdXJjZSAibmV0L2RjY3AvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3NjdHAvS2NvbmZpZyIKK3NvdXJjZSAibmV0L3Jkcy9LY29uZmlnIgogc291cmNlICJuZXQvdGlwYy9LY29uZmlnIgogc291cmNlICJuZXQvYXRtL0tjb25maWciCiBzb3VyY2UgIm5ldC84MDIvS2NvbmZpZyIKQEAgLTIyMSw2ICsyMjAsMTcgQEAKIAlUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRjcF9wcm9iZS4KIAorY29uZmlnIE5FVF9EUk9QX01PTklUT1IKKwlib29sZWFuICJOZXR3b3JrIHBhY2tldCBkcm9wIGFsZXJ0aW5nIHNlcnZpY2UiCisJZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTCAmJiBUUkFDRVBPSU5UUworCS0tLWhlbHAtLS0KKwlUaGlzIGZlYXR1cmUgcHJvdmlkZXMgYW4gYWxlcnRpbmcgc2VydmljZSB0byB1c2Vyc3BhY2UgaW4gdGhlCisJZXZlbnQgdGhhdCBwYWNrZXRzIGFyZSBkaXNjYXJkZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2suICBBbGVydHMKKwlhcmUgYnJvYWRjYXN0IHZpYSBuZXRsaW5rIHNvY2tldCB0byBhbnkgbGlzdGVuaW5nIHVzZXIgc3BhY2UKKwlwcm9jZXNzLiAgSWYgeW91IGRvbid0IG5lZWQgbmV0d29yayBkcm9wIGFsZXJ0cywgb3IgaWYgeW91IGFyZSBvaworCWp1c3QgY2hlY2tpbmcgdGhlIHZhcmlvdXMgcHJvYyBmaWxlcyBhbmQgb3RoZXIgdXRpbGl0aWVzIGZvcgorCWRyb3Agc3RhdGlzdGljcywgc2F5IE4gaGVyZS4KKwogZW5kbWVudQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggMGZjY2U4OS4uOWUwMGE1NSAxMDA2NDQKLS0tIGEvbmV0L01ha2VmaWxlCisrKyBiL25ldC9NYWtlZmlsZQpAQCAtNDksNiArNDksNyBAQAogZW5kaWYKIG9iai0kKENPTkZJR19JUF9EQ0NQKQkJKz0gZGNjcC8KIG9iai0kKENPTkZJR19JUF9TQ1RQKQkJKz0gc2N0cC8KK29iai0kKENPTkZJR19SRFMpCQkrPSByZHMvCiBvYmoteQkJCQkrPSB3aXJlbGVzcy8KIG9iai0kKENPTkZJR19NQUM4MDIxMSkJCSs9IG1hYzgwMjExLwogb2JqLSQoQ09ORklHX1RJUEMpCQkrPSB0aXBjLwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9kZHAuYyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKaW5kZXggNTEwYTY3OC4uM2UwNjcxZCAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9kZHAuYworKysgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCkBAIC0xODYwLDEyICsxODYwLDEyIEBACiAJLm5vdGlmaWVyX2NhbGwJPSBkZHBfZGV2aWNlX2V2ZW50LAogfTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsdGFsa19wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbHRhbGtfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9MT0NBTFRBTEspLAogCS5mdW5jCQk9IGx0YWxrX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwdGFsa19wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwdGFsa19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlCQk9IGNwdV90b19iZTE2KEVUSF9QX1BQUFRBTEspLAogCS5mdW5jCQk9IGF0YWxrX3JjdiwKIH07CkBAIC0xODc3LDcgKzE4NzcsNyBAQAogRVhQT1JUX1NZTUJPTChhdHJ0cl9nZXRfZGV2KTsKIEVYUE9SVF9TWU1CT0woYXRhbGtfZmluZF9kZXZfYWRkcik7CiAKLXN0YXRpYyBjaGFyIGF0YWxrX2Vycl9zbmFwW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBhdGFsa19lcnJfc25hcFtdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIlVuYWJsZSB0byByZWdpc3RlciBERFAgd2l0aCBTTkFQLlxuIjsKIAogLyogQ2FsbGVkIGJ5IHByb3RvLmMgb24ga2VybmVsIHN0YXJ0IHVwICovCmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IGRhNDJmZDAuLjNkYzBhM2EgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC01NTIsMTAgKzU1MiwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjbGlwX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0gY2xpcF9zdGFydF94bWl0LAorfTsKKwogc3RhdGljIHZvaWQgY2xpcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY2xpcF9zdGFydF94bWl0OwotCS8qIHNnX3htaXQgLi4uICovCisJZGV2LT5uZXRkZXZfb3BzID0gJmNsaXBfbmV0ZGV2X29wczsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVRNOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gUkZDMTQ4M0xMQ19MRU47CiAJZGV2LT5tdHUgPSBSRkMxNjI2X01UVTsKQEAgLTYxNSw3ICs2MTgsNyBAQAogCX0KIAogCS8qIGlnbm9yZSBub24tQ0xJUCBkZXZpY2VzICovCi0JaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8IGRldi0+aGFyZF9zdGFydF94bWl0ICE9IGNsaXBfc3RhcnRfeG1pdCkKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9BVE0gfHwgZGV2LT5uZXRkZXZfb3BzICE9ICZjbGlwX25ldGRldl9vcHMpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmMgYi9uZXQvYXRtL2xlYy5jCmluZGV4IGMwY2JhOWEuLjE5OWI2YmIgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmMKKysrIGIvbmV0L2F0bS9sZWMuYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJCXByaXYtPmxhbmUyX29wcyA9IE5VTEw7CiAJCWlmIChwcml2LT5sYW5lX3ZlcnNpb24gPiAxKQogCQkJcHJpdi0+bGFuZTJfb3BzID0gJmxhbmUyX29wczsKLQkJaWYgKGRldi0+Y2hhbmdlX210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCisJCWlmIChkZXZfc2V0X210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCiAJCQlwcmludGsoIiVzOiBjaGFuZ2VfbXR1IHRvICVkIGZhaWxlZFxuIiwgZGV2LT5uYW1lLAogCQkJICAgICAgIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSk7CiAJCXByaXYtPmlzX3Byb3h5ID0gbWVzZy0+Y29udGVudC5jb25maWcuaXNfcHJveHk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCAwMzlkNWNjLi5lNWJmMTE0IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTI4NiwzMyArMjg2LDMyIEBACiB7CiAKIAlkcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYzpcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKLQlpZiAoZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjOiBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBOVUxMLCBub3Qgc3RhcnRpbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm47CisJaWYgKCFkZXYtPm5ldGRldl9vcHMpCisJCXByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGMgIG5vdCBzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKKwllbHNlIHsKKwkJbXBjLT5vbGRfb3BzID0gZGV2LT5uZXRkZXZfb3BzOworCQltcGMtPm5ld19vcHMgPSAqbXBjLT5vbGRfb3BzOworCQltcGMtPm5ld19vcHMubmRvX3N0YXJ0X3htaXQgPSBtcGNfc2VuZF9wYWNrZXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZtcGMtPm5ld19vcHM7CiAJfQotCW1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdCA9IGRldi0+aGFyZF9zdGFydF94bWl0OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbXBjX3NlbmRfcGFja2V0OwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBzdG9wX21wYyhzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKLQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBtcGMtPmRldjsKIAlkcHJpbnRrKCJtcG9hOiAoJXMpIHN0b3BfbXBjOiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAogCS8qIExldHMgbm90IG51bGxpZnkgbGVjIGRldmljZSdzIGRldi0+aGFyZF9zdGFydF94bWl0ICovCi0JaWYgKG1wYy0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgIT0gbXBjX3NlbmRfcGFja2V0KSB7CisJaWYgKGRldi0+bmV0ZGV2X29wcyAhPSAmbXBjLT5uZXdfb3BzKSB7CiAJCWRwcmludGsoIiBtcGMgYWxyZWFkeSBzdG9wcGVkLCBub3QgZmF0YWxcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwcmludGsoIlxuIik7Ci0JbXBjLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdDsKLQltcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQgPSBOVUxMOwotCS8qIGNsb3NlX3Nob3J0Y3V0cyhtcGMpOyAgICA/Pz8gRklYTUUgKi8KIAotCXJldHVybjsKKwlkZXYtPm5ldGRldl9vcHMgPSBtcGMtPm9sZF9vcHM7CisJbXBjLT5vbGRfb3BzID0gTlVMTDsKKworCS8qIGNsb3NlX3Nob3J0Y3V0cyhtcGMpOyAgICA/Pz8gRklYTUUgKi8KIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKm1wb2FfZGV2aWNlX3R5cGVfc3RyaW5nKGNoYXIgdHlwZSkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwpAQCAtNTMxLDcgKzUzMCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYzsKIAlzdHJ1Y3QgZXRoaGRyICpldGg7CiAJaW50IGkgPSAwOwpAQCAtNTYxLDkgKzU1OSw3IEBACiAJfQogCiAgbm9uX2lwOgotCXJldHZhbCA9IG1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdChza2IsZGV2KTsKLQotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIG1wYy0+b2xkX29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYXRtX21wb2FfdmNjX2F0dGFjaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCB2b2lkIF9fdXNlciAqYXJnKQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcGMuaCBiL25ldC9hdG0vbXBjLmgKaW5kZXggMjRjMzg2Yy4uMDkxOWE4OCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcGMuaAorKysgYi9uZXQvYXRtL21wYy5oCkBAIC0xNSw3ICsxNSw3IEBACiAJc3RydWN0IG1wb2FfY2xpZW50ICpuZXh0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7ICAgICAgLyogbGVjIGluIHF1ZXN0aW9uICAgICAgICAgICAgICAgICAgICAgKi8KIAlpbnQgZGV2X251bTsgICAgICAgICAgICAgICAgIC8qIGUuZy4gMiBmb3IgbGVjMiAgICAgICAgICAgICAgICAgICAgICovCi0JaW50ICgqb2xkX2hhcmRfc3RhcnRfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIAlzdHJ1Y3QgYXRtX3ZjYyAqbXBvYWRfdmNjOyAgIC8qIGNvbnRyb2wgY2hhbm5lbCB0byBtcG9hZCAgICAgICAgICAgICovCiAJdWludDhfdCBtcHNfY3RybF9hZGRyW0FUTV9FU0FfTEVOXTsgIC8qIE1QUyBjb250cm9sIEFUTSBhZGRyZXNzICAgICAqLwogCXVpbnQ4X3Qgb3VyX2N0cmxfYWRkcltBVE1fRVNBX0xFTl07ICAvKiBNUEMncyBjb250cm9sIEFUTSBhZGRyZXNzICAgKi8KQEAgLTMxLDYgKzMxLDkgQEAKIAl1aW50OF90ICptcHNfbWFjczsgICAgICAgICAgIC8qIGFycmF5IG9mIE1QUyBNQUMgYWRkcmVzc2VzLCA+PTEgICAgICovCiAJaW50IG51bWJlcl9vZl9tcHNfbWFjczsgICAgICAvKiBudW1iZXIgb2YgdGhlIGFib3ZlIE1BQyBhZGRyZXNzZXMgICAqLwogCXN0cnVjdCBtcGNfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOyAgLyogcGFyYW1ldGVycyBmb3IgdGhpcyBjbGllbnQgICAgKi8KKworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb2xkX29wczsKKwlzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV3X29wczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IGQxMjdmZDMuLjdkYTVlYmIgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTE0MzUsNiArMTQzNSwxMSBAQAogCXNpemVfdCBzaXplOwogCWludCBsdiwgZXJyLCBhZGRyX2xlbiA9IG1zZy0+bXNnX25hbWVsZW47CiAKKwkvKiBBWC4yNSBlbXB0eSBkYXRhIGZyYW1lIGhhcyBubyBtZWFuaW5nIDogZG9uJ3Qgc2VuZCAqLworCWlmIChsZW4gPT0gMCkgeworCQlyZXR1cm4gKDApOworCX0KKwogCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19FT1J8TVNHX0NNU0dfQ09NUEFUKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE1MjksMTAgKzE1MzQsOCBAQAogCQlkcCA9IGF4MjUtPmRpZ2lwZWF0OwogCX0KIAotCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuXG4iKTsKLQogCS8qIEJ1aWxkIGEgcGFja2V0ICovCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IGJ1aWxkaW5nIHBhY2tldC5cbiIpOworCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuIEJ1aWxkaW5nIHBhY2tldC5cbiIpOwogCiAJLyogQXNzdW1lIHRoZSB3b3JzdCBjYXNlICovCiAJc2l6ZSA9IGxlbiArIGF4MjUtPmF4MjVfZGV2LT5kZXYtPmhhcmRfaGVhZGVyX2xlbjsKQEAgLTE2MzYsNiArMTYzOSwxMyBAQAogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJY29waWVkID0gc2tiLT5sZW47CiAKKwkvKiBBWC4yNSBlbXB0eSBkYXRhIGZyYW1lIGhhcyBubyBtZWFuaW5nIDogaWdub3JlIGl0ICovCisJaWYgKGNvcGllZCA9PSAwKSB7CisJCWVyciA9IGNvcGllZDsKKwkJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChjb3BpZWQgPiBzaXplKSB7CiAJCWNvcGllZCA9IHNpemU7CiAJCW1zZy0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKQEAgLTE5ODUsOSArMTk5NSw4IEBACiAvKgogICoJQ2FsbGVkIGJ5IHNvY2tldC5jIG9uIGtlcm5lbCBzdGFydCB1cAogICovCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGF4MjVfcGFja2V0X3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGF4MjVfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZQk9CWNwdV90b19iZTE2KEVUSF9QX0FYMjUpLAotCS5kZXYJPQlOVUxMLAkJCQkvKiBBbGwgZGV2aWNlcyAqLwogCS5mdW5jCT0JYXgyNV9raXNzX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IDc0NGVkM2YuLjAyYjliYWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtNDEsMTQgKzQxLDEzIEBACiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjIuMTQiCisjZGVmaW5lIFZFUlNJT04gIjIuMTUiCiAKIC8qIEJsdWV0b290aCBzb2NrZXRzICovCiAjZGVmaW5lIEJUX01BWF9QUk9UTwk4CiBzdGF0aWMgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKmJ0X3Byb3RvW0JUX01BWF9QUk9UT107CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhidF9wcm90b19sb2NrKTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X2xvY2tfa2V5W0JUX01BWF9QUk9UT107CiBzdGF0aWMgY29uc3QgY2hhciAqYnRfa2V5X3N0cmluZ3NbQlRfTUFYX1BST1RPXSA9IHsKIAkic2tfbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19MMkNBUCIsCkBAIC04NiwxMSArODUsNiBAQAogCQkJYnRfc2xvY2tfa2V5X3N0cmluZ3NbcHJvdG9dLCAmYnRfc2xvY2tfa2V5W3Byb3RvXSwKIAkJCQlidF9rZXlfc3RyaW5nc1twcm90b10sICZidF9sb2NrX2tleVtwcm90b10pOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBidF9zb2NrX3JlY2xhc3NpZnlfbG9jayhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8pCi17Ci19Ci0jZW5kaWYKIAogaW50IGJ0X3NvY2tfcmVnaXN0ZXIoaW50IHByb3RvLCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKQogewpAQCAtMjE3LDcgKzIxMSw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8ICFuZXdzb2NrKSB7CisJCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8ICFuZXdzb2NrIHx8CisJCQkJCQlidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cCkgewogCQkJYnRfYWNjZXB0X3VubGluayhzayk7CiAJCQlpZiAobmV3c29jaykKIAkJCQlzb2NrX2dyYWZ0KHNrLCBuZXdzb2NrKTsKQEAgLTIzMiw3ICsyMjcsNyBAQAogRVhQT1JUX1NZTUJPTChidF9hY2NlcHRfZGVxdWV1ZSk7CiAKIGludCBidF9zb2NrX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQorCQkJCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQogewogCWludCBub2Jsb2NrID0gZmxhZ3MgJiBNU0dfRE9OVFdBSVQ7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CkBAIC0yNzcsNyArMjcyLDkgQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmYnRfc2socGFyZW50KS0+YWNjZXB0X3EpIHsKIAkJc2sgPSAoc3RydWN0IHNvY2sgKikgbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYnRfc29jaywgYWNjZXB0X3EpOwotCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCkKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKKwkJCQkJKGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwICYmCisJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIpKQogCQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwppbmRleCBjOWNhYzc3Li4wMDczZWM4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKQEAgLTEyNiw4ICsxMjYsNyBAQAogCiAJc2Vzc2lvbi0+cmVhc3NlbWJseVtpZF0gPSBuc2tiOwogCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNtdHBfcmVjdl9mcmFtZShzdHJ1Y3QgY210cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCmluZGV4IGE0YTc4OWYuLjExODFkYjAgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKQEAgLTEyMyw2ICsxMjMsOCBAQAogCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVDsKIAljb25uLT5vdXQgPSAxOwogCisJY29ubi0+YXR0ZW1wdCsrOworCiAJY3AuaGFuZGxlICAgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwogCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoY29ubi0+cGt0X3R5cGUpOwogCkBAIC0xMzksNiArMTQxLDggQEAKIAljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1Q7CiAJY29ubi0+b3V0ID0gMTsKIAorCWNvbm4tPmF0dGVtcHQrKzsKKwogCWNwLmhhbmRsZSAgID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAljcC5wa3RfdHlwZSA9IGNwdV90b19sZTE2KGNvbm4tPnBrdF90eXBlKTsKIApAQCAtMTU1LDYgKzE1OSw3IEBACiB7CiAJc3RydWN0IGhjaV9jb25uICpjb25uID0gKHZvaWQgKikgYXJnOwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi0+aGRldjsKKwlfX3U4IHJlYXNvbjsKIAogCUJUX0RCRygiY29ubiAlcCBzdGF0ZSAlZCIsIGNvbm4sIGNvbm4tPnN0YXRlKTsKIApAQCAtMTczLDcgKzE3OCw4IEBACiAJCWJyZWFrOwogCWNhc2UgQlRfQ09ORklHOgogCWNhc2UgQlRfQ09OTkVDVEVEOgotCQloY2lfYWNsX2Rpc2Nvbm4oY29ubiwgMHgxMyk7CisJCXJlYXNvbiA9IGhjaV9wcm90b19kaXNjb25uX2luZChjb25uKTsKKwkJaGNpX2FjbF9kaXNjb25uKGNvbm4sIHJlYXNvbik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNvbm4tPnN0YXRlID0gQlRfQ0xPU0VEOwpAQCAtMjE2LDEyICsyMjIsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQ09fTElOSzoKIAkJaWYgKGxtcF9lc2NvX2NhcGFibGUoaGRldikpCi0JCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPmVzY29fdHlwZSAmIFNDT19FU0NPX01BU0s7CisJCQljb25uLT5wa3RfdHlwZSA9IChoZGV2LT5lc2NvX3R5cGUgJiBTQ09fRVNDT19NQVNLKSB8CisJCQkJCShoZGV2LT5lc2NvX3R5cGUgJiBFRFJfRVNDT19NQVNLKTsKIAkJZWxzZQogCQkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5wa3RfdHlwZSAmIFNDT19QVFlQRV9NQVNLOwogCQlicmVhazsKIAljYXNlIEVTQ09fTElOSzoKLQkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5lc2NvX3R5cGU7CisJCWNvbm4tPnBrdF90eXBlID0gaGRldi0+ZXNjb190eXBlICYgfkVEUl9FU0NPX01BU0s7CiAJCWJyZWFrOwogCX0KIApAQCAtMjgwLDYgKzI4Nyw4IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJmNvbm4tPmRhdGFfcSk7CiAKKwloY2lfY29ubl9kZWxfc3lzZnMoY29ubik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI1LDcgKzMzNCw3IEBACiAKIC8qIENyZWF0ZSBTQ08gb3IgQUNMIGNvbm5lY3Rpb24uCiAgKiBEZXZpY2UgX211c3RfIGJlIGxvY2tlZCAqLwotc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggYXV0aF90eXBlKQorc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSkKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmFjbDsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKnNjbzsKQEAgLTM0MCw2ICszNDksNyBAQAogCWhjaV9jb25uX2hvbGQoYWNsKTsKIAogCWlmIChhY2wtPnN0YXRlID09IEJUX09QRU4gfHwgYWNsLT5zdGF0ZSA9PSBCVF9DTE9TRUQpIHsKKwkJYWNsLT5zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJCWFjbC0+YXV0aF90eXBlID0gYXV0aF90eXBlOwogCQloY2lfYWNsX2Nvbm5lY3QoYWNsKTsKIAl9CkBAIC0zODUsNTEgKzM5NSw1OSBAQAogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9jaGVja19saW5rX21vZGUpOwogCiAvKiBBdXRoZW50aWNhdGUgcmVtb3RlIGRldmljZSAqLwotaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uKQorc3RhdGljIGludCBoY2lfY29ubl9hdXRoKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCi0JaWYgKGNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5oZGV2LT5zc3BfbW9kZSA+IDApIHsKLQkJaWYgKCEoY29ubi0+YXV0aF90eXBlICYgMHgwMSkpIHsKLQkJCWNvbm4tPmF1dGhfdHlwZSB8PSAweDAxOwotCQkJY29ubi0+bGlua19tb2RlICY9IH5IQ0lfTE1fQVVUSDsKLQkJfQotCX0KLQotCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKKwlpZiAoc2VjX2xldmVsID4gY29ubi0+c2VjX2xldmVsKQorCQljb25uLT5zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CisJZWxzZSBpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0FVVEgpCiAJCXJldHVybiAxOwogCisJY29ubi0+YXV0aF90eXBlID0gYXV0aF90eXBlOworCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpKSB7CiAJCXN0cnVjdCBoY2lfY3BfYXV0aF9yZXF1ZXN0ZWQgY3A7CiAJCWNwLmhhbmRsZSA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CiAJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQsCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fYXV0aCk7CiAKLS8qIEVuYWJsZSBlbmNyeXB0aW9uICovCi1pbnQgaGNpX2Nvbm5fZW5jcnlwdChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCisvKiBFbmFibGUgc2VjdXJpdHkgKi8KK2ludCBoY2lfY29ubl9zZWN1cml0eShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSkKIHsKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAorCWlmIChzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQorCQlyZXR1cm4gMTsKKworCWlmIChzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKSB7CisJCWlmIChjb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+aGRldi0+c3NwX21vZGUgPiAwKQorCQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpOworCQllbHNlCisJCQlyZXR1cm4gMTsKKwl9CisKIAlpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpCi0JCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4pOworCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLCBzZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaGNpX2Nvbm5fYXV0aChjb25uKSkgeworCWlmIChoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKSkgewogCQlzdHJ1Y3QgaGNpX2NwX3NldF9jb25uX2VuY3J5cHQgY3A7CiAJCWNwLmhhbmRsZSAgPSBjcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwogCQljcC5lbmNyeXB0ID0gMTsKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9TRVRfQ09OTl9FTkNSWVBULAogCQkJCQkJCXNpemVvZihjcCksICZjcCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhjaV9jb25uX2VuY3J5cHQpOworRVhQT1JUX1NZTUJPTChoY2lfY29ubl9zZWN1cml0eSk7CiAKIC8qIENoYW5nZSBsaW5rIGtleSAqLwogaW50IGhjaV9jb25uX2NoYW5nZV9saW5rX2tleShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCkBAIC00NDIsMTIgKzQ2MCwxMyBAQAogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX0NIQU5HRV9DT05OX0xJTktfS0VZLAogCQkJCQkJCXNpemVvZihjcCksICZjcCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGhjaV9jb25uX2NoYW5nZV9saW5rX2tleSk7CiAKIC8qIFN3aXRjaCByb2xlICovCi1pbnQgaGNpX2Nvbm5fc3dpdGNoX3JvbGUoc3RydWN0IGhjaV9jb25uICpjb25uLCB1aW50OF90IHJvbGUpCitpbnQgaGNpX2Nvbm5fc3dpdGNoX3JvbGUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJvbGUpCiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKQEAgLTQ2MCw2ICs0NzksNyBAQAogCQljcC5yb2xlID0gcm9sZTsKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9TV0lUQ0hfUk9MRSwgc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fc3dpdGNoX3JvbGUpOwpAQCAtNTQyLDkgKzU2Miw3IEBACiAKIAkJYy0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAKLQkJaGNpX2Nvbm5fZGVsX3N5c2ZzKGMpOwotCi0JCWhjaV9wcm90b19kaXNjb25uX2luZChjLCAweDE2KTsKKwkJaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKGMsIDB4MTYpOwogCQloY2lfY29ubl9kZWwoYyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IGJhNzhjYzEuLmNkMDYxNTEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTE1NjUsOCArMTU2NSw3IEBACiAKIAkvKiBTZW5kIHF1ZXVlZCBjb21tYW5kcyAqLwogCWlmIChhdG9taWNfcmVhZCgmaGRldi0+Y21kX2NudCkgJiYgKHNrYiA9IHNrYl9kZXF1ZXVlKCZoZGV2LT5jbWRfcSkpKSB7Ci0JCWlmIChoZGV2LT5zZW50X2NtZCkKLQkJCWtmcmVlX3NrYihoZGV2LT5zZW50X2NtZCk7CisJCWtmcmVlX3NrYihoZGV2LT5zZW50X2NtZCk7CiAKIAkJaWYgKChoZGV2LT5zZW50X2NtZCA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpKSkgewogCQkJYXRvbWljX2RlYygmaGRldi0+Y21kX2NudCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCBmOTFiYTY5Li41NTUzNDI0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTQ4NCw2ICs0ODQsMTUgQEAKIAlpZiAoaGRldi0+ZmVhdHVyZXNbNF0gJiBMTVBfRVY1KQogCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fRVY1KTsKIAorCWlmIChoZGV2LT5mZWF0dXJlc1s1XSAmIExNUF9FRFJfRVNDT18yTSkKKwkJaGRldi0+ZXNjb190eXBlIHw9IChFU0NPXzJFVjMpOworCisJaWYgKGhkZXYtPmZlYXR1cmVzWzVdICYgTE1QX0VEUl9FU0NPXzNNKQorCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fM0VWMyk7CisKKwlpZiAoaGRldi0+ZmVhdHVyZXNbNV0gJiBMTVBfRURSXzNTX0VTQ08pCisJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT18yRVY1IHwgRVNDT18zRVY1KTsKKwogCUJUX0RCRygiJXMgZmVhdHVyZXMgMHglLjJ4JS4yeCUuMnglLjJ4JS4yeCUuMnglLjJ4JS4yeCIsIGhkZXYtPm5hbWUsCiAJCQkJCWhkZXYtPmZlYXR1cmVzWzBdLCBoZGV2LT5mZWF0dXJlc1sxXSwKIAkJCQkJaGRldi0+ZmVhdHVyZXNbMl0sIGhkZXYtPmZlYXR1cmVzWzNdLApAQCAtOTE0LDcgKzkyMyw4IEBACiAJaWYgKGV2LT5zdGF0dXMpIHsKIAkJaGNpX3Byb3RvX2Nvbm5lY3RfY2ZtKGNvbm4sIGV2LT5zdGF0dXMpOwogCQloY2lfY29ubl9kZWwoY29ubik7Ci0JfQorCX0gZWxzZSBpZiAoZXYtPmxpbmtfdHlwZSAhPSBBQ0xfTElOSykKKwkJaGNpX3Byb3RvX2Nvbm5lY3RfY2ZtKGNvbm4sIGV2LT5zdGF0dXMpOwogCiB1bmxvY2s6CiAJaGNpX2Rldl91bmxvY2soaGRldik7CkBAIC0xMDA5LDkgKzEwMTksNyBAQAogCWlmIChjb25uKSB7CiAJCWNvbm4tPnN0YXRlID0gQlRfQ0xPU0VEOwogCi0JCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKLQotCQloY2lfcHJvdG9fZGlzY29ubl9pbmQoY29ubiwgZXYtPnJlYXNvbik7CisJCWhjaV9wcm90b19kaXNjb25uX2NmbShjb25uLCBldi0+cmVhc29uKTsKIAkJaGNpX2Nvbm5fZGVsKGNvbm4pOwogCX0KIApAQCAtMTYwMCw3ICsxNjA4LDggQEAKIAogCQlpZiAoY29ubi0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CiAJCQlpZiAoIWV2LT5zdGF0dXMgJiYgaGRldi0+c3NwX21vZGUgPiAwICYmCi0JCQkJCWNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5vdXQpIHsKKwkJCQkJY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPm91dCAmJgorCQkJCQljb25uLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfU0RQKSB7CiAJCQkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJCQljcC5oYW5kbGUgPSBldi0+aGFuZGxlOwogCQkJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQsCkBAIC0xNjM3LDYgKzE2NDYsMTMgQEAKIAkJY29ubi0+dHlwZSA9IFNDT19MSU5LOwogCX0KIAorCWlmIChjb25uLT5vdXQgJiYgZXYtPnN0YXR1cyA9PSAweDFjICYmIGNvbm4tPmF0dGVtcHQgPCAyKSB7CisJCWNvbm4tPnBrdF90eXBlID0gKGhkZXYtPmVzY29fdHlwZSAmIFNDT19FU0NPX01BU0spIHwKKwkJCQkJKGhkZXYtPmVzY29fdHlwZSAmIEVEUl9FU0NPX01BU0spOworCQloY2lfc2V0dXBfc3luYyhjb25uLCBjb25uLT5saW5rLT5oYW5kbGUpOworCQlnb3RvIHVubG9jazsKKwl9CisKIAlpZiAoIWV2LT5zdGF0dXMpIHsKIAkJY29ubi0+aGFuZGxlID0gX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKTsKIAkJY29ubi0+c3RhdGUgID0gQlRfQ09OTkVDVEVEOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggMWExZjkxNi4uZWQ4Mjc5NiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoJmNvbm4tPmRldiwgTlVMTCwgX19tYXRjaF90dHkpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwotCQlkZXZpY2VfbW92ZShkZXYsIE5VTEwpOworCQlkZXZpY2VfbW92ZShkZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCBiOTM3NDhlLi5jYTRkM2I0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC01MCw5ICs1MCwxMCBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMi4xMSIKKyNkZWZpbmUgVkVSU0lPTiAiMi4xMyIKIAotc3RhdGljIHUzMiBsMmNhcF9mZWF0X21hc2sgPSAweDAwMDA7CitzdGF0aWMgdTMyIGwyY2FwX2ZlYXRfbWFzayA9IDB4MDA4MDsKK3N0YXRpYyB1OCBsMmNhcF9maXhlZF9jaGFuWzhdID0geyAweDAyLCB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wczsKIApAQCAtNzcsOSArNzgsMTAgQEAKIAogCWJoX2xvY2tfc29jayhzayk7CiAKLQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QgJiYKLQkJCShsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIChMMkNBUF9MTV9BVVRIIHwKLQkJCQkJTDJDQVBfTE1fRU5DUllQVCB8IEwyQ0FQX0xNX1NFQ1VSRSkpKQorCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8IHNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpCisJCXJlYXNvbiA9IEVDT05OUkVGVVNFRDsKKwllbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgorCQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmVhc29uID0gRUNPTk5SRUZVU0VEOwogCWVsc2UKIAkJcmVhc29uID0gRVRJTUVET1VUOwpAQCAtMjA0LDYgKzIwNiw4IEBACiAKIAlCVF9EQkcoImNvbm4gJXAsIHBzbSAweCUyLjJ4LCBkY2lkIDB4JTQuNHgiLCBjb25uLCBsMmNhcF9waShzayktPnBzbSwgbDJjYXBfcGkoc2spLT5kY2lkKTsKIAorCWNvbm4tPmRpc2NfcmVhc29uID0gMHgxMzsKKwogCWwyY2FwX3BpKHNrKS0+Y29ubiA9IGNvbm47CiAKIAlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKQEAgLTI1OSwxOCArMjYzLDM1IEBACiB9CiAKIC8qIFNlcnZpY2UgbGV2ZWwgc2VjdXJpdHkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJX191OCBhdXRoX3R5cGU7CiAKLQlpZiAoKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fRU5DUllQVCkgfHwKLQkJCQkobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpKQotCQlyZXR1cm4gaGNpX2Nvbm5fZW5jcnlwdChjb25uLT5oY29uKTsKKwlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgeworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07CisJCWVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fQVVUSCkKLQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubi0+aGNvbik7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KKwl9CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkoY29ubi0+aGNvbiwgbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsCisJCQkJCQkJCWF1dGhfdHlwZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTggbDJjYXBfZ2V0X2lkZW50KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQpAQCAtMzEyLDcgKzMzMywxMCBAQAogCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOwogCiAJaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgewotCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgeworCQlpZiAoIShjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkUpKQorCQkJcmV0dXJuOworCisJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKIAkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CiAJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOwpAQCAtMzU2LDcgKzM4MCw3IEBACiAJCX0KIAogCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QpIHsKLQkJCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CiAJCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAkJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAJCQkJcmVxLnBzbSAgPSBsMmNhcF9waShzayktPnBzbTsKQEAgLTM3MSwxMCArMzk1LDE4IEBACiAJCQlyc3Auc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CiAJCQlyc3AuZGNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAKLQkJCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7Ci0JCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKLQkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CisJCQkJaWYgKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApIHsKKwkJCQkJc3RydWN0IHNvY2sgKnBhcmVudCA9IGJ0X3NrKHNrKS0+cGFyZW50OworCQkJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1JfUEVORCk7CisJCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19BVVRIT1JfUEVORCk7CisJCQkJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOworCisJCQkJfSBlbHNlIHsKKwkJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCQkJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1JfU1VDQ0VTUyk7CisJCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9QRU5EKTsKIAkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfQVVUSEVOX1BFTkQpOwpAQCAtNDI2LDcgKzQ1OCw3IEBACiAJcmVhZF9sb2NrKCZsLT5sb2NrKTsKIAogCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgewotCQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9SRUxJQUJMRSkKKwkJaWYgKGwyY2FwX3BpKHNrKS0+Zm9yY2VfcmVsaWFibGUpCiAJCQlzay0+c2tfZXJyID0gZXJyOwogCX0KIApAQCAtNDM3LDYgKzQ2OSw3IEBACiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSAodm9pZCAqKSBhcmc7CiAKKwljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOwogCWNvbm4tPmluZm9faWRlbnQgPSAwOwogCiAJbDJjYXBfY29ubl9zdGFydChjb25uKTsKQEAgLTQ3MCw2ICs1MDMsOCBAQAogCXNwaW5fbG9ja19pbml0KCZjb25uLT5sb2NrKTsKIAlyd2xvY2tfaW5pdCgmY29ubi0+Y2hhbl9saXN0LmxvY2spOwogCisJY29ubi0+ZGlzY19yZWFzb24gPSAweDEzOworCiAJcmV0dXJuIGNvbm47CiB9CiAKQEAgLTQ4Myw4ICs1MTgsNyBAQAogCiAJQlRfREJHKCJoY29uICVwIGNvbm4gJXAsIGVyciAlZCIsIGhjb24sIGNvbm4sIGVycik7CiAKLQlpZiAoY29ubi0+cnhfc2tiKQotCQlrZnJlZV9za2IoY29ubi0+cnhfc2tiKTsKKwlrZnJlZV9za2IoY29ubi0+cnhfc2tiKTsKIAogCS8qIEtpbGwgY2hhbm5lbHMgKi8KIAl3aGlsZSAoKHNrID0gY29ubi0+Y2hhbl9saXN0LmhlYWQpKSB7CkBAIC02MDgsNyArNjQyLDYgQEAKIAogCWNhc2UgQlRfQ09OTkVDVEVEOgogCWNhc2UgQlRfQ09ORklHOgotCWNhc2UgQlRfQ09OTkVDVDI6CiAJCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAJCQlzdHJ1Y3QgbDJjYXBfZGlzY29ubl9yZXEgcmVxOwpAQCAtNjI0LDYgKzY1NywyNyBAQAogCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CiAJCWJyZWFrOwogCisJY2FzZSBCVF9DT05ORUNUMjoKKwkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CisJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwkJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisJCQlfX3UxNiByZXN1bHQ7CisKKwkJCWlmIChidF9zayhzayktPmRlZmVyX3NldHVwKQorCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9CQURfUFNNOworCisJCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7CisJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOworCQl9IGVsc2UKKwkJCWwyY2FwX2NoYW5fZGVsKHNrLCByZWFzb24pOworCQlicmVhazsKKwogCWNhc2UgQlRfQ09OTkVDVDoKIAljYXNlIEJUX0RJU0NPTk46CiAJCWwyY2FwX2NoYW5fZGVsKHNrLCByZWFzb24pOwpAQCAtNjUzLDEzICs3MDcsMTkgQEAKIAogCWlmIChwYXJlbnQpIHsKIAkJc2stPnNrX3R5cGUgPSBwYXJlbnQtPnNrX3R5cGU7CisJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cDsKKwogCQlwaS0+aW10dSA9IGwyY2FwX3BpKHBhcmVudCktPmltdHU7CiAJCXBpLT5vbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+b210dTsKLQkJcGktPmxpbmtfbW9kZSA9IGwyY2FwX3BpKHBhcmVudCktPmxpbmtfbW9kZTsKKwkJcGktPnNlY19sZXZlbCA9IGwyY2FwX3BpKHBhcmVudCktPnNlY19sZXZlbDsKKwkJcGktPnJvbGVfc3dpdGNoID0gbDJjYXBfcGkocGFyZW50KS0+cm9sZV9zd2l0Y2g7CisJCXBpLT5mb3JjZV9yZWxpYWJsZSA9IGwyY2FwX3BpKHBhcmVudCktPmZvcmNlX3JlbGlhYmxlOwogCX0gZWxzZSB7CiAJCXBpLT5pbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJCXBpLT5vbXR1ID0gMDsKLQkJcGktPmxpbmtfbW9kZSA9IDA7CisJCXBpLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCXBpLT5yb2xlX3N3aXRjaCA9IDA7CisJCXBpLT5mb3JjZV9yZWxpYWJsZSA9IDA7CiAJfQogCiAJLyogRGVmYXVsdCBjb25maWcgb3B0aW9ucyAqLwpAQCAtNzIzLDE3ICs3ODMsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWRkcl9sZW4pCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhbGVuKQogewotCXN0cnVjdCBzb2NrYWRkcl9sMiAqbGEgPSAoc3RydWN0IHNvY2thZGRyX2wyICopIGFkZHI7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IHNvY2thZGRyX2wyIGxhOworCWludCBsZW4sIGVyciA9IDA7CiAKLQlCVF9EQkcoInNrICVwLCAlcyAlZCIsIHNrLCBiYXRvc3RyKCZsYS0+bDJfYmRhZGRyKSwgbGEtPmwyX3BzbSk7CisJQlRfREJHKCJzayAlcCIsIHNrKTsKIAogCWlmICghYWRkciB8fCBhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQkxVRVRPT1RIKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW1lbXNldCgmbGEsIDAsIHNpemVvZihsYSkpOworCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGxhKSwgYWxlbik7CisJbWVtY3B5KCZsYSwgYWRkciwgbGVuKTsKKworCWlmIChsYS5sMl9jaWQpCisJCXJldHVybiAtRUlOVkFMOworCiAJbG9ja19zb2NrKHNrKTsKIAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfT1BFTikgewpAQCAtNzQxLDcgKzgwOCw3IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAobGEtPmwyX3BzbSAmJiBidG9ocyhsYS0+bDJfcHNtKSA8IDB4MTAwMSAmJgorCWlmIChsYS5sMl9wc20gJiYgYnRvaHMobGEubDJfcHNtKSA8IDB4MTAwMSAmJgogCQkJCSFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSkgewogCQllcnIgPSAtRUFDQ0VTOwogCQlnb3RvIGRvbmU7CkBAIC03NDksMTQgKzgxNiwxNyBAQAogCiAJd3JpdGVfbG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKIAotCWlmIChsYS0+bDJfcHNtICYmIF9fbDJjYXBfZ2V0X3NvY2tfYnlfYWRkcihsYS0+bDJfcHNtLCAmbGEtPmwyX2JkYWRkcikpIHsKKwlpZiAobGEubDJfcHNtICYmIF9fbDJjYXBfZ2V0X3NvY2tfYnlfYWRkcihsYS5sMl9wc20sICZsYS5sMl9iZGFkZHIpKSB7CiAJCWVyciA9IC1FQUREUklOVVNFOwogCX0gZWxzZSB7CiAJCS8qIFNhdmUgc291cmNlIGFkZHJlc3MgKi8KLQkJYmFjcHkoJmJ0X3NrKHNrKS0+c3JjLCAmbGEtPmwyX2JkYWRkcik7Ci0JCWwyY2FwX3BpKHNrKS0+cHNtICAgPSBsYS0+bDJfcHNtOwotCQlsMmNhcF9waShzayktPnNwb3J0ID0gbGEtPmwyX3BzbTsKKwkJYmFjcHkoJmJ0X3NrKHNrKS0+c3JjLCAmbGEubDJfYmRhZGRyKTsKKwkJbDJjYXBfcGkoc2spLT5wc20gICA9IGxhLmwyX3BzbTsKKwkJbDJjYXBfcGkoc2spLT5zcG9ydCA9IGxhLmwyX3BzbTsKIAkJc2stPnNrX3N0YXRlID0gQlRfQk9VTkQ7CisKKwkJaWYgKGJ0b2hzKGxhLmwyX3BzbSkgPT0gMHgwMDAxIHx8IGJ0b2hzKGxhLmwyX3BzbSkgPT0gMHgwMDAzKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7CiAJfQogCiAJd3JpdGVfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwpAQCAtNzc2LDcgKzg0Niw4IEBACiAJX191OCBhdXRoX3R5cGU7CiAJaW50IGVyciA9IDA7CiAKLQlCVF9EQkcoIiVzIC0+ICVzIHBzbSAweCUyLjJ4IiwgYmF0b3N0cihzcmMpLCBiYXRvc3RyKGRzdCksIGwyY2FwX3BpKHNrKS0+cHNtKTsKKwlCVF9EQkcoIiVzIC0+ICVzIHBzbSAweCUyLjJ4IiwgYmF0b3N0cihzcmMpLCBiYXRvc3RyKGRzdCksCisJCQkJCQkJbDJjYXBfcGkoc2spLT5wc20pOwogCiAJaWYgKCEoaGRldiA9IGhjaV9nZXRfcm91dGUoZHN0LCBzcmMpKSkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CkBAIC03ODUsMjEgKzg1Niw0MiBAQAogCiAJZXJyID0gLUVOT01FTTsKIAotCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX0FVVEggfHwKLQkJCWwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fRU5DUllQVCB8fAotCQkJCWwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fU0VDVVJFKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKQorCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElOR19NSVRNOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQogCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKIAkJZWxzZQotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOwotCX0gZWxzZSB7Ci0JCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKQogCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCWVsc2UKKworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJCWJyZWFrOworCQl9CiAJfQogCi0JaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIEFDTF9MSU5LLCBkc3QsIGF1dGhfdHlwZSk7CisJaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIEFDTF9MSU5LLCBkc3QsCisJCQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsLCBhdXRoX3R5cGUpOwogCWlmICghaGNvbikKIAkJZ290byBkb25lOwogCkBAIC04MzUsMjAgKzkyNywyNSBAQAogCiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhbGVuLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2wyICpsYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKikgYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlpbnQgZXJyID0gMDsKLQotCWxvY2tfc29jayhzayk7CisJc3RydWN0IHNvY2thZGRyX2wyIGxhOworCWludCBsZW4sIGVyciA9IDA7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwogCi0JaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEggfHwgYWxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbDIpKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9CisJaWYgKCFhZGRyIHx8IGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEgpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUICYmICFsYS0+bDJfcHNtKSB7CisJbWVtc2V0KCZsYSwgMCwgc2l6ZW9mKGxhKSk7CisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YobGEpLCBhbGVuKTsKKwltZW1jcHkoJmxhLCBhZGRyLCBsZW4pOworCisJaWYgKGxhLmwyX2NpZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUICYmICFsYS5sMl9wc20pIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTg3NSw4ICs5NzIsOCBAQAogCX0KIAogCS8qIFNldCBkZXN0aW5hdGlvbiBhZGRyZXNzIGFuZCBwc20gKi8KLQliYWNweSgmYnRfc2soc2spLT5kc3QsICZsYS0+bDJfYmRhZGRyKTsKLQlsMmNhcF9waShzayktPnBzbSA9IGxhLT5sMl9wc207CisJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmbGEubDJfYmRhZGRyKTsKKwlsMmNhcF9waShzayktPnBzbSA9IGxhLmwyX3BzbTsKIAogCWlmICgoZXJyID0gbDJjYXBfZG9fY29ubmVjdChzaykpKQogCQlnb3RvIGRvbmU7CkBAIC0xMDAwLDEyICsxMDk3LDE2IEBACiAJYWRkci0+c2FfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCSpsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2wyKTsKIAotCWlmIChwZWVyKQorCWlmIChwZWVyKSB7CisJCWxhLT5sMl9wc20gPSBsMmNhcF9waShzayktPnBzbTsKIAkJYmFjcHkoJmxhLT5sMl9iZGFkZHIsICZidF9zayhzayktPmRzdCk7Ci0JZWxzZQorCQlsYS0+bDJfY2lkID0gaHRvYnMobDJjYXBfcGkoc2spLT5kY2lkKTsKKwl9IGVsc2UgeworCQlsYS0+bDJfcHNtID0gbDJjYXBfcGkoc2spLT5zcG9ydDsKIAkJYmFjcHkoJmxhLT5sMl9iZGFkZHIsICZidF9zayhzayktPnNyYyk7CisJCWxhLT5sMl9jaWQgPSBodG9icyhsMmNhcF9waShzayktPnNjaWQpOworCX0KIAotCWxhLT5sMl9wc20gPSBsMmNhcF9waShzayktPnBzbTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEwNiwxMSArMTIwNywzOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJbG9ja19zb2NrKHNrKTsKKworCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIgJiYgYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOworCisJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKKworCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOworCQlsMmNhcF9zZW5kX2NtZChsMmNhcF9waShzayktPmNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCisJCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBidF9zb2NrX3JlY3Ztc2coaW9jYiwgc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKK30KKworc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBsMmNhcF9vcHRpb25zIG9wdHM7Ci0JaW50IGVyciA9IDAsIGxlbjsKKwlpbnQgbGVuLCBlcnIgPSAwOwogCXUzMiBvcHQ7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwpAQCAtMTE0MCw3ICsxMjY4LDE1IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWwyY2FwX3BpKHNrKS0+bGlua19tb2RlID0gb3B0OworCQlpZiAob3B0ICYgTDJDQVBfTE1fQVVUSCkKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlpZiAob3B0ICYgTDJDQVBfTE1fRU5DUllQVCkKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOworCQlpZiAob3B0ICYgTDJDQVBfTE1fU0VDVVJFKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9ISUdIOworCisJCWwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2ggICAgPSAob3B0ICYgTDJDQVBfTE1fTUFTVEVSKTsKKwkJbDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSA9IChvcHQgJiBMMkNBUF9MTV9SRUxJQUJMRSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTExNTIsMTIgKzEyODgsNzcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CisJaW50IGxlbiwgZXJyID0gMDsKKwl1MzIgb3B0OworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfTDJDQVApCisJCXJldHVybiBsMmNhcF9zb2NrX3NldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJbG9ja19zb2NrKHNrKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgQlRfU0VDVVJJVFk6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCAmJiBzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2VjLmxldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKHNlYyksIG9wdGxlbik7CisJCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciAqKSAmc2VjLCBvcHR2YWwsIGxlbikpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzZWMubGV2ZWwgPCBCVF9TRUNVUklUWV9MT1cgfHwKKwkJCQkJc2VjLmxldmVsID4gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBzZWMubGV2ZWw7CisJCWJyZWFrOworCisJY2FzZSBCVF9ERUZFUl9TRVRVUDoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCAmJiBzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZ2V0X3VzZXIob3B0LCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlidF9zayhzayktPmRlZmVyX3NldHVwID0gb3B0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbDJjYXBfb3B0aW9ucyBvcHRzOwogCXN0cnVjdCBsMmNhcF9jb25uaW5mbyBjaW5mbzsKIAlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwogCkBAIC0xMTgwLDEyICsxMzgxLDM2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9MTToKLQkJaWYgKHB1dF91c2VyKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlLCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQorCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfTE9XOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSDsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCW9wdCA9IEwyQ0FQX0xNX0FVVEggfCBMMkNBUF9MTV9FTkNSWVBUOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCW9wdCA9IEwyQ0FQX0xNX0FVVEggfCBMMkNBUF9MTV9FTkNSWVBUIHwKKwkJCQkJCQlMMkNBUF9MTV9TRUNVUkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9wdCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJb3B0IHw9IEwyQ0FQX0xNX01BU1RFUjsKKworCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKKwkJCW9wdCB8PSBMMkNBUF9MTV9SRUxJQUJMRTsKKworCQlpZiAocHV0X3VzZXIob3B0LCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQogCQkJZXJyID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0NPTk5JTkZPOgotCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkgeworCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCAmJgorCQkJCQkhKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMiAmJgorCQkJCQkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCkpIHsKIAkJCWVyciA9IC1FTk9UQ09OTjsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMjA4LDYgKzE0MzMsNjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfTDJDQVApCisJCXJldHVybiBsMmNhcF9zb2NrX2dldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmIHNrLT5za190eXBlICE9IFNPQ0tfUkFXKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzZWMubGV2ZWwgPSBsMmNhcF9waShzayktPnNlY19sZXZlbDsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKHNlYykpOworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJnNlYywgbGVuKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChwdXRfdXNlcihidF9zayhzayktPmRlZmVyX3NldHVwLCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQorCQkJZXJyID0gLUVGQVVMVDsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTEyNzAsMTEgKzE1NDksNiBAQAogCQkgKi8KIAkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CiAJfQotCi0JaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fU0VDVVJFKSB7Ci0JCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOwotCQloY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoY29ubi0+aGNvbik7Ci0JfQogfQogCiAvKiBDb3B5IGZyYW1lIHRvIGFsbCByYXcgc29ja2V0cyBvbiB0aGF0IGNvbm5lY3Rpb24gKi8KQEAgLTE1NDksOCArMTgyMywxMSBAQAogCiAJaWYgKChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQpICYmCiAJCQkJCWNtZC0+aWRlbnQgPT0gY29ubi0+aW5mb19pZGVudCkgewotCQljb25uLT5pbmZvX2lkZW50ID0gMDsKIAkJZGVsX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyKTsKKworCQljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOworCQljb25uLT5pbmZvX2lkZW50ID0gMDsKKwogCQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOwogCX0KIApAQCAtMTU4MCw2ICsxODU3LDcgQEAKIAkvKiBDaGVjayBpZiB0aGUgQUNMIGlzIHNlY3VyZSBlbm91Z2ggKGlmIG5vdCBTRFApICovCiAJaWYgKHBzbSAhPSBjcHVfdG9fbGUxNigweDAwMDEpICYmCiAJCQkJIWhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZShjb25uLT5oY29uKSkgeworCQljb25uLT5kaXNjX3JlYXNvbiA9IDB4MDU7CiAJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKIAkJZ290byByZXNwb25zZTsKIAl9CkBAIC0xNjIxLDExICsxODk5LDE4IEBACiAKIAlsMmNhcF9waShzayktPmlkZW50ID0gY21kLT5pZGVudDsKIAotCWlmIChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQpIHsKLQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKLQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKLQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NVQ0NFU1M7Ci0JCQlzdGF0dXMgPSBMMkNBUF9DU19OT19JTkZPOworCWlmIChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkUpIHsKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgeworCQkJaWYgKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApIHsKKwkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNUMjsKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9QRU5EOworCQkJCXN0YXR1cyA9IEwyQ0FQX0NTX0FVVEhPUl9QRU5EOworCQkJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOworCQkJfSBlbHNlIHsKKwkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKKwkJCQlzdGF0dXMgPSBMMkNBUF9DU19OT19JTkZPOworCQkJfQogCQl9IGVsc2UgewogCQkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVDI7CiAJCQlyZXN1bHQgPSBMMkNBUF9DUl9QRU5EOwpAQCAtMTY5NSwxMSArMTk4MCwxNCBAQAogCQlsMmNhcF9waShzayktPmRjaWQgPSBkY2lkOwogCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKIAorCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJj0gfkwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCiAJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCByZXEpLCByZXEpOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ1JfUEVORDoKKwkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xOTA4LDYgKzIxOTYsMTQgQEAKIAkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihsMmNhcF9mZWF0X21hc2spLCAoX19sZTMyICopIHJzcC0+ZGF0YSk7CiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNtZC0+aWRlbnQsCiAJCQkJCUwyQ0FQX0lORk9fUlNQLCBzaXplb2YoYnVmKSwgYnVmKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gTDJDQVBfSVRfRklYRURfQ0hBTikgeworCQl1OCBidWZbMTJdOworCQlzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgKnJzcCA9IChzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgKikgYnVmOworCQlyc3AtPnR5cGUgICA9IGNwdV90b19sZTE2KEwyQ0FQX0lUX0ZJWEVEX0NIQU4pOworCQlyc3AtPnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0lSX1NVQ0NFU1MpOworCQltZW1jcHkoYnVmICsgNCwgbDJjYXBfZml4ZWRfY2hhbiwgOCk7CisJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNtZC0+aWRlbnQsCisJCQkJCUwyQ0FQX0lORk9fUlNQLCBzaXplb2YoYnVmKSwgYnVmKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgcnNwOwogCQlyc3AudHlwZSAgID0gY3B1X3RvX2xlMTYodHlwZSk7CkBAIC0xOTI5LDE0ICsyMjI1LDMxIEBACiAKIAlCVF9EQkcoInR5cGUgMHglNC40eCByZXN1bHQgMHglMi4yeCIsIHR5cGUsIHJlc3VsdCk7CiAKLQljb25uLT5pbmZvX2lkZW50ID0gMDsKLQogCWRlbF90aW1lcigmY29ubi0+aW5mb190aW1lcik7CiAKLQlpZiAodHlwZSA9PSBMMkNBUF9JVF9GRUFUX01BU0spCisJaWYgKHR5cGUgPT0gTDJDQVBfSVRfRkVBVF9NQVNLKSB7CiAJCWNvbm4tPmZlYXRfbWFzayA9IGdldF91bmFsaWduZWRfbGUzMihyc3AtPmRhdGEpOwogCi0JbDJjYXBfY29ubl9zdGFydChjb25uKTsKKwkJaWYgKGNvbm4tPmZlYXRfbWFzayAmIDB4MDA4MCkgeworCQkJc3RydWN0IGwyY2FwX2luZm9fcmVxIHJlcTsKKwkJCXJlcS50eXBlID0gY3B1X3RvX2xlMTYoTDJDQVBfSVRfRklYRURfQ0hBTik7CisKKwkJCWNvbm4tPmluZm9faWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNvbm4tPmluZm9faWRlbnQsCisJCQkJCUwyQ0FQX0lORk9fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7CisJCX0gZWxzZSB7CisJCQljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOworCQkJY29ubi0+aW5mb19pZGVudCA9IDA7CisKKwkJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gTDJDQVBfSVRfRklYRURfQ0hBTikgeworCQljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOworCQljb25uLT5pbmZvX2lkZW50ID0gMDsKKworCQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjE0MywxMCArMjQ1NiwxNSBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsICZoZGV2LT5iZGFkZHIpKSB7Ci0JCQlsbTEgfD0gKEhDSV9MTV9BQ0NFUFQgfCBsMmNhcF9waShzayktPmxpbmtfbW9kZSk7CisJCQlsbTEgfD0gSENJX0xNX0FDQ0VQVDsKKwkJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJCWxtMSB8PSBIQ0lfTE1fTUFTVEVSOwogCQkJZXhhY3QrKzsKLQkJfSBlbHNlIGlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBCREFERFJfQU5ZKSkKLQkJCWxtMiB8PSAoSENJX0xNX0FDQ0VQVCB8IGwyY2FwX3BpKHNrKS0+bGlua19tb2RlKTsKKwkJfSBlbHNlIGlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBCREFERFJfQU5ZKSkgeworCQkJbG0yIHw9IEhDSV9MTV9BQ0NFUFQ7CisJCQlpZiAobDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJCQlsbTIgfD0gSENJX0xNX01BU1RFUjsKKwkJfQogCX0KIAlyZWFkX3VubG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKIApAQCAtMjE3Miw3ICsyNDkwLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCByZWFzb24pCitzdGF0aWMgaW50IGwyY2FwX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqaGNvbikKK3sKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7CisKKwlCVF9EQkcoImhjb24gJXAiLCBoY29uKTsKKworCWlmIChoY29uLT50eXBlICE9IEFDTF9MSU5LIHx8ICFjb25uKQorCQlyZXR1cm4gMHgxMzsKKworCXJldHVybiBjb25uLT5kaXNjX3JlYXNvbjsKK30KKworc3RhdGljIGludCBsMmNhcF9kaXNjb25uX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHJlYXNvbikKIHsKIAlCVF9EQkcoImhjb24gJXAgcmVhc29uICVkIiwgaGNvbiwgcmVhc29uKTsKIApAQCAtMjE4NCw3ICsyNTE0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCBzdGF0dXMpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfY2hlY2tfZW5jcnlwdGlvbihzdHJ1Y3Qgc29jayAqc2ssIHU4IGVuY3J5cHQpCit7CisJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUKQorCQlyZXR1cm47CisKKwlpZiAoZW5jcnlwdCA9PSAweDAwKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKKwkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOworCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaICogNSk7CisJCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCV9fbDJjYXBfc29ja19jbG9zZShzaywgRUNPTk5SRUZVU0VEKTsKKwl9IGVsc2UgeworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTUVESVVNKQorCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJfQorfQorCitzdGF0aWMgaW50IGwyY2FwX3NlY3VyaXR5X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cywgdTggZW5jcnlwdCkKIHsKIAlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsOwogCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKQEAgLTIyMDAsODUgKzI1NDcsMTYgQEAKIAlyZWFkX2xvY2soJmwtPmxvY2spOwogCiAJZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7Ci0JCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7Ci0KIAkJYmhfbG9ja19zb2NrKHNrKTsKIAotCQlpZiAoKHBpLT5saW5rX21vZGUgJiAoTDJDQVBfTE1fRU5DUllQVCB8IEwyQ0FQX0xNX1NFQ1VSRSkpICYmCi0JCQkJCSEoaGNvbi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpICYmCi0JCQkJCQkJCSFzdGF0dXMpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EKSB7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCkgewotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgcmVxOwotCQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOwotCi0JCQkJbDJjYXBfcGkoc2spLT5pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKLQotCQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7Ci0JCQl9IGVsc2UgewotCQkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwotCQkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAvIDEwKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIpIHsKLQkJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7Ci0JCQlfX3UxNiByZXN1bHQ7Ci0KLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NVQ0NFU1M7Ci0JCQl9IGVsc2UgewotCQkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47Ci0JCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gMTApOwotCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKLQkJCX0KLQotCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOwotCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKLQkJfQotCi0JCWJoX3VubG9ja19zb2NrKHNrKTsKLQl9Ci0KLQlyZWFkX3VubG9jaygmbC0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsMmNhcF9lbmNyeXB0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cywgdTggZW5jcnlwdCkKLXsKLQlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsOwotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0KLQlpZiAoIWNvbm4pCi0JCXJldHVybiAwOwotCi0JbCA9ICZjb25uLT5jaGFuX2xpc3Q7Ci0KLQlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKLQotCXJlYWRfbG9jaygmbC0+bG9jayk7Ci0KLQlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKLQkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKLQotCQliaF9sb2NrX3NvY2soc2spOwotCi0JCWlmICgocGktPmxpbmtfbW9kZSAmIChMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkgJiYKLQkJCQkJKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKLQkJCQkJCXNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpICYmCi0JCQkJCQkhc3RhdHVzICYmIGVuY3J5cHQgPT0gMHgwMCkgewotCQkJX19sMmNhcF9zb2NrX2Nsb3NlKHNrLCBFQ09OTlJFRlVTRUQpOworCQlpZiAoIXN0YXR1cyAmJiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAorCQkJCQkJc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykpIHsKKwkJCWwyY2FwX2NoZWNrX2VuY3J5cHRpb24oc2ssIGVuY3J5cHQpOwogCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJY29udGludWU7CiAJCX0KQEAgLTIzNzYsNyArMjY1NCw3IEBACiAJCQlnb3RvIGRyb3A7CiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHNrYl9wdXQoY29ubi0+cnhfc2tiLCBza2ItPmxlbiksCi0JCQkgICAgICBza2ItPmxlbik7CisJCQkJCQkJCXNrYi0+bGVuKTsKIAkJY29ubi0+cnhfbGVuID0gbGVuIC0gc2tiLT5sZW47CiAJfSBlbHNlIHsKIAkJQlRfREJHKCJDb250OiBmcmFnIGxlbiAlZCAoZXhwZWN0aW5nICVkKSIsIHNrYi0+bGVuLCBjb25uLT5yeF9sZW4pOwpAQCAtMjM5OCw3ICsyNjc2LDcgQEAKIAkJfQogCiAJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KGNvbm4tPnJ4X3NrYiwgc2tiLT5sZW4pLAotCQkJICAgICAgc2tiLT5sZW4pOworCQkJCQkJCQlza2ItPmxlbik7CiAJCWNvbm4tPnJ4X2xlbiAtPSBza2ItPmxlbjsKIAogCQlpZiAoIWNvbm4tPnJ4X2xlbikgewpAQCAtMjQyNCwxMCArMjcwMiwxMCBAQAogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKSB7CiAJCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAKLQkJc3RyICs9IHNwcmludGYoc3RyLCAiJXMgJXMgJWQgJWQgMHglNC40eCAweCU0LjR4ICVkICVkIDB4JXhcbiIsCisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVzICVzICVkICVkIDB4JTQuNHggMHglNC40eCAlZCAlZCAlZFxuIiwKIAkJCQliYXRvc3RyKCZidF9zayhzayktPnNyYyksIGJhdG9zdHIoJmJ0X3NrKHNrKS0+ZHN0KSwKIAkJCQlzay0+c2tfc3RhdGUsIGJ0b2hzKHBpLT5wc20pLCBwaS0+c2NpZCwgcGktPmRjaWQsCi0JCQkJcGktPmltdHUsIHBpLT5vbXR1LCBwaS0+bGlua19tb2RlKTsKKwkJCQlwaS0+aW10dSwgcGktPm9tdHUsIHBpLT5zZWNfbGV2ZWwpOwogCX0KIAogCXJlYWRfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwpAQCAtMjQ0Nyw3ICsyNzI1LDcgQEAKIAkuYWNjZXB0CQk9IGwyY2FwX3NvY2tfYWNjZXB0LAogCS5nZXRuYW1lCT0gbDJjYXBfc29ja19nZXRuYW1lLAogCS5zZW5kbXNnCT0gbDJjYXBfc29ja19zZW5kbXNnLAotCS5yZWN2bXNnCT0gYnRfc29ja19yZWN2bXNnLAorCS5yZWN2bXNnCT0gbDJjYXBfc29ja19yZWN2bXNnLAogCS5wb2xsCQk9IGJ0X3NvY2tfcG9sbCwKIAkuaW9jdGwJCT0gYnRfc29ja19pb2N0bCwKIAkubW1hcAkJPSBzb2NrX25vX21tYXAsCkBAIC0yNDY5LDggKzI3NDcsOCBAQAogCS5jb25uZWN0X2luZAk9IGwyY2FwX2Nvbm5lY3RfaW5kLAogCS5jb25uZWN0X2NmbQk9IGwyY2FwX2Nvbm5lY3RfY2ZtLAogCS5kaXNjb25uX2luZAk9IGwyY2FwX2Rpc2Nvbm5faW5kLAotCS5hdXRoX2NmbQk9IGwyY2FwX2F1dGhfY2ZtLAotCS5lbmNyeXB0X2NmbQk9IGwyY2FwX2VuY3J5cHRfY2ZtLAorCS5kaXNjb25uX2NmbQk9IGwyY2FwX2Rpc2Nvbm5fY2ZtLAorCS5zZWN1cml0eV9jZm0JPSBsMmNhcF9zZWN1cml0eV9jZm0sCiAJLnJlY3ZfYWNsZGF0YQk9IGwyY2FwX3JlY3ZfYWNsZGF0YQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IGFjZDg0ZmQuLjFkMGZiMGYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9yZmNvbW0uaD4KIAotI2RlZmluZSBWRVJTSU9OICIxLjEwIgorI2RlZmluZSBWRVJTSU9OICIxLjExIgogCiBzdGF0aWMgaW50IGRpc2FibGVfY2ZjID0gMDsKIHN0YXRpYyBpbnQgY2hhbm5lbF9tdHUgPSAtMTsKQEAgLTIyMywxOSArMjIzLDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcmZjb21tX2NoZWNrX2xpbmtfbW9kZShzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKK3N0YXRpYyBpbmxpbmUgaW50IHJmY29tbV9jaGVja19zZWN1cml0eShzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBkLT5zZXNzaW9uLT5zb2NrLT5zazsKKwlfX3U4IGF1dGhfdHlwZTsKIAotCWlmIChkLT5saW5rX21vZGUgJiAoUkZDT01NX0xNX0VOQ1JZUFQgfCBSRkNPTU1fTE1fU0VDVVJFKSkgewotCQlpZiAoIWhjaV9jb25uX2VuY3J5cHQobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKSkKLQkJCXJldHVybiAxOwotCX0gZWxzZSBpZiAoZC0+bGlua19tb2RlICYgUkZDT01NX0xNX0FVVEgpIHsKLQkJaWYgKCFoY2lfY29ubl9hdXRoKGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbikpCi0JCQlyZXR1cm4gMTsKKwlzd2l0Y2ggKGQtPnNlY19sZXZlbCkgeworCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQlicmVhazsKKwljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CisJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShsMmNhcF9waShzayktPmNvbm4tPmhjb24sIGQtPnNlY19sZXZlbCwKKwkJCQkJCQkJYXV0aF90eXBlKTsKIH0KIAogLyogLS0tLSBSRkNPTU0gRExDcyAtLS0tICovCkBAIC0zODgsMTAgKzM5NCwxMCBAQAogCWQtPmNmYyA9IChzLT5jZmMgPT0gUkZDT01NX0NGQ19VTktOT1dOKSA/IDAgOiBzLT5jZmM7CiAKIAlpZiAocy0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEKSB7Ci0JCWlmIChyZmNvbW1fY2hlY2tfbGlua19tb2RlKGQpKQotCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwotCQllbHNlCisJCWlmIChyZmNvbW1fY2hlY2tfc2VjdXJpdHkoZCkpCiAJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJZWxzZQorCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwogCX0KIAogCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9DT05OX1RJTUVPVVQpOwpAQCAtNDIxLDkgKzQyNywxNiBAQAogCQkJZCwgZC0+c3RhdGUsIGQtPmRsY2ksIGVyciwgcyk7CiAKIAlzd2l0Y2ggKGQtPnN0YXRlKSB7Ci0JY2FzZSBCVF9DT05ORUNURUQ6Ci0JY2FzZSBCVF9DT05GSUc6CiAJY2FzZSBCVF9DT05ORUNUOgorCWNhc2UgQlRfQ09ORklHOgorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CisJCQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOworCQkJYnJlYWs7CisJCX0KKwkJLyogRmFsbCB0aHJvdWdoICovCisKKwljYXNlIEJUX0NPTk5FQ1RFRDoKIAkJZC0+c3RhdGUgPSBCVF9ESVNDT05OOwogCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZkLT50eF9xdWV1ZSkpIHsKIAkJCXJmY29tbV9zZW5kX2Rpc2MocywgZC0+ZGxjaSk7CkBAIC00MzQsNiArNDQ3LDE1IEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIEJUX09QRU46CisJY2FzZSBCVF9DT05ORUNUMjoKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncykpIHsKKwkJCXNldF9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpOworCQkJcmZjb21tX3NjaGVkdWxlKFJGQ09NTV9TQ0hFRF9BVVRIKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCiAJZGVmYXVsdDoKIAkJcmZjb21tX2RsY19jbGVhcl90aW1lcihkKTsKIApAQCAtNjM2LDYgKzY1OCw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBzcmMpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCWFkZHIubDJfcHNtICAgID0gMDsKKwlhZGRyLmwyX2NpZCAgICA9IDA7CiAJKmVyciA9IGtlcm5lbF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSk7CiAJaWYgKCplcnIgPCAwKQogCQlnb3RvIGZhaWxlZDsKQEAgLTY1Nyw2ICs2ODAsNyBAQAogCWJhY3B5KCZhZGRyLmwyX2JkYWRkciwgZHN0KTsKIAlhZGRyLmwyX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKIAlhZGRyLmwyX3BzbSAgICA9IGh0b2JzKFJGQ09NTV9QU00pOworCWFkZHIubDJfY2lkICAgID0gMDsKIAkqZXJyID0ga2VybmVsX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpLCBPX05PTkJMT0NLKTsKIAlpZiAoKmVyciA9PSAwIHx8ICplcnIgPT0gLUVJTlBST0dSRVNTKQogCQlyZXR1cm4gczsKQEAgLTExNjIsNyArMTE4Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQordm9pZCByZmNvbW1fZGxjX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBkLT5zZXNzaW9uLT5zb2NrLT5zazsKIApAQCAtMTE3NSwxMiArMTE5OSwzMSBAQAogCWQtPnN0YXRlX2NoYW5nZShkLCAwKTsKIAlyZmNvbW1fZGxjX3VubG9jayhkKTsKIAotCWlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fTUFTVEVSKQorCWlmIChkLT5yb2xlX3N3aXRjaCkKIAkJaGNpX2Nvbm5fc3dpdGNoX3JvbGUobDJjYXBfcGkoc2spLT5jb25uLT5oY29uLCAweDAwKTsKIAogCXJmY29tbV9zZW5kX21zYyhkLT5zZXNzaW9uLCAxLCBkLT5kbGNpLCBkLT52MjRfc2lnKTsKIH0KIAorc3RhdGljIHZvaWQgcmZjb21tX2NoZWNrX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKK3sKKwlpZiAocmZjb21tX2NoZWNrX3NlY3VyaXR5KGQpKSB7CisJCWlmIChkLT5kZWZlcl9zZXR1cCkgeworCQkJc2V0X2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncyk7CisJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKworCQkJcmZjb21tX2RsY19sb2NrKGQpOworCQkJZC0+c3RhdGUgPSBCVF9DT05ORUNUMjsKKwkJCWQtPnN0YXRlX2NoYW5nZShkLCAwKTsKKwkJCXJmY29tbV9kbGNfdW5sb2NrKGQpOworCQl9IGVsc2UKKwkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCX0gZWxzZSB7CisJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKKwkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7CisJfQorfQorCiBzdGF0aWMgaW50IHJmY29tbV9yZWN2X3NhYm0oc3RydWN0IHJmY29tbV9zZXNzaW9uICpzLCB1OCBkbGNpKQogewogCXN0cnVjdCByZmNvbW1fZGxjICpkOwpAQCAtMTIwMywxMSArMTI0Niw3IEBACiAJaWYgKGQpIHsKIAkJaWYgKGQtPnN0YXRlID09IEJUX09QRU4pIHsKIAkJCS8qIERMQyB3YXMgcHJldmlvdXNseSBvcGVuZWQgYnkgUE4gcmVxdWVzdCAqLwotCQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKLQkJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7Ci0JCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7Ci0JCQl9IGVsc2UKLQkJCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJCXJmY29tbV9jaGVja19hY2NlcHQoZCk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTIxOSwxMSArMTI1OCw3IEBACiAJCWQtPmFkZHIgPSBfX2FkZHIocy0+aW5pdGlhdG9yLCBkbGNpKTsKIAkJcmZjb21tX2RsY19saW5rKHMsIGQpOwogCi0JCWlmIChyZmNvbW1fY2hlY2tfbGlua19tb2RlKGQpKSB7Ci0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7Ci0JCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKLQkJfSBlbHNlCi0JCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJcmZjb21tX2NoZWNrX2FjY2VwdChkKTsKIAl9IGVsc2UgewogCQlyZmNvbW1fc2VuZF9kbShzLCBkbGNpKTsKIAl9CkBAIC0xNjM3LDExICsxNjcyLDEyIEBACiAJCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKIAkJaWYgKGQtPnN0YXRlID09IEJUX0NPTkZJRykgewogCQkJZC0+bXR1ID0gcy0+bXR1OwotCQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKKwkJCWlmIChyZmNvbW1fY2hlY2tfc2VjdXJpdHkoZCkpIHsKKwkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwogCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOwotCQkJfSBlbHNlCi0JCQkJcmZjb21tX3NlbmRfcG4ocywgMSwgZCk7CisJCQl9CiAJCX0KIAl9CiB9CkBAIC0xNzE3LDExICsxNzUzLDE3IEBACiAJCQlpZiAoZC0+b3V0KSB7CiAJCQkJcmZjb21tX3NlbmRfcG4ocywgMSwgZCk7CiAJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0NPTk5fVElNRU9VVCk7Ci0JCQl9IGVsc2UKLQkJCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKLQkJCWlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fU0VDVVJFKSB7Ci0JCQkJc3RydWN0IHNvY2sgKnNrID0gcy0+c29jay0+c2s7Ci0JCQkJaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbik7CisJCQl9IGVsc2UgeworCQkJCWlmIChkLT5kZWZlcl9zZXR1cCkgeworCQkJCQlzZXRfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKTsKKwkJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7CisKKwkJCQkJcmZjb21tX2RsY19sb2NrKGQpOworCQkJCQlkLT5zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJCQlkLT5zdGF0ZV9jaGFuZ2UoZCwgMCk7CisJCQkJCXJmY29tbV9kbGNfdW5sb2NrKGQpOworCQkJCX0gZWxzZQorCQkJCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncykpIHsKQEAgLTE3MzQsNiArMTc3Niw5IEBACiAJCQljb250aW51ZTsKIAkJfQogCisJCWlmICh0ZXN0X2JpdChSRkNPTU1fU0VDX1BFTkRJTkcsICZkLT5mbGFncykpCisJCQljb250aW51ZTsKKwogCQlpZiAodGVzdF9iaXQoUkZDT01NX1RYX1RIUk9UVExFRCwgJnMtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xODc2LDYgKzE5MjEsNyBAQAogCWJhY3B5KCZhZGRyLmwyX2JkYWRkciwgYmEpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCWFkZHIubDJfcHNtICAgID0gaHRvYnMoUkZDT01NX1BTTSk7CisJYWRkci5sMl9jaWQgICAgPSAwOwogCWVyciA9IGtlcm5lbF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSk7CiAJaWYgKGVyciA8IDApIHsKIAkJQlRfRVJSKCJCaW5kIGZhaWxlZCAlZCIsIGVycik7CkBAIC0xOTQ3LDQyICsxOTkzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmZjb21tX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzKQotewotCXN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqczsKLQlzdHJ1Y3QgcmZjb21tX2RsYyAqZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKLQotCUJUX0RCRygiY29ubiAlcCBzdGF0dXMgMHglMDJ4IiwgY29ubiwgc3RhdHVzKTsKLQotCXMgPSByZmNvbW1fc2Vzc2lvbl9nZXQoJmNvbm4tPmhkZXYtPmJkYWRkciwgJmNvbm4tPmRzdCk7Ci0JaWYgKCFzKQotCQlyZXR1cm47Ci0KLQlyZmNvbW1fc2Vzc2lvbl9ob2xkKHMpOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZzLT5kbGNzKSB7Ci0JCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKLQotCQlpZiAoKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSAmJgotCQkJCSEoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpICYmICFzdGF0dXMpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFzdGF0dXMpCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX0FDQ0VQVCwgJmQtPmZsYWdzKTsKLQkJZWxzZQotCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7Ci0JfQotCi0JcmZjb21tX3Nlc3Npb25fcHV0KHMpOwotCi0JcmZjb21tX3NjaGVkdWxlKFJGQ09NTV9TQ0hFRF9BVVRIKTsKLX0KLQotc3RhdGljIHZvaWQgcmZjb21tX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQorc3RhdGljIHZvaWQgcmZjb21tX3NlY3VyaXR5X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHU4IHN0YXR1cywgdTggZW5jcnlwdCkKIHsKIAlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnM7CiAJc3RydWN0IHJmY29tbV9kbGMgKmQ7CkBAIC0xOTk5LDE4ICsyMDEwLDI5IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZzLT5kbGNzKSB7CiAJCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKIAotCQlpZiAoKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSAmJgotCQkJCQkoZC0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8Ci0JCQkJCQlkLT5zdGF0ZSA9PSBCVF9DT05GSUcpICYmCi0JCQkJCQkhc3RhdHVzICYmIGVuY3J5cHQgPT0gMHgwMCkgewotCQkJX19yZmNvbW1fZGxjX2Nsb3NlKGQsIEVDT05OUkVGVVNFRCk7Ci0JCQljb250aW51ZTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fU0VDX1BFTkRJTkcsICZkLT5mbGFncykpIHsKKwkJCXJmY29tbV9kbGNfY2xlYXJfdGltZXIoZCk7CisJCQlpZiAoc3RhdHVzIHx8IGVuY3J5cHQgPT0gMHgwMCkgeworCQkJCV9fcmZjb21tX2RsY19jbG9zZShkLCBFQ09OTlJFRlVTRUQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGQtPnN0YXRlID09IEJUX0NPTk5FQ1RFRCAmJiAhc3RhdHVzICYmIGVuY3J5cHQgPT0gMHgwMCkgeworCQkJaWYgKGQtPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKKwkJCQlzZXRfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKTsKKwkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoZC0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpIHsKKwkJCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgRUNPTk5SRUZVU0VEKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJfQogCiAJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIXN0YXR1cyAmJiBlbmNyeXB0KQorCQlpZiAoIXN0YXR1cykKIAkJCXNldF9iaXQoUkZDT01NX0FVVEhfQUNDRVBULCAmZC0+ZmxhZ3MpOwogCQllbHNlCiAJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKQEAgLTIwMjMsOCArMjA0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGNpX2NiIHJmY29tbV9jYiA9IHsKIAkubmFtZQkJPSAiUkZDT01NIiwKLQkuYXV0aF9jZm0JPSByZmNvbW1fYXV0aF9jZm0sCi0JLmVuY3J5cHRfY2ZtCT0gcmZjb21tX2VuY3J5cHRfY2ZtCisJLnNlY3VyaXR5X2NmbQk9IHJmY29tbV9zZWN1cml0eV9jZm0KIH07CiAKIHN0YXRpYyBzc2l6ZV90IHJmY29tbV9kbGNfc3lzZnNfc2hvdyhzdHJ1Y3QgY2xhc3MgKmRldiwgY2hhciAqYnVmKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCmluZGV4IGQzZmM2ZmMuLjdmNDgyNzggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKQEAgLTI2MSwxMiArMjYxLDE5IEBACiAKIAlpZiAocGFyZW50KSB7CiAJCXNrLT5za190eXBlID0gcGFyZW50LT5za190eXBlOwotCQlwaS0+bGlua19tb2RlID0gcmZjb21tX3BpKHBhcmVudCktPmxpbmtfbW9kZTsKKwkJcGktPmRsYy0+ZGVmZXJfc2V0dXAgPSBidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cDsKKworCQlwaS0+c2VjX2xldmVsID0gcmZjb21tX3BpKHBhcmVudCktPnNlY19sZXZlbDsKKwkJcGktPnJvbGVfc3dpdGNoID0gcmZjb21tX3BpKHBhcmVudCktPnJvbGVfc3dpdGNoOwogCX0gZWxzZSB7Ci0JCXBpLT5saW5rX21vZGUgPSAwOworCQlwaS0+ZGxjLT5kZWZlcl9zZXR1cCA9IDA7CisKKwkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJcGktPnJvbGVfc3dpdGNoID0gMDsKIAl9CiAKLQlwaS0+ZGxjLT5saW5rX21vZGUgPSBwaS0+bGlua19tb2RlOworCXBpLT5kbGMtPnNlY19sZXZlbCA9IHBpLT5zZWNfbGV2ZWw7CisJcGktPmRsYy0+cm9sZV9zd2l0Y2ggPSBwaS0+cm9sZV9zd2l0Y2g7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gcmZjb21tX3Byb3RvID0gewpAQCAtNDA2LDcgKzQxMyw4IEBACiAJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmc2EtPnJjX2JkYWRkcik7CiAJcmZjb21tX3BpKHNrKS0+Y2hhbm5lbCA9IHNhLT5yY19jaGFubmVsOwogCi0JZC0+bGlua19tb2RlID0gcmZjb21tX3BpKHNrKS0+bGlua19tb2RlOworCWQtPnNlY19sZXZlbCA9IHJmY29tbV9waShzayktPnNlY19sZXZlbDsKKwlkLT5yb2xlX3N3aXRjaCA9IHJmY29tbV9waShzayktPnJvbGVfc3dpdGNoOwogCiAJZXJyID0gcmZjb21tX2RsY19vcGVuKGQsICZidF9zayhzayktPnNyYywgJnNhLT5yY19iZGFkZHIsIHNhLT5yY19jaGFubmVsKTsKIAlpZiAoIWVycikKQEAgLTU1NCw2ICs1NjIsOSBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHNlbnQgPSAwOwogCisJaWYgKHRlc3RfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKwogCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIApAQCAtNTcwLDggKzU4MSwxMSBAQAogCiAJCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIHNpemUgKyBSRkNPTU1fU0tCX1JFU0VSVkUsCiAJCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwotCQlpZiAoIXNrYikKKwkJaWYgKCFza2IpIHsKKwkJCWlmIChzZW50ID09IDApCisJCQkJc2VudCA9IGVycjsKIAkJCWJyZWFrOworCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgUkZDT01NX1NLQl9IRUFEX1JFU0VSVkUpOwogCiAJCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIHNpemUpLCBtc2ctPm1zZ19pb3YsIHNpemUpOwpAQCAtNjMwLDEwICs2NDQsMTYgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJmY29tbV9kbGMgKmQgPSByZmNvbW1fcGkoc2spLT5kbGM7CiAJaW50IGVyciA9IDA7CiAJc2l6ZV90IHRhcmdldCwgY29waWVkID0gMDsKIAlsb25nIHRpbWVvOwogCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncykpIHsKKwkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChmbGFncyAmIE1TR19PT0IpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIApAQCAtNzEwLDcgKzczMCw3IEBACiAJcmV0dXJuIGNvcGllZCA/IDogZXJyOwogfQogCi1zdGF0aWMgaW50IHJmY29tbV9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3N0YXRpYyBpbnQgcmZjb21tX3NvY2tfc2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJaW50IGVyciA9IDA7CkBAIC03MjcsNyArNzQ3LDE0NCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlyZmNvbW1fcGkoc2spLT5saW5rX21vZGUgPSBvcHQ7CisJCWlmIChvcHQgJiBSRkNPTU1fTE1fQVVUSCkKKwkJCXJmY29tbV9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJaWYgKG9wdCAmIFJGQ09NTV9MTV9FTkNSWVBUKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOworCQlpZiAob3B0ICYgUkZDT01NX0xNX1NFQ1VSRSkKKwkJCXJmY29tbV9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0hJR0g7CisKKwkJcmZjb21tX3BpKHNrKS0+cm9sZV9zd2l0Y2ggPSAob3B0ICYgUkZDT01NX0xNX01BU1RFUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcmZjb21tX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CisJaW50IGxlbiwgZXJyID0gMDsKKwl1MzIgb3B0OworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfUkZDT01NKQorCQlyZXR1cm4gcmZjb21tX3NvY2tfc2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzZWMubGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yoc2VjKSwgb3B0bGVuKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyICopICZzZWMsIG9wdHZhbCwgbGVuKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNlYy5sZXZlbCA+IEJUX1NFQ1VSSVRZX0hJR0gpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXJmY29tbV9waShzayktPnNlY19sZXZlbCA9IHNlYy5sZXZlbDsKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChnZXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBvcHQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcmZjb21tX3NvY2tfZ2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc29jayAqbDJjYXBfc2s7CisJc3RydWN0IHJmY29tbV9jb25uaW5mbyBjaW5mbzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBSRkNPTU1fTE06CisJCXN3aXRjaCAocmZjb21tX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfTE9XOgorCQkJb3B0ID0gUkZDT01NX0xNX0FVVEg7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlvcHQgPSBSRkNPTU1fTE1fQVVUSCB8IFJGQ09NTV9MTV9FTkNSWVBUOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCW9wdCA9IFJGQ09NTV9MTV9BVVRIIHwgUkZDT01NX0xNX0VOQ1JZUFQgfAorCQkJCQkJCVJGQ09NTV9MTV9TRUNVUkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9wdCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChyZmNvbW1fcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJCW9wdCB8PSBSRkNPTU1fTE1fTUFTVEVSOworCisJCWlmIChwdXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCQllcnIgPSAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgUkZDT01NX0NPTk5JTkZPOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCAmJgorCQkJCQkhcmZjb21tX3BpKHNrKS0+ZGxjLT5kZWZlcl9zZXR1cCkgeworCQkJZXJyID0gLUVOT1RDT05OOworCQkJYnJlYWs7CisJCX0KKworCQlsMmNhcF9zayA9IHJmY29tbV9waShzayktPmRsYy0+c2Vzc2lvbi0+c29jay0+c2s7CisKKwkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOworCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKKwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC03NDIsMzYgKzg5OSw0NCBAQAogc3RhdGljIGludCByZmNvbW1fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3Qgc29jayAqbDJjYXBfc2s7Ci0Jc3RydWN0IHJmY29tbV9jb25uaW5mbyBjaW5mbzsKKwlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOwogCWludCBsZW4sIGVyciA9IDA7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwogCisJaWYgKGxldmVsID09IFNPTF9SRkNPTU0pCisJCXJldHVybiByZmNvbW1fc29ja19nZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAobGV2ZWwgIT0gU09MX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwogCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJbG9ja19zb2NrKHNrKTsKIAogCXN3aXRjaCAob3B0bmFtZSkgewotCWNhc2UgUkZDT01NX0xNOgotCQlpZiAocHV0X3VzZXIocmZjb21tX3BpKHNrKS0+bGlua19tb2RlLCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQotCQkJZXJyID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFJGQ09NTV9DT05OSU5GTzoKLQkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpIHsKLQkJCWVyciA9IC1FTk9UQ09OTjsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKKwkJCWVyciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCi0JCWwyY2FwX3NrID0gcmZjb21tX3BpKHNrKS0+ZGxjLT5zZXNzaW9uLT5zb2NrLT5zazsKKwkJc2VjLmxldmVsID0gcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsOwogCi0JCWNpbmZvLmhjaV9oYW5kbGUgPSBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmhhbmRsZTsKLQkJbWVtY3B5KGNpbmZvLmRldl9jbGFzcywgbDJjYXBfcGkobDJjYXBfc2spLT5jb25uLT5oY29uLT5kZXZfY2xhc3MsIDMpOworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKHNlYykpOworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJnNlYywgbGVuKSkKKwkJCWVyciA9IC1FRkFVTFQ7CiAKLQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOwotCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQorCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB1dF91c2VyKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAsICh1MzIgX191c2VyICopIG9wdHZhbCkpCiAJCQllcnIgPSAtRUZBVUxUOwogCiAJCWJyZWFrOwpAQCAtODg4LDYgKzEwNTMsMTAgQEAKIAogZG9uZToKIAliaF91bmxvY2tfc29jayhwYXJlbnQpOworCisJaWYgKGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwKQorCQlwYXJlbnQtPnNrX3N0YXRlX2NoYW5nZShwYXJlbnQpOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwppbmRleCBkMDMwYzY5Li5hYmRjNzAzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwpAQCAtNzMxLDcgKzczMSw4IEBACiAJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+d2FpdCwgJndhaXQpOwogCiAJaWYgKGVyciA9PSAwKQotCQlkZXZpY2VfbW92ZShkZXYtPnR0eV9kZXYsIHJmY29tbV9nZXRfZGV2aWNlKGRldikpOworCQlkZXZpY2VfbW92ZShkZXYtPnR0eV9kZXYsIHJmY29tbV9nZXRfZGV2aWNlKGRldiksCisJCQkgICAgRFBNX09SREVSX0RFVl9BRlRFUl9QQVJFTlQpOwogCiAJcmZjb21tX3R0eV9jb3B5X3BlbmRpbmcoZGV2KTsKIApAQCAtNzUxLDcgKzc1Miw3IEBACiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5vcGVuZWQpKSB7CiAJCWlmIChkZXYtPnR0eV9kZXYtPnBhcmVudCkKLQkJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgTlVMTCk7CisJCQlkZXZpY2VfbW92ZShkZXYtPnR0eV9kZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7CiAKIAkJLyogQ2xvc2UgRExDIGFuZCBkZXR0YWNoIFRUWSAqLwogCQlyZmNvbW1fZGxjX2Nsb3NlKGRldi0+ZGxjLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDQ2ZmQ4YmYuLjUxYWUwYzMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJZWxzZQogCQl0eXBlID0gU0NPX0xJTks7CiAKLQloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgdHlwZSwgZHN0LCBIQ0lfQVRfTk9fQk9ORElORyk7CisJaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIHR5cGUsIGRzdCwgQlRfU0VDVVJJVFlfTE9XLCBIQ0lfQVRfTk9fQk9ORElORyk7CiAJaWYgKCFoY29uKQogCQlnb3RvIGRvbmU7CiAKQEAgLTY2OCw3ICs2NjgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc2NvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCitzdGF0aWMgaW50IHNjb19zb2NrX2dldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNjb19vcHRpb25zIG9wdHM7CkBAIC03MjMsNiArNzIzLDMxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBzY29fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlpbnQgbGVuLCBlcnIgPSAwOworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfU0NPKQorCQlyZXR1cm4gc2NvX3NvY2tfZ2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgc2NvX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtODMyLDEwICs4NTcsMzAgQEAKIC8qIC0tLS0tIFNDTyBpbnRlcmZhY2Ugd2l0aCBsb3dlciBsYXllciAoSENJKSAtLS0tLSAqLwogc3RhdGljIGludCBzY29fY29ubmVjdF9pbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIF9fdTggdHlwZSkKIHsKKwlyZWdpc3RlciBzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJaW50IGxtID0gMDsKKworCWlmICh0eXBlICE9IFNDT19MSU5LICYmIHR5cGUgIT0gRVNDT19MSU5LKQorCQlyZXR1cm4gMDsKKwogCUJUX0RCRygiaGRldiAlcywgYmRhZGRyICVzIiwgaGRldi0+bmFtZSwgYmF0b3N0cihiZGFkZHIpKTsKIAotCS8qIEFsd2F5cyBhY2NlcHQgY29ubmVjdGlvbiAqLwotCXJldHVybiBIQ0lfTE1fQUNDRVBUOworCS8qIEZpbmQgbGlzdGVuaW5nIHNvY2tldHMgKi8KKwlyZWFkX2xvY2soJnNjb19za19saXN0LmxvY2spOworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmc2NvX3NrX2xpc3QuaGVhZCkgeworCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikKKwkJCWNvbnRpbnVlOworCisJCWlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCAmaGRldi0+YmRhZGRyKSB8fAorCQkJCSFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKSB7CisJCQlsbSB8PSBIQ0lfTE1fQUNDRVBUOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVhZF91bmxvY2soJnNjb19za19saXN0LmxvY2spOworCisJcmV0dXJuIGxtOwogfQogCiBzdGF0aWMgaW50IHNjb19jb25uZWN0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIF9fdTggc3RhdHVzKQpAQCAtODU3LDcgKzkwMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2NvX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCByZWFzb24pCitzdGF0aWMgaW50IHNjb19kaXNjb25uX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIF9fdTggcmVhc29uKQogewogCUJUX0RCRygiaGNvbiAlcCByZWFzb24gJWQiLCBoY29uLCByZWFzb24pOwogCkBAIC05NDAsNyArOTg1LDcgQEAKIAkuaWQJCT0gSENJX1BST1RPX1NDTywKIAkuY29ubmVjdF9pbmQJPSBzY29fY29ubmVjdF9pbmQsCiAJLmNvbm5lY3RfY2ZtCT0gc2NvX2Nvbm5lY3RfY2ZtLAotCS5kaXNjb25uX2luZAk9IHNjb19kaXNjb25uX2luZCwKKwkuZGlzY29ubl9jZm0JPSBzY29fZGlzY29ubl9jZm0sCiAJLnJlY3Zfc2NvZGF0YQk9IHNjb19yZWN2X3Njb2RhdGEKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCA3MjdjNWM1Li44YTk2NjcyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC00MjYsNyArNDI2LDYgQEAKIGVycjE6CiAJa29iamVjdF9kZWwoJnAtPmtvYmopOwogZXJyMDoKLQlrb2JqZWN0X3B1dCgmcC0+a29iaik7CiAJZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIC0xKTsKIHB1dF9iYWNrOgogCWRldl9wdXQoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggYmE3YmUxOS4uZmNmZmIzZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTk4LDcgKzk4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTElOSywgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCBkNDRjYmY4Li5hOTRmM2NjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBlYnRfbG9nX2xvZ2dlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF9sb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUgCQk9ICJlYnRfbG9nIiwKIAkubG9nZm4JCT0gJmVidF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IDJjNmQ2ODIuLjEzM2VlYWUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMjc5LDIxICsyNzksMjEgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBlYnRfdWxvZ19sb2dnZXIgPSB7Ci0JLm5hbWUJCT0gInVsb2ciLAorc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgZWJ0X3Vsb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImVidF91bG9nIiwKIAkubG9nZm4JCT0gJmVidF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGVidF91bG9nX2luaXQodm9pZCkKIHsKLQlib29sIHJldCA9IHRydWU7CisJaW50IHJldDsKIAlpbnQgaTsKIAogCWlmIChubGJ1ZnNpeiA+PSAxMjgqMTAyNCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgImVidF91bG9nOiBOZXRsaW5rIGJ1ZmZlciBoYXMgdG8gYmUgPD0gMTI4a0IsIgogCQkgICAgICAgIiBwbGVhc2UgdHJ5IGEgc21hbGxlciBubGJ1ZnNpeiBwYXJhbWV0ZXIuXG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHVsb2dfYnVmZmVycyAqLwpAQCAtMzA4LDEyICszMDgsMTIgQEAKIAlpZiAoIWVidHVsb2dubCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FICI6IG91dCBvZiBtZW1vcnkgdHJ5aW5nIHRvICIKIAkJICAgICAgICJjYWxsIG5ldGxpbmtfa2VybmVsX2NyZWF0ZVxuIik7Ci0JCXJldCA9IGZhbHNlOwotCX0gZWxzZSBpZiAoeHRfcmVnaXN0ZXJfdGFyZ2V0KCZlYnRfdWxvZ190Z19yZWcpICE9IDApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwl9IGVsc2UgaWYgKChyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmVidF91bG9nX3RnX3JlZykpICE9IDApIHsKIAkJbmV0bGlua19rZXJuZWxfcmVsZWFzZShlYnR1bG9nbmwpOwogCX0KIAotCWlmIChyZXQpCisJaWYgKHJldCA9PSAwKQogCQluZl9sb2dfcmVnaXN0ZXIoTkZQUk9UT19CUklER0UsICZlYnRfdWxvZ19sb2dnZXIpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IGQ5MGU4ZGQuLjU0N2JhZmMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKKysrIGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtMjczLDggKzI3Myw3IEBACiAJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAKIAlpZiAoZXJyKSB7Ci0JCWlmIChuZXdza2IpCi0JCQlrZnJlZV9za2IobmV3c2tiKTsKKwkJa2ZyZWVfc2tiKG5ld3NrYik7CiAJCXJldHVybiBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCmluZGV4IDI2YTM3Y2IuLjc5NmY0NmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKyBiL25ldC9jb3JlL01ha2VmaWxlCkBAIC0xNywzICsxNyw2IEBACiBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gdXNlcl9kbWEubwogb2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgKz0gZmliX3J1bGVzLm8KK29iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gbmV0LXRyYWNlcy5vCitvYmotJChDT05GSUdfTkVUX0RST1BfTU9OSVRPUikgKz0gZHJvcF9tb25pdG9yLm8KKwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggNWUyYWMwYy4uZDBkZTY0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Ja2ZyZWVfc2tiKHNrYik7CisJY29uc3VtZV9za2Ioc2tiKTsKIAlza19tZW1fcmVjbGFpbV9wYXJ0aWFsKHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBkMzkzZmM5Li42M2VjNGJmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTM1LDE0ICsxMzUsNiBAQAogLyogVGhpcyBzaG91bGQgYmUgaW5jcmVhc2VkIGlmIGEgcHJvdG9jb2wgd2l0aCBhIGJpZ2dlciBoZWFkIGlzIGFkZGVkLiAqLwogI2RlZmluZSBHUk9fTUFYX0hFQUQgKE1BWF9IRUFERVIgKyAxMjgpCiAKLWVudW0gewotCUdST19NRVJHRUQsCi0JR1JPX01FUkdFRF9GUkVFLAotCUdST19IRUxELAotCUdST19OT1JNQUwsCi0JR1JPX0RST1AsCi19OwotCiAvKgogICoJVGhlIGxpc3Qgb2YgcGFja2V0IHR5cGVzIHdlIHdpbGwgcmVjZWl2ZSAoYXMgb3Bwb3NlZCB0byBkaXNjYXJkKQogICoJYW5kIHRoZSByb3V0aW5lcyB0byBpbnZva2UuCkBAIC0xNjcyLDIzICsxNjY0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRzdGFtcF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHggPQotCQlza2JfdHgoc2tiKTsKLQlpZiAodW5saWtlbHkoc2h0eC0+c29mdHdhcmUgJiYKLQkJCSFzaHR4LT5pbl9wcm9ncmVzcykpIHsKLQkJc2tiX3RzdGFtcF90eChza2IsIE5VTEwpOwotCX0KLX0KLQogaW50IGRldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSkKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKIAlpbnQgcmM7CiAKLQlwcmVmZXRjaCgmZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdCk7CiAJaWYgKGxpa2VseSghc2tiLT5uZXh0KSkgewogCQlpZiAoIWxpc3RfZW1wdHkoJnB0eXBlX2FsbCkpCiAJCQlkZXZfcXVldWVfeG1pdF9uaXQoc2tiLCBkZXYpOwpAQCAtMTcxNSw4ICsxNjk2LDYgQEAKIAkJICogdGhlIHNrYiBkZXN0cnVjdG9yIGJlZm9yZSB0aGUgY2FsbCBhbmQgcmVzdG9yaW5nIGl0CiAJCSAqIGFmdGVyd2FyZHMsIHRoZW4gZG9pbmcgdGhlIHNrYl9vcnBoYW4oKSBvdXJzZWx2ZXM/CiAJCSAqLwotCQlpZiAobGlrZWx5KCFyYykpCi0JCQl0c3RhbXBfdHgoc2tiKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMTczMiw3ICsxNzExLDYgQEAKIAkJCXNrYi0+bmV4dCA9IG5za2I7CiAJCQlyZXR1cm4gcmM7CiAJCX0KLQkJdHN0YW1wX3R4KHNrYik7CiAJCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYgc2tiLT5uZXh0KSkKIAkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9IHdoaWxlIChza2ItPm5leHQpOwpAQCAtMTc0NSwxNyArMTcyMywxMSBAQAogfQogCiBzdGF0aWMgdTMyIHNrYl90eF9oYXNocm5kOwotc3RhdGljIGludCBza2JfdHhfaGFzaHJuZF9pbml0aWFsaXplZCA9IDA7CiAKLXN0YXRpYyB1MTYgc2tiX3R4X2hhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3UxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXUzMiBoYXNoOwogCi0JaWYgKHVubGlrZWx5KCFza2JfdHhfaGFzaHJuZF9pbml0aWFsaXplZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmc2tiX3R4X2hhc2hybmQsIDQpOwotCQlza2JfdHhfaGFzaHJuZF9pbml0aWFsaXplZCA9IDE7Ci0JfQotCiAJaWYgKHNrYl9yeF9xdWV1ZV9yZWNvcmRlZChza2IpKSB7CiAJCWhhc2ggPSBza2JfZ2V0X3J4X3F1ZXVlKHNrYik7CiAJfSBlbHNlIGlmIChza2ItPnNrICYmIHNrYi0+c2stPnNrX2hhc2gpIHsKQEAgLTE3NjcsNiArMTczOSw3IEBACiAKIAlyZXR1cm4gKHUxNikgKCgodTY0KSBoYXNoICogZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpID4+IDMyKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3R4X2hhc2gpOwogCiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3BpY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTIyNzMsMTIgKzIyNDYsNiBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JLyogRG9uJ3QgcmVjZWl2ZSBwYWNrZXRzIGluIGFuIGV4aXRpbmcgbmV0d29yayBuYW1lc3BhY2UgKi8KLQlpZiAoIW5ldF9hbGl2ZShkZXZfbmV0KHNrYi0+ZGV2KSkpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCWdvdG8gb3V0OwotCX0KLQogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCWlmIChza2ItPnRjX3ZlcmQgJiBUQ19OQ0xTKSB7CiAJCXNrYi0+dGNfdmVyZCA9IENMUl9UQ19OQ0xTKHNrYi0+dGNfdmVyZCk7CkBAIC0yNDk5LDYgKzI0NjYsOSBAQAogewogCXN0cnVjdCBza19idWZmICpwOwogCisJaWYgKG5ldHBvbGxfcnhfb24oc2tiKSkKKwkJcmV0dXJuIEdST19OT1JNQUw7CisKIAlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKIAkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9ICFjb21wYXJlX2V0aGVyX2hlYWRlcigKIAkJCXNrYl9tYWNfaGVhZGVyKHApLCBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CkBAIC0yNjYzLDExICsyNjMzLDkgQEAKIAkJfQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOworCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0gd2hpbGUgKCsrd29yayA8IHF1b3RhICYmIGppZmZpZXMgPT0gc3RhcnRfdGltZSk7CiAKLQluYXBpX2dyb19mbHVzaChuYXBpKTsKLQogCXJldHVybiB3b3JrOwogfQogCkBAIC0yNzQxLDcgKzI3MDksNyBAQAogCXN0cnVjdCBza19idWZmICpza2IsICpuZXh0OwogCiAJbGlzdF9kZWxfaW5pdCgmbmFwaS0+ZGV2X2xpc3QpOwotCWtmcmVlKG5hcGktPnNrYik7CisJa2ZyZWVfc2tiKG5hcGktPnNrYik7CiAKIAlmb3IgKHNrYiA9IG5hcGktPmdyb19saXN0OyBza2I7IHNrYiA9IG5leHQpIHsKIAkJbmV4dCA9IHNrYi0+bmV4dDsKQEAgLTQzNTUsNiArNDMyMywzOSBAQAogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfZml4X2ZlYXR1cmVzKTsKIAorLyogU29tZSBkZXZpY2VzIG5lZWQgdG8gKHJlLSlzZXQgdGhlaXIgbmV0ZGV2X29wcyBpbnNpZGUKKyAqIC0+aW5pdCgpIG9yIHNpbWlsYXIuICBJZiB0aGF0IGhhcHBlbnMsIHdlIGhhdmUgdG8gc2V0dXAKKyAqIHRoZSBjb21wYXQgcG9pbnRlcnMgYWdhaW4uCisgKi8KK3ZvaWQgbmV0ZGV2X3Jlc3luY19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CisKKwlkZXYtPmluaXQgPSBvcHMtPm5kb19pbml0OworCWRldi0+dW5pbml0ID0gb3BzLT5uZG9fdW5pbml0OworCWRldi0+b3BlbiA9IG9wcy0+bmRvX29wZW47CisJZGV2LT5jaGFuZ2VfcnhfZmxhZ3MgPSBvcHMtPm5kb19jaGFuZ2VfcnhfZmxhZ3M7CisJZGV2LT5zZXRfcnhfbW9kZSA9IG9wcy0+bmRvX3NldF9yeF9tb2RlOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gb3BzLT5uZG9fc2V0X211bHRpY2FzdF9saXN0OworCWRldi0+c2V0X21hY19hZGRyZXNzID0gb3BzLT5uZG9fc2V0X21hY19hZGRyZXNzOworCWRldi0+dmFsaWRhdGVfYWRkciA9IG9wcy0+bmRvX3ZhbGlkYXRlX2FkZHI7CisJZGV2LT5kb19pb2N0bCA9IG9wcy0+bmRvX2RvX2lvY3RsOworCWRldi0+c2V0X2NvbmZpZyA9IG9wcy0+bmRvX3NldF9jb25maWc7CisJZGV2LT5jaGFuZ2VfbXR1ID0gb3BzLT5uZG9fY2hhbmdlX210dTsKKwlkZXYtPm5laWdoX3NldHVwID0gb3BzLT5uZG9fbmVpZ2hfc2V0dXA7CisJZGV2LT50eF90aW1lb3V0ID0gb3BzLT5uZG9fdHhfdGltZW91dDsKKwlkZXYtPmdldF9zdGF0cyA9IG9wcy0+bmRvX2dldF9zdGF0czsKKwlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBvcHMtPm5kb192bGFuX3J4X3JlZ2lzdGVyOworCWRldi0+dmxhbl9yeF9hZGRfdmlkID0gb3BzLT5uZG9fdmxhbl9yeF9hZGRfdmlkOworCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IG9wcy0+bmRvX3ZsYW5fcnhfa2lsbF92aWQ7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwlkZXYtPnBvbGxfY29udHJvbGxlciA9IG9wcy0+bmRvX3BvbGxfY29udHJvbGxlcjsKKyNlbmRpZgorI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9yZXN5bmNfb3BzKTsKKwogLyoqCiAgKglyZWdpc3Rlcl9uZXRkZXZpY2UJLSByZWdpc3RlciBhIG5ldHdvcmsgZGV2aWNlCiAgKglAZGV2OiBkZXZpY2UgdG8gcmVnaXN0ZXIKQEAgLTQzOTksMjcgKzQ0MDAsNyBAQAogCSAqIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIGFsbCBuZXR3b3JrIGRldmljZXMgYXJlIGNvbnZlcnRlZC4KIAkgKi8KIAlpZiAoZGV2LT5uZXRkZXZfb3BzKSB7Ci0JCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOwotCi0JCWRldi0+aW5pdCA9IG9wcy0+bmRvX2luaXQ7Ci0JCWRldi0+dW5pbml0ID0gb3BzLT5uZG9fdW5pbml0OwotCQlkZXYtPm9wZW4gPSBvcHMtPm5kb19vcGVuOwotCQlkZXYtPmNoYW5nZV9yeF9mbGFncyA9IG9wcy0+bmRvX2NoYW5nZV9yeF9mbGFnczsKLQkJZGV2LT5zZXRfcnhfbW9kZSA9IG9wcy0+bmRvX3NldF9yeF9tb2RlOwotCQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG9wcy0+bmRvX3NldF9tdWx0aWNhc3RfbGlzdDsKLQkJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBvcHMtPm5kb19zZXRfbWFjX2FkZHJlc3M7Ci0JCWRldi0+dmFsaWRhdGVfYWRkciA9IG9wcy0+bmRvX3ZhbGlkYXRlX2FkZHI7Ci0JCWRldi0+ZG9faW9jdGwgPSBvcHMtPm5kb19kb19pb2N0bDsKLQkJZGV2LT5zZXRfY29uZmlnID0gb3BzLT5uZG9fc2V0X2NvbmZpZzsKLQkJZGV2LT5jaGFuZ2VfbXR1ID0gb3BzLT5uZG9fY2hhbmdlX210dTsKLQkJZGV2LT50eF90aW1lb3V0ID0gb3BzLT5uZG9fdHhfdGltZW91dDsKLQkJZGV2LT5nZXRfc3RhdHMgPSBvcHMtPm5kb19nZXRfc3RhdHM7Ci0JCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IG9wcy0+bmRvX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JCWRldi0+dmxhbl9yeF9hZGRfdmlkID0gb3BzLT5uZG9fdmxhbl9yeF9hZGRfdmlkOwotCQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBvcHMtPm5kb192bGFuX3J4X2tpbGxfdmlkOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JCWRldi0+cG9sbF9jb250cm9sbGVyID0gb3BzLT5uZG9fcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCisJCW5ldGRldl9yZXN5bmNfb3BzKGRldik7CiAJfSBlbHNlIHsKIAkJY2hhciBkcml2ZXJuYW1lWzY0XTsKIAkJcHJfaW5mbygiJXMgKCVzKTogbm90IHVzaW5nIG5ldF9kZXZpY2Vfb3BzIHlldFxuIiwKQEAgLTUyOTEsNiArNTI3MiwxNCBAQAogCiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgaW5pdGlhbGl6ZV9oYXNocm5kKHZvaWQpCit7CisJZ2V0X3JhbmRvbV9ieXRlcygmc2tiX3R4X2hhc2hybmQsIHNpemVvZihza2JfdHhfaGFzaHJuZCkpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsX3N5bmMoaW5pdGlhbGl6ZV9oYXNocm5kKTsKKwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfaW5kZXgpOwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X3JlbW92ZV9wYWNrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMGRjMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogTW9uaXRvcmluZyBjb2RlIGZvciBuZXR3b3JrIGRyb3BwZWQgcGFja2V0IGFsZXJ0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfZHJvcG1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorCisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNkZWZpbmUgVFJBQ0VfT04gMQorI2RlZmluZSBUUkFDRV9PRkYgMAorCitzdGF0aWMgdm9pZCBzZW5kX2RtX2FsZXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKTsKKworCisvKgorICogR2xvYmFscywgb3VyIG5ldGxpbmsgc29ja2V0IHBvaW50ZXIKKyAqIGFuZCB0aGUgd29yayBoYW5kbGUgdGhhdCB3aWxsIHNlbmQgdXAKKyAqIG5ldGxpbmsgYWxlcnRzCisgKi8KK3N0cnVjdCBzb2NrICpkbV9zb2NrOworCitzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhIHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZG1fYWxlcnRfd29yazsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWF0b21pY190IGRtX2hpdF9jb3VudDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzZW5kX3RpbWVyOworfTsKKworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSA9IHsKKwkuaWQgICAgICAgICAgICAgPSBHRU5MX0lEX0dFTkVSQVRFLAorCS5oZHJzaXplICAgICAgICA9IDAsCisJLm5hbWUgICAgICAgICAgID0gIk5FVF9ETSIsCisJLnZlcnNpb24gICAgICAgID0gMSwKKwkubWF4YXR0ciAgICAgICAgPSBORVRfRE1fQ01EX01BWCwKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhLCBkbV9jcHVfZGF0YSk7CisKK3N0YXRpYyBpbnQgZG1faGl0X2xpbWl0ID0gNjQ7CitzdGF0aWMgaW50IGRtX2RlbGF5ID0gMTsKKworCitzdGF0aWMgdm9pZCByZXNldF9wZXJfY3B1X2RhdGEoc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSkKK3sKKwlzaXplX3QgYWw7CisJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgKm1zZzsKKworCWFsID0gc2l6ZW9mKHN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnKTsKKwlhbCArPSBkbV9oaXRfbGltaXQgKiBzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KTsKKwlkYXRhLT5za2IgPSBnZW5sbXNnX25ldyhhbCwgR0ZQX0tFUk5FTCk7CisJZ2VubG1zZ19wdXQoZGF0YS0+c2tiLCAwLCAwLCAmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHksCisJCQkwLCBORVRfRE1fQ01EX0FMRVJUKTsKKwltc2cgPSBfX25sYV9yZXNlcnZlX25vaGRyKGRhdGEtPnNrYiwgc2l6ZW9mKHN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnKSk7CisJbWVtc2V0KG1zZywgMCwgYWwpOworCWF0b21pY19zZXQoJmRhdGEtPmRtX2hpdF9jb3VudCwgZG1faGl0X2xpbWl0KTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9kbV9hbGVydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAmX19nZXRfY3B1X3ZhcihkbV9jcHVfZGF0YSk7CisKKwkvKgorCSAqIEdyYWIgdGhlIHNrYiB3ZSdyZSBhYm91dCB0byBzZW5kCisJICovCisJc2tiID0gZGF0YS0+c2tiOworCisJLyoKKwkgKiBSZXBsYWNlIGl0IHdpdGggYSBuZXcgb25lCisJICovCisJcmVzZXRfcGVyX2NwdV9kYXRhKGRhdGEpOworCisJLyoKKwkgKiBTaGlwIGl0IQorCSAqLworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgTkVUX0RNX0dSUF9BTEVSVCwgR0ZQX0tFUk5FTCk7CisKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHRpbWVyIGZ1bmN0aW9uIHRvIGRlbGF5IHRoZSBzZW5kaW5nIG9mIGFuIGFsZXJ0CisgKiBpbiB0aGUgZXZlbnQgdGhhdCBtb3JlIGRyb3BzIHdpbGwgYXJyaXZlIGR1cmluZyB0aGUKKyAqIGh5c3RlcmVzaXMgcGVyaW9kLiAgTm90ZSB0aGF0IGl0IG9wZXJhdGVzIHVuZGVyIHRoZSB0aW1lciBpbnRlcnJ1cHQKKyAqIHNvIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGhlcmUKKyAqLworc3RhdGljIHZvaWQgc2NoZWRfc2VuZF93b3JrKHVuc2lnbmVkIGxvbmcgdW51c2VkKQoreworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAgJl9fZ2V0X2NwdV92YXIoZG1fY3B1X2RhdGEpOworCisJc2NoZWR1bGVfd29yaygmZGF0YS0+ZG1fYWxlcnRfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX2tmcmVlX3NrYl9oaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pCit7CisJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgKm1zZzsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlpbnQgaTsKKwlzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhID0gJl9fZ2V0X2NwdV92YXIoZG1fY3B1X2RhdGEpOworCisKKwlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZkYXRhLT5kbV9oaXRfY291bnQsIC0xLCAwKSkgeworCQkvKgorCQkgKiB3ZSdyZSBhbHJlYWR5IGF0IHplcm8sIGRpc2NhcmQgdGhpcyBoaXQKKwkJICovCisJCWdvdG8gb3V0OworCX0KKworCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilkYXRhLT5za2ItPmRhdGE7CisJbXNnID0gZ2VubG1zZ19kYXRhKG5sbXNnX2RhdGEobmxoKSk7CisJZm9yIChpID0gMDsgaSA8IG1zZy0+ZW50cmllczsgaSsrKSB7CisJCWlmICghbWVtY21wKCZsb2NhdGlvbiwgbXNnLT5wb2ludHNbaV0ucGMsIHNpemVvZih2b2lkICopKSkgeworCQkJbXNnLT5wb2ludHNbaV0uY291bnQrKzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBlbnRyeQorCSAqLworCV9fbmxhX3Jlc2VydmVfbm9oZHIoZGF0YS0+c2tiLCBzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KSk7CisJbWVtY3B5KG1zZy0+cG9pbnRzW21zZy0+ZW50cmllc10ucGMsICZsb2NhdGlvbiwgc2l6ZW9mKHZvaWQgKikpOworCW1zZy0+cG9pbnRzW21zZy0+ZW50cmllc10uY291bnQgPSAxOworCW1zZy0+ZW50cmllcysrOworCisJaWYgKCF0aW1lcl9wZW5kaW5nKCZkYXRhLT5zZW5kX3RpbWVyKSkgeworCQlkYXRhLT5zZW5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgZG1fZGVsYXkgKiBIWjsKKwkJYWRkX3RpbWVyX29uKCZkYXRhLT5zZW5kX3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIGludCBzZXRfYWxsX21vbml0b3JfdHJhY2VzKGludCBzdGF0ZSkKK3sKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVFJBQ0VfT046CisJCXJjIHw9IHJlZ2lzdGVyX3RyYWNlX2tmcmVlX3NrYih0cmFjZV9rZnJlZV9za2JfaGl0KTsKKwkJYnJlYWs7CisJY2FzZSBUUkFDRV9PRkY6CisJCXJjIHw9IHVucmVnaXN0ZXJfdHJhY2Vfa2ZyZWVfc2tiKHRyYWNlX2tmcmVlX3NrYl9oaXQpOworCisJCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYyA9IDE7CisJCWJyZWFrOworCX0KKworCWlmIChyYykKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBuZXRfZG1fY21kX2NvbmZpZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IG5ldF9kbV9jbWRfdHJhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3dpdGNoIChpbmZvLT5nZW5saGRyLT5jbWQpIHsKKwljYXNlIE5FVF9ETV9DTURfU1RBUlQ6CisJCXJldHVybiBzZXRfYWxsX21vbml0b3JfdHJhY2VzKFRSQUNFX09OKTsKKwkJYnJlYWs7CisJY2FzZSBORVRfRE1fQ01EX1NUT1A6CisJCXJldHVybiBzZXRfYWxsX21vbml0b3JfdHJhY2VzKFRSQUNFX09GRik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKworc3RhdGljIHN0cnVjdCBnZW5sX29wcyBkcm9wbW9uX29wc1tdID0geworCXsKKwkJLmNtZCA9IE5FVF9ETV9DTURfQ09ORklHLAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfY29uZmlnLAorCX0sCisJeworCQkuY21kID0gTkVUX0RNX0NNRF9TVEFSVCwKKwkJLmRvaXQgPSBuZXRfZG1fY21kX3RyYWNlLAorCX0sCisJeworCQkuY21kID0gTkVUX0RNX0NNRF9TVE9QLAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfdHJhY2UsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0X2Ryb3BfbW9uaXRvcih2b2lkKQoreworCWludCBjcHU7CisJaW50IHJjLCBpLCByZXQ7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YTsKKwlwcmludGsoS0VSTl9JTkZPICJJbml0YWxpemluZyBuZXR3b3JrIGRyb3AgbW9uaXRvciBzZXJ2aWNlXG4iKTsKKworCWlmIChzaXplb2Yodm9pZCAqKSA+IDgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RvcmUgcHJvZ3JhbSBjb3VudGVycyBvbiB0aGlzIGFyY2gsIERyb3AgbW9uaXRvciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJm5ldF9kcm9wX21vbml0b3JfZmFtaWx5KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgY3JlYXRlIGRyb3AgbW9uaXRvciBuZXRsaW5rIGZhbWlseVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJjID0gLUVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRyb3Btb25fb3BzKTsgaSsrKSB7CisJCXJldCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSwKKwkJCQkJJmRyb3Btb25fb3BzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG9wZXJhdGlvbiAlZFxuIiwKKwkJCQlkcm9wbW9uX29wc1tpXS5jbWQpOworCQkJZ290byBvdXRfdW5yZWc7CisJCX0KKwl9CisKKwlyYyA9IDA7CisKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJZGF0YSA9ICZwZXJfY3B1KGRtX2NwdV9kYXRhLCBjcHUpOworCQlyZXNldF9wZXJfY3B1X2RhdGEoZGF0YSk7CisJCUlOSVRfV09SSygmZGF0YS0+ZG1fYWxlcnRfd29yaywgc2VuZF9kbV9hbGVydCk7CisJCWluaXRfdGltZXIoJmRhdGEtPnNlbmRfdGltZXIpOworCQlkYXRhLT5zZW5kX3RpbWVyLmRhdGEgPSBjcHU7CisJCWRhdGEtPnNlbmRfdGltZXIuZnVuY3Rpb24gPSBzY2hlZF9zZW5kX3dvcms7CisJfQorCWdvdG8gb3V0OworCitvdXRfdW5yZWc6CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHkpOworb3V0OgorCXJldHVybiByYzsKK30KKworbGF0ZV9pbml0Y2FsbChpbml0X25ldF9kcm9wX21vbml0b3IpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDk0NzcxMGEuLjI0NGNhNTYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTIwOSwzNCArMjA5LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3N0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGNtZDsKIAotCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4aGFzaCkKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnNldF9yeG5mYykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJhZGRyLCBzaXplb2YoY21kKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9yeGhhc2goZGV2LCAmY21kKTsKKwlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4bmZjKGRldiwgJmNtZCk7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGluZm87CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCWludCByZXQ7CisJdm9pZCAqcnVsZV9idWYgPSBOVUxMOwogCi0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhoYXNoKQorCWlmICghb3BzLT5nZXRfcnhuZmMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgdXNlcmFkZHIsIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4aGFzaChkZXYsICZpbmZvKTsKKwlpZiAoaW5mby5jbWQgPT0gRVRIVE9PTF9HUlhDTFNSTEFMTCkgeworCQlpZiAoaW5mby5ydWxlX2NudCA+IDApIHsKKwkJCXJ1bGVfYnVmID0ga21hbGxvYyhpbmZvLnJ1bGVfY250ICogc2l6ZW9mKHUzMiksCisJCQkJCSAgIEdGUF9VU0VSKTsKKwkJCWlmICghcnVsZV9idWYpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAKKwlyZXQgPSBvcHMtPmdldF9yeG5mYyhkZXYsICZpbmZvLCBydWxlX2J1Zik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX291dDsKKworCXJldCA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOworCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAocnVsZV9idWYpIHsKKwkJdXNlcmFkZHIgKz0gb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfcnhuZmMsIHJ1bGVfbG9jcyk7CisJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIHJ1bGVfYnVmLAorCQkJCSBpbmZvLnJ1bGVfY250ICogc2l6ZW9mKHUzMikpKQorCQkJZ290byBlcnJfb3V0OworCX0KKwlyZXQgPSAwOworCitlcnJfb3V0OgorCWlmIChydWxlX2J1ZikKKwkJa2ZyZWUocnVsZV9idWYpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBldGh0b29sX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKQEAgLTkwMSw2ICs5MjksMTAgQEAKIAljYXNlIEVUSFRPT0xfR0ZMQUdTOgogCWNhc2UgRVRIVE9PTF9HUEZMQUdTOgogCWNhc2UgRVRIVE9PTF9HUlhGSDoKKwljYXNlIEVUSFRPT0xfR1JYUklOR1M6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSVUxFOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQpAQCAtMTA1MiwxMCArMTA4NCwxNiBAQAogCQkJCSAgICAgICBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcHJpdl9mbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9HUlhGSDoKLQkJcmMgPSBldGh0b29sX2dldF9yeGhhc2goZGV2LCB1c2VyYWRkcik7CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRToKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCXJjID0gZXRodG9vbF9nZXRfcnhuZmMoZGV2LCB1c2VyYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9TUlhGSDoKLQkJcmMgPSBldGh0b29sX3NldF9yeGhhc2goZGV2LCB1c2VyYWRkcik7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMREVMOgorCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmMgPSBldGh0b29sX3NldF9yeG5mYyhkZXYsIHVzZXJhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX0dHUk86CiAJCXJjID0gZXRodG9vbF9nZXRfZ3JvKGRldiwgdXNlcmFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmliX3J1bGVzLmMgYi9uZXQvY29yZS9maWJfcnVsZXMuYwppbmRleCAzMmIzYTAxLi45ODY5MWUxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuYworKysgYi9uZXQvY29yZS9maWJfcnVsZXMuYwpAQCAtNTg4LDcgKzU4OCw4IEBACiAJCWdvdG8gZXJyb3V0OwogCX0KIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIG9wcy0+bmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtPm5sZ3JvdXAsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBvcHMtPm5sZ3JvdXAsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDI3OGExNDIuLmExY2JjZTcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC04NzEsOCArODcxLDcgQEAKIAkJd3JpdGVfdW5sb2NrKCZuZWlnaC0+bG9jayk7CiAJCW5laWdoLT5vcHMtPnNvbGljaXQobmVpZ2gsIHNrYik7CiAJCWF0b21pY19pbmMoJm5laWdoLT5wcm9iZXMpOwotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCX0gZWxzZSB7CiBvdXQ6CiAJCXdyaXRlX3VubG9jaygmbmVpZ2gtPmxvY2spOwpAQCAtOTA4LDggKzkwNyw3IEBACiAJCQluZWlnaC0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAotCQkJaWYgKHNrYikKLQkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IGVsc2UgaWYgKG5laWdoLT5udWRfc3RhdGUgJiBOVURfU1RBTEUpIHsKQEAgLTE2NTYsNyArMTY1NCwxMSBAQAogCQkJCWZsYWdzICY9IH5ORUlHSF9VUERBVEVfRl9PVkVSUklERTsKIAkJfQogCi0JCWVyciA9IG5laWdoX3VwZGF0ZShuZWlnaCwgbGxhZGRyLCBuZG0tPm5kbV9zdGF0ZSwgZmxhZ3MpOworCQlpZiAobmRtLT5uZG1fZmxhZ3MgJiBOVEZfVVNFKSB7CisJCQluZWlnaF9ldmVudF9zZW5kKG5laWdoLCBOVUxMKTsKKwkJCWVyciA9IDA7CisJCX0gZWxzZQorCQkJZXJyID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBsbGFkZHIsIG5kbS0+bmRtX3N0YXRlLCBmbGFncyk7CiAJCW5laWdoX3JlbGVhc2UobmVpZ2gpOwogCQlnb3RvIG91dF9kZXZfcHV0OwogCX0KQEAgLTI1MzQsNyArMjUzNiw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05FSUdILCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTkVJR0gsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDZhYzI5YTQuLjJkYTU5YTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC03Nyw3ICs3Nyw5IEBACiAJaWYgKGVuZHAgPT0gYnVmKQogCQlnb3RvIGVycjsKIAotCXJ0bmxfbG9jaygpOworCWlmICghcnRubF90cnlsb2NrKCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKIAlpZiAoZGV2X2lzYWxpdmUobmV0KSkgewogCQlpZiAoKHJldCA9ICgqc2V0KShuZXQsIG5ldykpID09IDApCiAJCQlyZXQgPSBsZW47CkBAIC00OTYsNyArNDk4LDcgQEAKIAlkZXYtPmdyb3VwcyA9IGdyb3VwczsKIAogCUJVSUxEX0JVR19PTihCVVNfSURfU0laRSA8IElGTkFNU0laKTsKLQlkZXZfc2V0X25hbWUoZGV2LCBuZXQtPm5hbWUpOworCWRldl9zZXRfbmFtZShkZXYsICIlcyIsIG5ldC0+bmFtZSk7CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKIAkqZ3JvdXBzKysgPSAmbmV0c3RhdF9ncm91cDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC10cmFjZXMuYyBiL25ldC9jb3JlL25ldC10cmFjZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZiNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvbmV0LXRyYWNlcy5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBjb25zb2xpZGF0ZXMgdHJhY2UgcG9pbnQgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmVpbCBIb3JtYW4gPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldHBvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfZHJvcG1vbi5oPgorI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworCitERUZJTkVfVFJBQ0Uoa2ZyZWVfc2tiKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoa2ZyZWVfc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCA1NTE1MWZhLi5lM2JlYmQzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC0zMiwyNCArMzIsMTQgQEAKIHsKIAkvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldF9tdXRleCBoZWxkICovCiAJc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zICpvcHM7Ci0JaW50IGVycm9yOwotCXN0cnVjdCBuZXRfZ2VuZXJpYyAqbmc7CisJaW50IGVycm9yID0gMDsKIAogCWF0b21pY19zZXQoJm5ldC0+Y291bnQsIDEpOworCiAjaWZkZWYgTkVUTlNfUkVGQ05UX0RFQlVHCiAJYXRvbWljX3NldCgmbmV0LT51c2VfY291bnQsIDApOwogI2VuZGlmCiAKLQllcnJvciA9IC1FTk9NRU07Ci0JbmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X2dlbmVyaWMpICsKLQkJCUlOSVRJQUxfTkVUX0dFTl9QVFJTICogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOwotCWlmIChuZyA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCW5nLT5sZW4gPSBJTklUSUFMX05FVF9HRU5fUFRSUzsKLQlyY3VfYXNzaWduX3BvaW50ZXIobmV0LT5nZW4sIG5nKTsKLQotCWVycm9yID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wcywgJnBlcm5ldF9saXN0LCBsaXN0KSB7CiAJCWlmIChvcHMtPmluaXQpIHsKIAkJCWVycm9yID0gb3BzLT5pbml0KG5ldCk7CkBAIC03MCwyNCArNjAsNTAgQEAKIAl9CiAKIAlyY3VfYmFycmllcigpOwotCWtmcmVlKG5nKTsKIAlnb3RvIG91dDsKIH0KIAorc3RhdGljIHN0cnVjdCBuZXRfZ2VuZXJpYyAqbmV0X2FsbG9jX2dlbmVyaWModm9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nOworCXNpemVfdCBnZW5lcmljX3NpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9nZW5lcmljKSArCisJCUlOSVRJQUxfTkVUX0dFTl9QVFJTICogc2l6ZW9mKHZvaWQgKik7CisKKwluZyA9IGt6YWxsb2MoZ2VuZXJpY19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAobmcpCisJCW5nLT5sZW4gPSBJTklUSUFMX05FVF9HRU5fUFRSUzsKKworCXJldHVybiBuZzsKK30KKwogI2lmZGVmIENPTkZJR19ORVRfTlMKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbmV0X2NhY2hlcDsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0bnNfd3E7CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0ICpuZXRfYWxsb2Modm9pZCkKIHsKLQlyZXR1cm4ga21lbV9jYWNoZV96YWxsb2MobmV0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IG5ldCAqbmV0ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nOworCisJbmcgPSBuZXRfYWxsb2NfZ2VuZXJpYygpOworCWlmICghbmcpCisJCWdvdG8gb3V0OworCisJbmV0ID0ga21lbV9jYWNoZV96YWxsb2MobmV0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIobmV0LT5nZW4sIG5nKTsKK291dDoKKwlyZXR1cm4gbmV0OworCitvdXRfZnJlZToKKwlrZnJlZShuZyk7CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldF9mcmVlKHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpZiAoIW5ldCkKLQkJcmV0dXJuOwotCiAjaWZkZWYgTkVUTlNfUkVGQ05UX0RFQlVHCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZuZXQtPnVzZV9jb3VudCkgIT0gMCkpIHsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIm5ldHdvcmsgbmFtZXNwYWNlIG5vdCBmcmVlISBVc2FnZTogJWRcbiIsCkBAIC0xMTIsMjcgKzEyOCwyOCBAQAogCWVyciA9IC1FTk9NRU07CiAJbmV3X25ldCA9IG5ldF9hbGxvYygpOwogCWlmICghbmV3X25ldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2VycjsKIAogCW11dGV4X2xvY2soJm5ldF9tdXRleCk7CiAJZXJyID0gc2V0dXBfbmV0KG5ld19uZXQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXJ0bmxfbG9jaygpOwotCWxpc3RfYWRkX3RhaWwoJm5ld19uZXQtPmxpc3QsICZuZXRfbmFtZXNwYWNlX2xpc3QpOwotCXJ0bmxfdW5sb2NrKCk7Ci0KLQotb3V0X3VubG9jazoKKwlpZiAoIWVycikgeworCQlydG5sX2xvY2soKTsKKwkJbGlzdF9hZGRfdGFpbCgmbmV3X25ldC0+bGlzdCwgJm5ldF9uYW1lc3BhY2VfbGlzdCk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQogCW11dGV4X3VubG9jaygmbmV0X211dGV4KTsKKworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWU7CiBvdXQ6CiAJcHV0X25ldChvbGRfbmV0KTsKLQlpZiAoZXJyKSB7Ci0JCW5ldF9mcmVlKG5ld19uZXQpOwotCQluZXdfbmV0ID0gRVJSX1BUUihlcnIpOwotCX0KIAlyZXR1cm4gbmV3X25ldDsKKworb3V0X2ZyZWU6CisJbmV0X2ZyZWUobmV3X25ldCk7CitvdXRfZXJyOgorCW5ld19uZXQgPSBFUlJfUFRSKGVycik7CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFudXBfbmV0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE0MCw5ICsxNTcsNiBAQAogCXN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqb3BzOwogCXN0cnVjdCBuZXQgKm5ldDsKIAotCS8qIEJlIHZlcnkgY2VydGFpbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMgd2lsbCBub3QgZmluZCB1cyAqLwotCXJjdV9iYXJyaWVyKCk7Ci0KIAluZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgd29yayk7CiAKIAltdXRleF9sb2NrKCZuZXRfbXV0ZXgpOwpAQCAtMTg4LDYgKzIwMiw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpCiB7CisJc3RydWN0IG5ldF9nZW5lcmljICpuZzsKIAlpbnQgZXJyOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAibmV0X25hbWVzcGFjZTogJXpkIGJ5dGVzXG4iLCBzaXplb2Yoc3RydWN0IG5ldCkpOwpAQCAtMjAyLDYgKzIxNywxMiBAQAogCQlwYW5pYygiQ291bGQgbm90IGNyZWF0ZSBuZXRucyB3b3JrcSIpOwogI2VuZGlmCiAKKwluZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7CisJaWYgKCFuZykKKwkJcGFuaWMoIkNvdWxkIG5vdCBhbGxvY2F0ZSBnZW5lcmljIG5ldG5zIik7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoaW5pdF9uZXQuZ2VuLCBuZyk7CisKIAltdXRleF9sb2NrKCZuZXRfbXV0ZXgpOwogCWVyciA9IHNldHVwX25ldCgmaW5pdF9uZXQpOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDY1NDk4NDguLjMyZDQxOWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0zMjc1LDggKzMyNzUsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkgewogCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCWlmIChwa3RfZGV2LT5za2IpCi0JCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAKIAkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAl9CkBAIC0zMzAzLDggKzMzMDIsNyBAQAogCQlpZiAoIWN1ci0+cmVtb3ZhbF9tYXJrKQogCQkJY29udGludWU7CiAKLQkJaWYgKGN1ci0+c2tiKQotCQkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKKwkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKIAkJY3VyLT5za2IgPSBOVUxMOwogCiAJCXBrdGdlbl9yZW1vdmVfZGV2aWNlKHQsIGN1cik7CkBAIC0zMzI4LDggKzMzMjYsNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShxLCBuLCAmdC0+aWZfbGlzdCkgewogCQljdXIgPSBsaXN0X2VudHJ5KHEsIHN0cnVjdCBwa3RnZW5fZGV2LCBsaXN0KTsKIAotCQlpZiAoY3VyLT5za2IpCi0JCQlrZnJlZV9za2IoY3VyLT5za2IpOworCQlrZnJlZV9za2IoY3VyLT5za2IpOwogCQljdXItPnNrYiA9IE5VTEw7CiAKIAkJcGt0Z2VuX3JlbW92ZV9kZXZpY2UodCwgY3VyKTsKQEAgLTMzOTMsOCArMzM5MCw3IEBACiAKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKG9kZXYpKSB7CiAJCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAJCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM0MTUsOCArMzQxMSw3IEBACiAJCWlmICgoKytwa3RfZGV2LT5jbG9uZV9jb3VudCA+PSBwa3RfZGV2LT5jbG9uZV9za2IpCiAJCSAgICB8fCAoIXBrdF9kZXYtPnNrYikpIHsKIAkJCS8qIGJ1aWxkIGEgbmV3IHBrdCAqLwotCQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCiAJCQlwa3RfZGV2LT5za2IgPSBmaWxsX3BhY2tldChvZGV2LCBwa3RfZGV2KTsKIAkJCWlmIChwa3RfZGV2LT5za2IgPT0gTlVMTCkgewpAQCAtMzQ5OCw4ICszNDkzLDcgQEAKIAogCQkvKiBEb25lIHdpdGggdGhpcyAqLwogCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCWlmIChwa3RfZGV2LT5za2IpCi0JCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAJCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJfQogb3V0OjsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNzkwZGQyMC4uZDc4MDMwZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTQ1NSw4ICs0NTUsOCBAQAogCXJldHVybiBubG1zZ191bmljYXN0KHJ0bmwsIHNrYiwgcGlkKTsKIH0KIAotaW50IHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLAotCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpCit2b2lkIHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLAorCQkgc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKQogewogCXN0cnVjdCBzb2NrICpydG5sID0gbmV0LT5ydG5sOwogCWludCByZXBvcnQgPSAwOwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJaWYgKG5saCkKIAkJcmVwb3J0ID0gbmxtc2dfcmVwb3J0KG5saCk7CiAKLQlyZXR1cm4gbmxtc2dfbm90aWZ5KHJ0bmwsIHNrYiwgcGlkLCBncm91cCwgcmVwb3J0LCBmbGFncyk7CisJbmxtc2dfbm90aWZ5KHJ0bmwsIHNrYiwgcGlkLCBncm91cCwgcmVwb3J0LCBmbGFncyk7CiB9CiAKIHZvaWQgcnRubF9zZXRfc2tfZXJyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpCkBAIC0xMjQ2LDcgKzEyNDYsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9MSU5LLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBlNWE4MzUxLi42YWNiZjllIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNjUsNiArNjUsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CiAKICNpbmNsdWRlICJrbWFwX3NrYi5oIgogCkBAIC0xNDYsMTQgKzE0Nyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNrYl91bmRlcl9wYW5pYyk7CiAKLXZvaWQgc2tiX3RydWVzaXplX2J1ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCVdBUk4obmV0X3JhdGVsaW1pdCgpLCBLRVJOX0VSUiAiU0tCIEJVRzogSW52YWxpZCB0cnVlc2l6ZSAoJXUpICIKLQkgICAgICAgImxlbj0ldSwgc2l6ZW9mKHNrX2J1ZmYpPSVaZFxuIiwKLQkgICAgICAgc2tiLT50cnVlc2l6ZSwgc2tiLT5sZW4sIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwotfQotRVhQT1JUX1NZTUJPTChza2JfdHJ1ZXNpemVfYnVnKTsKLQogLyogCUFsbG9jYXRlIGEgbmV3IHNrYnVmZi4gV2UgZG8gdGhpcyBvdXJzZWx2ZXMgc28gd2UgY2FuIGZpbGwgaW4gYSBmZXcKICAqCSdwcml2YXRlJyBmaWVsZHMgYW5kIGFsc28gZG8gbWVtb3J5IHN0YXRpc3RpY3MgdG8gZmluZCBhbGwgdGhlCiAgKglbQkVFUF0gbGVha3MuCkBAIC00NTAsMTEgKzQ0MywzMiBAQAogCQlzbXBfcm1iKCk7CiAJZWxzZSBpZiAobGlrZWx5KCFhdG9taWNfZGVjX2FuZF90ZXN0KCZza2ItPnVzZXJzKSkpCiAJCXJldHVybjsKKwl0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCV9fa2ZyZWVfc2tiKHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlX3NrYik7CiAKIC8qKgorICoJY29uc3VtZV9za2IgLSBmcmVlIGFuIHNrYnVmZgorICoJQHNrYjogYnVmZmVyIHRvIGZyZWUKKyAqCisgKglEcm9wIGEgcmVmIHRvIHRoZSBidWZmZXIgYW5kIGZyZWUgaXQgaWYgdGhlIHVzYWdlIGNvdW50IGhhcyBoaXQgemVybworICoJRnVuY3Rpb25zIGlkZW50aWNhbGx5IHRvIGtmcmVlX3NrYiwgYnV0IGtmcmVlX3NrYiBhc3N1bWVzIHRoYXQgdGhlIGZyYW1lCisgKglpcyBiZWluZyBkcm9wcGVkIGFmdGVyIGEgZmFpbHVyZSBhbmQgbm90ZXMgdGhhdAorICovCit2b2lkIGNvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm47CisJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmc2tiLT51c2VycykgPT0gMSkpCisJCXNtcF9ybWIoKTsKKwllbHNlIGlmIChsaWtlbHkoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKSkKKwkJcmV0dXJuOworCV9fa2ZyZWVfc2tiKHNrYik7Cit9CitFWFBPUlRfU1lNQk9MKGNvbnN1bWVfc2tiKTsKKworLyoqCiAgKglza2JfcmVjeWNsZV9jaGVjayAtIGNoZWNrIGlmIHNrYiBjYW4gYmUgcmV1c2VkIGZvciByZWNlaXZlCiAgKglAc2tiOiBidWZmZXIKICAqCUBza2Jfc2l6ZTogbWluaW11bSByZWNlaXZlIGJ1ZmZlciBzaXplCkBAIC0xMjE2LDggKzEyMzAsNyBAQAogCQkJCQlpbnNwID0gbGlzdDsKIAkJCQl9CiAJCQkJaWYgKCFwc2tiX3B1bGwobGlzdCwgZWF0KSkgewotCQkJCQlpZiAoY2xvbmUpCi0JCQkJCQlrZnJlZV9za2IoY2xvbmUpOworCQkJCQlrZnJlZV9za2IoY2xvbmUpOwogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggNDA4ODdlNy4uMDYyMDA0NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICJza19sb2NrLUFGX0RFQ25ldCIsICJza19sb2NrLUFGX05FVEJFVUkiICAsICJza19sb2NrLUFGX1NFQ1VSSVRZIiAsCiAgICJza19sb2NrLUFGX0tFWSIgICAsICJza19sb2NrLUFGX05FVExJTksiICAsICJza19sb2NrLUFGX1BBQ0tFVCIgICAsCiAgICJza19sb2NrLUFGX0FTSCIgICAsICJza19sb2NrLUFGX0VDT05FVCIgICAsICJza19sb2NrLUFGX0FUTVNWQyIgICAsCi0gICJza19sb2NrLTIxIiAgICAgICAsICJza19sb2NrLUFGX1NOQSIgICAgICAsICJza19sb2NrLUFGX0lSREEiICAgICAsCisgICJza19sb2NrLUFGX1JEUyIgICAsICJza19sb2NrLUFGX1NOQSIgICAgICAsICJza19sb2NrLUFGX0lSREEiICAgICAsCiAgICJza19sb2NrLUFGX1BQUE9YIiAsICJza19sb2NrLUFGX1dBTlBJUEUiICAsICJza19sb2NrLUFGX0xMQyIgICAgICAsCiAgICJza19sb2NrLTI3IiAgICAgICAsICJza19sb2NrLTI4IiAgICAgICAgICAsICJza19sb2NrLUFGX0NBTiIgICAgICAsCiAgICJza19sb2NrLUFGX1RJUEMiICAsICJza19sb2NrLUFGX0JMVUVUT09USCIsICJza19sb2NrLUlVQ1YiICAgICAgICAsCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgInNsb2NrLUFGX0RFQ25ldCIsICJzbG9jay1BRl9ORVRCRVVJIiAgLCAic2xvY2stQUZfU0VDVVJJVFkiICwKICAgInNsb2NrLUFGX0tFWSIgICAsICJzbG9jay1BRl9ORVRMSU5LIiAgLCAic2xvY2stQUZfUEFDS0VUIiAgICwKICAgInNsb2NrLUFGX0FTSCIgICAsICJzbG9jay1BRl9FQ09ORVQiICAgLCAic2xvY2stQUZfQVRNU1ZDIiAgICwKLSAgInNsb2NrLTIxIiAgICAgICAsICJzbG9jay1BRl9TTkEiICAgICAgLCAic2xvY2stQUZfSVJEQSIgICAgICwKKyAgInNsb2NrLUFGX1JEUyIgICAsICJzbG9jay1BRl9TTkEiICAgICAgLCAic2xvY2stQUZfSVJEQSIgICAgICwKICAgInNsb2NrLUFGX1BQUE9YIiAsICJzbG9jay1BRl9XQU5QSVBFIiAgLCAic2xvY2stQUZfTExDIiAgICAgICwKICAgInNsb2NrLTI3IiAgICAgICAsICJzbG9jay0yOCIgICAgICAgICAgLCAic2xvY2stQUZfQ0FOIiAgICAgICwKICAgInNsb2NrLUFGX1RJUEMiICAsICJzbG9jay1BRl9CTFVFVE9PVEgiLCAic2xvY2stQUZfSVVDViIgICAgICwKQEAgLTE4MCw3ICsxODAsNyBAQAogICAiY2xvY2stQUZfREVDbmV0IiwgImNsb2NrLUFGX05FVEJFVUkiICAsICJjbG9jay1BRl9TRUNVUklUWSIgLAogICAiY2xvY2stQUZfS0VZIiAgICwgImNsb2NrLUFGX05FVExJTksiICAsICJjbG9jay1BRl9QQUNLRVQiICAgLAogICAiY2xvY2stQUZfQVNIIiAgICwgImNsb2NrLUFGX0VDT05FVCIgICAsICJjbG9jay1BRl9BVE1TVkMiICAgLAotICAiY2xvY2stMjEiICAgICAgICwgImNsb2NrLUFGX1NOQSIgICAgICAsICJjbG9jay1BRl9JUkRBIiAgICAgLAorICAiY2xvY2stQUZfUkRTIiAgICwgImNsb2NrLUFGX1NOQSIgICAgICAsICJjbG9jay1BRl9JUkRBIiAgICAgLAogICAiY2xvY2stQUZfUFBQT1giICwgImNsb2NrLUFGX1dBTlBJUEUiICAsICJjbG9jay1BRl9MTEMiICAgICAgLAogICAiY2xvY2stMjciICAgICAgICwgImNsb2NrLTI4IiAgICAgICAgICAsICJjbG9jay1BRl9DQU4iICAgICAgLAogICAiY2xvY2stQUZfVElQQyIgICwgImNsb2NrLUFGX0JMVUVUT09USCIsICJjbG9jay1BRl9JVUNWIiAgICAgLApAQCAtNzI1LDcgKzcyNSw3IEBACiAJaWYgKGxlbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jdi52YWwgPSAwOworCW1lbXNldCgmdiwgMCwgc2l6ZW9mKHYpKTsKIAogCXN3aXRjaChvcHRuYW1lKSB7CiAJY2FzZSBTT19ERUJVRzoKQEAgLTExODUsNyArMTE4NSw2IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAotCXNrYl90cnVlc2l6ZV9jaGVjayhza2IpOwogCWF0b21pY19zdWIoc2tiLT50cnVlc2l6ZSwgJnNrLT5za19ybWVtX2FsbG9jKTsKIAlza19tZW1fdW5jaGFyZ2Uoc2tiLT5zaywgc2tiLT50cnVlc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IDgzZDMzOTguLjdkYjFkZTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS91dGlscy5jIGIvbmV0L2NvcmUvdXRpbHMuYwppbmRleCA3MmUwZWJlLi44MzIyMWFlIDEwMDY0NAotLS0gYS9uZXQvY29yZS91dGlscy5jCisrKyBiL25ldC9jb3JlL3V0aWxzLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmggYi9uZXQvZGNjcC9hY2t2ZWMuaAppbmRleCA0NWY5NWU1Li43ZWE1NTdiIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuaAorKysgYi9uZXQvZGNjcC9hY2t2ZWMuaApAQCAtMjAsNiArMjAsOSBAQAogLyogV2UgY2FuIHNwcmVhZCBhbiBhY2sgdmVjdG9yIGFjcm9zcyBtdWx0aXBsZSBvcHRpb25zICovCiAjZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19MRU4gKERDQ1BfU0lOR0xFX09QVF9NQVhMRU4gKiAyKQogCisvKiBFc3RpbWF0ZWQgbWluaW11bSBhdmVyYWdlIEFjayBWZWN0b3IgbGVuZ3RoIC0gdXNlZCBmb3IgdXBkYXRpbmcgTVBTICovCisjZGVmaW5lIERDQ1BBVl9NSU5fT1BUTEVOCTE2CisKICNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQJMAogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9FQ05fTUFSS0VECSgxIDw8IDYpCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRAkoMyA8PCA2KQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGNjcC5oIGIvbmV0L2RjY3AvZGNjcC5oCmluZGV4IDA4YTU2OWYuLmQ2YmM0NzMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2RjY3AuaAorKysgYi9uZXQvZGNjcC9kY2NwLmgKQEAgLTYzLDExICs2MywxNCBAQAogICogICAgLSBEQ0NQLVJlc2V0ICAgIHdpdGggQUNLIFN1YmhlYWRlciBhbmQgNCBieXRlcyBvZiBSZXNldCBDb2RlIGZpZWxkcwogICogIEhlbmNlIGEgc2FmZSB1cHBlciBib3VuZCBmb3IgdGhlIG1heGltdW0gb3B0aW9uIGxlbmd0aCBpcyAxMDIwLTI4ID0gOTkyCiAgKi8KLSNkZWZpbmUgTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSICgyNTUgKiBzaXplb2YoaW50KSkKKyNkZWZpbmUgTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSICgyNTUgKiBzaXplb2YodWludDMyX3QpKQogI2RlZmluZSBEQ0NQX01BWF9QQUNLRVRfSERSIDI4CiAjZGVmaW5lIERDQ1BfTUFYX09QVF9MRU4gKE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiAtIERDQ1BfTUFYX1BBQ0tFVF9IRFIpCiAjZGVmaW5lIE1BWF9EQ0NQX0hFQURFUiAoTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSICsgTUFYX0hFQURFUikKIAorLyogVXBwZXIgYm91bmQgZm9yIGluaXRpYWwgZmVhdHVyZS1uZWdvdGlhdGlvbiBvdmVyaGVhZCAocGFkZGVkIHRvIDMyIGJpdHMpICovCisjZGVmaW5lIERDQ1BfRkVBVE5FR19PVkVSSEVBRAkgKDMyICogc2l6ZW9mKHVpbnQzMl90KSkKKwogI2RlZmluZSBEQ0NQX1RJTUVXQUlUX0xFTiAoNjAgKiBIWikgLyogaG93IGxvbmcgdG8gd2FpdCB0byBkZXN0cm95IFRJTUUtV0FJVAogCQkJCSAgICAgKiBzdGF0ZSwgYWJvdXQgNjAgc2Vjb25kcyAqLwogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vdXRwdXQuYyBiL25ldC9kY2NwL291dHB1dC5jCmluZGV4IDIyYTYxOGEuLjM2YmNjMDAgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0xNjEsMjEgKzE2MSwyNyBAQAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXUzMiBjY21wcyA9IGRjY3BfZGV0ZXJtaW5lX2NjbXBzKGRwKTsKLQlpbnQgY3VyX21wcyA9IGNjbXBzID8gbWluKHBtdHUsIGNjbXBzKSA6IHBtdHU7CisJdTMyIGN1cl9tcHMgPSBjY21wcyA/IG1pbihwbXR1LCBjY21wcykgOiBwbXR1OwogCiAJLyogQWNjb3VudCBmb3IgaGVhZGVyIGxlbmd0aHMgYW5kIElQdjQvdjYgb3B0aW9uIG92ZXJoZWFkICovCiAJY3VyX21wcyAtPSAoaWNzay0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuICsgaWNzay0+aWNza19leHRfaGRyX2xlbiArCiAJCSAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSArIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSk7CiAKIAkvKgotCSAqIEZJWE1FOiB0aGlzIHNob3VsZCBjb21lIGZyb20gdGhlIENDSUQgaW5mcmFzdHJ1Y3R1cmUsIHdoZXJlLCBzYXksCi0JICogVEZSQyB3aWxsIHNheSBpdCB3YW50cyBUSU1FU1RBTVBTLCBFTEFQU0VEIHRpbWUsIGV0YywgZm9yIG5vdyBsZXRzCi0JICogcHV0IGEgcm91Z2ggZXN0aW1hdGUgZm9yIE5EUCArIFRJTUVTVEFNUCArIFRJTUVTVEFNUF9FQ0hPICsgRUxBUFNFRAotCSAqIFRJTUUgKyBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEUgKyBURlJDX09QVF9SRUNFSVZFX1JBVEUgKyBwYWRkaW5nIHRvCi0JICogbWFrZSBpdCBhIG11bHRpcGxlIG9mIDQKKwkgKiBMZWF2ZSBlbm91Z2ggaGVhZHJvb20gZm9yIGNvbW1vbiBEQ0NQIGhlYWRlciBvcHRpb25zLgorCSAqIFRoaXMgb25seSBjb25zaWRlcnMgb3B0aW9ucyB3aGljaCBtYXkgYXBwZWFyIG9uIERDQ1AtRGF0YSBwYWNrZXRzLCBhcworCSAqIHBlciB0YWJsZSAzIGluIFJGQyA0MzQwLCA1LjguIFdoZW4gcnVubmluZyBvdXQgb2Ygc3BhY2UgZm9yIG90aGVyCisJICogb3B0aW9ucyAoZWcuIEFjayBWZWN0b3Igd2hpY2ggY2FuIHRha2UgdXAgdG8gMjU1IGJ5dGVzKSwgaXQgaXMgYmV0dGVyCisJICogdG8gc2NoZWR1bGUgYSBzZXBhcmF0ZSBBY2suIFRodXMgd2UgbGVhdmUgaGVhZHJvb20gZm9yIHRoZSBmb2xsb3dpbmc6CisJICogIC0gMSBieXRlIGZvciBTbG93IFJlY2VpdmVyICgxMS42KQorCSAqICAtIDYgYnl0ZXMgZm9yIFRpbWVzdGFtcCAoMTMuMSkKKwkgKiAgLSAxMCBieXRlcyBmb3IgVGltZXN0YW1wIEVjaG8gKDEzLjMpCisJICogIC0gOCBieXRlcyBmb3IgTkRQIGNvdW50ICg3LjcsIHdoZW4gYWN0aXZhdGVkKQorCSAqICAtIDYgYnl0ZXMgZm9yIERhdGEgQ2hlY2tzdW0gKDkuMykKKwkgKiAgLSAlRENDUEFWX01JTl9PUFRMRU4gYnl0ZXMgZm9yIEFjayBWZWN0b3Igc2l6ZSAoMTEuNCwgd2hlbiBlbmFibGVkKQogCSAqLwotCi0JY3VyX21wcyAtPSByb3VuZHVwKDUgKyA2ICsgMTAgKyA2ICsgNiArIDYsIDQpOworCWN1cl9tcHMgLT0gcm91bmR1cCgxICsgNiArIDEwICsgZHAtPmRjY3BzX3NlbmRfbmRwX2NvdW50ICogOCArIDYgKworCQkJICAgKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPyBEQ0NQQVZfTUlOX09QVExFTiA6IDApLCA0KTsKIAogCS8qIEFuZCBzdG9yZSBjYWNoZWQgcmVzdWx0cyAqLwogCWljc2stPmljc2tfcG10dV9jb29raWUgPSBwbXR1OwpAQCAtMjcwLDcgKzI3NiwyMCBAQAogCQkJY29uc3QgaW50IGxlbiA9IHNrYi0+bGVuOwogCiAJCQlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfUEFSVE9QRU4pIHsKLQkJCQkvKiBTZWUgOC4xLjUuICBIYW5kc2hha2UgQ29tcGxldGlvbiAqLworCQkJCWNvbnN0IHUzMiBjdXJfbXBzID0gZHAtPmRjY3BzX21zc19jYWNoZSAtIERDQ1BfRkVBVE5FR19PVkVSSEVBRDsKKwkJCQkvKgorCQkJCSAqIFNlZSA4LjEuNSAtIEhhbmRzaGFrZSBDb21wbGV0aW9uLgorCQkJCSAqCisJCQkJICogRm9yIHJvYnVzdG5lc3Mgd2UgcmVzZW5kIENvbmZpcm0gb3B0aW9ucyB1bnRpbCB0aGUgY2xpZW50IGhhcworCQkJCSAqIGVudGVyZWQgT1BFTi4gRHVyaW5nIHRoZSBpbml0aWFsIGZlYXR1cmUgbmVnb3RpYXRpb24sIHRoZSBNUFMKKwkJCQkgKiBpcyBzbWFsbGVyIHRoYW4gdXN1YWwsIHJlZHVjZWQgYnkgdGhlIENoYW5nZS9Db25maXJtIG9wdGlvbnMuCisJCQkJICovCisJCQkJaWYgKCFsaXN0X2VtcHR5KCZkcC0+ZGNjcHNfZmVhdG5lZykgJiYgbGVuID4gY3VyX21wcykgeworCQkJCQlEQ0NQX1dBUk4oIlBheWxvYWQgdG9vIGxhcmdlICglZCkgZm9yIGZlYXRuZWcuXG4iLCBsZW4pOworCQkJCQlkY2NwX3NlbmRfYWNrKHNrKTsKKwkJCQkJZGNjcF9mZWF0X2xpc3RfcHVyZ2UoJmRwLT5kY2Nwc19mZWF0bmVnKTsKKwkJCQl9CisKIAkJCQlpbmV0X2Nza19zY2hlZHVsZV9hY2soc2spOwogCQkJCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9EQUNLLAogCQkJCQkJICBpbmV0X2NzayhzayktPmljc2tfcnRvLApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKaW5kZXggMTJiZjdkNC4uOTY0N2Q5MSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCkBAIC0xMjQ2LDExICsxMjQ2LDEyIEBACiAKIAljYXNlIFRJT0NJTlE6CiAJCWxvY2tfc29jayhzayk7Ci0JCWlmICgoc2tiID0gc2tiX3BlZWsoJnNjcC0+b3RoZXJfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwkJc2tiID0gc2tiX3BlZWsoJnNjcC0+b3RoZXJfcmVjZWl2ZV9xdWV1ZSk7CisJCWlmIChza2IpIHsKIAkJCWFtb3VudCA9IHNrYi0+bGVuOwogCQl9IGVsc2UgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrLT5za19yZWNlaXZlX3F1ZXVlLm5leHQ7Ci0JCQlmb3IoOzspIHsKKwkJCXNrYiA9IHNrLT5za19yZWNlaXZlX3F1ZXVlLm5leHQ7CisJCQlmb3IgKDs7KSB7CiAJCQkJaWYgKHNrYiA9PQogCQkJCSAgICAoc3RydWN0IHNrX2J1ZmYgKikmc2stPnNrX3JlY2VpdmVfcXVldWUpCiAJCQkJCWJyZWFrOwpAQCAtMTU3OSwxNiArMTU4MCwxNiBAQAogCQlkZWZhdWx0OgogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAkJewotCQkJaW50IHZhbCwgbGVuOworCQkJaW50IHJldCwgbGVuOwogCiAJCQlpZihnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCXZhbCA9IG5mX2dldHNvY2tvcHQoc2ssIFBGX0RFQ25ldCwgb3B0bmFtZSwKKwkJCXJldCA9IG5mX2dldHNvY2tvcHQoc2ssIFBGX0RFQ25ldCwgb3B0bmFtZSwKIAkJCQkJCQlvcHR2YWwsICZsZW4pOwotCQkJaWYgKHZhbCA+PSAwKQotCQkJCXZhbCA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKLQkJCXJldHVybiB2YWw7CisJCQlpZiAocmV0ID49IDApCisJCQkJcmV0ID0gcHV0X3VzZXIobGVuLCBvcHRsZW4pOworCQkJcmV0dXJuIHJldDsKIAkJfQogI2VuZGlmCiAJCWNhc2UgRFNPX1NUUkVBTToKQEAgLTIwNzEsOCArMjA3Miw3IEBACiAJfQogb3V0OgogCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAKIAlyZWxlYXNlX3NvY2soc2spOwogCkBAIC0yMTEyLDkgKzIxMTIsOCBAQAogCiBleHRlcm4gaW50IGRuX3JvdXRlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZG5fZGl4X3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkbl9kaXhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9CQljcHVfdG9fYmUxNihFVEhfUF9ETkFfUlQpLAotCS5kZXYgPQkJTlVMTCwJCS8qIEFsbCBkZXZpY2VzICovCiAJLmZ1bmMgPQkJZG5fcm91dGVfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9kZXYuYyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKaW5kZXggZGFmMmI5OC4uMWM2YTViYiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9kZXYuYworKysgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCkBAIC02ODQsNyArNjg0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoKGRuX2RiID0gZGV2LT5kbl9wdHIpID09IE5VTEwpIHsKLQkJaW50IGVycjsKIAkJZG5fZGIgPSBkbl9kZXZfY3JlYXRlKGRldiwgJmVycik7CiAJCWlmICghZG5fZGIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtNzY5LDcgKzc2OCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0RFQ25ldF9JRkFERFIsIGVycik7CkBAIC0xMzIyLDYgKzEzMjIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqZG5fZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTM2NCw2ICsxMzY1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZG5fZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmRldl9iYXNlX2xvY2spCiB7CiAJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IDUxMzBkZWUuLjBjYzQzOTQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTM4MCw3ICszODAsNiBAQAogCXVuc2lnbmVkIGNoYXIgKnB0cjsKIAlfX2xlMTYgKnNyYzsKIAlfX2xlMTYgKmRzdDsKLQlfX2xlMTYgdG1wOwogCiAJLyogQWRkIGJhY2sgaGVhZGVycyAqLwogCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpOwpAQCAtMzk5LDEwICszOTgsNyBAQAogCXB0ciArPSAyOwogCSpwdHIgPSAwOyAvKiBaZXJvIGhvcCBjb3VudCAqLwogCi0JLyogU3dhcCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uICovCi0JdG1wICA9ICpzcmM7Ci0JKnNyYyA9ICpkc3Q7Ci0JKmRzdCA9IHRtcDsKKwlzd2FwKCpzcmMsICpkc3QpOwogCiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVVRHT0lORzsKIAlkbl9ydF9maW5pc2hfb3V0cHV0KHNrYiwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKaW5kZXggNjlhZDkyOC4uNjcwNTRiMCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl90YWJsZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwpAQCAtMzc1LDcgKzM3NSw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIHBpZCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIG5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIHBpZCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0RFQ25ldF9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwppbmRleCA5NjUzOTdhLi41YmNkNTkyIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAl9CiAKIAlpZiAod3JpdGUpIHsKLQkJaW50IGxlbiA9ICgqbGVucCA8IEROX0FTQ0JVRl9MRU4pID8gKmxlbnAgOiAoRE5fQVNDQlVGX0xFTi0xKTsKKwkJbGVuID0gKCpsZW5wIDwgRE5fQVNDQlVGX0xFTikgPyAqbGVucCA6IChETl9BU0NCVUZfTEVOLTEpOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihhZGRyLCBidWZmZXIsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL25ldC9kc2EvS2NvbmZpZyBiL25ldC9kc2EvS2NvbmZpZwppbmRleCA0OTIxMWIzLi5jNTFiNTU0IDEwMDY0NAotLS0gYS9uZXQvZHNhL0tjb25maWcKKysrIGIvbmV0L2RzYS9LY29uZmlnCkBAIC00MSwxMyArNDEsMTMgQEAKIAlkZWZhdWx0IG4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTMxCi0JYm9vbCAiTWFydmVsbCA4OEU2MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCisJYm9vbCAiTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCIKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFgKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUKIAlzZWxlY3QgTkVUX0RTQV9UQUdfRFNBCiAJLS0taGVscC0tLQotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYxMzEgZXRoZXJuZXQgc3dpdGNoCi0JICBjaGlwLgorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYwOTUvNjA5NUYvNjEzMQorCSAgZXRoZXJuZXQgc3dpdGNoIGNoaXBzLgogCiBjb25maWcgTkVUX0RTQV9NVjg4RTYxMjNfNjFfNjUKIAlib29sICJNYXJ2ZWxsIDg4RTYxMjMvNjE2MS82MTY1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYS5jIGIvbmV0L2RzYS9kc2EuYwppbmRleCAzM2U5OTQ2Li43MTQ4OWY2IDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYS5jCisrKyBiL25ldC9kc2EvZHNhLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9kc2EuYyAtIEhhcmR3YXJlIHN3aXRjaCBoYW5kbGluZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC02NywxMiArNjcsMTMgQEAKIAogLyogYmFzaWMgc3dpdGNoIG9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IGRzYV9zd2l0Y2ggKgotZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqcGQsCi0JCSBzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsIGludCBpbmRleCwKKwkJIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IG1paV9idXMgKmJ1cykKIHsKKwlzdHJ1Y3QgZHNhX2NoaXBfZGF0YSAqcGQgPSBkc3QtPnBkLT5jaGlwICsgaW5kZXg7CisJc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyICpkcnY7CiAJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCWludCByZXQ7Ci0Jc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyICpkcnY7CiAJY2hhciAqbmFtZTsKIAlpbnQgaTsKIApAQCAtODEsMTEgKzgyLDEyIEBACiAJICovCiAJZHJ2ID0gZHNhX3N3aXRjaF9wcm9iZShidXMsIHBkLT5zd19hZGRyLCAmbmFtZSk7CiAJaWYgKGRydiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBkZXRlY3QgYXR0YWNoZWQgc3dpdGNoXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNvdWxkIG5vdCBkZXRlY3QgYXR0YWNoZWQgc3dpdGNoXG4iLAorCQkgICAgICAgZHN0LT5tYXN0ZXJfbmV0ZGV2LT5uYW1lLCBpbmRleCk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICIlczogZGV0ZWN0ZWQgYSAlcyBzd2l0Y2hcbiIsIGRldi0+bmFtZSwgbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXNbJWRdOiBkZXRlY3RlZCBhICVzIHN3aXRjaFxuIiwKKwkJZHN0LT5tYXN0ZXJfbmV0ZGV2LT5uYW1lLCBpbmRleCwgbmFtZSk7CiAKIAogCS8qCkBAIC05NSwxOCArOTcsMTYgQEAKIAlpZiAoZHMgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlkcy0+cGQgPSBwZDsKLQlkcy0+bWFzdGVyX25ldGRldiA9IGRldjsKLQlkcy0+bWFzdGVyX21paV9idXMgPSBidXM7Ci0KKwlkcy0+ZHN0ID0gZHN0OworCWRzLT5pbmRleCA9IGluZGV4OworCWRzLT5wZCA9IGRzdC0+cGQtPmNoaXAgKyBpbmRleDsKIAlkcy0+ZHJ2ID0gZHJ2OwotCWRzLT50YWdfcHJvdG9jb2wgPSBkcnYtPnRhZ19wcm90b2NvbDsKKwlkcy0+bWFzdGVyX21paV9idXMgPSBidXM7CiAKIAogCS8qCiAJICogVmFsaWRhdGUgc3VwcGxpZWQgc3dpdGNoIGNvbmZpZ3VyYXRpb24uCiAJICovCi0JZHMtPmNwdV9wb3J0ID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IERTQV9NQVhfUE9SVFM7IGkrKykgewogCQljaGFyICpuYW1lOwogCkBAIC0xMTUsMzIgKzExNSwyOCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKCFzdHJjbXAobmFtZSwgImNwdSIpKSB7Ci0JCQlpZiAoZHMtPmNwdV9wb3J0ICE9IC0xKSB7CisJCQlpZiAoZHN0LT5jcHVfc3dpdGNoICE9IC0xKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aXBsZSBjcHUgcG9ydHM/IVxuIik7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWRzLT5jcHVfcG9ydCA9IGk7CisJCQlkc3QtPmNwdV9zd2l0Y2ggPSBpbmRleDsKKwkJCWRzdC0+Y3B1X3BvcnQgPSBpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImRzYSIpKSB7CisJCQlkcy0+ZHNhX3BvcnRfbWFzayB8PSAxIDw8IGk7CiAJCX0gZWxzZSB7Ci0JCQlkcy0+dmFsaWRfcG9ydF9tYXNrIHw9IDEgPDwgaTsKKwkJCWRzLT5waHlzX3BvcnRfbWFzayB8PSAxIDw8IGk7CiAJCX0KIAl9CiAKLQlpZiAoZHMtPmNwdV9wb3J0ID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibm8gY3B1IHBvcnQ/IVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQogCiAJLyoKLQkgKiBJZiB3ZSB1c2UgYSB0YWdnaW5nIGZvcm1hdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiBldGhlcnR5cGUKLQkgKiBmaWVsZCwgbWFrZSBzdXJlIHRoYXQgYWxsIHBhY2tldHMgZnJvbSB0aGlzIHBvaW50IG9uIGdldAotCSAqIHNlbnQgdG8gdGhlIHRhZyBmb3JtYXQncyByZWNlaXZlIGZ1bmN0aW9uLiAgKFdoaWNoIHdpbGwKLQkgKiBkaXNjYXJkIHJlY2VpdmVkIHBhY2tldHMgdW50aWwgd2Ugc2V0IGRzLT5wb3J0c1tdIGJlbG93LikKKwkgKiBJZiB0aGUgQ1BVIGNvbm5lY3RzIHRvIHRoaXMgc3dpdGNoLCBzZXQgdGhlIHN3aXRjaCB0cmVlCisJICogdGFnZ2luZyBwcm90b2NvbCB0byB0aGUgcHJlZmVycmVkIHRhZ2dpbmcgZm9ybWF0IG9mIHRoaXMKKwkgKiBzd2l0Y2guCiAJICovCi0Jd21iKCk7Ci0JZGV2LT5kc2FfcHRyID0gKHZvaWQgKilkczsKKwlpZiAoZHMtPmRzdC0+Y3B1X3N3aXRjaCA9PSBpbmRleCkKKwkJZHMtPmRzdC0+dGFnX3Byb3RvY29sID0gZHJ2LT50YWdfcHJvdG9jb2w7CiAKIAogCS8qCkBAIC0xNTAsNyArMTQ2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBkcnYtPnNldF9hZGRyKGRzLCBkZXYtPmRldl9hZGRyKTsKKwlyZXQgPSBkcnYtPnNldF9hZGRyKGRzLCBkc3QtPm1hc3Rlcl9uZXRkZXYtPmRldl9hZGRyKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTE2OSwxOCArMTY1LDE4IEBACiAJLyoKIAkgKiBDcmVhdGUgbmV0d29yayBkZXZpY2VzIGZvciBwaHlzaWNhbCBzd2l0Y2ggcG9ydHMuCiAJICovCi0Jd21iKCk7CiAJZm9yIChpID0gMDsgaSA8IERTQV9NQVhfUE9SVFM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2OwogCi0JCWlmICghKGRzLT52YWxpZF9wb3J0X21hc2sgJiAoMSA8PCBpKSkpCisJCWlmICghKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGkpKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNsYXZlX2RldiA9IGRzYV9zbGF2ZV9jcmVhdGUoZHMsIHBhcmVudCwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOwogCQlpZiAoc2xhdmVfZGV2ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGNyZWF0ZSBkc2Egc2xhdmUgIgotCQkJICAgICAgICJkZXZpY2UgZm9yIHBvcnQgJWQoJXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNhbid0IGNyZWF0ZSBkc2EgIgorCQkJICAgICAgICJzbGF2ZSBkZXZpY2UgZm9yIHBvcnQgJWQoJXMpXG4iLAorCQkJICAgICAgIGRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwKKwkJCSAgICAgICBpbmRleCwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTkyLDcgKzE4OCw2IEBACiBvdXRfZnJlZToKIAltZGlvYnVzX2ZyZWUoZHMtPnNsYXZlX21paV9idXMpOwogb3V0OgotCWRldi0+ZHNhX3B0ciA9IE5VTEw7CiAJa2ZyZWUoZHMpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CkBAIC0yMTIsMzUgKzIwNyw0MiBAQAogICovCiBib29sIGRzYV91c2VzX2RzYV90YWdzKHZvaWQgKmRzYV9wdHIpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkc2FfcHRyOwogCi0JcmV0dXJuICEhKGRzLT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRFNBKSk7CisJcmV0dXJuICEhKGRzdC0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0RTQSkpOwogfQogCiBib29sIGRzYV91c2VzX3RyYWlsZXJfdGFncyh2b2lkICpkc2FfcHRyKQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHNhX3B0cjsKIAotCXJldHVybiAhIShkcy0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX1RSQUlMRVIpKTsKKwlyZXR1cm4gISEoZHN0LT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfVFJBSUxFUikpOwogfQogCiAKIC8qIGxpbmsgcG9sbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgZHNhX2xpbmtfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdWdseSkKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0OworCWludCBpOwogCi0JZHMgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IGRzYV9zd2l0Y2gsIGxpbmtfcG9sbF93b3JrKTsKKwlkc3QgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSwgbGlua19wb2xsX3dvcmspOwogCi0JZHMtPmRydi0+cG9sbF9saW5rKGRzKTsKLQltb2RfdGltZXIoJmRzLT5saW5rX3BvbGxfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CisJZm9yIChpID0gMDsgaSA8IGRzdC0+cGQtPm5yX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHN0LT5kc1tpXTsKKworCQlpZiAoZHMgIT0gTlVMTCAmJiBkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkKKwkJCWRzLT5kcnYtPnBvbGxfbGluayhkcyk7CisJfQorCisJbW9kX3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopKTsKIH0KIAotc3RhdGljIHZvaWQgZHNhX2xpbmtfcG9sbF90aW1lcih1bnNpZ25lZCBsb25nIF9kcykKK3N0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfdGltZXIodW5zaWduZWQgbG9uZyBfZHN0KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICh2b2lkICopX2RzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9ICh2b2lkICopX2RzdDsKIAotCXNjaGVkdWxlX3dvcmsoJmRzLT5saW5rX3BvbGxfd29yayk7CisJc2NoZWR1bGVfd29yaygmZHN0LT5saW5rX3BvbGxfd29yayk7CiB9CiAKIApAQCAtMzAzLDE4ICszMDUsMTQgQEAKIAlzdGF0aWMgaW50IGRzYV92ZXJzaW9uX3ByaW50ZWQ7CiAJc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG1paV9idXMgKmJ1czsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0OworCWludCBpOwogCiAJaWYgKCFkc2FfdmVyc2lvbl9wcmludGVkKyspCiAJCXByaW50ayhLRVJOX05PVElDRSAiRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSAiCiAJCQkiZHJpdmVyIHZlcnNpb24gJXNcbiIsIGRzYV9kcml2ZXJfdmVyc2lvbik7CiAKLQlpZiAocGQgPT0gTlVMTCB8fCBwZC0+bWlpX2J1cyA9PSBOVUxMIHx8IHBkLT5uZXRkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidXMgPSBkZXZfdG9fbWlpX2J1cyhwZC0+bWlpX2J1cyk7Ci0JaWYgKGJ1cyA9PSBOVUxMKQorCWlmIChwZCA9PSBOVUxMIHx8IHBkLT5uZXRkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXYgPSBkZXZfdG9fbmV0X2RldmljZShwZC0+bmV0ZGV2KTsKQEAgLTMyNiwzNiArMzI0LDc5IEBACiAJCXJldHVybiAtRUVYSVNUOwogCX0KIAotCWRzID0gZHNhX3N3aXRjaF9zZXR1cCgmcGRldi0+ZGV2LCBwZCwgYnVzLCBkZXYpOwotCWlmIChJU19FUlIoZHMpKSB7CisJZHN0ID0ga3phbGxvYyhzaXplb2YoKmRzdCksIEdGUF9LRVJORUwpOworCWlmIChkc3QgPT0gTlVMTCkgewogCQlkZXZfcHV0KGRldik7Ci0JCXJldHVybiBQVFJfRVJSKGRzKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKSB7Ci0JCUlOSVRfV09SSygmZHMtPmxpbmtfcG9sbF93b3JrLCBkc2FfbGlua19wb2xsX3dvcmspOwotCQlpbml0X3RpbWVyKCZkcy0+bGlua19wb2xsX3RpbWVyKTsKLQkJZHMtPmxpbmtfcG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZHM7Ci0JCWRzLT5saW5rX3BvbGxfdGltZXIuZnVuY3Rpb24gPSBkc2FfbGlua19wb2xsX3RpbWVyOwotCQlkcy0+bGlua19wb2xsX3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWik7Ci0JCWFkZF90aW1lcigmZHMtPmxpbmtfcG9sbF90aW1lcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHN0KTsKKworCWRzdC0+cGQgPSBwZDsKKwlkc3QtPm1hc3Rlcl9uZXRkZXYgPSBkZXY7CisJZHN0LT5jcHVfc3dpdGNoID0gLTE7CisJZHN0LT5jcHVfcG9ydCA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IHBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBtaWlfYnVzICpidXM7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKKworCQlidXMgPSBkZXZfdG9fbWlpX2J1cyhwZC0+Y2hpcFtpXS5taWlfYnVzKTsKKwkJaWYgKGJ1cyA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzWyVkXTogbm8gbWlpIGJ1cyBmb3VuZCBmb3IgIgorCQkJCSJkc2Egc3dpdGNoXG4iLCBkZXYtPm5hbWUsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlkcyA9IGRzYV9zd2l0Y2hfc2V0dXAoZHN0LCBpLCAmcGRldi0+ZGV2LCBidXMpOworCQlpZiAoSVNfRVJSKGRzKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNvdWxkbid0IGNyZWF0ZSBkc2Egc3dpdGNoICIKKwkJCQkiaW5zdGFuY2UgKGVycm9yICVsZClcbiIsIGRldi0+bmFtZSwgaSwKKwkJCQlQVFJfRVJSKGRzKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRzdC0+ZHNbaV0gPSBkczsKKwkJaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKQorCQkJZHN0LT5saW5rX3BvbGxfbmVlZGVkID0gMTsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcyk7CisJLyoKKwkgKiBJZiB3ZSB1c2UgYSB0YWdnaW5nIGZvcm1hdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiBldGhlcnR5cGUKKwkgKiBmaWVsZCwgbWFrZSBzdXJlIHRoYXQgYWxsIHBhY2tldHMgZnJvbSB0aGlzIHBvaW50IG9uIGdldAorCSAqIHNlbnQgdG8gdGhlIHRhZyBmb3JtYXQncyByZWNlaXZlIGZ1bmN0aW9uLgorCSAqLworCXdtYigpOworCWRldi0+ZHNhX3B0ciA9ICh2b2lkICopZHN0OworCisJaWYgKGRzdC0+bGlua19wb2xsX25lZWRlZCkgeworCQlJTklUX1dPUksoJmRzdC0+bGlua19wb2xsX3dvcmssIGRzYV9saW5rX3BvbGxfd29yayk7CisJCWluaXRfdGltZXIoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRzdDsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZnVuY3Rpb24gPSBkc2FfbGlua19wb2xsX3RpbWVyOworCQlkc3QtPmxpbmtfcG9sbF90aW1lci5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopOworCQlhZGRfdGltZXIoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CiAKLQlpZiAoZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpCi0JCWRlbF90aW1lcl9zeW5jKCZkcy0+bGlua19wb2xsX3RpbWVyKTsKKwlpZiAoZHN0LT5saW5rX3BvbGxfbmVlZGVkKQorCQlkZWxfdGltZXJfc3luYygmZHN0LT5saW5rX3BvbGxfdGltZXIpOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCWRzYV9zd2l0Y2hfZGVzdHJveShkcyk7CisJZm9yIChpID0gMDsgaSA8IGRzdC0+cGQtPm5yX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHN0LT5kc1tpXTsKKworCQlpZiAoZHMgIT0gTlVMTCkKKwkJCWRzYV9zd2l0Y2hfZGVzdHJveShkcyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYV9wcml2LmggYi9uZXQvZHNhL2RzYV9wcml2LmgKaW5kZXggNzA2MzM3OC4uNDEwNTVmMyAxMDA2NDQKLS0tIGEvbmV0L2RzYS9kc2FfcHJpdi5oCisrKyBiL25ldC9kc2EvZHNhX3ByaXYuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL2RzYV9wcml2LmggLSBIYXJkd2FyZSBzd2l0Y2ggaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTksNDIgKzE5LDEwNyBAQAogCiBzdHJ1Y3QgZHNhX3N3aXRjaCB7CiAJLyoKLQkgKiBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCBvd25zCi0JICogdGhpcyBkc2Egc3dpdGNoIGluc3RhbmNlLgorCSAqIFBhcmVudCBzd2l0Y2ggdHJlZSwgYW5kIHN3aXRjaCBpbmRleC4KIAkgKi8KLQlzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEJKnBkOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUJKmRzdDsKKwlpbnQJCQlpbmRleDsKIAogCS8qCi0JICogUmVmZXJlbmNlcyB0byBuZXR3b3JrIGRldmljZSBhbmQgbWlpIGJ1cyB0byB1c2UuCisJICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGlzIHN3aXRjaC4KIAkgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZQkJKm1hc3Rlcl9uZXRkZXY7Ci0Jc3RydWN0IG1paV9idXMJCQkqbWFzdGVyX21paV9idXM7CisJc3RydWN0IGRzYV9jaGlwX2RhdGEJKnBkOwogCiAJLyoKLQkgKiBUaGUgdXNlZCBzd2l0Y2ggZHJpdmVyIGFuZCBmcmFtZSB0YWdnaW5nIHR5cGUuCisJICogVGhlIHVzZWQgc3dpdGNoIGRyaXZlci4KIAkgKi8KIAlzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIJKmRydjsKLQlfX2JlMTYJCQkJdGFnX3Byb3RvY29sOworCisJLyoKKwkgKiBSZWZlcmVuY2UgdG8gbWlpIGJ1cyB0byB1c2UuCisJICovCisJc3RydWN0IG1paV9idXMJCSptYXN0ZXJfbWlpX2J1czsKIAogCS8qCiAJICogU2xhdmUgbWlpX2J1cyBhbmQgZGV2aWNlcyBmb3IgdGhlIGluZGl2aWR1YWwgcG9ydHMuCiAJICovCi0JaW50CQkJCWNwdV9wb3J0OwotCXUzMgkJCQl2YWxpZF9wb3J0X21hc2s7Ci0Jc3RydWN0IG1paV9idXMJCQkqc2xhdmVfbWlpX2J1czsKLQlzdHJ1Y3QgbmV0X2RldmljZQkJKnBvcnRzW0RTQV9NQVhfUE9SVFNdOworCXUzMgkJCWRzYV9wb3J0X21hc2s7CisJdTMyCQkJcGh5c19wb3J0X21hc2s7CisJc3RydWN0IG1paV9idXMJCSpzbGF2ZV9taWlfYnVzOworCXN0cnVjdCBuZXRfZGV2aWNlCSpwb3J0c1tEU0FfTUFYX1BPUlRTXTsKK307CisKK3N0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgeworCS8qCisJICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgb3ducworCSAqIHRoaXMgZHNhIHN3aXRjaCB0cmVlIGluc3RhbmNlLgorCSAqLworCXN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YQkqcGQ7CisKKwkvKgorCSAqIFJlZmVyZW5jZSB0byBuZXR3b3JrIGRldmljZSB0byB1c2UsIGFuZCB3aGljaCB0YWdnaW5nCisJICogcHJvdG9jb2wgdG8gdXNlLgorCSAqLworCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXJfbmV0ZGV2OworCV9fYmUxNgkJCXRhZ19wcm90b2NvbDsKKworCS8qCisJICogVGhlIHN3aXRjaCBhbmQgcG9ydCB0byB3aGljaCB0aGUgQ1BVIGlzIGF0dGFjaGVkLgorCSAqLworCXM4CQkJY3B1X3N3aXRjaDsKKwlzOAkJCWNwdV9wb3J0OwogCiAJLyoKIAkgKiBMaW5rIHN0YXRlIHBvbGxpbmcuCiAJICovCi0Jc3RydWN0IHdvcmtfc3RydWN0CQlsaW5rX3BvbGxfd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdAkJbGlua19wb2xsX3RpbWVyOworCWludAkJCWxpbmtfcG9sbF9uZWVkZWQ7CisJc3RydWN0IHdvcmtfc3RydWN0CWxpbmtfcG9sbF93b3JrOworCXN0cnVjdCB0aW1lcl9saXN0CWxpbmtfcG9sbF90aW1lcjsKKworCS8qCisJICogRGF0YSBmb3IgdGhlIGluZGl2aWR1YWwgc3dpdGNoIGNoaXBzLgorCSAqLworCXN0cnVjdCBkc2Ffc3dpdGNoCSpkc1tEU0FfTUFYX1NXSVRDSEVTXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBkc2FfaXNfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcCkKK3sKKwlyZXR1cm4gISEoZHMtPmluZGV4ID09IGRzLT5kc3QtPmNwdV9zd2l0Y2ggJiYgcCA9PSBkcy0+ZHN0LT5jcHVfcG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZHNhX3Vwc3RyZWFtX3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQoreworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLT5kc3Q7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgdGhlIHJvb3Qgc3dpdGNoIChpLmUuIHRoZSBzd2l0Y2ggdGhhdCBjb25uZWN0cworCSAqIHRvIHRoZSBDUFUpLCByZXR1cm4gdGhlIGNwdSBwb3J0IG51bWJlciBvbiB0aGlzIHN3aXRjaC4KKwkgKiBFbHNlIHJldHVybiB0aGUgKERTQSkgcG9ydCBudW1iZXIgdGhhdCBjb25uZWN0cyB0byB0aGUKKwkgKiBzd2l0Y2ggdGhhdCBpcyBvbmUgaG9wIGNsb3NlciB0byB0aGUgY3B1LgorCSAqLworCWlmIChkc3QtPmNwdV9zd2l0Y2ggPT0gZHMtPmluZGV4KQorCQlyZXR1cm4gZHN0LT5jcHVfcG9ydDsKKwllbHNlCisJCXJldHVybiBkcy0+cGQtPnJ0YWJsZVtkc3QtPmNwdV9zd2l0Y2hdOworfQorCiBzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgeworCS8qCisJICogVGhlIGxpbnV4IG5ldHdvcmsgaW50ZXJmYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcworCSAqIHN3aXRjaCBwb3J0LgorCSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisKKwkvKgorCSAqIFdoaWNoIHN3aXRjaCB0aGlzIHBvcnQgaXMgYSBwYXJ0IG9mLCBhbmQgdGhlIHBvcnQgaW5kZXgKKwkgKiBmb3IgdGhpcyBwb3J0LgorCSAqLwogCXN0cnVjdCBkc2Ffc3dpdGNoCSpwYXJlbnQ7Ci0JaW50CQkJcG9ydDsKKwl1OAkJCXBvcnQ7CisKKwkvKgorCSAqIFRoZSBwaHlsaWIgcGh5X2RldmljZSBwb2ludGVyIGZvciB0aGUgUEhZIGNvbm5lY3RlZAorCSAqIHRvIHRoaXMgcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgcGh5X2RldmljZQkqcGh5OwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYwNjAuYyBiL25ldC9kc2EvbXY4OGU2MDYwLmMKaW5kZXggODUwODFhZS4uODMyNzdmNCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYwNjAuYworKysgYi9uZXQvZHNhL212ODhlNjA2MC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvbXY4OGU2MDYwLmMgLSBEcml2ZXIgZm9yIE1hcnZlbGwgODhlNjA2MCBzd2l0Y2ggY2hpcHMKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtODEsNyArODEsNyBAQAogCS8qCiAJICogUmVzZXQgdGhlIHN3aXRjaC4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgwQSwgMHhhMTMwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgwYSwgMHhhMTMwKTsKIAogCS8qCiAJICogV2FpdCB1cCB0byBvbmUgc2Vjb25kIGZvciByZXNldCB0byBjb21wbGV0ZS4KQEAgLTEyOCw3ICsxMjgsNyBAQAogCSAqIHN0YXRlIHRvIEZvcndhcmRpbmcuICBBZGRpdGlvbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVQogCSAqIHBvcnQsIGVuYWJsZSBJbmdyZXNzIGFuZCBFZ3Jlc3MgVHJhaWxlciB0YWdnaW5nIG1vZGUuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDQxMDMgOiAweDAwMDMpOworCVJFR19XUklURShhZGRyLCAweDA0LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gIDB4NDEwMyA6IDB4MDAwMyk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwpAQCAtMTM4LDkgKzEzOCw5IEBACiAJICovCiAJUkVHX1dSSVRFKGFkZHIsIDB4MDYsCiAJCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwkJCSAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/CisJCQkJZHMtPnBoeXNfcG9ydF9tYXNrIDoKKwkJCQkoMSA8PCBkcy0+ZHN0LT5jcHVfcG9ydCkpKTsKIAogCS8qCiAJICogUG9ydCBBc3NvY2lhdGlvbiBWZWN0b3I6IHdoZW4gbGVhcm5pbmcgc291cmNlIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYyBiL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMKaW5kZXggMTAwMzE4Ny4uNTJmYWFhMiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYworKysgYi9uZXQvZHNhL212ODhlNjEyM182MV82NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMgLSBNYXJ2ZWxsIDg4ZTYxMjMvNjE2MS82MTY1IHN3aXRjaCBjaGlwIHN1cHBvcnQKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtOTgsMTcgKzk4LDE3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKgotCSAqIENvbmZpZ3VyZSB0aGUgY3B1IHBvcnQsIGFuZCBjb25maWd1cmUgdGhlIGNwdSBwb3J0IGFzIHRoZQotCSAqIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0byBiZQotCSAqIHNlbnQuCisJICogQ29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0LCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbQorCSAqIHBvcnQgYXMgdGhlIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzCisJICogYXJlIHRvIGJlIHNlbnQuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkcy0+Y3B1X3BvcnQgKiAweDExMTApKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzYV91cHN0cmVhbV9wb3J0KGRzKSAqIDB4MTExMCkpOwogCiAJLyoKIAkgKiBEaXNhYmxlIHJlbW90ZSBtYW5hZ2VtZW50IGZvciBub3csIGFuZCBzZXQgdGhlIHN3aXRjaCdzCi0JICogRFNBIGRldmljZSBudW1iZXIgdG8gemVyby4KKwkgKiBEU0EgZGV2aWNlIG51bWJlci4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgMHgwMDAwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgZHMtPmluZGV4ICYgMHgxZik7CiAKIAkvKgogCSAqIFNlbmQgYWxsIGZyYW1lcyB3aXRoIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBtYXRjaGluZwpAQCAtMTMzLDEwICsxMzMsMTcgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDUsIDB4MDBmZik7CiAKIAkvKgotCSAqIE1hcCBhbGwgRFNBIGRldmljZSBJRHMgdG8gdGhlIENQVSBwb3J0LgorCSAqIFByb2dyYW0gdGhlIERTQSByb3V0aW5nIHRhYmxlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgZHMtPmNwdV9wb3J0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpbnQgbmV4dGhvcDsKKworCQluZXh0aG9wID0gMHgxZjsKKwkJaWYgKGkgIT0gZHMtPmluZGV4ICYmIGkgPCBkcy0+ZHN0LT5wZC0+bnJfY2hpcHMpCisJCQluZXh0aG9wID0gZHMtPnBkLT5ydGFibGVbaV0gJiAweDFmOworCisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBuZXh0aG9wKTsKKwl9CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXNrcy4KQEAgLTE3NiwxMiArMTgzLDE4IEBACiBzdGF0aWMgaW50IG12ODhlNjEyM182MV82NV9zZXR1cF9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCiB7CiAJaW50IGFkZHIgPSBSRUdfUE9SVChwKTsKKwl1MTYgdmFsOwogCiAJLyoKIAkgKiBNQUMgRm9yY2luZyByZWdpc3RlcjogZG9uJ3QgZm9yY2UgbGluaywgc3BlZWQsIGR1cGxleAotCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMuCisJICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcyBvbiBwaHlzaWNhbAorCSAqIHBvcnRzLCBidXQgZm9yY2UgdGhlIENQVSBwb3J0IGFuZCBhbGwgRFNBIHBvcnRzIHRvIDEwMDAgTWIvcworCSAqIGZ1bGwgZHVwbGV4LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApIHx8IGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwM2UpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CiAKIAkvKgogCSAqIERvIG5vdCBsaW1pdCB0aGUgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGlzIHBvcnQgY2FuIGJlCkBAIC0xOTIsMzcgKzIwNSw1MCBAQAogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2w6IGRpc2FibGUgRHJvcC1vbi1VbmxvY2ssIGRpc2FibGUgRHJvcC1vbi1Mb2NrLAotCSAqIGNvbmZpZ3VyZSB0aGUgcmVxdWVzdGVkIChEU0EvRURTQSkgdGFnZ2luZyBtb2RlIGlmIHRoaXMgaXMKLQkgKiB0aGUgQ1BVIHBvcnQsIGRpc2FibGUgSGVhZGVyIG1vZGUsIGVuYWJsZSBJR01QL01MRCBzbm9vcGluZywKLQkgKiBkaXNhYmxlIFZMQU4gdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdAotCSAqIDgwMi4xcCBhbmQgSVAgcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kCi0JICogc2V0IFNUUCBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgRmluYWxseSwgaWYgdGhpcyBpcyB0aGUgQ1BVCi0JICogcG9ydCwgYWRkaXRpb25hbGx5IGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdCBhbmQKLQkgKiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorCSAqIGRpc2FibGUgSGVhZGVyIG1vZGUsIGVuYWJsZSBJR01QL01MRCBzbm9vcGluZywgZGlzYWJsZSBWTEFOCisJICogdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdCA4MDIuMXAgYW5kIElQCisJICogcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kIHNldCBTVFAgc3RhdGUKKwkgKiB0byBGb3J3YXJkaW5nLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgQ1BVIGxpbmssIHVzZSBEU0Egb3IgRURTQSB0YWdnaW5nIGRlcGVuZGluZworCSAqIG9uIHdoaWNoIHRhZ2dpbmcgbW9kZSB3YXMgY29uZmlndXJlZC4KKwkgKgorCSAqIElmIHRoaXMgaXMgYSBsaW5rIHRvIGFub3RoZXIgc3dpdGNoLCB1c2UgRFNBIHRhZ2dpbmcgbW9kZS4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMgYW5kIG11bHRpY2FzdHMuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsCi0JCQkocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCSAoZHMtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9EU0EpKSA/Ci0JCQkgIDB4MDUzZiA6IDB4MzczZiA6Ci0JCQkgMHgwNDMzKTsKKwl2YWwgPSAweDA0MzM7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpIHsKKwkJaWYgKGRzLT5kc3QtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9FRFNBKSkKKwkJCXZhbCB8PSAweDMzMDA7CisJCWVsc2UKKwkJCXZhbCB8PSAweDAxMDA7CisJfQorCWlmIChkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQl2YWwgfD0gMHgwMTAwOworCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJdmFsIHw9IDB4MDAwYzsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgdmFsKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sIDE6IGRpc2FibGUgdHJ1bmtpbmcuICBBbHNvLCBpZiB0aGlzIGlzIHRoZQogCSAqIENQVSBwb3J0LCBlbmFibGUgbGVhcm4gbWVzc2FnZXMgdG8gYmUgc2VudCB0byB0aGlzIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDUsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDgwMDAgOiAweDAwMDApOworCVJFR19XUklURShhZGRyLCAweDA1LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gMHg4MDAwIDogMHgwMDAwKTsKIAogCS8qCiAJICogUG9ydCBiYXNlZCBWTEFOIG1hcDogZ2l2ZSBlYWNoIHBvcnQgaXRzIG93biBhZGRyZXNzCiAJICogZGF0YWJhc2UsIGFsbG93IHRoZSBDUFUgcG9ydCB0byB0YWxrIHRvIGVhY2ggb2YgdGhlICdyZWFsJwogCSAqIHBvcnRzLCBhbmQgYWxsb3cgZWFjaCBvZiB0aGUgJ3JlYWwnIHBvcnRzIHRvIG9ubHkgdGFsayB0bwotCSAqIHRoZSBDUFUgcG9ydC4KKwkgKiB0aGUgdXBzdHJlYW0gcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNiwKLQkJCSgocCAmIDB4ZikgPDwgMTIpIHwKLQkJCSAoKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkJZHMtPnZhbGlkX3BvcnRfbWFzayA6Ci0JCQkJKDEgPDwgZHMtPmNwdV9wb3J0KSkpOworCXZhbCA9IChwICYgMHhmKSA8PCAxMjsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSkKKwkJdmFsIHw9IGRzLT5waHlzX3BvcnRfbWFzazsKKwllbHNlCisJCXZhbCB8PSAxIDw8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNiwgdmFsKTsKIAogCS8qCiAJICogRGVmYXVsdCBWTEFOIElEIGFuZCBwcmlvcml0eTogZG9uJ3Qgc2V0IGEgZGVmYXVsdCBWTEFOCmRpZmYgLS1naXQgYS9uZXQvZHNhL212ODhlNjEzMS5jIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwppbmRleCA3MGZhZTI0Li5iYjJiNDFiIDEwMDY0NAotLS0gYS9uZXQvZHNhL212ODhlNjEzMS5jCisrKyBiL25ldC9kc2EvbXY4OGU2MTMxLmMKQEAgLTEsNiArMSw2IEBACiAvKgotICogbmV0L2RzYS9tdjg4ZTYxMzEuYyAtIE1hcnZlbGwgODhlNjEzMSBzd2l0Y2ggY2hpcCBzdXBwb3J0Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBuZXQvZHNhL212ODhlNjEzMS5jIC0gTWFydmVsbCA4OGU2MDk1LzYwOTVmLzYxMzEgc3dpdGNoIGNoaXAgc3VwcG9ydAorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMSw2ICsyMSw4IEBACiAJcmV0ID0gX19tdjg4ZTZ4eHhfcmVnX3JlYWQoYnVzLCBzd19hZGRyLCBSRUdfUE9SVCgwKSwgMHgwMyk7CiAJaWYgKHJldCA+PSAwKSB7CiAJCXJldCAmPSAweGZmZjA7CisJCWlmIChyZXQgPT0gMHgwOTUwKQorCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYwOTUvODhFNjA5NUYiOwogCQlpZiAocmV0ID09IDB4MTA2MCkKIAkJCXJldHVybiAiTWFydmVsbCA4OEU2MTMxIjsKIAl9CkBAIC0zNiw3ICszOCw3IEBACiAJLyoKIAkgKiBTZXQgYWxsIHBvcnRzIHRvIHRoZSBkaXNhYmxlZCBzdGF0ZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKIAkJcmV0ID0gUkVHX1JFQUQoUkVHX1BPUlQoaSksIDB4MDQpOwogCQlSRUdfV1JJVEUoUkVHX1BPUlQoaSksIDB4MDQsIHJldCAmIDB4ZmZmYyk7CiAJfQpAQCAtMTAwLDE3ICsxMDIsMTcgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxOSwgMHg4MTAwKTsKIAogCS8qCi0JICogRGlzYWJsZSBBUlAgbWlycm9yaW5nLCBhbmQgY29uZmlndXJlIHRoZSBjcHUgcG9ydCBhcyB0aGUKLQkgKiBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcyBhcmUgdG8gYmUKLQkgKiBzZW50LgorCSAqIERpc2FibGUgQVJQIG1pcnJvcmluZywgYW5kIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gcG9ydCBhcworCSAqIHRoZSBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcyBhcmUgdG8KKwkgKiBiZSBzZW50LgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHMtPmNwdV9wb3J0ICogMHgxMTAwKSB8IDB4MDBmMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkc2FfdXBzdHJlYW1fcG9ydChkcykgKiAweDExMDApIHwgMHgwMGYwKTsKIAogCS8qCiAJICogRGlzYWJsZSBjYXNjYWRlIHBvcnQgZnVuY3Rpb25hbGl0eSwgYW5kIHNldCB0aGUgc3dpdGNoJ3MKLQkgKiBEU0EgZGV2aWNlIG51bWJlciB0byB6ZXJvLgorCSAqIERTQSBkZXZpY2UgbnVtYmVyLgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFjLCAweGUwMDApOworCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFjLCAweGUwMDAgfCAoZHMtPmluZGV4ICYgMHgxZikpOwogCiAJLyoKIAkgKiBTZW5kIGFsbCBmcmFtZXMgd2l0aCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgbWF0Y2hpbmcKQEAgLTEyNywxNiArMTI5LDIzIEBACiAJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA1LCAweDAwZmYpOwogCiAJLyoKLQkgKiBNYXAgYWxsIERTQSBkZXZpY2UgSURzIHRvIHRoZSBDUFUgcG9ydC4KKwkgKiBQcm9ncmFtIHRoZSBEU0Egcm91dGluZyB0YWJsZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKLQkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IGRzLT5jcHVfcG9ydCk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaW50IG5leHRob3A7CisKKwkJbmV4dGhvcCA9IDB4MWY7CisJCWlmIChpICE9IGRzLT5pbmRleCAmJiBpIDwgZHMtPmRzdC0+cGQtPm5yX2NoaXBzKQorCQkJbmV4dGhvcCA9IGRzLT5wZC0+cnRhYmxlW2ldICYgMHgxZjsKKworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgbmV4dGhvcCk7CisJfQogCiAJLyoKIAkgKiBDbGVhciBhbGwgdHJ1bmsgbWFza3MuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA3LCAweDgwMDAgfCAoaSA8PCAxMikgfCAweGZmKTsKKwkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA3LCAweDgwMDAgfCAoaSA8PCAxMikgfCAweDdmZik7CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXBwaW5ncy4KQEAgLTE1NiwxMiArMTY1LDE4IEBACiBzdGF0aWMgaW50IG12ODhlNjEzMV9zZXR1cF9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCiB7CiAJaW50IGFkZHIgPSBSRUdfUE9SVChwKTsKKwl1MTYgdmFsOwogCiAJLyoKIAkgKiBNQUMgRm9yY2luZyByZWdpc3RlcjogZG9uJ3QgZm9yY2UgbGluaywgc3BlZWQsIGR1cGxleAotCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMuCisJICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcyBvbiBwaHlzaWNhbAorCSAqIHBvcnRzLCBidXQgZm9yY2UgdGhlIENQVSBwb3J0IGFuZCBhbGwgRFNBIHBvcnRzIHRvIDEwMDAgTWIvcworCSAqIGZ1bGwgZHVwbGV4LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApIHx8IGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwM2UpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbDogZGlzYWJsZSBDb3JlIFRhZywgZGlzYWJsZSBEcm9wLW9uLUxvY2ssCkBAIC0xNjksMjkgKzE4NCw0MCBAQAogCSAqIGVuYWJsZSBJR01QL01MRCBzbm9vcCwgZGlzYWJsZSBEb3VibGVUYWcsIGRpc2FibGUgVkxBTgogCSAqIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQgODAyLjFwIGFuZAogCSAqIElQIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZCBzZXQgU1RQCi0JICogc3RhdGUgdG8gRm9yd2FyZGluZy4gIEZpbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVSBwb3J0LAotCSAqIGFkZGl0aW9uYWxseSBlbmFibGUgRFNBIHRhZ2dpbmcgYW5kIGZvcndhcmRpbmcgb2YgdW5rbm93bgotCSAqIHVuaWNhc3QgYWRkcmVzc2VzLgorCSAqIHN0YXRlIHRvIEZvcndhcmRpbmcuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCisJICogZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzLCBhbmQgZW5hYmxlIERTQSB0YWdnaW5nCisJICogbW9kZS4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIGxpbmsgdG8gYW5vdGhlciBzd2l0Y2gsIHVzZSBEU0EgdGFnZ2luZworCSAqIG1vZGUsIGJ1dCBkbyBub3QgZW5hYmxlIGZvcndhcmRpbmcgb2YgdW5rbm93biB1bmljYXN0cy4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNCwgKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4MDUzNyA6IDB4MDQzMyk7CisJdmFsID0gMHgwNDMzOworCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJdmFsIHw9IDB4MDEwNDsKKwlpZiAoZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJdmFsIHw9IDB4MDEwMDsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgdmFsKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sIDE6IGRpc2FibGUgdHJ1bmtpbmcuICBBbHNvLCBpZiB0aGlzIGlzIHRoZQogCSAqIENQVSBwb3J0LCBlbmFibGUgbGVhcm4gbWVzc2FnZXMgdG8gYmUgc2VudCB0byB0aGlzIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDUsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDgwMDAgOiAweDAwMDApOworCVJFR19XUklURShhZGRyLCAweDA1LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gMHg4MDAwIDogMHgwMDAwKTsKIAogCS8qCiAJICogUG9ydCBiYXNlZCBWTEFOIG1hcDogZ2l2ZSBlYWNoIHBvcnQgaXRzIG93biBhZGRyZXNzCiAJICogZGF0YWJhc2UsIGFsbG93IHRoZSBDUFUgcG9ydCB0byB0YWxrIHRvIGVhY2ggb2YgdGhlICdyZWFsJwogCSAqIHBvcnRzLCBhbmQgYWxsb3cgZWFjaCBvZiB0aGUgJ3JlYWwnIHBvcnRzIHRvIG9ubHkgdGFsayB0bwotCSAqIHRoZSBDUFUgcG9ydC4KKwkgKiB0aGUgdXBzdHJlYW0gcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNiwKLQkJCSgocCAmIDB4ZikgPDwgMTIpIHwKLQkJCSAoKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkJZHMtPnZhbGlkX3BvcnRfbWFzayA6Ci0JCQkJKDEgPDwgZHMtPmNwdV9wb3J0KSkpOworCXZhbCA9IChwICYgMHhmKSA8PCAxMjsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSkKKwkJdmFsIHw9IGRzLT5waHlzX3BvcnRfbWFzazsKKwllbHNlCisJCXZhbCB8PSAxIDw8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNiwgdmFsKTsKIAogCS8qCiAJICogRGVmYXVsdCBWTEFOIElEIGFuZCBwcmlvcml0eTogZG9uJ3Qgc2V0IGEgZGVmYXVsdCBWTEFOCkBAIC0yMDcsMTMgKzIzMywxNSBAQAogCSAqIHVudGFnZ2VkIGZyYW1lcyBvbiB0aGlzIHBvcnQsIGRvIGEgZGVzdGluYXRpb24gYWRkcmVzcwogCSAqIGxvb2t1cCBvbiByZWNlaXZlZCBwYWNrZXRzIGFzIHVzdWFsLCBkb24ndCBzZW5kIGEgY29weQogCSAqIG9mIGFsbCB0cmFuc21pdHRlZC9yZWNlaXZlZCBmcmFtZXMgb24gdGhpcyBwb3J0IHRvIHRoZQotCSAqIENQVSwgYW5kIGNvbmZpZ3VyZSB0aGUgQ1BVIHBvcnQgbnVtYmVyLiAgQWxzbywgaWYgdGhpcwotCSAqIGlzIHRoZSBDUFUgcG9ydCwgZW5hYmxlIGZvcndhcmRpbmcgb2YgdW5rbm93biBtdWx0aWNhc3QKLQkgKiBhZGRyZXNzZXMuCisJICogQ1BVLCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0IG51bWJlci4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gbXVsdGljYXN0IGFkZHJlc3Nlcy4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwOCwKLQkJCSgocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHgwMGMwIDogMHgwMDgwKSB8Ci0JCQkgZHMtPmNwdV9wb3J0KTsKKwl2YWwgPSAweDAwODAgfCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQl2YWwgfD0gMHgwMDQwOworCVJFR19XUklURShhZGRyLCAweDA4LCB2YWwpOwogCiAJLyoKIAkgKiBSYXRlIENvbnRyb2w6IGRpc2FibGUgaW5ncmVzcyByYXRlIGxpbWl0aW5nLgpAQCAtMjY4LDcgKzI5Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKIAkJcmV0ID0gbXY4OGU2MTMxX3NldHVwX3BvcnQoZHMsIGkpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CkBAIC0yNzksNyArMzA3LDcgQEAKIAogc3RhdGljIGludCBtdjg4ZTYxMzFfcG9ydF90b19waHlfYWRkcihpbnQgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSAwICYmIHBvcnQgIT0gMyAmJiBwb3J0IDw9IDcpCisJaWYgKHBvcnQgPj0gMCAmJiBwb3J0IDw9IDExKQogCQlyZXR1cm4gcG9ydDsKIAlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS9uZXQvZHNhL3NsYXZlLmMgYi9uZXQvZHNhL3NsYXZlLmMKaW5kZXggYTY4ZmQ3OS4uZWQxMzExOCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKyBiL25ldC9kc2Evc2xhdmUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3NsYXZlLmMgLSBTbGF2ZSBkZXZpY2UgaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTksNyArMTksNyBAQAogewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGJ1cy0+cHJpdjsKIAotCWlmIChkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCisJaWYgKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQogCQlyZXR1cm4gZHMtPmRydi0+cGh5X3JlYWQoZHMsIGFkZHIsIHJlZyk7CiAKIAlyZXR1cm4gMHhmZmZmOwpAQCAtMjksNyArMjksNyBAQAogewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGJ1cy0+cHJpdjsKIAotCWlmIChkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCisJaWYgKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQogCQlyZXR1cm4gZHMtPmRydi0+cGh5X3dyaXRlKGRzLCBhZGRyLCByZWcsIHZhbCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQzLDE1ICs0MywyNCBAQAogCWRzLT5zbGF2ZV9taWlfYnVzLT53cml0ZSA9IGRzYV9zbGF2ZV9waHlfd3JpdGU7CiAJc25wcmludGYoZHMtPnNsYXZlX21paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlczolLjJ4IiwKIAkJCWRzLT5tYXN0ZXJfbWlpX2J1cy0+aWQsIGRzLT5wZC0+c3dfYWRkcik7Ci0JZHMtPnNsYXZlX21paV9idXMtPnBhcmVudCA9ICYoZHMtPm1hc3Rlcl9taWlfYnVzLT5kZXYpOworCWRzLT5zbGF2ZV9taWlfYnVzLT5wYXJlbnQgPSAmZHMtPm1hc3Rlcl9taWlfYnVzLT5kZXY7CiB9CiAKIAogLyogc2xhdmUgZGV2aWNlIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGRzYV9zbGF2ZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRldi0+aWZsaW5rID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXYtPmlmaW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkc2Ffc2xhdmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJaW50IGVycjsKIAogCWlmICghKG1hc3Rlci0+ZmxhZ3MgJiBJRkZfVVApKQpAQCAtODksNyArOTgsNyBAQAogc3RhdGljIGludCBkc2Ffc2xhdmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJZGV2X21jX3Vuc3luYyhtYXN0ZXIsIGRldik7CiAJZGV2X3VuaWNhc3RfdW5zeW5jKG1hc3RlciwgZGV2KTsKQEAgLTEwNyw3ICsxMTYsNyBAQAogc3RhdGljIHZvaWQgZHNhX3NsYXZlX2NoYW5nZV9yeF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY2hhbmdlKQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAKIAlpZiAoY2hhbmdlICYgSUZGX0FMTE1VTFRJKQogCQlkZXZfc2V0X2FsbG11bHRpKG1hc3RlciwgZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSA/IDEgOiAtMSk7CkBAIC0xMTgsNyArMTI3LDcgQEAKIHN0YXRpYyB2b2lkIGRzYV9zbGF2ZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAKIAlkZXZfbWNfc3luYyhtYXN0ZXIsIGRldik7CiAJZGV2X3VuaWNhc3Rfc3luYyhtYXN0ZXIsIGRldik7CkBAIC0xMjcsNyArMTM2LDcgQEAKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphKQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gYTsKIAlpbnQgZXJyOwogCkBAIC0yODgsNiArMjk3LDcgQEAKIAogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19EU0EKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNhX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gZHNhX3htaXQsCkBAIC0zMDAsNiArMzEwLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19FRFNBCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVkc2FfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gZHNhX3NsYXZlX2luaXQsCiAJLm5kb19vcGVuCSAJPSBkc2Ffc2xhdmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBlZHNhX3htaXQsCkBAIC0zMTIsNiArMzIzLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRyYWlsZXJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gZHNhX3NsYXZlX2luaXQsCiAJLm5kb19vcGVuCSAJPSBkc2Ffc2xhdmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0cmFpbGVyX3htaXQsCkBAIC0zMjgsNyArMzQwLDcgQEAKIGRzYV9zbGF2ZV9jcmVhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCSBpbnQgcG9ydCwgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gZHMtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IGRzLT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldjsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnA7CiAJaW50IHJldDsKQEAgLTM0Myw3ICszNTUsNyBAQAogCW1lbWNweShzbGF2ZV9kZXYtPmRldl9hZGRyLCBtYXN0ZXItPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJc2xhdmVfZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCi0Jc3dpdGNoIChkcy0+dGFnX3Byb3RvY29sKSB7CisJc3dpdGNoIChkcy0+ZHN0LT50YWdfcHJvdG9jb2wpIHsKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRFNBCiAJY2FzZSBodG9ucyhFVEhfUF9EU0EpOgogCQlzbGF2ZV9kZXYtPm5ldGRldl9vcHMgPSAmZHNhX25ldGRldl9vcHM7CmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19kc2EuYyBiL25ldC9kc2EvdGFnX2RzYS5jCmluZGV4IDYzZTUzMmEuLjhmYTI1YmEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2RzYS5jCisrKyBiL25ldC9kc2EvdGFnX2RzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvdGFnX2RzYS5jIC0gKE5vbi1ldGhlcnR5cGUpIERTQSB0YWdnaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDcgKzM2LDcgQEAKIAkJICogQ29uc3RydWN0IHRhZ2dlZCBGUk9NX0NQVSBEU0EgdGFnIGZyb20gODAyLjFxIHRhZy4KIAkJICovCiAJCWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyICogRVRIX0FMRU47Ci0JCWRzYV9oZWFkZXJbMF0gPSAweDYwOworCQlkc2FfaGVhZGVyWzBdID0gMHg2MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWRzYV9oZWFkZXJbMV0gPSBwLT5wb3J0IDw8IDM7CiAKIAkJLyoKQEAgLTU3LDcgKzU3LDcgQEAKIAkJICogQ29uc3RydWN0IHVudGFnZ2VkIEZST01fQ1BVIERTQSB0YWcuCiAJCSAqLwogCQlkc2FfaGVhZGVyID0gc2tiLT5kYXRhICsgMiAqIEVUSF9BTEVOOwotCQlkc2FfaGVhZGVyWzBdID0gMHg0MDsKKwkJZHNhX2hlYWRlclswXSA9IDB4NDAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQlkc2FfaGVhZGVyWzFdID0gcC0+cG9ydCA8PCAzOwogCQlkc2FfaGVhZGVyWzJdID0gMHgwMDsKIAkJZHNhX2hlYWRlclszXSA9IDB4MDA7CkBAIC02NSw3ICs2NSw3IEBACiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRFNBKTsKIAotCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC03OCwxMSArNzgsMTMgQEAKIHN0YXRpYyBpbnQgZHNhX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKmRzYV9oZWFkZXI7CisJaW50IHNvdXJjZV9kZXZpY2U7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwpAQCAtOTgsMTYgKzEwMCwyNCBAQAogCWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgLSAyOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELCBhbmQKLQkgKiB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGlzIHplcm8uCisJICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRC4KIAkgKi8KLQlpZiAoKGRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweDAwICYmIChkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHhjMCkKKwlpZiAoKGRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweDAwICYmIChkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHhjMCkKIAkJZ290byBvdXRfZHJvcDsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqIERldGVybWluZSBzb3VyY2UgZGV2aWNlIGFuZCBwb3J0LgogCSAqLworCXNvdXJjZV9kZXZpY2UgPSBkc2FfaGVhZGVyWzBdICYgMHgxZjsKIAlzb3VyY2VfcG9ydCA9IChkc2FfaGVhZGVyWzFdID4+IDMpICYgMHgxZjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIGRldmljZSBleGlzdHMgYW5kIHRoYXQgdGhlIHNvdXJjZQorCSAqIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqLworCWlmIChzb3VyY2VfZGV2aWNlID49IGRzdC0+cGQtPm5yX2NoaXBzKQorCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1tzb3VyY2VfZGV2aWNlXTsKIAlpZiAoc291cmNlX3BvcnQgPj0gRFNBX01BWF9QT1JUUyB8fCBkcy0+cG9ydHNbc291cmNlX3BvcnRdID09IE5VTEwpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTE3NSw3ICsxODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRzYV9wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZHNhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9EU0EpLAogCS5mdW5jCT0gZHNhX3JjdiwKIH07CmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19lZHNhLmMgYi9uZXQvZHNhL3RhZ19lZHNhLmMKaW5kZXggNjE5N2Y5YS4uODE1NjA3YiAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfZWRzYS5jCisrKyBiL25ldC9kc2EvdGFnX2Vkc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ19lZHNhLmMgLSBFdGhlcnR5cGUgRFNBIHRhZ2dpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDUsNyArNDUsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDYwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NjAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAogCQkvKgpAQCAtNzAsNyArNzAsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDQwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NDAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAkJZWRzYV9oZWFkZXJbNl0gPSAweDAwOwogCQllZHNhX2hlYWRlcls3XSA9IDB4MDA7CkBAIC03OCw3ICs3OCw3IEBACiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRURTQSk7CiAKLQlza2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlza2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtOTEsMTEgKzkxLDEzIEBACiBzdGF0aWMgaW50IGVkc2FfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKmVkc2FfaGVhZGVyOworCWludCBzb3VyY2VfZGV2aWNlOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTExMSwxNiArMTEzLDI0IEBACiAJZWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELCBhbmQKLQkgKiB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGlzIHplcm8uCisJICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRC4KIAkgKi8KLQlpZiAoKGVkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHgwMCAmJiAoZWRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweGMwKQorCWlmICgoZWRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweDAwICYmIChlZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4YzApCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKiBEZXRlcm1pbmUgc291cmNlIGRldmljZSBhbmQgcG9ydC4KIAkgKi8KKwlzb3VyY2VfZGV2aWNlID0gZWRzYV9oZWFkZXJbMF0gJiAweDFmOwogCXNvdXJjZV9wb3J0ID0gKGVkc2FfaGVhZGVyWzFdID4+IDMpICYgMHgxZjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIGRldmljZSBleGlzdHMgYW5kIHRoYXQgdGhlIHNvdXJjZQorCSAqIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqLworCWlmIChzb3VyY2VfZGV2aWNlID49IGRzdC0+cGQtPm5yX2NoaXBzKQorCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1tzb3VyY2VfZGV2aWNlXTsKIAlpZiAoc291cmNlX3BvcnQgPj0gRFNBX01BWF9QT1JUUyB8fCBkcy0+cG9ydHNbc291cmNlX3BvcnRdID09IE5VTEwpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTE5NCw3ICsyMDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVkc2FfcGFja2V0X3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVkc2FfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0VEU0EpLAogCS5mdW5jCT0gZWRzYV9yY3YsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfdHJhaWxlci5jIGIvbmV0L2RzYS90YWdfdHJhaWxlci5jCmluZGV4IGQ3ZTdmNDIuLjFjM2UzMGMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX3RyYWlsZXIuYworKysgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS90YWdfdHJhaWxlci5jIC0gVHJhaWxlciB0YWcgZm9ybWF0IGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTU5LDcgKzU5LDcgQEAKIAogCW5za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfVFJBSUxFUik7CiAKLQluc2tiLT5kZXYgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJbnNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQobnNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNjgsMTIgKzY4LDE0IEBACiBzdGF0aWMgaW50IHRyYWlsZXJfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKnRyYWlsZXI7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CisJZHMgPSBkc3QtPmRzWzBdOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCkBAIC0xMTEsNyArMTEzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB0cmFpbGVyX3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB0cmFpbGVyX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9UUkFJTEVSKSwKIAkuZnVuYwk9IHRyYWlsZXJfcmN2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCmluZGV4IDdiZjM1NTguLjZmNDc5ZmEgMTAwNjQ0Ci0tLSBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKKysrIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwpAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWNvbmV0X3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlY29uZXRfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9CQljcHVfdG9fYmUxNihFVEhfUF9FQ09ORVQpLAogCS5mdW5jID0JCWVjb25ldF9yY3YsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggNjkxMjY4Zi4uYjJjZjkxZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC0zNSw3ICszNSw3IEBACiAKIAkgIGF0IGJvb3QgdGltZSBhZnRlciB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZC4KIAotCSAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHdpbGwgYWxzbyBnZXQgdGhlIHJwX2ZpbHRlciwgd2hpY2gKKwkgIElmIHlvdSB0dXJuIG9uIElQIGZvcndhcmRpbmcsIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHJwX2ZpbHRlciwgd2hpY2gKIAkgIGF1dG9tYXRpY2FsbHkgcmVqZWN0cyBpbmNvbWluZyBwYWNrZXRzIGlmIHRoZSByb3V0aW5nIHRhYmxlIGVudHJ5CiAJICBmb3IgdGhlaXIgc291cmNlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhleSdyZQogCSAgYXJyaXZpbmcgb24uIFRoaXMgaGFzIHNlY3VyaXR5IGFkdmFudGFnZXMgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUKQEAgLTQ2LDEyICs0NiwxNiBAQAogCSAgcnBfZmlsdGVyIG9uIHVzZToKIAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvPGRldmljZT4vcnBfZmlsdGVyCi0JICBvcgorCSAgIGFuZAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL3JwX2ZpbHRlcgogCisJICBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdCBpbiBzdGFydHVwIHNjcmlwdHMuCisJICBGb3IgZGV0YWlscyBhYm91dCBycF9maWx0ZXIgc3RyaWN0IGFuZCBsb29zZSBtb2RlIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0Pi4KKwogCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgogCi1jaG9pY2UgCitjaG9pY2UKIAlwcm9tcHQgIkNob29zZSBJUDogRklCIGxvb2t1cCBhbGdvcml0aG0gKGNob29zZSBGSUJfSEFTSCBpZiB1bnN1cmUpIgogCWRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSCiAJZGVmYXVsdCBBU0tfSVBfRklCX0hBU0gKQEAgLTU5LDI3ICs2MywyOSBAQAogY29uZmlnIEFTS19JUF9GSUJfSEFTSAogCWJvb2wgIkZJQl9IQVNIIgogCS0tLWhlbHAtLS0KLQlDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCisJICBDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCiAKIGNvbmZpZyBJUF9GSUJfVFJJRQogCWJvb2wgIkZJQl9UUklFIgogCS0tLWhlbHAtLS0KLQlVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLiAKLSAgICAgICAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQotCW51bWJlciBvZiByb3V0ZXMuCisJICBVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLgorCSAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQorCSAgbnVtYmVyIG9mIHJvdXRlcy4KIAotCUxDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCi0JcGVyZm9ybXMgYmV0dGVyIHRoYW4gRklCX0hBU0ggZm9yIGxhcmdlIHJvdXRpbmcgdGFibGVzLgotCUJ1dCwgaXQgY29uc3VtZXMgbW9yZSBtZW1vcnkgYW5kIGlzIG1vcmUgY29tcGxleC4KLQkKLQlMQy10cmllIGlzIGRlc2NyaWJlZCBpbjoKLQkKLSAJSVAtYWRkcmVzcyBsb29rdXAgdXNpbmcgTEMtdHJpZXMuIFN0ZWZhbiBOaWxzc29uIGFuZCBHdW5uYXIgS2FybHNzb24KLSAJSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsIEp1bmUgMTk5OQotCUFuIGV4cGVyaW1lbnRhbCBzdHVkeSBvZiBjb21wcmVzc2lvbiBtZXRob2RzIGZvciBkeW5hbWljIHRyaWVzCi0gCVN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KLSAJaHR0cDovL3d3dy5uYWRhLmt0aC5zZS9+c25pbHNzb24vcHVibGljL3BhcGVycy9keW50cmllMi8KLSAgICAgICAKKwkgIExDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCisJICBwZXJmb3JtcyBiZXR0ZXIgdGhhbiBGSUJfSEFTSCBmb3IgbGFyZ2Ugcm91dGluZyB0YWJsZXMuCisJICBCdXQsIGl0IGNvbnN1bWVzIG1vcmUgbWVtb3J5IGFuZCBpcyBtb3JlIGNvbXBsZXguCisKKwkgIExDLXRyaWUgaXMgZGVzY3JpYmVkIGluOgorCisJICBJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgorCSAgSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsCisJICBKdW5lIDE5OTkKKworCSAgQW4gZXhwZXJpbWVudGFsIHN0dWR5IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgZm9yIGR5bmFtaWMgdHJpZXMKKwkgIFN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KKwkgIGh0dHA6Ly93d3cubmFkYS5rdGguc2UvfnNuaWxzc29uL3B1YmxpYy9wYXBlcnMvZHludHJpZTIvCisKIGVuZGNob2ljZQogCiBjb25maWcgSVBfRklCX0hBU0gKQEAgLTE5MSw3ICsxOTcsNyBAQAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCiAKICMgbm90IHlldCByZWFkeS4uCi0jICAgYm9vbCAnICAgIElQOiBBUlAgc3VwcG9ydCcgQ09ORklHX0lQX1BOUF9BUlAJCQorIyAgIGJvb2wgJyAgICBJUDogQVJQIHN1cHBvcnQnIENPTkZJR19JUF9QTlBfQVJQCiBjb25maWcgTkVUX0lQSVAKIAl0cmlzdGF0ZSAiSVA6IHR1bm5lbGluZyIKIAlzZWxlY3QgSU5FVF9UVU5ORUwKQEAgLTM2MSw3ICszNjcsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wgKElQQ29tcCkgKFJGQzMxNzMpLAogCSAgdHlwaWNhbGx5IG5lZWRlZCBmb3IgSVBzZWMuCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfWEZSTV9UVU5ORUwKQEAgLTQxNSw3ICs0MjEsNyBAQAogCSAgU3VwcG9ydCBmb3IgSU5FVCAoVENQLCBEQ0NQLCBldGMpIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5CiAJICBuYXRpdmUgTGludXggdG9vbHMgc3VjaCBhcyBzcy4gc3MgaXMgaW5jbHVkZWQgaW4gaXByb3V0ZTIsIGN1cnJlbnRseQogCSAgZG93bmxvYWRhYmxlIGF0IDxodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9JcHJvdXRlMj4uCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfVENQX0RJQUcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCA2MjdiZTRkLi5kNWFhYWJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0xNTAwLDcgKzE1MDAsNyBAQAogICoJSVAgcHJvdG9jb2wgbGF5ZXIgaW5pdGlhbGlzZXIKICAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwX3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5mdW5jID0gaXBfcmN2LAogCS5nc29fc2VuZF9jaGVjayA9IGluZXRfZ3NvX3NlbmRfY2hlY2ssCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IDNmNmI3MzUuLmYxMTkzMWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC04MDEsOCArODAxLDExIEBACiAgKiAgY2FjaGUuCiAgKi8KIAotCS8qIFNwZWNpYWwgY2FzZTogSVB2NCBkdXBsaWNhdGUgYWRkcmVzcyBkZXRlY3Rpb24gcGFja2V0IChSRkMyMTMxKSAqLwotCWlmIChzaXAgPT0gMCkgeworCS8qCisJICogIFNwZWNpYWwgY2FzZTogSVB2NCBkdXBsaWNhdGUgYWRkcmVzcyBkZXRlY3Rpb24gcGFja2V0IChSRkMyMTMxKQorCSAqICBhbmQgR3JhdHVpdG91cyBBUlAvQVJQIEFubm91bmNlLiAoUkZDMzkyNywgU2VjdGlvbiAyLjQpCisJICovCisJaWYgKHNpcCA9PSAwIHx8IHRpcCA9PSBzaXApIHsKIAkJaWYgKGFycC0+YXJfb3AgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkgJiYKIAkJICAgIGluZXRfYWRkcl90eXBlKG5ldCwgdGlwKSA9PSBSVE5fTE9DQUwgJiYKIAkJICAgICFhcnBfaWdub3JlKGluX2Rldiwgc2lwLCB0aXApKQpAQCAtODkyLDcgKzg5NSw3IEBACiBvdXQ6CiAJaWYgKGluX2RldikKIAkJaW5fZGV2X3B1dChpbl9kZXYpOwotCWtmcmVlX3NrYihza2IpOworCWNvbnN1bWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjUsNyArMTIyOCw3IEBACiAgKglDYWxsZWQgb25jZSBvbiBzdGFydHVwLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXJwX3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBhcnBfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX0FSUCksCiAJLmZ1bmMgPQlhcnBfcmN2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwppbmRleCA2YmIyNjM1Li43YmM5OTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMKKysrIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCkBAIC0zLDExICszLDE2IEBACiAgKgogICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ0lQU08gMi4yIHByb3RvY29sIGFzIHNwZWNpZmllZCBpbgogICogZHJhZnQtaWV0Zi1jaXBzby1pcHNlY3VyaXR5LTAxLnR4dCB3aXRoIGFkZGl0aW9uYWwgdGFnIHR5cGVzIGFzIGZvdW5kIGluCi0gKiBGSVBTLTE4OCwgY29waWVzIG9mIGJvdGggZG9jdW1lbnRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRG9jdW1lbnRhdGlvbgotICogZGlyZWN0b3J5LiAgV2hpbGUgQ0lQU08gbmV2ZXIgYmVjYW1lIGEgZnVsbCBJRVRGIFJGQyBzdGFuZGFyZCBtYW55IHZlbmRvcnMKKyAqIEZJUFMtMTg4LiAgV2hpbGUgQ0lQU08gbmV2ZXIgYmVjYW1lIGEgZnVsbCBJRVRGIFJGQyBzdGFuZGFyZCBtYW55IHZlbmRvcnMKICAqIGhhdmUgY2hvc2VuIHRvIGFkb3B0IHRoZSBwcm90b2NvbCBhbmQgb3ZlciB0aGUgeWVhcnMgaXQgaGFzIGJlY29tZSBhCiAgKiBkZS1mYWN0byBzdGFuZGFyZCBmb3IgbGFiZWxlZCBuZXR3b3JraW5nLgogICoKKyAqIFRoZSBDSVBTTyBkcmFmdCBzcGVjaWZpY2F0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUga2VybmVsJ3MgRG9jdW1lbnRhdGlvbgorICogZGlyZWN0b3J5IGFzIHdlbGwgYXMgdGhlIGZvbGxvd2luZyBVUkw6CisgKiAgIGh0dHA6Ly9uZXRsYWJlbC5zb3VyY2Vmb3JnZS5uZXQvZmlsZXMvZHJhZnQtaWV0Zi1jaXBzby1pcHNlY3VyaXR5LTAxLnR4dAorICogVGhlIEZJUFMtMTg4IHNwZWNpZmljYXRpb24gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgVVJMOgorICogICBodHRwOi8vd3d3Lml0bC5uaXN0Lmdvdi9maXBzcHVicy9maXAxODguaHRtCisgKgogICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCBkNTE5YTZhLi4xMjZiYjkxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMjE2LDcgKzEyMTYsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIG5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIHBpZCwgUlROTEdSUF9JUFY0X0lGQUREUiwgbmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDc0MWU0ZmEuLmNhZmNjNDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlmaWJfcmVzX3B1dCgmcmVzKTsKIAlpZiAobm9fYWRkcikKIAkJZ290byBsYXN0X3Jlc29ydDsKLQlpZiAocnBmKQorCWlmIChycGYgPT0gMSkKIAkJZ290byBlX2ludmFsOwogCWZsLm9pZiA9IGRldi0+aWZpbmRleDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IDQ4MTdkZWEuLmY4MzFkZjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYworKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTMyMiw4ICszMjIsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgaW5mby0+bmxfbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNF9ST1VURSwKLQkJCSAgaW5mby0+bmxoLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIGluZm8tPm5sX25ldCwgaW5mby0+cGlkLCBSVE5MR1JQX0lQVjRfUk9VVEUsCisJCSAgICBpbmZvLT5ubGgsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKGluZm8tPm5sX25ldCwgUlROTEdSUF9JUFY0X1JPVVRFLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IDM4MjgwMGEuLjNmNTA4MDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAKIGludCBfX2luaXQgaWNtcF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmljbXBfc2tfb3BzKTsKKwlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaWNtcF9za19vcHMpOwogfQogCiBFWFBPUlRfU1lNQk9MKGljbXBfZXJyX2NvbnZlcnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCmluZGV4IDZjNTJlMDguLmVhZjNlMmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKQEAgLTI2Nyw2ICsyNjcsNyBAQAogCiBzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfZmluZChzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLAogCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCkKKwlfX3JlbGVhc2VzKCZmLT5sb2NrKQogewogCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwppbmRleCA2NjU5YWMwLi43OTg1MzQ2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKQEAgLTQ2Myw2ICs0NjMsNyBAQAogc3RhdGljIGludCBpcF9mcmFnX3JlYXNtKHN0cnVjdCBpcHEgKnFwLCBzdHJ1Y3Qgc2tfYnVmZiAqcHJldiwKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZihxcC0+cS5uZXQsIHN0cnVjdCBuZXQsIGlwdjQuZnJhZ3MpOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBza19idWZmICpmcCwgKmhlYWQgPSBxcC0+cS5mcmFnbWVudHM7CiAJaW50IGxlbjsKQEAgLTU0OCw3ICs1NDksNyBAQAogCWlwaCA9IGlwX2hkcihoZWFkKTsKIAlpcGgtPmZyYWdfb2ZmID0gMDsKIAlpcGgtPnRvdF9sZW4gPSBodG9ucyhsZW4pOwotCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKKwlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CiAJcXAtPnEuZnJhZ21lbnRzID0gTlVMTDsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCAwN2ExODhhLi5lNjI1MTBkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTgwMyw3ICs4MDMsOCBAQAogI2VuZGlmCiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IDUwNzlkZmIuLjkwNTQxMzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYworKysgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTMyNyw3ICszMjcsNyBAQAogCWlmICh0LT5wYXJtcy5pcGgudHRsID09IDAgJiYgdHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGppZmZpZXMgLSB0LT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKQogCQl0LT5lcnJfY291bnQrKzsKIAllbHNlCiAJCXQtPmVycl9jb3VudCA9IDE7CkBAIC00NjYsNyArNDY2LDggQEAKIAl9CiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKIAkJfSBlbHNlCkBAIC03NTAsNyArNzUxLDcgQEAKIAkucHJpb3JpdHkJPQkxLAogfTsKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9JTkZPICJJUHY0IG92ZXIgSVB2NCB0dW5uZWxpbmcgZHJpdmVyXG4iOwogCiBzdGF0aWMgdm9pZCBpcGlwX2Rlc3Ryb3lfdHVubmVscyhzdHJ1Y3QgaXBpcF9uZXQgKmlwbikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IDRmNDU0Y2UuLjM1YzVmNmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtNzYsNiArNzYsNyBAQAogLyoKICAqIFVuZm9ydHVuYXRseSwgX2IgYW5kIF9tYXNrIGFyZSBub3QgYWxpZ25lZCB0byBhbiBpbnQgKG9yIGxvbmcgaW50KQogICogU29tZSBhcmNoZXMgZG9udCBjYXJlLCB1bnJvbGxpbmcgdGhlIGxvb3AgaXMgYSB3aW4gb24gdGhlbS4KKyAqIEZvciBvdGhlciBhcmNoZXMsIHdlIG9ubHkgaGF2ZSBhIDE2Yml0IGFsaWduZW1lbnQuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKl9hLCBjb25zdCBjaGFyICpfYiwgY29uc3QgY2hhciAqX21hc2spCiB7CkBAIC04MywxMCArODQsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQoX2EsIF9iLCBfbWFzayk7CiAjZWxzZQogCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwljb25zdCB1MTYgKmEgPSAoY29uc3QgdTE2ICopX2E7CisJY29uc3QgdTE2ICpiID0gKGNvbnN0IHUxNiAqKV9iOworCWNvbnN0IHUxNiAqbWFzayA9IChjb25zdCB1MTYgKilfbWFzazsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBJRk5BTVNJWjsgaSsrKQotCQlyZXQgfD0gKF9hW2ldIF4gX2JbaV0pICYgX21hc2tbaV07CisJZm9yIChpID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1MTYpOyBpKyspCisJCXJldCB8PSAoYVtpXSBeIGJbaV0pICYgbWFza1tpXTsKICNlbmRpZgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDkwYjJmM2MuLjI0NTFhZWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC02NjEsNiArNjYxLDQ3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3htaXRfc2l6ZV9nb2FsKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3csCisJCQkJICAgICAgIGludCBsYXJnZV9hbGxvd2VkKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXUzMiB4bWl0X3NpemVfZ29hbCwgb2xkX3NpemVfZ29hbDsKKworCXhtaXRfc2l6ZV9nb2FsID0gbXNzX25vdzsKKworCWlmIChsYXJnZV9hbGxvd2VkICYmIHNrX2Nhbl9nc28oc2spKSB7CisJCXhtaXRfc2l6ZV9nb2FsID0gKChzay0+c2tfZ3NvX21heF9zaXplIC0gMSkgLQorCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW4gLQorCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuIC0KKwkJCQkgIHRwLT50Y3BfaGVhZGVyX2xlbik7CisKKwkJeG1pdF9zaXplX2dvYWwgPSB0Y3BfYm91bmRfdG9faGFsZl93bmQodHAsIHhtaXRfc2l6ZV9nb2FsKTsKKworCQkvKiBXZSB0cnkgaGFyZCB0byBhdm9pZCBkaXZpZGVzIGhlcmUgKi8KKwkJb2xkX3NpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbF9zZWdzICogbXNzX25vdzsKKworCQlpZiAobGlrZWx5KG9sZF9zaXplX2dvYWwgPD0geG1pdF9zaXplX2dvYWwgJiYKKwkJCSAgIG9sZF9zaXplX2dvYWwgKyBtc3Nfbm93ID4geG1pdF9zaXplX2dvYWwpKSB7CisJCQl4bWl0X3NpemVfZ29hbCA9IG9sZF9zaXplX2dvYWw7CisJCX0gZWxzZSB7CisJCQl0cC0+eG1pdF9zaXplX2dvYWxfc2VncyA9IHhtaXRfc2l6ZV9nb2FsIC8gbXNzX25vdzsKKwkJCXhtaXRfc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsX3NlZ3MgKiBtc3Nfbm93OworCQl9CisJfQorCisJcmV0dXJuIG1heCh4bWl0X3NpemVfZ29hbCwgbXNzX25vdyk7Cit9CisKK3N0YXRpYyBpbnQgdGNwX3NlbmRfbXNzKHN0cnVjdCBzb2NrICpzaywgaW50ICpzaXplX2dvYWwsIGludCBmbGFncykKK3sKKwlpbnQgbXNzX25vdzsKKworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOworCSpzaXplX2dvYWwgPSB0Y3BfeG1pdF9zaXplX2dvYWwoc2ssIG1zc19ub3csICEoZmxhZ3MgJiBNU0dfT09CKSk7CisKKwlyZXR1cm4gbXNzX25vdzsKK30KKwogc3RhdGljIHNzaXplX3QgZG9fdGNwX3NlbmRwYWdlcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBwb2Zmc2V0LAogCQkJIHNpemVfdCBwc2l6ZSwgaW50IGZsYWdzKQogewpAQCAtNjc3LDEzICs3MTgsMTIgQEAKIAogCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CiAKLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCWNvcGllZCA9IDA7CiAKIAllcnIgPSAtRVBJUEU7CiAJaWYgKHNrLT5za19lcnIgfHwgKHNrLT5za19zaHV0ZG93biAmIFNFTkRfU0hVVERPV04pKQotCQlnb3RvIGRvX2Vycm9yOworCQlnb3RvIG91dF9lcnI7CiAKIAl3aGlsZSAocHNpemUgPiAwKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzayk7CkBAIC03NjEsOCArODAxLDcgQEAKIAkJaWYgKChlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssICZ0aW1lbykpICE9IDApCiAJCQlnb3RvIGRvX2Vycm9yOwogCi0JCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAl9CiAKIG91dDoKQEAgLTg0NCw4ICs4ODMsNyBAQAogCS8qIFRoaXMgc2hvdWxkIGJlIGluIHBvbGwgKi8KIAljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOwogCi0JbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0Jc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAogCS8qIE9rIGNvbW1lbmNlIHNlbmRpbmcuICovCiAJaW92bGVuID0gbXNnLT5tc2dfaW92bGVuOwpAQCAtODU0LDcgKzg5Miw3IEBACiAKIAllcnIgPSAtRVBJUEU7CiAJaWYgKHNrLT5za19lcnIgfHwgKHNrLT5za19zaHV0ZG93biAmIFNFTkRfU0hVVERPV04pKQotCQlnb3RvIGRvX2Vycm9yOworCQlnb3RvIG91dF9lcnI7CiAKIAl3aGlsZSAoLS1pb3ZsZW4gPj0gMCkgewogCQlpbnQgc2VnbGVuID0gaW92LT5pb3ZfbGVuOwpAQCAtMTAwNyw4ICsxMDQ1LDcgQEAKIAkJCWlmICgoZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCAmdGltZW8pKSAhPSAwKQogCQkJCWdvdG8gZG9fZXJyb3I7CiAKLQkJCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCQkJc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCQkJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCQl9CiAJfQogCkBAIC0xMDQ1LDggKzEwODIsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgdGNwX3JlY3ZfdXJnKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lbywKLQkJCXN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbiwgaW50IGZsYWdzLAotCQkJaW50ICphZGRyX2xlbikKKwkJCXN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbiwgaW50IGZsYWdzKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCkBAIC0xNjYxLDcgKzE2OTcsNyBAQAogCXJldHVybiBlcnI7CiAKIHJlY3ZfdXJnOgotCWVyciA9IHRjcF9yZWN2X3VyZyhzaywgdGltZW8sIG1zZywgbGVuLCBmbGFncywgYWRkcl9sZW4pOworCWVyciA9IHRjcF9yZWN2X3VyZyhzaywgdGltZW8sIG1zZywgbGVuLCBmbGFncyk7CiAJZ290byBvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iaWMuYyBiL25ldC9pcHY0L3RjcF9iaWMuYwppbmRleCA3ZWI3NjM2Li4zYjUzZmQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2JpYy5jCkBAIC0xNDksMTYgKzE0OSw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAllbHNlIHsKIAkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKLQotCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgotCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZAotCQkgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gY2EtPmNudCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIGNhLT5jbnQpOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggNGVjNWI0ZS4uZTkyYmViOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0zMzYsNiArMzM2LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2xvd19zdGFydCk7CiAKKy8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kIChvciBhbHRlcm5hdGl2ZSB3KSAqLwordm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdykKK3sKKwlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB3KSB7CisJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQl0cC0+c25kX2N3bmQrKzsKKwkJdHAtPnNuZF9jd25kX2NudCA9IDA7CisJfSBlbHNlIHsKKwkJdHAtPnNuZF9jd25kX2NudCsrOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRjcF9jb25nX2F2b2lkX2FpKTsKKwogLyoKICAqIFRDUCBSZW5vIGNvbmdlc3Rpb24gY29udHJvbAogICogVGhpcyBpcyBzcGVjaWFsIGNhc2UgdXNlZCBmb3IgZmFsbGJhY2sgYXMgd2VsbC4KQEAgLTM2NSwxMyArMzc4LDcgQEAKIAkJCQl0cC0+c25kX2N3bmQrKzsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Jlbm9fY29uZ19hdm9pZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY3ViaWMuYyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCmluZGV4IGVlNDY3ZWMuLjcxZDVmMmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jdWJpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCkBAIC0yOTQsMTYgKzI5NCw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAl9IGVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwotCi0JCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCi0JCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCi0JCSAqLwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgY2EtPmNudCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHRjcC5jIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwppbmRleCA5Mzc1NDliLi4yNmQ1YzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHRjcC5jCisrKyBiL25ldC9pcHY0L3RjcF9odGNwLmMKQEAgLTExNSw4ICsxMTUsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBhY2hpZXZlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLwotCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlICE9IFRDUF9DQV9PcGVuICYmCi0JICAgIGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX0Rpc29yZGVyKSB7CisJaWYgKCEoKDEgPDwgaWNzay0+aWNza19jYV9zdGF0ZSkgJiAoVENQRl9DQV9PcGVuIHwgVENQRl9DQV9EaXNvcmRlcikpKSB7CiAJCWNhLT5wYWNrZXRjb3VudCA9IDA7CiAJCWNhLT5sYXN0dGltZSA9IG5vdzsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBhNjk2MWQ3Li4yYmM4ZTI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KQEAgLTExNzgsMTAgKzExNzksMTggQEAKIAkJaWYgKCEoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYWZ0ZXIocmVjZWl2ZWRfdXB0bywgYWNrX3NlcSkgJiYKLQkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwKLQkJICAgICAhYmVmb3JlKHJlY2VpdmVkX3VwdG8sCi0JCQkgICAgIGFja19zZXEgKyB0cC0+cmVvcmRlcmluZyAqIHRwLT5tc3NfY2FjaGUpKSkgeworCQkvKiBUT0RPOiBXZSB3b3VsZCBsaWtlIHRvIGdldCByaWQgb2YgdGNwX2lzX2ZhY2sodHApIG9ubHkKKwkJICogY29uc3RyYWludCBoZXJlIChzZWUgYWJvdmUpIGJ1dCBmaWd1cmluZyBvdXQgdGhhdCBhdAorCQkgKiBsZWFzdCB0cC0+cmVvcmRlcmluZyBTQUNLIGJsb2NrcyByZXNpZGUgYmV0d2VlbiBhY2tfc2VxCisJCSAqIGFuZCByZWNlaXZlZF91cHRvIGlzIG5vdCBlYXN5IHRhc2sgdG8gZG8gY2hlYXBseSB3aXRoCisJCSAqIHRoZSBhdmFpbGFibGUgZGF0YXN0cnVjdHVyZXMuCisJCSAqCisJCSAqIFdoZXRoZXIgRkFDSyBzaG91bGQgY2hlY2sgaGVyZSBmb3IgdHAtPnJlb3JkZXJpbmcgc2VncworCQkgKiBpbi1iZXR3ZWVuIG9uZSBjb3VsZCBhcmd1ZSBmb3IgZWl0aGVyIHdheSAoaXQgd291bGQgYmUKKwkJICogcmF0aGVyIHNpbXBsZSB0byBpbXBsZW1lbnQgYXMgd2UgY291bGQgY291bnQgZmFja19jb3VudAorCQkgKiBkdXJpbmcgdGhlIHdhbGsgYW5kIGRvIHRwLT5mYWNrZXRzX291dCAtIGZhY2tfY291bnQpLgorCQkgKi8KKwkJaWYgKGFmdGVyKHJlY2VpdmVkX3VwdG8sIGFja19zZXEpKSB7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIApAQCAtMTM3NCw3ICsxMzgzLDggQEAKIAogc3RhdGljIGludCB0Y3Bfc2hpZnRlZF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgc3RydWN0IHRjcF9zYWNrdGFnX3N0YXRlICpzdGF0ZSwKLQkJCSAgIHVuc2lnbmVkIGludCBwY291bnQsIGludCBzaGlmdGVkLCBpbnQgbXNzKQorCQkJICAgdW5zaWduZWQgaW50IHBjb3VudCwgaW50IHNoaWZ0ZWQsIGludCBtc3MsCisJCQkgICBpbnQgZHVwX3NhY2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnByZXYgPSB0Y3Bfd3JpdGVfcXVldWVfcHJldihzaywgc2tiKTsKQEAgLTE0MTAsNyArMTQyMCw3IEBACiAJfQogCiAJLyogV2UgZGlzY2FyZCByZXN1bHRzICovCi0JdGNwX3NhY2t0YWdfb25lKHNrYiwgc2ssIHN0YXRlLCAwLCBwY291bnQpOworCXRjcF9zYWNrdGFnX29uZShza2IsIHNrLCBzdGF0ZSwgZHVwX3NhY2ssIHBjb3VudCk7CiAKIAkvKiBEaWZmZXJlbmNlIGluIHRoaXMgd29uJ3QgbWF0dGVyLCBib3RoIEFDS2VkIGJ5IHRoZSBzYW1lIGN1bXVsLiBBQ0sgKi8KIAlUQ1BfU0tCX0NCKHByZXYpLT5zYWNrZWQgfD0gKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfRVZFUl9SRVRSQU5TKTsKQEAgLTE1NjEsNyArMTU3MSw3IEBACiAKIAlpZiAoIXNrYl9zaGlmdChwcmV2LCBza2IsIGxlbikpCiAJCWdvdG8gZmFsbGJhY2s7Ci0JaWYgKCF0Y3Bfc2hpZnRlZF9za2Ioc2ssIHNrYiwgc3RhdGUsIHBjb3VudCwgbGVuLCBtc3MpKQorCWlmICghdGNwX3NoaWZ0ZWRfc2tiKHNrLCBza2IsIHN0YXRlLCBwY291bnQsIGxlbiwgbXNzLCBkdXBfc2FjaykpCiAJCWdvdG8gb3V0OwogCiAJLyogSG9sZSBmaWxsZWQgYWxsb3dzIGNvbGxhcHNpbmcgd2l0aCB0aGUgbmV4dCBhcyB3ZWxsLCB0aGlzIGlzIHZlcnkKQEAgLTE1ODAsNyArMTU5MCw3IEBACiAJbGVuID0gc2tiLT5sZW47CiAJaWYgKHNrYl9zaGlmdChwcmV2LCBza2IsIGxlbikpIHsKIAkJcGNvdW50ICs9IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCXRjcF9zaGlmdGVkX3NrYihzaywgc2tiLCBzdGF0ZSwgdGNwX3NrYl9wY291bnQoc2tiKSwgbGVuLCBtc3MpOworCQl0Y3Bfc2hpZnRlZF9za2Ioc2ssIHNrYiwgc3RhdGUsIHRjcF9za2JfcGNvdW50KHNrYiksIGxlbiwgbXNzLCAwKTsKIAl9CiAKIG91dDoKQEAgLTE3OTMsMTEgKzE4MDMsNyBAQAogCWZvciAoaSA9IHVzZWRfc2Fja3MgLSAxOyBpID4gMDsgaS0tKSB7CiAJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKIAkJCWlmIChhZnRlcihzcFtqXS5zdGFydF9zZXEsIHNwW2ogKyAxXS5zdGFydF9zZXEpKSB7Ci0JCQkJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHRtcDsKLQotCQkJCXRtcCA9IHNwW2pdOwotCQkJCXNwW2pdID0gc3BbaiArIDFdOwotCQkJCXNwW2ogKyAxXSA9IHRtcDsKKwkJCQlzd2FwKHNwW2pdLCBzcFtqICsgMV0pOwogCiAJCQkJLyogVHJhY2sgd2hlcmUgdGhlIGZpcnN0IFNBQ0sgYmxvY2sgZ29lcyB0byAqLwogCQkJCWlmIChqID09IGZpcnN0X3NhY2tfaW5kZXgpCkBAIC0yNDUyLDYgKzI0NTgsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogTmV3IGhldXJpc3RpY3M6IGl0IGlzIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgd2Ugc3dpdGNoZWQgdG8gcmVzdGFydCB0aW1lcgorICogZWFjaCB0aW1lIHdoZW4gc29tZXRoaW5nIGlzIEFDS2VkLiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cworICogZHVyaW5nIGZhc3QgcmV0cmFuc21pdCB3aXRob3V0IGZhbGxpbmcgdG8gc2xvdyBzdGFydC4KKyAqCisgKiBVc2VmdWxuZXNzIG9mIHRoaXMgYXMgaXMgdmVyeSBxdWVzdGlvbmFibGUsIHNpbmNlIHdlIHNob3VsZCBrbm93IHdoaWNoIG9mCisgKiB0aGUgc2VnbWVudHMgaXMgdGhlIG5leHQgdG8gdGltZW91dCB3aGljaCBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSB0byBmaW5kCisgKiBpbiBnZW5lcmFsIGNhc2UgdW5sZXNzIHdlIGFkZCBzb21lIGRhdGEgc3RydWN0dXJlIGp1c3QgZm9yIHRoYXQuIFRoZQorICogY3VycmVudCBhcHByb2FjaCBjZXJ0YWlubHkgd29uJ3QgZmluZCB0aGUgcmlnaHQgb25lIHRvbyBvZnRlbiBhbmQgd2hlbiBpdAorICogZmluYWxseSBkb2VzIGZpbmQgX3NvbWV0aGluZ18gaXQgdXN1YWxseSBtYXJrcyBsYXJnZSBwYXJ0IG9mIHRoZSB3aW5kb3cKKyAqIHJpZ2h0IGF3YXkgKGJlY2F1c2UgYSByZXRyYW5zbWlzc2lvbiB3aXRoIGEgbGFyZ2VyIHRpbWVzdGFtcCBibG9ja3MgdGhlCisgKiBsb29wIGZyb20gYWR2YW5jaW5nKS4gLWlqCisgKi8KK3N0YXRpYyB2b2lkIHRjcF90aW1lb3V0X3NrYnMoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIXRjcF9pc19mYWNrKHRwKSB8fCAhdGNwX2hlYWRfdGltZWRvdXQoc2spKQorCQlyZXR1cm47CisKKwlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludDsKKwlpZiAodHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPT0gTlVMTCkKKwkJc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spOworCisJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKKwkJCWJyZWFrOworCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCisJCQlicmVhazsKKworCQl0Y3Bfc2tiX21hcmtfbG9zdCh0cCwgc2tiKTsKKwl9CisKKwl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKKworCXRjcF92ZXJpZnlfbGVmdF9vdXQodHApOworfQorCiAvKiBNYXJrIGhlYWQgb2YgcXVldWUgdXAgYXMgbG9zdC4gV2l0aCBSRkMzNTE3IFNBQ0ssIHRoZSBwYWNrZXRzIGlzCiAgKiBpcyBhZ2FpbnN0IHNhY2tlZCAiY250Iiwgb3RoZXJ3aXNlIGl0J3MgYWdhaW5zdCBmYWNrZWQgImNudCIKICAqLwpAQCAtMjUyNCwzMCArMjU2OCw3IEBACiAJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgc2Fja2VkX3VwdG8pOwogCX0KIAotCS8qIE5ldyBoZXVyaXN0aWNzOiBpdCBpcyBwb3NzaWJsZSBvbmx5IGFmdGVyIHdlIHN3aXRjaGVkCi0JICogdG8gcmVzdGFydCB0aW1lciBlYWNoIHRpbWUgd2hlbiBzb21ldGhpbmcgaXMgQUNLZWQuCi0JICogSGVuY2UsIHdlIGNhbiBkZXRlY3QgdGltZWQgb3V0IHBhY2tldHMgZHVyaW5nIGZhc3QKLQkgKiByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgotCSAqLwotCWlmICh0Y3BfaXNfZmFjayh0cCkgJiYgdGNwX2hlYWRfdGltZWRvdXQoc2spKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJc2tiID0gdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPyB0cC0+c2NvcmVib2FyZF9za2JfaGludAotCQkJOiB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7Ci0KLQkJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKLQkJCWlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCi0JCQkJYnJlYWs7Ci0KLQkJCXRjcF9za2JfbWFya19sb3N0KHRwLCBza2IpOwotCQl9Ci0KLQkJdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPSBza2I7Ci0KLQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Ci0JfQorCXRjcF90aW1lb3V0X3NrYnMoc2spOwogfQogCiAvKiBDV05EIG1vZGVyYXRpb24sIHByZXZlbnRpbmcgYnVyc3RzIGR1ZSB0byB0b28gYmlnIEFDS3MKQEAgLTI4MTIsNyArMjgzMyw3IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKQEAgLTI4NDAsNyArMjg2MSw3IEBACiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAJdTMyIHByaW9yX2xvc3QgPSB0cC0+bG9zdF9vdXQ7CiAKIAl0Y3BfZm9yX3dyaXRlX3F1ZXVlKHNrYiwgc2spIHsKQEAgLTMxNzcsNyArMzE5OCw2IEBACiAKIAl3aGlsZSAoKHNrYiA9IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKSkgJiYgc2tiICE9IHRjcF9zZW5kX2hlYWQoc2spKSB7CiAJCXN0cnVjdCB0Y3Bfc2tiX2NiICpzY2IgPSBUQ1BfU0tCX0NCKHNrYik7Ci0JCXUzMiBlbmRfc2VxOwogCQl1MzIgYWNrZWRfcGNvdW50OwogCQl1OCBzYWNrZWQgPSBzY2ItPnNhY2tlZDsKIApAQCAtMzE5MiwxNiArMzIxMiw4IEBACiAJCQkJYnJlYWs7CiAKIAkJCWZ1bGx5X2Fja2VkID0gMDsKLQkJCWVuZF9zZXEgPSB0cC0+c25kX3VuYTsKIAkJfSBlbHNlIHsKIAkJCWFja2VkX3Bjb3VudCA9IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCQllbmRfc2VxID0gc2NiLT5lbmRfc2VxOwotCQl9Ci0KLQkJLyogTVRVIHByb2JpbmcgY2hlY2tzICovCi0JCWlmIChmdWxseV9hY2tlZCAmJiBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgotCQkgICAgIWFmdGVyKHRwLT5tdHVfcHJvYmUucHJvYmVfc2VxX2VuZCwgc2NiLT5lbmRfc2VxKSkgewotCQkJdGNwX210dXBfcHJvYmVfc3VjY2Vzcyhzaywgc2tiKTsKIAkJfQogCiAJCWlmIChzYWNrZWQgJiBUQ1BDQl9SRVRSQU5TKSB7CkBAIC0zMjY2LDI0ICszMjc4LDI2IEBACiAJCWNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcwogCQkJPSBpbmV0X2NzayhzayktPmljc2tfY2Ffb3BzOwogCisJCWlmICh1bmxpa2VseShpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgorCQkJICAgICAhYWZ0ZXIodHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfZW5kLCB0cC0+c25kX3VuYSkpKSB7CisJCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrKTsKKwkJfQorCiAJCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgZmxhZywgc2VxX3J0dCk7CiAJCXRjcF9yZWFybV9ydG8oc2spOwogCiAJCWlmICh0Y3BfaXNfcmVubyh0cCkpIHsKIAkJCXRjcF9yZW1vdmVfcmVub19zYWNrcyhzaywgcGt0c19hY2tlZCk7CiAJCX0gZWxzZSB7CisJCQlpbnQgZGVsdGE7CisKIAkJCS8qIE5vbi1yZXRyYW5zbWl0dGVkIGhvbGUgZ290IGZpbGxlZD8gVGhhdCdzIHJlb3JkZXJpbmcgKi8KIAkJCWlmIChyZW9yZCA8IHByaW9yX2ZhY2tldHMpCiAJCQkJdGNwX3VwZGF0ZV9yZW9yZGVyaW5nKHNrLCB0cC0+ZmFja2V0c19vdXQgLSByZW9yZCwgMCk7CiAKLQkJCS8qIE5vIG5lZWQgdG8gY2FyZSBmb3IgdW5kZXJmbG93cyBoZXJlIGJlY2F1c2UKLQkJCSAqIHRoZSBsb3N0X3NrYl9oaW50IGdldHMgTlVMTGVkIGlmIHdlJ3JlIHBhc3QgaXQKLQkJCSAqIChvciBzb21ldGhpbmcgbm9uLXRyaXZpYWwgaGFwcGVuZWQpCi0JCQkgKi8KLQkJCWlmICh0Y3BfaXNfZmFjayh0cCkpCi0JCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gcGt0c19hY2tlZDsKLQkJCWVsc2UKLQkJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBwcmlvcl9zYWNrZWQgLSB0cC0+c2Fja2VkX291dDsKKwkJCWRlbHRhID0gdGNwX2lzX2ZhY2sodHApID8gcGt0c19hY2tlZCA6CisJCQkJCQkgIHByaW9yX3NhY2tlZCAtIHRwLT5zYWNrZWRfb3V0OworCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gbWluKHRwLT5sb3N0X2NudF9oaW50LCBkZWx0YSk7CiAJCX0KIAogCQl0cC0+ZmFja2V0c19vdXQgLT0gbWluKHBrdHNfYWNrZWQsIHRwLT5mYWNrZXRzX291dCk7CkBAIC0zMzk1LDcgKzM0MDksNyBAQAogCiAJaWYgKHRjcF9tYXlfdXBkYXRlX3dpbmRvdyh0cCwgYWNrLCBhY2tfc2VxLCBud2luKSkgewogCQlmbGFnIHw9IEZMQUdfV0lOX1VQREFURTsKLQkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrLCBhY2tfc2VxKTsKKwkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrX3NlcSk7CiAKIAkJaWYgKHRwLT5zbmRfd25kICE9IG53aW4pIHsKIAkJCXRwLT5zbmRfd25kID0gbndpbjsKQEAgLTM1NzEsMTUgKzM1ODUsMTggQEAKIAlpbnQgcHJpb3JfcGFja2V0czsKIAlpbnQgZnJ0b19jd25kID0gMDsKIAotCS8qIElmIHRoZSBhY2sgaXMgbmV3ZXIgdGhhbiBzZW50IG9yIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrcworCS8qIElmIHRoZSBhY2sgaXMgb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCiAJICogdGhlbiB3ZSBjYW4gcHJvYmFibHkgaWdub3JlIGl0LgogCSAqLwotCWlmIChhZnRlcihhY2ssIHRwLT5zbmRfbnh0KSkKLQkJZ290byB1bmludGVyZXN0aW5nX2FjazsKLQogCWlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZ290byBvbGRfYWNrOwogCisJLyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJ3Qgc2VudCB5ZXQsIGRpc2NhcmQKKwkgKiB0aGlzIHNlZ21lbnQgKFJGQzc5MyBTZWN0aW9uIDMuOSkuCisJICovCisJaWYgKGFmdGVyKGFjaywgdHAtPnNuZF9ueHQpKQorCQlnb3RvIGludmFsaWRfYWNrOworCiAJaWYgKGFmdGVyKGFjaywgcHJpb3Jfc25kX3VuYSkpCiAJCWZsYWcgfD0gRkxBR19TTkRfVU5BX0FEVkFOQ0VEOwogCkBAIC0zNjAwLDcgKzM2MTcsNyBAQAogCQkgKiBObyBtb3JlIGNoZWNrcyBhcmUgcmVxdWlyZWQuCiAJCSAqIE5vdGUsIHdlIHVzZSB0aGUgZmFjdCB0aGF0IFNORC5VTkE+PVNORC5XTDIuCiAJCSAqLwotCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2ssIGFja19zZXEpOworCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2tfc2VxKTsKIAkJdHAtPnNuZF91bmEgPSBhY2s7CiAJCWZsYWcgfD0gRkxBR19XSU5fVVBEQVRFOwogCkBAIC0zNjY5LDYgKzM2ODYsMTAgQEAKIAkJdGNwX2Fja19wcm9iZShzayk7CiAJcmV0dXJuIDE7CiAKK2ludmFsaWRfYWNrOgorCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgYWZ0ZXIgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKKwlyZXR1cm4gLTE7CisKIG9sZF9hY2s6CiAJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSB7CiAJCXRjcF9zYWNrdGFnX3dyaXRlX3F1ZXVlKHNrLCBza2IsIHByaW9yX3NuZF91bmEpOwpAQCAtMzY3Niw4ICszNjk3LDcgQEAKIAkJCXRjcF90cnlfa2VlcF9vcGVuKHNrKTsKIAl9CiAKLXVuaW50ZXJlc3RpbmdfYWNrOgotCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgb3V0IG9mICV1OiV1XG4iLCBhY2ssIHRwLT5zbmRfdW5hLCB0cC0+c25kX254dCk7CisJU09DS19ERUJVRyhzaywgIkFjayAldSBiZWZvcmUgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg2NSw4ICszODg1LDcgQEAKIAkJICogTm90IG9ubHksIGFsc28gaXQgb2NjdXJzIGZvciBleHBpcmVkIHRpbWVzdGFtcHMuCiAJCSAqLwogCi0JCWlmICgoczMyKSh0cC0+cnhfb3B0LnJjdl90c3ZhbCAtIHRwLT5yeF9vcHQudHNfcmVjZW50KSA+PSAwIHx8Ci0JCSAgIGdldF9zZWNvbmRzKCkgPj0gdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpCisJCWlmICh0Y3BfcGF3c19jaGVjaygmdHAtPnJ4X29wdCwgMCkpCiAJCQl0Y3Bfc3RvcmVfdHNfcmVjZW50KHRwKTsKIAl9CiB9CkBAIC0zOTE4LDkgKzM5MzcsOSBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JcmV0dXJuICgoczMyKSh0cC0+cnhfb3B0LnRzX3JlY2VudCAtIHRwLT5yeF9vcHQucmN2X3RzdmFsKSA+IFRDUF9QQVdTX1dJTkRPVyAmJgotCQlnZXRfc2Vjb25kcygpIDwgdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMgJiYKLQkJIXRjcF9kaXNvcmRlcmVkX2Fjayhzaywgc2tiKSk7CisKKwlyZXR1cm4gIXRjcF9wYXdzX2NoZWNrKCZ0cC0+cnhfb3B0LCBUQ1BfUEFXU19XSU5ET1cpICYmCisJICAgICAgICF0Y3BfZGlzb3JkZXJlZF9hY2soc2ssIHNrYik7CiB9CiAKIC8qIENoZWNrIHNlZ21lbnQgc2VxdWVuY2UgbnVtYmVyIGZvciB2YWxpZGl0eS4KQEAgLTQwNzgsNyArNDA5Nyw2IEBACiAJCXRwLT5yeF9vcHQuZHNhY2sgPSAxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uc3RhcnRfc2VxID0gc2VxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uZW5kX3NlcSA9IGVuZF9zZXE7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKyAxOwogCX0KIH0KIApAQCAtNDEzMyw4ICs0MTUxLDYgQEAKIAkJCSAqIERlY3JlYXNlIG51bV9zYWNrcy4KIAkJCSAqLwogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MtLTsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKwotCQkJCQkgICAgICAgdHAtPnJ4X29wdC5kc2FjazsKIAkJCWZvciAoaSA9IHRoaXNfc2FjazsgaSA8IHRwLT5yeF9vcHQubnVtX3NhY2tzOyBpKyspCiAJCQkJc3BbaV0gPSBzcFtpICsgMV07CiAJCQljb250aW51ZTsKQEAgLTQxNDMsMjAgKzQxNTksNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9zYWNrX3N3YXAoc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMSwKLQkJCQkgc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMikKLXsKLQlfX3UzMiB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+c3RhcnRfc2VxOwotCXNhY2sxLT5zdGFydF9zZXEgPSBzYWNrMi0+c3RhcnRfc2VxOwotCXNhY2syLT5zdGFydF9zZXEgPSB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+ZW5kX3NlcTsKLQlzYWNrMS0+ZW5kX3NlcSA9IHNhY2syLT5lbmRfc2VxOwotCXNhY2syLT5lbmRfc2VxID0gdG1wOwotfQotCiBzdGF0aWMgdm9pZCB0Y3Bfc2Fja19uZXdfb2ZvX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtNDE3MSw3ICs0MTczLDcgQEAKIAkJaWYgKHRjcF9zYWNrX2V4dGVuZChzcCwgc2VxLCBlbmRfc2VxKSkgewogCQkJLyogUm90YXRlIHRoaXNfc2FjayB0byB0aGUgZmlyc3Qgb25lLiAqLwogCQkJZm9yICg7IHRoaXNfc2FjayA+IDA7IHRoaXNfc2Fjay0tLCBzcC0tKQotCQkJCXRjcF9zYWNrX3N3YXAoc3AsIHNwIC0gMSk7CisJCQkJc3dhcCgqc3AsICooc3AgLSAxKSk7CiAJCQlpZiAoY3VyX3NhY2tzID4gMSkKIAkJCQl0Y3Bfc2Fja19tYXliZV9jb2FsZXNjZSh0cCk7CiAJCQlyZXR1cm47CkBAIC00MTk3LDcgKzQxOTksNiBAQAogCXNwLT5zdGFydF9zZXEgPSBzZXE7CiAJc3AtPmVuZF9zZXEgPSBlbmRfc2VxOwogCXRwLT5yeF9vcHQubnVtX3NhY2tzKys7Ci0JdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIHRwLT5yeF9vcHQuZHNhY2s7CiB9CiAKIC8qIFJDVi5OWFQgYWR2YW5jZXMsIHNvbWUgU0FDS3Mgc2hvdWxkIGJlIGVhdGVuLiAqLwpAQCAtNDIxMSw3ICs0MjEyLDYgQEAKIAkvKiBFbXB0eSBvZm8gcXVldWUsIGhlbmNlLCBhbGwgdGhlIFNBQ0tzIGFyZSBlYXRlbi4gQ2xlYXIuICovCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkpIHsKIAkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSAwOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQuZHNhY2s7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQyMzIsMTEgKzQyMzIsNyBAQAogCQl0aGlzX3NhY2srKzsKIAkJc3ArKzsKIAl9Ci0JaWYgKG51bV9zYWNrcyAhPSB0cC0+cnhfb3B0Lm51bV9zYWNrcykgewotCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IG51bV9zYWNrczsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCi0JCQkJICAgICAgIHRwLT5yeF9vcHQuZHNhY2s7Ci0JfQorCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gbnVtX3NhY2tzOwogfQogCiAvKiBUaGlzIG9uZSBjaGVja3MgdG8gc2VlIGlmIHdlIGNhbiBwdXQgZGF0YSBmcm9tIHRoZQpAQCAtNDMxMiwxMCArNDMwOCw3IEBACiAKIAlUQ1BfRUNOX2FjY2VwdF9jd3IodHAsIHNrYik7CiAKLQlpZiAodHAtPnJ4X29wdC5kc2FjaykgewotCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrczsKLQl9CisJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAKIAkvKiAgUXVldWUgZGF0YSBmb3IgZGVsaXZlcnkgdG8gdGhlIHVzZXIuCiAJICogIFBhY2tldHMgaW4gc2VxdWVuY2UgZ28gdG8gdGhlIHJlY2VpdmUgcXVldWUuCkBAIC00NDM0LDggKzQ0MjcsNiBAQAogCQkvKiBJbml0aWFsIG91dCBvZiBvcmRlciBzZWdtZW50LCBidWlsZCAxIFNBQ0suICovCiAJCWlmICh0Y3BfaXNfc2Fjayh0cCkpIHsKIAkJCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gMTsKLQkJCXRwLT5yeF9vcHQuZHNhY2sgICAgID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gMTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5zdGFydF9zZXEgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5lbmRfc2VxID0KIAkJCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcTsKQEAgLTUxNTYsNyArNTE0Nyw4IEBACiAJICovCiAKIAlpZiAoKHRjcF9mbGFnX3dvcmQodGgpICYgVENQX0hQX0JJVFMpID09IHRwLT5wcmVkX2ZsYWdzICYmCi0JICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0KSB7CisJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0ICYmCisJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEsIHRwLT5zbmRfbnh0KSkgewogCQlpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC0+dGNwX2hlYWRlcl9sZW47CiAKIAkJLyogVGltZXN0YW1wIGhlYWRlciBwcmVkaWN0aW9uOiB0Y3BfaGVhZGVyX2xlbgpAQCAtNTMwOSw4ICs1MzAxLDggQEAKIAkJcmV0dXJuIC1yZXM7CiAKIHN0ZXA1OgotCWlmICh0aC0+YWNrKQotCQl0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOworCWlmICh0aC0+YWNrICYmIHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCkgPCAwKQorCQlnb3RvIGRpc2NhcmQ7CiAKIAl0Y3BfcmN2X3J0dF9tZWFzdXJlX3RzKHNrLCBza2IpOwogCkBAIC01NDA4LDcgKzU0MDAsNyBAQAogCQkgKiBuZXZlciBzY2FsZWQuCiAJCSAqLwogCQl0cC0+c25kX3duZCA9IG50b2hzKHRoLT53aW5kb3cpOwotCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5hY2tfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CisJCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAKIAkJaWYgKCF0cC0+cnhfb3B0LndzY2FsZV9vaykgewogCQkJdHAtPnJ4X29wdC5zbmRfd3NjYWxlID0gdHAtPnJ4X29wdC5yY3Zfd3NjYWxlID0gMDsKQEAgLTU1MDksNyArNTUwMSw3IEBACiAKIAkvKiBQQVdTIGNoZWNrLiAqLwogCWlmICh0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCAmJiB0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYKLQkgICAgdGNwX3Bhd3NfY2hlY2soJnRwLT5yeF9vcHQsIDApKQorCSAgICB0Y3BfcGF3c19yZWplY3QoJnRwLT5yeF9vcHQsIDApKQogCQlnb3RvIGRpc2NhcmRfYW5kX3VuZG87CiAKIAlpZiAodGgtPnN5bikgewpAQCAtNTY0Nyw3ICs1NjM5LDcgQEAKIAogCS8qIHN0ZXAgNTogY2hlY2sgdGhlIEFDSyBmaWVsZCAqLwogCWlmICh0aC0+YWNrKSB7Ci0JCWludCBhY2NlcHRhYmxlID0gdGNwX2Fjayhzaywgc2tiLCBGTEFHX1NMT1dQQVRIKTsKKwkJaW50IGFjY2VwdGFibGUgPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpID4gMDsKIAogCQlzd2l0Y2ggKHNrLT5za19zdGF0ZSkgewogCQljYXNlIFRDUF9TWU5fUkVDVjoKQEAgLTU2NjksOCArNTY2MSw3IEBACiAJCQkJdHAtPnNuZF91bmEgPSBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXE7CiAJCQkJdHAtPnNuZF93bmQgPSBudG9ocyh0aC0+d2luZG93KSA8PAogCQkJCQkgICAgICB0cC0+cnhfb3B0LnNuZF93c2NhbGU7Ci0JCQkJdGNwX2luaXRfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSwKLQkJCQkJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5zZXEpOwogCiAJCQkJLyogdGNwX2FjayBjb25zaWRlcnMgdGhpcyBBQ0sgYXMgZHVwbGljYXRlCiAJCQkJICogYW5kIGRvZXMgbm90IGNhbGN1bGF0ZSBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCBmNmI5NjJmLi5kMGEzMTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTEyMjYsMTUgKzEyMjYsNiBAQAogCWlmICh3YW50X2Nvb2tpZSAmJiAhdG1wX29wdC5zYXdfdHN0YW1wKQogCQl0Y3BfY2xlYXJfb3B0aW9ucygmdG1wX29wdCk7CiAKLQlpZiAodG1wX29wdC5zYXdfdHN0YW1wICYmICF0bXBfb3B0LnJjdl90c3ZhbCkgewotCQkvKiBTb21lIE9TZXMgKHVua25vd24gb25lcywgYnV0IEkgc2VlIHRoZW0gb24gd2ViIHNlcnZlciwgd2hpY2gKLQkJICogY29udGFpbnMgaW5mb3JtYXRpb24gaW50ZXJlc3Rpbmcgb25seSBmb3Igd2luZG93cycKLQkJICogdXNlcnMpIGRvIG5vdCBzZW5kIHRoZWlyIHN0YW1wIGluIFNZTi4gSXQgaXMgZWFzeSBjYXNlLgotCQkgKiBXZSBzaW1wbHkgZG8gbm90IGFkdmVydGlzZSBUUyBzdXBwb3J0LgotCQkgKi8KLQkJdG1wX29wdC5zYXdfdHN0YW1wID0gMDsKLQkJdG1wX29wdC50c3RhbXBfb2sgID0gMDsKLQl9CiAJdG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7CiAKIAl0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgJnRtcF9vcHQsIHNrYik7CkBAIC0yNDQzLDcgKzI0MzQsNyBAQAogdm9pZCBfX2luaXQgdGNwX3Y0X2luaXQodm9pZCkKIHsKIAlpbmV0X2hhc2hpbmZvX2luaXQoJnRjcF9oYXNoaW5mbyk7Ci0JaWYgKHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJnRjcF9za19vcHMpKQorCWlmIChyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ0Y3Bfc2tfb3BzKSkKIAkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUgdGhlIFRDUCBjb250cm9sIHNvY2tldC5cbiIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggZjY3ZWZmYi4uNDNiYmJhNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWlmICh0bXBfb3B0LnNhd190c3RhbXApIHsKIAkJCXRtcF9vcHQudHNfcmVjZW50CT0gdGNwdHctPnR3X3RzX3JlY2VudDsKIAkJCXRtcF9vcHQudHNfcmVjZW50X3N0YW1wCT0gdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcDsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCkBAIC0zOTksNyArMzk5LDcgQEAKIAogCQl0Y3BfcHJlcXVldWVfaW5pdChuZXd0cCk7CiAKLQkJdGNwX2luaXRfd2wobmV3dHAsIHRyZXEtPnNudF9pc24sIHRyZXEtPnJjdl9pc24pOworCQl0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS0+cmN2X2lzbik7CiAKIAkJbmV3dHAtPnNydHQgPSAwOwogCQluZXd0cC0+bWRldiA9IFRDUF9USU1FT1VUX0lOSVQ7CkBAIC00MzQsOSArNDM0LDggQEAKIAkJbmV3dHAtPnJ4X29wdC5zYXdfdHN0YW1wID0gMDsKIAogCQluZXd0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJbmV3dHAtPnJ4X29wdC5lZmZfc2Fja3MgPSAwOwotCiAJCW5ld3RwLT5yeF9vcHQubnVtX3NhY2tzID0gMDsKKwogCQluZXd0cC0+dXJnX2RhdGEgPSAwOwogCiAJCWlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKQpAQCAtNTEyLDcgKzUxMSw3IEBACiAJCQkgKiBmcm9tIGFub3RoZXIgZGF0YS4KIAkJCSAqLwogCQkJdG1wX29wdC50c19yZWNlbnRfc3RhbXAgPSBnZXRfc2Vjb25kcygpIC0gKChUQ1BfVElNRU9VVF9JTklUL0haKTw8cmVxLT5yZXRyYW5zKTsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZGRhNDJmMC4uYzFmMjU5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDQxLDEwICs0NDEsNyBAQAogCQkJKnB0cisrID0gaHRvbmwoc3BbdGhpc19zYWNrXS5lbmRfc2VxKTsKIAkJfQogCi0JCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3M7Ci0JCX0KKwkJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAJfQogfQogCkBAIC01NTAsNiArNTQ3LDcgQEAKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiID0gc2tiID8gVENQX1NLQl9DQihza2IpIDogTlVMTDsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAl1bnNpZ25lZCBzaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgZWZmX3NhY2tzOwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIAkqbWQ1ID0gdHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBzayk7CkBAIC01NjgsMTAgKzU2NiwxMSBAQAogCQlzaXplICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KHRwLT5yeF9vcHQuZWZmX3NhY2tzKSkgeworCWVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjazsKKwlpZiAodW5saWtlbHkoZWZmX3NhY2tzKSkgewogCQljb25zdCB1bnNpZ25lZCByZW1haW5pbmcgPSBNQVhfVENQX09QVElPTl9TUEFDRSAtIHNpemU7CiAJCW9wdHMtPm51bV9zYWNrX2Jsb2NrcyA9Ci0JCQltaW5fdCh1bnNpZ25lZCwgdHAtPnJ4X29wdC5lZmZfc2Fja3MsCisJCQltaW5fdCh1bnNpZ25lZCwgZWZmX3NhY2tzLAogCQkJICAgICAgKHJlbWFpbmluZyAtIFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQpIC8KIAkJCSAgICAgIFRDUE9MRU5fU0FDS19QRVJCTE9DSyk7CiAJCXNpemUgKz0gVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRCArCkBAIC02NjMsMTAgKzY2MiwxNCBAQAogCXRoLT51cmdfcHRyCQk9IDA7CiAKIAkvKiBUaGUgdXJnX21vZGUgY2hlY2sgaXMgbmVjZXNzYXJ5IGR1cmluZyBhIGJlbG93IHNuZF91bmEgd2luIHByb2JlICovCi0JaWYgKHVubGlrZWx5KHRjcF91cmdfbW9kZSh0cCkgJiYKLQkJICAgICBiZXR3ZWVuKHRwLT5zbmRfdXAsIHRjYi0+c2VxICsgMSwgdGNiLT5zZXEgKyAweEZGRkYpKSkgewotCQl0aC0+dXJnX3B0cgkJPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOwotCQl0aC0+dXJnCQkJPSAxOworCWlmICh1bmxpa2VseSh0Y3BfdXJnX21vZGUodHApICYmIGJlZm9yZSh0Y2ItPnNlcSwgdHAtPnNuZF91cCkpKSB7CisJCWlmIChiZWZvcmUodHAtPnNuZF91cCwgdGNiLT5zZXEgKyAweDEwMDAwKSkgeworCQkJdGgtPnVyZ19wdHIgPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOworCQkJdGgtPnVyZyA9IDE7CisJCX0gZWxzZSBpZiAoYWZ0ZXIodGNiLT5zZXEgKyAweEZGRkYsIHRwLT5zbmRfbnh0KSkgeworCQkJdGgtPnVyZ19wdHIgPSAweEZGRkY7CisJCQl0aC0+dXJnID0gMTsKKwkJfQogCX0KIAogCXRjcF9vcHRpb25zX3dyaXRlKChfX2JlMzIgKikodGggKyAxKSwgdHAsICZvcHRzLCAmbWQ1X2hhc2hfbG9jYXRpb24pOwpAQCAtNzYzLDExICs3NjYsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlpbnQgbnNpemUsIG9sZF9mYWN0b3I7CiAJaW50IG5sZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJQlVHX09OKGxlbiA+IHNrYi0+bGVuKTsKIAotCXRjcF9jbGVhcl9yZXRyYW5zX2hpbnRzX3BhcnRpYWwodHApOwogCW5zaXplID0gc2tiX2hlYWRsZW4oc2tiKSAtIGxlbjsKIAlpZiAobnNpemUgPCAwKQogCQluc2l6ZSA9IDA7CkBAIC04NTAsNiArODUyLDEyIEBACiAJCQl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKIAkJfQogCQl0Y3BfYWRqdXN0X2ZhY2tldHNfb3V0KHNrLCBza2IsIGRpZmYpOworCisJCWlmICh0cC0+bG9zdF9za2JfaGludCAmJgorCQkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLAorCQkJICAgVENQX1NLQl9DQih0cC0+bG9zdF9za2JfaGludCktPnNlcSkgJiYKKwkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwgVENQX1NLQl9DQihza2IpLT5zYWNrZWQpKQorCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gZGlmZjsKIAl9CiAKIAkvKiBMaW5rIEJVRkYgaW50byB0aGUgc2VuZCBxdWV1ZS4gKi8KQEAgLTkxMyw3ICs5MjEsNyBAQAogCSAqIGZhY3RvciBhbmQgbXNzLgogCSAqLwogCWlmICh0Y3Bfc2tiX3Bjb3VudChza2IpID4gMSkKLQkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2ssIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSk7CisJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaykpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsMTUgKzk4Miw2IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi0vKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCi1zdGF0aWMgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKLXsKLQlpZiAodHAtPm1heF93aW5kb3cgJiYgcGt0c2l6ZSA+ICh0cC0+bWF4X3dpbmRvdyA+PiAxKSkKLQkJcmV0dXJuIG1heCh0cC0+bWF4X3dpbmRvdyA+PiAxLCA2OFUgLSB0cC0+dGNwX2hlYWRlcl9sZW4pOwotCWVsc2UKLQkJcmV0dXJuIHBrdHNpemU7Ci19Ci0KIC8qIFRoaXMgZnVuY3Rpb24gc3luY2hyb25pemUgc25kIG1zcyB0byBjdXJyZW50IHBtdHUvZXh0aGRyIHNldC4KIAogICAgdHAtPnJ4X29wdC51c2VyX21zcyBpcyBtc3Mgc2V0IGJ5IHVzZXIgYnkgVENQX01BWFNFRy4gSXQgZG9lcyBOT1QgY291bnRzCkBAIC0xMDI5LDIyICsxMDI4LDE3IEBACiAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBNU1MsIHRha2luZyBTQUNLcyBhbmQgSVAgb3B0aW9ucywKICAqIGFuZCBldmVuIFBNVFUgZGlzY292ZXJ5IGV2ZW50cyBpbnRvIGFjY291bnQuCiAgKi8KLXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFyZ2VfYWxsb3dlZCkKK3Vuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7CiAJdTMyIG1zc19ub3c7Ci0JdTE2IHhtaXRfc2l6ZV9nb2FsOwotCWludCBkb2luZ190c28gPSAwOwogCXVuc2lnbmVkIGhlYWRlcl9sZW47CiAJc3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzOwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqbWQ1OwogCiAJbXNzX25vdyA9IHRwLT5tc3NfY2FjaGU7CiAKLQlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSkKLQkJZG9pbmdfdHNvID0gMTsKLQogCWlmIChkc3QpIHsKIAkJdTMyIG10dSA9IGRzdF9tdHUoZHN0KTsKIAkJaWYgKG10dSAhPSBpbmV0X2NzayhzayktPmljc2tfcG10dV9jb29raWUpCkBAIC0xMDYyLDE5ICsxMDU2LDYgQEAKIAkJbXNzX25vdyAtPSBkZWx0YTsKIAl9CiAKLQl4bWl0X3NpemVfZ29hbCA9IG1zc19ub3c7Ci0KLQlpZiAoZG9pbmdfdHNvKSB7Ci0JCXhtaXRfc2l6ZV9nb2FsID0gKChzay0+c2tfZ3NvX21heF9zaXplIC0gMSkgLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW4gLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuIC0KLQkJCQkgIHRwLT50Y3BfaGVhZGVyX2xlbik7Ci0KLQkJeG1pdF9zaXplX2dvYWwgPSB0Y3BfYm91bmRfdG9faGFsZl93bmQodHAsIHhtaXRfc2l6ZV9nb2FsKTsKLQkJeG1pdF9zaXplX2dvYWwgLT0gKHhtaXRfc2l6ZV9nb2FsICUgbXNzX25vdyk7Ci0JfQotCXRwLT54bWl0X3NpemVfZ29hbCA9IHhtaXRfc2l6ZV9nb2FsOwotCiAJcmV0dXJuIG1zc19ub3c7CiB9CiAKQEAgLTEyNTYsNyArMTIzNyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjcF9zZW5kX2hlYWQoc2spOwogCiAJcmV0dXJuIChza2IgJiYKLQkJdGNwX3NuZF90ZXN0KHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSksCisJCXRjcF9zbmRfdGVzdChzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2spLAogCQkJICAgICAodGNwX3NrYl9pc19sYXN0KHNrLCBza2IpID8KIAkJCSAgICAgIHRwLT5ub25hZ2xlIDogVENQX05BR0xFX1BVU0gpKSk7CiB9CkBAIC0xMjczLDcgKzEyNTQsNyBAQAogewogCXN0cnVjdCBza19idWZmICpidWZmOwogCWludCBubGVuID0gc2tiLT5sZW4gLSBsZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJLyogQWxsIG9mIGEgVFNPIGZyYW1lIG11c3QgYmUgY29tcG9zZWQgb2YgcGFnZWQgZGF0YS4gICovCiAJaWYgKHNrYi0+bGVuICE9IHNrYi0+ZGF0YV9sZW4pCkBAIC0xMzUyLDYgKzEzMzMsMTAgQEAKIAlpZiAobGltaXQgPj0gc2stPnNrX2dzb19tYXhfc2l6ZSkKIAkJZ290byBzZW5kX25vdzsKIAorCS8qIE1pZGRsZSBpbiBxdWV1ZSB3b24ndCBnZXQgYW55IG1vcmUgZGF0YSwgZnVsbCBzZW5kYWJsZSBhbHJlYWR5PyAqLworCWlmICgoc2tiICE9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKSkgJiYgKGxpbWl0ID49IHNrYi0+bGVuKSkKKwkJZ290byBzZW5kX25vdzsKKwogCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikgewogCQl1MzIgY2h1bmsgPSBtaW4odHAtPnNuZF93bmQsIHRwLT5zbmRfY3duZCAqIHRwLT5tc3NfY2FjaGUpOwogCkBAIC0xNDA1LDExICsxMzkwLDExIEBACiAJICAgIGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplIHx8CiAJICAgIGluZXRfY3NrKHNrKS0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfT3BlbiB8fAogCSAgICB0cC0+c25kX2N3bmQgPCAxMSB8fAotCSAgICB0cC0+cnhfb3B0LmVmZl9zYWNrcykKKwkgICAgdHAtPnJ4X29wdC5udW1fc2Fja3MgfHwgdHAtPnJ4X29wdC5kc2FjaykKIAkJcmV0dXJuIC0xOwogCiAJLyogVmVyeSBzaW1wbGUgc2VhcmNoIHN0cmF0ZWd5OiBqdXN0IGRvdWJsZSB0aGUgTVNTLiAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCXByb2JlX3NpemUgPSAyICogdHAtPm1zc19jYWNoZTsKIAlzaXplX25lZWRlZCA9IHByb2JlX3NpemUgKyAodHAtPnJlb3JkZXJpbmcgKyAxKSAqIHRwLT5tc3NfY2FjaGU7CiAJaWYgKHByb2JlX3NpemUgPiB0Y3BfbXR1X3RvX21zcyhzaywgaWNzay0+aWNza19tdHVwLnNlYXJjaF9oaWdoKSkgewpAQCAtMTc1NCwxMSArMTczOSw5IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiID0gdGNwX3dyaXRlX3F1ZXVlX25leHQoc2ssIHNrYik7CiAJaW50IHNrYl9zaXplLCBuZXh0X3NrYl9zaXplOwotCXUxNiBmbGFnczsKIAogCXNrYl9zaXplID0gc2tiLT5sZW47CiAJbmV4dF9za2Jfc2l6ZSA9IG5leHRfc2tiLT5sZW47Ci0JZmxhZ3MgPSBUQ1BfU0tCX0NCKHNrYiktPmZsYWdzOwogCiAJQlVHX09OKHRjcF9za2JfcGNvdW50KHNrYikgIT0gMSB8fCB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYikgIT0gMSk7CiAKQEAgLTE3NzgsOSArMTc2MSw4IEBACiAJLyogVXBkYXRlIHNlcXVlbmNlIHJhbmdlIG9uIG9yaWdpbmFsIHNrYi4gKi8KIAlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZW5kX3NlcTsKIAotCS8qIE1lcmdlIG92ZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gKi8KLQlmbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7IC8qIFRoaXMgbW92ZXMgUFNIL0ZJTiBldGMuIG92ZXIgKi8KLQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3M7CisJLyogTWVyZ2Ugb3ZlciBjb250cm9sIGluZm9ybWF0aW9uLiBUaGlzIG1vdmVzIFBTSC9GSU4gZXRjLiBvdmVyICovCisJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7CiAKIAkvKiBBbGwgZG9uZSwgZ2V0IHJpZCBvZiBzZWNvbmQgU0tCIGFuZCBhY2NvdW50IGZvciBpdCBzbwogCSAqIHBhY2tldCBjb3VudGluZyBkb2VzIG5vdCBicmVhay4KQEAgLTE4OTQsNyArMTg3Niw3IEBACiAJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnJlYnVpbGRfaGVhZGVyKHNrKSkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7IC8qIFJvdXRpbmcgZmFpbHVyZSBvciBzaW1pbGFyLiAqLwogCi0JY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAKIAkvKiBJZiByZWNlaXZlciBoYXMgc2hydW5rIGhpcyB3aW5kb3csIGFuZCBza2IgaXMgb3V0IG9mCiAJICogbmV3IHdpbmRvdywgZG8gbm90IHJldHJhbnNtaXQgaXQuIFRoZSBleGNlcHRpb24gaXMgdGhlCkBAIC0xOTA4LDYgKzE4OTAsOCBAQAogCWlmIChza2ItPmxlbiA+IGN1cl9tc3MpIHsKIAkJaWYgKHRjcF9mcmFnbWVudChzaywgc2tiLCBjdXJfbXNzLCBjdXJfbXNzKSkKIAkJCXJldHVybiAtRU5PTUVNOyAvKiBXZSdsbCB0cnkgYWdhaW4gbGF0ZXIuICovCisJfSBlbHNlIHsKKwkJdGNwX2luaXRfdHNvX3NlZ3Moc2ssIHNrYiwgY3VyX21zcyk7CiAJfQogCiAJdGNwX3JldHJhbnNfdHJ5X2NvbGxhcHNlKHNrLCBza2IsIGN1cl9tc3MpOwpAQCAtMjAyMyw3ICsyMDA3LDYgQEAKIAkJbGFzdF9sb3N0ID0gdHAtPnNuZF91bmE7CiAJfQogCi0JLyogRmlyc3QgcGFzczogcmV0cmFuc21pdCBsb3N0IHBhY2tldHMuICovCiAJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKIAkJX191OCBzYWNrZWQgPSBUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZDsKIApAQCAtMjA2Miw3ICsyMDQ1LDcgQEAKIAkJCWdvdG8gYmVnaW5fZndkOwogCiAJCX0gZWxzZSBpZiAoIShzYWNrZWQgJiBUQ1BDQl9MT1NUKSkgewotCQkJaWYgKGhvbGUgPT0gTlVMTCAmJiAhKHNhY2tlZCAmIFRDUENCX1NBQ0tFRF9SRVRSQU5TKSkKKwkJCWlmIChob2xlID09IE5VTEwgJiYgIShzYWNrZWQgJiAoVENQQ0JfU0FDS0VEX1JFVFJBTlN8VENQQ0JfU0FDS0VEX0FDS0VEKSkpCiAJCQkJaG9sZSA9IHNrYjsKIAkJCWNvbnRpbnVlOwogCkBAIC0yMTAxLDcgKzIwODQsNyBAQAogCSAqIHVuc2VudCBmcmFtZXMuICBCdXQgYmUgY2FyZWZ1bCBhYm91dCBvdXRnb2luZyBTQUNLUwogCSAqIGFuZCBJUCBvcHRpb25zLgogCSAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDEpOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCiAJaWYgKHRjcF9zZW5kX2hlYWQoc2spICE9IE5VTEwpIHsKIAkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX0ZJTjsKQEAgLTIzMjYsNyArMjMwOSw3IEBACiAJc2stPnNrX2VyciA9IDA7CiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX0RPTkUpOwogCXRwLT5zbmRfd25kID0gMDsKLQl0Y3BfaW5pdF93bCh0cCwgdHAtPndyaXRlX3NlcSwgMCk7CisJdGNwX2luaXRfd2wodHAsIDApOwogCXRwLT5zbmRfdW5hID0gdHAtPndyaXRlX3NlcTsKIAl0cC0+c25kX3NtbCA9IHRwLT53cml0ZV9zZXE7CiAJdHAtPnNuZF91cCA9IHRwLT53cml0ZV9zZXE7CkBAIC0yNTEzLDcgKzI0OTYsNyBAQAogCWlmICgoc2tiID0gdGNwX3NlbmRfaGVhZChzaykpICE9IE5VTEwgJiYKIAkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCB0Y3Bfd25kX2VuZCh0cCkpKSB7CiAJCWludCBlcnI7Ci0JCXVuc2lnbmVkIGludCBtc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAkJdW5zaWduZWQgaW50IHNlZ19zaXplID0gdGNwX3duZF9lbmQodHApIC0gVENQX1NLQl9DQihza2IpLT5zZXE7CiAKIAkJaWYgKGJlZm9yZSh0cC0+cHVzaGVkX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9wcm9iZS5jIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKaW5kZXggMjU1MjRkNC4uNTlmNWI1ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKQEAgLTE2NSw5ICsxNjUsMTAgQEAKIHN0YXRpYyBzc2l6ZV90IHRjcHByb2JlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgZXJyb3IgPSAwLCBjbnQgPSAwOworCWludCBlcnJvciA9IDA7CisJc2l6ZV90IGNudCA9IDA7CiAKLQlpZiAoIWJ1ZiB8fCBsZW4gPCAwKQorCWlmICghYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdoaWxlIChjbnQgPCBsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKaW5kZXggMjc0N2VjNy4uYTc2NTEzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKQEAgLTEsNiArMSw2IEBACiAvKiBUb20gS2VsbHkncyBTY2FsYWJsZSBUQ1AKICAqCi0gKiBTZWUgaHR0Oi8vd3d3LWxjZS5lbmcuY2FtLmFjLnVrL35jdGsyMS9zY2FsYWJsZS8KKyAqIFNlZSBodHRwOi8vd3d3LmRlbmVob2xtZS5uZXQvdG9tL3NjYWxhYmxlLwogICoKICAqIEpvaG4gSGVmZm5lciA8amhlZmZuZXJAc2MuZWR1PgogICovCkBAIC0yNCwxNCArMjQsOCBAQAogCiAJaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQogCQl0Y3Bfc2xvd19zdGFydCh0cCk7Ci0JZWxzZSB7Ci0JCXRwLT5zbmRfY3duZF9jbnQrKzsKLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPiBtaW4odHAtPnNuZF9jd25kLCBUQ1BfU0NBTEFCTEVfQUlfQ05UKSl7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0KLQl9CisJZWxzZQorCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgbWluKHRwLT5zbmRfY3duZCwgVENQX1NDQUxBQkxFX0FJX0NOVCkpOwogfQogCiBzdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDAxNzBlOTEuLmIxNDRhMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0zMjgsMTkgKzMyOCwxNiBAQAogCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID09IDApIHsKIAkJaW50IG1pYl9pZHg7CiAKLQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0Rpc29yZGVyIHx8Ci0JCSAgICBpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgewotCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLRkFJTFVSRVM7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PRkFJTFVSRVM7Ci0JCQl9CisJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9EaXNvcmRlcikgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUzsKKwkJCWVsc2UKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUzsKKwkJfSBlbHNlIGlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUw7CisJCQllbHNlCisJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwogCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0xvc3MpIHsKIAkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQTE9TU0ZBSUxVUkVTOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3Zlbm8uYyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKaW5kZXggZDA4YjJlOC4uZTliYmZmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Zlbm8uYworKysgYi9uZXQvaXB2NC90Y3BfdmVuby5jCkBAIC0xNTksMTIgKzE1OSw3IEBACiAJCQkJLyogSW4gdGhlICJub24tY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiAgZXZlcnkgcnR0LgogCQkJCSAqLwotCQkJCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCQkJdHAtPnNuZF9jd25kKys7Ci0JCQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQkJCX0gZWxzZQotCQkJCQl0cC0+c25kX2N3bmRfY250Kys7CisJCQkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIEluIHRoZSAiY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiBldmVyeSBvdGhlciBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfeWVhaC5jIGIvbmV0L2lwdjQvdGNwX3llYWguYwppbmRleCA5ZWM4NDNhLi42NmI2ODIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfeWVhaC5jCisrKyBiL25ldC9pcHY0L3RjcF95ZWFoLmMKQEAgLTk0LDE0ICs5NCw3IEBACiAKIAl9IGVsc2UgewogCQkvKiBSZW5vICovCi0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPCB0cC0+c25kX2N3bmQpCi0JCQl0cC0+c25kX2N3bmRfY250Kys7Ci0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9CisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCB0cC0+c25kX2N3bmQpOwogCX0KIAogCS8qIFRoZSBrZXkgcGxheWVycyBhcmUgdl92ZWdhcy5iZWdfc25kX3VuYSBhbmQgdl9iZWdfc25kX254dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggNGJkMTc4YS4uYmRhMDhhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoraW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDEgPSBpbmV0X3NrKHNrMSksICppbmV0MiA9IGluZXRfc2soc2syKTsKIApAQCAtMTE4NCw3ICsxMTg0LDcgQEAKIAkJCXNrID0gc2tuZXh0OwogCQl9IHdoaWxlIChza25leHQpOwogCX0gZWxzZQotCQlrZnJlZV9za2Ioc2tiKTsKKwkJY29uc3VtZV9za2Ioc2tiKTsKIAlzcGluX3VubG9jaygmaHNsb3QtPmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtMTYxOCw3ICsxNjE4LDggQEAKIAl9IHdoaWxlIChzayAmJiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkgfHwgc2stPnNrX2ZhbWlseSAhPSBzdGF0ZS0+ZmFtaWx5KSk7CiAKIAlpZiAoIXNrKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOworCQlpZiAoc3RhdGUtPmJ1Y2tldCA8IFVEUF9IVEFCTEVfU0laRSkKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOwogCQlyZXR1cm4gdWRwX2dldF9maXJzdChzZXEsIHN0YXRlLT5idWNrZXQgKyAxKTsKIAl9CiAJcmV0dXJuIHNrOwpAQCAtMTYzNiw2ICsxNjM3LDkgQEAKIAogc3RhdGljIHZvaWQgKnVkcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogeworCXN0cnVjdCB1ZHBfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CisJc3RhdGUtPmJ1Y2tldCA9IFVEUF9IVEFCTEVfU0laRTsKKwogCXJldHVybiAqcG9zID8gdWRwX2dldF9pZHgoc2VxLCAqcG9zLTEpIDogU0VRX1NUQVJUX1RPS0VOOwogfQogCkBAIC0xODE5LDYgKzE4MjMsNyBAQAogRVhQT1JUX1NZTUJPTCh1ZHBfbGliX3NldHNvY2tvcHQpOwogRVhQT1JUX1NZTUJPTCh1ZHBfcG9sbCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0X3BvcnQpOworRVhQT1JUX1NZTUJPTChpcHY0X3Jjdl9zYWRkcl9lcXVhbCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogRVhQT1JUX1NZTUJPTCh1ZHBfcHJvY19yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCAwM2UyYTFhLi5hODIxOGJjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CkBAIC00OTMsMTUgKzQ5NCwxNyBAQAogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkcmNvbmZfZml4dXBfZm9yd2FyZGluZyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50ICpwLCBpbnQgb2xkKQorc3RhdGljIGludCBhZGRyY29uZl9maXh1cF9mb3J3YXJkaW5nKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgKnAsIGludCBvbGQpCiB7CiAJc3RydWN0IG5ldCAqbmV0OwogCiAJbmV0ID0gKHN0cnVjdCBuZXQgKil0YWJsZS0+ZXh0cmEyOwogCWlmIChwID09ICZuZXQtPmlwdjYuZGV2Y29uZl9kZmx0LT5mb3J3YXJkaW5nKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCi0JcnRubF9sb2NrKCk7CisJaWYgKCFydG5sX3RyeWxvY2soKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwogCWlmIChwID09ICZuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmZvcndhcmRpbmcpIHsKIAkJX19zMzIgbmV3ZiA9IG5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+Zm9yd2FyZGluZzsKIAkJbmV0LT5pcHY2LmRldmNvbmZfZGZsdC0+Zm9yd2FyZGluZyA9IG5ld2Y7CkBAIC01MTIsNiArNTE1LDcgQEAKIAogCWlmICgqcCkKIAkJcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhuZXQpOworCXJldHVybiAxOwogfQogI2VuZGlmCiAKQEAgLTU4Nyw2ICs1OTEsNyBAQAogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSA9IE5VTEw7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CiAJaW50IGhhc2g7CiAJaW50IGVyciA9IDA7CiAJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHIpOwpAQCAtNjAzLDYgKzYwOCwxMSBAQAogCQlnb3RvIG91dDI7CiAJfQogCisJaWYgKGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgfHwgbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5kaXNhYmxlX2lwdjYpIHsKKwkJZXJyID0gLUVBQ0NFUzsKKwkJZ290byBvdXQyOworCX0KKwogCXdyaXRlX2xvY2soJmFkZHJjb25mX2hhc2hfbG9jayk7CiAKIAkvKiBJZ25vcmUgYWRkaW5nIGR1cGxpY2F0ZSBhZGRyZXNzZXMgb24gYW4gaW50ZXJmYWNlICovCkBAIC0xMjA2LDE2ICsxMjE2LDEyIEBACiAJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfSBlbHNlIGlmIChtaW5paGlzY29yZSA8IG1pbmlzY29yZSkgewotCQkJCQlzdHJ1Y3QgaXB2Nl9zYWRkcl9zY29yZSAqdG1wOwotCiAJCQkJCWlmIChoaXNjb3JlLT5pZmEpCiAJCQkJCQlpbjZfaWZhX3B1dChoaXNjb3JlLT5pZmEpOwogCiAJCQkJCWluNl9pZmFfaG9sZChzY29yZS0+aWZhKTsKIAotCQkJCQl0bXAgPSBoaXNjb3JlOwotCQkJCQloaXNjb3JlID0gc2NvcmU7Ci0JCQkJCXNjb3JlID0gdG1wOworCQkJCQlzd2FwKGhpc2NvcmUsIHNjb3JlKTsKIAogCQkJCQkvKiByZXN0b3JlIG91ciBpdGVyYXRvciAqLwogCQkJCQlzY29yZS0+aWZhID0gaGlzY29yZS0+aWZhOwpAQCAtMTM2NCw0MCArMTM3MCw2IEBACiAJcmV0dXJuIGlmcDsKIH0KIAotaW50IGlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKLXsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOwotCV9fYmUzMiBza19yY3Zfc2FkZHIgPSBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOwotCV9fYmUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKLQlpbnQgc2tfaXB2Nm9ubHkgPSBpcHY2X29ubHlfc29jayhzayk7Ci0JaW50IHNrMl9pcHY2b25seSA9IGluZXRfdjZfaXB2Nm9ubHkoc2syKTsKLQlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoc2tfcmN2X3NhZGRyNik7Ci0JaW50IGFkZHJfdHlwZTIgPSBzazJfcmN2X3NhZGRyNiA/IGlwdjZfYWRkcl90eXBlKHNrMl9yY3Zfc2FkZHI2KSA6IElQVjZfQUREUl9NQVBQRUQ7Ci0KLQlpZiAoIXNrMl9yY3Zfc2FkZHIgJiYgIXNrX2lwdjZvbmx5KQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUyID09IElQVjZfQUREUl9BTlkgJiYKLQkgICAgIShzazJfaXB2Nm9ubHkgJiYgYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpKQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKHNrX2lwdjZvbmx5ICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkpCi0JCXJldHVybiAxOwotCi0JaWYgKHNrMl9yY3Zfc2FkZHI2ICYmCi0JICAgIGlwdjZfYWRkcl9lcXVhbChza19yY3Zfc2FkZHI2LCBzazJfcmN2X3NhZGRyNikpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmCi0JICAgICFzazJfaXB2Nm9ubHkgJiYKLQkgICAgKCFzazJfcmN2X3NhZGRyIHx8ICFza19yY3Zfc2FkZHIgfHwgc2tfcmN2X3NhZGRyID09IHNrMl9yY3Zfc2FkZHIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCiAvKiBHZXRzIHJlZmVyZW5jZWQgYWRkcmVzcywgZGVzdHJveXMgaWZhZGRyICovCiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2RhZF9zdG9wKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKQEAgLTE0MzAsNiArMTQwMiwxMSBAQAogdm9pZCBhZGRyY29uZl9kYWRfZmFpbHVyZShzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGlmcC0+aWRldjsKKworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUHY2IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwKKwkJCWlmcC0+aWRldi0+ZGV2LT5uYW1lKTsKKwogCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgIWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpIHsKIAkJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAKQEAgLTE0NDAsMTEgKzE0MTcsMTIgQEAKIAkJICAgIGlwdjZfYWRkcl9lcXVhbCgmaWZwLT5hZGRyLCAmYWRkcikpIHsKIAkJCS8qIERBRCBmYWlsZWQgZm9yIGxpbmstbG9jYWwgYmFzZWQgb24gTUFDIGFkZHJlc3MgKi8KIAkJCWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgPSAxOworCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogSVB2NiBiZWluZyBkaXNhYmxlZCFcbiIsCisJCQkJaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCQl9CiAJfQogCi0JaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwgaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCWFkZHJjb25mX2RhZF9zdG9wKGlmcCk7CiB9CiAKQEAgLTI1OTksOSArMjU3Nyw2IEBACiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJiBob3cgPT0gMSkKLQkJaG93ID0gMDsKLQogCXJ0Nl9pZmRvd24obmV0LCBkZXYpOwogCW5laWdoX2lmZG93bigmbmRfdGJsLCBkZXYpOwogCkBAIC0yODIzLDExICsyNzk4LDYgQEAKIAkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKGlkZXYtPmNuZi5hY2NlcHRfZGFkID4gMSAmJiBpZGV2LT5jbmYuZGlzYWJsZV9pcHY2KSB7Ci0JCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJYWRkcmNvbmZfZGFkX2ZhaWx1cmUoaWZwKTsKLQkJcmV0dXJuOwotCX0KIAlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CiAJaWYgKGlmcC0+cHJvYmVzID09IDApIHsKIAkJLyoKQEAgLTM2MzgsNyArMzYwOCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9JRkFERFIsIGVycik7CkBAIC0zODQ5LDcgKzM4MjAsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfSUZBRERSLCBlcnIpOwpAQCAtMzkxOSw3ICszODkxLDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X1BSRUZJWCwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1BSRUZJWCwgZXJyKTsKQEAgLTM5NzQsNyArMzk0Nyw3IEBACiAJcmV0ID0gcHJvY19kb2ludHZlYyhjdGwsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCiAJaWYgKHdyaXRlKQotCQlhZGRyY29uZl9maXh1cF9mb3J3YXJkaW5nKGN0bCwgdmFscCwgdmFsKTsKKwkJcmV0ID0gYWRkcmNvbmZfZml4dXBfZm9yd2FyZGluZyhjdGwsIHZhbHAsIHZhbCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDAxMCw4ICszOTgzLDcgQEAKIAl9CiAKIAkqdmFscCA9IG5ldzsKLQlhZGRyY29uZl9maXh1cF9mb3J3YXJkaW5nKHRhYmxlLCB2YWxwLCB2YWwpOwotCXJldHVybiAxOworCXJldHVybiBhZGRyY29uZl9maXh1cF9mb3J3YXJkaW5nKHRhYmxlLCB2YWxwLCB2YWwpOwogfQogCiBzdGF0aWMgc3RydWN0IGFkZHJjb25mX3N5c2N0bF90YWJsZQpAQCAtNDQzNywyNSArNDQwOSw2IEBACiAKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9pbmV0NmFkZHJfbm90aWZpZXIpOwogCi1zdGF0aWMgdm9pZCBhZGRyY29uZl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCXJ0bmxfbG9jaygpOwotCS8qIGNsZWFuIGRldiBsaXN0ICovCi0JZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7Ci0JCWlmIChfX2luNl9kZXZfZ2V0KGRldikgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlhZGRyY29uZl9pZmRvd24oZGV2LCAxKTsKLQl9Ci0JYWRkcmNvbmZfaWZkb3duKG5ldC0+bG9vcGJhY2tfZGV2LCAyKTsKLQlydG5sX3VubG9jaygpOwotfQotCi1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGFkZHJjb25mX25ldF9vcHMgPSB7Ci0JLmV4aXQgPSBhZGRyY29uZl9uZXRfZXhpdCwKLX07Ci0KIC8qCiAgKglJbml0IC8gY2xlYW51cCBjb2RlCiAgKi8KQEAgLTQ0OTcsMTAgKzQ0NTAsNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJybG87CiAKLQllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZhZGRyY29uZl9uZXRfb3BzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHY2X2Rldl9ub3RmKTsKIAogCWFkZHJjb25mX3ZlcmlmeSgwKTsKQEAgLTQ1MzAsMTUgKzQ0NzksMjIgQEAKIHZvaWQgYWRkcmNvbmZfY2xlYW51cCh2b2lkKQogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwdjZfZGV2X25vdGYpOwotCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmYWRkcmNvbmZfbmV0X29wcyk7Ci0KIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFkZHJjb25mX29wcyk7CiAKIAlydG5sX2xvY2soKTsKIAorCS8qIGNsZWFuIGRldiBsaXN0ICovCisJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KSB7CisJCWlmIChfX2luNl9kZXZfZ2V0KGRldikgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlhZGRyY29uZl9pZmRvd24oZGV2LCAxKTsKKwl9CisJYWRkcmNvbmZfaWZkb3duKGluaXRfbmV0Lmxvb3BiYWNrX2RldiwgMik7CisKIAkvKgogCSAqCUNoZWNrIGhhc2ggdGFibGUuCiAJICovCkBAIC00NTU5LDYgKzQ1MTUsNCBAQAogCiAJZGVsX3RpbWVyKCZhZGRyX2Noa190aW1lcik7CiAJcnRubF91bmxvY2soKTsKLQotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYWRkcmNvbmZfbmV0X29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBmYTJhYzdlLi42MWY1NTM4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTcyLDYgKzcyLDEwIEBACiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBpbmV0c3c2W1NPQ0tfTUFYXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW5ldHN3Nl9sb2NrKTsKIAorc3RhdGljIGludCBkaXNhYmxlX2lwdjYgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGUsIGRpc2FibGVfaXB2NiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZSwgIkRpc2FibGUgSVB2NiBzdWNoIHRoYXQgaXQgaXMgbm9uLWZ1bmN0aW9uYWwiKTsKKwogc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlwdjZfcGluZm8gKmluZXQ2X3NrX2dlbmVyaWMoc3RydWN0IHNvY2sgKnNrKQogewogCWNvbnN0IGludCBvZmZzZXQgPSBzay0+c2tfcHJvdC0+b2JqX3NpemUgLSBzaXplb2Yoc3RydWN0IGlwdjZfcGluZm8pOwpAQCAtMjcyLDExICsyNzYsMjYgQEAKIAogCS8qIENoZWNrIGlmIHRoZSBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIGhvc3QuICovCiAJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEKSB7Ci0JCXY0YWRkciA9IGFkZHItPnNpbjZfYWRkci5zNl9hZGRyMzJbM107Ci0JCWlmIChpbmV0X2FkZHJfdHlwZShuZXQsIHY0YWRkcikgIT0gUlROX0xPQ0FMKSB7Ci0JCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKKwkJaW50IGNoa19hZGRyX3JldDsKKworCQkvKiBCaW5kaW5nIHRvIHY0LW1hcHBlZCBhZGRyZXNzIG9uIGEgdjYtb25seSBzb2NrZXQKKwkJICogbWFrZXMgbm8gc2Vuc2UKKwkJICovCisJCWlmIChucC0+aXB2Nm9ubHkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQorCisJCS8qIFJlcHJvZHVjZSBBRl9JTkVUIGNoZWNrcyB0byBtYWtlIHRoZSBiaW5kaW5ncyBjb25zaXRhbnQgKi8KKwkJdjRhZGRyID0gYWRkci0+c2luNl9hZGRyLnM2X2FkZHIzMlszXTsKKwkJY2hrX2FkZHJfcmV0ID0gaW5ldF9hZGRyX3R5cGUobmV0LCB2NGFkZHIpOworCQlpZiAoIXN5c2N0bF9pcF9ub25sb2NhbF9iaW5kICYmCisJCSAgICAhKGluZXQtPmZyZWViaW5kIHx8IGluZXQtPnRyYW5zcGFyZW50KSAmJgorCQkgICAgdjRhZGRyICE9IGh0b25sKElOQUREUl9BTlkpICYmCisJCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0xPQ0FMICYmCisJCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX01VTFRJQ0FTVCAmJgorCQkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9CUk9BRENBU1QpCisJCQlnb3RvIG91dDsKIAl9IGVsc2UgewogCQlpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9BTlkpIHsKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwpAQCAtMzM1LDggKzM1NCwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9BTlkpCisJaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKSB7CiAJCXNrLT5za191c2VybG9ja3MgfD0gU09DS19CSU5EQUREUl9MT0NLOworCQlpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9NQVBQRUQpCisJCQlucC0+aXB2Nm9ubHkgPSAxOworCX0KIAlpZiAoc251bSkKIAkJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX0JJTkRQT1JUX0xPQ0s7CiAJaW5ldC0+c3BvcnQgPSBodG9ucyhpbmV0LT5udW0pOwpAQCAtODg5LDcgKzkxMSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZnVuYyA9IGlwdjZfcmN2LAogCS5nc29fc2VuZF9jaGVjayA9IGlwdjZfZ3NvX3NlbmRfY2hlY2ssCkBAIC0xMDAxLDEwICsxMDIzLDIxIEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKmR1bW15X3NrYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpyOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBpbmV0Nl9za2JfcGFybSkgPiBzaXplb2YoZHVtbXlfc2tiLT5jYikpOwogCisJLyogUmVnaXN0ZXIgdGhlIHNvY2tldC1zaWRlIGluZm9ybWF0aW9uIGZvciBpbmV0Nl9jcmVhdGUuICAqLworCWZvcihyID0gJmluZXRzdzZbMF07IHIgPCAmaW5ldHN3NltTT0NLX01BWF07ICsrcikKKwkJSU5JVF9MSVNUX0hFQUQocik7CisKKwlpZiAoZGlzYWJsZV9pcHY2KSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJJUHY2OiBMb2FkZWQsIGJ1dCBhZG1pbmlzdHJhdGl2ZWx5IGRpc2FibGVkLCAiCisJCSAgICAgICAicmVib290IHJlcXVpcmVkIHRvIGVuYWJsZVxuIik7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IHByb3RvX3JlZ2lzdGVyKCZ0Y3B2Nl9wcm90LCAxKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTEwMjIsMTAgKzEwNTUsNiBAQAogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3VkcGxpdGVfcHJvdG87CiAKIAotCS8qIFJlZ2lzdGVyIHRoZSBzb2NrZXQtc2lkZSBpbmZvcm1hdGlvbiBmb3IgaW5ldDZfY3JlYXRlLiAgKi8KLQlmb3IociA9ICZpbmV0c3c2WzBdOyByIDwgJmluZXRzdzZbU09DS19NQVhdOyArK3IpCi0JCUlOSVRfTElTVF9IRUFEKHIpOwotCiAJLyogV2UgTVVTVCByZWdpc3RlciBSQVcgc29ja2V0cyBiZWZvcmUgd2UgY3JlYXRlIHRoZSBJQ01QNiwKIAkgKiBJR01QNiwgb3IgTkRJU0MgY29udHJvbCBzb2NrZXRzLgogCSAqLwpAQCAtMTE5MSw2ICsxMjIwLDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGluZXQ2X2V4aXQodm9pZCkKIHsKKwlpZiAoZGlzYWJsZV9pcHY2KQorCQlyZXR1cm47CisKIAkvKiBGaXJzdCBvZiBhbGwgZGlzYWxsb3cgbmV3IHNvY2tldHMgY3JlYXRpb24uICovCiAJc29ja191bnJlZ2lzdGVyKFBGX0lORVQ2KTsKIAkvKiBEaXNhbGxvdyBhbnkgZnVydGhlciBuZXRsaW5rIG1lc3NhZ2VzICovCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKaW5kZXggOGZlMjY3Zi4uMWJjYzM0MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwpAQCAtMjU4LDExICsyNTgsMTEgQEAKIAogCWlmICh0d3AgIT0gTlVMTCkgewogCQkqdHdwID0gdHc7Ci0JCU5FVF9JTkNfU1RBVFNfQkgodHdza19uZXQodHcpLCBMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CisJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CiAJfSBlbHNlIGlmICh0dyAhPSBOVUxMKSB7CiAJCS8qIFNpbGx5LiBTaG91bGQgaGFzaC1kYW5jZSBpbnN0ZWFkLi4uICovCiAJCWluZXRfdHdza19kZXNjaGVkdWxlKHR3LCBkZWF0aF9yb3cpOwotCQlORVRfSU5DX1NUQVRTX0JIKHR3c2tfbmV0KHR3KSwgTElOVVhfTUlCX1RJTUVXQUlUUkVDWUNMRUQpOworCQlORVRfSU5DX1NUQVRTX0JIKG5ldCwgTElOVVhfTUlCX1RJTUVXQUlUUkVDWUNMRUQpOwogCiAJCWluZXRfdHdza19wdXQodHcpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCA0MGYzMjQ2Li5kMzFkZjBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0yMTgsOCArMjE4LDcgQEAKIAkJCWlmIChvcHQpCiAJCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CiAJCQlwa3RvcHQgPSB4Y2hnKCZucC0+cGt0b3B0aW9ucywgTlVMTCk7Ci0JCQlpZiAocGt0b3B0KQotCQkJCWtmcmVlX3NrYihwa3RvcHQpOworCQkJa2ZyZWVfc2tiKHBrdG9wdCk7CiAKIAkJCXNrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKIAkJCS8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCAzY2Q4M2I4Li45ZjA2MWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEwOTUsMTEgKzEwOTUsNyBAQAogCQkmaXB2Nl9oZHIocmEpLT5zYWRkcik7CiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsCi0JCQkgIEdGUF9BVE9NSUMpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dDsKLQorCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsIEdGUF9BVE9NSUMpOwogCXJldHVybjsKIAogbmxhX3B1dF9mYWlsdXJlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA2MjUzNTNhLi4yOWQ2NDNiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJLS0taGVscC0tLQogCVRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZQogCShlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzCi0JQ09GTklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC4KKwlDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMLgogCiBjb25maWcgSVA2X05GX01BVENIX0lQVjZIRUFERVIKIAl0cmlzdGF0ZSAnImlwdjZoZWFkZXIiIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMgTWF0Y2gnCkBAIC0xMzcsNyArMTM3LDcgQEAKIAktLS1oZWxwLS0tCiAJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCiAJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKLQlDT0ZOSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KKwlDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KIAogY29uZmlnIElQNl9ORl9UQVJHRVRfTE9HCiAJdHJpc3RhdGUgIkxPRyB0YXJnZXQgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDAzMmZkZjQuLjk5MDMyMjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMjA1LDggKzIwNSw5IEBACiAKIAlpZiAobmV0LT5jdC5zeXNjdGxfY2hlY2tzdW0gJiYgaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwNl9jaGVja3N1bShza2IsIGhvb2tudW0sIGRhdGFvZmYsIElQUFJPVE9fSUNNUFY2KSkgewotCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkgICAgICAibmZfY3RfaWNtcHY2OiBJQ01QdjYgY2hlY2tzdW0gZmFpbGVkXG4iKTsKKwkJaWYgKExPR19JTlZBTElEKG5ldCwgSVBQUk9UT19JQ01QVjYpKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVUNiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgICJuZl9jdF9pY21wdjY6IElDTVB2NiBjaGVja3N1bSBmYWlsZWQgIik7CiAJCXJldHVybiAtTkZfQUNDRVBUOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCmluZGV4IGVkNGQ3OWEuLjA1OGE1ZTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKQEAgLTUyOCwxNCArNTI4LDE0IEBACiAJCWlmICghaXB2Nl9leHRfaGRyKG5leHRoZHIpKSB7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKSB7Ci0JCQlwcl9kZWJ1ZygidG9vIHNob3J0XG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpIHsKIAkJCXByX2RlYnVnKCJuZXh0IGhlYWRlciBpcyBub25lXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQorCQlpZiAobGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpIHsKKwkJCXByX2RlYnVnKCJ0b28gc2hvcnRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CiAJCWlmIChza2JfY29weV9iaXRzKHNrYiwgc3RhcnQsICZoZHIsIHNpemVvZihoZHIpKSkKIAkJCUJVRygpOwogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0FVVEgpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggM2M1NzUxMS4uZTlhYzdhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtNDUyLDYgKzQ1Miw3IEBACiBzdGF0aWMgaW50IGlwNl9mcmFnX3JlYXNtKHN0cnVjdCBmcmFnX3F1ZXVlICpmcSwgc3RydWN0IHNrX2J1ZmYgKnByZXYsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKGZxLT5xLm5ldCwgc3RydWN0IG5ldCwgaXB2Ni5mcmFncyk7CiAJc3RydWN0IHNrX2J1ZmYgKmZwLCAqaGVhZCA9IGZxLT5xLmZyYWdtZW50czsKIAlpbnQgICAgcGF5bG9hZF9sZW47CiAJdW5zaWduZWQgaW50IG5ob2ZmOwpAQCAtNTUxLDggKzU1Miw3IEBACiAJCQkJCSAgaGVhZC0+Y3N1bSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JSVA2X0lOQ19TVEFUU19CSChkZXZfbmV0KGRldiksCi0JCQkgX19pbjZfZGV2X2dldChkZXYpLCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CisJSVA2X0lOQ19TVEFUU19CSChuZXQsIF9faW42X2Rldl9nZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01PS1MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWZxLT5xLmZyYWdtZW50cyA9IE5VTEw7CiAJcmV0dXJuIDE7CkBAIC01NjYsOCArNTY2LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgImlwNl9mcmFnX3JlYXNtOiBubyBtZW1vcnkgZm9yIHJlYXNzZW1ibHlcbiIpOwogb3V0X2ZhaWw6CiAJcmN1X3JlYWRfbG9jaygpOwotCUlQNl9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLAotCQkJIF9faW42X2Rldl9nZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJSVA2X0lOQ19TVEFUU19CSChuZXQsIF9faW42X2Rldl9nZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggYzNkNDg2YS4uMTM5NGRkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC0yNDAwLDggKzI0MDAsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNl9ST1VURSwKLQkJCSAgaW5mby0+bmxoLCBnZnBfYW55KCkpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNl9ST1VURSwKKwkJICAgIGluZm8tPm5saCwgZ2ZwX2FueSgpKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggZDM0NjdlNS4uNjY0YWI4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTE4OCw5ICsxODgsOSBAQAogCX0KIAogCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpcGlwNl90dW5uZWxfaW5pdChkZXYpOwogCiAJbnQtPnBhcm1zID0gKnBhcm1zOworCWlwaXA2X3R1bm5lbF9pbml0KGRldik7CiAKIAlpZiAocGFybXMtPmlfZmxhZ3MgJiBTSVRfSVNBVEFQKQogCQlkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX0lTQVRBUDsKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCWlmICh0LT5wYXJtcy5pcGgudHRsID09IDAgJiYgdHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGppZmZpZXMgLSB0LT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKQogCQl0LT5lcnJfY291bnQrKzsKIAllbHNlCiAJCXQtPmVycl9jb3VudCA9IDE7CkBAIC02NTgsNyArNjU4LDggQEAKIAl9CiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCAwMGYxMjY5Li40YjVhYTE4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTUzMyw4ICs1MzMsNyBAQAogCiBzdGF0aWMgdm9pZCB0Y3BfdjZfcmVxc2tfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7Ci0JaWYgKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKQotCQlrZnJlZV9za2IoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpOworCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7CiB9CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwpAQCAtMTYxMSw4ICsxNjEwLDcgQEAKIAkJfQogCX0KIAotCWlmIChvcHRfc2tiKQotCQlrZnJlZV9za2Iob3B0X3NrYik7CisJa2ZyZWVfc2tiKG9wdF9za2IpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDg0YjFhMjkuLjY4NDJkZDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC00OSw2ICs0OSwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAidWRwX2ltcGwuaCIKIAoraW50IGlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKK3sKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOworCWludCBza19pcHY2b25seSA9IGlwdjZfb25seV9zb2NrKHNrKTsKKwlpbnQgc2syX2lwdjZvbmx5ID0gaW5ldF92Nl9pcHY2b25seShzazIpOworCWludCBhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZShza19yY3Zfc2FkZHI2KTsKKwlpbnQgYWRkcl90eXBlMiA9IHNrMl9yY3Zfc2FkZHI2ID8gaXB2Nl9hZGRyX3R5cGUoc2syX3Jjdl9zYWRkcjYpIDogSVBWNl9BRERSX01BUFBFRDsKKworCS8qIGlmIGJvdGggYXJlIG1hcHBlZCwgdHJlYXQgYXMgSVB2NCAqLworCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCAmJiBhZGRyX3R5cGUyID09IElQVjZfQUREUl9NQVBQRUQpCisJCXJldHVybiBpcHY0X3Jjdl9zYWRkcl9lcXVhbChzaywgc2syKTsKKworCWlmIChhZGRyX3R5cGUyID09IElQVjZfQUREUl9BTlkgJiYKKwkgICAgIShzazJfaXB2Nm9ubHkgJiYgYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpKQorCQlyZXR1cm4gMTsKKworCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSAmJgorCSAgICAhKHNrX2lwdjZvbmx5ICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkpCisJCXJldHVybiAxOworCisJaWYgKHNrMl9yY3Zfc2FkZHI2ICYmCisJICAgIGlwdjZfYWRkcl9lcXVhbChza19yY3Zfc2FkZHI2LCBzazJfcmN2X3NhZGRyNikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIGludCB1ZHBfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewogCXJldHVybiB1ZHBfbGliX2dldF9wb3J0KHNrLCBzbnVtLCBpcHY2X3Jjdl9zYWRkcl9lcXVhbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCAwZTY4NWIwLi5mNDE3Yjc3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJZHN0W2NvdW50W2NsYXNzW2ldIC0gMV0rK10gPSBzcmNbaV07Ci0JCXNyY1tpXSA9IDA7CisJCXNyY1tpXSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCA0M2QwZmZjLi4xNjI3MDUwIDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTE5NTgsMTIgKzE5NTgsMTIgQEAKIAogU09DS09QU19XUkFQKGlweF9kZ3JhbSwgUEZfSVBYKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHhfODAyM19wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4XzgwMjNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyksCiAJLmZ1bmMJCT0gaXB4X3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4X2RpeF9wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4X2RpeF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlCQk9IGNwdV90b19iZTE2KEVUSF9QX0lQWCksCiAJLmZ1bmMJCT0gaXB4X3JjdiwKIH07CkBAIC0xOTc1LDE1ICsxOTc1LDE1IEBACiBleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICptYWtlX0VJSV9jbGllbnQodm9pZCk7CiBleHRlcm4gdm9pZCBkZXN0cm95X0VJSV9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICopOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcHhfODAyMl90eXBlID0gMHhFMDsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlweF9zbmFwX2lkWzVdID0geyAweDAsIDB4MCwgMHgwLCAweDgxLCAweDM3IH07Ci1zdGF0aWMgY2hhciBpcHhfRUlJX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlweF84MDIyX3R5cGUgPSAweEUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXB4X3NuYXBfaWRbNV0gPSB7IDB4MCwgMHgwLCAweDAsIDB4ODEsIDB4MzcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGlweF9FSUlfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggRXRoZXJuZXQgSUlcbiI7Ci1zdGF0aWMgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuM1xuIjsKLXN0YXRpYyBjaGFyIGlweF9sbGNfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgaXB4X2xsY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuMlxuIjsKLXN0YXRpYyBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJJUFg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIFNOQVBcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGlweF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwppbmRleCBlYTMxOWUzLi5iZjkyZTE0IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jCisrKyBiL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKQEAgLTE0OSwxMyArMTQ5LDE0IEBACiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWRldi0+ZG9faW9jdGwpIHsKKwlpZiAoIWRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKSB7CiAJCUlSREFfRVJST1IoIiVzOiBkb19pb2N0bCBub3QgaW1wbC4gYnkgZGV2aWNlIGRyaXZlclxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldCA9IGRldi0+ZG9faW9jdGwoZGV2LCAoc3RydWN0IGlmcmVxICopICZyZXEsIFNJT0NHUkVDRUlWSU5HKTsKKwlyZXQgPSAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpKGRldiwgKHN0cnVjdCBpZnJlcSAqKSAmcmVxLAorCQkJCQkgICAgICBTSU9DR1JFQ0VJVklORyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggMDUxMTJiZS4uNzI0YmNmOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTQ1LDYgKzQ1LDE2IEBACiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcmxhbl9ldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBpcmxhbl9ldGhfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkgICAgICAgID0gaXJsYW5fZXRoX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGlybGFuX2V0aF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2V0aF9zZXR1cCAoZGV2KQogICoKQEAgLTUzLDE0ICs2MywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gaXJsYW5fZXRoX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICAgICA9IGlybGFuX2V0aF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0OworCWV0aGVyX3NldHVwKGRldik7CisKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmlybGFuX2V0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKIAotCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKgogCSAqIExldHMgZG8gYWxsIHF1ZXVlaW5nIGluIElyVFRQIGluc3RlYWQgb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJtb2QuYyBiL25ldC9pcmRhL2lybW9kLmMKaW5kZXggMWJiNjA3Zi4uMzAzYTY4ZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJtb2QuYworKysgYi9uZXQvaXJkYS9pcm1vZC5jCkBAIC01NSw3ICs1NSw3IEBACiAvKiBQYWNrZXQgdHlwZSBoYW5kbGVyLgogICogVGVsbCB0aGUga2VybmVsIGhvdyBJckRBIHBhY2tldHMgc2hvdWxkIGJlIGhhbmRsZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXJkYV9wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXJkYV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfSVJEQSksCiAJLmZ1bmMJPSBpcmxhcF9kcml2ZXJfcmN2LAkvKiBQYWNrZXQgdHlwZSBoYW5kbGVyIGlybGFwX2ZyYW1lLmMgKi8KIH07CmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWI4YTJhMC4uNDllNzg2NSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMTE3MSw4ICsxMTcxLDcgQEAKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHRoaXMpCi0JCQlrZnJlZV9za2IodGhpcyk7CisJCWtmcmVlX3NrYih0aGlzKTsKIAl9CiAJQlVHX09OKCF0aGlzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggN2RjYmRlMy4uNjQzYzFiZSAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0zMTMsOCArMzEzLDcgQEAKIAlpZiAob25lX3NrICE9IE5VTEwpCiAJCWVyciA9IHBma2V5X2Jyb2FkY2FzdF9vbmUoc2tiLCAmc2tiMiwgYWxsb2NhdGlvbiwgb25lX3NrKTsKIAotCWlmIChza2IyKQotCQlrZnJlZV9za2Ioc2tiMik7CisJa2ZyZWVfc2tiKHNrYjIpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTczLDggKzM1NzIsNyBAQAogb3V0OgogCWlmIChlcnIgJiYgaGRyICYmIHBma2V5X2Vycm9yKGhkciwgZXJyLCBzaykgPT0gMCkKIAkJZXJyID0gMDsKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiBlcnIgPyA6IGxlbjsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDU2ZmQ4NWEuLmZlYmFlNzAgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMTExOCwxMSArMTExOCwxMSBAQAogCS5zZW5kcGFnZSAgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCiB9OwogCi1zdGF0aWMgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHByb2NfZnMgZW50cmllc1xuIjsKLXN0YXRpYyBjaGFyIGxsY19zeXNjdGxfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3N5c2N0bF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHN5c2N0bCBlbnRyaWVzXG4iOwotc3RhdGljIGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGZhbWlseVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGxjMl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggNWM2ZDg5Yy4uMzQ3NzYyNCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtMzMyLDggKzMzMiw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGR1X3BvcyAmJiBpIDwgcV9sZW47IGkrKykgewogCQlza2IgPSBza2JfZGVxdWV1ZSgmbGxjLT5wZHVfdW5hY2tfcSk7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCW5icl9hY2tlZCsrOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2NvcmUuYyBiL25ldC9sbGMvbGxjX2NvcmUuYwppbmRleCBhN2ZlMWFkLi5mZjRjMGFiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb3JlLmMKKysrIGIvbmV0L2xsYy9sbGNfY29yZS5jCkBAIC0xNDcsMTIgKzE0NywxMiBAQAogCWtmcmVlKHNhcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsbGNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKSwKIAkuZnVuYyA9IGxsY19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY190cl9wYWNrZXRfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3RyX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9UUl84MDJfMiksCiAJLmZ1bmMgPSBsbGNfcmN2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCAzNTAzYTNkLi4wZTNhYjg4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogCXdwYS5vIFwKIAlzY2FuLm8gXAogCWh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXAorCWlic3MubyBcCiAJbWxtZS5vIFwKIAlpZmFjZS5vIFwKIAlyYXRlLm8gXApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy1yeC5jIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCmluZGV4IDMxMTJiZmQuLmE5NWFmZmMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctcnguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKQEAgLTEyOSw3ICsxMjksNiBAQAogCQkJCSAgICAgIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXR1cywgdTE2IHBvbGljeSwKIAkJCQkgICAgICB1MTYgYnVmX3NpemUsIHUxNiB0aW1lb3V0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CkBAIC0xNTEsOCArMTUwLDkgQEAKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQogCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IDEyMzJkOWYuLjFkZjExNmQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIAkJCQkJIHUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgY2FwYWI7CkBAIC02OSw4ICs2OCw4IEBACiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAogCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKIAkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CkBAIC0xMzIsOSArMTMxLDI0IEBACiAKIAlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CiAKLQlpZiAobG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoJmxvY2FsLT5odywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKKwlpZiAobG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykgeworCQlpZiAoaW5pdGlhdG9yKSB7CisJCQkvKgorCQkJICogU3RvcCB0aGUgQUMgcXVldWUgdG8gYXZvaWQgaXNzdWVzIHdoZXJlIHdlIHNlbmQKKwkJCSAqIHVuYWdncmVnYXRlZCBmcmFtZXMgYWxyZWFkeSBiZWZvcmUgdGhlIGRlbGJhLgorCQkJICovCisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oJmxvY2FsLT5odywKKwkJCQlsb2NhbC0+aHcucXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVt0aWRdLAorCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisJCX0KIAorCQkvKgorCQkgKiBQcmV0ZW5kIHRoZSBkcml2ZXIgd29rZSB0aGUgcXVldWUsIGp1c3QgaW4gY2FzZQorCQkgKiBpdCBkaXNhYmxlZCBpdCBiZWZvcmUgdGhlIHNlc3Npb24gd2FzIHN0b3BwZWQuCisJCSAqLworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZSgKKwkJCSZsb2NhbC0+aHcsIGxvY2FsLT5ody5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW3RpZF0pOworCX0KIAkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKIAkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKIApAQCAtMTQ0LDggKzE1OCw2IEBACiAJLyogSFcgc2hhbGwgbm90IGRlbnkgZ29pbmcgYmFjayB0byBsZWdhY3kgKi8KIAlpZiAoV0FSTl9PTihyZXQpKSB7CiAJCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQkJaWYgKGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZSgmbG9jYWwtPmh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xODksMTQgKzIwMSwxOSBAQAogCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfYWNfZnJvbV90aWQoaW50IHRpZCkKK3sKKwlyZXR1cm4gaWVlZTgwMl8xZF90b19hY1t0aWQgJiA3XTsKK30KKwogaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JdTE2IHN0YXJ0X3NlcV9udW07CiAJdTggKnN0YXRlOwotCWludCByZXQgPSAwOworCWludCBpLCBxbiA9IC0xLCByZXQgPSAwOworCXUxNiBzdGFydF9zZXFfbnVtOwogCiAJaWYgKFdBUk5fT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjA5LDYgKzIyNiwxMyBAQAogCSAgICAgICByYSwgdGlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KIAorCWlmIChody0+YW1wZHVfcXVldWVzICYmIGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpID09IDApIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJlamVjdGluZyBvbiB2b2ljZSBBQ1xuIik7CisjZW5kaWYKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CkBAIC0yMTcsNyArMjQxLDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHRoZSBzdGF0aW9uXG4iKTsKICNlbmRpZgogCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIGV4aXQ7CisJCWdvdG8gdW5sb2NrOwogCX0KIAogCS8qCkBAIC0yMzAsMTEgKzI1NCwxMyBAQAogCSAgICBzdGEtPnNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCiAJICAgIHN0YS0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCisJc2RhdGEgPSBzdGEtPnNkYXRhOworCiAJLyogd2UgaGF2ZSB0cmllZCB0b28gbWFueSB0aW1lcywgcmVjZWl2ZXIgZG9lcyBub3Qgd2FudCBBLU1QRFUgKi8KIAlpZiAoc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA+IEhUX0FHR19NQVhfUkVUUklFUykgewogCQlyZXQgPSAtRUJVU1k7CkBAIC0yNTIsNiArMjc4LDQyIEBACiAJCWdvdG8gZXJyX3VubG9ja19zdGE7CiAJfQogCisJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKKwkJc3Bpbl9sb2NrKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CisJCS8qIHJlc2VydmUgYSBuZXcgcXVldWUgZm9yIHRoaXMgc2Vzc2lvbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPmh3LmFtcGR1X3F1ZXVlczsgaSsrKSB7CisJCQlpZiAobG9jYWwtPmFtcGR1X2FjX3F1ZXVlW2ldIDwgMCkgeworCQkJCXFuID0gaTsKKwkJCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbcW5dID0KKwkJCQkJaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTsKKworCQlpZiAocW4gPCAwKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSAiCisJCQkgICAgICAgInF1ZXVlIHVuYXZhaWxhYmxlIGZvciB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBlcnJfdW5sb2NrX3N0YTsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSB0aGUgc2Vzc2lvbiwgd2UgY2FuJ3QgaGF2ZQorCQkgKiBhbnl0aGluZyBnb2luZyBvbiBvbiB0aGUgcXVldWUgdGhpcyBUSUQgbWFwcyBpbnRvLCBzbworCQkgKiBzdG9wIGl0IGZvciBub3cuIFRoaXMgaXMgYSAidmlydHVhbCIgc3RvcCB1c2luZyB0aGUgc2FtZQorCQkgKiBtZWNoYW5pc20gdGhhdCBkcml2ZXJzIHdpbGwgdXNlLgorCQkgKgorCQkgKiBYWFg6IHF1ZXVlIHVwIGZyYW1lcyBmb3IgdGhpcyBzZXNzaW9uIGluIHRoZSBzdGFfaW5mbworCQkgKglzdHJ1Y3QgaW5zdGVhZCB0byBhdm9pZCBoaXR0aW5nIGFsbCBvdGhlciBTVEFzLgorCQkgKi8KKwkJaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKAorCQkJJmxvY2FsLT5odywgaHctPnF1ZXVlcyArIHFuLAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwl9CisKIAkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLwogCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9CiAJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7CkBAIC0yNjIsOCArMzI0LDkgQEAKIAkJCQkJdGlkKTsKICNlbmRpZgogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bmxvY2tfc3RhOworCQlnb3RvIGVycl9yZXR1cm5fcXVldWU7CiAJfQorCiAJLyogVHggdGltZXIgKi8KIAlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZnVuY3Rpb24gPQogCQkJc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZDsKQEAgLTI3MSw0OSArMzM0LDI1IEBACiAJCQkodW5zaWduZWQgbG9uZykmc3RhLT50aW1lcl90b190aWRbdGlkXTsKIAlpbml0X3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOwogCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKLQkJLyogY3JlYXRlIGEgbmV3IHF1ZXVlIGZvciB0aGlzIGFnZ3JlZ2F0aW9uICovCi0JCXJldCA9IGllZWU4MDIxMV9odF9hZ2dfcXVldWVfYWRkKGxvY2FsLCBzdGEsIHRpZCk7Ci0KLQkJLyogY2FzZSBubyBxdWV1ZSBpcyBhdmFpbGFibGUgdG8gYWdncmVnYXRpb24KLQkJICogZG9uJ3Qgc3dpdGNoIHRvIGFnZ3JlZ2F0aW9uICovCi0JCWlmIChyZXQpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtICIKLQkJCSAgICAgICAicXVldWUgdW5hdmFpbGFibGUgZm9yIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJCWdvdG8gZXJyX3VubG9ja19xdWV1ZTsKLQkJfQotCX0KLQlzZGF0YSA9IHN0YS0+c2RhdGE7Ci0KIAkvKiBPaywgdGhlIEFkZGJhIGZyYW1lIGhhc24ndCBiZWVuIHNlbnQgeWV0LCBidXQgaWYgdGhlIGRyaXZlciBjYWxscyB0aGUKIAkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KIAkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKIAotCS8qIFRoaXMgaXMgc2xpZ2h0bHkgcmFjeSBiZWNhdXNlIHRoZSBxdWV1ZSBpc24ndCBzdG9wcGVkICovCiAJc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdOwogCiAJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCiAJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CiAKIAlpZiAocmV0KSB7Ci0JCS8qIE5vIG5lZWQgdG8gcmVxdWV1ZSB0aGUgcGFja2V0cyBpbiB0aGUgYWdnIHF1ZXVlLCBzaW5jZSB3ZQotCQkgKiBoZWxkIHRoZSB0eCBsb2NrOiBubyBwYWNrZXQgY291bGQgYmUgZW5xdWV1ZWQgdG8gdGhlIG5ld2x5Ci0JCSAqIGFsbG9jYXRlZCBxdWV1ZSAqLwotCQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKIAkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCiAJCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotCQlnb3RvIGVycl91bmxvY2tfcXVldWU7CisJCWdvdG8gZXJyX2ZyZWU7CiAJfQorCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IHFuOwogCi0JLyogV2lsbCBwdXQgYWxsIHRoZSBwYWNrZXRzIGluIHRoZSBuZXcgU1cgcXVldWUgKi8KLQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJaWVlZTgwMjExX3JlcXVldWUobG9jYWwsIGllZWU4MDJfMWRfdG9fYWNbdGlkXSk7CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAKIAkvKiBzZW5kIGFuIGFkZEJBIHJlcXVlc3QgKi8KQEAgLTMyMiw3ICszNjEsNiBAQAogCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3I7CiAJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24gPSBzdGFydF9zZXFfbnVtOwogCi0KIAlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0YS0+c2RhdGEsIHJhLCB0aWQsCiAJCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4sCiAJCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24sCkBAIC0zMzQsMTUgKzM3MiwyNCBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICJhY3RpdmF0ZWQgYWRkQkEgcmVzcG9uc2UgdGltZXIgb24gdGlkICVkXG4iLCB0aWQpOwogI2VuZGlmCi0JZ290byBleGl0OworCWdvdG8gdW5sb2NrOwogCi1lcnJfdW5sb2NrX3F1ZXVlOgorIGVycl9mcmVlOgogCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CiAJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKLQlyZXQgPSAtRUJVU1k7Ci1lcnJfdW5sb2NrX3N0YToKKyBlcnJfcmV0dXJuX3F1ZXVlOgorCWlmIChxbiA+PSAwKSB7CisJCS8qIFdlIGZhaWxlZCwgc28gc3RhcnQgcXVldWUgYWdhaW4gcmlnaHQgYXdheS4gKi8KKwkJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKGh3LCBody0+cXVldWVzICsgcW4sCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCQkvKiBnaXZlIHF1ZXVlIGJhY2sgdG8gcG9vbCAqLworCQlzcGluX2xvY2soJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTsKKwkJbG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3FuXSA9IC0xOworCQlzcGluX3VubG9jaygmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2spOworCX0KKyBlcnJfdW5sb2NrX3N0YToKIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLWV4aXQ6CisgdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zNzUsNyArNDIyLDcgQEAKIAlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCi0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKKwlpZiAoV0FSTl9PTighKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgd2FzIG5vdCByZXF1ZXN0ZWQgeWV0LCBzdGF0ZSBpcyAlZFxuIiwKIAkJCQkqc3RhdGUpOwpAQCAtMzg1LDcgKzQzMiw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlXQVJOX09OX09OQ0UoKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSyk7CisJaWYgKFdBUk5fT04oKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSykpCisJCWdvdG8gb3V0OwogCiAJKnN0YXRlIHw9IEhUX0FEREJBX0RSVl9SRUFEWV9NU0s7CiAKQEAgLTM5Myw5ICs0NDEsMTggQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aWQgJWQgXG4iLCB0aWQpOwogI2VuZGlmCi0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7CisJCWlmIChody0+YW1wZHVfcXVldWVzKSB7CisJCQkvKgorCQkJICogV2FrZSB1cCB0aGlzIHF1ZXVlLCB3ZSBzdG9wcGVkIGl0IGVhcmxpZXIsCisJCQkgKiB0aGlzIHdpbGwgaW4gdHVybiB3YWtlIHRoZSBlbnRpcmUgQUMuCisJCQkgKi8KKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihodywKKwkJCQlody0+cXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVt0aWRdLAorCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisJCX0KIAl9CisKKyBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC00ODUsNyArNTQyLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1OCAqc3RhdGU7Ci0JaW50IGFnZ19xdWV1ZTsKIAogCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKQEAgLTUyNywxOSArNTgzLDE5IEBACiAJCWllZWU4MDIxMV9zZW5kX2RlbGJhKHN0YS0+c2RhdGEsIHJhLCB0aWQsCiAJCQlXTEFOX0JBQ0tfSU5JVElBVE9SLCBXTEFOX1JFQVNPTl9RU1RBX05PVF9VU0UpOwogCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKLQkJYWdnX3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCQlpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShsb2NhbCwgc3RhLCB0aWQsIDEpOwotCi0JCS8qIFdlIGp1c3QgcmVxdWV1ZWQgdGhlIGFsbCB0aGUgZnJhbWVzIHRoYXQgd2VyZSBpbiB0aGUKLQkJICogcmVtb3ZlZCBxdWV1ZSwgYW5kIHNpbmNlIHdlIG1pZ2h0IG1pc3MgYSBzb2Z0aXJxIHdlIGRvCi0JCSAqIG5ldGlmX3NjaGVkdWxlX3F1ZXVlLiAgaWVlZTgwMjExX3dha2VfcXVldWUgaXMgbm90IHVzZWQKLQkJICogaGVyZSBhcyB0aGlzIHF1ZXVlIGlzIG5vdCBuZWNlc3NhcmlseSBzdG9wcGVkCi0JCSAqLwotCQluZXRpZl9zY2hlZHVsZV9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LAotCQkJCQkJCSBhZ2dfcXVldWUpKTsKLQl9CiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLICYmCisJICAgIGh3LT5hbXBkdV9xdWV1ZXMpIHsKKwkJLyoKKwkJICogV2FrZSB1cCB0aGlzIHF1ZXVlLCB3ZSBzdG9wcGVkIGl0IGVhcmxpZXIsCisJCSAqIHRoaXMgd2lsbCBpbiB0dXJuIHdha2UgdGhlIGVudGlyZSBBQy4KKwkJICovCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihodywKKwkJCWh3LT5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW3RpZF0sCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCX0KKwogCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwogCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOwogCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CkBAIC02MTMsMTIgKzY2OSwyMSBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwogCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQogCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewotCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOwotCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKKwkJdTggY3Vyc3RhdGUgPSAqc3RhdGU7CiAKLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwgJiYKLQkJICAgIGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKKwkJKnN0YXRlIHw9IEhUX0FEREJBX1JFQ0VJVkVEX01TSzsKKworCQlpZiAoaHctPmFtcGR1X3F1ZXVlcyAmJiAqc3RhdGUgIT0gY3Vyc3RhdGUgJiYKKwkJICAgICpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJCS8qCisJCQkgKiBXYWtlIHVwIHRoaXMgcXVldWUsIHdlIHN0b3BwZWQgaXQgZWFybGllciwKKwkJCSAqIHRoaXMgd2lsbCBpbiB0dXJuIHdha2UgdGhlIGVudGlyZSBBQy4KKwkJCSAqLworCQkJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKGh3LAorCQkJCWh3LT5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW3RpZF0sCisJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwkJfQorCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKIAogCQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSB7CiAJCQkodm9pZClsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggYzhkOTY5Yi4uNTg2OTNlNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMzQxLDExICszNDEsMTUgQEAKIAlzaW5mby0+ZmlsbGVkID0gU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUgfAogCQkJU1RBVElPTl9JTkZPX1JYX0JZVEVTIHwKIAkJCVNUQVRJT05fSU5GT19UWF9CWVRFUyB8CisJCQlTVEFUSU9OX0lORk9fUlhfUEFDS0VUUyB8CisJCQlTVEFUSU9OX0lORk9fVFhfUEFDS0VUUyB8CiAJCQlTVEFUSU9OX0lORk9fVFhfQklUUkFURTsKIAogCXNpbmZvLT5pbmFjdGl2ZV90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhLT5sYXN0X3J4KTsKIAlzaW5mby0+cnhfYnl0ZXMgPSBzdGEtPnJ4X2J5dGVzOwogCXNpbmZvLT50eF9ieXRlcyA9IHN0YS0+dHhfYnl0ZXM7CisJc2luZm8tPnJ4X3BhY2tldHMgPSBzdGEtPnJ4X3BhY2tldHM7CisJc2luZm8tPnR4X3BhY2tldHMgPSBzdGEtPnR4X3BhY2tldHM7CiAKIAlpZiAoc3RhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgewogCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CkBAIC00NDcsNyArNDUxLDggQEAKIAkgKiBUaGlzIGlzIGEga2x1ZGdlLiBiZWFjb24gaW50ZXJ2YWwgc2hvdWxkIHJlYWxseSBiZSBwYXJ0CiAJICogb2YgdGhlIGJlYWNvbiBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAocGFyYW1zLT5pbnRlcnZhbCkgeworCWlmIChwYXJhbXMtPmludGVydmFsICYmIChzZGF0YS0+bG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCAhPQorCQkJCSBwYXJhbXMtPmludGVydmFsKSkgewogCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IHBhcmFtcy0+aW50ZXJ2YWw7CiAJCWVyciA9IGllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLAogCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKTsKQEAgLTExODAsNDUgKzExODUsNDUgQEAKIAkJCQkgdTggc3VidHlwZSwgdTggKmllcywgc2l6ZV90IGllc19sZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAogCXN3aXRjaCAoc3VidHlwZSkgewogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSA+PiA0OgogCQlpZiAobG9jYWwtPm9wcy0+aHdfc2NhbikKIAkJCWJyZWFrOwotCQlrZnJlZShpZnN0YS0+aWVfcHJvYmVyZXEpOwotCQlpZnN0YS0+aWVfcHJvYmVyZXEgPSBpZXM7Ci0JCWlmc3RhLT5pZV9wcm9iZXJlcV9sZW4gPSBpZXNfbGVuOworCQlrZnJlZShpZm1nZC0+aWVfcHJvYmVyZXEpOworCQlpZm1nZC0+aWVfcHJvYmVyZXEgPSBpZXM7CisJCWlmbWdkLT5pZV9wcm9iZXJlcV9sZW4gPSBpZXNfbGVuOwogCQlyZXR1cm4gMDsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID4+IDQ6Ci0JCWtmcmVlKGlmc3RhLT5pZV9wcm9iZXJlc3ApOwotCQlpZnN0YS0+aWVfcHJvYmVyZXNwID0gaWVzOwotCQlpZnN0YS0+aWVfcHJvYmVyZXNwX2xlbiA9IGllc19sZW47CisJCWtmcmVlKGlmbWdkLT5pZV9wcm9iZXJlc3ApOworCQlpZm1nZC0+aWVfcHJvYmVyZXNwID0gaWVzOworCQlpZm1nZC0+aWVfcHJvYmVyZXNwX2xlbiA9IGllc19sZW47CiAJCXJldHVybiAwOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEggPj4gNDoKLQkJa2ZyZWUoaWZzdGEtPmllX2F1dGgpOwotCQlpZnN0YS0+aWVfYXV0aCA9IGllczsKLQkJaWZzdGEtPmllX2F1dGhfbGVuID0gaWVzX2xlbjsKKwkJa2ZyZWUoaWZtZ2QtPmllX2F1dGgpOworCQlpZm1nZC0+aWVfYXV0aCA9IGllczsKKwkJaWZtZ2QtPmllX2F1dGhfbGVuID0gaWVzX2xlbjsKIAkJcmV0dXJuIDA7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRID4+IDQ6Ci0JCWtmcmVlKGlmc3RhLT5pZV9hc3NvY3JlcSk7Ci0JCWlmc3RhLT5pZV9hc3NvY3JlcSA9IGllczsKLQkJaWZzdGEtPmllX2Fzc29jcmVxX2xlbiA9IGllc19sZW47CisJCWtmcmVlKGlmbWdkLT5pZV9hc3NvY3JlcSk7CisJCWlmbWdkLT5pZV9hc3NvY3JlcSA9IGllczsKKwkJaWZtZ2QtPmllX2Fzc29jcmVxX2xlbiA9IGllc19sZW47CiAJCXJldHVybiAwOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRID4+IDQ6Ci0JCWtmcmVlKGlmc3RhLT5pZV9yZWFzc29jcmVxKTsKLQkJaWZzdGEtPmllX3JlYXNzb2NyZXEgPSBpZXM7Ci0JCWlmc3RhLT5pZV9yZWFzc29jcmVxX2xlbiA9IGllc19sZW47CisJCWtmcmVlKGlmbWdkLT5pZV9yZWFzc29jcmVxKTsKKwkJaWZtZ2QtPmllX3JlYXNzb2NyZXEgPSBpZXM7CisJCWlmbWdkLT5pZV9yZWFzc29jcmVxX2xlbiA9IGllc19sZW47CiAJCXJldHVybiAwOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSCA+PiA0OgotCQlrZnJlZShpZnN0YS0+aWVfZGVhdXRoKTsKLQkJaWZzdGEtPmllX2RlYXV0aCA9IGllczsKLQkJaWZzdGEtPmllX2RlYXV0aF9sZW4gPSBpZXNfbGVuOworCQlrZnJlZShpZm1nZC0+aWVfZGVhdXRoKTsKKwkJaWZtZ2QtPmllX2RlYXV0aCA9IGllczsKKwkJaWZtZ2QtPmllX2RlYXV0aF9sZW4gPSBpZXNfbGVuOwogCQlyZXR1cm4gMDsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyA+PiA0OgotCQlrZnJlZShpZnN0YS0+aWVfZGlzYXNzb2MpOwotCQlpZnN0YS0+aWVfZGlzYXNzb2MgPSBpZXM7Ci0JCWlmc3RhLT5pZV9kaXNhc3NvY19sZW4gPSBpZXNfbGVuOworCQlrZnJlZShpZm1nZC0+aWVfZGlzYXNzb2MpOworCQlpZm1nZC0+aWVfZGlzYXNzb2MgPSBpZXM7CisJCWlmbWdkLT5pZV9kaXNhc3NvY19sZW4gPSBpZXNfbGVuOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEyNDgsNyArMTI1Myw2IEBACiAKIAlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlyZXQgPSBzZXRfbWdtdF9leHRyYV9pZV9zdGEoc2RhdGEsIHBhcmFtcy0+c3VidHlwZSwKIAkJCQkJICAgIGllcywgaWVzX2xlbik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCBjNTQyMTkzLi5lMzQyMDMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtOTQsMzEgKzk0LDMxIEBACiBJRUVFODAyMTFfSUZfRklMRShmb3JjZV91bmljYXN0X3JhdGVpZHgsIGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKG1heF9yYXRlY3RybF9yYXRlaWR4LCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgREVDKTsKIAotLyogU1RBL0lCU1MgYXR0cmlidXRlcyAqLwotSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUuc3RhLnN0YXRlLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUuc3RhLmJzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5zdGEucHJldl9ic3NpZCwgTUFDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1LnN0YS5zc2lkX2xlbiwgU0laRSk7Ci1JRUVFODAyMTFfSUZfRklMRShhaWQsIHUuc3RhLmFpZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1LnN0YS5hcF9jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1LnN0YS5jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5zdGEuZXh0cmFfaWVfbGVuLCBTSVpFKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUuc3RhLmF1dGhfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5zdGEuYXNzb2NfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUuc3RhLmF1dGhfYWxncywgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1LnN0YS5hdXRoX2FsZywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUuc3RhLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CisvKiBTVEEgYXR0cmlidXRlcyAqLworSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUubWdkLnN0YXRlLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUubWdkLmJzc2lkLCBNQUMpOworSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5tZ2QucHJldl9ic3NpZCwgTUFDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1Lm1nZC5zc2lkX2xlbiwgU0laRSk7CitJRUVFODAyMTFfSUZfRklMRShhaWQsIHUubWdkLmFpZCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1Lm1nZC5hcF9jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1Lm1nZC5jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5tZ2QuZXh0cmFfaWVfbGVuLCBTSVpFKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUubWdkLmF1dGhfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5tZ2QuYXNzb2NfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUubWdkLmF1dGhfYWxncywgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1Lm1nZC5hdXRoX2FsZywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUubWdkLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CiAKIHN0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9mbXRfZmxhZ3MoCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMlcyVzJXMlcyVzJXNcbiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCiAJCSBzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCA/ICJDVFMgcHJvdFxuIiA6ICIiKTsKIH0KIF9fSUVFRTgwMjExX0lGX0ZJTEUoZmxhZ3MpOwpAQCAtMjgzLDkgKzI4MywxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlhZGRfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWFkZF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpAQCAtNDE4LDkgKzQyMCwxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlkZWxfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWRlbF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2h0LmMgYi9uZXQvbWFjODAyMTEvaHQuYwppbmRleCA4MmVhMGI2Li40ZTNjNzJmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaHQuYworKysgYi9uZXQvbWFjODAyMTEvaHQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAicmF0ZS5oIgogCiB2b2lkIGllZWU4MDIxMV9odF9jYXBfaWVfdG9fc3RhX2h0X2NhcChzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcF9pZSwKQEAgLTkzLDcgKzk0LDkgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19odF9jb25mIGh0OworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUzMiBjaGFuZ2VkID0gMDsKIAlib29sIGVuYWJsZV9odCA9IHRydWUsIGh0X2NoYW5nZWQ7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7CkBAIC0xMzYsNiArMTM5LDE2IEBACiAJaWYgKGh0X2NoYW5nZWQpIHsKICAgICAgICAgICAgICAgICAvKiBjaGFubmVsX3R5cGUgY2hhbmdlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgKi8KIAkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgMCk7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKKwkJaWYgKHN0YSkKKwkJCXJhdGVfY29udHJvbF9yYXRlX3VwZGF0ZShsb2NhbCwgc2JhbmQsIHN0YSwKKwkJCQkJCSBJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRCk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKICAgICAgICAgfQogCiAJLyogZGlzYWJsZSBIVCAqLwpAQCAtMTY5LDcgKzE4Miw2IEBACiAJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBwYXJhbXM7CkBAIC0xOTAsOCArMjAyLDkgQEAKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQogCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiZWNjMQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTAsMCArMSw5MDcgQEAKKy8qCisgKiBJQlNTIG1vZGUgaW1wbGVtZW50YXRpb24KKyAqIENvcHlyaWdodCAyMDAzLTIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KKyAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAicmF0ZS5oIgorCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMICgyICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1cgKDE1ICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCAoNyAqIEhaKQorCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMICgzMCAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfSUJTU19NRVJHRV9ERUxBWSAweDQwMDAwMAorI2RlZmluZSBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUICg2MCAqIEhaKQorCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUyAxMjgKKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJc2l6ZV90IGxlbikKK3sKKwl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOworCisJaWYgKGxlbiA8IDI0ICsgNikKKwkJcmV0dXJuOworCisJYXV0aF9hbGcgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF9hbGcpOworCWF1dGhfdHJhbnNhY3Rpb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbik7CisJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOworCisJLyoKKwkgKiBJRUVFIDgwMi4xMSBzdGFuZGFyZCBkb2VzIG5vdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGluIElCU1MKKwkgKiBuZXR3b3JrcyBhbmQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHNlZW0gdG8gdXNlIGl0LgorCSAqIEhvd2V2ZXIsIHRyeSB0byByZXBseSB0byBhdXRoZW50aWNhdGlvbiBhdHRlbXB0cyBpZiBzb21lb25lCisJICogaGFzIGFjdHVhbGx5IGltcGxlbWVudGVkIHRoaXMuCisJICovCisJaWYgKGF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOICYmIGF1dGhfdHJhbnNhY3Rpb24gPT0gMSkKKwkJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMiwgV0xBTl9BVVRIX09QRU4sIE5VTEwsIDAsCisJCQkJICAgIHNkYXRhLT51Lmlic3MuYnNzaWQsIDApOworfQorCitzdGF0aWMgaW50IF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IGludCBiZWFjb25faW50LAorCQkJCSAgICAgY29uc3QgaW50IGZyZXEsCisJCQkJICAgICBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCisJCQkJICAgICBjb25zdCB1OCAqc3VwcF9yYXRlcywKKwkJCQkgICAgIGNvbnN0IHUxNiBjYXBhYmlsaXR5LCB1NjQgdHNmKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IHJlcyA9IDAsIHJhdGVzLCBpLCBqOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICpwb3M7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCisJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgeworCQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCisJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCX0KKworCWlmICgoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSAmJgorCSAgIG1lbWNtcChpZmlic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pID09IDApCisJCXJldHVybiByZXM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDQwMCk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCisJCSAgICAgICAicmVzcG9uc2VcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpKSB7CisJCS8qIFJlbW92ZSBwb3NzaWJsZSBTVEEgZW50cmllcyBmcm9tIG90aGVyIElCU1MgbmV0d29ya3MuICovCisJCXN0YV9pbmZvX2ZsdXNoX2RlbGF5ZWQoc2RhdGEpOworCX0KKworCW1lbWNweShpZmlic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IGJlYWNvbl9pbnQgPj0gMTAgPyBiZWFjb25faW50IDogMTA7CisKKwlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IGNhcGFiaWxpdHkgJgorCQlXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/IDEgOiAwOworCisJcmVzID0gaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBmcmVxKTsKKworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwkvKiBCdWlsZCBJQlNTIHByb2JlIHJlc3BvbnNlICovCisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQorCQlza2JfcHV0KHNrYiwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKKwltZW1zZXQobWdtdCwgMCwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKKwltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9CisJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQpOworCW1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KHRzZik7CisJbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiaWxpdHkpOworCisJcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZmlic3MtPnNzaWRfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCSpwb3MrKyA9IGlmaWJzcy0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKTsKKworCXJhdGVzID0gc3VwcF9yYXRlc19sZW47CisJaWYgKHJhdGVzID4gOCkKKwkJcmF0ZXMgPSA4OworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOworCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJKnBvcysrID0gcmF0ZXM7CisJbWVtY3B5KHBvcywgc3VwcF9yYXRlcywgcmF0ZXMpOworCisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKyAxKTsKKwkJKnBvcysrID0gV0xBTl9FSURfRFNfUEFSQU1TOworCQkqcG9zKysgPSAxOworCQkqcG9zKysgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoZnJlcSk7CisJfQorCisJcG9zID0gc2tiX3B1dChza2IsIDIgKyAyKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9JQlNTX1BBUkFNUzsKKwkqcG9zKysgPSAyOworCS8qIEZJWDogc2V0IEFUSU0gd2luZG93IGJhc2VkIG9uIHNjYW4gcmVzdWx0cyAqLworCSpwb3MrKyA9IDA7CisJKnBvcysrID0gMDsKKworCWlmIChzdXBwX3JhdGVzX2xlbiA+IDgpIHsKKwkJcmF0ZXMgPSBzdXBwX3JhdGVzX2xlbiAtIDg7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOworCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKKwkJKnBvcysrID0gcmF0ZXM7CisJCW1lbWNweShwb3MsICZzdXBwX3JhdGVzWzhdLCByYXRlcyk7CisJfQorCisJaWZpYnNzLT5wcm9iZV9yZXNwID0gc2tiOworCisJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CisKKworCXJhdGVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykgeworCQlpbnQgYml0cmF0ZSA9IChzdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1OworCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSBiaXRyYXRlKQorCQkJCXJhdGVzIHw9IEJJVChqKTsKKwl9CisKKwlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBzdXBwX3JhdGVzX2xlbiwgc3VwcF9yYXRlcyk7CisKKwlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUOworCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRDsKKwltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7CisKKwltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOworCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCit7CisJcmV0dXJuIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsCisJCQkJCSBic3MtPmNic3MuYnNzaWQsCisJCQkJCSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsLAorCQkJCQkgYnNzLT5jYnNzLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgYnNzLT5zdXBwX3JhdGVzX2xlbiwgYnNzLT5zdXBwX3JhdGVzLAorCQkJCQkgYnNzLT5jYnNzLmNhcGFiaWxpdHksCisJCQkJCSBic3MtPmNic3MudHNmKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgc2l6ZV90IGxlbiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCisJCQkJICBib29sIGJlYWNvbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgZnJlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwl1NjQgYmVhY29uX3RpbWVzdGFtcCwgcnhfdGltZXN0YW1wOworCXUzMiBzdXBwX3JhdGVzID0gMDsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSByeF9zdGF0dXMtPmJhbmQ7CisKKwlpZiAoZWxlbXMtPmRzX3BhcmFtcyAmJiBlbGVtcy0+ZHNfcGFyYW1zX2xlbiA9PSAxKQorCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGVsZW1zLT5kc19wYXJhbXNbMF0pOworCWVsc2UKKwkJZnJlcSA9IHJ4X3N0YXR1cy0+ZnJlcTsKKworCWNoYW5uZWwgPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwobG9jYWwtPmh3LndpcGh5LCBmcmVxKTsKKworCWlmICghY2hhbm5lbCB8fCBjaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQlyZXR1cm47CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmIGVsZW1zLT5zdXBwX3JhdGVzICYmCisJICAgIG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKKwkJc3VwcF9yYXRlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKGxvY2FsLCBlbGVtcywgYmFuZCk7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpOworCQlpZiAoc3RhKSB7CisJCQl1MzIgcHJldl9yYXRlczsKKworCQkJcHJldl9yYXRlcyA9IHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF07CisJCQkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KKwkJCXN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gPSBzdXBwX3JhdGVzIHwKKwkJCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJCQlpZiAoc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSAhPSBwcmV2X3JhdGVzKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdXBkYXRlZCBzdXBwX3JhdGVzIHNldCAiCisJCQkJICAgICJmb3IgJXBNIGJhc2VkIG9uIGJlYWNvbiBpbmZvICgweCVsbHggfCAiCisJCQkJICAgICIweCVsbHggLT4gMHglbGx4KVxuIiwKKwkJCQkgICAgc2RhdGEtPmRldi0+bmFtZSwKKwkJCQkgICAgc3RhLT5zdGEuYWRkciwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJldl9yYXRlcywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3VwcF9yYXRlcywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSk7CisjZW5kaWYKKwkJfSBlbHNlCisJCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUobG9jYWwsIHJ4X3N0YXR1cywgbWdtdCwgbGVuLCBlbGVtcywKKwkJCQkJY2hhbm5lbCwgYmVhY29uKTsKKwlpZiAoIWJzcykKKwkJcmV0dXJuOworCisJLyogd2FzIGp1c3QgdXBkYXRlZCBpbiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlICovCisJYmVhY29uX3RpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7CisKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIG1lcmdlIElCU1MgKi8KKworCS8qIG1lcmdlIG9ubHkgb24gYmVhY29ucyAoPz8/KSAqLworCWlmICghYmVhY29uKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiB3ZSB1c2UgYSBmaXhlZCBCU1NJRCAqLworCWlmIChzZGF0YS0+dS5pYnNzLmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBub3QgYW4gSUJTUyAqLworCWlmICghKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBkaWZmZXJlbnQgY2hhbm5lbCAqLworCWlmIChic3MtPmNic3MuY2hhbm5lbCAhPSBsb2NhbC0+b3Blcl9jaGFubmVsKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBkaWZmZXJlbnQgU1NJRCAqLworCWlmIChlbGVtcy0+c3NpZF9sZW4gIT0gc2RhdGEtPnUuaWJzcy5zc2lkX2xlbiB8fAorCSAgICBtZW1jbXAoZWxlbXMtPnNzaWQsIHNkYXRhLT51Lmlic3Muc3NpZCwKKwkJCQlzZGF0YS0+dS5pYnNzLnNzaWRfbGVuKSkKKwkJZ290byBwdXRfYnNzOworCisJLyogc2FtZSBCU1NJRCAqLworCWlmIChtZW1jbXAoYnNzLT5jYnNzLmJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwkJZ290byBwdXRfYnNzOworCisJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfVFNGVCkgeworCQkvKgorCQkgKiBGb3IgY29ycmVjdCBJQlNTIG1lcmdpbmcgd2UgbmVlZCBtYWN0aW1lOyBzaW5jZSBtYWN0aW1lIGlzCisJCSAqIGRlZmluZWQgYXMgdGhlIHRpbWUgdGhlIGZpcnN0IGRhdGEgc3ltYm9sIG9mIHRoZSBmcmFtZSBoaXRzCisJCSAqIHRoZSBQSFksIGFuZCB0aGUgdGltZXN0YW1wIG9mIHRoZSBiZWFjb24gaXMgZGVmaW5lZCBhcyAidGhlCisJCSAqIHRpbWUgdGhhdCB0aGUgZGF0YSBzeW1ib2wgY29udGFpbmluZyB0aGUgZmlyc3QgYml0IG9mIHRoZQorCQkgKiB0aW1lc3RhbXAgaXMgdHJhbnNtaXR0ZWQgdG8gdGhlIFBIWSBwbHVzIHRoZSB0cmFuc21pdHRpbmcKKwkJICogU1RBJ3MgZGVsYXlzIHRocm91Z2ggaXRzIGxvY2FsIFBIWSBmcm9tIHRoZSBNQUMtUEhZCisJCSAqIGludGVyZmFjZSB0byBpdHMgaW50ZXJmYWNlIHdpdGggdGhlIFdNIiAoODAyLjExIDExLjEuMikKKwkJICogLSBlcXVhbHMgdGhlIHRpbWUgdGhpcyBiaXQgYXJyaXZlcyBhdCB0aGUgcmVjZWl2ZXIgLSB3ZSBoYXZlCisJCSAqIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBvZmZzZXQgYmV0d2VlbiB0aGUgdHdvLgorCQkgKgorCQkgKiBFLmcuIGF0IDEgTUJpdCB0aGF0IG1lYW5zIG1hY3RpbWUgaXMgMTkyIHVzZWMgZWFybGllcgorCQkgKiAoPTI0IGJ5dGVzICogOCB1c2Vjcy9ieXRlKSB0aGFuIHRoZSBiZWFjb24gdGltZXN0YW1wLgorCQkgKi8KKwkJaW50IHJhdGU7CisKKwkJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpCisJCQlyYXRlID0gNjU7IC8qIFRPRE86IEhUIHJhdGVzICovCisJCWVsc2UKKwkJCXJhdGUgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdLT4KKwkJCQliaXRyYXRlc1tyeF9zdGF0dXMtPnJhdGVfaWR4XS5iaXRyYXRlOworCisJCXJ4X3RpbWVzdGFtcCA9IHJ4X3N0YXR1cy0+bWFjdGltZSArICgyNCAqIDggKiAxMCAvIHJhdGUpOworCX0gZWxzZSBpZiAobG9jYWwgJiYgbG9jYWwtPm9wcyAmJiBsb2NhbC0+b3BzLT5nZXRfdHNmKQorCQkvKiBzZWNvbmQgYmVzdCBvcHRpb246IGdldCBjdXJyZW50IFRTRiAqLworCQlyeF90aW1lc3RhbXAgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJZWxzZQorCQkvKiBjYW4ndCBtZXJnZSB3aXRob3V0IGtub3dpbmcgdGhlIFRTRiAqLworCQlyeF90aW1lc3RhbXAgPSAtMUxMVTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlJYIGJlYWNvbiBTQT0lcE0gQlNTSUQ9IgorCSAgICAgICAiJXBNIFRTRj0weCVsbHggQkNOPTB4JWxseCBkaWZmPSVsbGQgQCVsdVxuIiwKKwkgICAgICAgbWdtdC0+c2EsIG1nbXQtPmJzc2lkLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJ4X3RpbWVzdGFtcCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliZWFjb25fdGltZXN0YW1wLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShyeF90aW1lc3RhbXAgLSBiZWFjb25fdGltZXN0YW1wKSwKKwkgICAgICAgamlmZmllcyk7CisjZW5kaWYKKworCS8qIGdpdmUgc2xvdyBoYXJkd2FyZSBzb21lIHRpbWUgdG8gZG8gdGhlIFRTRiBzeW5jICovCisJaWYgKHJ4X3RpbWVzdGFtcCA8IElFRUU4MDIxMV9JQlNTX01FUkdFX0RFTEFZKQorCQlnb3RvIHB1dF9ic3M7CisKKwlpZiAoYmVhY29uX3RpbWVzdGFtcCA+IHJ4X3RpbWVzdGFtcCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIFRTRiBoaWdoZXIgdGhhbiAiCisJCSAgICAgICAibG9jYWwgVFNGIC0gSUJTUyBtZXJnZSB3aXRoIEJTU0lEICVwTVxuIiwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPmJzc2lkKTsKKyNlbmRpZgorCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKKwkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKKwl9CisKKyBwdXRfYnNzOgorCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworfQorCisvKgorICogQWRkIGEgbmV3IElCU1Mgc3RhdGlvbiwgd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuLAorICogaW4gSUJTUyBtb2RlLCByZWNlaXZpbmcgYSBmcmFtZSBmcm9tIGEgeWV0LXVua25vd24gc3RhdGlvbiwgaGVuY2UKKyAqIG11c3QgYmUgY2FsbGFibGUgaW4gYXRvbWljIGNvbnRleHQuCisgKi8KK3N0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJdTggKmJzc2lkLHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7CisKKwkvKiBUT0RPOiBDb3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSBhbmQKKwkgKiBhbGxvdyBuZXcgb25lIHRvIGJlIGFkZGVkLiAqLworCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyByb29tIGZvciBhIG5ldyBJQlNTIFNUQSAiCisJCQkgICAgICAgImVudHJ5ICVwTVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWRkcik7CisJCX0KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCkpCisJCXJldHVybiBOVUxMOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkZGluZyBuZXcgSUJTUyBzdGF0aW9uICVwTSAoZGV2PSVzKVxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBhZGRyLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCisJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIEdGUF9BVE9NSUMpOworCWlmICghc3RhKQorCQlyZXR1cm4gTlVMTDsKKworCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKKworCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLworCXN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gPSBzdXBwX3JhdGVzIHwKKwkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOworCisJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEpOworCisJaWYgKHN0YV9pbmZvX2luc2VydChzdGEpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBzdGE7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgYWN0aXZlID0gMDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQlpZiAoc3RhLT5zZGF0YSA9PSBzZGF0YSAmJgorCQkgICAgdGltZV9hZnRlcihzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCwKKwkJCSAgICAgICBqaWZmaWVzKSkgeworCQkJYWN0aXZlKys7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIGFjdGl2ZTsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKworCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKTsKKwlpZiAoaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCisJCXJldHVybjsKKworCWlmICgoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkgJiYKKwkgICAgKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUwpKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKKwkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisKKwkvKiBYWFggbWF5YmUgcmFjeT8gKi8KKwlpZiAoc2RhdGEtPmxvY2FsLT5zY2FuX3JlcSkKKwkJcmV0dXJuOworCisJbWVtY3B5KHNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCisJICAgICAgIGlmaWJzcy0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7CisJc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZmlic3MtPnNzaWRfbGVuOworCWllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsICZzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXU4ICpwb3M7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IHN1cHBfcmF0ZXNbSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTXTsKKwl1MTYgY2FwYWJpbGl0eTsKKwlpbnQgaTsKKworCWlmIChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKSB7CisJCW1lbWNweShic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCS8qIEdlbmVyYXRlIHJhbmRvbSwgbm90IGJyb2FkY2FzdCwgbG9jYWxseSBhZG1pbmlzdGVyZWQgQlNTSUQuIE1peCBpbgorCQkgKiBvd24gTUFDIGFkZHJlc3MgdG8gbWFrZSBzdXJlIHRoYXQgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIHByb3BlcgorCQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLworCQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7CisJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQorCQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07CisJCWJzc2lkWzBdICY9IH4weDAxOworCQlic3NpZFswXSB8PSAweDAyOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlpZiAobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9PSAwKQorCQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gMTAwOworCisJY2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOworCisJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKKwkJY2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwllbHNlCisJCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKKworCXBvcyA9IHN1cHBfcmF0ZXM7CisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKKwkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCX0KKworCXJldHVybiBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLAorCQkJCQkgYnNzaWQsIGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQsCisJCQkJCSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQkJIHNiYW5kLT5uX2JpdHJhdGVzLCBzdXBwX3JhdGVzLAorCQkJCQkgY2FwYWJpbGl0eSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CisJaW50IGFjdGl2ZV9pYnNzOworCisJaWYgKGlmaWJzcy0+c3NpZF9sZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdGFfZmluZF9pYnNzIChhY3RpdmVfaWJzcz0lZClcbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKGFjdGl2ZV9pYnNzKQorCQlyZXR1cm4gMDsKKworCWlmIChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKQorCQlic3NpZCA9IGlmaWJzcy0+YnNzaWQ7CisJYnNzID0gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgTlVMTCwgYnNzaWQsCisJCQkJICAgICAgIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbiwKKwkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0lCU1MsCisJCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJaWYgKGJzcykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIHN0YV9maW5kX2lic3M6IHNlbGVjdGVkICVwTSBjdXJyZW50ICIKKwkJICAgICAgICIlcE1cbiIsIGJzcy0+Y2Jzcy5ic3NpZCwgaWZpYnNzLT5ic3NpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCWlmIChic3MgJiYKKwkgICAgKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSB8fAorCSAgICAgbWVtY21wKGlmaWJzcy0+YnNzaWQsIGJzcy0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pKSkgeworCQlpbnQgcmV0OworCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VsZWN0ZWQgSUJTUyBCU1NJRCAlcE0iCisJCSAgICAgICAiIGJhc2VkIG9uIGNvbmZpZ3VyZWQgU1NJRFxuIiwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzcy0+Y2Jzcy5ic3NpZCk7CisKKwkJcmV0ID0gaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGJzcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAoYnNzKQorCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiAgIGRpZCBub3QgdHJ5IHRvIGpvaW4gaWJzc1xuIik7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCS8qIFNlbGVjdGVkIElCU1Mgbm90IGZvdW5kIGluIGN1cnJlbnQgc2NhbiByZXN1bHRzIC0gdHJ5IHRvIHNjYW4gKi8KKwlpZiAoaWZpYnNzLT5zdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCAmJgorCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpIHsKKwkJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsKKwkJCQkJICBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7CisJfSBlbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkICsKKwkJCQkJSUVFRTgwMjExX1NDQU5fSU5URVJWQUwpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJpZ2dlciBuZXcgc2NhbiB0byBmaW5kIGFuIElCU1MgdG8gIgorCQkgICAgICAgImpvaW5cbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCisJCS8qIFhYWCBtYXliZSByYWN5PyAqLworCQlpZiAobG9jYWwtPnNjYW5fcmVxKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQltZW1jcHkobG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLAorCQkgICAgICAgaWZpYnNzLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmaWJzcy0+c3NpZF9sZW47CisJCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCAmbG9jYWwtPmludF9zY2FuX3JlcSk7CisJfSBlbHNlIGlmIChpZmlic3MtPnN0YXRlICE9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEKSB7CisJCWludCBpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmaWJzcy0+aWJzc19qb2luX3JlcSArCisJCQkgICAgICAgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUKSkgeworCQkJaWYgKCEobG9jYWwtPm9wZXJfY2hhbm5lbC0+ZmxhZ3MgJgorCQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSUJTUykpCisJCQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc2RhdGEpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJQlNTIG5vdCBhbGxvd2VkIG9uIgorCQkJICAgICAgICIgJWQgTUh6XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAorCQkJICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCQkJLyogTm8gSUJTUyBmb3VuZCAtIGRlY3JlYXNlIHNjYW4gaW50ZXJ2YWwgYW5kIGNvbnRpbnVlCisJCQkgKiBzY2FubmluZy4gKi8KKwkJCWludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVzsKKwkJfQorCisJCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKKwkJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsgaW50ZXJ2YWwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCXNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgdHhfbGFzdF9iZWFjb247CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CisJdTggKnBvcywgKmVuZDsKKworCWlmIChpZmlic3MtPnN0YXRlICE9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEIHx8CisJICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZpYnNzLT5wcm9iZV9yZXNwKQorCQlyZXR1cm47CisKKwlpZiAobG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24pCisJCXR4X2xhc3RfYmVhY29uID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24obG9jYWxfdG9faHcobG9jYWwpKTsKKwllbHNlCisJCXR4X2xhc3RfYmVhY29uID0gMTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBQcm9iZVJlcSBTQT0lcE0gREE9JXBNIEJTU0lEPSVwTSIKKwkgICAgICAgIiAodHhfbGFzdF9iZWFjb249JWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCisJICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCWlmICghdHhfbGFzdF9iZWFjb24pCisJCXJldHVybjsKKworCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwICYmCisJICAgIG1lbWNtcChtZ210LT5ic3NpZCwgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIsIEVUSF9BTEVOKSAhPSAwKQorCQlyZXR1cm47CisKKwllbmQgPSAoKHU4ICopIG1nbXQpICsgbGVuOworCXBvcyA9IG1nbXQtPnUucHJvYmVfcmVxLnZhcmlhYmxlOworCWlmIChwb3NbMF0gIT0gV0xBTl9FSURfU1NJRCB8fAorCSAgICBwb3MgKyAyICsgcG9zWzFdID4gZW5kKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIFNTSUQgSUUgaW4gUHJvYmVSZXEgIgorCQkgICAgICAgImZyb20gJXBNXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJaWYgKHBvc1sxXSAhPSAwICYmCisJICAgIChwb3NbMV0gIT0gaWZpYnNzLT5zc2lkX2xlbiB8fAorCSAgICAgbWVtY21wKHBvcyArIDIsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbikgIT0gMCkpIHsKKwkJLyogSWdub3JlIFByb2JlUmVxIGZvciBmb3JlaWduIFNTSUQgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIFJlcGx5IHdpdGggUHJvYmVSZXNwICovCisJc2tiID0gc2tiX2NvcHkoaWZpYnNzLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXBNXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXNwLT5kYSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQkgc2l6ZV90IGxlbiwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CisKKwlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCisKKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKQorCQlyZXR1cm47CisKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwKKwkJCQkmZWxlbXMpOworCisJaWVlZTgwMjExX3J4X2Jzc19pbmZvKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgJmVsZW1zLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgIHNpemVfdCBsZW4sCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXNpemVfdCBiYXNlbGVuOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCisJLyogUHJvY2VzcyBiZWFjb24gZnJvbSB0aGUgY3VycmVudCBCU1MgKi8KKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybjsKKworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZlbGVtcyk7CisKKwlpZWVlODAyMTFfcnhfYnNzX2luZm8oc2RhdGEsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAmZWxlbXMsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBmYzsKKworCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgorCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgcnhfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgcnhfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKKwkJaWVlZTgwMjExX3J4X21nbXRfYXV0aF9pYnNzKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CisJCWJyZWFrOworCX0KKworCWtmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lmlic3Mud29yayk7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGxvY2FsLT5zd19zY2FubmluZyB8fCBsb2NhbC0+aHdfc2Nhbm5pbmcpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJCXJldHVybjsKKwlpZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmaWJzcy0+c2tiX3F1ZXVlKSkpCisJCWllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHNkYXRhLCBza2IpOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJmlmaWJzcy0+cmVxdWVzdCkpCisJCXJldHVybjsKKworCXN3aXRjaCAoaWZpYnNzLT5zdGF0ZSkgeworCWNhc2UgSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g6CisJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRDoKKwkJaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKHNkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlzZXRfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZpZmlic3MtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmaWJzcy0+d29yayk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2lic3Nfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCUlOSVRfV09SSygmaWZpYnNzLT53b3JrLCBpZWVlODAyMTFfaWJzc193b3JrKTsKKwlzZXR1cF90aW1lcigmaWZpYnNzLT50aW1lciwgaWVlZTgwMjExX2lic3NfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmaWJzcy0+c2tiX3F1ZXVlKTsKKworCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwgfAorCQkJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX2NvbW1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWZpYnNzLT5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQ7CisKKwlpZiAoaWZpYnNzLT5zc2lkX2xlbikKKwkJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19TU0lEX1NFVDsKKwllbHNlCisJCWlmaWJzcy0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX1NTSURfU0VUOworCisJaWZpYnNzLT5pYnNzX2pvaW5fcmVxID0gamlmZmllczsKKwlpZmlic3MtPnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CisKKwlyZXR1cm4gaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworfQorCitpbnQgaWVlZTgwMjExX2lic3Nfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpZmlic3MtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZpYnNzLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKKwkJbWVtc2V0KGlmaWJzcy0+c3NpZCwgMCwgc2l6ZW9mKGlmaWJzcy0+c3NpZCkpOworCQltZW1jcHkoaWZpYnNzLT5zc2lkLCBzc2lkLCBsZW4pOworCQlpZmlic3MtPnNzaWRfbGVuID0gbGVuOworCX0KKworCXJldHVybiBpZWVlODAyMTFfaWJzc19jb21taXQoc2RhdGEpOworfQorCitpbnQgaWVlZTgwMjExX2lic3NfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwltZW1jcHkoc3NpZCwgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKTsKKwkqbGVuID0gaWZpYnNzLT5zc2lkX2xlbjsKKworCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX2lic3Nfc2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkgeworCQltZW1jcHkoaWZpYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQ7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGlmaWJzcy0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJaWZpYnNzLT5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfQlNTSURfU0VUOworCX0KKworCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCWlmIChpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGNvbmZpZyBuZXcgQlNTSUQgdG8gIgorCQkJICAgICAgICJ0aGUgbG93LWxldmVsIGRyaXZlclxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gaWVlZTgwMjExX2lic3NfY29tbWl0KHNkYXRhKTsKK30KKworLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi8KK3ZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3M7CisKKwlpZiAoc2RhdGEgJiYgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCQlpZiAoKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSkgfHwKKwkJICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkKKwkJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhKTsKKwl9Cit9CisKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgZmM7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJCW1lbWNweShza2ItPmNiLCByeF9zdGF0dXMsIHNpemVvZigqcnhfc3RhdHVzKSk7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCXNrYl9xdWV1ZV90YWlsKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSwgc2tiKTsKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJcmV0dXJuIFJYX1FVRVVFRDsKKwl9CisKKwlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCAyY2I3NDNlLi5mYmI5MWYxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjM5LDcgKzIzOSw3IEBACiAJdTggZmxhZ3M7CiB9OwogCi0vKiBmbGFncyB1c2VkIGluIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhLmZsYWdzICovCisvKiBmbGFncyB1c2VkIGluIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZC5mbGFncyAqLwogI2RlZmluZSBJRUVFODAyMTFfU1RBX1NTSURfU0VUCQlCSVQoMCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQJCUJJVCgxKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUCUJJVCgyKQpAQCAtMjYyLDMxICsyNjIsMzAgQEAKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfQVVUSCAyCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX1JVTiAgMwogCi0vKiBTVEEvSUJTUyBNTE1FIHN0YXRlcyAqLwotZW51bSBpZWVlODAyMTFfc3RhX21sbWVfc3RhdGUgewotCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCwKLQlJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFLAotCUlFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSwKLQlJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCwKLQlJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0gsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVELAotfTsKLQogLyogYml0ZmllbGQgb2YgYWxsb3dlZCBhdXRoIGFsZ3MgKi8KICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4gQklUKDApCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZIEJJVCgxKQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCBCSVQoMikKIAotc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgeworc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBjaHN3aXRjaF90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hzd2l0Y2hfd29yazsKKwogCXU4IGJzc2lkW0VUSF9BTEVOXSwgcHJldl9ic3NpZFtFVEhfQUxFTl07CisKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCWVudW0gaWVlZTgwMjExX3N0YV9tbG1lX3N0YXRlIHN0YXRlOwogCXNpemVfdCBzc2lkX2xlbjsKKworCWVudW0geworCQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCisJCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVELAorCX0gc3RhdGU7CisKIAl1MTYgYWlkOwogCXUxNiBhcF9jYXBhYiwgY2FwYWI7CiAJdTggKmV4dHJhX2llOyAvKiB0byBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIEFzc29jUmVxICovCkBAIC0zMTksMTAgKzMxOCw2IEBACiAJCUlFRUU4MDIxMV9NRlBfUkVRVUlSRUQKIAl9IG1mcDsgLyogbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uICovCiAKLQl1bnNpZ25lZCBsb25nIGlic3Nfam9pbl9yZXE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnByb2JlX3Jlc3A7IC8qIFByb2JlUmVzcCB0ZW1wbGF0ZSBmb3IgSUJTUyAqLwotCXUzMiBzdXBwX3JhdGVzX2JpdHNbSUVFRTgwMjExX05VTV9CQU5EU107Ci0KIAlpbnQgd21tX2xhc3RfcGFyYW1fc2V0OwogCiAJLyogRXh0cmEgSUUgZGF0YSBmb3IgbWFuYWdlbWVudCBmcmFtZXMgKi8KQEAgLTM0Miw2ICszMzcsNDIgQEAKIAlzaXplX3QgaWVfZGlzYXNzb2NfbGVuOwogfTsKIAorZW51bSBpZWVlODAyMTFfaWJzc19mbGFncyB7CisJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTAkJPSBCSVQoMCksCisJSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwJCT0gQklUKDEpLAorCUlFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVAkJPSBCSVQoMiksCisJSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQJCT0gQklUKDMpLAorCUlFRUU4MDIxMV9JQlNTX1NTSURfU0VUCQkJPSBCSVQoNCksCit9OworCitlbnVtIGllZWU4MDIxMV9pYnNzX3JlcXVlc3QgeworCUlFRUU4MDIxMV9JQlNTX1JFUV9SVU4JPSAwLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3F1ZXVlOworCisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKworCXUzMiBmbGFnczsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKKworCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCisKKwllbnVtIHsKKwkJSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gsCisJCUlFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVELAorCX0gc3RhdGU7Cit9OworCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IGhvdXNla2VlcGluZ190aW1lcjsKQEAgLTQ0NSw3ICs0NzYsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwIGFwOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3dkcyB3ZHM7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfdmxhbiB2bGFuOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSBzdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCBtZ2Q7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyBpYnNzOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCBtZXNoOwogI2VuZGlmCkBAIC01NjQsMTIgKzU5NiwxMCBAQAogZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiB7CiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0RSSVZFUiwKIAlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMsCi0JSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQQorCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OLAogfTsKIAotLyogbWF4aW11bSBudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIHdlIHN1cHBvcnQuICovCi0jZGVmaW5lIFFEX01BWF9RVUVVRVMgKElFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTICsgSUVFRTgwMjExX01BWF9RVUVVRVMpCi0KIHN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogfTsKQEAgLTU4Miw5ICs2MTIsMTUgQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CiAKLQl1bnNpZ25lZCBsb25nIHF1ZXVlX3Bvb2xbQklUU19UT19MT05HUyhRRF9NQVhfUVVFVUVTKV07Ci0JdW5zaWduZWQgbG9uZyBxdWV1ZV9zdG9wX3JlYXNvbnNbSUVFRTgwMjExX01BWF9RVUVVRVNdOworCS8qIEFDIHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBBTVBEVSBxdWV1ZSAqLworCXM4IGFtcGR1X2FjX3F1ZXVlW0lFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTXTsKKwl1bnNpZ25lZCBpbnQgYW1kcHVfYWNfc3RvcF9yZWZjbnRbSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVNdOworCisJdW5zaWduZWQgbG9uZyBxdWV1ZV9zdG9wX3JlYXNvbnNbSUVFRTgwMjExX01BWF9RVUVVRVMgKworCQkJCQkgSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVNdOworCS8qIGFsc28gdXNlZCB0byBwcm90ZWN0IGFtcGR1X2FjX3F1ZXVlIGFuZCBhbWRwdV9hY19zdG9wX3JlZmNudCAqLwogCXNwaW5sb2NrX3QgcXVldWVfc3RvcF9yZWFzb25fbG9jazsKKwogCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OyAvKiB3bWFzdGVyIyAtICJtYXN0ZXIiIDgwMi4xMSBkZXZpY2UgKi8KIAlpbnQgb3Blbl9jb3VudDsKIAlpbnQgbW9uaXRvcnMsIGNvb2tlZF9tbnRyczsKQEAgLTg4OCwzNCArOTI0LDQxIEBACiB2b2lkIGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICAgIHUzMiBjaGFuZ2VkKTsKIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiAKIC8qIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOwogCi0vKiBTVEEvSUJTUyBjb2RlICovCisvKiBTVEEgY29kZSAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKK2llZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pOwogaW50IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpOwotc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcyk7Cit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pOwogaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKTsKLXUzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotdTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwotdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCi0JCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKIHZvaWQgaWVlZTgwMjExX3NlbmRfcHNwb2xsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCisvKiBJQlNTIGNvZGUgKi8KK2ludCBpZWVlODAyMTFfaWJzc19jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaW50IGllZWU4MDIxMV9pYnNzX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKTsKK2ludCBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pOworaW50IGllZWU4MDIxMV9pYnNzX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKK3ZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX2lic3Nfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcyk7CisKIC8qIHNjYW4vQlNTIGhhbmRsaW5nICovCit2b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKIGludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtOTI5LDYgKzk3Miw3IEBACiAJCQkgICAgICAgY2hhciAqaWUsIHNpemVfdCBsZW4pOwogCiB2b2lkIGllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9zY2FuX2ZhaWxlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiBpbnQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2Nhbl9zZGF0YSwKIAkJCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgpAQCAtMTA0Miw2ICsxMDg2LDI1IEBACiAJCQkJICAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7CiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorCQkJCSAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorCQkJCSAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKKwkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCisJCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCk7Cit2b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKKwkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICB1OCAqaWUsIHNpemVfdCBpZV9sZW4pOworCit2b2lkIGllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCisJCQkJICBjb25zdCB1OCAqc3VwcF9yYXRlcyk7Cit1MzIgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAorCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTk9JTkxJTkUKICNkZWZpbmUgZGVidWdfbm9pbmxpbmUgbm9pbmxpbmUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggZGY5NGI5My4uZjlmMjdiOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTIzNiw3ICsyMzYsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQllbHNlCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKQEAgLTMyMSwxMSArMzI0LDEwIEBACiAJICogeWV0IGJlIGVmZmVjdGl2ZS4gVHJpZ2dlciBleGVjdXRpb24gb2YgaWVlZTgwMjExX3N0YV93b3JrCiAJICogdG8gZml4IHRoaXMuCiAJICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JfQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWdkLndvcmspOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKIApAQCAtMzY4LDYgKzM3MCwxOCBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKKwkgKiBBbm5vdW5jZSB0aGF0IHdlIGFyZSBsZWF2aW5nIHRoZSBuZXR3b3JrLCBpbiBjYXNlIHdlIGFyZSBhCisJICogc3RhdGlvbiBpbnRlcmZhY2UgdHlwZS4gVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHJlbW92aW5nCisJICogYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCBzdGFfaW5mb19mbHVzaCwgb3RoZXJ3aXNlIFNUQQorCSAqIGluZm9ybWF0aW9uIHdpbGwgYmUgZ29uZSBhbmQgbm8gYW5ub3VuY2UgYmVpbmcgZG9uZS4KKwkgKi8KKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQpCisJCQlpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHNkYXRhLAorCQkJCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKKwl9CisKKwkvKgogCSAqIFJlbW92ZSBhbGwgc3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW50ZXJmYWNlLgogCSAqCiAJICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgb3BzLT5yZW1vdmVfaW50ZXJmYWNlKCkKQEAgLTQ1MiwxNSArNDY2LDkgQEAKIAkJbmV0aWZfYWRkcl91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJLyogQW5ub3VuY2UgdGhhdCB3ZSBhcmUgbGVhdmluZyB0aGUgbmV0d29yay4gKi8KLQkJaWYgKHNkYXRhLT51LnN0YS5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQpCi0JCQlpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHNkYXRhLAotCQkJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOwotCi0JCW1lbXNldChzZGF0YS0+dS5zdGEuYnNzaWQsIDAsIEVUSF9BTEVOKTsKLQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51LnN0YS5jaHN3aXRjaF90aW1lcik7Ci0JCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5zdGEudGltZXIpOworCQltZW1zZXQoc2RhdGEtPnUubWdkLmJzc2lkLCAwLCBFVEhfQUxFTik7CisJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5tZ2QuY2hzd2l0Y2hfdGltZXIpOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLnRpbWVyKTsKIAkJLyoKIAkJICogSWYgdGhlIHRpbWVyIGZpcmVkIHdoaWxlIHdlIHdhaXRlZCBmb3IgaXQsIGl0IHdpbGwgaGF2ZQogCQkgKiByZXF1ZXVlZCB0aGUgd29yay4gTm93IHRoZSB3b3JrIHdpbGwgYmUgcnVubmluZyBhZ2FpbgpAQCAtNDY4LDggKzQ3Niw4IEBACiAJCSAqIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBydW5uaW5nLCB3aGljaCwgYXQgdGhpcyBwb2ludCwKIAkJICogaXQgbm8gbG9uZ2VyIGlzLgogCQkgKi8KLQkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuc3RhLndvcmspOwotCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5zdGEuY2hzd2l0Y2hfd29yayk7CisJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLmNoc3dpdGNoX3dvcmspOwogCQkvKgogCQkgKiBXaGVuIHdlIGdldCBoZXJlLCB0aGUgaW50ZXJmYWNlIGlzIG1hcmtlZCBkb3duLgogCQkgKiBDYWxsIHN5bmNocm9uaXplX3JjdSgpIHRvIHdhaXQgZm9yIHRoZSBSWCBwYXRoCkBAIC00NzcsMTMgKzQ4NSwyMiBAQAogCQkgKiBmcmFtZXMgYXQgdGhpcyB2ZXJ5IHRpbWUgb24gYW5vdGhlciBDUFUuCiAJCSAqLwogCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5zdGEuc2tiX3F1ZXVlKTsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlKTsKIAotCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCB8CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+KElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEIHwKIAkJCQkJSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmV4dHJhX2llKTsKLQkJc2RhdGEtPnUuc3RhLmV4dHJhX2llID0gTlVMTDsKLQkJc2RhdGEtPnUuc3RhLmV4dHJhX2llX2xlbiA9IDA7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZSA9IE5VTEw7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZV9sZW4gPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQltZW1zZXQoc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lmlic3MudGltZXIpOworCQkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOworCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSk7CisJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpAQCAtNjI5LDE5ICs2NDYsMjAgQEAKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCQltZXNoX3JtY19mcmVlKHNkYXRhKTsKIAkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5leHRyYV9pZSk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5hc3NvY3JlcV9pZXMpOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXNwX2llcyk7Ci0JCWtmcmVlX3NrYihzZGF0YS0+dS5zdGEucHJvYmVfcmVzcCk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5pZV9wcm9iZXJlcSk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5pZV9wcm9iZXJlc3ApOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuaWVfYXV0aCk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5pZV9hc3NvY3JlcSk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5pZV9yZWFzc29jcmVxKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmllX2RlYXV0aCk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5pZV9kaXNhc3NvYyk7CisJCWtmcmVlX3NrYihzZGF0YS0+dS5pYnNzLnByb2JlX3Jlc3ApOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5hc3NvY3JlcV9pZXMpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuYXNzb2NyZXNwX2llcyk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9wcm9iZXJlcSk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9wcm9iZXJlc3ApOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfYXV0aCk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9hc3NvY3JlcSk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9yZWFzc29jcmVxKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX2RlYXV0aCk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9kaXNhc3NvYyk7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKQEAgLTcwOCw5ICs3MjYsMTEgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT51LmFwLnZsYW5zKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc2RhdGEpOwogCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzZGF0YSk7CisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCQlpZWVlODAyMTFfbWVzaF9pbml0X3NkYXRhKHNkYXRhKTsKQEAgLTc5OCw2ICs4MTgsNyBAQAogCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKG5kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogCiAJLyogZG9uJ3QgdXNlIElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGIGJlY2F1c2UgaXQgY2hlY2tzIHRvbyBtdWNoICovCiAJc2RhdGEgPSBuZXRkZXZfcHJpdihuZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCAxOWI0ODBkLi42ODdhY2YyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2tleS5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAkJCSAqLwogCiAJCQkvKiBzYW1lIGhlcmUsIHRoZSBBUCBjb3VsZCBiZSB1c2luZyBRb1MgKi8KLQkJCWFwID0gc3RhX2luZm9fZ2V0KGtleS0+bG9jYWwsIGtleS0+c2RhdGEtPnUuc3RhLmJzc2lkKTsKKwkJCWFwID0gc3RhX2luZm9fZ2V0KGtleS0+bG9jYWwsIGtleS0+c2RhdGEtPnUubWdkLmJzc2lkKTsKIAkJCWlmIChhcCkgewogCQkJCWlmICh0ZXN0X3N0YV9mbGFncyhhcCwgV0xBTl9TVEFfV01FKSkKIAkJCQkJa2V5LT5jb25mLmZsYWdzIHw9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCA1NjY3ZjRlLi5mMzhkYjRkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTE2OSw5ICsxNjksMTAgQEAKIAogCW1lbXNldCgmY29uZiwgMCwgc2l6ZW9mKGNvbmYpKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5zdGEuYnNzaWQ7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQljb25mLmJzc2lkID0gc2RhdGEtPnUubWdkLmJzc2lkOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJY29uZi5ic3NpZCA9IHNkYXRhLT51Lmlic3MuYnNzaWQ7CiAJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQogCQljb25mLmJzc2lkID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7CiAJZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpAQCAtMjEwLDcgKzIxMSw3IEBACiAJCQkJCSEhcmN1X2RlcmVmZXJlbmNlKHNkYXRhLT51LmFwLmJlYWNvbik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQkJCWNvbmYuZW5hYmxlX2JlYWNvbiA9ICEhc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3A7CisJCQkJY29uZi5lbmFibGVfYmVhY29uID0gISFzZGF0YS0+dS5pYnNzLnByb2JlX3Jlc3A7CiAJCQkJYnJlYWs7CiAJCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQkJY29uZi5lbmFibGVfYmVhY29uID0gdHJ1ZTsKQEAgLTcwNSw3ICs3MDYsNyBAQAogCQkJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwotCWludCBwcml2X3NpemU7CisJaW50IHByaXZfc2l6ZSwgaTsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwogCiAJLyogRW5zdXJlIDMyLWJ5dGUgYWxpZ25tZW50IG9mIG91ciBwcml2YXRlIGRhdGEgYW5kIGh3IHByaXZhdGUgZGF0YS4KQEAgLTc3OSw2ICs3ODAsMTEgQEAKIAlzZXR1cF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsCiAJCSAgICBpZWVlODAyMTFfZHluYW1pY19wc190aW1lciwgKHVuc2lnbmVkIGxvbmcpIGxvY2FsKTsKIAorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzsgaSsrKQorCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbaV0gPSAtMTsKKwkvKiB1c2luZyBhbiBzOCB3b24ndCB3b3JrIHdpdGggbW9yZSB0aGFuIHRoYXQgKi8KKwlCVUlMRF9CVUdfT04oSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgPiAxMjcpOworCiAJc3RhX2luZm9faW5pdChsb2NhbCk7CiAKIAl0YXNrbGV0X2luaXQoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQsIGllZWU4MDIxMV90eF9wZW5kaW5nLApAQCAtODU1LDYgKzg2MSwxMSBAQAogCS8qIG1hYzgwMjExIGFsd2F5cyBzdXBwb3J0cyBtb25pdG9yICovCiAJbG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOwogCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCQlsb2NhbC0+aHcud2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOworCWVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKQorCQlsb2NhbC0+aHcud2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOworCiAJcmVzdWx0ID0gd2lwaHlfcmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBmYWlsX3dpcGh5X3JlZ2lzdGVyOwpAQCAtODcyLDcgKzg4Myw3IEBACiAKIAltZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2KSwKIAkJCSAgICAgICAid21hc3RlciVkIiwgaWVlZTgwMjExX21hc3Rlcl9zZXR1cCwKLQkJCSAgICAgICBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpOworCQkJICAgICAgIGh3LT5xdWV1ZXMpOwogCWlmICghbWRldikKIAkJZ290byBmYWlsX21kZXZfYWxsb2M7CiAKQEAgLTkxNiw2ICs5MjcsNyBAQAogCiAJbWVtY3B5KGxvY2FsLT5tZGV2LT5kZXZfYWRkciwgbG9jYWwtPmh3LndpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKIAlTRVRfTkVUREVWX0RFVihsb2NhbC0+bWRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOworCWxvY2FsLT5tZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogCiAJcmVzdWx0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGxvY2FsLT5tZGV2KTsKIAlpZiAocmVzdWx0IDwgMCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IGZiYjc2NmEuLjg0MWI4NDUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTUsMTEgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApAQCAtMzUsMTUgKzMyLDYgQEAKICNkZWZpbmUgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwgKDIgKiBIWikKICNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0lOVEVSVkFMICg2MCAqIEhaKQogI2RlZmluZSBJRUVFODAyMTFfUkVUUllfQVVUSF9JTlRFUlZBTCAoMSAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCAoMiAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XICgxNSAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQgKDcgKiBIWikKLQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCAoMzAgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCAoNjAgKiBIWikKLQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMgMTI4Ci0KIAogLyogdXRpbHMgKi8KIHN0YXRpYyBpbnQgZWN3MmN3KGludCBlY3cpCkBAIC05Miw0MyArODAsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotLyogYWxzbyB1c2VkIGJ5IG1lc2ggY29kZSAqLwotdTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKLQlzaXplX3QgbnVtX3JhdGVzOwotCXUzMiBzdXBwX3JhdGVzOwotCWludCBpLCBqOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQotCWlmICghc2JhbmQpIHsKLQkJV0FSTl9PTigxKTsKLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwotCX0KLQotCWJpdHJhdGVzID0gc2JhbmQtPmJpdHJhdGVzOwotCW51bV9yYXRlcyA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCXN1cHBfcmF0ZXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4gKwotCQkgICAgIGVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW47IGkrKykgewotCQl1OCByYXRlID0gMDsKLQkJaW50IG93bl9yYXRlOwotCQlpZiAoaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbikKLQkJCXJhdGUgPSBlbGVtcy0+c3VwcF9yYXRlc1tpXTsKLQkJZWxzZSBpZiAoZWxlbXMtPmV4dF9zdXBwX3JhdGVzKQotCQkJcmF0ZSA9IGVsZW1zLT5leHRfc3VwcF9yYXRlcwotCQkJCVtpIC0gZWxlbXMtPnN1cHBfcmF0ZXNfbGVuXTsKLQkJb3duX3JhdGUgPSA1ICogKHJhdGUgJiAweDdmKTsKLQkJZm9yIChqID0gMDsgaiA8IG51bV9yYXRlczsgaisrKQotCQkJaWYgKGJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gb3duX3JhdGUpCi0JCQkJc3VwcF9yYXRlcyB8PSBCSVQoaik7Ci0JfQotCXJldHVybiBzdXBwX3JhdGVzOwotfQotCiAvKiBmcmFtZSBzZW5kaW5nIGZ1bmN0aW9ucyAqLwogCiBzdGF0aWMgdm9pZCBhZGRfZXh0cmFfaWVzKHN0cnVjdCBza19idWZmICpza2IsIHU4ICppZXMsIHNpemVfdCBpZXNfbGVuKQpAQCAtMTM3LDExMyArODgsOSBAQAogCQltZW1jcHkoc2tiX3B1dChza2IsIGllc19sZW4pLCBpZXMsIGllc19sZW4pOwogfQogCi0vKiBhbHNvIHVzZWQgYnkgc2Nhbm5pbmcgY29kZSAqLwotdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCi0JCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTggKnBvcywgKnN1cHBfcmF0ZXMsICplc3VwcF9yYXRlcyA9IE5VTEw7Ci0JaW50IGk7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkgKyAyMDAgKwotCQkJICAgIHNkYXRhLT51LnN0YS5pZV9wcm9iZXJlcV9sZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgotCQkgICAgICAgInJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoZHN0KSB7Ci0JCW1lbWNweShtZ210LT5kYSwgZHN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShtZ210LT5ic3NpZCwgZHN0LCBFVEhfQUxFTik7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JCW1lbXNldChtZ210LT5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwotCX0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IHNzaWRfbGVuOwotCW1lbWNweShwb3MsIHNzaWQsIHNzaWRfbGVuKTsKLQotCXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMik7Ci0Jc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0Jc3VwcF9yYXRlc1sxXSA9IDA7Ci0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwotCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKLQkJaWYgKGVzdXBwX3JhdGVzKSB7Ci0JCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7Ci0JCQllc3VwcF9yYXRlc1sxXSsrOwotCQl9IGVsc2UgaWYgKHN1cHBfcmF0ZXNbMV0gPT0gOCkgewotCQkJZXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMyk7Ci0JCQllc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOwotCQkJZXN1cHBfcmF0ZXNbMV0gPSAxOwotCQkJcG9zID0gJmVzdXBwX3JhdGVzWzJdOwotCQl9IGVsc2UgewotCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOwotCQkJc3VwcF9yYXRlc1sxXSsrOwotCQl9Ci0JCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKLQl9Ci0KLQlhZGRfZXh0cmFfaWVzKHNrYiwgc2RhdGEtPnUuc3RhLmllX3Byb2JlcmVxLAotCQkgICAgICBzZGF0YS0+dS5zdGEuaWVfcHJvYmVyZXFfbGVuKTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCWludCB0cmFuc2FjdGlvbiwgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAotCQkJCWludCBlbmNyeXB0KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuICsKLQkJCSAgICBzZGF0YS0+dS5zdGEuaWVfYXV0aF9sZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXV0aCAiCi0JCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCArIDYpOwotCW1lbXNldChtZ210LCAwLCAyNCArIDYpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOwotCWlmIChlbmNyeXB0KQotCQltZ210LT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT51LmF1dGguYXV0aF9hbGcgPSBjcHVfdG9fbGUxNihpZnN0YS0+YXV0aF9hbGcpOwotCW1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYodHJhbnNhY3Rpb24pOwotCWlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24gKyAxOwotCW1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSA9IGNwdV90b19sZTE2KDApOwotCWlmIChleHRyYSkKLQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBleHRyYV9sZW4pLCBleHRyYSwgZXh0cmFfbGVuKTsKLQlhZGRfZXh0cmFfaWVzKHNrYiwgc2RhdGEtPnUuc3RhLmllX2F1dGgsIHNkYXRhLT51LnN0YS5pZV9hdXRoX2xlbik7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQoteworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwpAQCAtMjU2LDE3ICsxMDMsMTcgQEAKIAl1MzIgcmF0ZXMgPSAwOwogCXNpemVfdCBlX2llc19sZW47CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgewotCQllX2llcyA9IHNkYXRhLT51LnN0YS5pZV9yZWFzc29jcmVxOwotCQllX2llc19sZW4gPSBzZGF0YS0+dS5zdGEuaWVfcmVhc3NvY3JlcV9sZW47CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSB7CisJCWVfaWVzID0gc2RhdGEtPnUubWdkLmllX3JlYXNzb2NyZXE7CisJCWVfaWVzX2xlbiA9IHNkYXRhLT51Lm1nZC5pZV9yZWFzc29jcmVxX2xlbjsKIAl9IGVsc2UgewotCQllX2llcyA9IHNkYXRhLT51LnN0YS5pZV9hc3NvY3JlcTsKLQkJZV9pZXNfbGVuID0gc2RhdGEtPnUuc3RhLmllX2Fzc29jcmVxX2xlbjsKKwkJZV9pZXMgPSBzZGF0YS0+dS5tZ2QuaWVfYXNzb2NyZXE7CisJCWVfaWVzX2xlbiA9IHNkYXRhLT51Lm1nZC5pZV9hc3NvY3JlcV9sZW47CiAJfQogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZnN0YS0+ZXh0cmFfaWVfbGVuICsKLQkJCSAgICBpZnN0YS0+c3NpZF9sZW4gKyBlX2llc19sZW4pOworCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZm1nZC0+ZXh0cmFfaWVfbGVuICsKKwkJCSAgICBpZm1nZC0+c3NpZF9sZW4gKyBlX2llc19sZW4pOwogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXNzb2MgIgogCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTI3Niw3ICsxMjMsNyBAQAogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCi0JY2FwYWIgPSBpZnN0YS0+Y2FwYWI7CisJY2FwYWIgPSBpZm1nZC0+Y2FwYWI7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFKSkKQEAgLTI4NSw5ICsxMzIsOSBAQAogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwogCX0KIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKIAkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAlpZiAoYnNzKSB7CiAJCWlmIChic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CkBAIC0zMTIsMTggKzE1OSwxOCBAQAogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgewogCQlza2JfcHV0KHNrYiwgMTApOwogCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOwogCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KIAkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCBpZnN0YS0+cHJldl9ic3NpZCwKKwkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgaWZtZ2QtPnByZXZfYnNzaWQsCiAJCSAgICAgICBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJc2tiX3B1dChza2IsIDQpOwpAQCAtMzM1LDEwICsxODIsMTAgQEAKIAl9CiAKIAkvKiBTU0lEICovCi0JaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOworCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZtZ2QtPnNzaWRfbGVuKTsKIAkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkqcG9zKysgPSBpZm1nZC0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAKIAkvKiBhZGQgYWxsIHJhdGVzIHdoaWNoIHdlcmUgbWFya2VkIHRvIGJlIHVzZWQgYWJvdmUgKi8KIAlzdXBwX3JhdGVzX2xlbiA9IHJhdGVzX2xlbjsKQEAgLTM5MywxMiArMjQwLDEyIEBACiAJCX0KIAl9CiAKLQlpZiAoaWZzdGEtPmV4dHJhX2llKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgaWZzdGEtPmV4dHJhX2llLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKKwlpZiAoaWZtZ2QtPmV4dHJhX2llKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKKwkJbWVtY3B5KHBvcywgaWZtZ2QtPmV4dHJhX2llLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKIAl9CiAKLQlpZiAod21tICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgeworCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CiAJCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKIAkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOwogCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KQEAgLTQxOCwxMSArMjY1LDExIEBACiAJICogbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZSBjaXBoZXJzIGlzCiAJICogY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KIAkgKi8KLQlpZiAod21tICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgorCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpICYmCiAJICAgIHNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmCiAJICAgIChodF9pZSA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfSFRfSU5GT1JNQVRJT04pKSAmJgogCSAgICBodF9pZVsxXSA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSAmJgotCSAgICAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSkgeworCSAgICAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8gPQogCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKShodF9pZSArIDIpOwogCQl1MTYgY2FwID0gc2JhbmQtPmh0X2NhcC5jYXA7CkBAIC00NTksMTEgKzMwNiwxMSBAQAogCiAJYWRkX2V4dHJhX2llcyhza2IsIGVfaWVzLCBlX2llc19sZW4pOwogCi0Ja2ZyZWUoaWZzdGEtPmFzc29jcmVxX2llcyk7Ci0JaWZzdGEtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOwotCWlmc3RhLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmc3RhLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKLQkJbWVtY3B5KGlmc3RhLT5hc3NvY3JlcV9pZXMsIGllcywgaWZzdGEtPmFzc29jcmVxX2llc19sZW4pOworCWtmcmVlKGlmbWdkLT5hc3NvY3JlcV9pZXMpOworCWlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuID0gKHNrYi0+ZGF0YSArIHNrYi0+bGVuKSAtIGllczsKKwlpZm1nZC0+YXNzb2NyZXFfaWVzID0ga21hbGxvYyhpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCisJCW1lbWNweShpZm1nZC0+YXNzb2NyZXFfaWVzLCBpZXMsIGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuKTsKIAogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CiB9CkBAIC00NzMsMTggKzMyMCwxOCBAQAogCQkJCQkgICB1MTYgc3R5cGUsIHUxNiByZWFzb24pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1OCAqaWVzOwogCXNpemVfdCBpZXNfbGVuOwogCiAJaWYgKHN0eXBlID09IElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpIHsKLQkJaWVzID0gc2RhdGEtPnUuc3RhLmllX2RlYXV0aDsKLQkJaWVzX2xlbiA9IHNkYXRhLT51LnN0YS5pZV9kZWF1dGhfbGVuOworCQlpZXMgPSBzZGF0YS0+dS5tZ2QuaWVfZGVhdXRoOworCQlpZXNfbGVuID0gc2RhdGEtPnUubWdkLmllX2RlYXV0aF9sZW47CiAJfSBlbHNlIHsKLQkJaWVzID0gc2RhdGEtPnUuc3RhLmllX2Rpc2Fzc29jOwotCQlpZXNfbGVuID0gc2RhdGEtPnUuc3RhLmllX2Rpc2Fzc29jX2xlbjsKKwkJaWVzID0gc2RhdGEtPnUubWdkLmllX2Rpc2Fzc29jOworCQlpZXNfbGVuID0gc2RhdGEtPnUubWdkLmllX2Rpc2Fzc29jX2xlbjsKIAl9CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkgKwpAQCAtNDk4LDkgKzM0NSw5IEBACiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgc3R5cGUpOwogCXNrYl9wdXQoc2tiLCAyKTsKIAkvKiB1LmRlYXV0aC5yZWFzb25fY29kZSA9PSB1LmRpc2Fzc29jLnJlYXNvbl9jb2RlICovCkBAIC01MDgsMTMgKzM1NSwxMyBAQAogCiAJYWRkX2V4dHJhX2llcyhza2IsIGllcywgaWVzX2xlbik7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3NlbmRfcHNwb2xsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCAqcHNwb2xsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGZjOwpAQCAtNTMxLDQzICszNzgsMjAgQEAKIAltZW1zZXQocHNwb2xsLCAwLCBzaXplb2YoKnBzcG9sbCkpOwogCWZjID0gSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwgfCBJRUVFODAyMTFfRkNUTF9QTTsKIAlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7Ci0JcHNwb2xsLT5haWQgPSBjcHVfdG9fbGUxNihpZnN0YS0+YWlkKTsKKwlwc3BvbGwtPmFpZCA9IGNwdV90b19sZTE2KGlmbWdkLT5haWQpOwogCiAJLyogYWlkIGluIFBTLVBvbGwgaGFzIGl0cyB0d28gTVNCcyBlYWNoIHNldCB0byAxICovCiAJcHNwb2xsLT5haWQgfD0gY3B1X3RvX2xlMTYoMSA8PCAxNSB8IDEgPDwgMTQpOwogCi0JbWVtY3B5KHBzcG9sbC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShwc3BvbGwtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkocHNwb2xsLT50YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci0KLQlyZXR1cm47CiB9CiAKIC8qIE1MTUUgKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCi0JCQkJCSBjb25zdCB1OCAqc3VwcF9yYXRlcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgaSwgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAwOwotCi0JLyogY2YuIElFRUUgODAyLjExIDkuMi4xMiAqLwotCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKQotCQlpZiAoKHN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDUgPiAxMTApCi0JCQloYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IDE7Ci0KLQlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haICYmCi0JICAgIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0KQotCQlzZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKLQllbHNlCi0JCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKLQotCWllZWU4MDIxMV9zZXRfd21tX2RlZmF1bHQoc2RhdGEpOwotfQotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkLAogCQkJCSAgICAgdTggKndtbV9wYXJhbSwgc2l6ZV90IHdtbV9wYXJhbV9sZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcGFyYW1zOwpAQCAtNTc1LDcgKzM5OSw3IEBACiAJaW50IGNvdW50OwogCXU4ICpwb3M7CiAKLQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCiAJaWYgKCF3bW1fcGFyYW0pCkBAIC01ODQsMTggKzQwOCwxNSBAQAogCWlmICh3bW1fcGFyYW1fbGVuIDwgOCB8fCB3bW1fcGFyYW1bNV0gLyogdmVyc2lvbiAqLyAhPSAxKQogCQlyZXR1cm47CiAJY291bnQgPSB3bW1fcGFyYW1bNl0gJiAweDBmOwotCWlmIChjb3VudCA9PSBpZnN0YS0+d21tX2xhc3RfcGFyYW1fc2V0KQorCWlmIChjb3VudCA9PSBpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0KQogCQlyZXR1cm47Ci0JaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCA9IGNvdW50OworCWlmbWdkLT53bW1fbGFzdF9wYXJhbV9zZXQgPSBjb3VudDsKIAogCXBvcyA9IHdtbV9wYXJhbSArIDg7CiAJbGVmdCA9IHdtbV9wYXJhbV9sZW4gLSA4OwogCiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKIAotCWlmICghbG9jYWwtPm9wcy0+Y29uZl90eCkKLQkJcmV0dXJuOwotCiAJbG9jYWwtPndtbV9hY20gPSAwOwogCWZvciAoOyBsZWZ0ID49IDQ7IGxlZnQgLT0gNCwgcG9zICs9IDQpIHsKIAkJaW50IGFjaSA9IChwb3NbMF0gPj4gNSkgJiAweDAzOwpAQCAtNjAzLDI2ICs0MjQsMjYgQEAKIAkJaW50IHF1ZXVlOwogCiAJCXN3aXRjaCAoYWNpKSB7Ci0JCWNhc2UgMToKKwkJY2FzZSAxOiAvKiBBQ19CSyAqLwogCQkJcXVldWUgPSAzOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMCkgfCBCSVQoMyk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDEpIHwgQklUKDIpOyAvKiBCSy8tICovCiAJCQlicmVhazsKLQkJY2FzZSAyOgorCQljYXNlIDI6IC8qIEFDX1ZJICovCiAJCQlxdWV1ZSA9IDE7CiAJCQlpZiAoYWNtKQotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg0KSB8IEJJVCg1KTsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNCkgfCBCSVQoNSk7IC8qIENML1ZJICovCiAJCQlicmVhazsKLQkJY2FzZSAzOgorCQljYXNlIDM6IC8qIEFDX1ZPICovCiAJCQlxdWV1ZSA9IDA7CiAJCQlpZiAoYWNtKQotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg2KSB8IEJJVCg3KTsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNikgfCBCSVQoNyk7IC8qIFZPL05DICovCiAJCQlicmVhazsKLQkJY2FzZSAwOgorCQljYXNlIDA6IC8qIEFDX0JFICovCiAJCWRlZmF1bHQ6CiAJCQlxdWV1ZSA9IDI7CiAJCQlpZiAoYWNtKQotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgxKSB8IEJJVCgyKTsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMCkgfCBCSVQoMyk7IC8qIEJFL0VFICovCiAJCQlicmVhazsKIAkJfQogCkBAIC02MzYsOSArNDU3LDggQEAKIAkJICAgICAgIGxvY2FsLT5tZGV2LT5uYW1lLCBxdWV1ZSwgYWNpLCBhY20sIHBhcmFtcy5haWZzLCBwYXJhbXMuY3dfbWluLAogCQkgICAgICAgcGFyYW1zLmN3X21heCwgcGFyYW1zLnR4b3ApOwogI2VuZGlmCi0JCS8qIFRPRE86IGhhbmRsZSBBQ00gKGJsb2NrIFRYLCBmYWxsYmFjayB0byBuZXh0IGxvd2VzdCBhbGxvd2VkCi0JCSAqIEFDIGZvciBub3cpICovCi0JCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CisJCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4ICYmCisJCSAgICBsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgVFggcXVldWUgIgogCQkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwgbG9jYWwtPm1kZXYtPm5hbWUsIHF1ZXVlKTsKIAkJfQpAQCAtNjcxLDcgKzQ5MSw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAjZW5kaWYKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCB1c2VfcHJvdGVjdGlvbjsKQEAgLTY5NCw3ICs1MTQsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9wcm90ZWN0aW9uID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX2N0c19wcm90ID0gdXNlX3Byb3RlY3Rpb247CkBAIC03MDgsNyArNTI4LDcgQEAKIAkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAogCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCiAJCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID0gdXNlX3Nob3J0X3ByZWFtYmxlOwpAQCAtNzIyLDcgKzU0Miw3IEBACiAJCQkgICAgICAgIiAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9zaG9ydF9zbG90ID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QgPSB1c2Vfc2hvcnRfc2xvdDsKQEAgLTczMiw1NyArNTUyLDU3IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCi0JCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKKwkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNoYXIgKmJ1ZjsKIAlzaXplX3QgbGVuOwogCWludCBpOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAotCWlmICghaWZzdGEtPmFzc29jcmVxX2llcyAmJiAhaWZzdGEtPmFzc29jcmVzcF9pZXMpCisJaWYgKCFpZm1nZC0+YXNzb2NyZXFfaWVzICYmICFpZm1nZC0+YXNzb2NyZXNwX2llcykKIAkJcmV0dXJuOwogCi0JYnVmID0ga21hbGxvYyg1MCArIDIgKiAoaWZzdGEtPmFzc29jcmVxX2llc19sZW4gKwotCQkJCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiksIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MoNTAgKyAyICogKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuICsKKwkJCQlpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCiAJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ0lORk8oIik7Ci0JaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpIHsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykgewogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXFJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVxX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3JlcV9pZXNbaV0pOwogCQl9CiAJfQotCWlmIChpZnN0YS0+YXNzb2NyZXNwX2llcykgewotCQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpIHsKKwkJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgIik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlc3BJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXNwX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKIAkJfQogCX0KIAlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIpIik7CiAKIAlpZiAobGVuID4gSVdfQ1VTVE9NX01BWCkgewogCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DUkVTUElFPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOworCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7CiAJCX0KIAl9CiAKQEAgLTc5NywyMCArNjE3LDIwIEBACiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgdTMyIGJzc19pbmZvX2NoYW5nZWQpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsX3RvX2h3KGxvY2FsKS0+Y29uZjsKIAogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKIAkJCQkgICBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAlpZiAoYnNzKSB7CiAJCS8qIHNldCB0aW1pbmcgaW5mb3JtYXRpb24gKi8KIAkJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbDsKQEAgLTgyMywxMSArNjQzLDExIEBACiAJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCX0KIAotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCW1lbWNweShpZnN0YS0+cHJldl9ic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7Ci0JaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzZGF0YSwgaWZzdGEpOworCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCW1lbWNweShpZm1nZC0+cHJldl9ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzZGF0YSk7CiAKLQlpZnN0YS0+bGFzdF9wcm9iZSA9IGppZmZpZXM7CisJaWZtZ2QtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOwogCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIDEpOwogCiAJc2RhdGEtPnZpZi5ic3NfY29uZi5hc3NvYyA9IDE7CkBAIC04NTYsNzAgKzY3Niw3NCBAQAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vbihzZGF0YS0+ZGV2KTsKIAotCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5kaXJlY3RfcHJvYmVfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcysrOworCWlmIChpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CiAKIAkJLyoKIAkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCiAJCSAqIGJzcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSBBUAogCQkgKi8KLQkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmc3RhLT5ic3NpZCwKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKIAkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJCXJldHVybjsKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSB0byBBUCAlcE0gdHJ5ICVkXG4iLAotCQkJc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkLAotCQkJaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyk7CisJCQlzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQsCisJCQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzKTsKIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKIAotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZzdGEtPnJlcXVlc3QpOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZtZ2QtPnJlcXVlc3QpOwogCiAJLyogRGlyZWN0IHByb2JlIGlzIHNlbnQgdG8gYnJvYWRjYXN0IGFkZHJlc3MgYXMgc29tZSBBUHMKIAkgKiB3aWxsIG5vdCBhbnN3ZXIgdG8gZGlyZWN0IHBhY2tldCBpbiB1bmFzc29jaWF0ZWQgc3RhdGUuCiAJICovCiAJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBOVUxMLAotCQkJCSBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbiwgTlVMTCwgMCk7CiAKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5hdXRoX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZm1nZC0+YXV0aF90cmllcysrOworCWlmIChpZm1nZC0+YXV0aF90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIHdpdGggQVAgJXBNIgogCQkgICAgICAgIiB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmc3RhLT5ic3NpZCwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CisJCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCiAJCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCQlyZXR1cm47CiAJfQogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOworCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCi0JaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgaWZzdGEsIDEsIE5VTEwsIDAsIDApOworCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDEsIGlmbWdkLT5hdXRoX2FsZywgTlVMTCwgMCwKKwkJCSAgICBpZm1nZC0+YnNzaWQsIDApOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gMjsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKIH0KIAogLyoKQEAgLTkyNywyNyArNzUxLDI4IEBACiAgKiBpZiBzZWxmIGRpc2Nvbm5lY3RlZCBvciBhIHJlYXNvbiBjb2RlIGZyb20gdGhlIEFQLgogICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwgYm9vbCBkZWF1dGgsCi0JCQkJICAgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwgdTE2IHJlYXNvbikKKwkJCQkgICBib29sIGRlYXV0aCwgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwKKwkJCQkgICB1MTYgcmVhc29uKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUzMiBjaGFuZ2VkID0gMCwgY29uZmlnX2NoYW5nZWQgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChkZWF1dGgpIHsKLQkJaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JCWlmc3RhLT5hdXRoX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7CisJCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKIAl9Ci0JaWZzdGEtPmFzc29jX3NjYW5fdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY190cmllcyA9IDA7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7CkBAIC05NjMsMjAgKzc4OCwyMCBAQAogCQkJCUlFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQywgcmVhc29uKTsKIAl9CiAKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAljaGFuZ2VkIHw9IGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzZGF0YSk7CiAKIAlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCAwKTsKIAljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwogCXNkYXRhLT52aWYuYnNzX2NvbmYuYXNzb2MgPSBmYWxzZTsKIAotCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKIAogCWlmIChzZWxmX2Rpc2Nvbm5lY3RlZCB8fCByZWFzb24gPT0gV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmc3RhLT5ic3NpZCwKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAogCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQlpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTk5OSw3ICs4MjQsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwpAQCAtMTAyMCwyNyArODQ1LDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBic3NfcHJpdmFjeTsKIAlpbnQgd2VwX3ByaXZhY3k7CiAJaW50IHByaXZhY3lfaW52b2tlZDsKIAotCWlmICghaWZzdGEgfHwgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUlYRURfQ0VMTCkpCisJaWYgKCFpZm1nZCB8fCAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NSVhFRF9DRUxMKSkKIAkJcmV0dXJuIDA7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAorCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCiAJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJaWYgKCFic3MpCiAJCXJldHVybiAwOwogCiAJYnNzX3ByaXZhY3kgPSAhIShic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKTsKIAl3ZXBfcHJpdmFjeSA9ICEhaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzZGF0YSk7Ci0JcHJpdmFjeV9pbnZva2VkID0gISEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQpOworCXByaXZhY3lfaW52b2tlZCA9ICEhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEKTsKIAogCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCkBAIC0xMDUwLDQxICs4NzUsNDIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5hc3NvY190cmllcysrOwotCWlmIChpZnN0YS0+YXNzb2NfdHJpZXMgPiBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZm1nZC0+YXNzb2NfdHJpZXMrKzsKKwlpZiAoaWZtZ2QtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0aW9uIHdpdGggQVAgJXBNIgogCQkgICAgICAgIiB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmc3RhLT5ic3NpZCwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CisJCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCiAJCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCQlyZXR1cm47CiAJfQogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlIHdpdGggQVAgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSwgaWZzdGEpKSB7CisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1pc21hdGNoIGluIHByaXZhY3kgY29uZmlndXJhdGlvbiBhbmQgIgogCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBhYm9ydCBhc3NvY2lhdGlvblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwogCQlyZXR1cm47CiAJfQogCi0JaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSk7CiAKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKTsKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJaW50IGRpc2Fzc29jOwpAQCAtMTA5NCwzOCArOTIwLDQwIEBACiAJICogZm9yIGJldHRlciBBUHMuICovCiAJLyogVE9ETzogcmVtb3ZlIGV4cGlyZWQgQlNTZXMgKi8KIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFNUQSBlbnRyeSBmb3Igb3duIEFQICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCQlkaXNhc3NvYyA9IDE7CiAJfSBlbHNlIHsKIAkJZGlzYXNzb2MgPSAwOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAogCQkJICAgICAgIHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgewotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgeworCQkJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gUHJvYmVSZXNwIGZyb20gIgogCQkJCSAgICAgICAiY3VycmVudCBBUCAlcE0gLSBhc3N1bWUgb3V0IG9mICIKIAkJCQkgICAgICAgInJhbmdlXG4iLAotCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOworCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCQkJCWRpc2Fzc29jID0gMTsKIAkJCX0gZWxzZQotCQkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZzdGEtPmJzc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWRfbGVuKTsKLQkJCWlmc3RhLT5mbGFncyBePSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsCisJCQkJCQkJIGlmbWdkLT5zc2lkLAorCQkJCQkJCSBpZm1nZC0+c3NpZF9sZW4sCisJCQkJCQkJIE5VTEwsIDApOworCQkJaWZtZ2QtPmZsYWdzIF49IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKIAkJfSBlbHNlIHsKLQkJCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOwotCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmxhc3RfcHJvYmUgKworCQkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZm1nZC0+bGFzdF9wcm9iZSArCiAJCQkJICAgICAgIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCkpIHsKLQkJCQlpZnN0YS0+bGFzdF9wcm9iZSA9IGppZmZpZXM7Ci0JCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YS0+YnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOworCQkJCWlmbWdkLT5sYXN0X3Byb2JlID0gamlmZmllczsKKwkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQkJCQkgaWZtZ2QtPnNzaWQsCisJCQkJCQkJIGlmbWdkLT5zc2lkX2xlbiwKKwkJCQkJCQkgTlVMTCwgMCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMTMzLDI1ICs5NjEsMjUgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChkaXNhc3NvYykKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCiAJCQkJCVdMQU5fUkVBU09OX1BSRVZfQVVUSF9OT1RfVkFMSUQpOwogCWVsc2UKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCBpZnN0YSk7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogewpAQCAtMTE2Miw1OSArOTkwLDM3IEBACiAJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5jaGFsbGVuZ2UpCiAJCXJldHVybjsKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMywgZWxlbXMuY2hhbGxlbmdlIC0gMiwKLQkJCSAgICBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGhfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJCXNpemVfdCBsZW4pCi17Ci0JdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKLQotCWlmIChsZW4gPCAyNCArIDYpCi0JCXJldHVybjsKLQotCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKLQlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwotCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKLQotCS8qCi0JICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCi0JICogbmV0d29ya3MgYW5kIG1vc3QgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBzZWVtIHRvIHVzZSBpdC4KLQkgKiBIb3dldmVyLCB0cnkgdG8gcmVwbHkgdG8gYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgaWYgc29tZW9uZQotCSAqIGhhcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0aGlzLgotCSAqLwotCWlmIChhdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTiAmJiBhdXRoX3RyYW5zYWN0aW9uID09IDEpCi0JCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIGlmc3RhLCAyLCBOVUxMLCAwLCAwKTsKKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAzLCBzZGF0YS0+dS5tZ2QuYXV0aF9hbGcsCisJCQkgICAgZWxlbXMuY2hhbGxlbmdlIC0gMiwgZWxlbXMuY2hhbGxlbmdlX2xlbiArIDIsCisJCQkgICAgc2RhdGEtPnUubWdkLmJzc2lkLCAxKTsKKwlzZGF0YS0+dS5tZ2QuYXV0aF90cmFuc2FjdGlvbiA9IDQ7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUpCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFKQogCQlyZXR1cm47CiAKIAlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCiAJYXV0aF9hbGcgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF9hbGcpOwogCWF1dGhfdHJhbnNhY3Rpb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbik7CiAJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOwogCi0JaWYgKGF1dGhfYWxnICE9IGlmc3RhLT5hdXRoX2FsZyB8fAotCSAgICBhdXRoX3RyYW5zYWN0aW9uICE9IGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uKQorCWlmIChhdXRoX2FsZyAhPSBpZm1nZC0+YXV0aF9hbGcgfHwKKwkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSBpZm1nZC0+YXV0aF90cmFuc2FjdGlvbikKIAkJcmV0dXJuOwogCiAJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKQEAgLTEyMjMsMTUgKzEwMjksMTUgQEAKIAkJCWNvbnN0IGludCBudW1fYWxncyA9IEFSUkFZX1NJWkUoYWxncyk7CiAJCQlpbnQgaSwgcG9zOwogCQkJYWxnc1swXSA9IGFsZ3NbMV0gPSBhbGdzWzJdID0gMHhmZjsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQogCQkJCWFsZ3NbMF0gPSBXTEFOX0FVVEhfT1BFTjsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQogCQkJCWFsZ3NbMV0gPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQogCQkJCWFsZ3NbMl0gPSBXTEFOX0FVVEhfTEVBUDsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4pCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOKQogCQkJCXBvcyA9IDA7Ci0JCQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCisJCQllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCiAJCQkJcG9zID0gMTsKIAkJCWVsc2UKIAkJCQlwb3MgPSAyOwpAQCAtMTIzOSwxMDEgKzEwNDUsMTAxIEBACiAJCQkJcG9zKys7CiAJCQkJaWYgKHBvcyA+PSBudW1fYWxncykKIAkJCQkJcG9zID0gMDsKLQkJCQlpZiAoYWxnc1twb3NdID09IGlmc3RhLT5hdXRoX2FsZyB8fAorCQkJCWlmIChhbGdzW3Bvc10gPT0gaWZtZ2QtPmF1dGhfYWxnIHx8CiAJCQkJICAgIGFsZ3NbcG9zXSA9PSAweGZmKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoYWxnc1twb3NdID09IFdMQU5fQVVUSF9TSEFSRURfS0VZICYmCiAJCQkJICAgICFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHNkYXRhKSkKIAkJCQkJY29udGludWU7Ci0JCQkJaWZzdGEtPmF1dGhfYWxnID0gYWxnc1twb3NdOworCQkJCWlmbWdkLT5hdXRoX2FsZyA9IGFsZ3NbcG9zXTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChpZnN0YS0+YXV0aF9hbGcpIHsKKwlzd2l0Y2ggKGlmbWdkLT5hdXRoX2FsZykgewogCWNhc2UgV0xBTl9BVVRIX09QRU46CiAJY2FzZSBXTEFOX0FVVEhfTEVBUDoKLQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9BVVRIX1NIQVJFRF9LRVk6Ci0JCWlmIChpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9PSA0KQotCQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCBpZnN0YSk7CisJCWlmIChpZm1nZC0+YXV0aF90cmFuc2FjdGlvbiA9PSA0KQorCQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhKTsKIAkJZWxzZQotCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBpZnN0YSwgbWdtdCwgbGVuKTsKKwkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzZGF0YSwgbWdtdCwgbGVuKTsKIAkJYnJlYWs7CiAJfQogfQogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKIAkJcmV0dXJuOwogCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCiAJCXJldHVybjsKIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kZWF1dGgucmVhc29uX2NvZGUpOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCkKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRlZCAoUmVhc29uOiAldSlcbiIsCiAJCQkJc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uX2NvZGUpOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFIHx8Ci0JICAgIGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFIHx8Ci0JICAgIGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgewotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFIHx8CisJICAgIGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFIHx8CisJICAgIGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgeworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOwogCX0KIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCBmYWxzZSwgMCk7Ci0JaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQ7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgZmFsc2UsIDApOworCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOwogfQogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgICAgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgcmVhc29uX2NvZGU7CiAKIAlpZiAobGVuIDwgMjQgKyAyKQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRpc2Fzc29jLnJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGVkIChSZWFzb246ICV1KVxuIiwKIAkJCQlzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKKwlpZiAoaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7CisJCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsKIAkJCQkgICAgICBJRUVFODAyMTFfUkVUUllfQVVUSF9JTlRFUlZBTCk7CiAJfQogCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIGZhbHNlLCBmYWxzZSwgcmVhc29uX2NvZGUpOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlLCBmYWxzZSwgcmVhc29uX2NvZGUpOwogfQogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJCSBzaXplX3QgbGVuLAogCQkJCQkgaW50IHJlYXNzb2MpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CkBAIC0xMzUwLDEzICsxMTU2LDEzIEBACiAJLyogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAogCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4gKi8KIAotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCiAJCXJldHVybjsKIAogCWlmIChsZW4gPCAyNCArIDYpCiAJCXJldHVybjsKIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCiAJY2FwYWJfaW5mbyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5jYXBhYl9pbmZvKTsKQEAgLTEzODEsNyArMTE4Nyw3IEBACiAJCSAgICAgICAiY29tZWJhY2sgZHVyYXRpb24gJXUgVFUgKCV1IG1zKVxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHR1LCBtcyk7CiAJCWlmIChtcyA+IElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKQotCQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsCisJCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwKIAkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMzkyLDcgKzExOTgsNyBAQAogCQkvKiBpZiB0aGlzIHdhcyBhIHJlYXNzb2NpYXRpb24sIGVuc3VyZSB3ZSB0cnkgYSAiZnVsbCIKIAkJICogYXNzb2NpYXRpb24gbmV4dCB0aW1lLiBUaGlzIHdvcmtzIGFyb3VuZCBzb21lIGJyb2tlbiBBUHMKIAkJICogd2hpY2ggZG8gbm90IGNvcnJlY3RseSByZWplY3QgcmVhc3NvY2lhdGlvbiByZXF1ZXN0cy4gKi8KLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE0MDgsMjMgKzEyMTQsMjMgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZWRcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCWlmc3RhLT5haWQgPSBhaWQ7Ci0JaWZzdGEtPmFwX2NhcGFiID0gY2FwYWJfaW5mbzsKKwlpZm1nZC0+YWlkID0gYWlkOworCWlmbWdkLT5hcF9jYXBhYiA9IGNhcGFiX2luZm87CiAKLQlrZnJlZShpZnN0YS0+YXNzb2NyZXNwX2llcyk7Ci0JaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuID0gbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KTsKLQlpZnN0YS0+YXNzb2NyZXNwX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoaWZzdGEtPmFzc29jcmVzcF9pZXMpCi0JCW1lbWNweShpZnN0YS0+YXNzb2NyZXNwX2llcywgcG9zLCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW4pOworCWtmcmVlKGlmbWdkLT5hc3NvY3Jlc3BfaWVzKTsKKwlpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4gPSBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpOworCWlmbWdkLT5hc3NvY3Jlc3BfaWVzID0ga21hbGxvYyhpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4sIEdGUF9LRVJORUwpOworCWlmIChpZm1nZC0+YXNzb2NyZXNwX2llcykKKwkJbWVtY3B5KGlmbWdkLT5hc3NvY3Jlc3BfaWVzLCBwb3MsIGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAkvKiBBZGQgU1RBIGVudHJ5IGZvciB0aGUgQVAgKi8KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7CiAJCW5ld3N0YSA9IHRydWU7CiAKLQkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmc3RhLT5ic3NpZCwgR0ZQX0FUT01JQyk7CisJCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBpZm1nZC0+YnNzaWQsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXN0YSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2MgU1RBIGVudHJ5IGZvciIKIAkJCSAgICAgICAiIHRoZSBBUFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0xNDk3LDcgKzEzMDMsOCBAQAogCWVsc2UKIAkJc2RhdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOwogCi0JaWYgKGVsZW1zLmh0X2NhcF9lbGVtKQorCS8qIElmIFRLSVAvV0VQIGlzIHVzZWQsIG5vIG5lZWQgdG8gcGFyc2UgQVAncyBIVCBjYXBhYmlsaXRpZXMgKi8KKwlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKQogCQlpZWVlODAyMTFfaHRfY2FwX2llX3RvX3N0YV9odF9jYXAoc2JhbmQsCiAJCQkJZWxlbXMuaHRfY2FwX2VsZW0sICZzdGEtPnN0YS5odF9jYXApOwogCkBAIC0xNTA1LDcgKzEzMTIsNyBAQAogCiAJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEpOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpCiAJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9NRlApOwogCiAJaWYgKGVsZW1zLndtbV9wYXJhbSkKQEAgLTE1MjQsMTEgKzEzMzEsMTIgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChlbGVtcy53bW1fcGFyYW0pCi0JCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZzdGEsIGVsZW1zLndtbV9wYXJhbSwKKwkJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CiAKIAlpZiAoZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSAmJgotCSAgICAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCisJICAgIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgorCSAgICAhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCkpCiAJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2VuYWJsZV9odChzZGF0YSwgZWxlbXMuaHRfaW5mb19lbGVtLAogCQkJCQkgICAgICAgYXBfaHRfY2FwX2ZsYWdzKTsKIApAQCAtMTUzNiwxNjMgKzEzNDQsMTIgQEAKIAkgKiBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoKSB3aWxsIHRlbGwgdGhlIGRyaXZlciAqLwogCWJzc19jb25mLT5haWQgPSBhaWQ7CiAJYnNzX2NvbmYtPmFzc29jX2NhcGFiaWxpdHkgPSBjYXBhYl9pbmZvOwotCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzZGF0YSwgaWZzdGEsIGNoYW5nZWQpOworCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzZGF0YSwgY2hhbmdlZCk7CiAKLQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhKTsKIH0KIAogCi1zdGF0aWMgaW50IF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IGludCBiZWFjb25faW50LAotCQkJCSAgICAgY29uc3QgaW50IGZyZXEsCi0JCQkJICAgICBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCi0JCQkJICAgICBjb25zdCB1OCAqc3VwcF9yYXRlcywKLQkJCQkgICAgIGNvbnN0IHUxNiBjYXBhYmlsaXR5KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCByZXMgPSAwLCByYXRlcywgaSwgajsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQotCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKLQkJLyogUmVzZXQgb3duIFRTRiB0byBhbGxvdyB0aW1lIHN5bmNocm9uaXphdGlvbiB3b3JrLiAqLwotCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKLQl9Ci0KLQlpZiAoKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpICYmCi0JICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQotCQlyZXR1cm4gcmVzOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDAgKwotCQkJICAgIHNkYXRhLT51LnN0YS5pZV9wcm9iZXJlc3BfbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXNwb25zZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpKSB7Ci0JCS8qIFJlbW92ZSBwb3NzaWJsZSBTVEEgZW50cmllcyBmcm9tIG90aGVyIElCU1MgbmV0d29ya3MuICovCi0JCXN0YV9pbmZvX2ZsdXNoX2RlbGF5ZWQoc2RhdGEpOwotCX0KLQotCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gYmVhY29uX2ludCA+PSAxMCA/IGJlYWNvbl9pbnQgOiAxMDsKLQotCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gY2FwYWJpbGl0eSAmCi0JCVdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gMSA6IDA7Ci0KLQlyZXMgPSBpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGZyZXEpOwotCi0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCS8qIEJ1aWxkIElCU1MgcHJvYmUgcmVzcG9uc2UgKi8KLQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCi0JCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwotCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOwotCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPQotCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5iZWFjb25faW50KTsKLQltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWJpbGl0eSk7Ci0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmc3RhLT5zc2lkX2xlbik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSBpZnN0YS0+c3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0KLQlyYXRlcyA9IHN1cHBfcmF0ZXNfbGVuOwotCWlmIChyYXRlcyA+IDgpCi0JCXJhdGVzID0gODsKLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCSpwb3MrKyA9IHJhdGVzOwotCW1lbWNweShwb3MsIHN1cHBfcmF0ZXMsIHJhdGVzKTsKLQotCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMSk7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0RTX1BBUkFNUzsKLQkJKnBvcysrID0gMTsKLQkJKnBvcysrID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGZyZXEpOwotCX0KLQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMik7Ci0JKnBvcysrID0gV0xBTl9FSURfSUJTU19QQVJBTVM7Ci0JKnBvcysrID0gMjsKLQkvKiBGSVg6IHNldCBBVElNIHdpbmRvdyBiYXNlZCBvbiBzY2FuIHJlc3VsdHMgKi8KLQkqcG9zKysgPSAwOwotCSpwb3MrKyA9IDA7Ci0KLQlpZiAoc3VwcF9yYXRlc19sZW4gPiA4KSB7Ci0JCXJhdGVzID0gc3VwcF9yYXRlc19sZW4gLSA4OwotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKLQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCSpwb3MrKyA9IHJhdGVzOwotCQltZW1jcHkocG9zLCAmc3VwcF9yYXRlc1s4XSwgcmF0ZXMpOwotCX0KLQotCWFkZF9leHRyYV9pZXMoc2tiLCBzZGF0YS0+dS5zdGEuaWVfcHJvYmVyZXNwLAotCQkgICAgICBzZGF0YS0+dS5zdGEuaWVfcHJvYmVyZXNwX2xlbik7Ci0KLQlpZnN0YS0+cHJvYmVfcmVzcCA9IHNrYjsKLQotCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTiB8Ci0JCQkJICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOwotCi0KLQlyYXRlcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJaW50IGJpdHJhdGUgPSAoc3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKLQkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCi0JCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gYml0cmF0ZSkKLQkJCQlyYXRlcyB8PSBCSVQoaik7Ci0JfQotCWlmc3RhLT5zdXBwX3JhdGVzX2JpdHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF0gPSByYXRlczsKLQotCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIHN1cHBfcmF0ZXNfbGVuLCBzdXBwX3JhdGVzKTsKLQotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRDsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIHRydWUpOwotCi0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlyZXR1cm4gX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgaWZzdGEsCi0JCQkJCSBic3MtPmNic3MuYnNzaWQsCi0JCQkJCSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsLAotCQkJCQkgYnNzLT5jYnNzLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCQkgYnNzLT5zdXBwX3JhdGVzX2xlbiwgYnNzLT5zdXBwX3JhdGVzLAotCQkJCQkgYnNzLT5jYnNzLmNhcGFiaWxpdHkpOwotfQotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICBzaXplX3QgbGVuLApAQCAtMTcwMywxMSArMTM2MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IGZyZXE7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0JdTY0IGJlYWNvbl90aW1lc3RhbXAsIHJ4X3RpbWVzdGFtcDsKLQl1MzIgc3VwcF9yYXRlcyA9IDA7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gcnhfc3RhdHVzLT5iYW5kOwogCiAJaWYgKGVsZW1zLT5kc19wYXJhbXMgJiYgZWxlbXMtPmRzX3BhcmFtc19sZW4gPT0gMSkKIAkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShlbGVtcy0+ZHNfcGFyYW1zWzBdKTsKQEAgLTE3MTksMTMzICsxMzcyLDE4IEBACiAJaWYgKCFjaGFubmVsIHx8IGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgZWxlbXMtPnN1cHBfcmF0ZXMgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCXN1cHBfcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgZWxlbXMsIGJhbmQpOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKLQkJaWYgKHN0YSkgewotCQkJdTMyIHByZXZfcmF0ZXM7Ci0KLQkJCXByZXZfcmF0ZXMgPSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdOwotCQkJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCi0JCQlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8Ci0JCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQkJaWYgKHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gIT0gcHJldl9yYXRlcykKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgotCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgotCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCi0JCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkJICAgIHN0YS0+c3RhLmFkZHIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHByZXZfcmF0ZXMsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN1cHBfcmF0ZXMsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0pOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOwotCQl9Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQotCiAJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShsb2NhbCwgcnhfc3RhdHVzLCBtZ210LCBsZW4sIGVsZW1zLAogCQkJCQljaGFubmVsLCBiZWFjb24pOwogCWlmICghYnNzKQogCQlyZXR1cm47CiAKIAlpZiAoZWxlbXMtPmNoX3N3aXRjaF9lbGVtICYmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW1fbGVuID09IDMpICYmCi0JICAgIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pID09IDApKSB7CisJICAgIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pID09IDApKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICopZWxlbXMtPmNoX3N3aXRjaF9lbGVtOwogCQlpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHNkYXRhLCBzd19lbGVtLCBic3MpOwogCX0KIAotCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLwotCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJZ290byBwdXRfYnNzOwotCi0JLyogY2hlY2sgaWYgd2UgbmVlZCB0byBtZXJnZSBJQlNTICovCi0KLQkvKiBtZXJnZSBvbmx5IG9uIGJlYWNvbnMgKD8/PykgKi8KLQlpZiAoIWJlYWNvbikKLQkJZ290byBwdXRfYnNzOwotCi0JLyogd2UgdXNlIGEgZml4ZWQgQlNTSUQgKi8KLQlpZiAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpCi0JCWdvdG8gcHV0X2JzczsKLQotCS8qIG5vdCBhbiBJQlNTICovCi0JaWYgKCEoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCi0JCWdvdG8gcHV0X2JzczsKLQotCS8qIGRpZmZlcmVudCBjaGFubmVsICovCi0JaWYgKGJzcy0+Y2Jzcy5jaGFubmVsICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwpCi0JCWdvdG8gcHV0X2JzczsKLQotCS8qIGRpZmZlcmVudCBTU0lEICovCi0JaWYgKGVsZW1zLT5zc2lkX2xlbiAhPSBzZGF0YS0+dS5zdGEuc3NpZF9sZW4gfHwKLQkgICAgbWVtY21wKGVsZW1zLT5zc2lkLCBzZGF0YS0+dS5zdGEuc3NpZCwKLQkJCQlzZGF0YS0+dS5zdGEuc3NpZF9sZW4pKQotCQlnb3RvIHB1dF9ic3M7Ci0KLQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7Ci0JCS8qCi0JCSAqIEZvciBjb3JyZWN0IElCU1MgbWVyZ2luZyB3ZSBuZWVkIG1hY3RpbWU7IHNpbmNlIG1hY3RpbWUgaXMKLQkJICogZGVmaW5lZCBhcyB0aGUgdGltZSB0aGUgZmlyc3QgZGF0YSBzeW1ib2wgb2YgdGhlIGZyYW1lIGhpdHMKLQkJICogdGhlIFBIWSwgYW5kIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJlYWNvbiBpcyBkZWZpbmVkIGFzICJ0aGUKLQkJICogdGltZSB0aGF0IHRoZSBkYXRhIHN5bWJvbCBjb250YWluaW5nIHRoZSBmaXJzdCBiaXQgb2YgdGhlCi0JCSAqIHRpbWVzdGFtcCBpcyB0cmFuc21pdHRlZCB0byB0aGUgUEhZIHBsdXMgdGhlIHRyYW5zbWl0dGluZwotCQkgKiBTVEEncyBkZWxheXMgdGhyb3VnaCBpdHMgbG9jYWwgUEhZIGZyb20gdGhlIE1BQy1QSFkKLQkJICogaW50ZXJmYWNlIHRvIGl0cyBpbnRlcmZhY2Ugd2l0aCB0aGUgV00iICg4MDIuMTEgMTEuMS4yKQotCQkgKiAtIGVxdWFscyB0aGUgdGltZSB0aGlzIGJpdCBhcnJpdmVzIGF0IHRoZSByZWNlaXZlciAtIHdlIGhhdmUKLQkJICogdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSB0d28uCi0JCSAqCi0JCSAqIEUuZy4gYXQgMSBNQml0IHRoYXQgbWVhbnMgbWFjdGltZSBpcyAxOTIgdXNlYyBlYXJsaWVyCi0JCSAqICg9MjQgYnl0ZXMgKiA4IHVzZWNzL2J5dGUpIHRoYW4gdGhlIGJlYWNvbiB0aW1lc3RhbXAuCi0JCSAqLwotCQlpbnQgcmF0ZTsKLQotCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkKLQkJCXJhdGUgPSA2NTsgLyogVE9ETzogSFQgcmF0ZXMgKi8KLQkJZWxzZQotCQkJcmF0ZSA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF0tPgotCQkJCWJpdHJhdGVzW3J4X3N0YXR1cy0+cmF0ZV9pZHhdLmJpdHJhdGU7Ci0KLQkJcnhfdGltZXN0YW1wID0gcnhfc3RhdHVzLT5tYWN0aW1lICsgKDI0ICogOCAqIDEwIC8gcmF0ZSk7Ci0JfSBlbHNlIGlmIChsb2NhbCAmJiBsb2NhbC0+b3BzICYmIGxvY2FsLT5vcHMtPmdldF90c2YpCi0JCS8qIHNlY29uZCBiZXN0IG9wdGlvbjogZ2V0IGN1cnJlbnQgVFNGICovCi0JCXJ4X3RpbWVzdGFtcCA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKLQllbHNlCi0JCS8qIGNhbid0IG1lcmdlIHdpdGhvdXQga25vd2luZyB0aGUgVFNGICovCi0JCXJ4X3RpbWVzdGFtcCA9IC0xTExVOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVwTSBCU1NJRD0iCi0JICAgICAgICIlcE0gVFNGPTB4JWxseCBCQ049MHglbGx4IGRpZmY9JWxsZCBAJWx1XG4iLAotCSAgICAgICBtZ210LT5zYSwgbWdtdC0+YnNzaWQsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfdGltZXN0YW1wLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlYWNvbl90aW1lc3RhbXAsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHJ4X3RpbWVzdGFtcCAtIGJlYWNvbl90aW1lc3RhbXApLAotCSAgICAgICBqaWZmaWVzKTsKLSNlbmRpZgotCi0JaWYgKGJlYWNvbl90aW1lc3RhbXAgPiByeF90aW1lc3RhbXApIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJlYWNvbiBUU0YgaGlnaGVyIHRoYW4gIgotCQkgICAgICAgImxvY2FsIFRTRiAtIElCU1MgbWVyZ2Ugd2l0aCBCU1NJRCAlcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5ic3NpZCk7Ci0jZW5kaWYKLQkJaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsICZzZGF0YS0+dS5zdGEsIGJzcyk7Ci0JCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7Ci0JfQotCi0gcHV0X2JzczoKIAlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIH0KIApAQCAtMTg1Nyw3ICsxMzk1LDYgQEAKIHsKIAlzaXplX3QgYmFzZWxlbjsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCiAJaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOyAvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLwpAQCAtMTg3MywyMCArMTQxMCwxOSBAQAogCiAJLyogZGlyZWN0IHByb2JlIG1heSBiZSBwYXJ0IG9mIHRoZSBhc3NvY2lhdGlvbiBmbG93ICovCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUsCi0JCQkJCQkJJmlmc3RhLT5yZXF1ZXN0KSkgeworCSAgICAmc2RhdGEtPnUubWdkLnJlcXVlc3QpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSk7CiAJfQogfQogCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgIHNpemVfdCBsZW4sCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXNpemVfdCBiYXNlbGVuOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwpAQCAtMTkwNSwyMSArMTQ0MSwyMSBAQAogCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm47Ci0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB8fAotCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB8fAorCSAgICBtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAogCWlmIChyeF9zdGF0dXMtPmZyZXEgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpCiAJCXJldHVybjsKIAotCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZzdGEsIGVsZW1zLndtbV9wYXJhbSwKKwlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmbWdkLCBlbGVtcy53bW1fcGFyYW0sCiAJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyAmJgotCSAgICBsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7Ci0JCWRpcmVjdGVkX3RpbSA9IGllZWU4MDIxMV9jaGVja190aW0oJmVsZW1zLCBpZnN0YS0+YWlkKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSB7CisJCWRpcmVjdGVkX3RpbSA9IGllZWU4MDIxMV9jaGVja190aW0oJmVsZW1zLCBpZm1nZC0+YWlkKTsKIAogCQlpZiAoZGlyZWN0ZWRfdGltKSB7CiAJCQlpZiAobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgewpAQCAtMTk1NCwxNCArMTQ5MCwxNSBAQAogCQkJZXJwX3ZhbGlkLCBlcnBfdmFsdWUpOwogCiAKLQlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSkgeworCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiBlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCisJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkgewogCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJCXUxNiBhcF9odF9jYXBfZmxhZ3M7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCQlpZiAoIXN0YSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CkBAIC0xOTk3LDg1ICsxNTM0LDE2IEBACiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOwogfQogCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJCXNpemVfdCBsZW4pCitpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IHR4X2xhc3RfYmVhY29uOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICpyZXNwOwotCXU4ICpwb3MsICplbmQ7Ci0KLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCB8fAotCSAgICBsZW4gPCAyNCArIDIgfHwgIWlmc3RhLT5wcm9iZV9yZXNwKQotCQlyZXR1cm47Ci0KLQlpZiAobG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24pCi0JCXR4X2xhc3RfYmVhY29uID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24obG9jYWxfdG9faHcobG9jYWwpKTsKLQllbHNlCi0JCXR4X2xhc3RfYmVhY29uID0gMTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBQcm9iZVJlcSBTQT0lcE0gREE9JXBNIEJTU0lEPSVwTSIKLQkgICAgICAgIiAodHhfbGFzdF9iZWFjb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCi0JICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQotCWlmICghdHhfbGFzdF9iZWFjb24pCi0JCXJldHVybjsKLQotCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwgRVRIX0FMRU4pICE9IDApCi0JCXJldHVybjsKLQotCWVuZCA9ICgodTggKikgbWdtdCkgKyBsZW47Ci0JcG9zID0gbWdtdC0+dS5wcm9iZV9yZXEudmFyaWFibGU7Ci0JaWYgKHBvc1swXSAhPSBXTEFOX0VJRF9TU0lEIHx8Ci0JICAgIHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgU1NJRCBJRSBpbiBQcm9iZVJlcSAiCi0JCSAgICAgICAiZnJvbSAlcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlpZiAocG9zWzFdICE9IDAgJiYKLQkgICAgKHBvc1sxXSAhPSBpZnN0YS0+c3NpZF9sZW4gfHwKLQkgICAgIG1lbWNtcChwb3MgKyAyLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKSAhPSAwKSkgewotCQkvKiBJZ25vcmUgUHJvYmVSZXEgZm9yIGZvcmVpZ24gU1NJRCAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogUmVwbHkgd2l0aCBQcm9iZVJlc3AgKi8KLQlza2IgPSBza2JfY29weShpZnN0YS0+cHJvYmVfcmVzcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybjsKLQotCXJlc3AgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKLQltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbmRpbmcgUHJvYmVSZXNwIHRvICVwTVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVzcC0+ZGEpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTE2IGZjOwogCiAJaWYgKHNrYi0+bGVuIDwgMjQpCi0JCWdvdG8gZmFpbDsKLQotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOwpAQCAtMjA5MCwxNDcgKzE1NTgsNjggQEAKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQlza2JfcXVldWVfdGFpbCgmaWZzdGEtPnNrYl9xdWV1ZSwgc2tiKTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOwotCQlyZXR1cm47CisJCXNrYl9xdWV1ZV90YWlsKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlLCBza2IpOworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJCXJldHVybiBSWF9RVUVVRUQ7CiAJfQogCi0gZmFpbDoKLQlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTE2IGZjOwogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCiAJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7CiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6Ci0JCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc2RhdGEsIGlmc3RhLCBtZ210LAotCQkJCQkJICAgIHNrYi0+bGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCQkgICAgIHJ4X3N0YXR1cyk7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKLQkJCQkJCSByeF9zdGF0dXMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCQlpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc2RhdGEsIGlmc3RhLCBtZ210LAotCQkJCQkJICAgIHNrYi0+bGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsgLyogTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAqLwotCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAotCQkJCQkJICAgICByeF9zdGF0dXMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQkJCWllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCQkgcnhfc3RhdHVzKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgaWZzdGEsIG1nbXQsCi0JCQkJCQkgICAgIHNrYi0+bGVuLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6Ci0JCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBpZnN0YSwgbWdtdCwKLQkJCQkJCSAgICAgc2tiLT5sZW4sIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKLQkJCWllZWU4MDIxMV9yeF9tZ210X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgbWdtdCwKLQkJCQkJCSAgIHNrYi0+bGVuKTsKLQkJCWJyZWFrOwotCQl9CisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgcnhfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgcnhfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKKwkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgorCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMCk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKKwkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CisJCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKKwkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CiAJfQogCiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBhY3RpdmUgPSAwOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCi0JCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAotCQkJICAgICAgIGppZmZpZXMpKSB7Ci0JCQlhY3RpdmUrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gYWN0aXZlOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKTsKLQlpZiAoaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCi0JCXJldHVybjsKLQotCWlmICgoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpICYmCi0JICAgICghKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIGFjdGl2ZSBJQlNTIFNUQXMgLSB0cnlpbmcgdG8gc2NhbiBmb3Igb3RoZXIgIgotCSAgICAgICAiSUJTUyBuZXR3b3JrcyB3aXRoIHNhbWUgU1NJRCAobWVyZ2UpXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQotCS8qIFhYWCBtYXliZSByYWN5PyAqLwotCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5fcmVxKQotCQlyZXR1cm47Ci0KLQltZW1jcHkoc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKLQkgICAgICAgaWZzdGEtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOwotCXNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZzdGEtPnNzaWRfbGVuOwotCWllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsICZzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcSk7Ci19Ci0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQogCQkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqKSBkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCk7CisJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKIAlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CkBAIC0yMjM4LDE5MSArMTYyNywzOSBAQAogCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKIAl9CiAKLQlpZnN0YS0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCisJaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCA9IC0xOyAvKiBhbGxvdyBhbnkgV01NIHVwZGF0ZSAqLwogCiAKLQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwotCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0xFQVA7CisJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47CisJZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKKwllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9MRUFQOwogCWVsc2UKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47Ci0JaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKLQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JaWZzdGEtPmF1dGhfdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gLTE7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOworCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2NfdHJpZXMgPSAwOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0+ZGV2KTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXU4ICpwb3M7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IHN1cHBfcmF0ZXNbSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTXTsKLQl1MTYgY2FwYWJpbGl0eTsKLQlpbnQgaTsKLQotCWlmIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCkgewotCQltZW1jcHkoYnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCS8qIEdlbmVyYXRlIHJhbmRvbSwgbm90IGJyb2FkY2FzdCwgbG9jYWxseSBhZG1pbmlzdGVyZWQgQlNTSUQuIE1peCBpbgotCQkgKiBvd24gTUFDIGFkZHJlc3MgdG8gbWFrZSBzdXJlIHRoYXQgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIHByb3BlcgotCQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwotCQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7Ci0JCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07Ci0JCWJzc2lkWzBdICY9IH4weDAxOwotCQlic3NpZFswXSB8PSAweDAyOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7Ci0KLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0KLQlpZiAobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9PSAwKQotCQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gMTAwOwotCi0JY2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwotCi0JaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKLQkJY2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQllbHNlCi0JCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKLQotCXBvcyA9IHN1cHBfcmF0ZXM7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKLQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOwotCX0KLQotCXJldHVybiBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBpZnN0YSwKLQkJCQkJIGJzc2lkLCBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50LAotCQkJCQkgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJCSBzYmFuZC0+bl9iaXRyYXRlcywgc3VwcF9yYXRlcywKLQkJCQkJIGNhcGFiaWxpdHkpOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQoteworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0JaW50IGFjdGl2ZV9pYnNzOwotCi0JaWYgKGlmc3RhLT5zc2lkX2xlbiA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YV9maW5kX2lic3MgKGFjdGl2ZV9pYnNzPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYWN0aXZlX2lic3MpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0KLQlpZiAoYWN0aXZlX2lic3MpCi0JCXJldHVybiAwOwotCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUKQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLCAwLAotCQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQllbHNlCi0JCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2lic3MobG9jYWwtPmh3LndpcGh5LAotCQkJCQkJTlVMTCwKLQkJCQkJCWlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlpZiAoYnNzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgotCQkgICAgICAgIiVwTVxuIiwgYnNzLT5jYnNzLmJzc2lkLCBpZnN0YS0+YnNzaWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0KLQlpZiAoYnNzICYmCi0JICAgICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHx8Ci0JICAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKSkpIHsKLQkJaW50IHJldDsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgotCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3MtPmNic3MuYnNzaWQpOwotCi0JCXJldCA9IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBpZnN0YSwgYnNzKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCXJldHVybiByZXQ7Ci0JfSBlbHNlIGlmIChic3MpCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiICAgZGlkIG5vdCB0cnkgdG8gam9pbiBpYnNzXG4iKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCi0JLyogU2VsZWN0ZWQgSUJTUyBub3QgZm91bmQgaW4gY3VycmVudCBzY2FuIHJlc3VsdHMgLSB0cnkgdG8gc2NhbiAqLwotCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEICYmCi0JICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkgewotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCi0JCQkJICAgICAgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwotCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCArCi0JCQkgICAgICBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCi0JCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0KLQkJLyogWFhYIG1heWJlIHJhY3k/ICovCi0JCWlmIChsb2NhbC0+c2Nhbl9yZXEpCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCW1lbWNweShsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCi0JCSAgICAgICBpZnN0YS0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7Ci0JCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZnN0YS0+c3NpZF9sZW47Ci0JCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCAmbG9jYWwtPmludF9zY2FuX3JlcSk7Ci0JfSBlbHNlIGlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSB7Ci0JCWludCBpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMOwotCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5pYnNzX2pvaW5fcmVxICsKLQkJCSAgICAgICBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQpKSB7Ci0JCQlpZiAoKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MpICYmCi0JCQkgICAgKCEobG9jYWwtPm9wZXJfY2hhbm5lbC0+ZmxhZ3MgJgotCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkpCi0JCQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc2RhdGEsIGlmc3RhKTsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJQlNTIG5vdCBhbGxvd2VkIG9uIgotCQkJCSAgICAgICAiICVkIE1IelxuIiwgc2RhdGEtPmRldi0+bmFtZSwKLQkJCQkgICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCQkJfQotCi0JCQkvKiBObyBJQlNTIGZvdW5kIC0gZGVjcmVhc2Ugc2NhbiBpbnRlcnZhbCBhbmQgY29udGludWUKLQkJCSAqIHNjYW5uaW5nLiAqLwotCQkJaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XOwotCQl9Ci0KLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNIOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIGludGVydmFsKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0JdTggKmJzc2lkID0gaWZzdGEtPmJzc2lkLCAqc3NpZCA9IGlmc3RhLT5zc2lkOwotCXU4IHNzaWRfbGVuID0gaWZzdGEtPnNzaWRfbGVuOworCXU4ICpic3NpZCA9IGlmbWdkLT5ic3NpZCwgKnNzaWQgPSBpZm1nZC0+c3NpZDsKKwl1OCBzc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKIAl1MTYgY2FwYV9tYXNrID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKIAl1MTYgY2FwYV92YWwgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCB8CisJaWYgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwgfAogCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpIHsKIAkJY2FwYV9tYXNrIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwpAQCAtMjQzMCwxMyArMTY2NywxMyBAQAogCQkJY2FwYV92YWwgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CiAJfQogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKQogCQljaGFuID0gTlVMTDsKIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQogCQlic3NpZCA9IE5VTEw7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSB7CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkgewogCQlzc2lkID0gTlVMTDsKIAkJc3NpZF9sZW4gPSAwOwogCX0KQEAgLTI0NDcsMTYgKzE2ODQsMTYgQEAKIAogCWlmIChic3MpIHsKIAkJaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBic3MtPmNic3MuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKKwkJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9TU0lEX1NFVCkpCiAJCQlpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBic3MtPnNzaWQsCiAJCQkJCSAgICAgICBic3MtPnNzaWRfbGVuKTsKIAkJaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsIGJzcy0+Y2Jzcy5ic3NpZCk7CiAJCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIGJzcy0+c3VwcF9yYXRlc19sZW4sCiAJCQkJCQkgICAgYnNzLT5zdXBwX3JhdGVzKTsKLQkJaWYgKHNkYXRhLT51LnN0YS5tZnAgPT0gSUVFRTgwMjExX01GUF9SRVFVSVJFRCkKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEOworCQlpZiAoc2RhdGEtPnUubWdkLm1mcCA9PSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7CiAJCWVsc2UKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKIAogCQkvKiBTZW5kIG91dCBkaXJlY3QgcHJvYmUgaWYgbm8gcHJvYmUgcmVzcCB3YXMgcmVjZWl2ZWQgb3IKIAkJICogdGhlIG9uZSB3ZSBoYXZlIGlzIG91dGRhdGVkCkBAIC0yNDY0LDMxICsxNzAxLDM0IEBACiAJCWlmICghYnNzLT5sYXN0X3Byb2JlX3Jlc3AgfHwKIAkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3Byb2JlX3Jlc3AKIAkJCQkJKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwogCQllbHNlCi0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKIAogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQkJaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCWlmIChpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA8IElFRUU4MDIxMV9BU1NPQ19TQ0FOU19NQVhfVFJJRVMpIHsKLQkJCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzKys7CisJCWlmIChpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA8IElFRUU4MDIxMV9BU1NPQ19TQ0FOU19NQVhfVFJJRVMpIHsKKwkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzKys7CiAJCQkvKiBYWFggbWF5YmUgcmFjeT8gKi8KIAkJCWlmIChsb2NhbC0+c2Nhbl9yZXEpCiAJCQkJcmV0dXJuIC0xOwogCQkJbWVtY3B5KGxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKLQkJCSAgICAgICBpZnN0YS0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7Ci0JCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKQorCQkJICAgICAgIGlmbWdkLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwkJCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpCiAJCQkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IDA7CiAJCQllbHNlCi0JCQkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmc3RhLT5zc2lkX2xlbjsKLQkJCWllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCAmbG9jYWwtPmludF9zY2FuX3JlcSk7Ci0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwotCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpOworCQkJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZm1nZC0+c3NpZF9sZW47CisKKwkJCWlmIChpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgJmxvY2FsLT5pbnRfc2Nhbl9yZXEpKQorCQkJCWllZWU4MDIxMV9zY2FuX2ZhaWxlZChsb2NhbCk7CisKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CisJCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCk7CiAJCX0gZWxzZSB7Ci0JCQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCQlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CiAJCX0KIAl9CiAJcmV0dXJuIC0xOwpAQCAtMjQ5OCw5ICsxNzM4LDkgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5zdGEud29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lm1nZC53b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQpAQCAtMjUwOSw2MCArMTc0OSw2MCBAQAogCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQogCQlyZXR1cm47CiAKLQlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybjsKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZzdGEtPnNrYl9xdWV1ZSkpKQorCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmbWdkLT5za2JfcXVldWUpKSkKIAkJaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfbWdtdChzZGF0YSwgc2tiKTsKIAotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSAmJgotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSAmJgotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSAmJgotCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KSkgewotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgbG9jYWwtPnNjYW5fcmVxKTsKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUgJiYKKwkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgJiYKKwkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgJiYKKwkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCkpIHsKKwkJLyoKKwkJICogVGhlIGNhbGwgdG8gaWVlZTgwMjExX3N0YXJ0X3NjYW4gY2FuIGZhaWwgYnV0IGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4KKwkJICogKHdoaWNoIHF1ZXVlZCBpZWVlODAyMTFfc3RhX3dvcmspIGRpZCBub3QgcmV0dXJuIGFuIGVycm9yLiBUaHVzLCBjYWxsCisJCSAqIGllZWU4MDIxMV9zY2FuX2ZhaWxlZCBoZXJlIGlmIGllZWU4MDIxMV9zdGFydF9zY2FuIGZhaWxzIGluIG9yZGVyIHRvCisJCSAqIG5vdGlmeSB0aGUgc2NhbiByZXF1ZXN0ZXIuCisJCSAqLworCQlpZiAoaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIGxvY2FsLT5zY2FuX3JlcSkpCisJCQlpZWVlODAyMTFfc2Nhbl9mYWlsZWQobG9jYWwpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpKSB7Ci0JCWlmIChpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHNkYXRhLCBpZnN0YSkpCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZtZ2QtPnJlcXVlc3QpKSB7CisJCWlmIChpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHNkYXRhKSkKIAkJCXJldHVybjsKLQkJY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQl9IGVsc2UgaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpKQorCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOworCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCkpCiAJCXJldHVybjsKIAotCXN3aXRjaCAoaWZzdGEtPnN0YXRlKSB7CisJc3dpdGNoIChpZm1nZC0+c3RhdGUpIHsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDoKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOgotCQlpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU6Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURToKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRDoKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0g6Ci0JCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEOgotCQlpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwogCQlicmVhazsKIAl9CiAKLQlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEsIGlmc3RhKSkgeworCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggYW5kICIKIAkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gZGlzYXNzb2NpYXRlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKIAotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlLCB0cnVlLAogCQkJCQlXTEFOX1JFQVNPTl9VTlNQRUNJRklFRCk7CiAJfQogfQpAQCAtMjU3MSwxNTUgKzE4MTEsMTA2IEBACiB7CiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAotCQkJICAgJnNkYXRhLT51LnN0YS53b3JrKTsKKwkJCSAgICZzZGF0YS0+dS5tZ2Qud29yayk7CiB9CiAKIC8qIGludGVyZmFjZSBzZXR1cCAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCUlOSVRfV09SSygmaWZzdGEtPndvcmssIGllZWU4MDIxMV9zdGFfd29yayk7Ci0JSU5JVF9XT1JLKCZpZnN0YS0+Y2hzd2l0Y2hfd29yaywgaWVlZTgwMjExX2Noc3dpdGNoX3dvcmspOwotCXNldHVwX3RpbWVyKCZpZnN0YS0+dGltZXIsIGllZWU4MDIxMV9zdGFfdGltZXIsCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCUlOSVRfV09SSygmaWZtZ2QtPndvcmssIGllZWU4MDIxMV9zdGFfd29yayk7CisJSU5JVF9XT1JLKCZpZm1nZC0+Y2hzd2l0Y2hfd29yaywgaWVlZTgwMjExX2Noc3dpdGNoX3dvcmspOworCXNldHVwX3RpbWVyKCZpZm1nZC0+dGltZXIsIGllZWU4MDIxMV9zdGFfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwotCXNldHVwX3RpbWVyKCZpZnN0YS0+Y2hzd2l0Y2hfdGltZXIsIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lciwKKwlzZXR1cF90aW1lcigmaWZtZ2QtPmNoc3dpdGNoX3RpbWVyLCBpZWVlODAyMTFfY2hzd2l0Y2hfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmc3RhLT5za2JfcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmbWdkLT5za2JfcXVldWUpOwogCi0JaWZzdGEtPmNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKLQlpZnN0YS0+YXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX09QRU4gfAorCWlmbWdkLT5jYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisJaWZtZ2QtPmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIHwKIAkJSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVk7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MgfAorCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKIAkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CiAJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAlpZiAoaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmc2RhdGEtPmxvY2FsLT5odykgPj0gNCkKLQkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQ7Ci19Ci0KLS8qCi0gKiBBZGQgYSBuZXcgSUJTUyBzdGF0aW9uLCB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4sCi0gKiBpbiBJQlNTIG1vZGUsIHJlY2VpdmluZyBhIGZyYW1lIGZyb20gYSB5ZXQtdW5rbm93biBzdGF0aW9uLCBoZW5jZQotICogbXVzdCBiZSBjYWxsYWJsZSBpbiBhdG9taWMgY29udGV4dC4KLSAqLwotc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKLQotCS8qIFRPRE86IENvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5IGFuZAotCSAqIGFsbG93IG5ldyBvbmUgdG8gYmUgYWRkZWQuICovCi0JaWYgKGxvY2FsLT5udW1fc3RhID49IElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUykgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIHJvb20gZm9yIGEgbmV3IElCU1MgU1RBICIKLQkJCSAgICAgICAiZW50cnkgJXBNXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBhZGRyKTsKLQkJfQotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQpKQotCQlyZXR1cm4gTlVMTDsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZGRpbmcgbmV3IElCU1Mgc3RhdGlvbiAlcE0gKGRldj0lcylcbiIsCi0JICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgYWRkciwgc2RhdGEtPmRldi0+bmFtZSk7Ci0jZW5kaWYKLQotCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7Ci0KLQkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KLQlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8Ci0JCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKLQotCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKLQotCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc3RhOworCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRDsKIH0KIAogLyogY29uZmlndXJhdGlvbiBob29rcyAqLwotdm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3ZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybjsKIAotCWlmICgoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQlNTSURfU0VUIHwKKwlpZiAoKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCB8CiAJCQkgICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpKSAmJgotCSAgICAoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgfAorCSAgICAoaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgfAogCQkJICAgICBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpKSkgewogCi0JCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpCi0JCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgdHJ1ZSwKKwkJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKKwkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCiAJCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CiAKLQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KTsKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwogCX0KIH0KIAotaW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCitpbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0JaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCi0JCXJldHVybiAtRUlOVkFMOworCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7Ci0JCW1lbXNldChpZnN0YS0+c3NpZCwgMCwgc2l6ZW9mKGlmc3RhLT5zc2lkKSk7Ci0JCW1lbWNweShpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKTsKLQkJaWZzdGEtPnNzaWRfbGVuID0gbGVuOwotCX0KLQotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQotCWlmIChsZW4pCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOworCWlmIChpZm1nZC0+c3NpZF9sZW4pCisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOwogCWVsc2UKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1NTSURfU0VUOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpZnN0YS0+aWJzc19qb2luX3JlcSA9IGppZmZpZXM7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSDsKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JfQorCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CiAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKKworCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmIChpZm1nZC0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7CisJCW1lbXNldChpZm1nZC0+c3NpZCwgMCwgc2l6ZW9mKGlmbWdkLT5zc2lkKSk7CisJCW1lbWNweShpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZtZ2QtPnNzaWRfbGVuID0gbGVuOworCX0KKworCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7Cit9CisKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCW1lbWNweShzc2lkLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkqbGVuID0gaWZzdGEtPnNzaWRfbGVuOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCW1lbWNweShzc2lkLCBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwkqbGVuID0gaWZtZ2QtPnNzaWRfbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0KLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKLQkJbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCQltZW1jcHkoaWZtZ2QtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KGlmc3RhLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCQltZW1zZXQoaWZtZ2QtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7CiAJfQogCiAJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKQEAgLTI3MjksNDcgKzE5MjAsNDQgQEAKIAkJfQogCX0KIAotCXJldHVybiBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwlyZXR1cm4gaWVlZTgwMjExX3N0YV9jb21taXQoc2RhdGEpOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmllLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQlrZnJlZShpZnN0YS0+ZXh0cmFfaWUpOworCWtmcmVlKGlmbWdkLT5leHRyYV9pZSk7CiAJaWYgKGxlbiA9PSAwKSB7Ci0JCWlmc3RhLT5leHRyYV9pZSA9IE5VTEw7Ci0JCWlmc3RhLT5leHRyYV9pZV9sZW4gPSAwOworCQlpZm1nZC0+ZXh0cmFfaWUgPSBOVUxMOworCQlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gMDsKIAkJcmV0dXJuIDA7CiAJfQotCWlmc3RhLT5leHRyYV9pZSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlmc3RhLT5leHRyYV9pZSkgewotCQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gMDsKKwlpZm1nZC0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZm1nZC0+ZXh0cmFfaWUpIHsKKwkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1jcHkoaWZzdGEtPmV4dHJhX2llLCBpZSwgbGVuKTsKLQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gbGVuOworCW1lbWNweShpZm1nZC0+ZXh0cmFfaWUsIGllLCBsZW4pOworCWlmbWdkLT5leHRyYV9pZV9sZW4gPSBsZW47CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRpbmcgYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAogCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb24pOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsIHJlYXNvbik7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgdHJ1ZSwgcmVhc29uKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKIAkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uKTsKQEAgLTI3NzcsMTAgKzE5NjUsMTAgQEAKIAlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSkKLQkJcmV0dXJuIC0xOworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCisJCXJldHVybiAtRU5PTElOSzsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBmYWxzZSwgdHJ1ZSwgcmVhc29uKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwgcmVhc29uKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc4OCwxNCArMTk3Niw2IEBACiB2b2lkIGllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKLQotCWlmIChzZGF0YSAmJiBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlpZiAoKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkpIHx8Ci0JCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCi0JCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSwgaWZzdGEpOwotCX0KIAogCS8qIFJlc3RhcnQgU1RBIHRpbWVycyAqLwogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTI4NDIsMyArMjAyMiwzNiBAQAogCiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgaW50IHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKKwlfX2xlMTYgZmM7CisKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybjsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChudWxsZnVuYywgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwb3dlcnNhdmUpCisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuaCBiL25ldC9tYWM4MDIxMS9yYXRlLmgKaW5kZXggOTI4ZGE2Mi4uYjkxNjRjOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuaAorKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5oCkBAIC02Miw2ICs2MiwxOCBAQAogCXJlZi0+b3BzLT5yYXRlX2luaXQocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwgcHJpdl9zdGEpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICppc3RhID0gJnN0YS0+c3RhOworCXZvaWQgKnByaXZfc3RhID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKKworCWlmIChyZWYtPm9wcy0+cmF0ZV91cGRhdGUpCisJCXJlZi0+b3BzLT5yYXRlX3VwZGF0ZShyZWYtPnByaXYsIHNiYW5kLCBpc3RhLAorCQkJCSAgICAgIHByaXZfc3RhLCBjaGFuZ2VkKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkICpyYXRlX2NvbnRyb2xfYWxsb2Nfc3RhKHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYsCiAJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDEzMjdkNDIuLjY2ZjdlY2YgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC04MzgsNyArODM4LDcgQEAKIAlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQl1OCAqYnNzaWQgPSBpZWVlODAyMTFfZ2V0X2Jzc2lkKGhkciwgcngtPnNrYi0+bGVuLAogCQkJCQkJTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCByeC0+c2RhdGEtPnUuc3RhLmJzc2lkKSA9PSAwKQorCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCByeC0+c2RhdGEtPnUuaWJzcy5ic3NpZCkgPT0gMCkKIAkJCXN0YS0+bGFzdF9yeCA9IGppZmZpZXM7CiAJfSBlbHNlCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSB8fApAQCAtMTcwMiwxMyArMTcwMiwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUuc3RhLmJzc2lkKSAhPSAwIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSAhPSAwKSB7CisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwKSB7CiAJCS8qIE5vdCBmcm9tIHRoZSBjdXJyZW50IEFQLiAqLwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHNkYXRhLT51LnN0YS5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7CisJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7CiAJCS8qIEFzc29jaWF0aW9uIGluIHByb2dyZXNzOyBpZ25vcmUgU0EgUXVlcnkgKi8KIAkJcmV0dXJuOwogCX0KQEAgLTE3MjcsNyArMTcyNyw3IEBACiAJbWVtc2V0KHJlc3AsIDAsIDI0KTsKIAltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7CiAJbWVtY3B5KHJlc3AtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShyZXNwLT5ic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KHJlc3AtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAlyZXNwLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKHJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKTsKQEAgLTE3NDUsNyArMTc0NSw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihyeC0+ZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBsZW4gPSByeC0+c2tiLT5sZW47CkBAIC0xODAzLDYgKzE4MDIsMTAgQEAKIAljYXNlIFdMQU5fQ0FURUdPUllfU1BFQ1RSVU1fTUdNVDoKIAkJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuYWN0aW9uX2NvZGUpIHsKIAkJY2FzZSBXTEFOX0FDVElPTl9TUENUX01TUl9SRVE6CiAJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwpAQCAtMTgxNSwxMiArMTgxOCwxMyBAQAogCQkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoKSkpCiAJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCQkJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pKQogCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKLQkJCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCisJCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkLAogCQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJCQkJCSAgIHNkYXRhLT51Lm1nZC5zc2lkLAorCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZF9sZW4pOwogCQkJaWYgKCFic3MpCiAJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIApAQCAtMTg3NiwxMSArMTg4MCwxNCBAQAogCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKLQlyZXR1cm4gUlhfUVVFVUVEOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMDgzLDcgKzIwOTAsNyBAQAogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWYgKCFic3NpZCkKIAkJCXJldHVybiAwOwotCQlpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkgeworCQlpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSkgewogCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQogCQkJCXJldHVybiAwOwogCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CkBAIC0yMTAxLDcgKzIxMDgsNyBAQAogCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQllbHNlIGlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQpKSB7CisJCWVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQpKSB7CiAJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCmluZGV4IGY4ODNhYjkuLjUwMzBhM2MgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmMKKysrIGIvbmV0L21hYzgwMjExL3NjYW4uYwpAQCAtNjMsMjAgKzYzLDE1IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgY2xlbjsKLQllbnVtIGNmZzgwMjExX3NpZ25hbF90eXBlIHNpZ3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FOwogCXMzMiBzaWduYWwgPSAwOwogCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSB7Ci0JCXNpZ3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQogCQlzaWduYWwgPSByeF9zdGF0dXMtPnNpZ25hbCAqIDEwMDsKLQl9IGVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKSB7Ci0JCXNpZ3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM7CisJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCiAJCXNpZ25hbCA9IChyeF9zdGF0dXMtPnNpZ25hbCAqIDEwMCkgLyBsb2NhbC0+aHcubWF4X3NpZ25hbDsKLQl9CiAKIAlic3MgPSAodm9pZCAqKWNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUobG9jYWwtPmh3LndpcGh5LCBjaGFubmVsLAotCQkJCQkJbWdtdCwgbGVuLCBzaWduYWwsIHNpZ3R5cGUsCi0JCQkJCQlHRlBfQVRPTUlDKTsKKwkJCQkJCW1nbXQsIGxlbiwgc2lnbmFsLCBHRlBfQVRPTUlDKTsKIAogCWlmICghYnNzKQogCQlyZXR1cm4gTlVMTDsKQEAgLTIwNywzNCArMjAyLDE2IEBACiAJcmV0dXJuIFJYX1FVRVVFRDsKIH0KIAotdm9pZCBpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgIGludCBwb3dlcnNhdmUpCit2b2lkIGllZWU4MDIxMV9zY2FuX2ZhaWxlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKLQlfX2xlMTYgZmM7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGxmdW5jICIKLQkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJaWYgKFdBUk5fT04oIWxvY2FsLT5zY2FuX3JlcSkpCiAJCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCi0JbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKLQlmYyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKLQkJCSBJRUVFODAyMTFfRkNUTF9UT0RTKTsKLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7Ci0JbnVsbGZ1bmMtPmZyYW1lX2NvbnRyb2wgPSBmYzsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCS8qIG5vdGlmeSBjZmc4MDIxMSBhYm91dCB0aGUgZmFpbGVkIHNjYW4gKi8KKwlpZiAobG9jYWwtPnNjYW5fcmVxICE9ICZsb2NhbC0+aW50X3NjYW5fcmVxKQorCQljZmc4MDIxMV9zY2FuX2RvbmUobG9jYWwtPnNjYW5fcmVxLCB0cnVlKTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJbG9jYWwtPnNjYW5fcmVxID0gTlVMTDsKIH0KIAogdm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYWJvcnRlZCkKQEAgLTI4MCw2ICsyNTcsOSBAQAogCW5ldGlmX2FkZHJfdW5sb2NrKGxvY2FsLT5tZGV2KTsKIAluZXRpZl90eF91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCisJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUpCisJCWxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUobG9jYWxfdG9faHcobG9jYWwpKTsKKwogCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQpAQCAtMjg3LDcgKzI2Nyw3IEBACiAKIAkJLyogVGVsbCBBUCB3ZSdyZSBiYWNrICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgeworCQkJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewogCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CiAJCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCQkJfQpAQCAtMzA1LDYgKzI4NSw3IEBACiAKICBkb25lOgogCWllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CisJaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKIAlpZWVlODAyMTFfbWVzaF9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQpOwpAQCAtMzY3LDcgKzM0OCw4IEBACiAJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoCiAJCQkJc2RhdGEsIE5VTEwsCiAJCQkJbG9jYWwtPnNjYW5fcmVxLT5zc2lkc1tpXS5zc2lkLAotCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZF9sZW4pOworCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZF9sZW4sCisJCQkJbG9jYWwtPnNjYW5fcmVxLT5pZSwgbG9jYWwtPnNjYW5fcmVxLT5pZV9sZW4pOwogCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX0NIQU5ORUxfVElNRTsKIAkJYnJlYWs7CiAJfQpAQCAtNDI4LDYgKzQxMCw4IEBACiAJfQogCiAJbG9jYWwtPnN3X3NjYW5uaW5nID0gdHJ1ZTsKKwlpZiAobG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydCkKKwkJbG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydChsb2NhbF90b19odyhsb2NhbCkpOwogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewpAQCAtNDQyLDcgKzQyNiw3IEBACiAJCQkJCSAgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiAKIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CiAJCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAJCQl9CkBAIC00NzcsNyArNDYxLDcgQEAKIAkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAogCWlmICghcmVxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUwMiw5ICs0ODYsOSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCk7CisJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKaW5kZXggNDdiYjJhZS4uNWY3YTI2MiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCisrKyBiL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYwpAQCAtODgsMTYgKzg4LDE2IEBACiB2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LnN0YS5jaHN3aXRjaF93b3JrKTsKKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUubWdkLmNoc3dpdGNoX3dvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAogCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKIAkJcmV0dXJuOwogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoc2RhdGEtPmxvY2FsLCBpZnN0YS0+YnNzaWQsCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoc2RhdGEtPmxvY2FsLCBpZm1nZC0+YnNzaWQsCiAJCQkJICAgc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmICghYnNzKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAJaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOwogZXhpdDoKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQ7CiAJaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbigmc2RhdGEtPmxvY2FsLT5odywKIAkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7CiB9CkBAIC0xMTcsOSArMTE3LDkgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CiAJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+Y2hzd2l0Y2hfd29yayk7CisJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMTI3LDE0ICsxMjcsMTQgQEAKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpuZXdfY2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlpbnQgbmV3X2ZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koc3dfZWxlbS0+bmV3X2NoX251bSk7CiAKIAkvKiBGSVhNRTogSGFuZGxlIEFESE9DIGxhdGVyICovCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm47CiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQorCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpCiAJCXJldHVybjsKIAogCWlmIChzZGF0YS0+bG9jYWwtPnN3X3NjYW5uaW5nIHx8IHNkYXRhLT5sb2NhbC0+aHdfc2Nhbm5pbmcpCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkvKiBEaXNyZWdhcmQgc3Vic2VxdWVudCBiZWFjb25zIGlmIHdlIGFyZSBhbHJlYWR5IHJ1bm5pbmcgYSB0aW1lcgogCSAgIHByb2Nlc3NpbmcgYSBDU0EgKi8KIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRCkKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQpCiAJCXJldHVybjsKIAogCW5ld19jaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChzZGF0YS0+bG9jYWwtPmh3LndpcGh5LCBuZXdfZnJlcSk7CkBAIC0xNTMsMTIgKzE1MywxMiBAQAogCXNkYXRhLT5sb2NhbC0+Y3NhX2NoYW5uZWwgPSBuZXdfY2g7CiAKIAlpZiAoc3dfZWxlbS0+Y291bnQgPD0gMSkgewotCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPmNoc3dpdGNoX3dvcmspOworCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPmNoc3dpdGNoX3dvcmspOwogCX0gZWxzZSB7CiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCiAJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKLQkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOwotCQltb2RfdGltZXIoJmlmc3RhLT5jaHN3aXRjaF90aW1lciwKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCQltb2RfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwKIAkJCSAgamlmZmllcyArCiAJCQkgIG1zZWNzX3RvX2ppZmZpZXMoc3dfZWxlbS0+Y291bnQgKgogCQkJCQkgICBic3MtPmNic3MuYmVhY29uX2ludGVydmFsKSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCmluZGV4IDYzNGY2NWMuLjRiYTNjNTQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC0yMDIsNiArMjAyLDE4IEBACiAJCS8qIE1ha2Ugc3VyZSB0aW1lciB3b24ndCBmcmVlIHRoZSB0aWRfcnggc3RydWN0LCBzZWUgYmVsb3cgKi8KIAkJaWYgKHRpZF9yeCkKIAkJCXRpZF9yeC0+c2h1dGRvd24gPSB0cnVlOworCisJCS8qCisJCSAqIFRoZSBzdG9wIGNhbGxiYWNrIGNhbm5vdCBmaW5kIHRoaXMgc3RhdGlvbiBhbnkgbW9yZSwgYnV0CisJCSAqIGl0IGRpZG4ndCBjb21wbGV0ZSBpdHMgd29yayAtLSBzdGFydCB0aGUgcXVldWUgaWYgbmVjZXNzYXJ5CisJCSAqLworCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLICYmCisJCSAgICBzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldICYgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyAmJgorCQkgICAgbG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbigmbG9jYWwtPmh3LAorCQkJCWxvY2FsLT5ody5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW2ldLAorCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAKIAkJLyoKQEAgLTI3NSw4ICsyODcsNyBAQAogCQkgKiBlbmFibGUgc2Vzc2lvbl90aW1lcidzIGRhdGEgZGlmZmVyZW50aWF0aW9uLiByZWZlciB0bwogCQkgKiBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCBmb3IgdXNlYWdlICovCiAJCXN0YS0+dGltZXJfdG9fdGlkW2ldID0gaTsKLQkJLyogdGlkIHRvIHR4IHF1ZXVlOiBpbml0aWFsaXplIGFjY29yZGluZyB0byBIVyAoMCBpcyB2YWxpZCkgKi8KLQkJc3RhLT50aWRfdG9fdHhfcVtpXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOworCQlzdGEtPnRpZF90b190eF9xW2ldID0gLTE7CiAJCS8qIHJ4ICovCiAJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0gPSBIVF9BR0dfU1RBVEVfSURMRTsKIAkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCmluZGV4IGQ5NjUzMjMuLjFmNDU1NzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCkBAIC05MCw2ICs5MCw3IEBACiAgKiBAYnVmX3NpemU6IGJ1ZmZlciBzaXplIGZvciBpbmNvbWluZyBBLU1QRFVzCiAgKiBAdGltZW91dDogcmVzZXQgdGltZXIgdmFsdWUgKGluIFRVcykuCiAgKiBAZGlhbG9nX3Rva2VuOiBkaWFsb2cgdG9rZW4gZm9yIGFnZ3JlZ2F0aW9uIHNlc3Npb24KKyAqIEBzaHV0ZG93bjogdGhpcyBzZXNzaW9uIGlzIGJlaW5nIHNodXQgZG93biBkdWUgdG8gU1RBIHJlbW92YWwKICAqLwogc3RydWN0IHRpZF9hbXBkdV9yeCB7CiAJc3RydWN0IHNrX2J1ZmYgKipyZW9yZGVyX2J1ZjsKQEAgLTIwMCw3ICsyMDEsNyBAQAogICogQHRpZF9zZXE6IHBlci1USUQgc2VxdWVuY2UgbnVtYmVycyBmb3Igc2VuZGluZyB0byB0aGlzIFNUQQogICogQGFtcGR1X21sbWU6IEEtTVBEVSBzdGF0ZSBtYWNoaW5lIHN0YXRlCiAgKiBAdGltZXJfdG9fdGlkOiBpZGVudGl0eSBtYXBwaW5nIHRvIElEIHRpbWVycwotICogQHRpZF90b190eF9xOiBtYXAgdGlkIHRvIHR4IHF1ZXVlCisgKiBAdGlkX3RvX3R4X3E6IG1hcCB0aWQgdG8gdHggcXVldWUgKGludmFsaWQgPT0gbmVnYXRpdmUgdmFsdWVzKQogICogQGxsaWQ6IExvY2FsIGxpbmsgSUQKICAqIEBwbGlkOiBQZWVyIGxpbmsgSUQKICAqIEByZWFzb246IENhbmNlbCByZWFzb24gb24gUExJTktfSE9MRElORyBzdGF0ZQpAQCAtMjc1LDcgKzI3Niw3IEBACiAJICovCiAJc3RydWN0IHN0YV9hbXBkdV9tbG1lIGFtcGR1X21sbWU7CiAJdTggdGltZXJfdG9fdGlkW1NUQV9USURfTlVNXTsKLQl1OCB0aWRfdG9fdHhfcVtTVEFfVElEX05VTV07CisJczggdGlkX3RvX3R4X3FbU1RBX1RJRF9OVU1dOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAkvKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCAzMzkyNjgzLi40NTcyMzhhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtNzg0LDYgKzc4NCw4IEBACiAJCXNrYl9jb3B5X3F1ZXVlX21hcHBpbmcoZnJhZywgZmlyc3QpOwogCiAJCWZyYWctPmRvX25vdF9lbmNyeXB0ID0gZmlyc3QtPmRvX25vdF9lbmNyeXB0OworCQlmcmFnLT5kZXYgPSBmaXJzdC0+ZGV2OworCQlmcmFnLT5paWYgPSBmaXJzdC0+aWlmOwogCiAJCXBvcyArPSBjb3B5bGVuOwogCQlsZWZ0IC09IGNvcHlsZW47CkBAIC04NzYsNyArODc4LDYgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLQogLyogYWN0dWFsIHRyYW5zbWl0IHBhdGggKi8KIAogLyoKQEAgLTEwMTYsMTIgKzEwMTcsMjAgQEAKIAl0eC0+c3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKIAogCWlmICh0eC0+c3RhICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXRpZCA9ICpxYyAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0eC0+c3RhLT5sb2NrLCBmbGFncyk7CiAJCXN0YXRlID0gJnR4LT5zdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKQorCQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewogCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9BTVBEVTsKKwkJCWlmIChsb2NhbC0+aHcuYW1wZHVfcXVldWVzKQorCQkJCXNrYl9zZXRfcXVldWVfbWFwcGluZygKKwkJCQkJc2tiLCB0eC0+bG9jYWwtPmh3LnF1ZXVlcyArCisJCQkJCSAgICAgdHgtPnN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHgtPnN0YS0+bG9jaywgZmxhZ3MpOwogCX0KIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgewpAQCAtMTA4NSw3ICsxMDk0LDggQEAKIAlpbnQgcmV0LCBpOwogCiAJaWYgKHNrYikgewotCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgc2tiKSkKKwkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKCZsb2NhbC0+aHcsCisJCQkJCSAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSkpCiAJCQlyZXR1cm4gSUVFRTgwMjExX1RYX1BFTkRJTkc7CiAKIAkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLCBza2IpOwpAQCAtMTEwMSw4ICsxMTExLDggQEAKIAkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5leHRyYV9mcmFnW2ldKTsKIAkJCWluZm8tPmZsYWdzICY9IH4oSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUIHwKIAkJCQkJIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpOwotCQkJaWYgKG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsCi0JCQkJCQkgICB0eC0+ZXh0cmFfZnJhZ1tpXSkpCisJCQlpZiAoaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoJmxvY2FsLT5odywKKwkJCQkJc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHR4LT5leHRyYV9mcmFnW2ldKSkpCiAJCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOOwogCiAJCQlyZXQgPSBsb2NhbC0+b3BzLT50eChsb2NhbF90b19odyhsb2NhbCksCkBAIC0xNjI1LDcgKzE2MzUsNyBAQAogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAJCS8qIEJTU0lEIFNBIERBICovCi0JCW1lbWNweShoZHIuYWRkcjEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLmFkZHIxLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMiwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMywgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCWhkcmxlbiA9IDI0OwpAQCAtMTYzNCw3ICsxNjQ0LDcgQEAKIAkJLyogREEgU0EgQlNTSUQgKi8KIAkJbWVtY3B5KGhkci5hZGRyMSwgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjIsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7Ci0JCW1lbWNweShoZHIuYWRkcjMsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLmFkZHIzLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTik7CiAJCWhkcmxlbiA9IDI0OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTkyMCw3ICsxOTMwLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmFwID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSBOVUxMOwogCXN0cnVjdCBiZWFjb25fZGF0YSAqYmVhY29uOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7CkBAIC0xOTcyLDEzICsxOTgxLDEzIEBACiAJCX0gZWxzZQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQkJaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCi0JCWlmICghaWZzdGEtPnByb2JlX3Jlc3ApCisJCWlmICghaWZpYnNzLT5wcm9iZV9yZXNwKQogCQkJZ290byBvdXQ7CiAKLQkJc2tiID0gc2tiX2NvcHkoaWZzdGEtPnByb2JlX3Jlc3AsIEdGUF9BVE9NSUMpOworCQlza2IgPSBza2JfY29weShpZmlic3MtPnByb2JlX3Jlc3AsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXNrYikKIAkJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCA3M2M3ZDczLi5lMDQzMWExIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTM0NCwxNSArMzQ0LDM2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIGFtcGR1IHF1ZXVlcyAqLwotCWlmIChxdWV1ZSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoaHcpKSB7Ci0JCV9fY2xlYXJfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKLQotCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gIT0gMCkKLQkJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLworCWlmIChxdWV1ZSA+PSBody0+cXVldWVzKSB7CisJCWlmIChsb2NhbC0+YW1wZHVfYWNfcXVldWVbcXVldWUgLSBody0+cXVldWVzXSA8IDApCiAJCQlyZXR1cm47CisKKwkJLyoKKwkJICogZm9yIHZpcnR1YWwgYWdncmVnYXRpb24gcXVldWVzLCB3ZSBuZWVkIHRvIHJlZmNvdW50IHRoZQorCQkgKiBpbnRlcm5hbCBtYWM4MDIxMSBkaXNhYmxlIChtdWx0aXBsZSB0aW1lcyEpLCBrZWVwIHRyYWNrIG9mCisJCSAqIGRyaXZlciBkaXNhYmxlIF9hbmRfIG1ha2Ugc3VyZSB0aGUgcmVndWxhciBxdWV1ZSBpcworCQkgKiBhY3R1YWxseSBlbmFibGVkLgorCQkgKi8KKwkJaWYgKHJlYXNvbiA9PSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pCisJCQlsb2NhbC0+YW1kcHVfYWNfc3RvcF9yZWZjbnRbcXVldWUgLSBody0+cXVldWVzXS0tOworCQllbHNlCisJCQlfX2NsZWFyX2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisKKwkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdIHx8CisJCSAgICBsb2NhbC0+YW1kcHVfYWNfc3RvcF9yZWZjbnRbcXVldWUgLSBody0+cXVldWVzXSkKKwkJCXJldHVybjsKKworCQkvKiBub3cgZ28gb24gdG8gdHJlYXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVndWxhciBxdWV1ZSAqLworCQlxdWV1ZSA9IGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdOworCQlyZWFzb24gPSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT047CiAJfQogCisJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOworCisJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdICE9IDApCisJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLworCQlyZXR1cm47CisKIAlpZiAodGVzdF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpIHsKIAkJc2V0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nX3J1bik7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwpAQCAtMzYxLDggKzM4Miw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKLQkJCQkJICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pCit2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorCQkJCSAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzg0LDE1ICs0MDUsMzMgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAotCS8qIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgYW1wZHUgcXVldWVzICovCi0JaWYgKHF1ZXVlIDwgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcyhodykpCi0JCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisJaWYgKHF1ZXVlID49IGh3LT5xdWV1ZXMpIHsKKwkJaWYgKGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdIDwgMCkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBmb3IgdmlydHVhbCBhZ2dyZWdhdGlvbiBxdWV1ZXMsIHdlIG5lZWQgdG8gcmVmY291bnQgdGhlCisJCSAqIGludGVybmFsIG1hYzgwMjExIGRpc2FibGUgKG11bHRpcGxlIHRpbWVzISksIGtlZXAgdHJhY2sgb2YKKwkJICogZHJpdmVyIGRpc2FibGUgX2FuZF8gbWFrZSBzdXJlIHRoZSByZWd1bGFyIHF1ZXVlIGlzCisJCSAqIGFjdHVhbGx5IGVuYWJsZWQuCisJCSAqLworCQlpZiAocmVhc29uID09IElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTikKKwkJCWxvY2FsLT5hbWRwdV9hY19zdG9wX3JlZmNudFtxdWV1ZSAtIGh3LT5xdWV1ZXNdKys7CisJCWVsc2UKKwkJCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisKKwkJLyogbm93IGdvIG9uIHRvIHRyZWF0IHRoZSBjb3JyZXNwb25kaW5nIHJlZ3VsYXIgcXVldWUgKi8KKwkJcXVldWUgPSBsb2NhbC0+YW1wZHVfYWNfcXVldWVbcXVldWUgLSBody0+cXVldWVzXTsKKwkJcmVhc29uID0gSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OOworCX0KKworCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CiAKIAluZXRpZl9zdG9wX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAotCQkJCQkgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbikKK3ZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUsCisJCQkJICAgIGVudW0gcXVldWVfc3RvcF9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MTgsNyArNDU3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBody0+cXVldWVzOyBpKyspCiAJCV9faWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIGksIHJlYXNvbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwpAQCAtNDM0LDYgKzQ3MywxNiBAQAogaW50IGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChxdWV1ZSA+PSBody0+cXVldWVzKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCQlxdWV1ZSA9IGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCQlpZiAocXVldWUgPCAwKQorCQkJcmV0dXJuIHRydWU7CisJfQorCiAJcmV0dXJuIF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCk7CkBAIC03MDEsNiArNzUwLDI3IEBACiAJCWxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLCBpLCAmcXBhcmFtKTsKIH0KIAordm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgY29uc3QgdTggKnN1cHBfcmF0ZXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGksIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMDsKKworCS8qIGNmLiBJRUVFIDgwMi4xMSA5LjIuMTIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykKKwkJaWYgKChzdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQorCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOworCisJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKKwkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisJZWxzZQorCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisKKwlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKK30KKwogdm9pZCBpZWVlODAyMTFfdHhfc2tiKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICBpbnQgZW5jcnlwdCkKIHsKQEAgLTc2NywzICs4MzcsMTYxIEBACiAJCQltYW5kYXRvcnlfcmF0ZXMgfD0gQklUKGkpOwogCXJldHVybiBtYW5kYXRvcnlfcmF0ZXM7CiB9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKKwkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCisJCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwljb25zdCB1OCAqaWVfYXV0aCA9IE5VTEw7CisJaW50IGllX2F1dGhfbGVuID0gMDsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZV9hdXRoX2xlbiA9IHNkYXRhLT51Lm1nZC5pZV9hdXRoX2xlbjsKKwkJaWVfYXV0aCA9IHNkYXRhLT51Lm1nZC5pZV9hdXRoOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKKwkJCSAgICBzaXplb2YoKm1nbXQpICsgNiArIGV4dHJhX2xlbiArIGllX2F1dGhfbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQgKyA2KTsKKwltZW1zZXQobWdtdCwgMCwgMjQgKyA2KTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKKwlpZiAoZW5jcnlwdCkKKwkJbWdtdC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCW1lbWNweShtZ210LT5kYSwgYnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCW1nbXQtPnUuYXV0aC5hdXRoX2FsZyA9IGNwdV90b19sZTE2KGF1dGhfYWxnKTsKKwltZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHRyYW5zYWN0aW9uKTsKKwltZ210LT51LmF1dGguc3RhdHVzX2NvZGUgPSBjcHVfdG9fbGUxNigwKTsKKwlpZiAoZXh0cmEpCisJCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7CisJaWYgKGllX2F1dGgpCisJCW1lbWNweShza2JfcHV0KHNrYiwgaWVfYXV0aF9sZW4pLCBpZV9hdXRoLCBpZV9hdXRoX2xlbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKKwkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICB1OCAqaWUsIHNpemVfdCBpZV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvcywgKnN1cHBfcmF0ZXMsICplc3VwcF9yYXRlcyA9IE5VTEwsICpleHRyYV9wcmVxX2llID0gTlVMTDsKKwlpbnQgaSwgZXh0cmFfcHJlcV9pZV9sZW4gPSAwOworCisJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWV4dHJhX3ByZXFfaWVfbGVuID0gc2RhdGEtPnUubWdkLmllX3Byb2JlcmVxX2xlbjsKKwkJZXh0cmFfcHJlcV9pZSA9IHNkYXRhLT51Lm1nZC5pZV9wcm9iZXJlcTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpICsgMjAwICsKKwkJCSAgICBpZV9sZW4gKyBleHRyYV9wcmVxX2llX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCisJCSAgICAgICAicmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQobWdtdCwgMCwgMjQpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChkc3QpIHsKKwkJbWVtY3B5KG1nbXQtPmRhLCBkc3QsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkc3QsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwkJbWVtc2V0KG1nbXQtPmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisJfQorCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgc3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gc3NpZF9sZW47CisJbWVtY3B5KHBvcywgc3NpZCwgc3NpZF9sZW4pOworCisJc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAyKTsKKwlzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlzdXBwX3JhdGVzWzFdID0gMDsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCQlpZiAoZXN1cHBfcmF0ZXMpIHsKKwkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKKwkJCWVzdXBwX3JhdGVzWzFdKys7CisJCX0gZWxzZSBpZiAoc3VwcF9yYXRlc1sxXSA9PSA4KSB7CisJCQllc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAzKTsKKwkJCWVzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCQllc3VwcF9yYXRlc1sxXSA9IDE7CisJCQlwb3MgPSAmZXN1cHBfcmF0ZXNbMl07CisJCX0gZWxzZSB7CisJCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7CisJCQlzdXBwX3JhdGVzWzFdKys7CisJCX0KKwkJKnBvcyA9IHJhdGUtPmJpdHJhdGUgLyA1OworCX0KKworCWlmIChpZSkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBpZV9sZW4pLCBpZSwgaWVfbGVuKTsKKwlpZiAoZXh0cmFfcHJlcV9pZSkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBleHRyYV9wcmVxX2llX2xlbiksIGV4dHJhX3ByZXFfaWUsCisJCSAgICAgICBleHRyYV9wcmVxX2llX2xlbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCit1MzIgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAorCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOworCXNpemVfdCBudW1fcmF0ZXM7CisJdTMyIHN1cHBfcmF0ZXM7CisJaW50IGksIGo7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOworCisJaWYgKCFzYmFuZCkgeworCQlXQVJOX09OKDEpOworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisJfQorCisJYml0cmF0ZXMgPSBzYmFuZC0+Yml0cmF0ZXM7CisJbnVtX3JhdGVzID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJc3VwcF9yYXRlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbiArCisJCSAgICAgZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCXU4IHJhdGUgPSAwOworCQlpbnQgb3duX3JhdGU7CisJCWlmIChpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuKQorCQkJcmF0ZSA9IGVsZW1zLT5zdXBwX3JhdGVzW2ldOworCQllbHNlIGlmIChlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMpCisJCQlyYXRlID0gZWxlbXMtPmV4dF9zdXBwX3JhdGVzCisJCQkJW2kgLSBlbGVtcy0+c3VwcF9yYXRlc19sZW5dOworCQlvd25fcmF0ZSA9IDUgKiAocmF0ZSAmIDB4N2YpOworCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JhdGVzOyBqKyspCisJCQlpZiAoYml0cmF0ZXNbal0uYml0cmF0ZSA9PSBvd25fcmF0ZSkKKwkJCQlzdXBwX3JhdGVzIHw9IEJJVChqKTsKKwl9CisJcmV0dXJuIHN1cHBfcmF0ZXM7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2V4dC5jIGIvbmV0L21hYzgwMjExL3dleHQuYwppbmRleCAyYjAyM2RjLi45MzVjNjNlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2V4dC5jCisrKyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKQEAgLTEzMiwxMzkgKzEzMiwzNyBAQAogCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJldCA9IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHNkYXRhLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSwgJnNkYXRhLT51LnN0YSk7CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAotc3RhdGljIHU4IGllZWU4MDIxMV9nZXRfd3N0YXRzX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXU4IHdzdGF0c19mbGFncyA9IDA7Ci0KLQl3c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3LmZsYWdzICYgKElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDIHwKLQkJCQkJICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pID8KLQkJCQlJV19RVUFMX1FVQUxfVVBEQVRFRCA6IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCXdzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNID8KLQkJCQlJV19RVUFMX05PSVNFX1VQREFURUQgOiBJV19RVUFMX05PSVNFX0lOVkFMSUQ7Ci0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQotCQl3c3RhdHNfZmxhZ3MgfD0gSVdfUVVBTF9EQk07Ci0KLQlyZXR1cm4gd3N0YXRzX2ZsYWdzOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBjID0gMDsKLQotCWRhdGEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjE7Ci0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9ERUZBVUxUX0tFWVM7Ci0KLQkvKiBjZmc4MDIxMSByZXF1aXJlcyB0aGlzLCBhbmQgZW5mb3JjZXMgMC4uMTAwICovCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKQotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAxMDA7Ci0JZWxzZSBpZiAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKLQotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKLQotCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwotCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gaWVlZTgwMjExX2dldF93c3RhdHNfZmxhZ3MobG9jYWwpOwotCi0JcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKLQkvKiBub3QgYWx3YXlzIHRydWUgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcgKi8KLQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSByYW5nZS0+bWF4X3F1YWwubGV2ZWwgLyAyOwotCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IHJhbmdlLT5tYXhfcXVhbC5ub2lzZSAvIDI7Ci0JcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSBpZWVlODAyMTFfZ2V0X3dzdGF0c19mbGFncyhsb2NhbCk7Ci0KLQlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKLQkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKLQotCi0JZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKLQkJaW50IGk7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCi0JCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQotCQlpZiAoIXNiYW5kKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzICYmIGMgPCBJV19NQVhfRlJFUVVFTkNJRVM7IGkrKykgewotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKLQotCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKLQkJCQlyYW5nZS0+ZnJlcVtjXS5pID0KLQkJCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAotCQkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQkJCXJhbmdlLT5mcmVxW2NdLm0gPSBjaGFuLT5jZW50ZXJfZnJlcTsKLQkJCQlyYW5nZS0+ZnJlcVtjXS5lID0gNjsKLQkJCQljKys7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmFuZ2UtPm51bV9jaGFubmVscyA9IGM7Ci0JcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjOwotCi0JSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOwotCi0JcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJc2RhdGEtPnUuaWJzcy5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAKIAkvKiBmcmVxLT5lID09IDA6IGZyZXEtPm0gPSBjaGFubmVsOyBvdGhlcndpc2UgZnJlcSA9IG0gKiAxMF5lICovCiAJaWYgKGZyZXEtPmUgPT0gMCkgewogCQlpZiAoZnJlcS0+bSA8IDApIHsKLQkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0KKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCQkJc2RhdGEtPnUuaWJzcy5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworCQkJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9CiAJCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UKQEAgLTMwMSwzMiArMTk5LDM1IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc2l6ZV90IGxlbiA9IGRhdGEtPmxlbmd0aDsKKwlpbnQgcmV0OwogCiAJLyogaXdjb25maWcgdXNlcyBudWwgdGVybWluYXRpb24gaW4gU1NJRC4uICovCiAJaWYgKGxlbiA+IDAgJiYgc3NpZFtsZW4gLSAxXSA9PSAnXDAnKQogCQlsZW4tLTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWludCByZXQ7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpIHsKIAkJCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KHNkYXRhLT51LnN0YS5zc2lkLCBzc2lkLCBsZW4pOwotCQkJc2RhdGEtPnUuc3RhLnNzaWRfbGVuID0gbGVuOworCQkJbWVtY3B5KHNkYXRhLT51Lm1nZC5zc2lkLCBzc2lkLCBsZW4pOworCQkJc2RhdGEtPnUubWdkLnNzaWRfbGVuID0gbGVuOwogCQkJcmV0dXJuIDA7CiAJCX0KKwogCQlpZiAoZGF0YS0+ZmxhZ3MpCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwogCQllbHNlCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwogCQlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBzc2lkLCBsZW4pOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSwgJnNkYXRhLT51LnN0YSk7CisKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwotCX0KKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3NldF9zc2lkKHNkYXRhLCBzc2lkLCBsZW4pOwogCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpAQCAtMzQwLDggKzI0MSw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmVzID0gaWVlZTgwMjExX3N0YV9nZXRfc3NpZChzZGF0YSwgc3NpZCwgJmxlbik7CiAJCWlmIChyZXMgPT0gMCkgewogCQkJZGF0YS0+bGVuZ3RoID0gbGVuOwpAQCAtMzQ5LDYgKzI0OSwxNCBAQAogCQl9IGVsc2UKIAkJCWRhdGEtPmZsYWdzID0gMDsKIAkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpbnQgcmVzID0gaWVlZTgwMjExX2lic3NfZ2V0X3NzaWQoc2RhdGEsIHNzaWQsICZsZW4pOworCQlpZiAocmVzID09IDApIHsKKwkJCWRhdGEtPmxlbmd0aCA9IGxlbjsKKwkJCWRhdGEtPmZsYWdzID0gMTsKKwkJfSBlbHNlCisJCQlkYXRhLT5mbGFncyA9IDA7CisJCXJldHVybiByZXM7CiAJfQogCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMzYyLDI2ICsyNzAsMzUgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWludCByZXQ7CiAJCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpIHsKLQkJCW1lbWNweShzZGF0YS0+dS5zdGEuYnNzaWQsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSwKKwkJCW1lbWNweShzZGF0YS0+dS5tZ2QuYnNzaWQsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSwKIAkJCSAgICAgICBFVEhfQUxFTik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CiAJCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKIAkJZWxzZQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwogCQlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEsICZzZGF0YS0+dS5zdGEpOworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQorCQkJc2RhdGEtPnUuaWJzcy5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTCB8CisJCQkJCSAgICAgICBJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworCQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQorCQkJc2RhdGEtPnUuaWJzcy5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTDsKKwkJZWxzZQorCQkJc2RhdGEtPnUuaWJzcy5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUw7CisKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3NldF9ic3NpZChzZGF0YSwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKTsKIAl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9XRFMpIHsKIAkJLyoKIAkJICogSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHVwZGF0ZSB0aGUgV0RTIHBlZXIgYWRkcmVzcwpAQCAtNDEwLDE3ICszMjcsMjAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWlmIChzZGF0YS0+dS5zdGEuc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQgfHwKLQkJICAgIHNkYXRhLT51LnN0YS5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgewogCQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgeworCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwkJfSBlbHNlCiAJCQltZW1zZXQoJmFwX2FkZHItPnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKLQkJCXJldHVybiAwOwotCQl9CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChzZGF0YS0+dS5pYnNzLnN0YXRlID09IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEKSB7CisJCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwkJfSBlbHNlCisJCQltZW1zZXQoJmFwX2FkZHItPnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKKwkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfV0RTKSB7CiAJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS53ZHMucmVtb3RlX2FkZHIsIEVUSF9BTEVOKTsKQEAgLTQ4Niw3ICs0MDYsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5zdGEuYnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKIAogCWlmIChzdGEgJiYgIShzdGEtPmxhc3RfdHhfcmF0ZS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQogCQlyYXRlLT52YWx1ZSA9IHNiYW5kLT5iaXRyYXRlc1tzdGEtPmxhc3RfdHhfcmF0ZS5pZHhdLmJpdHJhdGU7CkBAIC02ODcsOCArNjA3LDcgQEAKIAlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKSBleHRyYTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmICghKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKG1sbWUtPmNtZCkgewpAQCAtNzg0LDggKzcwMyw3IEBACiAJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlzd2l0Y2ggKGlmc3RhLT5hdXRoX2FsZykgeworCQlzd2l0Y2ggKHNkYXRhLT51Lm1nZC5hdXRoX2FsZykgewogCQljYXNlIFdMQU5fQVVUSF9PUEVOOgogCQljYXNlIFdMQU5fQVVUSF9MRUFQOgogCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKQEAgLTg0OSw3ICs3NjcsNyBAQAogCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAogCQkJCQkgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUKTsKIAotCWlmICghKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCisJaWYgKCEoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSkKIAkJcmV0dXJuIHJldDsKIAogCWlmIChjb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwICYmCkBAIC05MDgsMTAgKzgyNiwxMCBAQAogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJCWlmIChkYXRhLT52YWx1ZSAmIChJV19BVVRIX0NJUEhFUl9XRVA0MCB8CiAJCQkgICAgSVdfQVVUSF9DSVBIRVJfV0VQMTA0IHwgSVdfQVVUSF9DSVBIRVJfVEtJUCkpCi0JCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9CisJCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9CiAJCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKIAkJCWVsc2UKLQkJCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0KKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0KIAkJCQkJfklFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKIAkJfQogCQlicmVhazsKQEAgLTkyMiwyMSArODQwLDIwIEBACiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJCXJldCA9IC1FSU5WQUw7CiAJCWVsc2UgewotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CiAJCQkvKgogCQkJICogUHJpdmFjeSBpbnZva2VkIGJ5IHdwYV9zdXBwbGljYW50LCBzdG9yZSB0aGUKIAkJCSAqIHZhbHVlIGFuZCBhbGxvdyBhc3NvY2lhdGluZyB0byBhIHByb3RlY3RlZAogCQkJICogbmV0d29yayB3aXRob3V0IGhhdmluZyBhIGtleSB1cCBmcm9udC4KIAkJCSAqLwogCQkJaWYgKGRhdGEtPnZhbHVlKQotCQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQogCQkJCQlJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKIAkJfQogCQlicmVhazsKIAljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJc2RhdGEtPnUuc3RhLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gZGF0YS0+dmFsdWU7CiAJCWVsc2UKIAkJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKQEAgLTk0NSwxNyArODYyLDE2IEBACiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQkJc3dpdGNoIChkYXRhLT52YWx1ZSkgewogCQkJY2FzZSBJV19BVVRIX01GUF9ESVNBQkxFRDoKLQkJCQlzZGF0YS0+dS5zdGEubWZwID0gSUVFRTgwMjExX01GUF9ESVNBQkxFRDsKKwkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9ESVNBQkxFRDsKIAkJCQlicmVhazsKIAkJCWNhc2UgSVdfQVVUSF9NRlBfT1BUSU9OQUw6Ci0JCQkJc2RhdGEtPnUuc3RhLm1mcCA9IElFRUU4MDIxMV9NRlBfT1BUSU9OQUw7CisJCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfT1BUSU9OQUw7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElXX0FVVEhfTUZQX1JFUVVJUkVEOgotCQkJCXNkYXRhLT51LnN0YS5tZnAgPSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEOworCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXQgPSAtRUlOVkFMOwpAQCAtOTgwLDkgKzg5Niw5IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51LnN0YS5ic3NpZCk7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCk7CisKIAlpZiAoIXN0YSkgewogCQl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgPSAwOwogCQl3c3RhdHMtPmRpc2NhcmQubWlzYyA9IDA7CkBAIC05OTEsMTAgKzkwNyw0NSBAQAogCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOwogCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX0lOVkFMSUQ7CiAJfSBlbHNlIHsKLQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3NpZ25hbDsKLQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzdGEtPmxhc3RfcXVhbDsKLQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOwotCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IGllZWU4MDIxMV9nZXRfd3N0YXRzX2ZsYWdzKGxvY2FsKTsKKwkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSAwOworCQkvKgorCQkgKiBtaXJyb3Igd2hhdCBjZmc4MDIxMSBkb2VzIGZvciBpd3JhbmdlL3NjYW4gcmVzdWx0cywKKwkJICogb3RoZXJ3aXNlIHVzZXJzcGFjZSBnZXRzIGNvbmZ1c2VkLgorCQkgKi8KKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIChJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8CisJCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSkgeworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCX0gZWxzZSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwkJfQorCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykgeworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3NpZ25hbDsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3NpZ25hbDsKKwkJfSBlbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgeworCQkJaW50IHNpZyA9IHN0YS0+bGFzdF9zaWduYWw7CisKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc2lnOworCQkJaWYgKHNpZyA8IC0xMTApCisJCQkJc2lnID0gLTExMDsKKwkJCWVsc2UgaWYgKHNpZyA+IC00MCkKKwkJCQlzaWcgPSAtNDA7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IHNpZyArIDExMDsKKwkJfQorCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKSB7CisJCQkvKgorCQkJICogVGhpcyBhc3N1bWVzIHRoYXQgaWYgZHJpdmVyIHJlcG9ydHMgbm9pc2UsIGl0IGFsc28KKwkJCSAqIHJlcG9ydHMgc2lnbmFsIGluIGRCbS4KKwkJCSAqLworCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9VUERBVEVEOworCQl9IGVsc2UgeworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xMDExLDkgKzk2Miw4IEBACiAKIAlzd2l0Y2ggKGRhdGEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51LnN0YS5hdXRoX2FsZ3M7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCWRhdGEtPnZhbHVlID0gc2RhdGEtPnUubWdkLmF1dGhfYWxnczsKIAkJZWxzZQogCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWJyZWFrOwpAQCAtMTExNiw3ICsxMDY2LDcgQEAKIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NFTlMgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1NFTlMgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdSQU5HRSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdyYW5nZSwJCS8qIFNJT0NHSVdSQU5HRSAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1BSSVYgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBrZXJuZWwgY29kZSAqLywJCS8qIFNJT0NHSVdQUklWICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXU1RBVFMgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuYyBiL25ldC9tYWM4MDIxMS93bWUuYwppbmRleCBhYzcxYjM4Li4wYjhhZDFmNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5jCisrKyBiL25ldC9tYWM4MDIxMS93bWUuYwpAQCAtOTksMTAgKzk5LDEzIEBACiAJLyogaW4gY2FzZSB3ZSBhcmUgYSBjbGllbnQgdmVyaWZ5IGFjbSBpcyBub3Qgc2V0IGZvciB0aGlzIGFjICovCiAJd2hpbGUgKHVubGlrZWx5KGxvY2FsLT53bW1fYWNtICYgQklUKHNrYi0+cHJpb3JpdHkpKSkgewogCQlpZiAod21lX2Rvd25ncmFkZV9hYyhza2IpKSB7Ci0JCQkvKiBUaGUgb2xkIGNvZGUgd291bGQgZHJvcCB0aGUgcGFja2V0IGluIHRoaXMKLQkJCSAqIGNhc2UuCisJCQkvKgorCQkJICogVGhpcyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4uIFRoZSBBUCBoYXMgbWFya2VkIGFsbAorCQkJICogbG93ZXIgQUNzIHRvIHJlcXVpcmUgYWRtaXNzaW9uIGNvbnRyb2wgd2hpY2ggaXMgbm90CisJCQkgKiBhIHJlYXNvbmFibGUgY29uZmlndXJhdGlvbi4gQWxsb3cgdGhlIGZyYW1lIHRvIGJlCisJCQkgKiB0cmFuc21pdHRlZCB1c2luZyBBQ19CSyBhcyBhIHdvcmthcm91bmQuCiAJCQkgKi8KLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTExNCw5ICsxMTcsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IG1wcml2LT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IHF1ZXVlOwogCXU4IHRpZDsKIApAQCAtMTI0LDI5ICsxMjUsMTEgQEAKIAlpZiAodW5saWtlbHkocXVldWUgPj0gbG9jYWwtPmh3LnF1ZXVlcykpCiAJCXF1ZXVlID0gbG9jYWwtPmh3LnF1ZXVlcyAtIDE7CiAKLQlpZiAoc2tiLT5yZXF1ZXVlKSB7Ci0JCWlmICghaHctPmFtcGR1X3F1ZXVlcykKLQkJCXJldHVybiBxdWV1ZTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwotCQlpZiAoc3RhKSB7Ci0JCQlpbnQgYW1wZHVfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0KLQkJCWlmICgoYW1wZHVfcXVldWUgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpICYmCi0JCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKSkKLQkJCQlxdWV1ZSA9IGFtcGR1X3F1ZXVlOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCXJldHVybiBxdWV1ZTsKLQl9Ci0KLQkvKiBOb3cgd2Uga25vdyB0aGUgMWQgcHJpb3JpdHksIGZpbGwgaW4gdGhlIFFvUyBoZWFkZXIgaWYKLQkgKiB0aGVyZSBpcyBvbmUuCisJLyoKKwkgKiBOb3cgd2Uga25vdyB0aGUgMWQgcHJpb3JpdHksIGZpbGwgaW4gdGhlIFFvUyBoZWFkZXIgaWYKKwkgKiB0aGVyZSBpcyBvbmUgKGFuZCB3ZSBoYXZlbid0IGRvbmUgdGhpcyBiZWZvcmUpLgogCSAqLwotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmICghc2tiLT5yZXF1ZXVlICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXU4ICpwID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXU4IGFja19wb2xpY3kgPSAwOwogCQl0aWQgPSBza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FPU19DVExfVEFHMURfTUFTSzsKQEAgLTE1NiwxNDAgKzEzOSw3IEBACiAJCS8qIHFvcyBoZWFkZXIgaXMgMiBieXRlcywgc2Vjb25kIHJlc2VydmVkICovCiAJCSpwKysgPSBhY2tfcG9saWN5IHwgdGlkOwogCQkqcCA9IDA7Ci0KLQkJaWYgKCFody0+YW1wZHVfcXVldWVzKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwotCQlpZiAoc3RhKSB7Ci0JCQlpbnQgYW1wZHVfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0KLQkJCWlmICgoYW1wZHVfcXVldWUgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpICYmCi0JCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKSkKLQkJCQlxdWV1ZSA9IGFtcGR1X3F1ZXVlOwotCQl9Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJcmV0dXJuIHF1ZXVlOwogfQotCi1pbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBYWFg6IGN1cnJlbnRseSBicm9rZW4gZHVlIHRvIGNiL3JlcXVldWUgdXNlICovCi0JcmV0dXJuIC1FUEVSTTsKLQotCS8qIHByZXBhcmUgdGhlIGZpbHRlciBhbmQgc2F2ZSBpdCBmb3IgdGhlIFNXIHF1ZXVlCi0JICogbWF0Y2hpbmcgdGhlIHJlY2VpdmVkIEhXIHF1ZXVlICovCi0KLQlpZiAoIWxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiB0cnkgdG8gZ2V0IGEgUWRpc2MgZnJvbSB0aGUgcG9vbCAqLwotCWZvciAoaSA9IGxvY2FsLT5ody5xdWV1ZXM7IGkgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcygmbG9jYWwtPmh3KTsgaSsrKQotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShsb2NhbF90b19odyhsb2NhbCksIGkpOwotCQkJc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gaTsKLQotCQkJLyogSUYgdGhlcmUgYXJlIGFscmVhZHkgcGVuZGluZyBwYWNrZXRzCi0JCQkgKiBvbiB0aGlzIHRpZCBmaXJzdCB3ZSBuZWVkIHRvIGRyYWluIHRoZW0KLQkJCSAqIG9uIHRoZSBwcmV2aW91cyBxdWV1ZQotCQkJICogc2luY2UgSFQgaXMgc3RyaWN0IGluIG9yZGVyICovCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJhbGxvY2F0ZWQgYWdncmVnYXRpb24gcXVldWUiCi0JCQkJCSIgJWQgdGlkICVkIGFkZHIgJXBNIHBvb2w9MHglbFhcbiIsCi0JCQkJCWksIHRpZCwgc3RhLT5zdGEuYWRkciwKLQkJCQkJbG9jYWwtPnF1ZXVlX3Bvb2xbMF0pOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCXJldHVybiAtRUFHQUlOOwotfQotCi0vKioKLSAqIHRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBYKS0+bG9jawotICovCi12b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAotCQkJCSAgIHU4IHJlcXVldWUpCi17Ci0JaW50IGFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0KLQkvKiByZXR1cm4gdGhlIHFkaXNjIHRvIHRoZSBwb29sICovCi0JY2xlYXJfYml0KGFnZ19xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpOwotCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KTsKLQotCWlmIChyZXF1ZXVlKSB7Ci0JCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBhZ2dfcXVldWUpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKLQkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOwotCQlzdHJ1Y3QgUWRpc2MgKnE7Ci0KLQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgYWdnX3F1ZXVlKTsKLQkJcSA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQkJcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKLQotCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKLQkJcWRpc2NfcmVzZXQocSk7Ci0JCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7Ci0JfQotfQotCi12b2lkIGllZWU4MDIxMV9yZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcXVldWUpCi17Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOwotCXN0cnVjdCBza19idWZmX2hlYWQgbGlzdDsKLQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0Jc3RydWN0IFFkaXNjICpxZGlzYzsKLQl1MzIgbGVuOwotCi0JcmN1X3JlYWRfbG9ja19iaCgpOwotCi0JcWRpc2MgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7Ci0JaWYgKCFxZGlzYyB8fCAhcWRpc2MtPmRlcXVldWUpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxpc3QpOwotCi0Jcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHFkaXNjKTsKLQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQlmb3IgKGxlbiA9IHFkaXNjLT5xLnFsZW47IGxlbiA+IDA7IGxlbi0tKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7Ci0KLQkJaWYgKHNrYikKLQkJCV9fc2tiX3F1ZXVlX3RhaWwoJmxpc3QsIHNrYik7Ci0JfQotCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7Ci0KLQlmb3IgKGxlbiA9IGxpc3QucWxlbjsgbGVuID4gMDsgbGVuLS0pIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoJmxpc3QpOwotCQl1MTYgbmV3X3F1ZXVlOwotCi0JCUJVR19PTighc2tiKTsKLQkJbmV3X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShsb2NhbC0+bWRldiwgc2tiKTsKLQkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgbmV3X3F1ZXVlKTsKLQotCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBuZXdfcXVldWUpOwotCi0KLQkJcWRpc2MgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7Ci0JCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxZGlzYyk7Ci0KLQkJc3Bpbl9sb2NrKHJvb3RfbG9jayk7Ci0JCXFkaXNjX2VucXVldWVfcm9vdChza2IsIHFkaXNjKTsKLQkJc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKLQl9Ci0KLW91dF91bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrX2JoKCk7Ci19CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmggYi9uZXQvbWFjODAyMTEvd21lLmgKaW5kZXggYmM2MmYyOC4uNzUyMGQyZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5oCisrKyBiL25ldC9tYWM4MDIxMS93bWUuaApAQCAtMjEsMTEgKzIxLDUgQEAKIGV4dGVybiBjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XTsKIAogdTE2IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpOwotdm9pZCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKLQkJCQkgICB1OCByZXF1ZXVlKTsKLXZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSk7CiAKICNlbmRpZiAvKiBfV01FX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBiMTgyYjMwLi44MDIwZGI2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC03NDMsNyArNzQzLDcgQEAKIAlORl9DVF9BU1NFUlQoc2tiLT5uZmN0KTsKIAogCXJldCA9IGw0cHJvdG8tPnBhY2tldChjdCwgc2tiLCBkYXRhb2ZmLCBjdGluZm8sIHBmLCBob29rbnVtKTsKLQlpZiAocmV0IDwgMCkgeworCWlmIChyZXQgPD0gMCkgewogCQkvKiBJbnZhbGlkOiBpbnZlcnNlIG9mIHRoZSByZXR1cm4gY29kZSB0ZWxscwogCQkgKiB0aGUgbmV0ZmlsdGVyIGNvcmUgd2hhdCB0byBkbyAqLwogCQlwcl9kZWJ1ZygibmZfY29ubnRyYWNrX2luOiBDYW4ndCB0cmFjayB3aXRoIHByb3RvIG1vZHVsZVxuIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggMmZiODMzYi4uYzY0MzljNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMTgzNyw2ICsxODM3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJZXhwLT5jbGFzcyA9IDA7CiAJZXhwLT5leHBlY3RmbiA9IE5VTEw7CiAJZXhwLT5mbGFncyA9IDA7CiAJZXhwLT5tYXN0ZXIgPSBjdDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCA3MmNjYTYzLi4zODA3YWM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCkBAIC02Niw3ICs2Niw3IEBACiAJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKTsKIAotI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCiAvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIG5hbWVzICovCiBjb25zdCBjaGFyICpjb25zdCBwcHRwX21zZ19uYW1lW10gPSB7CiAJIlVOS05PV05fTUVTU0FHRSIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDliOWU2NzEuLmI1Y2NmMmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKQEAgLTQ2OCw3ICs0NjksNyBAQAogCQkJCWZvciAoaSA9IDA7CiAJCQkJICAgICBpIDwgKG9wc2l6ZSAtIFRDUE9MRU5fU0FDS19CQVNFKTsKIAkJCQkgICAgIGkgKz0gVENQT0xFTl9TQUNLX1BFUkJMT0NLKSB7Ci0JCQkJCXRtcCA9IG50b2hsKCooKF9fYmUzMiAqKShwdHIraSkrMSkpOworCQkJCQl0bXAgPSBnZXRfdW5hbGlnbmVkX2JlMzIoKF9fYmUzMiAqKShwdHIraSkrMSk7CiAKIAkJCQkJaWYgKGFmdGVyKHRtcCwgKnNhY2spKQogCQkJCQkJKnNhY2sgPSB0bXA7CkBAIC04NjEsNyArODYyLDcgQEAKIAkJCSAqLwogCQkJaWYgKG5mX2N0X2tpbGwoY3QpKQogCQkJCXJldHVybiAtTkZfUkVQRUFUOwotCQkJcmV0dXJuIC1ORl9EUk9QOworCQkJcmV0dXJuIE5GX0RST1A7CiAJCX0KIAkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBUQ1BfQ09OTlRSQUNLX0lHTk9SRToKQEAgLTg5NCw3ICs4OTUsNyBAQAogCQkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAibmZfY3RfdGNwOiBraWxsaW5nIG91dCBvZiBzeW5jIHNlc3Npb24gIik7CiAJCQluZl9jdF9raWxsKGN0KTsKLQkJCXJldHVybiAtTkZfRFJPUDsKKwkJCXJldHVybiBORl9EUk9QOwogCQl9CiAJCWN0LT5wcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4OwogCQljdC0+cHJvdG8udGNwLmxhc3RfZGlyID0gZGlyOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCAzZWFlM2ZjLi5mZDMyNmFjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtMzksNyArMzksNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgTkZVTE5MX05MQlVGU0laX0RFRkFVTFQJTkxNU0dfR09PRFNJWkUKLSNkZWZpbmUgTkZVTE5MX1RJTUVPVVRfREVGQVVMVCAJSFoJLyogZXZlcnkgc2Vjb25kICovCisjZGVmaW5lIE5GVUxOTF9USU1FT1VUX0RFRkFVTFQgCTEwMAkvKiBldmVyeSBzZWNvbmQgKi8KICNkZWZpbmUgTkZVTE5MX1FUSFJFU0hfREVGQVVMVCAJMTAwCS8qIDEwMCBwYWNrZXRzICovCiAjZGVmaW5lIE5GVUxOTF9DT1BZX1JBTkdFX01BWAkweEZGRkYJLyogbWF4IHBhY2tldCBzaXplIGlzIGxpbWl0ZWQgYnkgMTYtYml0IHN0cnVjdCBuZmF0dHIgbmZhX2xlbiBmaWVsZCAqLwogCkBAIC01OTAsOCArNTkwLDEwIEBACiAKIAlxdGhyZXNob2xkID0gaW5zdC0+cXRocmVzaG9sZDsKIAkvKiBwZXItcnVsZSBxdGhyZXNob2xkIG92ZXJyaWRlcyBwZXItaW5zdGFuY2UgKi8KLQlpZiAocXRocmVzaG9sZCA+IGxpLT51LnVsb2cucXRocmVzaG9sZCkKLQkJcXRocmVzaG9sZCA9IGxpLT51LnVsb2cucXRocmVzaG9sZDsKKwlpZiAobGktPnUudWxvZy5xdGhyZXNob2xkKQorCQlpZiAocXRocmVzaG9sZCA+IGxpLT51LnVsb2cucXRocmVzaG9sZCkKKwkJCXF0aHJlc2hvbGQgPSBsaS0+dS51bG9nLnF0aHJlc2hvbGQ7CisKIAogCXN3aXRjaCAoaW5zdC0+Y29weV9tb2RlKSB7CiAJY2FzZSBORlVMTkxfQ09QWV9NRVRBOgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IGJmY2FjOTIuLjUwOWE5NTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTg0Myw1OSArODQzLDE0MyBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAorLyoKKyAqIFRyYXZlcnNlIHN0YXRlIGZvciBpcHssNn1fe3RhYmxlcyxtYXRjaGVzfSBmb3IgaGVscGluZyBjcm9zc2luZworICogdGhlIG11bHRpLUFGIG11dGV4ZXMuCisgKi8KK3N0cnVjdCBuZl9tdHRnX3RyYXYgeworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICpjdXJyOworCXVpbnQ4X3QgY2xhc3MsIG5mcHJvdG87Cit9OworCitlbnVtIHsKKwlNVFRHX1RSQVZfSU5JVCwKKwlNVFRHX1RSQVZfTkZQX1VOU1BFQywKKwlNVFRHX1RSQVZfTkZQX1NQRUMsCisJTVRUR19UUkFWX0RPTkUsCit9OworCitzdGF0aWMgdm9pZCAqeHRfbXR0Z19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zLAorICAgIGJvb2wgaXNfdGFyZ2V0KQoreworCXN0YXRpYyBjb25zdCB1aW50OF90IG5leHRfY2xhc3NbXSA9IHsKKwkJW01UVEdfVFJBVl9ORlBfVU5TUEVDXSA9IE1UVEdfVFJBVl9ORlBfU1BFQywKKwkJW01UVEdfVFJBVl9ORlBfU1BFQ10gICA9IE1UVEdfVFJBVl9ET05FLAorCX07CisJc3RydWN0IG5mX210dGdfdHJhdiAqdHJhdiA9IHNlcS0+cHJpdmF0ZTsKKworCXN3aXRjaCAodHJhdi0+Y2xhc3MpIHsKKwljYXNlIE1UVEdfVFJBVl9JTklUOgorCQl0cmF2LT5jbGFzcyA9IE1UVEdfVFJBVl9ORlBfVU5TUEVDOworCQltdXRleF9sb2NrKCZ4dFtORlBST1RPX1VOU1BFQ10ubXV0ZXgpOworCQl0cmF2LT5oZWFkID0gdHJhdi0+Y3VyciA9IGlzX3RhcmdldCA/CisJCQkmeHRbTkZQUk9UT19VTlNQRUNdLnRhcmdldCA6ICZ4dFtORlBST1RPX1VOU1BFQ10ubWF0Y2g7CisgCQlicmVhazsKKwljYXNlIE1UVEdfVFJBVl9ORlBfVU5TUEVDOgorCQl0cmF2LT5jdXJyID0gdHJhdi0+Y3Vyci0+bmV4dDsKKwkJaWYgKHRyYXYtPmN1cnIgIT0gdHJhdi0+aGVhZCkKKwkJCWJyZWFrOworCQltdXRleF91bmxvY2soJnh0W05GUFJPVE9fVU5TUEVDXS5tdXRleCk7CisJCW11dGV4X2xvY2soJnh0W3RyYXYtPm5mcHJvdG9dLm11dGV4KTsKKwkJdHJhdi0+aGVhZCA9IHRyYXYtPmN1cnIgPSBpc190YXJnZXQgPworCQkJJnh0W3RyYXYtPm5mcHJvdG9dLnRhcmdldCA6ICZ4dFt0cmF2LT5uZnByb3RvXS5tYXRjaDsKKwkJdHJhdi0+Y2xhc3MgPSBuZXh0X2NsYXNzW3RyYXYtPmNsYXNzXTsKKwkJYnJlYWs7CisJY2FzZSBNVFRHX1RSQVZfTkZQX1NQRUM6CisJCXRyYXYtPmN1cnIgPSB0cmF2LT5jdXJyLT5uZXh0OworCQlpZiAodHJhdi0+Y3VyciAhPSB0cmF2LT5oZWFkKQorCQkJYnJlYWs7CisJCS8qIGZhbGx0aHJ1LCBfc3RvcCB3aWxsIHVubG9jayAqLworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChwcG9zICE9IE5VTEwpCisJCSsrKnBwb3M7CisJcmV0dXJuIHRyYXY7Cit9CisKK3N0YXRpYyB2b2lkICp4dF9tdHRnX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MsCisgICAgYm9vbCBpc190YXJnZXQpCit7CisJc3RydWN0IG5mX210dGdfdHJhdiAqdHJhdiA9IHNlcS0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgajsKKworCXRyYXYtPmNsYXNzID0gTVRUR19UUkFWX0lOSVQ7CisJZm9yIChqID0gMDsgaiA8ICpwb3M7ICsraikKKwkJaWYgKHh0X210dGdfc2VxX25leHQoc2VxLCBOVUxMLCBOVUxMLCBpc190YXJnZXQpID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdHJhdjsKK30KKworc3RhdGljIHZvaWQgeHRfbXR0Z19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgbmZfbXR0Z190cmF2ICp0cmF2ID0gc2VxLT5wcml2YXRlOworCisJc3dpdGNoICh0cmF2LT5jbGFzcykgeworCWNhc2UgTVRUR19UUkFWX05GUF9VTlNQRUM6CisJCW11dGV4X3VubG9jaygmeHRbTkZQUk9UT19VTlNQRUNdLm11dGV4KTsKKwkJYnJlYWs7CisJY2FzZSBNVFRHX1RSQVZfTkZQX1NQRUM6CisJCW11dGV4X3VubG9jaygmeHRbdHJhdi0+bmZwcm90b10ubXV0ZXgpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyB2b2lkICp4dF9tYXRjaF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKXNlcS0+cHJpdmF0ZTsKLQl1X2ludDE2X3QgYWYgPSAodW5zaWduZWQgbG9uZylwZGUtPmRhdGE7Ci0KLQltdXRleF9sb2NrKCZ4dFthZl0ubXV0ZXgpOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmeHRbYWZdLm1hdGNoLCAqcG9zKTsKKwlyZXR1cm4geHRfbXR0Z19zZXFfc3RhcnQoc2VxLCBwb3MsIGZhbHNlKTsKIH0KIAotc3RhdGljIHZvaWQgKnh0X21hdGNoX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3N0YXRpYyB2b2lkICp4dF9tYXRjaF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKXNlcS0+cHJpdmF0ZTsKLQl1X2ludDE2X3QgYWYgPSAodW5zaWduZWQgbG9uZylwZGUtPmRhdGE7Ci0KLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmeHRbYWZdLm1hdGNoLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCB4dF9tYXRjaF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHNlcS0+cHJpdmF0ZTsKLQl1X2ludDE2X3QgYWYgPSAodW5zaWduZWQgbG9uZylwZGUtPmRhdGE7Ci0KLQltdXRleF91bmxvY2soJnh0W2FmXS5tdXRleCk7CisJcmV0dXJuIHh0X210dGdfc2VxX25leHQoc2VxLCB2LCBwcG9zLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbnQgeHRfbWF0Y2hfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHh0X21hdGNoICptYXRjaCA9IGxpc3RfZW50cnkodiwgc3RydWN0IHh0X21hdGNoLCBsaXN0KTsKKwljb25zdCBzdHJ1Y3QgbmZfbXR0Z190cmF2ICp0cmF2ID0gc2VxLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAKLQlpZiAoc3RybGVuKG1hdGNoLT5uYW1lKSkKLQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiJXNcbiIsIG1hdGNoLT5uYW1lKTsKLQllbHNlCi0JCXJldHVybiAwOworCXN3aXRjaCAodHJhdi0+Y2xhc3MpIHsKKwljYXNlIE1UVEdfVFJBVl9ORlBfVU5TUEVDOgorCWNhc2UgTVRUR19UUkFWX05GUF9TUEVDOgorCQlpZiAodHJhdi0+Y3VyciA9PSB0cmF2LT5oZWFkKQorCQkJcmV0dXJuIDA7CisJCW1hdGNoID0gbGlzdF9lbnRyeSh0cmF2LT5jdXJyLCBzdHJ1Y3QgeHRfbWF0Y2gsIGxpc3QpOworCQlyZXR1cm4gKCptYXRjaC0+bmFtZSA9PSAnXDAnKSA/IDAgOgorCQkgICAgICAgc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgbWF0Y2gtPm5hbWUpOworCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB4dF9tYXRjaF9zZXFfb3BzID0gewogCS5zdGFydAk9IHh0X21hdGNoX3NlcV9zdGFydCwKIAkubmV4dAk9IHh0X21hdGNoX3NlcV9uZXh0LAotCS5zdG9wCT0geHRfbWF0Y2hfc2VxX3N0b3AsCisJLnN0b3AJPSB4dF9tdHRnX3NlcV9zdG9wLAogCS5zaG93CT0geHRfbWF0Y2hfc2VxX3Nob3csCiB9OwogCiBzdGF0aWMgaW50IHh0X21hdGNoX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJc3RydWN0IHNlcV9maWxlICpzZXE7CisJc3RydWN0IG5mX210dGdfdHJhdiAqdHJhdjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2VxX29wZW4oZmlsZSwgJnh0X21hdGNoX3NlcV9vcHMpOwotCWlmICghcmV0KSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXRyYXYgPSBrbWFsbG9jKHNpemVvZigqdHJhdiksIEdGUF9LRVJORUwpOworCWlmICh0cmF2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi0JCXNlcS0+cHJpdmF0ZSA9IFBERShpbm9kZSk7CisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnh0X21hdGNoX3NlcV9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKHRyYXYpOworCQlyZXR1cm4gcmV0OwogCX0KLQlyZXR1cm4gcmV0OworCisJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcS0+cHJpdmF0ZSA9IHRyYXY7CisJdHJhdi0+bmZwcm90byA9ICh1bnNpZ25lZCBsb25nKVBERShpbm9kZSktPmRhdGE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHh0X21hdGNoX29wcyA9IHsKQEAgLTkwMyw2MiArOTg3LDYzIEBACiAJLm9wZW4JID0geHRfbWF0Y2hfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKIAkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIH07CiAKIHN0YXRpYyB2b2lkICp4dF90YXJnZXRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IChzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKilzZXEtPnByaXZhdGU7Ci0JdV9pbnQxNl90IGFmID0gKHVuc2lnbmVkIGxvbmcpcGRlLT5kYXRhOwotCi0JbXV0ZXhfbG9jaygmeHRbYWZdLm11dGV4KTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnh0W2FmXS50YXJnZXQsICpwb3MpOworCXJldHVybiB4dF9tdHRnX3NlcV9zdGFydChzZXEsIHBvcywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkICp4dF90YXJnZXRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQorc3RhdGljIHZvaWQgKnh0X3RhcmdldF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKXNlcS0+cHJpdmF0ZTsKLQl1X2ludDE2X3QgYWYgPSAodW5zaWduZWQgbG9uZylwZGUtPmRhdGE7Ci0KLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmeHRbYWZdLnRhcmdldCwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgeHRfdGFyZ2V0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gc2VxLT5wcml2YXRlOwotCXVfaW50MTZfdCBhZiA9ICh1bnNpZ25lZCBsb25nKXBkZS0+ZGF0YTsKLQotCW11dGV4X3VubG9jaygmeHRbYWZdLm11dGV4KTsKKwlyZXR1cm4geHRfbXR0Z19zZXFfbmV4dChzZXEsIHYsIHBwb3MsIHRydWUpOwogfQogCiBzdGF0aWMgaW50IHh0X3RhcmdldF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCB4dF90YXJnZXQsIGxpc3QpOworCWNvbnN0IHN0cnVjdCBuZl9tdHRnX3RyYXYgKnRyYXYgPSBzZXEtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogCi0JaWYgKHN0cmxlbih0YXJnZXQtPm5hbWUpKQotCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgdGFyZ2V0LT5uYW1lKTsKLQllbHNlCi0JCXJldHVybiAwOworCXN3aXRjaCAodHJhdi0+Y2xhc3MpIHsKKwljYXNlIE1UVEdfVFJBVl9ORlBfVU5TUEVDOgorCWNhc2UgTVRUR19UUkFWX05GUF9TUEVDOgorCQlpZiAodHJhdi0+Y3VyciA9PSB0cmF2LT5oZWFkKQorCQkJcmV0dXJuIDA7CisJCXRhcmdldCA9IGxpc3RfZW50cnkodHJhdi0+Y3Vyciwgc3RydWN0IHh0X3RhcmdldCwgbGlzdCk7CisJCXJldHVybiAoKnRhcmdldC0+bmFtZSA9PSAnXDAnKSA/IDAgOgorCQkgICAgICAgc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgdGFyZ2V0LT5uYW1lKTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgeHRfdGFyZ2V0X3NlcV9vcHMgPSB7CiAJLnN0YXJ0CT0geHRfdGFyZ2V0X3NlcV9zdGFydCwKIAkubmV4dAk9IHh0X3RhcmdldF9zZXFfbmV4dCwKLQkuc3RvcAk9IHh0X3RhcmdldF9zZXFfc3RvcCwKKwkuc3RvcAk9IHh0X210dGdfc2VxX3N0b3AsCiAJLnNob3cJPSB4dF90YXJnZXRfc2VxX3Nob3csCiB9OwogCiBzdGF0aWMgaW50IHh0X3RhcmdldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCBzZXFfZmlsZSAqc2VxOworCXN0cnVjdCBuZl9tdHRnX3RyYXYgKnRyYXY7CiAJaW50IHJldDsKIAotCXJldCA9IHNlcV9vcGVuKGZpbGUsICZ4dF90YXJnZXRfc2VxX29wcyk7Ci0JaWYgKCFyZXQpIHsKLQkJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdHJhdiA9IGttYWxsb2Moc2l6ZW9mKCp0cmF2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRyYXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkJc2VxLT5wcml2YXRlID0gUERFKGlub2RlKTsKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmeHRfdGFyZ2V0X3NlcV9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKHRyYXYpOworCQlyZXR1cm4gcmV0OwogCX0KLQlyZXR1cm4gcmV0OworCisJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcS0+cHJpdmF0ZSA9IHRyYXY7CisJdHJhdi0+bmZwcm90byA9ICh1bnNpZ25lZCBsb25nKVBERShpbm9kZSktPmRhdGE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHh0X3RhcmdldF9vcHMgPSB7CkBAIC05NjYsNyArMTA1MSw3IEBACiAJLm9wZW4JID0geHRfdGFyZ2V0X29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCiAJLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCiAjZGVmaW5lIEZPUk1BVF9UQUJMRVMJIl90YWJsZXNfbmFtZXMiCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwppbmRleCBmZTgwYjYxLi43OTFlMDMwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogCXN0cnVjdCByZWNlbnRfZW50cnkgKmU7CiAJY2hhciBidWZbc2l6ZW9mKCIrYjMzNToxZDM1OjFlNTU6ZGVhZDpjMGRlOjE3MTU6NWFmZTpjMGRlIildOwogCWNvbnN0IGNoYXIgKmMgPSBidWY7Ci0JdW5pb24gbmZfaW5ldF9hZGRyIGFkZHI7CisJdW5pb24gbmZfaW5ldF9hZGRyIGFkZHIgPSB7fTsKIAl1X2ludDE2X3QgZmFtaWx5OwogCWJvb2wgYWRkLCBzdWNjOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9NYWtlZmlsZSBiL25ldC9uZXRsaW5rL01ha2VmaWxlCmluZGV4IGUzNTg5YzIuLmJkZDZkZGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL01ha2VmaWxlCisrKyBiL25ldC9uZXRsaW5rL01ha2VmaWxlCkBAIC0yLDQgKzIsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLgogIwogCi1vYmoteSAgCQkJCTo9IGFmX25ldGxpbmsubyBhdHRyLm8gZ2VuZXRsaW5rLm8KK29iai15ICAJCQkJOj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggNWIzMzg3OS4uOGI2YmJiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtODUsNiArODUsOCBAQAogCiAjZGVmaW5lIE5FVExJTktfS0VSTkVMX1NPQ0tFVAkweDEKICNkZWZpbmUgTkVUTElOS19SRUNWX1BLVElORk8JMHgyCisjZGVmaW5lIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IJMHg0CisjZGVmaW5lIE5FVExJTktfUkVDVl9OT19FTk9CVUZTCTB4OAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sa19zayhzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC03MTYsMTAgKzcxOCwxNSBAQAogCiBzdGF0aWMgdm9pZCBuZXRsaW5rX292ZXJydW4oc3RydWN0IHNvY2sgKnNrKQogewotCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmbmxrX3NrKHNrKS0+c3RhdGUpKSB7Ci0JCXNrLT5za19lcnIgPSBFTk9CVUZTOwotCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOworCisJaWYgKCEobmxrLT5mbGFncyAmIE5FVExJTktfUkVDVl9OT19FTk9CVUZTKSkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJm5sa19zayhzayktPnN0YXRlKSkgeworCQkJc2stPnNrX2VyciA9IEVOT0JVRlM7CisJCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwkJfQogCX0KKwlhdG9taWNfaW5jKCZzay0+c2tfZHJvcHMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNvY2sgKm5ldGxpbmtfZ2V0c29ja2J5cGlkKHN0cnVjdCBzb2NrICpzc2ssIHUzMiBwaWQpCkBAIC05OTUsMTIgKzEwMDIsMTUgQEAKIAkJbmV0bGlua19vdmVycnVuKHNrKTsKIAkJLyogQ2xvbmUgZmFpbGVkLiBOb3RpZnkgQUxMIGxpc3RlbmVycy4gKi8KIAkJcC0+ZmFpbHVyZSA9IDE7CisJCWlmIChubGstPmZsYWdzICYgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUikKKwkJCXAtPmRlbGl2ZXJ5X2ZhaWx1cmUgPSAxOwogCX0gZWxzZSBpZiAoc2tfZmlsdGVyKHNrLCBwLT5za2IyKSkgewogCQlrZnJlZV9za2IocC0+c2tiMik7CiAJCXAtPnNrYjIgPSBOVUxMOwogCX0gZWxzZSBpZiAoKHZhbCA9IG5ldGxpbmtfYnJvYWRjYXN0X2RlbGl2ZXIoc2ssIHAtPnNrYjIpKSA8IDApIHsKIAkJbmV0bGlua19vdmVycnVuKHNrKTsKLQkJcC0+ZGVsaXZlcnlfZmFpbHVyZSA9IDE7CisJCWlmIChubGstPmZsYWdzICYgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUikKKwkJCXAtPmRlbGl2ZXJ5X2ZhaWx1cmUgPSAxOwogCX0gZWxzZSB7CiAJCXAtPmNvbmdlc3RlZCB8PSB2YWw7CiAJCXAtPmRlbGl2ZXJlZCA9IDE7CkBAIC0xMDQ1LDEwICsxMDU1LDkgQEAKIAogCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAKLQlpZiAoaW5mby5za2IyKQotCQlrZnJlZV9za2IoaW5mby5za2IyKTsKKwlrZnJlZV9za2IoaW5mby5za2IyKTsKIAotCWlmIChpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUgfHwgaW5mby5mYWlsdXJlKQorCWlmIChpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUpCiAJCXJldHVybiAtRU5PQlVGUzsKIAogCWlmIChpbmZvLmRlbGl2ZXJlZCkgewpAQCAtMTA4OCw2ICsxMDk3LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbmV0bGlua19zZXRfZXJyIC0gcmVwb3J0IGVycm9yIHRvIGJyb2FkY2FzdCBsaXN0ZW5lcnMKKyAqIEBzc2s6IHRoZSBrZXJuZWwgbmV0bGluayBzb2NrZXQsIGFzIHJldHVybmVkIGJ5IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgpCisgKiBAcGlkOiB0aGUgUElEIG9mIGEgcHJvY2VzcyB0aGF0IHdlIHdhbnQgdG8gc2tpcCAoaWYgYW55KQorICogQGdyb3VwczogdGhlIGJyb2FkY2FzdCBncm91cCB0aGF0IHdpbGwgbm90aWNlIHRoZSBlcnJvcgorICogQGNvZGU6IGVycm9yIGNvZGUsIG11c3QgYmUgbmVnYXRpdmUgKGFzIHVzdWFsIGluIGtlcm5lbHNwYWNlKQorICovCiB2b2lkIG5ldGxpbmtfc2V0X2VycihzdHJ1Y3Qgc29jayAqc3NrLCB1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBjb2RlKQogewogCXN0cnVjdCBuZXRsaW5rX3NldF9lcnJfZGF0YSBpbmZvOwpAQCAtMTA5Nyw3ICsxMTEzLDggQEAKIAlpbmZvLmV4Y2x1ZGVfc2sgPSBzc2s7CiAJaW5mby5waWQgPSBwaWQ7CiAJaW5mby5ncm91cCA9IGdyb3VwOwotCWluZm8uY29kZSA9IGNvZGU7CisJLyogc2stPnNrX2VyciB3YW50cyBhIHBvc2l0aXZlIGVycm9yIHZhbHVlICovCisJaW5mby5jb2RlID0gLWNvZGU7CiAKIAlyZWFkX2xvY2soJm5sX3RhYmxlX2xvY2spOwogCkBAIC0xMTY0LDYgKzExODEsMjIgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmICh2YWwpCisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVsc2UKKwkJCW5say0+ZmxhZ3MgJj0gfk5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAodmFsKSB7CisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfUkVDVl9OT19FTk9CVUZTOworCQkJY2xlYXJfYml0KDAsICZubGstPnN0YXRlKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbmxrLT53YWl0KTsKKwkJfSBlbHNlCisJCQlubGstPmZsYWdzICY9IH5ORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUzsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTExOTYsNiArMTIyOSwyNiBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWVyciA9IDA7CiAJCWJyZWFrOworCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlsZW4gPSBzaXplb2YoaW50KTsKKwkJdmFsID0gbmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IgPyAxIDogMDsKKwkJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSB8fAorCQkgICAgcHV0X3VzZXIodmFsLCBvcHR2YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuID0gc2l6ZW9mKGludCk7CisJCXZhbCA9IG5say0+ZmxhZ3MgJiBORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUyA/IDEgOiAwOworCQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8CisJCSAgICBwdXRfdXNlcih2YWwsIG9wdHZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTE1MjIsOCArMTU3NSw3IEBACiAKIHN0YXRpYyB2b2lkIG5ldGxpbmtfZGVzdHJveV9jYWxsYmFjayhzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0JaWYgKGNiLT5za2IpCi0JCWtmcmVlX3NrYihjYi0+c2tiKTsKKwlrZnJlZV9za2IoY2ItPnNrYik7CiAJa2ZyZWUoY2IpOwogfQogCkBAIC0xNzQwLDEyICsxNzkyLDE4IEBACiAJCQlleGNsdWRlX3BpZCA9IHBpZDsKIAkJfQogCi0JCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciAqLwotCQlubG1zZ19tdWx0aWNhc3Qoc2ssIHNrYiwgZXhjbHVkZV9waWQsIGdyb3VwLCBmbGFncyk7CisJCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciwgYnV0IHByb3BhZ2F0ZQorCQkgKiBkZWxpdmVyeSBlcnJvcnMgaWYgTkVUTElOS19CUk9BRENBU1RfRVJST1IgZmxhZyBpcyBzZXQgKi8KKwkJZXJyID0gbmxtc2dfbXVsdGljYXN0KHNrLCBza2IsIGV4Y2x1ZGVfcGlkLCBncm91cCwgZmxhZ3MpOwogCX0KIAotCWlmIChyZXBvcnQpCi0JCWVyciA9IG5sbXNnX3VuaWNhc3Qoc2ssIHNrYiwgcGlkKTsKKwlpZiAocmVwb3J0KSB7CisJCWludCBlcnIyOworCisJCWVycjIgPSBubG1zZ191bmljYXN0KHNrLCBza2IsIHBpZCk7CisJCWlmICghZXJyIHx8IGVyciA9PSAtRVNSQ0gpCisJCQllcnIgPSBlcnIyOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0xODQ2LDEyICsxOTA0LDEyIEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsCiAJCQkgInNrICAgICAgIEV0aCBQaWQgICAgR3JvdXBzICAgIgotCQkJICJSbWVtICAgICBXbWVtICAgICBEdW1wICAgICBMb2Nrc1xuIik7CisJCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzICAgICBEcm9wc1xuIik7CiAJZWxzZSB7CiAJCXN0cnVjdCBzb2NrICpzID0gdjsKIAkJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHMpOwogCi0JCXNlcV9wcmludGYoc2VxLCAiJXAgJS0zZCAlLTZkICUwOHggJS04ZCAlLThkICVwICVkXG4iLAorCQlzZXFfcHJpbnRmKHNlcSwgIiVwICUtM2QgJS02ZCAlMDh4ICUtOGQgJS04ZCAlcCAlLThkICUtOGRcbiIsCiAJCQkgICBzLAogCQkJICAgcy0+c2tfcHJvdG9jb2wsCiAJCQkgICBubGstPnBpZCwKQEAgLTE4NTksNyArMTkxNyw4IEBACiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcm1lbV9hbGxvYyksCiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfd21lbV9hbGxvYyksCiAJCQkgICBubGstPmNiLAotCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JlZmNudCkKKwkJCSAgIGF0b21pY19yZWFkKCZzLT5za19yZWZjbnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX2Ryb3BzKQogCQkJKTsKIAogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCmluZGV4IGNiYTc4NDkuLjZkOWM1OGUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKKysrIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwpAQCAtMTAzNyw2ICsxMDM3LDEwIEBACiAJdW5zaWduZWQgY2hhciAqYXNtcHRyOwogCWludCBzaXplOwogCisJLyogTmV0cm9tIGVtcHR5IGRhdGEgZnJhbWUgaGFzIG5vIG1lYW5pbmcgOiBkb24ndCBzZW5kICovCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19FT1J8TVNHX0NNU0dfQ09NUEFUKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTExNjcsNiArMTE3MSwxMSBAQAogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJY29waWVkICAgICA9IHNrYi0+bGVuOwogCisJLyogTmV0Um9tIGVtcHR5IGRhdGEgZnJhbWUgaGFzIG5vIG1lYW5pbmcgOiBpZ25vcmUgaXQgKi8KKwlpZiAoY29waWVkID09IDApIHsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKGNvcGllZCA+IHNpemUpIHsKIAkJY29waWVkID0gc2l6ZTsKIAkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOwpAQCAtMTE4Miw3ICsxMTkxLDcgQEAKIAogCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2YoKnNheCk7CiAKLQlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKK291dDoJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CiAKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBjb3BpZWQ7CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAxZmM0YTc4Li43NDc3NmRlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTU4NCw3ICs1ODQsNyBAQAogCQlza2ItPmxlbiA9IHNrYl9sZW47CiAJfQogZHJvcDoKLQlrZnJlZV9za2Ioc2tiKTsKKwljb25zdW1lX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCkBAIC03NTYsOCArNzU2LDcgQEAKIAlzcGluX3VubG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CiAKIAlzay0+c2tfZGF0YV9yZWFkeShzaywgMCk7Ci0JaWYgKGNvcHlfc2tiKQotCQlrZnJlZV9za2IoY29weV9za2IpOworCWtmcmVlX3NrYihjb3B5X3NrYik7CiAJZ290byBkcm9wX25fcmVzdG9yZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKaW5kZXggODE3OTVlYS4uYTY2MmU2MiAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYworKysgYi9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCkBAIC0zODIsOSArMzgyLDggQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcGhvbmV0X3BhY2tldF90eXBlID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwaG9uZXRfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX1BIT05FVCksCi0JLmRldiA9IE5VTEwsCiAJLmZ1bmMgPSBwaG9uZXRfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwppbmRleCAxY2VlYTFmLi5jZWM0ZTU5IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYworKysgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwpAQCAtNDcsOCArNDcsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgZGV2X25ldChkZXYpLCAwLAotCQkJICBSVE5MR1JQX1BIT05FVF9JRkFERFIsIE5VTEwsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgZGV2X25ldChkZXYpLCAwLAorCQkgICAgUlROTEdSUF9QSE9ORVRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihkZXZfbmV0KGRldiksIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvS2NvbmZpZyBiL25ldC9yZHMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY3NzNiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKKworY29uZmlnIFJEUworCXRyaXN0YXRlICJSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSU5FVCAmJiBJTkZJTklCQU5EX0lQT0lCICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSU5GSU5JQkFORCAmJiBJTkZJTklCQU5EX0FERFJfVFJBTlMKKwktLS1oZWxwLS0tCisJICBSRFMgcHJvdmlkZXMgcmVsaWFibGUsIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMKKwkgIG92ZXIgSW5maW5pYmFuZC4KKworY29uZmlnIFJEU19ERUJVRworICAgICAgICBib29sICJEZWJ1Z2dpbmcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBSRFMKKyAgICAgICAgZGVmYXVsdCBuCisKZGlmZiAtLWdpdCBhL25ldC9yZHMvTWFrZWZpbGUgYi9uZXQvcmRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjI3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK29iai0kKENPTkZJR19SRFMpICs9IHJkcy5vCityZHMteSA6PQlhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXAorCQkJcmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcCisJCQlsb29wLm8gcGFnZS5vIHJkbWEubyBcCisJCQlyZG1hX3RyYW5zcG9ydC5vIFwKKwkJCWliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFwKKwkJCWliX3N5c2N0bC5vIGliX3JkbWEubyBcCisJCQlpdy5vIGl3X2NtLm8gaXdfcmVjdi5vIGl3X3JpbmcubyBpd19zZW5kLm8gaXdfc3RhdHMubyBcCisJCQlpd19zeXNjdGwubyBpd19yZG1hLm8KKworaWZlcSAoJChDT05GSUdfUkRTX0RFQlVHKSwgeSkKK0VYVFJBX0NGTEFHUyArPSAtRERFQlVHCitlbmRpZgorCmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGNmMTZmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9hZl9yZHMuYwpAQCAtMCwwICsxLDU4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJyZG1hX3RyYW5zcG9ydC5oIgorCisvKiB0aGlzIGlzIGp1c3QgdXNlZCBmb3Igc3RhdHMgZ2F0aGVyaW5nIDovICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19zb2NrX2xvY2spOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX3NvY2tfY291bnQ7CitzdGF0aWMgTElTVF9IRUFEKHJkc19zb2NrX2xpc3QpOworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX3BvbGxfd2FpdHEpOworCisvKgorICogVGhpcyBpcyBjYWxsZWQgYXMgdGhlIGZpbmFsIGRlc2NyaXB0b3IgcmVmZXJlbmNpbmcgdGhpcyBzb2NrZXQgaXMgY2xvc2VkLgorICogV2UgaGF2ZSB0byB1bmJpbmQgdGhlIHNvY2tldCBzbyB0aGF0IGFub3RoZXIgc29ja2V0IGNhbiBiZSBib3VuZCB0byB0aGUKKyAqIGFkZHJlc3MgaXQgd2FzIHVzaW5nLgorICoKKyAqIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCByYWNpbmcgd2l0aCB0aGUgaW5jb21pbmcgcGF0aC4gIHNvY2tfb3JwaGFuKCkKKyAqIHNldHMgU09DS19ERUFEIGFuZCB3ZSB1c2UgdGhhdCBhcyBhbiBpbmRpY2F0b3IgdG8gdGhlIHJ4IHBhdGggdGhhdCBuZXcKKyAqIG1lc3NhZ2VzIHNob3VsZG4ndCBiZSBxdWV1ZWQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoc2sgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlycyA9IHJkc19za190b19ycyhzayk7CisKKwlzb2NrX29ycGhhbihzayk7CisJLyogTm90ZSAtIHJkc19jbGVhcl9yZWN2X3F1ZXVlIGdyYWJzIHJzX3JlY3ZfbG9jaywgc28KKwkgKiB0aGF0IGVuc3VyZXMgdGhlIHJlY3YgcGF0aCBoYXMgY29tcGxldGVkIG1lc3NpbmcKKwkgKiB3aXRoIHRoZSBzb2NrZXQuICovCisJcmRzX2NsZWFyX3JlY3ZfcXVldWUocnMpOworCXJkc19jb25nX3JlbW92ZV9zb2NrZXQocnMpOworCXJkc19yZW1vdmVfYm91bmQocnMpOworCXJkc19zZW5kX2Ryb3BfdG8ocnMsIE5VTEwpOworCXJkc19yZG1hX2Ryb3Bfa2V5cyhycyk7CisJcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZycy0+cnNfaXRlbSk7CisJcmRzX3NvY2tfY291bnQtLTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlzb2NrLT5zayA9IE5VTEw7CisJc29ja19wdXQoc2spOworb3V0OgorCXJldHVybiAwOworfQorCisvKgorICogQ2FyZWZ1bCBub3QgdG8gcmFjZSB3aXRoIHJkc19yZWxlYXNlIC0+IHNvY2tfb3JwaGFuIHdoaWNoIGNsZWFycyBza19zbGVlcC4KKyAqIF9iaCgpIGlzbid0IE9LIGhlcmUsIHdlJ3JlIGNhbGxlZCBmcm9tIGludGVycnVwdCBoYW5kbGVycy4gIEl0J3MgcHJvYmFibHkgT0sKKyAqIHRvIHdha2UgdGhlIHdhaXRxdWV1ZSBhZnRlciBza19zbGVlcCBpcyBjbGVhciBhcyB3ZSBob2xkIGEgc29jayByZWYsIGJ1dAorICogdGhpcyBzZWVtcyBtb3JlIGNvbnNlcnZhdGl2ZS4KKyAqIE5CIC0gbm9ybWFsbHksIG9uZSB3b3VsZCB1c2Ugc2tfY2FsbGJhY2tfbG9jayBmb3IgdGhpcywgYnV0IHdlIGNhbgorICogZ2V0IGhlcmUgZnJvbSBpbnRlcnJ1cHRzLCB3aGVyZWFzIHRoZSBuZXR3b3JrIGNvZGUgZ3JhYnMgc2tfY2FsbGJhY2tfbG9jaworICogd2l0aCBfbG9ja19iaCBvbmx5IC0gc28gcmVseWluZyBvbiBza19jYWxsYmFja19sb2NrIGludHJvZHVjZXMgbGl2ZWxvY2tzLgorICovCit2b2lkIHJkc193YWtlX3NrX3NsZWVwKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJX19yZHNfd2FrZV9za19zbGVlcChyZHNfcnNfdG9fc2socnMpKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJICAgICAgIGludCAqdWFkZHJfbGVuLCBpbnQgcGVlcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNvY2stPnNrKTsKKworCW1lbXNldChzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOworCisJLyogcmFjZXksIGRvbid0IGNhcmUgKi8KKwlpZiAocGVlcikgeworCQlpZiAoIXJzLT5yc19jb25uX2FkZHIpCisJCQlyZXR1cm4gLUVOT1RDT05OOworCisJCXNpbi0+c2luX3BvcnQgPSBycy0+cnNfY29ubl9wb3J0OworCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJzLT5yc19jb25uX2FkZHI7CisJfSBlbHNlIHsKKwkJc2luLT5zaW5fcG9ydCA9IHJzLT5yc19ib3VuZF9wb3J0OworCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJzLT5yc19ib3VuZF9hZGRyOworCX0KKworCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisKKwkqdWFkZHJfbGVuID0gc2l6ZW9mKCpzaW4pOworCXJldHVybiAwOworfQorCisvKgorICogUkRTJyBwb2xsIGlzIHdpdGhvdXQgYSBkb3VidCB0aGUgbGVhc3QgaW50dWl0aXZlIHBhcnQgb2YgdGhlIGludGVyZmFjZSwKKyAqIGFzIFBPTExJTiBhbmQgUE9MTE9VVCBkbyBub3QgYmVoYXZlIGVudGlyZWx5IGFzIHlvdSB3b3VsZCBleHBlY3QgZnJvbQorICogYSBuZXR3b3JrIHByb3RvY29sLgorICoKKyAqIFBPTExJTiBpcyBhc3NlcnRlZCBpZgorICogIC0JdGhlcmUgaXMgZGF0YSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZS4KKyAqICAtCXRvIHNpZ25hbCB0aGF0IGEgcHJldmlvdXNseSBjb25nZXN0ZWQgZGVzdGluYXRpb24gbWF5IGhhdmUgYmVjb21lCisgKgl1bmNvbmdlc3RlZAorICogIC0JQSBub3RpZmljYXRpb24gaGFzIGJlZW4gcXVldWVkIHRvIHRoZSBzb2NrZXQgKHRoaXMgY2FuIGJlIGEgY29uZ2VzdGlvbgorICoJdXBkYXRlLCBvciBhIFJETUEgY29tcGxldGlvbikuCisgKgorICogUE9MTE9VVCBpcyBhc3NlcnRlZCBpZiB0aGVyZSBpcyByb29tIG9uIHRoZSBzZW5kIHF1ZXVlLiBUaGlzIGRvZXMgbm90IG1lYW4KKyAqIGhvd2V2ZXIsIHRoYXQgdGhlIG5leHQgc2VuZG1zZygpIGNhbGwgd2lsbCBzdWNjZWVkLiBJZiB0aGUgYXBwbGljYXRpb24gdHJpZXMKKyAqIHRvIHNlbmQgdG8gYSBjb25nZXN0ZWQgZGVzdGluYXRpb24sIHRoZSBzeXN0ZW0gY2FsbCBtYXkgc3RpbGwgZmFpbCAoYW5kCisgKiByZXR1cm4gRU5PQlVGUykuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb2xsX3dhaXQoZmlsZSwgc2stPnNrX3NsZWVwLCB3YWl0KTsKKworCXBvbGxfd2FpdChmaWxlLCAmcmRzX3BvbGxfd2FpdHEsIHdhaXQpOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXJzLT5yc19jb25nX21vbml0b3IpIHsKKwkJLyogV2hlbiBhIGNvbmdlc3Rpb24gbWFwIHdhcyB1cGRhdGVkLCB3ZSBzaWduYWwgUE9MTElOIGZvcgorCQkgKiAiaGlzdG9yaWNhbCIgcmVhc29ucy4gQXBwbGljYXRpb25zIGNhbiBhbHNvIHBvbGwgZm9yCisJCSAqIFdSQkFORCBpbnN0ZWFkLiAqLworCQlpZiAocmRzX2NvbmdfdXBkYXRlZF9zaW5jZSgmcnMtPnJzX2NvbmdfdHJhY2spKQorCQkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSB8IFBPTExXUkJBTkQpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KQorCQkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSk7CisJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJfQorCWlmICghbGlzdF9lbXB0eSgmcnMtPnJzX3JlY3ZfcXVldWUpCisJIHx8ICFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKSkKKwkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSk7CisJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPCByZHNfc2tfc25kYnVmKHJzKSkKKwkJbWFzayB8PSAoUE9MTE9VVCB8IFBPTExXUk5PUk0pOworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IHJkc19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IHJkc19jYW5jZWxfc2VudF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJICAgICAgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCWludCByZXQgPSAwOworCisJLyogcmFjaW5nIHdpdGggYW5vdGhlciB0aHJlYWQgYmluZGluZyBzZWVtcyBvayBoZXJlICovCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcigmc2luLCBvcHR2YWwsIHNpemVvZihzaW4pKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfc2VuZF9kcm9wX3RvKHJzLCAmc2luKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19zZXRfYm9vbF9vcHRpb24odW5zaWduZWQgY2hhciAqb3B0dmFyLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJICAgICAgIGludCBvcHRsZW4pCit7CisJaW50IHZhbHVlOworCisJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZ2V0X3VzZXIodmFsdWUsIChpbnQgX191c2VyICopIG9wdHZhbCkpCisJCXJldHVybiAtRUZBVUxUOworCSpvcHR2YXIgPSAhIXZhbHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJkc19jb25nX21vbml0b3Ioc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCSAgICBpbnQgb3B0bGVuKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZHNfc2V0X2Jvb2xfb3B0aW9uKCZycy0+cnNfY29uZ19tb25pdG9yLCBvcHR2YWwsIG9wdGxlbik7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChycy0+cnNfY29uZ19tb25pdG9yKSB7CisJCQlyZHNfY29uZ19hZGRfc29ja2V0KHJzKTsKKwkJfSBlbHNlIHsKKwkJCXJkc19jb25nX3JlbW92ZV9zb2NrZXQocnMpOworCQkJcnMtPnJzX2NvbmdfbWFzayA9IDA7CisJCQlycy0+cnNfY29uZ19ub3RpZnkgPSAwOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNvY2stPnNrKTsKKwlpbnQgcmV0OworCisJaWYgKGxldmVsICE9IFNPTF9SRFMpIHsKKwkJcmV0ID0gLUVOT1BST1RPT1BUOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFJEU19DQU5DRUxfU0VOVF9UTzoKKwkJcmV0ID0gcmRzX2NhbmNlbF9zZW50X3RvKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX0dFVF9NUjoKKwkJcmV0ID0gcmRzX2dldF9tcihycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19GUkVFX01SOgorCQlyZXQgPSByZHNfZnJlZV9tcihycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19SRUNWRVJSOgorCQlyZXQgPSByZHNfc2V0X2Jvb2xfb3B0aW9uKCZycy0+cnNfcmVjdmVyciwgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19DT05HX01PTklUT1I6CisJCXJldCA9IHJkc19jb25nX21vbml0b3IocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1BST1RPT1BUOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNvY2stPnNrKTsKKwlpbnQgcmV0ID0gLUVOT1BST1RPT1BULCBsZW47CisKKwlpZiAobGV2ZWwgIT0gU09MX1JEUykKKwkJZ290byBvdXQ7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgUkRTX0lORk9fRklSU1QgLi4uIFJEU19JTkZPX0xBU1Q6CisJCXJldCA9IHJkc19pbmZvX2dldHNvY2tvcHQoc29jaywgb3B0bmFtZSwgb3B0dmFsLAorCQkJCQkgIG9wdGxlbik7CisJCWJyZWFrOworCisJY2FzZSBSRFNfUkVDVkVSUjoKKwkJaWYgKGxlbiA8IHNpemVvZihpbnQpKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJZWxzZQorCQlpZiAocHV0X3VzZXIocnMtPnJzX3JlY3ZlcnIsIChpbnQgX191c2VyICopIG9wdHZhbCkKKwkJIHx8IHB1dF91c2VyKHNpemVvZihpbnQpLCBvcHRsZW4pKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IHJkc19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCSAgICAgICBpbnQgYWRkcl9sZW4sIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlpbnQgcmV0ID0gMDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCXJldCA9IC1FQUZOT1NVUFBPUlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKSkgeworCQlyZXQgPSAtRURFU1RBRERSUkVROworCQlnb3RvIG91dDsKKwl9CisKKwlycy0+cnNfY29ubl9hZGRyID0gc2luLT5zaW5fYWRkci5zX2FkZHI7CisJcnMtPnJzX2Nvbm5fcG9ydCA9IHNpbi0+c2luX3BvcnQ7CisKK291dDoKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG8gcmRzX3Byb3RvID0geworCS5uYW1lCSAgPSAiUkRTIiwKKwkub3duZXIJICA9IFRISVNfTU9EVUxFLAorCS5vYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmRzX3NvY2spLAorfTsKKworc3RhdGljIHN0cnVjdCBwcm90b19vcHMgcmRzX3Byb3RvX29wcyA9IHsKKwkuZmFtaWx5ID0JQUZfUkRTLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5yZWxlYXNlID0JcmRzX3JlbGVhc2UsCisJLmJpbmQgPQkJcmRzX2JpbmQsCisJLmNvbm5lY3QgPQlyZHNfY29ubmVjdCwKKwkuc29ja2V0cGFpciA9CXNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0ID0Jc29ja19ub19hY2NlcHQsCisJLmdldG5hbWUgPQlyZHNfZ2V0bmFtZSwKKwkucG9sbCA9CQlyZHNfcG9sbCwKKwkuaW9jdGwgPQlyZHNfaW9jdGwsCisJLmxpc3RlbiA9CXNvY2tfbm9fbGlzdGVuLAorCS5zaHV0ZG93biA9CXNvY2tfbm9fc2h1dGRvd24sCisJLnNldHNvY2tvcHQgPQlyZHNfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdCA9CXJkc19nZXRzb2Nrb3B0LAorCS5zZW5kbXNnID0JcmRzX3NlbmRtc2csCisJLnJlY3Ztc2cgPQlyZHNfcmVjdm1zZywKKwkubW1hcCA9CQlzb2NrX25vX21tYXAsCisJLnNlbmRwYWdlID0Jc29ja19ub19zZW5kcGFnZSwKK307CisKK3N0YXRpYyBpbnQgX19yZHNfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrICpzaywgaW50IHByb3RvY29sKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJkc19zb2NrICpyczsKKworCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKKwlzb2NrLT5vcHMJCT0gJnJkc19wcm90b19vcHM7CisJc2stPnNrX3Byb3RvY29sCQk9IHByb3RvY29sOworCisJcnMgPSByZHNfc2tfdG9fcnMoc2spOworCXNwaW5fbG9ja19pbml0KCZycy0+cnNfbG9jayk7CisJcndsb2NrX2luaXQoJnJzLT5yc19yZWN2X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfc2VuZF9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19yZWN2X3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX25vdGlmeV9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19jb25nX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZycy0+cnNfcmRtYV9sb2NrKTsKKwlycy0+cnNfcmRtYV9rZXlzID0gUkJfUk9PVDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcnMtPnJzX2l0ZW0sICZyZHNfc29ja19saXN0KTsKKwlyZHNfc29ja19jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJkc19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpCit7CisJc3RydWN0IHNvY2sgKnNrOworCisJaWYgKHNvY2stPnR5cGUgIT0gU09DS19TRVFQQUNLRVQgfHwgcHJvdG9jb2wpCisJCXJldHVybiAtRVNPQ0tUTk9TVVBQT1JUOworCisJc2sgPSBza19hbGxvYyhuZXQsIEFGX1JEUywgR0ZQX0FUT01JQywgJnJkc19wcm90byk7CisJaWYgKCFzaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gX19yZHNfY3JlYXRlKHNvY2ssIHNrLCBwcm90b2NvbCk7Cit9CisKK3ZvaWQgcmRzX3NvY2tfYWRkcmVmKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworfQorCit2b2lkIHJkc19zb2NrX3B1dChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgcmRzX2ZhbWlseV9vcHMgPSB7CisJLmZhbWlseSA9CUFGX1JEUywKKwkuY3JlYXRlID0JcmRzX2NyZWF0ZSwKKwkub3duZXIJPQlUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyB2b2lkIHJkc19zb2NrX2luY19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgcmRzX2luY29taW5nICppbmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOworCisJbGVuIC89IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShycywgJnJkc19zb2NrX2xpc3QsIHJzX2l0ZW0pIHsKKwkJc2sgPSByZHNfcnNfdG9fc2socnMpOworCQlyZWFkX2xvY2soJnJzLT5yc19yZWN2X2xvY2spOworCisJCS8qIFhYWCB0b28gbGF6eSB0byBtYWludGFpbiBjb3VudHMuLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluYywgJnJzLT5yc19yZWN2X3F1ZXVlLCBpX2l0ZW0pIHsKKwkJCXRvdGFsKys7CisJCQlpZiAodG90YWwgPD0gbGVuKQorCQkJCXJkc19pbmNfaW5mb19jb3B5KGluYywgaXRlciwgaW5jLT5pX3NhZGRyLAorCQkJCQkJICBycy0+cnNfYm91bmRfYWRkciwgMSk7CisJCX0KKworCQlyZWFkX3VubG9jaygmcnMtPnJzX3JlY3ZfbG9jayk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJbGVucy0+bnIgPSB0b3RhbDsKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgcmRzX3NvY2tfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXN0cnVjdCByZHNfaW5mb19zb2NrZXQgc2luZm87CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGVuIC89IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fc29ja2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlpZiAobGVuIDwgcmRzX3NvY2tfY291bnQpCisJCWdvdG8gb3V0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShycywgJnJkc19zb2NrX2xpc3QsIHJzX2l0ZW0pIHsKKwkJc2luZm8uc25kYnVmID0gcmRzX3NrX3NuZGJ1Zihycyk7CisJCXNpbmZvLnJjdmJ1ZiA9IHJkc19za19yY3ZidWYocnMpOworCQlzaW5mby5ib3VuZF9hZGRyID0gcnMtPnJzX2JvdW5kX2FkZHI7CisJCXNpbmZvLmNvbm5lY3RlZF9hZGRyID0gcnMtPnJzX2Nvbm5fYWRkcjsKKwkJc2luZm8uYm91bmRfcG9ydCA9IHJzLT5yc19ib3VuZF9wb3J0OworCQlzaW5mby5jb25uZWN0ZWRfcG9ydCA9IHJzLT5yc19jb25uX3BvcnQ7CisJCXNpbmZvLmludW0gPSBzb2NrX2lfaW5vKHJkc19yc190b19zayhycykpOworCisJCXJkc19pbmZvX2NvcHkoaXRlciwgJnNpbmZvLCBzaXplb2Yoc2luZm8pKTsKKwl9CisKK291dDoKKwlsZW5zLT5uciA9IHJkc19zb2NrX2NvdW50OworCWxlbnMtPmVhY2ggPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX3NvY2tldCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByZHNfZXhpdCh2b2lkKQoreworCXJkc19yZG1hX2V4aXQoKTsKKwlzb2NrX3VucmVnaXN0ZXIocmRzX2ZhbWlseV9vcHMuZmFtaWx5KTsKKwlwcm90b191bnJlZ2lzdGVyKCZyZHNfcHJvdG8pOworCXJkc19jb25uX2V4aXQoKTsKKwlyZHNfY29uZ19leGl0KCk7CisJcmRzX3N5c2N0bF9leGl0KCk7CisJcmRzX3RocmVhZHNfZXhpdCgpOworCXJkc19zdGF0c19leGl0KCk7CisJcmRzX3BhZ2VfZXhpdCgpOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TT0NLRVRTLCByZHNfc29ja19pbmZvKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVDVl9NRVNTQUdFUywgcmRzX3NvY2tfaW5jX2luZm8pOworfQorbW9kdWxlX2V4aXQocmRzX2V4aXQpOworCitzdGF0aWMgaW50IF9faW5pdCByZHNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZHNfY29ubl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmV0ID0gcmRzX3RocmVhZHNfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Nvbm47CisJcmV0ID0gcmRzX3N5c2N0bF9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdGhyZWFkczsKKwlyZXQgPSByZHNfc3RhdHNfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N5c2N0bDsKKwlyZXQgPSBwcm90b19yZWdpc3RlcigmcmRzX3Byb3RvLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zdGF0czsKKwlyZXQgPSBzb2NrX3JlZ2lzdGVyKCZyZHNfZmFtaWx5X29wcyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcHJvdG87CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NPQ0tFVFMsIHJkc19zb2NrX2luZm8pOworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVDVl9NRVNTQUdFUywgcmRzX3NvY2tfaW5jX2luZm8pOworCisJLyogaWIvaXdhcnAgdHJhbnNwb3J0cyBjdXJyZW50bHkgY29tcGlsZWQtaW4gKi8KKwlyZXQgPSByZHNfcmRtYV9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc29jazsKKwlnb3RvIG91dDsKKworb3V0X3NvY2s6CisJc29ja191bnJlZ2lzdGVyKHJkc19mYW1pbHlfb3BzLmZhbWlseSk7CitvdXRfcHJvdG86CisJcHJvdG9fdW5yZWdpc3RlcigmcmRzX3Byb3RvKTsKK291dF9zdGF0czoKKwlyZHNfc3RhdHNfZXhpdCgpOworb3V0X3N5c2N0bDoKKwlyZHNfc3lzY3RsX2V4aXQoKTsKK291dF90aHJlYWRzOgorCXJkc190aHJlYWRzX2V4aXQoKTsKK291dF9jb25uOgorCXJkc19jb25uX2V4aXQoKTsKKwlyZHNfY29uZ19leGl0KCk7CisJcmRzX3BhZ2VfZXhpdCgpOworb3V0OgorCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChyZHNfaW5pdCk7CisKKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICI0LjAiCisjZGVmaW5lIERSVl9SRUxEQVRFICAgICAiRmViIDEyLCAyMDA5IgorCitNT0RVTEVfQVVUSE9SKCJPcmFjbGUgQ29ycG9yYXRpb24gPHJkcy1kZXZlbEBvc3Mub3JhY2xlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkRTOiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIgorCQkgICAiIHYiIERSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIikiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9BTElBU19ORVRQUk9UTyhQRl9SRFMpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9iaW5kLmMgYi9uZXQvcmRzL2JpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTdjYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9iaW5kLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIFhYWCB0aGlzIHByb2JhYmx5IHN0aWxsIG5lZWRzIG1vcmUgd29yay4uIG5vIElOQUREUl9BTlksIGFuZCByYnRyZWVzIGFyZW4ndAorICogcGFydGljdWxhcmx5IHppcHB5LgorICoKKyAqIFRoaXMgaXMgbm93IGNhbGxlZCBmb3IgZXZlcnkgaW5jb21pbmcgZnJhbWUgc28gd2UgYXJndWFibHkgY2FyZSBtdWNoIG1vcmUKKyAqIGFib3V0IGl0IHRoYW4gd2UgdXNlZCB0by4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfYmluZF9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByZHNfYmluZF90cmVlID0gUkJfUk9PVDsKKworc3RhdGljIHN0cnVjdCByZHNfc29jayAqcmRzX2JpbmRfdHJlZV93YWxrKF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydCwKKwkJCQkJICAgc3RydWN0IHJkc19zb2NrICppbnNlcnQpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJkc19iaW5kX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXU2NCBjbXA7CisJdTY0IG5lZWRsZSA9ICgodTY0KWJlMzJfdG9fY3B1KGFkZHIpIDw8IDMyKSB8IGJlMTZfdG9fY3B1KHBvcnQpOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQlycyA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHJkc19zb2NrLCByc19ib3VuZF9ub2RlKTsKKworCQljbXAgPSAoKHU2NCliZTMyX3RvX2NwdShycy0+cnNfYm91bmRfYWRkcikgPDwgMzIpIHwKKwkJICAgICAgYmUxNl90b19jcHUocnMtPnJzX2JvdW5kX3BvcnQpOworCisJCWlmIChuZWVkbGUgPCBjbXApCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG5lZWRsZSA+IGNtcCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiByczsKKwl9CisKKwlpZiAoaW5zZXJ0KSB7CisJCXJiX2xpbmtfbm9kZSgmaW5zZXJ0LT5yc19ib3VuZF9ub2RlLCBwYXJlbnQsIHApOworCQlyYl9pbnNlcnRfY29sb3IoJmluc2VydC0+cnNfYm91bmRfbm9kZSwgJnJkc19iaW5kX3RyZWUpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcmRzX3NvY2sgYm91bmQgYXQgdGhlIGdpdmVuIGxvY2FsIGFkZHJlc3MuCisgKgorICogVGhlIHJ4IHBhdGggY2FuIHJhY2Ugd2l0aCByZHNfcmVsZWFzZS4gIFdlIG5vdGljZSBpZiByZHNfcmVsZWFzZSgpIGhhcworICogbWFya2VkIHRoaXMgc29ja2V0IGFuZCBkb24ndCByZXR1cm4gYSBycyByZWYgdG8gdGhlIHJ4IHBhdGguCisgKi8KK3N0cnVjdCByZHNfc29jayAqcmRzX2ZpbmRfYm91bmQoX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KQoreworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisJcnMgPSByZHNfYmluZF90cmVlX3dhbGsoYWRkciwgcG9ydCwgTlVMTCk7CisJaWYgKHJzICYmICFzb2NrX2ZsYWcocmRzX3JzX3RvX3NrKHJzKSwgU09DS19ERUFEKSkKKwkJcmRzX3NvY2tfYWRkcmVmKHJzKTsKKwllbHNlCisJCXJzID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlyZHNkZWJ1ZygicmV0dXJuaW5nIHJzICVwIGZvciAlcEk0OiV1XG4iLCBycywgJmFkZHIsCisJCW50b2hzKHBvcnQpKTsKKwlyZXR1cm4gcnM7Cit9CisKKy8qIHJldHVybnMgLXZlIGVycm5vIG9yICt2ZSBwb3J0ICovCitzdGF0aWMgaW50IHJkc19hZGRfYm91bmQoc3RydWN0IHJkc19zb2NrICpycywgX19iZTMyIGFkZHIsIF9fYmUxNiAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUFERFJJTlVTRTsKKwl1MTYgcm92ZXIsIGxhc3Q7CisKKwlpZiAoKnBvcnQgIT0gMCkgeworCQlyb3ZlciA9IGJlMTZfdG9fY3B1KCpwb3J0KTsKKwkJbGFzdCA9IHJvdmVyOworCX0gZWxzZSB7CisJCXJvdmVyID0gbWF4X3QodTE2LCBuZXRfcmFuZG9tKCksIDIpOworCQlsYXN0ID0gcm92ZXIgLSAxOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlkbyB7CisJCWlmIChyb3ZlciA9PSAwKQorCQkJcm92ZXIrKzsKKwkJaWYgKHJkc19iaW5kX3RyZWVfd2FsayhhZGRyLCBjcHVfdG9fYmUxNihyb3ZlciksIHJzKSA9PSBOVUxMKSB7CisJCQkqcG9ydCA9IGNwdV90b19iZTE2KHJvdmVyKTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHJvdmVyKysgIT0gbGFzdCk7CisKKwlpZiAocmV0ID09IDApICB7CisJCXJzLT5yc19ib3VuZF9hZGRyID0gYWRkcjsKKwkJcnMtPnJzX2JvdW5kX3BvcnQgPSAqcG9ydDsKKwkJcmRzX3NvY2tfYWRkcmVmKHJzKTsKKworCQlyZHNkZWJ1ZygicnMgJXAgYmluZGluZyB0byAlcEk0OiVkXG4iLAorCQkgIHJzLCAmYWRkciwgKGludCludG9ocygqcG9ydCkpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX3JlbW92ZV9ib3VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyKSB7CisJCXJkc2RlYnVnKCJycyAlcCB1bmJpbmRpbmcgZnJvbSAlcEk0OiVkXG4iLAorCQkgIHJzLCAmcnMtPnJzX2JvdW5kX2FkZHIsCisJCSAgbnRvaHMocnMtPnJzX2JvdW5kX3BvcnQpKTsKKworCQlyYl9lcmFzZSgmcnMtPnJzX2JvdW5kX25vZGUsICZyZHNfYmluZF90cmVlKTsKKwkJcmRzX3NvY2tfcHV0KHJzKTsKKwkJcnMtPnJzX2JvdW5kX2FkZHIgPSAwOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKK30KKworaW50IHJkc19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJaW50IHJldCA9IDA7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKGFkZHJfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIHx8CisJICAgIHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUIHx8CisJICAgIHJzLT5yc19ib3VuZF9hZGRyIHx8CisJICAgIHNpbi0+c2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHJkc19hZGRfYm91bmQocnMsIHNpbi0+c2luX2FkZHIuc19hZGRyLCAmc2luLT5zaW5fcG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwl0cmFucyA9IHJkc190cmFuc19nZXRfcHJlZmVycmVkKHNpbi0+c2luX2FkZHIuc19hZGRyKTsKKwlpZiAodHJhbnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRUFERFJOT1RBVkFJTDsKKwkJcmRzX3JlbW92ZV9ib3VuZChycyk7CisJCWdvdG8gb3V0OworCX0KKworCXJzLT5yc190cmFuc3BvcnQgPSB0cmFuczsKKwlyZXQgPSAwOworCitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25nLmMgYi9uZXQvcmRzL2NvbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBlNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9jb25nLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCisvKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgc2lkZSBvZiB0aGUgdW5jb252ZW50aW9uYWwgY29uZ2VzdGlvbgorICogbWFuYWdlbWVudCBpbiBSRFMuCisgKgorICogTWVzc2FnZXMgd2FpdGluZyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBvbiB0aGUgcmVjZWl2aW5nIHNvY2tldCBhcmUgYWNjb3VudGVkCisgKiBhZ2FpbnN0IHRoZSBzb2NrZXRzIFNPX1JDVkJVRiBvcHRpb24gdmFsdWUuICBPbmx5IHRoZSBwYXlsb2FkIGJ5dGVzIGluIHRoZQorICogbWVzc2FnZSBhcmUgYWNjb3VudGVkIGZvci4gIElmIHRoZSBudW1iZXIgb2YgYnl0ZXMgcXVldWVkIGVxdWFscyBvciBleGNlZWRzCisgKiByY3ZidWYgdGhlbiB0aGUgc29ja2V0IGlzIGNvbmdlc3RlZC4gIEFsbCBzZW5kcyBhdHRlbXB0ZWQgdG8gdGhpcyBzb2NrZXQncworICogYWRkcmVzcyBzaG91bGQgcmV0dXJuIGJsb2NrIG9yIHJldHVybiAtRVdPVUxEQkxPQ0suCisgKgorICogQXBwbGljYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSByZWFzb25hYmx5IHR1bmVkIHN1Y2ggdGhhdCB0aGlzIHNpdHVhdGlvbgorICogdmVyeSByYXJlbHkgb2NjdXJzLiAgQW4gYXBwbGljYXRpb24gZW5jb3VudGVyaW5nIHRoaXMgImJhY2stcHJlc3N1cmUiIGlzCisgKiBjb25zaWRlcmVkIGEgYnVnLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2aW5nIGVhY2ggbm9kZSBtYWludGFpbiBiaXRtYXBzIHdoaWNoIGluZGljYXRlCisgKiB3aGljaCBwb3J0cyBvbiBib3VuZCBhZGRyZXNzZXMgYXJlIGNvbmdlc3RlZC4gIEFzIHRoZSBiaXRtYXAgY2hhbmdlcyBpdCBpcworICogc2VudCB0aHJvdWdoIGFsbCB0aGUgY29ubmVjdGlvbnMgd2hpY2ggdGVybWluYXRlIGluIHRoZSBsb2NhbCBhZGRyZXNzIG9mIHRoZQorICogYml0bWFwIHdoaWNoIGNoYW5nZWQuCisgKgorICogVGhlIGJpdG1hcHMgYXJlIGFsbG9jYXRlZCBhcyBjb25uZWN0aW9ucyBhcmUgYnJvdWdodCB1cC4gIFRoaXMgYXZvaWRzCisgKiBhbGxvY2F0aW9uIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aCB3aGljaCBxdWV1ZXMgbWVzc2FnZXMgb24gc29ja2V0cy4KKyAqIFRoZSBkZW5zZSBiaXRtYXBzIGxldCB0cmFuc3BvcnRzIHNlbmQgdGhlIGVudGlyZSBiaXRtYXAgb24gYW55IGJpdG1hcCBjaGFuZ2UKKyAqIHJlYXNvbmFibHkgZWZmaWNpZW50bHkuICBUaGlzIGlzIG11Y2ggZWFzaWVyIHRvIGltcGxlbWVudCB0aGFuIHNvbWUKKyAqIGZpbmVyLWdyYWluZWQgY29tbXVuaWNhdGlvbiBvZiBwZXItcG9ydCBjb25nZXN0aW9uLiAgVGhlIHNlbmRlciBkb2VzIGEgdmVyeQorICogaW5leHBlbnNpdmUgYml0IHRlc3QgdG8gdGVzdCBpZiB0aGUgcG9ydCBpdCdzIGFib3V0IHRvIHNlbmQgdG8gaXMgY29uZ2VzdGVkCisgKiBvciBub3QuCisgKi8KKworLyoKKyAqIEludGVyYWN0aW9uIHdpdGggcG9sbCBpcyBhIHRhZCB0cmlja3kuIFdlIHdhbnQgYWxsIHByb2Nlc3NlcyBzdHVjayBpbgorICogcG9sbCB0byB3YWtlIHVwIGFuZCBjaGVjayB3aGV0aGVyIGEgY29uZ2VzdGVkIGRlc3RpbmF0aW9uIGJlY2FtZSB1bmNvbmdlc3RlZC4KKyAqIFRoZSByZWFsbHkgc2FkIHRoaW5nIGlzIHdlIGhhdmUgbm8gaWRlYSB3aGljaCBkZXN0aW5hdGlvbnMgdGhlIGFwcGxpY2F0aW9uCisgKiB3YW50cyB0byBzZW5kIHRvIC0gd2UgZG9uJ3QgZXZlbiBrbm93IHdoaWNoIHJkc19jb25uZWN0aW9ucyBhcmUgaW52b2x2ZWQuCisgKiBTbyB1bnRpbCB3ZSBpbXBsZW1lbnQgYSBtb3JlIGZsZXhpYmxlIHJkcyBwb2xsIGludGVyZmFjZSwgd2UgaGF2ZSB0byBtYWtlCisgKiBkbyB3aXRoIHRoaXM6CisgKiBXZSBtYWludGFpbiBhIGdsb2JhbCBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgY29uZ2VzdGlvbiBtYXAKKyAqIHVwZGF0ZSBpcyByZWNlaXZlZC4gRWFjaCByZHMgc29ja2V0IHRyYWNrcyB0aGlzIHZhbHVlLCBhbmQgaWYgcmRzX3BvbGwKKyAqIGZpbmRzIHRoYXQgdGhlIHNhdmVkIGdlbmVyYXRpb24gbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgZ2xvYmFsIGdlbmVyYXRpb24KKyAqIG51bWJlciwgaXQgd2FrZXMgdXAgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyBhdG9taWNfdAkJcmRzX2NvbmdfZ2VuZXJhdGlvbiA9IEFUT01JQ19JTklUKDApOworCisvKgorICogQ29uZ2VzdGlvbiBtb25pdG9yaW5nCisgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmRzX2NvbmdfbW9uaXRvcik7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhyZHNfY29uZ19tb25pdG9yX2xvY2spOworCisvKgorICogWWVzLCBhIGdsb2JhbCBsb2NrLiAgSXQncyB1c2VkIHNvIGluZnJlcXVlbnRseSB0aGF0IGl0J3Mgd29ydGgga2VlcGluZyBpdAorICogZ2xvYmFsIHRvIHNpbXBsaWZ5IHRoZSBsb2NraW5nLiAgSXQncyBvbmx5IHVzZWQgaW4gdGhlIGZvbGxvd2luZworICogY2lyY3Vtc3RhbmNlczoKKyAqCisgKiAgLSBvbiBjb25uZWN0aW9uIGJ1aWxkdXAgdG8gYXNzb2NpYXRlIGEgY29ubiB3aXRoIGl0cyBtYXBzCisgKiAgLSBvbiBtYXAgY2hhbmdlcyB0byBpbmZvcm0gY29ubnMgb2YgYSBuZXcgbWFwIHRvIHNlbmQKKyAqCisgKiAgSXQncyBzYWRseSBvcmRlcmVkIHVuZGVyIHRoZSBzb2NrZXQgY2FsbGJhY2sgbG9jayBhbmQgdGhlIGNvbm5lY3Rpb24gbG9jay4KKyAqICBSZWNlaXZlIHBhdGhzIGNhbiBtYXJrIHBvcnRzIGNvbmdlc3RlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IHNvIHRoZQorICogIGxvY2sgbWFza3MgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfY29uZ19sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByZHNfY29uZ190cmVlID0gUkJfUk9PVDsKKworc3RhdGljIHN0cnVjdCByZHNfY29uZ19tYXAgKnJkc19jb25nX3RyZWVfd2FsayhfX2JlMzIgYWRkciwKKwkJCQkJICAgICAgIHN0cnVjdCByZHNfY29uZ19tYXAgKmluc2VydCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmcmRzX2NvbmdfdHJlZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJbWFwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcmRzX2NvbmdfbWFwLCBtX3JiX25vZGUpOworCisJCWlmIChhZGRyIDwgbWFwLT5tX2FkZHIpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGFkZHIgPiBtYXAtPm1fYWRkcikKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBtYXA7CisJfQorCisJaWYgKGluc2VydCkgeworCQlyYl9saW5rX25vZGUoJmluc2VydC0+bV9yYl9ub2RlLCBwYXJlbnQsIHApOworCQlyYl9pbnNlcnRfY29sb3IoJmluc2VydC0+bV9yYl9ub2RlLCAmcmRzX2NvbmdfdHJlZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhlcmUgaXMgb25seSBldmVyIG9uZSBiaXRtYXAgZm9yIGFueSBhZGRyZXNzLiAgQ29ubmVjdGlvbnMgdHJ5IGFuZCBhbGxvY2F0ZQorICogdGhlc2UgYml0bWFwcyBpbiB0aGUgcHJvY2VzcyBnZXR0aW5nIHBvaW50ZXJzIHRvIHRoZW0uICBUaGUgYml0bWFwcyBhcmUgb25seQorICogZXZlciBmcmVlZCBhcyB0aGUgbW9kdWxlIGlzIHJlbW92ZWQgYWZ0ZXIgYWxsIGNvbm5lY3Rpb25zIGhhdmUgYmVlbiBmcmVlZC4KKyAqLworc3RhdGljIHN0cnVjdCByZHNfY29uZ19tYXAgKnJkc19jb25nX2Zyb21fYWRkcihfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisJc3RydWN0IHJkc19jb25nX21hcCAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHpwOworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbWFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19jb25nX21hcCksIEdGUF9LRVJORUwpOworCWlmIChtYXAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwltYXAtPm1fYWRkciA9IGFkZHI7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFwLT5tX3dhaXRxKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFwLT5tX2Nvbm5fbGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkRTX0NPTkdfTUFQX1BBR0VTOyBpKyspIHsKKwkJenAgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICh6cCA9PSAwKQorCQkJZ290byBvdXQ7CisJCW1hcC0+bV9wYWdlX2FkZHJzW2ldID0genA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSByZHNfY29uZ190cmVlX3dhbGsoYWRkciwgbWFwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0ID09IE5VTEwpIHsKKwkJcmV0ID0gbWFwOworCQltYXAgPSBOVUxMOworCX0KKworb3V0OgorCWlmIChtYXApIHsKKwkJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUyAmJiBtYXAtPm1fcGFnZV9hZGRyc1tpXTsgaSsrKQorCQkJZnJlZV9wYWdlKG1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKKwkJa2ZyZWUobWFwKTsKKwl9CisKKwlyZHNkZWJ1ZygibWFwICVwIGZvciBhZGRyICV4XG4iLCByZXQsIGJlMzJfdG9fY3B1KGFkZHIpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdXQgdGhlIGNvbm4gb24gaXRzIGxvY2FsIG1hcCdzIGxpc3QuICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uIGlzCisgKiByZWFsbHkgYWRkZWQgdG8gdGhlIGhhc2guICBJdCdzIG5lc3RlZCB1bmRlciB0aGUgcmRzX2Nvbm5fbG9jaywgc2FkbHkuCisgKi8KK3ZvaWQgcmRzX2NvbmdfYWRkX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBub3cgb24gbWFwICVwXG4iLCBjb25uLCBjb25uLT5jX2xjb25nKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmNvbm4tPmNfbWFwX2l0ZW0sICZjb25uLT5jX2xjb25nLT5tX2Nvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHJkc19jb25nX3JlbW92ZV9jb25uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmRzZGVidWcoInJlbW92aW5nIGNvbm4gJXAgZnJvbSBtYXAgJXBcbiIsIGNvbm4sIGNvbm4tPmNfbGNvbmcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmY29ubi0+Y19tYXBfaXRlbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworfQorCitpbnQgcmRzX2NvbmdfZ2V0X21hcHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCWNvbm4tPmNfbGNvbmcgPSByZHNfY29uZ19mcm9tX2FkZHIoY29ubi0+Y19sYWRkcik7CisJY29ubi0+Y19mY29uZyA9IHJkc19jb25nX2Zyb21fYWRkcihjb25uLT5jX2ZhZGRyKTsKKworCWlmIChjb25uLT5jX2xjb25nID09IE5VTEwgfHwgY29ubi0+Y19mY29uZyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJm1hcC0+bV9jb25uX2xpc3QsIGNfbWFwX2l0ZW0pIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfbWFwX3VwZGF0ZWQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCB1aW50NjRfdCBwb3J0bWFzaykKK3sKKwlyZHNkZWJ1Zygid2FraW5nIG1hcCAlcCBmb3IgJXBJNFxuIiwKKwkgIG1hcCwgJm1hcC0+bV9hZGRyKTsKKwlyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcmVjZWl2ZWQpOworCWF0b21pY19pbmMoJnJkc19jb25nX2dlbmVyYXRpb24pOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZtYXAtPm1fd2FpdHEpKQorCQl3YWtlX3VwKCZtYXAtPm1fd2FpdHEpOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZyZHNfcG9sbF93YWl0cSkpCisJCXdha2VfdXBfYWxsKCZyZHNfcG9sbF93YWl0cSk7CisKKwlpZiAocG9ydG1hc2sgJiYgIWxpc3RfZW1wdHkoJnJkc19jb25nX21vbml0b3IpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCByZHNfc29jayAqcnM7CisKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzLCAmcmRzX2NvbmdfbW9uaXRvciwgcnNfY29uZ19saXN0KSB7CisJCQlzcGluX2xvY2soJnJzLT5yc19sb2NrKTsKKwkJCXJzLT5yc19jb25nX25vdGlmeSB8PSAocnMtPnJzX2NvbmdfbWFzayAmIHBvcnRtYXNrKTsKKwkJCXJzLT5yc19jb25nX21hc2sgJj0gfnBvcnRtYXNrOworCQkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKwkJCWlmIChycy0+cnNfY29uZ19ub3RpZnkpCisJCQkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQl9CisJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCX0KK30KKworaW50IHJkc19jb25nX3VwZGF0ZWRfc2luY2UodW5zaWduZWQgbG9uZyAqcmVjZW50KQoreworCXVuc2lnbmVkIGxvbmcgZ2VuID0gYXRvbWljX3JlYWQoJnJkc19jb25nX2dlbmVyYXRpb24pOworCisJaWYgKGxpa2VseSgqcmVjZW50ID09IGdlbikpCisJCXJldHVybiAwOworCSpyZWNlbnQgPSBnZW47CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBXZSdyZSBjYWxsZWQgdW5kZXIgdGhlIGxvY2tpbmcgdGhhdCBwcm90ZWN0cyB0aGUgc29ja2V0cyByZWNlaXZlIGJ1ZmZlcgorICogY29uc3VtcHRpb24uICBUaGlzIG1ha2VzIGl0IGEgbG90IGVhc2llciBmb3IgdGhlIGNhbGxlciB0byBvbmx5IGNhbGwgdXMKKyAqIHdoZW4gaXQga25vd3MgdGhhdCBhbiBleGlzdGluZyBzZXQgYml0IG5lZWRzIHRvIGJlIGNsZWFyZWQsIGFuZCB2aWNlIHZlcnNhLgorICogV2UgY2FuJ3QgYmxvY2sgYW5kIHdlIG5lZWQgdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgc29ja2V0cyB3b3JraW5nIGFnYWluc3QKKyAqIHRoZSBzYW1lIHBlci1hZGRyZXNzIG1hcC4KKyAqLwordm9pZCByZHNfY29uZ19zZXRfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCisJcmRzZGVidWcoInNldHRpbmcgY29uZ2VzdGlvbiBmb3IgJXBJNDoldSBpbiBtYXAgJXBcbiIsCisJICAmbWFwLT5tX2FkZHIsIG50b2hzKHBvcnQpLCBtYXApOworCisJaSA9IGJlMTZfdG9fY3B1KHBvcnQpIC8gUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKwlvZmYgPSBiZTE2X3RvX2NwdShwb3J0KSAlIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisKKwlnZW5lcmljX19fc2V0X2xlX2JpdChvZmYsICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworfQorCit2b2lkIHJkc19jb25nX2NsZWFyX2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKworCXJkc2RlYnVnKCJjbGVhcmluZyBjb25nZXN0aW9uIGZvciAlcEk0OiV1IGluIG1hcCAlcFxuIiwKKwkgICZtYXAtPm1fYWRkciwgbnRvaHMocG9ydCksIG1hcCk7CisKKwlpID0gYmUxNl90b19jcHUocG9ydCkgLyBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCW9mZiA9IGJlMTZfdG9fY3B1KHBvcnQpICUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKworCWdlbmVyaWNfX19jbGVhcl9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKK30KKworc3RhdGljIGludCByZHNfY29uZ190ZXN0X2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKworCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCisJcmV0dXJuIGdlbmVyaWNfdGVzdF9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKK30KKwordm9pZCByZHNfY29uZ19hZGRfc29ja2V0KHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJnJzLT5yc19jb25nX2xpc3QpKQorCQlsaXN0X2FkZCgmcnMtPnJzX2NvbmdfbGlzdCwgJnJkc19jb25nX21vbml0b3IpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCByZHNfY29uZ19yZW1vdmVfc29ja2V0KHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJnJzLT5yc19jb25nX2xpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKworCS8qIHVwZGF0ZSBjb25nZXN0aW9uIG1hcCBmb3Igbm93LWNsb3NlZCBwb3J0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwltYXAgPSByZHNfY29uZ190cmVlX3dhbGsocnMtPnJzX2JvdW5kX2FkZHIsIE5VTEwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKworCWlmIChtYXAgJiYgcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBycy0+cnNfYm91bmRfcG9ydCkpIHsKKwkJcmRzX2NvbmdfY2xlYXJfYml0KG1hcCwgcnMtPnJzX2JvdW5kX3BvcnQpOworCQlyZHNfY29uZ19xdWV1ZV91cGRhdGVzKG1hcCk7CisJfQorfQorCitpbnQgcmRzX2Nvbmdfd2FpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0LCBpbnQgbm9uYmxvY2ssCisJCSAgc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlpZiAoIXJkc19jb25nX3Rlc3RfYml0KG1hcCwgcG9ydCkpCisJCXJldHVybiAwOworCWlmIChub25ibG9jaykgeworCQlpZiAocnMgJiYgcnMtPnJzX2NvbmdfbW9uaXRvcikgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkJLyogSXQgd291bGQgaGF2ZSBiZWVuIG5pY2UgdG8gaGF2ZSBhbiBhdG9taWMgc2V0X2JpdCBvbgorCQkJICogYSB1aW50NjRfdC4gKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCQkJcnMtPnJzX2NvbmdfbWFzayB8PSBSRFNfQ09OR19NT05JVE9SX01BU0sobnRvaHMocG9ydCkpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCQkJLyogVGVzdCBhZ2FpbiAtIGEgY29uZ2VzdGlvbiB1cGRhdGUgbWF5IGhhdmUgYXJyaXZlZCBpbgorCQkJICogdGhlIG1lYW50aW1lLiAqLworCQkJaWYgKCFyZHNfY29uZ190ZXN0X2JpdChtYXAsIHBvcnQpKQorCQkJCXJldHVybiAwOworCQl9CisJCXJkc19zdGF0c19pbmMoc19jb25nX3NlbmRfZXJyb3IpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJcmRzX3N0YXRzX2luYyhzX2Nvbmdfc2VuZF9ibG9ja2VkKTsKKwlyZHNkZWJ1Zygid2FpdGluZyBvbiBtYXAgJXAgZm9yIHBvcnQgJXVcbiIsIG1hcCwgYmUxNl90b19jcHUocG9ydCkpOworCisJcmV0dXJuIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShtYXAtPm1fd2FpdHEsCisJCQkJCSFyZHNfY29uZ190ZXN0X2JpdChtYXAsIHBvcnQpKTsKK30KKwordm9pZCByZHNfY29uZ19leGl0KHZvaWQpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXVuc2lnbmVkIGxvbmcgaTsKKworCXdoaWxlICgobm9kZSA9IHJiX2ZpcnN0KCZyZHNfY29uZ190cmVlKSkpIHsKKwkJbWFwID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHJkc19jb25nX21hcCwgbV9yYl9ub2RlKTsKKwkJcmRzZGVidWcoImZyZWVpbmcgbWFwICVwXG4iLCBtYXApOworCQlyYl9lcmFzZSgmbWFwLT5tX3JiX25vZGUsICZyZHNfY29uZ190cmVlKTsKKwkJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUyAmJiBtYXAtPm1fcGFnZV9hZGRyc1tpXTsgaSsrKQorCQkJZnJlZV9wYWdlKG1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKKwkJa2ZyZWUobWFwKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIFJEUyBtZXNzYWdlIGNvbnRhaW5pbmcgYSBjb25nZXN0aW9uIHVwZGF0ZS4KKyAqLworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfY29uZ191cGRhdGVfYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCA9IGNvbm4tPmNfbGNvbmc7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCXJtID0gcmRzX21lc3NhZ2VfbWFwX3BhZ2VzKG1hcC0+bV9wYWdlX2FkZHJzLCBSRFNfQ09OR19NQVBfQllURVMpOworCWlmICghSVNfRVJSKHJtKSkKKwkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgPSBSRFNfRkxBR19DT05HX0JJVE1BUDsKKworCXJldHVybiBybTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvY29ubmVjdGlvbi5jIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczZjA2NAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfaGFzaHRhYmxlcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAibG9vcC5oIgorI2luY2x1ZGUgInJkbWEuaCIKKworI2RlZmluZSBSRFNfQ09OTkVDVElPTl9IQVNIX0JJVFMgMTIKKyNkZWZpbmUgUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTICgxIDw8IFJEU19DT05ORUNUSU9OX0hBU0hfQklUUykKKyNkZWZpbmUgUkRTX0NPTk5FQ1RJT05fSEFTSF9NQVNLIChSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVMgLSAxKQorCisvKiBjb252ZXJ0aW5nIHRoaXMgdG8gUkNVIGlzIGEgY2hvcmUgZm9yIGFub3RoZXIgZGF5Li4gKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2Nvbm5fbG9jayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfY29ubl9jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCByZHNfY29ubl9oYXNoW1JEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFU107CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19jb25uX3NsYWI7CisKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyKQoreworCS8qIFBhc3MgTlVMTCwgZG9uJ3QgbmVlZCBzdHJ1Y3QgbmV0IGZvciBoYXNoICovCisJdW5zaWduZWQgbG9uZyBoYXNoID0gaW5ldF9laGFzaGZuKE5VTEwsCisJCQkJCSAgYmUzMl90b19jcHUobGFkZHIpLCAwLAorCQkJCQkgIGJlMzJfdG9fY3B1KGZhZGRyKSwgMCk7CisJcmV0dXJuICZyZHNfY29ubl9oYXNoW2hhc2ggJiBSRFNfQ09OTkVDVElPTl9IQVNIX01BU0tdOworfQorCisjZGVmaW5lIHJkc19jb25uX2luZm9fc2V0KHZhciwgdGVzdCwgc3VmZml4KSBkbyB7CQlcCisJaWYgKHRlc3QpCQkJCQkJXAorCQl2YXIgfD0gUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHXyMjc3VmZml4OwlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGludCByZHNfY29ubl9pc19zZW5kaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbXV0ZXhfdHJ5bG9jaygmY29ubi0+Y19zZW5kX2xvY2spKQorCQlyZXQgPSAxOworCWVsc2UKKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCisJCQkJCSAgICAgIF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCQkgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgcG9zLCBoZWFkLCBjX2hhc2hfbm9kZSkgeworCQlpZiAoY29ubi0+Y19mYWRkciA9PSBmYWRkciAmJiBjb25uLT5jX2xhZGRyID09IGxhZGRyICYmCisJCQkJY29ubi0+Y190cmFucyA9PSB0cmFucykgeworCQkJcmV0ID0gY29ubjsKKwkJCWJyZWFrOworCQl9CisJfQorCXJkc2RlYnVnKCJyZXR1cm5pbmcgY29ubiAlcCBmb3IgJXBJNCAtPiAlcEk0XG4iLCByZXQsCisJCSAmbGFkZHIsICZmYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRyYW5zcG9ydHMgYXMgdGhleSdyZSBicmluZ2luZyBkb3duIGEgY29ubmVjdGlvbi4KKyAqIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0IGNhbiBzdGFydCBzZW5kaW5nCisgKiBhbmQgcmVjZWl2aW5nIG92ZXIgdGhpcyBjb25uZWN0aW9uIGFnYWluIGluIHRoZSBmdXR1cmUuICBJdCBpcyB1cCB0bworICogdGhlIHRyYW5zcG9ydCB0byBoYXZlIHNlcmlhbGl6ZWQgdGhpcyBjYWxsIHdpdGggaXRzIHNlbmQgYW5kIHJlY3YuCisgKi8KK3ZvaWQgcmRzX2Nvbm5fcmVzZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJkc2RlYnVnKCJjb25uZWN0aW9uICVwSTQgdG8gJXBJNCByZXNldFxuIiwKKwkgICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkcik7CisKKwlyZHNfc3RhdHNfaW5jKHNfY29ubl9yZXNldCk7CisJcmRzX3NlbmRfcmVzZXQoY29ubik7CisJY29ubi0+Y19mbGFncyA9IDA7CisKKwkvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2gKKwkgKiByZXRyYW5zbWl0dGVkIHBhY2tldHMgZnJvbSBuZXcgcGFja2V0cywgYW5kIHdpbGwgaGFuZCBhbGwKKwkgKiBvZiB0aGVtIHRvIHRoZSBhcHBsaWNhdGlvbi4gVGhhdCBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZQorCSAqIHJlbGlhYmlsaXR5IGd1YXJhbnRlZXMgb2YgUkRTLiAqLworfQorCisvKgorICogVGhlcmUgaXMgb25seSBldmVyeSBvbmUgJ2Nvbm4nIGZvciBhIGdpdmVuIHBhaXIgb2YgYWRkcmVzc2VzIGluIHRoZQorICogc3lzdGVtIGF0IGEgdGltZS4gIFRoZXkgY29udGFpbiBtZXNzYWdlcyB0byBiZSByZXRyYW5zbWl0dGVkIGFuZCBzbworICogc3BhbiB0aGUgbGlmZXRpbWUgb2YgdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9ucy4KKyAqCisgKiBGb3Igbm93IHRoZXkgYXJlIG5vdCBnYXJiYWdlIGNvbGxlY3RlZCBvbmNlIHRoZXkncmUgY3JlYXRlZC4gIFRoZXkKKyAqIGFyZSB0b3JuIGRvd24gYXMgdGhlIG1vZHVsZSBpcyByZW1vdmVkLCBpZiBldmVyLgorICovCitzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnAsCisJCQkJICAgICAgIGludCBpc19vdXRnb2luZykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sICp0bXAsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gcmRzX2Nvbm5fYnVja2V0KGxhZGRyLCBmYWRkcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKwljb25uID0gcmRzX2Nvbm5fbG9va3VwKGhlYWQsIGxhZGRyLCBmYWRkciwgdHJhbnMpOworCWlmIChjb25uCisJICYmIGNvbm4tPmNfbG9vcGJhY2sKKwkgJiYgY29ubi0+Y190cmFucyAhPSAmcmRzX2xvb3BfdHJhbnNwb3J0CisJICYmICFpc19vdXRnb2luZykgeworCQkvKiBUaGlzIGlzIGEgbG9vcGVkIGJhY2sgSUIgY29ubmVjdGlvbiwgYW5kIHdlJ3JlCisJCSAqIGNhbGxlZCBieSB0aGUgY29kZSBoYW5kbGluZyB0aGUgaW5jb21pbmcgY29ubmVjdC4KKwkJICogV2UgbmVlZCBhIHNlY29uZCBjb25uZWN0aW9uIG9iamVjdCBpbnRvIHdoaWNoIHdlCisJCSAqIGNhbiBzdGljayB0aGUgb3RoZXIgUVAuICovCisJCXBhcmVudCA9IGNvbm47CisJCWNvbm4gPSBwYXJlbnQtPmNfcGFzc2l2ZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCWlmIChjb25uKQorCQlnb3RvIG91dDsKKworCWNvbm4gPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19jb25uX3NsYWIsIGdmcCk7CisJaWYgKGNvbm4gPT0gTlVMTCkgeworCQljb25uID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtc2V0KGNvbm4sIDAsIHNpemVvZigqY29ubikpOworCisJSU5JVF9ITElTVF9OT0RFKCZjb25uLT5jX2hhc2hfbm9kZSk7CisJY29ubi0+Y192ZXJzaW9uID0gUkRTX1BST1RPQ09MXzNfMDsKKwljb25uLT5jX2xhZGRyID0gbGFkZHI7CisJY29ubi0+Y19mYWRkciA9IGZhZGRyOworCXNwaW5fbG9ja19pbml0KCZjb25uLT5jX2xvY2spOworCWNvbm4tPmNfbmV4dF90eF9zZXEgPSAxOworCisJbXV0ZXhfaW5pdCgmY29ubi0+Y19zZW5kX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjb25uLT5jX3NlbmRfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZjb25uLT5jX3JldHJhbnMpOworCisJcmV0ID0gcmRzX2NvbmdfZ2V0X21hcHMoY29ubik7CisJaWYgKHJldCkgeworCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisJCWNvbm4gPSBFUlJfUFRSKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhpcyBpcyB3aGVyZSBhIGNvbm5lY3Rpb24gYmVjb21lcyBsb29wYmFjay4gIElmICphbnkqIFJEUyBzb2NrZXRzCisJICogY2FuIGJpbmQgdG8gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgdGhlbiB3ZSdkIHJhdGhlciB0aGUgbWVzc2FnZXMKKwkgKiBmbG93IHRocm91Z2ggbG9vcGJhY2sgcmF0aGVyIHRoYW4gZWl0aGVyIHRyYW5zcG9ydC4KKwkgKi8KKwlpZiAocmRzX3RyYW5zX2dldF9wcmVmZXJyZWQoZmFkZHIpKSB7CisJCWNvbm4tPmNfbG9vcGJhY2sgPSAxOworCQlpZiAoaXNfb3V0Z29pbmcgJiYgdHJhbnMtPnRfcHJlZmVyX2xvb3BiYWNrKSB7CisJCQkvKiAib3V0Z29pbmciIGNvbm5lY3Rpb24gLSBhbmQgdGhlIHRyYW5zcG9ydAorCQkJICogc2F5cyBpdCB3YW50cyB0aGUgY29ubmVjdGlvbiBoYW5kbGVkIGJ5IHRoZQorCQkJICogbG9vcGJhY2sgdHJhbnNwb3J0LiBUaGlzIGlzIHdoYXQgVENQIGRvZXMuCisJCQkgKi8KKwkJCXRyYW5zID0gJnJkc19sb29wX3RyYW5zcG9ydDsKKwkJfQorCX0KKworCWNvbm4tPmNfdHJhbnMgPSB0cmFuczsKKworCXJldCA9IHRyYW5zLT5jb25uX2FsbG9jKGNvbm4sIGdmcCk7CisJaWYgKHJldCkgeworCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisJCWNvbm4gPSBFUlJfUFRSKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0RPV04pOworCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSAwOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb25uLT5jX3NlbmRfdywgcmRzX3NlbmRfd29ya2VyKTsKKwlJTklUX0RFTEFZRURfV09SSygmY29ubi0+Y19yZWN2X3csIHJkc19yZWN2X3dvcmtlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvbm4tPmNfY29ubl93LCByZHNfY29ubmVjdF93b3JrZXIpOworCUlOSVRfV09SSygmY29ubi0+Y19kb3duX3csIHJkc19zaHV0ZG93bl93b3JrZXIpOworCW11dGV4X2luaXQoJmNvbm4tPmNfY21fbG9jayk7CisJY29ubi0+Y19mbGFncyA9IDA7CisKKwlyZHNkZWJ1ZygiYWxsb2NhdGVkIGNvbm4gJXAgZm9yICVwSTQgLT4gJXBJNCBvdmVyICVzICVzXG4iLAorCSAgY29ubiwgJmxhZGRyLCAmZmFkZHIsCisJICB0cmFucy0+dF9uYW1lID8gdHJhbnMtPnRfbmFtZSA6ICJbdW5rbm93bl0iLAorCSAgaXNfb3V0Z29pbmcgPyAiKG91dGdvaW5nKSIgOiAiIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCWlmIChwYXJlbnQgPT0gTlVMTCkgeworCQl0bXAgPSByZHNfY29ubl9sb29rdXAoaGVhZCwgbGFkZHIsIGZhZGRyLCB0cmFucyk7CisJCWlmICh0bXAgPT0gTlVMTCkKKwkJCWhsaXN0X2FkZF9oZWFkKCZjb25uLT5jX2hhc2hfbm9kZSwgaGVhZCk7CisJfSBlbHNlIHsKKwkJdG1wID0gcGFyZW50LT5jX3Bhc3NpdmU7CisJCWlmICghdG1wKQorCQkJcGFyZW50LT5jX3Bhc3NpdmUgPSBjb25uOworCX0KKworCWlmICh0bXApIHsKKwkJdHJhbnMtPmNvbm5fZnJlZShjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKwkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQljb25uID0gdG1wOworCX0gZWxzZSB7CisJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOworCQlyZHNfY29ubl9jb3VudCsrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworb3V0OgorCXJldHVybiBjb25uOworfQorCitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZShfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApCit7CisJcmV0dXJuIF9fcmRzX2Nvbm5fY3JlYXRlKGxhZGRyLCBmYWRkciwgdHJhbnMsIGdmcCwgMCk7Cit9CisKK3N0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gX19yZHNfY29ubl9jcmVhdGUobGFkZHIsIGZhZGRyLCB0cmFucywgZ2ZwLCAxKTsKK30KKwordm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqcnRtcDsKKworCXJkc2RlYnVnKCJmcmVlaW5nIGNvbm4gJXAgZm9yICVwSTQgLT4gIgorCQkgIiVwSTRcbiIsIGNvbm4sICZjb25uLT5jX2xhZGRyLAorCQkgJmNvbm4tPmNfZmFkZHIpOworCisJaGxpc3RfZGVsX2luaXQoJmNvbm4tPmNfaGFzaF9ub2RlKTsKKworCS8qIHdhaXQgZm9yIHRoZSByZHMgdGhyZWFkIHRvIHNodXQgaXQgZG93biAqLworCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0VSUk9SKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZjb25uLT5jX2Nvbm5fdyk7CisJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7CisJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CisKKwkvKiB0ZWFyIGRvd24gcXVldWVkIG1lc3NhZ2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCBydG1wLAorCQkJCSAmY29ubi0+Y19zZW5kX3F1ZXVlLAorCQkJCSBtX2Nvbm5faXRlbSkgeworCQlsaXN0X2RlbF9pbml0KCZybS0+bV9jb25uX2l0ZW0pOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnJtLT5tX3NvY2tfaXRlbSkpOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KKwlpZiAoY29ubi0+Y194bWl0X3JtKQorCQlyZHNfbWVzc2FnZV9wdXQoY29ubi0+Y194bWl0X3JtKTsKKworCWNvbm4tPmNfdHJhbnMtPmNvbm5fZnJlZShjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKworCS8qCisJICogVGhlIGNvbmdlc3Rpb24gbWFwcyBhcmVuJ3QgZnJlZWQgdXAgaGVyZS4gIFRoZXkncmUKKwkgKiBmcmVlZCBieSByZHNfY29uZ19leGl0KCkgYWZ0ZXIgYWxsIHRoZSBjb25uZWN0aW9ucworCSAqIGhhdmUgYmVlbiBmcmVlZC4KKwkgKi8KKwlyZHNfY29uZ19yZW1vdmVfY29ubihjb25uKTsKKworCUJVR19PTighbGlzdF9lbXB0eSgmY29ubi0+Y19yZXRyYW5zKSk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCisJcmRzX2Nvbm5fY291bnQtLTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucywKKwkJCQkgIGludCB3YW50X3NlbmQpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKKwlzaXplX3QgaTsKKworCWxlbiAvPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDAsIGhlYWQgPSByZHNfY29ubl9oYXNoOyBpIDwgQVJSQVlfU0laRShyZHNfY29ubl9oYXNoKTsKKwkgICAgIGkrKywgaGVhZCsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sIHBvcywgaGVhZCwgY19oYXNoX25vZGUpIHsKKwkJCWlmICh3YW50X3NlbmQpCisJCQkJbGlzdCA9ICZjb25uLT5jX3NlbmRfcXVldWU7CisJCQllbHNlCisJCQkJbGlzdCA9ICZjb25uLT5jX3JldHJhbnM7CisKKwkJCXNwaW5fbG9jaygmY29ubi0+Y19sb2NrKTsKKworCQkJLyogWFhYIHRvbyBsYXp5IHRvIG1haW50YWluIGNvdW50cy4uICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCBsaXN0LCBtX2Nvbm5faXRlbSkgeworCQkJCXRvdGFsKys7CisJCQkJaWYgKHRvdGFsIDw9IGxlbikKKwkJCQkJcmRzX2luY19pbmZvX2NvcHkoJnJtLT5tX2luYywgaXRlciwKKwkJCQkJCQkgIGNvbm4tPmNfbGFkZHIsCisJCQkJCQkJICBjb25uLT5jX2ZhZGRyLCAwKTsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKKwlsZW5zLT5uciA9IHRvdGFsOworCWxlbnMtPmVhY2ggPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9tZXNzYWdlX2luZm9fc2VuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19jb25uX21lc3NhZ2VfaW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsIDEpOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9tZXNzYWdlX2luZm9fcmV0cmFucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCQkgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19jb25uX21lc3NhZ2VfaW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsIDApOworfQorCit2b2lkIHJkc19mb3JfZWFjaF9jb25uX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucywKKwkJCSAgaW50ICgqdmlzaXRvcikoc3RydWN0IHJkc19jb25uZWN0aW9uICosIHZvaWQgKiksCisJCQkgIHNpemVfdCBpdGVtX2xlbikKK3sKKwl1aW50NjRfdCBidWZmZXJbKGl0ZW1fbGVuICsgNykgLyA4XTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc2l6ZV90IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCisJbGVucy0+bnIgPSAwOworCWxlbnMtPmVhY2ggPSBpdGVtX2xlbjsKKworCWZvciAoaSA9IDAsIGhlYWQgPSByZHNfY29ubl9oYXNoOyBpIDwgQVJSQVlfU0laRShyZHNfY29ubl9oYXNoKTsKKwkgICAgIGkrKywgaGVhZCsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgcG9zLCB0bXAsIGhlYWQsIGNfaGFzaF9ub2RlKSB7CisKKwkJCS8qIFhYWCBubyBjX2xvY2sgdXNhZ2UuLiAqLworCQkJaWYgKCF2aXNpdG9yKGNvbm4sIGJ1ZmZlcikpCisJCQkJY29udGludWU7CisKKwkJCS8qIFdlIGNvcHkgYXMgbXVjaCBhcyB3ZSBjYW4gZml0IGluIHRoZSBidWZmZXIsCisJCQkgKiBidXQgd2UgY291bnQgYWxsIGl0ZW1zIHNvIHRoYXQgdGhlIGNhbGxlcgorCQkJICogY2FuIHJlc2l6ZSB0aGUgYnVmZmVyLiAqLworCQkJaWYgKGxlbiA+PSBpdGVtX2xlbikgeworCQkJCXJkc19pbmZvX2NvcHkoaXRlciwgYnVmZmVyLCBpdGVtX2xlbik7CisJCQkJbGVuIC09IGl0ZW1fbGVuOworCQkJfQorCQkJbGVucy0+bnIrKzsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCByZHNfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCByZHNfaW5mb19jb25uZWN0aW9uICpjaW5mbyA9IGJ1ZmZlcjsKKworCWNpbmZvLT5uZXh0X3R4X3NlcSA9IGNvbm4tPmNfbmV4dF90eF9zZXE7CisJY2luZm8tPm5leHRfcnhfc2VxID0gY29ubi0+Y19uZXh0X3J4X3NlcTsKKwljaW5mby0+bGFkZHIgPSBjb25uLT5jX2xhZGRyOworCWNpbmZvLT5mYWRkciA9IGNvbm4tPmNfZmFkZHI7CisJc3RybmNweShjaW5mby0+dHJhbnNwb3J0LCBjb25uLT5jX3RyYW5zLT50X25hbWUsCisJCXNpemVvZihjaW5mby0+dHJhbnNwb3J0KSk7CisJY2luZm8tPmZsYWdzID0gMDsKKworCXJkc19jb25uX2luZm9fc2V0KGNpbmZvLT5mbGFncywKKwkJCSAgcmRzX2Nvbm5faXNfc2VuZGluZyhjb25uKSwgU0VORElORyk7CisJLyogWFhYIEZ1dHVyZTogcmV0dXJuIHRoZSBzdGF0ZSByYXRoZXIgdGhhbiB0aGVzZSBmdW5reSBiaXRzICovCisJcmRzX2Nvbm5faW5mb19zZXQoY2luZm8tPmZsYWdzLAorCQkJICBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkgPT0gUkRTX0NPTk5fQ09OTkVDVElORywKKwkJCSAgQ09OTkVDVElORyk7CisJcmRzX2Nvbm5faW5mb19zZXQoY2luZm8tPmZsYWdzLAorCQkJICBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkgPT0gUkRTX0NPTk5fVVAsCisJCQkgIENPTk5FQ1RFRCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfZm9yX2VhY2hfY29ubl9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywKKwkJCQlyZHNfY29ubl9pbmZvX3Zpc2l0b3IsCisJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19jb25uZWN0aW9uKSk7Cit9CisKK2ludCBfX2luaXQgcmRzX2Nvbm5faW5pdCh2b2lkKQoreworCXJkc19jb25uX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2Nvbm5lY3Rpb24iLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24pLAorCQkJCQkgIDAsIDAsIE5VTEwpOworCWlmIChyZHNfY29ubl9zbGFiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19DT05ORUNUSU9OUywgcmRzX2Nvbm5faW5mbyk7CisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TRU5EX01FU1NBR0VTLAorCQkJICAgICAgIHJkc19jb25uX21lc3NhZ2VfaW5mb19zZW5kKTsKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFVFJBTlNfTUVTU0FHRVMsCisJCQkgICAgICAgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3JldHJhbnMpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2Nvbm5fZXhpdCh2b2lkKQoreworCXJkc19sb29wX2V4aXQoKTsKKworCVdBUk5fT04oIWhsaXN0X2VtcHR5KHJkc19jb25uX2hhc2gpKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfY29ubl9zbGFiKTsKKworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19DT05ORUNUSU9OUywgcmRzX2Nvbm5faW5mbyk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NFTkRfTUVTU0FHRVMsCisJCQkJIHJkc19jb25uX21lc3NhZ2VfaW5mb19zZW5kKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVUUkFOU19NRVNTQUdFUywKKwkJCQkgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3JldHJhbnMpOworfQorCisvKgorICogRm9yY2UgYSBkaXNjb25uZWN0CisgKi8KK3ZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRVJST1IpOworCXF1ZXVlX3dvcmsocmRzX3dxLCAmY29ubi0+Y19kb3duX3cpOworfQorCisvKgorICogQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAqLwordm9pZAorX19yZHNfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZHNfY29ubl9kcm9wKGNvbm4pOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTdiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liLmMKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKK3Vuc2lnbmVkIGludCBmbXJfcG9vbF9zaXplID0gUkRTX0ZNUl9QT09MX1NJWkU7Cit1bnNpZ25lZCBpbnQgZm1yX21lc3NhZ2Vfc2l6ZSA9IFJEU19GTVJfU0laRSArIDE7IC8qICsxIGFsbG93cyBmb3IgdW5hbGlnbmVkIE1ScyAqLworCittb2R1bGVfcGFyYW0oZm1yX3Bvb2xfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1yX3Bvb2xfc2l6ZSwgIiBNYXggbnVtYmVyIG9mIGZtciBwZXIgSENBIik7Cittb2R1bGVfcGFyYW0oZm1yX21lc3NhZ2Vfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1yX21lc3NhZ2Vfc2l6ZSwgIiBNYXggc2l6ZSBvZiBhIFJETUEgdHJhbnNmZXIiKTsKKworc3RydWN0IGxpc3RfaGVhZCByZHNfaWJfZGV2aWNlczsKKworREVGSU5FX1NQSU5MT0NLKGliX25vZGV2X2Nvbm5zX2xvY2spOworTElTVF9IRUFEKGliX25vZGV2X2Nvbm5zKTsKKwordm9pZCByZHNfaWJfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldl9hdHRyOworCisJLyogT25seSBoYW5kbGUgSUIgKG5vIGlXQVJQKSBkZXZpY2VzICovCisJaWYgKGRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9JQl9DQSkKKwkJcmV0dXJuOworCisJZGV2X2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2F0dHIsIEdGUF9LRVJORUwpOworCWlmICghZGV2X2F0dHIpCisJCXJldHVybjsKKworCWlmIChpYl9xdWVyeV9kZXZpY2UoZGV2aWNlLCBkZXZfYXR0cikpIHsKKwkJcmRzZGVidWcoIlF1ZXJ5IGRldmljZSBmYWlsZWQgZm9yICVzXG4iLCBkZXZpY2UtPm5hbWUpOworCQlnb3RvIGZyZWVfYXR0cjsKKwl9CisKKwlyZHNfaWJkZXYgPSBrbWFsbG9jKHNpemVvZiAqcmRzX2liZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkc19pYmRldikKKwkJZ290byBmcmVlX2F0dHI7CisKKwlzcGluX2xvY2tfaW5pdCgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlyZHNfaWJkZXYtPm1heF93cnMgPSBkZXZfYXR0ci0+bWF4X3FwX3dyOworCXJkc19pYmRldi0+bWF4X3NnZSA9IG1pbihkZXZfYXR0ci0+bWF4X3NnZSwgUkRTX0lCX01BWF9TR0UpOworCisJcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdCA9IG1heCg5LCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7CisJcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplICA9IDEgPDwgcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlyZHNfaWJkZXYtPmZtcl9wYWdlX21hc2sgID0gfigodTY0KSByZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUgLSAxKTsKKwlyZHNfaWJkZXYtPmZtcl9tYXhfcmVtYXBzID0gZGV2X2F0dHItPm1heF9tYXBfcGVyX2Ztcj86IDMyOworCXJkc19pYmRldi0+bWF4X2ZtcnMgPSBkZXZfYXR0ci0+bWF4X2ZtciA/CisJCQltaW5fdCh1bnNpZ25lZCBpbnQsIGRldl9hdHRyLT5tYXhfZm1yLCBmbXJfcG9vbF9zaXplKSA6CisJCQlmbXJfcG9vbF9zaXplOworCisJcmRzX2liZGV2LT5kZXYgPSBkZXZpY2U7CisJcmRzX2liZGV2LT5wZCA9IGliX2FsbG9jX3BkKGRldmljZSk7CisJaWYgKElTX0VSUihyZHNfaWJkZXYtPnBkKSkKKwkJZ290byBmcmVlX2RldjsKKworCXJkc19pYmRldi0+bXIgPSBpYl9nZXRfZG1hX21yKHJkc19pYmRldi0+cGQsCisJCQkJICAgICAgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKKwlpZiAoSVNfRVJSKHJkc19pYmRldi0+bXIpKQorCQlnb3RvIGVycl9wZDsKKworCXJkc19pYmRldi0+bXJfcG9vbCA9IHJkc19pYl9jcmVhdGVfbXJfcG9vbChyZHNfaWJkZXYpOworCWlmIChJU19FUlIocmRzX2liZGV2LT5tcl9wb29sKSkgeworCQlyZHNfaWJkZXYtPm1yX3Bvb2wgPSBOVUxMOworCQlnb3RvIGVycl9tcjsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYmRldi0+Y29ubl9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZyZHNfaWJkZXYtPmxpc3QsICZyZHNfaWJfZGV2aWNlcyk7CisKKwlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmcmRzX2liX2NsaWVudCwgcmRzX2liZGV2KTsKKworCWdvdG8gZnJlZV9hdHRyOworCitlcnJfbXI6CisJaWJfZGVyZWdfbXIocmRzX2liZGV2LT5tcik7CitlcnJfcGQ6CisJaWJfZGVhbGxvY19wZChyZHNfaWJkZXYtPnBkKTsKK2ZyZWVfZGV2OgorCWtmcmVlKHJkc19pYmRldik7CitmcmVlX2F0dHI6CisJa2ZyZWUoZGV2X2F0dHIpOworfQorCit2b2lkIHJkc19pYl9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkciwgKmlfbmV4dDsKKworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKwlpZiAoIXJkc19pYmRldikKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlfaXBhZGRyLCBpX25leHQsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZpX2lwYWRkci0+bGlzdCk7CisJCWtmcmVlKGlfaXBhZGRyKTsKKwl9CisKKwlyZHNfaWJfcmVtb3ZlX2Nvbm5zKHJkc19pYmRldik7CisKKwlpZiAocmRzX2liZGV2LT5tcl9wb29sKQorCQlyZHNfaWJfZGVzdHJveV9tcl9wb29sKHJkc19pYmRldi0+bXJfcG9vbCk7CisKKwlpYl9kZXJlZ19tcihyZHNfaWJkZXYtPm1yKTsKKworCXdoaWxlIChpYl9kZWFsbG9jX3BkKHJkc19pYmRldi0+cGQpKSB7CisJCXJkc2RlYnVnKCJGYWlsZWQgdG8gZGVhbGxvYyBwZCAlcFxuIiwgcmRzX2liZGV2LT5wZCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlsaXN0X2RlbCgmcmRzX2liZGV2LT5saXN0KTsKKwlrZnJlZShyZHNfaWJkZXYpOworfQorCitzdHJ1Y3QgaWJfY2xpZW50IHJkc19pYl9jbGllbnQgPSB7CisJLm5hbWUgICA9ICJyZHNfaWIiLAorCS5hZGQgICAgPSByZHNfaWJfYWRkX29uZSwKKwkucmVtb3ZlID0gcmRzX2liX3JlbW92ZV9vbmUKK307CisKK3N0YXRpYyBpbnQgcmRzX2liX2Nvbm5faW5mb192aXNpdG9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgICAgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvID0gYnVmZmVyOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWM7CisKKwkvKiBXZSB3aWxsIG9ubHkgZXZlciBsb29rIGF0IElCIHRyYW5zcG9ydHMgKi8KKwlpZiAoY29ubi0+Y190cmFucyAhPSAmcmRzX2liX3RyYW5zcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpaW5mby0+c3JjX2FkZHIgPSBjb25uLT5jX2xhZGRyOworCWlpbmZvLT5kc3RfYWRkciA9IGNvbm4tPmNfZmFkZHI7CisKKwltZW1zZXQoJmlpbmZvLT5zcmNfZ2lkLCAwLCBzaXplb2YoaWluZm8tPnNyY19naWQpKTsKKwltZW1zZXQoJmlpbmZvLT5kc3RfZ2lkLCAwLCBzaXplb2YoaWluZm8tPmRzdF9naWQpKTsKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwkJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyOworCisJCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwkJZGV2X2FkZHIgPSAmaWMtPmlfY21faWQtPnJvdXRlLmFkZHIuZGV2X2FkZHI7CisKKwkJaWJfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPnNyY19naWQpOworCQlpYl9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+ZHN0X2dpZCk7CisKKwkJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKwkJaWluZm8tPm1heF9zZW5kX3dyID0gaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfcmVjdl93ciA9IGljLT5pX3JlY3ZfcmluZy53X25yOworCQlpaW5mby0+bWF4X3NlbmRfc2dlID0gcmRzX2liZGV2LT5tYXhfc2dlOworCQlyZHNfaWJfZ2V0X21yX2luZm8ocmRzX2liZGV2LCBpaW5mbyk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfaWNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsCisJCQkJcmRzX2liX2Nvbm5faW5mb192aXNpdG9yLAorCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uKSk7Cit9CisKKworLyoKKyAqIEVhcmx5IFJEUy9JQiB3YXMgYnVpbHQgdG8gb25seSBiaW5kIHRvIGFuIGFkZHJlc3MgaWYgdGhlcmUgaXMgYW4gSVBvSUIKKyAqIGRldmljZSB3aXRoIHRoYXQgYWRkcmVzcyBzZXQuCisgKgorICogSWYgaXQgd2VyZSBtZSwgSSdkIGFkdm9jYXRlIGZvciBzb21ldGhpbmcgbW9yZSBmbGV4aWJsZS4gIFNlbmRpbmcgYW5kCisgKiByZWNlaXZpbmcgc2hvdWxkIGJlIGRldmljZS1hZ25vc3RpYy4gIFRyYW5zcG9ydHMgd291bGQgdHJ5IGFuZCBtYWludGFpbgorICogY29ubmVjdGlvbnMgYmV0d2VlbiBwZWVycyB3aG8gaGF2ZSBtZXNzYWdlcyBxdWV1ZWQuICBVc2Vyc3BhY2Ugd291bGQgYmUKKyAqIGFsbG93ZWQgdG8gaW5mbHVlbmNlIHdoaWNoIHBhdGhzIGhhdmUgcHJpb3JpdHkuICBXZSBjb3VsZCBjYWxsIHVzZXJzcGFjZQorICogYXNzZXJ0aW5nIHRoaXMgcG9saWN5ICJyb3V0aW5nIi4KKyAqLworc3RhdGljIGludCByZHNfaWJfbGFkZHJfY2hlY2soX19iZTMyIGFkZHIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKworCS8qIENyZWF0ZSBhIENNQSBJRCBhbmQgdHJ5IHRvIGJpbmQgaXQuIFRoaXMgY2F0Y2hlcyBib3RoCisJICogSUIgYW5kIGlXQVJQIGNhcGFibGUgTklDcy4KKwkgKi8KKwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKE5VTEwsIE5VTEwsIFJETUFfUFNfVENQKTsKKwlpZiAoIWNtX2lkKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHNpbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gYWRkcjsKKworCS8qIHJkbWFfYmluZF9hZGRyIHdpbGwgb25seSBzdWNjZWVkIGZvciBJQiAmIGlXQVJQIGRldmljZXMgKi8KKwlyZXQgPSByZG1hX2JpbmRfYWRkcihjbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4pOworCS8qIGR1ZSB0byB0aGlzLCB3ZSB3aWxsIGNsYWltIHRvIHN1cHBvcnQgaVdBUlAgZGV2aWNlcyB1bmxlc3Mgd2UKKwkgICBjaGVjayBub2RlX3R5cGUuICovCisJaWYgKHJldCB8fCBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX0lCX0NBKQorCQlyZXQgPSAtRUFERFJOT1RBVkFJTDsKKworCXJkc2RlYnVnKCJhZGRyICVwSTQgcmV0ICVkIG5vZGUgdHlwZSAlZFxuIiwKKwkJJmFkZHIsIHJldCwKKwkJY21faWQtPmRldmljZSA/IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSA6IC0xKTsKKworCXJkbWFfZGVzdHJveV9pZChjbV9pZCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9leGl0KHZvaWQpCit7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TLCByZHNfaWJfaWNfaW5mbyk7CisJcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucygpOworCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaWJfY2xpZW50KTsKKwlyZHNfaWJfc3lzY3RsX2V4aXQoKTsKKwlyZHNfaWJfcmVjdl9leGl0KCk7CisJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJnJkc19pYl90cmFuc3BvcnQpOworfQorCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0ID0geworCS5sYWRkcl9jaGVjawkJPSByZHNfaWJfbGFkZHJfY2hlY2ssCisJLnhtaXRfY29tcGxldGUJCT0gcmRzX2liX3htaXRfY29tcGxldGUsCisJLnhtaXQJCQk9IHJkc19pYl94bWl0LAorCS54bWl0X2NvbmdfbWFwCQk9IE5VTEwsCisJLnhtaXRfcmRtYQkJPSByZHNfaWJfeG1pdF9yZG1hLAorCS5yZWN2CQkJPSByZHNfaWJfcmVjdiwKKwkuY29ubl9hbGxvYwkJPSByZHNfaWJfY29ubl9hbGxvYywKKwkuY29ubl9mcmVlCQk9IHJkc19pYl9jb25uX2ZyZWUsCisJLmNvbm5fY29ubmVjdAkJPSByZHNfaWJfY29ubl9jb25uZWN0LAorCS5jb25uX3NodXRkb3duCQk9IHJkc19pYl9jb25uX3NodXRkb3duLAorCS5pbmNfY29weV90b191c2VyCT0gcmRzX2liX2luY19jb3B5X3RvX3VzZXIsCisJLmluY19wdXJnZQkJPSByZHNfaWJfaW5jX3B1cmdlLAorCS5pbmNfZnJlZQkJPSByZHNfaWJfaW5jX2ZyZWUsCisJLmNtX2luaXRpYXRlX2Nvbm5lY3QJPSByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdCwKKwkuY21faGFuZGxlX2Nvbm5lY3QJPSByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3QsCisJLmNtX2Nvbm5lY3RfY29tcGxldGUJPSByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSwKKwkuc3RhdHNfaW5mb19jb3B5CT0gcmRzX2liX3N0YXRzX2luZm9fY29weSwKKwkuZXhpdAkJCT0gcmRzX2liX2V4aXQsCisJLmdldF9tcgkJCT0gcmRzX2liX2dldF9tciwKKwkuc3luY19tcgkJPSByZHNfaWJfc3luY19tciwKKwkuZnJlZV9tcgkJPSByZHNfaWJfZnJlZV9tciwKKwkuZmx1c2hfbXJzCQk9IHJkc19pYl9mbHVzaF9tcnMsCisJLnRfb3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnRfbmFtZQkJCT0gImluZmluaWJhbmQiLAorfTsKKworaW50IF9faW5pdCByZHNfaWJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liX2RldmljZXMpOworCisJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZyZHNfaWJfY2xpZW50KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHJkc19pYl9zeXNjdGxfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2licmVnOworCisJcmV0ID0gcmRzX2liX3JlY3ZfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N5c2N0bDsKKworCXJldCA9IHJkc190cmFuc19yZWdpc3RlcigmcmRzX2liX3RyYW5zcG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVjdjsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSUJfQ09OTkVDVElPTlMsIHJkc19pYl9pY19pbmZvKTsKKworCWdvdG8gb3V0OworCitvdXRfcmVjdjoKKwlyZHNfaWJfcmVjdl9leGl0KCk7CitvdXRfc3lzY3RsOgorCXJkc19pYl9zeXNjdGxfZXhpdCgpOworb3V0X2licmVnOgorCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaWJfY2xpZW50KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuaCBiL25ldC9yZHMvaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmU1NjNhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYi5oCkBAIC0wLDAgKzEsMzY3IEBACisjaWZuZGVmIF9SRFNfSUJfSAorI2RlZmluZSBfUkRTX0lCX0gKKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hX3RyYW5zcG9ydC5oIgorCisjZGVmaW5lIFJEU19GTVJfU0laRQkJCTI1NgorI2RlZmluZSBSRFNfRk1SX1BPT0xfU0laRQkJNDA5NgorCisjZGVmaW5lIFJEU19JQl9NQVhfU0dFCQkJOAorI2RlZmluZSBSRFNfSUJfUkVDVl9TR0UgCQkyCisKKyNkZWZpbmUgUkRTX0lCX0RFRkFVTFRfUkVDVl9XUgkJMTAyNAorI2RlZmluZSBSRFNfSUJfREVGQVVMVF9TRU5EX1dSCQkyNTYKKworI2RlZmluZSBSRFNfSUJfU1VQUE9SVEVEX1BST1RPQ09MUwkweDAwMDAwMDAzCS8qIG1pbm9yIHZlcnNpb25zIHN1cHBvcnRlZCAqLworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCByZHNfaWJfZGV2aWNlczsKKworLyoKKyAqIElCIHBvc3RzIFJEU19GUkFHX1NJWkUgZnJhZ21lbnRzIG9mIHBhZ2VzIHRvIHRoZSByZWNlaXZlIHF1ZXVlcyB0bworICogdHJ5IGFuZCBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aWVkIHVwIGJvdGggdGhlIGRldmljZSBhbmQKKyAqIHNvY2tldCByZWNlaXZlIHF1ZXVlcy4KKyAqLworLyogcGFnZSBvZmZzZXQgb2YgdGhlIGZpbmFsIGZ1bGwgZnJhZyB0aGF0IGZpdHMgaW4gdGhlIHBhZ2UgKi8KKyNkZWZpbmUgUkRTX1BBR0VfTEFTVF9PRkYgKCgoUEFHRV9TSVpFICAvIFJEU19GUkFHX1NJWkUpIC0gMSkgKiBSRFNfRlJBR19TSVpFKQorc3RydWN0IHJkc19wYWdlX2ZyYWcgeworCXN0cnVjdCBsaXN0X2hlYWQJZl9pdGVtOworCXN0cnVjdCBwYWdlCQkqZl9wYWdlOworCXVuc2lnbmVkIGxvbmcJCWZfb2Zmc2V0OworCWRtYV9hZGRyX3QgCQlmX21hcHBlZDsKK307CisKK3N0cnVjdCByZHNfaWJfaW5jb21pbmcgeworCXN0cnVjdCBsaXN0X2hlYWQJaWlfZnJhZ3M7CisJc3RydWN0IHJkc19pbmNvbWluZwlpaV9pbmM7Cit9OworCitzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSB7CisJLyogQWRkIG5ldyBmaWVsZHMgYXQgdGhlIGVuZCwgYW5kIGRvbid0IHBlcm11dGUgZXhpc3RpbmcgZmllbGRzLiAqLworCV9fYmUzMgkJCWRwX3NhZGRyOworCV9fYmUzMgkJCWRwX2RhZGRyOworCXU4CQkJZHBfcHJvdG9jb2xfbWFqb3I7CisJdTgJCQlkcF9wcm90b2NvbF9taW5vcjsKKwlfX2JlMTYJCQlkcF9wcm90b2NvbF9taW5vcl9tYXNrOyAvKiBiaXRtYXNrICovCisJX19iZTMyCQkJZHBfcmVzZXJ2ZWQxOworCV9fYmU2NAkJCWRwX2Fja19zZXE7CisJX19iZTMyCQkJZHBfY3JlZGl0OwkJLyogbm9uLXplcm8gZW5hYmxlcyBmbG93IGN0bCAqLworfTsKKworc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgeworCXN0cnVjdCByZHNfbWVzc2FnZQkqc19ybTsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AJKnNfb3A7CisJc3RydWN0IGliX3NlbmRfd3IJc193cjsKKwlzdHJ1Y3QgaWJfc2dlCQlzX3NnZVtSRFNfSUJfTUFYX1NHRV07CisJdW5zaWduZWQgbG9uZwkJc19xdWV1ZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayB7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAJKnJfaWJpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcJKnJfZnJhZzsKKwlzdHJ1Y3QgaWJfcmVjdl93cglyX3dyOworCXN0cnVjdCBpYl9zZ2UJCXJfc2dlWzJdOworfTsKKworc3RydWN0IHJkc19pYl93b3JrX3JpbmcgeworCXUzMgkJd19ucjsKKwl1MzIJCXdfYWxsb2NfcHRyOworCXUzMgkJd19hbGxvY19jdHI7CisJdTMyCQl3X2ZyZWVfcHRyOworCWF0b21pY190CXdfZnJlZV9jdHI7Cit9OworCitzdHJ1Y3QgcmRzX2liX2RldmljZTsKKworc3RydWN0IHJkc19pYl9jb25uZWN0aW9uIHsKKworCXN0cnVjdCBsaXN0X2hlYWQJaWJfbm9kZTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZQkqcmRzX2liZGV2OworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqY29ubjsKKworCS8qIGFscGhhYmV0IHNvdXAsIElCVEEgc3R5bGUgKi8KKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqaV9jbV9pZDsKKwlzdHJ1Y3QgaWJfcGQJCSppX3BkOworCXN0cnVjdCBpYl9tcgkJKmlfbXI7CisJc3RydWN0IGliX2NxCQkqaV9zZW5kX2NxOworCXN0cnVjdCBpYl9jcQkJKmlfcmVjdl9jcTsKKworCS8qIHR4ICovCisJc3RydWN0IHJkc19pYl93b3JrX3JpbmcJaV9zZW5kX3Jpbmc7CisJc3RydWN0IHJkc19tZXNzYWdlCSppX3JtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3NlbmRfaGRyczsKKwl1NjQJCQlpX3NlbmRfaGRyc19kbWE7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKmlfc2VuZHM7CisKKwkvKiByeCAqLworCXN0cnVjdCBtdXRleAkJaV9yZWN2X211dGV4OworCXN0cnVjdCByZHNfaWJfd29ya19yaW5nCWlfcmVjdl9yaW5nOworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcJKmlfaWJpbmM7CisJdTMyCQkJaV9yZWN2X2RhdGFfcmVtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3JlY3ZfaGRyczsKKwl1NjQJCQlpX3JlY3ZfaGRyc19kbWE7CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKmlfcmVjdnM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcJaV9mcmFnOworCXU2NAkJCWlfYWNrX3JlY3Y7CS8qIGxhc3QgQUNLIHJlY2VpdmVkICovCisKKwkvKiBzZW5kaW5nIGFja3MgKi8KKwl1bnNpZ25lZCBsb25nCQlpX2Fja19mbGFnczsKKwl1NjQJCQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisJc3RydWN0IHJkc19oZWFkZXIJKmlfYWNrOworCXN0cnVjdCBpYl9zZW5kX3dyCWlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UJCWlfYWNrX3NnZTsKKwl1NjQJCQlpX2Fja19kbWE7CisJdW5zaWduZWQgbG9uZwkJaV9hY2tfcXVldWVkOworCisJLyogRmxvdyBjb250cm9sIHJlbGF0ZWQgaW5mb3JtYXRpb24KKwkgKgorCSAqIE91ciBhbGdvcml0aG0gdXNlcyBhIHBhaXIgdmFyaWFibGVzIHRoYXQgd2UgbmVlZCB0byBhY2Nlc3MKKwkgKiBhdG9taWNhbGx5IC0gb25lIGZvciB0aGUgc2VuZCBjcmVkaXRzLCBhbmQgb25lIHBvc3RlZAorCSAqIHJlY3YgY3JlZGl0cyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRvIHJlbW90ZS4KKwkgKiBSYXRoZXIgdGhhbiBwcm90ZWN0IHRoZW0gdXNpbmcgYSBzbG93IHNwaW5sb2NrLCB3ZSBwdXQgYm90aCBpbnRvCisJICogYSBzaW5nbGUgYXRvbWljX3QgYW5kIHVwZGF0ZSBpdCB1c2luZyBjbXB4Y2hnCisJICovCisJYXRvbWljX3QJCWlfY3JlZGl0czsKKworCS8qIFByb3RvY29sIHZlcnNpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWlfZmxvd2N0bDoxOwkvKiBlbmFibGUvZGlzYWJsZSBmbG93IGN0bCAqLworCisJLyogQmF0Y2hlZCBjb21wbGV0aW9ucyAqLworCXVuc2lnbmVkIGludAkJaV91bnNpZ25hbGVkX3dyczsKKwlsb25nCQkJaV91bnNpZ25hbGVkX2J5dGVzOworfTsKKworLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaXMgYXQgbGVhc3QgMzIgYml0cyAqLworI2RlZmluZSBJQl9HRVRfU0VORF9DUkVESVRTKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIElCX0dFVF9QT1NUX0NSRURJVFModikJKCh2KSA+PiAxNikKKyNkZWZpbmUgSUJfU0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9TRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPDwgMTYpCisKK3N0cnVjdCByZHNfaWJfaXBhZGRyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJX19iZTMyCQkJaXBhZGRyOworfTsKKworc3RydWN0IHJkc19pYl9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlwYWRkcl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJY29ubl9saXN0OworCXN0cnVjdCBpYl9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgaWJfcGQJCSpwZDsKKwlzdHJ1Y3QgaWJfbXIJCSptcjsKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wJKm1yX3Bvb2w7CisJaW50CQkJZm1yX3BhZ2Vfc2hpZnQ7CisJaW50CQkJZm1yX3BhZ2Vfc2l6ZTsKKwl1NjQJCQlmbXJfcGFnZV9tYXNrOworCXVuc2lnbmVkIGludAkJZm1yX21heF9yZW1hcHM7CisJdW5zaWduZWQgaW50CQltYXhfZm1yczsKKwlpbnQJCQltYXhfc2dlOworCXVuc2lnbmVkIGludAkJbWF4X3dyczsKKwlzcGlubG9ja190CQlzcGlubG9jazsJLyogcHJvdGVjdCB0aGUgYWJvdmUgKi8KK307CisKKy8qIGJpdHMgZm9yIGlfYWNrX2ZsYWdzICovCisjZGVmaW5lIElCX0FDS19JTl9GTElHSFQJMAorI2RlZmluZSBJQl9BQ0tfUkVRVUVTVEVECTEKKworLyogTWFnaWMgV1JfSUQgZm9yIEFDS3MgKi8KKyNkZWZpbmUgUkRTX0lCX0FDS19XUl9JRAkofih1NjQpIDApCisKK3N0cnVjdCByZHNfaWJfc3RhdGlzdGljcyB7CisJdWludDY0X3QJc19pYl9jb25uZWN0X3JhY2VkOworCXVpbnQ2NF90CXNfaWJfbGlzdGVuX2Nsb3NlZF9zdGFsZTsKKwl1aW50NjRfdAlzX2liX3R4X2NxX2NhbGw7CisJdWludDY0X3QJc19pYl90eF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2liX3R4X3JpbmdfZnVsbDsKKwl1aW50NjRfdAlzX2liX3R4X3Rocm90dGxlOworCXVpbnQ2NF90CXNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlOworCXVpbnQ2NF90CXNfaWJfdHhfc3RhbGxlZDsKKwl1aW50NjRfdAlzX2liX3R4X2NyZWRpdF91cGRhdGVzOworCXVpbnQ2NF90CXNfaWJfcnhfY3FfY2FsbDsKKwl1aW50NjRfdAlzX2liX3J4X2NxX2V2ZW50OworCXVpbnQ2NF90CXNfaWJfcnhfcmluZ19lbXB0eTsKKwl1aW50NjRfdAlzX2liX3J4X3JlZmlsbF9mcm9tX2NxOworCXVpbnQ2NF90CXNfaWJfcnhfcmVmaWxsX2Zyb21fdGhyZWFkOworCXVpbnQ2NF90CXNfaWJfcnhfYWxsb2NfbGltaXQ7CisJdWludDY0X3QJc19pYl9yeF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2liX2Fja19zZW50OworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbmRfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2liX2Fja19zZW5kX2RlbGF5ZWQ7CisJdWludDY0X3QJc19pYl9hY2tfc2VuZF9waWdneWJhY2tlZDsKKwl1aW50NjRfdAlzX2liX2Fja19yZWNlaXZlZDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfYWxsb2M7CisJdWludDY0X3QJc19pYl9yZG1hX21yX2ZyZWU7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3VzZWQ7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3Bvb2xfZmx1c2g7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3Bvb2xfd2FpdDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfcG9vbF9kZXBsZXRlZDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX2liX3dxOworCisvKgorICogRmFrZSBpYl9kbWFfc3luY19zZ19mb3Jfe2NwdSxkZXZpY2V9IGFzIGxvbmcgYXMgaWJfdmVyYnMuaAorICogZG9lc24ndCBkZWZpbmUgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ19kbWFfbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2dbaV0pLAorCQkJCWliX3NnX2RtYV9sZW4oZGV2LCAmc2dbaV0pLAorCQkJCWRpcmVjdGlvbik7CisJfQorfQorI2RlZmluZSBpYl9kbWFfc3luY19zZ19mb3JfY3B1CXJkc19pYl9kbWFfc3luY19zZ19mb3JfY3B1CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ19kbWFfbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2dbaV0pLAorCQkJCWliX3NnX2RtYV9sZW4oZGV2LCAmc2dbaV0pLAorCQkJCWRpcmVjdGlvbik7CisJfQorfQorI2RlZmluZSBpYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXJkc19pYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCisKKworLyogaWIuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQ7CitleHRlcm4gdm9pZCByZHNfaWJfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgcmRzX2liX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiBzdHJ1Y3QgaWJfY2xpZW50IHJkc19pYl9jbGllbnQ7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZm1yX3Bvb2xfc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZm1yX21lc3NhZ2Vfc2l6ZTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgaWJfbm9kZXZfY29ubnNfbG9jazsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGliX25vZGV2X2Nvbm5zOworCisvKiBpYl9jbS5jICovCitpbnQgcmRzX2liX2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApOwordm9pZCByZHNfaWJfY29ubl9mcmVlKHZvaWQgKmFyZyk7CitpbnQgcmRzX2liX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaWJfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaWJfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzayk7CitpbnQgX19pbml0IHJkc19pYl9saXN0ZW5faW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX2xpc3Rlbl9zdG9wKHZvaWQpOwordm9pZCBfX3Jkc19pYl9jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqLCAuLi4pOworaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CitpbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKK3ZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKKworI2RlZmluZSByZHNfaWJfY29ubl9lcnJvcihjb25uLCBmbXQuLi4pIFwKKwlfX3Jkc19pYl9jb25uX2Vycm9yKGNvbm4sIEtFUk5fV0FSTklORyAiUkRTL0lCOiAiIGZtdCkKKworLyogaWJfcmRtYS5jICovCitpbnQgcmRzX2liX3VwZGF0ZV9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcik7CitpbnQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnModm9pZCk7Cit2b2lkIHJkc19pYl9yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldik7CitzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnJkc19pYl9jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX2RldmljZSAqKTsKK3ZvaWQgcmRzX2liX2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKTsKK3ZvaWQgcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKik7Cit2b2lkICpyZHNfaWJfZ2V0X21yKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbmVudHMsCisJCSAgICBzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpOwordm9pZCByZHNfaWJfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyKTsKK3ZvaWQgcmRzX2liX2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpOwordm9pZCByZHNfaWJfZmx1c2hfbXJzKHZvaWQpOworCisvKiBpYl9yZWN2LmMgKi8KK2ludCBfX2luaXQgcmRzX2liX3JlY3ZfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX3JlY3ZfZXhpdCh2b2lkKTsKK2ludCByZHNfaWJfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKTsKK3ZvaWQgcmRzX2liX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfaWJfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK2ludCByZHNfaWJfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgICBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfcmVjdl9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfcmVjdl9pbml0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfYWNrX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit1NjQgcmRzX2liX3BpZ2d5Yl9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7CisKKy8qIGliX3JpbmcuYyAqLwordm9pZCByZHNfaWJfcmluZ19pbml0KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordm9pZCByZHNfaWJfcmluZ19yZXNpemUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucik7Cit1MzIgcmRzX2liX3JpbmdfYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKTsKK3ZvaWQgcmRzX2liX3JpbmdfZnJlZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCk7Cit2b2lkIHJkc19pYl9yaW5nX3VuYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOworaW50IHJkc19pYl9yaW5nX2VtcHR5KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKTsKK2ludCByZHNfaWJfcmluZ19sb3coc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pYl9yaW5nX29sZGVzdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZyk7Cit1MzIgcmRzX2liX3JpbmdfY29tcGxldGVkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgd3JfaWQsIHUzMiBvbGRlc3QpOworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHJkc19pYl9yaW5nX2VtcHR5X3dhaXQ7CisKKy8qIGliX3NlbmQuYyAqLwordm9pZCByZHNfaWJfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19pYl94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZik7Cit2b2lkIHJkc19pYl9zZW5kX2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgcmRzX2liX3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOworaW50IHJkc19pYl94bWl0X3JkbWEoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKTsKK3ZvaWQgcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cyk7Cit2b2lkIHJkc19pYl9hZHZlcnRpc2VfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBwb3N0ZWQpOworaW50IHJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1MzIgd2FudGVkLAorCQkJICAgICB1MzIgKmFkdl9jcmVkaXRzLCBpbnQgbmVlZF9wb3N0ZWQpOworCisvKiBpYl9zdGF0cy5jICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzLCByZHNfaWJfc3RhdHMpOworI2RlZmluZSByZHNfaWJfc3RhdHNfaW5jKG1lbWJlcikgcmRzX3N0YXRzX2luY193aGljaChyZHNfaWJfc3RhdHMsIG1lbWJlcikKK3Vuc2lnbmVkIGludCByZHNfaWJfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKTsKKworLyogaWJfc3lzY3RsLmMgKi8KK2ludCBfX2luaXQgcmRzX2liX3N5c2N0bF9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfc3lzY3RsX2V4aXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uOworZXh0ZXJuIHVuc2lnbmVkIGludCByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDsKK2V4dGVybiBjdGxfdGFibGUgcmRzX2liX3N5c2N0bF90YWJsZVtdOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZSBoZWFkZXIgYW5kIGRhdGEgU0dFcyBpbgorICogUkRTIHBhY2tldHMgKG5vdCBSRE1BKQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgorcmRzX2liX2hlYWRlcl9zZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQoreworCXJldHVybiAmc2dlWzBdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgorcmRzX2liX2RhdGFfc2dlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVsxXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9zZXRfNjRiaXQodTY0ICpwdHIsIHU2NCB2YWwpCit7CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCSpwdHIgPSB2YWw7CisjZWxzZQorCXNldF82NGJpdChwdHIsIHZhbCk7CisjZW5kaWYKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUzMjIzNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfY20uYwpAQCAtMCwwICsxLDcyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCisvKgorICogU2V0IHRoZSBzZWxlY3RlZCBwcm90b2NvbCB2ZXJzaW9uCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfcHJvdG9jb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgdmVyc2lvbikKK3sKKwljb25uLT5jX3ZlcnNpb24gPSB2ZXJzaW9uOworfQorCisvKgorICogU2V0IHVwIGZsb3cgY29udHJvbAorICovCitzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sICYmIGNyZWRpdHMgIT0gMCkgeworCQkvKiBXZSdyZSBkb2luZyBmbG93IGNvbnRyb2wgKi8KKwkJaWMtPmlfZmxvd2N0bCA9IDE7CisJCXJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdHMpOworCX0gZWxzZSB7CisJCWljLT5pX2Zsb3djdGwgPSAwOworCX0KK30KKworLyoKKyAqIFR1bmUgUk5SIGJlaGF2aW9yLiBXaXRob3V0IGZsb3cgY29udHJvbCwgd2UgdXNlIGEgcmF0aGVyCisgKiBsb3cgdGltZW91dCwgYnV0IG5vdCB0aGUgYWJzb2x1dGUgbWluaW11bSAtIHRoaXMgc2hvdWxkCisgKiBiZSB0dW5hYmxlLgorICoKKyAqIFdlIGFscmVhZHkgc2V0IHRoZSBSTlIgcmV0cnkgY291bnQgdG8gNyAod2hpY2ggaXMgdGhlCisgKiBzbWFsbGVzdCBpbmZpbml0ZSBudW1iZXIgOi0pIGFib3ZlLgorICogSWYgZmxvdyBjb250cm9sIGlzIG9mZiwgd2Ugd2FudCB0byBjaGFuZ2UgdGhpcyBiYWNrIHRvIDAKKyAqIHNvIHRoYXQgd2UgbGVhcm4gcXVpY2tseSB3aGVuIG91ciBjcmVkaXQgYWNjb3VudGluZyBpcworICogYnVnZ3kuCisgKgorICogQ2FsbGVyIHBhc3NlcyBpbiBhIHFwX2F0dHIgcG9pbnRlciAtIGRvbid0IHdhc3RlIHN0YWNrIHNwYWN2CisgKiBieSBhbGxvY2F0aW9uIHRoaXMgdHdpY2UuCisgKi8KK3N0YXRpYyB2b2lkCityZHNfaWJfdHVuZV9ybnIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIpCit7CisJaW50IHJldDsKKworCWF0dHItPm1pbl9ybnJfdGltZXIgPSBJQl9STlJfVElNRVJfMDAwXzMyOworCXJldCA9IGliX21vZGlmeV9xcChpYy0+aV9jbV9pZC0+cXAsIGF0dHIsIElCX1FQX01JTl9STlJfVElNRVIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX05PVElDRSAiaWJfbW9kaWZ5X3FwKElCX1FQX01JTl9STlJfVElNRVIpOiBlcnI9JWRcbiIsIC1yZXQpOworfQorCisvKgorICogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4KKyAqIFdlIGdldCBoZXJlIGZvciBib3RoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOworCWludCBlcnI7CisKKwlpZiAoZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbikgeworCQlkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKworCQlyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sCisJCQkJUkRTX1BST1RPQ09MKGRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKSk7CisJCXJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKwl9CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JQjogY29ubmVjdGVkIHRvICVwSTQgdmVyc2lvbiAldS4ldSVzXG4iLAorCQkJJmNvbm4tPmNfbGFkZHIsCisJCQlSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCVJEU19QUk9UT0NPTF9NSU5PUihjb25uLT5jX3ZlcnNpb24pLAorCQkJaWMtPmlfZmxvd2N0bCA/ICIsIGZsb3cgY29udHJvbCIgOiAiIik7CisKKwkvKiBUdW5lIFJOUiBiZWhhdmlvciAqLworCXJkc19pYl90dW5lX3JucihpYywgJnFwX2F0dHIpOworCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19SVFM7CisJZXJyID0gaWJfbW9kaWZ5X3FwKGljLT5pX2NtX2lkLT5xcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgImliX21vZGlmeV9xcChJQl9RUF9TVEFURSwgUlRTKTogZXJyPSVkXG4iLCBlcnIpOworCisJLyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICYgY29ubiAqLworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisJZXJyID0gcmRzX2liX3VwZGF0ZV9pcGFkZHIocmRzX2liZGV2LCBjb25uLT5jX2xhZGRyKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgInJkc19pYl91cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCWVyciA9IHJkc19pYl9hZGRfY29ubihyZHNfaWJkZXYsIGNvbm4pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2liX2FkZF9jb25uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCisJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKKwkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KKwlpZiAoZHAgJiYgZHAtPmRwX2Fja19zZXEpCisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUoZHAtPmRwX2Fja19zZXEpLCBOVUxMKTsKKworCXJkc19jb25uZWN0X2NvbXBsZXRlKGNvbm4pOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0sCisJCQlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHAsCisJCQl1MzIgcHJvdG9jb2xfdmVyc2lvbikKK3sKKwltZW1zZXQoY29ubl9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0pKTsKKwkvKiBYWFggdHVuZSB0aGVzZT8gKi8KKwljb25uX3BhcmFtLT5yZXNwb25kZXJfcmVzb3VyY2VzID0gMTsKKwljb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGggPSAxOworCWNvbm5fcGFyYW0tPnJldHJ5X2NvdW50ID0gNzsKKwljb25uX3BhcmFtLT5ybnJfcmV0cnlfY291bnQgPSA3OworCisJaWYgKGRwKSB7CisJCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJCW1lbXNldChkcCwgMCwgc2l6ZW9mKCpkcCkpOworCQlkcC0+ZHBfc2FkZHIgPSBjb25uLT5jX2xhZGRyOworCQlkcC0+ZHBfZGFkZHIgPSBjb25uLT5jX2ZhZGRyOworCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPSBSRFNfUFJPVE9DT0xfTUFKT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vciA9IFJEU19QUk9UT0NPTF9NSU5PUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2sgPSBjcHVfdG9fYmUxNihSRFNfSUJfU1VQUE9SVEVEX1BST1RPQ09MUyk7CisJCWRwLT5kcF9hY2tfc2VxID0gcmRzX2liX3BpZ2d5Yl9hY2soaWMpOworCisJCS8qIEFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKGljLT5pX2Zsb3djdGwpIHsKKwkJCXVuc2lnbmVkIGludCBjcmVkaXRzOworCisJCQljcmVkaXRzID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpOworCQkJZHAtPmRwX2NyZWRpdCA9IGNwdV90b19iZTMyKGNyZWRpdHMpOworCQkJYXRvbWljX3N1YihJQl9TRVRfUE9TVF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJCX0KKworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGEgPSBkcDsKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiA9IHNpemVvZigqZHApOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlyZHNkZWJ1ZygiZXZlbnQgJXUgZGF0YSAlcFxuIiwgZXZlbnQtPmV2ZW50LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3FwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBkYXRhOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzZGVidWcoImNvbm4gJXAgaWMgJXAgZXZlbnQgJXVcbiIsIGNvbm4sIGljLCBldmVudC0+ZXZlbnQpOworCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIElCX0VWRU5UX0NPTU1fRVNUOgorCQlyZG1hX25vdGlmeShpYy0+aV9jbV9pZCwgSUJfRVZFTlRfQ09NTV9FU1QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvaWI6IHVuaGFuZGxlZCBRUCBldmVudCAldSAiCisJCSAgICAgICAib24gY29ubmVjdGlvbiB0byAlcEk0XG4iLCBldmVudC0+ZXZlbnQsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIG5vdCBsZWF2ZSBJU19FUlIgcG9pbnRlcnMgYXJvdW5kIGZvcgorICogY2xlYW51cCB0byB0cmlwIG92ZXIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2liX3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCWludCByZXQ7CisKKwkvKiByZHNfaWJfYWRkX29uZSBjcmVhdGVzIGEgcmRzX2liX2RldmljZSBvYmplY3QgcGVyIElCIGRldmljZSwKKwkgKiBhbmQgYWxsb2NhdGVzIGEgcHJvdGVjdGlvbiBkb21haW4sIG1lbW9yeSByYW5nZSBhbmQgRk1SIHBvb2wKKwkgKiBmb3IgZWFjaC4gIElmIHRoYXQgZmFpbHMgZm9yIGFueSByZWFzb24sIGl0IHdpbGwgbm90IHJlZ2lzdGVyCisJICogdGhlIHJkc19pYmRldiBhdCBhbGwuCisJICovCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldiwgJnJkc19pYl9jbGllbnQpOworCWlmIChyZHNfaWJkZXYgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSUI6IE5vIGNsaWVudF9kYXRhIGZvciBkZXZpY2UgJXNcbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAocmRzX2liZGV2LT5tYXhfd3JzIDwgaWMtPmlfc2VuZF9yaW5nLndfbnIgKyAxKQorCQlyZHNfaWJfcmluZ19yZXNpemUoJmljLT5pX3NlbmRfcmluZywgcmRzX2liZGV2LT5tYXhfd3JzIC0gMSk7CisJaWYgKHJkc19pYmRldi0+bWF4X3dycyA8IGljLT5pX3JlY3ZfcmluZy53X25yICsgMSkKKwkJcmRzX2liX3JpbmdfcmVzaXplKCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pYmRldi0+bWF4X3dycyAtIDEpOworCisJLyogUHJvdGVjdGlvbiBkb21haW4gYW5kIG1lbW9yeSByYW5nZSAqLworCWljLT5pX3BkID0gcmRzX2liZGV2LT5wZDsKKwlpYy0+aV9tciA9IHJkc19pYmRldi0+bXI7CisKKwlpYy0+aV9zZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX3NlbmRfY3FfY29tcF9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBpYy0+aV9zZW5kX3Jpbmcud19uciArIDEsIDApOworCWlmIChJU19FUlIoaWMtPmlfc2VuZF9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9zZW5kX2NxKTsKKwkJaWMtPmlfc2VuZF9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9yZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBpYy0+aV9yZWN2X3Jpbmcud19uciwgMCk7CisJaWYgKElTX0VSUihpYy0+aV9yZWN2X2NxKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX3JlY3ZfY3EpOworCQlpYy0+aV9yZWN2X2NxID0gTlVMTDsKKwkJcmRzZGVidWcoImliX2NyZWF0ZV9jcSByZWN2IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoaWMtPmlfc2VuZF9jcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShpYy0+aV9yZWN2X2NxLCBJQl9DUV9TT0xJQ0lURUQpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3EgcmVjdiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBYWFggbmVnb3RpYXRlIG1heCBzZW5kL3JlY3Ygd2l0aCByZW1vdGU/ICovCisJbWVtc2V0KCZhdHRyLCAwLCBzaXplb2YoYXR0cikpOworCWF0dHIuZXZlbnRfaGFuZGxlciA9IHJkc19pYl9xcF9ldmVudF9oYW5kbGVyOworCWF0dHIucXBfY29udGV4dCA9IGNvbm47CisJLyogKyAxIHRvIGFsbG93IGZvciB0aGUgc2luZ2xlIGFjayBtZXNzYWdlICovCisJYXR0ci5jYXAubWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19uciArIDE7CisJYXR0ci5jYXAubWF4X3JlY3Zfd3IgPSBpYy0+aV9yZWN2X3Jpbmcud19uciArIDE7CisJYXR0ci5jYXAubWF4X3NlbmRfc2dlID0gcmRzX2liZGV2LT5tYXhfc2dlOworCWF0dHIuY2FwLm1heF9yZWN2X3NnZSA9IFJEU19JQl9SRUNWX1NHRTsKKwlhdHRyLnNxX3NpZ190eXBlID0gSUJfU0lHTkFMX1JFUV9XUjsKKwlhdHRyLnFwX3R5cGUgPSBJQl9RUFRfUkM7CisJYXR0ci5zZW5kX2NxID0gaWMtPmlfc2VuZF9jcTsKKwlhdHRyLnJlY3ZfY3EgPSBpYy0+aV9yZWN2X2NxOworCisJLyoKKwkgKiBYWFggdGhpcyBjYW4gZmFpbCBpZiBtYXhfKl93ciBpcyB0b28gbGFyZ2U/ICBBcmUgd2Ugc3VwcG9zZWQKKwkgKiB0byBiYWNrIG9mZiB1bnRpbCB3ZSBnZXQgYSB2YWx1ZSB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gc3VwcG9ydD8KKwkgKi8KKwlyZXQgPSByZG1hX2NyZWF0ZV9xcChpYy0+aV9jbV9pZCwgaWMtPmlfcGQsICZhdHRyKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJyZG1hX2NyZWF0ZV9xcCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kX2hkcnMgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAmaWMtPmlfc2VuZF9oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX3NlbmRfaGRycyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgc2VuZCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9yZWN2X2hkcnMgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9yZWN2X3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAmaWMtPmlfcmVjdl9oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX3JlY3ZfaGRycyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgcmVjdiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9hY2sgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCSAgICAgICAmaWMtPmlfYWNrX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX2FjayA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgYWNrIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3NlbmRzID0gdm1hbGxvYyhpYy0+aV9zZW5kX3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2liX3NlbmRfd29yaykpOworCWlmIChpYy0+aV9zZW5kcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJzZW5kIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7CisKKwlpYy0+aV9yZWN2cyA9IHZtYWxsb2MoaWMtPmlfcmVjdl9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pYl9yZWN2X3dvcmspKTsKKwlpZiAoaWMtPmlfcmVjdnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygicmVjdiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pYl9yZWN2X2luaXRfcmluZyhpYyk7CisJcmRzX2liX3JlY3ZfaW5pdF9hY2soaWMpOworCisJLyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlCisJICogdGhlIHBvc3RlZCBjcmVkaXQgY291bnQuICovCisJcmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMSk7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBwZCAlcCBtciAlcCBjcSAlcCAlcFxuIiwgY29ubiwgaWMtPmlfcGQsIGljLT5pX21yLAorCQkgaWMtPmlfc2VuZF9jcSwgaWMtPmlfcmVjdl9jcSk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCkKK3sKKwl1MTYgY29tbW9uOworCXUzMiB2ZXJzaW9uID0gMDsKKworCS8qIHJkbWFfY20gcHJpdmF0ZSBkYXRhIGlzIG9kZCAtIHdoZW4gdGhlcmUgaXMgYW55IHByaXZhdGUgZGF0YSBpbiB0aGUKKwkgKiByZXF1ZXN0LCB3ZSB3aWxsIGJlIGdpdmVuIGEgcHJldHR5IGxhcmdlIGJ1ZmZlciB3aXRob3V0IHRlbGxpbmcgdXMgdGhlCisJICogb3JpZ2luYWwgc2l6ZS4gVGhlIG9ubHkgd2F5IHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgaXMgYnkgbG9va2luZyBhdAorCSAqIHRoZSBjb250ZW50cywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uCisJICogSWYgdGhlIHByb3RvY29sIHZlcnNpb24gZmllbGRzIGFyZW4ndCBzZXQsIHRoaXMgaXMgYSBjb25uZWN0aW9uIGF0dGVtcHQKKwkgKiBmcm9tIGFuIG9sZGVyIHZlcnNpb24uIFRoaXMgY291bGQgY291bGQgYmUgMy4wIG9yIDIuMCAtIHdlIGNhbid0IHRlbGwuCisJICogV2UgcmVhbGx5IHNob3VsZCBoYXZlIGNoYW5nZWQgdGhpcyBmb3IgT0ZFRCAxLjMgOi0oICovCisJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAwKQorCQlyZXR1cm4gUkRTX1BST1RPQ09MXzNfMDsKKworCWNvbW1vbiA9IGJlMTZfdG9fY3B1KGRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrKSAmIFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTOworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMyAmJiBjb21tb24pIHsKKwkJdmVyc2lvbiA9IFJEU19QUk9UT0NPTF8zXzA7CisJCXdoaWxlICgoY29tbW9uID4+PSAxKSAhPSAwKQorCQkJdmVyc2lvbisrOworCX0gZWxzZSBpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiUkRTOiBDb25uZWN0aW9uIGZyb20gJXBJNCB1c2luZyAiCisJCQkiaW5jb21wYXRpYmxlIHByb3RvY29sIHZlcnNpb24gJXUuJXVcbiIsCisJCQkmZHAtPmRwX3NhZGRyLAorCQkJZHAtPmRwX3Byb3RvY29sX21ham9yLAorCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKTsKKwl9CisJcmV0dXJuIHZlcnNpb247Cit9CisKK2ludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJCSAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJX19iZTY0IGxndWlkID0gY21faWQtPnJvdXRlLnBhdGhfcmVjLT5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQ7CisJX19iZTY0IGZndWlkID0gY21faWQtPnJvdXRlLnBhdGhfcmVjLT5kZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQ7CisJY29uc3Qgc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwID0gZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhOworCXN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlIGRwX3JlcDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBOVUxMOworCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKKwl1MzIgdmVyc2lvbjsKKwlpbnQgZXJyLCBkZXN0cm95ID0gMTsKKworCS8qIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBwcm90b2NvbCB2ZXJzaW9uIG1hdGNoZXMgb3Vycy4gKi8KKwl2ZXJzaW9uID0gcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoZHApOworCWlmICghdmVyc2lvbikKKwkJZ290byBvdXQ7CisKKwlyZHNkZWJ1Zygic2FkZHIgJXBJNCBkYWRkciAlcEk0IFJEU3YldS4ldSBsZ3VpZCAweCVsbHggZmd1aWQgIgorCQkgIjB4JWxseFxuIiwgJmRwLT5kcF9zYWRkciwgJmRwLT5kcF9kYWRkciwKKwkJIFJEU19QUk9UT0NPTF9NQUpPUih2ZXJzaW9uKSwgUkRTX1BST1RPQ09MX01JTk9SKHZlcnNpb24pLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShsZ3VpZCksCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KGZndWlkKSk7CisKKwljb25uID0gcmRzX2Nvbm5fY3JlYXRlKGRwLT5kcF9kYWRkciwgZHAtPmRwX3NhZGRyLCAmcmRzX2liX3RyYW5zcG9ydCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCXJkc2RlYnVnKCJyZHNfY29ubl9jcmVhdGUgZmFpbGVkICglbGQpXG4iLCBQVFJfRVJSKGNvbm4pKTsKKwkJY29ubiA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBtYXkgb2NjdXIgd2hpbGUgdGhlCisJICogcHJldmlvdXMgY29ubmVjdGlvbiBleGlzdCwgZS5nLiBpbiBjYXNlIG9mIGZhaWxvdmVyLgorCSAqIEJ1dCBhcyBjb25uZWN0aW9ucyBtYXkgYmUgaW5pdGlhdGVkIHNpbXVsdGFuZW91c2x5CisJICogYnkgYm90aCBob3N0cywgd2UgaGF2ZSBhIHJhbmRvbSBiYWNrb2ZmIG1lY2hhbmlzbSAtCisJICogc2VlIHRoZSBjb21tZW50IGFib3ZlIHJkc19xdWV1ZV9yZWNvbm5lY3QoKQorCSAqLworCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0NPTk5FQ1RJTkcpKSB7CisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQkJcmRzZGVidWcoImluY29taW5nIGNvbm5lY3Qgd2hpbGUgY29ubmVjdGluZ1xuIik7CisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX2xpc3Rlbl9jbG9zZWRfc3RhbGUpOworCQl9IGVsc2UKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFdhaXQgYW5kIHNlZSAtIG91ciBjb25uZWN0IG1heSBzdGlsbCBiZSBzdWNjZWVkaW5nICovCisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfY29ubmVjdF9yYWNlZCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIHZlcnNpb24pOworCXJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlCVUdfT04oY21faWQtPmNvbnRleHQpOworCUJVR19PTihpYy0+aV9jbV9pZCk7CisKKwlpYy0+aV9jbV9pZCA9IGNtX2lkOworCWNtX2lkLT5jb250ZXh0ID0gY29ubjsKKworCS8qIFdlIGdvdCBoYWxmd2F5IHRocm91Z2ggc2V0dGluZyB1cCB0aGUgaWJfY29ubmVjdGlvbiwgaWYgd2UKKwkgKiBmYWlsIG5vdywgd2UgaGF2ZSB0byB0YWtlIHRoZSBsb25nIHJvdXRlIG91dCBvZiB0aGlzIG1lc3MuICovCisJZGVzdHJveSA9IDA7CisKKwllcnIgPSByZHNfaWJfc2V0dXBfcXAoY29ubik7CisJaWYgKGVycikgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRzX2liX3NldHVwX3FwIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sICZjb25uX3BhcmFtLCAmZHBfcmVwLCB2ZXJzaW9uKTsKKworCS8qIHJkbWFfYWNjZXB0KCkgY2FsbHMgcmRtYV9yZWplY3QoKSBpbnRlcm5hbGx5IGlmIGl0IGZhaWxzICovCisJZXJyID0gcmRtYV9hY2NlcHQoY21faWQsICZjb25uX3BhcmFtKTsKKwltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKGVycikgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRtYV9hY2NlcHQgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJldHVybiAwOworCitvdXQ6CisJcmRtYV9yZWplY3QoY21faWQsIE5VTEwsIDApOworCXJldHVybiBkZXN0cm95OworfQorCisKK2ludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlIGRwOworCWludCByZXQ7CisKKwkvKiBJZiB0aGUgcGVlciBkb2Vzbid0IGRvIHByb3RvY29sIG5lZ290aWF0aW9uLCB3ZSBtdXN0CisJICogZGVmYXVsdCB0byBSRFN2My4wICovCisJcmRzX2liX3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfM18wKTsKKwlpYy0+aV9mbG93Y3RsID0gcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2w7CS8qIGFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKworCXJldCA9IHJkc19pYl9zZXR1cF9xcChjb25uKTsKKwlpZiAocmV0KSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZHNfaWJfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcCwgUkRTX1BST1RPQ09MX1ZFUlNJT04pOworCisJcmV0ID0gcmRtYV9jb25uZWN0KGNtX2lkLCAmY29ubl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkbWFfY29ubmVjdCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKworb3V0OgorCS8qIEJld2FyZSAtIHJldHVybmluZyBub24temVybyB0ZWxscyB0aGUgcmRtYV9jbSB0byBkZXN0cm95CisJICogdGhlIGNtX2lkLiBXZSBzaG91bGQgY2VydGFpbmx5IG5vdCBkbyBpdCBhcyBsb25nIGFzIHdlIHN0aWxsCisJICogIm93biIgdGhlIGNtX2lkLiAqLworCWlmIChyZXQpIHsKKwkJaWYgKGljLT5pX2NtX2lkID09IGNtX2lkKQorCQkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19pYl9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRlc3Q7CisJaW50IHJldDsKKworCS8qIFhYWCBJIHdvbmRlciB3aGF0IGFmZmVjdCB0aGUgcG9ydCBzcGFjZSBoYXMgKi8KKwkvKiBkZWxlZ2F0ZSBjbSBldmVudCBoYW5kbGVyIHRvIHJkbWFfdHJhbnNwb3J0ICovCisJaWMtPmlfY21faWQgPSByZG1hX2NyZWF0ZV9pZChyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyLCBjb25uLAorCQkJCSAgICAgUkRNQV9QU19UQ1ApOworCWlmIChJU19FUlIoaWMtPmlfY21faWQpKSB7CisJCXJldCA9IFBUUl9FUlIoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCXJkc2RlYnVnKCJyZG1hX2NyZWF0ZV9pZCgpIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc2RlYnVnKCJjcmVhdGVkIGNtIGlkICVwIGZvciBjb25uICVwXG4iLCBpYy0+aV9jbV9pZCwgY29ubik7CisKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc3JjLnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2xhZGRyOworCXNyYy5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucygwKTsKKworCWRlc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJZGVzdC5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19mYWRkcjsKKwlkZXN0LnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKFJEU19QT1JUKTsKKworCXJldCA9IHJkbWFfcmVzb2x2ZV9hZGRyKGljLT5pX2NtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNyYywKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJmRlc3QsCisJCQkJUkRTX1JETUFfUkVTT0xWRV9USU1FT1VUX01TKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJhZGRyIHJlc29sdmUgZmFpbGVkIGZvciBjbSBpZCAlcDogJWRcbiIsIGljLT5pX2NtX2lkLAorCQkJIHJldCk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBzbyBjYXJlZnVsIGFib3V0IG9ubHkgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIHRoYXQgd2VyZSBidWlsdCB1cAorICogc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGF0IGFueSBwb2ludCBkdXJpbmcgc3RhcnR1cC4gIEluIGZhY3QgaXQKKyAqIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaWJfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IGVyciA9IDA7CisKKwlyZHNkZWJ1ZygiY20gJXAgcGQgJXAgY3EgJXAgJXAgcXAgJXBcbiIsIGljLT5pX2NtX2lkLAorCQkgaWMtPmlfcGQsIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EsCisJCSBpYy0+aV9jbV9pZCA/IGljLT5pX2NtX2lkLT5xcCA6IE5VTEwpOworCisJaWYgKGljLT5pX2NtX2lkKSB7CisJCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisKKwkJcmRzZGVidWcoImRpc2Nvbm5lY3RpbmcgY20gJXBcbiIsIGljLT5pX2NtX2lkKTsKKwkJZXJyID0gcmRtYV9kaXNjb25uZWN0KGljLT5pX2NtX2lkKTsKKwkJaWYgKGVycikgeworCQkJLyogQWN0dWFsbHkgdGhpcyBtYXkgaGFwcGVuIHF1aXRlIGZyZXF1ZW50bHksIHdoZW4KKwkJCSAqIGFuIG91dGdvaW5nIGNvbm5lY3QgcmFjZWQgd2l0aCBhbiBpbmNvbWluZyBjb25uZWN0LgorCQkJICovCisJCQlyZHNkZWJ1ZygiZmFpbGVkIHRvIGRpc2Nvbm5lY3QsIGNtOiAlcCBlcnIgJWRcbiIsCisJCQkJaWMtPmlfY21faWQsIGVycik7CisJCX0KKworCQl3YWl0X2V2ZW50KHJkc19pYl9yaW5nX2VtcHR5X3dhaXQsCisJCQlyZHNfaWJfcmluZ19lbXB0eSgmaWMtPmlfc2VuZF9yaW5nKSAmJgorCQkJcmRzX2liX3JpbmdfZW1wdHkoJmljLT5pX3JlY3ZfcmluZykpOworCisJCWlmIChpYy0+aV9zZW5kX2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3NlbmRfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3NlbmRfaGRycywKKwkJCQkJICAgaWMtPmlfc2VuZF9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX3JlY3ZfaGRycykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzLAorCQkJCQkgICBpYy0+aV9yZWN2X2hkcnNfZG1hKTsKKworCQlpZiAoaWMtPmlfYWNrKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAgIGljLT5pX2FjaywgaWMtPmlfYWNrX2RtYSk7CisKKwkJaWYgKGljLT5pX3NlbmRzKQorCQkJcmRzX2liX3NlbmRfY2xlYXJfcmluZyhpYyk7CisJCWlmIChpYy0+aV9yZWN2cykKKwkJCXJkc19pYl9yZWN2X2NsZWFyX3JpbmcoaWMpOworCisJCWlmIChpYy0+aV9jbV9pZC0+cXApCisJCQlyZG1hX2Rlc3Ryb3lfcXAoaWMtPmlfY21faWQpOworCQlpZiAoaWMtPmlfc2VuZF9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfc2VuZF9jcSk7CisJCWlmIChpYy0+aV9yZWN2X2NxKQorCQkJaWJfZGVzdHJveV9jcShpYy0+aV9yZWN2X2NxKTsKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKworCQkvKgorCQkgKiBNb3ZlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgbm9kZXYgbGlzdC4KKwkJICovCisJCWlmIChpYy0+cmRzX2liZGV2KSB7CisKKwkJCXNwaW5fbG9ja19pcnEoJmljLT5yZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwkJCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aWJfbm9kZSkpOworCQkJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaWMtPnJkc19pYmRldi0+c3BpbmxvY2spOworCisJCQlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmaWJfbm9kZXZfY29ubnMpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwkJCWljLT5yZHNfaWJkZXYgPSBOVUxMOworCQl9CisKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlpYy0+aV9wZCA9IE5VTEw7CisJCWljLT5pX21yID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9jcSA9IE5VTEw7CisJCWljLT5pX3JlY3ZfY3EgPSBOVUxMOworCQlpYy0+aV9zZW5kX2hkcnMgPSBOVUxMOworCQlpYy0+aV9yZWN2X2hkcnMgPSBOVUxMOworCQlpYy0+aV9hY2sgPSBOVUxMOworCX0KKwlCVUdfT04oaWMtPnJkc19pYmRldik7CisKKwkvKiBDbGVhciBwZW5kaW5nIHRyYW5zbWl0ICovCisJaWYgKGljLT5pX3JtKSB7CisJCXJkc19tZXNzYWdlX3B1dChpYy0+aV9ybSk7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwkvKiBDbGVhciB0aGUgQUNLIHN0YXRlICovCisJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pYl9zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCAwKTsKKwlpYy0+aV9hY2tfcmVjdiA9IDA7CisKKwkvKiBDbGVhciBmbG93IGNvbnRyb2wgc3RhdGUgKi8KKwlpYy0+aV9mbG93Y3RsID0gMDsKKwlhdG9taWNfc2V0KCZpYy0+aV9jcmVkaXRzLCAwKTsKKworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWlmIChpYy0+aV9pYmluYykgeworCQlyZHNfaW5jX3B1dCgmaWMtPmlfaWJpbmMtPmlpX2luYyk7CisJCWljLT5pX2liaW5jID0gTlVMTDsKKwl9CisKKwl2ZnJlZShpYy0+aV9zZW5kcyk7CisJaWMtPmlfc2VuZHMgPSBOVUxMOworCXZmcmVlKGljLT5pX3JlY3ZzKTsKKwlpYy0+aV9yZWN2cyA9IE5VTEw7Cit9CisKK2ludCByZHNfaWJfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBYWFggdG9vIGxhenk/ICovCisJaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmaWMtPmliX25vZGUpOworCW11dGV4X2luaXQoJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJLyoKKwkgKiByZHNfaWJfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXkKKwkgKiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCBjYW4gYmUgY2FsbGVkLgorCSAqLworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWljLT5jb25uID0gY29ubjsKKwljb25uLT5jX3RyYW5zcG9ydF9kYXRhID0gaWM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWJfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmaWJfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmliX25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCisJcmRzZGVidWcoImNvbm4gJXAgY29ubiBpYyAlcFxuIiwgY29ubiwgY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGFyZzsKKwlyZHNkZWJ1ZygiaWMgJXBcbiIsIGljKTsKKwlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCWtmcmVlKGljKTsKK30KKworCisvKgorICogQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAqLwordm9pZAorX19yZHNfaWJfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlyZHNfY29ubl9kcm9wKGNvbm4pOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnByaW50ayhmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZG1hLmMgYi9uZXQvcmRzL2liX3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE2Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9yZG1hLmMKQEAgLTAsMCArMSw2NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgImliLmgiCisKKworLyoKKyAqIFRoaXMgaXMgc3RvcmVkIGFzIG1yLT5yX3RyYW5zX3ByaXZhdGUuCisgKi8KK3N0cnVjdCByZHNfaWJfbXIgeworCXN0cnVjdCByZHNfaWJfZGV2aWNlCSpkZXZpY2U7CisJc3RydWN0IHJkc19pYl9tcl9wb29sCSpwb29sOworCXN0cnVjdCBpYl9mbXIJCSpmbXI7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXVuc2lnbmVkIGludAkJcmVtYXBfY291bnQ7CisKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOworCXVuc2lnbmVkIGludAkJc2dfbGVuOworCXU2NAkJCSpkbWE7CisJaW50CQkJc2dfZG1hX2xlbjsKK307CisKKy8qCisgKiBPdXIgb3duIGxpdHRsZSBGTVIgcG9vbAorICovCitzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgeworCXN0cnVjdCBtdXRleAkJZmx1c2hfbG9jazsJCS8qIHNlcmlhbGl6ZSBmbXIgaW52YWxpZGF0ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlmbHVzaF93b3JrZXI7CQkvKiBmbHVzaCB3b3JrZXIgKi8KKworCXNwaW5sb2NrX3QJCWxpc3RfbG9jazsJCS8qIHByb3RlY3QgdmFyaWFibGVzIGJlbG93ICovCisJYXRvbWljX3QJCWl0ZW1fY291bnQ7CQkvKiB0b3RhbCAjIG9mIE1ScyAqLworCWF0b21pY190CQlkaXJ0eV9jb3VudDsJCS8qICMgZGlydHkgb2YgTVJzICovCisJc3RydWN0IGxpc3RfaGVhZAlkcm9wX2xpc3Q7CQkvKiBNUnMgdGhhdCBoYXZlIHJlYWNoZWQgdGhlaXIgbWF4X21hcHMgbGltaXQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfbGlzdDsJCS8qIHVudXNlZCBNUnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsZWFuX2xpc3Q7CQkvKiB1bnVzZWQgJiB1bmFtYXBwZWQgTVJzICovCisJYXRvbWljX3QJCWZyZWVfcGlubmVkOwkJLyogbWVtb3J5IHBpbm5lZCBieSBmcmVlIE1ScyAqLworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtczsKKwl1bnNpZ25lZCBsb25nCQltYXhfaXRlbXNfc29mdDsKKwl1bnNpZ25lZCBsb25nCQltYXhfZnJlZV9waW5uZWQ7CisJc3RydWN0IGliX2Ztcl9hdHRyCWZtcl9hdHRyOworfTsKKworc3RhdGljIGludCByZHNfaWJfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCk7CitzdGF0aWMgdm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcik7CitzdGF0aWMgdm9pZCByZHNfaWJfbXJfcG9vbF9mbHVzaF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJfZ2V0X2RldmljZShfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZHNfaWJkZXYsICZyZHNfaWJfZGV2aWNlcywgbGlzdCkgeworCQlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpX2lwYWRkciwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChpX2lwYWRkci0+aXBhZGRyID09IGlwYWRkcikgeworCQkJCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJCQkJcmV0dXJuIHJkc19pYmRldjsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHJkc19pYl9hZGRfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyOworCisJaV9pcGFkZHIgPSBrbWFsbG9jKHNpemVvZiAqaV9pcGFkZHIsIEdGUF9LRVJORUwpOworCWlmICghaV9pcGFkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaV9pcGFkZHItPmlwYWRkciA9IGlwYWRkcjsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmlfaXBhZGRyLT5saXN0LCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfcmVtb3ZlX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkciwgKm5leHQ7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaV9pcGFkZHIsIG5leHQsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0LCBsaXN0KSB7CisJCWlmIChpX2lwYWRkci0+aXBhZGRyID09IGlwYWRkcikgeworCQkJbGlzdF9kZWwoJmlfaXBhZGRyLT5saXN0KTsKKwkJCWtmcmVlKGlfaXBhZGRyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7Cit9CisKK2ludCByZHNfaWJfdXBkYXRlX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXZfb2xkOworCisJcmRzX2liZGV2X29sZCA9IHJkc19pYl9nZXRfZGV2aWNlKGlwYWRkcik7CisJaWYgKHJkc19pYmRldl9vbGQpCisJCXJkc19pYl9yZW1vdmVfaXBhZGRyKHJkc19pYmRldl9vbGQsIGlwYWRkcik7CisKKwlyZXR1cm4gcmRzX2liX2FkZF9pcGFkZHIocmRzX2liZGV2LCBpcGFkZHIpOworfQorCitpbnQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCS8qIGNvbm4gd2FzIHByZXZpb3VzbHkgb24gdGhlIG5vZGV2X2Nvbm5zX2xpc3QgKi8KKwlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaWJfbm9kZXZfY29ubnMpKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaWMtPmliX25vZGUpKTsKKwlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJnJkc19pYmRldi0+Y29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJaWMtPnJkc19pYmRldiA9IHJkc19pYmRldjsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnModm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJbGlzdF9zcGxpY2UoJmliX25vZGV2X2Nvbm5zLCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpYl9ub2Rldl9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGliX25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3ZvaWQgcmRzX2liX3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsICpfaWM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X3NwbGljZSgmcmRzX2liZGV2LT5jb25uX2xpc3QsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYmRldi0+Y29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaWJfbm9kZSkgeworCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOworCX0KK30KKworc3RydWN0IHJkc19pYl9tcl9wb29sICpyZHNfaWJfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2w7CisKKwlwb29sID0ga3phbGxvYyhzaXplb2YoKnBvb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2wpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmZyZWVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmRyb3BfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmNsZWFuX2xpc3QpOworCW11dGV4X2luaXQoJnBvb2wtPmZsdXNoX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwb29sLT5saXN0X2xvY2spOworCUlOSVRfV09SSygmcG9vbC0+Zmx1c2hfd29ya2VyLCByZHNfaWJfbXJfcG9vbF9mbHVzaF93b3JrZXIpOworCisJcG9vbC0+Zm1yX2F0dHIubWF4X3BhZ2VzID0gZm1yX21lc3NhZ2Vfc2l6ZTsKKwlwb29sLT5mbXJfYXR0ci5tYXhfbWFwcyA9IHJkc19pYmRldi0+Zm1yX21heF9yZW1hcHM7CisJcG9vbC0+Zm1yX2F0dHIucGFnZV9zaGlmdCA9IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJcG9vbC0+bWF4X2ZyZWVfcGlubmVkID0gcmRzX2liZGV2LT5tYXhfZm1ycyAqIGZtcl9tZXNzYWdlX3NpemUgLyA0OworCisJLyogV2UgbmV2ZXIgYWxsb3cgbW9yZSB0aGFuIG1heF9pdGVtcyBNUnMgdG8gYmUgYWxsb2NhdGVkLgorCSAqIFdoZW4gd2UgZXhjZWVkIG1vcmUgdGhhbiBtYXhfaXRlbXNfc29mdCwgd2Ugc3RhcnQgZnJlZWluZworCSAqIGl0ZW1zIG1vcmUgYWdncmVzc2l2ZWx5LgorCSAqIE1ha2Ugc3VyZSB0aGF0IG1heF9pdGVtcyA+IG1heF9pdGVtc19zb2Z0ID4gbWF4X2l0ZW1zIC8gMgorCSAqLworCXBvb2wtPm1heF9pdGVtc19zb2Z0ID0gcmRzX2liZGV2LT5tYXhfZm1ycyAqIDMgLyA0OworCXBvb2wtPm1heF9pdGVtcyA9IHJkc19pYmRldi0+bWF4X2ZtcnM7CisKKwlyZXR1cm4gcG9vbDsKK30KKwordm9pZCByZHNfaWJfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCisJaWluZm8tPnJkbWFfbXJfbWF4ID0gcG9vbC0+bWF4X2l0ZW1zOworCWlpbmZvLT5yZG1hX21yX3NpemUgPSBwb29sLT5mbXJfYXR0ci5tYXhfcGFnZXM7Cit9CisKK3ZvaWQgcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wpCit7CisJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CisJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5pdGVtX2NvdW50KSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkpOworCWtmcmVlKHBvb2wpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZHNfaWJfbXIgKnJkc19pYl9yZXVzZV9mbXIoc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwb29sLT5jbGVhbl9saXN0KSkgeworCQlpYm1yID0gbGlzdF9lbnRyeShwb29sLT5jbGVhbl9saXN0Lm5leHQsIHN0cnVjdCByZHNfaWJfbXIsIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZpYm1yLT5saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaWJtcjsKK30KKworc3RhdGljIHN0cnVjdCByZHNfaWJfbXIgKnJkc19pYl9hbGxvY19mbXIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IE5VTEw7CisJaW50IGVyciA9IDAsIGl0ZXIgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaWJtciA9IHJkc19pYl9yZXVzZV9mbXIocG9vbCk7CisJCWlmIChpYm1yKQorCQkJcmV0dXJuIGlibXI7CisKKwkJLyogTm8gY2xlYW4gTVJzIC0gbm93IHdlIGhhdmUgdGhlIGNob2ljZSBvZiBlaXRoZXIKKwkJICogYWxsb2NhdGluZyBhIGZyZXNoIE1SIHVwIHRvIHRoZSBsaW1pdCBpbXBvc2VkIGJ5IHRoZQorCQkgKiBkcml2ZXIsIG9yIGZsdXNoIGFueSBkaXJ0eSB1bnVzZWQgTVJzLgorCQkgKiBXZSB0cnkgdG8gYXZvaWQgc3RhbGxpbmcgaW4gdGhlIHNlbmQgcGF0aCBpZiBwb3NzaWJsZSwKKwkJICogc28gd2UgYWxsb2NhdGUgYXMgbG9uZyBhcyB3ZSdyZSBhbGxvd2VkIHRvLgorCQkgKgorCQkgKiBXZSdyZSBmdXNzeSB3aXRoIGVuZm9yY2luZyB0aGUgRk1SIGxpbWl0LCB0aG91Z2guIElmIHRoZSBkcml2ZXIKKwkJICogdGVsbHMgdXMgd2UgY2FuJ3QgdXNlIG1vcmUgdGhhbiBOIGZtcnMsIHdlIHNob3VsZG4ndCBzdGFydAorCQkgKiBhcmd1aW5nIHdpdGggaXQgKi8KKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwb29sLT5pdGVtX2NvdW50KSA8PSBwb29sLT5tYXhfaXRlbXMpCisJCQlicmVhazsKKworCQlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKworCQlpZiAoKytpdGVyID4gMikgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfcG9vbF9kZXBsZXRlZCk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwkJfQorCisJCS8qIFdlIGRvIGhhdmUgc29tZSBlbXB0eSBNUnMuIEZsdXNoIHRoZW0gb3V0LiAqLworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9wb29sX3dhaXQpOworCQlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9CisKKwlpYm1yID0ga3phbGxvYyhzaXplb2YoKmlibXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlibXIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fY2lnYXI7CisJfQorCisJaWJtci0+Zm1yID0gaWJfYWxsb2NfZm1yKHJkc19pYmRldi0+cGQsCisJCQkoSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKKwkJCSBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpLAorCQkJJnBvb2wtPmZtcl9hdHRyKTsKKwlpZiAoSVNfRVJSKGlibXItPmZtcikpIHsKKwkJZXJyID0gUFRSX0VSUihpYm1yLT5mbXIpOworCQlpYm1yLT5mbXIgPSBOVUxMOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX2FsbG9jX2ZtciBmYWlsZWQgKGVycj0lZClcbiIsIGVycik7CisJCWdvdG8gb3V0X25vX2NpZ2FyOworCX0KKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX2FsbG9jKTsKKwlyZXR1cm4gaWJtcjsKKworb3V0X25vX2NpZ2FyOgorCWlmIChpYm1yKSB7CisJCWlmIChpYm1yLT5mbXIpCisJCQlpYl9kZWFsbG9jX2ZtcihpYm1yLT5mbXIpOworCQlrZnJlZShpYm1yKTsKKwl9CisJYXRvbWljX2RlYygmcG9vbC0+aXRlbV9jb3VudCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCByZHNfaWJfbWFwX2ZtcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2liX21yICppYm1yLAorCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMpCit7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gcmRzX2liZGV2LT5kZXY7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0ID0gc2c7CisJdTY0IGlvX2FkZHIgPSAwOworCXU2NCAqZG1hX3BhZ2VzOworCXUzMiBsZW47CisJaW50IHBhZ2VfY250LCBzZ19kbWFfbGVuOworCWludCBpLCBqOworCWludCByZXQ7CisKKwlzZ19kbWFfbGVuID0gaWJfZG1hX21hcF9zZyhkZXYsIHNnLCBuZW50cywKKwkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmICh1bmxpa2VseSghc2dfZG1hX2xlbikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBkbWFfbWFwX3NnIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWxlbiA9IDA7CisJcGFnZV9jbnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2NhdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNjYXRbaV0pOworCisJCWlmIChkbWFfYWRkciAmIH5yZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spIHsKKwkJCWlmIChpID4gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCQkrK3BhZ2VfY250OworCQl9CisJCWlmICgoZG1hX2FkZHIgKyBkbWFfbGVuKSAmIH5yZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spIHsKKwkJCWlmIChpIDwgc2dfZG1hX2xlbiAtIDEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJKytwYWdlX2NudDsKKwkJfQorCisJCWxlbiArPSBkbWFfbGVuOworCX0KKworCXBhZ2VfY250ICs9IGxlbiA+PiByZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0OworCWlmIChwYWdlX2NudCA+IGZtcl9tZXNzYWdlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJZG1hX3BhZ2VzID0ga21hbGxvYyhzaXplb2YodTY0KSAqIHBhZ2VfY250LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRtYV9wYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYWdlX2NudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2NhdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNjYXRbaV0pOworCisJCWZvciAoaiA9IDA7IGogPCBkbWFfbGVuOyBqICs9IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2l6ZSkKKwkJCWRtYV9wYWdlc1twYWdlX2NudCsrXSA9CisJCQkJKGRtYV9hZGRyICYgcmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSArIGo7CisJfQorCisJcmV0ID0gaWJfbWFwX3BoeXNfZm1yKGlibXItPmZtciwKKwkJCQkgICBkbWFfcGFnZXMsIHBhZ2VfY250LCBpb19hZGRyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIFN1Y2Nlc3MgLSB3ZSBzdWNjZXNzZnVsbHkgcmVtYXBwZWQgdGhlIE1SLCBzbyB3ZSBjYW4KKwkgKiBzYWZlbHkgdGVhciBkb3duIHRoZSBvbGQgbWFwcGluZy4gKi8KKwlyZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7CisKKwlpYm1yLT5zZyA9IHNjYXQ7CisJaWJtci0+c2dfbGVuID0gbmVudHM7CisJaWJtci0+c2dfZG1hX2xlbiA9IHNnX2RtYV9sZW47CisJaWJtci0+cmVtYXBfY291bnQrKzsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3VzZWQpOworCXJldCA9IDA7CisKK291dDoKKwlrZnJlZShkbWFfcGFnZXMpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSB0cmFuc19wcml2YXRlOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisKKwlzd2l0Y2ggKGRpcmVjdGlvbikgeworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlpYl9kbWFfc3luY19zZ19mb3JfY3B1KHJkc19pYmRldi0+ZGV2LCBpYm1yLT5zZywKKwkJCWlibXItPnNnX2RtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlpYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHJkc19pYmRldi0+ZGV2LCBpYm1yLT5zZywKKwkJCWlibXItPnNnX2RtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisKKwlpZiAoaWJtci0+c2dfZG1hX2xlbikgeworCQlpYl9kbWFfdW5tYXBfc2cocmRzX2liZGV2LT5kZXYsCisJCQkJaWJtci0+c2csIGlibXItPnNnX2xlbiwKKwkJCQlETUFfQklESVJFQ1RJT05BTCk7CisJCWlibXItPnNnX2RtYV9sZW4gPSAwOworCX0KKworCS8qIFJlbGVhc2UgdGhlIHMvZyBsaXN0ICovCisJaWYgKGlibXItPnNnX2xlbikgeworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaWJtci0+c2dfbGVuOyArK2kpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZSgmaWJtci0+c2dbaV0pOworCisJCQkvKiBGSVhNRSB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgYSByL3cgTVIKKwkJCSAqIGZyb20gYSByL28gTVIgKi8KKwkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQkJcHV0X3BhZ2UocGFnZSk7CisJCX0KKwkJa2ZyZWUoaWJtci0+c2cpOworCisJCWlibXItPnNnID0gTlVMTDsKKwkJaWJtci0+c2dfbGVuID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKQoreworCXVuc2lnbmVkIGludCBwaW5uZWQgPSBpYm1yLT5zZ19sZW47CisKKwlfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTsKKwlpZiAocGlubmVkKSB7CisJCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisJCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKworCQlhdG9taWNfc3ViKHBpbm5lZCwgJnBvb2wtPmZyZWVfcGlubmVkKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJkc19pYl9mbHVzaF9nb2FsKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKQoreworCXVuc2lnbmVkIGludCBpdGVtX2NvdW50OworCisJaXRlbV9jb3VudCA9IGF0b21pY19yZWFkKCZwb29sLT5pdGVtX2NvdW50KTsKKwlpZiAoZnJlZV9hbGwpCisJCXJldHVybiBpdGVtX2NvdW50OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGbHVzaCBvdXIgcG9vbCBvZiBNUnMuCisgKiBBdCBhIG1pbmltdW0sIGFsbCBjdXJyZW50bHkgdW51c2VkIE1ScyBhcmUgdW5tYXBwZWQuCisgKiBJZiB0aGUgbnVtYmVyIG9mIE1ScyBhbGxvY2F0ZWQgZXhjZWVkcyB0aGUgbGltaXQsIHdlIGFsc28gdHJ5CisgKiB0byBmcmVlIGFzIG1hbnkgTVJzIGFzIG5lZWRlZCB0byBnZXQgYmFjayB0byB0aGlzIGxpbWl0LgorICovCitzdGF0aWMgaW50IHJkc19pYl9mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIsICpuZXh0OworCUxJU1RfSEVBRCh1bm1hcF9saXN0KTsKKwlMSVNUX0hFQUQoZm1yX2xpc3QpOworCXVuc2lnbmVkIGxvbmcgdW5waW5uZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5mcmVlZCA9IDAsIG5jbGVhbmVkID0gMCwgZnJlZV9nb2FsOworCWludCByZXQgPSAwOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfcG9vbF9mbHVzaCk7CisKKwltdXRleF9sb2NrKCZwb29sLT5mbHVzaF9sb2NrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgYWxsIE1ScyB0byBiZSBkcm9wcGVkLiBPcmRlcmluZyBtYXR0ZXJzIC0KKwkgKiB3ZSB3YW50IHRvIHB1dCBkcm9wX2xpc3QgYWhlYWQgb2YgZnJlZV9saXN0LiAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmZyZWVfbGlzdCwgJnVubWFwX2xpc3QpOworCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmRyb3BfbGlzdCwgJnVubWFwX2xpc3QpOworCWlmIChmcmVlX2FsbCkKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+Y2xlYW5fbGlzdCwgJnVubWFwX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJZnJlZV9nb2FsID0gcmRzX2liX2ZsdXNoX2dvYWwocG9vbCwgZnJlZV9hbGwpOworCisJaWYgKGxpc3RfZW1wdHkoJnVubWFwX2xpc3QpKQorCQlnb3RvIG91dDsKKworCS8qIFN0cmluZyBhbGwgaWJfbXIncyBvbnRvIG9uZSBsaXN0IGFuZCBoYW5kIHRoZW0gdG8gaWJfdW5tYXBfZm1yICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpYm1yLCAmdW5tYXBfbGlzdCwgbGlzdCkKKwkJbGlzdF9hZGQoJmlibXItPmZtci0+bGlzdCwgJmZtcl9saXN0KTsKKwlyZXQgPSBpYl91bm1hcF9mbXIoJmZtcl9saXN0KTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX3VubWFwX2ZtciBmYWlsZWQgKGVycj0lZClcbiIsIHJldCk7CisKKwkvKiBOb3cgd2UgY2FuIGRlc3Ryb3kgdGhlIERNQSBtYXBwaW5nIGFuZCB1bnBpbiBhbnkgcGFnZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWJtciwgbmV4dCwgJnVubWFwX2xpc3QsIGxpc3QpIHsKKwkJdW5waW5uZWQgKz0gaWJtci0+c2dfbGVuOworCQlfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTsKKwkJaWYgKG5mcmVlZCA8IGZyZWVfZ29hbCB8fCBpYm1yLT5yZW1hcF9jb3VudCA+PSBwb29sLT5mbXJfYXR0ci5tYXhfbWFwcykgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfZnJlZSk7CisJCQlsaXN0X2RlbCgmaWJtci0+bGlzdCk7CisJCQlpYl9kZWFsbG9jX2ZtcihpYm1yLT5mbXIpOworCQkJa2ZyZWUoaWJtcik7CisJCQluZnJlZWQrKzsKKwkJfQorCQluY2xlYW5lZCsrOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZSgmdW5tYXBfbGlzdCwgJnBvb2wtPmNsZWFuX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJYXRvbWljX3N1Yih1bnBpbm5lZCwgJnBvb2wtPmZyZWVfcGlubmVkKTsKKwlhdG9taWNfc3ViKG5jbGVhbmVkLCAmcG9vbC0+ZGlydHlfY291bnQpOworCWF0b21pY19zdWIobmZyZWVkLCAmcG9vbC0+aXRlbV9jb3VudCk7CisKK291dDoKKwltdXRleF91bmxvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfaWJfbXJfcG9vbCwgZmx1c2hfd29ya2VyKTsKKworCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworfQorCit2b2lkIHJkc19pYl9mcmVlX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSB0cmFuc19wcml2YXRlOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygiUkRTL0lCOiBmcmVlX21yIG5lbnRzICV1XG4iLCBpYm1yLT5zZ19sZW4pOworCisJLyogUmV0dXJuIGl0IHRvIHRoZSBwb29sJ3MgZnJlZSBsaXN0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCWlmIChpYm1yLT5yZW1hcF9jb3VudCA+PSBwb29sLT5mbXJfYXR0ci5tYXhfbWFwcykKKwkJbGlzdF9hZGQoJmlibXItPmxpc3QsICZwb29sLT5kcm9wX2xpc3QpOworCWVsc2UKKwkJbGlzdF9hZGQoJmlibXItPmxpc3QsICZwb29sLT5mcmVlX2xpc3QpOworCisJYXRvbWljX2FkZChpYm1yLT5zZ19sZW4sICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJYXRvbWljX2luYygmcG9vbC0+ZGlydHlfY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJLyogSWYgd2UndmUgcGlubmVkIHRvbyBtYW55IHBhZ2VzLCByZXF1ZXN0IGEgZmx1c2ggKi8KKwlpZiAoYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSA+PSBwb29sLT5tYXhfZnJlZV9waW5uZWQKKwkgfHwgYXRvbWljX3JlYWQoJnBvb2wtPmRpcnR5X2NvdW50KSA+PSBwb29sLT5tYXhfaXRlbXMgLyAxMCkKKwkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCisJaWYgKGludmFsaWRhdGUpIHsKKwkJaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkpKSB7CisJCQlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSB1c2VyIGNyZWF0ZWQgYSBNUiBtYXJrZWQKKwkJCSAqIGFzIHVzZV9vbmNlIGFuZCBpbnZhbGlkYXRlIGF0IHRoZSBzYW1lIHRpbWUuICovCisJCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX2liX2ZsdXNoX21ycyh2b2lkKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkc19pYmRldiwgJnJkc19pYl9kZXZpY2VzLCBsaXN0KSB7CisJCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKworCQlpZiAocG9vbCkKKwkJCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KK30KKwordm9pZCAqcmRzX2liX2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IE5VTEw7CisJaW50IHJldDsKKworCXJkc19pYmRldiA9IHJkc19pYl9nZXRfZGV2aWNlKHJzLT5yc19ib3VuZF9hZGRyKTsKKwlpZiAoIXJkc19pYmRldikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJkc19pYmRldi0+bXJfcG9vbCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpYm1yID0gcmRzX2liX2FsbG9jX2ZtcihyZHNfaWJkZXYpOworCWlmIChJU19FUlIoaWJtcikpCisJCXJldHVybiBpYm1yOworCisJcmV0ID0gcmRzX2liX21hcF9mbXIocmRzX2liZGV2LCBpYm1yLCBzZywgbmVudHMpOworCWlmIChyZXQgPT0gMCkKKwkJKmtleV9yZXQgPSBpYm1yLT5mbXItPnJrZXk7CisJZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IG1hcF9mbXIgZmFpbGVkIChlcnJubz0lZClcbiIsIHJldCk7CisKKwlpYm1yLT5kZXZpY2UgPSByZHNfaWJkZXY7CisKKyBvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoaWJtcikKKwkJCXJkc19pYl9mcmVlX21yKGlibXIsIDApOworCQlpYm1yID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gaWJtcjsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmVjdi5jIGIvbmV0L3Jkcy9pYl9yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2MWI1NQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfcmVjdi5jCkBAIC0wLDAgKzEsODY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfaWJfaW5jb21pbmdfc2xhYjsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2liX2ZyYWdfc2xhYjsKK3N0YXRpYyBhdG9taWNfdAlyZHNfaWJfYWxsb2NhdGlvbiA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgdm9pZCByZHNfaWJfZnJhZ19kcm9wX3BhZ2Uoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlfX2ZyZWVfcGFnZShmcmFnLT5mX3BhZ2UpOworCWZyYWctPmZfcGFnZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9mcmFnX2ZyZWUoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlCVUdfT04oZnJhZy0+Zl9wYWdlICE9IE5VTEwpOworCWttZW1fY2FjaGVfZnJlZShyZHNfaWJfZnJhZ19zbGFiLCBmcmFnKTsKK30KKworLyoKKyAqIFdlIG1hcCBhIHBhZ2UgYXQgYSB0aW1lLiAgSXRzIGZyYWdtZW50cyBhcmUgcG9zdGVkIGluIG9yZGVyLiAgVGhpcworICogaXMgY2FsbGVkIGluIGZyYWdtZW50IG9yZGVyIGFzIHRoZSBmcmFnbWVudHMgZ2V0IHNlbmQgY29tcGxldGlvbiBldmVudHMuCisgKiBPbmx5IHRoZSBsYXN0IGZyYWcgaW4gdGhlIHBhZ2UgcGVyZm9ybXMgdGhlIHVubWFwcGluZy4KKyAqCisgKiBJdCdzIE9LIGZvciByaW5nIGNsZWFudXAgdG8gY2FsbCB0aGlzIGluIHdoYXRldmVyIG9yZGVyIGl0IGxpa2VzIGJlY2F1c2UKKyAqIERNQSBpcyBub3QgaW4gZmxpZ2h0IGFuZCBzbyB3ZSBjYW4gdW5tYXAgd2hpbGUgb3RoZXIgcmluZyBlbnRyaWVzIHN0aWxsCisgKiBob2xkIHBhZ2UgcmVmZXJlbmNlcyBpbiB0aGVpciBmcmFncy4KKyAqLworc3RhdGljIHZvaWQgcmRzX2liX3JlY3ZfdW5tYXBfcGFnZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2KQoreworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnID0gcmVjdi0+cl9mcmFnOworCisJcmRzZGVidWcoInJlY3YgJXAgZnJhZyAlcCBwYWdlICVwXG4iLCByZWN2LCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCWlmIChmcmFnLT5mX21hcHBlZCkKKwkJaWJfZG1hX3VubWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCSAgICAgICBmcmFnLT5mX21hcHBlZCwKKwkJCSAgICAgICBSRFNfRlJBR19TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCWZyYWctPmZfbWFwcGVkID0gMDsKK30KKwordm9pZCByZHNfaWJfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdjsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHJlY3YgPSBpYy0+aV9yZWN2czsgaSA8IGljLT5pX3JlY3ZfcmluZy53X25yOyBpKyssIHJlY3YrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJcmVjdi0+cl9pYmluYyA9IE5VTEw7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisKKwkJcmVjdi0+cl93ci5uZXh0ID0gTlVMTDsKKwkJcmVjdi0+cl93ci53cl9pZCA9IGk7CisJCXJlY3YtPnJfd3Iuc2dfbGlzdCA9IHJlY3YtPnJfc2dlOworCQlyZWN2LT5yX3dyLm51bV9zZ2UgPSBSRFNfSUJfUkVDVl9TR0U7CisKKwkJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IDA7CisJCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfcmVjdl9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaWJfcmVjdl9jbGVhcl9vbmUoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCQkgIHN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2KQoreworCWlmIChyZWN2LT5yX2liaW5jKSB7CisJCXJkc19pbmNfcHV0KCZyZWN2LT5yX2liaW5jLT5paV9pbmMpOworCQlyZWN2LT5yX2liaW5jID0gTlVMTDsKKwl9CisJaWYgKHJlY3YtPnJfZnJhZykgeworCQlyZHNfaWJfcmVjdl91bm1hcF9wYWdlKGljLCByZWN2KTsKKwkJaWYgKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKQorCQkJcmRzX2liX2ZyYWdfZHJvcF9wYWdlKHJlY3YtPnJfZnJhZyk7CisJCXJkc19pYl9mcmFnX2ZyZWUocmVjdi0+cl9mcmFnKTsKKwkJcmVjdi0+cl9mcmFnID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgcmRzX2liX3JlY3ZfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8IGljLT5pX3JlY3ZfcmluZy53X25yOyBpKyspCisJCXJkc19pYl9yZWN2X2NsZWFyX29uZShpYywgJmljLT5pX3JlY3ZzW2ldKTsKKworCWlmIChpYy0+aV9mcmFnLmZfcGFnZSkKKwkJcmRzX2liX2ZyYWdfZHJvcF9wYWdlKCZpYy0+aV9mcmFnKTsKK30KKworc3RhdGljIGludCByZHNfaWJfcmVjdl9yZWZpbGxfb25lKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgIHN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2LAorCQkJCSAgZ2ZwX3Qga3B0cl9nZnAsIGdmcF90IHBhZ2VfZ2ZwKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJc3RydWN0IGliX3NnZSAqc2dlOworCWludCByZXQgPSAtRU5PTUVNOworCisJaWYgKHJlY3YtPnJfaWJpbmMgPT0gTlVMTCkgeworCQlpZiAoYXRvbWljX3JlYWQoJnJkc19pYl9hbGxvY2F0aW9uKSA+PSByZHNfaWJfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24pIHsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9hbGxvY19saW1pdCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZWN2LT5yX2liaW5jID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfaWJfaW5jb21pbmdfc2xhYiwKKwkJCQkJCSBrcHRyX2dmcCk7CisJCWlmIChyZWN2LT5yX2liaW5jID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJYXRvbWljX2luYygmcmRzX2liX2FsbG9jYXRpb24pOworCQlJTklUX0xJU1RfSEVBRCgmcmVjdi0+cl9pYmluYy0+aWlfZnJhZ3MpOworCQlyZHNfaW5jX2luaXQoJnJlY3YtPnJfaWJpbmMtPmlpX2luYywgY29ubiwgY29ubi0+Y19mYWRkcik7CisJfQorCisJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKSB7CisJCXJlY3YtPnJfZnJhZyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2liX2ZyYWdfc2xhYiwga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9mcmFnID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfZnJhZy0+Zl9pdGVtKTsKKwkJcmVjdi0+cl9mcmFnLT5mX3BhZ2UgPSBOVUxMOworCX0KKworCWlmIChpYy0+aV9mcmFnLmZfcGFnZSA9PSBOVUxMKSB7CisJCWljLT5pX2ZyYWcuZl9wYWdlID0gYWxsb2NfcGFnZShwYWdlX2dmcCk7CisJCWlmIChpYy0+aV9mcmFnLmZfcGFnZSA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgPSAwOworCX0KKworCWRtYV9hZGRyID0gaWJfZG1hX21hcF9wYWdlKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkJICBpYy0+aV9mcmFnLmZfcGFnZSwKKwkJCQkgIGljLT5pX2ZyYWcuZl9vZmZzZXQsCisJCQkJICBSRFNfRlJBR19TSVpFLAorCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoaWMtPmlfY21faWQtPmRldmljZSwgZG1hX2FkZHIpKQorCQlnb3RvIG91dDsKKworCS8qCisJICogT25jZSB3ZSBnZXQgdGhlIFJEU19QQUdFX0xBU1RfT0ZGIGZyYWcgdGhlbiByZHNfaWJfZnJhZ191bm1hcCgpCisJICogbXVzdCBiZSBjYWxsZWQgb24gdGhpcyByZWN2LiAgVGhpcyBoYXBwZW5zIGFzIGNvbXBsZXRpb25zIGhpdAorCSAqIGluIG9yZGVyIG9yIG9uIGNvbm5lY3Rpb24gc2h1dGRvd24uCisJICovCisJcmVjdi0+cl9mcmFnLT5mX3BhZ2UgPSBpYy0+aV9mcmFnLmZfcGFnZTsKKwlyZWN2LT5yX2ZyYWctPmZfb2Zmc2V0ID0gaWMtPmlfZnJhZy5mX29mZnNldDsKKwlyZWN2LT5yX2ZyYWctPmZfbWFwcGVkID0gZG1hX2FkZHI7CisKKwlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBkbWFfYWRkcjsKKwlzZ2UtPmxlbmd0aCA9IFJEU19GUkFHX1NJWkU7CisKKwlzZ2UgPSByZHNfaWJfaGVhZGVyX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCXNnZS0+YWRkciA9IGljLT5pX3JlY3ZfaGRyc19kbWEgKyAocmVjdiAtIGljLT5pX3JlY3ZzKSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJZ2V0X3BhZ2UocmVjdi0+cl9mcmFnLT5mX3BhZ2UpOworCisJaWYgKGljLT5pX2ZyYWcuZl9vZmZzZXQgPCBSRFNfUEFHRV9MQVNUX09GRikgeworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ICs9IFJEU19GUkFHX1NJWkU7CisJfSBlbHNlIHsKKwkJcHV0X3BhZ2UoaWMtPmlfZnJhZy5mX3BhZ2UpOworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IE5VTEw7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgPSAwOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgdHJpZXMgdG8gYWxsb2NhdGUgYW5kIHBvc3QgdW51c2VkIHdvcmsgcmVxdWVzdHMgYWZ0ZXIgbWFraW5nIHN1cmUgdGhhdAorICogdGhleSBoYXZlIGFsbCB0aGUgYWxsb2NhdGlvbnMgdGhleSBuZWVkIHRvIHF1ZXVlIHJlY2VpdmVkIGZyYWdtZW50cyBpbnRvCisgKiBzb2NrZXRzLiAgVGhlIGlfcmVjdl9tdXRleCBpcyBoZWxkIGhlcmUgc28gdGhhdCByaW5nX2FsbG9jIGFuZCBfdW5hbGxvYworICogcGFpcnMgZG9uJ3QgZ28gdW5tYXRjaGVkLgorICoKKyAqIC0xIGlzIHJldHVybmVkIGlmIHBvc3RpbmcgZmFpbHMgZHVlIHRvIHRlbXBvcmFyeSByZXNvdXJjZSBleGhhdXN0aW9uLgorICovCitpbnQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3Qga3B0cl9nZnAsCisJCSAgICAgICBnZnBfdCBwYWdlX2dmcCwgaW50IHByZWZpbGwpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3Y7CisJc3RydWN0IGliX3JlY3Zfd3IgKmZhaWxlZF93cjsKKwl1bnNpZ25lZCBpbnQgcG9zdGVkID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgcG9zOworCisJd2hpbGUgKChwcmVmaWxsIHx8IHJkc19jb25uX3VwKGNvbm4pKQorCQkJJiYgcmRzX2liX3JpbmdfYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSwgJnBvcykpIHsKKwkJaWYgKHBvcyA+PSBpYy0+aV9yZWN2X3Jpbmcud19ucikgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBcmdoIC0gcmluZyBhbGxvYyByZXR1cm5lZCBwb3M9JXVcbiIsCisJCQkJCXBvcyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlyZWN2ID0gJmljLT5pX3JlY3ZzW3Bvc107CisJCXJldCA9IHJkc19pYl9yZWN2X3JlZmlsbF9vbmUoY29ubiwgcmVjdiwga3B0cl9nZnAsIHBhZ2VfZ2ZwKTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFhYWCB3aGVuIGNhbiB0aGlzIGZhaWw/ICovCisJCXJldCA9IGliX3Bvc3RfcmVjdihpYy0+aV9jbV9pZC0+cXAsICZyZWN2LT5yX3dyLCAmZmFpbGVkX3dyKTsKKwkJcmRzZGVidWcoInJlY3YgJXAgaWJpbmMgJXAgcGFnZSAlcCBhZGRyICVsdSByZXQgJWRcbiIsIHJlY3YsCisJCQkgcmVjdi0+cl9pYmluYywgcmVjdi0+cl9mcmFnLT5mX3BhZ2UsCisJCQkgKGxvbmcpIHJlY3YtPnJfZnJhZy0+Zl9tYXBwZWQsIHJldCk7CisJCWlmIChyZXQpIHsKKwkJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZWN2IHBvc3Qgb24gIgorCQkJICAgICAgICIlcEk0IHJldHVybmVkICVkLCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwgJmNvbm4tPmNfZmFkZHIsCisJCQkgICAgICAgcmV0KTsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQlwb3N0ZWQrKzsKKwl9CisKKwkvKiBXZSdyZSBkb2luZyBmbG93IGNvbnRyb2wgLSB1cGRhdGUgdGhlIHdpbmRvdy4gKi8KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBwb3N0ZWQpCisJCXJkc19pYl9hZHZlcnRpc2VfY3JlZGl0cyhjb25uLCBwb3N0ZWQpOworCisJaWYgKHJldCkKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfcmVjdl9yaW5nLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpwb3M7CisKKwlpYmluYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfaWJfaW5jb21pbmcsIGlpX2luYyk7CisJcmRzZGVidWcoInB1cmdpbmcgaWJpbmMgJXAgaW5jICVwXG4iLCBpYmluYywgaW5jKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmcmFnLCBwb3MsICZpYmluYy0+aWlfZnJhZ3MsIGZfaXRlbSkgeworCQlsaXN0X2RlbF9pbml0KCZmcmFnLT5mX2l0ZW0pOworCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UoZnJhZyk7CisJCXJkc19pYl9mcmFnX2ZyZWUoZnJhZyk7CisJfQorfQorCit2b2lkIHJkc19pYl9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmM7CisKKwlpYmluYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfaWJfaW5jb21pbmcsIGlpX2luYyk7CisKKwlyZHNfaWJfaW5jX3B1cmdlKGluYyk7CisJcmRzZGVidWcoImZyZWVpbmcgaWJpbmMgJXAgaW5jICVwXG4iLCBpYmluYywgaW5jKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmliaW5jLT5paV9mcmFncykpOworCWttZW1fY2FjaGVfZnJlZShyZHNfaWJfaW5jb21pbmdfc2xhYiwgaWJpbmMpOworCWF0b21pY19kZWMoJnJkc19pYl9hbGxvY2F0aW9uKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnJkc19pYl9hbGxvY2F0aW9uKSA8IDApOworfQorCitpbnQgcmRzX2liX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwKKwkJCSAgICBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgaW92ZWMgKmlvdiA9IGZpcnN0X2lvdjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBmcmFnX29mZiA9IDA7CisJdW5zaWduZWQgbG9uZyBpb3Zfb2ZmID0gMDsKKwlpbnQgY29waWVkID0gMDsKKwlpbnQgcmV0OworCXUzMiBsZW47CisKKwlpYmluYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfaWJfaW5jb21pbmcsIGlpX2luYyk7CisJZnJhZyA9IGxpc3RfZW50cnkoaWJpbmMtPmlpX2ZyYWdzLm5leHQsIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCWxlbiA9IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pOworCisJd2hpbGUgKGNvcGllZCA8IHNpemUgJiYgY29waWVkIDwgbGVuKSB7CisJCWlmIChmcmFnX29mZiA9PSBSRFNfRlJBR19TSVpFKSB7CisJCQlmcmFnID0gbGlzdF9lbnRyeShmcmFnLT5mX2l0ZW0ubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwkJCWZyYWdfb2ZmID0gMDsKKwkJfQorCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIFJEU19GUkFHX1NJWkUgLSBmcmFnX29mZik7CisJCXRvX2NvcHkgPSBtaW5fdChzaXplX3QsIHRvX2NvcHksIHNpemUgLSBjb3BpZWQpOworCQl0b19jb3B5ID0gbWluX3QodW5zaWduZWQgbG9uZywgdG9fY29weSwgbGVuIC0gY29waWVkKTsKKworCQlyZHNkZWJ1ZygiJWx1IGJ5dGVzIHRvIHVzZXIgWyVwLCAlenVdICsgJWx1IGZyb20gZnJhZyAiCisJCQkgIlslcCwgJWx1XSArICVsdVxuIiwKKwkJCSB0b19jb3B5LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4sIGlvdl9vZmYsCisJCQkgZnJhZy0+Zl9wYWdlLCBmcmFnLT5mX29mZnNldCwgZnJhZ19vZmYpOworCisJCS8qIFhYWCBuZWVkcyArIG9mZnNldCBmb3IgbXVsdGlwbGUgcmVjdnMgcGVyIHBhZ2UgKi8KKwkJcmV0ID0gcmRzX3BhZ2VfY29weV90b191c2VyKGZyYWctPmZfcGFnZSwKKwkJCQkJICAgIGZyYWctPmZfb2Zmc2V0ICsgZnJhZ19vZmYsCisJCQkJCSAgICBpb3YtPmlvdl9iYXNlICsgaW92X29mZiwKKwkJCQkJICAgIHRvX2NvcHkpOworCQlpZiAocmV0KSB7CisJCQljb3BpZWQgPSByZXQ7CisJCQlicmVhazsKKwkJfQorCisJCWlvdl9vZmYgKz0gdG9fY29weTsKKwkJZnJhZ19vZmYgKz0gdG9fY29weTsKKwkJY29waWVkICs9IHRvX2NvcHk7CisJfQorCisJcmV0dXJuIGNvcGllZDsKK30KKworLyogaWMgc3RhcnRzIG91dCBremFsbG9jKCllZCAqLwordm9pZCByZHNfaWJfcmVjdl9pbml0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCBpYl9zZW5kX3dyICp3ciA9ICZpYy0+aV9hY2tfd3I7CisJc3RydWN0IGliX3NnZSAqc2dlID0gJmljLT5pX2Fja19zZ2U7CisKKwlzZ2UtPmFkZHIgPSBpYy0+aV9hY2tfZG1hOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCXdyLT5zZ19saXN0ID0gc2dlOworCXdyLT5udW1fc2dlID0gMTsKKwl3ci0+b3Bjb2RlID0gSUJfV1JfU0VORDsKKwl3ci0+d3JfaWQgPSBSRFNfSUJfQUNLX1dSX0lEOworCXdyLT5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworfQorCisvKgorICogWW91J2QgdGhpbmsgdGhhdCB3aXRoIHJlbGlhYmxlIElCIGNvbm5lY3Rpb25zIHlvdSB3b3VsZG4ndCBuZWVkIHRvIGFjaworICogbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IElCIGhhcmR3YXJlIGdlbmVyYXRlcworICogYW4gYWNrIG1lc3NhZ2UgYmVmb3JlIGl0IGhhcyBETUFlZCB0aGUgbWVzc2FnZSBpbnRvIG1lbW9yeS4gIFRoaXMgY3JlYXRlcyBhCisgKiBwb3RlbnRpYWwgbWVzc2FnZSBsb3NzIGlmIHRoZSBIQ0EgaXMgZGlzYWJsZWQgZm9yIGFueSByZWFzb24gYmV0d2VlbiB3aGVuIGl0CisgKiBzZW5kcyB0aGUgYWNrIGFuZCBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgRE1BZWQgYW5kIHByb2Nlc3NlZC4gIFRoaXMgaXMgb25seSBhCisgKiBwb3RlbnRpYWwgaXNzdWUgaWYgYW5vdGhlciBIQ0EgaXMgYXZhaWxhYmxlIGZvciBmYWlsLW92ZXIuCisgKgorICogV2hlbiB0aGUgcmVtb3RlIGhvc3QgcmVjZWl2ZXMgb3VyIGFjayB0aGV5J2xsIGZyZWUgdGhlIHNlbnQgbWVzc2FnZSBmcm9tCisgKiB0aGVpciBzZW5kIHF1ZXVlLiAgVG8gZGVjcmVhc2UgdGhlIGxhdGVuY3kgb2YgdGhpcyB3ZSBhbHdheXMgc2VuZCBhbiBhY2sKKyAqIGltbWVkaWF0ZWx5IGFmdGVyIHdlJ3ZlIHJlY2VpdmVkIG1lc3NhZ2VzLgorICoKKyAqIEZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGhhdmUgb25lIGFjayBpbiBmbGlnaHQgYXQgYSB0aW1lLiAgVGhpcyBwdXRzCisgKiBwcmVzc3VyZSBvbiBzZW5kZXJzIHRvIGhhdmUgZGVlcCBlbm91Z2ggc2VuZCBxdWV1ZXMgdG8gYWJzb3JiIHRoZSBsYXRlbmN5IG9mCisgKiBhIHNpbmdsZSBhY2sgZnJhbWUgYmVpbmcgaW4gZmxpZ2h0LiAgVGhpcyBtaWdodCBub3QgYmUgZ29vZCBlbm91Z2guCisgKgorICogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZlIGEgbG9uZy1saXZlZCBzZW5kX3dyIGFuZCBzZ2Ugd2hpY2ggcG9pbnQgdG8gYQorICogc3RhdGljYWxseSBhbGxvY2F0ZWQgYWNrIGZyYW1lLiAgVGhpcyBhY2sgd3IgZG9lcyBub3QgZmFsbCB1bmRlciB0aGUgcmluZworICogYWNjb3VudGluZyB0aGF0IHRoZSB0eCBhbmQgcnggd3JzIGRvLiAgVGhlIFFQIGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgbWFrZXMKKyAqIHJvb20gZm9yIGl0IGJleW9uZCB0aGUgcmluZyBzaXplLiAgU2VuZCBjb21wbGV0aW9uIG5vdGljZXMgaXRzIHNwZWNpYWwKKyAqIHdyX2lkIGFuZCBhdm9pZHMgd29ya2luZyB3aXRoIHRoZSByaW5nIGluIHRoYXQgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgcmRzX2liX3NldF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdTY0IHNlcSwKKwkJCQlpbnQgYWNrX3JlcXVpcmVkKQoreworCXJkc19pYl9zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOworCWlmIChhY2tfcmVxdWlyZWQpIHsKKwkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJfQorfQorCitzdGF0aWMgdTY0IHJkc19pYl9nZXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlyZXR1cm4gaWMtPmlfYWNrX25leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHMpCit7CisJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9IGljLT5pX2FjazsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXU2NCBzZXE7CisJaW50IHJldDsKKworCXNlcSA9IHJkc19pYl9nZXRfYWNrKGljKTsKKworCXJkc2RlYnVnKCJzZW5kX2FjazogaWMgJXAgYWNrICVsbHVcbiIsIGljLCAodW5zaWduZWQgbG9uZyBsb25nKSBzZXEpOworCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihoZHIsIDAsIDAsIDApOworCWhkci0+aF9hY2sgPSBjcHVfdG9fYmU2NChzZXEpOworCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKGhkcik7CisJaWMtPmlfYWNrX3F1ZXVlZCA9IGppZmZpZXM7CisKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmaWMtPmlfYWNrX3dyLCAmZmFpbGVkX3dyKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQkvKiBGYWlsZWQgdG8gc2VuZC4gUmVsZWFzZSB0aGUgV1IsIGFuZAorCQkgKiBmb3JjZSBhbm90aGVyIEFDSy4KKwkJICovCisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3NlbmRfZmFpbHVyZSk7CisJCS8qIE5lZWQgdG8gZmluZXNzZSB0aGlzIGxhdGVyLiAqLworCQlCVUcoKTsKKwl9IGVsc2UKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW50KTsKK30KKworLyoKKyAqIFRoZXJlIGFyZSAzIHdheXMgb2YgZ2V0dGluZyBhY2tub3dsZWRnZW1lbnRzIHRvIHRoZSBwZWVyOgorICogIDEuCVdlIGNhbGwgcmRzX2liX2F0dGVtcHRfYWNrIGZyb20gdGhlIHJlY3YgY29tcGxldGlvbiBoYW5kbGVyCisgKgl0byBzZW5kIGFuIEFDSy1vbmx5IGZyYW1lLgorICoJSG93ZXZlciwgdGhlcmUgY2FuIGJlIG9ubHkgb25lIHN1Y2ggZnJhbWUgaW4gdGhlIHNlbmQgcXVldWUKKyAqCWF0IGFueSB0aW1lLCBzbyB3ZSBtYXkgaGF2ZSB0byBwb3N0cG9uZSBpdC4KKyAqICAyLglXaGVuIGFub3RoZXIgKGRhdGEpIHBhY2tldCBpcyB0cmFuc21pdHRlZCB3aGlsZSB0aGVyZSdzCisgKglhbiBBQ0sgaW4gdGhlIHF1ZXVlLCB3ZSBwaWdneWJhY2sgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIKKyAqCW9uIHRoZSBkYXRhIHBhY2tldC4KKyAqICAzLglJZiB0aGUgQUNLIFdSIGlzIGRvbmUgc2VuZGluZywgd2UgZ2V0IGNhbGxlZCBmcm9tIHRoZQorICoJc2VuZCBxdWV1ZSBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCBjaGVjayB3aGV0aGVyIHRoZXJlJ3MKKyAqCWFub3RoZXIgQUNLIHBlbmRpbmcgKHBvc3Rwb25lZCBiZWNhdXNlIHRoZSBXUiB3YXMgb24gdGhlCisgKglxdWV1ZSkuIElmIHNvLCB3ZSB0cmFuc21pdCBpdC4KKyAqCisgKiBXZSBtYWludGFpbiAyIHZhcmlhYmxlczoKKyAqICAtCWlfYWNrX2ZsYWdzLCB3aGljaCBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBBQ0sgV1IKKyAqCWlzIGN1cnJlbnRseSBpbiB0aGUgc2VuZCBxdWV1ZSBvciBub3QgKElCX0FDS19JTl9GTElHSFQpCisgKiAgLQlpX2Fja19uZXh0LCB3aGljaCBpcyB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgd2UgcmVjZWl2ZWQKKyAqCisgKiBQb3RlbnRpYWxseSwgc2VuZCBxdWV1ZSBhbmQgcmVjZWl2ZSBxdWV1ZSBoYW5kbGVycyBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKyAqCisgKiBSZWNvbm5lY3RpbmcgY29tcGxpY2F0ZXMgdGhpcyBwaWN0dXJlIGp1c3Qgc2xpZ2h0bHkuIFdoZW4gd2UKKyAqIHJlY29ubmVjdCwgd2UgbWF5IGJlIHNlZWluZyBkdXBsaWNhdGUgcGFja2V0cy4gVGhlIHBlZXIKKyAqIGlzIHJldHJhbnNtaXR0aW5nIHRoZW0sIGJlY2F1c2UgaXQgaGFzbid0IHNlZW4gYW4gQUNLIGZvcgorICogdGhlbS4gSXQgaXMgaW1wb3J0YW50IHRoYXQgd2UgQUNLIHRoZXNlLgorICoKKyAqIEFDSyBtaXRpZ2F0aW9uIGFkZHMgYSBoZWFkZXIgZmxhZyAiQUNLX1JFUVVJUkVEIjsgYW55IHBhY2tldCB3aXRoCisgKiB0aGlzIGZsYWcgc2V0ICpNVVNUKiBiZSBhY2tub3dsZWRnZWQgaW1tZWRpYXRlbHkuCisgKi8KKworLyoKKyAqIFdoZW4gd2UgZ2V0IGhlcmUsIHdlJ3JlIGNhbGxlZCBmcm9tIHRoZSByZWN2IHF1ZXVlIGhhbmRsZXIuCisgKiBDaGVjayB3aGV0aGVyIHdlIG91Z2h0IHRvIHRyYW5zbWl0IGFuIEFDSy4KKyAqLwordm9pZCByZHNfaWJfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwl1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHM7CisKKwlpZiAoIXRlc3RfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpKQorCQlyZXR1cm47CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKSkgeworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3NlbmRfZGVsYXllZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDYW4gd2UgZ2V0IGEgc2VuZCBjcmVkaXQ/ICovCisJaWYgKCFyZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDEsICZhZHZfY3JlZGl0cywgMCkpIHsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3Rocm90dGxlKTsKKwkJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pYl9zZW5kX2FjayhpYywgYWR2X2NyZWRpdHMpOworfQorCisvKgorICogV2UgZ2V0IGhlcmUgZnJvbSB0aGUgc2VuZCBjb21wbGV0aW9uIGhhbmRsZXIsIHdoZW4gdGhlCisgKiBhZGFwdGVyIHRlbGxzIHVzIHRoZSBBQ0sgZnJhbWUgd2FzIHNlbnQuCisgKi8KK3ZvaWQgcmRzX2liX2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pYl9hdHRlbXB0X2FjayhpYyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgcmVndWxhciB4bWl0IGNvZGUgd2hlbiBpdCB3YW50cyB0byBwaWdneWJhY2sKKyAqIGFuIEFDSyBvbiBhbiBvdXRnb2luZyBmcmFtZS4KKyAqLwordTY0IHJkc19pYl9waWdneWJfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW5kX3BpZ2d5YmFja2VkKTsKKwlyZXR1cm4gcmRzX2liX2dldF9hY2soaWMpOworfQorCisvKgorICogSXQncyBraW5kIG9mIGxhbWUgdGhhdCB3ZSdyZSBjb3B5aW5nIGZyb20gdGhlIHBvc3RlZCByZWNlaXZlIHBhZ2VzIGludG8KKyAqIGxvbmctbGl2ZWQgYml0bWFwcy4gIFdlIGNvdWxkIGhhdmUgcG9zdGVkIHRoZSBiaXRtYXBzIGFuZCByZG1hIHdyaXR0ZW4gaW50bworICogdGhlbS4gIEJ1dCByZWNlaXZpbmcgbmV3IGNvbmdlc3Rpb24gYml0bWFwcyBzaG91bGQgYmUgYSAqcmFyZSogZXZlbnQsIHNvCisgKiBob3BlZnVsbHkgd2Ugd29uJ3QgbmVlZCB0byBpbnZlc3QgdGhhdCBjb21wbGV4aXR5IGluIG1ha2luZyBpdCBtb3JlCisgKiBlZmZpY2llbnQuICBCeSBjb3B5aW5nIHdlIGNhbiBzaGFyZSBhIHNpbXBsZXIgY29yZSB3aXRoIFRDUCB3aGljaCBoYXMgdG8KKyAqIGNvcHkuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9jb25nX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICAgc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmMpCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXVuc2lnbmVkIGludCBtYXBfb2ZmOworCXVuc2lnbmVkIGludCBtYXBfcGFnZTsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmOworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGNvcGllZDsKKwl1aW50NjRfdCB1bmNvbmdlc3RlZCA9IDA7CisJdm9pZCAqYWRkcjsKKworCS8qIGNhdGNoIGNvbXBsZXRlbHkgY29ycnVwdCBwYWNrZXRzICovCisJaWYgKGJlMzJfdG9fY3B1KGliaW5jLT5paV9pbmMuaV9oZHIuaF9sZW4pICE9IFJEU19DT05HX01BUF9CWVRFUykKKwkJcmV0dXJuOworCisJbWFwID0gY29ubi0+Y19mY29uZzsKKwltYXBfcGFnZSA9IDA7CisJbWFwX29mZiA9IDA7CisKKwlmcmFnID0gbGlzdF9lbnRyeShpYmluYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJZnJhZ19vZmYgPSAwOworCisJY29waWVkID0gMDsKKworCXdoaWxlIChjb3BpZWQgPCBSRFNfQ09OR19NQVBfQllURVMpIHsKKwkJdWludDY0X3QgKnNyYywgKmRzdDsKKwkJdW5zaWduZWQgaW50IGs7CisKKwkJdG9fY29weSA9IG1pbihSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYsIFBBR0VfU0laRSAtIG1hcF9vZmYpOworCQlCVUdfT04odG9fY29weSAmIDcpOyAvKiBNdXN0IGJlIDY0Yml0IGFsaWduZWQuICovCisKKwkJYWRkciA9IGttYXBfYXRvbWljKGZyYWctPmZfcGFnZSwgS01fU09GVElSUTApOworCisJCXNyYyA9IGFkZHIgKyBmcmFnX29mZjsKKwkJZHN0ID0gKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1ttYXBfcGFnZV0gKyBtYXBfb2ZmOworCQlmb3IgKGsgPSAwOyBrIDwgdG9fY29weTsgayArPSA4KSB7CisJCQkvKiBSZWNvcmQgcG9ydHMgdGhhdCBiZWNhbWUgdW5jb25nZXN0ZWQsIGllCisJCQkgKiBiaXRzIHRoYXQgY2hhbmdlZCBmcm9tIDAgdG8gMS4gKi8KKwkJCXVuY29uZ2VzdGVkIHw9IH4oKnNyYykgJiAqZHN0OworCQkJKmRzdCsrID0gKnNyYysrOworCQl9CisJCWt1bm1hcF9hdG9taWMoYWRkciwgS01fU09GVElSUTApOworCisJCWNvcGllZCArPSB0b19jb3B5OworCisJCW1hcF9vZmYgKz0gdG9fY29weTsKKwkJaWYgKG1hcF9vZmYgPT0gUEFHRV9TSVpFKSB7CisJCQltYXBfb2ZmID0gMDsKKwkJCW1hcF9wYWdlKys7CisJCX0KKworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwl9CisKKwkvKiB0aGUgY29uZ2VzdGlvbiBtYXAgaXMgaW4gbGl0dGxlIGVuZGlhbiBvcmRlciAqLworCXVuY29uZ2VzdGVkID0gbGU2NF90b19jcHUodW5jb25nZXN0ZWQpOworCisJcmRzX2NvbmdfbWFwX3VwZGF0ZWQobWFwLCB1bmNvbmdlc3RlZCk7Cit9CisKKy8qCisgKiBSaW5ncyBhcmUgcG9zdGVkIHdpdGggYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5J2xsIG5lZWQgdG8gcXVldWUgdGhlCisgKiBpbmNvbWluZyBtZXNzYWdlIHRvIHRoZSByZWNlaXZpbmcgc29ja2V0IHNvIHRoaXMgY2FuJ3QgZmFpbC4KKyAqIEFsbCBmcmFnbWVudHMgc3RhcnQgd2l0aCBhIGhlYWRlciwgc28gd2UgY2FuIG1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVjZWl2aW5nCisgKiBnYXJiYWdlLCBhbmQgd2UgY2FuIHRlbGwgYSBzbWFsbCA4IGJ5dGUgZnJhZ21lbnQgZnJvbSBhbiBBQ0sgZnJhbWUuCisgKi8KK3N0cnVjdCByZHNfaWJfYWNrX3N0YXRlIHsKKwl1NjQJCWFja19uZXh0OworCXU2NAkJYWNrX3JlY3Y7CisJdW5zaWduZWQgaW50CWFja19yZXF1aXJlZDoxOworCXVuc2lnbmVkIGludAlhY2tfbmV4dF92YWxpZDoxOworCXVuc2lnbmVkIGludAlhY2tfcmVjdl92YWxpZDoxOworfTsKKworc3RhdGljIHZvaWQgcmRzX2liX3Byb2Nlc3NfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YsIHUzMiBieXRlX2xlbiwKKwkJCQlzdHJ1Y3QgcmRzX2liX2Fja19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmMgPSBpYy0+aV9pYmluYzsKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaWhkciwgKmhkcjsKKworCS8qIFhYWCBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24gaWYgcG9ydCAwLDAgYXJlIHNlZW4/ICovCisKKwlyZHNkZWJ1ZygiaWMgJXAgaWJpbmMgJXAgcmVjdiAlcCBieXRlIGxlbiAldVxuIiwgaWMsIGliaW5jLCByZWN2LAorCQkgYnl0ZV9sZW4pOworCisJaWYgKGJ5dGVfbGVuIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGRpZG4ndCBpbmNsdWUgYSAiCisJCSAgICAgICAiaGVhZGVyLCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZXR1cm47CisJfQorCWJ5dGVfbGVuIC09IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlpaGRyID0gJmljLT5pX3JlY3ZfaGRyc1tyZWN2IC0gaWMtPmlfcmVjdnNdOworCisJLyogVmFsaWRhdGUgdGhlIGNoZWNrc3VtLiAqLworCWlmICghcmRzX21lc3NhZ2VfdmVyaWZ5X2NoZWNrc3VtKGloZHIpKSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKKwkJICAgICAgICJmcm9tICVwSTQgaGFzIGNvcnJ1cHRlZCBoZWFkZXIgLSAiCisJCSAgICAgICAiZm9yY2luZyBhIHJlY29ubmVjdFxuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZHJvcF9iYWRfY2hlY2tzdW0pOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyB0aGUgQUNLIHNlcXVlbmNlIHdoaWNoIGNvbWVzIHdpdGggZXZlcnkgcGFja2V0ICovCisJc3RhdGUtPmFja19yZWN2ID0gYmU2NF90b19jcHUoaWhkci0+aF9hY2spOworCXN0YXRlLT5hY2tfcmVjdl92YWxpZCA9IDE7CisKKwkvKiBQcm9jZXNzIHRoZSBjcmVkaXRzIHVwZGF0ZSBpZiB0aGVyZSB3YXMgb25lICovCisJaWYgKGloZHItPmhfY3JlZGl0KQorCQlyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBpaGRyLT5oX2NyZWRpdCk7CisKKwlpZiAoaWhkci0+aF9zcG9ydCA9PSAwICYmIGloZHItPmhfZHBvcnQgPT0gMCAmJiBieXRlX2xlbiA9PSAwKSB7CisJCS8qIFRoaXMgaXMgYW4gQUNLLW9ubHkgcGFja2V0LiBUaGUgZmFjdCB0aGF0IGl0IGdldHMKKwkJICogc3BlY2lhbCB0cmVhdG1lbnQgaGVyZSBpcyB0aGF0IGhpc3RvcmljYWxseSwgQUNLcworCQkgKiB3ZXJlIHJhdGhlciBzcGVjaWFsIGJlYXN0cy4KKwkJICovCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfcmVjZWl2ZWQpOworCisJCS8qCisJCSAqIFVzdWFsbHkgdGhlIGZyYWdzIG1ha2UgdGhlaXIgd2F5IG9uIHRvIGluY3MgYW5kIGFyZSB0aGVuIGZyZWVkIGFzCisJCSAqIHRoZSBpbmMgaXMgZnJlZWQuICBXZSBkb24ndCBnbyB0aGF0IHJvdXRlLCBzbyB3ZSBoYXZlIHRvIGRyb3AgdGhlCisJCSAqIHBhZ2UgcmVmIG91cnNlbHZlcy4gIFdlIGNhbid0IGp1c3QgbGVhdmUgdGhlIHBhZ2Ugb24gdGhlIHJlY3YKKwkJICogYmVjYXVzZSB0aGF0IGNvbmZ1c2VzIHRoZSBkbWEgbWFwcGluZyBvZiBwYWdlcyBhbmQgZWFjaCByZWN2J3MgdXNlCisJCSAqIG9mIGEgcGFydGlhbCBwYWdlLiAgV2UgY2FuIGxlYXZlIHRoZSBmcmFnLCB0aG91Z2gsIGl0IHdpbGwgYmUKKwkJICogcmV1c2VkLgorCQkgKgorCQkgKiBGSVhNRTogRm9sZCB0aGlzIGludG8gdGhlIGNvZGUgcGF0aCBiZWxvdy4KKwkJICovCisJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gaW5jIG9uIHRoZSBjb25uZWN0aW9uIHRoZW4gdGhpcworCSAqIGZyYWdtZW50IGhhcyBhIGhlYWRlciBhbmQgc3RhcnRzIGEgbWVzc2FnZS4uIGNvcHkgaXRzIGhlYWRlcgorCSAqIGludG8gdGhlIGluYyBhbmQgc2F2ZSB0aGUgaW5jIHNvIHdlIGNhbiBoYW5nIHVwY29taW5nIGZyYWdtZW50cworCSAqIG9mZiBpdHMgbGlzdC4KKwkgKi8KKwlpZiAoaWJpbmMgPT0gTlVMTCkgeworCQlpYmluYyA9IHJlY3YtPnJfaWJpbmM7CisJCXJlY3YtPnJfaWJpbmMgPSBOVUxMOworCQlpYy0+aV9pYmluYyA9IGliaW5jOworCisJCWhkciA9ICZpYmluYy0+aWlfaW5jLmlfaGRyOworCQltZW1jcHkoaGRyLCBpaGRyLCBzaXplb2YoKmhkcikpOworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gYmUzMl90b19jcHUoaGRyLT5oX2xlbik7CisKKwkJcmRzZGVidWcoImljICVwIGliaW5jICVwIHJlbSAldSBmbGFnIDB4JXhcbiIsIGljLCBpYmluYywKKwkJCSBpYy0+aV9yZWN2X2RhdGFfcmVtLCBoZHItPmhfZmxhZ3MpOworCX0gZWxzZSB7CisJCWhkciA9ICZpYmluYy0+aWlfaW5jLmlfaGRyOworCQkvKiBXZSBjYW4ndCBqdXN0IHVzZSBtZW1jbXAgaGVyZTsgZnJhZ21lbnRzIG9mIGEKKwkJICogc2luZ2xlIG1lc3NhZ2UgbWF5IGNhcnJ5IGRpZmZlcmVudCBBQ0tzICovCisJCWlmIChoZHItPmhfc2VxdWVuY2UgIT0gaWhkci0+aF9zZXF1ZW5jZQorCQkgfHwgaGRyLT5oX2xlbiAhPSBpaGRyLT5oX2xlbgorCQkgfHwgaGRyLT5oX3Nwb3J0ICE9IGloZHItPmhfc3BvcnQKKwkJIHx8IGhkci0+aF9kcG9ydCAhPSBpaGRyLT5oX2Rwb3J0KSB7CisJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLAorCQkJCSJmcmFnbWVudCBoZWFkZXIgbWlzbWF0Y2g7IGZvcmNpbmcgcmVjb25uZWN0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWxpc3RfYWRkX3RhaWwoJnJlY3YtPnJfZnJhZy0+Zl9pdGVtLCAmaWJpbmMtPmlpX2ZyYWdzKTsKKwlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJaWYgKGljLT5pX3JlY3ZfZGF0YV9yZW0gPiBSRFNfRlJBR19TSVpFKQorCQlpYy0+aV9yZWN2X2RhdGFfcmVtIC09IFJEU19GUkFHX1NJWkU7CisJZWxzZSB7CisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gPSAwOworCQlpYy0+aV9pYmluYyA9IE5VTEw7CisKKwkJaWYgKGliaW5jLT5paV9pbmMuaV9oZHIuaF9mbGFncyA9PSBSRFNfRkxBR19DT05HX0JJVE1BUCkKKwkJCXJkc19pYl9jb25nX3JlY3YoY29ubiwgaWJpbmMpOworCQllbHNlIHsKKwkJCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfZmFkZHIsIGNvbm4tPmNfbGFkZHIsCisJCQkJCSAgJmliaW5jLT5paV9pbmMsIEdGUF9BVE9NSUMsCisJCQkJCSAgS01fU09GVElSUTApOworCQkJc3RhdGUtPmFja19uZXh0ID0gYmU2NF90b19jcHUoaGRyLT5oX3NlcXVlbmNlKTsKKwkJCXN0YXRlLT5hY2tfbmV4dF92YWxpZCA9IDE7CisJCX0KKworCQkvKiBFdmFsdWF0ZSB0aGUgQUNLX1JFUVVJUkVEIGZsYWcgKmFmdGVyKiB3ZSByZWNlaXZlZAorCQkgKiB0aGUgY29tcGxldGUgZnJhbWUsIGFuZCBhZnRlciBidW1waW5nIHRoZSBuZXh0X3J4CisJCSAqIHNlcXVlbmNlLiAqLworCQlpZiAoaGRyLT5oX2ZsYWdzICYgUkRTX0ZMQUdfQUNLX1JFUVVJUkVEKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9hY2tfcmVxdWlyZWQpOworCQkJc3RhdGUtPmFja19yZXF1aXJlZCA9IDE7CisJCX0KKworCQlyZHNfaW5jX3B1dCgmaWJpbmMtPmlpX2luYyk7CisJfQorfQorCisvKgorICogUGx1Y2tpbmcgdGhlIG9sZGVzdCBlbnRyeSBmcm9tIHRoZSByaW5nIGNhbiBiZSBkb25lIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgdGhyZWFkIHJlZmlsbGluZyB0aGUgcmluZy4gIEVhY2ggcmluZyBvcGVyYXRpb24gaXMgcHJvdGVjdGVkIGJ5CisgKiBzcGlubG9ja3MgYW5kIHRoZSB0cmFuc2llbnQgc3RhdGUgb2YgcmVmaWxsaW5nIGRvZXNuJ3QgY2hhbmdlIHRoZQorICogcmVjb3JkaW5nIG9mIHdoaWNoIGVudHJ5IGlzIG9sZGVzdC4KKyAqCisgKiBUaGlzIHJlbGllcyBvbiBJQiBvbmx5IGNhbGxpbmcgb25lIGNxIGNvbXBfaGFuZGxlciBmb3IgZWFjaCBjcSBzbyB0aGF0CisgKiB0aGVyZSB3aWxsIG9ubHkgYmUgb25lIGNhbGxlciBvZiByZHNfcmVjdl9pbmNvbWluZygpIHBlciBSRFMgY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaWJfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2liX2Fja19zdGF0ZSBzdGF0ZSA9IHsgMCwgfTsKKwlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdjsKKworCXJkc2RlYnVnKCJjb25uICVwIGNxICVwXG4iLCBjb25uLCBjcSk7CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfY3FfY2FsbCk7CisKKwlpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9TT0xJQ0lURUQpOworCisJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CisJCXJkc2RlYnVnKCJ3YyB3cl9pZCAweCVsbHggc3RhdHVzICV1IGJ5dGVfbGVuICV1IGltbV9kYXRhICV1XG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd2Mud3JfaWQsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4sCisJCQkgYmUzMl90b19jcHUod2MuZXguaW1tX2RhdGEpKTsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2NxX2V2ZW50KTsKKworCQlyZWN2ID0gJmljLT5pX3JlY3ZzW3Jkc19pYl9yaW5nX29sZGVzdCgmaWMtPmlfcmVjdl9yaW5nKV07CisKKwkJcmRzX2liX3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisKKwkJLyoKKwkJICogQWxzbyBwcm9jZXNzIHJlY3ZzIGluIGNvbm5lY3Rpbmcgc3RhdGUgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZQorCQkgKiB0byBnZXQgYSByZWN2IGNvbXBsZXRpb24gX2JlZm9yZV8gdGhlIHJkbWFjbSBFU1RBQkxJU0hFRAorCQkgKiBldmVudCBpcyBwcm9jZXNzZWQuCisJCSAqLworCQlpZiAocmRzX2Nvbm5fdXAoY29ubikgfHwgcmRzX2Nvbm5fY29ubmVjdGluZyhjb25uKSkgeworCQkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJCWlmICh3Yy5zdGF0dXMgPT0gSUJfV0NfU1VDQ0VTUykgeworCQkJCXJkc19pYl9wcm9jZXNzX3JlY3YoY29ubiwgcmVjdiwgd2MuYnl0ZV9sZW4sICZzdGF0ZSk7CisJCQl9IGVsc2UgeworCQkJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZWN2IGNvbXBsZXRpb24gb24gIgorCQkJCSAgICAgICAiJXBJNCBoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJCSAgICAgICB3Yy5zdGF0dXMpOworCQkJfQorCQl9CisKKwkJcmRzX2liX3JpbmdfZnJlZSgmaWMtPmlfcmVjdl9yaW5nLCAxKTsKKwl9CisKKwlpZiAoc3RhdGUuYWNrX25leHRfdmFsaWQpCisJCXJkc19pYl9zZXRfYWNrKGljLCBzdGF0ZS5hY2tfbmV4dCwgc3RhdGUuYWNrX3JlcXVpcmVkKTsKKwlpZiAoc3RhdGUuYWNrX3JlY3ZfdmFsaWQgJiYgc3RhdGUuYWNrX3JlY3YgPiBpYy0+aV9hY2tfcmVjdikgeworCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIHN0YXRlLmFja19yZWN2LCBOVUxMKTsKKwkJaWMtPmlfYWNrX3JlY3YgPSBzdGF0ZS5hY2tfcmVjdjsKKwl9CisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworCisJLyogSWYgd2UgZXZlciBlbmQgdXAgd2l0aCBhIHJlYWxseSBlbXB0eSByZWNlaXZlIHJpbmcsIHdlJ3JlCisJICogaW4gZGVlcCB0cm91YmxlLCBhcyB0aGUgc2VuZGVyIHdpbGwgZGVmaW5pdGVseSBzZWUgUk5SCisJICogdGltZW91dHMuICovCisJaWYgKHJkc19pYl9yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfcmluZ19lbXB0eSk7CisKKwkvKgorCSAqIElmIHRoZSByaW5nIGlzIHJ1bm5pbmcgbG93LCB0aGVuIHNjaGVkdWxlIHRoZSB0aHJlYWQgdG8gcmVmaWxsLgorCSAqLworCWlmIChyZHNfaWJfcmluZ19sb3coJmljLT5pX3JlY3ZfcmluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7Cit9CisKK2ludCByZHNfaWJfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygiY29ubiAlcFxuIiwgY29ubik7CisKKwkvKgorCSAqIElmIHdlIGdldCBhIHRlbXBvcmFyeSBwb3N0aW5nIGZhaWx1cmUgaW4gdGhpcyBjb250ZXh0IHRoZW4KKwkgKiB3ZSdyZSByZWFsbHkgbG93IGFuZCB3ZSB3YW50IHRoZSBjYWxsZXIgdG8gYmFjayBvZmYgZm9yIGEgYml0LgorCSAqLworCW11dGV4X2xvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCWlmIChyZHNfaWJfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAwKSkKKwkJcmV0ID0gLUVOT01FTTsKKwllbHNlCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9yZWZpbGxfZnJvbV90aHJlYWQpOworCW11dGV4X3VubG9jaygmaWMtPmlfcmVjdl9tdXRleCk7CisKKwlpZiAocmRzX2Nvbm5fdXAoY29ubikpCisJCXJkc19pYl9hdHRlbXB0X2FjayhpYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19pbml0IHJkc19pYl9yZWN2X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzaW5mbyBzaTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCS8qIERlZmF1bHQgdG8gMzAlIG9mIGFsbCBhdmFpbGFibGUgUkFNIGZvciByZWN2IG1lbW9yeSAqLworCXNpX21lbWluZm8oJnNpKTsKKwlyZHNfaWJfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24gPSBzaS50b3RhbHJhbSAvIDMgKiBQQUdFX1NJWkUgLyBSRFNfRlJBR19TSVpFOworCisJcmRzX2liX2luY29taW5nX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2liX2luY29taW5nIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaWJfaW5jb21pbmcpLAorCQkJCQkwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2liX2luY29taW5nX3NsYWIgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlyZHNfaWJfZnJhZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pYl9mcmFnIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfcGFnZV9mcmFnKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pYl9mcmFnX3NsYWIgPT0gTlVMTCkKKwkJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pYl9pbmNvbWluZ19zbGFiKTsKKwllbHNlCisJCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfcmVjdl9leGl0KHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pYl9pbmNvbWluZ19zbGFiKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2liX2ZyYWdfc2xhYik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JpbmcuYyBiL25ldC9yZHMvaWJfcmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTZjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3JpbmcuYwpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCisvKgorICogTG9ja2luZyBmb3IgSUIgcmluZ3MuCisgKiBXZSBhc3N1bWUgdGhhdCBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm90ZWN0ZWQgYnkgYSBtdXRleAorICogaW4gdGhlIGNhbGxlciAodGhpcyBpcyBhIHZhbGlkIGFzc3VtcHRpb24gZm9yIHRoZSBjdXJyZW50CisgKiBpbXBsZW1lbnRhdGlvbikuCisgKgorICogRnJlZWluZyBhbHdheXMgaGFwcGVucyBpbiBhbiBpbnRlcnJ1cHQsIGFuZCBoZW5jZSBvbmx5CisgKiByYWNlcyB3aXRoIGFsbG9jYXRpb25zLCBidXQgbm90IHdpdGggb3RoZXIgZnJlZSgpcy4KKyAqCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGlzIHRoYXQKKyAqIHRoZSBhbGxvYyBjb2RlIGhhcyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBmcmVlIGVudHJpZXMuCisgKiBUbyB0aGlzIGVuZCwgd2UgbWFpbnRhaW4gdHdvIGNvdW50ZXJzOyBhbiBhbGxvY2F0aW9uIGNvdW50ZXIKKyAqIGFuZCBhIGZyZWUgY291bnRlci4gQm90aCBhcmUgYWxsb3dlZCB0byBydW4gZnJlZWx5LCBhbmQgd3JhcAorICogYXJvdW5kLgorICogVGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgaXMgYWx3YXlzIChhbGxvY19jdHIgLSBmcmVlX2N0cikgJSBOUi4KKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYWtlcyBmcmVlX2N0ciBhdG9taWMuIFdoZW4gdGhlCisgKiBjYWxsZXIgZmluZHMgYW4gYWxsb2NhdGlvbiBmYWlscywgaXQgc2hvdWxkIHNldCBhbiAiYWxsb2MgZmFpbCIKKyAqIGJpdCBhbmQgcmV0cnkgdGhlIGFsbG9jYXRpb24uIFRoZSAiYWxsb2MgZmFpbCIgYml0IGVzc2VudGlhbGx5IHRlbGxzCisgKiB0aGUgQ1EgY29tcGxldGlvbiBoYW5kbGVycyB0byB3YWtlIGl0IHVwIGFmdGVyIGZyZWVpbmcgc29tZQorICogbW9yZSBlbnRyaWVzLgorICovCisKKy8qCisgKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBzaHV0ZG93bi4KKyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2liX3JpbmdfZW1wdHlfd2FpdCk7CisKK3ZvaWQgcmRzX2liX3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCW1lbXNldChyaW5nLCAwLCBzaXplb2YoKnJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7CisJcmRzZGVidWcoInJpbmcgJXAgbnIgJXVcbiIsIHJpbmcsIHJpbmctPndfbnIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX3Jkc19pYl9yaW5nX3VzZWQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJdTMyIGRpZmY7CisKKwkvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBoYXMgYXQgbGVhc3QgYXMgbWFueSBiaXRzIGFzIHUzMiAqLworCWRpZmYgPSByaW5nLT53X2FsbG9jX2N0ciAtICh1MzIpIGF0b21pY19yZWFkKCZyaW5nLT53X2ZyZWVfY3RyKTsKKwlCVUdfT04oZGlmZiA+IHJpbmctPndfbnIpOworCisJcmV0dXJuIGRpZmY7Cit9CisKK3ZvaWQgcmRzX2liX3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpCit7CisJLyogV2Ugb25seSBldmVyIGdldCBjYWxsZWQgZnJvbSB0aGUgY29ubmVjdGlvbiBzZXR1cCBjb2RlLAorCSAqIHByaW9yIHRvIGNyZWF0aW5nIHRoZSBRUC4gKi8KKwlCVUdfT04oX19yZHNfaWJfcmluZ191c2VkKHJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7Cit9CisKK3N0YXRpYyBpbnQgX19yZHNfaWJfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaWJfcmluZ191c2VkKHJpbmcpID09IDA7Cit9CisKK3UzMiByZHNfaWJfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpCit7CisJdTMyIHJldCA9IDAsIGF2YWlsOworCisJYXZhaWwgPSByaW5nLT53X25yIC0gX19yZHNfaWJfcmluZ191c2VkKHJpbmcpOworCisJcmRzZGVidWcoInJpbmcgJXAgdmFsICV1IG5leHQgJXUgZnJlZSAldVxuIiwgcmluZywgdmFsLAorCQkgcmluZy0+d19hbGxvY19wdHIsIGF2YWlsKTsKKworCWlmICh2YWwgJiYgYXZhaWwpIHsKKwkJcmV0ID0gbWluKHZhbCwgYXZhaWwpOworCQkqcG9zID0gcmluZy0+d19hbGxvY19wdHI7CisKKwkJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgKyByZXQpICUgcmluZy0+d19ucjsKKwkJcmluZy0+d19hbGxvY19jdHIgKz0gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3JpbmdfZnJlZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCkKK3sKKwlyaW5nLT53X2ZyZWVfcHRyID0gKHJpbmctPndfZnJlZV9wdHIgKyB2YWwpICUgcmluZy0+d19ucjsKKwlhdG9taWNfYWRkKHZhbCwgJnJpbmctPndfZnJlZV9jdHIpOworCisJaWYgKF9fcmRzX2liX3JpbmdfZW1wdHkocmluZykgJiYKKwkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX2liX3JpbmdfZW1wdHlfd2FpdCkpCisJCXdha2VfdXAoJnJkc19pYl9yaW5nX2VtcHR5X3dhaXQpOworfQorCit2b2lkIHJkc19pYl9yaW5nX3VuYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgLSB2YWwpICUgcmluZy0+d19ucjsKKwlyaW5nLT53X2FsbG9jX2N0ciAtPSB2YWw7Cit9CisKK2ludCByZHNfaWJfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaWJfcmluZ19lbXB0eShyaW5nKTsKK30KKworaW50IHJkc19pYl9yaW5nX2xvdyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaWJfcmluZ191c2VkKHJpbmcpIDw9IChyaW5nLT53X25yID4+IDIpOworfQorCisvKgorICogcmV0dXJucyB0aGUgb2xkZXN0IGFsbG9jZWQgcmluZyBlbnRyeS4gIFRoaXMgd2lsbCBiZSB0aGUgbmV4dCBvbmUKKyAqIGZyZWVkLiAgVGhpcyBjYW4ndCBiZSBjYWxsZWQgaWYgdGhlcmUgYXJlIG5vbmUgYWxsb2NhdGVkLgorICovCit1MzIgcmRzX2liX3Jpbmdfb2xkZXN0KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiByaW5nLT53X2ZyZWVfcHRyOworfQorCisvKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB3b3JrIHJlcXVlc3RzLgorICovCisKK3UzMiByZHNfaWJfcmluZ19jb21wbGV0ZWQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB3cl9pZCwgdTMyIG9sZGVzdCkKK3sKKwl1MzIgcmV0OworCisJaWYgKG9sZGVzdCA8PSAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkKQorCQlyZXQgPSAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkIC0gb2xkZXN0ICsgMTsKKwllbHNlCisJCXJldCA9IHJpbmctPndfbnIgLSBvbGRlc3QgKyAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkICsgMTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHJldCAldSB3cl9pZCAldSBvbGRlc3QgJXVcbiIsIHJpbmcsIHJldCwKKwkJIHdyX2lkLCBvbGRlc3QpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3NlbmQuYyBiL25ldC9yZHMvaWJfc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNmM1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3NlbmQuYwpAQCAtMCwwICsxLDg3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAiaWIuaCIKKworc3RhdGljIHZvaWQgcmRzX2liX3NlbmRfcmRtYV9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJCSAgICAgIGludCB3Y19zdGF0dXMpCit7CisJaW50IG5vdGlmeV9zdGF0dXM7CisKKwlzd2l0Y2ggKHdjX3N0YXR1cykgeworCWNhc2UgSUJfV0NfV1JfRkxVU0hfRVJSOgorCQlyZXR1cm47CisKKwljYXNlIElCX1dDX1NVQ0NFU1M6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9TVUNDRVNTOworCQlicmVhazsKKworCWNhc2UgSUJfV0NfUkVNX0FDQ0VTU19FUlI6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9SRU1PVEVfRVJST1I7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX09USEVSX0VSUk9SOworCQlicmVhazsKKwl9CisJcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShybSwgbm90aWZ5X3N0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX3VubWFwX3JkbWEoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCWlmIChvcC0+cl9tYXBwZWQpIHsKKwkJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQlvcC0+cl9zZywgb3AtPnJfbmVudHMsCisJCQlvcC0+cl93cml0ZSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlvcC0+cl9tYXBwZWQgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX3NlbmRfdW5tYXBfcm0oc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCSAgc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQsCisJCQkgIGludCB3Y19zdGF0dXMpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IHNlbmQtPnNfcm07CisKKwlyZHNkZWJ1ZygiaWMgJXAgc2VuZCAlcCBybSAlcFxuIiwgaWMsIHNlbmQsIHJtKTsKKworCWliX2RtYV91bm1hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkgICAgIHJtLT5tX3NnLCBybS0+bV9uZW50cywKKwkJICAgICBETUFfVE9fREVWSUNFKTsKKworCWlmIChybS0+bV9yZG1hX29wICE9IE5VTEwpIHsKKwkJcmRzX2liX3NlbmRfdW5tYXBfcmRtYShpYywgcm0tPm1fcmRtYV9vcCk7CisKKwkJLyogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIGEgY29tcGxldGlvbiBub3RpZmljYXRpb24gb24gdGhpcworCQkgKiBtZXNzYWdlLCB3ZSBjYW4gaW1wbGVtZW50IHRocmVlIGRpZmZlcmVudCBzZW1hbnRpY3M6CisJCSAqICAxLglOb3RpZnkgd2hlbiB3ZSByZWNlaXZlZCB0aGUgQUNLIG9uIHRoZSBSRFMgbWVzc2FnZQorCQkgKgl0aGF0IHdhcyBxdWV1ZWQgd2l0aCB0aGUgUkRNQS4gVGhpcyBwcm92aWRlcyByZWxpYWJsZQorCQkgKglub3RpZmljYXRpb24gb2YgUkRNQSBzdGF0dXMgYXQgdGhlIGV4cGVuc2Ugb2YgYSBvbmUtd2F5CisJCSAqCXBhY2tldCBkZWxheS4KKwkJICogIDIuCU5vdGlmeSB3aGVuIHRoZSBJQiBzdGFjayBnaXZlcyB1cyB0aGUgY29tcGxldGlvbiBldmVudCBmb3IKKwkJICoJdGhlIFJETUEgb3BlcmF0aW9uLgorCQkgKiAgMy4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgYWNjb21wYW55aW5nIFJEUyBtZXNzYWdlcy4KKwkJICogSGVyZSwgd2UgaW1wbGVtZW50IGFwcHJvYWNoICMzLiBUbyBpbXBsZW1lbnQgYXBwcm9hY2ggIzIsCisJCSAqIGNhbGwgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBmcm9tIHRoZSBjcV9oYW5kbGVyLiBUbyBpbXBsZW1lbnQgIzEsCisJCSAqIGRvbid0IGNhbGwgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBhdCBhbGwsIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG5vdGlmeQorCQkgKiBoYW5kbGluZyBpbiB0aGUgQUNLIHByb2Nlc3NpbmcgY29kZS4KKwkJICoKKwkJICogTm90ZTogVGhlcmUncyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgc3luYyBhbnkgUkRNQSBidWZmZXJzIHVzaW5nCisJCSAqIGliX2RtYV9zeW5jX3NnX2Zvcl9jcHUgLSB0aGUgY29tcGxldGlvbiBmb3IgdGhlIFJETUEKKwkJICogb3BlcmF0aW9uIGl0c2VsZiB1bm1hcHBlZCB0aGUgUkRNQSBidWZmZXJzLCB3aGljaCB0YWtlcyBjYXJlCisJCSAqIG9mIHN5bmNoaW5nLgorCQkgKi8KKwkJcmRzX2liX3NlbmRfcmRtYV9jb21wbGV0ZShybSwgd2Nfc3RhdHVzKTsKKworCQlpZiAocm0tPm1fcmRtYV9vcC0+cl93cml0ZSkKKwkJCXJkc19zdGF0c19hZGQoc19zZW5kX3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCQllbHNlCisJCQlyZHNfc3RhdHNfYWRkKHNfcmVjdl9yZG1hX2J5dGVzLCBybS0+bV9yZG1hX29wLT5yX2J5dGVzKTsKKwl9CisKKwkvKiBJZiBhbnlvbmUgd2FpdGVkIGZvciB0aGlzIG1lc3NhZ2UgdG8gZ2V0IGZsdXNoZWQgb3V0LCB3YWtlCisJICogdGhlbSB1cCBub3cgKi8KKwlyZHNfbWVzc2FnZV91bm1hcHBlZChybSk7CisKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworCXNlbmQtPnNfcm0gPSBOVUxMOworfQorCit2b2lkIHJkc19pYl9zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kOworCXUzMiBpOworCisJZm9yIChpID0gMCwgc2VuZCA9IGljLT5pX3NlbmRzOyBpIDwgaWMtPmlfc2VuZF9yaW5nLndfbnI7IGkrKywgc2VuZCsrKSB7CisJCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCQlzZW5kLT5zX3JtID0gTlVMTDsKKwkJc2VuZC0+c19vcCA9IE5VTEw7CisKKwkJc2VuZC0+c193ci53cl9pZCA9IGk7CisJCXNlbmQtPnNfd3Iuc2dfbGlzdCA9IHNlbmQtPnNfc2dlOworCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IDA7CisJCXNlbmQtPnNfd3IuZXguaW1tX2RhdGEgPSAwOworCisJCXNnZSA9IHJkc19pYl9kYXRhX3NnZShpYywgc2VuZC0+c19zZ2UpOworCQlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCQlzZ2UgPSByZHNfaWJfaGVhZGVyX3NnZShpYywgc2VuZC0+c19zZ2UpOworCQlzZ2UtPmFkZHIgPSBpYy0+aV9zZW5kX2hkcnNfZG1hICsgKGkgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwkJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCQlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKwl9Cit9CisKK3ZvaWQgcmRzX2liX3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kOworCXUzMiBpOworCisJZm9yIChpID0gMCwgc2VuZCA9IGljLT5pX3NlbmRzOyBpIDwgaWMtPmlfc2VuZF9yaW5nLndfbnI7IGkrKywgc2VuZCsrKSB7CisJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSAweGRlYWQpCisJCQljb250aW51ZTsKKwkJaWYgKHNlbmQtPnNfcm0pCisJCQlyZHNfaWJfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgSUJfV0NfV1JfRkxVU0hfRVJSKTsKKwkJaWYgKHNlbmQtPnNfb3ApCisJCQlyZHNfaWJfc2VuZF91bm1hcF9yZG1hKGljLCBzZW5kLT5zX29wKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgX29sZGVzdC9fZnJlZSByaW5nIG9wZXJhdGlvbnMgaGVyZSByYWNlIGNsZWFubHkgd2l0aCB0aGUgYWxsb2MvdW5hbGxvYworICogb3BlcmF0aW9ucyBwZXJmb3JtZWQgaW4gdGhlIHNlbmQgcGF0aC4gIEFzIHRoZSBzZW5kZXIgYWxsb2NzIGFuZCBwb3RlbnRpYWxseQorICogdW5hbGxvY3MgdGhlIG5leHQgZnJlZSBlbnRyeSBpbiB0aGUgcmluZyBpdCBkb2Vzbid0IGFsdGVyIHdoaWNoIGlzCisgKiB0aGUgbmV4dCB0byBiZSBmcmVlZCwgd2hpY2ggaXMgd2hhdCB0aGlzIGlzIGNvbmNlcm5lZCB3aXRoLgorICovCit2b2lkIHJkc19pYl9zZW5kX2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kOworCXUzMiBjb21wbGV0ZWQ7CisJdTMyIG9sZGVzdDsKKwl1MzIgaSA9IDA7CisJaW50IHJldDsKKworCXJkc2RlYnVnKCJjcSAlcCBjb25uICVwXG4iLCBjcSwgY29ubik7CisJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X2NxX2NhbGwpOworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CisJCXJkc2RlYnVnKCJ3YyB3cl9pZCAweCVsbHggc3RhdHVzICV1IGJ5dGVfbGVuICV1IGltbV9kYXRhICV1XG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd2Mud3JfaWQsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4sCisJCQkgYmUzMl90b19jcHUod2MuZXguaW1tX2RhdGEpKTsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X2NxX2V2ZW50KTsKKworCQlpZiAod2Mud3JfaWQgPT0gUkRTX0lCX0FDS19XUl9JRCkgeworCQkJaWYgKGljLT5pX2Fja19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc3RhbGxlZCk7CisJCQlyZHNfaWJfYWNrX3NlbmRfY29tcGxldGUoaWMpOworCQkJY29udGludWU7CisJCX0KKworCQlvbGRlc3QgPSByZHNfaWJfcmluZ19vbGRlc3QoJmljLT5pX3NlbmRfcmluZyk7CisKKwkJY29tcGxldGVkID0gcmRzX2liX3JpbmdfY29tcGxldGVkKCZpYy0+aV9zZW5kX3JpbmcsIHdjLndyX2lkLCBvbGRlc3QpOworCisJCWZvciAoaSA9IDA7IGkgPCBjb21wbGV0ZWQ7IGkrKykgeworCQkJc2VuZCA9ICZpYy0+aV9zZW5kc1tvbGRlc3RdOworCisJCQkvKiBJbiB0aGUgZXJyb3IgY2FzZSwgd2Mub3Bjb2RlIHNvbWV0aW1lcyBjb250YWlucyBnYXJiYWdlICovCisJCQlzd2l0Y2ggKHNlbmQtPnNfd3Iub3Bjb2RlKSB7CisJCQljYXNlIElCX1dSX1NFTkQ6CisJCQkJaWYgKHNlbmQtPnNfcm0pCisJCQkJCXJkc19pYl9zZW5kX3VubWFwX3JtKGljLCBzZW5kLCB3Yy5zdGF0dXMpOworCQkJCWJyZWFrOworCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJCQkJLyogTm90aGluZyB0byBiZSBkb25lIC0gdGhlIFNHIGxpc3Qgd2lsbCBiZSB1bm1hcHBlZAorCQkJCSAqIHdoZW4gdGhlIFNFTkQgY29tcGxldGVzLiAqLworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCQkJCSJSRFMvSUI6ICVzOiB1bmV4cGVjdGVkIG9wY29kZSAweCV4IGluIFdSIVxuIiwKKwkJCQkJCV9fZnVuY19fLCBzZW5kLT5zX3dyLm9wY29kZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXNlbmQtPnNfd3Iub3Bjb2RlID0gMHhkZWFkOworCQkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJCWlmIChzZW5kLT5zX3F1ZXVlZCArIEhaLzIgPCBqaWZmaWVzKQorCQkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9zdGFsbGVkKTsKKworCQkJLyogSWYgYSBSRE1BIG9wZXJhdGlvbiBwcm9kdWNlZCBhbiBlcnJvciwgc2lnbmFsIHRoaXMgcmlnaHQKKwkJCSAqIGF3YXkuIElmIHdlIGRvbid0LCB0aGUgc3Vic2VxdWVudCBTRU5EIHRoYXQgZ29lcyB3aXRoIHRoaXMKKwkJCSAqIFJETUEgd2lsbCBiZSBjYW5jZWxlZCB3aXRoIEVSUl9XRkxVU0gsIGFuZCB0aGUgYXBwbGljYXRpb24KKwkJCSAqIG5ldmVyIGxlYXJuIHRoYXQgdGhlIFJETUEgZmFpbGVkLiAqLworCQkJaWYgKHVubGlrZWx5KHdjLnN0YXR1cyA9PSBJQl9XQ19SRU1fQUNDRVNTX0VSUiAmJiBzZW5kLT5zX29wKSkgeworCQkJCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwkJCQlybSA9IHJkc19zZW5kX2dldF9tZXNzYWdlKGNvbm4sIHNlbmQtPnNfb3ApOworCQkJCWlmIChybSkKKwkJCQkJcmRzX2liX3NlbmRfcmRtYV9jb21wbGV0ZShybSwgd2Muc3RhdHVzKTsKKwkJCX0KKworCQkJb2xkZXN0ID0gKG9sZGVzdCArIDEpICUgaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJCX0KKworCQlyZHNfaWJfcmluZ19mcmVlKCZpYy0+aV9zZW5kX3JpbmcsIGNvbXBsZXRlZCk7CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykKKwkJIHx8IHRlc3RfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpKQorCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKworCQkvKiBXZSBleHBlY3QgZXJyb3JzIGFzIHRoZSBxcCBpcyBkcmFpbmVkIGR1cmluZyBzaHV0ZG93biAqLworCQlpZiAod2Muc3RhdHVzICE9IElCX1dDX1NVQ0NFU1MgJiYgcmRzX2Nvbm5fdXAoY29ubikpIHsKKwkJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sCisJCQkJInNlbmQgY29tcGxldGlvbiBvbiAlcEk0ICIKKwkJCQkiaGFkIHN0YXR1cyAldSwgZGlzY29ubmVjdGluZyBhbmQgcmVjb25uZWN0aW5nXG4iLAorCQkJCSZjb25uLT5jX2ZhZGRyLCB3Yy5zdGF0dXMpOworCQl9CisJfQorfQorCisvKgorICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiBmb3IgYWxsb2NhdGluZyBjcmVkaXRzIHdoZW4gc2VuZGluZworICogbWVzc2FnZXMuCisgKgorICogQ29uY2VwdHVhbGx5LCB3ZSBoYXZlIHR3byBjb3VudGVyczoKKyAqICAtCXNlbmQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UncmUgYWxsb3dlZAorICoJdG8gc3VibWl0IHdpdGhvdXQgb3ZlcnJ1bmluZyB0aGUgcmVjaWV2ZXIncyBxdWV1ZS4gRm9yCisgKgllYWNoIFNFTkQgV1Igd2UgcG9zdCwgd2UgZGVjcmVtZW50IHRoaXMgYnkgb25lLgorICoKKyAqICAtCXBvc3RlZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSByZWNlbnRseQorICoJcG9zdGVkIHRvIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGlzIHZhbHVlIGlzIHRyYW5zZmVycmVkCisgKgl0byB0aGUgcGVlciBhcyBhICJjcmVkaXQgdXBkYXRlIiBpbiBhIFJEUyBoZWFkZXIgZmllbGQuCisgKglFdmVyeSB0aW1lIHdlIHRyYW5zbWl0IGNyZWRpdHMgdG8gdGhlIHBlZXIsIHdlIHN1YnRyYWN0CisgKgl0aGUgYW1vdW50IG9mIHRyYW5zZmVycmVkIGNyZWRpdHMgZnJvbSB0aGlzIGNvdW50ZXIuCisgKgorICogSXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgYXZvaWQgc2l0dWF0aW9ucyB3aGVyZSBib3RoIHNpZGVzIGhhdmUKKyAqIGV4aGF1c3RlZCB0aGVpciBzZW5kIGNyZWRpdHMsIGFuZCBhcmUgdW5hYmxlIHRvIHNlbmQgbmV3IGNyZWRpdHMKKyAqIHRvIHRoZSBwZWVyLiBXZSBhY2hpZXZlIHRoaXMgYnkgcmVxdWlyaW5nIHRoYXQgd2Ugc2VuZCBhdCBsZWFzdAorICogb25lIGNyZWRpdCB1cGRhdGUgdG8gdGhlIHBlZXIgYmVmb3JlIGV4aGF1c3Rpbmcgb3VyIGNyZWRpdHMuCisgKiBXaGVuIG5ldyBjcmVkaXRzIGFycml2ZSwgd2Ugc3VidHJhY3Qgb25lIGNyZWRpdCB0aGF0IGlzIHdpdGhoZWxkCisgKiB1bnRpbCB3ZSd2ZSBwb3N0ZWQgbmV3IGJ1ZmZlcnMgYW5kIGFyZSByZWFkeSB0byB0cmFuc21pdCB0aGVzZQorICogY3JlZGl0cyAoc2VlIHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzIGJlbG93KS4KKyAqCisgKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXQKKyAqIGdyYWJzIGNfc2VuZF9sb2NrIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuCisgKiBIb3dldmVyLCB0aGUgQUNLIHNlbmRpbmcgY29kZSBpcyBpbmRlcGVuZGVudCBhbmQgY2FuIHJhY2Ugd2l0aAorICogbWVzc2FnZSBTRU5Ecy4KKyAqCisgKiBJbiB0aGUgc2VuZCBwYXRoLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY291bnRlcnMgZm9yIHNlbmQgY3JlZGl0cworICogYW5kIHRoZSBjb3VudGVyIG9mIHBvc3RlZCBidWZmZXJzIGF0b21pY2FsbHkgLSB3aGVuIHdlIHVzZSB0aGUKKyAqIGxhc3QgYXZhaWxhYmxlIGNyZWRpdCwgd2UgY2Fubm90IGFsbG93IGFub3RoZXIgdGhyZWFkIHRvIHJhY2UgdXMKKyAqIGFuZCBncmFiIHRoZSBwb3N0ZWQgY3JlZGl0cyBjb3VudGVyLiAgSGVuY2UsIHdlIGhhdmUgdG8gdXNlIGEKKyAqIHNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIGNyZWRpdCBjb3VudGVyLCBvciB1c2UgYXRvbWljcy4KKyAqCisgKiBTcGlubG9ja3Mgc2hhcmVkIGJldHdlZW4gdGhlIHNlbmQgYW5kIHRoZSByZWNlaXZlIHBhdGggYXJlIGJhZCwKKyAqIGJlY2F1c2UgdGhleSBjcmVhdGUgdW5uZWNlc3NhcnkgZGVsYXlzLiBBbiBlYXJseSBpbXBsZW1lbnRhdGlvbgorICogdXNpbmcgYSBzcGlubG9jayBzaG93ZWQgYSA1JSBkZWdyYWRhdGlvbiBpbiB0aHJvdWdocHV0IGF0IHNvbWUKKyAqIGxvYWRzLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIHNwaW5sb2NrcyBjb21wbGV0ZWx5LCBwdXR0aW5nIGJvdGgKKyAqIGNvdW50ZXJzIGludG8gYSBzaW5nbGUgYXRvbWljLCBhbmQgdXBkYXRpbmcgdGhhdCBhdG9taWMgdXNpbmcKKyAqIGF0b21pY19hZGQgKGluIHRoZSByZWNlaXZlIHBhdGgsIHdoZW4gcmVjZWl2aW5nIGZyZXNoIGNyZWRpdHMpLAorICogYW5kIHVzaW5nIGF0b21pY19jbXB4Y2hnIHdoZW4gdXBkYXRpbmcgdGhlIHR3byBjb3VudGVycy4KKyAqLworaW50IHJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJICAgICB1MzIgd2FudGVkLCB1MzIgKmFkdl9jcmVkaXRzLCBpbnQgbmVlZF9wb3N0ZWQpCit7CisJdW5zaWduZWQgaW50IGF2YWlsLCBwb3N0ZWQsIGdvdCA9IDAsIGFkdmVydGlzZTsKKwlsb25nIG9sZHZhbCwgbmV3dmFsOworCisJKmFkdl9jcmVkaXRzID0gMDsKKwlpZiAoIWljLT5pX2Zsb3djdGwpCisJCXJldHVybiB3YW50ZWQ7CisKK3RyeV9hZ2FpbjoKKwlhZHZlcnRpc2UgPSAwOworCW9sZHZhbCA9IG5ld3ZhbCA9IGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKTsKKwlwb3N0ZWQgPSBJQl9HRVRfUE9TVF9DUkVESVRTKG9sZHZhbCk7CisJYXZhaWwgPSBJQl9HRVRfU0VORF9DUkVESVRTKG9sZHZhbCk7CisKKwlyZHNkZWJ1ZygicmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKCV1KTogY3JlZGl0cz0ldSBwb3N0ZWQ9JXVcbiIsCisJCQl3YW50ZWQsIGF2YWlsLCBwb3N0ZWQpOworCisJLyogVGhlIGxhc3QgY3JlZGl0IG11c3QgYmUgdXNlZCB0byBzZW5kIGEgY3JlZGl0IHVwZGF0ZS4gKi8KKwlpZiAoYXZhaWwgJiYgIXBvc3RlZCkKKwkJYXZhaWwtLTsKKworCWlmIChhdmFpbCA8IHdhbnRlZCkgeworCQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpYy0+aV9jbV9pZC0+Y29udGV4dDsKKworCQkvKiBPb3BzLCB0aGVyZSBhcmVuJ3QgdGhhdCBtYW55IGNyZWRpdHMgbGVmdCEgKi8KKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCWdvdCA9IGF2YWlsOworCX0gZWxzZSB7CisJCS8qIFNvbWV0aW1lcyB5b3UgZ2V0IHdoYXQgeW91IHdhbnQsIGxhbGFsYS4gKi8KKwkJZ290ID0gd2FudGVkOworCX0KKwluZXd2YWwgLT0gSUJfU0VUX1NFTkRfQ1JFRElUUyhnb3QpOworCisJLyoKKwkgKiBJZiBuZWVkX3Bvc3RlZCBpcyBub24temVybywgdGhlbiB0aGUgY2FsbGVyIHdhbnRzCisJICogdGhlIHBvc3RlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IHNlbmQgY3JlZGl0cyBhcmUKKwkgKiBhdmFpbGFibGUuCisJICovCisJaWYgKHBvc3RlZCAmJiAoZ290IHx8IG5lZWRfcG9zdGVkKSkgeworCQlhZHZlcnRpc2UgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBvc3RlZCwgUkRTX01BWF9BRFZfQ1JFRElUKTsKKwkJbmV3dmFsIC09IElCX1NFVF9QT1NUX0NSRURJVFMoYWR2ZXJ0aXNlKTsKKwl9CisKKwkvKiBGaW5hbGx5IGJpbGwgZXZlcnl0aGluZyAqLworCWlmIChhdG9taWNfY21weGNoZygmaWMtPmlfY3JlZGl0cywgb2xkdmFsLCBuZXd2YWwpICE9IG9sZHZhbCkKKwkJZ290byB0cnlfYWdhaW47CisKKwkqYWR2X2NyZWRpdHMgPSBhZHZlcnRpc2U7CisJcmV0dXJuIGdvdDsKK30KKwordm9pZCByZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBjcmVkaXRzKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKGNyZWRpdHMgPT0gMCkKKwkJcmV0dXJuOworCisJcmRzZGVidWcoInJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKCV1KTogY3VycmVudD0ldSVzXG4iLAorCQkJY3JlZGl0cywKKwkJCUlCX0dFVF9TRU5EX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKSwKKwkJCXRlc3RfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSA/ICIsIGxsX3NlbmRfZnVsbCIgOiAiIik7CisKKwlhdG9taWNfYWRkKElCX1NFVF9TRU5EX0NSRURJVFMoY3JlZGl0cyksICZpYy0+aV9jcmVkaXRzKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKworCVdBUk5fT04oSUJfR0VUX1NFTkRfQ1JFRElUUyhjcmVkaXRzKSA+PSAxNjM4NCk7CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfY3JlZGl0X3VwZGF0ZXMpOworfQorCit2b2lkIHJkc19pYl9hZHZlcnRpc2VfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBwb3N0ZWQpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAocG9zdGVkID09IDApCisJCXJldHVybjsKKworCWF0b21pY19hZGQoSUJfU0VUX1BPU1RfQ1JFRElUUyhwb3N0ZWQpLCAmaWMtPmlfY3JlZGl0cyk7CisKKwkvKiBEZWNpZGUgd2hldGhlciB0byBzZW5kIGFuIHVwZGF0ZSB0byB0aGUgcGVlciBub3cuCisJICogSWYgd2Ugd291bGQgc2VuZCBhIGNyZWRpdCB1cGRhdGUgZm9yIGV2ZXJ5IHNpbmdsZSBidWZmZXIgd2UKKwkgKiBwb3N0LCB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhbiBBQ0sgc3Rvcm0gKEFDSyBhcnJpdmVzLAorCSAqIGNvbnN1bWVzIGJ1ZmZlciwgd2UgcmVmaWxsIHRoZSByaW5nLCBzZW5kIEFDSyB0byByZW1vdGUKKwkgKiBhZHZlcnRpc2luZyB0aGUgbmV3bHkgcG9zdGVkIGJ1ZmZlci4uLiBhZCBpbmYpCisJICoKKwkgKiBQZXJmb3JtYW5jZSBwcmV0dHkgbXVjaCBkZXBlbmRzIG9uIGhvdyBvZnRlbiB3ZSBzZW5kCisJICogY3JlZGl0IHVwZGF0ZXMgLSB0b28gZnJlcXVlbnQgdXBkYXRlcyBtZWFuIGxvdHMgb2YgQUNLcy4KKwkgKiBUb28gaW5mcmVxdWVudCB1cGRhdGVzLCBhbmQgdGhlIHBlZXIgd2lsbCBydW4gb3V0IG9mCisJICogY3JlZGl0cyBhbmQgaGFzIHRvIHRocm90dGxlLgorCSAqIEZvciB0aGUgdGltZSBiZWluZywgMTYgc2VlbXMgdG8gYmUgYSBnb29kIGNvbXByb21pc2UuCisJICovCisJaWYgKElCX0dFVF9QT1NUX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKSA+PSAxNikKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityZHNfaWJfeG1pdF9wb3B1bGF0ZV93cihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCwgdW5zaWduZWQgaW50IHBvcywKKwkJdW5zaWduZWQgbG9uZyBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCWludCBzZW5kX2ZsYWdzKQoreworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCVdBUk5fT04ocG9zICE9IHNlbmQgLSBpYy0+aV9zZW5kcyk7CisKKwlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBzZW5kX2ZsYWdzOworCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKKwlzZW5kLT5zX3dyLm51bV9zZ2UgPSAyOworCXNlbmQtPnNfd3IubmV4dCA9IE5VTEw7CisJc2VuZC0+c19xdWV1ZWQgPSBqaWZmaWVzOworCXNlbmQtPnNfb3AgPSBOVUxMOworCisJaWYgKGxlbmd0aCAhPSAwKSB7CisJCXNnZSA9IHJkc19pYl9kYXRhX3NnZShpYywgc2VuZC0+c19zZ2UpOworCQlzZ2UtPmFkZHIgPSBidWZmZXI7CisJCXNnZS0+bGVuZ3RoID0gbGVuZ3RoOworCQlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCQlzZ2UgPSByZHNfaWJfaGVhZGVyX3NnZShpYywgc2VuZC0+c19zZ2UpOworCX0gZWxzZSB7CisJCS8qIFdlJ3JlIHNlbmRpbmcgYSBwYWNrZXQgd2l0aCBubyBwYXlsb2FkLiBUaGVyZSBpcyBvbmx5CisJCSAqIG9uZSBTR0UgKi8KKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2dlID0gJnNlbmQtPnNfc2dlWzBdOworCX0KKworCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAocG9zICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworfQorCisvKgorICogVGhpcyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIG1lc3NhZ2UuICBUaGUgZmlyc3QgdGltZQorICogd2Ugc2VlIGEgbWVzc2FnZSB3ZSBtYXAgaXRzIHNjYXR0ZXJsaXN0IGludG8gdGhlIElCIGRldmljZSBzbyB0aGF0CisgKiB3ZSBjYW4gcHJvdmlkZSB0aGF0IG1hcHBlZCBhZGRyZXNzIHRvIHRoZSBJQiBzY2F0dGVyIGdhdGhlciBlbnRyaWVzCisgKiBpbiB0aGUgSUIgd29yayByZXF1ZXN0cy4gIFdlIHRyYW5zbGF0ZSB0aGUgc2NhdHRlcmxpc3QgaW50byBhIHNlcmllcworICogb2Ygd29yayByZXF1ZXN0cyB0aGF0IGZyYWdtZW50IHRoZSBtZXNzYWdlLiAgVGhlc2Ugd29yayByZXF1ZXN0cyBjb21wbGV0ZQorICogaW4gb3JkZXIgc28gd2UgcGFzcyBvd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UgdG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlcgorICogb25jZSB3ZSBzZW5kIHRoZSBmaW5hbCBmcmFnbWVudC4KKyAqCisgKiBUaGUgUkRTIGNvcmUgdXNlcyB0aGUgY19zZW5kX2xvY2sgdG8gb25seSBlbnRlciB0aGlzIGZ1bmN0aW9uIG9uY2UKKyAqIHBlciBjb25uZWN0aW9uLiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHR4IHJpbmcgYWxsb2MvdW5hbGxvYyBwYWlycworICogZG9uJ3QgZ2V0IG91dCBvZiBzeW5jIGFuZCBjb25mdXNlIHRoZSByaW5nLgorICovCitpbnQgcmRzX2liX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQl1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQgPSBOVUxMOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpmaXJzdDsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqcHJldjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKKwl1MzIgcG9zOworCXUzMiBpOworCXUzMiB3b3JrX2FsbG9jOworCXUzMiBjcmVkaXRfYWxsb2M7CisJdTMyIHBvc3RlZDsKKwl1MzIgYWR2X2NyZWRpdHMgPSAwOworCWludCBzZW5kX2ZsYWdzID0gMDsKKwlpbnQgc2VudDsKKwlpbnQgcmV0OworCWludCBmbG93X2NvbnRyb2xsZWQgPSAwOworCisJQlVHX09OKG9mZiAlIFJEU19GUkFHX1NJWkUpOworCUJVR19PTihoZHJfb2ZmICE9IDAgJiYgaGRyX29mZiAhPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCS8qIEZJWE1FIHdlIG1heSBvdmVyYWxsb2NhdGUgaGVyZSAqLworCWlmIChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pID09IDApCisJCWkgPSAxOworCWVsc2UKKwkJaSA9IGNlaWwoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSwgUkRTX0ZSQUdfU0laRSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2liX3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQlzZXRfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKTsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3JpbmdfZnVsbCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNyZWRpdF9hbGxvYyA9IHdvcmtfYWxsb2M7CisJaWYgKGljLT5pX2Zsb3djdGwpIHsKKwkJY3JlZGl0X2FsbG9jID0gcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKGljLCB3b3JrX2FsbG9jLCAmcG9zdGVkLCAwKTsKKwkJYWR2X2NyZWRpdHMgKz0gcG9zdGVkOworCQlpZiAoY3JlZGl0X2FsbG9jIDwgd29ya19hbGxvYykgeworCQkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gY3JlZGl0X2FsbG9jKTsKKwkJCXdvcmtfYWxsb2MgPSBjcmVkaXRfYWxsb2M7CisJCQlmbG93X2NvbnRyb2xsZWQrKzsKKwkJfQorCQlpZiAod29ya19hbGxvYyA9PSAwKSB7CisJCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3Rocm90dGxlKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIG1hcCB0aGUgbWVzc2FnZSB0aGUgZmlyc3QgdGltZSB3ZSBzZWUgaXQgKi8KKwlpZiAoaWMtPmlfcm0gPT0gTlVMTCkgeworCQkvKgorCQlwcmludGsoS0VSTl9OT1RJQ0UgInJkc19pYl94bWl0IHByZXAgbXNnIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2Rwb3J0KSwKKwkJCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncywKKwkJCQliZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pKTsKKwkJICAgKi8KKwkJaWYgKHJtLT5tX25lbnRzKSB7CisJCQlybS0+bV9jb3VudCA9IGliX2RtYV9tYXBfc2coZGV2LAorCQkJCQkgcm0tPm1fc2csIHJtLT5tX25lbnRzLCBETUFfVE9fREVWSUNFKTsKKwkJCXJkc2RlYnVnKCJpYyAlcCBtYXBwaW5nIHJtICVwOiAlZFxuIiwgaWMsIHJtLCBybS0+bV9jb3VudCk7CisJCQlpZiAocm0tPm1fY291bnQgPT0gMCkgeworCQkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9zZ19tYXBwaW5nX2ZhaWx1cmUpOworCQkJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQkJcmV0ID0gLUVOT01FTTsgLyogWFhYID8gKi8KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJtLT5tX2NvdW50ID0gMDsKKwkJfQorCisJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CisJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisJCWljLT5pX3JtID0gcm07CisKKwkJLyogRmluYWxpemUgdGhlIGhlYWRlciAqLworCQlpZiAodGVzdF9iaXQoUkRTX01TR19BQ0tfUkVRVUlSRUQsICZybS0+bV9mbGFncykpCisJCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncyB8PSBSRFNfRkxBR19BQ0tfUkVRVUlSRUQ7CisJCWlmICh0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsICZybS0+bV9mbGFncykpCisJCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncyB8PSBSRFNfRkxBR19SRVRSQU5TTUlUVEVEOworCisJCS8qIElmIGl0IGhhcyBhIFJETUEgb3AsIHRlbGwgdGhlIHBlZXIgd2UgZGlkIGl0LiBUaGlzIGlzCisJCSAqIHVzZWQgYnkgdGhlIHBlZXIgdG8gcmVsZWFzZSB1c2Utb25jZSBSRE1BIE1Scy4gKi8KKwkJaWYgKHJtLT5tX3JkbWFfb3ApIHsKKwkJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hIGV4dF9oZHI7CisKKwkJCWV4dF9oZHIuaF9yZG1hX3JrZXkgPSBjcHVfdG9fYmUzMihybS0+bV9yZG1hX29wLT5yX2tleSk7CisJCQlyZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKCZybS0+bV9pbmMuaV9oZHIsCisJCQkJCVJEU19FWFRIRFJfUkRNQSwgJmV4dF9oZHIsIHNpemVvZihleHRfaGRyKSk7CisJCX0KKwkJaWYgKHJtLT5tX3JkbWFfY29va2llKSB7CisJCQlyZHNfbWVzc2FnZV9hZGRfcmRtYV9kZXN0X2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlyZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKSwKKwkJCQkJcmRzX3JkbWFfY29va2llX29mZnNldChybS0+bV9yZG1hX2Nvb2tpZSkpOworCQl9CisKKwkJLyogTm90ZSAtIHJkc19pYl9waWdneWJfYWNrIGNsZWFycyB0aGUgQUNLX1JFUVVJUkVEIGJpdCwgc28KKwkJICogd2Ugc2hvdWxkIG5vdCBkbyB0aGlzIHVubGVzcyB3ZSBoYXZlIGEgY2hhbmNlIG9mIGF0IGxlYXN0CisJCSAqIHN0aWNraW5nIHRoZSBoZWFkZXIgaW50byB0aGUgc2VuZCByaW5nLiBXaGljaCBpcyB3aHkgd2UKKwkJICogc2hvdWxkIGNhbGwgcmRzX2liX3JpbmdfYWxsb2MgZmlyc3QuICovCisJCXJtLT5tX2luYy5pX2hkci5oX2FjayA9IGNwdV90b19iZTY0KHJkc19pYl9waWdneWJfYWNrKGljKSk7CisJCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oJnJtLT5tX2luYy5pX2hkcik7CisKKwkJLyoKKwkJICogVXBkYXRlIGFkdl9jcmVkaXRzIHNpbmNlIHdlIHJlc2V0IHRoZSBBQ0tfUkVRVUlSRUQgYml0LgorCQkgKi8KKwkJcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKGljLCAwLCAmcG9zdGVkLCAxKTsKKwkJYWR2X2NyZWRpdHMgKz0gcG9zdGVkOworCQlCVUdfT04oYWR2X2NyZWRpdHMgPiAyNTUpOworCX0gZWxzZSBpZiAoaWMtPmlfcm0gIT0gcm0pCisJCUJVRygpOworCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWZpcnN0ID0gc2VuZDsKKwlwcmV2ID0gTlVMTDsKKwlzY2F0ID0gJnJtLT5tX3NnW3NnXTsKKwlzZW50ID0gMDsKKwlpID0gMDsKKworCS8qIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBwdXQgYSBmZW5jZSBiZXR3ZWVuIGFuIFJETUEKKwkgKiBSRUFEIGFuZCB0aGUgZm9sbG93aW5nIFNFTkQuCisJICogV2UgY291bGQgZWl0aGVyIGRvIHRoaXMgYWxsIHRoZSB0aW1lCisJICogb3Igd2hlbiByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIFJpZ2h0IG5vdywgd2UgbGV0CisJICogdGhlIGFwcGxpY2F0aW9uIGNob29zZS4KKwkgKi8KKwlpZiAocm0tPm1fcmRtYV9vcCAmJiBybS0+bV9yZG1hX29wLT5yX2ZlbmNlKQorCQlzZW5kX2ZsYWdzID0gSUJfU0VORF9GRU5DRTsKKworCS8qCisJICogV2UgY291bGQgYmUgY29weWluZyB0aGUgaGVhZGVyIGludG8gdGhlIHVudXNlZCB0YWlsIG9mIHRoZSBwYWdlLgorCSAqIFRoYXQgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgd2hlbiB0aG9zZSBwYWdlcyBtaWdodAorCSAqIGJlIG1hcHBlZCB1c2Vyc3BhY2UgcGFnZXMgb3IgcGFnZSBjYWNoZSBwYWdlcy4gIFNvIGluc3RlYWQgd2UgYWx3YXlzCisJICogdXNlIGEgc2Vjb25kIHNnZSBhbmQgb3VyIGxvbmctbGl2ZWQgcmluZyBvZiBtYXBwZWQgaGVhZGVycy4gIFdlIHNlbmQKKwkgKiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhIHNvIHRoYXQgdGhlIGRhdGEgcGF5bG9hZCBjYW4gYmUgYWxpZ25lZCBvbgorCSAqIHRoZSByZWNlaXZlci4KKwkgKi8KKworCS8qIGhhbmRsZSBhIDAtbGVuIG1lc3NhZ2UgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKSB7CisJCXJkc19pYl94bWl0X3BvcHVsYXRlX3dyKGljLCBzZW5kLCBwb3MsIDAsIDAsIHNlbmRfZmxhZ3MpOworCQlnb3RvIGFkZF9oZWFkZXI7CisJfQorCisJLyogaWYgdGhlcmUncyBkYXRhIHJlZmVyZW5jZSBpdCB3aXRoIGEgY2hhaW4gb2Ygd29yayByZXFzICovCisJZm9yICg7IGkgPCB3b3JrX2FsbG9jICYmIHNjYXQgIT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBsZW47CisKKwkJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCisJCWxlbiA9IG1pbihSRFNfRlJBR19TSVpFLCBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkgLSBvZmYpOworCQlyZHNfaWJfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgc2NhdCkgKyBvZmYsIGxlbiwKKwkJCQlzZW5kX2ZsYWdzKTsKKworCQkvKgorCQkgKiBXZSB3YW50IHRvIGRlbGF5IHNpZ25hbGluZyBjb21wbGV0aW9ucyBqdXN0IGVub3VnaCB0byBnZXQKKwkJICogdGhlIGJhdGNoaW5nIGJlbmVmaXRzIGJ1dCBub3Qgc28gbXVjaCB0aGF0IHdlIGNyZWF0ZSBkZWFkIHRpbWUKKwkJICogb24gdGhlIHdpcmUuCisJCSAqLworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF93cnMtLSA9PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzIC09IGxlbjsKKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPD0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJfQorCisJCS8qCisJCSAqIEFsd2F5cyBzaWduYWwgdGhlIGxhc3Qgb25lIGlmIHdlJ3JlIHN0b3BwaW5nIGR1ZSB0byBmbG93IGNvbnRyb2wuCisJCSAqLworCQlpZiAoZmxvd19jb250cm9sbGVkICYmIGkgPT0gKHdvcmtfYWxsb2MtMSkpCisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCisJCXJkc2RlYnVnKCJzZW5kICVwIHdyICVwIG51bV9zZ2UgJXUgbmV4dCAlcFxuIiwgc2VuZCwKKwkJCSAmc2VuZC0+c193ciwgc2VuZC0+c193ci5udW1fc2dlLCBzZW5kLT5zX3dyLm5leHQpOworCisJCXNlbnQgKz0gbGVuOworCQlvZmYgKz0gbGVuOworCQlpZiAob2ZmID09IGliX3NnX2RtYV9sZW4oZGV2LCBzY2F0KSkgeworCQkJc2NhdCsrOworCQkJb2ZmID0gMDsKKwkJfQorCithZGRfaGVhZGVyOgorCQkvKiBUYWNrIG9uIHRoZSBoZWFkZXIgYWZ0ZXIgdGhlIGRhdGEuIFRoZSBoZWFkZXIgU0dFIHNob3VsZCBhbHJlYWR5CisJCSAqIGhhdmUgYmVlbiBzZXQgdXAgdG8gcG9pbnQgdG8gdGhlIHJpZ2h0IGhlYWRlciBidWZmZXIuICovCisJCW1lbWNweSgmaWMtPmlfc2VuZF9oZHJzW3Bvc10sICZybS0+bV9pbmMuaV9oZHIsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCisJCWlmICgwKSB7CisJCQlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmljLT5pX3NlbmRfaGRyc1twb3NdOworCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInNlbmQgV1IgZHBvcnQ9JXUgZmxhZ3M9MHgleCBsZW49JWRcbiIsCisJCQkJYmUxNl90b19jcHUoaGRyLT5oX2Rwb3J0KSwKKwkJCQloZHItPmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUoaGRyLT5oX2xlbikpOworCQl9CisJCWlmIChhZHZfY3JlZGl0cykgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJLyogYWRkIGNyZWRpdCBhbmQgcmVkbyB0aGUgaGVhZGVyIGNoZWNrc3VtICovCisJCQloZHItPmhfY3JlZGl0ID0gYWR2X2NyZWRpdHM7CisJCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKGhkcik7CisJCQlhZHZfY3JlZGl0cyA9IDA7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfY3JlZGl0X3VwZGF0ZXMpOworCQl9CisKKwkJaWYgKHByZXYpCisJCQlwcmV2LT5zX3dyLm5leHQgPSAmc2VuZC0+c193cjsKKwkJcHJldiA9IHNlbmQ7CisKKwkJcG9zID0gKHBvcyArIDEpICUgaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJfQorCisJLyogQWNjb3VudCB0aGUgUkRTIGhlYWRlciBpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIHNlbnQsIGJ1dCBqdXN0IG9uY2UuCisJICogVGhlIGNhbGxlciBoYXMgbm8gY29uY2VwdCBvZiBmcmFnbWVudGF0aW9uLiAqLworCWlmIChoZHJfb2ZmID09IDApCisJCXNlbnQgKz0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCS8qIGlmIHdlIGZpbmlzaGVkIHRoZSBtZXNzYWdlIHRoZW4gc2VuZCBjb21wbGV0aW9uIG93bnMgaXQgKi8KKwlpZiAoc2NhdCA9PSAmcm0tPm1fc2dbcm0tPm1fY291bnRdKSB7CisJCXByZXYtPnNfcm0gPSBpYy0+aV9ybTsKKwkJcHJldi0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJaWMtPmlfcm0gPSBOVUxMOworCX0KKworCWlmIChpIDwgd29ya19hbGxvYykgeworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBpKTsKKwkJd29ya19hbGxvYyA9IGk7CisJfQorCWlmIChpYy0+aV9mbG93Y3RsICYmIGkgPCBjcmVkaXRfYWxsb2MpCisJCXJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdF9hbGxvYyAtIGkpOworCisJLyogWFhYIG5lZWQgdG8gd29ycnkgYWJvdXQgZmFpbGVkX3dyIGFuZCBwYXJ0aWFsIHNlbmRzLiAqLworCWZhaWxlZF93ciA9ICZmaXJzdC0+c193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmZmlyc3QtPnNfd3IsICZmYWlsZWRfd3IpOworCXJkc2RlYnVnKCJpYyAlcCBmaXJzdCAlcCAod3IgJXApIHJldCAlZCB3ciAlcFxuIiwgaWMsCisJCSBmaXJzdCwgJmZpcnN0LT5zX3dyLCByZXQsIGZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBpYl9wb3N0X3NlbmQgdG8gJXBJNCAiCisJCSAgICAgICAicmV0dXJuZWQgJWRcbiIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlpZiAocHJldi0+c19ybSkgeworCQkJaWMtPmlfcm0gPSBwcmV2LT5zX3JtOworCQkJcHJldi0+c19ybSA9IE5VTEw7CisJCX0KKwkJLyogRmluZXNzZSB0aGlzIGxhdGVyICovCisJCUJVRygpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBzZW50Oworb3V0OgorCUJVR19PTihhZHZfY3JlZGl0cyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19pYl94bWl0X3JkbWEoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl1NjQgcmVtb3RlX2FkZHIgPSBvcC0+cl9yZW1vdGVfYWRkcjsKKwl1MzIgcG9zOworCXUzMiB3b3JrX2FsbG9jOworCXUzMiBpOworCXUzMiBqOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IG51bV9zZ2U7CisKKwlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pYl9jbGllbnQpOworCisJLyogbWFwIHRoZSBtZXNzYWdlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBpdCAqLworCWlmICghb3AtPnJfbWFwcGVkKSB7CisJCW9wLT5yX2NvdW50ID0gaWJfZG1hX21hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCQlvcC0+cl9zZywgb3AtPnJfbmVudHMsIChvcC0+cl93cml0ZSkgPworCQkJCQlETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJcmRzZGVidWcoImljICVwIG1hcHBpbmcgb3AgJXA6ICVkXG4iLCBpYywgb3AsIG9wLT5yX2NvdW50KTsKKwkJaWYgKG9wLT5yX2NvdW50ID09IDApIHsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9zZ19tYXBwaW5nX2ZhaWx1cmUpOworCQkJcmV0ID0gLUVOT01FTTsgLyogWFhYID8gKi8KKwkJCWdvdG8gb3V0OworCQl9CisKKwkJb3AtPnJfbWFwcGVkID0gMTsKKwl9CisKKwkvKgorCSAqIEluc3RlYWQgb2Yga25vd2luZyBob3cgdG8gcmV0dXJuIGEgcGFydGlhbCByZG1hIHJlYWQvd3JpdGUgd2UgaW5zaXN0IHRoYXQgdGhlcmUKKwkgKiBiZSBlbm91Z2ggd29yayByZXF1ZXN0cyB0byBzZW5kIHRoZSBlbnRpcmUgbWVzc2FnZS4KKwkgKi8KKwlpID0gY2VpbChvcC0+cl9jb3VudCwgcmRzX2liZGV2LT5tYXhfc2dlKTsKKworCXdvcmtfYWxsb2MgPSByZHNfaWJfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCBpLCAmcG9zKTsKKwlpZiAod29ya19hbGxvYyAhPSBpKSB7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisJZmlyc3QgPSBzZW5kOworCXByZXYgPSBOVUxMOworCXNjYXQgPSAmb3AtPnJfc2dbMF07CisJc2VudCA9IDA7CisJbnVtX3NnZSA9IG9wLT5yX2NvdW50OworCisJZm9yIChpID0gMDsgaSA8IHdvcmtfYWxsb2MgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBpKyspIHsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c19xdWV1ZWQgPSBqaWZmaWVzOworCQkvKgorCQkgKiBXZSB3YW50IHRvIGRlbGF5IHNpZ25hbGluZyBjb21wbGV0aW9ucyBqdXN0IGVub3VnaCB0byBnZXQKKwkJICogdGhlIGJhdGNoaW5nIGJlbmVmaXRzIGJ1dCBub3Qgc28gbXVjaCB0aGF0IHdlIGNyZWF0ZSBkZWFkIHRpbWUgb24gdGhlIHdpcmUuCisJCSAqLworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF93cnMtLSA9PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisJCX0KKworCQlzZW5kLT5zX3dyLm9wY29kZSA9IG9wLT5yX3dyaXRlID8gSUJfV1JfUkRNQV9XUklURSA6IElCX1dSX1JETUFfUkVBRDsKKwkJc2VuZC0+c193ci53ci5yZG1hLnJlbW90ZV9hZGRyID0gcmVtb3RlX2FkZHI7CisJCXNlbmQtPnNfd3Iud3IucmRtYS5ya2V5ID0gb3AtPnJfa2V5OworCQlzZW5kLT5zX29wID0gb3A7CisKKwkJaWYgKG51bV9zZ2UgPiByZHNfaWJkZXYtPm1heF9zZ2UpIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IHJkc19pYmRldi0+bWF4X3NnZTsKKwkJCW51bV9zZ2UgLT0gcmRzX2liZGV2LT5tYXhfc2dlOworCQl9IGVsc2UgeworCQkJc2VuZC0+c193ci5udW1fc2dlID0gbnVtX3NnZTsKKwkJfQorCisJCXNlbmQtPnNfd3IubmV4dCA9IE5VTEw7CisKKwkJaWYgKHByZXYpCisJCQlwcmV2LT5zX3dyLm5leHQgPSAmc2VuZC0+c193cjsKKworCQlmb3IgKGogPSAwOyBqIDwgc2VuZC0+c193ci5udW1fc2dlICYmIHNjYXQgIT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XTsgaisrKSB7CisJCQlsZW4gPSBpYl9zZ19kbWFfbGVuKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJc2VuZC0+c19zZ2Vbal0uYWRkciA9CisJCQkJIGliX3NnX2RtYV9hZGRyZXNzKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJc2VuZC0+c19zZ2Vbal0ubGVuZ3RoID0gbGVuOworCQkJc2VuZC0+c19zZ2Vbal0ubGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCQlzZW50ICs9IGxlbjsKKwkJCXJkc2RlYnVnKCJpYyAlcCBzZW50ICVkIHJlbW90ZV9hZGRyICVsbHVcbiIsIGljLCBzZW50LCByZW1vdGVfYWRkcik7CisKKwkJCXJlbW90ZV9hZGRyICs9IGxlbjsKKwkJCXNjYXQrKzsKKwkJfQorCisJCXJkc2RlYnVnKCJzZW5kICVwIHdyICVwIG51bV9zZ2UgJXUgbmV4dCAlcFxuIiwgc2VuZCwKKwkJCSZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJcHJldiA9IHNlbmQ7CisJCWlmICgrK3NlbmQgPT0gJmljLT5pX3NlbmRzW2ljLT5pX3NlbmRfcmluZy53X25yXSkKKwkJCXNlbmQgPSBpYy0+aV9zZW5kczsKKwl9CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XSkKKwkJcHJldi0+c193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWlmIChpIDwgd29ya19hbGxvYykgeworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBpKTsKKwkJd29ya19hbGxvYyA9IGk7CisJfQorCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IHJkbWEgaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHVubGlrZWx5KGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfcG9zdF9zZW5kKCkgcmM9JWQsIGJ1dCBmYWlsZWRfd3FlIHVwZGF0ZWQhXG4iLCByZXQpOworCQlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJfQorCisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl94bWl0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCS8qIFdlIG1heSBoYXZlIGEgcGVuZGluZyBBQ0sgb3Igd2luZG93IHVwZGF0ZSB3ZSB3ZXJlIHVuYWJsZQorCSAqIHRvIHNlbmQgcHJldmlvdXNseSAoZHVlIHRvIGZsb3cgY29udHJvbCkuIFRyeSBhZ2Fpbi4gKi8KKwlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9zdGF0cy5jIGIvbmV0L3Jkcy9pYl9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTNlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3N0YXRzLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3MsIHJkc19pYl9zdGF0cykgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdGF0aWMgY2hhciAqcmRzX2liX3N0YXRfbmFtZXNbXSA9IHsKKwkiaWJfY29ubmVjdF9yYWNlZCIsCisJImliX2xpc3Rlbl9jbG9zZWRfc3RhbGUiLAorCSJpYl90eF9jcV9jYWxsIiwKKwkiaWJfdHhfY3FfZXZlbnQiLAorCSJpYl90eF9yaW5nX2Z1bGwiLAorCSJpYl90eF90aHJvdHRsZSIsCisJImliX3R4X3NnX21hcHBpbmdfZmFpbHVyZSIsCisJImliX3R4X3N0YWxsZWQiLAorCSJpYl90eF9jcmVkaXRfdXBkYXRlcyIsCisJImliX3J4X2NxX2NhbGwiLAorCSJpYl9yeF9jcV9ldmVudCIsCisJImliX3J4X3JpbmdfZW1wdHkiLAorCSJpYl9yeF9yZWZpbGxfZnJvbV9jcSIsCisJImliX3J4X3JlZmlsbF9mcm9tX3RocmVhZCIsCisJImliX3J4X2FsbG9jX2xpbWl0IiwKKwkiaWJfcnhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpYl9hY2tfc2VudCIsCisJImliX2Fja19zZW5kX2ZhaWx1cmUiLAorCSJpYl9hY2tfc2VuZF9kZWxheWVkIiwKKwkiaWJfYWNrX3NlbmRfcGlnZ3liYWNrZWQiLAorCSJpYl9hY2tfcmVjZWl2ZWQiLAorCSJpYl9yZG1hX21yX2FsbG9jIiwKKwkiaWJfcmRtYV9tcl9mcmVlIiwKKwkiaWJfcmRtYV9tcl91c2VkIiwKKwkiaWJfcmRtYV9tcl9wb29sX2ZsdXNoIiwKKwkiaWJfcmRtYV9tcl9wb29sX3dhaXQiLAorCSJpYl9yZG1hX21yX3Bvb2xfZGVwbGV0ZWQiLAorfTsKKwordW5zaWduZWQgaW50IHJkc19pYl9zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYXZhaWwpCit7CisJc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzIHN0YXRzID0gezAsIH07CisJdWludDY0X3QgKnNyYzsKKwl1aW50NjRfdCAqc3VtOworCXNpemVfdCBpOworCWludCBjcHU7CisKKwlpZiAoYXZhaWwgPCBBUlJBWV9TSVpFKHJkc19pYl9zdGF0X25hbWVzKSkKKwkJZ290byBvdXQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzcmMgPSAodWludDY0X3QgKikmKHBlcl9jcHUocmRzX2liX3N0YXRzLCBjcHUpKTsKKwkJc3VtID0gKHVpbnQ2NF90ICopJnN0YXRzOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0YXRzKSAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKwkJCSooc3VtKyspICs9ICooc3JjKyspOworCX0KKworCXJkc19zdGF0c19pbmZvX2NvcHkoaXRlciwgKHVpbnQ2NF90ICopJnN0YXRzLCByZHNfaWJfc3RhdF9uYW1lcywKKwkJCSAgICBBUlJBWV9TSVpFKHJkc19pYl9zdGF0X25hbWVzKSk7CitvdXQ6CisJcmV0dXJuIEFSUkFZX1NJWkUocmRzX2liX3N0YXRfbmFtZXMpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9zeXNjdGwuYyBiL25ldC9yZHMvaWJfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg3ODMwZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfc3lzY3RsLmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgImliLmgiCisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmRzX2liX3N5c2N0bF9oZHI7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93ciA9IFJEU19JQl9ERUZBVUxUX1NFTkRfV1I7Cit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IgPSBSRFNfSUJfREVGQVVMVF9SRUNWX1dSOwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24gPSAoMTI4ICogMTAyNCAqIDEwMjQpIC8gUkRTX0ZSQUdfU0laRTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3dyX21pbiA9IDE7CisvKiBoYXJkd2FyZSB3aWxsIGZhaWwgQ1EgY3JlYXRpb24gbG9uZyBiZWZvcmUgdGhpcyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfd3JfbWF4ID0gKHUzMil+MDsKKwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnMgPSAxNjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyX21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9tYXggPSA2NDsKKwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlcyA9ICgxNiA8PCAyMCk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlc19taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4ID0gfjBVTDsKKwordW5zaWduZWQgaW50IHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sID0gMTsKKworY3RsX3RhYmxlIHJkc19pYl9zeXNjdGxfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3NlbmRfd3IiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93ciwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaWJfc3lzY3RsX21heF93cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3JlY3Zfd3IiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93ciwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaWJfc3lzY3RsX21heF93cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfd3IiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfdW5zaWduYWxlZF9ieXRlcyIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlc19tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3JlY3ZfYWxsb2NhdGlvbiIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24sCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAiZmxvd19jb250cm9sIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sLAorCQkubWF4bGVuCQk9IHNpemVvZihyZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsgLmN0bF9uYW1lID0gMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3BhdGggcmRzX2liX3N5c2N0bF9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJyZHMiLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJpYiIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKwordm9pZCByZHNfaWJfc3lzY3RsX2V4aXQodm9pZCkKK3sKKwlpZiAocmRzX2liX3N5c2N0bF9oZHIpCisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHJkc19pYl9zeXNjdGxfaGRyKTsKK30KKworaW50IF9faW5pdCByZHNfaWJfc3lzY3RsX2luaXQodm9pZCkKK3sKKwlyZHNfaWJfc3lzY3RsX2hkciA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhyZHNfaWJfc3lzY3RsX3BhdGgsIHJkc19pYl9zeXNjdGxfdGFibGUpOworCWlmIChyZHNfaWJfc3lzY3RsX2hkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaW5mby5jIGIvbmV0L3Jkcy9pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4ODU1MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaW5mby5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCisvKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgYSBnZXRzb2Nrb3B0KCkgY2FsbCB3aGljaCBjb3BpZXMgYSBzZXQgb2YgZml4ZWQKKyAqIHNpemVkIHN0cnVjdHMgaW50byBhIHVzZXItc3BlY2lmaWVkIGJ1ZmZlciBhcyBhIG1lYW5zIG9mIHByb3ZpZGluZworICogcmVhZC1vbmx5IGluZm9ybWF0aW9uIGFib3V0IFJEUy4KKyAqCisgKiBGb3IgYSBnaXZlbiBpbmZvcm1hdGlvbiBzb3VyY2UgdGhlcmUgYXJlIGEgZ2l2ZW4gbnVtYmVyIG9mIGZpeGVkIHNpemVkCisgKiBzdHJ1Y3RzIGF0IGEgZ2l2ZW4gdGltZS4gIFRoZSBzdHJ1Y3RzIGFyZSBvbmx5IGNvcGllZCBpZiB0aGUgdXNlci1zcGVjaWZpZWQKKyAqIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLiAgVGhlIGRlc3RpbmF0aW9uIHBhZ2VzIHRoYXQgbWFrZSB1cCB0aGUgYnVmZmVyCisgKiBhcmUgcGlubmVkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHkuCisgKgorICogVGhpcyBnaXZlcyB1cyB0aGUgZm9sbG93aW5nIGJlbmVmaXRzOgorICoKKyAqIC0gc2ltcGxlIGltcGxlbWVudGF0aW9uLCBubyBjb3B5ICJwb3NpdGlvbiIgYWNyb3NzIG11bHRpcGxlIGNhbGxzCisgKiAtIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgYW4gaW5mbyBzb3VyY2UKKyAqIC0gYXRvbWljIGNvcHkgd29ya3Mgd2VsbCB3aXRoIHdoYXRldmVyIGxvY2tpbmcgaW5mbyBzb3VyY2UgaGFzCisgKiAtIG9uZSBwb3J0YWJsZSB0b29sIHRvIGdldCByZHMgaW5mbyBhY3Jvc3MgaW1wbGVtZW50YXRpb25zCisgKiAtIGxvbmctbGl2ZWQgdG9vbCBjYW4gZ2V0IGluZm8gd2l0aG91dCBhbGxvY2F0aW5nCisgKgorICogYXQgdGhlIGZvbGxvd2luZyBjb3N0czoKKyAqCisgKiAtIGluZm8gc291cmNlIGNvcHkgbXVzdCBiZSBwaW5uZWQsIG1heSBiZSAibGFyZ2UiCisgKi8KKworc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXZvaWQgKmFkZHI7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19pbmZvX2xvY2spOworc3RhdGljIHJkc19pbmZvX2Z1bmMgcmRzX2luZm9fZnVuY3NbUkRTX0lORk9fTEFTVCAtIFJEU19JTkZPX0ZJUlNUICsgMV07CisKK3ZvaWQgcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhpbnQgb3B0bmFtZSwgcmRzX2luZm9fZnVuYyBmdW5jKQoreworCWludCBvZmZzZXQgPSBvcHRuYW1lIC0gUkRTX0lORk9fRklSU1Q7CisKKwlCVUdfT04ob3B0bmFtZSA8IFJEU19JTkZPX0ZJUlNUIHx8IG9wdG5hbWUgPiBSRFNfSU5GT19MQVNUKTsKKworCXNwaW5fbG9jaygmcmRzX2luZm9fbG9jayk7CisJQlVHX09OKHJkc19pbmZvX2Z1bmNzW29mZnNldF0gIT0gTlVMTCk7CisJcmRzX2luZm9fZnVuY3Nbb2Zmc2V0XSA9IGZ1bmM7CisJc3Bpbl91bmxvY2soJnJkc19pbmZvX2xvY2spOworfQorCit2b2lkIHJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhpbnQgb3B0bmFtZSwgcmRzX2luZm9fZnVuYyBmdW5jKQoreworCWludCBvZmZzZXQgPSBvcHRuYW1lIC0gUkRTX0lORk9fRklSU1Q7CisKKwlCVUdfT04ob3B0bmFtZSA8IFJEU19JTkZPX0ZJUlNUIHx8IG9wdG5hbWUgPiBSRFNfSU5GT19MQVNUKTsKKworCXNwaW5fbG9jaygmcmRzX2luZm9fbG9jayk7CisJQlVHX09OKHJkc19pbmZvX2Z1bmNzW29mZnNldF0gIT0gZnVuYyk7CisJcmRzX2luZm9fZnVuY3Nbb2Zmc2V0XSA9IE5VTEw7CisJc3Bpbl91bmxvY2soJnJkc19pbmZvX2xvY2spOworfQorCisvKgorICogVHlwaWNhbGx5IHdlIGhvbGQgYW4gYXRvbWljIGttYXAgYWNyb3NzIG11bHRpcGxlIHJkc19pbmZvX2NvcHkoKSBjYWxscworICogYmVjYXVzZSB0aGUga21hcCBpcyBzbyBleHBlbnNpdmUuICBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyBibG9ja2luZworICogb3BlcmF0aW9ucyB3aGlsZSBob2xkaW5nIHRoZSBtYXBwaW5nIGFuZCBhcyB0aGUgaXRlcmF0b3IgaXMgdG9ybiBkb3duLgorICovCit2b2lkIHJkc19pbmZvX2l0ZXJfdW5tYXAoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyKQoreworCWlmIChpdGVyLT5hZGRyICE9IE5VTEwpIHsKKwkJa3VubWFwX2F0b21pYyhpdGVyLT5hZGRyLCBLTV9VU0VSMCk7CisJCWl0ZXItPmFkZHIgPSBOVUxMOworCX0KK30KKworLyoKKyAqIGdldF91c2VyX3BhZ2VzKCkgY2FsbGVkIGZsdXNoX2RjYWNoZV9wYWdlKCkgb24gdGhlIHBhZ2VzIGZvciB1cy4KKyAqLwordm9pZCByZHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwgdm9pZCAqZGF0YSwKKwkJICAgdW5zaWduZWQgbG9uZyBieXRlcykKK3sKKwl1bnNpZ25lZCBsb25nIHRoaXM7CisKKwl3aGlsZSAoYnl0ZXMpIHsKKwkJaWYgKGl0ZXItPmFkZHIgPT0gTlVMTCkKKwkJCWl0ZXItPmFkZHIgPSBrbWFwX2F0b21pYygqaXRlci0+cGFnZXMsIEtNX1VTRVIwKTsKKworCQl0aGlzID0gbWluKGJ5dGVzLCBQQUdFX1NJWkUgLSBpdGVyLT5vZmZzZXQpOworCisJCXJkc2RlYnVnKCJwYWdlICVwIGFkZHIgJXAgb2Zmc2V0ICVsdSB0aGlzICVsdSBkYXRhICVwICIKKwkJCSAgImJ5dGVzICVsdVxuIiwgKml0ZXItPnBhZ2VzLCBpdGVyLT5hZGRyLAorCQkJICBpdGVyLT5vZmZzZXQsIHRoaXMsIGRhdGEsIGJ5dGVzKTsKKworCQltZW1jcHkoaXRlci0+YWRkciArIGl0ZXItPm9mZnNldCwgZGF0YSwgdGhpcyk7CisKKwkJZGF0YSArPSB0aGlzOworCQlieXRlcyAtPSB0aGlzOworCQlpdGVyLT5vZmZzZXQgKz0gdGhpczsKKworCQlpZiAoaXRlci0+b2Zmc2V0ID09IFBBR0VfU0laRSkgeworCQkJa3VubWFwX2F0b21pYyhpdGVyLT5hZGRyLCBLTV9VU0VSMCk7CisJCQlpdGVyLT5hZGRyID0gTlVMTDsKKwkJCWl0ZXItPm9mZnNldCA9IDA7CisJCQlpdGVyLT5wYWdlcysrOworCQl9CisJfQorfQorCisvKgorICogQG9wdHZhbCBwb2ludHMgdG8gdGhlIHVzZXJzcGFjZSBidWZmZXIgdGhhdCB0aGUgaW5mb3JtYXRpb24gc25hcHNob3QKKyAqIHdpbGwgYmUgY29waWVkIGludG8uCisgKgorICogQG9wdGxlbiBvbiBpbnB1dCBpcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIHVzZXJzcGFjZS4gIEBvcHRsZW4KKyAqIG9uIG91dHB1dCBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdGVkIHNuYXBzaG90IGluIGJ5dGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtZXJybm8gaWYgdGhlcmUgaXMgYSBmYWlsdXJlLCBwYXJ0aWN1bGFybHkgLUVOT1NQQworICogaWYgdGhlIGdpdmVuIHVzZXJzcGFjZSBidWZmZXIgd2FzIG5vdCBsYXJnZSBlbm91Z2ggdG8gZml0IHRoZSBzbmFwc2hvdC4KKyAqIE9uIHN1Y2Nlc3MgaXQgcmV0dXJucyB0aGUgcG9zaXRpdmUgbnVtYmVyIG9mIGJ5dGVzIG9mIGVhY2ggYXJyYXkgZWxlbWVudAorICogaW4gdGhlIHNuYXBzaG90LgorICovCitpbnQgcmRzX2luZm9fZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCWludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgaXRlcjsKKwlzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyBsZW5zOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBpOworCXJkc19pbmZvX2Z1bmMgZnVuYzsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBsZW47CisJaW50IHRvdGFsOworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjaGVjayBmb3IgYWxsIGtpbmRzIG9mIHdyYXBwaW5nIGFuZCB0aGUgbGlrZSAqLworCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpb3B0dmFsOworCWlmIChsZW4gPCAwIHx8IGxlbiArIFBBR0VfU0laRSAtIDEgPCBsZW4gfHwgc3RhcnQgKyBsZW4gPCBzdGFydCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBhIDAgbGVuIGNhbGwgaXMganVzdCB0cnlpbmcgdG8gcHJvYmUgaXRzIGxlbmd0aCAqLworCWlmIChsZW4gPT0gMCkKKwkJZ290byBjYWxsX2Z1bmM7CisKKwlucl9wYWdlcyA9IChQQUdFX0FMSUdOKHN0YXJ0ICsgbGVuKSAtIChzdGFydCAmIFBBR0VfTUFTSykpCisJCQk+PiBQQUdFX1NISUZUOworCisJcGFnZXMgPSBrbWFsbG9jKG5yX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAocGFnZXMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBzdGFydCwgbnJfcGFnZXMsIDEsIDAsCisJCQkgICAgIHBhZ2VzLCBOVUxMKTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWlmIChyZXQgIT0gbnJfcGFnZXMpIHsKKwkJaWYgKHJldCA+IDApCisJCQlucl9wYWdlcyA9IHJldDsKKwkJZWxzZQorCQkJbnJfcGFnZXMgPSAwOworCQlyZXQgPSAtRUFHQUlOOyAvKiBYWFggPyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygibGVuICVkIG5yX3BhZ2VzICVsdVxuIiwgbGVuLCBucl9wYWdlcyk7CisKK2NhbGxfZnVuYzoKKwlmdW5jID0gcmRzX2luZm9fZnVuY3Nbb3B0bmFtZSAtIFJEU19JTkZPX0ZJUlNUXTsKKwlpZiAoZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9QUk9UT09QVDsKKwkJZ290byBvdXQ7CisJfQorCisJaXRlci5wYWdlcyA9IHBhZ2VzOworCWl0ZXIuYWRkciA9IE5VTEw7CisJaXRlci5vZmZzZXQgPSBzdGFydCAmIChQQUdFX1NJWkUgLSAxKTsKKworCWZ1bmMoc29jaywgbGVuLCAmaXRlciwgJmxlbnMpOworCUJVR19PTihsZW5zLmVhY2ggPT0gMCk7CisKKwl0b3RhbCA9IGxlbnMubnIgKiBsZW5zLmVhY2g7CisKKwlyZHNfaW5mb19pdGVyX3VubWFwKCZpdGVyKTsKKworCWlmICh0b3RhbCA+IGxlbikgeworCQlsZW4gPSB0b3RhbDsKKwkJcmV0ID0gLUVOT1NQQzsKKwl9IGVsc2UgeworCQlsZW4gPSB0b3RhbDsKKwkJcmV0ID0gbGVucy5lYWNoOworCX0KKworCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpCisJCXJldCA9IC1FRkFVTFQ7CisKK291dDoKKwlmb3IgKGkgPSAwOyBwYWdlcyAhPSBOVUxMICYmIGkgPCBucl9wYWdlczsgaSsrKQorCQlwdXRfcGFnZShwYWdlc1tpXSk7CisJa2ZyZWUocGFnZXMpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaW5mby5oIGIvbmV0L3Jkcy9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjMDUyYwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaW5mby5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX1JEU19JTkZPX0gKKyNkZWZpbmUgX1JEU19JTkZPX0gKKworc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgeworCXVuc2lnbmVkIGludAlucjsKKwl1bnNpZ25lZCBpbnQJZWFjaDsKK307CisKK3N0cnVjdCByZHNfaW5mb19pdGVyYXRvcjsKKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtdXN0IGZpbGwgaW4gdGhlIGZpZWxkcyBvZiBAbGVucyB0byByZWZsZWN0IHRoZSBzaXplCisgKiBvZiB0aGUgYXZhaWxhYmxlIGluZm8gc291cmNlLiAgSWYgdGhlIHNuYXBzaG90IGZpdHMgaW4gQGxlbiB0aGVuIGl0CisgKiBzaG91bGQgYmUgY29waWVkIHVzaW5nIEBpdGVyLiAgVGhlIGNhbGxlciB3aWxsIGRlZHVjZSBpZiBpdCB3YXMgY29waWVkCisgKiBvciBub3QgYnkgY29tcGFyaW5nIHRoZSBsZW5ndGhzLgorICovCit0eXBlZGVmIHZvaWQgKCpyZHNfaW5mb19mdW5jKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpOworCit2b2lkIHJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYyk7Cit2b2lkIHJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhpbnQgb3B0bmFtZSwgcmRzX2luZm9fZnVuYyBmdW5jKTsKK2ludCByZHNfaW5mb19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJaW50IF9fdXNlciAqb3B0bGVuKTsKK3ZvaWQgcmRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsIHZvaWQgKmRhdGEsCisJCSAgIHVuc2lnbmVkIGxvbmcgYnl0ZXMpOwordm9pZCByZHNfaW5mb19pdGVyX3VubWFwKHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlcik7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmMgYi9uZXQvcmRzL2l3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1NjkwNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXcuYwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKwordW5zaWduZWQgaW50IGZhc3RyZWdfcG9vbF9zaXplID0gUkRTX0ZBU1RSRUdfUE9PTF9TSVpFOwordW5zaWduZWQgaW50IGZhc3RyZWdfbWVzc2FnZV9zaXplID0gUkRTX0ZBU1RSRUdfU0laRSArIDE7IC8qICsxIGFsbG93cyBmb3IgdW5hbGlnbmVkIE1ScyAqLworCittb2R1bGVfcGFyYW0oZmFzdHJlZ19wb29sX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZhc3RyZWdfcG9vbF9zaXplLCAiIE1heCBudW1iZXIgb2YgZmFzdHJlZyBNUnMgcGVyIGRldmljZSIpOworbW9kdWxlX3BhcmFtKGZhc3RyZWdfbWVzc2FnZV9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmYXN0cmVnX21lc3NhZ2Vfc2l6ZSwgIiBNYXggc2l6ZSBvZiBhIFJETUEgdHJhbnNmZXIgKGZhc3RyZWcgTVJzKSIpOworCitzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pd19kZXZpY2VzOworCitERUZJTkVfU1BJTkxPQ0soaXdfbm9kZXZfY29ubnNfbG9jayk7CitMSVNUX0hFQUQoaXdfbm9kZXZfY29ubnMpOworCit2b2lkIHJkc19pd19hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqZGV2X2F0dHI7CisKKwkvKiBPbmx5IGhhbmRsZSBpd2FycCBkZXZpY2VzICovCisJaWYgKGRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9STklDKQorCQlyZXR1cm47CisKKwlkZXZfYXR0ciA9IGttYWxsb2Moc2l6ZW9mICpkZXZfYXR0ciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZfYXR0cikKKwkJcmV0dXJuOworCisJaWYgKGliX3F1ZXJ5X2RldmljZShkZXZpY2UsIGRldl9hdHRyKSkgeworCQlyZHNkZWJ1ZygiUXVlcnkgZGV2aWNlIGZhaWxlZCBmb3IgJXNcbiIsIGRldmljZS0+bmFtZSk7CisJCWdvdG8gZnJlZV9hdHRyOworCX0KKworCXJkc19pd2RldiA9IGttYWxsb2Moc2l6ZW9mICpyZHNfaXdkZXYsIEdGUF9LRVJORUwpOworCWlmICghcmRzX2l3ZGV2KQorCQlnb3RvIGZyZWVfYXR0cjsKKworCXNwaW5fbG9ja19pbml0KCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCXJkc19pd2Rldi0+ZG1hX2xvY2FsX2xrZXkgPSAhIShkZXZfYXR0ci0+ZGV2aWNlX2NhcF9mbGFncyAmIElCX0RFVklDRV9MT0NBTF9ETUFfTEtFWSk7CisJcmRzX2l3ZGV2LT5tYXhfd3JzID0gZGV2X2F0dHItPm1heF9xcF93cjsKKwlyZHNfaXdkZXYtPm1heF9zZ2UgPSBtaW4oZGV2X2F0dHItPm1heF9zZ2UsIFJEU19JV19NQVhfU0dFKTsKKworCXJkc19pd2Rldi0+cGFnZV9zaGlmdCA9IG1heChQQUdFX1NISUZULCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7CisKKwlyZHNfaXdkZXYtPmRldiA9IGRldmljZTsKKwlyZHNfaXdkZXYtPnBkID0gaWJfYWxsb2NfcGQoZGV2aWNlKTsKKwlpZiAoSVNfRVJSKHJkc19pd2Rldi0+cGQpKQorCQlnb3RvIGZyZWVfZGV2OworCisJaWYgKCFyZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5KSB7CisJCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykgeworCQkJcmRzX2l3ZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2l3ZGV2LT5wZCwKKwkJCQkJCUlCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJCX0gZWxzZSB7CisJCQlyZHNfaXdkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaXdkZXYtPnBkLAorCQkJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKKwkJCQkJCUlCX0FDQ0VTU19SRU1PVEVfV1JJVEUgfAorCQkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKKwkJfQorCQlpZiAoSVNfRVJSKHJkc19pd2Rldi0+bXIpKQorCQkJZ290byBlcnJfcGQ7CisJfSBlbHNlCisJCXJkc19pd2Rldi0+bXIgPSBOVUxMOworCisJcmRzX2l3ZGV2LT5tcl9wb29sID0gcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHJkc19pd2Rldik7CisJaWYgKElTX0VSUihyZHNfaXdkZXYtPm1yX3Bvb2wpKSB7CisJCXJkc19pd2Rldi0+bXJfcG9vbCA9IE5VTEw7CisJCWdvdG8gZXJyX21yOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdkZXYtPmNtX2lkX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmcmRzX2l3ZGV2LT5saXN0LCAmcmRzX2l3X2RldmljZXMpOworCisJaWJfc2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pd19jbGllbnQsIHJkc19pd2Rldik7CisKKwlnb3RvIGZyZWVfYXR0cjsKKworZXJyX21yOgorCWlmIChyZHNfaXdkZXYtPm1yKQorCQlpYl9kZXJlZ19tcihyZHNfaXdkZXYtPm1yKTsKK2Vycl9wZDoKKwlpYl9kZWFsbG9jX3BkKHJkc19pd2Rldi0+cGQpOworZnJlZV9kZXY6CisJa2ZyZWUocmRzX2l3ZGV2KTsKK2ZyZWVfYXR0cjoKKwlrZnJlZShkZXZfYXR0cik7Cit9CisKK3ZvaWQgcmRzX2l3X3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZCwgKm5leHQ7CisKKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJaWYgKCFyZHNfaXdkZXYpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpX2NtX2lkLCBuZXh0LCAmcmRzX2l3ZGV2LT5jbV9pZF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZpX2NtX2lkLT5saXN0KTsKKwkJa2ZyZWUoaV9jbV9pZCk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlyZHNfaXdfcmVtb3ZlX2Nvbm5zKHJkc19pd2Rldik7CisKKwlpZiAocmRzX2l3ZGV2LT5tcl9wb29sKQorCQlyZHNfaXdfZGVzdHJveV9tcl9wb29sKHJkc19pd2Rldi0+bXJfcG9vbCk7CisKKwlpZiAocmRzX2l3ZGV2LT5tcikKKwkJaWJfZGVyZWdfbXIocmRzX2l3ZGV2LT5tcik7CisKKwl3aGlsZSAoaWJfZGVhbGxvY19wZChyZHNfaXdkZXYtPnBkKSkgeworCQlyZHNkZWJ1ZygiRmFpbGVkIHRvIGRlYWxsb2MgcGQgJXBcbiIsIHJkc19pd2Rldi0+cGQpOworCQltc2xlZXAoMSk7CisJfQorCisJbGlzdF9kZWwoJnJkc19pd2Rldi0+bGlzdCk7CisJa2ZyZWUocmRzX2l3ZGV2KTsKK30KKworc3RydWN0IGliX2NsaWVudCByZHNfaXdfY2xpZW50ID0geworCS5uYW1lICAgPSAicmRzX2l3IiwKKwkuYWRkICAgID0gcmRzX2l3X2FkZF9vbmUsCisJLnJlbW92ZSA9IHJkc19pd19yZW1vdmVfb25lCit9OworCitzdGF0aWMgaW50IHJkc19pd19jb25uX2luZm9fdmlzaXRvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICAgIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljOworCisJLyogV2Ugd2lsbCBvbmx5IGV2ZXIgbG9vayBhdCBJQiB0cmFuc3BvcnRzICovCisJaWYgKGNvbm4tPmNfdHJhbnMgIT0gJnJkc19pd190cmFuc3BvcnQpCisJCXJldHVybiAwOworCisJaWluZm8tPnNyY19hZGRyID0gY29ubi0+Y19sYWRkcjsKKwlpaW5mby0+ZHN0X2FkZHIgPSBjb25uLT5jX2ZhZGRyOworCisJbWVtc2V0KCZpaW5mby0+c3JjX2dpZCwgMCwgc2l6ZW9mKGlpbmZvLT5zcmNfZ2lkKSk7CisJbWVtc2V0KCZpaW5mby0+ZHN0X2dpZCwgMCwgc2l6ZW9mKGlpbmZvLT5kc3RfZ2lkKSk7CisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcjsKKworCQlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJCWRldl9hZGRyID0gJmljLT5pX2NtX2lkLT5yb3V0ZS5hZGRyLmRldl9hZGRyOworCisJCWliX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5zcmNfZ2lkKTsKKwkJaWJfYWRkcl9nZXRfZGdpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPmRzdF9naWQpOworCisJCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJCWlpbmZvLT5tYXhfc2VuZF93ciA9IGljLT5pX3NlbmRfcmluZy53X25yOworCQlpaW5mby0+bWF4X3JlY3Zfd3IgPSBpYy0+aV9yZWN2X3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9zZW5kX3NnZSA9IHJkc19pd2Rldi0+bWF4X3NnZTsKKwkJcmRzX2l3X2dldF9tcl9pbmZvKHJkc19pd2RldiwgaWluZm8pOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2ljX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19mb3JfZWFjaF9jb25uX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLAorCQkJCXJkc19pd19jb25uX2luZm9fdmlzaXRvciwKKwkJCQlzaXplb2Yoc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbikpOworfQorCisKKy8qCisgKiBFYXJseSBSRFMvSUIgd2FzIGJ1aWx0IHRvIG9ubHkgYmluZCB0byBhbiBhZGRyZXNzIGlmIHRoZXJlIGlzIGFuIElQb0lCCisgKiBkZXZpY2Ugd2l0aCB0aGF0IGFkZHJlc3Mgc2V0LgorICoKKyAqIElmIGl0IHdlcmUgbWUsIEknZCBhZHZvY2F0ZSBmb3Igc29tZXRoaW5nIG1vcmUgZmxleGlibGUuICBTZW5kaW5nIGFuZAorICogcmVjZWl2aW5nIHNob3VsZCBiZSBkZXZpY2UtYWdub3N0aWMuICBUcmFuc3BvcnRzIHdvdWxkIHRyeSBhbmQgbWFpbnRhaW4KKyAqIGNvbm5lY3Rpb25zIGJldHdlZW4gcGVlcnMgd2hvIGhhdmUgbWVzc2FnZXMgcXVldWVkLiAgVXNlcnNwYWNlIHdvdWxkIGJlCisgKiBhbGxvd2VkIHRvIGluZmx1ZW5jZSB3aGljaCBwYXRocyBoYXZlIHByaW9yaXR5LiAgV2UgY291bGQgY2FsbCB1c2Vyc3BhY2UKKyAqIGFzc2VydGluZyB0aGlzIHBvbGljeSAicm91dGluZyIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2xhZGRyX2NoZWNrKF9fYmUzMiBhZGRyKQoreworCWludCByZXQ7CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisKKwkvKiBDcmVhdGUgYSBDTUEgSUQgYW5kIHRyeSB0byBiaW5kIGl0LiBUaGlzIGNhdGNoZXMgYm90aAorCSAqIElCIGFuZCBpV0FSUCBjYXBhYmxlIE5JQ3MuCisJICovCisJY21faWQgPSByZG1hX2NyZWF0ZV9pZChOVUxMLCBOVUxMLCBSRE1BX1BTX1RDUCk7CisJaWYgKCFjbV9pZCkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luLnNpbl9hZGRyLnNfYWRkciA9IGFkZHI7CisKKwkvKiByZG1hX2JpbmRfYWRkciB3aWxsIG9ubHkgc3VjY2VlZCBmb3IgSUIgJiBpV0FSUCBkZXZpY2VzICovCisJcmV0ID0gcmRtYV9iaW5kX2FkZHIoY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luKTsKKwkvKiBkdWUgdG8gdGhpcywgd2Ugd2lsbCBjbGFpbSB0byBzdXBwb3J0IElCIGRldmljZXMgdW5sZXNzIHdlCisJICAgY2hlY2sgbm9kZV90eXBlLiAqLworCWlmIChyZXQgfHwgY21faWQtPmRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9STklDKQorCQlyZXQgPSAtRUFERFJOT1RBVkFJTDsKKworCXJkc2RlYnVnKCJhZGRyICVwSTQgcmV0ICVkIG5vZGUgdHlwZSAlZFxuIiwKKwkJJmFkZHIsIHJldCwKKwkJY21faWQtPmRldmljZSA/IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSA6IC0xKTsKKworCXJkbWFfZGVzdHJveV9pZChjbV9pZCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pd19leGl0KHZvaWQpCit7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TLCByZHNfaXdfaWNfaW5mbyk7CisJcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucygpOworCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaXdfY2xpZW50KTsKKwlyZHNfaXdfc3lzY3RsX2V4aXQoKTsKKwlyZHNfaXdfcmVjdl9leGl0KCk7CisJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJnJkc19pd190cmFuc3BvcnQpOworfQorCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaXdfdHJhbnNwb3J0ID0geworCS5sYWRkcl9jaGVjawkJPSByZHNfaXdfbGFkZHJfY2hlY2ssCisJLnhtaXRfY29tcGxldGUJCT0gcmRzX2l3X3htaXRfY29tcGxldGUsCisJLnhtaXQJCQk9IHJkc19pd194bWl0LAorCS54bWl0X2NvbmdfbWFwCQk9IE5VTEwsCisJLnhtaXRfcmRtYQkJPSByZHNfaXdfeG1pdF9yZG1hLAorCS5yZWN2CQkJPSByZHNfaXdfcmVjdiwKKwkuY29ubl9hbGxvYwkJPSByZHNfaXdfY29ubl9hbGxvYywKKwkuY29ubl9mcmVlCQk9IHJkc19pd19jb25uX2ZyZWUsCisJLmNvbm5fY29ubmVjdAkJPSByZHNfaXdfY29ubl9jb25uZWN0LAorCS5jb25uX3NodXRkb3duCQk9IHJkc19pd19jb25uX3NodXRkb3duLAorCS5pbmNfY29weV90b191c2VyCT0gcmRzX2l3X2luY19jb3B5X3RvX3VzZXIsCisJLmluY19wdXJnZQkJPSByZHNfaXdfaW5jX3B1cmdlLAorCS5pbmNfZnJlZQkJPSByZHNfaXdfaW5jX2ZyZWUsCisJLmNtX2luaXRpYXRlX2Nvbm5lY3QJPSByZHNfaXdfY21faW5pdGlhdGVfY29ubmVjdCwKKwkuY21faGFuZGxlX2Nvbm5lY3QJPSByZHNfaXdfY21faGFuZGxlX2Nvbm5lY3QsCisJLmNtX2Nvbm5lY3RfY29tcGxldGUJPSByZHNfaXdfY21fY29ubmVjdF9jb21wbGV0ZSwKKwkuc3RhdHNfaW5mb19jb3B5CT0gcmRzX2l3X3N0YXRzX2luZm9fY29weSwKKwkuZXhpdAkJCT0gcmRzX2l3X2V4aXQsCisJLmdldF9tcgkJCT0gcmRzX2l3X2dldF9tciwKKwkuc3luY19tcgkJPSByZHNfaXdfc3luY19tciwKKwkuZnJlZV9tcgkJPSByZHNfaXdfZnJlZV9tciwKKwkuZmx1c2hfbXJzCQk9IHJkc19pd19mbHVzaF9tcnMsCisJLnRfb3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnRfbmFtZQkJCT0gIml3YXJwIiwKKwkudF9wcmVmZXJfbG9vcGJhY2sJPSAxLAorfTsKKworaW50IF9faW5pdCByZHNfaXdfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3X2RldmljZXMpOworCisJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZyZHNfaXdfY2xpZW50KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHJkc19pd19zeXNjdGxfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2licmVnOworCisJcmV0ID0gcmRzX2l3X3JlY3ZfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N5c2N0bDsKKworCXJldCA9IHJkc190cmFuc19yZWdpc3RlcigmcmRzX2l3X3RyYW5zcG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVjdjsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSVdBUlBfQ09OTkVDVElPTlMsIHJkc19pd19pY19pbmZvKTsKKworCWdvdG8gb3V0OworCitvdXRfcmVjdjoKKwlyZHNfaXdfcmVjdl9leGl0KCk7CitvdXRfc3lzY3RsOgorCXJkc19pd19zeXNjdGxfZXhpdCgpOworb3V0X2licmVnOgorCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaXdfY2xpZW50KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXcuaCBiL25ldC9yZHMvaXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRkYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pdy5oCkBAIC0wLDAgKzEsMzk1IEBACisjaWZuZGVmIF9SRFNfSVdfSAorI2RlZmluZSBfUkRTX0lXX0gKKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hX3RyYW5zcG9ydC5oIgorCisjZGVmaW5lIFJEU19GQVNUUkVHX1NJWkUJCTIwCisjZGVmaW5lIFJEU19GQVNUUkVHX1BPT0xfU0laRQkJMjA0OAorCisjZGVmaW5lIFJEU19JV19NQVhfU0dFCQkJOAorI2RlZmluZSBSRFNfSVdfUkVDVl9TR0UgCQkyCisKKyNkZWZpbmUgUkRTX0lXX0RFRkFVTFRfUkVDVl9XUgkJMTAyNAorI2RlZmluZSBSRFNfSVdfREVGQVVMVF9TRU5EX1dSCQkyNTYKKworI2RlZmluZSBSRFNfSVdfU1VQUE9SVEVEX1BST1RPQ09MUwkweDAwMDAwMDAzCS8qIG1pbm9yIHZlcnNpb25zIHN1cHBvcnRlZCAqLworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCByZHNfaXdfZGV2aWNlczsKKworLyoKKyAqIElCIHBvc3RzIFJEU19GUkFHX1NJWkUgZnJhZ21lbnRzIG9mIHBhZ2VzIHRvIHRoZSByZWNlaXZlIHF1ZXVlcyB0bworICogdHJ5IGFuZCBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aWVkIHVwIGJvdGggdGhlIGRldmljZSBhbmQKKyAqIHNvY2tldCByZWNlaXZlIHF1ZXVlcy4KKyAqLworLyogcGFnZSBvZmZzZXQgb2YgdGhlIGZpbmFsIGZ1bGwgZnJhZyB0aGF0IGZpdHMgaW4gdGhlIHBhZ2UgKi8KKyNkZWZpbmUgUkRTX1BBR0VfTEFTVF9PRkYgKCgoUEFHRV9TSVpFICAvIFJEU19GUkFHX1NJWkUpIC0gMSkgKiBSRFNfRlJBR19TSVpFKQorc3RydWN0IHJkc19wYWdlX2ZyYWcgeworCXN0cnVjdCBsaXN0X2hlYWQJZl9pdGVtOworCXN0cnVjdCBwYWdlCQkqZl9wYWdlOworCXVuc2lnbmVkIGxvbmcJCWZfb2Zmc2V0OworCWRtYV9hZGRyX3QgCQlmX21hcHBlZDsKK307CisKK3N0cnVjdCByZHNfaXdfaW5jb21pbmcgeworCXN0cnVjdCBsaXN0X2hlYWQJaWlfZnJhZ3M7CisJc3RydWN0IHJkc19pbmNvbWluZwlpaV9pbmM7Cit9OworCitzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSB7CisJLyogQWRkIG5ldyBmaWVsZHMgYXQgdGhlIGVuZCwgYW5kIGRvbid0IHBlcm11dGUgZXhpc3RpbmcgZmllbGRzLiAqLworCV9fYmUzMgkJCWRwX3NhZGRyOworCV9fYmUzMgkJCWRwX2RhZGRyOworCXU4CQkJZHBfcHJvdG9jb2xfbWFqb3I7CisJdTgJCQlkcF9wcm90b2NvbF9taW5vcjsKKwlfX2JlMTYJCQlkcF9wcm90b2NvbF9taW5vcl9tYXNrOyAvKiBiaXRtYXNrICovCisJX19iZTMyCQkJZHBfcmVzZXJ2ZWQxOworCV9fYmU2NAkJCWRwX2Fja19zZXE7CisJX19iZTMyCQkJZHBfY3JlZGl0OwkJLyogbm9uLXplcm8gZW5hYmxlcyBmbG93IGN0bCAqLworfTsKKworc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCB7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpsaXN0OworCXVuc2lnbmVkIGludAkJbGVuOworCWludAkJCWRtYV9sZW47CisJdW5zaWduZWQgaW50CQlkbWFfbnBhZ2VzOworCXVuc2lnbmVkIGludAkJYnl0ZXM7Cit9OworCitzdHJ1Y3QgcmRzX2l3X21hcHBpbmcgeworCXNwaW5sb2NrX3QJCW1fbG9jazsJLyogcHJvdGVjdCB0aGUgbWFwcGluZyBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCW1fbGlzdDsKKwlzdHJ1Y3QgcmRzX2l3X21yCSptX21yOworCXVpbnQzMl90CQltX3JrZXk7CisJc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCBtX3NnOworfTsKKworc3RydWN0IHJkc19pd19zZW5kX3dvcmsgeworCXN0cnVjdCByZHNfbWVzc2FnZQkqc19ybTsKKworCS8qIFdlIHNob3VsZCByZWFsbHkgcHV0IHRoZXNlIGludG8gYSB1bmlvbjogKi8KKwlzdHJ1Y3QgcmRzX3JkbWFfb3AJKnNfb3A7CisJc3RydWN0IHJkc19pd19tYXBwaW5nCSpzX21hcHBpbmc7CisJc3RydWN0IGliX21yCQkqc19tcjsKKwlzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0ICpzX3BhZ2VfbGlzdDsKKwl1bnNpZ25lZCBjaGFyCQlzX3JlbWFwX2NvdW50OworCisJc3RydWN0IGliX3NlbmRfd3IJc193cjsKKwlzdHJ1Y3QgaWJfc2dlCQlzX3NnZVtSRFNfSVdfTUFYX1NHRV07CisJdW5zaWduZWQgbG9uZwkJc19xdWV1ZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayB7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAJKnJfaXdpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcJKnJfZnJhZzsKKwlzdHJ1Y3QgaWJfcmVjdl93cglyX3dyOworCXN0cnVjdCBpYl9zZ2UJCXJfc2dlWzJdOworfTsKKworc3RydWN0IHJkc19pd193b3JrX3JpbmcgeworCXUzMgkJd19ucjsKKwl1MzIJCXdfYWxsb2NfcHRyOworCXUzMgkJd19hbGxvY19jdHI7CisJdTMyCQl3X2ZyZWVfcHRyOworCWF0b21pY190CXdfZnJlZV9jdHI7Cit9OworCitzdHJ1Y3QgcmRzX2l3X2RldmljZTsKKworc3RydWN0IHJkc19pd19jb25uZWN0aW9uIHsKKworCXN0cnVjdCBsaXN0X2hlYWQJaXdfbm9kZTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAJKnJkc19pd2RldjsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24JKmNvbm47CisKKwkvKiBhbHBoYWJldCBzb3VwLCBJQlRBIHN0eWxlICovCisJc3RydWN0IHJkbWFfY21faWQJKmlfY21faWQ7CisJc3RydWN0IGliX3BkCQkqaV9wZDsKKwlzdHJ1Y3QgaWJfbXIJCSppX21yOworCXN0cnVjdCBpYl9jcQkJKmlfc2VuZF9jcTsKKwlzdHJ1Y3QgaWJfY3EJCSppX3JlY3ZfY3E7CisKKwkvKiB0eCAqLworCXN0cnVjdCByZHNfaXdfd29ya19yaW5nCWlfc2VuZF9yaW5nOworCXN0cnVjdCByZHNfbWVzc2FnZQkqaV9ybTsKKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9zZW5kX2hkcnM7CisJdTY0CQkJaV9zZW5kX2hkcnNfZG1hOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICppX3NlbmRzOworCisJLyogcnggKi8KKwlzdHJ1Y3QgbXV0ZXgJCWlfcmVjdl9tdXRleDsKKwlzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZwlpX3JlY3ZfcmluZzsKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nCSppX2l3aW5jOworCXUzMgkJCWlfcmVjdl9kYXRhX3JlbTsKKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9yZWN2X2hkcnM7CisJdTY0CQkJaV9yZWN2X2hkcnNfZG1hOworCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICppX3JlY3ZzOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCWlfZnJhZzsKKwl1NjQJCQlpX2Fja19yZWN2OwkvKiBsYXN0IEFDSyByZWNlaXZlZCAqLworCisJLyogc2VuZGluZyBhY2tzICovCisJdW5zaWduZWQgbG9uZwkJaV9hY2tfZmxhZ3M7CisJdTY0CQkJaV9hY2tfbmV4dDsJLyogbmV4dCBBQ0sgdG8gc2VuZCAqLworCXN0cnVjdCByZHNfaGVhZGVyCSppX2FjazsKKwlzdHJ1Y3QgaWJfc2VuZF93cglpX2Fja193cjsKKwlzdHJ1Y3QgaWJfc2dlCQlpX2Fja19zZ2U7CisJdTY0CQkJaV9hY2tfZG1hOworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX3F1ZXVlZDsKKworCS8qIEZsb3cgY29udHJvbCByZWxhdGVkIGluZm9ybWF0aW9uCisJICoKKwkgKiBPdXIgYWxnb3JpdGhtIHVzZXMgYSBwYWlyIHZhcmlhYmxlcyB0aGF0IHdlIG5lZWQgdG8gYWNjZXNzCisJICogYXRvbWljYWxseSAtIG9uZSBmb3IgdGhlIHNlbmQgY3JlZGl0cywgYW5kIG9uZSBwb3N0ZWQKKwkgKiByZWN2IGNyZWRpdHMgd2UgbmVlZCB0byB0cmFuc2ZlciB0byByZW1vdGUuCisJICogUmF0aGVyIHRoYW4gcHJvdGVjdCB0aGVtIHVzaW5nIGEgc2xvdyBzcGlubG9jaywgd2UgcHV0IGJvdGggaW50bworCSAqIGEgc2luZ2xlIGF0b21pY190IGFuZCB1cGRhdGUgaXQgdXNpbmcgY21weGNoZworCSAqLworCWF0b21pY190CQlpX2NyZWRpdHM7CisKKwkvKiBQcm90b2NvbCB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgaW50CQlpX2Zsb3djdGw6MTsJLyogZW5hYmxlL2Rpc2FibGUgZmxvdyBjdGwgKi8KKwl1bnNpZ25lZCBpbnQJCWlfZG1hX2xvY2FsX2xrZXk6MTsKKwl1bnNpZ25lZCBpbnQJCWlfZmFzdHJlZ19wb3N0ZWQ6MTsgLyogZmFzdHJlZyBwb3N0ZWQgb24gdGhpcyBjb25uZWN0aW9uICovCisJLyogQmF0Y2hlZCBjb21wbGV0aW9ucyAqLworCXVuc2lnbmVkIGludAkJaV91bnNpZ25hbGVkX3dyczsKKwlsb25nCQkJaV91bnNpZ25hbGVkX2J5dGVzOworfTsKKworLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaXMgYXQgbGVhc3QgMzIgYml0cyAqLworI2RlZmluZSBJQl9HRVRfU0VORF9DUkVESVRTKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIElCX0dFVF9QT1NUX0NSRURJVFModikJKCh2KSA+PiAxNikKKyNkZWZpbmUgSUJfU0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9TRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPDwgMTYpCisKK3N0cnVjdCByZHNfaXdfY21faWQgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqY21faWQ7Cit9OworCitzdHJ1Y3QgcmRzX2l3X2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQJY21faWRfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbm5fbGlzdDsKKwlzdHJ1Y3QgaWJfZGV2aWNlCSpkZXY7CisJc3RydWN0IGliX3BkCQkqcGQ7CisJc3RydWN0IGliX21yCQkqbXI7CisJc3RydWN0IHJkc19pd19tcl9wb29sCSptcl9wb29sOworCWludAkJCXBhZ2Vfc2hpZnQ7CisJaW50CQkJbWF4X3NnZTsKKwl1bnNpZ25lZCBpbnQJCW1heF93cnM7CisJdW5zaWduZWQgaW50CQlkbWFfbG9jYWxfbGtleToxOworCXNwaW5sb2NrX3QJCXNwaW5sb2NrOwkvKiBwcm90ZWN0IHRoZSBhYm92ZSAqLworfTsKKworLyogYml0cyBmb3IgaV9hY2tfZmxhZ3MgKi8KKyNkZWZpbmUgSUJfQUNLX0lOX0ZMSUdIVAkwCisjZGVmaW5lIElCX0FDS19SRVFVRVNURUQJMQorCisvKiBNYWdpYyBXUl9JRCBmb3IgQUNLcyAqLworI2RlZmluZSBSRFNfSVdfQUNLX1dSX0lECSgodTY0KTB4ZmZmZmZmZmZmZmZmZmZmZlVMTCkKKyNkZWZpbmUgUkRTX0lXX0ZBU1RfUkVHX1dSX0lECSgodTY0KTB4ZWZlZmVmZWZlZmVmZWZlZlVMTCkKKyNkZWZpbmUgUkRTX0lXX0xPQ0FMX0lOVl9XUl9JRAkoKHU2NCkweGRmZGZkZmRmZGZkZmRmZGZVTEwpCisKK3N0cnVjdCByZHNfaXdfc3RhdGlzdGljcyB7CisJdWludDY0X3QJc19pd19jb25uZWN0X3JhY2VkOworCXVpbnQ2NF90CXNfaXdfbGlzdGVuX2Nsb3NlZF9zdGFsZTsKKwl1aW50NjRfdAlzX2l3X3R4X2NxX2NhbGw7CisJdWludDY0X3QJc19pd190eF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2l3X3R4X3JpbmdfZnVsbDsKKwl1aW50NjRfdAlzX2l3X3R4X3Rocm90dGxlOworCXVpbnQ2NF90CXNfaXdfdHhfc2dfbWFwcGluZ19mYWlsdXJlOworCXVpbnQ2NF90CXNfaXdfdHhfc3RhbGxlZDsKKwl1aW50NjRfdAlzX2l3X3R4X2NyZWRpdF91cGRhdGVzOworCXVpbnQ2NF90CXNfaXdfcnhfY3FfY2FsbDsKKwl1aW50NjRfdAlzX2l3X3J4X2NxX2V2ZW50OworCXVpbnQ2NF90CXNfaXdfcnhfcmluZ19lbXB0eTsKKwl1aW50NjRfdAlzX2l3X3J4X3JlZmlsbF9mcm9tX2NxOworCXVpbnQ2NF90CXNfaXdfcnhfcmVmaWxsX2Zyb21fdGhyZWFkOworCXVpbnQ2NF90CXNfaXdfcnhfYWxsb2NfbGltaXQ7CisJdWludDY0X3QJc19pd19yeF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2l3X2Fja19zZW50OworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbmRfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2l3X2Fja19zZW5kX2RlbGF5ZWQ7CisJdWludDY0X3QJc19pd19hY2tfc2VuZF9waWdneWJhY2tlZDsKKwl1aW50NjRfdAlzX2l3X2Fja19yZWNlaXZlZDsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfYWxsb2M7CisJdWludDY0X3QJc19pd19yZG1hX21yX2ZyZWU7CisJdWludDY0X3QJc19pd19yZG1hX21yX3VzZWQ7CisJdWludDY0X3QJc19pd19yZG1hX21yX3Bvb2xfZmx1c2g7CisJdWludDY0X3QJc19pd19yZG1hX21yX3Bvb2xfd2FpdDsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfcG9vbF9kZXBsZXRlZDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX2l3X3dxOworCisvKgorICogRmFrZSBpYl9kbWFfc3luY19zZ19mb3Jfe2NwdSxkZXZpY2V9IGFzIGxvbmcgYXMgaWJfdmVyYnMuaAorICogZG9lc24ndCBkZWZpbmUgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ19kbWFfbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2dbaV0pLAorCQkJCWliX3NnX2RtYV9sZW4oZGV2LCAmc2dbaV0pLAorCQkJCWRpcmVjdGlvbik7CisJfQorfQorI2RlZmluZSBpYl9kbWFfc3luY19zZ19mb3JfY3B1CXJkc19pd19kbWFfc3luY19zZ19mb3JfY3B1CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ19kbWFfbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2dbaV0pLAorCQkJCWliX3NnX2RtYV9sZW4oZGV2LCAmc2dbaV0pLAorCQkJCWRpcmVjdGlvbik7CisJfQorfQorI2RlZmluZSBpYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXJkc19pd19kbWFfc3luY19zZ19mb3JfZGV2aWNlCisKK3N0YXRpYyBpbmxpbmUgdTMyIHJkc19pd19sb2NhbF9kbWFfbGtleShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXJldHVybiBpYy0+aV9kbWFfbG9jYWxfbGtleSA/IGljLT5pX2NtX2lkLT5kZXZpY2UtPmxvY2FsX2RtYV9sa2V5IDogaWMtPmlfbXItPmxrZXk7Cit9CisKKy8qIGliLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaXdfdHJhbnNwb3J0OworZXh0ZXJuIHZvaWQgcmRzX2l3X2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiB2b2lkIHJkc19pd19yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gc3RydWN0IGliX2NsaWVudCByZHNfaXdfY2xpZW50OworCitleHRlcm4gdW5zaWduZWQgaW50IGZhc3RyZWdfcG9vbF9zaXplOworZXh0ZXJuIHVuc2lnbmVkIGludCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgaXdfbm9kZXZfY29ubnNfbG9jazsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGl3X25vZGV2X2Nvbm5zOworCisvKiBpYl9jbS5jICovCitpbnQgcmRzX2l3X2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApOwordm9pZCByZHNfaXdfY29ubl9mcmVlKHZvaWQgKmFyZyk7CitpbnQgcmRzX2l3X2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaXdfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaXdfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzayk7CitpbnQgX19pbml0IHJkc19pd19saXN0ZW5faW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X2xpc3Rlbl9zdG9wKHZvaWQpOwordm9pZCBfX3Jkc19pd19jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqLCAuLi4pOworaW50IHJkc19pd19jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CitpbnQgcmRzX2l3X2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKK3ZvaWQgcmRzX2l3X2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKKworI2RlZmluZSByZHNfaXdfY29ubl9lcnJvcihjb25uLCBmbXQuLi4pIFwKKwlfX3Jkc19pd19jb25uX2Vycm9yKGNvbm4sIEtFUk5fV0FSTklORyAiUkRTL0lXOiAiIGZtdCkKKworLyogaWJfcmRtYS5jICovCitpbnQgcmRzX2l3X3VwZGF0ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOworaW50IHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpOwordm9pZCByZHNfaXdfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpOworc3RydWN0IHJkc19pd19tcl9wb29sICpyZHNfaXdfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pd19kZXZpY2UgKik7Cit2b2lkIHJkc19pd19nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyk7Cit2b2lkIHJkc19pd19kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pd19tcl9wb29sICopOwordm9pZCAqcmRzX2l3X2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KTsKK3ZvaWQgcmRzX2l3X3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcik7Cit2b2lkIHJkc19pd19mcmVlX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKTsKK3ZvaWQgcmRzX2l3X2ZsdXNoX21ycyh2b2lkKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOworCisvKiBpYl9yZWN2LmMgKi8KK2ludCBfX2luaXQgcmRzX2l3X3JlY3ZfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfZXhpdCh2b2lkKTsKK2ludCByZHNfaXdfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19pd19yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKTsKK3ZvaWQgcmRzX2l3X2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfaXdfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK2ludCByZHNfaXdfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgICBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJkc19pd19yZWN2X2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaXdfcmVjdl9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaXdfcmVjdl9pbml0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaXdfYWNrX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit1NjQgcmRzX2l3X3BpZ2d5Yl9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7CisKKy8qIGliX3JpbmcuYyAqLwordm9pZCByZHNfaXdfcmluZ19pbml0KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordm9pZCByZHNfaXdfcmluZ19yZXNpemUoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiBucik7Cit1MzIgcmRzX2l3X3JpbmdfYWxsb2Moc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKTsKK3ZvaWQgcmRzX2l3X3JpbmdfZnJlZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCk7Cit2b2lkIHJkc19pd19yaW5nX3VuYWxsb2Moc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOworaW50IHJkc19pd19yaW5nX2VtcHR5KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKTsKK2ludCByZHNfaXdfcmluZ19sb3coc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pd19yaW5nX29sZGVzdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZyk7Cit1MzIgcmRzX2l3X3JpbmdfY29tcGxldGVkKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgd3JfaWQsIHUzMiBvbGRlc3QpOworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHJkc19pd19yaW5nX2VtcHR5X3dhaXQ7CisKKy8qIGliX3NlbmQuYyAqLwordm9pZCByZHNfaXdfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19pd194bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZik7Cit2b2lkIHJkc19pd19zZW5kX2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgcmRzX2l3X3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaXdfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOworaW50IHJkc19pd194bWl0X3JkbWEoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKTsKK3ZvaWQgcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cyk7Cit2b2lkIHJkc19pd19hZHZlcnRpc2VfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBwb3N0ZWQpOworaW50IHJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1MzIgd2FudGVkLAorCQkJICAgICB1MzIgKmFkdl9jcmVkaXRzLCBpbnQgbmVlZF9wb3N0ZWQpOworCisvKiBpYl9zdGF0cy5jICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJkc19pd19zdGF0aXN0aWNzLCByZHNfaXdfc3RhdHMpOworI2RlZmluZSByZHNfaXdfc3RhdHNfaW5jKG1lbWJlcikgcmRzX3N0YXRzX2luY193aGljaChyZHNfaXdfc3RhdHMsIG1lbWJlcikKK3Vuc2lnbmVkIGludCByZHNfaXdfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKTsKKworLyogaWJfc3lzY3RsLmMgKi8KK2ludCBfX2luaXQgcmRzX2l3X3N5c2N0bF9pbml0KHZvaWQpOwordm9pZCByZHNfaXdfc3lzY3RsX2V4aXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uOworZXh0ZXJuIHVuc2lnbmVkIGludCByZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbDsKK2V4dGVybiBjdGxfdGFibGUgcmRzX2l3X3N5c2N0bF90YWJsZVtdOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZSBoZWFkZXIgYW5kIGRhdGEgU0dFcyBpbgorICogUkRTIHBhY2tldHMgKG5vdCBSRE1BKQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgorcmRzX2l3X2hlYWRlcl9zZ2Uoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQoreworCXJldHVybiAmc2dlWzBdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgorcmRzX2l3X2RhdGFfc2dlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVsxXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19zZXRfNjRiaXQodTY0ICpwdHIsIHU2NCB2YWwpCit7CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCSpwdHIgPSB2YWw7CisjZWxzZQorCXNldF82NGJpdChwdHIsIHZhbCk7CisjZW5kaWYKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X2NtLmMgYi9uZXQvcmRzL2l3X2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlY2IzZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfY20uYwpAQCAtMCwwICsxLDc1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCisvKgorICogU2V0IHRoZSBzZWxlY3RlZCBwcm90b2NvbCB2ZXJzaW9uCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfcHJvdG9jb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgdmVyc2lvbikKK3sKKwljb25uLT5jX3ZlcnNpb24gPSB2ZXJzaW9uOworfQorCisvKgorICogU2V0IHVwIGZsb3cgY29udHJvbAorICovCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHJkc19pd19zeXNjdGxfZmxvd19jb250cm9sICYmIGNyZWRpdHMgIT0gMCkgeworCQkvKiBXZSdyZSBkb2luZyBmbG93IGNvbnRyb2wgKi8KKwkJaWMtPmlfZmxvd2N0bCA9IDE7CisJCXJkc19pd19zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdHMpOworCX0gZWxzZSB7CisJCWljLT5pX2Zsb3djdGwgPSAwOworCX0KK30KKworLyoKKyAqIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuCisgKiBXZSBnZXQgaGVyZSBmb3IgYm90aCBvdXRnb2luZyBhbmQgaW5jb21pbmcgY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaXdfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwljb25zdCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBOVUxMOworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJaW50IGVycjsKKworCWlmIChldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuKSB7CisJCWRwID0gZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhOworCisJCXJkc19pd19zZXRfcHJvdG9jb2woY29ubiwKKwkJCQlSRFNfUFJPVE9DT0woZHAtPmRwX3Byb3RvY29sX21ham9yLAorCQkJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpKTsKKwkJcmRzX2l3X3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoZHAtPmRwX2NyZWRpdCkpOworCX0KKworCS8qIHVwZGF0ZSBpYl9kZXZpY2Ugd2l0aCB0aGlzIGxvY2FsIGlwYWRkciAmIGNvbm4gKi8KKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCWVyciA9IHJkc19pd191cGRhdGVfY21faWQocmRzX2l3ZGV2LCBpYy0+aV9jbV9pZCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaXdfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwllcnIgPSByZHNfaXdfYWRkX2Nvbm4ocmRzX2l3ZGV2LCBjb25uKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgInJkc19pd19hZGRfY29ubiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwICYmIGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JVzogY29ubmVjdGVkIHRvICVwSTQ8LT4lcEk0IHZlcnNpb24gJXUuJXUlc1xuIiwKKwkJCSZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkciwKKwkJCVJEU19QUk9UT0NPTF9NQUpPUihjb25uLT5jX3ZlcnNpb24pLAorCQkJUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tPmNfdmVyc2lvbiksCisJCQlpYy0+aV9mbG93Y3RsID8gIiwgZmxvdyBjb250cm9sIiA6ICIiKTsKKworCXJkc19jb25uZWN0X2NvbXBsZXRlKGNvbm4pOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfY21fZmlsbF9jb25uX3BhcmFtKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0sCisJCQlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSAqZHAsCisJCQl1MzIgcHJvdG9jb2xfdmVyc2lvbikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCW1lbXNldChjb25uX3BhcmFtLCAwLCBzaXplb2Yoc3RydWN0IHJkbWFfY29ubl9wYXJhbSkpOworCS8qIFhYWCB0dW5lIHRoZXNlPyAqLworCWNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXMgPSAxOworCWNvbm5fcGFyYW0tPmluaXRpYXRvcl9kZXB0aCA9IDE7CisKKwlpZiAoZHApIHsKKwkJbWVtc2V0KGRwLCAwLCBzaXplb2YoKmRwKSk7CisJCWRwLT5kcF9zYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJCWRwLT5kcF9kYWRkciA9IGNvbm4tPmNfZmFkZHI7CisJCWRwLT5kcF9wcm90b2NvbF9tYWpvciA9IFJEU19QUk9UT0NPTF9NQUpPUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yID0gUkRTX1BST1RPQ09MX01JTk9SKHByb3RvY29sX3ZlcnNpb24pOworCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzayA9IGNwdV90b19iZTE2KFJEU19JV19TVVBQT1JURURfUFJPVE9DT0xTKTsKKwkJZHAtPmRwX2Fja19zZXEgPSByZHNfaXdfcGlnZ3liX2FjayhpYyk7CisKKwkJLyogQWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCQlpZiAoaWMtPmlfZmxvd2N0bCkgeworCQkJdW5zaWduZWQgaW50IGNyZWRpdHM7CisKKwkJCWNyZWRpdHMgPSBJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSk7CisJCQlkcC0+ZHBfY3JlZGl0ID0gY3B1X3RvX2JlMzIoY3JlZGl0cyk7CisJCQlhdG9taWNfc3ViKElCX1NFVF9QT1NUX0NSRURJVFMoY3JlZGl0cyksICZpYy0+aV9jcmVkaXRzKTsKKwkJfQorCisJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YSA9IGRwOworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuID0gc2l6ZW9mKCpkcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaXdfY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQoreworCXJkc2RlYnVnKCJldmVudCAldSBkYXRhICVwXG4iLCBldmVudC0+ZXZlbnQsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfcXBfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGRhdGE7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBpYyAlcCBldmVudCAldVxuIiwgY29ubiwgaWMsIGV2ZW50LT5ldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50LT5ldmVudCkgeworCWNhc2UgSUJfRVZFTlRfQ09NTV9FU1Q6CisJCXJkbWFfbm90aWZ5KGljLT5pX2NtX2lkLCBJQl9FVkVOVF9DT01NX0VTVCk7CisJCWJyZWFrOworCWNhc2UgSUJfRVZFTlRfUVBfUkVRX0VSUjoKKwljYXNlIElCX0VWRU5UX1FQX0ZBVEFMOgorCWRlZmF1bHQ6CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJSRFMvSVc6IEZhdGFsIFFQIEV2ZW50ICV1IC0gY29ubmVjdGlvbiAlcEk0LT4lcEk0Li4ucmVjb25uZWN0aW5nXG4iLAorCQkJZXZlbnQtPmV2ZW50LCAmY29ubi0+Y19sYWRkciwKKwkJCSZjb25uLT5jX2ZhZGRyKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogQ3JlYXRlIGEgUVAKKyAqLworc3RhdGljIGludCByZHNfaXdfaW5pdF9xcF9hdHRycyhzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICphdHRyLAorCQlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LAorCQlzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqc2VuZF9yaW5nLAorCQl2b2lkICgqc2VuZF9jcV9oYW5kbGVyKShzdHJ1Y3QgaWJfY3EgKiwgdm9pZCAqKSwKKwkJc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJlY3ZfcmluZywKKwkJdm9pZCAoKnJlY3ZfY3FfaGFuZGxlcikoc3RydWN0IGliX2NxICosIHZvaWQgKiksCisJCXZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gcmRzX2l3ZGV2LT5kZXY7CisJdW5zaWduZWQgaW50IHNlbmRfc2l6ZSwgcmVjdl9zaXplOworCWludCByZXQ7CisKKwkvKiBUaGUgb2Zmc2V0IG9mIDEgaXMgdG8gYWNjb21vZGF0ZSB0aGUgYWRkaXRpb25hbCBBQ0sgV1IuICovCisJc2VuZF9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCByZHNfaXdkZXYtPm1heF93cnMsIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IgKyAxKTsKKwlyZWN2X3NpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJkc19pd2Rldi0+bWF4X3dycywgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93ciArIDEpOworCXJkc19pd19yaW5nX3Jlc2l6ZShzZW5kX3JpbmcsIHNlbmRfc2l6ZSAtIDEpOworCXJkc19pd19yaW5nX3Jlc2l6ZShyZWN2X3JpbmcsIHJlY3Zfc2l6ZSAtIDEpOworCisJbWVtc2V0KGF0dHIsIDAsIHNpemVvZigqYXR0cikpOworCWF0dHItPmV2ZW50X2hhbmRsZXIgPSByZHNfaXdfcXBfZXZlbnRfaGFuZGxlcjsKKwlhdHRyLT5xcF9jb250ZXh0ID0gY29udGV4dDsKKwlhdHRyLT5jYXAubWF4X3NlbmRfd3IgPSBzZW5kX3NpemU7CisJYXR0ci0+Y2FwLm1heF9yZWN2X3dyID0gcmVjdl9zaXplOworCWF0dHItPmNhcC5tYXhfc2VuZF9zZ2UgPSByZHNfaXdkZXYtPm1heF9zZ2U7CisJYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSA9IFJEU19JV19SRUNWX1NHRTsKKwlhdHRyLT5zcV9zaWdfdHlwZSA9IElCX1NJR05BTF9SRVFfV1I7CisJYXR0ci0+cXBfdHlwZSA9IElCX1FQVF9SQzsKKworCWF0dHItPnNlbmRfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCBzZW5kX2NxX2hhbmRsZXIsCisJCQkJICAgICByZHNfaXdfY3FfZXZlbnRfaGFuZGxlciwKKwkJCQkgICAgIGNvbnRleHQsIHNlbmRfc2l6ZSwgMCk7CisJaWYgKElTX0VSUihhdHRyLT5zZW5kX2NxKSkgeworCQlyZXQgPSBQVFJfRVJSKGF0dHItPnNlbmRfY3EpOworCQlhdHRyLT5zZW5kX2NxID0gTlVMTDsKKwkJcmRzZGVidWcoImliX2NyZWF0ZV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWF0dHItPnJlY3ZfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCByZWN2X2NxX2hhbmRsZXIsCisJCQkJICAgICByZHNfaXdfY3FfZXZlbnRfaGFuZGxlciwKKwkJCQkgICAgIGNvbnRleHQsIHJlY3Zfc2l6ZSwgMCk7CisJaWYgKElTX0VSUihhdHRyLT5yZWN2X2NxKSkgeworCQlyZXQgPSBQVFJfRVJSKGF0dHItPnJlY3ZfY3EpOworCQlhdHRyLT5yZWN2X2NxID0gTlVMTDsKKwkJcmRzZGVidWcoImliX2NyZWF0ZV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoYXR0ci0+c2VuZF9jcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShhdHRyLT5yZWN2X2NxLCBJQl9DUV9TT0xJQ0lURUQpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3EgcmVjdiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlpZiAocmV0KSB7CisJCWlmIChhdHRyLT5zZW5kX2NxKQorCQkJaWJfZGVzdHJveV9jcShhdHRyLT5zZW5kX2NxKTsKKwkJaWYgKGF0dHItPnJlY3ZfY3EpCisJCQlpYl9kZXN0cm95X2NxKGF0dHItPnJlY3ZfY3EpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBuZWVkcyB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gbm90IGxlYXZlIElTX0VSUiBwb2ludGVycyBhcm91bmQgZm9yCisgKiBjbGVhbnVwIHRvIHRyaXAgb3Zlci4KKyAqLworc3RhdGljIGludCByZHNfaXdfc2V0dXBfcXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisJc3RydWN0IGliX3FwX2luaXRfYXR0ciBhdHRyOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJaW50IHJldDsKKworCS8qIHJkc19pd19hZGRfb25lIGNyZWF0ZXMgYSByZHNfaXdfZGV2aWNlIG9iamVjdCBwZXIgSUIgZGV2aWNlLAorCSAqIGFuZCBhbGxvY2F0ZXMgYSBwcm90ZWN0aW9uIGRvbWFpbiwgbWVtb3J5IHJhbmdlIGFuZCBNUiBwb29sCisJICogZm9yIGVhY2guICBJZiB0aGF0IGZhaWxzIGZvciBhbnkgcmVhc29uLCBpdCB3aWxsIG5vdCByZWdpc3RlcgorCSAqIHRoZSByZHNfaXdkZXYgYXQgYWxsLgorCSAqLworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXYsICZyZHNfaXdfY2xpZW50KTsKKwlpZiAocmRzX2l3ZGV2ID09IE5VTEwpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lXOiBObyBjbGllbnRfZGF0YSBmb3IgZGV2aWNlICVzXG4iLAorCQkJCQlkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogUHJvdGVjdGlvbiBkb21haW4gYW5kIG1lbW9yeSByYW5nZSAqLworCWljLT5pX3BkID0gcmRzX2l3ZGV2LT5wZDsKKwlpYy0+aV9tciA9IHJkc19pd2Rldi0+bXI7CisKKwlyZXQgPSByZHNfaXdfaW5pdF9xcF9hdHRycygmYXR0ciwgcmRzX2l3ZGV2LAorCQkJJmljLT5pX3NlbmRfcmluZywgcmRzX2l3X3NlbmRfY3FfY29tcF9oYW5kbGVyLAorCQkJJmljLT5pX3JlY3ZfcmluZywgcmRzX2l3X3JlY3ZfY3FfY29tcF9oYW5kbGVyLAorCQkJY29ubik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWMtPmlfc2VuZF9jcSA9IGF0dHIuc2VuZF9jcTsKKwlpYy0+aV9yZWN2X2NxID0gYXR0ci5yZWN2X2NxOworCisJLyoKKwkgKiBYWFggdGhpcyBjYW4gZmFpbCBpZiBtYXhfKl93ciBpcyB0b28gbGFyZ2U/ICBBcmUgd2Ugc3VwcG9zZWQKKwkgKiB0byBiYWNrIG9mZiB1bnRpbCB3ZSBnZXQgYSB2YWx1ZSB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gc3VwcG9ydD8KKwkgKi8KKwlyZXQgPSByZG1hX2NyZWF0ZV9xcChpYy0+aV9jbV9pZCwgaWMtPmlfcGQsICZhdHRyKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJyZG1hX2NyZWF0ZV9xcCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kX2hkcnMgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAmaWMtPmlfc2VuZF9oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX3NlbmRfaGRycyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgc2VuZCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9yZWN2X2hkcnMgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9yZWN2X3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAmaWMtPmlfcmVjdl9oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX3JlY3ZfaGRycyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgcmVjdiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9hY2sgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCSAgICAgICAmaWMtPmlfYWNrX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX2FjayA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgYWNrIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3NlbmRzID0gdm1hbGxvYyhpYy0+aV9zZW5kX3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yaykpOworCWlmIChpYy0+aV9zZW5kcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJzZW5kIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXJkc19pd19zZW5kX2luaXRfcmluZyhpYyk7CisKKwlpYy0+aV9yZWN2cyA9IHZtYWxsb2MoaWMtPmlfcmVjdl9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pd19yZWN2X3dvcmspKTsKKwlpZiAoaWMtPmlfcmVjdnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygicmVjdiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd19yZWN2X2luaXRfcmluZyhpYyk7CisJcmRzX2l3X3JlY3ZfaW5pdF9hY2soaWMpOworCisJLyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlCisJICogdGhlIHBvc3RlZCBjcmVkaXQgY291bnQuICovCisJcmRzX2l3X3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMSk7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBwZCAlcCBtciAlcCBjcSAlcCAlcFxuIiwgY29ubiwgaWMtPmlfcGQsIGljLT5pX21yLAorCQkgaWMtPmlfc2VuZF9jcSwgaWMtPmlfcmVjdl9jcSk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIHJkc19pd19wcm90b2NvbF9jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCkKK3sKKwl1MTYgY29tbW9uOworCXUzMiB2ZXJzaW9uID0gMDsKKworCS8qIHJkbWFfY20gcHJpdmF0ZSBkYXRhIGlzIG9kZCAtIHdoZW4gdGhlcmUgaXMgYW55IHByaXZhdGUgZGF0YSBpbiB0aGUKKwkgKiByZXF1ZXN0LCB3ZSB3aWxsIGJlIGdpdmVuIGEgcHJldHR5IGxhcmdlIGJ1ZmZlciB3aXRob3V0IHRlbGxpbmcgdXMgdGhlCisJICogb3JpZ2luYWwgc2l6ZS4gVGhlIG9ubHkgd2F5IHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgaXMgYnkgbG9va2luZyBhdAorCSAqIHRoZSBjb250ZW50cywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uCisJICogSWYgdGhlIHByb3RvY29sIHZlcnNpb24gZmllbGRzIGFyZW4ndCBzZXQsIHRoaXMgaXMgYSBjb25uZWN0aW9uIGF0dGVtcHQKKwkgKiBmcm9tIGFuIG9sZGVyIHZlcnNpb24uIFRoaXMgY291bGQgY291bGQgYmUgMy4wIG9yIDIuMCAtIHdlIGNhbid0IHRlbGwuCisJICogV2UgcmVhbGx5IHNob3VsZCBoYXZlIGNoYW5nZWQgdGhpcyBmb3IgT0ZFRCAxLjMgOi0oICovCisJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAwKQorCQlyZXR1cm4gUkRTX1BST1RPQ09MXzNfMDsKKworCWNvbW1vbiA9IGJlMTZfdG9fY3B1KGRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrKSAmIFJEU19JV19TVVBQT1JURURfUFJPVE9DT0xTOworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMyAmJiBjb21tb24pIHsKKwkJdmVyc2lvbiA9IFJEU19QUk9UT0NPTF8zXzA7CisJCXdoaWxlICgoY29tbW9uID4+PSAxKSAhPSAwKQorCQkJdmVyc2lvbisrOworCX0gZWxzZSBpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiUkRTOiBDb25uZWN0aW9uIGZyb20gJXBJNCB1c2luZyAiCisJCQkiaW5jb21wYXRpYmxlIHByb3RvY29sIHZlcnNpb24gJXUuJXVcbiIsCisJCQkmZHAtPmRwX3NhZGRyLAorCQkJZHAtPmRwX3Byb3RvY29sX21ham9yLAorCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKTsKKwl9CisJcmV0dXJuIHZlcnNpb247Cit9CisKK2ludCByZHNfaXdfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJCSAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJY29uc3Qgc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwID0gZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhOworCXN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlIGRwX3JlcDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMOworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBOVUxMOworCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXUzMiB2ZXJzaW9uOworCWludCBlcnIsIGRlc3Ryb3kgPSAxOworCisJLyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIHByb3RvY29sIHZlcnNpb24gbWF0Y2hlcyBvdXJzLiAqLworCXZlcnNpb24gPSByZHNfaXdfcHJvdG9jb2xfY29tcGF0aWJsZShkcCk7CisJaWYgKCF2ZXJzaW9uKQorCQlnb3RvIG91dDsKKworCXJkc2RlYnVnKCJzYWRkciAlcEk0IGRhZGRyICVwSTQgUkRTdiV1LiV1XG4iLAorCQkgJmRwLT5kcF9zYWRkciwgJmRwLT5kcF9kYWRkciwKKwkJIFJEU19QUk9UT0NPTF9NQUpPUih2ZXJzaW9uKSwgUkRTX1BST1RPQ09MX01JTk9SKHZlcnNpb24pKTsKKworCWNvbm4gPSByZHNfY29ubl9jcmVhdGUoZHAtPmRwX2RhZGRyLCBkcC0+ZHBfc2FkZHIsICZyZHNfaXdfdHJhbnNwb3J0LAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChJU19FUlIoY29ubikpIHsKKwkJcmRzZGVidWcoInJkc19jb25uX2NyZWF0ZSBmYWlsZWQgKCVsZClcbiIsIFBUUl9FUlIoY29ubikpOworCQljb25uID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUaGUgY29ubmVjdGlvbiByZXF1ZXN0IG1heSBvY2N1ciB3aGlsZSB0aGUKKwkgKiBwcmV2aW91cyBjb25uZWN0aW9uIGV4aXN0LCBlLmcuIGluIGNhc2Ugb2YgZmFpbG92ZXIuCisJICogQnV0IGFzIGNvbm5lY3Rpb25zIG1heSBiZSBpbml0aWF0ZWQgc2ltdWx0YW5lb3VzbHkKKwkgKiBieSBib3RoIGhvc3RzLCB3ZSBoYXZlIGEgcmFuZG9tIGJhY2tvZmYgbWVjaGFuaXNtIC0KKwkgKiBzZWUgdGhlIGNvbW1lbnQgYWJvdmUgcmRzX3F1ZXVlX3JlY29ubmVjdCgpCisJICovCisJbXV0ZXhfbG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fQ09OTkVDVElORykpIHsKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCQlyZHNkZWJ1ZygiaW5jb21pbmcgY29ubmVjdCB3aGlsZSBjb25uZWN0aW5nXG4iKTsKKwkJCXJkc19jb25uX2Ryb3AoY29ubik7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfbGlzdGVuX2Nsb3NlZF9zdGFsZSk7CisJCX0gZWxzZQorCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fQ09OTkVDVElORykgeworCQkJLyogV2FpdCBhbmQgc2VlIC0gb3VyIGNvbm5lY3QgbWF5IHN0aWxsIGJlIHN1Y2NlZWRpbmcgKi8KKwkJCXJkc19pd19zdGF0c19pbmMoc19pd19jb25uZWN0X3JhY2VkKTsKKwkJfQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc19pd19zZXRfcHJvdG9jb2woY29ubiwgdmVyc2lvbik7CisJcmRzX2l3X3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoZHAtPmRwX2NyZWRpdCkpOworCisJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKKwkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KKwlpZiAoZHAtPmRwX2Fja19zZXEpCisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUoZHAtPmRwX2Fja19zZXEpLCBOVUxMKTsKKworCUJVR19PTihjbV9pZC0+Y29udGV4dCk7CisJQlVHX09OKGljLT5pX2NtX2lkKTsKKworCWljLT5pX2NtX2lkID0gY21faWQ7CisJY21faWQtPmNvbnRleHQgPSBjb25uOworCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGNtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwlpYy0+aV9kbWFfbG9jYWxfbGtleSA9IHJkc19pd2Rldi0+ZG1hX2xvY2FsX2xrZXk7CisKKwkvKiBXZSBnb3QgaGFsZndheSB0aHJvdWdoIHNldHRpbmcgdXAgdGhlIGliX2Nvbm5lY3Rpb24sIGlmIHdlCisJICogZmFpbCBub3csIHdlIGhhdmUgdG8gdGFrZSB0aGUgbG9uZyByb3V0ZSBvdXQgb2YgdGhpcyBtZXNzLiAqLworCWRlc3Ryb3kgPSAwOworCisJZXJyID0gcmRzX2l3X3NldHVwX3FwKGNvbm4pOworCWlmIChlcnIpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJkc19pd19zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3X2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwX3JlcCwgdmVyc2lvbik7CisKKwkvKiByZG1hX2FjY2VwdCgpIGNhbGxzIHJkbWFfcmVqZWN0KCkgaW50ZXJuYWxseSBpZiBpdCBmYWlscyAqLworCWVyciA9IHJkbWFfYWNjZXB0KGNtX2lkLCAmY29ubl9wYXJhbSk7CisJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCWlmIChlcnIpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJkbWFfYWNjZXB0IGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0OgorCXJkbWFfcmVqZWN0KGNtX2lkLCBOVUxMLCAwKTsKKwlyZXR1cm4gZGVzdHJveTsKK30KKworCitpbnQgcmRzX2l3X2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNtX2lkLT5jb250ZXh0OworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSBkcDsKKwlpbnQgcmV0OworCisJLyogSWYgdGhlIHBlZXIgZG9lc24ndCBkbyBwcm90b2NvbCBuZWdvdGlhdGlvbiwgd2UgbXVzdAorCSAqIGRlZmF1bHQgdG8gUkRTdjMuMCAqLworCXJkc19pd19zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MXzNfMCk7CisJaWMtPmlfZmxvd2N0bCA9IHJkc19pd19zeXNjdGxfZmxvd19jb250cm9sOwkvKiBhZHZlcnRpc2UgZmxvdyBjb250cm9sICovCisKKwlyZXQgPSByZHNfaXdfc2V0dXBfcXAoY29ubik7CisJaWYgKHJldCkgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRzX2l3X3NldHVwX3FwIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaXdfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sICZjb25uX3BhcmFtLCAmZHAsIFJEU19QUk9UT0NPTF9WRVJTSU9OKTsKKworCXJldCA9IHJkbWFfY29ubmVjdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCWlmIChyZXQpCisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZG1hX2Nvbm5lY3QgZmFpbGVkICglZClcbiIsIHJldCk7CisKK291dDoKKwkvKiBCZXdhcmUgLSByZXR1cm5pbmcgbm9uLXplcm8gdGVsbHMgdGhlIHJkbWFfY20gdG8gZGVzdHJveQorCSAqIHRoZSBjbV9pZC4gV2Ugc2hvdWxkIGNlcnRhaW5seSBub3QgZG8gaXQgYXMgbG9uZyBhcyB3ZSBzdGlsbAorCSAqICJvd24iIHRoZSBjbV9pZC4gKi8KKwlpZiAocmV0KSB7CisJCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJCWlmIChpYy0+aV9jbV9pZCA9PSBjbV9pZCkKKwkJCXJldCA9IDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfaXdfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRlc3Q7CisJaW50IHJldDsKKworCS8qIFhYWCBJIHdvbmRlciB3aGF0IGFmZmVjdCB0aGUgcG9ydCBzcGFjZSBoYXMgKi8KKwkvKiBkZWxlZ2F0ZSBjbSBldmVudCBoYW5kbGVyIHRvIHJkbWFfdHJhbnNwb3J0ICovCisJaWMtPmlfY21faWQgPSByZG1hX2NyZWF0ZV9pZChyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyLCBjb25uLAorCQkJCSAgICAgUkRNQV9QU19UQ1ApOworCWlmIChJU19FUlIoaWMtPmlfY21faWQpKSB7CisJCXJldCA9IFBUUl9FUlIoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCXJkc2RlYnVnKCJyZG1hX2NyZWF0ZV9pZCgpIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc2RlYnVnKCJjcmVhdGVkIGNtIGlkICVwIGZvciBjb25uICVwXG4iLCBpYy0+aV9jbV9pZCwgY29ubik7CisKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc3JjLnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2xhZGRyOworCXNyYy5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucygwKTsKKworCS8qIEZpcnN0LCBiaW5kIHRvIHRoZSBsb2NhbCBhZGRyZXNzIGFuZCBkZXZpY2UuICovCisJcmV0ID0gcmRtYV9iaW5kX2FkZHIoaWMtPmlfY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNyYyk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygicmRtYV9iaW5kX2FkZHIoJXBJNCkgZmFpbGVkOiAlZFxuIiwKKwkJCQkmY29ubi0+Y19sYWRkciwgcmV0KTsKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCWljLT5pX2RtYV9sb2NhbF9sa2V5ID0gcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleTsKKworCWRlc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJZGVzdC5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19mYWRkcjsKKwlkZXN0LnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKFJEU19QT1JUKTsKKworCXJldCA9IHJkbWFfcmVzb2x2ZV9hZGRyKGljLT5pX2NtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNyYywKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJmRlc3QsCisJCQkJUkRTX1JETUFfUkVTT0xWRV9USU1FT1VUX01TKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJhZGRyIHJlc29sdmUgZmFpbGVkIGZvciBjbSBpZCAlcDogJWRcbiIsIGljLT5pX2NtX2lkLAorCQkJIHJldCk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBzbyBjYXJlZnVsIGFib3V0IG9ubHkgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIHRoYXQgd2VyZSBidWlsdCB1cAorICogc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGF0IGFueSBwb2ludCBkdXJpbmcgc3RhcnR1cC4gIEluIGZhY3QgaXQKKyAqIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaXdfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKworCXJkc2RlYnVnKCJjbSAlcCBwZCAlcCBjcSAlcCAlcCBxcCAlcFxuIiwgaWMtPmlfY21faWQsCisJCSBpYy0+aV9wZCwgaWMtPmlfc2VuZF9jcSwgaWMtPmlfcmVjdl9jcSwKKwkJIGljLT5pX2NtX2lkID8gaWMtPmlfY21faWQtPnFwIDogTlVMTCk7CisKKwlpZiAoaWMtPmlfY21faWQpIHsKKwkJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKworCQlyZHNkZWJ1ZygiZGlzY29ubmVjdGluZyBjbSAlcFxuIiwgaWMtPmlfY21faWQpOworCQllcnIgPSByZG1hX2Rpc2Nvbm5lY3QoaWMtPmlfY21faWQpOworCQlpZiAoZXJyKSB7CisJCQkvKiBBY3R1YWxseSB0aGlzIG1heSBoYXBwZW4gcXVpdGUgZnJlcXVlbnRseSwgd2hlbgorCQkJICogYW4gb3V0Z29pbmcgY29ubmVjdCByYWNlZCB3aXRoIGFuIGluY29taW5nIGNvbm5lY3QuCisJCQkgKi8KKwkJCXJkc2RlYnVnKCJyZHNfaXdfY29ubl9zaHV0ZG93bjogZmFpbGVkIHRvIGRpc2Nvbm5lY3QsIgorCQkJCSAgICIgY206ICVwIGVyciAlZFxuIiwgaWMtPmlfY21faWQsIGVycik7CisJCX0KKworCQlpZiAoaWMtPmlfY21faWQtPnFwKSB7CisJCQlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX0VSUjsKKwkJCWliX21vZGlmeV9xcChpYy0+aV9jbV9pZC0+cXAsICZxcF9hdHRyLCBJQl9RUF9TVEFURSk7CisJCX0KKworCQl3YWl0X2V2ZW50KHJkc19pd19yaW5nX2VtcHR5X3dhaXQsCisJCQlyZHNfaXdfcmluZ19lbXB0eSgmaWMtPmlfc2VuZF9yaW5nKSAmJgorCQkJcmRzX2l3X3JpbmdfZW1wdHkoJmljLT5pX3JlY3ZfcmluZykpOworCisJCWlmIChpYy0+aV9zZW5kX2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3NlbmRfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3NlbmRfaGRycywKKwkJCQkJICAgaWMtPmlfc2VuZF9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX3JlY3ZfaGRycykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzLAorCQkJCQkgICBpYy0+aV9yZWN2X2hkcnNfZG1hKTsKKworCQlpZiAoaWMtPmlfYWNrKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAgIGljLT5pX2FjaywgaWMtPmlfYWNrX2RtYSk7CisKKwkJaWYgKGljLT5pX3NlbmRzKQorCQkJcmRzX2l3X3NlbmRfY2xlYXJfcmluZyhpYyk7CisJCWlmIChpYy0+aV9yZWN2cykKKwkJCXJkc19pd19yZWN2X2NsZWFyX3JpbmcoaWMpOworCisJCWlmIChpYy0+aV9jbV9pZC0+cXApCisJCQlyZG1hX2Rlc3Ryb3lfcXAoaWMtPmlfY21faWQpOworCQlpZiAoaWMtPmlfc2VuZF9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfc2VuZF9jcSk7CisJCWlmIChpYy0+aV9yZWN2X2NxKQorCQkJaWJfZGVzdHJveV9jcShpYy0+aV9yZWN2X2NxKTsKKworCQkvKgorCQkgKiBJZiBhc3NvY2lhdGVkIHdpdGggYW4gcmRzX2l3X2RldmljZToKKwkJICogCU1vdmUgY29ubmVjdGlvbiBiYWNrIHRvIHRoZSBub2RldiBsaXN0LgorCQkgKiAJUmVtb3ZlIGNtX2lkIGZyb20gdGhlIGRldmljZSBjbV9pZCBsaXN0LgorCQkgKi8KKwkJaWYgKGljLT5yZHNfaXdkZXYpIHsKKworCQkJc3Bpbl9sb2NrX2lycSgmaWMtPnJkc19pd2Rldi0+c3BpbmxvY2spOworCQkJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pd19ub2RlKSk7CisJCQlsaXN0X2RlbCgmaWMtPml3X25vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpYy0+cmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwkJCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCQkJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZpd19ub2Rldl9jb25ucyk7CisJCQlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCQkJcmRzX2l3X3JlbW92ZV9jbV9pZChpYy0+cmRzX2l3ZGV2LCBpYy0+aV9jbV9pZCk7CisJCQlpYy0+cmRzX2l3ZGV2ID0gTlVMTDsKKwkJfQorCisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlpYy0+aV9wZCA9IE5VTEw7CisJCWljLT5pX21yID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9jcSA9IE5VTEw7CisJCWljLT5pX3JlY3ZfY3EgPSBOVUxMOworCQlpYy0+aV9zZW5kX2hkcnMgPSBOVUxMOworCQlpYy0+aV9yZWN2X2hkcnMgPSBOVUxMOworCQlpYy0+aV9hY2sgPSBOVUxMOworCX0KKwlCVUdfT04oaWMtPnJkc19pd2Rldik7CisKKwkvKiBDbGVhciBwZW5kaW5nIHRyYW5zbWl0ICovCisJaWYgKGljLT5pX3JtKSB7CisJCXJkc19tZXNzYWdlX3B1dChpYy0+aV9ybSk7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwkvKiBDbGVhciB0aGUgQUNLIHN0YXRlICovCisJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pd19zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCAwKTsKKwlpYy0+aV9hY2tfcmVjdiA9IDA7CisKKwkvKiBDbGVhciBmbG93IGNvbnRyb2wgc3RhdGUgKi8KKwlpYy0+aV9mbG93Y3RsID0gMDsKKwlhdG9taWNfc2V0KCZpYy0+aV9jcmVkaXRzLCAwKTsKKworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2l3X3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWlmIChpYy0+aV9pd2luYykgeworCQlyZHNfaW5jX3B1dCgmaWMtPmlfaXdpbmMtPmlpX2luYyk7CisJCWljLT5pX2l3aW5jID0gTlVMTDsKKwl9CisKKwl2ZnJlZShpYy0+aV9zZW5kcyk7CisJaWMtPmlfc2VuZHMgPSBOVUxMOworCXZmcmVlKGljLT5pX3JlY3ZzKTsKKwlpYy0+aV9yZWN2cyA9IE5VTEw7CisJcmRzZGVidWcoInNodXRkb3duIGNvbXBsZXRlXG4iKTsKK30KKworaW50IHJkc19pd19jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFhYWCB0b28gbGF6eT8gKi8KKwlpYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChpYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZpYy0+aXdfbm9kZSk7CisJbXV0ZXhfaW5pdCgmaWMtPmlfcmVjdl9tdXRleCk7CisKKwkvKgorCSAqIHJkc19pd19jb25uX3NodXRkb3duKCkgd2FpdHMgZm9yIHRoZXNlIHRvIGJlIGVtcHRpZWQgc28gdGhleQorCSAqIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGNhbiBiZSBjYWxsZWQuCisJICovCisJcmRzX2l3X3JpbmdfaW5pdCgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyKTsKKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IpOworCisJaWMtPmNvbm4gPSBjb25uOworCWNvbm4tPmNfdHJhbnNwb3J0X2RhdGEgPSBpYzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpd19ub2Rldl9jb25uc19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZpd19ub2Rldl9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXdfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjb25uIGljICVwXG4iLCBjb25uLCBjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaXdfY29ubl9mcmVlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gYXJnOworCXJkc2RlYnVnKCJpYyAlcFxuIiwgaWMpOworCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7CisJa2ZyZWUoaWMpOworfQorCisvKgorICogQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAqLwordm9pZAorX19yZHNfaXdfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlyZHNfY29ubl9kcm9wKGNvbm4pOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnByaW50ayhmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yZG1hLmMgYi9uZXQvcmRzL2l3X3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzAyYThmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19yZG1hLmMKQEAgLTAsMCArMSw4ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgIml3LmgiCisKKworLyoKKyAqIFRoaXMgaXMgc3RvcmVkIGFzIG1yLT5yX3RyYW5zX3ByaXZhdGUuCisgKi8KK3N0cnVjdCByZHNfaXdfbXIgeworCXN0cnVjdCByZHNfaXdfZGV2aWNlCSpkZXZpY2U7CisJc3RydWN0IHJkc19pd19tcl9wb29sCSpwb29sOworCXN0cnVjdCByZG1hX2NtX2lkCSpjbV9pZDsKKworCXN0cnVjdCBpYl9tcgkqbXI7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqcGFnZV9saXN0OworCisJc3RydWN0IHJkc19pd19tYXBwaW5nCW1hcHBpbmc7CisJdW5zaWduZWQgY2hhcgkJcmVtYXBfY291bnQ7Cit9OworCisvKgorICogT3VyIG93biBsaXR0bGUgTVIgcG9vbAorICovCitzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgeworCXN0cnVjdCByZHNfaXdfZGV2aWNlCSpkZXZpY2U7CQkvKiBiYWNrIHB0ciB0byB0aGUgZGV2aWNlIHRoYXQgb3ducyB1cyAqLworCisJc3RydWN0IG11dGV4CQlmbHVzaF9sb2NrOwkJLyogc2VyaWFsaXplIGZtciBpbnZhbGlkYXRlICovCisJc3RydWN0IHdvcmtfc3RydWN0CWZsdXNoX3dvcmtlcjsJCS8qIGZsdXNoIHdvcmtlciAqLworCisJc3BpbmxvY2tfdAkJbGlzdF9sb2NrOwkJLyogcHJvdGVjdCB2YXJpYWJsZXMgYmVsb3cgKi8KKwlhdG9taWNfdAkJaXRlbV9jb3VudDsJCS8qIHRvdGFsICMgb2YgTVJzICovCisJYXRvbWljX3QJCWRpcnR5X2NvdW50OwkJLyogIyBkaXJ0eSBvZiBNUnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRpcnR5X2xpc3Q7CQkvKiBkaXJ0eSBtYXBwaW5ncyAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xlYW5fbGlzdDsJCS8qIHVudXNlZCAmIHVuYW1hcHBlZCBNUnMgKi8KKwlhdG9taWNfdAkJZnJlZV9waW5uZWQ7CQkvKiBtZW1vcnkgcGlubmVkIGJ5IGZyZWUgTVJzICovCisJdW5zaWduZWQgbG9uZwkJbWF4X21lc3NhZ2Vfc2l6ZTsJLyogaW4gcGFnZXMgKi8KKwl1bnNpZ25lZCBsb25nCQltYXhfaXRlbXM7CisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zX3NvZnQ7CisJdW5zaWduZWQgbG9uZwkJbWF4X2ZyZWVfcGlubmVkOworCWludAkJCW1heF9wYWdlczsKK307CisKK3N0YXRpYyBpbnQgcmRzX2l3X2ZsdXNoX21yX3Bvb2woc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpOworc3RhdGljIHZvaWQgcmRzX2l3X21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgaW50IHJkc19pd19pbml0X2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBzdHJ1Y3QgcmRzX2l3X21yICppYm1yKTsKK3N0YXRpYyBpbnQgcmRzX2l3X21hcF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCSAgc3RydWN0IHJkc19pd19tciAqaWJtciwKKwkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5lbnRzKTsKK3N0YXRpYyB2b2lkIHJkc19pd19mcmVlX2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBzdHJ1Y3QgcmRzX2l3X21yICppYm1yKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX2l3X3VubWFwX2Zhc3RyZWdfbGlzdChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkICp1bm1hcF9saXN0LAorCQkJc3RydWN0IGxpc3RfaGVhZCAqa2lsbF9saXN0KTsKK3N0YXRpYyB2b2lkIHJkc19pd19kZXN0cm95X2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBzdHJ1Y3QgcmRzX2l3X21yICppYm1yKTsKKworc3RhdGljIGludCByZHNfaXdfZ2V0X2RldmljZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2l3X2RldmljZSAqKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKipjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqaXdkZXY7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZDsKKworCSpyZHNfaXdkZXYgPSBOVUxMOworCSpjbV9pZCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl3ZGV2LCAmcmRzX2l3X2RldmljZXMsIGxpc3QpIHsKKwkJc3Bpbl9sb2NrX2lycSgmaXdkZXYtPnNwaW5sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpX2NtX2lkLCAmaXdkZXYtPmNtX2lkX2xpc3QsIGxpc3QpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc3JjX2FkZHIsICpkc3RfYWRkcjsKKworCQkJc3JjX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlfY21faWQtPmNtX2lkLT5yb3V0ZS5hZGRyLnNyY19hZGRyOworCQkJZHN0X2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlfY21faWQtPmNtX2lkLT5yb3V0ZS5hZGRyLmRzdF9hZGRyOworCisJCQlyZHNkZWJ1ZygibG9jYWwgaXBhZGRyID0gJXggcG9ydCAlZCwgIgorCQkJCSAicmVtb3RlIGlwYWRkciA9ICV4IHBvcnQgJWQiCisJCQkJICIuLmxvb2tpbmcgZm9yICV4IHBvcnQgJWQsICIKKwkJCQkgInJlbW90ZSBpcGFkZHIgPSAleCBwb3J0ICVkXG4iLAorCQkJCXNyY19hZGRyLT5zaW5fYWRkci5zX2FkZHIsCisJCQkJc3JjX2FkZHItPnNpbl9wb3J0LAorCQkJCWRzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHIsCisJCQkJZHN0X2FkZHItPnNpbl9wb3J0LAorCQkJCXJzLT5yc19ib3VuZF9hZGRyLAorCQkJCXJzLT5yc19ib3VuZF9wb3J0LAorCQkJCXJzLT5yc19jb25uX2FkZHIsCisJCQkJcnMtPnJzX2Nvbm5fcG9ydCk7CisjaWZkZWYgV09SS0lOR19UVVBMRV9ERVRFQ1RJT04KKwkJCWlmIChzcmNfYWRkci0+c2luX2FkZHIuc19hZGRyID09IHJzLT5yc19ib3VuZF9hZGRyICYmCisJCQkgICAgc3JjX2FkZHItPnNpbl9wb3J0ID09IHJzLT5yc19ib3VuZF9wb3J0ICYmCisJCQkgICAgZHN0X2FkZHItPnNpbl9hZGRyLnNfYWRkciA9PSBycy0+cnNfY29ubl9hZGRyICYmCisJCQkgICAgZHN0X2FkZHItPnNpbl9wb3J0ID09IHJzLT5yc19jb25uX3BvcnQpIHsKKyNlbHNlCisJCQkvKiBGSVhNRSAtIG5lZWRzIHRvIGNvbXBhcmUgdGhlIGxvY2FsIGFuZCByZW1vdGUKKwkJCSAqIGlwYWRkci9wb3J0IHR1cGxlLCBidXQgdGhlIGlwYWRkciBpcyB0aGUgb25seQorCQkJICogYXZhaWxhYmxlIGluZm9tYXRpb24gaW4gdGhlIHJkc19zb2NrIChhcyB0aGUgcmVzdCBhcmUKKwkJCSAqIHplcm8nZWQuICBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSBwcm9wZXJseSBwb3B1bGF0ZWQKKwkJCSAqIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLi4uCisJCQkgKi8KKwkJCWlmIChzcmNfYWRkci0+c2luX2FkZHIuc19hZGRyID09IHJzLT5yc19ib3VuZF9hZGRyKSB7CisjZW5kaWYKKwkJCQlzcGluX3VubG9ja19pcnEoJml3ZGV2LT5zcGlubG9jayk7CisJCQkJKnJkc19pd2RldiA9IGl3ZGV2OworCQkJCSpjbV9pZCA9IGlfY21faWQtPmNtX2lkOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmaXdkZXYtPnNwaW5sb2NrKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByZHNfaXdfYWRkX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2NtX2lkICppX2NtX2lkOworCisJaV9jbV9pZCA9IGttYWxsb2Moc2l6ZW9mICppX2NtX2lkLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlfY21faWQpCisJCXJldHVybiAtRU5PTUVNOworCisJaV9jbV9pZC0+Y21faWQgPSBjbV9pZDsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmlfY21faWQtPmxpc3QsICZyZHNfaXdkZXYtPmNtX2lkX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2NtX2lkICppX2NtX2lkOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpX2NtX2lkLCAmcmRzX2l3ZGV2LT5jbV9pZF9saXN0LCBsaXN0KSB7CisJCWlmIChpX2NtX2lkLT5jbV9pZCA9PSBjbV9pZCkgeworCQkJbGlzdF9kZWwoJmlfY21faWQtPmxpc3QpOworCQkJa2ZyZWUoaV9jbV9pZCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworfQorCisKK2ludCByZHNfaXdfdXBkYXRlX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19hZGRyLCAqZHN0X2FkZHI7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldl9vbGQ7CisJc3RydWN0IHJkc19zb2NrIHJzOworCXN0cnVjdCByZG1hX2NtX2lkICpwY21faWQ7CisJaW50IHJjOworCisJc3JjX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmNtX2lkLT5yb3V0ZS5hZGRyLnNyY19hZGRyOworCWRzdF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZjbV9pZC0+cm91dGUuYWRkci5kc3RfYWRkcjsKKworCXJzLnJzX2JvdW5kX2FkZHIgPSBzcmNfYWRkci0+c2luX2FkZHIuc19hZGRyOworCXJzLnJzX2JvdW5kX3BvcnQgPSBzcmNfYWRkci0+c2luX3BvcnQ7CisJcnMucnNfY29ubl9hZGRyID0gZHN0X2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKwlycy5yc19jb25uX3BvcnQgPSBkc3RfYWRkci0+c2luX3BvcnQ7CisKKwlyYyA9IHJkc19pd19nZXRfZGV2aWNlKCZycywgJnJkc19pd2Rldl9vbGQsICZwY21faWQpOworCWlmIChyYykKKwkJcmRzX2l3X3JlbW92ZV9jbV9pZChyZHNfaXdkZXYsIGNtX2lkKTsKKworCXJldHVybiByZHNfaXdfYWRkX2NtX2lkKHJkc19pd2RldiwgY21faWQpOworfQorCitpbnQgcmRzX2l3X2FkZF9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCS8qIGNvbm4gd2FzIHByZXZpb3VzbHkgb24gdGhlIG5vZGV2X2Nvbm5zX2xpc3QgKi8KKwlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaXdfbm9kZXZfY29ubnMpKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaWMtPml3X25vZGUpKTsKKwlsaXN0X2RlbCgmaWMtPml3X25vZGUpOworCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJnJkc19pd2Rldi0+Y29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJaWMtPnJkc19pd2RldiA9IHJkc19pd2RldjsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pd19yZW1vdmVfbm9kZXZfY29ubnModm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJbGlzdF9zcGxpY2UoJml3X25vZGV2X2Nvbm5zLCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpd19ub2Rldl9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGl3X25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsICpfaWM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X3NwbGljZSgmcmRzX2l3ZGV2LT5jb25uX2xpc3QsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd2Rldi0+Y29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaXdfbm9kZSkgeworCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9zY2F0dGVybGlzdChzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0ICpzZywKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpsaXN0LCB1bnNpZ25lZCBpbnQgc2dfbGVuKQoreworCXNnLT5saXN0ID0gbGlzdDsKKwlzZy0+bGVuID0gc2dfbGVuOworCXNnLT5kbWFfbGVuID0gMDsKKwlzZy0+ZG1hX25wYWdlcyA9IDA7CisJc2ctPmJ5dGVzID0gMDsKK30KKworc3RhdGljIHU2NCAqcmRzX2l3X21hcF9zY2F0dGVybGlzdChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LAorCQkJc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCAqc2csCisJCQl1bnNpZ25lZCBpbnQgZG1hX3BhZ2Vfc2hpZnQpCit7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gcmRzX2l3ZGV2LT5kZXY7CisJdTY0ICpkbWFfcGFnZXMgPSBOVUxMOworCXU2NCBkbWFfbWFzazsKKwl1bnNpZ25lZCBpbnQgZG1hX3BhZ2Vfc2l6ZTsKKwlpbnQgaSwgaiwgcmV0OworCisJZG1hX3BhZ2Vfc2l6ZSA9IDEgPDwgZG1hX3BhZ2Vfc2hpZnQ7CisJZG1hX21hc2sgPSBkbWFfcGFnZV9zaXplIC0gMTsKKworCVdBUk5fT04oc2ctPmRtYV9sZW4pOworCisJc2ctPmRtYV9sZW4gPSBpYl9kbWFfbWFwX3NnKGRldiwgc2ctPmxpc3QsIHNnLT5sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAodW5saWtlbHkoIXNnLT5kbWFfbGVuKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGRtYV9tYXBfc2cgZmFpbGVkIVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisJfQorCisJc2ctPmJ5dGVzID0gMDsKKwlzZy0+ZG1hX25wYWdlcyA9IDA7CisKKwlyZXQgPSAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCBzZy0+ZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnLT5saXN0W2ldKTsKKwkJdTY0IGVuZF9hZGRyOworCisJCXNnLT5ieXRlcyArPSBkbWFfbGVuOworCisJCWVuZF9hZGRyID0gZG1hX2FkZHIgKyBkbWFfbGVuOworCQlpZiAoZG1hX2FkZHIgJiBkbWFfbWFzaykgeworCQkJaWYgKGkgPiAwKQorCQkJCWdvdG8gb3V0X3VubWFwOworCQkJZG1hX2FkZHIgJj0gfmRtYV9tYXNrOworCQl9CisJCWlmIChlbmRfYWRkciAmIGRtYV9tYXNrKSB7CisJCQlpZiAoaSA8IHNnLT5kbWFfbGVuIC0gMSkKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJCWVuZF9hZGRyID0gKGVuZF9hZGRyICsgZG1hX21hc2spICYgfmRtYV9tYXNrOworCQl9CisKKwkJc2ctPmRtYV9ucGFnZXMgKz0gKGVuZF9hZGRyIC0gZG1hX2FkZHIpID4+IGRtYV9wYWdlX3NoaWZ0OworCX0KKworCS8qIE5vdyBnYXRoZXIgdGhlIGRtYSBhZGRycyBpbnRvIG9uZSBsaXN0ICovCisJaWYgKHNnLT5kbWFfbnBhZ2VzID4gZmFzdHJlZ19tZXNzYWdlX3NpemUpCisJCWdvdG8gb3V0X3VubWFwOworCisJZG1hX3BhZ2VzID0ga21hbGxvYyhzaXplb2YodTY0KSAqIHNnLT5kbWFfbnBhZ2VzLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRtYV9wYWdlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bm1hcDsKKwl9CisKKwlmb3IgKGkgPSBqID0gMDsgaSA8IHNnLT5kbWFfbGVuOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNnLT5saXN0W2ldKTsKKwkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZW5kX2FkZHI7CisKKwkJZW5kX2FkZHIgPSBkbWFfYWRkciArIGRtYV9sZW47CisJCWRtYV9hZGRyICY9IH5kbWFfbWFzazsKKwkJZm9yICg7IGRtYV9hZGRyIDwgZW5kX2FkZHI7IGRtYV9hZGRyICs9IGRtYV9wYWdlX3NpemUpCisJCQlkbWFfcGFnZXNbaisrXSA9IGRtYV9hZGRyOworCQlCVUdfT04oaiA+IHNnLT5kbWFfbnBhZ2VzKTsKKwl9CisKKwlyZXR1cm4gZG1hX3BhZ2VzOworCitvdXRfdW5tYXA6CisJaWJfZG1hX3VubWFwX3NnKHJkc19pd2Rldi0+ZGV2LCBzZy0+bGlzdCwgc2ctPmxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCXNnLT5kbWFfbGVuID0gMDsKKwlrZnJlZShkbWFfcGFnZXMpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKworc3RydWN0IHJkc19pd19tcl9wb29sICpyZHNfaXdfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2w7CisKKwlwb29sID0ga3phbGxvYyhzaXplb2YoKnBvb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2wpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiByZHNfaXdfY3JlYXRlX21yX3Bvb2wgYWxsb2MgZXJyb3JcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlwb29sLT5kZXZpY2UgPSByZHNfaXdkZXY7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmRpcnR5X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5jbGVhbl9saXN0KTsKKwltdXRleF9pbml0KCZwb29sLT5mbHVzaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcG9vbC0+bGlzdF9sb2NrKTsKKwlJTklUX1dPUksoJnBvb2wtPmZsdXNoX3dvcmtlciwgcmRzX2l3X21yX3Bvb2xfZmx1c2hfd29ya2VyKTsKKworCXBvb2wtPm1heF9tZXNzYWdlX3NpemUgPSBmYXN0cmVnX21lc3NhZ2Vfc2l6ZTsKKwlwb29sLT5tYXhfaXRlbXMgPSBmYXN0cmVnX3Bvb2xfc2l6ZTsKKwlwb29sLT5tYXhfZnJlZV9waW5uZWQgPSBwb29sLT5tYXhfaXRlbXMgKiBwb29sLT5tYXhfbWVzc2FnZV9zaXplIC8gNDsKKwlwb29sLT5tYXhfcGFnZXMgPSBmYXN0cmVnX21lc3NhZ2Vfc2l6ZTsKKworCS8qIFdlIG5ldmVyIGFsbG93IG1vcmUgdGhhbiBtYXhfaXRlbXMgTVJzIHRvIGJlIGFsbG9jYXRlZC4KKwkgKiBXaGVuIHdlIGV4Y2VlZCBtb3JlIHRoYW4gbWF4X2l0ZW1zX3NvZnQsIHdlIHN0YXJ0IGZyZWVpbmcKKwkgKiBpdGVtcyBtb3JlIGFnZ3Jlc3NpdmVseS4KKwkgKiBNYWtlIHN1cmUgdGhhdCBtYXhfaXRlbXMgPiBtYXhfaXRlbXNfc29mdCA+IG1heF9pdGVtcyAvIDIKKwkgKi8KKwlwb29sLT5tYXhfaXRlbXNfc29mdCA9IHBvb2wtPm1heF9pdGVtcyAqIDMgLyA0OworCisJcmV0dXJuIHBvb2w7Cit9CisKK3ZvaWQgcmRzX2l3X2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKQoreworCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IHJkc19pd2Rldi0+bXJfcG9vbDsKKworCWlpbmZvLT5yZG1hX21yX21heCA9IHBvb2wtPm1heF9pdGVtczsKKwlpaW5mby0+cmRtYV9tcl9zaXplID0gcG9vbC0+bWF4X3BhZ2VzOworfQorCit2b2lkIHJkc19pd19kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sKQoreworCWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOworCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDEpOworCUJVR19PTihhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCkpOworCUJVR19PTihhdG9taWNfcmVhZCgmcG9vbC0+ZnJlZV9waW5uZWQpKTsKKwlrZnJlZShwb29sKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmRzX2l3X21yICpyZHNfaXdfcmV1c2VfZm1yKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmcG9vbC0+Y2xlYW5fbGlzdCkpIHsKKwkJaWJtciA9IGxpc3RfZW50cnkocG9vbC0+Y2xlYW5fbGlzdC5uZXh0LCBzdHJ1Y3QgcmRzX2l3X21yLCBtYXBwaW5nLm1fbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmlibXItPm1hcHBpbmcubV9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaWJtcjsKK30KKworc3RhdGljIHN0cnVjdCByZHNfaXdfbXIgKnJkc19pd19hbGxvY19tcihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KQoreworCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IHJkc19pd2Rldi0+bXJfcG9vbDsKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gTlVMTDsKKwlpbnQgZXJyID0gMCwgaXRlciA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlpYm1yID0gcmRzX2l3X3JldXNlX2Ztcihwb29sKTsKKwkJaWYgKGlibXIpCisJCQlyZXR1cm4gaWJtcjsKKworCQkvKiBObyBjbGVhbiBNUnMgLSBub3cgd2UgaGF2ZSB0aGUgY2hvaWNlIG9mIGVpdGhlcgorCQkgKiBhbGxvY2F0aW5nIGEgZnJlc2ggTVIgdXAgdG8gdGhlIGxpbWl0IGltcG9zZWQgYnkgdGhlCisJCSAqIGRyaXZlciwgb3IgZmx1c2ggYW55IGRpcnR5IHVudXNlZCBNUnMuCisJCSAqIFdlIHRyeSB0byBhdm9pZCBzdGFsbGluZyBpbiB0aGUgc2VuZCBwYXRoIGlmIHBvc3NpYmxlLAorCQkgKiBzbyB3ZSBhbGxvY2F0ZSBhcyBsb25nIGFzIHdlJ3JlIGFsbG93ZWQgdG8uCisJCSAqCisJCSAqIFdlJ3JlIGZ1c3N5IHdpdGggZW5mb3JjaW5nIHRoZSBGTVIgbGltaXQsIHRob3VnaC4gSWYgdGhlIGRyaXZlcgorCQkgKiB0ZWxscyB1cyB3ZSBjYW4ndCB1c2UgbW9yZSB0aGFuIE4gZm1ycywgd2Ugc2hvdWxkbid0IHN0YXJ0CisJCSAqIGFyZ3Vpbmcgd2l0aCBpdCAqLworCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBvb2wtPml0ZW1fY291bnQpIDw9IHBvb2wtPm1heF9pdGVtcykKKwkJCWJyZWFrOworCisJCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCisJCWlmICgrK2l0ZXIgPiAyKSB7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9wb29sX2RlcGxldGVkKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCQl9CisKKwkJLyogV2UgZG8gaGF2ZSBzb21lIGVtcHR5IE1Scy4gRmx1c2ggdGhlbSBvdXQuICovCisJCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX3Bvb2xfd2FpdCk7CisJCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KKworCWlibXIgPSBremFsbG9jKHNpemVvZigqaWJtciksIEdGUF9LRVJORUwpOworCWlmICghaWJtcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ub19jaWdhcjsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmaWJtci0+bWFwcGluZy5tX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZpYm1yLT5tYXBwaW5nLm1fbGlzdCk7CisJaWJtci0+bWFwcGluZy5tX21yID0gaWJtcjsKKworCWVyciA9IHJkc19pd19pbml0X2Zhc3RyZWcocG9vbCwgaWJtcik7CisJaWYgKGVycikKKwkJZ290byBvdXRfbm9fY2lnYXI7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9hbGxvYyk7CisJcmV0dXJuIGlibXI7CisKK291dF9ub19jaWdhcjoKKwlpZiAoaWJtcikgeworCQlyZHNfaXdfZGVzdHJveV9mYXN0cmVnKHBvb2wsIGlibXIpOworCQlrZnJlZShpYm1yKTsKKwl9CisJYXRvbWljX2RlYygmcG9vbC0+aXRlbV9jb3VudCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCByZHNfaXdfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSB0cmFuc19wcml2YXRlOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYgPSBpYm1yLT5kZXZpY2U7CisKKwlzd2l0Y2ggKGRpcmVjdGlvbikgeworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlpYl9kbWFfc3luY19zZ19mb3JfY3B1KHJkc19pd2Rldi0+ZGV2LCBpYm1yLT5tYXBwaW5nLm1fc2cubGlzdCwKKwkJCWlibXItPm1hcHBpbmcubV9zZy5kbWFfbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZShyZHNfaXdkZXYtPmRldiwgaWJtci0+bWFwcGluZy5tX3NnLmxpc3QsCisJCQlpYm1yLT5tYXBwaW5nLm1fc2cuZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJkc19pd19mbHVzaF9nb2FsKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKQoreworCXVuc2lnbmVkIGludCBpdGVtX2NvdW50OworCisJaXRlbV9jb3VudCA9IGF0b21pY19yZWFkKCZwb29sLT5pdGVtX2NvdW50KTsKKwlpZiAoZnJlZV9hbGwpCisJCXJldHVybiBpdGVtX2NvdW50OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGbHVzaCBvdXIgcG9vbCBvZiBNUnMuCisgKiBBdCBhIG1pbmltdW0sIGFsbCBjdXJyZW50bHkgdW51c2VkIE1ScyBhcmUgdW5tYXBwZWQuCisgKiBJZiB0aGUgbnVtYmVyIG9mIE1ScyBhbGxvY2F0ZWQgZXhjZWVkcyB0aGUgbGltaXQsIHdlIGFsc28gdHJ5CisgKiB0byBmcmVlIGFzIG1hbnkgTVJzIGFzIG5lZWRlZCB0byBnZXQgYmFjayB0byB0aGlzIGxpbWl0LgorICovCitzdGF0aWMgaW50IHJkc19pd19mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKQoreworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIsICpuZXh0OworCUxJU1RfSEVBRCh1bm1hcF9saXN0KTsKKwlMSVNUX0hFQUQoa2lsbF9saXN0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBuZnJlZWQgPSAwLCBuY2xlYW5lZCA9IDAsIGZyZWVfZ29hbDsKKwlpbnQgcmV0ID0gMDsKKworCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX3Bvb2xfZmx1c2gpOworCisJbXV0ZXhfbG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJLyogR2V0IHRoZSBsaXN0IG9mIGFsbCBtYXBwaW5ncyB0byBiZSBkZXN0cm95ZWQgKi8KKwlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5kaXJ0eV9saXN0LCAmdW5tYXBfbGlzdCk7CisJaWYgKGZyZWVfYWxsKQorCQlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5jbGVhbl9saXN0LCAma2lsbF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWZyZWVfZ29hbCA9IHJkc19pd19mbHVzaF9nb2FsKHBvb2wsIGZyZWVfYWxsKTsKKworCS8qIEJhdGNoZWQgaW52YWxpZGF0ZSBvZiBkaXJ0eSBNUnMuCisJICogRm9yIEZNUiBiYXNlZCBNUnMsIHRoZSBtYXBwaW5ncyBvbiB0aGUgdW5tYXAgbGlzdCBhcmUKKwkgKiBhY3R1YWxseSBtZW1iZXJzIG9mIGFuIGlibXIgKGlibXItPm1hcHBpbmcpLiBUaGV5IGVpdGhlcgorCSAqIG1pZ3JhdGUgdG8gdGhlIGtpbGxfbGlzdCwgb3IgaGF2ZSBiZWVuIGNsZWFuZWQgYW5kIHNob3VsZCBiZQorCSAqIG1vdmVkIHRvIHRoZSBjbGVhbl9saXN0LgorCSAqIEZvciBmYXN0cmVncywgdGhleSB3aWxsIGJlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgYW5kCisJICogd2lsbCBiZSBkZXN0cm95ZWQgYnkgdGhlIHVubWFwIGZ1bmN0aW9uLgorCSAqLworCWlmICghbGlzdF9lbXB0eSgmdW5tYXBfbGlzdCkpIHsKKwkJbmNsZWFuZWQgPSByZHNfaXdfdW5tYXBfZmFzdHJlZ19saXN0KHBvb2wsICZ1bm1hcF9saXN0LCAma2lsbF9saXN0KTsKKwkJLyogSWYgd2UndmUgYmVlbiBhc2tlZCB0byBkZXN0cm95IGFsbCBNUnMsIG1vdmUgdGhvc2UKKwkJICogdGhhdCB3ZXJlIHNpbXBseSBjbGVhbmVkIHRvIHRoZSBraWxsIGxpc3QgKi8KKwkJaWYgKGZyZWVfYWxsKQorCQkJbGlzdF9zcGxpY2VfaW5pdCgmdW5tYXBfbGlzdCwgJmtpbGxfbGlzdCk7CisJfQorCisJLyogRGVzdHJveSBhbnkgTVJzIHRoYXQgYXJlIHBhc3QgdGhlaXIgYmVzdCBiZWZvcmUgZGF0ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYm1yLCBuZXh0LCAma2lsbF9saXN0LCBtYXBwaW5nLm1fbGlzdCkgeworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9mcmVlKTsKKwkJbGlzdF9kZWwoJmlibXItPm1hcHBpbmcubV9saXN0KTsKKwkJcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhwb29sLCBpYm1yKTsKKwkJa2ZyZWUoaWJtcik7CisJCW5mcmVlZCsrOworCX0KKworCS8qIEFueXRoaW5nIHRoYXQgcmVtYWlucyBhcmUgbGF1bmRlcmVkIGlibXJzLCB3aGljaCB3ZSBjYW4gYWRkCisJICogYmFjayB0byB0aGUgY2xlYW4gbGlzdC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnVubWFwX2xpc3QpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9zcGxpY2UoJnVubWFwX2xpc3QsICZwb29sLT5jbGVhbl9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJfQorCisJYXRvbWljX3N1YihuY2xlYW5lZCwgJnBvb2wtPmRpcnR5X2NvdW50KTsKKwlhdG9taWNfc3ViKG5mcmVlZCwgJnBvb2wtPml0ZW1fY291bnQpOworCisJbXV0ZXhfdW5sb2NrKCZwb29sLT5mbHVzaF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfbXJfcG9vbF9mbHVzaF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wsIGZsdXNoX3dvcmtlcik7CisKKwlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKK30KKwordm9pZCByZHNfaXdfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSkKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSBpYm1yLT5kZXZpY2UtPm1yX3Bvb2w7CisKKwlyZHNkZWJ1ZygiUkRTL0lXOiBmcmVlX21yIG5lbnRzICV1XG4iLCBpYm1yLT5tYXBwaW5nLm1fc2cubGVuKTsKKwlpZiAoIXBvb2wpCisJCXJldHVybjsKKworCS8qIFJldHVybiBpdCB0byB0aGUgcG9vbCdzIGZyZWUgbGlzdCAqLworCXJkc19pd19mcmVlX2Zhc3RyZWcocG9vbCwgaWJtcik7CisKKwkvKiBJZiB3ZSd2ZSBwaW5uZWQgdG9vIG1hbnkgcGFnZXMsIHJlcXVlc3QgYSBmbHVzaCAqLworCWlmIChhdG9taWNfcmVhZCgmcG9vbC0+ZnJlZV9waW5uZWQpID49IHBvb2wtPm1heF9mcmVlX3Bpbm5lZAorCSB8fCBhdG9taWNfcmVhZCgmcG9vbC0+ZGlydHlfY291bnQpID49IHBvb2wtPm1heF9pdGVtcyAvIDEwKQorCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisKKwlpZiAoaW52YWxpZGF0ZSkgeworCQlpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSkpIHsKKwkJCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCQl9IGVsc2UgeworCQkJLyogV2UgZ2V0IGhlcmUgaWYgdGhlIHVzZXIgY3JlYXRlZCBhIE1SIG1hcmtlZAorCQkJICogYXMgdXNlX29uY2UgYW5kIGludmFsaWRhdGUgYXQgdGhlIHNhbWUgdGltZS4gKi8KKwkJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcG9vbC0+Zmx1c2hfd29ya2VyKTsKKwkJfQorCX0KK30KKwordm9pZCByZHNfaXdfZmx1c2hfbXJzKHZvaWQpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRzX2l3ZGV2LCAmcmRzX2l3X2RldmljZXMsIGxpc3QpIHsKKwkJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gcmRzX2l3ZGV2LT5tcl9wb29sOworCisJCWlmIChwb29sKQorCQkJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJfQorfQorCit2b2lkICpyZHNfaXdfZ2V0X21yKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbmVudHMsCisJCSAgICBzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gTlVMTDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7CisJaW50IHJldDsKKworCXJldCA9IHJkc19pd19nZXRfZGV2aWNlKHJzLCAmcmRzX2l3ZGV2LCAmY21faWQpOworCWlmIChyZXQgfHwgIWNtX2lkKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghcmRzX2l3ZGV2LT5tcl9wb29sKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlibXIgPSByZHNfaXdfYWxsb2NfbXIocmRzX2l3ZGV2KTsKKwlpZiAoSVNfRVJSKGlibXIpKQorCQlyZXR1cm4gaWJtcjsKKworCWlibXItPmNtX2lkID0gY21faWQ7CisJaWJtci0+ZGV2aWNlID0gcmRzX2l3ZGV2OworCisJcmV0ID0gcmRzX2l3X21hcF9mYXN0cmVnKHJkc19pd2Rldi0+bXJfcG9vbCwgaWJtciwgc2csIG5lbnRzKTsKKwlpZiAocmV0ID09IDApCisJCSprZXlfcmV0ID0gaWJtci0+bXItPnJrZXk7CisJZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGZhaWxlZCB0byBtYXAgbXIgKGVycm5vPSVkKVxuIiwgcmV0KTsKKworb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKGlibXIpCisJCQlyZHNfaXdfZnJlZV9tcihpYm1yLCAwKTsKKwkJaWJtciA9IEVSUl9QVFIocmV0KTsKKwl9CisJcmV0dXJuIGlibXI7Cit9CisKKy8qCisgKiBpV0FSUCBmYXN0cmVnIGhhbmRsaW5nCisgKgorICogVGhlIGxpZmUgY3ljbGUgb2YgYSBmYXN0cmVnIHJlZ2lzdHJhdGlvbiBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbQorICogRk1Scy4KKyAqIFRoZSBpZGVhIGJlaGluZCBmYXN0cmVnIGlzIHRvIGhhdmUgb25lIE1SLCB0byB3aGljaCB3ZSBiaW5kIGRpZmZlcmVudAorICogbWFwcGluZ3Mgb3ZlciB0aW1lLiBUbyBhdm9pZCBzdGFsbGluZyBvbiB0aGUgZXhwZW5zaXZlIG1hcCBhbmQgaW52YWxpZGF0ZQorICogb3BlcmF0aW9ucywgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgcGlwZWxpbmVkIG9uIHRoZSBzYW1lIHNlbmQgcXVldWUgb24KKyAqIHdoaWNoIHdlIHdhbnQgdG8gc2VuZCB0aGUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByX2tleS4KKyAqCisgKiBUaGlzIGNyZWF0ZXMgYSBiaXQgb2YgYSBwcm9ibGVtIGZvciB1cywgYXMgd2UgZG8gbm90IGhhdmUgdGhlIGRlc3RpbmF0aW9uCisgKiBJUCBpbiBHRVRfTVIsIHNvIHRoZSBjb25uZWN0aW9uIG11c3QgYmUgc2V0dXAgcHJpb3IgdG8gdGhlIEdFVF9NUiBjYWxsIGZvcgorICogUkRNQSB0byBiZSBjb3JyZWN0bHkgc2V0dXAuICBJZiBhIGZhc3RyZWcgcmVxdWVzdCBpcyBwcmVzZW50LCByZHNfaXdfeG1pdAorICogd2lsbCB0cnkgdG8gcXVldWUgYSBMT0NBTF9JTlYgKGlmIG5lZWRlZCkgYW5kIGEgRkFTVF9SRUdfTVIgd29yayByZXF1ZXN0CisgKiBiZWZvcmUgcXVldWluZyB0aGUgU0VORC4gV2hlbiBjb21wbGV0aW9ucyBmb3IgdGhlc2UgYXJyaXZlLCB0aGV5IGFyZQorICogZGlzcGF0Y2hlZCB0byB0aGUgTVIgaGFzIGEgYml0IHNldCBzaG93aW5nIHRoYXQgUkRNYSBjYW4gYmUgcGVyZm9ybWVkLgorICoKKyAqIFRoZXJlIGlzIGFub3RoZXIgaW50ZXJlc3RpbmcgYXNwZWN0IHRoYXQncyByZWxhdGVkIHRvIGludmFsaWRhdGlvbi4KKyAqIFRoZSBhcHBsaWNhdGlvbiBjYW4gcmVxdWVzdCB0aGF0IGEgbWFwcGluZyBpcyBpbnZhbGlkYXRlZCBpbiBGUkVFX01SLgorICogVGhlIGV4cGVjdGF0aW9uIHRoZXJlIGlzIHRoYXQgdGhpcyBpbnZhbGlkYXRpb24gc3RlcCBpbmNsdWRlcyBBTEwKKyAqIFBSRVZJT1VTTFkgRlJFRUQgTVJzLgorICovCitzdGF0aWMgaW50IHJkc19pd19pbml0X2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiA9IHBvb2wtPmRldmljZTsKKwlzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0ICpwYWdlX2xpc3QgPSBOVUxMOworCXN0cnVjdCBpYl9tciAqbXI7CisJaW50IGVycjsKKworCW1yID0gaWJfYWxsb2NfZmFzdF9yZWdfbXIocmRzX2l3ZGV2LT5wZCwgcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSk7CisJaWYgKElTX0VSUihtcikpIHsKKwkJZXJyID0gUFRSX0VSUihtcik7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9hbGxvY19mYXN0X3JlZ19tciBmYWlsZWQgKGVycj0lZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogRklYTUUgLSB0aGlzIGlzIG92ZXJraWxsLCBidXQgbWFwcGluZy0+bV9zZy5kbWFfbGVuL21hcHBpbmctPm1fc2cuZG1hX25wYWdlcworCSAqIGlzIG5vdCBmaWxsZWQgaW4uCisJICovCisJcGFnZV9saXN0ID0gaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0KHJkc19pd2Rldi0+ZGV2LCBwb29sLT5tYXhfbWVzc2FnZV9zaXplKTsKKwlpZiAoSVNfRVJSKHBhZ2VfbGlzdCkpIHsKKwkJZXJyID0gUFRSX0VSUihwYWdlX2xpc3QpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0IGZhaWxlZCAoZXJyPSVkKVxuIiwgZXJyKTsKKwkJaWJfZGVyZWdfbXIobXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlibXItPnBhZ2VfbGlzdCA9IHBhZ2VfbGlzdDsKKwlpYm1yLT5tciA9IG1yOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJkc19pd19yZG1hX2J1aWxkX2Zhc3RyZWcoc3RydWN0IHJkc19pd19tYXBwaW5nICptYXBwaW5nKQoreworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSBtYXBwaW5nLT5tX21yOworCXN0cnVjdCBpYl9zZW5kX3dyIGZfd3IsICpmYWlsZWRfd3I7CisJaW50IHJldDsKKworCS8qCisJICogUGVyZm9ybSBhIFdSIGZvciB0aGUgZmFzdF9yZWdfbXIuIEVhY2ggaW5kaXZpZHVhbCBwYWdlCisJICogaW4gdGhlIHNnIGxpc3QgaXMgYWRkZWQgdG8gdGhlIGZhc3QgcmVnIHBhZ2UgbGlzdCBhbmQgcGxhY2VkCisJICogaW5zaWRlIHRoZSBmYXN0X3JlZ19tciBXUi4gIFRoZSBrZXkgdXNlZCBpcyBhIHJvbGxpbmcgOGJpdAorCSAqIGNvdW50ZXIsIHdoaWNoIHNob3VsZCBndWFyYW50ZWUgdW5pcXVlbmVzcy4KKwkgKi8KKwlpYl91cGRhdGVfZmFzdF9yZWdfa2V5KGlibXItPm1yLCBpYm1yLT5yZW1hcF9jb3VudCsrKTsKKwltYXBwaW5nLT5tX3JrZXkgPSBpYm1yLT5tci0+cmtleTsKKworCW1lbXNldCgmZl93ciwgMCwgc2l6ZW9mKGZfd3IpKTsKKwlmX3dyLndyX2lkID0gUkRTX0lXX0ZBU1RfUkVHX1dSX0lEOworCWZfd3Iub3Bjb2RlID0gSUJfV1JfRkFTVF9SRUdfTVI7CisJZl93ci53ci5mYXN0X3JlZy5sZW5ndGggPSBtYXBwaW5nLT5tX3NnLmJ5dGVzOworCWZfd3Iud3IuZmFzdF9yZWcucmtleSA9IG1hcHBpbmctPm1fcmtleTsKKwlmX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdCA9IGlibXItPnBhZ2VfbGlzdDsKKwlmX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBtYXBwaW5nLT5tX3NnLmRtYV9sZW47CisJZl93ci53ci5mYXN0X3JlZy5wYWdlX3NoaWZ0ID0gaWJtci0+ZGV2aWNlLT5wYWdlX3NoaWZ0OworCWZfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKKwkJCQlJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJCUlCX0FDQ0VTU19SRU1PVEVfV1JJVEU7CisJZl93ci53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0ID0gMDsKKwlmX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCisJZmFpbGVkX3dyID0gJmZfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGlibXItPmNtX2lkLT5xcCwgJmZfd3IsICZmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZfd3IpOworCWlmIChyZXQgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6ICVzOiVkIGliX3Bvc3Rfc2VuZCByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19pd19yZG1hX2Zhc3RyZWdfaW52KHN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJc3RydWN0IGliX3NlbmRfd3Igc193ciwgKmZhaWxlZF93cjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghaWJtci0+Y21faWQtPnFwIHx8ICFpYm1yLT5tcikKKwkJZ290byBvdXQ7CisKKwltZW1zZXQoJnNfd3IsIDAsIHNpemVvZihzX3dyKSk7CisJc193ci53cl9pZCA9IFJEU19JV19MT0NBTF9JTlZfV1JfSUQ7CisJc193ci5vcGNvZGUgPSBJQl9XUl9MT0NBTF9JTlY7CisJc193ci5leC5pbnZhbGlkYXRlX3JrZXkgPSBpYm1yLT5tci0+cmtleTsKKwlzX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCisJZmFpbGVkX3dyID0gJnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGlibXItPmNtX2lkLT5xcCwgJnNfd3IsICZmYWlsZWRfd3IpOworCWlmIChyZXQgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogJXM6JWQgaWJfcG9zdF9zZW5kIHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfaXdfbWFwX2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJc3RydWN0IHJkc19pd19tciAqaWJtciwKKwkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQl1bnNpZ25lZCBpbnQgc2dfbGVuKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYgPSBwb29sLT5kZXZpY2U7CisJc3RydWN0IHJkc19pd19tYXBwaW5nICptYXBwaW5nID0gJmlibXItPm1hcHBpbmc7CisJdTY0ICpkbWFfcGFnZXM7CisJaW50IGksIHJldCA9IDA7CisKKwlyZHNfaXdfc2V0X3NjYXR0ZXJsaXN0KCZtYXBwaW5nLT5tX3NnLCBzZywgc2dfbGVuKTsKKworCWRtYV9wYWdlcyA9IHJkc19pd19tYXBfc2NhdHRlcmxpc3QocmRzX2l3ZGV2LAorCQkJCSZtYXBwaW5nLT5tX3NnLAorCQkJCXJkc19pd2Rldi0+cGFnZV9zaGlmdCk7CisJaWYgKElTX0VSUihkbWFfcGFnZXMpKSB7CisJCXJldCA9IFBUUl9FUlIoZG1hX3BhZ2VzKTsKKwkJZG1hX3BhZ2VzID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1hcHBpbmctPm1fc2cuZG1hX2xlbiA+IHBvb2wtPm1heF9tZXNzYWdlX3NpemUpIHsKKwkJcmV0ID0gLUVNU0dTSVpFOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFwcGluZy0+bV9zZy5kbWFfbnBhZ2VzOyArK2kpCisJCWlibXItPnBhZ2VfbGlzdC0+cGFnZV9saXN0W2ldID0gZG1hX3BhZ2VzW2ldOworCisJcmV0ID0gcmRzX2l3X3JkbWFfYnVpbGRfZmFzdHJlZyhtYXBwaW5nKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX3VzZWQpOworCitvdXQ6CisJa2ZyZWUoZG1hX3BhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAiRnJlZSIgYSBmYXN0cmVnIE1SLgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfZnJlZV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJc3RydWN0IHJkc19pd19tciAqaWJtcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlpZiAoIWlibXItPm1hcHBpbmcubV9zZy5kbWFfbGVuKQorCQlyZXR1cm47CisKKwlyZXQgPSByZHNfaXdfcmRtYV9mYXN0cmVnX2ludihpYm1yKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwkvKiBUcnkgdG8gcG9zdCB0aGUgTE9DQUxfSU5WIFdSIHRvIHRoZSBxdWV1ZS4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2FkZF90YWlsKCZpYm1yLT5tYXBwaW5nLm1fbGlzdCwgJnBvb2wtPmRpcnR5X2xpc3QpOworCWF0b21pY19hZGQoaWJtci0+bWFwcGluZy5tX3NnLmxlbiwgJnBvb2wtPmZyZWVfcGlubmVkKTsKKwlhdG9taWNfaW5jKCZwb29sLT5kaXJ0eV9jb3VudCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCByZHNfaXdfdW5tYXBfZmFzdHJlZ19saXN0KHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICp1bm1hcF9saXN0LAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmtpbGxfbGlzdCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X21hcHBpbmcgKm1hcHBpbmcsICpuZXh0OworCXVuc2lnbmVkIGludCBuY2xlYW5lZCA9IDA7CisJTElTVF9IRUFEKGxhdW5kZXJlZCk7CisKKwkvKiBCYXRjaGVkIGludmFsaWRhdGlvbiBvZiBmYXN0cmVnIE1Scy4KKwkgKiBXaHkgZG8gd2UgZG8gaXQgdGhpcyB3YXksIGV2ZW4gdGhvdWdoIHdlIGNvdWxkIHBpcGVsaW5lIHVubWFwCisJICogYW5kIHJlbWFwPyBUaGUgcmVhc29uIGlzIHRoZSBhcHBsaWNhdGlvbiBzZW1hbnRpY3MgLSB3aGVuIHRoZQorCSAqIGFwcGxpY2F0aW9uIHJlcXVlc3RzIGFuIGludmFsaWRhdGlvbiBvZiBNUnMsIGl0IGV4cGVjdHMgYWxsCisJICogcHJldmlvdXNseSByZWxlYXNlZCBSX0tleXMgdG8gYmVjb21lIGludmFsaWQuCisJICoKKwkgKiBJZiB3ZSBpbXBsZW1lbnQgTVIgcmV1c2UgbmFpdmVseSwgd2UgcmlzayBtZW1vcnkgY29ycnVwdGlvbgorCSAqICh0aGlzIGhhcyBhY3R1YWxseSBiZWVuIG9ic2VydmVkKS4gU28gdGhlIGRlZmF1bHQgYmVoYXZpb3IKKwkgKiByZXF1aXJlcyB0aGF0IGEgTVIgZ29lcyB0aHJvdWdoIGFuIGV4cGxpY2l0IHVubWFwIG9wZXJhdGlvbiBiZWZvcmUKKwkgKiB3ZSBjYW4gcmV1c2UgaXQgYWdhaW4uCisJICoKKwkgKiBXZSBjb3VsZCBwcm9iYWJseSBpbXByb3ZlIG9uIHRoaXMgYSBsaXR0bGUsIGJ5IGFsbG93aW5nIGltbWVkaWF0ZQorCSAqIHJldXNlIG9mIGEgTVIgb24gdGhlIHNhbWUgc29ja2V0IChlZyB5b3UgY291bGQgYWRkIHNtYWxsCisJICogY2FjaGUgb2YgdW51c2VkIE1ScyB0byBzdHJjdCByZHNfc29ja2V0IC0gR0VUX01SIGNvdWxkIGdyYWIgb25lCisJICogb2YgdGhlc2Ugd2l0aG91dCByZXF1aXJpbmcgYW4gZXhwbGljaXQgaW52YWxpZGF0ZSkuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KHVubWFwX2xpc3QpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWFwcGluZywgbmV4dCwgdW5tYXBfbGlzdCwgbV9saXN0KSB7CisJCQlsaXN0X21vdmUoJm1hcHBpbmctPm1fbGlzdCwgJmxhdW5kZXJlZCk7CisJCQluY2xlYW5lZCsrOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCX0KKworCS8qIE1vdmUgYWxsIGxhdW5kZXJlZCBtYXBwaW5ncyBiYWNrIHRvIHRoZSB1bm1hcCBsaXN0LgorCSAqIFdlIGRvIG5vdCBraWxsIGFueSBXUnMgcmlnaHQgbm93IC0gaXQgZG9lc24ndCBzZWVtIHRoZQorCSAqIGZhc3RyZWcgQVBJIGhhcyBhIG1heF9yZW1hcCBsaW1pdC4gKi8KKwlsaXN0X3NwbGljZV9pbml0KCZsYXVuZGVyZWQsIHVubWFwX2xpc3QpOworCisJcmV0dXJuIG5jbGVhbmVkOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfZGVzdHJveV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJc3RydWN0IHJkc19pd19tciAqaWJtcikKK3sKKwlpZiAoaWJtci0+cGFnZV9saXN0KQorCQlpYl9mcmVlX2Zhc3RfcmVnX3BhZ2VfbGlzdChpYm1yLT5wYWdlX2xpc3QpOworCWlmIChpYm1yLT5tcikKKwkJaWJfZGVyZWdfbXIoaWJtci0+bXIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yZWN2LmMgYi9uZXQvcmRzL2l3X3JlY3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTkzMWYwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19yZWN2LmMKQEAgLTAsMCArMSw4NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pd19pbmNvbWluZ19zbGFiOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfaXdfZnJhZ19zbGFiOworc3RhdGljIGF0b21pY190CXJkc19pd19hbGxvY2F0aW9uID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyB2b2lkIHJkc19pd19mcmFnX2Ryb3BfcGFnZShzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZykKK3sKKwlyZHNkZWJ1ZygiZnJhZyAlcCBwYWdlICVwXG4iLCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCV9fZnJlZV9wYWdlKGZyYWctPmZfcGFnZSk7CisJZnJhZy0+Zl9wYWdlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2ZyYWdfZnJlZShzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZykKK3sKKwlyZHNkZWJ1ZygiZnJhZyAlcCBwYWdlICVwXG4iLCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCUJVR19PTihmcmFnLT5mX3BhZ2UgIT0gTlVMTCk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19pd19mcmFnX3NsYWIsIGZyYWcpOworfQorCisvKgorICogV2UgbWFwIGEgcGFnZSBhdCBhIHRpbWUuICBJdHMgZnJhZ21lbnRzIGFyZSBwb3N0ZWQgaW4gb3JkZXIuICBUaGlzCisgKiBpcyBjYWxsZWQgaW4gZnJhZ21lbnQgb3JkZXIgYXMgdGhlIGZyYWdtZW50cyBnZXQgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KKyAqIE9ubHkgdGhlIGxhc3QgZnJhZyBpbiB0aGUgcGFnZSBwZXJmb3JtcyB0aGUgdW5tYXBwaW5nLgorICoKKyAqIEl0J3MgT0sgZm9yIHJpbmcgY2xlYW51cCB0byBjYWxsIHRoaXMgaW4gd2hhdGV2ZXIgb3JkZXIgaXQgbGlrZXMgYmVjYXVzZQorICogRE1BIGlzIG5vdCBpbiBmbGlnaHQgYW5kIHNvIHdlIGNhbiB1bm1hcCB3aGlsZSBvdGhlciByaW5nIGVudHJpZXMgc3RpbGwKKyAqIGhvbGQgcGFnZSByZWZlcmVuY2VzIGluIHRoZWlyIGZyYWdzLgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfcmVjdl91bm1hcF9wYWdlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkJICAgc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YpCit7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcgPSByZWN2LT5yX2ZyYWc7CisKKwlyZHNkZWJ1ZygicmVjdiAlcCBmcmFnICVwIHBhZ2UgJXBcbiIsIHJlY3YsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJaWYgKGZyYWctPmZfbWFwcGVkKQorCQlpYl9kbWFfdW5tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJICAgICAgIGZyYWctPmZfbWFwcGVkLAorCQkJICAgICAgIFJEU19GUkFHX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJZnJhZy0+Zl9tYXBwZWQgPSAwOworfQorCit2b2lkIHJkc19pd19yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2OworCXUzMiBpOworCisJZm9yIChpID0gMCwgcmVjdiA9IGljLT5pX3JlY3ZzOyBpIDwgaWMtPmlfcmVjdl9yaW5nLndfbnI7IGkrKywgcmVjdisrKSB7CisJCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCQlyZWN2LT5yX2l3aW5jID0gTlVMTDsKKwkJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCQlyZWN2LT5yX3dyLm5leHQgPSBOVUxMOworCQlyZWN2LT5yX3dyLndyX2lkID0gaTsKKwkJcmVjdi0+cl93ci5zZ19saXN0ID0gcmVjdi0+cl9zZ2U7CisJCXJlY3YtPnJfd3IubnVtX3NnZSA9IFJEU19JV19SRUNWX1NHRTsKKworCQlzZ2UgPSByZHNfaXdfZGF0YV9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwkJc2dlLT5hZGRyID0gMDsKKwkJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCQlzZ2UtPmxrZXkgPSAwOworCisJCXNnZSA9IHJkc19pd19oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3JlY3ZfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaXdfcmVjdl9jbGVhcl9vbmUoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCQkgIHN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2KQoreworCWlmIChyZWN2LT5yX2l3aW5jKSB7CisJCXJkc19pbmNfcHV0KCZyZWN2LT5yX2l3aW5jLT5paV9pbmMpOworCQlyZWN2LT5yX2l3aW5jID0gTlVMTDsKKwl9CisJaWYgKHJlY3YtPnJfZnJhZykgeworCQlyZHNfaXdfcmVjdl91bm1hcF9wYWdlKGljLCByZWN2KTsKKwkJaWYgKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKQorCQkJcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKHJlY3YtPnJfZnJhZyk7CisJCXJkc19pd19mcmFnX2ZyZWUocmVjdi0+cl9mcmFnKTsKKwkJcmVjdi0+cl9mcmFnID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgcmRzX2l3X3JlY3ZfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8IGljLT5pX3JlY3ZfcmluZy53X25yOyBpKyspCisJCXJkc19pd19yZWN2X2NsZWFyX29uZShpYywgJmljLT5pX3JlY3ZzW2ldKTsKKworCWlmIChpYy0+aV9mcmFnLmZfcGFnZSkKKwkJcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKCZpYy0+aV9mcmFnKTsKK30KKworc3RhdGljIGludCByZHNfaXdfcmVjdl9yZWZpbGxfb25lKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgIHN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2LAorCQkJCSAgZ2ZwX3Qga3B0cl9nZnAsIGdmcF90IHBhZ2VfZ2ZwKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJc3RydWN0IGliX3NnZSAqc2dlOworCWludCByZXQgPSAtRU5PTUVNOworCisJaWYgKHJlY3YtPnJfaXdpbmMgPT0gTlVMTCkgeworCQlpZiAoYXRvbWljX3JlYWQoJnJkc19pd19hbGxvY2F0aW9uKSA+PSByZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24pIHsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9hbGxvY19saW1pdCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZWN2LT5yX2l3aW5jID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfaXdfaW5jb21pbmdfc2xhYiwKKwkJCQkJCSBrcHRyX2dmcCk7CisJCWlmIChyZWN2LT5yX2l3aW5jID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJYXRvbWljX2luYygmcmRzX2l3X2FsbG9jYXRpb24pOworCQlJTklUX0xJU1RfSEVBRCgmcmVjdi0+cl9pd2luYy0+aWlfZnJhZ3MpOworCQlyZHNfaW5jX2luaXQoJnJlY3YtPnJfaXdpbmMtPmlpX2luYywgY29ubiwgY29ubi0+Y19mYWRkcik7CisJfQorCisJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKSB7CisJCXJlY3YtPnJfZnJhZyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2l3X2ZyYWdfc2xhYiwga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9mcmFnID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfZnJhZy0+Zl9pdGVtKTsKKwkJcmVjdi0+cl9mcmFnLT5mX3BhZ2UgPSBOVUxMOworCX0KKworCWlmIChpYy0+aV9mcmFnLmZfcGFnZSA9PSBOVUxMKSB7CisJCWljLT5pX2ZyYWcuZl9wYWdlID0gYWxsb2NfcGFnZShwYWdlX2dmcCk7CisJCWlmIChpYy0+aV9mcmFnLmZfcGFnZSA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgPSAwOworCX0KKworCWRtYV9hZGRyID0gaWJfZG1hX21hcF9wYWdlKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkJICBpYy0+aV9mcmFnLmZfcGFnZSwKKwkJCQkgIGljLT5pX2ZyYWcuZl9vZmZzZXQsCisJCQkJICBSRFNfRlJBR19TSVpFLAorCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoaWMtPmlfY21faWQtPmRldmljZSwgZG1hX2FkZHIpKQorCQlnb3RvIG91dDsKKworCS8qCisJICogT25jZSB3ZSBnZXQgdGhlIFJEU19QQUdFX0xBU1RfT0ZGIGZyYWcgdGhlbiByZHNfaXdfZnJhZ191bm1hcCgpCisJICogbXVzdCBiZSBjYWxsZWQgb24gdGhpcyByZWN2LiAgVGhpcyBoYXBwZW5zIGFzIGNvbXBsZXRpb25zIGhpdAorCSAqIGluIG9yZGVyIG9yIG9uIGNvbm5lY3Rpb24gc2h1dGRvd24uCisJICovCisJcmVjdi0+cl9mcmFnLT5mX3BhZ2UgPSBpYy0+aV9mcmFnLmZfcGFnZTsKKwlyZWN2LT5yX2ZyYWctPmZfb2Zmc2V0ID0gaWMtPmlfZnJhZy5mX29mZnNldDsKKwlyZWN2LT5yX2ZyYWctPmZfbWFwcGVkID0gZG1hX2FkZHI7CisKKwlzZ2UgPSByZHNfaXdfZGF0YV9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBkbWFfYWRkcjsKKwlzZ2UtPmxlbmd0aCA9IFJEU19GUkFHX1NJWkU7CisKKwlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCXNnZS0+YWRkciA9IGljLT5pX3JlY3ZfaGRyc19kbWEgKyAocmVjdiAtIGljLT5pX3JlY3ZzKSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJZ2V0X3BhZ2UocmVjdi0+cl9mcmFnLT5mX3BhZ2UpOworCisJaWYgKGljLT5pX2ZyYWcuZl9vZmZzZXQgPCBSRFNfUEFHRV9MQVNUX09GRikgeworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ICs9IFJEU19GUkFHX1NJWkU7CisJfSBlbHNlIHsKKwkJcHV0X3BhZ2UoaWMtPmlfZnJhZy5mX3BhZ2UpOworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IE5VTEw7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgPSAwOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgdHJpZXMgdG8gYWxsb2NhdGUgYW5kIHBvc3QgdW51c2VkIHdvcmsgcmVxdWVzdHMgYWZ0ZXIgbWFraW5nIHN1cmUgdGhhdAorICogdGhleSBoYXZlIGFsbCB0aGUgYWxsb2NhdGlvbnMgdGhleSBuZWVkIHRvIHF1ZXVlIHJlY2VpdmVkIGZyYWdtZW50cyBpbnRvCisgKiBzb2NrZXRzLiAgVGhlIGlfcmVjdl9tdXRleCBpcyBoZWxkIGhlcmUgc28gdGhhdCByaW5nX2FsbG9jIGFuZCBfdW5hbGxvYworICogcGFpcnMgZG9uJ3QgZ28gdW5tYXRjaGVkLgorICoKKyAqIC0xIGlzIHJldHVybmVkIGlmIHBvc3RpbmcgZmFpbHMgZHVlIHRvIHRlbXBvcmFyeSByZXNvdXJjZSBleGhhdXN0aW9uLgorICovCitpbnQgcmRzX2l3X3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3Qga3B0cl9nZnAsCisJCSAgICAgICBnZnBfdCBwYWdlX2dmcCwgaW50IHByZWZpbGwpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3Y7CisJc3RydWN0IGliX3JlY3Zfd3IgKmZhaWxlZF93cjsKKwl1bnNpZ25lZCBpbnQgcG9zdGVkID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgcG9zOworCisJd2hpbGUgKChwcmVmaWxsIHx8IHJkc19jb25uX3VwKGNvbm4pKQorCQkJJiYgcmRzX2l3X3JpbmdfYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSwgJnBvcykpIHsKKwkJaWYgKHBvcyA+PSBpYy0+aV9yZWN2X3Jpbmcud19ucikgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBcmdoIC0gcmluZyBhbGxvYyByZXR1cm5lZCBwb3M9JXVcbiIsCisJCQkJCXBvcyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlyZWN2ID0gJmljLT5pX3JlY3ZzW3Bvc107CisJCXJldCA9IHJkc19pd19yZWN2X3JlZmlsbF9vbmUoY29ubiwgcmVjdiwga3B0cl9nZnAsIHBhZ2VfZ2ZwKTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFhYWCB3aGVuIGNhbiB0aGlzIGZhaWw/ICovCisJCXJldCA9IGliX3Bvc3RfcmVjdihpYy0+aV9jbV9pZC0+cXAsICZyZWN2LT5yX3dyLCAmZmFpbGVkX3dyKTsKKwkJcmRzZGVidWcoInJlY3YgJXAgaXdpbmMgJXAgcGFnZSAlcCBhZGRyICVsdSByZXQgJWRcbiIsIHJlY3YsCisJCQkgcmVjdi0+cl9pd2luYywgcmVjdi0+cl9mcmFnLT5mX3BhZ2UsCisJCQkgKGxvbmcpIHJlY3YtPnJfZnJhZy0+Zl9tYXBwZWQsIHJldCk7CisJCWlmIChyZXQpIHsKKwkJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZWN2IHBvc3Qgb24gIgorCQkJICAgICAgICIlcEk0IHJldHVybmVkICVkLCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwgJmNvbm4tPmNfZmFkZHIsCisJCQkgICAgICAgcmV0KTsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQlwb3N0ZWQrKzsKKwl9CisKKwkvKiBXZSdyZSBkb2luZyBmbG93IGNvbnRyb2wgLSB1cGRhdGUgdGhlIHdpbmRvdy4gKi8KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBwb3N0ZWQpCisJCXJkc19pd19hZHZlcnRpc2VfY3JlZGl0cyhjb25uLCBwb3N0ZWQpOworCisJaWYgKHJldCkKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfcmVjdl9yaW5nLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pd19pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpwb3M7CisKKwlpd2luYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfaXdfaW5jb21pbmcsIGlpX2luYyk7CisJcmRzZGVidWcoInB1cmdpbmcgaXdpbmMgJXAgaW5jICVwXG4iLCBpd2luYywgaW5jKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmcmFnLCBwb3MsICZpd2luYy0+aWlfZnJhZ3MsIGZfaXRlbSkgeworCQlsaXN0X2RlbF9pbml0KCZmcmFnLT5mX2l0ZW0pOworCQlyZHNfaXdfZnJhZ19kcm9wX3BhZ2UoZnJhZyk7CisJCXJkc19pd19mcmFnX2ZyZWUoZnJhZyk7CisJfQorfQorCit2b2lkIHJkc19pd19pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmM7CisKKwlpd2luYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfaXdfaW5jb21pbmcsIGlpX2luYyk7CisKKwlyZHNfaXdfaW5jX3B1cmdlKGluYyk7CisJcmRzZGVidWcoImZyZWVpbmcgaXdpbmMgJXAgaW5jICVwXG4iLCBpd2luYywgaW5jKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJml3aW5jLT5paV9mcmFncykpOworCWttZW1fY2FjaGVfZnJlZShyZHNfaXdfaW5jb21pbmdfc2xhYiwgaXdpbmMpOworCWF0b21pY19kZWMoJnJkc19pd19hbGxvY2F0aW9uKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnJkc19pd19hbGxvY2F0aW9uKSA8IDApOworfQorCitpbnQgcmRzX2l3X2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwKKwkJCSAgICBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgaW92ZWMgKmlvdiA9IGZpcnN0X2lvdjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBmcmFnX29mZiA9IDA7CisJdW5zaWduZWQgbG9uZyBpb3Zfb2ZmID0gMDsKKwlpbnQgY29waWVkID0gMDsKKwlpbnQgcmV0OworCXUzMiBsZW47CisKKwlpd2luYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfaXdfaW5jb21pbmcsIGlpX2luYyk7CisJZnJhZyA9IGxpc3RfZW50cnkoaXdpbmMtPmlpX2ZyYWdzLm5leHQsIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCWxlbiA9IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pOworCisJd2hpbGUgKGNvcGllZCA8IHNpemUgJiYgY29waWVkIDwgbGVuKSB7CisJCWlmIChmcmFnX29mZiA9PSBSRFNfRlJBR19TSVpFKSB7CisJCQlmcmFnID0gbGlzdF9lbnRyeShmcmFnLT5mX2l0ZW0ubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwkJCWZyYWdfb2ZmID0gMDsKKwkJfQorCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIFJEU19GUkFHX1NJWkUgLSBmcmFnX29mZik7CisJCXRvX2NvcHkgPSBtaW5fdChzaXplX3QsIHRvX2NvcHksIHNpemUgLSBjb3BpZWQpOworCQl0b19jb3B5ID0gbWluX3QodW5zaWduZWQgbG9uZywgdG9fY29weSwgbGVuIC0gY29waWVkKTsKKworCQlyZHNkZWJ1ZygiJWx1IGJ5dGVzIHRvIHVzZXIgWyVwLCAlenVdICsgJWx1IGZyb20gZnJhZyAiCisJCQkgIlslcCwgJWx1XSArICVsdVxuIiwKKwkJCSB0b19jb3B5LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4sIGlvdl9vZmYsCisJCQkgZnJhZy0+Zl9wYWdlLCBmcmFnLT5mX29mZnNldCwgZnJhZ19vZmYpOworCisJCS8qIFhYWCBuZWVkcyArIG9mZnNldCBmb3IgbXVsdGlwbGUgcmVjdnMgcGVyIHBhZ2UgKi8KKwkJcmV0ID0gcmRzX3BhZ2VfY29weV90b191c2VyKGZyYWctPmZfcGFnZSwKKwkJCQkJICAgIGZyYWctPmZfb2Zmc2V0ICsgZnJhZ19vZmYsCisJCQkJCSAgICBpb3YtPmlvdl9iYXNlICsgaW92X29mZiwKKwkJCQkJICAgIHRvX2NvcHkpOworCQlpZiAocmV0KSB7CisJCQljb3BpZWQgPSByZXQ7CisJCQlicmVhazsKKwkJfQorCisJCWlvdl9vZmYgKz0gdG9fY29weTsKKwkJZnJhZ19vZmYgKz0gdG9fY29weTsKKwkJY29waWVkICs9IHRvX2NvcHk7CisJfQorCisJcmV0dXJuIGNvcGllZDsKK30KKworLyogaWMgc3RhcnRzIG91dCBremFsbG9jKCllZCAqLwordm9pZCByZHNfaXdfcmVjdl9pbml0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCBpYl9zZW5kX3dyICp3ciA9ICZpYy0+aV9hY2tfd3I7CisJc3RydWN0IGliX3NnZSAqc2dlID0gJmljLT5pX2Fja19zZ2U7CisKKwlzZ2UtPmFkZHIgPSBpYy0+aV9hY2tfZG1hOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxrZXkgPSByZHNfaXdfbG9jYWxfZG1hX2xrZXkoaWMpOworCisJd3ItPnNnX2xpc3QgPSBzZ2U7CisJd3ItPm51bV9zZ2UgPSAxOworCXdyLT5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXdyLT53cl9pZCA9IFJEU19JV19BQ0tfV1JfSUQ7CisJd3ItPnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7Cit9CisKKy8qCisgKiBZb3UnZCB0aGluayB0aGF0IHdpdGggcmVsaWFibGUgSUIgY29ubmVjdGlvbnMgeW91IHdvdWxkbid0IG5lZWQgdG8gYWNrCisgKiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgSUIgaGFyZHdhcmUgZ2VuZXJhdGVzCisgKiBhbiBhY2sgbWVzc2FnZSBiZWZvcmUgaXQgaGFzIERNQWVkIHRoZSBtZXNzYWdlIGludG8gbWVtb3J5LiAgVGhpcyBjcmVhdGVzIGEKKyAqIHBvdGVudGlhbCBtZXNzYWdlIGxvc3MgaWYgdGhlIEhDQSBpcyBkaXNhYmxlZCBmb3IgYW55IHJlYXNvbiBiZXR3ZWVuIHdoZW4gaXQKKyAqIHNlbmRzIHRoZSBhY2sgYW5kIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBETUFlZCBhbmQgcHJvY2Vzc2VkLiAgVGhpcyBpcyBvbmx5IGEKKyAqIHBvdGVudGlhbCBpc3N1ZSBpZiBhbm90aGVyIEhDQSBpcyBhdmFpbGFibGUgZm9yIGZhaWwtb3Zlci4KKyAqCisgKiBXaGVuIHRoZSByZW1vdGUgaG9zdCByZWNlaXZlcyBvdXIgYWNrIHRoZXknbGwgZnJlZSB0aGUgc2VudCBtZXNzYWdlIGZyb20KKyAqIHRoZWlyIHNlbmQgcXVldWUuICBUbyBkZWNyZWFzZSB0aGUgbGF0ZW5jeSBvZiB0aGlzIHdlIGFsd2F5cyBzZW5kIGFuIGFjaworICogaW1tZWRpYXRlbHkgYWZ0ZXIgd2UndmUgcmVjZWl2ZWQgbWVzc2FnZXMuCisgKgorICogRm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgaGF2ZSBvbmUgYWNrIGluIGZsaWdodCBhdCBhIHRpbWUuICBUaGlzIHB1dHMKKyAqIHByZXNzdXJlIG9uIHNlbmRlcnMgdG8gaGF2ZSBkZWVwIGVub3VnaCBzZW5kIHF1ZXVlcyB0byBhYnNvcmIgdGhlIGxhdGVuY3kgb2YKKyAqIGEgc2luZ2xlIGFjayBmcmFtZSBiZWluZyBpbiBmbGlnaHQuICBUaGlzIG1pZ2h0IG5vdCBiZSBnb29kIGVub3VnaC4KKyAqCisgKiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmUgYSBsb25nLWxpdmVkIHNlbmRfd3IgYW5kIHNnZSB3aGljaCBwb2ludCB0byBhCisgKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhY2sgZnJhbWUuICBUaGlzIGFjayB3ciBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSByaW5nCisgKiBhY2NvdW50aW5nIHRoYXQgdGhlIHR4IGFuZCByeCB3cnMgZG8uICBUaGUgUVAgYXR0cmlidXRlIHNwZWNpZmljYWxseSBtYWtlcworICogcm9vbSBmb3IgaXQgYmV5b25kIHRoZSByaW5nIHNpemUuICBTZW5kIGNvbXBsZXRpb24gbm90aWNlcyBpdHMgc3BlY2lhbAorICogd3JfaWQgYW5kIGF2b2lkcyB3b3JraW5nIHdpdGggdGhlIHJpbmcgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1NjQgc2VxLAorCQkJCWludCBhY2tfcmVxdWlyZWQpCit7CisJcmRzX2l3X3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CisJaWYgKGFja19yZXF1aXJlZCkgeworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB1NjQgcmRzX2l3X2dldF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworCXJldHVybiBpYy0+aV9hY2tfbmV4dDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHVuc2lnbmVkIGludCBhZHZfY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gaWMtPmlfYWNrOworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJdTY0IHNlcTsKKwlpbnQgcmV0OworCisJc2VxID0gcmRzX2l3X2dldF9hY2soaWMpOworCisJcmRzZGVidWcoInNlbmRfYWNrOiBpYyAlcCBhY2sgJWxsdVxuIiwgaWMsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlcSk7CisJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKGhkciwgMCwgMCwgMCk7CisJaGRyLT5oX2FjayA9IGNwdV90b19iZTY0KHNlcSk7CisJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oaGRyKTsKKwlpYy0+aV9hY2tfcXVldWVkID0gamlmZmllczsKKworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZpYy0+aV9hY2tfd3IsICZmYWlsZWRfd3IpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCS8qIEZhaWxlZCB0byBzZW5kLiBSZWxlYXNlIHRoZSBXUiwgYW5kCisJCSAqIGZvcmNlIGFub3RoZXIgQUNLLgorCQkgKi8KKwkJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfc2VuZF9mYWlsdXJlKTsKKwkJLyogTmVlZCB0byBmaW5lc3NlIHRoaXMgbGF0ZXIuICovCisJCUJVRygpOworCX0gZWxzZQorCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbnQpOworfQorCisvKgorICogVGhlcmUgYXJlIDMgd2F5cyBvZiBnZXR0aW5nIGFja25vd2xlZGdlbWVudHMgdG8gdGhlIHBlZXI6CisgKiAgMS4JV2UgY2FsbCByZHNfaXdfYXR0ZW1wdF9hY2sgZnJvbSB0aGUgcmVjdiBjb21wbGV0aW9uIGhhbmRsZXIKKyAqCXRvIHNlbmQgYW4gQUNLLW9ubHkgZnJhbWUuCisgKglIb3dldmVyLCB0aGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaCBmcmFtZSBpbiB0aGUgc2VuZCBxdWV1ZQorICoJYXQgYW55IHRpbWUsIHNvIHdlIG1heSBoYXZlIHRvIHBvc3Rwb25lIGl0LgorICogIDIuCVdoZW4gYW5vdGhlciAoZGF0YSkgcGFja2V0IGlzIHRyYW5zbWl0dGVkIHdoaWxlIHRoZXJlJ3MKKyAqCWFuIEFDSyBpbiB0aGUgcXVldWUsIHdlIHBpZ2d5YmFjayB0aGUgQUNLIHNlcXVlbmNlIG51bWJlcgorICoJb24gdGhlIGRhdGEgcGFja2V0LgorICogIDMuCUlmIHRoZSBBQ0sgV1IgaXMgZG9uZSBzZW5kaW5nLCB3ZSBnZXQgY2FsbGVkIGZyb20gdGhlCisgKglzZW5kIHF1ZXVlIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNoZWNrIHdoZXRoZXIgdGhlcmUncworICoJYW5vdGhlciBBQ0sgcGVuZGluZyAocG9zdHBvbmVkIGJlY2F1c2UgdGhlIFdSIHdhcyBvbiB0aGUKKyAqCXF1ZXVlKS4gSWYgc28sIHdlIHRyYW5zbWl0IGl0LgorICoKKyAqIFdlIG1haW50YWluIDIgdmFyaWFibGVzOgorICogIC0JaV9hY2tfZmxhZ3MsIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIEFDSyBXUgorICoJaXMgY3VycmVudGx5IGluIHRoZSBzZW5kIHF1ZXVlIG9yIG5vdCAoSUJfQUNLX0lOX0ZMSUdIVCkKKyAqICAtCWlfYWNrX25leHQsIHdoaWNoIGlzIHRoZSBsYXN0IHNlcXVlbmNlIG51bWJlciB3ZSByZWNlaXZlZAorICoKKyAqIFBvdGVudGlhbGx5LCBzZW5kIHF1ZXVlIGFuZCByZWNlaXZlIHF1ZXVlIGhhbmRsZXJzIGNhbiBydW4gY29uY3VycmVudGx5LgorICoKKyAqIFJlY29ubmVjdGluZyBjb21wbGljYXRlcyB0aGlzIHBpY3R1cmUganVzdCBzbGlnaHRseS4gV2hlbiB3ZQorICogcmVjb25uZWN0LCB3ZSBtYXkgYmUgc2VlaW5nIGR1cGxpY2F0ZSBwYWNrZXRzLiBUaGUgcGVlcgorICogaXMgcmV0cmFuc21pdHRpbmcgdGhlbSwgYmVjYXVzZSBpdCBoYXNuJ3Qgc2VlbiBhbiBBQ0sgZm9yCisgKiB0aGVtLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBBQ0sgdGhlc2UuCisgKgorICogQUNLIG1pdGlnYXRpb24gYWRkcyBhIGhlYWRlciBmbGFnICJBQ0tfUkVRVUlSRUQiOyBhbnkgcGFja2V0IHdpdGgKKyAqIHRoaXMgZmxhZyBzZXQgKk1VU1QqIGJlIGFja25vd2xlZGdlZCBpbW1lZGlhdGVseS4KKyAqLworCisvKgorICogV2hlbiB3ZSBnZXQgaGVyZSwgd2UncmUgY2FsbGVkIGZyb20gdGhlIHJlY3YgcXVldWUgaGFuZGxlci4KKyAqIENoZWNrIHdoZXRoZXIgd2Ugb3VnaHQgdG8gdHJhbnNtaXQgYW4gQUNLLgorICovCit2b2lkIHJkc19pd19hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXVuc2lnbmVkIGludCBhZHZfY3JlZGl0czsKKworCWlmICghdGVzdF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJldHVybjsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpKSB7CisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfc2VuZF9kZWxheWVkKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENhbiB3ZSBnZXQgYSBzZW5kIGNyZWRpdD8gKi8KKwlpZiAoIXJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhpYywgMSwgJmFkdl9jcmVkaXRzLCAwKSkgeworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfdGhyb3R0bGUpOworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2l3X3NlbmRfYWNrKGljLCBhZHZfY3JlZGl0cyk7Cit9CisKKy8qCisgKiBXZSBnZXQgaGVyZSBmcm9tIHRoZSBzZW5kIGNvbXBsZXRpb24gaGFuZGxlciwgd2hlbiB0aGUKKyAqIGFkYXB0ZXIgdGVsbHMgdXMgdGhlIEFDSyBmcmFtZSB3YXMgc2VudC4KKyAqLwordm9pZCByZHNfaXdfYWNrX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2l3X2F0dGVtcHRfYWNrKGljKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSByZWd1bGFyIHhtaXQgY29kZSB3aGVuIGl0IHdhbnRzIHRvIHBpZ2d5YmFjaworICogYW4gQUNLIG9uIGFuIG91dGdvaW5nIGZyYW1lLgorICovCit1NjQgcmRzX2l3X3BpZ2d5Yl9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpKQorCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbmRfcGlnZ3liYWNrZWQpOworCXJldHVybiByZHNfaXdfZ2V0X2FjayhpYyk7Cit9CisKKy8qCisgKiBJdCdzIGtpbmQgb2YgbGFtZSB0aGF0IHdlJ3JlIGNvcHlpbmcgZnJvbSB0aGUgcG9zdGVkIHJlY2VpdmUgcGFnZXMgaW50bworICogbG9uZy1saXZlZCBiaXRtYXBzLiAgV2UgY291bGQgaGF2ZSBwb3N0ZWQgdGhlIGJpdG1hcHMgYW5kIHJkbWEgd3JpdHRlbiBpbnRvCisgKiB0aGVtLiAgQnV0IHJlY2VpdmluZyBuZXcgY29uZ2VzdGlvbiBiaXRtYXBzIHNob3VsZCBiZSBhICpyYXJlKiBldmVudCwgc28KKyAqIGhvcGVmdWxseSB3ZSB3b24ndCBuZWVkIHRvIGludmVzdCB0aGF0IGNvbXBsZXhpdHkgaW4gbWFraW5nIGl0IG1vcmUKKyAqIGVmZmljaWVudC4gIEJ5IGNvcHlpbmcgd2UgY2FuIHNoYXJlIGEgc2ltcGxlciBjb3JlIHdpdGggVENQIHdoaWNoIGhhcyB0bworICogY29weS4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X2NvbmdfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgICBzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYykKK3sKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisJdW5zaWduZWQgaW50IG1hcF9vZmY7CisJdW5zaWduZWQgaW50IG1hcF9wYWdlOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmY7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgY29waWVkOworCXVpbnQ2NF90IHVuY29uZ2VzdGVkID0gMDsKKwl2b2lkICphZGRyOworCisJLyogY2F0Y2ggY29tcGxldGVseSBjb3JydXB0IHBhY2tldHMgKi8KKwlpZiAoYmUzMl90b19jcHUoaXdpbmMtPmlpX2luYy5pX2hkci5oX2xlbikgIT0gUkRTX0NPTkdfTUFQX0JZVEVTKQorCQlyZXR1cm47CisKKwltYXAgPSBjb25uLT5jX2Zjb25nOworCW1hcF9wYWdlID0gMDsKKwltYXBfb2ZmID0gMDsKKworCWZyYWcgPSBsaXN0X2VudHJ5KGl3aW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlmcmFnX29mZiA9IDA7CisKKwljb3BpZWQgPSAwOworCisJd2hpbGUgKGNvcGllZCA8IFJEU19DT05HX01BUF9CWVRFUykgeworCQl1aW50NjRfdCAqc3JjLCAqZHN0OworCQl1bnNpZ25lZCBpbnQgazsKKworCQl0b19jb3B5ID0gbWluKFJEU19GUkFHX1NJWkUgLSBmcmFnX29mZiwgUEFHRV9TSVpFIC0gbWFwX29mZik7CisJCUJVR19PTih0b19jb3B5ICYgNyk7IC8qIE11c3QgYmUgNjRiaXQgYWxpZ25lZC4gKi8KKworCQlhZGRyID0ga21hcF9hdG9taWMoZnJhZy0+Zl9wYWdlLCBLTV9TT0ZUSVJRMCk7CisKKwkJc3JjID0gYWRkciArIGZyYWdfb2ZmOworCQlkc3QgPSAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW21hcF9wYWdlXSArIG1hcF9vZmY7CisJCWZvciAoayA9IDA7IGsgPCB0b19jb3B5OyBrICs9IDgpIHsKKwkJCS8qIFJlY29yZCBwb3J0cyB0aGF0IGJlY2FtZSB1bmNvbmdlc3RlZCwgaWUKKwkJCSAqIGJpdHMgdGhhdCBjaGFuZ2VkIGZyb20gMCB0byAxLiAqLworCQkJdW5jb25nZXN0ZWQgfD0gfigqc3JjKSAmICpkc3Q7CisJCQkqZHN0KysgPSAqc3JjKys7CisJCX0KKwkJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9TT0ZUSVJRMCk7CisKKwkJY29waWVkICs9IHRvX2NvcHk7CisKKwkJbWFwX29mZiArPSB0b19jb3B5OworCQlpZiAobWFwX29mZiA9PSBQQUdFX1NJWkUpIHsKKwkJCW1hcF9vZmYgPSAwOworCQkJbWFwX3BhZ2UrKzsKKwkJfQorCisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChmcmFnX29mZiA9PSBSRFNfRlJBR19TSVpFKSB7CisJCQlmcmFnID0gbGlzdF9lbnRyeShmcmFnLT5mX2l0ZW0ubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwkJCWZyYWdfb2ZmID0gMDsKKwkJfQorCX0KKworCS8qIHRoZSBjb25nZXN0aW9uIG1hcCBpcyBpbiBsaXR0bGUgZW5kaWFuIG9yZGVyICovCisJdW5jb25nZXN0ZWQgPSBsZTY0X3RvX2NwdSh1bmNvbmdlc3RlZCk7CisKKwlyZHNfY29uZ19tYXBfdXBkYXRlZChtYXAsIHVuY29uZ2VzdGVkKTsKK30KKworLyoKKyAqIFJpbmdzIGFyZSBwb3N0ZWQgd2l0aCBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXknbGwgbmVlZCB0byBxdWV1ZSB0aGUKKyAqIGluY29taW5nIG1lc3NhZ2UgdG8gdGhlIHJlY2VpdmluZyBzb2NrZXQgc28gdGhpcyBjYW4ndCBmYWlsLgorICogQWxsIGZyYWdtZW50cyBzdGFydCB3aXRoIGEgaGVhZGVyLCBzbyB3ZSBjYW4gbWFrZSBzdXJlIHdlJ3JlIG5vdCByZWNlaXZpbmcKKyAqIGdhcmJhZ2UsIGFuZCB3ZSBjYW4gdGVsbCBhIHNtYWxsIDggYnl0ZSBmcmFnbWVudCBmcm9tIGFuIEFDSyBmcmFtZS4KKyAqLworc3RydWN0IHJkc19pd19hY2tfc3RhdGUgeworCXU2NAkJYWNrX25leHQ7CisJdTY0CQlhY2tfcmVjdjsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlcXVpcmVkOjE7CisJdW5zaWduZWQgaW50CWFja19uZXh0X3ZhbGlkOjE7CisJdW5zaWduZWQgaW50CWFja19yZWN2X3ZhbGlkOjE7Cit9OworCitzdGF0aWMgdm9pZCByZHNfaXdfcHJvY2Vzc19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdiwgdTMyIGJ5dGVfbGVuLAorCQkJCXN0cnVjdCByZHNfaXdfYWNrX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYyA9IGljLT5pX2l3aW5jOworCXN0cnVjdCByZHNfaGVhZGVyICppaGRyLCAqaGRyOworCisJLyogWFhYIHNodXQgZG93biB0aGUgY29ubmVjdGlvbiBpZiBwb3J0IDAsMCBhcmUgc2Vlbj8gKi8KKworCXJkc2RlYnVnKCJpYyAlcCBpd2luYyAlcCByZWN2ICVwIGJ5dGUgbGVuICV1XG4iLCBpYywgaXdpbmMsIHJlY3YsCisJCSBieXRlX2xlbik7CisKKwlpZiAoYnl0ZV9sZW4gPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKKwkJICAgICAgICJmcm9tICVwSTQgZGlkbid0IGluY2x1ZSBhICIKKwkJICAgICAgICJoZWFkZXIsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJldHVybjsKKwl9CisJYnl0ZV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWloZHIgPSAmaWMtPmlfcmVjdl9oZHJzW3JlY3YgLSBpYy0+aV9yZWN2c107CisKKwkvKiBWYWxpZGF0ZSB0aGUgY2hlY2tzdW0uICovCisJaWYgKCFyZHNfbWVzc2FnZV92ZXJpZnlfY2hlY2tzdW0oaWhkcikpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBoYXMgY29ycnVwdGVkIGhlYWRlciAtICIKKwkJICAgICAgICJmb3JjaW5nIGEgcmVjb25uZWN0XG4iLAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX2JhZF9jaGVja3N1bSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIHRoZSBBQ0sgc2VxdWVuY2Ugd2hpY2ggY29tZXMgd2l0aCBldmVyeSBwYWNrZXQgKi8KKwlzdGF0ZS0+YWNrX3JlY3YgPSBiZTY0X3RvX2NwdShpaGRyLT5oX2Fjayk7CisJc3RhdGUtPmFja19yZWN2X3ZhbGlkID0gMTsKKworCS8qIFByb2Nlc3MgdGhlIGNyZWRpdHMgdXBkYXRlIGlmIHRoZXJlIHdhcyBvbmUgKi8KKwlpZiAoaWhkci0+aF9jcmVkaXQpCisJCXJkc19pd19zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGloZHItPmhfY3JlZGl0KTsKKworCWlmIChpaGRyLT5oX3Nwb3J0ID09IDAgJiYgaWhkci0+aF9kcG9ydCA9PSAwICYmIGJ5dGVfbGVuID09IDApIHsKKwkJLyogVGhpcyBpcyBhbiBBQ0stb25seSBwYWNrZXQuIFRoZSBmYWN0IHRoYXQgaXQgZ2V0cworCQkgKiBzcGVjaWFsIHRyZWF0bWVudCBoZXJlIGlzIHRoYXQgaGlzdG9yaWNhbGx5LCBBQ0tzCisJCSAqIHdlcmUgcmF0aGVyIHNwZWNpYWwgYmVhc3RzLgorCQkgKi8KKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19yZWNlaXZlZCk7CisKKwkJLyoKKwkJICogVXN1YWxseSB0aGUgZnJhZ3MgbWFrZSB0aGVpciB3YXkgb24gdG8gaW5jcyBhbmQgYXJlIHRoZW4gZnJlZWQgYXMKKwkJICogdGhlIGluYyBpcyBmcmVlZC4gIFdlIGRvbid0IGdvIHRoYXQgcm91dGUsIHNvIHdlIGhhdmUgdG8gZHJvcCB0aGUKKwkJICogcGFnZSByZWYgb3Vyc2VsdmVzLiAgV2UgY2FuJ3QganVzdCBsZWF2ZSB0aGUgcGFnZSBvbiB0aGUgcmVjdgorCQkgKiBiZWNhdXNlIHRoYXQgY29uZnVzZXMgdGhlIGRtYSBtYXBwaW5nIG9mIHBhZ2VzIGFuZCBlYWNoIHJlY3YncyB1c2UKKwkJICogb2YgYSBwYXJ0aWFsIHBhZ2UuICBXZSBjYW4gbGVhdmUgdGhlIGZyYWcsIHRob3VnaCwgaXQgd2lsbCBiZQorCQkgKiByZXVzZWQuCisJCSAqCisJCSAqIEZJWE1FOiBGb2xkIHRoaXMgaW50byB0aGUgY29kZSBwYXRoIGJlbG93LgorCQkgKi8KKwkJcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKHJlY3YtPnJfZnJhZyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBpbmMgb24gdGhlIGNvbm5lY3Rpb24gdGhlbiB0aGlzCisJICogZnJhZ21lbnQgaGFzIGEgaGVhZGVyIGFuZCBzdGFydHMgYSBtZXNzYWdlLi4gY29weSBpdHMgaGVhZGVyCisJICogaW50byB0aGUgaW5jIGFuZCBzYXZlIHRoZSBpbmMgc28gd2UgY2FuIGhhbmcgdXBjb21pbmcgZnJhZ21lbnRzCisJICogb2ZmIGl0cyBsaXN0LgorCSAqLworCWlmIChpd2luYyA9PSBOVUxMKSB7CisJCWl3aW5jID0gcmVjdi0+cl9pd2luYzsKKwkJcmVjdi0+cl9pd2luYyA9IE5VTEw7CisJCWljLT5pX2l3aW5jID0gaXdpbmM7CisKKwkJaGRyID0gJml3aW5jLT5paV9pbmMuaV9oZHI7CisJCW1lbWNweShoZHIsIGloZHIsIHNpemVvZigqaGRyKSk7CisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gPSBiZTMyX3RvX2NwdShoZHItPmhfbGVuKTsKKworCQlyZHNkZWJ1ZygiaWMgJXAgaXdpbmMgJXAgcmVtICV1IGZsYWcgMHgleFxuIiwgaWMsIGl3aW5jLAorCQkJIGljLT5pX3JlY3ZfZGF0YV9yZW0sIGhkci0+aF9mbGFncyk7CisJfSBlbHNlIHsKKwkJaGRyID0gJml3aW5jLT5paV9pbmMuaV9oZHI7CisJCS8qIFdlIGNhbid0IGp1c3QgdXNlIG1lbWNtcCBoZXJlOyBmcmFnbWVudHMgb2YgYQorCQkgKiBzaW5nbGUgbWVzc2FnZSBtYXkgY2FycnkgZGlmZmVyZW50IEFDS3MgKi8KKwkJaWYgKGhkci0+aF9zZXF1ZW5jZSAhPSBpaGRyLT5oX3NlcXVlbmNlCisJCSB8fCBoZHItPmhfbGVuICE9IGloZHItPmhfbGVuCisJCSB8fCBoZHItPmhfc3BvcnQgIT0gaWhkci0+aF9zcG9ydAorCQkgfHwgaGRyLT5oX2Rwb3J0ICE9IGloZHItPmhfZHBvcnQpIHsKKwkJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sCisJCQkJImZyYWdtZW50IGhlYWRlciBtaXNtYXRjaDsgZm9yY2luZyByZWNvbm5lY3RcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbGlzdF9hZGRfdGFpbCgmcmVjdi0+cl9mcmFnLT5mX2l0ZW0sICZpd2luYy0+aWlfZnJhZ3MpOworCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisKKwlpZiAoaWMtPmlfcmVjdl9kYXRhX3JlbSA+IFJEU19GUkFHX1NJWkUpCisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gLT0gUkRTX0ZSQUdfU0laRTsKKwllbHNlIHsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IDA7CisJCWljLT5pX2l3aW5jID0gTlVMTDsKKworCQlpZiAoaXdpbmMtPmlpX2luYy5pX2hkci5oX2ZsYWdzID09IFJEU19GTEFHX0NPTkdfQklUTUFQKQorCQkJcmRzX2l3X2NvbmdfcmVjdihjb25uLCBpd2luYyk7CisJCWVsc2UgeworCQkJcmRzX3JlY3ZfaW5jb21pbmcoY29ubiwgY29ubi0+Y19mYWRkciwgY29ubi0+Y19sYWRkciwKKwkJCQkJICAmaXdpbmMtPmlpX2luYywgR0ZQX0FUT01JQywKKwkJCQkJICBLTV9TT0ZUSVJRMCk7CisJCQlzdGF0ZS0+YWNrX25leHQgPSBiZTY0X3RvX2NwdShoZHItPmhfc2VxdWVuY2UpOworCQkJc3RhdGUtPmFja19uZXh0X3ZhbGlkID0gMTsKKwkJfQorCisJCS8qIEV2YWx1YXRlIHRoZSBBQ0tfUkVRVUlSRUQgZmxhZyAqYWZ0ZXIqIHdlIHJlY2VpdmVkCisJCSAqIHRoZSBjb21wbGV0ZSBmcmFtZSwgYW5kIGFmdGVyIGJ1bXBpbmcgdGhlIG5leHRfcngKKwkJICogc2VxdWVuY2UuICovCisJCWlmIChoZHItPmhfZmxhZ3MgJiBSRFNfRkxBR19BQ0tfUkVRVUlSRUQpIHsKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2Fja19yZXF1aXJlZCk7CisJCQlzdGF0ZS0+YWNrX3JlcXVpcmVkID0gMTsKKwkJfQorCisJCXJkc19pbmNfcHV0KCZpd2luYy0+aWlfaW5jKTsKKwl9Cit9CisKKy8qCisgKiBQbHVja2luZyB0aGUgb2xkZXN0IGVudHJ5IGZyb20gdGhlIHJpbmcgY2FuIGJlIGRvbmUgY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSB0aHJlYWQgcmVmaWxsaW5nIHRoZSByaW5nLiAgRWFjaCByaW5nIG9wZXJhdGlvbiBpcyBwcm90ZWN0ZWQgYnkKKyAqIHNwaW5sb2NrcyBhbmQgdGhlIHRyYW5zaWVudCBzdGF0ZSBvZiByZWZpbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlCisgKiByZWNvcmRpbmcgb2Ygd2hpY2ggZW50cnkgaXMgb2xkZXN0LgorICoKKyAqIFRoaXMgcmVsaWVzIG9uIElCIG9ubHkgY2FsbGluZyBvbmUgY3EgY29tcF9oYW5kbGVyIGZvciBlYWNoIGNxIHNvIHRoYXQKKyAqIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgY2FsbGVyIG9mIHJkc19yZWN2X2luY29taW5nKCkgcGVyIFJEUyBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pd19yZWN2X2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCByZHNfaXdfYWNrX3N0YXRlIHN0YXRlID0geyAwLCB9OworCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2OworCisJcmRzZGVidWcoImNvbm4gJXAgY3EgJXBcbiIsIGNvbm4sIGNxKTsKKworCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9jcV9jYWxsKTsKKworCWliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX1NPTElDSVRFRCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfY3FfZXZlbnQpOworCisJCXJlY3YgPSAmaWMtPmlfcmVjdnNbcmRzX2l3X3Jpbmdfb2xkZXN0KCZpYy0+aV9yZWN2X3JpbmcpXTsKKworCQlyZHNfaXdfcmVjdl91bm1hcF9wYWdlKGljLCByZWN2KTsKKworCQkvKgorCQkgKiBBbHNvIHByb2Nlc3MgcmVjdnMgaW4gY29ubmVjdGluZyBzdGF0ZSBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlCisJCSAqIHRvIGdldCBhIHJlY3YgY29tcGxldGlvbiBfYmVmb3JlXyB0aGUgcmRtYWNtIEVTVEFCTElTSEVECisJCSAqIGV2ZW50IGlzIHByb2Nlc3NlZC4KKwkJICovCisJCWlmIChyZHNfY29ubl91cChjb25uKSB8fCByZHNfY29ubl9jb25uZWN0aW5nKGNvbm4pKSB7CisJCQkvKiBXZSBleHBlY3QgZXJyb3JzIGFzIHRoZSBxcCBpcyBkcmFpbmVkIGR1cmluZyBzaHV0ZG93biAqLworCQkJaWYgKHdjLnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSB7CisJCQkJcmRzX2l3X3Byb2Nlc3NfcmVjdihjb25uLCByZWN2LCB3Yy5ieXRlX2xlbiwgJnN0YXRlKTsKKwkJCX0gZWxzZSB7CisJCQkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJlY3YgY29tcGxldGlvbiBvbiAiCisJCQkJICAgICAgICIlcEk0IGhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwgJmNvbm4tPmNfZmFkZHIsCisJCQkJICAgICAgIHdjLnN0YXR1cyk7CisJCQl9CisJCX0KKworCQlyZHNfaXdfcmluZ19mcmVlKCZpYy0+aV9yZWN2X3JpbmcsIDEpOworCX0KKworCWlmIChzdGF0ZS5hY2tfbmV4dF92YWxpZCkKKwkJcmRzX2l3X3NldF9hY2soaWMsIHN0YXRlLmFja19uZXh0LCBzdGF0ZS5hY2tfcmVxdWlyZWQpOworCWlmIChzdGF0ZS5hY2tfcmVjdl92YWxpZCAmJiBzdGF0ZS5hY2tfcmVjdiA+IGljLT5pX2Fja19yZWN2KSB7CisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgc3RhdGUuYWNrX3JlY3YsIE5VTEwpOworCQlpYy0+aV9hY2tfcmVjdiA9IHN0YXRlLmFja19yZWN2OworCX0KKwlpZiAocmRzX2Nvbm5fdXAoY29ubikpCisJCXJkc19pd19hdHRlbXB0X2FjayhpYyk7CisKKwkvKiBJZiB3ZSBldmVyIGVuZCB1cCB3aXRoIGEgcmVhbGx5IGVtcHR5IHJlY2VpdmUgcmluZywgd2UncmUKKwkgKiBpbiBkZWVwIHRyb3VibGUsIGFzIHRoZSBzZW5kZXIgd2lsbCBkZWZpbml0ZWx5IHNlZSBSTlIKKwkgKiB0aW1lb3V0cy4gKi8KKwlpZiAocmRzX2l3X3JpbmdfZW1wdHkoJmljLT5pX3JlY3ZfcmluZykpCisJCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9yaW5nX2VtcHR5KTsKKworCS8qCisJICogSWYgdGhlIHJpbmcgaXMgcnVubmluZyBsb3csIHRoZW4gc2NoZWR1bGUgdGhlIHRocmVhZCB0byByZWZpbGwuCisJICovCisJaWYgKHJkc19pd19yaW5nX2xvdygmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKK30KKworaW50IHJkc19pd19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXJkc2RlYnVnKCJjb25uICVwXG4iLCBjb25uKTsKKworCS8qCisJICogSWYgd2UgZ2V0IGEgdGVtcG9yYXJ5IHBvc3RpbmcgZmFpbHVyZSBpbiB0aGlzIGNvbnRleHQgdGhlbgorCSAqIHdlJ3JlIHJlYWxseSBsb3cgYW5kIHdlIHdhbnQgdGhlIGNhbGxlciB0byBiYWNrIG9mZiBmb3IgYSBiaXQuCisJICovCisJbXV0ZXhfbG9jaygmaWMtPmlfcmVjdl9tdXRleCk7CisJaWYgKHJkc19pd19yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDApKQorCQlyZXQgPSAtRU5PTUVNOworCWVsc2UKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X3JlZmlsbF9mcm9tX3RocmVhZCk7CisJbXV0ZXhfdW5sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKworCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2l3X2F0dGVtcHRfYWNrKGljKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgcmRzX2l3X3JlY3ZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBzeXNpbmZvIHNpOworCWludCByZXQgPSAtRU5PTUVNOworCisJLyogRGVmYXVsdCB0byAzMCUgb2YgYWxsIGF2YWlsYWJsZSBSQU0gZm9yIHJlY3YgbWVtb3J5ICovCisJc2lfbWVtaW5mbygmc2kpOworCXJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiA9IHNpLnRvdGFscmFtIC8gMyAqIFBBR0VfU0laRSAvIFJEU19GUkFHX1NJWkU7CisKKwlyZHNfaXdfaW5jb21pbmdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaXdfaW5jb21pbmciLAorCQkJCQlzaXplb2Yoc3RydWN0IHJkc19pd19pbmNvbWluZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaXdfaW5jb21pbmdfc2xhYiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJkc19pd19mcmFnX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2l3X2ZyYWciLAorCQkJCQlzaXplb2Yoc3RydWN0IHJkc19wYWdlX2ZyYWcpLAorCQkJCQkwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2l3X2ZyYWdfc2xhYiA9PSBOVUxMKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2l3X2luY29taW5nX3NsYWIpOworCWVsc2UKKwkJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pd19yZWN2X2V4aXQodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2l3X2luY29taW5nX3NsYWIpOworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaXdfZnJhZ19zbGFiKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmluZy5jIGIvbmV0L3Jkcy9pd19yaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyMmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfcmluZy5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKKy8qCisgKiBMb2NraW5nIGZvciBJQiByaW5ncy4KKyAqIFdlIGFzc3VtZSB0aGF0IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb3RlY3RlZCBieSBhIG11dGV4CisgKiBpbiB0aGUgY2FsbGVyICh0aGlzIGlzIGEgdmFsaWQgYXNzdW1wdGlvbiBmb3IgdGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9uKS4KKyAqCisgKiBGcmVlaW5nIGFsd2F5cyBoYXBwZW5zIGluIGFuIGludGVycnVwdCwgYW5kIGhlbmNlIG9ubHkKKyAqIHJhY2VzIHdpdGggYWxsb2NhdGlvbnMsIGJ1dCBub3Qgd2l0aCBvdGhlciBmcmVlKClzLgorICoKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgaXMgdGhhdAorICogdGhlIGFsbG9jIGNvZGUgaGFzIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGZyZWUgZW50cmllcy4KKyAqIFRvIHRoaXMgZW5kLCB3ZSBtYWludGFpbiB0d28gY291bnRlcnM7IGFuIGFsbG9jYXRpb24gY291bnRlcgorICogYW5kIGEgZnJlZSBjb3VudGVyLiBCb3RoIGFyZSBhbGxvd2VkIHRvIHJ1biBmcmVlbHksIGFuZCB3cmFwCisgKiBhcm91bmQuCisgKiBUaGUgbnVtYmVyIG9mIHVzZWQgZW50cmllcyBpcyBhbHdheXMgKGFsbG9jX2N0ciAtIGZyZWVfY3RyKSAlIE5SLgorICoKKyAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1ha2VzIGZyZWVfY3RyIGF0b21pYy4gV2hlbiB0aGUKKyAqIGNhbGxlciBmaW5kcyBhbiBhbGxvY2F0aW9uIGZhaWxzLCBpdCBzaG91bGQgc2V0IGFuICJhbGxvYyBmYWlsIgorICogYml0IGFuZCByZXRyeSB0aGUgYWxsb2NhdGlvbi4gVGhlICJhbGxvYyBmYWlsIiBiaXQgZXNzZW50aWFsbHkgdGVsbHMKKyAqIHRoZSBDUSBjb21wbGV0aW9uIGhhbmRsZXJzIHRvIHdha2UgaXQgdXAgYWZ0ZXIgZnJlZWluZyBzb21lCisgKiBtb3JlIGVudHJpZXMuCisgKi8KKworLyoKKyAqIFRoaXMgb25seSBoYXBwZW5zIG9uIHNodXRkb3duLgorICovCitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfaXdfcmluZ19lbXB0eV93YWl0KTsKKwordm9pZCByZHNfaXdfcmluZ19pbml0KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpCit7CisJbWVtc2V0KHJpbmcsIDAsIHNpemVvZigqcmluZykpOworCXJpbmctPndfbnIgPSBucjsKKwlyZHNkZWJ1ZygicmluZyAlcCBuciAldVxuIiwgcmluZywgcmluZy0+d19ucik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF9fcmRzX2l3X3JpbmdfdXNlZChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwl1MzIgZGlmZjsKKworCS8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGhhcyBhdCBsZWFzdCBhcyBtYW55IGJpdHMgYXMgdTMyICovCisJZGlmZiA9IHJpbmctPndfYWxsb2NfY3RyIC0gKHUzMikgYXRvbWljX3JlYWQoJnJpbmctPndfZnJlZV9jdHIpOworCUJVR19PTihkaWZmID4gcmluZy0+d19ucik7CisKKwlyZXR1cm4gZGlmZjsKK30KKwordm9pZCByZHNfaXdfcmluZ19yZXNpemUoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwkvKiBXZSBvbmx5IGV2ZXIgZ2V0IGNhbGxlZCBmcm9tIHRoZSBjb25uZWN0aW9uIHNldHVwIGNvZGUsCisJICogcHJpb3IgdG8gY3JlYXRpbmcgdGhlIFFQLiAqLworCUJVR19PTihfX3Jkc19pd19yaW5nX3VzZWQocmluZykpOworCXJpbmctPndfbnIgPSBucjsKK30KKworc3RhdGljIGludCBfX3Jkc19pd19yaW5nX2VtcHR5KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pd19yaW5nX3VzZWQocmluZykgPT0gMDsKK30KKwordTMyIHJkc19pd19yaW5nX2FsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcykKK3sKKwl1MzIgcmV0ID0gMCwgYXZhaWw7CisKKwlhdmFpbCA9IHJpbmctPndfbnIgLSBfX3Jkc19pd19yaW5nX3VzZWQocmluZyk7CisKKwlyZHNkZWJ1ZygicmluZyAlcCB2YWwgJXUgbmV4dCAldSBmcmVlICV1XG4iLCByaW5nLCB2YWwsCisJCSByaW5nLT53X2FsbG9jX3B0ciwgYXZhaWwpOworCisJaWYgKHZhbCAmJiBhdmFpbCkgeworCQlyZXQgPSBtaW4odmFsLCBhdmFpbCk7CisJCSpwb3MgPSByaW5nLT53X2FsbG9jX3B0cjsKKworCQlyaW5nLT53X2FsbG9jX3B0ciA9IChyaW5nLT53X2FsbG9jX3B0ciArIHJldCkgJSByaW5nLT53X25yOworCQlyaW5nLT53X2FsbG9jX2N0ciArPSByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfcmluZ19mcmVlKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfZnJlZV9wdHIgPSAocmluZy0+d19mcmVlX3B0ciArIHZhbCkgJSByaW5nLT53X25yOworCWF0b21pY19hZGQodmFsLCAmcmluZy0+d19mcmVlX2N0cik7CisKKwlpZiAoX19yZHNfaXdfcmluZ19lbXB0eShyaW5nKSAmJgorCSAgICB3YWl0cXVldWVfYWN0aXZlKCZyZHNfaXdfcmluZ19lbXB0eV93YWl0KSkKKwkJd2FrZV91cCgmcmRzX2l3X3JpbmdfZW1wdHlfd2FpdCk7Cit9CisKK3ZvaWQgcmRzX2l3X3JpbmdfdW5hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCkKK3sKKwlyaW5nLT53X2FsbG9jX3B0ciA9IChyaW5nLT53X2FsbG9jX3B0ciAtIHZhbCkgJSByaW5nLT53X25yOworCXJpbmctPndfYWxsb2NfY3RyIC09IHZhbDsKK30KKworaW50IHJkc19pd19yaW5nX2VtcHR5KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pd19yaW5nX2VtcHR5KHJpbmcpOworfQorCitpbnQgcmRzX2l3X3JpbmdfbG93KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pd19yaW5nX3VzZWQocmluZykgPD0gKHJpbmctPndfbnIgPj4gMik7Cit9CisKKworLyoKKyAqIHJldHVybnMgdGhlIG9sZGVzdCBhbGxvY2VkIHJpbmcgZW50cnkuICBUaGlzIHdpbGwgYmUgdGhlIG5leHQgb25lCisgKiBmcmVlZC4gIFRoaXMgY2FuJ3QgYmUgY2FsbGVkIGlmIHRoZXJlIGFyZSBub25lIGFsbG9jYXRlZC4KKyAqLwordTMyIHJkc19pd19yaW5nX29sZGVzdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gcmluZy0+d19mcmVlX3B0cjsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgd29yayByZXF1ZXN0cy4KKyAqLworCit1MzIgcmRzX2l3X3JpbmdfY29tcGxldGVkKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgd3JfaWQsIHUzMiBvbGRlc3QpCit7CisJdTMyIHJldDsKKworCWlmIChvbGRlc3QgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCkKKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCAtIG9sZGVzdCArIDE7CisJZWxzZQorCQlyZXQgPSByaW5nLT53X25yIC0gb2xkZXN0ICsgKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCArIDE7CisKKwlyZHNkZWJ1ZygicmluZyAlcCByZXQgJXUgd3JfaWQgJXUgb2xkZXN0ICV1XG4iLCByaW5nLCByZXQsCisJCSB3cl9pZCwgb2xkZXN0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19zZW5kLmMgYi9uZXQvcmRzL2l3X3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmRkMzhmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19zZW5kLmMKQEAgLTAsMCArMSw5NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgIml3LmgiCisKK3N0YXRpYyB2b2lkIHJkc19pd19zZW5kX3JkbWFfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCQkgICAgICBpbnQgd2Nfc3RhdHVzKQoreworCWludCBub3RpZnlfc3RhdHVzOworCisJc3dpdGNoICh3Y19zdGF0dXMpIHsKKwljYXNlIElCX1dDX1dSX0ZMVVNIX0VSUjoKKwkJcmV0dXJuOworCisJY2FzZSBJQl9XQ19TVUNDRVNTOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfU1VDQ0VTUzsKKwkJYnJlYWs7CisKKwljYXNlIElCX1dDX1JFTV9BQ0NFU1NfRVJSOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfUkVNT1RFX0VSUk9SOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9PVEhFUl9FUlJPUjsKKwkJYnJlYWs7CisJfQorCXJkc19yZG1hX3NlbmRfY29tcGxldGUocm0sIG5vdGlmeV9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF91bm1hcF9yZG1hKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkJICAgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlpZiAob3AtPnJfbWFwcGVkKSB7CisJCWliX2RtYV91bm1hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLAorCQkJb3AtPnJfd3JpdGUgPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJb3AtPnJfbWFwcGVkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZW5kX3VubWFwX3JtKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkgIHN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kLAorCQkJICBpbnQgd2Nfc3RhdHVzKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBzZW5kLT5zX3JtOworCisJcmRzZGVidWcoImljICVwIHNlbmQgJXAgcm0gJXBcbiIsIGljLCBzZW5kLCBybSk7CisKKwlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJICAgICBybS0+bV9zZywgcm0tPm1fbmVudHMsCisJCSAgICAgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAocm0tPm1fcmRtYV9vcCAhPSBOVUxMKSB7CisJCXJkc19pd19zZW5kX3VubWFwX3JkbWEoaWMsIHJtLT5tX3JkbWFfb3ApOworCisJCS8qIElmIHRoZSB1c2VyIGFza2VkIGZvciBhIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIG9uIHRoaXMKKwkJICogbWVzc2FnZSwgd2UgY2FuIGltcGxlbWVudCB0aHJlZSBkaWZmZXJlbnQgc2VtYW50aWNzOgorCQkgKiAgMS4JTm90aWZ5IHdoZW4gd2UgcmVjZWl2ZWQgdGhlIEFDSyBvbiB0aGUgUkRTIG1lc3NhZ2UKKwkJICoJdGhhdCB3YXMgcXVldWVkIHdpdGggdGhlIFJETUEuIFRoaXMgcHJvdmlkZXMgcmVsaWFibGUKKwkJICoJbm90aWZpY2F0aW9uIG9mIFJETUEgc3RhdHVzIGF0IHRoZSBleHBlbnNlIG9mIGEgb25lLXdheQorCQkgKglwYWNrZXQgZGVsYXkuCisJCSAqICAyLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBSRE1BIG9wZXJhdGlvbi4KKwkJICogIDMuCU5vdGlmeSB3aGVuIHRoZSBJQiBzdGFjayBnaXZlcyB1cyB0aGUgY29tcGxldGlvbiBldmVudCBmb3IKKwkJICoJdGhlIGFjY29tcGFueWluZyBSRFMgbWVzc2FnZXMuCisJCSAqIEhlcmUsIHdlIGltcGxlbWVudCBhcHByb2FjaCAjMy4gVG8gaW1wbGVtZW50IGFwcHJvYWNoICMyLAorCQkgKiBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgZnJvbSB0aGUgY3FfaGFuZGxlci4gVG8gaW1wbGVtZW50ICMxLAorCQkgKiBkb24ndCBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgYXQgYWxsLCBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3RpZnkKKwkJICogaGFuZGxpbmcgaW4gdGhlIEFDSyBwcm9jZXNzaW5nIGNvZGUuCisJCSAqCisJCSAqIE5vdGU6IFRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHN5bmMgYW55IFJETUEgYnVmZmVycyB1c2luZworCQkgKiBpYl9kbWFfc3luY19zZ19mb3JfY3B1IC0gdGhlIGNvbXBsZXRpb24gZm9yIHRoZSBSRE1BCisJCSAqIG9wZXJhdGlvbiBpdHNlbGYgdW5tYXBwZWQgdGhlIFJETUEgYnVmZmVycywgd2hpY2ggdGFrZXMgY2FyZQorCQkgKiBvZiBzeW5jaGluZy4KKwkJICovCisJCXJkc19pd19zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjX3N0YXR1cyk7CisKKwkJaWYgKHJtLT5tX3JkbWFfb3AtPnJfd3JpdGUpCisJCQlyZHNfc3RhdHNfYWRkKHNfc2VuZF9yZG1hX2J5dGVzLCBybS0+bV9yZG1hX29wLT5yX2J5dGVzKTsKKwkJZWxzZQorCQkJcmRzX3N0YXRzX2FkZChzX3JlY3ZfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJfQorCisJLyogSWYgYW55b25lIHdhaXRlZCBmb3IgdGhpcyBtZXNzYWdlIHRvIGdldCBmbHVzaGVkIG91dCwgd2FrZQorCSAqIHRoZW0gdXAgbm93ICovCisJcmRzX21lc3NhZ2VfdW5tYXBwZWQocm0pOworCisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlzZW5kLT5zX3JtID0gTlVMTDsKK30KKwordm9pZCByZHNfaXdfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJc2VuZC0+c19ybSA9IE5VTEw7CisJCXNlbmQtPnNfb3AgPSBOVUxMOworCQlzZW5kLT5zX21hcHBpbmcgPSBOVUxMOworCisJCXNlbmQtPnNfd3IubmV4dCA9IE5VTEw7CisJCXNlbmQtPnNfd3Iud3JfaWQgPSBpOworCQlzZW5kLT5zX3dyLnNnX2xpc3QgPSBzZW5kLT5zX3NnZTsKKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3dyLmV4LmltbV9kYXRhID0gMDsKKworCQlzZ2UgPSByZHNfaXdfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5sa2V5ID0gMDsKKworCQlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgc2VuZC0+c19zZ2UpOworCQlzZ2UtPmFkZHIgPSBpYy0+aV9zZW5kX2hkcnNfZG1hICsgKGkgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwkJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCQlzZ2UtPmxrZXkgPSAwOworCisJCXNlbmQtPnNfbXIgPSBpYl9hbGxvY19mYXN0X3JlZ19tcihpYy0+aV9wZCwgZmFzdHJlZ19tZXNzYWdlX3NpemUpOworCQlpZiAoSVNfRVJSKHNlbmQtPnNfbXIpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX21yIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCXNlbmQtPnNfcGFnZV9saXN0ID0gaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0KAorCQkJaWMtPmlfY21faWQtPmRldmljZSwgZmFzdHJlZ19tZXNzYWdlX3NpemUpOworCQlpZiAoSVNfRVJSKHNlbmQtPnNfcGFnZV9saXN0KSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHJkc19pd19zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlCVUdfT04oIXNlbmQtPnNfbXIpOworCQlpYl9kZXJlZ19tcihzZW5kLT5zX21yKTsKKwkJQlVHX09OKCFzZW5kLT5zX3BhZ2VfbGlzdCk7CisJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KHNlbmQtPnNfcGFnZV9saXN0KTsKKwkJaWYgKHNlbmQtPnNfd3Iub3Bjb2RlID09IDB4ZGVhZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2VuZC0+c19ybSkKKwkJCXJkc19pd19zZW5kX3VubWFwX3JtKGljLCBzZW5kLCBJQl9XQ19XUl9GTFVTSF9FUlIpOworCQlpZiAoc2VuZC0+c19vcCkKKwkJCXJkc19pd19zZW5kX3VubWFwX3JkbWEoaWMsIHNlbmQtPnNfb3ApOworCX0KK30KKworLyoKKyAqIFRoZSBfb2xkZXN0L19mcmVlIHJpbmcgb3BlcmF0aW9ucyBoZXJlIHJhY2UgY2xlYW5seSB3aXRoIHRoZSBhbGxvYy91bmFsbG9jCisgKiBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiB0aGUgc2VuZCBwYXRoLiAgQXMgdGhlIHNlbmRlciBhbGxvY3MgYW5kIHBvdGVudGlhbGx5CisgKiB1bmFsbG9jcyB0aGUgbmV4dCBmcmVlIGVudHJ5IGluIHRoZSByaW5nIGl0IGRvZXNuJ3QgYWx0ZXIgd2hpY2ggaXMKKyAqIHRoZSBuZXh0IHRvIGJlIGZyZWVkLCB3aGljaCBpcyB3aGF0IHRoaXMgaXMgY29uY2VybmVkIHdpdGguCisgKi8KK3ZvaWQgcmRzX2l3X3NlbmRfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGNvbXBsZXRlZDsKKwl1MzIgb2xkZXN0OworCXUzMiBpOworCWludCByZXQ7CisKKwlyZHNkZWJ1ZygiY3EgJXAgY29ubiAlcFxuIiwgY3EsIGNvbm4pOworCXJkc19pd19zdGF0c19pbmMoc19pd190eF9jcV9jYWxsKTsKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpCisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9jcV9ldmVudCk7CisKKwkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIldDIEVycm9yOiAgc3RhdHVzID0gJWQgb3Bjb2RlID0gJWRcbiIsIHdjLnN0YXR1cywgd2Mub3Bjb2RlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHdjLm9wY29kZSA9PSBJQl9XQ19MT0NBTF9JTlYgJiYgd2Mud3JfaWQgPT0gUkRTX0lXX0xPQ0FMX0lOVl9XUl9JRCkgeworCQkJaWMtPmlfZmFzdHJlZ19wb3N0ZWQgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAod2Mub3Bjb2RlID09IElCX1dDX0ZBU1RfUkVHX01SICYmIHdjLndyX2lkID09IFJEU19JV19GQVNUX1JFR19XUl9JRCkgeworCQkJaWMtPmlfZmFzdHJlZ19wb3N0ZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAod2Mud3JfaWQgPT0gUkRTX0lXX0FDS19XUl9JRCkgeworCQkJaWYgKGljLT5pX2Fja19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc3RhbGxlZCk7CisJCQlyZHNfaXdfYWNrX3NlbmRfY29tcGxldGUoaWMpOworCQkJY29udGludWU7CisJCX0KKworCQlvbGRlc3QgPSByZHNfaXdfcmluZ19vbGRlc3QoJmljLT5pX3NlbmRfcmluZyk7CisKKwkJY29tcGxldGVkID0gcmRzX2l3X3JpbmdfY29tcGxldGVkKCZpYy0+aV9zZW5kX3JpbmcsIHdjLndyX2lkLCBvbGRlc3QpOworCisJCWZvciAoaSA9IDA7IGkgPCBjb21wbGV0ZWQ7IGkrKykgeworCQkJc2VuZCA9ICZpYy0+aV9zZW5kc1tvbGRlc3RdOworCisJCQkvKiBJbiB0aGUgZXJyb3IgY2FzZSwgd2Mub3Bjb2RlIHNvbWV0aW1lcyBjb250YWlucyBnYXJiYWdlICovCisJCQlzd2l0Y2ggKHNlbmQtPnNfd3Iub3Bjb2RlKSB7CisJCQljYXNlIElCX1dSX1NFTkQ6CisJCQkJaWYgKHNlbmQtPnNfcm0pCisJCQkJCXJkc19pd19zZW5kX3VubWFwX3JtKGljLCBzZW5kLCB3Yy5zdGF0dXMpOworCQkJCWJyZWFrOworCQkJY2FzZSBJQl9XUl9GQVNUX1JFR19NUjoKKwkJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQkJY2FzZSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY6CisJCQkJLyogTm90aGluZyB0byBiZSBkb25lIC0gdGhlIFNHIGxpc3Qgd2lsbCBiZSB1bm1hcHBlZAorCQkJCSAqIHdoZW4gdGhlIFNFTkQgY29tcGxldGVzLiAqLworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCQkJCSJSRFMvSVc6ICVzOiB1bmV4cGVjdGVkIG9wY29kZSAweCV4IGluIFdSIVxuIiwKKwkJCQkJCV9fZnVuY19fLCBzZW5kLT5zX3dyLm9wY29kZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXNlbmQtPnNfd3Iub3Bjb2RlID0gMHhkZWFkOworCQkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJCWlmIChzZW5kLT5zX3F1ZXVlZCArIEhaLzIgPCBqaWZmaWVzKQorCQkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9zdGFsbGVkKTsKKworCQkJLyogSWYgYSBSRE1BIG9wZXJhdGlvbiBwcm9kdWNlZCBhbiBlcnJvciwgc2lnbmFsIHRoaXMgcmlnaHQKKwkJCSAqIGF3YXkuIElmIHdlIGRvbid0LCB0aGUgc3Vic2VxdWVudCBTRU5EIHRoYXQgZ29lcyB3aXRoIHRoaXMKKwkJCSAqIFJETUEgd2lsbCBiZSBjYW5jZWxlZCB3aXRoIEVSUl9XRkxVU0gsIGFuZCB0aGUgYXBwbGljYXRpb24KKwkJCSAqIG5ldmVyIGxlYXJuIHRoYXQgdGhlIFJETUEgZmFpbGVkLiAqLworCQkJaWYgKHVubGlrZWx5KHdjLnN0YXR1cyA9PSBJQl9XQ19SRU1fQUNDRVNTX0VSUiAmJiBzZW5kLT5zX29wKSkgeworCQkJCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwkJCQlybSA9IHJkc19zZW5kX2dldF9tZXNzYWdlKGNvbm4sIHNlbmQtPnNfb3ApOworCQkJCWlmIChybSkKKwkJCQkJcmRzX2l3X3NlbmRfcmRtYV9jb21wbGV0ZShybSwgd2Muc3RhdHVzKTsKKwkJCX0KKworCQkJb2xkZXN0ID0gKG9sZGVzdCArIDEpICUgaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJCX0KKworCQlyZHNfaXdfcmluZ19mcmVlKCZpYy0+aV9zZW5kX3JpbmcsIGNvbXBsZXRlZCk7CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykKKwkJIHx8IHRlc3RfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpKQorCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKworCQkvKiBXZSBleHBlY3QgZXJyb3JzIGFzIHRoZSBxcCBpcyBkcmFpbmVkIGR1cmluZyBzaHV0ZG93biAqLworCQlpZiAod2Muc3RhdHVzICE9IElCX1dDX1NVQ0NFU1MgJiYgcmRzX2Nvbm5fdXAoY29ubikpIHsKKwkJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sCisJCQkJInNlbmQgY29tcGxldGlvbiBvbiAlcEk0ICIKKwkJCQkiaGFkIHN0YXR1cyAldSwgZGlzY29ubmVjdGluZyBhbmQgcmVjb25uZWN0aW5nXG4iLAorCQkJCSZjb25uLT5jX2ZhZGRyLCB3Yy5zdGF0dXMpOworCQl9CisJfQorfQorCisvKgorICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiBmb3IgYWxsb2NhdGluZyBjcmVkaXRzIHdoZW4gc2VuZGluZworICogbWVzc2FnZXMuCisgKgorICogQ29uY2VwdHVhbGx5LCB3ZSBoYXZlIHR3byBjb3VudGVyczoKKyAqICAtCXNlbmQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UncmUgYWxsb3dlZAorICoJdG8gc3VibWl0IHdpdGhvdXQgb3ZlcnJ1bmluZyB0aGUgcmVjaWV2ZXIncyBxdWV1ZS4gRm9yCisgKgllYWNoIFNFTkQgV1Igd2UgcG9zdCwgd2UgZGVjcmVtZW50IHRoaXMgYnkgb25lLgorICoKKyAqICAtCXBvc3RlZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSByZWNlbnRseQorICoJcG9zdGVkIHRvIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGlzIHZhbHVlIGlzIHRyYW5zZmVycmVkCisgKgl0byB0aGUgcGVlciBhcyBhICJjcmVkaXQgdXBkYXRlIiBpbiBhIFJEUyBoZWFkZXIgZmllbGQuCisgKglFdmVyeSB0aW1lIHdlIHRyYW5zbWl0IGNyZWRpdHMgdG8gdGhlIHBlZXIsIHdlIHN1YnRyYWN0CisgKgl0aGUgYW1vdW50IG9mIHRyYW5zZmVycmVkIGNyZWRpdHMgZnJvbSB0aGlzIGNvdW50ZXIuCisgKgorICogSXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgYXZvaWQgc2l0dWF0aW9ucyB3aGVyZSBib3RoIHNpZGVzIGhhdmUKKyAqIGV4aGF1c3RlZCB0aGVpciBzZW5kIGNyZWRpdHMsIGFuZCBhcmUgdW5hYmxlIHRvIHNlbmQgbmV3IGNyZWRpdHMKKyAqIHRvIHRoZSBwZWVyLiBXZSBhY2hpZXZlIHRoaXMgYnkgcmVxdWlyaW5nIHRoYXQgd2Ugc2VuZCBhdCBsZWFzdAorICogb25lIGNyZWRpdCB1cGRhdGUgdG8gdGhlIHBlZXIgYmVmb3JlIGV4aGF1c3Rpbmcgb3VyIGNyZWRpdHMuCisgKiBXaGVuIG5ldyBjcmVkaXRzIGFycml2ZSwgd2Ugc3VidHJhY3Qgb25lIGNyZWRpdCB0aGF0IGlzIHdpdGhoZWxkCisgKiB1bnRpbCB3ZSd2ZSBwb3N0ZWQgbmV3IGJ1ZmZlcnMgYW5kIGFyZSByZWFkeSB0byB0cmFuc21pdCB0aGVzZQorICogY3JlZGl0cyAoc2VlIHJkc19pd19zZW5kX2FkZF9jcmVkaXRzIGJlbG93KS4KKyAqCisgKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXQKKyAqIGdyYWJzIGNfc2VuZF9sb2NrIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuCisgKiBIb3dldmVyLCB0aGUgQUNLIHNlbmRpbmcgY29kZSBpcyBpbmRlcGVuZGVudCBhbmQgY2FuIHJhY2Ugd2l0aAorICogbWVzc2FnZSBTRU5Ecy4KKyAqCisgKiBJbiB0aGUgc2VuZCBwYXRoLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY291bnRlcnMgZm9yIHNlbmQgY3JlZGl0cworICogYW5kIHRoZSBjb3VudGVyIG9mIHBvc3RlZCBidWZmZXJzIGF0b21pY2FsbHkgLSB3aGVuIHdlIHVzZSB0aGUKKyAqIGxhc3QgYXZhaWxhYmxlIGNyZWRpdCwgd2UgY2Fubm90IGFsbG93IGFub3RoZXIgdGhyZWFkIHRvIHJhY2UgdXMKKyAqIGFuZCBncmFiIHRoZSBwb3N0ZWQgY3JlZGl0cyBjb3VudGVyLiAgSGVuY2UsIHdlIGhhdmUgdG8gdXNlIGEKKyAqIHNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIGNyZWRpdCBjb3VudGVyLCBvciB1c2UgYXRvbWljcy4KKyAqCisgKiBTcGlubG9ja3Mgc2hhcmVkIGJldHdlZW4gdGhlIHNlbmQgYW5kIHRoZSByZWNlaXZlIHBhdGggYXJlIGJhZCwKKyAqIGJlY2F1c2UgdGhleSBjcmVhdGUgdW5uZWNlc3NhcnkgZGVsYXlzLiBBbiBlYXJseSBpbXBsZW1lbnRhdGlvbgorICogdXNpbmcgYSBzcGlubG9jayBzaG93ZWQgYSA1JSBkZWdyYWRhdGlvbiBpbiB0aHJvdWdocHV0IGF0IHNvbWUKKyAqIGxvYWRzLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIHNwaW5sb2NrcyBjb21wbGV0ZWx5LCBwdXR0aW5nIGJvdGgKKyAqIGNvdW50ZXJzIGludG8gYSBzaW5nbGUgYXRvbWljLCBhbmQgdXBkYXRpbmcgdGhhdCBhdG9taWMgdXNpbmcKKyAqIGF0b21pY19hZGQgKGluIHRoZSByZWNlaXZlIHBhdGgsIHdoZW4gcmVjZWl2aW5nIGZyZXNoIGNyZWRpdHMpLAorICogYW5kIHVzaW5nIGF0b21pY19jbXB4Y2hnIHdoZW4gdXBkYXRpbmcgdGhlIHR3byBjb3VudGVycy4KKyAqLworaW50IHJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJICAgICB1MzIgd2FudGVkLCB1MzIgKmFkdl9jcmVkaXRzLCBpbnQgbmVlZF9wb3N0ZWQpCit7CisJdW5zaWduZWQgaW50IGF2YWlsLCBwb3N0ZWQsIGdvdCA9IDAsIGFkdmVydGlzZTsKKwlsb25nIG9sZHZhbCwgbmV3dmFsOworCisJKmFkdl9jcmVkaXRzID0gMDsKKwlpZiAoIWljLT5pX2Zsb3djdGwpCisJCXJldHVybiB3YW50ZWQ7CisKK3RyeV9hZ2FpbjoKKwlhZHZlcnRpc2UgPSAwOworCW9sZHZhbCA9IG5ld3ZhbCA9IGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKTsKKwlwb3N0ZWQgPSBJQl9HRVRfUE9TVF9DUkVESVRTKG9sZHZhbCk7CisJYXZhaWwgPSBJQl9HRVRfU0VORF9DUkVESVRTKG9sZHZhbCk7CisKKwlyZHNkZWJ1ZygicmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKCV1KTogY3JlZGl0cz0ldSBwb3N0ZWQ9JXVcbiIsCisJCQl3YW50ZWQsIGF2YWlsLCBwb3N0ZWQpOworCisJLyogVGhlIGxhc3QgY3JlZGl0IG11c3QgYmUgdXNlZCB0byBzZW5kIGEgY3JlZGl0IHVwZGF0ZS4gKi8KKwlpZiAoYXZhaWwgJiYgIXBvc3RlZCkKKwkJYXZhaWwtLTsKKworCWlmIChhdmFpbCA8IHdhbnRlZCkgeworCQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpYy0+aV9jbV9pZC0+Y29udGV4dDsKKworCQkvKiBPb3BzLCB0aGVyZSBhcmVuJ3QgdGhhdCBtYW55IGNyZWRpdHMgbGVmdCEgKi8KKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCWdvdCA9IGF2YWlsOworCX0gZWxzZSB7CisJCS8qIFNvbWV0aW1lcyB5b3UgZ2V0IHdoYXQgeW91IHdhbnQsIGxhbGFsYS4gKi8KKwkJZ290ID0gd2FudGVkOworCX0KKwluZXd2YWwgLT0gSUJfU0VUX1NFTkRfQ1JFRElUUyhnb3QpOworCisJLyoKKwkgKiBJZiBuZWVkX3Bvc3RlZCBpcyBub24temVybywgdGhlbiB0aGUgY2FsbGVyIHdhbnRzCisJICogdGhlIHBvc3RlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IHNlbmQgY3JlZGl0cyBhcmUKKwkgKiBhdmFpbGFibGUuCisJICovCisJaWYgKHBvc3RlZCAmJiAoZ290IHx8IG5lZWRfcG9zdGVkKSkgeworCQlhZHZlcnRpc2UgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBvc3RlZCwgUkRTX01BWF9BRFZfQ1JFRElUKTsKKwkJbmV3dmFsIC09IElCX1NFVF9QT1NUX0NSRURJVFMoYWR2ZXJ0aXNlKTsKKwl9CisKKwkvKiBGaW5hbGx5IGJpbGwgZXZlcnl0aGluZyAqLworCWlmIChhdG9taWNfY21weGNoZygmaWMtPmlfY3JlZGl0cywgb2xkdmFsLCBuZXd2YWwpICE9IG9sZHZhbCkKKwkJZ290byB0cnlfYWdhaW47CisKKwkqYWR2X2NyZWRpdHMgPSBhZHZlcnRpc2U7CisJcmV0dXJuIGdvdDsKK30KKwordm9pZCByZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBjcmVkaXRzKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKGNyZWRpdHMgPT0gMCkKKwkJcmV0dXJuOworCisJcmRzZGVidWcoInJkc19pd19zZW5kX2FkZF9jcmVkaXRzKCV1KTogY3VycmVudD0ldSVzXG4iLAorCQkJY3JlZGl0cywKKwkJCUlCX0dFVF9TRU5EX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKSwKKwkJCXRlc3RfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSA/ICIsIGxsX3NlbmRfZnVsbCIgOiAiIik7CisKKwlhdG9taWNfYWRkKElCX1NFVF9TRU5EX0NSRURJVFMoY3JlZGl0cyksICZpYy0+aV9jcmVkaXRzKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKworCVdBUk5fT04oSUJfR0VUX1NFTkRfQ1JFRElUUyhjcmVkaXRzKSA+PSAxNjM4NCk7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfY3JlZGl0X3VwZGF0ZXMpOworfQorCit2b2lkIHJkc19pd19hZHZlcnRpc2VfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBwb3N0ZWQpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAocG9zdGVkID09IDApCisJCXJldHVybjsKKworCWF0b21pY19hZGQoSUJfU0VUX1BPU1RfQ1JFRElUUyhwb3N0ZWQpLCAmaWMtPmlfY3JlZGl0cyk7CisKKwkvKiBEZWNpZGUgd2hldGhlciB0byBzZW5kIGFuIHVwZGF0ZSB0byB0aGUgcGVlciBub3cuCisJICogSWYgd2Ugd291bGQgc2VuZCBhIGNyZWRpdCB1cGRhdGUgZm9yIGV2ZXJ5IHNpbmdsZSBidWZmZXIgd2UKKwkgKiBwb3N0LCB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhbiBBQ0sgc3Rvcm0gKEFDSyBhcnJpdmVzLAorCSAqIGNvbnN1bWVzIGJ1ZmZlciwgd2UgcmVmaWxsIHRoZSByaW5nLCBzZW5kIEFDSyB0byByZW1vdGUKKwkgKiBhZHZlcnRpc2luZyB0aGUgbmV3bHkgcG9zdGVkIGJ1ZmZlci4uLiBhZCBpbmYpCisJICoKKwkgKiBQZXJmb3JtYW5jZSBwcmV0dHkgbXVjaCBkZXBlbmRzIG9uIGhvdyBvZnRlbiB3ZSBzZW5kCisJICogY3JlZGl0IHVwZGF0ZXMgLSB0b28gZnJlcXVlbnQgdXBkYXRlcyBtZWFuIGxvdHMgb2YgQUNLcy4KKwkgKiBUb28gaW5mcmVxdWVudCB1cGRhdGVzLCBhbmQgdGhlIHBlZXIgd2lsbCBydW4gb3V0IG9mCisJICogY3JlZGl0cyBhbmQgaGFzIHRvIHRocm90dGxlLgorCSAqIEZvciB0aGUgdGltZSBiZWluZywgMTYgc2VlbXMgdG8gYmUgYSBnb29kIGNvbXByb21pc2UuCisJICovCisJaWYgKElCX0dFVF9QT1NUX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKSA+PSAxNikKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityZHNfaXdfeG1pdF9wb3B1bGF0ZV93cihzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCwgdW5zaWduZWQgaW50IHBvcywKKwkJdW5zaWduZWQgbG9uZyBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCWludCBzZW5kX2ZsYWdzKQoreworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCVdBUk5fT04ocG9zICE9IHNlbmQgLSBpYy0+aV9zZW5kcyk7CisKKwlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBzZW5kX2ZsYWdzOworCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKKwlzZW5kLT5zX3dyLm51bV9zZ2UgPSAyOworCXNlbmQtPnNfd3IubmV4dCA9IE5VTEw7CisJc2VuZC0+c19xdWV1ZWQgPSBqaWZmaWVzOworCXNlbmQtPnNfb3AgPSBOVUxMOworCisJaWYgKGxlbmd0aCAhPSAwKSB7CisJCXNnZSA9IHJkc19pd19kYXRhX3NnZShpYywgc2VuZC0+c19zZ2UpOworCQlzZ2UtPmFkZHIgPSBidWZmZXI7CisJCXNnZS0+bGVuZ3RoID0gbGVuZ3RoOworCQlzZ2UtPmxrZXkgPSByZHNfaXdfbG9jYWxfZG1hX2xrZXkoaWMpOworCisJCXNnZSA9IHJkc19pd19oZWFkZXJfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJfSBlbHNlIHsKKwkJLyogV2UncmUgc2VuZGluZyBhIHBhY2tldCB3aXRoIG5vIHBheWxvYWQuIFRoZXJlIGlzIG9ubHkKKwkJICogb25lIFNHRSAqLworCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQlzZ2UgPSAmc2VuZC0+c19zZ2VbMF07CisJfQorCisJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChwb3MgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKK30KKworLyoKKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBtZXNzYWdlLiAgVGhlIGZpcnN0IHRpbWUKKyAqIHdlIHNlZSBhIG1lc3NhZ2Ugd2UgbWFwIGl0cyBzY2F0dGVybGlzdCBpbnRvIHRoZSBJQiBkZXZpY2Ugc28gdGhhdAorICogd2UgY2FuIHByb3ZpZGUgdGhhdCBtYXBwZWQgYWRkcmVzcyB0byB0aGUgSUIgc2NhdHRlciBnYXRoZXIgZW50cmllcworICogaW4gdGhlIElCIHdvcmsgcmVxdWVzdHMuICBXZSB0cmFuc2xhdGUgdGhlIHNjYXR0ZXJsaXN0IGludG8gYSBzZXJpZXMKKyAqIG9mIHdvcmsgcmVxdWVzdHMgdGhhdCBmcmFnbWVudCB0aGUgbWVzc2FnZS4gIFRoZXNlIHdvcmsgcmVxdWVzdHMgY29tcGxldGUKKyAqIGluIG9yZGVyIHNvIHdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBtZXNzYWdlIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIG9uY2Ugd2Ugc2VuZCB0aGUgZmluYWwgZnJhZ21lbnQuCisgKgorICogVGhlIFJEUyBjb3JlIHVzZXMgdGhlIGNfc2VuZF9sb2NrIHRvIG9ubHkgZW50ZXIgdGhpcyBmdW5jdGlvbiBvbmNlCisgKiBwZXIgY29ubmVjdGlvbi4gIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB0eCByaW5nIGFsbG9jL3VuYWxsb2MgcGFpcnMKKyAqIGRvbid0IGdldCBvdXQgb2Ygc3luYyBhbmQgY29uZnVzZSB0aGUgcmluZy4KKyAqLworaW50IHJkc19pd194bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdTMyIHBvczsKKwl1MzIgaTsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgY3JlZGl0X2FsbG9jOworCXUzMiBwb3N0ZWQ7CisJdTMyIGFkdl9jcmVkaXRzID0gMDsKKwlpbnQgc2VuZF9mbGFncyA9IDA7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgZmxvd19jb250cm9sbGVkID0gMDsKKworCUJVR19PTihvZmYgJSBSRFNfRlJBR19TSVpFKTsKKwlCVUdfT04oaGRyX29mZiAhPSAwICYmIGhkcl9vZmYgIT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkvKiBGYXN0cmVnIHN1cHBvcnQgKi8KKwlpZiAocmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSkKKwkgJiYgIWljLT5pX2Zhc3RyZWdfcG9zdGVkKSB7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCS8qIEZJWE1FIHdlIG1heSBvdmVyYWxsb2NhdGUgaGVyZSAqLworCWlmIChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pID09IDApCisJCWkgPSAxOworCWVsc2UKKwkJaSA9IGNlaWwoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSwgUkRTX0ZSQUdfU0laRSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2l3X3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQlzZXRfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3JpbmdfZnVsbCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNyZWRpdF9hbGxvYyA9IHdvcmtfYWxsb2M7CisJaWYgKGljLT5pX2Zsb3djdGwpIHsKKwkJY3JlZGl0X2FsbG9jID0gcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKGljLCB3b3JrX2FsbG9jLCAmcG9zdGVkLCAwKTsKKwkJYWR2X2NyZWRpdHMgKz0gcG9zdGVkOworCQlpZiAoY3JlZGl0X2FsbG9jIDwgd29ya19hbGxvYykgeworCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gY3JlZGl0X2FsbG9jKTsKKwkJCXdvcmtfYWxsb2MgPSBjcmVkaXRfYWxsb2M7CisJCQlmbG93X2NvbnRyb2xsZWQrKzsKKwkJfQorCQlpZiAod29ya19hbGxvYyA9PSAwKSB7CisJCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3Rocm90dGxlKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIG1hcCB0aGUgbWVzc2FnZSB0aGUgZmlyc3QgdGltZSB3ZSBzZWUgaXQgKi8KKwlpZiAoaWMtPmlfcm0gPT0gTlVMTCkgeworCQkvKgorCQlwcmludGsoS0VSTl9OT1RJQ0UgInJkc19pd194bWl0IHByZXAgbXNnIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2Rwb3J0KSwKKwkJCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncywKKwkJCQliZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pKTsKKwkJICAgKi8KKwkJaWYgKHJtLT5tX25lbnRzKSB7CisJCQlybS0+bV9jb3VudCA9IGliX2RtYV9tYXBfc2coZGV2LAorCQkJCQkgcm0tPm1fc2csIHJtLT5tX25lbnRzLCBETUFfVE9fREVWSUNFKTsKKwkJCXJkc2RlYnVnKCJpYyAlcCBtYXBwaW5nIHJtICVwOiAlZFxuIiwgaWMsIHJtLCBybS0+bV9jb3VudCk7CisJCQlpZiAocm0tPm1fY291bnQgPT0gMCkgeworCQkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9zZ19tYXBwaW5nX2ZhaWx1cmUpOworCQkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQkJcmV0ID0gLUVOT01FTTsgLyogWFhYID8gKi8KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJtLT5tX2NvdW50ID0gMDsKKwkJfQorCisJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CisJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisJCWljLT5pX3JtID0gcm07CisKKwkJLyogRmluYWxpemUgdGhlIGhlYWRlciAqLworCQlpZiAodGVzdF9iaXQoUkRTX01TR19BQ0tfUkVRVUlSRUQsICZybS0+bV9mbGFncykpCisJCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncyB8PSBSRFNfRkxBR19BQ0tfUkVRVUlSRUQ7CisJCWlmICh0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsICZybS0+bV9mbGFncykpCisJCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncyB8PSBSRFNfRkxBR19SRVRSQU5TTUlUVEVEOworCisJCS8qIElmIGl0IGhhcyBhIFJETUEgb3AsIHRlbGwgdGhlIHBlZXIgd2UgZGlkIGl0LiBUaGlzIGlzCisJCSAqIHVzZWQgYnkgdGhlIHBlZXIgdG8gcmVsZWFzZSB1c2Utb25jZSBSRE1BIE1Scy4gKi8KKwkJaWYgKHJtLT5tX3JkbWFfb3ApIHsKKwkJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hIGV4dF9oZHI7CisKKwkJCWV4dF9oZHIuaF9yZG1hX3JrZXkgPSBjcHVfdG9fYmUzMihybS0+bV9yZG1hX29wLT5yX2tleSk7CisJCQlyZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKCZybS0+bV9pbmMuaV9oZHIsCisJCQkJCVJEU19FWFRIRFJfUkRNQSwgJmV4dF9oZHIsIHNpemVvZihleHRfaGRyKSk7CisJCX0KKwkJaWYgKHJtLT5tX3JkbWFfY29va2llKSB7CisJCQlyZHNfbWVzc2FnZV9hZGRfcmRtYV9kZXN0X2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlyZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKSwKKwkJCQkJcmRzX3JkbWFfY29va2llX29mZnNldChybS0+bV9yZG1hX2Nvb2tpZSkpOworCQl9CisKKwkJLyogTm90ZSAtIHJkc19pd19waWdneWJfYWNrIGNsZWFycyB0aGUgQUNLX1JFUVVJUkVEIGJpdCwgc28KKwkJICogd2Ugc2hvdWxkIG5vdCBkbyB0aGlzIHVubGVzcyB3ZSBoYXZlIGEgY2hhbmNlIG9mIGF0IGxlYXN0CisJCSAqIHN0aWNraW5nIHRoZSBoZWFkZXIgaW50byB0aGUgc2VuZCByaW5nLiBXaGljaCBpcyB3aHkgd2UKKwkJICogc2hvdWxkIGNhbGwgcmRzX2l3X3JpbmdfYWxsb2MgZmlyc3QuICovCisJCXJtLT5tX2luYy5pX2hkci5oX2FjayA9IGNwdV90b19iZTY0KHJkc19pd19waWdneWJfYWNrKGljKSk7CisJCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oJnJtLT5tX2luYy5pX2hkcik7CisKKwkJLyoKKwkJICogVXBkYXRlIGFkdl9jcmVkaXRzIHNpbmNlIHdlIHJlc2V0IHRoZSBBQ0tfUkVRVUlSRUQgYml0LgorCQkgKi8KKwkJcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKGljLCAwLCAmcG9zdGVkLCAxKTsKKwkJYWR2X2NyZWRpdHMgKz0gcG9zdGVkOworCQlCVUdfT04oYWR2X2NyZWRpdHMgPiAyNTUpOworCX0gZWxzZSBpZiAoaWMtPmlfcm0gIT0gcm0pCisJCUJVRygpOworCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWZpcnN0ID0gc2VuZDsKKwlwcmV2ID0gTlVMTDsKKwlzY2F0ID0gJnJtLT5tX3NnW3NnXTsKKwlzZW50ID0gMDsKKwlpID0gMDsKKworCS8qIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBwdXQgYSBmZW5jZSBiZXR3ZWVuIGFuIFJETUEKKwkgKiBSRUFEIGFuZCB0aGUgZm9sbG93aW5nIFNFTkQuCisJICogV2UgY291bGQgZWl0aGVyIGRvIHRoaXMgYWxsIHRoZSB0aW1lCisJICogb3Igd2hlbiByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIFJpZ2h0IG5vdywgd2UgbGV0CisJICogdGhlIGFwcGxpY2F0aW9uIGNob29zZS4KKwkgKi8KKwlpZiAocm0tPm1fcmRtYV9vcCAmJiBybS0+bV9yZG1hX29wLT5yX2ZlbmNlKQorCQlzZW5kX2ZsYWdzID0gSUJfU0VORF9GRU5DRTsKKworCS8qCisJICogV2UgY291bGQgYmUgY29weWluZyB0aGUgaGVhZGVyIGludG8gdGhlIHVudXNlZCB0YWlsIG9mIHRoZSBwYWdlLgorCSAqIFRoYXQgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgd2hlbiB0aG9zZSBwYWdlcyBtaWdodAorCSAqIGJlIG1hcHBlZCB1c2Vyc3BhY2UgcGFnZXMgb3IgcGFnZSBjYWNoZSBwYWdlcy4gIFNvIGluc3RlYWQgd2UgYWx3YXlzCisJICogdXNlIGEgc2Vjb25kIHNnZSBhbmQgb3VyIGxvbmctbGl2ZWQgcmluZyBvZiBtYXBwZWQgaGVhZGVycy4gIFdlIHNlbmQKKwkgKiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhIHNvIHRoYXQgdGhlIGRhdGEgcGF5bG9hZCBjYW4gYmUgYWxpZ25lZCBvbgorCSAqIHRoZSByZWNlaXZlci4KKwkgKi8KKworCS8qIGhhbmRsZSBhIDAtbGVuIG1lc3NhZ2UgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKSB7CisJCXJkc19pd194bWl0X3BvcHVsYXRlX3dyKGljLCBzZW5kLCBwb3MsIDAsIDAsIHNlbmRfZmxhZ3MpOworCQlnb3RvIGFkZF9oZWFkZXI7CisJfQorCisJLyogaWYgdGhlcmUncyBkYXRhIHJlZmVyZW5jZSBpdCB3aXRoIGEgY2hhaW4gb2Ygd29yayByZXFzICovCisJZm9yICg7IGkgPCB3b3JrX2FsbG9jICYmIHNjYXQgIT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBsZW47CisKKwkJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCisJCWxlbiA9IG1pbihSRFNfRlJBR19TSVpFLCBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkgLSBvZmYpOworCQlyZHNfaXdfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgc2NhdCkgKyBvZmYsIGxlbiwKKwkJCQlzZW5kX2ZsYWdzKTsKKworCQkvKgorCQkgKiBXZSB3YW50IHRvIGRlbGF5IHNpZ25hbGluZyBjb21wbGV0aW9ucyBqdXN0IGVub3VnaCB0byBnZXQKKwkJICogdGhlIGJhdGNoaW5nIGJlbmVmaXRzIGJ1dCBub3Qgc28gbXVjaCB0aGF0IHdlIGNyZWF0ZSBkZWFkIHRpbWUKKwkJICogb24gdGhlIHdpcmUuCisJCSAqLworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF93cnMtLSA9PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzIC09IGxlbjsKKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPD0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJfQorCisJCS8qCisJCSAqIEFsd2F5cyBzaWduYWwgdGhlIGxhc3Qgb25lIGlmIHdlJ3JlIHN0b3BwaW5nIGR1ZSB0byBmbG93IGNvbnRyb2wuCisJCSAqLworCQlpZiAoZmxvd19jb250cm9sbGVkICYmIGkgPT0gKHdvcmtfYWxsb2MtMSkpCisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCisJCXJkc2RlYnVnKCJzZW5kICVwIHdyICVwIG51bV9zZ2UgJXUgbmV4dCAlcFxuIiwgc2VuZCwKKwkJCSAmc2VuZC0+c193ciwgc2VuZC0+c193ci5udW1fc2dlLCBzZW5kLT5zX3dyLm5leHQpOworCisJCXNlbnQgKz0gbGVuOworCQlvZmYgKz0gbGVuOworCQlpZiAob2ZmID09IGliX3NnX2RtYV9sZW4oZGV2LCBzY2F0KSkgeworCQkJc2NhdCsrOworCQkJb2ZmID0gMDsKKwkJfQorCithZGRfaGVhZGVyOgorCQkvKiBUYWNrIG9uIHRoZSBoZWFkZXIgYWZ0ZXIgdGhlIGRhdGEuIFRoZSBoZWFkZXIgU0dFIHNob3VsZCBhbHJlYWR5CisJCSAqIGhhdmUgYmVlbiBzZXQgdXAgdG8gcG9pbnQgdG8gdGhlIHJpZ2h0IGhlYWRlciBidWZmZXIuICovCisJCW1lbWNweSgmaWMtPmlfc2VuZF9oZHJzW3Bvc10sICZybS0+bV9pbmMuaV9oZHIsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCisJCWlmICgwKSB7CisJCQlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmljLT5pX3NlbmRfaGRyc1twb3NdOworCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInNlbmQgV1IgZHBvcnQ9JXUgZmxhZ3M9MHgleCBsZW49JWRcbiIsCisJCQkJYmUxNl90b19jcHUoaGRyLT5oX2Rwb3J0KSwKKwkJCQloZHItPmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUoaGRyLT5oX2xlbikpOworCQl9CisJCWlmIChhZHZfY3JlZGl0cykgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJLyogYWRkIGNyZWRpdCBhbmQgcmVkbyB0aGUgaGVhZGVyIGNoZWNrc3VtICovCisJCQloZHItPmhfY3JlZGl0ID0gYWR2X2NyZWRpdHM7CisJCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKGhkcik7CisJCQlhZHZfY3JlZGl0cyA9IDA7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfY3JlZGl0X3VwZGF0ZXMpOworCQl9CisKKwkJaWYgKHByZXYpCisJCQlwcmV2LT5zX3dyLm5leHQgPSAmc2VuZC0+c193cjsKKwkJcHJldiA9IHNlbmQ7CisKKwkJcG9zID0gKHBvcyArIDEpICUgaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJfQorCisJLyogQWNjb3VudCB0aGUgUkRTIGhlYWRlciBpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIHNlbnQsIGJ1dCBqdXN0IG9uY2UuCisJICogVGhlIGNhbGxlciBoYXMgbm8gY29uY2VwdCBvZiBmcmFnbWVudGF0aW9uLiAqLworCWlmIChoZHJfb2ZmID09IDApCisJCXNlbnQgKz0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCS8qIGlmIHdlIGZpbmlzaGVkIHRoZSBtZXNzYWdlIHRoZW4gc2VuZCBjb21wbGV0aW9uIG93bnMgaXQgKi8KKwlpZiAoc2NhdCA9PSAmcm0tPm1fc2dbcm0tPm1fY291bnRdKSB7CisJCXByZXYtPnNfcm0gPSBpYy0+aV9ybTsKKwkJcHJldi0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJaWMtPmlfcm0gPSBOVUxMOworCX0KKworCWlmIChpIDwgd29ya19hbGxvYykgeworCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBpKTsKKwkJd29ya19hbGxvYyA9IGk7CisJfQorCWlmIChpYy0+aV9mbG93Y3RsICYmIGkgPCBjcmVkaXRfYWxsb2MpCisJCXJkc19pd19zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdF9hbGxvYyAtIGkpOworCisJLyogWFhYIG5lZWQgdG8gd29ycnkgYWJvdXQgZmFpbGVkX3dyIGFuZCBwYXJ0aWFsIHNlbmRzLiAqLworCWZhaWxlZF93ciA9ICZmaXJzdC0+c193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmZmlyc3QtPnNfd3IsICZmYWlsZWRfd3IpOworCXJkc2RlYnVnKCJpYyAlcCBmaXJzdCAlcCAod3IgJXApIHJldCAlZCB3ciAlcFxuIiwgaWMsCisJCSBmaXJzdCwgJmZpcnN0LT5zX3dyLCByZXQsIGZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9wb3N0X3NlbmQgdG8gJXBJNCAiCisJCSAgICAgICAicmV0dXJuZWQgJWRcbiIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlpZiAocHJldi0+c19ybSkgeworCQkJaWMtPmlfcm0gPSBwcmV2LT5zX3JtOworCQkJcHJldi0+c19ybSA9IE5VTEw7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gc2VudDsKK291dDoKKwlCVUdfT04oYWR2X2NyZWRpdHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19idWlsZF9zZW5kX2Zhc3RyZWcoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQsIGludCBuZW50LCBpbnQgbGVuLCB1NjQgc2dfYWRkcikKK3sKKwlCVUdfT04obmVudCA+IHNlbmQtPnNfcGFnZV9saXN0LT5tYXhfcGFnZV9saXN0X2xlbik7CisJLyoKKwkgKiBQZXJmb3JtIGEgV1IgZm9yIHRoZSBmYXN0X3JlZ19tci4gRWFjaCBpbmRpdmlkdWFsIHBhZ2UKKwkgKiBpbiB0aGUgc2cgbGlzdCBpcyBhZGRlZCB0byB0aGUgZmFzdCByZWcgcGFnZSBsaXN0IGFuZCBwbGFjZWQKKwkgKiBpbnNpZGUgdGhlIGZhc3RfcmVnX21yIFdSLgorCSAqLworCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfRkFTVF9SRUdfTVI7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5sZW5ndGggPSBsZW47CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5ya2V5ID0gc2VuZC0+c19tci0+cmtleTsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdCA9IHNlbmQtPnNfcGFnZV9saXN0OworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0X2xlbiA9IG5lbnQ7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX3NoaWZ0ID0gcmRzX2l3ZGV2LT5wYWdlX3NoaWZ0OworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gSUJfQUNDRVNTX1JFTU9URV9XUklURTsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmlvdmFfc3RhcnQgPSBzZ19hZGRyOworCisJaWJfdXBkYXRlX2Zhc3RfcmVnX2tleShzZW5kLT5zX21yLCBzZW5kLT5zX3JlbWFwX2NvdW50KyspOworfQorCitpbnQgcmRzX2l3X3htaXRfcmRtYShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQgPSBOVUxMOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpmaXJzdDsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqcHJldjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXVuc2lnbmVkIGxvbmcgbGVuOworCXU2NCByZW1vdGVfYWRkciA9IG9wLT5yX3JlbW90ZV9hZGRyOworCXUzMiBwb3MsIGZyX3BvczsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgaTsKKwl1MzIgajsKKwlpbnQgc2VudDsKKwlpbnQgcmV0OworCWludCBudW1fc2dlOworCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKworCS8qIG1hcCB0aGUgbWVzc2FnZSB0aGUgZmlyc3QgdGltZSB3ZSBzZWUgaXQgKi8KKwlpZiAoIW9wLT5yX21hcHBlZCkgeworCQlvcC0+cl9jb3VudCA9IGliX2RtYV9tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLCAob3AtPnJfd3JpdGUpID8KKwkJCQkJRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCXJkc2RlYnVnKCJpYyAlcCBtYXBwaW5nIG9wICVwOiAlZFxuIiwgaWMsIG9wLCBvcC0+cl9jb3VudCk7CisJCWlmIChvcC0+cl9jb3VudCA9PSAwKSB7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9wLT5yX21hcHBlZCA9IDE7CisJfQorCisJaWYgKCFvcC0+cl93cml0ZSkgeworCQkvKiBBbGxvYyBzcGFjZSBvbiB0aGUgc2VuZCBxdWV1ZSBmb3IgdGhlIGZhc3RyZWcgKi8KKwkJd29ya19hbGxvYyA9IHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIDEsICZmcl9wb3MpOworCQlpZiAod29ya19hbGxvYyAhPSAxKSB7CisJCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3JpbmdfZnVsbCk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEluc3RlYWQgb2Yga25vd2luZyBob3cgdG8gcmV0dXJuIGEgcGFydGlhbCByZG1hIHJlYWQvd3JpdGUgd2UgaW5zaXN0IHRoYXQgdGhlcmUKKwkgKiBiZSBlbm91Z2ggd29yayByZXF1ZXN0cyB0byBzZW5kIHRoZSBlbnRpcmUgbWVzc2FnZS4KKwkgKi8KKwlpID0gY2VpbChvcC0+cl9jb3VudCwgcmRzX2l3ZGV2LT5tYXhfc2dlKTsKKworCXdvcmtfYWxsb2MgPSByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCBpLCAmcG9zKTsKKwlpZiAod29ya19hbGxvYyAhPSBpKSB7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisJaWYgKCFvcC0+cl93cml0ZSkgeworCQlmaXJzdCA9IHByZXYgPSAmaWMtPmlfc2VuZHNbZnJfcG9zXTsKKwl9IGVsc2UgeworCQlmaXJzdCA9IHNlbmQ7CisJCXByZXYgPSBOVUxMOworCX0KKwlzY2F0ID0gJm9wLT5yX3NnWzBdOworCXNlbnQgPSAwOworCW51bV9zZ2UgPSBvcC0+cl9jb3VudDsKKworCWZvciAoaSA9IDA7IGkgPCB3b3JrX2FsbG9jICYmIHNjYXQgIT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XTsgaSsrKSB7CisJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IDA7CisJCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKworCQkvKgorCQkgKiBXZSB3YW50IHRvIGRlbGF5IHNpZ25hbGluZyBjb21wbGV0aW9ucyBqdXN0IGVub3VnaCB0byBnZXQKKwkJICogdGhlIGJhdGNoaW5nIGJlbmVmaXRzIGJ1dCBub3Qgc28gbXVjaCB0aGF0IHdlIGNyZWF0ZSBkZWFkIHRpbWUgb24gdGhlIHdpcmUuCisJCSAqLworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF93cnMtLSA9PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisJCX0KKworCQkvKiBUbyBhdm9pZCB0aGUgbmVlZCB0byBoYXZlIHRoZSBwbHVtYmluZyB0byBpbnZhbGlkYXRlIHRoZSBmYXN0cmVnX21yIHVzZWQKKwkJICogZm9yIGxvY2FsIGFjY2VzcyBhZnRlciBSRFMgaXMgZmluaXNoZWQgd2l0aCBpdCwgdXNpbmcKKwkJICogSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WIHdpbGwgaW52YWxpZGF0ZSBpdCBhZnRlciB0aGUgcmVhZCBoYXMgY29tcGxldGVkLgorCQkgKi8KKwkJaWYgKG9wLT5yX3dyaXRlKQorCQkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9SRE1BX1dSSVRFOworCQllbHNlCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1JETUFfUkVBRF9XSVRIX0lOVjsKKworCQlzZW5kLT5zX3dyLndyLnJkbWEucmVtb3RlX2FkZHIgPSByZW1vdGVfYWRkcjsKKwkJc2VuZC0+c193ci53ci5yZG1hLnJrZXkgPSBvcC0+cl9rZXk7CisJCXNlbmQtPnNfb3AgPSBvcDsKKworCQlpZiAobnVtX3NnZSA+IHJkc19pd2Rldi0+bWF4X3NnZSkgeworCQkJc2VuZC0+c193ci5udW1fc2dlID0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCQkJbnVtX3NnZSAtPSByZHNfaXdkZXYtPm1heF9zZ2U7CisJCX0gZWxzZQorCQkJc2VuZC0+c193ci5udW1fc2dlID0gbnVtX3NnZTsKKworCQlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisKKwkJZm9yIChqID0gMDsgaiA8IHNlbmQtPnNfd3IubnVtX3NnZSAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGorKykgeworCQkJbGVuID0gaWJfc2dfZG1hX2xlbihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKworCQkJaWYgKHNlbmQtPnNfd3Iub3Bjb2RlID09IElCX1dSX1JETUFfUkVBRF9XSVRIX0lOVikKKwkJCQlzZW5kLT5zX3BhZ2VfbGlzdC0+cGFnZV9saXN0W2pdID0gaWJfc2dfZG1hX2FkZHJlc3MoaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisJCQllbHNlIHsKKwkJCQlzZW5kLT5zX3NnZVtqXS5hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisJCQkJc2VuZC0+c19zZ2Vbal0ubGVuZ3RoID0gbGVuOworCQkJCXNlbmQtPnNfc2dlW2pdLmxrZXkgPSByZHNfaXdfbG9jYWxfZG1hX2xrZXkoaWMpOworCQkJfQorCisJCQlzZW50ICs9IGxlbjsKKwkJCXJkc2RlYnVnKCJpYyAlcCBzZW50ICVkIHJlbW90ZV9hZGRyICVsbHVcbiIsIGljLCBzZW50LCByZW1vdGVfYWRkcik7CisJCQlyZW1vdGVfYWRkciArPSBsZW47CisKKwkJCXNjYXQrKzsKKwkJfQorCisJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlYpIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCQlzZW5kLT5zX3NnZVswXS5hZGRyID0gY29ubi0+Y194bWl0X3JtLT5tX3JzLT5yc191c2VyX2FkZHI7CisJCQlzZW5kLT5zX3NnZVswXS5sZW5ndGggPSBjb25uLT5jX3htaXRfcm0tPm1fcnMtPnJzX3VzZXJfYnl0ZXM7CisJCQlzZW5kLT5zX3NnZVswXS5sa2V5ID0gaWMtPmlfc2VuZHNbZnJfcG9zXS5zX21yLT5sa2V5OworCQl9CisKKwkJcmRzZGVidWcoInNlbmQgJXAgd3IgJXAgbnVtX3NnZSAldSBuZXh0ICVwXG4iLCBzZW5kLAorCQkJJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlwcmV2ID0gc2VuZDsKKwkJaWYgKCsrc2VuZCA9PSAmaWMtPmlfc2VuZHNbaWMtPmlfc2VuZF9yaW5nLndfbnJdKQorCQkJc2VuZCA9IGljLT5pX3NlbmRzOworCX0KKworCS8qIGlmIHdlIGZpbmlzaGVkIHRoZSBtZXNzYWdlIHRoZW4gc2VuZCBjb21wbGV0aW9uIG93bnMgaXQgKi8KKwlpZiAoc2NhdCA9PSAmb3AtPnJfc2dbb3AtPnJfY291bnRdKQorCQlmaXJzdC0+c193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWlmIChpIDwgd29ya19hbGxvYykgeworCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBpKTsKKwkJd29ya19hbGxvYyA9IGk7CisJfQorCisJLyogT24gaVdBUlAsIGxvY2FsIG1lbW9yeSBhY2Nlc3MgYnkgYSByZW1vdGUgc3lzdGVtIChpZSwgUkRNQSBSZWFkKSBpcyBub3QKKwkgKiByZWNvbW1lbmRlZC4gIFB1dHRpbmcgdGhlIGxrZXkgb24gdGhlIHdpcmUgaXMgYSBzZWN1cml0eSBob2xlLCBhcyBpdCBjYW4KKwkgKiBhbGxvdyBmb3IgbWVtb3J5IGFjY2VzcyB0byBhbGwgb2YgbWVtb3J5IG9uIHRoZSByZW1vdGUgc3lzdGVtLiAgU29tZQorCSAqIGFkYXB0ZXJzIGRvIG5vdCBhbGxvdyB1c2luZyB0aGUgbGtleSBmb3IgdGhpcyBhdCBhbGwuICBUbyBieXBhc3MgdGhpcyB1c2UgYQorCSAqIGZhc3RyZWdfbXIgKG9yIHBvc3NpYmx5IGEgZG1hX21yKQorCSAqLworCWlmICghb3AtPnJfd3JpdGUpIHsKKwkJcmRzX2l3X2J1aWxkX3NlbmRfZmFzdHJlZyhyZHNfaXdkZXYsIGljLCAmaWMtPmlfc2VuZHNbZnJfcG9zXSwKKwkJCW9wLT5yX2NvdW50LCBzZW50LCBjb25uLT5jX3htaXRfcm0tPm1fcnMtPnJzX3VzZXJfYWRkcik7CisJCXdvcmtfYWxsb2MrKzsKKwl9CisKKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogcmRtYSBpYl9wb3N0X3NlbmQgdG8gJXBJNCAiCisJCSAgICAgICAicmV0dXJuZWQgJWRcbiIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pd194bWl0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCS8qIFdlIG1heSBoYXZlIGEgcGVuZGluZyBBQ0sgb3Igd2luZG93IHVwZGF0ZSB3ZSB3ZXJlIHVuYWJsZQorCSAqIHRvIHNlbmQgcHJldmlvdXNseSAoZHVlIHRvIGZsb3cgY29udHJvbCkuIFRyeSBhZ2Fpbi4gKi8KKwlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19zdGF0cy5jIGIvbmV0L3Jkcy9pd19zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzdlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3N0YXRzLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MsIHJkc19pd19zdGF0cykgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdGF0aWMgY2hhciAqcmRzX2l3X3N0YXRfbmFtZXNbXSA9IHsKKwkiaXdfY29ubmVjdF9yYWNlZCIsCisJIml3X2xpc3Rlbl9jbG9zZWRfc3RhbGUiLAorCSJpd190eF9jcV9jYWxsIiwKKwkiaXdfdHhfY3FfZXZlbnQiLAorCSJpd190eF9yaW5nX2Z1bGwiLAorCSJpd190eF90aHJvdHRsZSIsCisJIml3X3R4X3NnX21hcHBpbmdfZmFpbHVyZSIsCisJIml3X3R4X3N0YWxsZWQiLAorCSJpd190eF9jcmVkaXRfdXBkYXRlcyIsCisJIml3X3J4X2NxX2NhbGwiLAorCSJpd19yeF9jcV9ldmVudCIsCisJIml3X3J4X3JpbmdfZW1wdHkiLAorCSJpd19yeF9yZWZpbGxfZnJvbV9jcSIsCisJIml3X3J4X3JlZmlsbF9mcm9tX3RocmVhZCIsCisJIml3X3J4X2FsbG9jX2xpbWl0IiwKKwkiaXdfcnhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpd19hY2tfc2VudCIsCisJIml3X2Fja19zZW5kX2ZhaWx1cmUiLAorCSJpd19hY2tfc2VuZF9kZWxheWVkIiwKKwkiaXdfYWNrX3NlbmRfcGlnZ3liYWNrZWQiLAorCSJpd19hY2tfcmVjZWl2ZWQiLAorCSJpd19yZG1hX21yX2FsbG9jIiwKKwkiaXdfcmRtYV9tcl9mcmVlIiwKKwkiaXdfcmRtYV9tcl91c2VkIiwKKwkiaXdfcmRtYV9tcl9wb29sX2ZsdXNoIiwKKwkiaXdfcmRtYV9tcl9wb29sX3dhaXQiLAorCSJpd19yZG1hX21yX3Bvb2xfZGVwbGV0ZWQiLAorfTsKKwordW5zaWduZWQgaW50IHJkc19pd19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYXZhaWwpCit7CisJc3RydWN0IHJkc19pd19zdGF0aXN0aWNzIHN0YXRzID0gezAsIH07CisJdWludDY0X3QgKnNyYzsKKwl1aW50NjRfdCAqc3VtOworCXNpemVfdCBpOworCWludCBjcHU7CisKKwlpZiAoYXZhaWwgPCBBUlJBWV9TSVpFKHJkc19pd19zdGF0X25hbWVzKSkKKwkJZ290byBvdXQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzcmMgPSAodWludDY0X3QgKikmKHBlcl9jcHUocmRzX2l3X3N0YXRzLCBjcHUpKTsKKwkJc3VtID0gKHVpbnQ2NF90ICopJnN0YXRzOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0YXRzKSAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKwkJCSooc3VtKyspICs9ICooc3JjKyspOworCX0KKworCXJkc19zdGF0c19pbmZvX2NvcHkoaXRlciwgKHVpbnQ2NF90ICopJnN0YXRzLCByZHNfaXdfc3RhdF9uYW1lcywKKwkJCSAgICBBUlJBWV9TSVpFKHJkc19pd19zdGF0X25hbWVzKSk7CitvdXQ6CisJcmV0dXJuIEFSUkFZX1NJWkUocmRzX2l3X3N0YXRfbmFtZXMpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19zeXNjdGwuYyBiL25ldC9yZHMvaXdfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5MDY3OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfc3lzY3RsLmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgIml3LmgiCisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmRzX2l3X3N5c2N0bF9oZHI7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93ciA9IFJEU19JV19ERUZBVUxUX1NFTkRfV1I7Cit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IgPSBSRFNfSVdfREVGQVVMVF9SRUNWX1dSOwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24gPSAoMTI4ICogMTAyNCAqIDEwMjQpIC8gUkRTX0ZSQUdfU0laRTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3dyX21pbiA9IDE7CisvKiBoYXJkd2FyZSB3aWxsIGZhaWwgQ1EgY3JlYXRpb24gbG9uZyBiZWZvcmUgdGhpcyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWF4ID0gKHUzMil+MDsKKwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnMgPSAxNjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyX21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9tYXggPSA2NDsKKwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlcyA9ICgxNiA8PCAyMCk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlc19taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4ID0gfjBVTDsKKwordW5zaWduZWQgaW50IHJkc19pd19zeXNjdGxfZmxvd19jb250cm9sID0gMTsKKworY3RsX3RhYmxlIHJkc19pd19zeXNjdGxfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3NlbmRfd3IiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93ciwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaXdfc3lzY3RsX21heF93cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3JlY3Zfd3IiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93ciwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaXdfc3lzY3RsX21heF93cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfd3IiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfdW5zaWduYWxlZF9ieXRlcyIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlc19tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3JlY3ZfYWxsb2NhdGlvbiIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24sCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAiZmxvd19jb250cm9sIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfZmxvd19jb250cm9sLAorCQkubWF4bGVuCQk9IHNpemVvZihyZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsgLmN0bF9uYW1lID0gMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3BhdGggcmRzX2l3X3N5c2N0bF9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJyZHMiLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJpdyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKwordm9pZCByZHNfaXdfc3lzY3RsX2V4aXQodm9pZCkKK3sKKwlpZiAocmRzX2l3X3N5c2N0bF9oZHIpCisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHJkc19pd19zeXNjdGxfaGRyKTsKK30KKworaW50IF9faW5pdCByZHNfaXdfc3lzY3RsX2luaXQodm9pZCkKK3sKKwlyZHNfaXdfc3lzY3RsX2hkciA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhyZHNfaXdfc3lzY3RsX3BhdGgsIHJkc19pd19zeXNjdGxfdGFibGUpOworCWlmIChyZHNfaXdfc3lzY3RsX2hkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5jIGIvbmV0L3Jkcy9sb29wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2MTk5NwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvbG9vcC5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAibG9vcC5oIgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvb3BfY29ubnNfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGxvb3BfY29ubnMpOworCisvKgorICogVGhpcyAnbG9vcGJhY2snIHRyYW5zcG9ydCBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgZmxvd3MgdGhhdCBvcmlnaW5hdGUKKyAqIGFuZCB0ZXJtaW5hdGUgb24gdGhlIHNhbWUgbWFjaGluZS4KKyAqCisgKiBDb25uZWN0aW9uIGJ1aWxkLXVwIG5vdGljZXMgaWYgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgdGhvdWdodCBvZgorICogYXMgYSBsb2NhbCBhZGRyZXNzIGJ5IGEgdHJhbnNwb3J0LiAgQXQgdGhhdCB0aW1lIGl0IGRlY2lkZXMgdG8gdXNlIHRoZQorICogbG9vcGJhY2sgdHJhbnNwb3J0IGluc3RlYWQgb2YgdGhlIGJvdW5kIHRyYW5zcG9ydCBvZiB0aGUgc2VuZGluZyBzb2NrZXQuCisgKgorICogVGhlIGxvb3BiYWNrIHRyYW5zcG9ydCdzIHNlbmRpbmcgcGF0aCBqdXN0IGhhbmRzIHRoZSBzZW50IHJkc19tZXNzYWdlCisgKiBzdHJhaWdodCB0byB0aGUgcmVjZWl2aW5nIHBhdGggdmlhIGFuIGVtYmVkZGVkIHJkc19pbmNvbWluZy4KKyAqLworCisvKgorICogVXN1YWxseSBhIG1lc3NhZ2UgdHJhbnNpdHMgYm90aCB0aGUgc2VuZGVyIGFuZCByZWNlaXZlcidzIGNvbm5zIGFzIGl0CisgKiBmbG93cyB0byB0aGUgcmVjZWl2ZXIuICBJbiB0aGUgbG9vcGJhY2sgY2FzZSwgdGhvdWdoLCB0aGUgcmVjZWl2ZSBwYXRoCisgKiBpcyBoYW5kZWQgdGhlIHNlbmRpbmcgY29ubiBzbyB0aGUgc2Vuc2Ugb2YgdGhlIGFkZHJlc3NlcyBpcyByZXZlcnNlZC4KKyAqLworc3RhdGljIGludCByZHNfbG9vcF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSB1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLAorCQkJIHVuc2lnbmVkIGludCBvZmYpCit7CisJQlVHX09OKGhkcl9vZmYgfHwgc2cgfHwgb2ZmKTsKKworCXJkc19pbmNfaW5pdCgmcm0tPm1faW5jLCBjb25uLCBjb25uLT5jX2xhZGRyKTsKKwlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOyAvKiBmb3IgdGhlIGluYyAqLworCisJcmRzX3JlY3ZfaW5jb21pbmcoY29ubiwgY29ubi0+Y19sYWRkciwgY29ubi0+Y19mYWRkciwgJnJtLT5tX2luYywKKwkJCSAgR0ZQX0tFUk5FTCwgS01fVVNFUjApOworCisJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSksCisJCQkgICAgTlVMTCk7CisKKwlyZHNfaW5jX3B1dCgmcm0tPm1faW5jKTsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICsgYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKK30KKworc3RhdGljIGludCByZHNfbG9vcF94bWl0X2NvbmdfbWFwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgIHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCUJVR19PTihvZmZzZXQpOworCUJVR19PTihtYXAgIT0gY29ubi0+Y19sY29uZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkRTX0NPTkdfTUFQX1BBR0VTOyBpKyspIHsKKwkJbWVtY3B5KCh2b2lkICopY29ubi0+Y19mY29uZy0+bV9wYWdlX2FkZHJzW2ldLAorCQkgICAgICAgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSwgUEFHRV9TSVpFKTsKKwl9CisKKwlyZHNfY29uZ19tYXBfdXBkYXRlZChjb25uLT5jX2Zjb25nLCB+KHU2NCkgMCk7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSArIFJEU19DT05HX01BUF9CWVRFUzsKK30KKworLyogd2UgbmVlZCB0byBhdCBsZWFzdCBnaXZlIHRoZSB0aHJlYWQgc29tZXRoaW5nIHRvIHN1Y2NlZWQgKi8KK3N0YXRpYyBpbnQgcmRzX2xvb3BfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxvb3Bfbm9kZTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47Cit9OworCisvKgorICogRXZlbiB0aGUgbG9vcGJhY2sgdHJhbnNwb3J0IG5lZWRzIHRvIGtlZXAgdHJhY2sgb2YgaXRzIGNvbm5lY3Rpb25zLAorICogc28gaXQgY2FuIGNhbGwgcmRzX2Nvbm5fZGVzdHJveSgpIG9uIHRoZW0gb24gZXhpdC4gTi5CLiB0aGVyZSBhcmUKKyAqIDErIGxvb3BiYWNrIGFkZHJlc3NlcyAoMTI3LiouKi4qKSBzbyBpdCdzIG5vdCBhIGJ1ZyB0byBoYXZlCisgKiBtdWx0aXBsZSBsb29wYmFjayBjb25ucyBhbGxvY2F0ZWQsIGFsdGhvdWdoIHJhdGhlciB1c2VsZXNzLgorICovCitzdGF0aWMgaW50IHJkc19sb29wX2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24gKmxjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmxjLT5sb29wX25vZGUpOworCWxjLT5jb25uID0gY29ubjsKKwljb25uLT5jX3RyYW5zcG9ydF9kYXRhID0gbGM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9vcF9jb25uc19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbGMtPmxvb3Bfbm9kZSwgJmxvb3BfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvb3BfY29ubnNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19sb29wX2Nvbm5fZnJlZSh2b2lkICphcmcpCit7CisJc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24gKmxjID0gYXJnOworCXJkc2RlYnVnKCJsYyAlcFxuIiwgbGMpOworCWxpc3RfZGVsKCZsYy0+bG9vcF9ub2RlKTsKKwlrZnJlZShsYyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2xvb3BfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZHNfY29ubmVjdF9jb21wbGV0ZShjb25uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmRzX2xvb3BfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7Cit9CisKK3ZvaWQgcmRzX2xvb3BfZXhpdCh2b2lkKQoreworCXN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uICpsYywgKl9sYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJmxvb3BfY29ubnNfbG9jayk7CisJbGlzdF9zcGxpY2UoJmxvb3BfY29ubnMsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmxvb3BfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycSgmbG9vcF9jb25uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsYywgX2xjLCAmdG1wX2xpc3QsIGxvb3Bfbm9kZSkgeworCQlXQVJOX09OKGxjLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGxjLT5jb25uKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24ndCBnbyB0aHJvdWdoIGdlbmVyaWMKKyAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24ndCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuICAubGlzdGVuX3N0b3AgYW5kCisgKiAubGFkZHJfY2hlY2sgYXJlIG1pc3NpbmcgYmVjYXVzZSB0cmFuc3BvcnQuYyBkb2Vzbid0IGl0ZXJhdGUgb3ZlcgorICogcmRzX2xvb3BfdHJhbnNwb3J0LgorICovCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfbG9vcF90cmFuc3BvcnQgPSB7CisJLnhtaXQJCQk9IHJkc19sb29wX3htaXQsCisJLnhtaXRfY29uZ19tYXAJCT0gcmRzX2xvb3BfeG1pdF9jb25nX21hcCwKKwkucmVjdgkJCT0gcmRzX2xvb3BfcmVjdiwKKwkuY29ubl9hbGxvYwkJPSByZHNfbG9vcF9jb25uX2FsbG9jLAorCS5jb25uX2ZyZWUJCT0gcmRzX2xvb3BfY29ubl9mcmVlLAorCS5jb25uX2Nvbm5lY3QJCT0gcmRzX2xvb3BfY29ubl9jb25uZWN0LAorCS5jb25uX3NodXRkb3duCQk9IHJkc19sb29wX2Nvbm5fc2h1dGRvd24sCisJLmluY19jb3B5X3RvX3VzZXIJPSByZHNfbWVzc2FnZV9pbmNfY29weV90b191c2VyLAorCS5pbmNfcHVyZ2UJCT0gcmRzX21lc3NhZ2VfaW5jX3B1cmdlLAorCS5pbmNfZnJlZQkJPSByZHNfbWVzc2FnZV9pbmNfZnJlZSwKKwkudF9uYW1lCQkJPSAibG9vcGJhY2siLAorfTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5oIGIvbmV0L3Jkcy9sb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyYjA5MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvbG9vcC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfUkRTX0xPT1BfSAorI2RlZmluZSBfUkRTX0xPT1BfSAorCisvKiBsb29wLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfbG9vcF90cmFuc3BvcnQ7CisKK3ZvaWQgcmRzX2xvb3BfZXhpdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMTVkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL21lc3NhZ2UuYwpAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQJcmRzX2V4dGhkcl9zaXplW19fUkRTX0VYVEhEUl9NQVhdID0geworW1JEU19FWFRIRFJfTk9ORV0JPSAwLAorW1JEU19FWFRIRFJfVkVSU0lPTl0JPSBzaXplb2Yoc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24pLAorW1JEU19FWFRIRFJfUkRNQV0JPSBzaXplb2Yoc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEpLAorW1JEU19FWFRIRFJfUkRNQV9ERVNUXQk9IHNpemVvZihzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYV9kZXN0KSwKK307CisKKwordm9pZCByZHNfbWVzc2FnZV9hZGRyZWYoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwlyZHNkZWJ1ZygiYWRkcmVmIHJtICVwIHJlZiAlZFxuIiwgcm0sIGF0b21pY19yZWFkKCZybS0+bV9yZWZjb3VudCkpOworCWF0b21pY19pbmMoJnJtLT5tX3JlZmNvdW50KTsKK30KKworLyoKKyAqIFRoaXMgcmVsaWVzIG9uIGRtYV9tYXBfc2coKSBub3QgdG91Y2hpbmcgc2dbXS5wYWdlIGR1cmluZyBtZXJnaW5nLgorICovCitzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChSRFNfTVNHX1BBR0VWRUMsICZybS0+bV9mbGFncykpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcm0tPm1fbmVudHM7IGkrKykgeworCQlyZHNkZWJ1ZygicHV0dGluZyBkYXRhIHBhZ2UgJXBcbiIsICh2b2lkICopc2dfcGFnZSgmcm0tPm1fc2dbaV0pKTsKKwkJLyogWFhYIHdpbGwgaGF2ZSB0byBwdXRfcGFnZSBmb3IgcGFnZSByZWZzICovCisJCV9fZnJlZV9wYWdlKHNnX3BhZ2UoJnJtLT5tX3NnW2ldKSk7CisJfQorCXJtLT5tX25lbnRzID0gMDsKKworCWlmIChybS0+bV9yZG1hX29wKQorCQlyZHNfcmRtYV9mcmVlX29wKHJtLT5tX3JkbWFfb3ApOworCWlmIChybS0+bV9yZG1hX21yKQorCQlyZHNfbXJfcHV0KHJtLT5tX3JkbWFfbXIpOworfQorCit2b2lkIHJkc19tZXNzYWdlX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfbWVzc2FnZSwgbV9pbmMpOworCXJkc19tZXNzYWdlX3B1cmdlKHJtKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwlyZHNkZWJ1ZygicHV0IHJtICVwIHJlZiAlZFxuIiwgcm0sIGF0b21pY19yZWFkKCZybS0+bV9yZWZjb3VudCkpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJtLT5tX3JlZmNvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnJtLT5tX3NvY2tfaXRlbSkpOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnJtLT5tX2Nvbm5faXRlbSkpOworCQlyZHNfbWVzc2FnZV9wdXJnZShybSk7CisKKwkJa2ZyZWUocm0pOworCX0KK30KKwordm9pZCByZHNfbWVzc2FnZV9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfbWVzc2FnZSwgbV9pbmMpOworCXJkc19tZXNzYWdlX3B1dChybSk7Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIF9fYmUxNiBzcG9ydCwKKwkJCQkgX19iZTE2IGRwb3J0LCB1NjQgc2VxKQoreworCWhkci0+aF9mbGFncyA9IDA7CisJaGRyLT5oX3Nwb3J0ID0gc3BvcnQ7CisJaGRyLT5oX2Rwb3J0ID0gZHBvcnQ7CisJaGRyLT5oX3NlcXVlbmNlID0gY3B1X3RvX2JlNjQoc2VxKTsKKwloZHItPmhfZXh0aGRyWzBdID0gUkRTX0VYVEhEUl9OT05FOworfQorCitpbnQgcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAorCQl1bnNpZ25lZCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgZXh0X2xlbiA9IHNpemVvZih1OCkgKyBsZW47CisJdW5zaWduZWQgY2hhciAqZHN0OworCisJLyogRm9yIG5vdywgcmVmdXNlIHRvIGFkZCBtb3JlIHRoYW4gb25lIGV4dGVuc2lvbiBoZWFkZXIgKi8KKwlpZiAoaGRyLT5oX2V4dGhkclswXSAhPSBSRFNfRVhUSERSX05PTkUpCisJCXJldHVybiAwOworCisJaWYgKHR5cGUgPj0gX19SRFNfRVhUSERSX01BWAorCSB8fCBsZW4gIT0gcmRzX2V4dGhkcl9zaXplW3R5cGVdKQorCQlyZXR1cm4gMDsKKworCWlmIChleHRfbGVuID49IFJEU19IRUFERVJfRVhUX1NQQUNFKQorCQlyZXR1cm4gMDsKKwlkc3QgPSBoZHItPmhfZXh0aGRyOworCisJKmRzdCsrID0gdHlwZTsKKwltZW1jcHkoZHN0LCBkYXRhLCBsZW4pOworCisJZHN0W2xlbl0gPSBSRFNfRVhUSERSX05PTkU7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJZiBhIG1lc3NhZ2UgaGFzIGV4dGVuc2lvbiBoZWFkZXJzLCByZXRyaWV2ZSB0aGVtIGhlcmUuCisgKiBDYWxsIGxpa2UgdGhpczoKKyAqCisgKiB1bnNpZ25lZCBpbnQgcG9zID0gMDsKKyAqCisgKiB3aGlsZSAoMSkgeworICoJYnVmbGVuID0gc2l6ZW9mKGJ1ZmZlcik7CisgKgl0eXBlID0gcmRzX21lc3NhZ2VfbmV4dF9leHRlbnNpb24oaGRyLCAmcG9zLCBidWZmZXIsICZidWZsZW4pOworICoJaWYgKHR5cGUgPT0gUkRTX0VYVEhEUl9OT05FKQorICoJCWJyZWFrOworICoJLi4uCisgKiB9CisgKi8KK2ludCByZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAorCQl1bnNpZ25lZCBpbnQgKnBvcywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgKmJ1ZmxlbikKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBleHRfdHlwZSwgZXh0X2xlbjsKKwl1OCAqc3JjID0gaGRyLT5oX2V4dGhkcjsKKworCW9mZnNldCA9ICpwb3M7CisJaWYgKG9mZnNldCA+PSBSRFNfSEVBREVSX0VYVF9TUEFDRSkKKwkJZ290byBub25lOworCisJLyogR2V0IHRoZSBleHRlbnNpb24gdHlwZSBhbmQgbGVuZ3RoLiBGb3Igbm93LCB0aGUKKwkgKiBsZW5ndGggaXMgaW1wbGllZCBieSB0aGUgZXh0ZW5zaW9uIHR5cGUuICovCisJZXh0X3R5cGUgPSBzcmNbb2Zmc2V0KytdOworCisJaWYgKGV4dF90eXBlID09IFJEU19FWFRIRFJfTk9ORSB8fCBleHRfdHlwZSA+PSBfX1JEU19FWFRIRFJfTUFYKQorCQlnb3RvIG5vbmU7CisJZXh0X2xlbiA9IHJkc19leHRoZHJfc2l6ZVtleHRfdHlwZV07CisJaWYgKG9mZnNldCArIGV4dF9sZW4gPiBSRFNfSEVBREVSX0VYVF9TUEFDRSkKKwkJZ290byBub25lOworCisJKnBvcyA9IG9mZnNldCArIGV4dF9sZW47CisJaWYgKGV4dF9sZW4gPCAqYnVmbGVuKQorCQkqYnVmbGVuID0gZXh0X2xlbjsKKwltZW1jcHkoYnVmLCBzcmMgKyBvZmZzZXQsICpidWZsZW4pOworCXJldHVybiBleHRfdHlwZTsKKworbm9uZToKKwkqcG9zID0gUkRTX0hFQURFUl9FWFRfU1BBQ0U7CisJKmJ1ZmxlbiA9IDA7CisJcmV0dXJuIFJEU19FWFRIRFJfTk9ORTsKK30KKworaW50IHJkc19tZXNzYWdlX2FkZF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgdmVyc2lvbikKK3sKKwlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiBleHRfaGRyOworCisJZXh0X2hkci5oX3ZlcnNpb24gPSBjcHVfdG9fYmUzMih2ZXJzaW9uKTsKKwlyZXR1cm4gcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihoZHIsIFJEU19FWFRIRFJfVkVSU0lPTiwgJmV4dF9oZHIsIHNpemVvZihleHRfaGRyKSk7Cit9CisKK2ludCByZHNfbWVzc2FnZV9nZXRfdmVyc2lvbl9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdW5zaWduZWQgaW50ICp2ZXJzaW9uKQoreworCXN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uIGV4dF9oZHI7CisJdW5zaWduZWQgaW50IHBvcyA9IDAsIGxlbiA9IHNpemVvZihleHRfaGRyKTsKKworCS8qIFdlIGFzc3VtZSB0aGUgdmVyc2lvbiBleHRlbnNpb24gaXMgdGhlIG9ubHkgb25lIHByZXNlbnQgKi8KKwlpZiAocmRzX21lc3NhZ2VfbmV4dF9leHRlbnNpb24oaGRyLCAmcG9zLCAmZXh0X2hkciwgJmxlbikgIT0gUkRTX0VYVEhEUl9WRVJTSU9OKQorCQlyZXR1cm4gMDsKKwkqdmVyc2lvbiA9IGJlMzJfdG9fY3B1KGV4dF9oZHIuaF92ZXJzaW9uKTsKKwlyZXR1cm4gMTsKK30KKworaW50IHJkc19tZXNzYWdlX2FkZF9yZG1hX2Rlc3RfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHUzMiByX2tleSwgdTMyIG9mZnNldCkKK3sKKwlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYV9kZXN0IGV4dF9oZHI7CisKKwlleHRfaGRyLmhfcmRtYV9ya2V5ID0gY3B1X3RvX2JlMzIocl9rZXkpOworCWV4dF9oZHIuaF9yZG1hX29mZnNldCA9IGNwdV90b19iZTMyKG9mZnNldCk7CisJcmV0dXJuIHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oaGRyLCBSRFNfRVhUSERSX1JETUFfREVTVCwgJmV4dF9oZHIsIHNpemVvZihleHRfaGRyKSk7Cit9CisKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfYWxsb2ModW5zaWduZWQgaW50IG5lbnRzLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19tZXNzYWdlKSArCisJCSAgICAgKG5lbnRzICogc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkpLCBnZnApOworCWlmICghcm0pCisJCWdvdG8gb3V0OworCisJaWYgKG5lbnRzKQorCQlzZ19pbml0X3RhYmxlKHJtLT5tX3NnLCBuZW50cyk7CisJYXRvbWljX3NldCgmcm0tPm1fcmVmY291bnQsIDEpOworCUlOSVRfTElTVF9IRUFEKCZybS0+bV9zb2NrX2l0ZW0pOworCUlOSVRfTElTVF9IRUFEKCZybS0+bV9jb25uX2l0ZW0pOworCXNwaW5fbG9ja19pbml0KCZybS0+bV9yc19sb2NrKTsKKworb3V0OgorCXJldHVybiBybTsKK30KKworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyAqcGFnZV9hZGRycywgdW5zaWduZWQgaW50IHRvdGFsX2xlbikKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXVuc2lnbmVkIGludCBpOworCisJcm0gPSByZHNfbWVzc2FnZV9hbGxvYyhjZWlsKHRvdGFsX2xlbiwgUEFHRV9TSVpFKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJtID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc2V0X2JpdChSRFNfTVNHX1BBR0VWRUMsICZybS0+bV9mbGFncyk7CisJcm0tPm1faW5jLmlfaGRyLmhfbGVuID0gY3B1X3RvX2JlMzIodG90YWxfbGVuKTsKKwlybS0+bV9uZW50cyA9IGNlaWwodG90YWxfbGVuLCBQQUdFX1NJWkUpOworCisJZm9yIChpID0gMDsgaSA8IHJtLT5tX25lbnRzOyArK2kpIHsKKwkJc2dfc2V0X3BhZ2UoJnJtLT5tX3NnW2ldLAorCQkJCXZpcnRfdG9fcGFnZShwYWdlX2FkZHJzW2ldKSwKKwkJCQlQQUdFX1NJWkUsIDApOworCX0KKworCXJldHVybiBybTsKK30KKworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9jb3B5X2Zyb21fdXNlcihzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwKKwkJCQkJICAgICAgIHNpemVfdCB0b3RhbF9sZW4pCit7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgaW92X29mZjsKKwl1bnNpZ25lZCBsb25nIHNnX29mZjsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXN0cnVjdCBpb3ZlYyAqaW92OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IHJldDsKKworCXJtID0gcmRzX21lc3NhZ2VfYWxsb2MoY2VpbCh0b3RhbF9sZW4sIFBBR0VfU0laRSksIEdGUF9LRVJORUwpOworCWlmIChybSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJtLT5tX2luYy5pX2hkci5oX2xlbiA9IGNwdV90b19iZTMyKHRvdGFsX2xlbik7CisKKwkvKgorCSAqIG5vdyBhbGxvY2F0ZSBhbmQgY29weSBpbiB0aGUgZGF0YSBwYXlsb2FkLgorCSAqLworCXNnID0gcm0tPm1fc2c7CisJaW92ID0gZmlyc3RfaW92OworCWlvdl9vZmYgPSAwOworCXNnX29mZiA9IDA7IC8qIERlYXIgZ2NjLCBzZy0+cGFnZSB3aWxsIGJlIG51bGwgZnJvbSBremFsbG9jLiAqLworCisJd2hpbGUgKHRvdGFsX2xlbikgeworCQlpZiAoc2dfcGFnZShzZykgPT0gTlVMTCkgeworCQkJcmV0ID0gcmRzX3BhZ2VfcmVtYWluZGVyX2FsbG9jKHNnLCB0b3RhbF9sZW4sCisJCQkJCQkgICAgICAgR0ZQX0hJR0hVU0VSKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXQ7CisJCQlybS0+bV9uZW50cysrOworCQkJc2dfb2ZmID0gMDsKKwkJfQorCisJCXdoaWxlIChpb3Zfb2ZmID09IGlvdi0+aW92X2xlbikgeworCQkJaW92X29mZiA9IDA7CisJCQlpb3YrKzsKKwkJfQorCisJCXRvX2NvcHkgPSBtaW4oaW92LT5pb3ZfbGVuIC0gaW92X29mZiwgc2ctPmxlbmd0aCAtIHNnX29mZik7CisJCXRvX2NvcHkgPSBtaW5fdChzaXplX3QsIHRvX2NvcHksIHRvdGFsX2xlbik7CisKKwkJcmRzZGVidWcoImNvcHlpbmcgJWx1IGJ5dGVzIGZyb20gdXNlciBpb3YgWyVwLCAlenVdICsgJWx1IHRvICIKKwkJCSAic2cgWyVwLCAldSwgJXVdICsgJWx1XG4iLAorCQkJIHRvX2NvcHksIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbiwgaW92X29mZiwKKwkJCSAodm9pZCAqKXNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBzZ19vZmYpOworCisJCXJldCA9IHJkc19wYWdlX2NvcHlfZnJvbV91c2VyKHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0ICsgc2dfb2ZmLAorCQkJCQkgICAgICBpb3YtPmlvdl9iYXNlICsgaW92X29mZiwKKwkJCQkJICAgICAgdG9fY29weSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCXRvdGFsX2xlbiAtPSB0b19jb3B5OworCQlzZ19vZmYgKz0gdG9fY29weTsKKworCQlpZiAoc2dfb2ZmID09IHNnLT5sZW5ndGgpCisJCQlzZysrOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJaWYgKHJldCkgeworCQlpZiAocm0pCisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQlybSA9IEVSUl9QVFIocmV0KTsKKwl9CisJcmV0dXJuIHJtOworfQorCitpbnQgcmRzX21lc3NhZ2VfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCQkJIHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXN0cnVjdCBpb3ZlYyAqaW92OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgaW92X29mZjsKKwl1bnNpZ25lZCBsb25nIHZlY19vZmY7CisJaW50IGNvcGllZDsKKwlpbnQgcmV0OworCXUzMiBsZW47CisKKwlybSA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfbWVzc2FnZSwgbV9pbmMpOworCWxlbiA9IGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbik7CisKKwlpb3YgPSBmaXJzdF9pb3Y7CisJaW92X29mZiA9IDA7CisJc2cgPSBybS0+bV9zZzsKKwl2ZWNfb2ZmID0gMDsKKwljb3BpZWQgPSAwOworCisJd2hpbGUgKGNvcGllZCA8IHNpemUgJiYgY29waWVkIDwgbGVuKSB7CisJCXdoaWxlIChpb3Zfb2ZmID09IGlvdi0+aW92X2xlbikgeworCQkJaW92X29mZiA9IDA7CisJCQlpb3YrKzsKKwkJfQorCisJCXRvX2NvcHkgPSBtaW4oaW92LT5pb3ZfbGVuIC0gaW92X29mZiwgc2ctPmxlbmd0aCAtIHZlY19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCBzaXplIC0gY29waWVkKTsKKwkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHRvX2NvcHksIGxlbiAtIGNvcGllZCk7CisKKwkJcmRzZGVidWcoImNvcHlpbmcgJWx1IGJ5dGVzIHRvIHVzZXIgaW92IFslcCwgJXp1XSArICVsdSB0byAiCisJCQkgInNnIFslcCwgJXUsICV1XSArICVsdVxuIiwKKwkJCSB0b19jb3B5LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4sIGlvdl9vZmYsCisJCQkgc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIHZlY19vZmYpOworCisJCXJldCA9IHJkc19wYWdlX2NvcHlfdG9fdXNlcihzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCArIHZlY19vZmYsCisJCQkJCSAgICBpb3YtPmlvdl9iYXNlICsgaW92X29mZiwKKwkJCQkJICAgIHRvX2NvcHkpOworCQlpZiAocmV0KSB7CisJCQljb3BpZWQgPSByZXQ7CisJCQlicmVhazsKKwkJfQorCisJCWlvdl9vZmYgKz0gdG9fY29weTsKKwkJdmVjX29mZiArPSB0b19jb3B5OworCQljb3BpZWQgKz0gdG9fY29weTsKKworCQlpZiAodmVjX29mZiA9PSBzZy0+bGVuZ3RoKSB7CisJCQl2ZWNfb2ZmID0gMDsKKwkJCXNnKys7CisJCX0KKwl9CisKKwlyZXR1cm4gY29waWVkOworfQorCisvKgorICogSWYgdGhlIG1lc3NhZ2UgaXMgc3RpbGwgb24gdGhlIHNlbmQgcXVldWUsIHdhaXQgdW50aWwgdGhlIHRyYW5zcG9ydAorICogaXMgZG9uZSB3aXRoIGl0LiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIFJETUEgb3BlcmF0aW9ucy4KKyAqLwordm9pZCByZHNfbWVzc2FnZV93YWl0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJd2FpdF9ldmVudChyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSwKKwkJCSF0ZXN0X2JpdChSRFNfTVNHX01BUFBFRCwgJnJtLT5tX2ZsYWdzKSk7Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfdW5tYXBwZWQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwljbGVhcl9iaXQoUkRTX01TR19NQVBQRUQsICZybS0+bV9mbGFncyk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxKSkKKwkJd2FrZV91cCgmcmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpOworfQorCmRpZmYgLS1naXQgYS9uZXQvcmRzL3BhZ2UuYyBiL25ldC9yZHMvcGFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjA3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3BhZ2UuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK3N0cnVjdCByZHNfcGFnZV9yZW1haW5kZXIgeworCXN0cnVjdCBwYWdlCSpyX3BhZ2U7CisJdW5zaWduZWQgbG9uZwlyX29mZnNldDsKK307CisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfcGFnZV9yZW1haW5kZXIsIHJkc19wYWdlX3JlbWFpbmRlcnMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworLyoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1lcnJubyBvbiBmYWlsdXJlLgorICoKKyAqIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZmx1c2hfZGNhY2hlX3BhZ2UoKSBhcyB0aGlzIG9ubHkgd29ya3MKKyAqIHdpdGggcHJpdmF0ZSBwYWdlcy4gIElmLCBzYXksIHdlIHdlcmUgdG8gZG8gZGlyZWN0ZWQgcmVjZWl2ZSB0byBwaW5uZWQKKyAqIHVzZXIgcGFnZXMgd2UnZCBoYXZlIHRvIHdvcnJ5IG1vcmUgYWJvdXQgY2FjaGUgY29oZXJlbmNlLiAgKFRob3VnaAorICogdGhlIGZsdXNoX2RjYWNoZV9wYWdlKCkgaW4gZ2V0X3VzZXJfcGFnZXMoKSB3b3VsZCBwcm9iYWJseSBiZSBlbm91Z2gpLgorICovCitpbnQgcmRzX3BhZ2VfY29weV91c2VyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJICAgICAgIHZvaWQgX191c2VyICpwdHIsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCSAgICAgICBpbnQgdG9fdXNlcikKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKwl2b2lkICphZGRyOworCisJaWYgKHRvX3VzZXIpCisJCXJkc19zdGF0c19hZGQoc19jb3B5X3RvX3VzZXIsIGJ5dGVzKTsKKwllbHNlCisJCXJkc19zdGF0c19hZGQoc19jb3B5X2Zyb21fdXNlciwgYnl0ZXMpOworCisJYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlpZiAodG9fdXNlcikKKwkJcmV0ID0gX19jb3B5X3RvX3VzZXJfaW5hdG9taWMocHRyLCBhZGRyICsgb2Zmc2V0LCBieXRlcyk7CisJZWxzZQorCQlyZXQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKGFkZHIgKyBvZmZzZXQsIHB0ciwgYnl0ZXMpOworCWt1bm1hcF9hdG9taWMoYWRkciwgS01fVVNFUjApOworCisJaWYgKHJldCkgeworCQlhZGRyID0ga21hcChwYWdlKTsKKwkJaWYgKHRvX3VzZXIpCisJCQlyZXQgPSBjb3B5X3RvX3VzZXIocHRyLCBhZGRyICsgb2Zmc2V0LCBieXRlcyk7CisJCWVsc2UKKwkJCXJldCA9IGNvcHlfZnJvbV91c2VyKGFkZHIgKyBvZmZzZXQsIHB0ciwgYnl0ZXMpOworCQlrdW5tYXAocGFnZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE1lc3NhZ2UgYWxsb2NhdGlvbiB1c2VzIHRoaXMgdG8gYnVpbGQgdXAgcmVnaW9ucyBvZiBhIG1lc3NhZ2UuCisgKgorICogQGJ5dGVzIC0gdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQuCisgKiBAZ2ZwIC0gdGhlIHdhaXRpbmcgYmVoYXZpb3VyIG9mIHRoZSBhbGxvY2F0aW9uCisgKgorICogQGdmcCBpcyBhbHdheXMgb3JlZCB3aXRoIF9fR0ZQX0hJR0hNRU0uICBDYWxsZXJzIG11c3QgYmUgcHJlcGFyZWQgdG8KKyAqIGttYXAgdGhlIHBhZ2VzLCBldGMuCisgKgorICogSWYgQGJ5dGVzIGlzIGF0IGxlYXN0IGEgZnVsbCBwYWdlIHRoZW4gdGhpcyBqdXN0IHJldHVybnMgYSBwYWdlIGZyb20KKyAqIGFsbG9jX3BhZ2UoKS4KKyAqCisgKiBJZiBAYnl0ZXMgaXMgYSBwYXJ0aWFsIHBhZ2UgdGhlbiB0aGlzIHN0b3JlcyB0aGUgdW51c2VkIHJlZ2lvbiBvZiB0aGUKKyAqIHBhZ2UgaW4gYSBwZXItY3B1IHN0cnVjdHVyZS4gIEZ1dHVyZSBwYXJ0aWFsLXBhZ2UgYWxsb2NhdGlvbnMgbWF5IGJlCisgKiBzYXRpc2ZpZWQgZnJvbSB0aGF0IGNhY2hlZCByZWdpb24uICBUaGlzIGxldHMgdXMgd2FzdGUgbGVzcyBtZW1vcnkgb24KKyAqIHNtYWxsIGFsbG9jYXRpb25zIHdpdGggbWluaW1hbCBjb21wbGV4aXR5LiAgSXQgd29ya3MgYmVjYXVzZSB0aGUgdHJhbnNtaXQKKyAqIHBhdGggcGFzc2VzIHJlYWQtb25seSBwYWdlIHJlZ2lvbnMgZG93biB0byBkZXZpY2VzLiAgVGhleSBob2xkIGEgcGFnZQorICogcmVmZXJlbmNlIHVudGlsIHRoZXkgYXJlIGRvbmUgd2l0aCB0aGUgcmVnaW9uLgorICovCitpbnQgcmRzX3BhZ2VfcmVtYWluZGVyX2FsbG9jKHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJCSAgICAgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfcGFnZV9yZW1haW5kZXIgKnJlbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlnZnAgfD0gX19HRlBfSElHSE1FTTsKKworCS8qIGp1bXAgc3RyYWlnaHQgdG8gYWxsb2NhdGlvbiBpZiB3ZSdyZSB0cnlpbmcgZm9yIGEgaHVnZSBwYWdlICovCisJaWYgKGJ5dGVzID49IFBBR0VfU0laRSkgeworCQlwYWdlID0gYWxsb2NfcGFnZShnZnApOworCQlpZiAocGFnZSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJc2dfc2V0X3BhZ2Uoc2NhdCwgcGFnZSwgUEFHRV9TSVpFLCAwKTsKKwkJCXJldCA9IDA7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJcmVtID0gJnBlcl9jcHUocmRzX3BhZ2VfcmVtYWluZGVycywgZ2V0X2NwdSgpKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl3aGlsZSAoMSkgeworCQkvKiBhdm9pZCBhIHRpbnkgcmVnaW9uIGdldHRpbmcgc3R1Y2sgYnkgdG9zc2luZyBpdCAqLworCQlpZiAocmVtLT5yX3BhZ2UgJiYgYnl0ZXMgPiAoUEFHRV9TSVpFIC0gcmVtLT5yX29mZnNldCkpIHsKKwkJCXJkc19zdGF0c19pbmMoc19wYWdlX3JlbWFpbmRlcl9taXNzKTsKKwkJCV9fZnJlZV9wYWdlKHJlbS0+cl9wYWdlKTsKKwkJCXJlbS0+cl9wYWdlID0gTlVMTDsKKwkJfQorCisJCS8qIGhhbmQgb3V0IGEgZnJhZ21lbnQgZnJvbSB0aGUgY2FjaGVkIHBhZ2UgKi8KKwkJaWYgKHJlbS0+cl9wYWdlICYmIGJ5dGVzIDw9IChQQUdFX1NJWkUgLSByZW0tPnJfb2Zmc2V0KSkgeworCQkJc2dfc2V0X3BhZ2Uoc2NhdCwgcmVtLT5yX3BhZ2UsIGJ5dGVzLCByZW0tPnJfb2Zmc2V0KTsKKwkJCWdldF9wYWdlKHNnX3BhZ2Uoc2NhdCkpOworCisJCQlpZiAocmVtLT5yX29mZnNldCAhPSAwKQorCQkJCXJkc19zdGF0c19pbmMoc19wYWdlX3JlbWFpbmRlcl9oaXQpOworCisJCQlyZW0tPnJfb2Zmc2V0ICs9IGJ5dGVzOworCQkJaWYgKHJlbS0+cl9vZmZzZXQgPT0gUEFHRV9TSVpFKSB7CisJCQkJX19mcmVlX3BhZ2UocmVtLT5yX3BhZ2UpOworCQkJCXJlbS0+cl9wYWdlID0gTlVMTDsKKwkJCX0KKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGFsbG9jIGlmIHRoZXJlIGlzIG5vdGhpbmcgZm9yIHVzIHRvIHVzZSAqLworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXB1dF9jcHUoKTsKKworCQlwYWdlID0gYWxsb2NfcGFnZShnZnApOworCisJCXJlbSA9ICZwZXJfY3B1KHJkc19wYWdlX3JlbWFpbmRlcnMsIGdldF9jcHUoKSk7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlpZiAocGFnZSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBkaWQgc29tZW9uZSByYWNlIHRvIGZpbGwgdGhlIHJlbWFpbmRlciBiZWZvcmUgdXM/ICovCisJCWlmIChyZW0tPnJfcGFnZSkgeworCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIG90aGVyd2lzZSBpbnN0YWxsIG91ciBwYWdlIGFuZCBsb29wIGFyb3VuZCB0byBhbGxvYyAqLworCQlyZW0tPnJfcGFnZSA9IHBhZ2U7CisJCXJlbS0+cl9vZmZzZXQgPSAwOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwdXRfY3B1KCk7CitvdXQ6CisJcmRzZGVidWcoImJ5dGVzICVsdSByZXQgJWQgJXAgJXUgJXVcbiIsIGJ5dGVzLCByZXQsCisJCSByZXQgPyBOVUxMIDogc2dfcGFnZShzY2F0KSwgcmV0ID8gMCA6IHNjYXQtPm9mZnNldCwKKwkJIHJldCA/IDAgOiBzY2F0LT5sZW5ndGgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3BhZ2VfcmVtYWluZGVyX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciAqcmVtOworCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKKworCXJlbSA9ICZwZXJfY3B1KHJkc19wYWdlX3JlbWFpbmRlcnMsIGNwdSk7CisKKwlyZHNkZWJ1ZygiY3B1ICVsZCBhY3Rpb24gMHglbHhcbiIsIGNwdSwgYWN0aW9uKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfREVBRDoKKwkJaWYgKHJlbS0+cl9wYWdlKQorCQkJX19mcmVlX3BhZ2UocmVtLT5yX3BhZ2UpOworCQlyZW0tPnJfcGFnZSA9IE5VTEw7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJkc19wYWdlX3JlbWFpbmRlcl9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHJkc19wYWdlX3JlbWFpbmRlcl9jcHVfbm90aWZ5LAorfTsKKwordm9pZCByZHNfcGFnZV9leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJcmRzX3BhZ2VfcmVtYWluZGVyX2NwdV9ub3RpZnkoJnJkc19wYWdlX3JlbWFpbmRlcl9uYiwKKwkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpQ1BVX0RFQUQsCisJCQkJCSAgICAgICh2b2lkICopKGxvbmcpaSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuYyBiL25ldC9yZHMvcmRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZWViOTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWEuYwpAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+IC8qIGZvciBETUFfKl9ERVZJQ0UgKi8KKworI2luY2x1ZGUgInJkbWEuaCIKKworLyoKKyAqIFhYWAorICogIC0gYnVpbGQgd2l0aCBzcGFyc2UKKyAqICAtIHNob3VsZCB3ZSBsaW1pdCB0aGUgc2l6ZSBvZiBhIG1yIHJlZ2lvbj8gIGxldCB0cmFuc3BvcnQgcmV0dXJuIGZhaWx1cmU/CisgKiAgLSBzaG91bGQgd2UgZGV0ZWN0IGR1cGxpY2F0ZSBrZXlzIG9uIGEgc29ja2V0PyAgaG1tLgorICogIC0gYW4gcmRtYSBpcyBhbiBtbG9jaywgYXBwbHkgcmxpbWl0PworICovCisKKy8qCisgKiBnZXQgdGhlIG51bWJlciBvZiBwYWdlcyBieSBsb29raW5nIGF0IHRoZSBwYWdlIGluZGljZXMgdGhhdCB0aGUgc3RhcnQgYW5kCisgKiBlbmQgYWRkcmVzc2VzIGZhbGwgaW4uCisgKgorICogUmV0dXJucyAwIGlmIHRoZSB2ZWMgaXMgaW52YWxpZC4gIEl0IGlzIGludmFsaWQgaWYgdGhlIG51bWJlciBvZiBieXRlcworICogY2F1c2VzIHRoZSBhZGRyZXNzIHRvIHdyYXAgb3Igb3ZlcmZsb3dzIGFuIHVuc2lnbmVkIGludC4gIFRoaXMgY29tZXMKKyAqIGZyb20gYmVpbmcgc3RvcmVkIGluIHRoZSAnbGVuZ3RoJyBtZW1iZXIgb2YgJ3N0cnVjdCBzY2F0dGVybGlzdCcuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX3BhZ2VzX2luX3ZlYyhzdHJ1Y3QgcmRzX2lvdmVjICp2ZWMpCit7CisJaWYgKCh2ZWMtPmFkZHIgKyB2ZWMtPmJ5dGVzIDw9IHZlYy0+YWRkcikgfHwKKwkgICAgKHZlYy0+Ynl0ZXMgPiAodTY0KVVJTlRfTUFYKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKCh2ZWMtPmFkZHIgKyB2ZWMtPmJ5dGVzICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVCkgLQorCQkodmVjLT5hZGRyID4+IFBBR0VfU0hJRlQpOworfQorCitzdGF0aWMgc3RydWN0IHJkc19tciAqcmRzX21yX3RyZWVfd2FsayhzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgdTY0IGtleSwKKwkJCQkgICAgICAgc3RydWN0IHJkc19tciAqaW5zZXJ0KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyb290LT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByZHNfbXIgKm1yOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQltciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHJkc19tciwgcl9yYl9ub2RlKTsKKworCQlpZiAoa2V5IDwgbXItPnJfa2V5KQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChrZXkgPiBtci0+cl9rZXkpCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gbXI7CisJfQorCisJaWYgKGluc2VydCkgeworCQlyYl9saW5rX25vZGUoJmluc2VydC0+cl9yYl9ub2RlLCBwYXJlbnQsIHApOworCQlyYl9pbnNlcnRfY29sb3IoJmluc2VydC0+cl9yYl9ub2RlLCByb290KTsKKwkJYXRvbWljX2luYygmaW5zZXJ0LT5yX3JlZmNvdW50KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBEZXN0cm95IHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgcGFydCBvZiBhIE1SLgorICovCitzdGF0aWMgdm9pZCByZHNfZGVzdHJveV9tcihzdHJ1Y3QgcmRzX21yICptcikKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gbXItPnJfc29jazsKKwl2b2lkICp0cmFuc19wcml2YXRlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmRzZGVidWcoIlJEUzogZGVzdHJveSBtciBrZXkgaXMgJXggcmVmY250ICV1XG4iLAorCQkJbXItPnJfa2V5LCBhdG9taWNfcmVhZCgmbXItPnJfcmVmY291bnQpKTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFJEU19NUl9ERUFELCAmbXItPnJfc3RhdGUpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCWlmICghUkJfRU1QVFlfTk9ERSgmbXItPnJfcmJfbm9kZSkpCisJCXJiX2VyYXNlKCZtci0+cl9yYl9ub2RlLCAmcnMtPnJzX3JkbWFfa2V5cyk7CisJdHJhbnNfcHJpdmF0ZSA9IG1yLT5yX3RyYW5zX3ByaXZhdGU7CisJbXItPnJfdHJhbnNfcHJpdmF0ZSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJaWYgKHRyYW5zX3ByaXZhdGUpCisJCW1yLT5yX3RyYW5zLT5mcmVlX21yKHRyYW5zX3ByaXZhdGUsIG1yLT5yX2ludmFsaWRhdGUpOworfQorCit2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3QgcmRzX21yICptcikKK3sKKwlyZHNfZGVzdHJveV9tcihtcik7CisJa2ZyZWUobXIpOworfQorCisvKgorICogQnkgdGhlIHRpbWUgdGhpcyBpcyBjYWxsZWQgd2UgY2FuJ3QgaGF2ZSBhbnkgbW9yZSBpb2N0bHMgY2FsbGVkIG9uCisgKiB0aGUgc29ja2V0IHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgcmFjaW5nIHdpdGggb3RoZXJzLgorICovCit2b2lkIHJkc19yZG1hX2Ryb3Bfa2V5cyhzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXN0cnVjdCByZHNfbXIgKm1yOworCXN0cnVjdCByYl9ub2RlICpub2RlOworCisJLyogUmVsZWFzZSBhbnkgTVJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvY2tldCAqLworCXdoaWxlICgobm9kZSA9IHJiX2ZpcnN0KCZycy0+cnNfcmRtYV9rZXlzKSkpIHsKKwkJbXIgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHJkc19tciwgcl9yYl9ub2RlKTsKKwkJaWYgKG1yLT5yX3RyYW5zID09IHJzLT5yc190cmFuc3BvcnQpCisJCQltci0+cl9pbnZhbGlkYXRlID0gMDsKKwkJcmRzX21yX3B1dChtcik7CisJfQorCisJaWYgKHJzLT5yc190cmFuc3BvcnQgJiYgcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKQorCQlycy0+cnNfdHJhbnNwb3J0LT5mbHVzaF9tcnMoKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBwaW4gdXNlciBwYWdlcy4KKyAqLworc3RhdGljIGludCByZHNfcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsCisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgd3JpdGUpCit7CisJaW50IHJldDsKKworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgdXNlcl9hZGRyLAorCQkJICAgICBucl9wYWdlcywgd3JpdGUsIDAsIHBhZ2VzLCBOVUxMKTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJaWYgKDAgPD0gcmV0ICYmICh1bnNpZ25lZCkgcmV0IDwgbnJfcGFnZXMpIHsKKwkJd2hpbGUgKHJldC0tKQorCQkJcHV0X3BhZ2UocGFnZXNbcmV0XSk7CisJCXJldCA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX3Jkc19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzICphcmdzLAorCQkJCXU2NCAqY29va2llX3JldCwgc3RydWN0IHJkc19tciAqKm1yX3JldCkKK3sKKwlzdHJ1Y3QgcmRzX21yICptciA9IE5VTEwsICpmb3VuZDsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl2b2lkICp0cmFuc19wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcmRzX3JkbWFfY29va2llX3QgY29va2llOworCXVuc2lnbmVkIGludCBuZW50czsKKwlsb25nIGk7CisJaW50IHJldDsKKworCWlmIChycy0+cnNfYm91bmRfYWRkciA9PSAwKSB7CisJCXJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovCisJCWdvdG8gb3V0OworCX0KKworCWlmIChycy0+cnNfdHJhbnNwb3J0LT5nZXRfbXIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJbnJfcGFnZXMgPSByZHNfcGFnZXNfaW5fdmVjKCZhcmdzLT52ZWMpOworCWlmIChucl9wYWdlcyA9PSAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXJkc2RlYnVnKCJSRFM6IGdldF9tciBhZGRyICVsbHggbGVuICVsbHUgbnJfcGFnZXMgJXVcbiIsCisJCWFyZ3MtPnZlYy5hZGRyLCBhcmdzLT52ZWMuYnl0ZXMsIG5yX3BhZ2VzKTsKKworCS8qIFhYWCBjbGFtcCBucl9wYWdlcyB0byBsaW1pdCB0aGUgc2l6ZSBvZiB0aGlzIGFsbG9jPyAqLworCXBhZ2VzID0ga2NhbGxvYyhucl9wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAocGFnZXMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfbXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhdG9taWNfc2V0KCZtci0+cl9yZWZjb3VudCwgMSk7CisJUkJfQ0xFQVJfTk9ERSgmbXItPnJfcmJfbm9kZSk7CisJbXItPnJfdHJhbnMgPSBycy0+cnNfdHJhbnNwb3J0OworCW1yLT5yX3NvY2sgPSByczsKKworCWlmIChhcmdzLT5mbGFncyAmIFJEU19SRE1BX1VTRV9PTkNFKQorCQltci0+cl91c2Vfb25jZSA9IDE7CisJaWYgKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfSU5WQUxJREFURSkKKwkJbXItPnJfaW52YWxpZGF0ZSA9IDE7CisJaWYgKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfUkVBRFdSSVRFKQorCQltci0+cl93cml0ZSA9IDE7CisKKwkvKgorCSAqIFBpbiB0aGUgcGFnZXMgdGhhdCBtYWtlIHVwIHRoZSB1c2VyIGJ1ZmZlciBhbmQgdHJhbnNmZXIgdGhlIHBhZ2UKKwkgKiBwb2ludGVycyB0byB0aGUgbXIncyBzZyBhcnJheS4gIFdlIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBtYXBwZWQKKwkgKiB0aGUgd2hvbGUgcmVnaW9uIGFmdGVyIHRyYW5zZmVycmluZyB0aGUgcGFydGlhbCBwYWdlIHJlZmVyZW5jZXMKKwkgKiB0byB0aGUgc2cgYXJyYXkgc28gdGhhdCB3ZSBjYW4gaGF2ZSBvbmUgcGFnZSByZWYgY2xlYW51cCBwYXRoLgorCSAqCisJICogRm9yIG5vdyB3ZSBoYXZlIG5vIGZsYWcgdGhhdCB0ZWxscyB1cyB3aGV0aGVyIHRoZSBtYXBwaW5nIGlzCisJICogci9vIG9yIHIvdy4gV2UgbmVlZCB0byBhc3N1bWUgci93LCBvciB3ZSdsbCBkbyBhIGxvdCBvZiBSRE1BIHRvCisJICogdGhlIHplcm8gcGFnZS4KKwkgKi8KKwlyZXQgPSByZHNfcGluX3BhZ2VzKGFyZ3MtPnZlYy5hZGRyICYgUEFHRV9NQVNLLCBucl9wYWdlcywgcGFnZXMsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCW5lbnRzID0gcmV0OworCXNnID0ga2NhbGxvYyhuZW50cywgc2l6ZW9mKCpzZyksIEdGUF9LRVJORUwpOworCWlmIChzZyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlXQVJOX09OKCFuZW50cyk7CisJc2dfaW5pdF90YWJsZShzZywgbmVudHMpOworCisJLyogU3RpY2sgYWxsIHBhZ2VzIGludG8gdGhlIHNjYXR0ZXJsaXN0ICovCisJZm9yIChpID0gMCA7IGkgPCBuZW50czsgaSsrKQorCQlzZ19zZXRfcGFnZSgmc2dbaV0sIHBhZ2VzW2ldLCBQQUdFX1NJWkUsIDApOworCisJcmRzZGVidWcoIlJEUzogdHJhbnNfcHJpdmF0ZSBuZW50cyBpcyAldVxuIiwgbmVudHMpOworCisJLyogT2J0YWluIGEgdHJhbnNwb3J0IHNwZWNpZmljIE1SLiBJZiB0aGlzIHN1Y2NlZWRzLCB0aGUKKwkgKiBzL2cgbGlzdCBpcyBub3cgb3duZWQgYnkgdGhlIE1SLgorCSAqIE5vdGUgdGhhdCBkbWFfbWFwKCkgaW1wbGllcyB0aGF0IHBlbmRpbmcgd3JpdGVzIGFyZQorCSAqIGZsdXNoZWQgdG8gUkFNLCBzbyBubyBkbWFfc3luYyBpcyBuZWVkZWQgaGVyZS4gKi8KKwl0cmFuc19wcml2YXRlID0gcnMtPnJzX3RyYW5zcG9ydC0+Z2V0X21yKHNnLCBuZW50cywgcnMsCisJCQkJCQkgJm1yLT5yX2tleSk7CisKKwlpZiAoSVNfRVJSKHRyYW5zX3ByaXZhdGUpKSB7CisJCWZvciAoaSA9IDAgOyBpIDwgbmVudHM7IGkrKykKKwkJCXB1dF9wYWdlKHNnX3BhZ2UoJnNnW2ldKSk7CisJCWtmcmVlKHNnKTsKKwkJcmV0ID0gUFRSX0VSUih0cmFuc19wcml2YXRlKTsKKwkJZ290byBvdXQ7CisJfQorCisJbXItPnJfdHJhbnNfcHJpdmF0ZSA9IHRyYW5zX3ByaXZhdGU7CisKKwlyZHNkZWJ1ZygiUkRTOiBnZXRfbXIgcHV0X3VzZXIga2V5IGlzICV4IGNvb2tpZV9hZGRyICVwXG4iLAorCSAgICAgICBtci0+cl9rZXksICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPmNvb2tpZV9hZGRyKTsKKworCS8qIFRoZSB1c2VyIG1heSBwYXNzIHVzIGFuIHVuYWxpZ25lZCBhZGRyZXNzLCBidXQgd2UgY2FuIG9ubHkKKwkgKiBtYXAgcGFnZSBhbGlnbmVkIHJlZ2lvbnMuIFNvIHdlIGtlZXAgdGhlIG9mZnNldCwgYW5kIGJ1aWxkCisJICogYSA2NGJpdCBjb29raWUgY29udGFpbmluZyA8Ul9LZXksIG9mZnNldD4gYW5kIHBhc3MgdGhhdAorCSAqIGFyb3VuZC4gKi8KKwljb29raWUgPSByZHNfcmRtYV9tYWtlX2Nvb2tpZShtci0+cl9rZXksIGFyZ3MtPnZlYy5hZGRyICYgflBBR0VfTUFTSyk7CisJaWYgKGNvb2tpZV9yZXQpCisJCSpjb29raWVfcmV0ID0gY29va2llOworCisJaWYgKGFyZ3MtPmNvb2tpZV9hZGRyICYmIHB1dF91c2VyKGNvb2tpZSwgKHU2NCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgYXJncy0+Y29va2llX2FkZHIpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEluc2VydGluZyB0aGUgbmV3IE1SIGludG8gdGhlIHJidHJlZSBidW1wcyBpdHMKKwkgKiByZWZlcmVuY2UgY291bnQuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKwlmb3VuZCA9IHJkc19tcl90cmVlX3dhbGsoJnJzLT5yc19yZG1hX2tleXMsIG1yLT5yX2tleSwgbXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCUJVR19PTihmb3VuZCAmJiBmb3VuZCAhPSBtcik7CisKKwlyZHNkZWJ1ZygiUkRTOiBnZXRfbXIga2V5IGlzICV4XG4iLCBtci0+cl9rZXkpOworCWlmIChtcl9yZXQpIHsKKwkJYXRvbWljX2luYygmbXItPnJfcmVmY291bnQpOworCQkqbXJfcmV0ID0gbXI7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlrZnJlZShwYWdlcyk7CisJaWYgKG1yKQorCQlyZHNfbXJfcHV0KG1yKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2dldF9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgYXJnczsKKworCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgKHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgX191c2VyICopb3B0dmFsLAorCQkJICAgc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gX19yZHNfcmRtYV9tYXAocnMsICZhcmdzLCBOVUxMLCBOVUxMKTsKK30KKworLyoKKyAqIEZyZWUgdGhlIE1SIGluZGljYXRlZCBieSB0aGUgZ2l2ZW4gUl9LZXkKKyAqLworaW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHJkc19mcmVlX21yX2FyZ3MgYXJnczsKKwlzdHJ1Y3QgcmRzX21yICptcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHJkc19mcmVlX21yX2FyZ3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgKHN0cnVjdCByZHNfZnJlZV9tcl9hcmdzIF9fdXNlciAqKW9wdHZhbCwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIFNwZWNpYWwgY2FzZSAtIGEgbnVsbCBjb29raWUgbWVhbnMgZmx1c2ggYWxsIHVudXNlZCBNUnMgKi8KKwlpZiAoYXJncy5jb29raWUgPT0gMCkgeworCQlpZiAoIXJzLT5yc190cmFuc3BvcnQgfHwgIXJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycykKKwkJCXJldHVybiAtRUlOVkFMOworCQlycy0+cnNfdHJhbnNwb3J0LT5mbHVzaF9tcnMoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTG9vayB1cCB0aGUgTVIgZ2l2ZW4gaXRzIFJfa2V5IGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgcmJ0cmVlCisJICogc28gbm9ib2R5IGVsc2UgZmluZHMgaXQuCisJICogVGhpcyBzaG91bGQgYWxzbyBwcmV2ZW50IHJhY2VzIHdpdGggcmRzX3JkbWFfdW51c2UuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKwltciA9IHJkc19tcl90cmVlX3dhbGsoJnJzLT5yc19yZG1hX2tleXMsIHJkc19yZG1hX2Nvb2tpZV9rZXkoYXJncy5jb29raWUpLCBOVUxMKTsKKwlpZiAobXIpIHsKKwkJcmJfZXJhc2UoJm1yLT5yX3JiX25vZGUsICZycy0+cnNfcmRtYV9rZXlzKTsKKwkJUkJfQ0xFQVJfTk9ERSgmbXItPnJfcmJfbm9kZSk7CisJCWlmIChhcmdzLmZsYWdzICYgUkRTX1JETUFfSU5WQUxJREFURSkKKwkJCW1yLT5yX2ludmFsaWRhdGUgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIW1yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogY2FsbCByZHNfZGVzdHJveV9tcigpIG91cnNlbHZlcyBzbyB0aGF0IHdlJ3JlIHN1cmUgaXQncyBkb25lIGJ5IHRoZSB0aW1lCisJICogd2UgcmV0dXJuLiAgSWYgd2UgbGV0IHJkc19tcl9wdXQoKSBkbyBpdCBpdCBtaWdodCBub3QgaGFwcGVuIHVudGlsCisJICogc29tZW9uZSBlbHNlIGRyb3BzIHRoZWlyIHJlZi4KKwkgKi8KKwlyZHNfZGVzdHJveV9tcihtcik7CisJcmRzX21yX3B1dChtcik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYW4gZXh0ZW5zaW9uIGhlYWRlciB0aGF0CisgKiB0ZWxscyB1cyB0aGlzIE1SIHdhcyB1c2VkLiBJdCBhbGxvd3MgdXMgdG8gaW1wbGVtZW50CisgKiB1c2Vfb25jZSBzZW1hbnRpY3MKKyAqLwordm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSkKK3sKKwlzdHJ1Y3QgcmRzX21yICptcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB6b3RfbWUgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKwltciA9IHJkc19tcl90cmVlX3dhbGsoJnJzLT5yc19yZG1hX2tleXMsIHJfa2V5LCBOVUxMKTsKKwlpZiAobXIgJiYgKG1yLT5yX3VzZV9vbmNlIHx8IGZvcmNlKSkgeworCQlyYl9lcmFzZSgmbXItPnJfcmJfbm9kZSwgJnJzLT5yc19yZG1hX2tleXMpOworCQlSQl9DTEVBUl9OT0RFKCZtci0+cl9yYl9ub2RlKTsKKwkJem90X21lID0gMTsKKwl9IGVsc2UgaWYgKG1yKQorCQlhdG9taWNfaW5jKCZtci0+cl9yZWZjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJLyogTWF5IGhhdmUgdG8gaXNzdWUgYSBkbWFfc3luYyBvbiB0aGlzIG1lbW9yeSByZWdpb24uCisJICogTm90ZSB3ZSBjb3VsZCBhdm9pZCB0aGlzIGlmIHRoZSBvcGVyYXRpb24gd2FzIGEgUkRNQSBSRUFELAorCSAqIGJ1dCBhdCB0aGlzIHBvaW50IHdlIGNhbid0IHRlbGwuICovCisJaWYgKG1yICE9IE5VTEwpIHsKKwkJaWYgKG1yLT5yX3RyYW5zLT5zeW5jX21yKQorCQkJbXItPnJfdHJhbnMtPnN5bmNfbXIobXItPnJfdHJhbnNfcHJpdmF0ZSwgRE1BX0ZST01fREVWSUNFKTsKKworCQkvKiBJZiB0aGUgTVIgd2FzIG1hcmtlZCBhcyBpbnZhbGlkYXRlLCB0aGlzIHdpbGwKKwkJICogdHJpZ2dlciBhbiBhc3luYyBmbHVzaC4gKi8KKwkJaWYgKHpvdF9tZSkKKwkJCXJkc19kZXN0cm95X21yKG1yKTsKKwkJcmRzX21yX3B1dChtcik7CisJfQorfQorCit2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJkc19yZG1hX29wICpybykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByby0+cl9uZW50czsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZSgmcm8tPnJfc2dbaV0pOworCisJCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCisJCSAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGUKKwkJICogdG8gbG9jYWwgbWVtb3J5ICovCisJCWlmICghcm8tPnJfd3JpdGUpCisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJcHV0X3BhZ2UocGFnZSk7CisJfQorCisJa2ZyZWUocm8tPnJfbm90aWZpZXIpOworCWtmcmVlKHJvKTsKK30KKworLyoKKyAqIGFyZ3MgaXMgYSBwb2ludGVyIHRvIGFuIGluLWtlcm5lbCBjb3B5IGluIHRoZSBzZW5kbXNnIGNtc2cuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJkc19yZG1hX3ByZXBhcmUoc3RydWN0IHJkc19zb2NrICpycywKKwkJCQkJICAgIHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzKQoreworCXN0cnVjdCByZHNfaW92ZWMgdmVjOworCXN0cnVjdCByZHNfcmRtYV9vcCAqb3AgPSBOVUxMOworCXVuc2lnbmVkIGludCBucl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbWF4X3BhZ2VzOworCXVuc2lnbmVkIGludCBucl9ieXRlczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2lvdmVjIF9fdXNlciAqbG9jYWxfdmVjOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IG5yOworCXVuc2lnbmVkIGludCBpLCBqOworCWludCByZXQ7CisKKworCWlmIChycy0+cnNfYm91bmRfYWRkciA9PSAwKSB7CisJCXJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovCisJCWdvdG8gb3V0OworCX0KKworCWlmIChhcmdzLT5ucl9sb2NhbCA+ICh1NjQpVUlOVF9NQVgpIHsKKwkJcmV0ID0gLUVNU0dTSVpFOworCQlnb3RvIG91dDsKKwl9CisKKwlucl9wYWdlcyA9IDA7CisJbWF4X3BhZ2VzID0gMDsKKworCWxvY2FsX3ZlYyA9IChzdHJ1Y3QgcmRzX2lvdmVjIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSBhcmdzLT5sb2NhbF92ZWNfYWRkcjsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgdmVjdG9yICovCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPm5yX2xvY2FsOyBpKyspIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ZWMsICZsb2NhbF92ZWNbaV0sCisJCQkJICAgc2l6ZW9mKHN0cnVjdCByZHNfaW92ZWMpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbnIgPSByZHNfcGFnZXNfaW5fdmVjKCZ2ZWMpOworCQlpZiAobnIgPT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbWF4X3BhZ2VzID0gbWF4KG5yLCBtYXhfcGFnZXMpOworCQlucl9wYWdlcyArPSBucjsKKwl9CisKKwlwYWdlcyA9IGtjYWxsb2MobWF4X3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW9wID0ga3phbGxvYyhvZmZzZXRvZihzdHJ1Y3QgcmRzX3JkbWFfb3AsIHJfc2dbbnJfcGFnZXNdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG9wID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJb3AtPnJfd3JpdGUgPSAhIShhcmdzLT5mbGFncyAmIFJEU19SRE1BX1JFQURXUklURSk7CisJb3AtPnJfZmVuY2UgPSAhIShhcmdzLT5mbGFncyAmIFJEU19SRE1BX0ZFTkNFKTsKKwlvcC0+cl9ub3RpZnkgPSAhIShhcmdzLT5mbGFncyAmIFJEU19SRE1BX05PVElGWV9NRSk7CisJb3AtPnJfcmVjdmVyciA9IHJzLT5yc19yZWN2ZXJyOworCVdBUk5fT04oIW5yX3BhZ2VzKTsKKwlzZ19pbml0X3RhYmxlKG9wLT5yX3NnLCBucl9wYWdlcyk7CisKKwlpZiAob3AtPnJfbm90aWZ5IHx8IG9wLT5yX3JlY3ZlcnIpIHsKKwkJLyogV2UgYWxsb2NhdGUgYW4gdW5pbml0aWFsaXplZCBub3RpZmllciBoZXJlLCBiZWNhdXNlCisJCSAqIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhhdCBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLiBXZQorCQkgKiB3b3VsZCBoYXZlIHRvIHVzZSBHRlBfQVRPTUlDIHRoZXJlLCBhbmQgZG9uJ3Qgd2FudCB0byBkZWFsCisJCSAqIHdpdGggZmFpbGVkIGFsbG9jYXRpb25zLgorCQkgKi8KKwkJb3AtPnJfbm90aWZpZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX25vdGlmaWVyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghb3AtPnJfbm90aWZpZXIpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlvcC0+cl9ub3RpZmllci0+bl91c2VyX3Rva2VuID0gYXJncy0+dXNlcl90b2tlbjsKKwkJb3AtPnJfbm90aWZpZXItPm5fc3RhdHVzID0gUkRTX1JETUFfU1VDQ0VTUzsKKwl9CisKKwkvKiBUaGUgY29va2llIGNvbnRhaW5zIHRoZSBSX0tleSBvZiB0aGUgcmVtb3RlIG1lbW9yeSByZWdpb24sIGFuZAorCSAqIG9wdGlvbmFsbHkgYW4gb2Zmc2V0IGludG8gaXQuIFRoaXMgaXMgaG93IHdlIGltcGxlbWVudCBSRE1BIGludG8KKwkgKiB1bmFsaWduZWQgbWVtb3J5LgorCSAqIFdoZW4gc2V0dGluZyB1cCB0aGUgUkRNQSwgd2UgbmVlZCB0byBhZGQgdGhhdCBvZmZzZXQgdG8gdGhlCisJICogZGVzdGluYXRpb24gYWRkcmVzcyAod2hpY2ggaXMgcmVhbGx5IGFuIG9mZnNldCBpbnRvIHRoZSBNUikKKwkgKiBGSVhNRTogV2UgbWF5IHdhbnQgdG8gbW92ZSB0aGlzIGludG8gaWJfcmRtYS5jCisJICovCisJb3AtPnJfa2V5ID0gcmRzX3JkbWFfY29va2llX2tleShhcmdzLT5jb29raWUpOworCW9wLT5yX3JlbW90ZV9hZGRyID0gYXJncy0+cmVtb3RlX3ZlYy5hZGRyICsgcmRzX3JkbWFfY29va2llX29mZnNldChhcmdzLT5jb29raWUpOworCisJbnJfYnl0ZXMgPSAwOworCisJcmRzZGVidWcoIlJEUzogcmRtYSBwcmVwYXJlIG5yX2xvY2FsICVsbHUgcnZhICVsbHggcmtleSAleFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhcmdzLT5ucl9sb2NhbCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhcmdzLT5yZW1vdGVfdmVjLmFkZHIsCisJICAgICAgIG9wLT5yX2tleSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+bnJfbG9jYWw7IGkrKykgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZlYywgJmxvY2FsX3ZlY1tpXSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHJkc19pb3ZlYykpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQluciA9IHJkc19wYWdlc19pbl92ZWMoJnZlYyk7CisJCWlmIChuciA9PSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlycy0+cnNfdXNlcl9hZGRyID0gdmVjLmFkZHI7CisJCXJzLT5yc191c2VyX2J5dGVzID0gdmVjLmJ5dGVzOworCisJCS8qIGRpZCB0aGUgdXNlciBjaGFuZ2UgdGhlIHZlYyB1bmRlciB1cz8gKi8KKwkJaWYgKG5yID4gbWF4X3BhZ2VzIHx8IG9wLT5yX25lbnRzICsgbnIgPiBucl9wYWdlcykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIElmIGl0J3MgYSBXUklURSBvcGVyYXRpb24sIHdlIHdhbnQgdG8gcGluIHRoZSBwYWdlcyBmb3IgcmVhZGluZy4KKwkJICogSWYgaXQncyBhIFJFQUQgb3BlcmF0aW9uLCB3ZSBuZWVkIHRvIHBpbiB0aGUgcGFnZXMgZm9yIHdyaXRpbmcuCisJCSAqLworCQlyZXQgPSByZHNfcGluX3BhZ2VzKHZlYy5hZGRyICYgUEFHRV9NQVNLLCBuciwgcGFnZXMsICFvcC0+cl93cml0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcmRzZGVidWcoIlJEUzogbnJfYnl0ZXMgJXUgbnIgJXUgdmVjLmJ5dGVzICVsbHUgdmVjLmFkZHIgJWxseFxuIiwKKwkJICAgICAgIG5yX2J5dGVzLCBuciwgdmVjLmJ5dGVzLCB2ZWMuYWRkcik7CisKKwkJbnJfYnl0ZXMgKz0gdmVjLmJ5dGVzOworCisJCWZvciAoaiA9IDA7IGogPCBucjsgaisrKSB7CisJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gdmVjLmFkZHIgJiB+UEFHRV9NQVNLOworCisJCQlzZyA9ICZvcC0+cl9zZ1tvcC0+cl9uZW50cyArIGpdOworCQkJc2dfc2V0X3BhZ2Uoc2csIHBhZ2VzW2pdLAorCQkJCQltaW5fdCh1bnNpZ25lZCBpbnQsIHZlYy5ieXRlcywgUEFHRV9TSVpFIC0gb2Zmc2V0KSwKKwkJCQkJb2Zmc2V0KTsKKworCQkJcmRzZGVidWcoIlJEUzogc2ctPm9mZnNldCAleCBzZy0+bGVuICV4IHZlYy5hZGRyICVsbHggdmVjLmJ5dGVzICVsbHVcbiIsCisJCQkgICAgICAgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgdmVjLmFkZHIsIHZlYy5ieXRlcyk7CisKKwkJCXZlYy5hZGRyICs9IHNnLT5sZW5ndGg7CisJCQl2ZWMuYnl0ZXMgLT0gc2ctPmxlbmd0aDsKKwkJfQorCisJCW9wLT5yX25lbnRzICs9IG5yOworCX0KKworCisJaWYgKG5yX2J5dGVzID4gYXJncy0+cmVtb3RlX3ZlYy5ieXRlcykgeworCQlyZHNkZWJ1ZygiUkRTIG5yX2J5dGVzICV1IHJlbW90ZV9ieXRlcyAldSBkbyBub3QgbWF0Y2hcbiIsCisJCQkJbnJfYnl0ZXMsCisJCQkJKHVuc2lnbmVkIGludCkgYXJncy0+cmVtb3RlX3ZlYy5ieXRlcyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlvcC0+cl9ieXRlcyA9IG5yX2J5dGVzOworCisJcmV0ID0gMDsKK291dDoKKwlrZnJlZShwYWdlcyk7CisJaWYgKHJldCkgeworCQlpZiAob3ApCisJCQlyZHNfcmRtYV9mcmVlX29wKG9wKTsKKwkJb3AgPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBvcDsKK30KKworLyoKKyAqIFRoZSBhcHBsaWNhdGlvbiBhc2tzIGZvciBhIFJETUEgdHJhbnNmZXIuCisgKiBFeHRyYWN0IGFsbCBhcmd1bWVudHMgYW5kIHNldCB1cCB0aGUgcmRtYV9vcAorICovCitpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKQoreworCXN0cnVjdCByZHNfcmRtYV9vcCAqb3A7CisKKwlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHJkc19yZG1hX2FyZ3MpKQorCSB8fCBybS0+bV9yZG1hX29wICE9IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJb3AgPSByZHNfcmRtYV9wcmVwYXJlKHJzLCBDTVNHX0RBVEEoY21zZykpOworCWlmIChJU19FUlIob3ApKQorCQlyZXR1cm4gUFRSX0VSUihvcCk7CisJcmRzX3N0YXRzX2luYyhzX3NlbmRfcmRtYSk7CisJcm0tPm1fcmRtYV9vcCA9IG9wOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGFwcGxpY2F0aW9uIHdhbnRzIHVzIHRvIHBhc3MgYW4gUkRNQSBkZXN0aW5hdGlvbiAoYWthIE1SKQorICogdG8gdGhlIHJlbW90ZQorICovCitpbnQgcmRzX2Ntc2dfcmRtYV9kZXN0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJkc19tciAqbXI7CisJdTMyIHJfa2V5OworCWludCBlcnIgPSAwOworCisJaWYgKGNtc2ctPmNtc2dfbGVuIDwgQ01TR19MRU4oc2l6ZW9mKHJkc19yZG1hX2Nvb2tpZV90KSkKKwkgfHwgcm0tPm1fcmRtYV9jb29raWUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoJnJtLT5tX3JkbWFfY29va2llLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihybS0+bV9yZG1hX2Nvb2tpZSkpOworCisJLyogV2UgYXJlIHJldXNpbmcgYSBwcmV2aW91c2x5IG1hcHBlZCBNUiBoZXJlLiBNb3N0IGxpa2VseSwgdGhlCisJICogYXBwbGljYXRpb24gaGFzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwgc28gd2UgbmVlZCB0byBleHBsaWNpdGx5CisJICogZmx1c2ggdGhvc2Ugd3JpdGVzIHRvIFJBTS4gT3RoZXJ3aXNlIHRoZSBIQ0EgbWF5IG5vdCBzZWUgdGhlbQorCSAqIHdoZW4gZG9pbmcgYSBETUEgZnJvbSB0aGF0IGJ1ZmZlci4KKwkgKi8KKwlyX2tleSA9IHJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKwltciA9IHJkc19tcl90cmVlX3dhbGsoJnJzLT5yc19yZG1hX2tleXMsIHJfa2V5LCBOVUxMKTsKKwlpZiAobXIgPT0gTlVMTCkKKwkJZXJyID0gLUVJTlZBTDsJLyogaW52YWxpZCByX2tleSAqLworCWVsc2UKKwkJYXRvbWljX2luYygmbXItPnJfcmVmY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCWlmIChtcikgeworCQltci0+cl90cmFucy0+c3luY19tcihtci0+cl90cmFuc19wcml2YXRlLCBETUFfVE9fREVWSUNFKTsKKwkJcm0tPm1fcmRtYV9tciA9IG1yOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGhlIGFwcGxpY2F0aW9uIHBhc3NlcyB1cyBhbiBhZGRyZXNzIHJhbmdlIGl0IHdhbnRzIHRvIGVuYWJsZSBSRE1BCisgKiB0by9mcm9tLiBXZSBtYXAgdGhlIGFyZWEsIGFuZCBzYXZlIHRoZSA8Ul9LZXksb2Zmc2V0PiBwYWlyCisgKiBpbiBybS0+bV9yZG1hX2Nvb2tpZS4gVGhpcyBjYXVzZXMgaXQgdG8gYmUgc2VudCBhbG9uZyB0byB0aGUgcGVlcgorICogaW4gYW4gZXh0ZW5zaW9uIGhlYWRlci4KKyAqLworaW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKQoreworCWlmIChjbXNnLT5jbXNnX2xlbiA8IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkKKwkgfHwgcm0tPm1fcmRtYV9jb29raWUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gX19yZHNfcmRtYV9tYXAocnMsIENNU0dfREFUQShjbXNnKSwgJnJtLT5tX3JkbWFfY29va2llLCAmcm0tPm1fcmRtYV9tcik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuaCBiL25ldC9yZHMvcmRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTUxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWEuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIF9SRFNfUkRNQV9ICisjZGVmaW5lIF9SRFNfUkRNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworc3RydWN0IHJkc19tciB7CisJc3RydWN0IHJiX25vZGUJCXJfcmJfbm9kZTsKKwlhdG9taWNfdAkJcl9yZWZjb3VudDsKKwl1MzIJCQlyX2tleTsKKworCS8qIEEgY29weSBvZiB0aGUgY3JlYXRpb24gZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQJCXJfdXNlX29uY2U6MTsKKwl1bnNpZ25lZCBpbnQJCXJfaW52YWxpZGF0ZToxOworCXVuc2lnbmVkIGludAkJcl93cml0ZToxOworCisJLyogVGhpcyBpcyBmb3IgUkRTX01SX0RFQUQuCisJICogSXQgd291bGQgYmUgbmljZSAmIGNvbnNpc3RlbnQgdG8gbWFrZSB0aGlzIHBhcnQgb2YgdGhlIGFib3ZlCisJICogYml0IGZpZWxkIGhlcmUsIGJ1dCB3ZSBuZWVkIHRvIHVzZSB0ZXN0X2FuZF9zZXRfYml0LgorCSAqLworCXVuc2lnbmVkIGxvbmcJCXJfc3RhdGU7CisJc3RydWN0IHJkc19zb2NrCQkqcl9zb2NrOyAvKiBiYWNrIHBvaW50ZXIgdG8gdGhlIHNvY2tldCB0aGF0IG93bnMgdXMgKi8KKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydAkqcl90cmFuczsKKwl2b2lkCQkJKnJfdHJhbnNfcHJpdmF0ZTsKK307CisKKy8qIEZsYWdzIGZvciBtci0+cl9zdGF0ZSAqLworI2RlZmluZSBSRFNfTVJfREVBRAkJMAorCitzdHJ1Y3QgcmRzX3JkbWFfb3AgeworCXUzMgkJCXJfa2V5OworCXU2NAkJCXJfcmVtb3RlX2FkZHI7CisJdW5zaWduZWQgaW50CQlyX3dyaXRlOjE7CisJdW5zaWduZWQgaW50CQlyX2ZlbmNlOjE7CisJdW5zaWduZWQgaW50CQlyX25vdGlmeToxOworCXVuc2lnbmVkIGludAkJcl9yZWN2ZXJyOjE7CisJdW5zaWduZWQgaW50CQlyX21hcHBlZDoxOworCXN0cnVjdCByZHNfbm90aWZpZXIJKnJfbm90aWZpZXI7CisJdW5zaWduZWQgaW50CQlyX2J5dGVzOworCXVuc2lnbmVkIGludAkJcl9uZW50czsKKwl1bnNpZ25lZCBpbnQJCXJfY291bnQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0CXJfc2dbMF07Cit9OworCitzdGF0aWMgaW5saW5lIHJkc19yZG1hX2Nvb2tpZV90IHJkc19yZG1hX21ha2VfY29va2llKHUzMiByX2tleSwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcl9rZXkgfCAoKCh1NjQpIG9mZnNldCkgPDwgMzIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiByZHNfcmRtYV9jb29raWVfa2V5KHJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlyZXR1cm4gY29va2llOworfQorCitzdGF0aWMgaW5saW5lIHUzMiByZHNfcmRtYV9jb29raWVfb2Zmc2V0KHJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlyZXR1cm4gY29va2llID4+IDMyOworfQorCitpbnQgcmRzX2dldF9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKK2ludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKK3ZvaWQgcmRzX3JkbWFfZHJvcF9rZXlzKHN0cnVjdCByZHNfc29jayAqcnMpOworaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9kZXN0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKK2ludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOworaW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKK3ZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJvKTsKK3ZvaWQgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQpOworCitleHRlcm4gdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IHJkc19tciAqbXIpOworc3RhdGljIGlubGluZSB2b2lkIHJkc19tcl9wdXQoc3RydWN0IHJkc19tciAqbXIpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1yLT5yX3JlZmNvdW50KSkKKwkJX19yZHNfcHV0X21yX2ZpbmFsKG1yKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxOTAyNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuYwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisKKyNpbmNsdWRlICJyZG1hX3RyYW5zcG9ydC5oIgorCitzdGF0aWMgc3RydWN0IHJkbWFfY21faWQgKnJkc19pd19saXN0ZW5faWQ7CisKK2ludCByZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCSAgICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwkvKiB0aGlzIGNhbiBiZSBudWxsIGluIHRoZSBsaXN0ZW5pbmcgcGF0aCAqLworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNtX2lkLT5jb250ZXh0OworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKKwlpbnQgcmV0ID0gMDsKKworCXJkc2RlYnVnKCJjb25uICVwIGlkICVwIGhhbmRsaW5nIGV2ZW50ICV1XG4iLCBjb25uLCBjbV9pZCwKKwkJIGV2ZW50LT5ldmVudCk7CisKKwlpZiAoY21faWQtPmRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9STklDKQorCQl0cmFucyA9ICZyZHNfaXdfdHJhbnNwb3J0OworCWVsc2UKKwkJdHJhbnMgPSAmcmRzX2liX3RyYW5zcG9ydDsKKworCS8qIFByZXZlbnQgc2h1dGRvd24gZnJvbSB0ZWFyaW5nIGRvd24gdGhlIGNvbm5lY3Rpb24KKwkgKiB3aGlsZSB3ZSdyZSBleGVjdXRpbmcuICovCisJaWYgKGNvbm4pIHsKKwkJbXV0ZXhfbG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKworCQkvKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBiZWluZyBzaHV0IGRvd24sIGJhaWwgb3V0CisJCSAqIHJpZ2h0IGF3YXkuIFdlIHJldHVybiAwIHNvIGNtX2lkIGRvZXNuJ3QgZ2V0CisJCSAqIGRlc3Ryb3llZCBwcmVtYXR1cmVseSAqLworCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fRElTQ09OTkVDVElORykgeworCQkJLyogUmVqZWN0IGluY29taW5nIGNvbm5lY3Rpb25zIHdoaWxlIHdlJ3JlIHRlYXJpbmcKKwkJCSAqIGRvd24gYW4gZXhpc3Rpbmcgb25lLiAqLworCQkJaWYgKGV2ZW50LT5ldmVudCA9PSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVCkKKwkJCQlyZXQgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGV2ZW50LT5ldmVudCkgeworCWNhc2UgUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1Q6CisJCXJldCA9IHRyYW5zLT5jbV9oYW5kbGVfY29ubmVjdChjbV9pZCwgZXZlbnQpOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX1JFU09MVkVEOgorCQkvKiBYWFggZG8gd2UgbmVlZCB0byBjbGVhbiB1cCBpZiB0aGlzIGZhaWxzPyAqLworCQlyZXQgPSByZG1hX3Jlc29sdmVfcm91dGUoY21faWQsCisJCQkJCSBSRFNfUkRNQV9SRVNPTFZFX1RJTUVPVVRfTVMpOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9ST1VURV9SRVNPTFZFRDoKKwkJLyogWFhYIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIGxpc3RlbiBhY2NlcHRhbmNlICovCisJCXJldCA9IHRyYW5zLT5jbV9pbml0aWF0ZV9jb25uZWN0KGNtX2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6CisJCXRyYW5zLT5jbV9jb25uZWN0X2NvbXBsZXRlKGNvbm4sIGV2ZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9FUlJPUjoKKwljYXNlIFJETUFfQ01fRVZFTlRfUk9VVEVfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1VOUkVBQ0hBQkxFOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9SRUpFQ1RFRDoKKwljYXNlIFJETUFfQ01fRVZFTlRfREVWSUNFX1JFTU9WQUw6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfQ0hBTkdFOgorCQlpZiAoY29ubikKKwkJCXJkc19jb25uX2Ryb3AoY29ubik7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0RJU0NPTk5FQ1RFRDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBESVNDT05ORUNUIGV2ZW50IC0gZHJvcHBpbmcgY29ubmVjdGlvbiAiCisJCQkiJXBJNC0+JXBJNFxuIiwgJmNvbm4tPmNfbGFkZHIsCisJCQkgJmNvbm4tPmNfZmFkZHIpOworCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIHRoaW5ncyBsaWtlIGRldmljZSBkaXNjb25uZWN0PyAqLworCQlwcmludGsoS0VSTl9FUlIgInVua25vd24gZXZlbnQgJXVcbiIsIGV2ZW50LT5ldmVudCk7CisJCUJVRygpOworCQlicmVhazsKKwl9CisKK291dDoKKwlpZiAoY29ubikKKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCisJcmRzZGVidWcoImlkICVwIGV2ZW50ICV1IGhhbmRsaW5nIHJldCAlZFxuIiwgY21faWQsIGV2ZW50LT5ldmVudCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHJkc19yZG1hX2xpc3Rlbl9pbml0KHZvaWQpCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7CisJaW50IHJldDsKKworCWNtX2lkID0gcmRtYV9jcmVhdGVfaWQocmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlciwgTlVMTCwgUkRNQV9QU19UQ1ApOworCWlmIChJU19FUlIoY21faWQpKSB7CisJCXJldCA9IFBUUl9FUlIoY21faWQpOworCQlwcmludGsoS0VSTl9FUlIgIlJEUy9JVzogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCisJCSAgICAgICAicmRtYV9jcmVhdGVfaWQoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJc2luLnNpbl9mYW1pbHkgPSBQRl9JTkVULAorCXNpbi5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpaHRvbmwoSU5BRERSX0FOWSk7CisJc2luLnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKFJEU19QT1JUKTsKKworCS8qCisJICogWFhYIEkgYmV0IHRoaXMgYmluZHMgdGhlIGNtX2lkIHRvIGEgZGV2aWNlLiAgSWYgd2Ugd2FudCB0byBzdXBwb3J0CisJICogZmFpbC1vdmVyIHdlJ2xsIGhhdmUgdG8gdGFrZSB0aGlzIGludG8gY29uc2lkZXJhdGlvbi4KKwkgKi8KKwlyZXQgPSByZG1hX2JpbmRfYWRkcihjbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4pOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvSVc6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgorCQkgICAgICAgInJkbWFfYmluZF9hZGRyKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHJkbWFfbGlzdGVuKGNtX2lkLCAxMjgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvSVc6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgorCQkgICAgICAgInJkbWFfbGlzdGVuKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc2RlYnVnKCJjbSAlcCBsaXN0ZW5pbmcgb24gcG9ydCAldVxuIiwgY21faWQsIFJEU19QT1JUKTsKKworCXJkc19pd19saXN0ZW5faWQgPSBjbV9pZDsKKwljbV9pZCA9IE5VTEw7CitvdXQ6CisJaWYgKGNtX2lkKQorCQlyZG1hX2Rlc3Ryb3lfaWQoY21faWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19yZG1hX2xpc3Rlbl9zdG9wKHZvaWQpCit7CisJaWYgKHJkc19pd19saXN0ZW5faWQpIHsKKwkJcmRzZGVidWcoImNtICVwXG4iLCByZHNfaXdfbGlzdGVuX2lkKTsKKwkJcmRtYV9kZXN0cm95X2lkKHJkc19pd19saXN0ZW5faWQpOworCQlyZHNfaXdfbGlzdGVuX2lkID0gTlVMTDsKKwl9Cit9CisKK2ludCBfX2luaXQgcmRzX3JkbWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZHNfcmRtYV9saXN0ZW5faW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcmRzX2l3X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9pd19pbml0OworCisJcmV0ID0gcmRzX2liX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9pYl9pbml0OworCisJZ290byBvdXQ7CisKK2Vycl9pYl9pbml0OgorCXJkc19pd19leGl0KCk7CitlcnJfaXdfaW5pdDoKKwlyZHNfcmRtYV9saXN0ZW5fc3RvcCgpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX3JkbWFfZXhpdCh2b2lkKQoreworCS8qIHN0b3AgbGlzdGVuaW5nIGZpcnN0IHRvIGVuc3VyZSBubyBuZXcgY29ubmVjdGlvbnMgYXJlIGF0dGVtcHRlZCAqLworCXJkc19yZG1hX2xpc3Rlbl9zdG9wKCk7CisJcmRzX2liX2V4aXQoKTsKKwlyZHNfaXdfZXhpdCgpOworfQorCmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmggYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyYzdkOQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9SRE1BX1RSQU5TUE9SVF9ICisjZGVmaW5lIF9SRE1BX1RSQU5TUE9SVF9ICisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisjaW5jbHVkZSAicmRzLmgiCisKKyNkZWZpbmUgUkRTX1JETUFfUkVTT0xWRV9USU1FT1VUX01TICAgICA1MDAwCisKK2ludCByZHNfcmRtYV9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCSAgICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKKy8qIGZyb20gcmRtYV90cmFuc3BvcnQuYyAqLworaW50IHJkc19yZG1hX2luaXQodm9pZCk7Cit2b2lkIHJkc19yZG1hX2V4aXQodm9pZCk7CisKKy8qIGZyb20gaWIuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQ7CitpbnQgcmRzX2liX2luaXQodm9pZCk7Cit2b2lkIHJkc19pYl9leGl0KHZvaWQpOworCisvKiBmcm9tIGl3LmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaXdfdHJhbnNwb3J0OworaW50IHJkc19pd19pbml0KHZvaWQpOwordm9pZCByZHNfaXdfZXhpdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA0MDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZHMuaApAQCAtMCwwICsxLDY4NiBAQAorI2lmbmRlZiBfUkRTX1JEU19ICisjZGVmaW5lIF9SRFNfUkRTX0gKKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9yZHMuaD4KKworI2luY2x1ZGUgImluZm8uaCIKKworLyoKKyAqIFJEUyBOZXR3b3JrIHByb3RvY29sIHZlcnNpb24KKyAqLworI2RlZmluZSBSRFNfUFJPVE9DT0xfM18wCTB4MDMwMAorI2RlZmluZSBSRFNfUFJPVE9DT0xfM18xCTB4MDMwMQorI2RlZmluZSBSRFNfUFJPVE9DT0xfVkVSU0lPTglSRFNfUFJPVE9DT0xfM18xCisjZGVmaW5lIFJEU19QUk9UT0NPTF9NQUpPUih2KQkoKHYpID4+IDgpCisjZGVmaW5lIFJEU19QUk9UT0NPTF9NSU5PUih2KQkoKHYpICYgMjU1KQorI2RlZmluZSBSRFNfUFJPVE9DT0wobWFqLCBtaW4pCSgoKG1haikgPDwgOCkgfCBtaW4pCisKKy8qCisgKiBYWFggcmFuZG9tbHkgY2hvc2VuLCBidXQgYXQgbGVhc3Qgc2VlbXMgdG8gYmUgdW51c2VkOgorICogIyAgICAgICAgICAgICAgIDE4NDY0LTE4NzY4IFVuYXNzaWduZWQKKyAqIFdlIHNob3VsZCBkbyBiZXR0ZXIuICBXZSB3YW50IGEgcmVzZXJ2ZWQgcG9ydCB0byBkaXNjb3VyYWdlIHVucHJpdidlZAorICogdXNlcnNwYWNlIGZyb20gbGlzdGVuaW5nLgorICovCisjZGVmaW5lIFJEU19QT1JUCTE4NjM0CisKKyNpZmRlZiBERUJVRworI2RlZmluZSByZHNkZWJ1ZyhmbXQsIGFyZ3MuLi4pIHByX2RlYnVnKCIlcygpOiAiIGZtdCwgX19mdW5jX18gLCAjI2FyZ3MpCisjZWxzZQorLyogc2lnaCwgcHJfZGVidWcoKSBjYXVzZXMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCityZHNkZWJ1ZyhjaGFyICpmbXQsIC4uLikKK3sKK30KKyNlbmRpZgorCisvKiBYWFggaXMgdGhlcmUgb25lIG9mIHRoZXNlIHNvbWV3aGVyZT8gKi8KKyNkZWZpbmUgY2VpbCh4LCB5KSBcCisJKHsgdW5zaWduZWQgbG9uZyBfX3ggPSAoeCksIF9feSA9ICh5KTsgKF9feCArIF9feSAtIDEpIC8gX195OyB9KQorCisjZGVmaW5lIFJEU19GUkFHX1NISUZUCTEyCisjZGVmaW5lIFJEU19GUkFHX1NJWkUJKCh1bnNpZ25lZCBpbnQpKDEgPDwgUkRTX0ZSQUdfU0hJRlQpKQorCisjZGVmaW5lIFJEU19DT05HX01BUF9CWVRFUwkoNjU1MzYgLyA4KQorI2RlZmluZSBSRFNfQ09OR19NQVBfTE9OR1MJKFJEU19DT05HX01BUF9CWVRFUyAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX1BBR0VTCShQQUdFX0FMSUdOKFJEU19DT05HX01BUF9CWVRFUykgLyBQQUdFX1NJWkUpCisjZGVmaW5lIFJEU19DT05HX01BUF9QQUdFX0JJVFMJKFBBR0VfU0laRSAqIDgpCisKK3N0cnVjdCByZHNfY29uZ19tYXAgeworCXN0cnVjdCByYl9ub2RlCQltX3JiX25vZGU7CisJX19iZTMyCQkJbV9hZGRyOworCXdhaXRfcXVldWVfaGVhZF90CW1fd2FpdHE7CisJc3RydWN0IGxpc3RfaGVhZAltX2Nvbm5fbGlzdDsKKwl1bnNpZ25lZCBsb25nCQltX3BhZ2VfYWRkcnNbUkRTX0NPTkdfTUFQX1BBR0VTXTsKK307CisKKworLyoKKyAqIFRoaXMgaXMgaG93IHdlIHdpbGwgdHJhY2sgdGhlIGNvbm5lY3Rpb24gc3RhdGU6CisgKiBBIGNvbm5lY3Rpb24gaXMgYWx3YXlzIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBzdGF0ZXMuIFVwZGF0ZXMgdG8gdGhlIHN0YXRlIGFyZSBhdG9taWMgYW5kIGltcGx5CisgKiBhIG1lbW9yeSBiYXJyaWVyLgorICovCitlbnVtIHsKKwlSRFNfQ09OTl9ET1dOID0gMCwKKwlSRFNfQ09OTl9DT05ORUNUSU5HLAorCVJEU19DT05OX0RJU0NPTk5FQ1RJTkcsCisJUkRTX0NPTk5fVVAsCisJUkRTX0NPTk5fRVJST1IsCit9OworCisvKiBCaXRzIGZvciBjX2ZsYWdzICovCisjZGVmaW5lIFJEU19MTF9TRU5EX0ZVTEwJMAorI2RlZmluZSBSRFNfUkVDT05ORUNUX1BFTkRJTkcJMQorCitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24geworCXN0cnVjdCBobGlzdF9ub2RlCWNfaGFzaF9ub2RlOworCV9fYmUzMgkJCWNfbGFkZHI7CisJX19iZTMyCQkJY19mYWRkcjsKKwl1bnNpZ25lZCBpbnQJCWNfbG9vcGJhY2s6MTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24JKmNfcGFzc2l2ZTsKKworCXN0cnVjdCByZHNfY29uZ19tYXAJKmNfbGNvbmc7CisJc3RydWN0IHJkc19jb25nX21hcAkqY19mY29uZzsKKworCXN0cnVjdCBtdXRleAkJY19zZW5kX2xvY2s7CS8qIHByb3RlY3Qgc2VuZCByaW5nICovCisJc3RydWN0IHJkc19tZXNzYWdlCSpjX3htaXRfcm07CisJdW5zaWduZWQgbG9uZwkJY194bWl0X3NnOworCXVuc2lnbmVkIGludAkJY194bWl0X2hkcl9vZmY7CisJdW5zaWduZWQgaW50CQljX3htaXRfZGF0YV9vZmY7CisJdW5zaWduZWQgaW50CQljX3htaXRfcmRtYV9zZW50OworCisJc3BpbmxvY2tfdAkJY19sb2NrOwkJLyogcHJvdGVjdCBtc2cgcXVldWVzICovCisJdTY0CQkJY19uZXh0X3R4X3NlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNfc2VuZF9xdWV1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNfcmV0cmFuczsKKworCXU2NAkJCWNfbmV4dF9yeF9zZXE7CisKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydAkqY190cmFuczsKKwl2b2lkCQkJKmNfdHJhbnNwb3J0X2RhdGE7CisKKwlhdG9taWNfdAkJY19zdGF0ZTsKKwl1bnNpZ25lZCBsb25nCQljX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcJCWNfcmVjb25uZWN0X2ppZmZpZXM7CisJc3RydWN0IGRlbGF5ZWRfd29yawljX3NlbmRfdzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWNfcmVjdl93OworCXN0cnVjdCBkZWxheWVkX3dvcmsJY19jb25uX3c7CisJc3RydWN0IHdvcmtfc3RydWN0CWNfZG93bl93OworCXN0cnVjdCBtdXRleAkJY19jbV9sb2NrOwkvKiBwcm90ZWN0IGNvbm4gc3RhdGUgJiBjbSAqLworCisJc3RydWN0IGxpc3RfaGVhZAljX21hcF9pdGVtOworCXVuc2lnbmVkIGxvbmcJCWNfbWFwX3F1ZXVlZDsKKwl1bnNpZ25lZCBsb25nCQljX21hcF9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZwkJY19tYXBfYnl0ZXM7CisKKwl1bnNpZ25lZCBpbnQJCWNfdW5hY2tlZF9wYWNrZXRzOworCXVuc2lnbmVkIGludAkJY191bmFja2VkX2J5dGVzOworCisJLyogUHJvdG9jb2wgdmVyc2lvbiAqLworCXVuc2lnbmVkIGludAkJY192ZXJzaW9uOworfTsKKworI2RlZmluZSBSRFNfRkxBR19DT05HX0JJVE1BUAkweDAxCisjZGVmaW5lIFJEU19GTEFHX0FDS19SRVFVSVJFRAkweDAyCisjZGVmaW5lIFJEU19GTEFHX1JFVFJBTlNNSVRURUQJMHgwNAorI2RlZmluZSBSRFNfTUFYX0FEVl9DUkVESVQJMTI3CisKKy8qCisgKiBNYXhpbXVtIHNwYWNlIGF2YWlsYWJsZSBmb3IgZXh0ZW5zaW9uIGhlYWRlcnMuCisgKi8KKyNkZWZpbmUgUkRTX0hFQURFUl9FWFRfU1BBQ0UJMTYKKworc3RydWN0IHJkc19oZWFkZXIgeworCV9fYmU2NAloX3NlcXVlbmNlOworCV9fYmU2NAloX2FjazsKKwlfX2JlMzIJaF9sZW47CisJX19iZTE2CWhfc3BvcnQ7CisJX19iZTE2CWhfZHBvcnQ7CisJdTgJaF9mbGFnczsKKwl1OAloX2NyZWRpdDsKKwl1OAloX3BhZGRpbmdbNF07CisJX19zdW0xNgloX2NzdW07CisKKwl1OAloX2V4dGhkcltSRFNfSEVBREVSX0VYVF9TUEFDRV07Cit9OworCisvKgorICogUmVzZXJ2ZWQgLSBpbmRpY2F0ZXMgZW5kIG9mIGV4dGVuc2lvbnMKKyAqLworI2RlZmluZSBSRFNfRVhUSERSX05PTkUJCTAKKworLyoKKyAqIFRoaXMgZXh0ZW5zaW9uIGhlYWRlciBpcyBpbmNsdWRlZCBpbiB0aGUgdmVyeQorICogZmlyc3QgbWVzc2FnZSB0aGF0IGlzIHNlbnQgb24gYSBuZXcgY29ubmVjdGlvbiwKKyAqIGFuZCBpZGVudGlmaWVzIHRoZSBwcm90b2NvbCBsZXZlbC4gVGhpcyB3aWxsIGhlbHAKKyAqIHJvbGxpbmcgdXBkYXRlcyBpZiBhIGZ1dHVyZSBjaGFuZ2UgcmVxdWlyZXMgYnJlYWtpbmcKKyAqIHRoZSBwcm90b2NvbC4KKyAqIE5COiBUaGlzIGlzIG5vIGxvbmdlciB0cnVlIGZvciBJQiwgd2hlcmUgd2UgZG8gYSB2ZXJzaW9uCisgKiBuZWdvdGlhdGlvbiBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAgcGhhc2UgKHByb3RvY29sCisgKiB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGluY2x1ZGVkIGluIHRoZSBSRE1BIENNIHByaXZhdGUgZGF0YSkuCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9WRVJTSU9OCTEKK3N0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uIHsKKwlfX2JlMzIJCQloX3ZlcnNpb247Cit9OworCisvKgorICogVGhpcyBleHRlbnNpb24gaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSBSRFMgbWVzc2FnZQorICogY2hhc2luZyBhbiBSRE1BIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBSRFNfRVhUSERSX1JETUEJCTIKK3N0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hIHsKKwlfX2JlMzIJCQloX3JkbWFfcmtleTsKK307CisKKy8qCisgKiBUaGlzIGV4dGVuc2lvbiBoZWFkZXIgdGVsbHMgdGhlIHBlZXIgYWJvdXQgdGhlCisgKiBkZXN0aW5hdGlvbiA8Ul9LZXksb2Zmc2V0PiBvZiB0aGUgcmVxdWVzdGVkIFJETUEKKyAqIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBSRFNfRVhUSERSX1JETUFfREVTVAkzCitzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYV9kZXN0IHsKKwlfX2JlMzIJCQloX3JkbWFfcmtleTsKKwlfX2JlMzIJCQloX3JkbWFfb2Zmc2V0OworfTsKKworI2RlZmluZSBfX1JEU19FWFRIRFJfTUFYCTE2IC8qIGZvciBub3cgKi8KKworc3RydWN0IHJkc19pbmNvbWluZyB7CisJYXRvbWljX3QJCWlfcmVmY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZAlpX2l0ZW07CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSppX2Nvbm47CisJc3RydWN0IHJkc19oZWFkZXIJaV9oZHI7CisJdW5zaWduZWQgbG9uZwkJaV9yeF9qaWZmaWVzOworCV9fYmUzMgkJCWlfc2FkZHI7CisKKwlyZHNfcmRtYV9jb29raWVfdAlpX3JkbWFfY29va2llOworfTsKKworLyoKKyAqIG1fc29ja19pdGVtIGFuZCBtX2Nvbm5faXRlbSBhcmUgb24gbGlzdHMgdGhhdCBhcmUgc2VyaWFsaXplZCB1bmRlcgorICogY29ubi0+Y19sb2NrLiAgbV9zb2NrX2l0ZW0gaGFzIGFkZGl0aW9uYWwgbWVhbmluZyBpbiB0aGF0IG9uY2UgaXQgaXMgZW1wdHkKKyAqIHRoZSBtZXNzYWdlIHdpbGwgbm90IGJlIHB1dCBiYWNrIG9uIHRoZSByZXRyYW5zbWl0IGxpc3QgYWZ0ZXIgYmVpbmcgc2VudC4KKyAqIG1lc3NhZ2VzIHRoYXQgYXJlIGNhbmNlbGVkIHdoaWxlIGJlaW5nIHNlbnQgcmVseSBvbiB0aGlzLgorICoKKyAqIG1faW5jIGlzIHVzZWQgYnkgbG9vcGJhY2sgc28gdGhhdCBpdCBjYW4gcGFzcyBhbiBpbmNvbWluZyBtZXNzYWdlIHN0cmFpZ2h0CisgKiBiYWNrIHVwIGludG8gdGhlIHJ4IHBhdGguICBJdCBlbWJlZHMgYSB3aXJlIGhlYWRlciB3aGljaCBpcyBhbHNvIHVzZWQgYnkKKyAqIHRoZSBzZW5kIHBhdGgsIHdoaWNoIGlzIGtpbmQgb2YgYXdrd2FyZC4KKyAqCisgKiBtX3NvY2tfaXRlbSBpbmRpY2F0ZXMgdGhlIG1lc3NhZ2UncyBwcmVzZW5jZSBvbiBhIHNvY2tldCdzIHNlbmQgb3IgcmVjZWl2ZQorICogcXVldWUuICBtX3JzIHdpbGwgcG9pbnQgdG8gdGhhdCBzb2NrZXQuCisgKgorICogbV9kYWRkciBpcyB1c2VkIGJ5IGNhbmNlbGxhdGlvbiB0byBwcnVuZSBtZXNzYWdlcyB0byBhIGdpdmVuIGRlc3RpbmF0aW9uLgorICoKKyAqIFRoZSBSRFNfTVNHX09OX1NPQ0sgYW5kIFJEU19NU0dfT05fQ09OTiBmbGFncyBhcmUgdXNlZCB0byBhdm9pZCBsb2NrCisgKiBuZXN0aW5nLiAgQXMgcGF0aHMgaXRlcmF0ZSBvdmVyIG1lc3NhZ2VzIG9uIGEgc29jaywgb3IgY29ubiwgdGhleSBtdXN0CisgKiBhbHNvIGxvY2sgdGhlIGNvbm4sIG9yIHNvY2ssIHRvIHJlbW92ZSB0aGUgbWVzc2FnZSBmcm9tIHRob3NlIGxpc3RzIHRvby4KKyAqIFRlc3RpbmcgdGhlIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtZXNzYWdlIGlzIHN0aWxsIG9uIHRoZSBsaXN0cyBsZXRzCisgKiB1cyBhdm9pZCB0ZXN0aW5nIHRoZSBsaXN0X2hlYWQgZGlyZWN0bHkuICBUaGF0IG1lYW5zIGVhY2ggcGF0aCBjYW4gdXNlCisgKiB0aGUgbWVzc2FnZSdzIGxpc3RfaGVhZCB0byBrZWVwIGl0IG9uIGEgbG9jYWwgbGlzdCB3aGlsZSBqdWdnbGluZyBsb2NrcworICogd2l0aG91dCBjb25mdXNpbmcgdGhlIG90aGVyIHBhdGguCisgKgorICogbV9hY2tfc2VxIGlzIGFuIG9wdGlvbmFsIGZpZWxkIHNldCBieSB0cmFuc3BvcnRzIHdobyBuZWVkIGEgZGlmZmVyZW50CisgKiBzZXF1ZW5jZSBudW1iZXIgcmFuZ2UgdG8gaW52YWxpZGF0ZS4gIFRoZXkgY2FuIHVzZSB0aGlzIGluIGEgY2FsbGJhY2sKKyAqIHRoYXQgdGhleSBwYXNzIHRvIHJkc19zZW5kX2Ryb3BfYWNrZWQoKSB0byBzZWUgaWYgZWFjaCBtZXNzYWdlIGhhcyBiZWVuCisgKiBhY2tlZC4gIFRoZSBIQVNfQUNLX1NFUSBmbGFnIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBtZXNzYWdlcyB3aGljaCBoYXZlbid0CisgKiBoYWQgYWNrX3NlcSBzZXQgeWV0LgorICovCisjZGVmaW5lIFJEU19NU0dfT05fU09DSwkJMQorI2RlZmluZSBSRFNfTVNHX09OX0NPTk4JCTIKKyNkZWZpbmUgUkRTX01TR19IQVNfQUNLX1NFUQkzCisjZGVmaW5lIFJEU19NU0dfQUNLX1JFUVVJUkVECTQKKyNkZWZpbmUgUkRTX01TR19SRVRSQU5TTUlUVEVECTUKKyNkZWZpbmUgUkRTX01TR19NQVBQRUQJCTYKKyNkZWZpbmUgUkRTX01TR19QQUdFVkVDCQk3CisKK3N0cnVjdCByZHNfbWVzc2FnZSB7CisJYXRvbWljX3QJCW1fcmVmY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZAltX3NvY2tfaXRlbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1fY29ubl9pdGVtOworCXN0cnVjdCByZHNfaW5jb21pbmcJbV9pbmM7CisJdTY0CQkJbV9hY2tfc2VxOworCV9fYmUzMgkJCW1fZGFkZHI7CisJdW5zaWduZWQgbG9uZwkJbV9mbGFnczsKKworCS8qIE5ldmVyIGFjY2VzcyBtX3JzIHdpdGhvdXQgaG9sZGluZyBtX3JzX2xvY2suCisJICogTG9jayBuZXN0aW5nIGlzCisJICogIHJtLT5tX3JzX2xvY2sKKwkgKiAgIC0+IHJzLT5yc19sb2NrCisJICovCisJc3BpbmxvY2tfdAkJbV9yc19sb2NrOworCXN0cnVjdCByZHNfc29jawkJKm1fcnM7CisJc3RydWN0IHJkc19yZG1hX29wCSptX3JkbWFfb3A7CisJcmRzX3JkbWFfY29va2llX3QJbV9yZG1hX2Nvb2tpZTsKKwlzdHJ1Y3QgcmRzX21yCQkqbV9yZG1hX21yOworCXVuc2lnbmVkIGludAkJbV9uZW50czsKKwl1bnNpZ25lZCBpbnQJCW1fY291bnQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0CW1fc2dbMF07Cit9OworCisvKgorICogVGhlIFJEUyBub3RpZmllciBpcyB1c2VkIChvcHRpb25hbGx5KSB0byB0ZWxsIHRoZSBhcHBsaWNhdGlvbiBhYm91dAorICogY29tcGxldGVkIFJETUEgb3BlcmF0aW9ucy4gUmF0aGVyIHRoYW4ga2VlcGluZyB0aGUgd2hvbGUgcmRzIG1lc3NhZ2UKKyAqIGFyb3VuZCBvbiB0aGUgcXVldWUsIHdlIGFsbG9jYXRlIGEgc21hbGwgbm90aWZpZXIgdGhhdCBpcyBwdXQgb24gdGhlCisgKiBzb2NrZXQncyBub3RpZmllcl9saXN0LiBOb3RpZmljYXRpb25zIGFyZSBkZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiB0aHJvdWdoIGNvbnRyb2wgbWVzc2FnZXMuCisgKi8KK3N0cnVjdCByZHNfbm90aWZpZXIgeworCXN0cnVjdCBsaXN0X2hlYWQJbl9saXN0OworCXVpbnQ2NF90CQluX3VzZXJfdG9rZW47CisJaW50CQkJbl9zdGF0dXM7Cit9OworCisvKioKKyAqIHN0cnVjdCByZHNfdHJhbnNwb3J0IC0gIHRyYW5zcG9ydCBzcGVjaWZpYyBiZWhhdmlvdXJhbCBob29rcworICoKKyAqIEB4bWl0OiAueG1pdCBpcyBjYWxsZWQgYnkgcmRzX3NlbmRfeG1pdCgpIHRvIHRlbGwgdGhlIHRyYW5zcG9ydCB0byBzZW5kCisgKiAgICAgICAgcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXMKKyAqICAgICAgICBkb2Vzbid0IG5lZWQgdG8gYmUgcmVlbnRyYW50IGZvciBhIGdpdmVuIGNvbm4uICBUaGUgaGVhZGVyIG11c3QgYmUKKyAqICAgICAgICBzZW50IGJlZm9yZSB0aGUgZGF0YSBwYXlsb2FkLiAgLnhtaXQgbXVzdCBiZSBwcmVwYXJlZCB0byBzZW5kIGEKKyAqICAgICAgICBtZXNzYWdlIHdpdGggbm8gZGF0YSBwYXlsb2FkLiAgLnhtaXQgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mCisgKiAgICAgICAgYnl0ZXMgdGhhdCB3ZXJlIHNlbnQgZG93biB0aGUgY29ubmVjdGlvbiwgaW5jbHVkaW5nIGhlYWRlciBieXRlcy4KKyAqICAgICAgICBSZXR1cm5pbmcgMCB0ZWxscyB0aGUgY2FsbGVyIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHBlcmZvcm0gYW55CisgKiAgICAgICAgYWRkaXRpb25hbCB3b3JrIG5vdy4gIFRoaXMgaXMgdXN1YWxseSB0aGUgY2FzZSB3aGVuIHRoZSB0cmFuc3BvcnQgaGFzCisgKiAgICAgICAgZmlsbGVkIHRoZSBzZW5kaW5nIHF1ZXVlIGZvciBpdHMgY29ubmVjdGlvbiBhbmQgd2lsbCBoYW5kbGUKKyAqICAgICAgICB0cmlnZ2VyaW5nIHRoZSByZHMgdGhyZWFkIHRvIGNvbnRpbnVlIHRoZSBzZW5kIHdoZW4gc3BhY2UgYmVjb21lcworICogICAgICAgIGF2YWlsYWJsZS4gIFJldHVybmluZyAtRUFHQUlOIHRlbGxzIHRoZSBjYWxsZXIgdG8gcmV0cnkgdGhlIHNlbmQKKyAqICAgICAgICBpbW1lZGlhdGVseS4gIFJldHVybmluZyAtRU5PTUVNIHRlbGxzIHRoZSBjYWxsZXIgdG8gcmV0cnkgdGhlIHNlbmQgYXQKKyAqICAgICAgICBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisgKgorICogQGNvbm5fc2h1dGRvd246IGNvbm5fc2h1dGRvd24gc3RvcHMgdHJhZmZpYyBvbiB0aGUgZ2l2ZW4gY29ubmVjdGlvbi4gIE9uY2UKKyAqICAgICAgICAgICAgICAgICBpdCByZXR1cm5zIHRoZSBjb25uZWN0aW9uIGNhbiBub3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLgorICogICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlIGFmdGVyIGNvbm5fY29ubmVjdCByZXR1cm5zCisgKiAgICAgICAgICAgICAgICAgbm9uLXplcm8gc3VjY2VzcyBhbmQgd2lsbCBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgdGhpcyB3aXRoCisgKiAgICAgICAgICAgICAgICAgdGhlIHNlbmQgYW5kIGNvbm5lY3RpbmcgcGF0aHMgKHhtaXRfKiBhbmQgY29ubl8qKS4gIFRoZQorICogICAgICAgICAgICAgICAgIHRyYW5zcG9ydCBpcyByZXNwb25zaWJsZSBmb3Igb3RoZXIgc2VyaWFsaXphdGlvbiwgaW5jbHVkaW5nCisgKiAgICAgICAgICAgICAgICAgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIFRoaXMgaXMgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dCBidXQKKyAqICAgICAgICAgICAgICAgICBzaG91bGQgdHJ5IGhhcmQgbm90IHRvIGJsb2NrLgorICoKKyAqIEB4bWl0X2NvbmdfbWFwOiBUaGlzIGFza3MgdGhlIHRyYW5zcG9ydCB0byBzZW5kIHRoZSBsb2NhbCBiaXRtYXAgZG93biB0aGUKKyAqIAkJICAgZ2l2ZW4gY29ubmVjdGlvbi4gIFhYWCBnZXQgYSBiZXR0ZXIgc3RvcnkgYWJvdXQgdGhlIGJpdG1hcAorICogCQkgICBmbGFnIGFuZCBoZWFkZXIuCisgKi8KKworc3RydWN0IHJkc190cmFuc3BvcnQgeworCWNoYXIJCQl0X25hbWVbVFJBTlNOQU1TSVpdOworCXN0cnVjdCBsaXN0X2hlYWQJdF9pdGVtOworCXN0cnVjdCBtb2R1bGUJCSp0X293bmVyOworCXVuc2lnbmVkIGludAkJdF9wcmVmZXJfbG9vcGJhY2s6MTsKKworCWludCAoKmxhZGRyX2NoZWNrKShfX2JlMzIgYWRkcik7CisJaW50ICgqY29ubl9hbGxvYykoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApOworCXZvaWQgKCpjb25uX2ZyZWUpKHZvaWQgKmRhdGEpOworCWludCAoKmNvbm5fY29ubmVjdCkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwl2b2lkICgqY29ubl9zaHV0ZG93bikoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwl2b2lkICgqeG1pdF9wcmVwYXJlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCXZvaWQgKCp4bWl0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCWludCAoKnhtaXQpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJICAgIHVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpOworCWludCAoKnhtaXRfY29uZ19tYXApKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisJaW50ICgqeG1pdF9yZG1hKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApOworCWludCAoKnJlY3YpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJaW50ICgqaW5jX2NvcHlfdG9fdXNlcikoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQlzaXplX3Qgc2l6ZSk7CisJdm9pZCAoKmluY19wdXJnZSkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKKwl2b2lkICgqaW5jX2ZyZWUpKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CisKKwlpbnQgKCpjbV9oYW5kbGVfY29ubmVjdCkoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJCSBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCWludCAoKmNtX2luaXRpYXRlX2Nvbm5lY3QpKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7CisJdm9pZCAoKmNtX2Nvbm5lY3RfY29tcGxldGUpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworCXVuc2lnbmVkIGludCAoKnN0YXRzX2luZm9fY29weSkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCQl1bnNpZ25lZCBpbnQgYXZhaWwpOworCXZvaWQgKCpleGl0KSh2b2lkKTsKKwl2b2lkICooKmdldF9tcikoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBucl9zZywKKwkJCXN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCk7CisJdm9pZCAoKnN5bmNfbXIpKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXJlY3Rpb24pOworCXZvaWQgKCpmcmVlX21yKSh2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSk7CisJdm9pZCAoKmZsdXNoX21ycykodm9pZCk7Cit9OworCitzdHJ1Y3QgcmRzX3NvY2sgeworCXN0cnVjdCBzb2NrCQlyc19zazsKKworCXU2NAkJCXJzX3VzZXJfYWRkcjsKKwl1NjQJCQlyc191c2VyX2J5dGVzOworCisJLyoKKwkgKiBib3VuZF9hZGRyIHVzZWQgZm9yIGJvdGggaW5jb21pbmcgYW5kIG91dGdvaW5nLCBubyBJTkFERFJfQU5ZCisJICogc3VwcG9ydC4KKwkgKi8KKwlzdHJ1Y3QgcmJfbm9kZQkJcnNfYm91bmRfbm9kZTsKKwlfX2JlMzIJCQlyc19ib3VuZF9hZGRyOworCV9fYmUzMgkJCXJzX2Nvbm5fYWRkcjsKKwlfX2JlMTYJCQlyc19ib3VuZF9wb3J0OworCV9fYmUxNgkJCXJzX2Nvbm5fcG9ydDsKKworCS8qCisJICogVGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tbXVuaWNhdGUgdGhlIHRyYW5zcG9ydCBiZXR3ZWVuIGJpbmQgYW5kCisJICogaW5pdGlhdGluZyBjb25uZWN0aW9ucy4gIEFsbCBvdGhlciB0cmFucyB1c2UgaXMgcmVmZXJlbmNlZCB0aHJvdWdoCisJICogdGhlIGNvbm5lY3Rpb24uCisJICovCisJc3RydWN0IHJkc190cmFuc3BvcnQgICAgKnJzX3RyYW5zcG9ydDsKKworCS8qCisJICogcmRzX3NlbmRtc2cgY2FjaGVzIHRoZSBjb25uIGl0IHVzZWQgdGhlIGxhc3QgdGltZSBhcm91bmQuCisJICogVGhpcyBoZWxwcyBhdm9pZCBjb3N0bHkgbG9va3Vwcy4KKwkgKi8KKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24JKnJzX2Nvbm47CisKKwkvKiBmbGFnIGluZGljYXRpbmcgd2Ugd2VyZSBjb25nZXN0ZWQgb3Igbm90ICovCisJaW50CQkJcnNfY29uZ2VzdGVkOworCisJLyogcnNfbG9jayBwcm90ZWN0cyBhbGwgdGhlc2UgYWRqYWNlbnQgbWVtYmVycyBiZWZvcmUgdGhlIG5ld2xpbmUgKi8KKwlzcGlubG9ja190CQlyc19sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJcnNfc2VuZF9xdWV1ZTsKKwl1MzIJCQlyc19zbmRfYnl0ZXM7CisJaW50CQkJcnNfcmN2X2J5dGVzOworCXN0cnVjdCBsaXN0X2hlYWQJcnNfbm90aWZ5X3F1ZXVlOwkvKiBjdXJyZW50bHkgdXNlZCBmb3IgZmFpbGVkIFJETUFzICovCisKKwkvKiBDb25nZXN0aW9uIHdha2VfdXAuIElmIHJzX2NvbmdfbW9uaXRvciBpcyBzZXQsIHdlIHVzZSBjb25nX21hc2sKKwkgKiB0byBkZWNpZGUgd2hldGhlciB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHdva2VuIHVwLgorCSAqIElmIG5vdCBzZXQsIHdlIHVzZSByc19jb25nX3RyYWNrIHRvIGZpbmQgb3V0IHdoZXRoZXIgYSBjb25nIG1hcAorCSAqIHVwZGF0ZSBhcnJpdmVkLgorCSAqLworCXVpbnQ2NF90CQlyc19jb25nX21hc2s7CisJdWludDY0X3QJCXJzX2Nvbmdfbm90aWZ5OworCXN0cnVjdCBsaXN0X2hlYWQJcnNfY29uZ19saXN0OworCXVuc2lnbmVkIGxvbmcJCXJzX2NvbmdfdHJhY2s7CisKKwkvKgorCSAqIHJzX3JlY3ZfbG9jayBwcm90ZWN0cyB0aGUgcmVjZWl2ZSBxdWV1ZSwgYW5kIGlzCisJICogdXNlZCB0byBzZXJpYWxpemUgd2l0aCByZHNfcmVsZWFzZS4KKwkgKi8KKwlyd2xvY2tfdAkJcnNfcmVjdl9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJcnNfcmVjdl9xdWV1ZTsKKworCS8qIGp1c3QgZm9yIHN0YXRzIHJlcG9ydGluZyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcnNfaXRlbTsKKworCS8qIHRoZXNlIGhhdmUgdGhlaXIgb3duIGxvY2sgKi8KKwlzcGlubG9ja190CQlyc19yZG1hX2xvY2s7CisJc3RydWN0IHJiX3Jvb3QJCXJzX3JkbWFfa2V5czsKKworCS8qIFNvY2tldCBvcHRpb25zIC0gaW4gY2FzZSB0aGVyZSB3aWxsIGJlIG1vcmUgKi8KKwl1bnNpZ25lZCBjaGFyCQlyc19yZWN2ZXJyLAorCQkJCXJzX2NvbmdfbW9uaXRvcjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJkc19zb2NrICpyZHNfc2tfdG9fcnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCByZHNfc29jaywgcnNfc2spOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqcmRzX3JzX3RvX3NrKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJcmV0dXJuICZycy0+cnNfc2s7Cit9CisKKy8qCisgKiBUaGUgc3RhY2sgYXNzaWducyBza19zbmRidWYgYW5kIHNrX3JjdmJ1ZiB0byB0d2ljZSB0aGUgc3BlY2lmaWVkIHZhbHVlCisgKiB0byBhY2NvdW50IGZvciBvdmVyaGVhZC4gIFdlIGRvbid0IGFjY291bnQgZm9yIG92ZXJoZWFkLCB3ZSBqdXN0IGFwcGx5CisgKiB0aGUgbnVtYmVyIG9mIHBheWxvYWQgYnl0ZXMgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmRzX3NrX3NuZGJ1ZihzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXJldHVybiByZHNfcnNfdG9fc2socnMpLT5za19zbmRidWYgLyAyOworfQorc3RhdGljIGlubGluZSBpbnQgcmRzX3NrX3JjdmJ1ZihzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXJldHVybiByZHNfcnNfdG9fc2socnMpLT5za19yY3ZidWYgLyAyOworfQorCitzdHJ1Y3QgcmRzX3N0YXRpc3RpY3MgeworCXVpbnQ2NF90CXNfY29ubl9yZXNldDsKKwl1aW50NjRfdAlzX3JlY3ZfZHJvcF9iYWRfY2hlY2tzdW07CisJdWludDY0X3QJc19yZWN2X2Ryb3Bfb2xkX3NlcTsKKwl1aW50NjRfdAlzX3JlY3ZfZHJvcF9ub19zb2NrOworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX2RlYWRfc29jazsKKwl1aW50NjRfdAlzX3JlY3ZfZGVsaXZlcl9yYWNlZDsKKwl1aW50NjRfdAlzX3JlY3ZfZGVsaXZlcmVkOworCXVpbnQ2NF90CXNfcmVjdl9xdWV1ZWQ7CisJdWludDY0X3QJc19yZWN2X2ltbWVkaWF0ZV9yZXRyeTsKKwl1aW50NjRfdAlzX3JlY3ZfZGVsYXllZF9yZXRyeTsKKwl1aW50NjRfdAlzX3JlY3ZfYWNrX3JlcXVpcmVkOworCXVpbnQ2NF90CXNfcmVjdl9yZG1hX2J5dGVzOworCXVpbnQ2NF90CXNfcmVjdl9waW5nOworCXVpbnQ2NF90CXNfc2VuZF9xdWV1ZV9lbXB0eTsKKwl1aW50NjRfdAlzX3NlbmRfcXVldWVfZnVsbDsKKwl1aW50NjRfdAlzX3NlbmRfc2VtX2NvbnRlbnRpb247CisJdWludDY0X3QJc19zZW5kX3NlbV9xdWV1ZV9yYWNlZDsKKwl1aW50NjRfdAlzX3NlbmRfaW1tZWRpYXRlX3JldHJ5OworCXVpbnQ2NF90CXNfc2VuZF9kZWxheWVkX3JldHJ5OworCXVpbnQ2NF90CXNfc2VuZF9kcm9wX2Fja2VkOworCXVpbnQ2NF90CXNfc2VuZF9hY2tfcmVxdWlyZWQ7CisJdWludDY0X3QJc19zZW5kX3F1ZXVlZDsKKwl1aW50NjRfdAlzX3NlbmRfcmRtYTsKKwl1aW50NjRfdAlzX3NlbmRfcmRtYV9ieXRlczsKKwl1aW50NjRfdAlzX3NlbmRfcG9uZzsKKwl1aW50NjRfdAlzX3BhZ2VfcmVtYWluZGVyX2hpdDsKKwl1aW50NjRfdAlzX3BhZ2VfcmVtYWluZGVyX21pc3M7CisJdWludDY0X3QJc19jb3B5X3RvX3VzZXI7CisJdWludDY0X3QJc19jb3B5X2Zyb21fdXNlcjsKKwl1aW50NjRfdAlzX2NvbmdfdXBkYXRlX3F1ZXVlZDsKKwl1aW50NjRfdAlzX2NvbmdfdXBkYXRlX3JlY2VpdmVkOworCXVpbnQ2NF90CXNfY29uZ19zZW5kX2Vycm9yOworCXVpbnQ2NF90CXNfY29uZ19zZW5kX2Jsb2NrZWQ7Cit9OworCisvKiBhZl9yZHMuYyAqLwordm9pZCByZHNfc29ja19hZGRyZWYoc3RydWN0IHJkc19zb2NrICpycyk7Cit2b2lkIHJkc19zb2NrX3B1dChzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3ZvaWQgcmRzX3dha2Vfc2tfc2xlZXAoc3RydWN0IHJkc19zb2NrICpycyk7CitzdGF0aWMgaW5saW5lIHZvaWQgX19yZHNfd2FrZV9za19zbGVlcChzdHJ1Y3Qgc29jayAqc2spCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXRxID0gc2stPnNrX3NsZWVwOworCisJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgJiYgd2FpdHEpCisJCXdha2VfdXAod2FpdHEpOworfQorZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHJkc19wb2xsX3dhaXRxOworCisKKy8qIGJpbmQuYyAqLworaW50IHJkc19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbik7Cit2b2lkIHJkc19yZW1vdmVfYm91bmQoc3RydWN0IHJkc19zb2NrICpycyk7CitzdHJ1Y3QgcmRzX3NvY2sgKnJkc19maW5kX2JvdW5kKF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydCk7CisKKy8qIGNvbmcuYyAqLworaW50IHJkc19jb25nX2dldF9tYXBzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25nX2FkZF9jb25uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25nX3JlbW92ZV9jb25uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25nX3NldF9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCk7Cit2b2lkIHJkc19jb25nX2NsZWFyX2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KTsKK2ludCByZHNfY29uZ193YWl0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQsIGludCBub25ibG9jaywgc3RydWN0IHJkc19zb2NrICpycyk7Cit2b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKTsKK3ZvaWQgcmRzX2NvbmdfbWFwX3VwZGF0ZWQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCB1aW50NjRfdCk7CitpbnQgcmRzX2NvbmdfdXBkYXRlZF9zaW5jZSh1bnNpZ25lZCBsb25nICpyZWNlbnQpOwordm9pZCByZHNfY29uZ19hZGRfc29ja2V0KHN0cnVjdCByZHNfc29jayAqKTsKK3ZvaWQgcmRzX2NvbmdfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKik7Cit2b2lkIHJkc19jb25nX2V4aXQodm9pZCk7CitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19jb25nX3VwZGF0ZV9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCisvKiBjb25uLmMgKi8KK2ludCBfX2luaXQgcmRzX2Nvbm5faW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2Nvbm5fZXhpdCh2b2lkKTsKK3N0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCk7CitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCk7Cit2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2Nvbm5fcmVzZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfZm9yX2VhY2hfY29ubl9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMsCisJCQkgIGludCAoKnZpc2l0b3IpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqLCB2b2lkICopLAorCQkJICBzaXplX3QgaXRlbV9sZW4pOwordm9pZCBfX3Jkc19jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqLCAuLi4pCisJCQkJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworI2RlZmluZSByZHNfY29ubl9lcnJvcihjb25uLCBmbXQuLi4pIFwKKwlfX3Jkc19jb25uX2Vycm9yKGNvbm4sIEtFUk5fV0FSTklORyAiUkRTOiAiIGZtdCkKKworc3RhdGljIGlubGluZSBpbnQKK3Jkc19jb25uX3RyYW5zaXRpb24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXJldHVybiBhdG9taWNfY21weGNoZygmY29ubi0+Y19zdGF0ZSwgb2xkLCBuZXcpID09IG9sZDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Jkc19jb25uX3N0YXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fdXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkgPT0gUkRTX0NPTk5fVVA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl9jb25uZWN0aW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX0NPTk5FQ1RJTkc7Cit9CisKKy8qIG1lc3NhZ2UuYyAqLworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9hbGxvYyh1bnNpZ25lZCBpbnQgbmVudHMsIGdmcF90IGdmcCk7CitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2NvcHlfZnJvbV91c2VyKHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LAorCQkJCQkgICAgICAgc2l6ZV90IHRvdGFsX2xlbik7CitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX21hcF9wYWdlcyh1bnNpZ25lZCBsb25nICpwYWdlX2FkZHJzLCB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKTsKK3ZvaWQgcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIF9fYmUxNiBzcG9ydCwKKwkJCQkgX19iZTE2IGRwb3J0LCB1NjQgc2VxKTsKK2ludCByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7CitpbnQgcmRzX21lc3NhZ2VfbmV4dF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnBvcywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgKmJ1Zmxlbik7CitpbnQgcmRzX21lc3NhZ2VfYWRkX3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCB2ZXJzaW9uKTsKK2ludCByZHNfbWVzc2FnZV9nZXRfdmVyc2lvbl9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdW5zaWduZWQgaW50ICp2ZXJzaW9uKTsKK2ludCByZHNfbWVzc2FnZV9hZGRfcmRtYV9kZXN0X2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1MzIgcl9rZXksIHUzMiBvZmZzZXQpOworaW50IHJkc19tZXNzYWdlX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkJCSBzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwgc2l6ZV90IHNpemUpOwordm9pZCByZHNfbWVzc2FnZV9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX21lc3NhZ2VfYWRkcmVmKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOwordm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSk7Cit2b2lkIHJkc19tZXNzYWdlX3dhaXQoc3RydWN0IHJkc19tZXNzYWdlICpybSk7Cit2b2lkIHJkc19tZXNzYWdlX3VubWFwcGVkKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOworCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyKQoreworCWhkci0+aF9jc3VtID0gMDsKKwloZHItPmhfY3N1bSA9IGlwX2Zhc3RfY3N1bSgodm9pZCAqKSBoZHIsIHNpemVvZigqaGRyKSA+PiAyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmRzX21lc3NhZ2VfdmVyaWZ5X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCByZHNfaGVhZGVyICpoZHIpCit7CisJcmV0dXJuICFoZHItPmhfY3N1bSB8fCBpcF9mYXN0X2NzdW0oKHZvaWQgKikgaGRyLCBzaXplb2YoKmhkcikgPj4gMikgPT0gMDsKK30KKworCisvKiBwYWdlLmMgKi8KK2ludCByZHNfcGFnZV9yZW1haW5kZXJfYWxsb2Moc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0LCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCQkJICAgICBnZnBfdCBnZnApOworaW50IHJkc19wYWdlX2NvcHlfdXNlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCSAgICAgICB2b2lkIF9fdXNlciAqcHRyLCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCQkgICAgICAgaW50IHRvX3VzZXIpOworI2RlZmluZSByZHNfcGFnZV9jb3B5X3RvX3VzZXIocGFnZSwgb2Zmc2V0LCBwdHIsIGJ5dGVzKSBcCisJcmRzX3BhZ2VfY29weV91c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcywgMSkKKyNkZWZpbmUgcmRzX3BhZ2VfY29weV9mcm9tX3VzZXIocGFnZSwgb2Zmc2V0LCBwdHIsIGJ5dGVzKSBcCisJcmRzX3BhZ2VfY29weV91c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcywgMCkKK3ZvaWQgcmRzX3BhZ2VfZXhpdCh2b2lkKTsKKworLyogcmVjdi5jICovCit2b2lkIHJkc19pbmNfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJICBfX2JlMzIgc2FkZHIpOwordm9pZCByZHNfaW5jX2FkZHJlZihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkgICAgICAgc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBnZnBfdCBnZnAsIGVudW0ga21fdHlwZSBrbSk7CitpbnQgcmRzX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBzaXplLCBpbnQgbXNnX2ZsYWdzKTsKK3ZvaWQgcmRzX2NsZWFyX3JlY3ZfcXVldWUoc3RydWN0IHJkc19zb2NrICpycyk7CitpbnQgcmRzX25vdGlmeV9xdWV1ZV9nZXQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IG1zZ2hkciAqbXNnKTsKK3ZvaWQgcmRzX2luY19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkgICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkgICAgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIGludCBmbGlwKTsKKworLyogc2VuZC5jICovCitpbnQgcmRzX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBwYXlsb2FkX2xlbik7Cit2b2lkIHJkc19zZW5kX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworc3RydWN0IHNvY2thZGRyX2luOwordm9pZCByZHNfc2VuZF9kcm9wX3RvKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrYWRkcl9pbiAqZGVzdCk7Cit0eXBlZGVmIGludCAoKmlzX2Fja2VkX2Z1bmMpKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIHVpbnQ2NF90IGFjayk7Cit2b2lkIHJkc19zZW5kX2Ryb3BfYWNrZWQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgYWNrLAorCQkJIGlzX2Fja2VkX2Z1bmMgaXNfYWNrZWQpOworaW50IHJkc19zZW5kX2Fja2VkX2JlZm9yZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHU2NCBzZXEpOwordm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKTsKK2ludCByZHNfc2VuZF9wb25nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgX19iZTE2IGRwb3J0KTsKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX3NlbmRfZ2V0X21lc3NhZ2Uoc3RydWN0IHJkc19jb25uZWN0aW9uICosCisJCQkJCSBzdHJ1Y3QgcmRzX3JkbWFfb3AgKik7CisKKy8qIHJkbWEuYyAqLwordm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSk7CisKKy8qIHN0YXRzLmMgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmRzX3N0YXRpc3RpY3MsIHJkc19zdGF0cyk7CisjZGVmaW5lIHJkc19zdGF0c19pbmNfd2hpY2god2hpY2gsIG1lbWJlcikgZG8gewkJXAorCXBlcl9jcHUod2hpY2gsIGdldF9jcHUoKSkubWVtYmVyKys7CQlcCisJcHV0X2NwdSgpOwkJCQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmRzX3N0YXRzX2luYyhtZW1iZXIpIHJkc19zdGF0c19pbmNfd2hpY2gocmRzX3N0YXRzLCBtZW1iZXIpCisjZGVmaW5lIHJkc19zdGF0c19hZGRfd2hpY2god2hpY2gsIG1lbWJlciwgY291bnQpIGRvIHsJCVwKKwlwZXJfY3B1KHdoaWNoLCBnZXRfY3B1KCkpLm1lbWJlciArPSBjb3VudDsJXAorCXB1dF9jcHUoKTsJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIHJkc19zdGF0c19hZGQobWVtYmVyLCBjb3VudCkgcmRzX3N0YXRzX2FkZF93aGljaChyZHNfc3RhdHMsIG1lbWJlciwgY291bnQpCitpbnQgX19pbml0IHJkc19zdGF0c19pbml0KHZvaWQpOwordm9pZCByZHNfc3RhdHNfZXhpdCh2b2lkKTsKK3ZvaWQgcmRzX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgdWludDY0X3QgKnZhbHVlcywgY2hhciAqKm5hbWVzLCBzaXplX3QgbnIpOworCisvKiBzeXNjdGwuYyAqLworaW50IF9faW5pdCByZHNfc3lzY3RsX2luaXQodm9pZCk7Cit2b2lkIHJkc19zeXNjdGxfZXhpdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfc25kYnVmX21pbjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfc25kYnVmX2RlZmF1bHQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3NuZGJ1Zl9tYXg7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzOworZXh0ZXJuIHVuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzOworZXh0ZXJuIHVuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfcGluZ19lbmFibGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3RyYWNlX2ZsYWdzOworZXh0ZXJuIHVuc2lnbmVkIGludCAgcmRzX3N5c2N0bF90cmFjZV9sZXZlbDsKKworLyogdGhyZWFkcy5jICovCitpbnQgX19pbml0IHJkc190aHJlYWRzX2luaXQodm9pZCk7Cit2b2lkIHJkc190aHJlYWRzX2V4aXQodm9pZCk7CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc193cTsKK3ZvaWQgcmRzX2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIHJkc19zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIHJkc19yZWN2X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIHJkc19jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisKKy8qIHRyYW5zcG9ydC5jICovCitpbnQgcmRzX3RyYW5zX3JlZ2lzdGVyKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyk7Cit2b2lkIHJkc190cmFuc191bnJlZ2lzdGVyKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyk7CitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqcmRzX3RyYW5zX2dldF9wcmVmZXJyZWQoX19iZTMyIGFkZHIpOwordW5zaWduZWQgaW50IHJkc190cmFuc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYXZhaWwpOworaW50IF9faW5pdCByZHNfdHJhbnNfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3RyYW5zX2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjExOGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZWN2LmMKQEAgLTAsMCArMSw1NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKwordm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCSAgX19iZTMyIHNhZGRyKQoreworCWF0b21pY19zZXQoJmluYy0+aV9yZWZjb3VudCwgMSk7CisJSU5JVF9MSVNUX0hFQUQoJmluYy0+aV9pdGVtKTsKKwlpbmMtPmlfY29ubiA9IGNvbm47CisJaW5jLT5pX3NhZGRyID0gc2FkZHI7CisJaW5jLT5pX3JkbWFfY29va2llID0gMDsKK30KKwordm9pZCByZHNfaW5jX2FkZHJlZihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJcmRzZGVidWcoImFkZHJlZiBpbmMgJXAgcmVmICVkXG4iLCBpbmMsIGF0b21pY19yZWFkKCZpbmMtPmlfcmVmY291bnQpKTsKKwlhdG9taWNfaW5jKCZpbmMtPmlfcmVmY291bnQpOworfQorCit2b2lkIHJkc19pbmNfcHV0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlyZHNkZWJ1ZygicHV0IGluYyAlcCByZWYgJWRcbiIsIGluYywgYXRvbWljX3JlYWQoJmluYy0+aV9yZWZjb3VudCkpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpbmMtPmlfcmVmY291bnQpKSB7CisJCUJVR19PTighbGlzdF9lbXB0eSgmaW5jLT5pX2l0ZW0pKTsKKworCQlpbmMtPmlfY29ubi0+Y190cmFucy0+aW5jX2ZyZWUoaW5jKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19yZWN2X3JjdmJ1Zl9kZWx0YShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsCisJCQkJICBpbnQgZGVsdGEsIF9fYmUxNiBwb3J0KQoreworCWludCBub3dfY29uZ2VzdGVkOworCisJaWYgKGRlbHRhID09IDApCisJCXJldHVybjsKKworCXJzLT5yc19yY3ZfYnl0ZXMgKz0gZGVsdGE7CisJbm93X2Nvbmdlc3RlZCA9IHJzLT5yc19yY3ZfYnl0ZXMgPiByZHNfc2tfcmN2YnVmKHJzKTsKKworCXJkc2RlYnVnKCJycyAlcCAoJXBJNDoldSkgcmVjdiBieXRlcyAlZCBidWYgJWQgIgorCSAgIm5vd19jb25nICVkIGRlbHRhICVkXG4iLAorCSAgcnMsICZycy0+cnNfYm91bmRfYWRkciwKKwkgIG50b2hzKHJzLT5yc19ib3VuZF9wb3J0KSwgcnMtPnJzX3Jjdl9ieXRlcywKKwkgIHJkc19za19yY3ZidWYocnMpLCBub3dfY29uZ2VzdGVkLCBkZWx0YSk7CisKKwkvKiB3YXNuJ3QgLT4gYW0gY29uZ2VzdGVkICovCisJaWYgKCFycy0+cnNfY29uZ2VzdGVkICYmIG5vd19jb25nZXN0ZWQpIHsKKwkJcnMtPnJzX2Nvbmdlc3RlZCA9IDE7CisJCXJkc19jb25nX3NldF9iaXQobWFwLCBwb3J0KTsKKwkJcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhtYXApOworCX0KKwkvKiB3YXMgLT4gYXJlbid0IGNvbmdlc3RlZCAqLworCS8qIFJlcXVpcmUgbW9yZSBmcmVlIHNwYWNlIGJlZm9yZSByZXBvcnRpbmcgdW5jb25nZXN0ZWQgdG8gcHJldmVudAorCSAgIGJvdW5jaW5nIGNvbmcvdW5jb25nIHN0YXRlIHRvbyBvZnRlbiAqLworCWVsc2UgaWYgKHJzLT5yc19jb25nZXN0ZWQgJiYgKHJzLT5yc19yY3ZfYnl0ZXMgPCAocmRzX3NrX3JjdmJ1ZihycykvMikpKSB7CisJCXJzLT5yc19jb25nZXN0ZWQgPSAwOworCQlyZHNfY29uZ19jbGVhcl9iaXQobWFwLCBwb3J0KTsKKwkJcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhtYXApOworCX0KKworCS8qIGRvIG5vdGhpbmcgaWYgbm8gY2hhbmdlIGluIGNvbmcgc3RhdGUgKi8KK30KKworLyoKKyAqIFByb2Nlc3MgYWxsIGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgY29tZSB3aXRoIHRoaXMgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQgcmRzX3JlY3ZfaW5jb21pbmdfZXh0aGRycyhzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpbmMtPmlfaGRyOworCXVuc2lnbmVkIGludCBwb3MgPSAwLCB0eXBlLCBsZW47CisJdW5pb24geworCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiB2ZXJzaW9uOworCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSByZG1hOworCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYV9kZXN0IHJkbWFfZGVzdDsKKwl9IGJ1ZmZlcjsKKworCXdoaWxlICgxKSB7CisJCWxlbiA9IHNpemVvZihidWZmZXIpOworCQl0eXBlID0gcmRzX21lc3NhZ2VfbmV4dF9leHRlbnNpb24oaGRyLCAmcG9zLCAmYnVmZmVyLCAmbGVuKTsKKwkJaWYgKHR5cGUgPT0gUkRTX0VYVEhEUl9OT05FKQorCQkJYnJlYWs7CisJCS8qIFByb2Nlc3MgZXh0ZW5zaW9uIGhlYWRlciBoZXJlICovCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFJEU19FWFRIRFJfUkRNQToKKwkJCXJkc19yZG1hX3VudXNlKHJzLCBiZTMyX3RvX2NwdShidWZmZXIucmRtYS5oX3JkbWFfcmtleSksIDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRFNfRVhUSERSX1JETUFfREVTVDoKKwkJCS8qIFdlIGlnbm9yZSB0aGUgc2l6ZSBmb3Igbm93LiBXZSBjb3VsZCBzdGFzaCBpdAorCQkJICogc29tZXdoZXJlIGFuZCB1c2UgaXQgZm9yIGVycm9yIGNoZWNraW5nLiAqLworCQkJaW5jLT5pX3JkbWFfY29va2llID0gcmRzX3JkbWFfbWFrZV9jb29raWUoCisJCQkJCWJlMzJfdG9fY3B1KGJ1ZmZlci5yZG1hX2Rlc3QuaF9yZG1hX3JrZXkpLAorCQkJCQliZTMyX3RvX2NwdShidWZmZXIucmRtYV9kZXN0LmhfcmRtYV9vZmZzZXQpKTsKKworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGUgdHJhbnNwb3J0IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIKKyAqIHJ4IGFuZCBjb25uIHJlc2V0IG9uIHRoaXMgc3BlY2lmaWMgY29ubi4KKyAqCisgKiBXZSBjdXJyZW50bHkgYXNzZXJ0IHRoYXQgb25seSBvbmUgZnJhZ21lbnRlZCBtZXNzYWdlIHdpbGwgYmUgc2VudAorICogZG93biBhIGNvbm5lY3Rpb24gYXQgYSB0aW1lLiAgVGhpcyBsZXRzIHVzIHJlYXNzZW1ibGUgaW4gdGhlIGNvbm4KKyAqIGluc3RlYWQgb2YgcGVyLWZsb3cgd2hpY2ggbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaAorICogZmxvd3MgdG8gdGVhciBkb3duIHBhcnRpYWwgcmVhc3NlbWJseSBwcm9ncmVzcyBvbiBjb25uIGZhaWx1cmUgYW5kCisgKiB3ZSBzYXZlIGZsb3cgbG9va3VwIGFuZCBsb2NraW5nIGZvciBlYWNoIGZyYWcgYXJyaXZhbC4gIEl0IGRvZXMgbWVhbgorICogdGhhdCBzbWFsbCBtZXNzYWdlcyB3aWxsIHdhaXQgYmVoaW5kIGxhcmdlIG9uZXMuICBGcmFnbWVudGluZyBhdCBhbGwKKyAqIGlzIG9ubHkgdG8gcmVkdWNlIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gb2YgcHJlLXBvc3RlZCBidWZmZXJzLgorICoKKyAqIFRoZSBjYWxsZXIgcGFzc2VzIGluIHNhZGRyIGFuZCBkYWRkciBpbnN0ZWFkIG9mIHVzIGdldHRpbmcgaXQgZnJvbSB0aGUKKyAqIGNvbm4uICBUaGlzIGxldHMgbG9vcGJhY2ssIHdobyBvbmx5IGhhcyBvbmUgY29ubiBmb3IgYm90aCBkaXJlY3Rpb25zLAorICogdGVsbCB1cyB3aGljaCByb2xlcyB0aGUgYWRkcnMgaW4gdGhlIGNvbm4gYXJlIHBsYXlpbmcgZm9yIHRoaXMgbWVzc2FnZS4KKyAqLwordm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkgICAgICAgc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBnZnBfdCBnZnAsIGVudW0ga21fdHlwZSBrbSkKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gTlVMTDsKKwlzdHJ1Y3Qgc29jayAqc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWluYy0+aV9jb25uID0gY29ubjsKKwlpbmMtPmlfcnhfamlmZmllcyA9IGppZmZpZXM7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBuZXh0ICVsbHUgaW5jICVwIHNlcSAlbGx1IGxlbiAldSBzcG9ydCAldSBkcG9ydCAldSAiCisJCSAiZmxhZ3MgMHgleCByeF9qaWZmaWVzICVsdVxuIiwgY29ubiwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpY29ubi0+Y19uZXh0X3J4X3NlcSwKKwkJIGluYywKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKSwKKwkJIGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkgYmUxNl90b19jcHUoaW5jLT5pX2hkci5oX3Nwb3J0KSwKKwkJIGJlMTZfdG9fY3B1KGluYy0+aV9oZHIuaF9kcG9ydCksCisJCSBpbmMtPmlfaGRyLmhfZmxhZ3MsCisJCSBpbmMtPmlfcnhfamlmZmllcyk7CisKKwkvKgorCSAqIFNlcXVlbmNlIG51bWJlcnMgc2hvdWxkIG9ubHkgaW5jcmVhc2UuICBNZXNzYWdlcyBnZXQgdGhlaXIKKwkgKiBzZXF1ZW5jZSBudW1iZXIgYXMgdGhleSdyZSBxdWV1ZWQgaW4gYSBzZW5kaW5nIGNvbm4uICBUaGV5CisJICogY2FuIGJlIGRyb3BwZWQsIHRob3VnaCwgaWYgdGhlIHNlbmRpbmcgc29ja2V0IGlzIGNsb3NlZCBiZWZvcmUKKwkgKiB0aGV5IGhpdCB0aGUgd2lyZS4gIFNvIHNlcXVlbmNlIG51bWJlcnMgY2FuIHNraXAgZm9yd2FyZAorCSAqIHVuZGVyIG5vcm1hbCBvcGVyYXRpb24uICBUaGV5IGNhbiBhbHNvIGRyb3AgYmFjayBpbiB0aGUgY29ubgorCSAqIGZhaWxvdmVyIGNhc2UgYXMgcHJldmlvdXNseSBzZW50IG1lc3NhZ2VzIGFyZSByZXNlbnQgZG93biB0aGUKKwkgKiBuZXcgaW5zdGFuY2Ugb2YgYSBjb25uLiAgV2UgZHJvcCB0aG9zZSwgb3RoZXJ3aXNlIHdlIGhhdmUKKwkgKiB0byBhc3N1bWUgdGhhdCB0aGUgbmV4dCB2YWxpZCBzZXEgZG9lcyBub3QgY29tZSBhZnRlciBhCisJICogaG9sZSBpbiB0aGUgZnJhZ21lbnQgc3RyZWFtLgorCSAqCisJICogVGhlIGhlYWRlcnMgZG9uJ3QgZ2l2ZSB1cyBhIHdheSB0byByZWFsaXplIGlmIGZyYWdtZW50cyBvZgorCSAqIGEgbWVzc2FnZSBoYXZlIGJlZW4gZHJvcHBlZC4gIFdlIGFzc3VtZSB0aGF0IGZyYWdzIHRoYXQgYXJyaXZlCisJICogdG8gYSBmbG93IGFyZSBwYXJ0IG9mIHRoZSBjdXJyZW50IG1lc3NhZ2Ugb24gdGhlIGZsb3cgdGhhdCBpcworCSAqIGJlaW5nIHJlYXNzZW1ibGVkLiAgVGhpcyBtZWFucyB0aGF0IHNlbmRlcnMgY2FuJ3QgZHJvcCBtZXNzYWdlcworCSAqIGZyb20gdGhlIHNlbmRpbmcgY29ubiB1bnRpbCBhbGwgdGhlaXIgZnJhZ3MgYXJlIHNlbnQuCisJICoKKwkgKiBYWFggd2UgY291bGQgc3BlbmQgbW9yZSBvbiB0aGUgd2lyZSB0byBnZXQgbW9yZSByb2J1c3QgZmFpbHVyZQorCSAqIGRldGVjdGlvbiwgYXJndWFibHkgd29ydGggaXQgdG8gYXZvaWQgZGF0YSBjb3JydXB0aW9uLgorCSAqLworCWlmIChiZTY0X3RvX2NwdShpbmMtPmlfaGRyLmhfc2VxdWVuY2UpIDwgY29ubi0+Y19uZXh0X3J4X3NlcQorCSAmJiAoaW5jLT5pX2hkci5oX2ZsYWdzICYgUkRTX0ZMQUdfUkVUUkFOU01JVFRFRCkpIHsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZHJvcF9vbGRfc2VxKTsKKwkJZ290byBvdXQ7CisJfQorCWNvbm4tPmNfbmV4dF9yeF9zZXEgPSBiZTY0X3RvX2NwdShpbmMtPmlfaGRyLmhfc2VxdWVuY2UpICsgMTsKKworCWlmIChyZHNfc3lzY3RsX3BpbmdfZW5hYmxlICYmIGluYy0+aV9oZHIuaF9kcG9ydCA9PSAwKSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X3BpbmcpOworCQlyZHNfc2VuZF9wb25nKGNvbm4sIGluYy0+aV9oZHIuaF9zcG9ydCk7CisJCWdvdG8gb3V0OworCX0KKworCXJzID0gcmRzX2ZpbmRfYm91bmQoZGFkZHIsIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJaWYgKHJzID09IE5VTEwpIHsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZHJvcF9ub19zb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUHJvY2VzcyBleHRlbnNpb24gaGVhZGVycyAqLworCXJkc19yZWN2X2luY29taW5nX2V4dGhkcnMoaW5jLCBycyk7CisKKwkvKiBXZSBjYW4gYmUgcmFjaW5nIHdpdGggcmRzX3JlbGVhc2UoKSB3aGljaCBtYXJrcyB0aGUgc29ja2V0IGRlYWQuICovCisJc2sgPSByZHNfcnNfdG9fc2socnMpOworCisJLyogc2VyaWFsaXplIHdpdGggcmRzX3JlbGVhc2UgLT4gc29ja19vcnBoYW4gKi8KKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkgeworCQlyZHNkZWJ1ZygiYWRkaW5nIGluYyAlcCB0byBycyAlcCdzIHJlY3YgcXVldWVcbiIsIGluYywgcnMpOworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9xdWV1ZWQpOworCQlyZHNfcmVjdl9yY3ZidWZfZGVsdGEocnMsIHNrLCBpbmMtPmlfY29ubi0+Y19sY29uZywKKwkJCQkgICAgICBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSwKKwkJCQkgICAgICBpbmMtPmlfaGRyLmhfZHBvcnQpOworCQlyZHNfaW5jX2FkZHJlZihpbmMpOworCQlsaXN0X2FkZF90YWlsKCZpbmMtPmlfaXRlbSwgJnJzLT5yc19yZWN2X3F1ZXVlKTsKKwkJX19yZHNfd2FrZV9za19zbGVlcChzayk7CisJfSBlbHNlIHsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZHJvcF9kZWFkX3NvY2spOworCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCitvdXQ6CisJaWYgKHJzKQorCQlyZHNfc29ja19wdXQocnMpOworfQorCisvKgorICogYmUgdmVyeSBjYXJlZnVsIGhlcmUuICBUaGlzIGlzIGJlaW5nIGNhbGxlZCBhcyB0aGUgY29uZGl0aW9uIGluCisgKiB3YWl0X2V2ZW50XyooKSBuZWVkcyB0byBjb3BlIHdpdGggYmVpbmcgY2FsbGVkIG1hbnkgdGltZXMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX25leHRfaW5jb21pbmcoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19pbmNvbWluZyAqKmluYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCppbmMgPT0gTlVMTCkgeworCQlyZWFkX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCQlpZiAoIWxpc3RfZW1wdHkoJnJzLT5yc19yZWN2X3F1ZXVlKSkgeworCQkJKmluYyA9IGxpc3RfZW50cnkocnMtPnJzX3JlY3ZfcXVldWUubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcmRzX2luY29taW5nLAorCQkJCQkgIGlfaXRlbSk7CisJCQlyZHNfaW5jX2FkZHJlZigqaW5jKTsKKwkJfQorCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuICppbmMgIT0gTlVMTDsKK30KKworc3RhdGljIGludCByZHNfc3RpbGxfcXVldWVkKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJCSAgICBpbnQgZHJvcCkKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSByZHNfcnNfdG9fc2socnMpOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmluYy0+aV9pdGVtKSkgeworCQlyZXQgPSAxOworCQlpZiAoZHJvcCkgeworCQkJLyogWFhYIG1ha2Ugc3VyZSB0aGlzIGlfY29ubiBpcyByZWxpYWJsZSAqLworCQkJcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHJzLCBzaywgaW5jLT5pX2Nvbm4tPmNfbGNvbmcsCisJCQkJCSAgICAgIC1iZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSwKKwkJCQkJICAgICAgaW5jLT5pX2hkci5oX2Rwb3J0KTsKKwkJCWxpc3RfZGVsX2luaXQoJmluYy0+aV9pdGVtKTsKKwkJCXJkc19pbmNfcHV0KGluYyk7CisJCX0KKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKworCXJkc2RlYnVnKCJpbmMgJXAgcnMgJXAgc3RpbGwgJWQgZHJvcHBlZCAlZFxuIiwgaW5jLCBycywgcmV0LCBkcm9wKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHVsbCBlcnJvcnMgb2ZmIHRoZSBlcnJvciBxdWV1ZS4KKyAqIElmIG1zZ2hkciBpcyBOVUxMLCB3ZSB3aWxsIGp1c3QgcHVyZ2UgdGhlIGVycm9yIHF1ZXVlLgorICovCitpbnQgcmRzX25vdGlmeV9xdWV1ZV9nZXQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IG1zZ2hkciAqbXNnaGRyKQoreworCXN0cnVjdCByZHNfbm90aWZpZXIgKm5vdGlmaWVyOworCXN0cnVjdCByZHNfcmRtYV9ub3RpZnkgY21zZzsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwLCBtYXhfbWVzc2FnZXMgPSB+MFU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQoY29weSk7CisJaW50IGVyciA9IDA7CisKKworCS8qIHB1dF9jbXNnIGNvcGllcyB0byB1c2VyIHNwYWNlIGFuZCB0aHVzIG1heSBzbGVlcC4gV2UgY2FuJ3QgZG8gdGhpcworCSAqIHdpdGggcnNfbG9jayBoZWxkLCBzbyBmaXJzdCBncmFiIGFzIG1hbnkgbm90aWZpY2F0aW9ucyBhcyB3ZSBjYW4gc3R1ZmYKKwkgKiBpbiB0aGUgdXNlciBwcm92aWRlZCBjbXNnIGJ1ZmZlci4gV2UgZG9uJ3QgdHJ5IHRvIGNvcHkgbW9yZSwgdG8gYXZvaWQKKwkgKiBsb3Npbmcgbm90aWZpY2F0aW9ucyAtIGV4Y2VwdCB3aGVuIHRoZSBidWZmZXIgaXMgc28gc21hbGwgdGhhdCBpdCB3b3VsZG4ndAorCSAqIGV2ZW4gaG9sZCBhIHNpbmdsZSBub3RpZmljYXRpb24uIFRoZW4gd2UgZ2l2ZSBoaW0gYXMgbXVjaCBvZiB0aGlzIHNpbmdsZQorCSAqIG1zZyBhcyB3ZSBjYW4gc3F1ZWV6ZSBpbiwgYW5kIHNldCBNU0dfQ1RSVU5DLgorCSAqLworCWlmIChtc2doZHIpIHsKKwkJbWF4X21lc3NhZ2VzID0gbXNnaGRyLT5tc2dfY29udHJvbGxlbiAvIENNU0dfU1BBQ0Uoc2l6ZW9mKGNtc2cpKTsKKwkJaWYgKCFtYXhfbWVzc2FnZXMpCisJCQltYXhfbWVzc2FnZXMgPSAxOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmcnMtPnJzX25vdGlmeV9xdWV1ZSkgJiYgY291bnQgPCBtYXhfbWVzc2FnZXMpIHsKKwkJbm90aWZpZXIgPSBsaXN0X2VudHJ5KHJzLT5yc19ub3RpZnlfcXVldWUubmV4dCwKKwkJCQlzdHJ1Y3QgcmRzX25vdGlmaWVyLCBuX2xpc3QpOworCQlsaXN0X21vdmUoJm5vdGlmaWVyLT5uX2xpc3QsICZjb3B5KTsKKwkJY291bnQrKzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCWlmICghY291bnQpCisJCXJldHVybiAwOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjb3B5KSkgeworCQlub3RpZmllciA9IGxpc3RfZW50cnkoY29weS5uZXh0LCBzdHJ1Y3QgcmRzX25vdGlmaWVyLCBuX2xpc3QpOworCisJCWlmIChtc2doZHIpIHsKKwkJCWNtc2cudXNlcl90b2tlbiA9IG5vdGlmaWVyLT5uX3VzZXJfdG9rZW47CisJCQljbXNnLnN0YXR1cyAgPSBub3RpZmllci0+bl9zdGF0dXM7CisKKwkJCWVyciA9IHB1dF9jbXNnKG1zZ2hkciwgU09MX1JEUywgUkRTX0NNU0dfUkRNQV9TVEFUVVMsCisJCQkJCXNpemVvZihjbXNnKSwgJmNtc2cpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwkJfQorCisJCWxpc3RfZGVsX2luaXQoJm5vdGlmaWVyLT5uX2xpc3QpOworCQlrZnJlZShub3RpZmllcik7CisJfQorCisJLyogSWYgd2UgYmFpbGVkIG91dCBiZWNhdXNlIG9mIGFuIGVycm9yIGluIHB1dF9jbXNnLAorCSAqIHdlIG1heSBiZSBsZWZ0IHdpdGggb25lIG9yIG1vcmUgbm90aWZpY2F0aW9ucyB0aGF0IHdlCisJICogZGlkbid0IHByb2Nlc3MuIFJldHVybiB0aGVtIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiAqLworCWlmICghbGlzdF9lbXB0eSgmY29weSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJCWxpc3Rfc3BsaWNlKCZjb3B5LCAmcnMtPnJzX25vdGlmeV9xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFF1ZXVlIGEgY29uZ2VzdGlvbiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIGludCByZHNfbm90aWZ5X2Nvbmcoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IG1zZ2hkciAqbXNnaGRyKQoreworCXVpbnQ2NF90IG5vdGlmeSA9IHJzLT5yc19jb25nX25vdGlmeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwllcnIgPSBwdXRfY21zZyhtc2doZHIsIFNPTF9SRFMsIFJEU19DTVNHX0NPTkdfVVBEQVRFLAorCQkJc2l6ZW9mKG5vdGlmeSksICZub3RpZnkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwlycy0+cnNfY29uZ19ub3RpZnkgJj0gfm5vdGlmeTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWNlaXZlIGFueSBjb250cm9sIG1lc3NhZ2VzLgorICovCitzdGF0aWMgaW50IHJkc19jbXNnX3JlY3Yoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgbXNnaGRyICptc2cpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoaW5jLT5pX3JkbWFfY29va2llKSB7CisJCXJldCA9IHB1dF9jbXNnKG1zZywgU09MX1JEUywgUkRTX0NNU0dfUkRNQV9ERVNULAorCQkJCXNpemVvZihpbmMtPmlfcmRtYV9jb29raWUpLCAmaW5jLT5pX3JkbWFfY29va2llKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCByZHNfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJc2l6ZV90IHNpemUsIGludCBtc2dfZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJbG9uZyB0aW1lbzsKKwlpbnQgcmV0ID0gMCwgbm9uYmxvY2sgPSBtc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQ7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJc3RydWN0IHJkc19pbmNvbWluZyAqaW5jID0gTlVMTDsKKworCS8qIHVkcF9yZWN2bXNnKCktPnNvY2tfcmVjdnRpbWVvKCkgZ2V0cyBhd2F5IHdpdGhvdXQgbG9ja2luZyB0b28uLiAqLworCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgbm9uYmxvY2spOworCisJcmRzZGVidWcoInNpemUgJXp1IGZsYWdzIDB4JXggdGltZW8gJWxkXG4iLCBzaXplLCBtc2dfZmxhZ3MsIHRpbWVvKTsKKworCWlmIChtc2dfZmxhZ3MgJiBNU0dfT09CKQorCQlnb3RvIG91dDsKKworCS8qIElmIHRoZXJlIGFyZSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMsIGRvIHRob3NlIC0gYW5kIG5vdGhpbmcgZWxzZSAqLworCWlmICghbGlzdF9lbXB0eSgmcnMtPnJzX25vdGlmeV9xdWV1ZSkpIHsKKwkJcmV0ID0gcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIG1zZyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChycy0+cnNfY29uZ19ub3RpZnkpIHsKKwkJcmV0ID0gcmRzX25vdGlmeV9jb25nKHJzLCBtc2cpOworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlpZiAoIXJkc19uZXh0X2luY29taW5nKHJzLCAmaW5jKSkgeworCQkJaWYgKG5vbmJsb2NrKSB7CisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJdGltZW8gPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgqc2stPnNrX3NsZWVwLAorCQkJCQkJcmRzX25leHRfaW5jb21pbmcocnMsICZpbmMpLAorCQkJCQkJdGltZW8pOworCQkJcmRzZGVidWcoInJlY3Ztc2cgd29rZSBpbmMgJXAgdGltZW8gJWxkXG4iLCBpbmMsCisJCQkJIHRpbWVvKTsKKwkJCWlmICh0aW1lbyA+IDAgfHwgdGltZW8gPT0gTUFYX1NDSEVEVUxFX1RJTUVPVVQpCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IHRpbWVvOworCQkJaWYgKHJldCA9PSAwKQorCQkJCXJldCA9IC1FVElNRURPVVQ7CisJCQlicmVhazsKKwkJfQorCisJCXJkc2RlYnVnKCJjb3B5aW5nIGluYyAlcCBmcm9tICVwSTQ6JXUgdG8gdXNlclxuIiwgaW5jLAorCQkJICZpbmMtPmlfY29ubi0+Y19mYWRkciwKKwkJCSBudG9ocyhpbmMtPmlfaGRyLmhfc3BvcnQpKTsKKwkJcmV0ID0gaW5jLT5pX2Nvbm4tPmNfdHJhbnMtPmluY19jb3B5X3RvX3VzZXIoaW5jLCBtc2ctPm1zZ19pb3YsCisJCQkJCQkJICAgICBzaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKworCQkvKgorCQkgKiBpZiB0aGUgbWVzc2FnZSB3ZSBqdXN0IGNvcGllZCBpc24ndCBhdCB0aGUgaGVhZCBvZiB0aGUKKwkJICogcmVjdiBxdWV1ZSB0aGVuIHNvbWVvbmUgZWxzZSByYWNlZCB1cyB0byByZXR1cm4gaXQsIHRyeQorCQkgKiB0byBnZXQgdGhlIG5leHQgbWVzc2FnZS4KKwkJICovCisJCWlmICghcmRzX3N0aWxsX3F1ZXVlZChycywgaW5jLCAhKG1zZ19mbGFncyAmIE1TR19QRUVLKSkpIHsKKwkJCXJkc19pbmNfcHV0KGluYyk7CisJCQlpbmMgPSBOVUxMOworCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZGVsaXZlcl9yYWNlZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyZXQgPCBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSkgeworCQkJaWYgKG1zZ19mbGFncyAmIE1TR19UUlVOQykKKwkJCQlyZXQgPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKwkJCW1zZy0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKKwkJfQorCisJCWlmIChyZHNfY21zZ19yZWN2KGluYywgbXNnKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZGVsaXZlcmVkKTsKKworCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKKwkJaWYgKHNpbikgeworCQkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwkJCXNpbi0+c2luX3BvcnQgPSBpbmMtPmlfaGRyLmhfc3BvcnQ7CisJCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IGluYy0+aV9zYWRkcjsKKwkJCW1lbXNldChzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOworCQl9CisJCWJyZWFrOworCX0KKworCWlmIChpbmMpCisJCXJkc19pbmNfcHV0KGluYyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIHNvY2tldCBpcyBiZWluZyBzaHV0IGRvd24gYW5kIHdlJ3JlIGFza2VkIHRvIGRyb3AgbWVzc2FnZXMgdGhhdCB3ZXJlCisgKiBxdWV1ZWQgZm9yIHJlY3Ztc2cuICBUaGUgY2FsbGVyIGhhcyB1bmJvdW5kIHRoZSBzb2NrZXQgc28gdGhlIHJlY2VpdmUgcGF0aAorICogd29uJ3QgcXVldWUgYW55IG1vcmUgaW5jb21pbmcgZnJhZ21lbnRzIG9yIG1lc3NhZ2VzIG9uIHRoZSBzb2NrZXQuCisgKi8KK3ZvaWQgcmRzX2NsZWFyX3JlY3ZfcXVldWUoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSByZHNfcnNfdG9fc2socnMpOworCXN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGluYywgdG1wLCAmcnMtPnJzX3JlY3ZfcXVldWUsIGlfaXRlbSkgeworCQlyZHNfcmVjdl9yY3ZidWZfZGVsdGEocnMsIHNrLCBpbmMtPmlfY29ubi0+Y19sY29uZywKKwkJCQkgICAgICAtYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCQkJICAgICAgaW5jLT5pX2hkci5oX2Rwb3J0KTsKKwkJbGlzdF9kZWxfaW5pdCgmaW5jLT5pX2l0ZW0pOworCQlyZHNfaW5jX3B1dChpbmMpOworCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogaW5jLT5pX3NhZGRyIGlzbid0IHVzZWQgaGVyZSBiZWNhdXNlIGl0IGlzIG9ubHkgc2V0IGluIHRoZSByZWNlaXZlCisgKiBwYXRoLgorICovCit2b2lkIHJkc19pbmNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJICAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJICAgICAgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBpbnQgZmxpcCkKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSBtaW5mbzsKKworCW1pbmZvLnNlcSA9IGJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSk7CisJbWluZm8ubGVuID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisKKwlpZiAoZmxpcCkgeworCQltaW5mby5sYWRkciA9IGRhZGRyOworCQltaW5mby5mYWRkciA9IHNhZGRyOworCQltaW5mby5scG9ydCA9IGluYy0+aV9oZHIuaF9kcG9ydDsKKwkJbWluZm8uZnBvcnQgPSBpbmMtPmlfaGRyLmhfc3BvcnQ7CisJfSBlbHNlIHsKKwkJbWluZm8ubGFkZHIgPSBzYWRkcjsKKwkJbWluZm8uZmFkZHIgPSBkYWRkcjsKKwkJbWluZm8ubHBvcnQgPSBpbmMtPmlfaGRyLmhfc3BvcnQ7CisJCW1pbmZvLmZwb3J0ID0gaW5jLT5pX2hkci5oX2Rwb3J0OworCX0KKworCXJkc19pbmZvX2NvcHkoaXRlciwgJm1pbmZvLCBzaXplb2YobWluZm8pKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzNzM2NAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvc2VuZC5jCkBAIC0wLDAgKzEsMTAwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKworLyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbQorICogdGltZSB0byB0aW1lIGFuZCBicmllZmx5IHJlbGVhc2UgdGhlIENQVS4gT3RoZXJ3aXNlIHRoZSBzb2Z0bG9jayB3YXRjaGRvZworICogd2lsbCBraWNrIG91ciBzaGluLgorICogQWxzbywgaXQgc2VlbXMgZmFpcmVyIHRvIG5vdCBsZXQgb25lIGJ1c3kgY29ubmVjdGlvbiBzdGFsbCBhbGwgdGhlCisgKiBvdGhlcnMuCisgKgorICogc2VuZF9iYXRjaF9jb3VudCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlJ2xsIGxvb3AgaW4gc2VuZF94bWl0LiBTZXR0aW5nCisgKiBpdCB0byAwIHdpbGwgcmVzdG9yZSB0aGUgb2xkIGJlaGF2aW9yICh3aGVyZSB3ZSBsb29wZWQgdW50aWwgd2UgaGFkCisgKiBkcmFpbmVkIHRoZSBxdWV1ZSkuCisgKi8KK3N0YXRpYyBpbnQgc2VuZF9iYXRjaF9jb3VudCA9IDY0OworbW9kdWxlX3BhcmFtKHNlbmRfYmF0Y2hfY291bnQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNlbmRfYmF0Y2hfY291bnQsICIgYmF0Y2ggZmFjdG9yIHdoZW4gd29ya2luZyB0aGUgc2VuZCBxdWV1ZSIpOworCisvKgorICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuIENhbGxlciBtdXN0IGhvbGQgY19zZW5kX2xvY2sgd2hlbiBjYWxsaW5nIGhlcmUuCisgKi8KK3ZvaWQgcmRzX3NlbmRfcmVzZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjb25uLT5jX3htaXRfcm0pIHsKKwkJLyogVGVsbCB0aGUgdXNlciB0aGUgUkRNQSBvcCBpcyBubyBsb25nZXIgbWFwcGVkIGJ5IHRoZQorCQkgKiB0cmFuc3BvcnQuIFRoaXMgaXNuJ3QgZW50aXJlbHkgdHJ1ZSAoaXQncyBmbHVzaGVkIG91dAorCQkgKiBpbmRlcGVuZGVudGx5KSBidXQgYXMgdGhlIGNvbm5lY3Rpb24gaXMgZG93biwgdGhlcmUncworCQkgKiBubyBvbmdvaW5nIFJETUEgdG8vZnJvbSB0aGF0IG1lbW9yeSAqLworCQlyZHNfbWVzc2FnZV91bm1hcHBlZChjb25uLT5jX3htaXRfcm0pOworCQlyZHNfbWVzc2FnZV9wdXQoY29ubi0+Y194bWl0X3JtKTsKKwkJY29ubi0+Y194bWl0X3JtID0gTlVMTDsKKwl9CisJY29ubi0+Y194bWl0X3NnID0gMDsKKwljb25uLT5jX3htaXRfaGRyX29mZiA9IDA7CisJY29ubi0+Y194bWl0X2RhdGFfb2ZmID0gMDsKKwljb25uLT5jX3htaXRfcmRtYV9zZW50ID0gMDsKKworCWNvbm4tPmNfbWFwX3F1ZXVlZCA9IDA7CisKKwljb25uLT5jX3VuYWNrZWRfcGFja2V0cyA9IHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0czsKKwljb25uLT5jX3VuYWNrZWRfYnl0ZXMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX2J5dGVzOworCisJLyogTWFyayBtZXNzYWdlcyBhcyByZXRyYW5zbWlzc2lvbnMsIGFuZCBtb3ZlIHRoZW0gdG8gdGhlIHNlbmQgcSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJc2V0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKTsKKwkJc2V0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsICZybS0+bV9mbGFncyk7CisJfQorCWxpc3Rfc3BsaWNlX2luaXQoJmNvbm4tPmNfcmV0cmFucywgJmNvbm4tPmNfc2VuZF9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBXZSdyZSBtYWtpbmcgdGhlIGNvbmNpb3VzIHRyYWRlLW9mZiBoZXJlIHRvIG9ubHkgc2VuZCBvbmUgbWVzc2FnZQorICogZG93biB0aGUgY29ubmVjdGlvbiBhdCBhIHRpbWUuCisgKiAgIFBybzoKKyAqICAgICAgLSB0eCBxdWV1ZWluZyBpcyBhIHNpbXBsZSBmaWZvIGxpc3QKKyAqICAgCS0gcmVhc3NlbWJseSBpcyBvcHRpb25hbCBhbmQgZWFzaWx5IGRvbmUgYnkgdHJhbnNwb3J0cyBwZXIgY29ubgorICogICAgICAtIG5vIHBlciBmbG93IHJ4IGxvb2t1cCBhdCBhbGwsIHN0cmFpZ2h0IHRvIHRoZSBzb2NrZXQKKyAqICAgCS0gbGVzcyBwZXItZnJhZyBtZW1vcnkgYW5kIHdpcmUgb3ZlcmhlYWQKKyAqICAgQ29uOgorICogICAgICAtIHF1ZXVlZCBhY2tzIGNhbiBiZSBkZWxheWVkIGJlaGluZCBsYXJnZSBtZXNzYWdlcworICogICBEZXBlbmRzOgorICogICAgICAtIHNtYWxsIG1lc3NhZ2UgbGF0ZW5jeSBpcyBoaWdoZXIgYmVoaW5kIHF1ZXVlZCBsYXJnZSBtZXNzYWdlcworICogICAgICAtIGxhcmdlIG1lc3NhZ2UgbGF0ZW5jeSBpc24ndCBzdGFydmVkIGJ5IGludGVydmVuaW5nIHNtYWxsIHNlbmRzCisgKi8KK2ludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgc2VuZF9xdW90YSA9IHNlbmRfYmF0Y2hfY291bnQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgd2FzX2VtcHR5ID0gMDsKKwlMSVNUX0hFQUQodG9fYmVfZHJvcHBlZCk7CisKKwkvKgorCSAqIHNlbmRtc2cgY2FsbHMgaGVyZSBhZnRlciBoYXZpbmcgcXVldWVkIGl0cyBtZXNzYWdlIG9uIHRoZSBzZW5kCisJICogcXVldWUuICBXZSBvbmx5IGhhdmUgb25lIHRhc2sgZmVlZGluZyB0aGUgY29ubmVjdGlvbiBhdCBhIHRpbWUuICBJZgorCSAqIGFub3RoZXIgdGhyZWFkIGlzIGFscmVhZHkgZmVlZGluZyB0aGUgcXVldWUgdGhlbiB3ZSBiYWNrIG9mZi4gIFRoaXMKKwkgKiBhdm9pZHMgYmxvY2tpbmcgdGhlIGNhbGxlciBhbmQgdHJhZGluZyBwZXItY29ubmVjdGlvbiBkYXRhIGJldHdlZW4KKwkgKiBjYWNoZXMgcGVyIG1lc3NhZ2UuCisJICoKKwkgKiBUaGUgc2VtIGhvbGRlciB3aWxsIGlzc3VlIGEgcmV0cnkgaWYgdGhleSBub3RpY2UgdGhhdCBzb21lb25lIHF1ZXVlZAorCSAqIGEgbWVzc2FnZSBhZnRlciB0aGV5IHN0b3BwZWQgd2Fsa2luZyB0aGUgc2VuZCBxdWV1ZSBidXQgYmVmb3JlIHRoZXkKKwkgKiBkcm9wcGVkIHRoZSBzZW0uCisJICovCisJaWYgKCFtdXRleF90cnlsb2NrKCZjb25uLT5jX3NlbmRfbG9jaykpIHsKKwkJcmRzX3N0YXRzX2luYyhzX3NlbmRfc2VtX2NvbnRlbnRpb24pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY29ubi0+Y190cmFucy0+eG1pdF9wcmVwYXJlKQorCQljb25uLT5jX3RyYW5zLT54bWl0X3ByZXBhcmUoY29ubik7CisKKwkvKgorCSAqIHNwaW4gdHJ5aW5nIHRvIHB1c2ggaGVhZGVycyBhbmQgZGF0YSBkb3duIHRoZSBjb25uZWN0aW9uIHVudGlsCisJICogdGhlIGNvbm5lY3Rpb24gZG9lbnMndCBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuCisJICovCisJd2hpbGUgKC0tc2VuZF9xdW90YSkgeworCQkvKgorCQkgKiBTZWUgaWYgbmVlZCB0byBzZW5kIGEgY29uZ2VzdGlvbiBtYXAgdXBkYXRlIGlmIHdlJ3JlCisJCSAqIGJldHdlZW4gc2VuZGluZyBtZXNzYWdlcy4gIFRoZSBzZW5kX3NlbSBwcm90ZWN0cyBvdXIgc29sZQorCQkgKiB1c2Ugb2YgY19tYXBfb2Zmc2V0IGFuZCBfYnl0ZXMuCisJCSAqIE5vdGUgdGhpcyBpcyB1c2VkIG9ubHkgYnkgdHJhbnNwb3J0cyB0aGF0IGRlZmluZSBhIHNwZWNpYWwKKwkJICogeG1pdF9jb25nX21hcCBmdW5jdGlvbi4gRm9yIGFsbCBvdGhlcnMsIHdlIGNyZWF0ZSBhbGxvY2F0ZQorCQkgKiBhIGNvbmdfbWFwIG1lc3NhZ2UgYW5kIHRyZWF0IGl0IGp1c3QgbGlrZSBhbnkgb3RoZXIgc2VuZC4KKwkJICovCisJCWlmIChjb25uLT5jX21hcF9ieXRlcykgeworCQkJcmV0ID0gY29ubi0+Y190cmFucy0+eG1pdF9jb25nX21hcChjb25uLCBjb25uLT5jX2xjb25nLAorCQkJCQkJY29ubi0+Y19tYXBfb2Zmc2V0KTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKworCQkJY29ubi0+Y19tYXBfb2Zmc2V0ICs9IHJldDsKKwkJCWNvbm4tPmNfbWFwX2J5dGVzIC09IHJldDsKKwkJCWlmIChjb25uLT5jX21hcF9ieXRlcykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIElmIHdlJ3JlIGRvbmUgc2VuZGluZyB0aGUgY3VycmVudCBtZXNzYWdlLCBjbGVhciB0aGUKKwkJICogb2Zmc2V0IGFuZCBTL0cgdGVtcG9yYXJpZXMuCisJCSAqLworCQlybSA9IGNvbm4tPmNfeG1pdF9ybTsKKwkJaWYgKHJtICE9IE5VTEwgJiYKKwkJICAgIGNvbm4tPmNfeG1pdF9oZHJfb2ZmID09IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgJiYKKwkJICAgIGNvbm4tPmNfeG1pdF9zZyA9PSBybS0+bV9uZW50cykgeworCQkJY29ubi0+Y194bWl0X3JtID0gTlVMTDsKKwkJCWNvbm4tPmNfeG1pdF9zZyA9IDA7CisJCQljb25uLT5jX3htaXRfaGRyX29mZiA9IDA7CisJCQljb25uLT5jX3htaXRfZGF0YV9vZmYgPSAwOworCQkJY29ubi0+Y194bWl0X3JkbWFfc2VudCA9IDA7CisKKwkJCS8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgbWVzc2FnZS4gKi8KKwkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCQlybSA9IE5VTEw7CisJCX0KKworCQkvKiBJZiB3ZSdyZSBhc2tlZCB0byBzZW5kIGEgY29uZyBtYXAgdXBkYXRlLCBkbyBzby4KKwkJICovCisJCWlmIChybSA9PSBOVUxMICYmIHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkgeworCQkJaWYgKGNvbm4tPmNfdHJhbnMtPnhtaXRfY29uZ19tYXAgIT0gTlVMTCkgeworCQkJCWNvbm4tPmNfbWFwX29mZnNldCA9IDA7CisJCQkJY29ubi0+Y19tYXBfYnl0ZXMgPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICsKKwkJCQkJUkRTX0NPTkdfTUFQX0JZVEVTOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlybSA9IHJkc19jb25nX3VwZGF0ZV9hbGxvYyhjb25uKTsKKwkJCWlmIChJU19FUlIocm0pKSB7CisJCQkJcmV0ID0gUFRSX0VSUihybSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWNvbm4tPmNfeG1pdF9ybSA9IHJtOworCQl9CisKKwkJLyoKKwkJICogR3JhYiB0aGUgbmV4dCBtZXNzYWdlIGZyb20gdGhlIHNlbmQgcXVldWUsIGlmIHRoZXJlIGlzIG9uZS4KKwkJICoKKwkJICogY194bWl0X3JtIGhvbGRzIGEgcmVmIHdoaWxlIHdlJ3JlIHNlbmRpbmcgdGhpcyBtZXNzYWdlIGRvd24KKwkJICogdGhlIGNvbm5jdGlvbi4gIFdlIGNhbiB1c2UgdGhpcyByZWYgd2hpbGUgaG9sZGluZyB0aGUKKwkJICogc2VuZF9zZW0uLiByZHNfc2VuZF9yZXNldCgpIGlzIHNlcmlhbGl6ZWQgd2l0aCBpdC4KKwkJICovCisJCWlmIChybSA9PSBOVUxMKSB7CisJCQl1bnNpZ25lZCBpbnQgbGVuOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwkJCWlmICghbGlzdF9lbXB0eSgmY29ubi0+Y19zZW5kX3F1ZXVlKSkgeworCQkJCXJtID0gbGlzdF9lbnRyeShjb25uLT5jX3NlbmRfcXVldWUubmV4dCwKKwkJCQkJCXN0cnVjdCByZHNfbWVzc2FnZSwKKwkJCQkJCW1fY29ubl9pdGVtKTsKKwkJCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCisJCQkJLyoKKwkJCQkgKiBNb3ZlIHRoZSBtZXNzYWdlIGZyb20gdGhlIHNlbmQgcXVldWUgdG8gdGhlIHJldHJhbnNtaXQKKwkJCQkgKiBsaXN0IHJpZ2h0IGF3YXkuCisJCQkJICovCisJCQkJbGlzdF9tb3ZlX3RhaWwoJnJtLT5tX2Nvbm5faXRlbSwgJmNvbm4tPmNfcmV0cmFucyk7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocm0gPT0gTlVMTCkgeworCQkJCXdhc19lbXB0eSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIFVuZm9ydHVuYXRlbHksIHRoZSB3YXkgSW5maW5pYmFuZCBkZWFscyB3aXRoCisJCQkgKiBSRE1BIHRvIGEgYmFkIE1SIGtleSBpcyBieSBtb3ZpbmcgdGhlIGVudGlyZQorCQkJICogcXVldWUgcGFpciB0byBlcnJvciBzdGF0ZS4gV2UgY29sZCBwb3NzaWJseQorCQkJICogcmVjb3ZlciBmcm9tIHRoYXQsIGJ1dCByaWdodCBub3cgd2UgZHJvcCB0aGUKKwkJCSAqIGNvbm5lY3Rpb24uCisJCQkgKiBUaGVyZWZvcmUsIHdlIG5ldmVyIHJldHJhbnNtaXQgbWVzc2FnZXMgd2l0aCBSRE1BIG9wcy4KKwkJCSAqLworCQkJaWYgKHJtLT5tX3JkbWFfb3AKKwkJCSAmJiB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsICZybS0+bV9mbGFncykpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncykpCisJCQkJCWxpc3RfbW92ZSgmcm0tPm1fY29ubl9pdGVtLCAmdG9fYmVfZHJvcHBlZCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogUmVxdWlyZSBhbiBBQ0sgZXZlcnkgb25jZSBpbiBhIHdoaWxlICovCisJCQlsZW4gPSBudG9obChybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCQkJaWYgKGNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzID09IDAKKwkJCSB8fCBjb25uLT5jX3VuYWNrZWRfYnl0ZXMgPCBsZW4pIHsKKwkJCQlfX3NldF9iaXQoUkRTX01TR19BQ0tfUkVRVUlSRUQsICZybS0+bV9mbGFncyk7CisKKwkJCQljb25uLT5jX3VuYWNrZWRfcGFja2V0cyA9IHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0czsKKwkJCQljb25uLT5jX3VuYWNrZWRfYnl0ZXMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX2J5dGVzOworCQkJCXJkc19zdGF0c19pbmMoc19zZW5kX2Fja19yZXF1aXJlZCk7CisJCQl9IGVsc2UgeworCQkJCWNvbm4tPmNfdW5hY2tlZF9ieXRlcyAtPSBsZW47CisJCQkJY29ubi0+Y191bmFja2VkX3BhY2tldHMtLTsKKwkJCX0KKworCQkJY29ubi0+Y194bWl0X3JtID0gcm07CisJCX0KKworCQkvKgorCQkgKiBUcnkgYW5kIHNlbmQgYW4gcmRtYSBtZXNzYWdlLiAgTGV0J3Mgc2VlIGlmIHdlIGNhbgorCQkgKiBrZWVwIHRoaXMgc2ltcGxlIGFuZCByZXF1aXJlIHRoYXQgdGhlIHRyYW5zcG9ydCBlaXRoZXIKKwkJICogc2VuZCB0aGUgd2hvbGUgcmRtYSBvciBub25lIG9mIGl0LgorCQkgKi8KKwkJaWYgKHJtLT5tX3JkbWFfb3AgJiYgIWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQpIHsKKwkJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnhtaXRfcmRtYShjb25uLCBybS0+bV9yZG1hX29wKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCQljb25uLT5jX3htaXRfcmRtYV9zZW50ID0gMTsKKwkJCS8qIFRoZSB0cmFuc3BvcnQgb3ducyB0aGUgbWFwcGVkIG1lbW9yeSBmb3Igbm93LgorCQkJICogWW91IGNhbid0IHVubWFwIGl0IHdoaWxlIGl0J3Mgb24gdGhlIHNlbmQgcXVldWUgKi8KKwkJCXNldF9iaXQoUkRTX01TR19NQVBQRUQsICZybS0+bV9mbGFncyk7CisJCX0KKworCQlpZiAoY29ubi0+Y194bWl0X2hkcl9vZmYgPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpIHx8CisJCSAgICBjb25uLT5jX3htaXRfc2cgPCBybS0+bV9uZW50cykgeworCQkJcmV0ID0gY29ubi0+Y190cmFucy0+eG1pdChjb25uLCBybSwKKwkJCQkJCSAgY29ubi0+Y194bWl0X2hkcl9vZmYsCisJCQkJCQkgIGNvbm4tPmNfeG1pdF9zZywKKwkJCQkJCSAgY29ubi0+Y194bWl0X2RhdGFfb2ZmKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKworCQkJaWYgKGNvbm4tPmNfeG1pdF9oZHJfb2ZmIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCQkJCXRtcCA9IG1pbl90KGludCwgcmV0LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSAtCisJCQkJCSAgICBjb25uLT5jX3htaXRfaGRyX29mZik7CisJCQkJY29ubi0+Y194bWl0X2hkcl9vZmYgKz0gdG1wOworCQkJCXJldCAtPSB0bXA7CisJCQl9CisKKwkJCXNnID0gJnJtLT5tX3NnW2Nvbm4tPmNfeG1pdF9zZ107CisJCQl3aGlsZSAocmV0KSB7CisJCQkJdG1wID0gbWluX3QoaW50LCByZXQsIHNnLT5sZW5ndGggLQorCQkJCQkJICAgICAgY29ubi0+Y194bWl0X2RhdGFfb2ZmKTsKKwkJCQljb25uLT5jX3htaXRfZGF0YV9vZmYgKz0gdG1wOworCQkJCXJldCAtPSB0bXA7CisJCQkJaWYgKGNvbm4tPmNfeG1pdF9kYXRhX29mZiA9PSBzZy0+bGVuZ3RoKSB7CisJCQkJCWNvbm4tPmNfeG1pdF9kYXRhX29mZiA9IDA7CisJCQkJCXNnKys7CisJCQkJCWNvbm4tPmNfeG1pdF9zZysrOworCQkJCQlCVUdfT04ocmV0ICE9IDAgJiYKKwkJCQkJICAgICAgIGNvbm4tPmNfeG1pdF9zZyA9PSBybS0+bV9uZW50cyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogTnVrZSBhbnkgbWVzc2FnZXMgd2UgZGVjaWRlZCBub3QgdG8gcmV0cmFuc21pdC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnRvX2JlX2Ryb3BwZWQpKQorCQlyZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKCZ0b19iZV9kcm9wcGVkLCBSRFNfUkRNQV9EUk9QUEVEKTsKKworCWlmIChjb25uLT5jX3RyYW5zLT54bWl0X2NvbXBsZXRlKQorCQljb25uLT5jX3RyYW5zLT54bWl0X2NvbXBsZXRlKGNvbm4pOworCisJLyoKKwkgKiBXZSBtaWdodCBiZSByYWNpbmcgd2l0aCBhbm90aGVyIHNlbmRlciB3aG8gcXVldWVkIGEgbWVzc2FnZSBidXQKKwkgKiBiYWNrZWQgb2ZmIG9uIG5vdGljaW5nIHRoYXQgd2UgaGVsZCB0aGUgY19zZW5kX2xvY2suICBJZiB3ZSBjaGVjaworCSAqIGZvciBxdWV1ZWQgbWVzc2FnZXMgYWZ0ZXIgZHJvcHBpbmcgdGhlIHNlbSB0aGVuIGVpdGhlciB3ZSdsbAorCSAqIHNlZSB0aGUgcXVldWVkIG1lc3NhZ2Ugb3IgdGhlIHF1ZXVlciB3aWxsIGdldCB0aGUgc2VtLiAgSWYgd2UKKwkgKiBub3RpY2UgdGhlIHF1ZXVlZCBtZXNzYWdlIHRoZW4gd2UgdHJpZ2dlciBhbiBpbW1lZGlhdGUgcmV0cnkuCisJICoKKwkgKiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgb25seSB0byBkbyB0aGlzIHdoZW4gd2Ugc3RvcHBlZCBwcm9jZXNzaW5nCisJICogdGhlIHNlbmQgcXVldWUgYmVjYXVzZSBpdCB3YXMgZW1wdHkuICBJdCdzIHRoZSBvbmx5IHdheSB3ZQorCSAqIHN0b3AgcHJvY2Vzc2luZyB0aGUgbG9vcCB3aGVuIHRoZSB0cmFuc3BvcnQgaGFzbid0IHRha2VuCisJICogcmVzcG9uc2liaWxpdHkgZm9yIGZvcndhcmQgcHJvZ3Jlc3MuCisJICovCisJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisKKwlpZiAoY29ubi0+Y19tYXBfYnl0ZXMgfHwgKHNlbmRfcXVvdGEgPT0gMCAmJiAhd2FzX2VtcHR5KSkgeworCQkvKiBXZSBleGhhdXN0ZWQgdGhlIHNlbmQgcXVvdGEsIGJ1dCB0aGVyZSdzIHdvcmsgbGVmdCB0bworCQkgKiBkby4gUmV0dXJuIGFuZCAocmUtKXNjaGVkdWxlIHRoZSBzZW5kIHdvcmtlci4KKwkJICovCisJCXJldCA9IC1FQUdBSU47CisJfQorCisJaWYgKHJldCA9PSAwICYmIHdhc19lbXB0eSkgeworCQkvKiBBIHNpbXBsZSBiaXQgdGVzdCB3b3VsZCBiZSB3YXkgZmFzdGVyIHRoYW4gdGFraW5nIHRoZQorCQkgKiBzcGluIGxvY2sgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQlpZiAoIWxpc3RfZW1wdHkoJmNvbm4tPmNfc2VuZF9xdWV1ZSkpIHsKKwkJCXJkc19zdGF0c19pbmMoc19zZW5kX3NlbV9xdWV1ZV9yYWNlZCk7CisJCQlyZXQgPSAtRUFHQUlOOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfc2VuZF9zbmRidWZfcmVtb3ZlKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJdTMyIGxlbiA9IGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbik7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJzLT5yc19sb2NrKTsKKworCUJVR19PTihycy0+cnNfc25kX2J5dGVzIDwgbGVuKTsKKwlycy0+cnNfc25kX2J5dGVzIC09IGxlbjsKKworCWlmIChycy0+cnNfc25kX2J5dGVzID09IDApCisJCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlX2VtcHR5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmRzX3NlbmRfaXNfYWNrZWQoc3RydWN0IHJkc19tZXNzYWdlICpybSwgdTY0IGFjaywKKwkJCQkgICAgaXNfYWNrZWRfZnVuYyBpc19hY2tlZCkKK3sKKwlpZiAoaXNfYWNrZWQpCisJCXJldHVybiBpc19hY2tlZChybSwgYWNrKTsKKwlyZXR1cm4gYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpIDw9IGFjazsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgb24gdGhlIHNlbmQgYW5kIHJldHJhbnNtaXQgcXVldWVzCisgKiB3aGljaCBoYXZlIGEgc2VxdWVuY2UgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gc2VxdWVuY2UKKyAqIG51bWJlci4KKyAqLworaW50IHJkc19zZW5kX2Fja2VkX2JlZm9yZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHU2NCBzZXEpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwlpbnQgcmV0ID0gMTsKKworCXNwaW5fbG9jaygmY29ubi0+Y19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19yZXRyYW5zLCBtX2Nvbm5faXRlbSkgeworCQlpZiAoYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpIDwgc2VxKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3NlbmRfcXVldWUsIG1fY29ubl9pdGVtKSB7CisJCWlmIChiZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSkgPCBzZXEpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9jaygmY29ubi0+Y19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIHByZXR0eSBzaW1pbGFyIHRvIHdoYXQgaGFwcGVucyBiZWxvdyBpbiB0aGUgQUNLCisgKiBoYW5kbGluZyBjb2RlIC0gZXhjZXB0IHRoYXQgd2UgY2FsbCBoZXJlIGFzIHNvb24gYXMgd2UgZ2V0CisgKiB0aGUgSUIgc2VuZCBjb21wbGV0aW9uIG9uIHRoZSBSRE1BIG9wIGFuZCB0aGUgYWNjb21wYW55aW5nCisgKiBtZXNzYWdlLgorICovCit2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJvOworCXN0cnVjdCByZHNfbm90aWZpZXIgKm5vdGlmaWVyOworCisJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKworCXJvID0gcm0tPm1fcmRtYV9vcDsKKwlpZiAodGVzdF9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpCisJICYmIHJvICYmIHJvLT5yX25vdGlmeSAmJiByby0+cl9ub3RpZmllcikgeworCQlub3RpZmllciA9IHJvLT5yX25vdGlmaWVyOworCQlycyA9IHJtLT5tX3JzOworCQlzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7CisKKwkJbm90aWZpZXItPm5fc3RhdHVzID0gc3RhdHVzOworCQlzcGluX2xvY2soJnJzLT5yc19sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmbm90aWZpZXItPm5fbGlzdCwgJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCisJCXJvLT5yX25vdGlmaWVyID0gTlVMTDsKKwl9CisKKwlzcGluX3VubG9jaygmcm0tPm1fcnNfbG9jayk7CisKKwlpZiAocnMpIHsKKwkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHJkc19yZG1hX3NlbmRfY29tcGxldGUgZXhjZXB0IHdlCisgKiBkb24ndCBkbyBhbnkgbG9ja2luZyAtIHdlIGhhdmUgYWxsIHRoZSBpbmdyZWRpZW50cyAobWVzc2FnZSwKKyAqIHNvY2tldCwgc29ja2V0IGxvY2spIGFuZCBjYW4ganVzdCBtb3ZlIHRoZSBub3RpZmllci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX3Jkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJvOworCisJcm8gPSBybS0+bV9yZG1hX29wOworCWlmIChybyAmJiByby0+cl9ub3RpZnkgJiYgcm8tPnJfbm90aWZpZXIpIHsKKwkJcm8tPnJfbm90aWZpZXItPm5fc3RhdHVzID0gc3RhdHVzOworCQlsaXN0X2FkZF90YWlsKCZyby0+cl9ub3RpZmllci0+bl9saXN0LCAmcnMtPnJzX25vdGlmeV9xdWV1ZSk7CisJCXJvLT5yX25vdGlmaWVyID0gTlVMTDsKKwl9CisKKwkvKiBObyBuZWVkIHRvIHdha2UgdGhlIGFwcCAtIGNhbGxlciBkb2VzIHRoaXMgKi8KK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIElCIHNlbmQgY29tcGxldGlvbiB3aGVuIHdlIGRldGVjdAorICogYSBSRE1BIG9wZXJhdGlvbiB0aGF0IGZhaWxlZCB3aXRoIHJlbW90ZSBhY2Nlc3MgZXJyb3IuCisgKiBTbyBzcGVlZCBpcyBub3QgYW4gaXNzdWUgaGVyZS4KKyAqLworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfc2VuZF9nZXRfbWVzc2FnZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJCSBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXAsICpmb3VuZCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19yZXRyYW5zLCBtX2Nvbm5faXRlbSkgeworCQlpZiAocm0tPm1fcmRtYV9vcCA9PSBvcCkgeworCQkJYXRvbWljX2luYygmcm0tPm1fcmVmY291bnQpOworCQkJZm91bmQgPSBybTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3NlbmRfcXVldWUsIG1fY29ubl9pdGVtKSB7CisJCWlmIChybS0+bV9yZG1hX29wID09IG9wKSB7CisJCQlhdG9taWNfaW5jKCZybS0+bV9yZWZjb3VudCk7CisJCQlmb3VuZCA9IHJtOworCQkJYnJlYWs7CisJCX0KKwl9CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBmb3VuZDsKK30KKworLyoKKyAqIFRoaXMgcmVtb3ZlcyBtZXNzYWdlcyBmcm9tIHRoZSBzb2NrZXQncyBsaXN0IGlmIHRoZXkncmUgb24gaXQuICBUaGUgbGlzdAorICogYXJndW1lbnQgbXVzdCBiZSBwcml2YXRlIHRvIHRoZSBjYWxsZXIsIHdlIG11c3QgYmUgYWJsZSB0byBtb2RpZnkgaXQKKyAqIHdpdGhvdXQgbG9ja3MuICBUaGUgbWVzc2FnZXMgbXVzdCBoYXZlIGEgcmVmZXJlbmNlIGhlbGQgZm9yIHRoZWlyCisgKiBwb3NpdGlvbiBvbiB0aGUgbGlzdC4gIFRoaXMgZnVuY3Rpb24gd2lsbCBkcm9wIHRoYXQgcmVmZXJlbmNlIGFmdGVyCisgKiByZW1vdmluZyB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgJ21lc3NhZ2VzJyBsaXN0IHJlZ2FyZGxlc3Mgb2YgaWYgaXQgZm91bmQKKyAqIHRoZSBtZXNzYWdlcyBvbiB0aGUgc29ja2V0IGxpc3Qgb3Igbm90LgorICovCit2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7IC8qIHNpbGVuY2UgZ2NjIDpQICovCisJc3RydWN0IHJkc19zb2NrICpycyA9IE5VTEw7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkobWVzc2FnZXMpKSB7CisJCXJtID0gbGlzdF9lbnRyeShtZXNzYWdlcy0+bmV4dCwgc3RydWN0IHJkc19tZXNzYWdlLAorCQkJCW1fY29ubl9pdGVtKTsKKwkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fY29ubl9pdGVtKTsKKworCQkvKgorCQkgKiBJZiB3ZSBzZWUgdGhpcyBmbGFnIGNsZWFyZWQgdGhlbiB3ZSdyZSAqc3VyZSogdGhhdCBzb21lb25lCisJCSAqIGVsc2UgYmVhdCB1cyB0byByZW1vdmluZyBpdCBmcm9tIHRoZSBzb2NrLiAgSWYgd2UgcmFjZQorCQkgKiB3aXRoIHRoZWlyIGZsYWcgdXBkYXRlIHdlJ2xsIGdldCB0aGUgbG9jayBhbmQgdGhlbiByZWFsbHkKKwkJICogc2VlIHRoYXQgdGhlIGZsYWcgaGFzIGJlZW4gY2xlYXJlZC4KKwkJICoKKwkJICogVGhlIG1lc3NhZ2Ugc3BpbmxvY2sgbWFrZXMgc3VyZSBub2JvZHkgY2xlYXJzIHJtLT5tX3JzCisJCSAqIHdoaWxlIHdlJ3JlIG1lc3Npbmcgd2l0aCBpdC4gSXQgZG9lcyBub3QgcHJldmVudCB0aGUKKwkJICogbWVzc2FnZSBmcm9tIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgc29ja2V0LCB0aG91Z2guCisJCSAqLworCQlzcGluX2xvY2soJnJtLT5tX3JzX2xvY2spOworCQlpZiAoIXRlc3RfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKSkKKwkJCWdvdG8gdW5sb2NrX2FuZF9kcm9wOworCisJCWlmIChycyAhPSBybS0+bV9ycykgeworCQkJaWYgKHJzKSB7CisJCQkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKwkJCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCQkJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7CisJCQl9CisJCQlycyA9IHJtLT5tX3JzOworCQkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCQlzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7CisJCX0KKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKSkgeworCQkJc3RydWN0IHJkc19yZG1hX29wICpybyA9IHJtLT5tX3JkbWFfb3A7CisJCQlzdHJ1Y3QgcmRzX25vdGlmaWVyICpub3RpZmllcjsKKworCQkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fc29ja19pdGVtKTsKKwkJCXJkc19zZW5kX3NuZGJ1Zl9yZW1vdmUocnMsIHJtKTsKKworCQkJaWYgKHJvICYmIHJvLT5yX25vdGlmaWVyCisJCQkgICAmJiAoc3RhdHVzIHx8IHJvLT5yX25vdGlmeSkpIHsKKwkJCQlub3RpZmllciA9IHJvLT5yX25vdGlmaWVyOworCQkJCWxpc3RfYWRkX3RhaWwoJm5vdGlmaWVyLT5uX2xpc3QsCisJCQkJCQkmcnMtPnJzX25vdGlmeV9xdWV1ZSk7CisJCQkJaWYgKCFub3RpZmllci0+bl9zdGF0dXMpCisJCQkJCW5vdGlmaWVyLT5uX3N0YXR1cyA9IHN0YXR1czsKKwkJCQlybS0+bV9yZG1hX29wLT5yX25vdGlmaWVyID0gTlVMTDsKKwkJCX0KKwkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCQlybS0+bV9ycyA9IE5VTEw7CisJCX0KKwordW5sb2NrX2FuZF9kcm9wOgorCQlzcGluX3VubG9jaygmcm0tPm1fcnNfbG9jayk7CisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJfQorCisJaWYgKHJzKSB7CisJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFRyYW5zcG9ydHMgY2FsbCBoZXJlIHdoZW4gdGhleSd2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIHJlY2VpdmVyIHF1ZXVlZAorICogbWVzc2FnZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBnaXZlbiBzZXF1ZW5jZSBudW1iZXIuICBNZXNzYWdlcyBhcmUKKyAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZAorICogcXVldWUuIFRoaXMgbWVhbnMgdGhhdCBpbiB0aGUgVENQIGNhc2UsIHRoZSBtZXNzYWdlIG1heSBub3QgaGF2ZSBiZWVuCisgKiBhc3NpZ25lZCB0aGUgbV9hY2tfc2VxIHlldCAtIGJ1dCB0aGF0J3MgZmluZSBhcyBsb25nIGFzIHRjcF9pc19hY2tlZAorICogY2hlY2tzIHRoZSBSRFNfTVNHX0hBU19BQ0tfU0VRIGJpdC4KKyAqCisgKiBYWFggSXQncyBub3QgY2xlYXIgdG8gbWUgaG93IHRoaXMgaXMgc2FmZWx5IHNlcmlhbGl6ZWQgd2l0aCBzb2NrZXQKKyAqIGRlc3RydWN0aW9uLiAgTWF5YmUgaXQgc2hvdWxkIGJhaWwgaWYgaXQgc2VlcyBTT0NLX0RFQUQuCisgKi8KK3ZvaWQgcmRzX3NlbmRfZHJvcF9hY2tlZChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHU2NCBhY2ssCisJCQkgaXNfYWNrZWRfZnVuYyBpc19hY2tlZCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGxpc3QpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCWlmICghcmRzX3NlbmRfaXNfYWNrZWQocm0sIGFjaywgaXNfYWNrZWQpKQorCQkJYnJlYWs7CisKKwkJbGlzdF9tb3ZlKCZybS0+bV9jb25uX2l0ZW0sICZsaXN0KTsKKwkJY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKTsKKwl9CisKKwkvKiBvcmRlciBmbGFnIHVwZGF0ZXMgd2l0aCBzcGluIGxvY2tzICovCisJaWYgKCFsaXN0X2VtcHR5KCZsaXN0KSkKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJLyogbm93IHJlbW92ZSB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgc29jayBsaXN0IGFzIG5lZWRlZCAqLworCXJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soJmxpc3QsIFJEU19SRE1BX1NVQ0NFU1MpOworfQorCit2b2lkIHJkc19zZW5kX2Ryb3BfdG8oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2thZGRyX2luICpkZXN0KQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGxpc3QpOworCWludCB3YWtlID0gMDsKKworCS8qIGdldCBhbGwgdGhlIG1lc3NhZ2VzIHdlJ3JlIGRyb3BwaW5nIHVuZGVyIHRoZSBycyBsb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJnJzLT5yc19zZW5kX3F1ZXVlLCBtX3NvY2tfaXRlbSkgeworCQlpZiAoZGVzdCAmJiAoZGVzdC0+c2luX2FkZHIuc19hZGRyICE9IHJtLT5tX2RhZGRyIHx8CisJCQkgICAgIGRlc3QtPnNpbl9wb3J0ICE9IHJtLT5tX2luYy5pX2hkci5oX2Rwb3J0KSkKKwkJCWNvbnRpbnVlOworCisJCXdha2UgPSAxOworCQlsaXN0X21vdmUoJnJtLT5tX3NvY2tfaXRlbSwgJmxpc3QpOworCQlyZHNfc2VuZF9zbmRidWZfcmVtb3ZlKHJzLCBybSk7CisJCWNsZWFyX2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncyk7CisKKwkJLyogSWYgdGhpcyBpcyBhIFJETUEgb3BlcmF0aW9uLCBub3RpZnkgdGhlIGFwcC4gKi8KKwkJX19yZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHJzLCBybSwgUkRTX1JETUFfQ0FOQ0VMRUQpOworCX0KKworCS8qIG9yZGVyIGZsYWcgdXBkYXRlcyB3aXRoIHRoZSBycyBsb2NrICovCisJaWYgKHdha2UpCisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJaWYgKHdha2UpCisJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKworCWNvbm4gPSBOVUxMOworCisJLyogbm93IHJlbW92ZSB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgY29ubiBsaXN0IGFzIG5lZWRlZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocm0sICZsaXN0LCBtX3NvY2tfaXRlbSkgeworCQkvKiBXZSBkbyB0aGlzIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIGxvb3AgYWJvdmUsIHNvIHRoYXQKKwkJICogd2UgZG9uJ3QgaGF2ZSB0byBuZXN0IG1fcnNfbG9jayB1bmRlciBycy0+cnNfbG9jayAqLworCQlzcGluX2xvY2soJnJtLT5tX3JzX2xvY2spOworCQlybS0+bV9ycyA9IE5VTEw7CisJCXNwaW5fdW5sb2NrKCZybS0+bV9yc19sb2NrKTsKKworCQkvKgorCQkgKiBJZiB3ZSBzZWUgdGhpcyBmbGFnIGNsZWFyZWQgdGhlbiB3ZSdyZSAqc3VyZSogdGhhdCBzb21lb25lCisJCSAqIGVsc2UgYmVhdCB1cyB0byByZW1vdmluZyBpdCBmcm9tIHRoZSBjb25uLiAgSWYgd2UgcmFjZQorCQkgKiB3aXRoIHRoZWlyIGZsYWcgdXBkYXRlIHdlJ2xsIGdldCB0aGUgbG9jayBhbmQgdGhlbiByZWFsbHkKKwkJICogc2VlIHRoYXQgdGhlIGZsYWcgaGFzIGJlZW4gY2xlYXJlZC4KKwkJICovCisJCWlmICghdGVzdF9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbm4gIT0gcm0tPm1faW5jLmlfY29ubikgeworCQkJaWYgKGNvbm4pCisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCQljb25uID0gcm0tPm1faW5jLmlfY29ubjsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJfQorCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpKSB7CisJCQlsaXN0X2RlbF9pbml0KCZybS0+bV9jb25uX2l0ZW0pOworCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJfQorCX0KKworCWlmIChjb25uKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKKwkJcm0gPSBsaXN0X2VudHJ5KGxpc3QubmV4dCwgc3RydWN0IHJkc19tZXNzYWdlLCBtX3NvY2tfaXRlbSk7CisJCWxpc3RfZGVsX2luaXQoJnJtLT5tX3NvY2tfaXRlbSk7CisKKwkJcmRzX21lc3NhZ2Vfd2FpdChybSk7CisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJfQorfQorCisvKgorICogd2Ugb25seSB3YW50IHRoaXMgdG8gZmlyZSBvbmNlIHNvIHdlIHVzZSB0aGUgY2FsbGVycyAncXVldWVkJy4gIEl0J3MKKyAqIHBvc3NpYmxlIHRoYXQgYW5vdGhlciB0aHJlYWQgY2FuIHJhY2Ugd2l0aCB1cyBhbmQgcmVtb3ZlIHRoZQorICogbWVzc2FnZSBmcm9tIHRoZSBmbG93IHdpdGggUkRTX0NBTkNFTF9TRU5UX1RPLgorICovCitzdGF0aWMgaW50IHJkc19zZW5kX3F1ZXVlX3JtKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgc3RydWN0IHJkc19tZXNzYWdlICpybSwgX19iZTE2IHNwb3J0LAorCQkJICAgICBfX2JlMTYgZHBvcnQsIGludCAqcXVldWVkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGxlbjsKKworCWlmICgqcXVldWVkKQorCQlnb3RvIG91dDsKKworCWxlbiA9IGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbik7CisKKwkvKiB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoaWNoIGhvbGRzIGJvdGggdGhlIHNvY2tldCdzIHJzX2xvY2sKKwkgKiBhbmQgdGhlIGNvbm5lY3Rpb24ncyBjX2xvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBsaXR0bGUgc3BhY2UgaW4gc25kYnVmLCB3ZSBkb24ndCBxdWV1ZSBhbnl0aGluZywKKwkgKiBhbmQgdXNlcnNwYWNlIGdldHMgLUVBR0FJTi4gQnV0IHBvbGwoKSBpbmRpY2F0ZXMgdGhlcmUncyBzZW5kCisJICogcm9vbS4gVGhpcyBjYW4gbGVhZCB0byBiYWQgYmVoYXZpb3IgKHNwaW5uaW5nKSBpZiBzbmRfYnl0ZXMgaXNuJ3QKKwkgKiBmcmVlZCB1cCBieSBpbmNvbWluZyBhY2tzLiBTbyB3ZSBjaGVjayB0aGUgKm9sZCogdmFsdWUgb2YKKwkgKiByc19zbmRfYnl0ZXMgaGVyZSB0byBhbGxvdyB0aGUgbGFzdCBtc2cgdG8gZXhjZWVkIHRoZSBidWZmZXIsCisJICogYW5kIHBvbGwoKSBub3cga25vd3Mgbm8gbW9yZSBkYXRhIGNhbiBiZSBzZW50LgorCSAqLworCWlmIChycy0+cnNfc25kX2J5dGVzIDwgcmRzX3NrX3NuZGJ1ZihycykpIHsKKwkJcnMtPnJzX3NuZF9ieXRlcyArPSBsZW47CisKKwkJLyogbGV0IHJlY3Ygc2lkZSBrbm93IHdlIGFyZSBjbG9zZSB0byBzZW5kIHNwYWNlIGV4aGF1c3Rpb24uCisJCSAqIFRoaXMgaXMgcHJvYmFibHkgbm90IHRoZSBvcHRpbWFsIHdheSB0byBkbyBpdCwgYXMgdGhpcworCQkgKiBtZWFucyB3ZSBzZXQgdGhlIGZsYWcgb24gKmFsbCogbWVzc2FnZXMgYXMgc29vbiBhcyBvdXIKKwkJICogdGhyb3VnaHB1dCBoaXRzIGEgY2VydGFpbiB0aHJlc2hvbGQuCisJCSAqLworCQlpZiAocnMtPnJzX3NuZF9ieXRlcyA+PSByZHNfc2tfc25kYnVmKHJzKSAvIDIpCisJCQlfX3NldF9iaXQoUkRTX01TR19BQ0tfUkVRVUlSRUQsICZybS0+bV9mbGFncyk7CisKKwkJbGlzdF9hZGRfdGFpbCgmcm0tPm1fc29ja19pdGVtLCAmcnMtPnJzX3NlbmRfcXVldWUpOworCQlzZXRfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKTsKKwkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwkJcm0tPm1fcnMgPSByczsKKworCQkvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJ3JlCisJCSAgIHRyeWluZyB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBob2xkIGNfbG9jayAqLworCQlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoJnJtLT5tX2luYy5pX2hkciwgc3BvcnQsIGRwb3J0LCAwKTsKKwkJcm0tPm1faW5jLmlfY29ubiA9IGNvbm47CisJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisKKwkJc3Bpbl9sb2NrKCZjb25uLT5jX2xvY2spOworCQlybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSA9IGNwdV90b19iZTY0KGNvbm4tPmNfbmV4dF90eF9zZXErKyk7CisJCWxpc3RfYWRkX3RhaWwoJnJtLT5tX2Nvbm5faXRlbSwgJmNvbm4tPmNfc2VuZF9xdWV1ZSk7CisJCXNldF9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpOworCQlzcGluX3VubG9jaygmY29ubi0+Y19sb2NrKTsKKworCQlyZHNkZWJ1ZygicXVldWVkIG1zZyAlcCBsZW4gJWQsIHJzICVwIGJ5dGVzICVkIHNlcSAlbGx1XG4iLAorCQkJIHJtLCBsZW4sIHJzLCBycy0+cnNfc25kX2J5dGVzLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpKTsKKworCQkqcXVldWVkID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworb3V0OgorCXJldHVybiAqcXVldWVkOworfQorCitzdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSBzdHJ1Y3QgbXNnaGRyICptc2csIGludCAqYWxsb2NhdGVkX21yKQoreworCXN0cnVjdCBjbXNnaGRyICpjbXNnOworCWludCByZXQgPSAwOworCisJZm9yIChjbXNnID0gQ01TR19GSVJTVEhEUihtc2cpOyBjbXNnOyBjbXNnID0gQ01TR19OWFRIRFIobXNnLCBjbXNnKSkgeworCQlpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjbXNnLT5jbXNnX2xldmVsICE9IFNPTF9SRFMpCisJCQljb250aW51ZTsKKworCQkvKiBBcyBhIHNpZGUgZWZmZWN0LCBSRE1BX0RFU1QgYW5kIFJETUFfTUFQIHdpbGwgc2V0CisJCSAqIHJtLT5tX3JkbWFfY29va2llIGFuZCBybS0+bV9yZG1hX21yLgorCQkgKi8KKwkJc3dpdGNoIChjbXNnLT5jbXNnX3R5cGUpIHsKKwkJY2FzZSBSRFNfQ01TR19SRE1BX0FSR1M6CisJCQlyZXQgPSByZHNfY21zZ19yZG1hX2FyZ3MocnMsIHJtLCBjbXNnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkRTX0NNU0dfUkRNQV9ERVNUOgorCQkJcmV0ID0gcmRzX2Ntc2dfcmRtYV9kZXN0KHJzLCBybSwgY21zZyk7CisJCQlicmVhazsKKworCQljYXNlIFJEU19DTVNHX1JETUFfTUFQOgorCQkJcmV0ID0gcmRzX2Ntc2dfcmRtYV9tYXAocnMsIHJtLCBjbXNnKTsKKwkJCWlmICghcmV0KQorCQkJCSphbGxvY2F0ZWRfbXIgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJc2l6ZV90IHBheWxvYWRfbGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqdXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCV9fYmUzMiBkYWRkcjsKKwlfX2JlMTYgZHBvcnQ7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IE5VTEw7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCWludCByZXQgPSAwOworCWludCBxdWV1ZWQgPSAwLCBhbGxvY2F0ZWRfbXIgPSAwOworCWludCBub25ibG9jayA9IG1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUOworCWxvbmcgdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBub25ibG9jayk7CisKKwkvKiBNaXJyb3IgTGludXggVURQIG1pcnJvciBvZiBCU0QgZXJyb3IgbWVzc2FnZSBjb21wYXRpYmlsaXR5ICovCisJLyogWFhYOiBQZXJoYXBzIE1TR19NT1JFIHNvbWVkYXkgKi8KKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiB+KE1TR19ET05UV0FJVCB8IE1TR19DTVNHX0NPTVBBVCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXNnX2ZsYWdzIDB4JTA4WFxuIiwgbXNnLT5tc2dfZmxhZ3MpOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1zZy0+bXNnX25hbWVsZW4pIHsKKwkJLyogWFhYIGZhaWwgbm9uLXVuaWNhc3QgZGVzdGluYXRpb24gSVBzPyAqLworCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA8IHNpemVvZigqdXNpbikgfHwgdXNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJZGFkZHIgPSB1c2luLT5zaW5fYWRkci5zX2FkZHI7CisJCWRwb3J0ID0gdXNpbi0+c2luX3BvcnQ7CisJfSBlbHNlIHsKKwkJLyogV2Ugb25seSBjYXJlIGFib3V0IGNvbnNpc3RlbmN5IHdpdGggLT5jb25uZWN0KCkgKi8KKwkJbG9ja19zb2NrKHNrKTsKKwkJZGFkZHIgPSBycy0+cnNfY29ubl9hZGRyOworCQlkcG9ydCA9IHJzLT5yc19jb25uX3BvcnQ7CisJCXJlbGVhc2Vfc29jayhzayk7CisJfQorCisJLyogcmFjaW5nIHdpdGggYW5vdGhlciB0aHJlYWQgYmluZGluZyBzZWVtcyBvayBoZXJlICovCisJaWYgKGRhZGRyID09IDAgfHwgcnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlybSA9IHJkc19tZXNzYWdlX2NvcHlfZnJvbV91c2VyKG1zZy0+bXNnX2lvdiwgcGF5bG9hZF9sZW4pOworCWlmIChJU19FUlIocm0pKSB7CisJCXJldCA9IFBUUl9FUlIocm0pOworCQlybSA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXJtLT5tX2RhZGRyID0gZGFkZHI7CisKKwkvKiBQYXJzZSBhbnkgY29udHJvbCBtZXNzYWdlcyB0aGUgdXNlciBtYXkgaGF2ZSBpbmNsdWRlZC4gKi8KKwlyZXQgPSByZHNfY21zZ19zZW5kKHJzLCBybSwgbXNnLCAmYWxsb2NhdGVkX21yKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIHJkc19jb25uX2NyZWF0ZSBoYXMgYSBzcGlubG9jayB0aGF0IHJ1bnMgd2l0aCBJUlEgb2ZmLgorCSAqIENhY2hpbmcgdGhlIGNvbm4gaW4gdGhlIHNvY2tldCBoZWxwcyBhIGxvdC4gKi8KKwlpZiAocnMtPnJzX2Nvbm4gJiYgcnMtPnJzX2Nvbm4tPmNfZmFkZHIgPT0gZGFkZHIpCisJCWNvbm4gPSBycy0+cnNfY29ubjsKKwllbHNlIHsKKwkJY29ubiA9IHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhycy0+cnNfYm91bmRfYWRkciwgZGFkZHIsCisJCQkJCXJzLT5yc190cmFuc3BvcnQsCisJCQkJCXNvY2stPnNrLT5za19hbGxvY2F0aW9uKTsKKwkJaWYgKElTX0VSUihjb25uKSkgeworCQkJcmV0ID0gUFRSX0VSUihjb25uKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJzLT5yc19jb25uID0gY29ubjsKKwl9CisKKwlpZiAoKHJtLT5tX3JkbWFfY29va2llIHx8IHJtLT5tX3JkbWFfb3ApCisJICYmIGNvbm4tPmNfdHJhbnMtPnhtaXRfcmRtYSA9PSBOVUxMKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInJkbWFfb3AgJXAgY29ubiB4bWl0X3JkbWEgJXBcbiIsCisJCQkJcm0tPm1fcmRtYV9vcCwgY29ubi0+Y190cmFucy0+eG1pdF9yZG1hKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIElmIHRoZSBjb25uZWN0aW9uIGlzIGRvd24sIHRyaWdnZXIgYSBjb25uZWN0LiBXZSBtYXkKKwkgKiBoYXZlIHNjaGVkdWxlZCBhIGRlbGF5ZWQgcmVjb25uZWN0IGhvd2V2ZXIgLSBpbiB0aGlzIGNhc2UKKwkgKiB3ZSBzaG91bGQgbm90IGludGVyZmVyZS4KKwkgKi8KKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fRE9XTgorCSAmJiAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LCAwKTsKKworCXJldCA9IHJkc19jb25nX3dhaXQoY29ubi0+Y19mY29uZywgZHBvcnQsIG5vbmJsb2NrLCBycyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoIXJkc19zZW5kX3F1ZXVlX3JtKHJzLCBjb25uLCBybSwgcnMtPnJzX2JvdW5kX3BvcnQsCisJCQkJICBkcG9ydCwgJnF1ZXVlZCkpIHsKKwkJcmRzX3N0YXRzX2luYyhzX3NlbmRfcXVldWVfZnVsbCk7CisJCS8qIFhYWCBtYWtlIHN1cmUgdGhpcyBpcyByZWFzb25hYmxlICovCisJCWlmIChwYXlsb2FkX2xlbiA+IHJkc19za19zbmRidWYocnMpKSB7CisJCQlyZXQgPSAtRU1TR1NJWkU7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAobm9uYmxvY2spIHsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXRpbWVvID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKnNrLT5za19zbGVlcCwKKwkJCQkJcmRzX3NlbmRfcXVldWVfcm0ocnMsIGNvbm4sIHJtLAorCQkJCQkJCSAgcnMtPnJzX2JvdW5kX3BvcnQsCisJCQkJCQkJICBkcG9ydCwKKwkJCQkJCQkgICZxdWV1ZWQpLAorCQkJCQl0aW1lbyk7CisJCXJkc2RlYnVnKCJzZW5kbXNnIHdva2UgcXVldWVkICVkIHRpbWVvICVsZFxuIiwgcXVldWVkLCB0aW1lbyk7CisJCWlmICh0aW1lbyA+IDAgfHwgdGltZW8gPT0gTUFYX1NDSEVEVUxFX1RJTUVPVVQpCisJCQljb250aW51ZTsKKworCQlyZXQgPSB0aW1lbzsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBCeSBub3cgd2UndmUgY29tbWl0dGVkIHRvIHRoZSBzZW5kLiAgV2UgcmV1c2UgcmRzX3NlbmRfd29ya2VyKCkKKwkgKiB0byByZXRyeSBzZW5kcyBpbiB0aGUgcmRzIHRocmVhZCBpZiB0aGUgdHJhbnNwb3J0IGFza3MgdXMgdG8uCisJICovCisJcmRzX3N0YXRzX2luYyhzX3NlbmRfcXVldWVkKTsKKworCWlmICghdGVzdF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpKQorCQlyZHNfc2VuZF93b3JrZXIoJmNvbm4tPmNfc2VuZF93LndvcmspOworCisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gcGF5bG9hZF9sZW47CisKK291dDoKKwkvKiBJZiB0aGUgdXNlciBpbmNsdWRlZCBhIFJETUFfTUFQIGNtc2csIHdlIGFsbG9jYXRlZCBhIE1SIG9uIHRoZSBmbHkuCisJICogSWYgdGhlIHNlbmRtc2cgZ29lcyB0aHJvdWdoLCB3ZSBrZWVwIHRoZSBNUi4gSWYgaXQgZmFpbHMgd2l0aCBFQUdBSU4KKwkgKiBvciBpbiBhbnkgb3RoZXIgd2F5LCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIE1SIGFnYWluICovCisJaWYgKGFsbG9jYXRlZF9tcikKKwkJcmRzX3JkbWFfdW51c2UocnMsIHJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpLCAxKTsKKworCWlmIChybSkKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmVwbHkgdG8gYSBwaW5nIHBhY2tldC4KKyAqLworaW50CityZHNfc2VuZF9wb25nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgX19iZTE2IGRwb3J0KQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXJtID0gcmRzX21lc3NhZ2VfYWxsb2MoMCwgR0ZQX0FUT01JQyk7CisJaWYgKHJtID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcm0tPm1fZGFkZHIgPSBjb25uLT5jX2ZhZGRyOworCisJLyogSWYgdGhlIGNvbm5lY3Rpb24gaXMgZG93biwgdHJpZ2dlciBhIGNvbm5lY3QuIFdlIG1heQorCSAqIGhhdmUgc2NoZWR1bGVkIGEgZGVsYXllZCByZWNvbm5lY3QgaG93ZXZlciAtIGluIHRoaXMgY2FzZQorCSAqIHdlIHNob3VsZCBub3QgaW50ZXJmZXJlLgorCSAqLworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9ET1dOCisJICYmICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmNvbm4tPmNfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19jb25uX3csIDApOworCisJcmV0ID0gcmRzX2Nvbmdfd2FpdChjb25uLT5jX2Zjb25nLCBkcG9ydCwgMSwgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcm0tPm1fY29ubl9pdGVtLCAmY29ubi0+Y19zZW5kX3F1ZXVlKTsKKwlzZXRfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKTsKKwlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCXJtLT5tX2luYy5pX2Nvbm4gPSBjb25uOworCisJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZybS0+bV9pbmMuaV9oZHIsIDAsIGRwb3J0LAorCQkJCSAgICBjb25uLT5jX25leHRfdHhfc2VxKTsKKwljb25uLT5jX25leHRfdHhfc2VxKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZWQpOworCXJkc19zdGF0c19pbmMoc19zZW5kX3BvbmcpOworCisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworCXJldHVybiAwOworCitvdXQ6CisJaWYgKHJtKQorCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3N0YXRzLmMgYi9uZXQvcmRzL3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3MTQ2OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvc3RhdHMuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJkc19zdGF0aXN0aWNzLCByZHNfc3RhdHMpOworCisvKiA6Liwkcy91bnNpZ25lZCBsb25nXD4uKlw8c19cKC4qXCk7LyJcMSIsL2cgKi8KKworc3RhdGljIGNoYXIgKnJkc19zdGF0X25hbWVzW10gPSB7CisJImNvbm5fcmVzZXQiLAorCSJyZWN2X2Ryb3BfYmFkX2NoZWNrc3VtIiwKKwkicmVjdl9kcm9wX29sZF9zZXEiLAorCSJyZWN2X2Ryb3Bfbm9fc29jayIsCisJInJlY3ZfZHJvcF9kZWFkX3NvY2siLAorCSJyZWN2X2RlbGl2ZXJfcmFjZWQiLAorCSJyZWN2X2RlbGl2ZXJlZCIsCisJInJlY3ZfcXVldWVkIiwKKwkicmVjdl9pbW1lZGlhdGVfcmV0cnkiLAorCSJyZWN2X2RlbGF5ZWRfcmV0cnkiLAorCSJyZWN2X2Fja19yZXF1aXJlZCIsCisJInJlY3ZfcmRtYV9ieXRlcyIsCisJInJlY3ZfcGluZyIsCisJInNlbmRfcXVldWVfZW1wdHkiLAorCSJzZW5kX3F1ZXVlX2Z1bGwiLAorCSJzZW5kX3NlbV9jb250ZW50aW9uIiwKKwkic2VuZF9zZW1fcXVldWVfcmFjZWQiLAorCSJzZW5kX2ltbWVkaWF0ZV9yZXRyeSIsCisJInNlbmRfZGVsYXllZF9yZXRyeSIsCisJInNlbmRfZHJvcF9hY2tlZCIsCisJInNlbmRfYWNrX3JlcXVpcmVkIiwKKwkic2VuZF9xdWV1ZWQiLAorCSJzZW5kX3JkbWEiLAorCSJzZW5kX3JkbWFfYnl0ZXMiLAorCSJzZW5kX3BvbmciLAorCSJwYWdlX3JlbWFpbmRlcl9oaXQiLAorCSJwYWdlX3JlbWFpbmRlcl9taXNzIiwKKwkiY29weV90b191c2VyIiwKKwkiY29weV9mcm9tX3VzZXIiLAorCSJjb25nX3VwZGF0ZV9xdWV1ZWQiLAorCSJjb25nX3VwZGF0ZV9yZWNlaXZlZCIsCisJImNvbmdfc2VuZF9lcnJvciIsCisJImNvbmdfc2VuZF9ibG9ja2VkIiwKK307CisKK3ZvaWQgcmRzX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgdWludDY0X3QgKnZhbHVlcywgY2hhciAqKm5hbWVzLCBzaXplX3QgbnIpCit7CisJc3RydWN0IHJkc19pbmZvX2NvdW50ZXIgY3RyOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJQlVHX09OKHN0cmxlbihuYW1lc1tpXSkgPj0gc2l6ZW9mKGN0ci5uYW1lKSk7CisJCXN0cm5jcHkoY3RyLm5hbWUsIG5hbWVzW2ldLCBzaXplb2YoY3RyLm5hbWUpIC0gMSk7CisJCWN0ci52YWx1ZSA9IHZhbHVlc1tpXTsKKworCQlyZHNfaW5mb19jb3B5KGl0ZXIsICZjdHIsIHNpemVvZihjdHIpKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGdpdmVzIGdsb2JhbCBjb3VudGVycyBhY3Jvc3MgYWxsIHRoZSB0cmFuc3BvcnRzLiAgVGhlIHN0cmluZ3MKKyAqIGFyZSBjb3BpZWQgaW4gc28gdGhhdCB0aGUgdG9vbCBkb2Vzbid0IG5lZWQga25vd2xlZGdlIG9mIHRoZSBzcGVjaWZpYworICogc3RhdHMgdGhhdCB3ZSdyZSBleHBvcnRpbmcuICBTb21lIGFyZSBwcmV0dHkgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50CisgKiBhbmQgbWF5IGNoYW5nZSBvdmVyIHRpbWUuICBUaGF0IGRvZXNuJ3Qgc3RvcCB0aGVtIGZyb20gYmVpbmcgdXNlZnVsLgorICoKKyAqIFRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gaW4gdGhlIGNoYWluIHRoYXQga25vd3MgYWJvdXQgdGhlIGJ5dGUgZ3JhbnVsYXIKKyAqIGxlbmd0aCBpbiB1c2Vyc3BhY2UuICBJdCBjb252ZXJ0cyBpdCB0byBudW1iZXIgb2Ygc3RhdCBlbnRyaWVzIHRoYXQgdGhlCisgKiByZXN0IG9mIHRoZSBmdW5jdGlvbnMgb3BlcmF0ZSBpbi4KKyAqLworc3RhdGljIHZvaWQgcmRzX3N0YXRzX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXN0cnVjdCByZHNfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGludCBhdmFpbDsKKworCWF2YWlsID0gbGVuIC8gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19jb3VudGVyKTsKKworCWlmIChhdmFpbCA8IEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpKSB7CisJCWF2YWlsID0gMDsKKwkJZ290byB0cmFuczsKKwl9CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzcmMgPSAodWludDY0X3QgKikmKHBlcl9jcHUocmRzX3N0YXRzLCBjcHUpKTsKKwkJc3VtID0gKHVpbnQ2NF90ICopJnN0YXRzOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0YXRzKSAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKwkJCSooc3VtKyspICs9ICooc3JjKyspOworCX0KKworCXJkc19zdGF0c19pbmZvX2NvcHkoaXRlciwgKHVpbnQ2NF90ICopJnN0YXRzLCByZHNfc3RhdF9uYW1lcywKKwkJCSAgICBBUlJBWV9TSVpFKHJkc19zdGF0X25hbWVzKSk7CisJYXZhaWwgLT0gQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcyk7CisKK3RyYW5zOgorCWxlbnMtPmVhY2ggPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX2NvdW50ZXIpOworCWxlbnMtPm5yID0gcmRzX3RyYW5zX3N0YXRzX2luZm9fY29weShpdGVyLCBhdmFpbCkgKworCQkgICBBUlJBWV9TSVpFKHJkc19zdGF0X25hbWVzKTsKK30KKwordm9pZCByZHNfc3RhdHNfZXhpdCh2b2lkKQoreworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19DT1VOVEVSUywgcmRzX3N0YXRzX2luZm8pOworfQorCitpbnQgX19pbml0IHJkc19zdGF0c19pbml0KHZvaWQpCit7CisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19DT1VOVEVSUywgcmRzX3N0YXRzX2luZm8pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zeXNjdGwuYyBiL25ldC9yZHMvc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3ZGM1YwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvc3lzY3RsLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJkc19zeXNjdGxfcmVnX3RhYmxlOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4ID0gfjBVTDsKKwordW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllczsKK3Vuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMgPSBIWjsKKwordW5zaWduZWQgaW50ICByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHMgPSA4OwordW5zaWduZWQgaW50ICByZHNfc3lzY3RsX21heF91bmFja2VkX2J5dGVzID0gKDE2IDw8IDIwKTsKKwordW5zaWduZWQgaW50IHJkc19zeXNjdGxfcGluZ19lbmFibGUgPSAxOworCitzdGF0aWMgY3RsX3RhYmxlIHJkc19zeXNjdGxfcmRzX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gInJlY29ubmVjdF9taW5fZGVsYXlfbXMiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJyZWNvbm5lY3RfbWF4X2RlbGF5X21zIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLAorCQkuZXh0cmEyCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAibWF4X3VuYWNrZWRfcGFja2V0cyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAibWF4X3VuYWNrZWRfYnl0ZXMiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJwaW5nX2VuYWJsZSIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX3BpbmdfZW5hYmxlLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YoaW50KSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF9wYXRoIHJkc19zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAicmRzIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyB9Cit9OworCisKK3ZvaWQgcmRzX3N5c2N0bF9leGl0KHZvaWQpCit7CisJaWYgKHJkc19zeXNjdGxfcmVnX3RhYmxlKQorCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyZHNfc3lzY3RsX3JlZ190YWJsZSk7Cit9CisKK2ludCBfX2luaXQgcmRzX3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKKwlyZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllcyA9IHJkc19zeXNjdGxfcmVjb25uZWN0X21pbjsKKworCXJkc19zeXNjdGxfcmVnX3RhYmxlID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKHJkc19zeXNjdGxfcGF0aCwgcmRzX3N5c2N0bF9yZHNfdGFibGUpOworCWlmIChyZHNfc3lzY3RsX3JlZ190YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvdGhyZWFkcy5jIGIvbmV0L3Jkcy90aHJlYWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4YTFiZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvdGhyZWFkcy5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2luY2x1ZGUgInJkcy5oIgorCisvKgorICogQWxsIG9mIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBpcyBzaW1wbGlmaWVkIGJ5IHNlcmlhbGl6aW5nIGl0IHRocm91Z2gKKyAqIHdvcmsgcXVldWVzIHRoYXQgZXhlY3V0ZSBpbiBhIGNvbm5lY3Rpb24gbWFuYWdpbmcgdGhyZWFkLgorICoKKyAqIFRDUCB3YW50cyB0byBzZW5kIGFja3MgdGhyb3VnaCBzZW5kcGFnZSgpIGluIHJlc3BvbnNlIHRvIGRhdGFfcmVhZHkoKSwKKyAqIGJ1dCBpdCBuZWVkcyBhIHByb2Nlc3MgY29udGV4dCB0byBkbyBzby4KKyAqCisgKiBUaGUgcmVjZWl2ZSBwYXRocyBuZWVkIHRvIGFsbG9jYXRlIGJ1dCBjYW4ndCBkcm9wIHBhY2tldHMgKCEpIHNvIHdlIGhhdmUKKyAqIGEgdGhyZWFkIGFyb3VuZCB0byBibG9jayBhbGxvY2F0aW5nIGlmIHRoZSByZWNlaXZlIGZhc3QgcGF0aCBzZWVzIGFuCisgKiBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKi8KKworLyogR3JhbmQgVW5pZmllZCBUaGVvcnkgb2YgY29ubmVjdGlvbiBsaWZlIGN5Y2xlOgorICogQXQgYW55IHBvaW50IGluIHRpbWUsIHRoZSBjb25uZWN0aW9uIGNhbiBiZSBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzOgorICogRE9XTiwgQ09OTkVDVElORywgVVAsIERJU0NPTk5FQ1RJTkcsIEVSUk9SCisgKgorICogVGhlIGZvbGxvd2luZyB0cmFuc2l0aW9ucyBhcmUgcG9zc2libGU6CisgKiAgQU5ZCQkgIC0+IEVSUk9SCisgKiAgVVAJCSAgLT4gRElTQ09OTkVDVElORworICogIEVSUk9SCSAgLT4gRElTQ09OTkVDVElORworICogIERJU0NPTk5FQ1RJTkcgLT4gRE9XTgorICogIERPV04JICAtPiBDT05ORUNUSU5HCisgKiAgQ09OTkVDVElORwkgIC0+IFVQCisgKgorICogVHJhbnNpdGlvbiB0byBzdGF0ZSBESVNDT05ORUNUSU5HL0RPV046CisgKiAgLQlJbnNpZGUgdGhlIHNodXRkb3duIHdvcmtlcjsgc3luY2hyb25pemVzIHdpdGggeG1pdCBwYXRoCisgKgl0aHJvdWdoIGNfc2VuZF9sb2NrLCBhbmQgd2l0aCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgY2FsbGJhY2tzCisgKgl2aWEgY19jbV9sb2NrLgorICoKKyAqCUZvciByZWNlaXZlIGNhbGxiYWNrcywgd2UgcmVseSBvbiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQKKyAqCShUQ1AsIElCL1JETUEpIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzeW5jaHJvbmlzYXRpb24uCisgKi8KK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfd3E7CisKK3ZvaWQgcmRzX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9DT05ORUNUSU5HLCBSRFNfQ09OTl9VUCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbm5vdCB0cmFuc2l0aW9uIHRvIHN0YXRlIFVQLCAiCisJCQkJImN1cnJlbnQgc3RhdGUgaXMgJWRcbiIsCisJCQkJX19mdW5jX18sCisJCQkJYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpKTsKKwkJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRVJST1IpOworCQlxdWV1ZV93b3JrKHJkc193cSwgJmNvbm4tPmNfZG93bl93KTsKKwkJcmV0dXJuOworCX0KKworCXJkc2RlYnVnKCJjb25uICVwIGZvciAlcEk0IHRvICVwSTQgY29tcGxldGVcbiIsCisJICBjb25uLCAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIpOworCisJY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9IDA7CisJc2V0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7Cit9CisKKy8qCisgKiBUaGlzIHJhbmRvbSBleHBvbmVudGlhbCBiYWNrb2ZmIGlzIHJlbGllZCBvbiB0byBldmVudHVhbGx5IHJlc29sdmUgcmFjaW5nCisgKiBjb25uZWN0cy4KKyAqCisgKiBJZiBjb25uZWN0IGF0dGVtcHRzIHJhY2UgdGhlbiBib3RoIHBhcnRpZXMgZHJvcCBib3RoIGNvbm5lY3Rpb25zIGFuZCBjb21lCisgKiBoZXJlIHRvIHdhaXQgZm9yIGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0cnlpbmcgYWdhaW4uICBFdmVudHVhbGx5CisgKiB0aGUgYmFja29mZiByYW5nZSB3aWxsIGJlIHNvIG11Y2ggZ3JlYXRlciB0aGFuIHRoZSB0aW1lIGl0IHRha2VzIHRvCisgKiBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRoYXQgb25lIG9mIHRoZSBwYWlyIHdpbGwgZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uCisgKiBiZWZvcmUgdGhlIG90aGVyJ3MgcmFuZG9tIGRlbGF5IGZpcmVzLgorICoKKyAqIENvbm5lY3Rpb24gYXR0ZW1wdHMgdGhhdCBhcnJpdmUgd2hpbGUgYSBjb25uZWN0aW9uIGlzIGFscmVhZHkgZXN0YWJsaXNoZWQKKyAqIGFyZSBhbHNvIGNvbnNpZGVyZWQgdG8gYmUgcmFjaW5nIGNvbm5lY3RzLiAgVGhpcyBsZXRzIGEgY29ubmVjdGlvbiBmcm9tCisgKiBhIHJlYm9vdGVkIG1hY2hpbmUgcmVwbGFjZSBhbiBleGlzdGluZyBzdGFsZSBjb25uZWN0aW9uIGJlZm9yZSB0aGUgdHJhbnNwb3J0CisgKiBub3RpY2VzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaGFzIGZhaWxlZC4KKyAqCisgKiBXZSBzaG91bGQgKmFsd2F5cyogc3RhcnQgd2l0aCBhIHJhbmRvbSBiYWNrb2ZmOyBvdGhlcndpc2UgYSBicm9rZW4gY29ubmVjdGlvbgorICogd2lsbCBhbHdheXMgdGFrZSBzZXZlcmFsIGl0ZXJhdGlvbnMgdG8gYmUgcmUtZXN0YWJsaXNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19xdWV1ZV9yZWNvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXVuc2lnbmVkIGxvbmcgcmFuZDsKKworCXJkc2RlYnVnKCJjb25uICVwIGZvciAlcEk0IHRvICVwSTQgcmVjb25uZWN0IGppZmZpZXMgJWx1XG4iLAorCSAgY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyLAorCSAgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyk7CisKKwlzZXRfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmNvbm4tPmNfZmxhZ3MpOworCWlmIChjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID09IDApIHsKKwkJY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9IHJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19jb25uX3csIDApOworCQlyZXR1cm47CisJfQorCisJZ2V0X3JhbmRvbV9ieXRlcygmcmFuZCwgc2l6ZW9mKHJhbmQpKTsKKwlyZHNkZWJ1ZygiJWx1IGRlbGF5ICVsdSBjZWlsIGNvbm4gJXAgZm9yICVwSTQgLT4gJXBJNFxuIiwKKwkJIHJhbmQgJSBjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzLCBjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzLAorCQkgY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19jb25uX3csCisJCQkgICByYW5kICUgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyk7CisKKwljb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID0gbWluKGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgKiAyLAorCQkJCQlyZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllcyk7Cit9CisKK3ZvaWQgcmRzX2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19jb25uZWN0aW9uLCBjX2Nvbm5fdy53b3JrKTsKKwlpbnQgcmV0OworCisJY2xlYXJfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmNvbm4tPmNfZmxhZ3MpOworCWlmIChyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0NPTk5FQ1RJTkcpKSB7CisJCXJldCA9IGNvbm4tPmNfdHJhbnMtPmNvbm5fY29ubmVjdChjb25uKTsKKwkJcmRzZGVidWcoImNvbm4gJXAgZm9yICVwSTQgdG8gJXBJNCBkaXNwYXRjaGVkLCByZXQgJWRcbiIsCisJCQljb25uLCAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisKKwkJaWYgKHJldCkgeworCQkJaWYgKHJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fQ09OTkVDVElORywgUkRTX0NPTk5fRE9XTikpCisJCQkJcmRzX3F1ZXVlX3JlY29ubmVjdChjb25uKTsKKwkJCWVsc2UKKwkJCQlyZHNfY29ubl9lcnJvcihjb25uLCAiUkRTOiBjb25uZWN0IGZhaWxlZFxuIik7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfY29ubmVjdGlvbiwgY19kb3duX3cpOworCisJLyogc2h1dCBpdCBkb3duIHVubGVzcyBpdCdzIGRvd24gYWxyZWFkeSAqLworCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9ET1dOKSkgeworCQkvKgorCQkgKiBRdWllc2NlIHRoZSBjb25uZWN0aW9uIG1nbXQgaGFuZGxlcnMgYmVmb3JlIHdlIHN0YXJ0IHRlYXJpbmcKKwkJICogdGhpbmdzIGRvd24uIFdlIGRvbid0IGhvbGQgdGhlIG11dGV4IGZvciB0aGUgZW50aXJlCisJCSAqIGR1cmF0aW9uIG9mIHRoZSBzaHV0ZG93biBvcGVyYXRpb24sIGVsc2Ugd2UgbWF5IGJlCisJCSAqIGRlYWRsb2NraW5nIHdpdGggdGhlIENNIGhhbmRsZXIuIEluc3RlYWQsIHRoZSBDTSBldmVudAorCQkgKiBoYW5kbGVyIGlzIHN1cHBvc2VkIHRvIGNoZWNrIGZvciBzdGF0ZSBESVNDT05ORUNUSU5HCisJCSAqLworCQltdXRleF9sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fVVAsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcpCisJCSAmJiAhcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9FUlJPUiwgUkRTX0NPTk5fRElTQ09OTkVDVElORykpIHsKKwkJCXJkc19jb25uX2Vycm9yKGNvbm4sICJzaHV0ZG93biBjYWxsZWQgaW4gc3RhdGUgJWRcbiIsCisJCQkJCWF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSk7CisJCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJCQlyZXR1cm47CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCisJCW11dGV4X2xvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKwkJY29ubi0+Y190cmFucy0+Y29ubl9zaHV0ZG93bihjb25uKTsKKwkJcmRzX2Nvbm5fcmVzZXQoY29ubik7CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCisJCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLCBSRFNfQ09OTl9ET1dOKSkgeworCQkJLyogVGhpcyBjYW4gaGFwcGVuIC0gZWcgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIHRlYXJpbmcKKwkJCSAqIGRvd24gdGhlIGNvbm5lY3Rpb24sIGFuZCBzb21lb25lIHVubG9hZHMgdGhlIHJkcyBtb2R1bGUuCisJCQkgKiBRdWl0ZSByZXByb2R1Y2VhYmxlIHdpdGggbG9vcGJhY2sgY29ubmVjdGlvbnMuCisJCQkgKiBNb3N0bHkgaGFybWxlc3MuCisJCQkgKi8KKwkJCXJkc19jb25uX2Vycm9yKGNvbm4sCisJCQkJIiVzOiBmYWlsZWQgdG8gdHJhbnNpdGlvbiB0byBzdGF0ZSBET1dOLCAiCisJCQkJImN1cnJlbnQgc3RhdGUgaXMgJWRcbiIsCisJCQkJX19mdW5jX18sCisJCQkJYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIFRoZW4gcmVjb25uZWN0IGlmIGl0J3Mgc3RpbGwgbGl2ZS4KKwkgKiBUaGUgcGFzc2l2ZSBzaWRlIG9mIGFuIElCIGxvb3BiYWNrIGNvbm5lY3Rpb24gaXMgbmV2ZXIgYWRkZWQKKwkgKiB0byB0aGUgY29ubiBoYXNoLCBzbyB3ZSBuZXZlciB0cmlnZ2VyIGEgcmVjb25uZWN0IG9uIHRoaXMKKwkgKiBjb25uIC0gdGhlIHJlY29ubmVjdCBpcyBhbHdheXMgdHJpZ2dlcmVkIGJ5IHRoZSBhY3RpdmUgcGVlci4gKi8KKwljYW5jZWxfZGVsYXllZF93b3JrKCZjb25uLT5jX2Nvbm5fdyk7CisJaWYgKCFobGlzdF91bmhhc2hlZCgmY29ubi0+Y19oYXNoX25vZGUpKQorCQlyZHNfcXVldWVfcmVjb25uZWN0KGNvbm4pOworfQorCit2b2lkIHJkc19zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfY29ubmVjdGlvbiwgY19zZW5kX3cud29yayk7CisJaW50IHJldDsKKworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQlyZXQgPSByZHNfc2VuZF94bWl0KGNvbm4pOworCQlyZHNkZWJ1ZygiY29ubiAlcCByZXQgJWRcbiIsIGNvbm4sIHJldCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgLUVBR0FJTjoKKwkJCXJkc19zdGF0c19pbmMoc19zZW5kX2ltbWVkaWF0ZV9yZXRyeSk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCQkJYnJlYWs7CisJCWNhc2UgLUVOT01FTToKKwkJCXJkc19zdGF0c19pbmMoc19zZW5kX2RlbGF5ZWRfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAyKTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHJkc19yZWN2X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfY29ubmVjdGlvbiwgY19yZWN2X3cud29yayk7CisJaW50IHJldDsKKworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQlyZXQgPSBjb25uLT5jX3RyYW5zLT5yZWN2KGNvbm4pOworCQlyZHNkZWJ1ZygiY29ubiAlcCByZXQgJWRcbiIsIGNvbm4sIHJldCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgLUVBR0FJTjoKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2ltbWVkaWF0ZV9yZXRyeSk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworCQkJYnJlYWs7CisJCWNhc2UgLUVOT01FTToKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2RlbGF5ZWRfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAyKTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHJkc190aHJlYWRzX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShyZHNfd3EpOworfQorCitpbnQgX19pbml0IHJkc190aHJlYWRzX2luaXQodm9pZCkKK3sKKwlyZHNfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3Jkc2QiKTsKKwlpZiAocmRzX3dxID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RyYW5zcG9ydC5jIGIvbmV0L3Jkcy90cmFuc3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjdkYTYxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90cmFuc3BvcnQuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImxvb3AuaCIKKworc3RhdGljIExJU1RfSEVBRChyZHNfdHJhbnNwb3J0cyk7CitzdGF0aWMgREVDTEFSRV9SV1NFTShyZHNfdHJhbnNfc2VtKTsKKworaW50IHJkc190cmFuc19yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCit7CisJQlVHX09OKHN0cmxlbih0cmFucy0+dF9uYW1lKSArIDEgPiBUUkFOU05BTVNJWik7CisKKwlkb3duX3dyaXRlKCZyZHNfdHJhbnNfc2VtKTsKKworCWxpc3RfYWRkX3RhaWwoJnRyYW5zLT50X2l0ZW0sICZyZHNfdHJhbnNwb3J0cyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJlZCBSRFMvJXMgdHJhbnNwb3J0XG4iLCB0cmFucy0+dF9uYW1lKTsKKworCXVwX3dyaXRlKCZyZHNfdHJhbnNfc2VtKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc190cmFuc191bnJlZ2lzdGVyKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucykKK3sKKwlkb3duX3dyaXRlKCZyZHNfdHJhbnNfc2VtKTsKKworCWxpc3RfZGVsX2luaXQoJnRyYW5zLT50X2l0ZW0pOworCXByaW50ayhLRVJOX0lORk8gIlVucmVnaXN0ZXJlZCBSRFMvJXMgdHJhbnNwb3J0XG4iLCB0cmFucy0+dF9uYW1lKTsKKworCXVwX3dyaXRlKCZyZHNfdHJhbnNfc2VtKTsKK30KKworc3RydWN0IHJkc190cmFuc3BvcnQgKnJkc190cmFuc19nZXRfcHJlZmVycmVkKF9fYmUzMiBhZGRyKQoreworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqcmV0ID0gTlVMTDsKKworCWlmIChJTl9MT09QQkFDSyhudG9obChhZGRyKSkpCisJCXJldHVybiAmcmRzX2xvb3BfdHJhbnNwb3J0OworCisJZG93bl9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zLCAmcmRzX3RyYW5zcG9ydHMsIHRfaXRlbSkgeworCQlpZiAodHJhbnMtPmxhZGRyX2NoZWNrKGFkZHIpID09IDApIHsKKwkJCXJldCA9IHRyYW5zOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmcmRzX3RyYW5zX3NlbSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RhdHMgZW50cmllcyBpbiB0aGUgc25hcHNob3QgYW5kIG9ubHkKKyAqIGNvcGllcyB0aGVtIHVzaW5nIHRoZSBpdGVyIGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlbS4gIFRoZQorICogY2FsbGVyIHBhc3NlcyBpbiB0aGUgZ2xvYmFsIHN0YXRzIHNvIHRoYXQgd2UgY2FuIHNpemUgYW5kIGNvcHkgd2hpbGUKKyAqIGhvbGRpbmcgdGhlIGxvY2suCisgKi8KK3Vuc2lnbmVkIGludCByZHNfdHJhbnNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGF2YWlsKQorCit7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zOworCXVuc2lnbmVkIGludCB0b3RhbCA9IDA7CisJdW5zaWduZWQgaW50IHBhcnQ7CisKKwlyZHNfaW5mb19pdGVyX3VubWFwKGl0ZXIpOworCWRvd25fcmVhZCgmcmRzX3RyYW5zX3NlbSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zLCAmcmRzX3RyYW5zcG9ydHMsIHRfaXRlbSkgeworCQlpZiAodHJhbnMtPnN0YXRzX2luZm9fY29weSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJcGFydCA9IHRyYW5zLT5zdGF0c19pbmZvX2NvcHkoaXRlciwgYXZhaWwpOworCQlhdmFpbCAtPSBtaW4oYXZhaWwsIHBhcnQpOworCQl0b3RhbCArPSBwYXJ0OworCX0KKworCXVwX3JlYWQoJnJkc190cmFuc19zZW0pOworCisJcmV0dXJuIHRvdGFsOworfQorCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwppbmRleCA1YzcyYTExLi5mOGYwNDdiNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYworKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC0xODMsMTMgKzE4Myw2IEBACiAJCWlmIChSX3RhYiA9PSBOVUxMKQogCQkJZ290byBmYWlsdXJlOwogCi0JCWlmICghZXN0ICYmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRCB8fAotCQkJICAgICAhZ2VuX2VzdGltYXRvcl9hY3RpdmUoJnBvbGljZS0+dGNmX2JzdGF0cywKLQkJCQkJCSAgICZwb2xpY2UtPnRjZl9yYXRlX2VzdCkpKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBmYWlsdXJlOwotCQl9Ci0KIAkJaWYgKHBhcm0tPnBlYWtyYXRlLnJhdGUpIHsKIAkJCVBfdGFiID0gcWRpc2NfZ2V0X3J0YWIoJnBhcm0tPnBlYWtyYXRlLAogCQkJCQkgICAgICAgdGJbVENBX1BPTElDRV9QRUFLUkFURV0pOwpAQCAtMjA1LDYgKzE5OCwxMiBAQAogCQkJCQkgICAgJnBvbGljZS0+dGNmX2xvY2ssIGVzdCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZhaWx1cmVfdW5sb2NrOworCX0gZWxzZSBpZiAodGJbVENBX1BPTElDRV9BVlJBVEVdICYmCisJCSAgIChyZXQgPT0gQUNUX1BfQ1JFQVRFRCB8fAorCQkgICAgIWdlbl9lc3RpbWF0b3JfYWN0aXZlKCZwb2xpY2UtPnRjZl9ic3RhdHMsCisJCQkJCSAgJnBvbGljZS0+dGNmX3JhdGVfZXN0KSkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsdXJlX3VubG9jazsKIAl9CiAKIAkvKiBObyBmYWlsdXJlIGFsbG93ZWQgYWZ0ZXIgdGhpcyBwb2ludCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggOWU0M2VkOS4uZDcyOGQ4MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0xOTYwLDggKzE5NjAsMTEgQEAKIAljYnFfcm1wcmlvKHEsIGNsKTsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAotCWlmICgtLWNsLT5yZWZjbnQgPT0gMCkKLQkJY2JxX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggZjZiNGZhOS4uNzU5N2ZlMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYworKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC02NiwxMSArNjYsMTUgQEAKIHsKIAlzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKikqYXJnOworCXN0cnVjdCBubGF0dHIgKm9wdCA9IHRjYVtUQ0FfT1BUSU9OU107CiAJc3RydWN0IG5sYXR0ciAqdGJbVENBX0RSUl9NQVggKyAxXTsKIAl1MzIgcXVhbnR1bTsKIAlpbnQgZXJyOwogCi0JZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgVENBX0RSUl9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sIGRycl9wb2xpY3kpOworCWlmICghb3B0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9EUlJfTUFYLCBvcHQsIGRycl9wb2xpY3kpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xNTEsOCArMTU1LDExIEBACiAJZHJyX3B1cmdlX3F1ZXVlKGNsKTsKIAlxZGlzY19jbGFzc19oYXNoX3JlbW92ZSgmcS0+Y2xoYXNoLCAmY2wtPmNvbW1vbik7CiAKLQlpZiAoLS1jbC0+cmVmY250ID09IDApCi0JCWRycl9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworCUJVR19PTigtLWNsLT5yZWZjbnQgPT0gMCk7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHdlICJob2xkIiBvbmUgY29wcy0+Z2V0KCkgd2hlbiBjYWxsZWQKKwkgKiBmcm9tIHRjX2N0bF90Y2xhc3M7IHRoZSBkZXN0cm95IG1ldGhvZCBpcyBkb25lIGZyb20gY29wcy0+cHV0KCkuCisJICovCiAKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggNzQyMjZiMi4uNTAyMmY5YyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTExMzksOCArMTEzOSwxMSBAQAogCWhmc2NfcHVyZ2VfcXVldWUoc2NoLCBjbCk7CiAJcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoJnEtPmNsaGFzaCwgJmNsLT5jbF9jb21tb24pOwogCi0JaWYgKC0tY2wtPnJlZmNudCA9PSAwKQotCQloZnNjX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggMzU1OTc0Zi4uODhjZDAyNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC0xMjc1LDggKzEyNzUsMTEgQEAKIAlpZiAobGFzdF9jaGlsZCkKIAkJaHRiX3BhcmVudF90b19sZWFmKHEsIGNsLCBuZXdfcSk7CiAKLQlpZiAoLS1jbC0+cmVmY250ID09IDApCi0JCWh0Yl9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworCUJVR19PTigtLWNsLT5yZWZjbnQgPT0gMCk7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHdlICJob2xkIiBvbmUgY29wcy0+Z2V0KCkgd2hlbiBjYWxsZWQKKwkgKiBmcm9tIHRjX2N0bF90Y2xhc3M7IHRoZSBkZXN0cm95IG1ldGhvZCBpcyBkb25lIGZyb20gY29wcy0+cHV0KCkuCisJICovCiAKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IGEyZjkzYzAuLmUyMmRmZTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJc3RydWN0IHRjX3RiZl9xb3B0ICpxb3B0OwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpydGFiID0gTlVMTDsKIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcHRhYiA9IE5VTEw7Ci0Jc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRtcDsKIAlzdHJ1Y3QgUWRpc2MgKmNoaWxkID0gTlVMTDsKIAlpbnQgbWF4X3NpemUsbjsKIApAQCAtMjk1LDEzICsyOTQsOSBAQAogCXEtPnRva2VucyA9IHEtPmJ1ZmZlcjsKIAlxLT5wdG9rZW5zID0gcS0+bXR1OwogCi0JdG1wID0gcS0+Ul90YWI7Ci0JcS0+Ul90YWIgPSBydGFiOwotCXJ0YWIgPSB0bXA7CisJc3dhcChxLT5SX3RhYiwgcnRhYik7CisJc3dhcChxLT5QX3RhYiwgcHRhYik7CiAKLQl0bXAgPSBxLT5QX3RhYjsKLQlxLT5QX3RhYiA9IHB0YWI7Ci0JcHRhYiA9IHRtcDsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAllcnIgPSAwOwogZG9uZToKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RlYnVnLmMgYi9uZXQvc2N0cC9kZWJ1Zy5jCmluZGV4IDY3NzE1ZjQuLjdmZjU0OGEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2RlYnVnLmMKKysrIGIvbmV0L3NjdHAvZGVidWcuYwpAQCAtODYsNiArODYsOSBAQAogCWNhc2UgU0NUUF9DSURfRldEX1RTTjoKIAkJcmV0dXJuICJGV0RfVFNOIjsKIAorCWNhc2UgU0NUUF9DSURfQVVUSDoKKwkJcmV0dXJuICJBVVRIIjsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTEzNSw2ICsxMzgsNyBAQAogCSJQUklNSVRJVkVfQUJPUlQiLAogCSJQUklNSVRJVkVfU0VORCIsCiAJIlBSSU1JVElWRV9SRVFVRVNUSEVBUlRCRUFUIiwKKwkiUFJJTUlUSVZFX0FTQ09ORiIsCiB9OwogCiAvKiBMb29rdXAgcHJpbWl0aXZlIGRlYnVnIG5hbWUuICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jIGIvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYwppbmRleCA0YzhkOWY0Li45MDVmZGE1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCisrKyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKQEAgLTExMSw3ICsxMTEsOCBAQAogCQlpZiAoc2N0cF9hZGRpcF9lbmFibGUpIHsKIAkJCWF1dGhfY2h1bmtzLT5jaHVua3NbMF0gPSBTQ1RQX0NJRF9BU0NPTkY7CiAJCQlhdXRoX2NodW5rcy0+Y2h1bmtzWzFdID0gU0NUUF9DSURfQVNDT05GX0FDSzsKLQkJCWF1dGhfY2h1bmtzLT5wYXJhbV9oZHIubGVuZ3RoICs9IGh0b25zKDIpOworCQkJYXV0aF9jaHVua3MtPnBhcmFtX2hkci5sZW5ndGggPQorCQkJCQlodG9ucyhzaXplb2Yoc2N0cF9wYXJhbWhkcl90KSArIDIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jCmluZGV4IDA3ZDU4OTAuLjdkMDhmNTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHB1dC5jCisrKyBiL25ldC9zY3RwL291dHB1dC5jCkBAIC00OSwxMyArNDksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAotI2lmbmRlZiBURVNUX0ZSQU1FCi0jaW5jbHVkZSA8bmV0L3RjcC5oPgotI2VuZGlmIC8qIFRFU1RfRlJBTUUgKG5vdCBkZWZpbmVkKSAqLwotCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+IC8qIGZvciBzYV9mYW1pbHlfdCAqLwogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IGJjNDExYzguLmQ3NjVmYzUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvb3V0cXVldWUuYwpAQCAtNDI4LDcgKzQyOCw4IEBACiAJCQkgKiByZXRyYW5zbWl0dGluZyBkdWUgdG8gVDMgdGltZW91dC4KIAkJCSAqLwogCQkJaWYgKHJlYXNvbiA9PSBTQ1RQX1JUWFJfVDNfUlRYICYmCi0JCQkgICAgKGppZmZpZXMgLSBjaHVuay0+c2VudF9hdCkgPCB0cmFuc3BvcnQtPmxhc3RfcnRvKQorCQkJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIGNodW5rLT5zZW50X2F0ICsKKwkJCQkJCSB0cmFuc3BvcnQtPmxhc3RfcnRvKSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogUkZDIDI5NjAgNi4yLjEgUHJvY2Vzc2luZyBhIFJlY2VpdmVkIFNBQ0sKQEAgLTE3NTcsNiArMTc1OCw5IEBACiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxjaHVuaywgKnRlbXA7CiAKKwlpZiAoIWFzb2MtPnBlZXIucHJzY3RwX2NhcGFibGUpCisJCXJldHVybjsKKwogCS8qIFBSLVNDVFAgQzEpIExldCBTYWNrQ3VtQWNrIGJlIHRoZSBDdW11bGF0aXZlIFRTTiBBQ0sgY2FycmllZCBpbiB0aGUKIAkgKiByZWNlaXZlZCBTQUNLLgogCSAqCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCBjMWUzMTZlLi5jYjE5OGFmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTY5MiwxNSArNjkyLDIwIEBACiBzdGF0aWMgaW50IHNjdHBfY3RsX3NvY2tfaW5pdCh2b2lkKQogewogCWludCBlcnI7Ci0Jc2FfZmFtaWx5X3QgZmFtaWx5OworCXNhX2ZhbWlseV90IGZhbWlseSA9IFBGX0lORVQ7CiAKIAlpZiAoc2N0cF9nZXRfcGZfc3BlY2lmaWMoUEZfSU5FVDYpKQogCQlmYW1pbHkgPSBQRl9JTkVUNjsKLQllbHNlCi0JCWZhbWlseSA9IFBGX0lORVQ7CiAKIAllcnIgPSBpbmV0X2N0bF9zb2NrX2NyZWF0ZSgmc2N0cF9jdGxfc29jaywgZmFtaWx5LAogCQkJCSAgIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsICZpbml0X25ldCk7CisKKwkvKiBJZiBJUHY2IHNvY2tldCBjb3VsZCBub3QgYmUgY3JlYXRlZCwgdHJ5IHRoZSBJUHY0IHNvY2tldCAqLworCWlmIChlcnIgPCAwICYmIGZhbWlseSA9PSBQRl9JTkVUNikKKwkJZXJyID0gaW5ldF9jdGxfc29ja19jcmVhdGUoJnNjdHBfY3RsX3NvY2ssIEFGX0lORVQsCisJCQkJCSAgIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsCisJCQkJCSAgICZpbml0X25ldCk7CisKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJTQ1RQOiBGYWlsZWQgdG8gY3JlYXRlIHRoZSBTQ1RQIGNvbnRyb2wgc29ja2V0LlxuIik7CkBAIC0xMjk3LDkgKzEzMDIsOCBAQAogb3V0OgogCXJldHVybiBzdGF0dXM7CiBlcnJfdjZfYWRkX3Byb3RvY29sOgotCXNjdHBfdjZfZGVsX3Byb3RvY29sKCk7Ci1lcnJfYWRkX3Byb3RvY29sOgogCXNjdHBfdjRfZGVsX3Byb3RvY29sKCk7CitlcnJfYWRkX3Byb3RvY29sOgogCWluZXRfY3RsX3NvY2tfZGVzdHJveShzY3RwX2N0bF9zb2NrKTsKIGVycl9jdGxfc29ja19pbml0OgogCXNjdHBfdjZfcHJvdG9zd19leGl0KCk7CkBAIC0xMzEwLDcgKzEzMTQsNiBAQAogCXNjdHBfdjRfcGZfZXhpdCgpOwogCXNjdHBfdjZfcGZfZXhpdCgpOwogCXNjdHBfc3lzY3RsX3VucmVnaXN0ZXIoKTsKLQlsaXN0X2RlbCgmc2N0cF9hZl9pbmV0Lmxpc3QpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpc2N0cF9wb3J0X2hhc2h0YWJsZSwKIAkJICAgZ2V0X29yZGVyKHNjdHBfcG9ydF9oYXNoc2l6ZSAqCiAJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9iaW5kX2hhc2hidWNrZXQpKSk7CkBAIC0xMzU4LDcgKzEzNjEsNiBAQAogCXNjdHBfdjRfcGZfZXhpdCgpOwogCiAJc2N0cF9zeXNjdGxfdW5yZWdpc3RlcigpOwotCWxpc3RfZGVsKCZzY3RwX2FmX2luZXQubGlzdCk7CiAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXNjdHBfYXNzb2NfaGFzaHRhYmxlLAogCQkgICBnZXRfb3JkZXIoc2N0cF9hc3NvY19oYXNoc2l6ZSAqCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggYjQwZTk1Zi4uNjg1MWVlOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMjI0LDcgKzIyNCw5IEBACiAJCW51bV9leHQgKz0gMjsKIAl9CiAKLQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOworCWlmIChzcC0+YWRhcHRhdGlvbl9pbmQpCisJCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CisKIAljaHVua3NpemUgKz0gdnBhcmFtX2xlbjsKIAogCS8qIEFjY291bnQgZm9yIEFVVEggcmVsYXRlZCBwYXJhbWV0ZXJzICovCkBAIC0zMDQsMTAgKzMwNiwxMiBAQAogCWlmIChzY3RwX3Byc2N0cF9lbmFibGUpCiAJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YocHJzY3RwX3BhcmFtKSwgJnByc2N0cF9wYXJhbSk7CiAKLQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKLQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOwotCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzcC0+YWRhcHRhdGlvbl9pbmQpOwotCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKSB7CisJCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOworCQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOworCQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKKwkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCX0KIAogCS8qIEFkZCBTQ1RQLUFVVEggY2h1bmtzIHRvIHRoZSBwYXJhbWV0ZXIgbGlzdCAqLwogCWlmIChzY3RwX2F1dGhfZW5hYmxlKSB7CkBAIC0zMzIsNiArMzM2LDcgQEAKIAlzY3RwX2luaXRoZHJfdCBpbml0YWNrOwogCXN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWw7CiAJdW5pb24gc2N0cF9wYXJhbXMgYWRkcnM7CisJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJaW50IGFkZHJzX2xlbjsKIAlzY3RwX2Nvb2tpZV9wYXJhbV90ICpjb29raWU7CiAJaW50IGNvb2tpZV9sZW47CkBAIC0zNjYsMjIgKzM3MSwyNCBAQAogCS8qIENhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGxvY2F0aW9uLCBpbmNsdWRlIHRoZSByZXNlcnZlZAogCSAqIHNwYWNlIGZvciByZXBvcnRpbmcgdW5rbm93biBwYXJhbWV0ZXJzIGlmIGl0IGlzIHNwZWNpZmllZC4KIAkgKi8KKwlzcCA9IHNjdHBfc2soYXNvYy0+YmFzZS5zayk7CiAJY2h1bmtzaXplID0gc2l6ZW9mKGluaXRhY2spICsgYWRkcnNfbGVuICsgY29va2llX2xlbiArIHVua3BhcmFtX2xlbjsKIAogCS8qIFRlbGwgcGVlciB0aGF0IHdlJ2xsIGRvIEVDTiBvbmx5IGlmIHBlZXIgYWR2ZXJ0aXNlZCBzdWNoIGNhcC4gICovCiAJaWYgKGFzb2MtPnBlZXIuZWNuX2NhcGFibGUpCiAJCWNodW5rc2l6ZSArPSBzaXplb2YoZWNhcF9wYXJhbSk7CiAKLQlpZiAoc2N0cF9wcnNjdHBfZW5hYmxlKQorCWlmIChhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQogCQljaHVua3NpemUgKz0gc2l6ZW9mKHByc2N0cF9wYXJhbSk7CiAKLQlpZiAoc2N0cF9hZGRpcF9lbmFibGUpIHsKKwlpZiAoYXNvYy0+cGVlci5hc2NvbmZfY2FwYWJsZSkgewogCQlleHRlbnNpb25zW251bV9leHRdID0gU0NUUF9DSURfQVNDT05GOwogCQlleHRlbnNpb25zW251bV9leHQrMV0gPSBTQ1RQX0NJRF9BU0NPTkZfQUNLOwogCQludW1fZXh0ICs9IDI7CiAJfQogCi0JY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKQorCQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOwogCiAJaWYgKGFzb2MtPnBlZXIuYXV0aF9jYXBhYmxlKSB7CiAJCWF1dGhfcmFuZG9tID0gKHNjdHBfcGFyYW1oZHJfdCAqKWFzb2MtPmMuYXV0aF9yYW5kb207CkBAIC00MzIsMTAgKzQzOSwxMiBAQAogCWlmIChhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKHByc2N0cF9wYXJhbSksICZwcnNjdHBfcGFyYW0pOwogCi0JYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7Ci0JYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKLQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc2N0cF9zayhhc29jLT5iYXNlLnNrKS0+YWRhcHRhdGlvbl9pbmQpOwotCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKSB7CisJCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOworCQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOworCQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKKwkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCX0KIAogCWlmIChhc29jLT5wZWVyLmF1dGhfY2FwYWJsZSkgewogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgbnRvaHMoYXV0aF9yYW5kb20tPmxlbmd0aCksCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggMDE0NmNmYi4uZTIwMjBlYiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtNDM0LDcgKzQzNCw4IEBACiAgKgogICovCiBzdGF0aWMgdm9pZCBzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCisJCQkJCSBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkJIGludCBpc19oYikKIHsKIAkvKiBUaGUgY2hlY2sgZm9yIGFzc29jaWF0aW9uJ3Mgb3ZlcmFsbCBlcnJvciBjb3VudGVyIGV4Y2VlZGluZyB0aGUKIAkgKiB0aHJlc2hvbGQgaXMgZG9uZSBpbiB0aGUgc3RhdGUgZnVuY3Rpb24uCkBAIC00NjYsNyArNDY3LDcgQEAKIAkgKiBUaGUgZmlyc3QgdW5hY2tub3dsZWdlZCBIQiB0cmlnZ2VycyBpdC4gIFdlIGRvIHRoaXMgd2l0aCBhIGZsYWcKIAkgKiB0aGF0IGluZGljYXRlcyB0aGF0IHdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgSEIuCiAJICovCi0JaWYgKHRyYW5zcG9ydC0+aGJfc2VudCkgeworCWlmICghaXNfaGIgfHwgdHJhbnNwb3J0LT5oYl9zZW50KSB7CiAJCXRyYW5zcG9ydC0+bGFzdF9ydG8gPSB0cmFuc3BvcnQtPnJ0bzsKIAkJdHJhbnNwb3J0LT5ydG8gPSBtaW4oKHRyYW5zcG9ydC0+cnRvICogMiksIHRyYW5zcG9ydC0+YXNvYy0+cnRvX21heCk7CiAJfQpAQCAtNjU3LDIwICs2NTgsNiBAQAogCQlzY3RwX3RyYW5zcG9ydF9ob2xkKHQpOwogfQogCi0vKiBIZWxwZXIgZnVuY3Rpb24gdG8gZG8gYSB0cmFuc3BvcnQgcmVzZXQgYXQgdGhlIGV4cGlyeSBvZiB0aGUgaGVhcmJlYXQKLSAqIHRpbWVyLgotICovCi1zdGF0aWMgdm9pZCBzY3RwX2NtZF90cmFuc3BvcnRfcmVzZXQoc2N0cF9jbWRfc2VxX3QgKmNtZHMsCi0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkgICAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCkKLXsKLQlzY3RwX3RyYW5zcG9ydF9sb3dlcl9jd25kKHQsIFNDVFBfTE9XRVJfQ1dORF9JTkFDVElWRSk7Ci0KLQkvKiBNYXJrIG9uZSBzdHJpa2UgYWdhaW5zdCBhIHRyYW5zcG9ydC4gICovCi0Jc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCB0KTsKLQotCXQtPmhiX3NlbnQgPSAxOwotfQogCiAvKiBIZWxwZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcHJvY2VzcyBTQUNLIGNvbW1hbmQuICAqLwogc3RhdGljIGludCBzY3RwX2NtZF9wcm9jZXNzX3NhY2soc2N0cF9jbWRfc2VxX3QgKmNtZHMsCkBAIC04MDAsMzYgKzc4Nyw0OCBAQAogCQkJCSAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJCSAgIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaykKIHsKLQlzdHJ1Y3Qgc2N0cF9vcGVycl9jaHVuayAqb3BlcnJfY2h1bms7CiAJc3RydWN0IHNjdHBfZXJyaGRyICplcnJfaGRyOworCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjsKIAotCW9wZXJyX2NodW5rID0gKHN0cnVjdCBzY3RwX29wZXJyX2NodW5rICopY2h1bmstPmNodW5rX2hkcjsKLQllcnJfaGRyID0gJm9wZXJyX2NodW5rLT5lcnJfaGRyOworCXdoaWxlIChjaHVuay0+Y2h1bmtfZW5kID4gY2h1bmstPnNrYi0+ZGF0YSkgeworCQllcnJfaGRyID0gKHN0cnVjdCBzY3RwX2VycmhkciAqKShjaHVuay0+c2tiLT5kYXRhKTsKIAotCXN3aXRjaCAoZXJyX2hkci0+Y2F1c2UpIHsKLQljYXNlIFNDVFBfRVJST1JfVU5LTk9XTl9DSFVOSzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2NodW5raGRyICp1bmtfY2h1bmtfaGRyOworCQlldiA9IHNjdHBfdWxwZXZlbnRfbWFrZV9yZW1vdGVfZXJyb3IoYXNvYywgY2h1bmssIDAsCisJCQkJCQkgICAgIEdGUF9BVE9NSUMpOworCQlpZiAoIWV2KQorCQkJcmV0dXJuOwogCi0JCXVua19jaHVua19oZHIgPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKillcnJfaGRyLT52YXJpYWJsZTsKLQkJc3dpdGNoICh1bmtfY2h1bmtfaGRyLT50eXBlKSB7Ci0JCS8qIEFERElQIDQuMSBBOSkgSWYgdGhlIHBlZXIgcmVzcG9uZHMgdG8gYW4gQVNDT05GIHdpdGggYW4KLQkJICogRVJST1IgY2h1bmsgcmVwb3J0aW5nIHRoYXQgaXQgZGlkIG5vdCByZWNvZ25pemVkIHRoZSBBU0NPTkYKLQkJICogY2h1bmsgdHlwZSwgdGhlIHNlbmRlciBvZiB0aGUgQVNDT05GIE1VU1QgTk9UIHNlbmQgYW55Ci0JCSAqIGZ1cnRoZXIgQVNDT05GIGNodW5rcyBhbmQgTVVTVCBzdG9wIGl0cyBULTQgdGltZXIuCi0JCSAqLwotCQljYXNlIFNDVFBfQ0lEX0FTQ09ORjoKLQkJCWFzb2MtPnBlZXIuYXNjb25mX2NhcGFibGUgPSAwOwotCQkJc2N0cF9hZGRfY21kX3NmKGNtZHMsIFNDVFBfQ01EX1RJTUVSX1NUT1AsCisJCXNjdHBfdWxwcV90YWlsX2V2ZW50KCZhc29jLT51bHBxLCBldik7CisKKwkJc3dpdGNoIChlcnJfaGRyLT5jYXVzZSkgeworCQljYXNlIFNDVFBfRVJST1JfVU5LTk9XTl9DSFVOSzoKKwkJeworCQkJc2N0cF9jaHVua2hkcl90ICp1bmtfY2h1bmtfaGRyOworCisJCQl1bmtfY2h1bmtfaGRyID0gKHNjdHBfY2h1bmtoZHJfdCAqKWVycl9oZHItPnZhcmlhYmxlOworCQkJc3dpdGNoICh1bmtfY2h1bmtfaGRyLT50eXBlKSB7CisJCQkvKiBBRERJUCA0LjEgQTkpIElmIHRoZSBwZWVyIHJlc3BvbmRzIHRvIGFuIEFTQ09ORiB3aXRoCisJCQkgKiBhbiBFUlJPUiBjaHVuayByZXBvcnRpbmcgdGhhdCBpdCBkaWQgbm90IHJlY29nbml6ZWQKKwkJCSAqIHRoZSBBU0NPTkYgY2h1bmsgdHlwZSwgdGhlIHNlbmRlciBvZiB0aGUgQVNDT05GIE1VU1QKKwkJCSAqIE5PVCBzZW5kIGFueSBmdXJ0aGVyIEFTQ09ORiBjaHVua3MgYW5kIE1VU1Qgc3RvcCBpdHMKKwkJCSAqIFQtNCB0aW1lci4KKwkJCSAqLworCQkJY2FzZSBTQ1RQX0NJRF9BU0NPTkY6CisJCQkJaWYgKGFzb2MtPnBlZXIuYXNjb25mX2NhcGFibGUgPT0gMCkKKwkJCQkJYnJlYWs7CisKKwkJCQlhc29jLT5wZWVyLmFzY29uZl9jYXBhYmxlID0gMDsKKwkJCQlzY3RwX2FkZF9jbWRfc2YoY21kcywgU0NUUF9DTURfVElNRVJfU1RPUCwKIAkJCQkJU0NUUF9UTyhTQ1RQX0VWRU5UX1RJTUVPVVRfVDRfUlRPKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQogCQkJYnJlYWs7CisJCX0KIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiB9CiAKQEAgLTE0NTksMTIgKzE0NTgsMTkgQEAKIAogCQljYXNlIFNDVFBfQ01EX1NUUklLRToKIAkJCS8qIE1hcmsgb25lIHN0cmlrZSBhZ2FpbnN0IGEgdHJhbnNwb3J0LiAgKi8KLQkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0KTsKKwkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0LAorCQkJCQkJICAgIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQ6CisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0lETEU6CiAJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OwotCQkJc2N0cF9jbWRfdHJhbnNwb3J0X3Jlc2V0KGNvbW1hbmRzLCBhc29jLCB0KTsKKwkJCXNjdHBfdHJhbnNwb3J0X2xvd2VyX2N3bmQodCwgU0NUUF9MT1dFUl9DV05EX0lOQUNUSVZFKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQ6CisJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OworCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCB0LCAxKTsKKwkJCXQtPmhiX3NlbnQgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfT046CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDNhMGNkMDcuLjU1YTYxYWEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC05ODgsNyArOTg4LDkgQEAKIAkJLyogU2V0IHRyYW5zcG9ydCBlcnJvciBjb3VudGVyIGFuZCBhc3NvY2lhdGlvbiBlcnJvciBjb3VudGVyCiAJCSAqIHdoZW4gc2VuZGluZyBoZWFydGJlYXQuCiAJCSAqLwotCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVCwKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRSwKKwkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwKIAkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKIAl9CiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsCkBAIC0zMTYzLDcgKzMxNjUsNiBAQAogCQkJCQlzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpCiB7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXJnOwotCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjsKIAogCWlmICghc2N0cF92dGFnX3ZlcmlmeShjaHVuaywgYXNvYykpCiAJCXJldHVybiBzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKQEAgLTMxNzMsMjEgKzMxNzQsMTAgQEAKIAkJcmV0dXJuIHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rbGVuKGVwLCBhc29jLCB0eXBlLCBhcmcsCiAJCQkJCQkgIGNvbW1hbmRzKTsKIAotCXdoaWxlIChjaHVuay0+Y2h1bmtfZW5kID4gY2h1bmstPnNrYi0+ZGF0YSkgewotCQlldiA9IHNjdHBfdWxwZXZlbnRfbWFrZV9yZW1vdGVfZXJyb3IoYXNvYywgY2h1bmssIDAsCi0JCQkJCQkgICAgIEdGUF9BVE9NSUMpOwotCQlpZiAoIWV2KQotCQkJZ290byBub21lbTsKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1BST0NFU1NfT1BFUlIsCisJCQlTQ1RQX0NIVU5LKGNodW5rKSk7CiAKLQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9FVkVOVF9VTFAsCi0JCQkJU0NUUF9VTFBFVkVOVChldikpOwotCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1BST0NFU1NfT1BFUlIsCi0JCQkJU0NUUF9DSFVOSyhjaHVuaykpOwotCX0KIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwotCi1ub21lbToKLQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKIH0KIAogLyoKQEAgLTQ5NjcsNyArNDk1Nyw3IEBACiAJICogICAgdG8gdGhhdCBhZGRyZXNzIGFuZCBub3QgYWNrbm93bGVkZ2VkIHdpdGhpbiBvbmUgUlRPLgogCSAqCiAJICovCi0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQsCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwKIAkJCVNDVFBfVFJBTlNQT1JUKGFyZykpOwogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IGRlYTg2NGYuLjVmYjNhOGMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0zMDY5LDkgKzMwNjksNiBAQAogCWludCB2YWw7CiAJaW50IGFzc29jX2lkID0gMDsKIAotCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAob3B0bGVuID09IHNpemVvZihpbnQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgIlNDVFA6IFVzZSBvZiBpbnQgaW4gbWF4X2J1cnN0IHNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CkBAIC01MjgzLDE2ICs1MjgwLDE0IEBACiAJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CiAKLQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGxlbiA9PSBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIik7CiAJCXBhcmFtcy5hc3NvY19pZCA9IDA7Ci0JfSBlbHNlIGlmIChsZW4gPT0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIHsKKwl9IGVsc2UgaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UKQEAgLTU4NDgsMTI3ICs1ODQzLDEzIEBACiB9CiAKIC8qCi0gKiAzLjEuMyBsaXN0ZW4oKSAtIFVEUCBTdHlsZSBTeW50YXgKLSAqCi0gKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCi0gKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCi0gKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBPbmx5IFVEUCBzdHlsZSBzb2NrZXRzIHRoYXQgYXJlIG5vdCBwZWVsZWQgb2ZmIGFyZSBhbGxvd2VkIHRvCi0JICogbGlzdGVuKCkuCi0JICovCi0JaWYgKCFzY3RwX3N0eWxlKHNrLCBVRFApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCi0JaWYgKCFiYWNrbG9nKSB7Ci0JCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKLQkJCXJldHVybiAwOwotCi0JCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKLQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFJldHVybiBpZiB3ZSBhcmUgYWxyZWFkeSBsaXN0ZW5pbmcuICovCi0JaWYgKHNjdHBfc3N0YXRlKHNrLCBMSVNURU5JTkcpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgYSBiaW5kKCkgb3Igc2N0cF9iaW5keCgpIGlzIG5vdCBjYWxsZWQgcHJpb3IgdG8gYSBsaXN0ZW4oKQotCSAqIGNhbGwgdGhhdCBhbGxvd3MgbmV3IGFzc29jaWF0aW9ucyB0byBiZSBhY2NlcHRlZCwgdGhlIHN5c3RlbQotCSAqIHBpY2tzIGFuIGVwaGVtZXJhbCBwb3J0IGFuZCB3aWxsIGNob29zZSBhbiBhZGRyZXNzIHNldCBlcXVpdmFsZW50Ci0JICogdG8gYmluZGluZyB3aXRoIGEgd2lsZGNhcmQgYWRkcmVzcy4KLQkgKgotCSAqIFRoaXMgaXMgbm90IGN1cnJlbnRseSBzcGVsbGVkIG91dCBpbiB0aGUgU0NUUCBzb2NrZXRzCi0JICogZXh0ZW5zaW9ucyBkcmFmdCwgYnV0IGZvbGxvd3MgdGhlIHByYWN0aWNlIGFzIHNlZW4gaW4gVENQCi0JICogc29ja2V0cy4KLQkgKgotCSAqIEFkZGl0aW9uYWxseSwgdHVybiBvZmYgZmFzdHJldXNlIGZsYWcgc2luY2Ugd2UgYXJlIG5vdCBsaXN0ZW5pbmcKLQkgKi8KLQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0xJU1RFTklORzsKLQlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KSB7Ci0JCWlmIChzY3RwX2F1dG9iaW5kKHNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCX0gZWxzZSB7Ci0JCWlmIChzY3RwX2dldF9wb3J0KHNrLCBpbmV0X3NrKHNrKS0+bnVtKSkgewotCQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCQlyZXR1cm4gLUVBRERSSU5VU0U7Ci0JCX0KLQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMDsKLQl9Ci0KLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgotICogNC4xLjMgbGlzdGVuKCkgLSBUQ1AgU3R5bGUgU3ludGF4Ci0gKgotICogICBBcHBsaWNhdGlvbnMgdXNlcyBsaXN0ZW4oKSB0byByZWFkeSB0aGUgU0NUUCBlbmRwb2ludCBmb3IgYWNjZXB0aW5nCi0gKiAgIGluYm91bmQgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zdHJlYW1fbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLwotCWlmICghYmFja2xvZykgewotCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCi0JCQlyZXR1cm4gMDsKLQotCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7Ci0JCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCi0JICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCi0JICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKLQkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgotCSAqCi0JICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKLQkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKLQkgKiBzb2NrZXRzLgotCSAqLwotCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfTElTVEVOSU5HOwotCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKLQkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfSBlbHNlCi0JCXNjdHBfc2soc2spLT5iaW5kX2hhc2gtPmZhc3RyZXVzZSA9IDA7Ci0KLQlzay0+c2tfbWF4X2Fja19iYWNrbG9nID0gYmFja2xvZzsKLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgogICogIE1vdmUgYSBzb2NrZXQgdG8gTElTVEVOSU5HIHN0YXRlLgogICovCi1pbnQgc2N0cF9pbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKK1NDVFBfU1RBVElDIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc3AtPmVwOwogCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtID0gTlVMTDsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWlmICh1bmxpa2VseShiYWNrbG9nIDwgMCkpCi0JCWdvdG8gb3V0OwotCi0Jc2N0cF9sb2NrX3NvY2soc2spOwotCi0JaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQotCQlnb3RvIG91dDsKIAogCS8qIEFsbG9jYXRlIEhNQUMgZm9yIGdlbmVyYXRpbmcgY29va2llLiAqLwogCWlmICghc2N0cF9zayhzayktPmhtYWMgJiYgc2N0cF9obWFjX2FsZykgewpAQCAtNTk3OSwzNCArNTg2MCw5NiBAQAogCQkJCSAgICAgICAiU0NUUDogZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLAogCQkJCQlzY3RwX2htYWNfYWxnLCBQVFJfRVJSKHRmbSkpOwogCQkJfQotCQkJZXJyID0gLUVOT1NZUzsKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwkJc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CisJfQorCisJLyoKKwkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCisJICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCisJICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKKwkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgorCSAqCisJICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKKwkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKKwkgKiBzb2NrZXRzLgorCSAqCisJICovCisJc2stPnNrX3N0YXRlID0gU0NUUF9TU19MSVNURU5JTkc7CisJaWYgKCFlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgeworCQlpZiAoc2N0cF9hdXRvYmluZChzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwl9IGVsc2UgeworCQlpZiAoc2N0cF9nZXRfcG9ydChzaywgaW5ldF9zayhzayktPm51bSkpIHsKKwkJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQl9CiAJfQogCi0Jc3dpdGNoIChzb2NrLT50eXBlKSB7Ci0JY2FzZSBTT0NLX1NFUVBBQ0tFVDoKLQkJZXJyID0gc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT0NLX1NUUkVBTToKLQkJZXJyID0gc2N0cF9zdHJlYW1fbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CisJc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2c7CisJc2N0cF9oYXNoX2VuZHBvaW50KGVwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIDQuMS4zIC8gNS4xLjMgbGlzdGVuKCkKKyAqCisgKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCisgKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCisgKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgorICoKKyAqICAgT24gVENQIHN0eWxlIHNvY2tldHMsIGFwcGxpY2F0aW9ucyB1c2UgbGlzdGVuKCkgdG8gcmVhZHkgdGhlIFNDVFAKKyAqICAgZW5kcG9pbnQgZm9yIGFjY2VwdGluZyBpbmJvdW5kIGFzc29jaWF0aW9ucy4KKyAqCisgKiAgIE9uIGJvdGggdHlwZXMgb2YgZW5kcG9pbnRzIGEgYmFja2xvZyBvZiAnMCcgZGlzYWJsZXMgbGlzdGVuaW5nLgorICoKKyAqICBNb3ZlIGEgc29ja2V0IHRvIExJU1RFTklORyBzdGF0ZS4KKyAqLworaW50IHNjdHBfaW5ldF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktPmVwOworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KGJhY2tsb2cgPCAwKSkKKwkJcmV0dXJuIGVycjsKKworCXNjdHBfbG9ja19zb2NrKHNrKTsKKworCS8qIFBlZWxlZC1vZmYgc29ja2V0cyBhcmUgbm90IGFsbG93ZWQgdG8gbGlzdGVuKCkuICAqLworCWlmIChzY3RwX3N0eWxlKHNrLCBVRFBfSElHSF9CQU5EV0lEVEgpKQorCQlnb3RvIG91dDsKKworCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKKwkJZ290byBvdXQ7CisKKwkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLworCWlmICghYmFja2xvZykgeworCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCisJCQlnb3RvIG91dDsKKworCQllcnIgPSAwOworCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7CisJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQlpZiAoc2stPnNrX3JldXNlKQorCQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGVycikKLQkJZ290byBjbGVhbnVwOworCS8qIElmIHdlIGFyZSBhbHJlYWR5IGxpc3RlbmluZywganVzdCB1cGRhdGUgdGhlIGJhY2tsb2cgKi8KKwlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCisJCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOworCWVsc2UgeworCQllcnIgPSBzY3RwX2xpc3Rlbl9zdGFydChzaywgYmFja2xvZyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CiAKLQkvKiBTdG9yZSBhd2F5IHRoZSB0cmFuc2Zvcm0gcmVmZXJlbmNlLiAqLwotCWlmICghc2N0cF9zayhzayktPmhtYWMpCi0JCXNjdHBfc2soc2spLT5obWFjID0gdGZtOworCWVyciA9IDA7CiBvdXQ6CiAJc2N0cF9yZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnI7Ci1jbGVhbnVwOgotCWNyeXB0b19mcmVlX2hhc2godGZtKTsKLQlnb3RvIG91dDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3RyYW5zcG9ydC5jIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKaW5kZXggNWMyOWIxNC4uZTVkZGU0NSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKQEAgLTU0Myw4ICs1NDMsOCBAQAogCQkgKiBjb25nZXN0aW9uIGluZGljYXRpb25zIG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IHdpbmRvdyBvZgogCQkgKiBkYXRhIChvciBtb3JlIGxvb3NlbHkgbW9yZSB0aGFuIG9uY2UgZXZlcnkgcm91bmQtdHJpcCB0aW1lKS4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX2VjbmVfcmVkdWNlZCkgPgotCQkgICAgdHJhbnNwb3J0LT5ydHQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdHJhbnNwb3J0LT5sYXN0X3RpbWVfZWNuZV9yZWR1Y2VkICsKKwkJCQkJdHJhbnNwb3J0LT5ydHQpKSB7CiAJCQl0cmFuc3BvcnQtPnNzdGhyZXNoID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAogCQkJCQkJICA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPnNzdGhyZXNoOwpAQCAtNTYxLDcgKzU2MSw4IEBACiAJCSAqIHRvIGJlIGRvbmUgZXZlcnkgUlRPIGludGVydmFsLCB3ZSBkbyBpdCBldmVyeSBoZWFyYmVhdAogCQkgKiBpbnRlcnZhbC4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQpID4gdHJhbnNwb3J0LT5ydG8pCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQgKworCQkJCQl0cmFuc3BvcnQtPnJ0bykpCiAJCQl0cmFuc3BvcnQtPmN3bmQgPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCiAJCQkJCQkgNCp0cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCA0N2EzZGMwLi5hZjAyMDVmIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0xMDc0LDYgKzEwNzQsMTMgQEAKIAogCWxvY2tfc29jayhzayk7CiAKKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CisJaWYgKG9uKQorCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKKwllbHNlCisJCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKKwogCXByZXYgPSAmKHNvY2stPmZhc3luY19saXN0KTsKIAogCWZvciAoZmEgPSAqcHJldjsgZmEgIT0gTlVMTDsgcHJldiA9ICZmYS0+ZmFfbmV4dCwgZmEgPSAqcHJldikKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCAzODVmNDI3Li5mZjUwYTA1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC0yOTMsMTEgKzI5Myw2IEBACiAJcnBjX2NsZWFyX3F1ZXVlZCh0YXNrKTsKIAlpZiAocnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKHRhc2spKQogCQlyZXR1cm47Ci0JLyogV2UgbWlnaHQgaGF2ZSByYWNlZCAqLwotCWlmIChSUENfSVNfUVVFVUVEKHRhc2spKSB7Ci0JCXJwY19jbGVhcl9ydW5uaW5nKHRhc2spOwotCQlyZXR1cm47Ci0JfQogCWlmIChSUENfSVNfQVNZTkModGFzaykpIHsKIAkJaW50IHN0YXR1czsKIApAQCAtNjA3LDcgKzYwMiw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKQogewotCWludAkJc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKnF1ZXVlOworCWludCB0YXNrX2lzX2FzeW5jID0gUlBDX0lTX0FTWU5DKHRhc2spOworCWludCBzdGF0dXMgPSAwOwogCiAJZHByaW50aygiUlBDOiAlNXUgX19ycGNfZXhlY3V0ZSBmbGFncz0weCV4XG4iLAogCQkJdGFzay0+dGtfcGlkLCB0YXNrLT50a19mbGFncyk7CkBAIC02NDcsMTUgKzY0NCwyNSBAQAogCQkgKi8KIAkJaWYgKCFSUENfSVNfUVVFVUVEKHRhc2spKQogCQkJY29udGludWU7Ci0JCXJwY19jbGVhcl9ydW5uaW5nKHRhc2spOwotCQlpZiAoUlBDX0lTX0FTWU5DKHRhc2spKSB7Ci0JCQkvKiBDYXJlZnVsISB3ZSBtYXkgaGF2ZSByYWNlZC4uLiAqLwotCQkJaWYgKFJQQ19JU19RVUVVRUQodGFzaykpCi0JCQkJcmV0dXJuOwotCQkJaWYgKHJwY190ZXN0X2FuZF9zZXRfcnVubmluZyh0YXNrKSkKLQkJCQlyZXR1cm47CisJCS8qCisJCSAqIFRoZSBxdWV1ZS0+bG9jayBwcm90ZWN0cyBhZ2FpbnN0IHJhY2VzIHdpdGgKKwkJICogcnBjX21ha2VfcnVubmFibGUoKS4KKwkJICoKKwkJICogTm90ZSB0aGF0IG9uY2Ugd2UgY2xlYXIgUlBDX1RBU0tfUlVOTklORyBvbiBhbiBhc3luY2hyb25vdXMKKwkJICogcnBjX3Rhc2ssIHJwY19tYWtlX3J1bm5hYmxlKCkgY2FuIGFzc2lnbiBpdCB0byBhCisJCSAqIGRpZmZlcmVudCB3b3JrcXVldWUuIFdlIHRoZXJlZm9yZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlCisJCSAqIHJwY190YXNrIHBvaW50ZXIgbWF5IHN0aWxsIGJlIGRlcmVmZXJlbmNlZC4KKwkJICovCisJCXF1ZXVlID0gdGFzay0+dGtfd2FpdHF1ZXVlOworCQlzcGluX2xvY2tfYmgoJnF1ZXVlLT5sb2NrKTsKKwkJaWYgKCFSUENfSVNfUVVFVUVEKHRhc2spKSB7CisJCQlzcGluX3VubG9ja19iaCgmcXVldWUtPmxvY2spOwogCQkJY29udGludWU7CiAJCX0KKwkJcnBjX2NsZWFyX3J1bm5pbmcodGFzayk7CisJCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+bG9jayk7CisJCWlmICh0YXNrX2lzX2FzeW5jKQorCQkJcmV0dXJuOwogCiAJCS8qIHN5bmMgdGFzazogc2xlZXAgaGVyZSAqLwogCQlkcHJpbnRrKCJSUEM6ICU1dSBzeW5jIHRhc2sgZ29pbmcgdG8gc2xlZXBcbiIsIHRhc2stPnRrX3BpZCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IDI5ZTQwMWIuLjYyMDk4ZDEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAkJCXhwcnQsICh4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSA/ICJpcyIgOiAiaXMgbm90IikpOwogCiAJaWYgKCF4cHJ0X2JvdW5kKHhwcnQpKSB7Ci0JCXRhc2stPnRrX3N0YXR1cyA9IC1FSU87CisJCXRhc2stPnRrX3N0YXR1cyA9IC1FQUdBSU47CiAJCXJldHVybjsKIAl9CiAJaWYgKCF4cHJ0X2xvY2tfd3JpdGUoeHBydCwgdGFzaykpCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKaW5kZXggYjQ5ZTQzNC4uNTY4MzMwZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jCisrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAJaW50IGVyciwgc2VudCA9IDA7CiAKIAlpZiAodW5saWtlbHkoIXNvY2spKQotCQlyZXR1cm4gLUVOT1RDT05OOworCQlyZXR1cm4gLUVOT1RTT0NLOwogCiAJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKIAlpZiAoYmFzZSAhPSAwKSB7CkBAIC01NzcsNiArNTc3LDggQEAKIAkJCQlyZXEtPnJxX3N2ZWMtPmlvdl9iYXNlLAogCQkJCXJlcS0+cnFfc3ZlYy0+aW92X2xlbik7CiAKKwlpZiAoIXhwcnRfYm91bmQoeHBydCkpCisJCXJldHVybiAtRU5PVENPTk47CiAJc3RhdHVzID0geHNfc2VuZHBhZ2VzKHRyYW5zcG9ydC0+c29jaywKIAkJCSAgICAgIHhzX2FkZHIoeHBydCksCiAJCQkgICAgICB4cHJ0LT5hZGRybGVuLCB4ZHIsCkBAIC01OTQsNiArNTk2LDEwIEBACiAJfQogCiAJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIC1FTk9UU09DSzoKKwkJc3RhdHVzID0gLUVOT1RDT05OOworCQkvKiBTaG91bGQgd2UgY2FsbCB4c19jbG9zZSgpIGhlcmU/ICovCisJCWJyZWFrOwogCWNhc2UgLUVBR0FJTjoKIAkJeHNfbm9zcGFjZSh0YXNrKTsKIAkJYnJlYWs7CkBAIC02OTMsNiArNjk5LDEwIEBACiAJfQogCiAJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIC1FTk9UU09DSzoKKwkJc3RhdHVzID0gLUVOT1RDT05OOworCQkvKiBTaG91bGQgd2UgY2FsbCB4c19jbG9zZSgpIGhlcmU/ICovCisJCWJyZWFrOwogCWNhc2UgLUVBR0FJTjoKIAkJeHNfbm9zcGFjZSh0YXNrKTsKIAkJYnJlYWs7CkBAIC0xNTEyLDcgKzE1MjIsNyBAQAogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CiAJaW50IGVyciwgc3RhdHVzID0gLUVJTzsKIAotCWlmICh4cHJ0LT5zaHV0ZG93biB8fCAheHBydF9ib3VuZCh4cHJ0KSkKKwlpZiAoeHBydC0+c2h1dGRvd24pCiAJCWdvdG8gb3V0OwogCiAJLyogU3RhcnQgYnkgcmVzZXR0aW5nIGFueSBleGlzdGluZyBzdGF0ZSAqLwpAQCAtMTU1Myw3ICsxNTYzLDcgQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdHJhbnNwb3J0LT5zb2NrOwogCWludCBlcnIsIHN0YXR1cyA9IC1FSU87CiAKLQlpZiAoeHBydC0+c2h1dGRvd24gfHwgIXhwcnRfYm91bmQoeHBydCkpCisJaWYgKHhwcnQtPnNodXRkb3duKQogCQlnb3RvIG91dDsKIAogCS8qIFN0YXJ0IGJ5IHJlc2V0dGluZyBhbnkgZXhpc3Rpbmcgc3RhdGUgKi8KQEAgLTE2MzcsNiArMTY0Nyw5IEBACiAJCXdyaXRlX3VubG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCX0KIAorCWlmICgheHBydF9ib3VuZCh4cHJ0KSkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKwogCS8qIFRlbGwgdGhlIHNvY2tldCBsYXllciB0byBzdGFydCBjb25uZWN0aW5nLi4uICovCiAJeHBydC0+c3RhdC5jb25uZWN0X2NvdW50Kys7CiAJeHBydC0+c3RhdC5jb25uZWN0X3N0YXJ0ID0gamlmZmllczsKQEAgLTE2NTcsNyArMTY3MCw3IEBACiAJc3RydWN0IHNvY2tldCAqc29jayA9IHRyYW5zcG9ydC0+c29jazsKIAlpbnQgZXJyLCBzdGF0dXMgPSAtRUlPOwogCi0JaWYgKHhwcnQtPnNodXRkb3duIHx8ICF4cHJ0X2JvdW5kKHhwcnQpKQorCWlmICh4cHJ0LT5zaHV0ZG93bikKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXNvY2spIHsKQEAgLTE3MTcsNyArMTczMCw3IEBACiAJc3RydWN0IHNvY2tldCAqc29jayA9IHRyYW5zcG9ydC0+c29jazsKIAlpbnQgZXJyLCBzdGF0dXMgPSAtRUlPOwogCi0JaWYgKHhwcnQtPnNodXRkb3duIHx8ICF4cHJ0X2JvdW5kKHhwcnQpKQorCWlmICh4cHJ0LT5zaHV0ZG93bikKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXNvY2spIHsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmMgYi9uZXQvdGlwYy9iY2FzdC5jCmluZGV4IDNkZGFmZjQuLmEzYmZkNDAgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JjYXN0LmMKKysrIGIvbmV0L3RpcGMvYmNhc3QuYwpAQCAtMTE5LDcgKzExOSw3IEBACiBzdGF0aWMgc3RydWN0IGxpbmsgKmJjbCA9IE5VTEw7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJjX2xvY2spOwogCi1jaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7Citjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7CiAKIAogc3RhdGljIHUzMiBidWZfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKmJ1ZikKQEAgLTgwMCw3ICs4MDAsNyBAQAogCXRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKGJjbCwgQkNMSU5LX1dJTl9ERUZBVUxUKTsKIAliY2wtPmJfcHRyID0gJmJjYmVhcmVyLT5iZWFyZXI7CiAJYmNsLT5zdGF0ZSA9IFdPUktJTkdfV09SS0lORzsKLQlzcHJpbnRmKGJjbC0+bmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShiY2wtPm5hbWUsIHRpcGNfYmNsaW5rX25hbWUsIFRJUENfTUFYX0xJTktfTkFNRSk7CiAKIAlpZiAoQkNMSU5LX0xPR19CVUZfU0laRSkgewogCQljaGFyICpwYiA9IGttYWxsb2MoQkNMSU5LX0xPR19CVUZfU0laRSwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5oIGIvbmV0L3RpcGMvYmNhc3QuaAppbmRleCAyZjJkNzMxLi40YzE3NzFlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5oCisrKyBiL25ldC90aXBjL2JjYXN0LmgKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RydWN0IHRpcGNfbm9kZTsKIAotZXh0ZXJuIGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGJnLmMgYi9uZXQvdGlwYy9kYmcuYwppbmRleCAyOWVjYWU4Li4xODg1YTdlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9kYmcuYworKysgYi9uZXQvdGlwYy9kYmcuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJfQogCiAJaWYgKHBiLT5lY2hvKQotCQlwcmludGsocHJpbnRfc3RyaW5nKTsKKwkJcHJpbnRrKCIlcyIsIHByaW50X3N0cmluZyk7CiAKIAlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggMjBkOThjNS4uMmMyNGU3ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCisrKyBiL25ldC90aXBjL25vZGUuYwpAQCAtNzAzLDcgKzcwMyw3IEBACiAKIAlsaW5rX2luZm8uZGVzdCA9IGh0b25sKHRpcGNfb3duX2FkZHIgJiAweGZmZmZmMDApOwogCWxpbmtfaW5mby51cCA9IGh0b25sKDEpOwotCXNwcmludGYobGlua19pbmZvLnN0ciwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShsaW5rX2luZm8uc3RyLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9MSU5LX0lORk8sICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKIAogCS8qIEFkZCBUTFZzIGZvciBhbnkgb3RoZXIgbGlua3MgaW4gc2NvcGUgKi8KZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBkMWI4OTgyLi5iYWFjOTEwIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMTc4LDggKzExNzgsNyBAQAogCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAKIG91dDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAlpZiAobmV3c2spCiAJCXVuaXhfcmVsZWFzZV9zb2NrKG5ld3NrLCAwKTsKIAlpZiAob3RoZXIpCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCmluZGV4IDM5NzAxZGUuLjQ2NmUyZDIgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCkBAIC04Niw4ICs4NiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHdhbl9kZXZpY2UgKndhbnJvdXRlcl9maW5kX2RldmljZShjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgd2Fucm91dGVyX2RlbGV0ZV9pbnRlcmZhY2Uoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgY2hhciAqbmFtZSk7Ci1zdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKK3N0YXRpYyB2b2lkIGxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fYWNxdWlyZXMobG9jayk7CitzdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fcmVsZWFzZXMobG9jayk7CiAKIAogCkBAIC03NjMsMTIgKzc2NSwxNCBAQAogfQogCiBzdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX2FjcXVpcmVzKGxvY2spCiB7CiAJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgKnNtcF9mbGFncyk7CiB9CiAKIAogc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX3JlbGVhc2VzKGxvY2spCiB7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCAqc21wX2ZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKaW5kZXggMjY3ZjdmZi4uYzQ0ZDk2YiAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKQEAgLTgwLDYgKzgwLDcgQEAKICAqCUl0ZXJhdG9yCiAgKi8KIHN0YXRpYyB2b2lkICpyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2OwogCWxvZmZfdCBsID0gKnBvczsKQEAgLTEwMSw2ICsxMDIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoa2VybmVsX2xvY2spCiB7CiAJdW5sb2NrX2tlcm5lbCgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCBlMjhlMmI4Li4wOTJhZTZmIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTAyLDMgKzEwMiwxMyBAQAogCiBjb25maWcgTElCODAyMTFfQ1JZUFRfVEtJUAogCXRyaXN0YXRlCisKK2NvbmZpZyBMSUI4MDIxMV9ERUJVRworCWJvb2wgImxpYjgwMjExIGRlYnVnZ2luZyBtZXNzYWdlcyIKKwlkZXBlbmRzIG9uIExJQjgwMjExCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgWW91IGNhbiBlbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcworCSAgZnJvbSBsaWI4MDIxMS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IDA2NjhiMmJmLi4xN2ZlMzkwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgpAQCAtMzEsMTggKzMwLDI5IEBACiAgKiBvbmx5IHJlYWQgdGhlIGxpc3QsIGFuZCB0aGF0IGNhbiBoYXBwZW4gcXVpdGUKICAqIG9mdGVuIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBpdCBmb3IgZWFjaCBjb21tYW5kICovCiBMSVNUX0hFQUQoY2ZnODAyMTFfZHJ2X2xpc3QpOwotREVGSU5FX01VVEVYKGNmZzgwMjExX2Rydl9tdXRleCk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgY2ZnODAyMTFfZHJ2X2xpc3QsIGNmZzgwMjExX3JlZ2RvbWFpbiwKKyAqIGNvdW50cnlfaWVfcmVnZG9tYWluLCB0aGUgcmVnX2JlYWNvbl9saXN0IGFuZCB0aGUgdGhlIGxhc3QgcmVndWxhdG9yeQorICogcmVxdWVzdCByZWNlaXB0IChsYXN0X3JlcXVlc3QpLgorICovCitERUZJTkVfTVVURVgoY2ZnODAyMTFfbXV0ZXgpOwogCiAvKiBmb3IgZGVidWdmcyAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmllZWU4MDIxMV9kZWJ1Z2ZzX2RpcjsKIAotLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCi1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHkoaW50IHdpcGh5KQorLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKmRydjsKIAorCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRydi0+aWR4ID09IHdpcGh5KSB7CisJCWlmIChkcnYtPndpcGh5X2lkeCA9PSB3aXBoeV9pZHgpIHsKIAkJCXJlc3VsdCA9IGRydjsKIAkJCWJyZWFrOwogCQl9CkBAIC01MSwxNyArNjEsNDQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCWlmICghd2lwaHkpCisJCXJldHVybiBXSVBIWV9JRFhfU1RBTEU7CisJZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlyZXR1cm4gZHJ2LT53aXBoeV9pZHg7Cit9CisKIC8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLworc3RydWN0IHdpcGh5ICp3aXBoeV9pZHhfdG9fd2lwaHkoaW50IHdpcGh5X2lkeCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKworCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWRydiA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KTsKKwlpZiAoIWRydikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZkcnYtPndpcGh5OworfQorCisvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkISAqLwogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlpbnQgaWZpbmRleDsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmJ5d2lwaHkgPSBOVUxMLCAqYnlpZmlkeCA9IE5VTEw7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpieXdpcGh5aWR4ID0gTlVMTCwgKmJ5aWZpZHggPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV0pIHsKLQkJYnl3aXBoeSA9IGNmZzgwMjExX2Rydl9ieV93aXBoeSgKKwkJYnl3aXBoeWlkeCA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoCiAJCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZXSkpOwogCQllcnIgPSAtRU5PREVWOwogCX0KQEAgLTc4LDE0ICsxMTUsMTQgQEAKIAkJZXJyID0gLUVOT0RFVjsKIAl9CiAKLQlpZiAoYnl3aXBoeSAmJiBieWlmaWR4KSB7Ci0JCWlmIChieXdpcGh5ICE9IGJ5aWZpZHgpCisJaWYgKGJ5d2lwaHlpZHggJiYgYnlpZmlkeCkgeworCQlpZiAoYnl3aXBoeWlkeCAhPSBieWlmaWR4KQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJCWVsc2UKLQkJCXJldHVybiBieXdpcGh5OyAvKiA9PSBieWlmaWR4ICovCisJCQlyZXR1cm4gYnl3aXBoeWlkeDsgLyogPT0gYnlpZmlkeCAqLwogCX0KLQlpZiAoYnl3aXBoeSkKLQkJcmV0dXJuIGJ5d2lwaHk7CisJaWYgKGJ5d2lwaHlpZHgpCisJCXJldHVybiBieXdpcGh5aWR4OwogCiAJaWYgKGJ5aWZpZHgpCiAJCXJldHVybiBieWlmaWR4OwpAQCAtOTgsNyArMTM1LDcgQEAKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWRydiA9IF9fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhpbmZvKTsKIAogCS8qIGlmIGl0IGlzIG5vdCBhbiBlcnJvciB3ZSBncmFiIHRoZSBsb2NrIG9uCkBAIC0xMDcsNyArMTQ0LDcgQEAKIAlpZiAoIUlTX0VSUihkcnYpKQogCQltdXRleF9sb2NrKCZkcnYtPm10eCk7CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlyZXR1cm4gZHJ2OwogfQpAQCAtMTE4LDcgKzE1NSw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0OwpAQCAtMTI5LDcgKzE2Niw3IEBACiAJCWRydiA9IEVSUl9QVFIoLUVOT0RFVik7CiAJZGV2X3B1dChkZXYpOwogIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIGRydjsKIH0KIApAQCAtMTQzLDE2ICsxODAsMTYgQEAKIAkJCWNoYXIgKm5ld25hbWUpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JaW50IGlkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CisJaW50IHdpcGh5X2lkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIHByb2hpYml0IGNhbGxpbmcgdGhlIHRoaW5nIHBoeSVkIHdoZW4gJWQgaXMgbm90IGl0cyBudW1iZXIgKi8KLQlzc2NhbmYobmV3bmFtZSwgUEhZX05BTUUgIiVkJW4iLCAmaWR4LCAmdGFrZW4pOwotCWlmICh0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgJiYgaWR4ICE9IHJkZXYtPmlkeCkgewotCQkvKiBjb3VudCBudW1iZXIgb2YgcGxhY2VzIG5lZWRlZCB0byBwcmludCBpZHggKi8KKwlzc2NhbmYobmV3bmFtZSwgUEhZX05BTUUgIiVkJW4iLCAmd2lwaHlfaWR4LCAmdGFrZW4pOworCWlmICh0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgJiYgd2lwaHlfaWR4ICE9IHJkZXYtPndpcGh5X2lkeCkgeworCQkvKiBjb3VudCBudW1iZXIgb2YgcGxhY2VzIG5lZWRlZCB0byBwcmludCB3aXBoeV9pZHggKi8KIAkJZGlnaXRzID0gMTsKLQkJd2hpbGUgKGlkeCAvPSAxMCkKKwkJd2hpbGUgKHdpcGh5X2lkeCAvPSAxMCkKIAkJCWRpZ2l0cysrOwogCQkvKgogCQkgKiBkZW55IHRoZSBuYW1lIGlmIGl0IGlzIHBoeTxpZHg+IHdoZXJlIDxpZHg+IGlzIHByaW50ZWQKQEAgLTE5Myw3ICsyMzAsNyBAQAogCiAJcmVzdWx0ID0gMDsKIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWlmIChyZXN1bHQgPT0gMCkKIAkJbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShyZGV2KTsKIApAQCAtMjIwLDIyICsyNTcsMjIgQEAKIAogCWRydi0+b3BzID0gb3BzOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKLQlkcnYtPmlkeCA9IHdpcGh5X2NvdW50ZXIrKzsKKwlkcnYtPndpcGh5X2lkeCA9IHdpcGh5X2NvdW50ZXIrKzsKIAotCWlmICh1bmxpa2VseShkcnYtPmlkeCA8IDApKSB7CisJaWYgKHVubGlrZWx5KCF3aXBoeV9pZHhfdmFsaWQoZHJ2LT53aXBoeV9pZHgpKSkgewogCQl3aXBoeV9jb3VudGVyLS07Ci0JCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJCS8qIHVnaCwgd3JhcHBlZCEgKi8KIAkJa2ZyZWUoZHJ2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogZ2l2ZSBpdCBhIHByb3BlciBuYW1lICovCi0JZGV2X3NldF9uYW1lKCZkcnYtPndpcGh5LmRldiwgUEhZX05BTUUgIiVkIiwgZHJ2LT5pZHgpOworCWRldl9zZXRfbmFtZSgmZHJ2LT53aXBoeS5kZXYsIFBIWV9OQU1FICIlZCIsIGRydi0+d2lwaHlfaWR4KTsKIAogCW11dGV4X2luaXQoJmRydi0+bXR4KTsKIAltdXRleF9pbml0KCZkcnYtPmRldmxpc3RfbXR4KTsKQEAgLTMxMCwxMCArMzQ3LDEwIEBACiAJLyogY2hlY2sgYW5kIHNldCB1cCBiaXRyYXRlcyAqLwogCWllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyh3aXBoeSk7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIHNldCB1cCByZWd1bGF0b3J5IGluZm8gKi8KLQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgUkVHRE9NX1NFVF9CWV9DT1JFKTsKKwl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpOwogCiAJcmVzID0gZGV2aWNlX2FkZCgmZHJ2LT53aXBoeS5kZXYpOwogCWlmIChyZXMpCkBAIC0zMjgsOSArMzY1LDIwIEBACiAJaWYgKElTX0VSUihkcnYtPndpcGh5LmRlYnVnZnNkaXIpKQogCQlkcnYtPndpcGh5LmRlYnVnZnNkaXIgPSBOVUxMOwogCisJaWYgKHdpcGh5LT5jdXN0b21fcmVndWxhdG9yeSkgeworCQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0IHJlcXVlc3Q7CisKKwkJcmVxdWVzdC53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKwkJcmVxdWVzdC5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOworCQlyZXF1ZXN0LmFscGhhMlswXSA9ICc5JzsKKwkJcmVxdWVzdC5hbHBoYTJbMV0gPSAnOSc7CisKKwkJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoJnJlcXVlc3QpOworCX0KKwogCXJlcyA9IDA7CiBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV9yZWdpc3Rlcik7CkBAIC0zNDAsNyArMzg4LDcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAKIAkvKiBwcm90ZWN0IHRoZSBkZXZpY2UgbGlzdCAqLwotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZkcnYtPm5ldGRldl9saXN0KSk7CiAKQEAgLTM2Niw3ICs0MTQsNyBAQAogCWRldmljZV9kZWwoJmRydi0+d2lwaHkuZGV2KTsKIAlkZWJ1Z2ZzX3JlbW92ZShkcnYtPndpcGh5LmRlYnVnZnNkaXIpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV91bnJlZ2lzdGVyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggZTI5YWQ0Yy4uNmFjZDQ4MyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAorKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgpAQCAtMzcsNyArMzgsNyBAQAogCWVudW0gZW52aXJvbm1lbnRfY2FwIGVudjsKIAogCS8qIHdpcGh5IGluZGV4LCBpbnRlcm5hbCBvbmx5ICovCi0JaW50IGlkeDsKKwlpbnQgd2lwaHlfaWR4OwogCiAJLyogYXNzb2NpYXRlIG5ldGRldiBsaXN0ICovCiAJc3RydWN0IG11dGV4IGRldmxpc3RfbXR4OwpAQCAtNDksNiArNTAsNyBAQAogCXN0cnVjdCByYl9yb290IGJzc190cmVlOwogCXUzMiBic3NfZ2VuZXJhdGlvbjsKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsgLyogcHJvdGVjdGVkIGJ5IFJUTkwgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CiAKIAkvKiBtdXN0IGJlIGxhc3QgYmVjYXVzZSBvZiB0aGUgd2F5IHdlIGRvIHdpcGh5X3ByaXYoKSwKIAkgKiBhbmQgaXQgc2hvdWxkIGF0IGxlYXN0IGJlIGFsaWduZWQgdG8gTkVUREVWX0FMSUdOICovCkBAIC02Miw5ICs2NCwyNyBAQAogCXJldHVybiBjb250YWluZXJfb2Yod2lwaHksIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwgd2lwaHkpOwogfQogCi1leHRlcm4gc3RydWN0IG11dGV4IGNmZzgwMjExX2Rydl9tdXRleDsKKy8qIE5vdGUgMCBpcyB2YWxpZCwgaGVuY2UgcGh5MCAqLworc3RhdGljIGlubGluZQorYm9vbCB3aXBoeV9pZHhfdmFsaWQoaW50IHdpcGh5X2lkeCkKK3sKKwlyZXR1cm4gKHdpcGh5X2lkeCA+PSAwKTsKK30KKworZXh0ZXJuIHN0cnVjdCBtdXRleCBjZmc4MDIxMV9tdXRleDsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNmZzgwMjExX2Rydl9saXN0OwogCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2NmZzgwMjExX2xvY2sodm9pZCkKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmNmZzgwMjExX211dGV4KSk7Cit9CisKKy8qCisgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIG1hcmsgYSB3aXBoeV9pZHggYXMgbm90IGhhdmluZyBhbiBhc3NvY2lhdGVkIHdpcGh5LgorICogSXQgZ3VhcmFudGVlcyBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCkgd2lsbCByZXR1cm4gTlVMTAorICovCisjZGVmaW5lIFdJUEhZX0lEWF9TVEFMRSAtMQorCiBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHJiX25vZGUgcmJuOwpAQCAtNzQsNiArOTQsOSBAQAogCXN0cnVjdCBjZmc4MDIxMV9ic3MgcHViOwogfTsKIAorc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KGludCB3aXBoeV9pZHgpOworaW50IGdldF93aXBoeV9pZHgoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkcml2ZXIKICAqIHRoYXQgdGhlIGdlbmxfaW5mbyBpdGVtIHRoYXQgaXMgcGFzc2VkIHJlZmVycyB0by4KQEAgLTgxLDEzICsxMDQsMTMgQEAKICAqIHRoZSBkcml2ZXIncyBtdXRleCEKICAqCiAgKiBUaGlzIG1lYW5zIHRoYXQgeW91IG5lZWQgdG8gY2FsbCBjZmc4MDIxMV9wdXRfZGV2KCkKLSAqIGJlZm9yZSBiZWluZyBhbGxvd2VkIHRvIGFjcXVpcmUgJmNmZzgwMjExX2Rydl9tdXRleCEKKyAqIGJlZm9yZSBiZWluZyBhbGxvd2VkIHRvIGFjcXVpcmUgJmNmZzgwMjExX211dGV4IQogICoKICAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byBsb2NrIHRoZSBnbG9iYWwKICAqIG11dGV4IHRvIGdldCBhbiBpdGVtIG9mZiB0aGUgbGlzdCBzYWZlbHksIGFuZCB0aGVuCiAgKiB3ZSBsb2NrIHRoZSBkcnYgbXV0ZXggc28gaXQgZG9lc24ndCBnbyBhd2F5IHVuZGVyIHVzLgogICoKLSAqIFdlIGRvbid0IHdhbnQgdG8ga2VlcCBjZmc4MDIxMV9kcnZfbXV0ZXggbG9ja2VkCisgKiBXZSBkb24ndCB3YW50IHRvIGtlZXAgY2ZnODAyMTFfbXV0ZXggbG9ja2VkCiAgKiBmb3IgYWxsIHRoZSB0aW1lIGluIG9yZGVyIHRvIGFsbG93IHJlcXVlc3RzIG9uCiAgKiBvdGhlciBpbnRlcmZhY2VzIHRvIGdvIHRocm91Z2ggYXQgdGhlIHNhbWUgdGltZS4KICAqCkBAIC05Nyw2ICsxMjAsOSBAQAogZXh0ZXJuIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAorLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCitzdHJ1Y3Qgd2lwaHkgKndpcGh5X2lkeF90b193aXBoeShpbnQgd2lwaHlfaWR4KTsKKwogLyogaWRlbnRpY2FsIHRvIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvIGJ1dCBvbmx5IG9wZXJhdGUgb24gaWZpbmRleCAqLwogZXh0ZXJuIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpbnQgaWZpbmRleCk7CkBAIC0xMTAsOCArMTM2LDExIEBACiAJCQkgICAgICAgY2hhciAqbmV3bmFtZSk7CiAKIHZvaWQgaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwotdm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpOwordm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBzZXRieSk7CiAKIHZvaWQgY2ZnODAyMTFfYnNzX2V4cGlyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldik7Cit2b2lkIGNmZzgwMjExX2Jzc19hZ2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2Vjcyk7CiAKICNlbmRpZiAvKiBfX05FVF9XSVJFTEVTU19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jCmluZGV4IGRiNDI4MTkuLjIzMDFkYzEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJcG9zICs9IDg7CiAKIAlpZiAoY2NtcF9yZXBsYXlfY2hlY2socG4sIGtleS0+cnhfcG4pKSB7CisjaWZkZWYgQ09ORklHX0xJQjgwMjExX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0gIgogCQkJCSAicHJldmlvdXMgUE4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKQEAgLTM0Niw2ICszNDcsNyBAQAogCQkJCSBrZXktPnJ4X3BuWzNdLCBrZXktPnJ4X3BuWzRdLCBrZXktPnJ4X3BuWzVdLAogCQkJCSBwblswXSwgcG5bMV0sIHBuWzJdLCBwblszXSwgcG5bNF0sIHBuWzVdKTsKIAkJfQorI2VuZGlmCiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cysrOwogCQlyZXR1cm4gLTQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggN2U4ZTIyYi4uYzM2Mjg3MyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCkBAIC00NjUsMTIgKzQ2NSwxNCBAQAogCXBvcyArPSA4OwogCiAJaWYgKHRraXBfcmVwbGF5X2NoZWNrKGl2MzIsIGl2MTYsIHRrZXktPnJ4X2l2MzIsIHRrZXktPnJ4X2l2MTYpKSB7CisjaWZkZWYgQ09ORklHX0xJQjgwMjExX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0iCiAJCQkgICAgICAgIiBwcmV2aW91cyBUU0MgJTA4eCUwNHggcmVjZWl2ZWQgVFNDICIKIAkJCSAgICAgICAiJTA4eCUwNHhcbiIsIGhkci0+YWRkcjIsCiAJCQkgICAgICAgdGtleS0+cnhfaXYzMiwgdGtleS0+cnhfaXYxNiwgaXYzMiwgaXYxNik7CiAJCX0KKyNlbmRpZgogCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBSZXBsYXlzKys7CiAJCXJldHVybiAtNDsKIAl9CkBAIC01MDUsMTAgKzUwNywxMiBAQAogCQkJICogaXQgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkIGZvciB0aGUgbmV4dCBwYWNrZXQuICovCiAJCQl0a2V5LT5yeF9waGFzZTFfZG9uZSA9IDA7CiAJCX0KKyNpZmRlZiBDT05GSUdfTElCODAyMTFfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IElDViBlcnJvciBkZXRlY3RlZDogU1RBPSIKIAkJCSAgICAgICAiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQorI2VuZGlmCiAJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUElDVkVycm9ycysrOwogCQlyZXR1cm4gLTU7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggMjk4YTRkZS4uYWI5ZDhmMSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KQEAgLTE0Miw3ICsxNDEsNyBAQAogCWlmICghaGRyKQogCQlyZXR1cm4gLTE7CiAKLQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgZGV2LT5pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCBkZXYtPndpcGh5X2lkeCk7CiAJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfTkFNRSwgd2lwaHlfbmFtZSgmZGV2LT53aXBoeSkpOwogCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfTUFYX05VTV9TQ0FOX1NTSURTLAogCQkgICBkZXYtPndpcGh5Lm1heF9zY2FuX3NzaWRzKTsKQEAgLTI1Niw3ICsyNTUsNyBAQAogCWludCBzdGFydCA9IGNiLT5hcmdzWzBdOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewogCQlpZiAoKytpZHggPD0gc3RhcnQpCiAJCQljb250aW51ZTsKQEAgLTI2Nyw3ICsyNjYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJY2ItPmFyZ3NbMF0gPSBpZHg7CiAKQEAgLTQ3MCw3ICs0NjksNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CiAJCWlmICh3cF9pZHggPCB3cF9zdGFydCkgewogCQkJd3BfaWR4Kys7CkBAIC00OTcsNyArNDk2LDcgQEAKIAkJd3BfaWR4Kys7CiAJfQogIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAljYi0+YXJnc1swXSA9IHdwX2lkeDsKIAljYi0+YXJnc1sxXSA9IGlmX2lkeDsKQEAgLTEyMDYsNiArMTIwNSwxMiBAQAogCiAJCW5sYV9uZXN0X2VuZChtc2csIHR4cmF0ZSk7CiAJfQorCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTLAorCQkJICAgIHNpbmZvLT5yeF9wYWNrZXRzKTsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9QQUNLRVRTKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUywKKwkJCSAgICBzaW5mby0+dHhfcGFja2V0cyk7CiAJbmxhX25lc3RfZW5kKG1zZywgc2luZm9hdHRyKTsKIAogCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CkBAIC0xOTAwLDYgKzE5MDUsMTkgQEAKIAlpbnQgcjsKIAljaGFyICpkYXRhID0gTlVMTDsKIAorCS8qCisJICogWW91IHNob3VsZCBvbmx5IGdldCB0aGlzIHdoZW4gY2ZnODAyMTEgaGFzbid0IHlldCBpbml0aWFsaXplZAorCSAqIGNvbXBsZXRlbHkgd2hlbiBidWlsdC1pbiB0byB0aGUga2VybmVsIHJpZ2h0IGJldHdlZW4gdGhlIHRpbWUKKwkgKiB3aW5kb3cgYmV0d2VlbiBubDgwMjExX2luaXQoKSBhbmQgcmVndWxhdG9yeV9pbml0KCksIGlmIHRoYXQgaXMKKwkgKiBldmVuIHBvc3NpYmxlLgorCSAqLworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwlpZiAodW5saWtlbHkoIWNmZzgwMjExX3JlZ2RvbWFpbikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisJfQorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVHX0FMUEhBMl0pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xOTEwLDE0ICsxOTI4LDkgQEAKIAlpZiAoaXNfd29ybGRfcmVnZG9tKGRhdGEpKQogCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7Ci0JciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfVVNFUiwgZGF0YSwgMCwgRU5WSVJPTl9BTlkpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQkvKiBUaGlzIG1lYW5zIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3YXMgYWxyZWFkeSBzZXQsIGhvd2V2ZXIKLQkgKiB3ZSBkb24ndCB3YW50IHRvIGNvbmZ1c2UgdXNlcnNwYWNlIHdpdGggYSAic3VjY2Vzc2Z1bCBlcnJvciIKLQkgKiBtZXNzYWdlIHNvIGxldHMganVzdCB0cmVhdCBpdCBhcyBhIHN1Y2Nlc3MgKi8KLQlpZiAociA9PSAtRUFMUkVBRFkpCi0JCXIgPSAwOworCisJciA9IHJlZ3VsYXRvcnlfaGludF91c2VyKGRhdGEpOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE5MzcsNiArMTk1MCwxMSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAoIWRydi0+b3BzLT5nZXRfbWVzaF9wYXJhbXMpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIEdldCB0aGUgbWVzaCBwYXJhbXMgKi8KIAlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+Z2V0X21lc2hfcGFyYW1zKCZkcnYtPndpcGh5LCBkZXYsICZjdXJfcGFyYW1zKTsKQEAgLTIwNDYsNiArMjA2NCwxMSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAoIWRydi0+b3BzLT5zZXRfbWVzaF9wYXJhbXMpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBtb3JlIHRoYW4gMzIgbWVzaCBjb25maWcKIAkgKiBwYXJhbWV0ZXJzIChvdGhlcndpc2Ugb3VyIGJpdGZpZWxkIHNjaGVtZSB3b3VsZCBub3Qgd29yay4pICovCiAJQlVJTERfQlVHX09OKE5MODAyMTFfTUVTSENPTkZfQVRUUl9NQVggPiAzMik7CkBAIC0yMDkwLDYgKzIxMTMsNyBAQAogCWVyciA9IGRydi0+b3BzLT5zZXRfbWVzaF9wYXJhbXMoJmRydi0+d2lwaHksIGRldiwgJmNmZywgbWFzayk7CiAJcnRubF91bmxvY2soKTsKIAorIG91dDoKIAkvKiBjbGVhbnVwICovCiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKQEAgLTIxMDYsNyArMjEzMCw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCWlmICghY2ZnODAyMTFfcmVnZG9tYWluKQogCQlnb3RvIG91dDsKQEAgLTIxNjksNyArMjE5Myw3IEBACiAJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwogCWVyciA9IC1FTVNHU0laRTsKIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjIyOCw5ICsyMjUyLDkgQEAKIAogCUJVR19PTihydWxlX2lkeCAhPSBudW1fcnVsZXMpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJciA9IHNldF9yZWdkb20ocmQpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAlyZXR1cm4gcjsKIAogIGJhZF9yZWc6CkBAIC0yMjg2LDYgKzIzMTAsNyBAQAogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAJaW50IGVyciwgdG1wLCBuX3NzaWRzID0gMCwgbl9jaGFubmVscyA9IDAsIGk7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXNpemVfdCBpZV9sZW47CiAKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCkBAIC0yMzI3LDkgKzIzNTIsMTUgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKQorCQlpZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCWVsc2UKKwkJaWVfbGVuID0gMDsKKwogCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZigqcmVxdWVzdCkKIAkJCSsgc2l6ZW9mKCpzc2lkKSAqIG5fc3NpZHMKLQkJCSsgc2l6ZW9mKGNoYW5uZWwpICogbl9jaGFubmVscywgR0ZQX0tFUk5FTCk7CisJCQkrIHNpemVvZihjaGFubmVsKSAqIG5fY2hhbm5lbHMKKwkJCSsgaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlcXVlc3QpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMjM0MCw2ICsyMzcxLDEyIEBACiAJaWYgKG5fc3NpZHMpCiAJCXJlcXVlc3QtPnNzaWRzID0gKHZvaWQgKikocmVxdWVzdC0+Y2hhbm5lbHMgKyBuX2NoYW5uZWxzKTsKIAlyZXF1ZXN0LT5uX3NzaWRzID0gbl9zc2lkczsKKwlpZiAoaWVfbGVuKSB7CisJCWlmIChyZXF1ZXN0LT5zc2lkcykKKwkJCXJlcXVlc3QtPmllID0gKHZvaWQgKikocmVxdWVzdC0+c3NpZHMgKyBuX3NzaWRzKTsKKwkJZWxzZQorCQkJcmVxdWVzdC0+aWUgPSAodm9pZCAqKShyZXF1ZXN0LT5jaGFubmVscyArIG5fY2hhbm5lbHMpOworCX0KIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10pIHsKIAkJLyogdXNlciBzcGVjaWZpZWQsIGJhaWwgb3V0IGlmIGNoYW5uZWwgbm90IGZvdW5kICovCkBAIC0yMzgwLDYgKzI0MTcsMTIgQEAKIAkJfQogCX0KIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcXVlc3QtPmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCW1lbWNweShyZXF1ZXN0LT5pZSwgbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSksCisJCSAgICAgICByZXF1ZXN0LT5pZV9sZW4pOworCX0KKwogCXJlcXVlc3QtPmlmaWR4ID0gZGV2LT5pZmluZGV4OwogCXJlcXVlc3QtPndpcGh5ID0gJmRydi0+d2lwaHk7CiAKQEAgLTI0MzIsNyArMjQ3NSw3IEBACiAJTkxBX1BVVF9VMTYobXNnLCBOTDgwMjExX0JTU19DQVBBQklMSVRZLCByZXMtPmNhcGFiaWxpdHkpOwogCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CU1NfRlJFUVVFTkNZLCByZXMtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCXN3aXRjaCAocmVzLT5zaWduYWxfdHlwZSkgeworCXN3aXRjaCAocmRldi0+d2lwaHkuc2lnbmFsX3R5cGUpIHsKIAljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKIAkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19TSUdOQUxfTUJNLCByZXMtPnNpZ25hbCk7CiAJCWJyZWFrOwpAQCAtMjYwMSw3ICsyNjQ0LDYgQEAKIAkJLmRvaXQgPSBubDgwMjExX2dldF9zdGF0aW9uLAogCQkuZHVtcGl0ID0gbmw4MDIxMV9kdW1wX3N0YXRpb24sCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKLQkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1NUQVRJT04sCkBAIC0yNzA4LDYgKzI3NTAsOSBAQAogc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3NjYW5fbWNncnAgPSB7CiAJLm5hbWUgPSAic2NhbiIsCiB9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAgPSB7CisJLm5hbWUgPSAicmVndWxhdG9yeSIsCit9OwogCiAvKiBub3RpZmljYXRpb24gZnVuY3Rpb25zICovCiAKQEAgLTI3MzksNyArMjc4NCw3IEBACiAJaWYgKCFoZHIpCiAJCXJldHVybiAtMTsKIAotCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT5pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOwogCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CiAKIAkvKiBYWFg6IHdlIHNob3VsZCBwcm9iYWJseSBib3VuY2UgYmFjayB0aGUgcmVxdWVzdD8gKi8KQEAgLTI3ODcsNiArMjgzMiw2MSBAQAogCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAorLyoKKyAqIFRoaXMgY2FuIGhhcHBlbiBvbiBnbG9iYWwgcmVndWxhdG9yeSBjaGFuZ2VzIG9yIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncworICogYmFzZWQgb24gY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucy4KKyAqLwordm9pZCBubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCAwLCAwLCAwLCBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFKTsKKwlpZiAoIWhkcikgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBVc2Vyc3BhY2UgY2FuIGFsd2F5cyBjb3VudCB0aGlzIG9uZSBhbHdheXMgYmVpbmcgc2V0ICovCisJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLCByZXF1ZXN0LT5pbml0aWF0b3IpOworCisJaWYgKHJlcXVlc3QtPmFscGhhMlswXSA9PSAnMCcgJiYgcmVxdWVzdC0+YWxwaGEyWzFdID09ICcwJykKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwkJCSAgIE5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQpOworCWVsc2UgaWYgKHJlcXVlc3QtPmFscGhhMlswXSA9PSAnOScgJiYgcmVxdWVzdC0+YWxwaGEyWzFdID09ICc5JykKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwkJCSAgIE5MODAyMTFfUkVHRE9NX1RZUEVfQ1VTVE9NX1dPUkxEKTsKKwllbHNlIGlmICgocmVxdWVzdC0+YWxwaGEyWzBdID09ICc5JyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzgnKSB8fAorCQkgcmVxdWVzdC0+aW50ZXJzZWN0KQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT04pOworCWVsc2UgeworCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZKTsKKwkJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwgcmVxdWVzdC0+YWxwaGEyKTsKKwl9CisKKwlpZiAod2lwaHlfaWR4X3ZhbGlkKHJlcXVlc3QtPndpcGh5X2lkeCkpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZXF1ZXN0LT53aXBoeV9pZHgpOworCisJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAuaWQsIEdGUF9LRVJORUwpOworCisJcmV0dXJuOworCitubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKK30KKwogLyogaW5pdGlhbGlzYXRpb24vZXhpdCBmdW5jdGlvbnMgKi8KIAogaW50IG5sODAyMTFfaW5pdCh2b2lkKQpAQCAtMjgxMSw2ICsyOTExLDEwIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3JlZ3VsYXRvcnlfbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKwogCXJldHVybiAwOwogIGVycl9vdXQ6CiAJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbmw4MDIxMV9mYW0pOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaCBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKaW5kZXggYjU2NWE1Zi4uZTY1YTNjMyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC0xMSw2ICsxMSw3IEBACiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG5sODAyMTFfaW5pdCh2b2lkKQogewpAQCAtMjcsNiArMjgsMTQgQEAKIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZCgKKwkJCQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQore30KK3N0YXRpYyBpbmxpbmUgdm9pZAorbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKK30KICNlbmRpZiAvKiBDT05GSUdfTkw4MDIxMSAqLwogCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggMjMyMzY0NC4uZWI4YjhlZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCisrKyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJubDgwMjExLmgiCiAKIC8qIFJlY2VpcHQgb2YgaW5mb3JtYXRpb24gZnJvbSBsYXN0IHJlZ3VsYXRvcnkgcmVxdWVzdCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxhc3RfcmVxdWVzdDsKQEAgLTU0LDIyICs1NSw2MyBAQAogCU1IWl9UT19LSFooMjApLAogfTsKIAotLyogQ2VudHJhbCB3aXJlbGVzcyBjb3JlIHJlZ3VsYXRvcnkgZG9tYWlucywgd2Ugb25seSBuZWVkIHR3bywKKy8qCisgKiBDZW50cmFsIHdpcmVsZXNzIGNvcmUgcmVndWxhdG9yeSBkb21haW5zLCB3ZSBvbmx5IG5lZWQgdHdvLAogICogdGhlIGN1cnJlbnQgb25lIGFuZCBhIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugd2UgaGF2ZSBubwotICogaW5mb3JtYXRpb24gdG8gZ2l2ZSB1cyBhbiBhbHBoYTIgKi8KKyAqIGluZm9ybWF0aW9uIHRvIGdpdmUgdXMgYW4gYWxwaGEyCisgKi8KIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CiAKLS8qIFdlIHVzZSB0aGlzIGFzIGEgcGxhY2UgZm9yIHRoZSByZCBzdHJ1Y3R1cmUgYnVpbHQgZnJvbSB0aGUKKy8qCisgKiBXZSB1c2UgdGhpcyBhcyBhIHBsYWNlIGZvciB0aGUgcmQgc3RydWN0dXJlIGJ1aWx0IGZyb20gdGhlCiAgKiBsYXN0IHBhcnNlZCBjb3VudHJ5IElFIHRvIHJlc3QgdW50aWwgQ1JEQSBnZXRzIGJhY2sgdG8gdXMgd2l0aAotICogd2hhdCBpdCB0aGlua3Mgc2hvdWxkIGFwcGx5IGZvciB0aGUgc2FtZSBjb3VudHJ5ICovCisgKiB3aGF0IGl0IHRoaW5rcyBzaG91bGQgYXBwbHkgZm9yIHRoZSBzYW1lIGNvdW50cnkKKyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llX3JlZ2RvbWFpbjsKIAorLyogVXNlZCB0byBxdWV1ZSB1cCByZWd1bGF0b3J5IGhpbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19yZXF1ZXN0c19saXN0KTsKK3N0YXRpYyBzcGlubG9ja190IHJlZ19yZXF1ZXN0c19sb2NrOworCisvKiBVc2VkIHRvIHF1ZXVlIHVwIGJlYWNvbiBoaW50cyBmb3IgcmV2aWV3ICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19wZW5kaW5nX2JlYWNvbnMpOworc3RhdGljIHNwaW5sb2NrX3QgcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrOworCisvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgcHJvY2Vzc2VkIGJlYWNvbiBoaW50cyAqLworc3RhdGljIExJU1RfSEVBRChyZWdfYmVhY29uX2xpc3QpOworCitzdHJ1Y3QgcmVnX2JlYWNvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFuOworfTsKKwogLyogV2Uga2VlcCBhIHN0YXRpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIG9mIHRoZSBhYnNlbmNlIG9mIENSREEgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB3b3JsZF9yZWdkb20gPSB7Ci0JLm5fcmVnX3J1bGVzID0gMSwKKwkubl9yZWdfcnVsZXMgPSA1LAogCS5hbHBoYTIgPSAgIjAwIiwKIAkucmVnX3J1bGVzID0gewotCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsCisJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsIDApLAorCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMTIuLjEzLiBObyBIVDQwCisJCSAqIGNoYW5uZWwgZml0cyBoZXJlLiAqLworCQlSRUdfUlVMRSgyNDY3LTEwLCAyNDcyKzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyksCisJCS8qIElFRUUgODAyLjExIGNoYW5uZWwgMTQgLSBPbmx5IEpQIGVuYWJsZXMKKwkJICogdGhpcyBhbmQgZm9yIDgwMi4xMWIgb25seSAqLworCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyB8CisJCQlOTDgwMjExX1JSRl9OT19PRkRNKSwKKwkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVsIDM2Li40OCAqLworCQlSRUdfUlVMRSg1MTgwLTEwLCA1MjQwKzEwLCA0MCwgNiwgMjAsCisgICAgICAgICAgICAgICAgICAgICAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorICAgICAgICAgICAgICAgICAgICAgICAgTkw4MDIxMV9SUkZfTk9fSUJTUyksCisKKwkJLyogTkI6IDUyNjAgTUh6IC0gNTcwMCBNSHogcmVxdWllcyBERlMgKi8KKworCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMTQ5Li4xNjUgKi8KKwkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDYsIDIwLAogCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwKIAkJCU5MODAyMTFfUlJGX05PX0lCU1MpLAogCX0KQEAgLTgzLDkgKzEyNSwxMSBAQAogbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX3JlZ2RvbSwgIklFRUUgODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUiKTsKIAotLyogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgorLyoKKyAqIFdlIGFzc3VtZSA0MCBNSHogYmFuZHdpZHRoIGZvciB0aGUgb2xkIHJlZ3VsYXRvcnkgd29yay4KICAqIFdlIG1ha2UgZW1waGFzaXMgd2UgYXJlIHVzaW5nIHRoZSBleGFjdCBzYW1lIGZyZXF1ZW5jaWVzCi0gKiBhcyBiZWZvcmUgKi8KKyAqIGFzIGJlZm9yZQorICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB1c19yZWdkb20gPSB7CiAJLm5fcmVnX3J1bGVzID0gNiwKQEAgLTEyNCw4ICsxNjgsMTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGV1X3JlZ2RvbSA9IHsKIAkubl9yZWdfcnVsZXMgPSA2LAotCS8qIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAotCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwkvKgorCSAqIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAorCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwkgKi8KIAkuYWxwaGEyID0gICJFVSIsCiAJLnJlZ19ydWxlcyA9IHsKIAkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjEzICovCkBAIC0xOTQsOCArMjQwLDEwIEBACiAJY2ZnODAyMTFfcmVnZG9tYWluID0gTlVMTDsKIH0KIAotLyogRHluYW1pYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0ZWQgYnkgdGhlIHdpcmVsZXNzCi0gKiBjb3JlIHVwb24gaW5pdGlhbGl6YXRpb24gKi8KKy8qCisgKiBEeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3RlZCBieSB0aGUgd2lyZWxlc3MKKyAqIGNvcmUgdXBvbiBpbml0aWFsaXphdGlvbgorICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfd29ybGRfcmVnZG9tYWluKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAlCVUdfT04oIWxhc3RfcmVxdWVzdCk7CkBAIC0yMzYsOCArMjg0LDEwIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gd2FzIGJ1aWx0IGJ5IGRyaXZlcgotCSAqIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAqLworCS8qCisJICogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIHdhcyBidWlsdCBieSBkcml2ZXIKKwkgKiBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKKwkgKi8KIAlpZiAoYWxwaGEyWzBdID09ICc5JyAmJiBhbHBoYTJbMV0gPT0gJzknKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNDcsOSArMjk3LDExIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCisJLyoKKwkgKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCiAJICogcmVzdWx0IG9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbgotCSAqIHN0cnVjdHVyZXMgKi8KKwkgKiBzdHJ1Y3R1cmVzCisJICovCiAJaWYgKGFscGhhMlswXSA9PSAnOScgJiYgYWxwaGEyWzFdID09ICc4JykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMjc0LDggKzMyNiwxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZWQoY29uc3QgY2hhciAqYWxwaGEyKQorc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZXMoY29uc3QgY2hhciAqYWxwaGEyKQogeworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlpZiAoIWNmZzgwMjExX3JlZ2RvbWFpbikKIAkJcmV0dXJuIHRydWU7CiAJaWYgKGFscGhhMl9lcXVhbChjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMiwgYWxwaGEyKSkKQEAgLTMwMiw4ICszNTYsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQotICogYmFzaXMgaW4gdXNlcnNwYWNlLiAqLworLyoKKyAqIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQorICogYmFzaXMgaW4gdXNlcnNwYWNlLgorICovCiBzdGF0aWMgaW50IGNhbGxfY3JkYShjb25zdCBjaGFyICphbHBoYTIpCiB7CiAJY2hhciBjb3VudHJ5X2Vudls5ICsgMl0gPSAiQ09VTlRSWT0iOwpAQCAtMzQ4LDcgKzQwNCw4IEBACiAKIAlmcmVxX2RpZmYgPSBmcmVxX3JhbmdlLT5lbmRfZnJlcV9raHogLSBmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toejsKIAotCWlmIChmcmVxX2RpZmYgPD0gMCB8fCBmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiA+IGZyZXFfZGlmZikKKwlpZiAoZnJlcV9yYW5nZS0+ZW5kX2ZyZXFfa2h6IDw9IGZyZXFfcmFuZ2UtPnN0YXJ0X2ZyZXFfa2h6IHx8CisJCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiA+IGZyZXFfZGlmZikKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CkBAIC00MTQsMTAgKzQ3MSwxMiBAQAogI3VuZGVmIE9ORV9HSFpfSU5fS0haCiB9CiAKLS8qIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCisvKgorICogQ29udmVydHMgYSBjb3VudHJ5IElFIHRvIGEgcmVndWxhdG9yeSBkb21haW4uIEEgcmVndWxhdG9yeSBkb21haW4KICAqIHN0cnVjdHVyZSBoYXMgYSBsb3Qgb2YgaW5mb3JtYXRpb24gd2hpY2ggdGhlIElFIGRvZXNuJ3QgeWV0IGhhdmUsCiAgKiBzbyBmb3IgdGhlIG90aGVyIHZhbHVlcyB3ZSB1c2UgdXBwZXIgbWF4IHZhbHVlcyBhcyB3ZSB3aWxsIGludGVyc2VjdAotICogd2l0aCBvdXIgdXNlcnNwYWNlIHJlZ3VsYXRvcnkgYWdlbnQgdG8gZ2V0IGxvd2VyIGJvdW5kcy4gKi8KKyAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY291bnRyeV9pZV8yX3JkKAogCQkJCXU4ICpjb3VudHJ5X2llLAogCQkJCXU4IGNvdW50cnlfaWVfbGVuLApAQCAtNDYyLDkgKzUyMSwxMSBAQAogCiAJKmNoZWNrc3VtIF49ICgoZmxhZ3MgXiBhbHBoYTJbMF0gXiBhbHBoYTJbMV0pIDw8IDgpOwogCi0JLyogV2UgbmVlZCB0byBidWlsZCBhIHJlZyBydWxlIGZvciBlYWNoIHRyaXBsZXQsIGJ1dCBmaXJzdCB3ZSBtdXN0CisJLyoKKwkgKiBXZSBuZWVkIHRvIGJ1aWxkIGEgcmVnIHJ1bGUgZm9yIGVhY2ggdHJpcGxldCwgYnV0IGZpcnN0IHdlIG11c3QKIAkgKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiByZWcgcnVsZXMgd2Ugd2lsbCBuZWVkLiBXZSB3aWxsIG5lZWQgb25lCi0JICogZm9yIGVhY2ggY2hhbm5lbCBzdWJiYW5kICovCisJICogZm9yIGVhY2ggY2hhbm5lbCBzdWJiYW5kCisJICovCiAJd2hpbGUgKGNvdW50cnlfaWVfbGVuID49IDMpIHsKIAkJaW50IGVuZF9jaGFubmVsID0gMDsKIAkJc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQgKnRyaXBsZXQgPQpAQCAtNTAyLDkgKzU2MywxMSBAQAogCQlpZiAoY3VyX3N1Yl9tYXhfY2hhbm5lbCA8IGN1cl9jaGFubmVsKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJLyogRG8gbm90IGFsbG93IG92ZXJsYXBwaW5nIGNoYW5uZWxzLiBBbHNvIGNoYW5uZWxzCisJCS8qCisJCSAqIERvIG5vdCBhbGxvdyBvdmVybGFwcGluZyBjaGFubmVscy4gQWxzbyBjaGFubmVscwogCQkgKiBwYXNzZWQgaW4gZWFjaCBzdWJiYW5kIG11c3QgYmUgbW9ub3RvbmljYWxseQotCQkgKiBpbmNyZWFzaW5nICovCisJCSAqIGluY3JlYXNpbmcKKwkJICovCiAJCWlmIChsYXN0X3N1Yl9tYXhfY2hhbm5lbCkgewogCQkJaWYgKGN1cl9jaGFubmVsIDw9IGxhc3Rfc3ViX21heF9jaGFubmVsKQogCQkJCXJldHVybiBOVUxMOwpAQCAtNTEyLDEwICs1NzUsMTIgQEAKIAkJCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JCS8qIFdoZW4gZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHN1cHBvcnRlZAorCQkvKgorCQkgKiBXaGVuIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyBzdXBwb3J0ZWQKIAkJICogd2UgY2FuIHRocm93IGV4dCB0cmlwbGV0cyBhcyBwYXJ0IG9mIHRoaXMgc291cCwKIAkJICogZm9yIG5vdyB3ZSBkb24ndCBjYXJlIHdoZW4gdGhvc2UgY2hhbmdlIGFzIHdlCi0JCSAqIGRvbid0IHN1cHBvcnQgdGhlbSAqLworCQkgKiBkb24ndCBzdXBwb3J0IHRoZW0KKwkJICovCiAJCSpjaGVja3N1bSBePSAoKGN1cl9jaGFubmVsIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgOCkgfAogCQkgICgoY3VyX3N1Yl9tYXhfY2hhbm5lbCBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDE2KSB8CiAJCSAgKCh0cmlwbGV0LT5jaGFucy5tYXhfcG93ZXIgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCAyNCk7CkBAIC01MjYsOCArNTkxLDEwIEBACiAJCWNvdW50cnlfaWVfbGVuIC09IDM7CiAJCW51bV9ydWxlcysrOwogCi0JCS8qIE5vdGU6IHRoaXMgaXMgbm90IGEgSUVFRSByZXF1aXJlbWVudCBidXQKLQkJICogc2ltcGx5IGEgbWVtb3J5IHJlcXVpcmVtZW50ICovCisJCS8qCisJCSAqIE5vdGU6IHRoaXMgaXMgbm90IGEgSUVFRSByZXF1aXJlbWVudCBidXQKKwkJICogc2ltcGx5IGEgbWVtb3J5IHJlcXVpcmVtZW50CisJCSAqLwogCQlpZiAobnVtX3J1bGVzID4gTkw4MDIxMV9NQVhfU1VQUF9SRUdfUlVMRVMpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC01NTUsOCArNjIyLDEwIEBACiAJCXN0cnVjdCBpZWVlODAyMTFfZnJlcV9yYW5nZSAqZnJlcV9yYW5nZSA9IE5VTEw7CiAJCXN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CiAKLQkJLyogTXVzdCBwYXJzZSBpZiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSwKLQkJICogd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldCAqLworCQkvKgorCQkgKiBNdXN0IHBhcnNlIGlmIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyB0cnVlLAorCQkgKiB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgeWV0CisJCSAqLwogCQlpZiAodHJpcGxldC0+ZXh0LnJlZ19leHRlbnNpb25faWQgPj0KIAkJCQlJRUVFODAyMTFfQ09VTlRSWV9FWFRFTlNJT05fSUQpIHsKIAkJCWNvdW50cnlfaWUgKz0gMzsKQEAgLTU3OCwxMCArNjQ3LDEyIEBACiAJCQllbmRfY2hhbm5lbCA9ICB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsICsKIAkJCQkoNCAqICh0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLSAxKSk7CiAKLQkJLyogVGhlICsxMCBpcyBzaW5jZSB0aGUgcmVndWxhdG9yeSBkb21haW4gZXhwZWN0cworCQkvKgorCQkgKiBUaGUgKzEwIGlzIHNpbmNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBleHBlY3RzCiAJCSAqIHRoZSBhY3R1YWwgYmFuZCBlZGdlLCBub3QgdGhlIGNlbnRlciBvZiBmcmVxIGZvcgogCQkgKiBpdHMgc3RhcnQgYW5kIGVuZCBmcmVxcywgYXNzdW1pbmcgMjAgTUh6IGJhbmR3aWR0aCBvbgotCQkgKiB0aGUgY2hhbm5lbHMgcGFzc2VkICovCisJCSAqIHRoZSBjaGFubmVscyBwYXNzZWQKKwkJICovCiAJCWZyZXFfcmFuZ2UtPnN0YXJ0X2ZyZXFfa2h6ID0KIAkJCU1IWl9UT19LSFooaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KAogCQkJCXRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwpIC0gMTApOwpAQCAtNTg5LDkgKzY2MCwxMSBAQAogCQkJTUhaX1RPX0tIWihpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koCiAJCQkJZW5kX2NoYW5uZWwpICsgMTApOwogCi0JCS8qIExhcmdlIGFyYml0cmFyeSB2YWx1ZXMsIHdlIGludGVyc2VjdCBsYXRlciAqLwotCQkvKiBJbmNyZW1lbnQgdGhpcyBpZiB3ZSBldmVyIHN1cHBvcnQgPj0gNDAgTUh6IGNoYW5uZWxzCi0JCSAqIGluIElFRUUgODAyLjExICovCisJCS8qCisJCSAqIFRoZXNlIGFyZSBsYXJnZSBhcmJpdHJhcnkgdmFsdWVzIHdlIHVzZSB0byBpbnRlcnNlY3QgbGF0ZXIuCisJCSAqIEluY3JlbWVudCB0aGlzIGlmIHdlIGV2ZXIgc3VwcG9ydCA+PSA0MCBNSHogY2hhbm5lbHMKKwkJICogaW4gSUVFRSA4MDIuMTEKKwkJICovCiAJCWZyZXFfcmFuZ2UtPm1heF9iYW5kd2lkdGhfa2h6ID0gTUhaX1RPX0tIWig0MCk7CiAJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4gPSBEQklfVE9fTUJJKDEwMCk7CiAJCXBvd2VyX3J1bGUtPm1heF9laXJwID0gREJNX1RPX01CTSgxMDApOwpAQCAtNjA3LDggKzY4MCwxMCBAQAogfQogCiAKLS8qIEhlbHBlciBmb3IgcmVnZG9tX2ludGVyc2VjdCgpLCB0aGlzIGRvZXMgdGhlIHJlYWwKLSAqIG1hdGhlbWF0aWNhbCBpbnRlcnNlY3Rpb24gZnVuICovCisvKgorICogSGVscGVyIGZvciByZWdkb21faW50ZXJzZWN0KCksIHRoaXMgZG9lcyB0aGUgcmVhbAorICogbWF0aGVtYXRpY2FsIGludGVyc2VjdGlvbiBmdW4KKyAqLwogc3RhdGljIGludCByZWdfcnVsZXNfaW50ZXJzZWN0KAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJ1bGUxLAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJ1bGUyLApAQCAtNjg2LDExICs3NjEsMTMgQEAKIAlpZiAoIXJkMSB8fCAhcmQyKQogCQlyZXR1cm4gTlVMTDsKIAotCS8qIEZpcnN0IHdlIGdldCBhIGNvdW50IG9mIHRoZSBydWxlcyB3ZSdsbCBuZWVkLCB0aGVuIHdlIGFjdHVhbGx5CisJLyoKKwkgKiBGaXJzdCB3ZSBnZXQgYSBjb3VudCBvZiB0aGUgcnVsZXMgd2UnbGwgbmVlZCwgdGhlbiB3ZSBhY3R1YWxseQogCSAqIGJ1aWxkIHRoZW0uIFRoaXMgaXMgdG8gc28gd2UgY2FuIG1hbGxvYygpIGFuZCBmcmVlKCkgYQogCSAqIHJlZ2RvbWFpbiBvbmNlLiBUaGUgcmVhc29uIHdlIHVzZSByZWdfcnVsZXNfaW50ZXJzZWN0KCkgaGVyZQogCSAqIGlzIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwgaWYgdGhlIHJ1bGUgY29tcHV0ZWQgbWFrZXMgbm8gc2Vuc2UuCi0JICogQWxsIHJ1bGVzIHRoYXQgZG8gY2hlY2sgb3V0IE9LIGFyZSB2YWxpZC4gKi8KKwkgKiBBbGwgcnVsZXMgdGhhdCBkbyBjaGVjayBvdXQgT0sgYXJlIHZhbGlkLgorCSAqLwogCiAJZm9yICh4ID0gMDsgeCA8IHJkMS0+bl9yZWdfcnVsZXM7IHgrKykgewogCQlydWxlMSA9ICZyZDEtPnJlZ19ydWxlc1t4XTsKQEAgLTcxOCwxNCArNzk1LDE4IEBACiAJCXJ1bGUxID0gJnJkMS0+cmVnX3J1bGVzW3hdOwogCQlmb3IgKHkgPSAwOyB5IDwgcmQyLT5uX3JlZ19ydWxlczsgeSsrKSB7CiAJCQlydWxlMiA9ICZyZDItPnJlZ19ydWxlc1t5XTsKLQkJCS8qIFRoaXMgdGltZSBhcm91bmQgaW5zdGVhZCBvZiB1c2luZyB0aGUgc3RhY2sgbGV0cworCQkJLyoKKwkJCSAqIFRoaXMgdGltZSBhcm91bmQgaW5zdGVhZCBvZiB1c2luZyB0aGUgc3RhY2sgbGV0cwogCQkJICogd3JpdGUgdG8gdGhlIHRhcmdldCBydWxlIGRpcmVjdGx5IHNhdmluZyBvdXJzZWx2ZXMKLQkJCSAqIGEgbWVtY3B5KCkgKi8KKwkJCSAqIGEgbWVtY3B5KCkKKwkJCSAqLwogCQkJaW50ZXJzZWN0ZWRfcnVsZSA9ICZyZC0+cmVnX3J1bGVzW3J1bGVfaWR4XTsKIAkJCXIgPSByZWdfcnVsZXNfaW50ZXJzZWN0KHJ1bGUxLCBydWxlMiwKIAkJCQlpbnRlcnNlY3RlZF9ydWxlKTsKLQkJCS8qIE5vIG5lZWQgdG8gbWVtc2V0IGhlcmUgdGhlIGludGVyc2VjdGVkIHJ1bGUgaGVyZSBhcwotCQkJICogd2UncmUgbm90IHVzaW5nIHRoZSBzdGFjayBhbnltb3JlICovCisJCQkvKgorCQkJICogTm8gbmVlZCB0byBtZW1zZXQgaGVyZSB0aGUgaW50ZXJzZWN0ZWQgcnVsZSBoZXJlIGFzCisJCQkgKiB3ZSdyZSBub3QgdXNpbmcgdGhlIHN0YWNrIGFueW1vcmUKKwkJCSAqLwogCQkJaWYgKHIpCiAJCQkJY29udGludWU7CiAJCQlydWxlX2lkeCsrOwpAQCAtNzQ0LDggKzgyNSwxMCBAQAogCXJldHVybiByZDsKIH0KIAotLyogWFhYOiBhZGQgc3VwcG9ydCBmb3IgdGhlIHJlc3Qgb2YgZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzLCB3ZSBtYXkKLSAqIHdhbnQgdG8ganVzdCBoYXZlIHRoZSBjaGFubmVsIHN0cnVjdHVyZSB1c2UgdGhlc2UgKi8KKy8qCisgKiBYWFg6IGFkZCBzdXBwb3J0IGZvciB0aGUgcmVzdCBvZiBlbnVtIG5sODAyMTFfcmVnX3J1bGVfZmxhZ3MsIHdlIG1heQorICogd2FudCB0byBqdXN0IGhhdmUgdGhlIGNoYW5uZWwgc3RydWN0dXJlIHVzZSB0aGVzZQorICovCiBzdGF0aWMgdTMyIG1hcF9yZWdkb21fZmxhZ3ModTMyIHJkX2ZsYWdzKQogewogCXUzMiBjaGFubmVsX2ZsYWdzID0gMDsKQEAgLTc3MSwxMCArODU0LDEyIEBACiAKIAlyZWdkID0gY3VzdG9tX3JlZ2QgPyBjdXN0b21fcmVnZCA6IGNmZzgwMjExX3JlZ2RvbWFpbjsKIAotCS8qIEZvbGxvdyB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIHByZXNlbnQsIHVubGVzcyBhIGNvdW50cnkKLQkgKiBJRSBoYXMgYmVlbiBwcm9jZXNzZWQgb3IgYSB1c2VyIHdhbnRzIHRvIGhlbHAgY29tcGxhaW5jZSBmdXJ0aGVyICovCi0JaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgotCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX1VTRVIgJiYKKwkvKgorCSAqIEZvbGxvdyB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIHByZXNlbnQsIHVubGVzcyBhIGNvdW50cnkKKwkgKiBJRSBoYXMgYmVlbiBwcm9jZXNzZWQgb3IgYSB1c2VyIHdhbnRzIHRvIGhlbHAgY29tcGxhaW5jZSBmdXJ0aGVyCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFICYmCisJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSICYmCiAJICAgIHdpcGh5LT5yZWdkKQogCQlyZWdkID0gd2lwaHktPnJlZ2Q7CiAKQEAgLTc5MCw5ICs4NzUsMTEgQEAKIAkJZnIgPSAmcnItPmZyZXFfcmFuZ2U7CiAJCXByID0gJnJyLT5wb3dlcl9ydWxlOwogCi0JCS8qIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIG9uZSBmcmVxdWVuY3kgcnVsZSB3YXMKKwkJLyoKKwkJICogV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgb25lIGZyZXF1ZW5jeSBydWxlIHdhcwogCQkgKiB3YXMgaW4gY2VudGVyX2ZyZXEncyBiYW5kLCB0aGF0J3MgZW5vdWdoLCBzbyBsZXRzCi0JCSAqIG5vdCBvdmVyd3JpdGUgaXQgb25jZSBmb3VuZCAqLworCQkgKiBub3Qgb3ZlcndyaXRlIGl0IG9uY2UgZm91bmQKKwkJICovCiAJCWlmICghYmFuZF9ydWxlX2ZvdW5kKQogCQkJYmFuZF9ydWxlX2ZvdW5kID0gZnJlcV9pbl9ydWxlX2JhbmQoZnIsIGNlbnRlcl9mcmVxKTsKIApAQCAtODI5LDYgKzkxNiwxMSBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeSA9IE5VTEw7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAKIAlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKIAlCVUdfT04oY2hhbl9pZHggPj0gc2JhbmQtPm5fY2hhbm5lbHMpOwpAQCAtODQwLDcgKzkzMiw4IEBACiAJCSZtYXhfYmFuZHdpZHRoLCAmcmVnX3J1bGUpOwogCiAJaWYgKHIpIHsKLQkJLyogVGhpcyBtZWFucyBubyByZWd1bGF0b3J5IHJ1bGUgd2FzIGZvdW5kIGluIHRoZSBjb3VudHJ5IElFCisJCS8qCisJCSAqIFRoaXMgbWVhbnMgbm8gcmVndWxhdG9yeSBydWxlIHdhcyBmb3VuZCBpbiB0aGUgY291bnRyeSBJRQogCQkgKiB3aXRoIGEgZnJlcXVlbmN5IHJhbmdlIG9uIHRoZSBjZW50ZXJfZnJlcSdzIGJhbmQsIHNpbmNlCiAJCSAqIElFRUUtODAyLjExIGFsbG93cyBmb3IgYSBjb3VudHJ5IElFIHRvIGhhdmUgYSBzdWJzZXQgb2YgdGhlCiAJCSAqIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gYSBjb3VudHJ5IHdlIGlnbm9yZQpAQCAtODUxLDcgKzk0NCw4IEBACiAJCSAqIGh0dHA6Ly90aW55dXJsLmNvbS8xMWQtY2xhcmlmaWNhdGlvbgogCQkgKi8KIAkJaWYgKHIgPT0gLUVSQU5HRSAmJgotCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IExlYXZpbmcgY2hhbm5lbCAlZCBNSHogIgogCQkJCSJpbnRhY3Qgb24gJXMgLSBubyBydWxlIGZvdW5kIGluIGJhbmQgb24gIgpAQCAtODU5LDEwICs5NTMsMTMgQEAKIAkJCQljaGFuLT5jZW50ZXJfZnJlcSwgd2lwaHlfbmFtZSh3aXBoeSkpOwogI2VuZGlmCiAJCX0gZWxzZSB7Ci0JCS8qIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBjb3VudHJ5IElFIGhhcyBhdCBsZWFzdCBvbmUgcmVnIHJ1bGUKLQkJICogZm9yIHRoZSBiYW5kIHNvIHdlIHJlc3BlY3QgaXRzIGJhbmQgZGVmaW5pdGlvbnMgKi8KKwkJLyoKKwkJICogSW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGNvdW50cnkgSUUgaGFzIGF0IGxlYXN0IG9uZSByZWcgcnVsZQorCQkgKiBmb3IgdGhlIGJhbmQgc28gd2UgcmVzcGVjdCBpdHMgYmFuZCBkZWZpbml0aW9ucworCQkgKi8KICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCi0JCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQorCQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBEaXNhYmxpbmcgIgogCQkJCQkiY2hhbm5lbCAlZCBNSHogb24gJXMgZHVlIHRvICIKIAkJCQkJIkNvdW50cnkgSUVcbiIsCkBAIC04NzYsMTIgKzk3MywxNCBAQAogCiAJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKIAotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0RSSVZFUiAmJgotCSAgICBsYXN0X3JlcXVlc3QtPndpcGh5ICYmIGxhc3RfcmVxdWVzdC0+d2lwaHkgPT0gd2lwaHkgJiYKLQkgICAgbGFzdF9yZXF1ZXN0LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkpIHsKLQkJLyogVGhpcyBnYXVyYW50ZWVzIHRoZSBkcml2ZXIncyByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4KKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiAmJgorCSAgICByZXF1ZXN0X3dpcGh5ICYmIHJlcXVlc3Rfd2lwaHkgPT0gd2lwaHkgJiYKKwkgICAgcmVxdWVzdF93aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkpIHsKKwkJLyoKKwkJICogVGhpcyBnYXVyYW50ZWVzIHRoZSBkcml2ZXIncyByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4KIAkJICogd2lsbCBhbHdheXMgYmUgdXNlZCBhcyBhIGJhc2UgZm9yIGZ1cnRoZXIgcmVndWxhdG9yeQotCQkgKiBzZXR0aW5ncyAqLworCQkgKiBzZXR0aW5ncworCQkgKi8KIAkJY2hhbi0+ZmxhZ3MgPSBjaGFuLT5vcmlnX2ZsYWdzID0KIAkJCW1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKIAkJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IGNoYW4tPm9yaWdfbWFnID0KQEAgLTkxNSwzOSArMTAxNCwxNDcgQEAKIAkJaGFuZGxlX2NoYW5uZWwod2lwaHksIGJhbmQsIGkpOwogfQogCi1zdGF0aWMgYm9vbCBpZ25vcmVfcmVnX3VwZGF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpCitzdGF0aWMgYm9vbCBpZ25vcmVfcmVnX3VwZGF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQogewogCWlmICghbGFzdF9yZXF1ZXN0KQogCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoc2V0YnkgPT0gUkVHRE9NX1NFVF9CWV9DT1JFICYmCisJaWYgKGluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSAmJgogCQkgIHdpcGh5LT5jdXN0b21fcmVndWxhdG9yeSkKIAkJcmV0dXJuIHRydWU7Ci0JLyogd2lwaHktPnJlZ2Qgd2lsbCBiZSBzZXQgb25jZSB0aGUgZGV2aWNlIGhhcyBpdHMgb3duCi0JICogZGVzaXJlZCByZWd1bGF0b3J5IGRvbWFpbiBzZXQgKi8KKwkvKgorCSAqIHdpcGh5LT5yZWdkIHdpbGwgYmUgc2V0IG9uY2UgdGhlIGRldmljZSBoYXMgaXRzIG93bgorCSAqIGRlc2lyZWQgcmVndWxhdG9yeSBkb21haW4gc2V0CisJICovCiAJaWYgKHdpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSAmJiAhd2lwaHktPnJlZ2QgJiYKIAkgICAgIWlzX3dvcmxkX3JlZ2RvbShsYXN0X3JlcXVlc3QtPmFscGhhMikpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX2FsbF93aXBoeV9yZWd1bGF0b3J5KGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfd2lwaHlfcmVndWxhdG9yeShlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KQotCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSgmZHJ2LT53aXBoeSwgc2V0YnkpOworCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSgmZHJ2LT53aXBoeSwgaW5pdGlhdG9yKTsKIH0KIAotdm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVnX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICAgdW5zaWduZWQgaW50IGNoYW5faWR4LAorCQkJICAgICAgc3RydWN0IHJlZ19iZWFjb24gKnJlZ19iZWFjb24pCit7CisjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRworI2RlZmluZSBSRUdfREVCVUdfQkVBQ09OX0ZMQUcoZGVzYykgXAorCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogRW5hYmxpbmcgIiBkZXNjICIgb24gIiBcCisJCSJmcmVxdWVuY3k6ICVkIE1IeiAoQ2ggJWQpIG9uICVzXG4iLCBcCisJCXJlZ19iZWFjb24tPmNoYW4uY2VudGVyX2ZyZXEsIFwKKwkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKHJlZ19iZWFjb24tPmNoYW4uY2VudGVyX2ZyZXEpLCBcCisJCXdpcGh5X25hbWUod2lwaHkpKTsKKyNlbHNlCisjZGVmaW5lIFJFR19ERUJVR19CRUFDT05fRkxBRyhkZXNjKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdOworCWNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2NoYW5faWR4XTsKKworCWlmIChsaWtlbHkoY2hhbi0+Y2VudGVyX2ZyZXEgIT0gcmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSkpCisJCXJldHVybjsKKworCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikgeworCQljaGFuLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQlSRUdfREVCVUdfQkVBQ09OX0ZMQUcoImFjdGl2ZSBzY2FubmluZyIpOworCX0KKworCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lCU1MpIHsKKwkJY2hhbi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX05PX0lCU1M7CisJCVJFR19ERUJVR19CRUFDT05fRkxBRygiYmVhY29uaW5nIik7CisJfQorCisJY2hhbi0+YmVhY29uX2ZvdW5kID0gdHJ1ZTsKKyN1bmRlZiBSRUdfREVCVUdfQkVBQ09OX0ZMQUcKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIGEgc2NhbiBvbiBhIHdpcGh5IGZpbmRzIGEgYmVhY29uIG9uCisgKiBuZXcgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCB3aXBoeV91cGRhdGVfbmV3X2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICBzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlpZiAoIXdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdKQorCQlyZXR1cm47CisKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCWhhbmRsZV9yZWdfYmVhY29uKHdpcGh5LCBpLCByZWdfYmVhY29uKTsKK30KKworLyoKKyAqIENhbGxlZCB1cG9uIHJlZyBjaGFuZ2VzIG9yIGEgbmV3IHdpcGh5IGlzIGFkZGVkCisgKi8KK3N0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9iZWFjb25fcmVnKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IHJlZ19iZWFjb24gKnJlZ19iZWFjb247CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJaWYgKGxpc3RfZW1wdHkoJnJlZ19iZWFjb25fbGlzdCkpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnX2JlYWNvbiwgJnJlZ19iZWFjb25fbGlzdCwgbGlzdCkgeworCQlpZiAoIXdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdKQorCQkJY29udGludWU7CisJCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKQorCQkJaGFuZGxlX3JlZ19iZWFjb24od2lwaHksIGksIHJlZ19iZWFjb24pOworCX0KK30KKworc3RhdGljIGJvb2wgcmVnX2lzX3dvcmxkX3JvYW1pbmcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlpZiAoaXNfd29ybGRfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKSB8fAorCSAgICAod2lwaHktPnJlZ2QgJiYgaXNfd29ybGRfcmVnZG9tKHdpcGh5LT5yZWdkLT5hbHBoYTIpKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFICYmCisJICAgIHdpcGh5LT5jdXN0b21fcmVndWxhdG9yeSkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCisvKiBSZWFwIHRoZSBhZHZhbnRhZ2VzIG9mIHByZXZpb3VzbHkgZm91bmQgYmVhY29ucyAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfYmVhY29ucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCWlmICghcmVnX2lzX3dvcmxkX3JvYW1pbmcod2lwaHkpKQorCQlyZXR1cm47CisJd2lwaHlfdXBkYXRlX2JlYWNvbl9yZWcod2lwaHkpOworfQorCit2b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKLQlpZiAoaWdub3JlX3JlZ191cGRhdGUod2lwaHksIHNldGJ5KSkKLQkJcmV0dXJuOworCWlmIChpZ25vcmVfcmVnX3VwZGF0ZSh3aXBoeSwgaW5pdGlhdG9yKSkKKwkJZ290byBvdXQ7CiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQogCQkJaGFuZGxlX2JhbmQod2lwaHksIGJhbmQpOwogCX0KK291dDoKKwlyZWdfcHJvY2Vzc19iZWFjb25zKHdpcGh5KTsKIAlpZiAod2lwaHktPnJlZ19ub3RpZmllcikKIAkJd2lwaHktPnJlZ19ub3RpZmllcih3aXBoeSwgbGFzdF9yZXF1ZXN0KTsKIH0KQEAgLTEwMzMsODEgKzEyNDAsOTggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogUmV0dXJuIHZhbHVlIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGlnbm9yZV9yZXF1ZXN0KCkgdG8gaW5kaWNhdGUKLSAqIGl0IGhhcyBiZWVuIGRldGVybWluZWQgd2Ugc2hvdWxkIGludGVyc2VjdCB0d28gcmVndWxhdG9yeSBkb21haW5zICovCisvKgorICogUmV0dXJuIHZhbHVlIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGlnbm9yZV9yZXF1ZXN0KCkgdG8gaW5kaWNhdGUKKyAqIGl0IGhhcyBiZWVuIGRldGVybWluZWQgd2Ugc2hvdWxkIGludGVyc2VjdCB0d28gcmVndWxhdG9yeSBkb21haW5zCisgKi8KICNkZWZpbmUgUkVHX0lOVEVSU0VDVAkxCiAKIC8qIFRoaXMgaGFzIHRoZSBsb2dpYyB3aGljaCBkZXRlcm1pbmVzIHdoZW4gYSBuZXcgcmVxdWVzdAogICogc2hvdWxkIGJlIGlnbm9yZWQuICovCi1zdGF0aWMgaW50IGlnbm9yZV9yZXF1ZXN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRfYnksCi0JCQkgIGNvbnN0IGNoYXIgKmFscGhhMikKK3N0YXRpYyBpbnQgaWdub3JlX3JlcXVlc3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcGVuZGluZ19yZXF1ZXN0KQogeworCXN0cnVjdCB3aXBoeSAqbGFzdF93aXBoeSA9IE5VTEw7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJLyogQWxsIGluaXRpYWwgcmVxdWVzdHMgYXJlIHJlc3BlY3RlZCAqLwogCWlmICghbGFzdF9yZXF1ZXN0KQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoc2V0X2J5KSB7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0lOSVQ6CisJc3dpdGNoIChwZW5kaW5nX3JlcXVlc3QtPmluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6CiAJCXJldHVybiAtRUlOVkFMOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9DT1JFOgotCQkvKgotCQkgKiBBbHdheXMgcmVzcGVjdCBuZXcgd2lyZWxlc3MgY29yZSBoaW50cywgc2hvdWxkIG9ubHkgaGFwcGVuCi0JCSAqIHdoZW4gdXBkYXRpbmcgdGhlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGF0IGluaXQuCi0JCSAqLwotCQlyZXR1cm4gMDsKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRToKLQkJaWYgKHVubGlrZWx5KCFpc19hbl9hbHBoYTIoYWxwaGEyKSkpCisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRToKKworCQlsYXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCQlpZiAodW5saWtlbHkoIWlzX2FuX2FscGhhMihwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KSB7CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCWlmIChsYXN0X3dpcGh5ICE9IHdpcGh5KSB7CiAJCQkJLyoKIAkJCQkgKiBUd28gY2FyZHMgd2l0aCB0d28gQVBzIGNsYWltaW5nIGRpZmZlcmVudAogCQkJCSAqIGRpZmZlcmVudCBDb3VudHJ5IElFIGFscGhhMnMuIFdlIGNvdWxkCiAJCQkJICogaW50ZXJzZWN0IHRoZW0sIGJ1dCB0aGF0IHNlZW1zIHVubGlrZWx5CiAJCQkJICogdG8gYmUgY29ycmVjdC4gUmVqZWN0IHNlY29uZCBvbmUgZm9yIG5vdy4KIAkJCQkgKi8KLQkJCQlpZiAoIWFscGhhMl9lcXVhbChhbHBoYTIsCi0JCQkJCQkgIGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKSkKKwkJCQlpZiAocmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQogCQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAkJCX0KLQkJCS8qIFR3byBjb25zZWN1dGl2ZSBDb3VudHJ5IElFIGhpbnRzIG9uIHRoZSBzYW1lIHdpcGh5LgotCQkJICogVGhpcyBzaG91bGQgYmUgcGlja2VkIHVwIGVhcmx5IGJ5IHRoZSBkcml2ZXIvc3RhY2sgKi8KLQkJCWlmIChXQVJOX09OKCFhbHBoYTJfZXF1YWwoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIsCi0JCQkJICBhbHBoYTIpKSkKKwkJCS8qCisJCQkgKiBUd28gY29uc2VjdXRpdmUgQ291bnRyeSBJRSBoaW50cyBvbiB0aGUgc2FtZSB3aXBoeS4KKwkJCSAqIFRoaXMgc2hvdWxkIGJlIHBpY2tlZCB1cCBlYXJseSBieSB0aGUgZHJpdmVyL3N0YWNrCisJCQkgKi8KKwkJCWlmIChXQVJOX09OKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkpCiAJCQkJcmV0dXJuIDA7CiAJCQlyZXR1cm4gLUVBTFJFQURZOwogCQl9CiAJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9EUklWRVI6Ci0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPUkUpIHsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI6CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSkgewogCQkJaWYgKGlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikpCiAJCQkJcmV0dXJuIDA7Ci0JCQlpZiAoIWFscGhhMl9lcXVhbChjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMiwgYWxwaGEyKSkKKwkJCWlmIChyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyZXR1cm4gLUVBTFJFQURZOwogCQl9CisKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBoYXBwZW4gaWYgeW91IHVucGx1ZyBhbmQgcGx1ZyB5b3VyIGNhcmQKKwkJICogYmFjayBpbiBvciBpZiB5b3UgYWRkIGEgbmV3IGRldmljZSBmb3Igd2hpY2ggdGhlIHByZXZpb3VzbHkKKwkJICogbG9hZGVkIGNhcmQgYWxzbyBhZ3JlZXMgb24gdGhlIHJlZ3VsYXRvcnkgZG9tYWluLgorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCQlyZXR1cm4gLUVBTFJFQURZOworCiAJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9VU0VSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKIAkJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCQkvKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCi0JCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAgKi8KLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfVVNFUiAmJgorCQkvKgorCQkgKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCisJCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAKKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiAmJgogCQkJICBsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJLyogUHJvY2VzcyB1c2VyIHJlcXVlc3RzIG9ubHkgYWZ0ZXIgcHJldmlvdXMgdXNlci9kcml2ZXIvY29yZQotCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkICovCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPUkUgfHwKLQkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfRFJJVkVSIHx8Ci0JCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX1VTRVIpIHsKLQkJCWlmICghYWxwaGEyX2VxdWFsKGxhc3RfcmVxdWVzdC0+YWxwaGEyLAotCQkJICAgIGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKSkKKwkJLyoKKwkJICogUHJvY2VzcyB1c2VyIHJlcXVlc3RzIG9ubHkgYWZ0ZXIgcHJldmlvdXMgdXNlci9kcml2ZXIvY29yZQorCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKSB7CisJCQlpZiAocmVnZG9tX2NoYW5nZXMobGFzdF9yZXF1ZXN0LT5hbHBoYTIpKQogCQkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAKIAkJaWYgKCFpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pICYmCi0JCSAgICBhbHBoYTJfZXF1YWwoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIsIGFscGhhMikpCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAogCQlyZXR1cm4gMDsKQEAgLTExMTYsNTkgKzEzNDAsODAgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfZHJ2X211dGV4ICovCi1pbnQgX19yZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldF9ieSwKLQkJCWNvbnN0IGNoYXIgKmFscGhhMiwKLQkJCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52KQorLyoqCisgKiBfX3JlZ3VsYXRvcnlfaGludCAtIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUgYSByZWd1bGF0b3J5IGRvbWFpbgorICogQHdpcGh5OiBpZiB0aGUgaGludCBjb21lcyBmcm9tIGNvdW50cnkgaW5mb3JtYXRpb24gZnJvbSBhbiBBUCwgdGhpcworICoJaXMgcmVxdWlyZWQgdG8gYmUgc2V0IHRvIHRoZSB3aXBoeSB0aGF0IHJlY2VpdmVkIHRoZSBpbmZvcm1hdGlvbgorICogQHBlbmRpbmdfcmVxdWVzdDogdGhlIHJlZ3VsYXRvcnkgcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisgKgorICogVGhlIFdpcmVsZXNzIHN1YnN5c3RlbSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZQorICogd2hhdCBpdCBiZWxpZXZlcyBzaG91bGQgYmUgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uCisgKgorICogUmV0dXJucyB6ZXJvIGlmIGFsbCB3ZW50IGZpbmUsICUtRUFMUkVBRFkgaWYgYSByZWd1bGF0b3J5IGRvbWFpbiBoYWQKKyAqIGFscmVhZHkgYmVlbiBzZXQgb3Igb3RoZXIgc3RhbmRhcmQgZXJyb3IgY29kZXMuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfbXV0ZXgKKyAqLworc3RhdGljIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpwZW5kaW5nX3JlcXVlc3QpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAlib29sIGludGVyc2VjdCA9IGZhbHNlOwogCWludCByID0gMDsKIAotCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgc2V0X2J5LCBhbHBoYTIpOworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyID0gaWdub3JlX3JlcXVlc3Qod2lwaHksIHBlbmRpbmdfcmVxdWVzdCk7CiAKIAlpZiAociA9PSBSRUdfSU5URVJTRUNUKSB7Ci0JCWlmIChzZXRfYnkgPT0gUkVHRE9NX1NFVF9CWV9EUklWRVIpIHsKKwkJaWYgKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CiAJCQlyID0gcmVnX2NvcHlfcmVnZCgmd2lwaHktPnJlZ2QsIGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0JCQlpZiAocikKKwkJCWlmIChyKSB7CisJCQkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKIAkJCQlyZXR1cm4gcjsKKwkJCX0KIAkJfQogCQlpbnRlcnNlY3QgPSB0cnVlOwogCX0gZWxzZSBpZiAocikgewotCQkvKiBJZiB0aGUgcmVndWxhdG9yeSBkb21haW4gYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZQorCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yeSBkb21haW4gYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZQogCQkgKiBkcml2ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQganVzdCBjb3B5IGl0IHRvIHRoZQotCQkgKiB3aXBoeSAqLwotCQlpZiAociA9PSAtRUFMUkVBRFkgJiYgc2V0X2J5ID09IFJFR0RPTV9TRVRfQllfRFJJVkVSKSB7CisJCSAqIHdpcGh5CisJCSAqLworCQlpZiAociA9PSAtRUFMUkVBRFkgJiYKKwkJICAgIHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CiAJCQlyID0gcmVnX2NvcHlfcmVnZCgmd2lwaHktPnJlZ2QsIGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0JCQlpZiAocikKKwkJCWlmIChyKSB7CisJCQkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKIAkJCQlyZXR1cm4gcjsKKwkJCX0KIAkJCXIgPSAtRUFMUkVBRFk7CiAJCQlnb3RvIG5ld19yZXF1ZXN0OwogCQl9CisJCWtmcmVlKHBlbmRpbmdfcmVxdWVzdCk7CiAJCXJldHVybiByOwogCX0KIAogbmV3X3JlcXVlc3Q6Ci0JcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLAotCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcXVlc3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOwotCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKLQlyZXF1ZXN0LT5pbml0aWF0b3IgPSBzZXRfYnk7Ci0JcmVxdWVzdC0+d2lwaHkgPSB3aXBoeTsKLQlyZXF1ZXN0LT5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNvdW50cnlfaWVfY2hlY2tzdW07Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9lbnYgPSBlbnY7Ci0KIAlrZnJlZShsYXN0X3JlcXVlc3QpOwotCWxhc3RfcmVxdWVzdCA9IHJlcXVlc3Q7CisKKwlsYXN0X3JlcXVlc3QgPSBwZW5kaW5nX3JlcXVlc3Q7CisJbGFzdF9yZXF1ZXN0LT5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7CisKKwlwZW5kaW5nX3JlcXVlc3QgPSBOVUxMOwogCiAJLyogV2hlbiByID09IFJFR19JTlRFUlNFQ1Qgd2UgZG8gbmVlZCB0byBjYWxsIENSREEgKi8KLQlpZiAociA8IDApCisJaWYgKHIgPCAwKSB7CisJCS8qCisJCSAqIFNpbmNlIENSREEgd2lsbCBub3QgYmUgY2FsbGVkIGluIHRoaXMgY2FzZSBhcyB3ZSBhbHJlYWR5CisJCSAqIGhhdmUgYXBwbGllZCB0aGUgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluIGJlZm9yZSB3ZSBqdXN0CisJCSAqIGluZm9ybSB1c2Vyc3BhY2Ugd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIHJlcXVlc3QKKwkJICovCisJCWlmIChyID09IC1FQUxSRUFEWSkKKwkJCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KGxhc3RfcmVxdWVzdCk7CiAJCXJldHVybiByOworCX0KIAogCS8qCiAJICogTm90ZTogV2hlbiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgZW5hYmxlZApAQCAtMTE4MCwzNCArMTQyNSwxOTQgQEAKIAkgKgogCSAqIHRvIGludGVyc2VjdCB3aXRoIHRoZSBzdGF0aWMgcmQKIAkgKi8KLQlyZXR1cm4gY2FsbF9jcmRhKGFscGhhMik7CisJcmV0dXJuIGNhbGxfY3JkYShsYXN0X3JlcXVlc3QtPmFscGhhMik7CiB9CiAKLXZvaWQgcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGNvbnN0IGNoYXIgKmFscGhhMikKKy8qIFRoaXMgY3VycmVudGx5IG9ubHkgcHJvY2Vzc2VzIHVzZXIgYW5kIGRyaXZlciByZWd1bGF0b3J5IGhpbnRzICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19oaW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0KQogewotCWludCByOworCWludCByID0gMDsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKworCUJVR19PTighcmVnX3JlcXVlc3QtPmFscGhhMik7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlpZiAod2lwaHlfaWR4X3ZhbGlkKHJlZ19yZXF1ZXN0LT53aXBoeV9pZHgpKQorCQl3aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShyZWdfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWlmIChyZWdfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkgICAgIXdpcGh5KSB7CisJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKKwkJZ290byBvdXQ7CisJfQorCisJciA9IF9fcmVndWxhdG9yeV9oaW50KHdpcGh5LCByZWdfcmVxdWVzdCk7CisJLyogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSBvcmlnXyogcGFyYW1ldGVycyBhcmUgc2F2ZWQgKi8KKwlpZiAociA9PSAtRUFMUkVBRFkgJiYgd2lwaHkgJiYgd2lwaHktPnN0cmljdF9yZWd1bGF0b3J5KQorCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgcmVnX3JlcXVlc3QtPmluaXRpYXRvcik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Cit9CisKKy8qIFByb2Nlc3NlcyByZWd1bGF0b3J5IGhpbnRzLCB0aGlzIGlzIGFsbCB0aGUgTkw4MDIxMV9SRUdET01fU0VUX0JZXyogKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3BlbmRpbmdfaGludHModm9pZCkKKwl7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVnX3JlcXVlc3Q7CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlyZWdfcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnJlZ19yZXF1ZXN0c19saXN0LAorCQkJCQkgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCwKKwkJCQkJICAgICAgIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZyZWdfcmVxdWVzdC0+bGlzdCk7CisKKwkJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwkJcmVnX3Byb2Nlc3NfaGludChyZWdfcmVxdWVzdCk7CisJCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworfQorCisvKiBQcm9jZXNzZXMgYmVhY29uIGhpbnRzIC0tIHRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjb3VudHJ5IElFcyAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfcGVuZGluZ19iZWFjb25faGludHModm9pZCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcGVuZGluZ19iZWFjb24sICp0bXA7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwkvKiBUaGlzIGdvZXMgdGhyb3VnaCB0aGUgX3BlbmRpbmdfIGJlYWNvbiBsaXN0ICovCisJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJaWYgKGxpc3RfZW1wdHkoJnJlZ19wZW5kaW5nX2JlYWNvbnMpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVuZGluZ19iZWFjb24sIHRtcCwKKwkJCQkgJnJlZ19wZW5kaW5nX2JlYWNvbnMsIGxpc3QpIHsKKworCQlsaXN0X2RlbF9pbml0KCZwZW5kaW5nX2JlYWNvbi0+bGlzdCk7CisKKwkJLyogQXBwbGllcyB0aGUgYmVhY29uIGhpbnQgdG8gY3VycmVudCB3aXBoeXMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkKKwkJCXdpcGh5X3VwZGF0ZV9uZXdfYmVhY29uKCZkcnYtPndpcGh5LCBwZW5kaW5nX2JlYWNvbik7CisKKwkJLyogUmVtZW1iZXJzIHRoZSBiZWFjb24gaGludCBmb3IgbmV3IHdpcGh5cyBvciByZWcgY2hhbmdlcyAqLworCQlsaXN0X2FkZF90YWlsKCZwZW5kaW5nX2JlYWNvbi0+bGlzdCwgJnJlZ19iZWFjb25fbGlzdCk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ190b2RvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZWdfcHJvY2Vzc19wZW5kaW5nX2hpbnRzKCk7CisJcmVnX3Byb2Nlc3NfcGVuZGluZ19iZWFjb25faGludHMoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhyZWdfd29yaywgcmVnX3RvZG8pOworCitzdGF0aWMgdm9pZCBxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3Qoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saXN0LCAmcmVnX3JlcXVlc3RzX2xpc3QpOworCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7Cit9CisKKy8qIENvcmUgcmVndWxhdG9yeSBoaW50IC0tIGhhcHBlbnMgb25jZSBkdXJpbmcgY2ZnODAyMTFfaW5pdCgpICovCitzdGF0aWMgaW50IHJlZ3VsYXRvcnlfaGludF9jb3JlKGNvbnN0IGNoYXIgKmFscGhhMikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJQlVHX09OKGxhc3RfcmVxdWVzdCk7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksCisJCQkgIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOworCisJcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHJlcXVlc3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFVzZXIgaGludHMgKi8KK2ludCByZWd1bGF0b3J5X2hpbnRfdXNlcihjb25zdCBjaGFyICphbHBoYTIpCit7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKKwogCUJVR19PTighYWxwaGEyKTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7Ci0JciA9IF9fcmVndWxhdG9yeV9oaW50KHdpcGh5LCBSRUdET01fU0VUX0JZX0RSSVZFUiwKLQkJYWxwaGEyLCAwLCBFTlZJUk9OX0FOWSk7Ci0JLyogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSBvcmlnXyogcGFyYW1ldGVycyBhcmUgc2F2ZWQgKi8KLQlpZiAociA9PSAtRUFMUkVBRFkgJiYgd2lwaHktPnN0cmljdF9yZWd1bGF0b3J5KQotCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgUkVHRE9NX1NFVF9CWV9EUklWRVIpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CisJcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKKwlyZXF1ZXN0LT5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiwKKworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybiAwOworfQorCisvKiBEcml2ZXIgaGludHMgKi8KK2ludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlCVUdfT04oIWFscGhhMik7CisJQlVHX09OKCF3aXBoeSk7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKworCS8qIE11c3QgaGF2ZSByZWdpc3RlcmVkIHdpcGh5IGZpcnN0ICovCisJQlVHX09OKCF3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSk7CisKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50KTsKIAogc3RhdGljIGJvb2wgcmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQl1MzIgY291bnRyeV9pZV9jaGVja3N1bSkKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdC0+d2lwaHkpCisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJaWYgKCFyZXF1ZXN0X3dpcGh5KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGxpa2VseShsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KSkKKworCWlmIChsaWtlbHkocmVxdWVzdF93aXBoeSAhPSB3aXBoeSkpCiAJCXJldHVybiAhY291bnRyeV9pZV9pbnRlZ3JpdHlfY2hhbmdlcyhjb3VudHJ5X2llX2NoZWNrc3VtKTsKLQkvKiBXZSBzaG91bGQgbm90IGhhdmUgbGV0IHRoZXNlIHRocm91Z2ggYXQgdGhpcyBwb2ludCwgdGhleQorCS8qCisJICogV2Ugc2hvdWxkIG5vdCBoYXZlIGxldCB0aGVzZSB0aHJvdWdoIGF0IHRoaXMgcG9pbnQsIHRoZXkKIAkgKiBzaG91bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBlYXJsaWVyIGJ5IHRoZSBmaXJzdCBhbHBoYTIgY2hlY2sKLQkgKiBvbiB0aGUgZGV2aWNlICovCisJICogb24gdGhlIGRldmljZQorCSAqLwogCWlmIChXQVJOX09OKCFjb3VudHJ5X2llX2ludGVncml0eV9jaGFuZ2VzKGNvdW50cnlfaWVfY2hlY2tzdW0pKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTIyMSwxMSArMTYyNiwxNCBAQAogCWNoYXIgYWxwaGEyWzJdOwogCXUzMiBjaGVja3N1bSA9IDA7CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52ID0gRU5WSVJPTl9BTlk7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmICghbGFzdF9yZXF1ZXN0KQorCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICh1bmxpa2VseSghbGFzdF9yZXF1ZXN0KSkgeworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwl9CiAKIAkvKiBJRSBsZW4gbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDIgKi8KIAlpZiAoY291bnRyeV9pZV9sZW4gJiAweDAxKQpAQCAtMTIzNCw5ICsxNjQyLDExIEBACiAJaWYgKGNvdW50cnlfaWVfbGVuIDwgSUVFRTgwMjExX0NPVU5UUllfSUVfTUlOX0xFTikKIAkJZ290byBvdXQ7CiAKLQkvKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCisJLyoKKwkgKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCiAJICogY2FsbCBDUkRBIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlIGlmIGEgYmVhY29uIHdhcyByZWNlaXZlZCBiZWZvcmUKLQkgKiB3ZSB3ZXJlIGFibGUgdG8gcHJvY2VzcyB0aGUgbGFzdCByZWd1bGF0b3J5X2hpbnRfMTFkKCkgY2FsbCAqLworCSAqIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBsYXN0IHJlZ3VsYXRvcnlfaGludF8xMWQoKSBjYWxsCisJICovCiAJaWYgKGNvdW50cnlfaWVfcmVnZG9tYWluKQogCQlnb3RvIG91dDsKIApAQCAtMTI0OCwzMyArMTY1OCw0NCBAQAogCWVsc2UgaWYgKGNvdW50cnlfaWVbMl0gPT0gJ08nKQogCQllbnYgPSBFTlZJUk9OX09VVERPT1I7CiAKLQkvKiBXZSB3aWxsIHJ1biB0aGlzIGZvciAqZXZlcnkqIGJlYWNvbiBwcm9jZXNzZWQgZm9yIHRoZSBCU1NJRCwgc28KKwkvKgorCSAqIFdlIHdpbGwgcnVuIHRoaXMgZm9yICpldmVyeSogYmVhY29uIHByb2Nlc3NlZCBmb3IgdGhlIEJTU0lELCBzbwogCSAqIHdlIG9wdGltaXplIGFuIGVhcmx5IGNoZWNrIHRvIGV4aXQgb3V0IGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgdG8KLQkgKiBkbyBhbnl0aGluZyAqLwotCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSkpIHsKKwkgKiBkbyBhbnl0aGluZworCSAqLworCWlmIChsaWtlbHkod2lwaHlfaWR4X3ZhbGlkKGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KSkpIHsKIAkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnZfbGFzdF9pZTsKIAotCQlkcnZfbGFzdF9pZSA9IHdpcGh5X3RvX2RldihsYXN0X3JlcXVlc3QtPndpcGh5KTsKKwkJZHJ2X2xhc3RfaWUgPQorCQkJY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAKLQkJLyogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAotCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBICovCi0JCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSA9PSB3aXBoeSkpIHsKLQkJCS8qIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHRoaXMgd2lwaHkgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAgKi8KKwkJLyoKKwkJICogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAorCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBCisJCSAqLworCQlpZiAobGlrZWx5KCZkcnZfbGFzdF9pZS0+d2lwaHkgPT0gd2lwaHkpKSB7CisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdGhpcyB3aXBoeSB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCS8qIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAorCQkJLyoKKwkJCSAqIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAogCQkJICogd2FzIHJlY29uZmlndXJlZC4gWFhYOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUKIAkJCSAqIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc3VzcGVuZHMgYW5kIGdvZXMgdG8gZ29lcwogCQkJICogdG8gYW5vdGhlciBjb3VudHJ5LCBhbmQgdGhlbiBnZXRzIElFcyBmcm9tIGFuCi0JCQkgKiBBUCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyAqLworCQkJICogQVAgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MKKwkJCSAqLwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7Ci0JCQkvKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0d28gc2VwYXJhdGUgd2lwaHlzIHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwICovCisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdHdvIHNlcGFyYXRlIHdpcGh5cyB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKQEAgLTEyODksMjggKzE3MTAsOTcgQEAKIAlpZiAoIXJkKQogCQlnb3RvIG91dDsKIAotCS8qIFRoaXMgd2lsbCBub3QgaGFwcGVuIHJpZ2h0IG5vdyBidXQgd2UgbGVhdmUgaXQgaGVyZSBmb3IgdGhlCisJLyoKKwkgKiBUaGlzIHdpbGwgbm90IGhhcHBlbiByaWdodCBub3cgYnV0IHdlIGxlYXZlIGl0IGhlcmUgZm9yIHRoZQogCSAqIHRoZSBmdXR1cmUgd2hlbiB3ZSB3YW50IHRvIGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0IGFuZCBoYXZpbmcKIAkgKiB0aGUgdXNlciBtb3ZlIHRvIGFub3RoZXIgY291bnRyeSBhZnRlciBkb2luZyBzbywgb3IgaGF2aW5nIHRoZSB1c2VyCi0JICogbW92ZSB0byBhbm90aGVyIEFQLiBSaWdodCBub3cgd2UganVzdCB0cnVzdCB0aGUgZmlyc3QgQVAuIFRoaXMgaXMgd2h5Ci0JICogdGhpcyBpcyBtYXJrZWQgYXMgbGlrbGV5KCkuIElmIHdlIGhpdCB0aGlzIGJlZm9yZSB3ZSBhZGQgdGhpcyBzdXBwb3J0Ci0JICogd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZiBpdCBhcyBpdCB3b3VsZCBpbmRpY2F0ZSBhIG1pc3Rha2UgaW4gdGhlCi0JICogY3VycmVudCBkZXNpZ24gICovCi0JaWYgKGxpa2VseShXQVJOX09OKHJlZ19zYW1lX2NvdW50cnlfaWVfaGludCh3aXBoeSwgY2hlY2tzdW0pKSkpCi0JCWdvdG8gb3V0OworCSAqIG1vdmUgdG8gYW5vdGhlciBBUC4gUmlnaHQgbm93IHdlIGp1c3QgdHJ1c3QgdGhlIGZpcnN0IEFQLgorCSAqCisJICogSWYgd2UgaGl0IHRoaXMgYmVmb3JlIHdlIGFkZCB0aGlzIHN1cHBvcnQgd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZgorCSAqIGl0IGFzIGl0IHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBpbiB0aGUgY3VycmVudCBkZXNpZ24KKwkgKi8KKwlpZiAoV0FSTl9PTihyZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQod2lwaHksIGNoZWNrc3VtKSkpCisJCWdvdG8gZnJlZV9yZF9vdXQ7CiAKLQkvKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KLQkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdCAqLworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlnb3RvIGZyZWVfcmRfb3V0OworCisJLyoKKwkgKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KKwkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdAorCSAqLwogCWNvdW50cnlfaWVfcmVnZG9tYWluID0gcmQ7CiAKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAotCQljb3VudHJ5X2llX3JlZ2RvbWFpbi0+YWxwaGEyLCBjaGVja3N1bSwgZW52KTsKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU7CisJcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNoZWNrc3VtOworCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwogCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm47CisKK2ZyZWVfcmRfb3V0OgorCWtmcmVlKHJkKTsKIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludF8xMWQpOwogCitzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCit7CisJaWYgKGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEyKSB8fAorCSAgICBmcmVxID09IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgxMykgfHwKKwkgICAgZnJlcSA9PSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koMTQpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWlmIChsaWtlbHkoKGJlYWNvbl9jaGFuLT5iZWFjb25fZm91bmQgfHwKKwkgICAgKGJlYWNvbl9jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSB8fAorCSAgICAoYmVhY29uX2NoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICAgIWZyZXFfaXNfY2hhbl8xMl8xM18xNChiZWFjb25fY2hhbi0+Y2VudGVyX2ZyZXEpKSkpKQorCQlyZXR1cm4gMDsKKworCXJlZ19iZWFjb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnX2JlYWNvbiksIGdmcCk7CisJaWYgKCFyZWdfYmVhY29uKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IEZvdW5kIG5ldyBiZWFjb24gb24gIgorCQkiZnJlcXVlbmN5OiAlZCBNSHogKENoICVkKSBvbiAlc1xuIiwKKwkJYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxLAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxKSwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2VuZGlmCisJbWVtY3B5KCZyZWdfYmVhY29uLT5jaGFuLCBiZWFjb25fY2hhbiwKKwkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOworCisKKwkvKgorCSAqIFNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBCSCBvciBhbmQgbm9uLUJIIGNvbnRleHQKKwkgKiB3ZSBtdXN0IHVzZSBzcGluX2xvY2tfYmgoKQorCSAqLworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZWdfYmVhY29uLT5saXN0LCAmcmVnX3BlbmRpbmdfYmVhY29ucyk7CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfcmRfcnVsZXMoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTMyNiw4ICsxODE2LDEwIEBACiAJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CiAJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CiAKLQkJLyogVGhlcmUgbWF5IG5vdCBiZSBkb2N1bWVudGF0aW9uIGZvciBtYXggYW50ZW5uYSBnYWluCi0JCSAqIGluIGNlcnRhaW4gcmVnaW9ucyAqLworCQkvKgorCQkgKiBUaGVyZSBtYXkgbm90IGJlIGRvY3VtZW50YXRpb24gZm9yIG1heCBhbnRlbm5hIGdhaW4KKwkJICogaW4gY2VydGFpbiByZWdpb25zCisJCSAqLwogCQlpZiAocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0KCVkIEtIeiAtICVkIEtIeiBAICVkIEtIeiksICIKIAkJCQkiKCVkIG1CaSwgJWQgbUJtKVxuIiwKQEAgLTEzNTAsMTMgKzE4NDIsMTMgQEAKIHsKIAogCWlmIChpc19pbnRlcnNlY3RlZF9hbHBoYTIocmQtPmFscGhhMikpIHsKLQkJc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7Ci0JCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwogCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5KSB7Ci0JCQkJd2lwaHkgPSBsYXN0X3JlcXVlc3QtPndpcGh5OwotCQkJCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCQkJZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCgKKwkJCQlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisJCQlpZiAoZHJ2KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCiAJCQkJCSJkb21haW4gdXBkYXRlZCBieSBBUCB0bzogJWMlY1xuIiwKIAkJCQkJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSwKQEAgLTE0MjIsNyArMTkxNCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmludGVyc2VjdGVkX3JkID0gTlVMTDsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IE5VTEw7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7CisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OwogCS8qIFNvbWUgYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdCAqLwogCiAJaWYgKGlzX3dvcmxkX3JlZ2RvbShyZC0+YWxwaGEyKSkgewpAQCAtMTQzOSwyMyArMTkzMSwyNyBAQAogCWlmICghbGFzdF9yZXF1ZXN0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIExldHMgb25seSBib3RoZXIgcHJvY2VlZGluZyBvbiB0aGUgc2FtZSBhbHBoYTIgaWYgdGhlIGN1cnJlbnQKKwkvKgorCSAqIExldHMgb25seSBib3RoZXIgcHJvY2VlZGluZyBvbiB0aGUgc2FtZSBhbHBoYTIgaWYgdGhlIGN1cnJlbnQKIAkgKiByZCBpcyBub24gc3RhdGljIChpdCBtZWFucyBDUkRBIHdhcyBwcmVzZW50IGFuZCB3YXMgdXNlZCBsYXN0KQotCSAqIGFuZCB0aGUgcGVuZGluZyByZXF1ZXN0IGNhbWUgaW4gZnJvbSBhIGNvdW50cnkgSUUgKi8KLQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCS8qIElmIHNvbWVvbmUgZWxzZSBhc2tlZCB1cyB0byBjaGFuZ2UgdGhlIHJkIGxldHMgb25seSBib3RoZXIKLQkJICogY2hlY2tpbmcgaWYgdGhlIGFscGhhMiBjaGFuZ2VzIGlmIENSREEgd2FzIGFscmVhZHkgY2FsbGVkICovCisJICogYW5kIHRoZSBwZW5kaW5nIHJlcXVlc3QgY2FtZSBpbiBmcm9tIGEgY291bnRyeSBJRQorCSAqLworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkvKgorCQkgKiBJZiBzb21lb25lIGVsc2UgYXNrZWQgdXMgdG8gY2hhbmdlIHRoZSByZCBsZXRzIG9ubHkgYm90aGVyCisJCSAqIGNoZWNraW5nIGlmIHRoZSBhbHBoYTIgY2hhbmdlcyBpZiBDUkRBIHdhcyBhbHJlYWR5IGNhbGxlZAorCQkgKi8KIAkJaWYgKCFpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pICYmCi0JCSAgICAhcmVnZG9tX2NoYW5nZWQocmQtPmFscGhhMikpCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocmQtPmFscGhhMikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3aXBoeSA9IGxhc3RfcmVxdWVzdC0+d2lwaHk7Ci0KLQkvKiBOb3cgbGV0cyBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluLCB1cGRhdGUgYWxsIGRyaXZlciBjaGFubmVscworCS8qCisJICogTm93IGxldHMgc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiwgdXBkYXRlIGFsbCBkcml2ZXIgY2hhbm5lbHMKIAkgKiBhbmQgZmluYWxseSBpbmZvcm0gdGhlbSBvZiB3aGF0IHdlIGhhdmUgZG9uZSwgaW4gY2FzZSB0aGV5IHdhbnQKIAkgKiB0byByZXZpZXcgb3IgYWRqdXN0IHRoZWlyIG93biBzZXR0aW5ncyBiYXNlZCBvbiB0aGVpciBvd24KLQkgKiBpbnRlcm5hbCBFRVBST00gZGF0YSAqLworCSAqIGludGVybmFsIEVFUFJPTSBkYXRhCisJICovCiAKIAlpZiAoV0FSTl9PTighcmVnX2lzX3ZhbGlkX3JlcXVlc3QocmQtPmFscGhhMikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0NjcsMjEgKzE5NjMsMjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKIAlpZiAoIWxhc3RfcmVxdWVzdC0+aW50ZXJzZWN0KSB7CiAJCWludCByOwogCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX0RSSVZFUikgeworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgewogCQkJcmVzZXRfcmVnZG9tYWlucygpOwogCQkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCS8qIEZvciBhIGRyaXZlciBoaW50LCBsZXRzIGNvcHkgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZQotCQkgKiBkcml2ZXIgd2FudGVkIHRvIHRoZSB3aXBoeSB0byBkZWFsIHdpdGggY29uZmxpY3RzICovCisJCS8qCisJCSAqIEZvciBhIGRyaXZlciBoaW50LCBsZXRzIGNvcHkgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZQorCQkgKiBkcml2ZXIgd2FudGVkIHRvIHRoZSB3aXBoeSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisJCSAqLwogCi0JCUJVR19PTihsYXN0X3JlcXVlc3QtPndpcGh5LT5yZWdkKTsKKwkJQlVHX09OKHJlcXVlc3Rfd2lwaHktPnJlZ2QpOwogCi0JCXIgPSByZWdfY29weV9yZWdkKCZsYXN0X3JlcXVlc3QtPndpcGh5LT5yZWdkLCByZCk7CisJCXIgPSByZWdfY29weV9yZWdkKCZyZXF1ZXN0X3dpcGh5LT5yZWdkLCByZCk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAKQEAgLTE0OTIsMTcgKzE5OTIsMTkgQEAKIAogCS8qIEludGVyc2VjdGlvbiByZXF1aXJlcyBhIGJpdCBtb3JlIHdvcmsgKi8KIAotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKIAogCQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNmZzgwMjExX3JlZ2RvbWFpbik7CiAJCWlmICghaW50ZXJzZWN0ZWRfcmQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBXZSBjYW4gdHJhc2ggd2hhdCBDUkRBIHByb3ZpZGVkIG5vdy4KKwkJLyoKKwkJICogV2UgY2FuIHRyYXNoIHdoYXQgQ1JEQSBwcm92aWRlZCBub3cuCiAJCSAqIEhvd2V2ZXIgaWYgYSBkcml2ZXIgcmVxdWVzdGVkIHRoaXMgc3BlY2lmaWMgcmVndWxhdG9yeQotCQkgKiBkb21haW4gd2Uga2VlcCBpdCBmb3IgaXRzIHByaXZhdGUgdXNlICovCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0RSSVZFUikKLQkJCWxhc3RfcmVxdWVzdC0+d2lwaHktPnJlZ2QgPSByZDsKKwkJICogZG9tYWluIHdlIGtlZXAgaXQgZm9yIGl0cyBwcml2YXRlIHVzZQorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIpCisJCQlyZXF1ZXN0X3dpcGh5LT5yZWdkID0gcmQ7CiAJCWVsc2UKIAkJCWtmcmVlKHJkKTsKIApAQCAtMTUyMiw4ICsyMDI0LDEwIEBACiAJQlVHX09OKCFjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAKIAlpZiAocmQgIT0gY291bnRyeV9pZV9yZWdkb21haW4pIHsKLQkJLyogSW50ZXJzZWN0IHdoYXQgQ1JEQSByZXR1cm5lZCBhbmQgb3VyIHdoYXQgd2UKLQkJICogaGFkIGJ1aWx0IGZyb20gdGhlIENvdW50cnkgSUUgcmVjZWl2ZWQgKi8KKwkJLyoKKwkJICogSW50ZXJzZWN0IHdoYXQgQ1JEQSByZXR1cm5lZCBhbmQgb3VyIHdoYXQgd2UKKwkJICogaGFkIGJ1aWx0IGZyb20gdGhlIENvdW50cnkgSUUgcmVjZWl2ZWQKKwkJICovCiAKIAkJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAKQEAgLTE1MzMsMTYgKzIwMzcsMTggQEAKIAkJa2ZyZWUoY291bnRyeV9pZV9yZWdkb21haW4pOwogCQljb3VudHJ5X2llX3JlZ2RvbWFpbiA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJLyogVGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBDUkRBIHdhcyBub3QgcHJlc2VudCBhbmQKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBDUkRBIHdhcyBub3QgcHJlc2VudCBhbmQKIAkJICogT0xEX1JFR1VMQVRPUlkgd2FzIGVuYWJsZWQuIFdlIGludGVyc2VjdCBvdXIgQ291bnRyeQotCQkgKiBJRSByZCBhbmQgd2hhdCB3YXMgc2V0IG9uIGNmZzgwMjExIG9yaWdpbmFsbHkgKi8KKwkJICogSUUgcmQgYW5kIHdoYXQgd2FzIHNldCBvbiBjZmc4MDIxMSBvcmlnaW5hbGx5CisJCSAqLwogCQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNmZzgwMjExX3JlZ2RvbWFpbik7CiAJfQogCiAJaWYgKCFpbnRlcnNlY3RlZF9yZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCWRydiA9IHdpcGh5X3RvX2RldihyZXF1ZXN0X3dpcGh5KTsKIAogCWRydi0+Y291bnRyeV9pZV9hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOwogCWRydi0+Y291bnRyeV9pZV9hbHBoYTJbMV0gPSByZC0+YWxwaGEyWzFdOwpAQCAtMTU2MCwxMyArMjA2NiwxNyBAQAogfQogCiAKLS8qIFVzZSB0aGlzIGNhbGwgdG8gc2V0IHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLiBDb25mbGljdHMgd2l0aAorLyoKKyAqIFVzZSB0aGlzIGNhbGwgdG8gc2V0IHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLiBDb25mbGljdHMgd2l0aAogICogbXVsdGlwbGUgZHJpdmVycyBjYW4gYmUgaXJvbmVkIG91dCBsYXRlci4gQ2FsbGVyIG11c3QndmUgYWxyZWFkeQotICoga21hbGxvYydkIHRoZSByZCBzdHJ1Y3R1cmUuIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfZHJ2X211dGV4ICovCisgKiBrbWFsbG9jJ2QgdGhlIHJkIHN0cnVjdHVyZS4gQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9tdXRleAorICovCiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7CiAJaW50IHI7CiAKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB1cGRhdGUgdGhlIHdpcGh5cywgdGhpcyBpcyBkb25lIGJlbG93ICovCiAJciA9IF9fc2V0X3JlZ2RvbShyZCk7CiAJaWYgKHIpIHsKQEAgLTE1ODMsNTcgKzIwOTMsODcgQEAKIAogCXByaW50X3JlZ2RvbWFpbihjZmc4MDIxMV9yZWdkb21haW4pOwogCisJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQobGFzdF9yZXF1ZXN0KTsKKwogCXJldHVybiByOwogfQogCi0vKiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX2Rydl9tdXRleCAqLworLyogQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9tdXRleCAqLwogdm9pZCByZWdfZGV2aWNlX3JlbW92ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogeworCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeTsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKwogCWtmcmVlKHdpcGh5LT5yZWdkKTsKLQlpZiAoIWxhc3RfcmVxdWVzdCB8fCAhbGFzdF9yZXF1ZXN0LT53aXBoeSkKKwlpZiAoIWxhc3RfcmVxdWVzdCB8fCAhcmVxdWVzdF93aXBoeSkKIAkJcmV0dXJuOwotCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KQorCWlmIChyZXF1ZXN0X3dpcGh5ICE9IHdpcGh5KQogCQlyZXR1cm47Ci0JbGFzdF9yZXF1ZXN0LT53aXBoeSA9IE5VTEw7CisJbGFzdF9yZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CiAJbGFzdF9yZXF1ZXN0LT5jb3VudHJ5X2llX2VudiA9IEVOVklST05fQU5ZOwogfQogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCXJlZ19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmVndWxhdG9yeSIsIDAsIE5VTEwsIDApOwogCWlmIChJU19FUlIocmVnX3BkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihyZWdfcGRldik7CiAKKwlzcGluX2xvY2tfaW5pdCgmcmVnX3JlcXVlc3RzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gc3RhdGljX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKTsKIAogCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBVc2luZyBzdGF0aWMgcmVndWxhdG9yeSBkb21haW4gaW5mb1xuIik7CiAJcHJpbnRfcmVnZG9tYWluX2luZm8oY2ZnODAyMTFfcmVnZG9tYWluKTsKLQkvKiBUaGUgb2xkIGNvZGUgc3RpbGwgcmVxdWVzdHMgZm9yIGEgbmV3IHJlZ2RvbWFpbiBhbmQgaWYKKwkvKgorCSAqIFRoZSBvbGQgY29kZSBzdGlsbCByZXF1ZXN0cyBmb3IgYSBuZXcgcmVnZG9tYWluIGFuZCBpZgogCSAqIHlvdSBoYXZlIENSREEgeW91IGdldCBpdCB1cGRhdGVkLCBvdGhlcndpc2UgeW91IGdldAogCSAqIHN0dWNrIHdpdGggdGhlIHN0YXRpYyB2YWx1ZXMuIFdlIGlnbm9yZSAiRVUiIGNvZGUgYXMKLQkgKiB0aGF0IGlzIG5vdCBhIHZhbGlkIElTTyAvIElFQyAzMTY2IGFscGhhMiAqLworCSAqIHRoYXQgaXMgbm90IGEgdmFsaWQgSVNPIC8gSUVDIDMxNjYgYWxwaGEyCisJICovCiAJaWYgKGllZWU4MDIxMV9yZWdkb21bMF0gIT0gJ0UnIHx8IGllZWU4MDIxMV9yZWdkb21bMV0gIT0gJ1UnKQotCQllcnIgPSBfX3JlZ3VsYXRvcnlfaGludChOVUxMLCBSRUdET01fU0VUX0JZX0NPUkUsCi0JCQkJCWllZWU4MDIxMV9yZWdkb20sIDAsIEVOVklST05fQU5ZKTsKKwkJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoaWVlZTgwMjExX3JlZ2RvbSk7CiAjZWxzZQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKIAotCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwgIjAwIiwgMCwgRU5WSVJPTl9BTlkpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGNhbGxpbmcgQ1JEQSBmYWlsZWQgLSAiCi0JCSAgICAgICAidW5hYmxlIHRvIHVwZGF0ZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiwgIgotCQkgICAgICAgInVzaW5nIHN0YXRpYyBkZWZpbml0aW9uXG4iKTsKKwllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZSgiMDAiKTsKICNlbmRpZgorCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU5PTUVNKQorCQkJcmV0dXJuIGVycjsKKwkJLyoKKwkJICogTi5CLiBrb2JqZWN0X3VldmVudF9lbnYoKSBjYW4gZmFpbCBtYWlubHkgZm9yIHdoZW4gd2UncmUgb3V0CisJCSAqIG1lbW9yeSB3aGljaCBpcyBoYW5kbGVkIGFuZCBwcm9wYWdhdGVkIGFwcHJvcHJpYXRlbHkgYWJvdmUKKwkJICogYnV0IGl0IGNhbiBhbHNvIGZhaWwgZHVyaW5nIGEgbmV0bGlua19icm9hZGNhc3QoKSBvciBkdXJpbmcKKwkJICogZWFybHkgYm9vdCBmb3IgY2FsbF91c2VybW9kZWhlbHBlcigpLiBGb3Igbm93IHRyZWF0IHRoZXNlCisJCSAqIGVycm9ycyBhcyBub24tZmF0YWwuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgImNmZzgwMjExOiBrb2JqZWN0X3VldmVudF9lbnYoKSB3YXMgdW5hYmxlICIKKwkJCSJ0byBjYWxsIENSREEgZHVyaW5nIGluaXQiKTsKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisJCS8qIFdlIHdhbnQgdG8gZmluZCBvdXQgZXhhY3RseSB3aHkgd2hlbiBkZWJ1Z2dpbmcgKi8KKwkJV0FSTl9PTihlcnIpOworI2VuZGlmCisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcmVndWxhdG9yeV9leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdCwgKnRtcDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbiwgKmJ0bXA7CisKKwljYW5jZWxfd29ya19zeW5jKCZyZWdfd29yayk7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlyZXNldF9yZWdkb21haW5zKCk7CiAKQEAgLTE2NDQsNSArMjE4NCwzMyBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocmVnX3BkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19wZW5kaW5nX2JlYWNvbnMpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19wZW5kaW5nX2JlYWNvbnMsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZyZWdfYmVhY29uLT5saXN0KTsKKwkJCWtmcmVlKHJlZ19iZWFjb24pOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZyZWdfYmVhY29uX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19iZWFjb25fbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19iZWFjb24tPmxpc3QpOworCQkJa2ZyZWUocmVnX2JlYWNvbik7CisJCX0KKwl9CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX3JlcXVlc3QsIHRtcCwKKwkJCQkJICZyZWdfcmVxdWVzdHNfbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19yZXF1ZXN0LT5saXN0KTsKKwkJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmggYi9uZXQvd2lyZWxlc3MvcmVnLmgKaW5kZXggZmU4YzgzZi4uZTM3ODI5YSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5oCisrKyBiL25ldC93aXJlbGVzcy9yZWcuaApAQCAtNiw2ICs2LDggQEAKIGJvb2wgaXNfd29ybGRfcmVnZG9tKGNvbnN0IGNoYXIgKmFscGhhMik7CiBib29sIHJlZ19pc192YWxpZF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmFscGhhMik7CiAKK2ludCByZWd1bGF0b3J5X2hpbnRfdXNlcihjb25zdCBjaGFyICphbHBoYTIpOworCiB2b2lkIHJlZ19kZXZpY2VfcmVtb3ZlKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpOwpAQCAtMTQsMjYgKzE2LDI0IEBACiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpOwogCiAvKioKLSAqIF9fcmVndWxhdG9yeV9oaW50IC0gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZSBhIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAd2lwaHk6IGlmIHRoZSBoaW50IGNvbWVzIGZyb20gY291bnRyeSBpbmZvcm1hdGlvbiBmcm9tIGFuIEFQLCB0aGlzCi0gKglpcyByZXF1aXJlZCB0byBiZSBzZXQgdG8gdGhlIHdpcGh5IHRoYXQgcmVjZWl2ZWQgdGhlIGluZm9ybWF0aW9uCi0gKiBAYWxwaGEyOiB0aGUgSVNPL0lFQyAzMTY2IGFscGhhMiBiZWluZyBjbGFpbWVkIHRoZSByZWd1bGF0b3J5IGRvbWFpbgotICoJc2hvdWxkIGJlIGluLgotICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHByb2Nlc3NlZCBjb3VudHJ5IElFLCBzZXQgdGhpcyB0byAwCi0gKiAJaWYgdGhlIGhpbnQgZGlkIG5vdCBjb21lIGZyb20gYSBjb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9lbnY6IHRoZSBlbnZpcm9ubWVudCB0aGUgSUUgdG9sZCB1cyB3ZSBhcmUgaW4sICVFTlZJUk9OXyoKKyAqIHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24gLSBoaW50cyBhIGJlYWNvbiB3YXMgZm91bmQgb24gYSBjaGFubmVsCisgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2Ugd2hlcmUgdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBiZWFjb25fY2hhbjogdGhlIGNoYW5uZWwgb24gd2hpY2ggdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKICAqCi0gKiBUaGUgV2lyZWxlc3Mgc3Vic3lzdGVtIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlCi0gKiB3aGF0IGl0IGJlbGlldmVzIHNob3VsZCBiZSB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBieSBnaXZpbmcgaXQgYW4KLSAqIElTTy9JRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGl0IGtub3dzIGl0cyByZWd1bGF0b3J5IGRvbWFpbiBzaG91bGQgYmUKLSAqIGluLgorICogVGhpcyBpbmZvcm1zIHRoZSB3aXJlbGVzcyBjb3JlIHRoYXQgYSBiZWFjb24gZnJvbSBhbiBBUCB3YXMgZm91bmQgb24KKyAqIHRoZSBjaGFubmVsIHByb3ZpZGVkLiBUaGlzIGFsbG93cyB0aGUgd2lyZWxlc3MgY29yZSB0byBtYWtlIGVkdWNhdGVkCisgKiBndWVzc2VzIG9uIHJlZ3VsYXRvcnkgdG8gaGVscCB3aXRoIHdvcmxkIHJvYW1pbmcuIFRoaXMgaXMgb25seSB1c2VkIGZvcgorICogd29ybGQgcm9hbWluZyAtLSB3aGVuIHdlIGRvIG5vdCBrbm93IG91ciBjdXJyZW50IGxvY2F0aW9uLiBUaGlzIGlzCisgKiBvbmx5IHVzZWZ1bCBvbiBjaGFubmVscyAxMiwgMTMgYW5kIDE0IG9uIHRoZSAyIEdIeiBiYW5kIGFzIGNoYW5uZWxzCisgKiAxLTExIGFyZSBhbHJlYWR5IGVuYWJsZWQgYnkgdGhlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluOyBhbmQgb24KKyAqIG5vbi1yYWRhciA1IEdIeiBjaGFubmVscy4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgYWxsIHdlbnQgZmluZSwgJS1FQUxSRUFEWSBpZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGhhZAotICogYWxyZWFkeSBiZWVuIHNldCBvciBvdGhlciBzdGFuZGFyZCBlcnJvciBjb2Rlcy4KLSAqCisgKiBEcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhpcywgY2ZnODAyMTEgd2lsbCBkbyBpdCBmb3IgYWZ0ZXIgYSBzY2FuCisgKiBvbiBhIG5ld2x5IGZvdW5kIEJTUy4KICAqLwotZXh0ZXJuIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICAgICBjb25zdCBjaGFyICphbHBoYTIsIHUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJICAgICBlbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2Vudik7CitpbnQgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmJlYWNvbl9jaGFuLAorCQkJCQlnZnBfdCBnZnApOwogCiAjZW5kaWYgIC8qIF9fTkVUX1dJUkVMRVNTX1JFR19IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwppbmRleCBiMTg5M2M4Li4yODBkYmNkIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jCisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmMKQEAgLTYyLDYgKzYyLDE4IEBACiB9CiAKIC8qIG11c3QgaG9sZCBkZXYtPmJzc19sb2NrISAqLwordm9pZCBjZmc4MDIxMV9ic3NfYWdlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCXVuc2lnbmVkIGxvbmcgYWdlX2ppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKGFnZV9zZWNzICogTVNFQ19QRVJfU0VDKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlic3MtPnRzIC09IGFnZV9qaWZmaWVzOworCX0KK30KKworLyogbXVzdCBob2xkIGRldi0+YnNzX2xvY2shICovCiB2b2lkIGNmZzgwMjExX2Jzc19leHBpcmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqdG1wOwpAQCAtMzU4LDcgKzM3MCw2IEBACiAJCWZvdW5kLT5wdWIuYmVhY29uX2ludGVydmFsID0gcmVzLT5wdWIuYmVhY29uX2ludGVydmFsOwogCQlmb3VuZC0+cHViLnRzZiA9IHJlcy0+cHViLnRzZjsKIAkJZm91bmQtPnB1Yi5zaWduYWwgPSByZXMtPnB1Yi5zaWduYWw7Ci0JCWZvdW5kLT5wdWIuc2lnbmFsX3R5cGUgPSByZXMtPnB1Yi5zaWduYWxfdHlwZTsKIAkJZm91bmQtPnB1Yi5jYXBhYmlsaXR5ID0gcmVzLT5wdWIuY2FwYWJpbGl0eTsKIAkJZm91bmQtPnRzID0gcmVzLT50czsKIAkJa3JlZl9wdXQoJnJlcy0+cmVmLCBic3NfcmVsZWFzZSk7CkBAIC0zODAsOCArMzkxLDcgQEAKIGNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCi0JCQkgIHMzMiBzaWduYWwsIGVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgc2lndHlwZSwKLQkJCSAgZ2ZwX3QgZ2ZwKQorCQkJICBzMzIgc2lnbmFsLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzOwogCXNpemVfdCBpZWxlbiA9IGxlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKQEAgLTM4OSw3ICszOTksNyBAQAogCWJvb2wgb3ZlcndyaXRlOwogCXNpemVfdCBwcml2c3ogPSB3aXBoeS0+YnNzX3ByaXZfc2l6ZTsKIAotCWlmIChXQVJOX09OKHNpZ3R5cGUgPT0gTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQyAmJgorCWlmIChXQVJOX09OKHdpcGh5LT5zaWduYWxfdHlwZSA9PSBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDICYmCiAJICAgICAgICAgICAgKHNpZ25hbCA8IDAgfHwgc2lnbmFsID4gMTAwKSkpCiAJCXJldHVybiBOVUxMOwogCkBAIC00MDMsNyArNDEzLDYgQEAKIAogCW1lbWNweShyZXMtPnB1Yi5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKTsKIAlyZXMtPnB1Yi5jaGFubmVsID0gY2hhbm5lbDsKLQlyZXMtPnB1Yi5zaWduYWxfdHlwZSA9IHNpZ3R5cGU7CiAJcmVzLT5wdWIuc2lnbmFsID0gc2lnbmFsOwogCXJlcy0+cHViLnRzZiA9IGxlNjRfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC50aW1lc3RhbXApOwogCXJlcy0+cHViLmJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5iZWFjb25faW50KTsKQEAgLTQyMSw2ICs0MzAsOSBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmIChyZXMtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbih3aXBoeSwgY2hhbm5lbCwgZ2ZwKTsKKwogCS8qIGNmZzgwMjExX2Jzc191cGRhdGUgZ2l2ZXMgdXMgYSByZWZlcmVuY2VkIHJlc3VsdCAqLwogCXJldHVybiAmcmVzLT5wdWI7CiB9CkBAIC01ODQsMTYgKzU5NiwyNSBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZWxhcHNlZF9qaWZmaWVzX21zZWNzKHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzOworCisJaWYgKGVuZCA+PSBzdGFydCkKKwkJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kIC0gc3RhcnQpOworCisJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kICsgKE1BWF9KSUZGWV9PRkZTRVQgLSBzdGFydCkgKyAxKTsKK30KIAogc3RhdGljIGNoYXIgKgotaWVlZTgwMjExX2JzcyhzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsCi0JCSAgICAgIGNoYXIgKmN1cnJlbnRfZXYsIGNoYXIgKmVuZF9idWYpCitpZWVlODAyMTFfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJICAgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCBjaGFyICpjdXJyZW50X2V2LAorCSAgICAgIGNoYXIgKmVuZF9idWYpCiB7CiAJc3RydWN0IGl3X2V2ZW50IGl3ZTsKIAl1OCAqYnVmLCAqY2ZnLCAqcDsKIAl1OCAqaWUgPSBic3MtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50czsKLQlpbnQgcmVtID0gYnNzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLCBpOworCWludCByZW0gPSBic3MtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsIGksIHNpZzsKIAlib29sIGlzbWVzaCA9IGZhbHNlOwogCiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKQEAgLTYxNywxOSArNjM4LDI4IEBACiAJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCiAJCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwogCi0JaWYgKGJzcy0+cHViLnNpZ25hbF90eXBlICE9IENGRzgwMjExX1NJR05BTF9UWVBFX05PTkUpIHsKKwlpZiAod2lwaHktPnNpZ25hbF90eXBlICE9IENGRzgwMjExX1NJR05BTF9UWVBFX05PTkUpIHsKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZRVUFMOwogCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQgfAogCQkJCSAgICAgSVdfUVVBTF9OT0lTRV9JTlZBTElEIHwKLQkJCQkgICAgIElXX1FVQUxfUVVBTF9JTlZBTElEOwotCQlzd2l0Y2ggKGJzcy0+cHViLnNpZ25hbF90eXBlKSB7CisJCQkJICAgICBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJc3dpdGNoICh3aXBoeS0+c2lnbmFsX3R5cGUpIHsKIAkJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06Ci0JCQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5wdWIuc2lnbmFsIC8gMTAwOworCQkJc2lnID0gYnNzLT5wdWIuc2lnbmFsIC8gMTAwOworCQkJaXdlLnUucXVhbC5sZXZlbCA9IHNpZzsKIAkJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsKKwkJCWlmIChzaWcgPCAtMTEwKQkJLyogcmF0aGVyIGJhZCAqLworCQkJCXNpZyA9IC0xMTA7CisJCQllbHNlIGlmIChzaWcgPiAtNDApCS8qIHBlcmZlY3QgKi8KKwkJCQlzaWcgPSAtNDA7CisJCQkvKiB3aWxsIGdpdmUgYSByYW5nZSBvZiAwIC4uIDcwICovCisJCQlpd2UudS5xdWFsLnF1YWwgPSBzaWcgKyAxMTA7CiAJCQlicmVhazsKIAkJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6CiAJCQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5wdWIuc2lnbmFsOworCQkJLyogd2lsbCBnaXZlIHJhbmdlIDAgLi4gMTAwICovCisJCQlpd2UudS5xdWFsLnF1YWwgPSBic3MtPnB1Yi5zaWduYWw7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIG5vdCByZWFjaGVkICovCkBAIC03NjMsOCArNzkzLDggQEAKIAkJCQkJCSAgJml3ZSwgYnVmKTsKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JCXNwcmludGYoYnVmLCAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCi0JCQlqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBic3MtPnRzKSk7CisJCXNwcmludGYoYnVmLCAiIExhc3QgYmVhY29uOiAldW1zIGFnbyIsCisJCQllbGFwc2VkX2ppZmZpZXNfbXNlY3MoYnNzLT50cykpOwogCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwogCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKIAkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKQEAgLTc5Myw4ICs4MjMsOCBAQAogCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOwogCQkJcmV0dXJuIC1FMkJJRzsKIAkJfQotCQljdXJyZW50X2V2ID0gaWVlZTgwMjExX2JzcyhpbmZvLCBic3MsCi0JCQkJCQkgICBjdXJyZW50X2V2LCBlbmRfYnVmKTsKKwkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9ic3MoJmRldi0+d2lwaHksIGluZm8sIGJzcywKKwkJCQkJICAgY3VycmVudF9ldiwgZW5kX2J1Zik7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKIAlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zeXNmcy5jIGIvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKaW5kZXggMjZhNzJiMC4uZWZlM2M1YyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKKysrIGIvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsIGZtdCAiXG4iLCBkZXZfdG9fcmRldihkZXYpLT5tZW1iZXIpOwlcCiB9CiAKLVNIT1dfRk1UKGluZGV4LCAiJWQiLCBpZHgpOworU0hPV19GTVQoaW5kZXgsICIlZCIsIHdpcGh5X2lkeCk7CiBTSE9XX0ZNVChtYWNhZGRyZXNzLCAiJXBNIiwgd2lwaHkucGVybV9hZGRyKTsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGllZWU4MDIxMV9kZXZfYXR0cnNbXSA9IHsKQEAgLTYwLDYgKzYwLDggQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBkZXZfdG9fcmRldihkZXYpOwogCWludCByZXQgPSAwOwogCisJcmRldi0+c3VzcGVuZF9hdCA9IGdldF9zZWNvbmRzKCk7CisKIAlpZiAocmRldi0+b3BzLT5zdXNwZW5kKSB7CiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSByZGV2LT5vcHMtPnN1c3BlbmQoJnJkZXYtPndpcGh5KTsKQEAgLTc0LDYgKzc2LDExIEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gZGV2X3RvX3JkZXYoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAorCS8qIEFnZSBzY2FuIHJlc3VsdHMgd2l0aCB0aW1lIHNwZW50IGluIHN1c3BlbmQgKi8KKwlzcGluX2xvY2tfYmgoJnJkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfYWdlKHJkZXYsIGdldF9zZWNvbmRzKCkgLSByZGV2LT5zdXNwZW5kX2F0KTsKKwlzcGluX3VubG9ja19iaCgmcmRldi0+YnNzX2xvY2spOworCiAJaWYgKHJkZXYtPm9wcy0+cmVzdW1lKSB7CiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSByZGV2LT5vcHMtPnJlc3VtZSgmcmRldi0+d2lwaHkpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1OGU0ODlmLi5iODRhOWI0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtMTM3LDMgKzEzNywxMDAgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdtb2RlKTsKKworCitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJaW50IGMgPSAwOworCisJaWYgKCF3ZGV2KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIxOworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OworCisJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisKKwlzd2l0Y2ggKHdkZXYtPndpcGh5LT5zaWduYWxfdHlwZSkgeworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IC0xMTA7CisJCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gNzA7CisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMzU7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQlicmVhazsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTAwOworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKKwkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJYnJlYWs7CisJfQorCisJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gcmFuZ2UtPm1heF9xdWFsLmxldmVsIC8gMjsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSByYW5nZS0+bWF4X3F1YWwubm9pc2UgLyAyOworCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQ7CisKKwlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKKwkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKKworCisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKKwkJaW50IGk7CisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJCXNiYW5kID0gd2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdOworCisJCWlmICghc2JhbmQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgJiYgYyA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCisJCQlpZiAoIShjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgeworCQkJCXJhbmdlLT5mcmVxW2NdLmkgPQorCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJCQljaGFuLT5jZW50ZXJfZnJlcSk7CisJCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmNlbnRlcl9mcmVxOworCQkJCXJhbmdlLT5mcmVxW2NdLmUgPSA2OworCQkJCWMrKzsKKwkJCX0KKwkJfQorCX0KKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gYzsKKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGM7CisKKwlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CisKKwlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X2dpd3JhbmdlKTsKZGlmZiAtLWdpdCBhL25ldC94MjUvYWZfeDI1LmMgYi9uZXQveDI1L2FmX3gyNS5jCmluZGV4IDhmNzZmNDAuLjljYTE3YjEgMTAwNjQ0Ci0tLSBhL25ldC94MjUvYWZfeDI1LmMKKysrIGIvbmV0L3gyNS9hZl94MjUuYwpAQCAtOTUxLDEwICs5NTEsOCBAQAogCS8qCiAJICoJSW5jb21pbmcgQ2FsbCBVc2VyIERhdGEuCiAJICovCi0JaWYgKHNrYi0+bGVuID49IDApIHsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7Ci0JCW1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRsZW5ndGggPSBza2ItPmxlbjsKLQl9CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7CisJbWFrZXgyNS0+Y2FsbHVzZXJkYXRhLmN1ZGxlbmd0aCA9IHNrYi0+bGVuOwogCiAJc2stPnNrX2Fja19iYWNrbG9nKys7CiAKQEAgLTExMjIsOCArMTEyMCw5IEBACiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJc2tiX3F1ZXVlX3RhaWwoJngyNS0+aW50ZXJydXB0X291dF9xdWV1ZSwgc2tiKTsKIAllbHNlIHsKLQkJbGVuID0geDI1X291dHB1dChzaywgc2tiKTsKLQkJaWYgKGxlbiA8IDApCisJCXJjID0geDI1X291dHB1dChzaywgc2tiKTsKKwkJbGVuID0gcmM7CisJCWlmIChyYyA8IDApCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJZWxzZSBpZiAoeDI1LT5xYml0aW5jbCkKIAkJCWxlbisrOwpAQCAtMTYwOCw3ICsxNjA3LDcgQEAKIAogU09DS09QU19XUkFQKHgyNV9wcm90bywgQUZfWDI1KTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB4MjVfcGFja2V0X3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHgyNV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfWDI1KSwKIAkuZnVuYyA9CXgyNV9sYXBiX3JlY2VpdmVfZnJhbWUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGUyNWZmNjIuLjYyYTU0MjUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTc0OCwxMiArNzQ4LDUxIEBACiAJCXNjaGVkdWxlX3dvcmsoJm5ldC0+eGZybS5zdGF0ZV9oYXNoX3dvcmspOwogfQogCitzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2xvb2tfYXQoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LAorCQkJICAgICAgIHN0cnVjdCBmbG93aSAqZmwsIHVuc2lnbmVkIHNob3J0IGZhbWlseSwKKwkJCSAgICAgICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqKmJlc3QsIGludCAqYWNxX2luX3Byb2dyZXNzLAorCQkJICAgICAgIGludCAqZXJyb3IpCit7CisJLyogUmVzb2x1dGlvbiBsb2dpYzoKKwkgKiAxLiBUaGVyZSBpcyBhIHZhbGlkIHN0YXRlIHdpdGggbWF0Y2hpbmcgc2VsZWN0b3IuIERvbmUuCisJICogMi4gVmFsaWQgc3RhdGUgd2l0aCBpbmFwcHJvcHJpYXRlIHNlbGVjdG9yLiBTa2lwLgorCSAqCisJICogRW50ZXJpbmcgYXJlYSBvZiAic3lzZGVwcyIuCisJICoKKwkgKiAzLiBJZiBzdGF0ZSBpcyBub3QgdmFsaWQsIHNlbGVjdG9yIGlzIHRlbXBvcmFyeSwgaXQgc2VsZWN0cworCSAqICAgIG9ubHkgc2Vzc2lvbiB3aGljaCB0cmlnZ2VyZWQgcHJldmlvdXMgcmVzb2x1dGlvbi4gS2V5CisJICogICAgbWFuYWdlciB3aWxsIGRvIHNvbWV0aGluZyB0byBpbnN0YWxsIGEgc3RhdGUgd2l0aCBwcm9wZXIKKwkgKiAgICBzZWxlY3Rvci4KKwkgKi8KKwlpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkgeworCQlpZiAoKHgtPnNlbC5mYW1pbHkgJiYKKwkJICAgICAheGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgeC0+c2VsLmZhbWlseSkpIHx8CisJCSAgICAhc2VjdXJpdHlfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCh4LCBwb2wsIGZsKSkKKwkJCXJldHVybjsKKworCQlpZiAoISpiZXN0IHx8CisJCSAgICAoKmJlc3QpLT5rbS5keWluZyA+IHgtPmttLmR5aW5nIHx8CisJCSAgICAoKCpiZXN0KS0+a20uZHlpbmcgPT0geC0+a20uZHlpbmcgJiYKKwkJICAgICAoKmJlc3QpLT5jdXJsZnQuYWRkX3RpbWUgPCB4LT5jdXJsZnQuYWRkX3RpbWUpKQorCQkJKmJlc3QgPSB4OworCX0gZWxzZSBpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpIHsKKwkJKmFjcV9pbl9wcm9ncmVzcyA9IDE7CisJfSBlbHNlIGlmICh4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0VSUk9SIHx8CisJCSAgIHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfRVhQSVJFRCkgeworCQlpZiAoeGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgeC0+c2VsLmZhbWlseSkgJiYKKwkJICAgIHNlY3VyaXR5X3hmcm1fc3RhdGVfcG9sX2Zsb3dfbWF0Y2goeCwgcG9sLCBmbCkpCisJCQkqZXJyb3IgPSAtRVNSQ0g7CisJfQorfQorCiBzdHJ1Y3QgeGZybV9zdGF0ZSAqCiB4ZnJtX3N0YXRlX2ZpbmQoeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCiAJCXN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCB4ZnJtX3RtcGwgKnRtcGwsCiAJCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgKmVyciwKIAkJdW5zaWduZWQgc2hvcnQgZmFtaWx5KQogeworCXN0YXRpYyB4ZnJtX2FkZHJlc3NfdCBzYWRkcl93aWxkY2FyZCA9IHsgfTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB4cF9uZXQocG9sKTsKIAl1bnNpZ25lZCBpbnQgaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnk7CkBAIC03NzMsNDAgKzgxMiwyNyBAQAogCQkgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSAmJgogCQkgICAgdG1wbC0+bW9kZSA9PSB4LT5wcm9wcy5tb2RlICYmCiAJCSAgICB0bXBsLT5pZC5wcm90byA9PSB4LT5pZC5wcm90byAmJgotCQkgICAgKHRtcGwtPmlkLnNwaSA9PSB4LT5pZC5zcGkgfHwgIXRtcGwtPmlkLnNwaSkpIHsKLQkJCS8qIFJlc29sdXRpb24gbG9naWM6Ci0JCQkgICAxLiBUaGVyZSBpcyBhIHZhbGlkIHN0YXRlIHdpdGggbWF0Y2hpbmcgc2VsZWN0b3IuCi0JCQkgICAgICBEb25lLgotCQkJICAgMi4gVmFsaWQgc3RhdGUgd2l0aCBpbmFwcHJvcHJpYXRlIHNlbGVjdG9yLiBTa2lwLgorCQkgICAgKHRtcGwtPmlkLnNwaSA9PSB4LT5pZC5zcGkgfHwgIXRtcGwtPmlkLnNwaSkpCisJCQl4ZnJtX3N0YXRlX2xvb2tfYXQocG9sLCB4LCBmbCwgZmFtaWx5LCBkYWRkciwgc2FkZHIsCisJCQkJCSAgICZiZXN0LCAmYWNxdWlyZV9pbl9wcm9ncmVzcywgJmVycm9yKTsKKwl9CisJaWYgKGJlc3QpCisJCWdvdG8gZm91bmQ7CiAKLQkJCSAgIEVudGVyaW5nIGFyZWEgb2YgInN5c2RlcHMiLgotCi0JCQkgICAzLiBJZiBzdGF0ZSBpcyBub3QgdmFsaWQsIHNlbGVjdG9yIGlzIHRlbXBvcmFyeSwKLQkJCSAgICAgIGl0IHNlbGVjdHMgb25seSBzZXNzaW9uIHdoaWNoIHRyaWdnZXJlZAotCQkJICAgICAgcHJldmlvdXMgcmVzb2x1dGlvbi4gS2V5IG1hbmFnZXIgd2lsbCBkbwotCQkJICAgICAgc29tZXRoaW5nIHRvIGluc3RhbGwgYSBzdGF0ZSB3aXRoIHByb3BlcgotCQkJICAgICAgc2VsZWN0b3IuCi0JCQkgKi8KLQkJCWlmICh4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX1ZBTElEKSB7Ci0JCQkJaWYgKCh4LT5zZWwuZmFtaWx5ICYmICF4ZnJtX3NlbGVjdG9yX21hdGNoKCZ4LT5zZWwsIGZsLCB4LT5zZWwuZmFtaWx5KSkgfHwKLQkJCQkgICAgIXNlY3VyaXR5X3hmcm1fc3RhdGVfcG9sX2Zsb3dfbWF0Y2goeCwgcG9sLCBmbCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICghYmVzdCB8fAotCQkJCSAgICBiZXN0LT5rbS5keWluZyA+IHgtPmttLmR5aW5nIHx8Ci0JCQkJICAgIChiZXN0LT5rbS5keWluZyA9PSB4LT5rbS5keWluZyAmJgotCQkJCSAgICAgYmVzdC0+Y3VybGZ0LmFkZF90aW1lIDwgeC0+Y3VybGZ0LmFkZF90aW1lKSkKLQkJCQkJYmVzdCA9IHg7Ci0JCQl9IGVsc2UgaWYgKHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfQUNRKSB7Ci0JCQkJYWNxdWlyZV9pbl9wcm9ncmVzcyA9IDE7Ci0JCQl9IGVsc2UgaWYgKHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfRVJST1IgfHwKLQkJCQkgICB4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0VYUElSRUQpIHsKLQkJCQlpZiAoeGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgeC0+c2VsLmZhbWlseSkgJiYKLQkJCQkgICAgc2VjdXJpdHlfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCh4LCBwb2wsIGZsKSkKLQkJCQkJZXJyb3IgPSAtRVNSQ0g7Ci0JCQl9Ci0JCX0KKwloID0geGZybV9kc3RfaGFzaChuZXQsIGRhZGRyLCAmc2FkZHJfd2lsZGNhcmQsIHRtcGwtPnJlcWlkLCBmYW1pbHkpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHgsIGVudHJ5LCBuZXQtPnhmcm0uc3RhdGVfYnlkc3QraCwgYnlkc3QpIHsKKwkJaWYgKHgtPnByb3BzLmZhbWlseSA9PSBmYW1pbHkgJiYKKwkJICAgIHgtPnByb3BzLnJlcWlkID09IHRtcGwtPnJlcWlkICYmCisJCSAgICAhKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9XSUxEUkVDVikgJiYKKwkJICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGZhbWlseSkgJiYKKwkJICAgIHRtcGwtPm1vZGUgPT0geC0+cHJvcHMubW9kZSAmJgorCQkgICAgdG1wbC0+aWQucHJvdG8gPT0geC0+aWQucHJvdG8gJiYKKwkJICAgICh0bXBsLT5pZC5zcGkgPT0geC0+aWQuc3BpIHx8ICF0bXBsLT5pZC5zcGkpKQorCQkJeGZybV9zdGF0ZV9sb29rX2F0KHBvbCwgeCwgZmwsIGZhbWlseSwgZGFkZHIsIHNhZGRyLAorCQkJCQkgICAmYmVzdCwgJmFjcXVpcmVfaW5fcHJvZ3Jlc3MsICZlcnJvcik7CiAJfQogCitmb3VuZDoKIAl4ID0gYmVzdDsKIAlpZiAoIXggJiYgIWVycm9yICYmICFhY3F1aXJlX2luX3Byb2dyZXNzKSB7CiAJCWlmICh0bXBsLT5pZC5zcGkgJiYKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggZTA2MzY1NzcuLmMxOGZhMTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgIC1EIktCVUlMRF9NT0ROQU1FPUtCVUlMRF9TVFIoJChjYWxsIG5hbWUtZml4LCQobW9kbmFtZSkpKSIpCiAKICNoYXNoIHZhbHVlcwotaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCitpZmRlZiBDT05GSUdfRFlOQU1JQ19ERUJVRwogZGVidWdfZmxhZ3MgPSAtRCJERUJVR19IQVNIPSQoc2hlbGwgLi9zY3JpcHRzL2Jhc2ljL2hhc2ggZGpiMiAkKEBEKSQobW9kbmFtZSkpIlwKICAgICAgICAgICAgICAgLUQiREVCVUdfSEFTSDI9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCByNSAkKEBEKSQobW9kbmFtZSkpIgogZWxzZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ib290Z3JhcGgucGwgYi9zY3JpcHRzL2Jvb3RncmFwaC5wbAppbmRleCBiMDI0NjMwLi4xMmNhYTgyIDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jvb3RncmFwaC5wbAorKysgYi9zY3JpcHRzL2Jvb3RncmFwaC5wbApAQCAtNTEsNyArNTEsNyBAQAogCiB3aGlsZSAoPD4pIHsKIAlteSAkbGluZSA9ICRfOwotCWlmICgkbGluZSA9fiAvKFswLTlcLl0rKVxdIGNhbGxpbmcgIChbYS16QS1aMC05XF9dKylcKy8pIHsKKwlpZiAoJGxpbmUgPX4gLyhbMC05XC5dKylcXSBjYWxsaW5nICAoW2EtekEtWjAtOVxfXC5dKylcKy8pIHsKIAkJbXkgJGZ1bmMgPSAkMjsKIAkJaWYgKCRkb25lID09IDApIHsKIAkJCSRzdGFydHskZnVuY30gPSAkMTsKQEAgLTg3LDcgKzg3LDcgQEAKIAkJJGNvdW50ID0gJGNvdW50ICsgMTsKIAl9CiAKLQlpZiAoJGxpbmUgPX4gLyhbMC05XC5dKylcXSBpbml0Y2FsbCAoW2EtekEtWjAtOVxfXSspXCsuKnJldHVybmVkLykgeworCWlmICgkbGluZSA9fiAvKFswLTlcLl0rKVxdIGluaXRjYWxsIChbYS16QS1aMC05XF9cLl0rKVwrLipyZXR1cm5lZC8pIHsKIAkJaWYgKCRkb25lID09IDApIHsKIAkJCSRlbmR7JDJ9ID0gJDE7CiAJCQkkbWF4dGltZSA9ICQxOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IDQ1ZWIwYWUuLjJkNWVjZTcgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTEwLDcgKzEwLDcgQEAKIG15ICRQID0gJDA7CiAkUCA9fiBzQC4qL0BAZzsKIAotbXkgJFYgPSAnMC4yNyc7CitteSAkViA9ICcwLjI4JzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMTEwLDcgKzExMCw4IEBACiAJCQlfX2lvbWVtfAogCQkJX19tdXN0X2NoZWNrfAogCQkJX19pbml0X3JlZm9rfAotCQkJX19rcHJvYmVzCisJCQlfX2twcm9iZXN8CisJCQlfX3JlZgogCQl9eDsKIG91ciAkQXR0cmlidXRlCT0gcXJ7CiAJCQljb25zdHwKQEAgLTEyNDAsNyArMTI0MSw4IEBACiAJCQkkcmVhbGZpbGUgPX4gc0BeKFteL10qKS9AQDsKIAogCQkJJHAxX3ByZWZpeCA9ICQxOwotCQkJaWYgKCR0cmVlICYmICRwMV9wcmVmaXggbmUgJycgJiYgLWUgIiRyb290LyRwMV9wcmVmaXgiKSB7CisJCQlpZiAoISRmaWxlICYmICR0cmVlICYmICRwMV9wcmVmaXggbmUgJycgJiYKKwkJCSAgICAtZSAiJHJvb3QvJHAxX3ByZWZpeCIpIHsKIAkJCQlXQVJOKCJwYXRjaCBwcmVmaXggJyRwMV9wcmVmaXgnIGV4aXN0cywgYXBwZWFycyB0byBiZSBhIC1wMCBwYXRjaFxuIik7CiAJCQl9CiAKQEAgLTE1ODMsOSArMTU4NSw5IEBACiAJCX0KICMgVEVTVDogYWxsb3cgZGlyZWN0IHRlc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBtYXRjaGVyLgogCQlpZiAoJGRiZ19hdHRyKSB7Ci0JCQlpZiAoJGxpbmUgPX4gL14uXHMqJEF0dHJpYnV0ZVxzKiQvKSB7CisJCQlpZiAoJGxpbmUgPX4gL14uXHMqJE1vZGlmaWVyXHMqJC8pIHsKIAkJCQlFUlJPUigiVEVTVDogaXMgYXR0clxuIiAuICRoZXJlY3Vycik7Ci0JCQl9IGVsc2lmICgkZGJnX2F0dHIgPiAxICYmICRsaW5lID1+IC9eLisoJEF0dHJpYnV0ZSkvKSB7CisJCQl9IGVsc2lmICgkZGJnX2F0dHIgPiAxICYmICRsaW5lID1+IC9eLisoJE1vZGlmaWVyKS8pIHsKIAkJCQlFUlJPUigiVEVTVDogaXMgbm90IGF0dHIgKCQxIGlzKVxuIi4gJGhlcmVjdXJyKTsKIAkJCX0KIAkJCW5leHQ7CkBAIC0xNjU3LDcgKzE2NTksNyBAQAogCiAjICogZ29lcyBvbiB2YXJpYWJsZSBub3Qgb24gdHlwZQogCQkjIChjaGFyKlsgY29uc3RdKQotCQlpZiAoJGxpbmUgPX4gbXtcKCROb25wdHJUeXBlKFxzKlwqW1xzXCpdKig/OiRNb2RpZmllclxzKikqKVwpfSkgeworCQlpZiAoJGxpbmUgPX4gbXtcKCROb25wdHJUeXBlKFxzKig/OiRNb2RpZmllclxiXHMqfFwqXHMqKSspXCl9KSB7CiAJCQlteSAoJGZyb20sICR0bykgPSAoJDEsICQxKTsKIAogCQkJIyBTaG91bGQgc3RhcnQgd2l0aCBhIHNwYWNlLgpAQCAtMTY3Miw3ICsxNjc0LDcgQEAKIAkJCWlmICgkZnJvbSBuZSAkdG8pIHsKIAkJCQlFUlJPUigiXCIoZm9vJGZyb20pXCIgc2hvdWxkIGJlIFwiKGZvbyR0bylcIlxuIiAuICAkaGVyZWN1cnIpOwogCQkJfQotCQl9IGVsc2lmICgkbGluZSA9fiBte1xiJE5vbnB0clR5cGUoXHMqXCpbXHNcKl0qKD86JE1vZGlmaWVyXHMqKT8pKCRJZGVudCl9KSB7CisJCX0gZWxzaWYgKCRsaW5lID1+IG17XGIkTm9ucHRyVHlwZShccyooPzokTW9kaWZpZXJcYlxzKnxcKlxzKikrKSgkSWRlbnQpfSkgewogCQkJbXkgKCRmcm9tLCAkdG8sICRpZGVudCkgPSAoJDEsICQxLCAkMik7CiAKIAkJCSMgU2hvdWxkIHN0YXJ0IHdpdGggYSBzcGFjZS4KQEAgLTE2ODUsOCArMTY4Nyw4IEBACiAJCQkjIE1vZGlmaWVycyBzaG91bGQgaGF2ZSBzcGFjZXMuCiAJCQkkdG8gPX4gcy8oXGIkTW9kaWZpZXIkKS8kMSAvOwogCi0JCQkjcHJpbnQgImZyb208JGZyb20+IHRvPCR0bz5cbiI7Ci0JCQlpZiAoJGZyb20gbmUgJHRvKSB7CisJCQkjcHJpbnQgImZyb208JGZyb20+IHRvPCR0bz4gaWRlbnQ8JGlkZW50PlxuIjsKKwkJCWlmICgkZnJvbSBuZSAkdG8gJiYgJGlkZW50ICF+IC9eJE1vZGlmaWVyJC8pIHsKIAkJCQlFUlJPUigiXCJmb28ke2Zyb219YmFyXCIgc2hvdWxkIGJlIFwiZm9vJHt0b31iYXJcIlxuIiAuICAkaGVyZWN1cnIpOwogCQkJfQogCQl9CkBAIC0xODg1LDExICsxODg3LDExIEBACiAJCQkJCWlmICgkY3R4ICF+IC9bV0VCQ114Li8gJiYgJGNhICF+IC8oPzpcKXwhfH58XCp8LXxcJnxcfHxcK1wrfFwtXC18XHspJC8pIHsKIAkJCQkJCUVSUk9SKCJzcGFjZSByZXF1aXJlZCBiZWZvcmUgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CiAJCQkJCX0KLQkJCQkJaWYgKCRvcCBlcSAnKicgJiYgJGNjID1+L1xzKmNvbnN0XGIvKSB7CisJCQkJCWlmICgkb3AgZXEgJyonICYmICRjYyA9fi9ccyokTW9kaWZpZXJcYi8pIHsKIAkJCQkJCSMgQSB1bmFyeSAnKicgbWF5IGJlIGNvbnN0CiAKIAkJCQkJfSBlbHNpZiAoJGN0eCA9fiAvLnhXLykgewotCQkJCQkJRVJST1IoInNwYWNlIHByb2hpYml0ZWQgYWZ0ZXIgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCQlFUlJPUigiQXNwYWNlIHByb2hpYml0ZWQgYWZ0ZXIgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CiAJCQkJCX0KIAogCQkJCSMgdW5hcnkgKysgYW5kIHVuYXJ5IC0tIGFyZSBhbGxvd2VkIG5vIHNwYWNlIG9uIG9uZSBzaWRlLgpAQCAtMjU2MCw3ICsyNTYyLDcgQEAKIAkJaWYgKCRsaW5lID1+IC9cYmluX2F0b21pY1xzKlwoLykgewogCQkJaWYgKCRyZWFsZmlsZSA9fiBtQF5kcml2ZXJzL0ApIHsKIAkJCQlFUlJPUigiZG8gbm90IHVzZSBpbl9hdG9taWMgaW4gZHJpdmVyc1xuIiAuICRoZXJlY3Vycik7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNpZiAoJHJlYWxmaWxlICF+IG1AXmtlcm5lbC9AKSB7CiAJCQkJV0FSTigidXNlIG9mIGluX2F0b21pYygpIGlzIGluY29ycmVjdCBvdXRzaWRlIGNvcmUga2VybmVsIGNvZGVcbiIgLiAkaGVyZWN1cnIpOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwgYi9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwKaW5kZXggZGIzMGZhYy4uNTZmOTBhNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCisrKyBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbApAQCAtMzgsNyArMzgsNyBAQAogCQkmY2hlY2tfYXNtX3R5cGVzKCk7CiAJCSZjaGVja19zaXpldHlwZXMoKTsKIAkJJmNoZWNrX3Byb3RvdHlwZXMoKTsKLQkJJmNoZWNrX2NvbmZpZygpOworCQkjIERyb3BwZWQgZm9yIG5vdy4gVG9vIG11Y2ggbm9pc2UgJmNoZWNrX2NvbmZpZygpOwogCX0KIAljbG9zZSBGSDsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDNlMTA1N2YuLmQxOTAwOTIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKICNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCiAjaW5jbHVkZSAibGtjLmgiCkBAIC00NjQsOSArNDY1LDIyIEBACiAJCQlpbnB1dF9tb2RlID0gc2V0X3llczsKIAkJCWJyZWFrOwogCQljYXNlICdyJzoKKwkJeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCQkJdW5zaWduZWQgaW50IHNlZWQ7CisKKwkJCS8qCisJCQkgKiBVc2UgbWljcm9zZWNvbmRzIGRlcml2ZWQgc2VlZCwKKwkJCSAqIGNvbXBlbnNhdGUgZm9yIHN5c3RlbXMgd2hlcmUgaXQgbWF5IGJlIHplcm8KKwkJCSAqLworCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJCQlzZWVkID0gKHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChub3cudHZfdXNlYyArIDEpKTsKKwkJCXNyYW5kKHNlZWQpOworCiAJCQlpbnB1dF9tb2RlID0gc2V0X3JhbmRvbTsKLQkJCXNyYW5kKHRpbWUoTlVMTCkpOwogCQkJYnJlYWs7CisJCX0KIAkJY2FzZSAnaCc6CiAJCQlwcmludGYoXygiU2VlIFJFQURNRSBmb3IgdXNhZ2UgaW5mb1xuIikpOwogCQkJZXhpdCgwKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggODMwZDllYS4uMjczZDczOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTg0Myw3ICs4NDMsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pIHx8IG1vZGUgIT0gZGVmX3JhbmRvbSkKKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9yYW5kb20pKQogCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC04NTYsMjggKzg1Niw0OSBAQAogCiAJaWYgKG1vZGUgIT0gZGVmX3JhbmRvbSkKIAkJcmV0dXJuOwotCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJICogSWYgY3Vyci50cmkgZXF1YWwgdG8gbW9kIHRoZW4gd2UgY2FuIHNlbGVjdCBzZXZlcmFsCisJICogY2hvaWNlIHN5bWJvbHMgaW4gb25lIGJsb2NrLgorCSAqIEluIHRoaXMgY2FzZSB3ZSBkbyBub3RoaW5nLgorCSAqIElmIGN1cnIudHJpIGVxdWFsIHllcyB0aGVuIG9ubHkgb25lIHN5bWJvbCBjYW4gYmUKKwkgKiBzZWxlY3RlZCBpbiBhIGNob2ljZSBibG9jayBhbmQgd2Ugc2V0IGl0IHRvIHllcywKKwkgKiBhbmQgdGhlIHJlc3QgdG8gbm8uCisJICovCiAJZm9yX2FsbF9zeW1ib2xzKGksIGNzeW0pIHsKIAkJaWYgKHN5bV9oYXNfdmFsdWUoY3N5bSkgfHwgIXN5bV9pc19jaG9pY2UoY3N5bSkpCiAJCQljb250aW51ZTsKIAogCQlzeW1fY2FsY192YWx1ZShjc3ltKTsKKworCQlpZiAoY3N5bS0+Y3Vyci50cmkgIT0geWVzKQorCQkJY29udGludWU7CisKIAkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3N5bSk7Ci0JCWRlZiA9IC0xOwotCQl3aGlsZSAoMSkgewotCQkJY250ID0gMDsKLQkJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7Ci0JCQkJaWYgKHN5bS0+dmlzaWJsZSA9PSBubykKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKGRlZiA9PSBjbnQrKykgewotCQkJCQljc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gc3ltOwotCQkJCQlicmVhazsKLQkJCQl9CisKKwkJLyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8KKwkJY250ID0gMDsKKwkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCQljbnQrKzsKKworCQkvKgorCQkgKiBmaW5kIGEgcmFuZG9tIHZhbHVlIGFuZCBzZXQgaXQgdG8geWVzLAorCQkgKiBzZXQgdGhlIHJlc3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9uZSBzZXQKKwkJICovCisJCWRlZiA9IChyYW5kKCkgJSBjbnQpOworCisJCWNudCA9IDA7CisJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCQlpZiAoZGVmID09IGNudCsrKSB7CisJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCWNzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CiAJCQl9Ci0JCQlpZiAoZGVmID49IDAgfHwgY250IDwgMikKLQkJCQlicmVhazsKLQkJCWRlZiA9IChyYW5kKCkgJSBjbnQpICsgMTsKKwkJCWVsc2UgeworCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOworCQkJfQogCQl9CiAJCWNzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwkJY3N5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFya3VwX29vcHMucGwgYi9zY3JpcHRzL21hcmt1cF9vb3BzLnBsCmluZGV4IGQ0MDQ0OWMuLjUyODQ5MmIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFya3VwX29vcHMucGwKKysrIGIvc2NyaXB0cy9tYXJrdXBfb29wcy5wbApAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcGVybCAtdworIyEvdXNyL2Jpbi9wZXJsCiAKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIApAQCAtMjksMjcgKzI5LDE1MSBAQAogbXkgJHRhcmdldCA9ICIwIjsKIG15ICRmdW5jdGlvbjsKIG15ICRtb2R1bGUgPSAiIjsKLW15ICRmdW5jX29mZnNldDsKK215ICRmdW5jX29mZnNldCA9IDA7CiBteSAkdm1hb2Zmc2V0ID0gMDsKIAorbXkgJXJlZ3M7CisKKworc3ViIHBhcnNlX3g4Nl9yZWdzCit7CisJbXkgKCRsaW5lKSA9IEBfOworCWlmICgkbGluZSA9fiAvRUFYOiAoWzAtOWEtZl0rKSBFQlg6IChbMC05YS1mXSspIEVDWDogKFswLTlhLWZdKykgRURYOiAoWzAtOWEtZl0rKS8pIHsKKwkJJHJlZ3N7IiVlYXgifSA9ICQxOworCQkkcmVnc3siJWVieCJ9ID0gJDI7CisJCSRyZWdzeyIlZWN4In0gPSAkMzsKKwkJJHJlZ3N7IiVlZHgifSA9ICQ0OworCX0KKwlpZiAoJGxpbmUgPX4gL0VTSTogKFswLTlhLWZdKykgRURJOiAoWzAtOWEtZl0rKSBFQlA6IChbMC05YS1mXSspIEVTUDogKFswLTlhLWZdKykvKSB7CisJCSRyZWdzeyIlZXNpIn0gPSAkMTsKKwkJJHJlZ3N7IiVlZGkifSA9ICQyOworCQkkcmVnc3siJWVzcCJ9ID0gJDQ7CisJfQorCWlmICgkbGluZSA9fiAvUkFYOiAoWzAtOWEtZl0rKSBSQlg6IChbMC05YS1mXSspIFJDWDogKFswLTlhLWZdKykvKSB7CisJCSRyZWdzeyIlZWF4In0gPSAkMTsKKwkJJHJlZ3N7IiVlYngifSA9ICQyOworCQkkcmVnc3siJWVjeCJ9ID0gJDM7CisJfQorCWlmICgkbGluZSA9fiAvUkRYOiAoWzAtOWEtZl0rKSBSU0k6IChbMC05YS1mXSspIFJESTogKFswLTlhLWZdKykvKSB7CisJCSRyZWdzeyIlZWR4In0gPSAkMTsKKwkJJHJlZ3N7IiVlc2kifSA9ICQyOworCQkkcmVnc3siJWVkaSJ9ID0gJDM7CisJfQorCWlmICgkbGluZSA9fiAvUkJQOiAoWzAtOWEtZl0rKSBSMDg6IChbMC05YS1mXSspIFIwOTogKFswLTlhLWZdKykvKSB7CisJCSRyZWdzeyIlcjA4In0gPSAkMjsKKwkJJHJlZ3N7IiVyMDkifSA9ICQzOworCX0KKwlpZiAoJGxpbmUgPX4gL1IxMDogKFswLTlhLWZdKykgUjExOiAoWzAtOWEtZl0rKSBSMTI6IChbMC05YS1mXSspLykgeworCQkkcmVnc3siJXIxMCJ9ID0gJDE7CisJCSRyZWdzeyIlcjExIn0gPSAkMjsKKwkJJHJlZ3N7IiVyMTIifSA9ICQzOworCX0KKwlpZiAoJGxpbmUgPX4gL1IxMzogKFswLTlhLWZdKykgUjE0OiAoWzAtOWEtZl0rKSBSMTU6IChbMC05YS1mXSspLykgeworCQkkcmVnc3siJXIxMyJ9ID0gJDE7CisJCSRyZWdzeyIlcjE0In0gPSAkMjsKKwkJJHJlZ3N7IiVyMTUifSA9ICQzOworCX0KK30KKworc3ViIHJlZ19uYW1lCit7CisJbXkgKCRyZWcpID0gQF87CisJJHJlZyA9fiBzL3IoLil4L2VcMXgvOworCSRyZWcgPX4gcy9yKC4paS9lXDFpLzsKKwkkcmVnID1+IHMvciguKXAvZVwxcC87CisJcmV0dXJuICRyZWc7Cit9CisKK3N1YiBwcm9jZXNzX3g4Nl9yZWdzCit7CisJbXkgKCRsaW5lLCAkY250cikgPSBAXzsKKwlteSAkc3RyID0gIiI7CisJaWYgKGxlbmd0aCgkbGluZSkgPCA0MCkgeworCQlyZXR1cm4gIiI7ICMgbm90IGFuIGFzbSBpc3RydWN0aW9uCisJfQorCisJIyBmaW5kIHRoZSBhcmd1bWVudHMgdG8gdGhlIGluc3RydWN0aW9uCisJaWYgKCRsaW5lID1+IC8oWzAtOWEtekEtWlwsXCVcKFwpXC1cK10rKSQvKSB7CisJCSRsYXN0d29yZCA9ICQxOworCX0gZWxzZSB7CisJCXJldHVybiAiIjsKKwl9CisKKwkjIHdlIG5lZWQgdG8gZmluZCB0aGUgcmVnaXN0ZXJzIHRoYXQgZ2V0IGNsb2JiZXJlZCwKKwkjIHNpbmNlIHRoZWlyIHZhbHVlIGlzIG5vIGxvbmdlciByZWxldmFudCBmb3IgcHJldmlvdXMKKwkjIGluc3RydWN0aW9ucyBpbiB0aGUgc3RyZWFtLgorCisJJGNsb2JiZXIgPSAkbGFzdHdvcmQ7CisJIyBmaXJzdCwgcmVtb3ZlIGFsbCBtZW1vcnkgb3BlcmFuZHMsIHRoZXkncmUgcmVhZCBvbmx5CisJJGNsb2JiZXIgPX4gcy9cKFthLXowLTlcJVwsXStcKS8vZzsKKwkjIHRoZW4sIHJlbW92ZSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgY29tbWEsIHRoYXRzIHRoZSByZWFkIHBhcnQKKwkkY2xvYmJlciA9fiBzLy4qXCwvL2c7CisKKwkjIGlmIHRoaXMgaXMgdGhlIGluc3RydWN0aW9uIHRoYXQgZmF1bHRlZCwgd2UgaGF2ZW4ndCBhY3R1YWxseSBkb25lCisJIyB0aGUgd3JpdGUgeWV0Li4uIG5vdGhpbmcgaXMgY2xvYmJlcmVkLgorCWlmICgkY250ciA9PSAwKSB7CisJCSRjbG9iYmVyID0gIiI7CisJfQorCisJZm9yZWFjaCAkcmVnIChrZXlzKCVyZWdzKSkgeworCQlteSAkY2xvYmJlcnByaW1lID0gcmVnX25hbWUoJGNsb2JiZXIpOworCQlteSAkbGFzdHdvcmRwcmltZSA9IHJlZ19uYW1lKCRsYXN0d29yZCk7CisJCW15ICR2YWwgPSAkcmVnc3skcmVnfTsKKwkJaWYgKCR2YWwgPX4gL15bMF0rJC8pIHsKKwkJCSR2YWwgPSAiMCI7CisJCX0gZWxzZSB7CisJCQkkdmFsID1+IHMvXjAqLy87CisJCX0KKworCQkjIGZpcnN0IGNoZWNrIGlmIHdlJ3JlIGNsb2JiZXJpbmcgdGhpcyByZWdpc3RlcjsgaWYgd2UgZG8KKwkJIyB3ZSBwcmludCBpdCB3aXRoIGEgPT4sIGFuZCB0aGVuIGRlbGV0ZSBpdHMgdmFsdWUKKwkJaWYgKCRjbG9iYmVyID1+IC8kcmVnLyB8fCAkY2xvYmJlcnByaW1lID1+IC8kcmVnLykgeworCQkJaWYgKGxlbmd0aCgkdmFsKSA+IDApIHsKKwkJCQkkc3RyID0gJHN0ciAuICIgJHJlZyA9PiAkdmFsICI7CisJCQl9CisJCQkkcmVnc3skcmVnfSA9ICIiOworCQkJJHZhbCA9ICIiOworCQl9CisJCSMgbm93IGNoZWNrIGlmIHdlJ3JlIHJlYWRpbmcgdGhpcyByZWdpc3RlcgorCQlpZiAoJGxhc3R3b3JkID1+IC8kcmVnLyB8fCAkbGFzdHdvcmRwcmltZSA9fiAvJHJlZy8pIHsKKwkJCWlmIChsZW5ndGgoJHZhbCkgPiAwKSB7CisJCQkJJHN0ciA9ICRzdHIgLiAiICRyZWcgPSAkdmFsICI7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICRzdHI7Cit9CisKKyMgcGFyc2UgdGhlIG9vcHMKIHdoaWxlICg8U1RESU4+KSB7CiAJbXkgJGxpbmUgPSAkXzsKIAlpZiAoJGxpbmUgPX4gL0VJUDogMDA2MDpcW1w8KFthLXowLTldKylcPlxdLykgewogCQkkdGFyZ2V0ID0gJDE7CiAJfQorCWlmICgkbGluZSA9fiAvUklQOiAwMDEwOlxbXDwoW2EtejAtOV0rKVw+XF0vKSB7CisJCSR0YXJnZXQgPSAkMTsKKwl9CiAJaWYgKCRsaW5lID1+IC9FSVAgaXMgYXQgKFthLXpBLVowLTlcX10rKVwrKDB4WzAtOWEtZl0rKVwvMHhbYS1mMC05XS8pIHsKIAkJJGZ1bmN0aW9uID0gJDE7CiAJCSRmdW5jX29mZnNldCA9ICQyOwogCX0KKwlpZiAoJGxpbmUgPX4gL1JJUDogMDAxMDpcW1w8WzAtOWEtZl0rXD5cXSAgXFtcPFswLTlhLWZdK1w+XF0gKFthLXpBLVowLTlcX10rKVwrKDB4WzAtOWEtZl0rKVwvMHhbYS1mMC05XS8pIHsKKwkJJGZ1bmN0aW9uID0gJDE7CisJCSRmdW5jX29mZnNldCA9ICQyOworCX0KIAogCSMgY2hlY2sgaWYgaXQncyBhIG1vZHVsZQogCWlmICgkbGluZSA9fiAvRUlQIGlzIGF0IChbYS16QS1aMC05XF9dKylcKygweFswLTlhLWZdKylcLzB4W2EtZjAtOV0rXFdcWyhbYS16QS1aMC05XF9cLV0rKVxdLykgewogCQkkbW9kdWxlID0gJDM7CiAJfQorCWlmICgkbGluZSA9fiAvUklQOiAwMDEwOlxbXDxbMC05YS1mXStcPlxdICBcW1w8WzAtOWEtZl0rXD5cXSAoW2EtekEtWjAtOVxfXSspXCsoMHhbMC05YS1mXSspXC8weFthLWYwLTldK1xXXFsoW2EtekEtWjAtOVxfXC1dKylcXS8pIHsKKwkJJG1vZHVsZSA9ICQzOworCX0KKwlwYXJzZV94ODZfcmVncygkbGluZSk7CiB9CiAKIG15ICRkZWNvZGVzdGFydCA9IGhleCgkdGFyZ2V0KSAtIGhleCgkZnVuY19vZmZzZXQpOwotbXkgJGRlY29kZXN0b3AgPSAkZGVjb2Rlc3RhcnQgKyA4MTkyOworbXkgJGRlY29kZXN0b3AgPSBoZXgoJHRhcmdldCkgKyA4MTkyOwogaWYgKCR0YXJnZXQgZXEgIjAiKSB7CiAJcHJpbnQgIk5vIG9vcHMgZm91bmQhXG4iOwogCXByaW50ICJVc2FnZTogXG4iOwpAQCAtODQsNiArMjA4LDcgQEAKIG15ICRzdGF0ZSAgID0gMDsKIG15ICRjZW50ZXIgID0gMDsKIG15IEBsaW5lczsKK215IEByZWdsaW5lczsKIAogc3ViIEluUmFuZ2UgewogCW15ICgkYWRkcmVzcywgJHRhcmdldCkgPSBAXzsKQEAgLTE4OCwxNiArMzEzLDM2IEBACiAKIG15ICRpOwogCi1teSAkZnVsbHRleHQgPSAiIjsKLSRpID0gJHN0YXJ0Owotd2hpbGUgKCRpIDwgJGZpbmlzaCkgewotCWlmICgkaSA9PSAkY2VudGVyKSB7Ci0JCSRmdWxsdGV4dCA9ICRmdWxsdGV4dCAuICIqJGxpbmVzWyRpXSAgICAgPC0tLS0tIGZhdWx0aW5nIGluc3RydWN0aW9uXG4iOwotCX0gZWxzZSB7Ci0JCSRmdWxsdGV4dCA9ICRmdWxsdGV4dCAuICAiICRsaW5lc1skaV1cbiI7Ci0JfQotCSRpID0gJGkgKzE7CisKKyMgc3RhcnQgYW5ub3RhdGluZyB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhc20uCisjIHRoaXMgZ29lcyBmcm9tIHRoZSBvb3BzaW5nIHBvaW50IGJhY2ssIHNvIHRoYXQgdGhlIGFubm90YXRvcgorIyBjYW4gdHJhY2sgKG9wcG9ydHVuaXN0aWNhbGx5KSB3aGljaCByZWdpc3RlcnMgZ290IHdyaXR0ZW4gYW5kCisjIHdob3MgdmFsdWUgbm8gbG9uZ2VyIGlzIHJlbGV2YW50LgorCiskaSA9ICRjZW50ZXI7Cit3aGlsZSAoJGkgPj0gJHN0YXJ0KSB7CisJJHJlZ2xpbmVzWyRpXSA9IHByb2Nlc3NfeDg2X3JlZ3MoJGxpbmVzWyRpXSwgJGNlbnRlciAtICRpKTsKKwkkaSA9ICRpIC0gMTsKIH0KIAotcHJpbnQgJGZ1bGx0ZXh0OworJGkgPSAkc3RhcnQ7Cit3aGlsZSAoJGkgPCAkZmluaXNoKSB7CisJbXkgJGxpbmU7CisJaWYgKCRpID09ICRjZW50ZXIpIHsKKwkJJGxpbmUgPSAgIiokbGluZXNbJGldICI7CisJfSBlbHNlIHsKKwkJJGxpbmUgPSAgIiAkbGluZXNbJGldICI7CisJfQorCXByaW50ICRsaW5lOworCWlmIChkZWZpbmVkKCRyZWdsaW5lc1skaV0pICYmIGxlbmd0aCgkcmVnbGluZXNbJGldKSA+IDApIHsKKwkJbXkgJGMgPSA2MCAtIGxlbmd0aCgkbGluZSk7CisJCXdoaWxlICgkYyA+IDApIHsgcHJpbnQgIiAiOyAkYyA9ICRjIC0gMTsgfTsKKwkJcHJpbnQgInwgJHJlZ2xpbmVzWyRpXSI7CisJfQorCWlmICgkaSA9PSAkY2VudGVyKSB7CisJCXByaW50ICI8LS0tIGZhdWx0aW5nIGluc3RydWN0aW9uIjsKKwl9CisJcHJpbnQgIlxuIjsKKwkkaSA9ICRpICsxOworfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggNDkxYjhiMS4uYTMzNDQyOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCisrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwpAQCAtMjEwLDYgKzIxMCw3IEBACiBzdGF0aWMgaW50IGRvX2hpZF9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCSAgICAgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkLCBjaGFyICphbGlhcykKIHsKKwlpZC0+YnVzID0gVE9fTkFUSVZFKGlkLT5idXMpOwogCWlkLT52ZW5kb3IgPSBUT19OQVRJVkUoaWQtPnZlbmRvcik7CiAJaWQtPnByb2R1Y3QgPSBUT19OQVRJVkUoaWQtPnByb2R1Y3QpOwogCkBAIC03MDksNiArNzEwLDE0IEBACiAJc3RyY2F0KGFsaWFzLCAiOiIpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IGRvX3BsYXRmb3JtX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCit7CisJc3ByaW50ZihhbGlhcywgUExBVEZPUk1fTU9EVUxFX1BSRUZJWCAiJXMiLCBpZC0+bmFtZSk7CisJcmV0dXJuIDE7Cit9CisKIC8qIElnbm9yZSBhbnkgcHJlZml4LCBlZy4gc29tZSBhcmNoaXRlY3R1cmVzIHByZXBlbmQgXyAqLwogc3RhdGljIGlubGluZSBpbnQgc3ltX2lzKGNvbnN0IGNoYXIgKnN5bWJvbCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTg0OCw2ICs4NTcsMTAgQEAKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBkbWlfc3lzdGVtX2lkKSwgImRtaSIsCiAJCQkgZG9fZG1pX2VudHJ5LCBtb2QpOworCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcGxhdGZvcm1fZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkKSwgInBsYXRmb3JtIiwKKwkJCSBkb19wbGF0Zm9ybV9lbnRyeSwgbW9kKTsKIAlmcmVlKHplcm9zKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCmluZGV4IDhjNmI3YjAuLmZhNGEwYTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQorKysgYi9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKQEAgLTM1LDkgKzM1LDEwIEBACiBycG0tcGtnIHJwbTogJChvYmp0cmVlKS9rZXJuZWwuc3BlYyBGT1JDRQogCSQoTUFLRSkgY2xlYW4KIAkkKFBSRVYpIGxuIC1zZiAkKHNyY3RyZWUpICQoS0VSTkVMUEFUSCkKKwkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL3NldGxvY2FsdmVyc2lvbiA+ICQob2JqdHJlZSkvLnNjbXZlcnNpb24KIAkkKFBSRVYpIHRhciAtY3ogJChSQ1NfVEFSX0lHTk9SRSkgLWYgJChLRVJORUxQQVRIKS50YXIuZ3ogJChLRVJORUxQQVRIKS8uCiAJJChQUkVWKSBybSAkKEtFUk5FTFBBVEgpCi0KKwlybSAtZiAkKG9ianRyZWUpLy5zY212ZXJzaW9uCiAJc2V0IC1lOyBcCiAJJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9ta3ZlcnNpb24gPiAkKG9ianRyZWUpLy50bXBfdmVyc2lvbgogCXNldCAtZTsgXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYyBiL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKaW5kZXggMjUwMDg4Ni4uM2Q5M2Y4YyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYworKysgYi9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCkBAIC04Niw5ICs4NiwxNyBAQAogZWNobyAnY3AgU3lzdGVtLm1hcCAkUlBNX0JVSUxEX1JPT1QnIi9ib290L1N5c3RlbS5tYXAtJEtFUk5FTFJFTEVBU0UiCiAKIGVjaG8gJ2NwIC5jb25maWcgJFJQTV9CVUlMRF9ST09UJyIvYm9vdC9jb25maWctJEtFUk5FTFJFTEVBU0UiCisKK2VjaG8gIiVpZm5hcmNoIHBwYzY0IgorZWNobyAnY3Agdm1saW51eCB2bWxpbnV4Lm9yaWcnCitlY2hvICdiemlwMiAtOSB2bWxpbnV4JworZWNobyAnbXYgdm1saW51eC5iejIgJFJQTV9CVUlMRF9ST09UJyIvYm9vdC92bWxpbnV4LSRLRVJORUxSRUxFQVNFLmJ6MiIKK2VjaG8gJ212IHZtbGludXgub3JpZyB2bWxpbnV4JworZWNobyAiJWVuZGlmIgorCiBlY2hvICIiCiBlY2hvICIlY2xlYW4iCi1lY2hvICcjZWNobyAtcmYgJFJQTV9CVUlMRF9ST09UJworZWNobyAncm0gLXJmICRSUE1fQlVJTERfUk9PVCcKIGVjaG8gIiIKIGVjaG8gIiVmaWxlcyIKIGVjaG8gJyVkZWZhdHRyICgtLCByb290LCByb290KScKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uIGIvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24KaW5kZXggZjY5NDZjZi4uZjFjNGIzNSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24KKysrIGIvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24KQEAgLTU4LDE0ICs1OCw3IEBACiAjIENoZWNrIGZvciBzdm4gYW5kIGEgc3ZuIHJlcG8uCiBpZiByZXY9YHN2biBpbmZvIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxhc3QgQ2hhbmdlZCBSZXYnYDsgdGhlbgogCXJldj1gZWNobyAkcmV2IHwgYXdrICd7cHJpbnQgJE5GfSdgCi0JY2hhbmdlcz1gc3ZuIHN0YXR1cyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15bQU1EXScgfCB3YyAtbGAKLQotCSMgQXJlIHRoZXJlIHVuY29tbWl0dGVkIGNoYW5nZXM/Ci0JaWYgWyAkY2hhbmdlcyAhPSAwIF07IHRoZW4KLQkJcHJpbnRmIC0tICctc3ZuJXMlcycgIiRyZXYiIC1kaXJ0eQotCWVsc2UKLQkJcHJpbnRmIC0tICctc3ZuJXMnICIkcmV2IgotCWZpCisJcHJpbnRmIC0tICctc3ZuJXMnICIkcmV2IgogCiAJIyBBbGwgZG9uZSB3aXRoIHN2bgogCWV4aXQKZGlmZiAtLWdpdCBhL3NjcmlwdHMvdGFncy5zaCBiL3NjcmlwdHMvdGFncy5zaAppbmRleCBmZGJlNzhiLi41YmQ4YjEwIDEwMDc1NQotLS0gYS9zY3JpcHRzL3RhZ3Muc2gKKysrIGIvc2NyaXB0cy90YWdzLnNoCkBAIC03Niw3ICs3NiwxMCBAQAogCiBhbGxfa2NvbmZpZ3MoKQogewotCWZpbmRfc291cmNlcyAkQUxMU09VUkNFX0FSQ0hTICdLY29uZmlnKicKKwlmb3IgYXJjaCBpbiAkQUxMU09VUkNFX0FSQ0hTOyBkbworCQlmaW5kX3NvdXJjZXMgJGFyY2ggJ0tjb25maWcqJworCWRvbmUKKwlmaW5kX290aGVyX3NvdXJjZXMgJ0tjb25maWcqJwogfQogCiBhbGxfZGVmY29uZmlncygpCkBAIC05OSw3ICsxMDIsOCBAQAogCS1JIF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXAgICAgICAgICAgICAgICAgXAogCS1JIEVYUE9SVF9TWU1CT0wsRVhQT1JUX1NZTUJPTF9HUEwgICAgICAgICAgICAgICAgICAgICAgXAogCS0tZXh0cmE9K2YgLS1jLWtpbmRzPStweCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCS0tcmVnZXgtYXNtPScvXkVOVFJZXCgoW14pXSopXCkuKi9cMS8nCisJLS1yZWdleC1hc209Jy9eRU5UUllcKChbXildKilcKS4qL1wxLycgICAgICAgICAgICAgICAgICBcCisJLS1yZWdleC1jPScvXlNZU0NBTExfREVGSU5FW1s6ZGlnaXQ6XV0/XCgoW14sKV0qKS4qL3N5c19cMS8nCiAKIAlhbGxfa2NvbmZpZ3MgfCB4YXJncyAkMSAtYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAktLWxhbmdkZWY9a2NvbmZpZyAtLWxhbmd1YWdlLWZvcmNlPWtjb25maWcgICAgICAgICAgICAgIFwKQEAgLTExNyw3ICsxMjEsOSBAQAogCiBlbWFjcygpCiB7Ci0JYWxsX3NvdXJjZXMgfCB4YXJncyAkMSAtYQorCWFsbF9zb3VyY2VzIHwgeGFyZ3MgJDEgLWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS0tcmVnZXg9Jy9eRU5UUlkoXChbXildKlwpKS4qL1wxLycgICAgICAgICAgICAgICAgICAgICAgXAorCS0tcmVnZXg9Jy9eU1lTQ0FMTF9ERUZJTkVbMC05XT8oXChbXiwpXSpcKS4qL3N5c19cMS8nCiAKIAlhbGxfa2NvbmZpZ3MgfCB4YXJncyAkMSAtYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAktLXJlZ2V4PScvXlsgXHRdKlwoXChtZW51XCkqY29uZmlnXClbIFx0XStcKFthLXpBLVowLTlfXStcKS9cMy8nCmRpZmYgLS1naXQgYS9zY3JpcHRzL3VuaWZkZWYuYyBiL3NjcmlwdHMvdW5pZmRlZi5jCmluZGV4IDU1MjAyNWUuLjA1YTMxYTYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvdW5pZmRlZi5jCisrKyBiL3NjcmlwdHMvdW5pZmRlZi5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIHN0YXRpYyB2b2lkICAgICAgICAgICAgIGVycm9yKGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgaW50ICAgICAgICAgICAgICBmaW5kc3ltKGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICBmbHVzaGxpbmUoYm9vbCk7Ci1zdGF0aWMgTGluZXR5cGUgICAgICAgICBnZXRsaW5lKHZvaWQpOworc3RhdGljIExpbmV0eXBlICAgICAgICAgZ2V0X2xpbmUodm9pZCk7CiBzdGF0aWMgTGluZXR5cGUgICAgICAgICBpZmV2YWwoY29uc3QgY2hhciAqKik7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICBpZ25vcmVvZmYodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICBpZ25vcmVvbih2b2lkKTsKQEAgLTUxMiw3ICs1MTIsNyBAQAogCiAJZm9yICg7OykgewogCQlsaW5lbnVtKys7Ci0JCWxpbmV2YWwgPSBnZXRsaW5lKCk7CisJCWxpbmV2YWwgPSBnZXRfbGluZSgpOwogCQl0cmFuc190YWJsZVtpZnN0YXRlW2RlcHRoXV1bbGluZXZhbF0oKTsKIAkJZGVidWcoInByb2Nlc3MgJXMgLT4gJXMgZGVwdGggJWQiLAogCQkgICAgbGluZXR5cGVfbmFtZVtsaW5ldmFsXSwKQEAgLTUyNiw3ICs1MjYsNyBAQAogICogaGVscCBmcm9tIHNraXBjb21tZW50KCkuCiAgKi8KIHN0YXRpYyBMaW5ldHlwZQotZ2V0bGluZSh2b2lkKQorZ2V0X2xpbmUodm9pZCkKIHsKIAljb25zdCBjaGFyICpjcDsKIAlpbnQgY3Vyc3ltOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvS2NvbmZpZyBiL3NlY3VyaXR5L0tjb25maWcKaW5kZXggOTQzODUzNS4uYmIyNDQ3NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvS2NvbmZpZworKysgYi9zZWN1cml0eS9LY29uZmlnCkBAIC01NSw3ICs1NSw4IEBACiAJYm9vbCAiRW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0iCiAJaGVscAogCSAgVGhpcyB3aWxsIGJ1aWxkIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0uICBJdCBpcyBjdXJyZW50bHkgdXNlZCBieQotCSAgdGhlIFRQTSBiaW9zIGNoYXJhY3RlciBkcml2ZXIuICBJdCBpcyBub3QgdXNlZCBieSBTRUxpbnV4IG9yIFNNQUNLLgorCSAgdGhlIFRQTSBiaW9zIGNoYXJhY3RlciBkcml2ZXIgYW5kIElNQSwgYW4gaW50ZWdyaXR5IHByb3ZpZGVyLiAgSXQgaXMKKwkgIG5vdCB1c2VkIGJ5IFNFTGludXggb3IgU01BQ0suCiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKQEAgLTEzNCw2ICsxMzUsOSBAQAogCiBzb3VyY2Ugc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCiBzb3VyY2Ugc2VjdXJpdHkvc21hY2svS2NvbmZpZworc291cmNlIHNlY3VyaXR5L3RvbW95by9LY29uZmlnCisKK3NvdXJjZSBzZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKIAogZW5kbWVudQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9NYWtlZmlsZSBiL3NlY3VyaXR5L01ha2VmaWxlCmluZGV4IGMwNWMxMjcuLmZhNzcwMjEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLSQoQ09ORklHX0tFWVMpCQkJKz0ga2V5cy8KIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9TRUxJTlVYKQkrPSBzZWxpbnV4CiBzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBzbWFjaworc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTykgICAgICAgICs9IHRvbW95bwogCiAjIGFsd2F5cyBlbmFibGUgZGVmYXVsdCBjYXBhYmlsaXRpZXMKIG9iai15CQkrPSBjb21tb25jYXAubwpAQCAtMTUsNSArMTYsMTAgQEAKICMgTXVzdCBwcmVjZWRlIGNhcGFiaWxpdHkubyBpbiBvcmRlciB0byBzdGFjayBwcm9wZXJseS4KIG9iai0kKENPTkZJR19TRUNVUklUWV9TRUxJTlVYKQkJKz0gc2VsaW51eC9idWlsdC1pbi5vCiBvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBzbWFjay9idWlsdC1pbi5vCitvYmotJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKQkJKz0gdG9tb3lvL2J1aWx0LWluLm8KIG9iai0kKENPTkZJR19TRUNVUklUWV9ST09UUExVRykJCSs9IHJvb3RfcGx1Zy5vCiBvYmotJChDT05GSUdfQ0dST1VQX0RFVklDRSkJCSs9IGRldmljZV9jZ3JvdXAubworCisjIE9iamVjdCBpbnRlZ3JpdHkgZmlsZSBsaXN0cworc3ViZGlyLSQoQ09ORklHX0lNQSkJCQkrPSBpbnRlZ3JpdHkvaW1hCitvYmotJChDT05GSUdfSU1BKQkJCSs9IGludGVncml0eS9pbWEvYnVpbHQtaW4ubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW5vZGUuYyBiL3NlY3VyaXR5L2lub2RlLmMKaW5kZXggMDA3ZWYyNS4uZjNiOTFiZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW5vZGUuYworKysgYi9zZWN1cml0eS9pbm9kZS5jCkBAIC0yMDIsMTIgKzIwMiwxMSBAQAogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXMKICAqIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIHNlY3VyaXR5ZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUgZmlsZSBpcwogICogdG8gYmUgcmVtb3ZlZCAobm8gYXV0b21hdGljIGNsZWFudXAgaGFwcGVucyBpZiB5b3VyIG1vZHVsZSBpcyB1bmxvYWRlZCwKLSAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZSkuICBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIGlzIHJldHVybmVkLgorICogeW91IGFyZSByZXNwb25zaWJsZSBoZXJlKS4gIElmIGFuIGVycm9yIG9jY3VycywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiB0aGUgZXJvcnIgdmFsdWUgKHZpYSBFUlJfUFRSKS4KICAqCiAgKiBJZiBzZWN1cml0eWZzIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWwsIHRoZSB2YWx1ZSAlLUVOT0RFViBpcwotICogcmV0dXJuZWQuICBJdCBpcyBub3Qgd2lzZSB0byBjaGVjayBmb3IgdGhpcyB2YWx1ZSwgYnV0IHJhdGhlciwgY2hlY2sgZm9yCi0gKiAlTlVMTCBvciAhJU5VTEwgaW5zdGVhZCBhcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yICNpZmRlZiBpbiB0aGUgY2FsbGluZwotICogY29kZS4KKyAqIHJldHVybmVkLgogICovCiBzdHJ1Y3QgZGVudHJ5ICpzZWN1cml0eWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q5NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCkBAIC0wLDAgKzEsNTUgQEAKKyMgSUJNIEludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUKKyMKK2NvbmZpZyBJTUEKKwlib29sICJJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkiCisJZGVwZW5kcyBvbiBBQ1BJCisJc2VsZWN0IFNFQ1VSSVRZRlMKKwlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19ITUFDCisJc2VsZWN0IENSWVBUT19NRDUKKwlzZWxlY3QgQ1JZUFRPX1NIQTEKKwlzZWxlY3QgVENHX1RQTQorCXNlbGVjdCBUQ0dfVElTCisJaGVscAorCSAgVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkgIE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpIG1haW50YWlucyBhIGxpc3Qgb2YgaGFzaAorCSAgdmFsdWVzIG9mIGV4ZWN1dGFibGVzIGFuZCBvdGhlciBzZW5zaXRpdmUgc3lzdGVtIGZpbGVzLAorCSAgYXMgdGhleSBhcmUgcmVhZCBvciBleGVjdXRlZC4gSWYgYW4gYXR0YWNrZXIgbWFuYWdlcworCSAgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiBhbiBpbXBvcnRhbnQgc3lzdGVtIGZpbGUKKwkgIGJlaW5nIG1lYXN1cmVkLCB3ZSBjYW4gdGVsbC4KKworCSAgSWYgeW91ciBzeXN0ZW0gaGFzIGEgVFBNIGNoaXAsIHRoZW4gSU1BIGFsc28gbWFpbnRhaW5zCisJICBhbiBhZ2dyZWdhdGUgaW50ZWdyaXR5IHZhbHVlIG92ZXIgdGhpcyBsaXN0IGluc2lkZSB0aGUKKwkgIFRQTSBoYXJkd2FyZSwgc28gdGhhdCB0aGUgVFBNIGNhbiBwcm92ZSB0byBhIHRoaXJkIHBhcnR5CisJICB3aGV0aGVyIG9yIG5vdCBjcml0aWNhbCBzeXN0ZW0gZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgorCSAgUmVhZCA8aHR0cDovL3d3dy51c2VuaXgub3JnL2V2ZW50cy9zZWMwNC90ZWNoL3NhaWxlci5odG1sPgorCSAgdG8gbGVhcm4gbW9yZSBhYm91dCBJTUEuCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSU1BX01FQVNVUkVfUENSX0lEWAorCWludAorCWRlcGVuZHMgb24gSU1BCisJcmFuZ2UgOCAxNAorCWRlZmF1bHQgMTAKKwloZWxwCisJICBJTUFfTUVBU1VSRV9QQ1JfSURYIGRldGVybWluZXMgdGhlIFRQTSBQQ1IgcmVnaXN0ZXIgaW5kZXgKKwkgIHRoYXQgSU1BIHVzZXMgdG8gbWFpbnRhaW4gdGhlIGludGVncml0eSBhZ2dyZWdhdGUgb2YgdGhlCisJICBtZWFzdXJlbWVudCBsaXN0LiAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgMTAuCisKK2NvbmZpZyBJTUFfQVVESVQKKwlib29sCisJZGVwZW5kcyBvbiBJTUEKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEga2VybmVsIHBhcmFtZXRlciAnaW1hX2F1ZGl0Jywgd2hpY2gKKwkgIGFsbG93cyBpbmZvcm1hdGlvbmFsIGF1ZGl0aW5nIG1lc3NhZ2VzIHRvIGJlIGVuYWJsZWQKKwkgIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgaW5mb3JtYXRpb25hbCBpbnRlZ3JpdHkKKwkgIGF1ZGl0aW5nIG1lc3NhZ2VzIGNhbiBiZSBlbmFibGVkIHdpdGggJ2ltYV9hdWRpdD0xJyBvbgorCSAgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKK2NvbmZpZyBJTUFfTFNNX1JVTEVTCisJYm9vbAorCWRlcGVuZHMgb24gSU1BICYmIEFVRElUICYmIChTRUNVUklUWV9TRUxJTlVYIHx8IFNFQ1VSSVRZX1NNQUNLKQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGRpc3JlZ2FyZCBMU00gYmFzZWQgcG9saWN5IHJ1bGVzLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9NYWtlZmlsZSBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3YzRjYgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciBidWlsZGluZyBUcnVzdGVkIENvbXB1dGluZyBHcm91cCdzKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKyMgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkuCisjCisKK29iai0kKENPTkZJR19JTUEpICs9IGltYS5vCisKK2ltYS15IDo9IGltYV9mcy5vIGltYV9xdWV1ZS5vIGltYV9pbml0Lm8gaW1hX21haW4ubyBpbWFfY3J5cHRvLm8gaW1hX2FwaS5vIFwKKwkgaW1hX3BvbGljeS5vIGltYV9paW50Lm8gaW1hX2F1ZGl0Lm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmggYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NWViNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWEuaAorICoJaW50ZXJuYWwgSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZSAoSU1BKSBkZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgX19MSU5VWF9JTUFfSAorI2RlZmluZSBfX0xJTlVYX0lNQV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3RwbS5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisKK2VudW0gaW1hX3Nob3dfdHlwZSB7IElNQV9TSE9XX0JJTkFSWSwgSU1BX1NIT1dfQVNDSUkgfTsKK2VudW0gdHBtX3BjcnMgeyBUUE1fUENSMCA9IDAsIFRQTV9QQ1I4ID0gOCB9OworCisvKiBkaWdlc3Qgc2l6ZSBmb3IgSU1BLCBmaXRzIFNIQTEgb3IgTUQ1ICovCisjZGVmaW5lIElNQV9ESUdFU1RfU0laRQkJMjAKKyNkZWZpbmUgSU1BX0VWRU5UX05BTUVfTEVOX01BWAkyNTUKKworI2RlZmluZSBJTUFfSEFTSF9CSVRTIDkKKyNkZWZpbmUgSU1BX01FQVNVUkVfSFRBQkxFX1NJWkUgKDEgPDwgSU1BX0hBU0hfQklUUykKKworLyogc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbiAqLworZXh0ZXJuIGludCBpbWFfaW5pdGlhbGl6ZWQ7CitleHRlcm4gaW50IGltYV91c2VkX2NoaXA7CitleHRlcm4gY2hhciAqaW1hX2hhc2g7CisKKy8qIElNQSBpbm9kZSB0ZW1wbGF0ZSBkZWZpbml0aW9uICovCitzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgeworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOwkvKiBzaGExL21kNSBtZWFzdXJlbWVudCBoYXNoICovCisJY2hhciBmaWxlX25hbWVbSU1BX0VWRU5UX05BTUVfTEVOX01BWCArIDFdOwkvKiBuYW1lICsgXDAgKi8KK307CisKK3N0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgeworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOwkvKiBzaGExIG9yIG1kNSBtZWFzdXJlbWVudCBoYXNoICovCisJY29uc3QgY2hhciAqdGVtcGxhdGVfbmFtZTsKKwlpbnQgdGVtcGxhdGVfbGVuOworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSB0ZW1wbGF0ZTsKK307CisKK3N0cnVjdCBpbWFfcXVldWVfZW50cnkgeworCXN0cnVjdCBobGlzdF9ub2RlIGhuZXh0OwkvKiBwbGFjZSBpbiBoYXNoIGNvbGxpc2lvbiBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBsYXRlcjsJCS8qIHBsYWNlIGluIGltYV9tZWFzdXJlbWVudHMgbGlzdCAqLworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworfTsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGltYV9tZWFzdXJlbWVudHM7CS8qIGxpc3Qgb2YgYWxsIG1lYXN1cmVtZW50cyAqLworCisvKiBkZWNsYXJhdGlvbnMgKi8KK3ZvaWQgaW50ZWdyaXR5X2F1ZGl0X21zZyhpbnQgYXVkaXRfbXNnbm8sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKm9wLAorCQkJIGNvbnN0IGNoYXIgKmNhdXNlLCBpbnQgcmVzdWx0LCBpbnQgaW5mbyk7CisKKy8qIEludGVybmFsIElNQSBmdW5jdGlvbiBkZWZpbml0aW9ucyAqLwordm9pZCBpbWFfaWludGNhY2hlX2luaXQodm9pZCk7CitpbnQgaW1hX2luaXQodm9pZCk7Cit2b2lkIGltYV9jbGVhbnVwKHZvaWQpOworaW50IGltYV9mc19pbml0KHZvaWQpOwordm9pZCBpbWFfZnNfY2xlYW51cCh2b2lkKTsKK2ludCBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5KHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LCBpbnQgdmlvbGF0aW9uLAorCQkJICAgY29uc3QgY2hhciAqb3AsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IGltYV9jYWxjX2hhc2goc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmRpZ2VzdCk7CitpbnQgaW1hX2NhbGNfdGVtcGxhdGVfaGFzaChpbnQgdGVtcGxhdGVfbGVuLCB2b2lkICp0ZW1wbGF0ZSwgY2hhciAqZGlnZXN0KTsKK2ludCBpbWFfY2FsY19ib290X2FnZ3JlZ2F0ZShjaGFyICpkaWdlc3QpOwordm9pZCBpbWFfYWRkX3Zpb2xhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm9wLCBjb25zdCBjaGFyICpjYXVzZSk7CisKKy8qCisgKiB1c2VkIHRvIHByb3RlY3QgaF90YWJsZSBhbmQgc2hhX3RhYmxlCisgKi8KK2V4dGVybiBzcGlubG9ja190IGltYV9xdWV1ZV9sb2NrOworCitzdHJ1Y3QgaW1hX2hfdGFibGUgeworCWF0b21pY19sb25nX3QgbGVuOwkvKiBudW1iZXIgb2Ygc3RvcmVkIG1lYXN1cmVtZW50cyBpbiB0aGUgbGlzdCAqLworCWF0b21pY19sb25nX3QgdmlvbGF0aW9uczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBxdWV1ZVtJTUFfTUVBU1VSRV9IVEFCTEVfU0laRV07Cit9OworZXh0ZXJuIHN0cnVjdCBpbWFfaF90YWJsZSBpbWFfaHRhYmxlOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW1hX2hhc2hfa2V5KHU4ICpkaWdlc3QpCit7CisJcmV0dXJuIGhhc2hfbG9uZygqZGlnZXN0LCBJTUFfSEFTSF9CSVRTKTsKK30KKworLyogaWludCBjYWNoZSBmbGFncyAqLworI2RlZmluZSBJTUFfTUVBU1VSRUQJCTEKKyNkZWZpbmUgSU1BX0lJTlRfRFVNUF9TVEFDSwk1MTIKKworLyogaW50ZWdyaXR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgeworCXU2NCB2ZXJzaW9uOwkJLyogdHJhY2sgaW5vZGUgY2hhbmdlcyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CisJc3RydWN0IG11dGV4IG11dGV4OwkvKiBwcm90ZWN0czogdmVyc2lvbiwgZmxhZ3MsIGRpZ2VzdCAqLworCWxvbmcgcmVhZGNvdW50OwkJLyogbWVhc3VyZWQgZmlsZXMgcmVhZGNvdW50ICovCisJbG9uZyB3cml0ZWNvdW50OwkvKiBtZWFzdXJlZCBmaWxlcyB3cml0ZWNvdW50ICovCisJbG9uZyBvcGVuY291bnQ7CQkvKiBvcGVucyByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsJLyogaW1hX2lpbnRfY2FjaGUgcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IHJjdV9oZWFkIHJjdTsKK307CisKKy8qIExJTSBBUEkgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKi8KK2ludCBpbWFfbXVzdF9tZWFzdXJlKHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICBpbnQgbWFzaywgaW50IGZ1bmN0aW9uKTsKK2ludCBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3ZvaWQgaW1hX3N0b3JlX21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSk7CitpbnQgaW1hX3N0b3JlX3RlbXBsYXRlKHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LCBpbnQgdmlvbGF0aW9uLAorCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGltYV90ZW1wbGF0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZSwKKwkJICAgICAgIGVudW0gaW1hX3Nob3dfdHlwZSBzaG93KTsKKworLyogcmFkaXggdHJlZSBjYWxscyB0byBsb29rdXAsIGluc2VydCwgZGVsZXRlCisgKiBpbnRlZ3JpdHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBpbWFfaWludF9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGlpbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cit2b2lkIGlpbnRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpOworCisvKiBJTUEgcG9saWN5IHJlbGF0ZWQgZnVuY3Rpb25zICovCitlbnVtIGltYV9ob29rcyB7IFBBVEhfQ0hFQ0sgPSAxLCBGSUxFX01NQVAsIEJQUk1fQ0hFQ0sgfTsKKworaW50IGltYV9tYXRjaF9wb2xpY3koc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBpbWFfaG9va3MgZnVuYywgaW50IG1hc2spOwordm9pZCBpbWFfaW5pdF9wb2xpY3kodm9pZCk7Cit2b2lkIGltYV91cGRhdGVfcG9saWN5KHZvaWQpOworaW50IGltYV9wYXJzZV9hZGRfcnVsZShjaGFyICopOwordm9pZCBpbWFfZGVsZXRlX3J1bGVzKHZvaWQpOworCisvKiBMU00gYmFzZWQgcG9saWN5IHJ1bGVzIHJlcXVpcmUgYXVkaXQgKi8KKyNpZmRlZiBDT05GSUdfSU1BX0xTTV9SVUxFUworCisjZGVmaW5lIHNlY3VyaXR5X2ZpbHRlcl9ydWxlX2luaXQgc2VjdXJpdHlfYXVkaXRfcnVsZV9pbml0CisjZGVmaW5lIHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoIHNlY3VyaXR5X2F1ZGl0X3J1bGVfbWF0Y2gKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsdGVyX3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKwkJCQkJICAgIHZvaWQgKipsc21ydWxlKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaCh1MzIgc2VjaWQsIHUzMiBmaWVsZCwgdTMyIG9wLAorCQkJCQkgICAgIHZvaWQgKmxzbXJ1bGUsCisJCQkJCSAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmFjdHgpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYgLyogQ09ORklHX0lNQV9MU01fUlVMRVMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Q1OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfYXBpLmMKKyAqCUltcGxlbWVudHMgbXVzdF9tZWFzdXJlLCBjb2xsZWN0X21lYXN1cmVtZW50LCBzdG9yZV9tZWFzdXJlbWVudCwKKyAqCWFuZCBzdG9yZV90ZW1wbGF0ZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaW1hLmgiCitzdGF0aWMgY29uc3QgY2hhciAqSU1BX1RFTVBMQVRFX05BTUUgPSAiaW1hIjsKKworLyoKKyAqIGltYV9zdG9yZV90ZW1wbGF0ZSAtIHN0b3JlIGltYSB0ZW1wbGF0ZSBtZWFzdXJlbWVudHMKKyAqCisgKiBDYWxjdWxhdGUgdGhlIGhhc2ggb2YgYSB0ZW1wbGF0ZSBlbnRyeSwgYWRkIHRoZSB0ZW1wbGF0ZSBlbnRyeQorICogdG8gYW4gb3JkZXJlZCBsaXN0IG9mIG1lYXN1cmVtZW50IGVudHJpZXMgbWFpbnRhaW5lZCBpbnNpZGUgdGhlIGtlcm5lbCwKKyAqIGFuZCBhbHNvIHVwZGF0ZSB0aGUgYWdncmVnYXRlIGludGVncml0eSB2YWx1ZSAobWFpbnRhaW5lZCBpbnNpZGUgdGhlCisgKiBjb25maWd1cmVkIFRQTSBQQ1IpIG92ZXIgdGhlIGhhc2hlcyBvZiB0aGUgY3VycmVudCBsaXN0IG9mIG1lYXN1cmVtZW50CisgKiBlbnRyaWVzLgorICoKKyAqIEFwcGxpY2F0aW9ucyByZXRyaWV2ZSB0aGUgY3VycmVudCBrZXJuZWwtaGVsZCBtZWFzdXJlbWVudCBsaXN0IHRocm91Z2gKKyAqIHRoZSBzZWN1cml0eWZzIGVudHJpZXMgaW4gL3N5cy9rZXJuZWwvc2VjdXJpdHkvaW1hLiBUaGUgc2lnbmVkIGFnZ3JlZ2F0ZQorICogVFBNIFBDUiAoY2FsbGVkIHF1b3RlKSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGEgVFBNIHVzZXIgc3BhY2UgbGlicmFyeQorICogYW5kIGlzIHVzZWQgdG8gdmFsaWRhdGUgdGhlIG1lYXN1cmVtZW50IGxpc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBpbWFfc3RvcmVfdGVtcGxhdGUoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksCisJCSAgICAgICBpbnQgdmlvbGF0aW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWNvbnN0IGNoYXIgKm9wID0gImFkZF90ZW1wbGF0ZV9tZWFzdXJlIjsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJoYXNoaW5nX2Vycm9yIjsKKwlpbnQgcmVzdWx0OworCisJbWVtc2V0KGVudHJ5LT5kaWdlc3QsIDAsIHNpemVvZihlbnRyeS0+ZGlnZXN0KSk7CisJZW50cnktPnRlbXBsYXRlX25hbWUgPSBJTUFfVEVNUExBVEVfTkFNRTsKKwllbnRyeS0+dGVtcGxhdGVfbGVuID0gc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSk7CisKKwlpZiAoIXZpb2xhdGlvbikgeworCQlyZXN1bHQgPSBpbWFfY2FsY190ZW1wbGF0ZV9oYXNoKGVudHJ5LT50ZW1wbGF0ZV9sZW4sCisJCQkJCQkmZW50cnktPnRlbXBsYXRlLAorCQkJCQkJZW50cnktPmRpZ2VzdCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLAorCQkJCQkgICAgZW50cnktPnRlbXBsYXRlX25hbWUsIG9wLAorCQkJCQkgICAgYXVkaXRfY2F1c2UsIHJlc3VsdCwgMCk7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJfQorCXJlc3VsdCA9IGltYV9hZGRfdGVtcGxhdGVfZW50cnkoZW50cnksIHZpb2xhdGlvbiwgb3AsIGlub2RlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogaW1hX2FkZF92aW9sYXRpb24gLSBhZGQgdmlvbGF0aW9uIHRvIG1lYXN1cmVtZW50IGxpc3QuCisgKgorICogVmlvbGF0aW9ucyBhcmUgZmxhZ2dlZCBpbiB0aGUgbWVhc3VyZW1lbnQgbGlzdCB3aXRoIHplcm8gaGFzaCB2YWx1ZXMuCisgKiBCeSBleHRlbmRpbmcgdGhlIFBDUiB3aXRoIDB4RkYncyBpbnN0ZWFkIG9mIHdpdGggemVyb2VzLCB0aGUgUENSCisgKiB2YWx1ZSBpcyBpbnZhbGlkYXRlZC4KKyAqLwordm9pZCBpbWFfYWRkX3Zpb2xhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm9wLCBjb25zdCBjaGFyICpjYXVzZSkKK3sKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgdmlvbGF0aW9uID0gMTsKKwlpbnQgcmVzdWx0OworCisJLyogY2FuIG92ZXJmbG93LCBvbmx5IGluZGljYXRvciAqLworCWF0b21pY19sb25nX2luYygmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW1lbXNldCgmZW50cnktPnRlbXBsYXRlLCAwLCBzaXplb2YoZW50cnktPnRlbXBsYXRlKSk7CisJc3RybmNweShlbnRyeS0+dGVtcGxhdGUuZmlsZV9uYW1lLCBmaWxlbmFtZSwgSU1BX0VWRU5UX05BTUVfTEVOX01BWCk7CisJcmVzdWx0ID0gaW1hX3N0b3JlX3RlbXBsYXRlKGVudHJ5LCB2aW9sYXRpb24sIGlub2RlKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJa2ZyZWUoZW50cnkpOworZXJyX291dDoKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLCBmaWxlbmFtZSwKKwkJCSAgICBvcCwgY2F1c2UsIHJlc3VsdCwgMCk7Cit9CisKKy8qKgorICogaW1hX211c3RfbWVhc3VyZSAtIG1lYXN1cmUgZGVjaXNpb24gYmFzZWQgb24gcG9saWN5LgorICogQGlub2RlOiBwb2ludGVyIHRvIGlub2RlIHRvIG1lYXN1cmUKKyAqIEBtYXNrOiBjb250YWlucyB0aGUgcGVybWlzc2lvbiBtYXNrIChNQVlfUkVBRCwgTUFZX1dSSVRFLCBNQVlfRVhFQ1VURSkKKyAqIEBmdW5jdGlvbjogY2FsbGluZyBmdW5jdGlvbiAoUEFUSF9DSEVDSywgQlBSTV9DSEVDSywgRklMRV9NTUFQKQorICoKKyAqIFRoZSBwb2xpY3kgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBrZXlwYWlyczoKKyAqIAkJc3Viaj0sIG9iaj0sIHR5cGU9LCBmdW5jPSwgbWFzaz0sIGZzbWFnaWM9CisgKglzdWJqLG9iaiwgYW5kIHR5cGU6IGFyZSBMU00gc3BlY2lmaWMuCisgKiAJZnVuYzogUEFUSF9DSEVDSyB8IEJQUk1fQ0hFQ0sgfCBGSUxFX01NQVAKKyAqIAltYXNrOiBjb250YWlucyB0aGUgcGVybWlzc2lvbiBtYXNrCisgKglmc21hZ2ljOiBoZXggdmFsdWUKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlpbnQtPm11dGV4IGhlbGQuCisgKgorICogUmV0dXJuIDAgdG8gbWVhc3VyZS4gUmV0dXJuIDEgaWYgYWxyZWFkeSBtZWFzdXJlZC4KKyAqIEZvciBtYXRjaGluZyBhIERPTlRfTUVBU1VSRSBwb2xpY3ksIG5vIHBvbGljeSwgb3Igb3RoZXIKKyAqIGVycm9yLCByZXR1cm4gYW4gZXJyb3IgY29kZS4KKyovCitpbnQgaW1hX211c3RfbWVhc3VyZShzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgaW50IG1hc2ssIGludCBmdW5jdGlvbikKK3sKKwlpbnQgbXVzdF9tZWFzdXJlOworCisJaWYgKGlpbnQtPmZsYWdzICYgSU1BX01FQVNVUkVEKQorCQlyZXR1cm4gMTsKKworCW11c3RfbWVhc3VyZSA9IGltYV9tYXRjaF9wb2xpY3koaW5vZGUsIGZ1bmN0aW9uLCBtYXNrKTsKKwlyZXR1cm4gbXVzdF9tZWFzdXJlID8gMCA6IC1FQUNDRVM7Cit9CisKKy8qCisgKiBpbWFfY29sbGVjdF9tZWFzdXJlbWVudCAtIGNvbGxlY3QgZmlsZSBtZWFzdXJlbWVudAorICoKKyAqIENhbGN1bGF0ZSB0aGUgZmlsZSBoYXNoLCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QsCisgKiBzdG9yaW5nIHRoZSBtZWFzdXJlbWVudCBhbmQgaV92ZXJzaW9uIGluIHRoZSBpaW50LgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaWludC0+bXV0ZXggaGVsZC4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmVzdWx0ID0gLUVFWElTVDsKKworCWlmICghKGlpbnQtPmZsYWdzICYgSU1BX01FQVNVUkVEKSkgeworCQl1NjQgaV92ZXJzaW9uID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfdmVyc2lvbjsKKworCQltZW1zZXQoaWludC0+ZGlnZXN0LCAwLCBJTUFfRElHRVNUX1NJWkUpOworCQlyZXN1bHQgPSBpbWFfY2FsY19oYXNoKGZpbGUsIGlpbnQtPmRpZ2VzdCk7CisJCWlmICghcmVzdWx0KQorCQkJaWludC0+dmVyc2lvbiA9IGlfdmVyc2lvbjsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGltYV9zdG9yZV9tZWFzdXJlbWVudCAtIHN0b3JlIGZpbGUgbWVhc3VyZW1lbnQKKyAqCisgKiBDcmVhdGUgYW4gImltYSIgdGVtcGxhdGUgYW5kIHRoZW4gc3RvcmUgdGhlIHRlbXBsYXRlIGJ5IGNhbGxpbmcKKyAqIGltYV9zdG9yZV90ZW1wbGF0ZS4KKyAqCisgKiBXZSBvbmx5IGdldCBoZXJlIGlmIHRoZSBpbm9kZSBoYXMgbm90IGFscmVhZHkgYmVlbiBtZWFzdXJlZCwKKyAqIGJ1dCB0aGUgbWVhc3VyZW1lbnQgY291bGQgYWxyZWFkeSBleGlzdDoKKyAqIAktIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBmaWxlIG9uIGVpdGhlciB0aGUgc2FtZSBvcgorICoJICBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuCisgKgktIHRoZSBpbm9kZSB3YXMgcHJldmlvdXNseSBmbHVzaGVkIGFzIHdlbGwgYXMgdGhlIGlpbnQgaW5mbywKKyAqCSAgY29udGFpbmluZyB0aGUgaGFzaGluZyBpbmZvLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaWludC0+bXV0ZXggaGVsZC4KKyAqLwordm9pZCBpbWFfc3RvcmVfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQoreworCWNvbnN0IGNoYXIgKm9wID0gImFkZF90ZW1wbGF0ZV9tZWFzdXJlIjsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJFTk9NRU0iOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgdmlvbGF0aW9uID0gMDsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkgeworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLCBmaWxlbmFtZSwKKwkJCQkgICAgb3AsIGF1ZGl0X2NhdXNlLCByZXN1bHQsIDApOworCQlyZXR1cm47CisJfQorCW1lbXNldCgmZW50cnktPnRlbXBsYXRlLCAwLCBzaXplb2YoZW50cnktPnRlbXBsYXRlKSk7CisJbWVtY3B5KGVudHJ5LT50ZW1wbGF0ZS5kaWdlc3QsIGlpbnQtPmRpZ2VzdCwgSU1BX0RJR0VTVF9TSVpFKTsKKwlzdHJuY3B5KGVudHJ5LT50ZW1wbGF0ZS5maWxlX25hbWUsIGZpbGVuYW1lLCBJTUFfRVZFTlRfTkFNRV9MRU5fTUFYKTsKKworCXJlc3VsdCA9IGltYV9zdG9yZV90ZW1wbGF0ZShlbnRyeSwgdmlvbGF0aW9uLCBpbm9kZSk7CisJaWYgKCFyZXN1bHQpCisJCWlpbnQtPmZsYWdzIHw9IElNQV9NRUFTVVJFRDsKKwllbHNlCisJCWtmcmVlKGVudHJ5KTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2F1ZGl0LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hdWRpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDgyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hdWRpdC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogRmlsZTogaW50ZWdyaXR5X2F1ZGl0LmMKKyAqIAlBdWRpdCBjYWxscyBmb3IgdGhlIGludGVncml0eSBzdWJzeXN0ZW0KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgImltYS5oIgorCitzdGF0aWMgaW50IGltYV9hdWRpdDsKKworI2lmZGVmIENPTkZJR19JTUFfQVVESVQKKworLyogaW1hX2F1ZGl0X3NldHVwIC0gZW5hYmxlIGluZm9ybWF0aW9uYWwgYXVkaXRpbmcgbWVzc2FnZXMgKi8KK3N0YXRpYyBpbnQgX19pbml0IGltYV9hdWRpdF9zZXR1cChjaGFyICpzdHIpCit7CisJdW5zaWduZWQgbG9uZyBhdWRpdDsKKwlpbnQgcmMsIHJlc3VsdCA9IDA7CisJY2hhciAqb3AgPSAiaW1hX2F1ZGl0IjsKKwljaGFyICpjYXVzZTsKKworCXJjID0gc3RyaWN0X3N0cnRvdWwoc3RyLCAwLCAmYXVkaXQpOworCWlmIChyYyB8fCBhdWRpdCA+IDEpCisJCXJlc3VsdCA9IDE7CisJZWxzZQorCQlpbWFfYXVkaXQgPSBhdWRpdDsKKwljYXVzZSA9IGltYV9hdWRpdCA/ICJlbmFibGVkIiA6ICJub3RfZW5hYmxlZCI7CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLCBOVUxMLAorCQkJICAgIG9wLCBjYXVzZSwgcmVzdWx0LCAwKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImltYV9hdWRpdD0iLCBpbWFfYXVkaXRfc2V0dXApOworI2VuZGlmCisKK3ZvaWQgaW50ZWdyaXR5X2F1ZGl0X21zZyhpbnQgYXVkaXRfbXNnbm8sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKm9wLAorCQkJIGNvbnN0IGNoYXIgKmNhdXNlLCBpbnQgcmVzdWx0LCBpbnQgYXVkaXRfaW5mbykKK3sKKwlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKKworCWlmICghaW1hX2F1ZGl0ICYmIGF1ZGl0X2luZm8gPT0gMSkgLyogU2tpcCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCisJCXJldHVybjsKKworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsIEdGUF9LRVJORUwsIGF1ZGl0X21zZ25vKTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiaW50ZWdyaXR5OiBwaWQ9JWQgdWlkPSV1IGF1aWQ9JXUgc2VzPSV1IiwKKwkJCSBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNyZWQtPnVpZCwKKwkJCSBhdWRpdF9nZXRfbG9naW51aWQoY3VycmVudCksCisJCQkgYXVkaXRfZ2V0X3Nlc3Npb25pZChjdXJyZW50KSk7CisJYXVkaXRfbG9nX3Rhc2tfY29udGV4dChhYik7CisJc3dpdGNoIChhdWRpdF9tc2dubykgeworCWNhc2UgQVVESVRfSU5URUdSSVRZX0RBVEE6CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEE6CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfUENSOgorCWNhc2UgQVVESVRfSU5URUdSSVRZX1NUQVRVUzoKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvcD0lcyBjYXVzZT0lcyIsIG9wLCBjYXVzZSk7CisJCWJyZWFrOworCWNhc2UgQVVESVRfSU5URUdSSVRZX0hBU0g6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3A9JXMgaGFzaD0lcyIsIG9wLCBjYXVzZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3A9JXMiLCBvcCk7CisJfQorCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgY29tbT0iKTsKKwlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBjdXJyZW50LT5jb21tKTsKKwlpZiAoZm5hbWUpIHsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSIpOworCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBmbmFtZSk7CisJfQorCWlmIChpbm9kZSkKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBkZXY9JXMgaW5vPSVsdSIsCisJCQkJIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcmVzPSVkIiwgIXJlc3VsdCA/IDAgOiAxKTsKKwlhdWRpdF9sb2dfZW5kKGFiKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2NyeXB0by5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkNTcyYgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2NyeXB0by5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9jcnlwdG8uYworICogCUNhbGN1bGF0ZXMgbWQ1L3NoYTEgZmlsZSBoYXNoLCB0ZW1wbGF0ZSBoYXNoLCBib290LWFnZ3JlYXRlIGhhc2gKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSAiaW1hLmgiCisKK3N0YXRpYyBpbnQgaW5pdF9kZXNjKHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MpCit7CisJaW50IHJjOworCisJZGVzYy0+dGZtID0gY3J5cHRvX2FsbG9jX2hhc2goaW1hX2hhc2gsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoZGVzYy0+dGZtKSkgeworCQlwcl9pbmZvKCJmYWlsZWQgdG8gbG9hZCAlcyB0cmFuc2Zvcm06ICVsZFxuIiwKKwkJCWltYV9oYXNoLCBQVFJfRVJSKGRlc2MtPnRmbSkpOworCQlyYyA9IFBUUl9FUlIoZGVzYy0+dGZtKTsKKwkJcmV0dXJuIHJjOworCX0KKwlkZXNjLT5mbGFncyA9IDA7CisJcmMgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOworCWlmIChyYykKKwkJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLT50Zm0pOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgTUQ1L1NIQTEgZmlsZSBkaWdlc3QKKyAqLworaW50IGltYV9jYWxjX2hhc2goc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmRpZ2VzdCkKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCWxvZmZfdCBpX3NpemU7CisJY2hhciAqcmJ1ZjsKKwlpbnQgcmMsIG9mZnNldCA9IDA7CisKKwlyYyA9IGluaXRfZGVzYygmZGVzYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXJidWYgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYnVmKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl3aGlsZSAob2Zmc2V0IDwgaV9zaXplKSB7CisJCWludCByYnVmX2xlbjsKKworCQlyYnVmX2xlbiA9IGtlcm5lbF9yZWFkKGZpbGUsIG9mZnNldCwgcmJ1ZiwgUEFHRV9TSVpFKTsKKwkJaWYgKHJidWZfbGVuIDwgMCkgeworCQkJcmMgPSByYnVmX2xlbjsKKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCArPSByYnVmX2xlbjsKKwkJc2dfaW5pdF9vbmUoc2csIHJidWYsIHJidWZfbGVuKTsKKworCQlyYyA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgc2csIHJidWZfbGVuKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJfQorCWtmcmVlKHJidWYpOworCWlmICghcmMpCisJCXJjID0gY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRpZ2VzdCk7CitvdXQ6CisJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLnRmbSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBoYXNoIG9mIGEgZ2l2ZW4gdGVtcGxhdGUKKyAqLworaW50IGltYV9jYWxjX3RlbXBsYXRlX2hhc2goaW50IHRlbXBsYXRlX2xlbiwgdm9pZCAqdGVtcGxhdGUsIGNoYXIgKmRpZ2VzdCkKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCWludCByYzsKKworCXJjID0gaW5pdF9kZXNjKCZkZXNjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJc2dfaW5pdF9vbmUoc2csIHRlbXBsYXRlLCB0ZW1wbGF0ZV9sZW4pOworCXJjID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCBzZywgdGVtcGxhdGVfbGVuKTsKKwlpZiAoIXJjKQorCQlyYyA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpOworCWNyeXB0b19mcmVlX2hhc2goZGVzYy50Zm0pOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgaW1hX3BjcnJlYWQoaW50IGlkeCwgdTggKnBjcikKK3sKKwlpZiAoIWltYV91c2VkX2NoaXApCisJCXJldHVybjsKKworCWlmICh0cG1fcGNyX3JlYWQoVFBNX0FOWV9OVU0sIGlkeCwgcGNyKSAhPSAwKQorCQlwcl9lcnIoIkVycm9yIENvbW11bmljYXRpbmcgdG8gVFBNIGNoaXBcbiIpOworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBib290IGFnZ3JlZ2F0ZSBoYXNoCisgKi8KK2ludCBpbWFfY2FsY19ib290X2FnZ3JlZ2F0ZShjaGFyICpkaWdlc3QpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwl1OCBwY3JfaVtJTUFfRElHRVNUX1NJWkVdOworCWludCByYywgaTsKKworCXJjID0gaW5pdF9kZXNjKCZkZXNjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyogY3VtdWxhdGl2ZSBzaGExIG92ZXIgdHBtIHJlZ2lzdGVycyAwLTcgKi8KKwlmb3IgKGkgPSBUUE1fUENSMDsgaSA8IFRQTV9QQ1I4OyBpKyspIHsKKwkJaW1hX3BjcnJlYWQoaSwgcGNyX2kpOworCQkvKiBub3cgYWNjdW11bGF0ZSB3aXRoIGN1cnJlbnQgYWdncmVnYXRlICovCisJCXNnX2luaXRfb25lKCZzZywgcGNyX2ksIElNQV9ESUdFU1RfU0laRSk7CisJCXJjID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCAmc2csIElNQV9ESUdFU1RfU0laRSk7CisJfQorCWlmICghcmMpCisJCWNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpOworCWNyeXB0b19mcmVlX2hhc2goZGVzYy50Zm0pOworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYmUyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCkBAIC0wLDAgKzEsMzc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBLeWxlbmUgSGFsbCA8a2poYWxsQHVzLmlibS5jb20+CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAdXMuaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9mcy5jCisgKglpbXBsZW1lbmVudHMgc2VjdXJpdHkgZmlsZSBzeXN0ZW0gZm9yIHJlcG9ydGluZworICoJY3VycmVudCBtZWFzdXJlbWVudCBsaXN0IGFuZCBJTUEgc3RhdGlzdGljcworICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKworI2luY2x1ZGUgImltYS5oIgorCitzdGF0aWMgaW50IHZhbGlkX3BvbGljeSA9IDE7CisjZGVmaW5lIFRNUEJVRkxFTiAxMgorc3RhdGljIHNzaXplX3QgaW1hX3Nob3dfaHRhYmxlX3ZhbHVlKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgIGxvZmZfdCAqcHBvcywgYXRvbWljX2xvbmdfdCAqdmFsKQoreworCWNoYXIgdG1wYnVmW1RNUEJVRkxFTl07CisJc3NpemVfdCBsZW47CisKKwlsZW4gPSBzY25wcmludGYodG1wYnVmLCBUTVBCVUZMRU4sICIlbGlcbiIsIGF0b21pY19sb25nX3JlYWQodmFsKSk7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIHRtcGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgaW1hX3Nob3dfaHRhYmxlX3Zpb2xhdGlvbnMoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCSAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gaW1hX3Nob3dfaHRhYmxlX3ZhbHVlKGJ1ZiwgY291bnQsIHBwb3MsICZpbWFfaHRhYmxlLnZpb2xhdGlvbnMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfaHRhYmxlX3Zpb2xhdGlvbnNfb3BzID0geworCS5yZWFkID0gaW1hX3Nob3dfaHRhYmxlX3Zpb2xhdGlvbnMKK307CisKK3N0YXRpYyBzc2l6ZV90IGltYV9zaG93X21lYXN1cmVtZW50c19jb3VudChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS5sZW4pOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzID0geworCS5yZWFkID0gaW1hX3Nob3dfbWVhc3VyZW1lbnRzX2NvdW50Cit9OworCisvKiByZXR1cm5zIHBvaW50ZXIgdG8gaGxpc3Rfbm9kZSAqLworc3RhdGljIHZvaWQgKmltYV9tZWFzdXJlbWVudHNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlsb2ZmX3QgbCA9ICpwb3M7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWU7CisKKwkvKiB3ZSBuZWVkIGEgbG9jayBzaW5jZSBwb3MgY291bGQgcG9pbnQgYmV5b25kIGxhc3QgZWxlbWVudCAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShxZSwgJmltYV9tZWFzdXJlbWVudHMsIGxhdGVyKSB7CisJCWlmICghbC0tKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybiBxZTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmltYV9tZWFzdXJlbWVudHNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlID0gdjsKKworCS8qIGxvY2sgcHJvdGVjdHMgd2hlbiByZWFkaW5nIGJleW9uZCBsYXN0IGVsZW1lbnQKKwkgKiBhZ2FpbnN0IGNvbmN1cnJlbnQgbGlzdC1leHRlbnNpb24KKwkgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJcWUgPSBsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZShxZS0+bGF0ZXIubmV4dCksCisJCQlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5LCBsYXRlcik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJKCpwb3MpKys7CisKKwlyZXR1cm4gKCZxZS0+bGF0ZXIgPT0gJmltYV9tZWFzdXJlbWVudHMpID8gTlVMTCA6IHFlOworfQorCitzdGF0aWMgdm9pZCBpbWFfbWVhc3VyZW1lbnRzX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgdm9pZCBpbWFfcHV0YyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEsIGludCBkYXRhbGVuKQoreworCXdoaWxlIChkYXRhbGVuLS0pCisJCXNlcV9wdXRjKG0sICooY2hhciAqKWRhdGErKyk7Cit9CisKKy8qIHByaW50IGZvcm1hdDoKKyAqICAgICAgIDMyYml0LWxlPXBjciMKKyAqICAgICAgIGNoYXJbMjBdPXRlbXBsYXRlIGRpZ2VzdAorICogICAgICAgMzJiaXQtbGU9dGVtcGxhdGUgbmFtZSBzaXplCisgKiAgICAgICBjaGFyW25dPXRlbXBsYXRlIG5hbWUKKyAqICAgICAgIGV2ZW50ZGF0YVtuXT10ZW1wbGF0ZSBzcGVjaWZpYyBkYXRhCisgKi8KK3N0YXRpYyBpbnQgaW1hX21lYXN1cmVtZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwkvKiB0aGUgbGlzdCBuZXZlciBzaHJpbmtzLCBzbyB3ZSBkb24ndCBuZWVkIGEgbG9jayBoZXJlICovCisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUgPSB2OworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmU7CisJaW50IG5hbWVsZW47CisJdTMyIHBjciA9IENPTkZJR19JTUFfTUVBU1VSRV9QQ1JfSURYOworCisJLyogZ2V0IGVudHJ5ICovCisJZSA9IHFlLT5lbnRyeTsKKwlpZiAoZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIDFzdDogUENSSW5kZXgKKwkgKiBQQ1IgdXNlZCBpcyBhbHdheXMgdGhlIHNhbWUgKGNvbmZpZyBvcHRpb24pIGluCisJICogbGl0dGxlLWVuZGlhbiBmb3JtYXQKKwkgKi8KKwlpbWFfcHV0YyhtLCAmcGNyLCBzaXplb2YgcGNyKTsKKworCS8qIDJuZDogdGVtcGxhdGUgZGlnZXN0ICovCisJaW1hX3B1dGMobSwgZS0+ZGlnZXN0LCBJTUFfRElHRVNUX1NJWkUpOworCisJLyogM3JkOiB0ZW1wbGF0ZSBuYW1lIHNpemUgKi8KKwluYW1lbGVuID0gc3RybGVuKGUtPnRlbXBsYXRlX25hbWUpOworCWltYV9wdXRjKG0sICZuYW1lbGVuLCBzaXplb2YgbmFtZWxlbik7CisKKwkvKiA0dGg6ICB0ZW1wbGF0ZSBuYW1lICovCisJaW1hX3B1dGMobSwgKHZvaWQgKillLT50ZW1wbGF0ZV9uYW1lLCBuYW1lbGVuKTsKKworCS8qIDV0aDogIHRlbXBsYXRlIHNwZWNpZmljIGRhdGEgKi8KKwlpbWFfdGVtcGxhdGVfc2hvdyhtLCAoc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhICopJmUtPnRlbXBsYXRlLAorCQkJICBJTUFfU0hPV19CSU5BUlkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9tZWFzdXJtZW50c19zZXFvcHMgPSB7CisJLnN0YXJ0ID0gaW1hX21lYXN1cmVtZW50c19zdGFydCwKKwkubmV4dCA9IGltYV9tZWFzdXJlbWVudHNfbmV4dCwKKwkuc3RvcCA9IGltYV9tZWFzdXJlbWVudHNfc3RvcCwKKwkuc2hvdyA9IGltYV9tZWFzdXJlbWVudHNfc2hvdworfTsKKworc3RhdGljIGludCBpbWFfbWVhc3VyZW1lbnRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfbWVhc3VybWVudHNfc2Vxb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19vcHMgPSB7CisJLm9wZW4gPSBpbWFfbWVhc3VyZW1lbnRzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBpbWFfcHJpbnRfZGlnZXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdTggKmRpZ2VzdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJTUFfRElHRVNUX1NJWkU7IGkrKykKKwkJc2VxX3ByaW50ZihtLCAiJTAyeCIsICooZGlnZXN0ICsgaSkpOworfQorCit2b2lkIGltYV90ZW1wbGF0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZSwgZW51bSBpbWFfc2hvd190eXBlIHNob3cpCit7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhICplbnRyeSA9IGU7CisJaW50IG5hbWVsZW47CisKKwlzd2l0Y2ggKHNob3cpIHsKKwljYXNlIElNQV9TSE9XX0FTQ0lJOgorCQlpbWFfcHJpbnRfZGlnZXN0KG0sIGVudHJ5LT5kaWdlc3QpOworCQlzZXFfcHJpbnRmKG0sICIgJXNcbiIsIGVudHJ5LT5maWxlX25hbWUpOworCQlicmVhazsKKwljYXNlIElNQV9TSE9XX0JJTkFSWToKKwkJaW1hX3B1dGMobSwgZW50cnktPmRpZ2VzdCwgSU1BX0RJR0VTVF9TSVpFKTsKKworCQluYW1lbGVuID0gc3RybGVuKGVudHJ5LT5maWxlX25hbWUpOworCQlpbWFfcHV0YyhtLCAmbmFtZWxlbiwgc2l6ZW9mIG5hbWVsZW4pOworCQlpbWFfcHV0YyhtLCBlbnRyeS0+ZmlsZV9uYW1lLCBuYW1lbGVuKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIHByaW50IGluIGFzY2lpICovCitzdGF0aWMgaW50IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJLyogdGhlIGxpc3QgbmV2ZXIgc2hyaW5rcywgc28gd2UgZG9uJ3QgbmVlZCBhIGxvY2sgaGVyZSAqLworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlID0gdjsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplOworCisJLyogZ2V0IGVudHJ5ICovCisJZSA9IHFlLT5lbnRyeTsKKwlpZiAoZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKiAxc3Q6IFBDUiB1c2VkIChjb25maWcgb3B0aW9uKSAqLworCXNlcV9wcmludGYobSwgIiUyZCAiLCBDT05GSUdfSU1BX01FQVNVUkVfUENSX0lEWCk7CisKKwkvKiAybmQ6IFNIQTEgdGVtcGxhdGUgaGFzaCAqLworCWltYV9wcmludF9kaWdlc3QobSwgZS0+ZGlnZXN0KTsKKworCS8qIDN0aDogIHRlbXBsYXRlIG5hbWUgKi8KKwlzZXFfcHJpbnRmKG0sICIgJXMgIiwgZS0+dGVtcGxhdGVfbmFtZSk7CisKKwkvKiA0dGg6ICB0ZW1wbGF0ZSBzcGVjaWZpYyBkYXRhICovCisJaW1hX3RlbXBsYXRlX3Nob3cobSwgKHN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSAqKSZlLT50ZW1wbGF0ZSwKKwkJCSAgSU1BX1NIT1dfQVNDSUkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2Vxb3BzID0geworCS5zdGFydCA9IGltYV9tZWFzdXJlbWVudHNfc3RhcnQsCisJLm5leHQgPSBpbWFfbWVhc3VyZW1lbnRzX25leHQsCisJLnN0b3AgPSBpbWFfbWVhc3VyZW1lbnRzX3N0b3AsCisJLnNob3cgPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3Nob3cKK307CisKK3N0YXRpYyBpbnQgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX2FzY2lpX21lYXN1cmVtZW50c19zZXFvcHMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wcyA9IHsKKwkub3BlbiA9IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGltYV93cml0ZV9wb2xpY3koc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGRhdGFsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICpkYXRhOworCWludCByYzsKKworCWlmIChkYXRhbGVuID49IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCpwcG9zICE9IDApIHsKKwkJLyogTm8gcGFydGlhbCB3cml0ZXMuICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkYXRhID0ga21hbGxvYyhkYXRhbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBidWYsIGRhdGFsZW4pKSB7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJKihkYXRhICsgZGF0YWxlbikgPSAnXDAnOworCXJjID0gaW1hX3BhcnNlX2FkZF9ydWxlKGRhdGEpOworCWlmIChyYyA8IDApIHsKKwkJZGF0YWxlbiA9IC1FSU5WQUw7CisJCXZhbGlkX3BvbGljeSA9IDA7CisJfQorCisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIGRhdGFsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppbWFfZGlyOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50czsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphc2NpaV9ydW50aW1lX21lYXN1cmVtZW50czsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpydW50aW1lX21lYXN1cmVtZW50c19jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2aW9sYXRpb25zOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmltYV9wb2xpY3k7CisKK3N0YXRpYyBhdG9taWNfdCBwb2xpY3lfb3BlbmNvdW50ID0gQVRPTUlDX0lOSVQoMSk7CisvKgorICogaW1hX29wZW5fcG9saWN5OiBzZXF1ZW50aWFsaXplIGFjY2VzcyB0byB0aGUgcG9saWN5IGZpbGUKKyAqLworaW50IGltYV9vcGVuX3BvbGljeShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwb2xpY3lfb3BlbmNvdW50KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FQlVTWTsKK30KKworLyoKKyAqIGltYV9yZWxlYXNlX3BvbGljeSAtIHN0YXJ0IHVzaW5nIHRoZSBuZXcgbWVhc3VyZSBwb2xpY3kgcnVsZXMuCisgKgorICogSW5pdGlhbGx5LCBpbWFfbWVhc3VyZSBwb2ludHMgdG8gdGhlIGRlZmF1bHQgcG9saWN5IHJ1bGVzLCBub3cKKyAqIHBvaW50IHRvIHRoZSBuZXcgcG9saWN5IHJ1bGVzLCBhbmQgcmVtb3ZlIHRoZSBzZWN1cml0eWZzIHBvbGljeSBmaWxlLAorICogYXNzdW1pbmcgYSB2YWxpZCBwb2xpY3kuCisgKi8KK3N0YXRpYyBpbnQgaW1hX3JlbGVhc2VfcG9saWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICghdmFsaWRfcG9saWN5KSB7CisJCWltYV9kZWxldGVfcnVsZXMoKTsKKwkJdmFsaWRfcG9saWN5ID0gMTsKKwkJYXRvbWljX3NldCgmcG9saWN5X29wZW5jb3VudCwgMSk7CisJCXJldHVybiAwOworCX0KKwlpbWFfdXBkYXRlX3BvbGljeSgpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9wb2xpY3kpOworCWltYV9wb2xpY3kgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZV9wb2xpY3lfb3BzID0geworCS5vcGVuID0gaW1hX29wZW5fcG9saWN5LAorCS53cml0ZSA9IGltYV93cml0ZV9wb2xpY3ksCisJLnJlbGVhc2UgPSBpbWFfcmVsZWFzZV9wb2xpY3kKK307CisKK2ludCBpbWFfZnNfaW5pdCh2b2lkKQoreworCWltYV9kaXIgPSBzZWN1cml0eWZzX2NyZWF0ZV9kaXIoImltYSIsIE5VTEwpOworCWlmIChJU19FUlIoaW1hX2RpcikpCisJCXJldHVybiAtMTsKKworCWJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoImJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyIsCisJCQkJICAgU19JUlVTUiB8IFNfSVJHUlAsIGltYV9kaXIsIE5VTEwsCisJCQkJICAgJmltYV9tZWFzdXJlbWVudHNfb3BzKTsKKwlpZiAoSVNfRVJSKGJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cykpCisJCWdvdG8gb3V0OworCisJYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyIsCisJCQkJICAgU19JUlVTUiB8IFNfSVJHUlAsIGltYV9kaXIsIE5VTEwsCisJCQkJICAgJmltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzKTsKKwlpZiAoSVNfRVJSKGFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzKSkKKwkJZ290byBvdXQ7CisKKwlydW50aW1lX21lYXN1cmVtZW50c19jb3VudCA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoInJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50IiwKKwkJCQkgICBTX0lSVVNSIHwgU19JUkdSUCwgaW1hX2RpciwgTlVMTCwKKwkJCQkgICAmaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMpOworCWlmIChJU19FUlIocnVudGltZV9tZWFzdXJlbWVudHNfY291bnQpKQorCQlnb3RvIG91dDsKKworCXZpb2xhdGlvbnMgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJ2aW9sYXRpb25zIiwgU19JUlVTUiB8IFNfSVJHUlAsCisJCQkJICAgaW1hX2RpciwgTlVMTCwgJmltYV9odGFibGVfdmlvbGF0aW9uc19vcHMpOworCWlmIChJU19FUlIodmlvbGF0aW9ucykpCisJCWdvdG8gb3V0OworCisJaW1hX3BvbGljeSA9IHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoInBvbGljeSIsCisJCQkJCSAgICBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVdVU1IsCisJCQkJCSAgICBpbWFfZGlyLCBOVUxMLAorCQkJCQkgICAgJmltYV9tZWFzdXJlX3BvbGljeV9vcHMpOworCWlmIChJU19FUlIoaW1hX3BvbGljeSkpCisJCWdvdG8gb3V0OworCisJcmV0dXJuIDA7CitvdXQ6CisJc2VjdXJpdHlmc19yZW1vdmUocnVudGltZV9tZWFzdXJlbWVudHNfY291bnQpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9kaXIpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9wb2xpY3kpOworCXJldHVybiAtMTsKK30KKwordm9pZCBfX2V4aXQgaW1hX2ZzX2NsZWFudXAodm9pZCkKK3sKKwlzZWN1cml0eWZzX3JlbW92ZSh2aW9sYXRpb25zKTsKKwlzZWN1cml0eWZzX3JlbW92ZShydW50aW1lX21lYXN1cmVtZW50c19jb3VudCk7CisJc2VjdXJpdHlmc19yZW1vdmUoYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX2Rpcik7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX3BvbGljeSk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3OWYxZQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2lpbnQuYworICogCS0gaW1wbGVtZW50cyB0aGUgSU1BIGhvb2tzOiBpbWFfaW5vZGVfYWxsb2MsIGltYV9pbm9kZV9mcmVlCisgKgktIGNhY2hlIGludGVncml0eSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqCSAgdXNpbmcgYSByYWRpeCB0cmVlLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CisjaW5jbHVkZSAiaW1hLmgiCisKKyNkZWZpbmUgaW1hX2lpbnRfZGVsZXRlIGltYV9pbm9kZV9mcmVlCisKK1JBRElYX1RSRUUoaW1hX2lpbnRfc3RvcmUsIEdGUF9BVE9NSUMpOworREVGSU5FX1NQSU5MT0NLKGltYV9paW50X2xvY2spOworCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlpbnRfY2FjaGUgX19yZWFkX21vc3RseTsKKworLyogaW1hX2lpbnRfZmluZF9nZXQgLSByZXR1cm4gdGhlIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKgorICogaW1hX2lpbnRfZmluZF9nZXQgZ2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgaWludC4gQ2FsbGVyIG11c3QKKyAqIHJlbWVtYmVyIHRvIHB1dCB0aGUgaWludCByZWZlcmVuY2UuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9nZXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWludCA9IHJhZGl4X3RyZWVfbG9va3VwKCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUpOworCWlmICghaWludCkKKwkJZ290byBvdXQ7CisJa3JlZl9nZXQoJmlpbnQtPnJlZmNvdW50KTsKK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gaWludDsKK30KKworLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaWludCBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlCisgKiBmcm9tIHRoZSBpaW50X2NhY2hlIHNsYWIsIGluaXRpYWxpemUgdGhlIGlpbnQsIGFuZAorICogaW5zZXJ0IGl0IGludG8gdGhlIHJhZGl4IHRyZWUuCisgKgorICogT24gc3VjY2VzcyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpaW50OyBvbiBmYWlsdXJlIHJldHVybiBOVUxMLgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2luc2VydChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IE5VTEw7CisJaW50IHJjID0gMDsKKworCWlmICghaW1hX2luaXRpYWxpemVkKQorCQlyZXR1cm4gaWludDsKKwlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiBpaW50OworCisJcmMgPSByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2soJmltYV9paW50X2xvY2spOworCXJjID0gcmFkaXhfdHJlZV9pbnNlcnQoJmltYV9paW50X3N0b3JlLCAodW5zaWduZWQgbG9uZylpbm9kZSwgaWludCk7CisJc3Bpbl91bmxvY2soJmltYV9paW50X2xvY2spOworb3V0OgorCWlmIChyYyA8IDApIHsKKwkJa21lbV9jYWNoZV9mcmVlKGlpbnRfY2FjaGUsIGlpbnQpOworCQlpZiAocmMgPT0gLUVFWElTVCkgeworCQkJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKKwkJCWlpbnQgPSByYWRpeF90cmVlX2xvb2t1cCgmaW1hX2lpbnRfc3RvcmUsCisJCQkJCQkgKHVuc2lnbmVkIGxvbmcpaW5vZGUpOworCQkJc3Bpbl91bmxvY2soJmltYV9paW50X2xvY2spOworCQl9IGVsc2UKKwkJCWlpbnQgPSBOVUxMOworCX0KKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJcmV0dXJuIGlpbnQ7Cit9CisKKy8qKgorICogaW1hX2lub2RlX2FsbG9jIC0gYWxsb2NhdGUgYW4gaWludCBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqIEBpbm9kZTogcG9pbnRlciB0byB0aGUgaW5vZGUKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlpaW50ID0gaW1hX2lpbnRfaW5zZXJ0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKiBpbWFfaWludF9maW5kX2luc2VydF9nZXQgLSBnZXQgdGhlIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKgorICogTW9zdCBpbnNlcnRpb25zIGFyZSBkb25lIGF0IGlub2RlX2FsbG9jLCBleGNlcHQgdGhvc2UgYWxsb2NhdGVkCisgKiBiZWZvcmUgbGF0ZV9pbml0Y2FsbC4gV2hlbiB0aGUgaWludCBkb2VzIG5vdCBleGlzdCwgYWxsb2NhdGUgaXQsCisgKiBpbml0aWFsaXplIGFuZCBpbnNlcnQgaXQsIGFuZCBpbmNyZW1lbnQgdGhlIGlpbnQgcmVmY291bnQuCisgKgorICogKENhbid0IGluaXRpYWxpemUgYXQgc2VjdXJpdHlfaW5pdGNhbGwgYmVmb3JlIGFueSBpbm9kZXMgYXJlCisgKiBhbGxvY2F0ZWQsIGdvdCB0byB3YWl0IGF0IGxlYXN0IHVudGlsIHByb2NfaW5pdC4pCisgKgorICogIFJldHVybiB0aGUgaWludC4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2luc2VydF9nZXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBOVUxMOworCisJaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKKwlpZiAoaWludCkKKwkJcmV0dXJuIGlpbnQ7CisKKwlpaW50ID0gaW1hX2lpbnRfaW5zZXJ0KGlub2RlKTsKKwlpZiAoaWludCkKKwkJa3JlZl9nZXQoJmlpbnQtPnJlZmNvdW50KTsKKworCXJldHVybiBpaW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KTsKKworLyogaWludF9mcmVlIC0gY2FsbGVkIHdoZW4gdGhlIGlpbnQgcmVmY291bnQgZ29lcyB0byB6ZXJvICovCit2b2lkIGlpbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGltYV9paW50X2NhY2hlLAorCQkJCQkJICAgcmVmY291bnQpOworCWlpbnQtPnZlcnNpb24gPSAwOworCWlpbnQtPmZsYWdzID0gMFVMOworCWlmIChpaW50LT5yZWFkY291bnQgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVhZGNvdW50OiAlbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGlpbnQtPnJlYWRjb3VudCk7CisJCWlpbnQtPnJlYWRjb3VudCA9IDA7CisJfQorCWlmIChpaW50LT53cml0ZWNvdW50ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHdyaXRlY291bnQ6ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAgaWludC0+d3JpdGVjb3VudCk7CisJCWlpbnQtPndyaXRlY291bnQgPSAwOworCX0KKwlpZiAoaWludC0+b3BlbmNvdW50ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wZW5jb3VudDogJWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBpaW50LT5vcGVuY291bnQpOworCQlpaW50LT5vcGVuY291bnQgPSAwOworCX0KKwlrcmVmX3NldCgmaWludC0+cmVmY291bnQsIDEpOworCWttZW1fY2FjaGVfZnJlZShpaW50X2NhY2hlLCBpaW50KTsKK30KKwordm9pZCBpaW50X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gY29udGFpbmVyX29mKHJjdV9oZWFkLAorCQkJCQkJICAgc3RydWN0IGltYV9paW50X2NhY2hlLCByY3UpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKK30KKworLyoqCisgKiBpbWFfaWludF9kZWxldGUgLSBjYWxsZWQgb24gaW50ZWdyaXR5X2lub2RlX2ZyZWUKKyAqIEBpbm9kZTogcG9pbnRlciB0byB0aGUgaW5vZGUKKyAqCisgKiBGcmVlIHRoZSBpbnRlZ3JpdHkgaW5mb3JtYXRpb24oaWludCkgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlLgorICovCit2b2lkIGltYV9paW50X2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlpaW50ID0gcmFkaXhfdHJlZV9kZWxldGUoJmltYV9paW50X3N0b3JlLCAodW5zaWduZWQgbG9uZylpbm9kZSk7CisJc3Bpbl91bmxvY2soJmltYV9paW50X2xvY2spOworCWlmIChpaW50KQorCQljYWxsX3JjdSgmaWludC0+cmN1LCBpaW50X3JjdV9mcmVlKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBmb287CisKKwltZW1zZXQoaWludCwgMCwgc2l6ZW9mICppaW50KTsKKwlpaW50LT52ZXJzaW9uID0gMDsKKwlpaW50LT5mbGFncyA9IDBVTDsKKwltdXRleF9pbml0KCZpaW50LT5tdXRleCk7CisJaWludC0+cmVhZGNvdW50ID0gMDsKKwlpaW50LT53cml0ZWNvdW50ID0gMDsKKwlpaW50LT5vcGVuY291bnQgPSAwOworCWtyZWZfc2V0KCZpaW50LT5yZWZjb3VudCwgMSk7Cit9CisKK3ZvaWQgaW1hX2lpbnRjYWNoZV9pbml0KHZvaWQpCit7CisJaWludF9jYWNoZSA9CisJICAgIGttZW1fY2FjaGVfY3JlYXRlKCJpaW50X2NhY2hlIiwgc2l6ZW9mKHN0cnVjdCBpbWFfaWludF9jYWNoZSksIDAsCisJCQkgICAgICBTTEFCX1BBTklDLCBpbml0X29uY2UpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaW5pdC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMGJiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9pbml0LmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogUmVpbmVyIFNhaWxlciAgICAgIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgorICogTWltaSBab2hhciAgICAgICAgIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfaW5pdC5jCisgKiAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSAiaW1hLmgiCisKKy8qIG5hbWUgZm9yIGJvb3QgYWdncmVnYXRlIGVudHJ5ICovCitzdGF0aWMgY29uc3QgY2hhciAqYm9vdF9hZ2dyZWdhdGVfbmFtZSA9ICJib290X2FnZ3JlZ2F0ZSI7CitpbnQgaW1hX3VzZWRfY2hpcDsKKworLyogQWRkIHRoZSBib290IGFnZ3JlZ2F0ZSB0byB0aGUgSU1BIG1lYXN1cmVtZW50IGxpc3QgYW5kIGV4dGVuZAorICogdGhlIFBDUiByZWdpc3Rlci4KKyAqCisgKiBDYWxjdWxhdGUgdGhlIGJvb3QgYWdncmVnYXRlLCBhIFNIQTEgb3ZlciB0cG0gcmVnaXN0ZXJzIDAtNywKKyAqIGFzc3VtaW5nIGEgVFBNIGNoaXAgZXhpc3RzLCBhbmQgemVyb2VzIGlmIHRoZSBUUE0gY2hpcCBkb2VzIG5vdAorICogZXhpc3QuICBBZGQgdGhlIGJvb3QgYWdncmVnYXRlIG1lYXN1cmVtZW50IHRvIHRoZSBtZWFzdXJlbWVudAorICogbGlzdCBhbmQgZXh0ZW5kIHRoZSBQQ1IgcmVnaXN0ZXIuCisgKgorICogSWYgYSB0cG0gY2hpcCBkb2VzIG5vdCBleGlzdCwgaW5kaWNhdGUgdGhlIGNvcmUgcm9vdCBvZiB0cnVzdCBpcworICogbm90IGhhcmR3YXJlIGJhc2VkIGJ5IGludmFsaWRhdGluZyB0aGUgYWdncmVnYXRlIFBDUiB2YWx1ZS4KKyAqIChUaGUgYWdncmVnYXRlIFBDUiB2YWx1ZSBpcyBpbnZhbGlkYXRlZCBieSBhZGRpbmcgb25lIHZhbHVlIHRvCisgKiB0aGUgbWVhc3VyZW1lbnQgbGlzdCBhbmQgZXh0ZW5kaW5nIHRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlIHdpdGgKKyAqIGEgZGlmZmVyZW50IHZhbHVlLikgVmlvbGF0aW9ucyBhZGQgYSB6ZXJvIGVudHJ5IHRvIHRoZSBtZWFzdXJlbWVudAorICogbGlzdCBhbmQgZXh0ZW5kIHRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlIHdpdGggZmYuLi5mZidzLgorICovCitzdGF0aWMgdm9pZCBpbWFfYWRkX2Jvb3RfYWdncmVnYXRlKHZvaWQpCit7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7CisJY29uc3QgY2hhciAqb3AgPSAiYWRkX2Jvb3RfYWdncmVnYXRlIjsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJFTk9NRU0iOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCWludCB2aW9sYXRpb24gPSAxOworCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGVycl9vdXQ7CisKKwltZW1zZXQoJmVudHJ5LT50ZW1wbGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSkpOworCXN0cm5jcHkoZW50cnktPnRlbXBsYXRlLmZpbGVfbmFtZSwgYm9vdF9hZ2dyZWdhdGVfbmFtZSwKKwkJSU1BX0VWRU5UX05BTUVfTEVOX01BWCk7CisJaWYgKGltYV91c2VkX2NoaXApIHsKKwkJdmlvbGF0aW9uID0gMDsKKwkJcmVzdWx0ID0gaW1hX2NhbGNfYm9vdF9hZ2dyZWdhdGUoZW50cnktPnRlbXBsYXRlLmRpZ2VzdCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlhdWRpdF9jYXVzZSA9ICJoYXNoaW5nX2Vycm9yIjsKKwkJCWtmcmVlKGVudHJ5KTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCX0KKwlyZXN1bHQgPSBpbWFfc3RvcmVfdGVtcGxhdGUoZW50cnksIHZpb2xhdGlvbiwgTlVMTCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWtmcmVlKGVudHJ5KTsKKwlyZXR1cm47CitlcnJfb3V0OgorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgTlVMTCwgYm9vdF9hZ2dyZWdhdGVfbmFtZSwgb3AsCisJCQkgICAgYXVkaXRfY2F1c2UsIHJlc3VsdCwgMCk7Cit9CisKK2ludCBpbWFfaW5pdCh2b2lkKQoreworCXU4IHBjcl9pW0lNQV9ESUdFU1RfU0laRV07CisJaW50IHJjOworCisJaW1hX3VzZWRfY2hpcCA9IDA7CisJcmMgPSB0cG1fcGNyX3JlYWQoVFBNX0FOWV9OVU0sIDAsIHBjcl9pKTsKKwlpZiAocmMgPT0gMCkKKwkJaW1hX3VzZWRfY2hpcCA9IDE7CisKKwlpZiAoIWltYV91c2VkX2NoaXApCisJCXByX2luZm8oIk5vIFRQTSBjaGlwIGZvdW5kLCBhY3RpdmF0aW5nIFRQTS1ieXBhc3MhXG4iKTsKKworCWltYV9hZGRfYm9vdF9hZ2dyZWdhdGUoKTsJLyogYm9vdCBhZ2dyZWdhdGUgbXVzdCBiZSBmaXJzdCBlbnRyeSAqLworCWltYV9pbml0X3BvbGljeSgpOworCisJcmV0dXJuIGltYV9mc19pbml0KCk7Cit9CisKK3ZvaWQgX19leGl0IGltYV9jbGVhbnVwKHZvaWQpCit7CisJaW1hX2ZzX2NsZWFudXAoKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGU3MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBTZXJnZSBIYWxseW4gPHNlcnVlQHVzLmlibS5jb20+CisgKiBLeWxlbmUgSGFsbCA8a3lsZW5lQHVzLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfbWFpbi5jCisgKiAgICAgICAgICAgICBpbXBsZW1lbnRzIHRoZSBJTUEgaG9va3M6IGltYV9icHJtX2NoZWNrLCBpbWFfZmlsZV9tbWFwLAorICogICAgICAgICAgICAgYW5kIGltYV9wYXRoX2NoZWNrLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKworI2luY2x1ZGUgImltYS5oIgorCitpbnQgaW1hX2luaXRpYWxpemVkOworCitjaGFyICppbWFfaGFzaCA9ICJzaGExIjsKK3N0YXRpYyBpbnQgX19pbml0IGhhc2hfc2V0dXAoY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKm9wID0gImhhc2hfc2V0dXAiOworCWNvbnN0IGNoYXIgKmhhc2ggPSAic2hhMSI7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGF1ZGl0X2luZm8gPSAwOworCisJaWYgKHN0cm5jbXAoc3RyLCAibWQ1IiwgMykgPT0gMCkgeworCQloYXNoID0gIm1kNSI7CisJCWltYV9oYXNoID0gc3RyOworCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJzaGExIiwgNCkgIT0gMCkgeworCQloYXNoID0gImludmFsaWRfaGFzaF90eXBlIjsKKwkJcmVzdWx0ID0gMTsKKwl9CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfSEFTSCwgTlVMTCwgTlVMTCwgb3AsIGhhc2gsCisJCQkgICAgcmVzdWx0LCBhdWRpdF9pbmZvKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImltYV9oYXNoPSIsIGhhc2hfc2V0dXApOworCisvKioKKyAqIGltYV9maWxlX2ZyZWUgLSBjYWxsZWQgb24gX19mcHV0KCkKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlIGJlaW5nIGZyZWVkCisgKgorICogRmxhZyBmaWxlcyB0aGF0IGNoYW5nZWQsIGJhc2VkIG9uIGlfdmVyc2lvbjsKKyAqIGFuZCBkZWNyZW1lbnQgdGhlIGlpbnQgcmVhZGNvdW50L3dyaXRlY291bnQuCisgKi8KK3ZvaWQgaW1hX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybjsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCWlmIChpaW50LT5vcGVuY291bnQgPD0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXM6ICVzIG9wZW4vZnJlZSBpbWJhbGFuY2UgKHI6JWxkIHc6JWxkIG86JWxkIGY6JWxkKVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkgICAgICAgaWludC0+cmVhZGNvdW50LCBpaW50LT53cml0ZWNvdW50LAorCQkgICAgICAgaWludC0+b3BlbmNvdW50LCBhdG9taWNfbG9uZ19yZWFkKCZmaWxlLT5mX2NvdW50KSk7CisJCWlmICghKGlpbnQtPmZsYWdzICYgSU1BX0lJTlRfRFVNUF9TVEFDSykpIHsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCWlpbnQtPmZsYWdzIHw9IElNQV9JSU5UX0RVTVBfU1RBQ0s7CisJCX0KKwl9CisJaWludC0+b3BlbmNvdW50LS07CisKKwlpZiAoKGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSA9PSBGTU9ERV9SRUFEKQorCQlpaW50LT5yZWFkY291bnQtLTsKKworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQlpaW50LT53cml0ZWNvdW50LS07CisJCWlmIChpaW50LT53cml0ZWNvdW50ID09IDApIHsKKwkJCWlmIChpaW50LT52ZXJzaW9uICE9IGlub2RlLT5pX3ZlcnNpb24pCisJCQkJaWludC0+ZmxhZ3MgJj0gfklNQV9NRUFTVVJFRDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7Cit9CisKKy8qIGltYV9yZWFkX3dyaXRlX2NoZWNrIC0gcmVmbGVjdCBwb3NzaWJsZSByZWFkaW5nL3dyaXRpbmcgZXJyb3JzIGluIHRoZSBQQ1IuCisgKgorICogV2hlbiBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZCwgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIHRoZSBmaWxlIGNvdWxkIGNoYW5nZSwgcmVzdWx0aW5nIGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KKyAqCisgKiBPcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGUsIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwgcmVzdWx0cworICogaW4gYSB0aW1lIG9mIG1lYXN1cmUsIHRpbWUgb2YgdXNlIChUb01Ub1UpIGVycm9yLgorICoKKyAqIEluIGVpdGhlciBjYXNlIGludmFsaWRhdGUgdGhlIFBDUi4KKyAqLworZW51bSBpaW50X3Bjcl9lcnJvciB7IFRPTVRPVSwgT1BFTl9XUklURVJTIH07CitzdGF0aWMgdm9pZCBpbWFfcmVhZF93cml0ZV9jaGVjayhlbnVtIGlpbnRfcGNyX2Vycm9yIGVycm9yLAorCQkJCSBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsCisJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQoreworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIFRPTVRPVToKKwkJaWYgKGlpbnQtPnJlYWRjb3VudCA+IDApCisJCQlpbWFfYWRkX3Zpb2xhdGlvbihpbm9kZSwgZmlsZW5hbWUsICJpbnZhbGlkX3BjciIsCisJCQkJCSAgIlRvTVRvVSIpOworCQlicmVhazsKKwljYXNlIE9QRU5fV1JJVEVSUzoKKwkJaWYgKGlpbnQtPndyaXRlY291bnQgPiAwKQorCQkJaW1hX2FkZF92aW9sYXRpb24oaW5vZGUsIGZpbGVuYW1lLCAiaW52YWxpZF9wY3IiLAorCQkJCQkgICJvcGVuX3dyaXRlcnMiKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9wYXRoX21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCit7CisJaW50IHJjID0gMDsKKworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJcHJfaW5mbygiJXMgZGVudHJ5X29wZW4gZmFpbGVkXG4iLCBmaWxlbmFtZSk7CisJCXJldHVybiByYzsKKwl9CisJaWludC0+b3BlbmNvdW50Kys7CisJaWludC0+cmVhZGNvdW50Kys7CisKKwlyYyA9IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KGlpbnQsIGZpbGUpOworCWlmICghcmMpCisJCWltYV9zdG9yZV9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBmaWxlbmFtZSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGltYV9wYXRoX2NoZWNrIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgorICogQHBhdGg6IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgcGF0aCB0byBiZSBtZWFzdXJlZAorICogQG1hc2s6IGNvbnRhaW5zIE1BWV9SRUFELCBNQVlfV1JJVEUgb3IgTUFZX0VYRUNVVEUKKyAqCisgKiBNZWFzdXJlIHRoZSBmaWxlIGJlaW5nIG9wZW4gZm9yIHJlYWRvbmx5LCBiYXNlZCBvbiB0aGUKKyAqIGltYV9tdXN0X21lYXN1cmUoKSBwb2xpY3kgZGVjaXNpb24uCisgKgorICogS2VlcCByZWFkL3dyaXRlIGNvdW50ZXJzIGZvciBhbGwgZmlsZXMsIGJ1dCBvbmx5CisgKiBpbnZhbGlkYXRlIHRoZSBQQ1IgZm9yIG1lYXN1cmVkIGZpbGVzOgorICogCS0gT3BlbmluZyBhIGZpbGUgZm9yIHdyaXRlIHdoZW4gYWxyZWFkeSBvcGVuIGZvciByZWFkLAorICoJICByZXN1bHRzIGluIGEgdGltZSBvZiBtZWFzdXJlLCB0aW1lIG9mIHVzZSAoVG9NVG9VKSBlcnJvci4KKyAqCS0gT3BlbmluZyBhIGZpbGUgZm9yIHJlYWQgd2hlbiBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogCSAgY291bGQgcmVzdWx0IGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiAoQmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgYXBwcmFpc2VfbWVhc3VyZW1lbnQoKS4pCisgKi8KK2ludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOworCWludCByYzsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCWlpbnQtPm9wZW5jb3VudCsrOworCWlmICgobWFzayAmIE1BWV9XUklURSkgfHwgKG1hc2sgPT0gMCkpCisJCWlpbnQtPndyaXRlY291bnQrKzsKKwllbHNlIGlmIChtYXNrICYgKE1BWV9SRUFEIHwgTUFZX0VYRUMpKQorCQlpaW50LT5yZWFkY291bnQrKzsKKworCXJjID0gaW1hX211c3RfbWVhc3VyZShpaW50LCBpbm9kZSwgTUFZX1JFQUQsIFBBVEhfQ0hFQ0spOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKChtYXNrICYgTUFZX1dSSVRFKSB8fCAobWFzayA9PSAwKSkKKwkJaW1hX3JlYWRfd3JpdGVfY2hlY2soVE9NVE9VLCBpaW50LCBpbm9kZSwKKwkJCQkgICAgIHBhdGgtPmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCisJaWYgKChtYXNrICYgKE1BWV9XUklURSB8IE1BWV9SRUFEIHwgTUFZX0VYRUMpKSAhPSBNQVlfUkVBRCkKKwkJZ290byBvdXQ7CisKKwlpbWFfcmVhZF93cml0ZV9jaGVjayhPUEVOX1dSSVRFUlMsIGlpbnQsIGlub2RlLAorCQkJICAgICBwYXRoLT5kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlpZiAoIShpaW50LT5mbGFncyAmIElNQV9NRUFTVVJFRCkpIHsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChwYXRoLT5kZW50cnkpOworCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IG1udGdldChwYXRoLT5tbnQpOworCisJCWZpbGUgPSBkZW50cnlfb3BlbihkZW50cnksIG1udCwgT19SRE9OTFksIGN1cnJlbnQtPmNyZWQpOworCQlyYyA9IGdldF9wYXRoX21lYXN1cmVtZW50KGlpbnQsIGZpbGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKKwlpZiAoZmlsZSkKKwkJZnB1dChmaWxlKTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19tZWFzdXJlbWVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgICAgaW50IG1hc2ssIGludCBmdW5jdGlvbikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCWludCByYzsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCXJjID0gaW1hX211c3RfbWVhc3VyZShpaW50LCBpbm9kZSwgbWFzaywgZnVuY3Rpb24pOworCWlmIChyYyAhPSAwKQorCQlnb3RvIG91dDsKKworCXJjID0gaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoaWludCwgZmlsZSk7CisJaWYgKCFyYykKKwkJaW1hX3N0b3JlX21lYXN1cmVtZW50KGlpbnQsIGZpbGUsIGZpbGVuYW1lKTsKK291dDoKKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBvcGVuY291bnRfZ2V0KHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuOworCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuOworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlpaW50LT5vcGVuY291bnQrKzsKKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKK30KKworLyoqCisgKiBpbWFfZmlsZV9tbWFwIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgorICogQGZpbGU6IHBvaW50ZXIgdG8gdGhlIGZpbGUgdG8gYmUgbWVhc3VyZWQgKE1heSBiZSBOVUxMKQorICogQHByb3Q6IGNvbnRhaW5zIHRoZSBwcm90ZWN0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBrZXJuZWwuCisgKgorICogTWVhc3VyZSBmaWxlcyBiZWluZyBtbWFwcGVkIGV4ZWN1dGFibGUgYmFzZWQgb24gdGhlIGltYV9tdXN0X21lYXN1cmUoKQorICogcG9saWN5IGRlY2lzaW9uLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIChCYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiBhcHByYWlzZV9tZWFzdXJlbWVudCgpLikKKyAqLworaW50IGltYV9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIWZpbGUpCisJCXJldHVybiAwOworCWlmIChwcm90ICYgUFJPVF9FWEVDKQorCQlyYyA9IHByb2Nlc3NfbWVhc3VyZW1lbnQoZmlsZSwgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCQkgTUFZX0VYRUMsIEZJTEVfTU1BUCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbWFfc2htX2NoZWNrIC0gSVBDIHNobSBhbmQgc2htYXQgY3JlYXRlL2ZwdXQgYSBmaWxlCisgKgorICogTWFpbnRhaW4gdGhlIG9wZW5jb3VudCBmb3IgdGhlc2UgZmlsZXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeQorICogaW1iYWxhbmNlIG1lc3NhZ2VzLgorICovCit2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpCit7CisJb3BlbmNvdW50X2dldChmaWxlKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogaW1hX2Jwcm1fY2hlY2sgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCisgKiBAYnBybTogY29udGFpbnMgdGhlIGxpbnV4X2JpbnBybSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgT1MgcHJvdGVjdHMgYWdhaW5zdCBhbiBleGVjdXRhYmxlIGZpbGUsIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUsCisgKiBmcm9tIGJlaW5nIGV4ZWN1dGVkIGluIGRlbnlfd3JpdGVfYWNjZXNzKCkgYW5kIGFuIGV4ZWN1dGFibGUgZmlsZSwKKyAqIGFscmVhZHkgb3BlbiBmb3IgZXhlY3V0ZSwgZnJvbSBiZWluZyBtb2RpZmllZCBpbiBnZXRfd3JpdGVfYWNjZXNzKCkuCisgKiBTbyB3ZSBjYW4gYmUgY2VydGFpbiB0aGF0IHdoYXQgd2UgdmVyaWZ5IGFuZCBtZWFzdXJlIGhlcmUgaXMgYWN0dWFsbHkKKyAqIHdoYXQgaXMgYmVpbmcgZXhlY3V0ZWQuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogKEJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIGFwcHJhaXNlX21lYXN1cmVtZW50KCkuKQorICovCitpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHByb2Nlc3NfbWVhc3VyZW1lbnQoYnBybS0+ZmlsZSwgYnBybS0+ZmlsZW5hbWUsCisJCQkJIE1BWV9FWEVDLCBCUFJNX0NIRUNLKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9pbWEodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpbWFfaWludGNhY2hlX2luaXQoKTsKKwllcnJvciA9IGltYV9pbml0KCk7CisJaW1hX2luaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2ltYSh2b2lkKQoreworCWltYV9jbGVhbnVwKCk7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW5pdF9pbWEpOwkvKiBTdGFydCBJTUEgYWZ0ZXIgdGhlIFRQTSBpcyBhdmFpbGFibGUgKi8KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MjkxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYwpAQCAtMCwwICsxLDQxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBpbWFfcG9saWN5LmMKKyAqIAktIGluaXRpYWxpemUgZGVmYXVsdCBtZWFzdXJlIHBvbGljeSBydWxlcworICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKKworLyogZmxhZ3MgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSU1BX0ZVTkMgCTB4MDAwMQorI2RlZmluZSBJTUFfTUFTSyAJMHgwMDAyCisjZGVmaW5lIElNQV9GU01BR0lDCTB4MDAwNAorI2RlZmluZSBJTUFfVUlECQkweDAwMDgKKworZW51bSBpbWFfYWN0aW9uIHsgVU5LTk9XTiA9IC0xLCBET05UX01FQVNVUkUgPSAwLCBNRUFTVVJFIH07CisKKyNkZWZpbmUgTUFYX0xTTV9SVUxFUyA2CitlbnVtIGxzbV9ydWxlX3R5cGVzIHsgTFNNX09CSl9VU0VSLCBMU01fT0JKX1JPTEUsIExTTV9PQkpfVFlQRSwKKwlMU01fU1VCSl9VU0VSLCBMU01fU1VCSl9ST0xFLCBMU01fU1VCSl9UWVBFCit9OworCitzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWVudW0gaW1hX2FjdGlvbiBhY3Rpb247CisJdW5zaWduZWQgaW50IGZsYWdzOworCWVudW0gaW1hX2hvb2tzIGZ1bmM7CisJaW50IG1hc2s7CisJdW5zaWduZWQgbG9uZyBmc21hZ2ljOworCXVpZF90IHVpZDsKKwlzdHJ1Y3QgeworCQl2b2lkICpydWxlOwkvKiBMU00gZmlsZSBtZXRhZGF0YSBzcGVjaWZpYyAqLworCQlpbnQgdHlwZTsJLyogYXVkaXQgdHlwZSAqLworCX0gbHNtW01BWF9MU01fUlVMRVNdOworfTsKKworLyogV2l0aG91dCBMU00gc3BlY2lmaWMga25vd2xlZGdlLCB0aGUgZGVmYXVsdCBwb2xpY3kgY2FuIG9ubHkgYmUKKyAqIHdyaXR0ZW4gaW4gdGVybXMgb2YgLmFjdGlvbiwgLmZ1bmMsIC5tYXNrLCAuZnNtYWdpYywgYW5kIC51aWQKKyAqLworc3RhdGljIHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5IGRlZmF1bHRfcnVsZXNbXSA9IHsKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFBST0NfU1VQRVJfTUFHSUMsCisJIC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFNZU0ZTX01BR0lDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IERFQlVHRlNfTUFHSUMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gVE1QRlNfTUFHSUMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gU0VDVVJJVFlGU19NQUdJQywKKwkgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gMHhGOTdDRkY4QywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gRklMRV9NTUFQLC5tYXNrID0gTUFZX0VYRUMsCisJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0t9LAorCXsuYWN0aW9uID0gTUVBU1VSRSwuZnVuYyA9IEJQUk1fQ0hFQ0ssLm1hc2sgPSBNQVlfRVhFQywKKwkgLmZsYWdzID0gSU1BX0ZVTkMgfCBJTUFfTUFTS30sCisJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gUEFUSF9DSEVDSywubWFzayA9IE1BWV9SRUFELC51aWQgPSAwLAorCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLIHwgSU1BX1VJRH0KK307CisKK3N0YXRpYyBMSVNUX0hFQUQobWVhc3VyZV9kZWZhdWx0X3J1bGVzKTsKK3N0YXRpYyBMSVNUX0hFQUQobWVhc3VyZV9wb2xpY3lfcnVsZXMpOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmltYV9tZWFzdXJlOworCitzdGF0aWMgREVGSU5FX01VVEVYKGltYV9tZWFzdXJlX211dGV4KTsKKworLyoqCisgKiBpbWFfbWF0Y2hfcnVsZXMgLSBkZXRlcm1pbmUgd2hldGhlciBhbiBpbm9kZSBtYXRjaGVzIHRoZSBtZWFzdXJlIHJ1bGUuCisgKiBAcnVsZTogYSBwb2ludGVyIHRvIGEgcnVsZQorICogQGlub2RlOiBhIHBvaW50ZXIgdG8gYW4gaW5vZGUKKyAqIEBmdW5jOiBMSU0gaG9vayBpZGVudGlmaWVyCisgKiBAbWFzazogcmVxdWVzdGVkIGFjdGlvbiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfQVBQRU5EIHwgTUFZX0VYRUMpCisgKgorICogUmV0dXJucyB0cnVlIG9uIHJ1bGUgbWF0Y2gsIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBib29sIGltYV9tYXRjaF9ydWxlcyhzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqcnVsZSwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGltYV9ob29rcyBmdW5jLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJaW50IGk7CisKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX0ZVTkMpICYmIHJ1bGUtPmZ1bmMgIT0gZnVuYykKKwkJcmV0dXJuIGZhbHNlOworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfTUFTSykgJiYgcnVsZS0+bWFzayAhPSBtYXNrKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKChydWxlLT5mbGFncyAmIElNQV9GU01BR0lDKQorCSAgICAmJiBydWxlLT5mc21hZ2ljICE9IGlub2RlLT5pX3NiLT5zX21hZ2ljKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKChydWxlLT5mbGFncyAmIElNQV9VSUQpICYmIHJ1bGUtPnVpZCAhPSB0c2stPmNyZWQtPnVpZCkKKwkJcmV0dXJuIGZhbHNlOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTFNNX1JVTEVTOyBpKyspIHsKKwkJaW50IHJjOworCQl1MzIgb3NpZCwgc2lkOworCisJCWlmICghcnVsZS0+bHNtW2ldLnJ1bGUpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSBMU01fT0JKX1VTRVI6CisJCWNhc2UgTFNNX09CSl9ST0xFOgorCQljYXNlIExTTV9PQkpfVFlQRToKKwkJCXNlY3VyaXR5X2lub2RlX2dldHNlY2lkKGlub2RlLCAmb3NpZCk7CisJCQlyYyA9IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoKG9zaWQsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnR5cGUsCisJCQkJCQkJQVVESVRfRVFVQUwsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnJ1bGUsCisJCQkJCQkJTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBMU01fU1VCSl9VU0VSOgorCQljYXNlIExTTV9TVUJKX1JPTEU6CisJCWNhc2UgTFNNX1NVQkpfVFlQRToKKwkJCXNlY3VyaXR5X3Rhc2tfZ2V0c2VjaWQodHNrLCAmc2lkKTsKKwkJCXJjID0gc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2goc2lkLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS50eXBlLAorCQkJCQkJCUFVRElUX0VRVUFMLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS5ydWxlLAorCQkJCQkJCU5VTEwpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFyYykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogaW1hX21hdGNoX3BvbGljeSAtIGRlY2lzaW9uIGJhc2VkIG9uIExTTSBhbmQgb3RoZXIgY29uZGl0aW9ucworICogQGlub2RlOiBwb2ludGVyIHRvIGFuIGlub2RlIGZvciB3aGljaCB0aGUgcG9saWN5IGRlY2lzaW9uIGlzIGJlaW5nIG1hZGUKKyAqIEBmdW5jOiBJTUEgaG9vayBpZGVudGlmaWVyCisgKiBAbWFzazogcmVxdWVzdGVkIGFjdGlvbiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfQVBQRU5EIHwgTUFZX0VYRUMpCisgKgorICogTWVhc3VyZSBkZWNpc2lvbiBiYXNlZCBvbiBmdW5jL21hc2svZnNtYWdpYyBhbmQgTFNNKHN1Ymovb2JqL3R5cGUpCisgKiBjb25kaXRpb25zLgorICoKKyAqIChUaGVyZSBpcyBubyBuZWVkIGZvciBsb2NraW5nIHdoZW4gd2Fsa2luZyB0aGUgcG9saWN5IGxpc3QsCisgKiBhcyBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgbmV2ZXIgZGVsZXRlZCwgbm9yIGRvZXMgdGhlIGxpc3QKKyAqIGNoYW5nZS4pCisgKi8KK2ludCBpbWFfbWF0Y2hfcG9saWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gaW1hX2hvb2tzIGZ1bmMsIGludCBtYXNrKQoreworCXN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGltYV9tZWFzdXJlLCBsaXN0KSB7CisJCWJvb2wgcmM7CisKKwkJcmMgPSBpbWFfbWF0Y2hfcnVsZXMoZW50cnksIGlub2RlLCBmdW5jLCBtYXNrKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIGVudHJ5LT5hY3Rpb247CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGltYV9pbml0X3BvbGljeSAtIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgbWVhc3VyZSBydWxlcy4KKyAqCisgKiBpbWFfbWVhc3VyZSBwb2ludHMgdG8gZWl0aGVyIHRoZSBtZWFzdXJlX2RlZmF1bHRfcnVsZXMgb3IgdGhlCisgKiB0aGUgbmV3IG1lYXN1cmVfcG9saWN5X3J1bGVzLgorICovCit2b2lkIGltYV9pbml0X3BvbGljeSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGVmYXVsdF9ydWxlcyk7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgmZGVmYXVsdF9ydWxlc1tpXS5saXN0LCAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzKTsKKwlpbWFfbWVhc3VyZSA9ICZtZWFzdXJlX2RlZmF1bHRfcnVsZXM7Cit9CisKKy8qKgorICogaW1hX3VwZGF0ZV9wb2xpY3kgLSB1cGRhdGUgZGVmYXVsdF9ydWxlcyB3aXRoIG5ldyBtZWFzdXJlIHJ1bGVzCisgKgorICogQ2FsbGVkIG9uIGZpbGUgLnJlbGVhc2UgdG8gdXBkYXRlIHRoZSBkZWZhdWx0IHJ1bGVzIHdpdGggYSBjb21wbGV0ZSBuZXcKKyAqIHBvbGljeS4gIE9uY2UgdXBkYXRlZCwgdGhlIHBvbGljeSBpcyBsb2NrZWQsIG5vIGFkZGl0aW9uYWwgcnVsZXMgY2FuIGJlCisgKiBhZGRlZCB0byB0aGUgcG9saWN5LgorICovCit2b2lkIGltYV91cGRhdGVfcG9saWN5KHZvaWQpCit7CisJY29uc3QgY2hhciAqb3AgPSAicG9saWN5X3VwZGF0ZSI7CisJY29uc3QgY2hhciAqY2F1c2UgPSAiYWxyZWFkeSBleGlzdHMiOworCWludCByZXN1bHQgPSAxOworCWludCBhdWRpdF9pbmZvID0gMDsKKworCWlmIChpbWFfbWVhc3VyZSA9PSAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzKSB7CisJCWltYV9tZWFzdXJlID0gJm1lYXN1cmVfcG9saWN5X3J1bGVzOworCQljYXVzZSA9ICJjb21wbGV0ZSI7CisJCXJlc3VsdCA9IDA7CisJfQorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCSAgICBOVUxMLCBvcCwgY2F1c2UsIHJlc3VsdCwgYXVkaXRfaW5mbyk7Cit9CisKK2VudW0geworCU9wdF9lcnIgPSAtMSwKKwlPcHRfbWVhc3VyZSA9IDEsIE9wdF9kb250X21lYXN1cmUsCisJT3B0X29ial91c2VyLCBPcHRfb2JqX3JvbGUsIE9wdF9vYmpfdHlwZSwKKwlPcHRfc3Vial91c2VyLCBPcHRfc3Vial9yb2xlLCBPcHRfc3Vial90eXBlLAorCU9wdF9mdW5jLCBPcHRfbWFzaywgT3B0X2ZzbWFnaWMsIE9wdF91aWQKK307CisKK3N0YXRpYyBtYXRjaF90YWJsZV90IHBvbGljeV90b2tlbnMgPSB7CisJe09wdF9tZWFzdXJlLCAibWVhc3VyZSJ9LAorCXtPcHRfZG9udF9tZWFzdXJlLCAiZG9udF9tZWFzdXJlIn0sCisJe09wdF9vYmpfdXNlciwgIm9ial91c2VyPSVzIn0sCisJe09wdF9vYmpfcm9sZSwgIm9ial9yb2xlPSVzIn0sCisJe09wdF9vYmpfdHlwZSwgIm9ial90eXBlPSVzIn0sCisJe09wdF9zdWJqX3VzZXIsICJzdWJqX3VzZXI9JXMifSwKKwl7T3B0X3N1Ympfcm9sZSwgInN1Ympfcm9sZT0lcyJ9LAorCXtPcHRfc3Vial90eXBlLCAic3Vial90eXBlPSVzIn0sCisJe09wdF9mdW5jLCAiZnVuYz0lcyJ9LAorCXtPcHRfbWFzaywgIm1hc2s9JXMifSwKKwl7T3B0X2ZzbWFnaWMsICJmc21hZ2ljPSVzIn0sCisJe09wdF91aWQsICJ1aWQ9JXMifSwKKwl7T3B0X2VyciwgTlVMTH0KK307CisKK3N0YXRpYyBpbnQgaW1hX2xzbV9ydWxlX2luaXQoc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5LAorCQkJICAgICBjaGFyICphcmdzLCBpbnQgbHNtX3J1bGUsIGludCBhdWRpdF90eXBlKQoreworCWludCByZXN1bHQ7CisKKwllbnRyeS0+bHNtW2xzbV9ydWxlXS50eXBlID0gYXVkaXRfdHlwZTsKKwlyZXN1bHQgPSBzZWN1cml0eV9maWx0ZXJfcnVsZV9pbml0KGVudHJ5LT5sc21bbHNtX3J1bGVdLnR5cGUsCisJCQkJCSAgIEFVRElUX0VRVUFMLCBhcmdzLAorCQkJCQkgICAmZW50cnktPmxzbVtsc21fcnVsZV0ucnVsZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpbWFfcGFyc2VfcnVsZShjaGFyICpydWxlLCBzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisJY2hhciAqcDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0lOVEVHUklUWV9SVUxFKTsKKworCWVudHJ5LT5hY3Rpb24gPSAtMTsKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJnJ1bGUsICIgXG4iKSkgIT0gTlVMTCkgeworCQlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJCWludCB0b2tlbjsKKwkJdW5zaWduZWQgbG9uZyBsbnVtOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJYnJlYWs7CisJCWlmICghKnApCisJCQljb250aW51ZTsKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCBwb2xpY3lfdG9rZW5zLCBhcmdzKTsKKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9tZWFzdXJlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiVzICIsICJtZWFzdXJlIik7CisJCQllbnRyeS0+YWN0aW9uID0gTUVBU1VSRTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9kb250X21lYXN1cmU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiJXMgIiwgImRvbnRfbWVhc3VyZSIpOworCQkJZW50cnktPmFjdGlvbiA9IERPTlRfTUVBU1VSRTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9mdW5jOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImZ1bmM9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCWlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiUEFUSF9DSEVDSyIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBQQVRIX0NIRUNLOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIkZJTEVfTU1BUCIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBGSUxFX01NQVA7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiQlBSTV9DSEVDSyIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBCUFJNX0NIRUNLOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlpZiAoIXJlc3VsdCkKKwkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX0ZVTkM7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbWFzazoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJtYXNrPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlpZiAoKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfRVhFQyIpKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX0VYRUM7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX1dSSVRFIikgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9XUklURTsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfUkVBRCIpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfUkVBRDsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfQVBQRU5EIikgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9BUFBFTkQ7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCWlmICghcmVzdWx0KQorCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfTUFTSzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9mc21hZ2ljOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImZzbWFnaWM9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IHN0cmljdF9zdHJ0b3VsKGFyZ3NbMF0uZnJvbSwgMTYsCisJCQkJCQkmZW50cnktPmZzbWFnaWMpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZW50cnktPmZsYWdzIHw9IElNQV9GU01BR0lDOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3VpZDoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJ1aWQ9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IHN0cmljdF9zdHJ0b3VsKGFyZ3NbMF0uZnJvbSwgMTAsICZsbnVtKTsKKwkJCWlmICghcmVzdWx0KSB7CisJCQkJZW50cnktPnVpZCA9ICh1aWRfdCkgbG51bTsKKwkJCQlpZiAoZW50cnktPnVpZCAhPSBsbnVtKQorCQkJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJCWVsc2UKKwkJCQkJZW50cnktPmZsYWdzIHw9IElNQV9VSUQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBPcHRfb2JqX3VzZXI6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib2JqX3VzZXI9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fT0JKX1VTRVIsCisJCQkJCQkgICBBVURJVF9PQkpfVVNFUik7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfb2JqX3JvbGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib2JqX3JvbGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fT0JKX1JPTEUsCisJCQkJCQkgICBBVURJVF9PQkpfUk9MRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfb2JqX3R5cGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib2JqX3R5cGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fT0JKX1RZUEUsCisJCQkJCQkgICBBVURJVF9PQkpfVFlQRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfc3Vial91c2VyOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInN1YmpfdXNlcj0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9TVUJKX1VTRVIsCisJCQkJCQkgICBBVURJVF9TVUJKX1VTRVIpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N1Ympfcm9sZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJzdWJqX3JvbGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fU1VCSl9ST0xFLAorCQkJCQkJICAgQVVESVRfU1VCSl9ST0xFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9zdWJqX3R5cGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAic3Vial90eXBlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX1NVQkpfVFlQRSwKKwkJCQkJCSAgIEFVRElUX1NVQkpfVFlQRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIlVOS05PV049JXMgIiwgcCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZW50cnktPmFjdGlvbiA9PSBVTktOT1dOKQorCQlyZXN1bHQgPSAtRUlOVkFMOworCisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInJlcz0lZCIsICFyZXN1bHQgPyAwIDogMSk7CisJYXVkaXRfbG9nX2VuZChhYik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBpbWFfcGFyc2VfYWRkX3J1bGUgLSBhZGQgYSBydWxlIHRvIG1lYXN1cmVfcG9saWN5X3J1bGVzCisgKiBAcnVsZSAtIGltYSBtZWFzdXJlbWVudCBwb2xpY3kgcnVsZQorICoKKyAqIFVzZXMgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBwb2xpY3kgbGlzdCBmcm9tIG11bHRpcGxlIGNvbmN1cnJlbnQgd3JpdGVycy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpbWFfcGFyc2VfYWRkX3J1bGUoY2hhciAqcnVsZSkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJ1cGRhdGVfcG9saWN5IjsKKwlzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnk7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGF1ZGl0X2luZm8gPSAwOworCisJLyogUHJldmVudCBpbnN0YWxsZWQgcG9saWN5IGZyb20gY2hhbmdpbmcgKi8KKwlpZiAoaW1hX21lYXN1cmUgIT0gJm1lYXN1cmVfZGVmYXVsdF9ydWxlcykgeworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkJICAgIE5VTEwsIG9wLCAiYWxyZWFkeSBleGlzdHMiLAorCQkJCSAgICAtRUFDQ0VTLCBhdWRpdF9pbmZvKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCQkgICAgTlVMTCwgb3AsICItRU5PTUVNIiwgLUVOT01FTSwgYXVkaXRfaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+bGlzdCk7CisKKwlyZXN1bHQgPSBpbWFfcGFyc2VfcnVsZShydWxlLCBlbnRyeSk7CisJaWYgKCFyZXN1bHQpIHsKKwkJbXV0ZXhfbG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJm1lYXN1cmVfcG9saWN5X3J1bGVzKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7CisJfSBlbHNlIHsKKwkJa2ZyZWUoZW50cnkpOworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkJICAgIE5VTEwsIG9wLCAiaW52YWxpZCBwb2xpY3kiLCByZXN1bHQsCisJCQkJICAgIGF1ZGl0X2luZm8pOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBpbWFfZGVsZXRlX3J1bGVzIGNhbGxlZCB0byBjbGVhbnVwIGludmFsaWQgcG9saWN5ICovCit2b2lkIGltYV9kZWxldGVfcnVsZXModm9pZCkKK3sKKwlzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnksICp0bXA7CisKKwltdXRleF9sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZtZWFzdXJlX3BvbGljeV9ydWxlcywgbGlzdCkgeworCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQlrZnJlZShlbnRyeSk7CisJfQorCW11dGV4X3VubG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcXVldWUuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3F1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOTQzMQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3F1ZXVlLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFNlcmdlIEhhbGx5biA8c2VydWVAdXMuaWJtLmNvbT4KKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9xdWV1ZS5jCisgKiAgICAgICBJbXBsZW1lbnRzIHF1ZXVlcyB0aGF0IHN0b3JlIHRlbXBsYXRlIG1lYXN1cmVtZW50cyBhbmQKKyAqICAgICAgIG1haW50YWlucyBhZ2dyZWdhdGUgb3ZlciB0aGUgc3RvcmVkIG1lYXN1cmVtZW50cworICogICAgICAgaW4gdGhlIHByZS1jb25maWd1cmVkIFRQTSBQQ1IgKGlmIGF2YWlsYWJsZSkuCisgKiAgICAgICBUaGUgbWVhc3VyZW1lbnQgbGlzdCBpcyBhcHBlbmQtb25seS4gTm8gZW50cnkgaXMKKyAqICAgICAgIGV2ZXIgcmVtb3ZlZCBvciBjaGFuZ2VkIGR1cmluZyB0aGUgYm9vdC1jeWNsZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworTElTVF9IRUFEKGltYV9tZWFzdXJlbWVudHMpOwkvKiBsaXN0IG9mIGFsbCBtZWFzdXJlbWVudHMgKi8KKworLyoga2V5OiBpbm9kZSAoYmVmb3JlIHNlY3VyZS1oYXNoaW5nIGEgZmlsZSkgKi8KK3N0cnVjdCBpbWFfaF90YWJsZSBpbWFfaHRhYmxlID0geworCS5sZW4gPSBBVE9NSUNfTE9OR19JTklUKDApLAorCS52aW9sYXRpb25zID0gQVRPTUlDX0xPTkdfSU5JVCgwKSwKKwkucXVldWVbMCAuLi4gSU1BX01FQVNVUkVfSFRBQkxFX1NJWkUgLSAxXSA9IEhMSVNUX0hFQURfSU5JVAorfTsKKworLyogbXV0ZXggcHJvdGVjdHMgYXRvbWljaXR5IG9mIGV4dGVuZGluZyBtZWFzdXJlbWVudCBsaXN0CisgKiBhbmQgZXh0ZW5kaW5nIHRoZSBUUE0gUENSIGFnZ3JlZ2F0ZS4gU2luY2UgdHBtX2V4dGVuZCBjYW4gdGFrZQorICogbG9uZyAoYW5kIHRoZSB0cG0gZHJpdmVyIHVzZXMgYSBtdXRleCksIHdlIGNhbid0IHVzZSB0aGUgc3BpbmxvY2suCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoaW1hX2V4dGVuZF9saXN0X211dGV4KTsKKworLyogbG9va3VwIHVwIHRoZSBkaWdlc3QgdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUsIGFuZCByZXR1cm4gdGhlIGVudHJ5ICovCitzdGF0aWMgc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqaW1hX2xvb2t1cF9kaWdlc3RfZW50cnkodTggKmRpZ2VzdF92YWx1ZSkKK3sKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSwgKnJldCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGtleTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCWludCByYzsKKworCWtleSA9IGltYV9oYXNoX2tleShkaWdlc3RfdmFsdWUpOworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocWUsIHBvcywgJmltYV9odGFibGUucXVldWVba2V5XSwgaG5leHQpIHsKKwkJcmMgPSBtZW1jbXAocWUtPmVudHJ5LT5kaWdlc3QsIGRpZ2VzdF92YWx1ZSwgSU1BX0RJR0VTVF9TSVpFKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCXJldCA9IHFlOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworLyogaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeSBoZWxwZXIgZnVuY3Rpb246CisgKiAtIEFkZCB0ZW1wbGF0ZSBlbnRyeSB0byBtZWFzdXJlbWVudCBsaXN0IGFuZCBoYXNoIHRhYmxlLgorICoKKyAqIChDYWxsZWQgd2l0aCBpbWFfZXh0ZW5kX2xpc3RfbXV0ZXggaGVsZC4pCisgKi8KK3N0YXRpYyBpbnQgaW1hX2FkZF9kaWdlc3RfZW50cnkoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWU7CisJdW5zaWduZWQgaW50IGtleTsKKworCXFlID0ga21hbGxvYyhzaXplb2YoKnFlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHFlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJPVVQgT0YgTUVNT1JZIEVSUk9SIGNyZWF0aW5nIHF1ZXVlIGVudHJ5LlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlxZS0+ZW50cnkgPSBlbnRyeTsKKworCUlOSVRfTElTVF9IRUFEKCZxZS0+bGF0ZXIpOworCWxpc3RfYWRkX3RhaWxfcmN1KCZxZS0+bGF0ZXIsICZpbWFfbWVhc3VyZW1lbnRzKTsKKworCWF0b21pY19sb25nX2luYygmaW1hX2h0YWJsZS5sZW4pOworCWtleSA9IGltYV9oYXNoX2tleShlbnRyeS0+ZGlnZXN0KTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnFlLT5obmV4dCwgJmltYV9odGFibGUucXVldWVba2V5XSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1hX3Bjcl9leHRlbmQoY29uc3QgdTggKmhhc2gpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoIWltYV91c2VkX2NoaXApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXN1bHQgPSB0cG1fcGNyX2V4dGVuZChUUE1fQU5ZX05VTSwgQ09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFgsIGhhc2gpOworCWlmIChyZXN1bHQgIT0gMCkKKwkJcHJfZXJyKCJFcnJvciBDb21tdW5pY2F0aW5nIHRvIFRQTSBjaGlwXG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBBZGQgdGVtcGxhdGUgZW50cnkgdG8gdGhlIG1lYXN1cmVtZW50IGxpc3QgYW5kIGhhc2ggdGFibGUsCisgKiBhbmQgZXh0ZW5kIHRoZSBwY3IuCisgKi8KK2ludCBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5KHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LCBpbnQgdmlvbGF0aW9uLAorCQkJICAgY29uc3QgY2hhciAqb3AsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiaGFzaF9hZGRlZCI7CisJaW50IGF1ZGl0X2luZm8gPSAxOworCWludCByZXN1bHQgPSAwOworCisJbXV0ZXhfbG9jaygmaW1hX2V4dGVuZF9saXN0X211dGV4KTsKKwlpZiAoIXZpb2xhdGlvbikgeworCQltZW1jcHkoZGlnZXN0LCBlbnRyeS0+ZGlnZXN0LCBzaXplb2YgZGlnZXN0KTsKKwkJaWYgKGltYV9sb29rdXBfZGlnZXN0X2VudHJ5KGRpZ2VzdCkpIHsKKwkJCWF1ZGl0X2NhdXNlID0gImhhc2hfZXhpc3RzIjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmVzdWx0ID0gaW1hX2FkZF9kaWdlc3RfZW50cnkoZW50cnkpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWF1ZGl0X2NhdXNlID0gIkVOT01FTSI7CisJCWF1ZGl0X2luZm8gPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmlvbGF0aW9uKQkJLyogaW52YWxpZGF0ZSBwY3IgKi8KKwkJbWVtc2V0KGRpZ2VzdCwgMHhmZiwgc2l6ZW9mIGRpZ2VzdCk7CisKKwlyZXN1bHQgPSBpbWFfcGNyX2V4dGVuZChkaWdlc3QpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlhdWRpdF9jYXVzZSA9ICJUUE0gZXJyb3IiOworCQlhdWRpdF9pbmZvID0gMDsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpbWFfZXh0ZW5kX2xpc3RfbXV0ZXgpOworCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsIGVudHJ5LT50ZW1wbGF0ZV9uYW1lLAorCQkJICAgIG9wLCBhdWRpdF9jYXVzZSwgcmVzdWx0LCBhdWRpdF9pbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCmluZGV4IDgxOTMyYWIuLjlmYjY3OWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAorKysgYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAlhdG9taWNfdAkJbmtleXM7CQkvKiBudW1iZXIgb2Yga2V5cyAqLwogCWF0b21pY190CQluaWtleXM7CQkvKiBudW1iZXIgb2YgaW5zdGFudGlhdGVkIGtleXMgKi8KIAl1aWRfdAkJCXVpZDsKKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UJKnVzZXJfbnM7CiAJaW50CQkJcW5rZXlzOwkJLyogbnVtYmVyIG9mIGtleXMgYWxsb2NhdGVkIHRvIHRoaXMgdXNlciAqLwogCWludAkJCXFuYnl0ZXM7CS8qIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdG8gdGhpcyB1c2VyICovCiB9OwpAQCAtNjEsNyArNjIsOCBAQAogZXh0ZXJuIHNwaW5sb2NrX3QJa2V5X3VzZXJfbG9jazsKIGV4dGVybiBzdHJ1Y3Qga2V5X3VzZXIJcm9vdF9rZXlfdXNlcjsKIAotZXh0ZXJuIHN0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCk7CitleHRlcm4gc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkLAorCQkJCQlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpOwogZXh0ZXJuIHZvaWQga2V5X3VzZXJfcHV0KHN0cnVjdCBrZXlfdXNlciAqdXNlcik7CiAKIC8qCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCBmNzZjOGE1Li40YTEyOTdkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZQkqa2V5X2phcjsKQEAgLTYwLDcgKzYxLDcgQEAKICAqIGdldCB0aGUga2V5IHF1b3RhIHJlY29yZCBmb3IgYSB1c2VyLCBhbGxvY2F0aW5nIGEgbmV3IHJlY29yZCBpZiBvbmUgZG9lc24ndAogICogYWxyZWFkeSBleGlzdAogICovCi1zdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQpCitzdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucykKIHsKIAlzdHJ1Y3Qga2V5X3VzZXIgKmNhbmRpZGF0ZSA9IE5VTEwsICp1c2VyOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwpAQCAtNzksNiArODAsMTAgQEAKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAodWlkID4gdXNlci0+dWlkKQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZSBpZiAodXNlcl9ucyA8IHVzZXItPnVzZXJfbnMpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHVzZXJfbnMgPiB1c2VyLT51c2VyX25zKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAkJZWxzZQogCQkJZ290byBmb3VuZDsKIAl9CkBAIC0xMDYsNiArMTExLDcgQEAKIAlhdG9taWNfc2V0KCZjYW5kaWRhdGUtPm5rZXlzLCAwKTsKIAlhdG9taWNfc2V0KCZjYW5kaWRhdGUtPm5pa2V5cywgMCk7CiAJY2FuZGlkYXRlLT51aWQgPSB1aWQ7CisJY2FuZGlkYXRlLT51c2VyX25zID0gZ2V0X3VzZXJfbnModXNlcl9ucyk7CiAJY2FuZGlkYXRlLT5xbmtleXMgPSAwOwogCWNhbmRpZGF0ZS0+cW5ieXRlcyA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmNhbmRpZGF0ZS0+bG9jayk7CkBAIC0xMzYsNiArMTQyLDcgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmdXNlci0+dXNhZ2UsICZrZXlfdXNlcl9sb2NrKSkgewogCQlyYl9lcmFzZSgmdXNlci0+bm9kZSwgJmtleV91c2VyX3RyZWUpOwogCQlzcGluX3VubG9jaygma2V5X3VzZXJfbG9jayk7CisJCXB1dF91c2VyX25zKHVzZXItPnVzZXJfbnMpOwogCiAJCWtmcmVlKHVzZXIpOwogCX0KQEAgLTIzNCw3ICsyNDEsNyBAQAogCXF1b3RhbGVuID0gZGVzY2xlbiArIHR5cGUtPmRlZl9kYXRhbGVuOwogCiAJLyogZ2V0IGhvbGQgb2YgdGhlIGtleSB0cmFja2luZyBmb3IgdGhpcyB1c2VyICovCi0JdXNlciA9IGtleV91c2VyX2xvb2t1cCh1aWQpOworCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkLCBjcmVkLT51c2VyLT51c2VyX25zKTsKIAlpZiAoIXVzZXIpCiAJCWdvdG8gbm9fbWVtb3J5XzE7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IGIxZWMzYjQuLjdmMDlmYjggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJLyogY2hhbmdlIHRoZSBVSUQgKi8KIAlpZiAodWlkICE9ICh1aWRfdCkgLTEgJiYgdWlkICE9IGtleS0+dWlkKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCW5ld293bmVyID0ga2V5X3VzZXJfbG9va3VwKHVpZCk7CisJCW5ld293bmVyID0ga2V5X3VzZXJfbG9va3VwKHVpZCwgY3VycmVudF91c2VyX25zKCkpOwogCQlpZiAoIW5ld293bmVyKQogCQkJZ290byBlcnJvcl9wdXQ7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKaW5kZXggZWQ4NTE1Ny4uM2RiYTgxYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKQEAgLTUzOSw2ICs1MzksOSBAQAogCQkJCSAgICAma2V5cmluZ19uYW1lX2hhc2hbYnVja2V0XSwKIAkJCQkgICAgdHlwZV9kYXRhLmxpbmsKIAkJCQkgICAgKSB7CisJCQlpZiAoa2V5cmluZy0+dXNlci0+dXNlcl9ucyAhPSBjdXJyZW50X3VzZXJfbnMoKSkKKwkJCQljb250aW51ZTsKKwogCQkJaWYgKHRlc3RfYml0KEtFWV9GTEFHX1JFVk9LRUQsICZrZXlyaW5nLT5mbGFncykpCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jIGIvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMKaW5kZXggNWQ5ZmM3Yi4uMGVkODAyYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMKQEAgLTM1LDYgKzM1LDkgQEAKIAogCWtleSA9IGtleV9yZWZfdG9fcHRyKGtleV9yZWYpOwogCisJaWYgKGtleS0+dXNlci0+dXNlcl9ucyAhPSBjcmVkLT51c2VyLT51c2VyX25zKQorCQlnb3RvIHVzZV9vdGhlcl9wZXJtczsKKwogCS8qIHVzZSB0aGUgc2Vjb25kIDgtYml0cyBvZiBwZXJtaXNzaW9ucyBmb3Iga2V5cyB0aGUgY2FsbGVyIG93bnMgKi8KIAlpZiAoa2V5LT51aWQgPT0gY3JlZC0+ZnN1aWQpIHsKIAkJa3Blcm0gPSBrZXktPnBlcm0gPj4gMTY7CkBAIC01Niw2ICs1OSw4IEBACiAJCX0KIAl9CiAKK3VzZV9vdGhlcl9wZXJtczoKKwogCS8qIG90aGVyd2lzZSB1c2UgdGhlIGxlYXN0LXNpZ25pZmljYW50IDgtYml0cyAqLwogCWtwZXJtID0ga2V5LT5wZXJtOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2MuYyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCmluZGV4IDdmNTA4ZGUuLjc2OWY5YmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCkBAIC05MSw2ICs5MSwyOCBAQAogICovCiAjaWZkZWYgQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTCiAKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqX19rZXlfc2VyaWFsX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJd2hpbGUgKG4pIHsKKwkJc3RydWN0IGtleSAqa2V5ID0gcmJfZW50cnkobiwgc3RydWN0IGtleSwgc2VyaWFsX25vZGUpOworCQlpZiAoa2V5LT51c2VyLT51c2VyX25zID09IGN1cnJlbnRfdXNlcl9ucygpKQorCQkJYnJlYWs7CisJCW4gPSByYl9uZXh0KG4pOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfc2VyaWFsX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJcmV0dXJuIF9fa2V5X3NlcmlhbF9uZXh0KHJiX25leHQobikpOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV9zZXJpYWxfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKnIpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSByYl9maXJzdChyKTsKKwlyZXR1cm4gX19rZXlfc2VyaWFsX25leHQobik7Cit9CisKIHN0YXRpYyBpbnQgcHJvY19rZXlzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcm9jX2tleXNfb3BzKTsKQEAgLTEwNCwxMCArMTI2LDEwIEBACiAKIAlzcGluX2xvY2soJmtleV9zZXJpYWxfbG9jayk7CiAKLQlfcCA9IHJiX2ZpcnN0KCZrZXlfc2VyaWFsX3RyZWUpOworCV9wID0ga2V5X3NlcmlhbF9maXJzdCgma2V5X3NlcmlhbF90cmVlKTsKIAl3aGlsZSAocG9zID4gMCAmJiBfcCkgewogCQlwb3MtLTsKLQkJX3AgPSByYl9uZXh0KF9wKTsKKwkJX3AgPSBrZXlfc2VyaWFsX25leHQoX3ApOwogCX0KIAogCXJldHVybiBfcDsKQEAgLTExNyw3ICsxMzksNyBAQAogc3RhdGljIHZvaWQgKnByb2Nfa2V5c19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdiwgbG9mZl90ICpfcG9zKQogewogCSgqX3BvcykrKzsKLQlyZXR1cm4gcmJfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CisJcmV0dXJuIGtleV9zZXJpYWxfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CiAKIH0KIApAQCAtMjAzLDYgKzIyNSwyNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTICovCiAKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqX19rZXlfdXNlcl9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXdoaWxlIChuKSB7CisJCXN0cnVjdCBrZXlfdXNlciAqdXNlciA9IHJiX2VudHJ5KG4sIHN0cnVjdCBrZXlfdXNlciwgbm9kZSk7CisJCWlmICh1c2VyLT51c2VyX25zID09IGN1cnJlbnRfdXNlcl9ucygpKQorCQkJYnJlYWs7CisJCW4gPSByYl9uZXh0KG4pOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfdXNlcl9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXJldHVybiBfX2tleV91c2VyX25leHQocmJfbmV4dChuKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3VzZXJfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKnIpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSByYl9maXJzdChyKTsKKwlyZXR1cm4gX19rZXlfdXNlcl9uZXh0KG4pOworfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIGltcGxlbWVudCAiL3Byb2Mva2V5LXVzZXJzIiB0byBwcm92aWRlcyBhIGxpc3Qgb2YgdGhlIGtleSB1c2VycwpAQCAtMjIwLDEwICsyNjMsMTAgQEAKIAogCXNwaW5fbG9jaygma2V5X3VzZXJfbG9jayk7CiAKLQlfcCA9IHJiX2ZpcnN0KCZrZXlfdXNlcl90cmVlKTsKKwlfcCA9IGtleV91c2VyX2ZpcnN0KCZrZXlfdXNlcl90cmVlKTsKIAl3aGlsZSAocG9zID4gMCAmJiBfcCkgewogCQlwb3MtLTsKLQkJX3AgPSByYl9uZXh0KF9wKTsKKwkJX3AgPSBrZXlfdXNlcl9uZXh0KF9wKTsKIAl9CiAKIAlyZXR1cm4gX3A7CkBAIC0yMzMsNyArMjc2LDcgQEAKIHN0YXRpYyB2b2lkICpwcm9jX2tleV91c2Vyc19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdiwgbG9mZl90ICpfcG9zKQogewogCSgqX3BvcykrKzsKLQlyZXR1cm4gcmJfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CisJcmV0dXJuIGtleV91c2VyX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCmluZGV4IDJmNWQ4OWUuLjI3NmQyNzggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIApAQCAtMzQsNiArMzUsNyBAQAogCS5ua2V5cwkJPSBBVE9NSUNfSU5JVCgyKSwKIAkubmlrZXlzCQk9IEFUT01JQ19JTklUKDIpLAogCS51aWQJCT0gMCwKKwkudXNlcl9ucwk9ICZpbml0X3VzZXJfbnMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKaW5kZXggMGUwNGY3Mi4uMjJhMzE1OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAKIAlrZW50ZXIoIiIpOwogCi0JdXNlciA9IGtleV91c2VyX2xvb2t1cChjdXJyZW50X2ZzdWlkKCkpOworCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAoY3VycmVudF9mc3VpZCgpLCBjdXJyZW50X3VzZXJfbnMoKSk7CiAJaWYgKCF1c2VyKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggZWI0MWY0My4uN2Y5YjVmYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCkBAIC04OCwxNyArODgsMTYgQEAKIAl1MzIJCQl0c2lkOwogCXUxNgkJCXRjbGFzczsKIAlzdHJ1Y3QgYXZfZGVjaXNpb24JYXZkOwotCWF0b21pY190CQl1c2VkOwkvKiB1c2VkIHJlY2VudGx5ICovCiB9OwogCiBzdHJ1Y3QgYXZjX25vZGUgewogCXN0cnVjdCBhdmNfZW50cnkJYWU7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlCWxpc3Q7IC8qIGFuY2hvcmVkIGluIGF2Y19jYWNoZS0+c2xvdHNbaV0gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQJCXJoZWFkOwogfTsKIAogc3RydWN0IGF2Y19jYWNoZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlzbG90c1tBVkNfQ0FDSEVfU0xPVFNdOworCXN0cnVjdCBobGlzdF9oZWFkCXNsb3RzW0FWQ19DQUNIRV9TTE9UU107IC8qIGhlYWQgZm9yIGF2Y19ub2RlLT5saXN0ICovCiAJc3BpbmxvY2tfdAkJc2xvdHNfbG9ja1tBVkNfQ0FDSEVfU0xPVFNdOyAvKiBsb2NrIGZvciB3cml0ZXMgKi8KIAlhdG9taWNfdAkJbHJ1X2hpbnQ7CS8qIExSVSBoaW50IGZvciByZWNsYWltIHNjYW4gKi8KIAlhdG9taWNfdAkJYWN0aXZlX25vZGVzOwpAQCAtMjM0LDcgKzIzMyw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVZDX0NBQ0hFX1NMT1RTOyBpKyspIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmF2Y19jYWNoZS5zbG90c1tpXSk7CisJCUlOSVRfSExJU1RfSEVBRCgmYXZjX2NhY2hlLnNsb3RzW2ldKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldKTsKIAl9CiAJYXRvbWljX3NldCgmYXZjX2NhY2hlLmFjdGl2ZV9ub2RlcywgMCk7CkBAIC0yNTAsMTYgKzI0OSwyMCBAQAogewogCWludCBpLCBjaGFpbl9sZW4sIG1heF9jaGFpbl9sZW4sIHNsb3RzX3VzZWQ7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJc2xvdHNfdXNlZCA9IDA7CiAJbWF4X2NoYWluX2xlbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IEFWQ19DQUNIRV9TTE9UUzsgaSsrKSB7Ci0JCWlmICghbGlzdF9lbXB0eSgmYXZjX2NhY2hlLnNsb3RzW2ldKSkgeworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1tpXTsKKwkJaWYgKCFobGlzdF9lbXB0eShoZWFkKSkgeworCQkJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisKIAkJCXNsb3RzX3VzZWQrKzsKIAkJCWNoYWluX2xlbiA9IDA7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2ldLCBsaXN0KQorCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpCiAJCQkJY2hhaW5fbGVuKys7CiAJCQlpZiAoY2hhaW5fbGVuID4gbWF4X2NoYWluX2xlbikKIAkJCQltYXhfY2hhaW5fbGVuID0gY2hhaW5fbGVuOwpAQCAtMjgzLDcgKzI4Niw3IEBACiAKIHN0YXRpYyB2b2lkIGF2Y19ub2RlX2RlbGV0ZShzdHJ1Y3QgYXZjX25vZGUgKm5vZGUpCiB7Ci0JbGlzdF9kZWxfcmN1KCZub2RlLT5saXN0KTsKKwlobGlzdF9kZWxfcmN1KCZub2RlLT5saXN0KTsKIAljYWxsX3JjdSgmbm9kZS0+cmhlYWQsIGF2Y19ub2RlX2ZyZWUpOwogCWF0b21pY19kZWMoJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMpOwogfQpAQCAtMjk3LDcgKzMwMCw3IEBACiAKIHN0YXRpYyB2b2lkIGF2Y19ub2RlX3JlcGxhY2Uoc3RydWN0IGF2Y19ub2RlICpuZXcsIHN0cnVjdCBhdmNfbm9kZSAqb2xkKQogewotCWxpc3RfcmVwbGFjZV9yY3UoJm9sZC0+bGlzdCwgJm5ldy0+bGlzdCk7CisJaGxpc3RfcmVwbGFjZV9yY3UoJm9sZC0+bGlzdCwgJm5ldy0+bGlzdCk7CiAJY2FsbF9yY3UoJm9sZC0+cmhlYWQsIGF2Y19ub2RlX2ZyZWUpOwogCWF0b21pY19kZWMoJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMpOwogfQpAQCAtMzA3LDI5ICszMTAsMzEgQEAKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CiAJaW50IGh2YWx1ZSwgdHJ5LCBlY3g7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwlzcGlubG9ja190ICpsb2NrOwogCiAJZm9yICh0cnkgPSAwLCBlY3ggPSAwOyB0cnkgPCBBVkNfQ0FDSEVfU0xPVFM7IHRyeSsrKSB7CiAJCWh2YWx1ZSA9IGF0b21pY19pbmNfcmV0dXJuKCZhdmNfY2FjaGUubHJ1X2hpbnQpICYgKEFWQ19DQUNIRV9TTE9UUyAtIDEpOworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCQlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV07CiAKLQkJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZ3MpKQorCQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZub2RlLT5hZS51c2VkKSkgewotCQkJCS8qIFJlY2VudGx5IFVudXNlZCAqLwotCQkJCWF2Y19ub2RlX2RlbGV0ZShub2RlKTsKLQkJCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihyZWNsYWltcyk7Ci0JCQkJZWN4Kys7Ci0JCQkJaWYgKGVjeCA+PSBBVkNfQ0FDSEVfUkVDTEFJTSkgewotCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZ3MpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpIHsKKwkJCWF2Y19ub2RlX2RlbGV0ZShub2RlKTsKKwkJCWF2Y19jYWNoZV9zdGF0c19pbmNyKHJlY2xhaW1zKTsKKwkJCWVjeCsrOworCQkJaWYgKGVjeCA+PSBBVkNfQ0FDSEVfUkVDTEFJTSkgeworCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogCX0KIG91dDoKIAlyZXR1cm4gZWN4OwpAQCAtMzQ0LDggKzM0OSw3IEBACiAJCWdvdG8gb3V0OwogCiAJSU5JVF9SQ1VfSEVBRCgmbm9kZS0+cmhlYWQpOwotCUlOSVRfTElTVF9IRUFEKCZub2RlLT5saXN0KTsKLQlhdG9taWNfc2V0KCZub2RlLT5hZS51c2VkLCAxKTsKKwlJTklUX0hMSVNUX05PREUoJm5vZGUtPmxpc3QpOwogCWF2Y19jYWNoZV9zdGF0c19pbmNyKGFsbG9jYXRpb25zKTsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmYXZjX2NhY2hlLmFjdGl2ZV9ub2RlcykgPiBhdmNfY2FjaGVfdGhyZXNob2xkKQpAQCAtMzU1LDIxICszNTksMjQgQEAKIAlyZXR1cm4gbm9kZTsKIH0KIAotc3RhdGljIHZvaWQgYXZjX25vZGVfcG9wdWxhdGUoc3RydWN0IGF2Y19ub2RlICpub2RlLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdmNfZW50cnkgKmFlKQorc3RhdGljIHZvaWQgYXZjX25vZGVfcG9wdWxhdGUoc3RydWN0IGF2Y19ub2RlICpub2RlLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewogCW5vZGUtPmFlLnNzaWQgPSBzc2lkOwogCW5vZGUtPmFlLnRzaWQgPSB0c2lkOwogCW5vZGUtPmFlLnRjbGFzcyA9IHRjbGFzczsKLQltZW1jcHkoJm5vZGUtPmFlLmF2ZCwgJmFlLT5hdmQsIHNpemVvZihub2RlLT5hZS5hdmQpKTsKKwltZW1jcHkoJm5vZGUtPmFlLmF2ZCwgYXZkLCBzaXplb2Yobm9kZS0+YWUuYXZkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF2Y19ub2RlICphdmNfc2VhcmNoX25vZGUodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzKQogewogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZSwgKnJldCA9IE5VTEw7CiAJaW50IGh2YWx1ZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKIAogCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7CisJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkgewogCQlpZiAoc3NpZCA9PSBub2RlLT5hZS5zc2lkICYmCiAJCSAgICB0Y2xhc3MgPT0gbm9kZS0+YWUudGNsYXNzICYmCiAJCSAgICB0c2lkID09IG5vZGUtPmFlLnRzaWQpIHsKQEAgLTM3OCwxNSArMzg1LDYgQEAKIAkJfQogCX0KIAotCWlmIChyZXQgPT0gTlVMTCkgewotCQkvKiBjYWNoZSBtaXNzICovCi0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNhY2hlIGhpdCAqLwotCWlmIChhdG9taWNfcmVhZCgmcmV0LT5hZS51c2VkKSAhPSAxKQotCQlhdG9taWNfc2V0KCZyZXQtPmFlLnVzZWQsIDEpOwotb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM5NSwzMCArMzkzLDI1IEBACiAgKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0c2lkOiB0YXJnZXQgc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzCi0gKiBAcmVxdWVzdGVkOiByZXF1ZXN0ZWQgcGVybWlzc2lvbnMsIGludGVycHJldGVkIGJhc2VkIG9uIEB0Y2xhc3MKICAqCiAgKiBMb29rIHVwIGFuIEFWQyBlbnRyeSB0aGF0IGlzIHZhbGlkIGZvciB0aGUKLSAqIEByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmV0d2VlbiB0aGUgU0lEIHBhaXIKICAqIChAc3NpZCwgQHRzaWQpLCBpbnRlcnByZXRpbmcgdGhlIHBlcm1pc3Npb25zCiAgKiBiYXNlZCBvbiBAdGNsYXNzLiAgSWYgYSB2YWxpZCBBVkMgZW50cnkgZXhpc3RzLAogICogdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybiB0aGUgYXZjX25vZGUuCiAgKiBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgogICovCi1zdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfbG9va3VwKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCkKK3N0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19sb29rdXAodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzKQogewogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKIAogCWF2Y19jYWNoZV9zdGF0c19pbmNyKGxvb2t1cHMpOwogCW5vZGUgPSBhdmNfc2VhcmNoX25vZGUoc3NpZCwgdHNpZCwgdGNsYXNzKTsKIAotCWlmIChub2RlICYmICgobm9kZS0+YWUuYXZkLmRlY2lkZWQgJiByZXF1ZXN0ZWQpID09IHJlcXVlc3RlZCkpIHsKKwlpZiAobm9kZSkKIAkJYXZjX2NhY2hlX3N0YXRzX2luY3IoaGl0cyk7Ci0JCWdvdG8gb3V0OwotCX0KKwllbHNlCisJCWF2Y19jYWNoZV9zdGF0c19pbmNyKG1pc3Nlcyk7CiAKLQlub2RlID0gTlVMTDsKLQlhdmNfY2FjaGVfc3RhdHNfaW5jcihtaXNzZXMpOwotb3V0OgogCXJldHVybiBub2RlOwogfQogCkBAIC00NDksMzQgKzQ0Miw0MSBAQAogICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdHNpZDogdGFyZ2V0IHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0Y2xhc3M6IHRhcmdldCBzZWN1cml0eSBjbGFzcwotICogQGFlOiBBVkMgZW50cnkKKyAqIEBhdmQ6IHJlc3VsdGluZyBhdiBkZWNpc2lvbgogICoKICAqIEluc2VydCBhbiBBVkMgZW50cnkgZm9yIHRoZSBTSUQgcGFpcgogICogKEBzc2lkLCBAdHNpZCkgYW5kIGNsYXNzIEB0Y2xhc3MuCiAgKiBUaGUgYWNjZXNzIHZlY3RvcnMgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIgYXJlCiAgKiBub3JtYWxseSBwcm92aWRlZCBieSB0aGUgc2VjdXJpdHkgc2VydmVyIGluCiAgKiByZXNwb25zZSB0byBhIHNlY3VyaXR5X2NvbXB1dGVfYXYoKSBjYWxsLiAgSWYgdGhlCi0gKiBzZXF1ZW5jZSBudW1iZXIgQGFlLT5hdmQuc2Vxbm8gaXMgbm90IGxlc3MgdGhhbiB0aGUgbGF0ZXN0CisgKiBzZXF1ZW5jZSBudW1iZXIgQGF2ZC0+c2Vxbm8gaXMgbm90IGxlc3MgdGhhbiB0aGUgbGF0ZXN0CiAgKiByZXZvY2F0aW9uIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGUgZnVuY3Rpb24gY29waWVzCiAgKiB0aGUgYWNjZXNzIHZlY3RvcnMgaW50byBhIGNhY2hlIGVudHJ5LCByZXR1cm5zCiAgKiBhdmNfbm9kZSBpbnNlcnRlZC4gT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KICAqLwotc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2luc2VydCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdmNfZW50cnkgKmFlKQorc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2luc2VydCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewogCXN0cnVjdCBhdmNfbm9kZSAqcG9zLCAqbm9kZSA9IE5VTEw7CiAJaW50IGh2YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAKLQlpZiAoYXZjX2xhdGVzdF9ub3RpZl91cGRhdGUoYWUtPmF2ZC5zZXFubywgMSkpCisJaWYgKGF2Y19sYXRlc3Rfbm90aWZfdXBkYXRlKGF2ZC0+c2Vxbm8sIDEpKQogCQlnb3RvIG91dDsKIAogCW5vZGUgPSBhdmNfYWxsb2Nfbm9kZSgpOwogCWlmIChub2RlKSB7Ci0JCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7Ci0JCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgYWUpOworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJCXNwaW5sb2NrX3QgKmxvY2s7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7CisJCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7CisJCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgYXZkKTsKKworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCQlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZyk7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgbmV4dCwgaGVhZCwgbGlzdCkgewogCQkJaWYgKHBvcy0+YWUuc3NpZCA9PSBzc2lkICYmCiAJCQkgICAgcG9zLT5hZS50c2lkID09IHRzaWQgJiYKIAkJCSAgICBwb3MtPmFlLnRjbGFzcyA9PSB0Y2xhc3MpIHsKQEAgLTQ4NCw5ICs0ODQsOSBAQAogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CiAJCX0KLQkJbGlzdF9hZGRfcmN1KCZub2RlLT5saXN0LCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0pOworCQlobGlzdF9hZGRfaGVhZF9yY3UoJm5vZGUtPmxpc3QsIGhlYWQpOwogZm91bmQ6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWcpOwogCX0KIG91dDoKIAlyZXR1cm4gbm9kZTsKQEAgLTc0MiwxNyArNzQyLDIyIEBACiAgKiBAZXZlbnQgOiBVcGRhdGluZyBldmVudAogICogQHBlcm1zIDogUGVybWlzc2lvbiBtYXNrIGJpdHMKICAqIEBzc2lkLEB0c2lkLEB0Y2xhc3MgOiBpZGVudGlmaWVyIG9mIGFuIEFWQyBlbnRyeQorICogQHNlcW5vIDogc2VxdWVuY2UgbnVtYmVyIHdoZW4gZGVjaXNpb24gd2FzIG1hZGUKICAqCiAgKiBpZiBhIHZhbGlkIEFWQyBlbnRyeSBkb2Vzbid0IGV4aXN0LHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRU5PRU5ULgogICogaWYga21hbGxvYygpIGNhbGxlZCBpbnRlcm5hbCByZXR1cm5zIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRU5PTUVNLgogICogb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHVwZGF0ZSB0aGUgQVZDIGVudHJ5LiBUaGUgb3JpZ2luYWwgQVZDLWVudHJ5IG9iamVjdAogICogd2lsbCByZWxlYXNlIGxhdGVyIGJ5IFJDVS4KICAqLwotc3RhdGljIGludCBhdmNfdXBkYXRlX25vZGUodTMyIGV2ZW50LCB1MzIgcGVybXMsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcykKK3N0YXRpYyBpbnQgYXZjX3VwZGF0ZV9ub2RlKHUzMiBldmVudCwgdTMyIHBlcm1zLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsCisJCQkgICB1MzIgc2Vxbm8pCiB7CiAJaW50IGh2YWx1ZSwgcmMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAlzdHJ1Y3QgYXZjX25vZGUgKnBvcywgKm5vZGUsICpvcmlnID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwlzcGlubG9ja190ICpsb2NrOwogCiAJbm9kZSA9IGF2Y19hbGxvY19ub2RlKCk7CiAJaWYgKCFub2RlKSB7CkBAIC03NjIsMTIgKzc2NywxNyBAQAogCiAJLyogTG9jayB0aGUgdGFyZ2V0IHNsb3QgKi8KIAlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKKwloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWcpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBuZXh0LCBoZWFkLCBsaXN0KSB7CiAJCWlmIChzc2lkID09IHBvcy0+YWUuc3NpZCAmJgogCQkgICAgdHNpZCA9PSBwb3MtPmFlLnRzaWQgJiYKLQkJICAgIHRjbGFzcyA9PSBwb3MtPmFlLnRjbGFzcyl7CisJCSAgICB0Y2xhc3MgPT0gcG9zLT5hZS50Y2xhc3MgJiYKKwkJICAgIHNlcW5vID09IHBvcy0+YWUuYXZkLnNlcW5vKXsKIAkJCW9yaWcgPSBwb3M7CiAJCQlicmVhazsKIAkJfQpAQCAtNzgzLDcgKzc5Myw3IEBACiAJICogQ29weSBhbmQgcmVwbGFjZSBvcmlnaW5hbCBub2RlLgogCSAqLwogCi0JYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCAmb3JpZy0+YWUpOworCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgJm9yaWctPmFlLmF2ZCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBVkNfQ0FMTEJBQ0tfR1JBTlQ6CkBAIC04MDgsNyArODE4LDcgQEAKIAl9CiAJYXZjX25vZGVfcmVwbGFjZShub2RlLCBvcmlnKTsKIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFnKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC04MjMsMTggKzgzMywyNCBAQAogCWludCBpLCByYyA9IDAsIHRtcHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJc3BpbmxvY2tfdCAqbG9jazsKIAogCWZvciAoaSA9IDA7IGkgPCBBVkNfQ0FDSEVfU0xPVFM7IGkrKykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV0sIGZsYWcpOworCQloZWFkID0gJmF2Y19jYWNoZS5zbG90c1tpXTsKKwkJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFnKTsKIAkJLyoKIAkJICogV2l0aCBwcmVlbXB0YWJsZSBSQ1UsIHRoZSBvdXRlciBzcGlubG9jayBkb2VzIG5vdAogCQkgKiBwcmV2ZW50IFJDVSBncmFjZSBwZXJpb2RzIGZyb20gZW5kaW5nLgogCQkgKi8KIAkJcmN1X3JlYWRfbG9jaygpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaV0sIGxpc3QpCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpCiAJCQlhdmNfbm9kZV9kZWxldGUobm9kZSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXSwgZmxhZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZyk7CiAJfQogCiAJZm9yIChjID0gYXZjX2NhbGxiYWNrczsgYzsgYyA9IGMtPm5leHQpIHsKQEAgLTg3NSwxMCArODkxLDEwIEBACiBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCQkJIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsCiAJCQkgdW5zaWduZWQgZmxhZ3MsCi0JCQkgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCisJCQkgc3RydWN0IGF2X2RlY2lzaW9uICppbl9hdmQpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOwotCXN0cnVjdCBhdmNfZW50cnkgZW50cnksICpwX2FlOworCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmRfZW50cnksICphdmQ7CiAJaW50IHJjID0gMDsKIAl1MzIgZGVuaWVkOwogCkBAIC04ODYsMjkgKzkwMiwzNCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jbm9kZSA9IGF2Y19sb29rdXAoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQpOworCW5vZGUgPSBhdmNfbG9va3VwKHNzaWQsIHRzaWQsIHRjbGFzcyk7CiAJaWYgKCFub2RlKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlyYyA9IHNlY3VyaXR5X2NvbXB1dGVfYXYoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsICZlbnRyeS5hdmQpOworCisJCWlmIChpbl9hdmQpCisJCQlhdmQgPSBpbl9hdmQ7CisJCWVsc2UKKwkJCWF2ZCA9ICZhdmRfZW50cnk7CisKKwkJcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdmQpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlub2RlID0gYXZjX2luc2VydChzc2lkLCB0c2lkLCB0Y2xhc3MsICZlbnRyeSk7CisJCW5vZGUgPSBhdmNfaW5zZXJ0KHNzaWQsIHRzaWQsIHRjbGFzcywgYXZkKTsKKwl9IGVsc2UgeworCQlpZiAoaW5fYXZkKQorCQkJbWVtY3B5KGluX2F2ZCwgJm5vZGUtPmFlLmF2ZCwgc2l6ZW9mKCppbl9hdmQpKTsKKwkJYXZkID0gJm5vZGUtPmFlLmF2ZDsKIAl9CiAKLQlwX2FlID0gbm9kZSA/ICZub2RlLT5hZSA6ICZlbnRyeTsKLQotCWlmIChhdmQpCi0JCW1lbWNweShhdmQsICZwX2FlLT5hdmQsIHNpemVvZigqYXZkKSk7Ci0KLQlkZW5pZWQgPSByZXF1ZXN0ZWQgJiB+KHBfYWUtPmF2ZC5hbGxvd2VkKTsKKwlkZW5pZWQgPSByZXF1ZXN0ZWQgJiB+KGF2ZC0+YWxsb3dlZCk7CiAKIAlpZiAoZGVuaWVkKSB7CiAJCWlmIChmbGFncyAmIEFWQ19TVFJJQ1QpCiAJCQlyYyA9IC1FQUNDRVM7CiAJCWVsc2UgaWYgKCFzZWxpbnV4X2VuZm9yY2luZyB8fCBzZWN1cml0eV9wZXJtaXNzaXZlX3NpZChzc2lkKSkKIAkJCWF2Y191cGRhdGVfbm9kZShBVkNfQ0FMTEJBQ0tfR1JBTlQsIHJlcXVlc3RlZCwgc3NpZCwKLQkJCQkJdHNpZCwgdGNsYXNzKTsKKwkJCQkJdHNpZCwgdGNsYXNzLCBhdmQtPnNlcW5vKTsKIAkJZWxzZQogCQkJcmMgPSAtRUFDQ0VTOwogCX0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMDgxNTk3Li43YzUyYmEyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIFhBVFRSX1NFTElOVVhfU1VGRklYICJzZWxpbnV4IgogI2RlZmluZSBYQVRUUl9OQU1FX1NFTElOVVggWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NFTElOVVhfU1VGRklYCiAKLSNkZWZpbmUgTlVNX1NFTF9NTlRfT1BUUyA0CisjZGVmaW5lIE5VTV9TRUxfTU5UX09QVFMgNQogCiBleHRlcm4gdW5zaWduZWQgaW50IHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uOwogZXh0ZXJuIGludCBzZWxpbnV4X25sbXNnX2xvb2t1cCh1MTYgc2NsYXNzLCB1MTYgbmxtc2dfdHlwZSwgdTMyICpwZXJtKTsKQEAgLTM1Myw2ICszNTMsNyBAQAogCU9wdF9mc2NvbnRleHQgPSAyLAogCU9wdF9kZWZjb250ZXh0ID0gMywKIAlPcHRfcm9vdGNvbnRleHQgPSA0LAorCU9wdF9sYWJlbHN1cHBvcnQgPSA1LAogfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMzYwLDYgKzM2MSw3IEBACiAJe09wdF9mc2NvbnRleHQsIEZTQ09OVEVYVF9TVFIgIiVzIn0sCiAJe09wdF9kZWZjb250ZXh0LCBERUZDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X3Jvb3Rjb250ZXh0LCBST09UQ09OVEVYVF9TVFIgIiVzIn0sCisJe09wdF9sYWJlbHN1cHBvcnQsIExBQkVMU1VQUF9TVFJ9LAogCXtPcHRfZXJyb3IsIE5VTEx9LAogfTsKIApAQCAtNDMxLDcgKzQzMyw3IEBACiAJCX0KIAl9CiAKLQlzYnNlYy0+aW5pdGlhbGl6ZWQgPSAxOworCXNic2VjLT5mbGFncyB8PSAoU0VfU0JJTklUSUFMSVpFRCB8IFNFX1NCTEFCRUxTVVBQKTsKIAogCWlmIChzYnNlYy0+YmVoYXZpb3IgPiBBUlJBWV9TSVpFKGxhYmVsaW5nX2JlaGF2aW9ycykpCiAJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogaW5pdGlhbGl6ZWQgKGRldiAlcywgdHlwZSAlcyksIHVua25vd24gYmVoYXZpb3JcbiIsCkBAIC00NDEsNiArNDQzLDEyIEBACiAJCSAgICAgICBzYi0+c19pZCwgc2ItPnNfdHlwZS0+bmFtZSwKIAkJICAgICAgIGxhYmVsaW5nX2JlaGF2aW9yc1tzYnNlYy0+YmVoYXZpb3ItMV0pOwogCisJaWYgKHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfR0VORlMgfHwKKwkgICAgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX05PTkUgfHwKKwkgICAgc2JzZWMtPmJlaGF2aW9yID4gQVJSQVlfU0laRShsYWJlbGluZ19iZWhhdmlvcnMpKQorCQlzYnNlYy0+ZmxhZ3MgJj0gflNFX1NCTEFCRUxTVVBQOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgcm9vdCBpbm9kZS4gKi8KIAlyYyA9IGlub2RlX2RvaW5pdF93aXRoX2RlbnRyeShyb290X2lub2RlLCByb290KTsKIApAQCAtNDg3LDIzICs0OTUsMjIgQEAKIAogCXNlY3VyaXR5X2luaXRfbW50X29wdHMob3B0cyk7CiAKLQlpZiAoIXNic2VjLT5pbml0aWFsaXplZCkKKwlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXNzX2luaXRpYWxpemVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qCi0JICogaWYgd2UgZXZlciB1c2Ugc2JzZWMgZmxhZ3MgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gdHJhY2tpbmcgbW91bnQKLQkgKiBzZXR0aW5ncyB0aGlzIGlzIGdvaW5nIHRvIG5lZWQgYSBtYXNrCi0JICovCi0JdG1wID0gc2JzZWMtPmZsYWdzOworCXRtcCA9IHNic2VjLT5mbGFncyAmIFNFX01OVE1BU0s7CiAJLyogY291bnQgdGhlIG51bWJlciBvZiBtb3VudCBvcHRpb25zIGZvciB0aGlzIHNiICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlpZiAodG1wICYgMHgwMSkKIAkJCW9wdHMtPm51bV9tbnRfb3B0cysrOwogCQl0bXAgPj49IDE7CiAJfQorCS8qIENoZWNrIGlmIHRoZSBMYWJlbCBzdXBwb3J0IGZsYWcgaXMgc2V0ICovCisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKQorCQlvcHRzLT5udW1fbW50X29wdHMrKzsKIAogCW9wdHMtPm1udF9vcHRzID0ga2NhbGxvYyhvcHRzLT5udW1fbW50X29wdHMsIHNpemVvZihjaGFyICopLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW9wdHMtPm1udF9vcHRzKSB7CkBAIC01NDksNiArNTU2LDEwIEBACiAJCW9wdHMtPm1udF9vcHRzW2ldID0gY29udGV4dDsKIAkJb3B0cy0+bW50X29wdHNfZmxhZ3NbaSsrXSA9IFJPT1RDT05URVhUX01OVDsKIAl9CisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSB7CisJCW9wdHMtPm1udF9vcHRzW2ldID0gTlVMTDsKKwkJb3B0cy0+bW50X29wdHNfZmxhZ3NbaSsrXSA9IFNFX1NCTEFCRUxTVVBQOworCX0KIAogCUJVR19PTihpICE9IG9wdHMtPm51bV9tbnRfb3B0cyk7CiAKQEAgLTU2Miw4ICs1NzMsMTAgQEAKIHN0YXRpYyBpbnQgYmFkX29wdGlvbihzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjLCBjaGFyIGZsYWcsCiAJCSAgICAgIHUzMiBvbGRfc2lkLCB1MzIgbmV3X3NpZCkKIHsKKwljaGFyIG1udF9mbGFncyA9IHNic2VjLT5mbGFncyAmIFNFX01OVE1BU0s7CisKIAkvKiBjaGVjayBpZiB0aGUgb2xkIG1vdW50IGNvbW1hbmQgaGFkIHRoZSBzYW1lIG9wdGlvbnMgKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkKQorCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKQogCQlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBmbGFnKSB8fAogCQkgICAgKG9sZF9zaWQgIT0gbmV3X3NpZCkpCiAJCQlyZXR1cm4gMTsKQEAgLTU3MSw4ICs1ODQsOCBAQAogCS8qIGNoZWNrIGlmIHdlIHdlcmUgcGFzc2VkIHRoZSBzYW1lIG9wdGlvbnMgdHdpY2UsCiAJICogYWthIHNvbWVvbmUgcGFzc2VkIGNvbnRleHQ9YSxjb250ZXh0PWIKIAkgKi8KLQlpZiAoIXNic2VjLT5pbml0aWFsaXplZCkKLQkJaWYgKHNic2VjLT5mbGFncyAmIGZsYWcpCisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpCisJCWlmIChtbnRfZmxhZ3MgJiBmbGFnKQogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC02MjYsNyArNjM5LDcgQEAKIAkgKiB0aGlzIHNiIGRvZXMgbm90IHNldCBhbnkgc2VjdXJpdHkgb3B0aW9ucy4gIChUaGUgZmlyc3Qgb3B0aW9ucwogCSAqIHdpbGwgYmUgdXNlZCBmb3IgYm90aCBtb3VudHMpCiAJICovCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCAmJiAoc2ItPnNfdHlwZS0+ZnNfZmxhZ3MgJiBGU19CSU5BUllfTU9VTlREQVRBKQorCWlmICgoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkgJiYgKHNiLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfQklOQVJZX01PVU5UREFUQSkKIAkgICAgJiYgKG51bV9vcHRzID09IDApKQogCQlnb3RvIG91dDsKIApAQCAtNjM3LDYgKzY1MCw5IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9vcHRzOyBpKyspIHsKIAkJdTMyIHNpZDsKKworCQlpZiAoZmxhZ3NbaV0gPT0gU0VfU0JMQUJFTFNVUFApCisJCQljb250aW51ZTsKIAkJcmMgPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZChtb3VudF9vcHRpb25zW2ldLAogCQkJCQkgICAgIHN0cmxlbihtb3VudF9vcHRpb25zW2ldKSwgJnNpZCk7CiAJCWlmIChyYykgewpAQCAtNjkwLDE5ICs3MDYsMTkgQEAKIAkJfQogCX0KIAotCWlmIChzYnNlYy0+aW5pdGlhbGl6ZWQpIHsKKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkgewogCQkvKiBwcmV2aW91c2x5IG1vdW50ZWQgd2l0aCBvcHRpb25zLCBidXQgbm90IG9uIHRoaXMgYXR0ZW1wdD8gKi8KLQkJaWYgKHNic2VjLT5mbGFncyAmJiAhbnVtX29wdHMpCisJCWlmICgoc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSykgJiYgIW51bV9vcHRzKQogCQkJZ290byBvdXRfZG91YmxlX21vdW50OwogCQlyYyA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChzdHJjbXAoc2ItPnNfdHlwZS0+bmFtZSwgInByb2MiKSA9PSAwKQotCQlzYnNlYy0+cHJvYyA9IDE7CisJCXNic2VjLT5mbGFncyB8PSBTRV9TQlBST0M7CiAKIAkvKiBEZXRlcm1pbmUgdGhlIGxhYmVsaW5nIGJlaGF2aW9yIHRvIHVzZSBmb3IgdGhpcyBmaWxlc3lzdGVtIHR5cGUuICovCi0JcmMgPSBzZWN1cml0eV9mc191c2Uoc2JzZWMtPnByb2MgPyAicHJvYyIgOiBzYi0+c190eXBlLT5uYW1lLCAmc2JzZWMtPmJlaGF2aW9yLCAmc2JzZWMtPnNpZCk7CisJcmMgPSBzZWN1cml0eV9mc191c2UoKHNic2VjLT5mbGFncyAmIFNFX1NCUFJPQykgPyAicHJvYyIgOiBzYi0+c190eXBlLT5uYW1lLCAmc2JzZWMtPmJlaGF2aW9yLCAmc2JzZWMtPnNpZCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzZWN1cml0eV9mc191c2UoJXMpIHJldHVybmVkICVkXG4iLAogCQkgICAgICAgX19mdW5jX18sIHNiLT5zX3R5cGUtPm5hbWUsIHJjKTsKQEAgLTgwNiwxMCArODIyLDEwIEBACiAJfQogCiAJLyogaG93IGNhbiB3ZSBjbG9uZSBpZiB0aGUgb2xkIG9uZSB3YXNuJ3Qgc2V0IHVwPz8gKi8KLQlCVUdfT04oIW9sZHNic2VjLT5pbml0aWFsaXplZCk7CisJQlVHX09OKCEob2xkc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpOwogCiAJLyogaWYgZnMgaXMgcmV1c2luZyBhIHNiLCBqdXN0IGxldCBpdHMgb3B0aW9ucyBzdGFuZC4uLiAqLwotCWlmIChuZXdzYnNlYy0+aW5pdGlhbGl6ZWQpCisJaWYgKG5ld3Nic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJm5ld3Nic2VjLT5sb2NrKTsKQEAgLTkxNyw3ICs5MzMsOCBAQAogCQkJCWdvdG8gb3V0X2VycjsKIAkJCX0KIAkJCWJyZWFrOwotCisJCWNhc2UgT3B0X2xhYmVsc3VwcG9ydDoKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmMgPSAtRUlOVkFMOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogIHVua25vd24gbW91bnQgb3B0aW9uXG4iKTsKQEAgLTk5OSw3ICsxMDE2LDEyIEBACiAJY2hhciAqcHJlZml4OwogCiAJZm9yIChpID0gMDsgaSA8IG9wdHMtPm51bV9tbnRfb3B0czsgaSsrKSB7Ci0JCWNoYXIgKmhhc19jb21tYSA9IHN0cmNocihvcHRzLT5tbnRfb3B0c1tpXSwgJywnKTsKKwkJY2hhciAqaGFzX2NvbW1hOworCisJCWlmIChvcHRzLT5tbnRfb3B0c1tpXSkKKwkJCWhhc19jb21tYSA9IHN0cmNocihvcHRzLT5tbnRfb3B0c1tpXSwgJywnKTsKKwkJZWxzZQorCQkJaGFzX2NvbW1hID0gTlVMTDsKIAogCQlzd2l0Y2ggKG9wdHMtPm1udF9vcHRzX2ZsYWdzW2ldKSB7CiAJCWNhc2UgQ09OVEVYVF9NTlQ6CkBAIC0xMDE0LDYgKzEwMzYsMTAgQEAKIAkJY2FzZSBERUZDT05URVhUX01OVDoKIAkJCXByZWZpeCA9IERFRkNPTlRFWFRfU1RSOwogCQkJYnJlYWs7CisJCWNhc2UgU0VfU0JMQUJFTFNVUFA6CisJCQlzZXFfcHV0YyhtLCAnLCcpOworCQkJc2VxX3B1dHMobSwgTEFCRUxTVVBQX1NUUik7CisJCQljb250aW51ZTsKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQl9OwpAQCAtMTIwOSw3ICsxMjM1LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJc2JzZWMgPSBpbm9kZS0+aV9zYi0+c19zZWN1cml0eTsKLQlpZiAoIXNic2VjLT5pbml0aWFsaXplZCkgeworCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpKSB7CiAJCS8qIERlZmVyIGluaXRpYWxpemF0aW9uIHVudGlsIHNlbGludXhfY29tcGxldGVfaW5pdCwKIAkJICAgYWZ0ZXIgdGhlIGluaXRpYWwgcG9saWN5IGlzIGxvYWRlZCBhbmQgdGhlIHNlY3VyaXR5CiAJCSAgIHNlcnZlciBpcyByZWFkeSB0byBoYW5kbGUgY2FsbHMuICovCkBAIC0xMjM3LDE5ICsxMjYzLDI2IEBACiAJCQlkZW50cnkgPSBkX2ZpbmRfYWxpYXMoaW5vZGUpOwogCQl9CiAJCWlmICghZGVudHJ5KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAlczogIG5vIGRlbnRyeSBmb3IgZGV2PSVzICIKLQkJCSAgICAgICAiaW5vPSVsZFxuIiwgX19mdW5jX18sIGlub2RlLT5pX3NiLT5zX2lkLAotCQkJICAgICAgIGlub2RlLT5pX2lubyk7CisJCQkvKgorCQkJICogdGhpcyBpcyBjYW4gYmUgaGl0IG9uIGJvb3Qgd2hlbiBhIGZpbGUgaXMgYWNjZXNzZWQKKwkJCSAqIGJlZm9yZSB0aGUgcG9saWN5IGlzIGxvYWRlZC4gIFdoZW4gd2UgbG9hZCBwb2xpY3kgd2UKKwkJCSAqIG1heSBmaW5kIGlub2RlcyB0aGF0IGhhdmUgbm8gZGVudHJ5IG9uIHRoZQorCQkJICogc2JzZWMtPmlzZWNfaGVhZCBsaXN0LiAgTm8gcmVhc29uIHRvIGNvbXBsYWluIGFzIHRoZXNlCisJCQkgKiB3aWxsIGdldCBmaXhlZCB1cCB0aGUgbmV4dCB0aW1lIHdlIGdvIHRocm91Z2gKKwkJCSAqIGlub2RlX2RvaW5pdCB3aXRoIGEgZGVudHJ5LCBiZWZvcmUgdGhlc2UgaW5vZGVzIGNvdWxkCisJCQkgKiBiZSB1c2VkIGFnYWluIGJ5IHVzZXJzcGFjZS4KKwkJCSAqLwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKIAkJbGVuID0gSU5JVENPTlRFWFRMRU47Ci0JCWNvbnRleHQgPSBrbWFsbG9jKGxlbiwgR0ZQX05PRlMpOworCQljb250ZXh0ID0ga21hbGxvYyhsZW4rMSwgR0ZQX05PRlMpOwogCQlpZiAoIWNvbnRleHQpIHsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWRwdXQoZGVudHJ5KTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQorCQljb250ZXh0W2xlbl0gPSAnXDAnOwogCQlyYyA9IGlub2RlLT5pX29wLT5nZXR4YXR0cihkZW50cnksIFhBVFRSX05BTUVfU0VMSU5VWCwKIAkJCQkJICAgY29udGV4dCwgbGVuKTsKIAkJaWYgKHJjID09IC1FUkFOR0UpIHsKQEAgLTEyNjIsMTIgKzEyOTUsMTMgQEAKIAkJCX0KIAkJCWtmcmVlKGNvbnRleHQpOwogCQkJbGVuID0gcmM7Ci0JCQljb250ZXh0ID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKKwkJCWNvbnRleHQgPSBrbWFsbG9jKGxlbisxLCBHRlBfTk9GUyk7CiAJCQlpZiAoIWNvbnRleHQpIHsKIAkJCQlyYyA9IC1FTk9NRU07CiAJCQkJZHB1dChkZW50cnkpOwogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KKwkJCWNvbnRleHRbbGVuXSA9ICdcMCc7CiAJCQlyYyA9IGlub2RlLT5pX29wLT5nZXR4YXR0cihkZW50cnksCiAJCQkJCQkgICBYQVRUUl9OQU1FX1NFTElOVVgsCiAJCQkJCQkgICBjb250ZXh0LCBsZW4pOwpAQCAtMTI4OSwxMCArMTMyMywxOSBAQAogCQkJCQkJCSAgICAgc2JzZWMtPmRlZl9zaWQsCiAJCQkJCQkJICAgICBHRlBfTk9GUyk7CiAJCQlpZiAocmMpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAlczogIGNvbnRleHRfdG9fc2lkKCVzKSAiCi0JCQkJICAgICAgICJyZXR1cm5lZCAlZCBmb3IgZGV2PSVzIGlubz0lbGRcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLCBjb250ZXh0LCAtcmMsCi0JCQkJICAgICAgIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOworCQkJCWNoYXIgKmRldiA9IGlub2RlLT5pX3NiLT5zX2lkOworCQkJCXVuc2lnbmVkIGxvbmcgaW5vID0gaW5vZGUtPmlfaW5vOworCisJCQkJaWYgKHJjID09IC1FSU5WQUwpIHsKKwkJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJCXByaW50ayhLRVJOX05PVElDRSAiU0VMaW51eDogaW5vZGU9JWx1IG9uIGRldj0lcyB3YXMgZm91bmQgdG8gaGF2ZSBhbiBpbnZhbGlkICIKKwkJCQkJCQkiY29udGV4dD0lcy4gIFRoaXMgaW5kaWNhdGVzIHlvdSBtYXkgbmVlZCB0byByZWxhYmVsIHRoZSBpbm9kZSBvciB0aGUgIgorCQkJCQkJCSJmaWxlc3lzdGVtIGluIHF1ZXN0aW9uLlxuIiwgaW5vLCBkZXYsIGNvbnRleHQpOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgY29udGV4dF90b19zaWQoJXMpICIKKwkJCQkJICAgICAgICJyZXR1cm5lZCAlZCBmb3IgZGV2PSVzIGlubz0lbGRcbiIsCisJCQkJCSAgICAgICBfX2Z1bmNfXywgY29udGV4dCwgLXJjLCBkZXYsIGlubyk7CisJCQkJfQogCQkJCWtmcmVlKGNvbnRleHQpOwogCQkJCS8qIExlYXZlIHdpdGggdGhlIHVubGFiZWxlZCBTSUQgKi8KIAkJCQlyYyA9IDA7CkBAIC0xMzI2LDcgKzEzNjksNyBAQAogCQkvKiBEZWZhdWx0IHRvIHRoZSBmcyBzdXBlcmJsb2NrIFNJRC4gKi8KIAkJaXNlYy0+c2lkID0gc2JzZWMtPnNpZDsKIAotCQlpZiAoc2JzZWMtPnByb2MgJiYgIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9TQlBST0MpICYmICFTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CiAJCQlzdHJ1Y3QgcHJvY19pbm9kZSAqcHJvY2kgPSBQUk9DX0koaW5vZGUpOwogCQkJaWYgKHByb2NpLT5wZGUpIHsKIAkJCQlpc2VjLT5zY2xhc3MgPSBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpOwpAQCAtMTU4Nyw3ICsxNjMwLDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWlmICghbmV3c2lkIHx8IHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpIHsKKwlpZiAoIW5ld3NpZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkgewogCQlyYyA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNpZCwgZHNlYy0+c2lkLCB0Y2xhc3MsICZuZXdzaWQpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CkBAIC0xODAxLDYgKzE4NDQsOCBAQAogCQkJYXYgfD0gRklGT19GSUxFX19PUEVOOwogCQllbHNlIGlmIChTX0lTRElSKG1vZGUpKQogCQkJYXYgfD0gRElSX19PUEVOOworCQllbHNlIGlmIChTX0lTU09DSyhtb2RlKSkKKwkJCWF2IHw9IFNPQ0tfRklMRV9fT1BFTjsKIAkJZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBXQVJOSU5HOiBpbnNpZGUgJXMgd2l0aCAiCiAJCQkJInVua25vd24gbW9kZTolb1xuIiwgX19mdW5jX18sIG1vZGUpOwpAQCAtMTgxNSw3ICsxODYwLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnB0cmFjZV9tYXlfYWNjZXNzKGNoaWxkLCBtb2RlKTsKKwlyYyA9IGNhcF9wdHJhY2VfbWF5X2FjY2VzcyhjaGlsZCwgbW9kZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE4MzIsNyArMTg3Nyw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5wdHJhY2VfdHJhY2VtZShwYXJlbnQpOworCXJjID0gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE4NDgsNyArMTg5Myw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+Y2FwZ2V0KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKKwlyZXR1cm4gY2FwX2NhcGdldCh0YXJnZXQsIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBzZXQoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKQEAgLTE4NTgsNyArMTkwMyw3IEBACiB7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBzZWNvbmRhcnlfb3BzLT5jYXBzZXQobmV3LCBvbGQsCisJZXJyb3IgPSBjYXBfY2Fwc2V0KG5ldywgb2xkLAogCQkJCSAgICAgIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0xODY2LDEyICsxOTExLDIyIEBACiAJcmV0dXJuIGNyZWRfaGFzX3Blcm0ob2xkLCBuZXcsIFBST0NFU1NfX1NFVENBUCk7CiB9CiAKKy8qCisgKiAoVGhpcyBjb21tZW50IHVzZWQgdG8gbGl2ZSB3aXRoIHRoZSBzZWxpbnV4X3Rhc2tfc2V0dWlkIGhvb2ssCisgKiB3aGljaCB3YXMgcmVtb3ZlZCkuCisgKgorICogU2luY2Ugc2V0dWlkIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBwcm9jZXNzLCBhbmQgc2luY2UgdGhlIFNFTGludXgKKyAqIGNvbnRyb2xzIGFyZSBub3QgYmFzZWQgb24gdGhlIExpbnV4IGlkZW50aXR5IGF0dHJpYnV0ZXMsIFNFTGludXggZG9lcyBub3QKKyAqIG5lZWQgdG8gY29udHJvbCB0aGlzIG9wZXJhdGlvbi4gIEhvd2V2ZXIsIFNFTGludXggZG9lcyBjb250cm9sIHRoZSB1c2Ugb2YKKyAqIHRoZSBDQVBfU0VUVUlEIGFuZCBDQVBfU0VUR0lEIGNhcGFiaWxpdGllcyB1c2luZyB0aGUgY2FwYWJsZSBob29rLgorICovCisKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAkJCSAgIGludCBjYXAsIGludCBhdWRpdCkKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPmNhcGFibGUodHNrLCBjcmVkLCBjYXAsIGF1ZGl0KTsKKwlyYyA9IGNhcF9jYXBhYmxlKHRzaywgY3JlZCwgY2FwLCBhdWRpdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE5OTcsNyArMjA1Miw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zeXNsb2codHlwZSk7CisJcmMgPSBjYXBfc3lzbG9nKHR5cGUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yMDI4LDEwICsyMDgzLDYgQEAKICAqIG1hcHBpbmcuIDAgbWVhbnMgdGhlcmUgaXMgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIGFsbG9jYXRpb24gdG8KICAqIHN1Y2NlZWQgYW5kIC1FTk9NRU0gaW1wbGllcyB0aGVyZSBpcyBub3QuCiAgKgotICogTm90ZSB0aGF0IHNlY29uZGFyeV9vcHMtPmNhcGFibGUgYW5kIHRhc2tfaGFzX3Blcm1fbm9hdWRpdCByZXR1cm4gMAotICogaWYgdGhlIGNhcGFiaWxpdHkgaXMgZ3JhbnRlZCwgYnV0IF9fdm1fZW5vdWdoX21lbW9yeSByZXF1aXJlcyAxIGlmCi0gKiB0aGUgY2FwYWJpbGl0eSBpcyBncmFudGVkLgotICoKICAqIERvIG5vdCBhdWRpdCB0aGUgc2VsaW51eCBwZXJtaXNzaW9uIGNoZWNrLCBhcyB0aGlzIGlzIGFwcGxpZWQgdG8gYWxsCiAgKiBwcm9jZXNzZXMgdGhhdCBhbGxvY2F0ZSBtYXBwaW5ncy4KICAqLwpAQCAtMjA1OCw3ICsyMTA5LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPmJwcm1fc2V0X2NyZWRzKGJwcm0pOworCXJjID0gY2FwX2Jwcm1fc2V0X2NyZWRzKGJwcm0pOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yMTU2LDExICsyMjA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2Jwcm1fY2hlY2tfc2VjdXJpdHkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+YnBybV9jaGVja19zZWN1cml0eShicHJtKTsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X2Jwcm1fc2VjdXJlZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CkBAIC0yMTgwLDcgKzIyMjYsNyBAQAogCQkJCQlQUk9DRVNTX19OT0FUU0VDVVJFLCBOVUxMKTsKIAl9CiAKLQlyZXR1cm4gKGF0c2VjdXJlIHx8IHNlY29uZGFyeV9vcHMtPmJwcm1fc2VjdXJlZXhlYyhicHJtKSk7CisJcmV0dXJuIChhdHNlY3VyZSB8fCBjYXBfYnBybV9zZWN1cmVleGVjKGJwcm0pKTsKIH0KIAogZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqc2VsaW51eGZzX21vdW50OwpAQCAtMjI5MCw4ICsyMzM2LDYgQEAKIAlzdHJ1Y3QgcmxpbWl0ICpybGltLCAqaW5pdHJsaW07CiAJaW50IHJjLCBpOwogCi0Jc2Vjb25kYXJ5X29wcy0+YnBybV9jb21taXR0aW5nX2NyZWRzKGJwcm0pOwotCiAJbmV3X3RzZWMgPSBicHJtLT5jcmVkLT5zZWN1cml0eTsKIAlpZiAobmV3X3RzZWMtPnNpZCA9PSBuZXdfdHNlYy0+b3NpZCkKIAkJcmV0dXJuOwpAQCAtMjMzNyw4ICsyMzgxLDYgQEAKIAlpbnQgcmMsIGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNlY29uZGFyeV9vcHMtPmJwcm1fY29tbWl0dGVkX2NyZWRzKGJwcm0pOwotCiAJb3NpZCA9IHRzZWMtPm9zaWQ7CiAJc2lkID0gdHNlYy0+c2lkOwogCkBAIC0yNDAwLDcgKzI0NDIsOCBAQAogCXJldHVybiAobWF0Y2hfcHJlZml4KENPTlRFWFRfU1RSLCBzaXplb2YoQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAogCQltYXRjaF9wcmVmaXgoRlNDT05URVhUX1NUUiwgc2l6ZW9mKEZTQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAogCQltYXRjaF9wcmVmaXgoREVGQ09OVEVYVF9TVFIsIHNpemVvZihERUZDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8Ci0JCW1hdGNoX3ByZWZpeChST09UQ09OVEVYVF9TVFIsIHNpemVvZihST09UQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSk7CisJCW1hdGNoX3ByZWZpeChST09UQ09OVEVYVF9TVFIsIHNpemVvZihST09UQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAorCQltYXRjaF9wcmVmaXgoTEFCRUxTVVBQX1NUUiwgc2l6ZW9mKExBQkVMU1VQUF9TVFIpLTEsIG9wdGlvbiwgbGVuKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YWtlX29wdGlvbihjaGFyICoqdG8sIGNoYXIgKmZyb20sIGludCAqZmlyc3QsIGludCBsZW4pCkBAIC0yNTEzLDExICsyNTU2LDYgQEAKIAkJCSB2b2lkICpkYXRhKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zYl9tb3VudChkZXZfbmFtZSwgcGF0aCwgdHlwZSwgZmxhZ3MsIGRhdGEpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJaWYgKGZsYWdzICYgTVNfUkVNT1VOVCkKIAkJcmV0dXJuIHN1cGVyYmxvY2tfaGFzX3Blcm0oY3JlZCwgcGF0aC0+bW50LT5tbnRfc2IsCkBAIC0yNTMwLDExICsyNTY4LDYgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF91bW91bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBmbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+c2JfdW1vdW50KG1udCwgZmxhZ3MpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJcmV0dXJuIHN1cGVyYmxvY2tfaGFzX3Blcm0oY3JlZCwgbW50LT5tbnRfc2IsCiAJCQkJICAgRklMRVNZU1RFTV9fVU5NT1VOVCwgTlVMTCk7CkBAIC0yNTcwLDcgKzI2MDMsNyBAQAogCXNpZCA9IHRzZWMtPnNpZDsKIAluZXdzaWQgPSB0c2VjLT5jcmVhdGVfc2lkOwogCi0JaWYgKCFuZXdzaWQgfHwgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkgeworCWlmICghbmV3c2lkIHx8ICEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKSB7CiAJCXJjID0gc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWQoc2lkLCBkc2VjLT5zaWQsCiAJCQkJCSAgICAgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhpbm9kZS0+aV9tb2RlKSwKIAkJCQkJICAgICAmbmV3c2lkKTsKQEAgLTI1ODUsMTQgKzI2MTgsMTQgQEAKIAl9CiAKIAkvKiBQb3NzaWJseSBkZWZlciBpbml0aWFsaXphdGlvbiB0byBzZWxpbnV4X2NvbXBsZXRlX2luaXQuICovCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCkgeworCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSB7CiAJCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAkJaXNlYy0+c2NsYXNzID0gaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhpbm9kZS0+aV9tb2RlKTsKIAkJaXNlYy0+c2lkID0gbmV3c2lkOwogCQlpc2VjLT5pbml0aWFsaXplZCA9IDE7CiAJfQogCi0JaWYgKCFzc19pbml0aWFsaXplZCB8fCBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKQorCWlmICghc3NfaW5pdGlhbGl6ZWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChuYW1lKSB7CkBAIC0yNjIyLDIxICsyNjU1LDExIEBACiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCXJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfdW5saW5rKGRpciwgZGVudHJ5KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspOwogfQogCkBAIC0yNjU3LDEyICsyNjgwLDYgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KIApAQCAtMjY4MiwyMiArMjY5OSwxMyBAQAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmFtZWlkYXRhKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9mb2xsb3dfbGluayhkZW50cnksIG5hbWVpZGF0YSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAJcmV0dXJuIGRlbnRyeV9oYXNfcGVybShjcmVkLCBOVUxMLCBkZW50cnksIEZJTEVfX1JFQUQpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoIW1hc2spIHsKIAkJLyogTm8gcGVybWlzc2lvbiB0byBjaGVjay4gIEV4aXN0ZW5jZSB0ZXN0LiAqLwpAQCAtMjcxMSwxMSArMjcxOSw2IEBACiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX3NldGF0dHIoZGVudHJ5LCBpYXR0cik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9GT1JDRSkKIAkJcmV0dXJuIDA7CkBAIC0yNzY5LDcgKzI3NzIsNyBAQAogCQlyZXR1cm4gc2VsaW51eF9pbm9kZV9zZXRvdGhlcnhhdHRyKGRlbnRyeSwgbmFtZSk7CiAKIAlzYnNlYyA9IGlub2RlLT5pX3NiLT5zX3NlY3VyaXR5OwotCWlmIChzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKQorCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQpAQCAtMjkzMSwxNiArMjkzNCw2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX25lZWRfa2lsbHByaXYoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5pbm9kZV9uZWVkX2tpbGxwcml2KGRlbnRyeSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPmlub2RlX2tpbGxwcml2KGRlbnRyeSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNlbGludXhfaW5vZGVfZ2V0c2VjaWQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpzZWNpZCkKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaW5vZGUtPmlfc2VjdXJpdHk7CkBAIC0zMDc4LDE4ICszMDcxLDEzIEBACiAJCQkJIHVuc2lnbmVkIGxvbmcgcHJvdCkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+ZmlsZV9tcHJvdGVjdCh2bWEsIHJlcXByb3QsIHByb3QpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJaWYgKHNlbGludXhfY2hlY2tyZXFwcm90KQogCQlwcm90ID0gcmVxcHJvdDsKIAogI2lmbmRlZiBDT05GSUdfUFBDMzIKIAlpZiAoKHByb3QgJiBQUk9UX0VYRUMpICYmICEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKSB7Ci0JCXJjID0gMDsKKwkJaW50IHJjID0gMDsKIAkJaWYgKHZtYS0+dm1fc3RhcnQgPj0gdm1hLT52bV9tbS0+c3RhcnRfYnJrICYmCiAJCSAgICB2bWEtPnZtX2VuZCA8PSB2bWEtPnZtX21tLT5icmspIHsKIAkJCXJjID0gY3JlZF9oYXNfcGVybShjcmVkLCBjcmVkLCBQUk9DRVNTX19FWEVDSEVBUCk7CkBAIC0zMjM5LDEyICszMjI3LDYgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfY3JlYXRlKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX2NyZWF0ZShjbG9uZV9mbGFncyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAlyZXR1cm4gY3VycmVudF9oYXNfcGVybShjdXJyZW50LCBQUk9DRVNTX19GT1JLKTsKIH0KIApAQCAtMzI3OCwxNCArMzI2MCw2IEBACiB9CiAKIC8qCi0gKiBjb21taXQgbmV3IGNyZWRlbnRpYWxzCi0gKi8KLXN0YXRpYyB2b2lkIHNlbGludXhfY3JlZF9jb21taXQoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCkKLXsKLQlzZWNvbmRhcnlfb3BzLT5jcmVkX2NvbW1pdChuZXcsIG9sZCk7Ci19Ci0KLS8qCiAgKiBzZXQgdGhlIHNlY3VyaXR5IGRhdGEgZm9yIGEga2VybmVsIHNlcnZpY2UKICAqIC0gYWxsIHRoZSBjcmVhdGlvbiBjb250ZXh0cyBhcmUgc2V0IHRvIHVubGFiZWxsZWQKICAqLwpAQCAtMzMyOSwyOSArMzMwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldHVpZCh1aWRfdCBpZDAsIHVpZF90IGlkMSwgdWlkX3QgaWQyLCBpbnQgZmxhZ3MpCi17Ci0JLyogU2luY2Ugc2V0dWlkIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBwcm9jZXNzLCBhbmQKLQkgICBzaW5jZSB0aGUgU0VMaW51eCBjb250cm9scyBhcmUgbm90IGJhc2VkIG9uIHRoZSBMaW51eAotCSAgIGlkZW50aXR5IGF0dHJpYnV0ZXMsIFNFTGludXggZG9lcyBub3QgbmVlZCB0byBjb250cm9sCi0JICAgdGhpcyBvcGVyYXRpb24uICBIb3dldmVyLCBTRUxpbnV4IGRvZXMgY29udHJvbCB0aGUgdXNlCi0JICAgb2YgdGhlIENBUF9TRVRVSUQgYW5kIENBUF9TRVRHSUQgY2FwYWJpbGl0aWVzIHVzaW5nIHRoZQotCSAgIGNhcGFibGUgaG9vay4gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfZml4X3NldHVpZChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAotCQkJCSAgIGludCBmbGFncykKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+dGFza19maXhfc2V0dWlkKG5ldywgb2xkLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldGdpZChnaWRfdCBpZDAsIGdpZF90IGlkMSwgZ2lkX3QgaWQyLCBpbnQgZmxhZ3MpCi17Ci0JLyogU2VlIHRoZSBjb21tZW50IGZvciBzZXR1aWQgYWJvdmUuICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldHBnaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBwaWRfdCBwZ2lkKQogewogCXJldHVybiBjdXJyZW50X2hhc19wZXJtKHAsIFBST0NFU1NfX1NFVFBHSUQpOwpAQCAtMzM3MiwxNyArMzMyMywxMSBAQAogCSpzZWNpZCA9IHRhc2tfc2lkKHApOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRncm91cHMoc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8pCi17Ci0JLyogU2VlIHRoZSBjb21tZW50IGZvciBzZXR1aWQgYWJvdmUuICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldG5pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZSkKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0bmljZShwLCBuaWNlKTsKKwlyYyA9IGNhcF90YXNrX3NldG5pY2UocCwgbmljZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTMzOTMsNyArMzMzOCw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldGlvcHJpbyhwLCBpb3ByaW8pOworCXJjID0gY2FwX3Rhc2tfc2V0aW9wcmlvKHAsIGlvcHJpbyk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTM0MDgsMTEgKzMzNTMsNiBAQAogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7CiAJc3RydWN0IHJsaW1pdCAqb2xkX3JsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW0gKyByZXNvdXJjZTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0cmxpbWl0KHJlc291cmNlLCBuZXdfcmxpbSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAkvKiBDb250cm9sIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgaGFyZCBsaW1pdCAod2hldGhlcgogCSAgIGxvd2VyaW5nIG9yIHJhaXNpbmcgaXQpLCBzbyB0aGF0IHRoZSBoYXJkIGxpbWl0IGNhbgpAQCAtMzQyOCw3ICszMzY4LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgbHApOworCXJjID0gY2FwX3Rhc2tfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgbHApOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0zNDUxLDEwICszMzkxLDYgQEAKIAl1MzIgcGVybTsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfa2lsbChwLCBpbmZvLCBzaWcsIHNlY2lkKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCWlmICghc2lnKQogCQlwZXJtID0gUFJPQ0VTU19fU0lHTlVMTDsgLyogbnVsbCBzaWduYWw7IGV4aXN0ZW5jZSB0ZXN0ICovCiAJZWxzZQpAQCAtMzQ2NywxOCArMzQwMyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19wcmN0bChpbnQgb3B0aW9uLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcyLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmczLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc1KQotewotCS8qIFRoZSBjdXJyZW50IHByY3RsIG9wZXJhdGlvbnMgZG8gbm90IGFwcGVhciB0byByZXF1aXJlCi0JICAgYW55IFNFTGludXggY29udHJvbHMgc2luY2UgdGhleSBtZXJlbHkgb2JzZXJ2ZSBvciBtb2RpZnkKLQkgICB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKi8KLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+dGFza19wcmN0bChvcHRpb24sIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfdGFza193YWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gdGFza19oYXNfcGVybShwLCBjdXJyZW50LCBQUk9DRVNTX19TSUdDSExEKTsKQEAgLTQwNDcsMTAgKzM5NzEsNiBAQAogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAlpbnQgZXJyOwogCi0JZXJyID0gc2Vjb25kYXJ5X29wcy0+dW5peF9zdHJlYW1fY29ubmVjdChzb2NrLCBvdGhlciwgbmV3c2spOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAlpc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKIAlvdGhlcl9pc2VjID0gU09DS19JTk9ERShvdGhlciktPmlfc2VjdXJpdHk7CiAKQEAgLTQ4NDQsNyArNDc2NCw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHNlY29uZGFyeV9vcHMtPm5ldGxpbmtfc2VuZChzaywgc2tiKTsKKwllcnIgPSBjYXBfbmV0bGlua19zZW5kKHNrLCBza2IpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQ4NTksNyArNDc3OSw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT5uZXRsaW5rX3JlY3Yoc2tiLCBjYXBhYmlsaXR5KTsKKwllcnIgPSBjYXBfbmV0bGlua19yZWN2KHNrYiwgY2FwYWJpbGl0eSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTE2NywxMSArNTA4Nyw2IEBACiAJCQkgICAgIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQogewogCXUzMiBwZXJtczsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNobV9zaG1hdChzaHAsIHNobWFkZHIsIHNobWZsZyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoc2htZmxnICYgU0hNX1JET05MWSkKIAkJcGVybXMgPSBTSE1fX1JFQUQ7CkBAIC01NTgxLDcgKzU0OTYsNiBAQAogCS5uZXRsaW5rX3JlY3YgPQkJCXNlbGludXhfbmV0bGlua19yZWN2LAogCiAJLmJwcm1fc2V0X2NyZWRzID0JCXNlbGludXhfYnBybV9zZXRfY3JlZHMsCi0JLmJwcm1fY2hlY2tfc2VjdXJpdHkgPQkJc2VsaW51eF9icHJtX2NoZWNrX3NlY3VyaXR5LAogCS5icHJtX2NvbW1pdHRpbmdfY3JlZHMgPQlzZWxpbnV4X2Jwcm1fY29tbWl0dGluZ19jcmVkcywKIAkuYnBybV9jb21taXR0ZWRfY3JlZHMgPQkJc2VsaW51eF9icHJtX2NvbW1pdHRlZF9jcmVkcywKIAkuYnBybV9zZWN1cmVleGVjID0JCXNlbGludXhfYnBybV9zZWN1cmVleGVjLApAQCAtNTYyMyw4ICs1NTM3LDYgQEAKIAkuaW5vZGVfZ2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWN1cml0eSwKIAkuaW5vZGVfc2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9zZXRzZWN1cml0eSwKIAkuaW5vZGVfbGlzdHNlY3VyaXR5ID0JCXNlbGludXhfaW5vZGVfbGlzdHNlY3VyaXR5LAotCS5pbm9kZV9uZWVkX2tpbGxwcml2ID0JCXNlbGludXhfaW5vZGVfbmVlZF9raWxscHJpdiwKLQkuaW5vZGVfa2lsbHByaXYgPQkJc2VsaW51eF9pbm9kZV9raWxscHJpdiwKIAkuaW5vZGVfZ2V0c2VjaWQgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWNpZCwKIAogCS5maWxlX3Blcm1pc3Npb24gPQkJc2VsaW51eF9maWxlX3Blcm1pc3Npb24sCkBAIC01NjQ0LDE3ICs1NTU2LDEyIEBACiAJLnRhc2tfY3JlYXRlID0JCQlzZWxpbnV4X3Rhc2tfY3JlYXRlLAogCS5jcmVkX2ZyZWUgPQkJCXNlbGludXhfY3JlZF9mcmVlLAogCS5jcmVkX3ByZXBhcmUgPQkJCXNlbGludXhfY3JlZF9wcmVwYXJlLAotCS5jcmVkX2NvbW1pdCA9CQkJc2VsaW51eF9jcmVkX2NvbW1pdCwKIAkua2VybmVsX2FjdF9hcyA9CQlzZWxpbnV4X2tlcm5lbF9hY3RfYXMsCiAJLmtlcm5lbF9jcmVhdGVfZmlsZXNfYXMgPQlzZWxpbnV4X2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMsCi0JLnRhc2tfc2V0dWlkID0JCQlzZWxpbnV4X3Rhc2tfc2V0dWlkLAotCS50YXNrX2ZpeF9zZXR1aWQgPQkJc2VsaW51eF90YXNrX2ZpeF9zZXR1aWQsCi0JLnRhc2tfc2V0Z2lkID0JCQlzZWxpbnV4X3Rhc2tfc2V0Z2lkLAogCS50YXNrX3NldHBnaWQgPQkJCXNlbGludXhfdGFza19zZXRwZ2lkLAogCS50YXNrX2dldHBnaWQgPQkJCXNlbGludXhfdGFza19nZXRwZ2lkLAogCS50YXNrX2dldHNpZCA9CQkJc2VsaW51eF90YXNrX2dldHNpZCwKIAkudGFza19nZXRzZWNpZCA9CQlzZWxpbnV4X3Rhc2tfZ2V0c2VjaWQsCi0JLnRhc2tfc2V0Z3JvdXBzID0JCXNlbGludXhfdGFza19zZXRncm91cHMsCiAJLnRhc2tfc2V0bmljZSA9CQkJc2VsaW51eF90YXNrX3NldG5pY2UsCiAJLnRhc2tfc2V0aW9wcmlvID0JCXNlbGludXhfdGFza19zZXRpb3ByaW8sCiAJLnRhc2tfZ2V0aW9wcmlvID0JCXNlbGludXhfdGFza19nZXRpb3ByaW8sCkBAIC01NjY0LDcgKzU1NzEsNiBAQAogCS50YXNrX21vdmVtZW1vcnkgPQkJc2VsaW51eF90YXNrX21vdmVtZW1vcnksCiAJLnRhc2tfa2lsbCA9CQkJc2VsaW51eF90YXNrX2tpbGwsCiAJLnRhc2tfd2FpdCA9CQkJc2VsaW51eF90YXNrX3dhaXQsCi0JLnRhc2tfcHJjdGwgPQkJCXNlbGludXhfdGFza19wcmN0bCwKIAkudGFza190b19pbm9kZSA9CQlzZWxpbnV4X3Rhc2tfdG9faW5vZGUsCiAKIAkuaXBjX3Blcm1pc3Npb24gPQkJc2VsaW51eF9pcGNfcGVybWlzc2lvbiwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKaW5kZXggYzBjODg1NC4uMzFkZjFkNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fRVhFQ01PRCwgImV4ZWNtb2QiKQogICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19CTEtfRklMRSwgQkxLX0ZJTEVfX09QRU4sICJvcGVuIikKKyAgIFNfKFNFQ0NMQVNTX1NPQ0tfRklMRSwgU09DS19GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19GSUZPX0ZJTEUsIEZJRk9fRklMRV9fT1BFTiwgIm9wZW4iKQogICAgU18oU0VDQ0xBU1NfRkQsIEZEX19VU0UsICJ1c2UiKQogICAgU18oU0VDQ0xBU1NfVENQX1NPQ0tFVCwgVENQX1NPQ0tFVF9fQ09OTkVDVFRPLCAiY29ubmVjdHRvIikKQEAgLTE1Miw2ICsxNTMsNyBAQAogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVksICJubG1zZ19yZWxheSIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWLCAibmxtc2dfcmVhZHByaXYiKQorICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQsICJubG1zZ190dHlfYXVkaXQiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQsIE5FVExJTktfSVA2RldfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRU5EVE8sICJzZW5kdG8iKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAppbmRleCAwYmE3OWZlLi5kNjQ1MTkyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApAQCAtMTc0LDYgKzE3NCw3IEBACiAjZGVmaW5lIFNPQ0tfRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAogI2RlZmluZSBTT0NLX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKICNkZWZpbmUgU09DS19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCisjZGVmaW5lIFNPQ0tfRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAogI2RlZmluZSBGSUZPX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgRklGT19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIEZJRk9fRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApAQCAtNzA3LDYgKzcwOCw3IEBACiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSAgICAgICAgIDB4MDA4MDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVkgICAgICAgICAweDAxMDAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWICAgICAgMHgwMjAwMDAwMFVMCisjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQgICAgIDB4MDQwMDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19XUklURSAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCmluZGV4IDNjYzQ1MTYuLmM0ZTA2MjMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKQEAgLTYwLDkgKzYwLDcgQEAKIAl1MzIgZGVmX3NpZDsJCQkvKiBkZWZhdWx0IFNJRCBmb3IgbGFiZWxpbmcgKi8KIAl1MzIgbW50cG9pbnRfc2lkOwkJLyogU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UIGNvbnRleHQgZm9yIGZpbGVzICovCiAJdW5zaWduZWQgaW50IGJlaGF2aW9yOwkJLyogbGFiZWxpbmcgYmVoYXZpb3IgKi8KLQl1bnNpZ25lZCBjaGFyIGluaXRpYWxpemVkOwkvKiBpbml0aWFsaXphdGlvbiBmbGFnICovCiAJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIHdoaWNoIG1vdW50IG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHByb2M7CQkvKiBwcm9jIGZzICovCiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBpc2VjX2hlYWQ7CiAJc3BpbmxvY2tfdCBpc2VjX2xvY2s7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCmluZGV4IDcyNDQ3MzcuLjVjMzQzNGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCkBAIC0zNywxNSArMzcsMjMgQEAKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9NQVgJUE9MSUNZREJfVkVSU0lPTl9CT1VOREFSWQogI2VuZGlmCiAKKy8qIE1hc2sgZm9yIGp1c3QgdGhlIG1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfTU5UTUFTSwkweDBmCisvKiBTdXBlciBibG9jayBzZWN1cml0eSBzdHJ1Y3QgZmxhZ3MgZm9yIG1vdW50IG9wdGlvbnMgKi8KICNkZWZpbmUgQ09OVEVYVF9NTlQJMHgwMQogI2RlZmluZSBGU0NPTlRFWFRfTU5UCTB4MDIKICNkZWZpbmUgUk9PVENPTlRFWFRfTU5UCTB4MDQKICNkZWZpbmUgREVGQ09OVEVYVF9NTlQJMHgwOAorLyogTm9uLW1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfU0JJTklUSUFMSVpFRAkweDEwCisjZGVmaW5lIFNFX1NCUFJPQwkJMHgyMAorI2RlZmluZSBTRV9TQkxBQkVMU1VQUAkweDQwCiAKICNkZWZpbmUgQ09OVEVYVF9TVFIJImNvbnRleHQ9IgogI2RlZmluZSBGU0NPTlRFWFRfU1RSCSJmc2NvbnRleHQ9IgogI2RlZmluZSBST09UQ09OVEVYVF9TVFIJInJvb3Rjb250ZXh0PSIKICNkZWZpbmUgREVGQ09OVEVYVF9TVFIJImRlZmNvbnRleHQ9IgorI2RlZmluZSBMQUJFTFNVUFBfU1RSICJzZWNsYWJlbCIKIAogc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cjsKIApAQCAtODAsNyArODgsNiBAQAogI2RlZmluZSBTRUxfVkVDX01BWCAzMgogc3RydWN0IGF2X2RlY2lzaW9uIHsKIAl1MzIgYWxsb3dlZDsKLQl1MzIgZGVjaWRlZDsKIAl1MzIgYXVkaXRhbGxvdzsKIAl1MzIgYXVkaXRkZW55OwogCXUzMiBzZXFubzsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwppbmRleCBmNTg3MDFhLi4zNTA3OTRhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCkBAIC0zODYsMTEgKzM4NiwxMiBAQAogCWlmICghU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkgfHwKIAkgICAgKChtYXNrICYgKE1BWV9XUklURSB8IE1BWV9BUFBFTkQpKSA9PSAwKSkKIAkJcmV0dXJuIDA7Ci0KIAlzb2NrID0gU09DS0VUX0koaW5vZGUpOwogCXNrID0gc29jay0+c2s7CisJaWYgKHNrID09IE5VTEwpCisJCXJldHVybiAwOwogCXNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpCisJaWYgKHNrc2VjID09IE5VTEwgfHwgc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKQogCQlyZXR1cm4gMDsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKQEAgLTQ5MCw4ICs0OTEsMTAgQEAKIAkJbG9ja19zb2NrKHNrKTsKIAkJcmMgPSBuZXRsYmxfc29ja19nZXRhdHRyKHNrLCAmc2VjYXR0cik7CiAJCXJlbGVhc2Vfc29jayhzayk7Ci0JCWlmIChyYyA9PSAwICYmIHNlY2F0dHIuZmxhZ3MgIT0gTkVUTEJMX1NFQ0FUVFJfTk9ORSkKKwkJaWYgKHJjID09IDApCiAJCQlyYyA9IC1FQUNDRVM7CisJCWVsc2UgaWYgKHJjID09IC1FTk9NU0cpCisJCQlyYyA9IDA7CiAJCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOwogCX0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCmluZGV4IDRlZDdiYWIuLmM2ODc1ZmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXsgQVVESVRfVVNFUiwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICB9LAogCXsgQVVESVRfU0lHTkFMX0lORk8sCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICB9LAogCXsgQVVESVRfVFRZX0dFVCwJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgICAgIH0sCi0JeyBBVURJVF9UVFlfU0VULAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgfSwKKwl7IEFVRElUX1RUWV9TRVQsCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggMDFlYzZkMi4uZDNjOGI5OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC01OTUsNyArNTk1LDcgQEAKIAogCWxlbmd0aCA9IHNjbnByaW50ZihidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwKIAkJCSAgIiV4ICV4ICV4ICV4ICV1IiwKLQkJCSAgYXZkLmFsbG93ZWQsIGF2ZC5kZWNpZGVkLAorCQkJICBhdmQuYWxsb3dlZCwgMHhmZmZmZmZmZiwKIAkJCSAgYXZkLmF1ZGl0YWxsb3csIGF2ZC5hdWRpdGRlbnksCiAJCQkgIGF2ZC5zZXFubyk7CiBvdXQyOgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGM2NWU0ZmUuLmRlZWVjNmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTQwNyw3ICs0MDcsNiBAQAogCSAqIEluaXRpYWxpemUgdGhlIGFjY2VzcyB2ZWN0b3JzIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4KIAkgKi8KIAlhdmQtPmFsbG93ZWQgPSAwOwotCWF2ZC0+ZGVjaWRlZCA9IDB4ZmZmZmZmZmY7CiAJYXZkLT5hdWRpdGFsbG93ID0gMDsKIAlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CiAJYXZkLT5zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKQEAgLTc0Myw3ICs3NDIsNiBAQAogCiAJaWYgKCFzc19pbml0aWFsaXplZCkgewogCQlhdmQtPmFsbG93ZWQgPSAweGZmZmZmZmZmOwotCQlhdmQtPmRlY2lkZWQgPSAweGZmZmZmZmZmOwogCQlhdmQtPmF1ZGl0YWxsb3cgPSAwOwogCQlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CiAJCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCmluZGV4IDJlMGI4M2UuLmNmYTE5Y2EgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCkBAIC0xNjIsOCArMTYyLDggQEAKIAogLyoqCiAgKiBzbWtfY3VyYWNjIC0gZGV0ZXJtaW5lIGlmIGN1cnJlbnQgaGFzIGEgc3BlY2lmaWMgYWNjZXNzIHRvIGFuIG9iamVjdAotICogQG9iamVjdF9sYWJlbDogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QncyBTbWFjayBsYWJlbAotICogQHJlcXVlc3Q6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkLCBpbiAiTUFZIiBmb3JtYXQKKyAqIEBvYmpfbGFiZWw6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0J3MgU21hY2sgbGFiZWwKKyAqIEBtb2RlOiB0aGUgYWNjZXNzIHJlcXVlc3RlZCwgaW4gIk1BWSIgZm9ybWF0CiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGN1cnJlbnQgc3ViamVjdCBsYWJlbC9vYmplY3QgbGFiZWwgcGFpcgogICogaW4gdGhlIGFjY2VzcyBydWxlIGxpc3QgYW5kIHJldHVybnMgMCBpZiB0aGUgYWNjZXNzIGlzIHBlcm1pdHRlZCwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggMDI3OGJjMC4uODRiNjJiNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTkxLDYgKzkxLDcgQEAKIC8qKgogICogc21hY2tfcHRyYWNlX21heV9hY2Nlc3MgLSBTbWFjayBhcHByb3ZhbCBvbiBQVFJBQ0VfQVRUQUNICiAgKiBAY3RwOiBjaGlsZCB0YXNrIHBvaW50ZXIKKyAqIEBtb2RlOiBwdHJhY2UgYXR0YWNobWVudCBtb2RlCiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBPSywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqCkBAIC0yMDMsOSArMjA0LDggQEAKIAogLyoqCiAgKiBzbWFja19zYl9jb3B5X2RhdGEgLSBjb3B5IG1vdW50IG9wdGlvbnMgZGF0YSBmb3IgcHJvY2Vzc2luZwotICogQHR5cGU6IGZpbGUgc3lzdGVtIHR5cGUKICAqIEBvcmlnOiB3aGVyZSB0byBzdGFydAotICogQHNtYWNrb3B0cworICogQHNtYWNrb3B0czogbW91bnQgb3B0aW9ucyBzdHJpbmcKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIG9uIGVycm9yLgogICoKQEAgLTMzMSw3ICszMzEsNyBAQAogLyoqCiAgKiBzbWFja19zYl9tb3VudCAtIFNtYWNrIGNoZWNrIGZvciBtb3VudGluZwogICogQGRldl9uYW1lOiB1bnVzZWQKLSAqIEBuZDogbW91bnQgcG9pbnQKKyAqIEBwYXRoOiBtb3VudCBwb2ludAogICogQHR5cGU6IHVudXNlZAogICogQGZsYWdzOiB1bnVzZWQKICAqIEBkYXRhOiB1bnVzZWQKQEAgLTM3MCw3ICszNzAsNyBAQAogCiAvKioKICAqIHNtYWNrX2lub2RlX2FsbG9jX3NlY3VyaXR5IC0gYWxsb2NhdGUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIGluIG5lZWQgb2YgYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBuZWVkIG9mIGEgYmxvYgogICoKICAqIFJldHVybnMgMCBpZiBpdCBnZXRzIGEgYmxvYiwgLUVOT01FTSBvdGhlcndpc2UKICAqLwpAQCAtMzg0LDcgKzM4NCw3IEBACiAKIC8qKgogICogc21hY2tfaW5vZGVfZnJlZV9zZWN1cml0eSAtIGZyZWUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIHdpdGggYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSB3aXRoIGEgYmxvYgogICoKICAqIENsZWFycyB0aGUgYmxvYiBwb2ludGVyIGluIGlub2RlCiAgKi8KQEAgLTUzOCw3ICs1MzgsNiBAQAogICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCi0gKiBAbmQ6IHVudXNlZAogICoKICAqIFRoaXMgaXMgdGhlIGltcG9ydGFudCBTbWFjayBob29rLgogICoKQEAgLTcwMSw4ICs3MDAsNyBAQAogICogQGlub2RlOiB0aGUgb2JqZWN0CiAgKiBAbmFtZTogYXR0cmlidXRlIG5hbWUKICAqIEBidWZmZXI6IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0Ci0gKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYnVmZmVyCi0gKiBAZXJyOiB1bnVzZWQKKyAqIEBhbGxvYzogdW51c2VkCiAgKgogICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIG9yIGFuIGVycm9yIGNvZGUKICAqLwpAQCAtODY0LDcgKzg2Miw3IEBACiAvKioKICAqIHNtYWNrX2ZpbGVfbG9jayAtIFNtYWNrIGNoZWNrIG9uIGZpbGUgbG9ja2luZwogICogQGZpbGU6IHRoZSBvYmplY3QKLSAqIEBjbWQgdW51c2VkCisgKiBAY21kOiB1bnVzZWQKICAqCiAgKiBSZXR1cm5zIDAgaWYgY3VycmVudCBoYXMgd3JpdGUgYWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCkBAIC0xMDAzLDggKzEwMDEsOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogY29tbWl0IG5ldyBjcmVkZW50aWFscworLyoqCisgKiBzbWFja19jcmVkX2NvbW1pdCAtIGNvbW1pdCBuZXcgY3JlZGVudGlhbHMKICAqIEBuZXc6IHRoZSBuZXcgY3JlZGVudGlhbHMKICAqIEBvbGQ6IHRoZSBvcmlnaW5hbCBjcmVkZW50aWFscwogICovCkBAIC0xMDE0LDggKzEwMTIsOCBAQAogCiAvKioKICAqIHNtYWNrX2tlcm5lbF9hY3RfYXMgLSBTZXQgdGhlIHN1YmplY3RpdmUgY29udGV4dCBpbiBhIHNldCBvZiBjcmVkZW50aWFscwotICogQG5ldyBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZC4KLSAqIEBzZWNpZCBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5IElEIHRvIGJlIHNldAorICogQG5ldzogcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQuCisgKiBAc2VjaWQ6IHNwZWNpZmllcyB0aGUgc2VjdXJpdHkgSUQgdG8gYmUgc2V0CiAgKgogICogU2V0IHRoZSBzZWN1cml0eSBkYXRhIGZvciBhIGtlcm5lbCBzZXJ2aWNlLgogICovCkBAIC0xMDMyLDggKzEwMzAsOCBAQAogCiAvKioKICAqIHNtYWNrX2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMgLSBTZXQgdGhlIGZpbGUgY3JlYXRpb24gbGFiZWwgaW4gYSBzZXQgb2YgY3JlZHMKLSAqIEBuZXcgcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQKLSAqIEBpbm9kZSBwb2ludHMgdG8gdGhlIGlub2RlIHRvIHVzZSBhcyBhIHJlZmVyZW5jZQorICogQG5ldzogcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQKKyAqIEBpbm9kZTogcG9pbnRzIHRvIHRoZSBpbm9kZSB0byB1c2UgYXMgYSByZWZlcmVuY2UKICAqCiAgKiBTZXQgdGhlIGZpbGUgY3JlYXRpb24gY29udGV4dCBpbiBhIHNldCBvZiBjcmVkZW50aWFscyB0byB0aGUgc2FtZQogICogYXMgdGhlIG9iamVjdGl2ZSBjb250ZXh0IG9mIHRoZSBzcGVjaWZpZWQgaW5vZGUKQEAgLTEyNDIsNyArMTI0MCw3IEBACiAvKioKICAqIHNtYWNrX3Rhc2tfdG9faW5vZGUgLSBjb3B5IHRhc2sgc21hY2sgaW50byB0aGUgaW5vZGUgYmxvYgogICogQHA6IHRhc2sgdG8gY29weSBmcm9tCi0gKiBpbm9kZTogaW5vZGUgdG8gY29weSB0bworICogQGlub2RlOiBpbm9kZSB0byBjb3B5IHRvCiAgKgogICogU2V0cyB0aGUgc21hY2sgcG9pbnRlciBpbiB0aGUgaW5vZGUgc2VjdXJpdHkgYmxvYgogICovCkBAIC0xMjYwLDcgKzEyNTgsNyBAQAogICogc21hY2tfc2tfYWxsb2Nfc2VjdXJpdHkgLSBBbGxvY2F0ZSBhIHNvY2tldCBibG9iCiAgKiBAc2s6IHRoZSBzb2NrZXQKICAqIEBmYW1pbHk6IHVudXNlZAotICogQHByaW9yaXR5OiBtZW1vcnkgYWxsb2NhdGlvbiBwcmlvcml0eQorICogQGdmcF9mbGFnczogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBBc3NpZ24gU21hY2sgcG9pbnRlcnMgdG8gY3VycmVudAogICoKQEAgLTE0OTgsNTggKzE0OTYsMzEgQEAKICAqIGxvb2tzIGZvciBob3N0IGJhc2VkIGFjY2VzcyByZXN0cmljdGlvbnMKICAqCiAgKiBUaGlzIHZlcnNpb24gd2lsbCBvbmx5IGJlIGFwcHJvcHJpYXRlIGZvciByZWFsbHkgc21hbGwKLSAqIHNldHMgb2Ygc2luZ2xlIGxhYmVsIGhvc3RzLiBCZWNhdXNlIG9mIHRoZSBtYXNraW5nCi0gKiBpdCBjYW5ub3Qgc2hvcnRjdXQgb3V0IG9uIHRoZSBmaXJzdCBtYXRjaC4gVGhlcmUgYXJlCi0gKiBudW1lcmlvdXMgd2F5cyB0byBhZGRyZXNzIHRoZSBwcm9ibGVtLCBidXQgbm9uZSBvZiB0aGVtCi0gKiBoYXZlIGJlZW4gYXBwbGllZCBoZXJlLgorICogc2V0cyBvZiBzaW5nbGUgbGFiZWwgaG9zdHMuCiAgKgogICogUmV0dXJucyB0aGUgbGFiZWwgb2YgdGhlIGZhciBlbmQgb3IgTlVMTCBpZiBpdCdzIG5vdCBzcGVjaWFsLgogICovCiBzdGF0aWMgY2hhciAqc21hY2tfaG9zdF9sYWJlbChzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpcCkKIHsKIAlzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKnNucDsKLQljaGFyICpiZXN0bGFiZWwgPSBOVUxMOwogCXN0cnVjdCBpbl9hZGRyICpzaWFwID0gJnNpcC0+c2luX2FkZHI7Ci0Jc3RydWN0IGluX2FkZHIgKmxpYXA7Ci0Jc3RydWN0IGluX2FkZHIgKm1pYXA7Ci0Jc3RydWN0IGluX2FkZHIgYmVzdG1hc2s7CiAKIAlpZiAoc2lhcC0+c19hZGRyID09IDApCiAJCXJldHVybiBOVUxMOwogCi0JYmVzdG1hc2suc19hZGRyID0gMDsKLQogCWZvciAoc25wID0gc21hY2tfbmV0bGJsYWRkcnM7IHNucCAhPSBOVUxMOyBzbnAgPSBzbnAtPnNta19uZXh0KSB7Ci0JCWxpYXAgPSAmc25wLT5zbWtfaG9zdC5zaW5fYWRkcjsKLQkJbWlhcCA9ICZzbnAtPnNta19tYXNrOwogCQkvKgotCQkgKiBJZiB0aGUgYWRkcmVzc2VzIG1hdGNoIGFmdGVyIGFwcGx5aW5nIHRoZSBsaXN0IGVudHJ5IG1hc2sKLQkJICogdGhlIGVudHJ5IG1hdGNoZXMgdGhlIGFkZHJlc3MuIElmIGl0IGRvZXNuJ3QgbW92ZSBhbG9uZyB0bwotCQkgKiB0aGUgbmV4dCBlbnRyeS4KKwkJICogd2UgYnJlYWsgYWZ0ZXIgZmluZGluZyB0aGUgZmlyc3QgbWF0Y2ggYmVjYXVzZQorCQkgKiB0aGUgbGlzdCBpcyBzb3J0ZWQgZnJvbSBsb25nZXN0IHRvIHNob3J0ZXN0IG1hc2sKKwkJICogc28gd2UgaGF2ZSBmb3VuZCB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaAogCQkgKi8KLQkJaWYgKChsaWFwLT5zX2FkZHIgJiBtaWFwLT5zX2FkZHIpICE9Ci0JCSAgICAoc2lhcC0+c19hZGRyICYgbWlhcC0+c19hZGRyKSkKLQkJCWNvbnRpbnVlOwotCQkvKgotCQkgKiBJZiB0aGUgbGlzdCBlbnRyeSBtYXNrIGlkZW50aWZpZXMgYSBzaW5nbGUgYWRkcmVzcwotCQkgKiBpdCBjYW4ndCBnZXQgYW55IG1vcmUgc3BlY2lmaWMuCi0JCSAqLwotCQlpZiAobWlhcC0+c19hZGRyID09IDB4ZmZmZmZmZmYpCisJCWlmICgoJnNucC0+c21rX2hvc3Quc2luX2FkZHIpLT5zX2FkZHIgID09CisJCQkoc2lhcC0+c19hZGRyICYgKCZzbnAtPnNta19tYXNrKS0+c19hZGRyKSkgewogCQkJcmV0dXJuIHNucC0+c21rX2xhYmVsOwotCQkvKgotCQkgKiBJZiB0aGUgbGlzdCBlbnRyeSBtYXNrIGlzIGxlc3Mgc3BlY2lmaWMgdGhhbiB0aGUgYmVzdAotCQkgKiBhbHJlYWR5IGZvdW5kIHRoaXMgZW50cnkgaXMgdW5pbnRlcmVzdGluZy4KLQkJICovCi0JCWlmICgobWlhcC0+c19hZGRyIHwgYmVzdG1hc2suc19hZGRyKSA9PSBiZXN0bWFzay5zX2FkZHIpCi0JCQljb250aW51ZTsKLQkJLyoKLQkJICogVGhpcyBpcyBiZXR0ZXIgdGhhbiBhbnkgZW50cnkgZm91bmQgc28gZmFyLgotCQkgKi8KLQkJYmVzdG1hc2suc19hZGRyID0gbWlhcC0+c19hZGRyOwotCQliZXN0bGFiZWwgPSBzbnAtPnNta19sYWJlbDsKKwkJfQogCX0KIAotCXJldHVybiBiZXN0bGFiZWw7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtMjAwMSw3ICsxOTcyLDcgQEAKIAogLyoqCiAgKiBzbWFja19pcGNfZ2V0c2VjaWQgLSBFeHRyYWN0IHNtYWNrIHNlY3VyaXR5IGlkCi0gKiBAaXBjcDogdGhlIG9iamVjdCBwZXJtaXNzaW9ucworICogQGlwcDogdGhlIG9iamVjdCBwZXJtaXNzaW9ucwogICogQHNlY2lkOiB3aGVyZSByZXN1bHQgd2lsbCBiZSBzYXZlZAogICovCiBzdGF0aWMgdm9pZCBzbWFja19pcGNfZ2V0c2VjaWQoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwcCwgdTMyICpzZWNpZCkKQEAgLTIyNzgsNyArMjI0OSw3IEBACiAvKioKICAqIHNtYWNrX3NvY2tldF9zZW5kbXNnIC0gU21hY2sgY2hlY2sgYmFzZWQgb24gZGVzdGluYXRpb24gaG9zdAogICogQHNvY2s6IHRoZSBzb2NrZXQKLSAqIEBtc2doZHI6IHRoZSBtZXNzYWdlCisgKiBAbXNnOiB0aGUgbWVzc2FnZQogICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlCiAgKgogICogUmV0dXJuIDAgaWYgdGhlIGN1cnJlbnQgc3ViamVjdCBjYW4gd3JpdGUgdG8gdGhlIGRlc3RpbmF0aW9uCkBAIC0yMzE5LDggKzIyOTAsNyBAQAogCiAKIC8qKgotICogc21hY2tfZnJvbV9zZWNhdHRyIC0gQ29udmVydCBhIG5ldGxhYmVsIGF0dHIubWxzLmx2bC9hdHRyLm1scy5jYXQKLSAqIAlwYWlyIHRvIHNtYWNrCisgKiBzbWFja19mcm9tX3NlY2F0dHIgLSBDb252ZXJ0IGEgbmV0bGFiZWwgYXR0ci5tbHMubHZsL2F0dHIubWxzLmNhdCBwYWlyIHRvIHNtYWNrCiAgKiBAc2FwOiBuZXRsYWJlbCBzZWNhdHRyCiAgKiBAc2lwOiB3aGVyZSB0byBwdXQgdGhlIHJlc3VsdAogICoKQEAgLTI0NDEsNyArMjQxMSw3IEBACiAgKiBAc29jazogdGhlIHNvY2tldAogICogQG9wdHZhbDogdXNlcidzIGRlc3RpbmF0aW9uCiAgKiBAb3B0bGVuOiBzaXplIHRoZXJlb2YKLSAqIEBsZW46IG1heCB0aGVyZW9lCisgKiBAbGVuOiBtYXggdGhlcmVvZgogICoKICAqIHJldHVybnMgemVybyBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCkBAIC0yNzc2LDcgKzI3NDYsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0FVRElUICovCiAKLS8qCisvKioKICAqIHNtYWNrX3NlY2lkX3RvX3NlY2N0eCAtIHJldHVybiB0aGUgc21hY2sgbGFiZWwgZm9yIGEgc2VjaWQKICAqIEBzZWNpZDogaW5jb21pbmcgaW50ZWdlcgogICogQHNlY2RhdGE6IGRlc3RpbmF0aW9uCkBAIC0yNzkzLDcgKzI3NjMsNyBAQAogCXJldHVybiAwOwogfQogCi0vKgorLyoqCiAgKiBzbWFja19zZWNjdHhfdG9fc2VjaWQgLSByZXR1cm4gdGhlIHNlY2lkIGZvciBhIHNtYWNrIGxhYmVsCiAgKiBAc2VjZGF0YTogc21hY2sgbGFiZWwKICAqIEBzZWNsZW46IGhvdyBsb25nIHJlc3VsdCBpcwpAQCAtMjgwNywxMSArMjc3NywxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgorLyoqCiAgKiBzbWFja19yZWxlYXNlX3NlY2N0eCAtIGRvbid0IGRvIGFueXRoaW5nLgotICogQGtleV9yZWY6IHVudXNlZAotICogQGNvbnRleHQ6IHVudXNlZAotICogQHBlcm06IHVudXNlZAorICogQHNlY2RhdGE6IHVudXNlZAorICogQHNlY2xlbjogdW51c2VkCiAgKgogICogRXhpc3RzIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGdldHMgZG9uZSwgYW5kIHByb3Blcmx5CiAgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwppbmRleCA4ZTQyODAwLi5hMWI1N2U0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfbG9hZCAtIHdyaXRlKCkgZm9yIC9zbWFjay9sb2FkCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydCAtIG11c3QgYmUgMApAQCAtNDAyLDYgKzQwMiw3IEBACiAKIC8qKgogICogc21rX3VubGJsX2FtYmllbnQgLSBpbml0aWFsaXplIHRoZSB1bmxhYmVsZWQgZG9tYWluCisgKiBAb2xkYW1iaWVudDogcHJldmlvdXMgZG9tYWluIHN0cmluZwogICovCiBzdGF0aWMgdm9pZCBzbWtfdW5sYmxfYW1iaWVudChjaGFyICpvbGRhbWJpZW50KQogewpAQCAtNTEzLDcgKzUxNCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2NpcHNvIC0gd3JpdGUoKSBmb3IgL3NtYWNrL2NpcHNvCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtNjUwLDEwICs2NTEsNiBAQAogCiAJcmV0dXJuIHNrcDsKIH0KLS8qCi0jZGVmaW5lIEJFTUFTSwkweDgwMDAwMDAwCi0qLwotI2RlZmluZSBCRU1BU0sJMHgwMDAwMDAwMQogI2RlZmluZSBCRUJJVFMJKHNpemVvZihfX2JlMzIpICogOCkKIAogLyoKQEAgLTY2MywxMiArNjYwLDEwIEBACiB7CiAJc3RydWN0IHNta19uZXRsYmxhZGRyICpza3AgPSAoc3RydWN0IHNta19uZXRsYmxhZGRyICopIHY7CiAJdW5zaWduZWQgY2hhciAqaHAgPSAoY2hhciAqKSAmc2twLT5zbWtfaG9zdC5zaW5fYWRkci5zX2FkZHI7Ci0JX19iZTMyIGJlYml0czsKLQlpbnQgbWFza24gPSAwOworCWludCBtYXNrbjsKKwl1MzIgdGVtcF9tYXNrID0gYmUzMl90b19jcHUoc2twLT5zbWtfbWFzay5zX2FkZHIpOwogCi0JZm9yIChiZWJpdHMgPSBCRU1BU0s7IGJlYml0cyAhPSAwOyBtYXNrbisrLCBiZWJpdHMgPDw9IDEpCi0JCWlmICgoc2twLT5zbWtfbWFzay5zX2FkZHIgJiBiZWJpdHMpID09IDApCi0JCQlicmVhazsKKwlmb3IgKG1hc2tuID0gMDsgdGVtcF9tYXNrOyB0ZW1wX21hc2sgPDw9IDEsIG1hc2tuKyspOwogCiAJc2VxX3ByaW50ZihzLCAiJXUuJXUuJXUuJXUvJWQgJXNcbiIsCiAJCWhwWzBdLCBocFsxXSwgaHBbMl0sIGhwWzNdLCBtYXNrbiwgc2twLT5zbWtfbGFiZWwpOwpAQCAtNzAyLDggKzY5Nyw0NCBAQAogfQogCiAvKioKKyAqIHNta19uZXRsYmxhZGRyX2luc2VydAorICogQG5ldyA6IG5ldGxhYmVsIHRvIGluc2VydAorICoKKyAqIFRoaXMgaGVscGVyIGluc2VydCBuZXRsYWJlbCBpbiB0aGUgc21hY2tfbmV0bGJsYWRkcnMgbGlzdAorICogc29ydGVkIGJ5IG5ldG1hc2sgbGVuZ3RoIChsb25nZXN0IHRvIHNtYWxsZXN0KQorICovCitzdGF0aWMgdm9pZCBzbWtfbmV0bGJsYWRkcl9pbnNlcnQoc3RydWN0IHNta19uZXRsYmxhZGRyICpuZXcpCit7CisJc3RydWN0IHNta19uZXRsYmxhZGRyICptOworCisJaWYgKHNtYWNrX25ldGxibGFkZHJzID09IE5VTEwpIHsKKwkJc21hY2tfbmV0bGJsYWRkcnMgPSBuZXc7CisJCXJldHVybjsKKwl9CisKKwkvKiB0aGUgY29tcGFyaXNvbiAnPicgaXMgYSBiaXQgaGFja3ksIGJ1dCB3b3JrcyAqLworCWlmIChuZXctPnNta19tYXNrLnNfYWRkciA+IHNtYWNrX25ldGxibGFkZHJzLT5zbWtfbWFzay5zX2FkZHIpIHsKKwkJbmV3LT5zbWtfbmV4dCA9IHNtYWNrX25ldGxibGFkZHJzOworCQlzbWFja19uZXRsYmxhZGRycyA9IG5ldzsKKwkJcmV0dXJuOworCX0KKwlmb3IgKG0gPSBzbWFja19uZXRsYmxhZGRyczsgbSAhPSBOVUxMOyBtID0gbS0+c21rX25leHQpIHsKKwkJaWYgKG0tPnNta19uZXh0ID09IE5VTEwpIHsKKwkJCW0tPnNta19uZXh0ID0gbmV3OworCQkJcmV0dXJuOworCQl9CisJCWlmIChuZXctPnNta19tYXNrLnNfYWRkciA+IG0tPnNta19uZXh0LT5zbWtfbWFzay5zX2FkZHIpIHsKKwkJCW5ldy0+c21rX25leHQgPSBtLT5zbWtfbmV4dDsKKwkJCW0tPnNta19uZXh0ID0gbmV3OworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisKKy8qKgogICogc21rX3dyaXRlX25ldGxibGFkZHIgLSB3cml0ZSgpIGZvciAvc21hY2svbmV0bGFiZWwKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC03MjQsOCArNzU1LDkgQEAKIAlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAJc3RydWN0IGluX2FkZHIgbWFzazsKIAl1bnNpZ25lZCBpbnQgbTsKLQlfX2JlMzIgYmViaXRzID0gQkVNQVNLOworCXUzMiBtYXNrX2JpdHMgPSAoMTw8MzEpOwogCV9fYmUzMiBuc2E7CisJdTMyIHRlbXBfbWFzazsKIAogCS8qCiAJICogTXVzdCBoYXZlIHByaXZpbGVnZS4KQEAgLTc2MSwxMCArNzkzLDEzIEBACiAJaWYgKHNwID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChtYXNrLnNfYWRkciA9IDA7IG0gPiAwOyBtLS0pIHsKLQkJbWFzay5zX2FkZHIgfD0gYmViaXRzOwotCQliZWJpdHMgPDw9IDE7CisJZm9yICh0ZW1wX21hc2sgPSAwOyBtID4gMDsgbS0tKSB7CisJCXRlbXBfbWFzayB8PSBtYXNrX2JpdHM7CisJCW1hc2tfYml0cyA+Pj0gMTsKIAl9CisJbWFzay5zX2FkZHIgPSBjcHVfdG9fYmUzMih0ZW1wX21hc2spOworCisJbmV3bmFtZS5zaW5fYWRkci5zX2FkZHIgJj0gbWFzay5zX2FkZHI7CiAJLyoKIAkgKiBPbmx5IGFsbG93IG9uZSB3cml0ZXIgYXQgYSB0aW1lLiBXcml0ZXMgc2hvdWxkIGJlCiAJICogcXVpdGUgcmFyZSBhbmQgc21hbGwgaW4gYW55IGNhc2UuCkBAIC03NzIsNiArODA3LDcgQEAKIAltdXRleF9sb2NrKCZzbWtfbmV0bGJsYWRkcl9sb2NrKTsKIAogCW5zYSA9IG5ld25hbWUuc2luX2FkZHIuc19hZGRyOworCS8qIHRyeSB0byBmaW5kIGlmIHRoZSBwcmVmaXggaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCAqLwogCWZvciAoc2twID0gc21hY2tfbmV0bGJsYWRkcnM7IHNrcCAhPSBOVUxMOyBza3AgPSBza3AtPnNta19uZXh0KQogCQlpZiAoc2twLT5zbWtfaG9zdC5zaW5fYWRkci5zX2FkZHIgPT0gbnNhICYmCiAJCSAgICBza3AtPnNta19tYXNrLnNfYWRkciA9PSBtYXNrLnNfYWRkcikKQEAgLTc4Nyw5ICs4MjMsOCBAQAogCQkJcmMgPSAwOwogCQkJc2twLT5zbWtfaG9zdC5zaW5fYWRkci5zX2FkZHIgPSBuZXduYW1lLnNpbl9hZGRyLnNfYWRkcjsKIAkJCXNrcC0+c21rX21hc2suc19hZGRyID0gbWFzay5zX2FkZHI7Ci0JCQlza3AtPnNta19uZXh0ID0gc21hY2tfbmV0bGJsYWRkcnM7CiAJCQlza3AtPnNta19sYWJlbCA9IHNwOwotCQkJc21hY2tfbmV0bGJsYWRkcnMgPSBza3A7CisJCQlzbWtfbmV0bGJsYWRkcl9pbnNlcnQoc2twKTsKIAkJfQogCX0gZWxzZSB7CiAJCXJjID0gbmV0bGJsX2NmZ191bmxibF9zdGF0aWNfZGVsKCZpbml0X25ldCwgTlVMTCwKQEAgLTg1MCw3ICs4ODUsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9kb2kgLSB3cml0ZSgpIGZvciAvc21hY2svZG9pCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtOTE1LDcgKzk1MCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2RpcmVjdCAtIHdyaXRlKCkgZm9yIC9zbWFjay9kaXJlY3QKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC05OTAsNyArMTAyNSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2FtYmllbnQgLSB3cml0ZSgpIGZvciAvc21hY2svYW1iaWVudAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTEwNjUsNyArMTEwMCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX29ubHljYXAgLSB3cml0ZSgpIGZvciAvc21hY2svb25seWNhcAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9LY29uZmlnIGIvc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmMzg1NwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBTRUNVUklUWV9UT01PWU8KKwlib29sICJUT01PWU8gTGludXggU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFQ1VSSVRZCisJc2VsZWN0IFNFQ1VSSVRZRlMKKwlzZWxlY3QgU0VDVVJJVFlfUEFUSAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBUT01PWU8gTGludXgsIHBhdGhuYW1lLWJhc2VkIGFjY2VzcyBjb250cm9sLgorCSAgUmVxdWlyZWQgdXNlcnNwYWNlIHRvb2xzIGFuZCBmdXJ0aGVyIGluZm9ybWF0aW9uIG1heSBiZQorCSAgZm91bmQgYXQgPGh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvPi4KKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vTWFrZWZpbGUgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjY2Q2OAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSA9IGNvbW1vbi5vIHJlYWxwYXRoLm8gdG9tb3lvLm8gZG9tYWluLm8gZmlsZS5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjZWE2NQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpAQCAtMCwwICsxLDIyMDYgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vY29tbW9uLmMKKyAqCisgKiBDb21tb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisKKy8qIEhhcyBsb2FkaW5nIHBvbGljeSBkb25lPyAqLworYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKworLyogU3RyaW5nIHRhYmxlIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgdGFrZXMgNCBtb2Rlcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbW9kZV80WzRdID0geworCSJkaXNhYmxlZCIsICJsZWFybmluZyIsICJwZXJtaXNzaXZlIiwgImVuZm9yY2luZyIKK307CisvKiBTdHJpbmcgdGFibGUgZm9yIGZ1bmN0aW9uYWxpdHkgdGhhdCB0YWtlcyAyIG1vZGVzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19tb2RlXzJbNF0gPSB7CisJImRpc2FibGVkIiwgImVuYWJsZWQiLCAiZW5hYmxlZCIsICJlbmFibGVkIgorfTsKKworLyogVGFibGUgZm9yIHByb2ZpbGUuICovCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICprZXl3b3JkOworCXVuc2lnbmVkIGludCBjdXJyZW50X3ZhbHVlOworCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfdmFsdWU7Cit9IHRvbW95b19jb250cm9sX2FycmF5W1RPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWF0gPSB7CisJW1RPTU9ZT19NQUNfRk9SX0ZJTEVdICAgICA9IHsgIk1BQ19GT1JfRklMRSIsICAgICAgICAwLCAgICAgICAzIH0sCisJW1RPTU9ZT19NQVhfQUNDRVBUX0VOVFJZXSA9IHsgIk1BWF9BQ0NFUFRfRU5UUlkiLCAyMDQ4LCBJTlRfTUFYIH0sCisJW1RPTU9ZT19WRVJCT1NFXSAgICAgICAgICA9IHsgIlRPTU9ZT19WRVJCT1NFIiwgICAgICAxLCAgICAgICAxIH0sCit9OworCisvKiBQcm9maWxlIHRhYmxlLiBNZW1vcnkgaXMgYWxsb2NhdGVkIGFzIG5lZWRlZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgeworCXVuc2lnbmVkIGludCB2YWx1ZVtUT01PWU9fTUFYX0NPTlRST0xfSU5ERVhdOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpjb21tZW50OworfSAqdG9tb3lvX3Byb2ZpbGVfcHRyW1RPTU9ZT19NQVhfUFJPRklMRVNdOworCisvKiBQZXJtaXQgcG9saWN5IG1hbmFnZW1lbnQgYnkgbm9uLXJvb3QgdXNlcj8gKi8KK3N0YXRpYyBib29sIHRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3Q7CisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zLiAqLworCisvKiBPcGVuIG9wZXJhdGlvbiBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuX2NvbnRyb2woY29uc3QgdTggdHlwZSwgc3RydWN0IGZpbGUgKmZpbGUpOworLyogQ2xvc2UgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19jbG9zZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlKTsKKy8qIFJlYWQgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbik7CisvKiBXcml0ZSBvcGVyYXRpb24gZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQljb25zdCBpbnQgYnVmZmVyX2xlbik7CisKKy8qKgorICogdG9tb3lvX2lzX2J5dGVfcmFuZ2UgLSBDaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgaXNhIFxvb28gc3R5bGUgb2N0YWwgdmFsdWUuCisgKgorICogQHN0cjogUG9pbnRlciB0byB0aGUgc3RyaW5nLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAc3RyIGlzIGEgXG9vbyBzdHlsZSBvY3RhbCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRPTU9ZTyB1c2VzIFxvb28gc3R5bGUgcmVwcmVzZW50YXRpb24gZm9yIDB4MDEgLSAweDIwIGFuZCAweDdGIC0gMHhGRi4KKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCBcb29vIGlzIGluIHZhbGlkIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2J5dGVfcmFuZ2UoY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiAqc3RyID49ICcwJyAmJiAqc3RyKysgPD0gJzMnICYmCisJCSpzdHIgPj0gJzAnICYmICpzdHIrKyA8PSAnNycgJiYKKwkJKnN0ciA+PSAnMCcgJiYgKnN0ciA8PSAnNyc7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYW4gYWxwaGFiZXQuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGFuIGFscGhhYmV0IGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoY29uc3QgY2hhciBjKQoreworCXJldHVybiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6Jyk7Cit9CisKKy8qKgorICogdG9tb3lvX21ha2VfYnl0ZSAtIE1ha2UgYnl0ZSB2YWx1ZSBmcm9tIHRocmVlIG9jdGFsIGNoYXJhY3RlcnMuCisgKgorICogQGMxOiBUaGUgZmlyc3QgY2hhcmFjdGVyLgorICogQGMyOiBUaGUgc2Vjb25kIGNoYXJhY3Rlci4KKyAqIEBjMzogVGhlIHRoaXJkIGNoYXJhY3Rlci4KKyAqCisgKiBSZXR1cm5zIGJ5dGUgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggdG9tb3lvX21ha2VfYnl0ZShjb25zdCB1OCBjMSwgY29uc3QgdTggYzIsIGNvbnN0IHU4IGMzKQoreworCXJldHVybiAoKGMxIC0gJzAnKSA8PCA2KSArICgoYzIgLSAnMCcpIDw8IDMpICsgKGMzIC0gJzAnKTsKK30KKworLyoqCisgKiB0b21veW9fc3RyX3N0YXJ0cyAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4ga2V5d29yZC4KKyAqCisgKiBAc3JjOiAgUG9pbnRlciB0byBwb2ludGVyIHRvIHRoZSBzdHJpbmcuCisgKiBAZmluZDogUG9pbnRlciB0byB0aGUga2V5d29yZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQHNyYyBzdGFydHMgd2l0aCBAZmluZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBAc3JjIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgQGZpbmQKKyAqIGlmIEBzcmMgc3RhcnRzIHdpdGggQGZpbmQuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19zdHJfc3RhcnRzKGNoYXIgKipzcmMsIGNvbnN0IGNoYXIgKmZpbmQpCit7CisJY29uc3QgaW50IGxlbiA9IHN0cmxlbihmaW5kKTsKKwljaGFyICp0bXAgPSAqc3JjOworCisJaWYgKHN0cm5jbXAodG1wLCBmaW5kLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisJdG1wICs9IGxlbjsKKwkqc3JjID0gdG1wOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19ub3JtYWxpemVfbGluZSAtIEZvcm1hdCBzdHJpbmcuCisgKgorICogQGJ1ZmZlcjogVGhlIGxpbmUgdG8gbm9ybWFsaXplLgorICoKKyAqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFyZSByZW1vdmVkLgorICogTXVsdGlwbGUgd2hpdGVzcGFjZXMgYXJlIHBhY2tlZCBpbnRvIHNpbmdsZSBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHRvbW95b19ub3JtYWxpemVfbGluZSh1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciAqc3AgPSBidWZmZXI7CisJdW5zaWduZWQgY2hhciAqZHAgPSBidWZmZXI7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAodG9tb3lvX2lzX2ludmFsaWQoKnNwKSkKKwkJc3ArKzsKKwl3aGlsZSAoKnNwKSB7CisJCWlmICghZmlyc3QpCisJCQkqZHArKyA9ICcgJzsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJd2hpbGUgKHRvbW95b19pc192YWxpZCgqc3ApKQorCQkJKmRwKysgPSAqc3ArKzsKKwkJd2hpbGUgKHRvbW95b19pc19pbnZhbGlkKCpzcCkpCisJCQlzcCsrOworCX0KKwkqZHAgPSAnXDAnOworfQorCisvKioKKyAqIHRvbW95b19pc19jb3JyZWN0X3BhdGggLSBWYWxpZGF0ZSBhIHBhdGhuYW1lLgorICogQGZpbGVuYW1lOiAgICAgVGhlIHBhdGhuYW1lIHRvIGNoZWNrLgorICogQHN0YXJ0X3R5cGU6ICAgU2hvdWxkIHRoZSBwYXRobmFtZSBzdGFydCB3aXRoICcvJz8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAcGF0dGVybl90eXBlOiBDYW4gdGhlIHBhdGhuYW1lIGNvbnRhaW4gYSB3aWxkY2FyZD8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAZW5kX3R5cGU6ICAgICBTaG91bGQgdGhlIHBhdGhuYW1lIGVuZCB3aXRoICcvJz8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAZnVuY3Rpb246ICAgICBUaGUgbmFtZSBvZiBmdW5jdGlvbiBjYWxsaW5nIG1lLgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgczggc3RhcnRfdHlwZSwKKwkJCSAgICBjb25zdCBzOCBwYXR0ZXJuX3R5cGUsIGNvbnN0IHM4IGVuZF90eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCWJvb2wgY29udGFpbnNfcGF0dGVybiA9IGZhbHNlOworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBjaGFyIGQ7CisJdW5zaWduZWQgY2hhciBlOworCWNvbnN0IGNoYXIgKm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZW5hbWU7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlnb3RvIG91dDsKKwljID0gKmZpbGVuYW1lOworCWlmIChzdGFydF90eXBlID09IDEpIHsgLyogTXVzdCBzdGFydCB3aXRoICcvJyAqLworCQlpZiAoYyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHN0YXJ0X3R5cGUgPT0gLTEpIHsgLyogTXVzdCBub3Qgc3RhcnQgd2l0aCAnLycgKi8KKwkJaWYgKGMgPT0gJy8nKQorCQkJZ290byBvdXQ7CisJfQorCWlmIChjKQorCQljID0gKihmaWxlbmFtZSArIHN0cmxlbihmaWxlbmFtZSkgLSAxKTsKKwlpZiAoZW5kX3R5cGUgPT0gMSkgeyAvKiBNdXN0IGVuZCB3aXRoICcvJyAqLworCQlpZiAoYyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGVuZF90eXBlID09IC0xKSB7IC8qIE11c3Qgbm90IGVuZCB3aXRoICcvJyAqLworCQlpZiAoYyA9PSAnLycpCisJCQlnb3RvIG91dDsKKwl9CisJd2hpbGUgKChjID0gKmZpbGVuYW1lKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgPT0gJ1xcJykgeworCQkJc3dpdGNoICgoYyA9ICpmaWxlbmFtZSsrKSkgeworCQkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnJCc6ICAgLyogIlwkIiAqLworCQkJY2FzZSAnKyc6ICAgLyogIlwrIiAqLworCQkJY2FzZSAnPyc6ICAgLyogIlw/IiAqLworCQkJY2FzZSAnKic6ICAgLyogIlwqIiAqLworCQkJY2FzZSAnQCc6ICAgLyogIlxAIiAqLworCQkJY2FzZSAneCc6ICAgLyogIlx4IiAqLworCQkJY2FzZSAnWCc6ICAgLyogIlxYIiAqLworCQkJY2FzZSAnYSc6ICAgLyogIlxhIiAqLworCQkJY2FzZSAnQSc6ICAgLyogIlxBIiAqLworCQkJY2FzZSAnLSc6ICAgLyogIlwtIiAqLworCQkJCWlmIChwYXR0ZXJuX3R5cGUgPT0gLTEpCisJCQkJCWJyZWFrOyAvKiBNdXN0IG5vdCBjb250YWluIHBhdHRlcm4gKi8KKwkJCQljb250YWluc19wYXR0ZXJuID0gdHJ1ZTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLworCQkJY2FzZSAnMSc6CisJCQljYXNlICcyJzoKKwkJCWNhc2UgJzMnOgorCQkJCWQgPSAqZmlsZW5hbWUrKzsKKwkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQorCQkJCQlicmVhazsKKwkJCQllID0gKmZpbGVuYW1lKys7CisJCQkJaWYgKGUgPCAnMCcgfHwgZSA+ICc3JykKKwkJCQkJYnJlYWs7CisJCQkJYyA9IHRvbW95b19tYWtlX2J5dGUoYywgZCwgZSk7CisJCQkJaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKQorCQkJCQljb250aW51ZTsgLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLworCQkJfQorCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpIHsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWlmIChwYXR0ZXJuX3R5cGUgPT0gMSkgeyAvKiBNdXN0IGNvbnRhaW4gcGF0dGVybiAqLworCQlpZiAoIWNvbnRhaW5zX3BhdHRlcm4pCisJCQlnb3RvIG91dDsKKwl9CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBwYXRobmFtZSAnJXMnXG4iLCBmdW5jdGlvbiwKKwkgICAgICAgb3JpZ2luYWxfZmlsZW5hbWUpOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9faXNfY29ycmVjdF9kb21haW4gLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBkb21haW5uYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcy4KKyAqIEBkb21haW5uYW1lOiAgIFRoZSBkb21haW5uYW1lIHRvIGNoZWNrLgorICogQGZ1bmN0aW9uOiAgICAgVGhlIG5hbWUgb2YgZnVuY3Rpb24gY2FsbGluZyBtZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgY2hhciBkOworCXVuc2lnbmVkIGNoYXIgZTsKKwljb25zdCBjaGFyICpvcmdfZG9tYWlubmFtZSA9IGRvbWFpbm5hbWU7CisKKwlpZiAoIWRvbWFpbm5hbWUgfHwgc3RybmNtcChkb21haW5uYW1lLCBUT01PWU9fUk9PVF9OQU1FLAorCQkJCSAgIFRPTU9ZT19ST09UX05BTUVfTEVOKSkKKwkJZ290byBvdXQ7CisJZG9tYWlubmFtZSArPSBUT01PWU9fUk9PVF9OQU1FX0xFTjsKKwlpZiAoISpkb21haW5uYW1lKQorCQlyZXR1cm4gdHJ1ZTsKKwlkbyB7CisJCWlmICgqZG9tYWlubmFtZSsrICE9ICcgJykKKwkJCWdvdG8gb3V0OworCQlpZiAoKmRvbWFpbm5hbWUrKyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwkJd2hpbGUgKChjID0gKmRvbWFpbm5hbWUpICE9ICdcMCcgJiYgYyAhPSAnICcpIHsKKwkJCWRvbWFpbm5hbWUrKzsKKwkJCWlmIChjID09ICdcXCcpIHsKKwkJCQljID0gKmRvbWFpbm5hbWUrKzsKKwkJCQlzd2l0Y2ggKChjKSkgeworCQkJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KKwkJCQkJY29udGludWU7CisJCQkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCisJCQkJY2FzZSAnMSc6CisJCQkJY2FzZSAnMic6CisJCQkJY2FzZSAnMyc6CisJCQkJCWQgPSAqZG9tYWlubmFtZSsrOworCQkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQorCQkJCQkJYnJlYWs7CisJCQkJCWUgPSAqZG9tYWlubmFtZSsrOworCQkJCQlpZiAoZSA8ICcwJyB8fCBlID4gJzcnKQorCQkJCQkJYnJlYWs7CisJCQkJCWMgPSB0b21veW9fbWFrZV9ieXRlKGMsIGQsIGUpOworCQkJCQlpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpCisJCQkJCQkvKiBwYXR0ZXJuIGlzIG5vdCBcMDAwICovCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UgaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKSB7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9IHdoaWxlICgqZG9tYWlubmFtZSk7CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBkb21haW5uYW1lICclcydcbiIsIGZ1bmN0aW9uLAorCSAgICAgICBvcmdfZG9tYWlubmFtZSk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19pc19kb21haW5fZGVmIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4KKyAqCisgKiBAYnVmZmVyOiBUaGUgdG9rZW4gdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBidWZmZXIgcG9zc2libHkgYmUgYSBkb21haW5uYW1lLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXJldHVybiAhc3RybmNtcChidWZmZXIsIFRPTU9ZT19ST09UX05BTUUsIFRPTU9ZT19ST09UX05BTUVfTEVOKTsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9kb21haW4gLSBGaW5kIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgZG9tYWlubmFtZSB0byBmaW5kLgorICoKKyAqIENhbGxlciBtdXN0IGNhbGwgZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IG9yCisgKiBkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisKKwluYW1lLm5hbWUgPSBkb21haW5uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQgJiYKKwkJICAgICF0b21veW9fcGF0aGNtcCgmbmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKKwkJCXJldHVybiBkb21haW47CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19wYXRoX2RlcHRoIC0gRXZhbHVhdGUgdGhlIG51bWJlciBvZiAnLycgaW4gYSBzdHJpbmcuCisgKgorICogQHBhdGhuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICoKKyAqIFJldHVybnMgcGF0aCBkZXB0aCBvZiB0aGUgc3RyaW5nLgorICoKKyAqIEkgc2NvcmUgMiBmb3IgZWFjaCBvZiB0aGUgJy8nIGluIHRoZSBAcGF0aG5hbWUKKyAqIGFuZCBzY29yZSAxIGlmIHRoZSBAcGF0aG5hbWUgZW5kcyB3aXRoICcvJy4KKyAqLworc3RhdGljIGludCB0b21veW9fcGF0aF9kZXB0aChjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgaSA9IDA7CisKKwlpZiAocGF0aG5hbWUpIHsKKwkJY29uc3QgY2hhciAqZXAgPSBwYXRobmFtZSArIHN0cmxlbihwYXRobmFtZSk7CisJCWlmIChwYXRobmFtZSA8IGVwLS0pIHsKKwkJCWlmICgqZXAgIT0gJy8nKQorCQkJCWkrKzsKKwkJCXdoaWxlIChwYXRobmFtZSA8PSBlcCkKKwkJCQlpZiAoKmVwLS0gPT0gJy8nKQorCQkJCQlpICs9IDI7CisJCX0KKwl9CisJcmV0dXJuIGk7Cit9CisKKy8qKgorICogdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoIC0gRXZhbHVhdGUgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIGEgdG9rZW4uCisgKgorICogQGZpbGVuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICoKKyAqIFJldHVybnMgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIEBmaWxlbmFtZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY29uc3RfcGFydF9sZW5ndGgoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciBjOworCWludCBsZW4gPSAwOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKChjID0gKmZpbGVuYW1lKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgIT0gJ1xcJykgeworCQkJbGVuKys7CisJCQljb250aW51ZTsKKwkJfQorCQljID0gKmZpbGVuYW1lKys7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQlsZW4gKz0gMjsKKwkJCWNvbnRpbnVlOworCQljYXNlICcwJzogICAvKiAiXG9vbyIgKi8KKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJCWMgPSAqZmlsZW5hbWUrKzsKKwkJCWlmIChjIDwgJzAnIHx8IGMgPiAnNycpCisJCQkJYnJlYWs7CisJCQljID0gKmZpbGVuYW1lKys7CisJCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJCWJyZWFrOworCQkJbGVuICs9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0b21veW9fZmlsbF9wYXRoX2luZm8gLSBGaWxsIGluICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgbWVtYmVycy4KKyAqCisgKiBAcHRyOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgdG8gZmlsbCBpbi4KKyAqCisgKiBUaGUgY2FsbGVyIHNldHMgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIi0+bmFtZS4KKyAqLwordm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cikKK3sKKwljb25zdCBjaGFyICpuYW1lID0gcHRyLT5uYW1lOworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlwdHItPnRvdGFsX2xlbiA9IGxlbjsKKwlwdHItPmNvbnN0X2xlbiA9IHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aChuYW1lKTsKKwlwdHItPmlzX2RpciA9IGxlbiAmJiAobmFtZVtsZW4gLSAxXSA9PSAnLycpOworCXB0ci0+aXNfcGF0dGVybmVkID0gKHB0ci0+Y29uc3RfbGVuIDwgbGVuKTsKKwlwdHItPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLCBsZW4pOworCXB0ci0+ZGVwdGggPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKTsKK30KKworLyoqCisgKiB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yIC0gUGF0dGVybiBtYXRjaGluZyB3aXRob3V0ICcvJyBjaGFyYWN0ZXIKKyAqIGFuZCAiXC0iIHBhdHRlcm4uCisgKgorICogQGZpbGVuYW1lOiAgICAgVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBmaWxlbmFtZV9lbmQ6IFRoZSBlbmQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICAgICAgVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqIEBwYXR0ZXJuX2VuZDogIFRoZSBlbmQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWVfZW5kLAorCQkJCQkgICAgY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdHRlcm5fZW5kKQoreworCXdoaWxlIChmaWxlbmFtZSA8IGZpbGVuYW1lX2VuZCAmJiBwYXR0ZXJuIDwgcGF0dGVybl9lbmQpIHsKKwkJY2hhciBjOworCQlpZiAoKnBhdHRlcm4gIT0gJ1xcJykgeworCQkJaWYgKCpmaWxlbmFtZSsrICE9ICpwYXR0ZXJuKyspCisJCQkJcmV0dXJuIGZhbHNlOworCQkJY29udGludWU7CisJCX0KKwkJYyA9ICpmaWxlbmFtZTsKKwkJcGF0dGVybisrOworCQlzd2l0Y2ggKCpwYXR0ZXJuKSB7CisJCQlpbnQgaTsKKwkJCWludCBqOworCQljYXNlICc/JzoKKwkJCWlmIChjID09ICcvJykgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7CisJCQkJaWYgKGZpbGVuYW1lWzFdID09ICdcXCcpCisJCQkJCWZpbGVuYW1lKys7CisJCQkJZWxzZSBpZiAodG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyAxKSkKKwkJCQkJZmlsZW5hbWUgKz0gMzsKKwkJCQllbHNlCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdcXCc6CisJCQlpZiAoYyAhPSAnXFwnKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWlmICgqKytmaWxlbmFtZSAhPSAnXFwnKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICcrJzoKKwkJCWlmICghaXNkaWdpdChjKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlpZiAoIWlzeGRpZ2l0KGMpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCWlmICghdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoYykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJzAnOgorCQljYXNlICcxJzoKKwkJY2FzZSAnMic6CisJCWNhc2UgJzMnOgorCQkJaWYgKGMgPT0gJ1xcJyAmJiB0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIDEpCisJCQkgICAgJiYgc3RybmNtcChmaWxlbmFtZSArIDEsIHBhdHRlcm4sIDMpID09IDApIHsKKwkJCQlmaWxlbmFtZSArPSAzOworCQkJCXBhdHRlcm4gKz0gMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQuICovCisJCWNhc2UgJyonOgorCQljYXNlICdAJzoKKwkJCWZvciAoaSA9IDA7IGkgPD0gZmlsZW5hbWVfZW5kIC0gZmlsZW5hbWU7IGkrKykgeworCQkJCWlmICh0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKAorCQkJCQkJICAgIGZpbGVuYW1lICsgaSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJICAgIHBhdHRlcm4gKyAxLCBwYXR0ZXJuX2VuZCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWMgPSBmaWxlbmFtZVtpXTsKKwkJCQlpZiAoYyA9PSAnLicgJiYgKnBhdHRlcm4gPT0gJ0AnKQorCQkJCQlicmVhazsKKwkJCQlpZiAoYyAhPSAnXFwnKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZmlsZW5hbWVbaSArIDFdID09ICdcXCcpCisJCQkJCWkrKzsKKwkJCQllbHNlIGlmICh0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIGkgKyAxKSkKKwkJCQkJaSArPSAzOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7IC8qIEJhZCBwYXR0ZXJuLiAqLworCQkJfQorCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZC4gKi8KKwkJZGVmYXVsdDoKKwkJCWogPSAwOworCQkJYyA9ICpwYXR0ZXJuOworCQkJaWYgKGMgPT0gJyQnKSB7CisJCQkJd2hpbGUgKGlzZGlnaXQoZmlsZW5hbWVbal0pKQorCQkJCQlqKys7CisJCQl9IGVsc2UgaWYgKGMgPT0gJ1gnKSB7CisJCQkJd2hpbGUgKGlzeGRpZ2l0KGZpbGVuYW1lW2pdKSkKKwkJCQkJaisrOworCQkJfSBlbHNlIGlmIChjID09ICdBJykgeworCQkJCXdoaWxlICh0b21veW9faXNfYWxwaGFiZXRfY2hhcihmaWxlbmFtZVtqXSkpCisJCQkJCWorKzsKKwkJCX0KKwkJCWZvciAoaSA9IDE7IGkgPD0gajsgaSsrKSB7CisJCQkJaWYgKHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoCisJCQkJCQkgICAgZmlsZW5hbWUgKyBpLCBmaWxlbmFtZV9lbmQsCisJCQkJCQkgICAgcGF0dGVybiArIDEsIHBhdHRlcm5fZW5kKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkIG9yIGJhZCBwYXR0ZXJuLiAqLworCQl9CisJCWZpbGVuYW1lKys7CisJCXBhdHRlcm4rKzsKKwl9CisJd2hpbGUgKCpwYXR0ZXJuID09ICdcXCcgJiYKKwkgICAgICAgKCoocGF0dGVybiArIDEpID09ICcqJyB8fCAqKHBhdHRlcm4gKyAxKSA9PSAnQCcpKQorCQlwYXR0ZXJuICs9IDI7CisJcmV0dXJuIGZpbGVuYW1lID09IGZpbGVuYW1lX2VuZCAmJiBwYXR0ZXJuID09IHBhdHRlcm5fZW5kOworfQorCisvKioKKyAqIHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybiAtIFBhdHRlcm4gbWF0Y2hpbmcgd2l0aG91dCB3aXRob3V0ICcvJyBjaGFyYWN0ZXIuCisgKgorICogQGZpbGVuYW1lOiAgICAgVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBmaWxlbmFtZV9lbmQ6IFRoZSBlbmQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICAgICAgVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqIEBwYXR0ZXJuX2VuZDogIFRoZSBlbmQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4oY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybl9lbmQpCit7CisJY29uc3QgY2hhciAqcGF0dGVybl9zdGFydCA9IHBhdHRlcm47CisJYm9vbCBmaXJzdCA9IHRydWU7CisJYm9vbCByZXN1bHQ7CisKKwl3aGlsZSAocGF0dGVybiA8IHBhdHRlcm5fZW5kIC0gMSkgeworCQkvKiBTcGxpdCBhdCAiXC0iIHBhdHRlcm4uICovCisJCWlmICgqcGF0dGVybisrICE9ICdcXCcgfHwgKnBhdHRlcm4rKyAhPSAnLScpCisJCQljb250aW51ZTsKKwkJcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihmaWxlbmFtZSwKKwkJCQkJCQkgZmlsZW5hbWVfZW5kLAorCQkJCQkJCSBwYXR0ZXJuX3N0YXJ0LAorCQkJCQkJCSBwYXR0ZXJuIC0gMik7CisJCWlmIChmaXJzdCkKKwkJCXJlc3VsdCA9ICFyZXN1bHQ7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gZmFsc2U7CisJCWZpcnN0ID0gZmFsc2U7CisJCXBhdHRlcm5fc3RhcnQgPSBwYXR0ZXJuOworCX0KKwlyZXN1bHQgPSB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKGZpbGVuYW1lLCBmaWxlbmFtZV9lbmQsCisJCQkJCQkgcGF0dGVybl9zdGFydCwgcGF0dGVybl9lbmQpOworCXJldHVybiBmaXJzdCA/IHJlc3VsdCA6ICFyZXN1bHQ7Cit9CisKKy8qKgorICogdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICBUaGUgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBtYXRjaGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLgorICogICBcXCAgICAgXCBpdHNlbGYuCisgKiAgIFxvb28gICBPY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhIGJ5dGUuCisgKiAgIFwqICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDAgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nLgorICogICBcQCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAwIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJyBvciAnLicuCisgKiAgIFw/ICAgICAxIGJ5dGUgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nLgorICogICBcJCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGRlY2ltYWwgZGlnaXQuCisgKiAgIFwrICAgICAxIGRlY2ltYWwgZGlnaXQuCisgKiAgIFxYICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDEgaGV4YWRlY2ltYWwgZGlnaXQuCisgKiAgIFx4ICAgICAxIGhleGFkZWNpbWFsIGRpZ2l0LgorICogICBcQSAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGFscGhhYmV0IGNoYXJhY3Rlci4KKyAqICAgXGEgICAgIDEgYWxwaGFiZXQgY2hhcmFjdGVyLgorICogICBcLSAgICAgU3VidHJhY3Rpb24gb3BlcmF0b3IuCisgKi8KK2Jvb2wgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4pCit7CisJLyoKKwkgIGlmICghZmlsZW5hbWUgfHwgIXBhdHRlcm4pCisJICByZXR1cm4gZmFsc2U7CisJKi8KKwljb25zdCBjaGFyICpmID0gZmlsZW5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqcCA9IHBhdHRlcm4tPm5hbWU7CisJY29uc3QgaW50IGxlbiA9IHBhdHRlcm4tPmNvbnN0X2xlbjsKKworCS8qIElmIEBwYXR0ZXJuIGRvZXNuJ3QgY29udGFpbiBwYXR0ZXJuLCBJIGNhbiB1c2Ugc3RyY21wKCkuICovCisJaWYgKCFwYXR0ZXJuLT5pc19wYXR0ZXJuZWQpCisJCXJldHVybiAhdG9tb3lvX3BhdGhjbXAoZmlsZW5hbWUsIHBhdHRlcm4pOworCS8qIERvbnQgY29tcGFyZSBpZiB0aGUgbnVtYmVyIG9mICcvJyBkaWZmZXJzLiAqLworCWlmIChmaWxlbmFtZS0+ZGVwdGggIT0gcGF0dGVybi0+ZGVwdGgpCisJCXJldHVybiBmYWxzZTsKKwkvKiBDb21wYXJlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IHBhdHRlcm5zLiAqLworCWlmIChzdHJuY21wKGYsIHAsIGxlbikpCisJCXJldHVybiBmYWxzZTsKKwlmICs9IGxlbjsKKwlwICs9IGxlbjsKKwkvKiBNYWluIGxvb3AuIENvbXBhcmUgZWFjaCBkaXJlY3RvcnkgY29tcG9uZW50LiAqLworCXdoaWxlICgqZiAmJiAqcCkgeworCQljb25zdCBjaGFyICpmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOworCQljb25zdCBjaGFyICpwX2RlbGltaXRlciA9IHN0cmNocihwLCAnLycpOworCQlpZiAoIWZfZGVsaW1pdGVyKQorCQkJZl9kZWxpbWl0ZXIgPSBmICsgc3RybGVuKGYpOworCQlpZiAoIXBfZGVsaW1pdGVyKQorCQkJcF9kZWxpbWl0ZXIgPSBwICsgc3RybGVuKHApOworCQlpZiAoIXRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybihmLCBmX2RlbGltaXRlciwKKwkJCQkJCSAgICBwLCBwX2RlbGltaXRlcikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWYgPSBmX2RlbGltaXRlcjsKKwkJaWYgKCpmKQorCQkJZisrOworCQlwID0gcF9kZWxpbWl0ZXI7CisJCWlmICgqcCkKKwkJCXArKzsKKwl9CisJLyogSWdub3JlIHRyYWlsaW5nICJcKiIgYW5kICJcQCIgaW4gQHBhdHRlcm4uICovCisJd2hpbGUgKCpwID09ICdcXCcgJiYKKwkgICAgICAgKCoocCArIDEpID09ICcqJyB8fCAqKHAgKyAxKSA9PSAnQCcpKQorCQlwICs9IDI7CisJcmV0dXJuICEqZiAmJiAhKnA7Cit9CisKKy8qKgorICogdG9tb3lvX2lvX3ByaW50ZiAtIFRyYW5zYWN0aW9uYWwgcHJpbnRmKCkgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIiBzdHJ1Y3R1cmUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBmbXQ6ICBUaGUgcHJpbnRmKCkncyBmb3JtYXQgc3RyaW5nLCBmb2xsb3dlZCBieSBwYXJhbWV0ZXJzLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBvdXRwdXQgd2FzIHdyaXR0ZW4sIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgc25wcmludGYoKSB3aWxsIHRydW5jYXRlLCBidXQgdG9tb3lvX2lvX3ByaW50ZigpIHdvbid0LgorICovCitib29sIHRvbW95b19pb19wcmludGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgbGVuOworCWludCBwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOworCWludCBzaXplID0gaGVhZC0+cmVhZGJ1Zl9zaXplIC0gcG9zOworCisJaWYgKHNpemUgPD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbGVuID0gdnNucHJpbnRmKGhlYWQtPnJlYWRfYnVmICsgcG9zLCBzaXplLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAocG9zICsgbGVuID49IGhlYWQtPnJlYWRidWZfc2l6ZSkKKwkJcmV0dXJuIGZhbHNlOworCWhlYWQtPnJlYWRfYXZhaWwgKz0gbGVuOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19nZXRfZXhlIC0gR2V0IHRvbW95b19yZWFscGF0aCgpIG9mIGN1cnJlbnQgcHJvY2Vzcy4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b21veW9fcmVhbHBhdGgoKSBvZiBjdXJyZW50IHByb2Nlc3Mgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGlzIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19nZXRfZXhlKHZvaWQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwljb25zdCBjaGFyICpjcCA9IE5VTEw7CisKKwlpZiAoIW1tKQorCQlyZXR1cm4gTlVMTDsKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKKwkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkgJiYgdm1hLT52bV9maWxlKSB7CisJCQljcCA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJnZtYS0+dm1fZmlsZS0+Zl9wYXRoKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIGNwOworfQorCisvKioKKyAqIHRvbW95b19nZXRfbXNnIC0gR2V0IHdhcm5pbmcgbWVzc2FnZS4KKyAqCisgKiBAaXNfZW5mb3JjZTogSXMgaXQgZW5mb3JjaW5nIG1vZGU/CisgKgorICogUmV0dXJucyAiRVJST1IiIG9yICJXQVJOSU5HIi4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKQoreworCWlmIChpc19lbmZvcmNlKQorCQlyZXR1cm4gIkVSUk9SIjsKKwllbHNlCisJCXJldHVybiAiV0FSTklORyI7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZsYWdzIC0gQ2hlY2sgbW9kZSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaW5kZXg6ICBUaGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBtb2RlLgorICoKKyAqIFRPTU9ZTyBjaGVja3Mgb25seSBwcm9jZXNzIGNvbnRleHQuCisgKiBUaGlzIGNvZGUgZGlzYWJsZXMgVE9NT1lPJ3MgZW5mb3JjZW1lbnQgaW4gY2FzZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20KKyAqIGludGVycnVwdCBjb250ZXh0LgorICovCit1bnNpZ25lZCBpbnQgdG9tb3lvX2NoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQljb25zdCB1OCBpbmRleCkKK3sKKwljb25zdCB1OCBwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOworCisJaWYgKFdBUk5fT04oaW5faW50ZXJydXB0KCkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdG9tb3lvX3BvbGljeV9sb2FkZWQgJiYgaW5kZXggPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgKKyNpZiBUT01PWU9fTUFYX1BST0ZJTEVTICE9IDI1NgorCQkmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUworI2VuZGlmCisJCSYmIHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSA/CisJCXRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXS0+dmFsdWVbaW5kZXhdIDogMDsKK30KKworLyoqCisgKiB0b21veW9fdmVyYm9zZV9tb2RlIC0gQ2hlY2sgd2hldGhlciBUT01PWU8gaXMgdmVyYm9zZSBtb2RlLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIHNob3VsZCBiZSBwcmludGVkIHRvCisgKiBjb25zb2xlLgorICovCitib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKQoreworCXJldHVybiB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fVkVSQk9TRSkgIT0gMDsKK30KKworLyoqCisgKiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rIC0gQ2hlY2sgZm9yIGRvbWFpbidzIHF1b3RhLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZG9tYWluIGlzIG5vdCBleGNlZWRlZCBxdW90YSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbikKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKworCWlmICghZG9tYWluKQorCQlyZXR1cm4gdHJ1ZTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQkJY29udGludWU7CisJCXN3aXRjaCAodG9tb3lvX2FjbF90eXBlMihwdHIpKSB7CisJCQlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDE7CisJCQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDI7CisJCQl1MTYgcGVybTsKKwkJY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6CisJCQlhY2wxID0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCQkgICAgaGVhZCk7CisJCQlwZXJtID0gYWNsMS0+cGVybTsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmCisJCQkgICAgKCgxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMKSB8CisJCQkgICAgICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCkpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0NSRUFURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1VOTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LRElSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUk1ESVJfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS1NPQ0tfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtDSEFSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0w6CisJCQlhY2wyID0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCQkgICAgaGVhZCk7CisJCQlwZXJtID0gYWNsMi0+cGVybTsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJaWYgKGNvdW50IDwgdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlkpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIWRvbWFpbi0+cXVvdGFfd2FybmVkKSB7CisJCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gdHJ1ZTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLVdBUk5JTkc6ICIKKwkJICAgICAgICJEb21haW4gJyVzJyBoYXMgc28gbWFueSBBQ0xzIHRvIGhvbGQuICIKKwkJICAgICAgICJTdG9wcGVkIGxlYXJuaW5nIG1vZGUuXG4iLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19wcm9maWxlIC0gQ3JlYXRlIGEgbmV3IHByb2ZpbGUuCisgKgorICogQHByb2ZpbGU6IFByb2ZpbGUgbnVtYmVyIHRvIGNyZWF0ZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcHJvZmlsZSIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZShjb25zdCB1bnNpZ25lZAorCQkJCQkJCQlpbnQgcHJvZmlsZSkKK3sKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0cnVjdCB0b21veW9fcHJvZmlsZSAqcHRyID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChwcm9maWxlID49IFRPTU9ZT19NQVhfUFJPRklMRVMpCisJCXJldHVybiBOVUxMOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlwdHIgPSB0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV07CisJaWYgKHB0cikKKwkJZ290byBvazsKKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKnB0cikpOworCWlmICghcHRyKQorCQlnb3RvIG9rOworCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykKKwkJcHRyLT52YWx1ZVtpXSA9IHRvbW95b19jb250cm9sX2FycmF5W2ldLmN1cnJlbnRfdmFsdWU7CisJbWIoKTsgLyogQXZvaWQgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbi4gKi8KKwl0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gPSBwdHI7Cisgb2s6CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBwdHI7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3Byb2ZpbGUgLSBXcml0ZSB0byBwcm9maWxlIHRhYmxlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwljaGFyICpjcDsKKwlzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGU7CisJdW5zaWduZWQgbG9uZyBudW07CisKKwljcCA9IHN0cmNocihkYXRhLCAnLScpOworCWlmIChjcCkKKwkJKmNwID0gJ1wwJzsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY3ApCisJCWRhdGEgPSBjcCArIDE7CisJcHJvZmlsZSA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZShudW0pOworCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3AgPSBzdHJjaHIoZGF0YSwgJz0nKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY3AgPSAnXDAnOworCWlmICghc3RyY21wKGRhdGEsICJDT01NRU5UIikpIHsKKwkJcHJvZmlsZS0+Y29tbWVudCA9IHRvbW95b19zYXZlX25hbWUoY3AgKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykgeworCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19jb250cm9sX2FycmF5W2ldLmtleXdvcmQpKQorCQkJY29udGludWU7CisJCWlmIChzc2NhbmYoY3AgKyAxLCAiJXUiLCAmdmFsdWUpICE9IDEpIHsKKwkJCWludCBqOworCQkJY29uc3QgY2hhciAqKm1vZGVzOworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIFRPTU9ZT19WRVJCT1NFOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfMjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV80OworCQkJCWJyZWFrOworCQkJfQorCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJCWlmIChzdHJjbXAoY3AgKyAxLCBtb2Rlc1tqXSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXZhbHVlID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChqID09IDQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSBpZiAodmFsdWUgPiB0b21veW9fY29udHJvbF9hcnJheVtpXS5tYXhfdmFsdWUpIHsKKwkJCXZhbHVlID0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0ubWF4X3ZhbHVlOworCQl9CisJCXByb2ZpbGUtPnZhbHVlW2ldID0gdmFsdWU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9wcm9maWxlIC0gUmVhZCBmcm9tIHByb2ZpbGUgdGFibGUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHRvdGFsID0gVE9NT1lPX01BWF9DT05UUk9MX0lOREVYICsgMTsKKwlpbnQgc3RlcDsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJZm9yIChzdGVwID0gaGVhZC0+cmVhZF9zdGVwOyBzdGVwIDwgVE9NT1lPX01BWF9QUk9GSUxFUyAqIHRvdGFsOworCSAgICAgc3RlcCsrKSB7CisJCWNvbnN0IHU4IGluZGV4ID0gc3RlcCAvIHRvdGFsOworCQl1OCB0eXBlID0gc3RlcCAlIHRvdGFsOworCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGUKKwkJCT0gdG9tb3lvX3Byb2ZpbGVfcHRyW2luZGV4XTsKKwkJaGVhZC0+cmVhZF9zdGVwID0gc3RlcDsKKwkJaWYgKCFwcm9maWxlKQorCQkJY29udGludWU7CisJCWlmICghdHlwZSkgeyAvKiBQcmludCBwcm9maWxlJyBjb21tZW50IHRhZy4gKi8KKwkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtQ09NTUVOVD0lc1xuIiwKKwkJCQkJICAgICAgaW5kZXgsIHByb2ZpbGUtPmNvbW1lbnQgPworCQkJCQkgICAgICBwcm9maWxlLT5jb21tZW50LT5uYW1lIDogIiIpKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJdHlwZS0tOworCQlpZiAodHlwZSA8IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWCkgeworCQkJY29uc3QgdW5zaWduZWQgaW50IHZhbHVlID0gcHJvZmlsZS0+dmFsdWVbdHlwZV07CisJCQljb25zdCBjaGFyICoqbW9kZXMgPSBOVUxMOworCQkJY29uc3QgY2hhciAqa2V5d29yZAorCQkJCT0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbdHlwZV0ua2V5d29yZDsKKwkJCXN3aXRjaCAodG9tb3lvX2NvbnRyb2xfYXJyYXlbdHlwZV0ubWF4X3ZhbHVlKSB7CisJCQljYXNlIDM6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV80OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChtb2RlcykgeworCQkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXM9JXNcbiIsIGluZGV4LAorCQkJCQkJICAgICAga2V5d29yZCwgbW9kZXNbdmFsdWVdKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXM9JXVcbiIsIGluZGV4LAorCQkJCQkJICAgICAga2V5d29yZCwgdmFsdWUpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc3RlcCA9PSBUT01PWU9fTUFYX1BST0ZJTEVTICogdG90YWwpCisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworLyogU3RydWN0dXJlIGZvciBwb2xpY3kgbWFuYWdlci4gKi8KK3N0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkvKiBBIHBhdGggdG8gcHJvZ3JhbSBvciBhIGRvbWFpbm5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm1hbmFnZXI7CisJYm9vbCBpc19kb21haW47ICAvKiBUcnVlIGlmIG1hbmFnZXIgaXMgYSBkb21haW5uYW1lLiAqLworCWJvb2wgaXNfZGVsZXRlZDsgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIGRlbGV0ZWQuICovCit9OworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkgLSBBZGQgYSBtYW5hZ2VyIGVudHJ5LgorICoKKyAqIEBtYW5hZ2VyOiAgIFRoZSBwYXRoIHRvIG1hbmFnZXIgb3IgdGhlIGRvbWFpbm5hbW1lLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5KGNvbnN0IGNoYXIgKm1hbmFnZXIsCisJCQkJICAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX21hbmFnZXI7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2RvbWFpbiA9IGZhbHNlOworCisJaWYgKHRvbW95b19pc19kb21haW5fZGVmKG1hbmFnZXIpKSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKG1hbmFnZXIsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpc19kb21haW4gPSB0cnVlOworCX0gZWxzZSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChtYW5hZ2VyLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlzYXZlZF9tYW5hZ2VyID0gdG9tb3lvX3NhdmVfbmFtZShtYW5hZ2VyKTsKKwlpZiAoIXNhdmVkX21hbmFnZXIpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPm1hbmFnZXIgIT0gc2F2ZWRfbWFuYWdlcikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5tYW5hZ2VyID0gc2F2ZWRfbWFuYWdlcjsKKwluZXdfZW50cnktPmlzX2RvbWFpbiA9IGlzX2RvbWFpbjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5IC0gV3JpdGUgbWFuYWdlciBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCWJvb2wgaXNfZGVsZXRlID0gdG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSk7CisKKwlpZiAoIXN0cmNtcChkYXRhLCAibWFuYWdlX2J5X25vbl9yb290IikpIHsKKwkJdG9tb3lvX21hbmFnZV9ieV9ub25fcm9vdCA9ICFpc19kZWxldGU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5KGRhdGEsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfbWFuYWdlcl9wb2xpY3kgLSBSZWFkIG1hbmFnZXIgcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSwKKwkJCQkgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIlc1xuIiwgcHRyLT5tYW5hZ2VyLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJaGVhZC0+cmVhZF9lb2YgPSBkb25lOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19pc19wb2xpY3lfbWFuYWdlciAtIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBhIHBvbGljeSBtYW5hZ2VyLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHBlcm1pdHRlZCB0byBtb2RpZnkgcG9saWN5CisgKiB2aWEgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19wb2xpY3lfbWFuYWdlcih2b2lkKQoreworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwljb25zdCBjaGFyICpleGU7CisJY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSA9IHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZTsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIXRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3QgJiYgKHRhc2stPmNyZWQtPnVpZCB8fCB0YXNrLT5jcmVkLT5ldWlkKSkKKwkJcmV0dXJuIGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiBwdHItPmlzX2RvbWFpbgorCQkgICAgJiYgIXRvbW95b19wYXRoY21wKGRvbWFpbm5hbWUsIHB0ci0+bWFuYWdlcikpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWlmIChmb3VuZCkKKwkJcmV0dXJuIHRydWU7CisJZXhlID0gdG9tb3lvX2dldF9leGUoKTsKKwlpZiAoIWV4ZSkKKwkJcmV0dXJuIGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiAhcHRyLT5pc19kb21haW4KKwkJICAgICYmICFzdHJjbXAoZXhlLCBwdHItPm1hbmFnZXItPm5hbWUpKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlpZiAoIWZvdW5kKSB7IC8qIFJlZHVjZSBlcnJvciBtZXNzYWdlcy4gKi8KKwkJc3RhdGljIHBpZF90IGxhc3RfcGlkOworCQljb25zdCBwaWRfdCBwaWQgPSBjdXJyZW50LT5waWQ7CisJCWlmIChsYXN0X3BpZCAhPSBwaWQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzICggJXMgKSBpcyBub3QgcGVybWl0dGVkIHRvICIKKwkJCSAgICAgICAidXBkYXRlIHBvbGljaWVzLlxuIiwgZG9tYWlubmFtZS0+bmFtZSwgZXhlKTsKKwkJCWxhc3RfcGlkID0gcGlkOworCQl9CisJfQorCXRvbW95b19mcmVlKGV4ZSk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b19pc19zZWxlY3Rfb25lIC0gUGFyc2Ugc2VsZWN0IGNvbW1hbmQuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBkYXRhOiBTdHJpbmcgdG8gcGFyc2UuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX3NlbGVjdF9vbmUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJIGNvbnN0IGNoYXIgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IHBpZDsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCisJaWYgKHNzY2FuZihkYXRhLCAicGlkPSV1IiwgJnBpZCkgPT0gMSkgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlwID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKHApCisJCQlkb21haW4gPSB0b21veW9fcmVhbF9kb21haW4ocCk7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworCX0gZWxzZSBpZiAoIXN0cm5jbXAoZGF0YSwgImRvbWFpbj0iLCA3KSkgeworCQlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYoZGF0YSArIDcpKSB7CisJCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhICsgNyk7CisJCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworCWhlYWQtPndyaXRlX3ZhcjEgPSBkb21haW47CisJLyogQWNjZXNzaW5nIHJlYWRfYnVmIGlzIHNhZmUgYmVjYXVzZSBoZWFkLT5pb19zZW0gaXMgaGVsZC4gKi8KKwlpZiAoIWhlYWQtPnJlYWRfYnVmKQorCQlyZXR1cm4gdHJ1ZTsgLyogRG8gbm90aGluZyBpZiBvcGVuKE9fV1JPTkxZKS4gKi8KKwloZWFkLT5yZWFkX2F2YWlsID0gMDsKKwl0b21veW9faW9fcHJpbnRmKGhlYWQsICIjIHNlbGVjdCAlc1xuIiwgZGF0YSk7CisJaGVhZC0+cmVhZF9zaW5nbGVfZG9tYWluID0gdHJ1ZTsKKwloZWFkLT5yZWFkX2VvZiA9ICFkb21haW47CisJaWYgKGRvbWFpbikgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkOworCQloZWFkLT5yZWFkX3ZhcjEgPSBOVUxMOworCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCQlpZiAoZCA9PSBkb21haW4pCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjEgPSAmZC0+bGlzdDsKKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCWhlYWQtPnJlYWRfYml0ID0gMDsKKwkJaGVhZC0+cmVhZF9zdGVwID0gMDsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCkKKwkJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiMgVGhpcyBpcyBhIGRlbGV0ZWQgZG9tYWluLlxuIik7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fcG9saWN5IC0gV3JpdGUgZG9tYWluIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBoZWFkLT53cml0ZV92YXIxOworCWJvb2wgaXNfZGVsZXRlID0gZmFsc2U7CisJYm9vbCBpc19zZWxlY3QgPSBmYWxzZTsKKwlib29sIGlzX3VuZGVsZXRlID0gZmFsc2U7CisJdW5zaWduZWQgaW50IHByb2ZpbGU7CisKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSkpCisJCWlzX2RlbGV0ZSA9IHRydWU7CisJZWxzZSBpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX1NFTEVDVCkpCisJCWlzX3NlbGVjdCA9IHRydWU7CisJZWxzZSBpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX1VOREVMRVRFKSkKKwkJaXNfdW5kZWxldGUgPSB0cnVlOworCWlmIChpc19zZWxlY3QgJiYgdG9tb3lvX2lzX3NlbGVjdF9vbmUoaGVhZCwgZGF0YSkpCisJCXJldHVybiAwOworCS8qIERvbid0IGFsbG93IHVwZGF0aW5nIHBvbGljaWVzIGJ5IG5vbiBtYW5hZ2VyIHByb2dyYW1zLiAqLworCWlmICghdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKCkpCisJCXJldHVybiAtRVBFUk07CisJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEpKSB7CisJCWRvbWFpbiA9IE5VTEw7CisJCWlmIChpc19kZWxldGUpCisJCQl0b21veW9fZGVsZXRlX2RvbWFpbihkYXRhKTsKKwkJZWxzZSBpZiAoaXNfc2VsZWN0KSB7CisJCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhKTsKKwkJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJfSBlbHNlIGlmIChpc191bmRlbGV0ZSkKKwkJCWRvbWFpbiA9IHRvbW95b191bmRlbGV0ZV9kb21haW4oZGF0YSk7CisJCWVsc2UKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGRhdGEsIDApOworCQloZWFkLT53cml0ZV92YXIxID0gZG9tYWluOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNzY2FuZihkYXRhLCBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAiJXUiLCAmcHJvZmlsZSkgPT0gMQorCSAgICAmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUykgeworCQlpZiAodG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdIHx8ICF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCWRvbWFpbi0+cHJvZmlsZSA9ICh1OCkgcHJvZmlsZTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGRhdGEsIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkpIHsKKwkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhkb21haW4sIGlzX2RlbGV0ZSwKKwkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGRhdGEsIGRvbWFpbiwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsIC0gUHJpbnQgYSBzaW5nbGUgcGF0aCBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKgorCQkJCQkgcHRyKQoreworCWludCBwb3M7CisJdTggYml0OworCWNvbnN0IGNoYXIgKmF0bWFyayA9ICIiOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IHUxNiBwZXJtID0gcHRyLT5wZXJtOworCisJZmlsZW5hbWUgPSBwdHItPmZpbGVuYW1lLT5uYW1lOworCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OOworCSAgICAgYml0KyspIHsKKwkJY29uc3QgY2hhciAqbXNnOworCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCisJCQljb250aW51ZTsKKwkJLyogUHJpbnQgInJlYWQvd3JpdGUiIGluc3RlYWQgb2YgInJlYWQiIGFuZCAid3JpdGUiLiAqLworCQlpZiAoKGJpdCA9PSBUT01PWU9fVFlQRV9SRUFEX0FDTCB8fAorCQkgICAgIGJpdCA9PSBUT01PWU9fVFlQRV9XUklURV9BQ0wpCisJCSAgICAmJiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkpCisJCQljb250aW51ZTsKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoYml0KTsKKwkJcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICJhbGxvd18lcyAlcyVzXG4iLCBtc2csCisJCQkJICAgICAgYXRtYXJrLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9iaXQgPSAwOworCXJldHVybiB0cnVlOworIG91dDoKKwloZWFkLT5yZWFkX2JpdCA9IGJpdDsKKwloZWFkLT5yZWFkX2F2YWlsID0gcG9zOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsIC0gUHJpbnQgYSBkb3VibGUgcGF0aCBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKgorCQkJCQkgcHRyKQoreworCWludCBwb3M7CisJY29uc3QgY2hhciAqYXRtYXJrMSA9ICIiOworCWNvbnN0IGNoYXIgKmF0bWFyazIgPSAiIjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTE7CisJY29uc3QgY2hhciAqZmlsZW5hbWUyOworCWNvbnN0IHU4IHBlcm0gPSBwdHItPnBlcm07CisJdTggYml0OworCisJZmlsZW5hbWUxID0gcHRyLT5maWxlbmFtZTEtPm5hbWU7CisJZmlsZW5hbWUyID0gcHRyLT5maWxlbmFtZTItPm5hbWU7CisJZm9yIChiaXQgPSBoZWFkLT5yZWFkX2JpdDsgYml0IDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT047CisJICAgICBiaXQrKykgeworCQljb25zdCBjaGFyICptc2c7CisJCWlmICghKHBlcm0gJiAoMSA8PCBiaXQpKSkKKwkJCWNvbnRpbnVlOworCQltc2cgPSB0b21veW9fZHAya2V5d29yZChiaXQpOworCQlwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzICVzJXMgJXMlc1xuIiwgbXNnLAorCQkJCSAgICAgIGF0bWFyazEsIGZpbGVuYW1lMSwgYXRtYXJrMiwgZmlsZW5hbWUyKSkKKwkJCWdvdG8gb3V0OworCX0KKwloZWFkLT5yZWFkX2JpdCA9IDA7CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCWhlYWQtPnJlYWRfYml0ID0gYml0OworCWhlYWQtPnJlYWRfYXZhaWwgPSBwb3M7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19wcmludF9lbnRyeSAtIFByaW50IGFuIEFDTCBlbnRyeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICogQHB0cjogIFBvaW50ZXIgdG8gYW4gQUNMIGVudHJ5LgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9lbnRyeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCit7CisJY29uc3QgdTggYWNsX3R5cGUgPSB0b21veW9fYWNsX3R5cGUyKHB0cik7CisKKwlpZiAoYWNsX3R5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCXJldHVybiB0cnVlOworCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpIHsKKwkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2wKKwkJCT0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgICAgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgICAgICBoZWFkKTsKKwkJcmV0dXJuIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woaGVhZCwgYWNsKTsKKwl9CisJaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbAorCQkJPSBjb250YWluZXJfb2YocHRyLAorCQkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgICAgIGhlYWQpOworCQlyZXR1cm4gdG9tb3lvX3ByaW50X2RvdWJsZV9wYXRoX2FjbChoZWFkLCBhY2wpOworCX0KKwlCVUcoKTsgLyogVGhpcyBtdXN0IG5vdCBoYXBwZW4uICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3kgLSBSZWFkIGRvbWFpbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZG9tYWluX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKmFwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJaWYgKGhlYWQtPnJlYWRfc3RlcCA9PSAwKQorCQloZWFkLT5yZWFkX3N0ZXAgPSAxOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKGRwb3MsIGhlYWQtPnJlYWRfdmFyMSwgJnRvbW95b19kb21haW5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWNvbnN0IGNoYXIgKnF1b3RhX2V4Y2VlZGVkID0gIiI7CisJCWNvbnN0IGNoYXIgKnRyYW5zaXRpb25fZmFpbGVkID0gIiI7CisJCWNvbnN0IGNoYXIgKmlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCA9ICIiOworCQlkb21haW4gPSBsaXN0X2VudHJ5KGRwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8sIGxpc3QpOworCQlpZiAoaGVhZC0+cmVhZF9zdGVwICE9IDEpCisJCQlnb3RvIGFjbF9sb29wOworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkICYmICFoZWFkLT5yZWFkX3NpbmdsZV9kb21haW4pCisJCQljb250aW51ZTsKKwkJLyogUHJpbnQgZG9tYWlubmFtZSBhbmQgZmxhZ3MuICovCisJCWlmIChkb21haW4tPnF1b3RhX3dhcm5lZCkKKwkJCXF1b3RhX2V4Y2VlZGVkID0gInF1b3RhX2V4Y2VlZGVkXG4iOworCQlpZiAoZG9tYWluLT5mbGFncyAmIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQpCisJCQl0cmFuc2l0aW9uX2ZhaWxlZCA9ICJ0cmFuc2l0aW9uX2ZhaWxlZFxuIjsKKwkJaWYgKGRvbWFpbi0+ZmxhZ3MgJgorCQkgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpCisJCQlpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQKKwkJCQk9IFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAiXG4iOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwKKwkJCQkgICAgICAiJXNcbiIgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgIiV1XG4iCisJCQkJICAgICAgIiVzJXMlc1xuIiwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lLAorCQkJCSAgICAgIGRvbWFpbi0+cHJvZmlsZSwgcXVvdGFfZXhjZWVkZWQsCisJCQkJICAgICAgdHJhbnNpdGlvbl9mYWlsZWQsCisJCQkJICAgICAgaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJaGVhZC0+cmVhZF9zdGVwID0gMjsKK2FjbF9sb29wOgorCQlpZiAoaGVhZC0+cmVhZF9zdGVwID09IDMpCisJCQlnb3RvIHRhaWxfbWFyazsKKwkJLyogUHJpbnQgQUNMIGVudHJpZXMgaW4gdGhlIGRvbWFpbi4gKi8KKwkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfY29va2llKGFwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCQkgICAgICAmZG9tYWluLT5hY2xfaW5mb19saXN0KSB7CisJCQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIKKwkJCQk9IGxpc3RfZW50cnkoYXBvcywgc3RydWN0IHRvbW95b19hY2xfaW5mbywKKwkJCQkJICAgICAgbGlzdCk7CisJCQlpZiAoIXRvbW95b19wcmludF9lbnRyeShoZWFkLCBwdHIpKSB7CisJCQkJZG9uZSA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwkJaWYgKCFkb25lKQorCQkJYnJlYWs7CisJCWhlYWQtPnJlYWRfc3RlcCA9IDM7Cit0YWlsX21hcms6CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiXG4iKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJaGVhZC0+cmVhZF9zdGVwID0gMTsKKwkJaWYgKGhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbikKKwkJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaGVhZC0+cmVhZF9lb2YgPSBkb25lOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZSAtIEFzc2lnbiBwcm9maWxlIGZvciBzcGVjaWZpZWQgZG9tYWluLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBkb2luZworICoKKyAqICAgICAoIGVjaG8gInNlbGVjdCAiICRkb21haW5uYW1lOyBlY2hvICJ1c2VfcHJvZmlsZSAiICRwcm9maWxlICkgfAorICogICAgIC91c3IvbGliL2Njcy9sb2FkcG9saWN5IC1kCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJY2hhciAqY3AgPSBzdHJjaHIoZGF0YSwgJyAnKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJdW5zaWduZWQgbG9uZyBwcm9maWxlOworCisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNwID0gJ1wwJzsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oY3AgKyAxKTsKKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmcHJvZmlsZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkb21haW4gJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMKKwkgICAgJiYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSB8fCAhdG9tb3lvX3BvbGljeV9sb2FkZWQpKQorCQlkb21haW4tPnByb2ZpbGUgPSAodTgpIHByb2ZpbGU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX3Byb2ZpbGUgLSBSZWFkIG9ubHkgZG9tYWlubmFtZSBhbmQgcHJvZmlsZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgbGlzdCBvZiBwcm9maWxlIG51bWJlciBhbmQgZG9tYWlubmFtZSBwYWlycy4KKyAqCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcKKyAqCisgKiAgICAgZ3JlcCAtQSAxICdePGtlcm5lbD4nIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9kb21haW5fcG9saWN5IHwKKyAqICAgICBhd2sgJyB7IGlmICggZG9tYWlubmFtZSA9PSAiIiApIHsgaWYgKCAkMSA9PSAiPGtlcm5lbD4iICkKKyAqICAgICBkb21haW5uYW1lID0gJDA7IH0gZWxzZSBpZiAoICQxID09ICJ1c2VfcHJvZmlsZSIgKSB7CisgKiAgICAgcHJpbnQgJDIgIiAiIGRvbWFpbm5hbWU7IGRvbWFpbm5hbWUgPSAiIjsgfSB9IDsgJworICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMSwgJnRvbW95b19kb21haW5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWRvbWFpbiA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvLCBsaXN0KTsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1ICVzXG4iLCBkb21haW4tPnByb2ZpbGUsCisJCQkJICAgICAgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfcGlkOiBTcGVjaWZ5IFBJRCB0byBvYnRhaW4gZG9tYWlubmFtZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfcGlkKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgcGlkOworCS8qIE5vIGVycm9yIGNoZWNrLiAqLworCXN0cmljdF9zdHJ0b3VsKGhlYWQtPndyaXRlX2J1ZiwgMTAsICZwaWQpOworCWhlYWQtPnJlYWRfc3RlcCA9IChpbnQpIHBpZDsKKwloZWFkLT5yZWFkX2VvZiA9IGZhbHNlOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX3BpZCAtIEdldCBkb21haW5uYW1lIG9mIHRoZSBzcGVjaWZpZWQgUElELgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0aGUgZG9tYWlubmFtZSB3aGljaCB0aGUgc3BlY2lmaWVkIFBJRCBpcyBpbiBvbiBzdWNjZXNzLAorICogZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyAqIFRoZSBQSUQgaXMgc3BlY2lmaWVkIGJ5IHRvbW95b193cml0ZV9waWQoKSBzbyB0aGF0IHRoZSB1c2VyIGNhbiBvYnRhaW4KKyAqIHVzaW5nIHJlYWQoKS93cml0ZSgpIGludGVyZmFjZSByYXRoZXIgdGhhbiBzeXNjdGwoKSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfcGlkKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmIChoZWFkLT5yZWFkX2F2YWlsID09IDAgJiYgIWhlYWQtPnJlYWRfZW9mKSB7CisJCWNvbnN0IGludCBwaWQgPSBoZWFkLT5yZWFkX3N0ZXA7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOworCQlpZiAocCkKKwkJCWRvbWFpbiA9IHRvbW95b19yZWFsX2RvbWFpbihwKTsKKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCisJCWlmIChkb21haW4pCisJCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlZCAldSAlcyIsIHBpZCwgZG9tYWluLT5wcm9maWxlLAorCQkJCQkgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeSAtIFdyaXRlIGV4Y2VwdGlvbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJYm9vbCBpc19kZWxldGUgPSB0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVMRVRFKTsKKworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGRhdGEsIGZhbHNlLAorCQkJCQkJCSBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGRhdGEsIHRydWUsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTikpCisJCXJldHVybiB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShkYXRhLCBmYWxzZSwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfTk9fSU5JVElBTElaRV9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koZGF0YSwgdHJ1ZSwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfQUxJQVMpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCkpCisJCXJldHVybiB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeSAtIFJlYWQgZXhjZXB0aW9uIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJc3dpdGNoIChoZWFkLT5yZWFkX3N0ZXApIHsKKwkJY2FzZSAwOgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDE7CisJCWNhc2UgMToKKwkJCWlmICghdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gMjsKKwkJY2FzZSAyOgorCQkJaWYgKCF0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gMzsKKwkJY2FzZSAzOgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDQ7CisJCWNhc2UgNDoKKwkJCWlmICghdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA1OworCQljYXNlIDU6CisJCQlpZiAoIXRvbW95b19yZWFkX2FsaWFzX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA2OworCQljYXNlIDY6CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNzsKKwkJY2FzZSA3OgorCQkJaWYgKCF0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gODsKKwkJY2FzZSA4OgorCQkJaWYgKCF0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA5OworCQljYXNlIDk6CisJCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBwYXRoIHRvIHBvbGljeSBsb2FkZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbG9hZGVyID0gIi9zYmluL3RvbW95by1pbml0IjsKKworLyoqCisgKiB0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMgLSBDaGVjayB3aGV0aGVyIC9zYmluL3RvbW95by1pbml0IGV4aXN0cy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wb2xpY3lfbG9hZGVyX2V4aXN0cyh2b2lkKQoreworCS8qCisJICogRG9uJ3QgYWN0aXZhdGUgTUFDIGlmIHRoZSBwb2xpY3kgbG9hZGVyIGRvZXNuJ3QgZXhpc3QuCisJICogSWYgdGhlIGluaXRyZCBpbmNsdWRlcyAvc2Jpbi9pbml0IGJ1dCByZWFsLXJvb3QtZGV2IGhhcyBub3QKKwkgKiBtb3VudGVkIG9uIC8geWV0LCBhY3RpdmF0aW5nIE1BQyB3aWxsIGJsb2NrIHRoZSBzeXN0ZW0gc2luY2UKKwkgKiBwb2xpY2llcyBhcmUgbm90IGxvYWRlZCB5ZXQuCisJICogVGh1cywgbGV0IGRvX2V4ZWN2ZSgpIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeXRpbWUuCisJICovCisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKworCWlmIChwYXRoX2xvb2t1cCh0b21veW9fbG9hZGVyLCBMT09LVVBfRk9MTE9XLCAmbmQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5vdCBhY3RpdmF0aW5nIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBub3cgIgorCQkgICAgICAgInNpbmNlICVzIGRvZXNuJ3QgZXhpc3QuXG4iLCB0b21veW9fbG9hZGVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlwYXRoX3B1dCgmbmQucGF0aCk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX2xvYWRfcG9saWN5IC0gUnVuIGV4dGVybmFsIHBvbGljeSBsb2FkZXIgdG8gbG9hZCBwb2xpY3kuCisgKgorICogQGZpbGVuYW1lOiBUaGUgcHJvZ3JhbSBhYm91dCB0byBzdGFydC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIEBmaWxlbmFtZSBpcyAvc2Jpbi9pbml0ICwgYW5kIGlmIHNvCisgKiBpbnZva2UgL3NiaW4vdG9tb3lvLWluaXQgYW5kIHdhaXQgZm9yIHRoZSB0ZXJtaW5hdGlvbiBvZiAvc2Jpbi90b21veW8taW5pdAorICogYW5kIHRoZW4gY29udGludWVzIGludm9jYXRpb24gb2YgL3NiaW4vaW5pdC4KKyAqIC9zYmluL3RvbW95by1pbml0IHJlYWRzIHBvbGljeSBmaWxlcyBpbiAvZXRjL3RvbW95by8gZGlyZWN0b3J5IGFuZAorICogd3JpdGVzIHRvIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlcy4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX2xvYWRfcG9saWN5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgKmFyZ3ZbMl07CisJY2hhciAqZW52cFszXTsKKworCWlmICh0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJcmV0dXJuOworCS8qCisJICogQ2hlY2sgZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCBvciAvc2Jpbi90b21veW8tc3RhcnQuCisJICogL3NiaW4vdG9tb3lvLXN0YXJ0IGlzIGEgZHVtbXkgZmlsZW5hbWUgaW4gY2FzZSB3aGVyZSAvc2Jpbi9pbml0IGNhbid0CisJICogYmUgcGFzc2VkLgorCSAqIFlvdSBjYW4gY3JlYXRlIC9zYmluL3RvbW95by1zdGFydCBieQorCSAqICJsbiAtcyAvYmluL3RydWUgL3NiaW4vdG9tb3lvLXN0YXJ0Ii4KKwkgKi8KKwlpZiAoc3RyY21wKGZpbGVuYW1lLCAiL3NiaW4vaW5pdCIpICYmCisJICAgIHN0cmNtcChmaWxlbmFtZSwgIi9zYmluL3RvbW95by1zdGFydCIpKQorCQlyZXR1cm47CisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMoKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2FsbGluZyAlcyB0byBsb2FkIHBvbGljeS4gUGxlYXNlIHdhaXQuXG4iLAorCSAgICAgICB0b21veW9fbG9hZGVyKTsKKwlhcmd2WzBdID0gKGNoYXIgKikgdG9tb3lvX2xvYWRlcjsKKwlhcmd2WzFdID0gTlVMTDsKKwllbnZwWzBdID0gIkhPTUU9LyI7CisJZW52cFsxXSA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIjsKKwllbnZwWzJdID0gTlVMTDsKKwljYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIDEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgYWN0aXZhdGVkLlxuIik7CisJdG9tb3lvX3BvbGljeV9sb2FkZWQgPSB0cnVlOworCXsgLyogQ2hlY2sgYWxsIHByb2ZpbGVzIGN1cnJlbnRseSBhc3NpZ25lZCB0byBkb21haW5zIGFyZSBkZWZpbmVkLiAqLworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQkJY29uc3QgdTggcHJvZmlsZSA9IGRvbWFpbi0+cHJvZmlsZTsKKwkJCWlmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0pCisJCQkJY29udGludWU7CisJCQlwYW5pYygiUHJvZmlsZSAldSAodXNlZCBieSAnJXMnKSBub3QgZGVmaW5lZC5cbiIsCisJCQkgICAgICBwcm9maWxlLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCQl9CisJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwl9Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfdmVyc2lvbjogR2V0IHZlcnNpb24uCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfdmVyc2lvbihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIjIuMi4wLXByZSIpOworCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX3NlbGZfZG9tYWluIC0gR2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyBkb21haW5uYW1lLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9zZWxmX2RvbWFpbihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCS8qCisJCSAqIHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZSAhPSBOVUxMCisJCSAqIGJlY2F1c2UgZXZlcnkgcHJvY2VzcyBiZWxvbmdzIHRvIGEgZG9tYWluIGFuZAorCQkgKiB0aGUgZG9tYWluJ3MgbmFtZSBjYW5ub3QgYmUgTlVMTC4KKwkJICovCisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiVzIiwgdG9tb3lvX2RvbWFpbigpLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fb3Blbl9jb250cm9sIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAdHlwZTogVHlwZSBvZiBpbnRlcmZhY2UuCisgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIEFzc29jaWF0ZXMgcG9saWN5IGhhbmRsZXIgYW5kIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gdG9tb3lvX2FsbG9jKHNpemVvZigqaGVhZCkpOworCisJaWYgKCFoZWFkKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9pbml0KCZoZWFkLT5pb19zZW0pOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVE9NT1lPX0RPTUFJTlBPTElDWToKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3k7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX0VYQ0VQVElPTlBPTElDWToKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2V4Y2VwdGlvbl9wb2xpY3kgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2V4Y2VwdGlvbl9wb2xpY3k7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1NFTEZET01BSU46CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9zZWxmX2RvbWFpbiAqLworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfc2VsZl9kb21haW47CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX0RPTUFJTl9TVEFUVVM6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8uZG9tYWluX3N0YXR1cyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19QUk9DRVNTX1NUQVRVUzoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLy5wcm9jZXNzX3N0YXR1cyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9waWQ7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9waWQ7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1ZFUlNJT046CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by92ZXJzaW9uICovCisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF92ZXJzaW9uOworCQloZWFkLT5yZWFkYnVmX3NpemUgPSAxMjg7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX01FTUlORk86CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9tZW1pbmZvICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyOworCQloZWFkLT5yZWFkYnVmX3NpemUgPSA1MTI7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1BST0ZJTEU6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9wcm9maWxlICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX3Byb2ZpbGU7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9wcm9maWxlOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19NQU5BR0VSOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWFuYWdlciAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5OworCQlicmVhazsKKwl9CisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBhbGxvY2F0ZSByZWFkX2J1ZiBzaW5jZSBpdCBpcyBub3Qgb3BlbmVkCisJCSAqIGZvciByZWFkaW5nLgorCQkgKi8KKwkJaGVhZC0+cmVhZCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKCFoZWFkLT5yZWFkYnVmX3NpemUpCisJCQloZWFkLT5yZWFkYnVmX3NpemUgPSA0MDk2ICogMjsKKwkJaGVhZC0+cmVhZF9idWYgPSB0b21veW9fYWxsb2MoaGVhZC0+cmVhZGJ1Zl9zaXplKTsKKwkJaWYgKCFoZWFkLT5yZWFkX2J1ZikgeworCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBhbGxvY2F0ZSB3cml0ZV9idWYgc2luY2UgaXQgaXMgbm90IG9wZW5lZAorCQkgKiBmb3Igd3JpdGluZy4KKwkJICovCisJCWhlYWQtPndyaXRlID0gTlVMTDsKKwl9IGVsc2UgaWYgKGhlYWQtPndyaXRlKSB7CisJCWhlYWQtPndyaXRlYnVmX3NpemUgPSA0MDk2ICogMjsKKwkJaGVhZC0+d3JpdGVfYnVmID0gdG9tb3lvX2FsbG9jKGhlYWQtPndyaXRlYnVmX3NpemUpOworCQlpZiAoIWhlYWQtPndyaXRlX2J1ZikgeworCQkJdG9tb3lvX2ZyZWUoaGVhZC0+cmVhZF9idWYpOworCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBoZWFkOworCS8qCisJICogQ2FsbCB0aGUgaGFuZGxlciBub3cgaWYgdGhlIGZpbGUgaXMKKwkgKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4KKwkgKiBzbyB0aGF0IHRoZSB1c2VyIGNhbiB1c2UKKwkgKiBjYXQgPCAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4iCisJICogdG8ga25vdyB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKwkgKi8KKwlpZiAodHlwZSA9PSBUT01PWU9fU0VMRkRPTUFJTikKKwkJdG9tb3lvX3JlYWRfY29udHJvbChmaWxlLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9jb250cm9sIC0gcmVhZCgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogICAgICAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZmZlcjogICAgIFBvaW5lciB0byBidWZmZXIgdG8gd3JpdGUgdG8uCisgKiBAYnVmZmVyX2xlbjogU2l6ZSBvZiBAYnVmZmVyLgorICoKKyAqIFJldHVybnMgYnl0ZXMgcmVhZCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbikKK3sKKwlpbnQgbGVuID0gMDsKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpjcDsKKworCWlmICghaGVhZC0+cmVhZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKKwkJcmV0dXJuIC1FSU5UUjsKKwkvKiBDYWxsIHRoZSBwb2xpY3kgaGFuZGxlci4gKi8KKwlsZW4gPSBoZWFkLT5yZWFkKGhlYWQpOworCWlmIChsZW4gPCAwKQorCQlnb3RvIG91dDsKKwkvKiBXcml0ZSB0byBidWZmZXIuICovCisJbGVuID0gaGVhZC0+cmVhZF9hdmFpbDsKKwlpZiAobGVuID4gYnVmZmVyX2xlbikKKwkJbGVuID0gYnVmZmVyX2xlbjsKKwlpZiAoIWxlbikKKwkJZ290byBvdXQ7CisJLyogaGVhZC0+cmVhZF9idWYgY2hhbmdlcyBieSBzb21lIGZ1bmN0aW9ucy4gKi8KKwljcCA9IGhlYWQtPnJlYWRfYnVmOworCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBjcCwgbGVuKSkgeworCQlsZW4gPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9hdmFpbCAtPSBsZW47CisJbWVtbW92ZShjcCwgY3AgKyBsZW4sIGhlYWQtPnJlYWRfYXZhaWwpOworIG91dDoKKwltdXRleF91bmxvY2soJmhlYWQtPmlvX3NlbSk7CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfY29udHJvbCAtIHdyaXRlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmZmVyOiAgICAgUG9pbnRlciB0byBidWZmZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIEBidWZmZXJfbGVuIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQljb25zdCBpbnQgYnVmZmVyX2xlbikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyb3IgPSBidWZmZXJfbGVuOworCWludCBhdmFpbF9sZW4gPSBidWZmZXJfbGVuOworCWNoYXIgKmNwMCA9IGhlYWQtPndyaXRlX2J1ZjsKKworCWlmICghaGVhZC0+d3JpdGUpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGJ1ZmZlcl9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBEb24ndCBhbGxvdyB1cGRhdGluZyBwb2xpY2llcyBieSBub24gbWFuYWdlciBwcm9ncmFtcy4gKi8KKwlpZiAoaGVhZC0+d3JpdGUgIT0gdG9tb3lvX3dyaXRlX3BpZCAmJgorCSAgICBoZWFkLT53cml0ZSAhPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeSAmJgorCSAgICAhdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKCkpCisJCXJldHVybiAtRVBFUk07CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKKwkJcmV0dXJuIC1FSU5UUjsKKwkvKiBSZWFkIGEgbGluZSBhbmQgZGlzcGF0Y2ggaXQgdG8gdGhlIHBvbGljeSBoYW5kbGVyLiAqLworCXdoaWxlIChhdmFpbF9sZW4gPiAwKSB7CisJCWNoYXIgYzsKKwkJaWYgKGhlYWQtPndyaXRlX2F2YWlsID49IGhlYWQtPndyaXRlYnVmX3NpemUgLSAxKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChnZXRfdXNlcihjLCBidWZmZXIpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlidWZmZXIrKzsKKwkJYXZhaWxfbGVuLS07CisJCWNwMFtoZWFkLT53cml0ZV9hdmFpbCsrXSA9IGM7CisJCWlmIChjICE9ICdcbicpCisJCQljb250aW51ZTsKKwkJY3AwW2hlYWQtPndyaXRlX2F2YWlsIC0gMV0gPSAnXDAnOworCQloZWFkLT53cml0ZV9hdmFpbCA9IDA7CisJCXRvbW95b19ub3JtYWxpemVfbGluZShjcDApOworCQloZWFkLT53cml0ZShoZWFkKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZoZWFkLT5pb19zZW0pOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2xvc2VfY29udHJvbCAtIGNsb3NlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmVsZWFzZXMgbWVtb3J5IGFuZCByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2Nsb3NlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiBSZWxlYXNlIG1lbW9yeSB1c2VkIGZvciBwb2xpY3kgSS9PLiAqLworCXRvbW95b19mcmVlKGhlYWQtPnJlYWRfYnVmKTsKKwloZWFkLT5yZWFkX2J1ZiA9IE5VTEw7CisJdG9tb3lvX2ZyZWUoaGVhZC0+d3JpdGVfYnVmKTsKKwloZWFkLT53cml0ZV9idWYgPSBOVUxMOworCXRvbW95b19mcmVlKGhlYWQpOworCWhlYWQgPSBOVUxMOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50IC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3IgQUNMIGVudHJ5LgorICoKKyAqIEBhY2xfdHlwZTogIFR5cGUgb2YgQUNMIGVudHJ5LgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgQUNMIGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICp0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoY29uc3QgdTggYWNsX3R5cGUpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisKKwlzd2l0Y2ggKGFjbF90eXBlKSB7CisJY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQpOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTDoKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChsZW4pOworCWlmICghcHRyKQorCQlyZXR1cm4gTlVMTDsKKwlwdHItPnR5cGUgPSBhY2xfdHlwZTsKKwlyZXR1cm4gcHRyOworfQorCisvKioKKyAqIHRvbW95b19vcGVuIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNvbnN0IGludCBrZXkgPSAoKHU4ICopIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSkKKwkJLSAoKHU4ICopIE5VTEwpOworCXJldHVybiB0b21veW9fb3Blbl9jb250cm9sKGtleSwgZmlsZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlbGVhc2UgLSBjbG9zZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0b21veW9fY2xvc2VfY29udHJvbChmaWxlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZCAtIHJlYWQoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmOiAgIFBvaW50ZXIgdG8gYnVmZmVyLgorICogQGNvdW50OiBTaXplIG9mIEBidWYuCisgKiBAcHBvczogIFVudXNlZC4KKyAqCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJICAgbG9mZl90ICpwcG9zKQoreworCXJldHVybiB0b21veW9fcmVhZF9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKioKKyAqIHRvbW95b193cml0ZSAtIHdyaXRlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZjogICBQb2ludGVyIHRvIGJ1ZmZlci4KKyAqIEBjb3VudDogU2l6ZSBvZiBAYnVmLgorICogQHBwb3M6ICBVbnVzZWQuCisgKgorICogUmV0dXJucyBAY291bnQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHRvbW95b193cml0ZV9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKiBPcGVyYXRpb25zIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRvbW95b19vcGVyYXRpb25zID0geworCS5vcGVuICAgID0gdG9tb3lvX29wZW4sCisJLnJlbGVhc2UgPSB0b21veW9fcmVsZWFzZSwKKwkucmVhZCAgICA9IHRvbW95b19yZWFkLAorCS53cml0ZSAgID0gdG9tb3lvX3dyaXRlLAorfTsKKworLyoqCisgKiB0b21veW9fY3JlYXRlX2VudHJ5IC0gQ3JlYXRlIGludGVyZmFjZSBmaWxlcyB1bmRlciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGRpcmVjdG9yeS4KKyAqCisgKiBAbmFtZTogICBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAbW9kZTogICBUaGUgcGVybWlzc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAcGFyZW50OiBUaGUgcGFyZW50IGRpcmVjdG9yeS4KKyAqIEBrZXk6ICAgIFR5cGUgb2YgaW50ZXJmYWNlLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHRvbW95b19jcmVhdGVfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgbW9kZV90IG1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3QgdTgga2V5KQoreworCXNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50LCAoKHU4ICopIE5VTEwpICsga2V5LAorCQkJICAgICAgICZ0b21veW9fb3BlcmF0aW9ucyk7Cit9CisKKy8qKgorICogdG9tb3lvX2luaXRlcmZhY2VfaW5pdCAtIEluaXRpYWxpemUgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IF9faW5pdCB0b21veW9faW5pdGVyZmFjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqdG9tb3lvX2RpcjsKKworCS8qIERvbid0IGNyZWF0ZSBzZWN1cml0eWZzIGVudHJpZXMgdW5sZXNzIHJlZ2lzdGVyZWQuICovCisJaWYgKGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCXJldHVybiAwOworCisJdG9tb3lvX2RpciA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigidG9tb3lvIiwgTlVMTCk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZG9tYWluX3BvbGljeSIsICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0RPTUFJTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZXhjZXB0aW9uX3BvbGljeSIsIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgic2VsZl9kb21haW4iLCAgICAgIDA0MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1NFTEZET01BSU4pOworCXRvbW95b19jcmVhdGVfZW50cnkoIi5kb21haW5fc3RhdHVzIiwgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19ET01BSU5fU1RBVFVTKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCIucHJvY2Vzc19zdGF0dXMiLCAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPQ0VTU19TVEFUVVMpOworCXRvbW95b19jcmVhdGVfZW50cnkoIm1lbWluZm8iLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19NRU1JTkZPKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJwcm9maWxlIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPRklMRSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgibWFuYWdlciIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX01BTkFHRVIpOworCXRvbW95b19jcmVhdGVfZW50cnkoInZlcnNpb24iLCAgICAgICAgICAwNDAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwodG9tb3lvX2luaXRlcmZhY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmggYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjYjdjYwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApAQCAtMCwwICsxLDM1OSBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9jb21tb24uaAorICoKKyAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSAorI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworc3RydWN0IGRlbnRyeTsKK3N0cnVjdCB2ZnNtb3VudDsKKworLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgaG9sZGluZyBwYXRobmFtZXMuICovCitzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyIHsKKwljaGFyIGJ1ZmZlcls0MDk2XTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBhIHRva2VuLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGhhc2g7ICAgICAgICAgIC8qID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgc3RybGVuKG5hbWUpKSAqLworCXUxNiB0b3RhbF9sZW47ICAgICAvKiA9IHN0cmxlbihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1MTYgY29uc3RfbGVuOyAgICAgLyogPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSkgICAgICovCisJYm9vbCBpc19kaXI7ICAgICAgIC8qID0gdG9tb3lvX3N0cmVuZHN3aXRoKG5hbWUsICIvIikgICAgICAqLworCWJvb2wgaXNfcGF0dGVybmVkOyAvKiA9IHRvbW95b19wYXRoX2NvbnRhaW5zX3BhdHRlcm4obmFtZSkgKi8KKwl1MTYgZGVwdGg7ICAgICAgICAgLyogPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKSAgICAgICAgICAgICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgbWF4IGxlbmd0aCBvZiBhIHRva2VuLgorICoKKyAqIEEgdG9rZW4gY29uc2lzdHMgb2Ygb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVycy4KKyAqIE5vbiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBhIHRva2VuIGlzIHJlcHJlc2VudGVkIGluIFxvb28gc3R5bGUKKyAqIG9jdGFsIHN0cmluZy4gVGh1cywgXCBpdHNlbGYgaXMgcmVwcmVzZW50ZWQgYXMgXFwuCisgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gNDAwMAorCisvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgcmVxdWVzdGVkIHBhdGhuYW1lLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIHsKKwkvKiBLZWVwICJoZWFkIiBmaXJzdCwgZm9yIHRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8gdG9tb3lvX2ZyZWUoKS4gKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBoZWFkOworCWNoYXIgYmFyaWllcjFbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCisJY2hhciBib2R5W1RPTU9ZT19NQVhfUEFUSE5BTUVfTEVOXTsKKwljaGFyIGJhcnJpZXIyWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLworfTsKKworLyoKKyAqIENvbW1vbiBoZWFkZXIgZm9yIGhvbGRpbmcgQUNMIGVudHJpZXMuCisgKgorICogUGFja2luZyAic3RydWN0IHRvbW95b19hY2xfaW5mbyIgYWxsb3dzCisgKiAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiB0byBlbWJlZCAidTE2IiBhbmQKKyAqICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIHRvIGVtYmVkICJ1OCIKKyAqIHdpdGhvdXQgZW5sYXJnaW5nIHRoZWlyIHN0cnVjdHVyZSBzaXplLgorICovCitzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyoKKwkgKiBUeXBlIG9mIHRoaXMgQUNMIGVudHJ5LgorCSAqCisJICogTVNCIGlzIGlzX2RlbGV0ZWQgZmxhZy4KKwkgKi8KKwl1OCB0eXBlOworfSBfX3BhY2tlZDsKKworLyogVGhpcyBBQ0wgZW50cnkgaXMgZGVsZXRlZC4gICAgICAgICAgICovCisjZGVmaW5lIFRPTU9ZT19BQ0xfREVMRVRFRCAgICAgICAgMHg4MAorCisvKiBTdHJ1Y3R1cmUgZm9yIGRvbWFpbiBpbmZvcm1hdGlvbi4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjbF9pbmZvX2xpc3Q7CisJLyogTmFtZSBvZiB0aGlzIGRvbWFpbi4gTmV2ZXIgTlVMTC4gICAgICAgICAgKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKKwl1OCBwcm9maWxlOyAgICAgICAgLyogUHJvZmlsZSBudW1iZXIgdG8gdXNlLiAqLworCXU4IGlzX2RlbGV0ZWQ7ICAgICAvKiBEZWxldGUgZmxhZy4KKwkJCSAgICAgIDAgPSBhY3RpdmUuCisJCQkgICAgICAxID0gZGVsZXRlZCBidXQgdW5kZWxldGFibGUuCisJCQkgICAgICAyNTUgPSBkZWxldGVkIGFuZCBubyBsb25nZXIgdW5kZWxldGFibGUuICovCisJYm9vbCBxdW90YV93YXJuZWQ7IC8qIFF1b3RhIHdhcm5uaW5nIGZsYWcuICAgKi8KKwkvKiBET01BSU5fRkxBR1NfKi4gVXNlIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoKSB0byBtb2RpZnkuICovCisJdTggZmxhZ3M7Cit9OworCisvKiBQcm9maWxlIG51bWJlciBpcyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1LiAqLworI2RlZmluZSBUT01PWU9fTUFYX1BST0ZJTEVTIDI1NgorCisvKiBJZ25vcmUgImFsbG93X3JlYWQiIGRpcmVjdGl2ZSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAxCisvKgorICogVGhpcyBkb21haW4gd2FzIHVuYWJsZSB0byBjcmVhdGUgYSBuZXcgZG9tYWluIGF0IHRvbW95b19maW5kX25leHRfZG9tYWluKCkKKyAqIGJlY2F1c2UgdGhlIG5hbWUgb2YgdGhlIGRvbWFpbiB0byBiZSBjcmVhdGVkIHdhcyB0b28gbG9uZyBvcgorICogaXQgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4KKyAqIE1vcmUgdGhhbiBvbmUgcHJvY2VzcyBjb250aW51ZWQgZXhlY3ZlKCkgd2l0aG91dCBkb21haW4gdHJhbnNpdGlvbi4KKyAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEICAgICAgICAyCisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZWFkL3dyaXRlIiwgImFsbG93X2V4ZWN1dGUiLCAiYWxsb3dfcmVhZCIsCisgKiAiYWxsb3dfd3JpdGUiLCAiYWxsb3dfY3JlYXRlIiwgImFsbG93X3VubGluayIsICJhbGxvd19ta2RpciIsICJhbGxvd19ybWRpciIsCisgKiAiYWxsb3dfbWtmaWZvIiwgImFsbG93X21rc29jayIsICJhbGxvd19ta2Jsb2NrIiwgImFsbG93X21rY2hhciIsCisgKiAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIgYW5kICJhbGxvd19yZXdyaXRlIiBkaXJlY3RpdmUuCisgKi8KK3N0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICovCisJdTE2IHBlcm07CisJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVuYW1lIiBhbmQgImFsbG93X2xpbmsiIGRpcmVjdGl2ZS4gKi8KK3N0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICovCisJdTggcGVybTsKKwkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUxOworCS8qIFBvaW50ZXIgdG8gc2luZ2xlIHBhdGhuYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTI7Cit9OworCisvKiBLZXl3b3JkcyBmb3IgQUNMcy4gKi8KKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxJQVMgICAgICAgICAgICAgICAgICAgICAiYWxpYXMgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEICAgICAgICAgICAgICAgICJhbGxvd19yZWFkICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVMRVRFICAgICAgICAgICAgICAgICAgICAiZGVsZXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICAgICAgICAgICAgICAiZGVueV9yZXdyaXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOICAgICAgICAgICAgICAiZmlsZV9wYXR0ZXJuICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4gICAgICAgICAiaW5pdGlhbGl6ZV9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTiAgICAgICAgICAgICAgICJrZWVwX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgIm5vX2luaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4gICAgICAgICAgICAibm9fa2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9VTkRFTEVURSAgICAgICAgICAgICAgICAgICJ1bmRlbGV0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFICAgICAgICAgICAgICAgInVzZV9wcm9maWxlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEICAiaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkIgorLyogQSBkb21haW4gZGVmaW5pdGlvbiBzdGFydHMgd2l0aCA8a2VybmVsPi4gKi8KKyNkZWZpbmUgVE9NT1lPX1JPT1RfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAiPGtlcm5lbD4iCisjZGVmaW5lIFRPTU9ZT19ST09UX05BTUVfTEVOICAgICAgICAgICAgICAgICAgICAgKHNpemVvZihUT01PWU9fUk9PVF9OQU1FKSAtIDEpCisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KKyNkZWZpbmUgVE9NT1lPX01BQ19GT1JfRklMRSAgICAgICAgICAgICAgICAgIDAgIC8qIGRvbWFpbl9wb2xpY3kuY29uZiAqLworI2RlZmluZSBUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSAgICAgICAgICAgICAgMQorI2RlZmluZSBUT01PWU9fVkVSQk9TRSAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVggICAgICAgICAgICAgMworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlYWRpbmcvd3JpdGluZyBwb2xpY3kgdmlhIHNlY3VyaXR5ZnMgaW50ZXJmYWNlcy4gKi8KK3N0cnVjdCB0b21veW9faW9fYnVmZmVyIHsKKwlpbnQgKCpyZWFkKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CisJaW50ICgqd3JpdGUpIChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqKTsKKwkvKiBFeGNsdXNpdmUgbG9jayBmb3IgdGhpcyBzdHJ1Y3R1cmUuICAgKi8KKwlzdHJ1Y3QgbXV0ZXggaW9fc2VtOworCS8qIFRoZSBwb3NpdGlvbiBjdXJyZW50bHkgcmVhZGluZyBmcm9tLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWRfdmFyMTsKKwkvKiBFeHRyYSB2YXJpYWJsZXMgZm9yIHJlYWRpbmcuICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFkX3ZhcjI7CisJLyogVGhlIHBvc2l0aW9uIGN1cnJlbnRseSB3cml0aW5nIHRvLiAgICovCisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqd3JpdGVfdmFyMTsKKwkvKiBUaGUgc3RlcCBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgKi8KKwlpbnQgcmVhZF9zdGVwOworCS8qIEJ1ZmZlciBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgICAqLworCWNoYXIgKnJlYWRfYnVmOworCS8qIEVPRiBmbGFnIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAqLworCWJvb2wgcmVhZF9lb2Y7CisJLyogUmVhZCBkb21haW4gQUNMIG9mIHNwZWNpZmllZCBQSUQ/ICAgICovCisJYm9vbCByZWFkX3NpbmdsZV9kb21haW47CisJLyogRXh0cmEgdmFyaWFibGUgZm9yIHJlYWRpbmcuICAgICAgICAgICovCisJdTggcmVhZF9iaXQ7CisJLyogQnl0ZXMgYXZhaWxhYmxlIGZvciByZWFkaW5nLiAgICAgICAgICovCisJaW50IHJlYWRfYXZhaWw7CisJLyogU2l6ZSBvZiByZWFkIGJ1ZmZlci4gICAgICAgICAgICAgICAgICovCisJaW50IHJlYWRidWZfc2l6ZTsKKwkvKiBCdWZmZXIgZm9yIHdyaXRpbmcuICAgICAgICAgICAgICAgICAgKi8KKwljaGFyICp3cml0ZV9idWY7CisJLyogQnl0ZXMgYXZhaWxhYmxlIGZvciB3cml0aW5nLiAgICAgICAgICovCisJaW50IHdyaXRlX2F2YWlsOworCS8qIFNpemUgb2Ygd3JpdGUgYnVmZmVyLiAgICAgICAgICAgICAgICAqLworCWludCB3cml0ZWJ1Zl9zaXplOworfTsKKworLyogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWluIGhhcyB0b28gbWFueSBBQ0wgZW50cmllcyB0byBob2xkLiAqLworYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4pOworLyogVHJhbnNhY3Rpb25hbCBzcHJpbnRmKCkgZm9yIHBvbGljeSBkdW1wLiAqLworYm9vbCB0b21veW9faW9fcHJpbnRmKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbm5hbWUgaXMgY29ycmVjdC4gKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbik7CisvKiBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBpcyBjb3JyZWN0LiAqLworYm9vbCB0b21veW9faXNfY29ycmVjdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzOCBzdGFydF90eXBlLAorCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUsCisJCQkgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pOworLyogQ2hlY2sgd2hldGhlciB0aGUgdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4gKi8KK2Jvb2wgdG9tb3lvX2lzX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICovCitib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuKTsKKy8qIFJlYWQgImFsaWFzIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9hbGlhc19wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyoKKyAqIFJlYWQgImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeQorICogaW4gZXhjZXB0aW9uIHBvbGljeS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFJlYWQgImtlZXBfZG9tYWluIiBhbmQgIm5vX2tlZXBfZG9tYWluIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJmaWxlX3BhdHRlcm4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitib29sIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJhbGxvd19yZWFkIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAiZGVueV9yZXdyaXRlIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBXcml0ZSBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIG1lc3NhZ2UgdG8gY29uc29sZT8gKi8KK2Jvb2wgdG9tb3lvX3ZlcmJvc2VfbW9kZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOworLyogQ29udmVydCBkb3VibGUgcGF0aCBvcGVyYXRpb24gdG8gb3BlcmF0aW9uIG5hbWUuICovCitjb25zdCBjaGFyICp0b21veW9fZHAya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pOworLyogR2V0IHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gZG9tYWlubmFtZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbGFzdF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbik7CisvKiBHZXQgd2FybmluZyBtZXNzYWdlLiAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKTsKKy8qIENvbnZlcnQgc2luZ2xlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLworY29uc3QgY2hhciAqdG9tb3lvX3NwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKKy8qIERlbGV0ZSBhIGRvbWFpbi4gKi8KK2ludCB0b21veW9fZGVsZXRlX2RvbWFpbihjaGFyICpkYXRhKTsKKy8qIENyZWF0ZSAiYWxpYXMiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKgorICogQ3JlYXRlICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkKKyAqIGluIGV4Y2VwdGlvbiBwb2xpY3kuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyoKKyAqIENyZWF0ZSAiYWxsb3dfcmVhZC93cml0ZSIsICJhbGxvd19leGVjdXRlIiwgImFsbG93X3JlYWQiLCAiYWxsb3dfd3JpdGUiLAorICogImFsbG93X2NyZWF0ZSIsICJhbGxvd191bmxpbmsiLCAiYWxsb3dfbWtkaXIiLCAiYWxsb3dfcm1kaXIiLAorICogImFsbG93X21rZmlmbyIsICJhbGxvd19ta3NvY2siLCAiYWxsb3dfbWtibG9jayIsICJhbGxvd19ta2NoYXIiLAorICogImFsbG93X3RydW5jYXRlIiwgImFsbG93X3N5bWxpbmsiLCAiYWxsb3dfcmV3cml0ZSIsICJhbGxvd19yZW5hbWUiIGFuZAorICogImFsbG93X2xpbmsiIGVudHJ5IGluIGRvbWFpbiBwb2xpY3kuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koY2hhciAqZGF0YSwgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImFsbG93X3JlYWQiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImRlbnlfcmV3cml0ZSIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJmaWxlX3BhdHRlcm4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIEZpbmQgYSBkb21haW4gYnkgdGhlIGdpdmVuIG5hbWUuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisvKiBGaW5kIG9yIGNyZWF0ZSBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGNvbnN0IGNoYXIgKgorCQkJCQkJCSAgICBkb21haW5uYW1lLAorCQkJCQkJCSAgICBjb25zdCB1OCBwcm9maWxlKTsKKy8qIFVuZGVsZXRlIGEgZG9tYWluLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX3VuZGVsZXRlX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy8qIENoZWNrIG1vZGUgZm9yIHNwZWNpZmllZCBmdW5jdGlvbmFsaXR5LiAqLwordW5zaWduZWQgaW50IHRvbW95b19jaGVja19mbGFncyhjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJY29uc3QgdTggaW5kZXgpOworLyogQWxsb2NhdGUgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLiAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KGNvbnN0IHU4IGFjbF90eXBlKTsKKy8qIEZpbGwgaW4gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBtZW1iZXJzLiAqLwordm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cik7CisvKiBSdW4gcG9saWN5IGxvYWRlciB3aGVuIC9zYmluL2luaXQgc3RhcnRzLiAqLwordm9pZCB0b21veW9fbG9hZF9wb2xpY3koY29uc3QgY2hhciAqZmlsZW5hbWUpOworLyogQ2hhbmdlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi0+ZmxhZ3MuICovCit2b2lkIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlLCBjb25zdCB1OCBmbGFncyk7CisKKy8qIHN0cmNtcCgpIGZvciAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIHN0cnVjdHVyZS4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9fcGF0aGNtcChjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYSwKKwkJCQkgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpiKQoreworCXJldHVybiBhLT5oYXNoICE9IGItPmhhc2ggfHwgc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCisvKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTEoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCXJldHVybiBwdHItPnR5cGUgJiB+VE9NT1lPX0FDTF9ERUxFVEVEOworfQorCisvKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTIoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCXJldHVybiBwdHItPnR5cGU7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX3ZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgdmFsaWQgY2hhci4KKyAqCisgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYSB2YWxpZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc192YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgPiAnICcgJiYgYyA8IDEyNzsKK30KKworLyoqCisgKiB0b21veW9faXNfaW52YWxpZCAtIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhbiBpbnZhbGlkIGNoYXIuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfaW52YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgJiYgKGMgPD0gJyAnIHx8IGMgPj0gMTI3KTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19kb21haW5fbGlzdDsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHRvbW95b19kb21haW5fbGlzdF9sb2NrOworCisvKiBMb2NrIGZvciBkb21haW4tPmFjbF9pbmZvX2xpc3QuICovCitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSB0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jazsKKworLyogSGFzIC9zYmluL2luaXQgc3RhcnRlZD8gKi8KK2V4dGVybiBib29sIHRvbW95b19wb2xpY3lfbG9hZGVkOworCisvKiBUaGUga2VybmVsJ3MgZG9tYWluLiAqLworZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9jb29raWUgLSBpdGVyYXRlIG92ZXIgYSBsaXN0IHdpdGggY29va2llLgorICogQHBvczogICAgICAgIHRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBjb29raWU6ICAgICB0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgY29va2llLgorICogQGhlYWQ6ICAgICAgIHRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKgorICogU2FtZSB3aXRoIGxpc3RfZm9yX2VhY2goKSBleGNlcHQgdGhhdCB0aGlzIHByaW1pdGl2ZSB1c2VzIEBjb29raWUKKyAqIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGl0ZXJhdGlvbi4KKyAqIEBjb29raWUgbXVzdCBiZSBOVUxMIHdoZW4gaXRlcmF0aW9uIHN0YXJ0cywgYW5kIEBjb29raWUgd2lsbCBiZWNvbWUKKyAqIE5VTEwgd2hlbiBpdGVyYXRpb24gZmluaXNoZXMuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBjb29raWUsIGhlYWQpICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yICgoeyBpZiAoIWNvb2tpZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICBjb29raWUgPSBoZWFkOyB9KSwgICAgICAgICAgICAgICBcCisJICAgICBwb3MgPSAoY29va2llKS0+bmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpIHx8ICgoY29va2llKSA9IE5VTEwpOyBcCisJICAgICAoY29va2llKSA9IHBvcywgcG9zID0gcG9zLT5uZXh0KQorCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSCkgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9kb21haW4uYyBiL3NlY3VyaXR5L3RvbW95by9kb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNhNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCkBAIC0wLDAgKzEsODc4IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisjaW5jbHVkZSAicmVhbHBhdGguaCIKKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisKKy8qIFZhcmlhYmxlcyBkZWZpbml0aW9ucy4qLworCisvKiBUaGUgaW5pdGlhbCBkb21haW4uICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLworTElTVF9IRUFEKHRvbW95b19kb21haW5fbGlzdCk7CitERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKworLyogU3RydWN0dXJlIGZvciAiaW5pdGlhbGl6ZV9kb21haW4iIGFuZCAibm9faW5pdGlhbGl6ZV9kb21haW4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOyAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07CisJYm9vbCBpc19kZWxldGVkOworCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIi4gICovCisJLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLworCWJvb2wgaXNfbGFzdF9uYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAia2VlcF9kb21haW4iIGFuZCAibm9fa2VlcF9kb21haW4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsgICAgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLworCWJvb2wgaXNfZGVsZXRlZDsKKwlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19rZWVwX2RvbWFpbiIuICAgICAgICAqLworCS8qIFRydWUgaWYgdGhlIGRvbWFpbm5hbWUgaXMgdG9tb3lvX2dldF9sYXN0X25hbWUoKS4gKi8KKwlib29sIGlzX2xhc3RfbmFtZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImFsaWFzIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpvcmlnaW5hbF9uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphbGlhc2VkX25hbWU7CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyoqCisgKiB0b21veW9fc2V0X2RvbWFpbl9mbGFnIC0gU2V0IG9yIGNsZWFyIGRvbWFpbidzIGF0dHJpYnV0ZSBmbGFncy4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqIEBmbGFnczogICAgIEZsYWdzIHRvIHNldCBvciBjbGVhci4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX3NldF9kb21haW5fZmxhZyhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUsIGNvbnN0IHU4IGZsYWdzKQoreworCS8qIFdlIG5lZWQgdG8gc2VyaWFsaXplIGJlY2F1c2UgdGhpcyBpcyBiaXRmaWVsZCBvcGVyYXRpb24uICovCisJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlzcGluX2xvY2soJmxvY2spOworCWlmICghaXNfZGVsZXRlKQorCQlkb21haW4tPmZsYWdzIHw9IGZsYWdzOworCWVsc2UKKwkJZG9tYWluLT5mbGFncyAmPSB+ZmxhZ3M7CisJc3Bpbl91bmxvY2soJmxvY2spOworCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KK30KKworLyoqCisgKiB0b21veW9fZ2V0X2xhc3RfbmFtZSAtIEdldCBsYXN0IGNvbXBvbmVudCBvZiBhIGRvbWFpbm5hbWUuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKgorICogUmV0dXJucyB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGRvbWFpbm5hbWUuCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbGFzdF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbikKK3sKKwljb25zdCBjaGFyICpjcDAgPSBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqY3AxID0gc3RycmNocihjcDAsICcgJyk7CisKKwlpZiAoY3AxKQorCQlyZXR1cm4gY3AxICsgMTsKKwlyZXR1cm4gY3AwOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4gTWF5IGJlIE5VTEwuCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4KKyAqIEBpc19ub3Q6ICAgICBUcnVlIGlmIGl0IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcHJvZ3JhbSwKKwkJCQkJCSAgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcHJvZ3JhbTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZSA9IE5VTEw7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2xhc3RfbmFtZSA9IGZhbHNlOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHByb2dyYW0sIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KKwlpZiAoZG9tYWlubmFtZSkgeworCQlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCisJCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQkJaXNfbGFzdF9uYW1lID0gdHJ1ZTsKKwkJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoZG9tYWlubmFtZSk7CisJCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlzYXZlZF9wcm9ncmFtID0gdG9tb3lvX3NhdmVfbmFtZShwcm9ncmFtKTsKKwlpZiAoIXNhdmVkX3Byb2dyYW0pCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfbm90ICE9IGlzX25vdCB8fAorCQkgICAgcHRyLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUgfHwKKwkJICAgIHB0ci0+cHJvZ3JhbSAhPSBzYXZlZF9wcm9ncmFtKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOworCW5ld19lbnRyeS0+cHJvZ3JhbSA9IHNhdmVkX3Byb2dyYW07CisJbmV3X2VudHJ5LT5pc19ub3QgPSBpc19ub3Q7CisJbmV3X2VudHJ5LT5pc19sYXN0X25hbWUgPSBpc19sYXN0X25hbWU7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpIHsKKwkJY29uc3QgY2hhciAqbm87CisJCWNvbnN0IGNoYXIgKmZyb20gPSAiIjsKKwkJY29uc3QgY2hhciAqZG9tYWluID0gIiI7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSwKKwkJCQkgIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCW5vID0gcHRyLT5pc19ub3QgPyAibm9fIiA6ICIiOworCQlpZiAocHRyLT5kb21haW5uYW1lKSB7CisJCQlmcm9tID0gIiBmcm9tICI7CisJCQlkb21haW4gPSBwdHItPmRvbWFpbm5hbWUtPm5hbWU7CisJCX0KKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzIiBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTgorCQkJCSAgICAgICIlcyVzJXNcbiIsIG5vLCBwdHItPnByb2dyYW0tPm5hbWUsIGZyb20sCisJCQkJICAgICAgZG9tYWluKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19ub3Q6ICAgIFRydWUgaWYgaXQgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKKworCWlmIChjcCkgeworCQkqY3AgPSAnXDAnOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY3AgKyA2LCBkYXRhLAorCQkJCQkJCSAgICAgIGlzX25vdCwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoTlVMTCwgZGF0YSwgaXNfbm90LAorCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcHJvZ3JhbSBjYXVzZXMgZG9tYWlubmFtZSByZWluaXRpYWxpemF0aW9uLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4KKyAqIEBsYXN0X25hbWU6ICBUaGUgbGFzdCBjb21wb25lbnQgb2YgQGRvbWFpbm5hbWUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIGV4ZWN1dGluZyBAcHJvZ3JhbSByZWluaXRpYWxpemVzIGRvbWFpbiB0cmFuc2l0aW9uLAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGRvbWFpbm5hbWUsCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbSwKKwkJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGxhc3RfbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOworCWJvb2wgZmxhZyA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKHB0ci0+ZG9tYWlubmFtZSkgeworCQkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgeworCQkJCWlmIChwdHItPmRvbWFpbm5hbWUgIT0gZG9tYWlubmFtZSkKKwkJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWlmICh0b21veW9fcGF0aGNtcChwdHItPmRvbWFpbm5hbWUsIGxhc3RfbmFtZSkpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmICh0b21veW9fcGF0aGNtcChwdHItPnByb2dyYW0sIHByb2dyYW0pKQorCQkJY29udGludWU7CisJCWlmIChwdHItPmlzX25vdCkgeworCQkJZmxhZyA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJZmxhZyA9IHRydWU7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZmxhZzsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLiBNYXkgYmUgTlVMTC4KKyAqIEBpc19ub3Q6ICAgICBUcnVlIGlmIGl0IGlzICJub19rZWVwX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqcHJvZ3JhbSwKKwkJCQkJICAgICBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcHJvZ3JhbSA9IE5VTEw7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWJvb2wgaXNfbGFzdF9uYW1lID0gZmFsc2U7CisKKwlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCisJICAgIHRvbW95b19pc19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCWlzX2xhc3RfbmFtZSA9IHRydWU7CisJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwcm9ncmFtKSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzYXZlZF9wcm9ncmFtID0gdG9tb3lvX3NhdmVfbmFtZShwcm9ncmFtKTsKKwkJaWYgKCFzYXZlZF9wcm9ncmFtKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX25vdCAhPSBpc19ub3QgfHwKKwkJICAgIHB0ci0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lIHx8CisJCSAgICBwdHItPnByb2dyYW0gIT0gc2F2ZWRfcHJvZ3JhbSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwluZXdfZW50cnktPnByb2dyYW0gPSBzYXZlZF9wcm9ncmFtOworCW5ld19lbnRyeS0+aXNfbm90ID0gaXNfbm90OworCW5ld19lbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfbm90OiAgICBUcnVlIGlmIGl0IGlzICJub19rZWVwX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCSAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKKworCWlmIChjcCkgeworCQkqY3AgPSAnXDAnOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNwICsgNiwgZGF0YSwgaXNfbm90LAorCQkJCQkJCSBpc19kZWxldGUpOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGRhdGEsIE5VTEwsIGlzX25vdCwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOworCQljb25zdCBjaGFyICpubzsKKwkJY29uc3QgY2hhciAqZnJvbSA9ICIiOworCQljb25zdCBjaGFyICpwcm9ncmFtID0gIiI7CisKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJbm8gPSBwdHItPmlzX25vdCA/ICJub18iIDogIiI7CisJCWlmIChwdHItPnByb2dyYW0pIHsKKwkJCWZyb20gPSAiIGZyb20gIjsKKwkJCXByb2dyYW0gPSBwdHItPnByb2dyYW0tPm5hbWU7CisJCX0KKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzIiBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTgorCQkJCSAgICAgICIlcyVzJXNcbiIsIG5vLCBwcm9ncmFtLCBmcm9tLAorCQkJCSAgICAgIHB0ci0+ZG9tYWlubmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwcm9ncmFtIGNhdXNlcyBkb21haW4gdHJhbnNpdGlvbiBzdXBwcmVzc2lvbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCisgKiBAbGFzdF9uYW1lOiAgVGhlIGxhc3QgY29tcG9uZW50IG9mIEBkb21haW5uYW1lLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBleGVjdXRpbmcgQHByb2dyYW0gc3VwcmVzc2VzIGRvbWFpbiB0cmFuc2l0aW9uLAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2tlZXBlcihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW0sCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpsYXN0X25hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CisJYm9vbCBmbGFnID0gZmFsc2U7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgeworCQkJaWYgKHB0ci0+ZG9tYWlubmFtZSAhPSBkb21haW5uYW1lKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKHRvbW95b19wYXRoY21wKHB0ci0+ZG9tYWlubmFtZSwgbGFzdF9uYW1lKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAocHRyLT5wcm9ncmFtICYmIHRvbW95b19wYXRoY21wKHB0ci0+cHJvZ3JhbSwgcHJvZ3JhbSkpCisJCQljb250aW51ZTsKKwkJaWYgKHB0ci0+aXNfbm90KSB7CisJCQlmbGFnID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlmbGFnID0gdHJ1ZTsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZmxhZzsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2FsaWFzX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAb3JpZ2luYWxfbmFtZTogVGhlIG9yaWdpbmFsIHByb2dyYW0ncyByZWFsIG5hbWUuCisgKiBAYWxpYXNlZF9uYW1lOiAgVGhlIHN5bWJvbGljIHByb2dyYW0ncyBzeW1ib2xpYyBsaW5rJ3MgbmFtZS4KKyAqIEBpc19kZWxldGU6ICAgICBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5KGNvbnN0IGNoYXIgKm9yaWdpbmFsX25hbWUsCisJCQkJICAgICBjb25zdCBjaGFyICphbGlhc2VkX25hbWUsCisJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9vcmlnaW5hbF9uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9hbGlhc2VkX25hbWU7CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChvcmlnaW5hbF9uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChhbGlhc2VkX25hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KKwlzYXZlZF9vcmlnaW5hbF9uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShvcmlnaW5hbF9uYW1lKTsKKwlzYXZlZF9hbGlhc2VkX25hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGFsaWFzZWRfbmFtZSk7CisJaWYgKCFzYXZlZF9vcmlnaW5hbF9uYW1lIHx8ICFzYXZlZF9hbGlhc2VkX25hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPm9yaWdpbmFsX25hbWUgIT0gc2F2ZWRfb3JpZ2luYWxfbmFtZSB8fAorCQkgICAgcHRyLT5hbGlhc2VkX25hbWUgIT0gc2F2ZWRfYWxpYXNlZF9uYW1lKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPm9yaWdpbmFsX25hbWUgPSBzYXZlZF9vcmlnaW5hbF9uYW1lOworCW5ld19lbnRyeS0+YWxpYXNlZF9uYW1lID0gc2F2ZWRfYWxpYXNlZF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19hbGlhc19saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9hbGlhc19wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9hbGlhc19wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX2FsaWFzX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5LCBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfQUxJQVMgIiVzICVzXG4iLAorCQkJCSAgICAgIHB0ci0+b3JpZ2luYWxfbmFtZS0+bmFtZSwKKwkJCQkgICAgICBwdHItPmFsaWFzZWRfbmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9hbGlhc19wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY2hhciAqY3AgPSBzdHJjaHIoZGF0YSwgJyAnKTsKKworCWlmICghY3ApCisJCXJldHVybiAtRUlOVkFMOworCSpjcCsrID0gJ1wwJzsKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeShkYXRhLCBjcCwgaXNfZGVsZXRlKTsKK30KKworLyogRG9tYWluIGNyZWF0ZS9kZWxldGUvdW5kZWxldGUgaGFuZGxlci4gKi8KKworLyogI2RlZmluZSBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFICovCisKKy8qKgorICogdG9tb3lvX2RlbGV0ZV9kb21haW4gLSBEZWxldGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK2ludCB0b21veW9fZGVsZXRlX2RvbWFpbihjaGFyICpkb21haW5uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCisJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCXByaW50ayhLRVJOX0RFQlVHICJ0b21veW9fZGVsZXRlX2RvbWFpbiAlc1xuIiwgZG9tYWlubmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJMaXN0OiAlcCAldVxuIiwgZG9tYWluLCBkb21haW4tPmlzX2RlbGV0ZWQpOworCX0KKyNlbmRpZgorCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBkb21haW4/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluMjsKKwkJLyogTmV2ZXIgZGVsZXRlIHRvbW95b19rZXJuZWxfZG9tYWluICovCisJCWlmIChkb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQkJY29udGludWU7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgfHwKKwkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCS8qIE1hcmsgYWxyZWFkeSBkZWxldGVkIGRvbWFpbnMgYXMgbm9uIHVuZGVsZXRhYmxlLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbjIsICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghZG9tYWluMi0+aXNfZGVsZXRlZCB8fAorCQkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbjItPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCQljb250aW51ZTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCQlpZiAoZG9tYWluMi0+aXNfZGVsZXRlZCAhPSAyNTUpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgIk1hcmtlZCAlcCBhcyBub24gdW5kZWxldGFibGVcbiIsCisJCQkJICAgICAgIGRvbWFpbjIpOworI2VuZGlmCisJCQlkb21haW4yLT5pc19kZWxldGVkID0gMjU1OworCQl9CisJCS8qIERlbGV0ZSBhbmQgbWFyayBhY3RpdmUgZG9tYWluIGFzIHVuZGVsZXRhYmxlLiAqLworCQlkb21haW4tPmlzX2RlbGV0ZWQgPSAxOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1hcmtlZCAlcCBhcyB1bmRlbGV0YWJsZVxuIiwgZG9tYWluKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b191bmRlbGV0ZV9kb21haW4gLSBVbmRlbGV0ZSBhIGRvbWFpbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b191bmRlbGV0ZV9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY2FuZGlkYXRlX2RvbWFpbiA9IE5VTEw7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKworCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwlwcmludGsoS0VSTl9ERUJVRyAidG9tb3lvX3VuZGVsZXRlX2RvbWFpbiAlc1xuIiwgZG9tYWlubmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJMaXN0OiAlcCAldVxuIiwgZG9tYWluLCBkb21haW4tPmlzX2RlbGV0ZWQpOworCX0KKyNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fcGF0aGNtcCgmbmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCkgeworCQkJLyogVGhpcyBkb21haW4gaXMgYWN0aXZlLiBJIGNhbid0IHVuZGVsZXRlLiAqLworCQkJY2FuZGlkYXRlX2RvbWFpbiA9IE5VTEw7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVwIGlzIGFjdGl2ZS4gSSBjYW4ndCB1bmRlbGV0ZS5cbiIsCisJCQkgICAgICAgZG9tYWluKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwkJLyogSXMgdGhpcyBkb21haW4gdW5kZWxldGFibGU/ICovCisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgPT0gMSkKKwkJCWNhbmRpZGF0ZV9kb21haW4gPSBkb21haW47CisJfQorCWlmIChjYW5kaWRhdGVfZG9tYWluKSB7CisJCWNhbmRpZGF0ZV9kb21haW4tPmlzX2RlbGV0ZWQgPSAwOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVwIHdhcyB1bmRlbGV0ZWQuXG4iLCBjYW5kaWRhdGVfZG9tYWluKTsKKyNlbmRpZgorCX0KKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGNhbmRpZGF0ZV9kb21haW47Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4gLSBDcmVhdGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9maWxlOiAgICBQcm9maWxlIG51bWJlciB0byBhc3NpZ24gaWYgdGhlIGRvbWFpbiB3YXMgbmV3bHkgY3JlYXRlZC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihjb25zdCBjaGFyICoKKwkJCQkJCQkgICAgZG9tYWlubmFtZSwKKwkJCQkJCQkgICAgY29uc3QgdTggcHJvZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9kb21haW5uYW1lOworCisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZG9tYWlubmFtZSk7CisJaWYgKGRvbWFpbikKKwkJZ290byBvdXQ7CisJaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCQlnb3RvIG91dDsKKwlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCisJCWdvdG8gb3V0OworCS8qIENhbiBJIHJldXNlIG1lbW9yeSBvZiBkZWxldGVkIGRvbWFpbj8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwkJYm9vbCBmbGFnOworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCB8fAorCQkgICAgZG9tYWluLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUpCisJCQljb250aW51ZTsKKwkJZmxhZyA9IGZhbHNlOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CisJCQlpZiAodG9tb3lvX3JlYWxfZG9tYWluKHApICE9IGRvbWFpbikKKwkJCQljb250aW51ZTsKKwkJCWZsYWcgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCisJCWlmIChmbGFnKQorCQkJY29udGludWU7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQlwcmludGsoS0VSTl9ERUJVRyAiUmV1c2luZyAlcCAlc1xuIiwgZG9tYWluLAorCQkgICAgICAgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKyNlbmRpZgorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJfQorCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKGRvbWFpbiwgdHJ1ZSwgZG9tYWluLT5mbGFncyk7CisJCWRvbWFpbi0+cHJvZmlsZSA9IHByb2ZpbGU7CisJCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gZmFsc2U7CisJCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCisJCWRvbWFpbi0+aXNfZGVsZXRlZCA9IDA7CisJCWdvdG8gb3V0OworCX0KKwkvKiBObyBtZW1vcnkgcmV1c2FibGUuIENyZWF0ZSB1c2luZyBuZXcgbWVtb3J5LiAqLworCWRvbWFpbiA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqZG9tYWluKSk7CisJaWYgKGRvbWFpbikgeworCQlJTklUX0xJU1RfSEVBRCgmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwkJZG9tYWluLT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwkJZG9tYWluLT5wcm9maWxlID0gcHJvZmlsZTsKKwkJbGlzdF9hZGRfdGFpbCgmZG9tYWluLT5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKKwl9Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZG9tYWluOworfQorCisvKioKKyAqIHRvbW95b19maW5kX25leHRfZG9tYWluIC0gRmluZCBhIGRvbWFpbi4KKyAqCisgKiBAYnBybTogICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBsaW51eF9iaW5wcm0iLgorICogQG5leHRfZG9tYWluOiAgICBQb2ludGVyIHRvIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbikKK3sKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzaXplIG9mIGJ1ZmZlciByZXR1cm5lZCBieQorCSAqIHRvbW95b19yZWFscGF0aCgpID0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4uCisJICovCisJc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqdG1wID0gdG9tb3lvX2FsbG9jKHNpemVvZigqdG1wKSk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqb2xkX2RvbWFpbiA9IHRvbW95b19kb21haW4oKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCWNvbnN0IGNoYXIgKm9sZF9kb21haW5fbmFtZSA9IG9sZF9kb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqb3JpZ2luYWxfbmFtZSA9IGJwcm0tPmZpbGVuYW1lOworCWNoYXIgKm5ld19kb21haW5fbmFtZSA9IE5VTEw7CisJY2hhciAqcmVhbF9wcm9ncmFtX25hbWUgPSBOVUxMOworCWNoYXIgKnN5bWxpbmtfcHJvZ3JhbV9uYW1lID0gTlVMTDsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKG9sZF9kb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIHI7IC8qIHJlYWwgbmFtZSAqLworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIHM7IC8qIHN5bWxpbmsgbmFtZSAqLworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIGw7IC8qIGxhc3QgbmFtZSAqLworCXN0YXRpYyBib29sIGluaXRpYWxpemVkOworCisJaWYgKCF0bXApCisJCWdvdG8gb3V0OworCisJaWYgKCFpbml0aWFsaXplZCkgeworCQkvKgorCQkgKiBCdWlsdC1pbiBpbml0aWFsaXplcnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcG9saWNpZXMgYXJlCisJCSAqIG5vdCBsb2FkZWQgdW50aWwgc3RhcnRpbmcgL3NiaW4vaW5pdC4KKwkJICovCisJCXRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KE5VTEwsICIvc2Jpbi9ob3RwbHVnIiwKKwkJCQkJCSAgICAgICBmYWxzZSwgZmFsc2UpOworCQl0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShOVUxMLCAiL3NiaW4vbW9kcHJvYmUiLAorCQkJCQkJICAgICAgIGZhbHNlLCBmYWxzZSk7CisJCWluaXRpYWxpemVkID0gdHJ1ZTsKKwl9CisKKwkvKiBHZXQgdG9tb3lvX3JlYWxwYXRoIG9mIHByb2dyYW0uICovCisJcmV0dmFsID0gLUVOT0VOVDsKKwkvKiBJIGhvcGUgdG9tb3lvX3JlYWxwYXRoKCkgd29uJ3QgZmFpbCB3aXRoIC1FTk9NRU0uICovCisJcmVhbF9wcm9ncmFtX25hbWUgPSB0b21veW9fcmVhbHBhdGgob3JpZ2luYWxfbmFtZSk7CisJaWYgKCFyZWFsX3Byb2dyYW1fbmFtZSkKKwkJZ290byBvdXQ7CisJLyogR2V0IHRvbW95b19yZWFscGF0aCBvZiBzeW1ib2xpYyBsaW5rLiAqLworCXN5bWxpbmtfcHJvZ3JhbV9uYW1lID0gdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KG9yaWdpbmFsX25hbWUpOworCWlmICghc3ltbGlua19wcm9ncmFtX25hbWUpCisJCWdvdG8gb3V0OworCisJci5uYW1lID0gcmVhbF9wcm9ncmFtX25hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyKTsKKwlzLm5hbWUgPSBzeW1saW5rX3Byb2dyYW1fbmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJnMpOworCWwubmFtZSA9IHRvbW95b19nZXRfbGFzdF9uYW1lKG9sZF9kb21haW4pOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbCk7CisKKwkvKiBDaGVjayAnYWxpYXMnIGRpcmVjdGl2ZS4gKi8KKwlpZiAodG9tb3lvX3BhdGhjbXAoJnIsICZzKSkgeworCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CisJCS8qIElzIHRoaXMgcHJvZ3JhbSBhbGxvd2VkIHRvIGJlIGNhbGxlZCB2aWEgc3ltYm9saWMgbGlua3M/ICovCisJCWRvd25fcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChwdHItPmlzX2RlbGV0ZWQgfHwKKwkJCSAgICB0b21veW9fcGF0aGNtcCgmciwgcHRyLT5vcmlnaW5hbF9uYW1lKSB8fAorCQkJICAgIHRvbW95b19wYXRoY21wKCZzLCBwdHItPmFsaWFzZWRfbmFtZSkpCisJCQkJY29udGludWU7CisJCQltZW1zZXQocmVhbF9wcm9ncmFtX25hbWUsIDAsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKTsKKwkJCXN0cm5jcHkocmVhbF9wcm9ncmFtX25hbWUsIHB0ci0+YWxpYXNlZF9uYW1lLT5uYW1lLAorCQkJCVRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSk7CisJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oJnIpOworCQkJYnJlYWs7CisJCX0KKwkJdXBfcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJfQorCisJLyogQ2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9uLiAqLworCXJldHZhbCA9IHRvbW95b19jaGVja19leGVjX3Blcm0ob2xkX2RvbWFpbiwgJnIsIHRtcCk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gb3V0OworCisJbmV3X2RvbWFpbl9uYW1lID0gdG1wLT5idWZmZXI7CisJaWYgKHRvbW95b19pc19kb21haW5faW5pdGlhbGl6ZXIob2xkX2RvbWFpbi0+ZG9tYWlubmFtZSwgJnIsICZsKSkgeworCQkvKiBUcmFuc2l0IHRvIHRoZSBjaGlsZCBvZiB0b21veW9fa2VybmVsX2RvbWFpbiBkb21haW4uICovCisJCXNucHJpbnRmKG5ld19kb21haW5fbmFtZSwgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gKyAxLAorCQkJIFRPTU9ZT19ST09UX05BTUUgIiAiICIlcyIsIHJlYWxfcHJvZ3JhbV9uYW1lKTsKKwl9IGVsc2UgaWYgKG9sZF9kb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluICYmCisJCSAgICF0b21veW9fcG9saWN5X2xvYWRlZCkgeworCQkvKgorCQkgKiBOZWVkbid0IHRvIHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluIGJlZm9yZSBzdGFydGluZworCQkgKiAvc2Jpbi9pbml0LiBCdXQgdHJhbnNpdCBmcm9tIGtlcm5lbCBkb21haW4gaWYgZXhlY3V0aW5nCisJCSAqIGluaXRpYWxpemVycyBiZWNhdXNlIHRoZXkgbWlnaHQgc3RhcnQgYmVmb3JlIC9zYmluL2luaXQuCisJCSAqLworCQlkb21haW4gPSBvbGRfZG9tYWluOworCX0gZWxzZSBpZiAodG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIob2xkX2RvbWFpbi0+ZG9tYWlubmFtZSwgJnIsICZsKSkgeworCQkvKiBLZWVwIGN1cnJlbnQgZG9tYWluLiAqLworCQlkb21haW4gPSBvbGRfZG9tYWluOworCX0gZWxzZSB7CisJCS8qIE5vcm1hbCBkb21haW4gdHJhbnNpdGlvbi4gKi8KKwkJc25wcmludGYobmV3X2RvbWFpbl9uYW1lLCBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiArIDEsCisJCQkgIiVzICVzIiwgb2xkX2RvbWFpbl9uYW1lLCByZWFsX3Byb2dyYW1fbmFtZSk7CisJfQorCWlmIChkb21haW4gfHwgc3RybGVuKG5ld19kb21haW5fbmFtZSkgPj0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4pCisJCWdvdG8gZG9uZTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4obmV3X2RvbWFpbl9uYW1lKTsKKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKGRvbWFpbikKKwkJZ290byBkb25lOworCWlmIChpc19lbmZvcmNlKQorCQlnb3RvIGRvbmU7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4obmV3X2RvbWFpbl9uYW1lLAorCQkJCQkJICBvbGRfZG9tYWluLT5wcm9maWxlKTsKKyBkb25lOgorCWlmIChkb21haW4pCisJCWdvdG8gb3V0OworCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy1FUlJPUjogRG9tYWluICclcycgbm90IGRlZmluZWQuXG4iLAorCSAgICAgICBuZXdfZG9tYWluX25hbWUpOworCWlmIChpc19lbmZvcmNlKQorCQlyZXR2YWwgPSAtRVBFUk07CisJZWxzZQorCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKG9sZF9kb21haW4sIGZhbHNlLAorCQkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEKTsKKyBvdXQ6CisJdG9tb3lvX2ZyZWUocmVhbF9wcm9ncmFtX25hbWUpOworCXRvbW95b19mcmVlKHN5bWxpbmtfcHJvZ3JhbV9uYW1lKTsKKwkqbmV4dF9kb21haW4gPSBkb21haW4gPyBkb21haW4gOiBvbGRfZG9tYWluOworCXRvbW95b19mcmVlKHRtcCk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9maWxlLmMgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjUwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCkBAIC0wLDAgKzEsMTI0MSBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9maWxlLmMKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRG9tYWluLUJhc2VkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ0b21veW8uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDBcMDA0XDAwMlwwMDYiWyh4KSZPX0FDQ01PREVdKQorCisvKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZWFkIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImZpbGVfcGF0dGVybiIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImRlbnlfcmV3cml0ZSIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIEtleXdvcmQgYXJyYXkgZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbnMuICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX3NwX2tleXdvcmRbVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTF0gPSAicmVhZC93cml0ZSIsCisJW1RPTU9ZT19UWVBFX0VYRUNVVEVfQUNMXSAgICA9ICJleGVjdXRlIiwKKwlbVE9NT1lPX1RZUEVfUkVBRF9BQ0xdICAgICAgID0gInJlYWQiLAorCVtUT01PWU9fVFlQRV9XUklURV9BQ0xdICAgICAgPSAid3JpdGUiLAorCVtUT01PWU9fVFlQRV9DUkVBVEVfQUNMXSAgICAgPSAiY3JlYXRlIiwKKwlbVE9NT1lPX1RZUEVfVU5MSU5LX0FDTF0gICAgID0gInVubGluayIsCisJW1RPTU9ZT19UWVBFX01LRElSX0FDTF0gICAgICA9ICJta2RpciIsCisJW1RPTU9ZT19UWVBFX1JNRElSX0FDTF0gICAgICA9ICJybWRpciIsCisJW1RPTU9ZT19UWVBFX01LRklGT19BQ0xdICAgICA9ICJta2ZpZm8iLAorCVtUT01PWU9fVFlQRV9NS1NPQ0tfQUNMXSAgICAgPSAibWtzb2NrIiwKKwlbVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0xdICAgID0gIm1rYmxvY2siLAorCVtUT01PWU9fVFlQRV9NS0NIQVJfQUNMXSAgICAgPSAibWtjaGFyIiwKKwlbVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMXSAgID0gInRydW5jYXRlIiwKKwlbVE9NT1lPX1RZUEVfU1lNTElOS19BQ0xdICAgID0gInN5bWxpbmsiLAorCVtUT01PWU9fVFlQRV9SRVdSSVRFX0FDTF0gICAgPSAicmV3cml0ZSIsCit9OworCisvKiBLZXl3b3JkIGFycmF5IGZvciBkb3VibGUgcGF0aCBvcGVyYXRpb25zLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19kcF9rZXl3b3JkW1RPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OXSA9IHsKKwlbVE9NT1lPX1RZUEVfTElOS19BQ0xdICAgID0gImxpbmsiLAorCVtUT01PWU9fVFlQRV9SRU5BTUVfQUNMXSAgPSAicmVuYW1lIiwKK307CisKKy8qKgorICogdG9tb3lvX3NwMmtleXdvcmQgLSBHZXQgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICoKKyAqIFJldHVybnMgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICovCitjb25zdCBjaGFyICp0b21veW9fc3Aya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pCit7CisJcmV0dXJuIChvcGVyYXRpb24gPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTikKKwkJPyB0b21veW9fc3Bfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fZHAya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKgorICogUmV0dXJucyB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19kcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKK3sKKwlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OKQorCQk/IHRvbW95b19kcF9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19zdHJlbmRzd2l0aCAtIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdG9rZW4uCisgKgorICogQG5hbWU6IFRoZSB0b2tlbiB0byBjaGVjay4KKyAqIEB0YWlsOiBUaGUgdG9rZW4gdG8gZmluZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQG5hbWUgZW5kcyB3aXRoIEB0YWlsLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19zdHJlbmRzd2l0aChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0YWlsKQoreworCWludCBsZW47CisKKwlpZiAoIW5hbWUgfHwgIXRhaWwpCisJCXJldHVybiBmYWxzZTsKKwlsZW4gPSBzdHJsZW4obmFtZSkgLSBzdHJsZW4odGFpbCk7CisJcmV0dXJuIGxlbiA+PSAwICYmICFzdHJjbXAobmFtZSArIGxlbiwgdGFpbCk7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9wYXRoIC0gR2V0IHJlYWxwYXRoLgorICoKKyAqIEBwYXRoOiBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX2dldF9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEgKmJ1ZiA9IHRvbW95b19hbGxvYyhzaXplb2YoKmJ1ZikpOworCisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCS8qIFJlc2VydmUgb25lIGJ5dGUgZm9yIGFwcGVuZGluZyAiLyIuICovCisJZXJyb3IgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihwYXRoLCBidWYtPmJvZHksCisJCQkJCSAgIHNpemVvZihidWYtPmJvZHkpIC0gMik7CisJaWYgKCFlcnJvcikgeworCQlidWYtPmhlYWQubmFtZSA9IGJ1Zi0+Ym9keTsKKwkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZidWYtPmhlYWQpOworCQlyZXR1cm4gJmJ1Zi0+aGVhZDsKKwl9CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogTG9jayBmb3IgZG9tYWluLT5hY2xfaW5mb19saXN0LiAqLworREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUyLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpOworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB1bmNvbmRpdGlvbmFsbHkgcGVybWl0dGVkIHRvIG9wZW4oKSBmb3IgcmVhZGluZy4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCQkgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDEsIDAsIC0xLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJaWYgKCFzYXZlZF9maWxlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUgLSBDaGVjayBpZiB0aGUgZmlsZSBpcyB1bmNvbmRpdGlvbm5hbHkgcGVybWl0dGVkIHRvIGJlIG9wZW4oKWVkIGZvciByZWFkaW5nLgorICoKKyAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgZG9tYWluIGNhbiBvcGVuIEBmaWxlbmFtZSBmb3IgcmVhZGluZywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSAgICAgZmlsZW5hbWUpCit7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJgorCQkgICAgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPmZpbGVuYW1lKSkgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCSAgICAgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywKKwkJCQkgc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5LAorCQkJCSBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAiJXNcbiIsCisJCQkJICAgICAgcHRyLT5maWxlbmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19wYXR0ZXJuX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICoKKyAqIEBwYXR0ZXJuOiAgIFBhdGhuYW1lIHBhdHRlcm4uCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeShjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3BhdHRlcm47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAxLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX3BhdHRlcm4gPSB0b21veW9fc2F2ZV9uYW1lKHBhdHRlcm4pOworCWlmICghc2F2ZWRfcGF0dGVybikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CisJCWlmIChzYXZlZF9wYXR0ZXJuICE9IHB0ci0+cGF0dGVybikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fcGF0dGVybl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuIC0gR2V0IHBhdHRlcm5lZCBwYXRobmFtZS4KKyAqCisgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBmaW5kIHBhdHRlcm5lZCBwYXRobmFtZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcGF0aG5hbWUgcGF0dGVybiBpZiBtYXRjaGVkLCBAZmlsZW5hbWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgordG9tb3lvX2dldF9maWxlX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuID0gTlVMTDsKKworCWRvd25fcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKKwkJCWNvbnRpbnVlOworCQlwYXR0ZXJuID0gcHRyLT5wYXR0ZXJuOworCQlpZiAodG9tb3lvX3N0cmVuZHN3aXRoKHBhdHRlcm4tPm5hbWUsICIvXFwqIikpIHsKKwkJCS8qIERvIG5vdGhpbmcuIFRyeSB0byBmaW5kIHRoZSBiZXR0ZXIgbWF0Y2guICovCisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIHdvdWxkIGJlIHRoZSBiZXR0ZXIgbWF0Y2guIFVzZSB0aGlzLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlpZiAocGF0dGVybikKKwkJZmlsZW5hbWUgPSBwYXR0ZXJuOworCXJldHVybiBmaWxlbmFtZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXJldHVybiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybiAtIFJlYWQgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTiAiJXNcbiIsCisJCQkJICAgICAgcHRyLT5wYXR0ZXJuLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiIGxpc3QuCisgKgorICogQHBhdHRlcm46ICAgUGF0aG5hbWUgcGF0dGVybiB0aGF0IGFyZSBub3QgcmV3cml0YWJsZSBieSBkZWZhdWx0LgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5KGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpuZXdfZW50cnksICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3BhdHRlcm47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX3BhdHRlcm4gPSB0b21veW9fc2F2ZV9uYW1lKHBhdHRlcm4pOworCWlmICghc2F2ZWRfcGF0dGVybikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPnBhdHRlcm4gIT0gc2F2ZWRfcGF0dGVybikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgaXMgbm90IHBlcm1pdHRlZCB0byBiZSByZXdyaXRlZC4KKyAqCisgKiBAZmlsZW5hbWU6IEZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgaXMgc3BlY2lmaWVkIGJ5ICJkZW55X3Jld3JpdGUiIGRpcmVjdGl2ZSwKKyAqIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCit7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPnBhdHRlcm4pKQorCQkJY29udGludWU7CisJCWZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJcmV0dXJuIHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX25vX3Jld3JpdGVfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUgIiVzXG4iLAorCQkJCSAgICAgIHB0ci0+cGF0dGVybi0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9maWxlX2FjbCAtIFVwZGF0ZSBmaWxlJ3MgcmVhZC93cml0ZS9leGVjdXRlIEFDTC4KKyAqCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KKyAqIEBwZXJtOiAgICAgIFBlcm1pc3Npb24gKGJldHdlZW4gMSB0byA3KS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogVGhpcyBpcyBsZWdhY3kgc3VwcG9ydCBpbnRlcmZhY2UgZm9yIG9sZGVyIHBvbGljeSBzeW50YXguCisgKiBDdXJyZW50IHBvbGljeSBzeW50YXggdXNlcyAiYWxsb3dfcmVhZC93cml0ZSIgaW5zdGVhZCBvZiAiNiIsCisgKiAiYWxsb3dfcmVhZCIgaW5zdGVhZCBvZiAiNCIsICJhbGxvd193cml0ZSIgaW5zdGVhZCBvZiAiMiIsCisgKiAiYWxsb3dfZXhlY3V0ZSIgaW5zdGVhZCBvZiAiMSIuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9maWxlX2FjbChjb25zdCBjaGFyICpmaWxlbmFtZSwgdTggcGVybSwKKwkJCQkgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCisJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlpZiAocGVybSA+IDcgfHwgIXBlcm0pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIHBlcm1pc3Npb24gJyVkICVzJ1xuIiwKKwkJICAgICAgIF9fZnVuY19fLCBwZXJtLCBmaWxlbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZmlsZW5hbWVbMF0gIT0gJ0AnICYmIHRvbW95b19zdHJlbmRzd2l0aChmaWxlbmFtZSwgIi8iKSkKKwkJLyoKKwkJICogT25seSAnYWxsb3dfbWtkaXInIGFuZCAnYWxsb3dfcm1kaXInIGFyZSB2YWxpZCBmb3IKKwkJICogZGlyZWN0b3J5IHBlcm1pc3Npb25zLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJaWYgKHBlcm0gJiA0KQorCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9SRUFEX0FDTCwgZmlsZW5hbWUsCisJCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlpZiAocGVybSAmIDIpCisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1dSSVRFX0FDTCwgZmlsZW5hbWUsCisJCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlpZiAocGVybSAmIDEpCisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMLAorCQkJCQkgICAgICBmaWxlbmFtZSwgZG9tYWluLCBpc19kZWxldGUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgICAgICAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGVybTogICAgICAgICAgICBQZXJtaXNzaW9uLgorICogQG1heV91c2VfcGF0dGVybjogVHJ1ZSBpZiBwYXR0ZXJuZWQgQUNMIGlzIHBlcm1pdHRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGRvbWFpbiwKKwkJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGZpbGVuYW1lLAorCQkJCQkgY29uc3QgdTE2IHBlcm0sCisJCQkJCSBjb25zdCBib29sIG1heV91c2VfcGF0dGVybikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCisJCQljb250aW51ZTsKKwkJaWYgKG1heV91c2VfcGF0dGVybiB8fCAhYWNsLT5maWxlbmFtZS0+aXNfcGF0dGVybmVkKSB7CisJCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwKKwkJCQkJCQkgYWNsLT5maWxlbmFtZSkpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQljb250aW51ZTsKKwkJfQorCQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIG9wZW5pbmcgZmlsZXMuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBvcGVyYXRpb246IE1vZGUgKCJyZWFkIiBvciAid3JpdGUiIG9yICJyZWFkL3dyaXRlIiBvciAiZXhlY3V0ZSIpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgY29uc3QgdTggb3BlcmF0aW9uKQoreworCXUxNiBwZXJtID0gMDsKKworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCWlmIChvcGVyYXRpb24gPT0gNikKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0w7CisJZWxzZSBpZiAob3BlcmF0aW9uID09IDQpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMOworCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSAyKQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0w7CisJZWxzZSBpZiAob3BlcmF0aW9uID09IDEpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMOworCWVsc2UKKwkJQlVHKCk7CisJcmV0dXJuIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyKGRvbWFpbiwgZmlsZW5hbWUsIHBlcm0sCisJCQkJCSAgICAgb3BlcmF0aW9uICE9IDEpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX3Blcm0yIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igb3BlbmluZyBmaWxlcy4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBlcm06ICAgICAgTW9kZSAoInJlYWQiIG9yICJ3cml0ZSIgb3IgInJlYWQvd3JpdGUiIG9yICJleGVjdXRlIikuCisgKiBAb3BlcmF0aW9uOiBPcGVyYXRpb24gbmFtZSBwYXNzZWQgdXNlZCBmb3IgdmVyYm9zZSBtb2RlLgorICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX3Blcm0yKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCisJCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSAgIGNvbnN0IHU4IHBlcm0sIGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKKwkJCQkgICBjb25zdCB1OCBtb2RlKQoreworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWNvbnN0IGNoYXIgKm1zZyA9ICI8dW5rbm93bj4iOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlyZXR1cm4gMDsKKwllcnJvciA9IHRvbW95b19jaGVja19maWxlX2FjbChkb21haW4sIGZpbGVuYW1lLCBwZXJtKTsKKwlpZiAoZXJyb3IgJiYgcGVybSA9PSA0ICYmCisJICAgIChkb21haW4tPmZsYWdzICYgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpID09IDAKKwkgICAgJiYgdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUoZmlsZW5hbWUpKQorCQllcnJvciA9IDA7CisJaWYgKHBlcm0gPT0gNikKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpOworCWVsc2UgaWYgKHBlcm0gPT0gNCkKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9BQ0wpOworCWVsc2UgaWYgKHBlcm0gPT0gMikKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwllbHNlIGlmIChwZXJtID09IDEpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMKTsKKwllbHNlCisJCUJVRygpOworCWlmICghZXJyb3IpCisJCXJldHVybiAwOworCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy0lczogQWNjZXNzICclcyglcykgJXMnIGRlbmllZCAiCisJCSAgICAgICAiZm9yICVzXG4iLCB0b21veW9fZ2V0X21zZyhpc19lbmZvcmNlKSwgbXNnLCBvcGVyYXRpb24sCisJCSAgICAgICBmaWxlbmFtZS0+bmFtZSwgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7CisJaWYgKGlzX2VuZm9yY2UpCisJCXJldHVybiBlcnJvcjsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQkvKiBEb24ndCB1c2UgcGF0dGVybnMgZm9yIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKwkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm5lZF9maWxlID0gKHBlcm0gIT0gMSkgPworCQkJdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oZmlsZW5hbWUpIDogZmlsZW5hbWU7CisJCXRvbW95b191cGRhdGVfZmlsZV9hY2wocGF0dGVybmVkX2ZpbGUtPm5hbWUsIHBlcm0sCisJCQkJICAgICAgIGRvbWFpbiwgZmFsc2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3kgLSBVcGRhdGUgZmlsZSByZWxhdGVkIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9maWxlX3BvbGljeShjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmZpbGVuYW1lID0gc3RyY2hyKGRhdGEsICcgJyk7CisJY2hhciAqZmlsZW5hbWUyOworCXVuc2lnbmVkIGludCBwZXJtOworCXU4IHR5cGU7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqZmlsZW5hbWUrKyA9ICdcMCc7CisJaWYgKHNzY2FuZihkYXRhLCAiJXUiLCAmcGVybSkgPT0gMSkKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZmlsZV9hY2woZmlsZW5hbWUsICh1OCkgcGVybSwgZG9tYWluLAorCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmIChzdHJuY21wKGRhdGEsICJhbGxvd18iLCA2KSkKKwkJZ290byBvdXQ7CisJZGF0YSArPSA2OworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX3NwX2tleXdvcmRbdHlwZV0pKQorCQkJY29udGludWU7CisJCXJldHVybiB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbCh0eXBlLCBmaWxlbmFtZSwKKwkJCQkJCSAgICAgZG9tYWluLCBpc19kZWxldGUpOworCX0KKwlmaWxlbmFtZTIgPSBzdHJjaHIoZmlsZW5hbWUsICcgJyk7CisJaWYgKCFmaWxlbmFtZTIpCisJCWdvdG8gb3V0OworCSpmaWxlbmFtZTIrKyA9ICdcMCc7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fZHBfa2V5d29yZFt0eXBlXSkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKHR5cGUsIGZpbGVuYW1lLCBmaWxlbmFtZTIsCisJCQkJCQkgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwl9Cisgb3V0OgorCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RhdGljIGNvbnN0IHUxNiByd19tYXNrID0KKwkJKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9BQ0wpIHwgKDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWU7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCWludCBlcnJvciA9IC1FTk9NRU07CisJY29uc3QgdTE2IHBlcm0gPSAxIDw8IHR5cGU7CisKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJaWYgKCFzYXZlZF9maWxlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlpZiAoaXNfZGVsZXRlKQorCQlnb3RvIGRlbGV0ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMShwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQorCQkJY29udGludWU7CisJCS8qIFNwZWNpYWwgY2FzZS4gQ2xlYXIgYWxsIGJpdHMgaWYgbWFya2VkIGFzIGRlbGV0ZWQuICovCisJCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCQlhY2wtPnBlcm0gPSAwOworCQlhY2wtPnBlcm0gfD0gcGVybTsKKwkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSA9PSByd19tYXNrKQorCQkJYWNsLT5wZXJtIHw9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0w7CisJCWVsc2UgaWYgKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkKKwkJCWFjbC0+cGVybSB8PSByd19tYXNrOworCQlwdHItPnR5cGUgJj0gflRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJLyogTm90IGZvdW5kLiBBcHBlbmQgaXQgdG8gdGhlIHRhaWwuICovCisJYWNsID0gdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCk7CisJaWYgKCFhY2wpCisJCWdvdG8gb3V0OworCWFjbC0+cGVybSA9IHBlcm07CisJaWYgKHBlcm0gPT0gKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKQorCQlhY2wtPnBlcm0gfD0gcndfbWFzazsKKwlhY2wtPmZpbGVuYW1lID0gc2F2ZWRfZmlsZW5hbWU7CisJbGlzdF9hZGRfdGFpbCgmYWNsLT5oZWFkLmxpc3QsICZkb21haW4tPmFjbF9pbmZvX2xpc3QpOworCWVycm9yID0gMDsKKwlnb3RvIG91dDsKKyBkZWxldGU6CisJZXJyb3IgPSAtRU5PRU5UOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCisJCQljb250aW51ZTsKKwkJYWNsLT5wZXJtICY9IH5wZXJtOworCQlpZiAoKGFjbC0+cGVybSAmIHJ3X21hc2spICE9IHJ3X21hc2spCisJCQlhY2wtPnBlcm0gJj0gfigxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKTsKKwkJZWxzZSBpZiAoIShhY2wtPnBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpKQorCQkJYWNsLT5wZXJtICY9IH5yd19tYXNrOworCQlpZiAoIWFjbC0+cGVybSkKKwkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWUxOiBGaXJzdCBmaWxlbmFtZS4KKyAqIEBmaWxlbmFtZTI6IFNlY29uZCBmaWxlbmFtZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUyLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTE7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lMjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwljb25zdCB1OCBwZXJtID0gMSA8PCB0eXBlOworCisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTEsIDAsIDAsIDAsIF9fZnVuY19fKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTIsIDAsIDAsIDAsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2F2ZWRfZmlsZW5hbWUxID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZTEpOworCXNhdmVkX2ZpbGVuYW1lMiA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUyKTsKKwlpZiAoIXNhdmVkX2ZpbGVuYW1lMSB8fCAhc2F2ZWRfZmlsZW5hbWUyKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWlmIChpc19kZWxldGUpCisJCWdvdG8gZGVsZXRlOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUxKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUxICE9IHNhdmVkX2ZpbGVuYW1lMSB8fAorCQkgICAgYWNsLT5maWxlbmFtZTIgIT0gc2F2ZWRfZmlsZW5hbWUyKQorCQkJY29udGludWU7CisJCS8qIFNwZWNpYWwgY2FzZS4gQ2xlYXIgYWxsIGJpdHMgaWYgbWFya2VkIGFzIGRlbGV0ZWQuICovCisJCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCQlhY2wtPnBlcm0gPSAwOworCQlhY2wtPnBlcm0gfD0gcGVybTsKKwkJcHRyLT50eXBlICY9IH5UT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vdCBmb3VuZC4gQXBwZW5kIGl0IHRvIHRoZSB0YWlsLiAqLworCWFjbCA9IHRvbW95b19hbGxvY19hY2xfZWxlbWVudChUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpOworCWlmICghYWNsKQorCQlnb3RvIG91dDsKKwlhY2wtPnBlcm0gPSBwZXJtOworCWFjbC0+ZmlsZW5hbWUxID0gc2F2ZWRfZmlsZW5hbWUxOworCWFjbC0+ZmlsZW5hbWUyID0gc2F2ZWRfZmlsZW5hbWUyOworCWxpc3RfYWRkX3RhaWwoJmFjbC0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwllcnJvciA9IDA7CisJZ290byBvdXQ7CisgZGVsZXRlOgorCWVycm9yID0gLUVOT0VOVDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lMSAhPSBzYXZlZF9maWxlbmFtZTEgfHwKKwkJICAgIGFjbC0+ZmlsZW5hbWUyICE9IHNhdmVkX2ZpbGVuYW1lMikKKwkJCWNvbnRpbnVlOworCQlhY2wtPnBlcm0gJj0gfnBlcm07CisJCWlmICghYWNsLT5wZXJtKQorCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAZG9tYWluOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHR5cGU6ICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogRmlsZW5hbWUgdG8gY2hlY2suCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkJY29uc3QgdTggdHlwZSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCAxIDw8IHR5cGUsIDEpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTE6IEZpcnN0IGZpbGVuYW1lIHRvIGNoZWNrLgorICogQGZpbGVuYW1lMjogU2Vjb25kIGZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2woY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCQljb25zdCB1OCB0eXBlLAorCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCWZpbGVuYW1lMSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQlmaWxlbmFtZTIpCit7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCWNvbnN0IHU4IHBlcm0gPSAxIDw8IHR5cGU7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJaWYgKCF0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKSkKKwkJcmV0dXJuIDA7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUxLCBhY2wtPmZpbGVuYW1lMSkpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUyLCBhY2wtPmZpbGVuYW1lMikpCisJCQljb250aW51ZTsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJCWNvbnN0IGRvbWFpbiwgdTggb3BlcmF0aW9uLAorCQkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkJZmlsZW5hbWUsIGNvbnN0IHU4IG1vZGUpCit7CisJY29uc3QgY2hhciAqbXNnOworCWludCBlcnJvcjsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisgbmV4dDoKKwllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2woZG9tYWluLCBvcGVyYXRpb24sIGZpbGVuYW1lKTsKKwltc2cgPSB0b21veW9fc3Aya2V5d29yZChvcGVyYXRpb24pOworCWlmICghZXJyb3IpCisJCWdvdG8gb2s7CisJaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLSVzOiBBY2Nlc3MgJyVzICVzJyBkZW5pZWQgZm9yICVzXG4iLAorCQkgICAgICAgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksIG1zZywgZmlsZW5hbWUtPm5hbWUsCisJCSAgICAgICB0b21veW9fZ2V0X2xhc3RfbmFtZShkb21haW4pKTsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQljb25zdCBjaGFyICpuYW1lID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oZmlsZW5hbWUpLT5uYW1lOworCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChvcGVyYXRpb24sIG5hbWUsIGRvbWFpbiwgZmFsc2UpOworCX0KKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKyBvazoKKwkvKgorCSAqIFNpbmNlICJhbGxvd190cnVuY2F0ZSIgZG9lc24ndCBpbXBseSAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiwKKwkgKiB3ZSBuZWVkIHRvIGNoZWNrICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uIGlmIHRoZSBmaWxlbmFtZSBpcworCSAqIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLgorCSAqLworCWlmICghZXJyb3IgJiYgb3BlcmF0aW9uID09IFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCAmJgorCSAgICB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGZpbGVuYW1lKSkgeworCQlvcGVyYXRpb24gPSBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTDsKKwkJZ290byBuZXh0OworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZpbGVfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHN5c2N0bCgpJ3MgInJlYWQiIGFuZCAid3JpdGUiLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGVybTogICAgICBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIpLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19maWxlX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHU4IHBlcm0pCit7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworCW5hbWUubmFtZSA9IGZpbGVuYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJcmV0dXJuIHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgJm5hbWUsIHBlcm0sICJzeXNjdGwiLCBtb2RlKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZXhlY19wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImV4ZWN1dGUiLgorICoKKyAqIEBkb21haW46ICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6IENoZWNrIHBlcm1pc3Npb24gZm9yICJleGVjdXRlIi4KKyAqIEB0bXA6ICAgICAgQnVmZmVyIGZvciB0ZW1wb3JhcnkgdXNlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZXZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJICAgc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqdG1wKQoreworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgZmlsZW5hbWUsIDEsICJkb19leGVjdmUiLCBtb2RlKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJlYWQiIGFuZCAid3JpdGUiLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHBhdGg6ICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQGZsYWc6ICAgRmxhZ3MgZm9yIG9wZW4oKS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBpbnQgZmxhZykKK3sKKwljb25zdCB1OCBhY2NfbW9kZSA9IEFDQ19NT0RFKGZsYWcpOworCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisKKwlpZiAoIW1vZGUgfHwgIXBhdGgtPm1udCkKKwkJcmV0dXJuIDA7CisJaWYgKGFjY19tb2RlID09IDApCisJCXJldHVybiAwOworCWlmIChwYXRoLT5kZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCS8qCisJCSAqIEkgZG9uJ3QgY2hlY2sgZGlyZWN0b3JpZXMgaGVyZSBiZWNhdXNlIG1rZGlyKCkgYW5kIHJtZGlyKCkKKwkJICogZG9uJ3QgY2FsbCBtZS4KKwkJICovCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJZXJyb3IgPSAwOworCS8qCisJICogSWYgdGhlIGZpbGVuYW1lIGlzIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLAorCSAqIHdlIG5lZWQgdG8gY2hlY2sgImFsbG93X3Jld3JpdGUiIHBlcm1pc3Npb24gd2hlbiB0aGUgZmlsZW5hbWUgaXMgbm90CisJICogb3BlbmVkIGZvciBhcHBlbmQgbW9kZSBvciB0aGUgZmlsZW5hbWUgaXMgdHJ1bmNhdGVkIGF0IG9wZW4gdGltZS4KKwkgKi8KKwlpZiAoKGFjY19tb2RlICYgTUFZX1dSSVRFKSAmJgorCSAgICAoKGZsYWcgJiBPX1RSVU5DKSB8fCAhKGZsYWcgJiBPX0FQUEVORCkpICYmCisJICAgICh0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGJ1ZikpKSB7CisJCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKKwkJCQkJCSAgICAgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wsCisJCQkJCQkJICAgICBidWYsIG1vZGUpOworCX0KKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgYnVmLCBhY2NfbW9kZSwgIm9wZW4iLAorCQkJCQkJbW9kZSk7CisJaWYgKCFlcnJvciAmJiAoZmxhZyAmIE9fVFJVTkMpKQorCQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCwKKwkJCQkJCQkgICAgIGJ1ZiwgbW9kZSk7Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1Zik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja18xcGF0aF9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImNyZWF0ZSIsICJ1bmxpbmsiLCAibWtkaXIiLCAicm1kaXIiLCAibWtmaWZvIiwgIm1rc29jayIsICJta2Jsb2NrIiwgIm1rY2hhciIsICJ0cnVuY2F0ZSIgYW5kICJzeW1saW5rIi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQHBhdGg6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfMXBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCisJaWYgKCFtb2RlIHx8ICFwYXRoLT5tbnQpCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJc3dpdGNoIChvcGVyYXRpb24pIHsKKwljYXNlIFRPTU9ZT19UWVBFX01LRElSX0FDTDoKKwljYXNlIFRPTU9ZT19UWVBFX1JNRElSX0FDTDoKKwkJaWYgKCFidWYtPmlzX2RpcikgeworCQkJLyoKKwkJCSAqIHRvbW95b19nZXRfcGF0aCgpIHJlc2VydmVzIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8uIgorCQkJICovCisJCQlzdHJjYXQoKGNoYXIgKikgYnVmLT5uYW1lLCAiLyIpOworCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1Zik7CisJCX0KKwl9CisJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLCBvcGVyYXRpb24sIGJ1ZiwKKwkJCQkJCSAgICAgbW9kZSk7Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1Zik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmV3cml0ZSIuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlscDogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKworCWlmICghbW9kZSB8fCAhZmlscC0+Zl9wYXRoLm1udCkKKwkJcmV0dXJuIDA7CisJYnVmID0gdG9tb3lvX2dldF9wYXRoKCZmaWxwLT5mX3BhdGgpOworCWlmICghYnVmKQorCQlnb3RvIG91dDsKKwlpZiAoIXRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoYnVmKSkgeworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMLAorCQkJCQkJICAgICBidWYsIG1vZGUpOworIG91dDoKKwl0b21veW9fZnJlZShidWYpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfMnBhdGhfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZW5hbWUiIGFuZCAibGluayIuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBwYXRoMTogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAcGF0aDI6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfMnBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAorCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMikKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWYxLCAqYnVmMjsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJY29uc3QgY2hhciAqbXNnOworCisJaWYgKCFtb2RlIHx8ICFwYXRoMS0+bW50IHx8ICFwYXRoMi0+bW50KQorCQlyZXR1cm4gMDsKKwlidWYxID0gdG9tb3lvX2dldF9wYXRoKHBhdGgxKTsKKwlidWYyID0gdG9tb3lvX2dldF9wYXRoKHBhdGgyKTsKKwlpZiAoIWJ1ZjEgfHwgIWJ1ZjIpCisJCWdvdG8gb3V0OworCXsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gcGF0aDEtPmRlbnRyeTsKKwkJaWYgKGRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgeworCQkJLyoKKwkJCSAqIHRvbW95b19nZXRfcGF0aCgpIHJlc2VydmVzIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8uIgorCQkJICovCisJCQlpZiAoIWJ1ZjEtPmlzX2RpcikgeworCQkJCXN0cmNhdCgoY2hhciAqKSBidWYxLT5uYW1lLCAiLyIpOworCQkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYxKTsKKwkJCX0KKwkJCWlmICghYnVmMi0+aXNfZGlyKSB7CisJCQkJc3RyY2F0KChjaGFyICopIGJ1ZjItPm5hbWUsICIvIik7CisJCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1ZjIpOworCQkJfQorCQl9CisJfQorCWVycm9yID0gdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbChkb21haW4sIG9wZXJhdGlvbiwgYnVmMSwgYnVmMik7CisJbXNnID0gdG9tb3lvX2RwMmtleXdvcmQob3BlcmF0aW9uKTsKKwlpZiAoIWVycm9yKQorCQlnb3RvIG91dDsKKwlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tJXM6IEFjY2VzcyAnJXMgJXMgJXMnICIKKwkJICAgICAgICJkZW5pZWQgZm9yICVzXG4iLCB0b21veW9fZ2V0X21zZyhpc19lbmZvcmNlKSwKKwkJICAgICAgIG1zZywgYnVmMS0+bmFtZSwgYnVmMi0+bmFtZSwKKwkJICAgICAgIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOworCWlmIChtb2RlID09IDEgJiYgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhkb21haW4pKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUxID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oYnVmMSktPm5hbWU7CisJCWNvbnN0IGNoYXIgKm5hbWUyID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oYnVmMiktPm5hbWU7CisJCXRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKG9wZXJhdGlvbiwgbmFtZTEsIG5hbWUyLCBkb21haW4sCisJCQkJCSAgICAgIGZhbHNlKTsKKwl9Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1ZjEpOworCXRvbW95b19mcmVlKGJ1ZjIpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZjE2YgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKKyAqCisgKiBHZXQgdGhlIGNhbm9uaWNhbGl6ZWQgYWJzb2x1dGUgcGF0aG5hbWVzLiBUaGUgYmFzaXMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisKKy8qKgorICogdG9tb3lvX2VuY29kZTogQ29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGFzY2lpIHN0cmluZy4KKyAqCisgKiBAYnVmZmVyOiAgQnVmZmVyIGZvciBBU0NJSSBzdHJpbmcuCisgKiBAYnVmbGVuOiAgU2l6ZSBvZiBAYnVmZmVyLgorICogQHN0cjogICAgIEJpbmFyeSBzdHJpbmcuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl3aGlsZSAoMSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgc3RyKys7CisKKwkJaWYgKHRvbW95b19pc192YWxpZChjKSkgeworCQkJaWYgKC0tYnVmbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQkqYnVmZmVyKysgPSAoY2hhcikgYzsKKwkJCWlmIChjICE9ICdcXCcpCisJCQkJY29udGludWU7CisJCQlpZiAoLS1idWZsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCSpidWZmZXIrKyA9IChjaGFyKSBjOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjKSB7CisJCQlpZiAoLS1idWZsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCSpidWZmZXIgPSAnXDAnOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnVmbGVuIC09IDQ7CisJCWlmIChidWZsZW4gPD0gMCkKKwkJCWJyZWFrOworCQkqYnVmZmVyKysgPSAnXFwnOworCQkqYnVmZmVyKysgPSAoYyA+PiA2KSArICcwJzsKKwkJKmJ1ZmZlcisrID0gKChjID4+IDMpICYgNykgKyAnMCc7CisJCSpidWZmZXIrKyA9IChjICYgNykgKyAnMCc7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyIC0gUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICoKKyAqIEBwYXRoOiAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQG5ld25hbWU6ICAgICBQb2ludGVyIHRvIGJ1ZmZlciB0byByZXR1cm4gdmFsdWUgaW4uCisgKiBAbmV3bmFtZV9sZW46IFNpemUgb2YgQG5ld25hbWUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBJZiBkZW50cnkgaXMgYSBkaXJlY3RvcnksIHRyYWlsaW5nICcvJyBpcyBhcHBlbmRlZC4KKyAqIENoYXJhY3RlcnMgb3V0IG9mIDB4MjAgPCBjIDwgMHg3RiByYW5nZSBhcmUgY29udmVydGVkIHRvCisgKiBcb29vIHN0eWxlIG9jdGFsIHN0cmluZy4KKyAqIENoYXJhY3RlciBcIGlzIGNvbnZlcnRlZCB0byBcXCBzdHJpbmcuCisgKi8KK2ludCB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqbmV3bmFtZSwKKwkJCSAgICAgICBpbnQgbmV3bmFtZV9sZW4pCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBwYXRoLT5kZW50cnk7CisJY2hhciAqc3A7CisKKwlpZiAoIWRlbnRyeSB8fCAhcGF0aC0+bW50IHx8ICFuZXduYW1lIHx8IG5ld25hbWVfbGVuIDw9IDIwNDgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2RuYW1lKSB7CisJCS8qIEZvciAic29ja2V0OltcJF0iIGFuZCAicGlwZTpbXCRdIi4gKi8KKwkJc3RhdGljIGNvbnN0IGludCBvZmZzZXQgPSAxNTM2OworCQlzcCA9IGRlbnRyeS0+ZF9vcC0+ZF9kbmFtZShkZW50cnksIG5ld25hbWUgKyBvZmZzZXQsCisJCQkJCSAgIG5ld25hbWVfbGVuIC0gb2Zmc2V0KTsKKwl9IGVsc2UgeworCQkvKiBUYWtlbiBmcm9tIGRfbmFtZXNwYWNlX3BhdGgoKS4gKi8KKwkJc3RydWN0IHBhdGggcm9vdDsKKwkJc3RydWN0IHBhdGggbnNfcm9vdCA9IHsgfTsKKwkJc3RydWN0IHBhdGggdG1wOworCisJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCQlyb290ID0gY3VycmVudC0+ZnMtPnJvb3Q7CisJCXBhdGhfZ2V0KCZyb290KTsKKwkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJaWYgKHJvb3QubW50ICYmIHJvb3QubW50LT5tbnRfbnMpCisJCQluc19yb290Lm1udCA9IG1udGdldChyb290Lm1udC0+bW50X25zLT5yb290KTsKKwkJaWYgKG5zX3Jvb3QubW50KQorCQkJbnNfcm9vdC5kZW50cnkgPSBkZ2V0KG5zX3Jvb3QubW50LT5tbnRfcm9vdCk7CisJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCXRtcCA9IG5zX3Jvb3Q7CisJCXNwID0gX19kX3BhdGgocGF0aCwgJnRtcCwgbmV3bmFtZSwgbmV3bmFtZV9sZW4pOworCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlwYXRoX3B1dCgmcm9vdCk7CisJCXBhdGhfcHV0KCZuc19yb290KTsKKwl9CisJaWYgKElTX0VSUihzcCkpCisJCWVycm9yID0gUFRSX0VSUihzcCk7CisJZWxzZQorCQllcnJvciA9IHRvbW95b19lbmNvZGUobmV3bmFtZSwgc3AgLSBuZXduYW1lLCBzcCk7CisJLyogQXBwZW5kIHRyYWlsaW5nICcvJyBpZiBkZW50cnkgaXMgYSBkaXJlY3RvcnkuICovCisJaWYgKCFlcnJvciAmJiBkZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkKKwkgICAgJiYgKm5ld25hbWUpIHsKKwkJc3AgPSBuZXduYW1lICsgc3RybGVuKG5ld25hbWUpOworCQlpZiAoKihzcCAtIDEpICE9ICcvJykgeworCQkJaWYgKHNwIDwgbmV3bmFtZSArIG5ld25hbWVfbGVuIC0gNCkgeworCQkJCSpzcCsrID0gJy8nOworCQkJCSpzcCA9ICdcMCc7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gLUVOT01FTTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZXJyb3IpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInRvbW95b19yZWFscGF0aDogUGF0aG5hbWUgdG9vIGxvbmcuXG4iKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCAtIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICoKKyAqIEBwYXRoOiBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgdGhlIGdpdmVuIEBwYXRoIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpCit7CisJY2hhciAqYnVmID0gdG9tb3lvX2FsbG9jKHNpemVvZihzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyKSk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIpCisJCSAgICAgPD0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHBhdGgsIGJ1ZiwKKwkJCQkgICAgICAgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKSA9PSAwKQorCQlyZXR1cm4gYnVmOworCXRvbW95b19mcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoIC0gR2V0IHJlYWxwYXRoIG9mIGEgcGF0aG5hbWUuCisgKgorICogQHBhdGhuYW1lOiBUaGUgcGF0aG5hbWUgdG8gc29sdmUuCisgKgorICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgQHBhdGhuYW1lIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKworCWlmIChwYXRobmFtZSAmJiBwYXRoX2xvb2t1cChwYXRobmFtZSwgTE9PS1VQX0ZPTExPVywgJm5kKSA9PSAwKSB7CisJCWNoYXIgKmJ1ZiA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJm5kLnBhdGgpOworCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJCXJldHVybiBidWY7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyAtIEdldCByZWFscGF0aCBvZiBhIHBhdGhuYW1lLgorICoKKyAqIEBwYXRobmFtZTogVGhlIHBhdGhuYW1lIHRvIHNvbHZlLgorICoKKyAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIEBwYXRobmFtZSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisKKwlpZiAocGF0aG5hbWUgJiYgcGF0aF9sb29rdXAocGF0aG5hbWUsIDAsICZuZCkgPT0gMCkgeworCQljaGFyICpidWYgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZuZC5wYXRoKTsKKwkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQlyZXR1cm4gYnVmOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igbm9uLXN0cmluZyBkYXRhLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHM7CisvKiBRdW90YSBmb3IgaG9sZGluZyBub24tc3RyaW5nIGRhdGEuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3JfZWxlbWVudHM7CisKKy8qKgorICogdG9tb3lvX2FsbG9jX2VsZW1lbnQgLSBBbGxvY2F0ZSBwZXJtYW5lbnQgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLgorICoKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIE1lbW9yeSBoYXMgdG8gYmUgemVyb2VkLgorICogVGhlIFJBTSBpcyBjaHVua2VkLCBzbyBORVZFUiB0cnkgdG8ga2ZyZWUoKSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2VsZW1lbnQoY29uc3QgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RhdGljIGNoYXIgKmJ1ZjsKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgYnVmX3VzZWRfbGVuID0gUEFUSF9NQVg7CisJY2hhciAqcHRyID0gTlVMTDsKKwkvKkFzc3VtZXMgc2l6ZW9mKHZvaWQgKikgPj0gc2l6ZW9mKGxvbmcpIGlzIHRydWUuICovCisJY29uc3QgdW5zaWduZWQgaW50IHdvcmRfYWxpZ25lZF9zaXplCisJCT0gcm91bmR1cChzaXplLCBtYXgoc2l6ZW9mKHZvaWQgKiksIHNpemVvZihsb25nKSkpOworCWlmICh3b3JkX2FsaWduZWRfc2l6ZSA+IFBBVEhfTUFYKQorCQlyZXR1cm4gTlVMTDsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJaWYgKGJ1Zl91c2VkX2xlbiArIHdvcmRfYWxpZ25lZF9zaXplID4gUEFUSF9NQVgpIHsKKwkJaWYgKCF0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzIHx8CisJCSAgICB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHMKKwkJICAgICsgUEFUSF9NQVggPD0gdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cykKKwkJCXB0ciA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCQlpZiAoIXB0cikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgorCQkJICAgICAgICJmb3IgdG9tb3lvX2FsbG9jX2VsZW1lbnQoKS5cbiIpOworCQkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQl9IGVsc2UgeworCQkJYnVmID0gcHRyOworCQkJdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzICs9IFBBVEhfTUFYOworCQkJYnVmX3VzZWRfbGVuID0gd29yZF9hbGlnbmVkX3NpemU7CisJCQlwdHIgPSBidWY7CisJCX0KKwl9IGVsc2UgaWYgKHdvcmRfYWxpZ25lZF9zaXplKSB7CisJCWludCBpOworCQlwdHIgPSBidWYgKyBidWZfdXNlZF9sZW47CisJCWJ1Zl91c2VkX2xlbiArPSB3b3JkX2FsaWduZWRfc2l6ZTsKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRfYWxpZ25lZF9zaXplOyBpKyspIHsKKwkJCWlmICghcHRyW2ldKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBSZXNlcnZlZCBtZW1vcnkgd2FzIHRhaW50ZWQhICIKKwkJCSAgICAgICAiVGhlIHN5c3RlbSBtaWdodCBnbyB3cm9uZy5cbiIpOworCQkJcHRyW2ldID0gJ1wwJzsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIHB0cjsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igc3RyaW5nIGRhdGEgaW4gYnl0ZXMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZTsKKy8qIFF1b3RhIGZvciBob2xkaW5nIHN0cmluZyBkYXRhIGluIGJ5dGVzLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lOworCisvKgorICogVE9NT1lPIHVzZXMgdGhpcyBoYXNoIG9ubHkgd2hlbiBhcHBlbmRpbmcgYSBzdHJpbmcgaW50byB0aGUgc3RyaW5nCisgKiB0YWJsZS4gRnJlcXVlbmN5IG9mIGFwcGVuZGluZyBzdHJpbmdzIGlzIHZlcnkgbG93LiBTbyB3ZSBkb24ndCBuZWVkCisgKiBsYXJnZSAoZS5nLiA2NGspIGhhc2ggc2l6ZS4gMjU2IHdpbGwgYmUgc3VmZmljaWVudC4KKyAqLworI2RlZmluZSBUT01PWU9fTUFYX0hBU0ggMjU2CisKKy8qIFN0cnVjdHVyZSBmb3Igc3RyaW5nIGRhdGEuICovCitzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBlbnRyeTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgYXZhaWxhYmxlIG1lbW9yeSByZWdpb24uICovCitzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyICpwdHI7ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gYSBmcmVlIGFyZWEuICovCisJaW50IGxlbjsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhlIGFyZWEuICAgICAqLworfTsKKworLyoKKyAqIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19uYW1lX2VudHJ5Ii4KKyAqCisgKiBUaGlzIGxpc3QgaXMgdXBkYXRlZCBvbmx5IGluc2lkZSB0b21veW9fc2F2ZV9uYW1lKCksIHRodXMKKyAqIG5vIGdsb2JhbCBtdXRleCBleGlzdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19uYW1lX2xpc3RbVE9NT1lPX01BWF9IQVNIXTsKKworLyoqCisgKiB0b21veW9fc2F2ZV9uYW1lIC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RyaW5nIGRhdGEuCisgKgorICogQG5hbWU6IFRoZSBzdHJpbmcgdG8gc3RvcmUgaW50byB0aGUgcGVybWVybmVudCBtZW1vcnkuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhlIFJBTSBpcyBzaGFyZWQsIHNvIE5FVkVSIHRyeSB0byBtb2RpZnkgb3Iga2ZyZWUoKSB0aGUgcmV0dXJuZWQgbmFtZS4KKyAqLworY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdGF0aWMgTElTVF9IRUFEKGZtYl9saXN0KTsKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSAqcHRyOworCXVuc2lnbmVkIGludCBoYXNoOworCS8qIGZtYiBjb250YWlucyBhdmFpbGFibGUgc2l6ZSBpbiBieXRlcy4KKwkgICBmbWIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmbWJfbGlzdCB3aGVuIGZtYi0+bGVuIGJlY29tZXMgMC4gKi8KKwlzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgKmZtYjsKKwlpbnQgbGVuOworCWNoYXIgKmNwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwlsZW4gPSBzdHJsZW4obmFtZSkgKyAxOworCWlmIChsZW4gPiBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogTmFtZSB0b28gbG9uZyAiCisJCSAgICAgICAiZm9yIHRvbW95b19zYXZlX25hbWUoKS5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIGxlbiAtIDEpOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19uYW1lX2xpc3RbaGFzaCAlIFRPTU9ZT19NQVhfSEFTSF0sCisJCQkgICAgIGxpc3QpIHsKKwkJaWYgKGhhc2ggPT0gcHRyLT5lbnRyeS5oYXNoICYmICFzdHJjbXAobmFtZSwgcHRyLT5lbnRyeS5uYW1lKSkKKwkJCWdvdG8gb3V0OworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZtYiwgJmZtYl9saXN0LCBsaXN0KSB7CisJCWlmIChsZW4gPD0gZm1iLT5sZW4pCisJCQlnb3RvIHJlYWR5OworCX0KKwlpZiAoIXRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUgfHwKKwkgICAgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lICsgUEFUSF9NQVgKKwkgICAgPD0gdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSkKKwkJY3AgPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWNwID0gTlVMTDsKKwlmbWIgPSBremFsbG9jKHNpemVvZigqZm1iKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcCB8fCAhZm1iKSB7CisJCWtmcmVlKGNwKTsKKwkJa2ZyZWUoZm1iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgorCQkgICAgICAgImZvciB0b21veW9fc2F2ZV9uYW1lKCkuXG4iKTsKKwkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCXB0ciA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKwl0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWUgKz0gUEFUSF9NQVg7CisJbGlzdF9hZGQoJmZtYi0+bGlzdCwgJmZtYl9saXN0KTsKKwlmbWItPnB0ciA9IGNwOworCWZtYi0+bGVuID0gUEFUSF9NQVg7CisgcmVhZHk6CisJcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpwdHIpKTsKKwlpZiAoIXB0cikKKwkJZ290byBvdXQ7CisJcHRyLT5lbnRyeS5uYW1lID0gZm1iLT5wdHI7CisJbWVtbW92ZShmbWItPnB0ciwgbmFtZSwgbGVuKTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJnB0ci0+ZW50cnkpOworCWZtYi0+cHRyICs9IGxlbjsKKwlmbWItPmxlbiAtPSBsZW47CisJbGlzdF9hZGRfdGFpbCgmcHRyLT5saXN0LCAmdG9tb3lvX25hbWVfbGlzdFtoYXNoICUgVE9NT1lPX01BWF9IQVNIXSk7CisJaWYgKGZtYi0+bGVuID09IDApIHsKKwkJbGlzdF9kZWwoJmZtYi0+bGlzdCk7CisJCWtmcmVlKGZtYik7CisJfQorIG91dDoKKwltdXRleF91bmxvY2soJmxvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIHB0ciA/ICZwdHItPmVudHJ5IDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfaW5pdCAtIEluaXRpYWxpemUgcmVhbHBhdGggcmVsYXRlZCBjb2RlLgorICovCit2b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKQoreworCWludCBpOworCisJQlVJTERfQlVHX09OKFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOID4gUEFUSF9NQVgpOworCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0hBU0g7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19uYW1lX2xpc3RbaV0pOworCUlOSVRfTElTVF9IRUFEKCZ0b21veW9fa2VybmVsX2RvbWFpbi5hY2xfaW5mb19saXN0KTsKKwl0b21veW9fa2VybmVsX2RvbWFpbi5kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShUT01PWU9fUk9PVF9OQU1FKTsKKwlsaXN0X2FkZF90YWlsKCZ0b21veW9fa2VybmVsX2RvbWFpbi5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlpZiAodG9tb3lvX2ZpbmRfZG9tYWluKFRPTU9ZT19ST09UX05BTUUpICE9ICZ0b21veW9fa2VybmVsX2RvbWFpbikKKwkJcGFuaWMoIkNhbid0IHJlZ2lzdGVyIHRvbW95b19rZXJuZWxfZG9tYWluIik7CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworfQorCisvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZS4gKi8KK3N0YXRpYyBhdG9taWNfdCB0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZTsKKworLyoqCisgKiB0b21veW9fYWxsb2MgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRlbXBvcmFyeSBwdXJwb3NlLgorICoKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICp0b21veW9fYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHApCisJCWF0b21pY19hZGQoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJcmV0dXJuIHA7Cit9CisKKy8qKgorICogdG9tb3lvX2ZyZWUgLSBSZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdG9tb3lvX2FsbG9jKCkuCisgKgorICogQHA6IFBvaW50ZXIgcmV0dXJuZWQgYnkgdG9tb3lvX2FsbG9jKCkuIE1heSBiZSBOVUxMLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLwordm9pZCB0b21veW9fZnJlZShjb25zdCB2b2lkICpwKQoreworCWlmIChwKSB7CisJCWF0b21pY19zdWIoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJCWtmcmVlKHApOworCX0KK30KKworLyoqCisgKiB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlciAtIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIG1lbW9yeSB1c2FnZS4KKyAqLworaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJY29uc3QgdW5zaWduZWQgaW50IHNoYXJlZAorCQkJPSB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWU7CisJCWNvbnN0IHVuc2lnbmVkIGludCBwcml2YXRlCisJCQk9IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50czsKKwkJY29uc3QgdW5zaWduZWQgaW50IGR5bmFtaWMKKwkJCT0gYXRvbWljX3JlYWQoJnRvbW95b19keW5hbWljX21lbW9yeV9zaXplKTsKKwkJY2hhciBidWZmZXJbNjRdOworCisJCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKwkJaWYgKHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUpCisJCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKKwkJCQkgIiAgIChRdW90YTogJTEwdSkiLAorCQkJCSB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKTsKKwkJZWxzZQorCQkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiU2hhcmVkOiAgJTEwdSVzXG4iLCBzaGFyZWQsIGJ1ZmZlcik7CisJCWlmICh0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKQorCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCisJCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKKwkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyk7CisJCWVsc2UKKwkJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlByaXZhdGU6ICUxMHUlc1xuIiwgcHJpdmF0ZSwgYnVmZmVyKTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiRHluYW1pYzogJTEwdVxuIiwgZHluYW1pYyk7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlRvdGFsOiAgICUxMHVcbiIsCisJCQkJIHNoYXJlZCArIHByaXZhdGUgKyBkeW5hbWljKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhIC0gU2V0IG1lbW9yeSBxdW90YS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCWlmIChzc2NhbmYoZGF0YSwgIlNoYXJlZDogJXUiLCAmc2l6ZSkgPT0gMSkKKwkJdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSA9IHNpemU7CisJZWxzZSBpZiAoc3NjYW5mKGRhdGEsICJQcml2YXRlOiAldSIsICZzaXplKSA9PSAxKQorCQl0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOWZjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaApAQCAtMCwwICsxLDY2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKKyAqCisgKiBHZXQgdGhlIGNhbm9uaWNhbGl6ZWQgYWJzb2x1dGUgcGF0aG5hbWVzLiBUaGUgYmFzaXMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9ICisjZGVmaW5lIF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSAorCitzdHJ1Y3QgcGF0aDsKK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvOworc3RydWN0IHRvbW95b19pb19idWZmZXI7CisKKy8qIENvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBhc2NpaSBzdHJpbmcuICovCitpbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cik7CisKKy8qIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LiAqLworaW50IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpuZXduYW1lLAorCQkJICAgICAgIGludCBuZXduYW1lX2xlbik7CisKKy8qCisgKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aChjb25zdCBjaGFyICpwYXRobmFtZSk7CisvKgorICogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBmaW5hbCBzeW1saW5rLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfbm9mb2xsb3coY29uc3QgY2hhciAqcGF0aG5hbWUpOworLyogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IHRoZSBwYXRobmFtZSBpcyBhbHJlYWR5IHNvbHZlZC4gKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpOworCisvKgorICogQWxsb2NhdGUgbWVtb3J5IGZvciBBQ0wgZW50cnkuCisgKiBUaGUgUkFNIGlzIGNodW5rZWQsIHNvIE5FVkVSIHRyeSB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBwb2ludGVyLgorICovCit2b2lkICp0b21veW9fYWxsb2NfZWxlbWVudChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKy8qCisgKiBLZWVwIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBSQU0uCisgKiBUaGUgUkFNIGlzIHNoYXJlZCwgc28gTkVWRVIgdHJ5IHRvIG1vZGlmeSBvciBrZnJlZSgpIHRoZSByZXR1cm5lZCBuYW1lLgorICovCitjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX3NhdmVfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkgdXNlIChlLmcuIHBlcm1pc3Npb24gY2hlY2tzKS4gKi8KK3ZvaWQgKnRvbW95b19hbGxvYyhjb25zdCBzaXplX3Qgc2l6ZSk7CisKKy8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB0b21veW9fYWxsb2MoKS4gKi8KK3ZvaWQgdG9tb3lvX2ZyZWUoY29uc3Qgdm9pZCAqcCk7CisKKy8qIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UuICovCitpbnQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBTZXQgbWVtb3J5IHF1b3RhLiAqLworaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4gKi8KK3ZvaWQgX19pbml0IHRvbW95b19yZWFscGF0aF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9IKSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vdG9tb3lvLmMKKyAqCisgKiBMU00gaG9va3MgZm9yIFRPTU9ZTyBMaW51eC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisKK3N0YXRpYyBpbnQgdG9tb3lvX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAorCQkJICAgICAgIGdmcF90IGdmcCkKK3sKKwkvKgorCSAqIFNpbmNlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoiIGlzIGEgc2hhcmFibGUgcG9pbnRlciwKKwkgKiB3ZSBkb24ndCBuZWVkIHRvIGR1cGxpY2F0ZS4KKwkgKi8KKwluZXctPnNlY3VyaXR5ID0gb2xkLT5zZWN1cml0eTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b21veW9fYnBybV9zZXRfY3JlZHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwkvKgorCSAqIERvIG9ubHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIG9mIGFuIGV4ZWN2ZQorCSAqIG9wZXJhdGlvbi4KKwkgKi8KKwlpZiAoYnBybS0+Y3JlZF9wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBMb2FkIHBvbGljeSBpZiAvc2Jpbi90b21veW8taW5pdCBleGlzdHMgYW5kIC9zYmluL2luaXQgaXMgcmVxdWVzdGVkCisJICogZm9yIHRoZSBmaXJzdCB0aW1lLgorCSAqLworCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXRvbW95b19sb2FkX3BvbGljeShicHJtLT5maWxlbmFtZSk7CisJLyoKKwkgKiBUZWxsIHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5KCkgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBvZiBhbgorCSAqIGV4ZWN2ZSBvcGVyYXRpb24uCisJICovCisJYnBybS0+Y3JlZC0+c2VjdXJpdHkgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gYnBybS0+Y3JlZC0+c2VjdXJpdHk7CisKKwkvKgorCSAqIEV4ZWN1dGUgcGVybWlzc2lvbiBpcyBjaGVja2VkIGFnYWluc3QgcGF0aG5hbWUgcGFzc2VkIHRvIGRvX2V4ZWN2ZSgpCisJICogdXNpbmcgY3VycmVudCBkb21haW4uCisJICovCisJaWYgKCFkb21haW4pIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqbmV4dF9kb21haW4gPSBOVUxMOworCQlpbnQgcmV0dmFsID0gdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oYnBybSwgJm5leHRfZG9tYWluKTsKKworCQlpZiAoIXJldHZhbCkKKwkJCWJwcm0tPmNyZWQtPnNlY3VyaXR5ID0gbmV4dF9kb21haW47CisJCXJldHVybiByZXR2YWw7CisJfQorCS8qCisJICogUmVhZCBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCBpbnRlcnByZXRlcnMgdXNpbmcgbmV4dCBkb21haW4uCisJICogJzEnIGlzIHRoZSByZXN1bHQgb2Ygb3Blbl90b19uYW1laV9mbGFncyhPX1JET05MWSkuCisJICovCisJcmV0dXJuIHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oZG9tYWluLCAmYnBybS0+ZmlsZS0+Zl9wYXRoLCAxKTsKK30KKworI2lmZGVmIENPTkZJR19TWVNDVEwKKworc3RhdGljIGludCB0b21veW9fcHJlcGVuZChjaGFyICoqYnVmZmVyLCBpbnQgKmJ1ZmxlbiwgY29uc3QgY2hhciAqc3RyKQoreworCWludCBuYW1lbGVuID0gc3RybGVuKHN0cik7CisKKwlpZiAoKmJ1ZmxlbiA8IG5hbWVsZW4pCisJCXJldHVybiAtRU5PTUVNOworCSpidWZsZW4gLT0gbmFtZWxlbjsKKwkqYnVmZmVyIC09IG5hbWVsZW47CisJbWVtY3B5KCpidWZmZXIsIHN0ciwgbmFtZWxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3N5c2N0bF9wYXRoIC0gcmV0dXJuIHRoZSByZWFscGF0aCBvZiBhIGN0bF90YWJsZS4KKyAqIEB0YWJsZTogcG9pbnRlciB0byAic3RydWN0IGN0bF90YWJsZSIuCisgKgorICogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgQHRhYmxlIG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoaXMgZnVuY3Rpb24gZGlkbid0IHJldHVybiBOVUxMLgorICovCitzdGF0aWMgY2hhciAqdG9tb3lvX3N5c2N0bF9wYXRoKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCWludCBidWZsZW4gPSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTjsKKwljaGFyICpidWYgPSB0b21veW9fYWxsb2MoYnVmbGVuKTsKKwljaGFyICplbmQgPSBidWYgKyBidWZsZW47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKworCSotLWVuZCA9ICdcMCc7CisJYnVmbGVuLS07CisJd2hpbGUgKHRhYmxlKSB7CisJCWNoYXIgbnVtWzMyXTsKKwkJY29uc3QgY2hhciAqc3AgPSB0YWJsZS0+cHJvY25hbWU7CisKKwkJaWYgKCFzcCkgeworCQkJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOworCQkJc25wcmludGYobnVtLCBzaXplb2YobnVtKSAtIDEsICI9JWQ9IiwgdGFibGUtPmN0bF9uYW1lKTsKKwkJCXNwID0gbnVtOworCQl9CisJCWlmICh0b21veW9fcHJlcGVuZCgmZW5kLCAmYnVmbGVuLCBzcCkgfHwKKwkJICAgIHRvbW95b19wcmVwZW5kKCZlbmQsICZidWZsZW4sICIvIikpCisJCQlnb3RvIG91dDsKKwkJdGFibGUgPSB0YWJsZS0+cGFyZW50OworCX0KKwlpZiAodG9tb3lvX3ByZXBlbmQoJmVuZCwgJmJ1ZmxlbiwgIi9wcm9jL3N5cyIpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IHRvbW95b19lbmNvZGUoYnVmLCBlbmQgLSBidWYsIGVuZCk7Cisgb3V0OgorCWlmICghZXJyb3IpCisJCXJldHVybiBidWY7CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB0b21veW9fc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApCit7CisJaW50IGVycm9yOworCWNoYXIgKm5hbWU7CisKKwlvcCAmPSBNQVlfUkVBRCB8IE1BWV9XUklURTsKKwlpZiAoIW9wKQorCQlyZXR1cm4gMDsKKwluYW1lID0gdG9tb3lvX3N5c2N0bF9wYXRoKHRhYmxlKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybSh0b21veW9fZG9tYWluKCksIG5hbWUsIG9wKTsKKwl0b21veW9fZnJlZShuYW1lKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB0b21veW9fcGF0aF90cnVuY2F0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgbG9mZl90IGxlbmd0aCwKKwkJCQl1bnNpZ25lZCBpbnQgdGltZV9hdHRycykKK3sKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wsCisJCQkJICAgICAgIHBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3VubGluayhzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ta2RpcihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgIGludCBtb2RlKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9NS0RJUl9BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ybWRpcihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1JNRElSX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3N5bWxpbmsoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX21rbm9kKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCWludCB0eXBlID0gVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTDsKKworCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRkNIUjoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0w7CisJCWJyZWFrOworCWNhc2UgU19JRkJMSzoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQkxPQ0tfQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZJRk86CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZTT0NLOgorCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtTT0NLX0FDTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIHR5cGUsICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBwYXRoICpuZXdfZGlyLAorCQkJICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aDEgPSB7IG5ld19kaXItPm1udCwgb2xkX2RlbnRyeSB9OworCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfZGlyLT5tbnQsIG5ld19kZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9MSU5LX0FDTCwKKwkJCQkgICAgICAgJnBhdGgxLCAmcGF0aDIpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3JlbmFtZShzdHJ1Y3QgcGF0aCAqb2xkX3BhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQkgICAgICBzdHJ1Y3QgcGF0aCAqbmV3X3BhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aDEgPSB7IG9sZF9wYXJlbnQtPm1udCwgb2xkX2RlbnRyeSB9OworCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfcGFyZW50LT5tbnQsIG5ld19kZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9SRU5BTUVfQUNMLAorCQkJCSAgICAgICAmcGF0aDEsICZwYXRoMik7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2ZpbGVfZmNudGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWlmIChjbWQgPT0gRl9TRVRGTCAmJiAoKGFyZyBeIGZpbGUtPmZfZmxhZ3MpICYgT19BUFBFTkQpKQorCQlyZXR1cm4gdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbih0b21veW9fZG9tYWluKCksIGZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvbW95b19kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCit7CisJaW50IGZsYWdzID0gZi0+Zl9mbGFnczsKKworCWlmICgoZmxhZ3MgKyAxKSAmIE9fQUNDTU9ERSkKKwkJZmxhZ3MrKzsKKwlmbGFncyB8PSBmLT5mX2ZsYWdzICYgKE9fQVBQRU5EIHwgT19UUlVOQyk7CisJLyogRG9uJ3QgY2hlY2sgcmVhZCBwZXJtaXNzaW9uIGhlcmUgaWYgY2FsbGVkIGZyb20gZG9fZXhlY3ZlKCkuICovCisJaWYgKGN1cnJlbnQtPmluX2V4ZWN2ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24odG9tb3lvX2RvbWFpbigpLCAmZi0+Zl9wYXRoLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyB0b21veW9fc2VjdXJpdHlfb3BzID0geworCS5uYW1lICAgICAgICAgICAgICAgID0gInRvbW95byIsCisJLmNyZWRfcHJlcGFyZSAgICAgICAgPSB0b21veW9fY3JlZF9wcmVwYXJlLAorCS5icHJtX3NldF9jcmVkcyAgICAgID0gdG9tb3lvX2Jwcm1fc2V0X2NyZWRzLAorCS5icHJtX2NoZWNrX3NlY3VyaXR5ID0gdG9tb3lvX2Jwcm1fY2hlY2tfc2VjdXJpdHksCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCS5zeXNjdGwgICAgICAgICAgICAgID0gdG9tb3lvX3N5c2N0bCwKKyNlbmRpZgorCS5maWxlX2ZjbnRsICAgICAgICAgID0gdG9tb3lvX2ZpbGVfZmNudGwsCisJLmRlbnRyeV9vcGVuICAgICAgICAgPSB0b21veW9fZGVudHJ5X29wZW4sCisJLnBhdGhfdHJ1bmNhdGUgICAgICAgPSB0b21veW9fcGF0aF90cnVuY2F0ZSwKKwkucGF0aF91bmxpbmsgICAgICAgICA9IHRvbW95b19wYXRoX3VubGluaywKKwkucGF0aF9ta2RpciAgICAgICAgICA9IHRvbW95b19wYXRoX21rZGlyLAorCS5wYXRoX3JtZGlyICAgICAgICAgID0gdG9tb3lvX3BhdGhfcm1kaXIsCisJLnBhdGhfc3ltbGluayAgICAgICAgPSB0b21veW9fcGF0aF9zeW1saW5rLAorCS5wYXRoX21rbm9kICAgICAgICAgID0gdG9tb3lvX3BhdGhfbWtub2QsCisJLnBhdGhfbGluayAgICAgICAgICAgPSB0b21veW9fcGF0aF9saW5rLAorCS5wYXRoX3JlbmFtZSAgICAgICAgID0gdG9tb3lvX3BhdGhfcmVuYW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG9tb3lvX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKSBjdXJyZW50X2NyZWQoKTsKKworCWlmICghc2VjdXJpdHlfbW9kdWxlX2VuYWJsZSgmdG9tb3lvX3NlY3VyaXR5X29wcykpCisJCXJldHVybiAwOworCS8qIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBzZWN1cml0eSBmcmFtZXdvcmsgKi8KKwlpZiAocmVnaXN0ZXJfc2VjdXJpdHkoJnRvbW95b19zZWN1cml0eV9vcHMpKQorCQlwYW5pYygiRmFpbHVyZSByZWdpc3RlcmluZyBUT01PWU8gTGludXgiKTsKKwlwcmludGsoS0VSTl9JTkZPICJUT01PWU8gTGludXggaW5pdGlhbGl6ZWRcbiIpOworCWNyZWQtPnNlY3VyaXR5ID0gJnRvbW95b19rZXJuZWxfZG9tYWluOworCXRvbW95b19yZWFscGF0aF9pbml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3NlY3VyaXR5X2luaXRjYWxsKHRvbW95b19pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uaCBiL3NlY3VyaXR5L3RvbW95by90b21veW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGM4ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gKKyNkZWZpbmUgX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSAorCitzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbzsKK3N0cnVjdCBwYXRoOworc3RydWN0IGlub2RlOworc3RydWN0IGxpbnV4X2JpbnBybTsKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcjsKKworaW50IHRvbW95b19jaGVja19maWxlX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHU4IHBlcm0pOworaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJICAgc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqYnVmKTsKK2ludCB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IGludCBmbGFnKTsKK2ludCB0b21veW9fY2hlY2tfMXBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aCk7CitpbnQgdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAorCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMik7CitpbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKTsKK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbik7CisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KKworI2RlZmluZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICAgICAgICAgICAgICAgICAxCisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEZpbGUgQ29udHJvbHMuICovCisKKy8qCisgKiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNwZWNpYWwuIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBzZXQKKyAqIGlmIGJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlIHNldC4gQm90aCBUWVBFX1JFQURfQUNMIGFuZAorICogVFlQRV9XUklURV9BQ0wgYXJlIGF1dG9tYXRpY2FsbHkgc2V0IGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgc2V0LgorICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgZWl0aGVyIFRZUEVfUkVBRF9BQ0wgb3IKKyAqIFRZUEVfV1JJVEVfQUNMIGlzIGNsZWFyZWQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlCisgKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBjbGVhcmVkLgorICovCisKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wgICAgMAorI2RlZmluZSBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFQURfQUNMICAgICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX1RZUEVfV1JJVEVfQUNMICAgICAgICAgMworI2RlZmluZSBUT01PWU9fVFlQRV9DUkVBVEVfQUNMICAgICAgICA0CisjZGVmaW5lIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wgICAgICAgIDUKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtESVJfQUNMICAgICAgICAgNgorI2RlZmluZSBUT01PWU9fVFlQRV9STURJUl9BQ0wgICAgICAgICA3CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LRklGT19BQ0wgICAgICAgIDgKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtTT0NLX0FDTCAgICAgICAgOQorI2RlZmluZSBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTCAgICAgIDEwCisjZGVmaW5lIFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0wgICAgICAgMTEKKyNkZWZpbmUgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMICAgICAxMgorI2RlZmluZSBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCAgICAgIDEzCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMICAgICAgMTQKKyNkZWZpbmUgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT04gMTUKKworI2RlZmluZSBUT01PWU9fVFlQRV9MSU5LX0FDTCAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OIDIKKworI2RlZmluZSBUT01PWU9fRE9NQUlOUE9MSUNZICAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19ET01BSU5fU1RBVFVTICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fUFJPQ0VTU19TVEFUVVMgICAgICAgIDMKKyNkZWZpbmUgVE9NT1lPX01FTUlORk8gICAgICAgICAgICAgICA0CisjZGVmaW5lIFRPTU9ZT19TRUxGRE9NQUlOICAgICAgICAgICAgNQorI2RlZmluZSBUT01PWU9fVkVSU0lPTiAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVE9NT1lPX1BST0ZJTEUgICAgICAgICAgICAgICA3CisjZGVmaW5lIFRPTU9ZT19NQU5BR0VSICAgICAgICAgICAgICAgOAorCitleHRlcm4gc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZG9tYWluKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKK30KKworLyogQ2FsbGVyIGhvbGRzIHRhc2tsaXN0X2xvY2sgc3BpbmxvY2suICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19yZWFsX2RvbWFpbihzdHJ1Y3QgdGFza19zdHJ1Y3QKKwkJCQkJCQkgICAgKnRhc2spCit7CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBnZXRfdGFza19jcmVkKHRhc2spOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IGNyZWQtPnNlY3VyaXR5OworCisJcHV0X2NyZWQoY3JlZCk7CisJcmV0dXJuIGRvbWFpbjsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCit9CisKKyNlbmRpZiAvKiAhZGVmaW5lZChfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19IKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvS2NvbmZpZyBiL3NvdW5kL0tjb25maWcKaW5kZXggMjAwYWNhMS4uMWVjZWI4NSAxMDA2NDQKLS0tIGEvc291bmQvS2NvbmZpZworKysgYi9zb3VuZC9LY29uZmlnCkBAIC02MCw2ICs2MCw4IEBACiAKIHNvdXJjZSAic291bmQvYXJtL0tjb25maWciCiAKK3NvdXJjZSAic291bmQvYXRtZWwvS2NvbmZpZyIKKwogc291cmNlICJzb3VuZC9zcGkvS2NvbmZpZyIKIAogc291cmNlICJzb3VuZC9taXBzL0tjb25maWciCmRpZmYgLS1naXQgYS9zb3VuZC9NYWtlZmlsZSBiL3NvdW5kL01ha2VmaWxlCmluZGV4IGM3NmQ3MDcuLmVjNDY3ZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL01ha2VmaWxlCisrKyBiL3NvdW5kL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogb2JqLSQoQ09ORklHX1NPVU5EX1BSSU1FKSArPSBvc3MvCiBvYmotJChDT05GSUdfRE1BU09VTkQpICs9IG9zcy8KIG9iai0kKENPTkZJR19TTkQpICs9IGNvcmUvIGkyYy8gZHJpdmVycy8gaXNhLyBwY2kvIHBwYy8gYXJtLyBzaC8gc3ludGgvIHVzYi8gXAotCXNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvCisJc3BhcmMvIHNwaS8gcGFyaXNjLyBwY21jaWEvIG1pcHMvIHNvYy8gYXRtZWwvCiBvYmotJChDT05GSUdfU05EX0FPQSkgKz0gYW9hLwogCiAjIFRoaXMgb25lIG11c3QgYmUgY29tcGlsYWJsZSBldmVuIGlmIHNvdW5kIGlzIGNvbmZpZ3VyZWQgb3V0CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvYW9hLWdwaW8uaCBiL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCmluZGV4IGVlNjRmNWQuLjYwNjViMDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCisrKyBiL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCkBAIC0zNCwxMCArMzQsMTIgQEAKIAl2b2lkICgqc2V0X2hlYWRwaG9uZSkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAJdm9pZCAoKnNldF9zcGVha2Vycykoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAJdm9pZCAoKnNldF9saW5lb3V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKKwl2b2lkICgqc2V0X21hc3Rlcikoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAKIAlpbnQgKCpnZXRfaGVhZHBob25lKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAJaW50ICgqZ2V0X3NwZWFrZXJzKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAJaW50ICgqZ2V0X2xpbmVvdXQpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0KTsKKwlpbnQgKCpnZXRfbWFzdGVyKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAKIAl2b2lkICgqc2V0X2h3X3Jlc2V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvcmUvYWxzYS5jIGIvc291bmQvYW9hL2NvcmUvYWxzYS5jCmluZGV4IDYxNzg1MDQuLjBmYTM4NTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYworKysgYi9zb3VuZC9hb2EvY29yZS9hbHNhLmMKQEAgLTIzLDkgKzIzLDEwIEBACiAJCS8qIGNhbm5vdCBiZSBFRVhJU1QgZHVlIHRvIHVzYWdlIGluIGFvYV9mYWJyaWNfcmVnaXN0ZXIgKi8KIAkJcmV0dXJuIC1FQlVTWTsKIAotCWFsc2FfY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgbmFtZSwgbW9kLCBzaXplb2Yoc3RydWN0IGFvYV9jYXJkKSk7Ci0JaWYgKCFhbHNhX2NhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgbmFtZSwgbW9kLCBzaXplb2Yoc3RydWN0IGFvYV9jYXJkKSwKKwkJCSAgICAgICZhbHNhX2NhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWFvYV9jYXJkID0gYWxzYV9jYXJkLT5wcml2YXRlX2RhdGE7CiAJYW9hX2NhcmQtPmFsc2FfY2FyZCA9IGFsc2FfY2FyZDsKIAlhbHNhX2NhcmQtPmRldiA9IGRldjsKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKaW5kZXggYzkzYWQ1ZC4uZGU4ZTAzYSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKKysrIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlICIuLi9hb2EuaCIKIAotLyogVE9ETzogdGhlc2UgYXJlIDIwIGdsb2JhbCB2YXJpYWJsZXMKKy8qIFRPRE86IHRoZXNlIGFyZSBsb3RzIG9mIGdsb2JhbCB2YXJpYWJsZXMKICAqIHRoYXQgYXJlbid0IHVzZWQgb24gbW9zdCBtYWNoaW5lcy4uLgogICogTW92ZSB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqIHN0cnVjdHVyZSBhbmQgdXNlIHRoYXQuCkBAIC0yMyw2ICsyMyw3IEBACiAvKiB0aGVzZSBhcmUgdGhlIEdQSU8gbnVtYmVycyAocmVnaXN0ZXIgYWRkcmVzc2VzIGFzIG9mZnNldHMgaW50bwogICogdGhlIEdQSU8gc3BhY2UpICovCiBzdGF0aWMgaW50IGhlYWRwaG9uZV9tdXRlX2dwaW87CitzdGF0aWMgaW50IG1hc3Rlcl9tdXRlX2dwaW87CiBzdGF0aWMgaW50IGFtcF9tdXRlX2dwaW87CiBzdGF0aWMgaW50IGxpbmVvdXRfbXV0ZV9ncGlvOwogc3RhdGljIGludCBod19yZXNldF9ncGlvOwpAQCAtMzIsNiArMzMsNyBAQAogCiAvKiBzZWUgdGhlIFNXSVRDSF9HUElPIG1hY3JvICovCiBzdGF0aWMgaW50IGhlYWRwaG9uZV9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CitzdGF0aWMgaW50IG1hc3Rlcl9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CiBzdGF0aWMgaW50IGFtcF9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CiBzdGF0aWMgaW50IGxpbmVvdXRfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOwogc3RhdGljIGludCBod19yZXNldF9ncGlvX2FjdGl2ZXN0YXRlOwpAQCAtMTU2LDYgKzE1OCw3IEBACiBGVFJfR1BJTyhoZWFkcGhvbmUsIDApOwogRlRSX0dQSU8oYW1wLCAxKTsKIEZUUl9HUElPKGxpbmVvdXQsIDIpOworRlRSX0dQSU8obWFzdGVyLCAzKTsKIAogc3RhdGljIHZvaWQgZnRyX2dwaW9fc2V0X2h3X3Jlc2V0KHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pCiB7CkBAIC0xNzIsNiArMTc1LDggQEAKIAkJCSAgaHdfcmVzZXRfZ3Bpbywgdik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19tZXRob2RzIG1ldGhvZHM7CisKIHN0YXRpYyB2b2lkIGZ0cl9ncGlvX2FsbF9hbXBzX29mZihzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCkKIHsKIAlpbnQgc2F2ZWQ7CkBAIC0xODEsNiArMTg2LDggQEAKIAlmdHJfZ3Bpb19zZXRfaGVhZHBob25lKHJ0LCAwKTsKIAlmdHJfZ3Bpb19zZXRfYW1wKHJ0LCAwKTsKIAlmdHJfZ3Bpb19zZXRfbGluZW91dChydCwgMCk7CisJaWYgKG1ldGhvZHMuc2V0X21hc3RlcikKKwkJZnRyX2dwaW9fc2V0X21hc3RlcihydCwgMCk7CiAJcnQtPmltcGxlbWVudGF0aW9uX3ByaXZhdGUgPSBzYXZlZDsKIH0KIApAQCAtMTkzLDYgKzIwMCw4IEBACiAJZnRyX2dwaW9fc2V0X2hlYWRwaG9uZShydCwgKHM+PjApJjEpOwogCWZ0cl9ncGlvX3NldF9hbXAocnQsIChzPj4xKSYxKTsKIAlmdHJfZ3Bpb19zZXRfbGluZW91dChydCwgKHM+PjIpJjEpOworCWlmIChtZXRob2RzLnNldF9tYXN0ZXIpCisJCWZ0cl9ncGlvX3NldF9tYXN0ZXIocnQsIChzPj4zKSYxKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyX2hhbmRsZV9ub3RpZnkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjMxLDYgKzI0MCwxMiBAQAogCWdldF9ncGlvKCJody1yZXNldCIsICJhdWRpby1ody1yZXNldCIsCiAJCSAmaHdfcmVzZXRfZ3BpbywKIAkJICZod19yZXNldF9ncGlvX2FjdGl2ZXN0YXRlKTsKKwlpZiAoZ2V0X2dwaW8oIm1hc3Rlci1tdXRlIiwgTlVMTCwKKwkJICAgICAmbWFzdGVyX211dGVfZ3BpbywKKwkJICAgICAmbWFzdGVyX211dGVfZ3Bpb19hY3RpdmVzdGF0ZSkpIHsKKwkJbWV0aG9kcy5zZXRfbWFzdGVyID0gZnRyX2dwaW9fc2V0X21hc3RlcjsKKwkJbWV0aG9kcy5nZXRfbWFzdGVyID0gZnRyX2dwaW9fZ2V0X21hc3RlcjsKKwl9CiAKIAloZWFkcGhvbmVfZGV0ZWN0X25vZGUgPSBnZXRfZ3BpbygiaGVhZHBob25lLWRldGVjdCIsIE5VTEwsCiAJCQkJCSAmaGVhZHBob25lX2RldGVjdF9ncGlvLApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwppbmRleCBhZDYwZjVkLi5mYmY1YzkzIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYworKysgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwpAQCAtMSwxNiArMSwxNCBAQAogLyoKLSAqIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyIC0tIGxheW91dCBmYWJyaWMKKyAqIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyIC0tIGxheW91dC9tYWNoaW5lIGlkIGZhYnJpYwogICoKLSAqIENvcHlyaWdodCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogR1BMIHYyLCBjYW4gYmUgZm91bmQgaW4gQ09QWUlORy4KICAqCiAgKgotICogVGhpcyBmYWJyaWMgbW9kdWxlIGxvb2tzIGZvciBzb3VuZCBjb2RlY3MKLSAqIGJhc2VkIG9uIHRoZSBsYXlvdXQtaWQgcHJvcGVydHkgaW4gdGhlIGRldmljZSB0cmVlLgotICoKKyAqIFRoaXMgZmFicmljIG1vZHVsZSBsb29rcyBmb3Igc291bmQgY29kZWNzIGJhc2VkIG9uIHRoZQorICogbGF5b3V0LWlkIG9yIGRldmljZS1pZCBwcm9wZXJ0eSBpbiB0aGUgZGV2aWNlIHRyZWUuCiAgKi8KLQogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjMsNyArNjEsNyBAQAogI2RlZmluZSBMQVlPVVRfRkxBR19DT01CT19MSU5FT1VUX1NQRElGCSgxPDwwKQogCiBzdHJ1Y3QgbGF5b3V0IHsKLQl1bnNpZ25lZCBpbnQgbGF5b3V0X2lkOworCXVuc2lnbmVkIGludCBsYXlvdXRfaWQsIGRldmljZV9pZDsKIAlzdHJ1Y3QgY29kZWNfY29ubmVjdF9pbmZvIGNvZGVjc1tNQVhfQ09ERUNTX1BFUl9CVVNdOwogCWludCBmbGFnczsKIApAQCAtMTExLDYgKzEwOSwxMCBAQAogTU9EVUxFX0FMSUFTKCJzb3VuZC1sYXlvdXQtOTgiKTsKIE1PRFVMRV9BTElBUygic291bmQtbGF5b3V0LTEwMCIpOwogCitNT0RVTEVfQUxJQVMoImFvYS1kZXZpY2UtaWQtMTQiKTsKK01PRFVMRV9BTElBUygiYW9hLWRldmljZS1pZC0yMiIpOworTU9EVUxFX0FMSUFTKCJhb2EtZGV2aWNlLWlkLTM1Iik7CisKIC8qIG9ueXggd2l0aCBhbGwgYnV0IG1pY3JvcGhvbmUgY29ubmVjdGVkICovCiBzdGF0aWMgc3RydWN0IGNvZGVjX2Nvbm5lY3Rpb24gb255eF9jb25uZWN0aW9uc19ub21pY1tdID0gewogCXsKQEAgLTUxOCw2ICs1MjAsMjcgQEAKIAkJLmNvbm5lY3Rpb25zID0gb255eF9jb25uZWN0aW9uc19ub2hlYWRwaG9uZXMsCiAJICB9LAogCX0sCisJLyogUG93ZXJNYWMzLDQgKi8KKwl7IC5kZXZpY2VfaWQgPSAxNCwKKwkgIC5jb2RlY3NbMF0gPSB7CisJCS5uYW1lID0gInRhcyIsCisJCS5jb25uZWN0aW9ucyA9IHRhc19jb25uZWN0aW9uc19ub2xpbmUsCisJICB9LAorCX0sCisJLyogUG93ZXJNYWMzLDYgKi8KKwl7IC5kZXZpY2VfaWQgPSAyMiwKKwkgIC5jb2RlY3NbMF0gPSB7CisJCS5uYW1lID0gInRhcyIsCisJCS5jb25uZWN0aW9ucyA9IHRhc19jb25uZWN0aW9uc19hbGwsCisJICB9LAorCX0sCisJLyogUG93ZXJCb29rNSwyICovCisJeyAuZGV2aWNlX2lkID0gMzUsCisJICAuY29kZWNzWzBdID0geworCQkubmFtZSA9ICJ0YXMiLAorCQkuY29ubmVjdGlvbnMgPSB0YXNfY29ubmVjdGlvbnNfYWxsLAorCSAgfSwKKwl9LAogCXt9CiB9OwogCkBAIC01MjYsNyArNTQ5LDcgQEAKIAlzdHJ1Y3QgbGF5b3V0ICpsOwogCiAJbCA9IGxheW91dHM7Ci0Jd2hpbGUgKGwtPmxheW91dF9pZCkgeworCXdoaWxlIChsLT5jb2RlY3NbMF0ubmFtZSkgewogCQlpZiAobC0+bGF5b3V0X2lkID09IGlkKQogCQkJcmV0dXJuIGw7CiAJCWwrKzsKQEAgLTUzNCw2ICs1NTcsMTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBsYXlvdXQgKmZpbmRfbGF5b3V0X2J5X2RldmljZSh1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGxheW91dCAqbDsKKworCWwgPSBsYXlvdXRzOworCXdoaWxlIChsLT5jb2RlY3NbMF0ubmFtZSkgeworCQlpZiAobC0+ZGV2aWNlX2lkID09IGlkKQorCQkJcmV0dXJuIGw7CisJCWwrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIHVzZV9sYXlvdXQoc3RydWN0IGxheW91dCAqbCkKIHsKIAlpbnQgaTsKQEAgLTU2NCw2ICs2MDAsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmhlYWRwaG9uZV9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmxpbmVvdXRfY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpzcGVha2VyX2N0cmw7CisJc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyX2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqaGVhZHBob25lX2RldGVjdGVkX2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqbGluZW91dF9kZXRlY3RlZF9jdHJsOwogCkBAIC02MTUsNiArNjUyLDcgQEAKIEFNUF9DT05UUk9MKGhlYWRwaG9uZSwgIkhlYWRwaG9uZSBTd2l0Y2giKTsKIEFNUF9DT05UUk9MKHNwZWFrZXJzLCAiU3BlYWtlcnMgU3dpdGNoIik7CiBBTVBfQ09OVFJPTChsaW5lb3V0LCAiTGluZS1PdXQgU3dpdGNoIik7CitBTVBfQ09OVFJPTChtYXN0ZXIsICJNYXN0ZXIgU3dpdGNoIik7CiAKIHN0YXRpYyBpbnQgZGV0ZWN0X2Nob2ljZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQpAQCAtODU1LDYgKzg5MywxMSBAQAogIAlsaW5lb3V0ID0gY29kZWMtPmdwaW8tPm1ldGhvZHMtPmdldF9kZXRlY3QoY29kZWMtPmdwaW8sCiAJCQkJCQkgICBBT0FfTk9USUZZX0xJTkVfT1VUKTsKIAorCWlmIChjb2RlYy0+Z3Bpby0+bWV0aG9kcy0+c2V0X21hc3RlcikgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJm1hc3Rlcl9jdGwsIGNvZGVjLT5ncGlvKTsKKwkJbGRldi0+bWFzdGVyX2N0cmwgPSBjdGw7CisJCWFvYV9zbmRfY3RsX2FkZChjdGwpOworCX0KIAl3aGlsZSAoY2MtPmNvbm5lY3RlZCkgewogCQlpZiAoY2MtPmNvbm5lY3RlZCAmIENDX1NQRUFLRVJTKSB7CiAJCQlpZiAoaGVhZHBob25lcyA8PSAwICYmIGxpbmVvdXQgPD0gMCkKQEAgLTkzOCw4ICs5ODEsOCBAQAogc3RhdGljIGludCBhb2FfZmFicmljX2xheW91dF9wcm9iZShzdHJ1Y3Qgc291bmRidXNfZGV2ICpzZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc291bmQgPSBOVUxMOwotCWNvbnN0IHVuc2lnbmVkIGludCAqbGF5b3V0X2lkOwotCXN0cnVjdCBsYXlvdXQgKmxheW91dDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmlkOworCXN0cnVjdCBsYXlvdXQgKmxheW91dCA9IE5VTEw7CiAJc3RydWN0IGxheW91dF9kZXYgKmxkZXYgPSBOVUxMOwogCWludCBlcnI7CiAKQEAgLTk1MiwxNSArOTk1LDE4IEBACiAJCWlmIChzb3VuZC0+dHlwZSAmJiBzdHJjYXNlY21wKHNvdW5kLT50eXBlLCAic291bmRjaGlwIikgPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoIXNvdW5kKSByZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXNvdW5kKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWxheW91dF9pZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOwotCWlmICghbGF5b3V0X2lkKQotCQlnb3RvIG91dG5vZGV2OwotCXByaW50ayhLRVJOX0lORk8gInNuZC1hb2EtZmFicmljLWxheW91dDogZm91bmQgYnVzIHdpdGggbGF5b3V0ICVkXG4iLAotCSAgICAgICAqbGF5b3V0X2lkKTsKKwlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOworCWlmIChpZCkgeworCQlsYXlvdXQgPSBmaW5kX2xheW91dF9ieV9pZCgqaWQpOworCX0gZWxzZSB7CisJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCWlmIChpZCkKKwkJCWxheW91dCA9IGZpbmRfbGF5b3V0X2J5X2RldmljZSgqaWQpOworCX0KIAotCWxheW91dCA9IGZpbmRfbGF5b3V0X2J5X2lkKCpsYXlvdXRfaWQpOwogCWlmICghbGF5b3V0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAic25kLWFvYS1mYWJyaWMtbGF5b3V0OiB1bmtub3duIGxheW91dFxuIik7CiAJCWdvdG8gb3V0bm9kZXY7CkBAIC05NzYsNiArMTAyMiw3IEBACiAJbGRldi0+bGF5b3V0ID0gbGF5b3V0OwogCWxkZXYtPmdwaW8ubm9kZSA9IHNvdW5kLT5wYXJlbnQ7CiAJc3dpdGNoIChsYXlvdXQtPmxheW91dF9pZCkgeworCWNhc2UgMDogIC8qIGFueXRoaW5nIHdpdGggZGV2aWNlX2lkLCBub3QgbGF5b3V0X2lkICovCiAJY2FzZSA0MTogLyogdGhhdCB1bmtub3duIG1hY2hpbmUgbm8gb25lIHNlZW1zIHRvIGhhdmUgKi8KIAljYXNlIDUxOiAvKiBQb3dlckJvb2s1LDQgKi8KIAljYXNlIDU4OiAvKiBNYWMgTWluaSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYwppbmRleCBiZTQ2OGVkZi4uNDE4Yzg0YyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKKysrIGIvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogaTJzYnVzIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogR1BMIHYyLCBjYW4gYmUgZm91bmQgaW4gQ09QWUlORy4KICAqLwpAQCAtMTg2LDEzICsxODYsMjUgQEAKIAkJfQogCX0KIAlpZiAoaSA9PSAxKSB7Ci0JCWNvbnN0IHUzMiAqbGF5b3V0X2lkID0KLQkJCW9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOwotCQlpZiAobGF5b3V0X2lkKSB7Ci0JCQlsYXlvdXQgPSAqbGF5b3V0X2lkOworCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAibGF5b3V0LWlkIiwgTlVMTCk7CisKKwkJaWYgKGlkKSB7CisJCQlsYXlvdXQgPSAqaWQ7CiAJCQlzbnByaW50ZihkZXYtPnNvdW5kLm1vZGFsaWFzLCAzMiwKIAkJCQkgInNvdW5kLWxheW91dC0lZCIsIGxheW91dCk7CiAJCQlvayA9IDE7CisJCX0gZWxzZSB7CisJCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImRldmljZS1pZCIsIE5VTEwpOworCQkJLyoKKwkJCSAqIFdlIHByb2JhYmx5IGNhbm5vdCBoYW5kbGUgYWxsIGRldmljZS1pZCBtYWNoaW5lcywKKwkJCSAqIHNvIHJlc3RyaWN0IHRvIHRob3NlIHdlIGRvIGhhbmRsZSBmb3Igbm93LgorCQkJICovCisJCQlpZiAoaWQgJiYgKCppZCA9PSAyMiB8fCAqaWQgPT0gMTQgfHwgKmlkID09IDM1KSkgeworCQkJCXNucHJpbnRmKGRldi0+c291bmQubW9kYWxpYXMsIDMyLAorCQkJCQkgImFvYS1kZXZpY2UtaWQtJWQiLCAqaWQpOworCQkJCW9rID0gMTsKKwkJCQlsYXlvdXQgPSAtMTsKKwkJCX0KIAkJfQogCX0KIAkvKiBmb3IgdGhlIHRpbWUgYmVpbmcsIHVudGlsIHdlIGNhbiBoYW5kbGUgbm9uLWxheW91dC1pZApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL0tjb25maWcgYi9zb3VuZC9hcm0vS2NvbmZpZwppbmRleCBmOGU2ZGU0Li44ODU2ODNhIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vS2NvbmZpZworKysgYi9zb3VuZC9hcm0vS2NvbmZpZwpAQCAtMTEsMTcgKzExLDYgQEAKIAogaWYgU05EX0FSTQogCi1jb25maWcgU05EX1NBMTFYWF9VREExMzQxCi0JdHJpc3RhdGUgIlNBMTF4eCBVREExMzQxVFMgZHJpdmVyIChpUGFxIEgzNjAwKSIKLQlkZXBlbmRzIG9uIEFSQ0hfU0ExMTAwICYmIEwzCi0Jc2VsZWN0IFNORF9QQ00KLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgQ29tcGFxIGlQYXEgSDN4MDAgaGFuZGhlbGQgY29tcHV0ZXIKLQkgIGFuZCB3YW50IHRvIHVzZSBpdHMgUGhpbGlwcyBVREEgMTM0MSBhdWRpbyBjaGlwLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzbmQtc2ExMXh4LXVkYTEzNDEuCi0KIGNvbmZpZyBTTkRfQVJNQUFDSQogCXRyaXN0YXRlICJBUk0gUHJpbWVDZWxsIFBMMDQxIEFDIExpbmsgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTV9BTUJBCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vTWFrZWZpbGUgYi9zb3VuZC9hcm0vTWFrZWZpbGUKaW5kZXggMjA1NGRlMS4uNWE1NDllZCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL01ha2VmaWxlCisrKyBiL3NvdW5kL2FybS9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIEFMU0EKICMKIAotb2JqLSQoQ09ORklHX1NORF9TQTExWFhfVURBMTM0MSkgKz0gc25kLXNhMTF4eC11ZGExMzQxLm8gCi1zbmQtc2ExMXh4LXVkYTEzNDEtb2JqcwkJOj0gc2ExMXh4LXVkYTEzNDEubwotCiBvYmotJChDT05GSUdfU05EX0FSTUFBQ0kpCSs9IHNuZC1hYWNpLm8KIHNuZC1hYWNpLW9ianMJCQk6PSBhYWNpLm8gZGV2ZG1hLm8KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggNzcyOTAxZS4uN2ZiZDY4ZiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC05OTUsMTAgKzk5NSwxMSBAQAogewogCXN0cnVjdCBhYWNpICphYWNpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKLQkJCSAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQkgICAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IGFhY2lfZnJlZV9jYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDM1YWZkMGMuLjJlNjM1NWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTMxLDYgKzMxLDcgQEAKIHN0YXRpYyB2b2xhdGlsZSBsb25nIGdzcl9iaXRzOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdjb25mX2NsazsKK3N0YXRpYyBpbnQgcmVzZXRfZ3BpbzsKIAogLyoKICAqIEJld2FyZSBQWEEyN3ggYnVnczoKQEAgLTQyLDYgKzQzLDQ1IEBACiAgKiAxIGppZmZ5IHRpbWVvdXQgaWYgaW50ZXJydXB0IG5ldmVyIGNvbWVzKS4KICAqLwogCitlbnVtIHsKKwlSRVNFVEdQSU9fRk9SQ0VfSElHSCwKKwlSRVNFVEdQSU9fRk9SQ0VfTE9XLAorCVJFU0VUR1BJT19OT1JNQUxfQUxURlVOQworfTsKKworLyoqCisgKiBzZXRfcmVzZXRncGlvX21vZGUgLSBjb21wdXRlcyBhbmQgc2V0cyB0aGUgQUM5N19SRVNFVCBncGlvIG1vZGUgb24gUFhBCisgKiBAbW9kZTogY2hvc2VuIGFjdGlvbgorICoKKyAqIEFzIHRoZSBQWEEyN3ggQ1BVcyBzdWZmZXIgZnJvbSBhIEFDOTcgYnVnLCBhIG1hbnVhbCBjb250cm9sIG9mIHRoZSByZXNldCBsaW5lCisgKiBtdXN0IGJlIGRvbmUgdG8gaW5zdXJlIHByb3BlciB3b3JrIG9mIEFDOTcgcmVzZXQgbGluZS4gIFRoaXMgZnVuY3Rpb24KKyAqIGNvbXB1dGVzIHRoZSBjb3JyZWN0IGdwaW9fbW9kZSBmb3IgZnVydGhlciB1c2UgYnkgcmVzZXQgZnVuY3Rpb25zLCBhbmQKKyAqIGFwcGxpZWQgdGhlIGNoYW5nZSB0aHJvdWdoIHB4YV9ncGlvX21vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9yZXNldGdwaW9fbW9kZShpbnQgcmVzZXRncGlvX2FjdGlvbikKK3sKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAocmVzZXRfZ3BpbykKKwkJc3dpdGNoIChyZXNldGdwaW9fYWN0aW9uKSB7CisJCWNhc2UgUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DOgorCQkJaWYgKHJlc2V0X2dwaW8gPT0gMTEzKQorCQkJCW1vZGUgPSAxMTMgfCBHUElPX09VVCB8IEdQSU9fREZMVF9MT1c7CisJCQlpZiAocmVzZXRfZ3BpbyA9PSA5NSkKKwkJCQltb2RlID0gOTUgfCBHUElPX0FMVF9GTl8xX09VVDsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9MT1c6CisJCQltb2RlID0gcmVzZXRfZ3BpbyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0xPVzsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9ISUdIOgorCQkJbW9kZSA9IHJlc2V0X2dwaW8gfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIOworCQkJYnJlYWs7CisJCX07CisKKwlpZiAobW9kZSkKKwkJcHhhX2dwaW9fbW9kZShtb2RlKTsKK30KKwogdW5zaWduZWQgc2hvcnQgcHhhMnh4X2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2YWwgPSAtMTsKQEAgLTEzNywxMCArMTc3LDEwIEBACiAKIAkvKiB3YXJtIHJlc2V0IGJyb2tlbiBvbiBCdWx2ZXJkZSwKIAkgICBzbyBtYW51YWxseSBrZWVwIEFDOTcgcmVzZXQgaGlnaCAqLwotCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19GT1JDRV9ISUdIKTsKIAl1ZGVsYXkoMTApOwogCUdDUiB8PSBHQ1JfV0FSTV9SU1Q7Ci0JcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX0FMVF9GTl8yX09VVCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJdWRlbGF5KDUwMCk7CiB9CiAKQEAgLTMwOCw4ICszNDgsOCBAQAogCQlweGFfZ3Bpb19tb2RlKEdQSU8yOV9TREFUQV9JTl9BQzk3X01EKTsKIAl9CiAJaWYgKGNwdV9pc19weGEyN3goKSkgewotCQkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwotCQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKKwkJLyogVXNlIEdQSU8gMTEzIG9yIDk1IGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KKwkJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJfQogCWNsa19lbmFibGUoYWM5N19jbGspOwogCXJldHVybiAwOwpAQCAtMzIwLDYgKzM2MCwyNyBAQAogaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19od19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBkYXRhKSB7CisJCXN3aXRjaCAocGRhdGEtPnJlc2V0X2dwaW8pIHsKKwkJY2FzZSA5NToKKwkJY2FzZSAxMTM6CisJCQlyZXNldF9ncGlvID0gcGRhdGEtPnJlc2V0X2dwaW87CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkludmFsaWQgcmVzZXQgR1BJTyAlZFxuIiwKKwkJCQlwZGF0YS0+cmVzZXRfZ3Bpbyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY3B1X2lzX3B4YTI3eCgpKQorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwl9CiAKIAlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwpAQCAtMzMwLDcgKzM5MSw3IEBACiAKIAlpZiAoY3B1X2lzX3B4YTI3eCgpKSB7CiAJCS8qIFVzZSBHUElPIDExMyBhcyBBQzk3IFJlc2V0IG9uIEJ1bHZlcmRlICovCi0JCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCQlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DKTsKIAkJYWM5N2NvbmZfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJBQzk3Q09ORkNMSyIpOwogCQlpZiAoSVNfRVJSKGFjOTdjb25mX2NsaykpIHsKIAkJCXJldCA9IFBUUl9FUlIoYWM5N2NvbmZfY2xrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggODVjZjU5MS4uN2VkMTAwYyAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTE3MywxMCArMTczLDkgQEAKIAlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5N190ZW1wbGF0ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gLUVOT01FTTsKLQljYXJkID0gc25kX2NhcmRfbmV3KFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAotCQkJICAgIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJICAgICAgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CiAKIAljYXJkLT5kZXYgPSAmZGV2LT5kZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYyBiL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGNkNTFkLi4wMDAwMDAwCi0tLSBhL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTgzICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciBQaGlsaXBzIFVEQTEzNDFUUyBvbiBDb21wYXEgaVBBUSBIMzYwMCBzb3VuZGNhcmQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4KLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKiAKLSAqIEhpc3Rvcnk6Ci0gKgotICogMjAwMi0wMy0xMyAgIFRvbWFzIEthc3BhcmVrICBpbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiBoMzYwMC11ZGExMzQxLmMgZnJvbSBPU1MKLSAqIDIwMDItMDMtMjAgICBUb21hcyBLYXNwYXJlayAgcGxheWJhY2sgb3ZlciBBTFNBIGlzIHdvcmtpbmcKLSAqIDIwMDItMDMtMjggICBUb21hcyBLYXNwYXJlayAgcGxheWJhY2sgb3ZlciBPU1MgZW11bGF0aW9uIGlzIHdvcmtpbmcKLSAqIDIwMDItMDMtMjkgICBUb21hcyBLYXNwYXJlayAgYmFzaWMgY2FwdHVyZSBpcyB3b3JraW5nIChuYXRpdmUgQUxTQSkKLSAqIDIwMDItMDMtMjkgICBUb21hcyBLYXNwYXJlayAgY2FwdHVyZSBpcyB3b3JraW5nIChPU1MgZW11bGF0aW9uKQotICogMjAwMi0wNC0wNCAgIFRvbWFzIEthc3BhcmVrICBiZXR0ZXIgcmF0ZXMgaGFuZGxpbmcgKGFsbG93IG5vbi1zdGFuZGFyZCByYXRlcykKLSAqIDIwMDMtMDItMTQgICBCcmlhbiBBdmVyeSAgICAgZml4ZWQgZnVsbCBkdXBsZXggbW9kZSwgb3RoZXIgdXBkYXRlcwotICogMjAwMy0wMi0yMCAgIFRvbWFzIEthc3BhcmVrICBtZXJnZWQgdXBkYXRlcyBieSBCcmlhbiAoZXhjZXB0IEhBTCkKLSAqIDIwMDMtMDQtMTkgICBKYXJvc2xhdiBLeXNlbGEgcmVjb2RlZCBETUEgc3R1ZmYgdG8gZm9sbG93IDIuNC4xOHJtazMtaGgyNCBrZXJuZWwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2luZyBzdXNwZW5kIGFuZCByZXN1bWUKLSAqIDIwMDMtMDQtMjggICBUb21hcyBLYXNwYXJlayAgdXBkYXRlZCB3b3JrIGJ5IEphcm9zbGF2IHRvIGNvbXBpbGUgaXQgdW5kZXIgMi41LnggYWdhaW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkIEhBTCBsYXllciAocGF0Y2hlcyBmcm9tIEJyaWFuKQotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogVG8gdW5kZXJzdGFuZCB3aGF0IEFsc2EgRHJpdmVycyBzaG91bGQgYmUgZG9pbmcgbG9vayBhdCAiV3JpdGluZyBhbiBBbHNhIERyaXZlciIgYnkgVGFrYXNoaSBJd2FpCi0qIGF2YWlsYWJsZSBpbiB0aGUgQWxzYSBkb2Mgc2VjdGlvbiBvbiB0aGUgd2Vic2l0ZQkJCi0qIAotKiBBIGZldyBub3RlcyB0byBtYWtlIHRoaW5ncyBjbGVhcmVyLiBUaGUgVURBMTM0MSBpcyBob29rZWQgdXAgdG8gU2VyaWFsIHBvcnQgNCBvbiB0aGUgU0ExMTAwLgotKiBXZSBhcmUgdXNpbmcgIFNTUCBtb2RlIHRvIHRhbGsgdG8gdGhlIFVEQTEzNDEuIFRoZSBVREExMzQxIGJpdCAmIHdvcmRzZWxlY3QgY2xvY2tzIGFyZSBnZW5lcmF0ZWQKLSogYnkgdGhpcyBVQVJULiBVbmZvcnR1bmF0ZWx5LCB0aGUgY2xvY2sgb25seSBydW5zIGlmIHRoZSB0cmFuc21pdCBidWZmZXIgaGFzIHNvbWV0aGluZyBpbiBpdC4KLSogU28sIGlmIHdlIGFyZSBqdXN0IHJlY29yZGluZywgd2UgZmVlZCB0aGUgdHJhbnNtaXQgRE1BIHN0cmVhbSBhIGJ1bmNoIG9mIDB4MDAwMCBzbyB0aGF0IHRoZQotKiB0cmFuc21pdCBidWZmZXIgaXMgZnVsbCBhbmQgdGhlIGNsb2NrIGtlZXBzIGdvaW5nLiBUaGUgemVyb2VzIGNvbWUgZnJvbSBGTFVTSF9CQVNFX1BIWVMgd2hpY2gKLSogaXMgYSBtZW0gbG9jIHRoYXQgYWx3YXlzIGRlY29kZXMgdG8gMCdzIHcvIG5vIG9mZiBjaGlwIGFjY2Vzcy4KLSoKLSogU29tZSBhbHNhIHRlcm1pbm9sb2d5OgotKglmcmFtZSA9PiBudW1fY2hhbm5lbHMgKiBzYW1wbGVfc2l6ZSAgZS5nIHN0ZXJlbyAxNiBiaXQgaXMgMiAqIDE2ID0gMzIgYnl0ZXMKLSoJcGVyaW9kID0+IHRoZSBsZWFzdCBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCBlLmcuIHdlIGhhdmUgYSAxMDI0IGJ5dGUKLSogICAgICAgICAgICAgYnVmZmVyIGFuZCA0IHBlcmlvZHMgaW4gdGhlIHJ1bnRpbWUgc3RydWN0dXJlIHRoaXMgbWVhbnMgd2UnbGwgZ2V0IGFuIGludCBldmVyeSAyNTYKLSogICAgICAgICAgICAgYnl0ZXMgb3IgNCB0aW1lcyBwZXIgYnVmZmVyLgotKiAgICAgICAgICAgICBBIG51bWJlciBvZiB0aGUgc2l6ZXMgYXJlIGluIGZyYW1lcyByYXRoZXIgdGhhbiBieXRlcywgdXNlIGZyYW1lc190b19ieXRlcyBhbmQKLSogICAgICAgICAgICAgYnl0ZXNfdG9fZnJhbWVzIHRvIGNvbnZlcnQuICBUaGUgZWFzaWVzdCB3YXkgdG8gdGVsbCB0aGUgdW5pdHMgaXMgdG8gbG9vayBhdCB0aGUKLSogICAgICAgICAgICAgdHlwZSBpLmUuIHJ1bnRpbWUtPiBidWZmZXJfc2l6ZSBpcyBpbiBmcmFtZXMgYW5kIGl0cyB0eXBlIGlzIHNuZF9wY21fdWZyYW1lc190Ci0qICAgICAgICAgICAgIAotKglOb3RlcyBhYm91dCB0aGUgcG9pbnRlciBmeG46Ci0qCVRoZSBwb2ludGVyIGZ4biBuZWVkcyB0byByZXR1cm4gdGhlIG9mZnNldCBpbnRvIHRoZSBkbWEgYnVmZmVyIGluIGZyYW1lcy4KLSoJSW50ZXJydXB0cyBtdXN0IGJlIGJsb2NrZWQgYmVmb3JlIGNhbGxpbmcgdGhlIGRtYV9nZXRfcG9zIGZ4biB0byBhdm9pZCByYWNlIHdpdGggaW50ZXJydXB0cy4KLSoKLSoJTm90ZXMgYWJvdXQgcGF1c2UvcmVzdW1lCi0qCUltcGxlbWVudGluZyB0aGlzIHdvdWxkIGJlIGNvbXBsaWNhdGVkIHNvIGl0J3Mgc2tpcHBlZC4gIFRoZSBwcm9ibGVtIGNhc2UgaXM6Ci0qCUEgZnVsbCBkdXBsZXggY29ubmVjdGlvbiBpcyBnb2luZywgdGhlbiBwbGF5IGlzIHBhdXNlZC4gQXQgdGhpcyBwb2ludCB5b3UgbmVlZCB0byBzdGFydCB4bWl0dGluZwotKgkwJ3MgdG8ga2VlcCB0aGUgcmVjb3JkIGFjdGl2ZSB3aGljaCBtZWFucyB5b3UgY2FudCBqdXN0IGZyZWV6ZSB0aGUgZG1hIGFuZCByZXN1bWUgaXQgbGF0ZXIgeW91J2QKLSoJbmVlZCB0bwlzYXZlIG9mZiB0aGUgZG1hIGluZm8sIGFuZCByZXN0b3JlIGl0IHByb3Blcmx5IG9uIGEgcmVzdW1lLiAgWWVhY2ghCi0qCi0qCU5vdGVzIGFib3V0IHRyYW5zZmVyIG1ldGhvZHM6Ci0qCVRoZSBhc3luYyB3cml0ZSBjYWxscyBmYWlsLiAgSSBwcm9iYWJseSBuZWVkIHRvIGltcGxlbWVudCBzb21ldGhpbmcgZWxzZSB0byBzdXBwb3J0IHRoZW0/Ci0qIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaWZkZWYgQ09ORklHX1BNCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaDM2MDAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9sMy9sMy5oPgotCi0jdW5kZWYgREVCVUdfTU9ERQotI3VuZGVmIERFQlVHX0ZVTkNUSU9OX05BTUVTCi0jaW5jbHVkZSA8c291bmQvdWRhMTM0MS5oPgotCi0vKgotICogRklYTUU6IElzIHRoaXMgZW5vdWdoIGFzIGF1dG9kZXRlY3Rpb24gb2YgMi40Llgtcm1rWS1oaFoga2VybmVscz8KLSAqIFdlIHVzZSBETUEgc3R1ZmYgZnJvbSAyLjQuMTgtcm1rMy1oaDI0IGhlcmUgdG8gYmUgYWJsZSB0byBjb21waWxlIHRoaXMKLSAqIG1vZHVsZSBmb3IgRmFtaWxpYXIgMC42LjEKLSAqLwotCi0vKiB7e3sgVHlwZSBkZWZpbml0aW9ucyAqLwotCi1NT0RVTEVfQVVUSE9SKCJUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQTExMDAvU0ExMTExICsgVURBMTM0MVRTIGRyaXZlciBmb3IgQUxTQSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VURBMTM0MSxpUEFRIEgzNjAwIFVEQTEzNDFUU319Iik7Ci0KLXN0YXRpYyBjaGFyICppZDsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwotCi1tb2R1bGVfcGFyYW0oaWQsIGNoYXJwLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIFNBMTEwMC9TQTExMTEgKyBVREExMzQxVFMgc291bmRjYXJkLiIpOwotCi1zdHJ1Y3QgYXVkaW9fc3RyZWFtIHsKLQljaGFyICppZDsJCS8qIGlkZW50aWZpY2F0aW9uIHN0cmluZyAqLwotCWludCBzdHJlYW1faWQ7CQkvKiBudW1lcmljIGlkZW50aWZpY2F0aW9uICovCQotCWRtYV9kZXZpY2VfdCBkbWFfZGV2OwkvKiBkZXZpY2UgaWRlbnRpZmllciBmb3IgRE1BICovCi0jaWZkZWYgSEhfVkVSU0lPTgotCWRtYWNoX3QgZG1hY2g7CQkvKiBkbWEgY2hhbm5lbCBpZGVudGlmaWNhdGlvbiAqLwotI2Vsc2UKLQlkbWFfcmVnc190ICpkbWFfcmVnczsJLyogcG9pbnRzIHRvIG91ciBETUEgcmVnaXN0ZXJzICovCi0jZW5kaWYKLQl1bnNpZ25lZCBpbnQgYWN0aXZlOjE7CS8qIHdlIGFyZSB1c2luZyB0aGlzIHN0cmVhbSBmb3IgdHJhbnNmZXIgbm93ICovCi0JaW50IHBlcmlvZDsJCS8qIGN1cnJlbnQgdHJhbnNmZXIgcGVyaW9kICovCi0JaW50IHBlcmlvZHM7CQkvKiBjdXJyZW50IGNvdW50IG9mIHBlcmlvZHMgcmVnaXN0ZXJkIGluIHRoZSBETUEgZW5naW5lICovCi0JaW50IHR4X3NwaW47CQkvKiBhcmUgd2UgcmVjb2RpbmcgLSBmbGFnIHVzZWQgdG8gZG8gRE1BIHRyYW5zLiBmb3Igc3luYyAqLwotCXVuc2lnbmVkIGludCBvbGRfb2Zmc2V0OwotCXNwaW5sb2NrX3QgZG1hX2xvY2s7CS8qIGZvciBsb2NraW5nIGluIERNQSBvcGVyYXRpb25zIChzZWUgZG1hLXNhMTEwMC5jIGluIHRoZSBrZXJuZWwpICovCi0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdHJlYW07Ci19OwotCi1zdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxOwotCXN0cnVjdCBzbmRfcGNtICpwY207Ci0JbG9uZyBzYW1wbGVyYXRlOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gc1syXTsJLyogcGxheWJhY2sgJiBjYXB0dXJlICovCi19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPSB7Ci0JODAwMCwgIDEwNjY2LCAxMDk4NSwgMTQ2NDcsCi0JMTYwMDAsIDIxOTcwLCAyMjA1MCwgMjQwMDAsCi0JMjk0MDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGh3X2NvbnN0cmFpbnRzX3JhdGVzID0gewotCS5jb3VudAk9IEFSUkFZX1NJWkUocmF0ZXMpLAotCS5saXN0CT0gcmF0ZXMsCi0JLm1hc2sJPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQotLyogfX19ICovCi0KLS8qIHt7eyBDbG9jayBhbmQgc2FtcGxlIHJhdGUgc3R1ZmYgKi8KLQotLyoKLSAqIFN0b3AtZ2FwIHNvbHV0aW9uIHVudGlsIHJlc3Qgb2YgaGgub3JnIEhBTCBzdHVmZiBpcyBtZXJnZWQuCi0gKi8KLSNkZWZpbmUgR1BJT19IMzYwMF9DTEtfU0VUMAkJR1BJT19HUElPICgxMikKLSNkZWZpbmUgR1BJT19IMzYwMF9DTEtfU0VUMQkJR1BJT19HUElPICgxMykKLQotI2lmZGVmIENPTkZJR19TQTExMDBfSDNYWFgKLSNkZWZpbmUJY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKHgpCWNscl9oMzYwMF9lZ3Bpbyh4KQotI2RlZmluZSBzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oeCkJc2V0X2gzNjAwX2VncGlvKHgpCi0jZWxzZQotI2Vycm9yIFRoaXMgZHJpdmVyIGNvdWxkIHNlcnZlIEgzeDAwIGhhbmRoZWxkcyBvbmx5IQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX3NldF9hdWRpb19jbG9jayhsb25nIHZhbCkKLXsKLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMjQwMDA6IGNhc2UgMzIwMDA6IGNhc2UgNDgwMDA6CS8qIDAwOiAxMi4yODggTUh6ICovCi0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQwIHwgR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDIyMDUwOiBjYXNlIDI5NDAwOiBjYXNlIDQ0MTAwOgkvKiAwMTogMTEuMjg5NiBNSHogKi8KLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDA7Ci0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQotCWNhc2UgODAwMDogY2FzZSAxMDY2NjogY2FzZSAxNjAwMDoJLyogMTA6IDQuMDk2IE1IeiAqLwotCQlHUENSID0gR1BJT19IMzYwMF9DTEtfU0VUMDsKLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAxMDk4NTogY2FzZSAxNDY0NzogY2FzZSAyMTk3MDoJLyogMTE6IDUuNjI0NSBNSHogKi8KLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDAgfCBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX3NldF9zYW1wbGVyYXRlKHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEsIGxvbmcgcmF0ZSkKLXsKLQlpbnQgY2xrX2RpdiA9IDA7Ci0JaW50IGNsaz0wOwotCi0JLyogV2UgZG9uJ3Qgd2FudCB0byBtZXNzIHdpdGggY2xvY2tzIHdoZW4gZnJhbWVzIGFyZSBpbiBmbGlnaHQgKi8KLQlTZXI0U1NDUjAgJj0gflNTQ1IwX1NTRTsKLQkvKiB3YWl0IGZvciBhbnkgZnJhbWUgdG8gY29tcGxldGUgKi8KLQl1ZGVsYXkoMTI1KTsKLQotCS8qCi0JICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNsb2NrIHNvdXJjZXM6Ci0JICogNC4wOTYgTUh6LCA1LjYyNDUgTUh6LCAxMS4yODk2IE1IeiwgMTIuMjg4IE1IegotCSAqIFRob3NlIGNhbiBiZSBkaXZpZGVkIGVpdGhlciBieSAyNTYsIDM4NCBvciA1MTIuCi0JICogVGhpcyBtYWtlcyB1cCAxMiBjb21iaW5hdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgc2FtcGxlcmF0ZXMuLi4KLQkgKi8KLQlpZiAocmF0ZSA+PSA0ODAwMCkKLQkJcmF0ZSA9IDQ4MDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gNDQxMDApCi0JCXJhdGUgPSA0NDEwMDsKLQllbHNlIGlmIChyYXRlID49IDMyMDAwKQotCQlyYXRlID0gMzIwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyOTQwMCkKLQkJcmF0ZSA9IDI5NDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjQwMDApCi0JCXJhdGUgPSAyNDAwMDsKLQllbHNlIGlmIChyYXRlID49IDIyMDUwKQotCQlyYXRlID0gMjIwNTA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyMTk3MCkKLQkJcmF0ZSA9IDIxOTcwOwotCWVsc2UgaWYgKHJhdGUgPj0gMTYwMDApCi0JCXJhdGUgPSAxNjAwMDsKLQllbHNlIGlmIChyYXRlID49IDE0NjQ3KQotCQlyYXRlID0gMTQ2NDc7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxMDk4NSkKLQkJcmF0ZSA9IDEwOTg1OwotCWVsc2UgaWYgKHJhdGUgPj0gMTA2NjYpCi0JCXJhdGUgPSAxMDY2NjsKLQllbHNlCi0JCXJhdGUgPSA4MDAwOwotCi0JLyogU2V0IHRoZSBleHRlcm5hbCBjbG9jayBnZW5lcmF0b3IgKi8KLQkKLQlzYTExeHhfdWRhMTM0MV9zZXRfYXVkaW9fY2xvY2socmF0ZSk7Ci0KLQkvKiBTZWxlY3QgdGhlIGNsb2NrIGRpdmlzb3IgKi8KLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxMDk4NToKLQljYXNlIDIyMDUwOgotCWNhc2UgMjQwMDA6Ci0JCWNsayA9IEY1MTI7Ci0JCWNsa19kaXYgPSBTU0NSMF9TZXJDbGtEaXYoMTYpOwotCQlicmVhazsKLQljYXNlIDE2MDAwOgotCWNhc2UgMjE5NzA6Ci0JY2FzZSA0NDEwMDoKLQljYXNlIDQ4MDAwOgotCQljbGsgPSBGMjU2OwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDgpOwotCQlicmVhazsKLQljYXNlIDEwNjY2OgotCWNhc2UgMTQ2NDc6Ci0JY2FzZSAyOTQwMDoKLQljYXNlIDMyMDAwOgotCQljbGsgPSBGMzg0OwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDEyKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogRk1UIHNldHRpbmcgc2hvdWxkIGJlIG1vdmVkIGF3YXkgd2hlbiBvdGhlciBGTVRzIGFyZSBhZGRlZCAoRklYTUUpICovCi0JbDNfY29tbWFuZChzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSwgQ01EX0ZPUk1BVCwgKHZvaWQgKilMU0IxNik7Ci0JCi0JbDNfY29tbWFuZChzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSwgQ01EX0ZTLCAodm9pZCAqKWNsayk7ICAgICAgICAKLQlTZXI0U1NDUjAgPSAoU2VyNFNTQ1IwICYgfjB4ZmYwMCkgKyBjbGtfZGl2ICsgU1NDUjBfU1NFOwotCXNhMTF4eF91ZGExMzQxLT5zYW1wbGVyYXRlID0gcmF0ZTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBIVyBpbml0IGFuZCBzaHV0ZG93biAqLwotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFNldHVwIERNQSBzdHVmZiAqLwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmlkID0gIlVEQTEzNDEgb3V0IjsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5zdHJlYW1faWQgPSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYV9kZXYgPSBETUFfU2VyNFNTUFdyOwotCi0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5pZCA9ICJVREExMzQxIGluIjsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN0cmVhbV9pZCA9IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRTsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYV9kZXYgPSBETUFfU2VyNFNTUFJkOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVURBMTM0MSBpbnRlcm5hbCBzdGF0ZSAqLwotICAgICAgIAotCS8qIFNldHVwIHRoZSB1YXJ0cyAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlHQUZSIHw9IChHUElPX1NTUF9DTEspOwotCUdQRFIgJj0gfihHUElPX1NTUF9DTEspOwotCVNlcjRTU0NSMCA9IDA7Ci0JU2VyNFNTQ1IwID0gU1NDUjBfRGF0YVNpemUoMTYpICsgU1NDUjBfVEkgKyBTU0NSMF9TZXJDbGtEaXYoOCk7Ci0JU2VyNFNTQ1IxID0gU1NDUjFfU0Nsa0lhY3RMICsgU1NDUjFfU0NsazFQICsgU1NDUjFfRXh0Q2xrOwotCVNlcjRTU0NSMCB8PSBTU0NSMF9TU0U7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogRW5hYmxlIHRoZSBhdWRpbyBwb3dlciAqLwotCi0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19BVURJT19PTik7Ci0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotIAotCS8qIFdhaXQgZm9yIHRoZSBVREExMzQxIHRvIHdha2UgdXAgKi8KLQltZGVsYXkoMSk7IC8vRklYTUUgLSB3YXMgcmVtb3ZlZCBieSBQZXJleCAtIFdoeT8KLQotCS8qIEluaXRpYWxpemUgdGhlIFVEQTEzNDEgaW50ZXJuYWwgc3RhdGUgKi8KLQlsM19vcGVuKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxKTsKLQkKLQkvKiBleHRlcm5hbCBjbG9jayBjb25maWd1cmF0aW9uIChhZnRlciBsM19vcGVuIC0gcmVncyBtdXN0IGJlIGluaXRpYWxpemVkICovCi0Jc2ExMXh4X3VkYTEzNDFfc2V0X3NhbXBsZXJhdGUoc2ExMXh4X3VkYTEzNDEsIHNhMTF4eF91ZGExMzQxLT5zYW1wbGVyYXRlKTsKLQotCS8qIFdhaXQgZm9yIHRoZSBVREExMzQxIHRvIHdha2UgdXAgKi8KLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQpOwotCW1kZWxheSgxKTsJCi0KLQkvKiBtYWtlIHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVscyB1bnN3YXBwZWQgKGZsaXAgdGhlIFdTIGxhdGNoKSAqLwotCVNlcjRTU0RSID0gMDsKLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLX0KLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfYXVkaW9fc2h1dGRvd24oc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSkKLXsKLQkvKiBtdXRlIG9uICovCi0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotCQotCS8qIGRpc2FibGUgdGhlIGF1ZGlvIHBvd2VyIGFuZCBhbGwgc2lnbmFscyBsZWFkaW5nIHRvIHRoZSBhdWRpbyBjaGlwICovCi0JbDNfY2xvc2Uoc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEpOwotCVNlcjRTU0NSMCA9IDA7Ci0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQotCS8qIHBvd2VyIG9mZiBhbmQgbXV0ZSBvZmYgKi8KLQkvKiBGSVhNRSAtIGlzIG11dGluZyBvZmYgbmVjZXNhcnk/Pz8gKi8KLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0FVRElPX09OKTsKLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgRE1BIHN0YWZmICovCi0KLS8qCi0gKiB0aGVzZSBhcmUgdGhlIGFkZHJlc3MgYW5kIHNpemVzIHVzZWQgdG8gZmlsbCB0aGUgeG1pdCBidWZmZXIKLSAqIHNvIHdlIGNhbiBnZXQgYSBjbG9jayBpbiByZWNvcmQgb25seSBtb2RlCi0gKi8KLSNkZWZpbmUgRk9SQ0VfQ0xPQ0tfQUREUgkJKGRtYV9hZGRyX3QpRkxVU0hfQkFTRV9QSFlTCi0jZGVmaW5lIEZPUkNFX0NMT0NLX1NJWkUJCTQwOTYgLy8gd2FzIDIwNDgKLQotLy8gRklYTUUgV2h5IHRoaXMgdmFsdWUgZXhhY3RseSAtIHdyb3RlIGNvbW1lbnQKLSNkZWZpbmUgRE1BX0JVRl9TSVpFCTgxNzYJLyogPD0gTUFYX0RNQV9TSVpFIGZyb20gYXNtL2FyY2gtc2ExMTAwL2RtYS5oICovCi0KLSNpZmRlZiBISF9WRVJTSU9OCi0KLXN0YXRpYyBpbnQgYXVkaW9fZG1hX3JlcXVlc3Qoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcywgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICosIGludCkpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNhMTEwMF9yZXF1ZXN0X2RtYSgmcy0+ZG1hY2gsIHMtPmlkLCBzLT5kbWFfZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIGF1ZGlvIGRtYSAweCV4XG4iLCBzLT5kbWFfZGV2KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0Jc2ExMTAwX2RtYV9zZXRfY2FsbGJhY2socy0+ZG1hY2gsIGNhbGxiYWNrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF1ZGlvX2RtYV9mcmVlKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc2ExMTAwX2ZyZWVfZG1hKHMtPmRtYWNoKTsKLQlzLT5kbWFjaCA9IC0xOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW50IGF1ZGlvX2RtYV9yZXF1ZXN0KHN0cnVjdCBhdWRpb19zdHJlYW0gKnMsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2ExMTAwX3JlcXVlc3RfZG1hKHMtPmRtYV9kZXYsIHMtPmlkLCBjYWxsYmFjaywgcywgJnMtPmRtYV9yZWdzKTsKLQlpZiAocmV0IDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBhdWRpbyBkbWEgMHgleFxuIiwgcy0+ZG1hX2Rldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2ZyZWUoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzYTExMDBfZnJlZV9kbWEocy0+ZG1hX3JlZ3MpOwotCXMtPmRtYV9yZWdzID0gMDsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyB1X2ludCBhdWRpb19nZXRfZG1hX3BvcyhzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcy0+c3RyZWFtOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWRtYV9hZGRyX3QgYWRkcjsKLQkKLQkvLyB0aGlzIG11c3QgYmUgY2FsbGVkIHcvIGludGVycnVwdHMgbG9ja2VkIG91dCBzZWUgZG1hLXNhMTEwMC5jIGluIHRoZSBrZXJuZWwKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsKLSNpZmRlZiBISF9WRVJTSU9OCQotCXNhMTEwMF9kbWFfZ2V0X2N1cnJlbnQocy0+ZG1hY2gsIE5VTEwsICZhZGRyKTsKLSNlbHNlCi0JYWRkciA9IHNhMTEwMF9nZXRfZG1hX3BvcygocyktPmRtYV9yZWdzKTsKLSNlbmRpZgotCW9mZnNldCA9IGFkZHIgLSBydW50aW1lLT5kbWFfYWRkcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwotCQotCW9mZnNldCA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLG9mZnNldCk7Ci0JaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJb2Zmc2V0ID0gMDsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLS8qCi0gKiB0aGlzIHN0b3BzIHRoZSBkbWEgYW5kIGNsZWFycyB0aGUgZG1hIHB0cnMKLSAqLwotc3RhdGljIHZvaWQgYXVkaW9fc3RvcF9kbWEoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7CQotCXMtPmFjdGl2ZSA9IDA7Ci0Jcy0+cGVyaW9kID0gMDsKLQkvKiB0aGlzIHN0b3BzIHRoZSBkbWEgY2hhbm5lbCBhbmQgY2xlYXJzIHRoZSBidWZmZXIgcHRycyAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCXNhMTEwMF9jbGVhcl9kbWEocy0+ZG1hX3JlZ3MpOwkKLSNlbmRpZgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF1ZGlvX3Byb2Nlc3NfZG1hKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzLT5zdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQl1bnNpZ25lZCBpbnQgZG1hX3NpemU7CQkKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQ7Ci0gICAgICAgICAgICAgICAgCi0JLyogd2UgYXJlIHJlcXVlc3RlZCB0byBwcm9jZXNzIHN5bmNocm9uaXphdGlvbiBETUEgdHJhbnNmZXIgKi8KLQlpZiAocy0+dHhfc3BpbikgewotCQlpZiAoc25kX0JVR19PTihzLT5zdHJlYW1faWQgIT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykpCi0JCQlyZXR1cm47Ci0JCS8qIGZpbGwgdGhlIHhtaXQgZG1hIGJ1ZmZlcnMgYW5kIHJldHVybiAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQkJc2ExMTAwX2RtYV9zZXRfc3BpbihzLT5kbWFjaCwgRk9SQ0VfQ0xPQ0tfQUREUiwgRk9SQ0VfQ0xPQ0tfU0laRSk7Ci0jZWxzZQotCQl3aGlsZSAoMSkgewotCQkJcmV0ID0gc2ExMTAwX3N0YXJ0X2RtYShzLT5kbWFfcmVncywgRk9SQ0VfQ0xPQ0tfQUREUiwgRk9SQ0VfQ0xPQ0tfU0laRSk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybjsgICAKLQkJfQotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBtdXN0IGJlIHNldCBoZXJlIC0gb25seSB2YWxpZCBmb3IgcnVubmluZyBzdHJlYW1zLCBub3QgZm9yIGZvcmNlZF9jbG9jayBkbWEgZmlsbHMgICovCi0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQl3aGlsZSAocy0+YWN0aXZlICYmIHMtPnBlcmlvZHMgPCBydW50aW1lLT5wZXJpb2RzKSB7Ci0JCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQkJaWYgKHMtPm9sZF9vZmZzZXQpIHsKLQkJCS8qIGEgbGl0dGxlIHRyaWNrLCB3ZSBuZWVkIHJlc3VtZSBmcm9tIG9sZCBwb3NpdGlvbiAqLwotCQkJb2Zmc2V0ID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHMtPm9sZF9vZmZzZXQgLSAxKTsKLQkJCXMtPm9sZF9vZmZzZXQgPSAwOwotCQkJcy0+cGVyaW9kcyA9IDA7Ci0JCQlzLT5wZXJpb2QgPSBvZmZzZXQgLyBkbWFfc2l6ZTsKLQkJCW9mZnNldCAlPSBkbWFfc2l6ZTsKLQkJCWRtYV9zaXplID0gZG1hX3NpemUgLSBvZmZzZXQ7Ci0JCQlpZiAoIWRtYV9zaXplKQotCQkJCWNvbnRpbnVlOwkJLyogc3BlY2lhbCBjYXNlICovCi0JCX0gZWxzZSB7Ci0JCQlvZmZzZXQgPSBkbWFfc2l6ZSAqIHMtPnBlcmlvZDsKLQkJCXNuZF9CVUdfT04oZG1hX3NpemUgPiBETUFfQlVGX1NJWkUpOwotCQl9Ci0jaWZkZWYgSEhfVkVSU0lPTgotCQlyZXQgPSBzYTExMDBfZG1hX3F1ZXVlX2J1ZmZlcihzLT5kbWFjaCwgcywgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGRtYV9zaXplKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybjsgLy9GSVhNRQotI2Vsc2UKLQkJcmV0ID0gc2ExMTAwX3N0YXJ0X2RtYSgocyktPmRtYV9yZWdzLCBydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgZG1hX3NpemUpOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImF1ZGlvX3Byb2Nlc3NfZG1hOiBjYW5ub3QgcXVldWUgRE1BIGJ1ZmZlciAoJWkpXG4iLCByZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQotCQlzLT5wZXJpb2QrKzsKLQkJcy0+cGVyaW9kICU9IHJ1bnRpbWUtPnBlcmlvZHM7Ci0JCXMtPnBlcmlvZHMrKzsKLQl9Ci19Ci0KLSNpZmRlZiBISF9WRVJTSU9OCi1zdGF0aWMgdm9pZCBhdWRpb19kbWFfY2FsbGJhY2sodm9pZCAqZGF0YSwgaW50IHNpemUpCi0jZWxzZQotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2NhbGxiYWNrKHZvaWQgKmRhdGEpCi0jZW5kaWYKLXsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gZGF0YTsKLSAgICAgICAgCi0JLyogCi0JICogSWYgd2UgYXJlIGdldHRpbmcgYSBjYWxsYmFjayBmb3IgYW4gYWN0aXZlIHN0cmVhbSB0aGVuIHdlIGluZm9ybQotCSAqIHRoZSBQQ00gbWlkZGxlIGxheWVyIHdlJ3ZlIGZpbmlzaGVkIGEgcGVyaW9kCi0JICovCi0gCWlmIChzLT5hY3RpdmUpCi0JCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQocy0+c3RyZWFtKTsKLQotCXNwaW5fbG9jaygmcy0+ZG1hX2xvY2spOwotCWlmICghcy0+dHhfc3BpbiAmJiBzLT5wZXJpb2RzID4gMCkKLQkJcy0+cGVyaW9kcy0tOwotCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCXNwaW5fdW5sb2NrKCZzLT5kbWFfbG9jayk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgUENNIHNldHRpbmcgKi8KLQotLyoge3t7IHRyaWdnZXIgJiB0aW1lciAqLwotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlpbnQgc3RyZWFtX2lkID0gc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW07Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqcyA9ICZjaGlwLT5zW3N0cmVhbV9pZF07Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqczEgPSAmY2hpcC0+c1tzdHJlYW1faWQgXiAxXTsKLQlpbnQgZXJyID0gMDsKLQotCS8qIG5vdGUgbG9jYWwgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBkaXNhYmxlZCBpbiB0aGUgbWlkbGV2ZWwgY29kZSAqLwotCXNwaW5fbG9jaygmcy0+ZG1hX2xvY2spOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJLyogbm93IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGEgcmVjb3JkIG9ubHkgc3RyZWFtIGhhcyBhIGNsb2NrICovCi0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQkvKiB3ZSBuZWVkIHRvIGZvcmNlIGZpbGwgdGhlIHhtaXQgRE1BIHdpdGggemVyb3MgKi8KLQkJCXMxLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMxKTsKLQkJfQotCQkvKiB0aGlzIGNhc2UgaXMgd2hlbiB5b3Ugd2VyZSByZWNvcmRpbmcgdGhlbiB5b3UgdHVybiBvbiBhCi0JCSAqIHBsYXliYWNrIHN0cmVhbSBzbyB3ZSBzdG9wIChhbHNvIGNsZWFycyBpdCkgdGhlIGRtYSBmaXJzdCwKLQkJICogY2xlYXIgdGhlIHN5bmMgZmxhZyBhbmQgdGhlbiB3ZSBsZXQgaXQgdHVybmVkIG9uCi0JCSAqLwkJCi0JCWVsc2UgewotIAkJCXMtPnR4X3NwaW4gPSAwOwotIAkJfQotCi0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc3RhcnR1cCAqLwotCQlzLT5hY3RpdmUgPSAxOwotCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHNodXRkb3duICovCi0JCWF1ZGlvX3N0b3BfZG1hKHMpOwotCQkKLQkJLyoKLQkJICogbm93IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGEgcmVjb3JkIG9ubHkgc3RyZWFtIGhhcyBhIGNsb2NrCi0JCSAqIHNvIGlmIHdlJ3JlIHN0b3BwaW5nIGEgcGxheWJhY2sgd2l0aCBhbiBhY3RpdmUgY2FwdHVyZQotCQkgKiB3ZSBuZWVkIHRvIHR1cm4gdGhlIDAgZmlsbCBkbWEgb24gZm9yIHRoZSB4bWl0IHNpZGUKLQkJICovCi0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJiBzMS0+YWN0aXZlKSB7Ci0JCQkvKiB3ZSBuZWVkIHRvIGZvcmNlIGZpbGwgdGhlIHhtaXQgRE1BIHdpdGggemVyb3MgKi8KLQkJCXMtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCX0KLQkJLyoKLQkJICogd2Uga2lsbGVkIGEgY2FwdHVyZSBvbmx5IHN0cmVhbSwgc28gd2Ugc2hvdWxkIGFsc28ga2lsbAotCQkgKiB0aGUgemVybyBmaWxsIHRyYW5zbWl0Ci0JCSAqLwotCQllbHNlIHsKLQkJCWlmIChzMS0+dHhfc3BpbikgewotCQkJCXMxLT50eF9zcGluID0gMDsKLQkJCQlhdWRpb19zdG9wX2RtYShzMSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQkJcy0+YWN0aXZlID0gMDsKLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9zdG9wKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQotCQlzLT5vbGRfb2Zmc2V0ID0gYXVkaW9fZ2V0X2RtYV9wb3MocykgKyAxOwotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkKLQkJcy0+cGVyaW9kcyA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCQlzLT5hY3RpdmUgPSAxOwotCQlzLT50eF9zcGluID0gMDsKLQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX3N0b3Aocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgotCQlzLT5hY3RpdmUgPSAwOwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJCWlmIChzMS0+YWN0aXZlKSB7Ci0JCQkJcy0+dHhfc3BpbiA9IDE7Ci0JCQkJcy0+b2xkX29mZnNldCA9IGF1ZGlvX2dldF9kbWFfcG9zKHMpICsgMTsKLSNpZmRlZiBISF9WRVJTSU9OCQkJCQotCQkJCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMtPmRtYWNoKTsKLSNlbHNlCi0JCQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCQkKLQkJCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChzMS0+dHhfc3BpbikgewotCQkJCXMxLT50eF9zcGluID0gMDsKLSNpZmRlZiBISF9WRVJTSU9OCQkJCQotCQkJCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMxLT5kbWFjaCk7Ci0jZWxzZQotCQkJCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQkJCi0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlzLT5hY3RpdmUgPSAxOwotCQlpZiAocy0+b2xkX29mZnNldCkgewotCQkJcy0+dHhfc3BpbiA9IDA7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9yZXN1bWUocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2soJnMtPmRtYV9sb2NrKTsJCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gJmNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dOwotICAgICAgICAKLQkvKiBzZXQgcmVxdWVzdGVkIHNhbXBsZXJhdGUgKi8KLQlzYTExeHhfdWRhMTM0MV9zZXRfc2FtcGxlcmF0ZShjaGlwLCBydW50aW1lLT5yYXRlKTsKLQotCS8qIHNldCByZXF1ZXN0ZCBmb3JtYXQgd2hlbiBhdmFpbGFibGUgKi8KLQkvKiBzZXQgRk1UIGhlcmUgISEhIEZJWE1FICovCi0KLQlzLT5wZXJpb2QgPSAwOwotCXMtPnBlcmlvZHMgPSAwOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlyZXR1cm4gYXVkaW9fZ2V0X2RtYV9wb3MoJmNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dKTsKLX0KLQotLyogfX19ICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZSA9Ci17Ci0JLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSksCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV9LTk9UKSwKLQkucmF0ZV9taW4JCT0gODAwMCwKLQkucmF0ZV9tYXgJCT0gNDgwMDAsCi0JLmNoYW5uZWxzX21pbgkJPSAyLAotCS5jaGFubmVsc19tYXgJCT0gMiwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDY0KjEwMjQsCi0JLnBlcmlvZF9ieXRlc19taW4JPSA2NCwKLQkucGVyaW9kX2J5dGVzX21heAk9IERNQV9CVUZfU0laRSwKLQkucGVyaW9kc19taW4JCT0gMiwKLQkucGVyaW9kc19tYXgJCT0gMjU1LAotCS5maWZvX3NpemUJCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2sgPQotewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUpLAotCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFX0tOT1QpLAotCS5yYXRlX21pbgkJPSA4MDAwLAotCS5yYXRlX21heAkJPSA0ODAwMCwKLQkuY2hhbm5lbHNfbWluCQk9IDIsCi0JLmNoYW5uZWxzX21heAkJPSAyLAotCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQqMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gRE1BX0JVRl9TSVpFLAotCS5wZXJpb2RzX21pbgkJPSAyLAotCS5wZXJpb2RzX21heAkJPSAyNTUsCi0JLmZpZm9fc2l6ZQkJPSAwLAotfTsKLQotc3RhdGljIGludCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCWludCBzdHJlYW1faWQgPSBzdWJzdHJlYW0tPnBzdHItPnN0cmVhbTsKLQlpbnQgZXJyOwotCi0JY2hpcC0+c1tzdHJlYW1faWRdLnN0cmVhbSA9IHN1YnN0cmVhbTsKLQotCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcnVudGltZS0+aHcgPSBzbmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2s7Ci0JZWxzZQotCQlydW50aW1lLT5odyA9IHNuZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlOwotCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgJmh3X2NvbnN0cmFpbnRzX3JhdGVzKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQljaGlwLT5zW3N1YnN0cmVhbS0+cHN0ci0+c3RyZWFtXS5zdHJlYW0gPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0vKiB7e3sgSFcgcGFyYW1zICYgZnJlZSAqLwotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQotewotICAgICAgICAKLQlyZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwotfQotCi0vKiB9fX0gKi8KLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4JCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX29wZW4sCi0JLmNsb3NlCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZSwKLQkuaW9jdGwJCQk9IHNuZF9wY21fbGliX2lvY3RsLAotCS5od19wYXJhbXMJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMsCi0JLmh3X2ZyZWUJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19mcmVlLAotCS5wcmVwYXJlCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wcmVwYXJlLAotCS50cmlnZ2VyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyLAotCS5wb2ludGVyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlX29wcyA9IHsKLQkub3BlbgkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfb3BlbiwKLQkuY2xvc2UJCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2Nsb3NlLAotCS5pb2N0bAkJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X3BhcmFtcywKLQkuaHdfZnJlZQkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X2ZyZWUsCi0JLnByZXBhcmUJCT0gc25kX3NhMTF4eF91ZGExMzQxX3ByZXBhcmUsCi0JLnRyaWdnZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3RyaWdnZXIsCi0JLnBvaW50ZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3BvaW50ZXIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wY20oc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSwgaW50IGRldmljZSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwotCWludCBlcnI7Ci0KLQlpZiAoKGVyciA9IHNuZF9wY21fbmV3KHNhMTF4eF91ZGExMzQxLT5jYXJkLCAiVURBMTM0MSBQQ00iLCBkZXZpY2UsIDEsIDEsICZwY20pKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQkvKgotCSAqIHRoaXMgc2V0cyB1cCBvdXIgaW5pdGlhbCBidWZmZXJzIGFuZCBzZXRzIHRoZSBkbWFfdHlwZSB0byBpc2EuCi0JICogaXNhIHdvcmtzIGJ1dCBJJ20gbm90IHN1cmUgd2h5IChvciBpZikgaXQncyB0aGUgcmlnaHQgY2hvaWNlCi0JICogdGhpcyBtYXkgYmUgdG9vIGxhcmdlLCB0cnlpbmcgaXQgZm9yIG5vdwotCSAqLwotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsIAotCQkJCQkgICAgICBzbmRfZG1hX2lzYV9kYXRhKCksCi0JCQkJCSAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOwotCi0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrX29wcyk7Ci0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZV9vcHMpOwotCXBjbS0+cHJpdmF0ZV9kYXRhID0gc2ExMXh4X3VkYTEzNDE7Ci0JcGNtLT5pbmZvX2ZsYWdzID0gMDsKLQlzdHJjcHkocGNtLT5uYW1lLCAiVURBMTM0MSBQQ00iKTsKLQotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX2luaXQoc2ExMXh4X3VkYTEzNDEpOwotCi0JLyogc2V0dXAgRE1BIGNvbnRyb2xsZXIgKi8KLQlhdWRpb19kbWFfcmVxdWVzdCgmc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10sIGF1ZGlvX2RtYV9jYWxsYmFjayk7Ci0JYXVkaW9fZG1hX3JlcXVlc3QoJnNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0sIGF1ZGlvX2RtYV9jYWxsYmFjayk7Ci0KLQlzYTExeHhfdWRhMTM0MS0+cGNtID0gcGNtOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgbW9kdWxlIGluaXQgJiBleGl0ICovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIsCi0JCQkJICAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cik7Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKLSNpZmRlZiBISF9WRVJTSU9OCi0Jc2ExMTAwX2RtYV9zbGVlcChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYWNoKTsKLQlzYTExMDBfZG1hX3NsZWVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFjaCk7Ci0jZWxzZQotCS8vRklYTUUKLSNlbmRpZgotCWwzX2NvbW1hbmQoY2hpcC0+dWRhMTM0MSwgQ01EX1NVU1BFTkQsIE5VTEwpOwotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX3NodXRkb3duKGNoaXApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCi17Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKTsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KGNoaXApOwotCWwzX2NvbW1hbmQoY2hpcC0+dWRhMTM0MSwgQ01EX1JFU1VNRSwgTlVMTCk7Ci0jaWZkZWYgSEhfVkVSU0lPTgkKLQlzYTExMDBfZG1hX3dha2V1cChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYWNoKTsKLQlzYTExMDBfZG1hX3dha2V1cChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hY2gpOwotI2Vsc2UKLQkvL0ZJWE1FCi0jZW5kaWYKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09NRklHX1BNICovCi0KLXZvaWQgc25kX3NhMTF4eF91ZGExMzQxX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCWF1ZGlvX2RtYV9mcmVlKCZjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdKTsKLQlhdWRpb19kbWFfZnJlZSgmY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc2ExMXh4X3VkYTEzNDFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcDsKLQotCS8qIHJlZ2lzdGVyIHRoZSBzb3VuZGNhcmQgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnNbMF0uZG1hX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5zWzFdLmRtYV9sb2NrKTsKLQotCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYTExeHhfdWRhMTM0MV9mcmVlOwotCWNoaXAtPmNhcmQgPSBjYXJkOwotCWNoaXAtPnNhbXBsZXJhdGUgPSBBVURJT19SQVRFX0RFRkFVTFQ7Ci0KLQkvLyBtaXhlcgotCWlmICgoZXJyID0gc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoY2FyZCwgJmNoaXAtPnVkYTEzNDEpKSkKLQkJZ290byBub2RldjsKLQotCS8vIFBDTQotCWlmICgoZXJyID0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGNtKGNoaXAsIDApKSA8IDApCi0JCWdvdG8gbm9kZXY7Ci0gICAgICAgIAotCXN0cmNweShjYXJkLT5kcml2ZXIsICJVREExMzQxIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkgzNjAwIFVEQTEzNDFUUyIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJDb21wYXEgaVBBUSBIMzYwMCB3aXRoIFBoaWxpcHMgVURBMTM0MVRTIik7Ci0gICAgICAgIAotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldnB0ci0+ZGV2KTsKLQotCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpID09IDApIHsKLQkJcHJpbnRrKCBLRVJOX0lORk8gImlQQVEgYXVkaW8gc3VwcG9ydCBpbml0aWFsaXplZFxuIiApOwotCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIGNhcmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0gICAgICAgIAotIG5vZGV2OgotCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgc2ExMXh4X3VkYTEzNDFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKLXsKLQlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgU0ExMVhYX1VEQTEzNDFfRFJJVkVSCSJzYTExeHhfdWRhMTM0MSIKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMXh4X3VkYTEzNDFfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzYTExeHhfdWRhMTM0MV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNhMTF4eF91ZGExMzQxX3JlbW92ZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfc2ExMXh4X3VkYTEzNDFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9yZXN1bWUsCi0jZW5kaWYKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBTQTExWFhfVURBMTM0MV9EUklWRVIsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNhMTF4eF91ZGExMzQxX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFtYWNoaW5lX2lzX2gzeHh4KCkpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTQTExWFhfVURBMTM0MV9EUklWRVIsIC0xLCBOVUxMLCAwKTsKLQlpZiAoIUlTX0VSUihkZXZpY2UpKSB7Ci0JCWlmIChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKQotCQkJcmV0dXJuIDA7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JfSBlbHNlCi0JCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXh4X3VkYTEzNDFfZHJpdmVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2ExMXh4X3VkYTEzNDFfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4eF91ZGExMzQxX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHNhMTF4eF91ZGExMzQxX2luaXQpOwotbW9kdWxlX2V4aXQoc2ExMXh4X3VkYTEzNDFfZXhpdCk7Ci0KLS8qIH19fSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9LY29uZmlnIGIvc291bmQvYXRtZWwvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzIyOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvS2NvbmZpZwpAQCAtMCwwICsxLDE5IEBACittZW51ICJBdG1lbCBkZXZpY2VzIChBVlIzMiBhbmQgQVQ5MSkiCisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTEKKworY29uZmlnIFNORF9BVE1FTF9BQkRBQworCXRyaXN0YXRlICJBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykgZHJpdmVyIgorCXNlbGVjdCBTTkRfUENNCisJZGVwZW5kcyBvbiBEV19ETUFDICYmIEFWUjMyCisJaGVscAorCSAgQUxTQSBzb3VuZCBkcml2ZXIgZm9yIHRoZSBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykuCisKK2NvbmZpZyBTTkRfQVRNRUxfQUM5N0MKKwl0cmlzdGF0ZSAiQXRtZWwgQUM5NyBDb250cm9sbGVyIChBQzk3QykgZHJpdmVyIgorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJZGVwZW5kcyBvbiBEV19ETUFDICYmIEFWUjMyCisJaGVscAorCSAgQUxTQSBzb3VuZCBkcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3IGNvbnRyb2xsZXIuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL01ha2VmaWxlIGIvc291bmQvYXRtZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5ZGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorc25kLWF0bWVsLWFiZGFjLW9ianMJCTo9IGFiZGFjLm8KK3NuZC1hdG1lbC1hYzk3Yy1vYmpzCQk6PSBhYzk3Yy5vCisKK29iai0kKENPTkZJR19TTkRfQVRNRUxfQUJEQUMpCSs9IHNuZC1hdG1lbC1hYmRhYy5vCitvYmotJChDT05GSUdfU05EX0FUTUVMX0FDOTdDKQkrPSBzbmQtYXRtZWwtYWM5N2MubwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWJkYWMuYyBiL3NvdW5kL2F0bWVsL2FiZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiM2M3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FiZGFjLmMKQEAgLTAsMCArMSw2MDIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBvbi1jaGlwIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWJkYWMuaD4KKworLyogREFDIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgREFDX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBEQUNfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIERBQ19JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgREFDX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBEQUNfSU5UX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIERBQ19JTlRfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgREFDX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxYworCisvKiBCaXRmaWVsZHMgaW4gQ1RSTCAqLworI2RlZmluZSBEQUNfU1dBUF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgREFDX1NXQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREFDX0VOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIERBQ19FTl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJpdGZpZWxkcyBpbiBJTlRfTUFTSy9JTlRfRU4vSU5UX0RJUy9JTlRfU1RBVFVTL0lOVF9DTFIgKi8KKyNkZWZpbmUgREFDX1VOREVSUlVOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIERBQ19VTkRFUlJVTl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERBQ19UWF9SRUFEWV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBEQUNfVFhfUkVBRFlfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCaXQgbWFuaXB1bGF0aW9uIG1hY3JvcyAqLworI2RlZmluZSBEQUNfQklUKG5hbWUpCQkJCQlcCisJKDEgPDwgREFDXyMjbmFtZSMjX09GRlNFVCkKKyNkZWZpbmUgREFDX0JGKG5hbWUsIHZhbHVlKQkJCQlcCisJKCgodmFsdWUpICYgKCgxIDw8IERBQ18jI25hbWUjI19TSVpFKSAtIDEpKQlcCisJIDw8IERBQ18jI25hbWUjI19PRkZTRVQpCisjZGVmaW5lIERBQ19CRkVYVChuYW1lLCB2YWx1ZSkJCQkJXAorCSgoKHZhbHVlKSA+PiBEQUNfIyNuYW1lIyNfT0ZGU0VUKQkJXAorCSAmICgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKSkKKyNkZWZpbmUgREFDX0JGSU5TKG5hbWUsIHZhbHVlLCBvbGQpCQkJXAorCSgoKG9sZCkgJiB+KCgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKQlcCisJCSAgICA8PCBEQUNfIyNuYW1lIyNfT0ZGU0VUKSkJCVwKKwkgfCBEQUNfQkYobmFtZSwgdmFsdWUpKQorCisvKiBSZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCisjZGVmaW5lIGRhY19yZWFkbChwb3J0LCByZWcpCQkJCVwKKwlfX3Jhd19yZWFkbCgocG9ydCktPnJlZ3MgKyBEQUNfIyNyZWcpCisjZGVmaW5lIGRhY193cml0ZWwocG9ydCwgcmVnLCB2YWx1ZSkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWx1ZSksIChwb3J0KS0+cmVncyArIERBQ18jI3JlZykKKworLyoKKyAqIEFCREFDIHN1cHBvcnRzIGEgbWF4aW11bSBvZiA2IGRpZmZlcmVudCByYXRlcyBmcm9tIGEgZ2VuZXJpYyBjbG9jay4gVGhlCisgKiBnZW5lcmljIGNsb2NrIGhhcyBhIHBvd2VyIG9mIHR3byBkaXZpZGVyLCB3aGljaCBnaXZlcyA2IHN0ZXBzIGZyb20gMTkyIGtIegorICogdG8gNTExMiBIei4KKyAqLworI2RlZmluZSBNQVhfTlVNX1JBVEVTCTYKKy8qIEFMU0Egc2VlbXMgdG8gdXNlIHJhdGVzIGJldHdlZW4gMTkyMDAwIEh6IGFuZCA1MTEyIEh6LiAqLworI2RlZmluZSBSQVRFX01BWAkxOTIwMDAKKyNkZWZpbmUgUkFURV9NSU4JNTExMgorCitlbnVtIHsKKwlETUFfUkVBRFkgPSAwLAorfTsKKworc3RydWN0IGF0bWVsX2FiZGFjX2RtYSB7CisJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJKmNkZXNjOworfTsKKworc3RydWN0IGF0bWVsX2FiZGFjIHsKKwlzdHJ1Y3QgY2xrCQkJCSpwY2xrOworCXN0cnVjdCBjbGsJCQkJKnNhbXBsZV9jbGs7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJCSpwZGV2OworCXN0cnVjdCBhdG1lbF9hYmRhY19kbWEJCQlkbWE7CisKKwlzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QJY29uc3RyYWludHNfcmF0ZXM7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCQkqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfY2FyZAkJCQkqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbQkJCQkqcGNtOworCisJdm9pZCBfX2lvbWVtCQkJCSpyZWdzOworCXVuc2lnbmVkIGxvbmcJCQkJZmxhZ3M7CisJdW5zaWduZWQgaW50CQkJCXJhdGVzW01BWF9OVU1fUkFURVNdOworCXVuc2lnbmVkIGludAkJCQlyYXRlc19udW07CisJaW50CQkJCQlpcnE7Cit9OworCisjZGVmaW5lIGdldF9kYWMoY2FyZCkgKChzdHJ1Y3QgYXRtZWxfYWJkYWMgKikoY2FyZCktPnByaXZhdGVfZGF0YSkKKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIERNQSBkcml2ZXIuICovCitzdGF0aWMgdm9pZCBhdG1lbF9hYmRhY19kbWFfcGVyaW9kX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoZGFjLT5zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3ByZXBhcmVfZG1hKHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjLAorCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuID0gZGFjLT5kbWEuY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJCSpjZGVzYzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nCQkJYnVmZmVyX2xlbiwgcGVyaW9kX2xlbjsKKworCS8qCisJICogV2UgZG9uJ3QgZG8gRE1BIG9uICJjb21wbGV4IiB0cmFuc2ZlcnMsIGkuZS4gd2l0aAorCSAqIG5vbi1oYWxmd29yZC1hbGlnbmVkIGJ1ZmZlcnMgb3IgbGVuZ3Rocy4KKwkgKi8KKwlpZiAocnVudGltZS0+ZG1hX2FkZHIgJiAxIHx8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICYgMSkgeworCQlkZXZfZGJnKCZkYWMtPnBkZXYtPmRldiwgInRvbyBjb21wbGV4IHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmZmVyX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk7CisJcGVyaW9kX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisKKwljZGVzYyA9IGR3X2RtYV9jeWNsaWNfcHJlcChjaGFuLCBydW50aW1lLT5kbWFfYWRkciwgYnVmZmVyX2xlbiwKKwkJCXBlcmlvZF9sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChJU19FUlIoY2Rlc2MpKSB7CisJCWRldl9kYmcoJmRhYy0+cGRldi0+ZGV2LCAiY291bGQgbm90IHByZXBhcmUgY3ljbGljIERNQVxuIik7CisJCXJldHVybiBQVFJfRVJSKGNkZXNjKTsKKwl9CisKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrID0gYXRtZWxfYWJkYWNfZG1hX3BlcmlvZF9kb25lOworCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2tfcGFyYW0gPSBkYWM7CisKKwlkYWMtPmRtYS5jZGVzYyA9IGNkZXNjOworCisJc2V0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYXRtZWxfYWJkYWNfaHcgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUkVTVU1FCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1BBVVNFKSwKKwkuZm9ybWF0cwkJPSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfQkUpLAorCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFX0tOT1QpLAorCS5yYXRlX21pbgkJPSBSQVRFX01JTiwKKwkucmF0ZV9tYXgJCT0gUkFURV9NQVgsCisJLmNoYW5uZWxzX21pbgkJPSAyLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogNDA5NiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDQwOTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSA0MDk2LAorCS5wZXJpb2RzX21pbgkJPSA0LAorCS5wZXJpb2RzX21heAkJPSA2NCwKK307CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRhYy0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCWF0bWVsX2FiZGFjX2h3LnJhdGVfbWF4ID0gZGFjLT5yYXRlc1tkYWMtPnJhdGVzX251bSAtIDFdOworCWF0bWVsX2FiZGFjX2h3LnJhdGVfbWluID0gZGFjLT5yYXRlc1swXTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3ID0gYXRtZWxfYWJkYWNfaHc7CisKKwlyZXR1cm4gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZkYWMtPmNvbnN0cmFpbnRzX3JhdGVzKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlkYWMtPnN1YnN0cmVhbSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJLyogc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzIHJldHVybnMgMSBpZiBidWZmZXIgaXMgY2hhbmdlZC4gKi8KKwlpZiAocmV0dmFsID09IDEpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoZGFjLT5kbWEuY2hhbik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGRhYy0+ZG1hLmNoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY2xrX3NldF9yYXRlKGRhYy0+c2FtcGxlX2NsaywgMjU2ICogc3Vic3RyZWFtLT5ydW50aW1lLT5yYXRlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKCF0ZXN0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJcmV0dmFsID0gYXRtZWxfYWJkYWNfcHJlcGFyZV9kbWEoZGFjLCBzdWJzdHJlYW0sIERNQV9UT19ERVZJQ0UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWwgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQljbGtfZW5hYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJCXJldHZhbCA9IGR3X2RtYV9jeWNsaWNfc3RhcnQoZGFjLT5kbWEuY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJZGFjX3dyaXRlbChkYWMsIENUUkwsIERBQ19CSVQoRU4pKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGRhYy0+ZG1hLmNoYW4pOworCQlkYWNfd3JpdGVsKGRhYywgREFUQSwgMCk7CisJCWRhY193cml0ZWwoZGFjLCBDVFJMLCAwKTsKKwkJY2xrX2Rpc2FibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWJkYWNfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMJKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9zcmNfYWRkcihkYWMtPmRtYS5jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIGlycXJldHVybl90IGFiZGFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBkZXZfaWQ7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGRhY19yZWFkbChkYWMsIElOVF9TVEFUVVMpOworCWlmIChzdGF0dXMgJiBEQUNfQklUKFVOREVSUlVOKSkgeworCQlkZXZfZXJyKCZkYWMtPnBkZXYtPmRldiwgInVuZGVycnVuIGRldGVjdGVkXG4iKTsKKwkJZGFjX3dyaXRlbChkYWMsIElOVF9DTFIsIERBQ19CSVQoVU5ERVJSVU4pKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZkYWMtPnBkZXYtPmRldiwgInNwdXJpb3VzIGludGVycnVwdCAoc3RhdHVzPTB4JXgpXG4iLAorCQkJc3RhdHVzKTsKKwkJZGFjX3dyaXRlbChkYWMsIElOVF9DTFIsIHN0YXR1cyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FiZGFjX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYmRhY19vcGVuLAorCS5jbG9zZQkJPSBhdG1lbF9hYmRhY19jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGF0bWVsX2FiZGFjX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FiZGFjX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhdG1lbF9hYmRhY19wcmVwYXJlLAorCS50cmlnZ2VyCT0gYXRtZWxfYWJkYWNfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FiZGFjX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYmRhY19wY21fbmV3KHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjKQoreworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGh3ID0gYXRtZWxfYWJkYWNfaHc7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9uZXcoZGFjLT5jYXJkLCBkYWMtPmNhcmQtPnNob3J0bmFtZSwKKwkJCWRhYy0+cGRldi0+aWQsIDEsIDAsICZwY20pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlzdHJjcHkocGNtLT5uYW1lLCBkYWMtPmNhcmQtPnNob3J0bmFtZSk7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBkYWM7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlkYWMtPnBjbSA9IHBjbTsKKworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZhdG1lbF9hYmRhY19vcHMpOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCSZkYWMtPnBkZXYtPmRldiwgaHcucGVyaW9kc19taW4gKiBody5wZXJpb2RfYnl0ZXNfbWluLAorCQkJaHcuYnVmZmVyX2J5dGVzX21heCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSBzbGF2ZTsKKworCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKKwkJY2hhbi0+cHJpdmF0ZSA9IGR3czsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGVzKHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjKQoreworCWxvbmcgbmV3X3JhdGUgPSBSQVRFX01BWDsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwlpbnQgaW5kZXggPSAwOworCisJLyogd2Ugc3RhcnQgYXQgMTkyIGtIeiBhbmQgd29yayBvdXIgd2F5IGRvd24gdG8gNTExMiBIeiAqLworCXdoaWxlIChuZXdfcmF0ZSA+PSBSQVRFX01JTiAmJiBpbmRleCA8IChNQVhfTlVNX1JBVEVTICsgMSkpIHsKKwkJbmV3X3JhdGUgPSBjbGtfcm91bmRfcmF0ZShkYWMtPnNhbXBsZV9jbGssIDI1NiAqIG5ld19yYXRlKTsKKwkJaWYgKG5ld19yYXRlIDwgMCkKKwkJCWJyZWFrOworCQkvKiBtYWtlIHN1cmUgd2UgYXJlIGJlbG93IHRoZSBBQkRBQyBjbG9jayAqLworCQlpZiAobmV3X3JhdGUgPD0gY2xrX2dldF9yYXRlKGRhYy0+cGNsaykpIHsKKwkJCWRhYy0+cmF0ZXNbaW5kZXhdID0gbmV3X3JhdGUgLyAyNTY7CisJCQlpbmRleCsrOworCQl9CisJCS8qIGRpdmlkZSBieSAyNTYgYW5kIHRoZW4gYnkgdHdvIHRvIGdldCBuZXh0IHJhdGUgKi8KKwkJbmV3X3JhdGUgLz0gMjU2ICogMjsKKwl9CisKKwlpZiAoaW5kZXgpIHsKKwkJaW50IGk7CisKKwkJLyogcmV2ZXJzZSBhcnJheSwgc21hbGxlc3QgZ28gZmlyc3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IChpbmRleCAvIDIpOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCB0bXAgPSBkYWMtPnJhdGVzW2luZGV4IC0gMSAtIGldOworCQkJZGFjLT5yYXRlc1tpbmRleCAtIDEgLSBpXSA9IGRhYy0+cmF0ZXNbaV07CisJCQlkYWMtPnJhdGVzW2ldID0gdG1wOworCQl9CisKKwkJZGFjLT5jb25zdHJhaW50c19yYXRlcy5jb3VudCA9IGluZGV4OworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLmxpc3QgPSBkYWMtPnJhdGVzOworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLm1hc2sgPSAwOworCQlkYWMtPnJhdGVzX251bSA9IGluZGV4OworCisJCXJldHZhbCA9IDA7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWJkYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQJCSpjYXJkOworCXN0cnVjdCBhdG1lbF9hYmRhYwkqZGFjOworCXN0cnVjdCByZXNvdXJjZQkJKnJlZ3M7CisJc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhCSpwZGF0YTsKKwlzdHJ1Y3QgY2xrCQkqcGNsazsKKwlzdHJ1Y3QgY2xrCQkqc2FtcGxlX2NsazsKKwlpbnQJCQlyZXR2YWw7CisJaW50CQkJaXJxOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IElSUSBudW1iZXJcbiIpOworCQlyZXR1cm4gaXJxOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGVyaXBoZXJhbCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHBjbGspOworCX0KKwlzYW1wbGVfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2FtcGxlX2NsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gc2FtcGxlIGNsb2NrXG4iKTsKKwkJcmV0dmFsID0gUFRSX0VSUihwY2xrKTsKKwkJZ290byBvdXRfcHV0X3BjbGs7CisJfQorCWNsa19lbmFibGUocGNsayk7CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQlUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYmRhYyksICZjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgc291bmQgY2FyZCBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9wdXRfc2FtcGxlX2NsazsKKwl9CisKKwlkYWMgPSBnZXRfZGFjKGNhcmQpOworCisJZGFjLT5pcnEgPSBpcnE7CisJZGFjLT5jYXJkID0gY2FyZDsKKwlkYWMtPnBjbGsgPSBwY2xrOworCWRhYy0+c2FtcGxlX2NsayA9IHNhbXBsZV9jbGs7CisJZGFjLT5wZGV2ID0gcGRldjsKKworCXJldHZhbCA9IHNldF9zYW1wbGVfcmF0ZXMoZGFjKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3Qgc2V0IHN1cHBvcnRlZCByYXRlc1xuIik7CisJCWdvdG8gb3V0X2ZyZWVfY2FyZDsKKwl9CisKKwlkYWMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCWlmICghZGFjLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZW1hcCByZWdpc3RlciBtZW1vcnlcbiIpOworCQlnb3RvIG91dF9mcmVlX2NhcmQ7CisJfQorCisJLyogbWFrZSBzdXJlIHRoZSBEQUMgaXMgc2lsZW50IGFuZCBkaXNhYmxlZCAqLworCWRhY193cml0ZWwoZGFjLCBEQVRBLCAwKTsKKwlkYWNfd3JpdGVsKGRhYywgQ1RSTCwgMCk7CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGFiZGFjX2ludGVycnVwdCwgMCwgImFiZGFjIiwgZGFjKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZXF1ZXN0IGlycVxuIik7CisJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKworCWlmIChwZGF0YS0+ZHdzLmRtYV9kZXYpIHsKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gJnBkYXRhLT5kd3M7CisJCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwkJZHdzLT50eF9yZWcgPSByZWdzLT5zdGFydCArIERBQ19EQVRBOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQlkYWMtPmRtYS5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisJfQorCWlmICghcGRhdGEtPmR3cy5kbWFfZGV2IHx8ICFkYWMtPmRtYS5jaGFuKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkRNQSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5zZXRfY2FyZF9kZXY7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkF0bWVsIEFCREFDIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF0bWVsIEFCREFDIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMiKTsKKworCXJldHZhbCA9IGF0bWVsX2FiZGFjX3BjbV9uZXcoZGFjKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBBQkRBQyBwY20gZGV2aWNlXG4iKTsKKwkJZ290byBvdXRfcmVsZWFzZV9kbWE7CisJfQorCisJcmV0dmFsID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgc291bmQgY2FyZFxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfZG1hOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkF0bWVsIEFCREFDIGF0IDB4JXAgdXNpbmcgJXNcbiIsCisJCQlkYWMtPnJlZ3MsIGRhYy0+ZG1hLmNoYW4tPmRldi0+ZGV2aWNlLmJ1c19pZCk7CisKKwlyZXR1cm4gcmV0dmFsOworCitvdXRfcmVsZWFzZV9kbWE6CisJZG1hX3JlbGVhc2VfY2hhbm5lbChkYWMtPmRtYS5jaGFuKTsKKwlkYWMtPmRtYS5jaGFuID0gTlVMTDsKK291dF91bnNldF9jYXJkX2RldjoKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCWZyZWVfaXJxKGlycSwgZGFjKTsKK291dF91bm1hcF9yZWdzOgorCWlvdW5tYXAoZGFjLT5yZWdzKTsKK291dF9mcmVlX2NhcmQ6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKK291dF9wdXRfc2FtcGxlX2NsazoKKwljbGtfcHV0KHNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKHBjbGspOworb3V0X3B1dF9wY2xrOgorCWNsa19wdXQocGNsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdG1lbF9hYmRhY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlkd19kbWFfY3ljbGljX3N0b3AoZGFjLT5kbWEuY2hhbik7CisJY2xrX2Rpc2FibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwljbGtfZGlzYWJsZShkYWMtPnBjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwljbGtfZW5hYmxlKGRhYy0+cGNsayk7CisJY2xrX2VuYWJsZShkYWMtPnNhbXBsZV9jbGspOworCWlmICh0ZXN0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdGFydChkYWMtPmRtYS5jaGFuKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYXRtZWxfYWJkYWNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF0bWVsX2FiZGFjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgYXRtZWxfYWJkYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBnZXRfZGFjKGNhcmQpOworCisJY2xrX3B1dChkYWMtPnNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKGRhYy0+cGNsayk7CisJY2xrX3B1dChkYWMtPnBjbGspOworCisJZG1hX3JlbGVhc2VfY2hhbm5lbChkYWMtPmRtYS5jaGFuKTsKKwlkYWMtPmRtYS5jaGFuID0gTlVMTDsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCWlvdW5tYXAoZGFjLT5yZWdzKTsKKwlmcmVlX2lycShkYWMtPmlycSwgZGFjKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfYWJkYWNfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXRtZWxfYWJkYWNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXRtZWxfYWJkYWMiLAorCX0sCisJLnN1c3BlbmQJPSBhdG1lbF9hYmRhY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRtZWxfYWJkYWNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRtZWxfYWJkYWNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWVsX2FiZGFjX2RyaXZlciwKKwkJCWF0bWVsX2FiZGFjX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGF0bWVsX2FiZGFjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfYWJkYWNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1lbF9hYmRhY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYXRtZWxfYWJkYWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMtQ2hyaXN0aWFuIEVndHZlZHQgPGhhbnMtY2hyaXN0aWFuLmVndHZlZHRAYXRtZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWM5N2MuYyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3MmUwMAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKQEAgLTAsMCArMSw5MzIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CisjaW5jbHVkZSA8c291bmQvbWVtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworI2luY2x1ZGUgImFjOTdjLmgiCisKK2VudW0geworCURNQV9UWF9SRUFEWSA9IDAsCisJRE1BX1JYX1JFQURZLAorCURNQV9UWF9DSEFOX1BSRVNFTlQsCisJRE1BX1JYX0NIQU5fUFJFU0VOVCwKK307CisKKy8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gb3BlbmVkIHZhcmlhYmxlICovCitzdGF0aWMgREVGSU5FX01VVEVYKG9wZW5lZF9tdXRleCk7CisKK3N0cnVjdCBhdG1lbF9hYzk3Y19kbWEgeworCXN0cnVjdCBkbWFfY2hhbgkJCSpyeF9jaGFuOworCXN0cnVjdCBkbWFfY2hhbgkJCSp0eF9jaGFuOworfTsKKworc3RydWN0IGF0bWVsX2FjOTdjIHsKKwlzdHJ1Y3QgY2xrCQkJKnBjbGs7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7CisJc3RydWN0IGF0bWVsX2FjOTdjX2RtYQkJZG1hOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpwbGF5YmFja19zdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpjYXB0dXJlX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2NhcmQJCQkqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbQkJCSpwY207CisJc3RydWN0IHNuZF9hYzk3CQkJKmFjOTc7CisJc3RydWN0IHNuZF9hYzk3X2J1cwkJKmFjOTdfYnVzOworCisJdTY0CQkJCWN1cl9mb3JtYXQ7CisJdW5zaWduZWQgaW50CQkJY3VyX3JhdGU7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworCS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gb3BlbmVkIHZhcmlhYmxlICovCisJc3BpbmxvY2tfdAkJCWxvY2s7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJaW50CQkJCW9wZW5lZDsKKwlpbnQJCQkJcmVzZXRfcGluOworfTsKKworI2RlZmluZSBnZXRfY2hpcChjYXJkKSAoKHN0cnVjdCBhdG1lbF9hYzk3YyAqKShjYXJkKS0+cHJpdmF0ZV9kYXRhKQorCisjZGVmaW5lIGFjOTdjX3dyaXRlbChjaGlwLCByZWcsIHZhbCkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAoY2hpcCktPnJlZ3MgKyBBQzk3Q18jI3JlZykKKyNkZWZpbmUgYWM5N2NfcmVhZGwoY2hpcCwgcmVnKQkJCQlcCisJX19yYXdfcmVhZGwoKGNoaXApLT5yZWdzICsgQUM5N0NfIyNyZWcpCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBETUEgZHJpdmVyLiAqLworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfZG1hX3BsYXliYWNrX3BlcmlvZF9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBhcmc7CisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y19kbWFfY2FwdHVyZV9wZXJpb2RfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCwKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJCSpjZGVzYzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nCQkJYnVmZmVyX2xlbiwgcGVyaW9kX2xlbjsKKworCS8qCisJICogV2UgZG9uJ3QgZG8gRE1BIG9uICJjb21wbGV4IiB0cmFuc2ZlcnMsIGkuZS4gd2l0aAorCSAqIG5vbi1oYWxmd29yZC1hbGlnbmVkIGJ1ZmZlcnMgb3IgbGVuZ3Rocy4KKwkgKi8KKwlpZiAocnVudGltZS0+ZG1hX2FkZHIgJiAxIHx8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICYgMSkgeworCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJ0b28gY29tcGxleCB0cmFuc2ZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJY2hhbiA9IGNoaXAtPmRtYS50eF9jaGFuOworCWVsc2UKKwkJY2hhbiA9IGNoaXAtPmRtYS5yeF9jaGFuOworCisJYnVmZmVyX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk7CisJcGVyaW9kX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisKKwljZGVzYyA9IGR3X2RtYV9jeWNsaWNfcHJlcChjaGFuLCBydW50aW1lLT5kbWFfYWRkciwgYnVmZmVyX2xlbiwKKwkJCXBlcmlvZF9sZW4sIGRpcmVjdGlvbik7CisJaWYgKElTX0VSUihjZGVzYykpIHsKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHByZXBhcmUgY3ljbGljIERNQVxuIik7CisJCXJldHVybiBQVFJfRVJSKGNkZXNjKTsKKwl9CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwkJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FjOTdjX2RtYV9wbGF5YmFja19wZXJpb2RfZG9uZTsKKwkJc2V0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FjOTdjX2RtYV9jYXB0dXJlX3BlcmlvZF9kb25lOworCQlzZXRfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKTsKKwl9CisKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrX3BhcmFtID0gY2hpcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYXRtZWxfYWM5N2NfaHcgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRQorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZvcm1hdHMJCT0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFCisJCQkJICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKSwKKwkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTKSwKKwkucmF0ZV9taW4JCT0gNDAwMCwKKwkucmF0ZV9tYXgJCT0gNDgwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogNDA5NiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDQwOTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSA0MDk2LAorCS5wZXJpb2RzX21pbgkJPSA0LAorCS5wZXJpb2RzX21heAkJPSA2NCwKK307CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkKys7CisJcnVudGltZS0+aHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpZiAoY2hpcC0+Y3VyX3JhdGUpIHsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSBjaGlwLT5jdXJfcmF0ZTsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBjaGlwLT5jdXJfcmF0ZTsKKwl9CisJaWYgKGNoaXAtPmN1cl9mb3JtYXQpCisJCXJ1bnRpbWUtPmh3LmZvcm1hdHMgPSAoMVVMTCA8PCBjaGlwLT5jdXJfZm9ybWF0KTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkKys7CisJcnVudGltZS0+aHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpZiAoY2hpcC0+Y3VyX3JhdGUpIHsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSBjaGlwLT5jdXJfcmF0ZTsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBjaGlwLT5jdXJfcmF0ZTsKKwl9CisJaWYgKGNoaXAtPmN1cl9mb3JtYXQpCisJCXJ1bnRpbWUtPmh3LmZvcm1hdHMgPSAoMVVMTCA8PCBjaGlwLT5jdXJfZm9ybWF0KTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQtLTsKKwlpZiAoIWNoaXAtPm9wZW5lZCkgeworCQljaGlwLT5jdXJfcmF0ZSA9IDA7CisJCWNoaXAtPmN1cl9mb3JtYXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwljaGlwLT5wbGF5YmFja19zdWJzdHJlYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZC0tOworCWlmICghY2hpcC0+b3BlbmVkKSB7CisJCWNoaXAtPmN1cl9yYXRlID0gMDsKKwkJY2hpcC0+Y3VyX2Zvcm1hdCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCS8qIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyByZXR1cm5zIDEgaWYgYnVmZmVyIGlzIGNoYW5nZWQuICovCisJaWYgKHJldHZhbCA9PSAxKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEudHhfY2hhbik7CisKKwkvKiBTZXQgcmVzdHJpY3Rpb25zIHRvIHBhcmFtcy4gKi8KKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPmN1cl9yYXRlID0gcGFyYW1zX3JhdGUoaHdfcGFyYW1zKTsKKwljaGlwLT5jdXJfZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChod19wYXJhbXMpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMgcmV0dXJucyAxIGlmIGJ1ZmZlciBpcyBjaGFuZ2VkLiAqLworCWlmIChyZXR2YWwgPT0gMSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCisJLyogU2V0IHJlc3RyaWN0aW9ucyB0byBwYXJhbXMuICovCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5jdXJfcmF0ZSA9IHBhcmFtc19yYXRlKGh3X3BhcmFtcyk7CisJY2hpcC0+Y3VyX2Zvcm1hdCA9IHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnR4X2NoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZyB3b3JkID0gMDsKKwlpbnQgcmV0dmFsOworCisJLyogYXNzaWduIGNoYW5uZWxzIHRvIEFDOTdDIGNoYW5uZWwgQSAqLworCXN3aXRjaCAocnVudGltZS0+Y2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSkKKwkJCXwgQUM5N0NfQ0hfQVNTSUdOKFBDTV9SSUdIVCwgQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRPRE86IHN1cHBvcnQgbW9yZSB0aGFuIHR3byBjaGFubmVscyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWFjOTdjX3dyaXRlbChjaGlwLCBPQ0EsIHdvcmQpOworCisJLyogY29uZmlndXJlIHNhbXBsZSBmb3JtYXQgYW5kIHNpemUgKi8KKwl3b3JkID0gQUM5N0NfQ01SX0RNQUVOIHwgQUM5N0NfQ01SX1NJWkVfMTY7CisKKwlzd2l0Y2ggKHJ1bnRpbWUtPmZvcm1hdCkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdvcmQgfD0gQUM5N0NfQ01SX0NFTV9MSVRUTEU7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXdvcmQgJj0gfihBQzk3Q19DTVJfQ0VNX0xJVFRMRSk7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCB3b3JkKTsKKworCS8qIHNldCB2YXJpYWJsZSByYXRlIGlmIG5lZWRlZCAqLworCWlmIChydW50aW1lLT5yYXRlICE9IDQ4MDAwKSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgfD0gQUM5N0NfTVJfVlJBOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0gZWxzZSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgJj0gfihBQzk3Q19NUl9WUkEpOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0KKworCXJldHZhbCA9IHNuZF9hYzk3X3NldF9yYXRlKGNoaXAtPmFjOTcsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFLAorCQkJcnVudGltZS0+cmF0ZSk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHNldCByYXRlICVkIEh6XG4iLAorCQkJCXJ1bnRpbWUtPnJhdGUpOworCisJaWYgKCF0ZXN0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCXJldHZhbCA9IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKGNoaXAsIHN1YnN0cmVhbSwKKwkJCQlETUFfVE9fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcgd29yZCA9IDA7CisJaW50IHJldHZhbDsKKworCS8qIGFzc2lnbiBjaGFubmVscyB0byBBQzk3QyBjaGFubmVsIEEgKi8KKwlzd2l0Y2ggKHJ1bnRpbWUtPmNoYW5uZWxzKSB7CisJY2FzZSAxOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpCisJCQl8IEFDOTdDX0NIX0FTU0lHTihQQ01fUklHSFQsIEEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPOiBzdXBwb3J0IG1vcmUgdGhhbiB0d28gY2hhbm5lbHMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlhYzk3Y193cml0ZWwoY2hpcCwgSUNBLCB3b3JkKTsKKworCS8qIGNvbmZpZ3VyZSBzYW1wbGUgZm9ybWF0IGFuZCBzaXplICovCisJd29yZCA9IEFDOTdDX0NNUl9ETUFFTiB8IEFDOTdDX0NNUl9TSVpFXzE2OworCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQl3b3JkIHw9IEFDOTdDX0NNUl9DRU1fTElUVExFOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQl3b3JkICY9IH4oQUM5N0NfQ01SX0NFTV9MSVRUTEUpOworCQlicmVhazsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgd29yZCk7CisKKwkvKiBzZXQgdmFyaWFibGUgcmF0ZSBpZiBuZWVkZWQgKi8KKwlpZiAocnVudGltZS0+cmF0ZSAhPSA0ODAwMCkgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkIHw9IEFDOTdDX01SX1ZSQTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9IGVsc2UgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkICY9IH4oQUM5N0NfTVJfVlJBKTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfYWM5N19zZXRfcmF0ZShjaGlwLT5hYzk3LCBBQzk3X1BDTV9MUl9BRENfUkFURSwKKwkJCXJ1bnRpbWUtPnJhdGUpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgcmF0ZSAlZCBIelxuIiwKKwkJCQlydW50aW1lLT5yYXRlKTsKKworCWlmICghdGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlyZXR2YWwgPSBhdG1lbF9hYzk3Y19wcmVwYXJlX2RtYShjaGlwLCBzdWJzdHJlYW0sCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2F0bWVsX2FjOTdjX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgY2FtcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNhbXIgPSBhYzk3Y19yZWFkbChjaGlwLCBDQU1SKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEudHhfY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJY2FtciB8PSBBQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS50eF9jaGFuKTsKKwkJaWYgKGNoaXAtPm9wZW5lZCA8PSAxKQorCQkJY2FtciAmPSB+QUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCBjYW1yKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CithdG1lbF9hYzk3Y19jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgY2FtcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNhbXIgPSBhYzk3Y19yZWFkbChjaGlwLCBDQU1SKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEucnhfY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJY2FtciB8PSBBQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwkJaWYgKGNoaXAtPm9wZW5lZCA8PSAxKQorCQkJY2FtciAmPSB+QUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCBjYW1yKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2F0bWVsX2FjOTdjX3BsYXliYWNrX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjCSpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QJZnJhbWVzOworCXVuc2lnbmVkIGxvbmcJCWJ5dGVzOworCisJYnl0ZXMgPSBkd19kbWFfZ2V0X3NyY19hZGRyKGNoaXAtPmRtYS50eF9jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWM5N2NfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YwkqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9kc3RfYWRkcihjaGlwLT5kbWEucnhfY2hhbik7CisJYnl0ZXMgLT0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgYnl0ZXMpOworCWlmIChmcmFtZXMgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWZyYW1lcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlyZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FjOTdfcGxheWJhY2tfb3BzID0geworCS5vcGVuCQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9hYzk3Y19wbGF5YmFja190cmlnZ2VyLAorCS5wb2ludGVyCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfcG9pbnRlciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfYWM5N19jYXB0dXJlX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfcG9pbnRlciwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FjOTdjX3BjbV9uZXcoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCXN0cnVjdCBzbmRfcGNtCQkqcGNtOworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlCWh3ID0gYXRtZWxfYWM5N2NfaHc7CisJaW50CQkJY2FwdHVyZSwgcGxheWJhY2ssIHJldHZhbDsKKworCWNhcHR1cmUgPSB0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCXBsYXliYWNrID0gdGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKworCXJldHZhbCA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSwKKwkJCWNoaXAtPnBkZXYtPmlkLCBwbGF5YmFjaywgY2FwdHVyZSwgJnBjbSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChjYXB0dXJlKQorCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkJJmF0bWVsX2FjOTdfY2FwdHVyZV9vcHMpOworCWlmIChwbGF5YmFjaykKKwkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKwkJCQkmYXRtZWxfYWM5N19wbGF5YmFja19vcHMpOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCSZjaGlwLT5wZGV2LT5kZXYsIGh3LnBlcmlvZHNfbWluICogaHcucGVyaW9kX2J5dGVzX21pbiwKKwkJCWh3LmJ1ZmZlcl9ieXRlc19tYXgpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlzdHJjcHkocGNtLT5uYW1lLCBjaGlwLT5jYXJkLT5zaG9ydG5hbWUpOworCWNoaXAtPnBjbSA9IHBjbTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX21peGVyX25ldyhzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXApCit7CisJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIHRlbXBsYXRlOworCW1lbXNldCgmdGVtcGxhdGUsIDAsIHNpemVvZih0ZW1wbGF0ZSkpOworCXRlbXBsYXRlLnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcmV0dXJuIHNuZF9hYzk3X21peGVyKGNoaXAtPmFjOTdfYnVzLCAmdGVtcGxhdGUsICZjaGlwLT5hYzk3KTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2Nfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChhYzk3KTsKKwl1bnNpZ25lZCBsb25nIHdvcmQ7CisJaW50IHRpbWVvdXQgPSA0MDsKKworCXdvcmQgPSAocmVnICYgMHg3ZikgPDwgMTYgfCB2YWw7CisKKwlkbyB7CisJCWlmIChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9UWFJEWSkgeworCQkJYWM5N2Nfd3JpdGVsKGNoaXAsIENPVEhSLCB3b3JkKTsKKwkJCXJldHVybjsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvZGVjIHdyaXRlIHRpbWVvdXRcbiIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYXRtZWxfYWM5N2NfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCXVuc2lnbmVkIHNob3J0IHJlZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChhYzk3KTsKKwl1bnNpZ25lZCBsb25nIHdvcmQ7CisJaW50IHRpbWVvdXQgPSA0MDsKKwlpbnQgd3JpdGUgPSAxMDsKKworCXdvcmQgPSAoMHg4MCB8IChyZWcgJiAweDdmKSkgPDwgMTY7CisKKwlpZiAoKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1JYUkRZKSAhPSAwKQorCQlhYzk3Y19yZWFkbChjaGlwLCBDT1JIUik7CisKK3JldHJ5X3dyaXRlOgorCXRpbWVvdXQgPSA0MDsKKworCWRvIHsKKwkJaWYgKChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9UWFJEWSkgIT0gMCkgeworCQkJYWM5N2Nfd3JpdGVsKGNoaXAsIENPVEhSLCB3b3JkKTsKKwkJCWdvdG8gcmVhZF9yZWc7CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCEtLXdyaXRlKQorCQlnb3RvIHRpbWVkX291dDsKKwlnb3RvIHJldHJ5X3dyaXRlOworCityZWFkX3JlZzoKKwlkbyB7CisJCWlmICgoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfUlhSRFkpICE9IDApIHsKKwkJCXVuc2lnbmVkIHNob3J0IHZhbCA9IGFjOTdjX3JlYWRsKGNoaXAsIENPUkhSKTsKKwkJCXJldHVybiB2YWw7CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCEtLXdyaXRlKQorCQlnb3RvIHRpbWVkX291dDsKKwlnb3RvIHJldHJ5X3dyaXRlOworCit0aW1lZF9vdXQ6CisJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY29kZWMgcmVhZCB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gMHhmZmZmOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSBzbGF2ZTsKKworCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKKwkJY2hhbi0+cHJpdmF0ZSA9IGR3czsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfcmVzZXQoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgQUM5N0NfTVJfV1JTVCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKSB7CisJCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPnJlc2V0X3BpbiwgMCk7CisJCS8qIEFDOTcgdjIuMiBzcGVjaWZpY2F0aW9ucyBzYXlzIG1pbmltdW0gMSB1cy4gKi8KKwkJdWRlbGF5KDEwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+cmVzZXRfcGluLCAxKTsKKwl9CisKKwl1ZGVsYXkoMSk7CisJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCBBQzk3Q19NUl9FTkEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYzk3Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZAkJCSpjYXJkOworCXN0cnVjdCBhdG1lbF9hYzk3YwkJKmNoaXA7CisJc3RydWN0IHJlc291cmNlCQkJKnJlZ3M7CisJc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEJKnBkYXRhOworCXN0cnVjdCBjbGsJCQkqcGNsazsKKwlzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMJb3BzID0geworCQkud3JpdGUJPSBhdG1lbF9hYzk3Y193cml0ZSwKKwkJLnJlYWQJPSBhdG1lbF9hYzk3Y19yZWFkLAorCX07CisJaW50CQkJCXJldHZhbDsKKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGVyaXBoZXJhbCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHBjbGspOworCX0KKwljbGtfZW5hYmxlKHBjbGspOworCisJcmV0dmFsID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYXRtZWxfYWM5N2MpLCAmY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHNvdW5kIGNhcmQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfc25kX2NhcmRfbmV3OworCX0KKworCWNoaXAgPSBnZXRfY2hpcChjYXJkKTsKKworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBdG1lbCBBQzk3QyIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBdG1lbCBBQzk3QyIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJBdG1lbCBBQzk3IGNvbnRyb2xsZXIiKTsKKworCWNoaXAtPmNhcmQgPSBjYXJkOworCWNoaXAtPnBjbGsgPSBwY2xrOworCWNoaXAtPnBkZXYgPSBwZGV2OworCWNoaXAtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCisJaWYgKCFjaGlwLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZW1hcCByZWdpc3RlciBtZW1vcnlcbiIpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5yZXNldF9waW4pKSB7CisJCWlmIChncGlvX3JlcXVlc3QocGRhdGEtPnJlc2V0X3BpbiwgInJlc2V0X3BpbiIpKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXNldCBwaW4gbm90IGF2YWlsYWJsZVxuIik7CisJCQljaGlwLT5yZXNldF9waW4gPSAtRU5PREVWOworCQl9IGVsc2UgeworCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5yZXNldF9waW4sIDEpOworCQkJY2hpcC0+cmVzZXRfcGluID0gcGRhdGEtPnJlc2V0X3BpbjsKKwkJfQorCX0KKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisKKwlyZXR2YWwgPSBzbmRfYWM5N19idXMoY2FyZCwgMCwgJm9wcywgY2hpcCwgJmNoaXAtPmFjOTdfYnVzKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBvbiBhYzk3IGJ1c1xuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCWF0bWVsX2FjOTdjX3Jlc2V0KGNoaXApOworCisJcmV0dmFsID0gYXRtZWxfYWM5N2NfbWl4ZXJfbmV3KGNoaXApOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIGFjOTcgbWl4ZXJcbiIpOworCQlnb3RvIGVycl9hYzk3X2J1czsKKwl9CisKKwlpZiAocGRhdGEtPnJ4X2R3cy5kbWFfZGV2KSB7CisJCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9ICZwZGF0YS0+cnhfZHdzOworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCWR3cy0+cnhfcmVnID0gcmVncy0+c3RhcnQgKyBBQzk3Q19DQVJIUiArIDI7CisKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJCWNoaXAtPmRtYS5yeF9jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisKKwkJZGV2X2luZm8oJmNoaXAtPnBkZXYtPmRldiwgInVzaW5nICVzIGZvciBETUEgUlhcbiIsCisJCQkJCWNoaXAtPmRtYS5yeF9jaGFuLT5kZXYtPmRldmljZS5idXNfaWQpOworCQlzZXRfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJfQorCisJaWYgKHBkYXRhLT50eF9kd3MuZG1hX2RldikgeworCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPnR4X2R3czsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkd3MtPnR4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgQUM5N0NfQ0FUSFIgKyAyOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQljaGlwLT5kbWEudHhfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBkd3MpOworCisJCWRldl9pbmZvKCZjaGlwLT5wZGV2LT5kZXYsICJ1c2luZyAlcyBmb3IgRE1BIFRYXG4iLAorCQkJCQljaGlwLT5kbWEudHhfY2hhbi0+ZGV2LT5kZXZpY2UuYnVzX2lkKTsKKwkJc2V0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCX0KKworCWlmICghdGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSAmJgorCQkJIXRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJcmV0dmFsID0gYXRtZWxfYWM5N2NfcGNtX25ldyhjaGlwKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBhYzk3IHBjbSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJcmV0dmFsID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgc291bmQgY2FyZFxuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkF0bWVsIEFDOTcgY29udHJvbGxlciBhdCAweCVwXG4iLAorCQkJY2hpcC0+cmVncyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2RtYToKKwlpZiAodGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsZWFyX2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNsZWFyX2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNoaXAtPmRtYS5yeF9jaGFuID0gTlVMTDsKKwljaGlwLT5kbWEudHhfY2hhbiA9IE5VTEw7CitlcnJfYWM5N19idXM6CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnJlc2V0X3BpbikpCisJCWdwaW9fZnJlZShjaGlwLT5yZXNldF9waW4pOworCisJaW91bm1hcChjaGlwLT5yZWdzKTsKK2Vycl9pb3JlbWFwOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitlcnJfc25kX2NhcmRfbmV3OgorCWNsa19kaXNhYmxlKHBjbGspOworCWNsa19wdXQocGNsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdG1lbF9hYzk3Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHRlc3RfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsa19kaXNhYmxlKGNoaXAtPnBjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJY2xrX2VuYWJsZShjaGlwLT5wY2xrKTsKKwlpZiAodGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS50eF9jaGFuKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYXRtZWxfYWM5N2Nfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF0bWVsX2FjOTdjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgYXRtZWxfYWM5N2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gZ2V0X2NoaXAoY2FyZCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKQorCQlncGlvX2ZyZWUoY2hpcC0+cmVzZXRfcGluKTsKKworCWNsa19kaXNhYmxlKGNoaXAtPnBjbGspOworCWNsa19wdXQoY2hpcC0+cGNsayk7CisJaW91bm1hcChjaGlwLT5yZWdzKTsKKworCWlmICh0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEudHhfY2hhbik7CisJY2xlYXJfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2xlYXJfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2hpcC0+ZG1hLnJ4X2NoYW4gPSBOVUxMOworCWNoaXAtPmRtYS50eF9jaGFuID0gTlVMTDsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2FjOTdjX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0bWVsX2FjOTdjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0bWVsX2FjOTdjIiwKKwl9LAorCS5zdXNwZW5kCT0gYXRtZWxfYWM5N2Nfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0bWVsX2FjOTdjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0bWVsX2FjOTdjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhdG1lbF9hYzk3Y19kcml2ZXIsCisJCQlhdG1lbF9hYzk3Y19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChhdG1lbF9hYzk3Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0bWVsX2FjOTdjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtZWxfYWM5N2NfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGF0bWVsX2FjOTdjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQXRtZWwgQUM5NyBjb250cm9sbGVyIik7CitNT0RVTEVfQVVUSE9SKCJIYW5zLUNocmlzdGlhbiBFZ3R2ZWR0IDxoYW5zLWNocmlzdGlhbi5lZ3R2ZWR0QGF0bWVsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmggYi9zb3VuZC9hdG1lbC9hYzk3Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2JkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9hYzk3Yy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEF0bWVsIEFDOTdDIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19TT1VORF9BVE1FTF9BQzk3Q19ICisjZGVmaW5lIF9fU09VTkRfQVRNRUxfQUM5N0NfSAorCisjZGVmaW5lIEFDOTdDX01SCQkweDA4CisjZGVmaW5lIEFDOTdDX0lDQQkJMHgxMAorI2RlZmluZSBBQzk3Q19PQ0EJCTB4MTQKKyNkZWZpbmUgQUM5N0NfQ0FSSFIJCTB4MjAKKyNkZWZpbmUgQUM5N0NfQ0FUSFIJCTB4MjQKKyNkZWZpbmUgQUM5N0NfQ0FTUgkJMHgyOAorI2RlZmluZSBBQzk3Q19DQU1SCQkweDJjCisjZGVmaW5lIEFDOTdDX0NCUkhSCQkweDMwCisjZGVmaW5lIEFDOTdDX0NCVEhSCQkweDM0CisjZGVmaW5lIEFDOTdDX0NCU1IJCTB4MzgKKyNkZWZpbmUgQUM5N0NfQ0JNUgkJMHgzYworI2RlZmluZSBBQzk3Q19DT1JIUgkJMHg0MAorI2RlZmluZSBBQzk3Q19DT1RIUgkJMHg0NAorI2RlZmluZSBBQzk3Q19DT1NSCQkweDQ4CisjZGVmaW5lIEFDOTdDX0NPTVIJCTB4NGMKKyNkZWZpbmUgQUM5N0NfU1IJCTB4NTAKKyNkZWZpbmUgQUM5N0NfSUVSCQkweDU0CisjZGVmaW5lIEFDOTdDX0lEUgkJMHg1OAorI2RlZmluZSBBQzk3Q19JTVIJCTB4NWMKKyNkZWZpbmUgQUM5N0NfVkVSU0lPTgkJMHhmYworCisjZGVmaW5lIEFDOTdDX0NBVFBSCQlQRENfVFBSCisjZGVmaW5lIEFDOTdDX0NBVENSCQlQRENfVENSCisjZGVmaW5lIEFDOTdDX0NBVE5QUgkJUERDX1ROUFIKKyNkZWZpbmUgQUM5N0NfQ0FUTkNSCQlQRENfVE5DUgorI2RlZmluZSBBQzk3Q19DQVJQUgkJUERDX1JQUgorI2RlZmluZSBBQzk3Q19DQVJDUgkJUERDX1JDUgorI2RlZmluZSBBQzk3Q19DQVJOUFIJCVBEQ19STlBSCisjZGVmaW5lIEFDOTdDX0NBUk5DUgkJUERDX1JOQ1IKKyNkZWZpbmUgQUM5N0NfUFRDUgkJUERDX1BUQ1IKKworI2RlZmluZSBBQzk3Q19NUl9FTkEJCSgxIDw8IDApCisjZGVmaW5lIEFDOTdDX01SX1dSU1QJCSgxIDw8IDEpCisjZGVmaW5lIEFDOTdDX01SX1ZSQQkJKDEgPDwgMikKKworI2RlZmluZSBBQzk3Q19DU1JfVFhSRFkJCSgxIDw8IDApCisjZGVmaW5lIEFDOTdDX0NTUl9VTlJVTgkJKDEgPDwgMikKKyNkZWZpbmUgQUM5N0NfQ1NSX1JYUkRZCQkoMSA8PCA0KQorI2RlZmluZSBBQzk3Q19DU1JfRU5EVFgJCSgxIDw8IDEwKQorI2RlZmluZSBBQzk3Q19DU1JfRU5EUlgJCSgxIDw8IDE0KQorCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzIwCSgwIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfU0laRV8xOAkoMSA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMTYJKDIgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzEwCSgzIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfQ0VNX0xJVFRMRQkoMSA8PCAxOCkKKyNkZWZpbmUgQUM5N0NfQ01SX0NFTV9CSUcJKDAgPDwgMTgpCisjZGVmaW5lIEFDOTdDX0NNUl9DRU5BCQkoMSA8PCAyMSkKKyNkZWZpbmUgQUM5N0NfQ01SX0RNQUVOCQkoMSA8PCAyMikKKworI2RlZmluZSBBQzk3Q19TUl9DQUVWVAkJKDEgPDwgMykKKworI2RlZmluZSBBQzk3Q19DSF9BU1NJR04oc2xvdCwgY2hhbm5lbCkJCQkJCVwKKwkoQUM5N0NfQ0hBTk5FTF8jI2NoYW5uZWwgPDwgKDMgKiAoQUM5N19TTE9UXyMjc2xvdCAtIDMpKSkKKyNkZWZpbmUgQUM5N0NfQ0hBTk5FTF9OT05FCTB4MAorI2RlZmluZSBBQzk3Q19DSEFOTkVMX0EJCTB4MQorI2RlZmluZSBBQzk3Q19DSEFOTkVMX0IJCTB4MgorCisjZW5kaWYgLyogX19TT1VORF9BVE1FTF9BQzk3Q19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDYzNmIzYjUuLjRiMjBmYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCkBAIC0xMzczLDEyICsxMzczLDkgQEAKIHN0YXRpYyBpbnQgc25kX2N0bF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc25kX2N0bF9maWxlICpjdGw7Ci0JaW50IGVycjsKKwogCWN0bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmN0bC0+ZmFzeW5jKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjdGwtPmZhc3luYyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2h3ZGVwLmMgYi9zb3VuZC9jb3JlL2h3ZGVwLmMKaW5kZXggMTk1Y2FmYy4uYTcwZWU3ZiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9od2RlcC5jCisrKyBiL3NvdW5kL2NvcmUvaHdkZXAuYwpAQCAtOTksOSArOTksNiBAQAogCWlmIChodyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghaHctPm9wcy5vcGVuKQotCQlyZXR1cm4gLUVOWElPOwotCiAJaWYgKCF0cnlfbW9kdWxlX2dldChody0+Y2FyZC0+bW9kdWxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTExMyw2ICsxMTAsMTAgQEAKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWJyZWFrOwogCQl9CisJCWlmICghaHctPm9wcy5vcGVuKSB7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KIAkJZXJyID0gaHctPm9wcy5vcGVuKGh3LCBmaWxlKTsKIAkJaWYgKGVyciA+PSAwKQogCQkJYnJlYWs7CkBAIC0xNTEsNyArMTUyLDcgQEAKIAogc3RhdGljIGludCBzbmRfaHdkZXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0JaW50IGVyciA9IC1FTlhJTzsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpodyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbW9kdWxlICptb2QgPSBody0+Y2FyZC0+bW9kdWxlOwogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IDBkNTUyMGMuLmZkNTZhZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC0xMjEsMzEgKzEyMSw0NCBAQAogI2VuZGlmCiAKIC8qKgotICogIHNuZF9jYXJkX25ldyAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUKKyAqICBzbmRfY2FyZF9jcmVhdGUgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBzb3VuZGNhcmQgc3RydWN0dXJlCiAgKiAgQGlkeDogY2FyZCBpbmRleCAoYWRkcmVzcykgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0KICAqICBAeGlkOiBjYXJkIGlkZW50aWZpY2F0aW9uIChBU0NJSSBzdHJpbmcpCiAgKiAgQG1vZHVsZTogdG9wIGxldmVsIG1vZHVsZSBmb3IgbG9ja2luZwogICogIEBleHRyYV9zaXplOiBhbGxvY2F0ZSB0aGlzIGV4dHJhIHNpemUgYWZ0ZXIgdGhlIG1haW4gc291bmRjYXJkIHN0cnVjdHVyZQorICogIEBjYXJkX3JldDogdGhlIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGNyZWF0ZWQgY2FyZCBpbnN0YW5jZQogICoKICAqICBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUuCiAgKgotICogIFJldHVybnMga21hbGxvY2F0ZWQgc25kX2NhcmQgc3RydWN0dXJlLiBDcmVhdGVzIHRoZSBBTFNBIGNvbnRyb2wgaW50ZXJmYWNlCi0gKiAgKHdoaWNoIGlzIGJsb2NrZWQgdW50aWwgc25kX2NhcmRfcmVnaXN0ZXIgZnVuY3Rpb24gaXMgY2FsbGVkKS4KKyAqICBUaGUgZnVuY3Rpb24gYWxsb2NhdGVzIHNuZF9jYXJkIGluc3RhbmNlIHZpYSBremFsbG9jIHdpdGggdGhlIGdpdmVuCisgKiAgc3BhY2UgZm9yIHRoZSBkcml2ZXIgdG8gdXNlIGZyZWVseS4gIFRoZSBhbGxvY2F0ZWQgc3RydWN0IGlzIHN0b3JlZAorICogIGluIHRoZSBnaXZlbiBjYXJkX3JldCBwb2ludGVyLgorICoKKyAqICBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLXN0cnVjdCBzbmRfY2FyZCAqc25kX2NhcmRfbmV3KGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCwKLQkJCSBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKQoraW50IHNuZF9jYXJkX2NyZWF0ZShpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplLAorCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZF9yZXQpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnIsIGlkeDI7CiAKKwlpZiAoc25kX0JVR19PTighY2FyZF9yZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY2FyZF9yZXQgPSBOVUxMOworCiAJaWYgKGV4dHJhX3NpemUgPCAwKQogCQlleHRyYV9zaXplID0gMDsKIAljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpICsgZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoeGlkKSB7Ci0JCWlmICghc25kX2luZm9fY2hlY2tfcmVzZXJ2ZWRfd29yZHMoeGlkKSkKKwkJaWYgKCFzbmRfaW5mb19jaGVja19yZXNlcnZlZF93b3Jkcyh4aWQpKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgImdpdmVuIGlkIHN0cmluZyAnJXMnIGlzIHJlc2VydmVkLlxuIiwgeGlkKTsKKwkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gX19lcnJvcjsKKwkJfQogCQlzdHJsY3B5KGNhcmQtPmlkLCB4aWQsIHNpemVvZihjYXJkLT5pZCkpOwogCX0KIAllcnIgPSAwOwpAQCAtMTk1LDYgKzIwOCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNvbnRyb2xzKTsKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y3RsX2ZpbGVzKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+ZmlsZXNfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmZpbGVzX2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPnNodXRkb3duX3NsZWVwKTsKICNpZmRlZiBDT05GSUdfUE0KIAltdXRleF9pbml0KCZjYXJkLT5wb3dlcl9sb2NrKTsKQEAgLTIwMiwyNiArMjE2LDI4IEBACiAjZW5kaWYKIAkvKiB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gdGhlIHVzZXIgc3BhY2UgdW50aWwgKi8KIAkvKiBzbmRfY2FyZHNfYml0bWFzayBhbmQgc25kX2NhcmRzIGFyZSBzZXQgd2l0aCBzbmRfY2FyZF9yZWdpc3RlciAqLwotCWlmICgoZXJyID0gc25kX2N0bF9jcmVhdGUoY2FyZCkpIDwgMCkgewotCQlzbmRfcHJpbnRkKCJ1bmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbCBtaW5vcnNcbiIpOworCWVyciA9IHNuZF9jdGxfY3JlYXRlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBjb250cm9sIG1pbm9yc1xuIik7CiAJCWdvdG8gX19lcnJvcjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfaW5mb19jYXJkX2NyZWF0ZShjYXJkKSkgPCAwKSB7Ci0JCXNuZF9wcmludGQoInVuYWJsZSB0byBjcmVhdGUgY2FyZCBpbmZvXG4iKTsKKwllcnIgPSBzbmRfaW5mb19jYXJkX2NyZWF0ZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gY3JlYXRlIGNhcmQgaW5mb1xuIik7CiAJCWdvdG8gX19lcnJvcl9jdGw7CiAJfQogCWlmIChleHRyYV9zaXplID4gMCkKIAkJY2FyZC0+cHJpdmF0ZV9kYXRhID0gKGNoYXIgKiljYXJkICsgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZCk7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRfcmV0ID0gY2FyZDsKKwlyZXR1cm4gMDsKIAogICAgICAgX19lcnJvcl9jdGw6CiAJc25kX2RldmljZV9mcmVlX2FsbChjYXJkLCBTTkRSVl9ERVZfQ01EX1BSRSk7CiAgICAgICBfX2Vycm9yOgogCWtmcmVlKGNhcmQpOwotICAgICAgCXJldHVybiBOVUxMOworICAJcmV0dXJuIGVycjsKIH0KLQotRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9uZXcpOworRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9jcmVhdGUpOwogCiAvKiByZXR1cm4gbm9uLXplcm8gaWYgYSBjYXJkIGlzIGFscmVhZHkgbG9ja2VkICovCiBpbnQgc25kX2NhcmRfbG9ja2VkKGludCBjYXJkKQpAQCAtMjU5LDYgKzI3NSw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShfZGYsICZzaHV0ZG93bl9maWxlcywgc2h1dGRvd25fbGlzdCkgewogCQlpZiAoX2RmLT5maWxlID09IGZpbGUpIHsKIAkJCWRmID0gX2RmOworCQkJbGlzdF9kZWxfaW5pdCgmZGYtPnNodXRkb3duX2xpc3QpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zNDcsOCArMzY0LDcgQEAKIAkvKiBwaGFzZSAyOiByZXBsYWNlIGZpbGUtPmZfb3Agd2l0aCBzcGVjaWFsIGR1bW15IG9wZXJhdGlvbnMgKi8KIAkKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwotCW1maWxlID0gY2FyZC0+ZmlsZXM7Ci0Jd2hpbGUgKG1maWxlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtZmlsZSwgJmNhcmQtPmZpbGVzX2xpc3QsIGxpc3QpIHsKIAkJZmlsZSA9IG1maWxlLT5maWxlOwogCiAJCS8qIGl0J3MgY3JpdGljYWwgcGFydCwgdXNlIGVuZGxlc3MgbG9vcCAqLwpAQCAtMzYxLDggKzM3Nyw2IEBACiAKIAkJbWZpbGUtPmZpbGUtPmZfb3AgPSAmc25kX3NodXRkb3duX2Zfb3BzOwogCQlmb3BzX2dldChtZmlsZS0+ZmlsZS0+Zl9vcCk7Ci0JCQotCQltZmlsZSA9IG1maWxlLT5uZXh0OwogCX0KIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CQogCkBAIC00NDIsNyArNDU2LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Ci0JaWYgKGNhcmQtPmZpbGVzID09IE5VTEwpCisJaWYgKGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKQogCQlmcmVlX25vdyA9IDE7CiAJZWxzZQogCQljYXJkLT5mcmVlX29uX2xhc3RfY2xvc2UgPSAxOwpAQCAtNDYyLDcgKzQ3Niw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiB3YWl0LCB1bnRpbCBhbGwgZGV2aWNlcyBhcmUgcmVhZHkgZm9yIHRoZSBmcmVlIG9wZXJhdGlvbiAqLwotCXdhaXRfZXZlbnQoY2FyZC0+c2h1dGRvd25fc2xlZXAsIGNhcmQtPmZpbGVzID09IE5VTEwpOworCXdhaXRfZXZlbnQoY2FyZC0+c2h1dGRvd25fc2xlZXAsIGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKTsKIAlzbmRfY2FyZF9kb19mcmVlKGNhcmQpOwogCXJldHVybiAwOwogfQpAQCAtODA5LDE1ICs4MjMsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWZpbGUtPmZpbGUgPSBmaWxlOwogCW1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCA9IE5VTEw7Ci0JbWZpbGUtPm5leHQgPSBOVUxMOwogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJaWYgKGNhcmQtPnNodXRkb3duKSB7CiAJCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAkJa2ZyZWUobWZpbGUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JbWZpbGUtPm5leHQgPSBjYXJkLT5maWxlczsKLQljYXJkLT5maWxlcyA9IG1maWxlOworCWxpc3RfYWRkKCZtZmlsZS0+bGlzdCwgJmNhcmQtPmZpbGVzX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgzOSwyOSArODUxLDIwIEBACiAgKi8KIGludCBzbmRfY2FyZF9maWxlX3JlbW92ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICptZmlsZSwgKnBmaWxlID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqbWZpbGUsICpmb3VuZCA9IE5VTEw7CiAJaW50IGxhc3RfY2xvc2UgPSAwOwogCiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKLQltZmlsZSA9IGNhcmQtPmZpbGVzOwotCXdoaWxlIChtZmlsZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkobWZpbGUsICZjYXJkLT5maWxlc19saXN0LCBsaXN0KSB7CiAJCWlmIChtZmlsZS0+ZmlsZSA9PSBmaWxlKSB7Ci0JCQlpZiAocGZpbGUpCi0JCQkJcGZpbGUtPm5leHQgPSBtZmlsZS0+bmV4dDsKLQkJCWVsc2UKLQkJCQljYXJkLT5maWxlcyA9IG1maWxlLT5uZXh0OworCQkJbGlzdF9kZWwoJm1maWxlLT5saXN0KTsKKwkJCWlmIChtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApCisJCQkJZm9wc19wdXQobWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKTsKKwkJCWZvdW5kID0gbWZpbGU7CiAJCQlicmVhazsKIAkJfQotCQlwZmlsZSA9IG1maWxlOwotCQltZmlsZSA9IG1maWxlLT5uZXh0OwogCX0KLQlpZiAobWZpbGUgJiYgbWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKSB7Ci0JCWZvcHNfcHV0KG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCk7Ci0JCXNwaW5fbG9jaygmc2h1dGRvd25fbG9jayk7Ci0JCWxpc3RfZGVsKCZtZmlsZS0+c2h1dGRvd25fbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZzaHV0ZG93bl9sb2NrKTsKLQl9Ci0JaWYgKGNhcmQtPmZpbGVzID09IE5VTEwpCisJaWYgKGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKQogCQlsYXN0X2Nsb3NlID0gMTsKIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJaWYgKGxhc3RfY2xvc2UpIHsKQEAgLTg2OSwxMSArODcyLDExIEBACiAJCWlmIChjYXJkLT5mcmVlX29uX2xhc3RfY2xvc2UpCiAJCQlzbmRfY2FyZF9kb19mcmVlKGNhcmQpOwogCX0KLQlpZiAoIW1maWxlKSB7CisJaWYgKCFmb3VuZCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBTFNBIGNhcmQgZmlsZSByZW1vdmUgcHJvYmxlbSAoJXApXG4iLCBmaWxlKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWtmcmVlKG1maWxlKTsKKwlrZnJlZShmb3VuZCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvamFjay5jIGIvc291bmQvY29yZS9qYWNrLmMKaW5kZXggZGQ0YTEyZC4uYzgyNTRjNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9qYWNrLmMKKysrIGIvc291bmQvY29yZS9qYWNrLmMKQEAgLTIzLDYgKzIzLDE0IEBACiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KIAorc3RhdGljIGludCBqYWNrX3R5cGVzW10gPSB7CisJU1dfSEVBRFBIT05FX0lOU0VSVCwKKwlTV19NSUNST1BIT05FX0lOU0VSVCwKKwlTV19MSU5FT1VUX0lOU0VSVCwKKwlTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCwKKwlTV19WSURFT09VVF9JTlNFUlQsCit9OworCiBzdGF0aWMgaW50IHNuZF9qYWNrX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9qYWNrICpqYWNrID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKQEAgLTQ3LDcgKzU1LDcgQEAKIAlpbnQgZXJyOwogCiAJc25wcmludGYoamFjay0+bmFtZSwgc2l6ZW9mKGphY2stPm5hbWUpLCAiJXMgJXMiLAotCQkgY2FyZC0+bG9uZ25hbWUsIGphY2stPmlkKTsKKwkJIGNhcmQtPnNob3J0bmFtZSwgamFjay0+aWQpOwogCWphY2stPmlucHV0X2Rldi0+bmFtZSA9IGphY2stPm5hbWU7CiAKIAkvKiBEZWZhdWx0IHRvIHRoZSBzb3VuZCBjYXJkIGRldmljZS4gKi8KQEAgLTc5LDYgKzg3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX2phY2sgKmphY2s7CiAJaW50IGVycjsKKwlpbnQgaTsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0gc25kX2phY2tfZGV2X2ZyZWUsCiAJCS5kZXZfcmVnaXN0ZXIgPSBzbmRfamFja19kZXZfcmVnaXN0ZXIsCkBAIC0xMDAsMTggKzEwOSwxMCBAQAogCiAJamFjay0+dHlwZSA9IHR5cGU7CiAKLQlpZiAodHlwZSAmIFNORF9KQUNLX0hFQURQSE9ORSkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0hFQURQSE9ORV9JTlNFUlQpOwotCWlmICh0eXBlICYgU05EX0pBQ0tfTElORU9VVCkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0xJTkVPVVRfSU5TRVJUKTsKLQlpZiAodHlwZSAmIFNORF9KQUNLX01JQ1JPUEhPTkUpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19NSUNST1BIT05FX0lOU0VSVCk7Ci0JaWYgKHR5cGUgJiBTTkRfSkFDS19NRUNIQU5JQ0FMKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGphY2tfdHlwZXMpOyBpKyspCisJCWlmICh0eXBlICYgKDEgPDwgaSkpCisJCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAorCQkJCQkgICAgIGphY2tfdHlwZXNbaV0pOwogCiAJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0pBQ0ssIGphY2ssICZvcHMpOwogCWlmIChlcnIgPCAwKQpAQCAtMTU0LDIxICsxNTUsMTcgQEAKICAqLwogdm9pZCBzbmRfamFja19yZXBvcnQoc3RydWN0IHNuZF9qYWNrICpqYWNrLCBpbnQgc3RhdHVzKQogeworCWludCBpOworCiAJaWYgKCFqYWNrKQogCQlyZXR1cm47CiAKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX0hFQURQSE9ORSkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0hFQURQSE9ORV9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX0hFQURQSE9ORSk7Ci0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19MSU5FT1VUKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfTElORU9VVF9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX0xJTkVPVVQpOwotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfTUlDUk9QSE9ORSkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX01JQ1JPUEhPTkVfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19NSUNST1BIT05FKTsKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX01FQ0hBTklDQUwpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfTUVDSEFOSUNBTCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoamFja190eXBlcyk7IGkrKykgeworCQlpbnQgdGVzdGJpdCA9IDEgPDwgaTsKKwkJaWYgKGphY2stPnR5cGUgJiB0ZXN0Yml0KQorCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIGphY2tfdHlwZXNbaV0sCisJCQkJCSAgICBzdGF0dXMgJiB0ZXN0Yml0KTsKKwl9CiAKIAlpbnB1dF9zeW5jKGphY2stPmlucHV0X2Rldik7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21pc2MuYyBiL3NvdW5kL2NvcmUvbWlzYy5jCmluZGV4IDM4NTI0ZjYuLmE5NzEwZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWlzYy5jCisrKyBiL3NvdW5kL2NvcmUvbWlzYy5jCkBAIC05NSwxMiArOTUsMTQgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCWZvciAocSA9IGxpc3Q7IHEtPnN1YnZlbmRvcjsgcSsrKQotCQlpZiAocS0+c3VidmVuZG9yID09IHBjaS0+c3Vic3lzdGVtX3ZlbmRvciAmJgotCQkgICAgKCFxLT5zdWJkZXZpY2UgfHwgcS0+c3ViZGV2aWNlID09IHBjaS0+c3Vic3lzdGVtX2RldmljZSkpCisJZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspIHsKKwkJaWYgKHEtPnN1YnZlbmRvciAhPSBwY2ktPnN1YnN5c3RlbV92ZW5kb3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFxLT5zdWJkZXZpY2UgfHwKKwkJICAgIChwY2ktPnN1YnN5c3RlbV9kZXZpY2UgJiBxLT5zdWJkZXZpY2VfbWFzaykgPT0gcS0+c3ViZGV2aWNlKQogCQkJcmV0dXJuIHE7CisJfQogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MKHNuZF9wY2lfcXVpcmtfbG9va3VwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwppbmRleCA0NjkwYjhiLi5lNTcwNjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwpAQCAtNjkyLDYgKzY5Miw5IEBACiAJCXNuZF9taXhlcl9vc3NfcHV0X3ZvbHVtZTFfdm9sKGZtaXhlciwgcHNsb3QsIHNsb3QtPm51bWlkW1NORFJWX01JWEVSX09TU19JVEVNX1BWT0xVTUVdLCBsZWZ0LCByaWdodCk7CiAJCWlmIChzbG90LT5wcmVzZW50ICYgU05EUlZfTUlYRVJfT1NTX1BSRVNFTlRfQ1ZPTFVNRSkKIAkJCXNuZF9taXhlcl9vc3NfcHV0X3ZvbHVtZTFfdm9sKGZtaXhlciwgcHNsb3QsIHNsb3QtPm51bWlkW1NORFJWX01JWEVSX09TU19JVEVNX0NWT0xVTUVdLCBsZWZ0LCByaWdodCk7CisJfSBlbHNlIGlmIChzbG90LT5wcmVzZW50ICYgU05EUlZfTUlYRVJfT1NTX1BSRVNFTlRfQ1ZPTFVNRSkgeworCQlzbmRfbWl4ZXJfb3NzX3B1dF92b2x1bWUxX3ZvbChmbWl4ZXIsIHBzbG90LAorCQkJc2xvdC0+bnVtaWRbU05EUlZfTUlYRVJfT1NTX0lURU1fQ1ZPTFVNRV0sIGxlZnQsIHJpZ2h0KTsKIAl9IGVsc2UgaWYgKHNsb3QtPnByZXNlbnQgJiBTTkRSVl9NSVhFUl9PU1NfUFJFU0VOVF9HVk9MVU1FKSB7CiAJCXNuZF9taXhlcl9vc3NfcHV0X3ZvbHVtZTFfdm9sKGZtaXhlciwgcHNsb3QsIHNsb3QtPm51bWlkW1NORFJWX01JWEVSX09TU19JVEVNX0dWT0xVTUVdLCBsZWZ0LCByaWdodCk7CiAJfSBlbHNlIGlmIChzbG90LT5wcmVzZW50ICYgU05EUlZfTUlYRVJfT1NTX1BSRVNFTlRfR0xPQkFMKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggMGExNzk4ZS4uZGRhMDAwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtMTE2MCw5ICsxMTYwLDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogd3JpdGU6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGU6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRlOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTE5Niw5ICsxMTk4LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZDogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQ6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMjQyLDkgKzEyNDYsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTI3OCw5ICsxMjg0LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZHY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZHY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWR2OiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWR2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fa2VybmVsX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RSQUlOLCBOVUxMKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTUzMyw3ICsxNTQxLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmd2FpdCk7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJzeW5jMTogc2l6ZSA9ICVsaVxuIiwgc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInN5bmMxOiBzaXplID0gJWxpXG4iLCBzaXplKTsKICNlbmRpZgogCXdoaWxlICgxKSB7CiAJCXJlc3VsdCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sIHJ1bnRpbWUtPm9zcy5idWZmZXIsIHNpemUsIDEpOwpAQCAtMTU5MCw3ICsxNTk4LDcgQEAKIAkJbXV0ZXhfbG9jaygmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKTsKIAkJaWYgKHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCA+IDApIHsKICNpZmRlZiBPU1NfREVCVUcKLQkJCXByaW50aygic3luYzogYnVmZmVyX3VzZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IGJ1ZmZlcl91c2VkXG4iKTsKICNlbmRpZgogCQkJc2l6ZSA9ICg4ICogKHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMgLSBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQpICsgNykgLyB3aWR0aDsKIAkJCXNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKGZvcm1hdCwKQEAgLTE2MDMsNyArMTYxMSw3IEBACiAJCQl9CiAJCX0gZWxzZSBpZiAocnVudGltZS0+b3NzLnBlcmlvZF9wdHIgPiAwKSB7CiAjaWZkZWYgT1NTX0RFQlVHCi0JCQlwcmludGsoInN5bmM6IHBlcmlvZF9wdHJcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IHBlcmlvZF9wdHJcbiIpOwogI2VuZGlmCiAJCQlzaXplID0gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcyAtIHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyOwogCQkJc25kX3BjbV9mb3JtYXRfc2V0X3NpbGVuY2UoZm9ybWF0LApAQCAtMTg5NSw3ICsxOTAzLDkgQEAKIAogc3RhdGljIGludCBzbmRfcGNtX29zc19ub25ibG9jayhzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk1Miw3ICsxOTYyLDcgQEAKIAlpbnQgZXJyLCBjbWQ7CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHRyaWdnZXIgPSAweCV4XG4iLCB0cmlnZ2VyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogdHJpZ2dlciA9IDB4JXhcbiIsIHRyaWdnZXIpOwogI2VuZGlmCiAJCiAJcHN1YnN0cmVhbSA9IHBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKQEAgLTIxNzAsNyArMjE4MCw5IEBACiAJfQogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBzcGFjZTogYnl0ZXMgPSAlaSwgZnJhZ21lbnRzID0gJWksIGZyYWdzdG90YWwgPSAlaSwgZnJhZ3NpemUgPSAlaVxuIiwgaW5mby5ieXRlcywgaW5mby5mcmFnbWVudHMsIGluZm8uZnJhZ3N0b3RhbCwgaW5mby5mcmFnc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHNwYWNlOiBieXRlcyA9ICVpLCBmcmFnbWVudHMgPSAlaSwgIgorCSAgICAgICAiZnJhZ3N0b3RhbCA9ICVpLCBmcmFnc2l6ZSA9ICVpXG4iLAorCSAgICAgICBpbmZvLmJ5dGVzLCBpbmZvLmZyYWdtZW50cywgaW5mby5mcmFnc3RvdGFsLCBpbmZvLmZyYWdzaXplKTsKICNlbmRpZgogCWlmIChjb3B5X3RvX3VzZXIoX2luZm8sICZpbmZvLCBzaXplb2YoaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0NzMsNyArMjQ4NSw3IEBACiAJaWYgKCgoY21kID4+IDgpICYgMHhmZikgIT0gJ1AnKQogCQlyZXR1cm4gLUVJTlZBTDsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IGlvY3RsID0gMHgleFxuIiwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogaW9jdGwgPSAweCV4XG4iLCBjbWQpOwogI2VuZGlmCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORENUTF9EU1BfUkVTRVQ6CkBAIC0yNjI3LDcgKzI2MzksOCBAQAogI2Vsc2UKIAl7CiAJCXNzaXplX3QgcmVzID0gc25kX3BjbV9vc3NfcmVhZDEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKLQkJcHJpbnRrKCJwY21fb3NzOiByZWFkICVsaSBieXRlcyAocmV0dXJuZWQgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkICVsaSBieXRlcyAiCisJCSAgICAgICAiKHJldHVybmVkICVsaSBieXRlcylcbiIsIChsb25nKWNvdW50LCAobG9uZylyZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMjY0Niw3ICsyNjU5LDggQEAKIAlzdWJzdHJlYW0tPmZfZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlyZXN1bHQgPSBzbmRfcGNtX29zc193cml0ZTEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwKKwkgICAgICAgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjcyMCw3ICsyNzM0LDcgQEAKIAlpbnQgZXJyOwogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIGJlZ2luXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBiZWdpblxuIik7CiAjZW5kaWYKIAlwY21fb3NzX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3dpdGNoICgoYXJlYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFKSkpIHsKQEAgLTI3NzAsNyArMjc4NCw4IEBACiAJcnVudGltZS0+c2lsZW5jZV90aHJlc2hvbGQgPSAwOwogCXJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA9IDA7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIG9rLCBieXRlcyA9IDB4JXhcbiIsIHJ1bnRpbWUtPm9zcy5tbWFwX2J5dGVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBvaywgYnl0ZXMgPSAweCV4XG4iLAorCSAgICAgICBydW50aW1lLT5vc3MubW1hcF9ieXRlcyk7CiAjZW5kaWYKIAkvKiBJbiBtbWFwIG1vZGUgd2UgbmV2ZXIgc3RvcCAqLwogCXJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkID0gcnVudGltZS0+Ym91bmRhcnk7CkBAIC0yODcyLDcgKzI4ODcsNyBAQAogCQkJc2V0dXAgPSBrbWFsbG9jKHNpemVvZigqc2V0dXApLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghIHNldHVwKSB7CiAJCQkJYnVmZmVyLT5lcnJvciA9IC1FTk9NRU07Ci0JCQkJbXV0ZXhfbG9jaygmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKKwkJCQltdXRleF91bmxvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJaWYgKHBzdHItPm9zcy5zZXR1cF9saXN0ID09IE5VTEwpCkBAIC0yODg2LDcgKzI5MDEsNyBAQAogCQkJaWYgKCEgdGVtcGxhdGUudGFza19uYW1lKSB7CiAJCQkJa2ZyZWUoc2V0dXApOwogCQkJCWJ1ZmZlci0+ZXJyb3IgPSAtRU5PTUVNOwotCQkJCW11dGV4X2xvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZwc3RyLT5vc3Muc2V0dXBfbXV0ZXgpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCmluZGV4IGNhMmY0YzMuLmI5YWZhYjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaAorKysgYi9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKQEAgLTE3Niw5ICsxNzYsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBQTFVHSU5fREVCVUcKLSNkZWZpbmUgcGRwcmludGYoIGZtdCwgYXJncy4uLiApIHByaW50ayggInBsdWdpbjogIiBmbXQsICMjYXJncykKKyNkZWZpbmUgcGRwcmludGYoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAicGx1Z2luOiAiIGZtdCwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgcGRwcmludGYoIGZtdCwgYXJncy4uLiApIAorI2RlZmluZSBwZHByaW50ZihmbXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9fUENNX1BMVUdJTl9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9yYXRlLmMgYi9zb3VuZC9jb3JlL29zcy9yYXRlLmMKaW5kZXggYTQ2NjQ0My4uMmZhOTI5OSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcmF0ZS5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3JhdGUuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCXdoaWxlIChkc3RfZnJhbWVzMSA+IDApIHsKIAkJCVMxID0gUzI7CiAJCQlpZiAoc3JjX2ZyYW1lczEtLSA+IDApIHsKLQkJCQlTMSA9ICpzcmM7CisJCQkJUzIgPSAqc3JjOwogCQkJCXNyYyArPSBzcmNfc3RlcDsKIAkJCX0KIAkJCWlmIChwb3MgJiB+Ul9NQVNLKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbS5jIGIvc291bmQvY29yZS9wY20uYwppbmRleCAxOTJhNDMzLi4xNDU5MzFhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtLmMKQEAgLTY2Nyw3ICs2NjcsNiBAQAogCQlzcGluX2xvY2tfaW5pdCgmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLmxvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLnN1YnN0cmVhbXMpOwogCQlsaXN0X2FkZF90YWlsKCZzdWJzdHJlYW0tPmxpbmtfbGlzdCwgJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5zdWJzdHJlYW1zKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnN1YnN0cmVhbS0+dGltZXJfbG9jayk7CiAJCWF0b21pY19zZXQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCwgMCk7CiAJCXByZXYgPSBzdWJzdHJlYW07CiAJfQpAQCAtNjkyLDcgKzY5MSw3IEBACiAgKgogICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1pbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKK2ludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZGV2aWNlLAogCQlpbnQgcGxheWJhY2tfY291bnQsIGludCBjYXB0dXJlX2NvdW50LAogCSAgICAgICAgc3RydWN0IHNuZF9wY20gKiogcnBjbSkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggOTIxNjkxMC4uZmJiMmUzOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTEyNSwyMyArMTI1LDMyIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSkJKChzdWJzdHJlYW0pLT5wc3RyLT54cnVuX2RlYnVnKQorI2Vsc2UKKyNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pCTAKKyNlbmRpZgorCisjZGVmaW5lIGR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pIGRvIHsJXAorCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pID4gMSkJXAorCQkJZHVtcF9zdGFjaygpOwkJXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyB2b2lkIHhydW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtKSkgewogCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgIlhSVU46IHBjbUMlZEQlZCVjXG4iLAogCQkJICAgc3Vic3RyZWFtLT5wY20tPmNhcmQtPm51bWJlciwKIAkJCSAgIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsCiAJCQkgICBzdWJzdHJlYW0tPnN0cmVhbSA/ICdjJyA6ICdwJyk7Ci0JCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJZHVtcF9zdGFjaygpOworCQlkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKTsKIAl9Ci0jZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKIHsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7CiAKQEAgLTE1MCwxNyArMTU5LDIxIEBACiAJcG9zID0gc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKTsKIAlpZiAocG9zID09IFNORFJWX1BDTV9QT1NfWFJVTikKIAkJcmV0dXJuIHBvczsgLyogWFJVTiAqLwotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAocG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgICJCVUc6IHN0cmVhbSA9ICVpLCBwb3MgPSAweCVseCwgYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIHBvcywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQkJc25kX3ByaW50ZChLRVJOX0VSUiAgIkJVRzogc3RyZWFtID0gJWksIHBvcyA9IDB4JWx4LCAiCisJCQkJICAgImJ1ZmZlciBzaXplID0gMHglbHgsIHBlcmlvZCBzaXplID0gMHglbHhcbiIsCisJCQkJICAgc3Vic3RyZWFtLT5zdHJlYW0sIHBvcywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCQkJICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQl9CisJCXBvcyA9IDA7CiAJfQotI2VuZGlmCiAJcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKIAlyZXR1cm4gcG9zOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQogewogCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwogCkBAIC0xODIsMTEgKzE5NSwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorI2RlZmluZSBod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCBmbXQsIGFyZ3MuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSkpIHsJCQkJXAorCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgewkJCVwKKwkJCQlzbmRfcHJpbnRkKCJQQ006ICIgZm10LCAjI2FyZ3MpOwlcCisJCQl9CQkJCQkJXAorCQkJZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSk7CQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9pbnRlcnJ1cHQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgbmV3X2h3X3B0ciwgaHdfcHRyX2ludGVycnVwdDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0LCBod19iYXNlOwogCXNuZF9wY21fc2ZyYW1lc190IGRlbHRhOwogCiAJcG9zID0gc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdWJzdHJlYW0sIHJ1bnRpbWUpOwpAQCAtMTk0LDM2ICsyMTcsNTMgQEAKIAkJeHJ1bihzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQlpZiAocnVudGltZS0+cGVyaW9kX3NpemUgPT0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCWdvdG8gX19uZXh0X2J1ZjsKLQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJaHdfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOworCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwogCWh3X3B0cl9pbnRlcnJ1cHQgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0ICsgcnVudGltZS0+cGVyaW9kX3NpemU7Ci0KLQlkZWx0YSA9IGh3X3B0cl9pbnRlcnJ1cHQgLSBuZXdfaHdfcHRyOwotCWlmIChkZWx0YSA+IDApIHsKLQkJaWYgKChzbmRfcGNtX3VmcmFtZXNfdClkZWx0YSA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMikgewotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQkJCWlmIChydW50aW1lLT5wZXJpb2RzID4gMSAmJiBzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKLQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzFdIChzdHJlYW0gPSAlaSwgZGVsdGE6IC0lbGQsIG1heCBqaXR0ZXIgPSAlbGQpOiB3cm9uZyBpbnRlcnJ1cHQgYWNrbm93bGVkZ2U/XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpIGRlbHRhLCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpOwotCQkJCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJCQlkdW1wX3N0YWNrKCk7Ci0JCQl9Ci0jZW5kaWYKLQkJCXJldHVybiAwOwotCQl9Ci0JICAgICAgX19uZXh0X2J1ZjoKLQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChydW50aW1lLT5od19wdHJfYmFzZSA9PSBydW50aW1lLT5ib3VuZGFyeSkKLQkJCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gMDsKLQkJbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7CisJaWYgKGh3X3B0cl9pbnRlcnJ1cHQgPj0gcnVudGltZS0+Ym91bmRhcnkpIHsKKwkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKKwkJaWYgKGh3X2Jhc2UgPCBydW50aW1lLT5ib3VuZGFyeSAvIDIpCisJCQkvKiBod19iYXNlIHdhcyBhbHJlYWR5IGxhcHBlZDsgcmVjYWxjIGRlbHRhICovCisJCQlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OwogCX0KLQorCWlmIChkZWx0YSA8IDApIHsKKwkJZGVsdGEgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChkZWx0YSA8IDApIHsKKwkJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIAorCQkJCSAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSAiCisJCQkJICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgaW50cl9wdHI9JWxkKVxuIiwKKwkJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylwb3MsCisJCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKKwkJCS8qIHJlYmFzZSB0byBpbnRlcnJ1cHQgcG9zaXRpb24gKi8KKwkJCWh3X2Jhc2UgPSBuZXdfaHdfcHRyID0gaHdfcHRyX2ludGVycnVwdDsKKwkJCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KKwkJCWh3X2Jhc2UgLT0gaHdfYmFzZSAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQkJZGVsdGEgPSAwOworCQl9IGVsc2UgeworCQkJaHdfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQkJCWh3X2Jhc2UgPSAwOworCQkJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CisJCX0KKwl9CisJaWYgKGRlbHRhID4gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKKwkJCSAgICAgIkxvc3QgaW50ZXJydXB0cz8gIgorCQkJICAgICAiKHN0cmVhbT0laSwgZGVsdGE9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAorCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpZGVsdGEsCisJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOworCQkvKiByZWJhc2UgaHdfcHRyX2ludGVycnVwdCAqLworCQlod19wdHJfaW50ZXJydXB0ID0KKwkJCW5ld19od19wdHIgLSBuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemU7CisJfQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmCiAJICAgIHJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA+IDApCiAJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIG5ld19od19wdHIpOwogCisJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSBod19iYXNlOwogCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gbmV3X2h3X3B0cjsKLQlydW50aW1lLT5od19wdHJfaW50ZXJydXB0ID0gbmV3X2h3X3B0ciAtIG5ld19od19wdHIgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwlydW50aW1lLT5od19wdHJfaW50ZXJydXB0ID0gaHdfcHRyX2ludGVycnVwdDsKIAogCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOwogfQpAQCAtMjMzLDcgKzI3Myw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7Ci0Jc25kX3BjbV91ZnJhbWVzX3Qgb2xkX2h3X3B0ciwgbmV3X2h3X3B0cjsKKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19iYXNlOwogCXNuZF9wY21fc2ZyYW1lc190IGRlbHRhOwogCiAJb2xkX2h3X3B0ciA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyOwpAQCAtMjQyLDI5ICsyODIsMzggQEAKIAkJeHJ1bihzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJaHdfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOworCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwogCi0JZGVsdGEgPSBvbGRfaHdfcHRyIC0gbmV3X2h3X3B0cjsKLQlpZiAoZGVsdGEgPiAwKSB7Ci0JCWlmICgoc25kX3BjbV91ZnJhbWVzX3QpZGVsdGEgPCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpIHsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0JCQlpZiAocnVudGltZS0+cGVyaW9kcyA+IDIgJiYgc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7Ci0JCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsyXSAoc3RyZWFtID0gJWksIGRlbHRhOiAtJWxkLCBtYXggaml0dGVyID0gJWxkKTogd3JvbmcgaW50ZXJydXB0IGFja25vd2xlZGdlP1xuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKSBkZWx0YSwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKTsKLQkJCQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnID4gMSkKLQkJCQkJZHVtcF9zdGFjaygpOwotCQkJfQotI2VuZGlmCisJZGVsdGEgPSBuZXdfaHdfcHRyIC0gb2xkX2h3X3B0cjsKKwlpZiAoZGVsdGEgPCAwKSB7CisJCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoZGVsdGEgPCAwKSB7CisJCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKKwkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdICIKKwkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBvbGRfcHRyPSVsZClcbiIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpb2xkX2h3X3B0cik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlydW50aW1lLT5od19wdHJfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKHJ1bnRpbWUtPmh3X3B0cl9iYXNlID09IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSAwOwotCQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQkJaHdfYmFzZSA9IDA7CisJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCX0KKwlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSAmJiBydW50aW1lLT5wZXJpb2RzID4gMSkgeworCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAorCQkJICAgICAiaHdfcHRyIHNraXBwaW5nISAiCisJCQkgICAgICIocG9zPSVsZCwgZGVsdGE9JWxkLCBwZXJpb2Q9JWxkKVxuIiwKKwkJCSAgICAgKGxvbmcpcG9zLCAobG9uZylkZWx0YSwKKwkJCSAgICAgKGxvbmcpcnVudGltZS0+cGVyaW9kX3NpemUpOworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKIAkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN1YnN0cmVhbSwgbmV3X2h3X3B0cik7CiAKKwlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwogCiAJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IGE3ODllZmMuLmExNTFmYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJaWYgKCEocGFyYW1zLT5ybWFzayAmICgxIDw8IGspKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CiAJCXByaW50aygiJTA0eCUwNHglMDR4JTA0eCAtPiAiLCBtLT5iaXRzWzNdLCBtLT5iaXRzWzJdLCBtLT5iaXRzWzFdLCBtLT5iaXRzWzBdKTsKICNlbmRpZgogCQljaGFuZ2VkID0gc25kX21hc2tfcmVmaW5lKG0sIGNvbnN0cnNfbWFzayhjb25zdHJzLCBrKSk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJaWYgKCEocGFyYW1zLT5ybWFzayAmICgxIDw8IGspKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CiAJCWlmIChpLT5lbXB0eSkKIAkJCXByaW50aygiZW1wdHkiKTsKIAkJZWxzZQpAQCAtMjUxLDcgKzI1MSw3IEBACiAJCQlpZiAoIWRvaXQpCiAJCQkJY29udGludWU7CiAjaWZkZWYgUlVMRVNfREVCVUcKLQkJCXByaW50aygiUnVsZSAlZCBbJXBdOiAiLCBrLCByLT5mdW5jKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJSdWxlICVkIFslcF06ICIsIGssIHItPmZ1bmMpOwogCQkJaWYgKHItPnZhciA+PSAwKSB7CiAJCQkJcHJpbnRrKCIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNbci0+dmFyXSk7CiAJCQkJaWYgKGh3X2lzX21hc2soci0+dmFyKSkgewpAQCAtMzI0Niw5ICszMjQ2LDcgQEAKIAllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnJ1bnRpbWUtPmZhc3luYyk7CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jIGIvc291bmQvY29yZS9wY21fdGltZXIuYwppbmRleCAyYzg5YzA0Li5jYTgwNjhiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKQEAgLTg1LDI1ICs4NSwxOSBAQAogCiBzdGF0aWMgaW50IHNuZF9wY21fdGltZXJfc3RhcnQoc3RydWN0IHNuZF90aW1lciAqIHRpbWVyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCiAJc3Vic3RyZWFtID0gc25kX3RpbWVyX2NoaXAodGltZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlzdWJzdHJlYW0tPnRpbWVyX3J1bm5pbmcgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fdGltZXJfc3RvcChzdHJ1Y3Qgc25kX3RpbWVyICogdGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAkKIAlzdWJzdHJlYW0gPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXN1YnN0cmVhbS0+dGltZXJfcnVubmluZyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jIGIvc291bmQvY29yZS9yYXdtaWRpLmMKaW5kZXggMDAyNzc3Yi4uNDczMjQ3YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9yYXdtaWRpLmMKKysrIGIvc291bmQvY29yZS9yYXdtaWRpLmMKQEAgLTIyNCwxNTYgKzIyNCwxNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogbG9vayBmb3IgYW4gYXZhaWxhYmxlIHN1YnN0cmVhbSBmb3IgdGhlIGdpdmVuIHN0cmVhbSBkaXJlY3Rpb247CisgKiBpZiBhIHNwZWNpZmljIHN1YmRldmljZSBpcyBnaXZlbiwgdHJ5IHRvIGFzc2lnbiBpdAorICovCitzdGF0aWMgaW50IGFzc2lnbl9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwgaW50IHN1YmRldmljZSwKKwkJCSAgICBpbnQgc3RyZWFtLCBpbnQgbW9kZSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICoqc3ViX3JldCkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9yYXdtaWRpX3N0ciAqcyA9ICZybWlkaS0+c3RyZWFtc1tzdHJlYW1dOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5mb19mbGFnc1syXSA9IHsKKwkJW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0gPSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVULAorCQlbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdID0gU05EUlZfUkFXTUlESV9JTkZPX0lOUFVULAorCX07CisKKwlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIGluZm9fZmxhZ3Nbc3RyZWFtXSkpCisJCXJldHVybiAtRU5YSU87CisJaWYgKHN1YmRldmljZSA+PSAwICYmIHN1YmRldmljZSA+PSBzLT5zdWJzdHJlYW1fY291bnQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChzLT5zdWJzdHJlYW1fb3BlbmVkID49IHMtPnN1YnN0cmVhbV9jb3VudCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwgJnMtPnN1YnN0cmVhbXMsIGxpc3QpIHsKKwkJaWYgKHN1YnN0cmVhbS0+b3BlbmVkKSB7CisJCQlpZiAoc3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUIHx8CisJCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN1YmRldmljZSA8IDAgfHwgc3ViZGV2aWNlID09IHN1YnN0cmVhbS0+bnVtYmVyKSB7CisJCQkqc3ViX3JldCA9IHN1YnN0cmVhbTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUFHQUlOOworfQorCisvKiBvcGVuIGFuZCBkbyByZWYtY291bnRpbmcgZm9yIHRoZSBnaXZlbiBzdWJzdHJlYW0gKi8KK3N0YXRpYyBpbnQgb3Blbl9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBpbnQgbW9kZSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc3Vic3RyZWFtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXN1YnN0cmVhbS0+b3BlbmVkID0gMTsKKwlpZiAoc3Vic3RyZWFtLT51c2VfY291bnQrKyA9PSAwKQorCQlzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nID0gMTsKKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCisJCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZCsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgaW50IGNsZWFudXApOworCitzdGF0aWMgaW50IHJhd21pZGlfb3Blbl9wcml2KHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksIGludCBzdWJkZXZpY2UsIGludCBtb2RlLAorCQkJICAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGUpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc2lucHV0ID0gTlVMTCwgKnNvdXRwdXQgPSBOVUxMOworCWludCBlcnI7CisKKwlyZmlsZS0+aW5wdXQgPSByZmlsZS0+b3V0cHV0ID0gTlVMTDsKKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgeworCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCisJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorCQkJCSAgICAgICBtb2RlLCAmc2lucHV0KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJfQorCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgeworCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCisJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKKwkJCQkgICAgICAgbW9kZSwgJnNvdXRwdXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisKKwlpZiAoc2lucHV0KSB7CisJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIG1vZGUpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisJaWYgKHNvdXRwdXQpIHsKKwkJZXJyID0gb3Blbl9zdWJzdHJlYW0ocm1pZGksIHNvdXRwdXQsIG1vZGUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKHNpbnB1dCkKKwkJCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHNpbnB1dCwgMCk7CisJCQlnb3RvIF9fZXJyb3I7CisJCX0KKwl9CisKKwlyZmlsZS0+cm1pZGkgPSBybWlkaTsKKwlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7CisJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7CisJcmV0dXJuIDA7CisKKyAgICAgIF9fZXJyb3I6CisJaWYgKHNpbnB1dCAmJiBzaW5wdXQtPnJ1bnRpbWUpCisJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOworCWlmIChzb3V0cHV0ICYmIHNvdXRwdXQtPnJ1bnRpbWUpCisJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCiBpbnQgc25kX3Jhd21pZGlfa2VybmVsX29wZW4oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLCBpbnQgc3ViZGV2aWNlLAogCQkJICAgIGludCBtb2RlLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqIHJmaWxlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDEsICpsaXN0MjsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzaW5wdXQgPSBOVUxMLCAqc291dHB1dCA9IE5VTEw7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3J1bnRpbWUgKmlucHV0ID0gTlVMTCwgKm91dHB1dCA9IE5VTEw7CiAJaW50IGVycjsKIAotCWlmIChyZmlsZSkKLQkJcmZpbGUtPmlucHV0ID0gcmZpbGUtPm91dHB1dCA9IE5VTEw7CisJaWYgKHNuZF9CVUdfT04oIXJmaWxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcm1pZGkgPSBzbmRfcmF3bWlkaV9zZWFyY2goY2FyZCwgZGV2aWNlKTsKLQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAocm1pZGkgPT0gTlVMTCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIF9fZXJyb3IxOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghdHJ5X21vZHVsZV9nZXQocm1pZGktPmNhcmQtPm1vZHVsZSkpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBfX2Vycm9yMTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJCXJldHVybiAtRU5YSU87CiAJfQotCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCkpIHsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAoc3ViZGV2aWNlID49IDAgJiYgKHVuc2lnbmVkIGludClzdWJkZXZpY2UgPj0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAocm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQgPj0KLQkJICAgIHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQl9Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCkpIHsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAoc3ViZGV2aWNlID49IDAgJiYgKHVuc2lnbmVkIGludClzdWJkZXZpY2UgPj0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZCA+PQotCQkgICAgcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQl9Ci0JbGlzdDEgPSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtcy5uZXh0OwotCXdoaWxlICgxKSB7Ci0JCWlmIChsaXN0MSA9PSAmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbXMpIHsKLQkJCXNpbnB1dCA9IE5VTEw7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQkJCWVyciA9IC1FQUdBSU47Ci0JCQkJZ290byBfX2Vycm9yOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJc2lucHV0ID0gbGlzdF9lbnRyeShsaXN0MSwgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7Ci0JCWlmICgobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgJiYgc2lucHV0LT5vcGVuZWQpCi0JCQlnb3RvIF9fbmV4dGk7Ci0JCWlmIChzdWJkZXZpY2UgPCAwIHx8IChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPT0gc2lucHV0LT5udW1iZXIpKQotCQkJYnJlYWs7Ci0JICAgICAgX19uZXh0aToKLQkJbGlzdDEgPSBsaXN0MS0+bmV4dDsKLQl9Ci0JbGlzdDIgPSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMubmV4dDsKLQl3aGlsZSAoMSkgewotCQlpZiAobGlzdDIgPT0gJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcykgewotCQkJc291dHB1dCA9IE5VTEw7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJCQllcnIgPSAtRUFHQUlOOwotCQkJCWdvdG8gX19lcnJvcjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCXNvdXRwdXQgPSBsaXN0X2VudHJ5KGxpc3QyLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtLCBsaXN0KTsKLQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpIHsKLQkJCQlpZiAoc291dHB1dC0+b3BlbmVkICYmICFzb3V0cHV0LT5hcHBlbmQpCi0JCQkJCWdvdG8gX19uZXh0bzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHNvdXRwdXQtPm9wZW5lZCkKLQkJCQkJZ290byBfX25leHRvOwotCQkJfQotCQl9Ci0JCWlmIChzdWJkZXZpY2UgPCAwIHx8IChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPT0gc291dHB1dC0+bnVtYmVyKSkKLQkJCWJyZWFrOwotCSAgICAgIF9fbmV4dG86Ci0JCWxpc3QyID0gbGlzdDItPm5leHQ7Ci0JfQotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7Ci0JCWlmICgoZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc2lucHV0KSkgPCAwKQotCQkJZ290byBfX2Vycm9yOwotCQlpbnB1dCA9IHNpbnB1dC0+cnVudGltZTsKLQkJaWYgKChlcnIgPSBzaW5wdXQtPm9wcy0+b3BlbihzaW5wdXQpKSA8IDApCi0JCQlnb3RvIF9fZXJyb3I7Ci0JCXNpbnB1dC0+b3BlbmVkID0gMTsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQrKzsKLQl9IGVsc2UgewotCQlzaW5wdXQgPSBOVUxMOwotCX0KLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJaWYgKHNvdXRwdXQtPm9wZW5lZCkKLQkJCWdvdG8gX19za2lwX291dHB1dDsKLQkJaWYgKChlcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzb3V0cHV0KSkgPCAwKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkKLQkJCQlzaW5wdXQtPm9wcy0+Y2xvc2Uoc2lucHV0KTsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlvdXRwdXQgPSBzb3V0cHV0LT5ydW50aW1lOwotCQlpZiAoKGVyciA9IHNvdXRwdXQtPm9wcy0+b3Blbihzb3V0cHV0KSkgPCAwKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkKLQkJCQlzaW5wdXQtPm9wcy0+Y2xvc2Uoc2lucHV0KTsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCSAgICAgIF9fc2tpcF9vdXRwdXQ6Ci0JCXNvdXRwdXQtPm9wZW5lZCA9IDE7Ci0JCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKLQkJCXNvdXRwdXQtPmFwcGVuZCA9IDE7Ci0JICAgICAgCWlmIChzb3V0cHV0LT51c2VfY291bnQrKyA9PSAwKQotCQkJc291dHB1dC0+YWN0aXZlX3NlbnNpbmcgPSAxOwotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9vcGVuZWQrKzsKLQl9IGVsc2UgewotCQlzb3V0cHV0ID0gTlVMTDsKLQl9Ci0JaWYgKCEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLKSkKLQkJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0JaWYgKHJmaWxlKSB7Ci0JCXJmaWxlLT5ybWlkaSA9IHJtaWRpOwotCQlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7Ci0JCXJmaWxlLT5vdXRwdXQgPSBzb3V0cHV0OwotCX0KLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAotICAgICAgX19lcnJvcjoKLQlpZiAoaW5wdXQgIT0gTlVMTCkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNpbnB1dCk7Ci0JaWYgKG91dHB1dCAhPSBOVUxMKQotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc291dHB1dCk7Ci0JbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKLQlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLSAgICAgIF9fZXJyb3IxOgorCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwllcnIgPSByYXdtaWRpX29wZW5fcHJpdihybWlkaSwgc3ViZGV2aWNlLCBtb2RlLCByZmlsZSk7CisJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJaWYgKGVyciA8IDApCisJCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzg1LDEwICszNzIsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCBmZmxhZ3M7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyYXdtaWRpX2ZpbGU7CisJc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJhd21pZGlfZmlsZSA9IE5VTEw7CiAJd2FpdF9xdWV1ZV90IHdhaXQ7CiAJc3RydWN0IHNuZF9jdGxfZmlsZSAqa2N0bDsKIAorCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgCisJCXJldHVybiAtRUlOVkFMOwkJLyogaW52YWxpZCBjb21iaW5hdGlvbiAqLworCiAJaWYgKG1haiA9PSBzbmRfbWFqb3IpIHsKIAkJcm1pZGkgPSBzbmRfbG9va3VwX21pbm9yX2RhdGEoaW1pbm9yKGlub2RlKSwKIAkJCQkJICAgICAgU05EUlZfREVWSUNFX1RZUEVfUkFXTUlESSk7CkBAIC00MDIsMjQgKzM5MiwyNSBAQAogCiAJaWYgKHJtaWRpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgCi0JCXJldHVybiAtRUlOVkFMOwkJLyogaW52YWxpZCBjb21iaW5hdGlvbiAqLworCisJaWYgKCF0cnlfbW9kdWxlX2dldChybWlkaS0+Y2FyZC0+bW9kdWxlKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKIAljYXJkID0gcm1pZGktPmNhcmQ7CiAJZXJyID0gc25kX2NhcmRfZmlsZV9hZGQoY2FyZCwgZmlsZSk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIF9fZXJyb3JfY2FyZDsKIAlmZmxhZ3MgPSBzbmRfcmF3bWlkaV9maWxlX2ZsYWdzKGZpbGUpOwogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSB8fCBtYWogPT0gU09VTkRfTUFKT1IpIC8qIE9TUyBlbXVsPyAqLwogCQlmZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORDsKLQlmZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0s7CiAJcmF3bWlkaV9maWxlID0ga21hbGxvYyhzaXplb2YoKnJhd21pZGlfZmlsZSksIEdGUF9LRVJORUwpOwogCWlmIChyYXdtaWRpX2ZpbGUgPT0gTlVMTCkgewotCQlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gX19lcnJvcjsKIAl9CiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCXN1YmRldmljZSA9IC0xOwogCQlyZWFkX2xvY2soJmNhcmQtPmN0bF9maWxlc19yd2xvY2spOwpAQCAtNDMxLDggKzQyMiw3IEBACiAJCQl9CiAJCX0KIAkJcmVhZF91bmxvY2soJmNhcmQtPmN0bF9maWxlc19yd2xvY2spOwotCQllcnIgPSBzbmRfcmF3bWlkaV9rZXJuZWxfb3BlbihybWlkaS0+Y2FyZCwgcm1pZGktPmRldmljZSwKLQkJCQkJICAgICAgc3ViZGV2aWNlLCBmZmxhZ3MsIHJhd21pZGlfZmlsZSk7CisJCWVyciA9IHJhd21pZGlfb3Blbl9wcml2KHJtaWRpLCBzdWJkZXZpY2UsIGZmbGFncywgcmF3bWlkaV9maWxlKTsKIAkJaWYgKGVyciA+PSAwKQogCQkJYnJlYWs7CiAJCWlmIChlcnIgPT0gLUVBR0FJTikgewpAQCAtNDUxLDY3ICs0NDEsODkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7CisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWUocmF3bWlkaV9maWxlKTsKKwkJZ290byBfX2Vycm9yOworCX0KICNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKIAlpZiAocmF3bWlkaV9maWxlLT5pbnB1dCAmJiByYXdtaWRpX2ZpbGUtPmlucHV0LT5ydW50aW1lKQogCQlyYXdtaWRpX2ZpbGUtPmlucHV0LT5ydW50aW1lLT5vc3MgPSAobWFqID09IFNPVU5EX01BSk9SKTsKIAlpZiAocmF3bWlkaV9maWxlLT5vdXRwdXQgJiYgcmF3bWlkaV9maWxlLT5vdXRwdXQtPnJ1bnRpbWUpCiAJCXJhd21pZGlfZmlsZS0+b3V0cHV0LT5ydW50aW1lLT5vc3MgPSAobWFqID09IFNPVU5EX01BSk9SKTsKICNlbmRpZgotCXJlbW92ZV93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JaWYgKGVyciA+PSAwKSB7Ci0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJhd21pZGlfZmlsZTsKLQl9IGVsc2UgewotCQlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKLQkJa2ZyZWUocmF3bWlkaV9maWxlKTsKLQl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcmF3bWlkaV9maWxlOwogCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCXJldHVybiAwOworCisgX19lcnJvcjoKKwlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKKyBfX2Vycm9yX2NhcmQ6CisJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2Uoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKiByZmlsZSkKK3N0YXRpYyB2b2lkIGNsb3NlX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLAorCQkJICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBpbnQgY2xlYW51cCkKIHsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfcnVudGltZSAqcnVudGltZTsKKwlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZC0tOworCWlmICgtLXN1YnN0cmVhbS0+dXNlX2NvdW50KQorCQlyZXR1cm47CiAKLQlpZiAoc25kX0JVR19PTighcmZpbGUpKQotCQlyZXR1cm4gLUVOWElPOwotCXJtaWRpID0gcmZpbGUtPnJtaWRpOwotCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAocmZpbGUtPmlucHV0ICE9IE5VTEwpIHsKLQkJc3Vic3RyZWFtID0gcmZpbGUtPmlucHV0OwotCQlyZmlsZS0+aW5wdXQgPSBOVUxMOwotCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCQlzbmRfcmF3bWlkaV9pbnB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7Ci0JCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQlpZiAocnVudGltZS0+cHJpdmF0ZV9mcmVlICE9IE5VTEwpCi0JCQlydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCXN1YnN0cmVhbS0+b3BlbmVkID0gMDsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQtLTsKLQl9Ci0JaWYgKHJmaWxlLT5vdXRwdXQgIT0gTlVMTCkgewotCQlzdWJzdHJlYW0gPSByZmlsZS0+b3V0cHV0OwotCQlyZmlsZS0+b3V0cHV0ID0gTlVMTDsKLQkJaWYgKC0tc3Vic3RyZWFtLT51c2VfY291bnQgPT0gMCkgewotCQkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpZiAoY2xlYW51cCkgeworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQpCisJCQlzbmRfcmF3bWlkaV9pbnB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7CisJCWVsc2UgewogCQkJaWYgKHN1YnN0cmVhbS0+YWN0aXZlX3NlbnNpbmcpIHsKIAkJCQl1bnNpZ25lZCBjaGFyIGJ1ZiA9IDB4ZmU7Ci0JCQkJLyogc2VuZGluZyBzaW5nbGUgYWN0aXZlIHNlbnNpbmcgbWVzc2FnZSB0byBzaHV0IHRoZSBkZXZpY2UgdXAgKi8KKwkJCQkvKiBzZW5kaW5nIHNpbmdsZSBhY3RpdmUgc2Vuc2luZyBtZXNzYWdlCisJCQkJICogdG8gc2h1dCB0aGUgZGV2aWNlIHVwCisJCQkJICovCiAJCQkJc25kX3Jhd21pZGlfa2VybmVsX3dyaXRlKHN1YnN0cmVhbSwgJmJ1ZiwgMSk7CiAJCQl9CiAJCQlpZiAoc25kX3Jhd21pZGlfZHJhaW5fb3V0cHV0KHN1YnN0cmVhbSkgPT0gLUVSRVNUQVJUU1lTKQogCQkJCXNuZF9yYXdtaWRpX291dHB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7Ci0JCQlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKLQkJCWlmIChydW50aW1lLT5wcml2YXRlX2ZyZWUgIT0gTlVMTCkKLQkJCQlydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKLQkJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOwotCQkJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOwotCQkJc3Vic3RyZWFtLT5hcHBlbmQgPSAwOwogCQl9Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZC0tOwogCX0KKwlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2ZyZWUpCisJCXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9mcmVlKHN1YnN0cmVhbSk7CisJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7CisJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOworCXN1YnN0cmVhbS0+YXBwZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgcmF3bWlkaV9yZWxlYXNlX3ByaXYoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlybWlkaSA9IHJmaWxlLT5ybWlkaTsKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJaWYgKHJmaWxlLT5pbnB1dCkgeworCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHJmaWxlLT5pbnB1dCwgMSk7CisJCXJmaWxlLT5pbnB1dCA9IE5VTEw7CisJfQorCWlmIChyZmlsZS0+b3V0cHV0KSB7CisJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgcmZpbGUtPm91dHB1dCwgMSk7CisJCXJmaWxlLT5vdXRwdXQgPSBOVUxMOworCX0KKwlyZmlsZS0+cm1pZGkgPSBOVUxMOwogCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCXdha2VfdXAoJnJtaWRpLT5vcGVuX3dhaXQpOworfQorCisvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCitpbnQgc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2Uoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlpZiAoc25kX0JVR19PTighcmZpbGUpKQorCQlyZXR1cm4gLUVOWElPOworCQorCXJtaWRpID0gcmZpbGUtPnJtaWRpOworCXJhd21pZGlfcmVsZWFzZV9wcml2KHJmaWxlKTsKIAltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiAwOwogfQpAQCAtNTIwLDE1ICs1MzIsMTQgQEAKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGU7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlpbnQgZXJyOwogCiAJcmZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZXJyID0gc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2UocmZpbGUpOwogCXJtaWRpID0gcmZpbGUtPnJtaWRpOwotCXdha2VfdXAoJnJtaWRpLT5vcGVuX3dhaXQpOworCXJhd21pZGlfcmVsZWFzZV9wcml2KHJmaWxlKTsKIAlrZnJlZShyZmlsZSk7CiAJc25kX2NhcmRfZmlsZV9yZW1vdmUocm1pZGktPmNhcmQsIGZpbGUpOwotCXJldHVybiBlcnI7CisJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfcmF3bWlkaV9pbmZvKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKaW5kZXggYmY4ZDJiNC4uYzAxNTRhOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKKysrIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKQEAgLTE4MSw3ICsxODEsNyBAQAogLyogZm9yIGRlYnVnICovCiAjaWZkZWYgU05EUlZfU0VRX09TU19ERUJVRwogZXh0ZXJuIGludCBzZXFfb3NzX2RlYnVnOwotI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJZG8geyBpZiAoc2VxX29zc19kZWJ1ZyA+IDApIHNuZF9wcmludGsgeDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfcHJpbnRrKHgpCWRvIHsgaWYgKHNlcV9vc3NfZGVidWcgPiAwKSBzbmRfcHJpbnRkIHg7IH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJLyoqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCmluZGV4IDAxMDFhOGIuLjI5ODk2YWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCkBAIC0zMjEsNyArMzIxLDggQEAKIAkJCWZyZWVwcmV2ID0gY2VsbDsKIAkJfSBlbHNlIHsKICNpZiAwCi0JCQlwcmludGsoInR5cGUgPSAlaSwgc291cmNlID0gJWksIGRlc3QgPSAlaSwgY2xpZW50ID0gJWlcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAidHlwZSA9ICVpLCBzb3VyY2UgPSAlaSwgZGVzdCA9ICVpLCAiCisJCQkgICAgICAgImNsaWVudCA9ICVpXG4iLAogCQkJCWNlbGwtPmV2ZW50LnR5cGUsCiAJCQkJY2VsbC0+ZXZlbnQuc291cmNlLmNsaWVudCwKIAkJCQljZWxsLT5ldmVudC5kZXN0LmNsaWVudCwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2didWYuYyBiL3NvdW5kL2NvcmUvc2didWYuYwppbmRleCBkNDU2NGVkLi40ZTdlYzJiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NnYnVmLmMKKysrIGIvc291bmQvY29yZS9zZ2J1Zi5jCkBAIC0zOCw2ICszOCwxMCBAQAogCWlmICghIHNnYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChkbWFiLT5hcmVhKQorCQl2dW5tYXAoZG1hYi0+YXJlYSk7CisJZG1hYi0+YXJlYSA9IE5VTEw7CisKIAl0bXBiLmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOwogCXRtcGIuZGV2LmRldiA9IHNnYnVmLT5kZXY7CiAJZm9yIChpID0gMDsgaSA8IHNnYnVmLT5wYWdlczsgaSsrKSB7CkBAIC00OCw5ICs1Miw2IEBACiAJCXRtcGIuYnl0ZXMgPSAoc2didWYtPnRhYmxlW2ldLmFkZHIgJiB+UEFHRV9NQVNLKSA8PCBQQUdFX1NISUZUOwogCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJnRtcGIpOwogCX0KLQlpZiAoZG1hYi0+YXJlYSkKLQkJdnVubWFwKGRtYWItPmFyZWEpOwotCWRtYWItPmFyZWEgPSBOVUxMOwogCiAJa2ZyZWUoc2didWYtPnRhYmxlKTsKIAlrZnJlZShzZ2J1Zi0+cGFnZV90YWJsZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggNzk2NTMyMC4uM2YwMDUwZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMTgyNSwxMyArMTgyNSw5IEBACiBzdGF0aWMgaW50IHNuZF90aW1lcl91c2VyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzbmRfdGltZXJfdXNlciAqdHU7Ci0JaW50IGVycjsKIAogCXR1ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdHUtPmZhc3luYyk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnR1LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzbmRfdGltZXJfdXNlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS92bWFzdGVyLmMgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwppbmRleCA0Y2M1N2Y5Li4yNTc2MjRiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYworKysgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwpAQCAtNTAsMTggKzUwLDM4IEBACiAJc3RydWN0IGxpbmtfbWFzdGVyICptYXN0ZXI7CiAJc3RydWN0IGxpbmtfY3RsX2luZm8gaW5mbzsKIAlpbnQgdmFsc1syXTsJCS8qIGN1cnJlbnQgdmFsdWVzICovCisJdW5zaWduZWQgaW50IGZsYWdzOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgc2xhdmU7IC8qIHRoZSBjb3B5IG9mIG9yaWdpbmFsIGNvbnRyb2wgZW50cnkgKi8KIH07CiAKK3N0YXRpYyBpbnQgc2xhdmVfdXBkYXRlKHN0cnVjdCBsaW5rX3NsYXZlICpzbGF2ZSkKK3sKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOworCWludCBlcnIsIGNoOworCisJdWN0bCA9IGttYWxsb2Moc2l6ZW9mKCp1Y3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1Y3RsKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1Y3RsLT5pZCA9IHNsYXZlLT5zbGF2ZS5pZDsKKwllcnIgPSBzbGF2ZS0+c2xhdmUuZ2V0KCZzbGF2ZS0+c2xhdmUsIHVjdGwpOworCWZvciAoY2ggPSAwOyBjaCA8IHNsYXZlLT5pbmZvLmNvdW50OyBjaCsrKQorCQlzbGF2ZS0+dmFsc1tjaF0gPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoXTsKKwlrZnJlZSh1Y3RsKTsKKwlyZXR1cm4gMDsKK30KKwogLyogZ2V0IHRoZSBzbGF2ZSBjdGwgaW5mbyBhbmQgc2F2ZSB0aGUgaW5pdGlhbCB2YWx1ZXMgKi8KIHN0YXRpYyBpbnQgc2xhdmVfaW5pdChzdHJ1Y3QgbGlua19zbGF2ZSAqc2xhdmUpCiB7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbzsKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOwotCWludCBlcnIsIGNoOworCWludCBlcnI7CiAKLQlpZiAoc2xhdmUtPmluZm8uY291bnQpCi0JCXJldHVybiAwOyAvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJaWYgKHNsYXZlLT5pbmZvLmNvdW50KSB7CisJCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwkJaWYgKHNsYXZlLT5mbGFncyAmIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUpCisJCQlyZXR1cm4gc2xhdmVfdXBkYXRlKHNsYXZlKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJdWluZm8gPSBrbWFsbG9jKHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVpbmZvKQpAQCAtODUsMTUgKzEwNSw3IEBACiAJc2xhdmUtPmluZm8ubWF4X3ZhbCA9IHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heDsKIAlrZnJlZSh1aW5mbyk7CiAKLQl1Y3RsID0ga21hbGxvYyhzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVjdGwpCi0JCXJldHVybiAtRU5PTUVNOwotCXVjdGwtPmlkID0gc2xhdmUtPnNsYXZlLmlkOwotCWVyciA9IHNsYXZlLT5zbGF2ZS5nZXQoJnNsYXZlLT5zbGF2ZSwgdWN0bCk7Ci0JZm9yIChjaCA9IDA7IGNoIDwgc2xhdmUtPmluZm8uY291bnQ7IGNoKyspCi0JCXNsYXZlLT52YWxzW2NoXSA9IHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbY2hdOwotCWtmcmVlKHVjdGwpOwotCXJldHVybiAwOworCXJldHVybiBzbGF2ZV91cGRhdGUoc2xhdmUpOwogfQogCiAvKiBpbml0aWFsaXplIG1hc3RlciB2b2x1bWUgKi8KQEAgLTIyOSw3ICsyNDEsOCBAQAogICogLSBsb2dhcml0aG1pYyB2b2x1bWUgY29udHJvbCAoZEIgbGV2ZWwpLCBubyBsaW5lYXIgdm9sdW1lCiAgKiAtIG1hc3RlciBjYW4gb25seSBhdHRlbnVhdGUgdGhlIHZvbHVtZSwgbm8gZ2FpbgogICovCi1pbnQgc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK2ludCBfc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbGlua19tYXN0ZXIgKm1hc3Rlcl9saW5rID0gc25kX2tjb250cm9sX2NoaXAobWFzdGVyKTsKIAlzdHJ1Y3QgbGlua19zbGF2ZSAqc3JlYzsKQEAgLTI0MSw2ICsyNTQsNyBAQAogCXNyZWMtPnNsYXZlID0gKnNsYXZlOwogCW1lbWNweShzcmVjLT5zbGF2ZS52ZCwgc2xhdmUtPnZkLCBzbGF2ZS0+Y291bnQgKiBzaXplb2YoKnNsYXZlLT52ZCkpOwogCXNyZWMtPm1hc3RlciA9IG1hc3Rlcl9saW5rOworCXNyZWMtPmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBvdmVycmlkZSBjYWxsYmFja3MgKi8KIAlzbGF2ZS0+aW5mbyA9IHNsYXZlX2luZm87CkBAIC0yNTQsOCArMjY4LDcgQEAKIAlsaXN0X2FkZF90YWlsKCZzcmVjLT5saXN0LCAmbWFzdGVyX2xpbmstPnNsYXZlcyk7CiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2N0bF9hZGRfc2xhdmUpOworRVhQT1JUX1NZTUJPTChfc25kX2N0bF9hZGRfc2xhdmUpOwogCiAvKgogICogY3RsIGNhbGxiYWNrcyBmb3IgbWFzdGVyIGNvbnRyb2xzCkBAIC0zMjcsOCArMzQwLDIwIEBACiB9CiAKIAotLyoKLSAqIENyZWF0ZSBhIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorLyoqCisgKiBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIgLSBDcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sCisgKiBAbmFtZTogbmFtZSBzdHJpbmcgb2YgdGhlIGNvbnRyb2wgZWxlbWVudCB0byBjcmVhdGUKKyAqIEB0bHY6IG9wdGlvbmFsIFRMViBpbnQgYXJyYXkgZm9yIGRCIGluZm9ybWF0aW9uCisgKgorICogQ3JlYXRlcyBhIHZpcnR1YWwgbWF0c3RlciBjb250cm9sIHdpdGggdGhlIGdpdmVuIG5hbWUgc3RyaW5nLgorICogUmV0dXJucyB0aGUgY3JlYXRlZCBjb250cm9sIGVsZW1lbnQsIG9yIE5VTEwgZm9yIGVycm9ycyAoRU5PTUVNKS4KKyAqCisgKiBBZnRlciBjcmVhdGluZyBhIHZtYXN0ZXIgZWxlbWVudCwgeW91IGNhbiBhZGQgdGhlIHNsYXZlIGNvbnRyb2xzCisgKiB2aWEgc25kX2N0bF9hZGRfc2xhdmUoKSBvciBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCgpLgorICoKKyAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBAdGx2IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIFRMViBpbmZvcm1hdGlvbgorICogZm9yIGRCIHNjYWxlIG9mIHRoZSBtYXN0ZXIgY29udHJvbC4gIEl0IHNob3VsZCBiZSBhIHNpbmdsZSBlbGVtZW50CisgKiB3aXRoICNTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSB0eXBlLCBhbmQgc2hvdWxkIGJlIHRoZSBtYXggMGRCLgogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoY2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRsdikKQEAgLTM2Nyw1ICszOTIsNCBAQAogCiAJcmV0dXJuIGtjdGw7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA3M2JlN2UxLi41NDIzOWQyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC01ODgsMTAgKzU4OCwxMCBAQAogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlkdW1teSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlkdW1teS0+Y2FyZCA9IGNhcmQ7CiAJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfUENNX0RFVklDRVMgJiYgaWR4IDwgcGNtX2RldnNbZGV2XTsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMgYi9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCmluZGV4IDc3ODM4NDMuLjE5NTBmZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKKysrIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwpAQCAtMTI3OSw5ICsxMjc5LDkgQEAKIAlpZiAoIWVuYWJsZVtkZXZdKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF9tbDQwM19hYzk3Y3JfY3JlYXRlKGNhcmQsIHBmZGV2LCAmbWw0MDNfYWM5N2NyKTsKIAlpZiAoZXJyIDwgMCkgewogCQlQREVCVUcoSU5JVF9GQUlMVVJFLCAicHJvYmUoKTogY3JlYXRlIGZhaWxlZCFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwppbmRleCA1Yjk5NmYzLi4xNDlkMDVhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYworKysgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwpAQCAtNzMsOSArNzMsOSBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ0aGUgdWFydF9lbnRlciBvcHRpb24gaXMgb2Jzb2xldGU7IHJlbW92ZSBpdFxuIik7CiAKIAkqcmNhcmQgPSBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJNUFUtNDAxIFVBUlQiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBjYXJkLT5kcml2ZXIpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2x4LCAiLCBjYXJkLT5zaG9ydG5hbWUsIHBvcnRbZGV2XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210cGF2LmMgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKaW5kZXggNDhiNjRlNi4uMmY4ZjI5NSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHBhdi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwpAQCAtMzAzLDggKzMwMywxMCBAQAogCiAJCXNuZF9tdHBhdl9zZW5kX2J5dGUobXRwX2NhcmQsIDB4ZjUpOwogCQlzbmRfbXRwYXZfc2VuZF9ieXRlKG10cF9jYXJkLCBwb3J0cC0+aHdwb3J0KTsKLQkJLy9zbmRfcHJpbnRrKCJuZXcgb3V0cG9ydDogMHgleFxuIiwgKHVuc2lnbmVkIGludCkgcG9ydHAtPmh3cG9ydCk7Ci0KKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJuZXcgb3V0cG9ydDogMHgleFxuIiwKKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBvcnRwLT5od3BvcnQpOworCQkqLwogCQlpZiAoIShvdXRieXRlICYgMHg4MCkgJiYgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKQogCQkJc25kX210cGF2X3NlbmRfYnl0ZShtdHBfY2FyZCwgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKTsKIAl9CkBAIC01NDAsNyArNTQyLDcgQEAKIAogCXU4IHNieXQgPSBzbmRfbXRwYXZfZ2V0cmVnKG1jcmQsIFNSRUcpOwogCi0JLy9wcmludGsoInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7ICovCiAKIAlpZiAoIShzYnl0ICYgU0lHU19CWVRFKSkKIAkJcmV0dXJuOwpAQCAtNTg1LDEyICs1ODcsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tdHBhdl9nZXRfSVNBKHN0cnVjdCBtdHBhdiAqIG1jYXJkKQogewogCWlmICgobWNhcmQtPnJlc19wb3J0ID0gcmVxdWVzdF9yZWdpb24ocG9ydCwgMywgIk1vdHVNVFBBViBNSURJIikpID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJbWNhcmQtPnBvcnQgPSBwb3J0OwogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9tdHBhdl9pcnFoLCBJUlFGX0RJU0FCTEVELCAiTU9UVSBNVFBBViIsIG1jYXJkKSkgewotCQlzbmRfcHJpbnRrKCJNVFZBUCBJUlEgJWQgYnVzeVxuIiwgaXJxKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgSVJRICVkIGJ1c3lcbiIsIGlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCW1jYXJkLT5pcnEgPSBpcnE7CkBAIC02OTYsOSArNjk4LDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBtdHBhdiAqbXRwX2NhcmQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqbXRwX2NhcmQpKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCptdHBfY2FyZCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCW10cF9jYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZtdHBfY2FyZC0+c3BpbmxvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHM2NC5jIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCmluZGV4IDg3YmExZGQuLjkyODQ4MjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYworKysgYi9zb3VuZC9kcml2ZXJzL210czY0LmMKQEAgLTk1NywxMCArOTU3LDEwIEBACiAJaWYgKChlcnIgPSBzbmRfbXRzNjRfcHJvYmVfcG9ydChwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGQoIkNhbm5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkVTSSAiIENBUkRfTkFNRSk7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogCQlnb3RvIF9fZXJyOwogCX0KIAotCXNuZF9wcmludGsoIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0lORk8gIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CiAJcmV0dXJuIDA7CiAKIF9fZXJyOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwppbmRleCA3ODA1ODIzLi42ZTMxZTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJb3BsMyA9IGh3LT5wcml2YXRlX2RhdGE7CiAJc3RhdHVzID0gaW5iKG9wbDMtPmxfcG9ydCk7CiAjaWYgMAotCXNuZF9wcmludGsoIkFkTGliIElSUSBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQWRMaWIgSVJRIHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAjZW5kaWYKIAlpZiAoIShzdGF0dXMgJiAweDgwKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCmluZGV4IDE2ZmVhZmEuLjZlN2QwOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCWludCBpOwogCWNoYXIgKnN0ciA9ICJ4LjI0IjsKIAotCXByaW50aygidGltZSAlLjVpOiAlcyBbJS4yaV06ICIsIG9wbDMtPnVzZV90aW1lLCBzLCB2b2ljZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRpbWUgJS41aTogJXMgWyUuMmldOiAiLCBvcGwzLT51c2VfdGltZSwgcywgdm9pY2UpOwogCWZvciAoaSA9IDA7IGkgPCBvcGwzLT5tYXhfdm9pY2VzOyBpKyspCiAJCXByaW50aygiJWMiLCAqKHN0ciArIG9wbDMtPnZvaWNlc1tpXS5zdGF0ZSArIDEpKTsKIAlwcmludGsoIlxuIik7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRU5EOyBpKyspIHsKIAkJaWYgKGJlc3RbaV0udm9pY2UgPj0gMCkgewogI2lmZGVmIERFQlVHX0FMTE9DCi0JCQlwcmludGsoIiVzICVpb3AgYWxsb2NhdGlvbiBvbiB2b2ljZSAlaVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcyAlaW9wIGFsbG9jYXRpb24gb24gdm9pY2UgJWlcbiIsCiAJCQkgICAgICAgYWxsb2NfdHlwZVtpXSwgaW5zdHJfNG9wID8gNCA6IDIsCiAJCQkgICAgICAgYmVzdFtpXS52b2ljZSk7CiAjZW5kaWYKQEAgLTMxNyw3ICszMTcsNyBAQAogCW9wbDMgPSBwOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIk5vdGUgb24sIGNoICVpLCBpbnN0ICVpLCBub3RlICVpLCB2ZWwgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9uLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaSwgdmVsICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSwgdmVsKTsKICNlbmRpZgogCkBAIC0zNzIsNyArMzcyLDcgQEAKIAkJcmV0dXJuOwogCX0KICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gT1BMJWkgaW5zdHJ1bWVudDogJXNcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBPUEwlaSBpbnN0cnVtZW50OiAlc1xuIiwKIAkJICAgaW5zdHJfNG9wID8gMyA6IDIsIHBhdGNoLT5uYW1lKTsKICNlbmRpZgogCS8qIGluIFNZTlRIIG1vZGUsIGFwcGxpY2F0aW9uIHRha2VzIGNhcmUgb2Ygdm9pY2VzICovCkBAIC00MzEsNyArNDMxLDcgQEAKIAl9CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gc2V0dGluZyBPUEwzIGNvbm5lY3Rpb246IDB4JXhcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBzZXR0aW5nIE9QTDMgY29ubmVjdGlvbjogMHgleFxuIiwKIAkJICAgb3BsMy0+Y29ubmVjdGlvbl9yZWcpOwogI2VuZGlmCiAJLyoKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCS8qIFByb2dyYW0gdGhlIEZNIHZvaWNlIGNoYXJhY3RlcmlzdGljcyAqLwogCWZvciAoaSA9IDA7IGkgPCAoaW5zdHJfNG9wID8gNCA6IDIpOyBpKyspIHsKICNpZmRlZiBERUJVR19NSURJCi0JCXNuZF9wcmludGsoIiAgLS0+IHByb2dyYW1taW5nIG9wZXJhdG9yICVpXG4iLCBpKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBwcm9ncmFtbWluZyBvcGVyYXRvciAlaVxuIiwgaSk7CiAjZW5kaWYKIAkJb3Bfb2Zmc2V0ID0gc25kX29wbDNfcmVnbWFwW3ZvaWNlX29mZnNldF1baV07CiAKQEAgLTU0Niw3ICs1NDYsNyBAQAogCWJsb2NrbnVtIHw9IE9QTDNfS0VZT05fQklUOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKICNlbmRpZgogCS8qIFNldCBPUEwzIEtFWU9OX0JMT0NLIHJlZ2lzdGVyIG9mIHJlcXVlc3RlZCB2b2ljZSAqLyAKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJcHJnID0gZXh0cmFfcHJnIC0gMTsKIAkJfQogI2lmZGVmIERFQlVHX01JREkKLQkJc25kX3ByaW50aygiICoqKiBhbGxvY2F0aW5nIGV4dHJhIHByb2dyYW1cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAqKiogYWxsb2NhdGluZyBleHRyYSBwcm9ncmFtXG4iKTsKICNlbmRpZgogCQlnb3RvIF9fZXh0cmFfcHJnOwogCX0KQEAgLTYzMyw3ICs2MzMsNyBAQAogCiAJLyoga2lsbCB2b2ljZSAqLwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CiAjZW5kaWYKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKIAkvKiBjbGVhciBLZXkgT04gYml0ICovCkBAIC02NzAsNyArNjcwLDcgQEAKIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtLCBub3RlKTsKICNlbmRpZgogCkBAIC03MDksNyArNzA5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJLZXkgcHJlc3N1cmUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIktleSBwcmVzc3VyZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTcyMyw3ICs3MjMsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIlRlcm1pbmF0ZSBub3RlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJUZXJtaW5hdGUgbm90ZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIkNvbnRyb2xsZXIsIFRZUEUgPSAlaSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQ29udHJvbGxlciwgVFlQRSA9ICVpLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIHR5cGUsIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogCkBAIC04NDksNyArODQ5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogfQpAQCAtODY0LDYgKzg2NCw2IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiU1lTRVhcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiU1lTRVhcbiIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCmluZGV4IDlhMjI3MWQuLmE1NGIxZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCkBAIC0yMjAsMTQgKzIyMCwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3VudCA8IChpbnQpc2l6ZW9mKHNiaSkpIHsKLQkJc25kX3ByaW50aygiRk0gRXJyb3I6IFBhdGNoIHJlY29yZCB0b28gc2hvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogUGF0Y2ggcmVjb3JkIHRvbyBzaG9ydFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoJnNiaSwgYnVmLCBzaXplb2Yoc2JpKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKHNiaS5jaGFubmVsIDwgMCB8fCBzYmkuY2hhbm5lbCA+PSBTQkZNX01BWElOU1RSKSB7Ci0JCXNuZF9wcmludGsoIkZNIEVycm9yOiBJbnZhbGlkIGluc3RydW1lbnQgbnVtYmVyICVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogSW52YWxpZCBpbnN0cnVtZW50IG51bWJlciAlZFxuIiwKIAkJCSAgIHNiaS5jaGFubmVsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjU0LDcgKzI1NCw5IEBACiAJb3BsMyA9IGFyZy0+cHJpdmF0ZV9kYXRhOwogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgU05EQ1RMX0ZNX0xPQURfSU5TVFI6Ci0JCQlzbmRfcHJpbnRrKCJPUEwzOiBPYnNvbGV0ZSBpb2N0bChTTkRDVExfRk1fTE9BRF9JTlNUUikgdXNlZC4gRml4IHRoZSBwcm9ncmFtLlxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJPUEwzOiAiCisJCQkJICAgIk9ic29sZXRlIGlvY3RsKFNORENUTF9GTV9MT0FEX0lOU1RSKSB1c2VkLiAiCisJCQkJICAgIkZpeCB0aGUgcHJvZ3JhbS5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY2FzZSBTTkRDVExfU1lOVEhfTUVNQVZMOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKaW5kZXggOTYyYmI5Yy4uNmQ1N2I2NDQxIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoInVua25vd24gSU9DVEw6IDB4JXhcbiIsIGNtZCk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ1bmtub3duIElPQ1RMOiAweCV4XG4iLCBjbWQpOwogI2VuZGlmCiAJfQogCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKaW5kZXggYTQwNDllYi4uYjYwY2VmMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYworKysgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJZWxzZQogCQltaW5fZGl2ID0gTUFYX0RJVjsKICNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKCJQQ1NQOiBscGo9JWxpLCBtaW5fZGl2PSVpLCByZXM9JWxpXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJQQ1NQOiBscGo9JWxpLCBtaW5fZGl2PSVpLCByZXM9JWxpXG4iLAogCSAgICAgICBsb29wc19wZXJfamlmZnksIG1pbl9kaXYsIHRwLnR2X25zZWMpOwogI2VuZGlmCiAKQEAgLTk4LDkgKzk4LDkgQEAKIAlocnRpbWVyX2luaXQoJnBjc3BfY2hpcC50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKIAlwY3NwX2NoaXAudGltZXIuZnVuY3Rpb24gPSBwY3NwX2RvX3RpbWVyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfcGNzcF9jcmVhdGUoY2FyZCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jIGIvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKaW5kZXggYjFjMDQ3ZS4uNjAxNThlMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKKysrIGIvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKQEAgLTc0NiwxMCArNzQ2LDEwIEBACiAJaWYgKChlcnIgPSBzbmRfcG9ydG1hbl9wcm9iZV9wb3J0KHApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ZCgiQ2Fubm90IGNyZWF0ZSBjYXJkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCXN0cmNweShjYXJkLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBDQVJEX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwppbmRleCBkOGFhYjlkLi5iMmI2ZDUwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYworKysgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwpAQCAtMjQxLDcgKzI0MSw4IEBACiAJCQlzbmRfcmF3bWlkaV9yZWNlaXZlKHVhcnQtPm1pZGlfaW5wdXRbc3Vic3RyZWFtXSwgJmMsIDEpOwogCiAJCWlmIChzdGF0dXMgJiBVQVJUX0xTUl9PRSkKLQkJCXNuZF9wcmludGsoIiVzOiBPdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIiVzOiBPdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKIAkJCSAgICAgICB1YXJ0LT5ybWlkaS0+bmFtZSwgdWFydC0+YmFzZSk7CiAJfQogCkBAIC02MzYsNyArNjM3LDggQEAKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghc25kX3VhcnQxNjU1MF93cml0ZV9idWZmZXIodWFydCwgbWlkaV9ieXRlKSkgewotCQkJc25kX3ByaW50aygiJXM6IEJ1ZmZlciBvdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIiVzOiBCdWZmZXIgb3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCiAJCQkJICAgdWFydC0+cm1pZGktPm5hbWUsIHVhcnQtPmJhc2UpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTgxNSw3ICs4MTcsOCBAQAogCWlmIChpcnEgPj0gMCAmJiBpcnEgIT0gU05EUlZfQVVUT19JUlEpIHsKIAkJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX3VhcnQxNjU1MF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9ESVNBQkxFRCwgIlNlcmlhbCBNSURJIiwgdWFydCkpIHsKLQkJCXNuZF9wcmludGsoImlycSAlZCBidXN5LiBVc2luZyBQb2xsaW5nLlxuIiwgaXJxKTsKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgImlycSAlZCBidXN5LiBVc2luZyBQb2xsaW5nLlxuIiwgaXJxKTsKIAkJfSBlbHNlIHsKIAkJCXVhcnQtPmlycSA9IGlycTsKIAkJfQpAQCAtOTE5LDI2ICs5MjIsMjkgQEAKIAljYXNlIFNORFJWX1NFUklBTF9HRU5FUklDOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJBZGFwdG9yIHR5cGUgaXMgb3V0IG9mIHJhbmdlIDAtJWQgKCVkKVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkFkYXB0b3IgdHlwZSBpcyBvdXQgb2YgcmFuZ2UgMC0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9BREFQVE9SLCBhZGFwdG9yW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAob3V0c1tkZXZdIDwgMSB8fCBvdXRzW2Rldl0gPiBTTkRSVl9TRVJJQUxfTUFYX09VVFMpIHsKLQkJc25kX3ByaW50aygiQ291bnQgb2Ygb3V0cHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ291bnQgb2Ygb3V0cHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9PVVRTLCBvdXRzW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoaW5zW2Rldl0gPCAxIHx8IGluc1tkZXZdID4gU05EUlZfU0VSSUFMX01BWF9JTlMpIHsKLQkJc25kX3ByaW50aygiQ291bnQgb2YgaW5wdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJDb3VudCBvZiBpbnB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKIAkJCSAgIFNORFJWX1NFUklBTF9NQVhfSU5TLCBpbnNbZGV2XSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNhcmQgID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU2VyaWFsIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlNlcmlhbCBNSURJIChVQVJUMTY1NTBBKSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwppbmRleCBmNzllMzYxLi4wZTYzMWMzIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwpAQCAtOTAsMTUgKzkwLDE3IEBACiAJaW50IGlkeCwgZXJyOwogCWludCBkZXYgPSBkZXZwdHItPmlkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJdm1pZGkgPSAoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAJdm1pZGktPmNhcmQgPSBjYXJkOwogCiAJaWYgKG1pZGlfZGV2c1tkZXZdID4gTUFYX01JRElfREVWSUNFUykgewotCQlzbmRfcHJpbnRrKCJ0b28gbXVjaCBtaWRpIGRldmljZXMgZm9yIHZpcm1pZGkgJWQ6IGZvcmNlIHRvIHVzZSAlZFxuIiwgZGV2LCBNQVhfTUlESV9ERVZJQ0VTKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJ0b28gbXVjaCBtaWRpIGRldmljZXMgZm9yIHZpcm1pZGkgJWQ6ICIKKwkJCSAgICJmb3JjZSB0byB1c2UgJWRcbiIsIGRldiwgTUFYX01JRElfREVWSUNFUyk7CiAJCW1pZGlfZGV2c1tkZXZdID0gTUFYX01JRElfREVWSUNFUzsKIAl9CiAJZm9yIChpZHggPSAwOyBpZHggPCBtaWRpX2RldnNbZGV2XTsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKaW5kZXggMTRlMzM1NC4uMTljNmUzNyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKQEAgLTY4OCw3ICs2ODgsOCBAQAogCQlpbWFnZSA9IGRzcC0+ZGF0YSArIGk7CiAJCS8qIFdhaXQgRFNQIHJlYWR5IGZvciBhIG5ldyByZWFkICovCiAJCWlmICgoZXJyID0gdnhfd2FpdF9pc3JfYml0KGNoaXAsIElTUl9UWF9FTVBUWSkpIDwgMCkgewotCQkJcHJpbnRrKCJkc3AgbG9hZGluZyBlcnJvciBhdCBwb3NpdGlvbiAlZFxuIiwgaSk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiZHNwIGxvYWRpbmcgZXJyb3IgYXQgcG9zaXRpb24gJWRcbiIsIGkpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQljcHRyID0gaW1hZ2U7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKaW5kZXggOGQ2MzYyZS4uNDZkZjg4MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwpAQCAtMTE5LDE2ICsxMTksNiBAQAogCiAjZWxzZSAvKiBvbGQgc3R5bGUgZmlybXdhcmUgbG9hZGluZyAqLwogCi1zdGF0aWMgaW50IHZ4X2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZ4X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZ4X2h3ZGVwX2RzcF9zdGF0dXMoc3RydWN0IHNuZF9od2RlcCAqaHcsCiAJCQkgICAgICAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICppbmZvKQogewpAQCAtMjQzLDggKzIzMyw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9WWDsKIAlody0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLQlody0+b3BzLm9wZW4gPSB2eF9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHZ4X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gdnhfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gdnhfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jIGIvc291bmQvZHJpdmVycy92eC92eF91ZXIuYwppbmRleCAwZTFiYTliLi5iMDU2MGZlYyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF91ZXIuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiBVRVIsIG9yIDAgaWYgbm90IHN5bmMsCiAgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLXN0YXRpYyBpbnQgdnhfcmVhZF91ZXJfc3RhdHVzKHN0cnVjdCB2eF9jb3JlICpjaGlwLCBpbnQgKm1vZGUpCitzdGF0aWMgaW50IHZ4X3JlYWRfdWVyX3N0YXR1cyhzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgdW5zaWduZWQgaW50ICptb2RlKQogewogCWludCB2YWwsIGZyZXE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9NYWtlZmlsZSBiL3NvdW5kL2kyYy9NYWtlZmlsZQppbmRleCAzNzk3MDY2Ni4uMzY4NzliZiAxMDA2NDQKLS0tIGEvc291bmQvaTJjL01ha2VmaWxlCisrKyBiL3NvdW5kL2kyYy9NYWtlZmlsZQpAQCAtNyw4ICs3LDYgQEAKIHNuZC1jczg0Mjctb2JqcyA6PSBjczg0Mjcubwogc25kLXRlYTYzMzB0LW9ianMgOj0gdGVhNjMzMHQubwogCi1vYmotJChDT05GSUdfTDMpICs9IGwzLwotCiBvYmotJChDT05GSUdfU05EKSArPSBvdGhlci8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL2wzL01ha2VmaWxlIGIvc291bmQvaTJjL2wzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ1NWI4Li4wMDAwMDAwCi0tLSBhL3NvdW5kL2kyYy9sMy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgQUxTQQotIwotCi1zbmQtdWRhMTM0MS1vYmpzIDo9IHVkYTEzNDEubwotCi0jIE1vZHVsZSBEZXBlbmRlbmN5Ci1vYmotJChDT05GSUdfU05EX1NBMTFYWF9VREExMzQxKSArPSBzbmQtdWRhMTM0MS5vCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jIGIvc291bmQvaTJjL2wzL3VkYTEzNDEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0MGViNC4uMDAwMDAwMAotLS0gYS9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8qCi0gKiBQaGlsaXBzIFVEQTEzNDEgbWl4ZXIgZGV2aWNlIGRyaXZlcgotICogQ29weXJpZ2h0IChjKSAyMDAyIFRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Ci0gKgotICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMjAwMCBMZXJub3V0ICYgSGF1c3BpZSBTcGVlY2ggUHJvZHVjdHMsIE4uVi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBIaXN0b3J5OgotICoKLSAqIDIwMDItMDMtMTMgICBUb21hcyBLYXNwYXJlayAgaW5pdGlhbCByZWxlYXNlIC0gYmFzZWQgb24gdWRhMTM0MS5jIGZyb20gT1NTCi0gKiAyMDAyLTAzLTI4ICAgVG9tYXMgS2FzcGFyZWsgIGJhc2ljIG1peGVyIGlzIHdvcmtpbmcgKHZvbHVtZSwgYmFzcywgdHJlYmxlKQotICogMjAwMi0wMy0zMCAgIFRvbWFzIEthc3BhcmVrICBwcm9jIGZpbGVzeXN0ZW0gc3VwcG9ydCwgY29tcGxldGUgbWl4ZXIgYW5kIERTUAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBzdXBwb3J0Ci0gKiAyMDAyLTA0LTEyCVRvbWFzIEthc3BhcmVrCXByb2MgaW50ZXJmYWNlIHVwZGF0ZSwgY29kZSBjbGVhbnVwCi0gKiAyMDAyLTA1LTEyICAgVG9tYXMgS2FzcGFyZWsgIGFub3RoZXIgY29kZSBjbGVhbnVwCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5mby5oPgotCi0jaW5jbHVkZSA8bGludXgvbDMvbDMuaD4KLQotI2luY2x1ZGUgPHNvdW5kL3VkYTEzNDEuaD4KLQotLyoge3t7IEhXIHJlZ3MgZGVmaW5pdGlvbiAqLwotCi0jZGVmaW5lIFNUQVQwICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgU1RBVDEJCQkweDgwCi0jZGVmaW5lIFNUQVRfTUFTSyAgICAgICAgICAgICAgIDB4ODAKLQotI2RlZmluZSBEQVRBMF8wCQkJMHgwMAotI2RlZmluZSBEQVRBMF8xCQkJMHg0MAotI2RlZmluZSBEQVRBMF8yCQkJMHg4MAotI2RlZmluZSBEQVRBX01BU0sgICAgICAgICAgICAgICAweGMwCi0KLSNkZWZpbmUgSVNfREFUQTAoeCkgICAgICgoeCkgPj0gZGF0YTBfMCAmJiAoeCkgPD0gZGF0YTBfMikKLSNkZWZpbmUgSVNfREFUQTEoeCkgICAgICgoeCkgPT0gZGF0YTEpCi0jZGVmaW5lIElTX1NUQVRVUyh4KSAgICAoKHgpID09IHN0YXQwIHx8ICh4KSA9PSBzdGF0MSkKLSNkZWZpbmUgSVNfRVhURU5EKHgpICAgKCh4KSA+PSBleHQwICYmICh4KSA8PSBleHQ2KQotCi0vKiB9fX0gKi8KLQotCi1zdGF0aWMgY29uc3QgY2hhciAqcGVha19uYW1lc1tdID0gewotCSJiZWZvcmUiLAotCSJhZnRlciIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZmlsdGVyX25hbWVzW10gPSB7Ci0JImZsYXQiLAotCSJtaW4iLAotCSJtaW4iLAotCSJtYXgiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKm1peGVyX25hbWVzW10gPSB7Ci0JImRvdWJsZSBkaWZmZXJlbnRpYWwiLAotCSJpbnB1dCBjaGFubmVsIDEgKGxpbmUgaW4pIiwKLQkiaW5wdXQgY2hhbm5lbCAyIChtaWNyb3Bob25lKSIsCi0JImRpZ2l0YWwgbWl4ZXIiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmRlZW1wX25hbWVzW10gPSB7Ci0JIm5vbmUiLAotCSIzMiBrSHoiLAotCSI0NC4xIGtIeiIsCi0JIjQ4IGtIeiIsICAgICAgICAKLX07Ci0KLWVudW0gdWRhMTM0MV9yZWdzX25hbWVzIHsKLQlzdGF0MCwKLQlzdGF0MSwKLQlkYXRhMF8wLAotCWRhdGEwXzEsCi0JZGF0YTBfMiwKLQlkYXRhMSwKLQlleHQwLAotCWV4dDEsCi0JZXh0MiwKLQllbXB0eSwKLQlleHQ0LAotCWV4dDUsCi0JZXh0NiwKLQl1ZGExMzQxX3JlZ19sYXN0LAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnVkYTEzNDFfcmVnX25hbWVzW10gPSB7Ci0JInN0YXQgMCAiLAotCSJzdGF0IDEgIiwKLQkiZGF0YSAwMCIsCi0JImRhdGEgMDEiLAotCSJkYXRhIDAyIiwKLQkiZGF0YSAxICIsCi0JImV4dCAwIiwKLQkiZXh0IDEiLAotCSJleHQgMiIsCi0JImVtcHR5IiwKLQkiZXh0IDQiLAotCSJleHQgNSIsCi0JImV4dCA2IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgdWRhMTM0MV9lbnVtX2l0ZW1zW10gPSB7Ci0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkyLCAvL3BlYWsgLSBiZWZvcmUvYWZ0ZXIKLQk0LCAvL2RlZW1wIC0gbm9uZS8zMi80NC4xLzQ4Ci0JMCwKLQk0LCAvL2ZpbHRlciAtIGZsYXQvbWluL21pbi9tYXgKLQkwLCAwLCAwLAotCTQsIC8vbWl4ZXIgLSBkaWZmZXIvbGluZS9taWMvbWl4ZXIKLQkwLCAwLCAwLCAwLCAwLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiogdWRhMTM0MV9lbnVtX25hbWVzW10gPSB7Ci0JTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQlwZWFrX25hbWVzLCAvL3BlYWsgLSBiZWZvcmUvYWZ0ZXIKLQlkZWVtcF9uYW1lcywgLy9kZWVtcCAtIG5vbmUvMzIvNDQuMS80OAotCU5VTEwsCi0JZmlsdGVyX25hbWVzLCAvL2ZpbHRlciAtIGZsYXQvbWluL21pbi9tYXgKLQlOVUxMLCBOVUxMLCBOVUxMLAotCW1peGVyX25hbWVzLCAvL21peGVyIC0gZGlmZmVyL2xpbmUvbWljL21peGVyCi0JTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLX07Ci0KLXR5cGVkZWYgaW50IHVkYTEzNDFfY2ZnW0NNRF9MQVNUXTsKLQotc3RydWN0IHVkYTEzNDEgewotCWludCAoKndyaXRlKSAoc3RydWN0IGwzX2NsaWVudCAqdWRhMTM0MSwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpOwotCWludCAoKnJlYWQpIChzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxLCB1bnNpZ25lZCBzaG9ydCByZWcpOyAgICAgICAgCi0JdW5zaWduZWQgY2hhciByZWdzW3VkYTEzNDFfcmVnX2xhc3RdOwotCWludCBhY3RpdmU7Ci0Jc3BpbmxvY2tfdCByZWdfbG9jazsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0JdWRhMTM0MV9jZmcgY2ZnOwotI2lmZGVmIENPTkZJR19QTQotCXVuc2lnbmVkIGNoYXIgc3VzcGVuZF9yZWdzW3VkYTEzNDFfcmVnX2xhc3RdOwotCXVkYTEzNDFfY2ZnIHN1c3BlbmRfY2ZnOwotI2VuZGlmCi19OwotCi0vKiB0cmFuc2ZlciA4Yml0IGludGVnZXIgaW50byBzdHJpbmcgd2l0aCBiaW5hcnkgcmVwcmVzZW50YXRpb24gKi8KLXN0YXRpYyB2b2lkIGludDJzdHJfYmluOCh1aW50OF90IHZhbCwgY2hhciAqYnVmKQotewotCWNvbnN0IGludCBzaXplID0gc2l6ZW9mKHZhbCkgKiA4OwotCWludCBpOwotCi0JZm9yIChpPSAwOyBpIDwgc2l6ZTsgaSsrKXsKLQkJKihidWYrKykgPSAodmFsID4+IChzaXplIC0gMSkpID8gJzEnIDogJzAnOwotCQl2YWwgPDw9IDE7Ci0JfQotCSpidWYgPSAnXDAnOyAvL2VuZCB0aGUgc3RyaW5nIHdpdGggemVybwotfQotCi0vKiB7e3sgSFcgbWFuaXB1bGF0aW9uIHJvdXRpbmVzICovCi0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfY29kZWNfd3JpdGUoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGNoYXIgYnVmWzJdID0geyAweGMwLCAweGUwIH07IC8vIGZvciBFWFQgYWRkcmVzc2luZwotCWludCBlcnIgPSAwOwotCi0JdWRhLT5yZWdzW3JlZ10gPSB2YWw7Ci0KLQlpZiAodWRhLT5hY3RpdmUpIHsKLQkJaWYgKElTX0RBVEEwKHJlZykpIHsKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfREFUQTAsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfREFUQTEocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9EQVRBMSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKLQkJfSBlbHNlIGlmIChJU19TVEFUVVMocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9TVEFUVVMsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfRVhURU5EKHJlZykpIHsKLQkJCWJ1ZlswXSB8PSAocmVnIC0gZXh0MCkgJiAweDc7ICAgLy9FWFQgYWRkcmVzcwotCQkJYnVmWzFdIHw9IHZhbDsgICAgICAgICAgICAgICAgICAvL0VYVCBkYXRhCi0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX0RBVEEwLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWJ1ZiwgMik7Ci0JCX0KLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzQxIGNvZGVjIG5vdCBhY3RpdmUhXG4iKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnKQotewotCXVuc2lnbmVkIGNoYXIgdmFsOwotCWludCBlcnI7Ci0KLQllcnIgPSBsM19yZWFkKGNsbnQsIHJlZywgJnZhbCwgMSk7Ci0JaWYgKGVyciA9PSAxKQotCQkvLyB1c2UganVzdCA2Yml0cyAtIHRoZSByZXN0IGlzIGFkZHJlc3Mgb2YgdGhlIHJlZwotCQlyZXR1cm4gdmFsICYgNjM7Ci0JcmV0dXJuIGVyciA8IDAgPyBlcnIgOiAtRUlPOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzbmRfdWRhMTM0MV92YWxpZF9yZWcoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnKQotewotCXJldHVybiByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZywKLQkJCQkgICB1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCBzaGlmdCwKLQkJCQkgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgaW50IGZsdXNoKQotewotCWludCBjaGFuZ2U7Ci0JdW5zaWduZWQgc2hvcnQgb2xkLCBuZXc7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0jaWYgMAotCXByaW50ayhLRVJOX0RFQlVHICJ1cGRhdGVfYml0czogcmVnOiAlcyBtYXNrOiAlZCBzaGlmdDogJWQgdmFsOiAlZFxuIiwKLQkgICAgICAgdWRhMTM0MV9yZWdfbmFtZXNbcmVnXSwgbWFzaywgc2hpZnQsIHZhbHVlKTsKLSNlbmRpZgotICAgICAgICAKLQlpZiAoIXNuZF91ZGExMzQxX3ZhbGlkX3JlZyhjbG50LCByZWcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzcGluX2xvY2soJnVkYS0+cmVnX2xvY2spOwotCW9sZCA9IHVkYS0+cmVnc1tyZWddOwotCW5ldyA9IChvbGQgJiB+KG1hc2sgPDwgc2hpZnQpKSB8ICh2YWx1ZSA8PCBzaGlmdCk7Ci0JY2hhbmdlID0gb2xkICE9IG5ldzsKLQlpZiAoY2hhbmdlKSB7Ci0JCWlmIChmbHVzaCkgdWRhLT53cml0ZShjbG50LCByZWcsIG5ldyk7Ci0JCXVkYS0+cmVnc1tyZWddID0gbmV3OwotCX0KLQlzcGluX3VubG9jaygmdWRhLT5yZWdfbG9jayk7Ci0JcmV0dXJuIGNoYW5nZTsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9jZmdfd3JpdGUoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgd2hhdCwKLQkJCQkgdW5zaWduZWQgc2hvcnQgdmFsdWUsIGludCBmbHVzaCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHJldCA9IDA7Ci0jaWZkZWYgQ09ORklHX1BNCi0JaW50IHJlZzsKLSNlbmRpZgotCi0jaWYgMAotCXByaW50ayhLRVJOX0RFQlVHICJjZmdfd3JpdGUgd2hhdDogJWQgdmFsdWU6ICVkXG4iLCB3aGF0LCB2YWx1ZSk7Ci0jZW5kaWYKLQotCXVkYS0+Y2ZnW3doYXRdID0gdmFsdWU7Ci0gICAgICAgIAotCXN3aXRjaCh3aGF0KSB7Ci0JY2FzZSBDTURfUkVTRVQ6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDIsIDEsIGZsdXNoKTsJLy8gTVVURQotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMSwgNiwgMSwgZmx1c2gpOwkvLyBSRVNFVAotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMSwgNiwgMCwgZmx1c2gpOwkvLyBSRVNUT1JFCi0JCXVkYS0+Y2ZnW0NNRF9SRVNFVF09MDsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfRlM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCAzLCA0LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9GT1JNQVQ6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCA3LCAxLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9PR0FJTjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDYsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0lHQUlOOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgNSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfREFDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQURDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgMSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfVk9MVU1FOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8wLCA2MywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQkFTUzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMSwgMTUsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1RSRUJCTEU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzEsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1BFQUs6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDUsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0RFRU1QOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAzLCAzLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9NVVRFOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAxLCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9GSUxURVI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0NIMToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MCwgMzEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0NIMjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MSwgMzEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX01JQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MiwgNywgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfTUlYRVI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDIsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NCwgMSwgNCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfSUc6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDQsIDMsIDAsIHZhbHVlICYgMHgzLCBmbHVzaCk7Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDUsIDMxLCAwLCB2YWx1ZSA+PiAyLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQ19USU1FOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ2LCA3LCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BR0NfTEVWRUw6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDYsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19QTQkJCi0JY2FzZSBDTURfU1VTUEVORDoKLQkJZm9yIChyZWcgPSBzdGF0MDsgcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsgcmVnKyspCi0JCQl1ZGEtPnN1c3BlbmRfcmVnc1tyZWddID0gdWRhLT5yZWdzW3JlZ107Ci0JCWZvciAocmVnID0gMDsgcmVnIDwgQ01EX0xBU1Q7IHJlZysrKQotCQkJdWRhLT5zdXNwZW5kX2NmZ1tyZWddID0gdWRhLT5jZmdbcmVnXTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfUkVTVU1FOgotCQlmb3IgKHJlZyA9IHN0YXQwOyByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OyByZWcrKykKLQkJCXNuZF91ZGExMzQxX2NvZGVjX3dyaXRlKGNsbnQsIHJlZywgdWRhLT5zdXNwZW5kX3JlZ3NbcmVnXSk7Ci0JCWZvciAocmVnID0gMDsgcmVnIDwgQ01EX0xBU1Q7IHJlZysrKQotCQkJdWRhLT5jZmdbcmVnXSA9IHVkYS0+c3VzcGVuZF9jZmdbcmVnXTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0gICAgICAgICAgICAgICAgCi0JaWYgKCF1ZGEtPmFjdGl2ZSkKLQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzQxIGNvZGVjIG5vdCBhY3RpdmUhXG4iKTsgICAgICAgICAgICAgICAgCi0JcmV0dXJuIHJldDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBQcm9jIGludGVyZmFjZSAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0KLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfbmFtZXNbXSA9IHsKLQkiSTJTLWJ1cyIsCi0JIkxTQiAxNmJpdHMiLAotCSJMU0IgMThiaXRzIiwKLQkiTFNCIDIwYml0cyIsCi0JIk1TQiIsCi0JImluIExTQiAxNmJpdHMvb3V0IE1TQiIsCi0JImluIExTQiAxOGJpdHMvb3V0IE1TQiIsCi0JImluIExTQiAyMGJpdHMvb3V0IE1TQiIsICAgICAgICAKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpmc19uYW1lc1tdID0gewotCSI1MTIqZnMiLAotCSIzODQqZnMiLAotCSIyNTYqZnMiLAotCSJVbnVzZWQgLSBiYWQgdmFsdWUhIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBiYXNzX3ZhbHVlc1tdWzE2XSA9IHsKLQl7IjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsCi0JICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgInVuZGVmaW5lZCIsIH0sIC8vZmxhdAotCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwKLQkgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWluCi0JeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMTggZEIiLAotCSAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtaW4KLQl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIyMCBkQiIsCi0JICIyMiBkQiIsICIyNCBkQiIsICIyNCBkQiIsICIyNCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1heAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKm1pY19zZW5zX3ZhbHVlW10gPSB7Ci0JIi0zIGRCIiwgIjAgZEIiLCAiMyBkQiIsICI5IGRCIiwgIjE1IGRCIiwgIjIxIGRCIiwgIjI3IGRCIiwgIm5vdCB1c2VkIiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBBR0NfYXRpbWVbXSA9IHsKLQkxMSwgMTYsIDExLCAxNiwgMjEsIDExLCAxNiwgMjEsCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgQUdDX2R0aW1lW10gPSB7Ci0JMTAwLCAxMDAsIDIwMCwgMjAwLCAyMDAsIDQwMCwgNDAwLCA0MDAsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqQUdDX2xldmVsW10gPSB7Ci0JIi05LjAiLCAiLTExLjUiLCAiLTE1LjAiLCAiLTE3LjUiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmlnX3NtYWxsX3ZhbHVlW10gPSB7Ci0JIi0zLjAiLCAiLTIuNSIsICItMi4wIiwgIi0xLjUiLCAiLTEuMCIsICItMC41IiwKLX07Ci0KLS8qCi0gKiB0aGlzIHdhcyBjb21wdXRlZCBhcyBwZWFrX3ZhbHVlW2ldID0gcG93KCg2My1pKSoxLjQyLDEuMDEzKQotICoKLSAqIFVEQTEzNDEgZGF0YXNoZWV0IG9uIHBhZ2UgMjE6IFBlYWsgdmFsdWUgKGRCKSA9IChQZWFrIGxldmVsIC0gNjMuNSkqNSpsb2cyCi0gKiBUaGVyZSBpcyBhbiB0YWJsZSB3aXRoIHRoZXNlIHZhbHVlcyBbbGV2ZWxdPXZhbHVlOiBbM109LTkwLjMxLCBbN109LTg0LjI5Ci0gKiBbNjFdPS0yLjc4LCBbNjJdID0gLTEuNDgsIFs2M10gPSAwLjAKLSAqIEkgdHJpZWQgdG8gY29tcHV0ZSBpdCwgYnV0IHVzaW5nIGJ1dCBldmVuIHVzaW5nIGxvZ2FyaXRobSB3aXRoIGJhc2UgZWl0aGVyIDEwIG9yIDIKLSAqIGkgd2FzJ24gYWJsZSB0byBnZXQgdmFsdWVzIGluIHRoZSB0YWJsZSBmcm9tIHRoZSBmb3JtdWxhLiBTbyBJIGNvbnN0cnVjdGVkIGFub3RoZXIKLSAqIGZvcm11bGEgKHNlZSBhYm92ZSkgdG8gaW50ZXJwb2xhdGUgdGhlIHZhbHVlcyBhcyBnb29kIGFzIHBvc3NpYmxlLiBJZiB0aGVyZSBpcyBzb21lCi0gKiBtaXN0YWtlLCBwbGVhc2UgY29udGFjdCBtZSBvbiB0b21hcy5rYXNwYXJla0BzZXpuYW0uY3ouIFRoYW5rcy4KLSAqIFVEQTEzNDFUUyBkYXRhc2hlZXQgaXMgYXZhaWxhYmxlIGF0OgotICogICBodHRwOi8vd3d3LXVzOS5zZW1pY29uZHVjdG9ycy5jb20vYWNyb2JhdC9kYXRhc2hlZXRzL1VEQTEzNDFUU18zLnBkZiAKLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnBlYWtfdmFsdWVbXSA9IHsKLQkiLUlORiBkQiIsICJOLkEuIiwgIk4uQSIsICI5MC4zMSBkQiIsICJOLkEuIiwgIk4uQS4iLCAiTi5BLiIsICItODQuMjkgZEIiLAotCSItODIuNjUgZEIiLCAiLTgxLjEzIGRCIiwgIi03OS42MSBkQiIsICItNzguMDkgZEIiLCAiLTc2LjU3IGRCIiwgIi03NS4wNSBkQiIsICItNzMuNTMgZEIiLAotCSItNzIuMDEgZEIiLCAiLTcwLjQ5IGRCIiwgIi02OC45NyBkQiIsICItNjcuNDUgZEIiLCAiLTY1LjkzIGRCIiwgIi02NC40MSBkQiIsICItNjIuOTAgZEIiLAotCSItNjEuMzggZEIiLCAiLTU5Ljg2IGRCIiwgIi01OC4zNSBkQiIsICItNTYuODMgZEIiLCAiLTU1LjMyIGRCIiwgIi01My44MCBkQiIsICItNTIuMjkgZEIiLAotCSItNTAuNzggZEIiLCAiLTQ5LjI2IGRCIiwgIi00Ny43NSBkQiIsICItNDYuMjQgZEIiLCAiLTQ0LjczIGRCIiwgIi00My4yMiBkQiIsICItNDEuNzEgZEIiLAotCSItNDAuMjAgZEIiLCAiLTM4LjY5IGRCIiwgIi0zNy4xOSBkQiIsICItMzUuNjggZEIiLCAiLTM0LjE3IGRCIiwgIi0zMi42NyBkQiIsICItMzEuMTcgZEIiLAotCSItMjkuNjYgZEIiLCAiLTI4LjE2IGRCIiwgIi0yNi42NiBkQiIsICItMjUuMTYgZEIiLCAiLTIzLjY2IGRCIiwgIi0yMi4xNiBkQiIsICItMjAuNjcgZEIiLAotCSItMTkuMTcgZEIiLCAiLTE3LjY4IGRCIiwgIi0xNi4xOSBkQiIsICItMTQuNzAgZEIiLCAiLTEzLjIxIGRCIiwgIi0xMS43MiBkQiIsICItMTAuMjQgZEIiLAotCSItOC43NiBkQiIsICItNy4yOCBkQiIsICItNS44MSBkQiIsICItNC4zNCBkQiIsICItMi44OCBkQiIsICItMS40MyBkQiIsICIwLjAwIGRCIiwKLX07Ci0KLXN0YXRpYyB2b2lkIHNuZF91ZGExMzQxX3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LCAKLQkJCQkgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZW50cnktPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHBlYWs7Ci0KLQlwZWFrID0gc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCBVREExMzQxX0RBVEExKTsKLQlpZiAocGVhayA8IDApCi0JCXBlYWsgPSAwOwotCQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzXG5cbiIsIHVkYS0+Y2FyZC0+bG9uZ25hbWUpOwotCi0JLy8gZm9yIGluZm9ybWF0aW9uIGFib3V0IGNvbXB1dGVkIHZhbHVlcyBzZWUgVURBMTM0MVRTIGRhdGFzaGVldCBwYWdlcyAxNSAtIDIxCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiREFDIHBvd2VyICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfREFDXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQURDIHBvd2VyICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfQURDXSA/ICJvbiIgOiAib2ZmIik7Ci0gCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNsb2NrIGZyZXF1ZW5jeSAgICAgOiAlc1xuIiwgZnNfbmFtZXNbdWRhLT5jZmdbQ01EX0ZTXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRhdGEgZm9ybWF0ICAgICAgICAgOiAlc1xuXG4iLCBmb3JtYXRfbmFtZXNbdWRhLT5jZmdbQ01EX0ZPUk1BVF1dKTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZpbHRlciBtb2RlICAgICAgICAgOiAlc1xuIiwgZmlsdGVyX25hbWVzW3VkYS0+Y2ZnW0NNRF9GSUxURVJdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgbW9kZSAgICAgICAgICA6ICVzXG4iLCBtaXhlcl9uYW1lc1t1ZGEtPmNmZ1tDTURfTUlYRVJdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiRGUtZW1waGFzaXMgICAgICAgICA6ICVzXG4iLCBkZWVtcF9uYW1lc1t1ZGEtPmNmZ1tDTURfREVFTVBdXSk7CQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBlYWsgZGV0ZWN0aW9uIHBvcy4gOiAlc1xuIiwgdWRhLT5jZmdbQ01EX1BFQUtdID8gImFmdGVyIiA6ICJiZWZvcmUiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJQZWFrIHZhbHVlICAgICAgICAgIDogJXNcblxuIiwgcGVha192YWx1ZVtwZWFrXSk7CQkKLQkKLQlzbmRfaXByaW50ZihidWZmZXIsICJBdXRvbWF0aWMgR2FpbiBDdHJsIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9BR0NdID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBR0MgYXR0YWNrIHRpbWUgICAgIDogJWQgbXNcbiIsIEFHQ19hdGltZVt1ZGEtPmNmZ1tDTURfQUdDX1RJTUVdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQUdDIGRlY2F5IHRpbWUgICAgICA6ICVkIG1zXG4iLCBBR0NfZHRpbWVbdWRhLT5jZmdbQ01EX0FHQ19USU1FXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFHQyBvdXRwdXQgbGV2ZWwgICAgOiAlcyBkQlxuXG4iLCBBR0NfbGV2ZWxbdWRhLT5jZmdbQ01EX0FHQ19MRVZFTF1dKTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk11dGUgICAgICAgICAgICAgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX01VVEVdID8gIm9uIiA6ICJvZmYiKTsKLQotCWlmICh1ZGEtPmNmZ1tDTURfVk9MVU1FXSA9PSAwKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogMCBkQlxuIik7Ci0JZWxzZSBpZiAodWRhLT5jZmdbQ01EX1ZPTFVNRV0gPCA2MikKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiVm9sdW1lICAgICAgICAgICAgICA6ICVkIGRCXG4iLCAtMSp1ZGEtPmNmZ1tDTURfVk9MVU1FXSArMSk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogLUlORiBkQlxuIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQmFzcyAgICAgICAgICAgICAgICA6ICVzXG4iLCBiYXNzX3ZhbHVlc1t1ZGEtPmNmZ1tDTURfRklMVEVSXV1bdWRhLT5jZmdbQ01EX0JBU1NdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiVHJlYmJsZSAgICAgICAgICAgICA6ICVkIGRCXG4iLCB1ZGEtPmNmZ1tDTURfRklMVEVSXSA/IDIqdWRhLT5jZmdbQ01EX1RSRUJCTEVdIDogMCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgR2FpbiAoNmRCKSAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfSUdBSU5dID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJPdXRwdXQgR2FpbiAoNmRCKSAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9PR0FJTl0gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1pYyBzZW5zaXRpdml0eSAgICAgOiAlc1xuIiwgbWljX3NlbnNfdmFsdWVbdWRhLT5jZmdbQ01EX01JQ11dKTsKLQotCQotCWlmKHVkYS0+Y2ZnW0NNRF9DSDFdIDwgMzEpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAxOiAtJWQuJWMgZEJcbiIsCi0JCQkgICAgKCh1ZGEtPmNmZ1tDTURfQ0gxXSA+PiAxKSAqIDMpICsgKHVkYS0+Y2ZnW0NNRF9DSDFdICYgMSksCi0JCQkgICAgdWRhLT5jZmdbQ01EX0NIMV0gJiAxID8gJzUnIDogJzAnKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAxOiAtSU5GIGRCXG4iKTsKLQlpZih1ZGEtPmNmZ1tDTURfQ0gyXSA8IDMxKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMjogLSVkLiVjIGRCXG4iLAotCQkJICAgICgodWRhLT5jZmdbQ01EX0NIMl0gPj4gMSkgKiAzKSArICh1ZGEtPmNmZ1tDTURfQ0gyXSAmIDEpLAotCQkJICAgIHVkYS0+Y2ZnW0NNRF9DSDJdICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMjogLUlORiBkQlxuIik7Ci0KLQlpZih1ZGEtPmNmZ1tDTURfSUddID4gNSkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgQW1wLiBHYWluIGNoIDI6ICVkLiVjIGRCXG4iLAotCQkJICAgICh1ZGEtPmNmZ1tDTURfSUddID4+IDEpIC0zLCB1ZGEtPmNmZ1tDTURfSUddICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCBBbXAuIEdhaW4gY2ggMjogJXMgZEJcbiIsICBpZ19zbWFsbF92YWx1ZVt1ZGEtPmNmZ1tDTURfSUddXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF91ZGExMzQxX3Byb2NfcmVnc19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIAotCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwkJCi0JaW50IHJlZzsKLQljaGFyIGJ1ZlsxMl07Ci0KLQlmb3IgKHJlZyA9IDA7IHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7IHJlZyArKykgewotCQlpZiAocmVnID09IGVtcHR5KQotCQkJY29udGludWU7Ci0JCWludDJzdHJfYmluOCh1ZGEtPnJlZ3NbcmVnXSwgYnVmKTsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgPSAlc1xuIiwgdWRhMTM0MV9yZWdfbmFtZXNbcmVnXSwgYnVmKTsKLQl9Ci0KLQlpbnQyc3RyX2Jpbjgoc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCBVREExMzQxX0RBVEExKSwgYnVmKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJEQVRBMSA9ICVzXG4iLCBidWYpOwotfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfdWRhMTM0MV9wcm9jX2luaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7Ci0KLQlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAidWRhMTM0MSIsICZlbnRyeSkpCi0JCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2xudCwgc25kX3VkYTEzNDFfcHJvY19yZWFkKTsKLQlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAidWRhMTM0MS1yZWdzIiwgJmVudHJ5KSkKLQkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjbG50LCBzbmRfdWRhMTM0MV9wcm9jX3JlZ3NfcmVhZCk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgTWl4ZXIgY29udHJvbHMgc2V0dGluZyAqLwotCi0vKiB7e3sgVURBMTM0MSBzaW5nbGUgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV9TSU5HTEUoeG5hbWUsIHdoZXJlLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmZvID0gc25kX3VkYTEzNDFfaW5mb19zaW5nbGUsIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF9zaW5nbGUsIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfc2luZ2xlLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gd2hlcmUgfCAocmVnIDw8IDUpIHwgKHNoaWZ0IDw8IDkpIHwgKG1hc2sgPDwgMTIpIHwgKGludmVydCA8PCAxOCkgXAotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2luZm9fc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0KLQl1aW5mby0+dHlwZSA9IG1hc2sgPT0gMSA/IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTiA6IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gbWFzazsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMTsKLSAgICAgICAgCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB1ZGEtPmNmZ1t3aGVyZV07Ci0JaWYgKGludmVydCkKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtYXNrIC0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9wdXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCByZWcgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gNSkgJiAxNTsKLQlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOSkgJiA3OwotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMTsKLQl1bnNpZ25lZCBzaG9ydCB2YWw7Ci0KLQl2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiBtYXNrKTsKLQlpZiAoaW52ZXJ0KQotCQl2YWwgPSBtYXNrIC0gdmFsOwotCi0JdWRhLT5jZmdbd2hlcmVdID0gdmFsOwotCXJldHVybiBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWcsIG1hc2ssIHNoaWZ0LCB2YWwsIEZMVVNIKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBVREExMzQxIGVudW0gZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV9FTlVNKHhuYW1lLCB3aGVyZSwgcmVnLCBzaGlmdCwgbWFzaywgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fZW51bSwgXAotICAuZ2V0ID0gc25kX3VkYTEzNDFfZ2V0X2VudW0sIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfZW51bSwgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZyA8PCA1KSB8IChzaGlmdCA8PCA5KSB8IChtYXNrIDw8IDEyKSB8IChpbnZlcnQgPDwgMTgpIFwKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsKLQljb25zdCBjaGFyICoqdGV4dHM7Ci0JCi0JLy8gdGhpcyByZWdpc3RlciB3ZSBkb24ndCBoYW5kbGUgdGhpcyB3YXkKLQlpZiAoIXVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IHVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV07Ci0KLQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdKQotCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXSAtIDE7Ci0KLQl0ZXh0cyA9IHVkYTEzNDFfZW51bV9uYW1lc1t3aGVyZV07Ci0Jc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0gICAgICAgIAotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB1ZGEtPmNmZ1t3aGVyZV07CQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgcmVnID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgNzsKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQotCXVkYS0+Y2ZnW3doZXJlXSA9ICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICYgbWFzayk7Ci0JCi0JcmV0dXJuIHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZywgbWFzaywgc2hpZnQsIHVkYS0+Y2ZnW3doZXJlXSwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFVEQTEzNDEgMnJlZ3MgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV8yUkVHUyh4bmFtZSwgd2hlcmUsIHJlZ18xLCByZWdfMiwgc2hpZnRfMSwgc2hpZnRfMiwgbWFza18xLCBtYXNrXzIsIGludmVydCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fMnJlZ3MsIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF8ycmVncywgLnB1dCA9IHNuZF91ZGExMzQxX3B1dF8ycmVncywgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZ18xIDw8IDUpIHwgKHJlZ18yIDw8IDkpIHwgKHNoaWZ0XzEgPDwgMTMpIHwgKHNoaWZ0XzIgPDwgMTYpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIChtYXNrXzEgPDwgMTkpIHwgKG1hc2tfMiA8PCAyNSkgfCAoaW52ZXJ0IDw8IDMxKSBcCi19Ci0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvXzJyZWdzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7Ci0JaW50IG1hc2s7Ci0gICAgICAgIAotCW1hc2sgPSAobWFza18yICsgMSkgKiAobWFza18xICsgMSkgLSAxOwotCXVpbmZvLT50eXBlID0gbWFzayA9PSAxID8gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOIDogU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBtYXNrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2dldF8ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7ICAgICAgICAKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDMxKSAmIDE7Ci0JaW50IG1hc2s7Ci0KLQltYXNrID0gKG1hc2tfMiArIDEpICogKG1hc2tfMSArIDEpIC0gMTsKLQotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdWRhLT5jZmdbd2hlcmVdOwotCWlmIChpbnZlcnQpCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWFzayAtIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF8ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7ICAgICAgICAKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IHJlZ18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHJlZ18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgMTU7ICAgICAgICAKLQlpbnQgc2hpZnRfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMykgJiA3OwotCWludCBzaGlmdF8yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDc7Ci0JaW50IG1hc2tfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiA2MzsKLQlpbnQgbWFza18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI1KSAmIDYzOyAgICAgICAgCi0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAzMSkgJiAxOwotCWludCBtYXNrOwotCXVuc2lnbmVkIHNob3J0IHZhbDEsIHZhbDIsIHZhbDsKLQotCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotICAgICAgICAgCi0JbWFzayA9IChtYXNrXzIgKyAxKSAqIChtYXNrXzEgKyAxKSAtIDE7Ci0KLQl2YWwxID0gdmFsICYgbWFza18xOwotCXZhbDIgPSAodmFsIC8gKG1hc2tfMSArIDEpKSAmIG1hc2tfMjsgICAgICAgIAotCi0JaWYgKGludmVydCkgewotCQl2YWwxID0gbWFza18xIC0gdmFsMTsKLQkJdmFsMiA9IG1hc2tfMiAtIHZhbDI7Ci0JfQotCi0JdWRhLT5jZmdbd2hlcmVdID0gaW52ZXJ0ID8gbWFzayAtIHZhbCA6IHZhbDsKLSAgICAgICAgCi0JLy9GSVhNRSAtIHJldHVybiB2YWx1ZQotCXNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZ18xLCBtYXNrXzEsIHNoaWZ0XzEsIHZhbDEsIEZMVVNIKTsKLQlyZXR1cm4gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnXzIsIG1hc2tfMiwgc2hpZnRfMiwgdmFsMiwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLSAgCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3VkYTEzNDFfY29udHJvbHNbXSA9IHsKLQlVREExMzQxX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIENNRF9NVVRFLCBkYXRhMF8yLCAyLCAxLCAxKSwKLQlVREExMzQxX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIENNRF9WT0xVTUUsIGRhdGEwXzAsIDAsIDYzLCAxKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJCYXNzIFBsYXliYWNrIFZvbHVtZSIsIENNRF9CQVNTLCBkYXRhMF8xLCAyLCAxNSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIlRyZWJsZSBQbGF5YmFjayBWb2x1bWUiLCBDTURfVFJFQkJMRSwgZGF0YTBfMSwgMCwgMywgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiSW5wdXQgR2FpbiBTd2l0Y2giLCBDTURfSUdBSU4sIHN0YXQxLCA1LCAxLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiT3V0cHV0IEdhaW4gU3dpdGNoIiwgQ01EX09HQUlOLCBzdGF0MSwgNiwgMSwgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiTWl4ZXIgR2FpbiBDaGFubmVsIDEgVm9sdW1lIiwgQ01EX0NIMSwgZXh0MCwgMCwgMzEsIDEpLAotCVVEQTEzNDFfU0lOR0xFKCJNaXhlciBHYWluIENoYW5uZWwgMiBWb2x1bWUiLCBDTURfQ0gyLCBleHQxLCAwLCAzMSwgMSksCi0KLQlVREExMzQxX1NJTkdMRSgiTWljIFNlbnNpdGl2aXR5IFZvbHVtZSIsIENNRF9NSUMsIGV4dDIsIDIsIDcsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIkFHQyBPdXRwdXQgTGV2ZWwiLCBDTURfQUdDX0xFVkVMLCBleHQ2LCAwLCAzLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiQUdDIFRpbWUgQ29uc3RhbnQiLCBDTURfQUdDX1RJTUUsIGV4dDYsIDIsIDcsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJBR0MgVGltZSBDb25zdGFudCBTd2l0Y2giLCBDTURfQUdDLCBleHQ0LCA0LCAxLCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJEQUMgUG93ZXIiLCBDTURfREFDLCBzdGF0MSwgMCwgMSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIkFEQyBQb3dlciIsIENNRF9BREMsIHN0YXQxLCAxLCAxLCAwKSwKLQotCVVEQTEzNDFfRU5VTSgiUGVhayBkZXRlY3Rpb24iLCBDTURfUEVBSywgZGF0YTBfMiwgNSwgMSwgMCksCi0JVURBMTM0MV9FTlVNKCJEZS1lbXBoYXNpcyIsIENNRF9ERUVNUCwgZGF0YTBfMiwgMywgMywgMCksCi0JVURBMTM0MV9FTlVNKCJNaXhlciBtb2RlIiwgQ01EX01JWEVSLCBleHQyLCAwLCAzLCAwKSwKLQlVREExMzQxX0VOVU0oIkZpbHRlciBtb2RlIiwgQ01EX0ZJTFRFUiwgZGF0YTBfMiwgMCwgMywgMCksCi0KLQlVREExMzQxXzJSRUdTKCJHYWluIElucHV0IEFtcGxpZmllciBHYWluIChjaGFubmVsIDIpIiwgQ01EX0lHLCBleHQ0LCBleHQ1LCAwLCAwLCAzLCAzMSwgMCksCi19OwotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2ZyZWUoc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlsM19kZXRhY2hfY2xpZW50KGNsbnQpOyAvLyBjYWxscyBrZnJlZSBmb3IgZHJpdmVyX2RhdGEgKHN0cnVjdCB1ZGExMzQxKQotCWtmcmVlKGNsbnQpOwotfQotCi1zdGF0aWMgaW50IHVkYTEzNDFfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKLQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2luaXQgc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICoqY2xudHApCi17Ci0Jc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7Ci0JCS5kZXZfZnJlZSA9ICAgICB1ZGExMzQxX2Rldl9mcmVlLAotCX07Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudDsKLQlpbnQgaWR4LCBlcnI7Ci0KLQlpZiAoc25kX0JVR19PTighY2FyZCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbG50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgICAKLQlpZiAoKGVyciA9IGwzX2F0dGFjaF9jbGllbnQoY2xudCwgImwzLWJpdC1zYTExMDAtZ3BpbyIsIFVEQTEzNDFfQUxTQV9OQU1FKSkpIHsKLQkJa2ZyZWUoY2xudCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF91ZGExMzQxX2NvbnRyb2xzKTsgaWR4KyspIHsKLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF91ZGExMzQxX2NvbnRyb2xzW2lkeF0sIGNsbnQpKSkgPCAwKSB7Ci0JCQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfQ09ERUMsIGNsbnQsICZvcHMpKSA8IDApIHsKLQkJdWRhMTM0MV9mcmVlKGNsbnQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCSpjbG50cCA9IGNsbnQ7Ci0Jc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlVEQTEzNDFUUyBNaXhlciIpOwotCSgoc3RydWN0IHVkYTEzNDEgKiljbG50LT5kcml2ZXJfZGF0YSktPmNhcmQgPSBjYXJkOwotICAgICAgICAKLQlzbmRfdWRhMTM0MV9wcm9jX2luaXQoY2FyZCwgY2xudCk7Ci0gICAgICAgIAotCXJldHVybiAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IEwzIG9wZXJhdGlvbnMgKi8KLQotc3RhdGljIGludCB1ZGExMzQxX2F0dGFjaChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGE7Ci0KLQl1ZGEgPSBremFsbG9jKHNpemVvZigqdWRhKSwgMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1ZGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogaW5pdCBmaXhlZCBwYXJ0cyBvZiBteSBjb3B5IG9mIHJlZ2lzdGVycyAqLwotCXVkYS0+cmVnc1tzdGF0MF0gICA9IFNUQVQwOwotCXVkYS0+cmVnc1tzdGF0MV0gICA9IFNUQVQxOwotCi0JdWRhLT5yZWdzW2RhdGEwXzBdID0gREFUQTBfMDsKLQl1ZGEtPnJlZ3NbZGF0YTBfMV0gPSBEQVRBMF8xOwotCXVkYS0+cmVnc1tkYXRhMF8yXSA9IERBVEEwXzI7Ci0KLQl1ZGEtPndyaXRlID0gc25kX3VkYTEzNDFfY29kZWNfd3JpdGU7Ci0JdWRhLT5yZWFkID0gc25kX3VkYTEzNDFfY29kZWNfcmVhZDsKLSAgCi0Jc3Bpbl9sb2NrX2luaXQoJnVkYS0+cmVnX2xvY2spOwotICAgICAgICAKLQljbG50LT5kcml2ZXJfZGF0YSA9IHVkYTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdWRhMTM0MV9kZXRhY2goc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlrZnJlZShjbG50LT5kcml2ZXJfZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXVkYTEzNDFfY29tbWFuZChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGNtZCAhPSBDTURfUkVBRF9SRUcpCi0JCXJldHVybiBzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgY21kLCAoaW50KSBhcmcsIEZMVVNIKTsKLQotCXJldHVybiBzbmRfdWRhMTM0MV9jb2RlY19yZWFkKGNsbnQsIChpbnQpIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgdWRhMTM0MV9vcGVuKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0JdWRhLT5hY3RpdmUgPSAxOwotCi0JLyogaW5pdCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1JFU0VULCAwLCBSRUdTX09OTFkpOwotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRlMsIEYyNTYsIEZMVVNIKTsgICAgICAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRk9STUFULCBMU0IxNiwgRkxVU0gpOyAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfT0dBSU4sIE9OLCBGTFVTSCk7ICAgICAgLy8gZGVmYXVsdCBvZmYgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0lHQUlOLCBPTiwgRkxVU0gpOyAgICAgIC8vIGRlZmF1bHQgb2ZmIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9EQUMsIE9OLCBGTFVTSCk7CS8vID8/PyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BREMsIE9OLCBGTFVTSCk7CS8vID8/PyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9WT0xVTUUsIDIwLCBGTFVTSCk7ICAgICAvLyBkZWZhdWx0IDBkQiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQkFTUywgMCwgUkVHU19PTkxZKTsgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfVFJFQkJMRSwgMCwgUkVHU19PTkxZKTsgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfUEVBSywgQUZURVIsIFJFR1NfT05MWSk7Ly8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfREVFTVAsIE5PTkUsIFJFR1NfT05MWSk7Ly8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCS8vYXQgdGhpcyBtb21lbnQgc2hvdWxkIGJlIFFNVVRFRCBieSBoMzYwMF9hdWRpb19pbml0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9NVVRFLCBPRkYsIFJFR1NfT05MWSk7ICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9GSUxURVIsIE1BWCwgRkxVU0gpOyAgICAvLyBkZWZhdWwgZmxhdCBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQ0gxLCAzMSwgRkxVU0gpOyAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQ0gyLCA0LCBGTFVTSCk7ICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfTUlDLCA0LCBGTFVTSCk7ICAgICAgICAgLy8gZGVmYXVsdCAwZEIgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX01JWEVSLCBNSVhFUiwgRkxVU0gpOyAgIC8vIGRlZmF1bHQgZG91Yi5kaWYubW9kZSAgICAgICAgICAKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQywgT0ZGLCBGTFVTSCk7ICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0lHLCAwLCBGTFVTSCk7ICAgICAgICAgIC8vIHVua25vd24gc3RhdGUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQ19USU1FLCAwLCBGTFVTSCk7ICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQ19MRVZFTCwgMCwgRkxVU0gpOyAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2Nsb3NlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0JdWRhLT5hY3RpdmUgPSAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IE1vZHVsZSBhbmQgTDMgaW5pdGlhbGl6YXRpb24gKi8KLQotc3RhdGljIHN0cnVjdCBsM19vcHMgdWRhMTM0MV9vcHMgPSB7Ci0JLm9wZW4gPQkJdWRhMTM0MV9vcGVuLAotCS5jb21tYW5kID0JdWRhMTM0MV9jb21tYW5kLAotCS5jbG9zZSA9CXVkYTEzNDFfY2xvc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGwzX2RyaXZlciB1ZGExMzQxX2RyaXZlciA9IHsKLQkubmFtZSA9CQlVREExMzQxX0FMU0FfTkFNRSwKLQkuYXR0YWNoX2NsaWVudCA9IHVkYTEzNDFfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50ID0gdWRhMTM0MV9kZXRhY2gsCi0JLm9wcyA9CQkmdWRhMTM0MV9vcHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB1ZGExMzQxX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gbDNfYWRkX2RyaXZlcigmdWRhMTM0MV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdWRhMTM0MV9leGl0KHZvaWQpCi17Ci0JbDNfZGVsX2RyaXZlcigmdWRhMTM0MV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh1ZGExMzQxX2luaXQpOwotbW9kdWxlX2V4aXQodWRhMTM0MV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBVREExMzQxIENPREVDIGRyaXZlciBmb3IgQUxTQSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VURBMTM0MSxVREExMzQxVFN9fSIpOwotCi1FWFBPUlRfU1lNQk9MKHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KTsKLQotLyogfX19ICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiB0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9LY29uZmlnIGIvc291bmQvaXNhL0tjb25maWcKaW5kZXggY2UwYWEwNC4uYzVjOWE5MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL0tjb25maWcKKysrIGIvc291bmQvaXNhL0tjb25maWcKQEAgLTU2LDggKzU2LDggQEAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBRDE4NDggKEFuYWxvZyBEZXZpY2VzKSBvcgogCSAgQ1M0MjQ4IChDaXJydXMgTG9naWMgLSBDcnlzdGFsIFNlbWljb25kdWN0b3JzKSBjaGlwcy4KIAkgIAotCSAgRm9yIG5ld2VyIGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljLCB1c2UgdGhlIENTNDIzMSwgQ1M0MjMyIG9yCi0JICBDUzQyMzYrIGRyaXZlcnMuCisJICBGb3IgbmV3ZXIgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMsIHVzZSB0aGUgQ1M0MjMxIG9yIENTNDIzMisKKwkgIGRyaXZlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hZDE4NDguCkBAIC05NCw2ICs5NCw4IEBACiAJdHJpc3RhdGUgIkMtTWVkaWEgQ01JODMzMCIKIAlzZWxlY3QgU05EX1dTU19MSUIKIAlzZWxlY3QgU05EX1NCMTZfRFNQCisJc2VsZWN0IFNORF9PUEwzX0xJQgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIEMtTWVkaWEgQ01JODMzMCBjaGlwLgpAQCAtMTEyLDI2ICsxMTQsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzEuCiAKLWNvbmZpZyBTTkRfQ1M0MjMyCi0JdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzMiBkcml2ZXIiCi0Jc2VsZWN0IFNORF9PUEwzX0xJQgotCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKLQlzZWxlY3QgU05EX1dTU19MSUIKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjMyIGNoaXBzIGZyb20gQ2lycnVzCi0JICBMb2dpYyAtIENyeXN0YWwgU2VtaWNvbmR1Y3RvcnMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzIuCi0KIGNvbmZpZyBTTkRfQ1M0MjM2Ci0JdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzNisgZHJpdmVyIgorCXRyaXN0YXRlICJHZW5lcmljIENpcnJ1cyBMb2dpYyBDUzQyMzIvQ1M0MjM2KyBkcml2ZXIiCiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1dTU19MSUIKIAloZWxwCi0JICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzNSxDUzQyMzYsQ1M0MjM3QixDUzQyMzhCLAotCSAgQ1M0MjM5IGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbCBTZW1pY29uZHVjdG9ycy4KKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjMyLENTNDIzNSxDUzQyMzYsQ1M0MjM3QiwKKwkgIENTNDIzOEIsQ1M0MjM5IGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbAorCSAgU2VtaWNvbmR1Y3RvcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzYuCkBAIC0zNzcsMTQgKzM2OCwxNyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXNnYWxheHkuCiAKIGNvbmZpZyBTTkRfU1NDQVBFCi0JdHJpc3RhdGUgIkVuc29uaXEgU291bmRTY2FwZSBQblAgZHJpdmVyIgorCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgZHJpdmVyIgogCXNlbGVjdCBTTkRfSFdERVAKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9XU1NfTElCCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVuc29uaXEgU291bmRTY2FwZSBQblAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFbnNvbmlxIFNvdW5kU2NhcGUgCiAJICBzb3VuZGNhcmRzLgogCisJICBUaGUgUENNIGF1ZGlvIGlzIHN1cHBvcnRlZCBvbiBTb3VuZFNjYXBlIENsYXNzaWMsIEVsaXRlLCBQblAKKwkgIGFuZCBWSVZPIGNhcmRzLiBUaGUgTUlESSBzdXBwb3J0IGlzIHZlcnkgZXhwZXJpbWVudGFsLgorCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtc3NjYXBlLgogCkBAIC00MTEsNSArNDA1LDM2IEBACiAJICB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBmaXJtd2FyZSBmaWxlcyBmcm9tIHRoZQogCSAgYWxzYS1maXJtd2FyZSBwYWNrYWdlLgogCitjb25maWcgU05EX01TTkRfUElOTkFDTEUKKwl0cmlzdGF0ZSAiVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvRmlqaSBkcml2ZXIiCisJZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvCisJICBGaWppIHNvdW5kY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1tc25kLXBpbm5hY2xlLgorCitjb25maWcgU05EX01TTkRfQ0xBU1NJQworCXRyaXN0YXRlICJTdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGksIE1vbnRlcmV5IgorCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgTSBoZXJlIGlmIHlvdSBoYXZlIGEgVHVydGxlIEJlYWNoIE11bHRpU291bmQgQ2xhc3NpYywgVGFoaXRpIG9yCisJICBNb250ZXJleSAobm90IGZvciB0aGUgUGlubmFjbGUgb3IgRmlqaSkuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kPiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uCisJICBhYm91dCB0aGlzIGRyaXZlci4gIE5vdGUgdGhhdCBpdCBoYXMgYmVlbiBkaXNjb250aW51ZWQsIGJ1dCB0aGUKKwkgIFZveWV0cmEgVHVydGxlIEJlYWNoIGtub3dsZWRnZSBiYXNlIGVudHJ5IGZvciBpdCBpcyBzdGlsbCBhdmFpbGFibGUKKwkgIGF0IDxodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLW1zbmQtY2xhc3NpYy4KKwogZW5kaWYJIyBTTkRfSVNBCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9NYWtlZmlsZSBiL3NvdW5kL2lzYS9NYWtlZmlsZQppbmRleCA2M2FmMTNkLi5iOTA2YjlhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL01ha2VmaWxlCkBAIC0yNiw1ICsyNiw1IEBACiBvYmotJChDT05GSUdfU05EX1NHQUxBWFkpICs9IHNuZC1zZ2FsYXh5Lm8KIG9iai0kKENPTkZJR19TTkRfU1NDQVBFKSArPSBzbmQtc3NjYXBlLm8KIAotb2JqLSQoQ09ORklHX1NORCkgKz0gYWQxODE2YS8gYWQxODQ4LyBjczQyM3gvIGVzMTY4OC8gZ3VzLyBvcHRpOXh4LyBcCitvYmotJChDT05GSUdfU05EKSArPSBhZDE4MTZhLyBhZDE4NDgvIGNzNDIzeC8gZXMxNjg4LyBndXMvIG1zbmQvIG9wdGk5eHgvIFwKIAkJICAgICBzYi8gd2F2ZWZyb250LyB3c3MvCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKaW5kZXggNzc1MjQyNC4uYmJjYmY5MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCisrKyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYwpAQCAtMTU2LDEwICsxNTYsMTIgQEAKIAlzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSAqYWNhcmQ7CiAJc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKKwlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSAoc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYWQxODE2YV9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CkBAIC0xOTQsNiArMTk2LDEyIEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKKwllcnJvciA9IHNuZF9hZDE4MTZhX3RpbWVyKGNoaXAsIDAsICZ0aW1lcik7CisJaWYgKGVycm9yIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJaWYgKG1wdV9wb3J0W2Rldl0gPiAwKSB7CiAJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCiAJCQkJCW1wdV9wb3J0W2Rldl0sIDAsIG1wdV9pcnFbZGV2XSwgSVJRRl9ESVNBQkxFRCwKQEAgLTIwNywxMSArMjE1LDggQEAKIAkJCQkgICAgT1BMM19IV19BVVRPLCAwLCAmb3BsMykgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4LlxuIiwgZm1fcG9ydFtkZXZdLCBmbV9wb3J0W2Rldl0gKyAyKTsKIAkJfSBlbHNlIHsKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgMSwgMikpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKSB7CisJCQllcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnJvciA8IDApIHsKIAkJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCmluZGV4IDNiZmNhN2MuLjA1YWVmOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKKysrIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYwpAQCAtMzcsNyArMzcsNyBAQAogCQlpZiAoaW5iKEFEMTgxNkFfUkVHKEFEMTgxNkFfQ0hJUF9TVEFUVVMpKSAmIEFEMTgxNkFfUkVBRFkpCiAJCQlyZXR1cm4gMDsKIAotCXNuZF9wcmludGsoImNoaXAgYnVzeS5cbiIpOworCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJjaGlwIGJ1c3kuXG4iKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJpbnZhbGlkIHRyaWdnZXIgbW9kZSAweCV4LlxuIiwgd2hhdCk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJpbnZhbGlkIHRyaWdnZXIgbW9kZSAweCV4LlxuIiwgd2hhdCk7CiAJCWVycm9yID0gLUVJTlZBTDsKIAl9CiAKQEAgLTM3Nyw3ICszNzcsNiBAQAogCS5maWZvX3NpemUgPQkJMCwKIH07CiAKLSNpZiAwIC8qIG5vdCB1c2VkIG5vdyAqLwogc3RhdGljIGludCBzbmRfYWQxODE2YV90aW1lcl9jbG9zZShzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAgPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7CkBAIC00NDIsOCArNDQxLDYgQEAKIAkuc3RhcnQgPQlzbmRfYWQxODE2YV90aW1lcl9zdGFydCwKIAkuc3RvcCA9CQlzbmRfYWQxODE2YV90aW1lcl9zdG9wLAogfTsKLSNlbmRpZiAvKiBub3QgdXNlZCBub3cgKi8KLQogCiBzdGF0aWMgaW50IHNuZF9hZDE4MTZhX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CkBAIC01NjgsNyArNTY1LDcgQEAKIAljYXNlIEFEMTgxNkFfSFdfQUQxODE1OglyZXR1cm4gIkFEMTgxNSI7CiAJY2FzZSBBRDE4MTZBX0hXX0FEMThNQVgxMDogcmV0dXJuICJBRDE4bWF4MTAiOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIlVua25vd24gY2hpcCB2ZXJzaW9uICVkOiVkLlxuIiwKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gY2hpcCB2ZXJzaW9uICVkOiVkLlxuIiwKIAkJCWNoaXAtPnZlcnNpb24sIGNoaXAtPmhhcmR3YXJlKTsKIAkJcmV0dXJuICJBRDE4MTZBIC0gdW5rbm93biI7CiAJfQpAQCAtNjg3LDcgKzY4NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwIC8qIG5vdCB1c2VkIG5vdyAqLwogaW50IF9fZGV2aW5pdCBzbmRfYWQxODE2YV90aW1lcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpCiB7CiAJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CkBAIC03MDksNyArNzA1LDYgQEAKIAkJKnJ0aW1lciA9IHRpbWVyOwogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIG5vdCB1c2VkIG5vdyAqLwogCiAvKgogICoKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDIyM2E2YzAuLjRiZWViNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtOTEsOSArOTEsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbbl0sIC0xLCBpcnFbbl0sIGRtYTFbbl0sIC0xLAogCQkJdGhpbmtwYWRbbl0gPyBXU1NfSFdfVEhJTktQQUQgOiBXU1NfSFdfREVURUNULApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkbGliLmMgYi9zb3VuZC9pc2EvYWRsaWIuYwppbmRleCAzNzRiNzE3Li43NDY1YWUwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWRsaWIuYworKysgYi9zb3VuZC9pc2EvYWRsaWIuYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgY3JlYXRlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWNhcmQtPnByaXZhdGVfZGF0YSA9IHJlcXVlc3RfcmVnaW9uKHBvcnRbbl0sIDQsIENSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hbHMxMDAuYyBiL3NvdW5kL2lzYS9hbHMxMDAuYwppbmRleCBmMWNlMzBmLi41ZmQ1MmU0IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWxzMTAwLmMKKysrIGIvc291bmQvaXNhL2FsczEwMC5jCkBAIC0xNjMsOSArMTYzLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkX2FsczEwMCAqYWNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FsczEwMCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FsczEwMCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYWxzMTAwX3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9henQyMzIwLmMgYi9zb3VuZC9pc2EvYXp0MjMyMC5jCmluZGV4IDNlNzRkMWEuLmY3YWE2MzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9henQyMzIwLmMKKysrIGIvc291bmQvaXNhL2F6dDIzMjAuYwpAQCAtMTg0LDkgKzE4NCwxMCBAQAogCXN0cnVjdCBzbmRfd3NzICpjaGlwOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9henQyMzIwKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYXp0MjMyMCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSAoc3RydWN0IHNuZF9jYXJkX2F6dDIzMjAgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYXp0MjMyMF9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY21pODMzMC5jIGIvc291bmQvaXNhL2NtaTgzMzAuYwppbmRleCBlNDlhZWM3Li5kZTgzNjA4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY21pODMzMC5jCisrKyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKQEAgLTMxLDExICszMSwxMSBAQAogICogIFRvIHF1aWNrbHkgbG9hZCB0aGUgbW9kdWxlLAogICoKICAqICBtb2Rwcm9iZSAtYSBzbmQtY21pODMzMCBzYnBvcnQ9MHgyMjAgc2JpcnE9NSBzYmRtYTg9MQotICogICAgc2JkbWExNj01IHdzc3BvcnQ9MHg1MzAgd3NzaXJxPTExIHdzc2RtYT0wCisgKiAgICBzYmRtYTE2PTUgd3NzcG9ydD0weDUzMCB3c3NpcnE9MTEgd3NzZG1hPTAgZm1wb3J0PTB4Mzg4CiAgKgogICogIFRoaXMgY2FyZCBoYXMgdHdvIG1peGVycyBhbmQgdHdvIFBDTSBkZXZpY2VzLiAgSSd2ZSBjaGVlc2VkIGl0IHN1Y2gKICAqICB0aGF0IHJlY29yZGluZyBhbmQgcGxheWJhY2sgY2FuIGJlIGRvbmUgdGhyb3VnaCB0aGUgc2FtZSBkZXZpY2UuCi0gKiAgVGhlIGRyaXZlciAibWFnaWNhbGx5IiByb3V0ZXMgdGhlIGNhcHR1cmluZyB0byB0aGUgQUQxODQ4IGNvZGVjLAorICogIFRoZSBkcml2ZXIgIm1hZ2ljYWxseSIgcm91dGVzIHRoZSBjYXB0dXJpbmcgdG8gdGhlIENNSTgzMzAgY29kZWMsCiAgKiAgYW5kIHBsYXliYWNrIHRvIHRoZSBTQjE2IGNvZGVjLiAgVGhpcyBhbGxvd3MgZm9yIGZ1bGwtZHVwbGV4IG1vZGUKICAqICB0byBzb21lIGV4dGVudC4KICAqICBUaGUgdXRpbGl0aWVzIGluIGFsc2EtdXRpbHMgYXJlIGF3YXJlIG9mIGJvdGggZGV2aWNlcywgc28gcGFzc2luZwpAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgorI2luY2x1ZGUgPHNvdW5kL29wbDMuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KICNpbmNsdWRlIDxzb3VuZC9zYi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIApAQCAtNzksNiArODEsOSBAQAogc3RhdGljIGxvbmcgd3NzcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CiBzdGF0aWMgaW50IHdzc2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKIHN0YXRpYyBpbnQgd3NzZG1hW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOworc3RhdGljIGxvbmcgZm1wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBsb25nIG1wdXBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBtcHVpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgQ01JODMzMCBzb3VuZGNhcmQuIik7CkBAIC0xMDcsNiArMTEyLDEyIEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod3NzZG1hLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3c3NkbWEsICJETUEgZm9yIENNSTgzMzAgV1NTIGRyaXZlci4iKTsKIAorbW9kdWxlX3BhcmFtX2FycmF5KGZtcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtcG9ydCwgIkZNIHBvcnQgIyBmb3IgQ01JODMzMCBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1cG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1wdXBvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgQ01JODMzMCBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1aXJxLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVpcnEsICJJUlEgIyBmb3IgQ01JODMzMCBNUFUtNDAxIHBvcnQuIik7CiAjaWZkZWYgQ09ORklHX1BOUAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CkBAIC0xNDksNiArMTYwLDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJc3RydWN0IHBucF9kZXYgKmNhcDsKIAlzdHJ1Y3QgcG5wX2RldiAqcGxheTsKKwlzdHJ1Y3QgcG5wX2RldiAqbXB1OwogI2VuZGlmCiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfd3NzICp3c3M7CkBAIC0xNjUsNyArMTc3LDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jbWk4MzMwX3BucGlkc1tdID0gewotCXsgLmlkID0gIkNNSTAwMDEiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQ01JMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKIAl7IC5pZCA9ICIiIH0KIH07CiAKQEAgLTIxOSw4ICsyMzEsMTAgQEAKIAkJQ01JODMzMF9STVVYM0QsIDUsIDEsIDEpLAogV1NTX1NJTkdMRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAwLAogCQlDTUk4MzMwX09VVFBVVFZPTCwgMywgMywgMCksCi1XU1NfU0lOR0xFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDTUk4MzMwX1JFQ01VWCwgMywgMSwgMSksCitXU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAorCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgNywgNywgMSwgMSksCitXU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgMCwgMCwgMzEsIDEpLAogV1NTX1NJTkdMRShTTkRSVl9DVExfTkFNRV9JRUM5NTgoIklucHV0ICIsIENBUFRVUkUsIFNXSVRDSCksIDAsCiAJCUNNSTgzMzBfUk1VWDNELCA3LCAxLCAxKSwKIFdTU19TSU5HTEUoU05EUlZfQ1RMX05BTUVfSUVDOTU4KCJJbnB1dCAiLCBQTEFZQkFDSywgU1dJVENIKSwgMCwKQEAgLTMyMywxNiArMzM3LDIxIEBACiAJaWYgKGFjYXJkLT5wbGF5ID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlhY2FyZC0+bXB1ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgaWQtPmRldnNbMl0uaWQsIE5VTEwpOworCWlmIChhY2FyZC0+cGxheSA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCiAJcGRldiA9IGFjYXJkLT5jYXA7CiAKIAllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIkNNSTgzMzAvQzNEIChBRDE4NDgpIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNNSTgzMzAvQzNEIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXdzc3BvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOwogCXdzc2RtYVtkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKIAl3c3NpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CisJZm1wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAxKTsKIAogCS8qIGFsbG9jYXRlIFNCMTYgcmVzb3VyY2VzICovCiAJcGRldiA9IGFjYXJkLT5wbGF5OwpAQCAtMzQ3LDYgKzM2NiwxNyBAQAogCXNiZG1hMTZbZGV2XSA9IHBucF9kbWEocGRldiwgMSk7CiAJc2JpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CiAKKwkvKiBhbGxvY2F0ZSBNUFUtNDAxIHJlc291cmNlcyAqLworCXBkZXYgPSBhY2FyZC0+bXB1OworCisJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ01JODMzMC9DM0QgKE1QVS00MDEpIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW1wdXBvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOworCW1wdWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNDY3LDI2ICs0OTcsMjkgQEAKIAogI2RlZmluZSBQRlgJImNtaTgzMzA6ICIKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2NtaTgzMzBfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2NtaTgzMzBfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY21pODMzMCAqYWNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY21pODMzMCkpOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJjb3VsZCBub3QgZ2V0IGEgbmV3IGNhcmRcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGVycjsKIAl9CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJYWNhcmQtPmNhcmQgPSBjYXJkOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jbWk4MzMwX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NtaTgzMzAgKmFjYXJkOwogCWludCBpLCBlcnI7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgd3NzcG9ydFtkZXZdICsgNCwgLTEsCkBAIC00OTQsMTEgKzUyNywxMSBAQAogCQkJICAgICB3c3NkbWFbZGV2XSwgLTEsCiAJCQkgICAgIFdTU19IV19ERVRFQ1QsIDAsICZhY2FyZC0+d3NzKTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKEFEMTg0OCkgZGV2aWNlIGJ1c3k/P1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQ01JODMzMCkgZGV2aWNlIGJ1c3k/P1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChhY2FyZC0+d3NzLT5oYXJkd2FyZSAhPSBXU1NfSFdfQ01JODMzMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKEFEMTg0OCkgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQ01JODMzMCkgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNTMwLDYgKzU2MywyNyBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CisJaWYgKGZtcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsCisJCQkJICAgIGZtcG9ydFtkZXZdLCBmbXBvcnRbZGV2XSArIDIsCisJCQkJICAgIE9QTDNfSFdfQVVUTywgMCwgJm9wbDMpIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkgICAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseCA/XG4iLAorCQkJCSAgIGZtcG9ydFtkZXZdLCBmbXBvcnRbZGV2XSArIDIpOworCQl9IGVsc2UgeworCQkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChtcHVwb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCisJCQkJCW1wdXBvcnRbZGV2XSwgMCwgbXB1aXJxW2Rldl0sCisJCQkJCUlSUUZfRElTQUJMRUQsIE5VTEwpIDwgMCkKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4LlxuIiwKKwkJCQltcHVwb3J0W2Rldl0pOworCX0KIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDTUk4MzMwL0MzRCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJDLU1lZGlhIENNSTgzMzAvQzNEIik7CkBAIC01NjQsOSArNjE4LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfY21pODMzMF9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTYyOCw5ICs2ODIsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCQkJICAgICAgIAotCWNhcmQgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCWlmICgocmVzID0gc25kX2NtaTgzMzBfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJQblAgZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlIGIvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZQppbmRleCA1ODcwY2EyLi42ZDM5N2U4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUKQEAgLTMsMTMgKzMsMTEgQEAKICMgQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+CiAjCiAKLXNuZC1jczQyMzYtbGliLW9ianMgOj0gY3M0MjM2X2xpYi5vCiBzbmQtY3M0MjMxLW9ianMgOj0gY3M0MjMxLm8KLXNuZC1jczQyMzItb2JqcyA6PSBjczQyMzIubwotc25kLWNzNDIzNi1vYmpzIDo9IGNzNDIzNi5vCitzbmQtY3M0MjM2LW9ianMgOj0gY3M0MjM2Lm8gY3M0MjM2X2xpYi5vCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKIG9iai0kKENPTkZJR19TTkRfQ1M0MjMxKSArPSBzbmQtY3M0MjMxLm8KLW9iai0kKENPTkZJR19TTkRfQ1M0MjMyKSArPSBzbmQtY3M0MjMyLm8KLW9iai0kKENPTkZJR19TTkRfQ1M0MjM2KSArPSBzbmQtY3M0MjM2Lm8gc25kLWNzNDIzNi1saWIubworb2JqLSQoQ09ORklHX1NORF9DUzQyMzYpICs9IHNuZC1jczQyMzYubworCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCmluZGV4IGYwMTlkNDQuLmNiOTE1M2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwpAQCAtOTUsOSArOTUsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbbl0sIC0xLCBpcnFbbl0sIGRtYTFbbl0sIGRtYTJbbl0sCiAJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhZDJlNi4uMDAwMDAwMAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jZGVmaW5lIENTNDIzMgotI2luY2x1ZGUgImNzNDIzNi5jIgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKaW5kZXggMDE5Yzk0MC4uYTA3NmE2YyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCkBAIC0zMywxNyArMzMsMTQgQEAKIAogTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSNpZmRlZiBDUzQyMzIKLU1PRFVMRV9ERVNDUklQVElPTigiQ2lycnVzIExvZ2ljIENTNDIzMiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjMyLTkiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1R1cnRsZSBCZWFjaCxUQlMtMjAwMH0sIgogCQkie1R1cnRsZSBCZWFjaCxUcm9wZXogUGx1c30sIgogCQkie1NJQyBDcnlzdGFsV2F2ZSAzMn0sIgogCQkie0hld2xldHQgUGFja2FyZCxPbW5pYm9vayA1NTAwfSwiCiAJCSJ7VGVycmFUZWMsTWFlc3RybyAzMi85Nn0sIgotCQkie1BoaWxpcHMsUENBNzBQU319Iik7Ci0jZWxzZQotTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjM1LTkiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM1fSwiCisJCSJ7UGhpbGlwcyxQQ0E3MFBTfX0sIgorCQkie3tDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzNX0sIgogCQkie0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM2fSwiCiAJCSJ7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzd9LCIKIAkJIntDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzOH0sIgpAQCAtNzAsMTUgKzY3LDExIEBACiAJCSJ7VHlwaG9vbiBTb3VuZHN5c3RlbSxDUzQyMzZCfSwiCiAJCSJ7VHVydGxlIEJlYWNoLE1hbGlidX0sIgogCQkie1Vua25vd24sRGlnaXRhbCBQQyA1MDAwIE9uYm9hcmR9fSIpOwotI2VuZGlmCiAKLSNpZmRlZiBDUzQyMzIKLSNkZWZpbmUgSURFTlQgIkNTNDIzMiIKLSNkZWZpbmUgREVWX05BTUUgImNzNDIzMiIKLSNlbHNlCi0jZGVmaW5lIElERU5UICJDUzQyMzYrIgotI2RlZmluZSBERVZfTkFNRSAiY3M0MjM2IgotI2VuZGlmCitNT0RVTEVfQUxJQVMoInNuZF9jczQyMzIiKTsKKworI2RlZmluZSBJREVOVCAiQ1M0MjMyKyIKKyNkZWZpbmUgREVWX05BTUUgImNzNDIzMisiCiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KQEAgLTEyOCw5ICsxMjEsNyBAQAogI2lmZGVmIENPTkZJR19QTlAKIHN0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucGNfcmVnaXN0ZXJlZDsKLSNpZmRlZiBDUzQyMzIKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7Ci0jZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgewpAQCAtMTQ1LDExICsxMzYsMTAgQEAKIAogI2lmZGVmIENPTkZJR19QTlAKIAotI2lmZGVmIENTNDIzMgogLyoKICAqIFBOUCBCSU9TCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbmRfY3M0MjMyX3BucGJpb3NpZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbmRfY3M0MjN4X3BucGJpb3NpZHNbXSA9IHsKIAl7IC5pZCA9ICJDU0MwMTAwIiB9LAogCXsgLmlkID0gIkNTQzAwMDAiIH0sCiAJLyogR3VpbGxlbW90IFR1cnRsZWJlYWNoIHNvbWV0aGluZyBhcHBlYXJzIHRvIGJlIGNzNDIzMiBjb21wYXRpYmxlCkBAIC0xNTcsMTAgKzE0Nyw4IEBACiAJeyAuaWQgPSAiR0lNMDEwMCIgfSwKIAl7IC5pZCA9ICIiIH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc25kX2NzNDIzMl9wbnBiaW9zaWRzKTsKLSNlbmRpZiAvKiBDUzQyMzIgKi8KK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBzbmRfY3M0MjN4X3BucGJpb3NpZHMpOwogCi0jaWZkZWYgQ1M0MjMyCiAjZGVmaW5lIENTNDIzWF9JU0FQTlBfRFJJVkVSCSJjczQyMzJfaXNhcG5wIgogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2NzNDIzeF9wbnBpZHNbXSA9IHsKIAkvKiBQaGlsaXBzIFBDQTcwUFMgKi8KQEAgLTE3OSwxMiArMTY3LDYgQEAKIAl7IC5pZCA9ICJDU0NmMDMyIiwgLmRldnMgPSB7IHsgIkNTQzAwMDAiIH0sIHsgIkNTQzAwMTAiIH0sIHsgIkNTQzAwMDMiIH0gfSB9LAogCS8qIE5ldGZpbml0eSAzMDAwIG9uLWJvYXJkIHNvdW5kY2FyZCAqLwogCXsgLmlkID0gIkNTQ2U4MjUiLCAuZGV2cyA9IHsgeyAiQ1NDMDEwMCIgfSwgeyAiQ1NDMDExMCIgfSwgeyAiQ1NDMDEwZiIgfSB9IH0sCi0JLyogLS0tICovCi0JeyAuaWQgPSAiIiB9CS8qIGVuZCAqLwotfTsKLSNlbHNlIC8qIENTNDIzNiAqLwotI2RlZmluZSBDUzQyM1hfSVNBUE5QX0RSSVZFUgkiY3M0MjM2X2lzYXBucCIKLXN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jczQyM3hfcG5waWRzW10gPSB7CiAJLyogSW50ZWwgTWFybGluIFNwaWtlIE1vdGhlcmJvYXJkIC0gQ1M0MjM1ICovCiAJeyAuaWQgPSAiQ1NDMDIyNSIsIC5kZXZzID0geyB7ICJDU0MwMDAwIiB9LCB7ICJDU0MwMDEwIiB9LCB7ICJDU0MwMDAzIiB9IH0gfSwKIAkvKiBJbnRlbCBNYXJsaW4gU3Bpa2UgTW90aGVyYm9hcmQgKCMyKSAtIENTNDIzNSAqLwpAQCAtMjY2LDcgKzI0OCw2IEBACiAJLyogLS0tICovCiAJeyAuaWQgPSAiIiB9CS8qIGVuZCAqLwogfTsKLSNlbmRpZgogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBucF9jYXJkLCBzbmRfY3M0MjN4X3BucGlkcyk7CiAKQEAgLTMyMywxNyArMzA0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDUzQyMzIKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzMl9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCi0JCQkJCSBzdHJ1Y3QgcG5wX2RldiAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzeF9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCisJCQkJCSBzdHJ1Y3QgcG5wX2RldiAqcGRldiwKKwkJCQkJIHN0cnVjdCBwbnBfZGV2ICpjZGV2KQogewogCWFjYXJkLT53c3MgPSBwZGV2OwogCWlmIChzbmRfY3M0MjN4X3BucF9pbml0X3dzcyhkZXYsIGFjYXJkLT53c3MpIDwgMCkKIAkJcmV0dXJuIC1FQlVTWTsKLQljcG9ydFtkZXZdID0gLTE7CisJaWYgKGNkZXYpCisJCWNwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChjZGV2LCAwKTsKKwllbHNlCisJCWNwb3J0W2Rldl0gPSAtMTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9jczQyM3hfcG5wYyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2ICphY2FyZCwKIAkJCQkJICBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKQEAgLTM4MiwxNiArMzY1LDE4IEBACiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShhY2FyZC0+cmVzX3NiX3BvcnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfY3M0MjN4X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9jczQyMzYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfY3M0MjM2X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC00MDksNDAgKzM5NCwzOSBAQAogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0jaWZkZWYgQ1M0MjMyCiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLCBjcG9ydFtkZXZdLAogCQkJICAgICBpcnFbZGV2XSwKIAkJCSAgICAgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCi0JCQkgICAgIFdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKKwkJCSAgICAgV1NTX0hXX0RFVEVDVDMsIDAsICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlhY2FyZC0+Y2hpcCA9IGNoaXA7CisJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzNkJfTUFTSykgeworCQlzbmRfd3NzX2ZyZWUoY2hpcCk7CisJCWVyciA9IHNuZF9jczQyMzZfY3JlYXRlKGNhcmQsCisJCQkJCXBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKKwkJCQkJaXJxW2Rldl0sIGRtYTFbZGV2XSwgZG1hMltkZXZdLAorCQkJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJYWNhcmQtPmNoaXAgPSBjaGlwOwogCi0JZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzbmRfd3NzX21peGVyKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3M0MjM2X21peGVyKGNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJYWNhcmQtPmNoaXAgPSBjaGlwOworCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCi0jZWxzZSAvKiBDUzQyMzYgKi8KLQllcnIgPSBzbmRfY3M0MjM2X2NyZWF0ZShjYXJkLAotCQkJCXBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKLQkJCQlpcnFbZGV2XSwgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCi0JCQkJV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWFjYXJkLT5jaGlwID0gY2hpcDsKLQotCWVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc25kX2NzNDIzNl9taXhlcihjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLSNlbmRpZgorCQllcnIgPSBzbmRfd3NzX21peGVyKGNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCXN0cmNweShjYXJkLT5kcml2ZXIsIHBjbS0+bmFtZSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwKQEAgLTUxMiw5ICs0OTYsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfY3M0MjN4X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNTc3LDEzICs1NjEsMTQgQEAKIAogCiAjaWZkZWYgQ09ORklHX1BOUAotI2lmZGVmIENTNDIzMgotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzMl9wbnBiaW9zX2RldGVjdChzdHJ1Y3QgcG5wX2RldiAqcGRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfcG5wYmlvc19kZXRlY3Qoc3RydWN0IHBucF9kZXYgKnBkZXYsCiAJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGludCBkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBucF9kZXYgKmNkZXY7CisJY2hhciBjaWRbUE5QX0lEX0xFTl07CiAKIAlpZiAocG5wX2RldmljZV9pc19pc2FwbnAocGRldikpCiAJCXJldHVybiAtRU5PRU5UOwkvKiB3ZSBoYXZlIGFub3RoZXIgcHJvY2VkdXJlIC0gY2FyZCAqLwpAQCAtNTk0LDEwICs1NzksMTkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9jczQyMzJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CisJLyogcHJlcGFyZSBzZWNvbmQgaWQgKi8KKwlzdHJjcHkoY2lkLCBwZGV2LT5pZFswXS5pZCk7CisJY2lkWzVdID0gJzEnOworCWNkZXYgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RldiwgJihwZGV2LT5wcm90b2NvbC0+ZGV2aWNlcyksIHByb3RvY29sX2xpc3QpIHsKKwkJaWYgKCFzdHJjbXAoY2Rldi0+aWRbMF0uaWQsIGNpZCkpCisJCQlicmVhazsKKwl9CisJZXJyID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzbmRfY2FyZF9jczQyM3hfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2LCBjZGV2KTsKKwlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlBuUCBCSU9TIGRldGVjdGlvbiBmYWlsZWQgZm9yICIgSURFTlQgIlxuIik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC02MTIsMzUgKzYwNiwzNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2NzNDIzMl9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICogcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfY3M0MjN4X3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKnBkZXYpCiB7CiAJc25kX2NhcmRfZnJlZShwbnBfZ2V0X2RydmRhdGEocGRldikpOwogCXBucF9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfY3M0MjMyX3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfcG5wX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gc25kX2NzNDIzeF9zdXNwZW5kKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2NzNDIzMl9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQorc3RhdGljIGludCBzbmRfY3M0MjN4X3BucF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBkZXYpCiB7CiAJcmV0dXJuIHNuZF9jczQyM3hfcmVzdW1lKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGNzNDIzMl9wbnBfZHJpdmVyID0gewotCS5uYW1lID0gImNzNDIzMi1wbnBiaW9zIiwKLQkuaWRfdGFibGUgPSBzbmRfY3M0MjMyX3BucGJpb3NpZHMsCi0JLnByb2JlID0gc25kX2NzNDIzMl9wbnBiaW9zX2RldGVjdCwKLQkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NzNDIzMl9wbnBfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjczQyM3hfcG5wX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjczQyM3gtcG5wYmlvcyIsCisJLmlkX3RhYmxlID0gc25kX2NzNDIzeF9wbnBiaW9zaWRzLAorCS5wcm9iZSA9IHNuZF9jczQyM3hfcG5wYmlvc19kZXRlY3QsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jczQyM3hfcG5wX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfY3M0MjMyX3BucF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX2NzNDIzMl9wbnBfcmVzdW1lLAorCS5zdXNwZW5kCT0gc25kX2NzNDIzeF9wbnBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9jczQyM3hfcG5wX3Jlc3VtZSwKICNlbmRpZgogfTsKLSNlbmRpZiAvKiBDUzQyMzIgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wbnBjX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCkBAIC02NTYsOSArNjQ5LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAlpZiAoKHJlcyA9IHNuZF9jYXJkX2NzNDIzeF9wbnBjKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaXNhcG5wIGRldGVjdGlvbiBmYWlsZWQgYW5kIHByb2JpbmcgZm9yICIgSURFTlQKIAkJICAgICAgICIgaXMgbm90IHN1cHBvcnRlZFxuIik7CkBAIC03MTQsMTggKzcwNywxNCBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAoIWVycikKIAkJaXNhX3JlZ2lzdGVyZWQgPSAxOwotI2lmZGVmIENTNDIzMgotCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMl9wbnBfZHJpdmVyKTsKKwllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfcG5wX2RyaXZlcik7CiAJaWYgKCFlcnIpCiAJCXBucF9yZWdpc3RlcmVkID0gMTsKLSNlbmRpZgogCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmY3M0MjN4X3BucGNfZHJpdmVyKTsKIAlpZiAoIWVycikKIAkJcG5wY19yZWdpc3RlcmVkID0gMTsKLSNpZmRlZiBDUzQyMzIKIAlpZiAocG5wX3JlZ2lzdGVyZWQpCiAJCWVyciA9IDA7Ci0jZW5kaWYKIAlpZiAoaXNhX3JlZ2lzdGVyZWQpCiAJCWVyciA9IDA7CiAjZW5kaWYKQEAgLTczNywxMCArNzI2LDggQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJaWYgKHBucGNfcmVnaXN0ZXJlZCkKIAkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmNzNDIzeF9wbnBjX2RyaXZlcik7Ci0jaWZkZWYgQ1M0MjMyCiAJaWYgKHBucF9yZWdpc3RlcmVkKQotCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMl9wbnBfZHJpdmVyKTsKLSNlbmRpZgorCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9wbnBfZHJpdmVyKTsKIAlpZiAoaXNhX3JlZ2lzdGVyZWQpCiAjZW5kaWYKIAkJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfaXNhX2RyaXZlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCmluZGV4IDZhODVmZGMuLjM4ODM1ZjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCkBAIC04OCwxMCArODgsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAKLU1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJvdXRpbmVzIGZvciBjb250cm9sIG9mIENTNDIzNS80MjM2Qi80MjM3Qi80MjM4Qi80MjM5IGNoaXBzIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KIC8qCiAgKgogICovCkBAIC0yODYsNyArMjgyLDggQEAKIAlpZiAoaGFyZHdhcmUgPT0gV1NTX0hXX0RFVEVDVCkKIAkJaGFyZHdhcmUgPSBXU1NfSFdfREVURUNUMzsKIAlpZiAoY3BvcnQgPCAweDEwMCkgewotCQlzbmRfcHJpbnRrKCJwbGVhc2UsIHNwZWNpZnkgY29udHJvbCBwb3J0IGZvciBDUzQyMzYrIGNoaXBzXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGxlYXNlLCBzcGVjaWZ5IGNvbnRyb2wgcG9ydCAiCisJCQkgICAiZm9yIENTNDIzNisgY2hpcHNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydCwgY3BvcnQsCkBAIC0yOTUsNyArMjkyLDggQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmICghKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzNkJfTUFTSykpIHsKLQkgICAgICAgIHNuZF9wcmludGsoIkNTNDIzNis6IE1PREUzIGFuZCBleHRlbmRlZCByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSwgaGFyZHdhcmU9MHgleFxuIixjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNTNDIzNis6IE1PREUzIGFuZCBleHRlbmRlZCByZWdpc3RlcnMgIgorCQkJICAgIm5vdCBhdmFpbGFibGUsIGhhcmR3YXJlPTB4JXhcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIGNoaXApOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0zMDMsMTYgKzMwMSwxOSBAQAogCXsKIAkJaW50IGlkeDsKIAkJZm9yIChpZHggPSAwOyBpZHggPCA4OyBpZHgrKykKLQkJCXNuZF9wcmludGsoIkNEJWkgPSAweCV4XG4iLCBpZHgsIGluYihjaGlwLT5jcG9ydCArIGlkeCkpOworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJDRCVpID0gMHgleFxuIiwKKwkJCQkgICBpZHgsIGluYihjaGlwLT5jcG9ydCArIGlkeCkpOwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDk7IGlkeCsrKQotCQkJc25kX3ByaW50aygiQyVpID0gMHgleFxuIiwgaWR4LCBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgaWR4KSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkMlaSA9IDB4JXhcbiIsCisJCQkJICAgaWR4LCBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgaWR4KSk7CiAJfQogI2VuZGlmCiAJdmVyMSA9IHNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAxKTsKIAl2ZXIyID0gc25kX2NzNDIzNl9leHRfaW4oY2hpcCwgQ1M0MjM2X1ZFUlNJT04pOwogCXNuZF9wcmludGRkKCJDUzQyMzY6IFsweCVseF0gQzEgKHZlcnNpb24pID0gMHgleCwgZXh0ID0gMHgleFxuIiwgY3BvcnQsIHZlcjEsIHZlcjIpOwogCWlmICh2ZXIxICE9IHZlcjIpIHsKLQkJc25kX3ByaW50aygiQ1M0MjM2KyBjaGlwIGRldGVjdGVkLCBidXQgY29udHJvbCBwb3J0IDB4JWx4IGlzIG5vdCB2YWxpZFxuIiwgY3BvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzYrIGNoaXAgZGV0ZWN0ZWQsIGJ1dCAiCisJCQkgICAiY29udHJvbCBwb3J0IDB4JWx4IGlzIG5vdCB2YWxpZFxuIiwgY3BvcnQpOwogCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgY2hpcCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTg4Myw3ICs4ODQsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdICYgMHgwMiA/IDEgOiAwOwogI2lmIDAKLQlwcmludGsoImdldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsIEM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgImdldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsICIKKwkgICAgICAgIkM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCiAJCQlzbmRfd3NzX2luKGNoaXAsIENTNDIzMV9BTFRfRkVBVFVSRV8xKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAzKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCA0KSwKQEAgLTkyMCw3ICs5MjIsOCBAQAogCW11dGV4X3VubG9jaygmY2hpcC0+bWNlX211dGV4KTsKIAogI2lmIDAKLQlwcmludGsoInNldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsIEM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgInNldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsICIKKwkgICAgICAgIkM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCiAJCQlzbmRfd3NzX2luKGNoaXAsIENTNDIzMV9BTFRfRkVBVFVSRV8xKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAzKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCA0KSwKQEAgLTEwMTUsMjMgKzEwMTgsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X2NyZWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfcGNtKTsKLUVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9taXhlcik7Ci0KLS8qCi0gKiAgSU5JVCBwYXJ0Ci0gKi8KLQotc3RhdGljIGludCBfX2luaXQgYWxzYV9jczQyMzZfaW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jczQyMzZfZXhpdCh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChhbHNhX2NzNDIzNl9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jczQyMzZfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9kdDAxOXguYyBiL3NvdW5kL2lzYS9kdDAxOXguYwppbmRleCBhMDI0MmMzLi44MGY1YjFhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZHQwMTl4LmMKKysrIGIvc291bmQvaXNhL2R0MDE5eC5jCkBAIC0xNTAsOSArMTUwLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkX2R0MDE5eCAqYWNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2R0MDE5eCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2R0MDE5eCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCmluZGV4IGI0NjM3NzEuLjQ0MmIwODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtNDksNiArNDksNyBAQAogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRTsJLyogRW5hYmxlIHRoaXMgY2FyZCAqLwogc3RhdGljIGxvbmcgcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIDB4MjIwLDB4MjQwLDB4MjYwICovCitzdGF0aWMgbG9uZyBmbV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogVXN1YWxseSAweDM4OCAqLwogc3RhdGljIGxvbmcgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAtMX07CiBzdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogNSw3LDksMTAgKi8KIHN0YXRpYyBpbnQgbXB1X2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogNSw3LDksMTAgKi8KQEAgLTY1LDYgKzY2LDggQEAKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVfcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1wdV9wb3J0LCAiTVBVLTQwMSBwb3J0ICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGZtX3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbV9wb3J0LCAiRk0gcG9ydCAjIGZvciBFUzE2ODggZHJpdmVyLiIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVfaXJxLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtcHVfaXJxLCAiTVBVLTQwMSBJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKQEAgLTEyMiw5ICsxMjUsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF9lczE2ODhfbGVnYWN5X2NyZWF0ZShjYXJkLCBkZXYsIG4sICZjaGlwKTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMTQzLDEzICsxNDYsMTkgQEAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwgcGNtLT5uYW1lLAogCQljaGlwLT5wb3J0LCBjaGlwLT5pcnEsIGNoaXAtPmRtYTgpOwogCi0JaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBjaGlwLT5wb3J0LCBjaGlwLT5wb3J0ICsgMiwKLQkJCU9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkKLQkJZGV2X3dhcm4oZGV2LCAib3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGNoaXAtPnBvcnQpOwotCWVsc2UgewotCQllcnJvciA9CXNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0OworCWlmIChmbV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKKwkJZm1fcG9ydFtuXSA9IHBvcnRbbl07CS8qIHNoYXJlIHRoZSBzYW1lIHBvcnQgKi8KKworCWlmIChmbV9wb3J0W25dID4gMCkgeworCQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsIGZtX3BvcnRbbl0sIGZtX3BvcnRbbl0gKyAyLAorCQkJCU9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkKKwkJCWRldl93YXJuKGRldiwKKwkJCQkgIm9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBmbV9wb3J0W25dKTsKKwkJZWxzZSB7CisJCQllcnJvciA9CXNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnJvciA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlpZiAobXB1X2lycVtuXSA+PSAwICYmIG1wdV9pcnFbbl0gIT0gU05EUlZfQVVUT19JUlEgJiYKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKaW5kZXggNGZiYjUwOC4uNGM2ZTE0ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJCXJldHVybiAxOwogCQl9CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwotCXByaW50aygic25kX2VzMTY4OF9kc3BfY29tbWFuZDogdGltZW91dCAoMHgleClcbiIsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInNuZF9lczE2ODhfZHNwX2NvbW1hbmQ6IHRpbWVvdXQgKDB4JXgpXG4iLCB2YWwpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjcsMTMgKzE2NywxNiBAQAogCWh3ID0gRVMxNjg4X0hXX0FVVE87CiAJc3dpdGNoIChjaGlwLT52ZXJzaW9uICYgMHhmZmYwKSB7CiAJY2FzZSAweDQ4ODA6Ci0JCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiBBdWRpb0RyaXZlIEVTNDg4IGRldGVjdGVkLCBidXQgZHJpdmVyIGlzIGluIGFub3RoZXIgcGxhY2VcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogQXVkaW9Ecml2ZSBFUzQ4OCBkZXRlY3RlZCwgIgorCQkJICAgImJ1dCBkcml2ZXIgaXMgaW4gYW5vdGhlciBwbGFjZVxuIiwgY2hpcC0+cG9ydCk7CiAJCXJldHVybiAtRU5PREVWOwogCWNhc2UgMHg2ODgwOgogCQlodyA9IChjaGlwLT52ZXJzaW9uICYgMHgwZikgPj0gOCA/IEVTMTY4OF9IV18xNjg4IDogRVMxNjg4X0hXXzY4ODsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IHVua25vd24gQXVkaW9Ecml2ZSBjaGlwIHdpdGggdmVyc2lvbiAweCV4IChKYXp6MTYgc291bmRjYXJkPylcbiIsIGNoaXAtPnBvcnQsIGNoaXAtPnZlcnNpb24pOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogdW5rbm93biBBdWRpb0RyaXZlIGNoaXAgIgorCQkJICAgIndpdGggdmVyc2lvbiAweCV4IChKYXp6MTYgc291bmRjYXJkPylcbiIsCisJCQkgICBjaGlwLT5wb3J0LCBjaGlwLT52ZXJzaW9uKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0yMjMsNyArMjI2LDcgQEAKIAkJfQogCX0KICNpZiAwCi0Jc25kX3ByaW50aygibXB1IGNmZyA9IDB4JXhcbiIsIGNmZyk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtcHUgY2ZnID0gMHgleFxuIiwgY2ZnKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9lczE2ODhfbWl4ZXJfd3JpdGUoY2hpcCwgMHg0MCwgY2ZnKTsKQEAgLTIzNyw3ICsyNDAsOSBAQAogCQljZmcgPSAweGYwOwkvKiBlbmFibGUgb25seSBETUEgY291bnRlciBpbnRlcnJ1cHQgKi8KIAkJaXJxX2JpdHMgPSBpcnFzW2NoaXAtPmlycSAmIDB4MGZdOwogCQlpZiAoaXJxX2JpdHMgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogYmFkIElSUSAlZCBmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgY2hpcC0+aXJxKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBiYWQgSVJRICVkICIKKwkJCQkgICAiZm9yIEVTMTY4OCBjaGlwISFcbiIsCisJCQkJICAgY2hpcC0+cG9ydCwgY2hpcC0+aXJxKTsKICNpZiAwCiAJCQlpcnFfYml0cyA9IDA7CiAJCQljZmcgPSAweDEwOwpAQCAtMjUwLDcgKzI1NSw4IEBACiAJCWNmZyA9IDB4ZjA7CS8qIGV4dGVuZGVkIG1vZGUgRE1BIGVuYWJsZSAqLwogCQlkbWEgPSBjaGlwLT5kbWE4OwogCQlpZiAoZG1hID4gMyB8fCBkbWEgPT0gMikgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IGJhZCBETUEgY2hhbm5lbCAlZCBmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgZG1hKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBiYWQgRE1BIGNoYW5uZWwgJWQgIgorCQkJCSAgICJmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgZG1hKTsKICNpZiAwCiAJCQlkbWFfYml0cyA9IDA7CiAJCQljZmcgPSAweDAwOwkvKiBkaXNhYmxlIGFsbCBETUEgKi8KQEAgLTM0MSw4ICszNDcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsJLyogc29tZXRoaW5nIGlzIHdyb25nICovCiAJfQogI2lmIDAKLQlwcmludGsoInRyaWdnZXI6IHZhbCA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgdmFsLCB2YWx1ZSk7Ci0JcHJpbnRrKCJ0cmlnZ2VyOiBwb2ludGVyID0gMHgleFxuIiwgc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmRtYV9zaXplKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXI6IHZhbCA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgdmFsLCB2YWx1ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXI6IHBvaW50ZXIgPSAweCV4XG4iLAorCSAgICAgICBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+ZG1hX3NpemUpKTsKICNlbmRpZgogCXNuZF9lczE2ODhfd3JpdGUoY2hpcCwgMHhiOCwgKHZhbCAmIDB4ZjApIHwgdmFsdWUpOwogCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxOHh4LmMgYi9zb3VuZC9pc2EvZXMxOHh4LmMKaW5kZXggOTA0OThlNC4uOGNmYmZmNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTh4eC5jCisrKyBiL3NvdW5kL2lzYS9lczE4eHguYwpAQCAtMjEyNSwxMCArMjEyNSwxMCBAQAogI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJMAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9lczE4eHhfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2VzMTh4eF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKLQlyZXR1cm4gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2F1ZGlvZHJpdmUpKTsKKwlyZXR1cm4gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2F1ZGlvZHJpdmUpLCBjYXJkcCk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9hdWRpb2RyaXZlX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTIxOTcsOSArMjE5Nyw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOwogCWlmICgoZXJyID0gc25kX2F1ZGlvZHJpdmVfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC0yMzAzLDkgKzIzMDMsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2F1ZGlvZHJpdmVfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC0yMzYyLDkgKzIzNjIsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCiAJaWYgKChyZXMgPSBzbmRfYXVkaW9kcml2ZV9wbnBjKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCmluZGV4IGY0NWY2MTEuLjM2YzI3YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCkBAIC00NSw3ICs0NSw4IEBACiAJdW5zaWduZWQgY2hhciBkbWFfY21kOwogCXVuc2lnbmVkIGludCBhZGRyZXNzX2hpZ2g7CiAKLQkvLyBzbmRfcHJpbnRrKCJkbWFfdHJhbnNmZXI6IGFkZHI9MHgleCwgYnVmPTB4JWx4LCBjb3VudD0weCV4XG4iLCBhZGRyLCAobG9uZykgYnVmLCBjb3VudCk7CisJc25kX3ByaW50ZGQoImRtYV90cmFuc2ZlcjogYWRkcj0weCV4LCBidWY9MHglbHgsIGNvdW50PTB4JXhcbiIsCisJCSAgICBhZGRyLCBidWZfYWRkciwgY291bnQpOwogCiAJaWYgKGd1cy0+Z2YxLmRtYTEgPiAzKSB7CiAJCWlmIChndXMtPmdmMS5lbmhfbW9kZSkgewpAQCAtNzcsNyArNzgsOCBAQAogCXNuZF9nZjFfZG1hX2FjayhndXMpOwogCXNuZF9kbWFfcHJvZ3JhbShndXMtPmdmMS5kbWExLCBidWZfYWRkciwgY291bnQsIGRtYV9jbWQgJiBTTkRSVl9HRjFfRE1BX1JFQUQgPyBETUFfTU9ERV9SRUFEIDogRE1BX01PREVfV1JJVEUpOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJhZGRyZXNzID0gMHgleCwgY291bnQgPSAweCV4LCBkbWFfY21kID0gMHgleFxuIiwgYWRkcmVzcyA8PCAxLCBjb3VudCwgZG1hX2NtZCk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJhZGRyZXNzID0gMHgleCwgY291bnQgPSAweCV4LCBkbWFfY21kID0gMHgleFxuIiwKKwkJICAgYWRkcmVzcyA8PCAxLCBjb3VudCwgZG1hX2NtZCk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3VzLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmIChndXMtPmdmMS5lbmhfbW9kZSkgewpAQCAtMTQyLDcgKzE0NCw5IEBACiAJc25kX2dmMV9kbWFfcHJvZ3JhbShndXMsIGJsb2NrLT5hZGRyLCBibG9jay0+YnVmX2FkZHIsIGJsb2NrLT5jb3VudCwgKHVuc2lnbmVkIHNob3J0KSBibG9jay0+Y21kKTsKIAlrZnJlZShibG9jayk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWEgKElSUSkgLSBhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwgYWRkciwgKGxvbmcpIGJ1ZmZlciwgY291bnQsIGNtZCk7CisJc25kX3ByaW50ZChLRVJOX0RFQlVHICJwcm9ncmFtIGRtYSAoSVJRKSAtICIKKwkJICAgImFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLAorCQkgICBibG9jay0+YWRkciwgYmxvY2stPmJ1Zl9hZGRyLCBibG9jay0+Y291bnQsIGJsb2NrLT5jbWQpOwogI2VuZGlmCiB9CiAKQEAgLTIwMywxMyArMjA3LDE2IEBACiAJfQogCSpibG9jayA9ICpfX2Jsb2NrOwogCWJsb2NrLT5uZXh0ID0gTlVMTDsKLSNpZiAwCi0JcHJpbnRrKCJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwgYmxvY2stPmFkZHIsIChsb25nKSBibG9jay0+YnVmZmVyLCBibG9jay0+Y291bnQsIGJsb2NrLT5jbWQpOwotI2VuZGlmCi0jaWYgMAotCXByaW50aygiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPSAweCVseFxuIiwgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QpOwotCXByaW50aygiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtID0gMHglbHhcbiIsIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbSk7Ci0jZW5kaWYKKworCXNuZF9wcmludGRkKCJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwKKwkJICAgIGJsb2NrLT5hZGRyLCAobG9uZykgYmxvY2stPmJ1ZmZlciwgYmxvY2stPmNvdW50LAorCQkgICAgYmxvY2stPmNtZCk7CisKKwlzbmRfcHJpbnRkZCgiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPSAweCVseFxuIiwKKwkJICAgIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0KTsKKwlzbmRfcHJpbnRkZCgiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtID0gMHglbHhcbiIsCisJCSAgICAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY20pOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+ZG1hX2xvY2ssIGZsYWdzKTsKIAlpZiAoc3ludGgpIHsKIAkJaWYgKGd1cy0+Z2YxLmRtYV9kYXRhX3N5bnRoX2xhc3QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jIGIvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKaW5kZXggMDQxODk0ZC4uMjA1NWFmZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlpZiAoc3RhdHVzID09IDApCiAJCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogCWhhbmRsZWQgPSAxOwotCS8vIHNuZF9wcmludGsoIklSUTogc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgIklSUTogc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsgKi8KIAlpZiAoc3RhdHVzICYgMHgwMikgewogCQlTVEFUX0FERChndXMtPmdmMS5pbnRlcnJ1cHRfc3RhdF9taWRpX2luKTsKIAkJaWYgKGd1cy0+Z2YxLmludGVycnVwdF9oYW5kbGVyX21pZGlfaW4pCkBAIC02NSw3ICs2NSw5IEBACiAJCQkJY29udGludWU7CS8qIG11bHRpIHJlcXVlc3QgKi8KIAkJCWFscmVhZHkgfD0gX2N1cnJlbnRfOwkvKiBtYXJrIHJlcXVlc3QgKi8KICNpZiAwCi0JCQlwcmludGsoInZvaWNlID0gJWksIHZvaWNlX3N0YXR1cyA9IDB4JXgsIHZvaWNlX3ZlcmlmeSA9ICVpXG4iLCB2b2ljZSwgdm9pY2Vfc3RhdHVzLCBpbmIoR1VTUChndXMsIEdGMVBBR0UpKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAidm9pY2UgPSAlaSwgdm9pY2Vfc3RhdHVzID0gMHgleCwgIgorCQkJICAgICAgICJ2b2ljZV92ZXJpZnkgPSAlaVxuIiwKKwkJCSAgICAgICB2b2ljZSwgdm9pY2Vfc3RhdHVzLCBpbmIoR1VTUChndXMsIEdGMVBBR0UpKSk7CiAjZW5kaWYKIAkJCXB2b2ljZSA9ICZndXMtPmdmMS52b2ljZXNbdm9pY2VdOyAKIAkJCWlmIChwdm9pY2UtPnVzZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwppbmRleCAzODUxMGFlLi5lZGIxMWVlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwpAQCAtODIsNyArODIsMTAgQEAKIAogCWNvdW50ICs9IG9mZnNldCAmIDMxOwogCW9mZnNldCAmPSB+MzE7Ci0JLy8gc25kX3ByaW50aygiYmxvY2sgY2hhbmdlIC0gb2Zmc2V0ID0gMHgleCwgY291bnQgPSAweCV4XG4iLCBvZmZzZXQsIGNvdW50KTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmxvY2sgY2hhbmdlIC0gb2Zmc2V0ID0gMHgleCwgY291bnQgPSAweCV4XG4iLAorCQkgICBvZmZzZXQsIGNvdW50KTsKKwkqLwogCW1lbXNldCgmYmxvY2ssIDAsIHNpemVvZihibG9jaykpOwogCWJsb2NrLmNtZCA9IFNORFJWX0dGMV9ETUFfSVJROwogCWlmIChzbmRfcGNtX2Zvcm1hdF91bnNpZ25lZChydW50aW1lLT5mb3JtYXQpKQpAQCAtMTM1LDcgKzEzOCwxMSBAQAogCQljdXJyID0gYmVnaW4gKyAocGNtcC0+YnBvcyAqIHBjbXAtPmJsb2NrX3NpemUpIC8gcnVudGltZS0+Y2hhbm5lbHM7CiAJCWVuZCA9IGN1cnIgKyAocGNtcC0+YmxvY2tfc2l6ZSAvIHJ1bnRpbWUtPmNoYW5uZWxzKTsKIAkJZW5kIC09IHNuZF9wY21fZm9ybWF0X3dpZHRoKHJ1bnRpbWUtPmZvcm1hdCkgPT0gMTYgPyAyIDogMTsKLQkJLy8gc25kX3ByaW50aygiaW5pdDogY3Vycj0weCV4LCBiZWdpbj0weCV4LCBlbmQ9MHgleCwgY3RybD0weCV4LCByYW1wPTB4JXgsIHJhdGU9MHgleFxuIiwgY3VyciwgYmVnaW4sIGVuZCwgdm9pY2VfY3RybCwgcmFtcF9jdHJsLCByYXRlKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiBjdXJyPTB4JXgsIGJlZ2luPTB4JXgsIGVuZD0weCV4LCAiCisJCQkgICAiY3RybD0weCV4LCByYW1wPTB4JXgsIHJhdGU9MHgleFxuIiwKKwkJCSAgIGN1cnIsIGJlZ2luLCBlbmQsIHZvaWNlX2N0cmwsIHJhbXBfY3RybCwgcmF0ZSk7CisJCSovCiAJCXBhbiA9IHJ1bnRpbWUtPmNoYW5uZWxzID09IDIgPyAoIXZvaWNlID8gMSA6IDE0KSA6IDg7CiAJCXZvbCA9ICF2b2ljZSA/IGd1cy0+Z2YxLnBjbV92b2x1bWVfbGV2ZWxfbGVmdCA6IGd1cy0+Z2YxLnBjbV92b2x1bWVfbGV2ZWxfcmlnaHQ7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC0yMDUsOSArMjEyLDExIEBACiAJcmFtcF9jdHJsID0gKHNuZF9nZjFfcmVhZDgoZ3VzLCBTTkRSVl9HRjFfVkJfVk9MVU1FX0NPTlRST0wpICYgfjB4YTQpIHwgMHgwMzsKICNpZiAwCiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwdm9pY2UtPm51bWJlcik7Ci0JcHJpbnRrKCJwb3NpdGlvbiA9IDB4JXhcbiIsIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwb3NpdGlvbiA9IDB4JXhcbiIsCisJICAgICAgIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOwogCXNuZF9nZjFfc2VsZWN0X3ZvaWNlKGd1cywgcGNtcC0+cHZvaWNlc1sxXS0+bnVtYmVyKTsKLQlwcmludGsoInBvc2l0aW9uID0gMHgleFxuIiwgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBvc2l0aW9uID0gMHgleFxuIiwKKwkgICAgICAgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwdm9pY2UtPm51bWJlcik7CiAjZW5kaWYKIAlwY21wLT5icG9zKys7CkBAIC0yOTksNyArMzA4LDExIEBACiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLy8gcHJpbnRrKCJwb2tlIGJsb2NrOyBidWYgPSAweCV4LCBwb3MgPSAlaSwgY291bnQgPSAlaSwgcG9ydCA9IDB4JXhcbiIsIChpbnQpYnVmLCBwb3MsIGNvdW50LCBndXMtPmdmMS5wb3J0KTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwb2tlIGJsb2NrOyBidWYgPSAweCV4LCBwb3MgPSAlaSwgY291bnQgPSAlaSwgcG9ydCA9IDB4JXhcbiIsCisJICAgICAgIChpbnQpYnVmLCBwb3MsIGNvdW50LCBndXMtPmdmMS5wb3J0KTsKKwkqLwogCXdoaWxlIChjb3VudCA+IDApIHsKIAkJbGVuID0gY291bnQ7CiAJCWlmIChsZW4gPiA1MTIpCQkvKiBsaW1pdCwgdG8gYWxsb3cgSVJRICovCkBAIC02ODAsNyArNjkzLDggQEAKIAlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfZ2YxX3BjbV9wbGF5YmFja19mcmVlOwogCiAjaWYgMAotCXByaW50aygicGxheWJhY2suYnVmZmVyID0gMHglbHgsIGdmMS5wY21fYnVmZmVyID0gMHglbHhcbiIsIChsb25nKSBwY20tPnBsYXliYWNrLmJ1ZmZlciwgKGxvbmcpIGd1cy0+Z2YxLnBjbV9idWZmZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJwbGF5YmFjay5idWZmZXIgPSAweCVseCwgZ2YxLnBjbV9idWZmZXIgPSAweCVseFxuIiwKKwkgICAgICAgKGxvbmcpIHBjbS0+cGxheWJhY2suYnVmZmVyLCAobG9uZykgZ3VzLT5nZjEucGNtX2J1ZmZlcik7CiAjZW5kaWYKIAlpZiAoKGVyciA9IHNuZF9nZjFfZG1hX2luaXQoZ3VzKSkgPCAwKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jIGIvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCmluZGV4IGYwYWYzZjcuLjIxY2M0MmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKQEAgLTEyOSw4ICsxMjksMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3VzLT51YXJ0X2NtZF9sb2NrLCBmbGFncyk7CiAjaWYgMAotCXNuZF9wcmludGsoInJlYWQgaW5pdCAtIGVuYWJsZSA9ICVpLCBjbWQgPSAweCV4LCBzdGF0ID0gMHgleFxuIiwgZ3VzLT51YXJ0X2VuYWJsZSwgZ3VzLT5nZjEudWFydF9jbWQsIHNuZF9nZjFfdWFydF9zdGF0KGd1cykpOwotCXNuZF9wcmludGsoIlsweCV4XSByZWcgKGN0cmwvc3RhdHVzKSA9IDB4JXgsIHJlZyAoZGF0YSkgPSAweCV4IChwYWdlID0gMHgleClcbiIsIGd1cy0+Z2YxLnBvcnQgKyAweDEwMCwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMCksIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDEpLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAyKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJyZWFkIGluaXQgLSBlbmFibGUgPSAlaSwgY21kID0gMHgleCwgc3RhdCA9IDB4JXhcbiIsCisJCSAgIGd1cy0+dWFydF9lbmFibGUsIGd1cy0+Z2YxLnVhcnRfY21kLCBzbmRfZ2YxX3VhcnRfc3RhdChndXMpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgIlsweCV4XSByZWcgKGN0cmwvc3RhdHVzKSA9IDB4JXgsIHJlZyAoZGF0YSkgPSAweCV4ICIKKwkJICAgIihwYWdlID0gMHgleClcbiIsCisJCSAgIGd1cy0+Z2YxLnBvcnQgKyAweDEwMCwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMCksCisJCSAgIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDEpLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAyKSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKaW5kZXggNDI2NTMyYS4uMDg2YjhmMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKQEAgLTE0OCw5ICsxNDgsOSBAQAogCXN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1czsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWlmIChwY21fY2hhbm5lbHNbbl0gPCAyKQogCQlwY21fY2hhbm5lbHNbbl0gPSAyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwppbmRleCA3YWQ0YzNiLi4xODBhOGRlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwpAQCAtMjQxLDkgKzI0MSw5IEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKG1wdV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKIAkJbXB1X3BvcnRbbl0gPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNtYXguYyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKaW5kZXggZjk0YzE5Ny4uZjI2ZWFjOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNtYXguYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCkBAIC0yMTQsMTAgKzIxNCwxMCBAQAogCXN0cnVjdCBzbmRfd3NzICp3c3M7CiAJc3RydWN0IHNuZF9ndXNtYXggKm1heGNhcmQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfZ3VzbWF4X2ZyZWU7CiAJbWF4Y2FyZCA9IChzdHJ1Y3Qgc25kX2d1c21heCAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAltYXhjYXJkLT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCmluZGV4IDVmYWVjZmIuLjUzNGE2ZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKKysrIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gYnVzLT5wcml2YXRlX3ZhbHVlOwogCiAjaWYgMAotCXByaW50aygiaTJjX3NldGxpbmVzIC0gMHglbHggPC0gJWksJWlcbiIsIHBvcnQsIGN0cmwsIGRhdGEpOworCXByaW50ayhLRVJOX0RFQlVHICJpMmNfc2V0bGluZXMgLSAweCVseCA8LSAlaSwlaVxuIiwgcG9ydCwgY3RybCwgZGF0YSk7CiAjZW5kaWYKIAlvdXRiKChkYXRhIDw8IDEpIHwgY3RybCwgcG9ydCk7CiAJdWRlbGF5KDEwKTsKQEAgLTE4Myw3ICsxODMsNyBAQAogCiAJcmVzID0gaW5iKHBvcnQpICYgMTsKICNpZiAwCi0JcHJpbnRrKCJpMmNfZ2V0Y2xvY2tsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19nZXRjbG9ja2xpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKICNlbmRpZgogCXJldHVybiByZXM7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJdWRlbGF5KDEwKTsKIAlyZXMgPSAoaW5iKHBvcnQpICYgMikgPj4gMTsKICNpZiAwCi0JcHJpbnRrKCJpMmNfZ2V0ZGF0YWxpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX2dldGRhdGFsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzOwogfQpAQCAtMzQyLDcgKzM0Miw4IEBACiAJCQlzbmRfZ2YxX3Bva2UoZ3VzLCBsb2NhbCwgZCk7CiAJCQlzbmRfZ2YxX3Bva2UoZ3VzLCBsb2NhbCArIDEsIGQgKyAxKTsKICNpZiAwCi0JCQlwcmludGsoImQgPSAweCV4LCBsb2NhbCA9IDB4JXgsIGxvY2FsICsgMSA9IDB4JXgsIGlkeCA8PCAyMiA9IDB4JXhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZCA9IDB4JXgsIGxvY2FsID0gMHgleCwgIgorCQkJICAgICAgICJsb2NhbCArIDEgPSAweCV4LCBpZHggPDwgMjIgPSAweCV4XG4iLAogCQkJICAgICAgIGQsCiAJCQkgICAgICAgc25kX2dmMV9wZWVrKGd1cywgbG9jYWwpLAogCQkJICAgICAgIHNuZF9nZjFfcGVlayhndXMsIGxvY2FsICsgMSksCkBAIC0zNTYsNyArMzU3LDggQEAKIAkJfQogCX0KICNpZiAwCi0JcHJpbnRrKCJzaXplczogJWkgJWkgJWkgJWlcbiIsIHNpemVzWzBdLCBzaXplc1sxXSwgc2l6ZXNbMl0sIHNpemVzWzNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAic2l6ZXM6ICVpICVpICVpICVpXG4iLAorCSAgICAgICBzaXplc1swXSwgc2l6ZXNbMV0sIHNpemVzWzJdLCBzaXplc1szXSk7CiAjZW5kaWYKIH0KIApAQCAtNDEwLDEyICs0MTIsMTIgQEAKIAkJbG1jdCA9IChwc2l6ZXNbM10gPDwgMjQpIHwgKHBzaXplc1syXSA8PCAxNikgfAogCQkgICAgKHBzaXplc1sxXSA8PCA4KSB8IHBzaXplc1swXTsKICNpZiAwCi0JCXByaW50aygibG1jdCA9IDB4JTA4eFxuIiwgbG1jdCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJsbWN0ID0gMHglMDh4XG4iLCBsbWN0KTsKICNlbmRpZgogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsbWMpOyBpKyspCiAJCQlpZiAobG1jdCA9PSBsbWNbaV0pIHsKICNpZiAwCi0JCQkJcHJpbnRrKCJmb3VuZCAhISEgJWlcbiIsIGkpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJmb3VuZCAhISEgJWlcbiIsIGkpOwogI2VuZGlmCiAJCQkJc25kX2dmMV93cml0ZTE2KGd1cywgU05EUlZfR0YxX0dXX01FTU9SWV9DT05GSUcsIChzbmRfZ2YxX2xvb2sxNihndXMsIFNORFJWX0dGMV9HV19NRU1PUllfQ09ORklHKSAmIDB4ZmZmMCkgfCBpKTsKIAkJCQlzbmRfaW50ZXJ3YXZlX2Jhbmtfc2l6ZXMoZ3VzLCBwc2l6ZXMpOwpAQCAtNjI2LDIwICs2MjgsMjIgQEAKIAkJZnJlZV9pcnEoaXdjYXJkLT5pcnEsICh2b2lkICopaXdjYXJkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2ludGVyd2F2ZV9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2ludGVyd2F2ZSAqaXdjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2ludGVyd2F2ZSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2ludGVyd2F2ZSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpd2NhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaXdjYXJkLT5jYXJkID0gY2FyZDsKIAlpd2NhcmQtPmlycSA9IC0xOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9pbnRlcndhdmVfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZXJ3YXZlX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTc3OCw5ICs3ODIsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOwogCWlmICgoZXJyID0gc25kX2ludGVyd2F2ZV9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKQEAgLTg3Niw5ICs4ODAsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCQkJCQotCWNhcmQgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmICgocmVzID0gc25kX2ludGVyd2F2ZV9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlIGIvc291bmQvaXNhL21zbmQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3MWMwYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorCitzbmQtbXNuZC1saWItb2JqcyA6PSBtc25kLm8gbXNuZF9taWRpLm8gbXNuZF9waW5uYWNsZV9taXhlci5vCitzbmQtbXNuZC1waW5uYWNsZS1vYmpzIDo9IG1zbmRfcGlubmFjbGUubworc25kLW1zbmQtY2xhc3NpYy1vYmpzIDo9IG1zbmRfY2xhc3NpYy5vCisKKyMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKK29iai0kKENPTkZJR19TTkRfTVNORF9QSU5OQUNMRSkgKz0gc25kLW1zbmQtcGlubmFjbGUubyBzbmQtbXNuZC1saWIubworb2JqLSQoQ09ORklHX1NORF9NU05EX0NMQVNTSUMpICs9IHNuZC1tc25kLWNsYXNzaWMubyBzbmQtbXNuZC1saWIubworCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NDU0NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmQuYwpAQCAtMCwwICsxLDcwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIDIwMDIvMDYvMzAgS2Fyc3RlbiBXaWVzZToKKyAqCXJlbW92ZWQga2VybmVsLXZlcnNpb24gZGVwZW5kZW5jaWVzLgorICoJcmlwcGVkIGZyb20gbGludXgga2VybmVsIDIuNC4xOCAoT1NTIEltcGxlbWVudGF0aW9uKSBieSBtZS4KKyAqCUluIHRoZSBPU1MgVmVyc2lvbiwgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHRvIGEgc2VwYXJhdGUgTU9EVUxFLAorICoJdGhhdCBpcyB1c2VkIGJ5IHRoZSBwaW5uYWNsZSBhbmQgdGhlIGNsYXNzaWMgZHJpdmVyLgorICoJc2luY2UgdGhlcmUgaXMgbm8gY2xhc3NpYyBkcml2ZXIgZm9yIGFsc2EgeWV0IChpIGRvbnQgaGF2ZSBhIGNsYXNzaWMKKyAqCSYgd3JpdGluZyBvbmUgYmxpbmRmb2xkIGlzIGRpZmZpY3VsdCkgdGhpcyBmaWxlJ3Mgb2JqZWN0IGlzIHN0YXRpY2FsbHkKKyAqCWxpbmtlZCBpbnRvIHRoZSBwaW5uYWNsZS1kcml2ZXItbW9kdWxlIGZvciBub3cuCWxvb2sgZm9yIHRoZSBzdHJpbmcKKyAqCQkidW5jb21tZW50IHRoaXMgdG8gbWFrZSB0aGlzIGEgbW9kdWxlIGFnYWluIgorICoJdG8gZG8gZ3Vlc3Mgd2hhdC4KKyAqCisgKiB0aGUgZm9sbG93aW5nIGlzIGEgY29weSBvZiB0aGUgMi40LjE4IE9TUyBGUkVFIGZpbGUtaGVhZGluZyBjb21tZW50OgorICoKKyAqIG1zbmQuYyAtIERyaXZlciBCYXNlCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAibXNuZC5oIgorCisjZGVmaW5lIExPR05BTUUJCQkibXNuZCIKKworCit2b2lkIHNuZF9tc25kX2luaXRfcXVldWUodm9pZCAqYmFzZSwgaW50IHN0YXJ0LCBpbnQgc2l6ZSkKK3sKKwl3cml0ZXcoUENUT0RTUF9CQVNFRChzdGFydCksIGJhc2UgKyBKUVNfd1N0YXJ0KTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoc2l6ZSkgLSAxLCBiYXNlICsgSlFTX3dTaXplKTsKKwl3cml0ZXcoMCwgYmFzZSArIEpRU193SGVhZCk7CisJd3JpdGV3KDAsIGJhc2UgKyBKUVNfd1RhaWwpOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9pbml0X3F1ZXVlKTsKKworc3RhdGljIGludCBzbmRfbXNuZF93YWl0X1RYREUoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgaW50IGlvID0gZGV2LT5pbzsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwl3aGlsZSAodGltZW91dC0tID4gMCkKKwkJaWYgKGluYihpbyArIEhQX0lTUikgJiBIUElTUl9UWERFKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF93YWl0X0hDMChzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXdoaWxlICh0aW1lb3V0LS0gPiAwKQorCQlpZiAoIShpbmIoaW8gKyBIUF9DVlIpICYgSFBDVlJfSEMpKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgdTggY21kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfSEMwKGRldikgPT0gMCkgeworCQlvdXRiKGNtZCwgZGV2LT5pbyArIEhQX0NWUik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogU2VuZCBEU1AgY29tbWFuZCB0aW1lb3V0XG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9zZW5kX2RzcF9jbWQpOworCitpbnQgc25kX21zbmRfc2VuZF93b3JkKHN0cnVjdCBzbmRfbXNuZCAqZGV2LCB1bnNpZ25lZCBjaGFyIGhpZ2gsCisJCSAgIHVuc2lnbmVkIGNoYXIgbWlkLCB1bnNpZ25lZCBjaGFyIGxvdykKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihoaWdoLCBpbyArIEhQX1RYSCk7CisJCW91dGIobWlkLCBpbyArIEhQX1RYTSk7CisJCW91dGIobG93LCBpbyArIEhQX1RYTCk7CisJCXJldHVybiAwOworCX0KKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBTZW5kIGhvc3Qgd29yZCB0aW1lb3V0XG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9zZW5kX3dvcmQpOworCitpbnQgc25kX21zbmRfdXBsb2FkX2hvc3Qoc3RydWN0IHNuZF9tc25kICpkZXYsIGNvbnN0IHU4ICpiaW4sIGludCBsZW4pCit7CisJaW50IGk7CisKKwlpZiAobGVuICUgMyAhPSAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJICAgIjogVXBsb2FkIGhvc3QgZGF0YSBub3QgbXVsdGlwbGUgb2YgMyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDMpCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCBiaW5baV0sIGJpbltpICsgMV0sIGJpbltpICsgMl0pKQorCQkJcmV0dXJuIC1FSU87CisKKwlpbmIoZGV2LT5pbyArIEhQX1JYTCk7CisJaW5iKGRldi0+aW8gKyBIUF9DVlIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3VwbG9hZF9ob3N0KTsKKworaW50IHNuZF9tc25kX2VuYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChkZXYtPmlycV9yZWYrKykKKwkJcmV0dXJuIDA7CisKKwlzbmRfcHJpbnRkZChMT0dOQU1FICI6IEVuYWJsaW5nIElSUVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgfCBIUElDUl9UUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCW91dGIoZGV2LT5pcnFpZCwgZGV2LT5pbyArIEhQX0lSUU0pOworCisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpICYgfkhQSUNSX1RSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSB8IEhQSUNSX1JSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwkJc25kX21zbmRfaW5pdF9xdWV1ZShkZXYtPkRTUFEsIGRldi0+ZHNwcV9kYXRhX2J1ZmYsCisJCQkJICAgIGRldi0+ZHNwcV9idWZmX3NpemUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IEVuYWJsZSBJUlEgZmFpbGVkXG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9lbmFibGVfaXJxKTsKKworaW50IHNuZF9tc25kX2Rpc2FibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoLS1kZXYtPmlycV9yZWYgPiAwKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmlycV9yZWYgPCAwKQorCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IElSUSByZWYgY291bnQgaXMgJWRcbiIsCisJCQkgICBkZXYtPmlycV9yZWYpOworCisJc25kX3ByaW50ZGQoTE9HTkFNRSAiOiBEaXNhYmxpbmcgSVJRXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc25kX21zbmRfd2FpdF9UWERFKGRldikgPT0gMCkgeworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSAmIH5IUElDUl9SUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCW91dGIoSFBJUlFfTk9ORSwgZGV2LT5pbyArIEhQX0lSUU0pOworCQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRGlzYWJsZSBJUlEgZmFpbGVkXG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9kaXNhYmxlX2lycSk7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBnZXRfcGxheV9kZWxheV9qaWZmaWVzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgbG9uZyBzaXplKQoreworCWxvbmcgdG1wID0gKHNpemUgKiBIWiAqIGNoaXAtPnBsYXlfc2FtcGxlX3NpemUpIC8gODsKKwlyZXR1cm4gdG1wIC8gKGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgKiBjaGlwLT5wbGF5X2NoYW5uZWxzKTsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfZHNwX3dyaXRlX2ZsdXNoKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwlpZiAoIShjaGlwLT5tb2RlICYgRk1PREVfV1JJVEUpIHx8ICF0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpCisJCXJldHVybjsKKwlzZXRfYml0KEZfV1JJVEVGTFVTSCwgJmNoaXAtPmZsYWdzKTsKKy8qCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgKKwkJJmNoaXAtPndyaXRlZmx1c2gsCisJCWdldF9wbGF5X2RlbGF5X2ppZmZpZXMoJmNoaXAsIGNoaXAtPkRBUEYubGVuKSk7Ki8KKwljbGVhcl9iaXQoRl9XUklURUZMVVNILCAmY2hpcC0+ZmxhZ3MpOworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgKKwkJCWdldF9wbGF5X2RlbGF5X2ppZmZpZXMoY2hpcCwgY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMpKTsKKwljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworfQorCit2b2lkIHNuZF9tc25kX2RzcF9oYWx0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKChmaWxlID8gZmlsZS0+Zl9tb2RlIDogY2hpcC0+bW9kZSkgJiBGTU9ERV9SRUFEKSB7CisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVE9QKTsKKwkJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJCWlmIChmaWxlKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyBMT0dOQU1FCisJCQkJICAgIjogU3RvcHBpbmcgcmVhZCBmb3IgJXBcbiIsIGZpbGUpOworCQkJY2hpcC0+bW9kZSAmPSB+Rk1PREVfUkVBRDsKKwkJfQorCQljbGVhcl9iaXQoRl9BVURJT19SRUFEX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCX0KKwlpZiAoKGZpbGUgPyBmaWxlLT5mX21vZGUgOiBjaGlwLT5tb2RlKSAmIEZNT0RFX1dSSVRFKSB7CisJCWlmICh0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpIHsKKwkJCXNuZF9tc25kX2RzcF93cml0ZV9mbHVzaChjaGlwKTsKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1BMQVlfU1RPUCk7CisJCX0KKwkJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJCWlmIChmaWxlKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTworCQkJCSAgIExPR05BTUUgIjogU3RvcHBpbmcgd3JpdGUgZm9yICVwXG4iLCBmaWxlKTsKKwkJCWNoaXAtPm1vZGUgJj0gfkZNT0RFX1dSSVRFOworCQl9CisJCWNsZWFyX2JpdChGX0FVRElPX1dSSVRFX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfZHNwX2hhbHQpOworCisKK2ludCBzbmRfbXNuZF9EQVJRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IGJhbmspCit7CisJaW50IC8qc2l6ZSwgbiwqLyB0aW1lb3V0ID0gMzsKKwl1MTYgd1RtcDsKKwkvKiB2b2lkICpEQVFEOyAqLworCisJLyogSW5jcmVtZW50IHRoZSB0YWlsIGFuZCBjaGVjayBmb3IgcXVldWUgd3JhcCAqLworCXdUbXAgPSByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dUYWlsKSArIFBDVE9EU1BfT0ZGU0VUKERBUURTX19zaXplKTsKKwlpZiAod1RtcCA+IHJlYWR3KGNoaXAtPkRBUlEgKyBKUVNfd1NpemUpKQorCQl3VG1wID0gMDsKKwl3aGlsZSAod1RtcCA9PSByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dIZWFkKSAmJiB0aW1lb3V0LS0pCisJCXVkZWxheSgxKTsKKworCWlmIChjaGlwLT5jYXB0dXJlUGVyaW9kcyA9PSAyKSB7CisJCXZvaWQgKnBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkYgKworCQkJICAgICBiYW5rICogREFRRFNfX3NpemUgKyBEQVFEU193U3RhcnQ7CisJCXVuc2lnbmVkIHNob3J0IG9mZnNldCA9IDB4MzAwMCArIGNoaXAtPmNhcHR1cmVQZXJpb2RCeXRlczsKKworCQlpZiAocmVhZHcocERBUSkgIT0gUENUT0RTUF9CQVNFRCgweDMwMDApKQorCQkJb2Zmc2V0ID0gMHgzMDAwOworCQl3cml0ZXcoUENUT0RTUF9CQVNFRChvZmZzZXQpLCBwREFRKTsKKwl9CisKKwl3cml0ZXcod1RtcCwgY2hpcC0+REFSUSArIEpRU193VGFpbCk7CisKKyNpZiAwCisJLyogR2V0IG91ciBkaWdpdGFsIGF1ZGlvIHF1ZXVlIHN0cnVjdCAqLworCURBUUQgPSBiYW5rICogREFRRFNfX3NpemUgKyBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwkvKiBHZXQgbGVuZ3RoIG9mIGRhdGEgKi8KKwlzaXplID0gcmVhZHcoREFRRCArIERBUURTX3dTaXplKTsKKworCS8qIFJlYWQgZGF0YSBmcm9tIHRoZSBoZWFkICh1bnByb3RlY3RlZCBiYW5rIDEgYWNjZXNzIG9rYXkKKwkgICBzaW5jZSB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lkZSBhbiBpbnRlcnJ1cHQpICovCisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW4gPSBtc25kX2ZpZm9fd3JpdGUoJmNoaXAtPkRBUkYsCisJCQkgICAgKGNoYXIgKikoY2hpcC0+YmFzZSArIGJhbmsgKiBEQVJfQlVGRl9TSVpFKSwKKwkJCSAgICBzaXplLCAwKTsKKwlpZiAobiA8PSAwKSB7CisJCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwkJcmV0dXJuIG47CisJfQorCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX0RBUlEpOworCitpbnQgc25kX21zbmRfREFQUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBzdGFydCkKK3sKKwl1MTYJREFQUV90YWlsOworCWludAlwcm90ZWN0ID0gc3RhcnQsIG5iYW5rcyA9IDA7CisJdm9pZAkqREFRRDsKKwlzdGF0aWMgaW50IHBsYXlfYmFua3Nfc3VibWl0dGVkOworCS8qIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsgbm90IG5lY2Vzc2FyeSAqLworCisJREFQUV90YWlsID0gcmVhZHcoY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisJd2hpbGUgKERBUFFfdGFpbCAhPSByZWFkdyhjaGlwLT5EQVBRICsgSlFTX3dIZWFkKSB8fCBzdGFydCkgeworCQlpbnQgYmFua19udW0gPSBEQVBRX3RhaWwgLyBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisKKwkJaWYgKHN0YXJ0KSB7CisJCQlzdGFydCA9IDA7CisJCQlwbGF5X2JhbmtzX3N1Ym1pdHRlZCA9IDA7CisJCX0KKworCQkvKiBHZXQgb3VyIGRpZ2l0YWwgYXVkaW8gcXVldWUgc3RydWN0ICovCisJCURBUUQgPSBiYW5rX251bSAqIERBUURTX19zaXplICsgY2hpcC0+bWFwcGVkYmFzZSArCisJCQlEQVBRX0RBVEFfQlVGRjsKKworCQkvKiBXcml0ZSBzaXplIG9mIHRoaXMgYmFuayAqLworCQl3cml0ZXcoY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMsIERBUUQgKyBEQVFEU193U2l6ZSk7CisJCWlmIChwbGF5X2JhbmtzX3N1Ym1pdHRlZCA8IDMpCisJCQkrK3BsYXlfYmFua3Nfc3VibWl0dGVkOworCQllbHNlIGlmIChjaGlwLT5wbGF5UGVyaW9kcyA9PSAyKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBvZmZzZXQgPSBjaGlwLT5wbGF5X3BlcmlvZF9ieXRlczsKKworCQkJaWYgKHJlYWR3KERBUUQgKyBEQVFEU193U3RhcnQpICE9IFBDVE9EU1BfQkFTRUQoMHgwKSkKKwkJCQlvZmZzZXQgPSAwOworCisJCQl3cml0ZXcoUENUT0RTUF9CQVNFRChvZmZzZXQpLCBEQVFEICsgREFRRFNfd1N0YXJ0KTsKKwkJfQorCQkrK25iYW5rczsKKworCQkvKiBUaGVuIGFkdmFuY2UgdGhlIHRhaWwgKi8KKwkJLyoKKwkJaWYgKHByb3RlY3QpCisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiQiAlWCAlbFhcbiIsCisJCQkJICAgYmFua19udW0sIHh0aW1lLnR2X3VzZWMpOworCQkqLworCisJCURBUFFfdGFpbCA9ICgrK2JhbmtfbnVtICUgMykgKiBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisJCXdyaXRldyhEQVBRX3RhaWwsIGNoaXAtPkRBUFEgKyBKUVNfd1RhaWwpOworCQkvKiBUZWxsIHRoZSBEU1AgdG8gcGxheSB0aGUgYmFuayAqLworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUQVJUKTsKKwkJaWYgKHByb3RlY3QpCisJCQlpZiAoMiA9PSBiYW5rX251bSkKKwkJCQlicmVhazsKKwl9CisJLyoKKwlpZiAocHJvdGVjdCkKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVsWFxuIiwgeHRpbWUudHZfdXNlYyk7CisJKi8KKwkvKiBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7IG5vdCBuZWNlc3NhcnkgKi8KKwlyZXR1cm4gbmJhbmtzOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9EQVBRKTsKKworc3RhdGljIHZvaWQgc25kX21zbmRfcGxheV9yZXNldF9xdWV1ZShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwY21fY291bnQpCit7CisJaW50CW47CisJdm9pZAkqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVBRX0RBVEFfQlVGRjsKKworCWNoaXAtPmxhc3RfcGxheWJhbmsgPSAtMTsKKwljaGlwLT5wbGF5TGltaXQgPSBwY21fY291bnQgKiAocGNtX3BlcmlvZHMgLSAxKTsKKwljaGlwLT5wbGF5UGVyaW9kcyA9IHBjbV9wZXJpb2RzOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVCgwICogREFRRFNfX3NpemUpLCBjaGlwLT5EQVBRICsgSlFTX3dIZWFkKTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoMCAqIERBUURTX19zaXplKSwgY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisKKwljaGlwLT5wbGF5X3BlcmlvZF9ieXRlcyA9IHBjbV9jb3VudDsKKworCWZvciAobiA9IDA7IG4gPCBwY21fcGVyaW9kczsgKytuLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKCh1MzIpKHBjbV9jb3VudCAqIG4pKSwKKwkJCXBEQVEgKyBEQVFEU193U3RhcnQpOworCQl3cml0ZXcoMCwgcERBUSArIERBUURTX3dTaXplKTsKKwkJd3JpdGV3KDEsIHBEQVEgKyBEQVFEU193Rm9ybWF0KTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJCXdyaXRldyhISU1UX1BMQVlfRE9ORSAqIDB4MTAwICsgbiwgcERBUSArIERBUURTX3dJbnRNc2cpOworCQl3cml0ZXcobiwgcERBUSArIERBUURTX3dGbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCQkJIHVuc2lnbmVkIGludCBwY21fcGVyaW9kcywKKwkJCQkJIHVuc2lnbmVkIGludCBwY21fY291bnQpCit7CisJaW50CQluOworCXZvaWQJCSpwREFROworCS8qIHVuc2lnbmVkIGxvbmcJZmxhZ3M7ICovCisKKwkvKiBzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUlEsIERBUlFfREFUQV9CVUZGLCBEQVJRX0JVRkZfU0laRSk7ICovCisKKwljaGlwLT5sYXN0X3JlY2JhbmsgPSAyOworCWNoaXAtPmNhcHR1cmVMaW1pdCA9IHBjbV9jb3VudCAqIChwY21fcGVyaW9kcyAtIDEpOworCWNoaXAtPmNhcHR1cmVQZXJpb2RzID0gcGNtX3BlcmlvZHM7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKDAgKiBEQVFEU19fc2l6ZSksIGNoaXAtPkRBUlEgKyBKUVNfd0hlYWQpOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVChjaGlwLT5sYXN0X3JlY2JhbmsgKiBEQVFEU19fc2l6ZSksCisJCWNoaXAtPkRBUlEgKyBKUVNfd1RhaWwpOworCisjaWYgMCAvKiBDcml0aWNhbCBzZWN0aW9uOiBiYW5rIDEgYWNjZXNzLiB0aGlzIGlzIGhvdyB0aGUgT1NTIGRyaXZlciBkb2VzIGl0OiovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKwlvdXRiKEhQQkxLU0VMXzEsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJbWVtc2V0X2lvKGNoaXAtPm1hcHBlZGJhc2UsIDAsIERBUl9CVUZGX1NJWkUgKiAzKTsKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworI2VuZGlmCisKKwljaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXMgPSBwY21fY291bnQ7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NhcHR1cmVfcmVzZXRfcXVldWUoKSAlaVxuIiwgcGNtX2NvdW50KTsKKworCXBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwlmb3IgKG4gPSAwOyBuIDwgcGNtX3BlcmlvZHM7ICsrbiwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl1MzIgdG1wID0gcGNtX2NvdW50ICogbjsKKworCQl3cml0ZXcoUENUT0RTUF9CQVNFRCh0bXAgKyAweDMwMDApLCBwREFRICsgREFRRFNfd1N0YXJ0KTsKKwkJd3JpdGV3KHBjbV9jb3VudCwgcERBUSArIERBUURTX3dTaXplKTsKKwkJd3JpdGV3KDEsIHBEQVEgKyBEQVFEU193Rm9ybWF0KTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJCXdyaXRldyhISU1UX1JFQ09SRF9ET05FICogMHgxMDAgKyBuLCBwREFRICsgREFRRFNfd0ludE1zZyk7CisJCXdyaXRldyhuLCBwREFRICsgREFRRFNfd0ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbXNuZF9wbGF5YmFjayA9IHsKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9CQk4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTEsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JMHgzMDAwLAorCS5wZXJpb2RfYnl0ZXNfbWluID0JMHg0MCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTB4MTgwMCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMywKKwkuZmlmb19zaXplID0JCTAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX21zbmRfY2FwdHVyZSA9IHsKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9CQk4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTEsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JMHgzMDAwLAorCS5wZXJpb2RfYnl0ZXNfbWluID0JMHg0MCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTB4MTgwMCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMywKKwkuZmlmb19zaXplID0JCTAsCit9OworCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNldF9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2VuYWJsZV9pcnEoY2hpcCk7CisKKwlydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPm1hcHBlZGJhc2U7CisJcnVudGltZS0+ZG1hX2J5dGVzID0gMHgzMDAwOworCisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX21zbmRfcGxheWJhY2s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJY2xlYXJfYml0KEZfQVVESU9fV1JJVEVfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludAlpOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl2b2lkCSpwREFRID0JY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfREFUQV9CVUZGOworCisJY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJY2hpcC0+cGxheV9jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwl9CisJLyogZG9udCBkbyB0aGlzIGhlcmU6CisJICogc25kX21zbmRfY2FsaWJyYXRlX2FkYyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlKTsKKwkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMgPSBwY21fc2l6ZSAvIHBjbV9jb3VudDsKKworCXNuZF9tc25kX3BsYXlfcmVzZXRfcXVldWUoY2hpcCwgcGNtX3BlcmlvZHMsIHBjbV9jb3VudCk7CisJY2hpcC0+cGxheURNQVBvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludAlyZXN1bHQgPSAwOworCisJaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCkgeworCQlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihTVEFSVClcbiIpOworCQljaGlwLT5iYW5rc1BsYXllZCA9IDA7CisJCXNldF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9EQVBRKGNoaXAsIDEpOworCX0gZWxzZSBpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUT1ApIHsKKwkJc25kX3ByaW50ZGQoInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoU1RvcClcbiIpOworCQkvKiBpbnRlcnJ1cHQgZGlhZ25vc3RpYywgY29tbWVudCB0aGlzIG91dCBsYXRlciAqLworCQljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUT1ApOworCX0gZWxzZSB7CisJCXNuZF9wcmludGQoS0VSTl9FUlIgInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoPz8/Pz8pXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcigpIEVOREVcbiIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX21zbmRfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgY2hpcC0+cGxheURNQVBvcyk7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXNuZF9wbGF5YmFja19vcHMgPSB7CisJLm9wZW4gPQkJc25kX21zbmRfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPQlzbmRfbXNuZF9wbGF5YmFja19jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX21zbmRfcGxheWJhY2tfaHdfcGFyYW1zLAorCS5wcmVwYXJlID0Jc25kX21zbmRfcGxheWJhY2tfcHJlcGFyZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIsCisJLnBvaW50ZXIgPQlzbmRfbXNuZF9wbGF5YmFja19wb2ludGVyLAorfTsKKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzZXRfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwlzbmRfbXNuZF9lbmFibGVfaXJxKGNoaXApOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gY2hpcC0+bWFwcGVkYmFzZSArIDB4MzAwMDsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSAweDMwMDA7CisJbWVtc2V0KHJ1bnRpbWUtPmRtYV9hcmVhLCAwLCBydW50aW1lLT5kbWFfYnl0ZXMpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX21zbmRfY2FwdHVyZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCWNsZWFyX2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX2NvdW50ID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzID0gcGNtX3NpemUgLyBwY21fY291bnQ7CisKKwlzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKGNoaXAsIHBjbV9wZXJpb2RzLCBwY21fY291bnQpOworCWNoaXAtPmNhcHR1cmVETUFQb3MgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSB7CisJCWNoaXAtPmxhc3RfcmVjYmFuayA9IC0xOworCQlzZXRfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVEFSVCkgPT0gMCkKKwkJCXJldHVybiAwOworCisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJfSBlbHNlIGlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RPUCkgeworCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9SRUNPUkRfU1RPUCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9tc25kX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgY2hpcC0+Y2FwdHVyZURNQVBvcyk7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJaW50CQlpOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl2b2lkCQkqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRjsKKworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCWNoaXAtPmNhcHR1cmVfY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2ksIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX21zbmRfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPQkJc25kX21zbmRfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CXNuZF9tc25kX2NhcHR1cmVfaHdfcGFyYW1zLAorCS5wcmVwYXJlID0Jc25kX21zbmRfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX21zbmRfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX21zbmRfY2FwdHVyZV9wb2ludGVyLAorfTsKKworCitpbnQgc25kX21zbmRfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwKKwkJCXN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9wY20JKnBjbTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3BjbV9uZXcoY2FyZCwgIk1TTkRQSU5OQUNMRSIsIGRldmljZSwgMSwgMSwgJnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX21zbmRfcGxheWJhY2tfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfbXNuZF9jYXB0dXJlX29wcyk7CisKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJc3RyY3B5KHBjbS0+bmFtZSwgIkh1cnJpY2FuZSIpOworCisKKwlpZiAocnBjbSkKKwkJKnJwY20gPSBwY207CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3BjbSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIHJvdXRpbmVzIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlzb3VuZCBkcml2ZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmQuaCBiL3NvdW5kL2lzYS9tc25kL21zbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzczZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZC5oCkBAIC0wLDAgKzEsMzA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbXNuZC5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX0gKKyNkZWZpbmUgX19NU05EX0gKKworI2RlZmluZSBERUZTQU1QTEVSQVRFCQk0NDEwMAorI2RlZmluZSBERUZTQU1QTEVTSVpFCQlTTkRSVl9QQ01fRk9STUFUX1MxNgorI2RlZmluZSBERUZDSEFOTkVMUwkJMQorCisjZGVmaW5lIFNSQU1fQkFOS19TSVpFCQkweDgwMDAKKyNkZWZpbmUgU1JBTV9DTlRMX1NUQVJUCQkweDdGMDAKKyNkZWZpbmUgU01BX1NUUlVDVF9TVEFSVAkweDdGNDAKKworI2RlZmluZSBEU1BfQkFTRV9BRERSCQkweDQwMDAKKyNkZWZpbmUgRFNQX0JBTktfQkFTRQkJMHg0MDAwCisKKyNkZWZpbmUgQUdORAkJCTB4MDEKKyNkZWZpbmUgU0lHTkFMCQkJMHgwMgorCisjZGVmaW5lIEVYVF9EU1BfQklUX0RDQUwJMHgwMDAxCisjZGVmaW5lIEVYVF9EU1BfQklUX01JRElfQ09OCTB4MDAwMgorCisjZGVmaW5lIEJVRkZTSVpFCQkweDgwMDAKKyNkZWZpbmUgSE9TVFFfU0laRQkJMHg0MAorCisjZGVmaW5lIERBUF9CVUZGX1NJWkUJCTB4MjQwMAorCisjZGVmaW5lIERBUFFfU1RSVUNUX1NJWkUJMHgxMAorI2RlZmluZSBEQVJRX1NUUlVDVF9TSVpFCTB4MTAKKyNkZWZpbmUgREFQUV9CVUZGX1NJWkUJCSgzICogMHgxMCkKKyNkZWZpbmUgREFSUV9CVUZGX1NJWkUJCSgzICogMHgxMCkKKyNkZWZpbmUgTU9EUV9CVUZGX1NJWkUJCTB4NDAwCisKKyNkZWZpbmUgREFQUV9EQVRBX0JVRkYJCTB4NkMwMAorI2RlZmluZSBEQVJRX0RBVEFfQlVGRgkJMHg2QzMwCisjZGVmaW5lIE1PRFFfREFUQV9CVUZGCQkweDZDNjAKKyNkZWZpbmUgTUlEUV9EQVRBX0JVRkYJCTB4NzA2MAorCisjZGVmaW5lIERBUFFfT0ZGU0VUCQlTUkFNX0NOVExfU1RBUlQKKyNkZWZpbmUgREFSUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDA4KQorI2RlZmluZSBNT0RRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MTApCisjZGVmaW5lIE1JRFFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgxOCkKKyNkZWZpbmUgRFNQUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDIwKQorCisjZGVmaW5lCUhQX0lDUgkJCTB4MDAKKyNkZWZpbmUJSFBfQ1ZSCQkJMHgwMQorI2RlZmluZQlIUF9JU1IJCQkweDAyCisjZGVmaW5lCUhQX0lWUgkJCTB4MDMKKyNkZWZpbmUgSFBfTlUJCQkweDA0CisjZGVmaW5lIEhQX0lORk8JCQkweDA0CisjZGVmaW5lCUhQX1RYSAkJCTB4MDUKKyNkZWZpbmUJSFBfUlhICQkJMHgwNQorI2RlZmluZQlIUF9UWE0JCQkweDA2CisjZGVmaW5lCUhQX1JYTQkJCTB4MDYKKyNkZWZpbmUJSFBfVFhMCQkJMHgwNworI2RlZmluZQlIUF9SWEwJCQkweDA3CisKKyNkZWZpbmUgSFBfSUNSX0RFRgkJMHgwMAorI2RlZmluZSBIUF9DVlJfREVGCQkweDEyCisjZGVmaW5lIEhQX0lTUl9ERUYJCTB4MDYKKyNkZWZpbmUgSFBfSVZSX0RFRgkJMHgwZgorI2RlZmluZSBIUF9OVV9ERUYJCTB4MDAKKworI2RlZmluZQlIUF9JUlFNCQkJMHgwOQorCisjZGVmaW5lCUhQUl9CTFJDCQkweDA4CisjZGVmaW5lCUhQUl9TUFIxCQkweDA5CisjZGVmaW5lCUhQUl9TUFIyCQkweDBBCisjZGVmaW5lCUhQUl9UQ0wwCQkweDBCCisjZGVmaW5lCUhQUl9UQ0wxCQkweDBDCisjZGVmaW5lCUhQUl9UQ0wyCQkweDBECisjZGVmaW5lCUhQUl9UQ0wzCQkweDBFCisjZGVmaW5lCUhQUl9UQ0w0CQkweDBGCisKKyNkZWZpbmUJSFBJQ1JfSU5JVAkJMHg4MAorI2RlZmluZSBIUElDUl9ITTEJCTB4NDAKKyNkZWZpbmUgSFBJQ1JfSE0wCQkweDIwCisjZGVmaW5lIEhQSUNSX0hGMQkJMHgxMAorI2RlZmluZSBIUElDUl9IRjAJCTB4MDgKKyNkZWZpbmUJSFBJQ1JfVFJFUQkJMHgwMgorI2RlZmluZQlIUElDUl9SUkVRCQkweDAxCisKKyNkZWZpbmUgSFBDVlJfSEMJCTB4ODAKKworI2RlZmluZQlIUElTUl9IUkVRCQkweDgwCisjZGVmaW5lIEhQSVNSX0RNQQkJMHg0MAorI2RlZmluZSBIUElTUl9IRjMJCTB4MTAKKyNkZWZpbmUgSFBJU1JfSEYyCQkweDA4CisjZGVmaW5lCUhQSVNSX1RSRFkJCTB4MDQKKyNkZWZpbmUJSFBJU1JfVFhERQkJMHgwMgorI2RlZmluZQlIUElTUl9SWERGCQkweDAxCisKKyNkZWZpbmUJSFBJT18yOTAJCTAKKyNkZWZpbmUJSFBJT18yNjAJCTEKKyNkZWZpbmUJSFBJT18yNTAJCTIKKyNkZWZpbmUJSFBJT18yNDAJCTMKKyNkZWZpbmUJSFBJT18yMzAJCTQKKyNkZWZpbmUJSFBJT18yMjAJCTUKKyNkZWZpbmUJSFBJT18yMTAJCTYKKyNkZWZpbmUJSFBJT18zRTAJCTcKKworI2RlZmluZQlIUE1FTV9OT05FCQkwCisjZGVmaW5lCUhQTUVNX0IwMDAJCTEKKyNkZWZpbmUJSFBNRU1fQzgwMAkJMgorI2RlZmluZQlIUE1FTV9EMDAwCQkzCisjZGVmaW5lCUhQTUVNX0Q0MDAJCTQKKyNkZWZpbmUJSFBNRU1fRDgwMAkJNQorI2RlZmluZQlIUE1FTV9FMDAwCQk2CisjZGVmaW5lCUhQTUVNX0U4MDAJCTcKKworI2RlZmluZQlIUElSUV9OT05FCQkwCisjZGVmaW5lIEhQSVJRXzUJCQkxCisjZGVmaW5lIEhQSVJRXzcJCQkyCisjZGVmaW5lIEhQSVJRXzkJCQkzCisjZGVmaW5lIEhQSVJRXzEwCQk0CisjZGVmaW5lIEhQSVJRXzExCQk1CisjZGVmaW5lIEhQSVJRXzEyCQk2CisjZGVmaW5lIEhQSVJRXzE1CQk3CisKKyNkZWZpbmUJSElNVF9QTEFZX0RPTkUJCTB4MDAKKyNkZWZpbmUJSElNVF9SRUNPUkRfRE9ORQkweDAxCisjZGVmaW5lCUhJTVRfTUlESV9FT1MJCTB4MDIKKyNkZWZpbmUJSElNVF9NSURJX09VVAkJMHgwMworCisjZGVmaW5lCUhJTVRfTUlESV9JTl9VQ0hBUgkweDBFCisjZGVmaW5lCUhJTVRfRFNQCQkweDBGCisKKyNkZWZpbmUJSERFWF9CQVNFCSAgICAgICAJMHg5MgorI2RlZmluZQlIREVYX1BMQVlfU1RBUlQJCSgwICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1BMQVlfU1RPUAkJKDEgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9QQVVTRQkJKDIgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9SRVNVTUUJKDMgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUkVDT1JEX1NUQVJUCSg0ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1JFQ09SRF9TVE9QCSg1ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfSU5fU1RBUlQgCSg2ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfSU5fU1RPUAkoNyArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX09VVF9TVEFSVAkoOCArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX09VVF9TVE9QCSg5ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX0FVWF9SRVEJCSgxMCArIEhERVhfQkFTRSkKKworI2RlZmluZQlIREVYQVJfQ0xFQVJfUEVBS1MJMQorI2RlZmluZQlIREVYQVJfSU5fU0VUX1BPVFMJMgorI2RlZmluZQlIREVYQVJfQVVYX1NFVF9QT1RTCTMKKyNkZWZpbmUJSERFWEFSX0NBTF9BX1RPX0QJNAorI2RlZmluZQlIREVYQVJfUkRfRVhUX0RTUF9CSVRTCTUKKworLyogUGlubmFjbGUgb25seSBIREVYQVIgZGVmcyAqLworI2RlZmluZQlIREVYQVJfU0VUX0FOQV9JTgkwCisjZGVmaW5lCUhERVhBUl9TRVRfU1lOVEhfSU4JNAorI2RlZmluZQlIREVYQVJfUkVBRF9EQVRfSU4JNQorI2RlZmluZQlIREVYQVJfTUlDX1NFVF9QT1RTCTYKKyNkZWZpbmUJSERFWEFSX1NFVF9EQVRfSU4JNworCisjZGVmaW5lIEhERVhBUl9TRVRfU1lOVEhfNDgJOAorI2RlZmluZSBIREVYQVJfU0VUX1NZTlRIXzQ0CTkKKworI2RlZmluZSBISVdPUkQobCkJCSgodTE2KSgoKCh1MzIpKGwpKSA+PiAxNikgJiAweEZGRkYpKQorI2RlZmluZSBMT1dPUkQobCkJCSgodTE2KSh1MzIpKGwpKQorI2RlZmluZSBISUJZVEUodykJCSgodTgpKCgodTE2KSh3KSA+PiA4KSAmIDB4RkYpKQorI2RlZmluZSBMT0JZVEUodykJCSgodTgpKHcpKQorI2RlZmluZSBNQUtFTE9ORyhsb3csIGhpKQkoKGxvbmcpKCgodTE2KShsb3cpKXwoKCh1MzIpKCh1MTYpKGhpKSkpPDwxNikpKQorI2RlZmluZSBNQUtFV09SRChsb3csIGhpKQkoKHUxNikoKCh1OCkobG93KSl8KCgodTE2KSgodTgpKGhpKSkpPDw4KSkpCisKKyNkZWZpbmUgUENUT0RTUF9PRkZTRVQodykJKHUxNikoKHcpLzIpCisjZGVmaW5lIFBDVE9EU1BfQkFTRUQodykJKHUxNikoKCh3KS8yKSArIERTUF9CQVNFX0FERFIpCisjZGVmaW5lIERTUFRPUENfQkFTRUQodykJKCgodykgLSBEU1BfQkFTRV9BRERSKSAqIDIpCisKKyNpZmRlZiBTTE9XSU8KKyMgIHVuZGVmIG91dGIKKyMgIHVuZGVmIGluYgorIyAgZGVmaW5lIG91dGIJCQlvdXRiX3AKKyMgIGRlZmluZSBpbmIJCQlpbmJfcAorI2VuZGlmCisKKy8qIEpvYlF1ZXVlU3RydWN0ICovCisjZGVmaW5lIEpRU193U3RhcnQJCTB4MDAKKyNkZWZpbmUgSlFTX3dTaXplCQkweDAyCisjZGVmaW5lIEpRU193SGVhZAkJMHgwNAorI2RlZmluZSBKUVNfd1RhaWwJCTB4MDYKKyNkZWZpbmUgSlFTX19zaXplCQkweDA4CisKKy8qIERBUXVldWVEYXRhU3RydWN0ICovCisjZGVmaW5lIERBUURTX3dTdGFydAkJMHgwMAorI2RlZmluZSBEQVFEU193U2l6ZQkJMHgwMgorI2RlZmluZSBEQVFEU193Rm9ybWF0CQkweDA0CisjZGVmaW5lIERBUURTX3dTYW1wbGVTaXplCTB4MDYKKyNkZWZpbmUgREFRRFNfd0NoYW5uZWxzCQkweDA4CisjZGVmaW5lIERBUURTX3dTYW1wbGVSYXRlCTB4MEEKKyNkZWZpbmUgREFRRFNfd0ludE1zZwkJMHgwQworI2RlZmluZSBEQVFEU193RmxhZ3MJCTB4MEUKKyNkZWZpbmUgREFRRFNfX3NpemUJCTB4MTAKKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCitzdHJ1Y3Qgc25kX21zbmQgeworCXZvaWQgX19pb21lbQkJKm1hcHBlZGJhc2U7CisJaW50CQkJcGxheV9wZXJpb2RfYnl0ZXM7CisJaW50CQkJcGxheUxpbWl0OworCWludAkJCXBsYXlQZXJpb2RzOworCWludCAJCQlwbGF5RE1BUG9zOworCWludAkJCWJhbmtzUGxheWVkOworCWludCAJCQljYXB0dXJlRE1BUG9zOworCWludAkJCWNhcHR1cmVQZXJpb2RCeXRlczsKKwlpbnQJCQljYXB0dXJlTGltaXQ7CisJaW50CQkJY2FwdHVyZVBlcmlvZHM7CisJc3RydWN0IHNuZF9jYXJkCQkqY2FyZDsKKwl2b2lkCQkJKm1zbmRtaWRpX21wdTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkJKnJtaWRpOworCisJLyogSGFyZHdhcmUgcmVzb3VyY2VzICovCisJbG9uZyBpbzsKKwlpbnQgbWVtaWQsIGlycWlkOworCWludCBpcnEsIGlycV9yZWY7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCisJLyogTW90b3JvbGEgNTZrIERTUCBTTUEgKi8KKwl2b2lkIF9faW9tZW0JKlNNQTsKKwl2b2lkIF9faW9tZW0JKkRBUFE7CisJdm9pZCBfX2lvbWVtCSpEQVJROworCXZvaWQgX19pb21lbQkqTU9EUTsKKwl2b2lkIF9faW9tZW0JKk1JRFE7CisJdm9pZCBfX2lvbWVtCSpEU1BROworCWludCBkc3BxX2RhdGFfYnVmZiwgZHNwcV9idWZmX3NpemU7CisKKwkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KKwllbnVtIHsgbXNuZENsYXNzaWMsIG1zbmRQaW5uYWNsZSB9IHR5cGU7CisJbW9kZV90IG1vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgRl9SRVNFVFRJTkcJCQkwCisjZGVmaW5lIEZfSEFWRURJR0lUQUwJCQkxCisjZGVmaW5lIEZfQVVESU9fV1JJVEVfSU5VU0UJCTIKKyNkZWZpbmUgRl9XUklUSU5HCQkJMworI2RlZmluZSBGX1dSSVRFQkxPQ0sJCQk0CisjZGVmaW5lIEZfV1JJVEVGTFVTSAkJCTUKKyNkZWZpbmUgRl9BVURJT19SRUFEX0lOVVNFCQk2CisjZGVmaW5lIEZfUkVBRElORwkJCTcKKyNkZWZpbmUgRl9SRUFEQkxPQ0sJCQk4CisjZGVmaW5lIEZfRVhUX01JRElfSU5VU0UJCTkKKyNkZWZpbmUgRl9IRFJfTUlESV9JTlVTRQkJMTAKKyNkZWZpbmUgRl9ESVNBQkxFX1dSSVRFX05ERUxBWQkJMTEKKwlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOworCWludCBucmVzZXRzOworCXVuc2lnbmVkIHJlY3NyYzsKKyNkZWZpbmUgTEVWRUxfRU5UUklFUyAzMgorCWludCBsZWZ0X2xldmVsc1tMRVZFTF9FTlRSSUVTXTsKKwlpbnQgcmlnaHRfbGV2ZWxzW0xFVkVMX0VOVFJJRVNdOworCWludCBjYWxpYnJhdGVfc2lnbmFsOworCWludCBwbGF5X3NhbXBsZV9zaXplLCBwbGF5X3NhbXBsZV9yYXRlLCBwbGF5X2NoYW5uZWxzOworCWludCBwbGF5X25kZWxheTsKKwlpbnQgY2FwdHVyZV9zYW1wbGVfc2l6ZSwgY2FwdHVyZV9zYW1wbGVfcmF0ZSwgY2FwdHVyZV9jaGFubmVsczsKKwlpbnQgY2FwdHVyZV9uZGVsYXk7CisJdTggYkN1cnJlbnRNaWRpUGF0Y2g7CisKKwlpbnQgbGFzdF9wbGF5YmFuaywgbGFzdF9yZWNiYW5rOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGxheWJhY2tfc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqY2FwdHVyZV9zdWJzdHJlYW07CisKK307CisKK3ZvaWQgc25kX21zbmRfaW5pdF9xdWV1ZSh2b2lkICpiYXNlLCBpbnQgc3RhcnQsIGludCBzaXplKTsKKworaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHU4IGNtZCk7CitpbnQgc25kX21zbmRfc2VuZF93b3JkKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgaGlnaCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgbWlkLAorCQkJICAgdW5zaWduZWQgY2hhciBsb3cpOworaW50IHNuZF9tc25kX3VwbG9hZF9ob3N0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCSAgICAgY29uc3QgdTggKmJpbiwgaW50IGxlbik7CitpbnQgc25kX21zbmRfZW5hYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmNoaXApOworaW50IHNuZF9tc25kX2Rpc2FibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCk7Cit2b2lkIHNuZF9tc25kX2RzcF9oYWx0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgc3RydWN0IGZpbGUgKmZpbGUpOworaW50IHNuZF9tc25kX0RBUFEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpOworaW50IHNuZF9tc25kX0RBUlEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpOworaW50IHNuZF9tc25kX3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CisKK2ludCBzbmRfbXNuZG1pZGlfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSk7Cit2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKHZvaWQgKm1wdSk7CisKK3ZvaWQgc25kX21zbmRtaXhfc2V0dXAoc3RydWN0IHNuZF9tc25kICpjaGlwKTsKK2ludCBfX2RldmluaXQgc25kX21zbmRtaXhfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CitpbnQgc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHJlY3NyYyk7CisjZW5kaWYgLyogX19NU05EX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyM2EwOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jCkBAIC0wLDAgKzEsMyBAQAorLyogVGhlIHdvcmsgaXMgaW4gbXNuZF9waW5uYWNsZS5jLCBqdXN0IGRlZmluZSBNU05EX0NMQVNTSUMgYmVmb3JlIGl0LiAqLworI2RlZmluZSBNU05EX0NMQVNTSUMKKyNpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaCBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOGQ1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1zbmRfY2xhc3NpYy5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX0NMQVNTSUNfSAorI2RlZmluZSBfX01TTkRfQ0xBU1NJQ19ICisKKyNkZWZpbmUgRFNQX05VTUlPCQkJCTB4MTAKKworI2RlZmluZQlIUF9NRU1NCQkJCQkweDA4CisKKyNkZWZpbmUJSFBfQklUTQkJCQkJMHgwRQorI2RlZmluZQlIUF9XQUlUCQkJCQkweDBECisjZGVmaW5lCUhQX0RTUFIJCQkJCTB4MEEKKyNkZWZpbmUJSFBfUFJPUgkJCQkJMHgwQgorI2RlZmluZQlIUF9CTEtTCQkJCQkweDBDCisKKyNkZWZpbmUJSFBQUk9SRVNFVF9PRkYJCQkJMAorI2RlZmluZSBIUFBST1JFU0VUX09OCQkJCTEKKworI2RlZmluZSBIUERTUFJFU0VUX09GRgkJCQkwCisjZGVmaW5lIEhQRFNQUkVTRVRfT04JCQkJMQorCisjZGVmaW5lIEhQQkxLU0VMXzAJCQkJMAorI2RlZmluZSBIUEJMS1NFTF8xCQkJCTEKKworI2RlZmluZSBIUFdBSVRTVEFURV8wCQkJCTAKKyNkZWZpbmUgSFBXQUlUU1RBVEVfMQkJCQkxCisKKyNkZWZpbmUgSFBCSVRNT0RFXzE2CQkJCTAKKyNkZWZpbmUgSFBCSVRNT0RFXzgJCQkJMQorCisjZGVmaW5lCUhJRFNQX0lOVF9QTEFZX1VOREVSCQkJMHgwMAorI2RlZmluZQlISURTUF9JTlRfUkVDT1JEX09WRVIJCQkweDAxCisjZGVmaW5lCUhJRFNQX0lOUFVUX0NMSVBQSU5HCQkJMHgwMgorI2RlZmluZQlISURTUF9NSURJX0lOX09WRVIJCQkweDEwCisjZGVmaW5lCUhJRFNQX01JRElfT1ZFUlJVTl9FUlIgIDB4MTMKKworI2RlZmluZSBUSU1FX1BST19SRVNFVF9ET05FCQkJMHgwMjhBCisjZGVmaW5lIFRJTUVfUFJPX1NZU0VYCQkJCTB4MDA0MAorI2RlZmluZSBUSU1FX1BST19SRVNFVAkJCQkweDAwMzIKKworI2RlZmluZSBEQVJfQlVGRl9TSVpFCQkJCTB4MjAwMAorCisjZGVmaW5lIE1JRFFfQlVGRl9TSVpFCQkJCTB4MjAwCisjZGVmaW5lIERTUFFfQlVGRl9TSVpFCQkJCTB4NDAKKworI2RlZmluZSBEU1BRX0RBVEFfQlVGRgkJCQkweDcyNjAKKworI2RlZmluZSBNT1BfU1lOVEgJCQkJMHgxMAorI2RlZmluZSBNT1BfRVhUT1VUCQkJCTB4MzIKKyNkZWZpbmUgTU9QX0VYVFRIUlUJCQkJMHgwMgorI2RlZmluZSBNT1BfT1VUTUFTSwkJCQkweDAxCisKKyNkZWZpbmUgTUlQX0VYVElOCQkJCTB4MDEKKyNkZWZpbmUgTUlQX1NZTlRICQkJCTB4MDAKKyNkZWZpbmUgTUlQX0lOTUFTSwkJCQkweDMyCisKKy8qIENsYXNzaWMgU01BIENvbW1vbiBEYXRhICovCisjZGVmaW5lIFNNQV93Q3VyclBsYXlCeXRlcwkJCTB4MDAwMAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRCeXRlcwkJCTB4MDAwMgorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sTGVmdAkJCTB4MDAwNAorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sUmlnaHQJCQkweDAwMDYKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xMZWZ0CQkJMHgwMDA4CisjZGVmaW5lIFNNQV93Q3VyckluVm9sUmlnaHQJCQkweDAwMGEKKyNkZWZpbmUgU01BX3dVc2VyXzMJCQkJMHgwMDBjCisjZGVmaW5lIFNNQV93VXNlcl80CQkJCTB4MDAwZQorI2RlZmluZSBTTUFfZHdVc2VyXzUJCQkJMHgwMDEwCisjZGVmaW5lIFNNQV9kd1VzZXJfNgkJCQkweDAwMTQKKyNkZWZpbmUgU01BX3dVc2VyXzcJCQkJMHgwMDE4CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfQQkJCQkweDAwMWEKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9CCQkJCTB4MDAxYworI2RlZmluZSBTTUFfd1Jlc2VydmVkX0MJCQkJMHgwMDFlCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRAkJCQkweDAwMjAKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9FCQkJCTB4MDAyMgorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0YJCQkJMHgwMDI0CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRwkJCQkweDAwMjYKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9ICQkJCTB4MDAyOAorI2RlZmluZSBTTUFfd0N1cnJEU1BTdGF0dXNGbGFncwkJCTB4MDAyYQorI2RlZmluZSBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MJCTB4MDAyYworI2RlZmluZSBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMJCQkweDAwMmUKKyNkZWZpbmUgU01BX3dDdXJyTGVmdFBlYWsJCQkweDAwMzAKKyNkZWZpbmUgU01BX3dDdXJyUmlnaHRQZWFrCQkJMHgwMDMyCisjZGVmaW5lIFNNQV93RXh0RFNQYml0cwkJCQkweDAwMzQKKyNkZWZpbmUgU01BX2JFeHRIb3N0Yml0cwkJCTB4MDAzNgorI2RlZmluZSBTTUFfYkJvYXJkTGV2ZWwJCQkJMHgwMDM3CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NSaWdodAkJCTB4MDAzOAorI2RlZmluZSBTTUFfYkluUG90UG9zTGVmdAkJCTB4MDAzOQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc1JpZ2h0CQkJMHgwMDNhCisjZGVmaW5lIFNNQV9iQXV4UG90UG9zTGVmdAkJCTB4MDAzYgorI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sTGVmdAkJCTB4MDAzYworI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQJCQkweDAwM2UKKyNkZWZpbmUgU01BX2JVc2VyXzEyCQkJCTB4MDA0MAorI2RlZmluZSBTTUFfYlVzZXJfMTMJCQkJMHgwMDQxCisjZGVmaW5lIFNNQV93VXNlcl8xNAkJCQkweDAwNDIKKyNkZWZpbmUgU01BX3dVc2VyXzE1CQkJCTB4MDA0NAorI2RlZmluZSBTTUFfd0NhbEZyZXFBdG9ECQkJMHgwMDQ2CisjZGVmaW5lIFNNQV93VXNlcl8xNgkJCQkweDAwNDgKKyNkZWZpbmUgU01BX3dVc2VyXzE3CQkJCTB4MDA0YQorI2RlZmluZSBTTUFfX3NpemUJCQkJMHgwMDRjCisKKyNkZWZpbmUgSU5JVENPREVGSUxFCQkidHVydGxlYmVhY2gvbXNuZGluaXQuYmluIgorI2RlZmluZSBQRVJNQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9tc25kcGVybS5iaW4iCisjZGVmaW5lIExPTkdOQU1FCQkiTXVsdGlTb3VuZCAoQ2xhc3NpYy9Nb250ZXJleS9UYWhpdGkpIgorCisjZW5kaWYgLyogX19NU05EX0NMQVNTSUNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjlhYTRjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PgorICogIENvcHlyaWdodCAoYykgMjAwOSBieSBLcnp5c3p0b2YgSGVsdAorICogIFJvdXRpbmVzIGZvciBjb250cm9sIG9mIE1QVS00MDEgaW4gVUFSVCBtb2RlCisgKgorICogIE1QVS00MDEgc3VwcG9ydHMgVUFSVCBtb2RlIHdoaWNoIGlzIG5vdCBjYXBhYmxlIGdlbmVyYXRlIHRyYW5zbWl0CisgKiAgaW50ZXJydXB0cyB0aHVzIG91dHB1dCBpcyBkb25lIHZpYSBwb2xsaW5nLiBBbHNvLCBpZiBpcnEgPCAwLCB0aGVuCisgKiAgaW5wdXQgaXMgZG9uZSBhbHNvIHZpYSBwb2xsaW5nLiBEbyBub3QgZXhwZWN0IGdvb2QgcGVyZm9ybWFuY2UuCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisKKyNpbmNsdWRlICJtc25kLmgiCisKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfSU5QVVQJCTAKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfT1VUUFVUCQkxCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIJMgorI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9PVVRQVVRfVFJJR0dFUgkzCisKK3N0cnVjdCBzbmRfbXNuZG1pZGkgeworCXN0cnVjdCBzbmRfbXNuZCAqZGV2OworCisJdW5zaWduZWQgbG9uZyBtb2RlOwkJLyogTVNORE1JRElfTU9ERV9YWFhYICovCisKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW1faW5wdXQ7CisKKwlzcGlubG9ja190IGlucHV0X2xvY2s7Cit9OworCisvKgorICogaW5wdXQvb3V0cHV0IG9wZW4vY2xvc2UgLSBwcm90ZWN0ZWQgYnkgb3Blbl9tdXRleCBpbiByYXdtaWRpLmMKKyAqLworc3RhdGljIGludCBzbmRfbXNuZG1pZGlfaW5wdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCisJc25kX3ByaW50ZGQoInNuZF9tc25kbWlkaV9pbnB1dF9vcGVuKClcbiIpOworCisJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBzdWJzdHJlYW07CisKKwlzbmRfbXNuZF9lbmFibGVfaXJxKG1wdS0+ZGV2KTsKKworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPmRldiwgSERFWF9NSURJX0lOX1NUQVJUKTsKKwlzZXRfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1pZGlfaW5wdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5kZXYsIEhERVhfTUlESV9JTl9TVE9QKTsKKwljbGVhcl9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOworCW1wdS0+c3Vic3RyZWFtX2lucHV0ID0gTlVMTDsKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShtcHUtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9kcm9wKHN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdSkKK3sKKwl1MTYgdGFpbDsKKworCXRhaWwgPSByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193VGFpbCk7CisJd3JpdGV3KHRhaWwsIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKK30KKworLyoKKyAqIHRyaWdnZXIgaW5wdXQKKyAqLworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlpbnQgdXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIoLCAlaSlcbiIsIHVwKTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7CisJaWYgKHVwKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLAorCQkJCSAgICAgICZtcHUtPm1vZGUpKQorCQkJc25kX21zbmRtaWRpX2lucHV0X2Ryb3AobXB1KTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwgJm1wdS0+bW9kZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCWlmICh1cCkKKwkJc25kX21zbmRtaWRpX2lucHV0X3JlYWQobXB1KTsKK30KKwordm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCh2b2lkICptcHV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1ID0gbXB1djsKKwl2b2lkICpwd01JRFFEYXRhID0gbXB1LT5kZXYtPm1hcHBlZGJhc2UgKyBNSURRX0RBVEFfQlVGRjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAocmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd1RhaWwpICE9CisJICAgICAgIHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSkgeworCQl1MTYgd1RtcCwgdmFsOworCQl2YWwgPSByZWFkdyhwd01JRFFEYXRhICsgMiAqIHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSk7CisKKwkJCWlmICh0ZXN0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLAorCQkJCSAgICAgJm1wdS0+bW9kZSkpCisJCQkJc25kX3Jhd21pZGlfcmVjZWl2ZShtcHUtPnN1YnN0cmVhbV9pbnB1dCwKKwkJCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOworCisJCXdUbXAgPSByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCkgKyAxOworCQlpZiAod1RtcCA+IHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dTaXplKSkKKwkJCXdyaXRldygwLCAgbXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpOworCQllbHNlCisJCQl3cml0ZXcod1RtcCwgIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKTsKKworc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgc25kX21zbmRtaWRpX2lucHV0ID0geworCS5vcGVuID0JCXNuZF9tc25kbWlkaV9pbnB1dF9vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kbWlkaV9pbnB1dF9jbG9zZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kbWlkaV9pbnB1dF90cmlnZ2VyLAorfTsKKworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2ZyZWUoc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHUgPSBybWlkaS0+cHJpdmF0ZV9kYXRhOworCWtmcmVlKG1wdSk7Cit9CisKK2ludCBzbmRfbXNuZG1pZGlfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9yYXdtaWRpX25ldyhjYXJkLCAiTVNORC1NSURJIiwgZGV2aWNlLCAxLCAxLCAmcm1pZGkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCW1wdSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCptcHUpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXB1ID09IE5VTEwpIHsKKwkJc25kX2RldmljZV9mcmVlKGNhcmQsIHJtaWRpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1wdS0+ZGV2ID0gY2hpcDsKKwljaGlwLT5tc25kbWlkaV9tcHUgPSBtcHU7CisJcm1pZGktPnByaXZhdGVfZGF0YSA9IG1wdTsKKwlybWlkaS0+cHJpdmF0ZV9mcmVlID0gc25kX21zbmRtaWRpX2ZyZWU7CisJc3Bpbl9sb2NrX2luaXQoJm1wdS0+aW5wdXRfbG9jayk7CisJc3RyY3B5KHJtaWRpLT5uYW1lLCAiTVNORCBNSURJIik7CisJc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkgICAgJnNuZF9tc25kbWlkaV9pbnB1dCk7CisJcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjZhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMKQEAgLTAsMCArMSwxMjM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTGludXggbXVsdGlzb3VuZCBwaW5uYWNsZS9maWppIGRyaXZlciBmb3IgQUxTQS4KKyAqCisgKiAyMDAyLzA2LzMwIEthcnN0ZW4gV2llc2U6CisgKglmb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIHRvIGJ1aWxkIGEgcGlubmFjbGUgLyBmaWppIGRyaXZlci4KKyAqCXRoZSBPU1MgcGFyZW50IG9mIHRoaXMgY29kZSBpcyBkZXNpZ25lZCB0byBhbHNvIHN1cHBvcnQKKyAqCXRoZSBtdWx0aXNvdW5kIGNsYXNzaWMgdmlhIHRoZSBmaWxlIG1zbmRfY2xhc3NpYy5jLgorICoJdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHNvbWUgYnJhdmUgaGVhcnQgdG8gaW1wbGVtdCBjbGFzc2ljCisgKglzdXBwb3J0IGluIGFsc2EsIGkgbGVmdCBhbGwgdGhlIE1TTkRfQ0xBU1NJQyB0b2tlbnMgaW4gdGhpcyBmaWxlLgorICoJYnV0IGZvciBub3cgdGhpcyB1bnRlc3RlZCAmIHVuZG9uZS4KKyAqCisgKgorICogcmlwcGVkIGZyb20gbGludXgga2VybmVsIDIuNC4xOCBieSBLYXJzdGVuIFdpZXNlLgorICoKKyAqIHRoZSBmb2xsb3dpbmcgaXMgYSBjb3B5IG9mIHRoZSAyLjQuMTggT1NTIEZSRUUgZmlsZS1oZWFkaW5nIGNvbW1lbnQ6CisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKiBtc25kX3Bpbm5hY2xlLmMgLyBtc25kX2NsYXNzaWMuYworICoKKyAqIC0tIElmIE1TTkRfQ0xBU1NJQyBpcyBkZWZpbmVkOgorICoKKyAqICAgICAtPiBkcml2ZXIgZm9yIFR1cnRsZSBCZWFjaCBDbGFzc2ljL01vbnRlcmV5L1RhaGl0aQorICoKKyAqIC0tIEVsc2UKKyAqCisgKiAgICAgLT4gZHJpdmVyIGZvciBUdXJ0bGUgQmVhY2ggUGlubmFjbGUvRmlqaQorICoKKyAqIDEyLTMtMjAwMCAgTW9kaWZpZWQgSU8gcG9ydCB2YWxpZGF0aW9uICBTdGV2ZSBTeWNhbW9yZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgorCisjaWZkZWYgTVNORF9DTEFTU0lDCisjIGlmbmRlZiBfX2FscGhhX18KKyMgIGRlZmluZSBTTE9XSU8KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgIm1zbmQuaCIKKyNpZmRlZiBNU05EX0NMQVNTSUMKKyMgIGluY2x1ZGUgIm1zbmRfY2xhc3NpYy5oIgorIyAgZGVmaW5lIExPR05BTUUJCQkibXNuZF9jbGFzc2ljIgorI2Vsc2UKKyMgIGluY2x1ZGUgIm1zbmRfcGlubmFjbGUuaCIKKyMgIGRlZmluZSBMT0dOQU1FCQkJInNuZF9tc25kX3Bpbm5hY2xlIgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwljaGlwLT5wbGF5X3NhbXBsZV9zaXplID0gREVGU0FNUExFU0laRTsKKwljaGlwLT5wbGF5X3NhbXBsZV9yYXRlID0gREVGU0FNUExFUkFURTsKKwljaGlwLT5wbGF5X2NoYW5uZWxzID0gREVGQ0hBTk5FTFM7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSA9IERFRlNBTVBMRVNJWkU7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSA9IERFRlNBTVBMRVJBVEU7CisJY2hpcC0+Y2FwdHVyZV9jaGFubmVscyA9IERFRkNIQU5ORUxTOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9ldmFsX2RzcF9tc2coc3RydWN0IHNuZF9tc25kICpjaGlwLCB1MTYgd01lc3NhZ2UpCit7CisJc3dpdGNoIChISUJZVEUod01lc3NhZ2UpKSB7CisJY2FzZSBISU1UX1BMQVlfRE9ORTogeworCQlpZiAoY2hpcC0+YmFua3NQbGF5ZWQgPCAzKQorCQkJc25kX3ByaW50ZGQoIiUwOFg6IEhJTVRfUExBWV9ET05FOiAlaVxuIiwKKwkJCQkodW5zaWduZWQpamlmZmllcywgTE9CWVRFKHdNZXNzYWdlKSk7CisKKwkJaWYgKGNoaXAtPmxhc3RfcGxheWJhbmsgPT0gTE9CWVRFKHdNZXNzYWdlKSkgeworCQkJc25kX3ByaW50ZGQoImNoaXAubGFzdF9wbGF5YmFuayA9PSBMT0JZVEUod01lc3NhZ2UpXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNoaXAtPmJhbmtzUGxheWVkKys7CisKKwkJaWYgKHRlc3RfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKSkKKwkJCXNuZF9tc25kX0RBUFEoY2hpcCwgMCk7CisKKwkJY2hpcC0+bGFzdF9wbGF5YmFuayA9IExPQllURSh3TWVzc2FnZSk7CisJCWNoaXAtPnBsYXlETUFQb3MgKz0gY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXM7CisJCWlmIChjaGlwLT5wbGF5RE1BUG9zID4gY2hpcC0+cGxheUxpbWl0KQorCQkJY2hpcC0+cGxheURNQVBvcyA9IDA7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBISU1UX1JFQ09SRF9ET05FOgorCQlpZiAoY2hpcC0+bGFzdF9yZWNiYW5rID09IExPQllURSh3TWVzc2FnZSkpCisJCQlicmVhazsKKwkJY2hpcC0+bGFzdF9yZWNiYW5rID0gTE9CWVRFKHdNZXNzYWdlKTsKKwkJY2hpcC0+Y2FwdHVyZURNQVBvcyArPSBjaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXM7CisJCWlmIChjaGlwLT5jYXB0dXJlRE1BUG9zID4gKGNoaXAtPmNhcHR1cmVMaW1pdCkpCisJCQljaGlwLT5jYXB0dXJlRE1BUG9zID0gMDsKKworCQlpZiAodGVzdF9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpKQorCQkJc25kX21zbmRfREFSUShjaGlwLCBjaGlwLT5sYXN0X3JlY2JhbmspOworCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pOworCQlicmVhazsKKworCWNhc2UgSElNVF9EU1A6CisJCXN3aXRjaCAoTE9CWVRFKHdNZXNzYWdlKSkgeworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwkJY2FzZSBISURTUF9QTEFZX1VOREVSOgorI2VuZGlmCisJCWNhc2UgSElEU1BfSU5UX1BMQVlfVU5ERVI6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IFBsYXkgdW5kZXJmbG93ICVpXG4iLAorCQkJCWNoaXAtPmJhbmtzUGxheWVkKTsKKwkJCWlmIChjaGlwLT5iYW5rc1BsYXllZCA+IDIpCisJCQkJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSElEU1BfSU5UX1JFQ09SRF9PVkVSOgorCQkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBSZWNvcmQgb3ZlcmZsb3dcbiIpOworCQkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FCisJCQkJICAgIjogRFNQIG1lc3NhZ2UgJWQgMHglMDJ4XG4iLAorCQkJCSAgIExPQllURSh3TWVzc2FnZSksIExPQllURSh3TWVzc2FnZSkpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhJTVRfTUlESV9JTl9VQ0hBUjoKKwkJaWYgKGNoaXAtPm1zbmRtaWRpX21wdSkKKwkJCXNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKGNoaXAtPm1zbmRtaWRpX21wdSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBISU1UIG1lc3NhZ2UgJWQgMHglMDJ4XG4iLAorCQkJICAgSElCWVRFKHdNZXNzYWdlKSwgSElCWVRFKHdNZXNzYWdlKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHNuZF9tc25kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gZGV2X2lkOworCXZvaWQgKnB3RFNQUURhdGEgPSBjaGlwLT5tYXBwZWRiYXNlICsgRFNQUV9EQVRBX0JVRkY7CisKKwkvKiBTZW5kIGFjayB0byBEU1AgKi8KKwkvKiBpbmIoY2hpcC0+aW8gKyBIUF9SWEwpOyAqLworCisJLyogRXZhbHVhdGUgcXVldWVkIERTUCBtZXNzYWdlcyAqLworCXdoaWxlIChyZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dUYWlsKSAhPSByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dIZWFkKSkgeworCQl1MTYgd1RtcDsKKworCQlzbmRfbXNuZF9ldmFsX2RzcF9tc2coY2hpcCwKKwkJCXJlYWR3KHB3RFNQUURhdGEgKyAyICogcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkpKTsKKworCQl3VG1wID0gcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkgKyAxOworCQlpZiAod1RtcCA+IHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd1NpemUpKQorCQkJd3JpdGV3KDAsIGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpOworCQllbHNlCisJCQl3cml0ZXcod1RtcCwgY2hpcC0+RFNQUSArIEpRU193SGVhZCk7CisJfQorCS8qIFNlbmQgYWNrIHRvIERTUCAqLworCWluYihjaGlwLT5pbyArIEhQX1JYTCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcmVzZXRfZHNwKGxvbmcgaW8sIHVuc2lnbmVkIGNoYXIgKmluZm8pCit7CisJaW50IHRpbWVvdXQgPSAxMDA7CisKKwlvdXRiKEhQRFNQUkVTRVRfT04sIGlvICsgSFBfRFNQUik7CisJbXNsZWVwKDEpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoaW5mbykKKwkJKmluZm8gPSBpbmIoaW8gKyBIUF9JTkZPKTsKKyNlbmRpZgorCW91dGIoSFBEU1BSRVNFVF9PRkYsIGlvICsgSFBfRFNQUik7CisJbXNsZWVwKDEpOworCXdoaWxlICh0aW1lb3V0LS0gPiAwKSB7CisJCWlmIChpbmIoaW8gKyBIUF9DVlIpID09IEhQX0NWUl9ERUYpCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKDEpOworCX0KKwlzbmRfcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ2Fubm90IHJlc2V0IERTUFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGluZm87CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWNoYXIgKnh2LCAqcmV2ID0gTlVMTDsKKwljaGFyICpwaW4gPSAiVEIgUGlubmFjbGUiLCAqZmlqaSA9ICJUQiBGaWppIjsKKwljaGFyICpwaW5maWppID0gIlRCIFBpbm5hY2xlL0ZpamkiOworI2VuZGlmCisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8sICJwcm9iaW5nIikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNuZF9tc25kX3Jlc2V0X2RzcChjaGlwLT5pbywgJmluZm8pIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkNsYXNzaWMvVGFoaXRpL01vbnRlcmV5Iik7CisJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAiVHVydGxlIEJlYWNoIE11bHRpc291bmQiKTsKKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogJXMsICIKKwkgICAgICAgIkkvTyAweCVseC0weCVseCwgSVJRICVkLCBtZW1vcnkgbWFwcGVkIHRvIDB4JWxYLTB4JWxYXG4iLAorCSAgICAgICBjYXJkLT5zaG9ydG5hbWUsCisJICAgICAgIGNoaXAtPmlvLCBjaGlwLT5pbyArIERTUF9OVU1JTyAtIDEsCisJICAgICAgIGNoaXAtPmlycSwKKwkgICAgICAgY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIDB4N2ZmZik7CisjZWxzZQorCXN3aXRjaCAoaW5mbyA+PiA0KSB7CisJY2FzZSAweGY6CisJCXh2ID0gIjw9IDEuMTUiOworCQlicmVhazsKKwljYXNlIDB4MToKKwkJeHYgPSAiMS4xOC8xLjIiOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJeHYgPSAiMS4zIjsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCXh2ID0gIjEuNCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXh2ID0gInVua25vd24iOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8gJiAweDcpIHsKKwljYXNlIDB4MDoKKwkJcmV2ID0gIkkiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MToKKwkJcmV2ID0gIkYiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJcmV2ID0gIkciOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJcmV2ID0gIkgiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4NDoKKwkJcmV2ID0gIkUiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBmaWppKTsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCXJldiA9ICJDIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZmlqaSk7CisJCWJyZWFrOworCWNhc2UgMHg2OgorCQlyZXYgPSAiRCI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZpamkpOworCQlicmVhazsKKwljYXNlIDB4NzoKKwkJcmV2ID0gIkEtQiAoRmlqaSkgb3IgQS1FIChQaW5uYWNsZSkiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW5maWppKTsKKwkJYnJlYWs7CisJfQorCXN0cmNweShjYXJkLT5sb25nbmFtZSwgIlR1cnRsZSBCZWFjaCBNdWx0aXNvdW5kIFBpbm5hY2xlIik7CisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6ICVzIHJldmlzaW9uICVzLCBYaWxpbnggdmVyc2lvbiAlcywgIgorCSAgICAgICAiSS9PIDB4JWx4LTB4JWx4LCBJUlEgJWQsIG1lbW9yeSBtYXBwZWQgdG8gMHglbFgtMHglbFhcbiIsCisJICAgICAgIGNhcmQtPnNob3J0bmFtZSwKKwkgICAgICAgcmV2LCB4diwKKwkgICAgICAgY2hpcC0+aW8sIGNoaXAtPmlvICsgRFNQX05VTUlPIC0gMSwKKwkgICAgICAgY2hpcC0+aXJxLAorCSAgICAgICBjaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgMHg3ZmZmKTsKKyNlbmRpZgorCisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfaW5pdF9zbWEoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCXN0YXRpYyBpbnQgaW5pdHRlZDsKKwl1MTYgbWFzdFZvbExlZnQsIG1hc3RWb2xSaWdodDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWZkZWYgTVNORF9DTEFTU0lDCisJb3V0YihjaGlwLT5tZW1pZCwgY2hpcC0+aW8gKyBIUF9NRU1NKTsKKyNlbmRpZgorCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwkvKiBNb3Rvcm9sYSA1Nmsgc2hhcmVkIG1lbW9yeSBiYXNlICovCisJY2hpcC0+U01BID0gY2hpcC0+bWFwcGVkYmFzZSArIFNNQV9TVFJVQ1RfU1RBUlQ7CisKKwlpZiAoaW5pdHRlZCkgeworCQltYXN0Vm9sTGVmdCA9IHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwkJbWFzdFZvbFJpZ2h0ID0gcmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKwl9IGVsc2UKKwkJbWFzdFZvbExlZnQgPSBtYXN0Vm9sUmlnaHQgPSAwOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCAweDgwMDApOworCisJLyogQ3JpdGljYWwgc2VjdGlvbjogYmFuayAxIGFjY2VzcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCAweDgwMDApOworCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBEaWdpdGFsIGF1ZGlvIHBsYXkgcXVldWUgKi8KKwljaGlwLT5EQVBRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+REFQUSwgREFQUV9EQVRBX0JVRkYsIERBUFFfQlVGRl9TSVpFKTsKKworCS8qIERpZ2l0YWwgYXVkaW8gcmVjb3JkIHF1ZXVlICovCisJY2hpcC0+REFSUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUlEsIERBUlFfREFUQV9CVUZGLCBEQVJRX0JVRkZfU0laRSk7CisKKwkvKiBNSURJIG91dCBxdWV1ZSAqLworCWNoaXAtPk1PRFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgTU9EUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5NT0RRLCBNT0RRX0RBVEFfQlVGRiwgTU9EUV9CVUZGX1NJWkUpOworCisJLyogTUlESSBpbiBxdWV1ZSAqLworCWNoaXAtPk1JRFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgTUlEUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5NSURRLCBNSURRX0RBVEFfQlVGRiwgTUlEUV9CVUZGX1NJWkUpOworCisJLyogRFNQIC0+IGhvc3QgbWVzc2FnZSBxdWV1ZSAqLworCWNoaXAtPkRTUFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgRFNQUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EU1BRLCBEU1BRX0RBVEFfQlVGRiwgRFNQUV9CVUZGX1NJWkUpOworCisJLyogU2V0dXAgc29tZSBEU1AgdmFsdWVzICovCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCXdyaXRldygxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5Rm9ybWF0KTsKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheVNhbXBsZVNpemUpOworCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5Q2hhbm5lbHMpOworCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5U2FtcGxlUmF0ZSk7CisjZW5kaWYKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgY2hpcC0+U01BICsgU01BX3dDYWxGcmVxQXRvRCk7CisJd3JpdGV3KG1hc3RWb2xMZWZ0LCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCk7CisJd3JpdGV3KG1hc3RWb2xSaWdodCwgY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJd3JpdGVsKDB4MDAwMTAwMDAsIGNoaXAtPlNNQSArIFNNQV9kd0N1cnJQbGF5UGl0Y2gpOworCXdyaXRlbCgweDAwMDAwMDAxLCBjaGlwLT5TTUEgKyBTTUFfZHdDdXJyUGxheVJhdGUpOworI2VuZGlmCisJd3JpdGV3KDB4MzAzLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMpOworCisJaW5pdHRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHVwbG9hZF9kc3BfY29kZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdF9mdyA9IE5VTEwsICpwZXJtX2Z3ID0gTlVMTDsKKwlpbnQgZXJyOworCisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmaW5pdF9mdywgSU5JVENPREVGSUxFLCBjYXJkLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEVycm9yIGxvYWRpbmcgIiBJTklUQ09ERUZJTEUpOworCQlnb3RvIGNsZWFudXAxOworCX0KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwZXJtX2Z3LCBQRVJNQ09ERUZJTEUsIGNhcmQtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogRXJyb3IgbG9hZGluZyAiIFBFUk1DT0RFRklMRSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwltZW1jcHlfdG9pbyhjaGlwLT5tYXBwZWRiYXNlLCBwZXJtX2Z3LT5kYXRhLCBwZXJtX2Z3LT5zaXplKTsKKwlpZiAoc25kX21zbmRfdXBsb2FkX2hvc3QoY2hpcCwgaW5pdF9mdy0+ZGF0YSwgaW5pdF9mdy0+c2l6ZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBFcnJvciB1cGxvYWRpbmcgdG8gRFNQXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBjbGVhbnVwOworCX0KKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogRFNQIGZpcm13YXJlIHVwbG9hZGVkXG4iKTsKKwllcnIgPSAwOworCitjbGVhbnVwOgorCXJlbGVhc2VfZmlybXdhcmUocGVybV9mdyk7CitjbGVhbnVwMToKKwlyZWxlYXNlX2Zpcm13YXJlKGluaXRfZncpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKK3N0YXRpYyB2b2lkIHJlc2V0X3Byb3RldXMoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCW91dGIoSFBQUk9SRVNFVF9PTiwgY2hpcC0+aW8gKyBIUF9QUk9SKTsKKwltc2xlZXAoVElNRV9QUk9fUkVTRVQpOworCW91dGIoSFBQUk9SRVNFVF9PRkYsIGNoaXAtPmlvICsgSFBfUFJPUik7CisJbXNsZWVwKFRJTUVfUFJPX1JFU0VUX0RPTkUpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc25kX21zbmRfaW5pdGlhbGl6ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnIsIHRpbWVvdXQ7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlvdXRiKEhQV0FJVFNUQVRFXzAsIGNoaXAtPmlvICsgSFBfV0FJVCk7CisJb3V0YihIUEJJVE1PREVfMTYsIGNoaXAtPmlvICsgSFBfQklUTSk7CisKKwlyZXNldF9wcm90ZXVzKGNoaXApOworI2VuZGlmCisJZXJyID0gc25kX21zbmRfaW5pdF9zbWEoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IENhbm5vdCBpbml0aWFsaXplIFNNQVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX21zbmRfcmVzZXRfZHNwKGNoaXAtPmlvLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHVwbG9hZF9kc3BfY29kZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQ2Fubm90IHVwbG9hZCBEU1AgY29kZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJdGltZW91dCA9IDIwMDsKKworCXdoaWxlIChyZWFkdyhjaGlwLT5tYXBwZWRiYXNlKSkgeworCQltc2xlZXAoMSk7CisJCWlmICghdGltZW91dC0tKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRFNQIHJlc2V0IHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlzbmRfbXNuZG1peF9zZXR1cChjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBydjsKKworCWlmICh0ZXN0X2JpdChGX1JFU0VUVElORywgJmNoaXAtPmZsYWdzKSB8fCArK2NoaXAtPm5yZXNldHMgPiAxMCkKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KEZfUkVTRVRUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2RzcF9oYWx0KGNoaXAsIE5VTEwpOwkvKiBVbmNvbmRpdGlvbmFsbHkgaGFsdCAqLworCisJcnYgPSBzbmRfbXNuZF9pbml0aWFsaXplKGNhcmQpOworCWlmIChydikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IERTUCByZXNldCBmYWlsZWRcbiIpOworCXNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhjaGlwLCAwKTsKKwljbGVhcl9iaXQoRl9SRVNFVFRJTkcsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NoaXBfZnJlZSgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9zZW5kX2RzcF9jbWRfY2hrKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTggY21kKQoreworCWlmIChzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgY21kKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChjaGlwLT5jYXJkKTsKKwlyZXR1cm4gc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2NhbGlicmF0ZV9hZGMoc3RydWN0IHNuZF9tc25kICpjaGlwLCB1MTYgc3JhdGUpCit7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NhbGlicmF0ZV9hZGMoJWkpXG4iLCBzcmF0ZSk7CisJd3JpdGV3KHNyYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0NhbEZyZXFBdG9EKTsKKwlpZiAoY2hpcC0+Y2FsaWJyYXRlX3NpZ25hbCA9PSAwKQorCQl3cml0ZXcocmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKQorCQkgICAgICAgfCAweDAwMDEsIGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncyk7CisJZWxzZQorCQl3cml0ZXcocmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKQorCQkgICAgICAgJiB+MHgwMDAxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpOworCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoY2hpcCwgMCwgMCwgSERFWEFSX0NBTF9BX1RPX0QpID09IDAgJiYKKwkgICAgc25kX21zbmRfc2VuZF9kc3BfY21kX2NoayhjaGlwLCBIREVYX0FVWF9SRVEpID09IDApIHsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMzMzKSk7CisJCXJldHVybiAwOworCX0KKwlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQURDIGNhbGlicmF0aW9uIGZhaWxlZFxuIik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiBBTFNBIGNhbGxiYWNrIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIE1JREkgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHNuZF9tc25kX21wdTQwMV9vcGVuKHN0cnVjdCBzbmRfbXB1NDAxICptcHUpCit7CisJc25kX21zbmRfZW5hYmxlX2lycShtcHUtPnByaXZhdGVfZGF0YSk7CisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+cHJpdmF0ZV9kYXRhLCBIREVYX01JRElfSU5fU1RBUlQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9tcHU0MDFfY2xvc2Uoc3RydWN0IHNuZF9tcHU0MDEgKm1wdSkKK3sKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5wcml2YXRlX2RhdGEsIEhERVhfTUlESV9JTl9TVE9QKTsKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShtcHUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBsb25nIG1wdV9pb1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2F0dGFjaChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9ICAgICAgc25kX21zbmRfZGV2X2ZyZWUsCisJCX07CisKKwllcnIgPSByZXF1ZXN0X2lycShjaGlwLT5pcnEsIHNuZF9tc25kX2ludGVycnVwdCwgMCwgY2FyZC0+c2hvcnRuYW1lLAorCQkJICBjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBDb3VsZG4ndCBncmFiIElSUSAlZFxuIiwgY2hpcC0+aXJxKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcmVxdWVzdF9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTywgY2FyZC0+c2hvcnRuYW1lKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFLCBjYXJkLT5zaG9ydG5hbWUpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiB1bmFibGUgdG8gZ3JhYiBtZW1vcnkgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIEJVRkZTSVpFIC0gMSk7CisJCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljaGlwLT5tYXBwZWRiYXNlID0gaW9yZW1hcF9ub2NhY2hlKGNoaXAtPmJhc2UsIDB4ODAwMCk7CisJaWYgKCFjaGlwLT5tYXBwZWRiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiB1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb24gMHglbHgtMHglbHhcbiIsCisJCQljaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgQlVGRlNJWkUgLSAxKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisJZXJyID0gc25kX21zbmRfZHNwX2Z1bGxfcmVzZXQoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCisJLyogUmVnaXN0ZXIgZGV2aWNlICovCisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwllcnIgPSBzbmRfbXNuZF9wY20oY2FyZCwgMCwgTlVMTCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogZXJyb3IgY3JlYXRpbmcgbmV3IFBDTSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZG1peF9uZXcoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogZXJyb3IgY3JlYXRpbmcgbmV3IE1peGVyIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCisJaWYgKG1wdV9pb1swXSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc3RydWN0IHNuZF9tcHU0MDEgKm1wdTsKKworCQllcnIgPSBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCisJCQkJCSAgbXB1X2lvWzBdLAorCQkJCQkgIE1QVTQwMV9NT0RFX0lOUFVUIHwKKwkJCQkJICBNUFU0MDFfTU9ERV9PVVRQVVQsCisJCQkJCSAgbXB1X2lycVswXSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJICAmY2hpcC0+cm1pZGkpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCQkiOiBlcnJvciBjcmVhdGluZyBuZXcgTWlkaSBkZXZpY2VcbiIpOworCQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJCX0KKwkJbXB1ID0gY2hpcC0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCQltcHUtPm9wZW5faW5wdXQgPSBzbmRfbXNuZF9tcHU0MDFfb3BlbjsKKwkJbXB1LT5jbG9zZV9pbnB1dCA9IHNuZF9tc25kX21wdTQwMV9jbG9zZTsKKwkJbXB1LT5wcml2YXRlX2RhdGEgPSBjaGlwOworCX0KKworCWRpc2FibGVfaXJxKGNoaXAtPmlycSk7CisJc25kX21zbmRfY2FsaWJyYXRlX2FkYyhjaGlwLCBjaGlwLT5wbGF5X3NhbXBsZV9yYXRlKTsKKwlzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoY2hpcCwgMCk7CisKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwlyZXR1cm4gMDsKKworZXJyX3JlbGVhc2VfcmVnaW9uOgorCWlmIChjaGlwLT5tYXBwZWRiYXNlKQorCQlpb3VubWFwKGNoaXAtPm1hcHBlZGJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSk7CisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfbXNuZF91bmxvYWQoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWlvdW5tYXAoY2hpcC0+bWFwcGVkYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Cit9CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisKKy8qIFBpbm5hY2xlL0ZpamkgTG9naWNhbCBEZXZpY2UgQ29uZmlndXJhdGlvbiAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmcoaW50IGNmZywgaW50IHJlZywgaW50IHZhbHVlKQoreworCW91dGIocmVnLCBjZmcpOworCW91dGIodmFsdWUsIGNmZyArIDEpOworCWlmICh2YWx1ZSAhPSBpbmIoY2ZnICsgMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogc25kX21zbmRfd3JpdGVfY2ZnOiBJL08gZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19pbzAoaW50IGNmZywgaW50IG51bSwgdTE2IGlvKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VISSwgSElCWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFTE8sIExPQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2lvMShpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaW8pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUhJLCBISUJZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VMTywgTE9CWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfaXJxKGludCBjZmcsIGludCBudW0sIHUxNiBpcnEpCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JUlFfTlVNQkVSLCBMT0JZVEUoaXJxKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9UWVBFLCBJUlFUWVBFX0VER0UpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX21lbShpbnQgY2ZnLCBpbnQgbnVtLCBpbnQgbWVtKQoreworCXUxNiB3bWVtOworCisJbWVtID4+PSA4OworCXdtZW0gPSAodTE2KShtZW0gJiAweGZmZik7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFSEksIEhJQllURSh3bWVtKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUJBU0VMTywgTE9CWVRFKHdtZW0pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHdtZW0gJiYgc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1DT05UUk9MLAorCQkJCSAgICAgICBNRU1UWVBFX0hJQUREUiB8IE1FTVRZUEVfMTZCSVQpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfYWN0aXZhdGVfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfQUNUSVZBVEUsIExEX0FDVElWQVRFKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGludCBjZmcsIGludCBudW0sIHUxNiBpbzAsCisJCQkJCQl1MTYgaW8xLCB1MTYgaXJxLCBpbnQgbWVtKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19pbzAoY2ZnLCBudW0sIGlvMCkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfaW8xKGNmZywgbnVtLCBpbzEpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2lycShjZmcsIG51bSwgaXJxKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19tZW0oY2ZnLCBudW0sIG1lbSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGNmZywgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3Bpbm5hY2xlX2NmZ19yZXNldChpbnQgY2ZnKQoreworCWludCBpOworCisJLyogUmVzZXQgZGV2aWNlcyBpZiB0b2xkIHRvICovCisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IFJlc2V0dGluZyBhbGwgZGV2aWNlc1xuIik7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZywgaSwgMCwgMCwgMCwgMCkpCisJCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBtc25kX3Bpbm5hY2xlIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgbXNuZF9waW5uYWNsZSBzb3VuZGNhcmQuIik7CisKK3N0YXRpYyBsb25nIGlvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworc3RhdGljIGxvbmcgbWVtW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKworc3RhdGljIGxvbmcgY2ZnW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKworI2lmbmRlZiBNU05EX0NMQVNTSUMKKy8qIEV4dHJhIFBlcmlwaGVyYWwgQ29uZmlndXJhdGlvbiAoRGVmYXVsdDogRGlzYWJsZSkgKi8KK3N0YXRpYyBsb25nIGlkZV9pbzBbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGxvbmcgaWRlX2lvMVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IGlkZV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CisKK3N0YXRpYyBsb25nIGpveXN0aWNrX2lvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKy8qIElmIHdlIGhhdmUgdGhlIGRpZ2l0YWwgZGF1Z2hlcmJvYXJkLi4uICovCitzdGF0aWMgaW50IGRpZ2l0YWxbU05EUlZfQ0FSRFNdOworCisvKiBFeHRyYSBQZXJpcGhlcmFsIENvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBpbnQgcmVzZXRbU05EUlZfQ0FSRFNdOworI2VuZGlmCisKK3N0YXRpYyBpbnQgd3JpdGVfbmRlbGF5W1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSAxIH07CisKK3N0YXRpYyBpbnQgY2FsaWJyYXRlX3NpZ25hbDsKKworI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBpbnQgaXNhcG5wW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKK21vZHVsZV9wYXJhbV9hcnJheShpc2FwbnAsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc2FwbnAsICJJU0EgUG5QIGRldGVjdGlvbiBmb3Igc3BlY2lmaWVkIHNvdW5kY2FyZC4iKTsKKyNkZWZpbmUgaGFzX2lzYXBucCh4KSBpc2FwbnBbeF0KKyNlbHNlCisjZGVmaW5lIGhhc19pc2FwbnAoeCkgMAorI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gV2llc2UgPGFubmFiZWxsZXNnYXJkZW5AeWFob28uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlR1cnRsZSBCZWFjaCAiIExPTkdOQU1FICIgTGludXggRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoSU5JVENPREVGSUxFKTsKK01PRFVMRV9GSVJNV0FSRShQRVJNQ09ERUZJTEUpOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbywgIklPIHBvcnQgIyIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtZW0sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KHdyaXRlX25kZWxheSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjYWxpYnJhdGVfc2lnbmFsLCBpbnQsIFNfSVJVR08pOworI2lmbmRlZiBNU05EX0NMQVNTSUMKK21vZHVsZV9wYXJhbV9hcnJheShkaWdpdGFsLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGNmZywgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkocmVzZXQsIGludCwgMCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lvLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVfaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pbzAsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pbzEsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pcnEsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoam95c3RpY2tfaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworI2VuZGlmCisKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpKQoreworCWlmIChpb1tpXSA9PSBTTkRSVl9BVVRPX1BPUlQpCisJCXJldHVybiAwOworCisJaWYgKGlycVtpXSA9PSBTTkRSVl9BVVRPX1BPUlQgfHwgbWVtW2ldID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogaW8sIGlycSBhbmQgbWVtIG11c3QgYmUgc2V0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCisJaWYgKCEoaW9baV0gPT0gMHgyOTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDI2MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjUwIHx8CisJICAgICAgaW9baV0gPT0gMHgyNDAgfHwKKwkgICAgICBpb1tpXSA9PSAweDIzMCB8fAorCSAgICAgIGlvW2ldID09IDB4MjIwIHx8CisJICAgICAgaW9baV0gPT0gMHgyMTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDNlMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogXCJpb1wiIC0gRFNQIEkvTyBiYXNlIG11c3QgYmUgc2V0ICIKKwkJCSIgdG8gMHgyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAsIDB4MjUwLCAweDI2MCwgMHgyOTAsICIKKwkJCSJvciAweDNFMFxuIik7CisJCXJldHVybiAwOworCX0KKyNlbHNlCisJaWYgKGlvW2ldIDwgMHgxMDAgfHwgaW9baV0gPiAweDNlMCB8fCAoaW9baV0gJSAweDEwKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiBcImlvXCIgLSBEU1AgSS9PIGJhc2UgbXVzdCB3aXRoaW4gdGhlIHJhbmdlIDB4MTAwICIKKwkJCSJ0byAweDNFMCBhbmQgbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDB4MTBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogTVNORF9DTEFTU0lDICovCisKKwlpZiAoIShpcnFbaV0gPT0gNSB8fAorCSAgICAgIGlycVtpXSA9PSA3IHx8CisJICAgICAgaXJxW2ldID09IDkgfHwKKwkgICAgICBpcnFbaV0gPT0gMTAgfHwKKwkgICAgICBpcnFbaV0gPT0gMTEgfHwKKwkgICAgICBpcnFbaV0gPT0gMTIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiBcImlycVwiIC0gbXVzdCBiZSBzZXQgdG8gNSwgNywgOSwgMTAsIDExIG9yIDEyXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCEobWVtW2ldID09IDB4YjAwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhjODAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGQwMDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZDgwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhlMDAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGU4MDAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBcIm1lbVwiIC0gbXVzdCBiZSBzZXQgdG8gIgorCQkgICAgICAgIjB4YjAwMDAsIDB4YzgwMDAsIDB4ZDAwMDAsIDB4ZDgwMDAsIDB4ZTAwMDAgb3IgIgorCQkgICAgICAgIjB4ZTgwMDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGNmZ1tpXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IEFzc3VtaW5nIFBuUCBtb2RlXG4iKTsKKwl9IGVsc2UgaWYgKGNmZ1tpXSAhPSAweDI1MCAmJiBjZmdbaV0gIT0gMHgyNjAgJiYgY2ZnW2ldICE9IDB4MjcwKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkJIjogQ29uZmlnIHBvcnQgbXVzdCBiZSAweDI1MCwgMHgyNjAgb3IgMHgyNzAgIgorCQkJIihvciB1bnNwZWNpZmllZCBmb3IgUG5QIG1vZGUpXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIE1TTkRfQ0xBU1NJQyAqLworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCWludCBlcnI7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcDsKKworCWlmIChoYXNfaXNhcG5wKGlkeCkgfHwgY2ZnW2lkeF0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBBc3N1bWluZyBQblAgbW9kZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX21zbmQpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOworCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlzd2l0Y2ggKGlycVtpZHhdKSB7CisJY2FzZSA1OgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzU7IGJyZWFrOworCWNhc2UgNzoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV83OyBicmVhazsKKwljYXNlIDk6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfOTsgYnJlYWs7CisJY2FzZSAxMDoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMDsgYnJlYWs7CisJY2FzZSAxMToKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMTsgYnJlYWs7CisJY2FzZSAxMjoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMjsgYnJlYWs7CisJfQorCisJc3dpdGNoIChtZW1baWR4XSkgeworCWNhc2UgMHhiMDAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9CMDAwOyBicmVhazsKKwljYXNlIDB4YzgwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fQzgwMDsgYnJlYWs7CisJY2FzZSAweGQwMDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0QwMDA7IGJyZWFrOworCWNhc2UgMHhkODAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9EODAwOyBicmVhazsKKwljYXNlIDB4ZTAwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRTAwMDsgYnJlYWs7CisJY2FzZSAweGU4MDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0U4MDA7IGJyZWFrOworCX0KKyNlbHNlCisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IE5vbi1QblAgbW9kZTogY29uZmlndXJpbmcgYXQgcG9ydCAweCVseFxuIiwKKwkJCWNmZ1tpZHhdKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oY2ZnW2lkeF0sIDIsICJQaW5uYWNsZS9GaWppIENvbmZpZyIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENvbmZpZyBwb3J0IDB4JWx4IGNvbmZsaWN0XG4iLAorCQkJICAgY2ZnW2lkeF0pOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHJlc2V0W2lkeF0pCisJCWlmIChzbmRfbXNuZF9waW5uYWNsZV9jZmdfcmVzZXQoY2ZnW2lkeF0pKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBjZmdfZXJyb3I7CisJCX0KKworCS8qIERTUCAqLworCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAwLAorCQkJCQkgaW9baWR4XSwgMCwKKwkJCQkJIGlycVtpZHhdLCBtZW1baWR4XSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGNmZ19lcnJvcjsKKworCS8qIFRoZSBmb2xsb3dpbmcgYXJlIFBpbm5hY2xlIHNwZWNpZmljICovCisKKwkvKiBNUFUgKi8KKwlpZiAobXB1X2lvW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIG1wdV9pcnFbaWR4XSAhPSBTTkRSVl9BVVRPX0lSUSkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJICAgICAgICI6IENvbmZpZ3VyaW5nIE1QVSB0byBJL08gMHglbHggSVJRICVkXG4iLAorCQkgICAgICAgbXB1X2lvW2lkeF0sIG1wdV9pcnFbaWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAxLAorCQkJCQkJIG1wdV9pb1tpZHhdLCAwLAorCQkJCQkJIG1wdV9pcnFbaWR4XSwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKworCS8qIElERSAqLworCWlmIChpZGVfaW8wW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIGlkZV9pbzFbaWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQKKwkgICAgJiYgaWRlX2lycVtpZHhdICE9IFNORFJWX0FVVE9fSVJRKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgSURFIHRvIEkvTyAweCVseCwgMHglbHggSVJRICVkXG4iLAorCQkgICAgICAgaWRlX2lvMFtpZHhdLCBpZGVfaW8xW2lkeF0sIGlkZV9pcnFbaWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAyLAorCQkJCQkJIGlkZV9pbzBbaWR4XSwgaWRlX2lvMVtpZHhdLAorCQkJCQkJIGlkZV9pcnFbaWR4XSwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKworCS8qIEpveXN0aWNrICovCisJaWYgKGpveXN0aWNrX2lvW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgam95c3RpY2sgdG8gSS9PIDB4JWx4XG4iLAorCQkgICAgICAgam95c3RpY2tfaW9baWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAzLAorCQkJCQkJIGpveXN0aWNrX2lvW2lkeF0sIDAsCisJCQkJCQkgMCwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKwlyZWxlYXNlX3JlZ2lvbihjZmdbaWR4XSwgMik7CisKKyNlbmRpZiAvKiBNU05EX0NMQVNTSUMgKi8KKworCXNldF9kZWZhdWx0X2F1ZGlvX3BhcmFtZXRlcnMoY2hpcCk7CisjaWZkZWYgTVNORF9DTEFTU0lDCisJY2hpcC0+dHlwZSA9IG1zbmRDbGFzc2ljOworI2Vsc2UKKwljaGlwLT50eXBlID0gbXNuZFBpbm5hY2xlOworI2VuZGlmCisJY2hpcC0+aW8gPSBpb1tpZHhdOworCWNoaXAtPmlycSA9IGlycVtpZHhdOworCWNoaXAtPmJhc2UgPSBtZW1baWR4XTsKKworCWNoaXAtPmNhbGlicmF0ZV9zaWduYWwgPSBjYWxpYnJhdGVfc2lnbmFsID8gMSA6IDA7CisJY2hpcC0+cmVjc3JjID0gMDsKKwljaGlwLT5kc3BxX2RhdGFfYnVmZiA9IERTUFFfREFUQV9CVUZGOworCWNoaXAtPmRzcHFfYnVmZl9zaXplID0gRFNQUV9CVUZGX1NJWkU7CisJaWYgKHdyaXRlX25kZWxheVtpZHhdKQorCQljbGVhcl9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKwllbHNlCisJCXNldF9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGRpZ2l0YWxbaWR4XSkKKwkJc2V0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCWVyciA9IHNuZF9tc25kX3Byb2JlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFByb2JlIGZhaWxlZFxuIik7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX21zbmRfYXR0YWNoKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEF0dGFjaCBmYWlsZWRcbiIpOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlyZXR1cm4gMDsKKworI2lmbmRlZiBNU05EX0NMQVNTSUMKK2NmZ19lcnJvcjoKKwlyZWxlYXNlX3JlZ2lvbihjZmdbaWR4XSwgMik7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9tc25kX2lzYV9yZW1vdmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldikKK3sKKwlzbmRfbXNuZF91bmxvYWQoZGV2X2dldF9kcnZkYXRhKHBkZXYpKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgREVWX05BTUUgIm1zbmQtcGlubmFjbGUiCisKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfbXNuZF9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9tc25kX2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX21zbmRfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX21zbmRfaXNhX3JlbW92ZSksCisJLyogRklYTUU6IHN1c3BlbmQsIHJlc3VtZSAqLworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERFVl9OQU1FCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKKwkJCQkJIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKK3sKKwlzdGF0aWMgaW50IGlkeDsKKwlzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldjsKKwlzdHJ1Y3QgcG5wX2RldiAqbXB1X2RldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9tc25kICpjaGlwOworCWludCByZXQ7CisKKwlmb3IgKCA7IGlkeCA8IFNORFJWX0NBUkRTOyBpZHgrKykgeworCQlpZiAoaGFzX2lzYXBucChpZHgpKQorCQkJYnJlYWs7CisJfQorCWlmIChpZHggPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgcm9vbSBmb3IgYW5vdGhlciBzb3VuZCBjYXJkIC4uLgorCSAqLworCXBucF9kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShwY2FyZCwgcGlkLT5kZXZzWzBdLmlkLCBOVUxMKTsKKwlpZiAoIXBucF9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXB1X2RldiA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKHBjYXJkLCBwaWQtPmRldnNbMV0uaWQsIE5VTEwpOworCWlmICghbXB1X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXBucF9pc19hY3RpdmUocG5wX2RldikgJiYgcG5wX2FjdGl2YXRlX2RldihwbnBfZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXNuZF9waW5uYWNsZTogZGV2aWNlIGlzIGluYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoIXBucF9pc19hY3RpdmUobXB1X2RldikgJiYgcG5wX2FjdGl2YXRlX2RldihtcHVfZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXNuZF9waW5uYWNsZTogTVBVIGRldmljZSBpcyBpbmFjdGl2ZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBuZXcgQUxTQSBzb3VuZCBjYXJkIGVudHJ5LCBpbiBhbnRpY2lwYXRpb24KKwkgKiBvZiBkZXRlY3Rpbmcgb3VyIGhhcmR3YXJlIC4uLgorCSAqLworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX21zbmQpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNoaXAtPmNhcmQgPSBjYXJkOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOworCisJLyoKKwkgKiBSZWFkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgb2ZmIHRoZSBJU0EgUG5QIGJ1cyAuLi4KKwkgKi8KKwlpb1tpZHhdID0gcG5wX3BvcnRfc3RhcnQocG5wX2RldiwgMCk7CisJaXJxW2lkeF0gPSBwbnBfaXJxKHBucF9kZXYsIDApOworCW1lbVtpZHhdID0gcG5wX21lbV9zdGFydChwbnBfZGV2LCAwKTsKKwltcHVfaW9baWR4XSA9IHBucF9wb3J0X3N0YXJ0KG1wdV9kZXYsIDApOworCW1wdV9pcnFbaWR4XSA9IHBucF9pcnEobXB1X2RldiwgMCk7CisKKwlzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKGNoaXApOworI2lmZGVmIE1TTkRfQ0xBU1NJQworCWNoaXAtPnR5cGUgPSBtc25kQ2xhc3NpYzsKKyNlbHNlCisJY2hpcC0+dHlwZSA9IG1zbmRQaW5uYWNsZTsKKyNlbmRpZgorCWNoaXAtPmlvID0gaW9baWR4XTsKKwljaGlwLT5pcnEgPSBpcnFbaWR4XTsKKwljaGlwLT5iYXNlID0gbWVtW2lkeF07CisKKwljaGlwLT5jYWxpYnJhdGVfc2lnbmFsID0gY2FsaWJyYXRlX3NpZ25hbCA/IDEgOiAwOworCWNoaXAtPnJlY3NyYyA9IDA7CisJY2hpcC0+ZHNwcV9kYXRhX2J1ZmYgPSBEU1BRX0RBVEFfQlVGRjsKKwljaGlwLT5kc3BxX2J1ZmZfc2l6ZSA9IERTUFFfQlVGRl9TSVpFOworCWlmICh3cml0ZV9uZGVsYXlbaWR4XSkKKwkJY2xlYXJfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisJZWxzZQorCQlzZXRfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChkaWdpdGFsW2lkeF0pCisJCXNldF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKwlyZXQgPSBzbmRfbXNuZF9wcm9iZShjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBQcm9iZSBmYWlsZWRcbiIpOworCQlnb3RvIF9yZWxlYXNlX2NhcmQ7CisJfQorCisJcmV0ID0gc25kX21zbmRfYXR0YWNoKGNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEF0dGFjaCBmYWlsZWRcbiIpOworCQlnb3RvIF9yZWxlYXNlX2NhcmQ7CisJfQorCisJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIGNhcmQpOworCSsraWR4OworCXJldHVybiAwOworCitfcmVsZWFzZV9jYXJkOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9tc25kX3BucF9yZW1vdmUoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkKQoreworCXNuZF9tc25kX3VubG9hZChwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCkpOworCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBOVUxMKTsKK30KKworc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKK3N0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIG1zbmRfcG5waWRzW10gPSB7CisJLyogUGlubmFjbGUgUG5QICovCisJeyAuaWQgPSAiQlZKMDQ0MCIsIC5kZXZzID0geyB7ICJUQlMwMDAwIiB9LCB7ICJUQlMwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICIiIH0JLyogZW5kICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucF9jYXJkLCBtc25kX3BucGlkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIG1zbmRfcG5wY19kcml2ZXIgPSB7CisJLmZsYWdzID0gUE5QX0RSSVZFUl9SRVNfRE9fTk9UX0NIQU5HRSwKKwkubmFtZSA9ICJtc25kX3Bpbm5hY2xlIiwKKwkuaWRfdGFibGUgPSBtc25kX3BucGlkcywKKwkucHJvYmUgPSBzbmRfbXNuZF9wbnBfZGV0ZWN0LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXNuZF9wbnBfcmVtb3ZlKSwKK307CisjZW5kaWYgLyogQ09ORklHX1BOUCAqLworCitzdGF0aWMgaW50IF9faW5pdCBzbmRfbXNuZF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9tc25kX2RyaXZlciwgU05EUlZfQ0FSRFMpOworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAoIWVycikKKwkJaXNhX3JlZ2lzdGVyZWQgPSAxOworCisJZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZtc25kX3BucGNfZHJpdmVyKTsKKwlpZiAoIWVycikKKwkJcG5wX3JlZ2lzdGVyZWQgPSAxOworCisJaWYgKGlzYV9yZWdpc3RlcmVkKQorCQllcnIgPSAwOworI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNuZF9tc25kX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKHBucF9yZWdpc3RlcmVkKQorCQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmbXNuZF9wbnBjX2RyaXZlcik7CisJaWYgKGlzYV9yZWdpc3RlcmVkKQorI2VuZGlmCisJCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX21zbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc25kX21zbmRfaW5pdCk7Cittb2R1bGVfZXhpdChzbmRfbXNuZF9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzE4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtc25kX3Bpbm5hY2xlLmgKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBTb21lIHBhcnRzIG9mIHRoaXMgaGVhZGVyIGZpbGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIFR1cnRsZSBCZWFjaAorICogTXVsdGlTb3VuZCBEcml2ZXIgRGV2ZWxvcG1lbnQgS2l0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICogQ29weXJpZ2h0IChDKSAxOTkzIFR1cnRsZSBCZWFjaCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTkRfUElOTkFDTEVfSAorI2RlZmluZSBfX01TTkRfUElOTkFDTEVfSAorCisjZGVmaW5lIERTUF9OVU1JTwkJCQkweDA4CisKKyNkZWZpbmUgSVJFR19MT0dERVZJQ0UJCQkJMHgwNworI2RlZmluZSBJUkVHX0FDVElWQVRFCQkJCTB4MzAKKyNkZWZpbmUgTERfQUNUSVZBVEUJCQkJMHgwMQorI2RlZmluZSBMRF9ESVNBQ1RJVkFURQkJCQkweDAwCisjZGVmaW5lIElSRUdfRUVDT05UUk9MCQkJCTB4M0YKKyNkZWZpbmUgSVJFR19NRU1CQVNFSEkJCQkJMHg0MAorI2RlZmluZSBJUkVHX01FTUJBU0VMTwkJCQkweDQxCisjZGVmaW5lIElSRUdfTUVNQ09OVFJPTAkJCQkweDQyCisjZGVmaW5lIElSRUdfTUVNUkFOR0VISQkJCQkweDQzCisjZGVmaW5lIElSRUdfTUVNUkFOR0VMTwkJCQkweDQ0CisjZGVmaW5lIE1FTVRZUEVfOEJJVAkJCQkweDAwCisjZGVmaW5lIE1FTVRZUEVfMTZCSVQJCQkJMHgwMgorI2RlZmluZSBNRU1UWVBFX1JBTkdFCQkJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV9ISUFERFIJCQkJMHgwMQorI2RlZmluZSBJUkVHX0lPMF9CQVNFSEkJCQkJMHg2MAorI2RlZmluZSBJUkVHX0lPMF9CQVNFTE8JCQkJMHg2MQorI2RlZmluZSBJUkVHX0lPMV9CQVNFSEkJCQkJMHg2MgorI2RlZmluZSBJUkVHX0lPMV9CQVNFTE8JCQkJMHg2MworI2RlZmluZSBJUkVHX0lSUV9OVU1CRVIJCQkJMHg3MAorI2RlZmluZSBJUkVHX0lSUV9UWVBFCQkJCTB4NzEKKyNkZWZpbmUgSVJRVFlQRV9ISUdICQkJCTB4MDIKKyNkZWZpbmUgSVJRVFlQRV9MT1cJCQkJMHgwMAorI2RlZmluZSBJUlFUWVBFX0xFVkVMCQkJCTB4MDEKKyNkZWZpbmUgSVJRVFlQRV9FREdFCQkJCTB4MDAKKworI2RlZmluZQlIUF9EU1BSCQkJCQkweDA0CisjZGVmaW5lCUhQX0JMS1MJCQkJCTB4MDQKKworI2RlZmluZSBIUERTUFJFU0VUX09GRgkJCQkyCisjZGVmaW5lIEhQRFNQUkVTRVRfT04JCQkJMAorCisjZGVmaW5lIEhQQkxLU0VMXzAJCQkJMgorI2RlZmluZSBIUEJMS1NFTF8xCQkJCTMKKworI2RlZmluZQlISU1UX0RBVF9PRkYJCQkJMHgwMworCisjZGVmaW5lCUhJRFNQX1BMQVlfVU5ERVIJCQkweDAwCisjZGVmaW5lCUhJRFNQX0lOVF9QTEFZX1VOREVSCQkJMHgwMQorI2RlZmluZQlISURTUF9TU0lfVFhfVU5ERVIgIAkJCTB4MDIKKyNkZWZpbmUgSElEU1BfUkVDUV9PVkVSRkxPVwkJCTB4MDgKKyNkZWZpbmUgSElEU1BfSU5UX1JFQ09SRF9PVkVSCQkJMHgwOQorI2RlZmluZSBISURTUF9TU0lfUlhfT1ZFUkZMT1cJCQkweDBhCisKKyNkZWZpbmUJSElEU1BfTUlESV9JTl9PVkVSCQkJMHgxMAorCisjZGVmaW5lCUhJRFNQX01JRElfRlJBTUVfRVJSCQkJMHgxMQorI2RlZmluZQlISURTUF9NSURJX1BBUklUWV9FUlIJCQkweDEyCisjZGVmaW5lCUhJRFNQX01JRElfT1ZFUlJVTl9FUlIJCQkweDEzCisKKyNkZWZpbmUgSElEU1BfSU5QVVRfQ0xJUFBJTkcJCQkweDIwCisjZGVmaW5lCUhJRFNQX01JWF9DTElQUElORwkJCTB4MzAKKyNkZWZpbmUgSElEU1BfREFUX0lOX09GRgkJCTB4MjEKKworI2RlZmluZSBUSU1FX1BST19SRVNFVF9ET05FCQkJMHgwMjhBCisjZGVmaW5lIFRJTUVfUFJPX1NZU0VYCQkJCTB4MDAxRQorI2RlZmluZSBUSU1FX1BST19SRVNFVAkJCQkweDAwMzIKKworI2RlZmluZSBEQVJfQlVGRl9TSVpFCQkJCTB4MTAwMAorCisjZGVmaW5lIE1JRFFfQlVGRl9TSVpFCQkJCTB4ODAwCisjZGVmaW5lIERTUFFfQlVGRl9TSVpFCQkJCTB4NUEwCisKKyNkZWZpbmUgRFNQUV9EQVRBX0JVRkYJCQkJMHg3ODYwCisKKyNkZWZpbmUgTU9QX1dBVkVIRFIJCQkJMAorI2RlZmluZSBNT1BfRVhUT1VUCQkJCTEKKyNkZWZpbmUgTU9QX0hXSU5JVAkJCQkweGZlCisjZGVmaW5lIE1PUF9OT05FCQkJCTB4ZmYKKyNkZWZpbmUgTU9QX01BWAkJCQkJMQorCisjZGVmaW5lIE1JUF9FWFRJTgkJCQkwCisjZGVmaW5lIE1JUF9XQVZFSERSCQkJCTEKKyNkZWZpbmUgTUlQX0hXSU5JVAkJCQkweGZlCisjZGVmaW5lIE1JUF9NQVgJCQkJCTEKKworLyogUGlubmFjbGUvRmlqaSBTTUEgQ29tbW9uIERhdGEgKi8KKyNkZWZpbmUgU01BX3dDdXJyUGxheUJ5dGVzCQkJMHgwMDAwCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZEJ5dGVzCQkJMHgwMDAyCisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xMZWZ0CQkJMHgwMDA0CisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xSaWdodAkJCTB4MDAwNgorI2RlZmluZSBTTUFfd0N1cnJJblZvbExlZnQJCQkweDAwMDgKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xSaWdodAkJCTB4MDAwYQorI2RlZmluZSBTTUFfd0N1cnJNSGRyVm9sTGVmdAkJCTB4MDAwYworI2RlZmluZSBTTUFfd0N1cnJNSGRyVm9sUmlnaHQJCQkweDAwMGUKKyNkZWZpbmUgU01BX2R3Q3VyclBsYXlQaXRjaAkJCTB4MDAxMAorI2RlZmluZSBTTUFfZHdDdXJyUGxheVJhdGUJCQkweDAwMTQKKyNkZWZpbmUgU01BX3dDdXJyTUlESUlPUGF0Y2gJCQkweDAwMTgKKyNkZWZpbmUgU01BX3dDdXJyUGxheUZvcm1hdAkJCTB4MDAxYQorI2RlZmluZSBTTUFfd0N1cnJQbGF5U2FtcGxlU2l6ZQkJCTB4MDAxYworI2RlZmluZSBTTUFfd0N1cnJQbGF5Q2hhbm5lbHMJCQkweDAwMWUKKyNkZWZpbmUgU01BX3dDdXJyUGxheVNhbXBsZVJhdGUJCQkweDAwMjAKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkRm9ybWF0CQkJMHgwMDIyCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZFNhbXBsZVNpemUJCTB4MDAyNAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRDaGFubmVscwkJCTB4MDAyNgorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRTYW1wbGVSYXRlCQkweDAwMjgKKyNkZWZpbmUgU01BX3dDdXJyRFNQU3RhdHVzRmxhZ3MJCQkweDAwMmEKKyNkZWZpbmUgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzCQkweDAwMmMKKyNkZWZpbmUgU01BX3dDdXJySW5wdXRUYWdCaXRzCQkJMHgwMDJlCisjZGVmaW5lIFNNQV93Q3VyckxlZnRQZWFrCQkJMHgwMDMwCisjZGVmaW5lIFNNQV93Q3VyclJpZ2h0UGVhawkJCTB4MDAzMgorI2RlZmluZSBTTUFfYk1pY1BvdFBvc0xlZnQJCQkweDAwMzQKKyNkZWZpbmUgU01BX2JNaWNQb3RQb3NSaWdodAkJCTB4MDAzNQorI2RlZmluZSBTTUFfYk1pY1BvdE1heExlZnQJCQkweDAwMzYKKyNkZWZpbmUgU01BX2JNaWNQb3RNYXhSaWdodAkJCTB4MDAzNworI2RlZmluZSBTTUFfYkluUG90UG9zTGVmdAkJCTB4MDAzOAorI2RlZmluZSBTTUFfYkluUG90UG9zUmlnaHQJCQkweDAwMzkKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NMZWZ0CQkJMHgwMDNhCisjZGVmaW5lIFNNQV9iQXV4UG90UG9zUmlnaHQJCQkweDAwM2IKKyNkZWZpbmUgU01BX2JJblBvdE1heExlZnQJCQkweDAwM2MKKyNkZWZpbmUgU01BX2JJblBvdE1heFJpZ2h0CQkJMHgwMDNkCisjZGVmaW5lIFNNQV9iQXV4UG90TWF4TGVmdAkJCTB4MDAzZQorI2RlZmluZSBTTUFfYkF1eFBvdE1heFJpZ2h0CQkJMHgwMDNmCisjZGVmaW5lIFNNQV9iSW5Qb3RNYXhNZXRob2QJCQkweDAwNDAKKyNkZWZpbmUgU01BX2JBdXhQb3RNYXhNZXRob2QJCQkweDAwNDEKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbExlZnQJCQkweDAwNDIKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbFJpZ2h0CQkJMHgwMDQ0CisjZGVmaW5lIFNNQV93Q2FsRnJlcUF0b0QJCQkweDAwNDYKKyNkZWZpbmUgU01BX3dDdXJyQXV4Vm9sTGVmdAkJCTB4MDA0OAorI2RlZmluZSBTTUFfd0N1cnJBdXhWb2xSaWdodAkJCTB4MDA0YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MVZvbExlZnQJCQkweDAwNGMKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFWb2xSaWdodAkJCTB4MDA0ZQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlZvbExlZnQJCQkweDAwNTAKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJWb2xSaWdodAkJCTB4MDA1MgorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1ZvbExlZnQJCQkweDAwNTQKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNWb2xSaWdodAkJCTB4MDA1NgorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFZvbExlZnQJCQkweDAwNTgKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRWb2xSaWdodAkJCTB4MDA1YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MVBlYWtMZWZ0CQkJMHgwMDVjCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxUGVha1JpZ2h0CQkJMHgwMDVlCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyUGVha0xlZnQJCQkweDAwNjAKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJQZWFrUmlnaHQJCQkweDAwNjIKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNQZWFrTGVmdAkJCTB4MDA2NAorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1BlYWtSaWdodAkJCTB4MDA2NgorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFBlYWtMZWZ0CQkJMHgwMDY4CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0UGVha1JpZ2h0CQkJMHgwMDZhCisjZGVmaW5lIFNNQV93Q3VyclBsYXlQZWFrTGVmdAkJCTB4MDA2YworI2RlZmluZSBTTUFfd0N1cnJQbGF5UGVha1JpZ2h0CQkJMHgwMDZlCisjZGVmaW5lIFNNQV93Q3VyckRBVFNSCQkJCTB4MDA3MAorI2RlZmluZSBTTUFfd0N1cnJEQVRSWENITkwJCQkweDAwNzIKKyNkZWZpbmUgU01BX3dDdXJyREFUVFhDSE5MCQkJMHgwMDc0CisjZGVmaW5lIFNNQV93Q3VyckRBVFJYUmF0ZQkJCTB4MDA3NgorI2RlZmluZSBTTUFfZHdEU1BQbGF5Q291bnQJCQkweDAwNzgKKyNkZWZpbmUgU01BX19zaXplCQkJCTB4MDA3YworCisjZGVmaW5lIElOSVRDT0RFRklMRQkJInR1cnRsZWJlYWNoL3BuZHNwaW5pLmJpbiIKKyNkZWZpbmUgUEVSTUNPREVGSUxFCQkidHVydGxlYmVhY2gvcG5kc3Blcm0uYmluIgorI2RlZmluZSBMT05HTkFNRQkJIk11bHRpU291bmQgKFBpbm5hY2xlL0ZpamkpIgorCisjZW5kaWYgLyogX19NU05EX1BJTk5BQ0xFX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQwNThhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZV9taXhlci5jCkBAIC0wLDAgKzEsMzQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkgIG1zbmRfcGlubmFjbGVfbWl4ZXIuYyAgLSAgZGVzY3JpcHRpb24KKwkJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGJlZ2luCQk6IEZyZSBKdW4gNyAyMDAyCisgICAgY29weXJpZ2h0IAkJOiAoQykgMjAwMiBieSBrYXJzdGVuIHdpZXNlCisgICAgZW1haWwJCTogYW5uYWJlbGxlc2dhcmRlbkB5YWhvby5kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCQkJICAgICAgCQkgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCQkJCSAgICoKKyAqCQkJCQkJCQkJICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgIm1zbmQuaCIKKyNpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmgiCisKKworI2RlZmluZSBNU05EX01JWEVSX1ZPTFVNRQkwCisjZGVmaW5lIE1TTkRfTUlYRVJfUENNCQkxCisjZGVmaW5lIE1TTkRfTUlYRVJfQVVYCQkyCS8qIElucHV0IHNvdXJjZSAxICAoYXV4MSkgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9JTUlYCQkzCS8qICBSZWNvcmRpbmcgbW9uaXRvciAgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9TWU5USAk0CisjZGVmaW5lIE1TTkRfTUlYRVJfU1BFQUtFUgk1CisjZGVmaW5lIE1TTkRfTUlYRVJfTElORQkJNgorI2RlZmluZSBNU05EX01JWEVSX01JQwkJNworI2RlZmluZSBNU05EX01JWEVSX1JFQ0xFVgkxMQkvKiBSZWNvcmRpbmcgbGV2ZWwgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9JR0FJTgkxMgkvKiBJbnB1dCBnYWluICovCisjZGVmaW5lIE1TTkRfTUlYRVJfT0dBSU4JMTMJLyogT3V0cHV0IGdhaW4gKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9ESUdJVEFMCTE3CS8qIERpZ2l0YWwgKGlucHV0KSAxICovCisKKy8qCURldmljZSBtYXNrIGJpdHMJKi8KKworI2RlZmluZSBNU05EX01BU0tfVk9MVU1FCSgxIDw8IE1TTkRfTUlYRVJfVk9MVU1FKQorI2RlZmluZSBNU05EX01BU0tfU1lOVEgJCSgxIDw8IE1TTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIE1TTkRfTUFTS19QQ00JCSgxIDw8IE1TTkRfTUlYRVJfUENNKQorI2RlZmluZSBNU05EX01BU0tfU1BFQUtFUgkoMSA8PCBNU05EX01JWEVSX1NQRUFLRVIpCisjZGVmaW5lIE1TTkRfTUFTS19MSU5FCQkoMSA8PCBNU05EX01JWEVSX0xJTkUpCisjZGVmaW5lIE1TTkRfTUFTS19NSUMJCSgxIDw8IE1TTkRfTUlYRVJfTUlDKQorI2RlZmluZSBNU05EX01BU0tfSU1JWAkJKDEgPDwgTVNORF9NSVhFUl9JTUlYKQorI2RlZmluZSBNU05EX01BU0tfUkVDTEVWCSgxIDw8IE1TTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBNU05EX01BU0tfSUdBSU4JCSgxIDw8IE1TTkRfTUlYRVJfSUdBSU4pCisjZGVmaW5lIE1TTkRfTUFTS19PR0FJTgkJKDEgPDwgTVNORF9NSVhFUl9PR0FJTikKKyNkZWZpbmUgTVNORF9NQVNLX0FVWAkJKDEgPDwgTVNORF9NSVhFUl9BVVgpCisjZGVmaW5lIE1TTkRfTUFTS19ESUdJVEFMCSgxIDw8IE1TTkRfTUlYRVJfRElHSVRBTCkKKworc3RhdGljIGludCBzbmRfbXNuZG1peF9pbmZvX211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjaGFyICp0ZXh0c1szXSA9IHsKKwkJIkFuYWxvZyIsICJNQVNTIiwgIlNQRElGIiwKKwl9OworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpdGVtcyA9IHRlc3RfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncykgPyAzIDogMjsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBpdGVtczsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSBpdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IGl0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkJdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X2dldF9tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCS8qIE1TTkRfTUFTS19JTUlYIGlzIHRoZSBkZWZhdWx0ICovCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisKKwlpZiAoY2hpcC0+cmVjc3JjICYgTVNORF9NQVNLX1NZTlRIKSB7CisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAxOworCX0gZWxzZSBpZiAoKGNoaXAtPnJlY3NyYyAmIE1TTkRfTUFTS19ESUdJVEFMKSAmJgorCQkgdGVzdF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKSkgeworCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKKwl9CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3NldF9tdXgoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgdmFsKQoreworCXVuc2lnbmVkIG5ld3JlY3NyYzsKKwlpbnQgY2hhbmdlOworCXVuc2lnbmVkIGNoYXIgbXNuZGJ5dGU7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX0lNSVg7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9BTkFfSU47CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX1NZTlRIOworCQltc25kYnl0ZSA9IEhERVhBUl9TRVRfU1lOVEhfSU47CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX0RJR0lUQUw7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9EQVRfSU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGFuZ2UgID0gbmV3cmVjc3JjICE9IGNoaXAtPnJlY3NyYzsKKwlpZiAoY2hhbmdlKSB7CisJCWNoYW5nZSA9IDA7CisJCWlmICghc25kX21zbmRfc2VuZF93b3JkKGNoaXAsIDAsIDAsIG1zbmRieXRlKSkKKwkJCWlmICghc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfQVVYX1JFUSkpIHsKKwkJCQljaGlwLT5yZWNzcmMgPSBuZXdyZWNzcmM7CisJCQkJY2hhbmdlID0gMTsKKwkJCX0KKwl9CisJcmV0dXJuIGNoYW5nZTsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF9wdXRfbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqbXNuZCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlyZXR1cm4gc25kX21zbmRtaXhfc2V0X211eChtc25kLCB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDEwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtc25kLT5sZWZ0X2xldmVsc1thZGRyXSAqIDEwMDsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAvPSAweEZGRkY7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBtc25kLT5yaWdodF9sZXZlbHNbYWRkcl0gKiAxMDA7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gLz0gMHhGRkZGOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSB1cGRhdGVfdm9sbShhLCBiKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdyaXRldygoZGV2LT5sZWZ0X2xldmVsc1thXSA+PiAxKSAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCkgLyAweGZmZmYsCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjYiMjTGVmdCk7CQkJXAorCQl3cml0ZXcoKGRldi0+cmlnaHRfbGV2ZWxzW2FdID4+IDEpICAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpIC8gMHhmZmZmLCBcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI2IjI1JpZ2h0KTsJCQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgdXBkYXRlX3BvdG0oZCwgcywgYXIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd3JpdGViKChkZXYtPmxlZnRfbGV2ZWxzW2RdID4+IDgpICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNMZWZ0KTsJCQlcCisJCXdyaXRlYigoZGV2LT5yaWdodF9sZXZlbHNbZF0gPj4gOCkgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNSaWdodCk7CQkJXAorCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgYXIpID09IDApCQlcCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOwlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgdXBkYXRlX3BvdChkLCBzLCBhcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3cml0ZWIoZGV2LT5sZWZ0X2xldmVsc1tkXSA+PiA4LAkJCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjTGVmdCk7CQkJXAorCQl3cml0ZWIoZGV2LT5yaWdodF9sZXZlbHNbZF0gPj4gOCwJCQlcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI1JpZ2h0KTsJCQlcCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBhcikgPT0gMCkJCVwKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CVwKKwl9IHdoaWxlICgwKTsKKworCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3NldChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgaW50IGQsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisJaW50IGJMZWZ0LCBiUmlnaHQ7CisJaW50IHdMZWZ0LCB3UmlnaHQ7CisJaW50IHVwZGF0ZW1hc3RlciA9IDA7CisKKwlpZiAoZCA+PSBMRVZFTF9FTlRSSUVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJMZWZ0ID0gbGVmdCAqIDB4ZmYgLyAxMDA7CisJd0xlZnQgPSBsZWZ0ICogMHhmZmZmIC8gMTAwOworCisJYlJpZ2h0ID0gcmlnaHQgKiAweGZmIC8gMTAwOworCXdSaWdodCA9IHJpZ2h0ICogMHhmZmZmIC8gMTAwOworCisJZGV2LT5sZWZ0X2xldmVsc1tkXSA9IHdMZWZ0OworCWRldi0+cmlnaHRfbGV2ZWxzW2RdID0gd1JpZ2h0OworCisJc3dpdGNoIChkKSB7CisJCS8qIG1hc3RlciB2b2x1bWUgdW5zY2FsZWQgY29udHJvbHMgKi8KKwljYXNlIE1TTkRfTUlYRVJfTElORToJCQkvKiBsaW5lIHBvdCBjb250cm9sICovCisJCS8qIHNjYWxlZCBieSBJTUlYIGluIGRpZ2l0YWwgbWl4ICovCisJCXdyaXRlYihiTGVmdCwgZGV2LT5TTUEgKyBTTUFfYkluUG90UG9zTGVmdCk7CisJCXdyaXRlYihiUmlnaHQsIGRldi0+U01BICsgU01BX2JJblBvdFBvc1JpZ2h0KTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIEhERVhBUl9JTl9TRVRfUE9UUykgPT0gMCkKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CisJCWJyZWFrOworCWNhc2UgTVNORF9NSVhFUl9NSUM6CQkJLyogbWljIHBvdCBjb250cm9sICovCisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZENsYXNzaWMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogc2NhbGVkIGJ5IElNSVggaW4gZGlnaXRhbCBtaXggKi8KKwkJd3JpdGViKGJMZWZ0LCBkZXYtPlNNQSArIFNNQV9iTWljUG90UG9zTGVmdCk7CisJCXdyaXRlYihiUmlnaHQsIGRldi0+U01BICsgU01BX2JNaWNQb3RQb3NSaWdodCk7CisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBIREVYQVJfTUlDX1NFVF9QT1RTKSA9PSAwKQorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsKKwkJYnJlYWs7CisJY2FzZSBNU05EX01JWEVSX1ZPTFVNRToJCS8qIG1hc3RlciB2b2x1bWUgKi8KKwkJd3JpdGV3KHdMZWZ0LCBkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwkJd3JpdGV3KHdSaWdodCwgZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgTVNORF9NSVhFUl9BVVg6CQkJLyogYXV4IHBvdCBjb250cm9sICovCisJCS8qIHNjYWxlZCBieSBtYXN0ZXIgdm9sdW1lICovCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCS8qIGRpZ2l0YWwgY29udHJvbHMgKi8KKwljYXNlIE1TTkRfTUlYRVJfU1lOVEg6CQkJLyogc3ludGggdm9sIChkc3AgbWl4KSAqLworCWNhc2UgTVNORF9NSVhFUl9QQ006CQkJLyogcGNtIHZvbCAoZHNwIG1peCkgKi8KKwljYXNlIE1TTkRfTUlYRVJfSU1JWDoJCQkvKiBpbnB1dCBtb25pdG9yIChkc3AgbWl4KSAqLworCQkvKiBzY2FsZWQgYnkgbWFzdGVyIHZvbHVtZSAqLworCQl1cGRhdGVtYXN0ZXIgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1cGRhdGVtYXN0ZXIpIHsKKwkJLyogdXBkYXRlIG1hc3RlciB2b2x1bWUgc2NhbGVkIGNvbnRyb2xzICovCisJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfUENNLCB3Q3VyclBsYXlWb2wpOworCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX0lNSVgsIHdDdXJySW5Wb2wpOworCQlpZiAoZGV2LT50eXBlID09IG1zbmRQaW5uYWNsZSkKKwkJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfU1lOVEgsIHdDdXJyTUhkclZvbCk7CisJCXVwZGF0ZV9wb3RtKE1TTkRfTUlYRVJfQVVYLCBiQXV4UG90UG9zLCBIREVYQVJfQVVYX1NFVF9QT1RTKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxlZnQgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAlIDEwMTsKKwlyaWdodCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICUgMTAxOworCXNwaW5fbG9ja19pcnFzYXZlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJY2hhbmdlID0gbXNuZC0+bGVmdF9sZXZlbHNbYWRkcl0gIT0gbGVmdAorCQl8fCBtc25kLT5yaWdodF9sZXZlbHNbYWRkcl0gIT0gcmlnaHQ7CisJc25kX21zbmRtaXhfc2V0KG1zbmQsIGFkZHIsIGxlZnQsIHJpZ2h0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworCisjZGVmaW5lIERVTU1ZX1ZPTFVNRSh4bmFtZSwgeGluZGV4LCBhZGRyKSBcCit7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4aW5kZXgsIFwKKyAgLmluZm8gPSBzbmRfbXNuZG1peF92b2x1bWVfaW5mbywgXAorICAuZ2V0ID0gc25kX21zbmRtaXhfdm9sdW1lX2dldCwgLnB1dCA9IHNuZF9tc25kbWl4X3ZvbHVtZV9wdXQsIFwKKyAgLnByaXZhdGVfdmFsdWUgPSBhZGRyIH0KKworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21zbmRfY29udHJvbHNbXSA9IHsKK0RVTU1ZX1ZPTFVNRSgiTWFzdGVyIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfVk9MVU1FKSwKK0RVTU1ZX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfUENNKSwKK0RVTU1ZX1ZPTFVNRSgiQXV4IFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfQVVYKSwKK0RVTU1ZX1ZPTFVNRSgiTGluZSBWb2x1bWUiLCAwLCBNU05EX01JWEVSX0xJTkUpLAorRFVNTVlfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9NSUMpLAorRFVNTVlfVk9MVU1FKCJNb25pdG9yIiwJMCwgTVNORF9NSVhFUl9JTUlYKSwKK3sKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJLmluZm8gPSBzbmRfbXNuZG1peF9pbmZvX211eCwKKwkuZ2V0ID0gc25kX21zbmRtaXhfZ2V0X211eCwKKwkucHV0ID0gc25kX21zbmRtaXhfcHV0X211eCwKK30KK307CisKKworaW50IF9fZGV2aW5pdCBzbmRfbXNuZG1peF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCBlcnI7CisKKwlpZiAoc25kX0JVR19PTighY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5taXhlcl9sb2NrKTsKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiTVNORCBQaW5uYWNsZSBNaXhlciIpOworCisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9tc25kX2NvbnRyb2xzKTsgaWR4KyspCisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCisJCQkJICBzbmRfY3RsX25ldzEoc25kX21zbmRfY29udHJvbHMgKyBpZHgsIGNoaXApKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X25ldyk7CisKK3ZvaWQgc25kX21zbmRtaXhfc2V0dXAoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdXBkYXRlX3BvdChNU05EX01JWEVSX0xJTkUsIGJJblBvdFBvcywgSERFWEFSX0lOX1NFVF9QT1RTKTsKKwl1cGRhdGVfcG90bShNU05EX01JWEVSX0FVWCwgYkF1eFBvdFBvcywgSERFWEFSX0FVWF9TRVRfUE9UUyk7CisJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9QQ00sIHdDdXJyUGxheVZvbCk7CisJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9JTUlYLCB3Q3VyckluVm9sKTsKKwlpZiAoZGV2LT50eXBlID09IG1zbmRQaW5uYWNsZSkgeworCQl1cGRhdGVfcG90KE1TTkRfTUlYRVJfTUlDLCBiTWljUG90UG9zLCBIREVYQVJfTUlDX1NFVF9QT1RTKTsKKwkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9TWU5USCwgd0N1cnJNSGRyVm9sKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X3NldHVwKTsKKworaW50IHNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhzdHJ1Y3Qgc25kX21zbmQgKmRldiwgaW50IHJlY3NyYykKK3sKKwlkZXYtPnJlY3NyYyA9IC0xOworCXJldHVybiBzbmRfbXNuZG1peF9zZXRfbXV4KGRldiwgcmVjc3JjKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcGwzc2EyLmMgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCmluZGV4IDU4Yzk3MmIuLmVmOTUyNzlkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTE3OSwxMiArMTc5LDEzIEBACiAJdW5zaWduZWQgY2hhciByZXN1bHQ7CiAjaWYgMAogCW91dGIoMHgxZCwgcG9ydCk7CS8qIHBhc3N3b3JkICovCi0JcHJpbnRrKCJyZWFkIFsweCVseF0gPSAweCV4XG4iLCBwb3J0LCBpbmIocG9ydCkpOworCXByaW50ayhLRVJOX0RFQlVHICJyZWFkIFsweCVseF0gPSAweCV4XG4iLCBwb3J0LCBpbmIocG9ydCkpOwogI2VuZGlmCiAJb3V0YihyZWcsIGNoaXAtPnBvcnQpOwkvKiByZWdpc3RlciAqLwogCXJlc3VsdCA9IGluYihjaGlwLT5wb3J0ICsgMSk7CiAjaWYgMAotCXByaW50aygicmVhZCBbMHglbHhdID0gMHgleCBbMHgleF1cbiIsIHBvcnQsIHJlc3VsdCwgaW5iKHBvcnQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicmVhZCBbMHglbHhdID0gMHgleCBbMHgleF1cbiIsCisJICAgICAgIHBvcnQsIHJlc3VsdCwgaW5iKHBvcnQpKTsKICNlbmRpZgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjM0LDEwIEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCBncmFiIHBvcnQgMHglbHhcbiIsIHBvcnQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvLyBzbmRfcHJpbnRrKCJSRUcgMEEgPSAweCV4XG4iLCBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIDB4MGEpKTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiUkVHIDBBID0gMHgleFxuIiwKKwkJICAgc25kX29wbDNzYTJfcmVhZChjaGlwLCAweDBhKSk7CisJKi8KIAljaGlwLT52ZXJzaW9uID0gMDsKIAl0bXAgPSBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIE9QTDNTQTJfTUlTQyk7CiAJaWYgKHRtcCA9PSAweGZmKSB7CkBAIC01NTAsMjEgKzU1NCwyNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzbmRfb3BsM3NhMl9zdXNwZW5kKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlpZiAoY2FyZCkgeworCQlzdHJ1Y3Qgc25kX29wbDNzYTIgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0JY2hpcC0+d3NzLT5zdXNwZW5kKGNoaXAtPndzcyk7Ci0JLyogcG93ZXIgZG93biAqLwotCXNuZF9vcGwzc2EyX3dyaXRlKGNoaXAsIE9QTDNTQTJfUE1fQ1RSTCwgT1BMM1NBMl9QTV9EMyk7CisJCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKwkJY2hpcC0+d3NzLT5zdXNwZW5kKGNoaXAtPndzcyk7CisJCS8qIHBvd2VyIGRvd24gKi8KKwkJc25kX29wbDNzYTJfd3JpdGUoY2hpcCwgT1BMM1NBMl9QTV9DVFJMLCBPUEwzU0EyX1BNX0QzKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfb3BsM3NhMl9yZXN1bWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX29wbDNzYTIgKmNoaXA7CiAJaW50IGk7CiAKKwlpZiAoIWNhcmQpCisJCXJldHVybiAwOworCisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAkvKiBwb3dlciB1cCAqLwogCXNuZF9vcGwzc2EyX3dyaXRlKGNoaXAsIE9QTDNTQTJfUE1fQ1RSTCwgT1BMM1NBMl9QTV9EMCk7CiAKQEAgLTYxMywyNSArNjIzLDI4IEBACiB7CiAJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWlmIChjaGlwLT5pcnEgPj0gMCkKLQkJZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworCQlmcmVlX2lycShjaGlwLT5pcnEsIGNhcmQpOwogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+cmVzX3BvcnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfb3BsM3NhMl9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfb3BsM3NhMl9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9vcGwzc2EyKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiT1BMM1NBMiIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJZYW1haGEgT1BMMy1TQTIiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiWWFtYWhhIE9QTDMtU0EiKTsKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CiAJY2hpcC0+aXJxID0gLTE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX29wbDNzYTJfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3BsM3NhMl9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC03MjMsOSArNzM2LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC03ODksOSArODAyLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC04NzAsOSArODgzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfb3BsM3NhMl9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwppbmRleCA0NDA3NTVjLi4wMmUzMGQ3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCkBAIC0xMjI4LDkgKzEyMjgsMTAgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CiAKLQlpZiAoIShjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNuZF9taXJvKSkpKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX21pcm8pLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfbWlyb19mcmVlOwogCW1pcm8gPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCAxOTcwNmIwLi41Y2Q1NTUzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgaGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGhhcmR3YXJlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKQEAgLTMzNiw3ICszMzYsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC00MTIsNyArNDEyLDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDMwLDcgKzQzMCw4IEBACiAJCXdzc19iYXNlX2JpdHMgPSAweDAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsIGNoaXAtPndzc19iYXNlKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCSAgIGNoaXAtPndzc19iYXNlKTsKIAkJZ290byBfX3NraXBfYmFzZTsKIAl9CiAJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygxKSwgd3NzX2Jhc2VfYml0cyA8PCA0LCAweDMwKTsKQEAgLTQ1NSw3ICs0NTYsNyBAQAogCQlpcnFfYml0cyA9IDB4MDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBpcnEgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmlycSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgaXJxICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5pcnEpOwogCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CiAJfQogCkBAIC00NzAsMTMgKzQ3MSwxNCBAQAogCQlkbWFfYml0cyA9IDB4MDM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBkbWExICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5kbWExKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBkbWExICMgJWQgbm90IHZhbGlkXG4iLAorCQkJICAgY2hpcC0+ZG1hMSk7CiAJCWdvdG8gX19za2lwX3Jlc291cmNlczsKIAl9CiAKICNpZiBkZWZpbmVkKENTNDIzMSkgfHwgZGVmaW5lZChPUFRpOTNYKQogCWlmIChjaGlwLT5kbWExID09IGNoaXAtPmRtYTIpIHsKLQkJc25kX3ByaW50aygiZG9uJ3Qgd2FudCB0byBzaGFyZSBkbWFzXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZG9uJ3Qgd2FudCB0byBzaGFyZSBkbWFzXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTQ4NSw3ICs0ODcsOCBAQAogCWNhc2UgMToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmRtYTIpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsCisJCQkgICBjaGlwLT5kbWEyKTsKIAkJZ290byBfX3NraXBfcmVzb3VyY2VzOwogCX0KIAlkbWFfYml0cyB8PSAweDA0OwpAQCAtNTE2LDcgKzUxOSw4IEBACiAJCQltcHVfcG9ydF9iaXRzID0gMHgwMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc25kX3ByaW50aygiTVBVLTQwMSBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIk1QVS00MDEgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCiAJCQkJY2hpcC0+bXB1X3BvcnQpOwogCQkJZ290byBfX3NraXBfbXB1OwogCQl9CkBAIC01MzUsNyArNTM5LDcgQEAKIAkJCW1wdV9pcnFfYml0cyA9IDB4MDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNuZF9wcmludGsoIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAogCQkJCWNoaXAtPm1wdV9pcnEpOwogCQkJZ290byBfX3NraXBfbXB1OwogCQl9CkBAIC03MjYsNyArNzMwLDcgQEAKIAlpZiAoY2hpcC0+d3NzX2Jhc2UgPT0gU05EUlZfQVVUT19QT1JUKSB7CiAJCWNoaXAtPndzc19iYXNlID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaW9wb3J0KHBvc3NpYmxlX3BvcnRzLCA0KTsKIAkJaWYgKGNoaXAtPndzc19iYXNlIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIFdTUyBwb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQpAQCAtODE1LDE0ICs4MTksOCBAQAogCQkJCSAgIGNoaXAtPmZtX3BvcnQsIGNoaXAtPmZtX3BvcnQgKyA0IC0gMSk7CiAJCX0KIAkJaWYgKG9wbDMpIHsKLSNpZmRlZiBDUzQyMzEKLQkJCWNvbnN0IGludCB0MWRldiA9IDE7Ci0jZWxzZQotCQkJY29uc3QgaW50IHQxZGV2ID0gMDsKLSNlbmRpZgotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCB0MWRldiwgdDFkZXYrMSkpIDwgMCkKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsICZzeW50aCkpIDwgMCkKKwkJCWVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsICZzeW50aCk7CisJCQlpZiAoZXJyb3IgPCAwKQogCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KQEAgLTgzMCwxNSArODI4LDE4IEBACiAJcmV0dXJuIHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfb3B0aTl4eF9jYXJkX25ldyh2b2lkKQorc3RhdGljIGludCBzbmRfb3B0aTl4eF9jYXJkX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfb3B0aTl4eCkpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfb3B0aTl4eCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9vcHRpOXh4X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5eHhfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKQEAgLTg5NywxNSArODk4LDE1IEBACiAjaWYgZGVmaW5lZChDUzQyMzEpIHx8IGRlZmluZWQoT1BUaTkzWCkKIAlpZiAoZG1hMiA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQlpZiAoKGRtYTIgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hMnNbZG1hMSAlIDRdKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogI2VuZGlmCiAKLQljYXJkID0gc25kX29wdGk5eHhfY2FyZF9uZXcoKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfb3B0aTl4eF9kZXRlY3QoY2FyZCwgY2FyZC0+cHJpdmF0ZV9kYXRhKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC05NTAsOSArOTUxLDkgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoISBpc2FwbnApCiAJCXJldHVybiAtRU5PREVWOwotCWNhcmQgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX29wdGk5eHhfY2FyZF9uZXcoJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaHcgPSBzbmRfY2FyZF9vcHRpOXh4X3BucChjaGlwLCBwY2FyZCwgcGlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lczk2OC5jIGIvc291bmQvaXNhL3NiL2VzOTY4LmMKaW5kZXggYzhjOGUyMS4uY2FmYzNhNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VzOTY4LmMKKysrIGIvc291bmQvaXNhL3NiL2VzOTY4LmMKQEAgLTEwOCw5ICsxMDgsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9jYXJkX2VzOTY4ICphY2FyZDsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9lczk2OCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2VzOTY4KSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfZXM5NjhfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiMTYuYyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKaW5kZXggMmMyMDFmNy4uNTE5YzM2MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTYuYworKysgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCkBAIC0zMjQsMTQgKzMyNCwxOCBAQAogI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJMAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9zYjE2X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9zYjE2X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9zYjE2KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3NiMTYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3NiMTZfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2IxNl9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC00ODksOSArNDkzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJLyogbm9uLVBuUCBGTSBwb3J0IGFkZHJlc3MgaXMgaGFyZHdpcmVkIHdpdGggYmFzZSBwb3J0IGFkZHJlc3MgKi8KQEAgLTYxMCw5ICs2MTQsOSBAQAogCWZvciAoIDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7CiAJCWlmICghZW5hYmxlW2Rldl0gfHwgIWlzYXBucFtkZXZdKQogCQkJY29udGludWU7Ci0JCWNhcmQgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYpOwotCQlpZiAoISBjYXJkKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXJlcyA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CiAJCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwogCQlpZiAoKHJlcyA9IHNuZF9jYXJkX3NiMTZfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwIHx8CiAJCSAgICAocmVzID0gc25kX3NiMTZfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2I4LmMgYi9zb3VuZC9pc2Evc2Ivc2I4LmMKaW5kZXggZWEwNjg3Ny4uM2NkNTdlZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiOC5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjguYwpAQCAtMTAzLDEwICsxMDMsMTAgQEAKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfc2I4KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfc2I4KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYjhfZnJlZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwppbmRleCA0MDZhNDMxLi40NzUyMjBiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2R0MDE5eF9pbnB1dF9zd19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1s1XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbNV0gPSB7CiAJCSJDRCIsICJNaWMiLCAiTGluZSIsICJTeW50aCIsICJNYXN0ZXIiCiAJfTsKIApAQCAtMjY5LDEyICsyNjksNzMgQEAKIH0KIAogLyoKKyAqIEFMUzQwMDAgbW9ubyByZWNvcmRpbmcgY29udHJvbCBzd2l0Y2gKKyAqLworCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0c1szXSA9IHsKKwkJIkwgY2hhbiBvbmx5IiwgIlIgY2hhbiBvbmx5IiwgIkwgY2gvMiArIFIgY2gvMiIKKwl9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAyKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc2IgKnNiID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBvdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJb3ZhbCA9IHNuZF9zYm1peGVyX3JlYWQoc2IsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPj49IDY7CisJaWYgKG92YWwgPiAyKQorCQlvdmFsID0gMjsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBvdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc2IgKnNiID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNoYW5nZTsKKwl1bnNpZ25lZCBjaGFyIG52YWwsIG92YWw7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pcnFzYXZlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPSBzbmRfc2JtaXhlcl9yZWFkKHNiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCk7CisKKwludmFsID0gKG92YWwgJiB+KDMgPDwgNikpCisJICAgICB8ICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdIDw8IDYpOworCWNoYW5nZSA9IG52YWwgIT0gb3ZhbDsKKwlpZiAoY2hhbmdlKQorCQlzbmRfc2JtaXhlcl93cml0ZShzYiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIG52YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworLyoKICAqIFNCUFJPIGlucHV0IG11bHRpcGxleGVyCiAgKi8KIAogc3RhdGljIGludCBzbmRfc2I4bWl4ZXJfaW5mb19tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzWzNdID0geworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0c1szXSA9IHsKIAkJIk1pYyIsICJDRCIsICJMaW5lIgogCX07CiAKQEAgLTQ0Miw2ICs1MDMsMTIgQEAKIAkJCS5nZXQgPSBzbmRfZHQwMTl4X2lucHV0X3N3X2dldCwKIAkJCS5wdXQgPSBzbmRfZHQwMTl4X2lucHV0X3N3X3B1dCwKIAkJfSwKKwkJW1NCX01JWF9NT05PX0NBUFRVUkVfQUxTNEtdID0geworCQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCQkuaW5mbyA9IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfaW5mbywKKwkJCS5nZXQgPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2dldCwKKwkJCS5wdXQgPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX3B1dCwKKwkJfSwKIAl9OwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKIAlpbnQgZXJyOwpAQCAtNjM2LDYgKzcwMyw4IEBACiAJfTsKIAogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfZHQwMTl4X2NvbnRyb2xzW10gPSB7CisJLyogQUxTNDAwMCBiZWxvdyBoYXMgc29tZSBwYXJ0cyB3aGljaCB3ZSBtaWdodCBiZSBsYWNraW5nLAorCSAqIGUuZy4gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoIC0gY2hlY2sgaXQhICovCiAJJnNuZF9kdDAxOXhfY3RsX21hc3Rlcl9wbGF5X3ZvbCwKIAkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfdm9sLAogCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3ZvbCwKQEAgLTY2NiwxOCArNzM1LDIxIEBACiAvKgogICogQUxTNDAwMCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi0vKiBGSVhNRTogU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwgbmVlZHMgb3V0cHV0IHNlbGVjdCBjdHJsISAqLwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19wbGF5YmFja19zd2l0Y2ggPQogCVNCX1NJTkdMRSgiTWFzdGVyIE1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIDUsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlID0KLQlTQl9TSU5HTEUoIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNiwgMHgwMyk7Ci0vKiBGSVhNRTogbW9ubyBwbGF5YmFjayBzd2l0Y2ggYWxzbyBhdmFpbGFibGUgb24gRFQwMTlYPyAqLworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSA9IHsKKwkJLm5hbWUgPSAiTWFzdGVyIE1vbm8gQ2FwdHVyZSBSb3V0ZSIsCisJCS50eXBlID0gU0JfTUlYX01PTk9fQ0FQVFVSRV9BTFM0SworCX07CiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoID0KIAlTQl9TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDAsIDEpOwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCA9CiAJU0JfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDAsIDB4MDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taXhlcl9sb29wYmFjayA9Ci0JU0JfU0lOR0xFKCJBbmFsb2cgTG9vcGJhY2siLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrID0KKwlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfZGlnaXRhbF9sb29wYmFjayA9CisJU0JfU0lOR0xFKCJEaWdpdGFsIExvb3BiYWNrIFN3aXRjaCIsCisJCSAgU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTiwgNywgMHgwMSk7CiAvKiBGSVhNRTogZnVuY3Rpb25hbGl0eSBvZiAzRCBjb250cm9scyBtaWdodCBiZSBzd2FwcGVkLCBJIGRpZG4ndCBmaW5kCiAgKiBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBpZGVudGlmeSB3aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHdoYXQgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCA9CkBAIC02OTQsNiArNzY2LDkgQEAKIAlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBXaWRlIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCAwLCAweDBmKTsKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCA9CiAJU0JfU0lOR0xFKCIzRCBQb3dlck9mZiBTd2l0Y2giLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDQsIDB4MDEpOworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF8zZGJfZnJlcV9jb250cm9sX3N3aXRjaCA9CisJU0JfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgOGtIeiAvIDIwa0h6IExQRiBTd2l0Y2giLAorCQkgIFNCX0FMUzQwMDBfRk1EQUMsIDUsIDB4MDEpOwogI2lmZGVmIE5PVF9BVkFJTEFCTEUKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfZm1kYWMgPQogCVNCX1NJTkdMRSgiRk1EQUMgU3dpdGNoIChPcHRpb24gPykiLCBTQl9BTFM0MDAwX0ZNREFDLCAwLCAweDAxKTsKQEAgLTcwMiwzNSArNzc3LDM3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfYWxzNDAwMF9jb250cm9sc1tdID0gewotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAotCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlLAotCSZzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QsCi0JJnNuZF9zYjE2X2N0bF9hdXRvX21pY19nYWluLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfcGNfc3BlYWtlcl92b2wsCi0JJnNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BsYXlfdm9sLAotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfbG9vcGJhY2ssCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3JhdGlvLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2ZyZXEsCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZGVsYXksCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcG93ZXJvZmZfc3dpdGNoLAorCQkJCQkJLyogQUxTNDAwMGEuUERGIHJlZ3MgcGFnZSAqLworCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAkJLyogTVgzMC8zMSAxMiAqLworCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KKwkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwJCS8qIE1YMzIvMzMgMTIgKi8KKwkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KKwkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAkJLyogTVgzNC8zNSAxMi8xMyAqLworCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwJCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCQkvKiBNWDM2LzM3IDEzICovCisJJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAkJLyogTVgzOC8zOSAxMyAqLworCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAkvKiBNWDREICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCQkvKiBNWDNBICAgIDEzICovCisJJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwJCS8qIE1YM0IgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAkJLyogTVgzRi80MCAxNSAqLworCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCQkJLyogTVg0MS80MiAxNSAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLCAvKiBNWDRDIDE2ICovCisJJnNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwgLyogTVg0QiAgMTYgKi8KKwkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9hbmFsb2dfbG9vcGJhY2ssIC8qIE1YNEQgICAgMTYgKi8KKwkmc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2ssIC8qIENSMyAgICAyMSAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAkJIC8qIE1YNTAgICAxNyAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAkJIC8qIE1YNTEgICAxOCAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwJLyogTVg1MSAgICAxOCAqLworCSZzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2gsCS8qIE1YNEYgICAgMTcgKi8KICNpZmRlZiBOT1RfQVZBSUxBQkxFCiAJJnNuZF9hbHM0MDAwX2N0bF9mbWRhYywKIAkmc25kX2FsczQwMDBfY3RsX3Fzb3VuZCwKQEAgLTkwNSwxMyArOTgyLDE0IEBACiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBhbHM0MDAwX3NhdmVkX3JlZ3NbXSA9IHsKKwkvKiBwbGVhc2UgdmVyaWZ5IGluIGRzaGVldCB3aGV0aGVyIHJlZ3MgdG8gYmUgYWRkZWQKKwkgICBhcmUgYWN0dWFsbHkgcmVhbCBIL1cgb3IganVzdCBkdW1teSAqLwogCVNCX0RTUDRfTUFTVEVSX0RFViwgU0JfRFNQNF9NQVNURVJfREVWICsgMSwKIAlTQl9EU1A0X09VVFBVVF9TVywKIAlTQl9EU1A0X1BDTV9ERVYsIFNCX0RTUDRfUENNX0RFViArIDEsCiAJU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULAogCVNCX0RTUDRfU1lOVEhfREVWLCBTQl9EU1A0X1NZTlRIX0RFViArIDEsCiAJU0JfRFNQNF9DRF9ERVYsIFNCX0RTUDRfQ0RfREVWICsgMSwKLQlTQl9EU1A0X01JQ19BR0MsCiAJU0JfRFNQNF9NSUNfREVWLAogCVNCX0RTUDRfU1BFQUtFUl9ERVYsCiAJU0JfRFNQNF9JR0FJTl9ERVYsIFNCX0RTUDRfSUdBSU5fREVWICsgMSwKQEAgLTkxOSw4ICs5OTcsMTAgQEAKIAlTQl9EVDAxOVhfT1VUUFVUX1NXMiwKIAlTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwKIAlTQl9BTFM0MDAwX01JQ19JTl9HQUlOLAorCVNCX0FMUzQwMDBfRk1EQUMsCiAJU0JfQUxTNDAwMF8zRF9TTkRfRlgsCiAJU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLAorCVNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04sCiB9OwogCiBzdGF0aWMgdm9pZCBzYXZlX21peGVyKHN0cnVjdCBzbmRfc2IgKmNoaXAsIHVuc2lnbmVkIGNoYXIgKnJlZ3MsIGludCBudW1fcmVncykKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYzYwMDAuYyBiL3NvdW5kL2lzYS9zYzYwMDAuYwppbmRleCBjYTM1OTI0Li43ODIwMTA2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2M2MDAwLmMKKysrIGIvc291bmQvaXNhL3NjNjAwMC5jCkBAIC00ODksOSArNDg5LDkgQEAKIAljaGFyIF9faW9tZW0gKnZtc3NfcG9ydDsKIAogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CiAJCXhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CkBAIC01NzYsMTAgKzU3Niw2IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JXgtMHgleCA/XG4iLAogCQkJICAgMHgzODgsIDB4Mzg4ICsgMik7CiAJfSBlbHNlIHsKLQkJZXJyID0gc25kX29wbDNfdGltZXJfbmV3KG9wbDMsIDAsIDEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX3VubWFwMjsKLQogCQllcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBlcnJfdW5tYXAyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NnYWxheHkuYyBiL3NvdW5kL2lzYS9zZ2FsYXh5LmMKaW5kZXggMmM3NTAzYi4uNmZlMjdiOSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NnYWxheHkuYworKysgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCkBAIC0yNDMsOSArMjQzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF93c3MgKmNoaXA7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXhpcnEgPSBpcnFbZGV2XTsKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NzY2FwZS5jIGIvc291bmQvaXNhL3NzY2FwZS5jCmluZGV4IDQ4YTE2ZDguLjY2MTg3MTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zc2NhcGUuYworKysgYi9zb3VuZC9pc2Evc3NjYXBlLmMKQEAgLTg5LDkgKzg5LDYgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgTVBVNDAxX0lPKGkpICAgICAoKGkpICsgMCkKLSNkZWZpbmUgTUlESV9EQVRBX0lPKGkpICAoKGkpICsgMCkKLSNkZWZpbmUgTUlESV9DVFJMX0lPKGkpICAoKGkpICsgMSkKICNkZWZpbmUgSE9TVF9DVFJMX0lPKGkpICAoKGkpICsgMikKICNkZWZpbmUgSE9TVF9EQVRBX0lPKGkpICAoKGkpICsgMykKICNkZWZpbmUgT0RJRV9BRERSX0lPKGkpICAoKGkpICsgNCkKQEAgLTEyOSw5ICsxMjYsNiBAQAogI2RlZmluZSBETUFfOEJJVCAgMHg4MAogCiAKLSNkZWZpbmUgQUQxODQ1X0ZSRVFfU0VMX01TQiAgICAweDE2Ci0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9MU0IgICAgMHgxNwotCiBlbnVtIGNhcmRfdHlwZSB7CiAJU1NDQVBFLAogCVNTQ0FQRV9QTlAsCkBAIC0xNDEsOCArMTM1LDYgQEAKIHN0cnVjdCBzb3VuZHNjYXBlIHsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgaW9fYmFzZTsKLQl1bnNpZ25lZCB3c3NfYmFzZTsKLQlpbnQgY29kZWNfdHlwZTsKIAlpbnQgaWNfdHlwZTsKIAllbnVtIGNhcmRfdHlwZSB0eXBlOwogCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzOwpAQCAtMzMwLDcgKzMyMiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9tcHU0MDEoY29uc3Qgc3RydWN0IHNuZF9tcHU0MDEgKiBtcHUpCiB7Ci0JcmV0dXJuICgoaW5iKE1JRElfQ1RSTF9JTyhtcHUtPnBvcnQpKSAmIDB4YzApID09IDB4ODApOworCXJldHVybiAoKGluYihNUFU0MDFDKG1wdSkpICYgMHhjMCkgPT0gMHg4MCk7CiB9CiAKIC8qCkBAIC0zMzgsNyArMzMwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpc2VfbXB1NDAxKGNvbnN0IHN0cnVjdCBzbmRfbXB1NDAxICogbXB1KQogewotCW91dGIoMCwgTUlESV9EQVRBX0lPKG1wdS0+cG9ydCkpOworCW91dGIoMCwgTVBVNDAxRChtcHUpKTsKIH0KIAogLyoKQEAgLTM5NiwyMCArMzg4LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgb2JwX3N0YXJ0dXBfYWNrKHN0cnVjdCBzb3VuZHNjYXBlICpzLCB1bnNpZ25lZCB0aW1lb3V0KQogewotCXdoaWxlICh0aW1lb3V0ICE9IDApIHsKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisKKwlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgeDsKIAotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQl4ID0gaW5iKEhPU1RfREFUQV9JTyhzLT5pb19iYXNlKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKCh4ICYgMHhmZSkgPT0gMHhmZSkKIAkJCXJldHVybiAxOwogCi0JCS0tdGltZW91dDsKLQl9IC8qIHdoaWxlICovCisJCW1zbGVlcCgxMCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIzLDIwICs0MTUsMjAgQEAKICAqLwogc3RhdGljIGludCBob3N0X3N0YXJ0dXBfYWNrKHN0cnVjdCBzb3VuZHNjYXBlICpzLCB1bnNpZ25lZCB0aW1lb3V0KQogewotCXdoaWxlICh0aW1lb3V0ICE9IDApIHsKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisKKwlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgeDsKIAotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQl4ID0gaW5iKEhPU1RfREFUQV9JTyhzLT5pb19iYXNlKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHggPT0gMHhmZSkKIAkJCXJldHVybiAxOwogCi0JCS0tdGltZW91dDsKLQl9IC8qIHdoaWxlICovCisJCW1zbGVlcCgxMCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTMyLDEwICs1MjQsMTAgQEAKIAkgKiBnaXZlIGl0IDUgc2Vjb25kcyAobWF4KSAuLi4KIAkgKi8KIAlyZXQgPSAwOwotCWlmICghb2JwX3N0YXJ0dXBfYWNrKHMsIDUpKSB7CisJaWYgKCFvYnBfc3RhcnR1cF9hY2socywgNTAwMCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyByZXNwb25zZSBmcm9tIG9uLWJvYXJkIHByb2Nlc3NvciBhZnRlciB1cGxvYWRcbiIpOwogCQlyZXQgPSAtRUFHQUlOOwotCX0gZWxzZSBpZiAoIWhvc3Rfc3RhcnR1cF9hY2socywgNSkpIHsKKwl9IGVsc2UgaWYgKCFob3N0X3N0YXJ0dXBfYWNrKHMsIDUwMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogU291bmRTY2FwZSBmYWlsZWQgdG8gaW5pdGlhbGlzZVxuIik7CiAJCXJldCA9IC1FQUdBSU47CiAJfQpAQCAtNzMyLDEzICs3MjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCXNldF9ob3N0X21vZGVfdW5zYWZlKHMtPmlvX2Jhc2UpOwotCi0JaWYgKGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgQ01EX0dFVF9NSURJX1ZPTCwgMTAwKSkgewotCQl1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaG9zdF9yZWFkX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIDEwMCk7Ci0JfQotCi0Jc2V0X21pZGlfbW9kZV91bnNhZmUocy0+aW9fYmFzZSk7CisJdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHMtPm1pZGlfdm9sOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc3Myw2ICs3NTksNyBAQAogCWNoYW5nZSA9IChob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9TRVRfTUlESV9WT0wsIDEwMCkKIAkgICAgICAgICAgJiYgaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCAoKHVuc2lnbmVkIGNoYXIpIHVjdGwtPnZhbHVlLmludGVnZXIuIHZhbHVlWzBdKSAmIDEyNywgMTAwKQogCSAgICAgICAgICAmJiBob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9YWFhfTUlESV9WT0wsIDEwMCkpOworCXMtPm1pZGlfdm9sID0gKHVuc2lnbmVkIGNoYXIpIHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxMjc7CiAgICAgICBfX3NraXBfY2hhbmdlOgogCiAJLyoKQEAgLTgxNSwxMiArODAyLDExIEBACiAgKiBQZXJmb3JtIGNlcnRhaW4gYXJjYW5lIHBvcnQtY2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZXJlCiAgKiBpcyBhIFNvdW5kU2NhcGUgYm9hcmQgbHVya2luZyBiZWhpbmQgdGhlIGdpdmVuIHBvcnRzLgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkZXRlY3Rfc3NjYXBlKHN0cnVjdCBzb3VuZHNjYXBlICpzKQorc3RhdGljIGludCBfX2RldmluaXQgZGV0ZWN0X3NzY2FwZShzdHJ1Y3Qgc291bmRzY2FwZSAqcywgbG9uZyB3c3NfaW8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBkOwogCWludCByZXR2YWwgPSAwOwotCWludCBjb2RlYyA9IHMtPndzc19iYXNlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIApAQCAtODM2LDEzICs4MjIsMTEgQEAKIAlpZiAoKGQgJiAweDgwKSAhPSAwKQogCQlnb3RvIF9kb25lOwogCi0JaWYgKGQgPT0gMCkgewotCQlzLT5jb2RlY190eXBlID0gMTsKKwlpZiAoZCA9PSAwKQogCQlzLT5pY190eXBlID0gSUNfT0RJRTsKLQl9IGVsc2UgaWYgKChkICYgMHg2MCkgIT0gMCkgewotCQlzLT5jb2RlY190eXBlID0gMjsKKwllbHNlIGlmICgoZCAmIDB4NjApICE9IDApCiAJCXMtPmljX3R5cGUgPSBJQ19PUFVTOwotCX0gZWxzZQorCWVsc2UKIAkJZ290byBfZG9uZTsKIAogCW91dGIoMHhmYSwgT0RJRV9BRERSX0lPKHMtPmlvX2Jhc2UpKTsKQEAgLTg2MiwxMCArODQ2LDEwIEBACiAJc3NjYXBlX3dyaXRlX3Vuc2FmZShzLT5pb19iYXNlLCBHQV9ITUNUTF9SRUcsIGQgfCAweGMwKTsKIAogCWlmIChzLT50eXBlID09IFNTQ0FQRV9WSVZPKQotCQljb2RlYyArPSA0OworCQl3c3NfaW8gKz0gNDsKIAkvKiB3YWl0IGZvciBXU1MgY29kZWMgKi8KIAlmb3IgKGQgPSAwOyBkIDwgNTAwOyBkKyspIHsKLQkJaWYgKChpbmIoY29kZWMpICYgMHg4MCkgPT0gMCkKKwkJaWYgKChpbmIod3NzX2lvKSAmIDB4ODApID09IDApCiAJCQlicmVhazsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCQltc2xlZXAoMSk7CkBAIC05NTUsODIgKzkzOSw2IEBACiAKIAogLyoKLSAqIE92ZXJyaWRlIGZvciB0aGUgQ1M0MjMxIHBsYXliYWNrIGZvcm1hdCBmdW5jdGlvbi4KLSAqIFRoZSBBRDE4NDUgaGFzIG11Y2ggc2ltcGxlciBmb3JtYXQgYW5kIHJhdGUgc2VsZWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBhZDE4NDVfcGxheWJhY2tfZm9ybWF0KHN0cnVjdCBzbmRfd3NzICpjaGlwLAotCQkJCSAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgIHVuc2lnbmVkIGNoYXIgZm9ybWF0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0KLQkvKgotCSAqIFRoZSBBRDE4NDUgY2FuJ3QgaGFuZGxlIHNhbXBsZSBmcmVxdWVuY2llcwotCSAqIG91dHNpZGUgb2YgNCBrSFogdG8gNTAga0haCi0JICovCi0JaWYgKHJhdGUgPiA1MDAwMCkKLQkJcmF0ZSA9IDUwMDAwOwotCWVsc2UgaWYgKHJhdGUgPCA0MDAwKQotCQlyYXRlID0gNDAwMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBQcm9ncmFtIHRoZSBBRDE4NDUgY29ycmVjdGx5IGZvciB0aGUgcGxheWJhY2sgc3RyZWFtLgotCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQotCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgotCSAqIHJlZ2lzdGVyIGlzIHNldC4KLQkgKiAKLQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgotCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgotCSAqLwotCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9QTEFZQktfRk9STUFULCAoZm9ybWF0ICYgMHhmMCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9NU0IsICh1bnNpZ25lZCBjaGFyKSAocmF0ZSA+PiA4KSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX0xTQiwgKHVuc2lnbmVkIGNoYXIpIHJhdGUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIE92ZXJyaWRlIGZvciB0aGUgQ1M0MjMxIGNhcHR1cmUgZm9ybWF0IGZ1bmN0aW9uLiAKLSAqIFRoZSBBRDE4NDUgaGFzIG11Y2ggc2ltcGxlciBmb3JtYXQgYW5kIHJhdGUgc2VsZWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBhZDE4NDVfY2FwdHVyZV9mb3JtYXQoc3RydWN0IHNuZF93c3MgKmNoaXAsCi0JCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHVuc2lnbmVkIGNoYXIgZm9ybWF0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0KLQkvKgotCSAqIFRoZSBBRDE4NDUgY2FuJ3QgaGFuZGxlIHNhbXBsZSBmcmVxdWVuY2llcyAKLQkgKiBvdXRzaWRlIG9mIDQga0haIHRvIDUwIGtIWgotCSAqLwotCWlmIChyYXRlID4gNTAwMDApCi0JCXJhdGUgPSA1MDAwMDsKLQllbHNlIGlmIChyYXRlIDwgNDAwMCkKLQkJcmF0ZSA9IDQwMDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KLQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKLQkgKiB0aGUgQ0FQVFVSRV9FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgotCSAqIHJlZ2lzdGVyIGlzIHNldC4KLQkgKgotCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCi0JICogICAgICAgdG8gZ2V0IHRoZSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuCi0JICovCi0Jc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX1JFQ19GT1JNQVQsIChmb3JtYXQgJiAweGYwKSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX01TQiwgKHVuc2lnbmVkIGNoYXIpIChyYXRlID4+IDgpKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTFNCLCAodW5zaWduZWQgY2hhcikgcmF0ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotfQotCi0vKgogICogQ3JlYXRlIGFuIEFEMTg0NSBQQ00gc3ViZGV2aWNlIG9uIHRoZSBTb3VuZFNjYXBlLiBUaGUgQUQxODQ1CiAgKiBpcyB2ZXJ5IG11Y2ggbGlrZSBhIENTNDIzMSwgd2l0aCBhIGZldyBleHRyYSBiaXRzLiBXZSB3aWxsCiAgKiB0cnkgdG8gc3VwcG9ydCBhdCBsZWFzdCBzb21lIG9mIHRoZSBleHRyYSBiaXRzIGJ5IG92ZXJyaWRpbmcKQEAgLTEwNTUsMTEgKzk2Myw2IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXN0cnVjdCBzbmRfcGNtICpwY207CiAKLSNkZWZpbmUgQUQxODQ1X0ZSRVFfU0VMX0VOQUJMRSAgMHgwOAotCi0jZGVmaW5lIEFEMTg0NV9QV1JfRE9XTl9DVFJMICAgMHgxYgotI2RlZmluZSBBRDE4NDVfQ1JZU19DTE9DS19TRUwgIDB4MWQKLQogLyoKICAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IGlzIHNldAogICogYnkgdGhlIGxvd2xldmVsIGRyaXZlciAuLi4KQEAgLTEwNzQsNyArOTc3LDYgQEAKICAqLwogCiAJCWlmIChzc2NhcGUtPnR5cGUgIT0gU1NDQVBFX1ZJVk8pIHsKLQkJCWludCB2YWw7CiAJCQkvKgogCQkJICogVGhlIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBvbiB0aGUgU291bmRTY2FwZSBtdXN0CiAJCQkgKiBiZSAxNC4zMTgxOCBNSHosIGJlY2F1c2Ugd2UgbXVzdCBzZXQgdGhpcyByZWdpc3RlcgpAQCAtMTA4MiwyMiArOTg0LDEwIEBACiAJCQkgKi8KIAkJCXNuZF93c3NfbWNlX3VwKGNoaXApOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfQ1JZU19DTE9DS19TRUwsIDB4MjApOworCQkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0NMT0NLLCAweDIwKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCQlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCi0JCQkvKgotCQkJICogTW9yZSBjdXN0b20gY29uZmlndXJhdGlvbjoKLQkJCSAqIGEpIHNlbGVjdCAibW9kZSAyIiBhbmQgcHJvdmlkZSBhIGN1cnJlbnQgZHJpdmUgb2YgOG1BCi0JCQkgKiBiKSBlbmFibGUgZnJlcXVlbmN5IHNlbGVjdGlvbiAoZm9yIGNhcHR1cmUvcGxheWJhY2spCi0JCQkgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCQkJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX01JU0NfSU5GTywKLQkJCQkgICAgQ1M0MjMxX01PREUyIHwgMHgxMCk7Ci0JCQl2YWwgPSBzbmRfd3NzX2luKGNoaXAsIEFEMTg0NV9QV1JfRE9XTl9DVFJMKTsKLQkJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9QV1JfRE9XTl9DVFJMLAotCQkJCSAgICB2YWwgfCBBRDE4NDVfRlJFUV9TRUxfRU5BQkxFKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCX0KIAogCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKQEAgLTExMTMsMTEgKzEwMDMsMTMgQEAKIAkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOwogCQkJZ290byBfZXJyb3I7CiAJCX0KLQkJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogTm8gdGltZXIgZGV2aWNlICIKLQkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOwotCQkJZ290byBfZXJyb3I7CisJCWlmIChjaGlwLT5oYXJkd2FyZSAhPSBXU1NfSFdfQUQxODQ4KSB7CisJCQllcnIgPSBzbmRfd3NzX3RpbWVyKGNoaXAsIDAsIE5VTEwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIHRpbWVyIGRldmljZSAiCisJCQkJCQkgICAgImZvciBBRDE4NDUgY2hpcFxuIik7CisJCQkJZ290byBfZXJyb3I7CisJCQl9CiAJCX0KIAogCQlpZiAoc3NjYXBlLT50eXBlICE9IFNTQ0FQRV9WSVZPKSB7CkBAIC0xMTI4LDggKzEwMjAsNiBAQAogCQkJCQkJICAgICJNSURJIG1peGVyIGNvbnRyb2xcbiIpOwogCQkJCWdvdG8gX2Vycm9yOwogCQkJfQotCQkJY2hpcC0+c2V0X3BsYXliYWNrX2Zvcm1hdCA9IGFkMTg0NV9wbGF5YmFja19mb3JtYXQ7Ci0JCQljaGlwLT5zZXRfY2FwdHVyZV9mb3JtYXQgPSBhZDE4NDVfY2FwdHVyZV9mb3JtYXQ7CiAJCX0KIAogCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU291bmRTY2FwZSIpOwpAQCAtMTE1Nyw3ICsxMDQ3LDYgQEAKIAl1bnNpZ25lZCBkbWFfY2ZnOwogCXVuc2lnbmVkIGlycV9jZmc7CiAJdW5zaWduZWQgbXB1X2lycV9jZmc7Ci0JdW5zaWduZWQgeHBvcnQ7CiAJc3RydWN0IHJlc291cmNlICppb19yZXM7CiAJc3RydWN0IHJlc291cmNlICp3c3NfcmVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTc3LDE1ICsxMDY2LDE1IEBACiAJCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBJbnZhbGlkIElSUSAlZFxuIiwgbXB1X2lycVtkZXZdKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JeHBvcnQgPSBwb3J0W2Rldl07CiAKIAkvKgogCSAqIEdyYWIgSU8gcG9ydHMgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcHJvYmUgc28gdGhhdCB3ZQogCSAqIGNhbiBkZXRlY3QgYW5kIGNvbnRyb2wgdGhpcyBoYXJkd2FyZSAuLi4KIAkgKi8KLQlpb19yZXMgPSByZXF1ZXN0X3JlZ2lvbih4cG9ydCwgOCwgIlNvdW5kU2NhcGUiKTsKKwlpb19yZXMgPSByZXF1ZXN0X3JlZ2lvbihwb3J0W2Rldl0sIDgsICJTb3VuZFNjYXBlIik7CiAJaWYgKCFpb19yZXMpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBjYW4ndCBncmFiIHBvcnQgMHgleFxuIiwgeHBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAic3NjYXBlOiBjYW4ndCBncmFiIHBvcnQgMHglbHhcbiIsIHBvcnRbZGV2XSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXdzc19yZXMgPSBOVUxMOwpAQCAtMTIxMiwxMCArMTEwMSw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNzY2FwZS0+Zndsb2NrKTsKIAlzc2NhcGUtPmlvX3JlcyA9IGlvX3JlczsKIAlzc2NhcGUtPndzc19yZXMgPSB3c3NfcmVzOwotCXNzY2FwZS0+aW9fYmFzZSA9IHhwb3J0OwotCXNzY2FwZS0+d3NzX2Jhc2UgPSB3c3NfcG9ydFtkZXZdOworCXNzY2FwZS0+aW9fYmFzZSA9IHBvcnRbZGV2XTsKIAotCWlmICghZGV0ZWN0X3NzY2FwZShzc2NhcGUpKSB7CisJaWYgKCFkZXRlY3Rfc3NjYXBlKHNzY2FwZSwgd3NzX3BvcnRbZGV2XSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IGhhcmR3YXJlIG5vdCBkZXRlY3RlZCBhdCAweCV4XG4iLCBzc2NhcGUtPmlvX2Jhc2UpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIF9yZWxlYXNlX2RtYTsKQEAgLTEyODgsMTIgKzExNzYsMTEgQEAKIAl9CiAjZGVmaW5lIE1JRElfREVWTlVNICAwCiAJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewotCQllcnIgPSBjcmVhdGVfbXB1NDAxKGNhcmQsIE1JRElfREVWTlVNLAotCQkJCSAgICBNUFU0MDFfSU8oeHBvcnQpLCBtcHVfaXJxW2Rldl0pOworCQllcnIgPSBjcmVhdGVfbXB1NDAxKGNhcmQsIE1JRElfREVWTlVNLCBwb3J0W2Rldl0sIG1wdV9pcnFbZGV2XSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogRmFpbGVkIHRvIGNyZWF0ZSAiCi0JCQkJCSJNUFUtNDAxIGRldmljZSBhdCAweCV4XG4iLAotCQkJCQlNUFU0MDFfSU8oeHBvcnQpKTsKKwkJCQkJIk1QVS00MDEgZGV2aWNlIGF0IDB4JWx4XG4iLAorCQkJCQlwb3J0W2Rldl0pOwogCQkJZ290byBfcmVsZWFzZV9kbWE7CiAJCX0KIApAQCAtMTM1NywxMCArMTI0NCwxMCBAQAogCXN0cnVjdCBzb3VuZHNjYXBlICpzc2NhcGU7CiAJaW50IHJldDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlzc2NhcGUgPSBnZXRfY2FyZF9zb3VuZHNjYXBlKGNhcmQpOwogCXNzY2FwZS0+dHlwZSA9IFNTQ0FQRTsKQEAgLTE0NjIsMTAgKzEzNDksMTAgQEAKIAkgKiBDcmVhdGUgYSBuZXcgQUxTQSBzb3VuZCBjYXJkIGVudHJ5LCBpbiBhbnRpY2lwYXRpb24KIAkgKiBvZiBkZXRlY3Rpbmcgb3VyIGhhcmR3YXJlIC4uLgogCSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlzc2NhcGUgPSBnZXRfY2FyZF9zb3VuZHNjYXBlKGNhcmQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwppbmRleCA0YzA5NWJjLi5hMzRhZTdiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKQEAgLTMzOCwxNSArMzM4LDE2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXNuZF93YXZlZnJvbnRfY2FyZF90ICphY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyAoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgIHNpemVvZihzbmRfd2F2ZWZyb250X2NhcmRfdCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfd2F2ZWZyb250X2NhcmRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWFjYXJkLT53YXZlZnJvbnQuaXJxID0gLTE7CkBAIC0zNTcsNyArMzU4LDggQEAKIAlhY2FyZC0+d2F2ZWZyb250LmNhcmQgPSBjYXJkOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF93YXZlZnJvbnRfZnJlZTsKIAotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC01NTEsMTEgKzU1MywxMSBAQAogCQlyZXR1cm4gMDsKICNlbmRpZgogCWlmIChjczQyMzJfcGNtX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50aygic3BlY2lmeSBDUzQyMzIgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNwZWNpZnkgQ1M0MjMyIHBvcnRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGljczIxMTVfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IElDUzIxMTUgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNwZWNpZnkgSUNTMjExNSBwb3J0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtNTY3LDkgKzU2OSw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF93YXZlZnJvbnRfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC02MTYsOSArNjE4LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmIChzbmRfd2F2ZWZyb250X3BucCAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpIDwgMCkgewogCQlpZiAoY3M0MjMyX3BjbV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYwppbmRleCA0YzQxMDgyLi5iZWIzMTJjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKQEAgLTYzMyw3ICs2MzMsNyBAQAogCQl3YnVmWzFdID0gaSA+PiA3OwogCiAJCWlmIChzbmRfd2F2ZWZyb250X2NtZCAoZGV2LCBXRkNfSURFTlRJRllfU0FNUExFX1RZUEUsIHJidWYsIHdidWYpKSB7Ci0JCQlzbmRfcHJpbnRrKCJjYW5ub3QgaWRlbnRpZnkgc2FtcGxlICIKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJjYW5ub3QgaWRlbnRpZnkgc2FtcGxlICIKIAkJCQkgICAidHlwZSBvZiBzbG90ICVkXG4iLCBpKTsKIAkJCWRldi0+c2FtcGxlX3N0YXR1c1tpXSA9IFdGX1NUX0VNUFRZOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCmluZGV4IDNkNmM1ZjIuLjVkMmJhMWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC0xODEsMjUgKzE4MSw2IEBACiAJCXVkZWxheSgxMDApOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfd3NzX291dG0oc3RydWN0IHNuZF93c3MgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLAotCQkJICAgIHVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBjaGFyIHRtcCA9IChjaGlwLT5pbWFnZVtyZWddICYgbWFzaykgfCB2YWx1ZTsKLQotCXNuZF93c3Nfd2FpdChjaGlwKTsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCi0JaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJvdXRtOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKLSNlbmRpZgotCWNoaXAtPmltYWdlW3JlZ10gPSB0bXA7Ci0JaWYgKCFjaGlwLT5jYWxpYnJhdGVfbXV0ZSkgewotCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwotCQl3bWIoKTsKLQkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB0bXApOwotCQltYigpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgc25kX3dzc19kb3V0KHN0cnVjdCBzbmRfd3NzICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewpAQCAtMjE5LDcgKzIwMCw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAib3V0OiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICIKKwkJCSAgICItIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CiAjZW5kaWYKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdmFsdWUpOwpAQCAtMjM1LDcgKzIxNyw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoImluOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleFxuIiwgcmVnKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbjogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAiCisJCQkgICAiLSByZWcgPSAweCV4XG4iLCByZWcpOwogI2VuZGlmCiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKIAltYigpOwpAQCAtMjUyLDcgKzIzNSw3IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB2YWwpOwogCWNoaXAtPmVpbWFnZVtDUzQyMzZfUkVHKHJlZyldID0gdmFsOwogI2lmIDAKLQlwcmludGsoImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CiAjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9leHRfb3V0KTsKQEAgLTI2OCw3ICsyNTEsOCBAQAogCXsKIAkJdW5zaWduZWQgY2hhciByZXM7CiAJCXJlcyA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUcpKTsKLQkJcHJpbnRrKCJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLAorCQkgICAgICAgcmVnLCByZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMzk0LDEzICszNzgsMTYgQEAKIAlzbmRfd3NzX3dhaXQoY2hpcCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJtY2VfdXAgLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIik7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAljaGlwLT5tY2VfYml0IHw9IENTNDIzMV9NQ0U7CiAJdGltZW91dCA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJtY2VfdXAgWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfdXAgWzB4JWx4XTogIgorCQkJICAgInNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQpOwogCWlmICghKHRpbWVvdXQgJiBDUzQyMzFfTUNFKSkKIAkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLAogCQkJIGNoaXAtPm1jZV9iaXQgfCAodGltZW91dCAmIDB4MWYpKTsKQEAgLTQxOSw3ICs0MDYsOSBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XSAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLCAobG9uZylDUzQyMzFQKFJFR1NFTCkpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1jZV9kb3duIFsweCVseF0gLSAiCisJCQkgICAiYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIsCisJCQkgICAobG9uZylDUzQyMzFQKFJFR1NFTCkpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJY2hpcC0+bWNlX2JpdCAmPSB+Q1M0MjMxX01DRTsKQEAgLTQyNyw3ICs0MTYsOSBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfZG93biBbMHglbHhdOiAiCisJCQkgICAic2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLAorCQkJICAgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fCAhKGNoaXAtPmhhcmR3YXJlICYgaHdfbWFzaykpCiAJCXJldHVybjsKIApAQCAtNTY1LDcgKzU1Niw3IEBACiAJaWYgKGNoYW5uZWxzID4gMSkKIAkJcmZvcm1hdCB8PSBDUzQyMzFfU1RFUkVPOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJnZXRfZm9ybWF0OiAweCV4IChtb2RlPTB4JXgpXG4iLCBmb3JtYXQsIG1vZGUpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZ2V0X2Zvcm1hdDogMHgleCAobW9kZT0weCV4KVxuIiwgZm9ybWF0LCBtb2RlKTsKICNlbmRpZgogCXJldHVybiByZm9ybWF0OwogfQpAQCAtNTg3LDcgKzU3OCwxNSBAQAogCQkJICAgICBjaGlwLT5pbWFnZVtDUzQyMzFfUklHSFRfSU5QVVRdKTsKIAkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MT09QQkFDSywKIAkJCSAgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX0xPT1BCQUNLXSk7CisJfSBlbHNlIHsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MRUZUX0lOUFVULAorCQkJICAgICAwKTsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9SSUdIVF9JTlBVVCwKKwkJCSAgICAgMCk7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTE9PUEJBQ0ssCisJCQkgICAgIDB4ZmQpOwogCX0KKwogCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfQVVYMV9MRUZUX0lOUFVULAogCQkgICAgIG11dGUgfCBjaGlwLT5pbWFnZVtDUzQyMzFfQVVYMV9MRUZUX0lOUFVUXSk7CiAJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULApAQCAtNjMwLDcgKzYyOSw2IEBACiAJaW50IGZ1bGxfY2FsaWIgPSAxOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+bWNlX211dGV4KTsKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwogCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQ1M0MjMxQSB8fAogCSAgICAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjMyX01BU0spKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtNjQ2LDYgKzY0NCwyNCBAQAogCQkJZnVsbF9jYWxpYiA9IDA7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19BRDE4NDUpIHsKKwkJdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwkJLyoKKwkJICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9QTEFZQktfRk9STUFULCAocGRmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC02NjMsNyArNjc5LDYgQEAKIAkJCXVkZWxheSgxMDApOwkvKiB0aGlzIHNlZW1zIHRvIGhlbHAgKi8KIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTY3NSw3ICs2OTAsNiBAQAogCWludCBmdWxsX2NhbGliID0gMTsKIAogCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0NTNDIzMUEgfHwKIAkgICAgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzMl9NQVNLKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTY5MCw2ICs3MDQsMjQgQEAKIAkJCWZ1bGxfY2FsaWIgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQUQxODQ1KSB7CisJCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJCS8qCisJCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBjYXB0dXJlIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9SRUNfRk9STUFULCAoY2RmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC03MTQsNyArNzQ2LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTc3MSwxMCArODAyLDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICgxKVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoMSlcbiIpOwogI2VuZGlmCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC03ODksMTggKzgyMSwyMCBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMilcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDIpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICY9IH5DUzQyMzFfQVVUT0NBTElCOworCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9JRkFDRV9DVFJMLCBjaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0pOwogCXNuZF93c3Nfb3V0KGNoaXAsCiAJCSAgICBDUzQyMzFfQUxUX0ZFQVRVUkVfMSwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMykgLSBhZmVpID0gMHgleFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICgzKSAtIGFmZWkgPSAweCV4XG4iLAogCQkgICBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0pOwogI2VuZGlmCiAKQEAgLTgxNyw3ICs4NTEsNyBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoNClcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDQpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC04MjcsOSArODYxLDEwIEBACiAJCQkgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX1JFQ19GT1JNQVRdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CisJc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICg1KVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoNSlcbiIpOwogI2VuZGlmCiB9CiAKQEAgLTg4NSw4ICs5MjAsNiBAQAogCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm47CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7Ci0KIAkvKiBkaXNhYmxlIElSUSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmICghKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSkKQEAgLTkxOSw4ICs5NTIsNiBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoU1RBVFVTKSwgMCk7CS8qIGNsZWFyIElSUSAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwotCiAJY2hpcC0+bW9kZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIH0KQEAgLTExMTMsNyArMTE0NCw3IEBACiAJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKQogCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFNUQVRVUyksIDApOwogCWVsc2UKLQkJc25kX3dzc19vdXRtKGNoaXAsIENTNDIzMV9JUlFfU1RBVFVTLCBzdGF0dXMsIDApOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUywgc3RhdHVzKTsKIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEyNzgsNyArMTMwOSw4IEBACiAJCX0gZWxzZSBpZiAocmV2ID09IDB4MDMpIHsKIAkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzNkI7CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXhcbiIsIHJldik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgInVua25vd24gQ1MgY2hpcCB3aXRoIHZlcnNpb24gMHgleFxuIiwgcmV2KTsKIAkJCXJldHVybiAtRU5PREVWOwkJLyogdW5rbm93biBDUzQyMzEgY2hpcD8gKi8KIAkJfQogCX0KQEAgLTEzMTQsNiArMTM0NiwxMCBAQAogCQljaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMl0gPQogCQkJY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0lOVEVSV0FWRSA/IDB4YzIgOiAweDAxOwogCX0KKwkvKiBlbmFibGUgZmluZSBncmFpbmVkIGZyZXF1ZW5jeSBzZWxlY3Rpb24gKi8KKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0FEMTg0NSkKKwkJY2hpcC0+aW1hZ2VbQUQxODQ1X1BXUl9ET1dOXSA9IDg7CisKIAlwdHIgPSAodW5zaWduZWQgY2hhciAqKSAmY2hpcC0+aW1hZ2U7CiAJcmVnbnVtID0gKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSA/IDE2IDogMzI7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKQEAgLTEzNDIsNyArMTM3OCwxMCBAQAogCQkJCWNhc2UgNjoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzUgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzUgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MGIpIHsJLyogQ1M0MjM2L0IgKi8KIAkJCQlzd2l0Y2ggKGlkID4+IDUpIHsKQEAgLTEzNTMsNyArMTM5MiwxMCBAQAogCQkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzZCOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzNiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzNiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOCkgewkvKiBDUzQyMzdCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM3QjsKQEAgLTEzNjQsNyArMTQwNiwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzdCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM3QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOSkgewkvKiBDUzQyMzhCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM4QjsKQEAgLTEzNzQsNyArMTQxOSwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzhCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM4QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgxZSkgewkvKiBDUzQyMzkgKi8KIAkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzk7CkBAIC0xMzg0LDEwICsxNDMyLDE1IEBACiAJCQkJY2FzZSA2OgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzOSBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzOSBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwICIKKwkJCQkJICAgIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE2MTgsNyArMTY3MSw4IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJkb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gIgorCQkJICAgIi0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fAogCSAgICAhKGNoaXAtPmhhcmR3YXJlICYgKFdTU19IV19DUzQyMzFfTUFTSyB8IFdTU19IV19DUzQyMzJfTUFTSykpKSB7CiAJCXJldHVybjsKQEAgLTE2MjgsNyArMTY4Miw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBpbnQgc25kX3dzc19mcmVlKHN0cnVjdCBzbmRfd3NzICpjaGlwKQoraW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCkKIHsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19jcG9ydCk7CkBAIC0xNjUxLDYgKzE3MDUsNyBAQAogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChzbmRfd3NzX2ZyZWUpOwogCiBzdGF0aWMgaW50IHNuZF93c3NfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTE4MjAsNyArMTg3NSw4IEBACiAjaWYgMAogCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzJfTUFTSykgewogCQlpZiAoY2hpcC0+cmVzX2Nwb3J0ID09IE5VTEwpCi0JCQlzbmRfcHJpbnRrKCJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSBub3QgYWNjZXNzaWJsZVxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSAiCisJCQkJICAgIm5vdCBhY2Nlc3NpYmxlXG4iKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9hdTF4MDAuYyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKaW5kZXggMTg4MWNlYy4uM2U3NjNkNiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9hdTF4MDAuYworKysgYi9zb3VuZC9taXBzL2F1MXgwMC5jCkBAIC02MzYsOSArNjM2LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfYXUxMDAwICphdTEwMDA7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCAiQUM5NyIsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoLTEsICJBQzk3IiwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfYXUxMDAwX2ZyZWU7CiAJYXUxMDAwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpAQCAtNjc4LDcgKzY3OSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpbnRrKCBLRVJOX0lORk8gIkFMU0EgQUM5NzogRHJpdmVyIEluaXRpYWxpemVkXG4iICk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQUxTQSBBQzk3OiBEcml2ZXIgSW5pdGlhbGl6ZWRcbiIpOwogCWF1MTAwMF9jYXJkID0gY2FyZDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvaGFsMi5jIGIvc291bmQvbWlwcy9oYWwyLmMKaW5kZXggZGI0OTViZS4uYzUyNjkxYyAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9oYWwyLmMKKysrIGIvc291bmQvbWlwcy9oYWwyLmMKQEAgLTg3OCw5ICs4NzgsOSBAQAogCXN0cnVjdCBzbmRfaGFsMiAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gaGFsMl9jcmVhdGUoY2FyZCwgJmNoaXApOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IDRjNjM1MDQuLjY2ZjNiNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC05MzYsOSArOTM2LDkgQEAKIAlzdHJ1Y3Qgc25kX3NnaW8yYXVkaW8gKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9zZ2lvMmF1ZGlvX2NyZWF0ZShjYXJkLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4NDguYyBiL3NvdW5kL29zcy9hZDE4NDguYwppbmRleCA3Y2Y5OTEzLi5kMTJiZDk4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODQ4LmMKKysrIGIvc291bmQvb3NzL2FkMTg0OC5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAl3aGlsZSAodGltZW91dCA+IDAgJiYgKGFkX3JlYWQoZGV2YywgMTEpICYgMHgyMCkpCiAJCXRpbWVvdXQtLTsKIAlpZiAoYWRfcmVhZChkZXZjLCAxMSkgJiAweDIwKQotCQlpZiAoIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1KSB8fCAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpKQorCQlpZiAoKGRldmMtPm1vZGVsICE9IE1EXzE4NDUpICYmIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZDE4NDg6IEF1dG8gY2FsaWJyYXRpb24gdGltZWQgb3V0KDMpLlxuIik7CiB9CiAKQEAgLTIxMDcsNyArMjEwNyw3IEBACiAJc3dpdGNoIChjbWQpCiAJewogCQljYXNlIEFEMTg0OF9TRVRfWFRBTDoJLyogQ2hhbmdlIGNsb2NrIGZyZXF1ZW5jeSBvZiBBRDE4NDUgKG9ubHkgKSAqLwotCQkJaWYgKGRldmMtPm1vZGVsICE9IE1EXzE4NDUgfHwgZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpCisJCQlpZiAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSAmJiBkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZjLT5sb2NrLGZsYWdzKTsKIAkJCWFkX2VudGVyX01DRShkZXZjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKaW5kZXggODFlMWY0NC4uNDE5MWFjYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKKysrIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKQEAgLTE2MjcsNyArMTYyNyw5IEBACiAJCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdWRpby5jIGIvc291bmQvb3NzL2F1ZGlvLmMKaW5kZXggODliZDI3YS4uYjY5YzA1YiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL2F1ZGlvLmMKQEAgLTQzMyw3ICs0MzMsOSBAQAogCQkJcmV0dXJuIGRtYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKIAkJCiAJCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hYnVmLmMgYi9zb3VuZC9vc3MvZG1hYnVmLmMKaW5kZXggMWU5MGQ3Ni4uMWJmY2Y3ZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYWJ1Zi5jCisrKyBiL3NvdW5kL29zcy9kbWFidWYuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlETUFidWZfbGF1bmNoX291dHB1dChkZXYsIGRtYXApOwogCQlhZGV2LT5kbWFwX291dC0+ZmxhZ3MgfD0gRE1BX1NZTkNJTkc7CiAJCWFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9IDA7Ci0JCXdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgbisrIDw9IGFkZXYtPmRtYXBfb3V0LT5uYnVmcyAmJiAKKwkJd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiBuKysgPCBhZGV2LT5kbWFwX291dC0+bmJ1ZnMgJiYKIAkJICAgICAgIGFkZXYtPmRtYXBfb3V0LT5xbGVuICYmIGFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9PSAwKSB7CiAJCQlsb25nIHQgPSBkbWFidWZfdGltZW91dChkbWFwKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYXAtPmxvY2ssZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwppbmRleCA1N2Q5ZjE1Li4xZjQ3NzQxIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwpAQCAtODQ3LDIzICs4NDcsMjMgQEAKIAkgICBvZiBldmVudHMuIFNvIGFsbCB3ZSBuZWVkIHRvIGtlZXAgdGhlIG11c2ljIHBsYXlpbmcgaXMKIAkgICB0byBwcm92aWRlIHRoZSBzb3VuZCBoYXJkd2FyZSB3aXRoIG5ldyBkYXRhIHVwb24KIAkgICBhbiBpbnRlcnJ1cHQgZnJvbSB0aW1lciBBLiAqLwotCW1mcC50aW1fY3RfYSA9IDA7CS8qICsrcm9tYW46IFN0b3AgdGltZXIgYmVmb3JlIHByb2dyYW1taW5nISAqLwotCW1mcC50aW1fZHRfYSA9IDE7CS8qIENhdXNlIGludGVycnVwdCBhZnRlciBmaXJzdCBldmVudC4gKi8KLQltZnAudGltX2N0X2EgPSA4OwkvKiBUdXJuIG9uIGV2ZW50IGNvdW50aW5nLiAqLworCXN0X21mcC50aW1fY3RfYSA9IDA7CS8qICsrcm9tYW46IFN0b3AgdGltZXIgYmVmb3JlIHByb2dyYW1taW5nISAqLworCXN0X21mcC50aW1fZHRfYSA9IDE7CS8qIENhdXNlIGludGVycnVwdCBhZnRlciBmaXJzdCBldmVudC4gKi8KKwlzdF9tZnAudGltX2N0X2EgPSA4OwkvKiBUdXJuIG9uIGV2ZW50IGNvdW50aW5nLiAqLwogCS8qIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyLiAqLwogCWlmIChyZXF1ZXN0X2lycShJUlFfTUZQX1RJTUEsIEF0YUludGVycnVwdCwgSVJRX1RZUEVfU0xPVywgIkRNQSBzb3VuZCIsCiAJCQlBdGFJbnRlcnJ1cHQpKQogCQlyZXR1cm4gMDsKLQltZnAuaW50X2VuX2EgfD0gMHgyMDsJLyogVHVybiBpbnRlcnJ1cHQgb24uICovCi0JbWZwLmludF9ta19hIHw9IDB4MjA7CisJc3RfbWZwLmludF9lbl9hIHw9IDB4MjA7CS8qIFR1cm4gaW50ZXJydXB0IG9uLiAqLworCXN0X21mcC5pbnRfbWtfYSB8PSAweDIwOwogCXJldHVybiAxOwogfQogCiAjaWZkZWYgTU9EVUxFCiBzdGF0aWMgdm9pZCBBdGFJcnFDbGVhblVwKHZvaWQpCiB7Ci0JbWZwLnRpbV9jdF9hID0gMDsJLyogc3RvcCB0aW1lciAqLwotCW1mcC5pbnRfZW5fYSAmPSB+MHgyMDsJLyogdHVybiBpbnRlcnJ1cHQgb2ZmICovCisJc3RfbWZwLnRpbV9jdF9hID0gMDsJCS8qIHN0b3AgdGltZXIgKi8KKwlzdF9tZnAuaW50X2VuX2EgJj0gfjB4MjA7CS8qIHR1cm4gaW50ZXJydXB0IG9mZiAqLwogCWZyZWVfaXJxKElSUV9NRlBfVElNQSwgQXRhSW50ZXJydXB0KTsKIH0KICNlbmRpZiAvKiBNT0RVTEUgKi8KQEAgLTE1MjQsNyArMTUyNCw3IEBACiAJLnNwZWVkCT0gODAwMAogfSA7CiAKLXN0YXRpYyBNQUNISU5FIG1hY2hUVCA9IHsKK3N0YXRpYyBfX2luaXRkYXRhIE1BQ0hJTkUgbWFjaFRUID0gewogCS5uYW1lCQk9ICJBdGFyaSIsCiAJLm5hbWUyCQk9ICJUVCIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtMTU1Myw3ICsxNTUzLDcgQEAKIAkuY2FwYWJpbGl0aWVzCT0gIERTUF9DQVBfQkFUQ0gJLyogQXMgcGVyIFNORENUTF9EU1BfR0VUQ0FQUyAqLwogfTsKIAotc3RhdGljIE1BQ0hJTkUgbWFjaEZhbGNvbiA9IHsKK3N0YXRpYyBfX2luaXRkYXRhIE1BQ0hJTkUgbWFjaEZhbGNvbiA9IHsKIAkubmFtZQkJPSAiQXRhcmkiLAogCS5uYW1lMgkJPSAiRkFMQ09OIiwKIAkuZG1hX2FsbG9jCT0gQXRhQWxsb2MsCkBAIC0xNTk5LDcgKzE1OTksNyBAQAogCQlpc19mYWxjb24gPSAwOwogCSAgICB9IGVsc2UKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JICAgIGlmICgobWZwLmludF9lbl9hICYgbWZwLmludF9ta19hICYgMHgyMCkgPT0gMCkKKwkgICAgaWYgKChzdF9tZnAuaW50X2VuX2EgJiBzdF9tZnAuaW50X21rX2EgJiAweDIwKSA9PSAwKQogCQlyZXR1cm4gZG1hc291bmRfaW5pdCgpOwogCSAgICBlbHNlIHsKIAkJcHJpbnRrKCJETUEgc291bmQgZHJpdmVyOiBUaW1lciBBIGludGVycnVwdCBhbHJlYWR5IGluIHVzZVxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvcGFzMl9jYXJkLmMgYi9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKaW5kZXggMjVmM2EyMi4uN2YzNzdlYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3BhczJfY2FyZC5jCisrKyBiL3NvdW5kL29zcy9wYXMyX2NhcmQuYwpAQCAtMTU2LDkgKzE1Niw3IEBACiAJCQkJCQkgKiAweDgwCiAJCQkJCQkgKi8gLCAweEI4OCk7CiAKLQlwYXNfd3JpdGUoMHg4MAotCQkgIHwgam95c3RpY2s/MHg0MDowCi0JCSAgLDB4RjM4OCk7CisJcGFzX3dyaXRlKDB4ODAgfCAoam95c3RpY2sgPyAweDQwIDogMCksIDB4RjM4OCk7CiAKIAlpZiAocGFzX2lycSA8IDAgfHwgcGFzX2lycSA+IDE1KQogCXsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wc3MuYyBiL3NvdW5kL29zcy9wc3MuYwppbmRleCAxNmVkMDY5Li4xNjUxN2E1IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcHNzLmMKKysrIGIvc291bmQvb3NzL3Bzcy5jCkBAIC00NTcsMTAgKzQ1Nyw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNldF92b2x1bWVfbW9ubyh1bnNpZ25lZCBfX3VzZXIgKnAsIGludCAqYWxlZnQpCitzdGF0aWMgaW50IHNldF92b2x1bWVfbW9ubyh1bnNpZ25lZCBfX3VzZXIgKnAsIHVuc2lnbmVkIGludCAqYWxlZnQpCiB7Ci0JaW50IGxlZnQ7Ci0JdW5zaWduZWQgdm9sdW1lOworCXVuc2lnbmVkIGludCBsZWZ0LCB2b2x1bWU7CiAJaWYgKGdldF91c2VyKHZvbHVtZSwgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCQpAQCAtNDcxLDEwICs0NzAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfdm9sdW1lX3N0ZXJlbyh1bnNpZ25lZCBfX3VzZXIgKnAsIGludCAqYWxlZnQsIGludCAqYXJpZ2h0KQorc3RhdGljIGludCBzZXRfdm9sdW1lX3N0ZXJlbyh1bnNpZ25lZCBfX3VzZXIgKnAsCisJCQkgICAgIHVuc2lnbmVkIGludCAqYWxlZnQsCisJCQkgICAgIHVuc2lnbmVkIGludCAqYXJpZ2h0KQogewotCWludCBsZWZ0LCByaWdodDsKLQl1bnNpZ25lZCB2b2x1bWU7CisJdW5zaWduZWQgaW50IGxlZnQsIHJpZ2h0LCB2b2x1bWU7CiAJaWYgKGdldF91c2VyKHZvbHVtZSwgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMgYi9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKaW5kZXggNWMyMTVmNy4uYzc5ODc0NiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NlcXVlbmNlci5jCisrKyBiL3NvdW5kL29zcy9zZXF1ZW5jZXIuYwpAQCAtMjEyLDcgKzIxMiw2IEBACiB7CiAJdW5zaWduZWQgY2hhciBldmVudF9yZWNbRVZfU1pdLCBldl9jb2RlOwogCWludCBwID0gMCwgYywgZXZfc2l6ZTsKLQlpbnQgZXJyOwogCWludCBtb2RlID0gdHJhbnNsYXRlX21vZGUoZmlsZSk7CiAKIAlkZXYgPSBkZXYgPj4gNDsKQEAgLTI4NSw3ICsyODQsNyBAQAogCQl7CiAJCQlpZiAoIW1pZGlfb3BlbmVkW2V2ZW50X3JlY1syXV0pCiAJCQl7Ci0JCQkJaW50IG1vZGU7CisJCQkJaW50IGVyciwgbW9kZTsKIAkJCQlpbnQgZGV2ID0gZXZlbnRfcmVjWzJdOwogCiAJCQkJaWYgKGRldiA+PSBtYXhfbWlkaWRldiB8fCBtaWRpX2RldnNbZGV2XT09TlVMTCkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwppbmRleCBlNWQ0MjM5Li43OGNmYjY2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCkBAIC0xMzUsNyArMTM1LDkgQEAKIAkJcmV0dXJuIHB1dF91c2VyKEFGTVRfVTgsIChpbnQgKilhcmcpOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwppbmRleCA0MTU2MmVjLi4xZWRhYjdiIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCisrKyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKQEAgLTIyMDAsNyArMjIwMCw5IEBACiAJCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92d3NuZC5jIGIvc291bmQvb3NzL3Z3c25kLmMKaW5kZXggNzhiOGFjYy4uMTg3ZjcyNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3Z3c25kLmMKKysrIGIvc291bmQvb3NzL3Z3c25kLmMKQEAgLTI2NzMsNyArMjY3Myw5IEBACiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CS8qIF9TSU8gICgnUCcsMTQpICovCiAJCURCR1goIlNORENUTF9EU1BfTk9OQkxPQ0tcbiIpOworCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgkJLyogX1NJTyAgKCdQJywgMCkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCmluZGV4IDQxZjg3MGYuLjYwNTVmZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKKysrIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwpAQCAtOTc1LDkgKzk3NSw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfaGFybW9ueSAqaDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9oYXJtb255X2NyZWF0ZShjYXJkLCBwYWRldiwgJmgpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCA4MmI5YmRkLi5jYTI1ZTYxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNDAwLDYgKzQwMCwyNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2RqCiAKK2NvbmZpZyBTTkRfSU5ESUdPSU9YCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBJT3giCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gSW5kaWdvIElPeC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2lveAorCitjb25maWcgU05EX0lORElHT0RKWAorCXRyaXN0YXRlICIoRWNob2F1ZGlvKSBJbmRpZ28gREp4IgorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRWNob2F1ZGlvIEluZGlnbyBESnguCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbmRpZ29kangKKwogY29uZmlnIFNORF9FTVUxMEsxCiAJdHJpc3RhdGUgIkVtdTEwazEgKFNCIExpdmUhLCBBdWRpZ3ksIEUtbXUgQVBTKSIKIAlzZWxlY3QgRldfTE9BREVSCkBAIC03NDQsNyArNzY0LDggQEAKIAlzZWxlY3QgU05EX09YWUdFTl9MSUIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyIGFuZCBEMlguCisJICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIGFuZAorCSAgRXNzZW5jZSBTVFguCiAJICBTdXBwb3J0IGZvciB0aGUgSERBVjEuMyAoRGVsdXhlKSBpcyB2ZXJ5IGV4cGVyaW1lbnRhbC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IGUyYjg0M2IuLjk3ZWUxMjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTE0Myw2ICsxNDMsNyBAQAogeyAweDQzNTI1OTcwLCAweGZmZmZmZmY4LCAiQ1M0MjAyIiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NDM1ODU0MjEsIDB4ZmZmZmZmZmYsICJIU0QxMTI0NiIsCQlOVUxMLAkJTlVMTCB9LAkvLyBTbWFydE1DIElJCiB7IDB4NDM1ODU0MjgsIDB4ZmZmZmZmZjgsICJDeDIwNDY4IiwJCXBhdGNoX2NvbmV4YW50LAlOVUxMIH0sIC8vIFNtYXJ0QU1DIGZpeG1lOiB0aGUgbWFzayBtaWdodCBiZSBkaWZmZXJlbnQKK3sgMHg0MzU4NTQzMCwgMHhmZmZmZmZmZiwgIkN4MjA0NjgtMzEiLAkJcGF0Y2hfY29uZXhhbnQsIE5VTEwgfSwKIHsgMHg0MzU4NTQzMSwgMHhmZmZmZmZmZiwgIkN4MjA1NTEiLCAgICAgICAgICAgcGF0Y2hfY3gyMDU1MSwgIE5VTEwgfSwKIHsgMHg0NDU0MzAzMSwgMHhmZmZmZmZmMCwgIkRUMDM5OCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDQ1NGQ0MzI4LCAweGZmZmZmZmZmLCAiRU0yODAyOCIsCQlOVUxMLAkJTlVMTCB9LCAgLy8gc2FtZSBhcyBUUjI4MDI4PwpAQCAtMzgzLDcgKzM4NCw3IEBACiAKIEVYUE9SVF9TWU1CT0woc25kX2FjOTdfdXBkYXRlX2JpdHMpOwogCi0vKiBubyBsb2NrIHZlcnNpb24gLSBzZWUgc25kX2FjOTdfdXBkYXRfYml0cygpICovCisvKiBubyBsb2NrIHZlcnNpb24gLSBzZWUgc25kX2FjOTdfdXBkYXRlX2JpdHMoKSAqLwogaW50IHNuZF9hYzk3X3VwZGF0ZV9iaXRzX25vbG9jayhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKIAkJCQl1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKIHsKQEAgLTE2NDMsNyArMTY0NCwxMCBAQAogewogCWludCBlcnIsIGlkeDsKIAotCS8vcHJpbnRrKCJBQzk3X0dQSU9fQ0ZHID0gJXhcbiIsc25kX2FjOTdfcmVhZChhYzk3LEFDOTdfR1BJT19DRkcpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJBQzk3X0dQSU9fQ0ZHID0gJXhcbiIsCisJICAgICAgIHNuZF9hYzk3X3JlYWQoYWM5NyxBQzk3X0dQSU9fQ0ZHKSk7CisJKi8KIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X0dQSU9fQ0ZHLCAweGZmZmYgJiB+KEFDOTdfR1BJT19MSU5FMV9PSCkpOwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19QT0xBUklUWSwgMHhmZmZmICYgfihBQzk3X0dQSU9fTElORTFfT0gpKTsKIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X0dQSU9fU1RJQ0tZLCAweGZmZmYpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wcm9jLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYwppbmRleCAwNjBlYTU5Li43M2IxN2Q1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYwpAQCAtMTI1LDYgKzEyNSw4IEBACiAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBDSSBTdWJzeXMgRGV2aWNlOiAweCUwNHhcblxuIiwKICAgICAgICAgICAgICAgICAgICAgYWM5Ny0+c3Vic3lzdGVtX2RldmljZSk7CiAKKwlzbmRfaXByaW50ZihidWZmZXIsICJGbGFnczogJXhcbiIsIGFjOTctPmZsYWdzKTsKKwogCWlmICgoYWM5Ny0+ZXh0X2lkICYgQUM5N19FSV9SRVZfTUFTSykgPj0gQUM5N19FSV9SRVZfMjMpIHsKIAkJdmFsID0gc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X0lOVF9QQUdJTkcpOwogCQlzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCBBQzk3X0lOVF9QQUdJTkcsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWQxODg5LmMgYi9zb3VuZC9wY2kvYWQxODg5LmMKaW5kZXggYTdmMzhlNi4uZDFmMjQyYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FkMTg4OS5jCisrKyBiL3NvdW5kL3BjaS9hZDE4ODkuYwpAQCAtOTk1LDEwICs5OTUsMTAgQEAKIAl9CiAKIAkvKiAoMikgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwgMCk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCS8qIFhYWCBSRVZJU0lUOiB3ZSBjYW4gcHJvYmFibHkgYWxsb2NhdGUgY2hpcCBpbiB0aGlzIGNhbGwgKi8KLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBRDE4ODkiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQW5hbG9nIERldmljZXMgQUQxODg5Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMgYi9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMKaW5kZXggMGY4MTlkZC4uZmQxMzVlMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYwpAQCAtNTEsNyArNTEsOCBAQAogCWludCBpZHg7CiAJCiAJZm9yIChpZHggPSAwOyBpZHggPCAweDE5OyBpZHgrKykKLQkJcHJpbnRrKCJhazQ1MzEgMHgleDogMHgleFxuIiwgaWR4LCBhazQ1MzEtPnJlZ3NbaWR4XSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJhazQ1MzEgMHgleDogMHgleFxuIiwKKwkJICAgICAgIGlkeCwgYWs0NTMxLT5yZWdzW2lkeF0pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCAxYTBmZDY1Li40ZWRmMjcwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yMTQyLDcgKzIxNDIsNyBAQAogewogCWludCBlcnI7CiAKLQlzbmRfYWxpX3ByaW50aygicmVzb3VjZXMgYWxsb2NhdGlvbiAuLi5cbiIpOworCXNuZF9hbGlfcHJpbnRrKCJyZXNvdXJjZXMgYWxsb2NhdGlvbiAuLi5cbiIpOwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoY29kZWMtPnBjaSwgIkFMSSA1NDUxIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0yMTU0LDcgKzIxNTQsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAljb2RlYy0+aXJxID0gY29kZWMtPnBjaS0+aXJxOwotCXNuZF9hbGlfcHJpbnRrKCJyZXNvdWNlcyBhbGxvY2F0ZWQuXG4iKTsKKwlzbmRfYWxpX3ByaW50aygicmVzb3VyY2VzIGFsbG9jYXRlZC5cbiIpOwogCXJldHVybiAwOwogfQogc3RhdGljIGludCBzbmRfYWxpX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCkBAIC0yMzA3LDkgKzIzMDcsOSBAQAogCiAJc25kX2FsaV9wcmludGsoInByb2JlIC4uLlxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9hbGlfY3JlYXRlKGNhcmQsIHBjaSwgcGNtX2NoYW5uZWxzLCBzcGRpZiwgJmNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCA4ZGY2ODI0Li4wMDliNGM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC05MSw3ICs5MSw3IEBACiAjZGVmaW5lIERFQlVHX1BMQVlfUkVDCTAKIAogI2lmIERFQlVHX0NBTExTCi0jZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKSBwcmludGsoS0VSTl9FUlIgIi0tPiAlc1xuIiwgX19mdW5jX18pCiAjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCkgcHJpbnRrKEtFUk5fRVJSICI8LS0gJXNcbiIsIF9fZnVuY19fKQogI2Vsc2UKQEAgLTgxMiwxMCArODEyLDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljaGlwX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCBiYTU3MDA1Li41NDJhMGM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTg4OSwxMiArODg5LDEzIEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaSwgUENJX0NPTU1BTkQsIHdvcmQgfCBQQ0lfQ09NTUFORF9JTyk7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAkKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAKLQkJCSAgICBzaXplb2YoKmFjYXJkKSAvKiBwcml2YXRlX2RhdGE6IGFjYXJkICovKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAKKwkJCSAgICAgIHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8sCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2kpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggMjI2ZmU4Mi4uOWNlODU0OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMTY0NSw5ICsxNjQ1LDkgQEAKIAlzdHJ1Y3QgYXRpaXhwICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBzcGRpZl9hY2xpbmsgPyAiQVRJSVhQIiA6ICJBVElJWFAtU1BETUEiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQVRJIElYUCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDBlNmU1Y2MuLmMzMTM2Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTEyODgsOSArMTI4OCw5IEBACiAJc3RydWN0IGF0aWl4cF9tb2RlbSAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFUSUlYUC1NT0RFTSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBVEkgSVhQIE1vZGVtIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwppbmRleCBhMzZkNGQxLi45ZWMxMjIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKQEAgLTI1MCw5ICsyNTAsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJLy8gKDIpCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvLyAoMykKIAlpZiAoKGVyciA9IHNuZF92b3J0ZXhfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2EzZC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKaW5kZXggNjQ5ODQ5ZS4uZjRhYThmZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKQEAgLTQ2Miw5ICs0NjIsMTAgQEAKIC8qIFJlc2V0IFNpbmdsZSBBM0Qgc291cmNlLiAqLwogc3RhdGljIHZvaWQgYTNkc3JjX1plcm9TdGF0ZShhM2RzcmNfdCAqIGEpCiB7Ci0KLQkvL3ByaW50aygidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsIGEtPnNsaWNlLCBhLT5zb3VyY2UpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsCisJICAgICAgIGEtPnNsaWNlLCBhLT5zb3VyY2UpOworCSovCiAJYTNkc3JjX1NldEF0bW9zU3RhdGUoYSwgMCwgMCwgMCwgMCk7CiAJYTNkc3JjX1NldEhydGZTdGF0ZShhLCBBM2RIcmlyWmVyb3MsIEEzZEhyaXJaZXJvcyk7CiAJYTNkc3JjX1NldEl0ZERsaW5lKGEsIEEzZEl0ZERsaW5lWmVyb3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCmluZGV4IGIwNzBlNTcuLjM5MDZmNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKQEAgLTExMzUsNyArMTEzNSwxMCBAQAogCQkJc25kX3BjbV9zZ2J1Zl9nZXRfYWRkcihkbWEtPnN1YnN0cmVhbSwgMCkpOwogCQlicmVhazsKIAl9Ci0JLy9wcmludGsoInZvcnRleDogY2ZnMCA9IDB4JXhcbnZvcnRleDogY2ZnMT0weCV4XG4iLCBkbWEtPmNmZzAsIGRtYS0+Y2ZnMSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBjZmcwID0gMHgleFxudm9ydGV4OiBjZmcxPTB4JXhcbiIsCisJICAgICAgIGRtYS0+Y2ZnMCwgZG1hLT5jZmcxKTsKKwkqLwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzAgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzApOwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzEgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzEpOwogCkBAIC0xOTU5LDcgKzE5NjIsNyBAQAogCQkJCQkgIEFEQl9DT0RFQ09VVCgwICsgNCkpOwogCQl2b3J0ZXhfY29ubmVjdGlvbl9taXhfYWRiKHZvcnRleCwgZW4sIDB4MTEsIG1peGVyc1szXSwKIAkJCQkJICBBREJfQ09ERUNPVVQoMSArIDQpKTsKLQkJLy9wcmludGsoIlNEQUMgZGV0ZWN0ZWQgIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJTREFDIGRldGVjdGVkICIpOyAqLwogCX0KICNlbHNlCiAJLy8gVXNlIHBsYWluIGRpcmVjdCBvdXRwdXQgdG8gY29kZWMuCkBAIC0yMDEzLDcgKzIwMTYsMTEgQEAKIAkJCQkJcmVzbWFwW3Jlc3R5cGVdIHw9ICgxIDw8IGkpOwogCQkJCWVsc2UKIAkJCQkJdm9ydGV4LT5kbWFfYWRiW2ldLnJlc291cmNlc1tyZXN0eXBlXSB8PSAoMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwgcmVzdHlwZSwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjAyNCw3ICsyMDMxLDExIEBACiAJCWZvciAoaSA9IDA7IGkgPCBxdHk7IGkrKykgewogCQkJaWYgKHJlc21hcFtyZXN0eXBlXSAmICgxIDw8IGkpKSB7CiAJCQkJcmVzbWFwW3Jlc3R5cGVdICY9IH4oMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIGluICVkXG4iLHJlc3R5cGUsIGkpOworCQkJCS8qCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgInZvcnRleDogUmVzTWFuYWdlcjogdHlwZSAlZCBpbiAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjc4OSw3ICsyODAwLDcgQEAKIHsKIAlpbnQgYSwgdGhpc18xOTQ7CiAKLQlpZiAoKGJpdHMgIT0gOCkgfHwgKGJpdHMgIT0gMTYpKQorCWlmICgoYml0cyAhPSA4KSAmJiAoYml0cyAhPSAxNikpCiAJCXJldHVybiAtMTsKIAogCXN3aXRjaCAoZW5jb2QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCmluZGV4IDk3OGI4NTYuLjI4MDVlMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYwpAQCAtMjEzLDM4ICsyMTMsNTkgQEAKIAlzd2l0Y2ggKHJlZykgewogCQkvKiBWb2ljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCiAJY2FzZSAwOgkJLyogcnVubmluZyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1JVTih3dCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUlVOKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUlVOKHd0KSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJLyogcGFyYW0gMCAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwwKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMjoJCS8qIHBhcmFtIDEgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDEpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMSksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDEpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDM6CQkvKiBwYXJhbSAyICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwyKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDIpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAyKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSA0OgkJLyogcGFyYW0gMyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMyksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwzKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMyksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgNjoJCS8qIG11dGUgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfTVVURSh3dCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMHhiOgogCQl7CQkvKiBkZWxheSAqLwotCQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJCSAgICAgICBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJKi8KIAkJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9ERUxBWSh3dCwgMyksIHZhbCk7CiAJCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfREVMQVkod3QsIDIpLCB2YWwpOwogCQkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX0RFTEFZKHd0LCAxKSwgdmFsKTsKQEAgLTI3Miw3ICsyOTMsOSBAQAogCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAJfQotCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgZWN4LCAoaW50KXZhbCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIGVjeCwgKGludCl2YWwpOworCSovCiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIGVjeCwgdmFsKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwppbmRleCAzZjAwZGRmLi44ZWVhMjlmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKKysrIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEF1ZGlvd2VyazIgc291bmRjYXJkLiIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F3Ml9pZHNbXSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9TQUE3MTQ2LCBQQ0lfREVWSUNFX0lEX1NBQTcxNDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJe1BDSV9WRU5ET1JfSURfU0FBNzE0NiwgUENJX0RFVklDRV9JRF9TQUE3MTQ2LCAwLCAwLAogCSAwLCAwLCAwfSwKIAl7MH0KIH07CkBAIC0zNjgsOSArMzY4LDkgQEAKIAl9CiAKIAkvKiAoMikgQ3JlYXRlIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qICgzKSBDcmVhdGUgbWFpbiBjb21wb25lbnQgKi8KIAllcnIgPSBzbmRfYXcyX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDMzMzAwN2MuLmU5ZTliNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMjExLDI1ICsyMTEsMjUgQEAKICNlbmRpZgogCiAjaWYgREVCVUdfTUlYRVIKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnbWl4ZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ21peGVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX1BMQVlfUkVDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19NSVNDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3RpbWVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmd0aW1lcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJndGltZXIoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19HQU1FCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCkBAIC0yMjE2LDkgKzIyMTYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBWkYzMzI4Iik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF6dGVjaCBBWkYzMzI4IChQQ0kxNjgpIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDFhYTFjMDQuLmEyOTkzNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC04ODgsOSArODg4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9idDg3eF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMGU2MjIwNS4uZGY3NTc1NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMjU1LDYgKzI1NSwxNCBAQAogCSAgIC5ncGlvX3R5cGUgPSAyLAogCSAgIC5pMmNfYWRjID0gMSwKIAkgICAuc3BpX2RhYyA9IDEgfSAsCisJLyogR2lnYS1ieXRlIEdBLUcxOTc1WCBtb2JvCisJICogTm92ZWxsIGJuYyMzOTU4MDcKKwkgKi8KKwkvKiBGSVhNRTogdGhlIEdQSU8gYW5kIEkyQyBzZXR0aW5nIGFyZW4ndCB0ZXN0ZWQgd2VsbCAqLworCXsgLnNlcmlhbCA9IDB4MTQ1OGEwMDYsCisJICAubmFtZSA9ICJHaWdhLWJ5dGUgR0EtRzE5NzVYIiwKKwkgIC5ncGlvX3R5cGUgPSAxLAorCSAgLmkyY19hZGMgPSAxIH0sCiAJIC8qIFNodXR0bGUgWFBDIFNEMzFQIHdoaWNoIGhhcyBhbiBvbmJvYXJkIENyZWF0aXZlIExhYnMKIAkgICogU291bmQgQmxhc3RlciBMaXZlISAyNC1iaXQgRUFYCiAJICAqIGhpZ2gtZGVmaW5pdGlvbiA3LjEgYXVkaW8gcHJvY2Vzc29yIi4KQEAgLTQwNCw3ICs0MTIsOSBAQAogCX0KIAogCXRtcCA9IHJlZyA8PCAyNSB8IHZhbHVlIDw8IDE2OwotCS8vIHNuZF9wcmludGsoIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJKi8KIAkvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgSTJDIGNoYW5uZWwgY29udHJvbHMuICovCiAJLyogc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBJMkNfRDAsIDAsIHRtcCk7ICovCiAKQEAgLTQyMiw3ICs0MzIsNyBAQAogCQkvKiBXYWl0IHRpbGwgdGhlIHRyYW5zYWN0aW9uIGVuZHMgKi8KIAkJd2hpbGUgKDEpIHsKIAkJCXN0YXR1cyA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoZW11LCBJMkNfQSwgMCk7Ci0gICAgICAgICAgICAgICAgCS8vc25kX3ByaW50aygiSTJDOnN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOworCQkJLypzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQzpzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsqLwogCQkJdGltZW91dCsrOwogCQkJaWYgKChzdGF0dXMgJiBJMkNfQV9BRENfU1RBUlQpID09IDApCiAJCQkJYnJlYWs7CkBAIC01MjEsNyArNTMxLDEwIEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2UgPSAxOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJKi8KICAgICAgICAgLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfY2EwMTA2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKIAljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNjE0LDcgKzYyNywxMCBAQAogICAgICAgICBjaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAJY2hhbm5lbC0+dXNlID0gMTsKLSAgICAgICAgLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkvKgorICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkqLwogICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9jYTAxMDZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwogICAgICAgICBjaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNzA1LDkgKzcyMSwyMCBAQAogCXUzMiByZWc3MTsKIAlpbnQgaTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCS8qIFJhdGUgY2FuIGJlIHNldCBwZXIgY2hhbm5lbC4gKi8KIAkvKiByZWc0MCBjb250cm9sIGhvc3QgdG8gZmlmbyAqLwogCS8qIHJlZzcxIGNvbnRyb2xzIERBQyByYXRlLiAqLwpAQCAtNzk5LDkgKzgyNiwyMCBAQAogCXUzMiByZWc3MV9zZXQgPSAwOwogCXUzMiByZWc3MTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworICAgICAgICBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIiwKKwkJICAgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLAorCQkgICBlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjZW5kaWYgLyogZGVidWcgKi8KIAkvKiByZWc3MSBjb250cm9scyBBREMgcmF0ZS4gKi8KIAlzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtODQ2LDcgKzg4NCwxNCBAQAogCX0KIAogCi0gICAgICAgIC8vcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJICAgICAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkqLwogCXNuZF9jYTAxMDZfcHRyX3dyaXRlKGVtdSwgMHgxMywgY2hhbm5lbCwgMCk7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0RNQV9BRERSLCBjaGFubmVsLCBydW50aW1lLT5kbWFfYWRkcik7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0JVRkZFUl9TSVpFLCBjaGFubmVsLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpPDwxNik7IC8vIGJ1ZmZlciBzaXplIGluIGJ5dGVzCkBAIC04ODgsMTMgKzkzMywxMyBAQAogCQlydW50aW1lID0gcy0+cnVudGltZTsKIAkJZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJY2hhbm5lbCA9IGVwY20tPmNoYW5uZWxfaWQ7Ci0JCS8qIHNuZF9wcmludGsoImNoYW5uZWw9JWRcbiIsY2hhbm5lbCk7ICovCisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiY2hhbm5lbD0lZFxuIiwgY2hhbm5lbCk7ICovCiAJCWVwY20tPnJ1bm5pbmcgPSBydW5uaW5nOwogCQliYXNpYyB8PSAoMHgxIDw8IGNoYW5uZWwpOwogCQlleHRlbmRlZCB8PSAoMHgxMCA8PCBjaGFubmVsKTsKICAgICAgICAgICAgICAgICBzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogICAgICAgICB9Ci0JLyogc25kX3ByaW50aygiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtOTcyLDggKzEwMTcsMTMgQEAKIAlwdHI9cHRyMjsKICAgICAgICAgaWYgKHB0ciA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTk5NSw4ICsxMDQ1LDEzIEBACiAJcHRyPXB0cjI7CiAgICAgICAgIGlmIChwdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC0xMTgxLDggKzEyMzYsMTIgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAgICAgICAgIHN0YXQ3NiA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgRVhURU5ERURfSU5ULCAwKTsKLQkvL3NuZF9wcmludGsoImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsIHN0YXR1cywgc3RhdDc2KTsKLQkvL3NuZF9wcmludGsoInB0cj0weCUwOHhcbiIsc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBQTEFZQkFDS19QT0lOVEVSLCAwKSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsCisJCSAgIHN0YXR1cywgc3RhdDc2KTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInB0cj0weCUwOHhcbiIsCisJCSAgIHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgUExBWUJBQ0tfUE9JTlRFUiwgMCkpOworCSovCiAgICAgICAgIG1hc2sgPSAweDExOyAvKiAweDEgZm9yIG9uZSBoYWxmLCAweDEwIGZvciB0aGUgb3RoZXIgaGFsZiBwZXJpb2QuICovCiAJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXBjaGFubmVsID0gJihjaGlwLT5wbGF5YmFja19jaGFubmVsc1tpXSk7CkBAIC0xNDcwLDcgKzE1MjksNyBAQAogCQlpbnQgc2l6ZSwgbjsKIAogCQlzaXplID0gQVJSQVlfU0laRShpMmNfYWRjX2luaXQpOwotCQkvKiBzbmRfcHJpbnRrKCJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KIAkJZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykKIAkJCXNuZF9jYTAxMDZfaTJjX3dyaXRlKGNoaXAsIGkyY19hZGNfaW5pdFtuXVswXSwKIAkJCQkJICAgICBpMmNfYWRjX2luaXRbbl1bMV0pOwpAQCAtMTcwNyw5ICsxNzY2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfY2EwMTA2X2NyZWF0ZShkZXYsIGNhcmQsIHBjaSwgJmNoaXApOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IDFhNzRjYTYuLmM3ODk5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTMyNzIsOSArMzI3Miw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCQogCXN3aXRjaCAocGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczODoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCAxOTJlNzg0Li5mNjI4NmY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC04MzQsNyArODM0LDExIEBACiAJc3RydWN0IGNzNDI4MV9kbWEgKmRtYSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3M0MjgxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCi0JLy8gcHJpbnRrKCJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBqaWZmaWVzKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsCisJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICBqaWZmaWVzKTsKKwkqLwogCXJldHVybiBydW50aW1lLT5idWZmZXJfc2l6ZSAtCiAJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQykgLSAxOwogfQpAQCAtMTkyNSw5ICsxOTI5LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczQyODFfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXAsIGR1YWxfY29kZWNbZGV2XSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKaW5kZXggZTg3NmIzMi4uYzliM2UzZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCkBAIC04OCw5ICs4OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2NzNDZ4eF9jcmVhdGUoY2FyZCwgcGNpLAogCQkJCSAgICAgZXh0ZXJuYWxfYW1wW2Rldl0sIHRoaW5rcGFkW2Rldl0sCiAJCQkJICAgICAmY2hpcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCA4YWIwN2FhLi4xYmU5NmVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJICogIEFDU0RBID0gU3RhdHVzIERhdGEgUmVnaXN0ZXIgPSA0NzRoCiAJICovCiAjaWYgMAotCXByaW50aygiZSkgcmVnID0gMHgleCwgdmFsID0gMHgleCwgQkEwX0FDQ0FEID0gMHgleFxuIiwgcmVnLAorCXByaW50ayhLRVJOX0RFQlVHICJlKSByZWcgPSAweCV4LCB2YWwgPSAweCV4LCBCQTBfQUNDQUQgPSAweCV4XG4iLCByZWcsCiAJCQlzbmRfY3M0Nnh4X3BlZWtCQTAoY2hpcCwgQkEwX0FDU0RBKSwKIAkJCXNuZF9jczQ2eHhfcGVla0JBMChjaGlwLCBCQTBfQUNDQUQpKTsKICNlbmRpZgpAQCAtNDI4LDggKzQyOCw4IEBACiAJfQogICAKIAlpZihzdGF0dXMgJiBTRVJCU1RfV0JTWSkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yIEZJRk8gY29tbWFuZCB0byBjb21wbGV0ZVxuIik7Ci0KKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yICIKKwkJCSAgICJGSUZPIGNvbW1hbmQgdG8gY29tcGxldGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKaW5kZXggMDE4YTdkZS4uNGViNTVhYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKQEAgLTYyLDcgKzYyLDExIEBACiAJdW5zaWduZWQgaW50IGJhbmsgPSByZWcgPj4gMTY7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IHJlZyAmIDB4ZmZmZjsKIAotCS8qaWYgKGJhbmsgPT0gMCkgcHJpbnRrKCJzbmRfY3M0Nnh4X3Bva2U6ICUwNFggLSAlMDhYXG4iLHJlZyA+PiAyLHZhbCk7ICovCisJLyoKKwlpZiAoYmFuayA9PSAwKQorCQlwcmludGsoS0VSTl9ERUJVRyAic25kX2NzNDZ4eF9wb2tlOiAlMDRYIC0gJTA4WFxuIiwKKwkJICAgICAgIHJlZyA+PiAyLHZhbCk7CisJKi8KIAl3cml0ZWwodmFsLCBjaGlwLT5yZWdpb24uaWR4W2JhbmsrMV0ucmVtYXBfYWRkciArIG9mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzAuYyBiL3NvdW5kL3BjaS9jczU1MzAuYwppbmRleCA2ZGVhNWI1Li5kYzQ2NDMyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTMwLmMKKysrIGIvc291bmQvcGNpL2NzNTUzMC5jCkBAIC0yNTgsMTAgKzI1OCwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2NzNTUzMF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggODI2ZTZkZS4uYzg5ZWQxZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M1NTM1YXVkaW9faW50ZXJydXB0LAogCQkJSVJRRl9TSEFSRUQsICJDUzU1MzUgQXVkaW8iLCBjczU1MzVhdSkpIHsKLQkJc25kX3ByaW50aygidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gc25kZmFpbDsKIAl9CkBAIC0zNTMsOSArMzUzLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczU1MzVhdWRpb19jcmVhdGUoY2FyZCwgcGNpLCAmY3M1NTM1YXUpKSA8IDApCiAJCWdvdG8gcHJvYmVmYWlsX291dDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlCmluZGV4IDdiNTc2YWUuLjEzNjFkZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQpAQCAtMTUsNiArMTUsOCBAQAogc25kLWluZGlnby1vYmpzIDo9IGluZGlnby5vCiBzbmQtaW5kaWdvaW8tb2JqcyA6PSBpbmRpZ29pby5vCiBzbmQtaW5kaWdvZGotb2JqcyA6PSBpbmRpZ29kai5vCitzbmQtaW5kaWdvaW94LW9ianMgOj0gaW5kaWdvaW94Lm8KK3NuZC1pbmRpZ29kangtb2JqcyA6PSBpbmRpZ29kangubwogCiBvYmotJChDT05GSUdfU05EX0RBUkxBMjApICs9IHNuZC1kYXJsYTIwLm8KIG9iai0kKENPTkZJR19TTkRfR0lOQTIwKSArPSBzbmQtZ2luYTIwLm8KQEAgLTI4LDMgKzMwLDUgQEAKIG9iai0kKENPTkZJR19TTkRfSU5ESUdPKSArPSBzbmQtaW5kaWdvLm8KIG9iai0kKENPTkZJR19TTkRfSU5ESUdPSU8pICs9IHNuZC1pbmRpZ29pby5vCiBvYmotJChDT05GSUdfU05EX0lORElHT0RKKSArPSBzbmQtaW5kaWdvZGoubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09JT1gpICs9IHNuZC1pbmRpZ29pb3gubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09ESlgpICs9IHNuZC1pbmRpZ29kangubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwppbmRleCA0MTdlMjVhLi41Nzk2N2U1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwpAQCAtNTYsNyArNTYsNyBAQAogCX0KIAogCWNoaXAtPmNvbW1fcGFnZS0+ZTNnX2ZycV9yZWdpc3RlciA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKKwkJY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCA4ZGJjNWM0Li5kYTIwNjVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTk1MCw2ICs5NTAsOCBAQAogCUNvbnRyb2wgaW50ZXJmYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorCiAvKioqKioqKioqKioqKioqKioqKiBQQ00gb3V0cHV0IHZvbHVtZSAqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKQEAgLTEwMDEsMTggKzEwMDMsNiBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotLyogT24gVm1peGVyIGNhcmRzIHRoaXMgb25lIGNvbnRyb2xzIHRoZSBsaW5lLW91dCB2b2x1bWUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19saW5lX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLm5hbWUgPSAiTGluZSBQbGF5YmFjayBWb2x1bWUiLAotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAotCS5pbmZvID0gc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbywKLQkuZ2V0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fZ2V0LAotCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCi0JLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKLX07Ci0jZWxzZQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTAyMiw2ICsxMDEyLDcgQEAKIAkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAogCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCiB9OworCiAjZW5kaWYKIAogCkBAIC0xOTk3LDkgKzE5ODgsOSBAQAogCiAJREVfSU5JVCgoIkVjaG9hdWRpbyBkcml2ZXIgc3RhcnRpbmcuLi5cbiIpKTsKIAlpID0gMDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIApAQCAtMjAzNyw4ICsyMDI4LDYgQEAKIAogI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKIAlzbmRfZWNob192bWl4ZXIuY291bnQgPSBudW1fcGlwZXNfb3V0KGNoaXApICogbnVtX2J1c3Nlc19vdXQoY2hpcCk7Ci0JaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4sIGNoaXApKSkgPCAwKQotCQlnb3RvIGN0bF9lcnJvcjsKIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fdm1peGVyLCBjaGlwKSkpIDwgMCkKIAkJZ290byBjdGxfZXJyb3I7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKaW5kZXggMWM4OGUwNS4uZjk0OTBhZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCkBAIC0xODksNiArMTg5LDkgQEAKICNkZWZpbmUgSU5ESUdPCQkJMHgwMDkwCiAjZGVmaW5lIElORElHT19JTwkJMHgwMGEwCiAjZGVmaW5lIElORElHT19ESgkJMHgwMGIwCisjZGVmaW5lIERDOAkJCTB4MDBjMAorI2RlZmluZSBJTkRJR09fSU9YCQkweDAwZDAKKyNkZWZpbmUgSU5ESUdPX0RKWAkJMHgwMGUwCiAjZGVmaW5lIEVDSE8zRwkJCTB4MDEwMAogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCmluZGV4IGMzNzM2YmIuLmUzMmE3NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYwpAQCAtNDAsOCArNDAsNyBAQAogCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKIAkJcmV0dXJuIC1FSU87CiAKLQljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihFM0dfQVNJQ19OT1RfTE9BREVEKTsKKwljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0gY3B1X3RvX2xlMzIoRTNHX0FTSUNfTk9UX0xPQURFRCk7CiAJY2hpcC0+YXNpY19sb2FkZWQgPSBGQUxTRTsKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1RFU1RfQVNJQyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCmluZGV4IGJlMGUxODEuLjRkZjUxZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCkBAIC05MjYsMTEgKzkyNiwxMSBAQAogCiAJLyogSW5pdCB0aGUgY29tbSBwYWdlICovCiAJY2hpcC0+Y29tbV9wYWdlLT5jb21tX3NpemUgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CisJCWNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CiAJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOwogCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRfZnJlZV9jb3VudCA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX01JRElfT1VUX0ZJRk9fU0laRSk7Ci0JY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoNDQxMDApOworCQljcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIoNDQxMDApOwogCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CiAKIAkvKiBTZXQgbGluZSBsZXZlbHMgc28gd2UgZG9uJ3QgYmxhc3QgYW55IGlucHV0cyBvbiBzdGFydHVwICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCmluZGV4IGUzNTJmM2EuLmNiN2Q3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCkBAIC01NzYsOCArNTc2LDEzIEBACiAjZGVmaW5lIEUzR19BU0lDX05PVF9MT0FERUQJCTB4ZmZmZgogI2RlZmluZSBFM0dfQk9YX1RZUEVfTUFTSwkJMHhmMAogCi0jZGVmaW5lIEVYVF8zR0JPWF9OQwkJCTB4MDEKLSNkZWZpbmUgRVhUXzNHQk9YX05PVF9TRVQJCTB4MDIKKy8qIEluZGlnbyBleHByZXNzIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCisjZGVmaW5lIElORElHT19FWFBSRVNTXzMyMDAwCQkweDAyCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ0MTAwCQkweDAxCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ4MDAwCQkweDAwCisjZGVmaW5lIElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRAkweDEwCisjZGVmaW5lIElORElHT19FWFBSRVNTX1FVQURfU1BFRUQJMHgwNAorI2RlZmluZSBJTkRJR09fRVhQUkVTU19DTE9DS19NQVNLCTB4MTcKIAogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwppbmRleCBkYjZjOTUyLi4zZjFlNzQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwpAQCAtMjA4LDEwICsyMDgsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwppbmRleCBmMDVlMzlmLi4wYjJjZDljIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwpAQCAtNjMsMTggKzYzLDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogYWxsIHZjaGFubmVscyBhcmUgcm91dGVkCi0JdG8gdGhlIHN0ZXJlbyBvdXRwdXQgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYjYyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTMyIGNsb2NrLCBjb250cm9sX3JlZywgb2xkX2NvbnRyb2xfcmVnOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCW9sZF9jb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CisJY29udHJvbF9yZWcgPSBvbGRfY29udHJvbF9yZWcgJiB+SU5ESUdPX0VYUFJFU1NfQ0xPQ0tfTUFTSzsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMzIwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDA7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDgwMDA7CisJCWJyZWFrOworCWNhc2UgNjQwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDB8SU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVEOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ0MTAwfElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180ODAwMHxJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnRyb2xfcmVnIHw9IGNsb2NrOworCWlmIChjb250cm9sX3JlZyAhPSBvbGRfY29udHJvbF9yZWcpIHsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gY3B1X3RvX2xlMzIoY29udHJvbF9yZWcpOworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwkJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfQ0xPQ0tTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIHJvdXRlcyB0aGUgc291bmQgZnJvbSBhIHZpcnR1YWwgY2hhbm5lbCB0byBhIHJlYWwgb3V0cHV0ICovCitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKQoreworCWludCBpbmRleDsKKworCWlmIChzbmRfQlVHX09OKHBpcGUgPj0gbnVtX3BpcGVzX291dChjaGlwKSB8fAorCQkgICAgICAgb3V0cHV0ID49IG51bV9idXNzZXNfb3V0KGNoaXApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJY2hpcC0+dm1peGVyX2dhaW5bb3V0cHV0XVtwaXBlXSA9IGdhaW47CisJaW5kZXggPSBvdXRwdXQgKiBudW1fcGlwZXNfb3V0KGNoaXApICsgcGlwZTsKKwljaGlwLT5jb21tX3BhZ2UtPnZtaXhlcltpbmRleF0gPSBnYWluOworCisJREVfQUNUKCgic2V0X3ZtaXhlcl9nYWluOiBwaXBlICVkLCBvdXQgJWQgPSAlZFxuIiwgcGlwZSwgb3V0cHV0LCBnYWluKSk7CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUZWxsIHRoZSBEU1AgdG8gcmVhZCBhbmQgdXBkYXRlIHZpcnR1YWwgbWl4ZXIgbGV2ZWxzIGluIGNvbW0gcGFnZS4gKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX1ZNSVhFUl9HQUlOKTsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKK30KKworCisKKy8qIFRoZSBJbmRpZ29JTyBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKaW5kZXggOTA3MzBhNS4uMDgzOTI5MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGFuZAotCXZjaGFubmVscyA0LTcgYXJlIHJvdXRlZCB0byByZWFsIGNoYW5uZWxzIDAtNCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MmVmNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0RKWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gREp4IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9OVU0JCTgKKworLyogQnVzIGluZGV4ZXMgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX09VVAkwCS8qIDQgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9PVVQJNAkvKiAwICovCisjZGVmaW5lIEJYX0FOQUxPR19JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfTlVNCQk0CisKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvaW5kaWdvX2RqeF9kc3AuZnciKTsKKworI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCisjZGVmaW5lIEZXX0lORElHT19ESlhfRFNQCTEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJpbmRpZ29fZGp4X2RzcC5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBFMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESngqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gNCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2RqeF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTFmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworc3RhdGljIGludCBzZXRfdm1peGVyX2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IG91dHB1dCwKKwkJCSAgIHUxNiBwaXBlLCBpbnQgZ2Fpbik7CisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBJbmRpZ28gREp4XG4iKSk7CisJaWYgKHNuZF9CVUdfT04oKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgIT0gSU5ESUdPX0RKWCkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKWF9EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwllcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKaW5kZXggYTdlMDllYy4uMDYwNGM4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiBhbGwgdmNoYW5uZWxzIGFyZSByb3V0ZWQKLQl0byB0aGUgc3RlcmVvIG91dHB1dCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViZWUyNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0lPWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gSU94IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMiAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTEwCS8qIDAgKi8KKyNkZWZpbmUgUFhfTlVNCQkxMAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAkyCS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTIJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTQKKworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiZWEvbG9hZGVyX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9pbmRpZ29faW94X2RzcC5mdyIpOworCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfSU5ESUdPX0lPWF9EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19pb3hfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEQwLCAwLCAwLCAwfSwJLyogSW5kaWdvIElPeCAqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2lveF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCisKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1NzUyMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LAorCQkJICAgdTE2IHBpcGUsIGludCBnYWluKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIEluZGlnbyBJT3hcbiIpKTsKKwlpZiAoc25kX0JVR19PTigoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSAhPSBJTkRJR09fSU9YKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9YX0RTUF07CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKaW5kZXggZWRlNzVjNi4uODM3NTBlOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwpAQCAtMjg0LDEwICsyODQsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwppbmRleCAyMjczODY2Li41NTE0MDUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwpAQCAtNjksMTggKzY5LDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGdvIHRvIGFuYWxvZwotCW91dHB1dHMgYW5kIHZjaGFubmVscyA0LTcgZ28gdG8gUy9QRElGIG91dHB1dHMgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyMiwxMCArMjEwLDEwIEBACiAJREVfQUNUKCgic2V0X3Byb2Zlc3Npb25hbF9zcGRpZiAlZFxuIiwgcHJvZikpOwogCWlmIChwcm9mKQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IHByb2Y7CiAJcmV0dXJuIHVwZGF0ZV9mbGFncyhjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKaW5kZXggNzdiZjJhOC4uYTk1M2QxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCWlmIChlbmFibGUpIHsKIAkJY2hpcC0+bXRjX3N0YXRlID0gTUlESV9JTl9TVEFURV9OT1JNQUw7CiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKIAl9IGVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CiAKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCmluZGV4IDgzNTRjMWEuLmM3ZjNiOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKQEAgLTExNCw5ICsxMTQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAobWF4X2J1ZmZlcl9zaXplW2Rldl0gPCAzMikKIAkJbWF4X2J1ZmZlcl9zaXplW2Rldl0gPSAzMjsKIAllbHNlIGlmIChtYXhfYnVmZmVyX3NpemVbZGV2XSA+IDEwMjQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKaW5kZXggMGU2NDlkYy4uN2VmOTQ5ZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKQEAgLTEwMyw3ICsxMDMsMTAgQEAKIAkJCWludCBjaDsKIAkJCXZwID0gJmVtdS0+dm9pY2VzW2Jlc3RbaV0udm9pY2VdOwogCQkJaWYgKChjaCA9IHZwLT5jaCkgPCAwKSB7Ci0JCQkJLy9wcmludGsoInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkvKgorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkqLwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJdnAtPmVtdS0+bnVtX3ZvaWNlcy0tOwpAQCAtMzM1LDcgKzMzOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWVtZW0tPm1hcF9sb2NrZWQrKzsKIAlpZiAoc25kX2VtdTEwazFfbWVtYmxrX21hcChodywgZW1lbSkgPCAwKSB7Ci0JCS8vIHByaW50aygiZW11OiBjYW5ub3QgbWFwIVxuIik7CisJCS8qIHByaW50ayhLRVJOX0VSUiAiZW11OiBjYW5ub3QgbWFwIVxuIik7ICovCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltYXBwZWRfb2Zmc2V0ID0gc25kX2VtdTEwazFfbWVtYmxrX29mZnNldChlbWVtKSA+PiAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCA3OTU4MDA2Li5mMThiZDYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtNzExLDggKzcxMSw3IEBACiBzdGF0aWMgaW50IGVtdTEwMTBfZmlybXdhcmVfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNuZF9lbXUxMGsxICplbXUgPSBkYXRhOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAogCWZvciAoOzspIHsKQEAgLTc1OCw3ICs3NTcsOCBAQAogCQkJc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwMTA6IEF1ZGlvIERvY2sgRmlybXdhcmUgbG9hZGVkXG4iKTsKIAkJCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9ET0NLX01BSk9SX1JFViwgJnRtcCk7CiAJCQlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfRE9DS19NSU5PUl9SRVYsICZ0bXAyKTsKLQkJCXNuZF9wcmludGsoIkF1ZGlvIERvY2sgdmVyOiVkLiVkXG4iLCB0bXAsIHRtcDIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkF1ZGlvIERvY2sgdmVyOiAldS4ldVxuIiwKKwkJCQkgICB0bXAsIHRtcDIpOwogCQkJLyogU3luYyBjbG9ja2luZyBiZXR3ZWVuIDEwMTAgYW5kIERvY2sgKi8KIAkJCS8qIEFsbG93IERMTCB0byBzZXR0bGUgKi8KIAkJCW1zbGVlcCgxMCk7CkBAIC04MDQsOCArODA0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2VtdTEwazFfZW11MTAxMF9pbml0KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11KQogewogCXVuc2lnbmVkIGludCBpOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAljb25zdCBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAKQEAgLTg4Nyw3ICs4ODYsNyBAQAogCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIEZpcm13YXJlIGxvYWRlZFxuIik7CiAJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0hBTkFfTUFKT1JfUkVWLCAmdG1wKTsKIAlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfSEFOQV9NSU5PUl9SRVYsICZ0bXAyKTsKLQlzbmRfcHJpbnRrKCJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICVkLiVkXG4iLCB0bXAsIHRtcDIpOworCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICV1LiV1XG4iLCB0bXAsIHRtcDIpOwogCS8qIEVuYWJsZSA0OFZvbHQgcG93ZXIgdG8gQXVkaW8gRG9jayAqLwogCXNuZF9lbXUxMDEwX2ZwZ2Ffd3JpdGUoZW11LCBFTVVfSEFOQV9ET0NLX1BXUiwgRU1VX0hBTkFfRE9DS19QV1JfT04pOwogCkBAIC0xNTI4LDYgKzE1MjcsNyBAQAogCSAuY2EwMTUxX2NoaXAgPSAxLAogCSAuc3BrNzEgPSAxLAogCSAuc3BkaWZfYnVnID0gMSwKKwkgLmludmVydF9zaGFyZWRfc3BkaWYgPSAxLAkvKiBkaWdpdGFsL2FuYWxvZyBzd2l0Y2ggc3dhcHBlZCAqLwogCSAuYWM5N19jaGlwID0gMX0gLAogCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA0LCAuc3Vic3lzdGVtID0gMHgxMDAyMTEwMiwKIAkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiU0IgQXVkaWd5IDIgUGxhdGludW0gW1NCMDI0MFBdIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IDVmZjRkYmIuLjMxNTQyYWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtMTU0NCw5ICsxNTQ0LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9lbXUxMGsxeF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKaW5kZXggN2RiYTA4Zi4uMTkxZTFjZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCkBAIC0xNTE5LDcgKzE1MTksNyBAQAogCS8qIEFfUFVUX1NURVJFT19PVVRQVVQoQV9FWFRPVVRfRlJPTlRfTCwgQV9FWFRPVVRfRlJPTlRfUiwgcGxheWJhY2sgKyBTTkRfRU1VMTBLMV9QTEFZQkFDS19DSEFOTkVMUyk7ICovCiAJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmVtdV9tb2RlbCkgewogCQkvKiBFTVUxMDEwIE91dHB1dHMgZnJvbSBQQ00gRnJvbnQsIFJlYXIsIENlbnRlciwgTEZFLCBTaWRlICovCi0JCXNuZF9wcmludGsoIkVNVSBvdXRwdXRzIG9uXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVNVSBvdXRwdXRzIG9uXG4iKTsKIAkJZm9yICh6ID0gMDsgeiA8IDg7IHorKykgewogCQkJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmNhMDEwOF9jaGlwKSB7CiAJCQkJQV9PUChpY29kZSwgJnB0ciwgaUFDQzMsIEEzX0VNVTMyT1VUKHopLCBBX0dQUihwbGF5YmFjayArIFNORF9FTVUxMEsxX1BMQVlCQUNLX0NIQU5ORUxTICsgeiksIEFfQ18wMDAwMDAwMCwgQV9DXzAwMDAwMDAwKTsKQEAgLTE1NjcsNyArMTU2Nyw3IEBACiAKIAlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+ZW11X21vZGVsKSB7CiAJCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5jYTAxMDhfY2hpcCkgewotCQkJc25kX3ByaW50aygiRU1VMiBpbnB1dHMgb25cbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVNVTIgaW5wdXRzIG9uXG4iKTsKIAkJCWZvciAoeiA9IDA7IHogPCAweDEwOyB6KyspIHsKIAkJCQlzbmRfZW11MTBrMV9hdWRpZ3lfZHNwX2NvbnZlcnRfMzJfdG9fMngxNiggaWNvZGUsICZwdHIsIHRtcCwgCiAJCQkJCQkJCQliaXRfc2hpZnRlcjE2LApAQCAtMTU3NSwxMCArMTU3NSwxMyBAQAogCQkJCQkJCQkJQV9GWEJVUzIoeioyKSApOwogCQkJfQogCQl9IGVsc2UgewotCQkJc25kX3ByaW50aygiRU1VIGlucHV0cyBvblxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRU1VIGlucHV0cyBvblxuIik7CiAJCQkvKiBDYXB0dXJlIDE2IChvcmlnaW5hbGx5IDgpIGNoYW5uZWxzIG9mIFMzMl9MRSBzb3VuZCAqLwogCi0JCQkvKiBwcmludGsoImVtdWZ4LmM6IGdwcj0weCV4LCB0bXA9MHgleFxuIixncHIsIHRtcCk7ICovCisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImVtdWZ4LmM6IGdwcj0weCV4LCB0bXA9MHgleFxuIiwKKwkJCSAgICAgICBncHIsIHRtcCk7CisJCQkqLwogCQkJLyogRm9yIHRoZSBFTVUxMDEwOiBIb3cgdG8gZ2V0IDMyYml0IHZhbHVlcyBmcm9tIHRoZSBEU1AuIEhpZ2ggMTZiaXRzIGludG8gTCwgbG93IDE2Yml0cyBpbnRvIFIuICovCiAJCQkvKiBBX1AxNlZJTigwKSBpcyBkZWxheWVkIGJ5IG9uZSBzYW1wbGUsCiAJCQkgKiBzbyBhbGwgb3RoZXIgQV9QMTZWSU4gY2hhbm5lbHMgd2lsbCBuZWVkIHRvIGFsc28gYmUgZGVsYXllZApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwppbmRleCBjZjkyNzZkLi43OGY2MmZkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwpAQCAtNDQsNyArNDQsNyBAQAogCWlmIChlcGNtLT5zdWJzdHJlYW0gPT0gTlVMTCkKIAkJcmV0dXJuOwogI2lmIDAKLQlwcmludGsoIklSUTogcG9zaXRpb24gPSAweCV4LCBwZXJpb2QgPSAweCV4LCBzaXplID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiSVJROiBwb3NpdGlvbiA9IDB4JXgsIHBlcmlvZCA9IDB4JXgsIHNpemUgPSAweCV4XG4iLAogCQkJZXBjbS0+c3Vic3RyZWFtLT5ydW50aW1lLT5ody0+cG9pbnRlcihlbXUsIGVwY20tPnN1YnN0cmVhbSksCiAJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoZXBjbS0+c3Vic3RyZWFtKSwKIAkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhlcGNtLT5zdWJzdHJlYW0pKTsKQEAgLTE0Niw3ICsxNDYsMTEgQEAKIAkJCQkJICAgICAgMSwKIAkJCQkJICAgICAgJmVwY20tPmV4dHJhKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCS8qIHByaW50aygicGNtX2NoYW5uZWxfYWxsb2M6IGZhaWxlZCBleHRyYTogdm9pY2VzPSVkLCBmcmFtZT0lZFxuIiwgdm9pY2VzLCBmcmFtZSk7ICovCisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9jaGFubmVsX2FsbG9jOiAiCisJCQkgICAgICAgImZhaWxlZCBleHRyYTogdm9pY2VzPSVkLCBmcmFtZT0lZFxuIiwKKwkJCSAgICAgICB2b2ljZXMsIGZyYW1lKTsKKwkJCSovCiAJCQlmb3IgKGkgPSAwOyBpIDwgdm9pY2VzOyBpKyspIHsKIAkJCQlzbmRfZW11MTBrMV92b2ljZV9mcmVlKGVwY20tPmVtdSwgZXBjbS0+dm9pY2VzW2ldKTsKIAkJCQllcGNtLT52b2ljZXNbaV0gPSBOVUxMOwpAQCAtNzM3LDcgKzc0MSwxMCBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9wY21fbWl4ZXIgKm1peDsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCS8qIHByaW50aygidHJpZ2dlciAtIGVtdTEwazEgPSAweCV4LCBjbWQgPSAlaSwgcG9pbnRlciA9ICVpXG4iLCAoaW50KWVtdSwgY21kLCBzdWJzdHJlYW0tPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ0cmlnZ2VyIC0gZW11MTBrMSA9IDB4JXgsIGNtZCA9ICVpLCBwb2ludGVyID0gJWlcbiIsCisJICAgICAgIChpbnQpZW11LCBjbWQsIHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSkpCisJKi8KIAlzcGluX2xvY2soJmVtdS0+cmVnX2xvY2spOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTc4Niw3ICs3OTMsMTAgQEAKIAkJLyogaG1tIHRoaXMgc2hvdWxkIGNhdXNlIGZ1bGwgYW5kIGhhbGYgZnVsbCBpbnRlcnJ1cHQgdG8gYmUgcmFpc2VkPyAqLwogCQlvdXRsKGVwY20tPmNhcHR1cmVfaXByLCBlbXUtPnBvcnQgKyBJUFIpOwogCQlzbmRfZW11MTBrMV9pbnRyX2VuYWJsZShlbXUsIGVwY20tPmNhcHR1cmVfaW50ZSk7Ci0JCS8qIHByaW50aygiYWRjY3IgPSAweCV4LCBhZGNicyA9IDB4JXhcbiIsIGVwY20tPmFkY2NyLCBlcGNtLT5hZGNicyk7ICovCisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJhZGNjciA9IDB4JXgsIGFkY2JzID0gMHgleFxuIiwKKwkJICAgICAgIGVwY20tPmFkY2NyLCBlcGNtLT5hZGNicyk7CisJCSovCiAJCXN3aXRjaCAoZXBjbS0+dHlwZSkgewogCQljYXNlIENBUFRVUkVfQUM5N0FEQzoKIAkJCXNuZF9lbXUxMGsxX3B0cl93cml0ZShlbXUsIEFEQ0NSLCAwLCBlcGNtLT5jYXB0dXJlX2NyX3ZhbCk7CkBAIC04NTcsNyArODY3LDExIEBACiAJCQlwdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJfQogI2VuZGlmCi0JLyogcHJpbnRrKCJwdHIgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleFxuIiwgcHRyLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInB0ciA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4XG4iLAorCSAgICAgICBwdHIsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC0xNTQ2LDcgKzE1NjAsMTEgQEAKIAkJCQkJCSAgIHVuc2lnbmVkIGludCBjb3VudCwKIAkJCQkJCSAgIHVuc2lnbmVkIGludCB0cmFtX3NoaWZ0KQogewotCS8qIHByaW50aygidHJhbV9wb2tlMTogZHN0X2xlZnQgPSAweCVwLCBkc3RfcmlnaHQgPSAweCVwLCBzcmMgPSAweCVwLCBjb3VudCA9IDB4JXhcbiIsIGRzdF9sZWZ0LCBkc3RfcmlnaHQsIHNyYywgY291bnQpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInRyYW1fcG9rZTE6IGRzdF9sZWZ0ID0gMHglcCwgZHN0X3JpZ2h0ID0gMHglcCwgIgorCSAgICAgICAic3JjID0gMHglcCwgY291bnQgPSAweCV4XG4iLAorCSAgICAgICBkc3RfbGVmdCwgZHN0X3JpZ2h0LCBzcmMsIGNvdW50KTsKKwkqLwogCWlmICgodHJhbV9zaGlmdCAmIDEpID09IDApIHsKIAkJd2hpbGUgKGNvdW50LS0pIHsKIAkJCSpkc3RfbGVmdC0tID0gKnNyYysrOwpAQCAtMTYyMyw3ICsxNjQxLDEyIEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY20gKnBjbSA9ICZlbXUtPmZ4ODAxMC5wY21bc3Vic3RyZWFtLT5udW1iZXJdOwogCXVuc2lnbmVkIGludCBpOwogCQotCS8qIHByaW50aygicHJlcGFyZTogZXRyYW1fcGFnZXMgPSAweCVwLCBkbWFfYXJlYSA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCAoMHgleClcbiIsIGVtdS0+Zng4MDEwLmV0cmFtX3BhZ2VzLCBydW50aW1lLT5kbWFfYXJlYSwgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIDw8IDIpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInByZXBhcmU6IGV0cmFtX3BhZ2VzID0gMHglcCwgZG1hX2FyZWEgPSAweCV4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXggKDB4JXgpXG4iLAorCSAgICAgICBlbXUtPmZ4ODAxMC5ldHJhbV9wYWdlcywgcnVudGltZS0+ZG1hX2FyZWEsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5idWZmZXJfc2l6ZSA8PCAyKTsKKwkqLwogCW1lbXNldCgmcGNtLT5wY21fcmVjLCAwLCBzaXplb2YocGNtLT5wY21fcmVjKSk7CiAJcGNtLT5wY21fcmVjLmh3X2J1ZmZlcl9zaXplID0gcGNtLT5idWZmZXJfc2l6ZSAqIDI7IC8qIGJ5dGUgc2l6ZSAqLwogCXBjbS0+cGNtX3JlYy5zd19idWZmZXJfc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvaW8uYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMKaW5kZXggYjVhODAyYi4uNGJmYzMxZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvaW8uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9pby5jCkBAIC0yMjYsNyArMjI2LDkgQEAKIAkJCQlicmVhazsKIAogCQkJaWYgKHRpbWVvdXQgPiAxMDAwKSB7Ci0gICAgICAgICAgICAgICAgCQlzbmRfcHJpbnRrKCJlbXUxMGsxOkkyQzp0aW1lb3V0IHN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgImVtdTEwazE6STJDOnRpbWVvdXQgc3RhdHVzPTB4JXhcbiIsCisJCQkJCSAgIHN0YXR1cyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwppbmRleCA3NDlhMjFiLi5lNjE3YWNhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfcGNtICplcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogICAKIAlpZiAoZXBjbSkgewotICAgICAgICAJLy9zbmRfcHJpbnRrKCJlcGNtIGZyZWU6ICVwXG4iLCBlcGNtKTsKKyAgICAgICAgCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBmcmVlOiAlcFxuIiwgZXBjbSk7ICovCiAJCWtmcmVlKGVwY20pOwogCX0KIH0KQEAgLTE4MywxNCArMTgzLDE2IEBACiAJaW50IGVycjsKIAogCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwotICAgICAgICAvL3NuZF9wcmludGsoImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOworICAgICAgICAvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOyAqLwogCiAJaWYgKGVwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZXBjbS0+ZW11ID0gZW11OwogCWVwY20tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7Ci0gIAorCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwKKwkJICAgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7CisJKi8KIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBlcGNtOwogCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9wMTZ2X3BjbV9mcmVlX3N1YnN0cmVhbTsKICAgCkBAIC0yMDAsMTAgKzIwMiwxNSBAQAogICAgICAgICBjaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAgICAgICAgIGNoYW5uZWwtPnVzZT0xOwotCS8vc25kX3ByaW50aygicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKLSAgICAgICAgLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKLSAgICAgICAgLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7Ci0gICAgICAgIGNoYW5uZWwtPmVwY209ZXBjbTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLAorCQkgICBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOworCXByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworI2VuZGlmIC8qIGRlYnVnICovCisJLyogY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OyAqLworCWNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKIApAQCAtMjI0LDE0ICsyMzEsMTYgQEAKIAlpbnQgZXJyOwogCiAJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7Ci0JLy9zbmRfcHJpbnRrKCJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOyAqLwogCiAJaWYgKGVwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZXBjbS0+ZW11ID0gZW11OwogCWVwY20tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKLQkvL3NuZF9wcmludGsoImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLCBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKLQorCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwKKwkJICAgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7CisJKi8KIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBlcGNtOwogCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9wMTZ2X3BjbV9mcmVlX3N1YnN0cmVhbTsKICAgCkBAIC0yNDEsMTAgKzI1MCwxNSBAQAogCWNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2U9MTsKLQkvL3NuZF9wcmludGsoInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7Ci0JLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKLQkvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKLQljaGFubmVsLT5lcGNtPWVwY207CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwKKwkJICAgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLworCS8qIGNoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsgKi8KKwljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zMzQsOSArMzQ4LDE5IEBACiAJaW50IGk7CiAJdTMyIHRtcDsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5wMTZ2X2J1ZmZlci5hZGRyLCBlbXUtPnAxNnZfYnVmZmVyLmFyZWEsIGVtdS0+cDE2dl9idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsICIKKwkJICAgImZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCAiCisJCSAgICJwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywKKwkJICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCQkgICBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+cDE2dl9idWZmZXIuYWRkciwgZW11LT5wMTZ2X2J1ZmZlci5hcmVhLAorCQkgICBlbXUtPnAxNnZfYnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCXRtcCA9IHNuZF9lbXUxMGsxX3B0cl9yZWFkKGVtdSwgQV9TUERJRl9TQU1QTEVSQVRFLCBjaGFubmVsKTsKICAgICAgICAgc3dpdGNoIChydW50aW1lLT5yYXRlKSB7CiAJY2FzZSA0NDEwMDoKQEAgLTM3OSw3ICs0MDMsMTUgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCBjaGFubmVsID0gc3Vic3RyZWFtLT5wY20tPmRldmljZSAtIGVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0OwogCXUzMiB0bXA7Ci0JLy9wcmludGsoInByZXBhcmUgY2FwdHVyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwcmVwYXJlIGNhcHR1cmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsICIKKwkgICAgICAgImZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkgICAgICAgImZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkgICAgICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywKKwkgICAgICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCSAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCSovCiAJdG1wID0gc25kX2VtdTEwazFfcHRyX3JlYWQoZW11LCBBX1NQRElGX1NBTVBMRVJBVEUsIGNoYW5uZWwpOwogICAgICAgICBzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtNDU5LDEzICs0OTEsMTMgQEAKIAkJcnVudGltZSA9IHMtPnJ1bnRpbWU7CiAJCWVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCWNoYW5uZWwgPSBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLWVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0OwotCQkvL3NuZF9wcmludGsoInAxNnYgY2hhbm5lbD0lZFxuIixjaGFubmVsKTsKKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJwMTZ2IGNoYW5uZWw9JWRcbiIsIGNoYW5uZWwpOyAqLwogCQllcGNtLT5ydW5uaW5nID0gcnVubmluZzsKIAkJYmFzaWMgfD0gKDB4MTw8Y2hhbm5lbCk7CiAJCWludGUgfD0gKElOVEUyX1BMQVlCQUNLX0NIXzBfTE9PUDw8Y2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vic3RyZWFtKTsKICAgICAgICAgfQotCS8vc25kX3ByaW50aygiYmFzaWM9MHgleCwgaW50ZT0weCV4XG4iLGJhc2ljLCBpbnRlKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImJhc2ljPTB4JXgsIGludGU9MHgleFxuIiwgYmFzaWMsIGludGUpOyAqLwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtNTU4LDggKzU5MCwxMyBAQAogCQlwdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ1ZmZlciBjYXB0dXJlIGxpbWl0ZWQhXG4iKTsKIAl9Ci0JLy9wcmludGsoInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsIChpbnQpcnVudGltZS0+cmF0ZSk7Ci0KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgIgorCSAgICAgICAiYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsCisJICAgICAgIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkgICAgICAgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnJhdGUpOworCSovCiAJcmV0dXJuIHB0cjsKIH0KIApAQCAtNTkyLDcgKzYyOSwxMCBAQAogCS8vIHJlbGVhc2UgdGhlIGRhdGEKIAlpZiAoY2hpcC0+cDE2dl9idWZmZXIuYXJlYSkgewogCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJmNoaXAtPnAxNnZfYnVmZmVyKTsKLQkJLy9zbmRfcHJpbnRrKCJwZXJpb2QgbGFibGVzIGZyZWU6ICVwXG4iLCAmY2hpcC0+cDE2dl9idWZmZXIpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInBlcmlvZCBsYWJsZXMgZnJlZTogJXBcbiIsCisJCQkgICAmY2hpcC0+cDE2dl9idWZmZXIpOworCQkqLwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYwNCw3ICs2NDQsNyBAQAogCWludCBlcnI7CiAgICAgICAgIGludCBjYXB0dXJlPTE7CiAgIAotCS8vc25kX3ByaW50aygic25kX3AxNnZfcGNtIGNhbGxlZC4gZGV2aWNlPSVkXG4iLCBkZXZpY2UpOworCS8qIHNuZF9wcmludGsoIktFUk5fREVCVUcgc25kX3AxNnZfcGNtIGNhbGxlZC4gZGV2aWNlPSVkXG4iLCBkZXZpY2UpOyAqLwogCWVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0ID0gZGV2aWNlOwogCWlmIChycGNtKQogCQkqcnBjbSA9IE5VTEw7CkBAIC02MzEsNyArNjcxLDEwIEBACiAJCQkJCQkJIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCAKIAkJCQkJCQkgKCg2NTUzNiAtIDY0KSAqIDgpLCAoKDY1NTM2IC0gNjQpICogOCkpKSA8IDApIAogCQkJcmV0dXJuIGVycjsKLQkJLy9zbmRfcHJpbnRrKCJwcmVhbGxvY2F0ZSBwbGF5YmFjayBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAicHJlYWxsb2NhdGUgcGxheWJhY2sgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCSovCiAJfQogCiAJZm9yIChzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW07IApAQCAtNjQyLDcgKzY4NSwxMCBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGVtdS0+cGNpKSwgCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1NTM2IC0gNjQsIDY1NTM2IC0gNjQpKSA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQkvL3NuZF9wcmludGsoInByZWFsbG9jYXRlIGNhcHR1cmUgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkJICAgInByZWFsbG9jYXRlIGNhcHR1cmUgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCSovCiAJfQogICAKIAlpZiAocnBjbSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMgYi9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jCmluZGV4IGQ3MzAwYTEuLjIwYjhkYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYwpAQCAtNTMsNyArNTMsMTAgQEAKIAkqcnZvaWNlID0gTlVMTDsKIAlmaXJzdF92b2ljZSA9IGxhc3Rfdm9pY2UgPSAwOwogCWZvciAoaSA9IGVtdS0+bmV4dF9mcmVlX3ZvaWNlLCBqID0gMDsgaiA8IE5VTV9HIDsgaSArPSBudW1iZXIsIGogKz0gbnVtYmVyKSB7Ci0JCS8vIHByaW50aygiaSAlZCBqICVkIG5leHQgZnJlZSAlZCFcbiIsIGksIGosIGVtdS0+bmV4dF9mcmVlX3ZvaWNlKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgImkgJWQgaiAlZCBuZXh0IGZyZWUgJWQhXG4iLAorCQkgICAgICAgaSwgaiwgZW11LT5uZXh0X2ZyZWVfdm9pY2UpOworCQkqLwogCQlpICU9IE5VTV9HOwogCiAJCS8qIHN0ZXJlbyB2b2ljZXMgbXVzdCBiZSBldmVuL29kZCAqLwpAQCAtNzEsNyArNzQsNyBAQAogCQkJfQogCQl9CiAJCWlmICghc2tpcCkgewotCQkJLy8gcHJpbnRrKCJhbGxvY2F0ZWQgdm9pY2UgJWRcbiIsIGkpOworCQkJLyogcHJpbnRrKEtFUk5fREVCVUcgImFsbG9jYXRlZCB2b2ljZSAlZFxuIiwgaSk7ICovCiAJCQlmaXJzdF92b2ljZSA9IGk7CiAJCQlsYXN0X3ZvaWNlID0gKGkgKyBudW1iZXIpICUgTlVNX0c7CiAJCQllbXUtPm5leHRfZnJlZV92b2ljZSA9IGxhc3Rfdm9pY2U7CkBAIC04NCw3ICs4NywxMCBAQAogCQogCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCQl2b2ljZSA9ICZlbXUtPnZvaWNlc1soZmlyc3Rfdm9pY2UgKyBpKSAlIE5VTV9HXTsKLQkJLy8gcHJpbnRrKCJ2b2ljZSBhbGxvYyAtICVpLCAlaSBvZiAlaVxuIiwgdm9pY2UtPm51bWJlciwgaWR4LWZpcnN0X3ZvaWNlKzEsIG51bWJlcik7CisJCS8qCisJCXByaW50ayhrRVJOX0RFQlVHICJ2b2ljZSBhbGxvYyAtICVpLCAlaSBvZiAlaVxuIiwKKwkJICAgICAgIHZvaWNlLT5udW1iZXIsIGlkeC1maXJzdF92b2ljZSsxLCBudW1iZXIpOworCQkqLwogCQl2b2ljZS0+dXNlID0gMTsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgRU1VMTBLMV9QQ006CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCA5YmY5NTM2Li4xOGY0ZDFlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTU4NCw3ICs1ODQsOCBAQAogCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWUgPSBqaWZmaWVzICsgSFogLyAxMDsKIAogI2lmIDAKLQlwcmludGsoIkNPREVDIFdSSVRFOiByZWcgPSAweCV4LCB2YWwgPSAweCV4ICgweCV4KSwgY3JlZyA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIkNPREVDIFdSSVRFOiByZWcgPSAweCV4LCB2YWwgPSAweCV4ICgweCV4KSwgY3JlZyA9IDB4JXhcbiIsCiAJICAgICAgIHJlZywgdmFsLCBFU18xMzcwX0NPREVDX1dSSVRFKHJlZywgdmFsKSwgRVNfUkVHKGVuc29uaXEsIDEzNzBfQ09ERUMpKTsKICNlbmRpZgogCWRvIHsKQEAgLTI0MDksOSArMjQxMCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfZW5zb25pcV9jcmVhdGUoY2FyZCwgcGNpLCAmZW5zb25pcSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IDRjZDlhMWZhLi5kZDYzYjEzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTM4LmMKKysrIGIvc291bmQvcGNpL2VzMTkzOC5jCkBAIC0xNjczLDE4ICsxNjczLDIyIEBACiAKIAlzdGF0dXMgPSBpbmIoU0xJT19SRUcoY2hpcCwgSVJRQ09OVFJPTCkpOwogI2lmIDAKLQlwcmludGsoIkVzMTkzOGRlYnVnIC0gaW50ZXJydXB0IHN0YXR1czogPTB4JXhcbiIsIHN0YXR1cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkVzMTkzOGRlYnVnIC0gaW50ZXJydXB0IHN0YXR1czogPTB4JXhcbiIsIHN0YXR1cyk7CiAjZW5kaWYKIAkKIAkvKiBBVURJTyAxICovCiAJaWYgKHN0YXR1cyAmIDB4MTApIHsKICNpZiAwCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBpbnRlcnJ1cHRcbiIpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGNvdW50OiAldVxuIiwKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIGludGVycnVwdFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgY291bnQ6ICV1XG4iLAogCQkgICAgICAgaW53KFNMRE1fUkVHKGNoaXAsIERNQUNPVU5UKSkpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGJhc2U6ICV1XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGJhc2U6ICV1XG4iLAogCQkgICAgICAgaW5sKFNMRE1fUkVHKGNoaXAsIERNQUFERFIpKSk7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgc3RhdHVzOiAweCV4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIHN0YXR1czogMHgleFxuIiwKIAkJICAgICAgIGlubChTTERNX1JFRyhjaGlwLCBETUFTVEFUVVMpKSk7CiAjZW5kaWYKIAkJLyogY2xlYXIgaXJxICovCkBAIC0xNjk5LDEwICsxNzAzLDEzIEBACiAJLyogQVVESU8gMiAqLwogCWlmIChzdGF0dXMgJiAweDIwKSB7CiAjaWYgMAotICAgICAgICAgICAgICAgIHByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgaW50ZXJydXB0XG4iKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBjb3VudDogJXVcbiIsCisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBpbnRlcnJ1cHRcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGNvdW50OiAldVxuIiwKIAkJICAgICAgIGludyhTTElPX1JFRyhjaGlwLCBBVURJTzJETUFDT1VOVCkpKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBiYXNlOiAldVxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBiYXNlOiAldVxuIiwKIAkJICAgICAgIGlubChTTElPX1JFRyhjaGlwLCBBVURJTzJETUFBRERSKSkpOwogCiAjZW5kaWYKQEAgLTE3OTksOSArMTgwNiw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgNTsgaWR4KyspIHsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIGlkeCkgPT0gMCB8fAogCQkgICAgIShwY2lfcmVzb3VyY2VfZmxhZ3MocGNpLCBpZHgpICYgSU9SRVNPVVJDRV9JTykpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBlOWMzNzk0Li5kYzk3ZTgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0yNjQ1LDkgKzI2NDUsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogICAgICAgICAgICAgICAgIAogCWlmICh0b3RhbF9idWZzaXplW2Rldl0gPCAxMjgpCiAJCXRvdGFsX2J1ZnNpemVbZGV2XSA9IDEyODsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggYzEyOWY5ZS4uNjBjZGI5ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTE0NjgsOSArMTQ2OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2ZtODAxX2NyZWF0ZShjYXJkLCBwY2ksIHRlYTU3NXhfdHVuZXJbZGV2XSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwppbmRleCA5NjBmZDc5Li40ZGU1YmFjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCkBAIC0xMzgsNiArMTM4LDcgQEAKIAogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShiZWVwLT5kZXYpOwogCQlrZnJlZShiZWVwKTsKKwkJY29kZWMtPmJlZXAgPSBOVUxMOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaAppbmRleCBiOTY3OWYwLi41MWJmNmE1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBuaWQpOwogdm9pZCBzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZWxzZQotI2RlZmluZSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZSguLi4pCisjZGVmaW5lIHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKC4uLikJCTAKICNkZWZpbmUgc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoLi4uKQogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IGQwM2Y5OTIuLmE0ZTVlNTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtNjQ3LDkgKzY0Nyw5IEBACiAKIAl0b3RhbF9ub2RlcyA9IHNuZF9oZGFfZ2V0X3N1Yl9ub2Rlcyhjb2RlYywgQUNfTk9ERV9ST09ULCAmbmlkKTsKIAlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbm9kZXM7IGkrKywgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IGZ1bmM7Ci0JCWZ1bmMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX0ZVTkNUSU9OX1RZUEUpOwotCQlzd2l0Y2ggKGZ1bmMgJiAweGZmKSB7CisJCWNvZGVjLT5mdW5jdGlvbl9pZCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLAorCQkJCQkJQUNfUEFSX0ZVTkNUSU9OX1RZUEUpICYgMHhmZjsKKwkJc3dpdGNoIChjb2RlYy0+ZnVuY3Rpb25faWQpIHsKIAkJY2FzZSBBQ19HUlBfQVVESU9fRlVOQ1RJT046CiAJCQljb2RlYy0+YWZnID0gbmlkOwogCQkJYnJlYWs7CkBAIC02ODIsMTEgKzY4MiwxNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogcmVhZCBhbGwgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgYW5kIHNhdmUgY29kZWMtPmluaXRfcGlucyAqLworc3RhdGljIGludCByZWFkX3Bpbl9kZWZhdWx0cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwloZGFfbmlkX3QgbmlkID0gY29kZWMtPnN0YXJ0X25pZDsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX25vZGVzOyBpKyssIG5pZCsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisJCXVuc2lnbmVkIGludCB3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKKwkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gKHdjYXBzICYgQUNfV0NBUF9UWVBFKSA+PgorCQkJCUFDX1dDQVBfVFlQRV9TSElGVDsKKwkJaWYgKHdpZF90eXBlICE9IEFDX1dJRF9QSU4pCisJCQljb250aW51ZTsKKwkJcGluID0gc25kX2FycmF5X25ldygmY29kZWMtPmluaXRfcGlucyk7CisJCWlmICghcGluKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXBpbi0+bmlkID0gbmlkOworCQlwaW4tPmNmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJfQorCXJldHVybiAwOworfQorCisvKiBsb29rIHVwIHRoZSBnaXZlbiBwaW4gY29uZmlnIGxpc3QgYW5kIHJldHVybiB0aGUgaXRlbSBtYXRjaGluZyB3aXRoIE5JRCAqLworc3RhdGljIHN0cnVjdCBoZGFfcGluY2ZnICpsb29rX3VwX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJIHN0cnVjdCBzbmRfYXJyYXkgKmFycmF5LAorCQkJCQkgaGRhX25pZF90IG5pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oYXJyYXksIGkpOworCQlpZiAocGluLT5uaWQgPT0gbmlkKQorCQkJcmV0dXJuIHBpbjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIHdyaXRlIGEgY29uZmlnIHZhbHVlIGZvciB0aGUgZ2l2ZW4gTklEICovCitzdGF0aWMgdm9pZCBzZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNmZykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCArIGksCisJCQkJICAgIGNmZyAmIDB4ZmYpOworCQljZmcgPj49IDg7CisJfQorfQorCisvKiBzZXQgdGhlIGN1cnJlbnQgcGluIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIGdpdmVuIE5JRC4KKyAqIHRoZSB2YWx1ZSBpcyBjYWNoZWQsIGFuZCByZWFkIHZpYSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoKQorICovCitpbnQgc25kX2hkYV9hZGRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2FycmF5ICpsaXN0LAorCQkgICAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNmZykKK3sKKwlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOworCXVuc2lnbmVkIGludCBvbGRjZmc7CisKKwlvbGRjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsIGxpc3QsIG5pZCk7CisJaWYgKCFwaW4pIHsKKwkJcGluID0gc25kX2FycmF5X25ldyhsaXN0KTsKKwkJaWYgKCFwaW4pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcGluLT5uaWQgPSBuaWQ7CisJfQorCXBpbi0+Y2ZnID0gY2ZnOworCisJLyogY2hhbmdlIG9ubHkgd2hlbiBuZWVkZWQ7IGUuZy4gaWYgdGhlIHBpbmNmZyBpcyBhbHJlYWR5IHByZXNlbnQKKwkgKiBpbiB1c2VyX3BpbnNbXSwgZG9uJ3Qgd3JpdGUgaXQKKwkgKi8KKwljZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CisJaWYgKG9sZGNmZyAhPSBjZmcpCisJCXNldF9waW5jZmcoY29kZWMsIG5pZCwgY2ZnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCSAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNmZykKK3sKKwlyZXR1cm4gc25kX2hkYV9hZGRfcGluY2ZnKGNvZGVjLCAmY29kZWMtPmRyaXZlcl9waW5zLCBuaWQsIGNmZyk7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcpOworCisvKiBnZXQgdGhlIGN1cnJlbnQgcGluIGNvbmZpZyB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcGluIE5JRCAqLwordW5zaWduZWQgaW50IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOworCisjaWZkZWYgQ09ORklHX1NORF9IREFfSFdERVAKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIG5pZCk7CisJaWYgKHBpbikKKwkJcmV0dXJuIHBpbi0+Y2ZnOworI2VuZGlmCisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIG5pZCk7CisJaWYgKHBpbikKKwkJcmV0dXJuIHBpbi0+Y2ZnOworCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCAmY29kZWMtPmluaXRfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcpOworCisvKiByZXN0b3JlIGFsbCBjdXJyZW50IHBpbiBjb25maWdzICovCitzdGF0aWMgdm9pZCByZXN0b3JlX3BpbmNmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5pbml0X3BpbnMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmluaXRfcGlucywgaSk7CisJCXNldF9waW5jZmcoY29kZWMsIHBpbi0+bmlkLAorCQkJICAgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4tPm5pZCkpOworCX0KK30KIAogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKIHN0YXRpYyB2b2lkIGZyZWVfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSk7CiAKKy8qIHJlc3RvcmUgdGhlIGluaXRpYWwgcGluIGNmZ3MgYW5kIHJlbGVhc2UgYWxsIHBpbmNmZyBsaXN0cyAqLworc3RhdGljIHZvaWQgcmVzdG9yZV9pbml0X3BpbmNmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogZmlyc3QgZnJlZSBkcml2ZXJfcGlucyBhbmQgdXNlcl9waW5zLCB0aGVuIGNhbGwgcmVzdG9yZV9waW5jZmcKKwkgKiBzbyB0aGF0IG9ubHkgdGhlIHZhbHVlcyBpbiBpbml0X3BpbnMgYXJlIHJlc3RvcmVkCisJICovCisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5kcml2ZXJfcGlucyk7CisjaWZkZWYgQ09ORklHX1NORF9IREFfSFdERVAKKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPnVzZXJfcGlucyk7CisjZW5kaWYKKwlyZXN0b3JlX3BpbmNmZ3MoY29kZWMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aW5pdF9waW5zKTsKK30KKwogLyoKICAqIGNvZGVjIGRlc3RydWN0b3IKICAqLwpAQCAtNjk0LDYgKzgyMyw3IEBACiB7CiAJaWYgKCFjb2RlYykKIAkJcmV0dXJuOworCXJlc3RvcmVfaW5pdF9waW5jZmdzKGNvZGVjKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29kZWMtPnBvd2VyX3dvcmspOwogCWZsdXNoX3dvcmtxdWV1ZShjb2RlYy0+YnVzLT53b3JrcSk7CkBAIC03MTIsNiArODQyLDkgQEAKIAlrZnJlZShjb2RlYyk7CiB9CiAKK3N0YXRpYyB2b2lkIGhkYV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBmZywKKwkJCQl1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUpOworCiAvKioKICAqIHNuZF9oZGFfY29kZWNfbmV3IC0gY3JlYXRlIGEgSERBIGNvZGVjCiAgKiBAYnVzOiB0aGUgYnVzIHRvIGFzc2lnbgpAQCAtNzUxLDYgKzg4NCw4IEBACiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5hbXBfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2FtcF9pbmZvKSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2NhY2hlX2hlYWQpKTsKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPm1peGVycywgc2l6ZW9mKHN0cnVjdCBzbmRfa2NvbnRyb2wgKiksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmluaXRfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+ZHJpdmVyX3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAlpZiAoY29kZWMtPmJ1cy0+bW9kZWxuYW1lKSB7CiAJCWNvZGVjLT5tb2RlbG5hbWUgPSBrc3RyZHVwKGNvZGVjLT5idXMtPm1vZGVsbmFtZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY29kZWMtPm1vZGVsbmFtZSkgewpAQCAtNzg3LDE1ICs5MjIsMTggQEAKIAlzZXR1cF9mZ19ub2Rlcyhjb2RlYyk7CiAJaWYgKCFjb2RlYy0+YWZnICYmICFjb2RlYy0+bWZnKSB7CiAJCXNuZF9wcmludGRkKCJoZGFfY29kZWM6IG5vIEFGRyBvciBNRkcgbm9kZSBmb3VuZFxuIik7Ci0JCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PREVWOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChyZWFkX3dpZGdldF9jYXBzKGNvZGVjLCBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcpIDwgMCkgeworCWVyciA9IHJlYWRfd2lkZ2V0X2NhcHMoY29kZWMsIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZyk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgbWFsbG9jXG4iKTsKLQkJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CiAJfQorCWVyciA9IHJlYWRfcGluX2RlZmF1bHRzKGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKIAogCWlmICghY29kZWMtPnN1YnN5c3RlbV9pZCkgewogCQloZGFfbmlkX3QgbmlkID0gY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnOwpAQCAtODA2LDEyICs5NDQsMTUgQEAKIAlpZiAoYnVzLT5tb2RlbG5hbWUpCiAJCWNvZGVjLT5tb2RlbG5hbWUgPSBrc3RyZHVwKGJ1cy0+bW9kZWxuYW1lLCBHRlBfS0VSTkVMKTsKIAorCS8qIHBvd2VyLXVwIGFsbCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gKi8KKwloZGFfc2V0X3Bvd2VyX3N0YXRlKGNvZGVjLAorCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKKwkJCSAgICBBQ19QV1JTVF9EMCk7CisKIAlpZiAoZG9faW5pdCkgewogCQllcnIgPSBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShjb2RlYyk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3I7CiAJfQogCXNuZF9oZGFfY29kZWNfcHJvY19uZXcoY29kZWMpOwogCkBAIC04MjQsNiArOTY1LDEwIEBACiAJaWYgKGNvZGVjcCkKIAkJKmNvZGVjcCA9IGNvZGVjOwogCXJldHVybiAwOworCisgZXJyb3I6CisJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19uZXcpOwogCkBAIC05MDcsNiArMTA1Miw3IEBACiAKIC8qIEZJWE1FOiBtb3JlIGJldHRlciBoYXNoIGtleT8gKi8KICNkZWZpbmUgSERBX0hBU0hfS0VZKG5pZCxkaXIsaWR4KSAodTMyKSgobmlkKSArICgoaWR4KSA8PCAxNikgKyAoKGRpcikgPDwgMjQpKQorI2RlZmluZSBIREFfSEFTSF9QSU5DQVBfS0VZKG5pZCkgKHUzMikoKG5pZCkgKyAoMHgwMiA8PCAyNCkpCiAjZGVmaW5lIElORk9fQU1QX0NBUFMJKDE8PDApCiAjZGVmaW5lIElORk9fQU1QX1ZPTChjaCkJKDEgPDwgKDEgKyAoY2gpKSkKIApAQCAtOTk3LDYgKzExNDMsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMpOwogCit1MzIgc25kX2hkYV9xdWVyeV9waW5fY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvOworCisJaW5mbyA9IGdldF9hbGxvY19hbXBfaGFzaChjb2RlYywgSERBX0hBU0hfUElOQ0FQX0tFWShuaWQpKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAwOworCWlmICghaW5mby0+aGVhZC52YWwpIHsKKwkJaW5mby0+YW1wX2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOworCQlpbmZvLT5oZWFkLnZhbCB8PSBJTkZPX0FNUF9DQVBTOworCX0KKwlyZXR1cm4gaW5mby0+YW1wX2NhcHM7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKTsKKwogLyoKICAqIHJlYWQgdGhlIGN1cnJlbnQgdm9sdW1lIHRvIGluZm8KICAqIGlmIHRoZSBjYWNoZSBleGlzdHMsIHJlYWQgdGhlIGNhY2hlIHZhbHVlLgpAQCAtMTEyMCw2ICsxMjgxLDcgQEAKIAl1MTYgbmlkID0gZ2V0X2FtcF9uaWQoa2NvbnRyb2wpOwogCXU4IGNocyA9IGdldF9hbXBfY2hhbm5lbHMoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAl1MzIgY2FwczsKIAogCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgbmlkLCBkaXIpOwpAQCAtMTEzMSw2ICsxMjkzLDggQEAKIAkJICAgICAgIGtjb250cm9sLT5pZC5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWlmIChvZnMgPCBjYXBzKQorCQljYXBzIC09IG9mczsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKIAl1aW5mby0+Y291bnQgPSBjaHMgPT0gMyA/IDIgOiAxOwogCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CkBAIC0xMTM5LDYgKzEzMDMsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvKTsKIAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorcmVhZF9hbXBfdmFsdWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJICAgICAgIGludCBjaCwgaW50IGRpciwgaW50IGlkeCwgdW5zaWduZWQgaW50IG9mcykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCXZhbCA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgY2gsIGRpciwgaWR4KTsKKwl2YWwgJj0gSERBX0FNUF9WT0xNQVNLOworCWlmICh2YWwgPj0gb2ZzKQorCQl2YWwgLT0gb2ZzOworCWVsc2UKKwkJdmFsID0gMDsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludAordXBkYXRlX2FtcF92YWx1ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJIGludCBjaCwgaW50IGRpciwgaW50IGlkeCwgdW5zaWduZWQgaW50IG9mcywKKwkJIHVuc2lnbmVkIGludCB2YWwpCit7CisJaWYgKHZhbCA+IDApCisJCXZhbCArPSBvZnM7CisJcmV0dXJuIHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgbmlkLCBjaCwgZGlyLCBpZHgsCisJCQkJCUhEQV9BTVBfVk9MTUFTSywgdmFsKTsKK30KKwogaW50IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewpAQCAtMTE0NywxNCArMTMzNywxMyBAQAogCWludCBjaHMgPSBnZXRfYW1wX2NoYW5uZWxzKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOwogCWludCBpZHggPSBnZXRfYW1wX2luZGV4KGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKIAogCWlmIChjaHMgJiAxKQotCQkqdmFscCsrID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCkKLQkJCSYgSERBX0FNUF9WT0xNQVNLOworCQkqdmFscCsrID0gcmVhZF9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgsIG9mcyk7CiAJaWYgKGNocyAmIDIpCi0JCSp2YWxwID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCkKLQkJCSYgSERBX0FNUF9WT0xNQVNLOworCQkqdmFscCA9IHJlYWRfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4LCBvZnMpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldCk7CkBAIC0xMTY3LDE4ICsxMzU2LDE3IEBACiAJaW50IGNocyA9IGdldF9hbXBfY2hhbm5lbHMoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CiAJaW50IGlkeCA9IGdldF9hbXBfaW5kZXgoa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwogCWludCBjaGFuZ2UgPSAwOwogCiAJc25kX2hkYV9wb3dlcl91cChjb2RlYyk7CiAJaWYgKGNocyAmIDEpIHsKLQkJY2hhbmdlID0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4LAotCQkJCQkJICAweDdmLCAqdmFscCk7CisJCWNoYW5nZSA9IHVwZGF0ZV9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgsIG9mcywgKnZhbHApOwogCQl2YWxwKys7CiAJfQogCWlmIChjaHMgJiAyKQotCQljaGFuZ2UgfD0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4LAotCQkJCQkJICAgMHg3ZiwgKnZhbHApOworCQljaGFuZ2UgfD0gdXBkYXRlX2FtcF92YWx1ZShjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCwgb2ZzLCAqdmFscCk7CiAJc25kX2hkYV9wb3dlcl9kb3duKGNvZGVjKTsKIAlyZXR1cm4gY2hhbmdlOwogfQpAQCAtMTE5MCw2ICsxMzc4LDcgQEAKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0gZ2V0X2FtcF9uaWQoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAl1MzIgY2FwcywgdmFsMSwgdmFsMjsKIAogCWlmIChzaXplIDwgNCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKQpAQCAtMTE5OCw2ICsxMzg3LDcgQEAKIAl2YWwyID0gKGNhcHMgJiBBQ19BTVBDQVBfU1RFUF9TSVpFKSA+PiBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUOwogCXZhbDIgPSAodmFsMiArIDEpICogMjU7CiAJdmFsMSA9IC0oKGNhcHMgJiBBQ19BTVBDQVBfT0ZGU0VUKSA+PiBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKTsKKwl2YWwxICs9IG9mczsKIAl2YWwxID0gKChpbnQpdmFsMSkgKiAoKGludCl2YWwyKTsKIAlpZiAocHV0X3VzZXIoU05EUlZfQ1RMX1RMVlRfREJfU0NBTEUsIF90bHYpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEyNjgsNyArMTQ1OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2N0bF9hZGQpOwogCi0jaWZkZWYgQ09ORklHX1NORF9IREFfUkVDT05GSUcKIC8qIENsZWFyIGFsbCBjb250cm9scyBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4gY29kZWMgKi8KIHZvaWQgc25kX2hkYV9jdGxzX2NsZWFyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTI3OSw5ICsxNDY4LDUyIEBACiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5taXhlcnMpOwogfQogCi12b2lkIHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCisvKiBwc2V1ZG8gZGV2aWNlIGxvY2tpbmcKKyAqIHRvZ2dsZSBjYXJkLT5zaHV0ZG93biB0byBhbGxvdy9kaXNhbGxvdyB0aGUgZGV2aWNlIGFjY2VzcyAoYXMgYSBoYWNrKQorICovCitzdGF0aWMgaW50IGhkYV9sb2NrX2RldmljZXMoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogewotCWludCBpOworCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJaWYgKGNhcmQtPnNodXRkb3duKSB7CisJCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNhcmQtPnNodXRkb3duID0gMTsKKwlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhkYV91bmxvY2tfZGV2aWNlcyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwljYXJkLT5zaHV0ZG93biA9IDA7CisJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOworfQorCitpbnQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjb2RlYy0+YnVzLT5jYXJkOworCWludCBpLCBwY207CisKKwlpZiAoaGRhX2xvY2tfZGV2aWNlcyhjYXJkKSA8IDApCisJCXJldHVybiAtRUJVU1k7CisJLyogY2hlY2sgd2hldGhlciB0aGUgY29kZWMgaXNuJ3QgdXNlZCBieSBhbnkgbWl4ZXIgb3IgUENNIHN0cmVhbXMgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmNhcmQtPmN0bF9maWxlcykpIHsKKwkJaGRhX3VubG9ja19kZXZpY2VzKGNhcmQpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlmb3IgKHBjbSA9IDA7IHBjbSA8IGNvZGVjLT5udW1fcGNtczsgcGNtKyspIHsKKwkJc3RydWN0IGhkYV9wY20gKmNwY20gPSAmY29kZWMtPnBjbV9pbmZvW3BjbV07CisJCWlmICghY3BjbS0+cGNtKQorCQkJY29udGludWU7CisJCWlmIChjcGNtLT5wY20tPnN0cmVhbXNbMF0uc3Vic3RyZWFtX29wZW5lZCB8fAorCQkgICAgY3BjbS0+cGNtLT5zdHJlYW1zWzFdLnN1YnN0cmVhbV9vcGVuZWQpIHsKKwkJCWhkYV91bmxvY2tfZGV2aWNlcyhjYXJkKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiBPSywgbGV0IGl0IGZyZWUgKi8KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAljYW5jZWxfZGVsYXllZF93b3JrKCZjb2RlYy0+cG93ZXJfd29yayk7CkBAIC0xMjkxLDggKzE1MjMsNyBAQAogCS8qIHJlbGFzZSBQQ01zICovCiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fcGNtczsgaSsrKSB7CiAJCWlmIChjb2RlYy0+cGNtX2luZm9baV0ucGNtKSB7Ci0JCQlzbmRfZGV2aWNlX2ZyZWUoY29kZWMtPmJ1cy0+Y2FyZCwKLQkJCQkJY29kZWMtPnBjbV9pbmZvW2ldLnBjbSk7CisJCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgY29kZWMtPnBjbV9pbmZvW2ldLnBjbSk7CiAJCQljbGVhcl9iaXQoY29kZWMtPnBjbV9pbmZvW2ldLmRldmljZSwKIAkJCQkgIGNvZGVjLT5idXMtPnBjbV9kZXZfYml0cyk7CiAJCX0KQEAgLTEzMDUsMTMgKzE1MzYsMjIgQEAKIAlmcmVlX2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5hbXBfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2FtcF9pbmZvKSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2NhY2hlX2hlYWQpKTsKKwkvKiBmcmVlIG9ubHkgZHJpdmVyX3BpbnMgc28gdGhhdCBpbml0X3BpbnMgKyB1c2VyX3BpbnMgYXJlIHJlc3RvcmVkICovCisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5kcml2ZXJfcGlucyk7CisJcmVzdG9yZV9waW5jZmdzKGNvZGVjKTsKIAljb2RlYy0+bnVtX3BjbXMgPSAwOwogCWNvZGVjLT5wY21faW5mbyA9IE5VTEw7CiAJY29kZWMtPnByZXNldCA9IE5VTEw7CisJbWVtc2V0KCZjb2RlYy0+cGF0Y2hfb3BzLCAwLCBzaXplb2YoY29kZWMtPnBhdGNoX29wcykpOworCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IE5VTEw7CisJY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCA9IDA7CiAJbW9kdWxlX3B1dChjb2RlYy0+b3duZXIpOwogCWNvZGVjLT5vd25lciA9IE5VTEw7CisKKwkvKiBhbGxvdyBkZXZpY2UgYWNjZXNzIGFnYWluICovCisJaGRhX3VubG9ja19kZXZpY2VzKGNhcmQpOworCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1JFQ09ORklHICovCiAKIC8qIGNyZWF0ZSBhIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wgYW5kIGFkZCBzbGF2ZXMgKi8KIGludCBzbmRfaGRhX2FkZF92bWFzdGVyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjaGFyICpuYW1lLApAQCAtMTMzNiwxNSArMTU3NiwyMCBAQAogCQogCWZvciAocyA9IHNsYXZlczsgKnM7IHMrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICpzY3RsOwotCi0JCXNjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAqcyk7Ci0JCWlmICghc2N0bCkgewotCQkJc25kX3ByaW50ZGQoIkNhbm5vdCBmaW5kIHNsYXZlICVzLCBza2lwcGVkXG4iLCAqcyk7Ci0JCQljb250aW51ZTsKKwkJaW50IGkgPSAwOworCQlmb3IgKDs7KSB7CisJCQlzY3RsID0gX3NuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICpzLCBpKTsKKwkJCWlmICghc2N0bCkgeworCQkJCWlmICghaSkKKwkJCQkJc25kX3ByaW50ZGQoIkNhbm5vdCBmaW5kIHNsYXZlICVzLCAiCisJCQkJCQkgICAgInNraXBwZWRcbiIsICpzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKGtjdGwsIHNjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCWkrKzsKIAkJfQotCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZShrY3RsLCBzY3RsKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE5NTUsNiArMjIwMCw4IEBACiAJfQogCWZvciAoZGlnX21peCA9IGRpZ19pbl9jdGxzOyBkaWdfbWl4LT5uYW1lOyBkaWdfbWl4KyspIHsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MShkaWdfbWl4LCBjb2RlYyk7CisJCWlmICgha2N0bCkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gbmlkOwogCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGtjdGwpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTIwNzQsOCArMjMyMSw3IEBACiAJCQkJICogZG9uJ3QgcG93ZXIgZG93biB0aGUgd2lkZ2V0IGlmIGl0IGNvbnRyb2xzCiAJCQkJICogZWFwZCBhbmQgRUFQRF9CVExFTkFCTEUgaXMgc2V0LgogCQkJCSAqLwotCQkJCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLAotCQkJCQkJCSAgICBBQ19QQVJfUElOX0NBUCk7CisJCQkJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAkJCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX0VBUEQpIHsKIAkJCQkJaW50IGVhcGQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsCiAJCQkJCQluaWQsIDAsCkBAIC0yMTQ0LDYgKzIzOTAsNyBAQAogCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCiAJCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAogCQkJICAgIEFDX1BXUlNUX0QwKTsKKwlyZXN0b3JlX3BpbmNmZ3MoY29kZWMpOyAvKiByZXN0b3JlIGFsbCBjdXJyZW50IHBpbiBjb25maWdzICovCiAJaGRhX2V4ZWNfaW5pdF92ZXJicyhjb2RlYyk7CiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMucmVzdW1lKQogCQljb2RlYy0+cGF0Y2hfb3BzLnJlc3VtZShjb2RlYyk7CkBAIC0yMTcxLDggKzI0MTgsMTYgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29kZWMsICZidXMtPmNvZGVjX2xpc3QsIGxpc3QpIHsKIAkJaW50IGVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGJ1aWxkIGNvbnRyb2xzIgorCQkJICAgICAgICJmb3IgIyVkIChlcnJvciAlZClcbiIsIGNvZGVjLT5hZGRyLCBlcnIpOyAKKwkJCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImhkYV9jb2RlYzogY2Fubm90IHJldmVydCBjb2RlY1xuIik7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxODEsMTkgKzI0MzYsMTIgQEAKIGludCBzbmRfaGRhX2NvZGVjX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWludCBlcnIgPSAwOwotCS8qIGZha2UgYXMgaWYgYWxyZWFkeSBwb3dlcmVkLW9uICovCi0JaGRhX2tlZXBfcG93ZXJfb24oY29kZWMpOwotCS8qIHRoZW4gZmlyZSB1cCAqLwotCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCi0JCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAotCQkJICAgIEFDX1BXUlNUX0QwKTsKIAloZGFfZXhlY19pbml0X3ZlcmJzKGNvZGVjKTsKIAkvKiBjb250aW51ZSB0byBpbml0aWFsaXplLi4uICovCiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMuaW5pdCkKIAkJZXJyID0gY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlpZiAoIWVyciAmJiBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX2NvbnRyb2xzKQogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX2NvbnRyb2xzKGNvZGVjKTsKLQlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwpAQCAtMjMwNiwxMiArMjU1NCwxMSBAQAogc3RhdGljIGludCBzbmRfaGRhX3F1ZXJ5X3N1cHBvcnRlZF9wY20oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJdTMyICpyYXRlc3AsIHU2NCAqZm9ybWF0c3AsIHVuc2lnbmVkIGludCAqYnBzcCkKIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgdmFsLCBzdHJlYW1zOworCXVuc2lnbmVkIGludCBpLCB2YWwsIHdjYXBzOwogCiAJdmFsID0gMDsKLQlpZiAobmlkICE9IGNvZGVjLT5hZmcgJiYKLQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfRk9STUFUX09WUkQpKSB7CisJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJaWYgKG5pZCAhPSBjb2RlYy0+YWZnICYmICh3Y2FwcyAmIEFDX1dDQVBfRk9STUFUX09WUkQpKSB7CiAJCXZhbCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUENNKTsKIAkJaWYgKHZhbCA9PSAtMSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMjMyNSwxNSArMjU3MiwyMCBAQAogCQkJaWYgKHZhbCAmICgxIDw8IGkpKQogCQkJCXJhdGVzIHw9IHJhdGVfYml0c1tpXS5hbHNhX2JpdHM7CiAJCX0KKwkJaWYgKHJhdGVzID09IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogcmF0ZXMgPT0gMCAiCisJCQkJICAgIihuaWQ9MHgleCwgdmFsPTB4JXgsIG92cmQ9JWkpXG4iLAorCQkJCQluaWQsIHZhbCwKKwkJCQkJKHdjYXBzICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkgPyAxIDogMCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCQkqcmF0ZXNwID0gcmF0ZXM7CiAJfQogCiAJaWYgKGZvcm1hdHNwIHx8IGJwc3ApIHsKIAkJdTY0IGZvcm1hdHMgPSAwOwotCQl1bnNpZ25lZCBpbnQgYnBzOwotCQl1bnNpZ25lZCBpbnQgd2NhcHM7CisJCXVuc2lnbmVkIGludCBzdHJlYW1zLCBicHM7CiAKLQkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CiAJCXN0cmVhbXMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1NUUkVBTSk7CiAJCWlmIChzdHJlYW1zID09IC0xKQogCQkJcmV0dXJuIC1FSU87CkBAIC0yMzg2LDYgKzI2MzgsMTUgQEAKIAkJCWZvcm1hdHMgfD0gU05EUlZfUENNX0ZNVEJJVF9VODsKIAkJCWJwcyA9IDg7CiAJCX0KKwkJaWYgKGZvcm1hdHMgPT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBmb3JtYXRzID09IDAgIgorCQkJCSAgICIobmlkPTB4JXgsIHZhbD0weCV4LCBvdnJkPSVpLCAiCisJCQkJICAgInN0cmVhbXM9MHgleClcbiIsCisJCQkJCW5pZCwgdmFsLAorCQkJCQkod2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSA/IDEgOiAwLAorCQkJCQlzdHJlYW1zKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJCWlmIChmb3JtYXRzcCkKIAkJCSpmb3JtYXRzcCA9IGZvcm1hdHM7CiAJCWlmIChicHNwKQpAQCAtMjUwMSwxMiArMjc2MiwxNiBAQAogc3RhdGljIGludCBzZXRfcGNtX2RlZmF1bHRfdmFsdWVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvKQogeworCWludCBlcnI7CisKIAkvKiBxdWVyeSBzdXBwb3J0IFBDTSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbiBOSUQgKi8KIAlpZiAoaW5mby0+bmlkICYmICghaW5mby0+cmF0ZXMgfHwgIWluZm8tPmZvcm1hdHMpKSB7Ci0JCXNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShjb2RlYywgaW5mby0+bmlkLAorCQllcnIgPSBzbmRfaGRhX3F1ZXJ5X3N1cHBvcnRlZF9wY20oY29kZWMsIGluZm8tPm5pZCwKIAkJCQlpbmZvLT5yYXRlcyA/IE5VTEwgOiAmaW5mby0+cmF0ZXMsCiAJCQkJaW5mby0+Zm9ybWF0cyA/IE5VTEwgOiAmaW5mby0+Zm9ybWF0cywKIAkJCQlpbmZvLT5tYXhicHMgPyBOVUxMIDogJmluZm8tPm1heGJwcyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGluZm8tPm9wcy5vcGVuID09IE5VTEwpCiAJCWluZm8tPm9wcy5vcGVuID0gaGRhX3BjbV9kZWZhdWx0X29wZW5fY2xvc2U7CkBAIC0yNTQ5LDEzICsyODE0LDEwIEBACiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF1ZGlvX2lkeCk7IGkrKykgewogCQkJZGV2ID0gYXVkaW9faWR4W2ldOwogCQkJaWYgKCF0ZXN0X2JpdChkZXYsIGJ1cy0+cGNtX2Rldl9iaXRzKSkKLQkJCQlicmVhazsKKwkJCQlnb3RvIG9rOwogCQl9Ci0JCWlmIChpID49IEFSUkFZX1NJWkUoYXVkaW9faWR4KSkgewotCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlRvbyBtYW55IGF1ZGlvIGRldmljZXNcbiIpOwotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQkJYnJlYWs7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJUb28gbWFueSBhdWRpbyBkZXZpY2VzXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJY2FzZSBIREFfUENNX1RZUEVfU1BESUY6CiAJY2FzZSBIREFfUENNX1RZUEVfSERNSToKIAljYXNlIEhEQV9QQ01fVFlQRV9NT0RFTToKQEAgLTI1NzAsNiArMjgzMiw3IEBACiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIFBDTSB0eXBlICVkXG4iLCB0eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorIG9rOgogCXNldF9iaXQoZGV2LCBidXMtPnBjbV9kZXZfYml0cyk7CiAJcmV0dXJuIGRldjsKIH0KQEAgLTI2MDYsMjQgKzI4NjksMzYgQEAKIAkJaWYgKCFjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX3BjbXMpCiAJCQlyZXR1cm4gMDsKIAkJZXJyID0gY29kZWMtPnBhdGNoX29wcy5idWlsZF9wY21zKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBidWlsZCBQQ01zIgorCQkJICAgICAgICJmb3IgIyVkIChlcnJvciAlZClcbiIsIGNvZGVjLT5hZGRyLCBlcnIpOyAKKwkJCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImhkYV9jb2RlYzogY2Fubm90IHJldmVydCBjb2RlY1xuIik7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQogCX0KIAlmb3IgKHBjbSA9IDA7IHBjbSA8IGNvZGVjLT5udW1fcGNtczsgcGNtKyspIHsKIAkJc3RydWN0IGhkYV9wY20gKmNwY20gPSAmY29kZWMtPnBjbV9pbmZvW3BjbV07CiAJCWludCBkZXY7CiAKIAkJaWYgKCFjcGNtLT5zdHJlYW1bMF0uc3Vic3RyZWFtcyAmJiAhY3BjbS0+c3RyZWFtWzFdLnN1YnN0cmVhbXMpCi0JCQlyZXR1cm4gMDsgLyogbm8gc3Vic3RyZWFtcyBhc3NpZ25lZCAqLworCQkJY29udGludWU7IC8qIG5vIHN1YnN0cmVhbXMgYXNzaWduZWQgKi8KIAogCQlpZiAoIWNwY20tPnBjbSkgewogCQkJZGV2ID0gZ2V0X2VtcHR5X3BjbV9kZXZpY2UoY29kZWMtPmJ1cywgY3BjbS0+cGNtX3R5cGUpOwogCQkJaWYgKGRldiA8IDApCi0JCQkJcmV0dXJuIDA7CisJCQkJY29udGludWU7IC8qIG5vIGZhdGFsIGVycm9yICovCiAJCQljcGNtLT5kZXZpY2UgPSBkZXY7CiAJCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9wY20oY29kZWMsIGNwY20pOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBhdHRhY2ggIgorCQkJCSAgICAgICAiUENNIHN0cmVhbSAlZCBmb3IgY29kZWMgIyVkXG4iLAorCQkJCSAgICAgICBkZXYsIGNvZGVjLT5hZGRyKTsKKwkJCQljb250aW51ZTsgLyogbm8gZmF0YWwgZXJyb3IgKi8KKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTMzMjQsOCArMzU5OSw3IEBACiAJCWlmIChpZ25vcmVfbmlkcyAmJiBpc19pbl9uaWRfbGlzdChuaWQsIGlnbm9yZV9uaWRzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJY29udGludWU7CiAJCWxvYyA9IGdldF9kZWZjZmdfbG9jYXRpb24oZGVmX2NvbmYpOwpAQCAtMzQwMSwxMCArMzY3NSwyMiBAQAogCQkJY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0FVWF0gPSBuaWQ7CiAJCQlicmVhazsKIAkJY2FzZSBBQ19KQUNLX1NQRElGX09VVDoKLQkJCWNmZy0+ZGlnX291dF9waW4gPSBuaWQ7CisJCWNhc2UgQUNfSkFDS19ESUdfT1RIRVJfT1VUOgorCQkJaWYgKGNmZy0+ZGlnX291dHMgPj0gQVJSQVlfU0laRShjZmctPmRpZ19vdXRfcGlucykpCisJCQkJY29udGludWU7CisJCQljZmctPmRpZ19vdXRfcGluc1tjZmctPmRpZ19vdXRzXSA9IG5pZDsKKwkJCWNmZy0+ZGlnX291dF90eXBlW2NmZy0+ZGlnX291dHNdID0KKwkJCQkobG9jID09IEFDX0pBQ0tfTE9DX0hETUkpID8KKwkJCQlIREFfUENNX1RZUEVfSERNSSA6IEhEQV9QQ01fVFlQRV9TUERJRjsKKwkJCWNmZy0+ZGlnX291dHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFDX0pBQ0tfU1BESUZfSU46CisJCWNhc2UgQUNfSkFDS19ESUdfT1RIRVJfSU46CiAJCQljZmctPmRpZ19pbl9waW4gPSBuaWQ7CisJCQlpZiAobG9jID09IEFDX0pBQ0tfTE9DX0hETUkpCisJCQkJY2ZnLT5kaWdfaW5fdHlwZSA9IEhEQV9QQ01fVFlQRV9IRE1JOworCQkJZWxzZQorCQkJCWNmZy0+ZGlnX2luX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTM1MTAsNiArMzc5Niw5IEBACiAJCSAgIGNmZy0+aHBfcGluc1sxXSwgY2ZnLT5ocF9waW5zWzJdLAogCQkgICBjZmctPmhwX3BpbnNbM10sIGNmZy0+aHBfcGluc1s0XSk7CiAJc25kX3ByaW50ZCgiICAgbW9ubzogbW9ub19vdXQ9MHgleFxuIiwgY2ZnLT5tb25vX291dF9waW4pOworCWlmIChjZmctPmRpZ19vdXRzKQorCQlzbmRfcHJpbnRkKCIgICBkaWctb3V0PTB4JXgvMHgleFxuIiwKKwkJCSAgIGNmZy0+ZGlnX291dF9waW5zWzBdLCBjZmctPmRpZ19vdXRfcGluc1sxXSk7CiAJc25kX3ByaW50ZCgiICAgaW5wdXRzOiBtaWM9MHgleCwgZm1pYz0weCV4LCBsaW5lPTB4JXgsIGZsaW5lPTB4JXgsIgogCQkgICAiIGNkPTB4JXgsIGF1eD0weCV4XG4iLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSwKQEAgLTM1MTgsNiArMzgwNyw4IEBACiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9MSU5FXSwKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0NEXSwKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0FVWF0pOworCWlmIChjZmctPmRpZ19pbl9waW4pCisJCXNuZF9wcmludGQoIiAgIGRpZy1pbj0weCV4XG4iLCBjZmctPmRpZ19pbl9waW4pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAppbmRleCAwOWEzMzJhLi4yZmRlY2Y0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKQEAgLTczOSw2ICs3MzksNyBAQAogCWhkYV9uaWRfdCBtZmc7CS8qIE1GRyBub2RlIGlkICovCiAKIAkvKiBpZHMgKi8KKwl1MzIgZnVuY3Rpb25faWQ7CiAJdTMyIHZlbmRvcl9pZDsKIAl1MzIgc3Vic3lzdGVtX2lkOwogCXUzMiByZXZpc2lvbl9pZDsKQEAgLTc3OCwxMSArNzc5LDE0IEBACiAJdW5zaWduZWQgc2hvcnQgc3BkaWZfY3RsczsJLyogU1BESUYgY29udHJvbCBiaXRzICovCiAJdW5zaWduZWQgaW50IHNwZGlmX2luX2VuYWJsZTsJLyogU1BESUYgaW5wdXQgZW5hYmxlPyAqLwogCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7IC8qIG9wdGlvbmFsIGRpZ2l0YWwgb3V0IHNsYXZlIHdpZGdldHMgKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IGluaXRfcGluczsJLyogaW5pdGlhbCAoQklPUykgcGluIGNvbmZpZ3VyYXRpb25zICovCisJc3RydWN0IHNuZF9hcnJheSBkcml2ZXJfcGluczsJLyogcGluIGNvbmZpZ3Mgc2V0IGJ5IGNvZGVjIHBhcnNlciAqLwogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfSFdERVAKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcDsJLyogYXNzaWduZWQgaHdkZXAgZGV2aWNlICovCiAJc3RydWN0IHNuZF9hcnJheSBpbml0X3ZlcmJzOwkvKiBhZGRpdGlvbmFsIGluaXQgdmVyYnMgKi8KIAlzdHJ1Y3Qgc25kX2FycmF5IGhpbnRzOwkJLyogYWRkaXRpb25hbCBoaW50cyAqLworCXN0cnVjdCBzbmRfYXJyYXkgdXNlcl9waW5zOwkvKiBkZWZhdWx0IHBpbiBjb25maWdzIHRvIG92ZXJyaWRlICovCiAjZW5kaWYKIAogCS8qIG1pc2MgZmxhZ3MgKi8KQEAgLTc5MCw2ICs3OTQsOSBAQAogCQkJCQkgICAgICogc3RhdHVzIGNoYW5nZQogCQkJCQkgICAgICogKGUuZy4gUmVhbHRlayBjb2RlY3MpCiAJCQkJCSAgICAgKi8KKwl1bnNpZ25lZCBpbnQgcGluX2FtcF93b3JrYXJvdW5kOjE7IC8qIHBpbiBvdXQtYW1wIHRha2VzIGluZGV4CisJCQkJCSAgICAqIChlLmcuIENvbmV4YW50IGNvZGVjcykKKwkJCQkJICAgICovCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCXVuc2lnbmVkIGludCBwb3dlcl9vbiA6MTsJLyogY3VycmVudCAoZ2xvYmFsKSBwb3dlci1zdGF0ZSAqLwogCXVuc2lnbmVkIGludCBwb3dlcl90cmFuc2l0aW9uIDoxOyAvKiBwb3dlci1zdGF0ZSBpbiB0cmFuc2l0aW9uICovCkBAIC04NTUsNiArODYyLDE4IEBACiAjZGVmaW5lIHNuZF9oZGFfc2VxdWVuY2Vfd3JpdGVfY2FjaGUJc25kX2hkYV9zZXF1ZW5jZV93cml0ZQogI2VuZGlmCiAKKy8qIHRoZSBzdHJ1Y3QgZm9yIGNvZGVjLT5waW5fY29uZmlncyAqLworc3RydWN0IGhkYV9waW5jZmcgeworCWhkYV9uaWRfdCBuaWQ7CisJdW5zaWduZWQgaW50IGNmZzsKK307CisKK3Vuc2lnbmVkIGludCBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpOworaW50IHNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNmZyk7CitpbnQgc25kX2hkYV9hZGRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2FycmF5ICpsaXN0LAorCQkgICAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNmZyk7IC8qIGZvciBod2RlcCAqLworCiAvKgogICogTWl4ZXIKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCmluZGV4IDY1NzQ1ZTkuLjFkNTc5N2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKQEAgLTE0NCw5ICsxNDQsOSBAQAogCW5vZGUtPnR5cGUgPSAobm9kZS0+d2lkX2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKIAogCWlmIChub2RlLT50eXBlID09IEFDX1dJRF9QSU4pIHsKLQkJbm9kZS0+cGluX2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5vZGUtPm5pZCwgQUNfUEFSX1BJTl9DQVApOworCQlub2RlLT5waW5fY2FwcyA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5vZGUtPm5pZCk7CiAJCW5vZGUtPnBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5vZGUtPm5pZCwgMCwgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKLQkJbm9kZS0+ZGVmX2NmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbm9kZS0+bmlkLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCW5vZGUtPmRlZl9jZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5vZGUtPm5pZCk7CiAJfQogCiAJaWYgKG5vZGUtPndpZF9jYXBzICYgQUNfV0NBUF9PVVRfQU1QKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwppbmRleCA0ODJmYjAzLi4xYzU3NTA1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKQEAgLTMwLDYgKzMwLDEyIEBACiAjaW5jbHVkZSA8c291bmQvaGRhX2h3ZGVwLmg+CiAjaW5jbHVkZSA8c291bmQvbWlub3JzLmg+CiAKKy8qIGhpbnQgc3RyaW5nIHBhaXIgKi8KK3N0cnVjdCBoZGFfaGludCB7CisJY29uc3QgY2hhciAqa2V5OworCWNvbnN0IGNoYXIgKnZhbDsJLyogY29udGFpbmVkIGluIHRoZSBzYW1lIGFsbG9jIGFzIGtleSAqLworfTsKKwogLyoKICAqIHdyaXRlL3JlYWQgYW4gb3V0LW9mLWJvdW5kIHZlcmIKICAqLwpAQCAtOTksMTYgKzEwNSwxNyBAQAogCiBzdGF0aWMgdm9pZCBjbGVhcl9od2RlcF9lbGVtZW50cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQljaGFyICoqaGVhZDsKIAlpbnQgaTsKIAogCS8qIGNsZWFyIGluaXQgdmVyYnMgKi8KIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmluaXRfdmVyYnMpOwogCS8qIGNsZWFyIGhpbnRzICovCi0JaGVhZCA9IGNvZGVjLT5oaW50cy5saXN0OwotCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aGludHMudXNlZDsgaSsrLCBoZWFkKyspCi0JCWtmcmVlKCpoZWFkKTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJa2ZyZWUoaGludC0+a2V5KTsgLyogd2UgZG9uJ3QgbmVlZCB0byBmcmVlIGhpbnQtPnZhbCAqLworCX0KIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmhpbnRzKTsKKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPnVzZXJfcGlucyk7CiB9CiAKIHN0YXRpYyB2b2lkIGh3ZGVwX2ZyZWUoc3RydWN0IHNuZF9od2RlcCAqaHdkZXApCkBAIC0xNDAsNyArMTQ3LDggQEAKICNlbmRpZgogCiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3ZlcmJzLCBzaXplb2Yoc3RydWN0IGhkYV92ZXJiKSwgMzIpOwotCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aGludHMsIHNpemVvZihjaGFyICopLCAzMik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5oaW50cywgc2l6ZW9mKHN0cnVjdCBoZGFfaGludCksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPnVzZXJfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTMsNyArMTYxLDEzIEBACiAKIHN0YXRpYyBpbnQgY2xlYXJfY29kZWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRoZSBjb2RlYyBpcyBiZWluZyB1c2VkLCBjYW4ndCBmcmVlLlxuIik7CisJCXJldHVybiBlcnI7CisJfQogCWNsZWFyX2h3ZGVwX2VsZW1lbnRzKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MiwyMCArMTc2LDI5IEBACiB7CiAJaW50IGVycjsKIAorCXNuZF9oZGFfcG93ZXJfdXAoY29kZWMpOwogCXNuZF9wcmludGsoS0VSTl9JTkZPICJoZGEtY29kZWM6IHJlY29uZmlndXJpbmdcbiIpOwotCXNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJUaGUgY29kZWMgaXMgYmVpbmcgdXNlZCwgY2FuJ3QgcmVjb25maWd1cmUuXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CiAJZXJyID0gc25kX2hkYV9jb2RlY19jb25maWd1cmUoY29kZWMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycm9yOwogCS8qIHJlYnVpbGQgUENNcyAqLwogCWVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfcGNtcyhjb2RlYyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyb3I7CiAJLyogcmVidWlsZCBtaXhlcnMgKi8KIAllcnIgPSBzbmRfaGRhX2NvZGVjX2J1aWxkX2NvbnRyb2xzKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gc25kX2NhcmRfcmVnaXN0ZXIoY29kZWMtPmJ1cy0+Y2FyZCk7CisJCWdvdG8gZXJyb3I7CisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY29kZWMtPmJ1cy0+Y2FyZCk7CisgZXJyb3I6CisJc25kX2hkYV9wb3dlcl9kb3duKGNvZGVjKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtMjcxLDQ3ICsyOTQsMTk1IEBACiBDT0RFQ19BQ1RJT05fU1RPUkUocmVjb25maWcpOwogQ09ERUNfQUNUSU9OX1NUT1JFKGNsZWFyKTsKIAorc3RhdGljIHNzaXplX3QgaW5pdF92ZXJic19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5pbml0X3ZlcmJzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3ZlcmIgKnYgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmluaXRfdmVyYnMsIGkpOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkJIjB4JTAyeCAweCUwM3ggMHglMDR4XG4iLAorCQkJCXYtPm5pZCwgdi0+dmVyYiwgdi0+cGFyYW0pOworCX0KKwlyZXR1cm4gbGVuOworfQorCiBzdGF0aWMgc3NpemVfdCBpbml0X3ZlcmJzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKLQljaGFyICpwOwotCXN0cnVjdCBoZGFfdmVyYiB2ZXJiLCAqdjsKKwlzdHJ1Y3QgaGRhX3ZlcmIgKnY7CisJaW50IG5pZCwgdmVyYiwgcGFyYW07CiAKLQl2ZXJiLm5pZCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnAsIDApOwotCXZlcmIudmVyYiA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKTsKLQl2ZXJiLnBhcmFtID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDApOwotCWlmICghdmVyYi5uaWQgfHwgIXZlcmIudmVyYiB8fCAhdmVyYi5wYXJhbSkKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVpICVpICVpIiwgJm5pZCwgJnZlcmIsICZwYXJhbSkgIT0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuaWQgfHwgIXZlcmIpCiAJCXJldHVybiAtRUlOVkFMOwogCXYgPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aW5pdF92ZXJicyk7CiAJaWYgKCF2KQogCQlyZXR1cm4gLUVOT01FTTsKLQkqdiA9IHZlcmI7CisJdi0+bmlkID0gbmlkOworCXYtPnZlcmIgPSB2ZXJiOworCXYtPnBhcmFtID0gcGFyYW07CiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBoaW50c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSIlcyA9ICVzXG4iLCBoaW50LT5rZXksIGhpbnQtPnZhbCk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2hpbnQgKmdldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJaWYgKCFzdHJjbXAoaGludC0+a2V5LCBrZXkpKQorCQkJcmV0dXJuIGhpbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdHJhaWxfc3BhY2VzKGNoYXIgKnN0cikKK3sKKwljaGFyICpwOworCWlmICghKnN0cikKKwkJcmV0dXJuOworCXAgPSBzdHIgKyBzdHJsZW4oc3RyKSAtIDE7CisJZm9yICg7IGlzc3BhY2UoKnApOyBwLS0pIHsKKwkJKnAgPSAwOworCQlpZiAocCA9PSBzdHIpCisJCQlyZXR1cm47CisJfQorfQorCisjZGVmaW5lIE1BWF9ISU5UUwkxMDI0CisKIHN0YXRpYyBzc2l6ZV90IGhpbnRzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqcDsKLQljaGFyICoqaGludDsKKwljaGFyICprZXksICp2YWw7CisJc3RydWN0IGhkYV9oaW50ICpoaW50OwogCi0JaWYgKCEqYnVmIHx8IGlzc3BhY2UoKmJ1ZikgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQorCXdoaWxlIChpc3NwYWNlKCpidWYpKQorCQlidWYrKzsKKwlpZiAoISpidWYgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQogCQlyZXR1cm4gY291bnQ7Ci0JcCA9IGtzdHJuZHVwX25vZW9sKGJ1ZiwgMTAyNCk7Ci0JaWYgKCFwKQorCWlmICgqYnVmID09ICc9JykKKwkJcmV0dXJuIC1FSU5WQUw7CisJa2V5ID0ga3N0cm5kdXBfbm9lb2woYnVmLCAxMDI0KTsKKwlpZiAoIWtleSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaGludCA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5oaW50cyk7CisJLyogZXh0cmFjdCBrZXkgYW5kIHZhbCAqLworCXZhbCA9IHN0cmNocihrZXksICc9Jyk7CisJaWYgKCF2YWwpIHsKKwkJa2ZyZWUoa2V5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSp2YWwrKyA9IDA7CisJd2hpbGUgKGlzc3BhY2UoKnZhbCkpCisJCXZhbCsrOworCXJlbW92ZV90cmFpbF9zcGFjZXMoa2V5KTsKKwlyZW1vdmVfdHJhaWxfc3BhY2VzKHZhbCk7CisJaGludCA9IGdldF9oaW50KGNvZGVjLCBrZXkpOworCWlmIChoaW50KSB7CisJCS8qIHJlcGxhY2UgKi8KKwkJa2ZyZWUoaGludC0+a2V5KTsKKwkJaGludC0+a2V5ID0ga2V5OworCQloaW50LT52YWwgPSB2YWw7CisJCXJldHVybiBjb3VudDsKKwl9CisJLyogYWxsb2NhdGUgYSBuZXcgaGludCBlbnRyeSAqLworCWlmIChjb2RlYy0+aGludHMudXNlZCA+PSBNQVhfSElOVFMpCisJCWhpbnQgPSBOVUxMOworCWVsc2UKKwkJaGludCA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5oaW50cyk7CiAJaWYgKCFoaW50KSB7Ci0JCWtmcmVlKHApOworCQlrZnJlZShrZXkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JKmhpbnQgPSBwOworCWhpbnQtPmtleSA9IGtleTsKKwloaW50LT52YWwgPSB2YWw7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBwaW5fY29uZmlnc19zaG93KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCXN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCQkJY2hhciAqYnVmKQoreworCWludCBpLCBsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKGxpc3QsIGkpOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIweCUwMnggMHglMDh4XG4iLAorCQkJICAgICAgIHBpbi0+bmlkLCBwaW4tPmNmZyk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGluaXRfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT5pbml0X3BpbnMsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVzZXJfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRyaXZlcl9waW5fY29uZmlnc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgYnVmKTsKK30KKworI2RlZmluZSBNQVhfUElOX0NPTkZJR1MJCTMyCisKK3N0YXRpYyBzc2l6ZV90IHVzZXJfcGluX2NvbmZpZ3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCWludCBuaWQsIGNmZzsKKwlpbnQgZXJyOworCisJaWYgKHNzY2FuZihidWYsICIlaSAlaSIsICZuaWQsICZjZmcpICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghbmlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSBzbmRfaGRhX2FkZF9waW5jZmcoY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBuaWQsIGNmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMzAsOCArNTAxLDExIEBACiAJQ09ERUNfQVRUUl9STyhtZmcpLAogCUNPREVDX0FUVFJfUlcobmFtZSksCiAJQ09ERUNfQVRUUl9SVyhtb2RlbG5hbWUpLAotCUNPREVDX0FUVFJfV08oaW5pdF92ZXJicyksCi0JQ09ERUNfQVRUUl9XTyhoaW50cyksCisJQ09ERUNfQVRUUl9SVyhpbml0X3ZlcmJzKSwKKwlDT0RFQ19BVFRSX1JXKGhpbnRzKSwKKwlDT0RFQ19BVFRSX1JPKGluaXRfcGluX2NvbmZpZ3MpLAorCUNPREVDX0FUVFJfUlcodXNlcl9waW5fY29uZmlncyksCisJQ09ERUNfQVRUUl9STyhkcml2ZXJfcGluX2NvbmZpZ3MpLAogCUNPREVDX0FUVFJfV08ocmVjb25maWcpLAogCUNPREVDX0FUVFJfV08oY2xlYXIpLAogfTsKQEAgLTM1MCw0ICs1MjQsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIExvb2sgZm9yIGhpbnQgc3RyaW5nCisgKi8KK2NvbnN0IGNoYXIgKnNuZF9oZGFfZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBnZXRfaGludChjb2RlYywga2V5KTsKKwlyZXR1cm4gaGludCA/IGhpbnQtPnZhbCA6IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2dldF9oaW50KTsKKworaW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCWNvbnN0IGNoYXIgKnAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCBrZXkpOworCWlmICghcCB8fCAhKnApCisJCXJldHVybiAtRU5PRU5UOworCXN3aXRjaCAodG91cHBlcigqcCkpIHsKKwljYXNlICdUJzogLyogdHJ1ZSAqLworCWNhc2UgJ1knOiAvKiB5ZXMgKi8KKwljYXNlICcxJzoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfYm9vbF9oaW50KTsKKwogI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1JFQ09ORklHICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCAxMWU3OTFiLi4zMDgyOWVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTM4MSw2ICszODEsNyBAQAogCiAJLyogSEQgY29kZWMgKi8KIAl1bnNpZ25lZCBzaG9ydCBjb2RlY19tYXNrOworCWludCAgY29kZWNfcHJvYmVfbWFzazsgLyogY29waWVkIGZyb20gcHJvYmVfbWFzayBvcHRpb24gKi8KIAlzdHJ1Y3QgaGRhX2J1cyAqYnVzOwogCiAJLyogQ09SQi9SSVJCICovCkBAIC04NTgsMTMgKzg1OSwxOCBAQAogCQkgICAgICBTRF9DVExfRE1BX1NUQVJUIHwgU0RfSU5UX01BU0spOwogfQogCi0vKiBzdG9wIGEgc3RyZWFtICovCi1zdGF0aWMgdm9pZCBhenhfc3RyZWFtX3N0b3Aoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCisvKiBzdG9wIERNQSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9jbGVhcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKIHsKLQkvKiBzdG9wIERNQSAqLwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSAmCiAJCSAgICAgIH4oU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKSk7CiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9TVFMsIFNEX0lOVF9NQVNLKTsgLyogdG8gYmUgc3VyZSAqLworfQorCisvKiBzdG9wIGEgc3RyZWFtICovCitzdGF0aWMgdm9pZCBhenhfc3RyZWFtX3N0b3Aoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCit7CisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKIAkvKiBkaXNhYmxlIFNJRSAqLwogCWF6eF93cml0ZWIoY2hpcCwgSU5UQ1RMLAogCQkgICBhenhfcmVhZGIoY2hpcCwgSU5UQ1RMKSAmIH4oMSA8PCBhenhfZGV2LT5pbmRleCkpOwpAQCAtMTA3NSw4ICsxMDgxLDcgQEAKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBMLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCAwKTsKIAotCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwotCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IHBlcmlvZF9ieXRlczsKKwlwZXJpb2RfYnl0ZXMgPSBhenhfZGV2LT5wZXJpb2RfYnl0ZXM7CiAJcGVyaW9kcyA9IGF6eF9kZXYtPmJ1ZnNpemUgLyBwZXJpb2RfYnl0ZXM7CiAKIAkvKiBwcm9ncmFtIHRoZSBpbml0aWFsIEJETCBlbnRyaWVzICovCkBAIC0xMTIzLDI0ICsxMTI4LDE3IEBACiAgZXJyb3I6CiAJc25kX3ByaW50ayhLRVJOX0VSUiAiVG9vIG1hbnkgQkRMIGVudHJpZXM6IGJ1ZmZlcj0lZCwgcGVyaW9kPSVkXG4iLAogCQkgICBhenhfZGV2LT5idWZzaXplLCBwZXJpb2RfYnl0ZXMpOwotCS8qIHJlc2V0ICovCi0JYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQTCwgMCk7Ci0JYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQVSwgMCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qCi0gKiBzZXQgdXAgdGhlIFNEIGZvciBzdHJlYW1pbmcKLSAqLwotc3RhdGljIGludCBhenhfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKKy8qIHJlc2V0IHN0cmVhbSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9yZXNldChzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAlpbnQgdGltZW91dDsKIAotCS8qIG1ha2Ugc3VyZSB0aGUgcnVuIGJpdCBpcyB6ZXJvIGZvciBTRCAqLwotCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSAmCi0JCSAgICAgIH5TRF9DVExfRE1BX1NUQVJUKTsKLQkvKiByZXNldCBzdHJlYW0gKi8KKwlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOworCiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9DVEwsIGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpIHwKIAkJICAgICAgU0RfQ1RMX1NUUkVBTV9SRVNFVCk7CiAJdWRlbGF5KDMpOwpAQCAtMTE1Nyw3ICsxMTU1LDE1IEBACiAJd2hpbGUgKCgodmFsID0gYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkpICYgU0RfQ1RMX1NUUkVBTV9SRVNFVCkgJiYKIAkgICAgICAgLS10aW1lb3V0KQogCQk7Cit9CiAKKy8qCisgKiBzZXQgdXAgdGhlIFNEIGZvciBzdHJlYW1pbmcKKyAqLworc3RhdGljIGludCBhenhfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKK3sKKwkvKiBtYWtlIHN1cmUgdGhlIHJ1biBiaXQgaXMgemVybyBmb3IgU0QgKi8KKwlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOwogCS8qIHByb2dyYW0gdGhlIHN0cmVhbV90YWcgKi8KIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0NUTCwKIAkJICAgICAgKGF6eF9zZF9yZWFkbChhenhfZGV2LCBTRF9DVEwpICYgflNEX0NUTF9TVFJFQU1fVEFHX01BU0spfApAQCAtMTIyOCw3ICsxMjM0LDYgQEAKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGF6eF9jb2RlY19jcmVhdGUoc3RydWN0IGF6eCAqY2hpcCwgY29uc3QgY2hhciAqbW9kZWwsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGNvZGVjX3Byb2JlX21hc2ssCiAJCQkJICAgICAgaW50IG5vX2luaXQpCiB7CiAJc3RydWN0IGhkYV9idXNfdGVtcGxhdGUgYnVzX3RlbXA7CkBAIC0xMjYxLDcgKzEyNjYsNyBAQAogCiAJLyogRmlyc3QgdHJ5IHRvIHByb2JlIGFsbCBnaXZlbiBjb2RlYyBzbG90cyAqLwogCWZvciAoYyA9IDA7IGMgPCBtYXhfc2xvdHM7IGMrKykgewotCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjb2RlY19wcm9iZV9tYXNrKSB7CisJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKIAkJCWlmIChwcm9iZV9jb2RlYyhjaGlwLCBjKSA8IDApIHsKIAkJCQkvKiBTb21lIEJJT1NlbiBnaXZlIHlvdSB3cm9uZyBjb2RlYyBhZGRyZXNzZXMKIAkJCQkgKiB0aGF0IGRvbid0IGV4aXN0CkBAIC0xMjg1LDcgKzEyOTAsNyBAQAogCiAJLyogVGhlbiBjcmVhdGUgY29kZWMgaW5zdGFuY2VzICovCiAJZm9yIChjID0gMDsgYyA8IG1heF9zbG90czsgYysrKSB7Ci0JCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNvZGVjX3Byb2JlX21hc2spIHsKKwkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY2hpcC0+Y29kZWNfcHJvYmVfbWFzaykgewogCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CiAJCQllcnIgPSBzbmRfaGRhX2NvZGVjX25ldyhjaGlwLT5idXMsIGMsICFub19pbml0LCAmY29kZWMpOwogCQkJaWYgKGVyciA8IDApCkBAIC0xNDAzLDYgKzE0MDgsOCBAQAogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGF6eF9kZXY7CiAJc25kX3BjbV9zZXRfc3luYyhzdWJzdHJlYW0pOwogCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CisKKwlhenhfc3RyZWFtX3Jlc2V0KGNoaXAsIGF6eF9kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDI5LDYgKzE0MzYsMTEgQEAKIHN0YXRpYyBpbnQgYXp4X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogeworCXN0cnVjdCBhenhfZGV2ICphenhfZGV2ID0gZ2V0X2F6eF9kZXYoc3Vic3RyZWFtKTsKKworCWF6eF9kZXYtPmJ1ZnNpemUgPSAwOworCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IDA7CisJYXp4X2Rldi0+Zm9ybWF0X3ZhbCA9IDA7CiAJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCiAJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CkBAIC0xNDQzLDYgKzE0NTUsOSBAQAogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUEwsIDApOwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUFUsIDApOwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQ1RMLCAwKTsKKwlhenhfZGV2LT5idWZzaXplID0gMDsKKwlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSAwOworCWF6eF9kZXYtPmZvcm1hdF92YWwgPSAwOwogCiAJaGluZm8tPm9wcy5jbGVhbnVwKGhpbmZvLCBhcGNtLT5jb2RlYywgc3Vic3RyZWFtKTsKIApAQCAtMTQ1NiwyMyArMTQ3MSwzNyBAQAogCXN0cnVjdCBhenhfZGV2ICphenhfZGV2ID0gZ2V0X2F6eF9kZXYoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvID0gYXBjbS0+aGluZm9bc3Vic3RyZWFtLT5zdHJlYW1dOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgaW50IGJ1ZnNpemUsIHBlcmlvZF9ieXRlcywgZm9ybWF0X3ZhbDsKKwlpbnQgZXJyOwogCi0JYXp4X2Rldi0+YnVmc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwotCWF6eF9kZXYtPmZvcm1hdF92YWwgPSBzbmRfaGRhX2NhbGNfc3RyZWFtX2Zvcm1hdChydW50aW1lLT5yYXRlLAotCQkJCQkJCSBydW50aW1lLT5jaGFubmVscywKLQkJCQkJCQkgcnVudGltZS0+Zm9ybWF0LAotCQkJCQkJCSBoaW5mby0+bWF4YnBzKTsKLQlpZiAoIWF6eF9kZXYtPmZvcm1hdF92YWwpIHsKKwlmb3JtYXRfdmFsID0gc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQocnVudGltZS0+cmF0ZSwKKwkJCQkJCXJ1bnRpbWUtPmNoYW5uZWxzLAorCQkJCQkJcnVudGltZS0+Zm9ybWF0LAorCQkJCQkJaGluZm8tPm1heGJwcyk7CisJaWYgKCFmb3JtYXRfdmFsKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYCiAJCQkgICAiaW52YWxpZCBmb3JtYXRfdmFsLCByYXRlPSVkLCBjaD0lZCwgZm9ybWF0PSVkXG4iLAogCQkJICAgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWJ1ZnNpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwlwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwogCXNuZF9wcmludGRkKCJhenhfcGNtX3ByZXBhcmU6IGJ1ZnNpemU9MHgleCwgZm9ybWF0PTB4JXhcbiIsCi0JCSAgICBhenhfZGV2LT5idWZzaXplLCBhenhfZGV2LT5mb3JtYXRfdmFsKTsKLQlpZiAoYXp4X3NldHVwX3BlcmlvZHMoY2hpcCwgc3Vic3RyZWFtLCBhenhfZGV2KSA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCQkgICAgYnVmc2l6ZSwgZm9ybWF0X3ZhbCk7CisKKwlpZiAoYnVmc2l6ZSAhPSBhenhfZGV2LT5idWZzaXplIHx8CisJICAgIHBlcmlvZF9ieXRlcyAhPSBhenhfZGV2LT5wZXJpb2RfYnl0ZXMgfHwKKwkgICAgZm9ybWF0X3ZhbCAhPSBhenhfZGV2LT5mb3JtYXRfdmFsKSB7CisJCWF6eF9kZXYtPmJ1ZnNpemUgPSBidWZzaXplOworCQlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSBwZXJpb2RfYnl0ZXM7CisJCWF6eF9kZXYtPmZvcm1hdF92YWwgPSBmb3JtYXRfdmFsOworCQllcnIgPSBhenhfc2V0dXBfcGVyaW9kcyhjaGlwLCBzdWJzdHJlYW0sIGF6eF9kZXYpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJYXp4X3NldHVwX2NvbnRyb2xsZXIoY2hpcCwgYXp4X2Rldik7CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCWF6eF9kZXYtPmZpZm9fc2l6ZSA9IGF6eF9zZF9yZWFkdyhhenhfZGV2LCBTRF9GSUZPU0laRSkgKyAxOwpAQCAtMTk0NywxNiArMTk3NiwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF6eF9yZXN1bWVfZWFybHkoc3RydWN0IHBjaV9kZXYgKnBjaSkKLXsKLQlyZXR1cm4gcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLX0KLQogc3RhdGljIGludCBhenhfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CiAJc3RydWN0IGF6eCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAorCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGRhLWludGVsOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsICIKIAkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iKTsKQEAgLTIwNjIsMjYgKzIwODgsMzEgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCS8qIENoZWNrIFZJQSBIRCBBdWRpbyBDb250cm9sbGVyIGV4aXN0ICovCi0JaWYgKGNoaXAtPnBjaS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfVklBICYmCi0JICAgIGNoaXAtPnBjaS0+ZGV2aWNlID09IFZJQV9IREFDX0RFVklDRV9JRCkgeworCXN3aXRjaCAoZml4KSB7CisJY2FzZSBQT1NfRklYX0xQSUI6CisJY2FzZSBQT1NfRklYX1BPU0JVRjoKKwkJcmV0dXJuIGZpeDsKKwl9CisKKwkvKiBDaGVjayBWSUEvQVRJIEhEIEF1ZGlvIENvbnRyb2xsZXIgZXhpc3QgKi8KKwlzd2l0Y2ggKGNoaXAtPmRyaXZlcl90eXBlKSB7CisJY2FzZSBBWlhfRFJJVkVSX1ZJQToKKwljYXNlIEFaWF9EUklWRVJfQVRJOgogCQljaGlwLT52aWFfZG1hcG9zX3BhdGNoID0gMTsKIAkJLyogVXNlIGxpbmsgcG9zaXRpb24gZGlyZWN0bHksIGF2b2lkIGFueSB0cmFuc2ZlciBwcm9ibGVtLiAqLwogCQlyZXR1cm4gUE9TX0ZJWF9MUElCOwogCX0KIAljaGlwLT52aWFfZG1hcG9zX3BhdGNoID0gMDsKIAotCWlmIChmaXggPT0gUE9TX0ZJWF9BVVRPKSB7Ci0JCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIHBvc2l0aW9uX2ZpeF9saXN0KTsKLQkJaWYgKHEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgImhkYV9pbnRlbDogcG9zaXRpb25fZml4IHNldCB0byAlZCAiCi0JCQkJICAgICJmb3IgZGV2aWNlICUwNHg6JTA0eFxuIiwKLQkJCQkgICAgcS0+dmFsdWUsIHEtPnN1YnZlbmRvciwgcS0+c3ViZGV2aWNlKTsKLQkJCXJldHVybiBxLT52YWx1ZTsKLQkJfQorCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIHBvc2l0aW9uX2ZpeF9saXN0KTsKKwlpZiAocSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiaGRhX2ludGVsOiBwb3NpdGlvbl9maXggc2V0IHRvICVkICIKKwkJICAgICAgICJmb3IgZGV2aWNlICUwNHg6JTA0eFxuIiwKKwkJICAgICAgIHEtPnZhbHVlLCBxLT5zdWJ2ZW5kb3IsIHEtPnN1YmRldmljZSk7CisJCXJldHVybiBxLT52YWx1ZTsKIAl9Ci0JcmV0dXJuIGZpeDsKKwlyZXR1cm4gUE9TX0ZJWF9BVVRPOwogfQogCiAvKgpAQCAtMjA5OCwyMyArMjEyOSwzNiBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDIwYWMsICJEZWxsIFN0dWRpbyBEZXNrdG9wIiwgMHgwMSksCiAJLyogaW5jbHVkaW5nIGJvZ3VzIEFMQzI2OCBpbiBzbG90IzIgdGhhdCBjb25mbGljdHMgd2l0aCBBTEM4ODggKi8KIAlTTkRfUENJX1FVSVJLKDB4MTdjMCwgMHg0MDg1LCAiTWVkaW9uIE1EOTY2MzAiLCAweDAxKSwKKwkvKiBmb3JjZWQgY29kZWMgc2xvdHMgKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0NiwgMHgxMjYyLCAiQVNVUyBXNUYiLCAweDEwMyksCiAJe30KIH07CiAKKyNkZWZpbmUgQVpYX0ZPUkNFX0NPREVDX01BU0sJMHgxMDAKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IGNoZWNrX3Byb2JlX21hc2soc3RydWN0IGF6eCAqY2hpcCwgaW50IGRldikKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCWlmIChwcm9iZV9tYXNrW2Rldl0gPT0gLTEpIHsKKwljaGlwLT5jb2RlY19wcm9iZV9tYXNrID0gcHJvYmVfbWFza1tkZXZdOworCWlmIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrID09IC0xKSB7CiAJCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIHByb2JlX21hc2tfbGlzdCk7CiAJCWlmIChxKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgImhkYV9pbnRlbDogcHJvYmVfbWFzayBzZXQgdG8gMHgleCAiCiAJCQkgICAgICAgImZvciBkZXZpY2UgJTA0eDolMDR4XG4iLAogCQkJICAgICAgIHEtPnZhbHVlLCBxLT5zdWJ2ZW5kb3IsIHEtPnN1YmRldmljZSk7Ci0JCQlwcm9iZV9tYXNrW2Rldl0gPSBxLT52YWx1ZTsKKwkJCWNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPSBxLT52YWx1ZTsKIAkJfQogCX0KKworCS8qIGNoZWNrIGZvcmNlZCBvcHRpb24gKi8KKwlpZiAoY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAhPSAtMSAmJgorCSAgICAoY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAmIEFaWF9GT1JDRV9DT0RFQ19NQVNLKSkgeworCQljaGlwLT5jb2RlY19tYXNrID0gY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAmIDB4ZmY7CisJCXByaW50ayhLRVJOX0lORk8gImhkYV9pbnRlbDogY29kZWNfbWFzayBmb3JjZWQgdG8gMHgleFxuIiwKKwkJICAgICAgIGNoaXAtPmNvZGVjX21hc2spOworCX0KIH0KIAogCkBAIC0yMjExLDkgKzIyNTUsMTcgQEAKIAlnY2FwID0gYXp4X3JlYWR3KGNoaXAsIEdDQVApOwogCXNuZF9wcmludGRkKCJjaGlwc2V0IGdsb2JhbCBjYXBhYmlsaXRpZXMgPSAweCV4XG4iLCBnY2FwKTsKIAorCS8qIEFUSSBjaGlwcyBzZWVtcyBidWdneSBhYm91dCA2NGJpdCBETUEgYWRkcmVzc2VzICovCisJaWYgKGNoaXAtPmRyaXZlcl90eXBlID09IEFaWF9EUklWRVJfQVRJKQorCQlnY2FwICY9IH4weDAxOworCiAJLyogYWxsb3cgNjRiaXQgRE1BIGFkZHJlc3MgaWYgc3VwcG9ydGVkIGJ5IEgvVyAqLwogCWlmICgoZ2NhcCAmIDB4MDEpICYmICFwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzY0QklUX01BU0spKQogCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfNjRCSVRfTUFTSyk7CisJZWxzZSB7CisJCXBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMzJCSVRfTUFTSyk7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8zMkJJVF9NQVNLKTsKKwl9CiAKIAkvKiByZWFkIG51bWJlciBvZiBzdHJlYW1zIGZyb20gR0NBUCByZWdpc3RlciBpbnN0ZWFkIG9mIHVzaW5nCiAJICogaGFyZGNvZGVkIHZhbHVlCkBAIC0yMzM1LDEwICsyMzg3LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJFcnJvciBjcmVhdGluZyBjYXJkIVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWVyciA9IGF6eF9jcmVhdGUoY2FyZCwgcGNpLCBkZXYsIHBjaV9pZC0+ZHJpdmVyX2RhdGEsICZjaGlwKTsKQEAgLTIzNDcsOCArMjM5OSw3IEBACiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAogCS8qIGNyZWF0ZSBjb2RlYyBpbnN0YW5jZXMgKi8KLQllcnIgPSBhenhfY29kZWNfY3JlYXRlKGNoaXAsIG1vZGVsW2Rldl0sIHByb2JlX21hc2tbZGV2XSwKLQkJCSAgICAgICBwcm9iZV9vbmx5W2Rldl0pOworCWVyciA9IGF6eF9jb2RlY19jcmVhdGUoY2hpcCwgbW9kZWxbZGV2XSwgcHJvYmVfb25seVtkZXZdKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMjQ0NSwxMCArMjQ5NiwxMCBAQAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMyKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAkvKiBUZXJhZGljaSAqLwogCXsgUENJX0RFVklDRSgweDY1NDksIDB4MTIwMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfVEVSQSB9LAogCS8qIEFNRCBHZW5lcmljLCBQQ0kgY2xhc3MgY29kZSBhbmQgVmVuZG9yIElEIGZvciBIRCBBdWRpbyAqLwpAQCAtMjQ2OCw3ICsyNTE5LDYgQEAKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoYXp4X3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPSBhenhfc3VzcGVuZCwKLQkucmVzdW1lX2Vhcmx5ID0gYXp4X3Jlc3VtZV9lYXJseSwKIAkucmVzdW1lID0gYXp4X3Jlc3VtZSwKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCmluZGV4IDQ0ZjE4OWMuLjgzMzQ5MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaApAQCAtMjYsOCArMjYsMTAgQEAKIC8qCiAgKiBmb3IgbWl4ZXIgY29udHJvbHMKICAqLworI2RlZmluZSBIREFfQ09NUE9TRV9BTVBfVkFMX09GUyhuaWQsY2hzLGlkeCxkaXIsb2ZzKQkJXAorCSgobmlkKSB8ICgoY2hzKTw8MTYpIHwgKChkaXIpPDwxOCkgfCAoKGlkeCk8PDE5KSB8ICgob2ZzKTw8MjMpKQogI2RlZmluZSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCxjaHMsaWR4LGRpcikgXAotCSgobmlkKSB8ICgoY2hzKTw8MTYpIHwgKChkaXIpPDwxOCkgfCAoKGlkeCk8PDE5KSkKKwlIREFfQ09NUE9TRV9BTVBfVkFMX09GUyhuaWQsIGNocywgaWR4LCBkaXIsIDApCiAvKiBtb25vIHZvbHVtZSB3aXRoIGluZGV4IChpbmRleD0wLDEsLi4uKSAoY2hhbm5lbD0xLDIpICovCiAjZGVmaW5lIEhEQV9DT0RFQ19WT0xVTUVfTU9OT19JRFgoeG5hbWUsIHhjaWR4LCBuaWQsIGNoYW5uZWwsIHhpbmRleCwgZGlyZWN0aW9uKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGNpZHgsICBcCkBAIC05Niw3ICs5OCw3IEBACiAJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsKIGludCBzbmRfaGRhX2FkZF92bWFzdGVyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjaGFyICpuYW1lLAogCQkJdW5zaWduZWQgaW50ICp0bHYsIGNvbnN0IGNoYXIgKipzbGF2ZXMpOwotdm9pZCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKK2ludCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIGludCBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qIGFtcCB2YWx1ZSBiaXRzICovCkBAIC0xMzQsNyArMTM2LDcgQEAKIAogc3RydWN0IGhkYV9iaW5kX2N0bHMgewogCXN0cnVjdCBoZGFfY3RsX29wcyAqb3BzOwotCWxvbmcgdmFsdWVzW107CisJdW5zaWduZWQgbG9uZyB2YWx1ZXNbXTsKIH07CiAKIGludCBzbmRfaGRhX21peGVyX2JpbmRfY3Rsc19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMjI3LDYgKzIyOSw3IEBACiAJaGRhX25pZF90IGhwX25pZDsJLyogb3B0aW9uYWwgREFDIGZvciBIUCwgMCB3aGVuIG5vdCBleGlzdHMgKi8KIAloZGFfbmlkX3QgZXh0cmFfb3V0X25pZFszXTsJLyogb3B0aW9uYWwgREFDcywgMCB3aGVuIG5vdCBleGlzdHMgKi8KIAloZGFfbmlkX3QgZGlnX291dF9uaWQ7CS8qIGRpZ2l0YWwgb3V0IGF1ZGlvIHdpZGdldCAqLworCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7CiAJaW50IG1heF9jaGFubmVsczsJLyogY3VycmVudGx5IHN1cHBvcnRlZCBhbmFsb2cgY2hhbm5lbHMgKi8KIAlpbnQgZGlnX291dF91c2VkOwkvKiBjdXJyZW50IHVzYWdlIG9mIGRpZ2l0YWwgb3V0IChIREFfRElHX1hYWCkgKi8KIAlpbnQgbm9fc2hhcmVfc3RyZWFtOwkvKiBkb24ndCBzaGFyZSBhIHN0cmVhbSB3aXRoIG11bHRpcGxlIHBpbnMgKi8KQEAgLTM1NCw5ICszNTcsMTIgQEAKIAlpbnQgbGluZV9vdXRfdHlwZTsJLyogQVVUT19QSU5fWFhYX09VVCAqLwogCWhkYV9uaWRfdCBocF9waW5zW0FVVE9fQ0ZHX01BWF9PVVRTXTsKIAloZGFfbmlkX3QgaW5wdXRfcGluc1tBVVRPX1BJTl9MQVNUXTsKLQloZGFfbmlkX3QgZGlnX291dF9waW47CisJaW50IGRpZ19vdXRzOworCWhkYV9uaWRfdCBkaWdfb3V0X3BpbnNbMl07CiAJaGRhX25pZF90IGRpZ19pbl9waW47CiAJaGRhX25pZF90IG1vbm9fb3V0X3BpbjsKKwlpbnQgZGlnX291dF90eXBlWzJdOyAvKiBIREFfUENNX1RZUEVfWFhYICovCisJaW50IGRpZ19pbl90eXBlOyAvKiBIREFfUENNX1RZUEVfWFhYICovCiB9OwogCiAjZGVmaW5lIGdldF9kZWZjZmdfY29ubmVjdChjZmcpIFwKQEAgLTQwNSw2ICs0MTEsNyBAQAogdTMyIHF1ZXJ5X2FtcF9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgZGlyZWN0aW9uKTsKIGludCBzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgZGlyLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNhcHMpOwordTMyIHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpOwogCiBpbnQgc25kX2hkYV9jdGxfYWRkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKTsKIHZvaWQgc25kX2hkYV9jdGxzX2NsZWFyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKQEAgLTQyNyw2ICs0MzQsMjMgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NORF9IREFfUkVDT05GSUcKK2NvbnN0IGNoYXIgKnNuZF9oZGFfZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSk7CitpbnQgc25kX2hkYV9nZXRfYm9vbF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK2NvbnN0IGNoYXIgKnNuZF9oZGFfZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZQoraW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCXJldHVybiAtRU5PRU5UOworfQorI2VuZGlmCisKIC8qCiAgKiBwb3dlci1tYW5hZ2VtZW50CiAgKi8KQEAgLTQ1OCw2ICs0ODIsNyBAQAogI2RlZmluZSBnZXRfYW1wX2NoYW5uZWxzKGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHgzKQogI2RlZmluZSBnZXRfYW1wX2RpcmVjdGlvbihrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE4KSAmIDB4MSkKICNkZWZpbmUgZ2V0X2FtcF9pbmRleChrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDB4ZikKKyNkZWZpbmUgZ2V0X2FtcF9vZmZzZXQoa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAyMykgJiAweDNmKQogCiAvKgogICogQ0VBIFNob3J0IEF1ZGlvIERlc2NyaXB0b3IgZGF0YQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCmluZGV4IDE0NGI4NTIuLjkzZDc0OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKQEAgLTM5OSw4ICszOTksMTAgQEAKIHsKIAlpbnQgYywgY3VyciA9IC0xOwogCi0JaWYgKGNvbm5fbGVuID4gMSAmJiB3aWRfdHlwZSAhPSBBQ19XSURfQVVEX01JWCAmJgotCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfVk9MX0tOQikKKwlpZiAoY29ubl9sZW4gPiAxICYmCisJICAgIHdpZF90eXBlICE9IEFDX1dJRF9BVURfTUlYICYmCisJICAgIHdpZF90eXBlICE9IEFDX1dJRF9WT0xfS05CICYmCisJICAgIHdpZF90eXBlICE9IEFDX1dJRF9QT1dFUikKIAkJY3VyciA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAwKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICIgIENvbm5lY3Rpb246ICVkXG4iLCBjb25uX2xlbik7CkBAIC00NjcsOCArNDY5LDkgQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICJDb2RlYzogJXNcbiIsCiAJCSAgICBjb2RlYy0+bmFtZSA/IGNvZGVjLT5uYW1lIDogIk5vdCBTZXQiKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJBZGRyZXNzOiAlZFxuIiwgY29kZWMtPmFkZHIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZlbmRvciBJZDogMHgleFxuIiwgY29kZWMtPnZlbmRvcl9pZCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiU3Vic3lzdGVtIElkOiAweCV4XG4iLCBjb2RlYy0+c3Vic3lzdGVtX2lkKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJGdW5jdGlvbiBJZDogMHgleFxuIiwgY29kZWMtPmZ1bmN0aW9uX2lkKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJWZW5kb3IgSWQ6IDB4JTA4eFxuIiwgY29kZWMtPnZlbmRvcl9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiU3Vic3lzdGVtIElkOiAweCUwOHhcbiIsIGNvZGVjLT5zdWJzeXN0ZW1faWQpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlJldmlzaW9uIElkOiAweCV4XG4iLCBjb2RlYy0+cmV2aXNpb25faWQpOwogCiAJaWYgKGNvZGVjLT5tZmcpCkBAIC01NTQsOCArNTU3LDE0IEBACiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEFtcC1PdXQgY2FwczogIik7CiAJCQlwcmludF9hbXBfY2FwcyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOwogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBBbXAtT3V0IHZhbHM6ICIpOwotCQkJcHJpbnRfYW1wX3ZhbHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVULAotCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLCAxKTsKKwkJCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfUElOICYmCisJCQkgICAgY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCkKKwkJCQlwcmludF9hbXBfdmFscyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsCisJCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLAorCQkJCQkgICAgICAgY29ubl9sZW4pOworCQkJZWxzZQorCQkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCwKKwkJCQkJICAgICAgIHdpZF9jYXBzICYgQUNfV0NBUF9TVEVSRU8sIDEpOwogCQl9CiAKIAkJc3dpdGNoICh3aWRfdHlwZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggZTQ4NjEyMy4uNWJiNDhlZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0yNywxMSArMjcsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCisjaW5jbHVkZSAiaGRhX2JlZXAuaCIKIAogc3RydWN0IGFkMTk4eF9zcGVjIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOwogCWludCBudW1fbWl4ZXJzOwotCisJdW5zaWduZWQgaW50IGJlZXBfYW1wOwkvKiBiZWVwIGFtcCB2YWx1ZSwgc2V0IHZpYSBzZXRfYmVlcF9hbXAoKSAqLwogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMIHRlcm1pbmF0aW9uIQogCQkJCQkJICovCkBAIC0xNTQsNiArMTU1LDE2IEBACiAKIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAorLyogYWRkaXRpb25hbCBiZWVwIG1peGVyczsgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFyZSBvdmVyd3JpdHRlbiBhdCBidWlsZCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkX2JlZXBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDAsIDAsIEhEQV9PVVRQVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKyNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIFwKKwkoKHNwZWMpLT5iZWVwX2FtcCA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCBpZHgsIGRpcikpIC8qIG1vbm8gKi8KKwogc3RhdGljIGludCBhZDE5OHhfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xODEsNiArMTkyLDIxIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIGNyZWF0ZSBiZWVwIGNvbnRyb2xzIGlmIG5lZWRlZCAqLworCWlmIChzcGVjLT5iZWVwX2FtcCkgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwkJZm9yIChrbmV3ID0gYWRfYmVlcF9taXhlcjsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CisJCQlpZiAoIWtjdGwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gc3BlYy0+YmVlcF9hbXA7CisJCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGtjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qIGlmIHdlIGhhdmUgbm8gbWFzdGVyIGNvbnRyb2wsIGxldCdzIGNyZWF0ZSBpdCAqLwogCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgewogCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CkBAIC00MDYsNyArNDMyLDggQEAKIAkJcmV0dXJuOwogCiAJYWQxOTh4X2ZyZWVfa2N0bHMoY29kZWMpOwotCWtmcmVlKGNvZGVjLT5zcGVjKTsKKwlrZnJlZShzcGVjKTsKKwlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBhZDE5OHhfcGF0Y2hfb3BzID0gewpAQCAtNTQ1LDggKzU3Miw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtNjEwLDggKzYzNSw3IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAotCSAgIEhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCisJLyogCiAJICAgSERBX0NPREVDX1ZPTFVNRSgiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCSAgIEhEQV9DT0RFQ19NVVRFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksICovCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtODA5LDggKzgzMyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCiAJewpAQCAtMTAwMiwxMCArMTAyNCw4IEBACiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY0MCwgIlRvc2hpYmEiLCBBRDE5ODZBX0xBUFRPUF9FQVBEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhiMDNjLCAiU2Ftc3VuZyBSNTUiLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAxZSwgIkZTQyBWMjA2MCIsIEFEMTk4NkFfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDIzLCAiU2Ftc3VuZyBYNjAiLCBBRDE5ODZBX1NBTVNVTkcpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjQsICJTYW1zdW5nIFI2NSIsIEFEMTk4NkFfU0FNU1VORyksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyNiwgIlNhbXN1bmcgWDExIiwgQUQxOTg2QV9TQU1TVU5HKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI3LCAiU2Ftc3VuZyBRMSIsIEFEMTk4NkFfVUxUUkEpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE0NGQsIDB4ZmYwMCwgMHhjMDAwLCAiU2Ftc3VuZyIsIEFEMTk4NkFfU0FNU1VORyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzUwNCwgIlNhbXN1bmcgUTM1IiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMTEsICJMZW5vdm8gTTU1IiwgQUQxOTg2QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMTcsICJMZW5vdm8gQTYwIiwgQUQxOTg2QV8zU1RBQ0spLApAQCAtMTAyNywxNSArMTA0NywxNCBAQAogCiBzdGF0aWMgaW50IGlzX2phY2tfYXZhaWxhYmxlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogewotCXVuc2lnbmVkIGludCBjb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJdW5zaWduZWQgaW50IGNvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJcmV0dXJuIGdldF9kZWZjZmdfY29ubmVjdChjb25mKSAhPSBBQ19KQUNLX1BPUlRfTk9ORTsKIH0KIAogc3RhdGljIGludCBwYXRjaF9hZDE5ODZhKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMDQzLDYgKzEwNjIsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDE5KTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDE4LCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDY7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTk4NmFfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxOTg2YV9kYWNfbmlkczsKQEAgLTEyMjIsOCArMTI0OCw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAxLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTI5NCw2ICsxMzE4LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTgzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKKwlpbnQgZXJyOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTEzMDEsNiArMTMyNiwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxOTgzX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4M19kYWNfbmlkczsKQEAgLTEzNzAsOCArMTQwMiw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTQxNiw4ICsxNDQ2LDggQEAKIAl7MHgxZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKIAl7MHgxZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDgwfSwKIAkvKiBNaWMgYm9vc3Q6IDBkQiAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAotCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUmVjb3JkIHNlbGVjdG9yOiBGcm9udCBtaWMgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCkBAIC0xNjgyLDEwICsxNzEyLDEwIEBACiAJU05EX1BDSV9RVUlSSygweDEwMTQsIDB4MDU5NywgIkxlbm92byBaNjAiLCBBRDE5ODFfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1YjcsICJMZW5vdm8gWjYwbSIsIEFEMTk4MV9USElOS1BBRCksCiAJLyogQWxsIEhQIG1vZGVscyAqLwotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAwLCAiSFAgbngiLCBBRDE5ODFfSFApLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTAzYywgIkhQIG54IiwgQUQxOTgxX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBVMjA1IiwgQUQxOTgxX1RPU0hJQkEpLAogCS8qIExlbm92byBUaGlua3BhZCBUNjAvWDYwL1o2eHggKi8KLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMCwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4MV9USElOS1BBRCksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTgxX1RISU5LUEFEKSwKIAkvKiBIUCBueDYzMjAgKHJldmVyc2VkIFNTSUQsIEgvVyBidWcpICovCiAJU05EX1BDSV9RVUlSSygweDMwYjAsIDB4MTAzYywgIkhQIG54NjMyMCIsIEFEMTk4MV9IUCksCiAJe30KQEAgLTE2OTQsNyArMTcyNCw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4MShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTcwMiw2ICsxNzMyLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwZCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE5ODFfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxOTgxX2RhY19uaWRzOwpAQCAtMTk4OCw5ICsyMDI1LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0KIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMjAzNCw5ICsyMDY4LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0KIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMjA2Niw5ICsyMDk3LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDEsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQogCUhEQV9DT0RFQ19WT0xVTUUoIkFuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQW5hbG9nIE1peCBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0yMjk3LDEwICsyMzI1LDYgQEAKIAl7MHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKLQkvKiBBRENzOyBtdXRlZCAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCiAJeyB9CiB9OwpAQCAtMjQwOCwxMCArMjQzMiw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBBbmFsb2cgTWl4IG91dHB1dCBhbXAgKi8KIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfCAweDFmfSwgLyogMGRCICovCiAJeyB9CkBAIC0yNDgzLDEwICsyNTAzLDYgQEAKIAl7MHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKLQkvKiBBRENzOyBtdXRlZCAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIEFuYWxvZyBNaXggb3V0cHV0IGFtcCAqLwogCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4MWZ9LCAvKiAwZEIgKi8KIAl7IH0KQEAgLTI4OTAsNyArMjkwNiw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBRDE5ODhfU1BESUZfT1VUOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBBRDE5ODhfU1BESUZfSU47CkBAIC0yOTQwLDcgKzI5NTYsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE5ODgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTI5NjAsNyArMjk3Niw3IEBACiAKIAlpZiAoYm9hcmRfY29uZmlnID09IEFEMTk4OF9BVVRPKSB7CiAJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwotCQlpbnQgZXJyID0gYWQxOTg4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwkJZXJyID0gYWQxOTg4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWFkMTk4eF9mcmVlKGNvZGVjKTsKIAkJCXJldHVybiBlcnI7CkBAIC0yOTcwLDYgKzI5ODYsMTMgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBBRDE5ODhfNlNUQUNLOgogCWNhc2UgQUQxOTg4XzZTVEFDS19ESUc6CkBAIC0zMTI2LDEyICszMTQ5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKLQkvKgotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkRpZ2l0YWwgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJEaWdpdGFsIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQkqLwogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzIwNCwxMCArMzIyMSwxMCBAQAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAkvKiBQb3J0LUIgKGZyb250IG1pYykgcGluICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFBvcnQtQyAocmVhciBtaWMpIHBpbiAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBBbmFsb2cgbWl4ZXI7IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKQEAgLTMyNDAsNyArMzI1Nyw3IEBACiAJIkNEIFBsYXliYWNrIFZvbHVtZSIsCiAJIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLAogCSJEb2NraW5nIE1pYyBQbGF5YmFjayBWb2x1bWUiCi0JIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwKKwkvKiAiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAqLwogCSJJRUM5NTggUGxheWJhY2sgVm9sdW1lIiwKIAlOVUxMCiB9OwpAQCAtMzI0OCw2ICszMjY1LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxODg0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKKwlpbnQgZXJyOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTMyNTUsNiArMzI3MywxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxODg0X2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTg4NF9kYWNfbmlkczsKQEAgLTMzMjEsOCArMzM0Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTMzNTgsNyArMzM4MSw3IEBACiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCiAJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogZG9ja2luZyBtaWMgYm9vc3QgKi8KLQl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAkvKiBBbmFsb2cgbWl4ZXIgLSBkb2NraW5nIG1pYzsgbXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKIAkvKiBlbmFibGUgRUFQRCBiaXQgKi8KQEAgLTMzNzksMTAgKzM0MDIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLUluIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUtSW4gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKLQkvKgotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCSovCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZS1JbiBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzQ2OCw3ICszNDg3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFkMTk4NF9jZmdfdGJsW10gPSB7CiAJLyogTGVub3ZvIFRoaW5rcGFkIFQ2MS9YNjEgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMCwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4NF9USElOS1BBRCksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTg0X1RISU5LUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjE0LCAiRGVsbCBUMzQwMCIsIEFEMTk4NF9ERUxMX0RFU0tUT1ApLAogCXt9CiB9OwpAQCAtMzU2MSw4ICszNTgwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzYyMiwxMCArMzYzOSwxMCBAQAogCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIFBvcnQtQiAoZnJvbnQgbWljKSBwaW4gKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUG9ydC1DIChyZWFyIGxpbmUtaW4pIHBpbiAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFBvcnQtRSAocmVhciBtaWMpIHBpbiAqLwogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LApAQCAtMzY5NSw4ICszNzEyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRG9jayBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM3MjQsOCArMzczOSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zODM2LDggKzM4NDksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM5MTEsOSArMzkyMiw5IEBACiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAzMCwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMzcsICJIUCAyMjMwcyIsIEFEMTg4NEFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDU2LCAiSFAiLCBBRDE4ODRBX01PQklMRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBlNiwgIkhQIDY3MzBiIiwgQUQxODg0QV9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZTcsICJIUCBFbGl0ZUJvb2sgODUzMHAiLCBBRDE4ODRBX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzYxNCwgIkhQIDY3MzBzIiwgQUQxODg0QV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHgzMDcwLCAiSFAiLCBBRDE4ODRBX01PQklMRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZmYwLCAweDMwZTAsICJIUCBsYXB0b3AiLCBBRDE4ODRBX0xBUFRPUCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDM2MDAsICJIUCBsYXB0b3AiLCBBRDE4ODRBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBhYywgIlRoaW5rcGFkIFgzMDAiLCBBRDE4ODRBX1RISU5LUEFEKSwKIAl7fQogfTsKQEAgLTM5MjEsNyArMzkzMiw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4NGEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTM5MjksNiArMzk0MCwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxODg0YV9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE4ODRhX2RhY19uaWRzOwpAQCAtMzk2Niw2ICszOTg0LDE0IEBACiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTg4NGFfaHBfdW5zb2xfZXZlbnQ7CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTg4NGFfaHBfaW5pdDsKKwkJLyogc2V0IHRoZSB1cHBlci1saW1pdCBmb3IgbWl4ZXIgYW1wIHRvIDBkQiBmb3IgYXZvaWRpbmcgdGhlCisJCSAqIHBvc3NpYmxlIGRhbWFnZSBieSBvdmVybG9hZGluZworCQkgKi8KKwkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgyMCwgSERBX0lOUFVULAorCQkJCQkgICgweDE3IDw8IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpIHwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKSB8CisJCQkJCSAgKDB4MDUgPDwgQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVCkgfAorCQkJCQkgICgxIDw8IEFDX0FNUENBUF9NVVRFX1NISUZUKSk7CiAJCWJyZWFrOwogCWNhc2UgQUQxODg0QV9USElOS1BBRDoKIAkJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTg0YV90aGlua3BhZF9taXhlcnM7CkBAIC00MDgzLDggKzQxMDksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC00MDk3LDggKzQxMjEsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIE1pYyBCb29zdCIsIDB4MWYsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtNDI1Nyw3ICs0Mjc5LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxODgyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00MjY1LDYgKzQyODcsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDY7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAzOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxODgyX2RhY19uaWRzOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKaW5kZXggZjNlYmU4My4uYzkyMTI2NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCkBAIC02ODAsMTMgKzY4MCwxMyBAQAogCQlzdHJ1Y3QgYXV0b19waW5fY2ZnIGNmZzsKIAogCQkvKiBjb2xsZWN0IHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQkJcG9ydF9lID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDBmLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCXBvcnRfZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlwb3J0X2UgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MGYpOworCQlwb3J0X2YgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MTApOwogCQlzcGVjLT5mcm9udF9wYW5lbCA9IDE7CiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9lKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSB8fAogCQkgICAgZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfZikgPT0gQUNfSkFDS19QT1JUX05PTkUpIHsKLQkJCXBvcnRfZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxZiwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQkJcG9ydF9oID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCQlwb3J0X2cgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MWYpOworCQkJcG9ydF9oID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDIwKTsKIAkJCXNwZWMtPmNoYW5uZWxfbW9kZXMgPSBjbWk5ODgwX2NoYW5uZWxfbW9kZXM7CiAJCQkvKiBubyBmcm9udCBwYW5lbCAqLwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X2cpID09IEFDX0pBQ0tfUE9SVF9OT05FIHx8CkBAIC03MDMsOCArNzAzLDggQEAKIAkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IGNtaTk4ODBfY2hhbm5lbF9tb2Rlc1swXS5jaGFubmVsczsKIAkJfSBlbHNlIHsKIAkJCXNwZWMtPmlucHV0X211eCA9ICZjbWk5ODgwX2Jhc2ljX211eDsKLQkJCXBvcnRfc3BkaWZpID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEzLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCQlwb3J0X3NwZGlmbyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMiwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJcG9ydF9zcGRpZmkgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MTMpOworCQkJcG9ydF9zcGRpZm8gPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MTIpOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X3NwZGlmbykgIT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBDTUlfRElHX09VVF9OSUQ7CiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfc3BkaWZpKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCAwMTc3ZWY4Li4xZjJhZDc2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC01OCw2ICs1OCw3IEBACiAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOwogCWludCBudW1fbWl4ZXJzOworCWhkYV9uaWRfdCB2bWFzdGVyX25pZDsKIAogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMCkBAIC03Miw2ICs3Myw3IEBACiAJCQkJCSAqLwogCXVuc2lnbmVkIGludCBjdXJfZWFwZDsKIAl1bnNpZ25lZCBpbnQgaHBfcHJlc2VudDsKKwl1bnNpZ25lZCBpbnQgbm9fYXV0b19taWM7CiAJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKIAogCS8qIGNhcHR1cmUgKi8KQEAgLTQ2MSw2ICs0NjMsMjkgQEAKIAlrZnJlZShjb2RlYy0+c3BlYyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHRfY2FwdHVyZV9taXhlcnNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAorCX0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbGF2ZV92b2xzW10gPSB7CisJIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCSJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNsYXZlX3N3c1tdID0geworCSJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAorCU5VTEwKK307CisKIHN0YXRpYyBpbnQgY29uZXhhbnRfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQ4OCw2ICs1MTMsMzIgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KKworCS8qIGlmIHdlIGhhdmUgbm8gbWFzdGVyIGNvbnRyb2wsIGxldCdzIGNyZWF0ZSBpdCAqLworCWlmIChzcGVjLT52bWFzdGVyX25pZCAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgeworCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CisJCXNuZF9oZGFfc2V0X3ZtYXN0ZXJfdGx2KGNvZGVjLCBzcGVjLT52bWFzdGVyX25pZCwKKwkJCQkJSERBX09VVFBVVCwgdm1hc3Rlcl90bHYpOworCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCQkJCSAgdm1hc3Rlcl90bHYsIHNsYXZlX3ZvbHMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChzcGVjLT52bWFzdGVyX25pZCAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKSkgeworCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCQkJCSAgTlVMTCwgc2xhdmVfc3dzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChzcGVjLT5pbnB1dF9tdXgpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIGN4dF9jYXB0dXJlX21peGVycyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzE5LDEzICs3NzAsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9taXhlcnNbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludCBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLApAQCAtNzU5LDEzICs4MDMsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDVfbWl4ZXJzX2hwNTMwW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKQEAgLTEwMDIsMTUgKzEwMzksOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNDVfY2ZnX3RibFtdID0gewotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYTUsICJIUCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjIsICJIUCBEViBTZXJpZXMiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI1LCAiSFAgRFYyMTIwIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNywgIkhQIERWNjAwMFoiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGJiLCAiSFAgRFY4MDAwIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZCwgIkhQIERWIFNlcmllcyIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2YsICJIUCBEVjk1MzNFRyIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZDUsICJIUCA1MzAiLCBDWFQ1MDQ1X0xBUFRPUF9IUDUzMCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBkOSwgIkhQIFNwYXJ0YW4iLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzAwMCwgIkhQIERWIFNlcmllcyIsCisJCQkgICBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjMxLCAiVG9zaGliYSBQMTA1IiwgQ1hUNTA0NV9MQVBUT1BfTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDA3NTMsICJCZW5xIFI1NUUiLCBDWFQ1MDQ1X0JFTlEpLAogCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDEwYWQsICJGdWppdHN1IFNpMTUyMCIsIENYVDUwNDVfTEFQVE9QX01JQ1NFTlNFKSwKQEAgLTEwMjAsOCArMTA1MSw4IEBACiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4MWU0MCwgIkZJQyIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDJmMDUsICJGSUMiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHgyZjA2LCAiRklDIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDE2MzEsIDB4YzEwNiwgIlBhY2thcmQgQmVsbCIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMDcsICJQYWNrYXJkIEJlbGwiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxNjMxLCAweGZmMDAsIDB4YzEwMCwgIlBhY2thcmQgQmVsbCIsCisJCQkgICBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHgyMTExLCAiQ29uZXhhbnQgUmVmZXJlbmNlIGJvYXJkIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCiAJe30KIH07CkBAIC0xMDM1LDYgKzEwNjYsNyBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQgPSAxOwogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoY3h0NTA0NV9kYWNfbmlkcyk7CkBAIC0xMTM0LDcgKzExNjYsNyBAQAogLyogQ29uZXhhbnQgNTA0NyBzcGVjaWZpYyAqLwogI2RlZmluZSBDWFQ1MDQ3X1NQRElGX09VVAkweDExCiAKLXN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19kYWNfbmlkc1syXSA9IHsgMHgxMCwgMHgxYyB9Oworc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2RhY19uaWRzWzFdID0geyAweDEwIH07IC8qIDB4MWMgKi8KIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19hZGNfbmlkc1sxXSA9IHsgMHgxMiB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2NhcHNyY19uaWRzWzFdID0geyAweDFhIH07CiAKQEAgLTExNDIsMjAgKzExNzQsNiBAQAogCXsgMiwgTlVMTCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDEsCi0JLml0ZW1zID0gewotCQl7ICJNaWMiLCAweDIgfSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N19ocF9jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMSwKLQkuaXRlbXMgPSB7Ci0JCXsgIkV4dE1pYyIsIDB4MiB9LAotCX0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X3Rvc2hpYmFfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewpAQCAtMTE3OSw3ICsxMTk3LDExIEBACiAJICogdGhlIGhlYWRwaG9uZSBqYWNrCiAJICovCiAJYml0cyA9ICghc3BlYy0+aHBfcHJlc2VudCAmJiBzcGVjLT5jdXJfZWFwZCkgPyAwIDogSERBX0FNUF9NVVRFOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMCwKKwkvKiBOT1RFOiBDb25leGF0IGNvZGVjIG5lZWRzIHRoZSBpbmRleCBmb3IgKk9VVFBVVCogYW1wIG9mCisJICogcGluIHdpZGdldHMgdW5saWtlIG90aGVyIGNvZGVjcy4gIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0bworCSAqIHNldCBpbmRleCAweDAxIGZvciB0aGUgdm9sdW1lIGZyb20gdGhlIG1peGVyIGFtcCAweDE5LgorCSAqLworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMHgwMSwKIAkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKIAliaXRzID0gc3BlYy0+Y3VyX2VhcGQgPyAwIDogSERBX0FNUF9NVVRFOwogCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxMywgSERBX09VVFBVVCwgMCwKQEAgLTExODcsMTYgKzEyMDksNiBAQAogCXJldHVybiAxOwogfQogCi0vKiBiaW5kIHZvbHVtZXMgb2YgYm90aCBOSUQgMHgxMyAoSGVhZHBob25lcykgYW5kIDB4MWQgKFNwZWFrZXJzKSAqLwotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGN4dDUwNDdfYmluZF9tYXN0ZXJfdm9sID0gewotCS5vcHMgPSAmc25kX2hkYV9iaW5kX3ZvbCwKLQkudmFsdWVzID0gewotCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTMsIDMsIDAsIEhEQV9PVVRQVVQpLAotCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWQsIDMsIDAsIEhEQV9PVVRQVVQpLAotCQkwCi0JfSwKLX07Ci0KIC8qIG11dGUgaW50ZXJuYWwgc3BlYWtlciBpZiBIUCBpcyBwbHVnZ2VkICovCiBzdGF0aWMgdm9pZCBjeHQ1MDQ3X2hwX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTIwNywyNyArMTIxOSw4IEBACiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKIAogCWJpdHMgPSAoc3BlYy0+aHBfcHJlc2VudCB8fCAhc3BlYy0+Y3VyX2VhcGQpID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci0JLyogTXV0ZS9Vbm11dGUgUENNIDIgZm9yIGdvb2QgbWVhc3VyZSAtIHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8KLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWMsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci19Ci0KLS8qIG11dGUgaW50ZXJuYWwgc3BlYWtlciBpZiBIUCBpcyBwbHVnZ2VkICovCi1zdGF0aWMgdm9pZCBjeHQ1MDQ3X2hwMl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXVuc2lnbmVkIGludCBiaXRzOwotCi0Jc3BlYy0+aHBfcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMywgMCwKLQkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCi0JYml0cyA9IHNwZWMtPmhwX3ByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQkvKiBNdXRlL1VubXV0ZSBQQ00gMiBmb3IgZ29vZCBtZWFzdXJlIC0gc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyAqLwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxYywgSERBX09VVFBVVCwgMCwKKwkvKiBTZWUgdGhlIG5vdGUgaW4gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0ICovCisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAweDAxLAogCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwogfQogCkBAIC0xMjY4LDkwICsxMjYxLDM1IEBACiAJfQogfQogCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nIC0gbm9uLUVBUEQgc3lzdGVtcyAqLwotc3RhdGljIHZvaWQgY3h0NTA0N19ocDJfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICB1bnNpZ25lZCBpbnQgcmVzKQotewotCXJlcyA+Pj0gMjY7Ci0Jc3dpdGNoIChyZXMpIHsKLQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQljeHQ1MDQ3X2hwMl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDQ3X2hwX2F1dG9taWMoY29kZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X21peGVyc1tdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgR2FpbiBWb2x1bWUiLCAweDFhLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgR2FpbiBTd2l0Y2giLCAweDFhLCAweDAsIEhEQV9PVVRQVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfYmFzZV9taXhlcnNbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQ00tMiBWb2x1bWUiLCAweDFjLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUENNLTIgU3dpdGNoIiwgMHgxYywgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDFkLCAweDAwLCBIREFfT1VUUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAorCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAorCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTMsCisJfSwKKworCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19ocF9zcGtfbWl4ZXJzW10gPSB7CisJLyogU2VlIHRoZSBub3RlIGluIGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCAqLworCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwMSwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCi0KIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfdG9zaGliYV9taXhlcnNbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJ5cGFzcyBDYXB0dXJlIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUENNIFN3aXRjaCIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9CSU5EX1ZPTCgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsICZjeHQ1MDQ3X2JpbmRfbWFzdGVyX3ZvbCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAotCX0sCi0KLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwweDAyLEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQ00gU3dpdGNoIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19ocF9vbmx5X21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAotCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAotCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTMsCi0JfSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xMzYyLDggKzEzMDAsOCBAQAogCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTnxBQ19QSU5DVExfVlJFRl81MCB9LAogCS8qIEhQLCBTcGVha2VyICAqLwogCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LAotCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDB9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwgLyogbWl4ZXIoMHgxOSkgKi8KKwl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIG1peGVyKDB4MTkpICovCiAJLyogUmVjb3JkIHNlbGVjdG9yOiBNaWMgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCkBAIC0xMzgzLDMwICsxMzIxLDcgQEAKIAogLyogY29uZmlndXJhdGlvbiBmb3IgVG9zaGliYSBMYXB0b3BzICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDdfdG9zaGliYV9pbml0X3ZlcmJzW10gPSB7Ci0JezB4MTMsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAgfSwgLyogZGVmYXVsdCBvbiAqLwotCS8qIHBpbiBzZW5zaW5nIG9uIEhQIGFuZCBNaWMgamFja3MgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVH0sCi0JLyogU3BlYWtlciByb3V0aW5nICovCi0JezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCi0Je30KLX07Ci0KLS8qIGNvbmZpZ3VyYXRpb24gZm9yIEhQIExhcHRvcHMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0N19ocF9pbml0X3ZlcmJzW10gPSB7Ci0JLyogcGluIHNlbnNpbmcgb24gSFAgamFjayAqLwotCXsweDEzLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAotCS8qIDB4MTMgaXMgYWN0dWFsbHkgc2hhcmVkIGJ5IGJvdGggSFAgYW5kIHNwZWFrZXI7Ci0JICogc2V0dGluZyB0aGUgY29ubmVjdGlvbiB0byAwICg9MHgxOSkgbWFrZXMgdGhlIG1hc3RlciB2b2x1bWUgY29udHJvbAotCSAqIHdvcmtpbmcgbXlzdGVyaW91c2xseS4uLgotCSAqLwotCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQkvKiBSZWNvcmQgc2VsZWN0b3I6IEV4dCBNaWMgKi8KLQl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCi0JezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JIEFDX0FNUF9TRVRfSU5QVVR8QUNfQU1QX1NFVF9SSUdIVHxBQ19BTVBfU0VUX0xFRlR8MHgxN30sCi0JLyogU3BlYWtlciByb3V0aW5nICovCi0JezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDB9LCAvKiBkZWZhdWx0IG9mZiAqLwogCXt9CiB9OwogCkBAIC0xNTcxLDExICsxNDg2LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ3X2NmZ190YmxbXSA9IHsKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGEwLCAiSFAgRFYxMDAwIiwgQ1hUNTA0N19MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYTUsICJIUCBEVjUyMDBUL0RWODAwMFQiLCBDWFQ1MDQ3X0xBUFRPUF9IUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiMiwgIkhQIERWMjAwMFQvRFYzMDAwVCIsIENYVDUwNDdfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI1LCAiSFAgRFYyMDAwWiIsIENYVDUwNDdfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY2NzAwIiwgQ1hUNTA0N19MQVBUT1ApLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzMDAwLCAiSFAgRFYgU2VyaWVzIiwKKwkJCSAgIENYVDUwNDdfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjMxLCAiVG9zaGliYSBQMTAwIiwgQ1hUNTA0N19MQVBUT1BfRUFQRCksCiAJe30KIH07CkBAIC0xNTg5LDYgKzE1MDIsNyBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQgPSAxOwogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoY3h0NTA0N19kYWNfbmlkcyk7CkBAIC0xNTk3LDkgKzE1MTEsOCBAQAogCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CiAJc3BlYy0+YWRjX25pZHMgPSBjeHQ1MDQ3X2FkY19uaWRzOwogCXNwZWMtPmNhcHNyY19uaWRzID0gY3h0NTA0N19jYXBzcmNfbmlkczsKLQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N19jYXB0dXJlX3NvdXJjZTsKIAlzcGVjLT5udW1fbWl4ZXJzID0gMTsKLQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X21peGVyczsKKwlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X2Jhc2VfbWl4ZXJzOwogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA0N19pbml0X3ZlcmJzOwogCXNwZWMtPnNwZGlmX3JvdXRlID0gMDsKQEAgLTE2MTMsMjEgKzE1MjYsMjIgQEAKIAkJCQkJCSAgY3h0NTA0N19jZmdfdGJsKTsKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewogCWNhc2UgQ1hUNTA0N19MQVBUT1A6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwMl91bnNvbF9ldmVudDsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfc3BrX21peGVyczsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA0N19MQVBUT1BfSFA6Ci0JCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ3X2hwX2NhcHR1cmVfc291cmNlOwotCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7Ci0JCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBjeHQ1MDQ3X2hwX2luaXRfdmVyYnM7Ci0JCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfaHBfbWl4ZXJzOworCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwkJc3BlYy0+bWl4ZXJzWzFdID0gY3h0NTA0N19ocF9vbmx5X21peGVyczsKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNDdfaHBfaW5pdDsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDQ3X0xBUFRPUF9FQVBEOgogCQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N190b3NoaWJhX2NhcHR1cmVfc291cmNlOworCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwkJc3BlYy0+bWl4ZXJzWzFdID0gY3h0NTA0N19ocF9zcGtfbWl4ZXJzOwogCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CiAJCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJiczsKLQkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N190b3NoaWJhX21peGVyczsKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKQEAgLTE2MzgsNiArMTU1Miw3IEBACiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogI2VuZGlmCQogCX0KKwlzcGVjLT52bWFzdGVyX25pZCA9IDB4MTM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzMsOCArMTU4OCwxMSBAQAogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDUxX3BvcnRiX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAorCWlmIChzcGVjLT5ub19hdXRvX21pYykKKwkJcmV0dXJuOwogCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTcsIDAsCiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYKIAkJQUNfUElOU0VOU0VfUFJFU0VOQ0U7CkBAIC0xNjkwLDYgKzE2MDgsOCBAQAogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCWhkYV9uaWRfdCBuZXdfYWRjOwogCisJaWYgKHNwZWMtPm5vX2F1dG9fbWljKQorCQlyZXR1cm47CiAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOCwgMCwKIAkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJgogCQlBQ19QSU5TRU5TRV9QUkVTRU5DRTsKQEAgLTE3NzYsNiArMTY5NiwyMiBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9ocF9kdjY3MzZfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAorCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAorCQkucHV0ID0gY3h0NTA1MV9ocF9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MWEsCisJfSwKKworCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfaW5pdF92ZXJic1tdID0gewogCS8qIExpbmUgaW4sIE1pYyAqLwogCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCkBAIC0xODA2LDYgKzE3NDIsNjYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfaHBfZHY2NzM2X2luaXRfdmVyYnNbXSA9IHsKKwkvKiBMaW5lIGluLCBNaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCS8qIEVBUEQgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBMaW5lIGluLCBNaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCS8qIFNQSyAgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIEhQLCBBbXAgICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIERvY2tpbmcgSFAgKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogREFDMSAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDQ0fSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHg0NH0sCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwkvKiBFQVBEICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVEJfRVZFTlR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVENfRVZFTlR9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNTFfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE4MjMsMTggKzE4MTksMjQgQEAKIGVudW0gewogCUNYVDUwNTFfTEFQVE9QLAkgLyogTGFwdG9wcyB3LyBFQVBEIHN1cHBvcnQgKi8KIAlDWFQ1MDUxX0hQLAkvKiBubyBkb2NraW5nICovCisJQ1hUNTA1MV9IUF9EVjY3MzYsCS8qIEhQIHdpdGhvdXQgbWljIHN3aXRjaCAqLworCUNYVDUwNTFfTEVOT1ZPX1gyMDAsCS8qIExlbm92byBYMjAwIGxhcHRvcCAqLwogCUNYVDUwNTFfTU9ERUxTCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqY3h0NTA1MV9tb2RlbHNbQ1hUNTA1MV9NT0RFTFNdID0gewogCVtDWFQ1MDUxX0xBUFRPUF0JPSAibGFwdG9wIiwKIAlbQ1hUNTA1MV9IUF0JCT0gImhwIiwKKwlbQ1hUNTA1MV9IUF9EVjY3MzZdCT0gImhwLWR2NjczNiIsCisJW0NYVDUwNTFfTEVOT1ZPX1gyMDBdCT0gImxlbm92by14MjAwIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDUxX2NmZ190YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY2NzM2IiwgQ1hUNTA1MV9IUF9EVjY3MzYpLAogCVNORF9QQ0lfUVVJUksoMHgxNGYxLCAweDAxMDEsICJDb25leGFudCBSZWZlcmVuY2UgYm9hcmQiLAogCQkgICAgICBDWFQ1MDUxX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4NTA1MSwgIkhQIFNwYXJ0YW4gMS4xIiwgQ1hUNTA1MV9IUCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIkxlbm92byBYMjAwIiwgQ1hUNTA1MV9MRU5PVk9fWDIwMCksCiAJe30KIH07CiAKQEAgLTE4NDcsNiArMTg0OSw3IEBACiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCA9IDE7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gY29uZXhhbnRfcGF0Y2hfb3BzOwogCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNTFfaW5pdDsKQEAgLTE4NjcsMTcgKzE4NzAsMjIgQEAKIAlzcGVjLT5jdXJfYWRjID0gMDsKIAlzcGVjLT5jdXJfYWRjX2lkeCA9IDA7CiAKKwljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA1MV9ocF91bnNvbF9ldmVudDsKKwogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDUxX01PREVMUywKIAkJCQkJCSAgY3h0NTA1MV9tb2RlbHMsCiAJCQkJCQkgIGN4dDUwNTFfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNTFfSFA6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX21peGVyczsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQljYXNlIENYVDUwNTFfTEFQVE9QOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA1MV9ocF91bnNvbF9ldmVudDsKKwljYXNlIENYVDUwNTFfSFBfRFY2NzM2OgorCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9ocF9kdjY3MzZfaW5pdF92ZXJiczsKKwkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9ocF9kdjY3MzZfbWl4ZXJzOworCQlzcGVjLT5ub19hdXRvX21pYyA9IDE7CisJCWJyZWFrOworCWNhc2UgQ1hUNTA1MV9MRU5PVk9fWDIwMDoKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfbGVub3ZvX3gyMDBfaW5pdF92ZXJiczsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IGVkOGZjYmQuLjgyMDk3NzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgorI2luY2x1ZGUgImhkYV9iZWVwLmgiCiAKICNkZWZpbmUgQUxDODgwX0ZST05UX0VWRU5UCQkweDAxCiAjZGVmaW5lIEFMQzg4MF9EQ1ZPTF9FVkVOVAkJMHgwMgpAQCAtNzcsNiArNzgsNyBAQAogCUFMQzI2MF9BQ0VSLAogCUFMQzI2MF9XSUxMLAogCUFMQzI2MF9SRVBMQUNFUl82NzJWLAorCUFMQzI2MF9GQVZPUklUMTAwLAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlBTEMyNjBfVEVTVCwKICNlbmRpZgpAQCAtMTAzLDYgKzEwNSw3IEBACiAJQUxDMjYyX05FQywKIAlBTEMyNjJfVE9TSElCQV9TMDYsCiAJQUxDMjYyX1RPU0hJQkFfUlgxLAorCUFMQzI2Ml9UWUFOLAogCUFMQzI2Ml9BVVRPLAogCUFMQzI2Ml9NT0RFTF9MQVNUIC8qIGxhc3QgdGFnICovCiB9OwpAQCAtMjM4LDYgKzI0MSwxMyBAQAogCUFMQzg4M19NT0RFTF9MQVNULAogfTsKIAorLyogc3R5bGVzIG9mIGNhcHR1cmUgc2VsZWN0aW9uICovCitlbnVtIHsKKwlDQVBUX01VWCA9IDAsCS8qIG9ubHkgbXV4IGJhc2VkICovCisJQ0FQVF9NSVgsCS8qIG9ubHkgbWl4ZXIgYmFzZWQgKi8KKwlDQVBUXzFNVVhfTUlYLAkvKiBmaXJzdCBtdXggYW5kIG90aGVyIG1peGVycyAqLworfTsKKwogLyogZm9yIEdQSU8gUG9sbCAqLwogI2RlZmluZSBHUElPX01BU0sJMHgwMwogCkBAIC0yNDYsNiArMjU2LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOwkvKiBtaXhlciBhcnJheXMgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX21peGVyczsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2FwX21peGVyOwkvKiBjYXB0dXJlIG1peGVyICovCisJdW5zaWduZWQgaW50IGJlZXBfYW1wOwkvKiBiZWVwIGFtcCB2YWx1ZSwgc2V0IHZpYSBzZXRfYmVlcF9hbXAoKSAqLwogCiAJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwKQEAgLTI2OSwxMyArMjgwLDE1IEBACiAJCQkJCSAqIGRpZ19vdXRfbmlkIGFuZCBocF9uaWQgYXJlIG9wdGlvbmFsCiAJCQkJCSAqLwogCWhkYV9uaWRfdCBhbHRfZGFjX25pZDsKKwloZGFfbmlkX3Qgc2xhdmVfZGlnX291dHNbM107CS8qIG9wdGlvbmFsIC0gZm9yIGF1dG8tcGFyc2luZyAqLworCWludCBkaWdfb3V0X3R5cGU7CiAKIAkvKiBjYXB0dXJlICovCiAJdW5zaWduZWQgaW50IG51bV9hZGNfbmlkczsKIAloZGFfbmlkX3QgKmFkY19uaWRzOwogCWhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CiAJaGRhX25pZF90IGRpZ19pbl9uaWQ7CQkvKiBkaWdpdGFsLWluIE5JRDsgb3B0aW9uYWwgKi8KLQl1bnNpZ25lZCBjaGFyIGlzX21peF9jYXB0dXJlOwkvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAobm9uLW11eCkgKi8KKwlpbnQgY2FwdHVyZV9zdHlsZTsJCS8qIGNhcHR1cmUgc3R5bGUgKENBUFRfKikgKi8KIAogCS8qIGNhcHR1cmUgc291cmNlICovCiAJdW5zaWduZWQgaW50IG51bV9tdXhfZGVmczsKQEAgLTI5Myw3ICszMDYsNyBAQAogCS8qIGR5bmFtaWMgY29udHJvbHMsIGluaXRfdmVyYnMgYW5kIGlucHV0X211eCAqLwogCXN0cnVjdCBhdXRvX3Bpbl9jZmcgYXV0b2NmZzsKIAlzdHJ1Y3Qgc25kX2FycmF5IGtjdGxzOwotCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX2ltdXhbM107CiAJaGRhX25pZF90IHByaXZhdGVfZGFjX25pZHNbQVVUT19DRkdfTUFYX09VVFNdOwogCiAJLyogaG9va3MgKi8KQEAgLTMwNSw2ICszMTgsOSBAQAogCXVuc2lnbmVkIGludCBqYWNrX3ByZXNlbnQ6IDE7CiAJdW5zaWduZWQgaW50IG1hc3Rlcl9zdzogMTsKIAorCS8qIG90aGVyIGZsYWdzICovCisJdW5zaWduZWQgaW50IG5vX2FuYWxvZyA6MTsgLyogZGlnaXRhbCBJL08gb25seSAqLworCiAJLyogZm9yIHZpcnR1YWwgbWFzdGVyICovCiAJaGRhX25pZF90IHZtYXN0ZXJfbmlkOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKQEAgLTMxNCwxMyArMzMwLDYgQEAKIAkvKiBmb3IgUExMIGZpeCAqLwogCWhkYV9uaWRfdCBwbGxfbmlkOwogCXVuc2lnbmVkIGludCBwbGxfY29lZl9pZHgsIHBsbF9jb2VmX2JpdDsKLQotI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCi0jZGVmaW5lIEFMQ19NQVhfUElOUwkxNgotCXVuc2lnbmVkIGludCBudW1fcGluczsKLQloZGFfbmlkX3QgcGluX25pZHNbQUxDX01BWF9QSU5TXTsKLQl1bnNpZ25lZCBpbnQgcGluX2NmZ3NbQUxDX01BWF9QSU5TXTsKLSNlbmRpZgogfTsKIAogLyoKQEAgLTMzNiw2ICszNDUsNyBAQAogCWhkYV9uaWRfdCAqZGFjX25pZHM7CiAJaGRhX25pZF90IGRpZ19vdXRfbmlkOwkJLyogb3B0aW9uYWwgKi8KIAloZGFfbmlkX3QgaHBfbmlkOwkJLyogb3B0aW9uYWwgKi8KKwloZGFfbmlkX3QgKnNsYXZlX2RpZ19vdXRzOwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7CiAJaGRhX25pZF90ICphZGNfbmlkczsKIAloZGFfbmlkX3QgKmNhcHNyY19uaWRzOwpAQCAtMzkyLDcgKzQwMiw4IEBACiAJbXV4X2lkeCA9IGFkY19pZHggPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGFkY19pZHg7CiAJaW11eCA9ICZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF07CiAKLQlpZiAoc3BlYy0+aXNfbWl4X2NhcHR1cmUpIHsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9zdHlsZSAmJgorCSAgICAhKHNwZWMtPmNhcHR1cmVfc3R5bGUgPT0gQ0FQVF8xTVVYX01JWCAmJiAhYWRjX2lkeCkpIHsKIAkJLyogTWF0cml4LW1peGVyIHN0eWxlIChlLmcuIEFMQzg4MikgKi8KIAkJdW5zaWduZWQgaW50ICpjdXJfdmFsID0gJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF07CiAJCXVuc2lnbmVkIGludCBpLCBpZHg7CkBAIC03NTAsNiArNzYxLDI0IEBACiAjZW5kaWYgICAvKiBDT05GSUdfU05EX0RFQlVHICovCiAKIC8qCisgKiBzZXQgdXAgdGhlIGlucHV0IHBpbiBjb25maWcgKGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gYXV0by1waW4gdHlwZSkKKyAqLworc3RhdGljIHZvaWQgYWxjX3NldF9pbnB1dF9waW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgICAgICBpbnQgYXV0b19waW5fdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gUElOX0lOOworCisJaWYgKGF1dG9fcGluX3R5cGUgPD0gQVVUT19QSU5fRlJPTlRfTUlDKSB7CisJCXVuc2lnbmVkIGludCBwaW5jYXA7CisJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CisJCXBpbmNhcCA9IChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRikgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQ7CisJCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl84MCkKKwkJCXZhbCA9IFBJTl9WUkVGODA7CisJfQorCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCB2YWwpOworfQorCisvKgogICovCiBzdGF0aWMgdm9pZCBhZGRfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4KQogewpAQCAtODEwLDYgKzgzOSw3IEBACiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBwcmVzZXQtPm51bV9kYWNzOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gcHJlc2V0LT5kYWNfbmlkczsKIAlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IHByZXNldC0+ZGlnX291dF9uaWQ7CisJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBwcmVzZXQtPnNsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IHByZXNldC0+aHBfbmlkOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gcHJlc2V0LT5udW1fbXV4X2RlZnM7CkBAIC05MjEsNyArOTUxLDcgQEAKIAkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKIH0KICNlbHNlCi0jZGVmaW5lIGFsY19taWNfYXV0b211dGUoY29kZWMpIC8qIE5PUCAqLworI2RlZmluZSBhbGNfbWljX2F1dG9tdXRlKGNvZGVjKSBkbyB7fSB3aGlsZSgwKSAvKiBOT1AgKi8KICNlbmRpZiAvKiBkaXNhYmxlZCAqLwogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCkBAIC05NTIsNyArOTgyLDcgQEAKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAwKTsKIAl0bXAgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfR0VUX1BST0NfQ09FRiwgMCk7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgNyk7Ci0JaWYgKCh0bXAgJiAweGYwKSA9PSAyKQorCWlmICgodG1wICYgMHhmMCkgPT0gMHgyMCkKIAkJLyogYWxjODg4Uy1WQyAqLwogCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjAsIDAsCiAJCQkJICAgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDgzMCk7CkBAIC05OTEsOCArMTAyMSw3IEBACiAJbmlkID0gMHgxZDsKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwMjYwKQogCQluaWQgPSAweDE3OwotCWFzcyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJYXNzID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCWlmICghKGFzcyAmIDEpICYmICEoYXNzICYgMHgxMDAwMDApKQogCQlyZXR1cm47CiAJaWYgKChhc3MgPj4gMzApICE9IDEpCS8qIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gKi8KQEAgLTExNjYsMTYgKzExOTUsOCBAQAogCQlyZXR1cm47CiAKIAljZmcgPSBwaW5maXhbcXVpcmstPnZhbHVlXTsKLQlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKSB7Ci0JCWludCBpOwotCQl1MzIgdmFsID0gY2ZnLT52YWw7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGNmZy0+bmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wICsgaSwKLQkJCQkgICAgdmFsICYgMHhmZik7Ci0JCQl2YWwgPj49IDg7Ci0JCX0KLQl9CisJZm9yICg7IGNmZy0+bmlkOyBjZmcrKykKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBjZmctPm5pZCwgY2ZnLT52YWwpOwogfQogCiAvKgpAQCAtMTM3NSw4ICsxMzk2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQ4Myw4ICsxNTAyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxOSwgMHgwLCBIREFfT1VUUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTU3OCw4ICsxNTk1LDcgQEAKIAkJCQkgICAgIHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9wdXQpOwogfQogCi0jZGVmaW5lIERFRklORV9DQVBNSVgobnVtKSBcCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXIgIyMgbnVtW10gPSB7IFwKKyNkZWZpbmUgX0RFRklORV9DQVBNSVgobnVtKSBcCiAJeyBcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAJCS5uYW1lID0gIkNhcHR1cmUgU3dpdGNoIiwgXApAQCAtMTYwMCw3ICsxNjE2LDkgQEAKIAkJLmdldCA9IGFsY19jYXBfdm9sX2dldCwgXAogCQkucHV0ID0gYWxjX2NhcF92b2xfcHV0LCBcCiAJCS50bHYgPSB7IC5jID0gYWxjX2NhcF92b2xfdGx2IH0sIFwKLQl9LCBcCisJfQorCisjZGVmaW5lIF9ERUZJTkVfQ0FQU1JDKG51bSkgXAogCXsgXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogCQkvKiAubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsICovIFwKQEAgLTE2MDksMTUgKzE2MjcsMjggQEAKIAkJLmluZm8gPSBhbGNfbXV4X2VudW1faW5mbywgXAogCQkuZ2V0ID0gYWxjX211eF9lbnVtX2dldCwgXAogCQkucHV0ID0gYWxjX211eF9lbnVtX3B1dCwgXAotCX0sIFwKLQl7IH0gLyogZW5kICovIFwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0NBUE1JWChudW0pIFwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfY2FwdHVyZV9taXhlciAjIyBudW1bXSA9IHsgXAorCV9ERUZJTkVfQ0FQTUlYKG51bSksCQkJCSAgICAgIFwKKwlfREVGSU5FX0NBUFNSQyhudW0pLAkJCQkgICAgICBcCisJeyB9IC8qIGVuZCAqLwkJCQkJICAgICAgXAorfQorCisjZGVmaW5lIERFRklORV9DQVBNSVhfTk9TUkMobnVtKSBcCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMgIyMgbnVtW10gPSB7IFwKKwlfREVGSU5FX0NBUE1JWChudW0pLAkJCQkJICAgIFwKKwl7IH0gLyogZW5kICovCQkJCQkJICAgIFwKIH0KIAogLyogdXAgdG8gdGhyZWUgQURDcyAqLwogREVGSU5FX0NBUE1JWCgxKTsKIERFRklORV9DQVBNSVgoMik7CiBERUZJTkVfQ0FQTUlYKDMpOwotCitERUZJTkVfQ0FQTUlYX05PU1JDKDEpOworREVGSU5FX0NBUE1JWF9OT1NSQygyKTsKK0RFRklORV9DQVBNSVhfTk9TUkMoMyk7CiAKIC8qCiAgKiBBTEM4ODAgNS1zdGFjayBtb2RlbApAQCAtMTcwNiw4ICsxNzM3LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC0xODg0LDEzICsxOTEzLDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0vKiBhZGRpdGlvbmFsIG1peGVycyB0byBhbGM4ODBfYXN1c19taXhlciAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9wY2JlZXBfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiAvKiBUQ0wgUzcwMCAqLwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF90Y2xfczcwMF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xOTIzLDggKzE5NDUsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKQEAgLTE5OTksNiArMjAxOSwxMyBAQAogCiBzdGF0aWMgdm9pZCBhbGNfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKKy8qIGFkZGl0aW9uYWwgYmVlcCBtaXhlcnM7IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcmUgb3ZlcndyaXR0ZW4gYXQgYnVpbGQgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfYmVlcF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAwLCAwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKIHN0YXRpYyBpbnQgYWxjX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMjAyMCwxMSArMjA0NywxMyBAQAogCQkJCQkJICAgIHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9zaGFyZV9zdyhjb2RlYywKLQkJCQkJCSAgICAmc3BlYy0+bXVsdGlvdXQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCXNwZWMtPm11bHRpb3V0LnNoYXJlX3NwZGlmID0gMTsKKwkJaWYgKCFzcGVjLT5ub19hbmFsb2cpIHsKKwkJCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX3NoYXJlX3N3KGNvZGVjLAorCQkJCQkJCSAgICAmc3BlYy0+bXVsdGlvdXQpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCXNwZWMtPm11bHRpb3V0LnNoYXJlX3NwZGlmID0gMTsKKwkJfQogCX0KIAlpZiAoc3BlYy0+ZGlnX2luX25pZCkgewogCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9pbl9jdGxzKGNvZGVjLCBzcGVjLT5kaWdfaW5fbmlkKTsKQEAgLTIwMzIsOCArMjA2MSwyNCBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBjcmVhdGUgYmVlcCBjb250cm9scyBpZiBuZWVkZWQgKi8KKwlpZiAoc3BlYy0+YmVlcF9hbXApIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJCWZvciAoa25ldyA9IGFsY19iZWVwX21peGVyOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJCQlrY3RsID0gc25kX2N0bF9uZXcxKGtuZXcsIGNvZGVjKTsKKwkJCWlmICgha2N0bCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBzcGVjLT5iZWVwX2FtcDsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywga2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJLyogaWYgd2UgaGF2ZSBubyBtYXN0ZXIgY29udHJvbCwgbGV0J3MgY3JlYXRlIGl0ICovCi0JaWYgKCFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKIAkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOwogCQlzbmRfaGRhX3NldF92bWFzdGVyX3Rsdihjb2RlYywgc3BlYy0+dm1hc3Rlcl9uaWQsCiAJCQkJCUhEQV9PVVRQVVQsIHZtYXN0ZXJfdGx2KTsKQEAgLTIwNDIsNyArMjA4Nyw4IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKCFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIpKSB7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIikpIHsKIAkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAogCQkJCQkgIE5VTEwsIGFsY19zbGF2ZV9zd3MpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTI5NTEsNiArMjk5NywxNCBAQAogCQkJCQkgICAgIHN0cmVhbV90YWcsIGZvcm1hdCwgc3Vic3RyZWFtKTsKIH0KIAorc3RhdGljIGludCBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbGVhbnVwKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX2NsZWFudXAoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7Cit9CisKIHN0YXRpYyBpbnQgYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xvc2Uoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKIAkJCQkJIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0zMDM0LDcgKzMwODgsOCBAQAogCS5vcHMgPSB7CiAJCS5vcGVuID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fb3BlbiwKIAkJLmNsb3NlID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xvc2UsCi0JCS5wcmVwYXJlID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZQorCQkucHJlcGFyZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJCS5jbGVhbnVwID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xlYW51cAogCX0sCiB9OwogCkBAIC0zMDYxLDYgKzMxMTYsOSBAQAogCWNvZGVjLT5udW1fcGNtcyA9IDE7CiAJY29kZWMtPnBjbV9pbmZvID0gaW5mbzsKIAorCWlmIChzcGVjLT5ub19hbmFsb2cpCisJCWdvdG8gc2tpcF9hbmFsb2c7CisKIAlpbmZvLT5uYW1lID0gc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nOwogCWlmIChzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrKSB7CiAJCWlmIChzbmRfQlVHX09OKCFzcGVjLT5tdWx0aW91dC5kYWNfbmlkcykpCkBAIC0zMDg0LDEyICszMTQyLDE3IEBACiAJCX0KIAl9CiAKKyBza2lwX2FuYWxvZzoKIAkvKiBTUERJRiBmb3Igc3RyZWFtIGluZGV4ICMxICovCiAJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkIHx8IHNwZWMtPmRpZ19pbl9uaWQpIHsKIAkJY29kZWMtPm51bV9wY21zID0gMjsKKwkgICAgICAgIGNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzOwogCQlpbmZvID0gc3BlYy0+cGNtX3JlYyArIDE7CiAJCWluZm8tPm5hbWUgPSBzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsOwotCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKKwkJaWYgKHNwZWMtPmRpZ19vdXRfdHlwZSkKKwkJCWluZm8tPnBjbV90eXBlID0gc3BlYy0+ZGlnX291dF90eXBlOworCQllbHNlCisJCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKIAkJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkICYmCiAJCSAgICBzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjaykgewogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gKihzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayk7CkBAIC0zMTA0LDYgKzMxNjcsOSBAQAogCQljb2RlYy0+c3BkaWZfc3RhdHVzX3Jlc2V0ID0gMTsKIAl9CiAKKwlpZiAoc3BlYy0+bm9fYW5hbG9nKQorCQlyZXR1cm4gMDsKKwogCS8qIElmIHRoZSB1c2Ugb2YgbW9yZSB0aGFuIG9uZSBBREMgaXMgcmVxdWVzdGVkIGZvciB0aGUgY3VycmVudAogCSAqIG1vZGVsLCBjb25maWd1cmUgYSBzZWNvbmQgYW5hbG9nIGNhcHR1cmUtb25seSBQQ00uCiAJICovCkBAIC0zMTYyLDY1ICszMjI4LDE3IEBACiAKIAlhbGNfZnJlZV9rY3Rscyhjb2RlYyk7CiAJa2ZyZWUoc3BlYyk7Ci0JY29kZWMtPnNwZWMgPSBOVUxMOyAvKiB0byBiZSBzdXJlICovCisJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwogfQogCiAjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKLXN0YXRpYyB2b2lkIHN0b3JlX3Bpbl9jb25maWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWhkYV9uaWRfdCBuaWQsIGVuZF9uaWQ7Ci0KLQllbmRfbmlkID0gY29kZWMtPnN0YXJ0X25pZCArIGNvZGVjLT5udW1fbm9kZXM7Ci0JZm9yIChuaWQgPSBjb2RlYy0+c3RhcnRfbmlkOyBuaWQgPCBlbmRfbmlkOyBuaWQrKykgewotCQl1bnNpZ25lZCBpbnQgd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7Ci0JCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9Ci0JCQkod2lkX2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKLQkJaWYgKHdpZF90eXBlICE9IEFDX1dJRF9QSU4pCi0JCQljb250aW51ZTsKLQkJaWYgKHNwZWMtPm51bV9waW5zID49IEFSUkFZX1NJWkUoc3BlYy0+cGluX25pZHMpKQotCQkJYnJlYWs7Ci0JCXNwZWMtPnBpbl9uaWRzW3NwZWMtPm51bV9waW5zXSA9IG5pZDsKLQkJc3BlYy0+cGluX2NmZ3Nbc3BlYy0+bnVtX3BpbnNdID0KLQkJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCXNwZWMtPm51bV9waW5zKys7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCByZXN1bWVfcGluX2NvbmZpZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykgewotCQloZGFfbmlkX3QgcGluX25pZCA9IHNwZWMtPnBpbl9uaWRzW2ldOwotCQl1bnNpZ25lZCBpbnQgcGluX2NvbmZpZyA9IHNwZWMtPnBpbl9jZmdzW2ldOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wLAotCQkJCSAgICBwaW5fY29uZmlnICYgMHgwMDAwMDBmZik7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzEsCi0JCQkJICAgIChwaW5fY29uZmlnICYgMHgwMDAwZmYwMCkgPj4gOCk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsCi0JCQkJICAgIChwaW5fY29uZmlnICYgMHgwMGZmMDAwMCkgPj4gMTYpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJCSAgICBwaW5fY29uZmlnID4+IDI0KTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgYWxjX3Jlc3VtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlyZXN1bWVfcGluX2NvbmZpZ3MoY29kZWMpOwogCWNvZGVjLT5wYXRjaF9vcHMuaW5pdChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfYW1wKGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9jYWNoZShjb2RlYyk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBzdG9yZV9waW5fY29uZmlncyhjb2RlYykKICNlbmRpZgogCiAvKgpAQCAtMzU1OSw3ICszNTc3LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTgxLCAiQVNVUyBQNEdQTCIsIEFMQzg4MF9BU1VTX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODE5NiwgIkFTVVMgUDVHRDEiLCBBTEM4ODBfNlNUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWI0LCAiQVNVUyIsIEFMQzg4MF82U1QpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAwLCAiQVNVUyIsIEFMQzg4MF9BU1VTKSwgLyogZGVmYXVsdCBBU1VTICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDQzLCAiQVNVUyIsIEFMQzg4MF9BU1VTKSwgLyogZGVmYXVsdCBBU1VTICovCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFhMCwgIlNvbnkiLCBBTEM4ODBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MWQ2LCAiU29ueSIsIEFMQzg4MF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDMwMzIsICJHYXRld2F5IiwgQUxDODgwXzVTVCksCkBAIC0zNjAyLDcgKzM2MjAsOCBAQAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGU0MDAsICJJbnRlbCBtb2JvIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGU0MDEsICJJbnRlbCBtb2JvIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGU0MDIsICJJbnRlbCBtb2JvIiwgQUxDODgwXzVTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAwLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF8zU1QpLCAvKiBkZWZhdWx0IEludGVsICovCisJLyogZGVmYXVsdCBJbnRlbCAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4ODA4NiwgIkludGVsIG1vYm8iLCBBTEM4ODBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4YTBhMCwgMHgwNTYwLCAiQU9wZW4gaTkxNUdNbS1IRlMiLCBBTEM4ODBfNVNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweGU4MDMsIDB4MTAxOSwgTlVMTCwgQUxDODgwXzZTVF9ESUcpLAogCXt9CkBAIC0zNzgyLDcgKzM4MDEsNyBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9jYXB0dXJlX3NvdXJjZSwKIAl9LAogCVtBTEM4ODBfVU5JV0lMTF9ESUddID0gewotCQkubWl4ZXJzID0geyBhbGM4ODBfYXN1c19taXhlciwgYWxjODgwX3BjYmVlcF9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGM4ODBfYXN1c19taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF9waW5fYXN1c19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgwX2FzdXNfZGFjX25pZHMpLApAQCAtMzgyMCw4ICszODM5LDcgQEAKIAkJLmluaXRfaG9vayA9IGFsYzg4MF91bml3aWxsX3A1M19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODBfRlVKSVRTVV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4MF9mdWppdHN1X21peGVyLAotCQkJICAgIGFsYzg4MF9wY2JlZXBfbWl4ZXIsIH0sCisJCS5taXhlcnMgPSB7IGFsYzg4MF9mdWppdHN1X21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCiAJCQkJYWxjODgwX3VuaXdpbGxfcDUzX2luaXRfdmVyYnMsCiAJICAgICAgIAkJCWFsYzg4MF9iZWVwX2luaXRfdmVyYnMgfSwKQEAgLTQxMTQsNyArNDEzMiw3IEBACiBzdGF0aWMgaW50IGFsYzg4MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC00MjAyLDExICs0MjIwLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChhbGM4ODBfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQkJaWYgKG5pZCAhPSBBTEM4ODBfUElOX0NEX05JRCkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEM4ODBfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CkBAIC00MjIxLDcgKzQyMzcsNyBAQAogc3RhdGljIGludCBhbGM4ODBfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGVycjsKKwlpbnQgaSwgZXJyOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwX2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKQEAgLTQyNTIsOCArNDI2OCwyMyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCi0JCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQ7CisJLyogY2hlY2sgbXVsdGlwbGUgU1BESUYtb3V0IChmb3IgcmVjZW50IGNvZGVjcykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+YXV0b2NmZy5kaWdfb3V0czsgaSsrKSB7CisJCWhkYV9uaWRfdCBkaWdfbmlkOworCQllcnIgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywKKwkJCQkJICAgICAgc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbnNbaV0sCisJCQkJCSAgICAgICZkaWdfbmlkLCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKCFpKQorCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOworCQllbHNlIHsKKwkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7CisJCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOworCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJCWJyZWFrOworCQl9CisJfQogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBBTEM4ODBfRElHSU5fTklEOwogCkBAIC00MjYzLDkgKzQyOTQsOCBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDI4MCwyMSArNDMxMCwzMyBAQAogCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCitzdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMpCit7CisJc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBzWzJdWzNdID0geworCQl7IGFsY19jYXB0dXJlX21peGVyX25vc3JjMSwKKwkJICBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzIsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMzIH0sCisJCXsgYWxjX2NhcHR1cmVfbWl4ZXIxLAorCQkgIGFsY19jYXB0dXJlX21peGVyMiwKKwkJICBhbGNfY2FwdHVyZV9taXhlcjMgfSwKKwl9OworCWlmIChzcGVjLT5udW1fYWRjX25pZHMgPiAwICYmIHNwZWMtPm51bV9hZGNfbmlkcyA8PSAzKSB7CisJCWludCBtdXg7CisJCWlmIChzcGVjLT5pbnB1dF9tdXggJiYgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPiAxKQorCQkJbXV4ID0gMTsKKwkJZWxzZQorCQkJbXV4ID0gMDsKKwkJc3BlYy0+Y2FwX21peGVyID0gY2Fwc1ttdXhdW3NwZWMtPm51bV9hZGNfbmlkcyAtIDFdOworCX0KK30KKworI2RlZmluZSBzZXRfYmVlcF9hbXAoc3BlYywgbmlkLCBpZHgsIGRpcikgXAorCSgoc3BlYyktPmJlZXBfYW1wID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIGlkeCwgZGlyKSkKKwogLyoKICAqIE9LLCBoZXJlIHdlIGhhdmUgZmluYWxseSB0aGUgcGF0Y2ggZm9yIEFMQzg4MAogICovCiAKLXN0YXRpYyB2b2lkIHNldF9jYXB0dXJlX21peGVyKHN0cnVjdCBhbGNfc3BlYyAqc3BlYykKLXsKLQlzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcHNbM10gPSB7Ci0JCWFsY19jYXB0dXJlX21peGVyMSwKLQkJYWxjX2NhcHR1cmVfbWl4ZXIyLAotCQlhbGNfY2FwdHVyZV9taXhlcjMsCi0JfTsKLQlpZiAoc3BlYy0+bnVtX2FkY19uaWRzID4gMCAmJiBzcGVjLT5udW1fYWRjX25pZHMgPD0gMykKLQkJc3BlYy0+Y2FwX21peGVyID0gY2Fwc1tzcGVjLT5udW1fYWRjX25pZHMgLSAxXTsKLX0KLQogc3RhdGljIGludCBwYXRjaF9hbGM4ODAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwpAQCAtNDMzMCw2ICs0MzcyLDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODBfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4ODBfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtNDM1Niw2ICs0NDA0LDcgQEAKIAkJfQogCX0KIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtNDQ2Myw2ICs0NTEyLDI2IEBACiAJCX0sCiAJfSwKIH07CisKKy8qIE1heGRhdGEgRmF2b3JpdCAxMDBYUyAqLworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9mYXZvcml0MTAwX2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSAyLAorCQkuaXRlbXMgPSB7CisJCQl7ICJMaW5lL01pYyIsIDB4MCB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJfSwKKwl9LAorCXsKKwkJLm51bV9pdGVtcyA9IDMsCisJCS5pdGVtcyA9IHsKKwkJCXsgIkxpbmUvTWljIiwgMHgwIH0sCisJCQl7ICJDRCIsIDB4NCB9LAorCQkJeyAiTWl4ZXIiLCAweDUgfSwKKwkJfSwKKwl9LAorfTsKKwogLyoKICAqIFRoaXMgaXMganVzdCBwbGFjZS1ob2xkZXIsIHNvIHRoZXJlJ3Mgc29tZXRoaW5nIGZvciBhbGNfYnVpbGRfcGNtcyB0byBsb29rCiAgKiBhdCB3aGVuIGl0IGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzLiBBTEMyNjAgaGFzIG5vIG1peGVyCkBAIC00NTA1LDEyICs0NTc0LDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX3BjX2JlZXBfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiAvKiB1cGRhdGUgSFAsIGxpbmUgYW5kIG1vbm8gb3V0IHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBtYXN0ZXIgc3dpdGNoICovCiBzdGF0aWMgdm9pZCBhbGMyNjBfaHBfbWFzdGVyX3VwZGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgICAgaGRhX25pZF90IGhwLCBoZGFfbmlkX3QgbGluZSwKQEAgLTQ3MDIsOCArNDc2NSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljL0xpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMvTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCiAJQUxDX1BJTl9NT0RFKCJNaWMvTGluZSBKYWNrIE1vZGUiLCAweDEyLCBBTENfUElOX0RJUl9JTiksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOSwgMiwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC00NzQ4LDggKzQ4MDksMTggQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwMiwgSERBX0lOUFVUKSwKIAlBTENfUElOX01PREUoIkxpbmUgSmFjayBNb2RlIiwgMHgxNCwgQUxDX1BJTl9ESVJfSU5PVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIE1heGRhdGEgRmF2b3JpdCAxMDBYUzogb25lIG91dHB1dCBhbmQgb25lIGlucHV0ICgweDEyKSBqYWNrCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfZmF2b3JpdDEwMF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAorCUFMQ19QSU5fTU9ERSgiT3V0cHV0IEphY2sgTW9kZSIsIDB4MGYsIEFMQ19QSU5fRElSX0lOT1VUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lL01pYyBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUvTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKKwlBTENfUElOX01PREUoIkxpbmUvTWljIEphY2sgTW9kZSIsIDB4MTIsIEFMQ19QSU5fRElSX0lOKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC00NzY3LDggKzQ4MzgsNiBAQAogCUFMQ19QSU5fTU9ERSgiTGluZSBKYWNrIE1vZGUiLCAweDE0LCBBTENfUElOX0RJUl9JTk9VVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC01MTI2LDYgKzUxOTUsODkgQEAKIAl7IH0KIH07CiAKKy8qIEluaXRpYWxpc2F0aW9uIHNlcXVlbmNlIGZvciBNYXhkYXRhIEZhdm9yaXQgMTAwWFMKKyAqIChhZGFwdGVkIGZyb20gQWNlciBpbml0IHZlcmJzKS4KKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfZmF2b3JpdDEwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogR1BJTyAwIGVuYWJsZXMgdGhlIG91dHB1dCBqYWNrLgorCSAqIFR1cm4gdGhpcyBvbiBhbmQgcmVseSBvbiB0aGUgc3RhbmRhcmQgbXV0ZQorCSAqIG1ldGhvZHMgd2hlbmV2ZXIgdGhlIHVzZXIgd2FudHMgdG8gdHVybiB0aGVzZSBvdXRwdXRzIG9mZi4KKwkgKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAxfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDF9LAorCS8qIExpbmUvTWljIGlucHV0IGphY2sgaXMgY29ubmVjdGVkIHRvIE1pYzEgcGluICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY1MH0sCisJLyogRW5zdXJlIGFsbCBvdGhlciB1bnVzZWQgcGlucyBhcmUgZGlzYWJsZWQgYW5kIG11dGVkLiAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwkvKiBEaXNhYmxlIGRpZ2l0YWwgKFNQRElGKSBwaW5zICovCisJezB4MDMsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCAwfSwKKwl7MHgwNiwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIDB9LAorCisJLyogRW5zdXJlIE1pYzEgYW5kIExpbmUxIHBpbiB3aWRnZXRzIHRha2UgaW5wdXQgZnJvbSB0aGUgT1VUMSBzdW0KKwkgKiBidXMgd2hlbiBhY3RpbmcgYXMgb3V0cHV0cy4KKwkgKi8KKwl7MHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisKKwkvKiBTdGFydCB3aXRoIG91dHB1dCBzdW0gd2lkZ2V0cyBtdXRlZCBhbmQgdGhlaXIgb3V0cHV0IGdhaW5zIGF0IG1pbiAqLworCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCisJLyogVW5tdXRlIExpbmUtb3V0IHBpbiB3aWRnZXQgYW1wIGxlZnQgYW5kIHJpZ2h0CisJICogKG5vIGVxdWl2IG1peGVyIGN0cmwpCisJICovCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBVbm11dGUgTWljMSBhbmQgTGluZTEgcGluIHdpZGdldCBpbnB1dCBidWZmZXJzIHNpbmNlIHRoZXkgc3RhcnQgYXMKKwkgKiBpbnB1dHMuIElmIHRoZSBwaW4gbW9kZSBpcyBjaGFuZ2VkIGJ5IHRoZSB1c2VyIHRoZSBwaW4gbW9kZSBjb250cm9sCisJICogd2lsbCB0YWtlIGNhcmUgb2YgZW5hYmxpbmcgdGhlIHBpbidzIGlucHV0L291dHB1dCBidWZmZXJzIGFzIG5lZWRlZC4KKwkgKiBUaGVyZWZvcmUgdGhlcmUncyBubyBuZWVkIHRvIGVuYWJsZSB0aGUgaW5wdXQgYnVmZmVyIGF0IHRoaXMKKwkgKiBzdGFnZS4KKwkgKi8KKwl7MHgxMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisKKwkvKiBNdXRlIGNhcHR1cmUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwkvKiBTZXQgQURDIGNvbm5lY3Rpb24gc2VsZWN0IHRvIG1hdGNoIGRlZmF1bHQgbWl4ZXIgc2V0dGluZyAtIG1pYworCSAqIChvbiBtaWMxIHBpbikKKwkgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogRG8gc2ltaWxhciB3aXRoIHRoZSBzZWNvbmQgQURDOiBtdXRlIGNhcHR1cmUgaW5wdXQgYW1wIGFuZAorCSAqIHNldCBBREMgY29ubmVjdGlvbiB0byBtaWMgdG8gbWF0Y2ggQUxTQSdzIGRlZmF1bHQgc3RhdGUuCisJICovCisJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogTXV0ZSBhbGwgaW5wdXRzIHRvIG1peGVyIHdpZGdldCAoZXZlbiB1bmNvbm5lY3RlZCBvbmVzKSAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIG1pYzEgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwgLyogbWljMiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LCAvKiBsaW5lMSBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LCAvKiBsaW5lMiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LCAvKiBDRCBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LCAvKiBCZWVwLWdlbiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNil9LCAvKiBMaW5lLW91dCBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNyl9LCAvKiBIUC1waW4gcGluICovCisKKwl7IH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3dpbGxfdmVyYnNbXSA9IHsKIAl7MHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCXsweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCkBAIC01MjcyLDggKzU0MjQsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMSU5FMiBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTElORS1PVVQgbG9vcGJhY2sgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTElORS1PVVQgbG9vcGJhY2sgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIUC1PVVQgbG9vcGJhY2sgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHg3LCBIREFfSU5QVVQpLApAQCAtNTQ3MSw3ICs1NjIxLDcgQEAKIHN0YXRpYyBpbnQgYWxjMjYwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeDsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTU1NDYsMTEgKzU2OTYsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKG5pZCA+PSAweDEyKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJCWlmIChuaWQgIT0gQUxDMjYwX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDMjYwX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtNTYyMyw3ICs1NzcxLDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjBfRElHT1VUX05JRDsKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwpAQCAtNTYzMSw5ICs1Nzc5LDggQEAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjBfdm9sdW1lX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTU2NzAsNiArNTgxNyw3IEBACiAJW0FMQzI2MF9BQ0VSXQkJPSAiYWNlciIsCiAJW0FMQzI2MF9XSUxMXQkJPSAid2lsbCIsCiAJW0FMQzI2MF9SRVBMQUNFUl82NzJWXQk9ICJyZXBsYWNlciIsCisJW0FMQzI2MF9GQVZPUklUMTAwXQk9ICJmYXZvcml0MTAwIiwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzI2MF9URVNUXQkJPSAidGVzdCIsCiAjZW5kaWYKQEAgLTU2NzksNiArNTgyNyw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYwX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDdiLCAiQWNlciBDMjB4IiwgQUxDMjYwX0FDRVIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwOGYsICJBY2VyIiwgQUxDMjYwX0FDRVIpLAorCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDQ1NDAsICJGYXZvcml0IDEwMFhTIiwgQUxDMjYwX0ZBVk9SSVQxMDApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDgsICJIUCBkNTcwMCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODBhLCAiSFAgZDU3NTAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMCwgIkhQIiwgQUxDMjYwX0hQXzMwMTMpLApAQCAtNTcwMSw4ICs1ODUwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjMjYwX3ByZXNldHNbXSA9IHsKIAlbQUxDMjYwX0JBU0lDXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX2Jhc2Vfb3V0cHV0X21peGVyLAotCQkJICAgIGFsYzI2MF9pbnB1dF9taXhlciwKLQkJCSAgICBhbGMyNjBfcGNfYmVlcF9taXhlciB9LAorCQkJICAgIGFsYzI2MF9pbnB1dF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjBfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjBfZGFjX25pZHMsCkBAIC01NzgxLDYgKzU5MjksMTggQEAKIAkJLm51bV9tdXhfZGVmcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2VzKSwKIAkJLmlucHV0X211eCA9IGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcywKIAl9LAorCVtBTEMyNjBfRkFWT1JJVDEwMF0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2MF9mYXZvcml0MTAwX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfZmF2b3JpdDEwMF9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjYwX2RhY19uaWRzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjBfZHVhbF9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzI2MF9kdWFsX2FkY19uaWRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYwX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2MF9tb2RlcywKKwkJLm51bV9tdXhfZGVmcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2Zhdm9yaXQxMDBfY2FwdHVyZV9zb3VyY2VzKSwKKwkJLmlucHV0X211eCA9IGFsYzI2MF9mYXZvcml0MTAwX2NhcHR1cmVfc291cmNlcywKKwl9LAogCVtBTEMyNjBfV0lMTF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2MF93aWxsX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfaW5pdF92ZXJicywgYWxjMjYwX3dpbGxfdmVyYnMgfSwKQEAgLTU4NTcsNiArNjAxNywxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjYwX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjYwX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTU4ODIsNiArNjA0OCw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDg7CiAKQEAgLTYwNTMsOCArNjIyMCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTYwODEsOCArNjI0Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTYxMzQsOCArNjI5Nyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTYyNDQsOCArNjQwNSwxMCBAQAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwkvKiBGSVhNRTogdGhpcyBsb29rcyBzdXNwaWNpb3VzLi4uCiAJSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJKi8KIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02ODc3LDE5ICs3MDQwLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJdW5zaWduZWQgaW50IHZyZWY7CiAJCWlmICghbmlkKQogCQkJY29udGludWU7Ci0JCXZyZWYgPSBQSU5fSU47Ci0JCWlmICgxIC8qaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMqLykgewotCQkJdW5zaWduZWQgaW50IHBpbmNhcDsKLQkJCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7Ci0JCQlpZiAoKHBpbmNhcCA+PiBBQ19QSU5DQVBfVlJFRl9TSElGVCkgJgotCQkJICAgIEFDX1BJTkNBUF9WUkVGXzgwKQotCQkJCXZyZWYgPSBQSU5fVlJFRjgwOwotCQl9Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCB2cmVmKTsKKwkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgQVVUT19QSU5fRlJPTlRfTUlDIC8qaSovKTsKIAkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCkBAIC02OTAwLDE4ICs3MDUzLDIxIEBACiBzdGF0aWMgdm9pZCBhbGM4ODJfYXV0b19pbml0X2lucHV0X3NyYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9IHNwZWMtPmlucHV0X211eDsKIAlpbnQgYzsKIAogCWZvciAoYyA9IDA7IGMgPCBzcGVjLT5udW1fYWRjX25pZHM7IGMrKykgewogCQloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfTlVNX0lOUFVUU107CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5jYXBzcmNfbmlkc1tjXTsKKwkJdW5zaWduZWQgaW50IG11eF9pZHg7CisJCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4OwogCQlpbnQgY29ubnMsIG11dGUsIGlkeCwgaXRlbTsKIAogCQljb25ucyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm5fbGlzdCwKIAkJCQkJCUFSUkFZX1NJWkUoY29ubl9saXN0KSk7CiAJCWlmIChjb25ucyA8IDApCiAJCQljb250aW51ZTsKKwkJbXV4X2lkeCA9IGMgPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGM7CisJCWltdXggPSAmc3BlYy0+aW5wdXRfbXV4W211eF9pZHhdOwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbm5zOyBpZHgrKykgewogCQkJLyogaWYgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpcyB0aGUgc2VsZWN0ZWQgb25lLAogCQkJICogdW5tdXRlIGl0IGFzIGRlZmF1bHQgLSBvdGhlcndpc2UgbXV0ZSBpdApAQCAtNjkyNCw4ICs3MDgwLDIwIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIG11dGUpOworCQkJLyogY2hlY2sgaWYgd2UgaGF2ZSBhIHNlbGVjdG9yIG9yIG1peGVyCisJCQkgKiB3ZSBjb3VsZCBjaGVjayBmb3IgdGhlIHdpZGdldCB0eXBlIGluc3RlYWQsIGJ1dAorCQkJICoganVzdCBjaGVjayBmb3IgQW1wLUluIHByZXNlbmNlIChpbiBjYXNlIG9mIG1peGVyCisJCQkgKiB3aXRob3V0IGFtcC1pbiB0aGVyZSBpcyBzb21ldGhpbmcgd3JvbmcsIHRoaXMKKwkJCSAqIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSB1c2VkIG9yIGNhcHNyYyBuaWQgaXMgd3JvbmcpCisJCQkgKi8KKwkJCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkJCSAgICBtdXRlKTsKKwkJCWVsc2UgaWYgKG11dGUgIT0gQU1QX0lOX01VVEUoaWR4KSkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCQkJCQkgICAgaWR4KTsKIAkJfQogCX0KIH0KQEAgLTcwMTcsNiArNzE4NSw3IEBACiAJCWNhc2UgMHgxMDZiM2UwMDogLyogaU1hYyAyNCBBbHVtaW5pdW0gKi8KIAkJCWJvYXJkX2NvbmZpZyA9IEFMQzg4NV9JTUFDMjQ7CiAJCQlicmVhazsKKwkJY2FzZSAweDEwNmIwMGEwOiAvKiBNYWNCb29rUHJvMywxIC0gQW5vdGhlciByZXZpc2lvbiAqLwogCQljYXNlIDB4MTA2YjAwYTE6IC8qIE1hY2Jvb2sgKG1pZ2h0IGJlIHdyb25nIC0gUENJIFNTSUQ/KSAqLwogCQljYXNlIDB4MTA2YjAwYTQ6IC8qIE1hY2Jvb2tQcm80LDEgKi8KIAkJY2FzZSAweDEwNmIyYzAwOiAvKiBNYWNib29rIFBybyByZXYzICovCkBAIC03MDUzLDYgKzcyMjIsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC03MDczLDcgKzcyNDgsNyBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKQEAgLTcwOTAsNiArNzI2NSw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTcxNDEsMTAgKzczMTcsMTQgQEAKIAkweDA5LCAweDA4CiB9OwogCisjZGVmaW5lIGFsYzg4OV9hZGNfbmlkcwkJYWxjODgwX2FkY19uaWRzCisKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzWzJdID0geyAweDIzLCAweDIyIH07CiAKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzX3JldlsyXSA9IHsgMHgyMiwgMHgyMyB9OwogCisjZGVmaW5lIGFsYzg4OV9jYXBzcmNfbmlkcwlhbGM4ODJfY2Fwc3JjX25pZHMKKwogLyogaW5wdXQgTVVYICovCiAvKiBGSVhNRTogc2hvdWxkIGJlIGEgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCkBAIC03MzYyLDggKzc1NDIsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDI2LDggKzc2MDQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDUxLDggKzc2MjcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDc3LDggKzc2NTEsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NTAyLDggKzc2NzQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03OTExLDM2ICs4MDgxLDgzIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7Ci0JezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLwotCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KLQl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF82c3RfZGVsbF92ZXJic1tdID0gewogCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKIAl7IH0KIH07CiAKK3N0YXRpYyB2b2lkIGFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQsIGJpdHM7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJYml0cyA9IHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNCwgSERBX09VVFBVVCwgMCwKKwkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTYsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE4LCBIREFfT1VUUFVULCAwLAorCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFMQzg4MF9IUF9FVkVOVDoKKwkJYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7CisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiAyY2ggbW9kZQorICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfMmNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCi0JeyB9CisJeyB9IC8qIGVuZCAqLwogfTsKIAorLyoKKyAqIDRjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF80Y2hfaW5pdFtdID0geworCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF82Y2hfaW5pdFtdID0gewogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKLQl7IH0KKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OF8zc3RfaHBfbW9kZXNbMl0gPSB7CitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg4XzNzdF9ocF9tb2Rlc1szXSA9IHsKIAl7IDIsIGFsYzg4OF8zc3RfaHBfMmNoX2luaXQgfSwKKwl7IDQsIGFsYzg4OF8zc3RfaHBfNGNoX2luaXQgfSwKIAl7IDYsIGFsYzg4OF8zc3RfaHBfNmNoX2luaXQgfSwKIH07CiAKQEAgLTgyMDEsNyArODQxOCw3IEBACiB7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIEFMQzg4MF9IUF9FVkVOVDoKLQkJcHJpbnRrKCJocF9ldmVudFxuIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJocF9ldmVudFxuIik7ICovCiAJCWFsYzg4OF82c3RfZGVsbF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCX0KQEAgLTg0NjAsNiArODY3Nyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4NjY2OCwgIkVDUyIsIEFMQzg4M18zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA2YywgIkFjZXIgQXNwaXJlIDk4MTAiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwOTAsICJBY2VyIEFzcGlyZSIsIEFMQzg4M19BQ0VSX0FTUElSRSksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEwYSwgIkFjZXIgRmVycmFyaSA1MDAwIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTEwLCAiQWNlciBBc3BpcmUiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMTIsICJBY2VyIEFzcGlyZSA5MzAzIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTIxLCAiQWNlciBBc3BpcmUgNTkyMEciLCBBTEM4ODNfQUNFUl9BU1BJUkUpLApAQCAtODQ2NywxNSArODY4NSwyMSBAQAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxM2YsICJBY2VyIEFzcGlyZSA1OTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1NywgIkFjZXIgWDMyMDAiLCBBTEM4ODNfQVVUTyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1OCwgIkFjZXIgQVgxNzAwLVUzNzAwQSIsIEFMQzg4M19BVVRPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTVlLCAiQWNlciBBc3BpcmUgNjkzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAwLCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksIC8qIGRlZmF1bHQgQWNlciAqLworCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNjYsICJBY2VyIEFzcGlyZSA2NTMwRyIsCisJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCisJLyogZGVmYXVsdCBBY2VyICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDI1LCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIwZCwgIkRlbGwgSW5zcGlyb24gNTMwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTNkLCAiSFAgUGF2aWxsaW9uIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNGYsICJIUCBTYW1iYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjAsICJIUCBMdWNrbm93IiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MSwgIkhQIE5ldHRsZSIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTY2LCAiSFAgQWNhY2lhIiwgQUxDODg4XzNTVF9IUCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE3MiwgIkhQIEVkdWMuYXIiLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODczLCAiQXN1cyBNOTBWIiwgQUxDODg4X0FTVVNfTTkwViksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI0OSwgIkFzdXMgTTJBLVZNIEhETUkiLCBBTEM4ODNfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyODQsICJBc3VzIFozN0UiLCBBTEM4ODNfNlNUX0RJRyksCkBAIC04NTE1LDcgKzg3MzksNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDEwODMsICJBYml0IElQMzUtUFJPIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDA3MjEsICJDbGV2byBsYXB0b3AgTTcyMFIiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCiAJU05EX1BDSV9RVUlSSygweDE1NTgsIDB4MDcyMiwgIkNsZXZvIGxhcHRvcCBNNzIwU1IiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCi0JU05EX1BDSV9RVUlSSygweDE1NTgsIDAsICJDbGV2byBsYXB0b3AiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTU1OCwgIkNsZXZvIGxhcHRvcCIsIEFMQzg4M19MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE1ZDksIDB4ODc4MCwgIlN1cGVybWljcm8gUERTQkEiLCBBTEM4ODNfM1NUXzZjaCksCiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIk1lZGlvbiBsYXB0b3AiLCBBTEM4ODNfTUVESU9OKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTA3LCAiRlNDIEFNSUxPIFhpMjU1MCIsCkBAIC04NTQwLDYgKzg3NjQsMTAgQEAKIAl7fQogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBhbGMxMjAwX3NsYXZlX2RpZ19vdXRzW10gPSB7CisJQUxDODgzX0RJR09VVF9OSUQsIDAsCit9OworCiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4M19wcmVzZXRzW10gPSB7CiAJW0FMQzg4M18zU1RfMmNoX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfMmNoX21peGVyIH0sCkBAIC04Nzc1LDYgKzkwMDMsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODg4XzNzdF9ocF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODhfNlNUX0RFTExdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfYmFzZV9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtODg4MCw2ICs5MTEwLDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEMxMjAwX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLnNsYXZlX2RpZ19vdXRzID0gYWxjMTIwMF9zbGF2ZV9kaWdfb3V0cywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M19zaXhzdGFja19tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLApAQCAtODk0NywxMSArOTE3OCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgzX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pKTsKLQkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtODk2Niw2ICs5MTk1LDggQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyID0gYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgaTsKIAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtODk3OSw2ICs5MjEwLDI2IEBACiAJLyogaGFjayAtIG92ZXJyaWRlIHRoZSBpbml0IHZlcmJzICovCiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFsYzg4M19hdXRvX2luaXRfdmVyYnM7CiAKKwkvKiBzZXR1cCBpbnB1dF9tdXggZm9yIEFMQzg4OSAqLworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA4ODkpIHsKKwkJLyogZGlnaXRhbC1taWMgaW5wdXQgcGluIGlzIGV4Y2x1ZGVkIGluIGFsYzg4MF9hdXRvX2NyZWF0ZS4uKCkKKwkJICogYmVjYXVzZSBpdCdzIHVuZGVyIDB4MTgKKwkJICovCisJCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8CisJCSAgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSA9PSAweDEyKSB7CisJCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CisJCQlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKQorCQkJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9pbXV4W2ldLAorCQkJCSAgICAgICAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdLAorCQkJCSAgICAgICBzaXplb2Yoc3BlYy0+cHJpdmF0ZV9pbXV4WzBdKSk7CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gIkludCBETWljIjsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSAweDBiOworCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCQlzcGVjLT5udW1fbXV4X2RlZnMgPSAzOworCQkJc3BlYy0+aW5wdXRfbXV4ID0gc3BlYy0+cHJpdmF0ZV9pbXV4OworCQl9CisJfQorCiAJcmV0dXJuIDE7IC8qIGNvbmZpZyBmb3VuZCAqLwogfQogCkBAIC05MDMwLDYgKzkyODEsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4M19BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4M19wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC05MDQyLDE0ICs5Mjk5LDM2IEBACiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg4IEFuYWxvZyI7CiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OCBEaWdpdGFsIjsKIAkJfQorCQlpZiAoIXNwZWMtPm51bV9hZGNfbmlkcykgeworCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOworCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHM7CisJCX0KKwkJaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKKwkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzOworCQlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJCWJyZWFrOwogCWNhc2UgMHgxMGVjMDg4OToKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OSBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OSBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODg5X2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODg5X2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4OV9jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfMU1VWF9NSVg7IC8qIDFtdXgvTm1peC1zdHlsZQorCQkJCQkJCWNhcHR1cmUgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4MyBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4MyBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCQlicmVhazsKIAl9CiAKQEAgLTkwNjAsMTUgKzkzMzksOSBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4M19wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4M19wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0JaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKLQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOwotCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKLQl9Ci0JaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKLQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtOTEyMSw4ICs5Mzk0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwRCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCkBAIC05MTQzLDggKzk0MTQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLCAqLwogCS8qSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MEQsIDB4MCwgSERBX09VVFBVVCksKi8KIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtOTI1Myw4ICs5NTIyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQVVYIElOIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkFVWCBJTiBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTkyODMsOCArOTU1MCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTk0MzIsNiArOTY5Nyw2NyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfdHlhbl9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfdHlhbl92ZXJic1tdID0geworCS8qIEhlYWRwaG9uZSBhdXRvbXV0ZSAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBQMTEgQVVYX0lOLCB3aGl0ZSA0LXBpbiBjb25uZWN0b3IgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLCAweGUxfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMiwgMHg5M30sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsIDB4MTl9LAorCisJe30KK307CisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBtdXRlOworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSAocHJlc2VudCAmIDB4ODAwMDAwMDApICE9IDA7CisJaWYgKHByZXNlbnQpIHsKKwkJLyogbXV0ZSBsaW5lIG91dHB1dCBvbiBBVFggcGFuZWwgKi8KKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAorCQkJCQkgSERBX0FNUF9NVVRFLCBIREFfQU1QX01VVEUpOworCX0gZWxzZSB7CisJCS8qIHVubXV0ZSBsaW5lIG91dHB1dCBpZiBuZWNlc3NhcnkgKi8KKwkJbXV0ZSA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIDB4MWIsIDAsIEhEQV9PVVRQVVQsIDApOworCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOworCX0KK30KKworc3RhdGljIHZvaWQgYWxjMjYyX3R5YW5fdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJaWYgKChyZXMgPj4gMjYpICE9IEFMQzg4MF9IUF9FVkVOVCkKKwkJcmV0dXJuOworCWFsYzI2Ml90eWFuX2F1dG9tdXRlKGNvZGVjKTsKK30KKwogI2RlZmluZSBhbGMyNjJfY2FwdHVyZV9taXhlcgkJYWxjODgyX2NhcHR1cmVfbWl4ZXIKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfYWx0X21peGVyCWFsYzg4Ml9jYXB0dXJlX2FsdF9taXhlcgogCkBAIC05ODk4LDggKzEwMjI0LDYgQEAKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTA0NzEsOCArMTA3OTUsMTQgQEAKIAkJCQkJICAgYWxjMjYyX2lnbm9yZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKSB7CisJCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzIHx8IHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikgeworCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJCXNwZWMtPm5vX2FuYWxvZyA9IDE7CisJCQlnb3RvIGRpZ19vbmx5OworCQl9CiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLworCX0KIAllcnIgPSBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTA0ODIsOCArMTA4MTIsMTEgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorIGRpZ19vbmx5OgorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKSB7CiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQ7CisJCXNwZWMtPmRpZ19vdXRfdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOworCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDMjYyX0RJR0lOX05JRDsKIApAQCAtMTA0OTIsMTMgKzEwODI1LDEyIEBACiAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjJfdm9sdW1lX2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwNTQwLDIwICsxMDg3MiwxOSBAQAogCVtBTEMyNjJfVUxUUkFdCQk9ICJ1bHRyYSIsCiAJW0FMQzI2Ml9MRU5PVk9fMzAwMF0JPSAibGVub3ZvLTMwMDAiLAogCVtBTEMyNjJfTkVDXQkJPSAibmVjIiwKKwlbQUxDMjYyX1RZQU5dCQk9ICJ0eWFuIiwKIAlbQUxDMjYyX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjJfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDAyLCAweDQzN2IsICJIaXBwbyIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDEwMzMsIDB4ODg5NSwgIk5FQyBWZXJzYSBTOTEwMCIsIEFMQzI2Ml9ORUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEyZmUsICJIUCB4dzk0MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMmZmLCAiSFAgeHc0NTUwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwNiwgIkhQIHh3ODYwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDcsICJIUCB4dzY2MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA4LCAiSFAgeHc0NjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwOSwgIkhQIHh3NCowMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMGEsICJIUCB4dzYqMDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzBiLCAiSFAgeHc4KjAwIiwgQUxDMjYyX0hQX0JQQyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDEyMDAsICJIUCB4dyBzZXJpZXMiLAorCQkJICAgQUxDMjYyX0hQX0JQQyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDEzMDAsICJIUCB4dyBzZXJpZXMiLAorCQkJICAgQUxDMjYyX0hQX0JQQyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDE3MDAsICJIUCB4dyBzZXJpZXMiLAorCQkJICAgQUxDMjYyX0hQX0JQQyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwMCwgIkhQIEQ3MDAwIiwgQUxDMjYyX0hQX0JQQ19ENzAwMF9XTCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwMSwgIkhQIEQ3MDAwIiwgQUxDMjYyX0hQX0JQQ19ENzAwMF9XRiksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwMiwgIkhQIEQ3MDAwIiwgQUxDMjYyX0hQX0JQQ19ENzAwMF9XTCksCkBAIC0xMDU3MSwxNyArMTA5MDIsMTcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHgxZjAwLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMDMsICJTb255IFVYLTkwIiwgQUxDMjYyX0hJUFBPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MjBmLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMGUsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNSwgIlNvbnkgMHg5MDE1IiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDMzLCAiU29ueSBWQUlPIFZHTi1TUjE5WE4iLAotCQkgICAgICBBTEMyNjJfU09OWV9BU1NBTUQpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTYsICJTb255IFZBSU8iLCBBTEMyNjJfQVVUTyksIC8qIGRpZy1vbmx5ICovCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTA0ZCwgMHhmZjAwLCAweDkwMDAsICJTb255IFZBSU8iLAorCQkJICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBkeW5hYm9vayBTUyBSWDEiLAogCQkgICAgICBBTEMyNjJfVE9TSElCQV9SWDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmN2IsICJUb3NoaWJhIFMwNiIsIEFMQzI2Ml9UT1NISUJBX1MwNiksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTM5NywgIkZ1aml0c3UiLCBBTEMyNjJfRlVKSVRTVSksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTQyZCwgIkZ1aml0c3UgTGlmZWJvb2sgRTg0MTAiLCBBTEMyNjJfRlVKSVRTVSksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAzMiwgIlNhbXN1bmcgUTEgVWx0cmEiLCBBTEMyNjJfVUxUUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMzksICJTYW1zdW5nIFExVSBFTCIsIEFMQzI2Ml9VTFRSQSksCisJU05EX1BDSV9RVUlSSygweDEwZjEsIDB4MjkxNSwgIlR5YW4gVGh1bmRlciBuNjY1MFciLCBBTEMyNjJfVFlBTiksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTQ0ZCwgMHhmZjAwLCAweGMwMzIsICJTYW1zdW5nIFExIiwKKwkJCSAgIEFMQzI2Ml9VTFRSQSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzUxMCwgIlNhbXN1bmcgUTQ1IiwgQUxDMjYyX0hJUFBPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzODRlLCAiTGVub3ZvIDMwMDAgeTQxMCIsIEFMQzI2Ml9MRU5PVk9fMzAwMCksCiAJU05EX1BDSV9RVUlSSygweDE3ZmYsIDB4MDU2MCwgIkJlbnEgRUQ4IiwgQUxDMjYyX0JFTlFfRUQ4KSwKQEAgLTEwNzk4LDYgKzExMTI5LDE5IEBACiAJCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudCwKIAkJLmluaXRfaG9vayA9IGFsYzI2Ml9oaXBwb19hdXRvbXV0ZSwKIAl9LAorCVtBTEMyNjJfVFlBTl0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2Ml90eWFuX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicywgYWxjMjYyX3R5YW5fdmVyYnN9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2Ml9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzI2Ml9kYWNfbmlkcywKKwkJLmhwX25pZCA9IDB4MDIsCisJCS5kaWdfb3V0X25pZCA9IEFMQzI2Ml9ESUdPVVRfTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGMyNjJfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzI2Ml90eWFuX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjMjYyX3R5YW5fYXV0b211dGUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjMjYyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTA4NTAsNiArMTExOTQsMTQgQEAKIAkJfQogCX0KIAorCWlmICghc3BlYy0+bm9fYW5hbG9nKSB7CisJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJYWxjX2ZyZWUoY29kZWMpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjYyX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjYyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTEwODYxLDcgKzExMjEzLDcgQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGMyNjJfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGMyNjJfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsKKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7CiAJaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNyBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7CkBAIC0xMDg3OCw4ICsxMTIzMCwxMCBAQAogCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjJfY2Fwc3JjX25pZHM7CiAJCX0KIAl9Ci0JaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCisJaWYgKCFzcGVjLT5jYXBfbWl4ZXIgJiYgIXNwZWMtPm5vX2FuYWxvZykKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cpCisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwogCkBAIC0xMTI1OSwxOSArMTE2MTMsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X2Jhc2VfaW5pdF92ZXJic1tdID0gewogCS8qIFVubXV0ZSBEQUMwLTEgYW5kIHNldCB2b2wgPSAwICovCiAJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCiAJLyoKIAkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwYyAtIDB4MGUpCiAJICovCiAJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KIAl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogICAgICAgICB7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCiAJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtMTEyOTAsOSArMTE2MzgsNyBAQAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCiAJLyogc2V0IFBDQkVFUCB2b2wgPSAwLCBtdXRlIGNvbm5lY3Rpb25zICovCiAJezB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtMTEzMTQsMTAgKzExNjYwLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBzZXQgb3V0cHV0IERBQyAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAogCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjR9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjR9LApAQCAtMTEzMjUsMTYgKzExNjY5LDEyIEBACiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyMH0sCiAJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyMH0sCiAKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCS8qIHNldCBQQ0JFRVAgdm9sID0gMCwgbXV0ZSBjb25uZWN0aW9ucyAqLwogCXsweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExNTMzLDcgKzExODczLDcgQEAKIHN0YXRpYyBpbnQgYWxjMjY4X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBpZHgxOwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtMTE2MjcsOSArMTE5NjcsMTQgQEAKIAkJCQkJICAgYWxjMjY4X2lnbm9yZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKSB7CisJCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzIHx8IHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikgeworCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJCXNwZWMtPm5vX2FuYWxvZyA9IDE7CisJCQlnb3RvIGRpZ19vbmx5OworCQl9CiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLwotCisJfQogCWVyciA9IGFsYzI2OF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xMTYzOSwyNSArMTE5ODQsMjYgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAKKyBkaWdfb25seToKIAkvKiBkaWdpdGFsIG9ubHkgc3VwcG9ydCBvdXRwdXQgKi8KLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykgewogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2OF9ESUdPVVRfTklEOwotCisJCXNwZWMtPmRpZ19vdXRfdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOworCX0KIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdICE9IDB4MWQpCisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gIT0gMHgxZCkKIAkJYWRkX21peGVyKHNwZWMsIGFsYzI2OF9iZWVwX21peGVyKTsKIAogCWFkZF92ZXJiKHNwZWMsIGFsYzI2OF92b2x1bWVfaW5pdF92ZXJicyk7CiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTE3MTksNyArMTIwNjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2OF9wcmVzZXRzW10gPSB7CiAJW0FMQzI2N19RVUFOVEFfSUwxXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjdfcXVhbnRhX2lsMV92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC0xMTgwMSw3ICsxMjE0Nyw4IEBACiAJfSwKIAlbQUxDMjY4X0FDRVJfQVNQSVJFX09ORV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfbWl4ZXIsCi0JCQkJYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyIH0sCisJCQkgICAgYWxjMjY4X2JlZXBfbWl4ZXIsCisJCQkgICAgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfYWNlcl9hc3BpcmVfb25lX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKQEAgLTExODcwLDcgKzEyMjE3LDcgQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CiAJaW50IGJvYXJkX2NvbmZpZzsKLQlpbnQgZXJyOworCWludCBpLCBoYXNfYmVlcCwgZXJyOwogCiAJc3BlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTExOTE5LDE1ICsxMjI2NiwzMCBAQAogCiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjY4X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCi0JaWYgKCFxdWVyeV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVUKSkKLQkJLyogb3ZlcnJpZGUgdGhlIGFtcCBjYXBzIGZvciBiZWVwIGdlbmVyYXRvciAqLwotCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQsCisJaGFzX2JlZXAgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKKwkJaWYgKHNwZWMtPm1peGVyc1tpXSA9PSBhbGMyNjhfYmVlcF9taXhlcikgeworCQkJaGFzX2JlZXAgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaGFzX2JlZXApIHsKKwkJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlhbGNfZnJlZShjb2RlYyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmICghcXVlcnlfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCkpCisJCQkvKiBvdmVycmlkZSB0aGUgYW1wIGNhcHMgZm9yIGJlZXAgZ2VuZXJhdG9yICovCisJCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQsCiAJCQkJCSAgKDB4MGMgPDwgQUNfQU1QQ0FQX09GRlNFVF9TSElGVCkgfAogCQkJCQkgICgweDBjIDw8IEFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQpIHwKIAkJCQkJICAoMHgwNyA8PCBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUKSB8CiAJCQkJCSAgKDAgPDwgQUNfQU1QQ0FQX01VVEVfU0hJRlQpKTsKKwl9CiAKLQlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmICFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNyBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7CiAJCWludCBpOwpAQCAtMTIwMDgsOCArMTIzNzAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCkBAIC0xMjAzNiw4ICsxMjM5Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xMjA2MSw4ICsxMjQxOSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRG9jayBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBCb29zdCIsIDB4MWIsIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xMjA5OSwxMyArMTI0NTUsNiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLS8qIGJlZXAgY29udHJvbCAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9iZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X3F1YW50YV9mbDFfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCkBAIC0xMjUwNSw3ICsxMjg1NCw3IEBACiAJICovCiAJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdID09IDB4MTIgfHwKIAkgICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ10gPT0gMHgxMikgewotCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9ICJJbnQgTWljIjsKIAkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IDB4MDU7CiAJCWltdXgtPm51bV9pdGVtcysrOwpAQCAtMTI1MjMsMTMgKzEyODcyLDM0IEBACiAjZGVmaW5lIGFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjawlhbGM4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sKICNkZWZpbmUgYWxjMjY5X3BjbV9kaWdpdGFsX2NhcHR1cmUJYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUKIAorc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGMyNjlfNDRrX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSA4LAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwLCAvKiBmaXhlZCByYXRlICovCisJLyogTklEIGlzIHNldCBpbiBhbGNfYnVpbGRfcGNtcyAqLworCS5vcHMgPSB7CisJCS5vcGVuID0gYWxjODgwX3BsYXliYWNrX3BjbV9vcGVuLAorCQkucHJlcGFyZSA9IGFsYzg4MF9wbGF5YmFja19wY21fcHJlcGFyZSwKKwkJLmNsZWFudXAgPSBhbGM4ODBfcGxheWJhY2tfcGNtX2NsZWFudXAKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGMyNjlfNDRrX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKKwkuc3Vic3RyZWFtcyA9IDEsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAsIC8qIGZpeGVkIHJhdGUgKi8KKwkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCit9OworCiAvKgogICogQklPUyBhdXRvIGNvbmZpZ3VyYXRpb24KICAqLwogc3RhdGljIGludCBhbGMyNjlfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5X2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKQEAgLTEyNTQ2LDIyICsxMjkxNiwxNSBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjY5X0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwogCi0JLyogY3JlYXRlIGEgYmVlcCBtaXhlciBjb250cm9sIGlmIHRoZSBwaW4gMHgxZCBpc24ndCBhc3NpZ25lZCAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaW5wdXRfcGlucyk7IGkrKykKLQkJaWYgKHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXSA9PSAweDFkKQotCQkJYnJlYWs7Ci0JaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnMpKQotCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY5X2JlZXBfbWl4ZXIpOwotCiAJYWRkX3ZlcmIoc3BlYywgYWxjMjY5X2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCS8qIHNldCBkZWZhdWx0IGlucHV0IHNvdXJjZSAqLwogCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGFsYzI2OV9jYXBzcmNfbmlkc1swXSwKIAkJCQkgIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLApAQCAtMTI1NzEsMTAgKzEyOTM0LDkgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICghc3BlYy0+Y2FwX21peGVyKQorCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMjY3MSw3ICsxMzAzMyw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfZWVlcGNfZG1pY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjlfRlVKSVRTVV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OV9mdWppdHN1X21peGVyLCBhbGMyNjlfYmVlcF9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjlfZnVqaXRzdV9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5X2luaXRfdmVyYnMsCiAJCQkJYWxjMjY5X2VlZXBjX2RtaWNfaW5pdF92ZXJicyB9LApAQCAtMTI3MzYsMTMgKzEzMDk4LDI2IEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEMyNjlfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGMyNjlfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIAogCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEMyNjkgQW5hbG9nIjsKLQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2OV9wY21fYW5hbG9nX3BsYXliYWNrOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2FuYWxvZ19jYXB0dXJlOwotCisJaWYgKGNvZGVjLT5zdWJzeXN0ZW1faWQgPT0gMHgxN2FhM2JmOCkgeworCQkvKiBEdWUgdG8gYSBoYXJkd2FyZSBwcm9ibGVtIG9uIExlbm92byBJZGVhZHBhZCwgd2UgbmVlZCB0bworCQkgKiBmaXggdGhlIHNhbXBsZSByYXRlIG9mIGFuYWxvZyBJL08gdG8gNDQuMWtIegorCQkgKi8KKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfNDRrX3BjbV9hbmFsb2dfcGxheWJhY2s7CisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjlfNDRrX3BjbV9hbmFsb2dfY2FwdHVyZTsKKwl9IGVsc2UgeworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2OV9wY21fYW5hbG9nX3BsYXliYWNrOworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5X3BjbV9hbmFsb2dfY2FwdHVyZTsKKwl9CiAJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEMyNjkgRGlnaXRhbCI7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjMjY5X3BjbV9kaWdpdGFsX2NhcHR1cmU7CkBAIC0xMjc1Miw2ICsxMzEyNyw3IEBACiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjlfY2Fwc3JjX25pZHM7CiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA0LCBIREFfSU5QVVQpOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEMyNjlfQVVUTykKQEAgLTEzMDAyLDggKzEzMzc4LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjFfYXN1c19sYXB0b3BfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMywgMHgwLCBIREFfT1VUUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEzNDc3LDcgKzEzODUxLDcgQEAKIHN0YXRpYyBpbnQgYWxjODYxX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeCwgaWR4MTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTEzNTY0LDEyICsxMzkzOCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCWlmIChuaWQgPj0gMHgwYyAmJiBuaWQgPD0gMHgxMSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCX0KKwkJaWYgKG5pZCA+PSAweDBjICYmIG5pZCA8PSAweDExKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CiAJfQogfQogCkBAIC0xMzYwNSw3ICsxMzk3NSw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4NjFfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQpAQCAtMTM2MTQsMTMgKzEzOTg0LDEyIEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjODYxX2F1dG9faW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCXNwZWMtPmFkY19uaWRzID0gYWxjODYxX2FkY19uaWRzOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODYxX2FkY19uaWRzKTsKIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTM4MjksNiArMTQxOTgsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDIzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4NjFfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4NjFfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTM4NDAsNiArMTQyMTUsOCBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg2MV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg2MV9wY21fZGlnaXRhbF9jYXB0dXJlOwogCisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MjMsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAzOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CkBAIC0xMzk5Niw5ICsxNDM3Myw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQwMjIsOSArMTQzOTYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0MDYzLDggKzE0NDM0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQzNzUsOSArMTQ3NDQsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMDMsICJUb3NoaWJhIFAyMDUiLCBBTEM4NjFWRF9MRU5PVk8pLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMzEsICJUb3NoaWJhIEwzMC0xNDkiLCBBTEM4NjFWRF9EQUxMQVMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGQsICJCaW9zdGFyIE5GNjFTIFNFIiwgQUxDODYxVkRfNlNUX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjA2NiwgIkxlbm92byIsIEFMQzg2MVZEX0xFTk9WTyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzgwMiwgIkxlbm92byAzMDAwIEMyMDAiLCBBTEM4NjFWRF9MRU5PVk8pLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4NGUsICJMZW5vdm8gMzAwMCBOMjAwIiwgQUxDODYxVkRfTEVOT1ZPKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8iLCBBTEM4NjFWRF9MRU5PVk8pLAogCVNORF9QQ0lfUVVJUksoMHgxODQ5LCAweDA4NjIsICJBU1JvY2sgSzhORjZHLVZTVEEiLCBBTEM4NjFWRF82U1RfRElHKSwKIAl7fQogfTsKQEAgLTE0NTM5LDExICsxNDkwNiw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODYxdmRfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQlpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCQkJUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCQlpZiAobmlkICE9IEFMQzg2MVZEX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODYxVkRfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQlBTVBfT1VUX01VVEUpOwpAQCAtMTQ3MDksNyArMTUwNzQsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODYxVkRfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQpAQCAtMTQ3MTgsMTMgKzE1MDgzLDEyIEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjODYxdmRfdm9sdW1lX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTQ3NzUsNiArMTUxMzksMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDIzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4NjFWRF9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg2MXZkX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTE0Nzk3LDkgKzE1MTY3LDEwIEBACiAJc3BlYy0+YWRjX25pZHMgPSBhbGM4NjF2ZF9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MXZkX2FkY19uaWRzKTsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg2MXZkX2NhcHNyY19uaWRzOwotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsKKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7CiAKIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIApAQCAtMTQ5ODgsOCArMTUzNTksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTUwMTEsOCArMTUzODAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTU5ODgsNTYgKzE2MzU1LDU1IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2NmZ190YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg5MDg3LCAiRUNTIiwgQUxDNjYyX0VDUyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAwMCwgIkFTVVMgTjUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFjMywgIkFTVVMgTTcwViIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjAzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmMzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzUzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzY1LCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzgzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODIzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODMzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODQzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODY0LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc2LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTFWQSIsIEFMQzY2M19BU1VTX001MVZBKSwKKwkvKlNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzgsICJBU1VTIE01MFZyIiwgQUxDNjYzX0FTVVNfTU9ERTEpLCovCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5MywgIkFTVVMgTTUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5NCwgIkFTVVMgWDU1IiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MDMsICJBU1VTIEY1R0wiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkzMywgIkFTVVMgRjgwUSIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTYzLCAiQVNVUyBYNzFDIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5OTMsICJBU1VTIE4yMCIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBHNTBWIiwgQUxDNjYzX0FTVVNfRzUwViksCisJLypTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwqLworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YjMsICJBU1VTIEY3WiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWMzLCAiQVNVUyBGNVovRjZ4IiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyOTAsICJBU1VTIFA1R0MtTVgiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyYTEsICJBU1VTIEVlZXBjIiwgQUxDNjYyX0FTVVNfRUVFUENfUDcwMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODJkMSwgIkFTVVMgRWVlcGMgRVAyMCIsIEFMQzY2Ml9BU1VTX0VFRVBDX0VQMjApLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MDMsICJBU1VTIEY1R0wiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUwVnIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAwMCwgIkFTVVMgTjUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTliMywgIkFTVVMgRjdaIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyMDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5OTMsICJBU1VTIE4yMCIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWMzLCAiQVNVUyBGNVovRjZ4IiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NDMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZjMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzYsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NjQsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3ODMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YzMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MzMsICJBU1VTIEY4MFEiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5MywgIkFTVVMgTTUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFjMywgIkFTVVMgTTcwViIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTYzLCAiQVNVUyBYNzFDIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTQsICJBU1VTIFg1NSIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDkyLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU0KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODIzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU1KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODMzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzY1LCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwY2Q2LCAiRm94Y29ubiIsIEFMQzY2Ml9FQ1MpLAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBkNDcsICJGb3hjb25uIDQ1Q01YLzQ1R01YLzQ1Q01YLUsiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMWUsICJMZW5vdm8iLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDkwODcsICJFQ1MiLCBBTEM2NjJfRUNTKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwY2Q2LCAiRm94Y29ubiIsIEFMQzY2Ml9FQ1MpLAogCVNORF9QQ0lfUVVJUksoMHgxNDU4LCAweGEwMDIsICJHaWdhYnl0ZSA5NDVHQ00tUzJMIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU2NSwgMHg4MjBmLCAiQmlvc3RhciBUQTc4MEcgTTIrIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDFlLCAiTGVub3ZvIiwgQUxDNjYyX0xFTk9WT18xMDFFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgzNjYyLCAiQVNST0NLIEsxME43OEZ1bGxIRC1oU0xJIFIzLjAiLAogCQkJCQlBTEM2NjJfM1NUXzZjaF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxODU0LCAweDIwMDAsICJBU1VTIEgxMy0yMDAwIiwgQUxDNjYzX0FTVVNfSDEzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgyMDAxLCAiQVNVUyBIMTMtMjAwMSIsIEFMQzY2M19BU1VTX0gxMyksCi0JU05EX1BDSV9RVUlSSygweDE4NTQsIDB4MjAwMiwgIkFTVVMgSDEzLTIwMDIiLCBBTEM2NjNfQVNVU19IMTMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE4NTQsIDB4ZjAwMCwgMHgyMDAwLCAiQVNVUyBIMTMtMjAweCIsCisJCQkgICBBTEM2NjNfQVNVU19IMTMpLAogCXt9CiB9OwogCkBAIC0xNjM1Nyw3ICsxNjcyMyw3IEBACiAKIAlpZiAoYWxjODgwX2lzX2ZpeGVkX3BpbihwaW4pKSB7CiAJCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGFsYzg4MF9maXhlZF9waW5faWR4KHBpbikpOwotICAgICAgICAgICAgICAgIC8qIHByaW50aygiREFDIG5pZD0leFxuIixuaWQpOyAqLworCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiREFDIG5pZD0leFxuIixuaWQpOyAqLwogCQkvKiBzcGVjaWZ5IHRoZSBEQUMgYXMgdGhlIGV4dHJhIG91dHB1dCAqLwogCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKIAkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IG5pZDsKQEAgLTE2Mzg3LDI2ICsxNjc1Myw1OCBAQAogCXJldHVybiAwOwogfQogCisvKiByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzcmMgd2lkZ2V0IGZyb20gdGhlIGNvbm5lY3Rpb24gbGlzdCBvZiB0aGUgbmlkLgorICogcmV0dXJuIC0xIGlmIG5vdCBmb3VuZAorICovCitzdGF0aWMgaW50IGFsYzY2Ml9pbnB1dF9waW5faWR4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCWhkYV9uaWRfdCBzcmMpCit7CisJaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX0NPTk5FQ1RJT05TXTsKKwlpbnQgaSwgY29ubnM7CisKKwljb25ucyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm5fbGlzdCwKKwkJCQkJQVJSQVlfU0laRShjb25uX2xpc3QpKTsKKwlpZiAoY29ubnMgPCAwKQorCQlyZXR1cm4gLTE7CisJZm9yIChpID0gMDsgaSA8IGNvbm5zOyBpKyspCisJCWlmIChjb25uX2xpc3RbaV0gPT0gc3JjKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGFsYzY2Ml9pc19pbnB1dF9waW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJdW5zaWduZWQgaW50IHBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CisJcmV0dXJuIChwaW5jYXAgJiBBQ19QSU5DQVBfSU4pICE9IDA7Cit9CisKIC8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zICovCi1zdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeDsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKLQkJaWYgKGFsYzg4MF9pc19pbnB1dF9waW4oY2ZnLT5pbnB1dF9waW5zW2ldKSkgewotCQkJaWR4ID0gYWxjODgwX2lucHV0X3Bpbl9pZHgoY2ZnLT5pbnB1dF9waW5zW2ldKTsKLQkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAotCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwKLQkJCQkJICAgICAgIGlkeCwgMHgwYik7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9Ci0JCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPQotCQkJCWFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7Ci0JCQlpbXV4LT5udW1faXRlbXMrKzsKKwkJaWYgKGFsYzY2Ml9pc19pbnB1dF9waW4oY29kZWMsIGNmZy0+aW5wdXRfcGluc1tpXSkpIHsKKwkJCWlkeCA9IGFsYzY2Ml9pbnB1dF9waW5faWR4KGNvZGVjLCAweDBiLAorCQkJCQkJICAgY2ZnLT5pbnB1dF9waW5zW2ldKTsKKwkJCWlmIChpZHggPj0gMCkgeworCQkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAorCQkJCQkJICAgICAgIGF1dG9fcGluX2NmZ19sYWJlbHNbaV0sCisJCQkJCQkgICAgICAgaWR4LCAweDBiKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJCWlkeCA9IGFsYzY2Ml9pbnB1dF9waW5faWR4KGNvZGVjLCAweDIyLAorCQkJCQkJICAgY2ZnLT5pbnB1dF9waW5zW2ldKTsKKwkJCWlmIChpZHggPj0gMCkgeworCQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPQorCQkJCQlhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldOworCQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSBpZHg7CisJCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCQl9CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0xNjQ1Niw3ICsxNjg1NCw2IEBACiAJCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULCAwKTsKIH0KIAotI2RlZmluZSBhbGM2NjJfaXNfaW5wdXRfcGluKG5pZCkJYWxjODgwX2lzX2lucHV0X3BpbihuaWQpCiAjZGVmaW5lIEFMQzY2Ml9QSU5fQ0RfTklECQlBTEM4ODBfUElOX0NEX05JRAogCiBzdGF0aWMgdm9pZCBhbGM2NjJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTE2NDY2LDEyICsxNjg2MywxMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwotCQlpZiAoYWxjNjYyX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pKTsKLQkJCWlmIChuaWQgIT0gQUxDNjYyX1BJTl9DRF9OSUQpCisJCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKGNvZGVjLCBuaWQpKSB7CisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDNjYyX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtMTY1MDksMjAgKzE2OTA0LDIwIEBACiAJCQkJCSAgICJIZWFkcGhvbmUiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlhZGRfdmVyYihzcGVjLCBhbGM2NjJfYXV0b19pbml0X3ZlcmJzKTsKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzKQpAQCAtMTY1MzIsNyArMTY5MjcsNiBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xNjU4NCw2ICsxNjk3OCwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDNjYyX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjNjYyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTE2NjA3LDEwICsxNzAwNywxNCBAQAogCXNwZWMtPmFkY19uaWRzID0gYWxjNjYyX2FkY19uaWRzOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2FkY19uaWRzKTsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzY2Ml9jYXBzcmNfbmlkczsKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjIpCisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOworCWVsc2UKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA4MDI3ZWRmLi5iNWUxMDhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC00Myw2ICs0Myw3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDX0FVVE8sCiAJU1RBQ19SRUYsCiAJU1RBQ185MjAwX09RTywKIAlTVEFDXzkyMDBfREVMTF9EMjEsCkBAIC02MiwxNCArNjMsMTcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTIwNV9BVVRPLAogCVNUQUNfOTIwNV9SRUYsCiAJU1RBQ185MjA1X0RFTExfTTQyLAogCVNUQUNfOTIwNV9ERUxMX000MywKIAlTVEFDXzkyMDVfREVMTF9NNDQsCisJU1RBQ185MjA1X0VBUEQsCiAJU1RBQ185MjA1X01PREVMUwogfTsKIAogZW51bSB7CisJU1RBQ185MkhENzNYWF9BVVRPLAogCVNUQUNfOTJIRDczWFhfTk9fSkQsIC8qIG5vIGphY2stZGV0ZWN0aW9uICovCiAJU1RBQ185MkhENzNYWF9SRUYsCiAJU1RBQ19ERUxMX002X0FNSUMsCkBAIC04MCwyMiArODQsMjcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTJIRDgzWFhYX0FVVE8sCiAJU1RBQ185MkhEODNYWFhfUkVGLAogCVNUQUNfOTJIRDgzWFhYX1BXUl9SRUYsCisJU1RBQ19ERUxMX1MxNCwKIAlTVEFDXzkySEQ4M1hYWF9NT0RFTFMKIH07CiAKIGVudW0geworCVNUQUNfOTJIRDcxQlhYX0FVVE8sCiAJU1RBQ185MkhENzFCWFhfUkVGLAogCVNUQUNfREVMTF9NNF8xLAogCVNUQUNfREVMTF9NNF8yLAogCVNUQUNfREVMTF9NNF8zLAogCVNUQUNfSFBfTTQsCiAJU1RBQ19IUF9EVjUsCisJU1RBQ19IUF9IRFgsCiAJU1RBQ185MkhENzFCWFhfTU9ERUxTCiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyNXhfQVVUTywKIAlTVEFDXzkyNXhfUkVGLAogCVNUQUNfTTEsCiAJU1RBQ19NMV8yLApAQCAtMTA4LDYgKzExNyw3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyMlhfQVVUTywKIAlTVEFDX0Q5NDVfUkVGLAogCVNUQUNfRDk0NUdUUDMsCiAJU1RBQ19EOTQ1R1RQNSwKQEAgLTEzNSw2ICsxNDUsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MjdYX0FVVE8sCiAJU1RBQ19EOTY1X1JFRl9OT19KRCwgLyogbm8gamFjay1kZXRlY3Rpb24gKi8KIAlTVEFDX0Q5NjVfUkVGLAogCVNUQUNfRDk2NV8zU1QsCkBAIC0xNDQsNiArMTU1LDEyIEBACiAJU1RBQ185MjdYX01PREVMUwogfTsKIAorZW51bSB7CisJU1RBQ185ODcyX0FVVE8sCisJU1RBQ185ODcyX1ZBSU8sCisJU1RBQ185ODcyX01PREVMUworfTsKKwogc3RydWN0IHNpZ21hdGVsX2V2ZW50IHsKIAloZGFfbmlkX3QgbmlkOwogCXVuc2lnbmVkIGNoYXIgdHlwZTsKQEAgLTE2Nyw2ICsxODQsNyBAQAogCXVuc2lnbmVkIGludCBhbHRfc3dpdGNoOiAxOwogCXVuc2lnbmVkIGludCBocF9kZXRlY3Q6IDE7CiAJdW5zaWduZWQgaW50IHNwZGlmX211dGU6IDE7CisJdW5zaWduZWQgaW50IGNoZWNrX3ZvbHVtZV9vZmZzZXQ6MTsKIAogCS8qIGdwaW8gbGluZXMgKi8KIAl1bnNpZ25lZCBpbnQgZWFwZF9tYXNrOwpAQCAtMTc5LDYgKzE5Nyw3IEBACiAJdW5zaWduZWQgaW50IHN0cmVhbV9kZWxheTsKIAogCS8qIGFuYWxvZyBsb29wYmFjayAqLworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICphbG9vcGJhY2tfY3RsOwogCXVuc2lnbmVkIGNoYXIgYWxvb3BiYWNrX21hc2s7CiAJdW5zaWduZWQgY2hhciBhbG9vcGJhY2tfc2hpZnQ7CiAKQEAgLTIwMyw2ICsyMjIsOCBAQAogCWhkYV9uaWRfdCBocF9kYWNzWzVdOwogCWhkYV9uaWRfdCBzcGVha2VyX2RhY3NbNV07CiAKKwlpbnQgdm9sdW1lX29mZnNldDsKKwogCS8qIGNhcHR1cmUgKi8KIAloZGFfbmlkX3QgKmFkY19uaWRzOwogCXVuc2lnbmVkIGludCBudW1fYWRjczsKQEAgLTIyNCw3ICsyNDUsNiBAQAogCS8qIHBpbiB3aWRnZXRzICovCiAJaGRhX25pZF90ICpwaW5fbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX3BpbnM7Ci0JdW5zaWduZWQgaW50ICpwaW5fY29uZmlnczsKIAogCS8qIGNvZGVjIHNwZWNpZmljIHN0dWZmICovCiAJc3RydWN0IGhkYV92ZXJiICppbml0OwpAQCAtNDAwLDYgKzQyMCwxMCBAQAogICAgICAgICAweDEyLCAweDEzLAogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9zbGF2ZV9kaWdfb3V0c1syXSA9IHsKKwkweDFmLCAwLAorfTsKKwogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9hZGNfbmlkc1szXSA9IHsKICAgICAgICAgMHgwNywgMHgwOCwgMHgwOQogfTsKQEAgLTQ3MiwxNSArNDk2LDIxIEBACiAJMHgxNCwgMHgyMiwgMHgyMwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X3Bpbl9uaWRzWzE0XSA9IHsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9waW5fbmlkc1sxMF0gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwKLQkweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLAotCTB4MWQsIDB4MWUsIDB4MWYsIDB4MjAKKwkweDBmLCAweDEwLCAweDExLCAweDFmLCAweDIwLAogfTsKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc1sxMV0gPSB7CisKKyNkZWZpbmUgU1RBQzkySEQ3MUJYWF9OVU1fUElOUyAxMworc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzRwb3J0W1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0geworCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgxOCwgMHgxOSwgMHgxZSwKKwkweDFmLCAweDIwLCAweDI3Cit9Oworc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzZwb3J0W1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsCiAJMHgwZiwgMHgxNCwgMHgxOCwgMHgxOSwgMHgxZSwKLQkweDFmLAorCTB4MWYsIDB4MjAsIDB4MjcKIH07CiAKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfcGluX25pZHNbMTRdID0gewpAQCAtODQyLDkgKzg3Miw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkODN4eHhfY29yZV9pbml0W10gPSB7Ci0JeyAweGEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAotCXsgMHhiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQl7IDB4ZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJeyAweGEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCXsgMHhiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwl7IDB4ZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCiAKIAkvKiBwb3dlciBzdGF0ZSBjb250cm9scyBhbXBzICovCiAJeyAweDAxLCBBQ19WRVJCX1NFVF9FQVBELCAxIDw8IDJ9LApAQCAtODU0LDI2ICs4ODQsMjUgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8KIAl7IDB4MjgsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LAotCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwYSwgMHhkLCAweDBmICovCi0JeyAweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJe30KIH07CiAKLSNkZWZpbmUgSERfRElTQUJMRV9QT1JURiAyCisjZGVmaW5lIEhEX0RJU0FCTEVfUE9SVEYgMQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbXSA9IHsKIAkvKiBzdGFydCBvZiBjb25maWcgIzEgKi8KIAogCS8qIGNvbm5lY3QgcG9ydCAwZiB0byBhdWRpbyBtaXhlciAqLwogCXsgMHgwZiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4Mn0sCi0JLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlIDB4MGYgKi8KLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIHN0YXJ0IG9mIGNvbmZpZyAjMiAqLwogCiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKLQkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGEsIDB4ZCAqLworCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdFtdID0geworCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwZiwgMHhhLCAweDBkICovCisJeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IDB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgMHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJe30KQEAgLTk1NCwxNiArOTgzLDYgQEAKIAkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCBpZHgsIGRpcikgXAogCX0KIAotI2RlZmluZSBTVEFDX0lOUFVUX1NPVVJDRShjbnQpIFwKLQl7IFwKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKLQkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwgXAotCQkuY291bnQgPSBjbnQsIFwKLQkJLmluZm8gPSBzdGFjOTJ4eF9tdXhfZW51bV9pbmZvLCBcCi0JCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsIFwKLQkJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwgXAotCX0KLQogI2RlZmluZSBTVEFDX0FOQUxPR19MT09QQkFDSyh2ZXJiX3JlYWQsIHZlcmJfd3JpdGUsIGNudCkgXAogCXsgXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXApAQCAtOTc4LDcgKzk5Nyw2IEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHhiLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4YiwgMCwgSERBX09VVFBVVCksCi0JU1RBQ19JTlBVVF9TT1VSQ0UoMSksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBhLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBhLCAwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC0xMDAzLDggKzEwMjEsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkRBQyBNaXhlciBDYXB0dXJlIFZvbHVtZSIsIDB4MWQsIDB4MywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiREFDIE1peGVyIENhcHR1cmUgU3dpdGNoIiwgMHgxZCwgMHgzLCBIREFfSU5QVVQpLAogCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCAzKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMDE0LDkgKzEwMzAsMjIgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9taXhlcltdID0gewotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNCksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzZjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgMyksCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA0KSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF8xMGNoX2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA1KSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTA0MSw4ICsxMDcwLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfMTBjaF9taXhlcltdID0gewotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNSksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTA5NCw5ICsxMTIxLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X2FuYWxvZ19taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMiksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTEyMiwxMCArMTE0NiwxMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKQorfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTEzNywxNiArMTE2MiwxMiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjV4X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMCwgSERBX09VVFBVVCksCi0JU1RBQ19JTlBVVF9TT1VSQ0UoMSksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE0LCAwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDVfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFMCwgMHg3RTAsIDEpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTE1NSw5ICsxMTc2LDEzIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjA1X2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRTAsIDB4N0UwLCAxKSwKKwl7fQorfTsKKwogLyogVGhpcyBuZWVkcyB0byBiZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VxdWVuY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIyeF9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIApAQCAtMTE2OCw5ICsxMTkzLDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyN3hfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgzKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFQiwgMHg3RUIsIDEpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDE4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTE4Miw2ICsxMjA0LDExIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5Mjd4X2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRUIsIDB4N0VCLCAxKSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWNfZG11eF9taXhlciA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJEaWdpdGFsIElucHV0IFNvdXJjZSIsCkBAIC0xMjA3LDEwICsxMjM0LDcgQEAKIAkiTEZFIFBsYXliYWNrIFZvbHVtZSIsCiAJIlNpZGUgUGxheWJhY2sgVm9sdW1lIiwKIAkiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsCi0JIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAogCSJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCi0JIkV4dGVybmFsIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkiU3BlYWtlcjIgUGxheWJhY2sgVm9sdW1lIiwKIAlOVUxMCiB9OwogCkBAIC0xMjIxLDEwICsxMjQ1LDcgQEAKIAkiTEZFIFBsYXliYWNrIFN3aXRjaCIsCiAJIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwKIAkiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCi0JIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAogCSJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JIkV4dGVybmFsIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkiU3BlYWtlcjIgUGxheWJhY2sgU3dpdGNoIiwKIAkiSUVDOTU4IFBsYXliYWNrIFN3aXRjaCIsCiAJTlVMTAogfTsKQEAgLTEyOTQsNiArMTMxNSw4IEBACiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKIAkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLAogCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CisJCS8qIGNvcnJlY3Qgdm9sdW1lIG9mZnNldCAqLworCQl2bWFzdGVyX3RsdlsyXSArPSB2bWFzdGVyX3RsdlszXSAqIHNwZWMtPnZvbHVtZV9vZmZzZXQ7CiAJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKIAkJCQkJICB2bWFzdGVyX3Rsdiwgc2xhdmVfdm9scyk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTMwNiw2ICsxMzI5LDEzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChzcGVjLT5hbG9vcGJhY2tfY3RsICYmCisJICAgIHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImxvb3BiYWNrIikgPT0gMSkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgc3BlYy0+YWxvb3BiYWNrX2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlzdGFjOTJ4eF9mcmVlX2tjdGxzKGNvZGVjKTsgLyogbm8gbG9uZ2VyIG5lZWRlZCAqLwogCiAJLyogY3JlYXRlIGphY2sgaW5wdXQgZWxlbWVudHMgKi8KQEAgLTE0OTAsNiArMTUyMCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMDBfbW9kZWxzW1NUQUNfOTIwMF9NT0RFTFNdID0geworCVtTVEFDX0FVVE9dID0gImF1dG8iLAogCVtTVEFDX1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjAwX09RT10gPSAib3FvIiwKIAlbU1RBQ185MjAwX0RFTExfRDIxXSA9ICJkZWxsLWQyMSIsCkBAIC0xNTExLDYgKzE1NDIsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKIAkvKiBEZWxsIGxhcHRvcHMgaGF2ZSBCSU9TIHByb2JsZW0gKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWE4LAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjAwX0RFTExfRDIxKSwKQEAgLTE2MzMsNiArMTY2Niw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyNXhfbW9kZWxzW1NUQUNfOTI1eF9NT0RFTFNdID0geworCVtTVEFDXzkyNXhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfUkVGXSA9ICJyZWYiLAogCVtTVEFDX00xXSA9ICJtMSIsCiAJW1NUQUNfTTFfMl0gPSAibTEtMiIsCkBAIC0xNjYwLDYgKzE2OTQsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjV4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSygweDgzODQsIDB4NzYzMiwgIlN0YWM5MjAyIFJlZmVyZW5jZSBCb2FyZCIsIFNUQUNfUkVGKSwKIAogCS8qIERlZmF1bHQgdGFibGUgZm9yIHVua25vd24gSUQgKi8KQEAgLTE2OTEsNiArMTcyNiw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyaGQ3M3h4X21vZGVsc1tTVEFDXzkySEQ3M1hYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDczWFhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTJIRDczWFhfTk9fSkRdID0gIm5vLWpkIiwKIAlbU1RBQ185MkhENzNYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNl9BTUlDXSA9ICJkZWxsLW02LWFtaWMiLApAQCAtMTcwMyw2ICsxNzM5LDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyNTQsCiAJCQkJIkRlbGwgU3R1ZGlvIDE1MzUiLCBTVEFDX0RFTExfTTZfRE1JQyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDI1NSwKQEAgLTE3MjYsNTIgKzE3NjQsNjggQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxNF0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMjIxMTAxMCwgMHgwMmExOTAyMCwgMHgwMjE3MDEzMCwKIAkweDAxMDE0MDUwLCAweDAxODE5MDQwLCAweDAxMDE0MDIwLCAweDkwYTMwMTRlLAotCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCiAJMHgwMTQ1MTE2MCwgMHg5ODU2MDE3MCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9zMTRfcGluX2NvbmZpZ3NbMTBdID0geworCTB4MDIyMTQwMzAsIDB4MDIyMTEwMTAsIDB4MDJhMTkwMjAsIDB4MDEwMTQwNTAsCisJMHg0MGYwMDBmMCwgMHgwMTgxOTA0MCwgMHg0MGYwMDBmMCwgMHg5MGE2MDE2MCwKKwkweDQwZjAwMGYwLCAweDQwZjAwMGYwLAorfTsKKwogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ4M3h4eF9icmRfdGJsW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDgzWFhYX1JFRl0gPSByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzLAorCVtTVEFDX0RFTExfUzE0XSA9IGRlbGxfczE0X3Bpbl9jb25maWdzLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkODN4eHhfbW9kZWxzW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDgzWFhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ4M1hYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gIm1pYy1yZWYiLAorCVtTVEFDX0RFTExfUzE0XSA9ICJkZWxsLXMxNCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyaGQ4M3h4eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ4M1hYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDgzWFhYX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJiYSwKKwkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfREVMTF9TMTQpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDIyMTQwMzAsIDB4MDJhMTkwNDAsIDB4MDFhMTkwMjAsIDB4MDEwMTQwMTAsCiAJMHgwMTgxMzAyZSwgMHgwMTAxNDAxMCwgMHgwMTAxOTAyMCwgMHg5MGEwMDBmMCwKLQkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLAorCTB4OTBhMDAwZjAsIDB4MDE0NTIwNTAsIDB4MDE0NTIwNTAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg0MGYwMDBmMCwgMHg5MDE3MDExMCwKIAkweDIzYTE5MDJlLCAweDIzMDE0MjUwLCAweDQwZjAwMGYwLCAweDkwYTAwMGYwLAotCTB4NDBmMDAwZjAsIDB4NGYwMDAwZjAsIDB4NGYwMDAwZjAsCisJMHg0MGYwMDBmMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDkwYTcwMzMwLCAweDkwMTcwMTEwLAogCTB4MjNhMTkwMmUsIDB4MjMwMTQyNTAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCi0JMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwKKwkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4OTBhNzAzMzAsIDB4OTAxNzAxMTAsCiAJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg5MGEwMDBmMCwKLQkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLAorCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CkBAIC0xNzgxLDM1ICsxODM1LDM4IEBACiAJW1NUQUNfREVMTF9NNF8zXQk9IGRlbGxfbTRfM19waW5fY29uZmlncywKIAlbU1RBQ19IUF9NNF0JCT0gTlVMTCwKIAlbU1RBQ19IUF9EVjVdCQk9IE5VTEwsCisJW1NUQUNfSFBfSERYXSAgICAgICAgICAgPSBOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkNzFieHhfbW9kZWxzW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDcxQlhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ3MUJYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNF8xXSA9ICJkZWxsLW00LTEiLAogCVtTVEFDX0RFTExfTTRfMl0gPSAiZGVsbC1tNC0yIiwKIAlbU1RBQ19ERUxMX000XzNdID0gImRlbGwtbTQtMyIsCiAJW1NUQUNfSFBfTTRdID0gImhwLW00IiwKIAlbU1RBQ19IUF9EVjVdID0gImhwLWR2NSIsCisJW1NUQUNfSFBfSERYXSA9ICJocC1oZHgiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkNzFieHhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmMiwKLQkJICAgICAgIkhQIGR2NSIsIFNUQUNfSFBfTTQpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY0LAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY3LAotCQkgICAgICAiSFAgZHY0IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGZjLAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9NNCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDAsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDMsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwODAsCisJCSAgICAgICJIUCIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwZjAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDM2MDAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYxMCwKKwkJICAgICAgIkhQIEhEWCIsIFNUQUNfSFBfSERYKSwgIC8qIEhEWDE4ICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MWEsCi0JCQkJInVua25vd24gSFAiLCBTVEFDX0hQX000KSwKKwkJICAgICAgIkhQIG1pbmkgMTAwMCIsIFNUQUNfSFBfTTQpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjFiLAorCQkgICAgICAiSFAgSERYIiwgU1RBQ19IUF9IRFgpLCAgLyogSERYMTYgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjMzLAogCQkJCSJ1bmtub3duIERlbGwiLCBTVEFDX0RFTExfTTRfMSksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIzNCwKQEAgLTE5NjEsNiArMjAxOCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMnhfbW9kZWxzW1NUQUNfOTIyWF9NT0RFTFNdID0geworCVtTVEFDXzkyMlhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfRDk0NV9SRUZdCT0gInJlZiIsCiAJW1NUQUNfRDk0NUdUUDVdCT0gIjVzdGFjayIsCiAJW1NUQUNfRDk0NUdUUDNdCT0gIjNzdGFjayIsCkBAIC0xOTg4LDYgKzIwNDYsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogSW50ZWwgOTQ1RyBiYXNlZCBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAxMDEsCiAJCSAgICAgICJJbnRlbCBEOTQ1RyIsIFNUQUNfRDk0NUdUUDMpLApAQCAtMjA0MSw2ICsyMTAxLDkgQEAKIAkJICAgICAgIkludGVsIEQ5NDVQIiwgU1RBQ19EOTQ1R1RQMyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA3MDcsCiAJCSAgICAgICJJbnRlbCBEOTQ1UCIsIFNUQUNfRDk0NUdUUDUpLAorCS8qIG90aGVyIGludGVsICovCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAyMDQsCisJCSAgICAgICJJbnRlbCBEOTQ1IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogb3RoZXIgc3lzdGVtcyAgKi8KIAkvKiBBcHBsZSBJbnRlbCBNYWMgKE1hYyBNaW5pLCBNYWNCb29rLCBNYWNCb29rIFByby4uLikgKi8KIAlTTkRfUENJX1FVSVJLKDB4ODM4NCwgMHg3NjgwLApAQCAtMjA2NSwzMSArMjEyOCw3IEBACiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFkNywKIAkJICAgICAgIkRlbGwgWFBTIE0xMjEwIiwgU1RBQ185MjJYX0RFTExfTTgyKSwKIAkvKiBFQ1MvUEMgQ2hpcHMgYm9hcmRzICovCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjE0NCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYwOCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYzMywKLQkJICAgICAgIkVDUy9QQyBjaGlwcyBQMTdHLzEzMzMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTEsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTIsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTMsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTQsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTUsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTYsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTcsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTgsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTksCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MjAsCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAxOSwgMHhmMDAwLCAweDIwMDAsCiAJCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC0yMTMyLDYgKzIxNzEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5Mjd4X21vZGVsc1tTVEFDXzkyN1hfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjdYX0FVVE9dCT0gImF1dG8iLAogCVtTVEFDX0Q5NjVfUkVGX05PX0pEXQk9ICJyZWYtbm8tamQiLAogCVtTVEFDX0Q5NjVfUkVGXQkJPSAicmVmIiwKIAlbU1RBQ19EOTY1XzNTVF0JCT0gIjNzdGFjayIsCkBAIC0yMTQ0LDI2ICsyMTg0LDE2IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKIAkgLyogSW50ZWwgOTQ2IGJhc2VkIHN5c3RlbXMgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2QwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4YTMwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAkvKiA5NjUgYmFzZWQgMyBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTAsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDksICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDgsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDcsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMTAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDIwMDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAogCS8qIERlbGwgMyBzdGFjayBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsICAweDAxZjcsICJEZWxsIFhQUyBNMTczMCIsIFNUQUNfREVMTF8zU1QpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMWRkLCAiRGVsbCBEaW1lbnNpb24gRTUyMCIsIFNUQUNfREVMTF8zU1QpLApAQCAtMjE3OSwxNSArMjIwOSwxMCBAQAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMmZmLCAiRGVsbCAgICAgIiwgU1RBQ19ERUxMX0JJT1MpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMjA5LCAiRGVsbCBYUFMgMTMzMCIsIFNUQUNfREVMTF9CSU9TKSwKIAkvKiA5NjUgYmFzZWQgNSBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMzAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDI1MDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTIyNDAsMTkgKzIyNjUsMjUgQEAKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9IGRlbGxfOTIwNV9tNDJfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSBkZWxsXzkyMDVfbTQzX3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gZGVsbF85MjA1X200NF9waW5fY29uZmlncywKKwlbU1RBQ185MjA1X0VBUERdID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTIwNV9tb2RlbHNbU1RBQ185MjA1X01PREVMU10gPSB7CisJW1NUQUNfOTIwNV9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MjA1X1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9ICJkZWxsLW00MiIsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSAiZGVsbC1tNDMiLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gImRlbGwtbTQ0IiwKKwlbU1RBQ185MjA1X0VBUERdID0gImVhcGQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjA1X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCS8qIERlbGwgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYxLAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYyLApAQCAtMjI4MywxMDEgKzIzMTQsMjQgQEAKIAkJICAgICAgIkRlbGwgSW5zcGlyb24iLCBTVEFDXzkyMDVfREVMTF9NNDQpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMjgsCiAJCSAgICAgICJEZWxsIFZvc3RybyAxNTAwIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKKwkvKiBHYXRld2F5ICovCisJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2NSwgIkdhdGV3YXkgVDE2MTYiLCBTVEFDXzkyMDVfRUFQRCksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIGludCBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQkKLQlrZnJlZShzcGVjLT5waW5fY29uZmlncyk7Ci0Jc3BlYy0+cGluX2NvbmZpZ3MgPSBrY2FsbG9jKHNwZWMtPm51bV9waW5zLCBzaXplb2YoKnNwZWMtPnBpbl9jb25maWdzKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGVjLT5waW5fY29uZmlncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaGRhX25pZF90IG5pZCA9IHNwZWMtPnBpbl9uaWRzW2ldOwotCQl1bnNpZ25lZCBpbnQgcGluX2NmZzsKLQkJCi0JCXBpbl9jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgCi0JCQlBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMHgwMCk7CQotCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogcGluIG5pZCAlMi4yeCBiaW9zIHBpbiBjb25maWcgJTguOHhcbiIsCi0JCQkJCW5pZCwgcGluX2NmZyk7Ci0JCXNwZWMtPnBpbl9jb25maWdzW2ldID0gcGluX2NmZzsKLQl9Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICBoZGFfbmlkX3QgcGluX25pZCwgdW5zaWduZWQgaW50IHBpbl9jb25maWcpCi17Ci0JaW50IGk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wLAotCQkJICAgIHBpbl9jb25maWcgJiAweDAwMDAwMGZmKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzEsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwMDBmZjAwKSA+PiA4KTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJICAgIHBpbl9jb25maWcgPj4gMjQpOwotCWkgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkgICAgICAgMHgwMCk7CQotCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBwaW4gbmlkICUyLjJ4IHBpbiBjb25maWcgJTguOHhcbiIsCi0JCSAgICBwaW5fbmlkLCBpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpwaW5jZmdzKQogewogCWludCBpOwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLSAJaWYgKCFzcGVjLT5waW5fY29uZmlncykKLSAJCXJldHVybjsKKwlpZiAoIXBpbmNmZ3MpCisJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQotCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgc3BlYy0+cGluX25pZHNbaV0sCi0JCQkJCXNwZWMtPnBpbl9jb25maWdzW2ldKTsKLX0KLQotc3RhdGljIGludCBzdGFjX3NhdmVfcGluX2NmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCAqcGlucykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCi0JaWYgKCFwaW5zKQotCQlyZXR1cm4gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKLQlzcGVjLT5waW5fY29uZmlncyA9IGttZW1kdXAocGlucywKLQkJCQkgICAgc3BlYy0+bnVtX3BpbnMgKiBzaXplb2YoKnBpbnMpLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwZWMtPnBpbl9jb25maWdzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWNfY2hhbmdlX3Bpbl9jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkJICAgdW5zaWduZWQgaW50IGNmZykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaWYgKHNwZWMtPnBpbl9uaWRzW2ldID09IG5pZCkgewotCQkJc3BlYy0+cGluX2NvbmZpZ3NbaV0gPSBjZmc7Ci0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgbmlkLCBjZmcpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJCWlmIChzcGVjLT5waW5fbmlkc1tpXSAmJiBwaW5jZmdzW2ldKQorCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpXSwKKwkJCQkJCSBwaW5jZmdzW2ldKTsKIH0KIAogLyoKQEAgLTI1NjcsNyArMjUyMSw3IEBACiAJCWNvZGVjLT5udW1fcGNtcysrOwogCQlpbmZvKys7CiAJCWluZm8tPm5hbWUgPSAiU1RBQzkyeHggRGlnaXRhbCI7Ci0JCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOworCQlpbmZvLT5wY21fdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOwogCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpIHsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHN0YWM5Mnh4X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLm5pZCA9IHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkOwpAQCAtMjU4Myw4ICsyNTM3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTJ4eF9nZXRfdnJlZihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKLQl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQkgQUNfUEFSX1BJTl9DQVApOworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCXBpbmNhcCA9IChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRikgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQ7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGXzEwMCkKIAkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzEwMDsKQEAgLTI3NTksMjIgKzI3MTIsMzcgQEAKIH07CiAKIC8qIGFkZCBkeW5hbWljIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9jb250cm9sX3RlbXAoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCi0JCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCi0JCQkJICAgICBpbnQgaWR4LCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKgorc3RhY19jb250cm9sX25ldyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKKwkJIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKKwkJIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKIAlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+a2N0bHMsIHNpemVvZigqa25ldyksIDMyKTsKIAlrbmV3ID0gc25kX2FycmF5X25ldygmc3BlYy0+a2N0bHMpOwogCWlmICgha25ldykKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCSprbmV3ID0gKmt0ZW1wOwotCWtuZXctPmluZGV4ID0gaWR4OwogCWtuZXctPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwotCWlmICgha25ldy0+bmFtZSkKKwlpZiAoIWtuZXctPm5hbWUpIHsKKwkJLyogcm9vbGJhY2sgKi8KKwkJbWVtc2V0KGtuZXcsIDAsIHNpemVvZigqa25ldykpOworCQlzcGVjLT5rY3Rscy5hbGxvY2VkLS07CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4ga25ldzsKK30KKworc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfY29udHJvbF90ZW1wKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAorCQkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmt0ZW1wLAorCQkJCSAgICAgaW50IGlkeCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3ID0gc3RhY19jb250cm9sX25ldyhzcGVjLCBrdGVtcCwgbmFtZSk7CisJaWYgKCFrbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKKwlrbmV3LT5pbmRleCA9IGlkeDsKIAlrbmV3LT5wcml2YXRlX3ZhbHVlID0gdmFsOwogCXJldHVybiAwOwogfQpAQCAtMjc5Niw2ICsyNzY0LDI5IEBACiAJcmV0dXJuIHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCB0eXBlLCAwLCBuYW1lLCB2YWwpOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19pbnB1dF9zcmNfdGVtcCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKKwkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LAorCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCit9OworCitzdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCisJaWYgKCFzcGVjLT5udW1fYWRjcyB8fCBpbXV4LT5udW1faXRlbXMgPD0gMSkKKwkJcmV0dXJuIDA7IC8qIG5vIG5lZWQgZm9yIGlucHV0IHNvdXJjZSBjb250cm9sICovCisJa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywgJnN0YWNfaW5wdXRfc3JjX3RlbXAsCisJCQkJc3RhY19pbnB1dF9zcmNfdGVtcC5uYW1lKTsKKwlpZiAoIWtuZXcpCisJCXJldHVybiAtRU5PTUVNOworCWtuZXctPmNvdW50ID0gc3BlYy0+bnVtX2FkY3M7CisJcmV0dXJuIDA7Cit9CisKIC8qIGNoZWNrIHdoZXRoZXIgdGhlIGxpbmUtaW5wdXQgY2FuIGJlIHVzZWQgYXMgbGluZS1vdXQgKi8KIHN0YXRpYyBoZGFfbmlkX3QgY2hlY2tfbGluZV9vdXRfc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMjgwNyw3ICsyNzk4LDcgQEAKIAlpZiAoY2ZnLT5saW5lX291dF90eXBlICE9IEFVVE9fUElOX0xJTkVfT1VUKQogCQlyZXR1cm4gMDsKIAluaWQgPSBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTElORV07Ci0JcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfT1VUKQogCQlyZXR1cm4gbmlkOwogCXJldHVybiAwOwpAQCAtMjgyNiwxMiArMjgxNywxMSBAQAogCW1pY19waW4gPSBBVVRPX1BJTl9NSUM7CiAJZm9yICg7OykgewogCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dF9waW5zW21pY19waW5dOwotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQkvKiBzb21lIGxhcHRvcHMgaGF2ZSBhbiBpbnRlcm5hbCBhbmFsb2cgbWljcm9waG9uZQogCQkgKiB3aGljaCBjYW4ndCBiZSB1c2VkIGFzIGEgb3V0cHV0ICovCiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpICE9IEFDX0pBQ0tfUE9SVF9GSVhFRCkgewotCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX09VVCkKIAkJCQlyZXR1cm4gbmlkOwogCQl9CkBAIC0yODc5LDggKzI4NjksNyBAQAogCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKIAkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CiAJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKLQkJd2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvbm5bal0sCi0JCQkJCSAgIEFDX1BBUl9BVURJT19XSURHRVRfQ0FQKTsKKwkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNvbm5bal0pOwogCQl3dHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCQkvKiB3ZSBjaGVjayBvbmx5IGFuYWxvZyBvdXRwdXRzICovCiAJCWlmICh3dHlwZSAhPSBBQ19XSURfQVVEX09VVCB8fCAod2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQpAQCAtMjg5NSw2ICsyODg0LDE2IEBACiAJCQlyZXR1cm4gY29ubltqXTsKIAkJfQogCX0KKwkvKiBpZiBhbGwgREFDcyBhcmUgYWxyZWFkeSBhc3NpZ25lZCwgY29ubmVjdCB0byB0aGUgcHJpbWFyeSBEQUMgKi8KKwlpZiAoY29ubl9sZW4gPiAxKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7CisJCQlpZiAoY29ubltqXSA9PSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSkgeworCQkJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGopOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yOTM1LDYgKzI5MzQsMjYgQEAKIAkJYWRkX3NwZWNfZGFjcyhzcGVjLCBkYWMpOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPmhwX3BpbnNbaV07CisJCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKKwkJaWYgKGRhYykgeworCQkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCisJCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZGFjOworCQkJZWxzZQorCQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKKwkJfQorCQlzcGVjLT5ocF9kYWNzW2ldID0gZGFjOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7CisJCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zW2ldOworCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7CisJCWlmIChkYWMpCisJCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7CisJCXNwZWMtPnNwZWFrZXJfZGFjc1tpXSA9IGRhYzsKKwl9CisKIAkvKiBhZGQgbGluZS1pbiBhcyBvdXRwdXQgKi8KIAluaWQgPSBjaGVja19saW5lX291dF9zd2l0Y2goY29kZWMpOwogCWlmIChuaWQpIHsKQEAgLTI5NjIsMjYgKzI5ODEsNiBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7Ci0JCW5pZCA9IGNmZy0+aHBfcGluc1tpXTsKLQkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOwotCQlpZiAoZGFjKSB7Ci0JCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKLQkJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBkYWM7Ci0JCQllbHNlCi0JCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOwotCQl9Ci0JCXNwZWMtPmhwX2RhY3NbaV0gPSBkYWM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKLQkJbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbaV07Ci0JCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKLQkJaWYgKGRhYykKLQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKLQkJc3BlYy0+c3BlYWtlcl9kYWNzW2ldID0gZGFjOwotCX0KLQogCXNuZF9wcmludGQoInN0YWM5Mnh4OiBkYWNfbmlkcz0lZCAoMHgleC8weCV4LzB4JXgvMHgleC8weCV4KVxuIiwKIAkJICAgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MsCiAJCSAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLApAQCAtMjk5NCwyNCArMjk5Myw0NyBAQAogfQogCiAvKiBjcmVhdGUgdm9sdW1lIGNvbnRyb2wvc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcHJlZnggdHlwZSAqLwotc3RhdGljIGludCBjcmVhdGVfY29udHJvbHMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGNvbnN0IGNoYXIgKnBmeCwgaGRhX25pZF90IG5pZCwgaW50IGNocykKK3N0YXRpYyBpbnQgY3JlYXRlX2NvbnRyb2xzX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICAgIGludCBpZHgsIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCiB7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAljaGFyIG5hbWVbMzJdOwogCWludCBlcnI7CiAKKwlpZiAoIXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQpIHsKKwkJdW5zaWduZWQgaW50IGNhcHMsIHN0ZXAsIG51bXMsIGRiX3NjYWxlOworCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CisJCXN0ZXAgPSAoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+CisJCQlBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUOworCQlzdGVwID0gKHN0ZXAgKyAxKSAqIDI1OyAvKiBpbiAuMDFkQiB1bml0ICovCisJCW51bXMgPSAoY2FwcyAmIEFDX0FNUENBUF9OVU1fU1RFUFMpID4+CisJCQlBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUOworCQlkYl9zY2FsZSA9IG51bXMgKiBzdGVwOworCQkvKiBpZiBkQiBzY2FsZSBpcyBvdmVyIC02NGRCLCBhbmQgZmluZXIgZW5vdWdoLAorCQkgKiBsZXQncyByZWR1Y2UgaXQgdG8gaGFsZgorCQkgKi8KKwkJaWYgKGRiX3NjYWxlID4gNjQwMCAmJiBudW1zID49IDB4MWYpCisJCQlzcGVjLT52b2x1bWVfb2Zmc2V0ID0gbnVtcyAvIDI7CisJCXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQgPSAxOworCX0KKwogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywgU1RBQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVUKSk7CisJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9WT0wsIGlkeCwgbmFtZSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQsCisJCQkJCXNwZWMtPnZvbHVtZV9vZmZzZXQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCBTVEFDX0NUTF9XSURHRVRfTVVURSwgaWR4LCBuYW1lLAogCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBjcmVhdGVfY29udHJvbHMoY29kZWMsIHBmeCwgbmlkLCBjaHMpIFwKKwljcmVhdGVfY29udHJvbHNfaWR4KGNvZGVjLCBwZngsIDAsIG5pZCwgY2hzKQorCiBzdGF0aWMgaW50IGFkZF9zcGVjX2RhY3Moc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCiB7CiAJaWYgKHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID4gNCkgewpAQCAtMzAzNyw0MCArMzA1OSwzMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGlzX3VuaXF1ZV9kYWMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dHMgIT0gMSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHNwZWMtPm11bHRpb3V0LmhwX25pZCA9PSBuaWQpCi0JCXJldHVybiAwOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWQpOyBpKyspCi0JCWlmIChzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkW2ldID09IG5pZCkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotc3RhdGljIGludCBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKKy8qIENyZWF0ZSBvdXRwdXQgY29udHJvbHMKKyAqIFRoZSBtaXhlciBlbGVtZW50cyBhcmUgbmFtZWQgZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiB0eXBlIChBVVRPX1BJTl9YWFhfT1VUKQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9vdXRzLAorCQkJCSBjb25zdCBoZGFfbmlkX3QgKnBpbnMsCisJCQkJIGNvbnN0IGhkYV9uaWRfdCAqZGFjX25pZHMsCisJCQkJIGludCB0eXBlKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQloZGFfbmlkX3QgbmlkID0gMDsKKwloZGFfbmlkX3QgbmlkOwogCWludCBpLCBlcnI7CiAJdW5zaWduZWQgaW50IHdpZF9jYXBzOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzICYmIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOyBpKyspIHsKLQkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07Ci0JCWlmIChpID09IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX291dHMgJiYgaSA8IEFSUkFZX1NJWkUoY2huYW1lKTsgaSsrKSB7CisJCW5pZCA9IGRhY19uaWRzW2ldOworCQlpZiAoIW5pZCkKKwkJCWNvbnRpbnVlOworCQlpZiAodHlwZSAhPSBBVVRPX1BJTl9IUF9PVVQgJiYgaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgIkNlbnRlciIsIG5pZCwgMSk7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHMoY29kZWMsICJDZW50ZXIiLCBuaWQsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiTEZFIiwgbmlkLCAyKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkxGRSIsIG5pZCwgMik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC0zMDg2LDIzICszMTAwLDQ3IEBACiAJCQl9CiAKIAkJfSBlbHNlIHsKLQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBjaG5hbWVbaV07Ci0JCQkvKiBpZiBpdCdzIGEgc2luZ2xlIERBQywgYXNzaWduIGEgYmV0dGVyIG5hbWUgKi8KLQkJCWlmICghaSAmJiBpc191bmlxdWVfZGFjKHNwZWMsIG5pZCkpIHsKLQkJCQlzd2l0Y2ggKGNmZy0+bGluZV9vdXRfdHlwZSkgewotCQkJCWNhc2UgQVVUT19QSU5fSFBfT1VUOgotCQkJCQluYW1lID0gIkhlYWRwaG9uZSI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6Ci0JCQkJCW5hbWUgPSAiU3BlYWtlciI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQlpbnQgaWR4OworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIEFVVE9fUElOX0hQX09VVDoKKwkJCQluYW1lID0gIkhlYWRwaG9uZSI7CisJCQkJaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6CisJCQkJbmFtZSA9ICJTcGVha2VyIjsKKwkJCQlpZHggPSBpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQluYW1lID0gY2huYW1lW2ldOworCQkJCWlkeCA9IDA7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgbmFtZSwgbmlkLCAzKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9sc19pZHgoY29kZWMsIG5hbWUsIGlkeCwgbmlkLCAzKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CisJCQlpZiAodHlwZSA9PSBBVVRPX1BJTl9IUF9PVVQgJiYgIXNwZWMtPmhwX2RldGVjdCkgeworCQkJCXdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW5zW2ldKTsKKwkJCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkKKwkJCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKKwkJCX0KIAkJfQogCX0KKwlyZXR1cm4gMDsKK30KKworLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KK3N0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgZXJyOworCisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmxpbmVfb3V0cywgY2ZnLT5saW5lX291dF9waW5zLAorCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkcywKKwkJCQkgICAgY2ZnLT5saW5lX291dF90eXBlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChjZmctPmhwX291dHMgPiAxICYmIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9MSU5FX09VVCkgewogCQllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbChzcGVjLApAQCAtMzEzNyw0MCArMzE3NSwxOCBAQAogCQkJCQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkOwotCWludCBpLCBlcnIsIG51bXM7CisJaW50IGVycjsKIAotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgewotCQlzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0gewotCQkJIkhlYWRwaG9uZSIsICJIZWFkcGhvbmUyIiwgIkhlYWRwaG9uZTMiLAotCQl9OwotCQl1bnNpZ25lZCBpbnQgd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNmZy0+aHBfcGluc1tpXSk7Ci0JCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQotCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5ocF9kYWNzW2ldOwotCQlpZiAoIW5pZCkKLQkJCWNvbnRpbnVlOwotCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgcGZ4c1tudW1zKytdLCBuaWQsIDMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7Ci0JCXN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7Ci0JCQkiU3BlYWtlciIsICJFeHRlcm5hbCBTcGVha2VyIiwgIlNwZWFrZXIyIiwKLQkJfTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5zcGVha2VyX2RhY3NbaV07Ci0JCWlmICghbmlkKQotCQkJY29udGludWU7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCBwZnhzW251bXMrK10sIG5pZCwgMyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmhwX291dHMsIGNmZy0+aHBfcGlucywKKwkJCQkgICAgc3BlYy0+aHBfZGFjcywgQVVUT19QSU5fSFBfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5zcGVha2VyX291dHMsIGNmZy0+c3BlYWtlcl9waW5zLAorCQkJCSAgICBzcGVjLT5zcGVha2VyX2RhY3MsIEFVVE9fUElOX1NQRUFLRVJfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzc5LDExICszMzk1LDcgQEAKIAkJdW5zaWduZWQgaW50IHdjYXBzOwogCQl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsCi0JCQkJCSAgICAgIHNwZWMtPmRtaWNfbmlkc1tpXSwKLQkJCQkJICAgICAgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkJCSAgICAgIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIApAQCAtMzUwNyw2ICszNTE5LDcgQEAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBkaWdfb3V0LCBoZGFfbmlkX3QgZGlnX2luKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGhwX3N3YXAgPSAwOwogCWludCBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsCkBAIC0zNTM0LDYgKzM1NDcsNyBAQAogCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyA9IHNwZWMtPmF1dG9jZmcuaHBfb3V0czsKIAkJc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlID0gQVVUT19QSU5fSFBfT1VUOwogCQlzcGVjLT5hdXRvY2ZnLmhwX291dHMgPSAwOworCQlocF9zd2FwID0gMTsKIAl9CiAJaWYgKHNwZWMtPmF1dG9jZmcubW9ub19vdXRfcGluKSB7CiAJCWludCBkaXIgPSBnZXRfd2NhcHMoY29kZWMsIHNwZWMtPmF1dG9jZmcubW9ub19vdXRfcGluKSAmCkBAIC0zNjI3LDEyICszNjQxLDE5IEBACiAjZW5kaWYKIAogCWVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2hwX2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKLQogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwkvKiBBbGwgb3V0cHV0IHBhcnNpbmcgZG9uZSwgbm93IHJlc3RvcmUgdGhlIHN3YXBwZWQgaHAgcGlucyAqLworCWlmIChocF9zd2FwKSB7CisJCW1lbWNweShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMsIHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGlucywKKwkJICAgICAgIHNpemVvZihzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpKTsKKwkJc3BlYy0+YXV0b2NmZy5ocF9vdXRzID0gc3BlYy0+YXV0b2NmZy5saW5lX291dHM7CisJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX0hQX09VVDsKKwkJc3BlYy0+YXV0b2NmZy5saW5lX291dHMgPSAwOworCX0KIAorCWVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTM2NjEsMTEgKzM2ODIsMTUgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJZXJyID0gc3RhYzkyeHhfYWRkX2lucHV0X3NvdXJjZShzcGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAlpZiAoc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID4gMikKIAkJc3BlYy0+c3Vycl9zd2l0Y2ggPSAxOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX291dDsKIAlpZiAoZGlnX2luICYmIHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IGRpZ19pbjsKQEAgLTM3MjgsOSArMzc1Myw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAmJiBsZmVfcGluID09IDB4MDsgaSsrKSB7CiAJCQloZGFfbmlkX3QgcGluID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldOwogCQkJdW5zaWduZWQgaW50IGRlZmNmZzsKLQkJCWRlZmNmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluLCAwLAotCQkJCQkJIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULAotCQkJCQkJIDB4MDApOworCQkJZGVmY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOwogCQkJaWYgKGdldF9kZWZjZmdfZGV2aWNlKGRlZmNmZykgPT0gQUNfSkFDS19TUEVBS0VSKSB7CiAJCQkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW4pOwogCQkJCXdjYXBzICY9IChBQ19XQ0FQX1NURVJFTyB8IEFDX1dDQVBfT1VUX0FNUCk7CkBAIC0zNzQzLDcgKzM3NjYsNyBAQAogCX0KIAogCWlmIChsZmVfcGluKSB7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiTEZFIiwgbGZlX3BpbiwgMSk7CisJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkxGRSIsIGxmZV9waW4sIDEpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzc3NCw3ICszNzk3LDExIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWVyciA9IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3BlYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAweDA1OwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSAweDA0OwpAQCAtMzgzMCw4ICszODU3LDcgQEAKICNpZmRlZiBDT05GSUdfU05EX0pBQ0sKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBzaWdtYXRlbF9qYWNrICpqYWNrOwotCWludCBkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAotCQkJMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCWludCBkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlpbnQgY29ubmVjdGl2aXR5ID0gZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKTsKIAljaGFyIG5hbWVbMzJdOwogCkBAIC0zOTQ2LDYgKzM5NzIsMzYgQEAKIHN0YXRpYyB2b2lkIHN0YWNfdG9nZ2xlX3Bvd2VyX21hcChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQkgIGludCBlbmFibGUpOwogCisvKiBvdmVycmlkZSBzb21lIGhpbnRzIGZyb20gdGhlIGh3ZGVwIGVudHJ5ICovCitzdGF0aWMgdm9pZCBzdGFjX3N0b3JlX2hpbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgdmFsOworCisJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiaHBfZGV0ZWN0Iik7CisJaWYgKHZhbCA+PSAwKQorCQlzcGVjLT5ocF9kZXRlY3QgPSB2YWw7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX21hc2siKTsKKwlpZiAocCkgeworCQlzcGVjLT5ncGlvX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsKKwkJc3BlYy0+ZWFwZF9tYXNrID0gc3BlYy0+Z3Bpb19kaXIgPSBzcGVjLT5ncGlvX2RhdGEgPQorCQkJc3BlYy0+Z3Bpb19tYXNrOworCX0KKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGlyIik7CisJaWYgKHApCisJCXNwZWMtPmdwaW9fZGlyID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RhdGEiKTsKKwlpZiAocCkKKwkJc3BlYy0+Z3Bpb19kYXRhID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJlYXBkX21hc2siKTsKKwlpZiAocCkKKwkJc3BlYy0+ZWFwZF9tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiZWFwZF9zd2l0Y2giKTsKKwlpZiAodmFsID49IDApCisJCXNwZWMtPmVhcGRfc3dpdGNoID0gdmFsOworfQorCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM5NjIsNiArNDAxOCw5IEBACiAJCQkJc3BlYy0+YWRjX25pZHNbaV0sIDAsCiAJCQkJQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QzKTsKIAorCS8qIG92ZXJyaWRlIHNvbWUgaGludHMgKi8KKwlzdGFjX3N0b3JlX2hpbnRzKGNvZGVjKTsKKwogCS8qIHNldCB1cCBHUElPICovCiAJZ3BpbyA9IHNwZWMtPmdwaW9fZGF0YTsKIAkvKiB0dXJuIG9uIEVBUEQgc3RhdGljYWxseSB3aGVuIHNwZWMtPmVhcGRfc3dpdGNoIGlzbid0IHNldC4KQEAgLTQwMTEsOCArNDA3MCw3IEBACiAJCQkJCQkJCSBwaW5jdGwpOwogCQkJCX0KIAkJCX0KLQkJCWNvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoY29uZikgIT0gQUNfSkFDS19QT1JUX0ZJWEVEKSB7CiAJCQkJZW5hYmxlX3Bpbl9kZXRlY3QoY29kZWMsIG5pZCwKIAkJCQkJCSAgU1RBQ19JTlNFUlRfRVZFTlQpOwpAQCAtNDAyNCw4ICs0MDgyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2RtaWNzOyBpKyspCiAJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldLAogCQkJCQlBQ19QSU5DVExfSU5fRU4pOwotCWlmIChjZmctPmRpZ19vdXRfcGluKQotCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW4sCisJaWYgKGNmZy0+ZGlnX291dF9waW5zWzBdKQorCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW5zWzBdLAogCQkJCQkgQUNfUElOQ1RMX09VVF9FTik7CiAJaWYgKGNmZy0+ZGlnX2luX3BpbikKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBjZmctPmRpZ19pbl9waW4sCkBAIC00MDUzLDggKzQxMTEsNyBAQAogCQkJc3RhY190b2dnbGVfcG93ZXJfbWFwKGNvZGVjLCBuaWQsIDEpOwogCQkJY29udGludWU7CiAJCX0KLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJZGVmX2NvbmYgPSBnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpOwogCQkvKiBza2lwIGFueSBwb3J0cyB0aGF0IGRvbid0IGhhdmUgamFja3Mgc2luY2UgcHJlc2VuY2UKICAJCSAqIGRldGVjdGlvbiBpcyB1c2VsZXNzICovCkBAIC00MTA4LDcgKzQxNjUsNiBAQAogCWlmICghIHNwZWMpCiAJCXJldHVybjsKIAotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKIAlzdGFjOTJ4eF9mcmVlX2phY2tzKGNvZGVjKTsKIAlzbmRfYXJyYXlfZnJlZSgmc3BlYy0+ZXZlbnRzKTsKIApAQCAtNDExOSw3ICs0MTc1LDkgQEAKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9waW5jdGwoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJdW5zaWduZWQgaW50IGZsYWcpCiB7Ci0JdW5zaWduZWQgaW50IHBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKKwl1bnNpZ25lZCBpbnQgb2xkX2N0bCwgcGluX2N0bDsKKworCXBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKIAkJCTAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCk7CiAKIAlpZiAocGluX2N0bCAmIEFDX1BJTkNUTF9JTl9FTikgewpAQCAtNDEzMywxNCArNDE5MSwxNyBAQAogCQkJcmV0dXJuOwogCX0KIAorCW9sZF9jdGwgPSBwaW5fY3RsOwogCS8qIGlmIHNldHRpbmcgcGluIGRpcmVjdGlvbiBiaXRzLCBjbGVhciB0aGUgY3VycmVudAogCSAgIGRpcmVjdGlvbiBiaXRzIGZpcnN0ICovCiAJaWYgKGZsYWcgJiAoQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX09VVF9FTikpCiAJCXBpbl9jdGwgJj0gfihBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfT1VUX0VOKTsKIAkKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCi0JCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQlwaW5fY3RsIHwgZmxhZyk7CisJcGluX2N0bCB8PSBmbGFnOworCWlmIChvbGRfY3RsICE9IHBpbl9jdGwpCisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgcGluX2N0bCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X3Jlc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKQEAgLTQxNDgsOSArNDIwOSwxMCBAQAogewogCXVuc2lnbmVkIGludCBwaW5fY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCiAJCQkwLCBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MDApOwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCXBpbl9jdGwgJiB+ZmxhZyk7CisJaWYgKHBpbl9jdGwgJiBmbGFnKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkgIHBpbl9jdGwgJiB+ZmxhZyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3Bpbl9wcmVzZW5jZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKQEAgLTQ0MTMsNyArNDQ3NSw2IEBACiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYyk7CiAJc3RhYzkyeHhfaW5pdChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfYW1wKGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9jYWNoZShjb2RlYyk7CkBAIC00NDI0LDYgKzQ0ODUsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorCisvKgorICogdXNpbmcgcG93ZXIgY2hlY2sgZm9yIGNvbnRyb2xsaW5nIG11dGUgbGVkIG9mIEhQIEhEWCBub3RlYm9va3MKKyAqIGNoZWNrIGZvciBtdXRlIHN0YXRlIG9ubHkgb24gU3BlYWtlcnMgKG5pZCA9IDB4MTApCisgKgorICogRm9yIHRoaXMgZmVhdHVyZSBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFIGlzIG5lZWRlZCwgb3RoZXJ3aXNlCisgKiB0aGUgTEVEIGlzIE5PVCB3b3JraW5nIHByb3Blcmx5ICEKKyAqLworCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorc3RhdGljIGludCBzdGFjOTJ4eF9ocF9oZHhfY2hlY2tfcG93ZXJfc3RhdHVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAobmlkID09IDB4MTApIHsKKwkJaWYgKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgSERBX09VVFBVVCwgMCkgJgorCQkgICAgSERBX0FNUF9NVVRFKQorCQkJc3BlYy0+Z3Bpb19kYXRhICY9IH4weDA4OyAgLyogb3JhbmdlICovCisJCWVsc2UKKwkJCXNwZWMtPmdwaW9fZGF0YSB8PSAweDA4OyAgIC8qIHdoaXRlICovCisKKwkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAorCQkJICAgICAgc3BlYy0+Z3Bpb19kaXIsCisJCQkgICAgICBzcGVjLT5ncGlvX2RhdGEpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc3RhYzkyeHhfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00NDYyLDE2ICs0NTU0LDExIEBACiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTIwMF9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyMDBfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjAwX2NmZ190YmwpOwotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIwMCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjAwX2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CkBAIC00NTM5LDE3ICs0NjI2LDEyIEBACiAJCQkJCQkJc3RhYzkyNXhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjV4X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTI1eCwiCiAJCQkJICAgICAgInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTI1eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwpAQCAtNDYyNywxNyArNDcwOSwxMiBAQAogCQkJCQkJCXN0YWM5MmhkNzN4eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyaGQ3M3h4X2NmZ190YmwpOwogYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgogCQkJIiBTVEFDOTJIRDczWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ3M3h4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgMHgwYSwKIAkJCWNvbm4sIFNUQUM5MkhENzNfREFDX0NPVU5UICsgMikgLSAxOwpAQCAtNDY1MSwxNCArNDcyOCwxOCBAQAogCWNhc2UgMHgzOiAvKiA2IENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfNmNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzZjaF9jb3JlX2luaXQ7CisJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrOwogCQlicmVhazsKIAljYXNlIDB4NDogLyogOCBDaGFubmVsICovCiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3M3h4XzhjaF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF84Y2hfY29yZV9pbml0OworCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzhjaF9sb29wYmFjazsKIAkJYnJlYWs7CiAJY2FzZSAweDU6IC8qIDEwIENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfMTBjaF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF8xMGNoX2NvcmVfaW5pdDsKKwkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF8xMGNoX2xvb3BiYWNrOworCQlicmVhazsKIAl9CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIApAQCAtNDY5NywxOCArNDc3OCwxOCBAQAogCQkJc3BlYy0+aW5pdCA9IGRlbGxfbTZfY29yZV9pbml0OwogCQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCQljYXNlIFNUQUNfREVMTF9NNl9BTUlDOiAvKiBBbmFsb2cgTWljcyAqLwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDA7CiAJCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBTVEFDX0RFTExfTTZfRE1JQzogLyogRGlnaXRhbCBNaWNzICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMTsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMjsKIAkJCWJyZWFrOwogCQljYXNlIFNUQUNfREVMTF9NNl9CT1RIOiAvKiBCb3RoICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7Ci0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDE7CiAJCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDI7CiAJCQlicmVhazsKQEAgLTQ3NzEsNiArNDg1Miw3IEBACiAJaGRhX25pZF90IGNvbm5bU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxXTsKIAlpbnQgZXJyOwogCWludCBudW1fZGFjczsKKwloZGFfbmlkX3QgbmlkOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00Nzg5LDE1ICs0ODcxLDYgQEAKIAlzcGVjLT5udW1fcHdycyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9wd3Jfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIAotCi0JLyogc2V0IHBvcnQgMHhlIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKLQkgKi8KLQludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweDBlLAotCQljb25uLCBTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDEpIC0gMTsKLQotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4ZSwgMCwKLQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKLQogCXNwZWMtPmluaXQgPSBzdGFjOTJoZDgzeHh4X2NvcmVfaW5pdDsKIAlzcGVjLT5taXhlciA9IHN0YWM5MmhkODN4eHhfbWl4ZXI7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODN4eHhfcGluX25pZHMpOwpAQCAtNDgxMiwxNyArNDg4NSwxMiBAQAogCQkJCQkJCXN0YWM5MmhkODN4eHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkODN4eHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhEODNYWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ4M3h4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewogCWNhc2UgMHgxMTFkNzYwNDoKQEAgLTQ4NDksNiArNDkxNywyMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CisJY2FzZSBTVEFDX0RFTExfUzE0OgorCQluaWQgPSAweGY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5pZCA9IDB4ZTsKKwkJYnJlYWs7CisJfQorCisJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLAorCQkJCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOworCisJLyogc2V0IHBvcnQgWCB0byBzZWxlY3QgdGhlIGxhc3QgREFDCisJICovCisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKKwogCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTJ4eF9wYXRjaF9vcHM7CiAKIAljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHN0YWM5MmhkX3Byb2NfaG9vazsKQEAgLTQ4NTYsNyArNDk0MSwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4ID0geworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyID0geworCS5udW1faXRlbXMgPSAzLAorCS5pdGVtcyA9IHsKKwkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKKwkJeyAiRGlnaXRhbCBNaWMgMSIsIDB4MDIgfSwKKwkJeyAiRGlnaXRhbCBNaWMgMiIsIDB4MDMgfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlciA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIkFuYWxvZyBJbnB1dHMiLCAweDAwIH0sCkBAIC00ODY2LDEwICs0OTYwLDY3IEBACiAJfQogfTsKIAorLyogZ2V0IHRoZSBwaW4gY29ubmVjdGlvbiAoZml4ZWQsIG5vbmUsIGV0YykgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBpZHgpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpZHhdKTsKKwlyZXR1cm4gZ2V0X2RlZmNmZ19jb25uZWN0KGNmZyk7Cit9CisKK3N0YXRpYyBpbnQgc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfcG9ydHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSBoZGFfbmlkX3QgKm5pZHMsIGludCBudW1fbmlkcykKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpZHgsIG51bTsKKwl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IG51bV9uaWRzOyBudW0rKykgeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNwZWMtPm51bV9waW5zOyBpZHgrKykKKwkJCWlmIChzcGVjLT5waW5fbmlkc1tpZHhdID09IG5pZHNbbnVtXSkKKwkJCQlicmVhazsKKwkJaWYgKGlkeCA+PSBzcGVjLT5udW1fcGlucykKKwkJCWJyZWFrOworCQlkZWZfY29uZiA9IHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHgpOworCQlpZiAoZGVmX2NvbmYgPT0gQUNfSkFDS19QT1JUX05PTkUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG51bTsKK30KKworc3RhdGljIGludCBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9zbXV4ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgaGRhX25pZF90IGRpZzBwaW4pCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCBzcGVjLT5udW1fcGluczsgaWR4KyspCisJCWlmIChzcGVjLT5waW5fbmlkc1tpZHhdID09IGRpZzBwaW4pCisJCQlicmVhazsKKwlpZiAoKGlkeCArIDIpID49IHNwZWMtPm51bV9waW5zKQorCQlyZXR1cm4gMDsKKworCS8qIGRpZzFwaW4gY2FzZSAqLworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4ICsgMSkgIT0gQUNfSkFDS19QT1JUX05PTkUpCisJCXJldHVybiAyOworCisJLyogZGlnMHBpbiArIGRpZzJwaW4gY2FzZSAqLworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4ICsgMikgIT0gQUNfSkFDS19QT1JUX05PTkUpCisJCXJldHVybiAyOworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4KSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDcxYnh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOworCXN0cnVjdCBoZGFfdmVyYiAqdW5tdXRlX2luaXQgPSBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXQ7CiAJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IG5kbWljX25pZHMgPSAwOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00ODc3LDI3ICs1MDI4LDMyIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKLQlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9waW5fbmlkcyk7CisJc3BlYy0+bnVtX3BpbnMgPSBTVEFDOTJIRDcxQlhYX05VTV9QSU5TOworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMTFkNzZiNjoKKwljYXNlIDB4MTExZDc2Yjc6CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydDsKKwkJYnJlYWs7CisJY2FzZSAweDExMWQ3NjAzOgorCWNhc2UgMHgxMTFkNzYwODoKKwkJLyogT24gOTJIRDc1QnggMHgyNyBpc24ndCBhIHBpbiBuaWQgKi8KKwkJc3BlYy0+bnVtX3BpbnMtLTsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNnBvcnQ7CisJfQogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3B3cl9uaWRzKTsKLQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHM7Ci0JbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4LAotCQkJc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eCkpOwogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLAogCQkJCQkJCVNUQUNfOTJIRDcxQlhYX01PREVMUywKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X21vZGVscywKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X2NmZ190YmwpOwogYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgogCQkJIiBTVEFDOTJIRDcxQlhYLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MmhkNzFieHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID4gU1RBQ185MkhENzFCWFhfUkVGKSB7CiAJCS8qIEdQSU8wID0gRUFQRCAqLwpAQCAtNDkwNiwxNiArNTA2MiwzNCBAQAogCQlzcGVjLT5ncGlvX2RhdGEgPSAweDAxOwogCX0KIAorCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY19uaWRzOworCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG11eF9uaWRzOworCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDExMWQ3NmI2OiAvKiA0IFBvcnQgd2l0aG91dCBBbmFsb2cgTWl4ZXIgKi8KIAljYXNlIDB4MTExZDc2Yjc6CisJCXVubXV0ZV9pbml0Kys7CisJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSAweDExMWQ3NmI0OiAvKiA2IFBvcnQgd2l0aG91dCBBbmFsb2cgTWl4ZXIgKi8KIAljYXNlIDB4MTExZDc2YjU6CisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyKSk7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzFieHhfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTKTsKKwkJaWYgKHNwZWMtPm51bV9kbWljcykgeworCQkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OworCQkJbmRtaWNfbmlkcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMTsKKwkJfQogCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDg6IC8qIDUgUG9ydCB3aXRoIEFuYWxvZyBNaXhlciAqLworCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIpKTsKKwkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMtLTsKIAkJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAkJY2FzZSBTVEFDX0hQX000OgogCQkJLyogRW5hYmxlIFZSRUYgcG93ZXIgc2F2aW5nIG9uIEdQSU8xIGRldGVjdCAqLwpAQCAtNDk0Miw3ICs1MTE2LDE1IEBACiAKIAkJLyogZGlzYWJsZSBWU1cgKi8KIAkJc3BlYy0+aW5pdCA9ICZzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbSERfRElTQUJMRV9QT1JURl07Ci0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4ZiwgMHg0MGYwMDBmMCk7CisJCXVubXV0ZV9pbml0Kys7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgMHg0MGYwMDBmMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxOSwgMHg0MGYwMDBmMyk7CisJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzW1NUQUM5MkhENzFCWFhfTlVNX0RNSUNTIC0gMV0gPSAwOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTIC0gMSk7CisJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwkJbmRtaWNfbmlkcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMjsKIAkJYnJlYWs7CiAJY2FzZSAweDExMWQ3NjAzOiAvKiA2IFBvcnQgd2l0aCBBbmFsb2cgTWl4ZXIgKi8KIAkJaWYgKChjb2RlYy0+cmV2aXNpb25faWQgJiAweGYpID09IDEpCkBAIC00OTUyLDEyICs1MTM0LDIzIEBACiAJCXNwZWMtPm51bV9wd3JzID0gMDsKIAkJLyogZmFsbHRocnUgKi8KIAlkZWZhdWx0OgorCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIpKTsKIAkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTKTsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOwogCX0KIAorCWlmIChnZXRfd2NhcHMoY29kZWMsIDB4YSkgJiBBQ19XQ0FQX0lOX0FNUCkKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZV9jYWNoZShjb2RlYywgdW5tdXRlX2luaXQpOworCisJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzFieHhfbG9vcGJhY2s7CiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDUwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7CiAKQEAgLTQ5NjUsMTggKzUxNTgsMTcgQEAKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjY7CiAJc3BlYy0+bXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X211eF9uaWRzOwogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9hZGNfbmlkczsKLQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtaWNfbmlkczsKLQlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtdXhfbmlkczsKIAlzcGVjLT5zbXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X3NtdXhfbmlkczsKIAlzcGVjLT5wd3JfbmlkcyA9IHN0YWM5MmhkNzFieHhfcHdyX25pZHM7CiAKIAlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfbXV4X25pZHMpOwogCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2FkY19uaWRzKTsKKwlzcGVjLT5udW1fc211eGVzID0gc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfc211eGVzKGNvZGVjLCAweDFlKTsKIAogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CiAJY2FzZSBTVEFDX0hQX000OgogCQkvKiBlbmFibGUgaW50ZXJuYWwgbWljcm9waG9uZSAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBlLCAweDAxODEzMDQwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBlLCAweDAxODEzMDQwKTsKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCAweDBlLAogCQkJQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX1ZSRUZfODApOwogCQkvKiBmYWxsdGhydSAqLwpAQCAtNDk4OSwyMSArNTE4MSwzOCBAQAogCWNhc2UgU1RBQ19ERUxMX000XzM6CiAJCXNwZWMtPm51bV9kbWljcyA9IDE7CiAJCXNwZWMtPm51bV9zbXV4ZXMgPSAwOwotCQlzcGVjLT5udW1fZG11eGVzID0gMDsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IDE7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNwZWMtPm51bV9kbWljcyA9IFNUQUM5MkhENzFCWFhfTlVNX0RNSUNTOwotCQlzcGVjLT5udW1fc211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3NtdXhfbmlkcyk7Ci0JCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwljYXNlIFNUQUNfSFBfRFY1OgorCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGQsIDB4OTAxNzAwMTApOworCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIDB4MGQsIEFDX1BJTkNUTF9PVVRfRU4pOworCQlicmVhazsKKwljYXNlIFNUQUNfSFBfSERYOgorCQlzcGVjLT5udW1fZG1pY3MgPSAxOworCQlzcGVjLT5udW1fZG11eGVzID0gMTsKKwkJc3BlYy0+bnVtX3NtdXhlcyA9IDE7CisJCS8qCisJCSAqIEZvciBjb250cm9sbGluZyBNVVRFIExFRCBvbiBIUCBIRFgxNi9IRFgxOCBub3RlYm9va3MsCisJCSAqIHRoZSBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFIGlzIG5lZWRlZCB0byBiZSBzZXQuCisJCSAqLworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkJLyogb3JhbmdlL3doaXRlIG11dGUgbGVkIG9uIEdQSU8zLCBvcmFuZ2U9MCwgd2hpdGU9MSAqLworCQlzcGVjLT5ncGlvX21hc2sgfD0gMHgwODsKKwkJc3BlYy0+Z3Bpb19kaXIgIHw9IDB4MDg7CisJCXNwZWMtPmdwaW9fZGF0YSB8PSAweDA4OyAgLyogc2V0IHRvIHdoaXRlICovCisKKwkJLyogcmVnaXN0ZXIgY2hlY2tfcG93ZXJfc3RhdHVzIGNhbGxiYWNrLiAqLworCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyA9CisJCSAgICBzdGFjOTJ4eF9ocF9oZHhfY2hlY2tfcG93ZXJfc3RhdHVzOworI2VuZGlmCQorCQlicmVhazsKIAl9OwogCiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIAlpZiAoc3BlYy0+ZGlucHV0X211eCkKLQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgKz0KLQkJCXNwZWMtPm51bV9kbWljcyAtCi0JCQkJKEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMSk7CisJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zICs9IHNwZWMtPm51bV9kbWljcyAtIG5kbWljX25pZHM7CiAKLQllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgyMSwgMHgyMyk7CisJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MjEsIDApOwogCWlmICghZXJyKSB7CiAJCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6IE5vIGF1dG8tY29uZmlnIGlzICIKQEAgLTUwNzgsMTcgKzUyODcsMTIgQEAKIAl9CiAKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMngsICIKIAkJCSJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MjJ4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTIyeF9hZGNfbmlkczsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MjJ4X211eF9uaWRzOwpAQCAtNTEzOSwyNCArNTM0MywxOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTI3eF9zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyN3hfcGluX25pZHM7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTI3WF9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyN3hfbW9kZWxzLAogCQkJCQkJCXN0YWM5Mjd4X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwIHx8ICFzdGFjOTI3eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pIHsKLQkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCi0JCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCi0JCQkJICAgICJTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgorCQkJICAgICJTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyN3hfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjM7CiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTI3eF9hZGNfbmlkczsKQEAgLTUxODUsMTUgKzUzODQsMTUgQEAKIAkJY2FzZSAweDEwMjgwMjA5OgogCQljYXNlIDB4MTAyODAyMmU6CiAJCQkvKiBjb3JyZWN0IHRoZSBkZXZpY2UgZmllbGQgdG8gU1BESUYgb3V0ICovCi0JCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDIxLCAweDAxNDQyMDcwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgyMSwgMHgwMTQ0MjA3MCk7CiAJCQlicmVhazsKIAkJfTsKIAkJLyogY29uZmlndXJlIHRoZSBhbmFsb2cgbWljcm9waG9uZSBvbiBzb21lIGxhcHRvcHMgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwYywgMHg5MGE3OTEzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYywgMHg5MGE3OTEzMCk7CiAJCS8qIGNvcnJlY3QgdGhlIGZyb250IG91dHB1dCBqYWNrIGFzIGEgaHAgb3V0ICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGYsIDB4MDIyNzAxMWYpOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIDB4MDIyNzAxMWYpOwogCQkvKiBjb3JyZWN0IHRoZSBmcm9udCBpbnB1dCBqYWNrIGFzIGEgbWljICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGUsIDB4MDJhNzkxMzApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGUsIDB4MDJhNzkxMzApOwogCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU1RBQ19ERUxMXzNTVDoKIAkJLyogR1BJTzIgSGlnaCA9IEVuYWJsZSBFQVBEICovCkBAIC01MjIwLDYgKzU0MTksNyBAQAogCX0KIAogCXNwZWMtPm51bV9wd3JzID0gMDsKKwlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyN3hfbG9vcGJhY2s7CiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7CiAJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOwpAQCAtNTI3OCwxNiArNTQ3OCwxMSBAQAogCQkJCQkJCXN0YWM5MjA1X21vZGVscywKIAkJCQkJCQlzdGFjOTIwNV9jZmdfdGJsKTsKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMDUsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTIwNV9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyMzsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjA1X2FkY19uaWRzOwpAQCAtNTMwNCwxNyArNTQ5OSwyMCBAQAogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MjA1X2NvcmVfaW5pdDsKIAlzcGVjLT5taXhlciA9IHN0YWM5MjA1X21peGVyOworCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTIwNV9sb29wYmFjazsKIAogCXNwZWMtPmFsb29wYmFja19tYXNrID0gMHg0MDsKIAlzcGVjLT5hbG9vcGJhY2tfc2hpZnQgPSAwOwotCXNwZWMtPmVhcGRfc3dpdGNoID0gMTsKKwkvKiBUdXJuIG9uL29mZiBFQVBEIHBlciBIUCBwbHVnZ2luZyAqLworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgIT0gU1RBQ185MjA1X0VBUEQpCisJCXNwZWMtPmVhcGRfc3dpdGNoID0gMTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCQogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKXsKIAljYXNlIFNUQUNfOTIwNV9ERUxMX000MzoKIAkJLyogRW5hYmxlIFNQRElGIGluL291dCAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDFmLCAweDAxNDQxMDMwKTsKLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgyMCwgMHgxYzQxMDAzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxZiwgMHgwMTQ0MTAzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgyMCwgMHgxYzQxMDAzMCk7CiAKIAkJLyogRW5hYmxlIHVuc29sIHJlc3BvbnNlIGZvciBHUElPNC9Eb2NrIEhQIGNvbm5lY3Rpb24gKi8KIAkJZXJyID0gc3RhY19hZGRfZXZlbnQoc3BlYywgY29kZWMtPmFmZywgU1RBQ19WUkVGX0VWRU5ULCAweDAxKTsKQEAgLTUzNzEsMjIzICs1NTY5LDg3IEBACiAgKiBTVEFDOTg3MiBoYWNrCiAgKi8KIAotLyogc3RhdGljIGNvbmZpZyBmb3IgU29ueSBWQUlPIEZFNTUwRyBhbmQgU29ueSBWQUlPIEFSICovCi1zdGF0aWMgaGRhX25pZF90IHZhaW9fZGFjc1tdID0geyAweDIgfTsKLSNkZWZpbmUgVkFJT19IUF9EQUMJMHg1Ci1zdGF0aWMgaGRhX25pZF90IHZhaW9fYWRjc1tdID0geyAweDggLyosMHg2Ki8gfTsKLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19tdXhfbmlkc1tdID0geyAweDE1IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCB2YWlvX211eCA9IHsKLQkubnVtX2l0ZW1zID0gMywKLQkuaXRlbXMgPSB7Ci0JCS8qIHsgIkhQIiwgMHgwIH0sICovCi0JCXsgIk1pYyBKYWNrIiwgMHgxIH0sCi0JCXsgIkludGVybmFsIE1pYyIsIDB4MiB9LAotCQl7ICJQQ00iLCAweDMgfSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZhaW9faW5pdFtdID0gewotCXsweDBhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LCAvKiBIUCA8LSAweDIgKi8KLQl7MHgwYSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFNUQUNfSFBfRVZFTlR9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwgLyogU3BlYWtlciA8LSAweDUgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKDwtIDB4MikgKi8KLQl7MHgwZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwgLyogQ0QgKi8KLQl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzk4NzJfY29yZV9pbml0W10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaWMtc2VsOiAwYSwwZCwxNCwwMiAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBIUCAqLwotCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBTcGVha2VyICovCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogY2FwdHVyZSBzdy92b2wgLT4gMHg4ICovCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LCAvKiBDRC1pbiAtPiAweDYgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LCAvKiBNaWMtaW4gLT4gMHg5ICovCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmFpb19hcl9pbml0W10gPSB7Ci0JezB4MGEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sIC8qIEhQIDwtIDB4MiAqLwotCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwgLyogU3BlYWtlciA8LSAweDUgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKDwtIDB4MikgKi8KLQl7MHgwZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwgLyogQ0QgKi8KLS8qCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwqLyAvKiBPcHRpY2FsIE91dCAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAqLwotCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwgLyogbWljLXNlbDogMGEsMGQsMTQsMDIgKi8KLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogSFAgKi8KLQl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogU3BlYWtlciAqLwotLyoJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sKi8gLyogT3B0aWNhbCBPdXQgKi8KLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBjYXB0dXJlIHN3L3ZvbCAtPiAweDggKi8KLQl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sIC8qIENELWluIC0+IDB4NiAqLwotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sIC8qIE1pYy1pbiAtPiAweDkgKi8KLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZhaW9fbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDUsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDUsIDAsIEhEQV9PVVRQVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIkNEIENhcHR1cmUgVm9sdW1lIiwgMHgwNywgMCwgSERBX0lOUFVUKSwgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTg3Ml9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAwLCBIREFfSU5QVVQpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmNvdW50ID0gMSwKLQkJLmluZm8gPSBzdGFjOTJ4eF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gc3RhYzkyeHhfbXV4X2VudW1fcHV0LAotCX0sCi0Je30KKwl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmFpb19hcl9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAweDA3LCAwLCBIREFfSU5QVVQpLCAqLwotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAwLCBIREFfSU5QVVQpLAotCS8qSERBX0NPREVDX01VVEUoIk9wdGljYWwgT3V0IFN3aXRjaCIsIDB4MTAsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk9wdGljYWwgT3V0IFZvbHVtZSIsIDB4MTAsIDAsIEhEQV9PVVRQVVQpLCovCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuY291bnQgPSAxLAotCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCi0JfSwKLQl7fQorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTg3Ml9waW5fbmlkc1tdID0geworCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisJMHgxMSwgMHgxMywgMHgxNCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBzdGFjOTg3Ml9wYXRjaF9vcHMgPSB7Ci0JLmJ1aWxkX2NvbnRyb2xzID0gc3RhYzkyeHhfYnVpbGRfY29udHJvbHMsCi0JLmJ1aWxkX3BjbXMgPSBzdGFjOTJ4eF9idWlsZF9wY21zLAotCS5pbml0ID0gc3RhYzkyeHhfaW5pdCwKLQkuZnJlZSA9IHN0YWM5Mnh4X2ZyZWUsCi0jaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKLQkucmVzdW1lID0gc3RhYzkyeHhfcmVzdW1lLAotI2VuZGlmCitzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX2FkY19uaWRzW10gPSB7CisJMHg4IC8qLDB4NiovCiB9OwogCi1zdGF0aWMgaW50IHN0YWM5ODcyX3ZhaW9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gc3RhYzkyeHhfaW5pdChjb2RlYyk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JaWYgKGNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQpCi0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQoY29kZWMsIFNUQUNfSFBfRVZFTlQgPDwgMjYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFjOTg3Ml92YWlvX2hwX2RldGVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoZ2V0X3Bpbl9wcmVzZW5jZShjb2RlYywgMHgwYSkpIHsKLQkJc3RhYzkyeHhfcmVzZXRfcGluY3RsKGNvZGVjLCAweDBmLCBBQ19QSU5DVExfT1VUX0VOKTsKLQkJc3RhYzkyeHhfc2V0X3BpbmN0bChjb2RlYywgMHgwYSwgQUNfUElOQ1RMX09VVF9FTik7Ci0JfSBlbHNlIHsKLQkJc3RhYzkyeHhfcmVzZXRfcGluY3RsKGNvZGVjLCAweDBhLCBBQ19QSU5DVExfT1VUX0VOKTsKLQkJc3RhYzkyeHhfc2V0X3BpbmN0bChjb2RlYywgMHgwZiwgQUNfUElOQ1RMX09VVF9FTik7Ci0JfQotfSAKLQotc3RhdGljIHZvaWQgc3RhYzk4NzJfdmFpb191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgU1RBQ19IUF9FVkVOVDoKLQkJc3RhYzk4NzJfdmFpb19ocF9kZXRlY3QoY29kZWMsIHJlcyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIHN0YWM5ODcyX3ZhaW9fcGF0Y2hfb3BzID0gewotCS5idWlsZF9jb250cm9scyA9IHN0YWM5Mnh4X2J1aWxkX2NvbnRyb2xzLAotCS5idWlsZF9wY21zID0gc3RhYzkyeHhfYnVpbGRfcGNtcywKLQkuaW5pdCA9IHN0YWM5ODcyX3ZhaW9faW5pdCwKLQkuZnJlZSA9IHN0YWM5Mnh4X2ZyZWUsCi0JLnVuc29sX2V2ZW50ID0gc3RhYzk4NzJfdmFpb191bnNvbF9ldmVudCwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lID0gc3RhYzkyeHhfcmVzdW1lLAotI2VuZGlmCitzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX211eF9uaWRzW10gPSB7CisJMHgxNQogfTsKIAotZW51bSB7IC8qIEZFIGFuZCBTWiBzZXJpZXMuIGlkPTB4ODM4NDc2NjEgYW5kIHN1YnN5cz0weDEwNEQwNzAwIG9yIDEwNEQxMDAwLiAqLwotICAgICAgIENYRDk4NzJSRF9WQUlPLAotICAgICAgIC8qIFVua25vd24uIGlkPTB4ODM4NDc2NjIgYW5kIHN1YnN5cz0weDEwNEQxMjAwIG9yIDEwNEQxMDAwLiAqLwotICAgICAgIFNUQUM5ODcyQUtfVkFJTywgCi0gICAgICAgLyogVW5rbm93bi4gaWQ9MHg4Mzg0NzY2MSBhbmQgc3Vic3lzPTB4MTA0RDEyMDAuICovCi0gICAgICAgU1RBQzk4NzJLX1ZBSU8sCi0gICAgICAgLyogQVIgU2VyaWVzLiBpZD0weDgzODQ3NjY0IGFuZCBzdWJzeXM9MTA0RDEzMDAgKi8KLSAgICAgICBDWEQ5ODcyQUtEX1ZBSU8sCi0gICAgICAgU1RBQ185ODcyX01PREVMUywKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhYzk4NzJfdmFpb19waW5fY29uZmlnc1s5XSA9IHsKKwkweDAzMjExMDIwLCAweDQxMTExMWYwLCAweDQxMTExMWYwLCAweDAzYTE1MDMwLAorCTB4NDExMTExZjAsIDB4OTAxNzAxMTAsIDB4NDExMTExZjAsIDB4NDExMTExZjAsCisJMHg5MGE3MDEzZQogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5ODcyX21vZGVsc1tTVEFDXzk4NzJfTU9ERUxTXSA9IHsKLQlbQ1hEOTg3MlJEX1ZBSU9dCT0gInZhaW8iLAotCVtDWEQ5ODcyQUtEX1ZBSU9dCT0gInZhaW8tYXIiLAorCVtTVEFDXzk4NzJfQVVUT10gPSAiYXV0byIsCisJW1NUQUNfOTg3Ml9WQUlPXSA9ICJ2YWlvIiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5ODcyX2JyZF90YmxbU1RBQ185ODcyX01PREVMU10gPSB7CisJW1NUQUNfOTg3Ml9WQUlPXSA9IHN0YWM5ODcyX3ZhaW9fcGluX2NvbmZpZ3MsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzk4NzJfY2ZnX3RibFtdID0gewotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZTYsICJTb255IFZBSU8gRi9TIiwgQ1hEOTg3MlJEX1ZBSU8pLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZWYsICJTb255IFZBSU8gRi9TIiwgQ1hEOTg3MlJEX1ZBSU8pLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZmQsICJTb255IFZBSU8gQVIiLCBDWEQ5ODcyQUtEX1ZBSU8pLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMDUsICJTb255IFZBSU8gQVIiLCBDWEQ5ODcyQUtEX1ZBSU8pLAotCXt9CisJe30gLyogdGVybWluYXRvciAqLwogfTsKIAogc3RhdGljIGludCBwYXRjaF9zdGFjOTg3MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnI7CiAKLQlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185ODcyX01PREVMUywKLQkJCQkJCSAgc3RhYzk4NzJfbW9kZWxzLAotCQkJCQkJICBzdGFjOTg3Ml9jZmdfdGJsKTsKLQlpZiAoYm9hcmRfY29uZmlnIDwgMCkKLQkJLyogdW5rbm93biBjb25maWcsIGxldCBnZW5lcmljLXBhcnNlciBkbyBpdHMgam9iLi4uICovCi0JCXJldHVybiBzbmRfaGRhX3BhcnNlX2dlbmVyaWNfY29kZWMoY29kZWMpOwotCQogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQogCWNvZGVjLT5zcGVjID0gc3BlYzsKLQlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewotCWNhc2UgQ1hEOTg3MlJEX1ZBSU86Ci0JY2FzZSBTVEFDOTg3MkFLX1ZBSU86Ci0JY2FzZSBTVEFDOTg3MktfVkFJTzoKLQkJc3BlYy0+bWl4ZXIgPSB2YWlvX21peGVyOwotCQlzcGVjLT5pbml0ID0gdmFpb19pbml0OwotCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwotCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUodmFpb19kYWNzKTsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSB2YWlvX2RhY3M7Ci0JCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IFZBSU9fSFBfREFDOwotCQlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUodmFpb19hZGNzKTsKLQkJc3BlYy0+YWRjX25pZHMgPSB2YWlvX2FkY3M7Ci0JCXNwZWMtPm51bV9wd3JzID0gMDsKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJnZhaW9fbXV4OwotCQlzcGVjLT5tdXhfbmlkcyA9IHZhaW9fbXV4X25pZHM7Ci0JCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTg3Ml92YWlvX3BhdGNoX29wczsKLQkJYnJlYWs7Ci0JCi0JY2FzZSBDWEQ5ODcyQUtEX1ZBSU86Ci0JCXNwZWMtPm1peGVyID0gdmFpb19hcl9taXhlcjsKLQkJc3BlYy0+aW5pdCA9IHZhaW9fYXJfaW5pdDsKLQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKLQkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKHZhaW9fZGFjcyk7Ci0JCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gdmFpb19kYWNzOwotCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBWQUlPX0hQX0RBQzsKLQkJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHZhaW9fYWRjcyk7Ci0JCXNwZWMtPm51bV9wd3JzID0gMDsKLQkJc3BlYy0+YWRjX25pZHMgPSB2YWlvX2FkY3M7Ci0JCXNwZWMtPmlucHV0X211eCA9ICZ2YWlvX211eDsKLQkJc3BlYy0+bXV4X25pZHMgPSB2YWlvX211eF9uaWRzOwotCQljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzk4NzJfcGF0Y2hfb3BzOwotCQlicmVhazsKLQl9CiAKKwlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185ODcyX01PREVMUywKKwkJCQkJCQlzdGFjOTg3Ml9tb2RlbHMsCisJCQkJCQkJc3RhYzk4NzJfY2ZnX3RibCk7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTg3MiwgIgorCQkJICAgICJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKKwkJCQkJIHN0YWM5ODcyX2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7CisKKwlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzk4NzJfcGluX25pZHMpOworCXNwZWMtPnBpbl9uaWRzID0gc3RhYzk4NzJfcGluX25pZHM7CisJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKKwlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUoc3RhYzk4NzJfYWRjX25pZHMpOworCXNwZWMtPmFkY19uaWRzID0gc3RhYzk4NzJfYWRjX25pZHM7CisJc3BlYy0+bnVtX211eGVzID0gQVJSQVlfU0laRShzdGFjOTg3Ml9tdXhfbmlkcyk7CisJc3BlYy0+bXV4X25pZHMgPSBzdGFjOTg3Ml9tdXhfbmlkczsKKwlzcGVjLT5taXhlciA9IHN0YWM5ODcyX21peGVyOworCXNwZWMtPmluaXQgPSBzdGFjOTg3Ml9jb3JlX2luaXQ7CisKKwllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgxMCwgMHgxMik7CisJaWYgKGVyciA8IDApIHsKKwkJc3RhYzkyeHhfZnJlZShjb2RlYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTJ4eF9wYXRjaF9vcHM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IGM3NjEzOTQuLmIyNWE1Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwpAQCAtMTMwOCwxNiArMTMwOCwxMyBAQAogCXVuc2lnbmVkIGludCBkZWZfY29uZjsKIAl1bnNpZ25lZCBjaGFyIHNlcWFzc29jOwogCi0JZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJc2VxYXNzb2MgPSAodW5zaWduZWQgY2hhcikgZ2V0X2RlZmNmZ19hc3NvY2lhdGlvbihkZWZfY29uZik7CiAJc2VxYXNzb2MgPSAoc2VxYXNzb2MgPDwgNCkgfCBnZXRfZGVmY2ZnX3NlcXVlbmNlKGRlZl9jb25mKTsKIAlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkgewogCQlpZiAoc2VxYXNzb2MgPT0gMHhmZikgewogCQkJZGVmX2NvbmYgPSBkZWZfY29uZiAmICh+KEFDX0pBQ0tfUE9SVF9CT1RIIDw8IDMwKSk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJCQkgICAgZGVmX2NvbmYgPj4gMjQpOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBuaWQsIGRlZl9jb25mKTsKIAkJfQogCX0KIApAQCAtMTM1NCw3ICsxMzUxLDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwOF9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBWVDE3MDhfRElHSU5fTklEOwpAQCAtMTgyNyw3ICsxODI0LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwOV9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBWVDE3MDlfRElHSU5fTklEOwpAQCAtMjM3MSw3ICsyMzY4LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwOEJfRElHT1VUX05JRDsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gVlQxNzA4Ql9ESUdJTl9OSUQ7CkBAIC0yODM2LDcgKzI4MzMsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4U19ESUdPVVRfTklEOwogCiAJc3BlYy0+ZXh0cmFfZGlnX291dF9uaWQgPSAweDE1OwpAQCAtMzE1NSw3ICszMTUyLDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwMl9ESUdPVVRfTklEOwogCiAJc3BlYy0+ZXh0cmFfZGlnX291dF9uaWQgPSAweDFCOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IDU4ZDdjZGEuLjNkZDYzZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQkJdTE2IHBia3N0YXR1czsKIAkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCQkJcGJrc3RhdHVzID0gaW53KElDRURTKGljZSwgSU5UU1RBVCkpOwotCQkJLyogcHJpbnRrKCJwYmtzdGF0dXMgPSAweCV4XG4iLCBwYmtzdGF0dXMpOyAqLworCQkJLyogcHJpbnRrKEtFUk5fREVCVUcgInBia3N0YXR1cyA9IDB4JXhcbiIsIHBia3N0YXR1cyk7ICovCiAJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDY7IGlkeCsrKSB7CiAJCQkJaWYgKChwYmtzdGF0dXMgJiAoMyA8PCAoaWR4ICogMikpKSA9PSAwKQogCQkJCQljb250aW51ZTsKQEAgLTI2NDgsOSArMjY0OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDRTE3MTIiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSUNFbnNlbWJsZSBJQ0UxNzEyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggYmI4ZDhjNy4uMTI4NTEwZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTI0MSw2ICsyNDEsOCBAQAogCQkJCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0sIGxpc3QpOwogfQogCitzdGF0aWMgdm9pZCBlbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHU4IGZsYWcsIGludCBlbmFibGUpOworCiBzdGF0aWMgdm9pZCB2dDE3MjRfbWlkaV93cml0ZShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzOwpAQCAtMjU0LDYgKzI1NiwxMSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKIAkJCW91dGIoYnVmZmVyW2ldLCBJQ0VSRUcxNzI0KGljZSwgTVBVX0RBVEEpKTsKIAl9CisJLyogbWFzayBpcnEgd2hlbiBhbGwgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLgorCSAqIGVuYWJsZWQgYWdhaW4gaW4gb3V0cHV0X3RyaWdnZXIgd2hlbiB0aGUgbmV3IGRhdGEgY29tZXMgaW4uCisJICovCisJZW5hYmxlX21pZGlfaXJxKGljZSwgVlQxNzI0X0lSUV9NUFVfVFgsCisJCQkhc25kX3Jhd21pZGlfdHJhbnNtaXRfZW1wdHkocykpOwogfQogCiBzdGF0aWMgdm9pZCB2dDE3MjRfbWlkaV9yZWFkKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQpAQCAtMjcyLDMxICsyNzksMzQgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHZ0MTcyNF9lbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgIHU4IGZsYWcsIGludCBlbmFibGUpCisvKiBjYWxsIHdpdGggaWNlLT5yZWdfbG9jayAqLworc3RhdGljIHZvaWQgZW5hYmxlX21pZGlfaXJxKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1OCBmbGFnLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOwotCXU4IG1hc2s7Ci0KLQlzcGluX2xvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKLQltYXNrID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7CisJdTggbWFzayA9IGluYihJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOwogCWlmIChlbmFibGUpCiAJCW1hc2sgJj0gfmZsYWc7CiAJZWxzZQogCQltYXNrIHw9IGZsYWc7CiAJb3V0YihtYXNrLCBJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOworfQorCitzdGF0aWMgdm9pZCB2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICB1OCBmbGFnLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJc3Bpbl9sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CisJZW5hYmxlX21pZGlfaXJxKGljZSwgZmxhZywgZW5hYmxlKTsKIAlzcGluX3VubG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHZ0MTcyNF9taWRpX291dHB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnMpCiB7Ci0JdnQxNzI0X2VuYWJsZV9taWRpX2lycShzLCBWVDE3MjRfSVJRX01QVV9UWCwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnQxNzI0X21pZGlfb3V0cHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnMpCiB7Ci0JdnQxNzI0X2VuYWJsZV9taWRpX2lycShzLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMSw2ICszMjEsNyBAQAogCQl2dDE3MjRfbWlkaV93cml0ZShpY2UpOwogCX0gZWxzZSB7CiAJCWljZS0+bWlkaV9vdXRwdXQgPSAwOworCQllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljZS0+cmVnX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTMyMCw2ICszMzEsNyBAQAogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gcy0+cm1pZGktPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKKwl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkvKiAzMiBieXRlcyBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgaW4gbGVzcyB0aGFuIGFib3V0IDEyIG1zICovCiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDE1KTsKIAlkbyB7CkBAIC0zODksMjQgKzQwMSwyNCBAQAogCQlzdGF0dXMgJj0gc3RhdHVzX21hc2s7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCWJyZWFrOworCQlzcGluX2xvY2soJmljZS0+cmVnX2xvY2spOwogCQlpZiAoKyt0aW1lb3V0ID4gMTApIHsKIAkJCXN0YXR1cyA9IGluYihJQ0VSRUcxNzI0KGljZSwgSVJRU1RBVCkpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJpY2UxNzI0OiBUb28gbG9uZyBpcnEgbG9vcCwgIgogCQkJICAgICAgICJzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOwogCQkJaWYgKHN0YXR1cyAmIFZUMTcyNF9JUlFfTVBVX1RYKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJpY2UxNzI0OiBEaXNhYmxpbmcgTVBVX1RYXG4iKTsKLQkJCQlvdXRiKGluYihJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpIHwKLQkJCQkgICAgIFZUMTcyNF9JUlFfTVBVX1RYLAotCQkJCSAgICAgSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKTsKKwkJCQllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJCQl9CisJCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlicmVhazsKIAkJfQogCQloYW5kbGVkID0gMTsKIAkJaWYgKHN0YXR1cyAmIFZUMTcyNF9JUlFfTVBVX1RYKSB7Ci0JCQlzcGluX2xvY2soJmljZS0+cmVnX2xvY2spOwogCQkJaWYgKGljZS0+bWlkaV9vdXRwdXQpCiAJCQkJdnQxNzI0X21pZGlfd3JpdGUoaWNlKTsKLQkJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKKwkJCWVsc2UKKwkJCQllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJCQkvKiBEdWUgdG8gbXlzdGVyaWNhbCByZWFzb25zLCBNUFVfVFggaXMgYWx3YXlzCiAJCQkgKiBnZW5lcmF0ZWQgKGFuZCBjYW4ndCBiZSBjbGVhcmVkKSB3aGVuIGEgUENNCiAJCQkgKiBwbGF5YmFjayBpcyBnb2luZy4gIFNvIGxldCdzIGlnbm9yZSBhdCB0aGUKQEAgLTQxNSwxNSArNDI3LDE0IEBACiAJCQlzdGF0dXNfbWFzayAmPSB+VlQxNzI0X0lSUV9NUFVfVFg7CiAJCX0KIAkJaWYgKHN0YXR1cyAmIFZUMTcyNF9JUlFfTVBVX1JYKSB7Ci0JCQlzcGluX2xvY2soJmljZS0+cmVnX2xvY2spOwogCQkJaWYgKGljZS0+bWlkaV9pbnB1dCkKIAkJCQl2dDE3MjRfbWlkaV9yZWFkKGljZSk7CiAJCQllbHNlCiAJCQkJdnQxNzI0X21pZGlfY2xlYXJfcngoaWNlKTsKLQkJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJfQogCQkvKiBhY2sgTVBVIGlycSAqLwogCQlvdXRiKHN0YXR1cywgSUNFUkVHMTcyNChpY2UsIElSUVNUQVQpKTsKKwkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOwogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NVFBDTSkgewogCQkJLyoKIAkJCSAqIE11bHRpLXRyYWNrIFBDTQpAQCAtNzQ1LDcgKzc1NiwxNCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKIAotCS8qIHByaW50aygicHJvIHByZXBhcmU6IGNoID0gJWQsIGFkZHIgPSAweCV4LCBidWZmZXIgPSAweCV4LCBwZXJpb2QgPSAweCV4XG4iLCBzdWJzdHJlYW0tPnJ1bnRpbWUtPmNoYW5uZWxzLCAodW5zaWduZWQgaW50KXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FkZHIsIHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pLCBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHJvIHByZXBhcmU6IGNoID0gJWQsIGFkZHIgPSAweCV4LCAiCisJICAgICAgICJidWZmZXIgPSAweCV4LCBwZXJpb2QgPSAweCV4XG4iLAorCSAgICAgICBzdWJzdHJlYW0tPnJ1bnRpbWUtPmNoYW5uZWxzLAorCSAgICAgICAodW5zaWduZWQgaW50KXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FkZHIsCisJICAgICAgIHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pLAorCSAgICAgICBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSk7CisJKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjEyMiw3ICsyMTQwLDkgQEAKIAl3YWl0X2kyY19idXN5KGljZSk7CiAJdmFsID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJMkNfREFUQSkpOwogCW11dGV4X3VubG9jaygmaWNlLT5pMmNfbXV0ZXgpOwotCS8qIHByaW50aygiaTJjX3JlYWQ6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCB2YWwpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19yZWFkOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgdmFsKTsKKwkqLwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTIxMzEsNyArMjE1MSw5IEBACiB7CiAJbXV0ZXhfbG9jaygmaWNlLT5pMmNfbXV0ZXgpOwogCXdhaXRfaTJjX2J1c3koaWNlKTsKLQkvKiBwcmludGsoImkyY193cml0ZTogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIGRhdGEpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgImkyY193cml0ZTogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIGRhdGEpOworCSovCiAJb3V0YihhZGRyLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0JZVEVfQUREUikpOwogCW91dGIoZGF0YSwgSUNFUkVHMTcyNChpY2UsIEkyQ19EQVRBKSk7CiAJb3V0YihkZXYgfCBWVDE3MjRfSTJDX1dSSVRFLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0RFVl9BRERSKSk7CkBAIC0yNDU2LDkgKzI0NzgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJJQ0UxNzI0Iik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIklDRW5zZW1ibGUgSUNFMTcyNCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jIGIvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCmluZGV4IGM1MTY1OWIuLmZkOTQ4YmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKQEAgLTM0NSw4ICszNDUsOSBAQAogCQkJbmV3X2dwaW8gPSAgb2xkX2dwaW8gJgogCQkJCX4oKHVuc2lnbmVkIGludCkga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOwogCX0KLQkvKiBwcmludGsoIkpVTEkgLSBtdXRlL3VubXV0ZTogY29udHJvbF92YWx1ZTogMHgleCwgb2xkX2dwaW86IDB4JXgsIFwKLQkJbmV3X2dwaW8gMHgleFxuIiwKKwkvKiBwcmludGsoS0VSTl9ERUJVRworCQkiSlVMSSAtIG11dGUvdW5tdXRlOiBjb250cm9sX3ZhbHVlOiAweCV4LCBvbGRfZ3BpbzogMHgleCwgIgorCQkibmV3X2dwaW8gMHgleFxuIiwKIAkJKHVuc2lnbmVkIGludCl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSwgb2xkX2dwaW8sCiAJCW5ld19ncGlvKTsgKi8KIAlpZiAob2xkX2dwaW8gIT0gbmV3X2dwaW8pIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYwppbmRleCA0OGQzNjc5Li4yYThlNWNkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jCkBAIC0xMzMsOCArMTMzLDEwIEBACiAJCWlkeCAgPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKSArIFNUQUM5NDZYX0xGX1ZPTFVNRTsKIAkvKiBkdWUgdG8gcG9zc2libGUgY29uZmxpY3RzIHdpdGggc3RhYzk0NjBfc2V0X3JhdGVfdmFsLCBtdXRleGluZyAqLwogCW11dGV4X2xvY2soJnNwZWMtPm11dGVfbXV0ZXgpOwotCS8qcHJpbnRrKCJNdXRlIHB1dDogcmVnIDB4JTAyeCwgY3RybCB2YWx1ZTogMHglMDJ4XG4iLCBpZHgsCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIk11dGUgcHV0OiByZWcgMHglMDJ4LCBjdHJsIHZhbHVlOiAweCUwMnhcbiIsIGlkeCwKKwkgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCSovCiAJY2hhbmdlID0gc3RhYzk0NjBfZGFjX211dGUoaWNlLCBpZHgsIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKIAltdXRleF91bmxvY2soJnNwZWMtPm11dGVfbXV0ZXgpOwogCXJldHVybiBjaGFuZ2U7CkBAIC0xODUsNyArMTg3LDEwIEBACiAJY2hhbmdlID0gKG92b2wgIT0gbnZvbCk7CiAJaWYgKGNoYW5nZSkgewogCQlvdm9sID0gICgweDdmIC0gbnZvbCkgfCAodG1wICYgMHg4MCk7Ci0JCS8qcHJpbnRrKCJEQUMgVm9sdW1lOiByZWcgMHglMDJ4OiAweCUwMnhcbiIsIGlkeCwgb3ZvbCk7Ki8KKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRBQyBWb2x1bWU6IHJlZyAweCUwMng6IDB4JTAyeFxuIiwKKwkJICAgICAgIGlkeCwgb3ZvbCk7CisJCSovCiAJCXN0YWM5NDYwX3B1dChpY2UsIGlkeCwgKDB4N2YgLSBudm9sKSB8ICh0bXAgJiAweDgwKSk7CiAJfQogCXJldHVybiBjaGFuZ2U7CkBAIC0zNDQsNyArMzQ5LDcgQEAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDcgOyArK2lkeCkKIAkJY2hhbmdlZFtpZHhdID0gc3RhYzk0NjBfZGFjX211dGUoaWNlLAogCQkJCVNUQUM5NDZYX01BU1RFUl9WT0xVTUUgKyBpZHgsIDApOwotCS8qcHJpbnRrKCJSYXRlIGNoYW5nZTogJWQsIG5ldyBNQzogMHglMDJ4XG4iLCByYXRlLCBuZXcpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAiUmF0ZSBjaGFuZ2U6ICVkLCBuZXcgTUM6IDB4JTAyeFxuIiwgcmF0ZSwgbmV3KTsqLwogCXN0YWM5NDYwX3B1dChpY2UsIFNUQUM5NDZYX01BU1RFUl9DTE9DS0lORywgbmV3KTsKIAl1ZGVsYXkoMTApOwogCS8qIHVubXV0aW5nIC0gb25seSBvcmlnaW5hbGx5IHVubXV0ZWQgZGFjcyAtCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IGU5MDBjZGMuLjU3NjQ4ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC02ODksNyArNjg5LDcgQEAKIAkJCWJkYmFyW2lkeCArIDFdID0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCB8IC8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCiAJCQkJCQkgICAgIGljaGRldi0+ZnJhZ3NpemUgPj4gaWNoZGV2LT5wb3Nfc2hpZnQpOwogI2lmIDAKLQkJCXByaW50aygiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsCiAJCQkgICAgICAgaWR4ICsgMCwgYmRiYXJbaWR4ICsgMF0sIGJkYmFyW2lkeCArIDFdKTsKICNlbmRpZgogCQl9CkBAIC03MDEsOCArNzAxLDEwIEBACiAJaWNoZGV2LT5sdmlfZnJhZyA9IElDSF9SRUdfTFZJX01BU0sgJSBpY2hkZXYtPmZyYWdzOwogCWljaGRldi0+cG9zaXRpb24gPSAwOwogI2lmIDAKLQlwcmludGsoImx2aV9mcmFnID0gJWksIGZyYWdzID0gJWksIHBlcmlvZF9zaXplID0gMHgleCwgcGVyaW9kX3NpemUxID0gMHgleFxuIiwKLQkJCWljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsIGljaGRldi0+ZnJhZ3NpemUxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCAiCisJICAgICAgICJwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAorCSAgICAgICBpY2hkZXYtPmx2aV9mcmFnLCBpY2hkZXYtPmZyYWdzLCBpY2hkZXYtPmZyYWdzaXplLAorCSAgICAgICBpY2hkZXYtPmZyYWdzaXplMSk7CiAjZW5kaWYKIAkvKiBjbGVhciBpbnRlcnJ1cHRzICovCiAJaXB1dGJ5dGUoY2hpcCwgcG9ydCArIGljaGRldi0+cm9mZl9zciwgSUNIX0ZJRk9FIHwgSUNIX0JDSVMgfCBJQ0hfTFZCQ0kpOwpAQCAtNzY4LDcgKzc3MCw4IEBACiAJCWljaGRldi0+bHZpX2ZyYWcgJT0gaWNoZGV2LT5mcmFnczsKIAkJaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDJdID0gY3B1X3RvX2xlMzIoaWNoZGV2LT5waHlzYnVmICsgaWNoZGV2LT5sdmlfZnJhZyAqIGljaGRldi0+ZnJhZ3NpemUxKTsKICNpZiAwCi0JcHJpbnRrKCJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCBwcmVmZXRjaCA9ICVpLCBhbGwgPSAweCV4LCAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCBwcmVmZXRjaCA9ICVpLCAiCisJICAgICAgICJhbGwgPSAweCV4LCAweCV4XG4iLAogCSAgICAgICBpY2hkZXYtPmx2aSAqIDIsIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyXSwKIAkgICAgICAgaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDIgKyAxXSwgaW5iKElDSF9SRUdfT0ZGX1BJViArIHBvcnQpLAogCSAgICAgICBpbmwocG9ydCArIDQpLCBpbmIocG9ydCArIElDSF9SRUdfT0ZGX0NSKSk7CkBAIC0yMjg3LDIzICsyMjkwLDIzIEBACiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhBTElfSU5URVJSVVBUU1IpLCAweDAwMDAwMDAwKTsKIH0KIAotc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfaW5pdChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAsIGludCBwcm9iaW5nKQotewotCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7Ci0JdW5zaWduZWQgaW50IGNudCwgc3RhdHVzLCBuc3RhdHVzOwotCQotCS8qIHB1dCBsb2dpYyB0byByaWdodCBzdGF0ZSAqLwotCS8qIGZpcnN0IGNsZWFyIHN0YXR1cyBiaXRzICovCi0Jc3RhdHVzID0gSUNIX1JDUyB8IElDSF9NQ0lOVCB8IElDSF9QT0lOVCB8IElDSF9QSUlOVDsKLQlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX05GT1JDRSkKLQkJc3RhdHVzIHw9IElDSF9OVlNQSU5UOwotCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKTsKLQlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSwgY250ICYgc3RhdHVzKTsKKyNpZmRlZiBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRQorc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGljaF9jaGlwX3Jlc2V0X21vZGVbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTAxNCwgMHgwNTFmLCAiVGhpbmtwYWQgUjMyIiwgMSksCisJeyB9IC8qIGVuZCAqLworfTsKIAorc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY29sZF9yZXNldChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXApCit7CisJdW5zaWduZWQgaW50IGNudDsKIAkvKiBBQ0xpbmsgb24sIDIgY2hhbm5lbHMgKi8KKworCWlmIChzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIGljaF9jaGlwX3Jlc2V0X21vZGUpKQorCQlyZXR1cm4gLUVJTzsKKwogCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKTsKIAljbnQgJj0gfihJQ0hfQUNMSU5LIHwgSUNIX1BDTV8yNDZfTUFTSyk7Ci0jaWZkZWYgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUKKwogCS8qIGRvIGNvbGQgcmVzZXQgLSB0aGUgZnVsbCBhYzk3IHBvd2VyZG93biBtYXkgbGVhdmUgdGhlIGNvbnRyb2xsZXIKIAkgKiBpbiBhIHdhcm0gc3RhdGUgYnV0IGFjdHVhbGx5IGl0IGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjb2RlYy4KIAkgKi8KQEAgLTIzMTIsMjIgKzIzMTUsNTggQEAKIAl1ZGVsYXkoMTApOwogCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpLCBjbnQgfCBJQ0hfQUM5N0NPTEQpOwogCW1zbGVlcCgxKTsKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgc25kX2ludGVsOHgwX2ljaF9jaGlwX2Nhbl9jb2xkX3Jlc2V0KGNoaXApIFwKKwkoIXNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgaWNoX2NoaXBfcmVzZXRfbW9kZSkpCiAjZWxzZQorI2RlZmluZSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY29sZF9yZXNldChjaGlwKQkwCisjZGVmaW5lIHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jYW5fY29sZF9yZXNldChjaGlwKSAoMCkKKyNlbmRpZgorCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9yZXNldChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXApCit7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKKwl1bnNpZ25lZCBpbnQgY250OworCS8qIEFDTGluayBvbiwgMiBjaGFubmVscyAqLworCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKTsKKwljbnQgJj0gfihJQ0hfQUNMSU5LIHwgSUNIX1BDTV8yNDZfTUFTSyk7CiAJLyogZmluaXNoIGNvbGQgb3IgZG8gd2FybSByZXNldCAqLwogCWNudCB8PSAoY250ICYgSUNIX0FDOTdDT0xEKSA9PSAwID8gSUNIX0FDOTdDT0xEIDogSUNIX0FDOTdXQVJNOwogCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpLCBjbnQpOwogCWVuZF90aW1lID0gKGppZmZpZXMgKyAoSFogLyA0KSkgKyAxOwogCWRvIHsKIAkJaWYgKChpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSkgJiBJQ0hfQUM5N1dBUk0pID09IDApCi0JCQlnb3RvIF9fb2s7CisJCQlyZXR1cm4gMDsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJfSB3aGlsZSAodGltZV9hZnRlcl9lcShlbmRfdGltZSwgamlmZmllcykpOwogCXNuZF9wcmludGsoS0VSTl9FUlIgIkFDJzk3IHdhcm0gcmVzZXQgc3RpbGwgaW4gcHJvZ3Jlc3M/IFsweCV4XVxuIiwKIAkJICAgaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpKTsKIAlyZXR1cm4gLUVJTzsKK30KIAotICAgICAgX19vazoKLSNlbmRpZgorc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfaW5pdChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAsIGludCBwcm9iaW5nKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CisJdW5zaWduZWQgaW50IHN0YXR1cywgbnN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY250OworCWludCBlcnI7CisKKwkvKiBwdXQgbG9naWMgdG8gcmlnaHQgc3RhdGUgKi8KKwkvKiBmaXJzdCBjbGVhciBzdGF0dXMgYml0cyAqLworCXN0YXR1cyA9IElDSF9SQ1MgfCBJQ0hfTUNJTlQgfCBJQ0hfUE9JTlQgfCBJQ0hfUElJTlQ7CisJaWYgKGNoaXAtPmRldmljZV90eXBlID09IERFVklDRV9ORk9SQ0UpCisJCXN0YXR1cyB8PSBJQ0hfTlZTUElOVDsKKwljbnQgPSBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSk7CisJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSksIGNudCAmIHN0YXR1cyk7CisKKwlpZiAoc25kX2ludGVsOHgwX2ljaF9jaGlwX2Nhbl9jb2xkX3Jlc2V0KGNoaXApKQorCQllcnIgPSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY29sZF9yZXNldChjaGlwKTsKKwllbHNlCisJCWVyciA9IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9yZXNldChjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCWlmIChwcm9iaW5nKSB7CiAJCS8qIHdhaXQgZm9yIGFueSBjb2RlYyByZWFkeSBzdGF0dXMuCiAJCSAqIE9uY2UgaXQgYmVjb21lcyByZWFkeSBpdCBzaG91bGQgcmVtYWluIHJlYWR5CkBAIC0zMDU4LDkgKzMwOTcsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IHNob3J0bmFtZV90YWJsZSAqbmFtZTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChzcGRpZl9hY2xpbmsgPCAwKQogCQlzcGRpZl9hY2xpbmsgPSBjaGVja19kZWZhdWx0X3NwZGlmX2FjbGluayhwY2kpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDkzNDQ5ZTQuLjZlYzBmYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTQxMSw3ICs0MTEsMTAgQEAKIAkJCWJkYmFyW2lkeCArIDBdID0gY3B1X3RvX2xlMzIoaWNoZGV2LT5waHlzYnVmICsgKCgoaWR4ID4+IDEpICogaWNoZGV2LT5mcmFnc2l6ZSkgJSBpY2hkZXYtPnNpemUpKTsKIAkJCWJkYmFyW2lkeCArIDFdID0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCB8IC8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCiAJCQkJCQkgICAgIGljaGRldi0+ZnJhZ3NpemUgPj4gY2hpcC0+cGNtX3Bvc19zaGlmdCk7Ci0JCQkvLyBwcmludGsoImJkYmFyWyVpXSA9IDB4JXggWzB4JXhdXG4iLCBpZHggKyAwLCBiZGJhcltpZHggKyAwXSwgYmRiYXJbaWR4ICsgMV0pOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKKwkJCSAgICAgICBpZHggKyAwLCBiZGJhcltpZHggKyAwXSwgYmRiYXJbaWR4ICsgMV0pOworCQkJKi8KIAkJfQogCQlpY2hkZXYtPmZyYWdzID0gaWNoZGV2LT5zaXplIC8gaWNoZGV2LT5mcmFnc2l6ZTsKIAl9CkBAIC00MjEsOCArNDI0LDEwIEBACiAJaWNoZGV2LT5sdmlfZnJhZyA9IElDSF9SRUdfTFZJX01BU0sgJSBpY2hkZXYtPmZyYWdzOwogCWljaGRldi0+cG9zaXRpb24gPSAwOwogI2lmIDAKLQlwcmludGsoImx2aV9mcmFnID0gJWksIGZyYWdzID0gJWksIHBlcmlvZF9zaXplID0gMHgleCwgcGVyaW9kX3NpemUxID0gMHgleFxuIiwKLQkJCWljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsIGljaGRldi0+ZnJhZ3NpemUxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCAiCisJICAgICAgICJwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAorCSAgICAgICBpY2hkZXYtPmx2aV9mcmFnLCBpY2hkZXYtPmZyYWdzLCBpY2hkZXYtPmZyYWdzaXplLAorCSAgICAgICBpY2hkZXYtPmZyYWdzaXplMSk7CiAjZW5kaWYKIAkvKiBjbGVhciBpbnRlcnJ1cHRzICovCiAJaXB1dGJ5dGUoY2hpcCwgcG9ydCArIGljaGRldi0+cm9mZl9zciwgSUNIX0ZJRk9FIHwgSUNIX0JDSVMgfCBJQ0hfTFZCQ0kpOwpAQCAtNDY1LDcgKzQ3MCw4IEBACiAJCQkJCQkJICAgICBpY2hkZXYtPmx2aV9mcmFnICoKIAkJCQkJCQkgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNpZiAwCi0JCXByaW50aygibmV3OiBiZGJhclslaV0gPSAweCV4IFsweCV4XSwgcHJlZmV0Y2ggPSAlaSwgYWxsID0gMHgleCwgMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sICIKKwkJICAgICAgICJwcmVmZXRjaCA9ICVpLCBhbGwgPSAweCV4LCAweCV4XG4iLAogCQkgICAgICAgaWNoZGV2LT5sdmkgKiAyLCBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMl0sCiAJCSAgICAgICBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMiArIDFdLCBpbmIoSUNIX1JFR19PRkZfUElWICsgcG9ydCksCiAJCSAgICAgICBpbmwocG9ydCArIDQpLCBpbmIocG9ydCArIElDSF9SRUdfT0ZGX0NSKSk7CkBAIC0xMjY5LDkgKzEyNzUsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IHNob3J0bmFtZV90YWJsZSAqbmFtZTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJJQ0gtTU9ERU0iKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSW50ZWwgSUNIIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDVmODAwNmIuLjhiNzk5NjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yNDQzLDkgKzI0NDMsOSBAQAogCQlkZXYrKzsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogICAgICAgICBpZiAoKGVyciA9IHNuZF9rb3JnMTIxMl9jcmVhdGUoY2FyZCwgcGNpLCAma29yZzEyMTIpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNTliYmFmOC4uNzAxNDE1NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTI2OTEsOSArMjY5MSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoIChwY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdSTzoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCmluZGV4IGYyM2E3MzUuLmMxZWI4NGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwpAQCAtNjA3LDYgKzYwNyw3IEBACiAJLyogc2V0IHRoZSBmb3JtYXQgdG8gdGhlIGJvYXJkICovCiAJZXJyID0gbWl4YXJ0X3NldF9mb3JtYXQoc3RyZWFtLCBmb3JtYXQpOwogCWlmKGVyciA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTEzNjUsMTIgKzEzNjYsMTIgQEAKIAkJZWxzZQogCQkJaWR4ID0gaW5kZXhbZGV2XSArIGk7CiAJCXNucHJpbnRmKHRtcGlkLCBzaXplb2YodG1waWQpLCAiJXMtJWQiLCBpZFtkZXZdID8gaWRbZGV2XSA6ICJNSVhBUlQiLCBpKTsKLQkJY2FyZCA9IHNuZF9jYXJkX25ldyhpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCk7CisJCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JCWlmICghIGNhcmQpIHsKKwkJaWYgKGVyciA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBhbGxvY2F0ZSB0aGUgY2FyZCAlZFxuIiwgaSk7CiAJCQlzbmRfbWl4YXJ0X2ZyZWUobWdyKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIGVycjsKIAkJfQogCiAJCXN0cmNweShjYXJkLT5kcml2ZXIsIENBUkRfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYwppbmRleCAzNzgyYjUyLi40Y2Y0Y2Q4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKQEAgLTM0NSw4ICszNDUsOCBAQAogCXN0YXR1c19kYXVnaHQgPSByZWFkbF9iZSggTUlYQVJUX01FTSggbWdyLE1JWEFSVF9QU0VVRE9SRUdfRFhMWF9TVEFUVVNfT0ZGU0VUICkpOwogCiAJLyogbW90aGVyYm9hcmQgeGlsaW54IHN0YXR1cyA1IHdpbGwgc2F5IHRoYXQgdGhlIGJvYXJkIGlzIHBlcmZvcm1pbmcgYSByZXNldCAqLwotCWlmKCBzdGF0dXNfeGlsaW54ID09IDUgKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJtaVhhcnQgaXMgcmVzZXR0aW5nICFcbiIpOworCWlmIChzdGF0dXNfeGlsaW54ID09IDUpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibWlYYXJ0IGlzIHJlc2V0dGluZyAhXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiBsYXRlciAqLwogCX0KIApAQCAtMzU0LDEzICszNTQsMTQgQEAKIAljYXNlIE1JWEFSVF9NT1RIRVJCT0FSRF9YTFhfSU5ERVg6CiAKIAkJLyogeGlsaW54IGFscmVhZHkgbG9hZGVkID8gKi8gCi0JCWlmKCBzdGF0dXNfeGlsaW54ID09IDQgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0RFQlVHICJ4aWxpbnggaXMgYWxyZWFkeSBsb2FkZWQgIVxuIik7CisJCWlmIChzdGF0dXNfeGlsaW54ID09IDQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAieGlsaW54IGlzIGFscmVhZHkgbG9hZGVkICFcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogdGhlIHN0YXR1cyBzaG91bGQgYmUgMCA9PSAiaWRsZSIgKi8KLQkJaWYoIHN0YXR1c194aWxpbnggIT0gMCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJ4aWxpbnggbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLCBzdGF0dXNfeGlsaW54KTsKKwkJaWYgKHN0YXR1c194aWxpbnggIT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAieGlsaW54IGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwKKwkJCQkgICBzdGF0dXNfeGlsaW54KTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogCkBAIC0zODksMjEgKzM5MCwyMyBAQAogCiAJY2FzZSBNSVhBUlRfTU9USEVSQk9BUkRfRUxGX0lOREVYOgogCi0JCWlmKCBzdGF0dXNfZWxmID09IDQgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0RFQlVHICJlbGYgZmlsZSBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKKwkJaWYgKHN0YXR1c19lbGYgPT0gNCkgeworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJlbGYgZmlsZSBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAKIAkJLyogdGhlIHN0YXR1cyBzaG91bGQgYmUgMCA9PSAiaWRsZSIgKi8KLQkJaWYoIHN0YXR1c19lbGYgIT0gMCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJlbGYgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLCBzdGF0dXNfZWxmKTsKKwkJaWYgKHN0YXR1c19lbGYgIT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZWxmIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwKKwkJCQkgICBzdGF0dXNfZWxmKTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogCiAJCS8qIHdhaXQgZm9yIHhpbGlueCBzdGF0dXMgPT0gNCAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX01YTFhfU1RBVFVTX09GRlNFVCwgMSwgNCwgNTAwKTsgLyogNXNlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgInhpbGlueCB3YXMgbm90IGxvYWRlZCBvciBjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggd2FzIG5vdCBsb2FkZWQgb3IgIgorCQkJCSAgICJjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTQyNCw3ICs0MjcsNyBAQAogCQkvKiB3YWl0IGZvciBlbGYgc3RhdHVzID09IDQgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19FTEZfU1RBVFVTX09GRlNFVCwgMSwgNCwgMzAwKTsgLyogM3NlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImVsZiBjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlbGYgY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC00MzcsMTUgKzQ0MCwxNiBAQAogCWRlZmF1bHQ6CiAKIAkJLyogZWxmIGFuZCB4aWxpbnggc2hvdWxkIGJlIGxvYWRlZCAqLwotCQlpZiggKHN0YXR1c19lbGYgIT0gNCkgfHwgKHN0YXR1c194aWxpbnggIT0gNCkgKSB7Ci0JCQlwcmludGsoIEtFUk5fRVJSICJ4aWxpbnggb3IgZWxmIG5vdCBzdWNjZXNzZnVsbHkgbG9hZGVkXG4iKTsKKwkJaWYgKHN0YXR1c19lbGYgIT0gNCB8fCBzdGF0dXNfeGlsaW54ICE9IDQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAieGlsaW54IG9yIGVsZiBub3QgIgorCQkJICAgICAgICJzdWNjZXNzZnVsbHkgbG9hZGVkXG4iKTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogCiAJCS8qIHdhaXQgZm9yIGRhdWdodGVyIGRldGVjdGlvbiAhPSAwICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfREJSRF9QUkVTRU5DRV9PRkZTRVQsIDAsIDAsIDMwKTsgLyogMzAwbXNlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImVycm9yIHN0YXJ0aW5nIGVsZiBmaWxlXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVycm9yIHN0YXJ0aW5nIGVsZiBmaWxlXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNDYwLDggKzQ2NCw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkvKiBkYXVnaHRlciBzaG91bGQgYmUgaWRsZSAqLwotCQlpZiggc3RhdHVzX2RhdWdodCAhPSAwICkgewotCQkJcHJpbnRrKCBLRVJOX0VSUiAiZGF1Z2h0ZXIgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLCBzdGF0dXNfZGF1Z2h0KTsKKwkJaWYgKHN0YXR1c19kYXVnaHQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkYXVnaHRlciBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsCisJCQkgICAgICAgc3RhdHVzX2RhdWdodCk7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KICAKQEAgLTQ4MCw3ICs0ODUsNyBAQAogCQkvKiB3YWl0IGZvciBzdGF0dXMgPT0gMiAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0RYTFhfU1RBVFVTX09GRlNFVCwgMSwgMiwgMzApOyAvKiAzMDBtc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZGF1Z2h0ZXIgYm9hcmQgbG9hZCBlcnJvclxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkYXVnaHRlciBib2FyZCBsb2FkIGVycm9yXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNTAyLDcgKzUwNyw4IEBACiAgICAgICAgIC8qIHdhaXQgZm9yIGRhdWdodGVyIHN0YXR1cyA9PSAzICovCiAgICAgICAgIGVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfRFhMWF9TVEFUVVNfT0ZGU0VULCAxLCAzLCAzMDApOyAvKiAzc2VjICovCiAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBib2FyZCBjb3VsZCBub3QgYmUgaW5pdGlhbGlzZWRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiZGF1Z2h0ZXIgYm9hcmQgY291bGQgbm90IGJlIGluaXRpYWxpc2VkXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTUxMiw3ICs1MTgsNyBAQAogCS8qIGZpcnN0IGNvbW11bmljYXRpb24gd2l0aCBlbWJlZGRlZCAqLwogCWVyciA9IG1peGFydF9maXJzdF9pbml0KG1ncik7CiAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJtaVhhcnQgY291bGQgbm90IGJlIHNldCB1cFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm1pWGFydCBjb3VsZCBub3QgYmUgc2V0IHVwXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTU4MSwxNiArNTg3LDYgQEAKIC8qIG1pWGFydCBod2RlcCBpbnRlcmZhY2UgaWQgc3RyaW5nICovCiAjZGVmaW5lIFNORF9NSVhBUlRfSFdERVBfSUQgICAgICAgIm1pWGFydCBMb2FkZXIiCiAKLXN0YXRpYyBpbnQgbWl4YXJ0X2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1peGFydF9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBtaXhhcnRfaHdkZXBfZHNwX3N0YXR1cyhzdHJ1Y3Qgc25kX2h3ZGVwICpodywKIAkJCQkgICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKmluZm8pCiB7CkBAIC02NDMsOCArNjM5LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX01JWEFSVDsKIAlody0+cHJpdmF0ZV9kYXRhID0gbWdyOwotCWh3LT5vcHMub3BlbiA9IG1peGFydF9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IG1peGFydF9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IG1peGFydF9od2RlcF9kc3Bfc3RhdHVzOwogCWh3LT5vcHMuZHNwX2xvYWQgPSBtaXhhcnRfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IDUwYzlmOGEuLjUyMmEwNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC0xNjY4LDkgKzE2NjgsOSBAQAogCQl9CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoIChwY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NkFWX0FVRElPOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKaW5kZXggMWFiODMzZi4uODRlZjEzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCkBAIC00NSw2ICs0NSw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaGlmaWVyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTRjMywgMHgxNzEwKSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMSkgfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSURfQlJPS0VOX0VFUFJPTSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBoaWZpZXJfaWRzKTsKQEAgLTE1MSw3ICsxNTIsNiBAQAogCS5zaG9ydG5hbWUgPSAiQy1NZWRpYSBDTUk4Nzg3IiwKIAkubG9uZ25hbWUgPSAiQy1NZWRpYSBPeHlnZW4gSEQgQXVkaW8iLAogCS5jaGlwID0gIkNNSTg3ODgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pbml0ID0gaGlmaWVyX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0gaGlmaWVyX2NvbnRyb2xfZmlsdGVyLAogCS5jbGVhbnVwID0gaGlmaWVyX2NsZWFudXAsCkBAIC0xNzMsNiArMTczLDEzIEBACiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfaGlmaWVyX21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWNoaXAtPm1vZGVsID0gbW9kZWxfaGlmaWVyOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBoaWZpZXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CkBAIC0xODUsNyArMTkyLDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgJm1vZGVsX2hpZmllciwgMCk7CisJZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIGhpZmllcl9pZHMsIGdldF9oaWZpZXJfbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCmluZGV4IGRlOTk5YzYuLjcyZGI0YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDLU1lZGlhIENNSTg3ODggZHJpdmVyIGZvciBDLU1lZGlhJ3MgcmVmZXJlbmNlIGRlc2lnbiBhbmQgZm9yIHRoZSBYLU1lcmlkaWFuCisgKiBDLU1lZGlhIENNSTg3ODggZHJpdmVyIGZvciBDLU1lZGlhJ3MgcmVmZXJlbmNlIGRlc2lnbiBhbmQgc2ltaWxhciBtb2RlbHMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgogICoKQEAgLTI2LDYgKzI2LDcgQEAKICAqCiAgKiBHUElPIDAgLT4gREZTMCBvZiBBSzUzODUKICAqIEdQSU8gMSAtPiBERlMxIG9mIEFLNTM4NQorICogR1BJTyA4IC0+IGVuYWJsZSBoZWFkcGhvbmUgYW1wbGlmaWVyIG9uIEhULU9tZWdhIG1vZGVscwogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNjEsNyArNjIsOCBAQAogZW51bSB7CiAJTU9ERUxfQ01FRElBX1JFRiwJLyogQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gKi8KIAlNT0RFTF9NRVJJRElBTiwJCS8qIEF1emVuVGVjaCBYLU1lcmlkaWFuICovCi0JTU9ERUxfSEFMTywJCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KKwlNT0RFTF9DTEFSTywJCS8qIEhULU9tZWdhIENsYXJvICovCisJTU9ERUxfQ0xBUk9fSEFMTywJLyogSFQtT21lZ2EgQ2xhcm8gaGFsbyAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG94eWdlbl9pZHNbXSBfX2RldmluaXRkYXRhID0gewpAQCAtNzQsOCArNzYsOCBAQAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0N2EsIDB4YTAxNyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxYTU4LCAweDA5MTApLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4NDE1YSwgMHg1NDMxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfTUVSSURJQU4gfSwKLQl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3NjEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCi0JeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzgxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfSEFMTyB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc2MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NMQVJPIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzgxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ0xBUk9fSEFMTyB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBveHlnZW5faWRzKTsKQEAgLTg2LDYgKzg4LDggQEAKICNkZWZpbmUgR1BJT19BSzUzODVfREZTX0RPVUJMRQkweDAwMDEKICNkZWZpbmUgR1BJT19BSzUzODVfREZTX1FVQUQJMHgwMDAyCiAKKyNkZWZpbmUgR1BJT19DTEFST19IUAkJMHgwMTAwCisKIHN0cnVjdCBnZW5lcmljX2RhdGEgewogCXU4IGFrNDM5Nl9jdGwyOwogCXUxNiBzYXZlZF93bTg3ODVfcmVnaXN0ZXJzWzJdOwpAQCAtMTk2LDEwICsyMDAsNDYgQEAKIAlhazUzODVfaW5pdChjaGlwKTsKIH0KIAorc3RhdGljIHZvaWQgY2xhcm9fZW5hYmxlX2hwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJbXNsZWVwKDMwMCk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19DTEFST19IUCk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19DTEFST19IUCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfaW5pdChjaGlwKTsKKwl3bTg3ODVfaW5pdChjaGlwKTsKKwljbGFyb19lbmFibGVfaHAoY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX2hhbG9faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9pbml0KGNoaXApOworCWFrNTM4NV9pbml0KGNoaXApOworCWNsYXJvX2VuYWJsZV9ocChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgZ2VuZXJpY19jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiB9CiAKK3N0YXRpYyB2b2lkIGNsYXJvX2Rpc2FibGVfaHAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIEdQSU9fQ0xBUk9fSFApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJY2xhcm9fZGlzYWJsZV9ocChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9fc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWNsYXJvX2Rpc2FibGVfaHAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIGdlbmVyaWNfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOwpAQCAtMjExLDYgKzI1MSwxMiBAQAogCWFrNDM5Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKIH0KIAorc3RhdGljIHZvaWQgY2xhcm9fcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOworCWNsYXJvX2VuYWJsZV9ocChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgc2V0X2FrNDM5Nl9wYXJhbXMoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewpAQCAtMjkzLDMwICszMzksMTAgQEAKIAogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihhazQzOTZfZGJfc2NhbGUsIFRMVl9EQl9HQUlOX01VVEUsIDApOwogCi1zdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKLXsKLQlpZiAoZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4pIHsKLQkJY2hpcC0+bW9kZWwuaW5pdCA9IG1lcmlkaWFuX2luaXQ7Ci0JCWNoaXAtPm1vZGVsLnJlc3VtZSA9IG1lcmlkaWFuX3Jlc3VtZTsKLQkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKLQkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKLQkJCQkJICAgIFBMQVlCQUNLXzFfVE9fU1BESUYgfAotCQkJCQkgICAgQ0FQVFVSRV8wX0ZST01fSTJTXzIgfAotCQkJCQkgICAgQ0FQVFVSRV8xX0ZST01fU1BESUY7Ci0JfQotCWlmIChkcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTiB8fCBkcml2ZXJfZGF0YSA9PSBNT0RFTF9IQUxPKSB7Ci0JCWNoaXAtPm1vZGVsLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJOwotCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnIHw9IE1JRElfT1VUUFVUIHwgTUlESV9JTlBVVDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX2dlbmVyaWMgPSB7CiAJLnNob3J0bmFtZSA9ICJDLU1lZGlhIENNSTg3ODgiLAogCS5sb25nbmFtZSA9ICJDLU1lZGlhIE94eWdlbiBIRCBBdWRpbyIsCiAJLmNoaXAgPSAiQ01JODc4OCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnByb2JlID0gZ2VuZXJpY19wcm9iZSwKIAkuaW5pdCA9IGdlbmVyaWNfaW5pdCwKIAkuY2xlYW51cCA9IGdlbmVyaWNfY2xlYW51cCwKIAkucmVzdW1lID0gZ2VuZXJpY19yZXN1bWUsCkBAIC0zNDEsNiArMzY3LDQyIEBACiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfb3h5Z2VuX21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWNoaXAtPm1vZGVsID0gbW9kZWxfZ2VuZXJpYzsKKwlzd2l0Y2ggKGlkLT5kcml2ZXJfZGF0YSkgeworCWNhc2UgTU9ERUxfTUVSSURJQU46CisJCWNoaXAtPm1vZGVsLmluaXQgPSBtZXJpZGlhbl9pbml0OworCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBtZXJpZGlhbl9yZXN1bWU7CisJCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zID0gc2V0X2FrNTM4NV9wYXJhbXM7CisJCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CisJCQkJCSAgICBQTEFZQkFDS18xX1RPX1NQRElGIHwKKwkJCQkJICAgIENBUFRVUkVfMF9GUk9NX0kyU18yIHwKKwkJCQkJICAgIENBUFRVUkVfMV9GUk9NX1NQRElGOworCQlicmVhazsKKwljYXNlIE1PREVMX0NMQVJPOgorCQljaGlwLT5tb2RlbC5pbml0ID0gY2xhcm9faW5pdDsKKwkJY2hpcC0+bW9kZWwuY2xlYW51cCA9IGNsYXJvX2NsZWFudXA7CisJCWNoaXAtPm1vZGVsLnN1c3BlbmQgPSBjbGFyb19zdXNwZW5kOworCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBjbGFyb19yZXN1bWU7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfQ0xBUk9fSEFMTzoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IGNsYXJvX2hhbG9faW5pdDsKKwkJY2hpcC0+bW9kZWwuY2xlYW51cCA9IGNsYXJvX2NsZWFudXA7CisJCWNoaXAtPm1vZGVsLnN1c3BlbmQgPSBjbGFyb19zdXNwZW5kOworCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBjbGFyb19yZXN1bWU7CisJCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zID0gc2V0X2FrNTM4NV9wYXJhbXM7CisJCWJyZWFrOworCX0KKwlpZiAoaWQtPmRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOIHx8CisJICAgIGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9DTEFST19IQUxPKSB7CisJCWNoaXAtPm1vZGVsLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJOworCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnIHw9IE1JRElfT1VUUFVUIHwgTUlESV9JTlBVVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdlbmVyaWNfb3h5Z2VuX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKQEAgLTM1Myw4ICs0MTUsOCBAQAogCQkrK2RldjsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgICAgICZtb2RlbF9nZW5lcmljLCBwY2lfaWQtPmRyaXZlcl9kYXRhKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgb3h5Z2VuX2lkcywgZ2V0X294eWdlbl9tb2RlbCk7CiAJaWYgKGVyciA+PSAwKQogCQkrK2RldjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaCBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKaW5kZXggMTkxMDdjNi4uYmQ2MTVkYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCkBAIC0xOCw2ICsxOCw4IEBACiAKICNkZWZpbmUgT1hZR0VOX0lPX1NJWkUJMHgxMDAKIAorI2RlZmluZSBPWFlHRU5fRUVQUk9NX0lECTB4NDM0ZAkvKiAiQ00iICovCisKIC8qIG1vZGVsLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb2Ygb3V0cHV0cy9pbnB1dHMgKi8KICNkZWZpbmUgUExBWUJBQ0tfMF9UT19JMlMJMHgwMDAxCiAgICAgIC8qIFBMQVlCQUNLXzBfVE9fQUM5N18wCQlub3QgaW1wbGVtZW50ZWQgKi8KQEAgLTQ5LDcgKzUxLDEzIEBACiAJLnN1YnZlbmRvciA9IHN2LCBcCiAJLnN1YmRldmljZSA9IHNkCiAKKyNkZWZpbmUgQlJPS0VOX0VFUFJPTV9EUklWRVJfREFUQSAoKHVuc2lnbmVkIGxvbmcpLTEpCisjZGVmaW5lIE9YWUdFTl9QQ0lfU1VCSURfQlJPS0VOX0VFUFJPTSBcCisJT1hZR0VOX1BDSV9TVUJJRChQQ0lfVkVORE9SX0lEX0NNRURJQSwgMHg4Nzg4KSwgXAorCS5kcml2ZXJfZGF0YSA9IEJST0tFTl9FRVBST01fRFJJVkVSX0RBVEEKKwogc3RydWN0IHBjaV9kZXY7CitzdHJ1Y3QgcGNpX2RldmljZV9pZDsKIHN0cnVjdCBzbmRfY2FyZDsKIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbTsKIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlOwpAQCAtNjIsOCArNzAsNiBAQAogCWNvbnN0IGNoYXIgKnNob3J0bmFtZTsKIAljb25zdCBjaGFyICpsb25nbmFtZTsKIAljb25zdCBjaGFyICpjaGlwOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCWludCAoKnByb2JlKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKTsKIAl2b2lkICgqaW5pdCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJaW50ICgqY29udHJvbF9maWx0ZXIpKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSk7CiAJaW50ICgqbWl4ZXJfaW5pdCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CkBAIC04Myw2ICs4OSw3IEBACiAJdm9pZCAoKmFjOTdfc3dpdGNoKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBtdXRlKTsKIAljb25zdCB1bnNpZ25lZCBpbnQgKmRhY190bHY7CisJdW5zaWduZWQgbG9uZyBwcml2YXRlX2RhdGE7CiAJc2l6ZV90IG1vZGVsX2RhdGFfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgZGV2aWNlX2NvbmZpZzsKIAl1OCBkYWNfY2hhbm5lbHM7CkBAIC0xMzQsOCArMTQxLDEyIEBACiAvKiBveHlnZW5fbGliLmMgKi8KIAogaW50IG94eWdlbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgaW50IGluZGV4LCBjaGFyICppZCwKLQkJICAgICBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsICptb2RlbCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKTsKKwkJICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLAorCQkgICAgIGludCAoKmdldF9tb2RlbCkoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQKKwkJCQkgICAgICkKKwkJICAgICk7CiB2b2lkIG94eWdlbl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpOwogI2lmZGVmIENPTkZJR19QTQogaW50IG94eWdlbl9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwpAQCAtMTgwLDYgKzE5MSw5IEBACiB2b2lkIG94eWdlbl9yZXNldF91YXJ0KHN0cnVjdCBveHlnZW4gKmNoaXApOwogdm9pZCBveHlnZW5fd3JpdGVfdWFydChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1OCBkYXRhKTsKIAordTE2IG94eWdlbl9yZWFkX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgpOwordm9pZCBveHlnZW5fd3JpdGVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHZhbHVlKTsKKwogc3RhdGljIGlubGluZSB2b2lkIG94eWdlbl9zZXRfYml0czgoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdTggdmFsdWUpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwppbmRleCAzMTI2YzRiLi5jMWViOTIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKQEAgLTI1NCwzICsyNTQsMzQgQEAKIAlfd3JpdGVfdWFydChjaGlwLCAwLCBkYXRhKTsKIH0KIEVYUE9SVF9TWU1CT0wob3h5Z2VuX3dyaXRlX3VhcnQpOworCit1MTYgb3h5Z2VuX3JlYWRfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKworCW94eWdlbl93cml0ZTgoY2hpcCwgT1hZR0VOX0VFUFJPTV9DT05UUk9MLAorCQkgICAgICBpbmRleCB8IE9YWUdFTl9FRVBST01fRElSX1JFQUQpOworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDA7ICsrdGltZW91dCkgeworCQl1ZGVsYXkoMSk7CisJCWlmICghKG94eWdlbl9yZWFkOChjaGlwLCBPWFlHRU5fRUVQUk9NX1NUQVRVUykKKwkJICAgICAgJiBPWFlHRU5fRUVQUk9NX0JVU1kpKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9FRVBST01fREFUQSk7Cit9CisKK3ZvaWQgb3h5Z2VuX3dyaXRlX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKworCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9FRVBST01fREFUQSwgdmFsdWUpOworCW94eWdlbl93cml0ZTgoY2hpcCwgT1hZR0VOX0VFUFJPTV9DT05UUk9MLAorCQkgICAgICBpbmRleCB8IE9YWUdFTl9FRVBST01fRElSX1dSSVRFKTsKKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgMTA7ICsrdGltZW91dCkgeworCQltc2xlZXAoMSk7CisJCWlmICghKG94eWdlbl9yZWFkOChjaGlwLCBPWFlHRU5fRUVQUk9NX1NUQVRVUykKKwkJICAgICAgJiBPWFlHRU5fRUVQUk9NX0JVU1kpKQorCQkJcmV0dXJuOworCX0KKwlzbmRfcHJpbnRrKEtFUk5fRVJSICJFRVBST00gd3JpdGUgdGltZW91dFxuIik7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCmluZGV4IDg0ZjQ4MWQuLjMxMjI1MWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCkBAIC0zNCw2ICszNCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkMtTWVkaWEgQ01JODc4OCBoZWxwZXIgbGlicmFyeSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCisjZGVmaW5lIERSSVZFUiAib3h5Z2VuIgogCiBzdGF0aWMgaW5saW5lIGludCBveHlnZW5fdWFydF9pbnB1dF9yZWFkeShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewpAQCAtMjQzLDYgKzI0NCw2MiBAQAogI2RlZmluZSBveHlnZW5fcHJvY19pbml0KGNoaXApCiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICoKK294eWdlbl9zZWFyY2hfcGNpX2lkKHN0cnVjdCBveHlnZW4gKmNoaXAsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkc1tdKQoreworCXUxNiBzdWJkZXZpY2U7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgRUVQUk9NIHBpbnMgYXJlIGF2YWlsYWJsZSwgaS5lLiwgbm90IHVzZWQgZm9yIFNQSS4KKwkgKiAoVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHdlIGluaXRpYWxpemUgb3IgdXNlIFNQSS4pCisJICovCisJb3h5Z2VuX2NsZWFyX2JpdHM4KGNoaXAsIE9YWUdFTl9GVU5DVElPTiwKKwkJCSAgIE9YWUdFTl9GVU5DVElPTl9FTkFCTEVfU1BJXzRfNSk7CisJLyoKKwkgKiBSZWFkIHRoZSBzdWJzeXN0ZW0gZGV2aWNlIElEIGRpcmVjdGx5IGZyb20gdGhlIEVFUFJPTSwgYmVjYXVzZSB0aGUKKwkgKiBjaGlwIGRpZG4ndCBpZiB0aGUgZmlyc3QgRUVQUk9NIHdvcmQgd2FzIG92ZXJ3cml0dGVuLgorCSAqLworCXN1YmRldmljZSA9IG94eWdlbl9yZWFkX2VlcHJvbShjaGlwLCAyKTsKKwkvKgorCSAqIFdlIHVzZSBvbmx5IHRoZSBzdWJzeXN0ZW0gZGV2aWNlIElEIGZvciBzZWFyY2hpbmcgYmVjYXVzZSBpdCBpcworCSAqIHVuaXF1ZSBldmVuIHdpdGhvdXQgdGhlIHN1YnN5c3RlbSB2ZW5kb3IgSUQsIHdoaWNoIG1heSBoYXZlIGJlZW4KKwkgKiBvdmVyd3JpdHRlbiBpbiB0aGUgRUVQUk9NLgorCSAqLworCWZvciAoOyBpZHMtPnZlbmRvcjsgKytpZHMpCisJCWlmIChpZHMtPnN1YmRldmljZSA9PSBzdWJkZXZpY2UgJiYKKwkJICAgIGlkcy0+ZHJpdmVyX2RhdGEgIT0gQlJPS0VOX0VFUFJPTV9EUklWRVJfREFUQSkKKwkJCXJldHVybiBpZHM7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG94eWdlbl9yZXN0b3JlX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWlmIChveHlnZW5fcmVhZF9lZXByb20oY2hpcCwgMCkgIT0gT1hZR0VOX0VFUFJPTV9JRCkgeworCQkvKgorCQkgKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIG9ubHkgd2hlbiBhIGtub3duIGNhcmQgbW9kZWwgaGFzCisJCSAqIGJlZW4gZGV0ZWN0ZWQsIGkuZS4sIHdlIGtub3cgdGhlcmUgaXMgYSB2YWxpZCBzdWJzeXN0ZW0KKwkJICogcHJvZHVjdCBJRCBhdCBpbmRleCAyIGluIHRoZSBFRVBST00uICBUaGVyZWZvcmUsIHdlIGhhdmUKKwkJICogYmVlbiBhYmxlIHRvIGRlZHVjZSB0aGUgY29ycmVjdCBzdWJzeXN0ZW0gdmVuZG9yIElELCBhbmQKKwkJICogdGhpcyBpcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgRUVQUk9NCisJCSAqIGNvbnRlbnRzLgorCQkgKi8KKwkJb3h5Z2VuX3dyaXRlX2VlcHJvbShjaGlwLCAxLCBpZC0+c3VidmVuZG9yKTsKKwkJb3h5Z2VuX3dyaXRlX2VlcHJvbShjaGlwLCAwLCBPWFlHRU5fRUVQUk9NX0lEKTsKKworCQlveHlnZW5fc2V0X2JpdHM4KGNoaXAsIE9YWUdFTl9NSVNDLAorCQkJCSBPWFlHRU5fTUlTQ19XUklURV9QQ0lfU1VCSUQpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKKwkJCQkgICAgICBpZC0+c3VidmVuZG9yKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaXAtPnBjaSwgUENJX1NVQlNZU1RFTV9JRCwKKwkJCQkgICAgICBpZC0+c3ViZGV2aWNlKTsKKwkJb3h5Z2VuX2NsZWFyX2JpdHM4KGNoaXAsIE9YWUdFTl9NSVNDLAorCQkJCSAgIE9YWUdFTl9NSVNDX1dSSVRFX1BDSV9TVUJJRCk7CisKKwkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVFUFJPTSBJRCByZXN0b3JlZFxuIik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBveHlnZW5faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtNDQ2LDMwICs1MDMsMzMgQEAKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCWNoaXAtPm1vZGVsLmNsZWFudXAoY2hpcCk7CisJa2ZyZWUoY2hpcC0+bW9kZWxfZGF0YSk7CiAJbXV0ZXhfZGVzdHJveSgmY2hpcC0+bXV0ZXgpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKIH0KIAogaW50IG94eWdlbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgaW50IGluZGV4LCBjaGFyICppZCwKLQkJICAgICBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsICptb2RlbCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKQorCQkgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsCisJCSAgICAgaW50ICgqZ2V0X21vZGVsKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZAorCQkJCSAgICAgKQorCQkgICAgKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgb3h5Z2VuICpjaGlwOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBtb2RlbC0+b3duZXIsCi0JCQkgICAgc2l6ZW9mICpjaGlwICsgbW9kZWwtPm1vZGVsX2RhdGFfc2l6ZSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBvd25lciwgc2l6ZW9mKCpjaGlwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAljaGlwLT5jYXJkID0gY2FyZDsKIAljaGlwLT5wY2kgPSBwY2k7CiAJY2hpcC0+aXJxID0gLTE7Ci0JY2hpcC0+bW9kZWwgPSAqbW9kZWw7Ci0JY2hpcC0+bW9kZWxfZGF0YSA9IGNoaXAgKyAxOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CiAJbXV0ZXhfaW5pdCgmY2hpcC0+bXV0ZXgpOwogCUlOSVRfV09SSygmY2hpcC0+c3BkaWZfaW5wdXRfYml0c193b3JrLApAQCAtNDgxLDcgKzU0MSw3IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX2NhcmQ7CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgbW9kZWwtPmNoaXApOworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCBEUklWRVIpOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCByZXNlcnZlIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9wY2lfZW5hYmxlOwpAQCAtNDk1LDIwICs1NTUsMzQgQEAKIAl9CiAJY2hpcC0+YWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwogCisJcGNpX2lkID0gb3h5Z2VuX3NlYXJjaF9wY2lfaWQoY2hpcCwgaWRzKTsKKwlpZiAoIXBjaV9pZCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9wY2lfcmVnaW9uczsKKwl9CisJb3h5Z2VuX3Jlc3RvcmVfZWVwcm9tKGNoaXAsIHBjaV9pZCk7CisJZXJyID0gZ2V0X21vZGVsKGNoaXAsIHBjaV9pZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCisJaWYgKGNoaXAtPm1vZGVsLm1vZGVsX2RhdGFfc2l6ZSkgeworCQljaGlwLT5tb2RlbF9kYXRhID0ga3phbGxvYyhjaGlwLT5tb2RlbC5tb2RlbF9kYXRhX3NpemUsCisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXAtPm1vZGVsX2RhdGEpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9wY2lfcmVnaW9uczsKKwkJfQorCX0KKwogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IG94eWdlbl9jYXJkX2ZyZWU7CiAKLQlpZiAoY2hpcC0+bW9kZWwucHJvYmUpIHsKLQkJZXJyID0gY2hpcC0+bW9kZWwucHJvYmUoY2hpcCwgZHJpdmVyX2RhdGEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX2NhcmQ7Ci0JfQogCW94eWdlbl9pbml0KGNoaXApOwogCWNoaXAtPm1vZGVsLmluaXQoY2hpcCk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShwY2ktPmlycSwgb3h5Z2VuX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkgIGNoaXAtPm1vZGVsLmNoaXAsIGNoaXApOworCQkJICBEUklWRVIsIGNoaXApOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGludGVycnVwdCAlZFxuIiwgcGNpLT5pcnEpOwogCQlnb3RvIGVycl9jYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCmluZGV4IDE4YzdjOTEuLmJjNWNlMTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKQEAgLTI2LDcgKzI2LDcgQEAKICAqIFNQSSAwIC0+IDFzdCBQQ00xNzk2IChmcm9udCkKICAqIFNQSSAxIC0+IDJuZCBQQ00xNzk2IChzdXJyb3VuZCkKICAqIFNQSSAyIC0+IDNyZCBQQ00xNzk2IChjZW50ZXIvTEZFKQotICogU1BJIDQgLT4gNHRoIFBDTTE3OTYgKGJhY2spIGFuZCBFRVBST00gc2VsZi1kZXN0cnVjdCAoZG8gbm90IHVzZSEpCisgKiBTUEkgNCAtPiA0dGggUENNMTc5NiAoYmFjaykKICAqCiAgKiBHUElPIDIgLT4gTTAgb2YgQ1M1MzgxCiAgKiBHUElPIDMgLT4gTTEgb2YgQ1M1MzgxCkBAIC0xMTIsNiArMTEyLDM0IEBACiAgKiBDUzQzNjJBOiBBRDAgPC0gMAogICovCiAKKy8qCisgKiBYb25hciBFc3NlbmNlIFNUWAorICogLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDTUk4Nzg4OgorICoKKyAqIEnCskMgPC0+IFBDTTE3OTJBCisgKgorICogR1BJIDAgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudAorICoKKyAqIEdQSU8gMCAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiBHUElPIDEgLT4gcm91dGUgSFAgdG8gZnJvbnQgcGFuZWwgKDApIG9yIHJlYXIgamFjayAoMSkKKyAqIEdQSU8gMiAtPiBNMCBvZiBDUzUzODEKKyAqIEdQSU8gMyAtPiBNMSBvZiBDUzUzODEKKyAqIEdQSU8gNyAtPiByb3V0ZSBvdXRwdXQgdG8gc3BlYWtlciBqYWNrcyAoMCkgb3IgSFAgKDEpCisgKiBHUElPIDggLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCisgKgorICogUENNMTc5MkE6CisgKgorICogQUQwIDwtIDAKKyAqCisgKiBINiBkYXVnaHRlcmJvYXJkCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogR1BJTyA0IDwtIDAKKyAqIEdQSU8gNSA8LSAwCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTE1Miw2ICsxODAsNyBAQAogCU1PREVMX0RYLAogCU1PREVMX0hEQVYsCS8qIHdpdGhvdXQgZGF1Z2h0ZXJib2FyZCAqLwogCU1PREVMX0hEQVZfSDYsCS8qIHdpdGggSDYgZGF1Z2h0ZXJib2FyZCAqLworCU1PREVMX1NUWCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4b25hcl9pZHNbXSBfX2RldmluaXRkYXRhID0gewpAQCAtMTYwLDYgKzE4OSw4IEBACiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MmI3KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfRDJYIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzE0KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfSERBViB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM0ZiksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0QxIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzVjKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfU1RYIH0sCisJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgeG9uYXJfaWRzKTsKQEAgLTE4MywxMiArMjE0LDE0IEBACiAjZGVmaW5lIEdQSU9fSERBVl9EQl9INgkJMHgwMDAwCiAjZGVmaW5lIEdQSU9fSERBVl9EQl9YWAkJMHgwMDIwCiAKKyNkZWZpbmUgR1BJT19TVF9IUF9SRUFSCQkweDAwMDIKKyNkZWZpbmUgR1BJT19TVF9IUAkJMHgwMDgwCisKICNkZWZpbmUgSTJDX0RFVklDRV9QQ00xNzk2KGkpCSgweDk4ICsgKChpKSA8PCAxKSkJLyogMTAwMTEsIEFEeD1pLCAvVz0wICovCiAjZGVmaW5lIEkyQ19ERVZJQ0VfQ1M0Mzk4CTB4OWUJLyogMTAwMTEsIEFEMT0xLCBBRDA9MSwgL1c9MCAqLwogI2RlZmluZSBJMkNfREVWSUNFX0NTNDM2MkEJMHgzMAkvKiAwMDExMDAsIEFEMD0wLCAvVz0wICovCiAKIHN0cnVjdCB4b25hcl9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgbW9kZWw7CiAJdW5zaWduZWQgaW50IGFudGlfcG9wX2RlbGF5OwogCXVuc2lnbmVkIGludCBkYWNzOwogCXUxNiBvdXRwdXRfZW5hYmxlX2JpdDsKQEAgLTIwNywxMiArMjQwLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY20xNzk2X3dyaXRlX3NwaShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgY29kZWMsCiAJCQkJICAgICB1OCByZWcsIHU4IHZhbHVlKQogewotCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byBkbyB3cml0ZXMgb24gU1BJIDQgYmVjYXVzZSB0aGUgRUVQUk9NLCB3aGljaCBzaGFyZXMKLQkgKiB0aGUgc2FtZSBwaW4sIG1pZ2h0IGdldCBjb25mdXNlZCBhbmQgYnJva2VuLiAgV2UnZCBiZXR0ZXIgdGFrZSBjYXJlCi0JICogdGhhdCB0aGUgZHJpdmVyIHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgcmVnaXN0ZXIgdmFsdWVzIC4uLgotCSAqLwotI2lmIDAKIAkvKiBtYXBzIEFMU0EgY2hhbm5lbCBwYWlyIG51bWJlciB0byBTUEkgb3V0cHV0ICovCiAJc3RhdGljIGNvbnN0IHU4IGNvZGVjX21hcFs0XSA9IHsKIAkJMCwgMSwgMiwgNApAQCAtMjIzLDcgKzI1MCw2IEBACiAJCQkgKGNvZGVjX21hcFtjb2RlY10gPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfAogCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0hJLAogCQkJIChyZWcgPDwgOCkgfCB2YWx1ZSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBjbTE3OTZfd3JpdGVfaTJjKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBjb2RlYywKQEAgLTM0MSwxNSArMzY3LDkgQEAKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CiAKIAlkYXRhLT5hbnRpX3BvcF9kZWxheSA9IDMwMDsKKwlkYXRhLT5kYWNzID0gNDsKIAlkYXRhLT5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fRDJfT1VUUFVUX0VOQUJMRTsKIAlkYXRhLT5wY20xNzk2X292ZXJzYW1wbGluZyA9IFBDTTE3OTZfT1NfNjQ7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0QyWCkgewotCQlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSU9fREFUQTsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJT19JTlRFUlJVUFRfTUFTSzsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSU9fRDJYX0VYVF9QT1dFUjsKLQkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJCSAgICBHUElPX0QyWF9FWFRfUE9XRVIpOwotCX0KIAogCXBjbTE3OTZfaW5pdChjaGlwKTsKIApAQCAtMzYyLDYgKzM4MiwxOCBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfZDJ4X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSU9fREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElPX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElPX0QyWF9FWFRfUE9XRVI7CisJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLCBHUElPX0QyWF9FWFRfUE9XRVIpOworCisJeG9uYXJfZDJfaW5pdChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlX2NzNDM2MmFfdm9sdW1lcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXU4IG11dGU7CkBAIC00MjksMTEgKzQ2MSw2IEBACiAJZGF0YS0+Y3M0Mzk4X2ZtID0gQ1M0Mzk4X0ZNX1NJTkdMRSB8IENTNDM5OF9ERU1fTk9ORSB8IENTNDM5OF9ESUZfTEpVU1Q7CiAJZGF0YS0+Y3M0MzYyYV9mbSA9IENTNDM2MkFfRk1fU0lOR0xFIHwKIAkJQ1M0MzYyQV9BVEFQSV9CX1IgfCBDUzQzNjJBX0FUQVBJX0FfTDsKLQlpZiAoZGF0YS0+bW9kZWwgPT0gTU9ERUxfRFgpIHsKLQkJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOwotCQlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJX0RYX0VYVF9QT1dFUjsKLQl9CiAKIAlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fMldJUkVfQlVTX1NUQVRVUywKIAkJICAgICAgIE9YWUdFTl8yV0lSRV9MRU5HVEhfOCB8CkBAIC00NTQsNiArNDgxLDE3IEBACiAJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNTM2MSIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9keF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7CisJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7CisKKwl4b25hcl9kMV9pbml0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9oZGF2X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CkBAIC00NjUsNiArNTAzLDcgQEAKIAkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9GQVNUKTsKIAogCWRhdGEtPmFudGlfcG9wX2RlbGF5ID0gMTAwOworCWRhdGEtPmRhY3MgPSBjaGlwLT5tb2RlbC5wcml2YXRlX2RhdGEgPT0gTU9ERUxfSERBVl9INiA/IDQgOiAxOwogCWRhdGEtPm91dHB1dF9lbmFibGVfYml0ID0gR1BJT19EWF9PVVRQVVRfRU5BQkxFOwogCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CiAJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOwpAQCAtNDkxLDYgKzUzMCwzNiBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3R4X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fMldJUkVfQlVTX1NUQVRVUywKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9MRU5HVEhfOCB8CisJCSAgICAgICBPWFlHRU5fMldJUkVfSU5URVJSVVBUX01BU0sgfAorCQkgICAgICAgT1hZR0VOXzJXSVJFX1NQRUVEX0ZBU1QpOworCisJZGF0YS0+YW50aV9wb3BfZGVsYXkgPSAxMDA7CisJZGF0YS0+ZGFjcyA9IDE7CisJZGF0YS0+b3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RYX09VVFBVVF9FTkFCTEU7CisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7CisJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7CisJZGF0YS0+cGNtMTc5Nl9vdmVyc2FtcGxpbmcgPSBQQ00xNzk2X09TXzY0OworCisJcGNtMTc5Nl9pbml0KGNoaXApOworCisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCSAgR1BJT19EWF9JTlBVVF9ST1VURSB8IEdQSU9fU1RfSFBfUkVBUiB8IEdQSU9fU1RfSFApOworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwKKwkJCSAgICBHUElPX0RYX0lOUFVUX1JPVVRFIHwgR1BJT19TVF9IUF9SRUFSIHwgR1BJT19TVF9IUCk7CisKKwl4b25hcl9jb21tb25faW5pdChjaGlwKTsKKworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJQQ00xNzkyQSIpOworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZGlzYWJsZV9vdXRwdXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CkBAIC01MTgsNiArNTg3LDExIEBACiAJeG9uYXJfZGlzYWJsZV9vdXRwdXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0X2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl4b25hcl9kaXNhYmxlX291dHB1dChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZDJfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXhvbmFyX2QyX2NsZWFudXAoY2hpcCk7CkBAIC01MzQsNiArNjA4LDExIEBACiAJbXNsZWVwKDIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfc3RfY2xlYW51cChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZDJfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJcGNtMTc5Nl9pbml0KGNoaXApOwpAQCAtNTYxLDYgKzY0MCwxMiBAQAogCXhvbmFyX2VuYWJsZV9vdXRwdXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0X3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXBjbTE3OTZfaW5pdChjaGlwKTsKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9oZGF2X3BjbV9oYXJkd2FyZV9maWx0ZXIodW5zaWduZWQgaW50IGNoYW5uZWwsCiAJCQkJCSAgIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlICpoYXJkd2FyZSkKIHsKQEAgLTc0MCw2ICs4MjUsNzIgQEAKIAkucHJpdmF0ZV92YWx1ZSA9IEdQSU9fRFhfRlJPTlRfUEFORUwsCiB9OwogCitzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbM10gPSB7CisJCSJTcGVha2VycyIsICJIZWFkcGhvbmVzIiwgIkZQIEhlYWRwaG9uZXMiCisJfTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMykKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKKwlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdF9vdXRwdXRfc3dpdGNoX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXUxNiBncGlvOworCisJZ3BpbyA9IG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSk7CisJaWYgKCEoZ3BpbyAmIEdQSU9fU1RfSFApKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKKwllbHNlIGlmIChncGlvICYgR1BJT19TVF9IUF9SRUFSKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwllbHNlCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc3Rfb3V0cHV0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwl1MTYgZ3Bpb19vbGQsIGdwaW87CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJZ3Bpb19vbGQgPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOworCWdwaW8gPSBncGlvX29sZDsKKwlzd2l0Y2ggKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKKwljYXNlIDA6CisJCWdwaW8gJj0gfihHUElPX1NUX0hQIHwgR1BJT19TVF9IUF9SRUFSKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlncGlvIHw9IEdQSU9fU1RfSFAgfCBHUElPX1NUX0hQX1JFQVI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZ3BpbyA9IChncGlvIHwgR1BJT19TVF9IUCkgJiB+R1BJT19TVF9IUF9SRUFSOworCQlicmVhazsKKwl9CisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgZ3Bpbyk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGdwaW8gIT0gZ3Bpb19vbGQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdF9vdXRwdXRfc3dpdGNoID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkFuYWxvZyBPdXRwdXQiLAorCS5pbmZvID0gc3Rfb3V0cHV0X3N3aXRjaF9pbmZvLAorCS5nZXQgPSBzdF9vdXRwdXRfc3dpdGNoX2dldCwKKwkucHV0ID0gc3Rfb3V0cHV0X3N3aXRjaF9wdXQsCit9OworCiBzdGF0aWMgdm9pZCB4b25hcl9saW5lX21pY19hYzk3X3N3aXRjaChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgbXV0ZSkKIHsKQEAgLTc1MiwxNCArOTAzLDExIEBACiAJfQogfQogCi1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUocGNtMTc5Nl9kYl9zY2FsZSwgLTEyMDAwLCA1MCwgMCk7Ci1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoY3M0MzYyYV9kYl9zY2FsZSwgLTEyNzAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHBjbTE3OTZfZGJfc2NhbGUsIC02MDAwLCA1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoY3M0MzYyYV9kYl9zY2FsZSwgLTYwMDAsIDEwMCwgMCk7CiAKIHN0YXRpYyBpbnQgeG9uYXJfZDJfY29udHJvbF9maWx0ZXIoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKQogewotCWlmICghc3RybmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIk1hc3RlciBQbGF5YmFjayAiLCAxNikpCi0JCS8qIGRpc2FibGUgdm9sdW1lL211dGUgYmVjYXVzZSB0aGV5IHdvdWxkIHJlcXVpcmUgU1BJIHdyaXRlcyAqLwotCQlyZXR1cm4gMTsKIAlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJDRCBDYXB0dXJlICIsIDExKSkKIAkJLyogQ0QgaW4gaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSB2aWRlbyBpbiBwaW4gKi8KIAkJdGVtcGxhdGUtPnByaXZhdGVfdmFsdWUgXj0gQUM5N19DRCBeIEFDOTdfVklERU87CkBAIC03NzMsNiArOTIxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgeG9uYXJfc3RfY29udHJvbF9maWx0ZXIoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKQoreworCWlmICghc3RybmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIkNEIENhcHR1cmUgIiwgMTEpKQorCQlyZXR1cm4gMTsgLyogbm8gQ0QgaW5wdXQgKi8KKwlpZiAoIXN0cmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIlN0ZXJlbyBVcG1peGluZyIpKQorCQlyZXR1cm4gMTsgLyogc3RlcmVvIG9ubHkgLSB3ZSBkb24ndCBuZWVkIHVwbWl4aW5nICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgeG9uYXJfZDJfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJmFsdF9zd2l0Y2gsIGNoaXApKTsKQEAgLTc4Myw1MSArOTQwLDE0IEBACiAJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmZnJvbnRfcGFuZWxfc3dpdGNoLCBjaGlwKSk7CiB9CiAKLXN0YXRpYyBpbnQgeG9uYXJfbW9kZWxfcHJvYmUoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKK3N0YXRpYyBpbnQgeG9uYXJfc3RfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0gewotCQlbTU9ERUxfRDFdCT0gIlhvbmFyIEQxIiwKLQkJW01PREVMX0RYXQk9ICJYb25hciBEWCIsCi0JCVtNT0RFTF9EMl0JPSAiWG9uYXIgRDIiLAotCQlbTU9ERUxfRDJYXQk9ICJYb25hciBEMlgiLAotCQlbTU9ERUxfSERBVl0JPSAiWG9uYXIgSERBVjEuMyIsCi0JCVtNT0RFTF9IREFWX0g2XQk9ICJYb25hciBIREFWMS4zK0g2IiwKLQl9OwotCXN0YXRpYyBjb25zdCB1OCBkYWNzW10gPSB7Ci0JCVtNT0RFTF9EMV0JPSAyLAotCQlbTU9ERUxfRFhdCT0gMiwKLQkJW01PREVMX0QyXQk9IDQsCi0JCVtNT0RFTF9EMlhdCT0gNCwKLQkJW01PREVMX0hEQVZdCT0gMSwKLQkJW01PREVMX0hEQVZfSDZdCT0gNCwKLQl9OwotCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQotCWRhdGEtPm1vZGVsID0gZHJpdmVyX2RhdGE7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0hEQVYpIHsKLQkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7Ci0JCXN3aXRjaCAob3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKSAmCi0JCQlHUElPX0hEQVZfREJfTUFTSykgewotCQljYXNlIEdQSU9fSERBVl9EQl9INjoKLQkJCWRhdGEtPm1vZGVsID0gTU9ERUxfSERBVl9INjsKLQkJCWJyZWFrOwotCQljYXNlIEdQSU9fSERBVl9EQl9YWDoKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gZGF1Z2h0ZXJib2FyZFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQotCWRhdGEtPmRhY3MgPSBkYWNzW2RhdGEtPm1vZGVsXTsKLQljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1tkYXRhLT5tb2RlbF07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc3Rfb3V0cHV0X3N3aXRjaCwgY2hpcCkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QyX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDJfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMl9taXhlcl9pbml0LApAQCAtODQ3LDE5ICs5NjcsMTggQEAKIAkJCSBNSURJX09VVFBVVCB8CiAJCQkgTUlESV9JTlBVVCwKIAkuZGFjX2NoYW5uZWxzID0gOCwKLQkuZGFjX3ZvbHVtZV9taW4gPSAweDBmLAotCS5kYWNfdm9sdW1lX21heCA9IDB4ZmYsCisJLmRhY192b2x1bWVfbWluID0gMjU1IC0gMio2MCwKKwkuZGFjX3ZvbHVtZV9tYXggPSAyNTUsCiAJLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJLAotCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEksCi0JLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfSTJTLAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEkgfAorCQkJICBPWFlHRU5fRlVOQ1RJT05fRU5BQkxFX1NQSV80XzUsCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMSA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAxMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QxX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDFfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMV9taXhlcl9pbml0LApAQCAtODc3LDcgKzk5Niw3IEBACiAJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CiAJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMCwKKwkuZGFjX3ZvbHVtZV9taW4gPSAxMjcgLSA2MCwKIAkuZGFjX3ZvbHVtZV9tYXggPSAxMjcsCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULApAQCAtODg3LDggKzEwMDYsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfaGRhdiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2hkYXZfaW5pdCwKIAkuY2xlYW51cCA9IHhvbmFyX2hkYXZfY2xlYW51cCwKIAkuc3VzcGVuZCA9IHhvbmFyX2hkYXZfc3VzcGVuZCwKQEAgLTkwNiwxNiArMTAyMyw0MyBAQAogCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAogCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAogCS5kYWNfY2hhbm5lbHMgPSA4LAotCS5kYWNfdm9sdW1lX21pbiA9IDB4MGYsCi0JLmRhY192b2x1bWVfbWF4ID0gMHhmZiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKIAkubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREksCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgeG9uYXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKLQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX3N0ID0geworCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDEwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfc3R4X2luaXQsCisJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfc3RfY29udHJvbF9maWx0ZXIsCisJLm1peGVyX2luaXQgPSB4b25hcl9zdF9taXhlcl9pbml0LAorCS5jbGVhbnVwID0geG9uYXJfc3RfY2xlYW51cCwKKwkuc3VzcGVuZCA9IHhvbmFyX3N0X3N1c3BlbmQsCisJLnJlc3VtZSA9IHhvbmFyX3N0X3Jlc3VtZSwKKwkuc2V0X2RhY19wYXJhbXMgPSBzZXRfcGNtMTc5Nl9wYXJhbXMsCisJLnNldF9hZGNfcGFyYW1zID0gc2V0X2NzNTN4MV9wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3BjbTE3OTZfdm9sdW1lLAorCS51cGRhdGVfZGFjX211dGUgPSB1cGRhdGVfcGNtMTc5Nl9tdXRlLAorCS5hYzk3X3N3aXRjaCA9IHhvbmFyX2xpbmVfbWljX2FjOTdfc3dpdGNoLAorCS5kYWNfdGx2ID0gcGNtMTc5Nl9kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl9kYXRhKSwKKwkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKKwkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKKwkuZGFjX2NoYW5uZWxzID0gMiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKKwkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfeG9uYXJfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqY29uc3QgbW9kZWxzW10gPSB7CiAJCVtNT0RFTF9EMV0JPSAmbW9kZWxfeG9uYXJfZDEsCkBAIC05MjMsNyArMTA2Nyw1NyBAQAogCQlbTU9ERUxfRDJdCT0gJm1vZGVsX3hvbmFyX2QyLAogCQlbTU9ERUxfRDJYXQk9ICZtb2RlbF94b25hcl9kMiwKIAkJW01PREVMX0hEQVZdCT0gJm1vZGVsX3hvbmFyX2hkYXYsCisJCVtNT0RFTF9TVFhdCT0gJm1vZGVsX3hvbmFyX3N0LAogCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7CisJCVtNT0RFTF9EMV0JPSAiWG9uYXIgRDEiLAorCQlbTU9ERUxfRFhdCT0gIlhvbmFyIERYIiwKKwkJW01PREVMX0QyXQk9ICJYb25hciBEMiIsCisJCVtNT0RFTF9EMlhdCT0gIlhvbmFyIEQyWCIsCisJCVtNT0RFTF9IREFWXQk9ICJYb25hciBIREFWMS4zIiwKKwkJW01PREVMX0hEQVZfSDZdCT0gIlhvbmFyIEhEQVYxLjMrSDYiLAorCQlbTU9ERUxfU1RYXQk9ICJYb25hciBFc3NlbmNlIFNUWCIsCisJfTsKKwl1bnNpZ25lZCBpbnQgbW9kZWwgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAobW9kZWwgPj0gQVJSQVlfU0laRShtb2RlbHMpIHx8ICFtb2RlbHNbbW9kZWxdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljaGlwLT5tb2RlbCA9ICptb2RlbHNbbW9kZWxdOworCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgTU9ERUxfRDJYOgorCQljaGlwLT5tb2RlbC5pbml0ID0geG9uYXJfZDJ4X2luaXQ7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfRFg6CisJCWNoaXAtPm1vZGVsLmluaXQgPSB4b25hcl9keF9pbml0OworCQlicmVhazsKKwljYXNlIE1PREVMX0hEQVY6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlzd2l0Y2ggKG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSkgJgorCQkJR1BJT19IREFWX0RCX01BU0spIHsKKwkJY2FzZSBHUElPX0hEQVZfREJfSDY6CisJCQltb2RlbCA9IE1PREVMX0hEQVZfSDY7CisJCQlicmVhazsKKwkJY2FzZSBHUElPX0hEQVZfREJfWFg6CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGRhdWdodGVyYm9hcmRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9TVFg6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlicmVhazsKKwl9CisKKwljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1ttb2RlbF07CisJY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID0gbW9kZWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHhvbmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CiAJc3RhdGljIGludCBkZXY7CiAJaW50IGVycjsKIApAQCAtOTMzLDEwICsxMTI3LDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlCVUdfT04ocGNpX2lkLT5kcml2ZXJfZGF0YSA+PSBBUlJBWV9TSVpFKG1vZGVscykpOwotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgICAgIG1vZGVsc1twY2lfaWQtPmRyaXZlcl9kYXRhXSwKLQkJCSAgICAgICBwY2lfaWQtPmRyaXZlcl9kYXRhKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgeG9uYXJfaWRzLCBnZXRfeG9uYXJfbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKaW5kZXggMjdjZjJjMi4uODBlMDY0YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKQEAgLTEzMzQsNiArMTMzNCw0MCBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIHBjeGhyX3Byb2NfZ3Bpb19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGN4aHJfbWdyICptZ3IgPSBjaGlwLT5tZ3I7CisJLyogY29tbWFuZHMgYXZhaWxhYmxlIHdoZW4gZW1iZWRkZWQgRFNQIGlzIHJ1bm5pbmcgKi8KKwlpZiAobWdyLT5kc3BfbG9hZGVkICYgKDEgPDwgUENYSFJfRklSTVdBUkVfRFNQX01BSU5fSU5ERVgpKSB7CisJCS8qIGdwaW8gcG9ydHMgb24gc3RlcmVvIGJvYXJkcyBvbmx5IGF2YWlsYWJsZSAqLworCQlpbnQgdmFsdWUgPSAwOworCQlocjIyMl9yZWFkX2dwaW8obWdyLCAxLCAmdmFsdWUpOwkvKiBHUEkgKi8KKwkJc25kX2lwcmludGYoYnVmZmVyLCAiR1BJOiAweCV4XG4iLCB2YWx1ZSk7CisJCWhyMjIyX3JlYWRfZ3BpbyhtZ3IsIDAsICZ2YWx1ZSk7CS8qIEdQMCAqLworCQlzbmRfaXByaW50ZihidWZmZXIsICJHUE86IDB4JXhcbiIsIHZhbHVlKTsKKwl9IGVsc2UKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibm8gZmlybXdhcmUgbG9hZGVkXG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOworfQorc3RhdGljIHZvaWQgcGN4aHJfcHJvY19ncG9fd3JpdGUoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IGNoaXAtPm1ncjsKKwljaGFyIGxpbmVbNjRdOworCWludCB2YWx1ZTsKKwkvKiBjb21tYW5kcyBhdmFpbGFibGUgd2hlbiBlbWJlZGRlZCBEU1AgaXMgcnVubmluZyAqLworCWlmICghKG1nci0+ZHNwX2xvYWRlZCAmICgxIDw8IFBDWEhSX0ZJUk1XQVJFX0RTUF9NQUlOX0lOREVYKSkpCisJCXJldHVybjsKKwl3aGlsZSAoIXNuZF9pbmZvX2dldF9saW5lKGJ1ZmZlciwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgeworCQlpZiAoc3NjYW5mKGxpbmUsICJHUE86IDB4JXgiLCAmdmFsdWUpICE9IDEpCisJCQljb250aW51ZTsKKwkJaHIyMjJfd3JpdGVfZ3BvKG1nciwgdmFsdWUpOwkvKiBHUDAgKi8KKwl9Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY3hocl9wcm9jX2luaXQoc3RydWN0IHNuZF9wY3hociAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwpAQCAtMTM0Miw2ICsxMzc2LDEzIEBACiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19pbmZvKTsKIAlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAic3luYyIsICZlbnRyeSkpCiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19zeW5jKTsKKwkvKiBncGlvIGF2YWlsYWJsZSBvbiBzdGVyZW8gc291bmQgY2FyZHMgb25seSAqLworCWlmIChjaGlwLT5tZ3ItPmlzX2hyX3N0ZXJlbyAmJgorCSAgICAhc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgImdwaW8iLCAmZW50cnkpKSB7CisJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19ncGlvX3JlYWQpOworCQllbnRyeS0+Yy50ZXh0LndyaXRlID0gcGN4aHJfcHJvY19ncG9fd3JpdGU7CisJCWVudHJ5LT5tb2RlIHw9IFNfSVdVU1I7CisJfQogfQogLyogZW5kIG9mIHByb2MgaW50ZXJmYWNlICovCiAKQEAgLTE1MTAsMTIgKzE1NTEsMTIgQEAKIAogCQlzbnByaW50Zih0bXBpZCwgc2l6ZW9mKHRtcGlkKSwgIiVzLSVkIiwKIAkJCSBpZFtkZXZdID8gaWRbZGV2XSA6IGNhcmRfbmFtZSwgaSk7Ci0JCWNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDApOworCQllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCQlpZiAoISBjYXJkKSB7CisJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgYWxsb2NhdGUgdGhlIGNhcmQgJWRcbiIsIGkpOwogCQkJcGN4aHJfZnJlZShtZ3IpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmggYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAppbmRleCA4NDEzMWE5Li5iZGE3NzZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAKLSNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT04JCTB4MDAwOTA1CS8qIDAuOS41ICovCi0jZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OX1NUUklORwkiMC45LjUiCQkvKiAwLjkuNSAqLworI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTgkJMHgwMDA5MDYJLyogMC45LjYgKi8KKyNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIwLjkuNiIJCS8qIDAuOS42ICovCiAKIAogI2RlZmluZSBQQ1hIUl9NQVhfQ0FSRFMJCTYKQEAgLTk3LDEyICs5NywxMiBAQAogCWludCBjYXB0dXJlX2NoaXBzOwogCWludCBmd19maWxlX3NldDsKIAlpbnQgZmlybXdhcmVfbnVtOwotCWludCBpc19ocl9zdGVyZW86MTsKLQlpbnQgYm9hcmRfaGFzX2FlczE6MTsJLyogaWYgMSBib2FyZCBoYXMgQUVTMSBwbHVnIGFuZCBTUkMgKi8KLQlpbnQgYm9hcmRfaGFzX2FuYWxvZzoxOwkvKiBpZiAwIHRoZSBib2FyZCBpcyBkaWdpdGFsIG9ubHkgKi8KLQlpbnQgYm9hcmRfaGFzX21pYzoxOwkvKiBpZiAxIHRoZSBib2FyZCBoYXMgbWljcm9waG9uZSBpbnB1dCAqLwotCWludCBib2FyZF9hZXNfaW5fMTkyazoxOy8qIGlmIDEgdGhlIGFlcyBpbnB1dCBwbHVncyBkbyBzdXBwb3J0IDE5MmtIeiAqLwotCWludCBtb25vX2NhcHR1cmU6MTsJLyogaWYgMSB0aGUgYm9hcmQgZG9lcyBtb25vIGNhcHR1cmUgKi8KKwl1bnNpZ25lZCBpbnQgaXNfaHJfc3RlcmVvOjE7CisJdW5zaWduZWQgaW50IGJvYXJkX2hhc19hZXMxOjE7CS8qIGlmIDEgYm9hcmQgaGFzIEFFUzEgcGx1ZyBhbmQgU1JDICovCisJdW5zaWduZWQgaW50IGJvYXJkX2hhc19hbmFsb2c6MTsgLyogaWYgMCB0aGUgYm9hcmQgaXMgZGlnaXRhbCBvbmx5ICovCisJdW5zaWduZWQgaW50IGJvYXJkX2hhc19taWM6MTsgLyogaWYgMSB0aGUgYm9hcmQgaGFzIG1pY3JvcGhvbmUgaW5wdXQgKi8KKwl1bnNpZ25lZCBpbnQgYm9hcmRfYWVzX2luXzE5Mms6MTsvKiBpZiAxIHRoZSBhZXMgaW5wdXQgcGx1Z3MgZG8gc3VwcG9ydCAxOTJrSHogKi8KKwl1bnNpZ25lZCBpbnQgbW9ub19jYXB0dXJlOjE7IC8qIGlmIDEgdGhlIGJvYXJkIGRvZXMgbW9ubyBjYXB0dXJlICovCiAKIAlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgaG9zdHBvcnQ7CiAKQEAgLTEyNCw2ICsxMjQsNyBAQAogCiAJdW5zaWduZWQgY2hhciB4bHhfY2ZnOwkJLyogY29weSBvZiBQQ1hIUl9YTFhfQ0ZHIHJlZ2lzdGVyICovCiAJdW5zaWduZWQgY2hhciB4bHhfc2VsbWljOwkvKiBjb3B5IG9mIFBDWEhSX1hMWF9TRUxNSUMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGRzcF9yZXNldDsJLyogY29weSBvZiBQQ1hIUl9EU1BfUkVTRVQgcmVnaXN0ZXIgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmgKaW5kZXggYmJiZDY2ZC4uYmUwMTczNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgRGlnaWdyYW0gcGN4aHIgY29tcGF0aWJsZSBzb3VuZGNhcmRzCiAgKgotICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbnMgbWVzc2FnZSBoYW5kbGluZworICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbmQgbWVzc2FnZSBoYW5kbGluZwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBieSBEaWdpZ3JhbSA8YWxzYUBkaWdpZ3JhbS5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2h3ZGVwLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwppbmRleCA1OTI3NDNhLi4xN2NiMTIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwpAQCAtNDcxLDE2ICs0NzEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBjeGhyX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjeGhyX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBpbnQgcGN4aHJfc2V0dXBfZmlybXdhcmUoc3RydWN0IHBjeGhyX21nciAqbWdyKQogewogCWludCBlcnI7CkBAIC00OTUsOCArNDg1LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1BDWEhSOwogCWh3LT5wcml2YXRlX2RhdGEgPSBtZ3I7Ci0JaHctPm9wcy5vcGVuID0gcGN4aHJfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBwY3hocl9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IHBjeGhyX2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IHBjeGhyX2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5leGNsdXNpdmUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYwppbmRleCBmZjAxOTEyLi4xY2I4MmMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYwpAQCAtNTMsNiArNTMsOCBAQAogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfRFNQCTB4MDEKICNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX01VVEUJMHgwMgogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfQ09ERUMJMHgwOAorI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfR1BPX09GRlNFVAk1CisjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9HUE9fTUFTSwkweDYwCiAKIC8qIHZhbHVlcyBmb3IgUENIUl9YTFhfQ0ZHIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBDWEhSX0NGR19TWU5DRFNQX01BU0sJCTB4ODAKQEAgLTgxLDYgKzgzLDggQEAKIC8qIHZhbHVlcyBmb3IgUENIUl9YTFhfU1RBVFVTIHJlZ2lzdGVyIC0gUkVBRCAqLwogI2RlZmluZSBQQ1hIUl9TVEFUX1NSQ19MT0NLCQkweDAxCiAjZGVmaW5lIFBDWEhSX1NUQVRfTEVWRUxfSU4JCTB4MDIKKyNkZWZpbmUgUENYSFJfU1RBVF9HUElfT0ZGU0VUCQkyCisjZGVmaW5lIFBDWEhSX1NUQVRfR1BJX01BU0sJCTB4MEMKICNkZWZpbmUgUENYSFJfU1RBVF9NSUNfQ0FQUwkJMHgxMAogLyogdmFsdWVzIGZvciBQQ0hSX1hMWF9TVEFUVVMgcmVnaXN0ZXIgLSBXUklURSAqLwogI2RlZmluZSBQQ1hIUl9TVEFUX0ZSRVFfU1lOQ19NQVNLCTB4MDEKQEAgLTI5MSwxMCArMjk1LDExIEBACiAJUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsCiAJCSAgICBQQ1hIUl9EU1BfUkVTRVRfRFNQKTsKIAltc2xlZXAoNSk7Ci0JUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsCi0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfRFNQICB8Ci0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfTVVURSB8Ci0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfQ09ERUMpOworCW1nci0+ZHNwX3Jlc2V0ID0gUENYSFJfRFNQX1JFU0VUX0RTUCAgfAorCQkJIFBDWEhSX0RTUF9SRVNFVF9NVVRFIHwKKwkJCSBQQ1hIUl9EU1BfUkVTRVRfQ09ERUM7CisJUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsIG1nci0+ZHNwX3Jlc2V0KTsKKwkvKiBocjIyMl93cml0ZV9ncG8obWdyLCAwKTsgZG9lcyB0aGUgc2FtZSAqLwogCW1zbGVlcCg1KTsKIAogCS8qIGNvbmZpZyBBS00gKi8KQEAgLTQ5Niw2ICs1MDEsMzMgQEAKIH0KIAogCitpbnQgaHIyMjJfcmVhZF9ncGlvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IGlzX2dwaSwgaW50ICp2YWx1ZSkKK3sKKwlpZiAoaXNfZ3BpKSB7CisJCXVuc2lnbmVkIGNoYXIgcmVnID0gUENYSFJfSU5QQihtZ3IsIFBDWEhSX1hMWF9TVEFUVVMpOworCQkqdmFsdWUgPSAoaW50KShyZWcgJiBQQ1hIUl9TVEFUX0dQSV9NQVNLKSA+PgorCQkJICAgICAgUENYSFJfU1RBVF9HUElfT0ZGU0VUOworCX0gZWxzZSB7CisJCSp2YWx1ZSA9IChpbnQpKG1nci0+ZHNwX3Jlc2V0ICYgUENYSFJfRFNQX1JFU0VUX0dQT19NQVNLKSA+PgorCQkJIFBDWEhSX0RTUF9SRVNFVF9HUE9fT0ZGU0VUOworCX0KKwlyZXR1cm4gMDsKK30KKworCitpbnQgaHIyMjJfd3JpdGVfZ3BvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgcmVnID0gbWdyLT5kc3BfcmVzZXQgJiB+UENYSFJfRFNQX1JFU0VUX0dQT19NQVNLOworCisJcmVnIHw9ICh1bnNpZ25lZCBjaGFyKSh2YWx1ZSA8PCBQQ1hIUl9EU1BfUkVTRVRfR1BPX09GRlNFVCkgJgorCSAgICAgICBQQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0s7CisKKwlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwgcmVnKTsKKwltZ3ItPmRzcF9yZXNldCA9IHJlZzsKKwlyZXR1cm4gMDsKK30KKworCiBpbnQgaHIyMjJfdXBkYXRlX2FuYWxvZ19hdWRpb19sZXZlbChzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwLAogCQkJCSAgICBpbnQgaXNfY2FwdHVyZSwgaW50IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCmluZGV4IDZiMzE4YjIuLjVhMzdhMDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCkBAIC0zMiw2ICszMiw5IEBACiAJCQkgICAgIGVudW0gcGN4aHJfY2xvY2tfdHlwZSBjbG9ja190eXBlLAogCQkJICAgICBpbnQgKnNhbXBsZV9yYXRlKTsKIAoraW50IGhyMjIyX3JlYWRfZ3BpbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCBpc19ncGksIGludCAqdmFsdWUpOworaW50IGhyMjIyX3dyaXRlX2dwbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCB2YWx1ZSk7CisKICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19MRVZFTF9NSU4JCTAJLyogLTI1LjUgZEIgKi8KICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19aRVJPX0xFVkVMCQk1MQkvKiAwLjAgZEIgKi8KICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19MRVZFTF9NQVgJCTk5CS8qICsyNC4wIGRCICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4ZXIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCmluZGV4IDI0MzZlMzcuLmZlYzA0OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCkBAIC03ODksMTEgKzc4OSwxNSBAQAogCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlICE9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKIAkJbXV0ZXhfbG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAJCW1nci0+dXNlX2Nsb2NrX3R5cGUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwotCQlpZiAobWdyLT51c2VfY2xvY2tfdHlwZSkKKwkJcmF0ZSA9IDA7CisJCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlICE9IFBDWEhSX0NMT0NLX1RZUEVfSU5URVJOQUwpIHsKIAkJCXBjeGhyX2dldF9leHRlcm5hbF9jbG9jayhtZ3IsIG1nci0+dXNlX2Nsb2NrX3R5cGUsCiAJCQkJCQkgJnJhdGUpOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlyYXRlID0gbWdyLT5zYW1wbGVfcmF0ZTsKKwkJCWlmICghcmF0ZSkKKwkJCQlyYXRlID0gNDgwMDA7CisJCX0KIAkJaWYgKHJhdGUpIHsKIAkJCXBjeGhyX3NldF9jbG9jayhtZ3IsIHJhdGUpOwogCQkJaWYgKG1nci0+c2FtcGxlX3JhdGUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggM2NhYWNmYi4uNmYxMDM0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtMjEwMiw5ICsyMTAyLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfcmlwdGlkZV9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTMyLmMgYi9zb3VuZC9wY2kvcm1lMzIuYwppbmRleCBlN2VmM2ExLi5kN2I5NjZlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lMzIuYworKysgYi9zb3VuZC9wY2kvcm1lMzIuYwpAQCAtMTk0MSw5ICsxOTQxLDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBybWUzMikpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtZTMyKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ybWUzMl9jYXJkX2ZyZWU7CiAJcm1lMzIgPSAoc3RydWN0IHJtZTMyICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAlybWUzMi0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDNmZGQ0ODguLjU1ZmIxYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yMzQ4LDkgKzIzNDgsMTAgQEAKIAkJZGV2Kys7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgcm1lOTYpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBybWU5NiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfcm1lOTZfY2FyZF9mcmVlOwogCXJtZTk2ID0gKHN0cnVjdCBybWU5NiAqKWNhcmQtPnByaXZhdGVfZGF0YTsJCiAJcm1lOTYtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCmluZGV4IDQ0ZDBjMTUuLjMxNGU3MzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAvKiB0aGUgbWV0ZXJzIGFyZSByZWd1bGFyIGkvby1tYXBwZWQgcmVnaXN0ZXJzLCBidXQgb2Zmc2V0CiAgICBjb25zaWRlcmFibHkgZnJvbSB0aGUgcmVzdC4gdGhlIHBlYWsgcmVnaXN0ZXJzIGFyZSByZXNldAotICAgd2hlbiByZWFkOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgNCBiaXRzIGFyZSBmdWxsLXNjYWxlIGNvdW50ZXJzOyAKKyAgIHdoZW4gcmVhZDsgdGhlIGxlYXN0LXNpZ25pZmljYW50IDQgYml0cyBhcmUgZnVsbC1zY2FsZSBjb3VudGVyczsKICAgIHRoZSBhY3R1YWwgcGVhayB2YWx1ZSBpcyBpbiB0aGUgbW9zdC1zaWduaWZpY2FudCAyNCBiaXRzLgogKi8KIApAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAyNiozIHZhbHVlcyBhcmUgcmVhZCBpbiBzcyBtb2RlCiAgICAxNCozIGluIGRzIG1vZGUsIHdpdGggbm8gZ2FwIGJldHdlZW4gdmFsdWVzCiAqLwotI2RlZmluZSBIRFNQXzk2NTJfcGVha0Jhc2UJNzE2NAkKKyNkZWZpbmUgSERTUF85NjUyX3BlYWtCYXNlCTcxNjQKICNkZWZpbmUgSERTUF85NjUyX3Jtc0Jhc2UJNDA5NgogCiAvKiBjLmYuIHRoZSBoZHNwXzk2MzJfbWV0ZXJzX3Qgc3RydWN0ICovCkBAIC0xNzMsMTIgKzE3MywxMiBAQAogI2RlZmluZSBIRFNQX1NQRElGRW1waGFzaXMgICAgICAgICgxPDwxMCkgLyogMD1ub25lLCAxPW9uICovCiAjZGVmaW5lIEhEU1BfU1BESUZOb25BdWRpbyAgICAgICAgKDE8PDExKSAvKiAwPW9mZiwgMT1vbiAqLwogI2RlZmluZSBIRFNQX1NQRElGT3B0aWNhbE91dCAgICAgICgxPDwxMikgLyogMT11c2UgMXN0IEFEQVQgY29ubmVjdG9yIGZvciBTUERJRiwgMD1kbyBub3QgKi8KLSNkZWZpbmUgSERTUF9TeW5jUmVmMiAgICAgICAgICAgICAoMTw8MTMpIAotI2RlZmluZSBIRFNQX1NQRElGSW5wdXRTZWxlY3QwICAgICgxPDwxNCkgCi0jZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDEgICAgKDE8PDE1KSAKLSNkZWZpbmUgSERTUF9TeW5jUmVmMCAgICAgICAgICAgICAoMTw8MTYpIAorI2RlZmluZSBIRFNQX1N5bmNSZWYyICAgICAgICAgICAgICgxPDwxMykKKyNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MCAgICAoMTw8MTQpCisjZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDEgICAgKDE8PDE1KQorI2RlZmluZSBIRFNQX1N5bmNSZWYwICAgICAgICAgICAgICgxPDwxNikKICNkZWZpbmUgSERTUF9TeW5jUmVmMSAgICAgICAgICAgICAoMTw8MTcpCi0jZGVmaW5lIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQgKDE8PDE4KSAvKiBGb3IgSDk2MzIgY2FyZHMgKi8gCisjZGVmaW5lIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQgKDE8PDE4KSAvKiBGb3IgSDk2MzIgY2FyZHMgKi8KICNkZWZpbmUgSERTUF9YTFJCcmVha291dENhYmxlICAgICAoMTw8MjApIC8qIEZvciBIOTYzMiBjYXJkcyAqLwogI2RlZmluZSBIRFNQX01pZGkwSW50ZXJydXB0RW5hYmxlICgxPDwyMikKICNkZWZpbmUgSERTUF9NaWRpMUludGVycnVwdEVuYWJsZSAoMTw8MjMpCkBAIC0zMTQsNyArMzE0LDcgQEAKICNkZWZpbmUgSERTUF9UaW1lY29kZVN5bmMgICAgICAgKDE8PDI3KQogI2RlZmluZSBIRFNQX0FFQk8gICAgICAgICAgCSgxPDwyOCkgLyogSDk2MzIgc3BlY2lmaWMgQW5hbG9nIEV4dGVuc2lvbiBCb2FyZHMgKi8KICNkZWZpbmUgSERTUF9BRUJJCQkoMTw8MjkpIC8qIDAgPSBwcmVzZW50LCAxID0gYWJzZW50ICovCi0jZGVmaW5lIEhEU1BfbWlkaTBJUlFQZW5kaW5nICAgICgxPDwzMCkgCisjZGVmaW5lIEhEU1BfbWlkaTBJUlFQZW5kaW5nICAgICgxPDwzMCkKICNkZWZpbmUgSERTUF9taWRpMUlSUVBlbmRpbmcgICAgKDE8PDMxKQogCiAjZGVmaW5lIEhEU1Bfc3BkaWZGcmVxdWVuY3lNYXNrICAgIChIRFNQX3NwZGlmRnJlcXVlbmN5MHxIRFNQX3NwZGlmRnJlcXVlbmN5MXxIRFNQX3NwZGlmRnJlcXVlbmN5MikKQEAgLTM5MSw3ICszOTEsNyBAQAogI2RlZmluZSBIRFNQX0NIQU5ORUxfQlVGRkVSX0JZVEVTICAgICg0KkhEU1BfQ0hBTk5FTF9CVUZGRVJfU0FNUExFUykKIAogLyogdGhlIHNpemUgb2YgdGhlIGFyZWEgd2UgbmVlZCB0byBhbGxvY2F0ZSBmb3IgRE1BIHRyYW5zZmVycy4gdGhlCi0gICBzaXplIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBjaGFubmVscyAtIHRoZSAKKyAgIHNpemUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIC0gdGhlCiAgICBNdWx0aWZhY2Ugc3RpbGwgdXNlcyB0aGUgc2FtZSBtZW1vcnkgYXJlYS4KIAogICAgTm90ZSB0aGF0IHdlIGFsbG9jYXRlIDEgbW9yZSBjaGFubmVsIHRoYW4gaXMgYXBwYXJlbnRseSBuZWVkZWQKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCXVuc2lnbmVkIGNoYXIJICAgICAgcXNfaW5fY2hhbm5lbHM7CSAgICAgLyogcXVhZCBzcGVlZCBtb2RlIGZvciBIOTYzMiAqLwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBkc19pbl9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgc3NfaW5fY2hhbm5lbHM7CSAgICAvKiBkaWZmZXJlbnQgZm9yIG11bHRpZmFjZS9kaWdpZmFjZSAqLwotCXVuc2lnbmVkIGNoYXIJICAgICAgcXNfb3V0X2NoYW5uZWxzOwkgICAgCisJdW5zaWduZWQgY2hhcgkgICAgICBxc19vdXRfY2hhbm5lbHM7CiAJdW5zaWduZWQgY2hhciAgICAgICAgIGRzX291dF9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgc3Nfb3V0X2NoYW5uZWxzOwogCkBAIC01MDIsOSArNTAyLDkgQEAKIAogc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfbWZfc3NbSERTUF9NQVhfQ0hBTk5FTFNdID0geyAvKiBNdWx0aWZhY2UgKi8KIAkvKiBBbmFsb2cgKi8KLQkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAogCS8qIEFEQVQgMiAqLwotCTE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgCisJMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLAogCS8qIFNQRElGICovCiAJMjQsIDI1LAogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQpAQCAtNTI1LDExICs1MjUsMTEgQEAKIAkvKiBTUERJRiAqLwogCTgsIDksCiAJLyogQW5hbG9nICovCi0JMTAsIDExLCAKKwkxMCwgMTEsCiAJLyogQU80Uy0xOTIgYW5kIEFJNFMtMTkyIGV4dGVuc2lvbiBib2FyZHMgKi8KIAkxMiwgMTMsIDE0LCAxNSwKIAkvKiBvdGhlcnMgZG9uJ3QgZXhpc3QgKi8KLQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAktMSwgLTEKIH07CiAKQEAgLTUzOSw3ICs1MzksNyBAQAogCS8qIFNQRElGICovCiAJOCwgOSwKIAkvKiBBbmFsb2cgKi8KLQkxMCwgMTEsIAorCTEwLCAxMSwKIAkvKiBBTzRTLTE5MiBhbmQgQUk0Uy0xOTIgZXh0ZW5zaW9uIGJvYXJkcyAqLwogCTEyLCAxMywgMTQsIDE1LAogCS8qIG90aGVycyBkb24ndCBleGlzdCAqLwpAQCAtNTg3LDcgKzU4Nyw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BfaWRzW10gPSB7CiAJewogCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9YSUxJTlgsCi0JCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwgCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwKIAkJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAogCX0sIC8qIFJNRSBIYW1tZXJmYWxsLURTUCAqLwpAQCAtNjUzLDcgKzY1Myw2IEBACiAKIHN0YXRpYyBpbnQgaGRzcF9jaGVja19mb3JfaW9ib3ggKHN0cnVjdCBoZHNwICpoZHNwKQogewotCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIDA7CiAJaWYgKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0NvbmZpZ0Vycm9yKSB7CiAJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogbm8gRGlnaWZhY2Ugb3IgTXVsdGlmYWNlIGNvbm5lY3RlZCFcbiIpOwpAQCAtNjYxLDcgKzY2MCwyOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBpbnQgaGRzcF93YWl0X2Zvcl9pb2JveChzdHJ1Y3QgaGRzcCAqaGRzcCwgdW5zaWduZWQgaW50IGxvb3BzLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSAhPSBsb29wczsgKytpKSB7CisJCWlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0NvbmZpZ0Vycm9yKQorCQkJbXNsZWVwKGRlbGF5KTsKKwkJZWxzZSB7CisJCQlzbmRfcHJpbnRkKCJIYW1tZXJmYWxsLURTUDogaW9ib3ggZm91bmQgYWZ0ZXIgJXVtcyFcbiIsCisJCQkJICAgaSAqIGRlbGF5KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc25kX3ByaW50aygiSGFtbWVyZmFsbC1EU1A6IG5vIERpZ2lmYWNlIG9yIE11bHRpZmFjZSBjb25uZWN0ZWQhXG4iKTsKKwloZHNwLT5zdGF0ZSAmPSB+SERTUF9GaXJtd2FyZUxvYWRlZDsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoc3RydWN0IGhkc3AgKmhkc3ApIHsKQEAgLTY3MCwxOSArNjkxLDE5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICgoaGRzcF9yZWFkIChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfRGxsRXJyb3IpICE9IDApIHsKLQkJCisKIAkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBsb2FkaW5nIGZpcm13YXJlXG4iKTsKIAogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBIRFNQX1NfUFJPR1JBTSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfZmlmb0RhdGEsIDApOwotCQkKKwogCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfTE9OR19XQUlUKSkgewogCQkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRvd25sb2FkIHByZXBhcmF0aW9uXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCQorCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfU19MT0FEKTsKLQkJCisKIAkJZm9yIChpID0gMDsgaSA8IDI0NDEzOyArK2kpIHsKIAkJCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9maWZvRGF0YSwgaGRzcC0+ZmlybXdhcmVfY2FjaGVbaV0pOwogCQkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAxMjcsIEhEU1BfTE9OR19XQUlUKSkgewpAQCAtNjkyLDcgKzcxMyw3IEBACiAJCX0KIAogCQlzc2xlZXAoMyk7Ci0JCQorCiAJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9MT05HX1dBSVQpKSB7CiAJCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IHRpbWVvdXQgYXQgZW5kIG9mIGZpcm13YXJlIGxvYWRpbmdcbiIpOwogCQkgICAgCXJldHVybiAtRUlPOwpAQCAtNzA1LDE1ICs3MjYsMTUgQEAKICNlbmRpZgogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBoZHNwLT5jb250cm9sMl9yZWdpc3Rlcik7CiAJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogZmluaXNoZWQgZmlybXdhcmUgbG9hZGluZ1xuIik7Ci0JCQorCiAJfQogCWlmIChoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkgewogCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IGZpcm13YXJlIGxvYWRlZCBmcm9tIGNhY2hlLCByZXN0b3JpbmcgZGVmYXVsdHNcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGRzcC0+bG9jaywgZmxhZ3MpOwogCQlzbmRfaGRzcF9zZXRfZGVmYXVsdHMoaGRzcCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkc3AtPmxvY2ssIGZsYWdzKTsgCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkc3AtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JCisKIAloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlTG9hZGVkOwogCiAJcmV0dXJuIDA7CkBAIC03MjIsNyArNzQzLDcgQEAKIHN0YXRpYyBpbnQgaGRzcF9nZXRfaW9ib3hfdmVyc2lvbiAoc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaWYgKChoZHNwX3JlYWQgKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpICYgSERTUF9EbGxFcnJvcikgIT0gMCkgewotCQorCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfUFJPR1JBTSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfZmlmb0RhdGEsIDApOwogCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfU0hPUlRfV0FJVCkgPCAwKQpAQCAtNzM4LDcgKzc1OSw3IEBACiAJCQloZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9TSE9SVF9XQUlUKTsKIAkJfSBlbHNlIHsKIAkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKLQkJfSAKKwkJfQogCX0gZWxzZSB7CiAJCS8qIGZpcm13YXJlIHdhcyBhbHJlYWR5IGxvYWRlZCwgZ2V0IGlvYm94IHR5cGUgKi8KIAkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3RlcikgJiBIRFNQX3ZlcnNpb24xKQpAQCAtNzg2LDEzICs4MDcsMTMgQEAKIAogCiBzdGF0aWMgaW50IGhkc3BfZmlmb193YWl0KHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgY291bnQsIGludCB0aW1lb3V0KQoteyAgICAKK3sKIAlpbnQgaTsKIAogCS8qIHRoZSBmaWZvU3RhdHVzIHJlZ2lzdGVycyByZXBvcnRzIG9uIGhvdyBtYW55IHdvcmRzCiAJICAgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY29tbWFuZCBGSUZPLgogCSovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CiAKIAkJaWYgKChpbnQpKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9maWZvU3RhdHVzKSAmIDB4ZmYpIDw9IGNvdW50KQpAQCAtODI0LDExICs4NDUsMTEgQEAKIAogCWlmIChhZGRyID49IEhEU1BfTUFUUklYX01JWEVSX1NJWkUpCiAJCXJldHVybiAtMTsKLQkKKwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAogCQkvKiBmcm9tIG1hcnRpbiBiam9ybnNlbjoKLQkJICAgCisKIAkJICAgIllvdSBjYW4gb25seSB3cml0ZSBkd29yZHMgdG8gdGhlCiAJCSAgIG1peGVyIG1lbW9yeSB3aGljaCBjb250YWluIHR3bwogCQkgICBtaXhlciB2YWx1ZXMgaW4gdGhlIGxvdyBhbmQgaGlnaApAQCAtODQ3LDcgKzg2OCw3IEBACiAKIAkJaGRzcC0+bWl4ZXJfbWF0cml4W2FkZHJdID0gZGF0YTsKIAotCQkKKwogCQkvKiBgYWRkcicgYWRkcmVzc2VzIGEgMTYtYml0IHdpZGUgYWRkcmVzcywgYnV0CiAJCSAgIHRoZSBhZGRyZXNzIHNwYWNlIGFjY2Vzc2VkIHZpYSBoZHNwX3dyaXRlCiAJCSAgIHVzZXMgYnl0ZSBvZmZzZXRzLiBwdXQgYW5vdGhlciB3YXksIGFkZHIKQEAgLTg1NiwxNyArODc3LDE3IEBACiAJCSAgIHRvIGFjY2VzcyAwIHRvIDI3MDMgLi4uCiAJCSovCiAJCWFkID0gYWRkci8yOwotCQotCQloZHNwX3dyaXRlIChoZHNwLCA0MDk2ICsgKGFkKjQpLCAKLQkJCSAgICAoaGRzcC0+bWl4ZXJfbWF0cml4WyhhZGRyJjB4N2ZlKSsxXSA8PCAxNikgKyAKKworCQloZHNwX3dyaXRlIChoZHNwLCA0MDk2ICsgKGFkKjQpLAorCQkJICAgIChoZHNwLT5taXhlcl9tYXRyaXhbKGFkZHImMHg3ZmUpKzFdIDw8IDE2KSArCiAJCQkgICAgaGRzcC0+bWl4ZXJfbWF0cml4W2FkZHImMHg3ZmVdKTsKLQkJCisKIAkJcmV0dXJuIDA7CiAKIAl9IGVsc2UgewogCiAJCWFkID0gKGFkZHIgPDwgMTYpICsgZGF0YTsKLQkJCisKIAkJaWYgKGhkc3BfZmlmb193YWl0KGhkc3AsIDEyNywgSERTUF9MT05HX1dBSVQpKQogCQkJcmV0dXJuIC0xOwogCkBAIC05MDIsNyArOTIzLDcgQEAKIAogCWlmIChzdGF0dXMgJiBIRFNQX1NQRElGRXJyb3JGbGFnKQogCQlyZXR1cm4gMDsKLQkKKwogCXN3aXRjaCAocmF0ZV9iaXRzKSB7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MzJLSHo6IHJldHVybiAzMjAwMDsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3k0NF8xS0h6OiByZXR1cm4gNDQxMDA7CkBAIC05MTAsMTMgKzkzMSwxMyBAQAogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTY0S0h6OiByZXR1cm4gNjQwMDA7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5ODhfMktIejogcmV0dXJuIDg4MjAwOwogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTk2S0h6OiByZXR1cm4gOTYwMDA7Ci0JY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTI4S0h6OiAKKwljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxMjhLSHo6CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMTI4MDAwOwogCQlicmVhazsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxNzZfNEtIejogCisJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTc2XzRLSHo6CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMTc2NDAwOwogCQlicmVhazsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxOTJLSHo6IAorCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE5MktIejoKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAxOTIwMDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMDI3LDcgKzEwNDgsNyBAQAogewogCXU2NCBuOwogCXUzMiByOwotCQorCiAJaWYgKHJhdGUgPj0gMTEyMDAwKQogCQlyYXRlIC89IDQ7CiAJZWxzZSBpZiAocmF0ZSA+PSA1NjAwMCkKQEAgLTEwNTMsMzUgKzEwNzQsMzUgQEAKIAkgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCAoZS5nLiBkdXJpbmcgbW9kdWxlCiAJICAgaW5pdGlhbGl6YXRpb24pLgogCSovCi0JCi0JaWYgKCEoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfQ2xvY2tNb2RlTWFzdGVyKSkgewkKKworCWlmICghKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX0Nsb2NrTW9kZU1hc3RlcikpIHsKIAkJaWYgKGNhbGxlZF9pbnRlcm5hbGx5KSB7CiAJCQkvKiByZXF1ZXN0IGZyb20gY3RsIG9yIGNhcmQgaW5pdGlhbGl6YXRpb24gKi8KIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBkZXZpY2UgaXMgbm90IHJ1bm5pbmcgYXMgYSBjbG9jayBtYXN0ZXI6IGNhbm5vdCBzZXQgc2FtcGxlIHJhdGUuXG4iKTsKIAkJCXJldHVybiAtMTsKLQkJfSBlbHNlIHsJCQorCQl9IGVsc2UgewogCQkJLyogaHdfcGFyYW0gcmVxdWVzdCB3aGlsZSBpbiBBdXRvU3luYyBtb2RlICovCiAJCQlpbnQgZXh0ZXJuYWxfZnJlcSA9IGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCk7CiAJCQlpbnQgc3BkaWZfZnJlcSA9IGhkc3Bfc3BkaWZfc2FtcGxlX3JhdGUoaGRzcCk7Ci0JCQorCiAJCQlpZiAoKHNwZGlmX2ZyZXEgPT0gZXh0ZXJuYWxfZnJlcSoyKSAmJiAoaGRzcF9hdXRvc3luY19yZWYoaGRzcCkgPj0gSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxKSkKIAkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IERldGVjdGVkIEFEQVQgaW4gZG91YmxlIHNwZWVkIG1vZGVcbiIpOwogCQkJZWxzZSBpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMiAmJiAoc3BkaWZfZnJlcSA9PSBleHRlcm5hbF9mcmVxKjQpICYmIChoZHNwX2F1dG9zeW5jX3JlZihoZHNwKSA+PSBIRFNQX0FVVE9TWU5DX0ZST01fQURBVDEpKQotCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBxdWFkIHNwZWVkIG1vZGVcbiIpOwkJCQorCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBxdWFkIHNwZWVkIG1vZGVcbiIpOwogCQkJZWxzZSBpZiAocmF0ZSAhPSBleHRlcm5hbF9mcmVxKSB7CiAJCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBObyBBdXRvU3luYyBzb3VyY2UgZm9yIHJlcXVlc3RlZCByYXRlXG4iKTsKIAkJCQlyZXR1cm4gLTE7Ci0JCQl9CQkKLQkJfQkKKwkJCX0KKwkJfQogCX0KIAogCWN1cnJlbnRfcmF0ZSA9IGhkc3AtPnN5c3RlbV9zYW1wbGVfcmF0ZTsKIAogCS8qIENoYW5naW5nIGZyb20gYSAic2luZ2xlIHNwZWVkIiB0byBhICJkb3VibGUgc3BlZWQiIHJhdGUgaXMKIAkgICBub3QgYWxsb3dlZCBpZiBhbnkgc3Vic3RyZWFtcyBhcmUgb3Blbi4gVGhpcyBpcyBiZWNhdXNlCi0JICAgc3VjaCBhIGNoYW5nZSBjYXVzZXMgYSBzaGlmdCBpbiB0aGUgbG9jYXRpb24gb2YgCisJICAgc3VjaCBhIGNoYW5nZSBjYXVzZXMgYSBzaGlmdCBpbiB0aGUgbG9jYXRpb24gb2YKIAkgICB0aGUgRE1BIGJ1ZmZlcnMgYW5kIGEgcmVkdWN0aW9uIGluIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlCi0JICAgYnVmZmVycy4gCisJICAgYnVmZmVycy4KIAogCSAgIE5vdGUgdGhhdCBhIHNpbWlsYXIgYnV0IGVzc2VudGlhbGx5IGluc29sdWJsZSBwcm9ibGVtCiAJICAgZXhpc3RzIGZvciBleHRlcm5hbGx5LWRyaXZlbiByYXRlIGNoYW5nZXMuIEFsbCB3ZSBjYW4gZG8KQEAgLTEwODksNyArMTExMCw3IEBACiAKIAlpZiAocmF0ZSA+IDk2MDAwICYmIGhkc3AtPmlvX3R5cGUgIT0gSDk2MzIpCiAJCXJldHVybiAtRUlOVkFMOwotCQorCiAJc3dpdGNoIChyYXRlKSB7CiAJY2FzZSAzMjAwMDoKIAkJaWYgKGN1cnJlbnRfcmF0ZSA+IDQ4MDAwKQpAQCAtMTE3OSw3ICsxMjAwLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCQorCiAJaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlID0gcmF0ZTsKIAogCXJldHVybiAwOwpAQCAtMTI0NSwxNiArMTI2NiwxNiBAQAogCXVuc2lnbmVkIGNoYXIgYnVmWzEyOF07CiAKIAkvKiBPdXRwdXQgaXMgbm90IGludGVycnVwdCBkcml2ZW4gKi8KLQkJCisKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhtaWRpLT5sb2NrLCBmbGFncyk7CiAJaWYgKGhtaWRpLT5vdXRwdXQpIHsKIAkJaWYgKCFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eSAoaG1pZGktPm91dHB1dCkpIHsKIAkJCWlmICgobl9wZW5kaW5nID0gc25kX2hkc3BfbWlkaV9vdXRwdXRfcG9zc2libGUgKGhtaWRpLT5oZHNwLCBobWlkaS0+aWQpKSA+IDApIHsKIAkJCQlpZiAobl9wZW5kaW5nID4gKGludClzaXplb2YgKGJ1ZikpCiAJCQkJCW5fcGVuZGluZyA9IHNpemVvZiAoYnVmKTsKLQkJCQkKKwogCQkJCWlmICgodG9fd3JpdGUgPSBzbmRfcmF3bWlkaV90cmFuc21pdCAoaG1pZGktPm91dHB1dCwgYnVmLCBuX3BlbmRpbmcpKSA+IDApIHsKLQkJCQkJZm9yIChpID0gMDsgaSA8IHRvX3dyaXRlOyArK2kpIAorCQkJCQlmb3IgKGkgPSAwOyBpIDwgdG9fd3JpdGU7ICsraSkKIAkJCQkJCXNuZF9oZHNwX21pZGlfd3JpdGVfYnl0ZSAoaG1pZGktPmhkc3AsIGhtaWRpLT5pZCwgYnVmW2ldKTsKIAkJCQl9CiAJCQl9CkBAIC0xMzI1LDE0ICsxMzQ2LDE0IEBACiB7CiAJc3RydWN0IGhkc3BfbWlkaSAqaG1pZGkgPSAoc3RydWN0IGhkc3BfbWlkaSAqKSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlzbmRfaGRzcF9taWRpX291dHB1dF93cml0ZShobWlkaSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZobWlkaS0+bG9jaywgZmxhZ3MpOwogCiAJLyogdGhpcyBkb2VzIG5vdCBidW1wIGhtaWRpLT5pc3RpbWVyLCBiZWNhdXNlIHRoZQogCSAgIGtlcm5lbCBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdGhlIHRpbWVyIHdoZW4gaXQKIAkgICBleHBpcmVkLCBhbmQgd2UgYXJlIG5vdyBhZGRpbmcgaXQgYmFjaywgdGh1cwotCSAgIGxlYXZpbmcgaXN0aW1lciB3aGVyZXZlciBpdCB3YXMgc2V0IGJlZm9yZS4gIAorCSAgIGxlYXZpbmcgaXN0aW1lciB3aGVyZXZlciBpdCB3YXMgc2V0IGJlZm9yZS4KIAkqLwogCiAJaWYgKGhtaWRpLT5pc3RpbWVyKSB7CkBAIC0xNTAxLDcgKzE1MjIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jb250cm9sX3NwZGlmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzbmRfaGRzcF9jb252ZXJ0X3RvX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCwgaGRzcC0+Y3JlZ19zcGRpZik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTExLDcgKzE1MzIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdTMyIHZhbDsKLQkKKwogCXZhbCA9IHNuZF9oZHNwX2NvbnZlcnRfZnJvbV9hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgpOwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCWNoYW5nZSA9IHZhbCAhPSBoZHNwLT5jcmVnX3NwZGlmOwpAQCAtMTUzMCw3ICsxNTUxLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfY29udHJvbF9zcGRpZl9zdHJlYW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNuZF9oZHNwX2NvbnZlcnRfdG9fYWVzKCZ1Y29udHJvbC0+dmFsdWUuaWVjOTU4LCBoZHNwLT5jcmVnX3NwZGlmX3N0cmVhbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTQwLDcgKzE1NjEsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdTMyIHZhbDsKLQkKKwogCXZhbCA9IHNuZF9oZHNwX2NvbnZlcnRfZnJvbV9hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgpOwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCWNoYW5nZSA9IHZhbCAhPSBoZHNwLT5jcmVnX3NwZGlmX3N0cmVhbTsKQEAgLTE2MDIsNyArMTYyMyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9pbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9zcGRpZl9pbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MTIsNyArMTYzMyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gJSAoKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpID8gNCA6IDMpOwpAQCAtMTY0OSw3ICsxNjcwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX291dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfb3V0KGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTY1OSw3ICsxNjgwLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTY5Myw3ICsxNzE0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX3Byb2Zlc3Npb25hbChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfcHJvZmVzc2lvbmFsKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTcwMyw3ICsxNzI0LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTczNyw3ICsxNzU4LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX2VtcGhhc2lzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9lbXBoYXNpcyhoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NDcsNyArMTc2OCw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTE3ODEsNyArMTgwMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9ub25hdWRpbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfbm9uYXVkaW8oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzkxLDcgKzE4MTIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xODI4LDcgKzE4NDksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3dpdGNoIChoZHNwX3NwZGlmX3NhbXBsZV9yYXRlKGhkc3ApKSB7CiAJY2FzZSAzMjAwMDoKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CkBAIC0xODU4LDcgKzE4NzksNyBAQAogCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gOTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CQkKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTg4Miw3ICsxOTAzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3N5c3RlbV9zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlOwogCXJldHVybiAwOwogfQpAQCAtMTg5OSw3ICsxOTIwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19hdXRvc3luY19zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMzIwMDAiLCAiNDQxMDAiLCAiNDgwMDAiLCAiNjQwMDAiLCAiODgyMDAiLCAiOTYwMDAiLCAiTm9uZSIsICIxMjgwMDAiLCAiMTc2NDAwIiwgIjE5MjAwMCJ9OwkKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMzIwMDAiLCAiNDQxMDAiLCAiNDgwMDAiLCAiNjQwMDAiLCAiODgyMDAiLCAiOTYwMDAiLCAiTm9uZSIsICIxMjgwMDAiLCAiMTc2NDAwIiwgIjE5MjAwMCJ9OwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgPyAxMCA6IDcgOwpAQCAtMTkxMiw3ICsxOTMzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2F1dG9zeW5jX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXN3aXRjaCAoaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKSkgewogCWNhc2UgMzIwMDA6CiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOwpAQCAtMTk0MCw5ICsxOTYxLDkgQEAKIAkJYnJlYWs7CiAJY2FzZSAxOTIwMDA6CiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA5OwotCQlicmVhazsJCisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwkJCisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE5NjgsNyArMTk4OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fc3lzdGVtX2Nsb2NrX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik1hc3RlciIsICJTbGF2ZSIgfTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOwpAQCAtMTk4MSw3ICsyMDAyLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3N5c3RlbV9jbG9ja19tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3N5c3RlbV9jbG9ja19tb2RlKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjAxOCw3ICsyMDM5LDcgQEAKIAkJY2FzZSAxOTIwMDA6CiAJCQlyZXR1cm4gOTsKIAkJZGVmYXVsdDoKLQkJCXJldHVybiAzOwkKKwkJCXJldHVybiAzOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0dXJuIDA7CkBAIC0yMDMyLDcgKzIwNTMsNyBAQAogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfQVVUT1NZTkM6CiAJCWlmIChoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApICE9IDApIHsKIAkJICAgIGlmICghaGRzcF9zZXRfcmF0ZShoZHNwLCBoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApLCAxKSkgewotCQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUF9DbG9ja01vZGVNYXN0ZXI7CQkKKwkJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfkhEU1BfQ2xvY2tNb2RlTWFzdGVyOwogCQkJaGRzcF93cml0ZShoZHNwLCBIRFNQX2NvbnRyb2xSZWdpc3RlciwgaGRzcC0+Y29udHJvbF9yZWdpc3Rlcik7CiAJCQlyZXR1cm4gMDsKIAkJICAgIH0KQEAgLTIwNDMsNyArMjA2NCw3IEBACiAJCWJyZWFrOwogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfSU5URVJOQUxfNDRfMUtIWjoKIAkJcmF0ZSA9IDQ0MTAwOwotCQlicmVhazsJICAgIAorCQlicmVhazsKIAljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzQ4S0haOgogCQlyYXRlID0gNDgwMDA7CiAJCWJyZWFrOwpAQCAtMjA3OCwxMyArMjA5OSwxMyBAQAogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJBdXRvU3luYyIsICJJbnRlcm5hbCAzMi4wIGtIeiIsICJJbnRlcm5hbCA0NC4xIGtIeiIsICJJbnRlcm5hbCA0OC4wIGtIeiIsICJJbnRlcm5hbCA2NC4wIGtIeiIsICJJbnRlcm5hbCA4OC4yIGtIeiIsICJJbnRlcm5hbCA5Ni4wIGtIeiIsICJJbnRlcm5hbCAxMjgga0h6IiwgIkludGVybmFsIDE3Ni40IGtIeiIsICJJbnRlcm5hbCAxOTIuMCBLSHoiIH07CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKQogCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDEwOwogCWVsc2UKLQkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwkKKwkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CkBAIC0yMDk0LDcgKzIxMTUsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfY2xvY2tfc291cmNlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2Nsb2NrX3NvdXJjZShoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMDQsNyArMjEyNSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yMTMwLDcgKzIxNTEsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfY2xvY2tfc291cmNlX2xvY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwLT5jbG9ja19zb3VyY2VfbG9ja2VkOwogCXJldHVybiAwOwogfQpAQCAtMjE2NSw3ICsyMTg2LDcgQEAKIAljYXNlIEhEU1BfREFHYWluTWludXMxMGRCVjoKIAkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDE7CQorCQlyZXR1cm4gMTsKIAl9CiB9CiAKQEAgLTIxODAsOCArMjIwMSw4IEBACiAJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9EQUdhaW5QbHVzNGRCdTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfREFHYWluTWludXMxMGRCVjsJCQotCQlicmVhazsJICAgIAorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfREFHYWluTWludXMxMGRCVjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCkBAIC0yMTkzLDcgKzIyMTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2RhX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IkhpIEdhaW4iLCAiKzQgZEJ1IiwgIi0xMCBkYlYifTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwpAQCAtMjIwNiw3ICsyMjI3LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2RhX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfZGFfZ2FpbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMTYsNyArMjIzNyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yMjUwLDcgKzIyNzEsNyBAQAogCWNhc2UgSERTUF9BREdhaW5Mb3dHYWluOgogCQlyZXR1cm4gMjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMTsJCisJCXJldHVybiAxOwogCX0KIH0KIApAQCAtMjI2MiwxMSArMjI4MywxMSBAQAogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluTWludXMxMGRCVjsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluUGx1czRkQnU7CQkKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2FpblBsdXM0ZEJ1OwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5Mb3dHYWluOwkJCi0JCWJyZWFrOwkgICAgCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5Mb3dHYWluOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAKQEAgLTIyNzgsNyArMjI5OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fYWRfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiLTEwIGRCViIsICIrNCBkQnUiLCAiTG8gR2FpbiJ9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yMjkxLDcgKzIzMTIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWRfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9hZF9nYWluKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjMwMSw3ICsyMzIyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTIzMzUsNyArMjM1Niw3IEBACiAJY2FzZSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjoKIAkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDA7CQorCQlyZXR1cm4gMDsKIAl9CiB9CiAKQEAgLTIzNDcsMTEgKzIzNjgsMTEgQEAKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2FpbjBkQjsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXM2ZEI7CQkKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzNmRCOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW5NaW51czEyZEI7CQkKLQkJYnJlYWs7CSAgICAKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCkBAIC0yMzYzLDcgKzIzODQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3Bob25lX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IjAgZEIiLCAiLTYgZEIiLCAiLTEyIGRCIn07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTIzNzYsNyArMjM5Nyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9waG9uZV9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3Bob25lX2dhaW4oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzg2LDcgKzI0MDcsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMjQzMiw3ICsyNDUzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3hscl9icmVha291dF9jYWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQyLDcgKzI0NjMsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yNDg4LDcgKzI1MDksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWViKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2FlYihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OTgsNyArMjUxOSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI1NzYsNyArMjU5Nyw3IEBACiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IldvcmQiLCAiSUVDOTU4IiwgIkFEQVQxIiwgIkFEQVQgU3luYyIsICJBREFUMiIsICJBREFUMyIgfTsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAKQEAgLTI1OTUsNyArMjYxNiw3IEBACiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMDsKIAkJYnJlYWs7CiAJfQotCQkKKwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CkBAIC0yNjA1LDcgKzI2MjYsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcHJlZl9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9wcmVmX3N5bmNfcmVmKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjYxNSw3ICsyNjM2LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlLCBtYXg7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMjY2NCw3ICsyNjg1LDcgQEAKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9TUERJRjoKIAkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9TUERJRjsKIAljYXNlIEhEU1BfU2VsU3luY1JlZk1hc2s6Ci0JCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORTsJCisJCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORTsKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9BREFUMToKIAkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMTsKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9BREFUMjoKQEAgLTI2ODAsNyArMjcwMSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fYXV0b3N5bmNfcmVmKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJXb3JkIiwgIkFEQVQgU3luYyIsICJJRUM5NTgiLCAiTm9uZSIsICJBREFUMSIsICJBREFUMiIsICJBREFUMyIgfTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwpAQCAtMjY5Myw3ICsyNzE0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2F1dG9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9hdXRvc3luY19yZWYoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzI3LDcgKzI3NDgsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfbGluZV9vdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX2xpbmVfb3V0KGhkc3ApOwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yNzM5LDcgKzI3NjAsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yNzczLDcgKzI3OTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcHJlY2lzZV9wb2ludGVyKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcC0+cHJlY2lzZV9wdHI7CiAJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKQEAgLTI3ODUsNyArMjgwNiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI4MTksNyArMjg0MCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF91c2VfbWlkaV90YXNrbGV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcC0+dXNlX21pZGlfdGFza2xldDsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjgzMSw3ICsyODUyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjg3MywxMiArMjg5NCwxMiBAQAogCiAJc291cmNlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJZGVzdGluYXRpb24gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXTsKLQkKKwogCWlmIChzb3VyY2UgPj0gaGRzcC0+bWF4X2NoYW5uZWxzKQogCQlhZGRyID0gaGRzcF9wbGF5YmFja190b19vdXRwdXRfa2V5KGhkc3Asc291cmNlLWhkc3AtPm1heF9jaGFubmVscyxkZXN0aW5hdGlvbik7CiAJZWxzZQogCQlhZGRyID0gaGRzcF9pbnB1dF90b19vdXRwdXRfa2V5KGhkc3Asc291cmNlLCBkZXN0aW5hdGlvbik7Ci0JCisKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsyXSA9IGhkc3BfcmVhZF9nYWluIChoZHNwLCBhZGRyKTsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjkyNiw3ICsyOTQ3LDcgQEAKIAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik5vIExvY2siLCAiTG9jayIsICJTeW5jIiB9OwkKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiTm8gTG9jayIsICJMb2NrIiwgIlN5bmMiIH07CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yOTcxLDcgKzI5OTIsNyBAQAogCWludCBzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZFcnJvckZsYWcpCiAJCXJldHVybiAwOwotCWVsc2UgewkKKwllbHNlIHsKIAkJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZTeW5jKQogCQkJcmV0dXJuIDI7CiAJCWVsc2UKQEAgLTMwMDcsNyArMzAyOCw3IEBACiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7Ci19CQorfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZGF0c3luY19zeW5jX2NoZWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTMwMjUsMTcgKzMwNDYsMTcgQEAKIH0KIAogc3RhdGljIGludCBoZHNwX2FkYXRfc3luY19jaGVjayhzdHJ1Y3QgaGRzcCAqaGRzcCwgaW50IGlkeCkKLXsJCit7CiAJaW50IHN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKLQkKKwogCWlmIChzdGF0dXMgJiAoSERTUF9Mb2NrMD4+aWR4KSkgewogCQlpZiAoc3RhdHVzICYgKEhEU1BfU3luYzA+PmlkeCkpCiAJCQlyZXR1cm4gMjsKIAkJZWxzZQotCQkJcmV0dXJuIDE7CQkKKwkJCXJldHVybiAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKLX0gCit9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2FkYXRfc3luY19jaGVjayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0zMDUzLDcgKzMwNzQsNyBAQAogCQlicmVhazsKIAljYXNlIE11bHRpZmFjZToKIAljYXNlIEg5NjMyOgotCQlpZiAob2Zmc2V0ID49IDEpIAorCQlpZiAob2Zmc2V0ID49IDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMxMTUsNyArMzEzNiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9kZHNfb2Zmc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2Rkc19vZmZzZXQoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTI1LDcgKzMxNDYsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMzE3MCw3ICszMTkxLDcgQEAKIAkuZ2V0ID0JCXNuZF9oZHNwX2NvbnRyb2xfc3BkaWZfbWFza19nZXQsCiAJLnByaXZhdGVfdmFsdWUgPSBJRUM5NThfQUVTMF9OT05BVURJTyB8CiAgIAkJCSBJRUM5NThfQUVTMF9QUk9GRVNTSU9OQUwgfAotCQkJIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJUywJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVMsCiB9LAogewogCS5hY2Nlc3MgPQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKQEAgLTMxODgsNyArMzIwOSw3IEBACiBIRFNQX1NQRElGX1BST0ZFU1NJT05BTCgiSUVDOTU4IFByb2Zlc3Npb25hbCBCaXQiLCAwKSwKIEhEU1BfU1BESUZfRU1QSEFTSVMoIklFQzk1OCBFbXBoYXNpcyBCaXQiLCAwKSwKIEhEU1BfU1BESUZfTk9OX0FVRElPKCJJRUM5NTggTm9uLWF1ZGlvIEJpdCIsIDApLAotLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovIAorLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovCiBIRFNQX0NMT0NLX1NPVVJDRSgiU2FtcGxlIENsb2NrIFNvdXJjZSIsIDApLAogewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMzI0MCw3ICszMjYxLDcgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCQorCiAJLyogREEsIEFEIGFuZCBQaG9uZSBnYWluIGFuZCBYTFIgYnJlYWtvdXQgY2FibGUgY29udHJvbHMgZm9yIEg5NjMyIGNhcmRzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9oZHNwXzk2MzJfY29udHJvbHMpOyBpZHgrKykgewpAQCAtMzI1OSw3ICszMjgwLDcgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIC9wcm9jIGludGVyZmFjZSAKKyAgIC9wcm9jIGludGVyZmFjZQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCkBAIC0zMjk4LDcgKzMzMTksNyBAQAogCQkJfQogCQl9CiAJfQotCQorCiAJc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwogCXN0YXR1czIgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpOwogCkBAIC0zMzYyLDE3ICszMzgzLDE3IEBACiAJCWJyZWFrOwogCQljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzE5MktIWjoKIAkJY2xvY2tfc291cmNlID0gIkludGVybmFsIDE5MiBrSHoiOwotCQlicmVhazsJCisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWNsb2NrX3NvdXJjZSA9ICJFcnJvciI7CQkKKwkJY2xvY2tfc291cmNlID0gIkVycm9yIjsKIAl9CiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlNhbXBsZSBDbG9jayBTb3VyY2U6ICVzXG4iLCBjbG9ja19zb3VyY2UpOwotCQkJCisKIAlpZiAoaGRzcF9zeXN0ZW1fY2xvY2tfbW9kZShoZHNwKSkKIAkJc3lzdGVtX2Nsb2NrX21vZGUgPSAiU2xhdmUiOwogCWVsc2UKIAkJc3lzdGVtX2Nsb2NrX21vZGUgPSAiTWFzdGVyIjsKLQkKKwogCXN3aXRjaCAoaGRzcF9wcmVmX3N5bmNfcmVmIChoZHNwKSkgewogCWNhc2UgSERTUF9TWU5DX0ZST01fV09SRDoKIAkJcHJlZl9zeW5jX3JlZiA9ICJXb3JkIENsb2NrIjsKQEAgLTMzOTcsNyArMzQxOCw3IEBACiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiUHJlZmVycmVkIFN5bmMgUmVmZXJlbmNlOiAlc1xuIiwgcHJlZl9zeW5jX3JlZik7Ci0JCisKIAlzd2l0Y2ggKGhkc3BfYXV0b3N5bmNfcmVmIChoZHNwKSkgewogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX1dPUkQ6CiAJCWF1dG9zeW5jX3JlZiA9ICJXb3JkIENsb2NrIjsKQEAgLTM0MTAsNyArMzQzMSw3IEBACiAJCWJyZWFrOwogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX05PTkU6CiAJCWF1dG9zeW5jX3JlZiA9ICJOb25lIjsKLQkJYnJlYWs7CQorCQlicmVhazsKIAljYXNlIEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMToKIAkJYXV0b3N5bmNfcmVmID0gIkFEQVQxIjsKIAkJYnJlYWs7CkBAIC0zNDI1LDE0ICszNDQ2LDE0IEBACiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiQXV0b1N5bmMgUmVmZXJlbmNlOiAlc1xuIiwgYXV0b3N5bmNfcmVmKTsKLQkKKwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJBdXRvU3luYyBGcmVxdWVuY3k6ICVkXG4iLCBoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApKTsKLQkKKwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgTW9kZTogJXNcbiIsIHN5c3RlbV9jbG9ja19tb2RlKTsKIAogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5OiAlZFxuIiwgaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlKTsKIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU3lzdGVtIENsb2NrIExvY2tlZDogJXNcbiIsIGhkc3AtPmNsb2NrX3NvdXJjZV9sb2NrZWQgPyAiWWVzIiA6ICJObyIpOwotCQkKKwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAKIAlzd2l0Y2ggKGhkc3Bfc3BkaWZfaW4oaGRzcCkpIHsKQEAgLTM0NTIsNyArMzQ3Myw3IEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBpbnB1dDogPz8/XG4iKTsKIAkJYnJlYWs7CiAJfQotCQorCiAJaWYgKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX1NQRElGT3B0aWNhbE91dCkKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IG91dHB1dDogQ29heGlhbCAmIEFEQVQxXG4iKTsKIAllbHNlCkBAIC0zNTEwLDEzICszNTMxLDEzIEBACiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJTUERJRjogTm8gTG9ja1xuIik7CiAJZWxzZQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU1BESUY6ICVzXG4iLCB4ID8gIlN5bmMiIDogIkxvY2siKTsKLQkKKwogCXggPSBzdGF0dXMyICYgSERTUF93Y19zeW5jOwogCWlmIChzdGF0dXMyICYgSERTUF93Y19sb2NrKQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiV29yZCBDbG9jazogJXNcbiIsIHggPyAiU3luYyIgOiAiTG9jayIpOwogCWVsc2UKIAkJc25kX2lwcmludGYgKGJ1ZmZlciwgIldvcmQgQ2xvY2s6IE5vIExvY2tcbiIpOwotCQorCiAJeCA9IHN0YXR1cyAmIEhEU1BfVGltZWNvZGVTeW5jOwogCWlmIChzdGF0dXMgJiBIRFNQX1RpbWVjb2RlTG9jaykKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQURBVCBTeW5jOiAlc1xuIiwgeCA/ICJTeW5jIiA6ICJMb2NrIik7CkBAIC0zNTI0LDExICszNTQ1LDExIEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFEQVQgU3luYzogTm8gTG9ja1xuIik7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwotCQorCiAJLyogSW5mb3JtYXRpb25zIGFib3V0IEg5NjMyIHNwZWNpZmljIGNvbnRyb2xzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJY2hhciAqdG1wOwotCQorCiAJCXN3aXRjaCAoaGRzcF9hZF9nYWluKGhkc3ApKSB7CiAJCWNhc2UgMDoKIAkJCXRtcCA9ICItMTAgZEJWIjsKQEAgLTM1NTQsNyArMzU3NSw3IEBACiAJCQlicmVhazsKIAkJfQogCQlzbmRfaXByaW50ZihidWZmZXIsICJEQSBHYWluIDogJXNcbiIsIHRtcCk7Ci0JCQorCiAJCXN3aXRjaCAoaGRzcF9waG9uZV9nYWluKGhkc3ApKSB7CiAJCWNhc2UgMDoKIAkJCXRtcCA9ICIwIGRCIjsKQEAgLTM1NjgsOCArMzU4OSw4IEBACiAJCX0KIAkJc25kX2lwcmludGYoYnVmZmVyLCAiUGhvbmVzIEdhaW4gOiAlc1xuIiwgdG1wKTsKIAotCQlzbmRfaXByaW50ZihidWZmZXIsICJYTFIgQnJlYWtvdXQgQ2FibGUgOiAlc1xuIiwgaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCkgPyAieWVzIiA6ICJubyIpOwkKLQkJCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlhMUiBCcmVha291dCBDYWJsZSA6ICVzXG4iLCBoZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKSA/ICJ5ZXMiIDogIm5vIik7CisKIAkJaWYgKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX0FuYWxvZ0V4dGVuc2lvbkJvYXJkKQogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiQUVCIDogb24gKEFEQVQxIGludGVybmFsKVxuIik7CiAJCWVsc2UKQEAgLTM2MzIsMTggKzM2NTMsMTggQEAKIAogCS8qIHNldCBkZWZhdWx0czoKIAotCSAgIFNQRElGIElucHV0IHZpYSBDb2F4IAorCSAgIFNQRElGIElucHV0IHZpYSBDb2F4CiAJICAgTWFzdGVyIGNsb2NrIG1vZGUKIAkgICBtYXhpbXVtIGxhdGVuY3kgKDcgPT4gMl43ID0gODE5MiBzYW1wbGVzLCA2NEtieXRlIGJ1ZmZlciwKIAkgICAgICAgICAgICAgICAgICAgIHdoaWNoIGltcGxpZXMgMiA0MDk2IHNhbXBsZSwgMzJLYnl0ZSBwZXJpb2RzKS4KLSAgICAgICAgICAgRW5hYmxlIGxpbmUgb3V0LgkJCSAgICAKKyAgICAgICAgICAgRW5hYmxlIGxpbmUgb3V0LgogCSAqLwogCi0JaGRzcC0+Y29udHJvbF9yZWdpc3RlciA9IEhEU1BfQ2xvY2tNb2RlTWFzdGVyIHwgCi0JCSAgICAgICAgICAgICAgICAgSERTUF9TUERJRklucHV0Q29heGlhbCB8IAotCQkgICAgICAgICAgICAgICAgIGhkc3BfZW5jb2RlX2xhdGVuY3koNykgfCAKKwloZHNwLT5jb250cm9sX3JlZ2lzdGVyID0gSERTUF9DbG9ja01vZGVNYXN0ZXIgfAorCQkgICAgICAgICAgICAgICAgIEhEU1BfU1BESUZJbnB1dENvYXhpYWwgfAorCQkgICAgICAgICAgICAgICAgIGhkc3BfZW5jb2RlX2xhdGVuY3koNykgfAogCQkgICAgICAgICAgICAgICAgIEhEU1BfTGluZU91dDsKLQkKKwogCiAJaGRzcF93cml0ZShoZHNwLCBIRFNQX2NvbnRyb2xSZWdpc3RlciwgaGRzcC0+Y29udHJvbF9yZWdpc3Rlcik7CiAKQEAgLTM2NjEsNyArMzY4Miw3IEBACiAJaGRzcF9jb21wdXRlX3BlcmlvZF9zaXplKGhkc3ApOwogCiAJLyogc2lsZW5jZSBldmVyeXRoaW5nICovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgSERTUF9NQVRSSVhfTUlYRVJfU0laRTsgKytpKQogCQloZHNwLT5taXhlcl9tYXRyaXhbaV0gPSBNSU5VU19JTkZJTklUWV9HQUlOOwogCkBAIC0zNjY5LDcgKzM2OTAsNyBAQAogCQlpZiAoaGRzcF93cml0ZV9nYWluIChoZHNwLCBpLCBNSU5VU19JTkZJTklUWV9HQUlOKSkKIAkJCXJldHVybiAtRUlPOwogCX0KLQkKKwogCS8qIEg5NjMyIHNwZWNpZmljIGRlZmF1bHRzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSAoSERTUF9EQUdhaW5QbHVzNGRCdSB8IEhEU1BfQURHYWluUGx1czRkQnUgfCBIRFNQX1Bob25lR2FpbjBkQik7CkBAIC0zNjg3LDEyICszNzA4LDEyIEBACiBzdGF0aWMgdm9pZCBoZHNwX21pZGlfdGFza2xldCh1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWFyZzsKLQkKKwogCWlmIChoZHNwLT5taWRpWzBdLnBlbmRpbmcpCiAJCXNuZF9oZHNwX21pZGlfaW5wdXRfcmVhZCAoJmhkc3AtPm1pZGlbMF0pOwogCWlmIChoZHNwLT5taWRpWzFdLnBlbmRpbmcpCiAJCXNuZF9oZHNwX21pZGlfaW5wdXRfcmVhZCAoJmhkc3AtPm1pZGlbMV0pOwotfSAKK30KIAogc3RhdGljIGlycXJldHVybl90IHNuZF9oZHNwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0zNzA0LDcgKzM3MjUsNyBAQAogCXVuc2lnbmVkIGludCBtaWRpMHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgbWlkaTFzdGF0dXM7CiAJaW50IHNjaGVkdWxlID0gMDsKLQkKKwogCXN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAogCWF1ZGlvID0gc3RhdHVzICYgSERTUF9hdWRpb0lSUVBlbmRpbmc7CkBAIC0zNzE4LDE1ICszNzM5LDE4IEBACiAKIAltaWRpMHN0YXR1cyA9IGhkc3BfcmVhZCAoaGRzcCwgSERTUF9taWRpU3RhdHVzSW4wKSAmIDB4ZmY7CiAJbWlkaTFzdGF0dXMgPSBoZHNwX3JlYWQgKGhkc3AsIEhEU1BfbWlkaVN0YXR1c0luMSkgJiAweGZmOwotCQorCisJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKIAlpZiAoYXVkaW8pIHsKIAkJaWYgKGhkc3AtPmNhcHR1cmVfc3Vic3RyZWFtKQogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChoZHNwLT5wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW0pOwotCQkKKwogCQlpZiAoaGRzcC0+cGxheWJhY2tfc3Vic3RyZWFtKQogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChoZHNwLT5wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtKTsKIAl9Ci0JCisKIAlpZiAobWlkaTAgJiYgbWlkaTBzdGF0dXMpIHsKIAkJaWYgKGhkc3AtPnVzZV9taWRpX3Rhc2tsZXQpIHsKIAkJCS8qIHdlIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBpbnB1dCB1bnRpbCBwcm9jZXNzaW5nIGlzIGRvbmUgKi8KQEAgLTM3NjksMTAgKzM3OTMsMTAgQEAKIAogICAgICAgICBpZiAoc25kX0JVR19PTihjaGFubmVsIDwgMCB8fCBjaGFubmVsID49IGhkc3AtPm1heF9jaGFubmVscykpCiAJCXJldHVybiBOVUxMOwotICAgICAgICAKKwogCWlmICgobWFwcGVkX2NoYW5uZWwgPSBoZHNwLT5jaGFubmVsX21hcFtjaGFubmVsXSkgPCAwKQogCQlyZXR1cm4gTlVMTDsKLQkKKwogCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQogCQlyZXR1cm4gaGRzcC0+Y2FwdHVyZV9idWZmZXIgKyAobWFwcGVkX2NoYW5uZWwgKiBIRFNQX0NIQU5ORUxfQlVGRkVSX0JZVEVTKTsKIAllbHNlCkBAIC0zOTY1LDcgKzM5ODksNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqb3RoZXI7CiAJaW50IHJ1bm5pbmc7Ci0JCisKIAlpZiAoaGRzcF9jaGVja19mb3JfaW9ib3ggKGhkc3ApKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNDA1OSwxMCArNDA4MywxMCBAQAogCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAogI2VuZGlmCiAJLnJhdGVzID0JCShTTkRSVl9QQ01fUkFURV8zMjAwMCB8Ci0JCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgCisJCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV82NDAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKIAkJCQkgU05EUlZfUENNX1JBVEVfOTYwMDApLAogCS5yYXRlX21pbiA9CQkzMjAwMCwKIAkucmF0ZV9tYXggPQkJOTYwMDAsCkBAIC00MDg4LDEwICs0MTEyLDEwIEBACiAJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAjZW5kaWYKIAkucmF0ZXMgPQkJKFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKLQkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfCAKKwkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfAogCQkJCSBTTkRSVl9QQ01fUkFURV85NjAwMCksCiAJLnJhdGVfbWluID0JCTMyMDAwLAogCS5yYXRlX21heCA9CQk5NjAwMCwKQEAgLTQxNzAsNyArNDE5NCw3IEBACiAJCQkubWF4ID0gaGRzcC0+cXNfaW5fY2hhbm5lbHMsCiAJCQkuaW50ZWdlciA9IDEsCiAJCX07Ci0JCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsJCisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKIAl9IGVsc2UgaWYgKHItPm1pbiA+IDQ4MDAwICYmIHItPm1heCA8PSA5NjAwMCkgewogCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CiAJCQkubWluID0gaGRzcC0+ZHNfaW5fY2hhbm5lbHMsCkBAIC00MjAxLDcgKzQyMjUsNyBAQAogCQkJLm1heCA9IGhkc3AtPnFzX291dF9jaGFubmVscywKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKLQkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwkKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwogCX0gZWxzZSBpZiAoci0+bWluID4gNDgwMDAgJiYgci0+bWF4IDw9IDk2MDAwKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMsCkBAIC00MzE4LDggKzQzNDIsOCBAQAogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSB7CiAJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiA9IGhkc3AtPnFzX291dF9jaGFubmVsczsKIAkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzOwotCX0JCi0JCisJfQorCiAJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCiAJCQkgICAgIHNuZF9oZHNwX2h3X3J1bGVfb3V0X2NoYW5uZWxzLCBoZHNwLAogCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKQEAgLTQ0MTMsMTMgKzQ0MzcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZHNwX2h3ZGVwX2R1bW15X29wKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiB3ZSBoYXZlIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZSBidXQgdGhlIGNhbGwgaXMgcmVxdWlyZWQgKi8KLQlyZXR1cm4gMDsKLX0KLQotCiAvKiBoZWxwZXIgZnVuY3Rpb25zIGZvciBjb3B5aW5nIG1ldGVyIHZhbHVlcyAqLwogc3RhdGljIGlubGluZSBpbnQgY29weV91MzJfbGUodm9pZCBfX3VzZXIgKmRlc3QsIHZvaWQgX19pb21lbSAqc3JjKQogewpAQCAtNDUzNiw3ICs0NTUzLDcgQEAKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX3BsYXliYWNrUm1zTGV2ZWwgKyBpICogOCArIDQsCiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9wbGF5YmFja1Jtc0xldmVsICsgaSAqIDgpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3U2NF9sZSgmcGVha19ybXMtPmlucHV0X3Jtc1tpXSwgCisJCWlmIChjb3B5X3U2NF9sZSgmcGVha19ybXMtPmlucHV0X3Jtc1tpXSwKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX2lucHV0Um1zTGV2ZWwgKyBpICogOCArIDQsCiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9pbnB1dFJtc0xldmVsICsgaSAqIDgpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NTQ2LDcgKzQ1NjMsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2h3ZGVwX2lvY3RsKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGhkc3AgKmhkc3AgPSAoc3RydWN0IGhkc3AgKilody0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWh3LT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVycjsKIApAQCAtNDU4MCw3ICs0NTk3LDcgQEAKIAkJc3RydWN0IGhkc3BfY29uZmlnX2luZm8gaW5mbzsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJaW50IGk7Ci0JCQorCiAJCWVyciA9IGhkc3BfY2hlY2tfZm9yX2lvYm94KGhkc3ApOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC00NjE0LDcgKzQ2MzEsNyBAQAogCQkJaW5mby5hZF9nYWluID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9hZF9nYWluKGhkc3ApOwogCQkJaW5mby5waG9uZV9nYWluID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9waG9uZV9nYWluKGhkc3ApOwogCQkJaW5mby54bHJfYnJlYWtvdXRfY2FibGUgPSAodW5zaWduZWQgY2hhciloZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKTsKLQkJCisKIAkJfQogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMiB8fCBoZHNwLT5pb190eXBlID09IEg5NjUyKQogCQkJaW5mby5hbmFsb2dfZXh0ZW5zaW9uX2JvYXJkID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9hZWIoaGRzcCk7CkBAIC00NjI1LDcgKzQ2NDIsNyBAQAogCX0KIAljYXNlIFNORFJWX0hEU1BfSU9DVExfR0VUXzk2MzJfQUVCOiB7CiAJCXN0cnVjdCBoZHNwXzk2MzJfYWViIGg5NjMyX2FlYjsKLQkJCisKIAkJaWYgKGhkc3AtPmlvX3R5cGUgIT0gSDk2MzIpIHJldHVybiAtRUlOVkFMOwogCQloOTYzMl9hZWIuYWViaSA9IGhkc3AtPnNzX2luX2NoYW5uZWxzIC0gSDk2MzJfU1NfQ0hBTk5FTFM7CiAJCWg5NjMyX2FlYi5hZWJvID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzIC0gSDk2MzJfU1NfQ0hBTk5FTFM7CkBAIC00NjM2LDcgKzQ2NTMsNyBAQAogCWNhc2UgU05EUlZfSERTUF9JT0NUTF9HRVRfVkVSU0lPTjogewogCQlzdHJ1Y3QgaGRzcF92ZXJzaW9uIGhkc3BfdmVyc2lvbjsKIAkJaW50IGVycjsKLQkJCisKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChoZHNwLT5pb190eXBlID09IFVuZGVmaW5lZCkgewogCQkJaWYgKChlcnIgPSBoZHNwX2dldF9pb2JveF92ZXJzaW9uKGhkc3ApKSA8IDApCkBAIC00NjUyLDcgKzQ2NjksNyBAQAogCQlzdHJ1Y3QgaGRzcF9maXJtd2FyZSBfX3VzZXIgKmZpcm13YXJlOwogCQl1MzIgX191c2VyICpmaXJtd2FyZV9kYXRhOwogCQlpbnQgZXJyOwotCQkKKwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gLUVJTlZBTDsKIAkJLyogU05EUlZfSERTUF9JT0NUTF9HRVRfVkVSU0lPTiBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgKi8KIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gVW5kZWZpbmVkKSByZXR1cm4gLUVJTlZBTDsKQEAgLTQ2NjUsMjUgKzQ2ODIsMjUgQEAKIAogCQlpZiAoZ2V0X3VzZXIoZmlybXdhcmVfZGF0YSwgJmZpcm13YXJlLT5maXJtd2FyZV9kYXRhKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQkKKwogCQlpZiAoaGRzcF9jaGVja19mb3JfaW9ib3ggKGhkc3ApKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGhkc3AtPmZpcm13YXJlX2NhY2hlLCBmaXJtd2FyZV9kYXRhLCBzaXplb2YoaGRzcC0+ZmlybXdhcmVfY2FjaGUpKSAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQorCiAJCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVDYWNoZWQ7CiAKIAkJaWYgKChlcnIgPSBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoaGRzcCkpIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCQorCiAJCWlmICghKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSkgewogCQkJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJCi0JCQlzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKGhkc3ApOwkJCisKKwkJCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CiAJCQlzbmRfaGRzcF9pbml0aWFsaXplX21pZGlfZmx1c2goaGRzcCk7Ci0JICAgIAorCiAJCQlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9hbHNhX2RldmljZXMoaGRzcC0+Y2FyZCwgaGRzcCkpIDwgMCkgewogCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBlcnJvciBjcmVhdGluZyBhbHNhIGRldmljZXNcbiIpOwogCQkJCXJldHVybiBlcnI7CkBAIC00NzMwLDE4ICs0NzQ3LDE2IEBACiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHc7CiAJaW50IGVycjsKLQkKKwogCWlmICgoZXJyID0gc25kX2h3ZGVwX25ldyhjYXJkLCAiSERTUCBod2RlcCIsIDAsICZodykpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkJCisKIAloZHNwLT5od2RlcCA9IGh3OwogCWh3LT5wcml2YXRlX2RhdGEgPSBoZHNwOwogCXN0cmNweShody0+bmFtZSwgIkhEU1AgaHdkZXAgaW50ZXJmYWNlIik7CiAKLQlody0+b3BzLm9wZW4gPSBzbmRfaGRzcF9od2RlcF9kdW1teV9vcDsKIAlody0+b3BzLmlvY3RsID0gc25kX2hkc3BfaHdkZXBfaW9jdGw7Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX2hkc3BfaHdkZXBfZHVtbXlfb3A7Ci0JCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NzQsMjQgKzQ3ODksMjQgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZW5hYmxlX2lvIChzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpbnQgaTsKLQkKKwogCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgMTAwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZW5hYmxlX2lvIGZpZm9fd2FpdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgaGRzcC0+bWF4X2NoYW5uZWxzOyArK2kpIHsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9pbnB1dEVuYWJsZSArICg0ICogaSksIDEpOwogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX291dHB1dEVuYWJsZSArICg0ICogaSksIDEpOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKHN0cnVjdCBoZHNwICpoZHNwKQogewogCWludCBzdGF0dXMsIGFlYmlfY2hhbm5lbHMsIGFlYm9fY2hhbm5lbHM7Ci0JCisKIAlzd2l0Y2ggKGhkc3AtPmlvX3R5cGUpIHsKIAljYXNlIERpZ2lmYWNlOgogCQloZHNwLT5jYXJkX25hbWUgPSAiUk1FIEhhbW1lcmZhbGwgRFNQICsgRGlnaWZhY2UiOwpAQCAtNDgwNCw3ICs0ODE5LDcgQEAKIAkJaGRzcC0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgPSBIOTY1Ml9TU19DSEFOTkVMUzsKIAkJaGRzcC0+ZHNfaW5fY2hhbm5lbHMgPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMgPSBIOTY1Ml9EU19DSEFOTkVMUzsKIAkJYnJlYWs7Ci0JCisKIAljYXNlIEg5NjMyOgogCQlzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJCS8qIEhEU1BfQUVCeCBiaXRzIGFyZSBsb3cgd2hlbiBBRUIgYXJlIGNvbm5lY3RlZCAqLwpAQCAtNDgyNCw3ICs0ODM5LDcgQEAKIAkJaGRzcC0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgPSBNVUxUSUZBQ0VfU1NfQ0hBTk5FTFM7CiAJCWhkc3AtPmRzX2luX2NoYW5uZWxzID0gaGRzcC0+ZHNfb3V0X2NoYW5uZWxzID0gTVVMVElGQUNFX0RTX0NIQU5ORUxTOwogCQlicmVhazsKLQkJCisKIAlkZWZhdWx0OgogIAkJLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCiAJCWJyZWFrOwpAQCAtNDg0MCwxMiArNDg1NSwxMiBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jcmVhdGVfYWxzYV9kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaW50IGVycjsKLQkKKwogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX3BjbShjYXJkLCBoZHNwKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBFcnJvciBjcmVhdGluZyBwY20gaW50ZXJmYWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JCisKIAogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX21pZGkoY2FyZCwgaGRzcCwgMCkpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogRXJyb3IgY3JlYXRpbmcgZmlyc3QgbWlkaSBpbnRlcmZhY2VcbiIpOwpAQCAtNDg3NiwxOSArNDg5MSwxOSBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogRXJyb3Igc2V0dGluZyBkZWZhdWx0IHZhbHVlc1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQotCQorCiAJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKSB7CiAJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIYW1tZXJmYWxsIERTUCIpOwotCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwgCisJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLAogCQkJaGRzcC0+cG9ydCwgaGRzcC0+aXJxKTsKLQkgICAgCisKIAkJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZXJyb3IgcmVnaXN0ZXJpbmcgY2FyZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWhkc3AtPnN0YXRlIHw9IEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZTsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg5OSw3ICs0OTE0LDcgQEAKIAljb25zdCBjaGFyICpmd2ZpbGU7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgZXJyOwotCQkKKwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCiAJCXJldHVybiAwOwogCWlmIChoZHNwLT5pb190eXBlID09IFVuZGVmaW5lZCkgewpAQCAtNDkwOCw3ICs0OTIzLDcgQEAKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKIAkJCXJldHVybiAwOwogCX0KLQkKKwogCS8qIGNhdXRpb246IG1heCBsZW5ndGggb2YgZmlybXdhcmUgZmlsZW5hbWUgaXMgMzAhICovCiAJc3dpdGNoIChoZHNwLT5pb190eXBlKSB7CiAJY2FzZSBNdWx0aWZhY2U6CkBAIC00OTQyLDEyICs0OTU3LDEyIEBACiAJbWVtY3B5KGhkc3AtPmZpcm13YXJlX2NhY2hlLCBmdy0+ZGF0YSwgc2l6ZW9mKGhkc3AtPmZpcm13YXJlX2NhY2hlKSk7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCisKIAloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlQ2FjaGVkOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkJCisKIAlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpIHsKIAkJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC00OTk0LDE0ICs1MDA5LDE0IEBACiAJaGRzcC0+bWF4X2NoYW5uZWxzID0gMjY7CiAKIAloZHNwLT5jYXJkID0gY2FyZDsKLQkKKwogCXNwaW5fbG9ja19pbml0KCZoZHNwLT5sb2NrKTsKIAogCXRhc2tsZXRfaW5pdCgmaGRzcC0+bWlkaV90YXNrbGV0LCBoZHNwX21pZGlfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpaGRzcCk7Ci0JCisKIAlwY2lfcmVhZF9jb25maWdfd29yZChoZHNwLT5wY2ksIFBDSV9DTEFTU19SRVZJU0lPTiwgJmhkc3AtPmZpcm13YXJlX3Jldik7CiAJaGRzcC0+ZmlybXdhcmVfcmV2ICY9IDB4ZmY7Ci0JCisKIAkvKiBGcm9tIE1hcnRpbiBCam9lcm5zZW4gOgogCSAgICAiSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGNhcmQncyBsYXRlbmN5IHRpbWVyIHJlZ2lzdGVyIGluCiAJICAgIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBzZXQgdG8gYSB2YWx1ZSBtdWNoIGxhcmdlcgpAQCAtNTAxMCw3ICs1MDI1LDcgQEAKIAkgICAgdG8gaXRzIG1heGltdW0gMjU1IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc29tZSBjb21wdXRlcnMuIgogCSovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhkc3AtPnBjaSwgUENJX0xBVEVOQ1lfVElNRVIsIDB4RkYpOwotCQorCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkgtRFNQIik7CiAJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlhpbGlueCBGUEdBIik7CiAKQEAgLTUwMjQsNyArNTAzOSw3IEBACiAJfSBlbHNlIHsKIAkJaGRzcC0+Y2FyZF9uYW1lID0gIlJNRSBIRFNQIDk2MzIiOwogCQloZHNwLT5tYXhfY2hhbm5lbHMgPSAxNjsKLQkJaXNfOTYzMiA9IDE7CQorCQlpc185NjMyID0gMTsKIAl9CiAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKQEAgLTUwNTMsMTIgKzUwNjgsMTIgQEAKIAogCWlmICgoZXJyID0gc25kX2hkc3BfaW5pdGlhbGl6ZV9tZW1vcnkoaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKLQlpZiAoIWlzXzk2NTIgJiYgIWlzXzk2MzIpIHsKLQkJLyogd2Ugd2FpdCAyIHNlY29uZHMgdG8gbGV0IGZyZXNobHkgaW5zZXJ0ZWQgY2FyZGJ1cyBjYXJkcyBkbyB0aGVpciBoYXJkd2FyZSBpbml0ICovCi0JCXNzbGVlcCgyKTsKIAotCQllcnIgPSBoZHNwX2NoZWNrX2Zvcl9pb2JveChoZHNwKTsKKwlpZiAoIWlzXzk2NTIgJiYgIWlzXzk2MzIpIHsKKwkJLyogd2Ugd2FpdCBhIG1heGltdW0gb2YgMTAgc2Vjb25kcyB0byBsZXQgZnJlc2hseQorCQkgKiBpbnNlcnRlZCBjYXJkYnVzIGNhcmRzIGRvIHRoZWlyIGhhcmR3YXJlIGluaXQgKi8KKwkJZXJyID0gaGRzcF93YWl0X2Zvcl9pb2JveChoZHNwLCAxMDAwLCAxMCk7CisKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCkBAIC01MDgwLDM1ICs1MDk1LDM1IEBACiAJCQkJcmV0dXJuIGVycjsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UgewotCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBGaXJtd2FyZSBhbHJlYWR5IHByZXNlbnQsIGluaXRpYWxpemluZyBjYXJkLlxuIik7CSAgICAKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRmlybXdhcmUgYWxyZWFkeSBwcmVzZW50LCBpbml0aWFsaXppbmcgY2FyZC5cbiIpOwogCQkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3RlcikgJiBIRFNQX3ZlcnNpb24xKQogCQkJCWhkc3AtPmlvX3R5cGUgPSBNdWx0aWZhY2U7Ci0JCQllbHNlIAorCQkJZWxzZQogCQkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKIAkJfQogCX0KLQkKKwogCWlmICgoZXJyID0gc25kX2hkc3BfZW5hYmxlX2lvKGhkc3ApKSAhPSAwKQogCQlyZXR1cm4gZXJyOwotCQorCiAJaWYgKGlzXzk2NTIpCiAJICAgICAgICBoZHNwLT5pb190eXBlID0gSDk2NTI7Ci0JCisKIAlpZiAoaXNfOTYzMikKIAkJaGRzcC0+aW9fdHlwZSA9IEg5NjMyOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfaHdkZXAoY2FyZCwgaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKKwogCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CiAJc25kX2hkc3BfaW5pdGlhbGl6ZV9taWRpX2ZsdXNoKGhkc3ApOwogCi0JaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUxvYWRlZDsJCisJaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUxvYWRlZDsKIAogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX2Fsc2FfZGV2aWNlcyhjYXJkLCBoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2ZyZWUoc3RydWN0IGhkc3AgKmhkc3ApCkBAIC01MTI0LDEzICs1MTM5LDEzIEBACiAJCWZyZWVfaXJxKGhkc3AtPmlycSwgKHZvaWQgKiloZHNwKTsKIAogCXNuZF9oZHNwX2ZyZWVfYnVmZmVycyhoZHNwKTsKLQkKKwogCWlmIChoZHNwLT5pb2Jhc2UpCiAJCWlvdW5tYXAoaGRzcC0+aW9iYXNlKTsKIAogCWlmIChoZHNwLT5wb3J0KQogCQlwY2lfcmVsZWFzZV9yZWdpb25zKGhkc3AtPnBjaSk7Ci0JCQorCiAJcGNpX2Rpc2FibGVfZGV2aWNlKGhkc3AtPnBjaSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MTU4LDggKzUxNzMsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JaWYgKCEoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwKSkpKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGhkc3ApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAloZHNwID0gKHN0cnVjdCBoZHNwICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfaGRzcF9jYXJkX2ZyZWU7CkBAIC01MTczLDcgKzUxOTAsNyBAQAogCX0KIAogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIYW1tZXJmYWxsIERTUCIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLCAKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwKIAkJaGRzcC0+cG9ydCwgaGRzcC0+aXJxKTsKIAogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggNzEyMzFjZi4uYmFjMmRjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC00MTAwLDEzICs0MTAwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3Aoc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiB3ZSBoYXZlIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZSBidXQgdGhlIGNhbGwgaXMgcmVxdWlyZWQgKi8KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9od2RlcF9pb2N0bChzdHJ1Y3Qgc25kX2h3ZGVwICogaHcsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTQyMTMsOSArNDIwNiw3IEBACiAJaHctPnByaXZhdGVfZGF0YSA9IGhkc3BtOwogCXN0cmNweShody0+bmFtZSwgIkhEU1BNIGh3ZGVwIGludGVyZmFjZSIpOwogCi0JaHctPm9wcy5vcGVuID0gc25kX2hkc3BtX2h3ZGVwX2R1bW15X29wOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfaGRzcG1faHdkZXBfaW9jdGw7Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX2hkc3BtX2h3ZGVwX2R1bW15X29wOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTAzLDEwICs0NDk0LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwKLQkJCSAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwbSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sCisJCQkgICAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwbSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWhkc3BtID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9oZHNwbV9jYXJkX2ZyZWU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKaW5kZXggMjU3MDkwNy4uYmM1MzlhYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwpAQCAtMjU5NCwxMSArMjU5NCwxMSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX3JtZTk2NTIpKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9ybWU5NjUyKSwgJmNhcmQpOwogCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXJtZTk2NTIgPSAoc3RydWN0IHNuZF9ybWU5NjUyICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfcm1lOTY1Ml9jYXJkX2ZyZWU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCBkZjIwMDdlLi5iYWY2ZDhlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTEzODcsOSArMTM4Nyw4IEBACiAJaWYgKCFlbmFibGUpCiAJCWdvdG8gZXJyb3Jfb3V0OwogCi0JcmMgPSAtRU5PTUVNOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCpzaXMpKTsKLQlpZiAoIWNhcmQpCisJcmMgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCpzaXMpLCAmY2FyZCk7CisJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU2lTNzAxOSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3NvbmljdmliZXMuYyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKaW5kZXggY2Q0MDhiOC4uZDk4OTIxNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3NvbmljdmliZXMuYworKysgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCkBAIC0yNzMsNyArMjczLDggQEAKIAlvdXRsKGNvdW50LCBzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX0NPVU5UMCk7CiAJb3V0YigweDE4LCBzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX01PREUpOwogI2lmIDAKLQlwcmludGsoInByb2dyYW0gZG1hYTogYWRkciA9IDB4JXgsIHBhZGRyID0gMHgleFxuIiwgYWRkciwgaW5sKHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfQUREUjApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicHJvZ3JhbSBkbWFhOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLAorCSAgICAgICBhZGRyLCBpbmwoc29uaWMtPmRtYWFfcG9ydCArIFNWX0RNQV9BRERSMCkpOwogI2VuZGlmCiB9CiAKQEAgLTI4OCw3ICsyODksOCBAQAogCW91dGwoY291bnQsIHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfQ09VTlQwKTsKIAlvdXRiKDB4MTQsIHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfTU9ERSk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWFjOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLCBhZGRyLCBpbmwoc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9BRERSMCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwcm9ncmFtIGRtYWM6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsCisJICAgICAgIGFkZHIsIGlubChzb25pYy0+ZG1hY19wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CiAjZW5kaWYKIH0KIApAQCAtMzU1LDcxICszNTcsMTA0IEBACiAjaWYgMAogc3RhdGljIHZvaWQgc25kX3NvbmljdmliZXNfZGVidWcoc3RydWN0IHNvbmljdmliZXMgKiBzb25pYykKIHsKLQlwcmludGsoIlNWIFJFR1M6ICAgICAgICAgIElOREVYID0gMHglMDJ4ICAiLCBpbmIoU1ZfUkVHKHNvbmljLCBJTkRFWCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiU1YgUkVHUzogICAgICAgICAgSU5ERVggPSAweCUwMnggICIsIGluYihTVl9SRUcoc29uaWMsIElOREVYKSkpOwogCXByaW50aygiICAgICAgICAgICAgICAgICBTVEFUVVMgPSAweCUwMnhcbiIsIGluYihTVl9SRUcoc29uaWMsIFNUQVRVUykpKTsKLQlwcmludGsoIiAgMHgwMDogbGVmdCBpbnB1dCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDA6IGxlZnQgaW5wdXQgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDApKTsKIAlwcmludGsoIiAgMHgyMDogc3ludGggcmF0ZSBsb3cgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMCkpOwotCXByaW50aygiICAweDAxOiByaWdodCBpbnB1dCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAxKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMTogcmlnaHQgaW5wdXQgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMSkpOwogCXByaW50aygiICAweDIxOiBzeW50aCByYXRlIGhpZ2ggPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIxKSk7Ci0JcHJpbnRrKCIgIDB4MDI6IGxlZnQgQVVYMSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDAyOiBsZWZ0IEFVWDEgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAyKSk7CiAJcHJpbnRrKCIgIDB4MjI6IEFEQyBjbG9jayAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjIpKTsKLQlwcmludGsoIiAgMHgwMzogcmlnaHQgQVVYMSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDM6IHJpZ2h0IEFVWDEgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDMpKTsKIAlwcmludGsoIiAgMHgyMzogQURDIGFsdCByYXRlICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMykpOwotCXByaW50aygiICAweDA0OiBsZWZ0IENEICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNDogbGVmdCBDRCAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNCkpOwogCXByaW50aygiICAweDI0OiBBREMgcGxsIE0gICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI0KSk7Ci0JcHJpbnRrKCIgIDB4MDU6IHJpZ2h0IENEICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA1OiByaWdodCBDRCAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA1KSk7CiAJcHJpbnRrKCIgIDB4MjU6IEFEQyBwbGwgTiAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjUpKTsKLQlwcmludGsoIiAgMHgwNjogbGVmdCBsaW5lICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDY6IGxlZnQgbGluZSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDYpKTsKIAlwcmludGsoIiAgMHgyNjogU3ludGggcGxsIE0gICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyNikpOwotCXByaW50aygiICAweDA3OiByaWdodCBsaW5lICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA3KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNzogcmlnaHQgbGluZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNykpOwogCXByaW50aygiICAweDI3OiBTeW50aCBwbGwgTiAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI3KSk7Ci0JcHJpbnRrKCIgIDB4MDg6IE1JQyAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDgpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA4OiBNSUMgICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA4KSk7CiAJcHJpbnRrKCIgIDB4Mjg6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjgpKTsKLQlwcmludGsoIiAgMHgwOTogR2FtZSBwb3J0ICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDk6IEdhbWUgcG9ydCAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDkpKTsKIAlwcmludGsoIiAgMHgyOTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyOSkpOwotCXByaW50aygiICAweDBhOiBsZWZ0IHN5bnRoICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBhKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwYTogbGVmdCBzeW50aCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYSkpOwogCXByaW50aygiICAweDJhOiBNUFU0MDEgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJhKSk7Ci0JcHJpbnRrKCIgIDB4MGI6IHJpZ2h0IHN5bnRoICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBiOiByaWdodCBzeW50aCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBiKSk7CiAJcHJpbnRrKCIgIDB4MmI6IGRyaXZlIGN0cmwgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmIpKTsKLQlwcmludGsoIiAgMHgwYzogbGVmdCBBVVgyICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGM6IGxlZnQgQVVYMiAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGMpKTsKIAlwcmludGsoIiAgMHgyYzogU1JTIHNwYWNlICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyYykpOwotCXByaW50aygiICAweDBkOiByaWdodCBBVVgyICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBkKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwZDogcmlnaHQgQVVYMiAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZCkpOwogCXByaW50aygiICAweDJkOiBTUlMgY2VudGVyICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJkKSk7Ci0JcHJpbnRrKCIgIDB4MGU6IGxlZnQgYW5hbG9nICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBlOiBsZWZ0IGFuYWxvZyAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBlKSk7CiAJcHJpbnRrKCIgIDB4MmU6IHdhdmUgc291cmNlICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmUpKTsKLQlwcmludGsoIiAgMHgwZjogcmlnaHQgYW5hbG9nICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGY6IHJpZ2h0IGFuYWxvZyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGYpKTsKIAlwcmludGsoIiAgMHgyZjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyZikpOwotCXByaW50aygiICAweDEwOiBsZWZ0IFBDTSAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMDogbGVmdCBQQ00gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMCkpOwogCXByaW50aygiICAweDMwOiBhbmFsb2cgcG93ZXIgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMwKSk7Ci0JcHJpbnRrKCIgIDB4MTE6IHJpZ2h0IFBDTSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDExOiByaWdodCBQQ00gICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDExKSk7CiAJcHJpbnRrKCIgIDB4MzE6IGFuYWxvZyBwb3dlciAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzEpKTsKLQlwcmludGsoIiAgMHgxMjogRE1BIGRhdGEgZm9ybWF0ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTI6IERNQSBkYXRhIGZvcm1hdCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTIpKTsKIAlwcmludGsoIiAgMHgzMjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzMikpOwotCXByaW50aygiICAweDEzOiBQL0MgZW5hYmxlICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEzKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMzogUC9DIGVuYWJsZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMykpOwogCXByaW50aygiICAweDMzOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMzKSk7Ci0JcHJpbnRrKCIgIDB4MTQ6IFUvRCBidXR0b24gICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE0OiBVL0QgYnV0dG9uICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE0KSk7CiAJcHJpbnRrKCIgIDB4MzQ6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzQpKTsKLQlwcmludGsoIiAgMHgxNTogcmV2aXNpb24gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTU6IHJldmlzaW9uICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTUpKTsKIAlwcmludGsoIiAgMHgzNTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNSkpOwotCXByaW50aygiICAweDE2OiBBREMgb3V0cHV0IGN0cmwgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxNjogQURDIG91dHB1dCBjdHJsID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNikpOwogCXByaW50aygiICAweDM2OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM2KSk7Ci0JcHJpbnRrKCIgIDB4MTc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTcpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE3OiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE3KSk7CiAJcHJpbnRrKCIgIDB4Mzc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzcpKTsKLQlwcmludGsoIiAgMHgxODogRE1BIEEgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTg6IERNQSBBIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTgpKTsKIAlwcmludGsoIiAgMHgzODogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzOCkpOwotCXByaW50aygiICAweDE5OiBETUEgQSBsb3dlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE5KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxOTogRE1BIEEgbG93ZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOSkpOwogCXByaW50aygiICAweDM5OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM5KSk7Ci0JcHJpbnRrKCIgIDB4MWE6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFhOiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFhKSk7CiAJcHJpbnRrKCIgIDB4M2E6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2EpKTsKLQlwcmludGsoIiAgMHgxYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWI6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWIpKTsKIAlwcmludGsoIiAgMHgzYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzYikpOwotCXByaW50aygiICAweDFjOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFjKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxYzogRE1BIEMgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYykpOwogCXByaW50aygiICAweDNjOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNjKSk7Ci0JcHJpbnRrKCIgIDB4MWQ6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFkOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFkKSk7CiAJcHJpbnRrKCIgIDB4M2Q6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2QpKTsKLQlwcmludGsoIiAgMHgxZTogUENNIHJhdGUgbG93ICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWU6IFBDTSByYXRlIGxvdyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWUpKTsKIAlwcmludGsoIiAgMHgzZTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzZSkpOwotCXByaW50aygiICAweDFmOiBQQ00gcmF0ZSBoaWdoICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFmKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxZjogUENNIHJhdGUgaGlnaCAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZikpOwogCXByaW50aygiICAweDNmOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNmKSk7CiB9CiAKQEAgLTQ3Niw4ICs1MTEsOCBAQAogCSpyZXNfbSA9IG07CiAJKnJlc19uID0gbjsKICNpZiAwCi0JcHJpbnRrKCJtZXRyaWMgPSAlaSwgeG0gPSAlaSwgeG4gPSAlaVxuIiwgbWV0cmljLCB4bSwgeG4pOwotCXByaW50aygicGxsOiBtID0gMHgleCwgciA9IDB4JXgsIG4gPSAweCV4XG4iLCByZWcsIG0sIHIsIG4pOworCXByaW50ayhLRVJOX0RFQlVHICJtZXRyaWMgPSAlaSwgeG0gPSAlaSwgeG4gPSAlaVxuIiwgbWV0cmljLCB4bSwgeG4pOworCXByaW50ayhLRVJOX0RFQlVHICJwbGw6IG0gPSAweCV4LCByID0gMHgleCwgbiA9IDB4JXhcbiIsIHJlZywgbSwgciwgbik7CiAjZW5kaWYKIH0KIApAQCAtMTQyMyw5ICsxNDU4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgNTsgaWR4KyspIHsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIGlkeCkgPT0gMCB8fAogCQkgICAgIShwY2lfcmVzb3VyY2VfZmxhZ3MocGNpLCBpZHgpICYgSU9SRVNPVVJDRV9JTykpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCBkOTRiMTZmLi4yMWNlZjk3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC04OSw5ICs4OSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfdHJpZGVudF9jcmVhdGUoY2FyZCwgcGNpLAogCQkJCSAgICAgIHBjbV9jaGFubmVsc1tkZXZdLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwppbmRleCBjNjEyYjQzLi5hOWRhOWMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwpAQCAtNjgsNDAgKzY4LDQwIEBACiB7CiAJdW5zaWduZWQgaW50IHZhbCwgdG1wOwogCi0JcHJpbnRrKCJUcmlkZW50IHZvaWNlICVpOlxuIiwgdm9pY2UpOworCXByaW50ayhLRVJOX0RFQlVHICJUcmlkZW50IHZvaWNlICVpOlxuIiwgdm9pY2UpOwogCW91dGIodm9pY2UsIFRSSURfUkVHKHRyaWRlbnQsIFQ0RF9MRk9fR0NfQ0lSKSk7CiAJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0xCQSkpOwotCXByaW50aygiTEJBOiAweCV4XG4iLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICJMQkE6IDB4JXhcbiIsIHZhbCk7CiAJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0dWU0VMX1BBTl9WT0xfQ1RSTF9FQykpOwotCXByaW50aygiR1ZTZWw6ICVpXG4iLCB2YWwgPj4gMzEpOwotCXByaW50aygiUGFuOiAweCV4XG4iLCAodmFsID4+IDI0KSAmIDB4N2YpOwotCXByaW50aygiVm9sOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4ZmYpOwotCXByaW50aygiQ1RSTDogMHgleFxuIiwgKHZhbCA+PiAxMikgJiAweDBmKTsKLQlwcmludGsoIkVDOiAweCV4XG4iLCB2YWwgJiAweDBmZmYpOworCXByaW50ayhLRVJOX0RFQlVHICJHVlNlbDogJWlcbiIsIHZhbCA+PiAzMSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBhbjogMHgleFxuIiwgKHZhbCA+PiAyNCkgJiAweDdmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVm9sOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4ZmYpOworCXByaW50ayhLRVJOX0RFQlVHICJDVFJMOiAweCV4XG4iLCAodmFsID4+IDEyKSAmIDB4MGYpOworCXByaW50ayhLRVJOX0RFQlVHICJFQzogMHgleFxuIiwgdmFsICYgMHgwZmZmKTsKIAlpZiAodHJpZGVudC0+ZGV2aWNlICE9IFRSSURFTlRfREVWSUNFX0lEX05YKSB7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9EWF9DU09fQUxQSEFfRk1TKSk7Ci0JCXByaW50aygiQ1NPOiAweCV4XG4iLCB2YWwgPj4gMTYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ1NPOiAweCV4XG4iLCB2YWwgPj4gMTYpOwogCQlwcmludGsoIkFscGhhOiAweCV4XG4iLCAodmFsID4+IDQpICYgMHgwZmZmKTsKLQkJcHJpbnRrKCJGTVM6IDB4JXhcbiIsIHZhbCAmIDB4MGYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRk1TOiAweCV4XG4iLCB2YWwgJiAweDBmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0RYX0VTT19ERUxUQSkpOwotCQlwcmludGsoIkVTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKLQkJcHJpbnRrKCJEZWx0YTogMHgleFxuIiwgdmFsICYgMHhmZmZmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkVTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRlbHRhOiAweCV4XG4iLCB2YWwgJiAweGZmZmYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfRFhfRk1DX1JWT0xfQ1ZPTCkpOwogCX0gZWxzZSB7CQkvLyBUUklERU5UX0RFVklDRV9JRF9OWAogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTlhfREVMVEFfQ1NPKSk7CiAJCXRtcCA9ICh2YWwgPj4gMjQpICYgMHhmZjsKLQkJcHJpbnRrKCJDU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ1NPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX05YX0RFTFRBX0VTTykpOwogCQl0bXAgfD0gKHZhbCA+PiAxNikgJiAweGZmMDA7Ci0JCXByaW50aygiRGVsdGE6IDB4JXhcbiIsIHRtcCk7Ci0JCXByaW50aygiRVNPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRlbHRhOiAweCV4XG4iLCB0bXApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRVNPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX05YX0FMUEhBX0ZNU19GTUNfUlZPTF9DVk9MKSk7Ci0JCXByaW50aygiQWxwaGE6IDB4JXhcbiIsIHZhbCA+PiAyMCk7Ci0JCXByaW50aygiRk1TOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4MGYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQWxwaGE6IDB4JXhcbiIsIHZhbCA+PiAyMCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJGTVM6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHgwZik7CiAJfQotCXByaW50aygiRk1DOiAweCV4XG4iLCAodmFsID4+IDE0KSAmIDMpOwotCXByaW50aygiUlZvbDogMHgleFxuIiwgKHZhbCA+PiA3KSAmIDB4N2YpOwotCXByaW50aygiQ1ZvbDogMHgleFxuIiwgdmFsICYgMHg3Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkZNQzogMHgleFxuIiwgKHZhbCA+PiAxNCkgJiAzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUlZvbDogMHgleFxuIiwgKHZhbCA+PiA3KSAmIDB4N2YpOworCXByaW50ayhLRVJOX0RFQlVHICJDVm9sOiAweCV4XG4iLCB2YWwgJiAweDdmKTsKIH0KICNlbmRpZgogCkBAIC00OTYsMTIgKzQ5NiwxNyBAQAogCW91dGwocmVnc1s0XSwgVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpOwogCiAjaWYgMAotCXByaW50aygid3JpdHRlbiAlaSBjaGFubmVsOlxuIiwgdm9pY2UtPm51bWJlcik7Ci0JcHJpbnRrKCIgIHJlZ3NbMF0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMF0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDApKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbMV0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMV0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDQpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbMl0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMl0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDgpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbM10gPSAweCV4LzB4JXhcbiIsIHJlZ3NbM10sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDEyKSkpOwotCXByaW50aygiICByZWdzWzRdID0gMHgleC8weCV4XG4iLCByZWdzWzRdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAid3JpdHRlbiAlaSBjaGFubmVsOlxuIiwgdm9pY2UtPm51bWJlcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1swXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1swXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzFdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzFdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyA0KSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbMl0gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbMl0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDgpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1szXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1szXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTIpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1s0XSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1s0XSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTYpKSk7CiAjZW5kaWYKIH0KIApAQCAtNTgzLDcgKzU4OCw3IEBACiAJCW91dGIodm9pY2UtPlZvbCA+PiAyLCBUUklEX1JFRyh0cmlkZW50LCBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMgKyAyKSk7CiAJCWJyZWFrOwogCWNhc2UgVFJJREVOVF9ERVZJQ0VfSURfU0k3MDE4OgotCQkvLyBwcmludGsoInZvaWNlLT5Wb2wgPSAweCV4XG4iLCB2b2ljZS0+Vm9sKTsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgInZvaWNlLT5Wb2wgPSAweCV4XG4iLCB2b2ljZS0+Vm9sKTsgKi8KIAkJb3V0dygodm9pY2UtPkNUUkwgPDwgMTIpIHwgdm9pY2UtPlZvbCwKIAkJICAgICBUUklEX1JFRyh0cmlkZW50LCBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMpKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCAxYWFmZTk1Li44MDliMjMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTQ2Niw3ICs0NjYsMTAgQEAKIAkJCQkJZmxhZyA9IFZJQV9UQkxfQklUX0ZMQUc7IC8qIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJfSBlbHNlCiAJCQkJZmxhZyA9IDA7IC8qIHBlcmlvZCBjb250aW51ZXMgdG8gdGhlIG5leHQgKi8KLQkJCS8vIHByaW50aygidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkIChyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgIgorCQkJICAgICAgICIocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCSovCiAJCQkoKHUzMiAqKWRldi0+dGFibGUuYXJlYSlbKGlkeDw8MSkgKyAxXSA9IGNwdV90b19sZTMyKHIgfCBmbGFnKTsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0ub2Zmc2V0ID0gb2ZzOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5zaXplID0gcjsKQEAgLTIzNjAsMTQgKzIzNjMsMTQgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwOTk2LCAiRVNDIE1vYm8iLCBWSUFfRFhTXzQ4SyksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4MGE4MSwgIkVDUyBLN1ZUQTMgdjguMCIsIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwYTg1LCAiRUNTIEw3Vk1NMiIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMCwgIkVTQyBLOCIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwMTksICJFU0MgSzgiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4YWEwMSwgIkVTQyBLOFQ4OTAtQSIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDMzLCAiQWNlciBJbnNwaXJlIDEzNTNMTSIsIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDQ2LCAiQWNlciBBc3BpcmUgMTUyNCBXTE1pIiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAwLCAiQVNVUyBBNy9BOCIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA3MSwgMCwgIkRpdmVyc2UgTm90ZWJvb2siLCBWSUFfRFhTX05PX1ZSQSksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDQzLCAiQVNVUyBBNy9BOCIsIFZJQV9EWFNfTk9fVlJBKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNzEsICJEaXZlcnNlIE5vdGVib29rIiwgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDExOGUsICJGU0MgTGFwdG9wIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxMTA2LCAwLCAiQVNSb2NrIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTEwNiwgIkFTUm9jayIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTI5NywgMHhhMjMxLCAiU2h1dHRsZSBBSzMxdjIiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEyOTcsIDB4YTIzMiwgIlNodXR0bGUiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEyOTcsIDB4YzE2MCwgIlNodXR0bGUgU2s0MUciLCBWSUFfRFhTX1NSQyksCkBAIC0yMzc1LDcgKzIzNzgsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDM4MDAsICJNU0kgS1QyNjYiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NzEyMCwgIk1TSSBLVDRWIiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDcxNDIsICJNU0kgSzhNTS1WIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAwLCAiTVNJIE1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNDYyLCAiTVNJIE1vYm8iLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTQwMSwgIkFCSVQgS0Q3KC1SQUlEKSIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDExLCAiQUJJVCBWQS0yMCIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDEzLCAiQUJJVCBLVjggUHJvIiwgVklBX0RYU19FTkFCTEUpLApAQCAtMjM4OSwxMSArMjM5MiwxMSBAQAogCVNORF9QQ0lfUVVJUksoMHgxNjFmLCAweDIwMzIsICJtNjgweCBtYWNoaW5lcyIsIFZJQV9EWFNfNDhLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhlMDA0LCAiUEIgRWFzeU5vdGUgMzE3NCIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTY5NSwgMHgzMDA1LCAiRVBvWCBFUC04SzlBIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxNjk1LCAwLCAiRVBvWCBtb2JvIiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxNmYzLCAwLCAiSmV0d2F5IEs4IiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAwLCAiRlNDIExhcHRvcCIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE2OTUsICJFUG9YIG1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNmYzLCAiSmV0d2F5IEs4IiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTczNCwgIkZTQyBMYXB0b3AiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MzA1OSwgIkFTUm9jayBLN1ZNMiIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMCwgIkFTUm9jayBtb2JvIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTg0OSwgIkFTUm9jayBtb2JvIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxOTE5LCAweDIwMGEsICJTb2x0ZWsgU0wtSzgiLCAgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHg0MDA1LCAweDQ3MTAsICJNU0kgSzdUMjY2IiwgVklBX0RYU19TUkMpLAogCXsgfSAvKiB0ZXJtaW5hdG9yICovCkBAIC0yNDMzLDkgKzI0MzYsOSBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOwogCXN3aXRjaCAoY2FyZF90eXBlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA1YmQ3OWQyLi4wZDU0ZTM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKQEAgLTMyOCw3ICszMjgsMTAgQEAKIAkJCQkJZmxhZyA9IFZJQV9UQkxfQklUX0ZMQUc7IC8qIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJfSBlbHNlCiAJCQkJZmxhZyA9IDA7IC8qIHBlcmlvZCBjb250aW51ZXMgdG8gdGhlIG5leHQgKi8KLQkJCS8vIHByaW50aygidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkIChyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgIgorCQkJICAgICAgICIocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCSovCiAJCQkoKHUzMiAqKWRldi0+dGFibGUuYXJlYSlbKGlkeDw8MSkgKyAxXSA9IGNwdV90b19sZTMyKHIgfCBmbGFnKTsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0ub2Zmc2V0ID0gb2ZzOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5zaXplID0gcjsKQEAgLTExNjcsOSArMTE3MCw5IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNhcmRfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAJc3dpdGNoIChjYXJkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggYWNjMzUyZi4uZmM5MTM2YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTIwNCw5ICsyMDQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAoKGludClwY2lfaWQtPmRyaXZlcl9kYXRhKSB7CiAJY2FzZSBWWF9QQ0lfVlgyMjJfT0xEOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCmluZGV4IDdlODdmMzkuLmMwZWZlNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKQEAgLTEwNyw3ICsxMDcsOSBAQAogc3RhdGljIHZvaWQgdngyX291dGIoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgdmFsKQogewogCW91dGIodmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7Ci0JLy9wcmludGsoIm91dGI6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJvdXRiOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJKi8KIH0KIAogLyoqCkBAIC0xMjYsNyArMTI4LDkgQEAKICAqLwogc3RhdGljIHZvaWQgdngyX291dGwoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCB2YWwpCiB7Ci0JLy8gcHJpbnRrKCJvdXRsOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAib3V0bDogJXggLT4gJXhcbiIsIHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOworCSovCiAJb3V0bCh2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKaW5kZXggMjYzMWE1NS4uNGFmNjY2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCkBAIC0xODcsOSArMTg3LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaV9pZC0+ZGV2aWNlKSB7CiAJY2FzZSAweDAwMDQ6IHN0ciA9ICJZTUY3MjQiOyAgbW9kZWwgPSAiRFMtMSI7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCmluZGV4IDkwZDBkNjIuLjJmMDkyNTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKQEAgLTMxOCw3ICszMTgsMTIgQEAKIAkJeXBjbS0+cGVyaW9kX3BvcyArPSBkZWx0YTsKIAkJeXBjbS0+bGFzdF9wb3MgPSBwb3M7CiAJCWlmICh5cGNtLT5wZXJpb2RfcG9zID49IHlwY20tPnBlcmlvZF9zaXplKSB7Ci0JCQkvLyBwcmludGsoImRvbmUgLSBhY3RpdmVfYmFuayA9IDB4JXgsIHN0YXJ0ID0gMHgleFxuIiwgY2hpcC0+YWN0aXZlX2JhbmssIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLAorCQkJICAgICAgIGNoaXAtPmFjdGl2ZV9iYW5rLAorCQkJICAgICAgIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkqLwogCQkJeXBjbS0+cGVyaW9kX3BvcyAlPSB5cGNtLT5wZXJpb2Rfc2l6ZTsKIAkJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHlwY20tPnN1YnN0cmVhbSk7CkBAIC0zNjYsNyArMzcxLDEyIEBACiAJCXlwY20tPmxhc3RfcG9zID0gcG9zOwogCQlpZiAoeXBjbS0+cGVyaW9kX3BvcyA+PSB5cGNtLT5wZXJpb2Rfc2l6ZSkgewogCQkJeXBjbS0+cGVyaW9kX3BvcyAlPSB5cGNtLT5wZXJpb2Rfc2l6ZTsKLQkJCS8vIHByaW50aygiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLCBjaGlwLT5hY3RpdmVfYmFuaywgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsCisJCQkgICAgICAgY2hpcC0+YWN0aXZlX2JhbmssCisJCQkgICAgICAgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCSovCiAJCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCQkJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwppbmRleCA4MTlhYWFhLi43ZGVhNzRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKQEAgLTkxLDcgKzkxLDcgQEAKICAqLwogc3RhdGljIGludCBzbmRfcGRhY2ZfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAlzdHJ1Y3Qgc25kX3BkYWNmICpwZGFjZjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CkBAIC0xMTIsMjAgKzExMiwyMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsgLyogZGlzYWJsZWQgZXhwbGljaXRseSAqLwogCiAJLyogb2ssIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInBkYWNmOiBjYW5ub3QgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXBkYWNmID0gc25kX3BkYWNmX2NyZWF0ZShjYXJkKTsKLQlpZiAoISBwZGFjZikKLQkJcmV0dXJuIC1FSU87CisJaWYgKCFwZGFjZikgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQlpZiAoc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBwZGFjZiwgJm9wcykgPCAwKSB7CisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBwZGFjZiwgJm9wcyk7CisJaWYgKGVyciA8IDApIHsKIAkJa2ZyZWUocGRhY2YpOwogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYwppbmRleCBkZmE0MGIwLi41ZDJhZmEwIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jCkBAIC04MiwxNCArODIsMjEgQEAKICNpZiAwCiB2b2lkIHBkYWNmX2R1bXAoc3RydWN0IHNuZF9wZGFjZiAqY2hpcCkKIHsKLQlwcmludGsoIlBEQVVESU9DRiBEVU1QICgweCVseCk6XG4iLCBjaGlwLT5wb3J0KTsKLQlwcmludGsoIldQRCAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCkpOwotCXByaW50aygiUkRQICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfUkRQKSk7Ci0JcHJpbnRrKCJUQ1IgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19UQ1IpKTsKLQlwcmludGsoIlNDUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1NDUikpOwotCXByaW50aygiSVNSICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSVNSKSk7Ci0JcHJpbnRrKCJJRVIgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JRVIpKTsKLQlwcmludGsoIkFLX0lGUiAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0FLX0lGUikpOworCXByaW50ayhLRVJOX0RFQlVHICJQREFVRElPQ0YgRFVNUCAoMHglbHgpOlxuIiwgY2hpcC0+cG9ydCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIldQRCAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCkpOworCXByaW50ayhLRVJOX0RFQlVHICJSRFAgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19SRFApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVENSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfVENSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlNDUiAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1NDUikpOworCXByaW50ayhLRVJOX0RFQlVHICJJU1IgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JU1IpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSUVSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSUVSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkFLX0lGUiAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0FLX0lGUikpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2lycS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKaW5kZXggZWE5MDNjOC4uZGNkMzIyMCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCiAJcmRwID0gaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1JEUCk7CiAJd2RwID0gaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCk7Ci0JLy8gcHJpbnRrKCJUQVNLTEVUOiByZHAgPSAleCwgd2RwID0gJXhcbiIsIHJkcCwgd2RwKTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiVEFTS0xFVDogcmRwID0gJXgsIHdkcCA9ICV4XG4iLCByZHAsIHdkcCk7ICovCiAJc2l6ZSA9IHdkcCAtIHJkcDsKIAlpZiAoc2l6ZSA8IDApCiAJCXNpemUgKz0gMHgxMDAwMDsKQEAgLTMyMSw1ICszMjEsNSBAQAogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkvLyBwcmludGsoIlRBU0tMRVQ6IGVuZFxuIik7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgIlRBU0tMRVQ6IGVuZFxuIik7ICovCiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCmluZGV4IDcwNjYwMmEuLjc0NDVjYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCkBAIC0xMzAsMjMgKzEzMCwyNiBAQAogLyoKICAqIGNyZWF0ZSB2eHBvY2tldCBpbnN0YW5jZQogICovCi1zdGF0aWMgc3RydWN0IHNuZF92eHBvY2tldCAqc25kX3Z4cG9ja2V0X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBpYmwsCi0JCQkJCSAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCitzdGF0aWMgaW50IHNuZF92eHBvY2tldF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgaWJsLAorCQkJICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLAorCQkJICAgIHN0cnVjdCBzbmRfdnhwb2NrZXQgKipjaGlwX3JldCkKIHsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcDsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHA7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CiAJCS5kZXZfZnJlZSA9CXNuZF92eHBvY2tldF9kZXZfZnJlZSwKIAl9OworCWludCBlcnI7CiAKIAljaGlwID0gc25kX3Z4X2NyZWF0ZShjYXJkLCAmdnhwb2NrZXRfaHcsICZzbmRfdnhwb2NrZXRfb3BzLAogCQkJICAgICBzaXplb2Yoc3RydWN0IHNuZF92eHBvY2tldCkgLSBzaXplb2Yoc3RydWN0IHZ4X2NvcmUpKTsKLQlpZiAoISBjaGlwKQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcykgPCAwKSB7CisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkgewogCQlrZnJlZShjaGlwKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CiAJfQogCWNoaXAtPmlibC5zaXplID0gaWJsOwogCkBAIC0xNjksNyArMTcyLDggQEAKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotCXJldHVybiB2eHA7CisJKmNoaXBfcmV0ID0gdnhwOworCXJldHVybiAwOwogfQogCiAKQEAgLTI5Miw3ICsyOTYsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHA7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAogCS8qIGZpbmQgYW4gZW1wdHkgc2xvdCBmcm9tIHRoZSBjYXJkIGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewpAQCAtMzA3LDE2ICszMTEsMTYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7IC8qIGRpc2FibGVkIGV4cGxpY2l0bHkgKi8KIAogCS8qIG9rLCBjcmVhdGUgYSBjYXJkIGluc3RhbmNlICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpXSwgaWRbaV0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ2eHBvY2tldDogY2Fubm90IGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQl2eHAgPSBzbmRfdnhwb2NrZXRfbmV3KGNhcmQsIGlibFtpXSwgcF9kZXYpOwotCWlmICghIHZ4cCkgeworCWVyciA9IHNuZF92eHBvY2tldF9uZXcoY2FyZCwgaWJsW2ldLCBwX2RldiwgJnZ4cCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBlcnI7CiAJfQogCWNhcmQtPnByaXZhdGVfZGF0YSA9IHZ4cDsKIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL0tjb25maWcgYi9zb3VuZC9wcGMvS2NvbmZpZwppbmRleCA3NzdkZTJiLi5iZDIzMzhhIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvS2NvbmZpZworKysgYi9zb3VuZC9wcGMvS2NvbmZpZwpAQCAtMTMsNiArMTMsNyBAQAogCXRyaXN0YXRlICJQb3dlck1hYyAoQVdBQ1MsIERBQ0EsIEJ1cmd1bmR5LCBUdW1ibGVyLCBLZXl3ZXN0KSIKIAlkZXBlbmRzIG9uIEkyQyAmJiBJTlBVVCAmJiBQUENfUE1BQwogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9WTUFTVEVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkIHNvdW5kIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2F3YWNzLmMgYi9zb3VuZC9wcGMvYXdhY3MuYwppbmRleCA3YmQzM2U2Li44MGRmOWIxIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvYXdhY3MuYworKysgYi9zb3VuZC9wcGMvYXdhY3MuYwpAQCAtNjA4LDkgKzYwOCwxMiBAQAogCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfTElORSwgMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19sb1tdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfVk9MVU1FKCJMaW5lIG91dCBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKLQlBV0FDU19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCA1LCA2LCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hY1tdIF9faW5pdGRhdGEgPSB7CisJQVdBQ1NfVk9MVU1FKCJQbGF5LXRocm91Z2ggUGxheWJhY2sgVm9sdW1lIiwgNSwgNiwgMSksCiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCiB9OwogCkBAIC02MjcsNiArNjMwLDEwIEBACiAJQVdBQ1NfU1dJVENIKCJMaW5lIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX01JQywgMCksCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM1NTAwW10gX19pbml0ZGF0YSA9IHsKKwlBV0FDU19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hY1tdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMiwgNiwgMSksCiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCkBAIC02NDUsMTIgKzY1MiwxOSBAQAogCUFXQUNTX1NXSVRDSCgiTWljIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0xJTkUsIDApLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDBbXSBfX2luaXRkYXRhID0geworCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfQ0QsIDApLAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zdyBfX2luaXRkYXRhID0KIEFXQUNTX1NXSVRDSCgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDEsIFNISUZUX0hETVVURSwgMSk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfaW1hYyBfX2luaXRkYXRhID0KIEFXQUNTX1NXSVRDSCgiTGluZSBvdXQgUGxheWJhY2sgU3dpdGNoIiwgMSwgU0hJRlRfSERNVVRFLCAxKTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19wbWFjNTUwMCBfX2luaXRkYXRhID0KK0FXQUNTX1NXSVRDSCgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDEsIFNISUZUX0hETVVURSwgMSk7CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taWNfYm9vc3RbXSBfX2luaXRkYXRhID0gewogCUFXQUNTX1NXSVRDSCgiTWljIEJvb3N0IENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfR0FJTkxJTkUsIDApLAogfTsKQEAgLTc2NiwxMiArNzgwLDE2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLSNkZWZpbmUgSVNfUE03NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsNzUwMCIpKQorI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikgXAorCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsODUwMCIpIFwKKwkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDk1MDAiKSkKKyNkZWZpbmUgSVNfUE01NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsZTQxMSIpKQogI2RlZmluZSBJU19CRUlHRSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLEdvc3NhbWVyIikpCiAjZGVmaW5lIElTX0lNQUMxIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikpCiAjZGVmaW5lIElTX0lNQUMyIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgXAogCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCiAjZGVmaW5lIElTX0c0QUdQIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMywxIikpCisjZGVmaW5lIElTX0xPTUJBUkQgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAKIHN0YXRpYyBpbnQgaW1hYzEsIGltYWMyOwogCkBAIC04NTgsMTAgKzg3NiwxNCBAQAogc25kX3BtYWNfYXdhY3NfaW5pdChzdHJ1Y3Qgc25kX3BtYWMgKmNoaXApCiB7CiAJaW50IHBtNzUwMCA9IElTX1BNNzUwMDsKKwlpbnQgcG01NTAwID0gSVNfUE01NTAwOwogCWludCBiZWlnZSA9IElTX0JFSUdFOwogCWludCBnNGFncCA9IElTX0c0QUdQOworCWludCBsb21iYXJkID0gSVNfTE9NQkFSRDsKIAlpbnQgaW1hYzsKIAlpbnQgZXJyLCB2b2w7CisJc3RydWN0IHNuZF9rY29udHJvbCAqdm1hc3Rlcl9zdywgKnZtYXN0ZXJfdm9sOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlcl92b2wsICpzcGVha2VyX3ZvbDsKIAogCWltYWMxID0gSVNfSU1BQzE7CiAJaW1hYzIgPSBJU19JTUFDMjsKQEAgLTkxNSw3ICs5MzcsNyBAQAogCQkvKiBzZXQgaGVhZHBob25lLWphY2sgZGV0ZWN0aW9uIGJpdCAqLwogCQlzd2l0Y2ggKGNoaXAtPm1vZGVsKSB7CiAJCWNhc2UgUE1BQ19BV0FDUzoKLQkJCWNoaXAtPmhwX3N0YXRfbWFzayA9IHBtNzUwMCA/IE1BU0tfSERQQ09OTgorCQkJY2hpcC0+aHBfc3RhdF9tYXNrID0gcG03NTAwIHx8IHBtNTUwMCA/IE1BU0tfSERQQ09OTgogCQkJCTogTUFTS19MT0NPTk47CiAJCQlicmVhazsKIAkJY2FzZSBQTUFDX1NDUkVBTUVSOgpAQCAtOTU0LDcgKzk3Niw3IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKGJlaWdlIHx8IGc0YWdwKQogCQk7Ci0JZWxzZSBpZiAoY2hpcC0+bW9kZWwgPT0gUE1BQ19TQ1JFQU1FUikKKwllbHNlIGlmIChjaGlwLT5tb2RlbCA9PSBQTUFDX1NDUkVBTUVSIHx8IHBtNTUwMCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzMiksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzMik7CiAJZWxzZSBpZiAoIXBtNzUwMCkKQEAgLTk2MiwxOSArOTg0LDM1IEBACiAJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzMik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJaWYgKHBtNTUwMCkgeworCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKKwkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDApLAorCQkJCSAgIHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCWlmIChwbTc1MDApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM3NTAwKSwKIAkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzc1MDApOworCWVsc2UgaWYgKHBtNTUwMCkKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJICAgIChtYXN0ZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjNTUwMCwKKwkJCQkJCWNoaXApKSk7CiAJZWxzZSBpZiAoYmVpZ2UpCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2JlaWdlKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfYmVpZ2UpOwotCWVsc2UgaWYgKGltYWMpCisJZWxzZSBpZiAoaW1hYyB8fCBsb21iYXJkKSB7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCSAgICAobWFzdGVyX3ZvbCA9IHNuZF9jdGxfbmV3MShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfbG8sCisJCQkJCQljaGlwKSkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWMpLAogCQkJCSAgIHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19pbWFjKTsKLQllbHNlIGlmIChnNGFncCkKKwl9IGVsc2UgaWYgKGc0YWdwKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKIAkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19nNGFncCksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2c0YWdwKTsKQEAgLTk4NCw4ICsxMDIyLDEwIEBACiAJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWNoaXAtPm1hc3Rlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoKHBtNzUwMCB8fCBpbWFjIHx8IGc0YWdwKQorCWNoaXAtPm1hc3Rlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoKHBtNzUwMCB8fCBpbWFjIHx8IGc0YWdwIHx8IGxvbWJhcmQpCiAJCQk/ICZzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfaW1hYworCQkJOiBwbTU1MDAKKwkJCT8gJnNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19wbWFjNTUwMAogCQkJOiAmc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3LCBjaGlwKTsKIAllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBjaGlwLT5tYXN0ZXJfc3dfY3RsKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEwMTcsOCArMTA1Nyw5IEBACiAjZW5kaWYgLyogUE1BQ19BTVBfQVZBSUwgKi8KIAl7CiAJCS8qIHJvdXRlIEEgPSBoZWFkcGhvbmUsIHJvdXRlIEMgPSBzcGVha2VyICovCi0JCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLCBBUlJBWV9TSVpFKHNuZF9wbWFjX2F3YWNzX3NwZWFrZXJfdm9sKSwKLQkJCQkJc25kX3BtYWNfYXdhY3Nfc3BlYWtlcl92b2wpOworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkgICAgKHNwZWFrZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX2F3YWNzX3NwZWFrZXJfdm9sLAorCQkJCQkJY2hpcCkpKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCQljaGlwLT5zcGVha2VyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MShpbWFjMQpAQCAtMTAzMSw2ICsxMDcyLDMzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChwbTU1MDAgfHwgaW1hYyB8fCBsb21iYXJkKSB7CisJCXZtYXN0ZXJfc3cgPSBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoCisJCQkiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICh1bnNpZ25lZCBpbnQgKikgTlVMTCk7CisJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkKHZtYXN0ZXJfc3csCisJCQkJCQkgY2hpcC0+bWFzdGVyX3N3X2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQodm1hc3Rlcl9zdywKKwkJCQkJCSAgY2hpcC0+c3BlYWtlcl9zd19jdGwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHZtYXN0ZXJfc3cpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCXZtYXN0ZXJfdm9sID0gc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKAorCQkJIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAodW5zaWduZWQgaW50ICopIE5VTEwpOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZSh2bWFzdGVyX3ZvbCwgbWFzdGVyX3ZvbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUodm1hc3Rlcl92b2wsIHNwZWFrZXJfdm9sKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCB2bWFzdGVyX3ZvbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYmVpZ2UgfHwgZzRhZ3ApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCUFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWljX2Jvb3N0X2JlaWdlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9idXJndW5keS5jIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKaW5kZXggZjg2MGQzOS4uNDVhNzYyOSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2J1cmd1bmR5LmMKKysrIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlpbnQgdGltZW91dCA9IDUwOwogCXdoaWxlICgoaW5fbGUzMigmY2hpcC0+YXdhY3MtPmNvZGVjX2N0cmwpICYgTUFTS19ORVdFQ01EKSAmJiB0aW1lb3V0LS0pCiAJCXVkZWxheSgxKTsKLQlpZiAoISB0aW1lb3V0KQorCWlmICh0aW1lb3V0IDwgMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgImJ1cmd1bmR5X2J1c3lfd2FpdDogdGltZW91dFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9kYWNhLmMgYi9zb3VuZC9wcGMvZGFjYS5jCmluZGV4IDhhNWIyOTAuLmY4ZDQ3OGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9kYWNhLmMKKysrIGIvc291bmQvcHBjL2RhY2EuYwpAQCAtODIsNyArODIsNyBAQAogCWRhdGFbMV0gfD0gbWl4LT5kZWVtcGhhc2lzID8gMHg0MCA6IDA7CiAJaWYgKGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgREFDQV9SRUdfQVZPTCwKIAkJCQkgICAgICAgMiwgZGF0YSkgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmMgYi9zb3VuZC9wcGMvcG1hYy5jCmluZGV4IGFmNzZlZTguLjliNGU5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmMKKysrIGIvc291bmQvcHBjL3BtYWMuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJcmVjLT5ydW5uaW5nID0gMDsKLQkJLypwcmludGsoInN0b3BwZWQhIVxuIik7Ki8KKwkJLypwcmludGsoS0VSTl9ERUJVRyAic3RvcHBlZCEhXG4iKTsqLwogCQlzbmRfcG1hY19kbWFfc3RvcChyZWMpOwogCQlmb3IgKGkgPSAwLCBjcCA9IHJlYy0+Y21kLmNtZHM7IGkgPCByZWMtPm5wZXJpb2RzOyBpKyssIGNwKyspCiAJCQlvdXRfbGUxNigmY3AtPmNvbW1hbmQsIERCRE1BX1NUT1ApOwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJfQogI2VuZGlmCiAJY291bnQgKz0gcmVjLT5jdXJfcGVyaW9kICogcmVjLT5wZXJpb2Rfc2l6ZTsKLQkvKnByaW50aygicG9pbnRlcj0lZFxuIiwgY291bnQpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAicG9pbnRlcj0lZFxuIiwgY291bnQpOyovCiAJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzLT5ydW50aW1lLCBjb3VudCk7CiB9CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQAogCQkJaWYgKCEgKHN0YXQgJiBBQ1RJVkUpKQogCQkJCWJyZWFrOwogCi0JCQkvKnByaW50aygidXBkYXRlIGZyYWcgJWRcbiIsIHJlYy0+Y3VyX3BlcmlvZCk7Ki8KKwkJCS8qcHJpbnRrKEtFUk5fREVCVUcgInVwZGF0ZSBmcmFnICVkXG4iLCByZWMtPmN1cl9wZXJpb2QpOyovCiAJCQlzdF9sZTE2KCZjcC0+eGZlcl9zdGF0dXMsIDApOwogCQkJc3RfbGUxNigmY3AtPnJlcV9jb3VudCwgcmVjLT5wZXJpb2Rfc2l6ZSk7CiAJCQkvKnN0X2xlMTYoJmNwLT5yZXNfY291bnQsIDApOyovCkBAIC04MDYsNyArODA2LDcgQEAKIAlzdHJ1Y3Qgc25kX3BtYWMgKmNoaXAgPSBkZXZpZDsKIAlpbnQgY3RybCA9IGluX2xlMzIoJmNoaXAtPmF3YWNzLT5jb250cm9sKTsKIAotCS8qcHJpbnRrKCJwbWFjOiBjb250cm9sIGludGVycnVwdC4uIDB4JXhcbiIsIGN0cmwpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAicG1hYzogY29udHJvbCBpbnRlcnJ1cHQuLiAweCV4XG4iLCBjdHJsKTsqLwogCWlmIChjdHJsICYgTUFTS19QT1JUQ0hHKSB7CiAJCS8qIGRvIHNvbWV0aGluZyB3aGVuIGhlYWRwaG9uZSBpcyBwbHVnZ2VkL3VucGx1Z2dlZD8gKi8KIAkJaWYgKGNoaXAtPnVwZGF0ZV9hdXRvbXV0ZSkKQEAgLTEwMzMsNyArMTAzMyw4IEBACiAJfQogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzb3VuZCwgInR1bWJsZXIiKSkgewogCQljaGlwLT5tb2RlbCA9IFBNQUNfVFVNQkxFUjsKLQkJY2hpcC0+Y2FuX2NhcHR1cmUgPSBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwyIik7CisJCWNoaXAtPmNhbl9jYXB0dXJlID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMiIpCisJCQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKTsKIAkJY2hpcC0+Y2FuX2R1cGxleCA9IDA7CiAJCS8vIGNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwOyAvKiBGSVhNRTogY2hlY2sgdGhpcyAqLwogCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3Bvd2VybWFjLmMgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwppbmRleCBjOTM2MjI1Li41YTkyOTA2IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvcG93ZXJtYWMuYworKysgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwpAQCAtNTgsOSArNTgsOSBAQAogCWNoYXIgKm5hbWVfZXh0OwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9wbWFjX25ldyhjYXJkLCAmY2hpcCkpIDwgMCkKIAkJZ290byBfX2Vycm9yOwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCQlnb3RvIF9fZXJyb3I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoInVuc3VwcG9ydGVkIGhhcmR3YXJlICVkXG4iLCBjaGlwLT5tb2RlbCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuc3VwcG9ydGVkIGhhcmR3YXJlICVkXG4iLCBjaGlwLT5tb2RlbCk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gX19lcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5jIGIvc291bmQvcHBjL3NuZF9wczMuYwppbmRleCBmZjMyMTExLi5mMzYxYzI2IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5jCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKQEAgLTk2OSwxMSArOTY5LDkgQEAKIAl9CiAKIAkvKiBjcmVhdGUgY2FyZCBpbnN0YW5jZSAqLwotCXRoZV9jYXJkLmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCF0aGVfY2FyZC5jYXJkKSB7Ci0JCXJldCA9IC1FTlhJTzsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJnRoZV9jYXJkLmNhcmQpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFuX2lycTsKLQl9CiAKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+ZHJpdmVyLCAiUFMzIik7CiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPnNob3J0bmFtZSwgIlBTMyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggM2ViMjIzMy4uNDAyMjJmYyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC00MSw3ICs0MSw3IEBACiAjdW5kZWYgREVCVUcKIAogI2lmZGVmIERFQlVHCi0jZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhmbXQpCisjZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKICNlbHNlCiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgVEFTX1JFR19WT0wsIDYsCiAJCQkJCSAgIGJsb2NrKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgVEFTX1JFR19EUkMsCiAJCQkJCSAgIDIsIHZhbCkgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgRFJDXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCBEUkNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zODYsNyArMzg2LDcgQEAKIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBUQVNfUkVHX0RSQywKIAkJCQkJICAgNiwgdmFsKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBEUkNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTUwNiw3ICs1MDYsOCBAQAogCQlibG9ja1tpXSA9ICh2b2wgPj4gKChpbmZvLT5ieXRlcyAtIGkgLSAxKSAqIDgpKSAmIDB4ZmY7CiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIGluZm8tPnJlZywKIAkJCQkJICAgaW5mby0+Ynl0ZXMsIGJsb2NrKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBtb25vIHZvbHVtZSAlZFxuIiwgaW5mby0+aW5kZXgpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLAorCQkJICAgaW5mby0+aW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC02NDMsNyArNjQ0LDcgQEAKIAl9CiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIHJlZywKIAkJCQkJICAgOSwgYmxvY2spIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCByZWcpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCByZWcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zaC9LY29uZmlnIGIvc291bmQvc2gvS2NvbmZpZwppbmRleCBjZmMxNDM5Li5hZWQwZjkwIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9LY29uZmlnCisrKyBiL3NvdW5kL3NoL0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAl0cmlzdGF0ZSAiRHJlYW1jYXN0IFlhbWFoYSBBSUNBIHNvdW5kIgogCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUCiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgRzJfRE1BCiAJaGVscAogCSAgQUxTQSBTb3VuZCBkcml2ZXIgZm9yIHRoZSBTRUdBIERyZWFtY2FzdCBjb25zb2xlLgogCmRpZmYgLS1naXQgYS9zb3VuZC9zaC9haWNhLmMgYi9zb3VuZC9zaC9haWNhLmMKaW5kZXggN2M5MjBmMy4uZjU1MTIzMyAxMDA2NDQKLS0tIGEvc291bmQvc2gvYWljYS5jCisrKyBiL3NvdW5kL3NoL2FpY2EuYwpAQCAtNjA5LDExICs2MDksMTEgQEAKIAlkcmVhbWNhc3RjYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FpY2EpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWRyZWFtY2FzdGNhcmQpKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkcmVhbWNhc3RjYXJkLT5jYXJkID0KLQkgICAgc25kX2NhcmRfbmV3KGluZGV4LCBTTkRfQUlDQV9EUklWRVIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAodW5saWtlbHkoIWRyZWFtY2FzdGNhcmQtPmNhcmQpKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBTTkRfQUlDQV9EUklWRVIsIFRISVNfTU9EVUxFLCAwLAorCQkJICAgICAgJmRyZWFtY2FzdGNhcmQtPmNhcmQpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewogCQlrZnJlZShkcmVhbWNhc3RjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBlcnI7CiAJfQogCXN0cmNweShkcmVhbWNhc3RjYXJkLT5jYXJkLT5kcml2ZXIsICJzbmRfYWljYSIpOwogCXN0cmNweShkcmVhbWNhc3RjYXJkLT5jYXJkLT5zaG9ydG5hbWUsIFNORF9BSUNBX0RSSVZFUik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvS2NvbmZpZyBiL3NvdW5kL3NvYy9LY29uZmlnCmluZGV4IGVmMDI1YzYuLjNkMmJiNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCXRyaXN0YXRlICJBTFNBIGZvciBTb0MgYXVkaW8gc3VwcG9ydCIKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBBQzk3X0JVUyBpZiBTTkRfU09DX0FDOTdfQlVTCisJc2VsZWN0IFNORF9KQUNLIGlmIElOUFVUPXkgfHwgSU5QVVQ9U05ECiAJLS0taGVscC0tLQogCiAJICBJZiB5b3Ugd2FudCBBU29DIHN1cHBvcnQsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSBhbmQgYWxzbyB0byB0aGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9NYWtlZmlsZQppbmRleCA4NmE5YjFmLi4wMjM3ODc5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotc25kLXNvYy1jb3JlLW9ianMgOj0gc29jLWNvcmUubyBzb2MtZGFwbS5vCitzbmQtc29jLWNvcmUtb2JqcyA6PSBzb2MtY29yZS5vIHNvYy1kYXBtLm8gc29jLWphY2subwogCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gc25kLXNvYy1jb3JlLm8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBjb2RlY3MvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMKaW5kZXggM2RjZGM0ZS4uOWVmNmI5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KTsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX3BjbV9vcHMgPSB7CiAJLm9wZW4JCT0gYXRtZWxfcGNtX29wZW4sCiAJLmNsb3NlCQk9IGF0bWVsX3BjbV9jbG9zZSwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwppbmRleCBmZjAwNTRiLi5lNTg4ZTYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKQEAgLTY5Nyw2ICs2OTcsMTUgQEAKICNkZWZpbmUgQVRNRUxfU1NDX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzggICAgIHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfFwKIAkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYXRtZWxfc3NjX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBhdG1lbF9zc2Nfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBhdG1lbF9zc2Nfc2h1dGRvd24sCisJLnByZXBhcmUJPSBhdG1lbF9zc2NfcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfc3NjX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2RpdiwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhdG1lbF9zc2NfZGFpW05VTV9TU0NfREVWSUNFU10gPSB7CiAJewkubmFtZSA9ICJhdG1lbC1zc2MwIiwKIAkJLmlkID0gMCwKQEAgLTcxMiwxMyArNzIxLDcgQEAKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gQVRNRUxfU1NDX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBBVE1FTF9TU0NfRk9STUFUUyx9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBhdG1lbF9zc2Nfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IGF0bWVsX3NzY19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXRtZWxfc3NjX3ByZXBhcmUsCi0JCQkuaHdfcGFyYW1zID0gYXRtZWxfc3NjX2h3X3BhcmFtcywKLQkJCS5zZXRfZm10ID0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdG1lbF9zc2Nfc2V0X2RhaV9jbGtkaXYsfSwKKwkJLm9wcyA9ICZhdG1lbF9zc2NfZGFpX29wcywKIAkJLnByaXZhdGVfZGF0YSA9ICZzc2NfaW5mb1swXSwKIAl9LAogI2lmIE5VTV9TU0NfREVWSUNFUyA9PSAzCkBAIC03MzYsMTMgKzczOSw3IEBACiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IEFUTUVMX1NTQ19SQVRFUywKIAkJCS5mb3JtYXRzID0gQVRNRUxfU1NDX0ZPUk1BVFMsfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gYXRtZWxfc3NjX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdG1lbF9zc2Nfc2h1dGRvd24sCi0JCQkucHJlcGFyZSA9IGF0bWVsX3NzY19wcmVwYXJlLAotCQkJLmh3X3BhcmFtcyA9IGF0bWVsX3NzY19od19wYXJhbXMsCi0JCQkuc2V0X2ZtdCA9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfY2xrZGl2ID0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LH0sCisJCS5vcHMgPSAmYXRtZWxfc3NjX2RhaV9vcHMsCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMV0sCiAJfSwKIAl7CS5uYW1lID0gImF0bWVsLXNzYzIiLApAQCAtNzU5LDEzICs3NTYsNyBAQAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBBVE1FTF9TU0NfUkFURVMsCiAJCQkuZm9ybWF0cyA9IEFUTUVMX1NTQ19GT1JNQVRTLH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0bWVsX3NzY19zdGFydHVwLAotCQkJLnNodXRkb3duID0gYXRtZWxfc3NjX3NodXRkb3duLAotCQkJLnByZXBhcmUgPSBhdG1lbF9zc2NfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAotCQkJLnNldF9mbXQgPSBhdG1lbF9zc2Nfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X2Nsa2RpdiA9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2Rpdix9LAorCQkub3BzID0gJmF0bWVsX3NzY19kYWlfb3BzLAogCQkucHJpdmF0ZV9kYXRhID0gJnNzY19pbmZvWzJdLAogCX0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9wbGF5cGFxX3dtODUxMC5jIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKaW5kZXggNDNkZDhjZS4uNzA2NTc1MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKQEAgLTE2NCw0MSArMTY0LDQxIEBACiAJICovCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CiAJY2FzZSA0ODAwMDoKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzE7Ci0JCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwotCQlicmVhazsKLQotCWNhc2UgNDQxMDA6Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKLQkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8xOwotCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKLQkJYnJlYWs7Ci0KLQljYXNlIDIyMDUwOgotCQlwbGxfb3V0ID0gMTEyODk2MDA7CisJCXBsbF9vdXQgPSAyNDU3NjAwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8yOwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDE2MDAwOgotCQlwbGxfb3V0ID0gMTIyODgwMDA7Ci0JCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMzsKKwljYXNlIDQ0MTAwOgorCQlwbGxfb3V0ID0gMjI1NzkyMDA7CisJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMjsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCi0JY2FzZSAxMTAyNToKLQkJcGxsX291dCA9IDExMjg5NjAwOworCWNhc2UgMjIwNTA6CisJCXBsbF9vdXQgPSAyMjU3OTIwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl80OwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDgwMDA6Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKKwljYXNlIDE2MDAwOgorCQlwbGxfb3V0ID0gMjQ1NzYwMDA7CiAJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfNjsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCisJY2FzZSAxMTAyNToKKwkJcGxsX291dCA9IDIyNTc5MjAwOworCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzg7CisJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OworCQlicmVhazsKKworCWNhc2UgODAwMDoKKwkJcGxsX291dCA9IDI0NTc2MDAwOworCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzEyOworCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcl93YXJuaW5nKCJwbGF5cGFxX3dtODUxMDogVW5zdXBwb3J0ZWQgc2FtcGxlIHJhdGUgJWRcbiIsCiAJCQkgICBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKaW5kZXggNmVhMDRiZS4uMTczYTIzOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCiAjaW5jbHVkZSA8bGludXgvYXRtZWwtc3NjLmg+CiAKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKQEAgLTUyLDYgKzU0LDkgQEAKICNpbmNsdWRlICJhdG1lbC1wY20uaCIKICNpbmNsdWRlICJhdG1lbF9zc2NfZGFpLmgiCiAKKyNkZWZpbmUgTUNMS19SQVRFIDEyMDAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICptY2xrOwogCiBzdGF0aWMgaW50IGF0OTFzYW05ZzIwZWtfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTU5LDExICs2NCwxMiBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCi0JLyogY29kZWMgc3lzdGVtIGNsb2NrIGlzIHN1cHBsaWVkIGJ5IFBDSzAsIHNldCB0byAxMk1IeiAqLwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3MzFfU1lTQ0xLLAotCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCisJCU1DTEtfUkFURSwgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApIHsKKwkJY2xrX2Rpc2FibGUobWNsayk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODksNiArMTk1LDMxIEBACiAJLnNodXRkb3duID0gYXQ5MXNhbTlnMjBla19zaHV0ZG93biwKIH07CiAKK3N0YXRpYyBpbnQgYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdGF0aWMgaW50IG1jbGtfb247CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJaWYgKCFtY2xrX29uKQorCQkJcmV0ID0gY2xrX2VuYWJsZShtY2xrKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJbWNsa19vbiA9IDE7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChtY2xrX29uKQorCQkJY2xrX2Rpc2FibGUobWNsayk7CisJCW1jbGtfb24gPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYXQ5MXNhbTlnMjBla19kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fTUlDKCJJbnQgTWljIiwgTlVMTCksCkBAIC0yNDMsMjEgKzI3NCw0OCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19hdDkxc2FtOWcyMGVrID0gewotCS5uYW1lID0gIldNODczMSIsCisJLm5hbWUgPSAiQVQ5MVNBTUcyMC1FSyIsCiAJLnBsYXRmb3JtID0gJmF0bWVsX3NvY19wbGF0Zm9ybSwKIAkuZGFpX2xpbmsgPSAmYXQ5MXNhbTlnMjBla19kYWksCiAJLm51bV9saW5rcyA9IDEsCisJLnNldF9iaWFzX2xldmVsID0gYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgYXQ5MXNhbTlnMjBla193bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OworLyoKKyAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgorICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQorICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KKyAqLworc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSAweDFiOworCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGF0OTFzYW05ZzIwZWtfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19hdDkxc2FtOWcyMGVrLAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCi0JLmNvZGVjX2RhdGEgPSAmYXQ5MXNhbTlnMjBla193bTg3MzFfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlOwpAQCAtMjY2LDIzICszMjQsNTYgQEAKIHsKIAlzdHJ1Y3QgYXRtZWxfc3NjX2luZm8gKnNzY19wID0gYXQ5MXNhbTlnMjBla19kYWkuY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzc2NfZGV2aWNlICpzc2MgPSBOVUxMOworCXN0cnVjdCBjbGsgKnBsbGI7CiAJaW50IHJldDsKIAorCWlmICghbWFjaGluZV9pc19hdDkxc2FtOWcyMGVrKCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBDb2RlYyBNQ0xLIGlzIHN1cHBsaWVkIGJ5IFBDSzAgLSBzZXQgaXQgdXAuCisJICovCisJbWNsayA9IGNsa19nZXQoTlVMTCwgInBjazAiKTsKKwlpZiAoSVNfRVJSKG1jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIGdldCBNQ0xLXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihtY2xrKTsKKwkJZ290byBlcnI7CisJfQorCisJcGxsYiA9IGNsa19nZXQoTlVMTCwgInBsbGIiKTsKKwlpZiAoSVNfRVJSKG1jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIGdldCBQTExCXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihtY2xrKTsKKwkJZ290byBlcnJfbWNsazsKKwl9CisJcmV0ID0gY2xrX3NldF9wYXJlbnQobWNsaywgcGxsYik7CisJY2xrX3B1dChwbGxiKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gc2V0IE1DTEsgcGFyZW50XG4iKTsKKwkJZ290byBlcnJfbWNsazsKKwl9CisKKwljbGtfc2V0X3JhdGUobWNsaywgTUNMS19SQVRFKTsKKwogCS8qCiAJICogUmVxdWVzdCBTU0MgZGV2aWNlCiAJICovCiAJc3NjID0gc3NjX3JlcXVlc3QoMCk7CiAJaWYgKElTX0VSUihzc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIHJlcXVlc3QgU1NDIDBcbiIpOwogCQlyZXQgPSBQVFJfRVJSKHNzYyk7CiAJCXNzYyA9IE5VTEw7CiAJCWdvdG8gZXJyX3NzYzsKIAl9CiAJc3NjX3AtPnNzYyA9IHNzYzsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXJyX3NzYzsKKwogCWF0OTFzYW05ZzIwZWtfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJInBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAl9CiAKQEAgLTI5MiwxNCArMzgzLDE5IEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGF0OTFzYW05ZzIwZWtfc25kX2RldmljZSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSJwbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogCiBlcnJfc3NjOgorCXNzY19mcmVlKHNzYyk7CisJc3NjX3AtPnNzYyA9IE5VTEw7CitlcnJfbWNsazoKKwljbGtfcHV0KG1jbGspOworCW1jbGsgPSBOVUxMOworZXJyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxNyw2ICs0MTMsOCBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAlhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UgPSBOVUxMOworCWNsa19wdXQobWNsayk7CisJbWNsayA9IE5VTEw7CiB9CiAKIG1vZHVsZV9pbml0KGF0OTFzYW05ZzIwZWtfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYyBiL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCmluZGV4IGJjOGQ2NTQuLjMwNDkwYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGF1MXhwc2NfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXUxeHBzY19wY21fb3BzID0gewogCS5vcGVuCQk9IGF1MXhwc2NfcGNtX29wZW4sCiAJLmNsb3NlCQk9IGF1MXhwc2NfcGNtX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMgYi9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCmluZGV4IGYwZTMwYWUuLjQ3OWQ3YmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKKysrIGIvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYwpAQCAtMzQyLDYgKzM0MiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdTF4cHNjX2FjOTdfZGFpX29wcyA9IHsKKwkudHJpZ2dlcgk9IGF1MXhwc2NfYWM5N190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBhdTF4cHNjX2FjOTdfaHdfcGFyYW1zLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGF1MXhwc2NfYWM5N19kYWkgPSB7CiAJLm5hbWUJCQk9ICJhdTF4cHNjX2FjOTciLAogCS5hYzk3X2NvbnRyb2wJCT0gMSwKQEAgLTM2MSwxMCArMzY2LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBhdTF4cHNjX2FjOTdfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IGF1MXhwc2NfYWM5N19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmF1MXhwc2NfYWM5N19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF1MXhwc2NfYWM5N19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMgYi9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKaW5kZXggZjkxNmRlNC4uYmI1ODkzMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYwpAQCAtMzY3LDYgKzM2NywxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdTF4cHNjX2kyc19kYWlfb3BzID0geworCS50cmlnZ2VyCT0gYXUxeHBzY19pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gYXUxeHBzY19pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYXUxeHBzY19pMnNfc2V0X2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhdTF4cHNjX2kyc19kYWkgPSB7CiAJLm5hbWUJCQk9ICJhdTF4cHNjX2kycyIsCiAJLnByb2JlCQkJPSBhdTF4cHNjX2kyc19wcm9iZSwKQEAgLTM4NSwxMSArMzkxLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAkvKiAyIHdpdGhvdXQgZXh0ZXJuYWwgaGVscCAqLwogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBhdTF4cHNjX2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gYXUxeHBzY19pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdAk9IGF1MXhwc2NfaTJzX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJmF1MXhwc2NfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTChhdTF4cHNjX2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCmluZGV4IDgwNjdjZmEuLjhjZmVkMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2FjOTdfb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21fYWM5N19vcHMgPSB7CiAJLm9wZW4JCT0gYmY1eHhfcGNtX29wZW4sCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMJPSBiZjV4eF9wY21faHdfcGFyYW1zLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKaW5kZXggM2JlMmJlNi4uOGE5MzVmMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCkBAIC0zMSw3MiArMzEsNDYgQEAKICNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgogI2luY2x1ZGUgImJmNXh4LWFjOTcuaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzAge1BfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBcCi0JCVBfU1BPUlQwX1JGUywgUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMSB7UF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFwKLQkJUF9TUE9SVDFfUkZTLCBQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8yIHtQX1NQT1JUMl9URlMsIFBfU1BPUlQyX0RUUFJJLCBQX1NQT1JUMl9UU0NMSywgXAotCQlQX1NQT1JUMl9SRlMsIFBfU1BPUlQyX0RSUFJJLCBQX1NQT1JUMl9SU0NMSywgMH0KLQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzMge1BfU1BPUlQzX1RGUywgUF9TUE9SVDNfRFRQUkksIFBfU1BPUlQzX1RTQ0xLLCBcCi0JCVBfU1BPUlQzX1JGUywgUF9TUE9SVDNfRFJQUkksIFBfU1BPUlQzX1JTQ0xLLCAwfQotI2Vsc2UKLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8wIHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywgXAotCQkgUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMSB7UF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsIFwKLQkJIFBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMH0KLSNlbmRpZgotCiBzdGF0aWMgaW50ICpjbWRfY291bnQ7CiBzdGF0aWMgaW50IHNwb3J0X251bSA9IENPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNOwogCisjZGVmaW5lIFNQT1JUX1JFUSh4KSBcCisJW3hdID0ge1BfU1BPUlQjI3gjI19URlMsIFBfU1BPUlQjI3gjI19EVFBSSSwgUF9TUE9SVCMjeCMjX1RTQ0xLLCBcCisJICAgICAgIFBfU1BPUlQjI3gjI19SRlMsIFBfU1BPUlQjI3gjI19EUlBSSSwgUF9TUE9SVCMjeCMjX1JTQ0xLLCAwfQogc3RhdGljIHUxNiBzcG9ydF9yZXFbXVs3XSA9IHsKLQkJUElOX1JFUV9TUE9SVF8wLAotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMQotCQlQSU5fUkVRX1NQT1JUXzEsCisjaWZkZWYgU1BPUlQwX1RDUjEKKwlTUE9SVF9SRVEoMCksCiAjZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzIKLQkJUElOX1JFUV9TUE9SVF8yLAorI2lmZGVmIFNQT1JUMV9UQ1IxCisJU1BPUlRfUkVRKDEpLAogI2VuZGlmCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8zCi0JCVBJTl9SRVFfU1BPUlRfMywKKyNpZmRlZiBTUE9SVDJfVENSMQorCVNQT1JUX1JFUSgyKSwKICNlbmRpZgotCX07CisjaWZkZWYgU1BPUlQzX1RDUjEKKwlTUE9SVF9SRVEoMyksCisjZW5kaWYKK307CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BvcnRfcGFyYW0gc3BvcnRfcGFyYW1zWzRdID0gewotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQwX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDBfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUMF9FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMF9UQ1IxLAotCX0sCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8xCi0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDFfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMV9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQxX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQxX1RDUjEsCi0JfSwKLSNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMgotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQyX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDJfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUMl9FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMl9UQ1IxLAotCX0sCi0jZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzMKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUM19SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQzX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDNfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDNfVENSMSwKKyNkZWZpbmUgU1BPUlRfUEFSQU1TKHgpIFwKKwlbeF0gPSB7IFwKKwkJLmRtYV9yeF9jaGFuID0gQ0hfU1BPUlQjI3gjI19SWCwgXAorCQkuZG1hX3R4X2NoYW4gPSBDSF9TUE9SVCMjeCMjX1RYLCBcCisJCS5lcnJfaXJxICAgICA9IElSUV9TUE9SVCMjeCMjX0VSUk9SLCBcCisJCS5yZWdzICAgICAgICA9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVCMjeCMjX1RDUjEsIFwKIAl9CitzdGF0aWMgc3RydWN0IHNwb3J0X3BhcmFtIHNwb3J0X3BhcmFtc1s0XSA9IHsKKyNpZmRlZiBTUE9SVDBfVENSMQorCVNQT1JUX1BBUkFNUygwKSwKKyNlbmRpZgorI2lmZGVmIFNQT1JUMV9UQ1IxCisJU1BPUlRfUEFSQU1TKDEpLAorI2VuZGlmCisjaWZkZWYgU1BPUlQyX1RDUjEKKwlTUE9SVF9QQVJBTVMoMiksCisjZW5kaWYKKyNpZmRlZiBTUE9SVDNfVENSMQorCVNQT1JUX1BBUkFNUygzKSwKICNlbmRpZgogfTsKIApAQCAtMzMyLDExICszMDYsMTEgQEAKIAlpZiAoY21kX2NvdW50ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSwgInNvYy1hdWRpbyIpKSB7CisJaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KHNwb3J0X3JlcVtzcG9ydF9udW1dLCAic29jLWF1ZGlvIikpIHsKIAkJcHJfZXJyKCJSZXF1ZXN0aW5nIFBlcmlwaGVyYWxzIGZhaWxlZFxuIik7CiAJCXJldCA9ICAtRUZBVUxUOwogCQlnb3RvIHBlcmlwaGVyYWxfZXJyOwotCQl9CisJfQogCiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAkvKiBSZXF1ZXN0IFBCMyBhcyByZXNldCBwaW4gKi8KQEAgLTM4Myw5ICszNTcsOSBAQAogc3BvcnRfZXJyOgogI2lmZGVmIENPTkZJR19TTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCiAJZ3Bpb19mcmVlKENPTkZJR19TTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0pOwotI2VuZGlmCiBncGlvX2VycjoKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworI2VuZGlmCisJcGVyaXBoZXJhbF9mcmVlX2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0pOwogcGVyaXBoZXJhbF9lcnI6CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNtZF9jb3VudCk7CiAJY21kX2NvdW50ID0gTlVMTDsKQEAgLTM5OCw3ICszNzIsNyBAQAogewogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljbWRfY291bnQpOwogCWNtZF9jb3VudCA9IE5VTEw7Ci0JcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChzcG9ydF9yZXFbc3BvcnRfbnVtXSk7CiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAlncGlvX2ZyZWUoQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCmluZGV4IDdmMmE1ZTEuLmVkZmJkYzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJU1NZTkMoKTsKIAogCS8qIFdoZW4gVFVWRiBpcyBzZXQsIHRoZSBkYXRhIGlzIGFscmVhZHkgc2VuZCBvdXQgKi8KLQl3aGlsZSAoIShzdGF0dXMgJiBUVVZGKSAmJiBjb3VudCsrIDwgMTAwMDApIHsKKwl3aGlsZSAoIShzdGF0dXMgJiBUVVZGKSAmJiArK2NvdW50IDwgMTAwMDApIHsKIAkJdWRlbGF5KDEpOwogCQlzdGF0dXMgPSBiZmluX3JlYWRfU1BPUlRfU1RBVCgpOwogCQlTU1lOQygpOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJU1NZTkMoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlpZiAoY291bnQgPT0gMTAwMDApIHsKKwlpZiAoY291bnQgPj0gMTAwMDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhZDczMzExOiBmYWlsZWQgdG8gY29uZmlndXJlIGNvZGVjXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDUzZDI5MGIuLjEzMThjNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJcmV0dXJuIDAgOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2kyc19vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGJmNXh4X3BjbV9pMnNfb3BzID0gewogCS5vcGVuCQk9IGJmNXh4X3BjbV9vcGVuLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zCT0gYmY1eHhfcGNtX2h3X3BhcmFtcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwppbmRleCBkMWQ5NWQyLi45NjQ4MjQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCkBAIC0yODcsNiArMjg3LDEzIEBACiAjZGVmaW5lIEJGNVhYX0kyU19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGJmNXh4X2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gYmY1eHhfaTJzX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gYmY1eHhfaTJzX3NodXRkb3duLAorCS5od19wYXJhbXMJPSBiZjV4eF9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYmY1eHhfaTJzX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGJmNXh4X2kyc19kYWkgPSB7CiAJLm5hbWUgPSAiYmY1eHgtaTJzIiwKIAkuaWQgPSAwLApAQCAtMzA0LDEyICszMTEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQkY1WFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IEJGNVhYX0kyU19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgICA9IGJmNXh4X2kyc19zdGFydHVwLAotCQkuc2h1dGRvd24gID0gYmY1eHhfaTJzX3NodXRkb3duLAotCQkuaHdfcGFyYW1zID0gYmY1eHhfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBiZjV4eF9pMnNfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJmJmNXh4X2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGJmNXh4X2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCmluZGV4IDNiOTllNDguLmI3OTUzYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBmcmFnY291bnQ7ICsraSkgewotCQlkZXNjW2ldLm5leHRfZGVzY19hZGRyICA9ICh1bnNpZ25lZCBsb25nKSYoZGVzY1tpICsgMV0pOworCQlkZXNjW2ldLm5leHRfZGVzY19hZGRyICA9ICYoZGVzY1tpICsgMV0pOwogCQlkZXNjW2ldLnN0YXJ0X2FkZHIgPSAodW5zaWduZWQgbG9uZylidWYgKyBpKmZyYWdzaXplOwogCQlkZXNjW2ldLmNmZyA9IGNmZzsKIAkJZGVzY1tpXS54X2NvdW50ID0geF9jb3VudDsKQEAgLTE0MywxMiArMTQzLDEyIEBACiAJfQogCiAJLyogbWFrZSBjaXJjdWxhciAqLwotCWRlc2NbZnJhZ2NvdW50LTFdLm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYzsKKwlkZXNjW2ZyYWdjb3VudC0xXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAKLQlwcl9kZWJ1Zygic2V0dXAgZGVzYzogZGVzYzA9JXAsIG5leHQwPSVseCwgZGVzYzE9JXAsIgotCQkibmV4dDE9JWx4XG54X2NvdW50PSV4LHlfY291bnQ9JXgsYWRkcj0weCVseCxjZnM9MHgleFxuIiwKLQkJJihkZXNjWzBdKSwgZGVzY1swXS5uZXh0X2Rlc2NfYWRkciwKLQkJJihkZXNjWzFdKSwgZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciwKKwlwcl9kZWJ1Zygic2V0dXAgZGVzYzogZGVzYzA9JXAsIG5leHQwPSVwLCBkZXNjMT0lcCwiCisJCSJuZXh0MT0lcFxueF9jb3VudD0leCx5X2NvdW50PSV4LGFkZHI9MHglbHgsY2ZzPTB4JXhcbiIsCisJCWRlc2MsIGRlc2NbMF0ubmV4dF9kZXNjX2FkZHIsCisJCWRlc2MrMSwgZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciwKIAkJZGVzY1swXS54X2NvdW50LCBkZXNjWzBdLnlfY291bnQsCiAJCWRlc2NbMF0uc3RhcnRfYWRkciwgZGVzY1swXS5jZmcpOwogfQpAQCAtMTg0LDIyICsxODQsMjAgQEAKIAlCVUdfT04oc3BvcnQtPmN1cnJfcnhfZGVzYyA9PSBzcG9ydC0+ZHVtbXlfcnhfZGVzYyk7CiAKIAkvKiBNYXliZSB0aGUgZHVtbXkgYnVmZmVyIGRlc2NyaXB0b3IgcmluZyBpcyBkYW1hZ2VkICovCi0Jc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV9yeF9kZXNjKzEpOworCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV9yeF9kZXNjICsgMTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKWdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pOworCWRlc2MgPSBnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKTsKIAkvKiBDb3B5IHRoZSBkZXNjcmlwdG9yIHdoaWNoIHdpbGwgYmUgZGFtYWdlZCB0byBiYWNrdXAgKi8KIAl0ZW1wX2Rlc2MgPSAqZGVzYzsKIAlkZXNjLT54X2NvdW50ID0gMHhhOwogCWRlc2MtPnlfY291bnQgPSAwOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKKwlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkvKiBXYWl0aW5nIGZvciBkdW1teSBidWZmZXIgZGVzY3JpcHRvciBpcyBhbHJlYWR5IGhvb2tlZCovCiAJd2hpbGUgKChnZXRfZG1hX2N1cnJfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKSAtCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0KLQkJCSh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9yeF9kZXNjKQotCQk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpCisJCWNvbnRpbnVlOwogCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAkvKiBSZXN0b3JlIHRoZSBkYW1hZ2VkIGRlc2NyaXB0b3IgKi8KIAkqZGVzYyA9IHRlbXBfZGVzYzsKQEAgLTIxMCwxNCArMjA4LDEyIEBACiBzdGF0aWMgaW5saW5lIGludCBzcG9ydF9yeF9kbWFfc3RhcnQoc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQsIGludCBkdW1teSkKIHsKIAlpZiAoZHVtbXkpIHsKLQkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJCSh1bnNpZ25lZCBsb25nKSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKKwkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3J4X2Rlc2M7CiAJCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAl9IGVsc2UKIAkJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kbWFfcnhfZGVzYzsKIAotCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV9yeF9jaGFuLCBcCi0JCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmN1cnJfcnhfZGVzYykpOworCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV9yeF9jaGFuLCBzcG9ydC0+Y3Vycl9yeF9kZXNjKTsKIAlzZXRfZG1hX3hfY291bnQoc3BvcnQtPmRtYV9yeF9jaGFuLCAwKTsKIAlzZXRfZG1hX3hfbW9kaWZ5KHNwb3J0LT5kbWFfcnhfY2hhbiwgMCk7CiAJc2V0X2RtYV9jb25maWcoc3BvcnQtPmRtYV9yeF9jaGFuLCAoRE1BRkxPV19MQVJHRSB8IE5EU0laRV85IHwgXApAQCAtMjMxLDE0ICsyMjcsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNwb3J0X3R4X2RtYV9zdGFydChzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCwgaW50IGR1bW15KQogewogCWlmIChkdW1teSkgewotCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHNwb3J0LT5kdW1teV90eF9kZXNjOworCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAkJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCX0gZWxzZQogCQlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmRtYV90eF9kZXNjOwogCi0Jc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3R4X2NoYW4sIFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+Y3Vycl90eF9kZXNjKSk7CisJc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3R4X2NoYW4sIHNwb3J0LT5jdXJyX3R4X2Rlc2MpOwogCXNldF9kbWFfeF9jb3VudChzcG9ydC0+ZG1hX3R4X2NoYW4sIDApOwogCXNldF9kbWFfeF9tb2RpZnkoc3BvcnQtPmRtYV90eF9jaGFuLCAwKTsKIAlzZXRfZG1hX2NvbmZpZyhzcG9ydC0+ZG1hX3R4X2NoYW4sCkBAIC0yNjEsMTEgKzI1NSw5IEBACiAJCUJVR19PTihzcG9ydC0+Y3Vycl9yeF9kZXNjICE9IHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3J4X2Rlc2MpCi0JCQk7Ci0JCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kbWFfcnhfZGVzYyk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpCisJCQljb250aW51ZTsKKwkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmRtYV9yeF9kZXNjOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZG1hX3J4X2Rlc2M7CiAJfSBlbHNlIHsKQEAgLTMxMCwyMyArMzAyLDIxIEBACiAJQlVHX09OKHNwb3J0LT5kdW1teV90eF9kZXNjID09IE5VTEwpOwogCUJVR19PTihzcG9ydC0+Y3Vycl90eF9kZXNjID09IHNwb3J0LT5kdW1teV90eF9kZXNjKTsKIAotCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfdHhfZGVzYysxKTsKKwlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYyArIDE7CiAKIAkvKiBTaG9ydGVuIHRoZSB0aW1lIG9uIGxhc3Qgbm9ybWFsIGRlc2NyaXB0b3IgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKilnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKTsKKwlkZXNjID0gZ2V0X2RtYV9uZXh0X2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbik7CiAJLyogU3RvcmUgdGhlIGRlc2NyaXB0b3Igd2hpY2ggd2lsbCBiZSBkYW1hZ2VkICovCiAJdGVtcF9kZXNjID0gKmRlc2M7CiAJZGVzYy0+eF9jb3VudCA9IDB4YTsKIAlkZXNjLT55X2NvdW50ID0gMDsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfdHhfZGVzYyk7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJLyogV2FpdGluZyBmb3IgZHVtbXkgYnVmZmVyIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBob29rZWQqLwogCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbikgLSBcCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gXAotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3R4X2Rlc2MpCi0JCTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYykKKwkJY29udGludWU7CiAJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCS8qIFJlc3RvcmUgdGhlIGRhbWFnZWQgZGVzY3JpcHRvciAqLwogCSpkZXNjID0gdGVtcF9kZXNjOwpAQCAtMzQ3LDExICszMzcsOSBAQAogCQkvKiBIb29rIHRoZSBub3JtYWwgYnVmZmVyIGRlc2NyaXB0b3IgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3R4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3R4X2Rlc2MpCi0JCQk7Ci0JCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kbWFfdHhfZGVzYyk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3R4X2Rlc2MpCisJCQljb250aW51ZTsKKwkJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmRtYV90eF9kZXNjOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXNwb3J0LT5jdXJyX3R4X2Rlc2MgPSBzcG9ydC0+ZG1hX3R4X2Rlc2M7CiAJfSBlbHNlIHsKQEAgLTUzNiwxOSArNTI0LDE3IEBACiAJdW5zaWduZWQgY29uZmlnOwogCiAJcHJfZGVidWcoIiVzIGVudGVyZWRcbiIsIF9fZnVuY19fKTsKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKSBsMV9kYXRhX3NyYW1fYWxsb2MoMiAqIHNpemVvZigqZGVzYykpOwotI2Vsc2UKLQl7CisJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCisJCWRlc2MgPSBsMV9kYXRhX3NyYW1femFsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKKwllbHNlIHsKIAkJZG1hX2FkZHJfdCBhZGRyOwogCQlkZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIDIgKiBzaXplb2YoKmRlc2MpLCAmYWRkciwgMCk7CisJCW1lbXNldChkZXNjLCAwLCAyICogc2l6ZW9mKCpkZXNjKSk7CiAJfQotI2VuZGlmCiAJaWYgKGRlc2MgPT0gTlVMTCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGR1bW15IHJ4IGRlc2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAlzcG9ydC0+ZHVtbXlfcnhfZGVzYyA9IGRlc2M7CiAJZGVzYy0+c3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9idWY7CiAJY29uZmlnID0gRE1BRkxPV19MQVJHRSB8IE5EU0laRV85IHwgY29tcHV0ZV93ZHNpemUoc3BvcnQtPndkc2l6ZSkKQEAgLTU1OSw4ICs1NDUsOCBAQAogCWRlc2MtPnlfY291bnQgPSAwOwogCWRlc2MtPnlfbW9kaWZ5ID0gMDsKIAltZW1jcHkoZGVzYysxLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShkZXNjKzEpOwotCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gZGVzYyArIDE7CisJZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3MSwxOSArNTU3LDE3IEBACiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJlZFxuIiwgX19mdW5jX18pOwogCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKikgbDFfZGF0YV9zcmFtX2FsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKLSNlbHNlCi0JeworCWlmIChMMV9EQVRBX0FfTEVOR1RIKQorCQlkZXNjID0gbDFfZGF0YV9zcmFtX3phbGxvYygyICogc2l6ZW9mKCpkZXNjKSk7CisJZWxzZSB7CiAJCWRtYV9hZGRyX3QgYWRkcjsKIAkJZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCAyICogc2l6ZW9mKCpkZXNjKSwgJmFkZHIsIDApOworCQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCX0KLSNlbmRpZgogCWlmICghZGVzYykgewogCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGR1bW15IHR4IGRlc2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAlzcG9ydC0+ZHVtbXlfdHhfZGVzYyA9IGRlc2M7CiAJZGVzYy0+c3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9idWYgKyBcCiAJCXNwb3J0LT5kdW1teV9jb3VudDsKQEAgLTU5NSw4ICs1NzksOCBAQAogCWRlc2MtPnlfY291bnQgPSAwOwogCWRlc2MtPnlfbW9kaWZ5ID0gMDsKIAltZW1jcHkoZGVzYysxLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShkZXNjKzEpOwotCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gZGVzYyArIDE7CisJZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3MiwxNyArODU2LDE1IEBACiAJc3BvcnQtPndkc2l6ZSA9IHdkc2l6ZTsKIAlzcG9ydC0+ZHVtbXlfY291bnQgPSBkdW1teV9jb3VudDsKIAotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCXNwb3J0LT5kdW1teV9idWYgPSBsMV9kYXRhX3NyYW1fYWxsb2MoZHVtbXlfY291bnQgKiAyKTsKLSNlbHNlCi0Jc3BvcnQtPmR1bW15X2J1ZiA9IGttYWxsb2MoZHVtbXlfY291bnQgKiAyLCBHRlBfS0VSTkVMKTsKLSNlbmRpZgorCWlmIChMMV9EQVRBX0FfTEVOR1RIKQorCQlzcG9ydC0+ZHVtbXlfYnVmID0gbDFfZGF0YV9zcmFtX3phbGxvYyhkdW1teV9jb3VudCAqIDIpOworCWVsc2UKKwkJc3BvcnQtPmR1bW15X2J1ZiA9IGt6YWxsb2MoZHVtbXlfY291bnQgKiAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BvcnQtPmR1bW15X2J1ZiA9PSBOVUxMKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGR1bW15IGJ1ZmZlclxuIik7CiAJCWdvdG8gX19lcnJvcjsKIAl9CiAKLQltZW1zZXQoc3BvcnQtPmR1bW15X2J1ZiwgMCwgZHVtbXlfY291bnQgKiAyKTsKIAlyZXQgPSBzcG9ydF9jb25maWdfcnhfZHVtbXkoc3BvcnQpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gY29uZmlnIHJ4IGR1bW15IHJpbmdcbiIpOwpAQCAtOTM5LDYgKzkyMSw3IEBACiAJCXNwb3J0ID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woc3BvcnRfZG9uZSk7CisKIC8qCiAqIEl0IGlzIG9ubHkgdXNlZCB0byBzZW5kIHNldmVyYWwgYnl0ZXMgd2hlbiBkbWEgaXMgbm90IGVuYWJsZWQKICAqIHNwb3J0IGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCBidXQgbm90IGVuYWJsZWQuCkBAIC0xMDI5LDQgKzEwMTIsMyBAQAogTU9EVUxFX0FVVEhPUigiUm95IEh1YW5nIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNQT1JUIGRyaXZlciBmb3IgQURJIEJsYWNrZmluIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCBkMGUwZDY5Li5iNmM3ZjdhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC0xMCw5ICsxMCwxMSBAQAogCiBjb25maWcgU05EX1NPQ19BTExfQ09ERUNTCiAJdHJpc3RhdGUgIkJ1aWxkIGFsbCBBU29DIENPREVDIGRyaXZlcnMiCisJc2VsZWN0IFNORF9TT0NfTDMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDIGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BRDE5ODAgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FENzMzMTEgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfQUs0MTA0IGlmIFNQSV9NQVNURVIKIAlzZWxlY3QgU05EX1NPQ19BSzQ1MzUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1BDTTMwMDgKQEAgLTI0LDYgKzI2LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19VREExMzRYCiAJc2VsZWN0IFNORF9TT0NfVURBMTM4MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTgzNTAgaWYgTUZEX1dNODM1MAorCXNlbGVjdCBTTkRfU09DX1dNODQwMCBpZiBNRkRfV004NDAwCiAJc2VsZWN0IFNORF9TT0NfV004NTEwIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg1ODAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004NzI4IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKQEAgLTM0LDYgKzM3LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDMgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTcxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTk3MDUgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX1dNOTcxMiBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfV005NzEzIGlmIFNORF9TT0NfQUM5N19CVVMKICAgICAgICAgaGVscApAQCAtNTgsNiArNjIsOSBAQAogY29uZmlnIFNORF9TT0NfQUQ3MzMxMQogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0FLNDEwNAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0FLNDUzNQogCXRyaXN0YXRlCiAKQEAgLTY1LDEyICs3Miw2IEBACiBjb25maWcgU05EX1NPQ19DUzQyNzAKIAl0cmlzdGF0ZQogCi0jIENpcnJ1cyBMb2dpYyBDUzQyNzAgQ29kZWMgSGFyZHdhcmUgTXV0ZSBTdXBwb3J0Ci0jIFNlbGVjdCBpZiB5b3UgaGF2ZSBleHRlcm5hbCBtdXRpbmcgY2lyY3VpdHJ5IGF0dGFjaGVkIHRvIHlvdXIgQ1M0MjcwLgotY29uZmlnIFNORF9TT0NfQ1M0MjcwX0hXTVVURQotCWJvb2wKLQlkZXBlbmRzIG9uIFNORF9TT0NfQ1M0MjcwCi0KICMgQ2lycnVzIExvZ2ljIENTNDI3MCBDb2RlYyBWRCA9IDMuM1YgRXJyYXRhCiAjIFNlbGVjdCBpZiB5b3UgYXJlIGFmZmVjdGVkIGJ5IHRoZSBlcnJhdGEgd2hlcmUgdGhlIHBhcnQgd2lsbCBub3QgZnVuY3Rpb24KICMgaWYgTUNMSyBkaXZpZGUtYnktMS41IGlzIHNlbGVjdGVkIGFuZCBWRCBpcyBzZXQgdG8gMy4zVi4gIFRoZSBkcml2ZXIgd2lsbApAQCAtOTAsNyArOTEsNiBAQAogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMyMwogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDMjYKIAl0cmlzdGF0ZSAiVEkgVExWMzIwQUlDMjYgQ29kZWMgc3VwcG9ydCIgaWYgU05EX1NPQ19PRl9TSU1QTEUKQEAgLTk4LDE1ICs5OCwxMiBAQAogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMzWAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFNORF9TT0NfVFdMNDAzMAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKIAogY29uZmlnIFNORF9TT0NfVURBMTM0WAogICAgICAgIHRyaXN0YXRlCi0gICAgICAgc2VsZWN0IFNORF9TT0NfTDMKIAogY29uZmlnIFNORF9TT0NfVURBMTM4MAogICAgICAgICB0cmlzdGF0ZQpAQCAtMTE0LDYgKzExMSw5IEBACiBjb25maWcgU05EX1NPQ19XTTgzNTAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg0MDAKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg1MTAKIAl0cmlzdGF0ZQogCkBAIC0xNDQsNiArMTQ0LDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODk5MAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNOTcwNQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNOTcxMgogCXRyaXN0YXRlCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCmluZGV4IGM0ZGRjOWEuLjAzMGQyNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIHNuZC1zb2MtYWM5Ny1vYmpzIDo9IGFjOTcubwogc25kLXNvYy1hZDE5ODAtb2JqcyA6PSBhZDE5ODAubwogc25kLXNvYy1hZDczMzExLW9ianMgOj0gYWQ3MzMxMS5vCitzbmQtc29jLWFrNDEwNC1vYmpzIDo9IGFrNDEwNC5vCiBzbmQtc29jLWFrNDUzNS1vYmpzIDo9IGFrNDUzNS5vCiBzbmQtc29jLWNzNDI3MC1vYmpzIDo9IGNzNDI3MC5vCiBzbmQtc29jLWwzLW9ianMgOj0gbDMubwpAQCAtMTMsNiArMTQsNyBAQAogc25kLXNvYy11ZGExMzR4LW9ianMgOj0gdWRhMTM0eC5vCiBzbmQtc29jLXVkYTEzODAtb2JqcyA6PSB1ZGExMzgwLm8KIHNuZC1zb2Mtd204MzUwLW9ianMgOj0gd204MzUwLm8KK3NuZC1zb2Mtd204NDAwLW9ianMgOj0gd204NDAwLm8KIHNuZC1zb2Mtd204NTEwLW9ianMgOj0gd204NTEwLm8KIHNuZC1zb2Mtd204NTgwLW9ianMgOj0gd204NTgwLm8KIHNuZC1zb2Mtd204NzI4LW9ianMgOj0gd204NzI4Lm8KQEAgLTIzLDEyICsyNSwxNCBAQAogc25kLXNvYy13bTg5MDMtb2JqcyA6PSB3bTg5MDMubwogc25kLXNvYy13bTg5NzEtb2JqcyA6PSB3bTg5NzEubwogc25kLXNvYy13bTg5OTAtb2JqcyA6PSB3bTg5OTAubworc25kLXNvYy13bTk3MDUtb2JqcyA6PSB3bTk3MDUubwogc25kLXNvYy13bTk3MTItb2JqcyA6PSB3bTk3MTIubwogc25kLXNvYy13bTk3MTMtb2JqcyA6PSB3bTk3MTMubwogCiBvYmotJChDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDKQkrPSBzbmQtc29jLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUQxOTgwKQkrPSBzbmQtc29jLWFkMTk4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDczMzExKSArPSBzbmQtc29jLWFkNzMzMTEubworb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0MTA0KQkrPSBzbmQtc29jLWFrNDEwNC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ1MzUpCSs9IHNuZC1zb2MtYWs0NTM1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDI3MCkJKz0gc25kLXNvYy1jczQyNzAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTDMpCSs9IHNuZC1zb2MtbDMubwpAQCAtNDEsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfVURBMTM0WCkJKz0gc25kLXNvYy11ZGExMzR4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1VEQTEzODApCSs9IHNuZC1zb2MtdWRhMTM4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTgzNTApCSs9IHNuZC1zb2Mtd204MzUwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODQwMCkJKz0gc25kLXNvYy13bTg0MDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NTEwKQkrPSBzbmQtc29jLXdtODUxMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg1ODApCSs9IHNuZC1zb2Mtd204NTgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODcyOCkJKz0gc25kLXNvYy13bTg3MjgubwpAQCAtNTEsNSArNTYsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAzKQkrPSBzbmQtc29jLXdtODkwMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzEpCSs9IHNuZC1zb2Mtd204OTcxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5MCkJKz0gc25kLXNvYy13bTg5OTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkxKQkrPSBzbmQtc29jLXdtODk5MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MDUpCSs9IHNuZC1zb2Mtd205NzA1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcxMikJKz0gc25kLXNvYy13bTk3MTIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEzKQkrPSBzbmQtc29jLXdtOTcxMy5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCmluZGV4IGZiNTNlNjUuLmIwZDRhZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCkBAIC0zMCw3ICszMCw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpbnQgcmVnID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spID8KIAkJICBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSA6IEFDOTdfUENNX0xSX0FEQ19SQVRFOwpAQCAtNDEsNiArNDEsMTAgQEAKIAkJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8XAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWM5N19kYWlfb3BzID0geworCS5wcmVwYXJlCT0gYWM5N19wcmVwYXJlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFjOTdfZGFpID0gewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCiAJLmFjOTdfY29udHJvbCA9IDEsCkBAIC01Niw4ICs2MCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBTVERfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19wcmVwYXJlLH0sCisJLm9wcyA9ICZhYzk3X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYWM5N19kYWkpOwogCkBAIC04NCwxMCArODcsMTAgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIkFDOTcgU29DIEF1ZGlvIENvZGVjICVzXG4iLCBBQzk3X1ZFUlNJT04pOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzb2NkZXYtPmNvZGVjKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmICghc29jZGV2LT5jYXJkLT5jb2RlYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPm5hbWUgPSAiQUM5NyI7CkBAIC0xMjMsMjMgKzEyNiwyMSBAQAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAKIGVycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjLT5yZWdfY2FjaGUpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWM5N19zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoIWNvZGVjKQogCQlyZXR1cm4gMDsKIAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYy0+cmVnX2NhY2hlKTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ5LDcgKzE1MCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXNuZF9hYzk3X3N1c3BlbmQoc29jZGV2LT5jb2RlYy0+YWM5Nyk7CisJc25kX2FjOTdfc3VzcGVuZChzb2NkZXYtPmNhcmQtPmNvZGVjLT5hYzk3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU4LDcgKzE1OSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXNuZF9hYzk3X3Jlc3VtZShzb2NkZXYtPmNvZGVjLT5hYzk3KTsKKwlzbmRfYWM5N19yZXN1bWUoc29jZGV2LT5jYXJkLT5jb2RlYy0+YWM5Nyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCmluZGV4IDczZmRiYjQuLmRkYjNiMDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYwpAQCAtOTMsMjAgKzkzLDYgQEAKIFNPQ19TSU5HTEUoIk1pYyBCb29zdCBTd2l0Y2giLCBBQzk3X01JQywgNiwgMSwgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWQxOTgwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkMTk4MF9zbmRfYWM5N19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwgc25kX3NvY19jbmV3KAotCQkJCSZhZDE5ODBfc25kX2FjOTdfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWM5N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAl1bnNpZ25lZCBpbnQgcmVnKQogewpAQCAtMTIzLDcgKzEwOSw3IEBACiAJZGVmYXVsdDoKIAkJcmVnID0gcmVnID4+IDE7CiAKLQkJaWYgKHJlZyA+PSAoQVJSQVlfU0laRShhZDE5ODBfcmVnKSkpCisJCWlmIChyZWcgPj0gQVJSQVlfU0laRShhZDE5ODBfcmVnKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXJldHVybiBjYWNoZVtyZWddOwpAQCAtMTM3LDcgKzEyMyw3IEBACiAKIAlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKLQlpZiAocmVnIDwgKEFSUkFZX1NJWkUoYWQxOTgwX3JlZykpKQorCWlmIChyZWcgPCBBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKQogCQljYWNoZVtyZWddID0gdmFsOwogCiAJcmV0dXJuIDA7CkBAIC0yMDAsMTAgKzE4NiwxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQUQxOTgwIFNvQyBBdWRpbyBDb2RlY1xuIik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc29jZGV2LT5jb2RlYyA9PSBOVUxMKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5yZWdfY2FjaGUgPQpAQCAtMjY5LDcgKzI1NSw4IEBACiAJZXh0X3N0YXR1cyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLCBleHRfc3RhdHVzJn4weDM4MDApOwogCi0JYWQxOTgwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFkMTk4MF9zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFkMTk4MF9zbmRfYWM5N19jb250cm9scykpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhZDE5ODA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKQEAgLTI4OCwxNSArMjc1LDE1IEBACiAJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAKIGNhY2hlX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkMTk4MF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCmluZGV4IGIwOTI4OWEuLmU2MWRhYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCkBAIC01Myw3ICs1Myw3IEBACiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJY29kZWMtPmRhaSA9ICZhZDczMzExX2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIApAQCAtNzUsMTUgKzc1LDE1IEBACiByZWdpc3Rlcl9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIHBjbV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhZDczMzExX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKaW5kZXggNTA3Y2UwYy4uNTY5NTczZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKQEAgLTcwLDcgKzcwLDcgQEAKICNkZWZpbmUgUkVHRF9JR1MoeCkJCSh4ICYgMHg3KQogI2RlZmluZSBSRUdEX1JNT0QJCSgxIDw8IDMpCiAjZGVmaW5lIFJFR0RfT0dTKHgpCQkoKHggJiAweDcpIDw8IDQpCi0jZGVmaW5lIFJFR0RfTVVURQkJKHggPDwgNykKKyNkZWZpbmUgUkVHRF9NVVRFCQkoMSA8PCA3KQogCiAvKiBDb250cm9sIHJlZ2lzdGVyIEUgKi8KICNkZWZpbmUgQ1RSTF9SRUdfRQkoNCA8PCA4KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0N2JjNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBBSzQxMDQgQUxTQSBTb0MgKEFTb0MpIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisKKyNpbmNsdWRlICJhazQxMDQuaCIKKworLyogQUs0MTA0IHJlZ2lzdGVycyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQUs0MTA0X1JFR19DT05UUk9MMQkJMHgwMAorI2RlZmluZSBBSzQxMDRfUkVHX1JFU0VSVkVECQkweDAxCisjZGVmaW5lIEFLNDEwNF9SRUdfQ09OVFJPTDIJCTB4MDIKKyNkZWZpbmUgQUs0MTA0X1JFR19UWAkJCTB4MDMKKyNkZWZpbmUgQUs0MTA0X1JFR19DSE5fU1RBVFVTKHgpCSgoeCkgKyAweDA0KQorI2RlZmluZSBBSzQxMDRfTlVNX1JFR1MJCQkxMAorCisjZGVmaW5lIEFLNDEwNF9SRUdfTUFTSwkJCTB4MWYKKyNkZWZpbmUgQUs0MTA0X1JFQUQJCQkweGMwCisjZGVmaW5lIEFLNDEwNF9XUklURQkJCTB4ZTAKKyNkZWZpbmUgQUs0MTA0X1JFU0VSVkVEX1ZBTAkJMHg1YgorCisvKiBCaXQgbWFza3MgZm9yIEFLNDEwNCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX1JTVE4JCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9QVwkJKDEgPDwgMSkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX0RJRjAJCSgxIDw8IDIpCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9ESUYxCQkoMSA8PCAzKQorCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMl9TRUwwCQkoMSA8PCAwKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDJfU0VMMQkJKDEgPDwgMSkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wyX01PREUJCSgxIDw8IDIpCisKKyNkZWZpbmUgQUs0MTA0X1RYX1RYRQkJCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9UWF9WCQkJKDEgPDwgMSkKKworI2RlZmluZSBEUlZfTkFNRSAiYWs0MTA0IgorCitzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXU4IHJlZ19jYWNoZVtBSzQxMDRfTlVNX1JFR1NdOworfTsKKworc3RhdGljIGludCBhazQxMDRfZmlsbF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplOyBpKyspIHsKKwkJaW50IHJldCA9IHNwaV93OHI4KHNwaSwgaSB8IEFLNDEwNF9SRUFEKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiU1BJIHdyaXRlIGZhaWx1cmVcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJlZ19jYWNoZVtpXSA9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhazQxMDRfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCit7CisJdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmVnX2NhY2hlW3JlZ107Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X3NwaV93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgJj0gQUs0MTA0X1JFR19NQVNLOworCXJlZyB8PSBBSzQxMDRfV1JJVEU7CisKKwkvKiBvbmx5IHdyaXRlIHRvIHRoZSBoYXJkd2FyZSBpZiB2YWx1ZSBoYXMgY2hhbmdlZCAqLworCWlmIChjYWNoZVtyZWddICE9IHZhbHVlKSB7CisJCXU4IHRtcFsyXSA9IHsgcmVnLCB2YWx1ZSB9OworCQlpZiAoc3BpX3dyaXRlKHNwaSwgdG1wLCBzaXplb2YodG1wKSkpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiU1BJIHdyaXRlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMDRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IHZhbCA9IDA7CisKKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJdmFsICY9IH4oQUs0MTA0X0NPTlRST0wxX0RJRjAgfCBBSzQxMDRfQ09OVFJPTDFfRElGMSk7CisKKwkvKiBzZXQgREFJIGZvcm1hdCAqLworCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX0RJRjA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX0RJRjAgfCBBSzQxMDRfQ09OVFJPTDFfRElGMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaW52YWxpZCBkYWkgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhpcyBkZXZpY2UgY2FuIG9ubHkgYmUgc2xhdmUgKi8KKwlpZiAoKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSAhPSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxLCB2YWwpOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgdmFsID0gMDsKKworCS8qIHNldCB0aGUgSUVDOTU4IGJpdHM6IGNvbnN1bWVyIG1vZGUsIG5vIGNvcHlyaWdodCBiaXQgKi8KKwl2YWwgfD0gSUVDOTU4X0FFUzBfQ09OX05PVF9DT1BZUklHSFQ7CisJYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DSE5fU1RBVFVTKDApLCB2YWwpOworCisJdmFsID0gMDsKKworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgNDQxMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfNDgwMDA7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfMzIwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgInVuc3VwcG9ydGVkIHNhbXBsaW5nIHJhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DSE5fU1RBVFVTKDMpLCB2YWwpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhazQxMDFfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gYWs0MTA0X2h3X3BhcmFtcywKKwkuc2V0X2ZtdCA9IGFrNDEwNF9zZXRfZGFpX2ZtdCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBhazQxMDRfZGFpID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkgU05EUlZfUENNX1JBVEVfMzIwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgIHwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQorCX0sCisJLm9wcyA9ICZhazQxMDFfZGFpX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqYWs0MTA0X2NvZGVjOworCitzdGF0aWMgaW50IGFrNDEwNF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IGFrNDEwNF9wcml2YXRlICphazQxMDQ7CisJaW50IHJldCwgdmFsOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKwlzcGktPm1vZGUgPSBTUElfTU9ERV8wOworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWs0MTA0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFrNDEwNF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhazQxMDQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgY29kZWNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYyA9ICZhazQxMDQtPmNvZGVjOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OworCWNvZGVjLT5uYW1lID0gRFJWX05BTUU7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZhazQxMDRfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gYWs0MTA0OworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisJY29kZWMtPnJlZ19jYWNoZSA9IGFrNDEwNC0+cmVnX2NhY2hlOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFLNDEwNF9OVU1fUkVHUzsKKworCS8qIHJlYWQgYWxsIHJlZ3MgYW5kIGZpbGwgdGhlIGNhY2hlICovCisJcmV0ID0gYWs0MTA0X2ZpbGxfY2FjaGUoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHJlYWQgdGhlICdyZXNlcnZlZCcgcmVnaXN0ZXIgLSBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldCwgaXQKKwkgKiBzaG91bGQgY29udGFpbiAweDViLiBOb3QgYSBnb29kIHdheSB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mCisJICogdGhlIGRldmljZSwgYnV0IHRoZXJlIGlzIG5vIGhhcmR3YXJlIElEIHJlZ2lzdGVyLiAqLworCWlmIChhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfUkVTRVJWRUQpICE9CisJCQkJCSBBSzQxMDRfUkVTRVJWRURfVkFMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwkvKiBzZXQgcG93ZXItdXAgYW5kIG5vbi1yZXNldCBiaXRzICovCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxKTsKKwl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX1BXIHwgQUs0MTA0X0NPTlRST0wxX1JTVE47CisJcmV0ID0gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCisJLyogZW5hYmxlIHRyYW5zbWl0dGVyICovCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX1RYKTsKKwl2YWwgfD0gQUs0MTA0X1RYX1RYRTsKKwlyZXQgPSBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX1RYLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisKKwlhazQxMDRfY29kZWMgPSBjb2RlYzsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmYWs0MTA0X2RhaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgREFJXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGFrNDEwNCk7CisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiU1BJIGRldmljZSBpbml0aWFsaXplZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX2ZyZWVfY29kZWM6CisJa2ZyZWUoYWs0MTA0KTsKKwlhazQxMDRfZGFpLmRldiA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWs0MTA0X3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0LCB2YWw7CisJc3RydWN0IGFrNDEwNF9wcml2YXRlICphazQxMDQgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKworCXZhbCA9IGFrNDEwNF9yZWFkX3JlZ19jYWNoZSgmYWs0MTA0LT5jb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwkvKiBjbGVhciBwb3dlci11cCBhbmQgbm9uLXJlc2V0IGJpdHMgKi8KKwl2YWwgJj0gfihBSzQxMDRfQ09OVFJPTDFfUFcgfCBBSzQxMDRfQ09OVFJPTDFfUlNUTik7CisJcmV0ID0gYWs0MTA0X3NwaV93cml0ZSgmYWs0MTA0LT5jb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWFrNDEwNF9jb2RlYyA9IE5VTEw7CisJa2ZyZWUoYWs0MTA0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMDRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGFrNDEwNF9jb2RlYzsKKwlpbnQgcmV0OworCisJLyogQ29ubmVjdCB0aGUgY29kZWMgdG8gdGhlIHNvY2Rldi4gIHNuZF9zb2NfbmV3X3BjbXMoKSBuZWVkcyB0aGlzLiAqLworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKKworCS8qIFJlZ2lzdGVyIFBDTXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHNvY2RldiAqLworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJcmV0dXJuIDA7Cit9OworCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2RldmljZV9hazQxMDQgPSB7CisJLnByb2JlID0gCWFrNDEwNF9wcm9iZSwKKwkucmVtb3ZlID0gCWFrNDEwNF9yZW1vdmUKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2aWNlX2FrNDEwNCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhazQxMDRfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgICA9IERSVl9OQU1FLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgID0gYWs0MTA0X3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWs0MTA0X3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWs0MTA0X2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCJBc2FoaSBLYXNlaSBBSzQxMDQgQUxTQSBTb0MgQ29kZWMgRHJpdmVyXG4iKTsKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWs0MTA0X3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWs0MTA0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWs0MTA0X2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFrNDEwNF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFrNDEwNF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXNhaGkgS2FzZWkgQUs0MTA0IEFMU0EgU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5oIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg4ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0FLNDEwNF9ICisjZGVmaW5lIF9BSzQxMDRfSAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGFrNDEwNF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZpY2VfYWs0MTA0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCmluZGV4IDgxMzAwZDhkLi4xZjYzZDM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKQEAgLTE1NSwyMSArMTU1LDYgQEAKIAlTT0NfU0lOR0xFKCJNaWMgU2lkZXRvbmUgVm9sdW1lIiwgQUs0NTM1X1ZPTCwgNCwgNywgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWs0NTM1X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFrNDUzNV9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJmFrNDUzNV9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogTW9ubyAxIE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWs0NTM1X21vbm8xX21peGVyX2NvbnRyb2xzW10gPSB7CiAJU09DX0RBUE1fU0lOR0xFKCJNaWMgU2lkZXRvbmUgU3dpdGNoIiwgQUs0NTM1X1NJRzEsIDQsIDEsIDApLApAQCAtMzQ0LDcgKzMyOSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhazQ1MzVfcHJpdiAqYWs0NTM1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBtb2RlMiA9IGFrNDUzNV9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0NTM1X01PREUyKSAmIH4oMHgzIDw8IDUpOwogCWludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKSwgZnMgPSAyNTY7CkBAIC00MzYsNiArNDIxLDEzIEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfFwKIAkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWs0NTM1X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGFrNDUzNV9od19wYXJhbXMsCisJLnNldF9mbXQJPSBhazQ1MzVfc2V0X2RhaV9mbXQsCisJLmRpZ2l0YWxfbXV0ZQk9IGFrNDUzNV9tdXRlLAorCS5zZXRfc3lzY2xrCT0gYWs0NTM1X3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFrNDUzNV9kYWkgPSB7CiAJLm5hbWUgPSAiQUs0NTM1IiwKIAkucGxheWJhY2sgPSB7CkBAIC00NTAsMTkgKzQ0MiwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQUs0NTM1X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IGFrNDUzNV9od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gYWs0NTM1X3NldF9kYWlfZm10LAotCQkuZGlnaXRhbF9tdXRlID0gYWs0NTM1X211dGUsCi0JCS5zZXRfc3lzY2xrID0gYWs0NTM1X3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZhazQ1MzVfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhazQ1MzVfZGFpKTsKIAogc3RhdGljIGludCBhazQ1MzVfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNDcxLDcgKzQ1OCw3IEBACiBzdGF0aWMgaW50IGFrNDUzNV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlhazQ1MzVfc3luYyhjb2RlYyk7CiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKQEAgLTQ4NCw3ICs0NzEsNyBAQAogICovCiBzdGF0aWMgaW50IGFrNDUzNV9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIkFLNDUzNSI7CkBAIC01MTAsNyArNDk3LDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCWFrNDUzNV9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhazQ1MzVfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWs0NTM1X3NuZF9jb250cm9scykpOwogCWFrNDUzNV9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNTM3LDcgKzUyNSw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gYWs0NTM1X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTYzNiw3ICs2MjQsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBhazQ1MzU7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtNjYzLDcgKzY1MSw3IEBACiBzdGF0aWMgaW50IGFrNDUzNV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKaW5kZXggZjFhYTBjMy4uN2ZhMDlhMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCkBAIC0zLDI3ICszLDIyIEBACiAgKgogICogQXV0aG9yOiBUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcworICogcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyCisgKiBleHByZXNzIG9yIGltcGxpZWQuCiAgKgogICogVGhpcyBpcyBhbiBBU29DIGRldmljZSBkcml2ZXIgZm9yIHRoZSBDaXJydXMgTG9naWMgQ1M0MjcwIGNvZGVjLgogICoKICAqIEN1cnJlbnQgZmVhdHVyZXMvbGltaXRhdGlvbnM6CiAgKgotICogMSkgU29mdHdhcmUgbW9kZSBpcyBzdXBwb3J0ZWQuICBTdGFuZC1hbG9uZSBtb2RlIGlzIGF1dG9tYXRpY2FsbHkKLSAqICAgIHNlbGVjdGVkIGlmIEkyQyBpcyBkaXNhYmxlZCBvciBpZiBhIENTNDI3MCBpcyBub3QgZm91bmQgb24gdGhlIEkyQwotICogICAgYnVzLiAgSG93ZXZlciwgc3RhbmQtYWxvbmUgbW9kZSBpcyBvbmx5IHBhcnRpYWxseSBpbXBsZW1lbnRlZCBiZWNhdXNlCi0gKiAgICB0aGVyZSBpcyBubyBtZWNoYW5pc20geWV0IGZvciB0aGlzIGRyaXZlciBhbmQgdGhlIG1hY2hpbmUgZHJpdmVyIHRvCi0gKiAgICBjb21tdW5pY2F0ZSB0aGUgdmFsdWVzIG9mIHRoZSBNMCwgTTEsIE1DTEsxLCBhbmQgTUNMSzIgcGlucy4KLSAqIDIpIE9ubHkgSTJDIGlzIHN1cHBvcnRlZCwgbm90IFNQSQotICogMykgT25seSBNYXN0ZXIgbW9kZSBpcyBzdXBwb3J0ZWQsIG5vdCBTbGF2ZS4KLSAqIDQpIFRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiBtdXN0IGNhbGwKLSAqICAgIGNzNDI3MF9zZXRfZGFpX3N5c2NsaygpIHdpdGggdGhlIHZhbHVlIG9mIE1DTEsuCi0gKiA1KSBPbmx5IEkyUyBhbmQgbGVmdC1qdXN0aWZpZWQgbW9kZXMgYXJlIHN1cHBvcnRlZAotICogNikgUG93ZXIgbWFuYWdlbWVudCBpcyBub3Qgc3VwcG9ydGVkCi0gKiA3KSBUaGUgb25seSBzdXBwb3J0ZWQgY29udHJvbCBpcyB2b2x1bWUgYW5kIGhhcmR3YXJlIG11dGUgKGlmIGVuYWJsZWQpCisgKiAtIFNvZnR3YXJlIG1vZGUgaXMgc3VwcG9ydGVkLiAgU3RhbmQtYWxvbmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLgorICogLSBPbmx5IEkyQyBpcyBzdXBwb3J0ZWQsIG5vdCBTUEkKKyAqIC0gU3VwcG9ydCBmb3IgbWFzdGVyIGFuZCBzbGF2ZSBtb2RlCisgKiAtIFRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiBtdXN0IGNhbGwKKyAqICAgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgd2l0aCB0aGUgdmFsdWUgb2YgTUNMSy4KKyAqIC0gT25seSBJMlMgYW5kIGxlZnQtanVzdGlmaWVkIG1vZGVzIGFyZSBzdXBwb3J0ZWQKKyAqIC0gUG93ZXIgbWFuYWdlbWVudCBpcyBub3Qgc3VwcG9ydGVkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzUsMTggKzMwLDYgQEAKIAogI2luY2x1ZGUgImNzNDI3MC5oIgogCi0vKiBJZiBJMkMgaXMgZGVmaW5lZCwgdGhlbiB3ZSBzdXBwb3J0IHNvZnR3YXJlIG1vZGUuICBIb3dldmVyLCBpZiB3ZSdyZQotICAgbm90IGNvbXBpbGVkIGFzIG1vZHVsZSBidXQgSTJDIGlzLCB0aGVuIHdlIGNhbid0IHVzZSBJMkMgY2FsbHMuICovCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotI2RlZmluZSBVU0VfSTJDCi0jZW5kaWYKLQotLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgQ1M0MjcwICovCi1zdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgewotCXVuc2lnbmVkIGludCBtY2xrOyAvKiBJbnB1dCBmcmVxdWVuY3kgb2YgdGhlIE1DTEsgcGluICovCi0JdW5zaWduZWQgaW50IG1vZGU7IC8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCi19OwotCiAvKgogICogVGhlIGNvZGVjIGlzbid0IHJlYWxseSBiaWctZW5kaWFuIG9yIGxpdHRsZS1lbmRpYW4sIHNpbmNlIHRoZSBJMlMKICAqIGludGVyZmFjZSByZXF1aXJlcyBkYXRhIHRvIGJlIHNlbnQgc2VyaWFsbHkgd2l0aCB0aGUgTVNiaXQgZmlyc3QuCkBAIC02MCw4ICs0Myw2IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF8zQkUgfCBcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSAgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9CRSkKIAotI2lmZGVmIFVTRV9JMkMKLQogLyogQ1M0MjcwIHJlZ2lzdGVycyBhZGRyZXNzZXMgKi8KICNkZWZpbmUgQ1M0MjcwX0NISVBJRAkweDAxCS8qIENoaXAgSUQgKi8KICNkZWZpbmUgQ1M0MjcwX1BXUkNUTAkweDAyCS8qIFBvd2VyIENvbnRyb2wgKi8KQEAgLTEyMSw4ICsxMDIsMjIgQEAKICNkZWZpbmUgQ1M0MjcwX01VVEVfREFDX0EJMHgwMQogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQgkweDAyCiAKLS8qCi0gKiBDbG9jayBSYXRpbyBTZWxlY3Rpb24gZm9yIE1hc3RlciBNb2RlIHdpdGggSTJDIGVuYWJsZWQKKy8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIENTNDI3MCAqLworc3RydWN0IGNzNDI3MF9wcml2YXRlIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1OCByZWdfY2FjaGVbQ1M0MjcwX05VTVJFR1NdOworCXVuc2lnbmVkIGludCBtY2xrOyAvKiBJbnB1dCBmcmVxdWVuY3kgb2YgdGhlIE1DTEsgcGluICovCisJdW5zaWduZWQgaW50IG1vZGU7IC8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCisJdW5zaWduZWQgaW50IHNsYXZlX21vZGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBjczQyNzBfbW9kZV9yYXRpb3MgLSBjbG9jayByYXRpbyB0YWJsZXMKKyAqIEByYXRpbzogdGhlIHJhdGlvIG9mIE1DTEsgdG8gdGhlIHNhbXBsZSByYXRlCisgKiBAc3BlZWRfbW9kZTogdGhlIFNwZWVkIE1vZGUgYml0cyB0byBzZXQgaW4gdGhlIE1vZGUgQ29udHJvbCByZWdpc3RlciBmb3IKKyAqICAgICAgICAgICAgICB0aGlzIHJhdGlvCisgKiBAbWNsazogdGhlIFJhdGlvIFNlbGVjdCBiaXRzIHRvIHNldCBpbiB0aGUgTW9kZSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGlzCisgKiAgICAgICAgcmF0aW8KICAqCiAgKiBUaGUgZGF0YSBmb3IgdGhpcyBjaGFydCBpcyB0YWtlbiBmcm9tIFRhYmxlIDUgb2YgdGhlIENTNDI3MCByZWZlcmVuY2UKICAqIG1hbnVhbC4KQEAgLTEzMSwzMSArMTI2LDMwIEBACiAgKiBJdCBpcyBhbHNvIHVzZWQgYnkgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgdG8gdGVsbCBBTFNBIHdoaWNoIHNhbXBsaW5nCiAgKiByYXRlcyB0aGUgQ1M0MjcwIGN1cnJlbnRseSBzdXBwb3J0cy4KICAqCi0gKiBFYWNoIGVsZW1lbnQgaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcyB0byB0aGUgcmF0aW9zIGluIG1jbGtfcmF0aW9zW10uCi0gKiBUaGVzZSB0d28gYXJyYXlzIG5lZWQgdG8gYmUgaW4gc3luYy4KLSAqCi0gKiAnc3BlZWRfbW9kZScgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd3JpdHRlbiB0byB0aGUKKyAqIEBzcGVlZF9tb2RlIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBwYXR0ZXJuIHRvIGJlIHdyaXR0ZW4gdG8gdGhlCiAgKiBNT0RFIGJpdHMgb2YgdGhlIE1vZGUgQ29udHJvbCBSZWdpc3RlcgogICoKLSAqICdtY2xrJyBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3aXJ0ZW4gdG8gdGhlIE1DTEsgYml0cyBvZgorICogQG1jbGsgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd2lydGVuIHRvIHRoZSBNQ0xLIGJpdHMgb2YKICAqIHRoZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIuCiAgKgogICogSW4gc2l0dWF0aW9ucyB3aGVyZSBhIHNpbmdsZSByYXRpbyBpcyByZXByZXNlbnRlZCBieSBtdWx0aXBsZSBzcGVlZAogICogbW9kZXMsIHdlIGZhdm9yIHRoZSBzbG93ZXN0IHNwZWVkLiAgRS5nLCBmb3IgYSByYXRpbyBvZiAxMjgsIHdlIHBpY2sKICAqIGRvdWJsZS1zcGVlZCBpbnN0ZWFkIG9mIHF1YWQtc3BlZWQuICBIb3dldmVyLCB0aGUgQ1M0MjcwIGVycmF0YSBzdGF0ZXMKLSAqIHRoYXQgRGl2aWRlLUJ5LTEuNSBjYW4gY2F1c2UgZmFpbHVyZXMsIHNvIHdlIGF2b2lkIHRoYXQgbW9kZSB3aGVyZQorICogdGhhdCBkaXZpZGUtQnktMS41IGNhbiBjYXVzZSBmYWlsdXJlcywgc28gd2UgYXZvaWQgdGhhdCBtb2RlIHdoZXJlCiAgKiBwb3NzaWJsZS4KICAqCi0gKiBFUlJBVEE6IFRoZXJlIGlzIGFuIGVycmF0YSBmb3IgdGhlIENTNDI3MCB3aGVyZSBkaXZpZGUtYnktMS41IGRvZXMgbm90Ci0gKiB3b3JrIGlmIFZEID0gMy4zVi4gIElmIHRoaXMgZWZmZWN0cyB5b3UsIHNlbGVjdCB0aGUKKyAqIEVycmF0YTogVGhlcmUgaXMgYW4gZXJyYXRhIGZvciB0aGUgQ1M0MjcwIHdoZXJlIGRpdmlkZS1ieS0xLjUgZG9lcyBub3QKKyAqIHdvcmsgaWYgVmQgaXMgMy4zVi4gIElmIHRoaXMgZWZmZWN0cyB5b3UsIHNlbGVjdCB0aGUKICAqIENPTkZJR19TTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQSBLY29uZmlnIG9wdGlvbiwgYW5kIHRoZSBkcml2ZXIgd2lsbAogICogbmV2ZXIgc2VsZWN0IGFueSBzYW1wbGUgcmF0ZXMgdGhhdCByZXF1aXJlIGRpdmlkZS1ieS0xLjUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyB7CiAJdW5zaWduZWQgaW50IHJhdGlvOwogCXU4IHNwZWVkX21vZGU7CiAJdTggbWNsazsKLX0gY3M0MjcwX21vZGVfcmF0aW9zW10gPSB7Cit9OworCitzdGF0aWMgc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyBjczQyNzBfbW9kZV9yYXRpb3NbXSA9IHsKIAl7NjQsIENTNDI3MF9NT0RFXzRYLCBDUzQyNzBfTU9ERV9ESVYxfSwKICNpZm5kZWYgQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBCiAJezk2LCBDUzQyNzBfTU9ERV80WCwgQ1M0MjcwX01PREVfRElWMTV9LApAQCAtMTcyLDM0ICsxNjYsMjcgQEAKIC8qIFRoZSBudW1iZXIgb2YgTUNMSy9MUkNLIHJhdGlvcyBzdXBwb3J0ZWQgYnkgdGhlIENTNDI3MCAqLwogI2RlZmluZSBOVU1fTUNMS19SQVRJT1MJCUFSUkFZX1NJWkUoY3M0MjcwX21vZGVfcmF0aW9zKQogCi0vKgotICogRGV0ZXJtaW5lIHRoZSBDUzQyNzAgc2FtcGxlcyByYXRlcy4KKy8qKgorICogY3M0MjcwX3NldF9kYWlfc3lzY2xrIC0gZGV0ZXJtaW5lIHRoZSBDUzQyNzAgc2FtcGxlcyByYXRlcy4KKyAqIEBjb2RlY19kYWk6IHRoZSBjb2RlYyBEQUkKKyAqIEBjbGtfaWQ6IHRoZSBjbG9jayBJRCAoaWdub3JlZCkKKyAqIEBmcmVxOiB0aGUgTUNMSyBpbnB1dCBmcmVxdWVuY3kKKyAqIEBkaXI6IHRoZSBjbG9jayBkaXJlY3Rpb24gKGlnbm9yZWQpCiAgKgotICogJ2ZyZXEnIGlzIHRoZSBpbnB1dCBmcmVxdWVuY3kgdG8gTUNMSy4gIFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlbGwgdGhlIGNvZGVjIGRyaXZlciB3aGF0IHRoZSBpbnB1dCBNQ0xLCisgKiBmcmVxdWVuY3kgaXMuCiAgKgogICogVGhlIHZhbHVlIG9mIE1DTEsgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIHJhdGVzIGFyZSBzdXBwb3J0ZWQKICAqIGJ5IHRoZSBDUzQyNzAuICBUaGUgcmF0aW8gb2YgTUNMSyAvIEZzIG11c3QgYmUgZXF1YWwgdG8gb25lIG9mIG5pbmUKLSAqIHN1cHBvcnQgdmFsdWVzOiA2NCwgOTYsIDEyOCwgMTkyLCAyNTYsIDM4NCwgNTEyLCA3NjgsIGFuZCAxMDI0LgorICogc3VwcG9ydGVkIHZhbHVlcyAtIDY0LCA5NiwgMTI4LCAxOTIsIDI1NiwgMzg0LCA1MTIsIDc2OCwgYW5kIDEwMjQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBuaW5lIHJhdGlvcyBhbmQgZGV0ZXJtaW5lcyB3aGljaCBvbmVzIG1hdGNoCiAgKiBhIHN0YW5kYXJkIHNhbXBsZSByYXRlLiAgSWYgdGhlcmUncyBhIG1hdGNoLCB0aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBsaXN0Ci0gKiBvZiBzdXBwb3J0IHNhbXBsZSByYXRlcy4KKyAqIG9mIHN1cHBvcnRlZCBzYW1wbGUgcmF0ZXMuCiAgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgbWFjaGluZSBkcml2ZXIncyAnc3RhcnR1cCcgZnVuY3Rpb24sCiAgKiBvdGhlcndpc2UgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHNhbXBsZSByYXRlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaW4KICAqIHRpbWUgZm9yIEFMU0EuCi0gKgotICogTm90ZSB0aGF0IGluIHN0YW5kLWFsb25lIG1vZGUsIHRoZSBzYW1wbGUgcmF0ZSBpcyBkZXRlcm1pbmVkIGJ5IGlucHV0Ci0gKiBwaW5zIE0wLCBNMSwgTURJVjEsIGFuZCBNRElWMi4gIEFsc28gaW4gc3RhbmQtYWxvbmUgbW9kZSwgZGl2aWRlLWJ5LTMKLSAqIGlzIG5vdCBhIHByb2dyYW1tYWJsZSBvcHRpb24uICBIb3dldmVyLCBkaXZpZGUtYnktMyBpcyBub3QgYW4gYXZhaWxhYmxlCi0gKiBvcHRpb24gaW4gc3RhbmQtYWxvbmUgbW9kZS4gIFRoaXMgY2FzZXMgdHdvIHByb2JsZW1zOiBhIHJhdGlvIG9mIDc2OCBpcwotICogbm90IGF2YWlsYWJsZSAoaXQgcmVxdWlyZXMgZGl2aWRlLWJ5LTMpIGFuZCBCKSByYXRpb3MgMTkyIGFuZCAzODQgY2FuCi0gKiBvbmx5IGJlIHNlbGVjdGVkIHdpdGggZGl2aWRlLWJ5LTEuNSwgYnV0IHRoZXJlIGlzIGFuIGVycmF0ZSB0aGF0IG1ha2UKLSAqIHRoaXMgc2VsZWN0aW9uIGRpZmZpY3VsdC4KLSAqCi0gKiBJbiBhZGRpdGlvbiwgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIG1hY2hpbmUKLSAqIGRyaXZlciB3aGF0IHRoZSBpbnB1dCBzZXR0aW5ncyBjYW4gYmUuICBUaGlzIHdvdWxkIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQKLSAqIGZvciBzdGFuZC1hbG9uZSBtb2RlIHRvIHdvcmsuCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQkJCSBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKQEAgLTIyNSw3ICsyMTIsNyBAQAogCXJhdGVzICY9IH5TTkRSVl9QQ01fUkFURV9LTk9UOwogCiAJaWYgKCFyYXRlcykgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImNvdWxkIG5vdCBmaW5kIGEgdmFsaWQgc2FtcGxlIHJhdGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MCw4ICsyMjcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENvbmZpZ3VyZSB0aGUgY29kZWMgZm9yIHRoZSBzZWxlY3RlZCBhdWRpbyBmb3JtYXQKKy8qKgorICogY3M0MjcwX3NldF9kYWlfZm10IC0gY29uZmlndXJlIHRoZSBjb2RlYyBmb3IgdGhlIHNlbGVjdGVkIGF1ZGlvIGZvcm1hdAorICogQGNvZGVjX2RhaTogdGhlIGNvZGVjIERBSQorICogQGZvcm1hdDogYSBTTkRfU09DX0RBSUZNVF94IHZhbHVlIGluZGljYXRpbmcgdGhlIGRhdGEgZm9ybWF0CiAgKgogICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGJpdG1hc2sgb2YgU05EX1NPQ19EQUlGTVRfeCBiaXRzIGFuZCBwcm9ncmFtcyB0aGUKICAqIGNvZGVjIGFjY29yZGluZ2x5LgpAQCAtMjU4LDMyICsyNDcsNDMgQEAKIAlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKKwkvKiBzZXQgREFJIGZvcm1hdCAqLwogCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKIAljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKIAkJY3M0MjcwLT5tb2RlID0gZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0s7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBpbnZhbGlkIERBSSBmb3JtYXRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpbnZhbGlkIGRhaSBmb3JtYXRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJY3M0MjcwLT5zbGF2ZV9tb2RlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQljczQyNzAtPnNsYXZlX21vZGUgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBhbGwgb3RoZXIgbW9kZXMgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAqLwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBBIGxpc3Qgb2YgYWRkcmVzc2VzIG9uIHdoaWNoIHRoaXMgQ1M0MjcwIGNvdWxkIHVzZS4gIEkyQyBhZGRyZXNzZXMgYXJlCi0gKiA3IGJpdHMuICBGb3IgdGhlIENTNDI3MCwgdGhlIHVwcGVyIGZvdXIgYml0cyBhcmUgYWx3YXlzIDEwMDEsIGFuZCB0aGUKLSAqIGxvd2VyIHRocmVlIGJpdHMgYXJlIGRldGVybWluZWQgdmlhIHRoZSBBRDIsIEFEMSwgYW5kIEFEMCBwaW5zCi0gKiAocmVzcGVjdGl2ZWx5KS4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkweDQ4LCAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCBJMkNfQ0xJRU5UX0VORAotfTsKLUkyQ19DTElFTlRfSU5TTU9EOwotCi0vKgotICogUHJlLWZpbGwgdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZS4KKy8qKgorICogY3M0MjcwX2ZpbGxfY2FjaGUgLSBwcmUtZmlsbCB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKgorICogVGhpcyBmdW5jdGlvbiBmaWxscyBpbiB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlIGJ5IHJlYWRpbmcgdGhlIHJlZ2lzdGVyCisgKiB2YWx1ZXMgZnJvbSB0aGUgaGFyZHdhcmUuCisgKgorICogVGhpcyBDUzQyNzAgcmVnaXN0ZXJzIGFyZSBjYWNoZWQgdG8gYXZvaWQgZXhjZXNzaXZlIEkyQyBJL08gb3BlcmF0aW9ucy4KKyAqIEFmdGVyIHRoZSBpbml0aWFsIHJlYWQgdG8gcHJlLWZpbGwgdGhlIGNhY2hlLCB0aGUgQ1M0MjcwIG5ldmVyIHVwZGF0ZXMKKyAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbS4KICAqCiAgKiBXZSB1c2UgdGhlIGF1dG8taW5jcmVtZW50IGZlYXR1cmUgb2YgdGhlIENTNDI3MCB0byByZWFkIGFsbCByZWdpc3RlcnMgaW4KICAqIG9uZSBzaG90LgpAQCAtMjk4LDcgKzI5OCw3IEBACiAJCUNTNDI3MF9GSVJTVFJFRyB8IDB4ODAsIENTNDI3MF9OVU1SRUdTLCBjYWNoZSk7CiAKIAlpZiAobGVuZ3RoICE9IENTNDI3MF9OVU1SRUdTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgcmVhZCBmYWlsdXJlLCBhZGRyPTB4JXhcbiIsCisJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyByZWFkIGZhaWx1cmUsIGFkZHI9MHgleFxuIiwKIAkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zMDYsMTIgKzMwNiwxNyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUmVhZCBmcm9tIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisvKioKKyAqIGNzNDI3MF9yZWFkX3JlZ19jYWNoZSAtIHJlYWQgZnJvbSB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKiBAcmVnOiB0aGUgcmVnaXN0ZXIgdG8gcmVhZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVnaXN0ZXIuICBJdCByZWFkcyBvbmx5IGZyb20KKyAqIHRoZSByZWdpc3RlciBjYWNoZSwgbm90IHRoZSBoYXJkd2FyZSBpdHNlbGYuCiAgKgogICogVGhpcyBDUzQyNzAgcmVnaXN0ZXJzIGFyZSBjYWNoZWQgdG8gYXZvaWQgZXhjZXNzaXZlIEkyQyBJL08gb3BlcmF0aW9ucy4KICAqIEFmdGVyIHRoZSBpbml0aWFsIHJlYWQgdG8gcHJlLWZpbGwgdGhlIGNhY2hlLCB0aGUgQ1M0MjcwIG5ldmVyIHVwZGF0ZXMKLSAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcm5jeSBwcm9ibGVtLgorICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVyZW5jeSBwcm9ibGVtLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJdW5zaWduZWQgaW50IHJlZykKQEAgLTMyNCw4ICszMjksMTEgQEAKIAlyZXR1cm4gY2FjaGVbcmVnIC0gQ1M0MjcwX0ZJUlNUUkVHXTsKIH0KIAotLyoKLSAqIFdyaXRlIHRvIGEgQ1M0MjcwIHJlZ2lzdGVyIHZpYSB0aGUgSTJDIGJ1cy4KKy8qKgorICogY3M0MjcwX2kyY193cml0ZSAtIHdyaXRlIHRvIGEgQ1M0MjcwIHJlZ2lzdGVyIHZpYSB0aGUgSTJDIGJ1cy4KKyAqIEBjb2RlYzogdGhlIGNvZGVjIGZvciB0aGlzIENTNDI3MAorICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHdyaXRlCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGdpdmVuIENTNDI3MCByZWdpc3RlciwgYW5kCiAgKiBhbHNvIHVwZGF0ZXMgdGhlIHJlZ2lzdGVyIGNhY2hlLgpAQCAtMzQ2LDcgKzM1NCw3IEBACiAJaWYgKGNhY2hlW3JlZyAtIENTNDI3MF9GSVJTVFJFR10gIT0gdmFsdWUpIHsKIAkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtMzU3LDExICszNjUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFByb2dyYW0gdGhlIENTNDI3MCB3aXRoIHRoZSBnaXZlbiBoYXJkd2FyZSBwYXJhbWV0ZXJzLgorLyoqCisgKiBjczQyNzBfaHdfcGFyYW1zIC0gcHJvZ3JhbSB0aGUgQ1M0MjcwIHdpdGggdGhlIGdpdmVuIGhhcmR3YXJlIHBhcmFtZXRlcnMuCisgKiBAc3Vic3RyZWFtOiB0aGUgYXVkaW8gc3RyZWFtCisgKiBAcGFyYW1zOiB0aGUgaGFyZHdhcmUgcGFyYW1ldGVycyB0byBzZXQKKyAqIEBkYWk6IHRoZSBTT0MgREFJIChpZ25vcmVkKQogICoKLSAqIFRoZSAub3BzIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBwcm92aWRlIGJvYXJkLXNwZWNpZmljIGRhdGEsIGxpa2UKLSAqIGlucHV0IGZyZXF1ZW5jaWVzLCB0byB0aGlzIGRyaXZlci4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhhdCBpbmZvcm1hdGlvbiwKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIGhhcmR3YXJlIHdpdGggdGhlIHZhbHVlcyBwcm92aWRlZC4KKyAqIFNwZWNpZmljYWxseSwgdGhlIHNhbXBsZSByYXRlIGFuZCB0aGUgZGF0YSBmb3JtYXQuCisgKgorICogVGhlIC5vcHMgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHByb3ZpZGUgYm9hcmQtc3BlY2lmaWMgZGF0YSwgbGlrZSBpbnB1dAorICogZnJlcXVlbmNpZXMsIHRvIHRoaXMgZHJpdmVyLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGF0IGluZm9ybWF0aW9uLAogICogY29tYmluZXMgaXQgd2l0aCB0aGUgaGFyZHdhcmUgcGFyYW1ldGVycyBwcm92aWRlZCwgYW5kIHByb2dyYW1zIHRoZQogICogaGFyZHdhcmUgYWNjb3JkaW5nbHkuCiAgKi8KQEAgLTM3MSw3ICszODUsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTM5MSwzMyArNDA1LDI4IEBACiAKIAlpZiAoaSA9PSBOVU1fTUNMS19SQVRJT1MpIHsKIAkJLyogV2UgZGlkIG5vdCBmaW5kIGEgbWF0Y2hpbmcgcmF0aW8gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIHJhdGlvXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgbWF0Y2hpbmcgcmF0aW9cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBGcmVlemUgYW5kIHBvd2VyLWRvd24gdGhlIGNvZGVjICovCi0KLQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCBDUzQyNzBfUFdSQ1RMX0ZSRUVaRSB8Ci0JCQkgICAgQ1M0MjcwX1BXUkNUTF9QRE5fQURDIHwgQ1M0MjcwX1BXUkNUTF9QRE5fREFDIHwKLQkJCSAgICBDUzQyNzBfUFdSQ1RMX1BETik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFByb2dyYW0gdGhlIG1vZGUgY29udHJvbCByZWdpc3RlciAqLworCS8qIFNldCB0aGUgc2FtcGxlIHJhdGUgKi8KIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX01PREUpOwogCXJlZyAmPSB+KENTNDI3MF9NT0RFX1NQRUVEX01BU0sgfCBDUzQyNzBfTU9ERV9ESVZfTUFTSyk7Ci0JcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5zcGVlZF9tb2RlIHwgY3M0MjcwX21vZGVfcmF0aW9zW2ldLm1jbGs7CisJcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5tY2xrOworCisJaWYgKGNzNDI3MC0+c2xhdmVfbW9kZSkKKwkJcmVnIHw9IENTNDI3MF9NT0RFX1NMQVZFOworCWVsc2UKKwkJcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5zcGVlZF9tb2RlOwogCiAJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX01PREUsIHJlZyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBQcm9ncmFtIHRoZSBmb3JtYXQgcmVnaXN0ZXIgKi8KKwkvKiBTZXQgdGhlIERBSSBmb3JtYXQgKi8KIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX0ZPUk1BVCk7CiAJcmVnICY9IH4oQ1M0MjcwX0ZPUk1BVF9EQUNfTUFTSyB8IENTNDI3MF9GT1JNQVRfQURDX01BU0spOwpAQCAtNDMwLDU1ICs0MzksMjMgQEAKIAkJcmVnIHw9IENTNDI3MF9GT1JNQVRfREFDX0xKIHwgQ1M0MjcwX0ZPUk1BVF9BRENfTEo7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiB1bmtub3duIGZvcm1hdFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgInVua25vd24gZGFpIGZvcm1hdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9GT1JNQVQsIHJlZyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIERpc2FibGUgYXV0by1tdXRlLiAgVGhpcyBmZWF0dXJlIGFwcGVhcnMgdG8gYmUgYnVnZ3ksIGJlY2F1c2UgaW4KLQkgICBzb21lIHNpdHVhdGlvbnMsIGF1dG8tbXV0ZSB3aWxsIG5vdCBkZWFjdGl2YXRlIHdoZW4gaXQgc2hvdWxkLiAqLwotCi0JcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTVVURSk7Ci0JcmVnICY9IH5DUzQyNzBfTVVURV9BVVRPOwotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWcpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBEaXNhYmxlIGF1dG9tYXRpYyB2b2x1bWUgY29udHJvbC4gIEl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQKLQkgKiBpdCBjYXVzZXMgdm9sdW1lIGNoYW5nZSBjb21tYW5kcyB0byBiZSBkZWxheWVkLCBzb21ldGltZXMgdW50aWwKLQkgKiBhZnRlciBwbGF5YmFjayBoYXMgc3RhcnRlZC4KLQkgKi8KLQotCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX1RSQU5TKTsKLQlyZWcgJj0gfihDUzQyNzBfVFJBTlNfU09GVCB8IENTNDI3MF9UUkFOU19aRVJPKTsKLQlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfVFJBTlMsIHJlZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBUaGF3IGFuZCBwb3dlci11cCB0aGUgY29kZWMgKi8KLQotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9QV1JDVEwsIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19TTkRfU09DX0NTNDI3MF9IV01VVEUKLQotLyoKLSAqIFNldCB0aGUgQ1M0MjcwIGV4dGVybmFsIG11dGUKKy8qKgorICogY3M0MjcwX211dGUgLSBlbmFibGUvZGlzYWJsZSB0aGUgQ1M0MjcwIGV4dGVybmFsIG11dGUKKyAqIEBkYWk6IHRoZSBTT0MgREFJCisgKiBAbXV0ZTogMCA9IGRpc2FibGUgbXV0ZSwgMSA9IGVuYWJsZSBtdXRlCiAgKgogICogVGhpcyBmdW5jdGlvbiB0b2dnbGVzIHRoZSBtdXRlIGJpdHMgaW4gdGhlIE1VVEUgcmVnaXN0ZXIuICBUaGUgQ1M0MjcwJ3MKICAqIG11dGUgY2FwYWJpbGl0eSBpcyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgbXV0aW5nIGNpcmN1aXRyeSwgc28gaWYgdGhlCkBAIC00OTMsMTUwICs0NzAsNDcgQEAKIAlyZWc2ID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTVVURSk7CiAKIAlpZiAobXV0ZSkKLQkJcmVnNiB8PSBDUzQyNzBfTVVURV9BRENfQSB8IENTNDI3MF9NVVRFX0FEQ19CIHwKLQkJCUNTNDI3MF9NVVRFX0RBQ19BIHwgQ1M0MjcwX01VVEVfREFDX0I7CisJCXJlZzYgfD0gQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQjsKIAllbHNlCi0JCXJlZzYgJj0gfihDUzQyNzBfTVVURV9BRENfQSB8IENTNDI3MF9NVVRFX0FEQ19CIHwKLQkJCSAgQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQik7CisJCXJlZzYgJj0gfihDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19CKTsKIAogCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfTVVURSwgcmVnNik7CiB9CiAKLSNlbmRpZgotCi1zdGF0aWMgaW50IGNzNDI3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKiwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKik7Ci0KIC8qIEEgbGlzdCBvZiBub24tREFQTSBjb250cm9scyB0aGF0IHRoZSBDUzQyNzAgc3VwcG9ydHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjczQyNzBfc25kX2NvbnRyb2xzW10gPSB7CiAJU09DX0RPVUJMRV9SKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkJQ1M0MjcwX1ZPTEEsIENTNDI3MF9WT0xCLCAwLCAweEZGLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0gewotCXsiY3M0MjcwIiwgMH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3M0MjcwX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzNDI3MF9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIkNTNDI3MCBJMkMiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5pZF90YWJsZSA9IGNzNDI3MF9pZCwKLQkucHJvYmUgPSBjczQyNzBfaTJjX3Byb2JlLAorCQlDUzQyNzBfVk9MQSwgQ1M0MjcwX1ZPTEIsIDAsIDB4RkYsIDEpLAorCVNPQ19TSU5HTEUoIkRpZ2l0YWwgU2lkZXRvbmUgU3dpdGNoIiwgQ1M0MjcwX0ZPUk1BVCwgNSwgMSwgMCksCisJU09DX1NJTkdMRSgiU29mdCBSYW1wIFN3aXRjaCIsIENTNDI3MF9UUkFOUywgNiwgMSwgMCksCisJU09DX1NJTkdMRSgiWmVybyBDcm9zcyBTd2l0Y2giLCBDUzQyNzBfVFJBTlMsIDUsIDEsIDApLAorCVNPQ19TSU5HTEUoIlBvcGd1YXJkIFN3aXRjaCIsIENTNDI3MF9NT0RFLCAwLCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJBdXRvLU11dGUgU3dpdGNoIiwgQ1M0MjcwX01VVEUsIDUsIDEsIDApLAorCVNPQ19ET1VCTEUoIk1hc3RlciBDYXB0dXJlIFN3aXRjaCIsIENTNDI3MF9NVVRFLCAzLCA0LCAxLCAwKQogfTsKIAogLyoKLSAqIEdsb2JhbCB2YXJpYWJsZSB0byBzdG9yZSBzb2NkZXYgZm9yIGkyYyBwcm9iZSBmdW5jdGlvbi4KKyAqIGNzNDI3MF9jb2RlYyAtIGdsb2JhbCB2YXJpYWJsZSB0byBzdG9yZSBjb2RlYyBmb3IgdGhlIEFTb0MgcHJvYmUgZnVuY3Rpb24KICAqCiAgKiBJZiBzdHJ1Y3QgaTJjX2RyaXZlciBoYWQgYSBwcml2YXRlX2RhdGEgZmllbGQsIHdlIHdvdWxkbid0IG5lZWQgdG8gdXNlCi0gKiBjczQyNzBfc29jZGVjLiAgVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gcGFzcyB0aGUgc29jZGV2IHN0cnVjdHVyZSB0bwotICogY3M0MjcwX2kyY19wcm9iZSgpLgotICoKLSAqIFRoZSByZWFsIHNvbHV0aW9uIHRvIGNzNDI3MF9zb2NkZXYgaXMgdG8gY3JlYXRlIGEgbWVjaGFuaXNtCi0gKiB0aGF0IG1hcHMgSTJDIGFkZHJlc3NlcyB0byBzbmRfc29jX2RldmljZSBzdHJ1Y3R1cmVzLiAgUGVyaGFwcyB0aGUKLSAqIGNyZWF0aW9uIG9mIHRoZSBzbmRfc29jX2RldmljZSBvYmplY3Qgc2hvdWxkIGJlIG1vdmVkIG91dCBvZgotICogY3M0MjcwX3Byb2JlKCkgYW5kIGludG8gY3M0MjcwX2kyY19wcm9iZSgpLCBidXQgdGhhdCB3b3VsZCBtYWtlIHRoaXMKLSAqIGRyaXZlciBkZXBlbmRlbnQgb24gSTJDLiAgVGhlIENTNDI3MCBzdXBwb3J0cyAic3RhbmQtYWxvbmUiIG1vZGUsIHdoZXJlYnkKLSAqIHRoZSBjaGlwIGlzICpub3QqIGNvbm5lY3RlZCB0byB0aGUgSTJDIGJ1cywgYnV0IGlzIGluc3RlYWQgY29uZmlndXJlZCB2aWEKLSAqIGlucHV0IHBpbnMuCisgKiBjczQyNzBfY29kZWMuICBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBwYXNzIHRoZSBjb2RlYyBzdHJ1Y3R1cmUgZnJvbQorICogY3M0MjcwX2kyY19wcm9iZSgpIHRvIGNzNDI3MF9wcm9iZSgpLiAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gZ29vZAorICogd2F5IHRvIHN5bmNocm9uaXplIHRoZXNlIHR3byBmdW5jdGlvbnMuICBjczQyNzBfaTJjX3Byb2JlKCkgY2FuIGJlIGNhbGxlZAorICogbXVsdGlwbGUgdGltZXMgYmVmb3JlIGNzNDI3MF9wcm9iZSgpIGlzIGNhbGxlZCBldmVuIG9uY2UuICBTbyBmb3Igbm93LCB3ZQorICogYWxzbyBvbmx5IGFsbG93IGNzNDI3MF9pMmNfcHJvYmUoKSB0byBiZSBydW4gb25jZS4gIFRoYXQgbWVhbnMgdGhhdCB3ZSBkbworICogbm90IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjczQyNzAgZGV2aWNlIGluIHRoZSBzeXN0ZW0sIGF0IGxlYXN0IGZvciBub3cuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmNzNDI3MF9zb2NkZXY7CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmNzNDI3MF9jb2RlYzsKIAotLyoKLSAqIEluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2Ugb2YgdGhlIENTNDI3MAotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciB3aGVuZXZlciB0aGUgSTJDIHN1YnN5c3RlbSBmaW5kcyBhIGRldmljZQotICogYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MuCi0gKgotICogTm90ZTogc25kX3NvY19uZXdfcGNtcygpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQsCi0gKiBiZWNhdXNlIG9mIHNuZF9jdGxfYWRkKCkuCi0gKi8KLXN0YXRpYyBpbnQgY3M0MjcwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCwKLQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjczQyNzBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBQcm9iaW5nIGFsbCBwb3NzaWJsZSBhZGRyZXNzZXMgaGFzIG9uZSBkcmF3YmFjazogaWYgdGhlcmUgYXJlCi0JICAgbXVsdGlwbGUgQ1M0MjcwcyBvbiB0aGUgYnVzLCB0aGVuIHlvdSBjYW5ub3Qgc3BlY2lmeSB3aGljaAotCSAgIHNvY2RldiBpcyBtYXRjaGVkIHdpdGggd2hpY2ggQ1M0MjcwLiAgRm9yIG5vdywgd2UganVzdCByZWplY3QKLQkgICB0aGlzIEkyQyBkZXZpY2UgaWYgdGhlIHNvY2RldiBhbHJlYWR5IGhhcyBvbmUgYXR0YWNoZWQuICovCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogTm90ZTogY29kZWNfZGFpLT5jb2RlYyBpcyBOVUxMIGhlcmUgKi8KLQotCWNvZGVjLT5yZWdfY2FjaGUgPSBremFsbG9jKENTNDI3MF9OVU1SRUdTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvZGVjLT5yZWdfY2FjaGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGNvdWxkIG5vdCBhbGxvY2F0ZSByZWdpc3RlciBjYWNoZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIENTNDI3MCAqLwotCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyY19jbGllbnQsIENTNDI3MF9DSElQSUQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gcmVhZCBJMkNcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBUaGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgY2hpcCBJRCBzaG91bGQgYmUgMTEwMC4gKi8KLQlpZiAoKHJldCAmIDB4RjApICE9IDB4QzApIHsKLQkJLyogVGhlIGRldmljZSBhdCB0aGlzIGFkZHJlc3MgaXMgbm90IGEgQ1M0MjcwIGNvZGVjICovCi0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBmb3VuZCBkZXZpY2UgYXQgSTJDIGFkZHJlc3MgJVhcbiIsCi0JCWkyY19jbGllbnQtPmFkZHIpOwotCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogaGFyZHdhcmUgcmV2aXNpb24gJVhcbiIsIHJldCAmIDB4Rik7Ci0KLQljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjX2NsaWVudDsKLQljb2RlYy0+cmVhZCA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSBjczQyNzBfaTJjX3dyaXRlOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IENTNDI3MF9OVU1SRUdTOwotCi0JLyogVGhlIEkyQyBpbnRlcmZhY2UgaXMgc2V0IHVwLCBzbyBwcmUtZmlsbCBvdXIgcmVnaXN0ZXIgY2FjaGUgKi8KLQotCXJldCA9IGNzNDI3MF9maWxsX2NhY2hlKGNvZGVjKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIEFkZCB0aGUgbm9uLURBUE0gY29udHJvbHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNzNDI3MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwgPQotCQlzbmRfc29jX2NuZXcoJmNzNDI3MF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKTsKLQotCQlyZXQgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwga2N0cmwpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JfQotCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyY19jbGllbnQsIGNvZGVjKTsKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQljb2RlYy0+Y29udHJvbF9kYXRhID0gTlVMTDsKLQotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IDA7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogVVNFX0kyQyovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBjczQyNzBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gY3M0MjcwX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IGNzNDI3MF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IGNzNDI3MF9zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlCT0gY3M0MjcwX211dGUsCit9OwogCiBzdHJ1Y3Qgc25kX3NvY19kYWkgY3M0MjcwX2RhaSA9IHsKLQkubmFtZSA9ICJDUzQyNzAiLAorCS5uYW1lID0gImNzNDI3MCIsCiAJLnBsYXliYWNrID0gewogCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMSwKQEAgLTY1MSwxMTggKzUyNSwyNTEgQEAKIAkJLnJhdGVzID0gMCwKIAkJLmZvcm1hdHMgPSBDUzQyNzBfRk9STUFUUywKIAl9LAorCS5vcHMgPSAmY3M0MjcwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoY3M0MjcwX2RhaSk7CiAKLS8qCi0gKiBBU29DIHByb2JlIGZ1bmN0aW9uCisvKioKKyAqIGNzNDI3MF9wcm9iZSAtIEFTb0MgcHJvYmUgZnVuY3Rpb24KKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBtYWNoaW5lIGRyaXZlciBjYWxscwotICogcGxhdGZvcm1fZGV2aWNlX2FkZCgpLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBBU29DIGhhcyBhbGwgdGhlIHBpZWNlcyBpdCBuZWVkcyB0bworICogaW5zdGFudGlhdGUgYSBzb3VuZCBkcml2ZXIuCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOworCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJDUzQyNzAgQUxTQSBTb0MgQ29kZWNcbiIpOwotCi0JLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgc25kX3NvY19jb2RlYyBzdHJ1Y3R1cmUKLQkgICBhbmQgb3VyIHByaXZhdGUgZGF0YSB0b2dldGhlci4gKi8KLQljb2RlYyA9IGt6YWxsb2MoQUxJR04oc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgNCkgKwotCQkJc2l6ZW9mKHN0cnVjdCBjczQyNzBfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghY29kZWMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IENvdWxkIG5vdCBhbGxvY2F0ZSBjb2RlYyBzdHJ1Y3R1cmVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwotCi0JY29kZWMtPm5hbWUgPSAiQ1M0MjcwIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+ZGFpID0gJmNzNDI3MF9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBjb2RlYyArCi0JCUFMSUdOKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIDQpOwotCi0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCS8qIENvbm5lY3QgdGhlIGNvZGVjIHRvIHRoZSBzb2NkZXYuICBzbmRfc29jX25ld19wY21zKCkgbmVlZHMgdGhpcy4gKi8KKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAKIAkvKiBSZWdpc3RlciBQQ01zICovCi0KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gY3JlYXRlIFBDTXNcbiIpOwotCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCXJldHVybiByZXQ7CiAJfQogCi0jaWZkZWYgVVNFX0kyQwotCWNzNDI3MF9zb2NkZXYgPSBzb2NkZXY7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byBhdHRhY2ggZHJpdmVyIik7CisJLyogQWRkIHRoZSBub24tREFQTSBjb250cm9scyAqLworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBjczQyNzBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoY3M0MjcwX3NuZF9jb250cm9scykpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBhZGQgY29udHJvbHNcbiIpOwogCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKLQkvKiBEaWQgd2UgZmluZCBhIENTNDI3MCBvbiB0aGUgSTJDIGJ1cz8gKi8KLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkgewotCQkvKiBJbml0aWFsaXplIGNvZGVjIG9wcyAqLwotCQljczQyNzBfZGFpLm9wcy5od19wYXJhbXMgPSBjczQyNzBfaHdfcGFyYW1zOwotCQljczQyNzBfZGFpLm9wcy5zZXRfc3lzY2xrID0gY3M0MjcwX3NldF9kYWlfc3lzY2xrOwotCQljczQyNzBfZGFpLm9wcy5zZXRfZm10ID0gY3M0MjcwX3NldF9kYWlfZm10OwotI2lmZGVmIENPTkZJR19TTkRfU09DX0NTNDI3MF9IV01VVEUKLQkJY3M0MjcwX2RhaS5vcHMuZGlnaXRhbF9tdXRlID0gY3M0MjcwX211dGU7Ci0jZW5kaWYKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBubyBJMkMgZGV2aWNlIGZvdW5kLCAiCi0JCQkidXNpbmcgc3RhbmQtYWxvbmUgbW9kZVxuIik7Ci0jZWxzZQotCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogSTJDIGRpc2FibGVkLCB1c2luZyBzdGFuZC1hbG9uZSBtb2RlXG4iKTsKLSNlbmRpZgotCisJLyogQW5kIGZpbmFsbHksIHJlZ2lzdGVyIHRoZSBzb2NkZXYgKi8KIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7Ci0JCWdvdG8gZXJyb3JfZGVsX2RyaXZlcjsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKIAlyZXR1cm4gMDsKIAotZXJyb3JfZGVsX2RyaXZlcjoKLSNpZmRlZiBVU0VfSTJDCi0JaTJjX2RlbF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKLQogZXJyb3JfZnJlZV9wY21zOgotI2VuZGlmCiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAotZXJyb3JfZnJlZV9jb2RlYzoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKLQogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogY3M0MjcwX3JlbW92ZSAtIEFTb0MgcmVtb3ZlIGZ1bmN0aW9uCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY291bnRlcnBhcnQgdG8gY3M0MjcwX3Byb2JlKCkuCisgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCi0jaWZkZWYgVVNFX0kyQwotCWkyY19kZWxfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7Ci0jZW5kaWYKKwlyZXR1cm4gMDsKK307CiAKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKy8qKgorICogY3M0MjcwX2kyY19wcm9iZSAtIGluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2Ugb2YgdGhlIENTNDI3MAorICogQGkyY19jbGllbnQ6IHRoZSBJMkMgY2xpZW50IG9iamVjdAorICogQGlkOiB0aGUgSTJDIGRldmljZSBJRCAoaWdub3JlZCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgSTJDIHN1YnN5c3RlbSBmaW5kcyBhIGRldmljZSB0aGF0CisgKiBtYXRjaGVzIHRoZSBkZXZpY2UgSUQgZ2l2ZW4gdmlhIGEgcHJpb3IgY2FsbCB0byBpMmNfYWRkX2RyaXZlcigpLgorICovCitzdGF0aWMgaW50IGNzNDI3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQsCisJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCByZXQ7CisKKwkvKiBGb3Igbm93LCB3ZSBvbmx5IHN1cHBvcnQgb25lIGNzNDI3MCBkZXZpY2UgaW4gdGhlIHN5c3RlbS4gIFNlZSB0aGUKKwkgKiBjb21tZW50IGZvciBjczQyNzBfY29kZWMuCisJICovCisJaWYgKGNzNDI3MF9jb2RlYykgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJpZ25vcmluZyBDUzQyNzAgYXQgYWRkciAlWFxuIiwKKwkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJvbmx5IG9uZSBwZXIgYm9hcmQgYWxsb3dlZFxuIik7CisJCS8qIFNob3VsZCB3ZSByZXR1cm4gc29tZXRoaW5nIG90aGVyIHRoYW4gRU5PREVWIGhlcmU/ICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBDUzQyNzAgKi8KKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShpMmNfY2xpZW50LCBDUzQyNzBfQ0hJUElEKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBpMmMgYXQgYWRkciAlWFxuIiwKKwkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBUaGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgY2hpcCBJRCBzaG91bGQgYmUgMTEwMC4gKi8KKwlpZiAoKHJldCAmIDB4RjApICE9IDB4QzApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZGV2aWNlIGF0IGFkZHIgJVggaXMgbm90IGEgQ1M0MjcwXG4iLAorCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9pbmZvKCZpMmNfY2xpZW50LT5kZXYsICJmb3VuZCBkZXZpY2UgYXQgaTJjIGFkZHJlc3MgJVhcbiIsCisJCWkyY19jbGllbnQtPmFkZHIpOworCWRldl9pbmZvKCZpMmNfY2xpZW50LT5kZXYsICJoYXJkd2FyZSByZXZpc2lvbiAlWFxuIiwgcmV0ICYgMHhGKTsKKworCS8qIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHNuZF9zb2NfY29kZWMgc3RydWN0dXJlCisJICAgYW5kIG91ciBwcml2YXRlIGRhdGEgdG9nZXRoZXIuICovCisJY3M0MjcwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNzNDI3MF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjczQyNzApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGNvZGVjXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNvZGVjID0gJmNzNDI3MC0+Y29kZWM7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPmRldiA9ICZpMmNfY2xpZW50LT5kZXY7CisJY29kZWMtPm5hbWUgPSAiQ1M0MjcwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmNzNDI3MF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBjczQyNzA7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyY19jbGllbnQ7CisJY29kZWMtPnJlYWQgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gY3M0MjcwX2kyY193cml0ZTsKKwljb2RlYy0+cmVnX2NhY2hlID0gY3M0MjcwLT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQ1M0MjcwX05VTVJFR1M7CisKKwkvKiBUaGUgSTJDIGludGVyZmFjZSBpcyBzZXQgdXAsIHNvIHByZS1maWxsIG91ciByZWdpc3RlciBjYWNoZSAqLworCisJcmV0ID0gY3M0MjcwX2ZpbGxfY2FjaGUoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCS8qIERpc2FibGUgYXV0by1tdXRlLiAgVGhpcyBmZWF0dXJlIGFwcGVhcnMgdG8gYmUgYnVnZ3kuICBJbiBzb21lCisJICogc2l0dWF0aW9ucywgYXV0by1tdXRlIHdpbGwgbm90IGRlYWN0aXZhdGUgd2hlbiBpdCBzaG91bGQsIHNvIHdlIHdhbnQKKwkgKiB0aGlzIGZlYXR1cmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEFuIGFwcGxpY2F0aW9uIChlLmcuIGFsc2FjdGwpIGNhbgorCSAqIHJlLWVuYWJsZWQgaXQgYnkgdXNpbmcgdGhlIGNvbnRyb2xzLgorCSAqLworCisJcmVnID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBDUzQyNzBfTVVURSk7CisJcmVnICY9IH5DUzQyNzBfTVVURV9BVVRPOworCXJldCA9IGNzNDI3MF9pMmNfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIERpc2FibGUgYXV0b21hdGljIHZvbHVtZSBjb250cm9sLiAgVGhlIGhhcmR3YXJlIGVuYWJsZXMsIGFuZCBpdAorCSAqIGNhdXNlcyB2b2x1bWUgY2hhbmdlIGNvbW1hbmRzIHRvIGJlIGRlbGF5ZWQsIHNvbWV0aW1lcyB1bnRpbCBhZnRlcgorCSAqIHBsYXliYWNrIGhhcyBzdGFydGVkLiAgQW4gYXBwbGljYXRpb24gKGUuZy4gYWxzYWN0bCkgY2FuCisJICogcmUtZW5hYmxlZCBpdCBieSB1c2luZyB0aGUgY29udHJvbHMuCisJICovCisKKwlyZWcgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIENTNDI3MF9UUkFOUyk7CisJcmVnICY9IH4oQ1M0MjcwX1RSQU5TX1NPRlQgfCBDUzQyNzBfVFJBTlNfWkVSTyk7CisJcmV0ID0gY3M0MjcwX2kyY193cml0ZShjb2RlYywgQ1M0MjcwX1RSQU5TLCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIERBSS4gTm9ybWFsbHksIHdlJ2QgcHJlZmVyIHRvIGhhdmUgYSBrbWFsbG9jJ2QgREFJCisJICogc3RydWN0dXJlIGZvciBlYWNoIENTNDI3MCBkZXZpY2UsIGJ1dCB0aGUgbWFjaGluZSBkcml2ZXIgbmVlZHMgdG8KKwkgKiBoYXZlIGEgcG9pbnRlciB0byB0aGUgREFJIHN0cnVjdHVyZSwgc28gZm9yIG5vdyBpdCBtdXN0IGJlIGEgZ2xvYmFsCisJICogdmFyaWFibGUuCisJICovCisJY3M0MjcwX2RhaS5kZXYgPSAmaTJjX2NsaWVudC0+ZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIERBSS4gIElmIGFsbCB0aGUgb3RoZXIgQVNvQyBkcml2ZXIgaGF2ZSBhbHJlYWR5CisJICogcmVnaXN0ZXJlZCwgdGhlbiB0aGlzIHdpbGwgY2FsbCBvdXIgcHJvYmUgZnVuY3Rpb24sIHNvCisJICogY3M0MjcwX2NvZGVjIG5lZWRzIHRvIGJlIHJlYWR5LgorCSAqLworCWNzNDI3MF9jb2RlYyA9IGNvZGVjOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZjczQyNzBfZGFpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgREFJZVxuIik7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCwgY3M0MjcwKTsKKworCXJldHVybiAwOworCitlcnJvcl9mcmVlX2NvZGVjOgorCWtmcmVlKGNzNDI3MCk7CisJY3M0MjcwX2NvZGVjID0gTlVMTDsKKwljczQyNzBfZGFpLmRldiA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGNzNDI3MF9pMmNfcmVtb3ZlIC0gcmVtb3ZlIGFuIEkyQyBkZXZpY2UKKyAqIEBpMmNfY2xpZW50OiB0aGUgSTJDIGNsaWVudCBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3VudGVycGFydCB0byBjczQyNzBfaTJjX3Byb2JlKCkuCisgKi8KK3N0YXRpYyBpbnQgY3M0MjcwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQpCit7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCk7CisKKwlrZnJlZShjczQyNzApOworCWNzNDI3MF9jb2RlYyA9IE5VTEw7CisJY3M0MjcwX2RhaS5kZXYgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBjczQyNzBfaWQgLSBJMkMgZGV2aWNlIElEcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKyAqLworc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0geworCXsiY3M0MjcwIiwgMH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3M0MjcwX2lkKTsKKworLyoKKyAqIGNzNDI3MF9pMmNfZHJpdmVyIC0gSTJDIGRldmljZSBpZGVudGlmaWNhdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIHRlbGxzIHRoZSBJMkMgc3Vic3lzdGVtIGhvdyB0byBpZGVudGlmeSBhbmQgc3VwcG9ydCBhCisgKiBnaXZlbiBJMkMgZGV2aWNlIHR5cGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjczQyNzBfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJjczQyNzAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZF90YWJsZSA9IGNzNDI3MF9pZCwKKwkucHJvYmUgPSBjczQyNzBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBjczQyNzBfaTJjX3JlbW92ZSwKK307CisKKy8qCiAgKiBBU29DIGNvZGVjIGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiBBc3NpZ24gdGhpcyB2YXJpYWJsZSB0byB0aGUgY29kZWNfZGV2IGZpZWxkIG9mIHRoZSBtYWNoaW5lIGRyaXZlcidzCkBAIC03NzYsMTMgKzc4MywxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjczQyNzBfaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmY3M0MjcwX2RhaSk7CisJcHJfaW5mbygiQ2lycnVzIExvZ2ljIENTNDI3MCBBTFNBIFNvQyBDb2RlYyBEcml2ZXJcbiIpOworCisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChjczQyNzBfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjczQyNzBfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmNzNDI3MF9kYWkpOworCWkyY19kZWxfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChjczQyNzBfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzAwOC5jIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKaW5kZXggOWEzZTY3ZS4uNWNkYTllNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKQEAgLTY3LDExICs2NywxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENNMzAwOCBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFBDTTMwMDhfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNvY2Rldi0+Y29kZWMpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NkZXYtPmNhcmQtPmNvZGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5uYW1lID0gIlBDTTMwMDgiOwpAQCAtMTM5LDcgKzEzOSw3IEBACiBjYXJkX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDcsNyArMTQ3LDcgQEAKIHN0YXRpYyBpbnQgcGNtMzAwOF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHBjbTMwMDhfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAKIAlpZiAoIWNvZGVjKQpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIAlwY20zMDA4X2dwaW9fZnJlZShzZXR1cCk7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwppbmRleCBjYWMzNzM2Li44N2Y2MDZjNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKQEAgLTE1MSwyMSArMTUxLDYgQEAKIFNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHNzbTI2MDJfZW51bVsxXSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgc3NtMjYwMl9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzc20yNjAyX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmc3NtMjYwMl9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogT3V0cHV0IE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3NtMjYwMl9vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKIFNPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgU1NNMjYwMl9BUEFOQSwgMywgMSwgMCksCkBAIC0yOTEsNyArMjc2LDcgQEAKIAl1MTYgc3JhdGU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDIgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCXUxNiBpZmFjZSA9IHNzbTI2MDJfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFNTTTI2MDJfSUZBQ0UpICYgMHhmZmYzOwpAQCAtMzM2LDcgKzMyMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDIgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKm1hc3Rlcl9ydW50aW1lOwpAQCAtMzczLDcgKzM1OCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCS8qIHNldCBhY3RpdmUgKi8KIAlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX0FDVElWRSwgQUNUSVZFX0FDVElWQVRFX0NPREVDKTsKIApAQCAtMzg1LDcgKzM3MCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDIgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCS8qIGRlYWN0aXZhdGUgKi8KIAlpZiAoIWNvZGVjLT5hY3RpdmUpCkBAIC01MjEsNiArNTA2LDE2IEBACiAjZGVmaW5lIFNTTTI2MDJfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc3NtMjYwMl9kYWlfb3BzID0geworCS5zdGFydHVwCT0gc3NtMjYwMl9zdGFydHVwLAorCS5wcmVwYXJlCT0gc3NtMjYwMl9wY21fcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gc3NtMjYwMl9od19wYXJhbXMsCisJLnNodXRkb3duCT0gc3NtMjYwMl9zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRlCT0gc3NtMjYwMl9tdXRlLAorCS5zZXRfc3lzY2xrCT0gc3NtMjYwMl9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHNzbTI2MDJfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgc3NtMjYwMl9kYWkgPSB7CiAJLm5hbWUgPSAiU1NNMjYwMiIsCiAJLnBsYXliYWNrID0gewpAQCAtNTM1LDIyICs1MzAsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFNTTTI2MDJfUkFURVMsCiAJCS5mb3JtYXRzID0gU1NNMjYwMl9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBzc20yNjAyX3N0YXJ0dXAsCi0JCS5wcmVwYXJlID0gc3NtMjYwMl9wY21fcHJlcGFyZSwKLQkJLmh3X3BhcmFtcyA9IHNzbTI2MDJfaHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSBzc20yNjAyX3NodXRkb3duLAotCQkuZGlnaXRhbF9tdXRlID0gc3NtMjYwMl9tdXRlLAotCQkuc2V0X3N5c2NsayA9IHNzbTI2MDJfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gc3NtMjYwMl9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZzc20yNjAyX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc3NtMjYwMl9kYWkpOwogCiBzdGF0aWMgaW50IHNzbTI2MDJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlzc20yNjAyX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTU1OSw3ICs1NDYsNyBAQAogc3RhdGljIGludCBzc20yNjAyX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC01ODEsNyArNTY4LDcgQEAKICAqLwogc3RhdGljIGludCBzc20yNjAyX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWcsIHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJTU00yNjAyIjsKQEAgLTYyMiw3ICs2MDksOCBAQAogCQkJQVBBTkFfRU5BQkxFX01JQ19CT09TVCk7CiAJc3NtMjYwMl93cml0ZShjb2RlYywgU1NNMjYwMl9QV1IsIDApOwogCi0Jc3NtMjYwMl9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBzc20yNjAyX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHNzbTI2MDJfc25kX2NvbnRyb2xzKSk7CiAJc3NtMjYwMl9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNjUzLDcgKzY0MSw3IEBACiAJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHNzbTI2MDJfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNzQ3LDcgKzczNSw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHNzbTI2MDI7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtNzY4LDcgKzc1Niw3IEBACiBzdGF0aWMgaW50IHNzbTI2MDJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJc3NtMjYwMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKaW5kZXggY2ZkZWEwMC4uYzNmNGFmYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwpAQCAtMTgzLDI0ICsxODMsNiBAQAogCVNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHRsdjMyMGFpYzIzX2RlZW1waCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgdGx2MzIwYWljMjNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0bHYzMjBhaWMyM19zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJnRsdjMyMGFpYzIzX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotfQotCiAvKiBQR0EgTWl4ZXIgY29udHJvbHMgZm9yIExpbmUgYW5kIE1pYyBzd2l0Y2ggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0bHYzMjBhaWMyM19vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKIAlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFRMVjMyMEFJQzIzX0FOTEcsIDMsIDEsIDApLApAQCAtNDIzLDcgKzQwNSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBpZmFjZV9yZWc7CiAJaW50IHJldDsKIAlzdHJ1Y3QgYWljMjMgKmFpYzIzID0gY29udGFpbmVyX29mKGNvZGVjLCBzdHJ1Y3QgYWljMjMsIGNvZGVjKTsKQEAgLTQ3MSw3ICs0NTMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHNldCBhY3RpdmUgKi8KIAl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDAwMDEpOwpAQCAtNDg0LDcgKzQ2Niw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMyMyAqYWljMjMgPSBjb250YWluZXJfb2YoY29kZWMsIHN0cnVjdCBhaWMyMywgY29kZWMpOwogCiAJLyogZGVhY3RpdmF0ZSAqLwpAQCAtNTk4LDYgKzU4MCwxNSBAQAogI2RlZmluZSBBSUMyM19GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKIAkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdGx2MzIwYWljMjNfZGFpX29wcyA9IHsKKwkucHJlcGFyZQk9IHRsdjMyMGFpYzIzX3BjbV9wcmVwYXJlLAorCS5od19wYXJhbXMJPSB0bHYzMjBhaWMyM19od19wYXJhbXMsCisJLnNodXRkb3duCT0gdGx2MzIwYWljMjNfc2h1dGRvd24sCisJLmRpZ2l0YWxfbXV0ZQk9IHRsdjMyMGFpYzIzX211dGUsCisJLnNldF9mbXQJPSB0bHYzMjBhaWMyM19zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHRsdjMyMGFpYzIzX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHRsdjMyMGFpYzIzX2RhaSA9IHsKIAkubmFtZSA9ICJ0bHYzMjBhaWMyMyIsCiAJLnBsYXliYWNrID0gewpAQCAtNjEyLDE0ICs2MDMsNyBAQAogCQkgICAgLmNoYW5uZWxzX21heCA9IDIsCiAJCSAgICAucmF0ZXMgPSBBSUMyM19SQVRFUywKIAkJICAgIC5mb3JtYXRzID0gQUlDMjNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gdGx2MzIwYWljMjNfcGNtX3ByZXBhcmUsCi0JCS5od19wYXJhbXMgPSB0bHYzMjBhaWMyM19od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHRsdjMyMGFpYzIzX3NodXRkb3duLAotCQkuZGlnaXRhbF9tdXRlID0gdGx2MzIwYWljMjNfbXV0ZSwKLQkJLnNldF9mbXQgPSB0bHYzMjBhaWMyM19zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSB0bHYzMjBhaWMyM19zZXRfZGFpX3N5c2NsaywKLQl9CisJLm9wcyA9ICZ0bHYzMjBhaWMyM19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHRsdjMyMGFpYzIzX2RhaSk7CiAKQEAgLTYyNyw3ICs2MTEsNyBAQAogCQkJICAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MCk7CiAJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpAQCAtNjM4LDcgKzYyMiw3IEBACiBzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXUxNiByZWc7CiAKQEAgLTY2MCw3ICs2NDQsNyBAQAogICovCiBzdGF0aWMgaW50IHRsdjMyMGFpYzIzX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCXUxNiByZWc7CiAKQEAgLTcxOCw3ICs3MDIsOCBAQAogCiAJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgxKTsKIAotCXRsdjMyMGFpYzIzX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHRsdjMyMGFpYzIzX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3NuZF9jb250cm9scykpOwogCXRsdjMyMGFpYzIzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03NDYsNyArNzMxLDcgQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gdGx2MzIwYWljMjNfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShpMmMtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC04MDQsNyArNzg5LDcgQEAKIAlpZiAoYWljMjMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMgPSAmYWljMjMtPmNvZGVjOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTgyMyw3ICs4MDgsNyBAQAogc3RhdGljIGludCB0bHYzMjBhaWMyM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljMjMgKmFpYzIzID0gY29udGFpbmVyX29mKGNvZGVjLCBzdHJ1Y3QgYWljMjMsIGNvZGVjKTsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jCmluZGV4IDI5ZjJmMWEuLjMzODdkOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljMjYgKmFpYzI2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgZnNyZWYsIGRpdmlzb3IsIHdsZW4sIHB2YWwsIGp2YWwsIGR2YWwsIHF2YWw7CiAJdTE2IHJlZzsKQEAgLTI3MCw2ICsyNzAsMTMgQEAKICNkZWZpbmUgQUlDMjZfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TOCAgICAgfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9CRSB8XAogCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0X0JFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFpYzI2X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGFpYzI2X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gYWljMjZfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IGFpYzI2X3NldF9zeXNjbGssCisJLnNldF9mbXQJPSBhaWMyNl9zZXRfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFpYzI2X2RhaSA9IHsKIAkubmFtZSA9ICJ0bHYzMjBhaWMyNiIsCiAJLnBsYXliYWNrID0gewpAQCAtMjg2LDEyICsyOTMsNyBAQAogCQkucmF0ZXMgPSBBSUMyNl9SQVRFUywKIAkJLmZvcm1hdHMgPSBBSUMyNl9GT1JNQVRTLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IGFpYzI2X2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IGFpYzI2X211dGUsCi0JCS5zZXRfc3lzY2xrID0gYWljMjZfc2V0X3N5c2NsaywKLQkJLnNldF9mbXQgPSBhaWMyNl9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZhaWMyNl9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFpYzI2X2RhaSk7CiAKQEAgLTMyMiw5ICszMjQsOCBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sOwogCXN0cnVjdCBhaWMyNiAqYWljMjY7Ci0JaW50IGksIHJldCwgZXJyOworCWludCByZXQsIGVycjsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJQcm9iaW5nIEFJQzI2IFNvQyBDT0RFQyBkcml2ZXJcbiIpOwogCWRldl9kYmcoJnBkZXYtPmRldiwgInNvY2Rldj0lcFxuIiwgc29jZGV2KTsKQEAgLTMzOCw3ICszMzksNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJY29kZWMgPSAmYWljMjYtPmNvZGVjOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWdpc3RlcmluZyBQQ01zLCBkZXY9JXAsIHNvY2Rldi0+ZGV2PSVwXG4iLAogCQkmcGRldi0+ZGV2LCBzb2NkZXYtPmRldik7CkBAIC0zNTEsMTEgKzM1Miw5IEBACiAKIAkvKiByZWdpc3RlciBjb250cm9scyAqLwogCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIGNvbnRyb2xzXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaWMyNl9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJa2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJmFpYzI2X3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpOwotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwga2NvbnRyb2wpOwotCQlXQVJOX09OKGVyciA8IDApOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWljMjZfc25kX2NvbnRyb2xzLAorCQkJQVJSQVlfU0laRShhaWMyNl9zbmRfY29udHJvbHMpKTsKKwlXQVJOX09OKGVyciA8IDApOwogCiAJLyogQ09ERUMgaXMgc2V0dXAsIHdlIGNhbiByZWdpc3RlciB0aGUgY2FyZCBub3cgKi8KIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWdpc3RlcmluZyBjYXJkXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwppbmRleCBhZWEwY2I3Li5hYjA5OWY0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlICJ0bHYzMjBhaWMzeC5oIgogCkBAIC0yNTAsNTYgKzI1MSw4NiBAQAogCVNPQ19FTlVNX0RPVUJMRShBSUMzWF9DT0RFQ19ERklMVF9DVFJMLCA2LCA0LCA0LCBhaWMzeF9hZGNfaHBmKSwKIH07CiAKKy8qCisgKiBEQUMgZGlnaXRhbCB2b2x1bWVzLiBGcm9tIC02My41IHRvIDAgZEIgaW4gMC41IGRCIHN0ZXBzCisgKi8KK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfdGx2LCAtNjM1MCwgNTAsIDApOworLyogQURDIFBHQSBnYWluIHZvbHVtZXMuIEZyb20gMCB0byA1OS41IGRCIGluIDAuNSBkQiBzdGVwcyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGFkY190bHYsIDAsIDUwLCAwKTsKKy8qCisgKiBPdXRwdXQgc3RhZ2Ugdm9sdW1lcy4gRnJvbSAtNzguMyB0byAwIGRCLiBNdXRlZCBiZWxvdyAtNzguMyBkQi4KKyAqIFN0ZXAgc2l6ZSBpcyBhcHByb3hpbWF0ZWx5IDAuNSBkQiBvdmVyIG1vc3Qgb2YgdGhlIHNjYWxlIGJ1dCBpbmNyZWFzaW5nCisgKiBuZWFyIHRoZSB2ZXJ5IGxvdyBsZXZlbHMuCisgKiBEZWZpbmUgZEIgc2NhbGUgc28gdGhhdCBpdCBpcyBtb3N0bHkgY29ycmVjdCBmb3IgcmFuZ2UgYWJvdXQgLTU1IHRvIDAgZEIKKyAqIGJ1dCBoYXZpbmcgaW5jcmVhc2luZyBkQiBkaWZmZXJlbmNlIGJlbG93IHRoYXQgKGFuZCB3aGVyZSBpdCBkb2Vzbid0IGNvdW50CisgKiBzbyBtdWNoKS4gVGhpcyBzZXR0aW5nIHNob3dzIC01MCBkQiAoYWN0dWFsIGlzIC01MC4zIGRCKSBmb3IgcmVnaXN0ZXIKKyAqIHZhbHVlIDEwMCBhbmQgLTU4LjUgZEIgKGFjdHVhbCBpcyAtNzguMyBkQikgZm9yIHJlZ2lzdGVyIHZhbHVlIDExNy4KKyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dHB1dF9zdGFnZV90bHYsIC01OTAwLCA1MCwgMSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWMzeF9zbmRfY29udHJvbHNbXSA9IHsKIAkvKiBPdXRwdXQgKi8KLQlTT0NfRE9VQkxFX1IoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBMREFDX1ZPTCwgUkRBQ19WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExEQUNfVk9MLCBSREFDX1ZPTCwgMCwgMHg3ZiwgMSwgZGFjX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIkxpbmUgREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfTExPUE1fVk9MLAotCQkgICAgIERBQ1IxXzJfUkxPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lIERBQyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBQ0wxXzJfTExPUE1fVk9MLCBEQUNSMV8yX1JMT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEUoIkxpbmVMIFBsYXliYWNrIFN3aXRjaCIsIExMT1BNX0NUUkwsIDMsIDB4MDEsIDApLAogCVNPQ19TSU5HTEUoIkxpbmVSIFBsYXliYWNrIFN3aXRjaCIsIFJMT1BNX0NUUkwsIDMsIDB4MDEsIDApLAotCVNPQ19ET1VCTEVfUigiTGluZUwgREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfTExPUE1fVk9MLAotCQkgICAgIERBQ1IxXzJfTExPUE1fVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJMaW5lTCBMZWZ0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0xMT1BNX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJMaW5lUiBSaWdodCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQVJfMl9STE9QTV9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJMaW5lTCBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfTExPUE1fVk9MLAotCQkgICAgIExJTkUyUl8yX0xMT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJMaW5lUiBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfUkxPUE1fVk9MLAotCQkgICAgIExJTkUyUl8yX1JMT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiTGluZUwgREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9MTE9QTV9WT0wsIERBQ1IxXzJfTExPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkxpbmVMIExlZnQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0xMT1BNX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTGluZVIgUmlnaHQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBUl8yX1JMT1BNX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lTCBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9MTE9QTV9WT0wsIExJTkUyUl8yX0xMT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmVSIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX1JMT1BNX1ZPTCwgTElORTJSXzJfUkxPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIk1vbm8gREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfTU9OT0xPUE1fVk9MLAotCQkgICAgIERBQ1IxXzJfTU9OT0xPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJNb25vIERBQyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBQ0wxXzJfTU9OT0xPUE1fVk9MLCBEQUNSMV8yX01PTk9MT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEUoIk1vbm8gREFDIFBsYXliYWNrIFN3aXRjaCIsIE1PTk9MT1BNX0NUUkwsIDMsIDB4MDEsIDApLAotCVNPQ19ET1VCTEVfUigiTW9ubyBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9NT05PTE9QTV9WT0wsCi0JCSAgICAgUEdBUl8yX01PTk9MT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJNb25vIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9NT05PTE9QTV9WT0wsCi0JCSAgICAgTElORTJSXzJfTU9OT0xPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJNb25vIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBQR0FMXzJfTU9OT0xPUE1fVk9MLCBQR0FSXzJfTU9OT0xPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiTW9ubyBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9NT05PTE9QTV9WT0wsIExJTkUyUl8yX01PTk9MT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX0RPVUJMRV9SKCJIUCBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9IUExPVVRfVk9MLAotCQkgICAgIERBQ1IxXzJfSFBST1VUX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiSFAgREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9IUExPVVRfVk9MLCBEQUNSMV8yX0hQUk9VVF9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfRE9VQkxFX1IoIkhQIERBQyBQbGF5YmFjayBTd2l0Y2giLCBIUExPVVRfQ1RSTCwgSFBST1VUX0NUUkwsIDMsCiAJCSAgICAgMHgwMSwgMCksCi0JU09DX0RPVUJMRV9SKCJIUCBSaWdodCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQVJfMl9IUExPVVRfVk9MLAotCQkgICAgIFBHQVJfMl9IUFJPVVRfVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJIUEwgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBMT1VUX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJIUFIgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBST1VUX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkhQIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9IUExPVVRfVk9MLAotCQkgICAgIExJTkUyUl8yX0hQUk9VVF9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkhQIFJpZ2h0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBQR0FSXzJfSFBMT1VUX1ZPTCwgUEdBUl8yX0hQUk9VVF9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiSFBMIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQUxfMl9IUExPVVRfVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJIUFIgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQUk9VVF9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiSFAgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfSFBMT1VUX1ZPTCwgTElORTJSXzJfSFBST1VUX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX0RPVUJMRV9SKCJIUENPTSBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9IUExDT01fVk9MLAotCQkgICAgIERBQ1IxXzJfSFBSQ09NX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiSFBDT00gREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9IUExDT01fVk9MLCBEQUNSMV8yX0hQUkNPTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfRE9VQkxFX1IoIkhQQ09NIERBQyBQbGF5YmFjayBTd2l0Y2giLCBIUExDT01fQ1RSTCwgSFBSQ09NX0NUUkwsIDMsCiAJCSAgICAgMHgwMSwgMCksCi0JU09DX1NJTkdMRSgiSFBMQ09NIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0hQTENPTV9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX1NJTkdMRSgiSFBSQ09NIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0hQUkNPTV9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJIUENPTSBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfSFBMQ09NX1ZPTCwKLQkJICAgICBMSU5FMlJfMl9IUFJDT01fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfU0lOR0xFX1RMVigiSFBMQ09NIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQUxfMl9IUExDT01fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJIUFJDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQUkNPTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiSFBDT00gTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfSFBMQ09NX1ZPTCwgTElORTJSXzJfSFBSQ09NX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCiAJLyoKIAkgKiBOb3RlOiBlbmFibGUgQXV0b21hdGljIGlucHV0IEdhaW4gQ29udHJvbGxlciB3aXRoIGNhcmUuIEl0IGNhbgpAQCAtMzA4LDI4ICszMzksMTMgQEAKIAlTT0NfRE9VQkxFX1IoIkFHQyBTd2l0Y2giLCBMQUdDX0NUUkxfQSwgUkFHQ19DVFJMX0EsIDcsIDB4MDEsIDApLAogCiAJLyogSW5wdXQgKi8KLQlTT0NfRE9VQkxFX1IoIlBHQSBDYXB0dXJlIFZvbHVtZSIsIExBRENfVk9MLCBSQURDX1ZPTCwgMCwgMHg3ZiwgMCksCisJU09DX0RPVUJMRV9SX1RMVigiUEdBIENhcHR1cmUgVm9sdW1lIiwgTEFEQ19WT0wsIFJBRENfVk9MLAorCQkJIDAsIDExOSwgMCwgYWRjX3RsdiksCiAJU09DX0RPVUJMRV9SKCJQR0EgQ2FwdHVyZSBTd2l0Y2giLCBMQURDX1ZPTCwgUkFEQ19WT0wsIDcsIDB4MDEsIDEpLAogCiAJU09DX0VOVU0oIkFEQyBIUEYgQ3V0LW9mZiIsIGFpYzN4X2VudW1bQURDX0hQRl9FTlVNXSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWljM3hfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljM3hfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZhaWMzeF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIExlZnQgREFDIE11eCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X2xlZnRfZGFjX211eF9jb250cm9scyA9CiBTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIGFpYzN4X2VudW1bTERBQ19FTlVNXSk7CkBAIC03NDYsNyArNzYyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzN4X3ByaXYgKmFpYzN4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgY29kZWNfY2xrID0gMCwgYnlwYXNzX3BsbCA9IDAsIGZzcmVmLCBsYXN0X2NsayA9IDA7CiAJdTggZGF0YSwgciwgcCwgcGxsX3EsIHBsbF9wID0gMSwgcGxsX3IgPSAxLCBwbGxfaiA9IDE7CkBAIC0xMDcyLDYgKzEwODgsMTMgQEAKICNkZWZpbmUgQUlDM1hfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBcCiAJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFpYzN4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGFpYzN4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gYWljM3hfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IGFpYzN4X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gYWljM3hfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWljM3hfZGFpID0gewogCS5uYW1lID0gInRsdjMyMGFpYzN4IiwKIAkucGxheWJhY2sgPSB7CkBAIC0xMDg2LDE5ICsxMTA5LDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBBSUMzWF9SQVRFUywKIAkJLmZvcm1hdHMgPSBBSUMzWF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IGFpYzN4X2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IGFpYzN4X211dGUsCi0JCS5zZXRfc3lzY2xrID0gYWljM3hfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gYWljM3hfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmYWljM3hfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhaWMzeF9kYWkpOwogCiBzdGF0aWMgaW50IGFpYzN4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJYWljM3hfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0xMTA4LDcgKzExMjYsNyBAQAogc3RhdGljIGludCBhaWMzeF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xMTMxLDcgKzExNDksNyBAQAogICovCiBzdGF0aWMgaW50IGFpYzN4X2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMzeF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKIAlpbnQgcmVnLCByZXQgPSAwOwogCkBAIC0xMjI3LDcgKzEyNDUsOCBAQAogCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9HUElPMV9SRUcsIChzZXR1cC0+Z3Bpb19mdW5jWzBdICYgMHhmKSA8PCA0KTsKIAlhaWMzeF93cml0ZShjb2RlYywgQUlDM1hfR1BJTzJfUkVHLCAoc2V0dXAtPmdwaW9fZnVuY1sxXSAmIDB4ZikgPDwgNCk7CiAKLQlhaWMzeF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhaWMzeF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShhaWMzeF9zbmRfY29udHJvbHMpKTsKIAlhaWMzeF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTI2MSw3ICsxMjgwLDcgQEAKIAkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGFpYzN4X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTEzNjYsNyArMTM4NSw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IGFpYzN4OwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTEzOTIsNyArMTQxMSw3IEBACiBzdGF0aWMgaW50IGFpYzN4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogcG93ZXIgZG93biBjaGlwICovCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCmluZGV4IGVhMzcwYTQuLjk3NzM4ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCkBAIC00Miw3ICs0Miw3IEBACiAgKi8KIHN0YXRpYyBjb25zdCB1OCB0d2w0MDMwX3JlZ1tUV0w0MDMwX0NBQ0hFUkVHTlVNXSA9IHsKIAkweDAwLCAvKiB0aGlzIHJlZ2lzdGVyIG5vdCB1c2VkCQkqLwotCTB4OTMsIC8qIFJFR19DT0RFQ19NT0RFCQkoMHgxKQkqLworCTB4OTEsIC8qIFJFR19DT0RFQ19NT0RFCQkoMHgxKQkqLwogCTB4YzMsIC8qIFJFR19PUFRJT04JCSgweDIpCSovCiAJMHgwMCwgLyogUkVHX1VOS05PV04JCSgweDMpCSovCiAJMHgwMCwgLyogUkVHX01JQ0JJQVNfQ1RMCSgweDQpCSovCkBAIC0xMTcsNiArMTE3LDEzIEBACiAJMHgwMCwgLyogUkVHX01JU0NfU0VUXzIJCSgweDQ5KQkqLwogfTsKIAorLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3QgdHdsNDAzMF9wcml2IHsKKwl1bnNpZ25lZCBpbnQgYnlwYXNzX3N0YXRlOworCXVuc2lnbmVkIGludCBjb2RlY19wb3dlcmVkOworCXVuc2lnbmVkIGludCBjb2RlY19tdXRlZDsKK307CisKIC8qCiAgKiByZWFkIHR3bDQwMzAgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtMTI1LDYgKzEzMiw5IEBACiB7CiAJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAorCWlmIChyZWcgPj0gVFdMNDAzMF9DQUNIRVJFR05VTSkKKwkJcmV0dXJuIC1FSU87CisKIAlyZXR1cm4gY2FjaGVbcmVnXTsKIH0KIApAQCAtMTUxLDI2ICsxNjEsMjIgQEAKIAlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsIHZhbHVlLCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCB0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIHR3bDQwMzBfY29kZWNfZW5hYmxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGVuYWJsZSkKIHsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBtb2RlOwogCi0JbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUpOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsCi0JCW1vZGUgJiB+VFdMNDAzMF9DT0RFQ1BEWik7Ci0KLQkvKiBSRVZJU0lUOiB0aGlzIGRlbGF5IGlzIHByZXNlbnQgaW4gVEkgc2FtcGxlIGRyaXZlcnMgKi8KLQkvKiBidXQgdGhlcmUgc2VlbXMgdG8gYmUgbm8gVFJNIHJlcXVpcmVtZW50IGZvciBpdCAgICAgKi8KLQl1ZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCB0d2w0MDMwX3NldF9jb2RlY3BkeihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JdTggbW9kZTsKKwlpZiAoZW5hYmxlID09IHR3bDQwMzAtPmNvZGVjX3Bvd2VyZWQpCisJCXJldHVybjsKIAogCW1vZGUgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFKTsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLAotCQltb2RlIHwgVFdMNDAzMF9DT0RFQ1BEWik7CisJaWYgKGVuYWJsZSkKKwkJbW9kZSB8PSBUV0w0MDMwX0NPREVDUERaOworCWVsc2UKKwkJbW9kZSAmPSB+VFdMNDAzMF9DT0RFQ1BEWjsKKworCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsIG1vZGUpOworCXR3bDQwMzAtPmNvZGVjX3Bvd2VyZWQgPSBlbmFibGU7CiAKIAkvKiBSRVZJU0lUOiB0aGlzIGRlbGF5IGlzIHByZXNlbnQgaW4gVEkgc2FtcGxlIGRyaXZlcnMgKi8KIAkvKiBidXQgdGhlcmUgc2VlbXMgdG8gYmUgbm8gVFJNIHJlcXVpcmVtZW50IGZvciBpdCAgICAgKi8KQEAgLTE4Miw3ICsxODgsNyBAQAogCWludCBpOwogCiAJLyogY2xlYXIgQ09ERUNQRFogcHJpb3IgdG8gc2V0dGluZyByZWdpc3RlciBkZWZhdWx0cyAqLwotCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAogCS8qIHNldCBhbGwgYXVkaW8gc2VjdGlvbiByZWdpc3RlcnMgdG8gcmVhc29uYWJsZSBkZWZhdWx0cyAqLwogCWZvciAoaSA9IFRXTDQwMzBfUkVHX09QVElPTjsgaSA8PSBUV0w0MDMwX1JFR19NSVNDX1NFVF8yOyBpKyspCkBAIC0xOTAsNiArMTk2LDEyMiBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIHR3bDQwMzBfY29kZWNfbXV0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBtdXRlKQoreworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXU4IHJlZ192YWw7CisKKwlpZiAobXV0ZSA9PSB0d2w0MDMwLT5jb2RlY19tdXRlZCkKKwkJcmV0dXJuOworCisJaWYgKG11dGUpIHsKKwkJLyogQnlwYXNzIHRoZSByZWdfY2FjaGUgYW5kIG11dGUgdGhlIHZvbHVtZXMKKwkJICogSGVhZHNldCBtdXRlIGlzIGRvbmUgaW4gaXQncyBvd24gZXZlbnQgaGFuZGxlcgorCQkgKiBUaGluZ3MgdG8gbXV0ZTogIEVhcnBpZWNlLCBQcmVEcml2TC9SLCBDYXJraXRML1IKKwkJICovCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19FQVJfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfRUFSX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19FQVJfQ1RMKTsKKworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRExfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFRExfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX1BSRURMX0NUTCk7CisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVEUl9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVEUl9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfUFJFRExfQ1RMKTsKKworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCk7CisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRUNLTF9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCk7CisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS1JfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFQ0tMX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19QUkVDS1JfQ1RMKTsKKworCQkvKiBEaXNhYmxlIFBMTCAqLworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwpOworCQlyZWdfdmFsICY9IH5UV0w0MDMwX0FQTExfRU47CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMLCByZWdfdmFsKTsKKwl9IGVsc2UgeworCQkvKiBSZXN0b3JlIHRoZSB2b2x1bWVzCisJCSAqIEhlYWRzZXQgbXV0ZSBpcyBkb25lIGluIGl0J3Mgb3duIGV2ZW50IGhhbmRsZXIKKwkJICogVGhpbmdzIHRvIHJlc3RvcmU6ICBFYXJwaWVjZSwgUHJlRHJpdkwvUiwgQ2Fya2l0TC9SCisJCSAqLworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19FQVJfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfRUFSX0NUTCkpOworCisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURMX0NUTCwKKwkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURMX0NUTCkpOworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVEUl9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVEUl9DVEwpKTsKKworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS0xfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCkpOworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS1JfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCkpOworCisJCS8qIEVuYWJsZSBQTEwgKi8KKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMKTsKKwkJcmVnX3ZhbCB8PSBUV0w0MDMwX0FQTExfRU47CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMLCByZWdfdmFsKTsKKwl9CisKKwl0d2w0MDMwLT5jb2RlY19tdXRlZCA9IG11dGU7Cit9CisKK3N0YXRpYyB2b2lkIHR3bDQwMzBfcG93ZXJfdXAoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXU4IGFuYW1pY2wsIHJlZ21pc2MxLCBieXRlOworCWludCBpID0gMDsKKworCWlmICh0d2w0MDMwLT5jb2RlY19wb3dlcmVkKQorCQlyZXR1cm47CisKKwkvKiBzZXQgQ09ERUNQRFogdG8gdHVybiBvbiBjb2RlYyAqLworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKKworCS8qIGluaXRpYXRlIG9mZnNldCBjYW5jZWxsYXRpb24gKi8KKwlhbmFtaWNsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCk7CisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwKKwkJYW5hbWljbCB8IFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpOworCisJLyogd2FpdCBmb3Igb2Zmc2V0IGNhbmNlbGxhdGlvbiB0byBjb21wbGV0ZSAqLworCWRvIHsKKwkJLyogdGhpcyB0YWtlcyBhIGxpdHRsZSB3aGlsZSwgc28gZG9uJ3Qgc2xhbSBpMmMgKi8KKwkJdWRlbGF5KDIwMDApOworCQl0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmYnl0ZSwKKwkJCQkgICAgVFdMNDAzMF9SRUdfQU5BTUlDTCk7CisJfSB3aGlsZSAoKGkrKyA8IDEwMCkgJiYKKwkJICgoYnl0ZSAmIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpID09CisJCSAgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkpOworCisJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJlZ19jYWNoZSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIEhXICovCisJdHdsNDAzMF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wsIGJ5dGUpOworCisJLyogYW50aS1wb3Agd2hlbiBjaGFuZ2luZyBhbmFsb2cgZ2FpbiAqLworCXJlZ21pc2MxID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSk7CisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSwKKwkJcmVnbWlzYzEgfCBUV0w0MDMwX1NNT09USF9BTkFWT0xfRU4pOworCisJLyogdG9nZ2xlIENPREVDUERaIGFzIHBlciBUUk0gKi8KKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOworfQorCisvKgorICogVW5jb25kaXRpb25hbCBwb3dlciBkb3duCisgKi8KK3N0YXRpYyB2b2lkIHR3bDQwMzBfcG93ZXJfZG93bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJLyogcG93ZXIgZG93biAqLworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKK30KKwogLyogRWFycGllY2UgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp0d2w0MDMwX2VhcnBpZWNlX3RleHRzW10gPQogCQl7Ik9mZiIsICJEQUNMMSIsICJEQUNMMiIsICJEQUNSMSJ9OwpAQCAtMzY2LDYgKzQ4OCw0MSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9taWNwYXRodHgyX2NvbnRyb2wgPQogU09DX0RBUE1fRU5VTSgiUm91dGUiLCB0d2w0MDMwX21pY3BhdGh0eDJfZW51bSk7CiAKKy8qIEFuYWxvZyBieXBhc3MgZm9yIEF1ZGlvUjEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYWJ5cGFzc3IxX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfQVJYUjFfQVBHQV9DVEwsIDIsIDEsIDApOworCisvKiBBbmFsb2cgYnlwYXNzIGZvciBBdWRpb0wxICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2FieXBhc3NsMV9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDQwMzBfUkVHX0FSWEwxX0FQR0FfQ1RMLCAyLCAxLCAwKTsKKworLyogQW5hbG9nIGJ5cGFzcyBmb3IgQXVkaW9SMiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9hYnlwYXNzcjJfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w0MDMwX1JFR19BUlhSMl9BUEdBX0NUTCwgMiwgMSwgMCk7CisKKy8qIEFuYWxvZyBieXBhc3MgZm9yIEF1ZGlvTDIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYWJ5cGFzc2wyX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfQVJYTDJfQVBHQV9DVEwsIDIsIDEsIDApOworCisvKiBEaWdpdGFsIGJ5cGFzcyBnYWluLCAwIG11dGVzIHRoZSBieXBhc3MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHdsNDAzMF9kYXBtX2RieXBhc3NfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMiksCisJMCwgMywgVExWX0RCX1NDQUxFX0lURU0oLTI0MDAsIDAsIDEpLAorCTQsIDcsIFRMVl9EQl9TQ0FMRV9JVEVNKC0xODAwLCA2MDAsIDApLAorfTsKKworLyogRGlnaXRhbCBieXBhc3MgbGVmdCAoVFgxTCAtPiBSWDJMKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9kYnlwYXNzbF9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEVfVExWKCJWb2x1bWUiLAorCQkJVFdMNDAzMF9SRUdfQVRYMkFSWFBHQSwgMywgNywgMCwKKwkJCXR3bDQwMzBfZGFwbV9kYnlwYXNzX3Rsdik7CisKKy8qIERpZ2l0YWwgYnlwYXNzIHJpZ2h0IChUWDFSIC0+IFJYMlIpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2RieXBhc3NyX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRV9UTFYoIlZvbHVtZSIsCisJCQlUV0w0MDMwX1JFR19BVFgyQVJYUEdBLCAwLCA3LCAwLAorCQkJdHdsNDAzMF9kYXBtX2RieXBhc3NfdGx2KTsKKwogc3RhdGljIGludCBtaWNwYXRoX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CkBAIC00MjAsNiArNTc3LDc5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaGVhZHNldGxfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJdW5zaWduZWQgY2hhciBoc19nYWluLCBoc19wb3A7CisKKwkvKiBTYXZlIHRoZSBjdXJyZW50IHZvbHVtZSAqLworCWhzX2dhaW4gPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19HQUlOX1NFVCk7CisJaHNfcG9wID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQkvKiBEbyB0aGUgYW50aS1wb3AvYmlhcyByYW1wIGVuYWJsZSBhY2NvcmRpbmcgdG8gdGhlIFRSTSAqLworCQloc19wb3AgfD0gVFdMNDAzMF9WTUlEX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKwkJLyogSXMgdGhpcyBuZWVkZWQ/IENhbiB3ZSBqdXN0IHVzZSB3aGF0ZXZlciBnYWluIGhlcmU/ICovCisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX0dBSU5fU0VULAorCQkJCShoc19nYWluICYgKH4weDBmKSkgfCAweDBhKTsKKwkJaHNfcG9wIHw9IFRXTDQwMzBfUkFNUF9FTjsKKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7CisKKwkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdm9sdW1lICovCisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX0dBSU5fU0VULCBoc19nYWluKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCS8qIERvIHRoZSBhbnRpLXBvcC9iaWFzIHJhbXAgZGlzYWJsZSBhY2NvcmRpbmcgdG8gdGhlIFRSTSAqLworCQloc19wb3AgJj0gflRXTDQwMzBfUkFNUF9FTjsKKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7CisJCS8qIEJ5cGFzcyB0aGUgcmVnX2NhY2hlIHRvIG11dGUgdGhlIGhlYWRzZXQgKi8KKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCWhzX2dhaW4gJiAofjB4MGYpLAorCQkJCQlUV0w0MDMwX1JFR19IU19HQUlOX1NFVCk7CisJCWhzX3BvcCAmPSB+VFdMNDAzMF9WTUlEX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ5cGFzc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm0gPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopdy0+a2NvbnRyb2xzLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSB3LT5jb2RlYy0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgcmVnOworCisJcmVnID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgbS0+cmVnKTsKKworCWlmIChtLT5yZWcgPD0gVFdMNDAzMF9SRUdfQVJYUjJfQVBHQV9DVEwpIHsKKwkJLyogQW5hbG9nIGJ5cGFzcyAqLworCQlpZiAocmVnICYgKDEgPDwgbS0+c2hpZnQpKQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlIHw9CisJCQkJKDEgPDwgKG0tPnJlZyAtIFRXTDQwMzBfUkVHX0FSWEwxX0FQR0FfQ1RMKSk7CisJCWVsc2UKKwkJCXR3bDQwMzAtPmJ5cGFzc19zdGF0ZSAmPQorCQkJCX4oMSA8PCAobS0+cmVnIC0gVFdMNDAzMF9SRUdfQVJYTDFfQVBHQV9DVEwpKTsKKwl9IGVsc2UgeworCQkvKiBEaWdpdGFsIGJ5cGFzcyAqLworCQlpZiAocmVnICYgKDB4NyA8PCBtLT5zaGlmdCkpCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgfD0gKDEgPDwgKG0tPnNoaWZ0ID8gNSA6IDQpKTsKKwkJZWxzZQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlICY9IH4oMSA8PCAobS0+c2hpZnQgPyA1IDogNCkpOworCX0KKworCWlmICh3LT5jb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSkgeworCQlpZiAodHdsNDAzMC0+YnlwYXNzX3N0YXRlKQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKHctPmNvZGVjLCAwKTsKKwkJZWxzZQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKHctPmNvZGVjLCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBTb21lIG9mIHRoZSBnYWluIGNvbnRyb2xzIGluIFRXTCAobW9zdGx5IHRob3NlIHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGgKICAqIHRoZSBvdXRwdXRzKSBhcmUgaW1wbGVtZW50ZWQgaW4gYW4gaW50ZXJlc3Rpbmcgd2F5OgpAQCAtNjE0LDYgKzg0NCwxNyBAQAogICovCiBzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5wdXRfZ2Fpbl90bHYsIDAsIDYwMCwgMCk7CiAKK3N0YXRpYyBjb25zdCBjaGFyICp0d2w0MDMwX3JhbXBkZWxheV90ZXh0c1tdID0geworCSIyNy8yMC8xNCBtcyIsICI1NS80MC8yNyBtcyIsICIxMDkvODEvNTUgbXMiLCAiMjE4LzE2MS8xMDkgbXMiLAorCSI0MzcvMzIzLzIxOCBtcyIsICI4NzQvNjQ1LzQzNyBtcyIsICIxNzQ4LzEyOTEvODc0IG1zIiwKKwkiMzQ5NS8yNTgxLzE3NDggbXMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHR3bDQwMzBfcmFtcGRlbGF5X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgMiwKKwkJCUFSUkFZX1NJWkUodHdsNDAzMF9yYW1wZGVsYXlfdGV4dHMpLAorCQkJdHdsNDAzMF9yYW1wZGVsYXlfdGV4dHMpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9zbmRfY29udHJvbHNbXSA9IHsKIAkvKiBDb21tb24gcGxheWJhY2sgZ2FpbiBjb250cm9scyAqLwogCVNPQ19ET1VCTEVfUl9UTFYoIkRBQzEgRGlnaXRhbCBGaW5lIFBsYXliYWNrIFZvbHVtZSIsCkBAIC02NjgsMjQgKzkwOSwxMCBAQAogCiAJU09DX0RPVUJMRV9UTFYoIkFuYWxvZyBDYXB0dXJlIFZvbHVtZSIsIFRXTDQwMzBfUkVHX0FOQU1JQ19HQUlOLAogCQkwLCAzLCA1LCAwLCBpbnB1dF9nYWluX3RsdiksCisKKwlTT0NfRU5VTSgiSFMgcmFtcCBkZWxheSIsIHR3bDQwMzBfcmFtcGRlbGF5X2VudW0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHR3bDQwMzBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHdsNDAzMF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJnR3bDQwMzBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdHdsNDAzMF9kYXBtX3dpZGdldHNbXSA9IHsKIAkvKiBMZWZ0IGNoYW5uZWwgaW5wdXRzICovCiAJU05EX1NPQ19EQVBNX0lOUFVUKCJNQUlOTUlDIiksCkBAIC03MTQsMTMgKzk0MSwxMyBAQAogCiAJLyogREFDcyAqLwogCVNORF9TT0NfREFQTV9EQUMoIkRBQyBSaWdodDEiLCAiUmlnaHQgRnJvbnQgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAwLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIExlZnQxIiwgIkxlZnQgRnJvbnQgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAxLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIFJpZ2h0MiIsICJSaWdodCBSZWFyIFBsYXliYWNrIiwKLQkJCVRXTDQwMzBfUkVHX0FWREFDX0NUTCwgMiwgMCksCisJCQlTTkRfU09DX05PUE0sIDAsIDApLAogCVNORF9TT0NfREFQTV9EQUMoIkRBQyBMZWZ0MiIsICJMZWZ0IFJlYXIgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAzLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAKIAkvKiBBbmFsb2cgUEdBcyAqLwogCVNORF9TT0NfREFQTV9QR0EoIkFSWFIxX0FQR0EiLCBUV0w0MDMwX1JFR19BUlhSMV9BUEdBX0NUTCwKQEAgLTczMiw2ICs5NTksMzcgQEAKIAlTTkRfU09DX0RBUE1fUEdBKCJBUlhMMl9BUEdBIiwgVFdMNDAzMF9SRUdfQVJYTDJfQVBHQV9DVEwsCiAJCQkwLCAwLCBOVUxMLCAwKSwKIAorCS8qIEFuYWxvZyBieXBhc3NlcyAqLworCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiUmlnaHQxIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc3IxX2NvbnRyb2wsIGJ5cGFzc19ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJMZWZ0MSBBbmFsb2cgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2FieXBhc3NsMV9jb250cm9sLAorCQkJYnlwYXNzX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiUmlnaHQyIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc3IyX2NvbnRyb2wsCisJCQlieXBhc3NfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJMZWZ0MiBBbmFsb2cgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2FieXBhc3NsMl9jb250cm9sLAorCQkJYnlwYXNzX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCisJLyogRGlnaXRhbCBieXBhc3NlcyAqLworCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiTGVmdCBEaWdpdGFsIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9kYnlwYXNzbF9jb250cm9sLCBieXBhc3NfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiUmlnaHQgRGlnaXRhbCBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fZGJ5cGFzc3JfY29udHJvbCwgYnlwYXNzX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKworCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIiwgVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLAorCQkJMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIiLCBUV0w0MDMwX1JFR19BVkRBQ19DVEwsCisJCQkxLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciIsIFRXTDQwMzBfUkVHX0FWREFDX0NUTCwKKwkJCTIsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLAorCQkJMywgMCwgTlVMTCwgMCksCisKIAkvKiBPdXRwdXQgTVVYIGNvbnRyb2xzICovCiAJLyogRWFycGllY2UgKi8KIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJFYXJwaWVjZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCkBAIC03NDIsOCArMTAwMCw5IEBACiAJU05EX1NPQ19EQVBNX1ZBTFVFX01VWCgiUHJlZHJpdmVSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJJnR3bDQwMzBfZGFwbV9wcmVkcml2ZXJfY29udHJvbCksCiAJLyogSGVhZHNldEwvUiAqLwotCVNORF9TT0NfREFQTV9NVVgoIkhlYWRzZXRMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKLQkJJnR3bDQwMzBfZGFwbV9oc29sX2NvbnRyb2wpLAorCVNORF9TT0NfREFQTV9NVVhfRSgiSGVhZHNldEwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmdHdsNDAzMF9kYXBtX2hzb2xfY29udHJvbCwgaGVhZHNldGxfZXZlbnQsCisJCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAogCVNORF9TT0NfREFQTV9NVVgoIkhlYWRzZXRSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJJnR3bDQwMzBfZGFwbV9oc29yX2NvbnRyb2wpLAogCS8qIENhcmtpdEwvUiAqLwpAQCAtNzgyLDE2ICsxMDQxLDE2IEBACiAJCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUR8CiAJCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCiAKLQkvKiBBbmFsb2cgaW5wdXQgbXV4ZXMgd2l0aCBwb3dlciBzd2l0Y2ggZm9yIHRoZSBwaHlzaWNhbCBBRENML1IgKi8KKwkvKiBBbmFsb2cgaW5wdXQgbXV4ZXMgd2l0aCBzd2l0Y2ggZm9yIHRoZSBjYXB0dXJlIGFtcGxpZmllcnMgKi8KIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIiwKLQkJVFdMNDAzMF9SRUdfQVZBRENfQ1RMLCAzLCAwLCAmdHdsNDAzMF9kYXBtX2FuYWxvZ2xtaWNfY29udHJvbCksCisJCVRXTDQwMzBfUkVHX0FOQU1JQ0wsIDQsIDAsICZ0d2w0MDMwX2RhcG1fYW5hbG9nbG1pY19jb250cm9sKSwKIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSIsCi0JCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMSwgMCwgJnR3bDQwMzBfZGFwbV9hbmFsb2dybWljX2NvbnRyb2wpLAorCQlUV0w0MDMwX1JFR19BTkFNSUNSLCA0LCAwLCAmdHdsNDAzMF9kYXBtX2FuYWxvZ3JtaWNfY29udHJvbCksCiAKLQlTTkRfU09DX0RBUE1fUEdBKCJBbmFsb2cgTGVmdCBBbXBsaWZpZXIiLAotCQlUV0w0MDMwX1JFR19BTkFNSUNMLCA0LCAwLCBOVUxMLCAwKSwKLQlTTkRfU09DX0RBUE1fUEdBKCJBbmFsb2cgUmlnaHQgQW1wbGlmaWVyIiwKLQkJVFdMNDAzMF9SRUdfQU5BTUlDUiwgNCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQURDIFBoeXNpY2FsIExlZnQiLAorCQlUV0w0MDMwX1JFR19BVkFEQ19DVEwsIDMsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkFEQyBQaHlzaWNhbCBSaWdodCIsCisJCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMSwgMCwgTlVMTCwgMCksCiAKIAlTTkRfU09DX0RBUE1fUEdBKCJEaWdpbWljMCBFbmFibGUiLAogCQlUV0w0MDMwX1JFR19BRENNSUNTRUwsIDEsIDAsIE5VTEwsIDApLApAQCAtODAxLDEzICsxMDYwLDE5IEBACiAJU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1pYyBCaWFzIDEiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgMCwgMCksCiAJU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1pYyBCaWFzIDIiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgMSwgMCksCiAJU05EX1NPQ19EQVBNX01JQ0JJQVMoIkhlYWRzZXQgTWljIEJpYXMiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgMiwgMCksCisKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7Ci0JeyJBUlhMMV9BUEdBIiwgTlVMTCwgIkRBQyBMZWZ0MSJ9LAotCXsiQVJYUjFfQVBHQSIsIE5VTEwsICJEQUMgUmlnaHQxIn0sCi0JeyJBUlhMMl9BUEdBIiwgTlVMTCwgIkRBQyBMZWZ0MiJ9LAotCXsiQVJYUjJfQVBHQSIsIE5VTEwsICJEQUMgUmlnaHQyIn0sCisJeyJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIExlZnQxIn0sCisJeyJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIFJpZ2h0MSJ9LAorCXsiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRBQyBMZWZ0MiJ9LAorCXsiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRBQyBSaWdodDIifSwKKworCXsiQVJYTDFfQVBHQSIsIE5VTEwsICJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIifSwKKwl7IkFSWFIxX0FQR0EiLCBOVUxMLCAiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIn0sCisJeyJBUlhMMl9BUEdBIiwgTlVMTCwgIkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciJ9LAorCXsiQVJYUjJfQVBHQSIsIE5VTEwsICJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIifSwKIAogCS8qIEludGVybmFsIHBsYXliYWNrIHJvdXRpbmdzICovCiAJLyogRWFycGllY2UgKi8KQEAgLTg2NSwyMyArMTEzMCwyMyBAQAogCXsiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUiLCAiU3ViIG1pYyIsICJTVUJNSUMifSwKIAl7IkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIiwgIkFVWFIiLCAiQVVYUiJ9LAogCi0JeyJBbmFsb2cgTGVmdCBBbXBsaWZpZXIiLCBOVUxMLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAotCXsiQW5hbG9nIFJpZ2h0IEFtcGxpZmllciIsIE5VTEwsICJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiQURDIFBoeXNpY2FsIExlZnQiLCBOVUxMLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiQURDIFBoeXNpY2FsIFJpZ2h0IiwgTlVMTCwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCiAKIAl7IkRpZ2ltaWMwIEVuYWJsZSIsIE5VTEwsICJESUdJTUlDMCJ9LAogCXsiRGlnaW1pYzEgRW5hYmxlIiwgTlVMTCwgIkRJR0lNSUMxIn0sCiAKIAkvKiBUWDEgTGVmdCBjYXB0dXJlIHBhdGggKi8KLQl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBbmFsb2cgTGVmdCBBbXBsaWZpZXIifSwKKwl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBREMgUGh5c2ljYWwgTGVmdCJ9LAogCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiRGlnaW1pYzAiLCAiRGlnaW1pYzAgRW5hYmxlIn0sCiAJLyogVFgxIFJpZ2h0IGNhcHR1cmUgcGF0aCAqLwotCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFuYWxvZyBSaWdodCBBbXBsaWZpZXIifSwKKwl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBREMgUGh5c2ljYWwgUmlnaHQifSwKIAl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkRpZ2ltaWMwIiwgIkRpZ2ltaWMwIEVuYWJsZSJ9LAogCS8qIFRYMiBMZWZ0IGNhcHR1cmUgcGF0aCAqLwotCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFuYWxvZyBMZWZ0IEFtcGxpZmllciJ9LAorCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBMZWZ0In0sCiAJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMSIsICJEaWdpbWljMSBFbmFibGUifSwKIAkvKiBUWDIgUmlnaHQgY2FwdHVyZSBwYXRoICovCi0JeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQW5hbG9nIFJpZ2h0IEFtcGxpZmllciJ9LAorCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBSaWdodCJ9LAogCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiRGlnaW1pYzEiLCAiRGlnaW1pYzEgRW5hYmxlIn0sCiAKIAl7IkFEQyBWaXJ0dWFsIExlZnQxIiwgTlVMTCwgIlRYMSBDYXB0dXJlIFJvdXRlIn0sCkBAIC04ODksNiArMTE1NCwyNCBAQAogCXsiQURDIFZpcnR1YWwgTGVmdDIiLCBOVUxMLCAiVFgyIENhcHR1cmUgUm91dGUifSwKIAl7IkFEQyBWaXJ0dWFsIFJpZ2h0MiIsIE5VTEwsICJUWDIgQ2FwdHVyZSBSb3V0ZSJ9LAogCisJLyogQW5hbG9nIGJ5cGFzcyByb3V0ZXMgKi8KKwl7IlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCisJeyJMZWZ0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKKwl7IlJpZ2h0MiBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCisJeyJMZWZ0MiBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKKworCXsiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJMZWZ0MSBBbmFsb2cgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJSaWdodDIgQW5hbG9nIExvb3BiYWNrIn0sCisJeyJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiTGVmdDIgQW5hbG9nIExvb3BiYWNrIn0sCisKKwkvKiBEaWdpdGFsIGJ5cGFzcyByb3V0ZXMgKi8KKwl7IlJpZ2h0IERpZ2l0YWwgTG9vcGJhY2siLCAiVm9sdW1lIiwgIlRYMSBDYXB0dXJlIFJvdXRlIn0sCisJeyJMZWZ0IERpZ2l0YWwgTG9vcGJhY2siLCAiVm9sdW1lIiwgIlRYMSBDYXB0dXJlIFJvdXRlIn0sCisKKwl7IkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJSaWdodCBEaWdpdGFsIExvb3BiYWNrIn0sCisJeyJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiTGVmdCBEaWdpdGFsIExvb3BiYWNrIn0sCisKIH07CiAKIHN0YXRpYyBpbnQgdHdsNDAzMF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCkBAIC05MDIsODIgKzExODUsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl91cChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JdTggYW5hbWljbCwgcmVnbWlzYzEsIGJ5dGUsIHBvcG47Ci0JaW50IGkgPSAwOwotCi0JLyogc2V0IENPREVDUERaIHRvIHR1cm4gb24gY29kZWMgKi8KLQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7Ci0KLQkvKiBpbml0aWF0ZSBvZmZzZXQgY2FuY2VsbGF0aW9uICovCi0JYW5hbWljbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wpOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wsCi0JCWFuYW1pY2wgfCBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKTsKLQotCi0JLyogd2FpdCBmb3Igb2Zmc2V0IGNhbmNlbGxhdGlvbiB0byBjb21wbGV0ZSAqLwotCWRvIHsKLQkJLyogdGhpcyB0YWtlcyBhIGxpdHRsZSB3aGlsZSwgc28gZG9uJ3Qgc2xhbSBpMmMgKi8KLQkJdWRlbGF5KDIwMDApOwotCQl0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmYnl0ZSwKLQkJCQkgICAgVFdMNDAzMF9SRUdfQU5BTUlDTCk7Ci0JfSB3aGlsZSAoKGkrKyA8IDEwMCkgJiYKLQkJICgoYnl0ZSAmIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpID09Ci0JCSAgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkpOwotCi0JLyogYW50aS1wb3Agd2hlbiBjaGFuZ2luZyBhbmFsb2cgZ2FpbiAqLwotCXJlZ21pc2MxID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSwKLQkJcmVnbWlzYzEgfCBUV0w0MDMwX1NNT09USF9BTkFWT0xfRU4pOwotCi0JLyogdG9nZ2xlIENPREVDUERaIGFzIHBlciBUUk0gKi8KLQl0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KGNvZGVjKTsKLQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7Ci0KLQkvKiBwcm9ncmFtIGFudGktcG9wIHdpdGggYmlhcyByYW1wIGRlbGF5ICovCi0JcG9wbiA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VUKTsKLQlwb3BuICY9IFRXTDQwMzBfUkFNUF9ERUxBWTsKLQlwb3BuIHw9CVRXTDQwMzBfUkFNUF9ERUxBWV82NDVNUzsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci0JcG9wbiB8PQlUV0w0MDMwX1ZNSURfRU47Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotCi0JLyogZW5hYmxlIGFudGktcG9wIHJhbXAgKi8KLQlwb3BuIHw9IFRXTDQwMzBfUkFNUF9FTjsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHR3bDQwMzBfcG93ZXJfZG93bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JdTggcG9wbjsKLQotCS8qIGRpc2FibGUgYW50aS1wb3AgcmFtcCAqLwotCXBvcG4gPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCk7Ci0JcG9wbiAmPSB+VFdMNDAzMF9SQU1QX0VOOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLQotCS8qIGRpc2FibGUgYmlhcyBvdXQgKi8KLQlwb3BuICY9IH5UV0w0MDMwX1ZNSURfRU47Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotCi0JLyogcG93ZXIgZG93biAqLwotCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOwotfQotCiBzdGF0aWMgaW50IHR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCXR3bDQwMzBfcG93ZXJfdXAoY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQkvKiBUT0RPOiBkZXZlbG9wIGEgdHdsNDAzMF9wcmVwYXJlIGZ1bmN0aW9uICovCisJCXR3bDQwMzBfcG93ZXJfdXAoY29kZWMpOworCQlpZiAodHdsNDAzMC0+YnlwYXNzX3N0YXRlKQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAwKTsKKwkJZWxzZQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJLyogVE9ETzogZGV2ZWxvcCBhIHR3bDQwMzBfc3RhbmRieSBmdW5jdGlvbiAqLwotCQl0d2w0MDMwX3Bvd2VyX2Rvd24oY29kZWMpOworCQl0d2w0MDMwX3Bvd2VyX3VwKGNvZGVjKTsKKwkJaWYgKHR3bDQwMzAtPmJ5cGFzc19zdGF0ZSkKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMCk7CisJCWVsc2UKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJdHdsNDAzMF9wb3dlcl9kb3duKGNvZGVjKTsKQEAgLTk5NCwxMCArMTIyMyw5IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXU4IG1vZGUsIG9sZF9tb2RlLCBmb3JtYXQsIG9sZF9mb3JtYXQ7CiAKLQogCS8qIGJpdCByYXRlICovCiAJb2xkX21vZGUgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLAogCQkJVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSkgJiB+VFdMNDAzMF9DT0RFQ1BEWjsKQEAgLTEwMzksOCArMTI2Nyw5IEBACiAKIAlpZiAobW9kZSAhPSBvbGRfbW9kZSkgewogCQkvKiBjaGFuZ2UgcmF0ZSBhbmQgc2V0IENPREVDUERaICovCisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwgbW9kZSk7Ci0JCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOwogCX0KIAogCS8qIHNhbXBsZSBzaXplICovCkBAIC0xMDYzLDEzICsxMjkyLDEzIEBACiAJaWYgKGZvcm1hdCAhPSBvbGRfZm9ybWF0KSB7CiAKIAkJLyogY2xlYXIgQ09ERUNQRFogYmVmb3JlIGNoYW5naW5nIGZvcm1hdCAoY29kZWMgcmVxdWlyZW1lbnQpICovCi0JCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAKIAkJLyogY2hhbmdlIGZvcm1hdCAqLwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRiwgZm9ybWF0KTsKIAogCQkvKiBzZXQgQ09ERUNQRFogYWZ0ZXJ3YXJkcyAqLwotCQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTM5LDEzICsxMzY4LDEzIEBACiAJaWYgKGZvcm1hdCAhPSBvbGRfZm9ybWF0KSB7CiAKIAkJLyogY2xlYXIgQ09ERUNQRFogYmVmb3JlIGNoYW5naW5nIGZvcm1hdCAoY29kZWMgcmVxdWlyZW1lbnQpICovCi0JCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAKIAkJLyogY2hhbmdlIGZvcm1hdCAqLwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRiwgZm9ybWF0KTsKIAogCQkvKiBzZXQgQ09ERUNQRFogYWZ0ZXJ3YXJkcyAqLwotCQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExNTQsNiArMTM4MywxMiBAQAogI2RlZmluZSBUV0w0MDMwX1JBVEVTCSAoU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCkKICNkZWZpbmUgVFdMNDAzMF9GT1JNQVRTCSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdHdsNDAzMF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB0d2w0MDMwX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IHR3bDQwMzBfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB0d2w0MDMwX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHR3bDQwMzBfZGFpID0gewogCS5uYW1lID0gInR3bDQwMzAiLAogCS5wbGF5YmFjayA9IHsKQEAgLTExNjgsMTggKzE0MDMsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFRXTDQwMzBfUkFURVMsCiAJCS5mb3JtYXRzID0gVFdMNDAzMF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHR3bDQwMzBfaHdfcGFyYW1zLAotCQkuc2V0X3N5c2NsayA9IHR3bDQwMzBfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gdHdsNDAzMF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ0d2w0MDMwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwodHdsNDAzMF9kYWkpOwogCiBzdGF0aWMgaW50IHR3bDQwMzBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApAQCAtMTE4OSw3ICsxNDIwLDcgQEAKIHN0YXRpYyBpbnQgdHdsNDAzMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKQEAgLTEyMDMsNyArMTQzNCw3IEBACiAKIHN0YXRpYyBpbnQgdHdsNDAzMF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCXByaW50ayhLRVJOX0lORk8gIlRXTDQwMzAgQXVkaW8gQ29kZWMgaW5pdCBcbiIpOwpAQCAtMTIzMyw3ICsxNDY0LDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKLQl0d2w0MDMwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHR3bDQwMzBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodHdsNDAzMF9zbmRfY29udHJvbHMpKTsKIAl0d2w0MDMwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CkBAIC0xMjU4LDEyICsxNDkwLDIwIEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMDsKIAogCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJdHdsNDAzMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0d2w0MDMwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodHdsNDAzMCA9PSBOVUxMKSB7CisJCWtmcmVlKGNvZGVjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHR3bDQwMzA7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC0xMjc3LDExICsxNTE3LDEzIEBACiBzdGF0aWMgaW50IHR3bDQwMzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUV0w0MDMwIEF1ZGlvIENvZGVjIHJlbW92ZVxuIik7CisJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwogCWtmcmVlKGNvZGVjKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmggYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAppbmRleCA0NDJlNWE4Li4zM2RiYjE0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaApAQCAtMTcwLDYgKzE3MCw5IEBACiAjZGVmaW5lIFRXTDQwMzBfQ0xLMjU2RlNfRU4JCTB4MDIKICNkZWZpbmUgVFdMNDAzMF9BSUZfRU4JCQkweDAxCiAKKy8qIEVBUl9DVEwgKDB4MjEpICovCisjZGVmaW5lIFRXTDQwMzBfRUFSX0dBSU4JCTB4MzAKKwogLyogSFNfR0FJTl9TRVQgKDB4MjMpIEZpZWxkcyAqLwogCiAjZGVmaW5lIFRXTDQwMzBfSFNSX0dBSU4JCTB4MEMKQEAgLTE5OCw2ICsyMDEsMTggQEAKICNkZWZpbmUgVFdMNDAzMF9SQU1QX0RFTEFZXzI1ODFNUwkweDFDCiAjZGVmaW5lIFRXTDQwMzBfUkFNUF9FTgkJCTB4MDIKIAorLyogUFJFRExfQ1RMICgweDI1KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRURMX0dBSU4JCTB4MzAKKworLyogUFJFRFJfQ1RMICgweDI2KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRURSX0dBSU4JCTB4MzAKKworLyogUFJFQ0tMX0NUTCAoMHgyNykgKi8KKyNkZWZpbmUgVFdMNDAzMF9QUkVDS0xfR0FJTgkJMHgzMAorCisvKiBQUkVDS1JfQ1RMICgweDI4KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRUNLUl9HQUlOCQkweDMwCisKIC8qIEhGTF9DVEwgKDB4MjksIDB4MkEpIEZpZWxkcyAqLwogI2RlZmluZSBUV0w0MDMwX0hGX0NUTF9IQl9FTgkJMHgwNAogI2RlZmluZSBUV0w0MDMwX0hGX0NUTF9MT09QX0VOCQkweDA4CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCmluZGV4IGEyYzUwNjQuLmRkZWZiOGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCkBAIC0xNzMsNyArMTczLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHVkYTEzNHhfcHJpdiAqdWRhMTM0eCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqbWFzdGVyX3J1bnRpbWU7CiAKQEAgLTIwNiw3ICsyMDYsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgdWRhMTM0eF9wcml2ICp1ZGExMzR4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAogCWlmICh1ZGExMzR4LT5tYXN0ZXJfc3Vic3RyZWFtID09IHN1YnN0cmVhbSkKQEAgLTIyMSw3ICsyMjEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgdWRhMTM0eF9wcml2ICp1ZGExMzR4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBod19wYXJhbXM7CiAKQEAgLTQzMSwzOCArNDMxLDE0IEBACiBTT0NfU0lOR0xFKCJEQyBGaWx0ZXIgRW5hYmxlIFN3aXRjaCIsIFVEQTEzNFhfU1RBVFVTMCwgMCwgMSwgMCksCiB9OwogCi1zdGF0aWMgaW50IHVkYTEzNHhfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpLCBuOwotCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjdHJsczsKLQlzdHJ1Y3QgdWRhMTM0eF9wbGF0Zm9ybV9kYXRhICpwZCA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0KLQlzd2l0Y2ggKHBkLT5tb2RlbCkgewotCWNhc2UgVURBMTM0WF9VREExMzQwOgotCWNhc2UgVURBMTM0WF9VREExMzQ0OgotCQluID0gQVJSQVlfU0laRSh1ZGExMzQwX3NuZF9jb250cm9scyk7Ci0JCWN0cmxzID0gdWRhMTM0MF9zbmRfY29udHJvbHM7Ci0JCWJyZWFrOwotCWNhc2UgVURBMTM0WF9VREExMzQxOgotCQluID0gQVJSQVlfU0laRSh1ZGExMzQxX3NuZF9jb250cm9scyk7Ci0JCWN0cmxzID0gdWRhMTM0MV9zbmRfY29udHJvbHM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgdW5rb3duIGNvZGVjIHR5cGU6ICVkIiwKLQkJICAgICAgIF9fZnVuY19fLCBwZC0+bW9kZWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZjdHJsc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHVkYTEzNHhfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHVkYTEzNHhfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSB1ZGExMzR4X3NodXRkb3duLAorCS5od19wYXJhbXMJPSB1ZGExMzR4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gdWRhMTM0eF9tdXRlLAorCS5zZXRfc3lzY2xrCT0gdWRhMTM0eF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHVkYTEzNHhfc2V0X2RhaV9mbXQsCit9OwogCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdWRhMTM0eF9kYWkgPSB7CiAJLm5hbWUgPSAiVURBMTM0WCIsCkBAIC00ODMsMTQgKzQ1OSw3IEBACiAJCS5mb3JtYXRzID0gVURBMTM0WF9GT1JNQVRTLAogCX0sCiAJLyogcGNtIG9wZXJhdGlvbnMgKi8KLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHVkYTEzNHhfc3RhcnR1cCwKLQkJLnNodXRkb3duID0gdWRhMTM0eF9zaHV0ZG93biwKLQkJLmh3X3BhcmFtcyA9IHVkYTEzNHhfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gdWRhMTM0eF9tdXRlLAotCQkuc2V0X3N5c2NsayA9IHVkYTEzNHhfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gdWRhMTM0eF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ1ZGExMzR4X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTCh1ZGExMzR4X2RhaSk7CiAKQEAgLTUyNSwxMSArNDk0LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIHJldDsKIAotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVkYTEzNHhfcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICh1ZGExMzR4ID09IE5VTEwpCkBAIC01NzIsNyArNTQxLDIyIEBACiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQlyZXQgPSB1ZGExMzR4X2FkZF9jb250cm9scyhjb2RlYyk7CisJc3dpdGNoIChwZC0+bW9kZWwpIHsKKwljYXNlIFVEQTEzNFhfVURBMTM0MDoKKwljYXNlIFVEQTEzNFhfVURBMTM0NDoKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHVkYTEzNDBfc25kX2NvbnRyb2xzLAorCQkJCQlBUlJBWV9TSVpFKHVkYTEzNDBfc25kX2NvbnRyb2xzKSk7CisJYnJlYWs7CisJY2FzZSBVREExMzRYX1VEQTEzNDE6CisJCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB1ZGExMzQxX3NuZF9jb250cm9scywKKwkJCQkJQVJSQVlfU0laRSh1ZGExMzQxX3NuZF9jb250cm9scykpOworCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXMgdW5rb3duIGNvZGVjIHR5cGU6ICVkIiwKKwkJCV9fZnVuY19fLCBwZC0+bW9kZWwpOworCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVURBMTM0WDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNvbnRyb2xzXG4iKTsKIAkJZ290byBwY21fZXJyOwpAQCAtNjAyLDcgKzU4Niw3IEBACiBzdGF0aWMgaW50IHVkYTEzNHhfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpAQCAtNjIyLDcgKzYwNiw3IEBACiAJCQkJCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CkBAIC02MzIsNyArNjE2LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM0eF9zb2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7CiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09OKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKaW5kZXggZTZiZjA4NC4uNWIyMTU5NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC0zNSw3ICszNiw4IEBACiAKICNpbmNsdWRlICJ1ZGExMzgwLmgiCiAKLSNkZWZpbmUgVURBMTM4MF9WRVJTSU9OICIwLjYiCitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHVkYTEzODBfd29yazsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqdWRhMTM4MF9jb2RlYzsKIAogLyoKICAqIHVkYTEzODAgcmVnaXN0ZXIgY2FjaGUKQEAgLTUyLDYgKzU0LDggQEAKIAkweDAwMDAsIDB4ODAwMCwgMHgwMDAyLCAweDAwMDAsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1ZGExMzgwX2NhY2hlX2RpcnR5OworCiAvKgogICogcmVhZCB1ZGExMzgwIHJlZ2lzdGVyIGNhY2hlCiAgKi8KQEAgLTczLDggKzc3LDExIEBACiAJdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCiAJaWYgKHJlZyA+PSBVREExMzgwX0NBQ0hFUkVHTlVNKQogCQlyZXR1cm47CisJaWYgKChyZWcgPj0gMHgxMCkgJiYgKGNhY2hlW3JlZ10gIT0gdmFsdWUpKQorCQlzZXRfYml0KHJlZyAtIDB4MTAsICZ1ZGExMzgwX2NhY2hlX2RpcnR5KTsKIAljYWNoZVtyZWddID0gdmFsdWU7CiB9CiAKQEAgLTExMyw2ICsxMjAsOCBAQAogCQkJCQkoZGF0YVswXTw8OCkgfCBkYXRhWzFdKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisJCWlmIChyZWcgPj0gMHgxMCkKKwkJCWNsZWFyX2JpdChyZWcgLSAweDEwLCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSk7CiAJCXJldHVybiAwOwogCX0gZWxzZQogCQlyZXR1cm4gLUVJTzsKQEAgLTEyMCw2ICsxMjksMjAgQEAKIAogI2RlZmluZSB1ZGExMzgwX3Jlc2V0KGMpCXVkYTEzODBfd3JpdGUoYywgVURBMTM4MF9SRVNFVCwgMCkKIAorc3RhdGljIHZvaWQgdWRhMTM4MF9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgYml0LCByZWc7CisKKwlmb3JfZWFjaF9iaXQoYml0LCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSwgVURBMTM4MF9DQUNIRVJFR05VTSAtIDB4MTApIHsKKwkJcmVnID0gMHgxMCArIGJpdDsKKwkJcHJfZGVidWcoInVkYTEzODA6IGZsdXNoIHJlZyAleCB2YWwgJXg6XG4iLCByZWcsCisJCQkJdWRhMTM4MF9yZWFkX3JlZ19jYWNoZSh1ZGExMzgwX2NvZGVjLCByZWcpKTsKKwkJdWRhMTM4MF93cml0ZSh1ZGExMzgwX2NvZGVjLCByZWcsCisJCQkJdWRhMTM4MF9yZWFkX3JlZ19jYWNoZSh1ZGExMzgwX2NvZGVjLCByZWcpKTsKKwkJY2xlYXJfYml0KGJpdCwgJnVkYTEzODBfY2FjaGVfZGlydHkpOworCX0KK30KKwogLyogZGVjbGFyYXRpb25zIG9mIEFMU0EgcmVnX2VsZW1fUkVBTCBjb250cm9scyAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnVkYTEzODBfZGVlbXBbXSA9IHsKIAkiTm9uZSIsCkBAIC0yNTQsNyArMjc3LDYgQEAKIAlTT0NfU0lOR0xFKCJEQUMgUG9sYXJpdHkgaW52ZXJ0aW5nIFN3aXRjaCIsIFVEQTEzODBfTUlYRVIsIDE1LCAxLCAwKSwJLyogREFfUE9MX0lOViAqLwogCVNPQ19FTlVNKCJOb2lzZSBTaGFwZXIiLCB1ZGExMzgwX3NlbF9uc19lbnVtKSwJCQkJLyogU0VMX05TICovCiAJU09DX0VOVU0oIkRpZ2l0YWwgTWl4ZXIgU2lnbmFsIENvbnRyb2wiLCB1ZGExMzgwX21peF9lbnVtKSwJCS8qIE1JWF9QT1MsIE1JWCAqLwotCVNPQ19TSU5HTEUoIlNpbGVuY2UgU3dpdGNoIiwgVURBMTM4MF9NSVhFUiwgNywgMSwgMCksCQkJLyogU0lMRU5DRSwgZm9yY2UgREFDIG91dHB1dCB0byBzaWxlbmNlICovCiAJU09DX1NJTkdMRSgiU2lsZW5jZSBEZXRlY3RvciBTd2l0Y2giLCBVREExMzgwX01JWEVSLCA2LCAxLCAwKSwJCS8qIFNERVRfT04gKi8KIAlTT0NfRU5VTSgiU2lsZW5jZSBEZXRlY3RvciBTZXR0aW5nIiwgdWRhMTM4MF9zZGV0X2VudW0pLAkJLyogU0RfVkFMVUUgKi8KIAlTT0NfRU5VTSgiT3ZlcnNhbXBsaW5nIElucHV0IiwgdWRhMTM4MF9vc19lbnVtKSwJCQkvKiBPUyAqLwpAQCAtMjcxLDIxICsyOTMsNiBAQAogCVNPQ19TSU5HTEUoIkFHQyBTd2l0Y2giLCBVREExMzgwX0FHQywgMCwgMSwgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgdWRhMTM4MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1ZGExMzgwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmdWRhMTM4MF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogSW5wdXQgbXV4ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdWRhMTM4MF9pbnB1dF9tdXhfY29udHJvbCA9CiAJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB1ZGExMzgwX2lucHV0X3NlbF9lbnVtKTsKQEAgLTM3MSw3ICszNzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVkYTEzODBfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCitzdGF0aWMgaW50IHVkYTEzODBfc2V0X2RhaV9mbXRfYm90aChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwpAQCAtMzgxLDE2ICszODgsNzUgQEAKIAlpZmFjZSA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfSUZBQ0UpOwogCWlmYWNlICY9IH4oUjAxX1NGT1JJX01BU0sgfCBSMDFfU0lNIHwgUjAxX1NGT1JPX01BU0spOwogCi0JLyogRklYTUU6IGhvdyB0byBzZWxlY3QgSTJTIGZvciBEQVRBTyBhbmQgTVNCIGZvciBEQVRBSSBjb3JyZWN0bHk/ICovCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCQlpZmFjZSB8PSBSMDFfU0ZPUklfSTJTIHwgUjAxX1NGT1JPX0kyUzsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9MU0I6Ci0JCWlmYWNlIHw9IFIwMV9TRk9SSV9MU0IxNiB8IFIwMV9TRk9ST19JMlM7CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9MU0IxNiB8IFIwMV9TRk9ST19MU0IxNjsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9NU0I6Ci0JCWlmYWNlIHw9IFIwMV9TRk9SSV9NU0IgfCBSMDFfU0ZPUk9fSTJTOworCQlpZmFjZSB8PSBSMDFfU0ZPUklfTVNCIHwgUjAxX1NGT1JPX01TQjsKKwl9CisKKwkvKiBEQVRBSSBpcyBzbGF2ZSBvbmx5LCBzbyBpbiBzaW5nbGUtbGluayBtb2RlLCB0aGlzIGhhcyB0byBiZSBzbGF2ZSAqLworCWlmICgoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spICE9IFNORF9TT0NfREFJRk1UX0NCU19DRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9JRkFDRSwgaWZhY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdF9wbGF5YmFjayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCBpZmFjZTsKKworCS8qIHNldCB1cCBEQUkgYmFzZWQgdXBvbiBmbXQgKi8KKwlpZmFjZSA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfSUZBQ0UpOworCWlmYWNlICY9IH5SMDFfU0ZPUklfTUFTSzsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9MU0IxNjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9NU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9NU0I7CisJfQorCisJLyogREFUQUkgaXMgc2xhdmUgb25seSwgc28gdGhpcyBoYXMgdG8gYmUgc2xhdmUgKi8KKwlpZiAoKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSAhPSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfSUZBQ0UsIGlmYWNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkYTEzODBfc2V0X2RhaV9mbXRfY2FwdHVyZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCBpZmFjZTsKKworCS8qIHNldCB1cCBEQUkgYmFzZWQgdXBvbiBmbXQgKi8KKwlpZmFjZSA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfSUZBQ0UpOworCWlmYWNlICY9IH4oUjAxX1NJTSB8IFIwMV9TRk9ST19NQVNLKTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gUjAxX1NGT1JPX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9ST19MU0IxNjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9NU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9ST19NU0I7CiAJfQogCiAJaWYgKChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgPT0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSkKQEAgLTQwMSw0MSArNDY3LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBGbHVzaCByZWcgY2FjaGUKLSAqIFdlIGNhbiBvbmx5IHdyaXRlIHRoZSBpbnRlcnBvbGF0b3IgYW5kIGRlY2ltYXRvciByZWdpc3RlcnMKLSAqIHdoZW4gdGhlIERBSSBpcyBiZWluZyBjbG9ja2VkIGJ5IHRoZSBDUFUgREFJLiBJdCdzIHVwIHRvIHRoZQotICogbWFjaGluZSBhbmQgY3B1IERBSSBkcml2ZXIgdG8gZG8gdGhpcyBiZWZvcmUgd2UgYXJlIGNhbGxlZC4KLSAqLwotc3RhdGljIGludCB1ZGExMzgwX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorc3RhdGljIGludCB1ZGExMzgwX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJlZywgcmVnX3N0YXJ0LCByZWdfZW5kLCBjbGs7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgbWl4ZXIgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSKTsKIAotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCXJlZ19zdGFydCA9IFVEQTEzODBfTVZPTDsKLQkJcmVnX2VuZCA9IFVEQTEzODBfTUlYRVI7Ci0JfSBlbHNlIHsKLQkJcmVnX3N0YXJ0ID0gVURBMTM4MF9ERUM7Ci0JCXJlZ19lbmQgPSBVREExMzgwX0FHQzsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQl1ZGExMzgwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9NSVhFUiwKKwkJCQkJbWl4ZXIgJiB+UjE0X1NJTEVOQ0UpOworCQlzY2hlZHVsZV93b3JrKCZ1ZGExMzgwX3dvcmspOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQl1ZGExMzgwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9NSVhFUiwKKwkJCQkJbWl4ZXIgfCBSMTRfU0lMRU5DRSk7CisJCXNjaGVkdWxlX3dvcmsoJnVkYTEzODBfd29yayk7CisJCWJyZWFrOwogCX0KLQotCS8qIEZJWE1FIGRpc2FibGUgREFDX0NMSyAqLwotCWNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrICYgflIwMF9EQUNfQ0xLKTsKLQotCWZvciAocmVnID0gcmVnX3N0YXJ0OyByZWcgPD0gcmVnX2VuZDsgcmVnKyspIHsKLQkJcHJfZGVidWcoInVkYTEzODA6IGZsdXNoIHJlZyAleCB2YWwgJXg6IiwgcmVnLAotCQkJCXVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZykpOwotCQl1ZGExMzgwX3dyaXRlKGNvZGVjLCByZWcsIHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZykpOwotCX0KLQotCS8qIEZJWE1FIGVuYWJsZSBEQUNfQ0xLICovCi0JdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9DTEssIGNsayB8IFIwMF9EQUNfQ0xLKTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NDUsNyArNDk4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKIAogCS8qIHNldCBXU1BMTCBwb3dlciBhbmQgZGl2aWRlciBpZiBydW5uaW5nIGZyb20gdGhpcyBjbG9jayAqLwpAQCAtNDg0LDcgKzUzNyw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBjbGsgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0NMSyk7CiAKIAkvKiBzaHV0IGRvd24gV1NQTEwgcG93ZXIgaWYgcnVubmluZyBmcm9tIHRoaXMgY2xvY2sgKi8KQEAgLTUwMSwyNCArNTU0LDYgQEAKIAl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrKTsKIH0KIAotc3RhdGljIGludCB1ZGExMzgwX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7Ci0JdTE2IG11dGVfcmVnID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9ERUVNUCkgJiB+UjEzX01UTTsKLQotCS8qIEZJWE1FOiBtdXRlKGNvZGVjLDApIGlzIGNhbGxlZCB3aGVuIHRoZSBtYWdpY2lhbiBjbG9jayBpcyBhbHJlYWR5Ci0JICogc2V0IHRvIFdTUExMLCBidXQgZm9yIHNvbWUgdW5rbm93biByZWFzb24gd3JpdGluZyB0byBpbnRlcnBvbGF0b3IKLQkgKiByZWdpc3RlcnMgd29ya3Mgb25seSB3aGVuIGNsb2NrZWQgYnkgU1lTQ0xLICovCi0JdTE2IGNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgflIwMF9EQUNfQ0xLICYgY2xrKTsKLQlpZiAobXV0ZSkKLQkJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9ERUVNUCwgbXV0ZV9yZWcgfCBSMTNfTVRNKTsKLQllbHNlCi0JCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfREVFTVAsIG11dGVfcmVnKTsKLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB1ZGExMzgwX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKQEAgLTU0NCw2ICs1NzksMjcgQEAKIAkJICAgICAgIFNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfFwKIAkJICAgICAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHVkYTEzODBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHVkYTEzODBfcGNtX3NodXRkb3duLAorCS50cmlnZ2VyCT0gdWRhMTM4MF90cmlnZ2VyLAorCS5zZXRfZm10CT0gdWRhMTM4MF9zZXRfZGFpX2ZtdF9ib3RoLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM4MF9kYWlfb3BzX3BsYXliYWNrID0geworCS5od19wYXJhbXMJPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gdWRhMTM4MF9wY21fc2h1dGRvd24sCisJLnRyaWdnZXIJPSB1ZGExMzgwX3RyaWdnZXIsCisJLnNldF9mbXQJPSB1ZGExMzgwX3NldF9kYWlfZm10X3BsYXliYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM4MF9kYWlfb3BzX2NhcHR1cmUgPSB7CisJLmh3X3BhcmFtcwk9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHVkYTEzODBfdHJpZ2dlciwKKwkuc2V0X2ZtdAk9IHVkYTEzODBfc2V0X2RhaV9mbXRfY2FwdHVyZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB1ZGExMzgwX2RhaVtdID0gewogewogCS5uYW1lID0gIlVEQTEzODAiLApAQCAtNTU5LDEzICs2MTUsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gVURBMTM4MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHVkYTEzODBfcGNtX3NodXRkb3duLAotCQkucHJlcGFyZSA9IHVkYTEzODBfcGNtX3ByZXBhcmUsCi0JCS5kaWdpdGFsX211dGUgPSB1ZGExMzgwX211dGUsCi0JCS5zZXRfZm10ID0gdWRhMTM4MF9zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmdWRhMTM4MF9kYWlfb3BzLAogfSwKIHsgLyogcGxheWJhY2sgb25seSAtIGR1YWwgaW50ZXJmYWNlICovCiAJLm5hbWUgPSAiVURBMTM4MCIsCkBAIC01NzYsMTMgKzYyNiw3IEBACiAJCS5yYXRlcyA9IFVEQTEzODBfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKLQkJLnByZXBhcmUgPSB1ZGExMzgwX3BjbV9wcmVwYXJlLAotCQkuZGlnaXRhbF9tdXRlID0gdWRhMTM4MF9tdXRlLAotCQkuc2V0X2ZtdCA9IHVkYTEzODBfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJnVkYTEzODBfZGFpX29wc19wbGF5YmFjaywKIH0sCiB7IC8qIGNhcHR1cmUgb25seSAtIGR1YWwgaW50ZXJmYWNlKi8KIAkubmFtZSA9ICJVREExMzgwIiwKQEAgLTU5MywxMiArNjM3LDcgQEAKIAkJLnJhdGVzID0gVURBMTM4MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAl9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHVkYTEzODBfcGNtX3NodXRkb3duLAotCQkucHJlcGFyZSA9IHVkYTEzODBfcGNtX3ByZXBhcmUsCi0JCS5zZXRfZm10ID0gdWRhMTM4MF9zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmdWRhMTM4MF9kYWlfb3BzX2NhcHR1cmUsCiB9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHVkYTEzODBfZGFpKTsKQEAgLTYwNiw3ICs2NDUsNyBAQAogc3RhdGljIGludCB1ZGExMzgwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdWRhMTM4MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC02MTUsNyArNjU0LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM4MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNjM3LDcgKzY3Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdWRhMTM4MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LCBpbnQgZGFjX2NsaykKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJVREExMzgwIjsKQEAgLTY1NSw2ICs2OTQsOSBAQAogCWNvZGVjLT5yZWdfY2FjaGVfc3RlcCA9IDE7CiAJdWRhMTM4MF9yZXNldChjb2RlYyk7CiAKKwl1ZGExMzgwX2NvZGVjID0gY29kZWM7CisJSU5JVF9XT1JLKCZ1ZGExMzgwX3dvcmssIHVkYTEzODBfZmx1c2hfd29yayk7CisKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNjc1LDcgKzcxNyw4IEBACiAJfQogCiAJLyogdWRhMTM4MCBpbml0ICovCi0JdWRhMTM4MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB1ZGExMzgwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHVkYTEzODBfc25kX2NvbnRyb2xzKSk7CiAJdWRhMTM4MF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNzAyLDcgKzc0NSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB1ZGExMzgwX3NvY2RldjsKIAlzdHJ1Y3QgdWRhMTM4MF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTc4NiwxNCArODI5LDEyIEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQ7CiAKLQlwcl9pbmZvKCJVREExMzgwIEF1ZGlvIENvZGVjICVzIiwgVURBMTM4MF9WRVJTSU9OKTsKLQogCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwogCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC04MTcsNyArODU4LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl1ZGExMzgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCmluZGV4IDM1ZDk5NzUuLjNiMWQwOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwpAQCAtNTEsMTAgKzUxLDE3IEBACiAJdTE2IG11dGU7CiB9OwogCitzdHJ1Y3Qgd204MzUwX2phY2tfZGF0YSB7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKKwlpbnQgcmVwb3J0OworfTsKKwogc3RydWN0IHdtODM1MF9kYXRhIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKIAlzdHJ1Y3Qgd204MzUwX291dHB1dCBvdXQxOwogCXN0cnVjdCB3bTgzNTBfb3V0cHV0IG91dDI7CisJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgaHBsOworCXN0cnVjdCB3bTgzNTBfamFja19kYXRhIGhwcjsKIAlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHN1cHBseV9uYW1lcyldOwogfTsKIApAQCAtNzc1LDIxICs3ODIsNiBAQAogCXsiQmVlcCIsIE5VTEwsICJJTjNSIFBHQSJ9LAogfTsKIAotc3RhdGljIGludCB3bTgzNTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204MzUwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204MzUwX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB3bTgzNTBfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCWludCByZXQ7CkBAIC0xMzA5LDcgKzEzMDEsNyBAQAogc3RhdGljIGludCB3bTgzNTBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTgzNTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtMTMxOCw3ICsxMzEwLDcgQEAKIHN0YXRpYyBpbnQgd204MzUwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204MzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKQEAgLTEzMjgsNiArMTMyMCw5NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB3bTgzNTBfaHBfamFja19oYW5kbGVyKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXYgPSBkYXRhOworCXUxNiByZWc7CisJaW50IHJlcG9ydDsKKwlpbnQgbWFzazsKKwlzdHJ1Y3Qgd204MzUwX2phY2tfZGF0YSAqamFjayA9IE5VTEw7CisKKwlzd2l0Y2ggKGlycSkgeworCWNhc2UgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0w6CisJCWphY2sgPSAmcHJpdi0+aHBsOworCQltYXNrID0gV004MzUwX0pBQ0tfTF9MVkw7CisJCWJyZWFrOworCisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjoKKwkJamFjayA9ICZwcml2LT5ocHI7CisJCW1hc2sgPSBXTTgzNTBfSkFDS19SX0xWTDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlpZiAoIWphY2stPmphY2spIHsKKwkJZGV2X3dhcm4od204MzUwLT5kZXYsICJKYWNrIGludGVycnVwdCBjYWxsZWQgd2l0aCBubyBqYWNrXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIERlYm91bmNlICovCisJbXNsZWVwKDIwMCk7CisKKwlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSkFDS19QSU5fU1RBVFVTKTsKKwlpZiAocmVnICYgbWFzaykKKwkJcmVwb3J0ID0gamFjay0+cmVwb3J0OworCWVsc2UKKwkJcmVwb3J0ID0gMDsKKworCXNuZF9zb2NfamFja19yZXBvcnQoamFjay0+amFjaywgcmVwb3J0LCBqYWNrLT5yZXBvcnQpOworfQorCisvKioKKyAqIHdtODM1MF9ocF9qYWNrX2RldGVjdCAtIEVuYWJsZSBoZWFkcGhvbmUgamFjayBkZXRlY3Rpb24uCisgKgorICogQGNvZGVjOiAgV004MzUwIGNvZGVjCisgKiBAd2hpY2g6ICBsZWZ0IG9yIHJpZ2h0IGphY2sgZGV0ZWN0IHNpZ25hbAorICogQGphY2s6ICAgamFjayB0byByZXBvcnQgZGV0ZWN0aW9uIGV2ZW50cyBvbgorICogQHJlcG9ydDogdmFsdWUgdG8gcmVwb3J0CisgKgorICogRW5hYmxlcyB0aGUgaGVhZHBob25lIGphY2sgZGV0ZWN0aW9uIG9mIHRoZSBXTTgzNTAuCisgKi8KK2ludCB3bTgzNTBfaHBfamFja19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBlbnVtIHdtODM1MF9qYWNrIHdoaWNoLAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgcmVwb3J0KQoreworCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKwlpbnQgaXJxOworCWludCBlbmE7CisKKwlzd2l0Y2ggKHdoaWNoKSB7CisJY2FzZSBXTTgzNTBfSkRMOgorCQlwcml2LT5ocGwuamFjayA9IGphY2s7CisJCXByaXYtPmhwbC5yZXBvcnQgPSByZXBvcnQ7CisJCWlycSA9IFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MOworCQllbmEgPSBXTTgzNTBfSkRMX0VOQTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODM1MF9KRFI6CisJCXByaXYtPmhwci5qYWNrID0gamFjazsKKwkJcHJpdi0+aHByLnJlcG9ydCA9IHJlcG9ydDsKKwkJaXJxID0gV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1I7CisJCWVuYSA9IFdNODM1MF9KRFJfRU5BOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzQsIFdNODM1MF9UT0NMS19FTkEpOworCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9KQUNLX0RFVEVDVCwgZW5hKTsKKworCS8qIFN5bmMgc3RhdHVzICovCisJd204MzUwX2hwX2phY2tfaGFuZGxlcih3bTgzNTAsIGlycSwgcHJpdik7CisKKwl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIGlycSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9ocF9qYWNrX2RldGVjdCk7CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204MzUwX2NvZGVjOwogCiBzdGF0aWMgaW50IHdtODM1MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTM0Miw4ICsxNDIzLDggQEAKIAogCUJVR19PTighd204MzUwX2NvZGVjKTsKIAotCXNvY2Rldi0+Y29kZWMgPSB3bTgzNTBfY29kZWM7Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTgzNTBfY29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXdtODM1MCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKQEAgLTEzODEsMTMgKzE0NjIsMjEgQEAKIAl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfUk9VVDJfVk9MVU1FLAogCQkJV004MzUwX09VVDJfVlUgfCBXTTgzNTBfT1VUMlJfTVVURSk7CiAKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCk7CisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IpOworCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCwKKwkJCSAgICB3bTgzNTBfaHBfamFja19oYW5kbGVyLCBwcml2KTsKKwl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IsCisJCQkgICAgd204MzUwX2hwX2phY2tfaGFuZGxlciwgcHJpdik7CisKIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0Jd204MzUwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODM1MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTgzNTBfc25kX2NvbnRyb2xzKSk7CiAJd204MzUwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXdtODM1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwpAQCAtMTQwOSwxMCArMTQ5OCwyMyBAQAogc3RhdGljIGludCB3bTgzNTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKwlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQ7CiAKKwl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9KQUNLX0RFVEVDVCwKKwkJCSAgV004MzUwX0pETF9FTkEgfCBXTTgzNTBfSkRSX0VOQSk7CisJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF80LCBXTTgzNTBfVE9DTEtfRU5BKTsKKworCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MKTsKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUik7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKKworCXByaXYtPmhwbC5qYWNrID0gTlVMTDsKKwlwcml2LT5ocHIuamFjayA9IE5VTEw7CisKIAkvKiBjYW5jZWwgYW55IHdvcmsgd2FpdGluZyB0byBiZSBxdWV1ZWQuICovCiAJcmV0ID0gY2FuY2VsX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yayk7CiAKQEAgLTE0MzYsNiArMTUzOCwxNiBAQAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204MzUwX2RhaV9vcHMgPSB7CisJIC5od19wYXJhbXMJPSB3bTgzNTBfcGNtX2h3X3BhcmFtcywKKwkgLmRpZ2l0YWxfbXV0ZQk9IHdtODM1MF9tdXRlLAorCSAudHJpZ2dlcgk9IHdtODM1MF9wY21fdHJpZ2dlciwKKwkgLnNldF9mbXQJPSB3bTgzNTBfc2V0X2RhaV9mbXQsCisJIC5zZXRfc3lzY2xrCT0gd204MzUwX3NldF9kYWlfc3lzY2xrLAorCSAuc2V0X3BsbAk9IHdtODM1MF9zZXRfZmxsLAorCSAuc2V0X2Nsa2Rpdgk9IHdtODM1MF9zZXRfY2xrZGl2LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODM1MF9kYWkgPSB7CiAJLm5hbWUgPSAiV004MzUwIiwKIAkucGxheWJhY2sgPSB7CkBAIC0xNDUyLDE1ICsxNTY0LDcgQEAKIAkJIC5yYXRlcyA9IFdNODM1MF9SQVRFUywKIAkJIC5mb3JtYXRzID0gV004MzUwX0ZPUk1BVFMsCiAJIH0sCi0JLm9wcyA9IHsKLQkJIC5od19wYXJhbXMgPSB3bTgzNTBfcGNtX2h3X3BhcmFtcywKLQkJIC5kaWdpdGFsX211dGUgPSB3bTgzNTBfbXV0ZSwKLQkJIC50cmlnZ2VyID0gd204MzUwX3BjbV90cmlnZ2VyLAotCQkgLnNldF9mbXQgPSB3bTgzNTBfc2V0X2RhaV9mbXQsCi0JCSAuc2V0X3N5c2NsayA9IHdtODM1MF9zZXRfZGFpX3N5c2NsaywKLQkJIC5zZXRfcGxsID0gd204MzUwX3NldF9mbGwsCi0JCSAuc2V0X2Nsa2RpdiA9IHdtODM1MF9zZXRfY2xrZGl2LAotCSB9LAorCS5vcHMgPSAmd204MzUwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2RhaSk7CiAKQEAgLTE0NzIsNyArMTU3Niw3IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTgzNTApOwogCi1zdGF0aWMgaW50IHdtODM1MF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204MzUwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODM1MF9kYXRhICpwcml2OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmgKaW5kZXggY2MyODg3YS4uZDExYmQ5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5oCkBAIC0xNyw0ICsxNywxMiBAQAogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTgzNTBfZGFpOwogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODM1MDsKIAorZW51bSB3bTgzNTBfamFjayB7CisJV004MzUwX0pETCA9IDEsCisJV004MzUwX0pEUiA9IDIsCit9OworCitpbnQgd204MzUwX2hwX2phY2tfZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgZW51bSB3bTgzNTBfamFjayB3aGljaCwKKwkJCSAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHJlcG9ydCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwZWZhNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKQEAgLTAsMCArMSwxNTgyIEBACisvKgorICogd204NDAwLmMgIC0tICBXTTg0MDAgQUxTQSBTb2MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1hdWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg0MDAtcHJpdmF0ZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ3bTg0MDAuaCIKKworLyogRmFrZSByZWdpc3RlciBmb3IgaW50ZXJuYWwgc3RhdGUgKi8KKyNkZWZpbmUgV004NDAwX0lOVERSSVZCSVRTICAgICAgKFdNODQwMF9SRUdJU1RFUl9DT1VOVCArIDEpCisjZGVmaW5lIFdNODQwMF9JTk1JWExfUFdSCQkJMAorI2RlZmluZSBXTTg0MDBfQUlOTE1VWF9QV1IJCQkxCisjZGVmaW5lIFdNODQwMF9JTk1JWFJfUFdSCQkJMgorI2RlZmluZSBXTTg0MDBfQUlOUk1VWF9QV1IJCQkzCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBwb3dlcltdID0geworCXsKKwkJLnN1cHBseSA9ICJJMlMxVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJJMlMyVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJEQ1ZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiQVZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiRkxMVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJIUFZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiU1BLVkREIiwKKwl9LAorfTsKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204NDAwX3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXN0cnVjdCB3bTg0MDAgKndtODQwMDsKKwl1MTYgZmFrZV9yZWdpc3RlcjsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOworCXVuc2lnbmVkIGludCBwY21jbGs7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJaW50IGZsbF9pbiwgZmxsX291dDsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODQwMF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlpZiAocmVnID09IFdNODQwMF9JTlREUklWQklUUykKKwkJcmV0dXJuIHdtODQwMC0+ZmFrZV9yZWdpc3RlcjsKKwllbHNlCisJCXJldHVybiB3bTg0MDBfcmVnX3JlYWQod204NDAwLT53bTg0MDAsIHJlZyk7Cit9CisKKy8qCisgKiB3cml0ZSB0byB0aGUgd204NDAwIHJlZ2lzdGVyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHJlZyA9PSBXTTg0MDBfSU5URFJJVkJJVFMpIHsKKwkJd204NDAwLT5mYWtlX3JlZ2lzdGVyID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMC0+d204NDAwLCByZWcsIDB4ZmZmZiwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3bTg0MDBfY29kZWNfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUod204NDAwLT53bTg0MDApOworfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKHJlY19taXhfdGx2LCAtMTUwMCwgNjAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihpbl9wZ2FfdGx2LCAtMTY1MCwgMzAwMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIob3V0X21peF90bHYsIC0yMTAwLCAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfcGdhX3RsdiwgLTczMDAsIDYwMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIob3V0X29taXhfdGx2LCAtNjAwLCAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfZGFjX3RsdiwgLTcxNjMsIDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKGluX2FkY190bHYsIC03MTYzLCAxNzYzKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfc2lkZXRvbmVfdGx2LCAtMzYwMCwgMCk7CisKK3N0YXRpYyBpbnQgd204NDAwX291dHBnYV9wdXRfdm9sc3dfdnUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworICAgICAgICBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgcmVnID0gbWMtPnJlZzsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgdTE2IHZhbDsKKworICAgICAgICByZXQgPSBzbmRfc29jX3B1dF92b2xzdyhrY29udHJvbCwgdWNvbnRyb2wpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIC8qIG5vdyBoaXQgdGhlIHZvbHVtZSB1cGRhdGUgYml0cyAoYWx3YXlzIGJpdCA4KSAqLworICAgICAgICB2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgcmVnKTsKKyAgICAgICAgcmV0dXJuIHdtODQwMF93cml0ZShjb2RlYywgcmVnLCB2YWwgfCAweDAxMDApOworfQorCisjZGVmaW5lIFdNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXgsIGludmVydCwgdGx2X2FycmF5KSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHxcCisJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsXAorCS50bHYucCA9ICh0bHZfYXJyYXkpLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIFwKKwkuZ2V0ID0gc25kX3NvY19nZXRfdm9sc3csIC5wdXQgPSB3bTg0MDBfb3V0cGdhX3B1dF92b2xzd192dSwgXAorCS5wcml2YXRlX3ZhbHVlID0gU09DX1NJTkdMRV9WQUxVRShyZWcsIHNoaWZ0LCBtYXgsIGludmVydCkgfQorCisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg0MDBfZGlnaXRhbF9zaWRldG9uZVtdID0KKwl7Ik5vbmUiLCAiTGVmdCBBREMiLCAiUmlnaHQgQURDIiwgIlJlc2VydmVkIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX2xlZnRfZGlnaXRhbF9zaWRldG9uZV9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUsCisJCVdNODQwMF9BRENfVE9fREFDTF9TSElGVCwgMiwgd204NDAwX2RpZ2l0YWxfc2lkZXRvbmUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9yaWdodF9kaWdpdGFsX3NpZGV0b25lX2VudW0gPQorU09DX0VOVU1fU0lOR0xFKFdNODQwMF9ESUdJVEFMX1NJREVfVE9ORSwKKwkJV004NDAwX0FEQ19UT19EQUNSX1NISUZULCAyLCB3bTg0MDBfZGlnaXRhbF9zaWRldG9uZSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg0MDBfYWRjbW9kZVtdID0KKwl7IkhpLWZpIG1vZGUiLCAiVm9pY2UgbW9kZSAxIiwgIlZvaWNlIG1vZGUgMiIsICJWb2ljZSBtb2RlIDMifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfcmlnaHRfYWRjbW9kZV9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShXTTg0MDBfQURDX0NUUkwsIFdNODQwMF9BRENfSFBGX0NVVF9TSElGVCwgMywgd204NDAwX2FkY21vZGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX3NuZF9jb250cm9sc1tdID0geworLyogSU5NSVhMICovCitTT0NfU0lOR0xFKCJMSU4xMiBQR0EgQm9vc3QiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDEyTU5CU1RfU0hJRlQsCisJICAgMSwgMCksCitTT0NfU0lOR0xFKCJMSU4zNCBQR0EgQm9vc3QiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDM0TU5CU1RfU0hJRlQsCisJICAgMSwgMCksCisvKiBJTk1JWFIgKi8KK1NPQ19TSU5HTEUoIlJJTjEyIFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9SMTJNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKK1NPQ19TSU5HTEUoIlJJTjM0IFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9SMzRNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKKworLyogTE9NSVggKi8KK1NPQ19TSU5HTEVfVExWKCJMT01JWCBMSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSMywKKwlXTTg0MDBfTExJM0xPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggUklOMTIgUEdBIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSMywKKwlXTTg0MDBfTFIxMkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggTElOMTIgUEdBIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSMywKKwlXTTg0MDBfTEwxMkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggUklOMyBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjUsCisJV004NDAwX0xSSTNMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxPTUlYIEFJTlJNVVggQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI1LAorCVdNODQwMF9MUkJMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxPTUlYIEFJTkxNVVggQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI1LAorCVdNODQwMF9MUkJMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorCisvKiBST01JWCAqLworU09DX1NJTkdMRV9UTFYoIlJPTUlYIFJJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI0LAorCVdNODQwMF9SUkkzUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBMSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI0LAorCVdNODQwMF9STDEyUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBSSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI0LAorCVdNODQwMF9SUjEyUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBMSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNiwKKwlXTTg0MDBfUkxJM1JPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUk9NSVggQUlOTE1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjYsCisJV004NDAwX1JMQlJPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUk9NSVggQUlOUk1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjYsCisJV004NDAwX1JSQlJPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCisKKy8qIExPVVQgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMT1VUIFZvbHVtZSIsIFdNODQwMF9MRUZUX09VVFBVVF9WT0xVTUUsCisJV004NDAwX0xPVVRWT0xfU0hJRlQsIFdNODQwMF9MT1VUVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIkxPVVQgWkMiLCBXTTg0MDBfTEVGVF9PVVRQVVRfVk9MVU1FLCBXTTg0MDBfTE9aQ19TSElGVCwgMSwgMCksCisKKy8qIFJPVVQgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJST1VUIFZvbHVtZSIsIFdNODQwMF9SSUdIVF9PVVRQVVRfVk9MVU1FLAorCVdNODQwMF9ST1VUVk9MX1NISUZULCBXTTg0MDBfUk9VVFZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCitTT0NfU0lOR0xFKCJST1VUIFpDIiwgV004NDAwX1JJR0hUX09VVFBVVF9WT0xVTUUsIFdNODQwMF9ST1pDX1NISUZULCAxLCAwKSwKKworLyogTE9QR0EgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMT1BHQSBWb2x1bWUiLCBXTTg0MDBfTEVGVF9PUEdBX1ZPTFVNRSwKKwlXTTg0MDBfTE9QR0FWT0xfU0hJRlQsIFdNODQwMF9MT1BHQVZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCitTT0NfU0lOR0xFKCJMT1BHQSBaQyBTd2l0Y2giLCBXTTg0MDBfTEVGVF9PUEdBX1ZPTFVNRSwKKwlXTTg0MDBfTE9QR0FaQ19TSElGVCwgMSwgMCksCisKKy8qIFJPUEdBICovCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUk9QR0EgVm9sdW1lIiwgV004NDAwX1JJR0hUX09QR0FfVk9MVU1FLAorCVdNODQwMF9ST1BHQVZPTF9TSElGVCwgV004NDAwX1JPUEdBVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIlJPUEdBIFpDIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9PUEdBX1ZPTFVNRSwKKwlXTTg0MDBfUk9QR0FaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkxPTiBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9MT05NVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIkxPUCBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9MT1BNVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIkxPUCBBdHRlbnVhdGlvbiBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfTE9BVFROX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIlJPTiBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9ST05NVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIlJPUCBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9ST1BNVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIlJPUCBBdHRlbnVhdGlvbiBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfUk9BVFROX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiT1VUMyBNdXRlIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQzTVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJPVVQzIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQzQVRUTl9TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIk9VVDQgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfT1VUM180X1ZPTFVNRSwKKwlXTTg0MDBfT1VUNE1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiT1VUNCBBdHRlbnVhdGlvbiBTd2l0Y2giLCBXTTg0MDBfT1VUM180X1ZPTFVNRSwKKwlXTTg0MDBfT1VUNEFUVE5fU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJTcGVha2VyIE1vZGUgU3dpdGNoIiwgV004NDAwX0NMQVNTRDEsCisJV004NDAwX0NETU9ERV9TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIlNwZWFrZXIgT3V0cHV0IEF0dGVudWF0aW9uIFZvbHVtZSIsIFdNODQwMF9TUEVBS0VSX1ZPTFVNRSwKKwlXTTg0MDBfU1BLQVRUTl9TSElGVCwgV004NDAwX1NQS0FUVE5fTUFTSywgMCksCitTT0NfU0lOR0xFKCJTcGVha2VyIERDIEJvb3N0IFZvbHVtZSIsIFdNODQwMF9DTEFTU0QzLAorCVdNODQwMF9EQ0dBSU5fU0hJRlQsIDYsIDApLAorU09DX1NJTkdMRSgiU3BlYWtlciBBQyBCb29zdCBWb2x1bWUiLCBXTTg0MDBfQ0xBU1NEMywKKwlXTTg0MDBfQUNHQUlOX1NISUZULCA2LCAwKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxlZnQgREFDIERpZ2l0YWwgVm9sdW1lIiwKKwlXTTg0MDBfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUsIFdNODQwMF9EQUNMX1ZPTF9TSElGVCwKKwkxMjcsIDAsIG91dF9kYWNfdGx2KSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJpZ2h0IERBQyBEaWdpdGFsIFZvbHVtZSIsCisJV004NDAwX1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSwgV004NDAwX0RBQ1JfVk9MX1NISUZULAorCTEyNywgMCwgb3V0X2RhY190bHYpLAorCitTT0NfRU5VTSgiTGVmdCBEaWdpdGFsIFNpZGV0b25lIiwgd204NDAwX2xlZnRfZGlnaXRhbF9zaWRldG9uZV9lbnVtKSwKK1NPQ19FTlVNKCJSaWdodCBEaWdpdGFsIFNpZGV0b25lIiwgd204NDAwX3JpZ2h0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSksCisKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IERpZ2l0YWwgU2lkZXRvbmUgVm9sdW1lIiwgV004NDAwX0RJR0lUQUxfU0lERV9UT05FLAorCVdNODQwMF9BRENMX0RBQ19TVk9MX1NISUZULCAxNSwgMCwgb3V0X3NpZGV0b25lX3RsdiksCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgRGlnaXRhbCBTaWRldG9uZSBWb2x1bWUiLCBXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUsCisJV004NDAwX0FEQ1JfREFDX1NWT0xfU0hJRlQsIDE1LCAwLCBvdXRfc2lkZXRvbmVfdGx2KSwKKworU09DX1NJTkdMRSgiQURDIERpZ2l0YWwgSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg0MDBfQURDX0NUUkwsCisJV004NDAwX0FEQ19IUEZfRU5BX1NISUZULCAxLCAwKSwKKworU09DX0VOVU0oIkFEQyBIUEYgTW9kZSIsIHdtODQwMF9yaWdodF9hZGNtb2RlX2VudW0pLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTGVmdCBBREMgRGlnaXRhbCBWb2x1bWUiLAorCVdNODQwMF9MRUZUX0FEQ19ESUdJVEFMX1ZPTFVNRSwKKwlXTTg0MDBfQURDTF9WT0xfU0hJRlQsCisJV004NDAwX0FEQ0xfVk9MX01BU0ssCisJMCwKKwlpbl9hZGNfdGx2KSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJpZ2h0IEFEQyBEaWdpdGFsIFZvbHVtZSIsCisJV004NDAwX1JJR0hUX0FEQ19ESUdJVEFMX1ZPTFVNRSwKKwlXTTg0MDBfQURDUl9WT0xfU0hJRlQsCisJV004NDAwX0FEQ1JfVk9MX01BU0ssCisJMCwKKwlpbl9hZGNfdGx2KSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxJTjEyIFZvbHVtZSIsCisJV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9MSU4xMlZPTF9TSElGVCwKKwlXTTg0MDBfTElOMTJWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJMSU4xMiBaQyBTd2l0Y2giLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX0xJMTJaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkxJTjEyIE11dGUgU3dpdGNoIiwgV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9MSTEyTVVURV9TSElGVCwgMSwgMCksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMSU4zNCBWb2x1bWUiLAorCVdNODQwMF9MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfTElOMzRWT0xfU0hJRlQsCisJV004NDAwX0xJTjM0Vk9MX01BU0ssCisJMCwKKwlpbl9wZ2FfdGx2KSwKKworU09DX1NJTkdMRSgiTElOMzQgWkMgU3dpdGNoIiwgV004NDAwX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9MSTM0WkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJMSU4zNCBNdXRlIFN3aXRjaCIsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfTEkzNE1VVEVfU0hJRlQsIDEsIDApLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUklOMTIgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9SSU4xMlZPTF9TSElGVCwKKwlXTTg0MDBfUklOMTJWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJSSU4xMiBaQyBTd2l0Y2giLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9SSTEyWkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJSSU4xMiBNdXRlIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX1JJMTJNVVRFX1NISUZULCAxLCAwKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJJTjM0IFZvbHVtZSIsCisJV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfUklOMzRWT0xfU0hJRlQsCisJV004NDAwX1JJTjM0Vk9MX01BU0ssCisJMCwKKwlpbl9wZ2FfdGx2KSwKKworU09DX1NJTkdMRSgiUklOMzQgWkMgU3dpdGNoIiwgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfUkkzNFpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiUklOMzQgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9SSTM0TVVURV9TSElGVCwgMSwgMCksCisKK307CisKKy8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLworc3RhdGljIGludCB3bTg0MDBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODQwMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg0MDBfc25kX2NvbnRyb2xzKSk7Cit9CisKKy8qCisgKiBfREFQTV8gQ29udHJvbHMKKyAqLworCitzdGF0aWMgaW50IGlubWl4ZXJfZXZlbnQgKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJdTE2IHJlZywgZmFrZXBvd2VyOworCisJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIpOworCWZha2Vwb3dlciA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfSU5URFJJVkJJVFMpOworCisJaWYgKGZha2Vwb3dlciAmICgoMSA8PCBXTTg0MDBfSU5NSVhMX1BXUikgfAorCQkoMSA8PCBXTTg0MDBfQUlOTE1VWF9QV1IpKSkgeworCQlyZWcgfD0gV004NDAwX0FJTkxfRU5BOworCX0gZWxzZSB7CisJCXJlZyAmPSB+V004NDAwX0FJTkxfRU5BOworCX0KKworCWlmIChmYWtlcG93ZXIgJiAoKDEgPDwgV004NDAwX0lOTUlYUl9QV1IpIHwKKwkJKDEgPDwgV004NDAwX0FJTlJNVVhfUFdSKSkpIHsKKwkJcmVnIHw9IFdNODQwMF9BSU5SX0VOQTsKKwl9IGVsc2UgeworCQlyZWcgJj0gfldNODQwMF9BSU5MX0VOQTsKKwl9CisJd204NDAwX3dyaXRlKHctPmNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3V0bWl4ZXJfZXZlbnQgKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKiBrY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdTMyIHJlZ19zaGlmdCA9IG1jLT5zaGlmdDsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgcmVnOworCisJc3dpdGNoIChyZWdfc2hpZnQpIHsKKwljYXNlIFdNODQwMF9TUEVBS0VSX01JWEVSIHwgKFdNODQwMF9MRFNQSyA8PCA4KSA6CisJCXJlZyA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfT1VUUFVUX01JWEVSMSk7CisJCWlmIChyZWcgJiBXTTg0MDBfTERMTykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgT3V0cHV0IE1peGVyIDEgTERMTyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfU1BFQUtFUl9NSVhFUiB8IChXTTg0MDBfUkRTUEsgPDwgOCk6CisJCXJlZyA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfT1VUUFVUX01JWEVSMik7CisJCWlmIChyZWcgJiBXTTg0MDBfUkRSTykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgT3V0cHV0IE1peGVyIDIgUkRSTyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfT1VUUFVUX01JWEVSMSB8IChXTTg0MDBfTERMTyA8PCA4KToKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9TUEVBS0VSX01JWEVSKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9MRFNQSykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBMRFNQSyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfT1VUUFVUX01JWEVSMiB8IChXTTg0MDBfUkRSTyA8PCA4KToKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9TUEVBS0VSX01JWEVSKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9SRFNQSykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBSRFNQSyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogSU5NSVggZEIgdmFsdWVzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGluX21peF90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLDcsIFRMVl9EQl9MSU5FQVJfSVRFTSgtMTIwMCwgNjAwKSwKK307CisKKy8qIExlZnQgSW4gUEdBIENvbm5lY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbGluMTJfcGdhX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxJTjEgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX0xNTjFfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMSU4yIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9MTVAyX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9saW4zNF9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTElOMyBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfTE1OM19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxJTjQgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX0xNUDRfU0hJRlQsIDEsIDApLAorfTsKKworLyogUmlnaHQgSW4gUEdBIENvbm5lY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcmluMTJfcGdhX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJJTjEgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX1JNTjFfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSSU4yIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9STVAyX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yaW4zNF9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUklOMyBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfUk1OM19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJJTjQgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX1JNUDRfU0hJRlQsIDEsIDApLAorfTsKKworLyogSU5NSVhMICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1faW5taXhsX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEVfVExWKCJSZWNvcmQgTGVmdCBWb2x1bWUiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLAorCVdNODQwMF9MREJWT0xfU0hJRlQsIFdNODQwMF9MREJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEVfVExWKCJMSU4yIFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjUsIFdNODQwMF9MSTJCVk9MX1NISUZULAorCTcsIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFKCJMSU5QR0ExMiBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDEyTU5CX1NISUZULAorCQkxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTElOUEdBMzQgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX0wzNE1OQl9TSElGVCwKKwkJMSwgMCksCit9OworCisvKiBJTk1JWFIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9pbm1peHJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIlJlY29yZCBSaWdodCBWb2x1bWUiLCBXTTg0MDBfSU5QVVRfTUlYRVI0LAorCVdNODQwMF9SREJWT0xfU0hJRlQsIFdNODQwMF9SREJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEVfVExWKCJSSU4yIFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjYsIFdNODQwMF9SSTJCVk9MX1NISUZULAorCTcsIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFKCJSSU5QR0ExMiBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDEyTU5CX1NISUZULAorCTEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSSU5QR0EzNCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDM0TU5CX1NISUZULAorCTEsIDApLAorfTsKKworLyogQUlOTE1VWCAqLworc3RhdGljIGNvbnN0IGNoYXIgKndtODQwMF9haW5sbXV4W10gPQorCXsiSU5NSVhMIE1peCIsICJSWFZPSUNFIE1peCIsICJESUZGSU5MIE1peCJ9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9haW5sbXV4X2VudW0gPQorU09DX0VOVU1fU0lOR0xFKCBXTTg0MDBfSU5QVVRfTUlYRVIxLCBXTTg0MDBfQUlOTE1PREVfU0hJRlQsCisJQVJSQVlfU0laRSh3bTg0MDBfYWlubG11eCksIHdtODQwMF9haW5sbXV4KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2FpbmxtdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg0MDBfYWlubG11eF9lbnVtKTsKKworLyogRElGRklOTCAqLworCisvKiBBSU5STVVYICovCitzdGF0aWMgY29uc3QgY2hhciAqd204NDAwX2FpbnJtdXhbXSA9CisJeyJJTk1JWFIgTWl4IiwgIlJYVk9JQ0UgTWl4IiwgIkRJRkZJTlIgTWl4In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX2FpbnJtdXhfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoIFdNODQwMF9JTlBVVF9NSVhFUjEsIFdNODQwMF9BSU5STU9ERV9TSElGVCwKKwlBUlJBWV9TSVpFKHdtODQwMF9haW5ybXV4KSwgd204NDAwX2FpbnJtdXgpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fYWlucm11eF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODQwMF9haW5ybXV4X2VudW0pOworCisvKiBSWFZPSUNFICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcnh2b2ljZV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFX1RMVigiTElONC9SWE4iLCBXTTg0MDBfSU5QVVRfTUlYRVI1LCBXTTg0MDBfTFI0QlZPTF9TSElGVCwKKwkJCVdNODQwMF9MUjRCVk9MX01BU0ssIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFX1RMVigiUklONC9SWFAiLCBXTTg0MDBfSU5QVVRfTUlYRVI2LCBXTTg0MDBfUkw0QlZPTF9TSElGVCwKKwkJCVdNODQwMF9STDRCVk9MX01BU0ssIDAsIGluX21peF90bHYpLAorfTsKKworLyogTE9NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9sb21peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMT01JWCBSaWdodCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MUkJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIExlZnQgQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTExCTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBSSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTFJJM0xPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xMSTNMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xSMTJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xMMTJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIExlZnQgREFDIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MRExPX1NISUZULCAxLCAwKSwKK307CisKKy8qIFJPTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcm9taXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9STEJST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JSQlJPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JMSTNST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9SUkkzUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBMSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9STDEyUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBSSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9SUjEyUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBSaWdodCBEQUMgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JEUk9fU0hJRlQsIDEsIDApLAorfTsKKworLyogTE9OTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbG9ubWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xMT1BHQUxPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTk1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MUk9QR0FMT05fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT05NSVggSW52ZXJ0ZWQgTE9QIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTE9QTE9OX1NISUZULCAxLCAwKSwKK307CisKKy8qIExPUE1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xvcG1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMT1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xSMTJMT1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT1BNSVggTGVmdCBNaWMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTEwxMkxPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xMT1BHQUxPUF9TSElGVCwgMSwgMCksCit9OworCisvKiBST05NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yb25taXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JST1BHQVJPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JMT1BHQVJPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTk1JWCBJbnZlcnRlZCBST1AgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9ST1BST05fU0hJRlQsIDEsIDApLAorfTsKKworLyogUk9QTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcm9wbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9STDEyUk9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9QTUlYIFJpZ2h0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9SUjEyUk9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9QTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JST1BHQVJPUF9TSElGVCwgMSwgMCksCit9OworCisvKiBPVVQzTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fb3V0M21peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJPVVQzTUlYIExJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUM180X01JWEVSLAorCVdNODQwMF9MSTRPM19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk9VVDNNSVggTGVmdCBPdXQgUEdBIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfTUlYRVIsCisJV004NDAwX0xQR0FPM19TSElGVCwgMSwgMCksCit9OworCisvKiBPVVQ0TUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fb3V0NG1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJPVVQ0TUlYIFJpZ2h0IE91dCBQR0EgU3dpdGNoIiwgV004NDAwX09VVDNfNF9NSVhFUiwKKwlXTTg0MDBfUlBHQU80X1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT1VUNE1JWCBSSU40L1JYUCBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVDNfNF9NSVhFUiwKKwlXTTg0MDBfUkk0TzRfU0hJRlQsIDEsIDApLAorfTsKKworLyogU1BLTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fc3BrbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBMSU4yIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfTEkyU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9MQjJTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX0xPUEdBU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExlZnQgREFDIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9MRFNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSaWdodCBEQUMgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX1JEU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUk9QR0FTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUkFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX1JMMTJST1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUklOMiBCeXBhc3MgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX1JJMlNQS19TSElGVCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NDAwX2RhcG1fd2lkZ2V0c1tdID0geworLyogSW5wdXQgU2lkZSAqLworLyogSW5wdXQgTGluZXMgKi8KK1NORF9TT0NfREFQTV9JTlBVVCgiTElOMSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4yIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTjMiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElONC9SWE4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUklOMyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU40L1JYUCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4xIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTjIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSW50ZXJuYWwgQURDIFNvdXJjZSIpLAorCisvKiBEQUNzICovCitTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IENhcHR1cmUiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCVdNODQwMF9BRENMX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiUmlnaHQgQ2FwdHVyZSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJV004NDAwX0FEQ1JfRU5BX1NISUZULCAwKSwKKworLyogSW5wdXQgUEdBcyAqLworU05EX1NPQ19EQVBNX01JWEVSKCJMSU4xMiBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfTElOMTJfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbGluMTJfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xpbjEyX3BnYV9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJMSU4zNCBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfTElOMzRfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbGluMzRfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xpbjM0X3BnYV9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJSSU4xMiBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfUklOMTJfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fcmluMTJfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3JpbjEyX3BnYV9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJSSU4zNCBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfUklOMzRfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fcmluMzRfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3JpbjM0X3BnYV9jb250cm9scykpLAorCisvKiBJTk1JWEwgKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJJTk1JWEwiLCBXTTg0MDBfSU5URFJJVkJJVFMsIFdNODQwMF9JTk1JWExfUFdSLCAwLAorCSZ3bTg0MDBfZGFwbV9pbm1peGxfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9pbm1peGxfY29udHJvbHMpLAorCWlubWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKy8qIEFJTkxNVVggKi8KK1NORF9TT0NfREFQTV9NVVhfRSgiQUlMTk1VWCIsIFdNODQwMF9JTlREUklWQklUUywgV004NDAwX0FJTkxNVVhfUFdSLCAwLAorCSZ3bTg0MDBfZGFwbV9haW5sbXV4X2NvbnRyb2xzLCBpbm1peGVyX2V2ZW50LAorCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKy8qIElOTUlYUiAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIklOTUlYUiIsIFdNODQwMF9JTlREUklWQklUUywgV004NDAwX0lOTUlYUl9QV1IsIDAsCisJJndtODQwMF9kYXBtX2lubWl4cl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2lubWl4cl9jb250cm9scyksCisJaW5taXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogQUlOUk1VWCAqLworU05EX1NPQ19EQVBNX01VWF9FKCJBSVJOTVVYIiwgV004NDAwX0lOVERSSVZCSVRTLCBXTTg0MDBfQUlOUk1VWF9QV1IsIDAsCisJJndtODQwMF9kYXBtX2FpbnJtdXhfY29udHJvbHMsIGlubWl4ZXJfZXZlbnQsCisJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogT3V0cHV0IFNpZGUgKi8KKy8qIERBQ3MgKi8KK1NORF9TT0NfREFQTV9EQUMoIkxlZnQgREFDIiwgIkxlZnQgUGxheWJhY2siLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLAorCVdNODQwMF9EQUNMX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fREFDKCJSaWdodCBEQUMiLCAiUmlnaHQgUGxheWJhY2siLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLAorCVdNODQwMF9EQUNSX0VOQV9TSElGVCwgMCksCisKKy8qIExPTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiTE9NSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLAorCQkgICAgIFdNODQwMF9MT01JWF9FTkFfU0hJRlQsCisJCSAgICAgMCwgJndtODQwMF9kYXBtX2xvbWl4X2NvbnRyb2xzWzBdLAorCQkgICAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbG9taXhfY29udHJvbHMpLAorCQkgICAgIG91dG1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1JFRyksCisKKy8qIExPTk1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJMT05NSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfTE9OX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX2xvbm1peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9sb25taXhfY29udHJvbHMpKSwKKworLyogTE9QTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxPUE1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9MT1BfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbG9wbWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xvcG1peF9jb250cm9scykpLAorCisvKiBPVVQzTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDNNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfT1VUM19FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9vdXQzbWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX291dDNtaXhfY29udHJvbHMpKSwKKworLyogU1BLTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiU1BLTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX1NQS19FTkFfU0hJRlQsCisJCSAgICAgMCwgJndtODQwMF9kYXBtX3Nwa21peF9jb250cm9sc1swXSwKKwkJICAgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3Nwa21peF9jb250cm9scyksIG91dG1peGVyX2V2ZW50LAorCQkgICAgIFNORF9TT0NfREFQTV9QUkVfUkVHKSwKKworLyogT1VUNE1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJPVVQ0TUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX09VVDRfRU5BX1NISUZULAorCTAsICZ3bTg0MDBfZGFwbV9vdXQ0bWl4X2NvbnRyb2xzWzBdLAorCUFSUkFZX1NJWkUod204NDAwX2RhcG1fb3V0NG1peF9jb250cm9scykpLAorCisvKiBST1BNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiUk9QTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX1JPUF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9yb3BtaXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcm9wbWl4X2NvbnRyb2xzKSksCisKKy8qIFJPTk1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJST05NSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfUk9OX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX3Jvbm1peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yb25taXhfY29udHJvbHMpKSwKKworLyogUk9NSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJST01JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCSAgICAgV004NDAwX1JPTUlYX0VOQV9TSElGVCwKKwkJICAgICAwLCAmd204NDAwX2RhcG1fcm9taXhfY29udHJvbHNbMF0sCisJCSAgICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yb21peF9jb250cm9scyksCisJCSAgICAgb3V0bWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUkVHKSwKKworLyogTE9VVCBQR0EgKi8KK1NORF9TT0NfREFQTV9QR0EoIkxPVVQgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX0xPVVRfRU5BX1NISUZULAorCQkgMCwgTlVMTCwgMCksCisKKy8qIFJPVVQgUEdBICovCitTTkRfU09DX0RBUE1fUEdBKCJST1VUIFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIFdNODQwMF9ST1VUX0VOQV9TSElGVCwKKwkJIDAsIE5VTEwsIDApLAorCisvKiBMT1BHQSAqLworU05EX1NPQ19EQVBNX1BHQSgiTE9QR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfTE9QR0FfRU5BX1NISUZULCAwLAorCU5VTEwsIDApLAorCisvKiBST1BHQSAqLworU05EX1NPQ19EQVBNX1BHQSgiUk9QR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfUk9QR0FfRU5BX1NISUZULCAwLAorCU5VTEwsIDApLAorCisvKiBNSUNCSUFTICovCitTTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQklBUyIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJV004NDAwX01JQzFCSUFTX0VOQV9TSElGVCwgMCksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPTiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTE9QIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQzIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtOIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtQIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQ0IiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST1AiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPTiIpLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJJbnRlcm5hbCBEQUMgU2luayIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogTWFrZSBEQUNzIHR1cm4gb24gd2hlbiBwbGF5aW5nIGV2ZW4gaWYgbm90IG1peGVkIGludG8gYW55IG91dHB1dHMgKi8KKwl7IkludGVybmFsIERBQyBTaW5rIiwgTlVMTCwgIkxlZnQgREFDIn0sCisJeyJJbnRlcm5hbCBEQUMgU2luayIsIE5VTEwsICJSaWdodCBEQUMifSwKKworCS8qIE1ha2UgQURDcyB0dXJuIG9uIHdoZW4gcmVjb3JkaW5nCisJICogZXZlbiBpZiBub3QgbWl4ZWQgZnJvbSBhbnkgaW5wdXRzICovCisJeyJMZWZ0IEFEQyIsIE5VTEwsICJJbnRlcm5hbCBBREMgU291cmNlIn0sCisJeyJSaWdodCBBREMiLCBOVUxMLCAiSW50ZXJuYWwgQURDIFNvdXJjZSJ9LAorCisJLyogSW5wdXQgU2lkZSAqLworCS8qIExJTjEyIFBHQSAqLworCXsiTElOMTIgUEdBIiwgIkxJTjEgU3dpdGNoIiwgIkxJTjEifSwKKwl7IkxJTjEyIFBHQSIsICJMSU4yIFN3aXRjaCIsICJMSU4yIn0sCisJLyogTElOMzQgUEdBICovCisJeyJMSU4zNCBQR0EiLCAiTElOMyBTd2l0Y2giLCAiTElOMyJ9LAorCXsiTElOMzQgUEdBIiwgIkxJTjQgU3dpdGNoIiwgIkxJTjQvUlhOIn0sCisJLyogSU5NSVhMICovCisJeyJJTk1JWEwiLCAiUmVjb3JkIExlZnQgVm9sdW1lIiwgIkxPTUlYIn0sCisJeyJJTk1JWEwiLCAiTElOMiBWb2x1bWUiLCAiTElOMiJ9LAorCXsiSU5NSVhMIiwgIkxJTlBHQTEyIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IklOTUlYTCIsICJMSU5QR0EzNCBTd2l0Y2giLCAiTElOMzQgUEdBIn0sCisJLyogQUlMTk1VWCAqLworCXsiQUlMTk1VWCIsICJJTk1JWEwgTWl4IiwgIklOTUlYTCJ9LAorCXsiQUlMTk1VWCIsICJESUZGSU5MIE1peCIsICJMSU4xMiBQR0EifSwKKwl7IkFJTE5NVVgiLCAiRElGRklOTCBNaXgiLCAiTElOMzQgUEdBIn0sCisJeyJBSUxOTVVYIiwgIlJYVk9JQ0UgTWl4IiwgIkxJTjQvUlhOIn0sCisJeyJBSUxOTVVYIiwgIlJYVk9JQ0UgTWl4IiwgIlJJTjQvUlhQIn0sCisJLyogQURDICovCisJeyJMZWZ0IEFEQyIsIE5VTEwsICJBSUxOTVVYIn0sCisKKwkvKiBSSU4xMiBQR0EgKi8KKwl7IlJJTjEyIFBHQSIsICJSSU4xIFN3aXRjaCIsICJSSU4xIn0sCisJeyJSSU4xMiBQR0EiLCAiUklOMiBTd2l0Y2giLCAiUklOMiJ9LAorCS8qIFJJTjM0IFBHQSAqLworCXsiUklOMzQgUEdBIiwgIlJJTjMgU3dpdGNoIiwgIlJJTjMifSwKKwl7IlJJTjM0IFBHQSIsICJSSU40IFN3aXRjaCIsICJSSU40L1JYUCJ9LAorCS8qIElOTUlYTCAqLworCXsiSU5NSVhSIiwgIlJlY29yZCBSaWdodCBWb2x1bWUiLCAiUk9NSVgifSwKKwl7IklOTUlYUiIsICJSSU4yIFZvbHVtZSIsICJSSU4yIn0sCisJeyJJTk1JWFIiLCAiUklOUEdBMTIgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiSU5NSVhSIiwgIlJJTlBHQTM0IFN3aXRjaCIsICJSSU4zNCBQR0EifSwKKwkvKiBBSVJOTVVYICovCisJeyJBSVJOTVVYIiwgIklOTUlYUiBNaXgiLCAiSU5NSVhSIn0sCisJeyJBSVJOTVVYIiwgIkRJRkZJTlIgTWl4IiwgIlJJTjEyIFBHQSJ9LAorCXsiQUlSTk1VWCIsICJESUZGSU5SIE1peCIsICJSSU4zNCBQR0EifSwKKwl7IkFJUk5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiTElONC9SWE4ifSwKKwl7IkFJUk5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiUklONC9SWFAifSwKKwkvKiBBREMgKi8KKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJBSVJOTVVYIn0sCisKKwkvKiBMT01JWCAqLworCXsiTE9NSVgiLCAiTE9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgIlJJTjMifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExJTjMgQnlwYXNzIFN3aXRjaCIsICJMSU4zIn0sCisJeyJMT01JWCIsICJMT01JWCBMSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IkxPTUlYIiwgIkxPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiTE9NSVgiLCAiTE9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlSTk1VWCJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSUxOTVVYIn0sCisJeyJMT01JWCIsICJMT01JWCBMZWZ0IERBQyBTd2l0Y2giLCAiTGVmdCBEQUMifSwKKworCS8qIFJPTUlYICovCisJeyJST01JWCIsICJST01JWCBSSU4zIEJ5cGFzcyBTd2l0Y2giLCAiUklOMyJ9LAorCXsiUk9NSVgiLCAiUk9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgIkxJTjMifSwKKwl7IlJPTUlYIiwgIlJPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiUk9NSVgiLCAiUk9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJST01JWCIsICJST01JWCBSaWdodCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSVJOTVVYIn0sCisJeyJST01JWCIsICJST01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJTE5NVVgifSwKKwl7IlJPTUlYIiwgIlJPTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisKKwkvKiBTUEtNSVggKi8KKwl7IlNQS01JWCIsICJTUEtNSVggTElOMiBCeXBhc3MgU3dpdGNoIiwgIkxJTjIifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUklOMiBCeXBhc3MgU3dpdGNoIiwgIlJJTjIifSwKKwl7IlNQS01JWCIsICJTUEtNSVggTEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJTE5NVVgifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUkFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJUk5NVVgifSwKKwl7IlNQS01JWCIsICJTUEtNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUmlnaHQgREFDIFN3aXRjaCIsICJSaWdodCBEQUMifSwKKwl7IlNQS01JWCIsICJTUEtNSVggTGVmdCBEQUMgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCisJLyogTE9OTUlYICovCisJeyJMT05NSVgiLCAiTE9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCXsiTE9OTUlYIiwgIkxPTk1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisJeyJMT05NSVgiLCAiTE9OTUlYIEludmVydGVkIExPUCBTd2l0Y2giLCAiTE9QTUlYIn0sCisKKwkvKiBMT1BNSVggKi8KKwl7IkxPUE1JWCIsICJMT1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJMT1BNSVgiLCAiTE9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJMT1BNSVgiLCAiTE9QTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCisJLyogT1VUM01JWCAqLworCXsiT1VUM01JWCIsICJPVVQzTUlYIExJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCAiTElONC9SWE4ifSwKKwl7Ik9VVDNNSVgiLCAiT1VUM01JWCBMZWZ0IE91dCBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisKKwkvKiBPVVQ0TUlYICovCisJeyJPVVQ0TUlYIiwgIk9VVDRNSVggUmlnaHQgT3V0IFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKwl7Ik9VVDRNSVgiLCAiT1VUNE1JWCBSSU40L1JYUCBCeXBhc3MgU3dpdGNoIiwgIlJJTjQvUlhQIn0sCisKKwkvKiBST05NSVggKi8KKwl7IlJPTk1JWCIsICJST05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiUk9OTUlYIiwgIlJPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKwl7IlJPTk1JWCIsICJST05NSVggSW52ZXJ0ZWQgUk9QIFN3aXRjaCIsICJST1BNSVgifSwKKworCS8qIFJPUE1JWCAqLworCXsiUk9QTUlYIiwgIlJPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiUk9QTUlYIiwgIlJPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IlJPUE1JWCIsICJST1BNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCisJLyogT3V0IE1peGVyIFBHQXMgKi8KKwl7IkxPUEdBIiwgTlVMTCwgIkxPTUlYIn0sCisJeyJST1BHQSIsIE5VTEwsICJST01JWCJ9LAorCisJeyJMT1VUIFBHQSIsIE5VTEwsICJMT01JWCJ9LAorCXsiUk9VVCBQR0EiLCBOVUxMLCAiUk9NSVgifSwKKworCS8qIE91dHB1dCBQaW5zICovCisJeyJMT04iLCBOVUxMLCAiTE9OTUlYIn0sCisJeyJMT1AiLCBOVUxMLCAiTE9QTUlYIn0sCisJeyJPVVQzIiwgTlVMTCwgIk9VVDNNSVgifSwKKwl7IkxPVVQiLCBOVUxMLCAiTE9VVCBQR0EifSwKKwl7IlNQS04iLCBOVUxMLCAiU1BLTUlYIn0sCisJeyJST1VUIiwgTlVMTCwgIlJPVVQgUEdBIn0sCisJeyJPVVQ0IiwgTlVMTCwgIk9VVDRNSVgifSwKKwl7IlJPUCIsIE5VTEwsICJST1BNSVgifSwKKwl7IlJPTiIsIE5VTEwsICJST05NSVgifSwKK307CisKK3N0YXRpYyBpbnQgd204NDAwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg0MDBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsb2NrIGFmdGVyIEZMTCBhbmQgZGl2aWRlcnMKKyAqLworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJd204NDAwLT5zeXNjbGsgPSBmcmVxOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZmxsX2ZhY3RvcnMgeworCXUxNiBuOworCXUxNiBrOworCXUxNiBvdXRkaXY7CisJdTE2IGZyYXRpbzsKKwl1MTYgZnJlcV9yZWY7Cit9OworCisjZGVmaW5lIEZJWEVEX0ZMTF9TSVpFICgoMSA8PCAxNikgKiAxMCkKKworc3RhdGljIGludCBmbGxfZmFjdG9ycyhzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCwgc3RydWN0IGZsbF9mYWN0b3JzICpmYWN0b3JzLAorCQkgICAgICAgdW5zaWduZWQgaW50IEZyZWYsIHVuc2lnbmVkIGludCBGb3V0KQoreworCXU2NCBLcGFydDsKKwl1bnNpZ25lZCBpbnQgSywgTm1vZCwgdGFyZ2V0OworCisJZmFjdG9ycy0+b3V0ZGl2ID0gMjsKKwl3aGlsZSAoRm91dCAqIGZhY3RvcnMtPm91dGRpdiA8ICA5MDAwMDAwMCB8fAorCSAgICAgICBGb3V0ICogZmFjdG9ycy0+b3V0ZGl2ID4gMTAwMDAwMDAwKSB7CisJCWZhY3RvcnMtPm91dGRpdiAqPSAyOworCQlpZiAoZmFjdG9ycy0+b3V0ZGl2ID4gMzIpIHsKKwkJCWRldl9lcnIod204NDAwLT53bTg0MDAtPmRldiwKKwkJCQkiVW5zdXBwb3J0ZWQgRkxMIG91dHB1dCBmcmVxdWVuY3kgJWRIelxuIiwKKwkJCQlGb3V0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXRhcmdldCA9IEZvdXQgKiBmYWN0b3JzLT5vdXRkaXY7CisJZmFjdG9ycy0+b3V0ZGl2ID0gZmFjdG9ycy0+b3V0ZGl2ID4+IDI7CisKKwlpZiAoRnJlZiA8IDQ4MDAwKQorCQlmYWN0b3JzLT5mcmVxX3JlZiA9IDE7CisJZWxzZQorCQlmYWN0b3JzLT5mcmVxX3JlZiA9IDA7CisKKwlpZiAoRnJlZiA8IDEwMDAwMDApCisJCWZhY3RvcnMtPmZyYXRpbyA9IDk7CisJZWxzZQorCQlmYWN0b3JzLT5mcmF0aW8gPSAwOworCisJLyogRW5zdXJlIHdlIGhhdmUgYSBmcmFjdGlvbmFsIHBhcnQgKi8KKwlkbyB7CisJCWlmIChGcmVmIDwgMTAwMDAwMCkKKwkJCWZhY3RvcnMtPmZyYXRpby0tOworCQllbHNlCisJCQlmYWN0b3JzLT5mcmF0aW8rKzsKKworCQlpZiAoZmFjdG9ycy0+ZnJhdGlvIDwgMSB8fCBmYWN0b3JzLT5mcmF0aW8gPiA4KSB7CisJCQlkZXZfZXJyKHdtODQwMC0+d204NDAwLT5kZXYsCisJCQkJIlVuYWJsZSB0byBjYWxjdWxhdGUgRlJBVElPXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZmFjdG9ycy0+biA9IHRhcmdldCAvIChGcmVmICogZmFjdG9ycy0+ZnJhdGlvKTsKKwkJTm1vZCA9IHRhcmdldCAlIChGcmVmICogZmFjdG9ycy0+ZnJhdGlvKTsKKwl9IHdoaWxlIChObW9kID09IDApOworCisJLyogQ2FsY3VsYXRlIGZyYWN0aW9uYWwgcGFydCAtIHNjYWxlIHVwIHNvIHdlIGNhbiByb3VuZC4gKi8KKwlLcGFydCA9IEZJWEVEX0ZMTF9TSVpFICogKGxvbmcgbG9uZylObW9kOworCisJZG9fZGl2KEtwYXJ0LCAoRnJlZiAqIGZhY3RvcnMtPmZyYXRpbykpOworCisJSyA9IEtwYXJ0ICYgMHhGRkZGRkZGRjsKKworCWlmICgoSyAlIDEwKSA+PSA1KQorCQlLICs9IDU7CisKKwkvKiBNb3ZlIGRvd24gdG8gcHJvcGVyIHJhbmdlIG5vdyByb3VuZGluZyBpcyBkb25lICovCisJZmFjdG9ycy0+ayA9IEsgLyAxMDsKKworCWRldl9kYmcod204NDAwLT53bTg0MDAtPmRldiwKKwkJIkZMTDogRnJlZj0lZCBGb3V0PSVkIE49JXggSz0leCwgRlJBVElPPSV4IE9VVERJVj0leFxuIiwKKwkJRnJlZiwgRm91dCwKKwkJZmFjdG9ycy0+biwgZmFjdG9ycy0+aywgZmFjdG9ycy0+ZnJhdGlvLCBmYWN0b3JzLT5vdXRkaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3NldF9kYWlfcGxsKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgcGxsX2lkLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmxsX2ZhY3RvcnMgZmFjdG9yczsKKwlpbnQgcmV0OworCXUxNiByZWc7CisKKwlpZiAoZnJlcV9pbiA9PSB3bTg0MDAtPmZsbF9pbiAmJiBmcmVxX291dCA9PSB3bTg0MDAtPmZsbF9vdXQpCisJCXJldHVybiAwOworCisJaWYgKGZyZXFfb3V0ICE9IDApIHsKKwkJcmV0ID0gZmxsX2ZhY3RvcnMod204NDAwLCAmZmFjdG9ycywgZnJlcV9pbiwgZnJlcV9vdXQpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXdtODQwMC0+ZmxsX291dCA9IGZyZXFfb3V0OworCXdtODQwMC0+ZmxsX2luID0gZnJlcV9pbjsKKworCS8qIFdlICptdXN0KiBkaXNhYmxlIHRoZSBGTEwgYmVmb3JlIGFueSBjaGFuZ2VzICovCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIpOworCXJlZyAmPSB+V004NDAwX0ZMTF9FTkE7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLCByZWcpOworCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8xKTsKKwlyZWcgJj0gfldNODQwMF9GTExfT1NDX0VOQTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8xLCByZWcpOworCisJaWYgKGZyZXFfb3V0ID09IDApCisJCXJldHVybiAwOworCisJcmVnICY9IH4oV004NDAwX0ZMTF9SRUZfRlJFUSB8IFdNODQwMF9GTExfRlJBVElPX01BU0spOworCXJlZyB8PSBXTTg0MDBfRkxMX0ZSQUMgfCBmYWN0b3JzLmZyYXRpbzsKKwlyZWcgfD0gZmFjdG9ycy5mcmVxX3JlZiA8PCBXTTg0MDBfRkxMX1JFRl9GUkVRX1NISUZUOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzEsIHJlZyk7CisKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8yLCBmYWN0b3JzLmspOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzMsIGZhY3RvcnMubik7CisKKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzQpOworCXJlZyAmPSBXTTg0MDBfRkxMX09VVERJVl9NQVNLOworCXJlZyB8PSBmYWN0b3JzLm91dGRpdjsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF80LCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXRzIEFEQyBhbmQgVm9pY2UgREFDIGZvcm1hdC4KKyAqLworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgYXVkaW8xLCBhdWRpbzM7CisKKwlhdWRpbzEgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xKTsKKwlhdWRpbzMgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8zKTsKKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYXVkaW8zICY9IH5XTTg0MDBfQUlGX01TVFIxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWF1ZGlvMyB8PSBXTTg0MDBfQUlGX01TVFIxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhdWRpbzEgJj0gfldNODQwMF9BSUZfRk1UX01BU0s7CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9GTVRfSTJTOworCQlhdWRpbzEgJj0gfldNODQwMF9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9SSUdIVEo7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9GTVRfTEVGVEo7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9EU1A7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9EU1AgfCBXTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEsIGF1ZGlvMSk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzMsIGF1ZGlvMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IHJlZzsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBXTTg0MDBfTUNMS19ESVY6CisJCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMikgJgorCQkJfldNODQwMF9NQ0xLX0RJVl9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODQwMF9EQUNDTEtfRElWOgorCQlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0NMT0NLSU5HXzIpICYKKwkJCX5XTTg0MDBfREFDX0NMS0RJVl9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODQwMF9BRENDTEtfRElWOgorCQlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0NMT0NLSU5HXzIpICYKKwkJCX5XTTg0MDBfQURDX0NMS0RJVl9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODQwMF9CQ0xLX0RJVjoKKwkJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9DTE9DS0lOR18xKSAmCisJCQl+V004NDAwX0JDTEtfRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzEsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IFBDTSBEQUkgYml0IHNpemUgYW5kIHNhbXBsZSByYXRlLgorICovCitzdGF0aWMgaW50IHdtODQwMF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwl1MTYgYXVkaW8xID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMSk7CisKKwlhdWRpbzEgJj0gfldNODQwMF9BSUZfV0xfTUFTSzsKKwkvKiBiaXQgc2l6ZSAqLworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX1dMXzIwQklUUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfV0xfMjRCSVRTOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9XTF8zMkJJVFM7CisJCWJyZWFrOworCX0KKworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xLCBhdWRpbzEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODQwMF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiB2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0RBQ19DVFJMKSAmIH5XTTg0MDBfREFDX01VVEU7CisKKwlpZiAobXV0ZSkKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwsIHZhbCB8IFdNODQwMF9EQUNfTVVURSk7CisJZWxzZQorCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCwgdmFsKTsKKworCXJldHVybiAwOworfQorCisvKiBUT0RPOiBzZXQgYmlhcyBmb3IgYmVzdCBwZXJmb3JtYW5jZSBhdCBzdGFuZGJ5ICovCitzdGF0aWMgaW50IHdtODQwMF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgdmFsOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRD0yKjUwayAqLworCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSkgJgorCQkJfldNODQwMF9WTUlEX01PREVfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwgfCAweDIpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShwb3dlciksCisJCQkJCQkgICAgJnBvd2VyWzBdKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIod204NDAwLT53bTg0MDAtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yczogJWRcbiIsCisJCQkJCXJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICAgV004NDAwX0NPREVDX0VOQSB8IFdNODQwMF9TWVNDTEtfRU5BKTsKKworCQkJLyogRW5hYmxlIFBPQkNUUkwsIFNPRlRfU1QsIFZNSURUT0cgYW5kIEJVRkRDT1BFTiAqLworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9TT0ZUU1QgfAorCQkJCSAgICAgV004NDAwX0JVRkRDT1BFTiB8IFdNODQwMF9QT0JDVFJMKTsKKworCQkJbXNsZWVwKDUwKTsKKworCQkJLyogRW5hYmxlIFZSRUYgJiBWTUlEIGF0IDJ4NTBrICovCisJCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSk7CisJCQl2YWwgfD0gMHgyIHwgV004NDAwX1ZSRUZfRU5BOworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwpOworCisJCQkvKiBFbmFibGUgQlVGSU9FTiAqLworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9TT0ZUU1QgfAorCQkJCSAgICAgV004NDAwX0JVRkRDT1BFTiB8IFdNODQwMF9QT0JDVFJMIHwKKwkJCQkgICAgIFdNODQwMF9CVUZJT0VOKTsKKworCQkJLyogZGlzYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KKwkJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCBXTTg0MDBfQlVGSU9FTik7CisJCX0KKworCQkvKiBWTUlEPTIqMzAwayAqLworCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSkgJgorCQkJfldNODQwMF9WTUlEX01PREVfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwgfCAweDQpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogRW5hYmxlIFBPQkNUUkwgYW5kIFNPRlRfU1QgKi8KKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9TT0ZUU1QgfAorCQkJV004NDAwX1BPQkNUUkwgfCBXTTg0MDBfQlVGSU9FTik7CisKKwkJLyogRW5hYmxlIFBPQkNUUkwsIFNPRlRfU1QgYW5kIEJVRkRDT1BFTiAqLworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQlXTTg0MDBfQlVGRENPUEVOIHwgV004NDAwX1BPQkNUUkwgfAorCQkJV004NDAwX0JVRklPRU4pOworCisJCS8qIG11dGUgREFDICovCisJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwpOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCwgdmFsIHwgV004NDAwX0RBQ19NVVRFKTsKKworCQkvKiBFbmFibGUgYW55IGRpc2FibGVkIG91dHB1dHMgKi8KKwkJdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpOworCQl2YWwgfD0gV004NDAwX1NQS19FTkEgfCBXTTg0MDBfT1VUM19FTkEgfAorCQkJV004NDAwX09VVDRfRU5BIHwgV004NDAwX0xPVVRfRU5BIHwKKwkJCVdNODQwMF9ST1VUX0VOQTsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwpOworCisJCS8qIERpc2FibGUgVk1JRCAqLworCQl2YWwgJj0gfldNODQwMF9WTUlEX01PREVfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwpOworCisJCW1zbGVlcCgzMDApOworCisJCS8qIEVuYWJsZSBhbGwgb3V0cHV0IGRpc2NoYXJnZSBiaXRzICovCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AxLCBXTTg0MDBfRElTX0xMSU5FIHwKKwkJCVdNODQwMF9ESVNfUkxJTkUgfCBXTTg0MDBfRElTX09VVDMgfAorCQkJV004NDAwX0RJU19PVVQ0IHwgV004NDAwX0RJU19MT1VUIHwKKwkJCVdNODQwMF9ESVNfUk9VVCk7CisKKwkJLyogRGlzYWJsZSBWUkVGICovCisJCXZhbCAmPSB+V004NDAwX1ZSRUZfRU5BOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJLyogZGlzYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIDB4MCk7CisKKwkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHBvd2VyKSwKKwkJCQkJICAgICAmcG93ZXJbMF0pOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJyZWFrOworCX0KKworCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004NDAwX1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBXTTg0MDBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NDAwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IHdtODQwMF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSA9IHdtODQwMF9tdXRlLAorCS5zZXRfZm10ID0gd204NDAwX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2ID0gd204NDAwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfc3lzY2xrID0gd204NDAwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfcGxsID0gd204NDAwX3NldF9kYWlfcGxsLAorfTsKKworLyoKKyAqIFRoZSBXTTg0MDAgc3VwcG9ydHMgMiBkaWZmZXJlbnQgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSBEQUkKKyAqIGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIDEuIEFEQy9EQUMgb24gUHJpbWFyeSBJbnRlcmZhY2UKKyAqIDIuIEFEQyBvbiBQcmltYXJ5IEludGVyZmFjZS9EQUMgb24gc2Vjb25kYXJ5CisgKi8KK3N0cnVjdCBzbmRfc29jX2RhaSB3bTg0MDBfZGFpID0geworLyogQURDL0RBQyBvbiBwcmltYXJ5ICovCisJLm5hbWUgPSAiV004NDAwIEFEQy9EQUMgUHJpbWFyeSIsCisJLmlkID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NDAwX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODQwMF9GT1JNQVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg0MDBfUkFURVMsCisJCS5mb3JtYXRzID0gV004NDAwX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJndtODQwMF9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODQwMF9kYWkpOworCitzdGF0aWMgaW50IHdtODQwMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg0MDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NDAwX2NvZGVjOworCitzdGF0aWMgaW50IHdtODQwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlpZiAoIXdtODQwMF9jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ3bTg0MDAgbm90IHlldCBkaXNjb3ZlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNvZGVjID0gd204NDAwX2NvZGVjOworCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXdtODQwMF9hZGRfY29udHJvbHMoY29kZWMpOworCXdtODQwMF9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byBjYXJkX2VycjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitjYXJkX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg0MDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg0MDAgPSB7CisJLnByb2JlID0Jd204NDAwX3Byb2JlLAorCS5yZW1vdmUgPQl3bTg0MDBfcmVtb3ZlLAorCS5zdXNwZW5kID0Jd204NDAwX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODQwMF9yZXN1bWUsCit9OworCitzdGF0aWMgdm9pZCB3bTg0MDBfcHJvYmVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd204NDAwX3ByaXYsCisJCQkJCQl3b3JrKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmcHJpdi0+Y29kZWM7CisJaW50IHJldDsKKworCS8qIGNoYXJnZSBvdXRwdXQgY2FwcyAqLworCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogV2UncmUgZG9uZSwgdGVsbCB0aGUgc3Vic3lzdGVtLiAqLworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHByaXYtPndtODQwMC0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg0MDBfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihwcml2LT53bTg0MDAtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcmV0dXJuOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwl3bTg0MDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworfQorCitzdGF0aWMgaW50IHdtODQwMF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICpwcml2OworCWludCByZXQ7CisJdTE2IHJlZzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODQwMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZwcml2LT5jb2RlYzsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisJcHJpdi0+d204NDAwID0gZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQocHJpdi0+d204NDAwLT5kZXYsCisJCQkJIEFSUkFZX1NJWkUocG93ZXIpLCAmcG93ZXJbMF0pOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgcmVndWxhdG9yczogJWRcbiIsIHJldCk7CisJICAgICAgICBnb3RvIGVycjsKKwl9CisKKwljb2RlYy0+ZGV2ID0gJmRldi0+ZGV2OworCXdtODQwMF9kYWkuZGV2ID0gJmRldi0+ZGV2OworCisJY29kZWMtPm5hbWUgPSAiV004NDAwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODQwMF9yZWFkOworCWNvZGVjLT53cml0ZSA9IHdtODQwMF93cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NDAwX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204NDAwX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004NDAwX1JFR0lTVEVSX0NPVU5UOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrLCB3bTg0MDBfcHJvYmVfZGVmZXJyZWQpOworCisJd204NDAwX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHJlZyB8IFdNODQwMF9DT0RFQ19FTkEpOworCisJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZSBiaXRzICovCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJCSAgICAgcmVnICYgV004NDAwX0lQVlUpOworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJCSAgICAgcmVnICYgV004NDAwX0lQVlUpOworCisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfTEVGVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9SSUdIVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKKworCXdtODQwMF9jb2RlYyA9IGNvZGVjOworCisJaWYgKCFzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9yZWd1bGF0b3I7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZWd1bGF0b3I6CisJd204NDAwX2NvZGVjID0gTlVMTDsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUocG93ZXIpLCBwb3dlcik7CitlcnI6CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgd204NDAwX2NvZGVjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICpwcml2ID0gd204NDAwX2NvZGVjLT5wcml2YXRlX2RhdGE7CisJdTE2IHJlZzsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODQwMF9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyh3bTg0MDBfY29kZWMpOworCisJcmVnID0gd204NDAwX3JlYWQod204NDAwX2NvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwl3bTg0MDBfd3JpdGUod204NDAwX2NvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkgICAgIHJlZyAmICh+V004NDAwX0NPREVDX0VOQSkpOworCisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHBvd2VyKSwgcG93ZXIpOworCWtmcmVlKHByaXYpOworCisJd204NDAwX2NvZGVjID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg0MDBfY29kZWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODQwMC1jb2RlYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gd204NDAwX2NvZGVjX3Byb2JlLAorCS5yZW1vdmUJPSBfX2V4aXRfcCh3bTg0MDBfY29kZWNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODQwMF9jb2RlY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204NDAwX2NvZGVjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTg0MDBfY29kZWNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg0MDBfY29kZWNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg0MDBfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODQwMF9jb2RlY19leGl0KTsKKworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg0MDApOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004NDAwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTg0MDAtY29kZWMiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YzU5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiB3bTg0MDAuaCAgLS0gIGF1ZGlvIGRyaXZlciBmb3IgV004NDAwCisgKgorICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX1dNODQwMF9DT0RFQ19ICisjZGVmaW5lIF9XTTg0MDBfQ09ERUNfSAorCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJViAwCisjZGVmaW5lIFdNODQwMF9EQUNDTEtfRElWIDEKKyNkZWZpbmUgV004NDAwX0FEQ0NMS19ESVYgMgorI2RlZmluZSBXTTg0MDBfQkNMS19ESVYgMworCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJVl8xIDB4NDAwCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJVl8yIDB4ODAwCisKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfMSAgICAweDAwCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzFfNSAgMHgwNAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl8yICAgIDB4MDgKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfMyAgICAweDBjCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzQgICAgMHgxMAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl81XzUgIDB4MTQKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfNiAgICAweDE4CisKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfMSAgICAweDAwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzFfNSAgMHgyMAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl8yICAgIDB4NDAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfMyAgICAweDYwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzQgICAgMHg4MAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl81XzUgIDB4YTAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfNiAgICAweGMwCisKKworI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMSAgICAgICAgICAgICAgICAgICAgICAgKDB4MCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMV81ICAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMiAgICAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMyAgICAgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNCAgICAgICAgICAgICAgICAgICAgICAgKDB4NCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNV81ICAgICAgICAgICAgICAgICAgICAgKDB4NSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNiAgICAgICAgICAgICAgICAgICAgICAgKDB4NiA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfOCAgICAgICAgICAgICAgICAgICAgICAgKDB4NyA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMTEgICAgICAgICAgICAgICAgICAgICAgKDB4OCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMTIgICAgICAgICAgICAgICAgICAgICAgKDB4OSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMTYgICAgICAgICAgICAgICAgICAgICAgKDB4QSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMjIgICAgICAgICAgICAgICAgICAgICAgKDB4QiA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMjQgICAgICAgICAgICAgICAgICAgICAgKDB4QyA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMzIgICAgICAgICAgICAgICAgICAgICAgKDB4RCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNDQgICAgICAgICAgICAgICAgICAgICAgKDB4RSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNDggICAgICAgICAgICAgICAgICAgICAgKDB4RiA8PCAxKQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODQwMF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NDAwOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCmluZGV4IDQwZjgyMzguLjZhNGNlYTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYwpAQCAtMTcxLDIyICsxNzEsNiBAQAogU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBXTTg1MTBfTU9OT01JWCwgNiwgMSwgMSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204NTEwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODUxMF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTg1MTBfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywKLQkJCQkJTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIFNwZWFrZXIgT3V0cHV0IE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NTEwX3NwZWFrZXJfbWl4ZXJfY29udHJvbHNbXSA9IHsKIFNPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgV004NTEwX1NQS01JWCwgMSwgMSwgMCksCkBAIC0zNTIsNyArMzM2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcGxsX2ZhY3RvcnMoZnJlcV9vdXQqOCwgZnJlcV9pbik7CisJcGxsX2ZhY3RvcnMoZnJlcV9vdXQqNCwgZnJlcV9pbik7CiAKIAl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QTExOLCAocGxsX2Rpdi5wcmVfZGl2IDw8IDQpIHwgcGxsX2Rpdi5uKTsKIAl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QTExLMSwgcGxsX2Rpdi5rID4+IDE4KTsKQEAgLTM4Myw3ICszNjcsNyBAQAogCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9HUElPLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODUxMF9NQ0xLRElWOgotCQlyZWcgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9DTE9DSykgJiAweDFmOworCQlyZWcgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9DTE9DSykgJiAweDExZjsKIAkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfQ0xPQ0ssIHJlZyB8IGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV004NTEwX0FEQ0NMSzoKQEAgLTQ2OCw3ICs0NTIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgaWZhY2UgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9JRkFDRSkgJiAweDE5ZjsKIAl1MTYgYWRuID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfQUREKSAmIDB4MWYxOwogCkBAIC01NzAsNiArNTU0LDE0IEBACiAjZGVmaW5lIFdNODUxMF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODUxMF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg1MTBfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NTEwX211dGUsCisJLnNldF9mbXQJPSB3bTg1MTBfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg1MTBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg1MTBfc2V0X2RhaV9wbGwsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NTEwX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg1MTAgSGlGaSIsCiAJLnBsYXliYWNrID0gewpAQCAtNTg0LDIwICs1NzYsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODUxMF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg1MTBfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg1MTBfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODUxMF9tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODUxMF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg1MTBfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NTEwX3NldF9kYWlfcGxsLAotCX0sCisJLm9wcyA9ICZ3bTg1MTBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg1MTBfZGFpKTsKIAogc3RhdGljIGludCB3bTg1MTBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg1MTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNjA2LDcgKzU5Miw3IEBACiBzdGF0aWMgaW50IHdtODUxMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNjI4LDcgKzYxNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd204NTEwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004NTEwIjsKQEAgLTY1Niw3ICs2NDIsOCBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKIAl3bTg1MTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKLQl3bTg1MTBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NTEwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODUxMF9zbmRfY29udHJvbHMpKTsKIAl3bTg1MTBfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTY4NSw3ICs2NzIsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODUxMF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC03NjYsNyArNzUzLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdtODUxMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODUxMF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwpAQCAtODMyLDcgKzgxOSw3IEBACiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtODYyLDcgKzg0OSw3IEBACiBzdGF0aWMgaW50IHdtODUxMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg1MTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKaW5kZXggZDAwNGU1OC4uNDQyZWE2ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHdtODU4MC5jICAtLSAgV004NTgwIEFMU0EgU29jIEF1ZGlvIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBDb3B5cmlnaHQgMjAwOCwgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTM1LDE5ICszNSw2IEBACiAKICNpbmNsdWRlICJ3bTg1ODAuaCIKIAotI2RlZmluZSBXTTg1ODBfVkVSU0lPTiAiMC4xIgotCi1zdHJ1Y3QgcGxsX3N0YXRlIHsKLQl1bnNpZ25lZCBpbnQgaW47Ci0JdW5zaWduZWQgaW50IG91dDsKLX07Ci0KLS8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwotc3RydWN0IHdtODU4MF9wcml2IHsKLQlzdHJ1Y3QgcGxsX3N0YXRlIGE7Ci0Jc3RydWN0IHBsbF9zdGF0ZSBiOwotfTsKLQogLyogV004NTgwIHJlZ2lzdGVyIHNwYWNlICovCiAjZGVmaW5lIFdNODU4MF9QTExBMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCiAjZGVmaW5lIFdNODU4MF9QTExBMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCkBAIC0xMDIsNiArODksOCBAQAogI2RlZmluZSBXTTg1ODBfUkVBREJBQ0sgICAgICAgICAgICAgICAgICAgICAgMHgzNAogI2RlZmluZSBXTTg1ODBfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNQogCisjZGVmaW5lIFdNODU4MF9NQVhfUkVHSVNURVIgICAgICAgICAgICAgICAgICAweDM1CisKIC8qIFBMTEI0IChyZWdpc3RlciA3aCkgKi8KICNkZWZpbmUgV004NTgwX1BMTEI0X01DTEtPVVRTUkNfTUFTSyAgIDB4NjAKICNkZWZpbmUgV004NTgwX1BMTEI0X01DTEtPVVRTUkNfUExMQSAgIDB4MjAKQEAgLTE5Myw2ICsxODIsMjAgQEAKIAkweDAwMDAsIDB4MDAwMCAvKlI1MyovCiB9OwogCitzdHJ1Y3QgcGxsX3N0YXRlIHsKKwl1bnNpZ25lZCBpbnQgaW47CisJdW5zaWduZWQgaW50IG91dDsKK307CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODU4MF9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODU4MF9NQVhfUkVHSVNURVIgKyAxXTsKKwlzdHJ1Y3QgcGxsX3N0YXRlIGE7CisJc3RydWN0IHBsbF9zdGF0ZSBiOworfTsKKworCiAvKgogICogcmVhZCB3bTg1ODAgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtMjAwLDcgKzIwMyw3IEBACiAJdW5zaWduZWQgaW50IHJlZykKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID4gQVJSQVlfU0laRSh3bTg1ODBfcmVnKSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODU4MF9yZWcpKTsKIAlyZXR1cm4gY2FjaGVbcmVnXTsKIH0KIApAQCAtMjIzLDcgKzIyNiw3IEBACiB7CiAJdTggZGF0YVsyXTsKIAotCUJVR19PTihyZWcgPiBBUlJBWV9TSVpFKHdtODU4MF9yZWcpKTsKKwlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204NTgwX3JlZykpOwogCiAJLyogUmVnaXN0ZXJzIGFyZSA5IGJpdHMgd2lkZSAqLwogCXZhbHVlICY9IDB4MWZmOwpAQCAtMzMwLDIwICszMzMsNiBAQAogU09DX1NJTkdMRSgiQURDIEhpZ2gtUGFzcyBGaWx0ZXIgU3dpdGNoIiwgV004NTgwX0FEQ19DT05UUk9MMSwgNCwgMSwgMCksCiB9OwogCi0vKiBBZGQgbm9uLURBUE0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204NTgwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODU4MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODU4MF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODU4MF9kYXBtX3dpZGdldHNbXSA9IHsKIFNORF9TT0NfREFQTV9EQUMoIkRBQzEiLCAiUGxheWJhY2siLCBXTTg1ODBfUFdSRE4xLCAyLCAxKSwKIFNORF9TT0NfREFQTV9EQUMoIkRBQzIiLCAiUGxheWJhY2siLCBXTTg1ODBfUFdSRE4xLCAzLCAxKSwKQEAgLTU1Myw3ICs1NDIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgcGFpZmIgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BBSUYzICsgZGFpLT5pZCk7CiAKIAlwYWlmYiAmPSB+V004NTgwX0FJRl9MRU5HVEhfTUFTSzsKQEAgLTc3MSw4ICs3NjAsMjIgQEAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKLQljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgogCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQkvKiBQb3dlciB1cCBhbmQgZ2V0IGluZGl2aWR1YWwgY29udHJvbCBvZiB0aGUgREFDcyAqLworCQkJcmVnID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjEpOworCQkJcmVnICY9IH4oV004NTgwX1BXUkROMV9QV0ROIHwgV004NTgwX1BXUkROMV9BTExEQUNQRCk7CisJCQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjEsIHJlZyk7CisKKwkJCS8qIE1ha2UgVk1JRCBoaWdoIGltcGVkZW5jZSAqLworCQkJcmVnID0gd204NTgwX3JlYWQoY29kZWMsICBXTTg1ODBfQURDX0NPTlRST0wxKTsKKwkJCXJlZyAmPSB+MHgxMDA7CisJCQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9BRENfQ09OVFJPTDEsIHJlZyk7CisJCX0KKwkJYnJlYWs7CisKIAljYXNlIFNORF9TT0NfQklBU19PRkY6CiAJCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUFdSRE4xKTsKIAkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUFdSRE4xLCByZWcgfCBXTTg1ODBfUFdSRE4xX1BXRE4pOwpAQCAtNzg1LDYgKzc4OCwyMSBAQAogI2RlZmluZSBXTTg1ODBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODU4MF9kYWlfb3BzX3BsYXliYWNrID0geworCS5od19wYXJhbXMJPSB3bTg1ODBfcGFpZl9od19wYXJhbXMsCisJLnNldF9mbXQJPSB3bTg1ODBfc2V0X3BhaWZfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODU4MF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODU4MF9zZXRfZGFpX3BsbCwKKwkuZGlnaXRhbF9tdXRlCT0gd204NTgwX2RpZ2l0YWxfbXV0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODU4MF9kYWlfb3BzX2NhcHR1cmUgPSB7CisJLmh3X3BhcmFtcwk9IHdtODU4MF9wYWlmX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IHdtODU4MF9zZXRfcGFpZl9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NTgwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NTgwX3NldF9kYWlfcGxsLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODU4MF9kYWlbXSA9IHsKIAl7CiAJCS5uYW1lID0gIldNODU4MCBQQUlGUlgiLApAQCAtNzk2LDEzICs4MTQsNyBAQAogCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCiAJCQkuZm9ybWF0cyA9IFdNODU4MF9GT1JNQVRTLAogCQl9LAotCQkub3BzID0gewotCQkJIC5od19wYXJhbXMgPSB3bTg1ODBfcGFpZl9od19wYXJhbXMsCi0JCQkgLnNldF9mbXQgPSB3bTg1ODBfc2V0X3BhaWZfZGFpX2ZtdCwKLQkJCSAuc2V0X2Nsa2RpdiA9IHdtODU4MF9zZXRfZGFpX2Nsa2RpdiwKLQkJCSAuc2V0X3BsbCA9IHdtODU4MF9zZXRfZGFpX3BsbCwKLQkJCSAuZGlnaXRhbF9tdXRlID0gd204NTgwX2RpZ2l0YWxfbXV0ZSwKLQkJIH0sCisJCS5vcHMgPSAmd204NTgwX2RhaV9vcHNfcGxheWJhY2ssCiAJfSwKIAl7CiAJCS5uYW1lID0gIldNODU4MCBQQUlGVFgiLApAQCAtODE0LDEwOSArODI2LDE2OCBAQAogCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCiAJCQkuZm9ybWF0cyA9IFdNODU4MF9GT1JNQVRTLAogCQl9LAotCQkub3BzID0gewotCQkJIC5od19wYXJhbXMgPSB3bTg1ODBfcGFpZl9od19wYXJhbXMsCi0JCQkgLnNldF9mbXQgPSB3bTg1ODBfc2V0X3BhaWZfZGFpX2ZtdCwKLQkJCSAuc2V0X2Nsa2RpdiA9IHdtODU4MF9zZXRfZGFpX2Nsa2RpdiwKLQkJCSAuc2V0X3BsbCA9IHdtODU4MF9zZXRfZGFpX3BsbCwKLQkJIH0sCisJCS5vcHMgPSAmd204NTgwX2RhaV9vcHNfY2FwdHVyZSwKIAl9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODU4MF9kYWkpOwogCi0vKgotICogaW5pdGlhbGlzZSB0aGUgV004NTgwIGRyaXZlcgotICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKLSAqLwotc3RhdGljIGludCB3bTg1ODBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NTgwX2NvZGVjOworCitzdGF0aWMgaW50IHdtODU4MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IHJldCA9IDA7CiAKLQljb2RlYy0+bmFtZSA9ICJXTTg1ODAiOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204NTgwX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHdtODU4MF93cml0ZTsKLQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg1ODBfc2V0X2JpYXNfbGV2ZWw7Ci0JY29kZWMtPmRhaSA9IHdtODU4MF9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHdtODU4MF9kYWkpOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NTgwX3JlZyk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod204NTgwX3JlZywgc2l6ZW9mKHdtODU4MF9yZWcpLAotCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICh3bTg1ODBfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLQlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEdldCB0aGUgY29kZWMgaW50byBhIGtub3duIHN0YXRlICovCi0Jd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUkVTRVQsIDApOwotCi0JLyogUG93ZXIgdXAgYW5kIGdldCBpbmRpdmlkdWFsIGNvbnRyb2wgb2YgdGhlIERBQ3MgKi8KLQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjEsIHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUFdSRE4xKSAmCi0JCSAgICAgfihXTTg1ODBfUFdSRE4xX1BXRE4gfCBXTTg1ODBfUFdSRE4xX0FMTERBQ1BEKSk7Ci0KLQkvKiBNYWtlIFZNSUQgaGlnaCBpbXBlZGVuY2UgKi8KLQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9BRENfQ09OVFJPTDEsCi0JCSAgICAgd204NTgwX3JlYWQoY29kZWMsICBXTTg1ODBfQURDX0NPTlRST0wxKSAmIH4weDEwMCk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODU4MF9jb2RlYzsKKwljb2RlYyA9IHdtODU4MF9jb2RlYzsKIAogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KLQlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLAotCQkJICAgICAgIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIndtODU4MDogZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKIAkJZ290byBwY21fZXJyOwogCX0KIAotCXdtODU4MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg1ODBfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODU4MF9zbmRfY29udHJvbHMpKTsKIAl3bTg1ODBfYWRkX3dpZGdldHMoY29kZWMpOwotCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIndtODU4MDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZDogJWRcbiIsIHJldCk7CiAJCWdvdG8gY2FyZF9lcnI7CiAJfQorCiAJcmV0dXJuIHJldDsKIAogY2FyZF9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBJZiB0aGUgaTJjIGxheWVyIHdlcmVuJ3Qgc28gYnJva2VuLCB3ZSBjb3VsZCBwYXNzIHRoaXMga2luZCBvZiBkYXRhCi0gICBhcm91bmQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKndtODU4MF9zb2NkZXY7CisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgd204NTgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NTgwID0geworCS5wcm9iZSA9IAl3bTg1ODBfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg1ODBfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NTgwKTsKKworc3RhdGljIGludCB3bTg1ODBfcmVnaXN0ZXIoc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODApCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204NTgwLT5jb2RlYzsKKworCWlmICh3bTg1ODBfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg1ODAgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NTgwOworCWNvZGVjLT5uYW1lID0gIldNODU4MCI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQgPSB3bTg1ODBfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gd204NTgwX3dyaXRlOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg1ODBfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9IHdtODU4MF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHdtODU4MF9kYWkpOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NTgwLT5yZWdfY2FjaGUpOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204NTgwLT5yZWdfY2FjaGU7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204NTgwX3JlZywgc2l6ZW9mKHdtODU4MF9yZWcpKTsKKworCS8qIEdldCB0aGUgY29kZWMgaW50byBhIGtub3duIHN0YXRlICovCisJcmV0ID0gd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUkVTRVQsIDApOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVzZXQgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKTsgaSsrKQorCQl3bTg1ODBfZGFpW2ldLmRldiA9IGNvZGVjLT5kZXY7CisKKwl3bTg1ODBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXdtODU4MF9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyh3bTg1ODBfZGFpLCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg1ODApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODU4MF91bnJlZ2lzdGVyKHN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwKQoreworCXdtODU4MF9zZXRfYmlhc19sZXZlbCgmd204NTgwLT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMod204NTgwX2RhaSwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg1ODAtPmNvZGVjKTsKKwlrZnJlZSh3bTg1ODApOworCXdtODU4MF9jb2RlYyA9IE5VTEw7Cit9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0KLS8qCi0gKiBXTTg1ODAgMiB3aXJlIGFkZHJlc3MgaXMgZGV0ZXJtaW5lZCBieSBHUElPNQotICogc3RhdGUgZHVyaW5nIHBvd2VydXAuCi0gKiAgICBsb3cgID0gMHgxYQotICogICAgaGlnaCA9IDB4MWIKLSAqLwotCiBzdGF0aWMgaW50IHdtODU4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg1ODBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CisJd204NTgwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODU4MF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODU4MCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODU4MC0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204NTgwKTsKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOwogCi0JcmV0ID0gd204NTgwX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2VycigmaTJjLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg1ODBcbiIpOwotCXJldHVybiByZXQ7CisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg1ODBfcmVnaXN0ZXIod204NTgwKTsKIH0KIAogc3RhdGljIGludCB3bTg1ODBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCXN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJd204NTgwX3VucmVnaXN0ZXIod204NTgwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTI4LDEyOSArOTk5LDM1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg1ODBfaTJjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJXTTg1ODAgSTJDIENvZGVjIiwKKwkJLm5hbWUgPSAid204NTgwIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSAgICB3bTg1ODBfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSAgIHdtODU4MF9pMmNfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHdtODU4MF9pMmNfaWQsCiB9OwotCi1zdGF0aWMgaW50IHdtODU4MF9hZGRfaTJjX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBjb25zdCBzdHJ1Y3Qgd204NTgwX3NldHVwX2RhdGEgKnNldHVwKQotewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRyaXZlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gc2V0dXAtPmkyY19hZGRyZXNzOwotCXN0cmxjcHkoaW5mby50eXBlLCAid204NTgwIiwgSTJDX05BTUVfU0laRSk7Ci0KLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKHNldHVwLT5pMmNfYnVzKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyICVkXG4iLAotCQkJc2V0dXAtPmkyY19idXMpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAotCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KICNlbmRpZgogCi1zdGF0aWMgaW50IHdtODU4MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHdtODU4MF9zZXR1cF9kYXRhICpzZXR1cDsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0Jc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODA7Ci0JaW50IHJldCA9IDA7Ci0KLQlwcl9pbmZvKCJXTTg1ODAgQXVkaW8gQ29kZWMgJXNcbiIsIFdNODU4MF9WRVJTSU9OKTsKLQotCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwotCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3bTg1ODAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NTgwX3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAod204NTgwID09IE5VTEwpIHsKLQkJa2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NTgwOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKLQltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwotCXdtODU4MF9zb2NkZXYgPSBzb2NkZXY7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7Ci0JCXJldCA9IHdtODU4MF9hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7Ci0JfQotI2Vsc2UKLQkJLyogQWRkIG90aGVyIGludGVyZmFjZXMgaGVyZSAqLwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQotLyogcG93ZXIgZG93biBjaGlwICovCi1zdGF0aWMgaW50IHdtODU4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0KLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKLQkJd204NTgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKLQlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWkyY191bnJlZ2lzdGVyX2RldmljZShjb2RlYy0+Y29udHJvbF9kYXRhKTsKLQlpMmNfZGVsX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOwotI2VuZGlmCi0Ja2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0Ja2ZyZWUoY29kZWMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODU4MCA9IHsKLQkucHJvYmUgPSAJd204NTgwX3Byb2JlLAotCS5yZW1vdmUgPSAJd204NTgwX3JlbW92ZSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODU4MCk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IHdtODU4MF9tb2Rpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyh3bTg1ODBfZGFpLCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpKTsKKwlpbnQgcmV0OworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODU4MCBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQod204NTgwX21vZGluaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd204NTgwX2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyh3bTg1ODBfZGFpLCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKKyNlbmRpZgogfQogbW9kdWxlX2V4aXQod204NTgwX2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuaAppbmRleCAwOWU0NDIyLi4wZGZiNWRkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmgKQEAgLTI4LDExICsyOCw2IEBACiAjZGVmaW5lIFdNODU4MF9DTEtTUkNfT1NDICA0CiAjZGVmaW5lIFdNODU4MF9DTEtTUkNfTk9ORSA1CiAKLXN0cnVjdCB3bTg1ODBfc2V0dXBfZGF0YSB7Ci0JaW50IGkyY19idXM7Ci0JdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7Ci19OwotCiAjZGVmaW5lIFdNODU4MF9EQUlfUEFJRlJYIDAKICNkZWZpbmUgV004NTgwX0RBSV9QQUlGVFggMQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjguYwppbmRleCA4MGIxMTk4Li5lN2ZmMjEyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCUJVR19PTihyZWcgPiBBUlJBWV9TSVpFKHdtODcyOF9yZWdfZGVmYXVsdHMpKTsKKwlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cykpOwogCXJldHVybiBjYWNoZVtyZWddOwogfQogCkBAIC01NSw3ICs1NSw3IEBACiAJdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCUJVR19PTihyZWcgPiBBUlJBWV9TSVpFKHdtODcyOF9yZWdfZGVmYXVsdHMpKTsKKwlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cykpOwogCWNhY2hlW3JlZ10gPSB2YWx1ZTsKIH0KIApAQCAtOTIsMjEgKzkyLDYgQEAKIFNPQ19TSU5HTEUoIkRlZW1waGFzaXMiLCBXTTg3MjhfREFDQ1RMLCAxLCAxLCAwKSwKIH07CiAKLXN0YXRpYyBpbnQgd204NzI4X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODcyOF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODcyOF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBEQVBNIGNvbnRyb2xzLgogICovCkBAIC0xNTIsNyArMTM3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGRhYyA9IHdtODcyOF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzI4X0RBQ0NUTCk7CiAKIAlkYWMgJj0gfjB4MTg7CkBAIC0yNTksNiArMjQ0LDEyIEBACiAjZGVmaW5lIFdNODcyOF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3MjhfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzI4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzI4X211dGUsCisJLnNldF9mbXQJPSB3bTg3Mjhfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzI4X2RhaSA9IHsKIAkubmFtZSA9ICJXTTg3MjgiLAogCS5wbGF5YmFjayA9IHsKQEAgLTI2OCwxOCArMjU5LDE0IEBACiAJCS5yYXRlcyA9IFdNODcyOF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3MjhfRk9STUFUUywKIAl9LAotCS5vcHMgPSB7Ci0JCSAuaHdfcGFyYW1zID0gd204NzI4X2h3X3BhcmFtcywKLQkJIC5kaWdpdGFsX211dGUgPSB3bTg3MjhfbXV0ZSwKLQkJIC5zZXRfZm10ID0gd204NzI4X3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJndtODcyOF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODcyOF9kYWkpOwogCiBzdGF0aWMgaW50IHdtODcyOF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODcyOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAKQEAgLTI4OSw3ICsyNzYsNyBAQAogc3RhdGljIGludCB3bTg3MjhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg3Mjhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwpOwogCkBAIC0zMDIsNyArMjg5LDcgQEAKICAqLwogc3RhdGljIGludCB3bTg3MjhfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg3MjgiOwpAQCAtMzMwLDcgKzMxNyw4IEBACiAJLyogcG93ZXIgb24gZGV2aWNlICovCiAJd204NzI4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKLQl3bTg3MjhfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzI4X3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODcyOF9zbmRfY29udHJvbHMpKTsKIAl3bTg3MjhfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTM2Myw3ICszNTEsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODcyOF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC00NDQsNyArNDMyLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdtODcyOF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODcyOF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwpAQCAtNTA4LDcgKzQ5Niw3IEBACiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtNTQxLDcgKzUyOSw3IEBACiBzdGF0aWMgaW50IHdtODcyOF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg3Mjhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKaW5kZXggYzQ0NGI5Zi4uZTA0M2UzZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCkBAIC0yOSwxNSArMjksMjAgQEAKIAogI2luY2x1ZGUgIndtODczMS5oIgogCi0jZGVmaW5lIFdNODczMV9WRVJTSU9OICIwLjEzIgotCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODczMV9jb2RlYzsKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODczMTsKIAogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3Qgd204NzMxX3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXUxNiByZWdfY2FjaGVbV004NzMxX0NBQ0hFUkVHTlVNXTsKIAl1bnNpZ25lZCBpbnQgc3lzY2xrOwogfTsKIAorI2lmZGVmIENPTkZJR19TUElfTUFTVEVSCitzdGF0aWMgaW50IHdtODczMV9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbik7CisjZW5kaWYKKwogLyoKICAqIHdtODczMSByZWdpc3RlciBjYWNoZQogICogV2UgY2FuJ3QgcmVhZCB0aGUgV004NzMxIHJlZ2lzdGVyIHNwYWNlIHdoZW4gd2UgYXJlCkBAIC0xMjksMjIgKzEzNCw2IEBACiBTT0NfRU5VTSgiUGxheWJhY2sgRGUtZW1waGFzaXMiLCB3bTg3MzFfZW51bVsxXSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204NzMxX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODczMV9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODczMV9zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIE91dHB1dCBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODczMV9vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKIFNPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgV004NzMxX0FQQU5BLCAzLCAxLCAwKSwKQEAgLTI2OSw3ICsyNTgsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2IGlmYWNlID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfSUZBQ0UpICYgMHhmZmYzOwogCWludCBpID0gZ2V0X2NvZWZmKHdtODczMS0+c3lzY2xrLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKQEAgLTI5OSw3ICsyODgsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHNldCBhY3RpdmUgKi8KIAl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MDAwMSk7CkBAIC0zMTIsNyArMzAxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBkZWFjdGl2YXRlICovCiAJaWYgKCFjb2RlYy0+YWN0aXZlKSB7CkBAIC00MTQsMjEgKzQwMywxOSBAQAogc3RhdGljIGludCB3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQl1MTYgcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUFdSKSAmIDB4ZmY3ZjsKKwl1MTYgcmVnOwogCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgotCQkvKiB2cmVmL21pZCwgb3NjIG9uLCBkYWMgdW5tdXRlICovCi0JCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1BXUiwgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJLyogZXZlcnl0aGluZyBvZmYgZXhjZXB0IHZyZWYvdm1pZCwgKi8KKwkJLyogQ2xlYXIgUFdST0ZGLCBnYXRlIENMS09VVCwgZXZlcnl0aGluZyBlbHNlIGFzLWlzICovCisJCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1BXUikgJiAweGZmN2Y7CiAJCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1BXUiwgcmVnIHwgMHgwMDQwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQkvKiBldmVyeXRoaW5nIG9mZiwgZGFjIG11dGUsIGluYWN0aXZlICovCiAJCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FDVElWRSwgMHgwKTsKIAkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUFdSLCAweGZmZmYpOwogCQlicmVhazsKQEAgLTQ0Niw2ICs0MzMsMTUgQEAKICNkZWZpbmUgV004NzMxX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODczMV9kYWlfb3BzID0geworCS5wcmVwYXJlCT0gd204NzMxX3BjbV9wcmVwYXJlLAorCS5od19wYXJhbXMJPSB3bTg3MzFfaHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHdtODczMV9zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRlCT0gd204NzMxX211dGUsCisJLnNldF9zeXNjbGsJPSB3bTg3MzFfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB3bTg3MzFfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzMxX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg3MzEiLAogCS5wbGF5YmFjayA9IHsKQEAgLTQ2MCwyMSArNDU2LDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3MzFfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzMxX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IHdtODczMV9wY21fcHJlcGFyZSwKLQkJLmh3X3BhcmFtcyA9IHdtODczMV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHdtODczMV9zaHV0ZG93biwKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODczMV9tdXRlLAotCQkuc2V0X3N5c2NsayA9IHdtODczMV9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSB3bTg3MzFfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmd204NzMxX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NzMxX2RhaSk7CiAKIHN0YXRpYyBpbnQgd204NzMxX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQUNUSVZFLCAweDApOwogCXdtODczMV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CkBAIC00ODQsNyArNDczLDcgQEAKIHN0YXRpYyBpbnQgd204NzMxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC01MDAsNTQgKzQ4OSwzMyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogaW5pdGlhbGlzZSB0aGUgV004NzMxIGRyaXZlcgotICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKLSAqLwotc3RhdGljIGludCB3bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKK3N0YXRpYyBpbnQgd204NzMxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmVnLCByZXQgPSAwOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOwogCi0JY29kZWMtPm5hbWUgPSAiV004NzMxIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODczMV9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg3MzFfd3JpdGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzMxX3NldF9iaWFzX2xldmVsOwotCWNvZGVjLT5kYWkgPSAmd204NzMxX2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IDE7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg3MzFfcmVnKTsKLQljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTg3MzFfcmVnLCBzaXplb2Yod204NzMxX3JlZyksIEdGUF9LRVJORUwpOwotCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICh3bTg3MzFfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLQl3bTg3MzFfcmVzZXQoY29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg3MzFfY29kZWM7CisJY29kZWMgPSB3bTg3MzFfY29kZWM7CiAKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIndtODczMTogZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKIAkJZ290byBwY21fZXJyOwogCX0KIAotCS8qIHBvd2VyIG9uIGRldmljZSAqLwotCXdtODczMV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwotCi0JLyogc2V0IHRoZSB1cGRhdGUgYml0cyAqLwotCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0xPVVQxVik7Ci0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfTE9VVDFWLCByZWcgJiB+MHgwMTAwKTsKLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9ST1VUMVYpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1JPVVQxViwgcmVnICYgfjB4MDEwMCk7Ci0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfTElOVk9MKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9MSU5WT0wsIHJlZyAmIH4weDAxMDApOwotCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1JJTlZPTCk7Ci0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUklOVk9MLCByZWcgJiB+MHgwMTAwKTsKLQotCXdtODczMV9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODczMV9zbmRfY29udHJvbHMpKTsKIAl3bTg3MzFfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3bTg3MzE6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGNhcmRfZXJyOwogCX0KIApAQCAtNTU3LDEzMyArNTI1LDEwOSBAQAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKIHBjbV9lcnI6Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqd204NzMxX3NvY2RldjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQotLyoKLSAqIFdNODczMSAyIHdpcmUgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IEdQSU81Ci0gKiBzdGF0ZSBkdXJpbmcgcG93ZXJ1cC4KLSAqICAgIGxvdyAgPSAweDFhCi0gKiAgICBoaWdoID0gMHgxYgotICovCi0KLXN0YXRpYyBpbnQgd204NzMxX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg3MzFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3MzFfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwogCi0JcmV0ID0gd204NzMxX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3MzFcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bTg3MzFfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204NzMxX2kyY19pZFtdID0gewotCXsgIndtODczMSIsIDAgfSwKLQl7IH0KK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODczMSA9IHsKKwkucHJvYmUgPSAJd204NzMxX3Byb2JlLAorCS5yZW1vdmUgPSAJd204NzMxX3JlbW92ZSwKKwkuc3VzcGVuZCA9IAl3bTg3MzFfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204NzMxX3Jlc3VtZSwKIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204NzMxX2kyY19pZCk7CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODczMSk7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3MzFfaTJjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJXTTg3MzEgSTJDIENvZGVjIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSAgICB3bTg3MzFfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSAgIHdtODczMV9pMmNfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHdtODczMV9pMmNfaWQsCi19OwotCi1zdGF0aWMgaW50IHdtODczMV9hZGRfaTJjX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBjb25zdCBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgKnNldHVwKQorc3RhdGljIGludCB3bTg3MzFfcmVnaXN0ZXIoc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEpCiB7Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204NzMxLT5jb2RlYzsKKwl1MTYgcmVnOwogCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkcml2ZXJcbiIpOworCWlmICh3bTg3MzFfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg3MzEgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzMxOworCWNvZGVjLT5uYW1lID0gIldNODczMSI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gd204NzMxX3dyaXRlOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg3MzFfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg3MzFfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg3MzFfQ0FDSEVSRUdOVU07CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg3MzEtPnJlZ19jYWNoZTsKKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg3MzFfcmVnLCBzaXplb2Yod204NzMxX3JlZykpOworCisJcmV0ID0gd204NzMxX3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCWluZm8uYWRkciA9IHNldHVwLT5pMmNfYWRkcmVzczsKLQlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOworCXdtODczMV9kYWkuZGV2ID0gY29kZWMtPmRldjsKIAotCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoc2V0dXAtPmkyY19idXMpOwotCWlmICghYWRhcHRlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgJWRcbiIsCi0JCQlzZXR1cC0+aTJjX2J1cyk7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKKwl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIExhdGNoIHRoZSB1cGRhdGUgYml0cyAqLworCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0xPVVQxVik7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfTE9VVDFWLCByZWcgJiB+MHgwMTAwKTsKKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9ST1VUMVYpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1JPVVQxViwgcmVnICYgfjB4MDEwMCk7CisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfTElOVk9MKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9MSU5WT0wsIHJlZyAmIH4weDAxMDApOworCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1JJTlZPTCk7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUklOVk9MLCByZWcgJiB+MHgwMTAwKTsKKworCS8qIERpc2FibGUgYnlwYXNzIHBhdGggYnkgZGVmYXVsdCAqLworCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0FQQU5BKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BUEFOQSwgcmVnICYgfjB4NCk7CisKKwl3bTg3MzFfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKCFjbGllbnQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKLQkJZ290byBlcnJfZHJpdmVyOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg3MzFfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci0KLWVycl9kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKLQlyZXR1cm4gLUVOT0RFVjsKIH0KLSNlbmRpZgorCitzdGF0aWMgdm9pZCB3bTg3MzFfdW5yZWdpc3RlcihzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSkKK3sKKwl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoJndtODczMS0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODczMV9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204NzMxLT5jb2RlYyk7CisJa2ZyZWUod204NzMxKTsKKwl3bTg3MzFfY29kZWMgPSBOVUxMOworfQogCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdtODczMV9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODczMV9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OwotCi0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKLQotCXJldCA9IHdtODczMV9pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzMxXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHdtODczMV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3MzFfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJ3bTg3MzEiLAotCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJCT0gd204NzMxX3NwaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODczMV9zcGlfcmVtb3ZlKSwKLX07Ci0KIHN0YXRpYyBpbnQgd204NzMxX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQogewogCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKQEAgLTcwNywxMDEgKzY1MSwxMjEgQEAKIAogCXJldHVybiBsZW47CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NQSV9NQVNURVIgKi8KIAotc3RhdGljIGludCB3bTg3MzFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODczMV9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSAqc2V0dXA7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxOwotCWludCByZXQgPSAwOwotCi0JcHJfaW5mbygiV004NzMxIEF1ZGlvIENvZGVjICVzIiwgV004NzMxX1ZFUlNJT04pOwotCi0Jc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7Ci0JY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChjb2RlYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKIAogCXdtODczMSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3MzFfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICh3bTg3MzEgPT0gTlVMTCkgewotCQlrZnJlZShjb2RlYyk7CisJaWYgKHdtODczMSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzMxOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKLQltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCWNvZGVjID0gJndtODczMS0+Y29kZWM7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3MzFfc3BpX3dyaXRlOworCWNvZGVjLT5kZXYgPSAmc3BpLT5kZXY7CiAKLQl3bTg3MzFfc29jZGV2ID0gc29jZGV2OwotCXJldCA9IC1FTk9ERVY7CisJc3BpLT5kZXYuZHJpdmVyX2RhdGEgPSB3bTg3MzE7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7Ci0JCXJldCA9IHdtODczMV9hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLQlpZiAoc2V0dXAtPnNwaSkgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3MzFfc3BpX3dyaXRlOwotCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3MzFfc3BpX2RyaXZlcik7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChyZXQgIT0gMCkgewotCQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQkJa2ZyZWUoY29kZWMpOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiB3bTg3MzFfcmVnaXN0ZXIod204NzMxKTsKIH0KIAotLyogcG93ZXIgZG93biBjaGlwICovCi1zdGF0aWMgaW50IHdtODczMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdtODczMV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxID0gc3BpLT5kZXYuZHJpdmVyX2RhdGE7CiAKLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKLQkJd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKLQotCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Jc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwotCWkyY19kZWxfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd204NzMxX3NwaV9kcml2ZXIpOwotI2VuZGlmCi0Ja2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0Ja2ZyZWUoY29kZWMpOworCXdtODczMV91bnJlZ2lzdGVyKHdtODczMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzMxID0gewotCS5wcm9iZSA9IAl3bTg3MzFfcHJvYmUsCi0JLnJlbW92ZSA9IAl3bTg3MzFfcmVtb3ZlLAotCS5zdXNwZW5kID0gCXdtODczMV9zdXNwZW5kLAotCS5yZXN1bWUgPQl3bTg3MzFfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODczMV9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIndtODczMSIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTg3MzFfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzMxX3NwaV9yZW1vdmUpLAogfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NzMxKTsKKyNlbmRpZiAvKiBDT05GSUdfU1BJX01BU1RFUiAqLworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204NzMxX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwl3bTg3MzEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzMxX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NzMxID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204NzMxLT5jb2RlYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg3MzEpOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODczMV9yZWdpc3Rlcih3bTg3MzEpOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg3MzFfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJd204NzMxX3VucmVnaXN0ZXIod204NzMxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODczMV9pMmNfaWRbXSA9IHsKKwl7ICJ3bTg3MzEiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODczMV9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NzMxX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiV004NzMxIEkyQyBDb2RlYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204NzMxX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg3MzFfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204NzMxX2kyY19pZCwKK307CisjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgd204NzMxX21vZGluaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODczMV9kYWkpOworCWludCByZXQ7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODczMSBJMkMgZHJpdmVyOiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3MzFfc3BpX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODczMSBTUEkgZHJpdmVyOiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdCh3bTg3MzFfbW9kaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3bTg3MzFfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODczMV9kYWkpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODczMV9zcGlfZHJpdmVyKTsKKyNlbmRpZgogfQogbW9kdWxlX2V4aXQod204NzMxX2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5oIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuaAppbmRleCA5NTE5MGU5Li5jZDdiODA2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmgKQEAgLTM0LDEyICszNCw2IEBACiAjZGVmaW5lIFdNODczMV9TWVNDTEsJMAogI2RlZmluZSBXTTg3MzFfREFJCQkwCiAKLXN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSB7Ci0JaW50ICAgICAgICAgICAgc3BpOwotCWludCAgICAgICAgICAgIGkyY19idXM7Ci0JdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7Ci19OwotCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODczMV9kYWk7CiBleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzMxOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwppbmRleCA1OTk3ZmE2Li5iNjQ1MDliIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKQEAgLTIzMSwyMSArMjMxLDYgQEAKIAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODc1MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204NzUwX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBEQVBNIENvbnRyb2xzCiAgKi8KQEAgLTYxOSw3ICs2MDQsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzUwX3ByaXYgKndtODc1MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2IGlmYWNlID0gd204NzUwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTBfSUZBQ0UpICYgMHgxZjM7CiAJdTE2IHNyYXRlID0gd204NzUwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTBfU1JBVEUpICYgMHgxYzA7CkBAIC02OTQsNiArNjc5LDEzIEBACiAjZGVmaW5lIFdNODc1MF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUwX3BjbV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1MF9tdXRlLAorCS5zZXRfZm10CT0gd204NzUwX3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrCT0gd204NzUwX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODc1MF9kYWkgPSB7CiAJLm5hbWUgPSAiV004NzUwIiwKIAkucGxheWJhY2sgPSB7CkBAIC03MDgsMTIgKzcwMCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTBfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUwX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUwX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTBfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTBfc2V0X2RhaV9mbXQsCi0JCS5zZXRfc3lzY2xrID0gd204NzUwX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg3NTBfZGFpKTsKIApAQCAtNzI3LDcgKzcxNCw3IEBACiBzdGF0aWMgaW50IHdtODc1MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODc1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC03MzYsNyArNzIzLDcgQEAKIHN0YXRpYyBpbnQgd204NzUwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC03NjksNyArNzU2LDcgQEAKICAqLwogc3RhdGljIGludCB3bTg3NTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJlZywgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIldNODc1MCI7CkBAIC04MTYsNyArODAzLDggQEAKIAlyZWcgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9SSU5WT0wpOwogCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKIAotCXdtODc1MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzUwX3NuZF9jb250cm9scykpOwogCXdtODc1MF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtODUwLDcgKzgzOCw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzUwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTkzMSw3ICs5MTksNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgd204NzUwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzUwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CkBAIC0xMDAzLDcgKzk5MSw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODc1MDsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC0xMDU3LDcgKzEwNDUsNyBAQAogc3RhdGljIGludCB3bTg3NTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204NzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCmluZGV4IDc3NjIwYWIuLmE2ZThmM2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpAQCAtNTEsOCArNTEsNiBAQAogCiAjaW5jbHVkZSAid204NzUzLmgiCiAKLSNkZWZpbmUgV004NzUzX1ZFUlNJT04gIjAuMTYiCi0KIHN0YXRpYyBpbnQgY2Fwc19jaGFyZ2UgPSAyMDAwOwogbW9kdWxlX3BhcmFtKGNhcHNfY2hhcmdlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhjYXBzX2NoYXJnZSwgIldNODc1MyBjYXAgY2hhcmdlIHRpbWUgKG1zZWNzKSIpOwpAQCAtNjAsMTIgKzU4LDYgQEAKIHN0YXRpYyB2b2lkIHdtODc1M19zZXRfZGFpX21vZGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXVuc2lnbmVkIGludCBtb2RlKTsKIAotLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCi1zdHJ1Y3Qgd204NzUzX3ByaXYgewotCXVuc2lnbmVkIGludCBzeXNjbGs7Ci0JdW5zaWduZWQgaW50IHBjbWNsazsKLX07Ci0KIC8qCiAgKiB3bTg3NTMgcmVnaXN0ZXIgY2FjaGUKICAqIFdlIGNhbid0IHJlYWQgdGhlIFdNODc1MyByZWdpc3RlciBzcGFjZSB3aGVuIHdlCkBAIC05MCw2ICs4MiwxNCBAQAogCTB4MDAwMCwgMHgwMDAwCiB9OwogCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg3NTNfcHJpdiB7CisJdW5zaWduZWQgaW50IHN5c2NsazsKKwl1bnNpZ25lZCBpbnQgcGNtY2xrOworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXUxNiByZWdfY2FjaGVbQVJSQVlfU0laRSh3bTg3NTNfcmVnKV07Cit9OworCiAvKgogICogcmVhZCB3bTg3NTMgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtOTcsNyArOTcsNyBAQAogCXVuc2lnbmVkIGludCByZWcpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaWYgKHJlZyA8IDEgfHwgcmVnID4gKEFSUkFZX1NJWkUod204NzUzX3JlZykgKyAxKSkKKwlpZiAocmVnIDwgMSB8fCByZWcgPj0gKEFSUkFZX1NJWkUod204NzUzX3JlZykgKyAxKSkKIAkJcmV0dXJuIC0xOwogCXJldHVybiBjYWNoZVtyZWcgLSAxXTsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQAogCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnIDwgMSB8fCByZWcgPiAweDNmKQorCWlmIChyZWcgPCAxIHx8IHJlZyA+PSAoQVJSQVlfU0laRSh3bTg3NTNfcmVnKSArIDEpKQogCQlyZXR1cm47CiAJY2FjaGVbcmVnIC0gMV0gPSB2YWx1ZTsKIH0KQEAgLTMzOSwyMSArMzM5LDYgQEAKIFNPQ19FTlVNKCJST1VUMiBQaGFzZSIsIHdtODc1M19lbnVtWzI4XSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204NzUzX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTg3NTNfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIF9EQVBNXyBDb250cm9scwogICovCkBAIC05MjcsNyArOTEyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiB2b2ljZSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1BDTSkgJiAweDAxZjM7CiAJdTE2IHNyYXRlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfU1JBVEUxKSAmIDB4MDE3ZjsKQEAgLTExNjEsNyArMTE0Niw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgc3JhdGUgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19TUkFURTEpICYgMHgwMWMwOwogCXUxNiBoaWZpID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfSElGSSkgJiAweDAxZjM7CkBAIC0xMzE2LDYgKzEzMDEsNTEgQEAKICAqIDMuIFZvaWNlIGRpc2FibGVkIC0gSElGSSBvdmVyIEhJRkkKICAqIDQuIFZvaWNlIGRpc2FibGVkIC0gSElGSSBvdmVyIEhJRkksIHVzZXMgdm9pY2UgREFJIExSQyBmb3IgY2FwdHVyZQogICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc19oaWZpX21vZGUxID0geworCS5od19wYXJhbXMJPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTFoX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTEgPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlMXZfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc192b2ljZV9tb2RlMiA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX3BjbV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUyX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlMwk9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX2kyc19od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc19oaWZpX21vZGU0CT0geworCS5od19wYXJhbXMJPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTNfNF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzUzX2FsbF9kYWlbXSA9IHsKIC8qIERBSSBIaUZpIG1vZGUgMSAqLwogewkubmFtZSA9ICJXTTg3NTMgSGlGaSIsCkBAIC0xMzMyLDE0ICsxMzYyLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUU30sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1M19pMnNfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUzX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUzX21vZGUxaF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlMSwKIH0sCiAvKiBEQUkgVm9pY2UgbW9kZSAxICovCiB7CS5uYW1lID0gIldNODc1MyBWb2ljZSIsCkBAIC0xMzU2LDE0ICsxMzc5LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlMXZfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUxLAogfSwKIC8qIERBSSBIaUZpIG1vZGUgMiAtIGR1bW15ICovCiB7CS5uYW1lID0gIldNODc1MyBIaUZpIiwKQEAgLTEzODQsMTQgKzE0MDAsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1M19wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUzX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUzX21vZGUyX3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc192b2ljZV9tb2RlMiwKIH0sCiAvKiBEQUkgSGlGaSBtb2RlIDMgKi8KIHsJLm5hbWUgPSAiV004NzUzIEhpRmkiLApAQCAtMTQwOCwxNCArMTQxNyw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX2kyc19od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTNfNF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlMywKIH0sCiAvKiBEQUkgVm9pY2UgbW9kZSAzIC0gZHVtbXkgKi8KIHsJLm5hbWUgPSAiV004NzUzIFZvaWNlIiwKQEAgLTE0MzYsMTQgKzE0MzgsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1M19pMnNfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUzX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX2hpZmlfbW9kZTQsCiB9LAogLyogREFJIFZvaWNlIG1vZGUgNCAtIGR1bW15ICovCiB7CS5uYW1lID0gIldNODc1MyBWb2ljZSIsCkBAIC0xNDY2LDMwICsxNDYxLDM1IEBACiAJaWYgKG1vZGUgPCA0KSB7CiAJCWludCBwbGF5YmFja19hY3RpdmUsIGNhcHR1cmVfYWN0aXZlLCBjb2RlY19hY3RpdmUsIHBvcF93YWl0OwogCQl2b2lkICpwcml2YXRlX2RhdGE7CisJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCQlwbGF5YmFja19hY3RpdmUgPSB3bTg3NTNfZGFpWzBdLnBsYXliYWNrLmFjdGl2ZTsKIAkJY2FwdHVyZV9hY3RpdmUgPSB3bTg3NTNfZGFpWzBdLmNhcHR1cmUuYWN0aXZlOwogCQljb2RlY19hY3RpdmUgPSB3bTg3NTNfZGFpWzBdLmFjdGl2ZTsKIAkJcHJpdmF0ZV9kYXRhID0gd204NzUzX2RhaVswXS5wcml2YXRlX2RhdGE7CiAJCXBvcF93YWl0ID0gd204NzUzX2RhaVswXS5wb3Bfd2FpdDsKKwkJbGlzdCA9IHdtODc1M19kYWlbMF0ubGlzdDsKIAkJd204NzUzX2RhaVswXSA9IHdtODc1M19hbGxfZGFpW21vZGUgPDwgMV07CiAJCXdtODc1M19kYWlbMF0ucGxheWJhY2suYWN0aXZlID0gcGxheWJhY2tfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzBdLmNhcHR1cmUuYWN0aXZlID0gY2FwdHVyZV9hY3RpdmU7CiAJCXdtODc1M19kYWlbMF0uYWN0aXZlID0gY29kZWNfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzBdLnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKIAkJd204NzUzX2RhaVswXS5wb3Bfd2FpdCA9IHBvcF93YWl0OworCQl3bTg3NTNfZGFpWzBdLmxpc3QgPSBsaXN0OwogCiAJCXBsYXliYWNrX2FjdGl2ZSA9IHdtODc1M19kYWlbMV0ucGxheWJhY2suYWN0aXZlOwogCQljYXB0dXJlX2FjdGl2ZSA9IHdtODc1M19kYWlbMV0uY2FwdHVyZS5hY3RpdmU7CiAJCWNvZGVjX2FjdGl2ZSA9IHdtODc1M19kYWlbMV0uYWN0aXZlOwogCQlwcml2YXRlX2RhdGEgPSB3bTg3NTNfZGFpWzFdLnByaXZhdGVfZGF0YTsKIAkJcG9wX3dhaXQgPSB3bTg3NTNfZGFpWzFdLnBvcF93YWl0OworCQlsaXN0ID0gd204NzUzX2RhaVsxXS5saXN0OwogCQl3bTg3NTNfZGFpWzFdID0gd204NzUzX2FsbF9kYWlbKG1vZGUgPDwgMSkgKyAxXTsKIAkJd204NzUzX2RhaVsxXS5wbGF5YmFjay5hY3RpdmUgPSBwbGF5YmFja19hY3RpdmU7CiAJCXdtODc1M19kYWlbMV0uY2FwdHVyZS5hY3RpdmUgPSBjYXB0dXJlX2FjdGl2ZTsKIAkJd204NzUzX2RhaVsxXS5hY3RpdmUgPSBjb2RlY19hY3RpdmU7CiAJCXdtODc1M19kYWlbMV0ucHJpdmF0ZV9kYXRhID0gcHJpdmF0ZV9kYXRhOwogCQl3bTg3NTNfZGFpWzFdLnBvcF93YWl0ID0gcG9wX3dhaXQ7CisJCXdtODc1M19kYWlbMV0ubGlzdCA9IGxpc3Q7CiAJfQogCXdtODc1M19kYWlbMF0uY29kZWMgPSBjb2RlYzsKIAl3bTg3NTNfZGFpWzFdLmNvZGVjID0gY29kZWM7CkBAIC0xNTA1LDcgKzE1MDUsNyBAQAogc3RhdGljIGludCB3bTg3NTNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiB3ZSBvbmx5IG5lZWQgdG8gc3VzcGVuZCBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCiAJaWYgKCFjb2RlYy0+Y2FyZCkKQEAgLTE1MTgsNyArMTUxOCw3IEBACiBzdGF0aWMgaW50IHdtODc1M19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtMTUzMSw2ICsxNTMxLDExIEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX3JlZyk7IGkrKykgewogCQlpZiAoaSArIDEgPT0gV004NzUzX1JFU0VUKQogCQkJY29udGludWU7CisKKwkJLyogTm8gcG9pbnQgaW4gd3JpdGluZyBoYXJkd2FyZSBkZWZhdWx0IHZhbHVlcyBiYWNrICovCisJCWlmIChjYWNoZVtpXSA9PSB3bTg3NTNfcmVnW2ldKQorCQkJY29udGludWU7CisKIAkJZGF0YVswXSA9ICgoaSArIDEpIDw8IDEpIHwgKChjYWNoZVtpXSA+PiA4KSAmIDB4MDAwMSk7CiAJCWRhdGFbMV0gPSBjYWNoZVtpXSAmIDB4MDBmZjsKIAkJY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwpAQCAtMTU0OSwzMiArMTU1NCwyNCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogaW5pdGlhbGlzZSB0aGUgV004NzUzIGRyaXZlcgotICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKLSAqLwotc3RhdGljIGludCB3bTg3NTNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NzUzX2NvZGVjOworCitzdGF0aWMgaW50IHdtODc1M19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJlZywgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKIAotCWNvZGVjLT5uYW1lID0gIldNODc1MyI7Ci0JY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204NzUzX3dyaXRlOwotCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODc1M19zZXRfYmlhc19sZXZlbDsKLQljb2RlYy0+ZGFpID0gd204NzUzX2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IDI7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg3NTNfcmVnKTsKLQljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTg3NTNfcmVnLCBzaXplb2Yod204NzUzX3JlZyksIEdGUF9LRVJORUwpOworCWlmICghd204NzUzX2NvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIldNODc1MyBjb2RlYyBub3QgeWV0IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204NzUzX2NvZGVjOworCWNvZGVjID0gd204NzUzX2NvZGVjOwogCiAJd204NzUzX3NldF9kYWlfbW9kZShjb2RlYywgMCk7CiAKLQl3bTg3NTNfcmVzZXQoY29kZWMpOwotCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE1ODIsMzUgKzE1NzksOCBAQAogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0JLyogY2hhcmdlIG91dHB1dCBjYXBzICovCi0Jd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfU1RBTkRCWTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmssCi0JCW1zZWNzX3RvX2ppZmZpZXMoY2Fwc19jaGFyZ2UpKTsKLQotCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MREFDKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MREFDLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JEQUMpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JEQUMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTEFEQyk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTEFEQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SQURDKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SQURDLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xPVVQxVik7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTE9VVDFWLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JPVVQxVik7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUk9VVDFWLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xPVVQyVik7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTE9VVDJWLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JPVVQyVik7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUk9VVDJWLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xJTlZPTCk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTElOVk9MLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JJTlZPTCk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUklOVk9MLCByZWcgfCAweDAxMDApOwotCi0Jd204NzUzX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1M19zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NzUzX3NuZF9jb250cm9scykpOwogCXdtODc1M19hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTYxOCwyMTUgKzE1ODgsMTMgQEAKIAkJZ290byBjYXJkX2VycjsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiBjYXJkX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKIHBjbV9lcnI6Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogSWYgdGhlIGkyYyBsYXllciB3ZXJlbid0IHNvIGJyb2tlbiwgd2UgY291bGQgcGFzcyB0aGlzIGtpbmQgb2YgZGF0YQotICAgYXJvdW5kICovCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp3bTg3NTNfc29jZGV2OwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCi0vKgotICogV004NzUzIDIgd2lyZSBhZGRyZXNzIGlzIGRldGVybWluZWQgYnkgR1BJTzUKLSAqIHN0YXRlIGR1cmluZyBwb3dlcnVwLgotICogICAgbG93ICA9IDB4MWEKLSAqICAgIGhpZ2ggPSAweDFiCi0gKi8KLQotc3RhdGljIGludCB3bTg3NTNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCi0JCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzUzX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7Ci0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKLQotCXJldCA9IHdtODc1M19pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzUzXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd204NzUzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODc1M19pMmNfaWRbXSA9IHsKLQl7ICJ3bTg3NTMiLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODc1M19pMmNfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NzUzX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiV004NzUzIEkyQyBDb2RlYyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlID0gICAgd204NzUzX2kyY19wcm9iZSwKLQkucmVtb3ZlID0gICB3bTg3NTNfaTJjX3JlbW92ZSwKLQkuaWRfdGFibGUgPSB3bTg3NTNfaTJjX2lkLAotfTsKLQotc3RhdGljIGludCB3bTg3NTNfYWRkX2kyY19kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgY29uc3Qgc3RydWN0IHdtODc1M19zZXR1cF9kYXRhICpzZXR1cCkKLXsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCWluZm8uYWRkciA9IHNldHVwLT5pMmNfYWRkcmVzczsKLQlzdHJsY3B5KGluZm8udHlwZSwgIndtODc1MyIsIEkyQ19OQU1FX1NJWkUpOwotCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcihzZXR1cC0+aTJjX2J1cyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpMmMgYWRhcHRlciAlZFxuIiwKLQkJCXNldHVwLT5pMmNfYnVzKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKCFjbGllbnQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3NTNfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTNfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJldDsKLQotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7Ci0KLQlyZXQgPSB3bTg3NTNfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODc1M1xuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3NTNfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzUzX3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAid204NzUzIiwKLQkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCQk9IHdtODc1M19zcGlfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3NTNfc3BpX3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IHdtODc1M19zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTggbXNnWzJdOwotCi0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm4gMDsKLQotCW1zZ1swXSA9IGRhdGFbMF07Ci0JbXNnWzFdID0gZGF0YVsxXTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7Ci0KLQl0LnR4X2J1ZiA9ICZtc2dbMF07Ci0JdC5sZW4gPSBsZW47Ci0KLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCXNwaV9zeW5jKHNwaSwgJm0pOwotCi0JcmV0dXJuIGxlbjsKLX0KLSNlbmRpZgotCi0KLXN0YXRpYyBpbnQgd204NzUzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgKnNldHVwOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MzsKLQlpbnQgcmV0ID0gMDsKLQotCXByX2luZm8oIldNODc1MyBBdWRpbyBDb2RlYyAlcyIsIFdNODc1M19WRVJTSU9OKTsKLQotCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwotCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3bTg3NTMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzUzX3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAod204NzUzID09IE5VTEwpIHsKLQkJa2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzUzOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKLQltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwotCXdtODc1M19zb2NkZXYgPSBzb2NkZXY7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmNvZGVjLT5kZWxheWVkX3dvcmssIHdtODc1M193b3JrKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpZiAoc2V0dXAtPmkyY19hZGRyZXNzKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKLQkJcmV0ID0gd204NzUzX2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotCWlmIChzZXR1cC0+c3BpKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODc1M19zcGlfd3JpdGU7Ci0JCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODc1M19zcGlfZHJpdmVyKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgc3BpIGRyaXZlciIpOwotCX0KLSNlbmRpZgotCi0JaWYgKHJldCAhPSAwKSB7Ci0JCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCQlrZnJlZShjb2RlYyk7Ci0JfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4NTMsMjIgKzE2MjEsOSBAQAogc3RhdGljIGludCB3bTg3NTNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Ci0JcnVuX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yayk7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY29kZWMtPmNvbnRyb2xfZGF0YSk7Ci0JaTJjX2RlbF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7Ci0jZW5kaWYKLQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQlrZnJlZShjb2RlYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODEsMTUgKzE2MzYsMjQwIEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg3NTMpOwogCitzdGF0aWMgaW50IHdtODc1M19yZWdpc3RlcihzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MykKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg3NTMtPmNvZGVjOworCXUxNiByZWc7CisKKwlpZiAod204NzUzX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIk11bHRpcGxlIFdNODc1MyBkZXZpY2VzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPm5hbWUgPSAiV004NzUzIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODc1M19yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSB3bTg3NTNfd3JpdGU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfU1RBTkRCWTsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg3NTNfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9IHdtODc1M19kYWk7CisJY29kZWMtPm51bV9kYWkgPSAyOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NzUzLT5yZWdfY2FjaGUpOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204NzUzLT5yZWdfY2FjaGU7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODc1MzsKKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg3NTNfcmVnLCBzaXplb2YoY29kZWMtPnJlZ19jYWNoZSkpOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb2RlYy0+ZGVsYXllZF93b3JrLCB3bTg3NTNfd29yayk7CisKKwlyZXQgPSB3bTg3NTNfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCS8qIGNoYXJnZSBvdXRwdXQgY2FwcyAqLworCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1BSRVBBUkUpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yaywKKwkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoY2Fwc19jaGFyZ2UpKTsKKworCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MREFDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MREFDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JEQUMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JEQUMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTEFEQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTEFEQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SQURDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SQURDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xPVVQxVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTE9VVDFWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JPVVQxVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUk9VVDFWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xPVVQyVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTE9VVDJWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JPVVQyVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUk9VVDJWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xJTlZPTCk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTElOVk9MLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JJTlZPTCk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUklOVk9MLCByZWcgfCAweDAxMDApOworCisJd204NzUzX2NvZGVjID0gY29kZWM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfZGFpKTsgaSsrKQorCQl3bTg3NTNfZGFpW2ldLmRldiA9IGNvZGVjLT5kZXY7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKCZ3bTg3NTNfZGFpWzBdLCBBUlJBWV9TSVpFKHdtODc1M19kYWkpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2NvZGVjOgorCXJ1bl9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmspOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUod204NzUzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg3NTNfdW5yZWdpc3RlcihzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MykKK3sKKwl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoJndtODc1My0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJ1bl9kZWxheWVkX3dvcmsoJndtODc1My0+Y29kZWMuZGVsYXllZF93b3JrKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmd204NzUzX2RhaVswXSwgQVJSQVlfU0laRSh3bTg3NTNfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg3NTMtPmNvZGVjKTsKKwlrZnJlZSh3bTg3NTMpOworCXdtODc1M19jb2RlYyA9IE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisKK3N0YXRpYyBpbnQgd204NzUzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTM7CisKKwl3bTg3NTMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzUzX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NzUzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisgICAgICAgIGNvZGVjID0gJndtODc1My0+Y29kZWM7CisgICAgICAgIGNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKyAgICAgICAgY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKyAgICAgICAgaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204NzUzKTsKKworICAgICAgICBjb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODc1M19yZWdpc3Rlcih3bTg3NTMpOworfQorCitzdGF0aWMgaW50IHdtODc1M19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisgICAgICAgIHN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisgICAgICAgIHdtODc1M191bnJlZ2lzdGVyKHdtODc1Myk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204NzUzX2kyY19pZFtdID0geworCXsgIndtODc1MyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204NzUzX2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3NTNfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTg3NTMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODc1M19pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgd204NzUzX2kyY19yZW1vdmUsCisJLmlkX3RhYmxlID0gd204NzUzX2kyY19pZCwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCitzdGF0aWMgaW50IHdtODc1M19zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTggbXNnWzJdOworCisJaWYgKGxlbiA8PSAwKQorCQlyZXR1cm4gMDsKKworCW1zZ1swXSA9IGRhdGFbMF07CisJbXNnWzFdID0gZGF0YVsxXTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7CisKKwl0LnR4X2J1ZiA9ICZtc2dbMF07CisJdC5sZW4gPSBsZW47CisKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCXNwaV9zeW5jKHNwaSwgJm0pOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgd204NzUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MzsKKworCXdtODc1MyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NTNfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg3NTMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg3NTMtPmNvZGVjOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzUzX3NwaV93cml0ZTsKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OworCisJc3BpLT5kZXYuZHJpdmVyX2RhdGEgPSB3bTg3NTM7CisKKwlyZXR1cm4gd204NzUzX3JlZ2lzdGVyKHdtODc1Myk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdtODc1M19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMgPSBzcGktPmRldi5kcml2ZXJfZGF0YTsKKwl3bTg3NTNfdW5yZWdpc3Rlcih3bTg3NTMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzUzX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAid204NzUzIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODc1M19zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3NTNfc3BpX3JlbW92ZSksCit9OworI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHdtODc1M19tb2Rpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyh3bTg3NTNfZGFpLCBBUlJBWV9TSVpFKHdtODc1M19kYWkpKTsKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzUzIEkyQyBkcml2ZXI6ICVkXG4iLCByZXQpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBXTTg3NTMgU1BJIGRyaXZlcjogJWRcbiIsIHJldCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHdtODc1M19tb2Rpbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHdtODc1M19leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMod204NzUzX2RhaSwgQVJSQVlfU0laRSh3bTg3NTNfZGFpKSk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOworI2VuZGlmCiB9CiBtb2R1bGVfZXhpdCh3bTg3NTNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCmluZGV4IGY1NTcwNGMuLjU3YjJiYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaApAQCAtNzcsMTIgKzc3LDYgQEAKICNkZWZpbmUgV004NzUzX0JJQVNDVEwJCTB4M2QKICNkZWZpbmUgV004NzUzX0FEQ1RMMgkJMHgzZgogCi1zdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgewotCWludCBzcGk7Ci0JaW50IGkyY19idXM7Ci0JdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7Ci19OwotCiAjZGVmaW5lIFdNODc1M19QTEwxCQkJMAogI2RlZmluZSBXTTg3NTNfUExMMgkJCTEKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKaW5kZXggNjc2N2RlMS4uNDZjNWVhMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCkBAIC01MTcsMjIgKzUxNyw2IEBACiAKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg5MDBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTAwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204OTAwX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkwMF9kYXBtX2xvdXRwdXQyX2NvbnRyb2wgPQogU09DX0RBUE1fU0lOR0xFKCJMSU5FT1VUMkwgU3dpdGNoIiwgV004OTAwX1JFR19QT1dFUjMsIDYsIDEsIDApOwogCkBAIC03MzYsNyArNzIwLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IHJlZzsKIAogCXJlZyA9IHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0FVRElPMSkgJiB+MHg2MDsKQEAgLTExMDQsNiArMTA4OCwxNCBAQAogCShTTkRSVl9QQ01fRk9STUFUX1MxNl9MRSB8IFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRSB8IFwKIAkgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODkwMF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg5MDBfaHdfcGFyYW1zLAorCS5zZXRfY2xrZGl2CT0gd204OTAwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204OTAwX3NldF9kYWlfcGxsLAorCS5zZXRfZm10CT0gd204OTAwX3NldF9kYWlfZm10LAorCS5kaWdpdGFsX211dGUJPSB3bTg5MDBfZGlnaXRhbF9tdXRlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODkwMF9kYWkgPSB7CiAJLm5hbWUgPSAiV004OTAwIEhpRmkiLAogCS5wbGF5YmFjayA9IHsKQEAgLTExMjAsMTMgKzExMTIsNyBAQAogCQkucmF0ZXMgPSBXTTg5MDBfUkFURVMsCiAJCS5mb3JtYXRzID0gV004OTAwX1BDTV9GT1JNQVRTLAogCSB9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg5MDBfaHdfcGFyYW1zLAotCQkgLnNldF9jbGtkaXYgPSB3bTg5MDBfc2V0X2RhaV9jbGtkaXYsCi0JCSAuc2V0X3BsbCA9IHdtODkwMF9zZXRfZGFpX3BsbCwKLQkJIC5zZXRfZm10ID0gd204OTAwX3NldF9kYWlfZm10LAotCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODkwMF9kaWdpdGFsX211dGUsCi0JIH0sCisJLm9wcyA9ICZ3bTg5MDBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg5MDBfZGFpKTsKIApAQCAtMTIyNiw3ICsxMjEyLDcgQEAKIHN0YXRpYyBpbnQgd204OTAwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5MDBfcHJpdiAqd204OTAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgZmxsX291dCA9IHdtODkwMC0+ZmxsX291dDsKIAlpbnQgZmxsX2luICA9IHdtODkwMC0+ZmxsX2luOwpAQCAtMTI1MCw3ICsxMjM2LDcgQEAKIHN0YXRpYyBpbnQgd204OTAwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5MDBfcHJpdiAqd204OTAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgKmNhY2hlOwogCWludCBpLCByZXQ7CkBAIC0xMjg4LDggKzEyNzQsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODkwMF9jb2RlYzsKIAotc3RhdGljIGludCB3bTg5MDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCi0JCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgd204OTAwX3ByaXYgKndtODkwMDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CkBAIC0xMzg4LDcgKzEzNzQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgd204OTAwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODkwMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204OTAwX2RhaSk7CiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKHdtODkwMF9jb2RlYyk7CkBAIC0xNDE0LDcgKzE0MDAsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9IHdtODkwMF9pMmNfcHJvYmUsCi0JLnJlbW92ZSA9IHdtODkwMF9pMmNfcmVtb3ZlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTg5MDBfaTJjX3JlbW92ZSksCiAJLmlkX3RhYmxlID0gd204OTAwX2kyY19pZCwKIH07CiAKQEAgLTE0MzAsNyArMTQxNiw3IEBACiAJfQogCiAJY29kZWMgPSB3bTg5MDBfY29kZWM7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAogCS8qIFJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwpAQCAtMTQzOSw3ICsxNDI1LDggQEAKIAkJZ290byBwY21fZXJyOwogCX0KIAotCXdtODkwMF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204OTAwX3NuZF9jb250cm9scykpOwogCXdtODkwMF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKaW5kZXggYmRlNzQ1NC4uOGNmNTcxZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCkBAIC03NDQsMjEgKzc0NCw2IEBACiAJCSAwLCA2MywgMCwgb3V0X3RsdiksCiB9OwogCi1zdGF0aWMgaW50IHdtODkwM19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5MDNfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg5MDNfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGlucHV0X21vZGVfbXV4ID0KIAlTT0NfREFQTV9FTlVNKCJMZWZ0IElucHV0IE1vZGUgTXV4IiwgbGlucHV0X21vZGVfZW51bSk7CiAKQEAgLTEyNzYsNyArMTI2MSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICptYXN0ZXJfcnVudGltZTsKQEAgLTEzMTgsNyArMTMwMyw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQpAQCAtMTMzOCw3ICsxMzIzLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCWludCBmcyA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CkBAIC0xNTEyLDYgKzE0OTcsMTUgQEAKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODkwM19kYWlfb3BzID0geworCS5zdGFydHVwCT0gd204OTAzX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gd204OTAzX3NodXRkb3duLAorCS5od19wYXJhbXMJPSB3bTg5MDNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg5MDNfZGlnaXRhbF9tdXRlLAorCS5zZXRfZm10CT0gd204OTAzX3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrCT0gd204OTAzX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODkwM19kYWkgPSB7CiAJLm5hbWUgPSAiV004OTAzIiwKIAkucGxheWJhY2sgPSB7CkBAIC0xNTI4LDIxICsxNTIyLDE0IEBACiAJCSAucmF0ZXMgPSBXTTg5MDNfQ0FQVFVSRV9SQVRFUywKIAkJIC5mb3JtYXRzID0gV004OTAzX0ZPUk1BVFMsCiAJIH0sCi0JLm9wcyA9IHsKLQkJIC5zdGFydHVwID0gd204OTAzX3N0YXJ0dXAsCi0JCSAuc2h1dGRvd24gPSB3bTg5MDNfc2h1dGRvd24sCi0JCSAuaHdfcGFyYW1zID0gd204OTAzX2h3X3BhcmFtcywKLQkJIC5kaWdpdGFsX211dGUgPSB3bTg5MDNfZGlnaXRhbF9tdXRlLAotCQkgLnNldF9mbXQgPSB3bTg5MDNfc2V0X2RhaV9mbXQsCi0JCSAuc2V0X3N5c2NsayA9IHdtODkwM19zZXRfZGFpX3N5c2NsawotCX0KKwkub3BzID0gJndtODkwM19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODkwM19kYWkpOwogCiBzdGF0aWMgaW50IHdtODkwM19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODkwM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAKQEAgLTE1NTIsNyArMTUzOSw3IEBACiBzdGF0aWMgaW50IHdtODkwM19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlpbnQgaTsKIAl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xNTc3LDggKzE1NjQsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODkwM19jb2RlYzsKIAotc3RhdGljIGludCB3bTg5MDNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCi0JCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTAzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgd204OTAzX3ByaXYgKndtODkwMzsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CkBAIC0xNjg0LDcgKzE2NzEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgd204OTAzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODkwM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTE3MTQsNyArMTcwMSw3IEBACiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlICAgID0gd204OTAzX2kyY19wcm9iZSwKLQkucmVtb3ZlICAgPSB3bTg5MDNfaTJjX3JlbW92ZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcCh3bTg5MDNfaTJjX3JlbW92ZSksCiAJLmlkX3RhYmxlID0gd204OTAzX2kyY19pZCwKIH07CiAKQEAgLTE3MjgsNyArMTcxNSw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCXNvY2Rldi0+Y29kZWMgPSB3bTg5MDNfY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODkwM19jb2RlYzsKIAogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwpAQCAtMTczNyw4ICsxNzI0LDkgQEAKIAkJZ290byBlcnI7CiAJfQogCi0Jd204OTAzX2FkZF9jb250cm9scyhzb2NkZXYtPmNvZGVjKTsKLQl3bTg5MDNfYWRkX3dpZGdldHMoc29jZGV2LT5jb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoc29jZGV2LT5jYXJkLT5jb2RlYywgd204OTAzX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODkwM19zbmRfY29udHJvbHMpKTsKKwl3bTg5MDNfYWRkX3dpZGdldHMoc29jZGV2LT5jYXJkLT5jb2RlYyk7CiAKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNzU5LDcgKzE3NDcsNyBAQAogc3RhdGljIGludCB3bTg5MDNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204OTAzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCmluZGV4IDg4ZWFkN2YuLjAzMmRjYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYwpAQCAtMTk1LDIxICsxOTUsNiBAQAogCVNPQ19ET1VCTEVfUigiTWljIEJvb3N0IiwgV004OTcxX0xBRENJTiwgV004OTcxX1JBRENJTiwgNCwgMywgMCksCiB9OwogCi0vKiBhZGQgbm9uLURBUE0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204OTcxX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk3MV9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTg5NzFfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBEQVBNIENvbnRyb2xzCiAgKi8KQEAgLTU0Niw3ICs1MzEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTcxX3ByaXYgKndtODk3MSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2IGlmYWNlID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfSUZBQ0UpICYgMHgxZjM7CiAJdTE2IHNyYXRlID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfU1JBVEUpICYgMHgxYzA7CkBAIC02MTksNiArNjA0LDEzIEBACiAjZGVmaW5lIFdNODk3MV9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5NzFfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTcxX3BjbV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODk3MV9tdXRlLAorCS5zZXRfZm10CT0gd204OTcxX3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrCT0gd204OTcxX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODk3MV9kYWkgPSB7CiAJLm5hbWUgPSAiV004OTcxIiwKIAkucGxheWJhY2sgPSB7CkBAIC02MzMsMTIgKzYyNSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg5NzFfUkFURVMsCiAJCS5mb3JtYXRzID0gV004OTcxX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204OTcxX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg5NzFfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg5NzFfc2V0X2RhaV9mbXQsCi0JCS5zZXRfc3lzY2xrID0gd204OTcxX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg5NzFfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg5NzFfZGFpKTsKIApAQCAtNjUyLDcgKzYzOSw3IEBACiBzdGF0aWMgaW50IHdtODk3MV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODk3MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC02NjEsNyArNjQ4LDcgQEAKIHN0YXRpYyBpbnQgd204OTcxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC02OTIsNyArNjc5LDcgQEAKIAogc3RhdGljIGludCB3bTg5NzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJlZywgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIldNODk3MSI7CkBAIC03NDUsNyArNzMyLDggQEAKIAlyZWcgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9SSU5WT0wpOwogCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKIAotCXdtODk3MV9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NzFfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204OTcxX3NuZF9jb250cm9scykpOwogCXdtODk3MV9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNzcyLDcgKzc2MCw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204OTcxX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTg3Myw3ICs4NjEsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5NzE7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtOTA4LDcgKzg5Niw3IEBACiBzdGF0aWMgaW50IHdtODk3MV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg5NzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKaW5kZXggYTU3MzFmYS4uYzUxOGMzZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCUJVR19PTihyZWcgPiAoQVJSQVlfU0laRSh3bTg5OTBfcmVnKSkgLSAxKTsKKwlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204OTkwX3JlZykpOwogCXJldHVybiBjYWNoZVtyZWddOwogfQogCkBAIC0xMjgsNyArMTI4LDcgQEAKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAogCS8qIFJlc2V0IHJlZ2lzdGVyIGFuZCByZXNlcnZlZCByZWdpc3RlcnMgYXJlIHVuY2FjaGVkICovCi0JaWYgKHJlZyA9PSAwIHx8IHJlZyA+IEFSUkFZX1NJWkUod204OTkwX3JlZykgLSAxKQorCWlmIChyZWcgPT0gMCB8fCByZWcgPj0gQVJSQVlfU0laRSh3bTg5OTBfcmVnKSkKIAkJcmV0dXJuOwogCiAJY2FjaGVbcmVnXSA9IHZhbHVlOwpAQCAtNDE4LDIxICs0MTgsNiBAQAogCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204OTkwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTg5OTBfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywKLQkJCQkJTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogX0RBUE1fIENvbnRyb2xzCiAgKi8KQEAgLTExNzgsNyArMTE2Myw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBhdWRpbzEgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk5MF9BVURJT19JTlRFUkZBQ0VfMSk7CiAKIAlhdWRpbzEgJj0gfldNODk5MF9BSUZfV0xfTUFTSzsKQEAgLTEzNDcsNiArMTMzMiwxNSBAQAogICogMS4gQURDL0RBQyBvbiBQcmltYXJ5IEludGVyZmFjZQogICogMi4gQURDIG9uIFByaW1hcnkgSW50ZXJmYWNlL0RBQyBvbiBzZWNvbmRhcnkKICAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTkwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODk5MF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODk5MF9tdXRlLAorCS5zZXRfZm10CT0gd204OTkwX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204OTkwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204OTkwX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204OTkwX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODk5MF9kYWkgPSB7CiAvKiBBREMvREFDIG9uIHByaW1hcnkgKi8KIAkubmFtZSA9ICJXTTg5OTAgQURDL0RBQyBQcmltYXJ5IiwKQEAgLTEzNjMsMjEgKzEzNTcsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODk5MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg5OTBfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg5OTBfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204OTkwX211dGUsCi0JCS5zZXRfZm10ID0gd204OTkwX3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODk5MF9zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg5OTBfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204OTkwX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg5OTBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg5OTBfZGFpKTsKIAogc3RhdGljIGludCB3bTg5OTBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiB3ZSBvbmx5IG5lZWQgdG8gc3VzcGVuZCBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCiAJaWYgKCFjb2RlYy0+Y2FyZCkKQEAgLTEzOTAsNyArMTM3Nyw3IEBACiBzdGF0aWMgaW50IHdtODk5MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtMTQxOCw3ICsxNDA1LDcgQEAKICAqLwogc3RhdGljIGludCB3bTg5OTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IHJlZzsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTQ2MSw3ICsxNDQ4LDggQEAKIAl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9MRUZUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOwogCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1JJR0hUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOwogCi0Jd204OTkwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk5MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5OTBfc25kX2NvbnRyb2xzKSk7CiAJd204OTkwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNDk1LDcgKzE0ODMsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODk5MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC0xNTk0LDcgKzE1ODIsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5OTA7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtMTYyMCw3ICsxNjA4LDcgQEAKIHN0YXRpYyBpbnQgd204OTkwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODk5MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY1ODE3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYwpAQCAtMCwwICsxLDQxNSBAQAorLyoKKyAqIHdtOTcwNS5jICAtLSAgQUxTQSBTb2MgV005NzA1IGNvZGVjIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IFZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2Ugb25seS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSAid205NzA1LmgiCisKKy8qCisgKiBXTTk3MDUgcmVnaXN0ZXIgY2FjaGUKKyAqLworc3RhdGljIGNvbnN0IHUxNiB3bTk3MDVfcmVnW10gPSB7CisJMHg2MTUwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAvKiAweDAgICovCisJMHgwMDAwLCAweDgwMDAsIDB4ODAwOCwgMHg4MDA4LCAvKiAweDggICovCisJMHg4ODA4LCAweDg4MDgsIDB4ODgwOCwgMHg4ODA4LCAvKiAweDEwICovCisJMHg4ODA4LCAweDAwMDAsIDB4ODAwMCwgMHgwMDAwLCAvKiAweDE4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDBmLCAvKiAweDIwICovCisJMHgwNjA1LCAweDAwMDAsIDB4YmI4MCwgMHgwMDAwLCAvKiAweDI4ICovCisJMHgwMDAwLCAweGJiODAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDMwICovCisJMHgwMDAwLCAweDIwMDAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDM4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDQ4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDUwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDU4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDYwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAvKiAweDY4ICovCisJMHgwMDAwLCAweDA4MDgsIDB4MDAwMCwgMHgwMDA2LCAvKiAweDcwICovCisJMHgwMDAwLCAweDAwMDAsIDB4NTc0ZCwgMHg0YzA1LCAvKiAweDc4ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzA1X3NuZF9hYzk3X2NvbnRyb2xzW10gPSB7CisJU09DX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSLCA4LCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSLCAxNSwgMSwgMSksCisJU09DX0RPVUJMRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfSEVBRFBIT05FLCA4LCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfSEVBRFBIT05FLCAxNSwgMSwgMSksCisJU09DX0RPVUJMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUENNLCA4LCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfUENNLCAxNSwgMSwgMSksCisJU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01BU1RFUl9NT05PLCAxNSwgMSwgMSksCisJU09DX1NJTkdMRSgiUENCZWVwIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUENfQkVFUCwgMSwgMTUsIDEpLAorCVNPQ19TSU5HTEUoIlBob25lIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUEhPTkUsIDAsIDMxLCAxKSwKKwlTT0NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTElORSwgOCwgMCwgMzEsIDEpLAorCVNPQ19ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfQ0QsIDgsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NSUMsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJNaWMgMjBkQiBCb29zdCBTd2l0Y2giLCBBQzk3X01JQywgNiwgMSwgMCksCisJU09DX0RPVUJMRSgiQ2FwdHVyZSBWb2x1bWUiLCBBQzk3X1JFQ19HQUlOLCA4LCAwLCAxNSwgMCksCisJU09DX1NJTkdMRSgiQ2FwdHVyZSBTd2l0Y2giLCBBQzk3X1JFQ19HQUlOLCAxNSwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd205NzA1X21pY1tdID0geyJNaWMgMSIsICJNaWMgMiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtOTcwNV9yZWNfc2VsW10gPSB7Ik1pYyIsICJDRCIsICJOQyIsICJOQyIsCisJIkxpbmUiLCAiU3RlcmVvIE1peCIsICJNb25vIE1peCIsICJQaG9uZSJ9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtOTcwNV9lbnVtX21pYyA9CisJU09DX0VOVU1fU0lOR0xFKEFDOTdfR0VORVJBTF9QVVJQT1NFLCA4LCAyLCB3bTk3MDVfbWljKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd205NzA1X2VudW1fcmVjX2wgPQorCVNPQ19FTlVNX1NJTkdMRShBQzk3X1JFQ19TRUwsIDgsIDgsIHdtOTcwNV9yZWNfc2VsKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd205NzA1X2VudW1fcmVjX3IgPQorCVNPQ19FTlVNX1NJTkdMRShBQzk3X1JFQ19TRUwsIDAsIDgsIHdtOTcwNV9yZWNfc2VsKTsKKworLyogSGVhZHBob25lIE1peGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzA1X2hwX21peGVyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJQQ0JlZXAgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19QQ19CRUVQLCAxNSwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X0NELCAxNSwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NSUMsIDE1LCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIlBob25lIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfUEhPTkUsIDE1LCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19MSU5FLCAxNSwgMSwgMSksCit9OworCisvKiBNaWMgc291cmNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzA1X21pY19zcmNfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd205NzA1X2VudW1fbWljKTsKKworLyogQ2FwdHVyZSBzb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfY2FwdHVyZV9zZWxlY3RsX2NvbnRyb2xzID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtOTcwNV9lbnVtX3JlY19sKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfY2FwdHVyZV9zZWxlY3RyX2NvbnRyb2xzID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtOTcwNV9lbnVtX3JlY19yKTsKKworLyogREFQTSB3aWRnZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd205NzA1X2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9NVVgoIk1pYyBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ3bTk3MDVfbWljX3NyY19jb250cm9scyksCisJU05EX1NPQ19EQVBNX01VWCgiTGVmdCBDYXB0dXJlIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJndtOTcwNV9jYXB0dXJlX3NlbGVjdGxfY29udHJvbHMpLAorCVNORF9TT0NfREFQTV9NVVgoIlJpZ2h0IENhcHR1cmUgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmd205NzA1X2NhcHR1cmVfc2VsZWN0cl9jb250cm9scyksCisJU05EX1NPQ19EQVBNX0RBQygiTGVmdCBEQUMiLCAiTGVmdCBIaUZpIFBsYXliYWNrIiwKKwkJU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJSaWdodCBEQUMiLCAiUmlnaHQgSGlGaSBQbGF5YmFjayIsCisJCVNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTCgiSFAgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ3bTk3MDVfaHBfbWl4ZXJfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUod205NzA1X2hwX21peGVyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJNb25vIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IEhpRmkgQ2FwdHVyZSIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiUmlnaHQgQURDIiwgIlJpZ2h0IEhpRmkgQ2FwdHVyZSIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSGVhZHBob25lIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiU3BlYWtlciBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkxpbmUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJMaW5lIG91dCBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIk1vbm8gUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJQaG9uZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIk1pYyBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlBDQkVFUCBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkNEIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQURDIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVRMIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVRSIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJNT05PT1VUIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJQSE9ORSIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTElORUlOTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTElORUlOUiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQ0RJTkwiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkNESU5SIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJQQ0JFRVAiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIk1JQzEiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIk1JQzIiKSwKK307CisKKy8qIEF1ZGlvIG1hcAorICogV005NzA1IGhhcyBubyBzd2l0Y2hlcyB0byBkaXNhYmxlIHRoZSByb3V0ZSBmcm9tIHRoZSBpbnB1dHMgdG8gdGhlIEhQIG1peGVyCisgKiBzbyBpbiBvcmRlciB0byBwcmV2ZW50IGFjdGl2ZSBpbnB1dHMgZnJvbSBmb3JjaW5nIHRoZSBhdWRpbyBvdXRwdXRzIHRvIGJlCisgKiBjb25zdGFudGx5IGVuYWJsZWQsIHdlIHVzZSB0aGUgbXV0ZXMgb24gdGhvc2UgaW5wdXRzIHRvIHNpbXVsYXRlIHN1Y2gKKyAqIGNvbnRyb2xzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBIUCBtaXhlciAqLworCXsiSFAgTWl4ZXIiLCAiUENCZWVwIFBsYXliYWNrIFN3aXRjaCIsICJQQ0JFRVAgUEdBIn0sCisJeyJIUCBNaXhlciIsICJDRCBQbGF5YmFjayBTd2l0Y2giLCAiQ0QgUEdBIn0sCisJeyJIUCBNaXhlciIsICJNaWMgUGxheWJhY2sgU3dpdGNoIiwgIk1pYyBQR0EifSwKKwl7IkhQIE1peGVyIiwgIlBob25lIFBsYXliYWNrIFN3aXRjaCIsICJQaG9uZSBQR0EifSwKKwl7IkhQIE1peGVyIiwgIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgIkxpbmUgUEdBIn0sCisJeyJIUCBNaXhlciIsIE5VTEwsICJMZWZ0IERBQyJ9LAorCXsiSFAgTWl4ZXIiLCBOVUxMLCAiUmlnaHQgREFDIn0sCisKKwkvKiBtb25vIG1peGVyICovCisJeyJNb25vIE1peGVyIiwgTlVMTCwgIkhQIE1peGVyIn0sCisKKwkvKiBvdXRwdXRzICovCisJeyJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkhQIE1peGVyIn0sCisJeyJIUE9VVEwiLCBOVUxMLCAiSGVhZHBob25lIFBHQSJ9LAorCXsiSFBPVVRSIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EifSwKKwl7IkxpbmUgb3V0IFBHQSIsIE5VTEwsICJIUCBNaXhlciJ9LAorCXsiTE9VVCIsIE5VTEwsICJMaW5lIG91dCBQR0EifSwKKwl7IlJPVVQiLCBOVUxMLCAiTGluZSBvdXQgUEdBIn0sCisJeyJNb25vIFBHQSIsIE5VTEwsICJNb25vIE1peGVyIn0sCisJeyJNT05PT1VUIiwgTlVMTCwgIk1vbm8gUEdBIn0sCisKKwkvKiBpbnB1dHMgKi8KKwl7IkNEIFBHQSIsIE5VTEwsICJDRElOTCJ9LAorCXsiQ0QgUEdBIiwgTlVMTCwgIkNESU5SIn0sCisJeyJMaW5lIFBHQSIsIE5VTEwsICJMSU5FSU5MIn0sCisJeyJMaW5lIFBHQSIsIE5VTEwsICJMSU5FSU5SIn0sCisJeyJQaG9uZSBQR0EiLCBOVUxMLCAiUEhPTkUifSwKKwl7Ik1pYyBTb3VyY2UiLCAiTWljIDEiLCAiTUlDMSJ9LAorCXsiTWljIFNvdXJjZSIsICJNaWMgMiIsICJNSUMyIn0sCisJeyJNaWMgUEdBIiwgTlVMTCwgIk1pYyBTb3VyY2UifSwKKwl7IlBDQkVFUCBQR0EiLCBOVUxMLCAiUENCRUVQIn0sCisKKwkvKiBMZWZ0IGNhcHR1cmUgc2VsZWN0b3IgKi8KKwl7IkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCAiTWljIiwgIk1pYyBTb3VyY2UifSwKKwl7IkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCAiQ0QiLCAiQ0RJTkwifSwKKwl7IkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCAiTGluZSIsICJMSU5FSU5MIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIlN0ZXJlbyBNaXgiLCAiSFAgTWl4ZXIifSwKKwl7IkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCAiTW9ubyBNaXgiLCAiSFAgTWl4ZXIifSwKKwl7IkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCAiUGhvbmUiLCAiUEhPTkUifSwKKworCS8qIFJpZ2h0IGNhcHR1cmUgc291cmNlICovCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJNaWMiLCAiTWljIFNvdXJjZSJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiQ0QiLCAiQ0RJTlIifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIkxpbmUiLCAiTElORUlOUiJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiU3RlcmVvIE1peCIsICJIUCBNaXhlciJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiTW9ubyBNaXgiLCAiSFAgTWl4ZXIifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIlBob25lIiwgIlBIT05FIn0sCisKKwl7IkFEQyBQR0EiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIFNvdXJjZSJ9LAorCXsiQURDIFBHQSIsIE5VTEwsICJSaWdodCBDYXB0dXJlIFNvdXJjZSJ9LAorCisJLyogQURDJ3MgKi8KKwl7IkxlZnQgQURDIiwgIE5VTEwsICJBREMgUEdBIn0sCisJeyJSaWdodCBBREMiLCBOVUxMLCAiQURDIFBHQSJ9LAorfTsKKworc3RhdGljIGludCB3bTk3MDVfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtOTcwNV9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUod205NzA1X2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCisvKiBXZSB1c2UgYSByZWdpc3RlciBjYWNoZSB0byBlbmhhbmNlIHJlYWQgcGVyZm9ybWFuY2UuICovCitzdGF0aWMgdW5zaWduZWQgaW50IGFjOTdfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQUM5N19SRVNFVDoKKwljYXNlIEFDOTdfVkVORE9SX0lEMToKKwljYXNlIEFDOTdfVkVORE9SX0lEMjoKKwkJcmV0dXJuIHNvY19hYzk3X29wcy5yZWFkKGNvZGVjLT5hYzk3LCByZWcpOworCWRlZmF1bHQ6CisJCXJlZyA9IHJlZyA+PiAxOworCisJCWlmIChyZWcgPj0gKEFSUkFZX1NJWkUod205NzA1X3JlZykpKQorCQkJcmV0dXJuIC1FSU87CisKKwkJcmV0dXJuIGNhY2hlW3JlZ107CisJfQorfQorCitzdGF0aWMgaW50IGFjOTdfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCXVuc2lnbmVkIGludCB2YWwpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKKwlyZWcgPSByZWcgPj4gMTsKKwlpZiAocmVnIDwgKEFSUkFZX1NJWkUod205NzA1X3JlZykpKQorCQljYWNoZVtyZWddID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWM5N19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCWludCByZWc7CisJdTE2IHZyYTsKKworCXZyYSA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOworCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLCB2cmEgfCAweDEpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJlZyA9IEFDOTdfUENNX0ZST05UX0RBQ19SQVRFOworCWVsc2UKKwkJcmVnID0gQUM5N19QQ01fTFJfQURDX1JBVEU7CisKKwlyZXR1cm4gYWM5N193cml0ZShjb2RlYywgcmVnLCBydW50aW1lLT5yYXRlKTsKK30KKworI2RlZmluZSBXTTk3MDVfQUM5N19SQVRFUyAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHwgXAorCQkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFwKKwkJCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzA1X2RhaV9vcHMgPSB7CisJLnByZXBhcmUJPSBhYzk3X3ByZXBhcmUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd205NzA1X2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQUM5NyBIaUZpIiwKKwkJLmFjOTdfY29udHJvbCA9IDEsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJIaUZpIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTk3MDVfQUM5N19SQVRFUywKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkhpRmkgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV005NzA1X0FDOTdfUkFURVMsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQl9LAorCQkub3BzID0gJndtOTcwNV9kYWlfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBdXggUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gMSwKKwkJCS5yYXRlcyA9IFdNOTcwNV9BQzk3X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTF9HUEwod205NzA1X2RhaSk7CisKK3N0YXRpYyBpbnQgd205NzA1X3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpZiAoc29jX2FjOTdfb3BzLnJlc2V0KSB7CisJCXNvY19hYzk3X29wcy5yZXNldChjb2RlYy0+YWM5Nyk7CisJCWlmIChhYzk3X3JlYWQoY29kZWMsIDApID09IHdtOTcwNV9yZWdbMF0pCisJCQlyZXR1cm4gMDsgLyogU3VjY2VzcyAqLworCX0KKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHdtOTcwNV9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIldNOTcwNSBTb0MgQXVkaW8gQ29kZWNcbiIpOworCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKworCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtOTcwNV9yZWcsIHNpemVvZih3bTk3MDVfcmVnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNhY2hlX2VycjsKKwl9CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gc2l6ZW9mKHdtOTcwNV9yZWcpOworCWNvZGVjLT5yZWdfY2FjaGVfc3RlcCA9IDI7CisKKwljb2RlYy0+bmFtZSA9ICJXTTk3MDUiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5kYWkgPSB3bTk3MDVfZGFpOworCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh3bTk3MDVfZGFpKTsKKwljb2RlYy0+d3JpdGUgPSBhYzk3X3dyaXRlOworCWNvZGVjLT5yZWFkID0gYWM5N19yZWFkOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJcmV0ID0gc25kX3NvY19uZXdfYWM5N19jb2RlYyhjb2RlYywgJnNvY19hYzk3X29wcywgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3bTk3MDU6IGZhaWxlZCB0byByZWdpc3RlciBBQzk3IGNvZGVjXG4iKTsKKwkJZ290byBjb2RlY19lcnI7CisJfQorCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGNtX2VycjsKKworCXJldCA9IHdtOTcwNV9yZXNldChjb2RlYyk7CisJaWYgKHJldCkKKwkJZ290byByZXNldF9lcnI7CisKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205NzA1X3NuZF9hYzk3X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod205NzA1X3NuZF9hYzk3X2NvbnRyb2xzKSk7CisJd205NzA1X2FkZF93aWRnZXRzKGNvZGVjKTsKKworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3bTk3MDU6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXJldHVybiAwOworCityZXNldF9lcnI6CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKK3BjbV9lcnI6CisJc25kX3NvY19mcmVlX2FjOTdfY29kZWMoY29kZWMpOworY29kZWNfZXJyOgorCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworY2FjaGVfZXJyOgorCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd205NzA1X3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwlpZiAoY29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19mcmVlX2FjOTdfY29kZWMoY29kZWMpOworCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCWtmcmVlKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd205NzA1ID0geworCS5wcm9iZSA9IAl3bTk3MDVfc29jX3Byb2JlLAorCS5yZW1vdmUgPSAJd205NzA1X3NvY19yZW1vdmUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTk3MDUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV005NzA1IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MDUuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4MGYxMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIHdtOTcwNS5oICAtLSAgV005NzA1IFNvYyBBdWRpbyBkcml2ZXIKKyAqLworCisjaWZuZGVmIF9XTTk3MDVfSAorI2RlZmluZSBfV005NzA1X0gKKworI2RlZmluZSBXTTk3MDVfREFJX0FDOTdfSElGSQkwCisjZGVmaW5lIFdNOTcwNV9EQUlfQUM5N19BVVgJMQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtOTcwNV9kYWlbMl07CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd205NzA1OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCmluZGV4IGFmODNkNjIuLjc2NWNmMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwpAQCAtMTU0LDIxICsxNTQsNiBAQAogU09DX1NJTkdMRSgiTWljIDIwZEIgQm9vc3QgU3dpdGNoIiwgQUM5N19NSUMsIDcsIDEsIDApLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtOTcxMl9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTk3MTJfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtOTcxMl9zbmRfYWM5N19jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIFdlIGhhdmUgdG8gY3JlYXRlIGEgZmFrZSBsZWZ0IGFuZCByaWdodCBIUCBtaXhlcnMgYmVjYXVzZQogICogdGhlIGNvZGVjIG9ubHkgaGFzIGEgc2luZ2xlIGNvbnRyb2wgdGhhdCBpcyBzaGFyZWQgYnkgYm90aCBjaGFubmVscy4KICAqIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIGF1ZGlvIHBhdGguCkBAIC00NjcsNyArNDUyLDcgQEAKIAllbHNlIHsKIAkJcmVnID0gcmVnID4+IDE7CiAKLQkJaWYgKHJlZyA+IChBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKSkKKwkJaWYgKHJlZyA+PSAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlyZXR1cm4gY2FjaGVbcmVnXTsKQEAgLTQ4MSw3ICs0NjYsNyBAQAogCiAJc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CiAJcmVnID0gcmVnID4+IDE7Ci0JaWYgKHJlZyA8PSAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCisJaWYgKHJlZyA8IChBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKSkKIAkJY2FjaGVbcmVnXSA9IHZhbDsKIAogCXJldHVybiAwOwpAQCAtNDkzLDcgKzQ3OCw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJlZzsKIAl1MTYgdnJhOwogCkBAIC01MTQsNyArNDk5LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgdnJhLCB4c2xlOwogCiAJdnJhID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7CkBAIC01MzIsNiArNTE3LDE0IEBACiAJCVNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfFwKIAkJU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcxMl9kYWlfb3BzX2hpZmkgPSB7CisJLnByZXBhcmUJPSBhYzk3X3ByZXBhcmUsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTJfZGFpX29wc19hdXggPSB7CisJLnByZXBhcmUJPSBhYzk3X2F1eF9wcmVwYXJlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtOTcxMl9kYWlbXSA9IHsKIHsKIAkubmFtZSA9ICJBQzk3IEhpRmkiLApAQCAtNTQ4LDggKzU0MSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTk3MTJfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19wcmVwYXJlLH0sCisJLm9wcyA9ICZ3bTk3MTJfZGFpX29wc19oaWZpLAogfSwKIHsKIAkubmFtZSA9ICJBQzk3IEF1eCIsCkBAIC01NTksOCArNTUxLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IFdNOTcxMl9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X2F1eF9wcmVwYXJlLH0sCisJLm9wcyA9ICZ3bTk3MTJfZGFpX29wc19hdXgsCiB9CiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod205NzEyX2RhaSk7CkBAIC02MDcsNyArNTk4LDcgQEAKIAlwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTk3MTJfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNjE2LDcgKzYwNyw3IEBACiBzdGF0aWMgaW50IHdtOTcxMl9zb2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGksIHJldDsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIApAQCAtNjUyLDEwICs2NDMsMTEgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIldNOTcxMS9XTTk3MTIgU29DIEF1ZGlvIENvZGVjICVzXG4iLCBXTTk3MTJfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc29jZGV2LT5jb2RlYyA9PSBOVUxMKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod205NzEyX3JlZywgc2l6ZW9mKHdtOTcxMl9yZWcpLCBHRlBfS0VSTkVMKTsKQEAgLTY5OCw3ICs2OTAsOCBAQAogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfVklERU8sIGFjOTdfcmVhZChjb2RlYywgQUM5N19WSURFTykgfCAweDMwMDApOwogCiAJd205NzEyX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0Jd205NzEyX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTcxMl9zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtOTcxMl9zbmRfYWM5N19jb250cm9scykpOwogCXdtOTcxMl9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNzE4LDE1ICs3MTEsMTUgQEAKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAogY2FjaGVfZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgd205NzEyX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCmluZGV4IGYzY2E4YWEuLjUyM2JhZDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwpAQCAtMzIsNyArMzIsNiBAQAogCiBzdHJ1Y3Qgd205NzEzX3ByaXYgewogCXUzMiBwbGxfaW47IC8qIFBMTCBpbnB1dCBmcmVxdWVuY3kgKi8KLQl1MzIgcGxsX291dDsgLyogUExMIG91dHB1dCBmcmVxdWVuY3kgKi8KIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWM5N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKQEAgLTE5MCwyMSArMTg5LDYgQEAKIFNPQ19TSU5HTEUoIjNEIERlcHRoIiwgQUM5N19SRUNfR0FJTl9NSUMsIDAsIDE1LCAxKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTk3MTNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod205NzEzX3NuZF9hYzk3X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd205NzEzX3NuZF9hYzk3X2NvbnRyb2xzW2ldLAotCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIGZha2UgbGVmdCBhbmQgcmlnaHQgSFAgbWl4ZXJzIGJlY2F1c2UKICAqIHRoZSBjb2RlYyBvbmx5IGhhcyBhIHNpbmdsZSBjb250cm9sIHRoYXQgaXMgc2hhcmVkIGJ5IGJvdGggY2hhbm5lbHMuCiAgKiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBhdWRpbyBwYXRoIHVzaW5nIHRoZSBjdXJyZW50CkBAIC02MzYsNyArNjIwLDcgQEAKIAllbHNlIHsKIAkJcmVnID0gcmVnID4+IDE7CiAKLQkJaWYgKHJlZyA+IChBUlJBWV9TSVpFKHdtOTcxM19yZWcpKSkKKwkJaWYgKHJlZyA+PSAoQVJSQVlfU0laRSh3bTk3MTNfcmVnKSkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlyZXR1cm4gY2FjaGVbcmVnXTsKQEAgLTY1MCw3ICs2MzQsNyBAQAogCWlmIChyZWcgPCAweDdjKQogCQlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKLQlpZiAocmVnIDw9IChBUlJBWV9TSVpFKHdtOTcxM19yZWcpKSkKKwlpZiAocmVnIDwgKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQogCQljYWNoZVtyZWddID0gdmFsOwogCiAJcmV0dXJuIDA7CkBAIC03MzgsMTMgKzcyMiwxMyBAQAogCXN0cnVjdCBfcGxsX2RpdiBwbGxfZGl2OwogCiAJLyogdHVybiBQTEwgb2ZmID8gKi8KLQlpZiAoZnJlcV9pbiA9PSAwIHx8IGZyZXFfb3V0ID09IDApIHsKKwlpZiAoZnJlcV9pbiA9PSAwKSB7CiAJCS8qIGRpc2FibGUgUExMIHBvd2VyIGFuZCBzZWxlY3QgZXh0IHNvdXJjZSAqLwogCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKTsKIAkJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJlZyB8IDB4MDA4MCk7CiAJCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQpOwogCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgcmVnIHwgMHgwMjAwKTsKLQkJd205NzEzLT5wbGxfb3V0ID0gMDsKKwkJd205NzEzLT5wbGxfaW4gPSAwOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTc4OCw3ICs3NzIsNiBAQAogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCByZWcgJiAweGZkZmYpOwogCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUpOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByZWcgJiAweGZmN2YpOwotCXdtOTcxMy0+cGxsX291dCA9IGZyZXFfb3V0OwogCXdtOTcxMy0+cGxsX2luID0gZnJlcV9pbjsKIAogCS8qIHdhaXQgMTBtcyBBQzk3IGxpbmsgZnJhbWVzIGZvciB0aGUgbGluayB0byBzdGFiaWxpc2UgKi8KQEAgLTk1NywxMyArOTQwLDE0IEBACiAJCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JdTE2IHN0YXR1czsKKwl1MTYgc3RhdHVzLCByYXRlOwogCiAJLyogR3JhY2VmdWxseSBzaHV0IGRvd24gdGhlIHZvaWNlIGludGVyZmFjZS4gKi8KIAlzdGF0dXMgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKSB8IDB4MTAwMDsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgMHgwMjgwKTsKKwlyYXRlID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSkgJiAweEYwRkY7CisJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJhdGUgfCAweDAyMDApOwogCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEpKTsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgMHgwRjgwKTsKKwlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmF0ZSB8IDB4MEYwMCk7CiAJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHN0YXR1cyk7CiB9CiAKQEAgLTEwMjEsNiArMTAwNSwyNyBAQAogCShTTkRSVl9QQ01fRk9STUFUX1MxNl9MRSB8IFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRSB8IFwKIAkgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcxM19kYWlfb3BzX2hpZmkgPSB7CisJLnByZXBhcmUJPSBhYzk3X2hpZmlfcHJlcGFyZSwKKwkuc2V0X2Nsa2Rpdgk9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtOTcxM19zZXRfZGFpX3BsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcxM19kYWlfb3BzX2F1eCA9IHsKKwkucHJlcGFyZQk9IGFjOTdfYXV4X3ByZXBhcmUsCisJLnNldF9jbGtkaXYJPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTk3MTNfc2V0X2RhaV9wbGwsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTNfZGFpX29wc192b2ljZSA9IHsKKwkuaHdfcGFyYW1zCT0gd205NzEzX3BjbV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gd205NzEzX3ZvaWNlc2h1dGRvd24sCisJLnNldF9jbGtkaXYJPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTk3MTNfc2V0X2RhaV9wbGwsCisJLnNldF9mbXQJPSB3bTk3MTNfc2V0X2RhaV9mbXQsCisJLnNldF90cmlzdGF0ZQk9IHdtOTcxM19zZXRfZGFpX3RyaXN0YXRlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtOTcxM19kYWlbXSA9IHsKIHsKIAkubmFtZSA9ICJBQzk3IEhpRmkiLApAQCAtMTAzNywxMCArMTA0Miw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTk3MTNfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IGFjOTdfaGlmaV9wcmVwYXJlLAotCQkuc2V0X2Nsa2RpdiA9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTk3MTNfc2V0X2RhaV9wbGwsfSwKKwkub3BzID0gJndtOTcxM19kYWlfb3BzX2hpZmksCiAJfSwKIAl7CiAJLm5hbWUgPSAiQUM5NyBBdXgiLApAQCAtMTA1MCwxMCArMTA1Miw3IEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBXTTk3MTNfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IGFjOTdfYXV4X3ByZXBhcmUsCi0JCS5zZXRfY2xrZGl2ID0gd205NzEzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtOTcxM19zZXRfZGFpX3BsbCx9LAorCS5vcHMgPSAmd205NzEzX2RhaV9vcHNfYXV4LAogCX0sCiAJewogCS5uYW1lID0gIldNOTcxMyBWb2ljZSIsCkBAIC0xMDY5LDE0ICsxMDY4LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNOTcxM19QQ01fUkFURVMsCiAJCS5mb3JtYXRzID0gV005NzEzX1BDTV9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtOTcxM19wY21faHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB3bTk3MTNfdm9pY2VzaHV0ZG93biwKLQkJLnNldF9jbGtkaXYgPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd205NzEzX3NldF9kYWlfcGxsLAotCQkuc2V0X2ZtdCA9IHdtOTcxM19zZXRfZGFpX2ZtdCwKLQkJLnNldF90cmlzdGF0ZSA9IHdtOTcxM19zZXRfZGFpX3RyaXN0YXRlLAotCX0sCisJLm9wcyA9ICZ3bTk3MTNfZGFpX29wc192b2ljZSwKIAl9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtOTcxM19kYWkpOwpAQCAtMTEzMiw3ICsxMTI0LDcgQEAKIAlwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IHJlZzsKIAogCS8qIERpc2FibGUgZXZlcnl0aGluZyBleGNlcHQgdG91Y2hwYW5lbCAtIHRoYXQgd2lsbCBiZSBoYW5kbGVkCkBAIC0xMTUwLDcgKzExNDIsNyBAQAogc3RhdGljIGludCB3bTk3MTNfc29jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTk3MTNfcHJpdiAqd205NzEzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgaSwgcmV0OwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtMTE2NCw4ICsxMTU2LDggQEAKIAl3bTk3MTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogCS8qIGRvIHdlIG5lZWQgdG8gcmUtc3RhcnQgdGhlIFBMTCA/ICovCi0JaWYgKHdtOTcxMy0+cGxsX291dCkKLQkJd205NzEzX3NldF9wbGwoY29kZWMsIDAsIHdtOTcxMy0+cGxsX2luLCB3bTk3MTMtPnBsbF9vdXQpOworCWlmICh3bTk3MTMtPnBsbF9pbikKKwkJd205NzEzX3NldF9wbGwoY29kZWMsIDAsIHdtOTcxMy0+cGxsX2luLCAwKTsKIAogCS8qIG9ubHkgc3luY2hyb25pc2UgdGhlIGNvZGVjIGlmIHdhcm0gcmVzZXQgZmFpbGVkICovCiAJaWYgKHJldCA9PSAwKSB7CkBAIC0xMTkxLDEwICsxMTgzLDExIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJXTTk3MTMvV005NzE0IFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgV005NzEzX1ZFUlNJT04pOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNvY2Rldi0+Y29kZWMgPT0gTlVMTCkKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtOTcxM19yZWcsIHNpemVvZih3bTk3MTNfcmVnKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMjQ1LDcgKzEyMzgsOCBAQAogCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19DRCkgJiAweDdmZmY7CiAJYWM5N193cml0ZShjb2RlYywgQUM5N19DRCwgcmVnKTsKIAotCXdtOTcxM19hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTk3MTNfc25kX2FjOTdfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTk3MTNfc25kX2FjOTdfY29udHJvbHMpKTsKIAl3bTk3MTNfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApCkBAIC0xMjY1LDE1ICsxMjU5LDE1IEBACiAJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAKIGNhY2hlX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHdtOTcxM19zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnIGIvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZwppbmRleCBiNTAyNzQxLi5iZDczOTJjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcKQEAgLTIwLDcgKzIwLDcgQEAKIAogY29uZmlnIFNORF9EQVZJTkNJX1NPQ19TRkZTRFIKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFNGRlNEUiIKLQlkZXBlbmRzIG9uIFNORF9EQVZJTkNJX1NPQyAmJiBNQUNIX0RBVklOQ0lfU0ZGU0RSCisJZGVwZW5kcyBvbiBTTkRfREFWSU5DSV9TT0MgJiYgTUFDSF9TRkZTRFIKIAlzZWxlY3QgU05EX0RBVklOQ0lfU09DX0kyUwogCXNlbGVjdCBTTkRfU09DX1BDTTMwMDgKIAlzZWxlY3QgU0ZGU0RSX0ZQR0EKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCmluZGV4IDU0ODUxZjMuLjliOTBiMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwpAQCAtMTg2LDcgKzE4Niw4IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShldm1fc25kX2RldmljZSwgJmV2bV9zbmRfZGV2ZGF0YSk7CiAJZXZtX3NuZF9kZXZkYXRhLmRldiA9ICZldm1fc25kX2RldmljZS0+ZGV2OwotCWV2bV9zbmRfZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9ICZldm1fc25kX2RhdGE7CisJcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGV2bV9zbmRfZGV2aWNlLCAmZXZtX3NuZF9kYXRhLAorCQkJCSBzaXplb2YoZXZtX3NuZF9kYXRhKSk7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhldm1fc25kX2RldmljZSwgZXZtX3NuZF9yZXNvdXJjZXMsCiAJCQkJCSAgICBBUlJBWV9TSVpFKGV2bV9zbmRfcmVzb3VyY2VzKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwppbmRleCAwZmVlNzc5Li5mZmRiOTQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKQEAgLTQ5OSw2ICs0OTksMTMgQEAKIAogI2RlZmluZSBEQVZJTkNJX0kyU19SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhdmluY2lfaTJzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBkYXZpbmNpX2kyc19zdGFydHVwLAorCS50cmlnZ2VyCT0gZGF2aW5jaV9pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gZGF2aW5jaV9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gZGF2aW5jaV9pMnNfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgZGF2aW5jaV9pMnNfZGFpID0gewogCS5uYW1lID0gImRhdmluY2ktaTJzIiwKIAkuaWQgPSAwLApAQCAtNTE0LDEyICs1MjEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gREFWSU5DSV9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IGRhdmluY2lfaTJzX3N0YXJ0dXAsCi0JCS50cmlnZ2VyID0gZGF2aW5jaV9pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcyA9IGRhdmluY2lfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmZGF2aW5jaV9pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChkYXZpbmNpX2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYwppbmRleCAzNjYwNDlkLi43YWYzYjViIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCQkJCSAgICAgcnVudGltZS0+ZG1hX2J5dGVzKTsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGRhdmluY2lfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgZGF2aW5jaV9wY21fb3BzID0gewogCS5vcGVuID0gCWRhdmluY2lfcGNtX29wZW4sCiAJLmNsb3NlID0gCWRhdmluY2lfcGNtX2Nsb3NlLAogCS5pb2N0bCA9IAlzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jCmluZGV4IDQ5MzVkMWIuLjQwZWNjZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYwpAQCAtMjUsNyArMjUsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaWZkZWYgQ09ORklHX1NGRlNEUl9GUEdBCiAjaW5jbHVkZSA8YXNtL3BsYXQtc2Zmc2RyL3NmZnNkci1mcGdhLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KICNpbmNsdWRlIDxtYWNoL2VkbWEuaD4KQEAgLTM0LDMxICszNiw0NSBAQAogI2luY2x1ZGUgImRhdmluY2ktcGNtLmgiCiAjaW5jbHVkZSAiZGF2aW5jaS1pMnMuaCIKIAorLyoKKyAqIENMS1ggYW5kIENMS1IgYXJlIHRoZSBpbnB1dHMgZm9yIHRoZSBTYW1wbGUgUmF0ZSBHZW5lcmF0b3IuCisgKiBGU1ggYW5kIEZTUiBhcmUgb3V0cHV0cywgZHJpdmVuIGJ5IHRoZSBzYW1wbGUgUmF0ZSBHZW5lcmF0b3IuCisgKi8KKyNkZWZpbmUgQVVESU9fRk9STUFUIChTTkRfU09DX0RBSUZNVF9EU1BfQiB8CVwKKwkJICAgICAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUyB8CVwKKwkJICAgICAgU05EX1NPQ19EQUlGTVRfSUJfTkYpCisKIHN0YXRpYyBpbnQgc2Zmc2RyX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CiAJaW50IGZzOwogCWludCByZXQgPSAwOwogCi0JLyogU2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbjoKLQkgKiBDTEtYIGFuZCBDTEtSIGFyZSB0aGUgaW5wdXRzIGZvciB0aGUgU2FtcGxlIFJhdGUgR2VuZXJhdG9yLgotCSAqIEZTWCBhbmQgRlNSIGFyZSBvdXRwdXRzLCBkcml2ZW4gYnkgdGhlIHNhbXBsZSBSYXRlIEdlbmVyYXRvci4gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksCi0JCQkJICBTTkRfU09DX0RBSUZNVF9SSUdIVF9KIHwKLQkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRlMgfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfSUJfTkYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJLyogRnNyZWYgY2FuIGJlIDMyMDAwLCA0NDEwMCBvciA0ODAwMC4gKi8KIAlmcyA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CiAKKyNpZm5kZWYgQ09ORklHX1NGRlNEUl9GUEdBCisJLyogV2l0aG91dCB0aGUgRlBHQSBtb2R1bGUsIHRoZSBGcyBpcyBmaXhlZCBhdCA0NDEwMCBIeiAqLworCWlmIChmcyAhPSA0NDEwMCkgeworCQlwcl9kZWJ1Zygid2FybmluZzogb25seSA0NC4xIGtIeiBpcyBzdXBwb3J0ZWQgd2l0aG91dCBTRkZTRFIgRlBHQSBtb2R1bGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjZW5kaWYKKworCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIEFVRElPX0ZPUk1BVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAlwcl9kZWJ1Zygic2Zmc2RyX2h3X3BhcmFtczogcmF0ZSA9ICVkIEh6XG4iLCBmcyk7CiAKKyNpZm5kZWYgQ09ORklHX1NGRlNEUl9GUEdBCisJcmV0dXJuIDA7CisjZWxzZQogCXJldHVybiBzZmZzZHJfZnBnYV9zZXRfY29kZWNfZnMoZnMpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgc2Zmc2RyX29wcyA9IHsKQEAgLTEyNyw3ICsxNDMsOCBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoc2Zmc2RyX3NuZF9kZXZpY2UsICZzZmZzZHJfc25kX2RldmRhdGEpOwogCXNmZnNkcl9zbmRfZGV2ZGF0YS5kZXYgPSAmc2Zmc2RyX3NuZF9kZXZpY2UtPmRldjsKLQlzZmZzZHJfc25kX2RldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc2Zmc2RyX3NuZF9kYXRhOworCXBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShzZmZzZHJfc25kX2RldmljZSwgJnNmZnNkcl9zbmRfZGF0YSwKKwkJCQkgc2l6ZW9mKHNmZnNkcl9zbmRfZGF0YSkpOwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMoc2Zmc2RyX3NuZF9kZXZpY2UsCiAJCQkJCSAgICBzZmZzZHJfc25kX3Jlc291cmNlcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvS2NvbmZpZyBiL3NvdW5kL3NvYy9mc2wvS2NvbmZpZwppbmRleCA5NWMxMmIyLi45ZmM5MDgyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL0tjb25maWcKKysrIGIvc291bmQvc29jL2ZzbC9LY29uZmlnCkBAIC0xLDE3ICsxLDE4IEBACiBjb25maWcgU05EX1NPQ19PRl9TSU1QTEUKIAl0cmlzdGF0ZQogCisjIEFTb0MgcGxhdGZvcm0gc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4NjEwIFNPQy4gIFRoaXMgY29tcGlsZXMgZHJpdmVycworIyBmb3IgdGhlIFNTSSBhbmQgdGhlIEVsbyBETUEgY29udHJvbGxlci4gIFlvdSB3aWxsIHN0aWxsIG5lZWQgdG8gc2VsZWN0CisjIGEgcGxhdGZvcm0gZHJpdmVyIGFuZCBhIGNvZGVjIGRyaXZlci4KIGNvbmZpZyBTTkRfU09DX01QQzg2MTAKLQlib29sICJBTFNBIFNvQyBzdXBwb3J0IGZvciB0aGUgTVBDODYxMCBTT0MiCi0JZGVwZW5kcyBvbiBNUEM4NjEwX0hQQ0QKLQlkZWZhdWx0IHkgaWYgTVBDODYxMAotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8gdGhlIFNTSQotICAgICAgICAgIGRldmljZSBvbiBhbiBNUEM4NjEwLgorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBNUEM4NjEwCiAKIGNvbmZpZyBTTkRfU09DX01QQzg2MTBfSFBDRAotCWJvb2wgIkFMU0EgU29DIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODYxMCBIUENEIGJvYXJkIgotCWRlcGVuZHMgb24gU05EX1NPQ19NUEM4NjEwCisJdHJpc3RhdGUgIkFMU0EgU29DIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODYxMCBIUENEIGJvYXJkIgorCSMgSTJDIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIENTNDI3MCBkcml2ZXIKKwlkZXBlbmRzIG9uIE1QQzg2MTBfSFBDRCAmJiBJMkMKKwlzZWxlY3QgU05EX1NPQ19NUEM4NjEwCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBCiAJZGVmYXVsdCB5IGlmIE1QQzg2MTBfSFBDRApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUKaW5kZXggMDM1ZGE0YS4uZjg1MTM0YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvZnNsL01ha2VmaWxlCkBAIC0yLDEwICsyLDEzIEBACiBvYmotJChDT05GSUdfU05EX1NPQ19PRl9TSU1QTEUpICs9IHNvYy1vZi1zaW1wbGUubwogCiAjIE1QQzg2MTAgSFBDRCBNYWNoaW5lIFN1cHBvcnQKLW9iai0kKENPTkZJR19TTkRfU09DX01QQzg2MTBfSFBDRCkgKz0gbXBjODYxMF9ocGNkLm8KK3NuZC1zb2MtbXBjODYxMC1ocGNkLW9ianMgOj0gbXBjODYxMF9ocGNkLm8KK29iai0kKENPTkZJR19TTkRfU09DX01QQzg2MTBfSFBDRCkgKz0gc25kLXNvYy1tcGM4NjEwLWhwY2QubwogCiAjIE1QQzg2MTAgUGxhdGZvcm0gU3VwcG9ydAotb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDODYxMCkgKz0gZnNsX3NzaS5vIGZzbF9kbWEubworc25kLXNvYy1mc2wtc3NpLW9ianMgOj0gZnNsX3NzaS5vCitzbmQtc29jLWZzbC1kbWEtb2JqcyA6PSBmc2xfZG1hLm8KK29iai0kKENPTkZJR19TTkRfU09DX01QQzg2MTApICs9IHNuZC1zb2MtZnNsLXNzaS5vIHNuZC1zb2MtZnNsLWRtYS5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX01QQzUyMDBfSTJTKSArPSBtcGM1MjAwX3BzY19pMnMubwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYyBiL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jCmluZGV4IDY0OTkzZWQuLmIzZWI4NTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jCkBAIC0xNDIsNyArMTQyLDggQEAKIAkuaW5mbyAgIAkJPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19NTUFQIHwKIAkJCQkgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkJCSAgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYLAorCQkJCSAgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYIHwKKwkJCQkgIFNORFJWX1BDTV9JTkZPX1BBVVNFLAogCS5mb3JtYXRzCQk9IEZTTERNQV9QQ01fRk9STUFUUywKIAkucmF0ZXMgIAkJPSBGU0xETUFfUENNX1JBVEVTLAogCS5yYXRlX21pbiAgICAgICAJPSA1NTEyLApAQCAtNDY0LDExICs0NjUsNyBAQAogCQlzaXplb2Yoc3RydWN0IGZzbF9kbWFfbGlua19kZXNjcmlwdG9yKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRE1BX0xJTktTOyBpKyspIHsKLQkJc3RydWN0IGZzbF9kbWFfbGlua19kZXNjcmlwdG9yICpsaW5rID0gJmRtYV9wcml2YXRlLT5saW5rW2ldOwotCi0JCWxpbmstPnNvdXJjZV9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX1NOT09QKTsKLQkJbGluay0+ZGVzdF9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX1NOT09QKTsKLQkJbGluay0+bmV4dCA9IGNwdV90b19iZTY0KHRlbXBfbGluayk7CisJCWRtYV9wcml2YXRlLT5saW5rW2ldLm5leHQgPSBjcHVfdG9fYmU2NCh0ZW1wX2xpbmspOwogCiAJCXRlbXBfbGluayArPSBzaXplb2Yoc3RydWN0IGZzbF9kbWFfbGlua19kZXNjcmlwdG9yKTsKIAl9CkBAIC01MjUsNzkgKzUyMiw5IEBACiAgKiBUaGlzIGZ1bmN0aW9uIG9idGFpbnMgaGFyZHdhcmUgcGFyYW1ldGVycyBhYm91dCB0aGUgb3BlbmVkIHN0cmVhbSBhbmQKICAqIHByb2dyYW1zIHRoZSBETUEgY29udHJvbGxlciBhY2NvcmRpbmdseS4KICAqCi0gKiBOb3RlIHRoYXQgZHVlIHRvIGEgcXVpcmsgb2YgdGhlIFNTSSdzIFNUWCByZWdpc3RlciwgdGhlIHRhcmdldCBhZGRyZXNzCi0gKiBmb3IgdGhlIERNQSBvcGVyYXRpb25zIGRlcGVuZHMgb24gdGhlIHNhbXBsZSBzaXplLiAgU28gd2UgZG9uJ3QgcHJvZ3JhbQotICogdGhlIGRlc3RfYWRkciAoZm9yIHBsYXliYWNrIC0tIHNvdXJjZV9hZGRyIGZvciBjYXB0dXJlKSBmaWVsZHMgaW4gdGhlCi0gKiBsaW5rIGRlc2NyaXB0b3JzIGhlcmUuICBXZSBkbyB0aGF0IGluIGZzbF9kbWFfcHJlcGFyZSgpCi0gKi8KLXN0YXRpYyBpbnQgZnNsX2RtYV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0Jc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgZnNsX2RtYV9wcml2YXRlICpkbWFfcHJpdmF0ZSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQotCWRtYV9hZGRyX3QgdGVtcF9hZGRyOyAgIC8qIFBvaW50ZXIgdG8gbmV4dCBwZXJpb2QgKi8KLQotCXVuc2lnbmVkIGludCBpOwotCi0JLyogR2V0IGFsbCB0aGUgcGFyYW1ldGVycyB3ZSBuZWVkICovCi0Jc2l6ZV90IGJ1ZmZlcl9zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpOwotCXNpemVfdCBwZXJpb2Rfc2l6ZSA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKLQotCS8qIEluaXRpYWxpemUgb3VyIERNQSB0cmFja2luZyB2YXJpYWJsZXMgKi8KLQlkbWFfcHJpdmF0ZS0+cGVyaW9kX3NpemUgPSBwZXJpb2Rfc2l6ZTsKLQlkbWFfcHJpdmF0ZS0+bnVtX3BlcmlvZHMgPSBwYXJhbXNfcGVyaW9kcyhod19wYXJhbXMpOwotCWRtYV9wcml2YXRlLT5kbWFfYnVmX2VuZCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgKyBidWZmZXJfc2l6ZTsKLQlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5cyArCi0JCShOVU1fRE1BX0xJTktTICogcGVyaW9kX3NpemUpOwotCWlmIChkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID49IGRtYV9wcml2YXRlLT5kbWFfYnVmX2VuZCkKLQkJZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXM7Ci0KLQkvKgotCSAqIFRoZSBhY3R1YWwgYWRkcmVzcyBpbiBTVFgwIChkZXN0aW5hdGlvbiBmb3IgcGxheWJhY2ssIHNvdXJjZSBmb3IKLQkgKiBjYXB0dXJlKSBpcyBiYXNlZCBvbiB0aGUgc2FtcGxlIHNpemUsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBzYW1wbGUKLQkgKiBzaXplIGluIHRoaXMgZnVuY3Rpb24sIHNvIHdlJ2xsIGhhdmUgdG8gYWRqdXN0IHRoYXQgbGF0ZXIuICBTZWUKLQkgKiBjb21tZW50cyBpbiBmc2xfZG1hX3ByZXBhcmUoKS4KLQkgKgotCSAqIFRoZSBETUEgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIGEgY2FjaGUsIHNvIHRoZSBDUFUgZG9lcyBub3QKLQkgKiBuZWVkIHRvIHRlbGwgaXQgdG8gZmx1c2ggaXRzIGNhY2hlLiAgSG93ZXZlciwgdGhlIERNQQotCSAqIGNvbnRyb2xsZXIgZG9lcyBuZWVkIHRvIHRlbGwgdGhlIENQVSB0byBmbHVzaCBpdHMgY2FjaGUuCi0JICogVGhhdCdzIHdoYXQgdGhlIFNOT09QIGJpdCBkb2VzLgotCSAqCi0JICogQWxzbywgZXZlbiB0aG91Z2ggdGhlIERNQSBjb250cm9sbGVyIHN1cHBvcnRzIDM2LWJpdCBhZGRyZXNzaW5nLCBmb3IKLQkgKiBzaW1wbGljaXR5IHdlIGN1cnJlbnRseSBzdXBwb3J0IG9ubHkgMzItYml0IGFkZHJlc3NlcyBmb3IgdGhlIGF1ZGlvCi0JICogYnVmZmVyIGl0c2VsZi4KLQkgKi8KLQl0ZW1wX2FkZHIgPSBzdWJzdHJlYW0tPmRtYV9idWZmZXIuYWRkcjsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fRE1BX0xJTktTOyBpKyspIHsKLQkJc3RydWN0IGZzbF9kbWFfbGlua19kZXNjcmlwdG9yICpsaW5rID0gJmRtYV9wcml2YXRlLT5saW5rW2ldOwotCi0JCWxpbmstPmNvdW50ID0gY3B1X3RvX2JlMzIocGVyaW9kX3NpemUpOwotCi0JCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQkJbGluay0+c291cmNlX2FkZHIgPSBjcHVfdG9fYmUzMih0ZW1wX2FkZHIpOwotCQllbHNlCi0JCQlsaW5rLT5kZXN0X2FkZHIgPSBjcHVfdG9fYmUzMih0ZW1wX2FkZHIpOwotCi0JCXRlbXBfYWRkciArPSBwZXJpb2Rfc2l6ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBmc2xfZG1hX3ByZXBhcmUgLSBwcmVwYXJlIHRoZSBETUEgcmVnaXN0ZXJzIGZvciBwbGF5YmFjay4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgc3BlY2lmaWNzIG9mIHRoZSBhdWRpbyBkYXRhIGFyZSBrbm93biwKLSAqIGkuZS4gc25kX3BjbV9ydW50aW1lIGlzIGluaXRpYWxpemVkLgotICoKLSAqIEluIHRoaXMgZnVuY3Rpb24sIHdlIGZpbmlzaCBwcm9ncmFtbWluZyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBETUEKLSAqIGNvbnRyb2xsZXIgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBzYW1wbGUgc2l6ZS4KLSAqCi0gKiBPbmUgb2YgdGhlIGRyYXdiYWNrcyB3aXRoIGJpZy1lbmRpYW4gaXMgdGhhdCB3aGVuIGNvcHlpbmcgaW50ZWdlcnMgb2YKLSAqIGRpZmZlcmVudCBzaXplcyB0byBhIGZpeGVkLXNpemVkIHJlZ2lzdGVyLCB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUKLSAqIGludGVnZXIgbXVzdCBiZSBjb3BpZWQgaXMgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBpbnRlZ2VyLgorICogT25lIGRyYXdiYWNrIG9mIGJpZy1lbmRpYW4gaXMgdGhhdCB3aGVuIGNvcHlpbmcgaW50ZWdlcnMgb2YgZGlmZmVyZW50CisgKiBzaXplcyB0byBhIGZpeGVkLXNpemVkIHJlZ2lzdGVyLCB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUgaW50ZWdlciBtdXN0IGJlCisgKiBjb3BpZWQgaXMgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBpbnRlZ2VyLgogICoKICAqIEZvciBleGFtcGxlLCBpZiBQIGlzIHRoZSBhZGRyZXNzIG9mIGEgMzItYml0IHJlZ2lzdGVyLCBhbmQgWCBpcyBhIDMyLWJpdAogICogaW50ZWdlciwgdGhlbiBYIHNob3VsZCBiZSBjb3BpZWQgdG8gYWRkcmVzcyBQLiAgSG93ZXZlciwgaWYgWCBpcyBhIDE2LWJpdApAQCAtNjEzLDIyICs1NDAsNTggQEAKICAqIGFuZCA4IGJ5dGVzIGF0IGEgdGltZSkuICBTbyB3ZSBkbyBub3Qgc3VwcG9ydCBwYWNrZWQgMjQtYml0IHNhbXBsZXMuCiAgKiAyNC1iaXQgZGF0YSBtdXN0IGJlIHBhZGRlZCB0byAzMiBiaXRzLgogICovCi1zdGF0aWMgaW50IGZzbF9kbWFfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgZnNsX2RtYV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3QgZnNsX2RtYV9wcml2YXRlICpkbWFfcHJpdmF0ZSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2Nzcl9kbWFfY2hhbm5lbCBfX2lvbWVtICpkbWFfY2hhbm5lbCA9IGRtYV9wcml2YXRlLT5kbWFfY2hhbm5lbDsKLQl1MzIgbXI7Ci0JdW5zaWduZWQgaW50IGk7Ci0JZG1hX2FkZHJfdCBzc2lfc3h4X3BoeXM7CS8qIEJ1cyBhZGRyZXNzIG9mIFNTSSBTVFggcmVnaXN0ZXIgKi8KLQl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsJLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBmcmFtZSAqLwogCi0Jc3NpX3N4eF9waHlzID0gZG1hX3ByaXZhdGUtPnNzaV9zeHhfcGh5czsKKwkvKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlICovCisJdW5zaWduZWQgaW50IHNhbXBsZV9zaXplID0KKwkJc25kX3BjbV9mb3JtYXRfcGh5c2ljYWxfd2lkdGgocGFyYW1zX2Zvcm1hdChod19wYXJhbXMpKTsKKworCS8qIE51bWJlciBvZiBieXRlcyBwZXIgZnJhbWUgKi8KKwl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZSA9IDIgKiAoc2FtcGxlX3NpemUgLyA4KTsKKworCS8qIEJ1cyBhZGRyZXNzIG9mIFNTSSBTVFggcmVnaXN0ZXIgKi8KKwlkbWFfYWRkcl90IHNzaV9zeHhfcGh5cyA9IGRtYV9wcml2YXRlLT5zc2lfc3h4X3BoeXM7CisKKwkvKiBTaXplIG9mIHRoZSBETUEgYnVmZmVyLCBpbiBieXRlcyAqLworCXNpemVfdCBidWZmZXJfc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKKworCS8qIE51bWJlciBvZiBieXRlcyBwZXIgcGVyaW9kICovCisJc2l6ZV90IHBlcmlvZF9zaXplID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOworCisJLyogUG9pbnRlciB0byBuZXh0IHBlcmlvZCAqLworCWRtYV9hZGRyX3QgdGVtcF9hZGRyID0gc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmFkZHI7CisKKwkvKiBQb2ludGVyIHRvIERNQSBjb250cm9sbGVyICovCisJc3RydWN0IGNjc3JfZG1hX2NoYW5uZWwgX19pb21lbSAqZG1hX2NoYW5uZWwgPSBkbWFfcHJpdmF0ZS0+ZG1hX2NoYW5uZWw7CisKKwl1MzIgbXI7IC8qIERNQSBNb2RlIFJlZ2lzdGVyICovCisKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIEluaXRpYWxpemUgb3VyIERNQSB0cmFja2luZyB2YXJpYWJsZXMgKi8KKwlkbWFfcHJpdmF0ZS0+cGVyaW9kX3NpemUgPSBwZXJpb2Rfc2l6ZTsKKwlkbWFfcHJpdmF0ZS0+bnVtX3BlcmlvZHMgPSBwYXJhbXNfcGVyaW9kcyhod19wYXJhbXMpOworCWRtYV9wcml2YXRlLT5kbWFfYnVmX2VuZCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgKyBidWZmZXJfc2l6ZTsKKwlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5cyArCisJCShOVU1fRE1BX0xJTktTICogcGVyaW9kX3NpemUpOworCisJaWYgKGRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPj0gZG1hX3ByaXZhdGUtPmRtYV9idWZfZW5kKQorCQkvKiBUaGlzIGhhcHBlbnMgaWYgdGhlIG51bWJlciBvZiBwZXJpb2RzID09IE5VTV9ETUFfTElOS1MgKi8KKwkJZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXM7CiAKIAltciA9IGluX2JlMzIoJmRtYV9jaGFubmVsLT5tcikgJiB+KENDU1JfRE1BX01SX0JXQ19NQVNLIHwKIAkJICBDQ1NSX0RNQV9NUl9TQUhUU19NQVNLIHwgQ0NTUl9ETUFfTVJfREFIVFNfTUFTSyk7CiAKLQlzd2l0Y2ggKHJ1bnRpbWUtPnNhbXBsZV9iaXRzKSB7CisJLyogRHVlIHRvIGEgcXVpcmsgb2YgdGhlIFNTSSdzIFNUWCByZWdpc3RlciwgdGhlIHRhcmdldCBhZGRyZXNzCisJICogZm9yIHRoZSBETUEgb3BlcmF0aW9ucyBkZXBlbmRzIG9uIHRoZSBzYW1wbGUgc2l6ZS4gIFNvIHdlIGNhbGN1bGF0ZQorCSAqIHRoYXQgb2Zmc2V0IGhlcmUuICBXaGlsZSB3ZSdyZSBhdCBpdCwgYWxzbyB0ZWxsIHRoZSBETUEgY29udHJvbGxlcgorCSAqIGhvdyBtdWNoIGRhdGEgdG8gdHJhbnNmZXIgcGVyIHNhbXBsZS4KKwkgKi8KKwlzd2l0Y2ggKHNhbXBsZV9zaXplKSB7CiAJY2FzZSA4OgogCQltciB8PSBDQ1NSX0RNQV9NUl9EQUhUU18xIHwgQ0NTUl9ETUFfTVJfU0FIVFNfMTsKIAkJc3NpX3N4eF9waHlzICs9IDM7CkBAIC02NDEsMTIgKzYwNCwxMiBAQAogCQltciB8PSBDQ1NSX0RNQV9NUl9EQUhUU180IHwgQ0NTUl9ETUFfTVJfU0FIVFNfNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCiAJCWRldl9lcnIoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwKLQkJCSJ1bnN1cHBvcnRlZCBzYW1wbGUgc2l6ZSAldVxuIiwgcnVudGltZS0+c2FtcGxlX2JpdHMpOworCQkJInVuc3VwcG9ydGVkIHNhbXBsZSBzaXplICV1XG4iLCBzYW1wbGVfc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZyYW1lX3NpemUgPSBydW50aW1lLT5mcmFtZV9iaXRzIC8gODsKIAkvKgogCSAqIEJXQyBzaG91bGQgYWx3YXlzIGJlIGEgbXVsdGlwbGUgb2YgdGhlIGZyYW1lIHNpemUuICBCV0MgZGV0ZXJtaW5lcwogCSAqIGhvdyBtYW55IGJ5dGVzIGFyZSBzZW50L3JlY2VpdmVkIGJlZm9yZSB0aGUgRE1BIGNvbnRyb2xsZXIgY2hlY2tzIHRoZQpAQCAtNjU1LDcgKzYxOCw2IEBACiAJICogY2FwdHVyZSwgdGhlIHJlY2VpdmUgRklGTyBpcyB0cmlnZ2VyZWQgd2hlbiBpdCBjb250YWlucyBvbmUgZnJhbWUsIHNvCiAJICogd2Ugd2FudCB0byByZWNlaXZlIG9uZSBmcmFtZSBhdCBhIHRpbWUuCiAJICovCi0KIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJbXIgfD0gQ0NTUl9ETUFfTVJfQldDKDIgKiBmcmFtZV9zaXplKTsKIAllbHNlCkBAIC02NjMsMTYgKzYyNSw0OCBAQAogCiAJb3V0X2JlMzIoJmRtYV9jaGFubmVsLT5tciwgbXIpOwogCi0JLyoKLQkgKiBQcm9ncmFtIHRoZSBhZGRyZXNzIG9mIHRoZSBETUEgdHJhbnNmZXIgdG8vZnJvbSB0aGUgU1NJLgotCSAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fRE1BX0xJTktTOyBpKyspIHsKIAkJc3RydWN0IGZzbF9kbWFfbGlua19kZXNjcmlwdG9yICpsaW5rID0gJmRtYV9wcml2YXRlLT5saW5rW2ldOwogCi0JCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlsaW5rLT5jb3VudCA9IGNwdV90b19iZTMyKHBlcmlvZF9zaXplKTsKKworCQkvKiBFdmVuIHRob3VnaCB0aGUgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydHMgMzYtYml0IGFkZHJlc3NpbmcsCisJCSAqIGZvciBzaW1wbGljaXR5IHdlIGFsbG93IG9ubHkgMzItYml0IGFkZHJlc3NlcyBmb3IgdGhlIGF1ZGlvCisJCSAqIGJ1ZmZlciBpdHNlbGYuICBUaGlzIHdhcyBlbmZvcmNlZCBpbiBmc2xfZG1hX25ldygpIHdpdGggdGhlCisJCSAqIERNQSBtYXNrLgorCQkgKgorCQkgKiBUaGUgc25vb3AgYml0IHRlbGxzIHRoZSBETUEgY29udHJvbGxlciB3aGV0aGVyIGl0IHNob3VsZCB0ZWxsCisJCSAqIHRoZSBFQ00gdG8gc25vb3AgZHVyaW5nIGEgcmVhZCBvciB3cml0ZSB0byBhbiBhZGRyZXNzLiBGb3IKKwkJICogYXVkaW8sIHdlIHVzZSBETUEgdG8gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIG1lbW9yeSBhbmQgYW4gSS9PCisJCSAqIGRldmljZSAodGhlIFNTSSdzIFNUWDAgb3IgU1JYMCByZWdpc3RlcikuIFNub29waW5nIGlzIG9ubHkKKwkJICogbmVlZGVkIGlmIHRoZXJlIGlzIGEgY2FjaGUsIHNvIHdlIG5lZWQgdG8gc25vb3AgbWVtb3J5CisJCSAqIGFkZHJlc3NlcyBvbmx5LiAgRm9yIHBsYXliYWNrLCB0aGF0IG1lYW5zIHdlIHNub29wIHRoZSBzb3VyY2UKKwkJICogYnV0IG5vdCB0aGUgZGVzdGluYXRpb24uICBGb3IgY2FwdHVyZSwgd2Ugc25vb3AgdGhlCisJCSAqIGRlc3RpbmF0aW9uIGJ1dCBub3QgdGhlIHNvdXJjZS4KKwkJICoKKwkJICogTm90ZSB0aGF0IGZhaWxpbmcgdG8gc25vb3AgcHJvcGVybHkgaXMgdW5saWtlbHkgdG8gY2F1c2UKKwkJICogY2FjaGUgaW5jb2hlcmVuY3kgaWYgdGhlIHBlcmlvZCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZQorCQkgKiBzaXplIG9mIEwxIGNhY2hlLiAgVGhpcyBpcyBiZWNhdXNlIGZpbGxpbmcgaW4gb25lIHBlcmlvZCB3aWxsCisJCSAqIGZsdXNoIG91dCB0aGUgZGF0YSBmb3IgdGhlIHByZXZpb3VzIHBlcmlvZC4gIFNvIGlmIHlvdQorCQkgKiBpbmNyZWFzZWQgcGVyaW9kX2J5dGVzX21pbiB0byBhIGxhcmdlIGVub3VnaCBzaXplLCB5b3UgbWlnaHQKKwkJICogZ2V0IG1vcmUgcGVyZm9ybWFuY2UgYnkgbm90IHNub29waW5nLCBhbmQgeW91J2xsIHN0aWxsIGJlCisJCSAqIG9rYXkuCisJCSAqLworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkJbGluay0+c291cmNlX2FkZHIgPSBjcHVfdG9fYmUzMih0ZW1wX2FkZHIpOworCQkJbGluay0+c291cmNlX2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfU05PT1ApOworCiAJCQlsaW5rLT5kZXN0X2FkZHIgPSBjcHVfdG9fYmUzMihzc2lfc3h4X3BoeXMpOwotCQllbHNlCisJCQlsaW5rLT5kZXN0X2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfTk9TTk9PUCk7CisJCX0gZWxzZSB7CiAJCQlsaW5rLT5zb3VyY2VfYWRkciA9IGNwdV90b19iZTMyKHNzaV9zeHhfcGh5cyk7CisJCQlsaW5rLT5zb3VyY2VfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9OT1NOT09QKTsKKworCQkJbGluay0+ZGVzdF9hZGRyID0gY3B1X3RvX2JlMzIodGVtcF9hZGRyKTsKKwkJCWxpbmstPmRlc3RfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9TTk9PUCk7CisJCX0KKworCQl0ZW1wX2FkZHIgKz0gcGVyaW9kX3NpemU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04MDgsNyArODAyLDYgQEAKIAkuaW9jdGwgIAk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgICAgICA9IGZzbF9kbWFfaHdfcGFyYW1zLAogCS5od19mcmVlCT0gZnNsX2RtYV9od19mcmVlLAotCS5wcmVwYXJlCT0gZnNsX2RtYV9wcmVwYXJlLAogCS5wb2ludGVyCT0gZnNsX2RtYV9wb2ludGVyLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYwppbmRleCBjNmQ2ZWI3Li4xNjliY2EyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYwpAQCAtNzIsNiArNzIsNyBAQAogICogQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyCiAgKiBAcGxheWJhY2s6IHRoZSBudW1iZXIgb2YgcGxheWJhY2sgc3RyZWFtcyBvcGVuZWQKICAqIEBjYXB0dXJlOiB0aGUgbnVtYmVyIG9mIGNhcHR1cmUgc3RyZWFtcyBvcGVuZWQKKyAqIEBhc3luY2hyb25vdXM6IDA9c3luY2hyb25vdXMgbW9kZSwgMT1hc3luY2hyb25vdXMgbW9kZQogICogQGNwdV9kYWk6IHRoZSBDUFUgREFJIGZvciB0aGlzIGRldmljZQogICogQGRldl9hdHRyOiB0aGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUKICAqIEBzdGF0czogU1NJIHN0YXRpc3RpY3MKQEAgLTg2LDYgKzg3LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgaW50IHBsYXliYWNrOwogCXVuc2lnbmVkIGludCBjYXB0dXJlOworCWludCBhc3luY2hyb25vdXM7CiAJc3RydWN0IHNuZF9zb2NfZGFpIGNwdV9kYWk7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CiAKQEAgLTMwMSw5ICszMDMsMTAgQEAKIAkJICoKIAkJICogRklYTUU6IExpdHRsZS1lbmRpYW4gc2FtcGxlcyByZXF1aXJlIGEgZGlmZmVyZW50IHNoaWZ0IGRpcgogCQkgKi8KLQkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX0kyU19NT0RFX01BU0ssCi0JCQlDQ1NSX1NTSV9TQ1JfVEZSX0NMS19ESVMgfAotCQkJQ0NTUl9TU0lfU0NSX0kyU19NT0RFX1NMQVZFIHwgQ0NTUl9TU0lfU0NSX1NZTik7CisJCWNscnNldGJpdHNfYmUzMigmc3NpLT5zY3IsCisJCQlDQ1NSX1NTSV9TQ1JfSTJTX01PREVfTUFTSyB8IENDU1JfU1NJX1NDUl9TWU4sCisJCQlDQ1NSX1NTSV9TQ1JfVEZSX0NMS19ESVMgfCBDQ1NSX1NTSV9TQ1JfSTJTX01PREVfU0xBVkUKKwkJCXwgKHNzaV9wcml2YXRlLT5hc3luY2hyb25vdXMgPyAwIDogQ0NTUl9TU0lfU0NSX1NZTikpOwogCiAJCW91dF9iZTMyKCZzc2ktPnN0Y3IsCiAJCQkgQ0NTUl9TU0lfU1RDUl9UWEJJVDAgfCBDQ1NSX1NTSV9TVENSX1RGRU4wIHwKQEAgLTM4MiwxMCArMzg1LDE1IEBACiAJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKIAkJCWZpcnN0X3J1bnRpbWUtPnJhdGUsIGZpcnN0X3J1bnRpbWUtPnJhdGUpOwogCi0JCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc3Vic3RyZWFtLT5ydW50aW1lLAotCQkJU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTLAotCQkJZmlyc3RfcnVudGltZS0+c2FtcGxlX2JpdHMsCi0JCQlmaXJzdF9ydW50aW1lLT5zYW1wbGVfYml0cyk7CisJCS8qIElmIHdlJ3JlIGluIHN5bmNocm9ub3VzIG1vZGUsIHRoZW4gd2UgbmVlZCB0byBjb25zdHJhaW4KKwkJICogdGhlIHNhbXBsZSBzaXplIGFzIHdlbGwuICBXZSBkb24ndCBzdXBwb3J0IGluZGVwZW5kZW50IHNhbXBsZQorCQkgKiByYXRlcyBpbiBhc3luY2hyb25vdXMgbW9kZS4KKwkJICovCisJCWlmICghc3NpX3ByaXZhdGUtPmFzeW5jaHJvbm91cykKKwkJCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJCVNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUywKKwkJCQlmaXJzdF9ydW50aW1lLT5zYW1wbGVfYml0cywKKwkJCQlmaXJzdF9ydW50aW1lLT5zYW1wbGVfYml0cyk7CiAKIAkJc3NpX3ByaXZhdGUtPnNlY29uZF9zdHJlYW0gPSBzdWJzdHJlYW07CiAJfQpAQCAtNDAwLDcgKzQwOCw3IEBACiB9CiAKIC8qKgotICogZnNsX3NzaV9wcmVwYXJlOiBwcmVwYXJlIHRoZSBTU0kuCisgKiBmc2xfc3NpX2h3X3BhcmFtcyAtIHByb2dyYW0gdGhlIHNhbXBsZSBzaXplCiAgKgogICogTW9zdCBvZiB0aGUgU1NJIHJlZ2lzdGVycyBoYXZlIGJlZW4gcHJvZ3JhbW1lZCBpbiB0aGUgc3RhcnR1cCBmdW5jdGlvbiwKICAqIGJ1dCB0aGUgd29yZCBsZW5ndGggbXVzdCBiZSBwcm9ncmFtbWVkIGhlcmUuICBVbmZvcnR1bmF0ZWx5LCBwcm9ncmFtbWluZwpAQCAtNDEyLDIzICs0MjAsMjcgQEAKICAqIE5vdGU6IFRoZSBTeENDUi5EQyBhbmQgU3hDQ1IuUE0gYml0cyBhcmUgb25seSB1c2VkIGlmIHRoZSBTU0kgaXMgdGhlCiAgKiBjbG9jayBtYXN0ZXIuCiAgKi8KLXN0YXRpYyBpbnQgZnNsX3NzaV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgaW50IGZzbF9zc2lfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCiB7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGZzbF9zc2lfcHJpdmF0ZSAqc3NpX3ByaXZhdGUgPSBydGQtPmRhaS0+Y3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3RydWN0IGNjc3Jfc3NpIF9faW9tZW0gKnNzaSA9IHNzaV9wcml2YXRlLT5zc2k7CisJc3RydWN0IGZzbF9zc2lfcHJpdmF0ZSAqc3NpX3ByaXZhdGUgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoc3Vic3RyZWFtID09IHNzaV9wcml2YXRlLT5maXJzdF9zdHJlYW0pIHsKLQkJdTMyIHdsOworCQlzdHJ1Y3QgY2Nzcl9zc2kgX19pb21lbSAqc3NpID0gc3NpX3ByaXZhdGUtPnNzaTsKKwkJdW5zaWduZWQgaW50IHNhbXBsZV9zaXplID0KKwkJCXNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKSk7CisJCXUzMiB3bCA9IENDU1JfU1NJX1N4Q0NSX1dMKHNhbXBsZV9zaXplKTsKIAogCQkvKiBUaGUgU1NJIHNob3VsZCBhbHdheXMgYmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludHMgKFNTSUVOPTApICovCi0JCXdsID0gQ0NTUl9TU0lfU3hDQ1JfV0woc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KSk7CiAKIAkJLyogSW4gc3luY2hyb25vdXMgbW9kZSwgdGhlIFNTSSB1c2VzIFNUQ0NSIGZvciBjYXB0dXJlICovCi0JCWNscnNldGJpdHNfYmUzMigmc3NpLT5zdGNjciwgQ0NTUl9TU0lfU3hDQ1JfV0xfTUFTSywgd2wpOworCQlpZiAoKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHx8CisJCSAgICAhc3NpX3ByaXZhdGUtPmFzeW5jaHJvbm91cykKKwkJCWNscnNldGJpdHNfYmUzMigmc3NpLT5zdGNjciwKKwkJCQkJQ0NTUl9TU0lfU3hDQ1JfV0xfTUFTSywgd2wpOworCQllbHNlCisJCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c3JjY3IsCisJCQkJCUNDU1JfU1NJX1N4Q0NSX1dMX01BU0ssIHdsKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQ1MiwyOCArNDY0LDMzIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCWNscmJpdHMzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9TU0lFTik7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJY2xyYml0czMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX1NTSUVOKTsKIAkJCXNldGJpdHMzMigmc3NpLT5zY3IsCiAJCQkJQ0NTUl9TU0lfU0NSX1NTSUVOIHwgQ0NTUl9TU0lfU0NSX1RFKTsKIAkJfSBlbHNlIHsKLQkJCWNscmJpdHMzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9TU0lFTik7CisJCQlsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgMTA7CisKIAkJCXNldGJpdHMzMigmc3NpLT5zY3IsCiAJCQkJQ0NTUl9TU0lfU0NSX1NTSUVOIHwgQ0NTUl9TU0lfU0NSX1JFKTsKIAotCQkJLyoKLQkJCSAqIEkgdGhpbmsgd2UgbmVlZCB0aGlzIGRlbGF5IHRvIGFsbG93IHRpbWUgZm9yIHRoZSBTU0kKLQkJCSAqIHRvIHB1dCBkYXRhIGludG8gaXRzIEZJRk8uICBXaXRob3V0IGl0LCBBTFNBIHN0YXJ0cwotCQkJICogdG8gY29tcGxhaW4gYWJvdXQgb3ZlcnJ1bnMuCisJCQkvKiBXYWl0IHVudGlsIHRoZSBTU0kgaGFzIGZpbGxlZCBpdHMgRklGTy4gV2l0aG91dCB0aGlzCisJCQkgKiBkZWxheSwgQUxTQSBjb21wbGFpbnMgYWJvdXQgb3ZlcnJ1bnMuICBXaGVuIHRoZSBGSUZPCisJCQkgKiBpcyBmdWxsLCB0aGUgRE1BIGNvbnRyb2xsZXIgaW5pdGlhdGVzIGl0cyBmaXJzdAorCQkJICogdHJhbnNmZXIuICBVbnRpbCB0aGVuLCBob3dldmVyLCB0aGUgRE1BJ3MgREFSCisJCQkgKiByZWdpc3RlciBpcyB6ZXJvLCB3aGljaCB0cmFuc2xhdGVzIHRvIGFuCisJCQkgKiBvdXQtb2YtYm91bmRzIHBvaW50ZXIuICBUaGlzIG1ha2VzIEFMU0EgdGhpbmsgYW4KKwkJCSAqIG92ZXJydW4gaGFzIG9jY3VycmVkLgogCQkJICovCi0JCQltZGVsYXkoMSk7CisJCQl3aGlsZSAoIShpbl9iZTMyKCZzc2ktPnNpc3IpICYgQ0NTUl9TU0lfU0lTUl9SRkYwKSAmJgorCQkJICAgICAgIChqaWZmaWVzIDwgdGltZW91dCkpOworCQkJaWYgKCEoaW5fYmUzMigmc3NpLT5zaXNyKSAmIENDU1JfU1NJX1NJU1JfUkZGMCkpCisJCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKIAkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCQljbHJiaXRzMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfVEUpOwpAQCAtNTYzLDYgKzU4MCwxNSBAQAogLyoqCiAgKiBmc2xfc3NpX2RhaV90ZW1wbGF0ZTogdGVtcGxhdGUgQ1BVIERBSSBmb3IgdGhlIFNTSQogICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBmc2xfc3NpX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBmc2xfc3NpX3N0YXJ0dXAsCisJLmh3X3BhcmFtcwk9IGZzbF9zc2lfaHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IGZzbF9zc2lfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBmc2xfc3NpX3RyaWdnZXIsCisJLnNldF9zeXNjbGsJPSBmc2xfc3NpX3NldF9zeXNjbGssCisJLnNldF9mbXQJPSBmc2xfc3NpX3NldF9mbXQsCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIGZzbF9zc2lfZGFpX3RlbXBsYXRlID0gewogCS5wbGF5YmFjayA9IHsKIAkJLyogVGhlIFNTSSBkb2VzIG5vdCBzdXBwb3J0IG1vbmF1cmFsIGF1ZGlvLiAqLwpAQCAtNTc3LDE0ICs2MDMsNyBAQAogCQkucmF0ZXMgPSBGU0xTU0lfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IEZTTFNTSV9JMlNfRk9STUFUUywKIAl9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gZnNsX3NzaV9zdGFydHVwLAotCQkucHJlcGFyZSA9IGZzbF9zc2lfcHJlcGFyZSwKLQkJLnNodXRkb3duID0gZnNsX3NzaV9zaHV0ZG93biwKLQkJLnRyaWdnZXIgPSBmc2xfc3NpX3RyaWdnZXIsCi0JCS5zZXRfc3lzY2xrID0gZnNsX3NzaV9zZXRfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IGZzbF9zc2lfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmZnNsX3NzaV9kYWlfb3BzLAogfTsKIAogLyoqCkBAIC02NTQsNiArNjczLDcgQEAKIAlzc2lfcHJpdmF0ZS0+c3NpX3BoeXMgPSBzc2lfaW5mby0+c3NpX3BoeXM7CiAJc3NpX3ByaXZhdGUtPmlycSA9IHNzaV9pbmZvLT5pcnE7CiAJc3NpX3ByaXZhdGUtPmRldiA9IHNzaV9pbmZvLT5kZXY7CisJc3NpX3ByaXZhdGUtPmFzeW5jaHJvbm91cyA9IHNzaV9pbmZvLT5hc3luY2hyb25vdXM7CiAKIAlzc2lfcHJpdmF0ZS0+ZGV2LT5kcml2ZXJfZGF0YSA9IGZzbF9zc2lfZGFpOwogCkBAIC03MDQsNiArNzI0LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3NpX2Rlc3Ryb3lfZGFpKTsKIAorc3RhdGljIGludCBfX2luaXQgZnNsX3NzaV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZXNjYWxlIFN5bmNocm9ub3VzIFNlcmlhbCBJbnRlcmZhY2UgKFNTSSkgQVNvQyBEcml2ZXJcbiIpOworCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChmc2xfc3NpX2luaXQpOworCiBNT0RVTEVfQVVUSE9SKCJUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZSAoU1NJKSBBU29DIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmggYi9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuaAppbmRleCA4M2I0NGQ3Li5lYWRlMDFmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuaAorKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuaApAQCAtMjA4LDYgKzIwOCw3IEBACiAgKiBzc2lfcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU1NJIHJlZ2lzdGVycwogICogaXJxOiBJUlEgb2YgdGhpcyBTU0kKICAqIGRldjogc3RydWN0IGRldmljZSwgdXNlZCB0byBjcmVhdGUgdGhlIHN5c2ZzIHN0YXRpc3RpY3MgZmlsZQorICogYXN5bmNocm9ub3VzOiAwPXN5bmNocm9ub3VzIG1vZGUsIDE9YXN5bmNocm9ub3VzIG1vZGUKICovCiBzdHJ1Y3QgZnNsX3NzaV9pbmZvIHsKIAl1bnNpZ25lZCBpbnQgaWQ7CkBAIC0yMTUsNiArMjE2LDcgQEAKIAlkbWFfYWRkcl90IHNzaV9waHlzOwogCXVuc2lnbmVkIGludCBpcnE7CiAJc3RydWN0IGRldmljZSAqZGV2OworCWludCBhc3luY2hyb25vdXM7CiB9OwogCiBzdHJ1Y3Qgc25kX3NvY19kYWkgKmZzbF9zc2lfY3JlYXRlX2RhaShzdHJ1Y3QgZnNsX3NzaV9pbmZvICpzc2lfaW5mbyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5jIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYwppbmRleCA5ZWIxY2UxLi4zYWE3MjlkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5jCisrKyBiL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMKQEAgLTQ2OCw2ICs0NjgsMTYgQEAKIC8qKgogICogcHNjX2kyc19kYWlfdGVtcGxhdGU6IHRlbXBsYXRlIENQVSBEaWdpdGFsIEF1ZGlvIEludGVyZmFjZQogICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBwc2NfaTJzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBwc2NfaTJzX3N0YXJ0dXAsCisJLmh3X3BhcmFtcwk9IHBzY19pMnNfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gcHNjX2kyc19od19mcmVlLAorCS5zaHV0ZG93bgk9IHBzY19pMnNfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBwc2NfaTJzX3RyaWdnZXIsCisJLnNldF9zeXNjbGsJPSBwc2NfaTJzX3NldF9zeXNjbGssCisJLnNldF9mbXQJPSBwc2NfaTJzX3NldF9mbXQsCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIHBzY19pMnNfZGFpX3RlbXBsYXRlID0gewogCS5wbGF5YmFjayA9IHsKIAkJLmNoYW5uZWxzX21pbiA9IDIsCkBAIC00ODEsMTUgKzQ5MSw3IEBACiAJCS5yYXRlcyA9IFBTQ19JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gUFNDX0kyU19GT1JNQVRTLAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBwc2NfaTJzX3N0YXJ0dXAsCi0JCS5od19wYXJhbXMgPSBwc2NfaTJzX2h3X3BhcmFtcywKLQkJLmh3X2ZyZWUgPSBwc2NfaTJzX2h3X2ZyZWUsCi0JCS5zaHV0ZG93biA9IHBzY19pMnNfc2h1dGRvd24sCi0JCS50cmlnZ2VyID0gcHNjX2kyc190cmlnZ2VyLAotCQkuc2V0X3N5c2NsayA9IHBzY19pMnNfc2V0X3N5c2NsaywKLQkJLnNldF9mbXQgPSBwc2NfaTJzX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJnBzY19pMnNfZGFpX29wcywKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYyBiL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKaW5kZXggYWNmMzlhNi4uZWY2N2QxYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYworKysgYi9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCkBAIC0zNTMsNiArMzUzLDExIEBACiAJfQogCXNzaV9pbmZvLmlycSA9IG1hY2hpbmVfZGF0YS0+c3NpX2lycTsKIAorCS8qIERvIHdlIHdhbnQgdG8gdXNlIGFzeW5jaHJvbm91cyBtb2RlPyAqLworCXNzaV9pbmZvLmFzeW5jaHJvbm91cyA9CisJCW9mX2ZpbmRfcHJvcGVydHkobnAsICJmc2wsc3NpLWFzeW5jaHJvbm91cyIsIE5VTEwpID8gMSA6IDA7CisJaWYgKHNzaV9pbmZvLmFzeW5jaHJvbm91cykKKwkJZGV2X2luZm8oJm9mZGV2LT5kZXYsICJ1c2luZyBhc3luY2hyb25vdXMgbW9kZVxuIik7CiAKIAkvKiBNYXAgdGhlIGdsb2JhbCB1dGlsaXRpZXMgcmVnaXN0ZXJzLiAqLwogCWd1dHNfbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzg2MTAtZ3V0cyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggNGY3ZjA0MC4uNjc1NzMyZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC04LDcgKzgsNyBAQAogCiBjb25maWcgU05EX09NQVBfU09DX044MTAKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE5va2lhIE44MTAiCi0JZGVwZW5kcyBvbiBTTkRfT01BUF9TT0MgJiYgTUFDSF9OT0tJQV9OODEwCisJZGVwZW5kcyBvbiBTTkRfT01BUF9TT0MgJiYgTUFDSF9OT0tJQV9OODEwICYmIEkyQwogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgT01BUF9NVVgKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMzWApAQCAtMTcsNyArMTcsNyBAQAogCiBjb25maWcgU05EX09NQVBfU09DX09TSzU5MTIKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIG9tYXAgb3NrNTkxMiIKLQlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX09NQVBfT1NLCisJZGVwZW5kcyBvbiBTTkRfT01BUF9TT0MgJiYgTUFDSF9PTUFQX09TSyAmJiBJMkMKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDMjMKIAloZWxwCkBAIC01NSwzICs1NSwxMyBAQAogCXNlbGVjdCBTTkRfU09DX1RXTDQwMzAKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBPTUFQMyBQYW5kb3JhLgorCitjb25maWcgU05EX09NQVBfU09DX09NQVAzX0JFQUdMRQorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgT01BUDMgQmVhZ2xlIgorCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFICYmIFNORF9PTUFQX1NPQyAmJiBNQUNIX09NQVAzX0JFQUdMRQorCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKKwlzZWxlY3QgU05EX1NPQ19UV0w0MDMwCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgQmVhZ2xlYm9hcmQuCisKKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQppbmRleCA3NmZlZGQ5Li4wYzllNGFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQAogc25kLXNvYy1vbWFwMmV2bS1vYmpzIDo9IG9tYXAyZXZtLm8KIHNuZC1zb2Mtc2RwMzQzMC1vYmpzIDo9IHNkcDM0MzAubwogc25kLXNvYy1vbWFwM3BhbmRvcmEtb2JqcyA6PSBvbWFwM3BhbmRvcmEubworc25kLXNvYy1vbWFwM2JlYWdsZS1vYmpzIDo9IG9tYXAzYmVhZ2xlLm8KIAogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19OODEwKSArPSBzbmQtc29jLW44MTAubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PU0s1OTEyKSArPSBzbmQtc29jLW9zazU5MTIubwpAQCAtMTksMyArMjAsNCBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUDJFVk0pICs9IHNuZC1zb2Mtb21hcDJldm0ubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19TRFAzNDMwKSArPSBzbmQtc29jLXNkcDM0MzAubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19QQU5ET1JBKSArPSBzbmQtc29jLW9tYXAzcGFuZG9yYS5vCitvYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAzX0JFQUdMRSkgKz0gc25kLXNvYy1vbWFwM2JlYWdsZS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9uODEwLmMgYi9zb3VuZC9zb2Mvb21hcC9uODEwLmMKaW5kZXggMjU1OTNmZS4uYTZkMTE3OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvbjgxMC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL244MTAuYwpAQCAtNDAsNiArNDAsMTMgQEAKICNkZWZpbmUgTjgxMF9IRUFEU0VUX0FNUF9HUElPCTEwCiAjZGVmaW5lIE44MTBfU1BFQUtFUl9BTVBfR1BJTwkxMDEKIAorZW51bSB7CisJTjgxMF9KQUNLX0RJU0FCTEVELAorCU44MTBfSkFDS19IUCwKKwlOODEwX0pBQ0tfSFMsCisJTjgxMF9KQUNLX01JQywKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrICpzeXNfY2xrb3V0MjsKIHN0YXRpYyBzdHJ1Y3QgY2xrICpzeXNfY2xrb3V0Ml9zcmM7CiBzdGF0aWMgc3RydWN0IGNsayAqZnVuYzk2bV9jbGs7CkBAIC01MCwxNSArNTcsMzIgQEAKIAogc3RhdGljIHZvaWQgbjgxMF9leHRfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJaW50IGhwID0gMCwgbGluZTFsID0gMDsKKworCXN3aXRjaCAobjgxMF9qYWNrX2Z1bmMpIHsKKwljYXNlIE44MTBfSkFDS19IUzoKKwkJbGluZTFsID0gMTsKKwljYXNlIE44MTBfSkFDS19IUDoKKwkJaHAgPSAxOworCQlicmVhazsKKwljYXNlIE44MTBfSkFDS19NSUM6CisJCWxpbmUxbCA9IDE7CisJCWJyZWFrOworCX0KKwogCWlmIChuODEwX3Nwa19mdW5jKQogCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKIAllbHNlCiAJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKIAotCWlmIChuODEwX2phY2tfZnVuYykKKwlpZiAoaHApCiAJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKIAllbHNlCiAJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7CisJaWYgKGxpbmUxbCkKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJMSU5FMUwiKTsKKwllbHNlCisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxJTkUxTCIpOwogCiAJaWYgKG44MTBfZG1pY19mdW5jKQogCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkRNaWMiKTsKQEAgLTcyLDcgKzk2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLAogCQkJCSAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAyLCAyKTsKQEAgLTIyOSw3ICsyNTMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNwa19mdW5jdGlvbltdID0geyJPZmYiLCAiT24ifTsKLXN0YXRpYyBjb25zdCBjaGFyICpqYWNrX2Z1bmN0aW9uW10gPSB7Ik9mZiIsICJIZWFkcGhvbmUifTsKK3N0YXRpYyBjb25zdCBjaGFyICpqYWNrX2Z1bmN0aW9uW10gPSB7Ik9mZiIsICJIZWFkcGhvbmUiLCAiSGVhZHNldCIsICJNaWMifTsKIHN0YXRpYyBjb25zdCBjaGFyICppbnB1dF9mdW5jdGlvbltdID0geyJBREMiLCAiRGlnaXRhbCBNaWMifTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbjgxMF9lbnVtW10gPSB7CiAJU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKHNwa19mdW5jdGlvbiksIHNwa19mdW5jdGlvbiksCkBAIC0yNDgsMjAgKzI3MiwyMyBAQAogCiBzdGF0aWMgaW50IG44MTBfYWljMzNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJLyogTm90IGNvbm5lY3RlZCAqLwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PX0xPVVQiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBMQ09NIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQUkNPTSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMzTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMzUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMVIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTJMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUyUiIpOwogCiAJLyogQWRkIE44MTAgc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaWMzM19uODEwX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZhaWMzM19uODEwX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhaWMzM19uODEwX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWljMzNfbjgxMF9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIE44MTAgc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFpYzMzX2RhcG1fd2lkZ2V0cywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwppbmRleCAwNWRkNWFiLi5kNjg4MmJlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCkBAIC00NjEsNiArNDYxLDE2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgb21hcF9tY2JzcF9kYWlfb3BzID0geworCS5zdGFydHVwCT0gb21hcF9tY2JzcF9kYWlfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBvbWFwX21jYnNwX2RhaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IG9tYXBfbWNic3BfZGFpX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IG9tYXBfbWNic3BfZGFpX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gb21hcF9tY2JzcF9kYWlfc2V0X2Nsa2RpdiwKKwkuc2V0X3N5c2Nsawk9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfc3lzY2xrLAorfTsKKwogI2RlZmluZSBPTUFQX01DQlNQX0RBSV9CVUlMREVSKGxpbmtfaWQpCQkJCVwKIHsJCQkJCQkJCVwKIAkubmFtZSA9ICJvbWFwLW1jYnNwLWRhaS0iI2xpbmtfaWQsCQkJXApAQCAtNDc3LDE1ICs0ODcsNyBAQAogCQkucmF0ZXMgPSBPTUFQX01DQlNQX1JBVEVTLAkJCVwKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwJCVwKIAl9LAkJCQkJCQlcCi0JLm9wcyA9IHsJCQkJCQlcCi0JCS5zdGFydHVwID0gb21hcF9tY2JzcF9kYWlfc3RhcnR1cCwJCVwKLQkJLnNodXRkb3duID0gb21hcF9tY2JzcF9kYWlfc2h1dGRvd24sCQlcCi0JCS50cmlnZ2VyID0gb21hcF9tY2JzcF9kYWlfdHJpZ2dlciwJCVwKLQkJLmh3X3BhcmFtcyA9IG9tYXBfbWNic3BfZGFpX2h3X3BhcmFtcywJCVwKLQkJLnNldF9mbXQgPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX2ZtdCwJCVwKLQkJLnNldF9jbGtkaXYgPSBvbWFwX21jYnNwX2RhaV9zZXRfY2xrZGl2LAlcCi0JCS5zZXRfc3lzY2xrID0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9zeXNjbGssCVwKLQl9LAkJCQkJCQlcCisJLm9wcyA9ICZvbWFwX21jYnNwX2RhaV9vcHMsCQkJCVwKIAkucHJpdmF0ZV9kYXRhID0gJm1jYnNwX2RhdGFbKGxpbmtfaWQpXS5idXNfaWQsCQlcCiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCmluZGV4IGRkM2JiMjkuLjhlMTQzMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgb21hcF9wY21fb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBvbWFwX3BjbV9vcHMgPSB7CiAJLm9wZW4JCT0gb21hcF9wY21fb3BlbiwKIAkuY2xvc2UJCT0gb21hcF9wY21fY2xvc2UsCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwppbmRleCBmY2MyZjVkLi5mZTI4MmQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgb21hcDNwYW5kb3JhX2luX2RhcG1fd2lkZ2V0c1tdID0gewotCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoSW50ZXJuYWwpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChpbnRlcm5hbCkiLCBOVUxMKSwKIAlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKGV4dGVybmFsKSIsIE5VTEwpLAogCVNORF9TT0NfREFQTV9MSU5FKCJMaW5lIEluIiwgTlVMTCksCiB9OwpAQCAtMTU1LDE2ICsxNTUsMzMgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIG9tYXAzcGFuZG9yYV9pbl9tYXBbXSA9IHsKLQl7IklOTCIsIE5VTEwsICJMaW5lIEluIn0sCi0JeyJJTlIiLCBOVUxMLCAiTGluZSBJbiJ9LAotCXsiSU5MIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwpIn0sCi0JeyJJTlIiLCBOVUxMLCAiTWljIChleHRlcm5hbCkifSwKKwl7IkFVWEwiLCBOVUxMLCAiTGluZSBJbiJ9LAorCXsiQVVYUiIsIE5VTEwsICJMaW5lIEluIn0sCisKKwl7Ik1BSU5NSUMiLCBOVUxMLCAiTWljIEJpYXMgMSJ9LAorCXsiTWljIEJpYXMgMSIsIE5VTEwsICJNaWMgKGludGVybmFsKSJ9LAorCisJeyJTVUJNSUMiLCBOVUxMLCAiTWljIEJpYXMgMiJ9LAorCXsiTWljIEJpYXMgMiIsIE5VTEwsICJNaWMgKGV4dGVybmFsKSJ9LAogfTsKIAogc3RhdGljIGludCBvbWFwM3BhbmRvcmFfb3V0X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCWludCByZXQ7CiAKKwkvKiBBbGwgVFdMNDAzMCBvdXRwdXQgcGlucyBhcmUgZmxvYXRpbmcgKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkVBUlBJRUNFIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRVIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFNPTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU09SIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZSIik7CisKIAlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0cywKIAkJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzKSk7CiAJaWYgKHJldCA8IDApCkBAIC0xODAsMTggKzE5NywxMSBAQAogewogCWludCByZXQ7CiAKLQkvKiBBbGwgVFdMNDAzMCBvdXRwdXQgcGlucyBhcmUgZmxvYXRpbmcgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUTCIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRSIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkVBUlBJRUNFIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFTCIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRVIiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFNPTCIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU09SIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVEwiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUUiIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRkwiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZSIiksCisJLyogTm90IGNvbW5uZWN0ZWQgKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFNNSUMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTUlDIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMwIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMxIik7CiAKIAlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBvbWFwM3BhbmRvcmFfaW5fZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX2luX2RhcG1fd2lkZ2V0cykpOwpAQCAtMjUxLDEwICsyNjEsOSBAQAogewogCWludCByZXQ7CiAKLQlpZiAoIW1hY2hpbmVfaXNfb21hcDNfcGFuZG9yYSgpKSB7Ci0JCXByX2RlYnVnKFBSRUZJWCAiTm90IE9NQVAzIFBhbmRvcmFcbiIpOworCWlmICghbWFjaGluZV9pc19vbWFwM19wYW5kb3JhKCkpCiAJCXJldHVybiAtRU5PREVWOwotCX0KKwogCXByX2luZm8oIk9NQVAzIFBhbmRvcmEgU29DIGluaXRcbiIpOwogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sICJkYWNfcG93ZXIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYyBiL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYwppbmRleCBjZDQxYTk0Li5hOTUyYTRlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKKysrIGIvc291bmQvc29jL29tYXAvb3NrNTkxMi5jCkBAIC0xODYsMTMgKzE4Niw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmIChjbGtfZ2V0X3VzZWNvdW50KHRsdjMyMGFpYzIzX21jbGspID4gMCkgewotCQkvKiBNQ0xLIGlzIGFscmVhZHkgaW4gdXNlICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJNQ0xLIGluIHVzZSBhdCAlZCBIei4gV2UgY2hhbmdlIGl0IHRvICVkIEh6XG4iLAotCQkgICAgICAgKHVpbnQpIGNsa19nZXRfcmF0ZSh0bHYzMjBhaWMyM19tY2xrKSwgQ09ERUNfQ0xPQ0spOwotCX0KLQogCS8qCiAJICogQ29uZmlndXJlIDEyIE1IeiBvdXRwdXQgb24gTUNMSy4KIAkgKi8KQEAgLTIwNSw5ICsxOTgsOCBAQAogCQl9CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiTUNMSyA9ICVkIFslZF0sIHVzZWNvdW50ID0gJWRcbiIsCi0JICAgICAgICh1aW50KSBjbGtfZ2V0X3JhdGUodGx2MzIwYWljMjNfbWNsayksIENPREVDX0NMT0NLLAotCSAgICAgICBjbGtfZ2V0X3VzZWNvdW50KHRsdjMyMGFpYzIzX21jbGspKTsKKwlwcmludGsoS0VSTl9JTkZPICJNQ0xLID0gJWQgWyVkXVxuIiwKKwkgICAgICAgKHVpbnQpIGNsa19nZXRfcmF0ZSh0bHYzMjBhaWMyM19tY2xrKSwgQ09ERUNfQ0xPQ0spOwogCiAJcmV0dXJuIDA7CiBlcnIxOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvc2RwMzQzMC5jIGIvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCmluZGV4IGUyMjZmYTcuLjEwZjFjODYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYworKysgYi9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzgsNiArMzksOCBAQAogI2luY2x1ZGUgIm9tYXAtcGNtLmgiCiAjaW5jbHVkZSAiLi4vY29kZWNzL3R3bDQwMzAuaCIKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19zZHAzNDMwOworCiBzdGF0aWMgaW50IHNkcDM0MzBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewpAQCAtODEsMTIgKzg0LDEyMSBAQAogCS5od19wYXJhbXMgPSBzZHAzNDMwX2h3X3BhcmFtcywKIH07CiAKKy8qIEhlYWRzZXQgamFjayAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgaHNfamFjazsKKworLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiBEQVBNIHBpbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiBoc19qYWNrX3BpbnNbXSA9IHsKKwl7CisJCS5waW4gPSAiSGVhZHNldCBNaWMiLAorCQkubWFzayA9IFNORF9KQUNLX01JQ1JPUEhPTkUsCisJfSwKKwl7CisJCS5waW4gPSAiSGVhZHNldCBTdGVyZW9waG9uZSIsCisJCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FLAorCX0sCit9OworCisvKiBIZWFkc2V0IGphY2sgZGV0ZWN0aW9uIGdwaW9zICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19ncGlvIGhzX2phY2tfZ3Bpb3NbXSA9IHsKKwl7CisJCS5ncGlvID0gKE9NQVBfTUFYX0dQSU9fTElORVMgKyAyKSwKKwkJLm5hbWUgPSAiaHNkZXQtZ3BpbyIsCisJCS5yZXBvcnQgPSBTTkRfSkFDS19IRUFEU0VULAorCQkuZGVib3VuY2VfdGltZSA9IDIwMCwKKwl9LAorfTsKKworLyogU0RQMzQzMCBtYWNoaW5lIERBUE0gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzZHAzNDMwX3R3bDQwMzBfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX01JQygiRXh0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIkV4dCBTcGsiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9IUCgiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogRXh0ZXJuYWwgTWljczogTUFJTk1JQywgU1VCTUlDIHdpdGggYmlhcyovCisJeyJNQUlOTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDEifSwKKwl7IlNVQk1JQyIsIE5VTEwsICJNaWMgQmlhcyAyIn0sCisJeyJNaWMgQmlhcyAxIiwgTlVMTCwgIkV4dCBNaWMifSwKKwl7Ik1pYyBCaWFzIDIiLCBOVUxMLCAiRXh0IE1pYyJ9LAorCisJLyogRXh0ZXJuYWwgU3BlYWtlcnM6IEhGTCwgSEZSICovCisJeyJFeHQgU3BrIiwgTlVMTCwgIkhGTCJ9LAorCXsiRXh0IFNwayIsIE5VTEwsICJIRlIifSwKKworCS8qIEhlYWRzZXQgTWljOiBIU01JQyB3aXRoIGJpYXMgKi8KKwl7IkhTTUlDIiwgTlVMTCwgIkhlYWRzZXQgTWljIEJpYXMifSwKKwl7IkhlYWRzZXQgTWljIEJpYXMiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKKworCS8qIEhlYWRzZXQgU3RlcmVvcGhvbmUgKEhlYWRwaG9uZSk6IEhTT0wsIEhTT1IgKi8KKwl7IkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMLCAiSFNPTCJ9LAorCXsiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwsICJIU09SIn0sCit9OworCitzdGF0aWMgaW50IHNkcDM0MzBfdHdsNDAzMF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgcmV0OworCisJLyogQWRkIFNEUDM0MzAgc3BlY2lmaWMgd2lkZ2V0cyAqLworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHNkcDM0MzBfdHdsNDAzMF9kYXBtX3dpZGdldHMsCisJCQkJQVJSQVlfU0laRShzZHAzNDMwX3R3bDQwMzBfZGFwbV93aWRnZXRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNldCB1cCBTRFAzNDMwIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCS8qIFNEUDM0MzAgY29ubmVjdGVkIHBpbnMgKi8KKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgU3RlcmVvcGhvbmUiKTsKKworCS8qIFRXTDQwMzAgbm90IGNvbm5lY3RlZCBwaW5zICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkFVWEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQVVYUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRNSUMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzEiKTsKKworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKTsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiAqLworCXJldCA9IHNuZF9zb2NfamFja19uZXcoJnNuZF9zb2Nfc2RwMzQzMCwgIkhlYWRzZXQgSmFjayIsCisJCQkJU05EX0pBQ0tfSEVBRFNFVCwgJmhzX2phY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2phY2tfYWRkX3BpbnMoJmhzX2phY2ssIEFSUkFZX1NJWkUoaHNfamFja19waW5zKSwKKwkJCQloc19qYWNrX3BpbnMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZoc19qYWNrLCBBUlJBWV9TSVpFKGhzX2phY2tfZ3Bpb3MpLAorCQkJCWhzX2phY2tfZ3Bpb3MpOworCisJcmV0dXJuIHJldDsKK30KKwogLyogRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2RwMzQzMF9kYWkgPSB7CiAJLm5hbWUgPSAiVFdMNDAzMCIsCiAJLnN0cmVhbV9uYW1lID0gIlRXTDQwMzAiLAogCS5jcHVfZGFpID0gJm9tYXBfbWNic3BfZGFpWzBdLAogCS5jb2RlY19kYWkgPSAmdHdsNDAzMF9kYWksCisJLmluaXQgPSBzZHAzNDMwX3R3bDQwMzBfaW5pdCwKIAkub3BzID0gJnNkcDM0MzBfb3BzLAogfTsKIApAQCAtMTQyLDYgKzI1NCw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzZHAzNDMwX3NvY19leGl0KHZvaWQpCiB7CisJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoJmhzX2phY2ssIEFSUkFZX1NJWkUoaHNfamFja19ncGlvcyksCisJCQkJaHNfamFja19ncGlvcyk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZHAzNDMwX3NuZF9kZXZpY2UpOwogfQogbW9kdWxlX2V4aXQoc2RwMzQzMF9zb2NfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL0tjb25maWcgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKaW5kZXggZjgyZTEwNi4uNTk5OGFiMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwpAQCAtNjEsNiArNjEsMjQgQEAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gU2hhcnAKIAkgIFphdXJ1cyBTTC1DNjAwMHggbW9kZWxzIChUb3NhKS4KIAorY29uZmlnIFNORF9QWEEyWFhfU09DX0U3NDAKKwl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgZTc0MCIKKwlkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfRTc0MAorCXNlbGVjdCBTTkRfU09DX1dNOTcwNQorCXNlbGVjdCBTTkRfUFhBMlhYX1NPQ19BQzk3CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKKwkgIHRvc2hpYmEgZTc0MCBQREEKKworY29uZmlnIFNORF9QWEEyWFhfU09DX0U3NTAKKwl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgZTc1MCIKKwlkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfRTc1MAorCXNlbGVjdCBTTkRfU09DX1dNOTcwNQorCXNlbGVjdCBTTkRfUFhBMlhYX1NPQ19BQzk3CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKKwkgIHRvc2hpYmEgZTc1MCBQREEKKwogY29uZmlnIFNORF9QWEEyWFhfU09DX0U4MDAKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgZTgwMCIKIAlkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfRTgwMApAQCAtOTcsMyArMTE1LDEyIEBACiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKIAkgIE1hcnZlbGwgWnlsb25pdGUgcmVmZXJlbmNlIHBsYXRmb3JtLgorCitjb25maWcgU05EX1BYQTJYWF9TT0NfTUlPQTcwMQorICAgICAgICB0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE1JTyBBNzAxIgorICAgICAgICBkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfTUlPQTcwMQorICAgICAgICBzZWxlY3QgU05EX1BYQTJYWF9TT0NfQUM5NworICAgICAgICBzZWxlY3QgU05EX1NPQ19XTTk3MTMKKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCisgICAgICAgICAgTUlPIEE3MDEuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL01ha2VmaWxlIGIvc291bmQvc29jL3B4YS9NYWtlZmlsZQppbmRleCAwOGE5ZjI3Li44ZWQ4ODFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUKQEAgLTEzLDE3ICsxMywyMyBAQAogc25kLXNvYy1jb3JnaS1vYmpzIDo9IGNvcmdpLm8KIHNuZC1zb2MtcG9vZGxlLW9ianMgOj0gcG9vZGxlLm8KIHNuZC1zb2MtdG9zYS1vYmpzIDo9IHRvc2Eubworc25kLXNvYy1lNzQwLW9ianMgOj0gZTc0MF93bTk3MDUubworc25kLXNvYy1lNzUwLW9ianMgOj0gZTc1MF93bTk3MDUubwogc25kLXNvYy1lODAwLW9ianMgOj0gZTgwMF93bTk3MTIubwogc25kLXNvYy1zcGl0ei1vYmpzIDo9IHNwaXR6Lm8KIHNuZC1zb2MtZW0teDI3MC1vYmpzIDo9IGVtLXgyNzAubwogc25kLXNvYy1wYWxtMjd4LW9ianMgOj0gcGFsbTI3eC5vCiBzbmQtc29jLXp5bG9uaXRlLW9ianMgOj0genlsb25pdGUubworc25kLXNvYy1taW9hNzAxLW9ianMgOj0gbWlvYTcwMV93bTk3MTMubwogCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfQ09SR0kpICs9IHNuZC1zb2MtY29yZ2kubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1BPT0RMRSkgKz0gc25kLXNvYy1wb29kbGUubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1RPU0EpICs9IHNuZC1zb2MtdG9zYS5vCitvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRTc0MCkgKz0gc25kLXNvYy1lNzQwLm8KK29iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FNzUwKSArPSBzbmQtc29jLWU3NTAubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0U4MDApICs9IHNuZC1zb2MtZTgwMC5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfU1BJVFopICs9IHNuZC1zb2Mtc3BpdHoubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0VNX1gyNzApICs9IHNuZC1zb2MtZW0teDI3MC5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfUEFMTTI3WCkgKz0gc25kLXNvYy1wYWxtMjd4Lm8KK29iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19NSU9BNzAxKSArPSBzbmQtc29jLW1pb2E3MDEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfWllMT05JVEUpICs9IHNuZC1zb2Mtenlsb25pdGUubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9jb3JnaS5jIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCmluZGV4IDFiYTI1YTUuLjAyMjYzZTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYworKysgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtMTAwLDcgKzEwMSw3IEBACiBzdGF0aWMgaW50IGNvcmdpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAljb3JnaV9leHRfY29udHJvbChjb2RlYyk7CkBAIC0yNzUsMTggKzI3NiwxNiBAQAogICovCiBzdGF0aWMgaW50IGNvcmdpX3dtODczMV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTExJTkVJTiIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSTElORUlOIik7CiAKIAkvKiBBZGQgY29yZ2kgc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfY29yZ2lfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJndtODczMV9jb3JnaV9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzMxX2NvcmdpX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzMxX2NvcmdpX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBBZGQgY29yZ2kgc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODczMV9kYXBtX3dpZGdldHMsCkBAIC0zMTcsMTkgKzMxNiw0NCBAQAogCS5udW1fbGlua3MgPSAxLAogfTsKIAotLyogY29yZ2kgYXVkaW8gcHJpdmF0ZSBkYXRhICovCi1zdGF0aWMgc3RydWN0IHdtODczMV9zZXR1cF9kYXRhIGNvcmdpX3dtODczMV9zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDAsCi0JLmkyY19hZGRyZXNzID0gMHgxYiwKLX07Ci0KIC8qIGNvcmdpIGF1ZGlvIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBjb3JnaV9zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZzbmRfc29jX2NvcmdpLAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCi0JLmNvZGVjX2RhdGEgPSAmY29yZ2lfd204NzMxX3NldHVwLAogfTsKIAorLyoKKyAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgorICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQorICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KKyAqLworc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSAweDFiOworCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY29yZ2lfc25kX2RldmljZTsKIAogc3RhdGljIGludCBfX2luaXQgY29yZ2lfaW5pdCh2b2lkKQpAQCAtMzQwLDYgKzM2NCwxMCBAQAogCSAgICAgIG1hY2hpbmVfaXNfaHVza3koKSkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcmV0ID0gd204NzMxX2kyY19yZWdpc3RlcigpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwogCWNvcmdpX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIWNvcmdpX3NuZF9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jIGIvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZDJmODkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBlNzQwLXdtOTcwNS5jICAtLSAgU29DIGF1ZGlvIGZvciBlNzQwCisgKgorICogQ29weXJpZ2h0IDIwMDcgKGMpIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIE9OTFkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcwNS5oIgorI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKKyNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgorCisKKyNkZWZpbmUgRTc0MF9BVURJT19PVVQgMQorI2RlZmluZSBFNzQwX0FVRElPX0lOICAyCisKK3N0YXRpYyBpbnQgZTc0MF9hdWRpb19wb3dlcjsKKworc3RhdGljIHZvaWQgZTc0MF9zeW5jX2F1ZGlvX3Bvd2VyKGludCBzdGF0dXMpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX1dNOTcwNV9uQVZERDIsICFzdGF0dXMpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9BTVBfT04sIChzdGF0dXMgJiBFNzQwX0FVRElPX09VVCkgPyAxIDogMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX01JQ19PTiwgKHN0YXR1cyAmIEU3NDBfQVVESU9fSU4pID8gMSA6IDApOworfQorCitzdGF0aWMgaW50IGU3NDBfbWljX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQllNzQwX2F1ZGlvX3Bvd2VyIHw9IEU3NDBfQVVESU9fSU47CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWU3NDBfYXVkaW9fcG93ZXIgJj0gfkU3NDBfQVVESU9fSU47CisKKwllNzQwX3N5bmNfYXVkaW9fcG93ZXIoZTc0MF9hdWRpb19wb3dlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlNzQwX291dHB1dF9hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZTc0MF9hdWRpb19wb3dlciB8PSBFNzQwX0FVRElPX09VVDsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZTc0MF9hdWRpb19wb3dlciAmPSB+RTc0MF9BVURJT19PVVQ7CisKKwllNzQwX3N5bmNfYXVkaW9fcG93ZXIoZTc0MF9hdWRpb19wb3dlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGU3NDBfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUgSmFjayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsKSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiT3V0cHV0IEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU3NDBfb3V0cHV0X2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIk1pYyBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzQwX21pY19hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7Ik91dHB1dCBBbXAiLCBOVUxMLCAiTE9VVCJ9LAorCXsiT3V0cHV0IEFtcCIsIE5VTEwsICJST1VUIn0sCisJeyJPdXRwdXQgQW1wIiwgTlVMTCwgIk1PTk9PVVQifSwKKworCXsiU3BlYWtlciIsIE5VTEwsICJPdXRwdXQgQW1wIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJPdXRwdXQgQW1wIn0sCisKKwl7Ik1JQzEiLCBOVUxMLCAiTWljIEFtcCJ9LAorCXsiTWljIEFtcCIsIE5VTEwsICJNaWMgKEludGVybmFsKSJ9LAorfTsKKworc3RhdGljIGludCBlNzQwX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQT1VUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUE9VVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUEhPTkUiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5SIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNESU5MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNESU5SIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBDQkVFUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMyIik7CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBlNzQwX2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRShlNzQwX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZTc0MF9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIkFDOTciLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19ISUZJXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MDVfZGFpW1dNOTcwNV9EQUlfQUM5N19ISUZJXSwKKwkJLmluaXQgPSBlNzQwX2FjOTdfaW5pdCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfQVVYXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZTc0MCA9IHsKKwkubmFtZSA9ICJUb3NoaWJhIGU3NDAiLAorCS5wbGF0Zm9ybSA9ICZweGEyeHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9IGU3NDBfZGFpLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKGU3NDBfZGFpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZTc0MF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZlNzQwLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTk3MDUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZTc0MF9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBlNzQwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX2U3NDAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzQwX01JQ19PTiwgICJNaWMgYW1wIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NDBfQU1QX09OLCAiT3V0cHV0IGFtcCIpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9taWNfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzQwX1dNOTcwNV9uQVZERDIsICJBdWRpbyBwb3dlciIpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9vcF9hbXBfZ3BpbzsKKworCS8qIERpc2FibGUgYXVkaW8gKi8KKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FNzQwX01JQ19PTiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2Fwd3JfZ3BpbzsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FNzQwX0FNUF9PTiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2Fwd3JfZ3BpbzsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FNzQwX1dNOTcwNV9uQVZERDIsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisKKwllNzQwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWU3NDBfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGU3NDBfc25kX2RldmljZSwgJmU3NDBfc25kX2RldmRhdGEpOworCWU3NDBfc25kX2RldmRhdGEuZGV2ID0gJmU3NDBfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZTc0MF9zbmRfZGV2aWNlKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworLyogRmFpbCBncmFjZWZ1bGx5ICovCisJcGxhdGZvcm1fZGV2aWNlX3B1dChlNzQwX3NuZF9kZXZpY2UpOworZnJlZV9hcHdyX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyKTsKK2ZyZWVfb3BfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTc0MF9BTVBfT04pOworZnJlZV9taWNfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTc0MF9NSUNfT04pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGU3NDBfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGU3NDBfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGU3NDBfaW5pdCk7Cittb2R1bGVfZXhpdChlNzQwX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIGRyaXZlciBmb3IgZTc0MCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jIGIvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkY2VjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBlNzUwLXdtOTcwNS5jICAtLSAgU29DIGF1ZGlvIGZvciBlNzUwCisgKgorICogQ29weXJpZ2h0IDIwMDcgKGMpIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIE9OTFkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcwNS5oIgorI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKKyNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgorCitzdGF0aWMgaW50IGU3NTBfc3BrX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U3NTBfU1BLX0FNUF9PRkYsIDApOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U3NTBfU1BLX0FNUF9PRkYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZTc1MF9ocF9hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX0hQX0FNUF9PRkYsIDApOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U3NTBfSFBfQU1QX09GRiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGU3NTBfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUgSmFjayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsKSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU3NTBfaHBfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiU3BlYWtlciBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzUwX3Nwa19hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7IkhlYWRwaG9uZSBBbXAiLCBOVUxMLCAiSFBPVVRMIn0sCisJeyJIZWFkcGhvbmUgQW1wIiwgTlVMTCwgIkhQT1VUUiJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSGVhZHBob25lIEFtcCJ9LAorCisJeyJTcGVha2VyIEFtcCIsIE5VTEwsICJNT05PT1VUIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlNwZWFrZXIgQW1wIn0sCisKKwl7Ik1JQzEiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKK307CisKK3N0YXRpYyBpbnQgZTc1MF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMT1VUIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJPVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUEhPTkUiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5SIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNESU5MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNESU5SIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBDQkVFUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMyIik7CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBlNzUwX2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRShlNzUwX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZTc1MF9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIkFDOTciLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19ISUZJXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MDVfZGFpW1dNOTcwNV9EQUlfQUM5N19ISUZJXSwKKwkJLmluaXQgPSBlNzUwX2FjOTdfaW5pdCwKKwkJLyogdXNlIG9wcyB0byBjaGVjayBzdGFydHVwIHN0YXRlICovCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0FVWF0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU3NTAgPSB7CisJLm5hbWUgPSAiVG9zaGliYSBlNzUwIiwKKwkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBlNzUwX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShlNzUwX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGU3NTBfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmZTc1MCwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzA1LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmU3NTBfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZTc1MF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19lNzUwKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc1MF9IUF9BTVBfT0ZGLCAgIkhlYWRwaG9uZSBhbXAiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc1MF9TUEtfQU1QX09GRiwgIlNwZWFrZXIgYW1wIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2hwX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc1MF9IUF9BTVBfT0ZGLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc1MF9TUEtfQU1QX09GRiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKworCWU3NTBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZTc1MF9zbmRfZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZTc1MF9zbmRfZGV2aWNlLCAmZTc1MF9zbmRfZGV2ZGF0YSk7CisJZTc1MF9zbmRfZGV2ZGF0YS5kZXYgPSAmZTc1MF9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChlNzUwX3NuZF9kZXZpY2UpOworCisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisvKiBGYWlsIGdyYWNlZnVsbHkgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU3NTBfc25kX2RldmljZSk7CitmcmVlX3Nwa19hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGKTsKK2ZyZWVfaHBfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlNzUwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihlNzUwX3NuZF9kZXZpY2UpOworCWdwaW9fZnJlZShHUElPX0U3NTBfU1BLX0FNUF9PRkYpOworCWdwaW9fZnJlZShHUElPX0U3NTBfSFBfQU1QX09GRik7Cit9CisKK21vZHVsZV9pbml0KGU3NTBfaW5pdCk7Cittb2R1bGVfZXhpdChlNzUwX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIGRyaXZlciBmb3IgZTc1MCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCmluZGV4IDJlMzM4NmQuLmJjMDE5Y2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogZTgwMC13bTk3MTIuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZTgwMAogICoKLSAqIEJhc2VkIG9uIHRvc2EuYwotICoKICAqIENvcHlyaWdodCAyMDA3IChjKSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTEzLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMjEsMjMgKzE5LDg1IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MTIuaCIKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCiAjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZTgwMDsKK3N0YXRpYyBpbnQgZTgwMF9zcGtfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9TUEtfQU1QX09OLCAxKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FODAwX1NQS19BTVBfT04sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZTgwMF9ocF9hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FODAwX0hQX0FNUF9PRkYsIDApOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfSFBfQU1QX09GRiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGU4MDBfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUgSmFjayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoSW50ZXJuYWwxKSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoSW50ZXJuYWwyKSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllODAwX2hwX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIlNwZWFrZXIgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTgwMF9zcGtfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVEwifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQT1VUUiJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSGVhZHBob25lIEFtcCJ9LAorCisJeyJTcGVha2VyIEFtcCIsIE5VTEwsICJNT05PT1VUIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlNwZWFrZXIgQW1wIn0sCisKKwl7Ik1JQzEiLCBOVUxMLCAiTWljIChJbnRlcm5hbDEpIn0sCisJeyJNSUMyIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwyKSJ9LAorfTsKKworc3RhdGljIGludCBlODAwX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgZTgwMF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoZTgwMF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBlODAwX2RhaVtdID0gewotewotCS5uYW1lID0gIkFDOTcgQXV4IiwKLQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKLQkuY29kZWNfZGFpID0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0FVWF0sCi19LAorCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0hJRkldLAorCQkuY29kZWNfZGFpID0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0hJRkldLAorCQkuaW5pdCA9IGU4MDBfYWM5N19pbml0LAorCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19BVVhdLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlODAwID0gewpAQCAtNjEsNiArMTIxLDIyIEBACiAJaWYgKCFtYWNoaW5lX2lzX2U4MDAoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FODAwX0hQX0FNUF9PRkYsICAiSGVhZHBob25lIGFtcCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FODAwX1NQS19BTVBfT04sICJTcGVha2VyIGFtcCIpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9ocF9hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U4MDBfSFBfQU1QX09GRiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U4MDBfU1BLX0FNUF9PTiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKwogCWU4MDBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghZTgwMF9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY5LDggKzE0NSwxNSBAQAogCWU4MDBfc25kX2RldmRhdGEuZGV2ID0gJmU4MDBfc25kX2RldmljZS0+ZGV2OwogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZTgwMF9zbmRfZGV2aWNlKTsKIAotCWlmIChyZXQpCi0JCXBsYXRmb3JtX2RldmljZV9wdXQoZTgwMF9zbmRfZGV2aWNlKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKy8qIEZhaWwgZ3JhY2VmdWxseSAqLworCXBsYXRmb3JtX2RldmljZV9wdXQoZTgwMF9zbmRfZGV2aWNlKTsKK2ZyZWVfc3BrX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U4MDBfU1BLX0FNUF9PTik7CitmcmVlX2hwX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U4MDBfSFBfQU1QX09GRik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzgsNiArMTYxLDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBlODAwX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihlODAwX3NuZF9kZXZpY2UpOworCWdwaW9fZnJlZShHUElPX0U4MDBfU1BLX0FNUF9PTik7CisJZ3Bpb19mcmVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGKTsKIH0KIAogbW9kdWxlX2luaXQoZTgwMF9pbml0KTsKQEAgLTg2LDQgKzE3MSw0IEBACiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KIE1PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIGRyaXZlciBmb3IgZTgwMCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jIGIvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZWRhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBIYW5kbGVzIHRoZSBNaXRhYyBtaW9hNzAxIFNvQyBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUm9iZXJ0IEphcnptaWsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogVGhpcyBpcyBhIGxpdHRsZSBzY2hlbWEgb2YgdGhlIHNvdW5kIGludGVyY29ubmVjdGlvbnMgOgorICoKKyAqICAgIFNhZ2VtIFgyMDAgICAgICAgICAgICAgICAgIFdvbGZzb24gV005NzEzCisgKiAgICArLS0tLS0tLS0rICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgIFJlYXIgU3BlYWtlcgorICogICAgfCAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIC8tKworICogICAgfCAgICAgICAgKy0tLT4tLS0tLT4tLS0rTU9OT0lOICAgICAgICAgU1BLTCstLS0+LS0tLSstKyAgfAorICogICAgfCAgR1NNICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgfCAgfAorICogICAgfCAgICAgICAgKy0tLT4tLS0tLT4tLS0rUENCRUVQICAgICAgICAgU1BLUistLS0+LS0tLSstKyAgfAorICogICAgfCAgQ0hJUCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIFwtKworICogICAgfCAgICAgICAgKy0tLTwtLS0tLTwtLS0rTU9OTyAgICAgICAgICAgICAgIHwKKyAqICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgRnJvbnQgU3BlYWtlcgorICogICAgKy0tLS0tLS0tKyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIC8tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIEhQTCstLS0+LS0tLSstKyAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgT1VUMystLS0+LS0tLSstKyAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIFwtKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICBGcm9udCBNaWNybworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICArCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBNSUMxKy0tLS0tPC0tK28rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAtLS0KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKworI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKKyNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgorI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MTMuaCIKKworI2RlZmluZSBBUlJBWV9BTkRfU0laRSh4KQkoeCksIEFSUkFZX1NJWkUoeCkKKworI2RlZmluZSBBQzk3X0dQSU9fUFVMTAkJMHg1OAorCisvKiBVc2UgR1BJTzggZm9yIHJlYXIgc3BlYWtlciBhbXBsaWZpZXIgKi8KK3N0YXRpYyBpbnQgcmVhcl9hbXBfcG93ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCit7CisJdW5zaWduZWQgc2hvcnQgcmVnOworCisJaWYgKHBvd2VyKSB7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX0NGRyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19DRkcsIHJlZyB8IDB4MDEwMCk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX1BVTEwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fUFVMTCwgcmVnIHwgKDE8PDE1KSk7CisJfSBlbHNlIHsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX0NGRywgcmVnICYgfjB4MDEwMCk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX1BVTEwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fUFVMTCwgcmVnICYgfigxPDwxNSkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYXJfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQsCisJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3aWRnZXQtPmNvZGVjOworCisJcmV0dXJuIHJlYXJfYW1wX3Bvd2VyKGNvZGVjLCBTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKK30KKworLyogbWlvYTcwMSBtYWNoaW5lIGRhcG0gd2lkZ2V0cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG1pb2E3MDFfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX1NQSygiRnJvbnQgU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlJlYXIgU3BlYWtlciIsIHJlYXJfYW1wX2V2ZW50KSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBMaW5lIE91dCIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJHU00gTGluZSBJbiIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQgTWljIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiRnJvbnQgTWljIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBDYWxsIE1pYyAqLworCXsiTWljIEJpYXMiLCBOVUxMLCAiRnJvbnQgTWljIn0sCisJeyJNSUMxIiwgTlVMTCwgIk1pYyBCaWFzIn0sCisKKwkvKiBIZWFkc2V0IE1pYyAqLworCXsiTElORUwiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKKwl7IkxJTkVSIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisKKwkvKiBHU00gTW9kdWxlICovCisJeyJNT05PSU4iLCBOVUxMLCAiR1NNIExpbmUgT3V0In0sCisJeyJQQ0JFRVAiLCBOVUxMLCAiR1NNIExpbmUgT3V0In0sCisJeyJHU00gTGluZSBJbiIsIE5VTEwsICJNT05PIn0sCisKKwkvKiBoZWFkcGhvbmUgY29ubmVjdGVkIHRvIEhQTCwgSFBSICovCisJeyJIZWFkc2V0IiwgTlVMTCwgIkhQTCJ9LAorCXsiSGVhZHNldCIsIE5VTEwsICJIUFIifSwKKworCS8qIGZyb250IHNwZWFrZXIgY29ubmVjdGVkIHRvIEhQTCwgT1VUMyAqLworCXsiRnJvbnQgU3BlYWtlciIsIE5VTEwsICJIUEwifSwKKwl7IkZyb250IFNwZWFrZXIiLCBOVUxMLCAiT1VUMyJ9LAorCisJLyogcmVhciBzcGVha2VyIGNvbm5lY3RlZCB0byBTUEtMLCBTUEtSICovCisJeyJSZWFyIFNwZWFrZXIiLCBOVUxMLCAiU1BLTCJ9LAorCXsiUmVhciBTcGVha2VyIiwgTlVMTCwgIlNQS1IifSwKK307CisKK3N0YXRpYyBpbnQgbWlvYTcwMV93bTk3MTNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgc2hvcnQgcmVnOworCisJLyogQWRkIG1pb2E3MDEgc3BlY2lmaWMgd2lkZ2V0cyAqLworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIEFSUkFZX0FORF9TSVpFKG1pb2E3MDFfZGFwbV93aWRnZXRzKSk7CisKKwkvKiBTZXQgdXAgbWlvYTcwMSBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcG5lY3RzICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIEFSUkFZX0FORF9TSVpFKGF1ZGlvX21hcCkpOworCisJLyogUHJlcGFyZSBHUElPOCBmb3IgcmVhciBzcGVha2VyIGFtcGxpZmllciAqLworCXJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHKTsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFDOTdfR1BJT19DRkcsIHJlZyB8IDB4MDEwMCk7CisKKwkvKiBQcmVwYXJlIE1JQyBpbnB1dCAqLworCXJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBQzk3XzNEX0NPTlRST0wpOworCWNvZGVjLT53cml0ZShjb2RlYywgQUM5N18zRF9DT05UUk9MLCByZWcgfCAweGMwMDApOworCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJGcm9udCBTcGVha2VyIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJSZWFyIFNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkZyb250IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIE91dCIpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIG1pb2E3MDFfb3BzOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgbWlvYTcwMV9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIkFDOTciLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19ISUZJXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MTNfZGFpW1dNOTcxM19EQUlfQUM5N19ISUZJXSwKKwkJLmluaXQgPSBtaW9hNzAxX3dtOTcxM19pbml0LAorCQkub3BzID0gJm1pb2E3MDFfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MTNfZGFpW1dNOTcxM19EQUlfQUM5N19BVVhdLAorCQkub3BzID0gJm1pb2E3MDFfb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBtaW9hNzAxID0geworCS5uYW1lID0gIk1pb0E3MDEiLAorCS5wbGF0Zm9ybSA9ICZweGEyeHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9IG1pb2E3MDFfZGFpLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKG1pb2E3MDFfZGFpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgbWlvYTcwMV9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZtaW9hNzAxLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTk3MTMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWlvYTcwMV9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IG1pb2E3MDFfd205NzEzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19taW9hNzAxKCkpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkJlIHdhcm5lZCB0aGF0IGluY29ycmVjdCBtaXhlcnMvbXV4ZXMgc2V0dXAgd2lsbCIKKwkJICJsZWFkIHRvIG92ZXJoZWF0aW5nIGFuZCBwb3NzaWJsZSBkZXN0cnVjdGlvbiBvZiB5b3VyIGRldmljZS4iCisJCSAiRG8gbm90IHVzZSB3aXRob3V0IGEgZ29vZCBrbm93bGVkZ2Ugb2YgbWlvJ3MgYm9hcmQgZGVzaWduIVxuIik7CisKKwltaW9hNzAxX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIW1pb2E3MDFfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShtaW9hNzAxX3NuZF9kZXZpY2UsICZtaW9hNzAxX3NuZF9kZXZkYXRhKTsKKwltaW9hNzAxX3NuZF9kZXZkYXRhLmRldiA9ICZtaW9hNzAxX3NuZF9kZXZpY2UtPmRldjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobWlvYTcwMV9zbmRfZGV2aWNlKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1pb2E3MDFfc25kX2RldmljZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWlvYTcwMV93bTk3MTNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWlvYTcwMV9zbmRfZGV2aWNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWlvYTcwMV93bTk3MTNfZHJpdmVyID0geworCS5wcm9iZQkJPSBtaW9hNzAxX3dtOTcxM19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1pb2E3MDFfd205NzEzX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJtaW9hNzAxLXdtOTcxMyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWlvYTcwMV9hc29jX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtaW9hNzAxX3dtOTcxM19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWlvYTcwMV9hc29jX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWlvYTcwMV93bTk3MTNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWlvYTcwMV9hc29jX2luaXQpOworbW9kdWxlX2V4aXQobWlvYTcwMV9hc29jX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIlJvYmVydCBKYXJ6bWlrIChyamFyem1pa0BmcmVlLmZyKSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBXTTk3MTMgTUlPIEE3MDEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKaW5kZXggNGE5Y2YzMC4uNDhhNzNmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKKysrIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyBpbnQgcGFsbTI3eF9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJcGFsbTI3eF9leHRfY29udHJvbChjb2RlYyk7CkBAIC0xNDYsMTkgKzE0NiwxNiBAQAogCiBzdGF0aWMgaW50IHBhbG0yN3hfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PT1VUIik7CiAKIAkvKiBhZGQgcGFsbTI3eCBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhbG0yN3hfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZwYWxtMjd4X2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgcGFsbTI3eF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHBhbG0yN3hfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIGFkZCBwYWxtMjd4IHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBwYWxtMjd4X2RhcG1fd2lkZ2V0cywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCmluZGV4IDZlOTgyNzEuLmVmN2M2YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKKysrIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC03Nyw3ICs3OCw3IEBACiBzdGF0aWMgaW50IHBvb2RsZV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJcG9vZGxlX2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTI0MCwxOSArMjQxLDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgcG9vZGxlX3dtODczMV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTExJTkVJTiIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSTElORUlOIik7CiAJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNSUNJTiIpOwogCiAJLyogQWRkIHBvb2RsZSBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODczMV9wb29kbGVfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJndtODczMV9wb29kbGVfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczMV9wb29kbGVfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3MzFfcG9vZGxlX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBBZGQgcG9vZGxlIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfZGFwbV93aWRnZXRzLApAQCAtMjgzLDE3ICsyODIsNDIgQEAKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKLS8qIHBvb2RsZSBhdWRpbyBwcml2YXRlIGRhdGEgKi8KLXN0YXRpYyBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgcG9vZGxlX3dtODczMV9zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDAsCi0JLmkyY19hZGRyZXNzID0gMHgxYiwKLX07CisvKgorICogRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgYm9kZ2UgdG8gYXZvaWQgY3Jvc3MtdHJlZSBtZXJnZSBpc3N1ZXMuCisgKiBOZXcgZHJpdmVycyBzaG91bGQgcmVnaXN0ZXIgdGhlIHdtODczMSBJMkMgZGV2aWNlIGluIHRoZSBtYWNoaW5lCisgKiBzZXR1cCBjb2RlICh1bmRlciBhcmNoL2FybSBmb3IgQVJNIHN5c3RlbXMpLgorICovCitzdGF0aWMgaW50IHdtODczMV9pMmNfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCWluZm8uYWRkciA9IDB4MWI7CisJc3RybGNweShpbmZvLnR5cGUsICJ3bTg3MzEiLCBJMkNfTkFNRV9TSVpFKTsKKworCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoMCk7CisJaWYgKCFhZGFwdGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyIDBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOworCWlmICghY2xpZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIC8qIHBvb2RsZSBhdWRpbyBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgcG9vZGxlX3NuZF9kZXZkYXRhID0gewogCS5jYXJkID0gJnNuZF9zb2NfcG9vZGxlLAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCi0JLmNvZGVjX2RhdGEgPSAmcG9vZGxlX3dtODczMV9zZXR1cCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwb29kbGVfc25kX2RldmljZTsKQEAgLTMwNSw2ICszMjksMTAgQEAKIAlpZiAoIW1hY2hpbmVfaXNfcG9vZGxlKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcmV0ID0gd204NzMxX2kyY19yZWdpc3RlcigpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwogCWxvY29tb19ncGlvX3NldF9kaXIoJnBvb2RsZV9sb2NvbW9fZGV2aWNlLmRldiwKIAkJUE9PRExFX0xPQ09NT19HUElPX0FNUF9PTiwgMCk7CiAJLyogc2hvdWxkIHdlIG11dGUgSFAgYXQgc3RhcnR1cCAtIGJ1cm5pbmcgcG93ZXIgPyovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYyBiL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jCmluZGV4IDczY2I2YjQuLmIwYmY0MDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jCkBAIC0xLDQgKzEsMyBAQAotI2RlZmluZSBERUJVRwogLyoKICAqIHB4YS1zc3AuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCiAgKgpAQCAtMjEsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgpAQCAtMjIxLDkgKzIyMiw5IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkgewotCQlyZXQgPSBzc3BfaW5pdCgmcHJpdi0+ZGV2LCBjcHVfZGFpLT5pZCArIDEsIFNTUF9OT19JUlEpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CisJCXByaXYtPmRldi5wb3J0ID0gY3B1X2RhaS0+aWQgKyAxOworCQlwcml2LT5kZXYuaXJxID0gTk9fSVJROworCQljbGtfZW5hYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAJCXNzcF9kaXNhYmxlKCZwcml2LT5kZXYpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMjM4LDcgKzIzOSw3IEBACiAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkgewogCQlzc3BfZGlzYWJsZSgmcHJpdi0+ZGV2KTsKLQkJc3NwX2V4aXQoJnByaXYtPmRldik7CisJCWNsa19kaXNhYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAJfQogfQogCkBAIC0yOTgsNyArMjk5LDcgQEAKIAlpbnQgdmFsOwogCiAJdTMyIHNzY3IwID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NDUjApICYKLQkJfihTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQURDKTsKKwkJfihTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQUNTKTsKIAogCWRldl9kYmcoJnNzcC0+cGRldi0+ZGV2LAogCQkicHhhX3NzcF9zZXRfZGFpX3N5c2NsayBpZDogJWQsIGNsa19pZCAlZCwgZnJlcSAlZFxuIiwKQEAgLTMyNiw3ICszMjcsNyBAQAogCWNhc2UgUFhBX1NTUF9DTEtfQVVESU86CiAJCXByaXYtPnN5c2NsayA9IDA7CiAJCXNzcF9zZXRfc2NyKCZwcml2LT5kZXYsIDEpOwotCQlzc2NyMCB8PSBTU0NSMF9BREM7CisJCXNzY3IwIHw9IFNTQ1IwX0FDUzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01MjAsOSArNTIxLDIwIEBACiAJdTMyIHNzY3IxOwogCXUzMiBzc3BzcDsKIAorCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIGF0IGFsbCAqLworCWlmIChwcml2LT5kYWlfZm10ID09IGZtdCkKKwkJcmV0dXJuIDA7CisKKwkvKiB3ZSBjYW4gb25seSBjaGFuZ2UgdGhlIHNldHRpbmdzIGlmIHRoZSBwb3J0IGlzIG5vdCBpbiB1c2UgKi8KKwlpZiAoc3NwX3JlYWRfcmVnKHNzcCwgU1NDUjApICYgU1NDUjBfU1NFKSB7CisJCWRldl9lcnIoJnNzcC0+cGRldi0+ZGV2LAorCQkJImNhbid0IGNoYW5nZSBoYXJkd2FyZSBkYWkgZm9ybWF0OiBzdHJlYW0gaXMgaW4gdXNlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIHJlc2V0IHBvcnQgc2V0dGluZ3MgKi8KIAlzc2NyMCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmCi0JCShTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQURDKTsKKwkJKFNTQ1IwX0VDUyB8ICBTU0NSMF9OQ1MgfCBTU0NSMF9NT0QgfCBTU0NSMF9BQ1MpOwogCXNzY3IxID0gU1NDUjFfUnhUcmVzaCg4KSB8IFNTQ1IxX1R4VHJlc2goNyk7CiAJc3Nwc3AgPSAwOwogCkBAIC01NDUsMTggKzU1NywxOCBAQAogCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQlzc2NyMCB8PSBTU0NSMF9NT0QgfCBTU0NSMF9QU1A7CisJCXNzY3IwIHw9IFNTQ1IwX1BTUDsKIAkJc3NjcjEgfD0gU1NDUjFfUldPVCB8IFNTQ1IxX1RSQUlMOwogCisJCS8qIFNlZSBod19wYXJhbXMoKSAqLwogCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9GU1JUOworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVA7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKLQkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QIHwgU1NQU1BfRlNSVDsKIAkJCWJyZWFrOwogCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgotCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVA7CisJCQlzc3BzcCB8PSBTU1BTUF9TQ01PREUoMyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjQyLDM0ICs2NTQsNjUgQEAKIAkJCXNzY3IwIHw9IFNTQ1IwX0ZQQ0tFOwogI2VuZGlmCiAJCXNzY3IwIHw9IFNTQ1IwX0RhdGFTaXplKDE2KTsKLQkJaWYgKHBhcmFtc19jaGFubmVscyhwYXJhbXMpID4gMSkKLQkJCXNzY3IwIHw9IFNTQ1IwX0VEU1M7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CiAJCXNzY3IwIHw9IChTU0NSMF9FRFNTIHwgU1NDUjBfRGF0YVNpemUoOCkpOwotCQkvKiB3ZSBtdXN0IGJlIGluIG5ldHdvcmsgbW9kZSAoMiBzbG90cykgZm9yIDI0IGJpdCBzdGVyZW8gKi8KIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKIAkJc3NjcjAgfD0gKFNTQ1IwX0VEU1MgfCBTU0NSMF9EYXRhU2l6ZSgxNikpOwotCQkvKiB3ZSBtdXN0IGJlIGluIG5ldHdvcmsgbW9kZSAoMiBzbG90cykgZm9yIDMyIGJpdCBzdGVyZW8gKi8KIAkJYnJlYWs7CiAJfQogCXNzcF93cml0ZV9yZWcoc3NwLCBTU0NSMCwgc3NjcjApOwogCiAJc3dpdGNoIChwcml2LT5kYWlfZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKLQkJLyogQ2xlYXJlZCB3aGVuIHRoZSBEQUkgZm9ybWF0IGlzIHNldCAqLwotCQlzc3BzcCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTUFNQKSB8IFNTUFNQX1NGUk1XRFRIKHdpZHRoKTsKKwkgICAgICAgc3Nwc3AgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU1BTUCk7CisKKwkJaWYgKCgoc3NjcjAgJiBTU0NSMF9TQ1IpID09IFNTQ1IwX1NlckNsa0Rpdig0KSkgJiYKKwkJICAgICAod2lkdGggPT0gMTYpKSB7CisJCQkvKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBiaXRjbGsgaXMgNjRmcworCQkJKiBhbmQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCAyKjMyIGJpdHMgb2YgYXVkaW8KKwkJCSogc2FtcGxlcy4KKwkJCSoKKwkJCSogVGhlIFNTUCB2YWx1ZXMgdXNlZCBmb3IgdGhhdCBhcmUgYWxsIGZvdW5kIG91dCBieQorCQkJKiB0cnlpbmcgYW5kIGZhaWxpbmcgYSBsb3Q7IHNvbWUgb2YgdGhlIHJlZ2lzdGVycworCQkJKiBuZWVkZWQgZm9yIHRoYXQgbW9kZSBhcmUgb25seSBhdmFpbGFibGUgb24gUFhBM3h4LgorCQkJKi8KKworI2lmZGVmIENPTkZJR19QWEEzeHgKKwkJCWlmICghY3B1X2lzX3B4YTN4eCgpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNV0RUSCh3aWR0aCAqIDIpOworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTURMWSh3aWR0aCAqIDQpOworCQkJc3Nwc3AgfD0gU1NQU1BfRURNWVNUT1AoMyk7CisJCQlzc3BzcCB8PSBTU1BTUF9ETVlTVE9QKDMpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RSVCgxKTsKKyNlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogVGhlIGZyYW1lIHdpZHRoIGlzIHRoZSB3aWR0aCB0aGUgTFJDTEsgaXMKKwkJCSAqIGFzc2VydGVkIGZvcjsgdGhlIGRlbGF5IGlzIGV4cHJlc3NlZCBpbgorCQkJICogaGFsZiBjeWNsZSB1bml0cy4gIFdlIG5lZWQgdGhlIGV4dHJhIGN5Y2xlCisJCQkgKiBiZWNhdXNlIHRoZSBkYXRhIHN0YXJ0cyBjbG9ja2luZyBvdXQgb25lIEJDTEsKKwkJCSAqIGFmdGVyIExSQ0xLIGNoYW5nZXMgcG9sYXJpdHkuCisJCQkgKi8KKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1XRFRIKHdpZHRoICsgMSk7CisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNRExZKCh3aWR0aCArIDEpICogMik7CisJCQlzc3BzcCB8PSBTU1BTUF9ETVlTVFJUKDEpOworCQl9CisKIAkJc3NwX3dyaXRlX3JlZyhzc3AsIFNTUFNQLCBzc3BzcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAotCS8qIFdlIGFsd2F5cyB1c2UgYSBuZXR3b3JrIG1vZGUgc28gd2UgYWx3YXlzIHJlcXVpcmUgVERNIHNsb3RzCisJLyogV2hlbiB3ZSB1c2UgYSBuZXR3b3JrIG1vZGUsIHdlIGFsd2F5cyByZXF1aXJlIFRETSBzbG90cwogCSAqIC0gY29tcGxhaW4gbG91ZGx5IGFuZCBmYWlsIGlmIHRoZXkndmUgbm90IGJlZW4gc2V0IHVwIHlldC4KIAkgKi8KLQlpZiAoIShzc3BfcmVhZF9yZWcoc3NwLCBTU1RTQSkgJiAweGYpKSB7CisJaWYgKChzc2NyMCAmIFNTQ1IwX01PRCkgJiYgIShzc3BfcmVhZF9yZWcoc3NwLCBTU1RTQSkgJiAweGYpKSB7CiAJCWRldl9lcnIoJnNzcC0+cGRldi0+ZGV2LCAiTm8gVERNIHRpbWVzbG90IGNvbmZpZ3VyZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03NTEsNyArNzk0LDcgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJpdi0+ZGV2LnNzcCA9IHNzcF9yZXF1ZXN0KGRhaS0+aWQsICJTb0MgYXVkaW8iKTsKKwlwcml2LT5kZXYuc3NwID0gc3NwX3JlcXVlc3QoZGFpLT5pZCArIDEsICJTb0MgYXVkaW8iKTsKIAlpZiAocHJpdi0+ZGV2LnNzcCA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3ByaXY7CkBAIC03ODIsNiArODI1LDE5IEBACiAJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfAlcCiAJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9zc3BfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHB4YV9zc3Bfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBweGFfc3NwX3NodXRkb3duLAorCS50cmlnZ2VyCT0gcHhhX3NzcF90cmlnZ2VyLAorCS5od19wYXJhbXMJPSBweGFfc3NwX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCisJLnNldF9jbGtkaXYJPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKKwkuc2V0X2ZtdAk9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCisJLnNldF90ZG1fc2xvdAk9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKKwkuc2V0X3RyaXN0YXRlCT0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHB4YV9zc3BfZGFpW10gPSB7CiAJewogCQkubmFtZSA9ICJweGEyeHgtc3NwMSIsCkBAIC04MDIsMTggKzg1OCw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIAl7CS5uYW1lID0gInB4YTJ4eC1zc3AyIiwKIAkJLmlkID0gMSwKQEAgLTgzMywxOCArODc4LDcgQEAKIAkJCS5yYXRlcyA9IFBYQV9TU1BfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFBYQV9TU1BfRk9STUFUUywKIAkJIH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IHB4YV9zc3Bfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IHB4YV9zc3Bfc2h1dGRvd24sCi0JCQkudHJpZ2dlciA9IHB4YV9zc3BfdHJpZ2dlciwKLQkJCS5od19wYXJhbXMgPSBweGFfc3NwX2h3X3BhcmFtcywKLQkJCS5zZXRfc3lzY2xrID0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKLQkJCS5zZXRfY2xrZGl2ID0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKLQkJCS5zZXRfcGxsID0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKLQkJCS5zZXRfZm10ID0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfdGRtX3Nsb3QgPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCi0JCQkuc2V0X3RyaXN0YXRlID0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAotCQl9LAorCQkub3BzID0gJnB4YV9zc3BfZGFpX29wcywKIAl9LAogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDMiLApAQCAtODY1LDE4ICs4OTksNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiAJewogCQkubmFtZSA9ICJweGEyeHgtc3NwNCIsCkBAIC04OTcsMTggKzkyMCw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChweGFfc3NwX2RhaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKaW5kZXggODEyYzJiNC4uMDFjMjFjNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYwpAQCAtMTA2LDEzICsxMDYsMTMgQEAKIHN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JcmV0dXJuIHB4YTJ4eF9hYzk3X2h3X3Byb2JlKHBkZXYpOworCXJldHVybiBweGEyeHhfYWM5N19od19wcm9iZSh0b19wbGF0Zm9ybV9kZXZpY2UoZGFpLT5kZXYpKTsKIH0KIAogc3RhdGljIHZvaWQgcHhhMnh4X2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JcHhhMnh4X2FjOTdfaHdfcmVtb3ZlKHBkZXYpOworCXB4YTJ4eF9hYzk3X2h3X3JlbW92ZSh0b19wbGF0Zm9ybV9kZXZpY2UoZGFpLT5kZXYpKTsKIH0KIAogc3RhdGljIGludCBweGEyeHhfYWM5N19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC0xNjQsNiArMTY0LDE4IEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKIAkJU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9hYzk3X2hpZmlfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2FjOTdfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2FjOTdfYXV4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9hYzk3X2h3X2F1eF9wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfYWM5N19taWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2FjOTdfaHdfbWljX3BhcmFtcywKK307CisKIC8qCiAgKiBUaGVyZSBpcyBvbmx5IDEgcGh5c2ljYWwgQUM5NyBpbnRlcmZhY2UgZm9yIHB4YTJ4eCwgYnV0IGl0CiAgKiBoYXMgZXh0cmEgZmlmbydzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGF1eCBEQUNzIGFuZCBBRENzLgpAQCAtMTg5LDggKzIwMSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBQWEEyWFhfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBweGEyeHhfYWM5N19od19wYXJhbXMsfSwKKwkub3BzID0gJnB4YV9hYzk3X2hpZmlfZGFpX29wcywKIH0sCiB7CiAJLm5hbWUgPSAicHhhMnh4LWFjOTctYXV4IiwKQEAgLTIwOCw4ICsyMTksNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gUFhBMlhYX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2FjOTdfaHdfYXV4X3BhcmFtcyx9LAorCS5vcHMgPSAmcHhhX2FjOTdfYXV4X2RhaV9vcHMsCiB9LAogewogCS5uYW1lID0gInB4YTJ4eC1hYzk3LW1pYyIsCkBAIC0yMjEsMjMgKzIzMSw1MiBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gUFhBMlhYX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2FjOTdfaHdfbWljX3BhcmFtcyx9LAorCS5vcHMgPSAmcHhhX2FjOTdfbWljX2RhaV9vcHMsCiB9LAogfTsKIAogRVhQT1JUX1NZTUJPTF9HUEwocHhhX2FjOTdfZGFpKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHB4YTJ4eF9hYzk3X2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKTsgaSsrKQorCQlweGFfYWM5N19kYWlbaV0uZGV2ID0gJnBkZXYtPmRldjsKKworCS8qIFB1bnQgbW9zdCBvZiB0aGUgaW5pdCB0byB0aGUgU29DIHByb2JlOyB3ZSBtYXkgbmVlZCB0aGUgbWFjaGluZQorCSAqIGRyaXZlciB0byBkbyBpbnRlcmVzdGluZyB0aGluZ3Mgd2l0aCB0aGUgY2xvY2tpbmcgdG8gZ2V0IHVzIHVwCisJICogYW5kIHJ1bm5pbmcuCisJICovCisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHB4YTJ4eF9hYzk3X2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2FjOTdfZHJpdmVyID0geworCS5wcm9iZQkJPSBweGEyeHhfYWM5N19kZXZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChweGEyeHhfYWM5N19kZXZfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHhhMnh4LWFjOTciLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgcHhhX2FjOTdfaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChweGFfYWM5N19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHB4YV9hYzk3X2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChweGFfYWM5N19leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwppbmRleCA1MTc5OTFmLi5lNmMyNDQwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwpAQCAtMjUsMjAgKzI1LDExIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCiAjaW5jbHVkZSAicHhhMnh4LWkycy5oIgogCi1zdHJ1Y3QgcHhhMnh4X2dwaW8gewotCXUzMiBzeXM7Ci0JdTMyCXJ4OwotCXUzMiB0eDsKLQl1MzIgY2xrOwotCXUzMiBmcm07Ci19OwotCiAvKgogICogSTJTIENvbnRyb2xsZXIgUmVnaXN0ZXIgYW5kIEJpdCBEZWZpbml0aW9ucwogICovCkBAIC0xMDYsMjEgKzk3LDYgQEAKIAkJCQkgIERDTURfQlVSU1QzMiB8IERDTURfV0lEVEg0LAogfTsKIAotc3RhdGljIHN0cnVjdCBweGEyeHhfZ3BpbyBncGlvX2J1c1tdID0gewotCXsgLyogSTJTIFNvQyBTbGF2ZSAqLwotCQkucnggPSBHUElPMjlfU0RBVEFfSU5fSTJTX01ELAotCQkudHggPSBHUElPMzBfU0RBVEFfT1VUX0kyU19NRCwKLQkJLmNsayA9IEdQSU8yOF9CSVRDTEtfSU5fSTJTX01ELAotCQkuZnJtID0gR1BJTzMxX1NZTkNfSTJTX01ELAotCX0sCi0JeyAvKiBJMlMgU29DIE1hc3RlciAqLwotCQkucnggPSBHUElPMjlfU0RBVEFfSU5fSTJTX01ELAotCQkudHggPSBHUElPMzBfU0RBVEFfT1VUX0kyU19NRCwKLQkJLmNsayA9IEdQSU8yOF9CSVRDTEtfT1VUX0kyU19NRCwKLQkJLmZybSA9IEdQSU8zMV9TWU5DX0kyU19NRCwKLQl9LAotfTsKLQogc3RhdGljIGludCBweGEyeHhfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKQEAgLTE4MSw5ICsxNTcsNiBAQAogCWlmIChjbGtfaWQgIT0gUFhBMlhYX0kyU19TWVNDTEspCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHB4YV9pMnMubWFzdGVyICYmIGRpciA9PSBTTkRfU09DX0NMT0NLX09VVCkKLQkJcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0uc3lzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xOTQsMTAgKzE2Nyw2IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCi0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0ucngpOwotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLnR4KTsKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5mcm0pOwotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLmNsayk7CiAJQlVHX09OKElTX0VSUihjbGtfaTJzKSk7CiAJY2xrX2VuYWJsZShjbGtfaTJzKTsKIAlweGFfaTJzX3dhaXQoKTsKQEAgLTMzNSw2ICszMDQsMTUgQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfaTJzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBweGEyeHhfaTJzX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gcHhhMnh4X2kyc19zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHB4YTJ4eF9pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBweGEyeHhfaTJzX3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrCT0gcHhhMnh4X2kyc19zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBweGFfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuaWQgPSAwLApAQCAtMzUwLDE0ICszMjgsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gUFhBMlhYX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gcHhhMnh4X2kyc19zdGFydHVwLAotCQkuc2h1dGRvd24gPSBweGEyeHhfaTJzX3NodXRkb3duLAotCQkudHJpZ2dlciA9IHB4YTJ4eF9pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IHB4YTJ4eF9pMnNfc2V0X2RhaV9mbXQsCi0JCS5zZXRfc3lzY2xrID0gcHhhMnh4X2kyc19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmcHhhX2kyc19kYWlfb3BzLAogfTsKIAogRVhQT1JUX1NZTUJPTF9HUEwocHhhX2kyc19kYWkpOwpAQCAtMzk4LDExICszNjksNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfaTJzX2luaXQodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTI3eCgpKQotCQlncGlvX2J1c1sxXS5zeXMgPSBHUElPMTEzX0kyU19TWVNDTEtfTUQ7Ci0JZWxzZQotCQlncGlvX2J1c1sxXS5zeXMgPSBHUElPMzJfU1lTQ0xLX0kyU19NRDsKLQogCWNsa19pMnMgPSBFUlJfUFRSKC1FTk9FTlQpOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9pMnNfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvc3BpdHouYyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwppbmRleCBhM2I5ZTZiLi42Y2E5ZjUzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKKysrIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCkBAIC0xMDksNyArMTA5LDcgQEAKIHN0YXRpYyBpbnQgc3BpdHpfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXNwaXR6X2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTI3OCw3ICsyNzgsNyBAQAogICovCiBzdGF0aWMgaW50IHNwaXR6X3dtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAkvKiBOQyBjb2RlYyBwaW5zICovCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTlBVVDEiKTsKQEAgLTI5MCwxMiArMjkwLDEwIEBACiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk8xIik7CiAKIAkvKiBBZGQgc3BpdHogc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTBfc3BpdHpfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJndtODc1MF9zcGl0el9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzUwX3NwaXR6X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzUwX3NwaXR6X2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBBZGQgc3BpdHogc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc1MF9kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCmluZGV4IGM3NzE5NGYuLmZjNzgxMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvdG9zYS5jCisrKyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCkBAIC04Miw3ICs4Miw3IEBACiBzdGF0aWMgaW50IHRvc2Ffc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXRvc2FfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMTg4LDE4ICsxODgsMTYgQEAKIAogc3RhdGljIGludCB0b3NhX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT09VVCIpOwogCiAJLyogYWRkIHRvc2Egc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0b3NhX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmdG9zYV9jb250cm9sc1tpXSxjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB0b3NhX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodG9zYV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogYWRkIHRvc2Egc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRvc2FfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCmluZGV4IGY4ZTllY2QuLjlhMzg2YjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTI2LDYgKzI3LDE3IEBACiAjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKICNpbmNsdWRlICJweGEtc3NwLmgiCiAKKy8qCisgKiBUaGVyZSBpcyBhIHBoeXNpY2FsIHN3aXRjaCBTVzE1IG9uIHRoZSBib2FyZCB3aGljaCBjaGFuZ2VzIHRoZSBNQ0xLCisgKiBmb3IgdGhlIFdNOTcxMyBiZXR3ZWVuIHRoZSBzdGFuZGFyZCBBQzk3IG1hc3RlciBjbG9jayBhbmQgdGhlCisgKiBvdXRwdXQgb2YgdGhlIENMS19QT1VUIHNpZ25hbCBmcm9tIHRoZSBQWEEuCisgKi8KK3N0YXRpYyBpbnQgY2xrX3BvdXQ7Cittb2R1bGVfcGFyYW0oY2xrX3BvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNsa19wb3V0LCAiVXNlIENMS19QT1VUIGFzIFdNOTcxMyBNQ0xLIChTVzE1IG9uIGJvYXJkKS4iKTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnBvdXQ7CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHp5bG9uaXRlOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgenlsb25pdGVfZGFwbV93aWRnZXRzW10gPSB7CkBAIC02MSwxMCArNzMsOCBAQAogCiBzdGF0aWMgaW50IHp5bG9uaXRlX3dtOTcxM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQkvKiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IHVzZSBvZiB0aGUgQUM5NyBjbG9jayBoZXJlLiAgSWYKLQkgKiBDTEtfUE9VVCBpcyBzZWxlY3RlZCBieSBTVzE1IHRoZW4gdGhlIGNsb2NrIEFQSSB3aWxsIG5lZWQKLQkgKiB0byBiZSB1c2VkIHRvIHJlcXVlc3QgYW5kIGVuYWJsZSBpdCBoZXJlLgotCSAqLworCWlmIChjbGtfcG91dCkKKwkJc25kX3NvY19kYWlfc2V0X3BsbCgmY29kZWMtPmRhaVswXSwgMCwgY2xrX2dldF9yYXRlKHBvdXQpLCAwKTsKIAogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHp5bG9uaXRlX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoenlsb25pdGVfZGFwbV93aWRnZXRzKSk7CkBAIC04NiwyNyArOTYsNTEgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CiAJdW5zaWduZWQgaW50IHBsbF9vdXQgPSAwOwotCXVuc2lnbmVkIGludCBhY2RzID0gMDsKIAl1bnNpZ25lZCBpbnQgd205NzEzX2RpdiA9IDA7CiAJaW50IHJldCA9IDA7CisJaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWludCB3aWR0aCA9IHNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CiAKLQlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwkvKiBPbmx5IHN1cHBvcnQgcmF0aW9zIHRoYXQgd2UgY2FuIGdlbmVyYXRlIG5lYXRseSBmcm9tIHRoZSBBQzk3CisJICogYmFzZWQgbWFzdGVyIGNsb2NrIC0gaW4gcGFydGljdWxhciwgdGhpcyBleGNsdWRlcyA0NC4xa0h6LgorCSAqIEluIG1vc3QgYXBwbGljYXRpb25zIHRoZSB2b2ljZSBEQUMgd2lsbCBiZSB1c2VkIGZvciB0ZWxlcGhvbnkKKwkgKiBkYXRhIHNvIG11bHRpcGxlcyBvZiA4a0h6IHdpbGwgYmUgdGhlIGNvbW1vbiBjYXNlLgorCSAqLworCXN3aXRjaCAocmF0ZSkgewogCWNhc2UgODAwMDoKIAkJd205NzEzX2RpdiA9IDEyOwotCQlwbGxfb3V0ID0gMjA0ODAwMDsKIAkJYnJlYWs7CiAJY2FzZSAxNjAwMDoKIAkJd205NzEzX2RpdiA9IDY7Ci0JCXBsbF9vdXQgPSA0MDk2MDAwOwogCQlicmVhazsKIAljYXNlIDQ4MDAwOgotCWRlZmF1bHQ6CiAJCXdtOTcxM19kaXYgPSAyOwotCQlwbGxfb3V0ID0gMTIyODgwMDA7Ci0JCWFjZHMgPSAxOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBEb24ndCBzdXBwb3J0IE9TUyBlbXVsYXRpb24gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogQWRkIDEgdG8gdGhlIHdpZHRoIGZvciB0aGUgbGVhZGluZyBjbG9jayBjeWNsZSAqLworCXBsbF9vdXQgPSByYXRlICogKHdpZHRoICsgMSkgKiA4OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19BVURJTywgMCwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNwdV9kYWksIDAsIDAsIHBsbF9vdXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNsa19wb3V0KQorCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV005NzEzX1BDTUNMS19QTExfRElWLAorCQkJCQkgICAgIFdNOTcxM19QQ01ESVYod205NzEzX2RpdikpOworCWVsc2UKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNOTcxM19QQ01DTEtfRElWLAorCQkJCQkgICAgIFdNOTcxM19QQ01ESVYod205NzEzX2RpdikpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CiAJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CiAJaWYgKHJldCA8IDApCkBAIC0xMTcsMzIgKzE1MSw2IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3QoY3B1X2RhaSwKLQkJCQkgICAgICAgcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyksCi0JCQkJICAgICAgIHBhcmFtc19jaGFubmVscyhwYXJhbXMpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY3B1X2RhaSwgMCwgMCwgcGxsX291dCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFBYQV9TU1BfQVVESU9fRElWX0FDRFMsIGFjZHMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19BVURJTywgMCwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBOb3RlIHRoYXQgaWYgdGhlIFBMTCBpcyBpbiB1c2UgdGhlIFdNOTcxM19QQ01DTEtfUExMX0RJViBuZWVkcwotCSAqIHRvIGJlIHNldCBpbnN0ZWFkLgotCSAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY29kZWNfZGFpLCBXTTk3MTNfUENNQ0xLX0RJViwKLQkJCQkgICAgIFdNOTcxM19QQ01ESVYod205NzEzX2RpdikpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3Myw4ICsxODEsNzIgQEAKIH0sCiB9OwogCitzdGF0aWMgaW50IHp5bG9uaXRlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKworCWlmIChjbGtfcG91dCkgeworCQlwb3V0ID0gY2xrX2dldChOVUxMLCAiQ0xLX1BPVVQiKTsKKwkJaWYgKElTX0VSUihwb3V0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG9idGFpbiBDTEtfUE9VVDogJWxkXG4iLAorCQkJCVBUUl9FUlIocG91dCkpOworCQkJcmV0dXJuIFBUUl9FUlIocG91dCk7CisJCX0KKworCQlyZXQgPSBjbGtfZW5hYmxlKHBvdXQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBlbmFibGUgQ0xLX1BPVVQ6ICVkXG4iLAorCQkJCXJldCk7CisJCQljbGtfcHV0KHBvdXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRldl9kYmcoJnBkZXYtPmRldiwgIk1DTEsgZW5hYmxlZCBhdCAlbHVIelxuIiwKKwkJCWNsa19nZXRfcmF0ZShwb3V0KSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgenlsb25pdGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKGNsa19wb3V0KSB7CisJCWNsa19kaXNhYmxlKHBvdXQpOworCQljbGtfcHV0KHBvdXQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp5bG9uaXRlX3N1c3BlbmRfcG9zdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaWYgKGNsa19wb3V0KQorCQljbGtfZGlzYWJsZShwb3V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp5bG9uaXRlX3Jlc3VtZV9wcmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjbGtfcG91dCkgeworCQlyZXQgPSBjbGtfZW5hYmxlKHBvdXQpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZW5hYmxlIENMS19QT1VUOiAlZFxuIiwKKwkJCQlyZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHp5bG9uaXRlID0gewogCS5uYW1lID0gIlp5bG9uaXRlIiwKKwkucHJvYmUgPSAmenlsb25pdGVfcHJvYmUsCisJLnJlbW92ZSA9ICZ6eWxvbml0ZV9yZW1vdmUsCisJLnN1c3BlbmRfcG9zdCA9ICZ6eWxvbml0ZV9zdXNwZW5kX3Bvc3QsCisJLnJlc3VtZV9wcmUgPSAmenlsb25pdGVfcmVzdW1lX3ByZSwKIAkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKIAkuZGFpX2xpbmsgPSB6eWxvbml0ZV9kYWksCiAJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoenlsb25pdGVfZGFpKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCmluZGV4IGZjZDAzYWMuLjJmM2EyMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKKysrIGIvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZwpAQCAtMSwxOSArMSwzMSBAQAogY29uZmlnIFNORF9TM0MyNFhYX1NPQwotCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIHRoZSBTYW1zdW5nIFMzQzI0WFggY2hpcHMiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciB0aGUgU2Ftc3VuZyBTM0NYWFhYIGNoaXBzIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwIHx8IEFSQ0hfUzNDNjRYWAogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bwotCSAgdGhlIFMzQzI0WFggQUM5NywgSTJTIG9yIFNTUCBpbnRlcmZhY2UuIFlvdSB3aWxsIGFsc28gbmVlZAotCSAgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCisJICB0aGUgUzNDMjRYWCBhbmQgUzNDNjRYWCBBQzk3LCBJMlMgb3IgU1NQIGludGVyZmFjZS4gWW91IHdpbGwKKwkgIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KIAogY29uZmlnIFNORF9TM0MyNFhYX1NPQ19JMlMKIAl0cmlzdGF0ZQorCXNlbGVjdCBTM0MyNDEwX0RNQQorCitjb25maWcgU05EX1MzQ19JMlNWMl9TT0MKKwl0cmlzdGF0ZQogCiBjb25maWcgU05EX1MzQzI0MTJfU09DX0kyUwogCXRyaXN0YXRlCisJc2VsZWN0IFNORF9TM0NfSTJTVjJfU09DCisJc2VsZWN0IFMzQzI0MTBfRE1BCisKK2NvbmZpZyBTTkRfUzNDNjRYWF9TT0NfSTJTCisJdHJpc3RhdGUKKwlzZWxlY3QgU05EX1MzQ19JMlNWMl9TT0MKKwlzZWxlY3QgUzNDNjRYWF9ETUEKIAogY29uZmlnIFNORF9TM0MyNDQzX1NPQ19BQzk3CiAJdHJpc3RhdGUKKwlzZWxlY3QgUzNDMjQxMF9ETUEKIAlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0JVUwogCQpAQCAtMjYsNiArMzgsMTQgQEAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gc21kazI0NDAKIAkgIHdpdGggdGhlIFdNODc1My4KIAorY29uZmlnIFNORF9TM0MyNFhYX1NPQ19KSVZFX1dNODc1MAorCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIEppdmUiCisJZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9KSVZFCisJc2VsZWN0IFNORF9TT0NfV004NzUwCisJc2VsZWN0IFNORF9TM0MyNDEyX1NPQ19JMlMKKwloZWxwCisJICBTYXQgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBKaXZlLgorCiBjb25maWcgU05EX1MzQzI0WFhfU09DX1NNREsyNDQzX1dNOTcxMAogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBTTURLMjQ0MyAtIFdNOTcxMCIKIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX1NNREsyNDQzCkBAIC00OCw0ICs2OCw1IEBACiAJdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBVREExMzRYIHdpcmVkIHRvIGEgUzNDMjRYWCIKICAgICAgICAJZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MKICAgICAgICAJc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19JMlMKKwlzZWxlY3QgU05EX1NPQ19MMwogICAgICAgIAlzZWxlY3QgU05EX1NPQ19VREExMzRYCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCmluZGV4IDk2YjNmM2YuLjA3YTkzYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCkBAIC0yLDE5ICsyLDI1IEBACiBzbmQtc29jLXMzYzI0eHgtb2JqcyA6PSBzM2MyNHh4LXBjbS5vCiBzbmQtc29jLXMzYzI0eHgtaTJzLW9ianMgOj0gczNjMjR4eC1pMnMubwogc25kLXNvYy1zM2MyNDEyLWkycy1vYmpzIDo9IHMzYzI0MTItaTJzLm8KK3NuZC1zb2MtczNjNjR4eC1pMnMtb2JqcyA6PSBzM2M2NHh4LWkycy5vCiBzbmQtc29jLXMzYzI0NDMtYWM5Ny1vYmpzIDo9IHMzYzI0NDMtYWM5Ny5vCitzbmQtc29jLXMzYy1pMnMtdjItb2JqcyA6PSBzM2MtaTJzLXYyLm8KIAogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQykgKz0gc25kLXNvYy1zM2MyNHh4Lm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0eHgtaTJzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjQ0M19TT0NfQUM5NykgKz0gc25kLXNvYy1zM2MyNDQzLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNDEyX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjMjQxMi1pMnMubworb2JqLSQoQ09ORklHX1NORF9TM0M2NFhYX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjNjR4eC1pMnMubworb2JqLSQoQ09ORklHX1NORF9TM0NfSTJTVjJfU09DKSArPSBzbmQtc29jLXMzYy1pMnMtdjIubwogCiAjIFMzQzI0WFggTWFjaGluZSBTdXBwb3J0CitzbmQtc29jLWppdmUtd204NzUwLW9ianMgOj0gaml2ZV93bTg3NTAubwogc25kLXNvYy1uZW8xOTczLXdtODc1My1vYmpzIDo9IG5lbzE5NzNfd204NzUzLm8KIHNuZC1zb2Mtc21kazI0NDMtd205NzEwLW9ianMgOj0gc21kazI0NDNfd205NzEwLm8KIHNuZC1zb2MtbG4yNDQwc2JjLWFsYzY1MC1vYmpzIDo9IGxuMjQ0MHNiY19hbGM2NTAubwogc25kLXNvYy1zM2MyNHh4LXVkYTEzNHgtb2JqcyA6PSBzM2MyNHh4X3VkYTEzNHgubwogCitvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0pJVkVfV004NzUwKSArPSBzbmQtc29jLWppdmUtd204NzUwLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTMpICs9IHNuZC1zb2MtbmVvMTk3My13bTg3NTMubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TTURLMjQ0M19XTTk3MTApICs9IHNuZC1zb2Mtc21kazI0NDMtd205NzEwLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTE4yNDQwU0JDX0FMQzY1MCkgKz0gc25kLXNvYy1sbjI0NDBzYmMtYWxjNjUwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L2ppdmVfd204NzUwLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9qaXZlX3dtODc1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMDYzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9qaXZlX3dtODc1MC5jCkBAIC0wLDAgKzEsMjAxIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9qaXZlX3dtODc1MC5jCisgKgorICogQ29weXJpZ2h0IDIwMDcsMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBCYXNlZCBvbiBzb3VuZC9zb2MvcHhhL3NwaXR6LmMKKyAqCUNvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKglDb3B5cmlnaHQgMjAwNSBPcGVuZWRoYW5kIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCisjaW5jbHVkZSAiczNjMjQxMi1pMnMuaCIKKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3NTAuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyAiSGVhZHBob25lIEphY2siLCBOVUxMLCAiTE9VVDEiIH0sCisJeyAiSGVhZHBob25lIEphY2siLCBOVUxMLCAiUk9VVDEiIH0sCisJeyAiSW50ZXJuYWwgU3BlYWtlciIsIE5VTEwsICJMT1VUMiIgfSwKKwl7ICJJbnRlcm5hbCBTcGVha2VyIiwgTlVMTCwgIlJPVVQyIiB9LAorCXsgIkxJTlBVVDEiLCBOVUxMLCAiTGluZSBJbnB1dCIgfSwKKwl7ICJSSU5QVVQxIiwgTlVMTCwgIkxpbmUgSW5wdXQiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NzUwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJJbnRlcm5hbCBTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkxpbmUgSW4iLCBOVUxMKSwKK307CisKK3N0YXRpYyBpbnQgaml2ZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IHMzY19pMnN2Ml9yYXRlX2NhbGMgZGl2OworCXVuc2lnbmVkIGludCBjbGsgPSAwOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA4MDAwOgorCWNhc2UgMTYwMDA6CisJY2FzZSA0ODAwMDoKKwljYXNlIDk2MDAwOgorCQljbGsgPSAxMjI4ODAwMDsKKwkJYnJlYWs7CisJY2FzZSAxMTAyNToKKwljYXNlIDIyMDUwOgorCWNhc2UgNDQxMDA6CisJCWNsayA9IDExMjg5NjAwOworCQlicmVhazsKKwl9CisKKwlzM2NfaTJzdjJfY2FsY19yYXRlKCZkaXYsIE5VTEwsIHBhcmFtc19yYXRlKHBhcmFtcyksCisJCQkgICAgczNjMjQxMl9nZXRfaWlzY2xrKCkpOworCisJLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrIGZvciBEQUMgYW5kIEFEQyAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3NTBfU1lTQ0xLLCBjbGssCisJCQkJICAgICBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUzNDMjQxMl9ESVZfUkNMSywgZGl2LmZzX2Rpdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0MTJfRElWX1BSRVNDQUxFUiwKKwkJCQkgICAgIGRpdi5jbGtfZGl2IC0gMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBqaXZlX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gaml2ZV9od19wYXJhbXMsCit9OworCitzdGF0aWMgaW50IGppdmVfd204NzUwX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBlcnI7CisKKwkvKiBUaGVzZSBlbmRwb2ludHMgYXJlIG5vdCBiZWluZyB1c2VkLiAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5QVVQyIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTlBVVDIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOUFVUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OTyIpOworCisJLyogQWRkIGppdmUgc3BlY2lmaWMgd2lkZ2V0cyAqLworCWVyciA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc1MF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUod204NzUwX2RhcG1fd2lkZ2V0cykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFkZCB3aWRnZXRzICglZClcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgaml2ZV9kYWkgPSB7CisJLm5hbWUJCT0gIndtODc1MCIsCisJLnN0cmVhbV9uYW1lCT0gIldNODc1MCIsCisJLmNwdV9kYWkJPSAmczNjMjQxMl9pMnNfZGFpLAorCS5jb2RlY19kYWkJPSAmd204NzUwX2RhaSwKKwkuaW5pdAkJPSBqaXZlX3dtODc1MF9pbml0LAorCS5vcHMJCT0gJmppdmVfb3BzLAorfTsKKworLyogaml2ZSBhdWRpbyBtYWNoaW5lIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX21hY2hpbmUgc25kX3NvY19tYWNoaW5lX2ppdmUgPSB7CisJLm5hbWUJCT0gIkppdmUiLAorCS5kYWlfbGluawk9ICZqaXZlX2RhaSwKKwkubnVtX2xpbmtzCT0gMSwKK307CisKKy8qIGppdmUgYXVkaW8gcHJpdmF0ZSBkYXRhICovCitzdGF0aWMgc3RydWN0IHdtODc1MF9zZXR1cF9kYXRhIGppdmVfd204NzUwX3NldHVwID0geworfTsKKworLyogaml2ZSBhdWRpbyBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2Ugaml2ZV9zbmRfZGV2ZGF0YSA9IHsKKwkubWFjaGluZQk9ICZzbmRfc29jX21hY2hpbmVfaml2ZSwKKwkucGxhdGZvcm0JPSAmczNjMjR4eF9zb2NfcGxhdGZvcm0sCisJLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X3dtODc1MF9zcGksCisJLmNvZGVjX2RhdGEJPSAmaml2ZV93bTg3NTBfc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaml2ZV9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBqaXZlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX2ppdmUoKSkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoIkpJVkUgV004NzUwIEF1ZGlvIHN1cHBvcnRcbiIpOworCisJaml2ZV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFqaXZlX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoaml2ZV9zbmRfZGV2aWNlLCAmaml2ZV9zbmRfZGV2ZGF0YSk7CisJaml2ZV9zbmRfZGV2ZGF0YS5kZXYgPSAmaml2ZV9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChqaXZlX3NuZF9kZXZpY2UpOworCisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChqaXZlX3NuZF9kZXZpY2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGppdmVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGppdmVfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGppdmVfaW5pdCk7Cittb2R1bGVfZXhpdChqaXZlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIEppdmUgQXVkaW8gc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMKaW5kZXggNDViYjEyZS4uMjg5ZmFkZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX3dtODc1My5jCkBAIC0yOSwyNSArMjksMTcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGktZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3NTMuaCIKICNpbmNsdWRlICJsbTQ4NTcuaCIKICNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgogI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCiAKLS8qIERlYnVnZ2luZyBzdHVmZiAqLwotI2RlZmluZSBTM0MyNFhYX1NPQ19ORU8xOTczX1dNODc1M19ERUJVRyAwCi0jaWYgUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTNfREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHICJzM2MyNHh4LXNvYy1uZW8xOTczLXdtODc1MzogIiB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQogLyogZGVmaW5lIHRoZSBzY2VuYXJpb3MgKi8KICNkZWZpbmUgTkVPX0FVRElPX09GRgkJCTAKICNkZWZpbmUgTkVPX0dTTV9DQUxMX0FVRElPX0hBTkRTRVQJMQpAQCAtNzIsNyArNjQsNyBAQAogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgaWlzX2Nsa3JhdGU7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzX2Nsa3JhdGUgPSBzM2MyNHh4X2kyc19nZXRfY2xvY2tyYXRlKCk7CiAKQEAgLTE1OCw3ICsxNTAsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogZGlzYWJsZSB0aGUgUExMICovCiAJcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg3NTNfUExMMSwgMCwgMCk7CkBAIC0xODEsNyArMTczLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGlpc19jbGtyYXRlOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc19jbGtyYXRlID0gczNjMjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSgpOwogCkBAIC0yMjQsNyArMjE2LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIGRpc2FibGUgdGhlIFBMTCAqLwogCXJldHVybiBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgV004NzUzX1BMTDIsIDAsIDApOwpAQCAtMjQ2LDcgKzIzOCw3IEBACiAKIHN0YXRpYyBpbnQgc2V0X3NjZW5hcmlvX2VuZHBvaW50cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBzY2VuYXJpbykKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc3dpdGNoIChuZW8xOTczX3NjZW5hcmlvKSB7CiAJY2FzZSBORU9fQVVESU9fT0ZGOgpAQCAtMzMwLDcgKzMyMiw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChuZW8xOTczX3NjZW5hcmlvID09IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQogCQlyZXR1cm4gMDsKQEAgLTM0NCw3ICszMzYsNyBAQAogCiBzdGF0aWMgdm9pZCBsbTQ4NTdfd3JpdGVfcmVncyh2b2lkKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoaTJjX21hc3Rlcl9zZW5kKGkyYywgbG00ODU3X3JlZ3MsIDQpICE9IDQpCiAJCXByaW50ayhLRVJOX0VSUiAibG00ODU3OiBpMmMgd3JpdGUgZmFpbGVkXG4iKTsKQEAgLTM1Nyw3ICszNDksNyBAQAogCWludCBzaGlmdCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4MEY7CiAJaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhGRjsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IChsbTQ4NTdfcmVnc1tyZWddID4+IHNoaWZ0KSAmIG1hc2s7CiAJcmV0dXJuIDA7CkBAIC0zODUsNyArMzc3LDcgQEAKIHsKIAl1OCB2YWx1ZSA9IGxtNDg1N19yZWdzW0xNNDg1N19DVFJMXSAmIDB4MEY7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHZhbHVlKQogCQl2YWx1ZSAtPSA1OwpAQCAtMzk5LDcgKzM5MSw3IEBACiB7CiAJdTggdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAodmFsdWUpCiAJCXZhbHVlICs9IDU7CkBAIC01MDYsOSArNDk4LDkgQEAKICAqLwogc3RhdGljIGludCBuZW8xOTczX3dtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogc2V0IHVwIE5DIGNvZGVjIHBpbnMgKi8KIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTE9VVDIiKTsKQEAgLTUyNiwxMyArNTE4LDEwIEBACiAJc2V0X3NjZW5hcmlvX2VuZHBvaW50cyhjb2RlYywgTkVPX0FVRElPX09GRik7CiAKIAkvKiBhZGQgbmVvMTk3MyBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19uZW8xOTczX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204NzUzX25lbzE5NzNfY29udHJvbHNbaV0sCi0JCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzUzX25lbzE5NzNfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSg4NzUzX25lbzE5NzNfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIHNldCB1cCBuZW8xOTczIHNwZWNpZmljIGF1ZGlvIHJvdXRlcyAqLwogCWVyciA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBkYXBtX3JvdXRlcywKQEAgLTU4NSwyMSArNTc0LDE1IEBACiAJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobmVvMTk3M19kYWkpLAogfTsKIAotc3RhdGljIHN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSBuZW8xOTczX3dtODc1M19zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDAsCi0JLmkyY19hZGRyZXNzID0gMHgxYSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgbmVvMTk3M19zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZuZW8xOTczLAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3NTMsCi0JLmNvZGVjX2RhdGEgPSAmbmVvMTk3M193bTg3NTNfc2V0dXAsCiB9OwogCiBzdGF0aWMgaW50IGxtNDg1N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWkyYyA9IGNsaWVudDsKIApAQCAtNjA5LDcgKzU5Miw3IEBACiAKIHN0YXRpYyBpbnQgbG00ODU3X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaTJjID0gTlVMTDsKIApAQCAtNjIwLDcgKzYwMyw3IEBACiAKIHN0YXRpYyBpbnQgbG00ODU3X3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlkZXZfZGJnKCZkZXYtPmRldiwgImxtNDg1N19zdXNwZW5kXG4iKTsKIAlsbTQ4NTdfc3RhdGUgPSBsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJiAweGY7CkBAIC02MzMsNyArNjE2LDcgQEAKIAogc3RhdGljIGludCBsbTQ4NTdfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpkZXYpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChsbTQ4NTdfc3RhdGUpIHsKIAkJbG00ODU3X3JlZ3NbTE00ODU3X0NUUkxdIHw9IChsbTQ4NTdfc3RhdGUgJiAweDBmKTsKQEAgLTY0NCw3ICs2MjcsNyBAQAogCiBzdGF0aWMgdm9pZCBsbTQ4NTdfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmRldikKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJZGV2X2RiZygmZGV2LT5kZXYsICJsbTQ4NTdfc2h1dGRvd25cbiIpOwogCWxtNDg1N19yZWdzW0xNNDg1N19DVFJMXSAmPSAweGYwOwpAQCAtNjc1LDcgKzY1OCw3IEBACiB7CiAJaW50IHJldDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIW1hY2hpbmVfaXNfbmVvMTk3M19ndGEwMSgpKSB7CiAJCXByaW50ayhLRVJOX0lORk8KQEAgLTcwNiw3ICs2ODksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmVvMTk3M19leGl0KHZvaWQpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWkyY19kZWxfZHJpdmVyKCZsbTQ4NTdfaTJjX2RyaXZlcik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobmVvMTk3M19zbmRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTVhNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jCkBAIC0wLDAgKzEsNjM4IEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJjLXYyLmMKKyAqCisgKiBBTFNBIFNvYyBBdWRpbyBMYXllciAtIEkyUyBjb3JlIGZvciBuZXdlciBTYW1zdW5nIFNvQ3MuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKglHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tCisgKglsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA3LCAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zM2MyNDEyLWlpcy5oPgorCisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisKKyNpbmNsdWRlICJzM2MtaTJzLXYyLmgiCisKKyNkZWZpbmUgUzNDMjQxMl9JMlNfREVCVUdfQ09OIDAKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKnRvX2luZm8oc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQoreworCXJldHVybiBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Cit9CisKKyNkZWZpbmUgYml0X3NldCh2LCBiKSAoKCh2KSAmIChiKSkgPyAxIDogMCkKKworI2lmIFMzQzI0MTJfSTJTX0RFQlVHX0NPTgorc3RhdGljIHZvaWQgZGJnX3Nob3djb24oY29uc3QgY2hhciAqZm4sIHUzMiBjb24pCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMUkk9JWQsIFRYRkVNUFQ9JWQsIFJYRkVNUFQ9JWQsIFRYRkZVTEw9JWQsIFJYRkZVTEw9JWRcbiIsIGZuLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fTFJJTkRFWCksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRU1QVFkpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhGSUZPX0VNUFRZKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRklGT19GVUxMKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRklGT19GVUxMKSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBBVVNFOiBUWERNQT0lZCwgUlhETUE9JWQsIFRYQ0g9JWQsIFJYQ0g9JWRcbiIsCisJICAgICAgIGZuLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0UpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0UpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBQ1RJVkU6IFRYRE1BPSVkLCBSWERNQT0lZCwgSUlTPSVkXG4iLCBmbiwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRSkpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfc2hvd2Nvbihjb25zdCBjaGFyICpmbiwgdTMyIGNvbikKK3sKK30KKyNlbmRpZgorCisKKy8qIFR1cm4gb24gb3Igb2ZmIHRoZSB0cmFuc21pc3Npb24gcGF0aC4gKi8KK3ZvaWQgczNjMjQxMl9zbmRfdHhjdHJsKHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzLCBpbnQgb24pCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gaTJzLT5yZWdzOworCXUzMiBmaWMsIGNvbiwgbW9kOworCisJcHJfZGVidWcoIiVzKCVkKVxuIiwgX19mdW5jX18sIG9uKTsKKworCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisJY29uID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwltb2QgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJcHJfZGVidWcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7CisKKwlpZiAob24pIHsKKwkJY29uIHw9IFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRSB8IFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7CisJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0U7CisJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRTsKKworCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgeworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOgorCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKKwkJCS8qIGRvIG5vdGhpbmcsIHdlIGFyZSBpbiB0aGUgcmlnaHQgbW9kZSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGkycy0+ZGV2LCAiVFhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7CisJCX0KKworCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOworCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCX0gZWxzZSB7CisJCS8qIE5vdGUsIHdlIGRvIG5vdCBoYXZlIGFueSBpbmRpY2F0aW9uIHRoYXQgdGhlIEZJRk8gcHJvYmxlbXMKKwkJICogdGhhIHRoZSBTM0MyNDEwLzI0NDAgaGFkIGFwcGx5IGhlcmUsIHNvIHdlIHNob3VsZCBiZSBhYmxlCisJCSAqIHRvIGRpc2FibGUgdGhlIERNQSBhbmQgVFggd2l0aG91dCByZXNldHRpbmcgdGhlIEZJRk9TLgorCQkgKi8KKworCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFOworCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0U7CisJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFOworCisJCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7CisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgorCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7CisJCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk7CisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOgorCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7CisJCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycihpMnMtPmRldiwgIlRYRElTOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKKwkJfQorCisJCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJfQorCisJZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKKwlkYmdfc2hvd2NvbihfX2Z1bmNfXywgY29uKTsKKwlwcl9kZWJ1ZygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzI0MTJfc25kX3R4Y3RybCk7CisKK3ZvaWQgczNjMjQxMl9zbmRfcnhjdHJsKHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzLCBpbnQgb24pCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gaTJzLT5yZWdzOworCXUzMiBmaWMsIGNvbiwgbW9kOworCisJcHJfZGVidWcoIiVzKCVkKVxuIiwgX19mdW5jX18sIG9uKTsKKworCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisJY29uID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwltb2QgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJcHJfZGVidWcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7CisKKwlpZiAob24pIHsKKwkJY29uIHw9IFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRSB8IFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7CisJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0U7CisJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRTsKKworCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgeworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKKwkJCS8qIGRvIG5vdGhpbmcsIHdlIGFyZSBpbiB0aGUgcmlnaHQgbW9kZSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGkycy0+ZGV2LCAiUlhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7CisJCX0KKworCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOworCX0gZWxzZSB7CisJCS8qIFNlZSB0eGN0cmwgbm90ZXMgb24gRklGT3MuICovCisKKwkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkU7CisJCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0U7CisJCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRTsKKworCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgeworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgorCQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOworCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7CisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoaTJzLT5kZXYsICJSWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKKwkJfQorCisJCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJfQorCisJZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKKwlwcl9kZWJ1ZygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzI0MTJfc25kX3J4Y3RybCk7CisKKy8qCisgKiBXYWl0IGZvciB0aGUgTFIgc2lnbmFsIHRvIGFsbG93IHN5bmNocm9uaXNhdGlvbiB0byB0aGUgTC9SIGNsb2NrCisgKiBmcm9tIHRoZSBjb2RlYy4gTWF5IG9ubHkgYmUgbmVlZGVkIGZvciBzbGF2ZSBtb2RlLgorICovCitzdGF0aWMgaW50IHMzYzI0MTJfc25kX2xyc3luYyhzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycykKK3sKKwl1MzIgaWlzY29uOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUpOworCisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKworCXdoaWxlICgxKSB7CisJCWlpc2NvbiA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwkJaWYgKGlpc2NvbiAmIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgpCisJCQlicmVhazsKKworCQlpZiAodGltZW91dCA8IGppZmZpZXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUzNDMjQxMiBJMlMgREFJIGZvcm1hdAorICovCitzdGF0aWMgaW50IHMzYzI0MTJfaTJzX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGNwdV9kYWkpOworCXUzMiBpaXNtb2Q7CisKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCisJaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCXByX2RlYnVnKCJod19wYXJhbXMgcjogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTMpCisjZGVmaW5lIElJU01PRF9NQVNURVJfTUFTSyBTM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSworI2RlZmluZSBJSVNNT0RfU0xBVkUgUzNDMjQxMl9JSVNNT0RfU0xBVkUKKyNkZWZpbmUgSUlTTU9EX01BU1RFUiBTM0MyNDEyX0lJU01PRF9NQVNURVJfSU5URVJOQUwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9TM0M2NFhYKQorLyogRnJvbSBSZXYxLjEgZGF0YXNoZWV0LCB3ZSBoYXZlIHR3byBtYXN0ZXIgYW5kIHR3byBzbGF2ZSBtb2RlczoKKyAqIElNU1sxMToxMF06CisgKgkwMCA9IG1hc3RlciBtb2RlLCBmZWQgZnJvbSBQQ0xLCisgKgkwMSA9IG1hc3RlciBtb2RlLCBmZWQgZnJvbSBDTEtBVURJTworICoJMTAgPSBzbGF2ZSBtb2RlLCB1c2luZyBQQ0xLCisgKgkxMSA9IHNsYXZlIG1vZGUsIHVzaW5nIEkyU0NMSworICovCisjZGVmaW5lIElJU01PRF9NQVNURVJfTUFTSyAoMSA8PCAxMSkKKyNkZWZpbmUgSUlTTU9EX1NMQVZFICgxIDw8IDExKQorI2RlZmluZSBJSVNNT0RfTUFTVEVSICgweDApCisjZW5kaWYKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWkycy0+bWFzdGVyID0gMDsKKwkJaWlzbW9kICY9IH5JSVNNT0RfTUFTVEVSX01BU0s7CisJCWlpc21vZCB8PSBJSVNNT0RfU0xBVkU7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJaTJzLT5tYXN0ZXIgPSAxOworCQlpaXNtb2QgJj0gfklJU01PRF9NQVNURVJfTUFTSzsKKwkJaWlzbW9kIHw9IElJU01PRF9NQVNURVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJ1bmtud29uIG1hc3Rlci9zbGF2ZSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX1NERl9NQVNLOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9NU0I7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX0xTQjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfSUlTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiVW5rbm93biBkYXRhIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlbChpaXNtb2QsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHc6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0MTJfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqc29jZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpID0gcnRkLT5kYWk7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGRhaS0+Y3B1X2RhaSk7CisJdTMyIGlpc21vZDsKKworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSA9IGkycy0+ZG1hX3BsYXliYWNrOworCWVsc2UKKwkJZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSA9IGkycy0+ZG1hX2NhcHR1cmU7CisKKwkvKiBXb3JraW5nIGNvcGllcyBvZiByZWdpc3RlciAqLworCWlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwlwcl9kZWJ1ZygiJXM6IHI6IElJU01PRDogJXhcbiIsIF9fZnVuY19fLCBpaXNtb2QpOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CisJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF84QklUOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EXzhCSVQ7CisJCWJyZWFrOworCX0KKworCXdyaXRlbChpaXNtb2QsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwlwcl9kZWJ1ZygiJXM6IHc6IElJU01PRDogJXhcbiIsIF9fZnVuY19fLCBpaXNtb2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0MTJfaTJzX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhydGQtPmRhaS0+Y3B1X2RhaSk7CisJaW50IGNhcHR1cmUgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKKwl1bnNpZ25lZCBsb25nIGlycXM7CisJaW50IHJldCA9IDA7CisKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQkvKiBPbiBzdGFydCwgZW5zdXJlIHRoYXQgdGhlIEZJRk9zIGFyZSBjbGVhcmVkIGFuZCByZXNldC4gKi8KKworCQl3cml0ZWwoY2FwdHVyZSA/IFMzQzI0MTJfSUlTRklDX1JYRkxVU0ggOiBTM0MyNDEyX0lJU0ZJQ19UWEZMVVNILAorCQkgICAgICAgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCisJCS8qIGNsZWFyIGFnYWluLCBqdXN0IGluIGNhc2UgKi8KKwkJd3JpdGVsKDB4MCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoIWkycy0+bWFzdGVyKSB7CisJCQlyZXQgPSBzM2MyNDEyX3NuZF9scnN5bmMoaTJzKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBleGl0X2VycjsKKwkJfQorCisJCWxvY2FsX2lycV9zYXZlKGlycXMpOworCisJCWlmIChjYXB0dXJlKQorCQkJczNjMjQxMl9zbmRfcnhjdHJsKGkycywgMSk7CisJCWVsc2UKKwkJCXMzYzI0MTJfc25kX3R4Y3RybChpMnMsIDEpOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGlycXMpOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlsb2NhbF9pcnFfc2F2ZShpcnFzKTsKKworCQlpZiAoY2FwdHVyZSkKKwkJCXMzYzI0MTJfc25kX3J4Y3RybChpMnMsIDApOworCQllbHNlCisJCQlzM2MyNDEyX3NuZF90eGN0cmwoaTJzLCAwKTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCitleGl0X2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IFMzQzI0MTIgQ2xvY2sgZGl2aWRlcnMKKyAqLworc3RhdGljIGludCBzM2MyNDEyX2kyc19zZXRfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCQkgIGludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGNwdV9kYWkpOworCXUzMiByZWc7CisKKwlwcl9kZWJ1ZygiJXMoJXAsICVkLCAlZClcbiIsIF9fZnVuY19fLCBjcHVfZGFpLCBkaXZfaWQsIGRpdik7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgUzNDX0kyU1YyX0RJVl9CQ0xLOgorCQlyZWcgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXJlZyAmPSB+UzNDMjQxMl9JSVNNT0RfQkNMS19NQVNLOworCQl3cml0ZWwocmVnIHwgZGl2LCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwkJcHJfZGVidWcoIiVzOiBNT0Q9JTA4eFxuIiwgX19mdW5jX18sIHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKSk7CisJCWJyZWFrOworCisJY2FzZSBTM0NfSTJTVjJfRElWX1JDTEs6CisJCWlmIChkaXYgPiAzKSB7CisJCQkvKiBjb252ZXJ0IHZhbHVlIHRvIGJpdCBmaWVsZCAqLworCisJCQlzd2l0Y2ggKGRpdikgeworCQkJY2FzZSAyNTY6CisJCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS18yNTZGUzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAzODQ6CisJCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS18zODRGUzsKKwkJCQlicmVhazsKKworCQkJY2FzZSA1MTI6CisJCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS181MTJGUzsKKwkJCQlicmVhazsKKworCQkJY2FzZSA3Njg6CisJCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS183NjhGUzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCisJCXJlZyA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJcmVnICY9IH5TM0MyNDEyX0lJU01PRF9SQ0xLX01BU0s7CisJCXdyaXRlbChyZWcgfCBkaXYsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJcHJfZGVidWcoIiVzOiBNT0Q9JTA4eFxuIiwgX19mdW5jX18sIHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKSk7CisJCWJyZWFrOworCisJY2FzZSBTM0NfSTJTVjJfRElWX1BSRVNDQUxFUjoKKwkJaWYgKGRpdiA+PSAwKSB7CisJCQl3cml0ZWwoKGRpdiA8PCA4KSB8IFMzQzI0MTJfSUlTUFNSX1BTUkVOLAorCQkJICAgICAgIGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbCgweDAsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKKwkJfQorCQlwcl9kZWJ1ZygiJXM6IFBTUj0lMDh4XG4iLCBfX2Z1bmNfXywgcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogZGVmYXVsdCB0YWJsZSBvZiBhbGwgYXZhaWFsYWJsZSByb290IGZzIGRpdmlzb3JzICovCitzdGF0aWMgdW5zaWduZWQgaW50IGlpc19mc190YWJbXSA9IHsgMjU2LCA1MTIsIDM4NCwgNzY4IH07CisKK2ludCBzM2MyNDEyX2lpc19jYWxjX3JhdGUoc3RydWN0IHMzY19pMnN2Ml9yYXRlX2NhbGMgKmluZm8sCisJCQkgIHVuc2lnbmVkIGludCAqZnN0YWIsCisJCQkgIHVuc2lnbmVkIGludCByYXRlLCBzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBjbGtyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgZnNjbGs7CisJdW5zaWduZWQgaW50IGFjdHVhbDsKKwl1bnNpZ25lZCBpbnQgZnM7CisJdW5zaWduZWQgaW50IGZzZGl2OworCXNpZ25lZCBpbnQgZGV2aWF0aW9uID0gMDsKKwl1bnNpZ25lZCBpbnQgYmVzdF9mcyA9IDA7CisJdW5zaWduZWQgaW50IGJlc3RfZGl2ID0gMDsKKwl1bnNpZ25lZCBpbnQgYmVzdF9yYXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgYmVzdF9kZXZpYXRpb24gPSBJTlRfTUFYOworCisJaWYgKGZzdGFiID09IE5VTEwpCisJCWZzdGFiID0gaWlzX2ZzX3RhYjsKKworCWZvciAoZnMgPSAwOyBmcyA8IEFSUkFZX1NJWkUoaWlzX2ZzX3RhYik7IGZzKyspIHsKKwkJZnNkaXYgPSBpaXNfZnNfdGFiW2ZzXTsKKworCQlmc2NsayA9IGNsa3JhdGUgLyBmc2RpdjsKKwkJZGl2ID0gZnNjbGsgLyByYXRlOworCisJCWlmICgoZnNjbGsgJSByYXRlKSA+IChyYXRlIC8gMikpCisJCQlkaXYrKzsKKworCQlpZiAoZGl2IDw9IDEpCisJCQljb250aW51ZTsKKworCQlhY3R1YWwgPSBjbGtyYXRlIC8gKGZzZGl2ICogZGl2KTsKKwkJZGV2aWF0aW9uID0gYWN0dWFsIC0gcmF0ZTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiJWRmczogZGl2ICVkID0+IHJlc3VsdCAlZCwgZGV2aWF0aW9uICVkXG4iLAorCQkgICAgICAgZnNkaXYsIGRpdiwgYWN0dWFsLCBkZXZpYXRpb24pOworCisJCWRldmlhdGlvbiA9IGFicyhkZXZpYXRpb24pOworCisJCWlmIChkZXZpYXRpb24gPCBiZXN0X2RldmlhdGlvbikgeworCQkJYmVzdF9mcyA9IGZzZGl2OworCQkJYmVzdF9kaXYgPSBkaXY7CisJCQliZXN0X3JhdGUgPSBhY3R1YWw7CisJCQliZXN0X2RldmlhdGlvbiA9IGRldmlhdGlvbjsKKwkJfQorCisJCWlmIChkZXZpYXRpb24gPT0gMCkKKwkJCWJyZWFrOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJiZXN0OiBmcz0lZCwgZGl2PSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBiZXN0X2ZzLCBiZXN0X2RpdiwgYmVzdF9yYXRlKTsKKworCWluZm8tPmZzX2RpdiA9IGJlc3RfZnM7CisJaW5mby0+Y2xrX2RpdiA9IGJlc3RfZGl2OworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX2lpc19jYWxjX3JhdGUpOworCitpbnQgczNjX2kyc3YyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJICAgIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzLAorCQkgICAgdW5zaWduZWQgbG9uZyBiYXNlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisKKwlpMnMtPmRldiA9IGRldjsKKworCS8qIHJlY29yZCBvdXIgaTJzIHN0cnVjdHVyZSBmb3IgbGF0ZXIgdXNlIGluIHRoZSBjYWxsYmFja3MgKi8KKwlkYWktPnByaXZhdGVfZGF0YSA9IGkyczsKKworCWkycy0+cmVncyA9IGlvcmVtYXAoYmFzZSwgMHgxMDApOworCWlmIChpMnMtPnJlZ3MgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBpb3JlbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaTJzLT5paXNfcGNsayA9IGNsa19nZXQoZGV2LCAiaWlzIik7CisJaWYgKGkycy0+aWlzX3BjbGsgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaWlzX2Nsb2NrXG4iKTsKKwkJaW91bm1hcChpMnMtPnJlZ3MpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwljbGtfZW5hYmxlKGkycy0+aWlzX3BjbGspOworCisJczNjMjQxMl9zbmRfdHhjdHJsKGkycywgMCk7CisJczNjMjQxMl9zbmRfcnhjdHJsKGkycywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoczNjX2kyc3YyX3Byb2JlKTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzM2MyNDEyX2kyc19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWkpOworCXUzMiBpaXNtb2Q7CisKKwlpZiAoZGFpLT5hY3RpdmUpIHsKKwkJaTJzLT5zdXNwZW5kX2lpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJaTJzLT5zdXNwZW5kX2lpc2NvbiA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwkJaTJzLT5zdXNwZW5kX2lpc3BzciA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKKworCQkvKiBzb21lIGJhc2ljIHN1c3BlbmQgY2hlY2tzICovCisKKwkJaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJCWlmIChpaXNtb2QgJiBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUpCisJCQlwcl93YXJuaW5nKCIlczogUlhETUEgYWN0aXZlP1xuIiwgX19mdW5jX18pOworCisJCWlmIChpaXNtb2QgJiBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUpCisJCQlwcl93YXJuaW5nKCIlczogVFhETUEgYWN0aXZlP1xuIiwgX19mdW5jX18pOworCisJCWlmIChpaXNtb2QgJiBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFKQorCQkJcHJfd2FybmluZygiJXM6IElJUyBhY3RpdmVcbiIsIF9fZnVuY19fKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNDEyX2kyc19yZXN1bWUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGRhaSk7CisKKwlwcl9pbmZvKCJkYWlfYWN0aXZlICVkLCBJSVNNT0QgJTA4eCwgSUlTQ09OICUwOHhcbiIsCisJCWRhaS0+YWN0aXZlLCBpMnMtPnN1c3BlbmRfaWlzbW9kLCBpMnMtPnN1c3BlbmRfaWlzY29uKTsKKworCWlmIChkYWktPmFjdGl2ZSkgeworCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc2NvbiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNDT04pOworCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc3BzciwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOworCisJCXdyaXRlbChTM0MyNDEyX0lJU0ZJQ19SWEZMVVNIIHwgUzNDMjQxMl9JSVNGSUNfVFhGTFVTSCwKKwkJICAgICAgIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKKworCQluZGVsYXkoMjUwKTsKKwkJd3JpdGVsKDB4MCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgczNjMjQxMl9pMnNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0MTJfaTJzX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK2ludCBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCWRhaS0+b3BzLnRyaWdnZXIgPSBzM2MyNDEyX2kyc190cmlnZ2VyOworCWRhaS0+b3BzLmh3X3BhcmFtcyA9IHMzYzI0MTJfaTJzX2h3X3BhcmFtczsKKwlkYWktPm9wcy5zZXRfZm10ID0gczNjMjQxMl9pMnNfc2V0X2ZtdDsKKwlkYWktPm9wcy5zZXRfY2xrZGl2ID0gczNjMjQxMl9pMnNfc2V0X2Nsa2RpdjsKKworCWRhaS0+c3VzcGVuZCA9IHMzYzI0MTJfaTJzX3N1c3BlbmQ7CisJZGFpLT5yZXN1bWUgPSBzM2MyNDEyX2kyc19yZXN1bWU7CisKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoZGFpKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmggYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2ODU0YQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuaApAQCAtMCwwICsxLDkwIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmgKKyAqCisgKiBBTFNBIFNvYyBBdWRpbyBMYXllciAtIFMzQ19JMlNWMiBJMlMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyovCisKKy8qIFRoaXMgY29kZSBpcyB0aGUgY29yZSBzdXBwb3J0IGZvciB0aGUgSTJTIGJsb2NrIGZvdW5kIGluIGEgbnVtYmVyIG9mCisgKiBTYW1zdW5nIFNvQyBkZXZpY2VzIHdoaWNoIGlzIHVub2ZmaWNpYWxseSBuYW1lZCBJMlMtVjIuIEN1cnJlbnRseSB0aGUKKyAqIFMzQzI0MTIgYW5kIHRoZSBTM0M2NFhYIHNlcmllcyB1c2UgdGhpcyBibG9jayB0byBwcm92aWRlIDEgb3IgMiBJMlMKKyAqIGNoYW5uZWxzIHZpYSBjb25maWd1cmFibGUgR1BJTy4KKyAqLworCisjaWZuZGVmIF9fU05EX1NPQ19TM0MyNFhYX1MzQ19JMlNWMl9JMlNfSAorI2RlZmluZSBfX1NORF9TT0NfUzNDMjRYWF9TM0NfSTJTVjJfSTJTX0ggX19GSUxFX18KKworI2RlZmluZSBTM0NfSTJTVjJfRElWX0JDTEsJKDEpCisjZGVmaW5lIFMzQ19JMlNWMl9ESVZfUkNMSwkoMikKKyNkZWZpbmUgUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVIJKDMpCisKKy8qKgorICogc3RydWN0IHMzY19pMnN2Ml9pbmZvIC0gUzNDIEkyUy1WMiBpbmZvcm1hdGlvbgorICogQGRldjogVGhlIHBhcmVudCBkZXZpY2UgcGFzc2VkIHRvIHVzZSBmcm9tIHRoZSBwcm9iZS4KKyAqIEByZWdzOiBUaGUgcG9pbnRlciB0byB0aGUgZGV2aWNlIHJlZ2lzdGUgYmxvY2suCisgKiBAbWFzdGVyOiBUcnVlIGlmIHRoZSBJMlMgY29yZSBpcyB0aGUgSTJTIGJpdCBjbG9jayBtYXN0ZXIuCisgKiBAZG1hX3BsYXliYWNrOiBETUEgaW5mb3JtYXRpb24gZm9yIHBsYXliYWNrIGNoYW5uZWwuCisgKiBAZG1hX2NhcHR1cmU6IERNQSBpbmZvcm1hdGlvbiBmb3IgY2FwdHVyZSBjaGFubmVsLgorICogQHN1c3BlbmRfaWlzbW9kOiBQTSBzYXZlIGZvciB0aGUgSUlTTU9EIHJlZ2lzdGVyLgorICogQHN1c3BlbmRfaWlzY29uOiBQTSBzYXZlIGZvciB0aGUgSUlTQ09OIHJlZ2lzdGVyLgorICogQHN1c3BlbmRfaWlzcHNyOiBQTSBzYXZlIGZvciB0aGUgSUlTUFNSIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgaXMgdGhlIHByaXZhdGUgY29kZWMgc3RhdGUgZm9yIHRoZSBoYXJkd2FyZSBhc3NvY2lhdGVkIHdpdGggYW4KKyAqIEkyUyBjaGFubmVsIHN1Y2ggYXMgdGhlIHJlZ2lzdGVyIG1hcHBpbmdzIGFuZCBjbG9jayBzb3VyY2VzLgorICovCitzdHJ1Y3QgczNjX2kyc3YyX2luZm8geworCXN0cnVjdCBkZXZpY2UJKmRldjsKKwl2b2lkIF9faW9tZW0JKnJlZ3M7CisKKwlzdHJ1Y3QgY2xrCSppaXNfcGNsazsKKwlzdHJ1Y3QgY2xrCSppaXNfY2NsazsKKwlzdHJ1Y3QgY2xrCSppaXNfY2xrOworCisJdW5zaWduZWQgY2hhcgkgbWFzdGVyOworCisJc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMJKmRtYV9wbGF5YmFjazsKKwlzdHJ1Y3QgczNjMjR4eF9wY21fZG1hX3BhcmFtcwkqZG1hX2NhcHR1cmU7CisKKwl1MzIJCSBzdXNwZW5kX2lpc21vZDsKKwl1MzIJCSBzdXNwZW5kX2lpc2NvbjsKKwl1MzIJCSBzdXNwZW5kX2lpc3BzcjsKK307CisKK3N0cnVjdCBzM2NfaTJzdjJfcmF0ZV9jYWxjIHsKKwl1bnNpZ25lZCBpbnQJY2xrX2RpdjsJLyogZm9yIHByZXNjYWxlciAqLworCXVuc2lnbmVkIGludAlmc19kaXY7CQkvKiBmb3Igcm9vdCBmcmFtZSBjbG9jayAqLworfTsKKworZXh0ZXJuIGludCBzM2NfaTJzdjJfaWlzX2NhbGNfcmF0ZShzdHJ1Y3QgczNjX2kyc3YyX3JhdGVfY2FsYyAqaW5mbywKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmZzdGFiLAorCQkJCSAgIHVuc2lnbmVkIGludCByYXRlLCBzdHJ1Y3QgY2xrICpjbGspOworCisvKioKKyAqIHMzY19pMnN2Ml9wcm9iZSAtIHByb2JlIGZvciBpMnMgZGV2aWNlIGhlbHBlcgorICogQHBkZXY6IFRoZSBwbGF0Zm9ybSBkZXZpY2Ugc3VwcGxpZWQgdG8gdGhlIG9yaWdpbmFsIHByb2JlLgorICogQGRhaTogVGhlIEFTb0MgREFJIHN0cnVjdHVyZSBzdXBwbGllZCB0byB0aGUgb3JpZ2luYWwgcHJvYmUuCisgKiBAaTJzOiBPdXIgbG9jYWwgaTJzIHN0cnVjdHVyZSB0byBmaWxsIGluLgorICogQGJhc2U6IFRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZSByZWdpc3RlcnMuCisgKi8KK2V4dGVybiBpbnQgczNjX2kyc3YyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCSAgIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzLAorCQkJICAgdW5zaWduZWQgbG9uZyBiYXNlKTsKKworLyoqCisgKiBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpIC0gcmVnaXN0ZXIgZGFpIHdpdGggc29jIGNvcmUKKyAqIEBkYWk6IFRoZSBzbmRfc29jX2RhaSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXIKKyAqCisgKiBGaWxsIGluIGFueSBtaXNzaW5nIGZpZWxkcyBhbmQgdGhlbiByZWdpc3RlciB0aGUgZ2l2ZW4gZGFpIHdpdGggdGhlCisgKiBzb2MgY29yZS4KKyAqLworZXh0ZXJuIGludCBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKTsKKworI2VuZGlmIC8qIF9fU05EX1NPQ19TM0MyNFhYX1MzQ19JMlNWMl9JMlNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmMKaW5kZXggZjNmYzBhYi4uMWNhM2NkYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMzAsMjYgKzMxLDE2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaD4KLQotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKICNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgogI2luY2x1ZGUgInMzYzI0MTItaTJzLmgiCiAKICNkZWZpbmUgUzNDMjQxMl9JMlNfREVCVUcgMAotI2RlZmluZSBTM0MyNDEyX0kyU19ERUJVR19DT04gMAotCi0jaWYgUzNDMjQxMl9JMlNfREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0lORk8geCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKIAogc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjMjQxMl9kbWFfY2xpZW50X291dCA9IHsKIAkubmFtZQkJPSAiSTJTIFBDTSBTdGVyZW8gb3V0IgpAQCAtNzMsNDMxICs2NCw3IEBACiAJLmRtYV9zaXplCT0gNCwKIH07CiAKLXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvIHsKLQlzdHJ1Y3QgZGV2aWNlCSpkZXY7Ci0Jdm9pZCBfX2lvbWVtCSpyZWdzOwotCXN0cnVjdCBjbGsJKmlpc19jbGs7Ci0Jc3RydWN0IGNsawkqaWlzX3BjbGs7Ci0Jc3RydWN0IGNsawkqaWlzX2NjbGs7Ci0KLQl1MzIJCSBzdXNwZW5kX2lpc21vZDsKLQl1MzIJCSBzdXNwZW5kX2lpc2NvbjsKLQl1MzIJCSBzdXNwZW5kX2lpc3BzcjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyBzM2MyNDEyX2kyczsKLQotI2RlZmluZSBiaXRfc2V0KHYsIGIpICgoKHYpICYgKGIpKSA/IDEgOiAwKQotCi0jaWYgUzNDMjQxMl9JMlNfREVCVUdfQ09OCi1zdGF0aWMgdm9pZCBkYmdfc2hvd2Nvbihjb25zdCBjaGFyICpmbiwgdTMyIGNvbikKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IExSST0lZCwgVFhGRU1QVD0lZCwgUlhGRU1QVD0lZCwgVFhGRlVMTD0lZCwgUlhGRlVMTD0lZFxuIiwgZm4sCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9MUklOREVYKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRklGT19FTVBUWSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRU1QVFkpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhGSUZPX0ZVTEwpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhGSUZPX0ZVTEwpKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogUEFVU0U6IFRYRE1BPSVkLCBSWERNQT0lZCwgVFhDSD0lZCwgUlhDSD0lZFxuIiwKLQkgICAgICAgZm4sCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0UpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFDVElWRTogVFhETUE9JWQsIFJYRE1BPSVkLCBJSVM9JWRcbiIsIGZuLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFKSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGRiZ19zaG93Y29uKGNvbnN0IGNoYXIgKmZuLCB1MzIgY29uKQotewotfQotI2VuZGlmCi0KLS8qIFR1cm4gb24gb3Igb2ZmIHRoZSB0cmFuc21pc3Npb24gcGF0aC4gKi8KLXN0YXRpYyB2b2lkIHMzYzI0MTJfc25kX3R4Y3RybChpbnQgb24pCi17Ci0Jc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gKmkycyA9ICZzM2MyNDEyX2kyczsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBpMnMtPnJlZ3M7Ci0JdTMyIGZpYywgY29uLCBtb2Q7Ci0KLQlEQkcoIiVzKCVkKVxuIiwgX19mdW5jX18sIG9uKTsKLQotCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0JY29uID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQltb2QgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCi0JREJHKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOwotCi0JaWYgKG9uKSB7Ci0JCWNvbiB8PSBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUgfCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOwotCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFOwotCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0U7Ci0KLQkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6Ci0JCQkvKiBkbyBub3RoaW5nLCB3ZSBhcmUgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZGV2X2VycihpMnMtPmRldiwgIlRYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOwotCQl9Ci0KLQkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQl9IGVsc2UgewotCQkvKiBOb3RlLCB3ZSBkbyBub3QgaGF2ZSBhbnkgaW5kaWNhdGlvbiB0aGF0IHRoZSBGSUZPIHByb2JsZW1zCi0JCSAqIHRoYSB0aGUgUzNDMjQxMC8yNDQwIGhhZCBhcHBseSBoZXJlLCBzbyB3ZSBzaG91bGQgYmUgYWJsZQotCQkgKiB0byBkaXNhYmxlIHRoZSBETUEgYW5kIFRYIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBGSUZPUy4KLQkJICovCi0KLQkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRTsKLQkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFOwotCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRTsKLQotCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgewotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIoaTJzLT5kZXYsICJUWERJUzogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7Ci0JCX0KLQotCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCX0KLQotCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0JZGJnX3Nob3djb24oX19mdW5jX18sIGNvbik7Ci0JREJHKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOwotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDEyX3NuZF9yeGN0cmwoaW50IG9uKQotewotCXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvICppMnMgPSAmczNjMjQxMl9pMnM7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gaTJzLT5yZWdzOwotCXUzMiBmaWMsIGNvbiwgbW9kOwotCi0JREJHKCIlcyglZClcbiIsIF9fZnVuY19fLCBvbik7Ci0KLQlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCWNvbiA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JbW9kID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQotCURCRygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKLQotCWlmIChvbikgewotCQljb24gfD0gUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFIHwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFOwotCi0JCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgotCQkJLyogZG8gbm90aGluZywgd2UgYXJlIGluIHRoZSByaWdodCBtb2RlICovCi0JCQlicmVhazsKLQotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOgotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIoaTJzLT5kZXYsICJSWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKLQkJfQotCi0JCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JfSBlbHNlIHsKLQkJLyogU2VlIHR4Y3RybCBub3RlcyBvbiBGSUZPcy4gKi8KLQotCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRTsKLQkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRTsKLQkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFOwotCi0JCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6Ci0JCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZGV2X2VycihpMnMtPmRldiwgIlJYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOwotCQl9Ci0KLQkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQl9Ci0KLQlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCURCRygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKLX0KLQotCi0vKgotICogV2FpdCBmb3IgdGhlIExSIHNpZ25hbCB0byBhbGxvdyBzeW5jaHJvbmlzYXRpb24gdG8gdGhlIEwvUiBjbG9jawotICogZnJvbSB0aGUgY29kZWMuIE1heSBvbmx5IGJlIG5lZWRlZCBmb3Igc2xhdmUgbW9kZS4KLSAqLwotc3RhdGljIGludCBzM2MyNDEyX3NuZF9scnN5bmModm9pZCkKLXsKLQl1MzIgaWlzY29uOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUpOwotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQl3aGlsZSAoMSkgewotCQlpaXNjb24gPSByZWFkbChzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCQlpZiAoaWlzY29uICYgUzNDMjQxMl9JSVNDT05fTFJJTkRFWCkKLQkJCWJyZWFrOwotCi0JCWlmICh0aW1lb3V0IDwgamlmZmllcykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dFxuIiwgX19mdW5jX18pOwotCQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENoZWNrIHdoZXRoZXIgQ1BVIGlzIHRoZSBtYXN0ZXIgb3Igc2xhdmUKLSAqLwotc3RhdGljIGlubGluZSBpbnQgczNjMjQxMl9zbmRfaXNfY2xrbWFzdGVyKHZvaWQpCi17Ci0JdTMyIGlpc21vZCA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0KLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlpc21vZCAmPSBTM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSzsKLQlyZXR1cm4gIShpaXNtb2QgPT0gUzNDMjQxMl9JSVNNT0RfU0xBVkUpOwotfQotCi0vKgotICogU2V0IFMzQzI0MTIgSTJTIERBSSBmb3JtYXQKLSAqLwotc3RhdGljIGludCBzM2MyNDEyX2kyc19zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZm10KQotewotCXUzMiBpaXNtb2Q7Ci0KLQotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0JaWlzbW9kID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyByOiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKLQotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06Ci0JCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0s7Ci0JCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TTEFWRTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgotCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLOwotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEQkcoInVua253b24gbWFzdGVyL3NsYXZlIGZvcm1hdFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfU0RGX01BU0s7Ci0KLQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX01TQjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6Ci0JCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfTFNCOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9JSVM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURCRygiVW5rbm93biBkYXRhIGZvcm1hdFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXdyaXRlbChpaXNtb2QsIHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgdzogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXUzMiBpaXNtb2Q7Ci0KLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQxMl9pMnNfcGNtX3N0ZXJlb19vdXQ7Ci0JZWxzZQotCQlydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQxMl9pMnNfcGNtX3N0ZXJlb19pbjsKLQotCS8qIFdvcmtpbmcgY29waWVzIG9mIHJlZ2lzdGVyICovCi0JaWlzbW9kID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQlEQkcoIiVzOiByOiBJSVNNT0Q6ICV4XG4iLCBfX2Z1bmNfXywgaWlzbW9kKTsKLQotCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfOEJJVDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKLQkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF84QklUOwotCQlicmVhazsKLQl9Ci0KLQl3cml0ZWwoaWlzbW9kLCBzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCURCRygiJXM6IHc6IElJU01PRDogJXhcbiIsIF9fZnVuY19fLCBpaXNtb2QpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCi0JCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JaW50IGNhcHR1cmUgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKLQl1bnNpZ25lZCBsb25nIGlycXM7Ci0JaW50IHJldCA9IDA7Ci0KLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJLyogT24gc3RhcnQsIGVuc3VyZSB0aGF0IHRoZSBGSUZPcyBhcmUgY2xlYXJlZCBhbmQgcmVzZXQuICovCi0KLQkJd3JpdGVsKGNhcHR1cmUgPyBTM0MyNDEyX0lJU0ZJQ19SWEZMVVNIIDogUzNDMjQxMl9JSVNGSUNfVFhGTFVTSCwKLQkJICAgICAgIHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0KLQkJLyogY2xlYXIgYWdhaW4sIGp1c3QgaW4gY2FzZSAqLwotCQl3cml0ZWwoMHgwLCBzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCi0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoIXMzYzI0MTJfc25kX2lzX2Nsa21hc3RlcigpKSB7Ci0JCQlyZXQgPSBzM2MyNDEyX3NuZF9scnN5bmMoKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBleGl0X2VycjsKLQkJfQotCi0JCWxvY2FsX2lycV9zYXZlKGlycXMpOwotCi0JCWlmIChjYXB0dXJlKQotCQkJczNjMjQxMl9zbmRfcnhjdHJsKDEpOwotCQllbHNlCi0JCQlzM2MyNDEyX3NuZF90eGN0cmwoMSk7Ci0KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxcyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6Ci0JCWxvY2FsX2lycV9zYXZlKGlycXMpOwotCi0JCWlmIChjYXB0dXJlKQotCQkJczNjMjQxMl9zbmRfcnhjdHJsKDApOwotCQllbHNlCi0JCQlzM2MyNDEyX3NuZF90eGN0cmwoMCk7Ci0KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxcyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotZXhpdF9lcnI6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogZGVmYXVsdCB0YWJsZSBvZiBhbGwgYXZhaWFsYWJsZSByb290IGZzIGRpdmlzb3JzICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHMzYzI0MTJfaWlzX2ZzW10gPSB7IDI1NiwgNTEyLCAzODQsIDc2OCwgMCB9OwotCi1pbnQgczNjMjQxMl9paXNfY2FsY19yYXRlKHN0cnVjdCBzM2MyNDEyX3JhdGVfY2FsYyAqaW5mbywKLQkJCSAgdW5zaWduZWQgaW50ICpmc3RhYiwKLQkJCSAgdW5zaWduZWQgaW50IHJhdGUsIHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKLQl1bnNpZ25lZCBpbnQgZGl2OwotCXVuc2lnbmVkIGludCBmc2NsazsKLQl1bnNpZ25lZCBpbnQgYWN0dWFsOwotCXVuc2lnbmVkIGludCBmczsKLQl1bnNpZ25lZCBpbnQgZnNkaXY7Ci0Jc2lnbmVkIGludCBkZXZpYXRpb24gPSAwOwotCXVuc2lnbmVkIGludCBiZXN0X2ZzID0gMDsKLQl1bnNpZ25lZCBpbnQgYmVzdF9kaXYgPSAwOwotCXVuc2lnbmVkIGludCBiZXN0X3JhdGUgPSAwOwotCXVuc2lnbmVkIGludCBiZXN0X2RldmlhdGlvbiA9IElOVF9NQVg7Ci0KLQotCWlmIChmc3RhYiA9PSBOVUxMKQotCQlmc3RhYiA9IHMzYzI0MTJfaWlzX2ZzOwotCi0JZm9yIChmcyA9IDA7OyBmcysrKSB7Ci0JCWZzZGl2ID0gczNjMjQxMl9paXNfZnNbZnNdOwotCi0JCWlmIChmc2RpdiA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJZnNjbGsgPSBjbGtyYXRlIC8gZnNkaXY7Ci0JCWRpdiA9IGZzY2xrIC8gcmF0ZTsKLQotCQlpZiAoKGZzY2xrICUgcmF0ZSkgPiAocmF0ZSAvIDIpKQotCQkJZGl2Kys7Ci0KLQkJaWYgKGRpdiA8PSAxKQotCQkJY29udGludWU7Ci0KLQkJYWN0dWFsID0gY2xrcmF0ZSAvIChmc2RpdiAqIGRpdik7Ci0JCWRldmlhdGlvbiA9IGFjdHVhbCAtIHJhdGU7Ci0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkZnM6IGRpdiAlZCA9PiByZXN1bHQgJWQsIGRldmlhdGlvbiAlZFxuIiwKLQkJICAgICAgIGZzZGl2LCBkaXYsIGFjdHVhbCwgZGV2aWF0aW9uKTsKLQotCQlkZXZpYXRpb24gPSBhYnMoZGV2aWF0aW9uKTsKLQotCQlpZiAoZGV2aWF0aW9uIDwgYmVzdF9kZXZpYXRpb24pIHsKLQkJCWJlc3RfZnMgPSBmc2RpdjsKLQkJCWJlc3RfZGl2ID0gZGl2OwotCQkJYmVzdF9yYXRlID0gYWN0dWFsOwotCQkJYmVzdF9kZXZpYXRpb24gPSBkZXZpYXRpb247Ci0JCX0KLQotCQlpZiAoZGV2aWF0aW9uID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiYmVzdDogZnM9JWQsIGRpdj0lZCwgcmF0ZT0lZFxuIiwKLQkgICAgICAgYmVzdF9mcywgYmVzdF9kaXYsIGJlc3RfcmF0ZSk7Ci0KLQlpbmZvLT5mc19kaXYgPSBiZXN0X2ZzOwotCWluZm8tPmNsa19kaXYgPSBiZXN0X2RpdjsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQxMl9paXNfY2FsY19yYXRlKTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gczNjMjQxMl9pMnM7CiAKIC8qCiAgKiBTZXQgUzNDMjQxMiBDbG9jayBzb3VyY2UKQEAgLTUwNywxNSArNzQsMTcgQEAKIHsKIAl1MzIgaWlzbW9kID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKIAotCURCRygiJXMoJXAsICVkLCAldSwgJWQpXG4iLCBfX2Z1bmNfXywgY3B1X2RhaSwgY2xrX2lkLAorCXByX2RlYnVnKCIlcyglcCwgJWQsICV1LCAlZClcbiIsIF9fZnVuY19fLCBjcHVfZGFpLCBjbGtfaWQsCiAJICAgIGZyZXEsIGRpcik7CiAKIAlzd2l0Y2ggKGNsa19pZCkgewogCWNhc2UgUzNDMjQxMl9DTEtTUkNfUENMSzoKKwkJczNjMjQxMl9pMnMubWFzdGVyID0gMTsKIAkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSzsKIAkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01BU1RFUl9JTlRFUk5BTDsKIAkJYnJlYWs7CiAJY2FzZSBTM0MyNDEyX0NMS1NSQ19JMlNDTEs6CisJCXMzYzI0MTJfaTJzLm1hc3RlciA9IDA7CiAJCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0s7CiAJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9NQVNURVJfRVhURVJOQUw7CiAJCWJyZWFrOwpAQCAtNTI3LDc0ICs5Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBTZXQgUzNDMjQxMiBDbG9jayBkaXZpZGVycwotICovCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX3NldF9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCQkJCSAgaW50IGRpdl9pZCwgaW50IGRpdikKLXsKLQlzdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyAqaTJzID0gJnMzYzI0MTJfaTJzOwotCXUzMiByZWc7Ci0KLQlEQkcoIiVzKCVwLCAlZCwgJWQpXG4iLCBfX2Z1bmNfXywgY3B1X2RhaSwgZGl2X2lkLCBkaXYpOwotCi0Jc3dpdGNoIChkaXZfaWQpIHsKLQljYXNlIFMzQzI0MTJfRElWX0JDTEs6Ci0JCXJlZyA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJcmVnICY9IH5TM0MyNDEyX0lJU01PRF9CQ0xLX01BU0s7Ci0JCXdyaXRlbChyZWcgfCBkaXYsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQotCQlEQkcoIiVzOiBNT0Q9JTA4eFxuIiwgX19mdW5jX18sIHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDEyX0RJVl9SQ0xLOgotCQlpZiAoZGl2ID4gMykgewotCQkJLyogY29udmVydCB2YWx1ZSB0byBiaXQgZmllbGQgKi8KLQotCQkJc3dpdGNoIChkaXYpIHsKLQkJCWNhc2UgMjU2OgotCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfMjU2RlM7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMzg0OgotCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfMzg0RlM7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgNTEyOgotCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfNTEyRlM7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgNzY4OgotCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfNzY4RlM7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQotCQlyZWcgPSByZWFkbChzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQlyZWcgJj0gflMzQzI0MTJfSUlTTU9EX1JDTEtfTUFTSzsKLQkJd3JpdGVsKHJlZyB8IGRpdiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQlEQkcoIiVzOiBNT0Q9JTA4eFxuIiwgX19mdW5jX18sIHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDEyX0RJVl9QUkVTQ0FMRVI6Ci0JCWlmIChkaXYgPj0gMCkgewotCQkJd3JpdGVsKChkaXYgPDwgOCkgfCBTM0MyNDEyX0lJU1BTUl9QU1JFTiwKLQkJCSAgICAgICBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7Ci0JCX0gZWxzZSB7Ci0JCQl3cml0ZWwoMHgwLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7Ci0JCX0KLQkJREJHKCIlczogUFNSPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUikpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQogCiBzdHJ1Y3QgY2xrICpzM2MyNDEyX2dldF9paXNjbGsodm9pZCkKIHsKQEAgLTYwNiwzNCArMTA3LDMwIEBACiBzdGF0aWMgaW50IHMzYzI0MTJfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCWludCByZXQ7CiAKLQlzM2MyNDEyX2kycy5kZXYgPSAmcGRldi0+ZGV2OworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlzM2MyNDEyX2kycy5yZWdzID0gaW9yZW1hcChTM0MyNDEwX1BBX0lJUywgMHgxMDApOwotCWlmIChzM2MyNDEyX2kycy5yZWdzID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87CisJcmV0ID0gczNjX2kyc3YyX3Byb2JlKHBkZXYsIGRhaSwgJnMzYzI0MTJfaTJzLCBTM0MyNDEwX1BBX0lJUyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCXMzYzI0MTJfaTJzLmlpc19wY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWlzIik7Ci0JaWYgKHMzYzI0MTJfaTJzLmlpc19wY2xrID09IE5VTEwpIHsKLQkJREJHKCJmYWlsZWQgdG8gZ2V0IGlpc19jbG9ja1xuIik7Ci0JCWlvdW5tYXAoczNjMjQxMl9pMnMucmVncyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlzM2MyNDEyX2kycy5kbWFfY2FwdHVyZSA9ICZzM2MyNDEyX2kyc19wY21fc3RlcmVvX2luOworCXMzYzI0MTJfaTJzLmRtYV9wbGF5YmFjayA9ICZzM2MyNDEyX2kyc19wY21fc3RlcmVvX291dDsKIAogCXMzYzI0MTJfaTJzLmlpc19jY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaTJzY2xrIik7CiAJaWYgKHMzYzI0MTJfaTJzLmlpc19jY2xrID09IE5VTEwpIHsKLQkJREJHKCJmYWlsZWQgdG8gZ2V0IGkyc2NsayBjbG9ja1xuIik7CisJCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0IGkyc2NsayBjbG9ja1xuIik7CiAJCWlvdW5tYXAoczNjMjQxMl9pMnMucmVncyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNsa19zZXRfcGFyZW50KHMzYzI0MTJfaTJzLmlpc19jY2xrLCBjbGtfZ2V0KE5VTEwsICJtcGxsIikpOworCS8qIFNldCBNUExMIGFzIHRoZSBzb3VyY2UgZm9yIElJUyBDTEsgKi8KIAotCWNsa19lbmFibGUoczNjMjQxMl9pMnMuaWlzX3BjbGspOworCWNsa19zZXRfcGFyZW50KHMzYzI0MTJfaTJzLmlpc19jY2xrLCBjbGtfZ2V0KE5VTEwsICJtcGxsIikpOwogCWNsa19lbmFibGUoczNjMjQxMl9pMnMuaWlzX2NjbGspOwogCi0JczNjMjQxMl9pMnMuaWlzX2NsayA9IHMzYzI0MTJfaTJzLmlpc19wY2xrOworCXMzYzI0MTJfaTJzLmlpc19jY2xrID0gczNjMjQxMl9pMnMuaWlzX3BjbGs7CiAKIAkvKiBDb25maWd1cmUgdGhlIEkyUyBwaW5zIGluIGNvcnJlY3QgbW9kZSAqLwogCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUwLCBTM0MyNDEwX0dQRTBfSTJTTFJDSyk7CkBAIC02NDIsNzggKzEzOSwyMiBAQAogCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUzLCBTM0MyNDEwX0dQRTNfSTJTU0RJKTsKIAlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNCwgUzNDMjQxMF9HUEU0X0kyU1NETyk7CiAKLQlzM2MyNDEyX3NuZF90eGN0cmwoMCk7Ci0JczNjMjQxMl9zbmRfcnhjdHJsKDApOwotCiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyAqaTJzID0gJnMzYzI0MTJfaTJzOwotCXUzMiBpaXNtb2Q7Ci0KLQlpZiAoZGFpLT5hY3RpdmUpIHsKLQkJaTJzLT5zdXNwZW5kX2lpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJaTJzLT5zdXNwZW5kX2lpc2NvbiA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQkJaTJzLT5zdXNwZW5kX2lpc3BzciA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKLQotCQkvKiBzb21lIGJhc2ljIHN1c3BlbmQgY2hlY2tzICovCi0KLQkJaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCi0JCWlmIChpaXNtb2QgJiBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUpCi0JCQlwcl93YXJuaW5nKCIlczogUlhETUEgYWN0aXZlP1xuIiwgX19mdW5jX18pOwotCi0JCWlmIChpaXNtb2QgJiBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUpCi0JCQlwcl93YXJuaW5nKCIlczogVFhETUEgYWN0aXZlP1xuIiwgX19mdW5jX18pOwotCi0JCWlmIChpaXNtb2QgJiBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFKQotCQkJcHJfd2FybmluZygiJXM6IElJUyBhY3RpdmVcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEyX2kyc19yZXN1bWUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gKmkycyA9ICZzM2MyNDEyX2kyczsKLQotCXByX2luZm8oImRhaV9hY3RpdmUgJWQsIElJU01PRCAlMDh4LCBJSVNDT04gJTA4eFxuIiwKLQkJZGFpLT5hY3RpdmUsIGkycy0+c3VzcGVuZF9paXNtb2QsIGkycy0+c3VzcGVuZF9paXNjb24pOwotCi0JaWYgKGRhaS0+YWN0aXZlKSB7Ci0JCXdyaXRlbChpMnMtPnN1c3BlbmRfaWlzY29uLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCXdyaXRlbChpMnMtPnN1c3BlbmRfaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCXdyaXRlbChpMnMtPnN1c3BlbmRfaWlzcHNyLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7Ci0KLQkJd3JpdGVsKFMzQzI0MTJfSUlTRklDX1JYRkxVU0ggfCBTM0MyNDEyX0lJU0ZJQ19UWEZMVVNILAotCQkgICAgICAgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCi0JCW5kZWxheSgyNTApOwotCQl3cml0ZWwoMHgwLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi0jZGVmaW5lIHMzYzI0MTJfaTJzX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNDEyX2kyc19yZXN1bWUgIE5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQogI2RlZmluZSBTM0MyNDEyX0kyU19SQVRFUyBcCiAJKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHwgXAogCVNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKIAlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0MTJfaTJzX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsJPSBzM2MyNDEyX2kyc19zZXRfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0MTJfaTJzX2RhaSA9IHsKLQkubmFtZQk9ICJzM2MyNDEyLWkycyIsCi0JLmlkCT0gMCwKLQkucHJvYmUJPSBzM2MyNDEyX2kyc19wcm9iZSwKLQkuc3VzcGVuZCA9IHMzYzI0MTJfaTJzX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHMzYzI0MTJfaTJzX3Jlc3VtZSwKKwkubmFtZQkJPSAiczNjMjQxMi1pMnMiLAorCS5pZAkJPSAwLAorCS5wcm9iZQkJPSBzM2MyNDEyX2kyc19wcm9iZSwKIAkucGxheWJhY2sgPSB7CiAJCS5jaGFubmVsc19taW4JPSAyLAogCQkuY2hhbm5lbHNfbWF4CT0gMiwKQEAgLTcyNiwxOSArMTY3LDEzIEBACiAJCS5yYXRlcwkJPSBTM0MyNDEyX0kyU19SQVRFUywKIAkJLmZvcm1hdHMJPSBTTkRSVl9QQ01fRk1UQklUX1M4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAJfSwKLQkub3BzID0gewotCQkudHJpZ2dlcgk9IHMzYzI0MTJfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBzM2MyNDEyX2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10CT0gczNjMjQxMl9pMnNfc2V0X2ZtdCwKLQkJLnNldF9jbGtkaXYJPSBzM2MyNDEyX2kyc19zZXRfY2xrZGl2LAotCQkuc2V0X3N5c2Nsawk9IHMzYzI0MTJfaTJzX3NldF9zeXNjbGssCi0JfSwKKwkub3BzID0gJnMzYzI0MTJfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQxMl9pMnNfZGFpKTsKIAogc3RhdGljIGludCBfX2luaXQgczNjMjQxMl9pMnNfaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmczNjMjQxMl9pMnNfZGFpKTsKKwlyZXR1cm4gIHMzY19pMnN2Ml9yZWdpc3Rlcl9kYWkoJnMzYzI0MTJfaTJzX2RhaSk7CiB9CiBtb2R1bGVfaW5pdChzM2MyNDEyX2kyc19pbml0KTsKIApAQCAtNzQ4LDcgKzE4Myw2IEBACiB9CiBtb2R1bGVfZXhpdChzM2MyNDEyX2kyc19leGl0KTsKIAotCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KIE1PRFVMRV9BVVRIT1IoIkJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzI0MTIgSTJTIFNvQyBJbnRlcmZhY2UiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmggYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5oCmluZGV4IGFhYzA4YTIuLjkyODQ4ZTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmgKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaApAQCAtMTUsOSArMTUsMTEgQEAKICNpZm5kZWYgX19TTkRfU09DX1MzQzI0WFhfUzNDMjQxMl9JMlNfSAogI2RlZmluZSBfX1NORF9TT0NfUzNDMjRYWF9TM0MyNDEyX0kyU19IIF9fRklMRV9fCiAKLSNkZWZpbmUgUzNDMjQxMl9ESVZfQkNMSwkoMSkKLSNkZWZpbmUgUzNDMjQxMl9ESVZfUkNMSwkoMikKLSNkZWZpbmUgUzNDMjQxMl9ESVZfUFJFU0NBTEVSCSgzKQorI2luY2x1ZGUgInMzYy1pMnMtdjIuaCIKKworI2RlZmluZSBTM0MyNDEyX0RJVl9CQ0xLCVMzQ19JMlNWMl9ESVZfQkNMSworI2RlZmluZSBTM0MyNDEyX0RJVl9SQ0xLCVMzQ19JMlNWMl9ESVZfUkNMSworI2RlZmluZSBTM0MyNDEyX0RJVl9QUkVTQ0FMRVIJUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVIKIAogI2RlZmluZSBTM0MyNDEyX0NMS1NSQ19QQ0xLCSgwKQogI2RlZmluZSBTM0MyNDEyX0NMS1NSQ19JMlNDTEsJKDEpCkBAIC0yNiwxMyArMjgsNCBAQAogCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0MTJfaTJzX2RhaTsKIAotc3RydWN0IHMzYzI0MTJfcmF0ZV9jYWxjIHsKLQl1bnNpZ25lZCBpbnQJY2xrX2RpdjsJLyogZm9yIHByZXNjYWxlciAqLwotCXVuc2lnbmVkIGludAlmc19kaXY7CQkvKiBmb3Igcm9vdCBmcmFtZSBjbG9jayAqLwotfTsKLQotZXh0ZXJuIGludCBzM2MyNDEyX2lpc19jYWxjX3JhdGUoc3RydWN0IHMzYzI0MTJfcmF0ZV9jYWxjICppbmZvLAotCQkJCSB1bnNpZ25lZCBpbnQgKmZzdGFiLAotCQkJCSB1bnNpZ25lZCBpbnQgcmF0ZSwgc3RydWN0IGNsayAqY2xrKTsKLQogI2VuZGlmIC8qIF9fU05EX1NPQ19TM0MyNFhYX1MzQzI0MTJfSTJTX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKaW5kZXggNTgyMmQyZC4uMzY5OGY3MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIApAQCAtMzU1LDYgKzM1NSwxNiBAQAogCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAogCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNDQzX2FjOTdfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzYzI0NDNfYWM5N190cmlnZ2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X21pY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBzM2MyNDQzX2FjOTdfaHdfbWljX3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzYzI0NDNfYWM5N19taWNfdHJpZ2dlciwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDQzX2FjOTdfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiczNjMjQ0My1hYzk3IiwKQEAgLTM3NCw5ICszODQsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHMzYzI0NDNfYWM5N19od19wYXJhbXMsCi0JCS50cmlnZ2VyID0gczNjMjQ0M19hYzk3X3RyaWdnZXJ9LAorCS5vcHMgPSAmczNjMjQ0M19hYzk3X2RhaV9vcHMsCiB9LAogewogCS5uYW1lID0gInB4YTJ4eC1hYzk3LW1pYyIsCkBAIC0zODgsOSArMzk2LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBzM2MyNDQzX2FjOTdfaHdfbWljX3BhcmFtcywKLQkJLnRyaWdnZXIgPSBzM2MyNDQzX2FjOTdfbWljX3RyaWdnZXIsfSwKKwkub3BzID0gJnMzYzI0NDNfYWM5N19taWNfZGFpX29wcywKIH0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQ0M19hYzk3X2RhaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYwppbmRleCA2ZjRkNDM5Li5jYzA2Njk2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKQEAgLTQsNyArNCw3IEBACiAgKiAoYykgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogR3JhZW1lIEdyZWdvcnkgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCiAgKgotICogKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKQEAgLTMwLDIyICszMCwxNSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogCi0jZGVmaW5lIFMzQzI0WFhfSTJTX0RFQlVHIDAKLSNpZiBTM0MyNFhYX0kyU19ERUJVRwotI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgInMzYzI0eHgtaTJzOiAiIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNHh4X2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lID0gIkkyUyBQQ00gU3RlcmVvIG91dCIKIH07CkBAIC04NCwxMyArNzcsMTMgQEAKIAl1MzIgaWlzY29uOwogCXUzMiBpaXNtb2Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzZmNvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0ZDT04pOwogCWlpc2NvbiAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwogCWlpc21vZCAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCi0JREJHKCJyOiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygicjogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiAKIAlpZiAob24pIHsKIAkJaWlzZmNvbiB8PSBTM0MyNDEwX0lJU0ZDT05fVFhETUEgfCBTM0MyNDEwX0lJU0ZDT05fVFhFTkFCTEU7CkBAIC0xMjAsNyArMTEzLDcgQEAKIAkJd3JpdGVsKGlpc21vZCwgIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAJfQogCi0JREJHKCJ3OiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygidzogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHMzYzI0eHhfc25kX3J4Y3RybChpbnQgb24pCkBAIC0xMjksMTMgKzEyMiwxMyBAQAogCXUzMiBpaXNjb247CiAJdTMyIGlpc21vZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNmY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTRkNPTik7CiAJaWlzY29uICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CiAJaWlzbW9kICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAKLQlEQkcoInI6IElJU0NPTjogJWx4IElJU01PRDogJWx4IElJU0ZDT046ICVseFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOworCXByX2RlYnVnKCJyOiBJSVNDT046ICV4IElJU01PRDogJXggSUlTRkNPTjogJXhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKIAogCWlmIChvbikgewogCQlpaXNmY29uIHw9IFMzQzI0MTBfSUlTRkNPTl9SWERNQSB8IFMzQzI0MTBfSUlTRkNPTl9SWEVOQUJMRTsKQEAgLTE2NSw3ICsxNTgsNyBAQAogCQl3cml0ZWwoaWlzbW9kLCAgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAl9CiAKLQlEQkcoInc6IElJU0NPTjogJWx4IElJU01PRDogJWx4IElJU0ZDT046ICVseFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOworCXByX2RlYnVnKCJ3OiBJSVNDT046ICV4IElJU01PRDogJXggSUlTRkNPTjogJXhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKIH0KIAogLyoKQEAgLTE3Nyw3ICsxNzAsNyBAQAogCXUzMiBpaXNjb247CiAJaW50IHRpbWVvdXQgPSA1MDsgLyogNW1zICovCiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJd2hpbGUgKDEpIHsKIAkJaWlzY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKQEAgLTE5Nyw3ICsxOTAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBzM2MyNHh4X3NuZF9pc19jbGttYXN0ZXIodm9pZCkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIChyZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpICYgUzNDMjQxMF9JSVNNT0RfU0xBVkUpID8gMDoxOwogfQpAQCAtMjEwLDEwICsyMDMsMTAgQEAKIHsKIAl1MzIgaWlzbW9kOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc21vZCA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgcjogSUlTTU9EOiAlbHggXG4iLCBpaXNtb2QpOworCXByX2RlYnVnKCJod19wYXJhbXMgcjogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7CiAKIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgpAQCAtMjM4LDcgKzIzMSw3IEBACiAJfQogCiAJd3JpdGVsKGlpc21vZCwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICVseCBcbiIsIGlpc21vZCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ5LDcgKzI0Miw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXUzMiBpaXNtb2Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCXJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSA9ICZzM2MyNHh4X2kyc19wY21fc3RlcmVvX291dDsKQEAgLTI1OCw3ICsyNTEsNyBAQAogCiAJLyogV29ya2luZyBjb3BpZXMgb2YgcmVnaXN0ZXIgKi8KIAlpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHI6IElJU01PRDogJWx4XG4iLCBpaXNtb2QpOworCXByX2RlYnVnKCJod19wYXJhbXMgcjogSUlTTU9EOiAleFxuIiwgaWlzbW9kKTsKIAogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgpAQCAtMjc2LDcgKzI2OSw3IEBACiAJfQogCiAJd3JpdGVsKGlpc21vZCwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICVseFxuIiwgaWlzbW9kKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHc6IElJU01PRDogJXhcbiIsIGlpc21vZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NSw3ICsyNzgsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTMyNyw3ICszMjAsNyBAQAogewogCXUzMiBpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc21vZCAmPSB+UzNDMjQ0MF9JSVNNT0RfTVBMTDsKIApAQCAtMzUzLDcgKzM0Niw3IEBACiB7CiAJdTMyIHJlZzsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKGRpdl9pZCkgewogCWNhc2UgUzNDMjRYWF9ESVZfQkNMSzoKQEAgLTM4OSw3ICszODIsNyBAQAogc3RhdGljIGludCBzM2MyNHh4X2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJczNjMjR4eF9pMnMucmVncyA9IGlvcmVtYXAoUzNDMjQxMF9QQV9JSVMsIDB4MTAwKTsKIAlpZiAoczNjMjR4eF9pMnMucmVncyA9PSBOVUxMKQpAQCAtMzk3LDcgKzM5MCw3IEBACiAKIAlzM2MyNHh4X2kycy5paXNfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWlzIik7CiAJaWYgKHMzYzI0eHhfaTJzLmlpc19jbGsgPT0gTlVMTCkgewotCQlEQkcoImZhaWxlZCB0byBnZXQgaWlzX2Nsb2NrXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGlpc19jbG9ja1xuIik7CiAJCWlvdW5tYXAoczNjMjR4eF9pMnMucmVncyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTQyMSw3ICs0MTQsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzM2MyNHh4X2kyc19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJczNjMjR4eF9pMnMuaWlzY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKIAlzM2MyNHh4X2kycy5paXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwpAQCAtNDM1LDcgKzQyOCw3IEBACiAKIHN0YXRpYyBpbnQgczNjMjR4eF9pMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCWNsa19lbmFibGUoczNjMjR4eF9pMnMuaWlzX2Nsayk7CiAKIAl3cml0ZWwoczNjMjR4eF9pMnMuaWlzY29uLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwpAQCAtNDU2LDYgKzQ0OSwxNCBAQAogCVNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKIAlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0eHhfaTJzX2RhaV9vcHMgPSB7CisJLnRyaWdnZXIJPSBzM2MyNHh4X2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBzM2MyNHh4X2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBzM2MyNHh4X2kyc19zZXRfZm10LAorCS5zZXRfY2xrZGl2CT0gczNjMjR4eF9pMnNfc2V0X2Nsa2RpdiwKKwkuc2V0X3N5c2Nsawk9IHMzYzI0eHhfaTJzX3NldF9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjR4eF9pMnNfZGFpID0gewogCS5uYW1lID0gInMzYzI0eHgtaTJzIiwKIAkuaWQgPSAwLApAQCAtNDcyLDEzICs0NzMsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gUzNDMjRYWF9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIgPSBzM2MyNHh4X2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zID0gczNjMjR4eF9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IHMzYzI0eHhfaTJzX3NldF9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gczNjMjR4eF9pMnNfc2V0X2Nsa2RpdiwKLQkJLnNldF9zeXNjbGsgPSBzM2MyNHh4X2kyc19zZXRfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZzM2MyNHh4X2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0eHhfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCmluZGV4IDdjNjRkMzEuLmE5ZDY4ZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwpAQCAtNCw3ICs0LDcgQEAKICAqIChjKSAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KICAqCi0gKiAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgpAQCAtMjksMTcgKzI5LDEwIEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAKICNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgogCi0jZGVmaW5lIFMzQzI0WFhfUENNX0RFQlVHIDAKLSNpZiBTM0MyNFhYX1BDTV9ERUJVRwotI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgInMzYzI0eHgtcGNtOiAiIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikKLSNlbmRpZgotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgczNjMjR4eF9wY21faGFyZHdhcmUgPSB7CiAJLmluZm8JCQk9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJCQkgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfApAQCAtODQsMTYgKzc3LDE2IEBACiAJZG1hX2FkZHJfdCBwb3MgPSBwcnRkLT5kbWFfcG9zOwogCWludCByZXQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJd2hpbGUgKHBydGQtPmRtYV9sb2FkZWQgPCBwcnRkLT5kbWFfbGltaXQpIHsKIAkJdW5zaWduZWQgbG9uZyBsZW4gPSBwcnRkLT5kbWFfcGVyaW9kOwogCi0JCURCRygiZG1hX2xvYWRlZDogJWRcbiIsIHBydGQtPmRtYV9sb2FkZWQpOworCQlwcl9kZWJ1ZygiZG1hX2xvYWRlZDogJWRcbiIsIHBydGQtPmRtYV9sb2FkZWQpOwogCiAJCWlmICgocG9zICsgbGVuKSA+IHBydGQtPmRtYV9lbmQpIHsKIAkJCWxlbiAgPSBwcnRkLT5kbWFfZW5kIC0gcG9zOwotCQkJREJHKEtFUk5fREVCVUcgIiVzOiBjb3JyZWN0ZWQgZG1hIGxlbiAlbGRcbiIsCisJCQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlczogY29ycmVjdGVkIGRtYSBsZW4gJWxkXG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBsZW4pOwogCQl9CiAKQEAgLTExOSw3ICsxMTIsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gZGV2X2lkOwogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAocmVzdWx0ID09IFMzQzI0MTBfUkVTX0FCT1JUIHx8IHJlc3VsdCA9PSBTM0MyNDEwX1JFU19FUlIpCiAJCXJldHVybjsKQEAgLTE0OCw3ICsxNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG90Ynl0ZXMgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogcmV0dXJuIGlmIHRoaXMgaXMgYSBidWZmZXJsZXNzIHRyYW5zZmVyIGUuZy4KIAkgKiBjb2RlYyA8LS0+IEJUIGNvZGVjIG9yIEdTTSBtb2RlbSAtLSBsZyBGSVhNRSAqLwpAQCAtMTYxLDE0ICsxNTQsMTQgQEAKIAkJLyogcHJlcGFyZSBETUEgKi8KIAkJcHJ0ZC0+cGFyYW1zID0gZG1hOwogCi0JCURCRygicGFyYW1zICVwLCBjbGllbnQgJXAsIGNoYW5uZWwgJWRcbiIsIHBydGQtPnBhcmFtcywKKwkJcHJfZGVidWcoInBhcmFtcyAlcCwgY2xpZW50ICVwLCBjaGFubmVsICVkXG4iLCBwcnRkLT5wYXJhbXMsCiAJCQlwcnRkLT5wYXJhbXMtPmNsaWVudCwgcHJ0ZC0+cGFyYW1zLT5jaGFubmVsKTsKIAogCQlyZXQgPSBzM2MyNDEwX2RtYV9yZXF1ZXN0KHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKIAkJCQkJICBwcnRkLT5wYXJhbXMtPmNsaWVudCwgTlVMTCk7CiAKIAkJaWYgKHJldCA8IDApIHsKLQkJCURCRyhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBkbWEgY2hhbm5lbFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgZG1hIGNoYW5uZWxcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTE5Niw3ICsxODksNyBAQAogewogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIFRPRE8gLSBkbyB3ZSBuZWVkIHRvIGVuc3VyZSBETUEgZmx1c2hlZCAqLwogCXNuZF9wY21fc2V0X3J1bnRpbWVfYnVmZmVyKHN1YnN0cmVhbSwgTlVMTCk7CkBAIC0yMTQsNyArMjA3LDcgQEAKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiByZXR1cm4gaWYgdGhpcyBpcyBhIGJ1ZmZlcmxlc3MgdHJhbnNmZXIgZS5nLgogCSAqIGNvZGVjIDwtLT4gQlQgY29kZWMgb3IgR1NNIG1vZGVtIC0tIGxnIEZJWE1FICovCkBAIC0yNTksNyArMjUyLDcgQEAKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2soJnBydGQtPmxvY2spOwogCkBAIC0yOTcsNyArMjkwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlczsKIAlkbWFfYWRkcl90IHNyYywgZHN0OwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7CiAJczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24ocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLCAmc3JjLCAmZHN0KTsKQEAgLTMwOSw3ICszMDIsNyBAQAogCiAJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOwogCi0JREJHKCJQb2ludGVyICV4ICV4XG4iLCBzcmMsIGRzdCk7CisJcHJfZGVidWcoIlBvaW50ZXIgJXggJXhcbiIsIHNyYywgZHN0KTsKIAogCS8qIHdlIHNlZW0gdG8gYmUgZ2V0dGluZyB0aGUgb2RkIGVycm9yIGZyb20gdGhlIHBjbSBsaWJyYXJ5IGR1ZQogCSAqIHRvIG91dC1vZi1ib3VuZHMgcG9pbnRlcnMuIHRoaXMgaXMgbWF5YmUgZHVlIHRvIHRoZSBkbWEgZW5naW5lCkBAIC0zMzAsNyArMzIzLDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnMzYzI0eHhfcGNtX2hhcmR3YXJlKTsKIApAQCAtMzQ5LDEwICszNDIsMTAgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIXBydGQpCi0JCURCRygiczNjMjR4eF9wY21fY2xvc2UgY2FsbGVkIHdpdGggcHJ0ZCA9PSBOVUxMXG4iKTsKKwkJcHJfZGVidWcoInMzYzI0eHhfcGNtX2Nsb3NlIGNhbGxlZCB3aXRoIHBydGQgPT0gTlVMTFxuIik7CiAKIAlrZnJlZShwcnRkKTsKIApAQCAtMzY0LDcgKzM1Nyw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKIAkJCQkgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLApAQCAtMzkwLDcgKzM4Myw3IEBACiAJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOwogCXNpemVfdCBzaXplID0gczNjMjR4eF9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOwogCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OwpAQCAtNDA5LDcgKzQwMiw3IEBACiAJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7CiAJaW50IHN0cmVhbTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKHN0cmVhbSA9IDA7IHN0cmVhbSA8IDI7IHN0cmVhbSsrKSB7CiAJCXN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKQEAgLTQzMyw3ICs0MjYsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKIAkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZzM2MyNHh4X3BjbV9kbWFtYXNrOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYwppbmRleCBhMGE0ZDE4My4uOGU3OWE0MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9zM2MyNHh4X3VkYTEzNHguaD4KICNpbmNsdWRlIDxzb3VuZC91ZGExMzR4Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjNWRlNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKQEAgLTAsMCArMSwyMjIgQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQzY0WFggSTJTIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtczNjMjQxMi1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1kLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstZS5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisKKyNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgorI2luY2x1ZGUgInMzYzY0eHgtaTJzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzY0eHhfZG1hX2NsaWVudF9vdXQgPSB7CisJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIG91dCIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzY0eHhfZG1hX2NsaWVudF9pbiA9IHsKKwkubmFtZQkJPSAiSTJTIFBDTSBTdGVyZW8gaW4iCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbMl0gPSB7CisJWzBdID0geworCQkuY2hhbm5lbAk9IERNQUNIX0kyUzBfT1VULAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfb3V0LAorCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzAgKyBTM0MyNDEyX0lJU1RYRCwKKwkJLmRtYV9zaXplCT0gNCwKKwl9LAorCVsxXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMxX09VVCwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X291dCwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMxICsgUzNDMjQxMl9JSVNUWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9wY21fZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX2luWzJdID0geworCVswXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMwX0lOLAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfaW4sCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTUlhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCisJWzFdID0geworCQkuY2hhbm5lbAk9IERNQUNIX0kyUzFfSU4sCisJCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9pbiwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMxICsgUzNDMjQxMl9JSVNSWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gczNjNjR4eF9pMnNbMl07CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19pMnN2Ml9pbmZvICp0b19pbmZvKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlyZXR1cm4gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfaTJzX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCSAgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGNwdV9kYWkpOworCXUzMiBpaXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgUzNDNjRYWF9DTEtTUkNfUENMSzoKKwkJaWlzbW9kICY9IH5TM0M2NFhYX0lJU01PRF9JTVNfU1lTTVVYOworCQlicmVhazsKKworCWNhc2UgUzNDNjRYWF9DTEtTUkNfTVVYOgorCQlpaXNtb2QgfD0gUzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwlyZXR1cm4gMDsKK30KKworCit1bnNpZ25lZCBsb25nIHMzYzY0eHhfaTJzX2dldF9jbG9ja3JhdGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGRhaSk7CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGkycy0+aWlzX2NjbGspOworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjNjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSk7CisKK3N0YXRpYyBpbnQgczNjNjR4eF9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkyczsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhkZXYsICIlczogcHJvYmluZyBkYWkgJWRcbiIsIF9fZnVuY19fLCBwZGV2LT5pZCk7CisKKwlpZiAocGRldi0+aWQgPCAwIHx8IHBkZXYtPmlkID4gQVJSQVlfU0laRShzM2M2NHh4X2kycykpIHsKKwkJZGV2X2VycihkZXYsICJpZCAlZCBvdXQgb2YgcmFuZ2VcbiIsIHBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaTJzID0gJnMzYzY0eHhfaTJzW3BkZXYtPmlkXTsKKworCXJldCA9IHMzY19pMnN2Ml9wcm9iZShwZGV2LCBkYWksIGkycywKKwkJCSAgICAgIHBkZXYtPmlkID8gUzNDNjRYWF9QQV9JSVMxIDogUzNDNjRYWF9QQV9JSVMwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaTJzLT5kbWFfY2FwdHVyZSA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX2luW3BkZXYtPmlkXTsKKwlpMnMtPmRtYV9wbGF5YmFjayA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFtwZGV2LT5pZF07CisKKwlpMnMtPmlpc19jY2xrID0gY2xrX2dldChkZXYsICJhdWRpby1idXMiKTsKKwlpZiAoSVNfRVJSKGkycy0+aWlzX2NjbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBhdWRpby1idXMiKTsKKwkJaW91bm1hcChpMnMtPnJlZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBjb25maWd1cmUgR1BJTyBmb3IgaTJzIHBvcnQgKi8KKwlzd2l0Y2ggKHBkZXYtPmlkKSB7CisJY2FzZSAwOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMCksIFMzQzY0WFhfR1BEMF9JMlMwX0NMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgxKSwgUzNDNjRYWF9HUEQxX0kyUzBfQ0RDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMiksIFMzQzY0WFhfR1BEMl9JMlMwX0xSQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDMpLCBTM0M2NFhYX0dQRDNfSTJTMF9ESSk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCg0KSwgUzNDNjRYWF9HUEQ0X0kyUzBfRDApOworCQlicmVhazsKKwljYXNlIDE6CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgwKSwgUzNDNjRYWF9HUEUwX0kyUzFfQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDEpLCBTM0M2NFhYX0dQRTFfSTJTMV9DRENMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgyKSwgUzNDNjRYWF9HUEUyX0kyUzFfTFJDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMyksIFMzQzY0WFhfR1BFM19JMlMxX0RJKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDQpLCBTM0M2NFhYX0dQRTRfSTJTMV9EMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworI2RlZmluZSBTM0M2NFhYX0kyU19SQVRFUyBcCisJKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHwgXAorCVNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCisKKyNkZWZpbmUgUzNDNjRYWF9JMlNfRk1UUyBcCisJKFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjNjR4eF9pMnNfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2Nsawk9IHMzYzY0eHhfaTJzX3NldF9zeXNjbGssCQorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHMzYzY0eHhfaTJzX2RhaSA9IHsKKwkubmFtZQkJPSAiczNjNjR4eC1pMnMiLAorCS5pZAkJPSAwLAorCS5wcm9iZQkJPSBzM2M2NHh4X2kyc19wcm9iZSwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4JPSAyLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAorCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbgk9IDIsCisJCS5jaGFubmVsc19tYXgJPSAyLAorCQkucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCisJCS5mb3JtYXRzCT0gUzNDNjRYWF9JMlNfRk1UUywKKwl9LAorCS5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChzM2M2NHh4X2kyc19kYWkpOworCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X2kyc19pbml0KHZvaWQpCit7CisJcmV0dXJuICBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKCZzM2M2NHh4X2kyc19kYWkpOworfQorbW9kdWxlX2luaXQoczNjNjR4eF9pMnNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2M2NHh4X2kyc19leGl0KHZvaWQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmczNjNjR4eF9pMnNfZGFpKTsKK30KK21vZHVsZV9leGl0KHMzYzY0eHhfaTJzX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzY0WFggSTJTIFNvQyBJbnRlcmZhY2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmggYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmZlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmgKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQzY0WFggSTJTIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19ICisjZGVmaW5lIF9fU05EX1NPQ19TM0MyNFhYX1MzQzY0WFhfSTJTX0ggX19GSUxFX18KKworI2luY2x1ZGUgInMzYy1pMnMtdjIuaCIKKworI2RlZmluZSBTM0M2NFhYX0RJVl9CQ0xLCVMzQ19JMlNWMl9ESVZfQkNMSworI2RlZmluZSBTM0M2NFhYX0RJVl9SQ0xLCVMzQ19JMlNWMl9ESVZfUkNMSworI2RlZmluZSBTM0M2NFhYX0RJVl9QUkVTQ0FMRVIJUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVIKKworI2RlZmluZSBTM0M2NFhYX0NMS1NSQ19QQ0xLCSgwKQorI2RlZmluZSBTM0M2NFhYX0NMS1NSQ19NVVgJKDEpCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjNjR4eF9pMnNfZGFpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2M2NHh4X2kyc19nZXRfY2xvY2tyYXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSk7CisKKyNlbmRpZiAvKiBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvaGFjLmMgYi9zb3VuZC9zb2Mvc2gvaGFjLmMKaW5kZXggZWFiMzE4My4uNDFkYjc1YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2hhYy5jCisrKyBiL3NvdW5kL3NvYy9zaC9oYWMuYwpAQCAtMjY3LDYgKzI2NywxMCBAQAogI2RlZmluZSBBQzk3X0ZNVFMJXAogCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGhhY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBoYWNfaHdfcGFyYW1zLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHNoNF9oYWNfZGFpW10gPSB7CiB7CiAJLm5hbWUJCQk9ICJIQUMwIiwKQEAgLTI4NCw5ICsyODgsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zCT0gaGFjX2h3X3BhcmFtcywKLQl9LAorCS5vcHMgPSAmaGFjX2RhaV9vcHMsCiB9LAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAKIHsKQEAgLTMwNSw5ICszMDcsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zCT0gaGFjX2h3X3BhcmFtcywKLQl9LAorCS5vcHMgPSAmaGFjX2RhaV9vcHMsCiAKIH0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zc2kuYyBiL3NvdW5kL3NvYy9zaC9zc2kuYwppbmRleCBkMWU1MzkwLi41NmZhMDg3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvc3NpLmMKKysrIGIvc291bmQvc29jL3NoL3NzaS5jCkBAIC0zMzYsNiArMzM2LDE2IEBACiAJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfVTI0XzNMRSB8CVwKIAkgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgIHwgU05EUlZfUENNX0ZNVEJJVF9VMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHNzaV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gc3NpX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAorCS50cmlnZ2VyCT0gc3NpX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IHNzaV9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKKwkuc2V0X2Nsa2Rpdgk9IHNzaV9zZXRfY2xrZGl2LAorCS5zZXRfZm10CT0gc3NpX3NldF9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgc2g0X3NzaV9kYWlbXSA9IHsKIHsKIAkubmFtZQkJCT0gIlNTSTAiLApAQCAtMzUyLDE1ICszNjIsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDgsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cAk9IHNzaV9zdGFydHVwLAotCQkuc2h1dGRvd24JPSBzc2lfc2h1dGRvd24sCi0JCS50cmlnZ2VyCT0gc3NpX3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBzc2lfaHdfcGFyYW1zLAotCQkuc2V0X3N5c2Nsawk9IHNzaV9zZXRfc3lzY2xrLAotCQkuc2V0X2Nsa2Rpdgk9IHNzaV9zZXRfY2xrZGl2LAotCQkuc2V0X2ZtdAk9IHNzaV9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZzc2lfZGFpX29wcywKIH0sCiAjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MAogewpAQCAtMzc4LDE1ICszODAsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDgsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cAk9IHNzaV9zdGFydHVwLAotCQkuc2h1dGRvd24JPSBzc2lfc2h1dGRvd24sCi0JCS50cmlnZ2VyCT0gc3NpX3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBzc2lfaHdfcGFyYW1zLAotCQkuc2V0X3N5c2Nsawk9IHNzaV9zZXRfc3lzY2xrLAotCQkuc2V0X2Nsa2Rpdgk9IHNzaV9zZXRfY2xrZGl2LAotCQkuc2V0X2ZtdAk9IHNzaV9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZzc2lfZGFpX29wcywKIH0sCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGVjM2Y4YmIuLjZlNzEwZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0xMzMsOCArMTMzLDggQEAKIAltdXRleF9sb2NrKCZwY21fbXV0ZXgpOwogCiAJLyogc3RhcnR1cCB0aGUgYXVkaW8gc3Vic3lzdGVtICovCi0JaWYgKGNwdV9kYWktPm9wcy5zdGFydHVwKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy5zdGFydHVwKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+c3RhcnR1cCkgeworCQlyZXQgPSBjcHVfZGFpLT5vcHMtPnN0YXJ0dXAoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3Qgb3BlbiBpbnRlcmZhY2UgJXNcbiIsCiAJCQkJY3B1X2RhaS0+bmFtZSk7CkBAIC0xNTAsOCArMTUwLDggQEAKIAkJfQogCX0KIAotCWlmIChjb2RlY19kYWktPm9wcy5zdGFydHVwKSB7Ci0JCXJldCA9IGNvZGVjX2RhaS0+b3BzLnN0YXJ0dXAoc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+c3RhcnR1cCkgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+c3RhcnR1cChzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNhbid0IG9wZW4gY29kZWMgJXNcbiIsCiAJCQkJY29kZWNfZGFpLT5uYW1lKTsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCQljcHVfZGFpLT5jYXB0dXJlLmFjdGl2ZSA9IGNvZGVjX2RhaS0+Y2FwdHVyZS5hY3RpdmUgPSAxOwogCWNwdV9kYWktPmFjdGl2ZSA9IGNvZGVjX2RhaS0+YWN0aXZlID0gMTsKIAljcHVfZGFpLT5ydW50aW1lID0gcnVudGltZTsKLQlzb2NkZXYtPmNvZGVjLT5hY3RpdmUrKzsKKwljYXJkLT5jb2RlYy0+YWN0aXZlKys7CiAJbXV0ZXhfdW5sb2NrKCZwY21fbXV0ZXgpOwogCXJldHVybiAwOwogCkBAIC0yNDcsOCArMjQ3LDggQEAKIAkJcGxhdGZvcm0tPnBjbV9vcHMtPmNsb3NlKHN1YnN0cmVhbSk7CiAKIHBsYXRmb3JtX2VycjoKLQlpZiAoY3B1X2RhaS0+b3BzLnNodXRkb3duKQotCQljcHVfZGFpLT5vcHMuc2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY3B1X2RhaS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOwogb3V0OgogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc25kX3NvY19jYXJkLAogCQkJCQkJIGRlbGF5ZWRfd29yay53b3JrKTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGNhcmQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpOwogCWludCBpOwogCkBAIC0zMTksNyArMzE5LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBtYWNoaW5lLT5jcHVfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gbWFjaGluZS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAKIAltdXRleF9sb2NrKCZwY21fbXV0ZXgpOwogCkBAIC0zNDAsMTEgKzM0MCwxMSBAQAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlzbmRfc29jX2RhaV9kaWdpdGFsX211dGUoY29kZWNfZGFpLCAxKTsKIAotCWlmIChjcHVfZGFpLT5vcHMuc2h1dGRvd24pCi0JCWNwdV9kYWktPm9wcy5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnNodXRkb3duKQorCQljcHVfZGFpLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMuc2h1dGRvd24pCi0JCWNvZGVjX2RhaS0+b3BzLnNodXRkb3duKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnNodXRkb3duKQorCQljb2RlY19kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCiAJaWYgKG1hY2hpbmUtPm9wcyAmJiBtYWNoaW5lLT5vcHMtPnNodXRkb3duKQogCQltYWNoaW5lLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSk7CkBAIC0zODcsNyArMzg3LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBtYWNoaW5lLT5jcHVfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gbWFjaGluZS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZwY21fbXV0ZXgpOwpAQCAtNDA4LDE2ICs0MDgsMTYgQEAKIAkJfQogCX0KIAotCWlmIChjb2RlY19kYWktPm9wcy5wcmVwYXJlKSB7Ci0JCXJldCA9IGNvZGVjX2RhaS0+b3BzLnByZXBhcmUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+cHJlcGFyZSkgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+cHJlcGFyZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNvZGVjIERBSSBwcmVwYXJlIGVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JaWYgKGNwdV9kYWktPm9wcy5wcmVwYXJlKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy5wcmVwYXJlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+cHJlcGFyZSkgeworCQlyZXQgPSBjcHVfZGFpLT5vcHMtPnByZXBhcmUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY3B1IERBSSBwcmVwYXJlIGVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtNDk0LDggKzQ5NCw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfcGFyYW1zKSB7Ci0JCXJldCA9IGNvZGVjX2RhaS0+b3BzLmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPmh3X3BhcmFtcykgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+aHdfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBzZXQgY29kZWMgJXMgaHcgcGFyYW1zXG4iLAogCQkJCWNvZGVjX2RhaS0+bmFtZSk7CkBAIC01MDMsOCArNTAzLDggQEAKIAkJfQogCX0KIAotCWlmIChjcHVfZGFpLT5vcHMuaHdfcGFyYW1zKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPmh3X3BhcmFtcykgeworCQlyZXQgPSBjcHVfZGFpLT5vcHMtPmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGludGVyZmFjZSAlcyBodyBwYXJhbXMgZmFpbGVkXG4iLAogCQkJCWNwdV9kYWktPm5hbWUpOwpAQCAtNTI2LDEyICs1MjYsMTIgQEAKIAlyZXR1cm4gcmV0OwogCiBwbGF0Zm9ybV9lcnI6Ci0JaWYgKGNwdV9kYWktPm9wcy5od19mcmVlKQotCQljcHVfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPmh3X2ZyZWUpCisJCWNwdV9kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNwdV9kYWkpOwogCiBpbnRlcmZhY2VfZXJyOgotCWlmIChjb2RlY19kYWktPm9wcy5od19mcmVlKQotCQljb2RlY19kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPmh3X2ZyZWUpCisJCWNvZGVjX2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAogY29kZWNfZXJyOgogCWlmIChtYWNoaW5lLT5vcHMgJiYgbWFjaGluZS0+b3BzLT5od19mcmVlKQpAQCAtNTUzLDcgKzU1Myw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIApAQCAtNTcwLDExICs1NzAsMTEgQEAKIAkJcGxhdGZvcm0tPnBjbV9vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtKTsKIAogCS8qIG5vdyBmcmVlIGh3IHBhcmFtcyBmb3IgdGhlIERBSSdzICAqLwotCWlmIChjb2RlY19kYWktPm9wcy5od19mcmVlKQotCQljb2RlY19kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPmh3X2ZyZWUpCisJCWNvZGVjX2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAotCWlmIChjcHVfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY3B1X2RhaS0+b3BzLmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19mcmVlKQorCQljcHVfZGFpLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gMDsKQEAgLTU5MSw4ICs1OTEsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gbWFjaGluZS0+Y29kZWNfZGFpOwogCWludCByZXQ7CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMudHJpZ2dlcikgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+dHJpZ2dlcikgeworCQlyZXQgPSBjb2RlY19kYWktPm9wcy0+dHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY29kZWNfZGFpKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTYwMyw4ICs2MDMsOCBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoY3B1X2RhaS0+b3BzLnRyaWdnZXIpIHsKLQkJcmV0ID0gY3B1X2RhaS0+b3BzLnRyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnRyaWdnZXIpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjcHVfZGFpKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTYyOSw3ICs2MjksNyBAQAogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlICpjb2RlY19kZXYgPSBzb2NkZXYtPmNvZGVjX2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCWludCBpOwogCiAJLyogRHVlIHRvIHRoZSByZXN1bWUgYmVpbmcgc2NoZWR1bGVkIGludG8gYSB3b3JrcXVldWUgd2UgY291bGQKQEAgLTY0NSw4ICs2NDUsOCBAQAogCS8qIG11dGUgYW55IGFjdGl2ZSBEQUMncyAqLwogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGNhcmQtPmRhaV9saW5rW2ldLmNvZGVjX2RhaTsKLQkJaWYgKGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrLmFjdGl2ZSkKLQkJCWRhaS0+b3BzLmRpZ2l0YWxfbXV0ZShkYWksIDEpOworCQlpZiAoZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrLmFjdGl2ZSkKKwkJCWRhaS0+b3BzLT5kaWdpdGFsX211dGUoZGFpLCAxKTsKIAl9CiAKIAkvKiBzdXNwZW5kIGFsbCBwY21zICovCkBAIC03MDUsNyArNzA1LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGNhcmQtPnNvY2RldjsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2UgKmNvZGVjX2RldiA9IHNvY2Rldi0+Y29kZWNfZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzb2NkZXYtPmRldik7CiAJaW50IGk7CiAKQEAgLTc0MSw4ICs3NDEsOCBAQAogCS8qIHVubXV0ZSBhbnkgYWN0aXZlIERBQ3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBjYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWk7Ci0JCWlmIChkYWktPm9wcy5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCi0JCQlkYWktPm9wcy5kaWdpdGFsX211dGUoZGFpLCAwKTsKKwkJaWYgKGRhaS0+b3BzLT5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCisJCQlkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKGRhaSwgMCk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CkBAIC05ODIsOCArOTgyLDggQEAKIHN0YXRpYyBpbnQgc29jX25ld19wY20oc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsCiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rLCBpbnQgbnVtKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGRhaV9saW5rLT5jb2RlY19kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gZGFpX2xpbmstPmNwdV9kYWk7CkBAIC05OTgsNyArOTk4LDcgQEAKIAogCXJ0ZC0+ZGFpID0gZGFpX2xpbms7CiAJcnRkLT5zb2NkZXYgPSBzb2NkZXY7Ci0JY29kZWNfZGFpLT5jb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWNfZGFpLT5jb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgY2xpZW50IGFuZCBpbnRlcmZhY2UgaHcgY2FwYWJpbGl0aWVzICovCiAJc3ByaW50ZihuZXdfbmFtZSwgIiVzICVzLSVkIiwgZGFpX2xpbmstPnN0cmVhbV9uYW1lLCBjb2RlY19kYWktPm5hbWUsCkBAIC0xMDQ4LDkgKzEwNDgsOCBAQAogfQogCiAvKiBjb2RlYyByZWdpc3RlciBkdW1wICovCi1zdGF0aWMgc3NpemVfdCBzb2NfY29kZWNfcmVnX3Nob3coc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzb2NfY29kZWNfcmVnX3Nob3coc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y29kZWM7CiAJaW50IGksIHN0ZXAgPSAxLCBjb3VudCA9IDA7CiAKIAlpZiAoIWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKQEAgLTEwOTAsNyArMTA4OSw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmRldmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlyZXR1cm4gc29jX2NvZGVjX3JlZ19zaG93KGRldmRhdGEsIGJ1Zik7CisJcmV0dXJuIHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLT5jYXJkLT5jb2RlYywgYnVmKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGNvZGVjX3JlZywgMDQ0NCwgY29kZWNfcmVnX3Nob3csIE5VTEwpOwpAQCAtMTEwNywxMiArMTEwNiwxMCBAQAogewogCXNzaXplX3QgcmV0OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpjYXJkX2RldiA9IGNvZGVjLT5jYXJkLT5kZXY7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gY2FyZF9kZXYtPmRyaXZlcl9kYXRhOwogCWNoYXIgKmJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0gc29jX2NvZGVjX3JlZ19zaG93KGRldmRhdGEsIGJ1Zik7CisJcmV0ID0gc29jX2NvZGVjX3JlZ19zaG93KGNvZGVjLCBidWYpOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7CiAJa2ZyZWUoYnVmKTsKQEAgLTEzMDksMTkgKzEzMDYsMTkgQEAKICAqLwogaW50IHNuZF9zb2NfbmV3X3BjbXMoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7Ci0JaW50IHJldCA9IDAsIGk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CisJaW50IHJldCwgaTsKIAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CiAKIAkvKiByZWdpc3RlciBhIHNvdW5kIGNhcmQgKi8KLQljb2RlYy0+Y2FyZCA9IHNuZF9jYXJkX25ldyhpZHgsIHhpZCwgY29kZWMtPm93bmVyLCAwKTsKLQlpZiAoIWNvZGVjLT5jYXJkKSB7CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGlkeCwgeGlkLCBjb2RlYy0+b3duZXIsIDAsICZjb2RlYy0+Y2FyZCk7CisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBjcmVhdGUgc291bmQgY2FyZCBmb3IgY29kZWMgJXNcbiIsCiAJCQljb2RlYy0+bmFtZSk7CiAJCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiByZXQ7CiAJfQogCiAJY29kZWMtPmNhcmQtPmRldiA9IHNvY2Rldi0+ZGV2OwpAQCAtMTM1NSw4ICsxMzUyLDggQEAKICAqLwogaW50IHNuZF9zb2NfaW5pdF9jYXJkKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMCwgaSwgYWM5NyA9IDAsIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKQEAgLTE0MDcsNyArMTQwNCw3IEBACiAJaWYgKGVyciA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImFzb2M6IGZhaWxlZCB0byBhZGQgY29kZWMgc3lzZnMgZmlsZXNcbiIpOwogCi0Jc29jX2luaXRfY29kZWNfZGVidWdmcyhzb2NkZXYtPmNvZGVjKTsKKwlzb2NfaW5pdF9jb2RlY19kZWJ1Z2ZzKGNvZGVjKTsKIAltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAKIG91dDoKQEAgLTE0MjQsMTggKzE0MjEsMTkgQEAKICAqLwogdm9pZCBzbmRfc29jX2ZyZWVfcGNtcyhzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAjaWZkZWYgQ09ORklHX1NORF9TT0NfQUM5N19CVVMKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgaTsKICNlbmRpZgogCiAJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKLQlzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKHNvY2Rldi0+Y29kZWMpOworCXNvY19jbGVhbnVwX2NvZGVjX2RlYnVnZnMoY29kZWMpOwogI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fZGFpOyBpKyspIHsKIAkJY29kZWNfZGFpID0gJmNvZGVjLT5kYWlbaV07Ci0JCWlmIChjb2RlY19kYWktPmFjOTdfY29udHJvbCAmJiBjb2RlYy0+YWM5NykgeworCQlpZiAoY29kZWNfZGFpLT5hYzk3X2NvbnRyb2wgJiYgY29kZWMtPmFjOTcgJiYKKwkJICAgIHN0cmNtcChjb2RlYy0+bmFtZSwgIkFDOTciKSAhPSAwKSB7CiAJCQlzb2NfYWM5N19kZXZfdW5yZWdpc3Rlcihjb2RlYyk7CiAJCQlnb3RvIGZyZWVfY2FyZDsKIAkJfQpAQCAtMTQ5OCw2ICsxNDk2LDM3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2NuZXcpOwogCiAvKioKKyAqIHNuZF9zb2NfYWRkX2NvbnRyb2xzIC0gYWRkIGFuIGFycmF5IG9mIGNvbnRyb2xzIHRvIGEgY29kZWMuCisgKiBDb252aWVuaWVuY2UgZnVuY3Rpb24gdG8gYWRkIGEgbGlzdCBvZiBjb250cm9scy4gTWFueSBjb2RlY3Mgd2VyZQorICogZHVwbGljYXRpbmcgdGhpcyBjb2RlLgorICoKKyAqIEBjb2RlYzogY29kZWMgdG8gYWRkIGNvbnRyb2xzIHRvCisgKiBAY29udHJvbHM6IGFycmF5IG9mIGNvbnRyb2xzIHRvIGFkZAorICogQG51bV9jb250cm9sczogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheQorICoKKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBlbHNlIGVycm9yLgorICovCitpbnQgc25kX3NvY19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9scywgaW50IG51bV9jb250cm9scykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKKwlpbnQgZXJyLCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jb250cm9sczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9sID0gJmNvbnRyb2xzW2ldOworCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfc29jX2NuZXcoY29udHJvbCwgY29kZWMsIE5VTEwpKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIiVzOiBGYWlsZWQgdG8gYWRkICVzXG4iLAorCQkJCWNvZGVjLT5uYW1lLCBjb250cm9sLT5uYW1lKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfYWRkX2NvbnRyb2xzKTsKKworLyoqCiAgKiBzbmRfc29jX2luZm9fZW51bV9kb3VibGUgLSBlbnVtZXJhdGVkIGRvdWJsZSBtaXhlciBpbmZvIGNhbGxiYWNrCiAgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKICAqIEB1aW5mbzogY29udHJvbCBlbGVtZW50IGluZm9ybWF0aW9uCkBAIC0yMDIzLDggKzIwNTIsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCiAJdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9zeXNjbGspCi0JCXJldHVybiBkYWktPm9wcy5zZXRfc3lzY2xrKGRhaSwgY2xrX2lkLCBmcmVxLCBkaXIpOworCWlmIChkYWktPm9wcy0+c2V0X3N5c2NsaykKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfc3lzY2xrKGRhaSwgY2xrX2lkLCBmcmVxLCBkaXIpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDQzLDggKzIwNzIsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJaW50IGRpdl9pZCwgaW50IGRpdikKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X2Nsa2RpdikKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9jbGtkaXYoZGFpLCBkaXZfaWQsIGRpdik7CisJaWYgKGRhaS0+b3BzLT5zZXRfY2xrZGl2KQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF9jbGtkaXYoZGFpLCBkaXZfaWQsIGRpdik7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwNjIsOCArMjA5MSw4IEBACiBpbnQgc25kX3NvY19kYWlfc2V0X3BsbChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKIAlpbnQgcGxsX2lkLCB1bnNpZ25lZCBpbnQgZnJlcV9pbiwgdW5zaWduZWQgaW50IGZyZXFfb3V0KQogewotCWlmIChkYWktPm9wcy5zZXRfcGxsKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3BsbChkYWksIHBsbF9pZCwgZnJlcV9pbiwgZnJlcV9vdXQpOworCWlmIChkYWktPm9wcy0+c2V0X3BsbCkKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfcGxsKGRhaSwgcGxsX2lkLCBmcmVxX2luLCBmcmVxX291dCk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwNzgsOCArMjEwNyw4IEBACiAgKi8KIGludCBzbmRfc29jX2RhaV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQogewotCWlmIChkYWktPm9wcy5zZXRfZm10KQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X2ZtdChkYWksIGZtdCk7CisJaWYgKGRhaS0+b3BzLT5zZXRfZm10KQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF9mbXQoZGFpLCBmbXQpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDk3LDggKzIxMjYsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKIAl1bnNpZ25lZCBpbnQgbWFzaywgaW50IHNsb3RzKQogewotCWlmIChkYWktPm9wcy5zZXRfc3lzY2xrKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3RkbV9zbG90KGRhaSwgbWFzaywgc2xvdHMpOworCWlmIChkYWktPm9wcy0+c2V0X3N5c2NsaykKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfdGRtX3Nsb3QoZGFpLCBtYXNrLCBzbG90cyk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxMTMsOCArMjE0Miw4IEBACiAgKi8KIGludCBzbmRfc29jX2RhaV9zZXRfdHJpc3RhdGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCB0cmlzdGF0ZSkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3N5c2NsaykKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF90cmlzdGF0ZShkYWksIHRyaXN0YXRlKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3RyaXN0YXRlKGRhaSwgdHJpc3RhdGUpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTI5LDggKzIxNTgsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKLQlpZiAoZGFpLT5vcHMuZGlnaXRhbF9tdXRlKQotCQlyZXR1cm4gZGFpLT5vcHMuZGlnaXRhbF9tdXRlKGRhaSwgbXV0ZSk7CisJaWYgKGRhaS0+b3BzLT5kaWdpdGFsX211dGUpCisJCXJldHVybiBkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKGRhaSwgbXV0ZSk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxODMsNiArMjIxMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKK307CisKIC8qKgogICogc25kX3NvY19yZWdpc3Rlcl9kYWkgLSBSZWdpc3RlciBhIERBSSB3aXRoIHRoZSBBU29DIGNvcmUKICAqCkBAIC0yMTk3LDYgKzIyMjksOSBAQAogCWlmICghZGFpLT5kZXYpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGRldmljZSBmb3IgREFJICVzXG4iLCBkYWktPm5hbWUpOwogCisJaWYgKCFkYWktPm9wcykKKwkJZGFpLT5vcHMgPSAmbnVsbF9kYWlfb3BzOworCiAJSU5JVF9MSVNUX0hFQUQoJmRhaS0+bGlzdCk7CiAKIAltdXRleF9sb2NrKCZjbGllbnRfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCBhMmYxZGE4Li43MzU5MDNhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtNTQsMTQgKzU0LDE1IEBACiBzdGF0aWMgaW50IGRhcG1fdXBfc2VxW10gPSB7CiAJc25kX3NvY19kYXBtX3ByZSwgc25kX3NvY19kYXBtX21pY2JpYXMsIHNuZF9zb2NfZGFwbV9taWMsCiAJc25kX3NvY19kYXBtX211eCwgc25kX3NvY19kYXBtX3ZhbHVlX211eCwgc25kX3NvY19kYXBtX2RhYywKLQlzbmRfc29jX2RhcG1fbWl4ZXIsIHNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9hZGMsIHNuZF9zb2NfZGFwbV9ocCwKLQlzbmRfc29jX2RhcG1fc3BrLCBzbmRfc29jX2RhcG1fcG9zdAorCXNuZF9zb2NfZGFwbV9taXhlciwgc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgc25kX3NvY19kYXBtX3BnYSwKKwlzbmRfc29jX2RhcG1fYWRjLCBzbmRfc29jX2RhcG1faHAsIHNuZF9zb2NfZGFwbV9zcGssIHNuZF9zb2NfZGFwbV9wb3N0CiB9OworCiBzdGF0aWMgaW50IGRhcG1fZG93bl9zZXFbXSA9IHsKIAlzbmRfc29jX2RhcG1fcHJlLCBzbmRfc29jX2RhcG1fYWRjLCBzbmRfc29jX2RhcG1faHAsIHNuZF9zb2NfZGFwbV9zcGssCi0Jc25kX3NvY19kYXBtX3BnYSwgc25kX3NvY19kYXBtX21peGVyLCBzbmRfc29jX2RhcG1fZGFjLCBzbmRfc29jX2RhcG1fbWljLAotCXNuZF9zb2NfZGFwbV9taWNiaWFzLCBzbmRfc29jX2RhcG1fbXV4LCBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LAotCXNuZF9zb2NfZGFwbV9wb3N0CisJc25kX3NvY19kYXBtX3BnYSwgc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgc25kX3NvY19kYXBtX21peGVyLAorCXNuZF9zb2NfZGFwbV9kYWMsIHNuZF9zb2NfZGFwbV9taWMsIHNuZF9zb2NfZGFwbV9taWNiaWFzLAorCXNuZF9zb2NfZGFwbV9tdXgsIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsIHNuZF9zb2NfZGFwbV9wb3N0CiB9OwogCiBzdGF0aWMgaW50IGRhcG1fc3RhdHVzID0gMTsKQEAgLTEwMSw3ICsxMDIsOCBAQAogewogCXN3aXRjaCAody0+aWQpIHsKIAljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6Ci0JY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6IHsKKwljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6IHsKIAkJaW50IHZhbDsKIAkJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9IChzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKikKIAkJCXctPmtjb250cm9sc1tpXS5wcml2YXRlX3ZhbHVlOwpAQCAtMzIzLDE1ICszMjUsMzIgQEAKIAkJCWlmIChwYXRoLT5uYW1lICE9IChjaGFyKil3LT5rY29udHJvbHNbaV0ubmFtZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyogYWRkIGRhcG0gY29udHJvbCB3aXRoIGxvbmcgbmFtZSAqLwotCQkJbmFtZV9sZW4gPSAyICsgc3RybGVuKHctPm5hbWUpCi0JCQkJKyBzdHJsZW4ody0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJLyogYWRkIGRhcG0gY29udHJvbCB3aXRoIGxvbmcgbmFtZS4KKwkJCSAqIGZvciBkYXBtX21peGVyIHRoaXMgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlCisJCQkgKiBtaXhlciBhbmQga2NvbnRyb2wgbmFtZS4KKwkJCSAqIGZvciBkYXBtX21peGVyX25hbWVkX2N0bCB0aGlzIGlzIHNpbXBseSB0aGUKKwkJCSAqIGtjb250cm9sIG5hbWUuCisJCQkgKi8KKwkJCW5hbWVfbGVuID0gc3RybGVuKHctPmtjb250cm9sc1tpXS5uYW1lKSArIDE7CisJCQlpZiAody0+aWQgIT0gc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCkKKwkJCQluYW1lX2xlbiArPSAxICsgc3RybGVuKHctPm5hbWUpOworCiAJCQlwYXRoLT5sb25nX25hbWUgPSBrbWFsbG9jKG5hbWVfbGVuLCBHRlBfS0VSTkVMKTsKKwogCQkJaWYgKHBhdGgtPmxvbmdfbmFtZSA9PSBOVUxMKQogCQkJCXJldHVybiAtRU5PTUVNOwogCi0JCQlzbnByaW50ZihwYXRoLT5sb25nX25hbWUsIG5hbWVfbGVuLCAiJXMgJXMiLAotCQkJCSB3LT5uYW1lLCB3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQlzd2l0Y2ggKHctPmlkKSB7CisJCQlkZWZhdWx0OgorCQkJCXNucHJpbnRmKHBhdGgtPmxvbmdfbmFtZSwgbmFtZV9sZW4sICIlcyAlcyIsCisJCQkJCSB3LT5uYW1lLCB3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CisJCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzIiwKKwkJCQkJIHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJcGF0aC0+bG9uZ19uYW1lW25hbWVfbGVuIC0gMV0gPSAnXDAnOwogCiAJCQlwYXRoLT5rY29udHJvbCA9IHNuZF9zb2NfY25ldygmdy0+a2NvbnRyb2xzW2ldLCB3LApAQCAtNTAzLDYgKzUyMiwxMzcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRhcG1fcmVnX2V2ZW50KTsKIAogLyoKKyAqIFNjYW4gYSBzaW5nbGUgREFQTSB3aWRnZXQgZm9yIGEgY29tcGxldGUgYXVkaW8gcGF0aCBhbmQgdXBkYXRlIHRoZQorICogcG93ZXIgc3RhdHVzIGFwcHJvcHJpYXRlbHkuCisgKi8KK3N0YXRpYyBpbnQgZGFwbV9wb3dlcl93aWRnZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZXZlbnQsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQoreworCWludCBpbiwgb3V0LCBwb3dlcl9jaGFuZ2UsIHBvd2VyLCByZXQ7CisKKwkvKiB2bWlkIC0gbm8gYWN0aW9uICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV92bWlkKQorCQlyZXR1cm4gMDsKKworCS8qIGFjdGl2ZSBBREMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2FkYyAmJiB3LT5hY3RpdmUpIHsKKwkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7CisJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJCXctPnBvd2VyID0gKGluICE9IDApID8gMSA6IDA7CisJCWRhcG1fdXBkYXRlX2JpdHModyk7CisJCXJldHVybiAwOworCX0KKworCS8qIGFjdGl2ZSBEQUMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2RhYyAmJiB3LT5hY3RpdmUpIHsKKwkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKKwkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwkJdy0+cG93ZXIgPSAob3V0ICE9IDApID8gMSA6IDA7CisJCWRhcG1fdXBkYXRlX2JpdHModyk7CisJCXJldHVybiAwOworCX0KKworCS8qIHByZSBhbmQgcG9zdCBldmVudCB3aWRnZXRzICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wcmUpIHsKKwkJaWYgKCF3LT5ldmVudCkKKwkJCXJldHVybiAwOworCisJCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7CisJCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wb3N0KSB7CisJCWlmICghdy0+ZXZlbnQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKSB7CisJCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBhbGwgb3RoZXIgd2lkZ2V0cyAqLworCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOworCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKKwlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCXBvd2VyID0gKG91dCAhPSAwICYmIGluICE9IDApID8gMSA6IDA7CisJcG93ZXJfY2hhbmdlID0gKHctPnBvd2VyID09IHBvd2VyKSA/IDAgOiAxOworCXctPnBvd2VyID0gcG93ZXI7CisKKwlpZiAoIXBvd2VyX2NoYW5nZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjYWxsIGFueSBwb3dlciBjaGFuZ2UgZXZlbnQgaGFuZGxlcnMgKi8KKwlpZiAody0+ZXZlbnQpCisJCXByX2RlYnVnKCJwb3dlciAlcyBldmVudCBmb3IgJXMgZmxhZ3MgJXhcbiIsCisJCQkgdy0+cG93ZXIgPyAib24iIDogIm9mZiIsCisJCQkgdy0+bmFtZSwgdy0+ZXZlbnRfZmxhZ3MpOworCisJLyogcG93ZXIgdXAgcHJlIGV2ZW50ICovCisJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1VKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwb3dlciBkb3duIHByZSBldmVudCAqLworCWlmICghcG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTUQpKSB7CisJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIExvd2VyIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiAhcG93ZXIpCisJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7CisKKwlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCisJLyogUmFpc2UgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmIHBvd2VyKQorCQlkYXBtX3NldF9wZ2EodywgcG93ZXIpOworCisJLyogcG93ZXIgdXAgcG9zdCBldmVudCAqLworCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9QTVUpKSB7CisJCXJldCA9IHctPmV2ZW50KHcsCisJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHBvd2VyIGRvd24gcG9zdCBldmVudCAqLworCWlmICghcG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBTY2FuIGVhY2ggZGFwbSB3aWRnZXQgZm9yIGNvbXBsZXRlIGF1ZGlvIHBhdGguCiAgKiBBIGNvbXBsZXRlIHBhdGggaXMgYSByb3V0ZSB0aGF0IGhhcyB2YWxpZCBlbmRwb2ludHMgaS5lLjotCiAgKgpAQCAtNTE0LDcgKzY2NCw3IEBACiBzdGF0aWMgaW50IGRhcG1fcG93ZXJfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBldmVudCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKLQlpbnQgaW4sIG91dCwgaSwgYyA9IDEsICpzZXEgPSBOVUxMLCByZXQgPSAwLCBwb3dlcl9jaGFuZ2UsIHBvd2VyOworCWludCBpLCBjID0gMSwgKnNlcSA9IE5VTEwsIHJldCA9IDA7CiAKIAkvKiBkbyB3ZSBoYXZlIGEgc2VxdWVuY2VkIHN0cmVhbSBldmVudCAqLwogCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7CkBAIC01MjUsMTM1ICs2NzUsMjAgQEAKIAkJc2VxID0gZGFwbV9kb3duX3NlcTsKIAl9CiAKLQlmb3IoaSA9IDA7IGkgPCBjOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYzsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpIHsKIAogCQkJLyogaXMgd2lkZ2V0IGluIHN0cmVhbSBvcmRlciAqLwogCQkJaWYgKHNlcSAmJiBzZXFbaV0gJiYgdy0+aWQgIT0gc2VxW2ldKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKiB2bWlkIC0gbm8gYWN0aW9uICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3ZtaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGFjdGl2ZSBBREMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fYWRjICYmIHctPmFjdGl2ZSkgewotCQkJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOwotCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQkJdy0+cG93ZXIgPSAoaW4gIT0gMCkgPyAxIDogMDsKLQkJCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKiBhY3RpdmUgREFDICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2RhYyAmJiB3LT5hY3RpdmUpIHsKLQkJCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQkJdy0+cG93ZXIgPSAob3V0ICE9IDApID8gMSA6IDA7Ci0JCQkJZGFwbV91cGRhdGVfYml0cyh3KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogcHJlIGFuZCBwb3N0IGV2ZW50IHdpZGdldHMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcHJlKSB7Ci0JCQkJaWYgKCF3LT5ldmVudCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgewotCQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkJTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcG9zdCkgewotCQkJCWlmICghdy0+ZXZlbnQpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgewotCQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkJTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogYWxsIG90aGVyIHdpZGdldHMgKi8KLQkJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOwotCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7Ci0JCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJcG93ZXIgPSAob3V0ICE9IDAgJiYgaW4gIT0gMCkgPyAxIDogMDsKLQkJCXBvd2VyX2NoYW5nZSA9ICh3LT5wb3dlciA9PSBwb3dlcikgPyAwOiAxOwotCQkJdy0+cG93ZXIgPSBwb3dlcjsKLQotCQkJaWYgKCFwb3dlcl9jaGFuZ2UpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGNhbGwgYW55IHBvd2VyIGNoYW5nZSBldmVudCBoYW5kbGVycyAqLwotCQkJaWYgKHctPmV2ZW50KQotCQkJCXByX2RlYnVnKCJwb3dlciAlcyBldmVudCBmb3IgJXMgZmxhZ3MgJXhcbiIsCi0JCQkJCSB3LT5wb3dlciA/ICJvbiIgOiAib2ZmIiwKLQkJCQkJIHctPm5hbWUsIHctPmV2ZW50X2ZsYWdzKTsKLQotCQkJLyogcG93ZXIgdXAgcHJlIGV2ZW50ICovCi0JCQlpZiAocG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkpIHsKLQkJCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCS8qIHBvd2VyIGRvd24gcHJlIGV2ZW50ICovCi0JCQlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTUQpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQkvKiBMb3dlciBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiAhcG93ZXIpCi0JCQkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKLQotCQkJZGFwbV91cGRhdGVfYml0cyh3KTsKLQotCQkJLyogUmFpc2UgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgcG93ZXIpCi0JCQkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKLQotCQkJLyogcG93ZXIgdXAgcG9zdCBldmVudCAqLwotCQkJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQkvKiBwb3dlciBkb3duIHBvc3QgZXZlbnQgKi8KLQkJCWlmICghcG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KKwkJCXJldCA9IGRhcG1fcG93ZXJfd2lkZ2V0KGNvZGVjLCBldmVudCwgdyk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBERUJVRwpAQCAtNjg3LDYgKzcyMiw3IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKIAkJY2FzZSBzbmRfc29jX2RhcG1fcGdhOgogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJaWYgKHctPm5hbWUpIHsKIAkJCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKIAkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwpAQCAtNzYwLDYgKzc5Niw3IEBACiAJaW50IGZvdW5kID0gMDsKIAogCWlmICh3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlciAmJgorCSAgICB3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwgJiYKIAkgICAgd2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fc3dpdGNoKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNzk1LDcgKzgzMiw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmRldmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkZXZkYXRhLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkZXZkYXRhLT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIAlpbnQgY291bnQgPSAwOwogCWNoYXIgKnN0YXRlID0gIm5vdCBzZXQiOwpAQCAtODEzLDYgKzg1MCw3IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKIAkJY2FzZSBzbmRfc29jX2RhcG1fcGdhOgogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJaWYgKHctPm5hbWUpCiAJCQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIiVzOiAlc1xuIiwKIAkJCQkJdy0+bmFtZSwgdy0+cG93ZXIgPyAiT24iOiJPZmYiKTsKQEAgLTg3Niw3ICs5MTQsNyBAQAogfQogCiBzdGF0aWMgaW50IHNuZF9zb2NfZGFwbV9zZXRfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQljaGFyICpwaW4sIGludCBzdGF0dXMpCisJCQkJY29uc3QgY2hhciAqcGluLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCkBAIC05OTEsNiArMTAyOSw3IEBACiAJCWJyZWFrOwogCWNhc2Ugc25kX3NvY19kYXBtX3N3aXRjaDoKIAljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CiAJCXJldCA9IGRhcG1fY29ubmVjdF9taXhlcihjb2RlYywgd3NvdXJjZSwgd3NpbmssIHBhdGgsIGNvbnRyb2wpOwogCQlpZiAocmV0ICE9IDApCiAJCQlnb3RvIGVycjsKQEAgLTEwNjgsNiArMTEwNyw3IEBACiAJCXN3aXRjaCh3LT5pZCkgewogCQljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgorCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CiAJCQlkYXBtX25ld19taXhlcihjb2RlYywgdyk7CiAJCQlicmVhazsKIAkJY2FzZSBzbmRfc29jX2RhcG1fbXV4OgpAQCAtMTM5Niw2ICsxNDM2LDc2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fcHV0X3ZhbHVlX2VudW1fZG91YmxlKTsKIAogLyoqCisgKiBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoIC0gSW5mbyBmb3IgYSBwaW4gc3dpdGNoCisgKgorICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCisgKiBAdWluZm86IGNvbnRyb2wgZWxlbWVudCBpbmZvcm1hdGlvbgorICoKKyAqIENhbGxiYWNrIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgYSBwaW4gc3dpdGNoIGNvbnRyb2wuCisgKi8KK2ludCBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoKTsKKworLyoqCisgKiBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2ggLSBHZXQgaW5mb3JtYXRpb24gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVjb250cm9sOiBWYWx1ZQorICovCitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljb25zdCBjaGFyICpwaW4gPSAoY29uc3QgY2hhciAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCBwaW4pOworCisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2gpOworCisvKioKKyAqIHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaCAtIFNldCBpbmZvcm1hdGlvbiBmb3IgYSBwaW4gc3dpdGNoCisgKgorICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCisgKiBAdWNvbnRyb2w6IFZhbHVlCisgKi8KK2ludCBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWNvbnN0IGNoYXIgKnBpbiA9IChjb25zdCBjaGFyICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQorCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgcGluKTsKKwllbHNlCisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgcGluKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKTsKKworLyoqCiAgKiBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2wgLSBjcmVhdGUgbmV3IGRhcG0gY29udHJvbAogICogQGNvZGVjOiBhdWRpbyBjb2RlYwogICogQHdpZGdldDogd2lkZ2V0IHRlbXBsYXRlCkBAIC0xNTI3LDggKzE2MzcsOCBAQAogaW50IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiwKIAkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkLT5zZXRfYmlhc19sZXZlbCkKQEAgLTE1NDksNyArMTY1OSw3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAxKTsKIH0KQEAgLTE1NjQsNyArMTY3NCw3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pCiB7CiAJcmV0dXJuIHNuZF9zb2NfZGFwbV9zZXRfcGluKGNvZGVjLCBwaW4sIDApOwogfQpAQCAtMTU4NCw3ICsxNjk0LDcgQEAKICAqIE5PVEU6IHNuZF9zb2NfZGFwbV9zeW5jKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIHRoaXMgZm9yIERBUE0gdG8KICAqIGRvIGFueSB3aWRnZXQgcG93ZXIgc3dpdGNoaW5nLgogICovCi1pbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAwKTsKIH0KQEAgLTE1OTksNyArMTcwOSw3IEBACiAgKgogICogUmV0dXJucyAxIGZvciBjb25uZWN0ZWQgb3RoZXJ3aXNlIDAuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCkBAIC0xNjIwLDcgKzE3MzAsNyBAQAogICovCiB2b2lkIHNuZF9zb2NfZGFwbV9mcmVlKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXNuZF9zb2NfZGFwbV9zeXNfcmVtb3ZlKHNvY2Rldi0+ZGV2KTsKIAlkYXBtX2ZyZWVfd2lkZ2V0cyhjb2RlYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWphY2suYyBiL3NvdW5kL3NvYy9zb2MtamFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzQ2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIHNvYy1qYWNrLmMgIC0tICBBTFNBIFNvQyBqYWNrIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyoqCisgKiBzbmRfc29jX2phY2tfbmV3IC0gQ3JlYXRlIGEgbmV3IGphY2sKKyAqIEBjYXJkOiAgQVNvQyBjYXJkCisgKiBAaWQ6ICAgIGFuIGlkZW50aWZ5aW5nIHN0cmluZyBmb3IgdGhpcyBqYWNrCisgKiBAdHlwZTogIGEgYml0bWFzayBvZiBlbnVtIHNuZF9qYWNrX3R5cGUgdmFsdWVzIHRoYXQgY2FuIGJlIGRldGVjdGVkIGJ5CisgKiAgICAgICAgIHRoaXMgamFjaworICogQGphY2s6ICBzdHJ1Y3R1cmUgdG8gdXNlIGZvciB0aGUgamFjaworICoKKyAqIENyZWF0ZXMgYSBuZXcgamFjayBvYmplY3QuCisgKgorICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogT24gc3VjY2VzcyBqYWNrIHdpbGwgYmUgaW5pdGlhbGlzZWQuCisgKi8KK2ludCBzbmRfc29jX2phY2tfbmV3KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgdHlwZSwKKwkJICAgICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrKQoreworCWphY2stPmNhcmQgPSBjYXJkOworCUlOSVRfTElTVF9IRUFEKCZqYWNrLT5waW5zKTsKKworCXJldHVybiBzbmRfamFja19uZXcoY2FyZC0+Y29kZWMtPmNhcmQsIGlkLCB0eXBlLCAmamFjay0+amFjayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfbmV3KTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfcmVwb3J0IC0gUmVwb3J0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3IgYSBqYWNrCisgKgorICogQGphY2s6ICAgdGhlIGphY2sKKyAqIEBzdGF0dXM6IGEgYml0bWFzayBvZiBlbnVtIHNuZF9qYWNrX3R5cGUgdmFsdWVzIHRoYXQgYXJlIGN1cnJlbnRseSBkZXRlY3RlZC4KKyAqIEBtYXNrOiAgIGEgYml0bWFzayBvZiBlbnVtIHNuZF9qYWNrX3R5cGUgdmFsdWVzIHRoYXQgYmVpbmcgcmVwb3J0ZWQuCisgKgorICogSWYgY29uZmlndXJlZCB1c2luZyBzbmRfc29jX2phY2tfYWRkX3BpbnMoKSB0aGVuIHRoZSBhc3NvY2lhdGVkCisgKiBEQVBNIHBpbnMgd2lsbCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGFzIGFwcHJvcHJpYXRlIGFuZCBEQVBNCisgKiBzeW5jaHJvbmlzZWQuCisgKgorICogTm90ZTogVGhpcyBmdW5jdGlvbiB1c2VzIG11dGV4ZXMgYW5kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBhCisgKiBjb250ZXh0IHdoaWNoIGNhbiBzbGVlcCAoc3VjaCBhcyBhIHdvcmtxdWV1ZSkuCisgKi8KK3ZvaWQgc25kX3NvY19qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgc3RhdHVzLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBqYWNrLT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGluOworCWludCBlbmFibGU7CisJaW50IG9sZHN0YXR1czsKKworCWlmICghamFjaykgeworCQlXQVJOX09OX09OQ0UoIWphY2spOworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCW9sZHN0YXR1cyA9IGphY2stPnN0YXR1czsKKworCWphY2stPnN0YXR1cyAmPSB+bWFzazsKKwlqYWNrLT5zdGF0dXMgfD0gc3RhdHVzOworCisJLyogVGhlIERBUE0gc3luYyBpcyBleHBlbnNpdmUgZW5vdWdoIHRvIGJlIHdvcnRoIHNraXBwaW5nICovCisJaWYgKGphY2stPnN0YXR1cyA9PSBvbGRzdGF0dXMpCisJCWdvdG8gb3V0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZqYWNrLT5waW5zLCBsaXN0KSB7CisJCWVuYWJsZSA9IHBpbi0+bWFzayAmIHN0YXR1czsKKworCQlpZiAocGluLT5pbnZlcnQpCisJCQllbmFibGUgPSAhZW5hYmxlOworCisJCWlmIChlbmFibGUpCisJCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgcGluLT5waW4pOworCQllbHNlCisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsIHBpbi0+cGluKTsKKwl9CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlzbmRfamFja19yZXBvcnQoamFjay0+amFjaywgc3RhdHVzKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19yZXBvcnQpOworCisvKioKKyAqIHNuZF9zb2NfamFja19hZGRfcGlucyAtIEFzc29jaWF0ZSBEQVBNIHBpbnMgd2l0aCBhbiBBU29DIGphY2sKKyAqCisgKiBAamFjazogIEFTb0MgamFjaworICogQGNvdW50OiBOdW1iZXIgb2YgcGlucworICogQHBpbnM6ICBBcnJheSBvZiBwaW5zCisgKgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQgdGhlIERBUE0gcGlucyBzcGVjaWZpZWQgaW4gdGhlCisgKiBwaW5zIGFycmF5IHdpbGwgaGF2ZSB0aGVpciBzdGF0dXMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjdXJyZW50CisgKiBzdGF0ZSBvZiB0aGUgamFjayB3aGVuZXZlciB0aGUgamFjayBzdGF0dXMgaXMgdXBkYXRlZC4KKyAqLworaW50IHNuZF9zb2NfamFja19hZGRfcGlucyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2tfcGluICpwaW5zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKCFwaW5zW2ldLnBpbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJObyBuYW1lIGZvciBwaW4gJWRcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKCFwaW5zW2ldLm1hc2spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTm8gbWFzayBmb3IgcGluICVkICglcylcbiIsIGksCisJCQkgICAgICAgcGluc1tpXS5waW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlJTklUX0xJU1RfSEVBRCgmcGluc1tpXS5saXN0KTsKKwkJbGlzdF9hZGQoJihwaW5zW2ldLmxpc3QpLCAmamFjay0+cGlucyk7CisJfQorCisJLyogVXBkYXRlIHRvIHJlZmxlY3QgdGhlIGxhc3QgcmVwb3J0ZWQgc3RhdHVzOyBjYW5uZWQgamFjaworCSAqIGltcGxlbWVudGF0aW9ucyBhcmUgbGlrZWx5IHRvIHNldCB0aGVpciBzdGF0ZSBiZWZvcmUgdGhlCisJICogY2FyZCBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gYXNzb2NpYXRlIHBpbnMuCisJICovCisJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrLCAwLCAwKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX2FkZF9waW5zKTsKKworI2lmZGVmIENPTkZJR19HUElPTElCCisvKiBncGlvIGRldGVjdCAqLworc3RhdGljIHZvaWQgc25kX3NvY19qYWNrX2dwaW9fZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3BpbykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrID0gZ3Bpby0+amFjazsKKwlpbnQgZW5hYmxlOworCWludCByZXBvcnQ7CisKKwlpZiAoZ3Bpby0+ZGVib3VuY2VfdGltZSA+IDApCisJCW1kZWxheShncGlvLT5kZWJvdW5jZV90aW1lKTsKKworCWVuYWJsZSA9IGdwaW9fZ2V0X3ZhbHVlKGdwaW8tPmdwaW8pOworCWlmIChncGlvLT5pbnZlcnQpCisJCWVuYWJsZSA9ICFlbmFibGU7CisKKwlpZiAoZW5hYmxlKQorCQlyZXBvcnQgPSBncGlvLT5yZXBvcnQ7CisJZWxzZQorCQlyZXBvcnQgPSAwOworCisJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrLCByZXBvcnQsIGdwaW8tPnJlcG9ydCk7Cit9CisKKy8qIGlycSBoYW5kbGVyIGZvciBncGlvIHBpbiAqLworc3RhdGljIGlycXJldHVybl90IGdwaW9faGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3BpbyA9IGRhdGE7CisKKwlzY2hlZHVsZV93b3JrKCZncGlvLT53b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogZ3BpbyB3b3JrICovCitzdGF0aWMgdm9pZCBncGlvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3BpbzsKKworCWdwaW8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfamFja19ncGlvLCB3b3JrKTsKKwlzbmRfc29jX2phY2tfZ3Bpb19kZXRlY3QoZ3Bpbyk7Cit9CisKKy8qKgorICogc25kX3NvY19qYWNrX2FkZF9ncGlvcyAtIEFzc29jaWF0ZSBHUElPIHBpbnMgd2l0aCBhbiBBU29DIGphY2sKKyAqCisgKiBAamFjazogIEFTb0MgamFjaworICogQGNvdW50OiBudW1iZXIgb2YgcGlucworICogQGdwaW9zOiBhcnJheSBvZiBncGlvIHBpbnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVxdWVzdCBncGlvLCBzZXQgZGF0YSBkaXJlY3Rpb24gYW5kIHJlcXVlc3QgaXJxCisgKiBmb3IgZWFjaCBncGlvIGluIHRoZSBhcnJheS4KKyAqLworaW50IHNuZF9zb2NfamFja19hZGRfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcykKK3sKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW9zW2ldLmdwaW8pKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgZ3BpbyAlZFxuIiwKKwkJCQlncGlvc1tpXS5ncGlvKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHVuZG87CisJCX0KKwkJaWYgKCFncGlvc1tpXS5uYW1lKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIG5hbWUgZm9yIGdwaW8gJWRcbiIsCisJCQkJZ3Bpb3NbaV0uZ3Bpbyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bmRvOworCQl9CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9zW2ldLmdwaW8sIGdwaW9zW2ldLm5hbWUpOworCQlpZiAocmV0KQorCQkJZ290byB1bmRvOworCisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9zW2ldLmdwaW8pOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksCisJCQkJZ3Bpb19oYW5kbGVyLAorCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQlqYWNrLT5jYXJkLT5kZXYtPmRyaXZlci0+bmFtZSwKKwkJCQkmZ3Bpb3NbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJSU5JVF9XT1JLKCZncGlvc1tpXS53b3JrLCBncGlvX3dvcmspOworCQlncGlvc1tpXS5qYWNrID0gamFjazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWdwaW9fZnJlZShncGlvc1tpXS5ncGlvKTsKK3VuZG86CisJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoamFjaywgaSwgZ3Bpb3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19hZGRfZ3Bpb3MpOworCisvKioKKyAqIHNuZF9zb2NfamFja19mcmVlX2dwaW9zIC0gUmVsZWFzZSBHUElPIHBpbnMnIHJlc291cmNlcyBvZiBhbiBBU29DIGphY2sKKyAqCisgKiBAamFjazogIEFTb0MgamFjaworICogQGNvdW50OiBudW1iZXIgb2YgcGlucworICogQGdwaW9zOiBhcnJheSBvZiBncGlvIHBpbnMKKyAqCisgKiBSZWxlYXNlIGdwaW8gYW5kIGlycSByZXNvdXJjZXMgZm9yIGdwaW8gcGlucyBhc3NvY2lhdGVkIHdpdGggYW4gQVNvQyBqYWNrLgorICovCit2b2lkIHNuZF9zb2NfamFja19mcmVlX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlmcmVlX2lycShncGlvX3RvX2lycShncGlvc1tpXS5ncGlvKSwgJmdwaW9zW2ldKTsKKwkJZ3Bpb19mcmVlKGdwaW9zW2ldLmdwaW8pOworCQlncGlvc1tpXS5qYWNrID0gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfZnJlZV9ncGlvcyk7CisjZW5kaWYJLyogQ09ORklHX0dQSU9MSUIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NwYXJjL2FtZDc5MzAuYyBiL3NvdW5kL3NwYXJjL2FtZDc5MzAuYwppbmRleCBmODc5MzNlLi41NzRhZjU2IDEwMDY0NAotLS0gYS9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKKysrIGIvc291bmQvc3BhcmMvYW1kNzkzMC5jCkBAIC05NTQsNyArOTU0LDggQEAKIAlhbWQtPnJlZ3MgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsCiAJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzBdKSwgImFtZDc5MzAiKTsKIAlpZiAoIWFtZC0+cmVncykgewotCQlzbmRfcHJpbnRrKCJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gbWFwIGNoaXAgcmVnaXN0ZXJzLlxuIiwgZGV2KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgImFtZDc5MzAtJWQ6IFVuYWJsZSB0byBtYXAgY2hpcCByZWdpc3RlcnMuXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTk2Miw3ICs5NjMsNyBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX2FtZDc5MzBfaW50ZXJydXB0LAogCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAiYW1kNzkzMCIsIGFtZCkpIHsKLQkJc25kX3ByaW50aygiYW1kNzkzMC0lZDogVW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsCiAJCQkgICBkZXYsIGlycSk7CiAJCXNuZF9hbWQ3OTMwX2ZyZWUoYW1kKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEwMTgsOSArMTAxOSwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl9udW1dLCBpZFtkZXZfbnVtXSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZfbnVtXSwgaWRbZGV2X251bV0sIFRISVNfTU9EVUxFLCAwLAorCQkJICAgICAgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFNRDc5MzAiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIEFNRDc5MzAiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jIGIvc291bmQvc3BhcmMvY3M0MjMxLmMKaW5kZXggNDFjMzg3NS4uN2Q5M2ZhNyAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvY3M0MjMxLmMKKysrIGIvc291bmQvc3BhcmMvY3M0MjMxLmMKQEAgLTE1NjMsNiArMTU2Myw3IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY3M0MjMxICpjaGlwOworCWludCBlcnI7CiAKIAkqcmNhcmQgPSBOVUxMOwogCkBAIC0xNTc0LDEwICsxNTc1LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY3M0MjMxKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY3M0MjMxKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkNTNDIzMSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTdW4gQ1M0MjMxIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9kYnJpLmMgYi9zb3VuZC9zcGFyYy9kYnJpLmMKaW5kZXggMjNlZDZmMC4uYWY5NWZmMSAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvZGJyaS5jCisrKyBiL3NvdW5kL3NwYXJjL2RicmkuYwpAQCAtMjYxMiwxMCArMjYxMiwxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2RicmkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9kYnJpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkRCUkkiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIERCUkkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NwaS9hdDczYzIxMy5jIGIvc291bmQvc3BpL2F0NzNjMjEzLmMKaW5kZXggMDk4MDJlOC4uNGM3YjA1MSAxMDA2NDQKLS0tIGEvc291bmQvc3BpL2F0NzNjMjEzLmMKKysrIGIvc291bmQvc3BpL2F0NzNjMjEzLmMKQEAgLTk2NSwxMiArOTY1LDExIEBACiAJCXJldHVybiBQVFJfRVJSKGJvYXJkLT5kYWNfY2xrKTsKIAl9CiAKLQlyZXR2YWwgPSAtRU5PTUVNOwotCiAJLyogQWxsb2NhdGUgImNhcmQiIHVzaW5nIHNvbWUgdW51c2VkIGlkZW50aWZpZXJzLiAqLwogCXNucHJpbnRmKGlkLCBzaXplb2YgaWQsICJhdDczYzIxM18lZCIsIGJvYXJkLT5zc2NfaWQpOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoLTEsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfYXQ3M2MyMTMpKTsKLQlpZiAoIWNhcmQpCisJcmV0dmFsID0gc25kX2NhcmRfY3JlYXRlKC0xLCBpZCwgVEhJU19NT0RVTEUsCisJCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2F0NzNjMjEzKSwgJmNhcmQpOworCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dDsKIAogCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9od2RlcC5jCmluZGV4IDBhNTM5MTQuLmZmMGIyYTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9od2RlcC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9od2RlcC5jCkBAIC0yNCwyNSArMjQsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiZW11eF92b2ljZS5oIgogCi0vKgotICogb3BlbiB0aGUgaHdkZXAgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQKLXNuZF9lbXV4X2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBjbG9zZSB0aGUgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQKLXNuZF9lbXV4X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiAKICNkZWZpbmUgVE1QX0NMSUVOVF9JRAkweDEwMDEKIApAQCAtMTQ2LDggKzEyNyw2IEBACiAJZW11LT5od2RlcCA9IGh3OwogCXN0cmNweShody0+bmFtZSwgU05EUlZfRU1VWF9IV0RFUF9OQU1FKTsKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9FTVVYX1dBVkVUQUJMRTsKLQlody0+b3BzLm9wZW4gPSBzbmRfZW11eF9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHNuZF9lbXV4X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5pb2N0bCA9IHNuZF9lbXV4X2h3ZGVwX2lvY3RsOwogCWh3LT5leGNsdXNpdmUgPSAxOwogCWh3LT5wcml2YXRlX2RhdGEgPSBlbXU7CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKaW5kZXggNWM0N2I2Yy4uODdlNDIyMCAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJcCA9IHNuZF9lbXV4X2NyZWF0ZV9wb3J0KGVtdSwgdG1wbmFtZSwgMzIsCiAJCQkJIDEsICZjYWxsYmFjayk7CiAJaWYgKHAgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKIAkJc25kX2VtdXhfZGVjX2NvdW50KGVtdSk7CiAJCW11dGV4X3VubG9jaygmZW11LT5yZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCmluZGV4IDMzNWFhMmMuLmNhNWY3ZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKQEAgLTc0LDE1ICs3NCwxNSBAQAogCWVtdS0+Y2xpZW50ID0gc25kX3NlcV9jcmVhdGVfa2VybmVsX2NsaWVudChjYXJkLCBpbmRleCwKIAkJCQkJCSAgICIlcyBXYXZlVGFibGUiLCBlbXUtPm5hbWUpOwogCWlmIChlbXUtPmNsaWVudCA8IDApIHsKLQkJc25kX3ByaW50aygiY2FuJ3QgY3JlYXRlIGNsaWVudFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGNyZWF0ZSBjbGllbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoZW11LT5udW1fcG9ydHMgPCAwKSB7Ci0JCXNuZF9wcmludGsoInNlcXBvcnRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm9cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAic2VxcG9ydHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1xuIik7CiAJCWVtdS0+bnVtX3BvcnRzID0gMTsKIAl9IGVsc2UgaWYgKGVtdS0+bnVtX3BvcnRzID49IFNORFJWX0VNVVhfTUFYX1BPUlRTKSB7Ci0JCXNuZF9wcmludGsoInRvbyBtYW55IHBvcnRzLiIKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInRvbyBtYW55IHBvcnRzLiIKIAkJCSAgICJsaW1pdGVkIG1heC4gcG9ydHMgJWRcbiIsIFNORFJWX0VNVVhfTUFYX1BPUlRTKTsKIAkJZW11LT5udW1fcG9ydHMgPSBTTkRSVl9FTVVYX01BWF9QT1JUUzsKIAl9CkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJcCA9IHNuZF9lbXV4X2NyZWF0ZV9wb3J0KGVtdSwgdG1wbmFtZSwgTUlESV9DSEFOTkVMUywKIAkJCQkJIDAsICZwaW5mbyk7CiAJCWlmIChwID09IE5VTEwpIHsKLQkJCXNuZF9wcmludGsoImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKQEAgLTE0NywxMiArMTQ3LDEyIEBACiAKIAkvKiBBbGxvY2F0ZSBzdHJ1Y3R1cmVzIGZvciB0aGlzIGNoYW5uZWwgKi8KIAlpZiAoKHAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCXNuZF9wcmludGsoIm5vIG1lbW9yeVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIG1lbW9yeVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAlwLT5jaHNldC5jaGFubmVscyA9IGtjYWxsb2MobWF4X2NoYW5uZWxzLCBzaXplb2Yoc3RydWN0IHNuZF9taWRpX2NoYW5uZWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAocC0+Y2hzZXQuY2hhbm5lbHMgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJubyBtZW1vcnlcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBtZW1vcnlcbiIpOwogCQlrZnJlZShwKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMzc2LDEyICszNzYsMTIgQEAKIAkJCWdvdG8gX19lcnJvcjsKIAkJfQogCQllbXUtPnZtaWRpW2ldID0gcm1pZGk7Ci0JCS8vc25kX3ByaW50aygidmlybWlkaSAlZCBva1xuIiwgaSk7CisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAidmlybWlkaSAlZCBva1xuIiwgaSk7ICovCiAJfQogCXJldHVybiAwOwogCiBfX2Vycm9yOgotCS8vc25kX3ByaW50aygiZXJyb3IgaW5pdC4uXG4iKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVycm9yIGluaXQuLlxuIik7ICovCiAJc25kX2VtdXhfZGVsZXRlX3Zpcm1pZGkoZW11KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3N5bnRoLmMKaW5kZXggMmNjNmY2Zi4uM2U5MjFiMyAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X3N5bnRoLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3N5bnRoLmMKQEAgLTk1Niw3ICs5NTYsOCBAQAogCWlmIChlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPT0gU05EUlZfRU1VWF9TVF9PRkYpCiAJCWVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSA9IFNORFJWX0VNVVhfU1RfTE9DS0VEOwogCWVsc2UKLQkJc25kX3ByaW50aygiaW52YWxpZCB2b2ljZSBmb3IgbG9jayAlZCAoc3RhdGUgPSAleClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAiaW52YWxpZCB2b2ljZSBmb3IgbG9jayAlZCAoc3RhdGUgPSAleClcbiIsCiAJCQkgICB2b2ljZSwgZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbXUtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTk3Myw3ICs5NzQsOCBAQAogCWlmIChlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPT0gU05EUlZfRU1VWF9TVF9MT0NLRUQpCiAJCWVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSA9IFNORFJWX0VNVVhfU1RfT0ZGOwogCWVsc2UKLQkJc25kX3ByaW50aygiaW52YWxpZCB2b2ljZSBmb3IgdW5sb2NrICVkIChzdGF0ZSA9ICV4KVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJpbnZhbGlkIHZvaWNlIGZvciB1bmxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAogCQkJICAgdm9pY2UsIGVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW11LT52b2ljZV9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jIGIvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYwppbmRleCAzNmQ1M2JkLi42M2M4ZjQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWludCAgcmM7CiAKIAlpZiAoY291bnQgPCAobG9uZylzaXplb2YocGF0Y2gpKSB7Ci0JCXNuZF9wcmludGsoInBhdGNoIHJlY29yZCB0b28gc21hbGwgJWxkXG4iLCBjb3VudCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBhdGNoIHJlY29yZCB0b28gc21hbGwgJWxkXG4iLCBjb3VudCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoJnBhdGNoLCBkYXRhLCBzaXplb2YocGF0Y2gpKSkKQEAgLTE0MywxNSArMTQzLDE2IEBACiAJZGF0YSArPSBzaXplb2YocGF0Y2gpOwogCiAJaWYgKHBhdGNoLmtleSAhPSBTTkRSVl9PU1NfU09VTkRGT05UX1BBVENIKSB7Ci0JCXNuZF9wcmludGsoIidUaGUgd3Jvbmcga2luZCBvZiBwYXRjaCcgJXhcbiIsIHBhdGNoLmtleSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRoZSB3cm9uZyBraW5kIG9mIHBhdGNoICV4XG4iLCBwYXRjaC5rZXkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvdW50IDwgcGF0Y2gubGVuKSB7Ci0JCXNuZF9wcmludGsoIlBhdGNoIHRvbyBzaG9ydCAlbGQsIG5lZWQgJWRcbiIsIGNvdW50LCBwYXRjaC5sZW4pOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJQYXRjaCB0b28gc2hvcnQgJWxkLCBuZWVkICVkXG4iLAorCQkJICAgY291bnQsIHBhdGNoLmxlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAocGF0Y2gubGVuIDwgMCkgewotCQlzbmRfcHJpbnRrKCJwb29yIGxlbmd0aCAlZFxuIiwgcGF0Y2gubGVuKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicG9vciBsZW5ndGggJWRcbiIsIHBhdGNoLmxlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTk1LDcgKzE5Niw4IEBACiAJY2FzZSBTTkRSVl9TRk5UX1JFTU9WRV9JTkZPOgogCQkvKiBwYXRjaCBtdXN0IGJlIG9wZW5lZCAqLwogCQlpZiAoIXNmbGlzdC0+Y3VycnNmKSB7Ci0JCQlzbmRfcHJpbnRrKCJzb3VuZGZvbnQ6IHJlbW92ZV9pbmZvOiBwYXRjaCBub3Qgb3BlbmVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInNvdW5kZm9udDogcmVtb3ZlX2luZm86ICIKKwkJCQkgICAicGF0Y2ggbm90IG9wZW5lZFxuIik7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCX0gZWxzZSB7CiAJCQlpbnQgYmFuaywgaW5zdHI7CkBAIC01MzEsNyArNTMzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY291bnQgPCAobG9uZylzaXplb2YoaGRyKSkgewotCQlwcmludGsoIlNvdW5kZm9udCBlcnJvcjogaW52YWxpZCBwYXRjaCB6b25lIGxlbmd0aFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU291bmRmb250IGVycm9yOiBpbnZhbGlkIHBhdGNoIHpvbmUgbGVuZ3RoXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciopJmhkciwgZGF0YSwgc2l6ZW9mKGhkcikpKQpAQCAtNTQxLDEyICs1NDMsMTQgQEAKIAljb3VudCAtPSBzaXplb2YoaGRyKTsKIAogCWlmIChoZHIubnZvaWNlcyA8PSAwIHx8IGhkci5udm9pY2VzID49IDEwMCkgewotCQlwcmludGsoIlNvdW5kZm9udCBlcnJvcjogSWxsZWdhbCB2b2ljZSBudW1iZXIgJWRcbiIsIGhkci5udm9pY2VzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTb3VuZGZvbnQgZXJyb3I6IElsbGVnYWwgdm9pY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgaGRyLm52b2ljZXMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY291bnQgPCAobG9uZylzaXplb2Yoc3RydWN0IHNvdW5kZm9udF92b2ljZV9pbmZvKSAqIGhkci5udm9pY2VzKSB7Ci0JCXByaW50aygiU291bmRmb250IEVycm9yOiBwYXRjaCBsZW5ndGgoJWxkKSBpcyBzbWFsbGVyIHRoYW4gbnZvaWNlcyglZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiU291bmRmb250IEVycm9yOiAiCisJCSAgICAgICAicGF0Y2ggbGVuZ3RoKCVsZCkgaXMgc21hbGxlciB0aGFuIG52b2ljZXMoJWQpXG4iLAogCQkgICAgICAgY291bnQsIGhkci5udm9pY2VzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtOTUyLDcgKzk1Niw3IEBACiAJaW50IHJjOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHBhdGNoKSkgewotCQlzbmRfcHJpbnRrKCJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXRjaCwgZGF0YSwgc2l6ZW9mKHBhdGNoKSkpCkBAIC0xMDM0LDcgKzEwMzgsOCBAQAogCS8qIHBhbm5pbmcgcG9zaXRpb247IC0xMjggLSAxMjcgPT4gMC0xMjcgKi8KIAl6b25lLT52LnBhbiA9IChwYXRjaC5wYW5uaW5nICsgMTI4KSAvIDI7CiAjaWYgMAotCXNuZF9wcmludGsoImd1czogYmFzZWZycT0lZCAob2ZzPSVkKSByb290PSVkLHR1bmU9JWQsIHJhbmdlOiVkLSVkXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAiZ3VzOiBiYXNlZnJxPSVkIChvZnM9JWQpIHJvb3Q9JWQsdHVuZT0lZCwgcmFuZ2U6JWQtJWRcbiIsCiAJCSAgIChpbnQpcGF0Y2guYmFzZV9mcmVxLCB6b25lLT52LnJhdGVfb2Zmc2V0LAogCQkgICB6b25lLT52LnJvb3QsIHpvbmUtPnYudHVuZSwgem9uZS0+di5sb3csIHpvbmUtPnYuaGlnaCk7CiAjZW5kaWYKQEAgLTEwNjgsNyArMTA3Myw4IEBACiAJCXpvbmUtPnYucGFybS52b2xyZWxlYXNlID0gMHg4MDAwIHwgc25kX3NmX2NhbGNfcGFybV9kZWNheShyZWxlYXNlKTsKIAkJem9uZS0+di5hdHRlbnVhdGlvbiA9IGNhbGNfZ3VzX2F0dGVudWF0aW9uKHBhdGNoLmVudl9vZmZzZXRbMF0pOwogI2lmIDAKLQkJc25kX3ByaW50aygiZ3VzOiBhdGtobGQ9JXgsIGRjeXN1cz0leCwgdm9scmVsPSV4LCBhdHQ9JWRcbiIsCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkJICAgImd1czogYXRraGxkPSV4LCBkY3lzdXM9JXgsIHZvbHJlbD0leCwgYXR0PSVkXG4iLAogCQkJICAgem9uZS0+di5wYXJtLnZvbGF0a2hsZCwKIAkJCSAgIHpvbmUtPnYucGFybS52b2xkY3lzdXMsCiAJCQkgICB6b25lLT52LnBhcm0udm9scmVsZWFzZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9LY29uZmlnIGIvc291bmQvdXNiL0tjb25maWcKaW5kZXggNGYwZWFjOS4uNTIzYWVjMSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL0tjb25maWcKKysrIGIvc291bmQvdXNiL0tjb25maWcKQEAgLTQ4LDcgKzQ4LDEwIEBACiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEtvcmUgQ29udHJvbGxlcgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBLb3JlIENvbnRyb2xsZXIgMgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBBdWRpbyBLb250cm9sIDEKKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gNCBESgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBBdWRpbyA4IERKCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEd1aXRhciBSaWcgU2Vzc2lvbiBJL08KKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgR3VpdGFyIFJpZyBtb2JpbGUKIAogCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgICB3aWxsIGJlIGNhbGxlZCBzbmQtdXNiLWNhaWFxLgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYwppbmRleCBiM2E2MDMzLi4wOGQ1MWUwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYworKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYwpAQCAtMTE0LDYgKzExNCw3IEBACiAJZGV2LT5vdXRwdXRfcGFuaWMgPSAwOwogCWRldi0+Zmlyc3RfcGFja2V0ID0gMTsKIAlkZXYtPnN0cmVhbWluZyA9IDE7CisJZGV2LT53YXJuZWQgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IE5fVVJCUzsgaSsrKSB7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+ZGF0YV91cmJzX2luW2ldLCBHRlBfQVRPTUlDKTsKQEAgLTM3Niw2ICszNzcsOSBAQAogCiAJCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgZGV2LT5uX3N0cmVhbXM7IHN0cmVhbSsrLCBpKyspIHsKIAkJCXN1YiA9IGRldi0+c3ViX2NhcHR1cmVbc3RyZWFtXTsKKwkJCWlmIChkZXYtPmlucHV0X3BhbmljKQorCQkJCXVzYl9idWZbaV0gPSAwOworCiAJCQlpZiAoc3ViKSB7CiAJCQkJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzdWItPnJ1bnRpbWU7CiAJCQkJY2hhciAqYXVkaW9fYnVmID0gcnQtPmRtYV9hcmVhOwpAQCAtMzk3LDYgKzQwMSw5IEBACiAJaWYgKCFkZXYtPnN0cmVhbWluZykKIAkJcmV0dXJuOwogCisJaWYgKGlzby0+YWN0dWFsX2xlbmd0aCA8IGRldi0+YnBwKQorCQlyZXR1cm47CisKIAlzd2l0Y2ggKGRldi0+c3BlYy5kYXRhX2FsaWdubWVudCkgewogCWNhc2UgMDoKIAkJcmVhZF9pbl91cmJfbW9kZTAoZGV2LCB1cmIsIGlzbyk7CkBAIC00MDYsMTAgKzQxMywxMSBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykgeworCWlmICgoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykgJiYgIWRldi0+d2FybmVkKSB7CiAJCWRlYnVnKCJzdHJlYW1pbmcgZXJyb3IgZGV0ZWN0ZWQgJXMgJXNcbiIsIAogCQkJCWRldi0+aW5wdXRfcGFuaWMgPyAiKGlucHV0KSIgOiAiIiwKIAkJCQlkZXYtPm91dHB1dF9wYW5pYyA/ICIob3V0cHV0KSIgOiAiIik7CisJCWRldi0+d2FybmVkID0gMTsKIAl9CiB9CiAKQEAgLTYzOCw5ICs2NDYsMTAgQEAKIAljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FLMSk6CiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9SSUdLT05UUk9MMyk6CiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9TRVNTSU9OSU8pOgotCQlkZXYtPnNhbXBsZXJhdGVzIHw9IFNORFJWX1BDTV9SQVRFXzg4MjAwOworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFKToKIAkJZGV2LT5zYW1wbGVyYXRlcyB8PSBTTkRSVl9QQ01fUkFURV8xOTIwMDA7Ci0JCWJyZWFrOworCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKToKIAljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPOERKKToKIAkJZGV2LT5zYW1wbGVyYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84ODIwMDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYwppbmRleCBjY2Q3NjNkLi5lOTJjMmJiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1jb250cm9sLmMKQEAgLTM5LDEyICszOSwxMiBAQAogCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBjYWlhcWRldihjaGlwLT5jYXJkKTsKIAlpbnQgcG9zID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJaW50IGlzX2ludHZhbCA9IHBvcyAmIENOVF9JTlRWQUw7CisJdW5zaWduZWQgaW50IGlkID0gZGV2LT5jaGlwLnVzYl9pZDsKIAogCXVpbmZvLT5jb3VudCA9IDE7CiAJcG9zICY9IH5DTlRfSU5UVkFMOwogCi0JaWYgKGRldi0+Y2hpcC51c2JfaWQgPT0KLQkJVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU84REopCisJaWYgKGlkID09IFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPOERKKQogCQkmJiAocG9zID09IDApKSB7CiAJCS8qIGN1cnJlbnQgaW5wdXQgbW9kZSBvZiBBOERKICovCiAJCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwpAQCAtNTMsNiArNTMsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKGlkID09IFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKQorCQkmJiAocG9zID09IDApKSB7CisJCS8qIGN1cnJlbnQgaW5wdXQgbW9kZSBvZiBBNERKICovCisJCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoaXNfaW50dmFsKSB7CiAJCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwogCQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwpAQCAtNzMsNiArODIsMTQgQEAKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gY2FpYXFkZXYoY2hpcC0+Y2FyZCk7CiAJaW50IHBvcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCisJaWYgKGRldi0+Y2hpcC51c2JfaWQgPT0KKwkJVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopKSB7CisJCS8qIEE0REogaGFzIG9ubHkgb25lIGNvbnRyb2wgKi8KKwkJLyogZG8gbm90IGV4cG9zZSBoYXJkd2FyZSBpbnB1dCBtb2RlIDAgKi8KKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBkZXYtPmNvbnRyb2xfc3RhdGVbMF0gLSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAocG9zICYgQ05UX0lOVFZBTCkKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0KIAkJCT0gZGV2LT5jb250cm9sX3N0YXRlW3BvcyAmIH5DTlRfSU5UVkFMXTsKQEAgLTkwLDEwICsxMDcsMjAgQEAKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gY2FpYXFkZXYoY2hpcC0+Y2FyZCk7CiAJaW50IHBvcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCisJaWYgKGRldi0+Y2hpcC51c2JfaWQgPT0KKwkJVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopKSB7CisJCS8qIEE0REogaGFzIG9ubHkgb25lIGNvbnRyb2wgKi8KKwkJLyogZG8gbm90IGV4cG9zZSBoYXJkd2FyZSBpbnB1dCBtb2RlIDAgKi8KKwkJZGV2LT5jb250cm9sX3N0YXRlWzBdID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gKyAxOworCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfV1JJVEVfSU8sCisJCQkJZGV2LT5jb250cm9sX3N0YXRlLCBzaXplb2YoZGV2LT5jb250cm9sX3N0YXRlKSk7CisJCXJldHVybiAxOworCX0KKwogCWlmIChwb3MgJiBDTlRfSU5UVkFMKSB7CiAJCWRldi0+Y29udHJvbF9zdGF0ZVtwb3MgJiB+Q05UX0lOVFZBTF0KIAkJCT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0JCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9ESU1NX0xFRFMsCisJCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9XUklURV9JTywKIAkJCQlkZXYtPmNvbnRyb2xfc3RhdGUsIHNpemVvZihkZXYtPmNvbnRyb2xfc3RhdGUpKTsKIAl9IGVsc2UgewogCQlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCkBAIC0yNDMsMTAgKzI3MCwxMyBAQAogCXsgIkdORCBsaWZ0IGZvciBUQyBWaW55bCBtb2RlIiwgCTI0ICsgMCAJCX0sCiAJeyAiR05EIGxpZnQgZm9yIFRDIENEL0xpbmUgbW9kZSIsIAkyNCArIDEgCQl9LAogCXsgIkdORCBsaWZ0IGZvciBwaG9ubyBtb2RlIiwgCQkyNCArIDIgCQl9LAotCXsgIkdORCBsaWZ0IGZvciBUQyBWaW55bCBtb2RlIiwgCTI0ICsgMyAJCX0sCiAJeyAiU29mdHdhcmUgbG9jayIsIAkJCTQwIAkJfQogfTsKIAorc3RhdGljIHN0cnVjdCBjYWlhcV9jb250cm9sbGVyIGE0ZGpfY29udHJvbGxlcltdID0geworCXsgIkN1cnJlbnQgaW5wdXQgbW9kZSIsCTAgfCBDTlRfSU5UVkFMIAl9Cit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGRfY29udHJvbHMoc3RydWN0IGNhaWFxX2NvbnRyb2xsZXIgKmMsIGludCBudW0sCiAJCQkJICBzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQogewpAQCAtMjk1LDYgKzMyNSwxMCBAQAogCQlyZXQgPSBhZGRfY29udHJvbHMoYThkal9jb250cm9sbGVyLAogCQkJQVJSQVlfU0laRShhOGRqX2NvbnRyb2xsZXIpLCBkZXYpOwogCQlicmVhazsKKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKToKKwkJcmV0ID0gYWRkX2NvbnRyb2xzKGE0ZGpfY29udHJvbGxlciwKKwkJCUFSUkFZX1NJWkUoYTRkal9jb250cm9sbGVyKSwgZGV2KTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYwppbmRleCA0MWMzNmIwLi5jZjU3M2E5IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCkBAIC00MiwxNSArNDIsMTcgQEAKICNlbmRpZgogCiBNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjEwIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMTMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDJ9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDN9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgS29yZSBDb250cm9sbGVyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEtvcmUgQ29udHJvbGxlciAyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEF1ZGlvIEtvbnRyb2wgMX0sIgorCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyA0IERKfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEF1ZGlvIDggREp9LCIKLQkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgU2Vzc2lvbiBJL099fSIpOworCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBTZXNzaW9uIEkvT30sIgorCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBHdWl0YXJSaWcgbW9iaWxlfSIpOwogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOyAvKiBJbmRleCAwLW1heCAqLwogc3RhdGljIGNoYXIqIGlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOyAvKiBJZCBmb3IgdGhpcyBjYXJkICovCkBAIC0xMTYsNiArMTE4LDE2IEBACiAJCS5pZFZlbmRvciA9ICAgICBVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLAogCQkuaWRQcm9kdWN0ID0gICAgVVNCX1BJRF9TRVNTSU9OSU8KIAl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzID0gIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKKwkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncyA9ICBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCisJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX0FVRElPNERKCisJfSwKIAl7IC8qIHRlcm1pbmF0b3IgKi8gfQogfTsKIApAQCAtMjM5LDYgKzI1MSw4IEBACiAJCQogCWlmIChkZXYtPmF1ZGlvX3Bhcm1fYW5zd2VyICE9IDEpIAogCQlkZWJ1ZygidW5hYmxlIHRvIHNldCB0aGUgZGV2aWNlJ3MgYXVkaW8gcGFyYW1zXG4iKTsKKwllbHNlCisJCWRldi0+YnBwID0gYnBwOwogCiAJcmV0dXJuIGRldi0+YXVkaW9fcGFybV9hbnN3ZXIgPT0gMSA/IDAgOiAtRUlOVkFMOwogfQpAQCAtMzAwLDYgKzMxNCwxMiBAQAogCQl9CiAKIAkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CisJCS8qIEF1ZGlvIDQgREogLSBkZWZhdWx0IGlucHV0IG1vZGUgdG8gcGhvbm8gKi8KKwkJZGV2LT5jb250cm9sX3N0YXRlWzBdID0gMjsKKwkJc25kX3VzYl9jYWlhcV9zZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX1dSSVRFX0lPLAorCQkJZGV2LT5jb250cm9sX3N0YXRlLCAxKTsKKwkJYnJlYWs7CiAJfQogCQogCWlmIChkZXYtPnNwZWMubnVtX2FuYWxvZ19hdWRpb19vdXQgKwpAQCAtMzM2LDkgKzM1NiwxMCBAQAogCQlsb2coIlVuYWJsZSB0byBzZXQgdXAgY29udHJvbCBzeXN0ZW0gKHJldD0lZClcbiIsIHJldCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQqIGNyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlKiB1c2JfZGV2KQorc3RhdGljIGludCBjcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSogdXNiX2Rldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50IGRldm51bTsKKwlpbnQgZXJyOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2OwogCkBAIC0zNDcsMTIgKzM2OCwxMiBAQAogCQkJYnJlYWs7CiAKIAlpZiAoZGV2bnVtID49IFNORFJWX0NBUkRTKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLCAKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2KSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnVtXSwgaWRbZGV2bnVtXSwgVEhJU19NT0RVTEUsIAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZGV2ID0gY2FpYXFkZXYoY2FyZCk7CiAJZGV2LT5jaGlwLmRldiA9IHVzYl9kZXY7CkBAIC0zNjIsNyArMzgzLDggQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zcGlubG9jayk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmdXNiX2Rldi0+ZGV2KTsKIAotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfY2FyZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQpAQCAtNDQxLDEwICs0NjMsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJCi0JY2FyZCA9IGNyZWF0ZV9jYXJkKGRldmljZSk7CisJcmV0ID0gY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CiAJCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAkJCQogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7CiAJcmV0ID0gaW5pdF9jYXJkKGNhaWFxZGV2KGNhcmQpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaCBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaAppbmRleCBhYjU2ZTczLi40Y2NlMWFkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oCkBAIC0xMCw4ICsxMCwxMCBAQAogI2RlZmluZSBVU0JfUElEX0tPUkVDT05UUk9MTEVSCTB4NDcxMQogI2RlZmluZSBVU0JfUElEX0tPUkVDT05UUk9MTEVSMgkweDQ3MTIKICNkZWZpbmUgVVNCX1BJRF9BSzEJCTB4MDgxNQorI2RlZmluZSBVU0JfUElEX0FVRElPNERKCTB4MDgzOQogI2RlZmluZSBVU0JfUElEX0FVRElPOERKCTB4MTk3OAogI2RlZmluZSBVU0JfUElEX1NFU1NJT05JTwkweDE5MTUKKyNkZWZpbmUgVVNCX1BJRF9HVUlUQVJSSUdNT0JJTEUJMHgwZDhkCiAKICNkZWZpbmUgRVAxX0JVRlNJWkUgNjQKICNkZWZpbmUgQ0FJQVFfVVNCX1NUUl9MRU4gMHhmZgpAQCAtODcsOSArODksOSBAQAogCWludCBhdWRpb19vdXRfYnVmX3Bvc1tNQVhfU1RSRUFNU107CiAJaW50IHBlcmlvZF9pbl9jb3VudFtNQVhfU1RSRUFNU107CiAJaW50IHBlcmlvZF9vdXRfY291bnRbTUFYX1NUUkVBTVNdOwotCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljOworCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljLCB3YXJuZWQ7CiAJY2hhciAqYXVkaW9faW5fYnVmLCAqYXVkaW9fb3V0X2J1ZjsKLQl1bnNpZ25lZCBpbnQgc2FtcGxlcmF0ZXM7CisJdW5zaWduZWQgaW50IHNhbXBsZXJhdGVzLCBicHA7CiAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1Yl9wbGF5YmFja1tNQVhfU1RSRUFNU107CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJfY2FwdHVyZVtNQVhfU1RSRUFNU107CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IDJhYjgzMTIuLmMyZGIwZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC0xMDcsNyArMTA3LDcgQEAKICNkZWZpbmUgTUFYX1BBQ0tTX0hTCShNQVhfUEFDS1MgKiA4KQkvKiBpbiBoaWdoIHNwZWVkIG1vZGUgKi8KICNkZWZpbmUgTUFYX1VSQlMJOAogI2RlZmluZSBTWU5DX1VSQlMJNAkvKiBhbHdheXMgZm91ciB1cmJzIGZvciBzeW5jICovCi0jZGVmaW5lIE1JTl9QQUNLU19VUkIJMQkvKiBtaW5pbXVtIDEgcGFja2V0IHBlciB1cmIgKi8KKyNkZWZpbmUgTUFYX1FVRVVFCTI0CS8qIHRyeSBub3QgdG8gZXhjZWVkIHRoaXMgcXVldWUgbGVuZ3RoLCBpbiBtcyAqLwogCiBzdHJ1Y3QgYXVkaW9mb3JtYXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTUyNSw3ICs1MjUsNyBAQAogLyoKICAqIFByZXBhcmUgdXJiIGZvciBzdHJlYW1pbmcgYmVmb3JlIHBsYXliYWNrIHN0YXJ0cyBvciB3aGVuIHBhdXNlZC4KICAqCi0gKiBXZSBkb24ndCBoYXZlIGFueSBkYXRhLCBzbyB3ZSBzZW5kIGEgZnJhbWUgb2Ygc2lsZW5jZS4KKyAqIFdlIGRvbid0IGhhdmUgYW55IGRhdGEsIHNvIHdlIHNlbmQgc2lsZW5jZS4KICAqLwogc3RhdGljIGludCBwcmVwYXJlX25vZGF0YV9wbGF5YmFja191cmIoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLAogCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLApAQCAtNTM3LDEzICs1MzcsMTMgQEAKIAogCW9mZnMgPSAwOwogCXVyYi0+ZGV2ID0gY3R4LT5zdWJzLT5kZXY7Ci0JdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHN1YnMtPnBhY2tzX3Blcl9tczsKLQlmb3IgKGkgPSAwOyBpIDwgc3Vicy0+cGFja3NfcGVyX21zOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5wYWNrZXRzOyArK2kpIHsKIAkJY291bnRzID0gc25kX3VzYl9hdWRpb19uZXh0X3BhY2tldF9zaXplKHN1YnMpOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnMgKiBzdHJpZGU7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY291bnRzICogc3RyaWRlOwogCQlvZmZzICs9IGNvdW50czsKIAl9CisJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IGN0eC0+cGFja2V0czsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvZmZzICogc3RyaWRlOwogCW1lbXNldCh1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkgICAgICAgc3Vicy0+Y3VyX2F1ZGlvZm10LT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9VOCA/IDB4ODAgOiAwLApAQCAtMTAzNCw5ICsxMDM0LDkgQEAKIHN0YXRpYyBpbnQgaW5pdF9zdWJzdHJlYW1fdXJicyhzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMsIHVuc2lnbmVkIGludCBwZXJpb2RfYnl0ZXMsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBmcmFtZV9iaXRzKQogewotCXVuc2lnbmVkIGludCBtYXhzaXplLCBuLCBpOworCXVuc2lnbmVkIGludCBtYXhzaXplLCBpOwogCWludCBpc19wbGF5YmFjayA9IHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwotCXVuc2lnbmVkIGludCBucGFja3NbTUFYX1VSQlNdLCB1cmJfcGFja3MsIHRvdGFsX3BhY2tzLCBwYWNrc19wZXJfbXM7CisJdW5zaWduZWQgaW50IHVyYl9wYWNrcywgdG90YWxfcGFja3MsIHBhY2tzX3Blcl9tczsKIAogCS8qIGNhbGN1bGF0ZSB0aGUgZnJlcXVlbmN5IGluIDE2LjE2IGZvcm1hdCAqLwogCWlmIChzbmRfdXNiX2dldF9zcGVlZChzdWJzLT5kZXYpID09IFVTQl9TUEVFRF9GVUxMKQpAQCAtMTA3MCw4ICsxMDcwLDcgQEAKIAlzdWJzLT5wYWNrc19wZXJfbXMgPSBwYWNrc19wZXJfbXM7CiAKIAlpZiAoaXNfcGxheWJhY2spIHsKLQkJdXJiX3BhY2tzID0gbnJwYWNrczsKLQkJdXJiX3BhY2tzID0gbWF4KHVyYl9wYWNrcywgKHVuc2lnbmVkIGludClNSU5fUEFDS1NfVVJCKTsKKwkJdXJiX3BhY2tzID0gbWF4KG5ycGFja3MsIDEpOwogCQl1cmJfcGFja3MgPSBtaW4odXJiX3BhY2tzLCAodW5zaWduZWQgaW50KU1BWF9QQUNLUyk7CiAJfSBlbHNlCiAJCXVyYl9wYWNrcyA9IDE7CkBAIC0xMDc5LDcgKzEwNzgsNyBAQAogCiAJLyogZGVjaWRlIGhvdyBtYW55IHBhY2tldHMgdG8gYmUgdXNlZCAqLwogCWlmIChpc19wbGF5YmFjaykgewotCQl1bnNpZ25lZCBpbnQgbWluc2l6ZTsKKwkJdW5zaWduZWQgaW50IG1pbnNpemUsIG1heHBhY2tzOwogCQkvKiBkZXRlcm1pbmUgaG93IHNtYWxsIGEgcGFja2V0IGNhbiBiZSAqLwogCQltaW5zaXplID0gKHN1YnMtPmZyZXFuID4+ICgxNiAtIHN1YnMtPmRhdGFpbnRlcnZhbCkpCiAJCQkgICogKGZyYW1lX2JpdHMgPj4gMyk7CkBAIC0xMDkyLDggKzEwOTEsMTMgQEAKIAkJdG90YWxfcGFja3MgPSAodG90YWxfcGFja3MgKyBwYWNrc19wZXJfbXMgLSAxKQogCQkJCSYgfihwYWNrc19wZXJfbXMgLSAxKTsKIAkJLyogd2UgbmVlZCBhdCBsZWFzdCB0d28gVVJCcyBmb3IgcXVldWVpbmcgKi8KLQkJaWYgKHRvdGFsX3BhY2tzIDwgMiAqIE1JTl9QQUNLU19VUkIgKiBwYWNrc19wZXJfbXMpCi0JCQl0b3RhbF9wYWNrcyA9IDIgKiBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zOworCQlpZiAodG90YWxfcGFja3MgPCAyICogcGFja3NfcGVyX21zKSB7CisJCQl0b3RhbF9wYWNrcyA9IDIgKiBwYWNrc19wZXJfbXM7CisJCX0gZWxzZSB7CisJCQkvKiBhbmQgd2UgZG9uJ3Qgd2FudCB0b28gbG9uZyBhIHF1ZXVlIGVpdGhlciAqLworCQkJbWF4cGFja3MgPSBtYXgoTUFYX1FVRVVFICogcGFja3NfcGVyX21zLCB1cmJfcGFja3MgKiAyKTsKKwkJCXRvdGFsX3BhY2tzID0gbWluKHRvdGFsX3BhY2tzLCBtYXhwYWNrcyk7CisJCX0KIAl9IGVsc2UgewogCQl0b3RhbF9wYWNrcyA9IE1BWF9VUkJTICogdXJiX3BhY2tzOwogCX0KQEAgLTExMDIsMzEgKzExMDYsMTEgQEAKIAkJLyogdG9vIG11Y2guLi4gKi8KIAkJc3Vicy0+bnVyYnMgPSBNQVhfVVJCUzsKIAkJdG90YWxfcGFja3MgPSBNQVhfVVJCUyAqIHVyYl9wYWNrczsKLQl9Ci0JbiA9IHRvdGFsX3BhY2tzOwotCWZvciAoaSA9IDA7IGkgPCBzdWJzLT5udXJiczsgaSsrKSB7Ci0JCW5wYWNrc1tpXSA9IG4gPiB1cmJfcGFja3MgPyB1cmJfcGFja3MgOiBuOwotCQluIC09IHVyYl9wYWNrczsKLQl9Ci0JaWYgKHN1YnMtPm51cmJzIDw9IDEpIHsKKwl9IGVsc2UgaWYgKHN1YnMtPm51cmJzIDwgMikgewogCQkvKiB0b28gbGl0dGxlIC0gd2UgbmVlZCBhdCBsZWFzdCB0d28gcGFja2V0cwogCQkgKiB0byBlbnN1cmUgY29udGlndW91cyBwbGF5YmFjay9jYXB0dXJlCiAJCSAqLwogCQlzdWJzLT5udXJicyA9IDI7Ci0JCW5wYWNrc1swXSA9ICh0b3RhbF9wYWNrcyArIDEpIC8gMjsKLQkJbnBhY2tzWzFdID0gdG90YWxfcGFja3MgLSBucGFja3NbMF07Ci0JfSBlbHNlIGlmIChucGFja3Nbc3Vicy0+bnVyYnMtMV0gPCBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zKSB7Ci0JCS8qIHRoZSBsYXN0IHBhY2tldCBpcyB0b28gc21hbGwuLiAqLwotCQlpZiAoc3Vicy0+bnVyYnMgPiAyKSB7Ci0JCQkvKiBtZXJnZSB0byB0aGUgZmlyc3Qgb25lICovCi0JCQlucGFja3NbMF0gKz0gbnBhY2tzW3N1YnMtPm51cmJzIC0gMV07Ci0JCQlzdWJzLT5udXJicy0tOwotCQl9IGVsc2UgewotCQkJLyogZGl2aWRlIHRvIHR3byAqLwotCQkJc3Vicy0+bnVyYnMgPSAyOwotCQkJbnBhY2tzWzBdID0gKHRvdGFsX3BhY2tzICsgMSkgLyAyOwotCQkJbnBhY2tzWzFdID0gdG90YWxfcGFja3MgLSBucGFja3NbMF07Ci0JCX0KIAl9CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkYXRhIHVyYnMgKi8KQEAgLTExMzQsNyArMTExOCw4IEBACiAJCXN0cnVjdCBzbmRfdXJiX2N0eCAqdSA9ICZzdWJzLT5kYXRhdXJiW2ldOwogCQl1LT5pbmRleCA9IGk7CiAJCXUtPnN1YnMgPSBzdWJzOwotCQl1LT5wYWNrZXRzID0gbnBhY2tzW2ldOworCQl1LT5wYWNrZXRzID0gKGkgKyAxKSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnMKKwkJCS0gaSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnM7CiAJCXUtPmJ1ZmZlcl9zaXplID0gbWF4c2l6ZSAqIHUtPnBhY2tldHM7CiAJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkpCiAJCQl1LT5wYWNrZXRzKys7IC8qIGZvciB0cmFuc2ZlciBkZWxpbWl0ZXIgKi8KQEAgLTEyOTIsMTQgKzEyNzcsMTQgQEAKIAkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULAogCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGZyZXEgJWQgdG8gZXAgMHgleFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGZyZXEgJWQgdG8gZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCByYXRlLCBlcCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAogCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlZDolZDolZDogY2Fubm90IGdldCBmcmVxIGF0IGVwIDB4JXhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JWQ6JWQ6IGNhbm5vdCBnZXQgZnJlcSBhdCBlcCAlI3hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGVwKTsKIAkJCXJldHVybiAwOyAvKiBzb21lIGRldmljZXMgZG9uJ3Qgc3VwcG9ydCByZWFkaW5nICovCiAJCX0KQEAgLTE0MzEsOSArMTQxNiwxMSBAQAogCXN1YnMtPmN1cl9hdWRpb2ZtdCA9IGZtdDsKIAogI2lmIDAKLQlwcmludGsoInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCiAJICAgICAgIGZtdC0+Zm9ybWF0LCBmbXQtPnJhdGVfbWluLCBmbXQtPnJhdGVfbWF4LCBmbXQtPmNoYW5uZWxzKTsKLQlwcmludGsoIiAgZGF0YXBpcGUgPSAweCUweCwgc3luY3BpcGUgPSAweCUweFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICBkYXRhcGlwZSA9IDB4JTB4LCBzeW5jcGlwZSA9IDB4JTB4XG4iLAogCSAgICAgICBzdWJzLT5kYXRhcGlwZSwgc3Vicy0+c3luY3BpcGUpOwogI2VuZGlmCiAKQEAgLTE0NjgsNyArMTQ1NSw3IEBACiAJY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKTsKIAlmbXQgPSBmaW5kX2Zvcm1hdChzdWJzLCBmb3JtYXQsIHJhdGUsIGNoYW5uZWxzKTsKIAlpZiAoIWZtdCkgewotCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgImNhbm5vdCBzZXQgZm9ybWF0OiBmb3JtYXQgPSAweCV4LCByYXRlID0gJWQsIGNoYW5uZWxzID0gJWRcbiIsCisJCXNuZF9wcmludGQoS0VSTl9ERUJVRyAiY2Fubm90IHNldCBmb3JtYXQ6IGZvcm1hdCA9ICUjeCwgcmF0ZSA9ICVkLCBjaGFubmVscyA9ICVkXG4iLAogCQkJICAgZm9ybWF0LCByYXRlLCBjaGFubmVscyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE3OTUsNyArMTc4Miw3IEBACiAJCQlpZiAocmF0ZXNbZi0+Zm9ybWF0XSAmJiByYXRlc1tmLT5mb3JtYXRdICE9IGYtPnJhdGVzKQogCQkJCWdvdG8gX19vdXQ7CiAJCX0KLQkJY2hhbm5lbHNbZi0+Zm9ybWF0XSB8PSAoMSA8PCBmLT5jaGFubmVscyk7CisJCWNoYW5uZWxzW2YtPmZvcm1hdF0gfD0gMSA8PCAoZi0+Y2hhbm5lbHMgLSAxKTsKIAkJcmF0ZXNbZi0+Zm9ybWF0XSB8PSBmLT5yYXRlczsKIAkJLyogbmVlZHMga25vdD8gKi8KIAkJaWYgKGYtPnJhdGVzICYgU05EUlZfUENNX1JBVEVfS05PVCkKQEAgLTE4MjIsNyArMTgwOSw3IEBACiAJCQljb250aW51ZTsKIAkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJCWlmIChmLT5yYXRlcyAmICgxIDw8IGkpKQotCQkJCWNoYW5uZWxzW2ldIHw9ICgxIDw8IGYtPmNoYW5uZWxzKTsKKwkJCQljaGFubmVsc1tpXSB8PSAxIDw8IChmLT5jaGFubmVscyAtIDEpOwogCQl9CiAJfQogCWNtYXN0ZXIgPSAwOwpAQCAtMTkxOSw3ICsxOTA2LDcgQEAKIAkgKiBpbiB0aGUgY3VycmVudCBjb2RlIGFzc3VtZSB0aGUgMW1zIHBlcmlvZC4KIAkgKi8KIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSwKLQkJCQkgICAgIDEwMDAgKiBNSU5fUEFDS1NfVVJCLAorCQkJCSAgICAgMTAwMCwKIAkJCQkgICAgIC8qKG5ycGFja3MgKiBNQVhfVVJCUykgKiAxMDAwKi8gVUlOVF9NQVgpOwogCiAJZXJyID0gY2hlY2tfaHdfcGFyYW1zX2NvbnZlbnRpb24oc3Vicyk7CkBAIC0yMTYwLDcgKzIxNDcsNyBAQAogCQlmcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF1ZGlvZm9ybWF0LCBsaXN0KTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICBJbnRlcmZhY2UgJWRcbiIsIGZwLT5pZmFjZSk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBBbHRzZXQgJWRcbiIsIGZwLT5hbHRzZXR0aW5nKTsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEZvcm1hdDogMHgleFxuIiwgZnAtPmZvcm1hdCk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6ICUjeFxuIiwgZnAtPmZvcm1hdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBDaGFubmVsczogJWRcbiIsIGZwLT5jaGFubmVscyk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFbmRwb2ludDogJWQgJXMgKCVzKVxuIiwKIAkJCSAgICBmcC0+ZW5kcG9pbnQgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0ssCkBAIC0yMTgwLDcgKzIxNjcsNyBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAkJfQogCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgTWF4IFBhY2tldCBTaXplID0gJWRcbiIsIGZwLT5tYXhwYWNrc2l6ZSk7Ci0JCS8vIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFUCBBdHRyaWJ1dGUgPSAweCV4XG4iLCBmcC0+YXR0cmlidXRlcyk7CisJCS8vIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFUCBBdHRyaWJ1dGUgPSAlI3hcbiIsIGZwLT5hdHRyaWJ1dGVzKTsKIAl9CiB9CiAKQEAgLTI1MjQsNyArMjUxMSw2IEBACiAJCSAqIGJ1aWxkIHRoZSByYXRlIHRhYmxlIGFuZCBiaXRtYXAgZmxhZ3MKIAkJICovCiAJCWludCByLCBpZHg7Ci0JCXVuc2lnbmVkIGludCBub256ZXJvX3JhdGVzID0gMDsKIAogCQlmcC0+cmF0ZV90YWJsZSA9IGttYWxsb2Moc2l6ZW9mKGludCkgKiBucl9yYXRlcywgR0ZQX0tFUk5FTCk7CiAJCWlmIChmcC0+cmF0ZV90YWJsZSA9PSBOVUxMKSB7CkBAIC0yNTMyLDI0ICsyNTE4LDI3IEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQlmcC0+bnJfcmF0ZXMgPSBucl9yYXRlczsKLQkJZnAtPnJhdGVfbWluID0gZnAtPnJhdGVfbWF4ID0gY29tYmluZV90cmlwbGUoJmZtdFs4XSk7CisJCWZwLT5ucl9yYXRlcyA9IDA7CisJCWZwLT5yYXRlX21pbiA9IGZwLT5yYXRlX21heCA9IDA7CiAJCWZvciAociA9IDAsIGlkeCA9IG9mZnNldCArIDE7IHIgPCBucl9yYXRlczsgcisrLCBpZHggKz0gMykgewogCQkJdW5zaWduZWQgaW50IHJhdGUgPSBjb21iaW5lX3RyaXBsZSgmZm10W2lkeF0pOworCQkJaWYgKCFyYXRlKQorCQkJCWNvbnRpbnVlOwogCQkJLyogQy1NZWRpYSBDTTY1MDEgbWlzbGFiZWxzIGl0cyA5NiBrSHogYWx0c2V0dGluZyAqLwogCQkJaWYgKHJhdGUgPT0gNDgwMDAgJiYgbnJfcmF0ZXMgPT0gMSAmJgotCQkJICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAyMDEpICYmCisJCQkgICAgKGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAyMDEpIHx8CisJCQkgICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAxMDIpKSAmJgogCQkJICAgIGZwLT5hbHRzZXR0aW5nID09IDUgJiYgZnAtPm1heHBhY2tzaXplID09IDM5MikKIAkJCQlyYXRlID0gOTYwMDA7Ci0JCQlmcC0+cmF0ZV90YWJsZVtyXSA9IHJhdGU7Ci0JCQlub256ZXJvX3JhdGVzIHw9IHJhdGU7Ci0JCQlpZiAocmF0ZSA8IGZwLT5yYXRlX21pbikKKwkJCWZwLT5yYXRlX3RhYmxlW2ZwLT5ucl9yYXRlc10gPSByYXRlOworCQkJaWYgKCFmcC0+cmF0ZV9taW4gfHwgcmF0ZSA8IGZwLT5yYXRlX21pbikKIAkJCQlmcC0+cmF0ZV9taW4gPSByYXRlOwotCQkJZWxzZSBpZiAocmF0ZSA+IGZwLT5yYXRlX21heCkKKwkJCWlmICghZnAtPnJhdGVfbWF4IHx8IHJhdGUgPiBmcC0+cmF0ZV9tYXgpCiAJCQkJZnAtPnJhdGVfbWF4ID0gcmF0ZTsKIAkJCWZwLT5yYXRlcyB8PSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQocmF0ZSk7CisJCQlmcC0+bnJfcmF0ZXMrKzsKIAkJfQotCQlpZiAoIW5vbnplcm9fcmF0ZXMpIHsKKwkJaWYgKCFmcC0+bnJfcmF0ZXMpIHsKIAkJCWh3Y19kZWJ1ZygiQWxsIHJhdGVzIHdlcmUgemVyby4gU2tpcHBpbmcgZm9ybWF0IVxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTI2MTksNyArMjYwOCw3IEBACiAJCWZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01QRUc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGQoS0VSTl9JTkZPICIlZDoldTolZCA6IHVua25vd24gZm9ybWF0IHRhZyAweCV4IGlzIGRldGVjdGVkLiAgcHJvY2Vzc2VkIGFzIE1QRUcuXG4iLAorCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bmtub3duIGZvcm1hdCB0YWcgJSN4IGlzIGRldGVjdGVkLiAgcHJvY2Vzc2VkIGFzIE1QRUcuXG4iLAogCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcsIGZvcm1hdCk7CiAJCWZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01QRUc7CiAJCWJyZWFrOwpAQCAtMjgxNyw3ICsyODA2LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDoldTolZDogYWRkIGF1ZGlvIGVuZHBvaW50IDB4JXhcbiIsIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIGZwLT5lbmRwb2ludCk7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQ6IGFkZCBhdWRpbyBlbmRwb2ludCAlI3hcbiIsIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIGZwLT5lbmRwb2ludCk7CiAJCWVyciA9IGFkZF9hdWRpb19lbmRwb2ludChjaGlwLCBzdHJlYW0sIGZwKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWtmcmVlKGZwLT5yYXRlX3RhYmxlKTsKQEAgLTM0NjQsMTAgKzM0NTMsMTAgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGNyZWF0ZSBjYXJkIGluc3RhbmNlICVkXG4iLCBpZHgpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKQEAgLTM3NjQsNyArMzc1Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF91c2JfYXVkaW9faW5pdCh2b2lkKQogewotCWlmIChucnBhY2tzIDwgTUlOX1BBQ0tTX1VSQiB8fCBucnBhY2tzID4gTUFYX1BBQ0tTKSB7CisJaWYgKG5ycGFja3MgPCAxIHx8IG5ycGFja3MgPiBNQVhfUEFDS1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW52YWxpZCBucnBhY2tzIHZhbHVlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaWRpLmMgYi9zb3VuZC91c2IvdXNibWlkaS5jCmluZGV4IDMyMDY0MWEuLjI2YmFkMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaWRpLmMKKysrIGIvc291bmQvdXNiL3VzYm1pZGkuYwpAQCAtMTYyNSw2ICsxNjI1LDcgQEAKIAl9CiAKIAllcF9pbmZvLm91dF9lcCA9IGdldF9lbmRwb2ludChob3N0aWYsIDIpLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCWVwX2luZm8ub3V0X2ludGVydmFsID0gMDsKIAllcF9pbmZvLm91dF9jYWJsZXMgPSBlbmRwb2ludC0+b3V0X2NhYmxlcyAmIDB4NTU1NTsKIAllcnIgPSBzbmRfdXNibWlkaV9vdXRfZW5kcG9pbnRfY3JlYXRlKHVtaWRpLCAmZXBfaW5mbywgJnVtaWRpLT5lbmRwb2ludHNbMF0pOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyLmMgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwppbmRleCAwMDM5N2M4Li5lY2I1OGU3IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXIuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwpAQCAtNjYsNiArNjYsNyBAQAogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDAwKSwgMCwgMSwgMiwgMSwgIDE4LCAweDAwMTMgfSwgLyogRXh0aWd5ICAgICAgICovCiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwMjApLCAyLCAxLCA2LCA2LCAgMTgsIDB4MDAxMyB9LCAvKiBBdWRpZ3kgMiBOWCAgKi8KIAl7IFVTQl9JRCgweDA0MWUsIDB4MzA0MCksIDIsIDIsIDYsIDYsICAyLCAgMHg2ZTkxIH0sIC8qIExpdmUhIDI0LWJpdCAqLworCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogVG9zaGliYSBTQjA1MDAgKi8KIH07CiAKIHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlIHsKQEAgLTc4LDcgKzc5LDYgQEAKIAogCS8qIFNvdW5kIEJsYXN0ZXIgcmVtb3RlIGNvbnRyb2wgc3R1ZmYgKi8KIAljb25zdCBzdHJ1Y3QgcmNfY29uZmlnICpyY19jZmc7Ci0JdW5zaWduZWQgbG9uZyByY19od2RlcF9vcGVuOwogCXUzMiByY19jb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IHJjX3dhaXRxOwogCXN0cnVjdCB1cmIgKnJjX3VyYjsKQEAgLTExMCw2ICsxMTAsOCBAQAogCWNvbnN0IHN0cnVjdCB1c2JtaXhfc2VsZWN0b3JfbWFwICpzZWxlY3Rvcl9tYXA7CiB9OwogCisjZGVmaW5lIE1BWF9DSEFOTkVMUwkxMAkvKiBtYXggbG9naWNhbCBjaGFubmVscyAqLworCiBzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyB7CiAJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOwogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpuZXh0X2lkX2VsZW07IC8qIGxpc3Qgb2YgY29udHJvbHMgd2l0aCBzYW1lIGlkICovCkBAIC0xMjAsNiArMTIyLDggQEAKIAlpbnQgY2hhbm5lbHM7CiAJaW50IHZhbF90eXBlOwogCWludCBtaW4sIG1heCwgcmVzOworCWludCBjYWNoZWQ7CisJaW50IGNhY2hlX3ZhbFtNQVhfQ0hBTk5FTFNdOwogCXU4IGluaXRpYWxpemVkOwogfTsKIApAQCAtMTgxLDggKzE4NSw2IEBACiAJVVNCX1BST0NfRENSX1JFTEVBU0UgPSA2LAogfTsKIAotI2RlZmluZSBNQVhfQ0hBTk5FTFMJMTAJLyogbWF4IGxvZ2ljYWwgY2hhbm5lbHMgKi8KLQogCiAvKgogICogbWFudWFsIG1hcHBpbmcgb2YgbWl4ZXIgbmFtZXMKQEAgLTIxOSw3ICsyMjEsMTAgQEAKIAlmb3IgKHAgPSBzdGF0ZS0+bWFwOyBwLT5pZDsgcCsrKSB7CiAJCWlmIChwLT5pZCA9PSB1bml0aWQgJiYgISBwLT5uYW1lICYmCiAJCSAgICAoISBjb250cm9sIHx8ICEgcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKSB7Ci0JCQkvLyBwcmludGsoImlnbm9yZWQgY29udHJvbCAlZDolZFxuIiwgdW5pdGlkLCBjb250cm9sKTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAiaWdub3JlZCBjb250cm9sICVkOiVkXG4iLAorCQkJICAgICAgIHVuaXRpZCwgY29udHJvbCk7CisJCQkqLwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC0zNzYsMTEgKzM4MSwzNSBAQAogfQogCiAvKiBjaGFubmVsID0gMDogbWFzdGVyLCAxID0gZmlyc3QgY2hhbm5lbCAqLwotc3RhdGljIGlubGluZSBpbnQgZ2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLCBpbnQgKnZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZ2V0X2N1cl9taXhfcmF3KHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLAorCQkJCSAgaW50IGNoYW5uZWwsIGludCAqdmFsdWUpCiB7CiAJcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsCisJCQkgICAgIGludCBjaGFubmVsLCBpbnQgaW5kZXgsIGludCAqdmFsdWUpCit7CisJaW50IGVycjsKKworCWlmIChjdmFsLT5jYWNoZWQgJiAoMSA8PCBjaGFubmVsKSkgeworCQkqdmFsdWUgPSBjdmFsLT5jYWNoZV92YWxbaW5kZXhdOworCQlyZXR1cm4gMDsKKwl9CisJZXJyID0gZ2V0X2N1cl9taXhfcmF3KGN2YWwsIGNoYW5uZWwsIHZhbHVlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlpZiAoIWN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQorCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiY2Fubm90IGdldCBjdXJyZW50IHZhbHVlIGZvciAiCisJCQkJICAgImNvbnRyb2wgJWQgY2ggJWQ6IGVyciA9ICVkXG4iLAorCQkJCSAgIGN2YWwtPmNvbnRyb2wsIGNoYW5uZWwsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWN2YWwtPmNhY2hlZCB8PSAxIDw8IGNoYW5uZWw7CisJY3ZhbC0+Y2FjaGVfdmFsW2luZGV4XSA9ICp2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworCiAvKgogICogc2V0IGEgbWl4ZXIgdmFsdWUKICAqLwpAQCAtNDEyLDkgKzQ0MSwxNyBAQAogCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLAorCQkJICAgICBpbnQgaW5kZXgsIGludCB2YWx1ZSkKIHsKLQlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsIHZhbHVlKTsKKwlpbnQgZXJyOworCWVyciA9IHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLAorCQkJICAgIHZhbHVlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljdmFsLT5jYWNoZWQgfD0gMSA8PCBjaGFubmVsOworCWN2YWwtPmNhY2hlX3ZhbFtpbmRleF0gPSB2YWx1ZTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTcxOCw3ICs3NTUsNyBAQAogCQlpZiAoY3ZhbC0+bWluICsgY3ZhbC0+cmVzIDwgY3ZhbC0+bWF4KSB7CiAJCQlpbnQgbGFzdF92YWxpZF9yZXMgPSBjdmFsLT5yZXM7CiAJCQlpbnQgc2F2ZWQsIHRlc3QsIGNoZWNrOwotCQkJZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAmc2F2ZWQpOworCQkJZ2V0X2N1cl9taXhfcmF3KGN2YWwsIG1pbmNobiwgJnNhdmVkKTsKIAkJCWZvciAoOzspIHsKIAkJCQl0ZXN0ID0gc2F2ZWQ7CiAJCQkJaWYgKHRlc3QgPCBjdmFsLT5tYXgpCkBAIC03MjYsOCArNzYzLDggQEAKIAkJCQllbHNlCiAJCQkJCXRlc3QgLT0gY3ZhbC0+cmVzOwogCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWluIHx8IHRlc3QgPiBjdmFsLT5tYXggfHwKLQkJCQkgICAgc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCB0ZXN0KSB8fAotCQkJCSAgICBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZjaGVjaykpIHsKKwkJCQkgICAgc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAwLCB0ZXN0KSB8fAorCQkJCSAgICBnZXRfY3VyX21peF9yYXcoY3ZhbCwgbWluY2huLCAmY2hlY2spKSB7CiAJCQkJCWN2YWwtPnJlcyA9IGxhc3RfdmFsaWRfcmVzOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC03MzUsNyArNzcyLDcgQEAKIAkJCQkJYnJlYWs7CiAJCQkJY3ZhbC0+cmVzICo9IDI7CiAJCQl9Ci0JCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIHNhdmVkKTsKKwkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgMCwgc2F2ZWQpOwogCQl9CiAKIAkJY3ZhbC0+aW5pdGlhbGl6ZWQgPSAxOwpAQCAtNzc1LDM1ICs4MTIsMjUgQEAKIAlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCA9IGtjb250cm9sLT5wcml2YXRlX2RhdGE7CiAJaW50IGMsIGNudCwgdmFsLCBlcnI7CiAKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN2YWwtPm1pbjsKIAlpZiAoY3ZhbC0+Y21hc2spIHsKIAkJY250ID0gMDsKIAkJZm9yIChjID0gMDsgYyA8IE1BWF9DSEFOTkVMUzsgYysrKSB7Ci0JCQlpZiAoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkgewotCQkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmdmFsKTsKLQkJCQlpZiAoZXJyIDwgMCkgewotCQkJCQlpZiAoY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpIHsKLQkJCQkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3ZhbC0+bWluOwotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCX0KLQkJCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiY2Fubm90IGdldCBjdXJyZW50IHZhbHVlIGZvciBjb250cm9sICVkIGNoICVkOiBlcnIgPSAlZFxuIiwgY3ZhbC0+Y29udHJvbCwgYyArIDEsIGVycik7Ci0JCQkJCXJldHVybiBlcnI7Ci0JCQkJfQotCQkJCXZhbCA9IGdldF9yZWxhdGl2ZV92YWx1ZShjdmFsLCB2YWwpOwotCQkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF0gPSB2YWw7Ci0JCQkJY250Kys7Ci0JCQl9CisJCQlpZiAoIShjdmFsLT5jbWFzayAmICgxIDw8IGMpKSkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCBjbnQsICZ2YWwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKKwkJCXZhbCA9IGdldF9yZWxhdGl2ZV92YWx1ZShjdmFsLCB2YWwpOworCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XSA9IHZhbDsKKwkJCWNudCsrOwogCQl9CisJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIG1hc3RlciBjaGFubmVsICovCi0JCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsICZ2YWwpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJaWYgKGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKSB7Ci0JCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdmFsLT5taW47Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgbWFzdGVyIGNoOiBlcnIgPSAlZFxuIiwgY3ZhbC0+Y29udHJvbCwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgMCwgJnZhbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKIAkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7CiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdmFsOwogCX0KQEAgLTgyMCwzNCArODQ3LDI4IEBACiAJaWYgKGN2YWwtPmNtYXNrKSB7CiAJCWNudCA9IDA7CiAJCWZvciAoYyA9IDA7IGMgPCBNQVhfQ0hBTk5FTFM7IGMrKykgewotCQkJaWYgKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpIHsKLQkJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgJm92YWwpOwotCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWlmIChjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikKLQkJCQkJCXJldHVybiAwOwotCQkJCQlyZXR1cm4gZXJyOwotCQkJCX0KLQkJCQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdOwotCQkJCXZhbCA9IGdldF9hYnNfdmFsdWUoY3ZhbCwgdmFsKTsKLQkJCQlpZiAob3ZhbCAhPSB2YWwpIHsKLQkJCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIHZhbCk7Ci0JCQkJCWNoYW5nZWQgPSAxOwotCQkJCX0KLQkJCQlnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgJnZhbCk7Ci0JCQkJY250Kys7CisJCQlpZiAoIShjdmFsLT5jbWFzayAmICgxIDw8IGMpKSkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCBjbnQsICZvdmFsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CisJCQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdOworCQkJdmFsID0gZ2V0X2Fic192YWx1ZShjdmFsLCB2YWwpOworCQkJaWYgKG92YWwgIT0gdmFsKSB7CisJCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgdmFsKTsKKwkJCQljaGFuZ2VkID0gMTsKIAkJCX0KKwkJCWNudCsrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogbWFzdGVyIGNoYW5uZWwgKi8KLQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgJm92YWwpOwotCQlpZiAoZXJyIDwgMCAmJiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikKLQkJCXJldHVybiAwOworCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAwLCAmb3ZhbCk7CiAJCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CiAJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCQl2YWwgPSBnZXRfYWJzX3ZhbHVlKGN2YWwsIHZhbCk7CiAJCWlmICh2YWwgIT0gb3ZhbCkgewotCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgdmFsKTsKKwkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIDAsIHZhbCk7CiAJCQljaGFuZ2VkID0gMTsKIAkJfQogCX0KQEAgLTE3MDYsNyArMTcyNyw4IEBACiAJCWJyZWFrOwogCS8qIGxpdmUyNGV4dDogNCA9IGxpbmUtaW4gamFjayAqLwogCWNhc2UgMzoJLyogaHAtb3V0IGphY2sgKG1heSBhY3R1YXRlIE11dGUpICovCi0JCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpCisJCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkKIAkJCXNuZF91c2JfbWl4ZXJfbm90aWZ5X2lkKG1peGVyLCBtaXhlci0+cmNfY2ZnLT5tdXRlX21peGVyX2lkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE3OTcsMjQgKzE4MTksNiBAQAogCXdha2VfdXAoJm1peGVyLT5yY193YWl0cSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX3VzYl9zYnJjX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IGh3LT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbWl4ZXItPnJjX2h3ZGVwX29wZW4pKQotCQlyZXR1cm4gLUVCVVNZOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91c2Jfc2JyY19od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIgPSBody0+cHJpdmF0ZV9kYXRhOwotCi0JY2xlYXJfYml0KDAsICZtaXhlci0+cmNfaHdkZXBfb3Blbik7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGxvbmcgc25kX3VzYl9zYnJjX2h3ZGVwX3JlYWQoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgICBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKQEAgLTE4NjcsOSArMTg3MSw4IEBACiAJaHdkZXAtPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfU0JfUkM7CiAJaHdkZXAtPnByaXZhdGVfZGF0YSA9IG1peGVyOwogCWh3ZGVwLT5vcHMucmVhZCA9IHNuZF91c2Jfc2JyY19od2RlcF9yZWFkOwotCWh3ZGVwLT5vcHMub3BlbiA9IHNuZF91c2Jfc2JyY19od2RlcF9vcGVuOwotCWh3ZGVwLT5vcHMucmVsZWFzZSA9IHNuZF91c2Jfc2JyY19od2RlcF9yZWxlYXNlOwogCWh3ZGVwLT5vcHMucG9sbCA9IHNuZF91c2Jfc2JyY19od2RlcF9wb2xsOworCWh3ZGVwLT5leGNsdXNpdmUgPSAxOwogCiAJbWl4ZXItPnJjX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaXhlci0+cmNfdXJiKQpAQCAtMTk1Niw4ICsxOTU5LDkgQEAKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc25kX2F1ZGlneTJueF9jb250cm9scyk7ICsraSkgewotCQlpZiAoaSA+IDEgJiYgIC8qIExpdmUyNGV4dCBoYXMgMiBMRURzIG9ubHkgKi8KLQkJCW1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkKKwkJaWYgKGkgPiAxICYmIC8qIExpdmUyNGV4dCBoYXMgMiBMRURzIG9ubHkgKi8KKwkJCShtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpKQogCQkJYnJlYWs7IAogCQllcnIgPSBzbmRfY3RsX2FkZChtaXhlci0+Y2hpcC0+Y2FyZCwKIAkJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2F1ZGlneTJueF9jb250cm9sc1tpXSwgbWl4ZXIpKTsKQEAgLTE5OTQsNyArMTk5OCw4IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgamFja3NcblxuIiwgbWl4ZXItPmNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CiAJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSkKIAkJamFja3MgPSBqYWNrc19hdWRpZ3kybng7Ci0JZWxzZSBpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKQorCWVsc2UgaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKQogCQlqYWNrcyA9IGphY2tzX2xpdmUyNGV4dDsKIAllbHNlCiAJCXJldHVybjsKQEAgLTIwNDQsNyArMjA0OSw4IEBACiAJCWdvdG8gX2Vycm9yOwogCiAJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSB8fAotCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpIHsKKwkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkgewogCQlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwogCiAJCWlmICgoZXJyID0gc25kX2F1ZGlneTJueF9jb250cm9sc19jcmVhdGUobWl4ZXIpKSA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jIGIvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYwppbmRleCBkNzU1YmUwLi4zZTVkNjZjIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKQEAgLTI2MSw2ICsyNjEsMjIgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCitzdGF0aWMgc3RydWN0IHVzYm1peF9uYW1lX21hcCBzY3JhdGNoX2xpdmVfbWFwW10gPSB7CisJLyogMTogSVQgTGluZSAxIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDI6IE9UIExpbmUgMSAoU3BlYWtlcikgKi8KKwkvKiAzOiBJVCBMaW5lIDEgKExpbmUgY29ubmVjdG9yKSAqLworCXsgNCwgIkxpbmUgMSBJbiIgfSwgLyogRlUgKi8KKwkvKiA1OiBPVCBMaW5lIDEgKFVTQiBzdHJlYW1pbmcpICovCisJLyogNjogSVQgTGluZSAyIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDc6IE9UIExpbmUgMiAoU3BlYWtlcikgKi8KKwkvKiA4OiBJVCBMaW5lIDIgKExpbmUgY29ubmVjdG9yKSAqLworCXsgOSwgIkxpbmUgMiBJbiIgfSwgLyogRlUgKi8KKwkvKiAxMDogT1QgTGluZSAyIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDExOiBJVCBNaWMgKExpbmUgY29ubmVjdG9yKSAqLworCS8qIDEyOiBPVCBNaWMgKFVTQiBzdHJlYW1pbmcpICovCisJeyAwIH0gLyogdGVybWluYXRvciAqLworfTsKKwogLyoKICAqIENvbnRyb2wgbWFwIGVudHJpZXMKICAqLwpAQCAtMjg1LDYgKzMwMSwxMSBAQAogCQkubWFwID0gbGl2ZTI0ZXh0X21hcCwKIAl9LAogCXsKKwkJLmlkID0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSwKKwkJLm1hcCA9IGF1ZGlneTJueF9tYXAsCisJCS5zZWxlY3Rvcl9tYXAgPSBhdWRpZ3kybnhfc2VsZWN0b3JzLAorCX0sCisJewogCQkvKiBIZXJjdWxlcyBESiBDb25zb2xlIChXaW5kb3dzIEVkaXRpb24pICovCiAJCS5pZCA9IFVTQl9JRCgweDA2ZjgsIDB4YjAwMCksCiAJCS5pZ25vcmVfY3RsX2Vycm9yID0gMSwKQEAgLTMxMSw2ICszMzIsMTEgQEAKIAkJLmlkID0gVVNCX0lEKDB4MGNjZCwgMHgwMDI4KSwKIAkJLm1hcCA9IGF1cmVvbl81MV8yX21hcCwKIAl9LAorCXsKKwkJLmlkID0gVVNCX0lEKDB4MTNlNSwgMHgwMDAxKSwKKwkJLm1hcCA9IHNjcmF0Y2hfbGl2ZV9tYXAsCisJCS5pZ25vcmVfY3RsX2Vycm9yID0gMSwKKwl9LAogCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JxdWlya3MuaCBiL3NvdW5kL3VzYi91c2JxdWlya3MuaAppbmRleCA1ZDhlZjA5Li42NDdlZjUwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNicXVpcmtzLmgKKysrIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCkBAIC0zOSw2ICszOSwxNiBAQAogCS5pZFByb2R1Y3QgPSBwcm9kLCBcCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQwogCisvKiBDcmVhdGl2ZS9Ub3NoaWJhIE11bHRpbWVkaWEgQ2VudGVyIFNCLTA1MDAgKi8KK3sKKwlVU0JfREVWSUNFKDB4MDQxZSwgMHgzMDQ4KSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIlRvc2hpYmEiLAorCQkucHJvZHVjdF9uYW1lID0gIlNCLTA1MDAiLAorCQkuaWZudW0gPSBRVUlSS19OT19JTlRFUkZBQ0UKKwl9Cit9LAorCiAvKiBDcmVhdGl2ZS9FLU11IGRldmljZXMgKi8KIHsKIAlVU0JfREVWSUNFKDB4MDQxZSwgMHgzMDEwKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwppbmRleCA3M2U1OWY0Li45ODI3NmFhIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCkBAIC00NzgsMTkgKzQ3OCwyMSBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICp1c3gyeV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCB1c3gyeV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlpbnQJCWRldjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKwogCWZvciAoZGV2ID0gMDsgZGV2IDwgU05EUlZfQ0FSRFM7ICsrZGV2KQogCQlpZiAoZW5hYmxlW2Rldl0gJiYgIXNuZF91czEyMmxfY2FyZF91c2VkW2Rldl0pCiAJCQlicmVhazsKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotCQlyZXR1cm4gTlVMTDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgdXMxMjJsKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1czEyMmwpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX3VzMTIybF9jYXJkX3VzZWRbVVMxMjJMKGNhcmQpLT5jaGlwLmluZGV4ID0gZGV2XSA9IDE7CiAKIAlVUzEyMkwoY2FyZCktPmNoaXAuZGV2ID0gZGV2aWNlOwpAQCAtNTA5LDQ2ICs1MTEsNTcgQEAKIAkJVVMxMjJMKGNhcmQpLT5jaGlwLmRldi0+ZGV2bnVtCiAJCSk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2aWNlLT5kZXYpOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICp1czEyMmxfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCkKK3N0YXRpYyBpbnQgdXMxMjJsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkLAorCQkJICAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHVzeDJ5X2NyZWF0ZV9jYXJkKGRldmljZSk7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHVzeDJ5X2NyZWF0ZV9jYXJkKGRldmljZSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCi0JaWYgKCF1czEyMmxfY3JlYXRlX2NhcmQoY2FyZCkgfHwKLQkgICAgc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkgPCAwKSB7CisJaWYgKCF1czEyMmxfY3JlYXRlX2NhcmQoY2FyZCkpIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJdXNiX2dldF9kZXYoZGV2aWNlKTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF91czEyMmxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyIlcDolaVxuIiwKIAkJICAgIGludGYsIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDEpCiAJCXJldHVybiAwOwogCi0JY2FyZCA9IHVzMTIybF91c2JfcHJvYmUodXNiX2dldF9pbnRmKGludGYpLCBpZCk7Ci0KLQlpZiAoY2FyZCkgewotCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmQpOwotCQlyZXR1cm4gMDsKKwllcnIgPSB1czEyMmxfdXNiX3Byb2JlKHVzYl9nZXRfaW50ZihpbnRmKSwgaWQsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQl1c2JfcHV0X2ludGYoaW50Zik7CisJCXJldHVybiBlcnI7CiAJfQogCi0JdXNiX3B1dF9pbnRmKGludGYpOwotCXJldHVybiAtRUlPOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF91czEyMmxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCmluZGV4IDE1NThhNWMuLjRhZjg3NDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYwpAQCAtMzAsOSArMzAsNiBAQAogI2luY2x1ZGUgInVzYnVzeDJ5LmgiCiAjaW5jbHVkZSAidXNYMllod2RlcC5oIgogCi1pbnQgdXNYMllfaHdkZXBfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwotCi0KIHN0YXRpYyBpbnQgc25kX3VzNDI4Y3Rsc192bV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEsCiAJCQkJICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKQEAgLTEwNiwxNiArMTAzLDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNuZF91c1gyWV9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdXNYMllfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc25kX3VzWDJZX2h3ZGVwX2RzcF9zdGF0dXMoc3RydWN0IHNuZF9od2RlcCAqaHcsCiAJCQkJICAgICAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICppbmZvKQogewpAQCAtMjY3LDggKzI1NCw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9VU1gyWTsKIAlody0+cHJpdmF0ZV9kYXRhID0gdXNYMlkoY2FyZCk7Ci0JaHctPm9wcy5vcGVuID0gc25kX3VzWDJZX2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX3VzWDJZX2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gc25kX3VzWDJZX2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IHNuZF91c1gyWV9od2RlcF9kc3BfbG9hZDsKIAlody0+b3BzLm1tYXAgPSBzbmRfdXM0MjhjdGxzX21tYXA7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jIGIvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYwppbmRleCA3MGI5NjM1Li4yNDM5M2RhIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCQlzLT5pZGxlX2luc2l6ZSAtPSBtYXhfZGlmZiAtIG1heF9kaWZmXzA7CiAJCXMtPmlkbGVfaW5zaXplICs9IHVyYl9zaXplIC0gcy0+cGVyaW9kX3NpemU7CiAJCWlmIChzLT5pZGxlX2luc2l6ZSA8IDApIHsKLQkJCXNuZF9wcmludGsoIiVpICVpICVpXG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVpICVpICVpXG4iLAogCQkJCSAgIHMtPmlkbGVfaW5zaXplLCB1cmJfc2l6ZSwgcy0+cGVyaW9kX3NpemUpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYgKHMtPmlkbGVfaW5zaXplID09IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKaW5kZXggMTE2MzliZC4uNWNlMGRhMiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKQEAgLTIyNyw5ICsyMjcsOSBAQAogCQogCWlmICh1c1gyWS0+VVMwNCkgewogCQlpZiAoMCA9PSB1c1gyWS0+VVMwNC0+c3VibWl0dGVkKQotCQkJZG8KKwkJCWRvIHsKIAkJCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1c1gyWS0+VVMwNC0+dXJiW3VzWDJZLT5VUzA0LT5zdWJtaXR0ZWQrK10sIEdGUF9BVE9NSUMpOwotCQkJd2hpbGUgKCFlcnIgJiYgdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCA8IHVzWDJZLT5VUzA0LT5sZW4pOworCQkJfSB3aGlsZSAoIWVyciAmJiB1c1gyWS0+VVMwNC0+c3VibWl0dGVkIDwgdXNYMlktPlVTMDQtPmxlbik7CiAJfSBlbHNlCiAJCWlmICh1czQyOGN0bHMgJiYgdXM0MjhjdGxzLT5wNG91dExhc3QgPj0gMCAmJiB1czQyOGN0bHMtPnA0b3V0TGFzdCA8IE5fdXM0MjhfcDRvdXRfQlVGUykgewogCQkJaWYgKHVzNDI4Y3Rscy0+cDRvdXRMYXN0ICE9IHVzNDI4Y3Rscy0+cDRvdXRTZW50KSB7CkBAIC0zMzMsMTggKzMzMywyMSBAQAogCXsgLyogdGVybWluYXRvciAqLyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICp1c1gyWV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCB1c1gyWV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlpbnQJCWRldjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKgljYXJkOworCWludCBlcnI7CisKIAlmb3IgKGRldiA9IDA7IGRldiA8IFNORFJWX0NBUkRTOyArK2RldikKIAkJaWYgKGVuYWJsZVtkZXZdICYmICFzbmRfdXNYMllfY2FyZF91c2VkW2Rldl0pCiAJCQlicmVhazsKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotCQlyZXR1cm4gTlVMTDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHVzWDJZZGV2KSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1c1gyWWRldiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfdXNYMllfY2FyZF91c2VkW3VzWDJZKGNhcmQpLT5jaGlwLmluZGV4ID0gZGV2XSA9IDE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3VzWDJZX2NhcmRfcHJpdmF0ZV9mcmVlOwogCXVzWDJZKGNhcmQpLT5jaGlwLmRldiA9IGRldmljZTsKQEAgLTM2MiwyNiArMzY1LDM2IEBACiAJCXVzWDJZKGNhcmQpLT5jaGlwLmRldi0+YnVzLT5idXNudW0sIHVzWDJZKGNhcmQpLT5jaGlwLmRldi0+ZGV2bnVtCiAJCSk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2aWNlLT5kZXYpOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHZvaWQgKnVzWDJZX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCkKK3N0YXRpYyBpbnQgdXNYMllfdXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsCisJCQkgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQsCisJCQkgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlpbnQJCWVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKgljYXJkOworCisJKmNhcmRwID0gTlVMTDsKIAlpZiAobGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSAweDE2MDQgfHwKIAkgICAgKGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzEyMiAmJgogCSAgICAgbGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTMjI0ICYmCi0JICAgICBsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVM0MjgpIHx8Ci0JICAgICEoY2FyZCA9IHVzWDJZX2NyZWF0ZV9jYXJkKGRldmljZSkpKQotCQlyZXR1cm4gTlVMTDsKKwkgICAgIGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzQyOCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gdXNYMllfY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSB1c1gyWV9od2RlcF9uZXcoY2FyZCwgZGV2aWNlKSkgPCAwICB8fAogCSAgICAoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGVycjsKIAl9Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTM4OSwxMyArNDAyLDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3VzWDJZX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0Jdm9pZCAqY2hpcDsKLQljaGlwID0gdXNYMllfdXNiX3Byb2JlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGludGYsIGlkKTsKLQlpZiAoY2hpcCkgewotCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNoaXApOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU87CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKKwllcnIgPSB1c1gyWV91c2JfcHJvYmUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgaW50ZiwgaWQsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlkZXZfc2V0X2RydmRhdGEoJmludGYtPmRldiwgY2FyZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF91c1gyWV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaCBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmgKaW5kZXggYzMzODJmZC4uOWM0ZmI4NCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaAorKysgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oCkBAIC0xOCwzICsxOCw1IEBACiAJdm9sYXRpbGUgdW5zaWduZWQgY2FwdHVyZWRfaXNvX2ZyYW1lczsKIAlpbnQgY2FwdHVyZV9pc29fc3RhcnQ7CiB9OworCitpbnQgdXNYMllfaHdkZXBfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmMgYi92aXJ0L2t2bS9pb2FwaWMuYwppbmRleCAyM2I4MWNmLi5jM2I5OWRlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtODMsMjQgKzgzLDI4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlkeCkKK3N0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlkeCkKIHsKIAl1bmlvbiBpb2FwaWNfcmVkaXJfZW50cnkgKnBlbnQ7CisJaW50IGluamVjdGVkID0gLTE7CiAKIAlwZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbaWR4XTsKIAogCWlmICghcGVudC0+ZmllbGRzLm1hc2spIHsKLQkJaW50IGluamVjdGVkID0gaW9hcGljX2RlbGl2ZXIoaW9hcGljLCBpZHgpOworCQlpbmplY3RlZCA9IGlvYXBpY19kZWxpdmVyKGlvYXBpYywgaWR4KTsKIAkJaWYgKGluamVjdGVkICYmIHBlbnQtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpCiAJCQlwZW50LT5maWVsZHMucmVtb3RlX2lyciA9IDE7CiAJfQogCWlmICghcGVudC0+ZmllbGRzLnRyaWdfbW9kZSkKIAkJaW9hcGljLT5pcnIgJj0gfigxIDw8IGlkeCk7CisKKwlyZXR1cm4gaW5qZWN0ZWQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKQogewogCXVuc2lnbmVkIGluZGV4OworCWJvb2wgbWFza19iZWZvcmUsIG1hc2tfYWZ0ZXI7CiAKIAlzd2l0Y2ggKGlvYXBpYy0+aW9yZWdzZWwpIHsKIAljYXNlIElPQVBJQ19SRUdfVkVSU0lPTjoKQEAgLTEyMCw2ICsxMjQsNyBAQAogCQlpb2FwaWNfZGVidWcoImNoYW5nZSByZWRpciBpbmRleCAleCB2YWwgJXhcbiIsIGluZGV4LCB2YWwpOwogCQlpZiAoaW5kZXggPj0gSU9BUElDX05VTV9QSU5TKQogCQkJcmV0dXJuOworCQltYXNrX2JlZm9yZSA9IGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5tYXNrOwogCQlpZiAoaW9hcGljLT5pb3JlZ3NlbCAmIDEpIHsKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgJj0gMHhmZmZmZmZmZjsKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgfD0gKHU2NCkgdmFsIDw8IDMyOwpAQCAtMTI4LDYgKzEzMyw5IEBACiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzIHw9ICh1MzIpIHZhbDsKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKIAkJfQorCQltYXNrX2FmdGVyID0gaW9hcGljLT5yZWRpcnRibFtpbmRleF0uZmllbGRzLm1hc2s7CisJCWlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKQorCQkJa3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoaW9hcGljLT5rdm0sIGluZGV4LCBtYXNrX2FmdGVyKTsKIAkJaWYgKGlvYXBpYy0+aXJyICYgKDEgPDwgaW5kZXgpKQogCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpbmRleCk7CiAJCWJyZWFrOwpAQCAtMjAyLDcgKzIxMCw3IEBACiAJdTggdHJpZ19tb2RlID0gaW9hcGljLT5yZWRpcnRibFtpcnFdLmZpZWxkcy50cmlnX21vZGU7CiAJdTMyIGRlbGl2ZXJfYml0bWFzazsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0JaW50IHZjcHVfaWQsIHIgPSAwOworCWludCB2Y3B1X2lkLCByID0gLTE7CiAKIAlpb2FwaWNfZGVidWcoImRlc3Q9JXggZGVzdF9tb2RlPSV4IGRlbGl2ZXJ5X21vZGU9JXggIgogCQkgICAgICJ2ZWN0b3I9JXggdHJpZ19tb2RlPSV4XG4iLApAQCAtMjQyLDcgKzI1MCw5IEBACiAJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwogCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKIAkJCWlmICh2Y3B1KSB7Ci0JCQkJciA9IGlvYXBpY19pbmpfaXJxKGlvYXBpYywgdmNwdSwgdmVjdG9yLAorCQkJCWlmIChyIDwgMCkKKwkJCQkJciA9IDA7CisJCQkJciArPSBpb2FwaWNfaW5qX2lycShpb2FwaWMsIHZjcHUsIHZlY3RvciwKIAkJCQkJICAgICAgIHRyaWdfbW9kZSwgZGVsaXZlcnlfbW9kZSk7CiAJCQl9CiAJCX0KQEAgLTI1Myw4ICsyNjMsMTAgQEAKIAkJCQljb250aW51ZTsKIAkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7CiAJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOwotCQkJaWYgKHZjcHUpCisJCQlpZiAodmNwdSkgewogCQkJCWlvYXBpY19pbmpfbm1pKHZjcHUpOworCQkJCXIgPSAxOworCQkJfQogCQkJZWxzZQogCQkJCWlvYXBpY19kZWJ1ZygiTk1JIHRvIHZjcHUgJWQgZmFpbGVkXG4iLAogCQkJCQkJdmNwdS0+dmNwdV9pZCk7CkBAIC0yNjgsMTEgKzI4MCwxMiBAQAogCXJldHVybiByOwogfQogCi12b2lkIGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitpbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCkKIHsKIAl1MzIgb2xkX2lyciA9IGlvYXBpYy0+aXJyOwogCXUzMiBtYXNrID0gMSA8PCBpcnE7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5IGVudHJ5OworCWludCByZXQgPSAxOwogCiAJaWYgKGlycSA+PSAwICYmIGlycSA8IElPQVBJQ19OVU1fUElOUykgewogCQllbnRyeSA9IGlvYXBpYy0+cmVkaXJ0YmxbaXJxXTsKQEAgLTI4MywyNSArMjk2LDI2IEBACiAJCQlpb2FwaWMtPmlyciB8PSBtYXNrOwogCQkJaWYgKCghZW50cnkuZmllbGRzLnRyaWdfbW9kZSAmJiBvbGRfaXJyICE9IGlvYXBpYy0+aXJyKQogCQkJICAgIHx8ICFlbnRyeS5maWVsZHMucmVtb3RlX2lycikKLQkJCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSk7CisJCQkJcmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEpOwogCQl9CiAJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBnc2ksCitzdGF0aWMgdm9pZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgcGluLAogCQkJCSAgICBpbnQgdHJpZ2dlcl9tb2RlKQogewogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSAqZW50OwogCi0JZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbZ3NpXTsKKwllbnQgPSAmaW9hcGljLT5yZWRpcnRibFtwaW5dOwogCi0Ja3ZtX25vdGlmeV9hY2tlZF9pcnEoaW9hcGljLT5rdm0sIGdzaSk7CisJa3ZtX25vdGlmeV9hY2tlZF9pcnEoaW9hcGljLT5rdm0sIEtWTV9JUlFDSElQX0lPQVBJQywgcGluKTsKIAogCWlmICh0cmlnZ2VyX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpIHsKIAkJQVNTRVJUKGVudC0+ZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRyk7CiAJCWVudC0+ZmllbGRzLnJlbW90ZV9pcnIgPSAwOwotCQlpZiAoIWVudC0+ZmllbGRzLm1hc2sgJiYgKGlvYXBpYy0+aXJyICYgKDEgPDwgZ3NpKSkpCi0JCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIGdzaSk7CisJCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBwaW4pKSkKKwkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgcGluKTsKIAl9CiB9CiAKQEAgLTQyNiwzICs0NDAsNCBAQAogCWt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KCZrdm0tPm1taW9fYnVzLCAmaW9hcGljLT5kZXYpOwogCXJldHVybiAwOwogfQorCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuaCBiL3ZpcnQva3ZtL2lvYXBpYy5oCmluZGV4IDQ5Yzk1ODEuLmEzNGJkNWUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5oCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5oCkBAIC04Myw3ICs4Myw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYml0bWFwKTsKIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSk7CiBpbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSk7Ci12b2lkIGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOworaW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpOwogdTMyIGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTggZGVzdCwKIAkJCQl1OCBkZXN0X21vZGUpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9tbXUuYyBiL3ZpcnQva3ZtL2lvbW11LmMKaW5kZXggZTk2OTNhMi4uNGM0MDM3NSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9tbXUuYworKysgYi92aXJ0L2t2bS9pb21tdS5jCkBAIC03MywxNCArNzMsMTMgQEAKIHsKIAlpbnQgaSwgciA9IDA7CiAKLQlkb3duX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IGt2bS0+bm1lbXNsb3RzOyBpKyspIHsKIAkJciA9IGt2bV9pb21tdV9tYXBfcGFnZXMoa3ZtLCBrdm0tPm1lbXNsb3RzW2ldLmJhc2VfZ2ZuLAogCQkJCQlrdm0tPm1lbXNsb3RzW2ldLm5wYWdlcyk7CiAJCWlmIChyKQogCQkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CisKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTkwLDEyICsxODksMTEgQEAKIHN0YXRpYyBpbnQga3ZtX2lvbW11X3VubWFwX21lbXNsb3RzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpbnQgaTsKLQlkb3duX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CisKIAlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7IGkrKykgewogCQlrdm1faW9tbXVfcHV0X3BhZ2VzKGt2bSwga3ZtLT5tZW1zbG90c1tpXS5iYXNlX2dmbiwKIAkJCQkgICAga3ZtLT5tZW1zbG90c1tpXS5ucGFnZXMpOwogCX0KLQl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pcnFfY29tbS5jIGIvdmlydC9rdm0vaXJxX2NvbW0uYwppbmRleCBhYTVkMWU1Li44NjRhYzU0IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pcnFfY29tbS5jCisrKyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKQEAgLTIwLDM1ICsyMCwxMzIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKworI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KKwogI2luY2x1ZGUgImlycS5oIgogCiAjaW5jbHVkZSAiaW9hcGljLmgiCiAKLS8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBrdm0tPmxvY2sgbXV0ZXggaGVsZCAqLwotdm9pZCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitzdGF0aWMgaW50IGt2bV9zZXRfcGljX2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQogewotCXVuc2lnbmVkIGxvbmcgKmlycV9zdGF0ZSA9ICh1bnNpZ25lZCBsb25nICopJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2lycV07CisjaWZkZWYgQ09ORklHX1g4NgorCXJldHVybiBrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwgZS0+aXJxY2hpcC5waW4sIGxldmVsKTsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CiAKLQkvKiBMb2dpY2FsIE9SIGZvciBsZXZlbCB0cmlnIGludGVycnVwdCAqLwotCWlmIChsZXZlbCkKLQkJc2V0X2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOwotCWVsc2UKLQkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7CitzdGF0aWMgaW50IGt2bV9zZXRfaW9hcGljX2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQoreworCXJldHVybiBrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIGUtPmlycWNoaXAucGluLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3NldF9tc2koc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCSAgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCkKK3sKKwlpbnQgdmNwdV9pZCwgciA9IC0xOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gaW9hcGljX2lycWNoaXAoa3ZtKTsKKwlpbnQgZGVzdF9pZCA9IChlLT5tc2kuYWRkcmVzc19sbyAmIE1TSV9BRERSX0RFU1RfSURfTUFTSykKKwkJCT4+IE1TSV9BRERSX0RFU1RfSURfU0hJRlQ7CisJaW50IHZlY3RvciA9IChlLT5tc2kuZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKQorCQkJPj4gTVNJX0RBVEFfVkVDVE9SX1NISUZUOworCWludCBkZXN0X21vZGUgPSB0ZXN0X2JpdChNU0lfQUREUl9ERVNUX01PREVfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmFkZHJlc3NfbG8pOworCWludCB0cmlnX21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9UUklHR0VSX1NISUZULAorCQkJCSh1bnNpZ25lZCBsb25nICopJmUtPm1zaS5kYXRhKTsKKwlpbnQgZGVsaXZlcnlfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmRhdGEpOworCXUzMiBkZWxpdmVyX2JpdG1hc2s7CisKKwlCVUdfT04oIWlvYXBpYyk7CisKKwlkZWxpdmVyX2JpdG1hc2sgPSBrdm1faW9hcGljX2dldF9kZWxpdmVyeV9iaXRtYXNrKGlvYXBpYywKKwkJCQlkZXN0X2lkLCBkZXN0X21vZGUpOworCS8qIElPQVBJQyBkZWxpdmVyeSBtb2RlIHZhbHVlIGlzIHRoZSBzYW1lIGFzIE1TSSBoZXJlICovCisJc3dpdGNoIChkZWxpdmVyeV9tb2RlKSB7CisJY2FzZSBJT0FQSUNfTE9XRVNUX1BSSU9SSVRZOgorCQl2Y3B1ID0ga3ZtX2dldF9sb3dlc3RfcHJpb192Y3B1KGlvYXBpYy0+a3ZtLCB2ZWN0b3IsCisJCQkJZGVsaXZlcl9iaXRtYXNrKTsKKwkJaWYgKHZjcHUgIT0gTlVMTCkKKwkJCXIgPSBrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBudWxsIGxvd2VzdCBwcmlvcml0eSB2Y3B1IVxuIik7CisJCWJyZWFrOworCWNhc2UgSU9BUElDX0ZJWEVEOgorCQlmb3IgKHZjcHVfaWQgPSAwOyBkZWxpdmVyX2JpdG1hc2sgIT0gMDsgdmNwdV9pZCsrKSB7CisJCQlpZiAoIShkZWxpdmVyX2JpdG1hc2sgJiAoMSA8PCB2Y3B1X2lkKSkpCisJCQkJY29udGludWU7CisJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOworCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKKwkJCWlmICh2Y3B1KSB7CisJCQkJaWYgKHIgPCAwKQorCQkJCQlyID0gMDsKKwkJCQlyICs9IGt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcjsKK30KKworLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGt2bS0+bG9jayBtdXRleCBoZWxkCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgPCAwICAgSW50ZXJydXB0IHdhcyBpZ25vcmVkIChtYXNrZWQgb3Igbm90IGRlbGl2ZXJlZCBmb3Igb3RoZXIgcmVhc29ucykKKyAqICA9IDAgICBJbnRlcnJ1cHQgd2FzIGNvYWxlc2NlZCAocHJldmlvdXMgaXJxIGlzIHN0aWxsIHBlbmRpbmcpCisgKiAgPiAwICAgTnVtYmVyIG9mIENQVXMgaW50ZXJydXB0IHdhcyBkZWxpdmVyZWQgdG8KKyAqLworaW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZTsKKwl1bnNpZ25lZCBsb25nICppcnFfc3RhdGUsIHNpZ19sZXZlbDsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAoaXJxIDwgS1ZNX0lPQVBJQ19OVU1fUElOUykgeworCQlpcnFfc3RhdGUgPSAodW5zaWduZWQgbG9uZyAqKSZrdm0tPmFyY2guaXJxX3N0YXRlc1tpcnFdOworCisJCS8qIExvZ2ljYWwgT1IgZm9yIGxldmVsIHRyaWcgaW50ZXJydXB0ICovCisJCWlmIChsZXZlbCkKKwkJCXNldF9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7CisJCXNpZ19sZXZlbCA9ICEhKCppcnFfc3RhdGUpOworCX0gZWxzZSAvKiBEZWFsIHdpdGggTVNJL01TSS1YICovCisJCXNpZ19sZXZlbCA9IDE7CiAKIAkvKiBOb3QgcG9zc2libGUgdG8gZGV0ZWN0IGlmIHRoZSBndWVzdCB1c2VzIHRoZSBQSUMgb3IgdGhlCiAJICogSU9BUElDLiAgU28gc2V0IHRoZSBiaXQgaW4gYm90aC4gVGhlIGd1ZXN0IHdpbGwgaWdub3JlCiAJICogd3JpdGVzIHRvIHRoZSB1bnVzZWQgb25lLgogCSAqLwotCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgaXJxLCAhISgqaXJxX3N0YXRlKSk7Ci0jaWZkZWYgQ09ORklHX1g4NgotCWt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCBpcnEsICEhKCppcnFfc3RhdGUpKTsKLSNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmt2bS0+aXJxX3JvdXRpbmcsIGxpbmspCisJCWlmIChlLT5nc2kgPT0gaXJxKSB7CisJCQlpbnQgciA9IGUtPnNldChlLCBrdm0sIHNpZ19sZXZlbCk7CisJCQlpZiAociA8IDApCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IHIgKyAoKHJldCA8IDApID8gMCA6IHJldCk7CisJCX0KKwlyZXR1cm4gcmV0OwogfQogCi12b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKQordm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbikKIHsKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZTsKIAlzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW47CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQgZ3NpID0gcGluOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAma3ZtLT5pcnFfcm91dGluZywgbGluaykKKwkJaWYgKGUtPmlycWNoaXAuaXJxY2hpcCA9PSBpcnFjaGlwICYmCisJCSAgICBlLT5pcnFjaGlwLnBpbiA9PSBwaW4pIHsKKwkJCWdzaSA9IGUtPmdzaTsKKwkJCWJyZWFrOworCQl9CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShraWFuLCBuLCAma3ZtLT5hcmNoLmlycV9hY2tfbm90aWZpZXJfbGlzdCwgbGluaykKIAkJaWYgKGtpYW4tPmdzaSA9PSBnc2kpCkBAIC05OSwzICsxOTYsMTc3IEBACiAJCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaV0pOwogCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCk7CiB9CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKK3sKKwlraW1uLT5pcnEgPSBpcnE7CisJaGxpc3RfYWRkX2hlYWQoJmtpbW4tPmxpbmssICZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7Cit9CisKK3ZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pCit7CisJaGxpc3RfZGVsKCZraW1uLT5saW5rKTsKK30KKwordm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGJvb2wgbWFzaykKK3sKKwlzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoa2ltbiwgbiwgJmt2bS0+bWFza19ub3RpZmllcl9saXN0LCBsaW5rKQorCQlpZiAoa2ltbi0+aXJxID09IGlycSkKKwkJCWtpbW4tPmZ1bmMoa2ltbiwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGxpc3RfaGVhZCAqaXJxX3JvdXRpbmcpCit7CisJc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIGlycV9yb3V0aW5nLCBsaW5rKQorCQlrZnJlZShlKTsKK30KKwordm9pZCBrdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJX19rdm1fZnJlZV9pcnFfcm91dGluZygma3ZtLT5pcnFfcm91dGluZyk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSkKK3sKKwlpbnQgciA9IC1FSU5WQUw7CisJaW50IGRlbHRhOworCisJZS0+Z3NpID0gdWUtPmdzaTsKKwlzd2l0Y2ggKHVlLT50eXBlKSB7CisJY2FzZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUDoKKwkJZGVsdGEgPSAwOworCQlzd2l0Y2ggKHVlLT51LmlycWNoaXAuaXJxY2hpcCkgeworCQljYXNlIEtWTV9JUlFDSElQX1BJQ19NQVNURVI6CisJCQllLT5zZXQgPSBrdm1fc2V0X3BpY19pcnE7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fSVJRQ0hJUF9QSUNfU0xBVkU6CisJCQllLT5zZXQgPSBrdm1fc2V0X3BpY19pcnE7CisJCQlkZWx0YSA9IDg7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fSVJRQ0hJUF9JT0FQSUM6CisJCQkJZS0+c2V0ID0ga3ZtX3NldF9pb2FwaWNfaXJxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCQllLT5pcnFjaGlwLmlycWNoaXAgPSB1ZS0+dS5pcnFjaGlwLmlycWNoaXA7CisJCWUtPmlycWNoaXAucGluID0gdWUtPnUuaXJxY2hpcC5waW4gKyBkZWx0YTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fSVJRX1JPVVRJTkdfTVNJOgorCQllLT5zZXQgPSBrdm1fc2V0X21zaTsKKwkJZS0+bXNpLmFkZHJlc3NfbG8gPSB1ZS0+dS5tc2kuYWRkcmVzc19sbzsKKwkJZS0+bXNpLmFkZHJlc3NfaGkgPSB1ZS0+dS5tc2kuYWRkcmVzc19oaTsKKwkJZS0+bXNpLmRhdGEgPSB1ZS0+dS5tc2kuZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBvdXQ7CisJfQorCXIgPSAwOworb3V0OgorCXJldHVybiByOworfQorCisKK2ludCBrdm1fc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlLAorCQkJdW5zaWduZWQgbnIsCisJCQl1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlycV9saXN0ID0gTElTVF9IRUFEX0lOSVQoaXJxX2xpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgdG1wID0gTElTVF9IRUFEX0lOSVQodG1wKTsKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSA9IE5VTEw7CisJdW5zaWduZWQgaTsKKwlpbnQgcjsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgKytpKSB7CisJCXIgPSAtRUlOVkFMOworCQlpZiAodWUtPmdzaSA+PSBLVk1fTUFYX0lSUV9ST1VURVMpCisJCQlnb3RvIG91dDsKKwkJaWYgKHVlLT5mbGFncykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVOT01FTTsKKwkJZSA9IGt6YWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZSkKKwkJCWdvdG8gb3V0OworCQlyID0gc2V0dXBfcm91dGluZ19lbnRyeShlLCB1ZSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCSsrdWU7CisJCWxpc3RfYWRkKCZlLT5saW5rLCAmaXJxX2xpc3QpOworCQllID0gTlVMTDsKKwl9CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCWxpc3Rfc3BsaWNlKCZrdm0tPmlycV9yb3V0aW5nLCAmdG1wKTsKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFfcm91dGluZyk7CisJbGlzdF9zcGxpY2UoJmlycV9saXN0LCAma3ZtLT5pcnFfcm91dGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmlycV9saXN0KTsKKwlsaXN0X3NwbGljZSgmdG1wLCAmaXJxX2xpc3QpOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKworCXIgPSAwOworCitvdXQ6CisJa2ZyZWUoZSk7CisJX19rdm1fZnJlZV9pcnFfcm91dGluZygmaXJxX2xpc3QpOworCXJldHVybiByOworfQorCisjZGVmaW5lIElPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkgXAorCXsgLmdzaSA9IGlycSwgLnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCwJXAorCSAgLnUuaXJxY2hpcC5pcnFjaGlwID0gS1ZNX0lSUUNISVBfSU9BUElDLCAudS5pcnFjaGlwLnBpbiA9IChpcnEpIH0KKyNkZWZpbmUgUk9VVElOR19FTlRSWTEoaXJxKSBJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpCisKKyNpZmRlZiBDT05GSUdfWDg2CisjICBkZWZpbmUgUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcCisJeyAuZ3NpID0gaXJxLCAudHlwZSA9IEtWTV9JUlFfUk9VVElOR19JUlFDSElQLAlcCisJICAudS5pcnFjaGlwLmlycWNoaXAgPSBTRUxFQ1RfUElDKGlycSksIC51LmlycWNoaXAucGluID0gKGlycSkgJSA4IH0KKyMgIGRlZmluZSBST1VUSU5HX0VOVFJZMihpcnEpIFwKKwlJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpLCBQSUNfUk9VVElOR19FTlRSWShpcnEpCisjZWxzZQorIyAgZGVmaW5lIFJPVVRJTkdfRU5UUlkyKGlycSkgXAorCUlPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBkZWZhdWx0X3JvdXRpbmdbXSA9IHsKKwlST1VUSU5HX0VOVFJZMigwKSwgUk9VVElOR19FTlRSWTIoMSksCisJUk9VVElOR19FTlRSWTIoMiksIFJPVVRJTkdfRU5UUlkyKDMpLAorCVJPVVRJTkdfRU5UUlkyKDQpLCBST1VUSU5HX0VOVFJZMig1KSwKKwlST1VUSU5HX0VOVFJZMig2KSwgUk9VVElOR19FTlRSWTIoNyksCisJUk9VVElOR19FTlRSWTIoOCksIFJPVVRJTkdfRU5UUlkyKDkpLAorCVJPVVRJTkdfRU5UUlkyKDEwKSwgUk9VVElOR19FTlRSWTIoMTEpLAorCVJPVVRJTkdfRU5UUlkyKDEyKSwgUk9VVElOR19FTlRSWTIoMTMpLAorCVJPVVRJTkdfRU5UUlkyKDE0KSwgUk9VVElOR19FTlRSWTIoMTUpLAorCVJPVVRJTkdfRU5UUlkxKDE2KSwgUk9VVElOR19FTlRSWTEoMTcpLAorCVJPVVRJTkdfRU5UUlkxKDE4KSwgUk9VVElOR19FTlRSWTEoMTkpLAorCVJPVVRJTkdfRU5UUlkxKDIwKSwgUk9VVElOR19FTlRSWTEoMjEpLAorCVJPVVRJTkdfRU5UUlkxKDIyKSwgUk9VVElOR19FTlRSWTEoMjMpLAorI2lmZGVmIENPTkZJR19JQTY0CisJUk9VVElOR19FTlRSWTEoMjQpLCBST1VUSU5HX0VOVFJZMSgyNSksCisJUk9VVElOR19FTlRSWTEoMjYpLCBST1VUSU5HX0VOVFJZMSgyNyksCisJUk9VVElOR19FTlRSWTEoMjgpLCBST1VUSU5HX0VOVFJZMSgyOSksCisJUk9VVElOR19FTlRSWTEoMzApLCBST1VUSU5HX0VOVFJZMSgzMSksCisJUk9VVElOR19FTlRSWTEoMzIpLCBST1VUSU5HX0VOVFJZMSgzMyksCisJUk9VVElOR19FTlRSWTEoMzQpLCBST1VUSU5HX0VOVFJZMSgzNSksCisJUk9VVElOR19FTlRSWTEoMzYpLCBST1VUSU5HX0VOVFJZMSgzNyksCisJUk9VVElOR19FTlRSWTEoMzgpLCBST1VUSU5HX0VOVFJZMSgzOSksCisJUk9VVElOR19FTlRSWTEoNDApLCBST1VUSU5HX0VOVFJZMSg0MSksCisJUk9VVElOR19FTlRSWTEoNDIpLCBST1VUSU5HX0VOVFJZMSg0MyksCisJUk9VVElOR19FTlRSWTEoNDQpLCBST1VUSU5HX0VOVFJZMSg0NSksCisJUk9VVElOR19FTlRSWTEoNDYpLCBST1VUSU5HX0VOVFJZMSg0NyksCisjZW5kaWYKK307CisKK2ludCBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJcmV0dXJuIGt2bV9zZXRfaXJxX3JvdXRpbmcoa3ZtLCBkZWZhdWx0X3JvdXRpbmcsCisJCQkJICAgQVJSQVlfU0laRShkZWZhdWx0X3JvdXRpbmcpLCAwKTsKK30KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDNhNWEwODIuLjYwNTY5N2UgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNDcsMTAgKzQ3LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2Ci0jaW5jbHVkZSA8YXNtL21zaWRlZi5oPgotI2VuZGlmCi0KICNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKICNpbmNsdWRlICJjb2FsZXNjZWRfbW1pby5oIgogI2VuZGlmCkBAIC04NSw1NyArODEsNiBAQAogc3RhdGljIGJvb2wga3ZtX3JlYm9vdGluZzsKIAogI2lmZGVmIEtWTV9DQVBfREVWSUNFX0FTU0lHTk1FTlQKLQotI2lmZGVmIENPTkZJR19YODYKLXN0YXRpYyB2b2lkIGFzc2lnbmVkX2RldmljZV9tc2lfZGlzcGF0Y2goc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICpkZXYpCi17Ci0JaW50IHZjcHVfaWQ7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBpb2FwaWNfaXJxY2hpcChkZXYtPmt2bSk7Ci0JaW50IGRlc3RfaWQgPSAoZGV2LT5ndWVzdF9tc2kuYWRkcmVzc19sbyAmIE1TSV9BRERSX0RFU1RfSURfTUFTSykKLQkJCT4+IE1TSV9BRERSX0RFU1RfSURfU0hJRlQ7Ci0JaW50IHZlY3RvciA9IChkZXYtPmd1ZXN0X21zaS5kYXRhICYgTVNJX0RBVEFfVkVDVE9SX01BU0spCi0JCQk+PiBNU0lfREFUQV9WRUNUT1JfU0hJRlQ7Ci0JaW50IGRlc3RfbW9kZSA9IHRlc3RfYml0KE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvKTsKLQlpbnQgdHJpZ19tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfVFJJR0dFUl9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5kYXRhKTsKLQlpbnQgZGVsaXZlcnlfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGV2LT5ndWVzdF9tc2kuZGF0YSk7Ci0JdTMyIGRlbGl2ZXJfYml0bWFzazsKLQotCUJVR19PTighaW9hcGljKTsKLQotCWRlbGl2ZXJfYml0bWFzayA9IGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soaW9hcGljLAotCQkJCWRlc3RfaWQsIGRlc3RfbW9kZSk7Ci0JLyogSU9BUElDIGRlbGl2ZXJ5IG1vZGUgdmFsdWUgaXMgdGhlIHNhbWUgYXMgTVNJIGhlcmUgKi8KLQlzd2l0Y2ggKGRlbGl2ZXJ5X21vZGUpIHsKLQljYXNlIElPQVBJQ19MT1dFU1RfUFJJT1JJVFk6Ci0JCXZjcHUgPSBrdm1fZ2V0X2xvd2VzdF9wcmlvX3ZjcHUoaW9hcGljLT5rdm0sIHZlY3RvciwKLQkJCQlkZWxpdmVyX2JpdG1hc2spOwotCQlpZiAodmNwdSAhPSBOVUxMKQotCQkJa3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gImt2bTogbnVsbCBsb3dlc3QgcHJpb3JpdHkgdmNwdSFcbiIpOwotCQlicmVhazsKLQljYXNlIElPQVBJQ19GSVhFRDoKLQkJZm9yICh2Y3B1X2lkID0gMDsgZGVsaXZlcl9iaXRtYXNrICE9IDA7IHZjcHVfaWQrKykgewotCQkJaWYgKCEoZGVsaXZlcl9iaXRtYXNrICYgKDEgPDwgdmNwdV9pZCkpKQotCQkJCWNvbnRpbnVlOwotCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKLQkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07Ci0JCQlpZiAodmNwdSkKLQkJCQlrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICJrdm06IHVuc3VwcG9ydGVkIE1TSSBkZWxpdmVyeSBtb2RlXG4iKTsKLQl9Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgYXNzaWduZWRfZGV2aWNlX21zaV9kaXNwYXRjaChzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmRldikge30KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICprdm1fZmluZF9hc3NpZ25lZF9kZXYoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJCSAgICAgIGludCBhc3NpZ25lZF9kZXZfaWQpCiB7CkBAIC0xNjIsMTggKzEwNywxNCBAQAogCSAqIGZpbmVyLWdyYWluZWQgbG9jaywgdXBkYXRlIHRoaXMKIAkgKi8KIAltdXRleF9sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7Ci0JaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYKQotCQlrdm1fc2V0X2lycShhc3NpZ25lZF9kZXYtPmt2bSwKLQkJCSAgICBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCi0JCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOwotCWVsc2UgaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYKLQkJCQlLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkgewotCQlhc3NpZ25lZF9kZXZpY2VfbXNpX2Rpc3BhdGNoKGFzc2lnbmVkX2Rldik7CisJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKKwkJICAgIGFzc2lnbmVkX2Rldi0+Z3Vlc3RfaXJxLCAxKTsKKworCWlmIChhc3NpZ25lZF9kZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJKSB7CiAJCWVuYWJsZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X2lycSk7CiAJCWFzc2lnbmVkX2Rldi0+aG9zdF9pcnFfZGlzYWJsZWQgPSBmYWxzZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7Ci0Ja3ZtX3B1dF9rdm0oYXNzaWduZWRfZGV2LT5rdm0pOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qga3ZtX2Fzc2lnbmVkX2Rldl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTE4MSw4ICsxMjIsNiBAQAogCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2ID0KIAkJKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqKSBkZXZfaWQ7CiAKLQlrdm1fZ2V0X2t2bShhc3NpZ25lZF9kZXYtPmt2bSk7Ci0KIAlzY2hlZHVsZV93b3JrKCZhc3NpZ25lZF9kZXYtPmludGVycnVwdF93b3JrKTsKIAogCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwpAQCAtMjEzLDYgKzE1Miw3IEBACiAJfQogfQogCisvKiBUaGUgZnVuY3Rpb24gaW1wbGljaXQgaG9sZCBrdm0tPmxvY2sgbXV0ZXggZHVlIHRvIGNhbmNlbF93b3JrX3N5bmMoKSAqLwogc3RhdGljIHZvaWQga3ZtX2ZyZWVfYXNzaWduZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2KQogewpAQCAtMjI4LDExICsxNjgsMjQgQEAKIAlpZiAoIWFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlKQogCQlyZXR1cm47CiAKLQlpZiAoY2FuY2VsX3dvcmtfc3luYygmYXNzaWduZWRfZGV2LT5pbnRlcnJ1cHRfd29yaykpCi0JCS8qIFdlIGhhZCBwZW5kaW5nIHdvcmsuIFRoYXQgbWVhbnMgd2Ugd2lsbCBoYXZlIHRvIHRha2UKLQkJICogY2FyZSBvZiBrdm1fcHV0X2t2bS4KLQkJICovCi0JCWt2bV9wdXRfa3ZtKGt2bSk7CisJLyoKKwkgKiBJbiBrdm1fZnJlZV9kZXZpY2VfaXJxLCBjYW5jZWxfd29ya19zeW5jIHJldHVybiB0cnVlIGlmOgorCSAqIDEuIHdvcmsgaXMgc2NoZWR1bGVkLCBhbmQgdGhlbiBjYW5jZWxsZWQuCisJICogMi4gd29yayBjYWxsYmFjayBpcyBleGVjdXRlZC4KKwkgKgorCSAqIFRoZSBmaXJzdCBvbmUgZW5zdXJlZCB0aGF0IHRoZSBpcnEgaXMgZGlzYWJsZWQgYW5kIG5vIG1vcmUgZXZlbnRzCisJICogd291bGQgaGFwcGVuLiBCdXQgZm9yIHRoZSBzZWNvbmQgb25lLCB0aGUgaXJxIG1heSBiZSBlbmFibGVkIChlLmcuCisJICogZm9yIE1TSSkuIFNvIHdlIGRpc2FibGUgaXJxIGhlcmUgdG8gcHJldmVudCBmdXJ0aGVyIGV2ZW50cy4KKwkgKgorCSAqIE5vdGljZSB0aGlzIG1heWJlIHJlc3VsdCBpbiBuZXN0ZWQgZGlzYWJsZSBpZiB0aGUgaW50ZXJydXB0IHR5cGUgaXMKKwkgKiBJTlR4LCBidXQgaXQncyBPSyBmb3Igd2UgYXJlIGdvaW5nIHRvIGZyZWUgaXQuCisJICoKKwkgKiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGEgcGFydCBvZiBWTSBkZXN0cm95LCBwbGVhc2UgZW5zdXJlIHRoYXQgdGlsbAorCSAqIG5vdywgdGhlIGt2bSBzdGF0ZSBpcyBzdGlsbCBsZWdhbCBmb3IgcHJvYmFibHkgd2UgYWxzbyBoYXZlIHRvIHdhaXQKKwkgKiBpbnRlcnJ1cHRfd29yayBkb25lLgorCSAqLworCWRpc2FibGVfaXJxX25vc3luYyhhc3NpZ25lZF9kZXYtPmhvc3RfaXJxKTsKKwljYW5jZWxfd29ya19zeW5jKCZhc3NpZ25lZF9kZXYtPmludGVycnVwdF93b3JrKTsKIAogCWZyZWVfaXJxKGFzc2lnbmVkX2Rldi0+aG9zdF9pcnEsICh2b2lkICopYXNzaWduZWRfZGV2KTsKIApAQCAtMjg1LDggKzIzOCw4IEBACiAKIAlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgewogCQlpZiAoIW1zaTJpbnR4ICYmCi0JCSAgICBhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0hPU1RfTVNJKSB7Ci0JCQlmcmVlX2lycShhZGV2LT5ob3N0X2lycSwgKHZvaWQgKilrdm0pOworCQkgICAgKGFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfSE9TVF9NU0kpKSB7CisJCQlmcmVlX2lycShhZGV2LT5ob3N0X2lycSwgKHZvaWQgKilhZGV2KTsKIAkJCXBjaV9kaXNhYmxlX21zaShhZGV2LT5kZXYpOwogCQl9CiAKQEAgLTMyMCwxOCArMjczLDI0IEBACiB7CiAJaW50IHI7CiAKKwlhZGV2LT5ndWVzdF9pcnEgPSBhaXJxLT5ndWVzdF9pcnE7CiAJaWYgKGFpcnEtPmZsYWdzICYgS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kpIHsKIAkJLyogeDg2IGRvbid0IGNhcmUgdXBwZXIgYWRkcmVzcyBvZiBndWVzdCBtc2kgbWVzc2FnZSBhZGRyICovCiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSTsKIAkJYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICY9IH5LVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7Ci0JCWFkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvID0gYWlycS0+Z3Vlc3RfbXNpLmFkZHJfbG87Ci0JCWFkZXYtPmd1ZXN0X21zaS5kYXRhID0gYWlycS0+Z3Vlc3RfbXNpLmRhdGE7CiAJCWFkZXYtPmFja19ub3RpZmllci5nc2kgPSAtMTsKIAl9IGVsc2UgaWYgKG1zaTJpbnR4KSB7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmPSB+S1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0k7Ci0JCWFkZXYtPmd1ZXN0X2lycSA9IGFpcnEtPmd1ZXN0X2lycTsKIAkJYWRldi0+YWNrX25vdGlmaWVyLmdzaSA9IGFpcnEtPmd1ZXN0X2lycTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBHdWVzdCByZXF1aXJlIHRvIGRpc2FibGUgZGV2aWNlIE1TSSwgd2UgZGlzYWJsZSBNU0kgYW5kCisJCSAqIHJlLWVuYWJsZSBJTlR4IGJ5IGRlZmF1bHQgYWdhaW4uIE5vdGljZSBpdCdzIG9ubHkgZm9yCisJCSAqIG5vbi1tc2kyaW50eC4KKwkJICovCisJCWFzc2lnbmVkX2RldmljZV91cGRhdGVfaW50eChrdm0sIGFkZXYsIGFpcnEpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX01TSSkKQEAgLTM2OCw2ICszMjcsNyBAQAogewogCWludCByID0gMDsKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCXUzMiBjdXJyZW50X2ZsYWdzID0gMCwgY2hhbmdlZF9mbGFnczsKIAogCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CiAKQEAgLTQwNSw4ICszNjUsMTMgQEAKIAkJfQogCX0KIAotCWlmICgoIW1zaTJpbnR4ICYmCi0JICAgICAoYXNzaWduZWRfaXJxLT5mbGFncyAmIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJKSkgfHwKKwlpZiAoKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0hPU1RfTVNJKSAmJgorCQkgKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkpCisJCWN1cnJlbnRfZmxhZ3MgfD0gS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0k7CisKKwljaGFuZ2VkX2ZsYWdzID0gYXNzaWduZWRfaXJxLT5mbGFncyBeIGN1cnJlbnRfZmxhZ3M7CisKKwlpZiAoKGNoYW5nZWRfZmxhZ3MgJiBLVk1fREVWX0lSUV9BU1NJR05fTVNJX0FDVElPTikgfHwKIAkgICAgKG1zaTJpbnR4ICYmIG1hdGNoLT5kZXYtPm1zaV9lbmFibGVkKSkgewogI2lmZGVmIENPTkZJR19YODYKIAkJciA9IGFzc2lnbmVkX2RldmljZV91cGRhdGVfbXNpKGt2bSwgbWF0Y2gsIGFzc2lnbmVkX2lycSk7CkBAIC00NTUsNiArNDIwLDcgQEAKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKKwlkb3duX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKIAogCW1hdGNoID0ga3ZtX2ZpbmRfYXNzaWduZWRfZGV2KCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQsCkBAIC01MTYsNiArNDgyLDcgQEAKIAogb3V0OgogCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwogb3V0X2xpc3RfZGVsOgogCWxpc3RfZGVsKCZtYXRjaC0+bGlzdCk7CkBAIC01MjcsNiArNDk0LDcgQEAKIG91dF9mcmVlOgogCWtmcmVlKG1hdGNoKTsKIAltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJdXBfcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKIAlyZXR1cm4gcjsKIH0KICNlbmRpZgpAQCAtNTQ5LDcgKzUxNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChhc3NpZ25lZF9kZXYtPmZsYWdzICYgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VKQorCWlmIChtYXRjaC0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpCiAJCWt2bV9kZWFzc2lnbl9kZXZpY2Uoa3ZtLCBtYXRjaCk7CiAKIAlrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoa3ZtLCBtYXRjaCk7CkBAIC01NjcsOCArNTM1LDEwIEBACiAKIGlubGluZSBpbnQga3ZtX2lzX21taW9fcGZuKHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCi0JCXJldHVybiBQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7CisJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gY29tcG91bmRfaGVhZChwZm5fdG9fcGFnZShwZm4pKTsKKwkJcmV0dXJuIFBhZ2VSZXNlcnZlZChwYWdlKTsKKwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTc4OSwxMSArNzU5LDE5IEBACiAJcmV0dXJuIHlvdW5nOwogfQogCitzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX3JlbGVhc2Uoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCisJCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3Qga3ZtICprdm0gPSBtbXVfbm90aWZpZXJfdG9fa3ZtKG1uKTsKKwlrdm1fYXJjaF9mbHVzaF9zaGFkb3coa3ZtKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9tbXVfbm90aWZpZXJfb3BzID0gewogCS5pbnZhbGlkYXRlX3BhZ2UJPSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcGFnZSwKIAkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydAk9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKIAkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLAogCS5jbGVhcl9mbHVzaF95b3VuZwk9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsCisJLnJlbGVhc2UJCT0ga3ZtX21tdV9ub3RpZmllcl9yZWxlYXNlLAogfTsKICNlbmRpZiAvKiBDT05GSUdfTU1VX05PVElGSUVSICYmIEtWTV9BUkNIX1dBTlRfTU1VX05PVElGSUVSICovCiAKQEAgLTgwNiw2ICs3ODQsMTAgQEAKIAogCWlmIChJU19FUlIoa3ZtKSkKIAkJZ290byBvdXQ7CisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFfcm91dGluZyk7CisJSU5JVF9ITElTVF9IRUFEKCZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7CisjZW5kaWYKIAogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKQEAgLTg4Myw5ICs4NjUsMTEgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGt2bS0+bW07CiAKKwlrdm1fYXJjaF9zeW5jX2V2ZW50cyhrdm0pOwogCXNwaW5fbG9jaygma3ZtX2xvY2spOwogCWxpc3RfZGVsKCZrdm0tPnZtX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7CisJa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoa3ZtKTsKIAlrdm1faW9fYnVzX2Rlc3Ryb3koJmt2bS0+cGlvX2J1cyk7CiAJa3ZtX2lvX2J1c19kZXN0cm95KCZrdm0tPm1taW9fYnVzKTsKICNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKQEAgLTE3MzIsMTMgKzE3MTYsMTMgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KLQljYXNlIEtWTV9ERUJVR19HVUVTVDogewotCQlzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0IGRiZzsKKwljYXNlIEtWTV9TRVRfR1VFU1RfREVCVUc6IHsKKwkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyBkYmc7CiAKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZGJnLCBhcmdwLCBzaXplb2YgZGJnKSkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdCh2Y3B1LCAmZGJnKTsKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHZjcHUsICZkYmcpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKQEAgLTE5MDYsNiArMTg5MCwzNiBAQAogCQlicmVhazsKIAl9CiAjZW5kaWYKKyNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCisJY2FzZSBLVk1fU0VUX0dTSV9ST1VUSU5HOiB7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmcgcm91dGluZzsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZyBfX3VzZXIgKnVyb3V0aW5nOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICplbnRyaWVzOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJvdXRpbmcsIGFyZ3AsIHNpemVvZihyb3V0aW5nKSkpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FSU5WQUw7CisJCWlmIChyb3V0aW5nLm5yID49IEtWTV9NQVhfSVJRX1JPVVRFUykKKwkJCWdvdG8gb3V0OworCQlpZiAocm91dGluZy5mbGFncykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVOT01FTTsKKwkJZW50cmllcyA9IHZtYWxsb2Mocm91dGluZy5uciAqIHNpemVvZigqZW50cmllcykpOworCQlpZiAoIWVudHJpZXMpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCXVyb3V0aW5nID0gYXJncDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGVudHJpZXMsIHVyb3V0aW5nLT5lbnRyaWVzLAorCQkJCSAgIHJvdXRpbmcubnIgKiBzaXplb2YoKmVudHJpZXMpKSkKKwkJCWdvdG8gb3V0X2ZyZWVfaXJxX3JvdXRpbmc7CisJCXIgPSBrdm1fc2V0X2lycV9yb3V0aW5nKGt2bSwgZW50cmllcywgcm91dGluZy5uciwKKwkJCQkJcm91dGluZy5mbGFncyk7CisJb3V0X2ZyZWVfaXJxX3JvdXRpbmc6CisJCXZmcmVlKGVudHJpZXMpOworCQlicmVhazsKKwl9CisjZW5kaWYKIAlkZWZhdWx0OgogCQlyID0ga3ZtX2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CiAJfQpAQCAtMTk3Miw2ICsxOTg2LDEwIEBACiAJY2FzZSBLVk1fQ0FQX1VTRVJfTUVNT1JZOgogCWNhc2UgS1ZNX0NBUF9ERVNUUk9ZX01FTU9SWV9SRUdJT05fV09SS1M6CiAJCXJldHVybiAxOworI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisJY2FzZSBLVk1fQ0FQX0lSUV9ST1VUSU5HOgorCQlyZXR1cm4gS1ZNX01BWF9JUlFfUk9VVEVTOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQo=